From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dario Faggioli Subject: Re: [PATCH v8 for Xen 4.7 4/4] xl: enable per-VCPU parameter for RTDS Date: Thu, 31 Mar 2016 19:17:57 +0200 Message-ID: <1459444677.5082.203.camel@citrix.com> References: <1458336385-2606-1-git-send-email-lichong659@gmail.com> <1458336385-2606-5-git-send-email-lichong659@gmail.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="===============9164071864683178164==" Return-path: In-Reply-To: <1458336385-2606-5-git-send-email-lichong659@gmail.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Chong Li , xen-devel@lists.xen.org Cc: Chong Li , wei.liu2@citrix.com, Sisu Xi , george.dunlap@eu.citrix.com, Meng Xu , dgolomb@seas.upenn.edu List-Id: xen-devel@lists.xenproject.org --===============9164071864683178164== Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="=-b3JgfeqNRVoqfTgyHwp7" --=-b3JgfeqNRVoqfTgyHwp7 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 T24gRnJpLCAyMDE2LTAzLTE4IGF0IDE2OjI2IC0wNTAwLCBDaG9uZyBMaSB3cm90ZToKPiBDaGFu Z2UgbWFpbl9zY2hlZF9ydGRzIGFuZCByZWxhdGVkIG91dHB1dCBmdW5jdGlvbnMgdG8gc3VwcG9y dAo+IHBlci1WQ1BVIHNldHRpbmdzLgo+IAo+IFNpZ25lZC1vZmYtYnk6IENob25nIExpIDxjaG9u Zy5saUB3dXN0bC5lZHU+Cj4gU2lnbmVkLW9mZi1ieTogTWVuZyBYdSA8bWVuZ3h1QGNpcy51cGVu bi5lZHU+Cj4gU2lnbmVkLW9mZi1ieTogU2lzdSBYaSA8eGlzaXN1QGdtYWlsLmNvbT4KPiAKCk9r LCBzbywgaW1wb3J0aW5nIHRoaXMgcGF0Y2ggdGVsbHMgbWUgdGhpczoKCiQgc3RnIGltcG9ydCAt TSAvaG9tZS9kYXJpby9bWGVuLWRldmVsXV9bUEFUQ0hfdjhfZm9yX1hlbl80LjdfNF80XV94bDpf ZW5hYmxlX3Blci1WQ1BVX3BhcmFtZXRlcl9mb3JfUlREUy5tYm94wqAKQ2hlY2tpbmcgZm9yIGNo YW5nZXMgaW4gdGhlIHdvcmtpbmcgZGlyZWN0b3J5IC4uLiBkb25lCkltcG9ydGluZyBwYXRjaCAi eGwtZW5hYmxlLXBlci12Y3B1LXBhcmFtZXRlciIgLi4uIDxzdGRpbj46Njc6IHRyYWlsaW5nIHdo aXRlc3BhY2UuCjEpIHNob3cgdGhlIGJ1ZGdldCBhbmQgcGVyaW9kIG9mIGVhY2ggVkNQVSBvZiBl YWNoIGRvbWFpbizCoAo8c3RkaW4+Ojk2OiB0cmFpbGluZyB3aGl0ZXNwYWNlLgoyKSBzaG93IHRo ZSBidWRnZXQgYW5kIHBlcmlvZCBvZiBlYWNoIFZDUFUgb2YgYSBzcGVjaWZpYyBkb21haW4swqAK PHN0ZGluPjo5NzogdHJhaWxpbmcgd2hpdGVzcGFjZS4KYnkgdXNpbmcsIGUuZy4sICJ4bCBzY2hl ZC1ydGRzIC1kIHZtMSAtdiBhbGwiIGNvbW1hbmQuIFRoZSBvdXRwdXTCoAo8c3RkaW4+OjEwODog dHJhaWxpbmcgd2hpdGVzcGFjZS4KVG8gc2hvdyBhIHN1YnNldCBvZiB0aGUgcGFyYW1ldGVycyBv ZiB0aGUgVkNQVXMgb2YgYSBzcGVjaWZpYyBkb21haW4swqAKPHN0ZGluPjoxMDk6IHRyYWlsaW5n IHdoaXRlc3BhY2UuCnBsZWFzZSB1c2UsIGUuZy4sInhsIHNjaGVkLXJ0ZHMgLWQgdm0xIC12IDAg LXYgMyIgY29tbWFuZC7CoAplcnJvcjogcGF0Y2ggZmFpbGVkOiB0b29scy9saWJ4bC94bF9jbWRp bXBsLmM6NjIxNQplcnJvcjogdG9vbHMvbGlieGwveGxfY21kaW1wbC5jOiBwYXRjaCBkb2VzIG5v dCBhcHBseQpzdGcgaW1wb3J0OiBEaWZmIGRvZXMgbm90IGFwcGx5IGNsZWFubHkKCldoaWxlIGp1 c3QgYXBwbHlpbmcgaXQsIHRlbGxzIG1lIHRoaXM6CgokIHBhdGNoIC1wMSA8IC9ob21lL2Rhcmlv L1xbWGVuLWRldmVsXF1fXFtQQVRDSF92OF9mb3JfWGVuXzQuN180XzRcXV94bFw6X2VuYWJsZV9w ZXItVkNQVV9wYXJhbWV0ZXJfZm9yX1JURFMubWJveMKgCnBhdGNoaW5nIGZpbGUgZG9jcy9tYW4v eGwucG9kLjEKcGF0Y2hpbmcgZmlsZSB0b29scy9saWJ4bC94bF9jbWRpbXBsLmMKSHVuayAjMSBz dWNjZWVkZWQgYXQgNjEzNyAob2Zmc2V0IDMxNCBsaW5lcykuCkh1bmsgIzIgc3VjY2VlZGVkIGF0 IDYzMDIgKG9mZnNldCAzMTQgbGluZXMpLgpIdW5rICMzIHN1Y2NlZWRlZCBhdCA2NDA2IChvZmZz ZXQgMzE0IGxpbmVzKS4KSHVuayAjNCBGQUlMRUQgYXQgNjM1MS4KMSBvdXQgb2YgNCBodW5rcyBG QUlMRUQgLS0gc2F2aW5nIHJlamVjdHMgdG8gZmlsZSB0b29scy9saWJ4bC94bF9jbWRpbXBsLmMu cmVqCnBhdGNoaW5nIGZpbGUgdG9vbHMvbGlieGwveGxfY21kdGFibGUuYwoKU28sIHN0aWxsIHNv bWUgdHJhaWxpbmcgd2hpdGUgc3BhY2VzLCBhbmQgc29tZSByZWJhc2luZyBpc3N1ZS4KQWN0dWFs bHksIHRoZSBmYWlsZWQgaHVuayBpcyBwb3NzaWJseSBjYXVzZWQgYnkgZGVsYXkgaW4gcmV2aWV3 aW5nLCBhbmQKSSdtIHNvcnJ5IGZvciB0aGlzLiBJJ3ZlIGhhZCBhIGxvb2sgYXQgdGhlIC5yZWos IGFuZCBJJ20gbm90IHN1cmUgSSBzZWUKd2hhdCBpcyByZWFsbHkgZ29pbmcgd3JvbmcuLi4gQ2Fu IHlvdSBoYXZlIGEgbG9vayB5b3Vyc2VsZj8KCkFib3V0IHRoZSB0cmFpbGluZ3MsIHRoZWlyIGlu IGV4YW1wbGVzLCBub3QgaW4gY29kZS4gU3RpbGwsIEknZCBhc2sgeW91CnRvIGZpeCB0aGVtLgoK PiAtLS0gYS9kb2NzL21hbi94bC5wb2QuMQo+ICsrKyBiL2RvY3MvbWFuL3hsLnBvZC4xCj4gQEAg LTEwNTEsNiArMTA1MSwxMCBAQCBCPE9QVElPTlM+Cj4gwqBTcGVjaWZ5IGRvbWFpbiBmb3Igd2hp Y2ggc2NoZWR1bGVyIHBhcmFtZXRlcnMgYXJlIHRvIGJlIG1vZGlmaWVkIG9yCj4gcmV0cmlldmVk Lgo+IMKgTWFuZGF0b3J5IGZvciBtb2RpZnlpbmcgc2NoZWR1bGVyIHBhcmFtZXRlcnMuCj4gwqAK PiArPWl0ZW0gQjwtdiBWQ1BVSUQvYWxsPiwgQjwtLXZjcHVpZD1WQ1BVSUQvYWxsPgo+ICsKPiAr U3BlY2lmeSB2Y3B1IGZvciB3aGljaCBzY2hlZHVsZXIgcGFyYW1ldGVycyBhcmUgdG8gYmUgbW9k aWZpZWQgb3IKPiByZXRyaWV2ZWQuCj4gKwo+IMKgPWl0ZW0gQjwtcCBQRVJJT0Q+LCBCPC0tcGVy aW9kPVBFUklPRD4KPiDCoAo+IMKgUGVyaW9kIG9mIHRpbWUsIGluIG1pY3Jvc2Vjb25kcywgb3Zl ciB3aGljaCB0byByZXBsZW5pc2ggdGhlIGJ1ZGdldC4KPiBAQCAtMTA2Niw2ICsxMDcwLDc5IEBA IFJlc3RyaWN0IG91dHB1dCB0byBkb21haW5zIGluIHRoZSBzcGVjaWZpZWQKPiBjcHVwb29sLgo+ IMKgCj4gwqA9YmFjawo+IMKgCj4gK0I8RVhBTVBMRT4KPiArCj4gKz1vdmVyIDQKPiArCj4gKzEp IHNob3cgdGhlIGJ1ZGdldCBhbmQgcGVyaW9kIG9mIGVhY2ggVkNQVSBvZiBlYWNoIGRvbWFpbizC oAo+ICtieSB1c2luZyAieGwgc2NoZWQtcnRkcyAtdiBhbGwiIGNvbW1hbmQuIEFuIGV4YW1wbGUg d291bGQgYmUgbGlrZToKPiArCsKgVXNlIEI8LXYgYWxsPiB0byBzZWUgdGhlIGJ1ZGdldCBhbmQg cGVyaW9kIG9mIGFsbCB0aGUgVkNQVXMgb2YKwqBhbGwgdGhlIGRvbWFpbnM6Cgo+ICt4bCBzY2hl ZC1ydGRzIC12IGFsbAo+ICsKPiArQ3B1cG9vbCBQb29sLTA6IHNjaGVkPVJURFMKPiArCj4gK8Kg wqDCoMKgTmFtZcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBJRCBWQ1BVwqDCoMKgwqBQZXJpb2TCoMKgwqDCoEJ1ZGdldAo+ICvC oMKgwqDCoERvbWFpbi0wwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoDDCoMKgwqDCoDDCoMKgwqDCoMKgMTAwMDDCoMKgwqDCoMKgwqA0MDAw Cj4gK8KgwqDCoMKgdm0xwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAxwqDCoMKgwqAwwqDCoMKgwqDCoMKgwqAzMDDCoMKg wqDCoMKgwqDCoDE1MAo+ICvCoMKgwqDCoHZtMcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMcKgwqDCoMKgMcKgwqDCoMKg wqDCoMKgNDAwwqDCoMKgwqDCoMKgwqAyMDAKPiArwqDCoMKgwqB2bTHCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDHCoMKg wqDCoDLCoMKgwqDCoMKgMTAwMDDCoMKgwqDCoMKgwqA0MDAwCj4gK8KgwqDCoMKgdm0xwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAxwqDCoMKgwqAzwqDCoMKgwqDCoMKgMTAwMMKgwqDCoMKgwqDCoMKgNTAwCj4gK8KgwqDC oMKgdm0ywqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAywqDCoMKgwqAwwqDCoMKgwqDCoDEwMDAwwqDCoMKgwqDCoMKgNDAw MAo+ICvCoMKgwqDCoHZtMsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMsKgwqDCoMKgMcKgwqDCoMKgwqAxMDAwMMKgwqDC oMKgwqDCoDQwMDAKPgpDb21tYW5kIGFuZCBjb21tYW5kIG91dHB1dCBzaG91bGQgYmUgaW5kZW50 ZWQuIExvb2tpbmcgYXQgdGhlIHJlc3Qgb2YKdGhlIGZpbGUsIDIgc3BhY2VzIGxvb2tzIHdoYXQg aXMgbW9zdGx5IGluIG90aGVyIHBsYWNlcy4KCkl0IGxvb2tzIGJldHRlciBhbmQsIEkgdGhpbmss IGl0IHdvdWxkIGhhdmUgYW4gYWN0dWFsIGVmZmVjdCBpbiB0aGUKcmVuZGVyZWQgbWFucGFnZS4K CkluIG9yZGVyIHRvIHByZXZlbnQgdGhlIGxpbmUgZm9yIGdldHRpbmcgdG8gbG9uZywgZmVlbCBm cmVlIHRvIG1hbmdsZQp0aGUgb3V0cHV0IGEgbGl0dGxlIGJpdCwgYW5kIGxvc2Ugc29tZSBvZiB0 aGUgc3BhY2VzIGJldHdlZW4gdGhlIGRvbWFpbgpuYW1lcyBhbmQgdGhlaXIgSURzLgoKPiArVXNp bmcgInhsIHNjaGVkLXJ0ZHMiIHdpbGwgb3V0cHV0IHRoZSBkZWZhdWx0IHNjaGVkdWxpbmcgcGFy YW1ldGVycwo+ICtmb3IgZWFjaCBkb21haW4uIEFuIGV4YW1wbGUgd291bGQgYmUgbGlrZToKPiAr CsKgV2l0aG91dCBhbnkgYXJndW1lbnRzLCBpdCB3aWxsIG91dHB1dCB0aGUgZGVmYXVsdCBzY2hl ZHVsaW5nCsKgcGFyYW1ldGVycyBmb3IgZWFjaCBkb21haW46Cgo+ICt4bCBzY2hlZC1ydGRzCj4g Kwo+ICtDcHVwb29sIFBvb2wtMDogc2NoZWQ9UlREUwo+ICsKPiArwqDCoMKgwqBOYW1lwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oElEwqDCoMKgwqBQZXJpb2TCoMKgwqDCoEJ1ZGdldAo+ICvCoMKgwqDCoERvbWFpbi0wwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDDCoMKg wqDCoMKgMTAwMDDCoMKgwqDCoMKgwqA0MDAwCj4gK8KgwqDCoMKgdm0xwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAxwqDC oMKgwqDCoDEwMDAwwqDCoMKgwqDCoMKgNDAwMAo+ICvCoMKgwqDCoHZtMsKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMsKg wqDCoMKgwqAxMDAwMMKgwqDCoMKgwqDCoDQwMDAKPgpTYW1lIGhlcmUgYWJvdXQgaW5kZW50YXRp b24gKGFuZCBldmVyeXdoZXJlIGVsc2UgYmVsb3csIHNvIEknbGwgYXZvaWQKcmVwZWF0aW5nIHRo aXMpCgo+ICsyKSBzaG93IHRoZSBidWRnZXQgYW5kIHBlcmlvZCBvZiBlYWNoIFZDUFUgb2YgYSBz cGVjaWZpYyBkb21haW4swqAKPiArYnkgdXNpbmcsIGUuZy4sICJ4bCBzY2hlZC1ydGRzIC1kIHZt MSAtdiBhbGwiIGNvbW1hbmQuIFRoZSBvdXRwdXTCoAo+ICt3b3VsZCBiZSBsaWtlOgo+ICsKwqBV c2UsIGZvciBpbnN0YW5jZSBCPC1kIHZtMSAtdiBhbGw+IHRvIHNlZSB0aGUgYnVkZ2V0IGFuZCBw ZXJpb2Qgb2YgYWxsCsKgVkNQVXMgb2YgYSBzcGVjaWZpYyBkb21haW4gKEI8dm0xPik6Cgo+ICtU byBzaG93IGEgc3Vic2V0IG9mIHRoZSBwYXJhbWV0ZXJzIG9mIHRoZSBWQ1BVcyBvZiBhIHNwZWNp ZmljCj4gZG9tYWluLMKgCj4gK3BsZWFzZSB1c2UsIGUuZy4sInhsIHNjaGVkLXJ0ZHMgLWQgdm0x IC12IDAgLXYgMyIgY29tbWFuZC7CoAo+ICtUaGUgb3V0cHV0IHdvdWxkIGJlOgo+ICsKwqBUbyBz ZWUgdGhlIHBhcmFtZXRlcnMgb2YgYSBzdWJzZXQgb2YgdGhlIFZDUFVzIG9mIGEgZG9tYWluLCB1 c2U6Cgo+ICt4bCBzY2hlZC1ydGRzIC1kIHZtMSAtdiAwIC12IDMKPiArCj4gK8KgwqDCoMKgTmFt ZcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBJRCBWQ1BVwqDCoMKgwqBQZXJpb2TCoMKgwqDCoEJ1ZGdldAo+ICvCoMKgwqDCoHZt McKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgMcKgwqDCoMKgMMKgwqDCoMKgwqDCoMKgMzAwwqDCoMKgwqDCoMKgwqAxNTAK PiArwqDCoMKgwqB2bTHCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDHCoMKgwqDCoDPCoMKgwqDCoMKgwqAxMDAwwqDCoMKg wqDCoMKgwqA1MDAKPiArCj4gK1VzaW5nIGNvbW1hbmQsIGUuZy4sICJ4bCBzY2hlZC1ydGRzIC1k IHZtMSIgd2lsbCBvdXRwdXQgdGhlIGRlZmF1bHQKPiArc2NoZWR1bGluZyBwYXJhbWV0ZXJzIG9m IHZtMS4gQW4gZXhhbXBsZSB3b3VsZCBiZSBsaWtlOgo+ICsKwqBJZiBubyBCPC12PiBpcyBzcGVj aWZpZWQsIHRoZSBkZWZhdWx0IHNjaGVkdWxpbmcgcGFyYW1ldGVyIGZvciB0aGUKwqBkb21haW4g YXJlIHNob3duOgoKPiAreGwgc2NoZWQtcnRkcyAtZCB2bTEKPiArCj4gK8KgwqDCoMKgTmFtZcKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBJRMKgwqDCoMKgUGVyaW9kwqDCoMKgwqBCdWRnZXQKPiArwqDCoMKgwqB2bTHCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoDHCoMKgwqDCoMKgMTAwMDDCoMKgwqDCoMKgwqA0MDAwCj4gKwo+ICsKCj4gKzMpIFVzZXJz IGNhbiBzZXQgdGhlIGJ1ZGdldCBhbmQgcGVyaW9kIG9mIG11bHRpcGxlIFZDUFVzIG9mIGHCoAo+ ICtzcGVjaWZpYyBkb21haW4gd2l0aCBvbmx5IG9uZSBjb21tYW5kLMKgCsKgSXQgaXMgcG9zc2li bGUgdG8gY2hhbmdlIHRoZSBidWRnZXQgYW5kIHRoZSBwZXJpb2Qgb2YgbXVsdGlwbGUgVkNQVXPC oArCoG9mIGEgZG9tYWluIHdpdGgganVzdCBvbmUgY29tbWFuZCwgZm9yIGluc3RhbmNlOgoKPiAr ZS5nLiwgInhsIHNjaGVkLXJ0ZHMgLWQgdm0xIC12IDAgLXAgMTAwIC1iIDUwIC12IDMgLXAgMzAw IC1iIDE1MCIuCj4gKwo+ICtVc2VycyBjYW4gc2V0IGFsbCBWQ1BVcyB3aXRoIHRoZSBzYW1lIHBh cmFtZXRlcnMsIGJ5IG9uZSBjb21tYW5kLgrCoFRvIGNoYW5nZSB0aGUgcGFyYW1ldGVycyBvZiBh bGwgdGhlIFZDUFVzIG9mIGEgZG9tYWluLCB1c2UgQjwtdiBhbGw+OgoKPiAtLS0gYS90b29scy9s aWJ4bC94bF9jbWRpbXBsLmMKPiArKysgYi90b29scy9saWJ4bC94bF9jbWRpbXBsLmMKPiBAQCAt NTgyMyw2ICs1ODIzLDUyIEBAIHN0YXRpYyBpbnQgc2NoZWRfZG9tYWluX3NldChpbnQgZG9taWQs IGNvbnN0Cj4gbGlieGxfZG9tYWluX3NjaGVkX3BhcmFtcyAqc2NpbmZvKQo+IMKgwqDCoMKgwqBy ZXR1cm4gMDsKPiDCoH0KPiDCoAo+ICtzdGF0aWMgaW50IHNjaGVkX3ZjcHVfZ2V0KGxpYnhsX3Nj aGVkdWxlciBzY2hlZCwgaW50IGRvbWlkLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbGlieGxfdmNwdV9zY2hlZF9wYXJhbXMgKnNjaW5mbykK PiArewo+ICvCoMKgwqDCoGludCByYzsKPiArCj4gK8KgwqDCoMKgcmMgPSBsaWJ4bF92Y3B1X3Nj aGVkX3BhcmFtc19nZXQoY3R4LCBkb21pZCwgc2NpbmZvKTsKPiArwqDCoMKgwqBpZiAocmMpIHsK PiArwqDCoMKgwqDCoMKgwqDCoGZwcmludGYoc3RkZXJyLCAibGlieGxfdmNwdV9zY2hlZF9wYXJh bXNfZ2V0IGZhaWxlZC5cbiIpOwo+ICvCoMKgwqDCoMKgwqDCoMKgZXhpdCgtMSk7Cj4gK8KgwqDC oMKgfQpGb3IgbmV3IGNvZGUsIGxldCdzIHVzZSBFWElUX1NVQ0NFU1MgYW5kIEVYSVRfRkFJTFVS RS4KCk9oLCBqdXN0IGluIGNhc2UsIHRoYXQgYXBwbGllcyB0byB3aGVuIGV4aXQoKSBpcyB1c2Vk LCBzby4uLgoKPiArwqDCoMKgwqBpZiAoc2NpbmZvLT5zY2hlZCAhPSBzY2hlZCkgewo+ICvCoMKg wqDCoMKgwqDCoMKgZnByaW50ZihzdGRlcnIsICJsaWJ4bF92Y3B1X3NjaGVkX3BhcmFtc19nZXQg cmV0dXJuZWQgJXMgbm90Cj4gJXMuXG4iLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoGxpYnhsX3NjaGVkdWxlcl90b19zdHJpbmcoc2NpbmZvLT5zY2hlZCksCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbGlieGxfc2NoZWR1bGVyX3RvX3N0cmluZyhzY2hlZCkp Owo+ICvCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIDE7Cj4gK8KgwqDCoMKgfQo+ICsKPiArwqDCoMKg wqByZXR1cm4gMDsKPiArfQo+ICsKLi4uIHRoZXNlIHR3byByZXR1cm5zIGFyZSBvayB0byBiZSAx IGFuZCAwLgoKPiArc3RhdGljIGludCBzY2hlZF92Y3B1X3NldChpbnQgZG9taWQsIGNvbnN0IGxp YnhsX3ZjcHVfc2NoZWRfcGFyYW1zCj4gKnNjaW5mbykKPiArewo+ICvCoMKgwqDCoGludCByYzsK PiArCj4gK8KgwqDCoMKgcmMgPSBsaWJ4bF92Y3B1X3NjaGVkX3BhcmFtc19zZXQoY3R4LCBkb21p ZCwgc2NpbmZvKTsKPiArwqDCoMKgwqBpZiAocmMpIHsKPiArwqDCoMKgwqDCoMKgwqDCoGZwcmlu dGYoc3RkZXJyLCAibGlieGxfdmNwdV9zY2hlZF9wYXJhbXNfc2V0IGZhaWxlZC5cbiIpOwo+ICvC oMKgwqDCoMKgwqDCoMKgZXhpdCgtMSk7Cj4gK8KgwqDCoMKgfQo+ICsKPiArwqDCoMKgwqByZXR1 cm4gcmM7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgc2NoZWRfdmNwdV9zZXRfYWxsKGludCBkb21p ZCwgY29uc3QKPiBsaWJ4bF92Y3B1X3NjaGVkX3BhcmFtcyAqc2NpbmZvKQo+ICt7Cj4gK8KgwqDC oMKgaW50IHJjOwo+ICsKPiArwqDCoMKgwqByYyA9IGxpYnhsX3ZjcHVfc2NoZWRfcGFyYW1zX3Nl dF9hbGwoY3R4LCBkb21pZCwgc2NpbmZvKTsKPiArwqDCoMKgwqBpZiAocmMpIHsKPiArwqDCoMKg wqDCoMKgwqDCoGZwcmludGYoc3RkZXJyLCAibGlieGxfdmNwdV9zY2hlZF9wYXJhbXNfc2V0IGZh aWxlZC5cbiIpOwo+ICvCoMKgwqDCoMKgwqDCoMKgZXhpdCgtMSk7Cj4gK8KgwqDCoMKgfQo+ICsK PiArwqDCoMKgwqByZXR1cm4gcmM7Cj4gK30KPiArClRoZXNlIHR3byBmdW5jdGlvbnMgZWl0aGVy IHRlcm1pbmF0ZSB0aGUgcHJvZ3JhbSwgb3IgcmV0dXJuIDAuIFRoYXQKbWVhbnMgdGhleSBjYW4g YmUgdm9pZC4KCj4gQEAgLTU5NDIsNiArNTk4OCwzNyBAQCBzdGF0aWMgaW50IHNjaGVkX3J0ZHNf ZG9tYWluX291dHB1dCgKPiDCoMKgwqDCoMKgcmV0dXJuIDA7Cj4gwqB9Cj4gwqAKPiArc3RhdGlj IGludCBzY2hlZF9ydGRzX3ZjcHVfb3V0cHV0KGludCBkb21pZCwgbGlieGxfdmNwdV9zY2hlZF9w YXJhbXMKPiAqc2NpbmZvKQo+ICt7Cj4gK8KgwqDCoMKgY2hhciAqZG9tbmFtZTsKPiArwqDCoMKg wqBpbnQgcmMgPSAwOwo+ICvCoMKgwqDCoGludCBpOwo+ICsKPiArwqDCoMKgwqBpZiAoZG9taWQg PCAwKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqBwcmludGYoIiUtMzNzICU0cyAlNHMgJTlzICU5c1xu IiwgIk5hbWUiLCAiSUQiLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAiVkNQVSIs ICJQZXJpb2QiLCAiQnVkZ2V0Iik7Cj4gK8KgwqDCoMKgwqDCoMKgwqByZXR1cm4gMDsKPiArwqDC oMKgwqB9Cj4gKwo+ICvCoMKgwqDCoHJjID0gc2NoZWRfdmNwdV9nZXQoTElCWExfU0NIRURVTEVS X1JURFMsIGRvbWlkLCBzY2luZm8pOwo+ICvCoMKgwqDCoGlmIChyYykKPiArwqDCoMKgwqDCoMKg wqDCoGdvdG8gb3V0Owo+ICsKSSBkb24ndCBzZWUgdGhlIG5lZWQgZm9yIHByb3BhZ2F0aW5nIHJj Li4uIFRoaXMgc2hvdWxkIGp1c3QgcmV0dXJuIDAgb3IKMSwgbGlrZSwgZm9yIGluc3RhbmNlLCBz Y2hlZF9jcmVkaXRfZG9tYWluX291dHB1dCgpIGlzIGRvaW5nLCBkb2Vzbid0Cml0PwoKPiBAQCAt NjAxNSw2ICs2MDkyLDY1IEBAIHN0YXRpYyBpbnQgc2NoZWRfZG9tYWluX291dHB1dChsaWJ4bF9z Y2hlZHVsZXIKPiBzY2hlZCwgaW50ICgqb3V0cHV0KShpbnQpLAo+IMKgwqDCoMKgwqByZXR1cm4g MDsKPiDCoH0KPiDCoAo+ICtzdGF0aWMgaW50IHNjaGVkX3ZjcHVfb3V0cHV0KGxpYnhsX3NjaGVk dWxlciBzY2hlZCwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGludCAoKm91dHB1dCkoaW50LAo+IGxpYnhsX3ZjcHVfc2NoZWRfcGFy YW1zICopLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgaW50ICgqcG9vbG91dHB1dCkodWludDMyX3QpLCBjb25zdCBjaGFyCj4gKmNw dXBvb2wpCj4gK3sKPiArwqDCoMKgwqBsaWJ4bF9kb21pbmZvICppbmZvOwo+ICvCoMKgwqDCoGxp YnhsX2NwdXBvb2xpbmZvICpwb29saW5mbyA9IE5VTEw7Cj4gK8KgwqDCoMKgdWludDMyX3QgcG9v bGlkOwo+ICvCoMKgwqDCoGludCBuYl9kb21haW4sIG5fcG9vbHMgPSAwLCBpLCBwOwo+ICvCoMKg wqDCoGludCByYyA9IDA7Cj4gKwo+ICvCoMKgwqDCoGlmIChjcHVwb29sKSB7Cj4gK8KgwqDCoMKg wqDCoMKgwqBpZiAobGlieGxfY3B1cG9vbF9xdWFsaWZpZXJfdG9fY3B1cG9vbGlkKGN0eCwgY3B1 cG9vbCwKPiAmcG9vbGlkLCBOVUxMKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8fCAhbGli eGxfY3B1cG9vbGlkX2lzX3ZhbGlkKGN0eCwgcG9vbGlkKSkgewo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBmcHJpbnRmKHN0ZGVyciwgInVua25vd24gY3B1cG9vbCBcJyVzXCdcbiIsIGNwdXBv b2wpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gMTsKPiArwqDCoMKgwqDCoMKg wqDCoH0KPiArwqDCoMKgwqB9Cj4gKwo+ICvCoMKgwqDCoGluZm8gPSBsaWJ4bF9saXN0X2RvbWFp bihjdHgsICZuYl9kb21haW4pOwo+ICvCoMKgwqDCoGlmICghaW5mbykgewo+ICvCoMKgwqDCoMKg wqDCoMKgZnByaW50ZihzdGRlcnIsICJsaWJ4bF9saXN0X2RvbWFpbiBmYWlsZWQuXG4iKTsKPiAr wqDCoMKgwqDCoMKgwqDCoHJldHVybiAxOwo+ICvCoMKgwqDCoH0KPiArwqDCoMKgwqBwb29saW5m byA9IGxpYnhsX2xpc3RfY3B1cG9vbChjdHgsICZuX3Bvb2xzKTsKPiArwqDCoMKgwqBpZiAoIXBv b2xpbmZvKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqBmcHJpbnRmKHN0ZGVyciwgImVycm9yIGdldHRp bmcgY3B1cG9vbCBpbmZvXG4iKTsKPiArwqDCoMKgwqDCoMKgwqDCoGxpYnhsX2RvbWluZm9fbGlz dF9mcmVlKGluZm8sIG5iX2RvbWFpbik7Cj4gK8KgwqDCoMKgwqDCoMKgwqByZXR1cm4gMTsKPiAr wqDCoMKgwqB9Cj4gKwo+ICvCoMKgwqDCoGZvciAocCA9IDA7ICFyYyAmJiAocCA8IG5fcG9vbHMp OyBwKyspIHsKPiArwqDCoMKgwqDCoMKgwqDCoGlmICgocG9vbGluZm9bcF0uc2NoZWQgIT0gc2No ZWQpIHx8Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoChjcHVwb29sICYmIChwb29saWQgIT0g cG9vbGluZm9bcF0ucG9vbGlkKSkpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNvbnRpbnVl Owo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoHBvb2xvdXRwdXQocG9vbGluZm9bcF0ucG9vbGlkKTsK PiArCj4gK8KgwqDCoMKgwqDCoMKgwqBsaWJ4bF92Y3B1X3NjaGVkX3BhcmFtcyBzY2luZm9fb3V0 Owo+ClZhcmlhYmxlcyBzaG91bGQgYmUgZGVjbGFyZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUg YmxvY2ssIGkuZS4sIGp1c3QKYmVsb3cgZm9yKCl7LCBpbiB0aGlzIGNhc2UuCgo+ICvCoMKgwqDC oMKgwqDCoMKgbGlieGxfdmNwdV9zY2hlZF9wYXJhbXNfaW5pdCgmc2NpbmZvX291dCk7Cj4gK8Kg wqDCoMKgwqDCoMKgwqBvdXRwdXQoLTEsICZzY2luZm9fb3V0KTsKPiArwqDCoMKgwqDCoMKgwqDC oGxpYnhsX3ZjcHVfc2NoZWRfcGFyYW1zX2Rpc3Bvc2UoJnNjaW5mb19vdXQpOwo+CkFuZCBieSB0 aGUgd2F5LCB3aGVuIGNhbGxpbmcgb3V0cHV0KCkgd2l0aCAtMSwgd2hpY2ggSSB0aGluayBtZWFu cwoianVzdCBwcmludCB0aGUgdGFibGUgaGVhZGVyLCBkbyB3ZSByZWFsbHkgbmVlZCBhIHZhbGlk IGFuZCBpbml0ZWQKbGlieGxfdmNwdV9zY2hlZF9wYXJhbXM/IENhbid0IGl0IGJlIE5VTEwgKHNj aGVkX3J0ZHNfdmNwdV9vdXRwdXQoKQpsb29rcyBhbHJlYWR5IGFibGUgdG8gd29yayB3ZWxsIGlu IHRoaXMgY2FzZSB0byBtZSkuCgo+ICvCoMKgwqDCoMKgwqDCoMKgZm9yIChpID0gMDsgaSA8IG5i X2RvbWFpbjsgaSsrKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChpbmZvW2ldLmNw dXBvb2wgIT0gcG9vbGluZm9bcF0ucG9vbGlkKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGNvbnRpbnVlOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBsaWJ4bF92Y3B1X3Nj aGVkX3BhcmFtcyBzY2luZm87Cj4KRGl0dG8gYWJvdXQgdmFyaWFibGUgZGVjbGFyYXRpb24uCgo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBsaWJ4bF92Y3B1X3NjaGVkX3BhcmFtc19pbml0KCZz Y2luZm8pOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzY2luZm8ubnVtX3ZjcHVzID0gMDsK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmMgPSBvdXRwdXQoaW5mb1tpXS5kb21pZCwgJnNj aW5mbyk7Cj4KTW0uLiBzbyAwIGJlY2F1c2Ugd2Ugd2FudCB0byBhbGwgdmNwdXMuIFVnbHkuIEFz IGl0IHdhcyB1Z2x5IGluIHRoZSBzZXQKY2FzZSwgYW5kIHRoYXQgaXMgd2h5IHdlIGFkZGVkIGxp YnhsXypfc2V0X2FsbCgpLiBJJ20gc29ycnkgSSdtCnNwb3R0aW5nIHRoaXMgb25seSBub3csIGJ1 dCBJIHRoaW5rIHdlIG5lZWQKYcKgbGlieGxfdmNwdV9zY2hlZF9wYXJhbXNfZ2V0X2FsbCgpLiA6 LS8KCj4gQEAgLTYyMTUsODQgKzYzNTEsMTgzIEBAIGludCBtYWluX3NjaGVkX2NyZWRpdDIoaW50 IGFyZ2MsIGNoYXIKPiAqKmFyZ3YpCj4gwqAKPiDCoC8qCj4gwqAgKiA8bm90aGluZz7CoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqA6IExpc3QgYWxsIGRvbWFpbiBwYXJhbXRlcnMgYW5kIHNjaGVkIHBh cmFtcwo+IC0gKiAtZCBbZG9taWRdwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDogTGlzdCBkb21haW4g cGFyYW1zIGZvciBkb21haW4KPiArICogLWQgW2RvbWlkXcKgwqDCoMKgwqDCoMKgwqDCoMKgwqA6 IExpc3QgZGVmYXVsdCBkb21haW4gcGFyYW1zIGZvciBkb21haW4KPiDCoCAqIC1kIFtkb21pZF0g W3BhcmFtc13CoMKgOiBTZXQgZG9tYWluIHBhcmFtcyBmb3IgZG9tYWluCj4gKyAqIC1kIFtkb21p ZF0gLXYgW3ZjcHVpZCAxXSAtdiBbdmNwdWlkIDJdIC4uLsKgwqA6Cj4gKyAqIExpc3QgcGVyLVZD UFUgcGFyYW1zIGZvciBkb21haW4KPiArICogLWQgW2RvbWlkXSAtdiBhbGzCoMKgOiBMaXN0IGFs bCBwZXItVkNQVSBwYXJhbXMgZm9yIGRvbWFpbgo+ICsgKiAtdiBhbGzCoMKgOiBMaXN0IGFsbCBw ZXItVkNQVSBwYXJhbXMgZm9yIGFsbCBkb21haW5zCj4gKyAqIC1kIFtkb21pZF0gLXYgW3ZjcHVp ZCAxXSBbcGFyYW1zXSAtdiBbdmNwdWlkIDJdIFtwYXJhbXNdIC4uLsKgwqA6Cj4gKyAqIFNldCBw ZXItVkNQVSBwYXJhbXMgZm9yIGRvbWFpbgo+ICsgKiAtZCBbZG9taWRdIC12IGFsbCBbcGFyYW1z XcKgwqA6IFNldCBhbGwgcGVyLVZDUFUgcGFyYW1zIGZvciBkb21haW4KPiDCoCAqLwo+IMKgaW50 IG1haW5fc2NoZWRfcnRkcyhpbnQgYXJnYywgY2hhciAqKmFyZ3YpCj4gwqB7Cj4gwqDCoMKgwqDC oGNvbnN0IGNoYXIgKmRvbSA9IE5VTEw7Cj4gwqDCoMKgwqDCoGNvbnN0IGNoYXIgKmNwdXBvb2wg PSBOVUxMOwo+IC3CoMKgwqDCoGludCBwZXJpb2QgPSAwOyAvKiBwZXJpb2QgaXMgaW4gbWljcm9z ZWNvbmQgKi8KPiAtwqDCoMKgwqBpbnQgYnVkZ2V0ID0gMDsgLyogYnVkZ2V0IGlzIGluIG1pY3Jv c2Vjb25kICovCj4gK8KgwqDCoMKgaW50ICp2Y3B1cyA9IChpbnQgKil4bWFsbG9jKHNpemVvZihp bnQpKTsgLyogSURzIG9mIFZDUFVzIHRoYXQKPiBjaGFuZ2UgKi8KPiArwqDCoMKgwqBpbnQgKnBl cmlvZHMgPSAoaW50ICopeG1hbGxvYyhzaXplb2YoaW50KSk7IC8qIHBlcmlvZCBpcyBpbgo+IG1p Y3Jvc2Vjb25kICovCj4gK8KgwqDCoMKgaW50ICpidWRnZXRzID0gKGludCAqKXhtYWxsb2Moc2l6 ZW9mKGludCkpOyAvKiBidWRnZXQgaXMgaW4KPiBtaWNyb3NlY29uZCAqLwo+ICvCoMKgwqDCoGlu dCB2X3NpemUgPSAxOyAvKiBzaXplIG9mIHZjcHVzIGFycmF5ICovCj4gK8KgwqDCoMKgaW50IHBf c2l6ZSA9IDE7IC8qIHNpemUgb2YgcGVyaW9kcyBhcnJheSAqLwo+ICvCoMKgwqDCoGludCBiX3Np emUgPSAxOyAvKiBzaXplIG9mIGJ1ZGdldHMgYXJyYXkgKi8KPiArwqDCoMKgwqBpbnQgdl9pbmRl eCA9IDA7IC8qIGluZGV4IGluIHZjcHVzIGFycmF5ICovCj4gK8KgwqDCoMKgaW50IHBfaW5kZXgg PTA7IC8qIGluZGV4IGluIHBlcmlvZHMgYXJyYXkgKi8KPiArwqDCoMKgwqBpbnQgYl9pbmRleCA9 MDsgLyogaW5kZXggZm9yIGluIGJ1ZGdldHMgYXJyYXkgKi8KPiDCoMKgwqDCoMKgYm9vbCBvcHRf cCA9IGZhbHNlOwo+IMKgwqDCoMKgwqBib29sIG9wdF9iID0gZmFsc2U7Cj4gLcKgwqDCoMKgaW50 IG9wdCwgcmM7Cj4gK8KgwqDCoMKgYm9vbCBvcHRfdiA9IGZhbHNlOwo+ICvCoMKgwqDCoGJvb2wg b3B0X2FsbCA9IGZhbHNlOyAvKiBvdXRwdXQgcGVyLWRvbSBwYXJhbWV0ZXJzICovCj4gK8KgwqDC oMKgaW50IG9wdCwgaSwgcmM7Cj4gwqDCoMKgwqDCoHN0YXRpYyBzdHJ1Y3Qgb3B0aW9uIG9wdHNb XSA9IHsKPiDCoMKgwqDCoMKgwqDCoMKgwqB7ImRvbWFpbiIsIDEsIDAsICdkJ30sCj4gwqDCoMKg wqDCoMKgwqDCoMKgeyJwZXJpb2QiLCAxLCAwLCAncCd9LAo+IMKgwqDCoMKgwqDCoMKgwqDCoHsi YnVkZ2V0IiwgMSwgMCwgJ2InfSwKPiArwqDCoMKgwqDCoMKgwqDCoHsidmNwdWlkIiwxLCAwLCAn did9LAo+IMKgwqDCoMKgwqDCoMKgwqDCoHsiY3B1cG9vbCIsIDEsIDAsICdjJ30sCj4gwqDCoMKg wqDCoMKgwqDCoMKgQ09NTU9OX0xPTkdfT1BUUwo+IMKgwqDCoMKgwqB9Owo+IMKgCj4gLcKgwqDC oMKgU1dJVENIX0ZPUkVBQ0hfT1BUKG9wdCwgImQ6cDpiOmM6Iiwgb3B0cywgInNjaGVkLXJ0ZHMi LCAwKSB7Cj4gK8KgwqDCoMKgU1dJVENIX0ZPUkVBQ0hfT1BUKG9wdCwgImQ6cDpiOnY6YyIsIG9w dHMsICJzY2hlZC1ydGRzIiwgMCkgewo+IMKgwqDCoMKgwqBjYXNlICdkJzoKPiDCoMKgwqDCoMKg wqDCoMKgwqBkb20gPSBvcHRhcmc7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgYnJlYWs7Cj4gwqDCoMKg wqDCoGNhc2UgJ3AnOgo+IC3CoMKgwqDCoMKgwqDCoMKgcGVyaW9kID0gc3RydG9sKG9wdGFyZywg TlVMTCwgMTApOwo+ICvCoMKgwqDCoMKgwqDCoMKgaWYgKHBfaW5kZXggPj0gcF9zaXplKSB7Cj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8qIHBlcmlvZHMgYXJyYXkgaXMgZnVsbAo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCogZG91YmxlIHRoZSBhcnJheSBzaXplIGZvciBuZXcgZWxl bWVudHMKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAqLwpDb21tZW50IHN0eWxlLgoKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcF9zaXplICo9IDI7Cj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHBlcmlvZHMgPSB4cmVhbGxvYyhwZXJpb2RzLCBwX3NpemUpOwo+ICvCoMKgwqDCoMKg wqDCoMKgfQo+ICvCoMKgwqDCoMKgwqDCoMKgcGVyaW9kc1twX2luZGV4KytdID0gc3RydG9sKG9w dGFyZywgTlVMTCwgMTApOwo+IMKgwqDCoMKgwqDCoMKgwqDCoG9wdF9wID0gMTsKPiDCoMKgwqDC oMKgwqDCoMKgwqBicmVhazsKPiDCoMKgwqDCoMKgY2FzZSAnYic6Cj4gLcKgwqDCoMKgwqDCoMKg wqBidWRnZXQgPSBzdHJ0b2wob3B0YXJnLCBOVUxMLCAxMCk7Cj4gK8KgwqDCoMKgwqDCoMKgwqBp ZiAoYl9pbmRleCA+PSBiX3NpemUpIHsgLyogYnVkZ2V0cyBhcnJheSBpcyBmdWxsICovCj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJfc2l6ZSAqPSAyOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBidWRnZXRzID0geHJlYWxsb2MoYnVkZ2V0cywgYl9zaXplKTsKPiArwqDCoMKgwqDCoMKg wqDCoH0KPiArwqDCoMKgwqDCoMKgwqDCoGJ1ZGdldHNbYl9pbmRleCsrXSA9IHN0cnRvbChvcHRh cmcsIE5VTEwsIDEwKTsKPiDCoMKgwqDCoMKgwqDCoMKgwqBvcHRfYiA9IDE7Cj4gwqDCoMKgwqDC oMKgwqDCoMKgYnJlYWs7Cj4gK8KgwqDCoMKgY2FzZSAndic6Cj4gK8KgwqDCoMKgwqDCoMKgwqBp ZiAoIXN0cmNtcChvcHRhcmcsICJhbGwiKSkgeyAvKiBnZXQgb3Igc2V0IGFsbCB2Y3B1cyBvZiBh Cj4gZG9tYWluICovCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG9wdF9hbGwgPSAxOwo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBicmVhazsKPiArwqDCoMKgwqDCoMKgwqDCoH0KPiArwqDC oMKgwqDCoMKgwqDCoGlmICh2X2luZGV4ID49IHZfc2l6ZSkgeyAvKiB2Y3B1cyBhcnJheSBpcyBm dWxsICovCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHZfc2l6ZSAqPSAyOwo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqB2Y3B1cyA9IHhyZWFsbG9jKHZjcHVzLCB2X3NpemUpOwo+ICvCoMKg wqDCoMKgwqDCoMKgfQo+ICvCoMKgwqDCoMKgwqDCoMKgdmNwdXNbdl9pbmRleCsrXSA9IHN0cnRv bChvcHRhcmcsIE5VTEwsIDEwKTsKPiArwqDCoMKgwqDCoMKgwqDCoG9wdF92ID0gMTsKPiArwqDC oMKgwqDCoMKgwqDCoGJyZWFrOwo+IMKgwqDCoMKgwqBjYXNlICdjJzoKPiDCoMKgwqDCoMKgwqDC oMKgwqBjcHVwb29sID0gb3B0YXJnOwo+IMKgwqDCoMKgwqDCoMKgwqDCoGJyZWFrOwo+IMKgwqDC oMKgwqB9Cj4gwqAKPiAtwqDCoMKgwqBpZiAoY3B1cG9vbCAmJiAoZG9tIHx8IG9wdF9wIHx8IG9w dF9iKSkgewo+ICvCoMKgwqDCoGlmIChjcHVwb29sICYmIChkb20gfHwgb3B0X3AgfHwgb3B0X2Ig fHwgb3B0X3YgfHwgb3B0X2FsbCkpIHsKPiDCoMKgwqDCoMKgwqDCoMKgwqBmcHJpbnRmKHN0ZGVy ciwgIlNwZWNpZnlpbmcgYSBjcHVwb29sIGlzIG5vdCBhbGxvd2VkIHdpdGggIgo+IMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAib3RoZXIgb3B0aW9ucy5cbiIpOwo+IC3CoMKgwqDC oMKgwqDCoMKgcmV0dXJuIEVYSVRfRkFJTFVSRTsKPiArwqDCoMKgwqDCoMKgwqDCoHJjID0gRVhJ VF9GQUlMVVJFOwo+ICvCoMKgwqDCoMKgwqDCoMKgZ290byBvdXQ7Cj4gwqDCoMKgwqDCoH0KPiAt wqDCoMKgwqBpZiAoIWRvbSAmJiAob3B0X3AgfHwgb3B0X2IpKSB7Cj4gLcKgwqDCoMKgwqDCoMKg wqBmcHJpbnRmKHN0ZGVyciwgIk11c3Qgc3BlY2lmeSBhIGRvbWFpbi5cbiIpOwo+IC3CoMKgwqDC oMKgwqDCoMKgcmV0dXJuIEVYSVRfRkFJTFVSRTsKPiArwqDCoMKgwqBpZiAoIWRvbSAmJiAob3B0 X3AgfHwgb3B0X2IgfHwgb3B0X3YpKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqBmcHJpbnRmKHN0ZGVy ciwgIk1pc3NpbmcgcGFyYW1ldGVycy5cbiIpOwo+ICvCoMKgwqDCoMKgwqDCoMKgcmMgPSBFWElU X0ZBSUxVUkU7Cj4gK8KgwqDCoMKgwqDCoMKgwqBnb3RvIG91dDsKPiDCoMKgwqDCoMKgfQo+IC3C oMKgwqDCoGlmIChvcHRfcCAhPSBvcHRfYikgewo+IC3CoMKgwqDCoMKgwqDCoMKgZnByaW50Zihz dGRlcnIsICJNdXN0IHNwZWNpZnkgcGVyaW9kIGFuZCBidWRnZXRcbiIpOwo+IC3CoMKgwqDCoMKg wqDCoMKgcmV0dXJuIEVYSVRfRkFJTFVSRTsKPiArwqDCoMKgwqBpZiAoZG9tICYmICFvcHRfdiAm JiAhb3B0X2FsbCAmJiAob3B0X3AgfHwgb3B0X2IpKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqBmcHJp bnRmKHN0ZGVyciwgIk11c3Qgc3BlY2lmeSBWQ1BVLlxuIik7Cj4gK8KgwqDCoMKgwqDCoMKgwqBy YyA9IEVYSVRfRkFJTFVSRTsKPiArwqDCoMKgwqDCoMKgwqDCoGdvdG8gb3V0Owo+ICvCoMKgwqDC oH0KPiArwqDCoMKgwqBpZiAob3B0X3YgJiYgb3B0X2FsbCkgewo+ICvCoMKgwqDCoMKgwqDCoMKg ZnByaW50ZihzdGRlcnIsICJJbmNvcnJlY3QgVkNQVSBJRHMuXG4iKTsKPiArwqDCoMKgwqDCoMKg wqDCoHJjID0gRVhJVF9GQUlMVVJFOwo+ICvCoMKgwqDCoMKgwqDCoMKgZ290byBvdXQ7Cj4gK8Kg wqDCoMKgfQo+ICvCoMKgwqDCoGlmICgoKHZfaW5kZXggPiBiX2luZGV4KSAmJiBvcHRfYikgfHwg KCh2X2luZGV4ID4gcF9pbmRleCkgJiYKPiBvcHRfcCkKPiArwqDCoMKgwqDCoMKgwqDCoHx8IHBf aW5kZXggIT0gYl9pbmRleCkgewo+ICvCoMKgwqDCoMKgwqDCoMKgZnByaW50ZihzdGRlcnIsICJJ bmNvcnJlY3QgbnVtYmVyIG9mIHBlcmlvZCBhbmQgYnVkZ2V0XG4iKTsKPiArwqDCoMKgwqDCoMKg wqDCoHJjID0gRVhJVF9GQUlMVVJFOwo+ICvCoMKgwqDCoMKgwqDCoMKgZ290byBvdXQ7Cj4gwqDC oMKgwqDCoH0KPiDCoAo+IC3CoMKgwqDCoGlmICghZG9tKSB7IC8qIGxpc3QgYWxsIGRvbWFpbidz IHJ0IHNjaGVkdWxlciBpbmZvICovCj4gLcKgwqDCoMKgwqDCoMKgwqBpZiAoc2NoZWRfZG9tYWlu X291dHB1dChMSUJYTF9TQ0hFRFVMRVJfUlREUywKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHNjaGVkX3J0ZHNfZG9tYWlu X291dHB1dCwKPiArwqDCoMKgwqBpZiAoKCFkb20pICYmIG9wdF9hbGwpIHsKPiArwqDCoMKgwqDC oMKgwqDCoC8qIGdldCBhbGwgZG9tYWluJ3MgcGVyLXZjcHUgcnRkcyBzY2hlZHVsZXIgcGFyYW1l dGVycyAqLwo+ICvCoMKgwqDCoMKgwqDCoMKgcmMgPSAtc2NoZWRfdmNwdV9vdXRwdXQoTElCWExf U0NIRURVTEVSX1JURFMsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzY2hlZF9ydGRzX3ZjcHVfb3V0cHV0LAo+IMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHNjaGVkX3J0ZHNfcG9vbF9vdXRwdXQsCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjcHVwb29sKSkKPiAtwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIEVYSVRfRkFJTFVSRTsKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNwdXBvb2wp Owo+ICvCoMKgwqDCoMKgwqDCoMKgZ290byBvdXQ7Cj4gK8KgwqDCoMKgfSBlbHNlIGlmICghZG9t ICYmICFvcHRfYWxsKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqAvKiBsaXN0IGFsbCBkb21haW4ncyBk ZWZhdWx0IHNjaGVkdWxpbmcgcGFyYW1ldGVycyAqLwo+ICvCoMKgwqDCoMKgwqDCoMKgcmMgPSAt c2NoZWRfZG9tYWluX291dHB1dChMSUJYTF9TQ0hFRFVMRVJfUlREUywKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBz Y2hlZF9ydGRzX2RvbWFpbl9vdXRwdXQsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc2NoZWRfcnRkc19wb29sX291 dHB1dCwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBjcHVwb29sKTsKPiArwqDCoMKgwqDCoMKgwqDCoGdvdG8gb3V0 Owo+IMKgwqDCoMKgwqB9IGVsc2Ugewo+IMKgwqDCoMKgwqDCoMKgwqDCoHVpbnQzMl90IGRvbWlk ID0gZmluZF9kb21haW4oZG9tKTsKPiAtwqDCoMKgwqDCoMKgwqDCoGlmICghb3B0X3AgJiYgIW9w dF9iKSB7IC8qIG91dHB1dCBydCBzY2hlZHVsZXIgaW5mbyAqLwo+ICvCoMKgwqDCoMKgwqDCoMKg aWYgKCFvcHRfdiAmJiAhb3B0X2FsbCkgeyAvKiBvdXRwdXQgZGVmYXVsdCBzY2hlZHVsaW5nCj4g cGFyYW1ldGVycyAqLwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc2NoZWRfcnRkc19kb21h aW5fb3V0cHV0KC0xKTsKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKHNjaGVkX3J0ZHNf ZG9tYWluX291dHB1dChkb21pZCkpCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg cmV0dXJuIEVYSVRfRkFJTFVSRTsKPiAtwqDCoMKgwqDCoMKgwqDCoH0gZWxzZSB7IC8qIHNldCBy dCBzY2hlZHVsZXIgcGFyYW1hdGVycyAqLwo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBsaWJ4 bF9kb21haW5fc2NoZWRfcGFyYW1zIHNjaW5mbzsKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg bGlieGxfZG9tYWluX3NjaGVkX3BhcmFtc19pbml0KCZzY2luZm8pOwo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqByYyA9IC1zY2hlZF9ydGRzX2RvbWFpbl9vdXRwdXQoZG9taWQpOwo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBnb3RvIG91dDsKPiArwqDCoMKgwqDCoMKgwqDCoH0gZWxzZSBp ZiAoIW9wdF9wICYmICFvcHRfYikgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKiBnZXQg cGVyLXZjcHUgcnRkcyBzY2hlZHVsaW5nIHBhcmFtZXRlcnMgKi8KPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgbGlieGxfdmNwdV9zY2hlZF9wYXJhbXMgc2NpbmZvOwo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBsaWJ4bF92Y3B1X3NjaGVkX3BhcmFtc19pbml0KCZzY2luZm8pOwo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBzY2hlZF9ydGRzX3ZjcHVfb3V0cHV0KC0xLCAmc2NpbmZvKTsK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc2NpbmZvLm51bV92Y3B1cyA9IHZfaW5kZXg7Cj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICh2X2luZGV4ID4gMCkKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBzY2luZm8udmNwdXMgPSAobGlieGxfc2NoZWRfcGFyYW1zICop Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgeG1hbGxvYyhzaXplb2YobGlieGxfc2NoZWRfcGFyYW1zKSAqCj4gKHZfaW5kZXgp KTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZm9yIChpID0gMDsgaSA8IHZfaW5kZXg7IGkr KykKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzY2luZm8udmNwdXNbaV0udmNw dWlkID0gdmNwdXNbaV07Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJjID0gLXNjaGVkX3J0 ZHNfdmNwdV9vdXRwdXQoZG9taWQsICZzY2luZm8pOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBsaWJ4bF92Y3B1X3NjaGVkX3BhcmFtc19kaXNwb3NlKCZzY2luZm8pOwo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBnb3RvIG91dDsKPiArwqDCoMKgwqB9IGVsc2UgaWYgKG9wdF92IHx8IG9w dF9hbGwpIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLyogc2V0IHBlci12Y3B1IHJ0ZHMg c2NoZWR1bGluZyBwYXJhbWV0ZXJzICovCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGxpYnhs X3ZjcHVfc2NoZWRfcGFyYW1zIHNjaW5mbzsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbGli eGxfdmNwdV9zY2hlZF9wYXJhbXNfaW5pdCgmc2NpbmZvKTsKPiDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHNjaW5mby5zY2hlZCA9IExJQlhMX1NDSEVEVUxFUl9SVERTOwo+IC3CoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBzY2luZm8ucGVyaW9kID0gcGVyaW9kOwo+IC3CoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBzY2luZm8uYnVkZ2V0ID0gYnVkZ2V0Owo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBpZiAodl9pbmRleCA+IDApIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBz Y2luZm8ubnVtX3ZjcHVzID0gdl9pbmRleDsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBzY2luZm8udmNwdXMgPSAobGlieGxfc2NoZWRfcGFyYW1zICopCj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgeG1hbGxv YyhzaXplb2YobGlieGxfc2NoZWRfcGFyYW1zKSAqCj4gKHZfaW5kZXgpKTsKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBmb3IgKGkgPSAwOyBpIDwgdl9pbmRleDsgaSsrKSB7Cj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzY2luZm8udmNwdXNbaV0u dmNwdWlkID0gdmNwdXNbaV07Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBzY2luZm8udmNwdXNbaV0ucGVyaW9kID0gcGVyaW9kc1tpXTsKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHNjaW5mby52Y3B1c1tpXS5idWRnZXQgPSBidWRn ZXRzW2ldOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByYyA9IHNjaGVkX3ZjcHVfc2V0KGRvbWlkLCAmc2NpbmZv KTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfSBlbHNlIHsgLyogc2V0IHBhcmFtcyBmb3Ig YWxsIHZjcHVzICovCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc2NpbmZvLm51 bV92Y3B1cyA9IDE7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc2NpbmZvLnZj cHVzID0gKGxpYnhsX3NjaGVkX3BhcmFtcyAqKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHhtYWxsb2Moc2l6ZW9mKGxpYnhs X3NjaGVkX3BhcmFtcykpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHNjaW5m by52Y3B1c1swXS5wZXJpb2QgPSBwZXJpb2RzWzBdOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHNjaW5mby52Y3B1c1swXS5idWRnZXQgPSBidWRnZXRzWzBdOwo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJjID0gc2NoZWRfdmNwdV9zZXRfYWxsKGRvbWlkLCAm c2NpbmZvKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+IMKgCj4gLcKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHJjID0gc2NoZWRfZG9tYWluX3NldChkb21pZCwgJnNjaW5mbyk7Cj4gLcKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGxpYnhsX2RvbWFpbl9zY2hlZF9wYXJhbXNfZGlzcG9zZSgm c2NpbmZvKTsKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKHJjKQo+IC3CoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBFWElUX0ZBSUxVUkU7Cj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoGxpYnhsX3ZjcHVfc2NoZWRfcGFyYW1zX2Rpc3Bvc2UoJnNjaW5mbyk7Cj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChyYykgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHJjID0gLXJjOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGdvdG8gb3V0Owo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gwqDCoMKgwqDCoMKgwqDC oMKgfQo+IMKgwqDCoMKgwqB9Cj4gwqAKPiAtwqDCoMKgwqByZXR1cm4gRVhJVF9TVUNDRVNTOwo+ ICvCoMKgwqDCoHJjID0gRVhJVF9TVUNDRVNTOwo+ICtvdXQ6Cj4gK8KgwqDCoMKgZnJlZSh2Y3B1 cyk7Cj4gK8KgwqDCoMKgZnJlZShwZXJpb2RzKTsKPiArwqDCoMKgwqBmcmVlKGJ1ZGdldHMpOwo+ ICvCoMKgwqDCoHJldHVybiByYzsKPiDCoH0KPgpTbywgdGhlIGxvZ2ljIGhlcmUgaXMgcmVhbGx5 IGNvbXBsZXgsIGJ1dCBJIHRoaW5rIGl0J3MgY29ycmVjdC4gVGhlCm9ubHkgcHJvYmxlbSBJIHNw b3QgaXMgdGhlIGZ1bmN0aW9uIHJldHVybiB2YWx1ZSAod2hpY2ggaXMgYW4gYWN0dWFsCmV4aXQg Y29kZSBmb3IgeGwsIHNpbmNlIHRoaXMgaXMgYSBtYWluX2JsYSgpIGtpbmQgb2YgZnVuY3Rpb24p LgoKVGhlIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gZWl0aGVyIEVYSVRfU1VDQ0VTUyBvciBFWElU X0ZBSUxVUkUuCgpXaXRoIHlvdXIgY2hhbmdlcywgSSB0aGluayB0aGVyZSBhcmUgY2hhbmNlcyBm b3IgdGhpcyB0byBub3QgYmUgdGhlCmNhc2UsIGUuZy46CgorwqDCoMKgIH0gZWxzZSBpZiAoIWRv bSAmJiAhb3B0X2FsbCkgeworwqDCoMKgwqDCoMKgwqAgLyogbGlzdCBhbGwgZG9tYWluJ3MgZGVm YXVsdCBzY2hlZHVsaW5nIHBhcmFtZXRlcnMgKi8KK8KgwqDCoMKgwqDCoMKgIHJjID0gLXNjaGVk X2RvbWFpbl9vdXRwdXQoTElCWExfU0NIRURVTEVSX1JURFMsCivCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2NoZWRfcnRk c19kb21haW5fb3V0cHV0LAorwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNjaGVkX3J0ZHNfcG9vbF9vdXRwdXQsCivCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgY3B1cG9vbCk7CivCoMKgwqDCoMKgwqDCoCBnb3RvIG91dDsKCkFtIEkgcmlnaHQ/CgpJ TU8sIHRoaXMgc2hvdWxkIGJlIGZpeGVkLCB0byBwcmV2ZW50IGV2ZW4gbW9yZSBpbmNvbnNpc3Rl bmN5IGluIHhsCnRoYW4gd2hhdCB3ZSBoYXZlIGFscmVhZHkgb24gdGhpcyBmcm9udAoKQSBtaW5v ciB0aGluZywgd2hpbGUgeW91J3JlIHRoZXJlLCBkb24ndCB1c2UgYSB2YXJpYWJsZSBjYWxsZWQg cmMgZm9yCnRoaXMgKCdyZXQnIG9yICdyJyB3b3VsZCBiZSBhIGJldHRlciBmaXQgd2l0aCB0aGlz IGNvbXBvbmVudCdzIGNvZGluZwpzdHlsZSkuCgpTb3JyeSBhZ2FpbiBmb3IgdGhlIGRlbGF5IHJl cGx5aW5nIHRvIHRoaXMuCgpSZWdhcmRzLApEYXJpbwotLSAKPDxUaGlzIGhhcHBlbnMgYmVjYXVz ZSBJIGNob29zZSBpdCB0byBoYXBwZW4hPj4gKFJhaXN0bGluIE1hamVyZSkKLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KRGFy aW8gRmFnZ2lvbGksIFBoLkQsIGh0dHA6Ly9hYm91dC5tZS9kYXJpby5mYWdnaW9saQpTZW5pb3Ig U29mdHdhcmUgRW5naW5lZXIsIENpdHJpeCBTeXN0ZW1zIFImRCBMdGQuLCBDYW1icmlkZ2UgKFVL KQoK --=-b3JgfeqNRVoqfTgyHwp7 Content-Type: application/pgp-signature; name="signature.asc" Content-Description: This is a digitally signed message part Content-Transfer-Encoding: 7bit -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iEYEABECAAYFAlb9W8cACgkQk4XaBE3IOsQoRQCfRICHriwaxzQYuiWPliaw00pB Lw0AnibzPkfD+ObYzbfqUp690dfk/3Ih =55mq -----END PGP SIGNATURE----- --=-b3JgfeqNRVoqfTgyHwp7-- --===============9164071864683178164== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: inline X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVs IG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwOi8vbGlzdHMueGVuLm9y Zy94ZW4tZGV2ZWwK --===============9164071864683178164==--