From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lyude Paul Subject: Re: [RFC i-g-t v3 5/5] Add support for hotplug testing with the Chamelium Date: Wed, 07 Dec 2016 14:56:50 -0500 Message-ID: <1481140610.5272.2.camel@redhat.com> References: <20161201012448.16334-1-lyude@redhat.com> <20161201012448.16334-6-lyude@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by gabe.freedesktop.org (Postfix) with ESMTPS id 21D516E1A0 for ; Wed, 7 Dec 2016 19:56:53 +0000 (UTC) In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Tomeu Vizoso Cc: Intel Graphics Development List-Id: intel-gfx@lists.freedesktop.org T24gV2VkLCAyMDE2LTEyLTA3IGF0IDEyOjI3ICswMTAwLCBUb21ldSBWaXpvc28gd3JvdGU6Cj4g SGkgTHl1ZGUsCj4gCj4gdGhpcyBsb29rcyB2ZXJ5IGdvb2QuIFNvbWUgbWlub3IgY29tbWVudHMg YmVsb3cuCj4gCj4gUmVnYXJkcywKPiAKPiBUb21ldQo+IAo+IE9uIDEgRGVjZW1iZXIgMjAxNiBh dCAwMjoyNCwgTHl1ZGUgPGx5dWRlQHJlZGhhdC5jb20+IHdyb3RlOgo+ID4gRm9yIHRoZSBwdXJw b3NlIG9mIHRlc3RpbmcgdGhpbmdzIHN1Y2ggYXMgaG90cGx1Z2dpbmcgYW5kIGJhZAo+ID4gbW9u aXRvcnMsCj4gPiB0aGUgQ2hyb21lT1MgdGVhbSBlbmRlZCB1cCBkZXNpZ25pbmcgYSBuZWF0IGxp dHRsZSBkZXZpY2Uga25vd24gYXMKPiA+IHRoZQo+ID4gQ2hhbWVsaXVtLiBNb3JlIGluZm9ybWF0 aW9uIG9uIHRoaXMgY2FuIGJlIGZvdW5kIGhlcmU6Cj4gPiAKPiA+IMKgwqDCoMKgwqDCoMKgwqBo dHRwczovL3d3dy5jaHJvbWl1bS5vcmcvY2hyb21pdW0tb3MvdGVzdGluZy9jaGFtZWxpdW0KPiA+ IAo+ID4gVGhpcyBhZGRzIHN1cHBvcnQgZm9yIGEgY291cGxlIG9mIHRoaW5ncyB0byBpbnRlbC1n cHUtdG9vbHM6Cj4gPiDCoC0gaWd0IGxpYnJhcnkgZnVuY3Rpb25zIGZvciBjb25uZWN0aW5nIHRv IHVkZXYgYW5kIG1vbml0b3JpbmcgaXQKPiA+IGZvcgo+ID4gwqDCoMKgaG90cGx1ZyBldmVudHMs IGxvb3NlbHkgYmFzZWQgb2ZmIG9mIHRoZSB1bmZpbmlzaGVkIGhvdHBsdWdnaW5nCj4gPiDCoMKg wqBpbXBsZW1lbnRhdGlvbiBpbiB0ZXN0ZGlzcGxheQo+ID4gwqAtIExpYnJhcnkgZnVuY3Rpb25z IGZvciBjb250cm9sbGluZyB0aGUgY2hhbWVsaXVtIGluIHRlc3RzIHVzaW5nCj4gPiDCoMKgwqB4 bWxycGMuIEEgY291cGxlIG9mIFJQQyBjYWxscyB3ZXJlIG9tbWl0dGVkIGhlcmUsIG1haW5seSBi ZWNhdXNlCj4gPiB0aGV5Cj4gPiDCoMKgwqBkaWRuJ3Qgc2VlbSB2ZXJ5IHVzZWZ1bCBmb3Igb3Vy IG5lZWRzICh5ZXQpCj4gPiDCoC0gQSBzZXQgb2YgYmFzaWMgdGVzdHMgdXNpbmcgdGhlIGNoYW1l bGl1bS4KPiA+IAo+ID4gU2lnbmVkLW9mZi1ieTogTHl1ZGUgPGx5dWRlQHJlZGhhdC5jb20+Cj4g PiAKPiA+IENoYW5nZXMgc2luY2UgdjE6Cj4gPiAtIERvbid0IHRyeSB0byBndWVzcyBjb25uZWN0 b3IgbWFwcGluZ3MsIGhhdmUgdGhlIHVzZXIgc3BlY2lmeSB0aGVtCj4gPiDCoCBtYW51YWxseSB1 c2luZyBhIGNvbmZpZ3VyYXRpb24gZmlsZQo+ID4gLSBPcGVuIERSTSBmZCB1c2luZyBEUklWRVJf QU5ZLCBub3QgRFJJVkVSX0lOVEVMCj4gPiAtIExvd2VyIHRoZSBob3RwbHVnIHRpbWVvdXQgYSBs aXR0bGUgYml0LCBzaW5jZSAzMCBzZWNvbmRzIHdhcwo+ID4gbGVmdG92ZXIKPiA+IMKgIGZyb20g ZGVidWdnaW5nIHRoZXNlIHRlc3RzIGFueXdheQo+ID4gLSBEb24ndCB0cnkgdG8ga2VlcCB0cmFj ayBvZiB0aGUgb3JpZ2luYWwgc3RhdGUgb2YgdGhlIGNoYW1lbGl1bQo+ID4gcG9ydHMsCj4gPiDC oCBhbmQganVzdCBsZWF2ZSB0aGVtIHBsdWdnZWQgaW4gYWZ0ZXIgZWFjaCBydW4uIFRoaXMgbWFr ZXMgbW9yZQo+ID4gc2Vuc2UKPiA+IMKgIHRvIG1lLCBzaW5jZSBJJ2QgaW1hZ2luZSBpbiBhdXRv bWF0ZWQgdGVzdGluZyBzZXR1cHMgdXNpbmcKPiA+IGNoYW1lbGl1bXMKPiA+IMKgIHRoYXQgYWxs IG9mIHRoZSBleHRyYSBtb25pdG9ycyB3aWxsIHByb2JhYmx5IGJlIHByb3ZpZGVkIGJ5IHRoZQo+ ID4gwqAgQ2hhbWVsaXVtIHRvIGJlZ2luIHdpdGgsIHNvIGtlZXBpbmcgdGhlbSBwbHVnZ2VkIGlu IHdvdWxkIG1ha2UKPiA+IHN1cmUKPiA+IMKgIHRlc3RzIHJ1bm5pbmcgYWZ0ZXJ3YXJkcyB0aGF0 IHJlcXVpcmUgPjEgbW9uaXRvciBkb24ndCBnZXQKPiA+IHNraXBwZWQuCj4gPiAtIEFkZCB3YWl0 X2Zvcl9jb25uZWN0b3IoKSB0byB0aGUgY2hhbWVsaXVtIHRlc3RzLiBBZnRlciBzb21lIG1vcmUK PiA+IMKgIHRlc3RpbmcsIEkgZm91bmQgdGhhdCBkZXBlbmRpbmcgb24gdGhlIHN5c3RlbSBzb21l IHRlc3RzIHdvdWxkCj4gPiB0aHJvdwo+ID4gwqAgZmFsc2UgbmVnYXRpdmVzIGR1ZSB0byB1cyBu b3Qgd2FpdGluZyBsb25nIGVub3VnaCBmb3IgdGhlIHN5c3RlbQo+ID4gdG8KPiA+IMKgIGRldGVj dCB0aGF0IHdlIGNvbm5lY3RlZCBzb21ldGhpbmcgdG8gaXQuIFRoaXMgbWFpbmx5IGhhcHBlbmVk Cj4gPiB3aXRoCj4gPiDCoCBWR0EgY29ubmVjdG9ycywgc2luY2UgdGhlaXIgbGFjayBvZiBIUEQg bWFrZXMgdGhlbSB0YWtlCj4gPiBzaWduaWZpY2FudGx5Cj4gPiDCoCBsb25nZXIgZm9yIHRoZSBo YXJkd2FyZSB0byBub3RpY2UuIHdhaXRfZm9yX2Nvbm5lY3RvcigpIGZpeGVzCj4gPiB0aGlzIGJ5 Cj4gPiDCoCBjb250aW51YWxseSByZXByb2JpbmcgdGhlIHN0YXR1cyBvZiB0aGUgZGVzaXJlZCBj b25uZWN0b3IKPiA+ICh3aXRob3V0Cj4gPiDCoCByZWx5aW5nIG9uIGEgaHBkIGV2ZW50IGhhcHBl bmluZywgc2luY2UgdGhhdCBtaWdodCBuZXZlciBjb21lKQo+ID4gdW50aWwKPiA+IMKgIHdlIGdl dCB3aGF0IHdlIHdhbnQsIG9yIHdlIHRpbWUgb3V0IGFuZCBmYWlsLgo+ID4gLSBVc2Uga21zdGVz dF9nZXRfcHJvcGVydHkoKSBmb3IgcmV0cmlldmluZyBFRElEcyBpbnN0ZWFkIG9mIGRvaW5nCj4g PiBpdCBieQo+ID4gwqAgaGFuZAo+ID4gLSBEb24ndCBoYXJkY29kZSBQSVBFX0EgZm9yIGJyaW5n aW5nIHVwIHRoZSBkaXNwbGF5LCB1c2Uga21zdGVzdCB0bwo+ID4gZmluZAo+ID4gwqAgYW4gYXBw cm9wcmlhdGUgQ1JUQyB0byB1c2UuCj4gPiBDaGFuZ2VzIHNpbmNlIHYyOgo+ID4gLSBGaXggaW5j b3JyZWN0IHVzYWdlIG9mIHRoZSBsaXN0IGhlbHBlcnMgd2hlbiByZWNvcmRpbmcgbmV3IEVESURz Cj4gPiAtIEFkZCBtaXNzaW5nIGRvY3VtZW50YXRpb24KPiA+IC0gTWFrZSBzdXJlIGRvY3VtZW50 YXRpb24gYWN0dWFsbHkgYXBwZWFycwo+ID4gLSBTaW5jZSB3ZSBmaW5hbGx5IGdvdCB2aWRlbyBj YXB0dXJlIHdvcmtpbmcsIGFkZCBDUkMgZnVuY3Rpb25zIGFuZAo+ID4gZml4Cj4gPiDCoCB0aGUg b25lcyB3ZSBjb3VsZG4ndCBhY3R1YWxseSB0ZXN0IGJlZm9yZQo+ID4gLSBJbiB0aGUgZXhpdCBo YW5kbGVyLCByZXNldCB0aGUgeG1scnBjIGVudiBzbyB3ZSBjYW4gcHJvcGVybHkKPiA+IHJlc2V0 IHRoZQo+ID4gwqAgQ2hhbWVsaXVtIGV2ZW4gYWZ0ZXIgYW4gUlBDIGVycm9yCj4gPiAtIE1ha2Ug c3VyZSBjb21waWxpbmcgd2l0aG91dCBDaGFtZWxpdW0gc3VwcG9ydCBzdGlsbCB3b3Jrcwo+ID4g LS0tCj4gPiDCoGNvbmZpZ3VyZS5hY8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHzCoMKgMTMgKwo+ID4g wqAuLi4vaW50ZWwtZ3B1LXRvb2xzL2ludGVsLWdwdS10b29scy1kb2NzLnhtbMKgwqDCoMKgwqDC oMKgfMKgwqDCoDEgKwo+ID4gwqBsaWIvTWFrZWZpbGUuYW3CoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8wqDCoMKg NCArLQo+ID4gwqBsaWIvTWFrZWZpbGUuc291cmNlc8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfMKgwqAxMCArLQo+ID4gwqBsaWIv aWd0LmjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8wqDCoMKgNCArCj4gPiDCoGxpYi9pZ3Rf Y2hhbWVsaXVtLmPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgfCA4NDkKPiA+ICsrKysrKysrKysrKysrKysrKysrKwo+ID4gwqBs aWIvaWd0X2NoYW1lbGl1bS5owqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHzCoMKgNzMgKysKPiA+IMKgc2NyaXB0cy9ydW4tdGVz dHMuc2jCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHzCoMKgwqA0ICstCj4gPiDCoHRlc3RzL01ha2VmaWxlLmFtwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8 wqDCoMKgNSArLQo+ID4gwqB0ZXN0cy9NYWtlZmlsZS5zb3VyY2VzwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHzCoMKgwqA5ICstCj4gPiDC oHRlc3RzL2NoYW1lbGl1bS5jwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8IDQwNwo+ID4gKysrKysrKysrKwo+ID4gwqAx MSBmaWxlcyBjaGFuZ2VkLCAxMzcxIGluc2VydGlvbnMoKyksIDggZGVsZXRpb25zKC0pCj4gPiDC oGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvaWd0X2NoYW1lbGl1bS5jCj4gPiDCoGNyZWF0ZSBtb2Rl IDEwMDY0NCBsaWIvaWd0X2NoYW1lbGl1bS5oCj4gPiDCoGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0 cy9jaGFtZWxpdW0uYwo+ID4gCj4gPiBkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmln dXJlLmFjCj4gPiBpbmRleCBiNjJiOGZjLi4xOTIwNjA5IDEwMDY0NAo+ID4gLS0tIGEvY29uZmln dXJlLmFjCj4gPiArKysgYi9jb25maWd1cmUuYWMKPiA+IEBAIC0yNjMsNiArMjYzLDE4IEBAIGlm IHRlc3QgIngkd2l0aF9saWJ1bndpbmQiID0geHllczsgdGhlbgo+ID4gwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoEFDX01TR19FUlJPUihbbGlidW53 aW5kIG5vdCBmb3VuZC4gVXNlIC0tCj4gPiB3aXRob3V0LWxpYnVud2luZCB0byBkaXNhYmxlIGxp YnVud2luZCBzdXBwb3J0Ll0pKQo+ID4gwqBmaQo+ID4gCj4gPiArIyBlbmFibGUgc3VwcG9ydCBm b3IgdXNpbmcgdGhlIGNoYW1lbGl1bQo+ID4gK0FDX0FSR19FTkFCTEUoY2hhbWVsaXVtLAo+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgQVNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS1jaGFt ZWxpdW1dLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgW0J1aWxkIHRlc3RzIHdpdGhvdXQgY2hhbWVsaXVtCj4gPiBzdXBwb3J0XSks Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBbXSwgW2VuYWJsZV9jaGFtZWxpdW09eWVz XSkKPiA+ICsKPiA+ICtBTV9DT05ESVRJT05BTChIQVZFX0NIQU1FTElVTSwgW3Rlc3QgIngkZW5h YmxlX2NoYW1lbGl1bSIgPSB4eWVzXSkKPiA+ICtpZiB0ZXN0ICJ4JGVuYWJsZV9jaGFtZWxpdW0i ID0geHllczsgdGhlbgo+ID4gK8KgwqDCoMKgwqDCoMKgQUNfREVGSU5FKEhBVkVfQ0hBTUVMSVVN LCAxLCBbY2hhbWVsaXVtIHN1cG9ydF0pCj4gPiArwqDCoMKgwqDCoMKgwqBQS0dfQ0hFQ0tfTU9E VUxFUyhYTUxSUEMsIHhtbHJwY19jbGllbnQpCj4gPiArZmkKPiA+ICsKPiAKPiBJTU8gbGlieG1s cnBjIGlzIGEgdmVyeSBjb21tb24gZGVwZW5kZW5jeSBhbmQgdGh1cyBhZGRpbmcgdGhlCj4gcG9z c2liaWxpdHkgb2YgZGlzYWJsaW5nIENoYW1lbGl1bSBzdXBwb3J0IGlzbid0IHdvcnRoIHRoZSBj cnVmdCB3ZQo+IGhhdmUgdG8gYWRkIGxhdGVyLiBQbHVzLCBhbHRlcm5hdGl2ZSBidWlsZCBjb25m aWd1cmF0aW9ucyB0ZW5kIHRvCj4gYnJlYWsgYW5kIHJlbWFpbiBicm9rZW4gYXMgbW9zdCBwZW9w bGUgaGFja2luZyBvbiB0aGUgcHJvamVjdCB3b24ndAo+IGJlCj4gdXNpbmcgdGhlbS4KPiAKPiA+ IMKgIyBlbmFibGUgZGVidWcgc3ltYm9scwo+ID4gwqBBQ19BUkdfRU5BQkxFKGRlYnVnLAo+ID4g wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoEFTX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtZGVi dWddLAo+ID4gQEAgLTM2MCw2ICszNzIsNyBAQCBlY2hvICLCoMKgwqDCoMKgwqDCoEFzc2VtYmxl csKgwqDCoMKgwqDCoMKgwqDCoMKgOgo+ID4gJHtlbmFibGVfYXNzZW1ibGVyfSIKPiA+IMKgZWNo byAiwqDCoMKgwqDCoMKgwqBEZWJ1Z2dlcsKgwqDCoMKgwqDCoMKgwqDCoMKgwqA6ICR7ZW5hYmxl X2RlYnVnZ2VyfSIKPiA+IMKgZWNobyAiwqDCoMKgwqDCoMKgwqBPdmVybGF5wqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgOiBYOiAke2VuYWJsZV9vdmVybGF5X3hsaWJ9LCBYdjoKPiA+ICR7ZW5hYmxl X292ZXJsYXlfeHZsaWJ9Igo+ID4gwqBlY2hvICLCoMKgwqDCoMKgwqDCoHg4Ni1zcGVjaWZpYyB0 b29scyA6ICR7YnVpbGRfeDg2fSIKPiA+ICtlY2hvICLCoMKgwqDCoMKgwqDCoENoYW1lbGl1bSBz dXBwb3J0wqDCoDogJHtlbmFibGVfY2hhbWVsaXVtfSIKPiA+IMKgZWNobyAiIgo+ID4gwqBlY2hv ICIg4oCiIEFQSS1Eb2N1bWVudGF0aW9uwqDCoMKgwqDCoMKgOiAke2VuYWJsZV9ndGtfZG9jfSIK PiA+IMKgZWNobyAiIOKAoiBGYWlsIG9uIHdhcm5pbmdzwqDCoMKgwqDCoMKgwqA6ICR7ZW5hYmxl X3dlcnJvcn0iCj4gPiBkaWZmIC0tZ2l0IGEvZG9jcy9yZWZlcmVuY2UvaW50ZWwtZ3B1LXRvb2xz L2ludGVsLWdwdS10b29scy0KPiA+IGRvY3MueG1sIGIvZG9jcy9yZWZlcmVuY2UvaW50ZWwtZ3B1 LXRvb2xzL2ludGVsLWdwdS10b29scy1kb2NzLnhtbAo+ID4gaW5kZXggNTU5MDJhYi4uZjUxNWYz MyAxMDA2NDQKPiA+IC0tLSBhL2RvY3MvcmVmZXJlbmNlL2ludGVsLWdwdS10b29scy9pbnRlbC1n cHUtdG9vbHMtZG9jcy54bWwKPiA+ICsrKyBiL2RvY3MvcmVmZXJlbmNlL2ludGVsLWdwdS10b29s cy9pbnRlbC1ncHUtdG9vbHMtZG9jcy54bWwKPiA+IEBAIC0zMyw2ICszMyw3IEBACj4gPiDCoMKg wqDCoMKgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2lndF92YzQueG1sIi8+Cj4gPiDCoMKgwqDCoMKg PHhpOmluY2x1ZGUgaHJlZj0ieG1sL2lndF92Z2VtLnhtbCIvPgo+ID4gwqDCoMKgwqDCoDx4aTpp bmNsdWRlIGhyZWY9InhtbC9pZ3RfZHVtbXlsb2FkLnhtbCIvPgo+ID4gK8KgwqDCoMKgPHhpOmlu Y2x1ZGUgaHJlZj0ieG1sL2lndF9jaGFtZWxpdW0ueG1sIi8+Cj4gPiDCoMKgwqA8L2NoYXB0ZXI+ Cj4gPiDCoMKgwqA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvaWd0X3Rlc3RfcHJvZ3JhbXMueG1sIi8+ Cj4gPiAKPiA+IGRpZmYgLS1naXQgYS9saWIvTWFrZWZpbGUuYW0gYi9saWIvTWFrZWZpbGUuYW0K PiA+IGluZGV4IGI3YzcwMjAuLjAxMzY2NjMgMTAwNjQ0Cj4gPiAtLS0gYS9saWIvTWFrZWZpbGUu YW0KPiA+ICsrKyBiL2xpYi9NYWtlZmlsZS5hbQo+ID4gQEAgLTIzLDcgKzIzLDcgQEAgaWYgIUhB VkVfTElCRFJNX0lOVEVMCj4gPiDCoGVuZGlmCj4gPiAKPiA+IMKgQU1fQ1BQRkxBR1MgPSAtSSQo dG9wX3NyY2RpcikKPiA+IC1BTV9DRkxBR1MgPSAkKENXQVJORkxBR1MpICQoRFJNX0NGTEFHUykg JChQQ0lBQ0NFU1NfQ0ZMQUdTKQo+ID4gJChLTU9EX0NGTEFHUykgJChMSUJVTldJTkRfQ0ZMQUdT KSAkKERFQlVHX0NGTEFHUykgXAo+ID4gK0FNX0NGTEFHUyA9ICQoQ1dBUk5GTEFHUykgJChEUk1f Q0ZMQUdTKSAkKFBDSUFDQ0VTU19DRkxBR1MpCj4gPiAkKEtNT0RfQ0ZMQUdTKSAkKExJQlVOV0lO RF9DRkxBR1MpICQoREVCVUdfQ0ZMQUdTKSAkKFhNTFJQQ19DRkxBR1MpCj4gPiAkKFVERVZfQ0ZM QUdTKSBcCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAtRElHVF9TUkNESVI9XCIiJChhYnNf dG9wX3NyY2RpcikvdGVzdHMiXCIgXAo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLURJR1Rf REFUQURJUj1cIiIkKHBrZ2RhdGFkaXIpIlwiIFwKPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oC1ESUdUX0xPR19ET01BSU49XCIiJChzdWJzdCBfLC0sJCopIlwiIFwKPiA+IEBAIC0zOSw1ICsz OSw3IEBAIGxpYmludGVsX3Rvb2xzX2xhX0xJQkFERCA9IFwKPiA+IMKgwqDCoMKgwqDCoMKgwqAk KExJQlVERVZfTElCUykgXAo+ID4gwqDCoMKgwqDCoMKgwqDCoCQoTElCVU5XSU5EX0xJQlMpIFwK PiA+IMKgwqDCoMKgwqDCoMKgwqAkKFRJTUVSX0xJQlMpIFwKPiA+ICvCoMKgwqDCoMKgwqDCoCQo WE1MUlBDX0xJQlMpIFwKPiA+ICvCoMKgwqDCoMKgwqDCoCQoVURFVl9MSUJTKSBcCj4gCj4gVGhl IHByZWZpeCB3ZSBwYXNzZWQgdG8gUEtHX0NIRUNLX01PRFVMRVMgaXMgTElCVURFVi4KPiAKPiA+ IMKgwqDCoMKgwqDCoMKgwqAtbG0KPiA+IAo+ID4gZGlmZiAtLWdpdCBhL2xpYi9NYWtlZmlsZS5z b3VyY2VzIGIvbGliL01ha2VmaWxlLnNvdXJjZXMKPiA+IGluZGV4IDdmYzVlYzIuLjcxMzJlMzIg MTAwNjQ0Cj4gPiAtLS0gYS9saWIvTWFrZWZpbGUuc291cmNlcwo+ID4gKysrIGIvbGliL01ha2Vm aWxlLnNvdXJjZXMKPiA+IEBAIC03OCw4ICs3OCwxNCBAQCBsaWJfc291cmNlX2xpc3QgPcKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoFwKPiA+IMKgwqDCoMKgwqDCoMKgwqBpZ3RfZHVtbXlsb2FkLmPC oMKgwqDCoMKgwqDCoMKgwqBcCj4gPiDCoMKgwqDCoMKgwqDCoMKgaWd0X2R1bW15bG9hZC5owqDC oMKgwqDCoMKgwqDCoMKgXAo+ID4gwqDCoMKgwqDCoMKgwqDCoHV3aWxkbWF0L3V3aWxkbWF0LmjC oMKgwqDCoMKgXAo+ID4gLcKgwqDCoMKgwqDCoMKgdXdpbGRtYXQvdXdpbGRtYXQuY8KgwqDCoMKg wqBcCj4gPiAtwqDCoMKgwqDCoMKgwqAkKE5VTEwpCj4gPiArwqDCoMKgwqDCoMKgwqB1d2lsZG1h dC91d2lsZG1hdC5jCj4gPiArCj4gPiAraWYgSEFWRV9DSEFNRUxJVU0KPiA+ICtsaWJfc291cmNl X2xpc3QgKz0gaWd0X2NoYW1lbGl1bS5oIFwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBpZ3RfY2hhbWVsaXVtLmMKPiA+ICtlbmRpZgo+ID4gKwo+ID4gK2xpYl9zb3Vy Y2VfbGlzdCArPSAkKE5VTEwpCj4gCj4gVGhlICQoTlVMTCkgd2FzIHRoZXJlIGp1c3Qgc28gdGhl IGxhc3QgbGluZSBpbiBsaWJfc291cmNlX2xpc3QgY291bGQKPiBlbmQgd2l0aCBcIGFuZCB0aHVz IGFkZGluZyBtb3JlIGZpbGVzIHRvIHRoZSBlbmQgd291bGRuJ3QgaGF2ZSB0bwo+IGNoYW5nZSBt b3JlIGxpbmVzIHRoYW4gc3RyaWN0bHkgbmVlZGVkLgo+IAo+ID4gCj4gPiDCoC5QSE9OWTogdmVy c2lvbi5oLnRtcAo+ID4gCj4gPiBkaWZmIC0tZ2l0IGEvbGliL2lndC5oIGIvbGliL2lndC5oCj4g PiBpbmRleCBhMDAyOGQ1Li5kMGRlZDc5IDEwMDY0NAo+ID4gLS0tIGEvbGliL2lndC5oCj4gPiAr KysgYi9saWIvaWd0LmgKPiA+IEBAIC00Nyw0ICs0Nyw4IEBACj4gPiDCoCNpbmNsdWRlICJtZWRp YV9zcGluLmgiCj4gPiDCoCNpbmNsdWRlICJyZW5kZXJjb3B5LmgiCj4gPiAKPiA+ICsjaWZkZWYg SEFWRV9DSEFNRUxJVU0KPiA+ICsjaW5jbHVkZSAiaWd0X2NoYW1lbGl1bS5oIgo+ID4gKyNlbmRp Zgo+ID4gKwo+ID4gwqAjZW5kaWYgLyogSUdUX0ggKi8KPiA+IGRpZmYgLS1naXQgYS9saWIvaWd0 X2NoYW1lbGl1bS5jIGIvbGliL2lndF9jaGFtZWxpdW0uYwo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2 NDQKPiA+IGluZGV4IDAwMDAwMDAuLmVlOTRlNGEKPiA+IC0tLSAvZGV2L251bGwKPiA+ICsrKyBi L2xpYi9pZ3RfY2hhbWVsaXVtLmMKPiA+IEBAIC0wLDAgKzEsODQ5IEBACj4gPiArLyoKPiA+ICsg KiBDb3B5cmlnaHQgwqkgMjAxNiBSZWQgSGF0IEluYy4KPiA+ICsgKgo+ID4gKyAqIFBlcm1pc3Np b24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uCj4gPiBv YnRhaW5pbmcgYQo+ID4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBk b2N1bWVudGF0aW9uIGZpbGVzICh0aGUKPiA+ICJTb2Z0d2FyZSIpLAo+ID4gKyAqIHRvIGRlYWwg aW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0Cj4g PiBsaW1pdGF0aW9uCj4gPiArICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVy Z2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsCj4gPiBzdWJsaWNlbnNlLAo+ID4gKyAqIGFuZC9vciBz ZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0bwo+ID4g d2hvbSB0aGUKPiA+ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3Qg dG8gdGhlIGZvbGxvd2luZwo+ID4gY29uZGl0aW9uczoKPiA+ICsgKgo+ID4gKyAqIFRoZSBhYm92 ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlCj4gPiAoaW5jbHVk aW5nIHRoZSBuZXh0Cj4gPiArICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwg Y29waWVzIG9yIHN1YnN0YW50aWFsCj4gPiBwb3J0aW9ucyBvZiB0aGUKPiA+ICsgKiBTb2Z0d2Fy ZS4KPiA+ICsgKgo+ID4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRI T1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAo+ID4gRVhQUkVTUyBPUgo+ID4gKyAqIElNUExJRUQs IElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKPiA+IE1FUkNI QU5UQUJJTElUWSwKPiA+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQg Tk9OSU5GUklOR0VNRU5ULsKgwqBJTiBOTwo+ID4gRVZFTlQgU0hBTEwKPiA+ICsgKiBUSEUgQVVU SE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwKPiA+IERB TUFHRVMgT1IgT1RIRVIKPiA+ICsgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9G IENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKPiA+IEFSSVNJTkcKPiA+ICsgKiBGUk9NLCBP VVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCj4g PiBPVEhFUiBERUFMSU5HUwo+ID4gKyAqIElOIFRIRSBTT0ZUV0FSRS4KPiA+ICsgKgo+ID4gKyAq IEF1dGhvcnM6Cj4gPiArICrCoMKgTHl1ZGUgUGF1bCA8bHl1ZGVAcmVkaGF0LmNvbT4KPiA+ICsg Ki8KPiA+ICsKPiA+ICsjaW5jbHVkZSAiY29uZmlnLmgiCj4gPiArCj4gPiArI2luY2x1ZGUgPHN0 cmluZy5oPgo+ID4gKyNpbmNsdWRlIDxlcnJuby5oPgo+ID4gKyNpbmNsdWRlIDx4bWxycGMtYy9i YXNlLmg+Cj4gPiArI2luY2x1ZGUgPHhtbHJwYy1jL2NsaWVudC5oPgo+ID4gKyNpbmNsdWRlIDxn bGliLmg+Cj4gPiArCj4gPiArI2luY2x1ZGUgImlndC5oIgo+ID4gKwo+ID4gKyNkZWZpbmUgY2hl Y2tfcnBjKCkgXAo+ID4gK8KgwqDCoMKgwqDCoMKgaWd0X2Fzc2VydF9mKCFlbnYuZmF1bHRfb2Nj dXJyZWQsICJDaGFtZWxpdW0gUlBDIGNhbGwKPiA+IGZhaWxlZDogJXNcbiIsIFwKPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZW52LmZhdWx0X3N0cmluZyk7Cj4g PiArCj4gPiArLyoqCj4gPiArICogU0VDVElPTjppZ3RfY2hhbWVsaXVtCj4gPiArICogQHNob3J0 X2Rlc2NyaXB0aW9uOiBMaWJyYXJ5IGZvciBlbmNvcnBvcmF0aW5nIHRoZSBDaGFtZWxpdW0KPiA+ IGludG8gaWd0IHRlc3RzCj4gCj4gaW5jb3Jwb3JhdGluZyAodGhvdWdoIEkgd291bGQgcGVyc29u YWxseSBqdXN0IHNheSAidXNpbmciKQo+IAo+ID4gKyAqIEB0aXRsZTogQ2hhbWVsaXVtCj4gPiAr ICogQGluY2x1ZGU6IGlndF9jaGFtZWxpdW0uaAo+ID4gKyAqCj4gPiArICogVGhpcyBsaWJyYXJ5 IGNvbnRhaW5zIGhlbHBlcnMgZm9yIHVzaW5nIENoYW1lbGl1bXMgaW4gSUdUCj4gPiB0ZXN0cy4g VGhpcyBhbGxvd3MKPiA+ICsgKiBmb3IgdGVzdHMgdG8gc2ltdWxhdGUgbW9yZSBkaWZmaWN1bHQg dGFza3MgdG8gYXV0b21hdGUgc3VjaCBhcwo+ID4gZGlzcGxheQo+ID4gKyAqIGhvdHBsdWdnaW5n LCBmYXVsdHkgZGlzcGxheSBiZWhhdmlvcnMsIGV0Yy4KPiA+ICsgKgo+ID4gKyAqIE1vcmUgaW5m b3JtYXRpb24gb24gdGhlIENoYW1lbGl1bSBjYW4gYmUgZm91bmQKPiA+ICsgKiBbb24gdGhlIENo cm9tZU9TIHByb2plY3QgcGFnZV0oaHR0cHM6Ly93d3cuY2hyb21pdW0ub3JnL2Nocm9taXUKPiA+ IG0tb3MvdGVzdGluZy9jaGFtZWxpdW0pLgo+ID4gKyAqCj4gPiArICogSW4gb3JkZXIgdG8gcnVu IHRlc3RzIHVzaW5nIHRoZSBDaGFtZWxpdW0sIGEgdmFsaWQKPiA+IGNvbmZpZ3VyYXRpb24gZmls ZSBtdXN0IGJlCj4gPiArICogcHJlc2VudC7CoMKgVGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBpcyBh IG5vcm1hbCBHbGliIGtleWZpbGUKPiA+IChzaW1pbGFyIHRvIFdpbmRvd3MKPiA+ICsgKiBJTkkp IHN0cnVjdHVyZWQgbGlrZSBzbzoKPiA+ICsgKgo+ID4gKyAqIHxbPCEtLSBsYW5ndWFnZT0icGxh aW4iIC0tPgo+ID4gKyAqwqDCoMKgwqDCoFtDaGFtZWxpdW1dCj4gPiArICrCoMKgwqDCoMKgVVJM PWh0dHA6Ly9jaGFtZWxlb246OTk5MiAjIFRoZSBVUkwgdXNlZCBmb3IgY29ubmVjdGluZyB0bwo+ ID4gdGhlIENoYW1lbGl1bSdzIFJQQyBzZXJ2ZXIKPiA+ICsgKgo+ID4gKyAqwqDCoMKgwqDCoCMg VGhlIHJlc3Qgb2YgdGhlIHNlY3Rpb25zIGFyZSB1c2VkIGZvciBkZWZpbmluZyBjb25uZWN0b3IK PiA+IG1hcHBpbmdzLgo+ID4gKyAqwqDCoMKgwqDCoCMgVGhpcyBpcyByZXF1aXJlZCBzbyBhbnkg dGVzdHMgdXNpbmcgdGhlIENoYW1lbGl1bSBrbm93Cj4gPiB3aGljaCBjb25uZWN0b3IKPiA+ICsg KsKgwqDCoMKgwqAjIG9uIHRoZSB0ZXN0IG1hY2hpbmUgc2hvdWxkIGJlIGNvbm5lY3RlZCB0byBl YWNoIENoYW1lbGl1bQo+ID4gcG9ydC4KPiA+ICsgKsKgwqDCoMKgwqAjCj4gPiArICrCoMKgwqDC oMKgIyBJbiB0aGUgZXZlbnQgdGhhdCBhbnkgb2YgdGhlc2UgbWFwcGluZ3MgYXJlIHNwZWNpZmll ZAo+ID4gaW5jb3JyZWN0bHksCj4gPiArICrCoMKgwqDCoMKgIyBhbnkgaG90cGx1Z2dpbmcgdGVz dHMgZm9yIHRoZSBpbmNvcnJlY3QgY29ubmVjdG9yIG1hcHBpbmcKPiA+IHdpbGwgZmFpbC4KPiA+ ICsgKgo+ID4gKyAqwqDCoMKgwqDCoFtEUC0xXSAjIFRoZSBuYW1lIG9mIHRoZSBEUk0gY29ubmVj dG9yCj4gPiArICrCoMKgwqDCoMKgQ2hhbWVsaXVtUG9ydElEPTEgIyBUaGUgSUQgb2YgdGhlIHBv cnQgb24gdGhlIENoYW1lbGl1bQo+ID4gdGhpcyBjb25uZWN0b3IgaXMgYXR0YWNoZWQgdG8KPiA+ ICsgKgo+ID4gKyAqwqDCoMKgwqDCoFtIRE1JLUEtMV0KPiA+ICsgKsKgwqDCoMKgwqBDaGFtZWxp dW1Qb3J0SUQ9Mwo+ID4gKyAqIF18Cj4gPiArICoKPiA+ICsgKiBCeSBkZWZhdWx0LCB0aGlzIGZp bGUgaXMgZXhwZWN0ZWQgdG8gZXhpc3QgaW4KPiA+IH4vLmlndF9jaGFtZWxpdW1fcmMgLiBUaGUK PiA+ICsgKiBkaXJlY3RvcnkgZm9yIHRoaXMgY2FuIGJlIG92ZXJyaWRlbiBieSBzZXR0aW5nIHRo ZSBlbnZpcm9ubWVudAo+ID4gdmFyaWFibGUKPiA+ICsgKiAlQ0hBTUVMSVVNX0NPTkZJR19QQVRI Lgo+IAo+IEl0IHdvdWxkIGJlIGEgcGl0eSBpZiBpbiB0aW1lIHdlIG5lZWQgdG8gYWRkIGNvbmZp Z3VyYXRpb24gcGFyYW1ldGVycwo+IGZvciBvdGhlciBhc3BlY3RzIG9mIElHVCBhbmQgd2UgaGF2 ZSB0byBjaG9vc2UgYmV0d2VlbiByZW5hbWluZyB0aGlzCj4gZmlsZSwgb3IgaGF2aW5nIHR3byBj b25maWd1cmF0aW9uIGZpbGVzIGZvciB0aGUgc2FtZSBwcm9qZWN0LiBXaHkgbm90Cj4gY2FsbCBp dCBqdXN0IC5pZ3RfcmM/Ck5pY2UgY2F0Y2guIFdoaWxlIEknbSBhdCBpdCBJJ2xsIGFkZCBhIHBh dGNoIHRvIGV4cG9zZSBhIGZ1bmN0aW9uIG9yCnR3byB0byBnZXQgYSBnbG9iYWwgR0tleUZpbGUg dGhhdCdzIHNoYXJlZCBhY3Jvc3MgdGVzdHMgdGhhdCBuZWVkCmNvbmZpZ3VyYXRpb25zLiBBcyB3 ZWxsIEknbGwgbWFrZSBzdXJlIGNvbm5lY3RvciBncm91cHMgYXJlIHByZWZpeGVkCndpdGggc29t ZXRoaW5nIHN1Y2ggYXMgIkNoYW1lbGl1bToiIHNpbmNlIHdlJ2xsIGJlIHNoYXJpbmcgdGhpbmdz LgoKPiAKPiA+ICsgKi8KPiA+ICsKPiA+ICsvKioKPiA+ICsgKiBjaGFtZWxpdW1fcG9ydHM6Cj4g PiArICoKPiA+ICsgKiBDb250YWlucyBpbmZvcm1hdGlvbiBvbiBhbGwgb2YgdGhlIHBvcnRzIHRo YXQgYXJlIGNvbmZpZ3VyZWQKPiA+IGZvciB1c2Ugd2l0aCB0aGUKPiA+ICsgKiBDaGFtZWxpdW0u IFRoaXMgaW5mb3JtYXRpb24gaXMgaW5pdGlhbGl6ZWQgd2hlbiAjY2hhbWVsaXVtX2luaXQKPiA+ IGlzIGNhbGxlZC4KPiA+ICsgKi8KPiA+ICtzdHJ1Y3QgY2hhbWVsaXVtX3BvcnQgKmNoYW1lbGl1 bV9wb3J0czsKPiA+ICsKPiA+ICsvKioKPiA+ICsgKiBjaGFtZWxpdW1fcG9ydF9jb3VudDoKPiA+ ICsgKgo+ID4gKyAqIEhvdyBtYW55IHBvcnRzIGFyZSBjb25maWd1cmVkIGZvciB1c2UgYnkgdGhl IENoYW1lbGl1bS4KPiA+ICsgKi8KPiA+ICtpbnQgY2hhbWVsaXVtX3BvcnRfY291bnQ7Cj4gPiAr Cj4gPiArc3RhdGljIGNvbnN0IGNoYXIgKmNoYW1lbGl1bV91cmw7Cj4gPiArc3RhdGljIHhtbHJw Y19lbnYgZW52Owo+IAo+IEkgdGhpbmsgaXQgd291bGQgYmUgYmV0dGVyIHRvIGZvbGxvdyB0aGUg c2FtZSBwYXR0ZXJuIGFzIHVzZWQgaW4KPiBpZ3RfcGlwZV9jcmNfIGNhbGxzIGFuZCBleHBsaWNp dGx5IHBhc3MgYSBwb2ludGVyIHRvIGEgaWd0X3BpcGVfY3JjX3QKPiBhcm91bmQsIGluc3RlYWQg b2YgdXNpbmcgZ2xvYmFscy4KPiAKPiA+ICsKPiA+ICtzdHJ1Y3QgY2hhbWVsaXVtX2VkaWQgewo+ ID4gK8KgwqDCoMKgwqDCoMKgaW50IGlkOwo+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGlndF9s aXN0IGxpbms7Cj4gPiArfTsKPiA+ICtzdHJ1Y3QgY2hhbWVsaXVtX2VkaWQgKmFsbG9jYXRlZF9l ZGlkczsKPiA+ICsKPiA+ICsvKioKPiA+ICsgKiBjaGFtZWxpdW1fcGx1ZzoKPiA+ICsgKiBAaWQ6 IFRoZSBJRCBvZiB0aGUgcG9ydCBvbiB0aGUgY2hhbWVsaXVtIHRvIHBsdWcKPiA+ICsgKgo+ID4g KyAqIFNpbXVsYXRlIGEgZGlzcGxheSBjb25uZWN0b3IgYmVpbmcgcGx1Z2dlZCBpbnRvIHRoZSBz eXN0ZW0KPiA+IHVzaW5nIHRoZQo+ID4gKyAqIGNoYW1lbGl1bS4KPiA+ICsgKi8KPiA+ICt2b2lk IGNoYW1lbGl1bV9wbHVnKGludCBpZCkKPiA+ICt7Cj4gPiArwqDCoMKgwqDCoMKgwqB4bWxycGNf dmFsdWUgKnJlczsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoGlndF9kZWJ1ZygiUGx1Z2dpbmcg cG9ydCAlZFxuIiwgaWQpOwo+IAo+IEZvciB0aGlzIGFuZCBvdGhlciBwbGFjZXMgYmVsb3csIEkg dGhpbmsgaXQgY291bGQgYmUgdmVyeSB1c2VmdWwgd2hlbgo+IHJlYWRpbmcgbG9ncyBmcm9tIENJ IGlmIHdlIGNvdWxkIGhhdmUgdGhlIG5hbWUgb2YgdGhlIGNvbm5lY3RvciBhbG9uZwo+IG9yIGlu c3RlYWQgdGhlIGNoYW1lbGl1bSBwb3J0IGlkLgo+IAo+ID4gK8KgwqDCoMKgwqDCoMKgcmVzID0g eG1scnBjX2NsaWVudF9jYWxsKCZlbnYsIGNoYW1lbGl1bV91cmwsICJQbHVnIiwKPiA+ICIoaSki LCBpZCk7Cj4gPiArwqDCoMKgwqDCoMKgwqBjaGVja19ycGMoKTsKPiA+ICsKPiA+ICvCoMKgwqDC oMKgwqDCoHhtbHJwY19ERUNSRUYocmVzKTsKPiA+ICt9Cj4gPiArCj4gPiArLyoqCj4gPiArICog Y2hhbWVsaXVtX3VucGx1ZzoKPiA+ICsgKiBAaWQ6IFRoZSBJRCBvZiB0aGUgcG9ydCBvbiB0aGUg Y2hhbWVsaXVtIHRvIHVucGx1Zwo+ID4gKyAqCj4gPiArICogU2ltdWxhdGUgYSBkaXNwbGF5IGNv bm5lY3RvciBiZWluZyB1bnBsdWdnZWQgZnJvbSB0aGUgc3lzdGVtCj4gPiB1c2luZyB0aGUKPiA+ ICsgKiBjaGFtZWxpdW0uCj4gPiArICovCj4gPiArdm9pZCBjaGFtZWxpdW1fdW5wbHVnKGludCBp ZCkKPiA+ICt7Cj4gPiArwqDCoMKgwqDCoMKgwqB4bWxycGNfdmFsdWUgKnJlczsKPiA+ICsKPiA+ ICvCoMKgwqDCoMKgwqDCoGlndF9kZWJ1ZygiVW5wbHVnZ2luZyBwb3J0ICVkXG4iLCBpZCk7Cj4g PiArwqDCoMKgwqDCoMKgwqByZXMgPSB4bWxycGNfY2xpZW50X2NhbGwoJmVudiwgY2hhbWVsaXVt X3VybCwgIlVucGx1ZyIsCj4gPiAiKGkpIiwgaWQpOwo+ID4gK8KgwqDCoMKgwqDCoMKgY2hlY2tf cnBjKCk7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqB4bWxycGNfREVDUkVGKHJlcyk7Cj4gPiAr fQo+ID4gKwo+ID4gKy8qKgo+ID4gKyAqIGNoYW1lbGl1bV9pc19wbHVnZ2VkOgo+ID4gKyAqIEBp ZDogVGhlIElEIG9mIHRoZSBwb3J0IG9uIHRoZSBjaGFtZWxpdW0gdG8gY2hlY2sgdGhlIHN0YXR1 cyBvZgo+ID4gKyAqCj4gPiArICogQ2hlY2sgd2hldGhlciBvciBub3QgdGhlIGdpdmVuIHBvcnQg aGFzIGJlZW4gcGx1Z2dlZCBpbnRvIHRoZQo+ID4gc3lzdGVtIHVzaW5nCj4gPiArICogI2NoYW1l bGl1bV9wbHVnLgo+ID4gKyAqCj4gPiArICogUmV0dXJuczogJXRydWUgaWYgdGhlIGNvbm5lY3Rv ciBpcyBzZXQgdG8gcGx1Z2dlZCBpbiwgJWZhbHNlCj4gPiBvdGhlcndpc2UuCj4gPiArICovCj4g PiArYm9vbCBjaGFtZWxpdW1faXNfcGx1Z2dlZChpbnQgaWQpCj4gPiArewo+ID4gK8KgwqDCoMKg wqDCoMKgeG1scnBjX3ZhbHVlICpyZXM7Cj4gPiArwqDCoMKgwqDCoMKgwqB4bWxycGNfYm9vbCBp c19wbHVnZ2VkOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgcmVzID0geG1scnBjX2NsaWVudF9j YWxsKCZlbnYsIGNoYW1lbGl1bV91cmwsICJJc1BsdWdnZWQiLAo+ID4gIihpKSIsIGlkKTsKPiA+ ICvCoMKgwqDCoMKgwqDCoGNoZWNrX3JwYygpOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgeG1s cnBjX3JlYWRfYm9vbCgmZW52LCByZXMsICZpc19wbHVnZ2VkKTsKPiA+ICvCoMKgwqDCoMKgwqDC oHhtbHJwY19ERUNSRUYocmVzKTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHJldHVybiBpc19w bHVnZ2VkOwo+ID4gK30KPiA+ICsKPiA+ICsvKioKPiA+ICsgKiBjaGFtZWxpdW1fcG9ydF93YWl0 X3ZpZGVvX2lucHV0X3N0YWJsZToKPiA+ICsgKiBAaWQ6IFRoZSBJRCBvZiB0aGUgcG9ydCBvbiB0 aGUgY2hhbWVsaXVtIHRvIGNoZWNrIHRoZSBzdGF0dXMgb2YKPiA+ICsgKiBAdGltZW91dF9zZWNz OiBIb3cgbG9uZyB0byB3YWl0IGZvciBhIHZpZGVvIHNpZ25hbCB0byBhcHBlYXIKPiA+IGJlZm9y ZSB0aW1pbmcKPiA+ICsgKiBvdXQKPiA+ICsgKgo+ID4gKyAqIFdhaXRzIGZvciBhIHZpZGVvIHNp Z25hbCB0byBhcHBlYXIgb24gdGhlIGdpdmVuIHBvcnQuIFRoaXMgaXMKPiA+IHVzZWZ1bCBmb3IK PiA+ICsgKiBjaGVja2luZyB3aGV0aGVyIG9yIG5vdCB3ZSd2ZSBzZXR1cCBhIG1vbml0b3IgY29y cmVjdGx5Lgo+ID4gKyAqCj4gPiArICogUmV0dXJuczogJXRydWUgaWYgYSB2aWRlbyBzaWduYWwg d2FzIGRldGVjdGVkLCAlZmFsc2UgaWYgd2UKPiA+IHRpbWVkIG91dAo+ID4gKyAqLwo+ID4gK2Jv b2wgY2hhbWVsaXVtX3BvcnRfd2FpdF92aWRlb19pbnB1dF9zdGFibGUoaW50IGlkLCBpbnQKPiA+ IHRpbWVvdXRfc2VjcykKPiA+ICt7Cj4gPiArwqDCoMKgwqDCoMKgwqB4bWxycGNfdmFsdWUgKnJl czsKPiA+ICvCoMKgwqDCoMKgwqDCoHhtbHJwY19ib29sIGlzX29uOwo+ID4gKwo+ID4gK8KgwqDC oMKgwqDCoMKgaWd0X2RlYnVnKCJXYWl0aW5nIGZvciB2aWRlbyBpbnB1dCB0byBzdGFiYWxpemUg b24gcG9ydAo+ID4gJWRcbiIsIGlkKTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHJlcyA9IHht bHJwY19jbGllbnRfY2FsbCgmZW52LCBjaGFtZWxpdW1fdXJsLAo+ID4gIldhaXRWaWRlb0lucHV0 U3RhYmxlIiwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIihpaSkiLCBpZCwgdGltZW91dF9zZWNzKTsKPiA+ICvCoMKg wqDCoMKgwqDCoGNoZWNrX3JwYygpOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgeG1scnBjX3Jl YWRfYm9vbCgmZW52LCByZXMsICZpc19vbik7Cj4gPiArwqDCoMKgwqDCoMKgwqB4bWxycGNfREVD UkVGKHJlcyk7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gaXNfb247Cj4gPiArfQo+ ID4gKwo+ID4gKy8qKgo+ID4gKyAqIGNoYW1lbGl1bV9maXJlX2hwZF9wdWxzZXM6Cj4gPiArICog QGlkOiBUaGUgSUQgb2YgdGhlIHBvcnQgdG8gZmlyZSBob3RwbHVnIHB1bHNlcyBvbgo+ID4gKyAq IEB3aWR0aF9tc2VjOiBIb3cgbG9uZyBlYWNoIHB1bHNlIHNob3VsZCBsYXN0Cj4gPiArICogQGNv dW50OiBUaGUgbnVtYmVyIG9mIHB1bHNlcyB0byBzZW5kCj4gPiArICoKPiA+ICsgKiBBIGNvbnZp ZW5lbmNlIGZ1bmN0aW9uIGZvciBzZW5kaW5nIG11bHRpcGxlIGhvdHBsdWcgcHVsc2VzIHRvCj4g PiB0aGUgc3lzdGVtLgo+ID4gKyAqIFRoZSBwdWxzZXMgc3RhcnQgYXQgbG93IChlLmcuIGNvbm5l Y3RvciBpcyBkaXNjb25uZWN0ZWQpLCBhbmQKPiA+IHRoZW4gYWx0ZXJuYXRlCj4gPiArICogZnJv bSBoaWdoIChlLmcuIGNvbm5lY3RvciBpcyBwbHVnZ2VkIGluKSB0byBsb3cuIFRoaXMgaXMgdGhl Cj4gPiBlcXVpdmFsZW50IG9mCj4gPiArICogcmVwZWF0ZWRseSBjYWxsaW5nICNjaGFtZWxpdW1f cGx1ZyBhbmQgI2NoYW1lbGl1bV91bnBsdWcsCj4gPiB3YWl0aW5nCj4gPiArICogQHdpZHRoX21z ZWMgYmV0d2VlbiBlYWNoIGNhbGwuCj4gPiArICoKPiA+ICsgKiBJZiBAY291bnQgaXMgZXZlbiwg dGhlIGxhc3QgcHVsc2Ugc2VudCB3aWxsIGJlIGhpZ2gsIGFuZCBpZgo+ID4gaXQncyBvZGQgdGhl biBpdAo+ID4gKyAqIHdpbGwgYmUgbG93LiBSZXNldHRpbmcgdGhlIEhQRCBsaW5lIGJhY2sgdG8g aXQncyBwcmV2aW91cwo+ID4gc3RhdGUsIGlmIGRlc2lyZWQsCj4gPiArICogaXMgdGhlIHJlc3Bv bnNpYmlsaXR5IG9mIHRoZSBjYWxsZXIuCj4gPiArICovCj4gPiArdm9pZCBjaGFtZWxpdW1fZmly ZV9ocGRfcHVsc2VzKGludCBpZCwgaW50IHdpZHRoX21zZWMsIGludCBjb3VudCkKPiA+ICt7Cj4g PiArwqDCoMKgwqDCoMKgwqB4bWxycGNfdmFsdWUgKnB1bHNlX3dpZHRocyA9IHhtbHJwY19hcnJh eV9uZXcoJmVudiksCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCp3aWR0aCA9IHhtbHJwY19pbnRfbmV3KCZlbnYsIHdpZHRoX21zZWMpLAo+ID4gKnJlczsKPiAK PiBJZiBpdCdzIGdvaW5nIHRvIGJlIHR3byBsaW5lcyBhbnl3YXksIHdlIG1heSBqdXN0IGxlYXZl IHRoZSB0eXBlCj4gc3BlY2lmaWVyIGluIHRoZSBzZWNvbmQgb25lLgo+IAo+ID4gK8KgwqDCoMKg wqDCoMKgaW50IGk7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBpZ3RfZGVidWcoIkZpcmluZyAl ZCBIUEQgcHVsc2VzIHdpdGggd2lkdGggb2YgJWQgbXNlYyBvbiBpZAo+ID4gJWRcbiIsCj4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNvdW50LCB3aWR0aF9tc2VjLCBpZCk7 Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykKPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB4bWxycGNfYXJyYXlfYXBwZW5kX2l0ZW0o JmVudiwgcHVsc2Vfd2lkdGhzLAo+ID4gd2lkdGgpOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKg cmVzID0geG1scnBjX2NsaWVudF9jYWxsKCZlbnYsIGNoYW1lbGl1bV91cmwsCj4gPiAiRmlyZU1p eGVkSHBkUHVsc2VzIiwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIihpQSkiLCBpZCwgcHVsc2Vfd2lkdGhzKTsKPiA+ ICvCoMKgwqDCoMKgwqDCoGNoZWNrX3JwYygpOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgeG1s cnBjX0RFQ1JFRihyZXMpOwo+ID4gK8KgwqDCoMKgwqDCoMKgeG1scnBjX0RFQ1JFRih3aWR0aCk7 Cj4gPiArwqDCoMKgwqDCoMKgwqB4bWxycGNfREVDUkVGKHB1bHNlX3dpZHRocyk7Cj4gPiArfQo+ ID4gKwo+ID4gKy8qKgo+ID4gKyAqIGNoYW1lbGl1bV9maXJlX21peGVkX2hwZF9wdWxzZXM6Cj4g PiArICogQGlkOiBUaGUgSUQgb2YgdGhlIHBvcnQgdG8gZmlyZSBob3RwbHVnIHB1bHNlcyBvbgo+ ID4gKyAqIEAuLi46IFRoZSBsZW5ndGggb2YgZWFjaCBwdWxzZSBpbiBtaWxsaXNlY29uZHMsIHRl cm1pbmF0ZWQgd2l0aAo+ID4gYSAlMAo+ID4gKyAqCj4gPiArICogRG9lcyB0aGUgc2FtZSB0aGlu ZyBhcyAjY2hhbWVsaXVtX2ZpcmVfaHBkX3B1bHNlcywgYnV0IGFsbG93cwo+ID4gdGhlIGNhbGxl ciB0bwo+ID4gKyAqIHNwZWNpZnkgdGhlIGxlbmd0aCBvZiBlYWNoIGluZGl2aWR1YWwgcHVsc2Uu Cj4gPiArICovCj4gPiArdm9pZCBjaGFtZWxpdW1fZmlyZV9taXhlZF9ocGRfcHVsc2VzKGludCBp ZCwgLi4uKQo+ID4gK3sKPiA+ICvCoMKgwqDCoMKgwqDCoHZhX2xpc3QgYXJnczsKPiA+ICvCoMKg wqDCoMKgwqDCoHhtbHJwY192YWx1ZSAqcHVsc2Vfd2lkdGhzID0geG1scnBjX2FycmF5X25ldygm ZW52KSwKPiA+ICp3aWR0aCwgKnJlczsKPiA+ICvCoMKgwqDCoMKgwqDCoGludCBhcmc7Cj4gPiAr Cj4gPiArwqDCoMKgwqDCoMKgwqBpZ3RfZGVidWcoIkZpcmluZyBtaXhlZCBIUEQgcHVsc2VzIG9u IHBvcnQgJWRcbiIsIGlkKTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHZhX3N0YXJ0KGFyZ3Ms IGlkKTsKPiA+ICvCoMKgwqDCoMKgwqDCoGZvciAoYXJnID0gdmFfYXJnKGFyZ3MsIGludCk7IGFy ZzsgYXJnID0gdmFfYXJnKGFyZ3MsIGludCkpCj4gPiB7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgd2lkdGggPSB4bWxycGNfaW50X25ldygmZW52LCBhcmcpOwo+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHhtbHJwY19hcnJheV9hcHBlbmRfaXRlbSgmZW52LCBw dWxzZV93aWR0aHMsCj4gPiB3aWR0aCk7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgeG1scnBjX0RFQ1JFRih3aWR0aCk7Cj4gPiArwqDCoMKgwqDCoMKgwqB9Cj4gPiArwqDCoMKg wqDCoMKgwqB2YV9lbmQoYXJncyk7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqByZXMgPSB4bWxy cGNfY2xpZW50X2NhbGwoJmVudiwgY2hhbWVsaXVtX3VybCwKPiA+ICJGaXJlTWl4ZWRIcGRQdWxz ZXMiLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAiKGlBKSIsIGlkLCBwdWxzZV93aWR0aHMpOwo+ID4gK8KgwqDCoMKg wqDCoMKgY2hlY2tfcnBjKCk7Cj4gPiArwqDCoMKgwqDCoMKgwqB4bWxycGNfREVDUkVGKHJlcyk7 Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqB4bWxycGNfREVDUkVGKHB1bHNlX3dpZHRocyk7Cj4g PiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIGFzeW5jX3JwY19oYW5kbGVyKGNvbnN0IGNoYXIg KnNlcnZlcl91cmwsIGNvbnN0IGNoYXIKPiA+ICptZXRob2RfbmFtZSwKPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgeG1scnBjX3Zh bHVlICpwYXJhbV9hcnJheSwgdm9pZAo+ID4gKnVzZXJfZGF0YSwKPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgeG1scnBjX2VudiAq ZmF1bHQsIHhtbHJwY192YWx1ZQo+ID4gKnJlc3VsdCkKPiA+ICt7Cj4gPiArwqDCoMKgwqDCoMKg wqAvKiBXZSBkb24ndCBjYXJlIGFib3V0IHRoZSByZXNwb25zZXMgKi8KPiAKPiBXaGF0IGFib3V0 IHJlcG9ydGluZyBhbnkgZXJyb3JzPwoKU2VlIGJlbG93Cj4gCj4gPiArfQo+ID4gKwo+ID4gKy8q Kgo+ID4gKyAqIGNoYW1lbGl1bV9hc3luY19ocGRfcHVsc2Vfc3RhcnQ6Cj4gPiArICogQGlkOiBU aGUgSUQgb2YgdGhlIHBvcnQgdG8gZmlyZSBhIGhvdHBsdWcgcHVsc2Ugb24KPiA+ICsgKiBAaGln aDogV2hldGhlciB0byBmaXJlIGEgaGlnaCBwdWxzZSAoZS5nLiBzaW11bGF0ZSBhIGNvbm5lY3Qp LAo+ID4gb3IgYSBsb3cKPiA+ICsgKiBwdWxzZSAoZS5nLiBzaW11bGF0ZSBhIGRpc2Nvbm5lY3Qp Cj4gPiArICogQGRlbGF5X3NlY3M6IEhvdyBsb25nIHRvIHdhaXQgYmVmb3JlIHNlbmRpbmcgdGhl IEhQRCBwdWxzZS4KPiA+ICsgKgo+ID4gKyAqIEluc3RydWN0cyB0aGUgY2hhbWVsaXVtIHRvIHNl bmQgYW4gaHBkIHB1bHNlIGFmdGVyIEBkZWxheV9zZWNzCj4gPiBzZWNvbmRzIGhhdmUKPiA+ICsg KiBwYXNzZWQsIHdpdGhvdXQgd2FpdGluZyBmb3IgdGhlIGNoYW1lbGl1bSB0byBmaW5pc2guIFRo aXMgaXMKPiA+IHVzZWZ1bCBmb3IKPiA+ICsgKiB0ZXN0aW5nIHRoaW5ncyBzdWNoIGFzIGhwZCBh ZnRlciBhIHN1c3BlbmQvcmVzdW1lIGN5Y2xlLCBzaW5jZQo+ID4gd2UgY2FuJ3QgdGVsbAo+ID4g KyAqIHRoZSBjaGFtZWxpdW0gdG8gc2VuZCBhIGhvdHBsdWcgYXQgdGhlIHNhbWUgdGltZSB0aGF0 IG91cgo+ID4gc3lzdGVtIGlzCj4gPiArICogc3VzcGVuZGVkLgo+ID4gKyAqCj4gPiArICogSXQg aXMgcmVxdWlyZWQgdGhhdCB0aGUgdXNlciBldmVudHVhbGx5IGNhbGwKPiA+ICsgKiAjY2hhbWVs aXVtX2FzeW5jX2hwZF9wdWxzZV9maW5pc2gsIHRvIGNsZWFuIHVwIHRoZSBsZWZ0b3Zlcgo+ID4g WE1MLVJQQwo+ID4gKyAqIHJlc3BvbnNlcyBmcm9tIHRoZSBjaGFtZWxpdW0uCj4gPiArICovCj4g PiArdm9pZCBjaGFtZWxpdW1fYXN5bmNfaHBkX3B1bHNlX3N0YXJ0KGludCBpZCwgYm9vbCBoaWdo LCBpbnQKPiA+IGRlbGF5X3NlY3MpCj4gPiArewo+ID4gK8KgwqDCoMKgwqDCoMKgeG1scnBjX3Zh bHVlICpwdWxzZV93aWR0aHMgPSB4bWxycGNfYXJyYXlfbmV3KCZlbnYpLAo+ID4gKndpZHRoOwo+ ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgLyogVE9ETzogQWN0dWFsbHkgaW1wbGVtZW50IHNvbWV0 aGluZyBpbiB0aGUgY2hhbWVsZW9uCj4gPiBzZXJ2ZXIgdG8gYWxsb3cKPiA+ICvCoMKgwqDCoMKg wqDCoMKgKiBmb3IgZGVsYXllZCBhY3Rpb25zIHN1Y2ggYXMgaG90cGx1Z3MuIFRoaXMgd291bGQg d29yayBhCj4gPiBiaXQgYmV0dGVyCj4gPiArwqDCoMKgwqDCoMKgwqDCoCogYW5kIGFsbG93IHVz IHRvIHRlc3Qgc3VzcGVuZC9yZXN1bWUgb24gcG9ydHMgd2l0aG91dCBocGQKPiA+IGxpa2UgVkdB Cj4gPiArwqDCoMKgwqDCoMKgwqDCoCovCj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBpZ3RfZGVi dWcoIlNlbmRpbmcgSFBEIHB1bHNlICglcykgb24gcG9ydCAlZCB3aXRoICVkIHNlY29uZAo+ID4g ZGVsYXlcbiIsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGhpZ2ggPyAi aGlnaC0+bG93IiA6ICJsb3ctPmhpZ2giLCBpZCwKPiA+IGRlbGF5X3NlY3MpOwo+ID4gKwo+ID4g K8KgwqDCoMKgwqDCoMKgLyogSWYgd2UncmUgc3RhcnRpbmcgYXQgaGlnaCwgbWFrZSB0aGUgZmly c3QgcHVsc2Ugd2lkdGggMAo+ID4gc28gd2Uga2VlcAo+ID4gK8KgwqDCoMKgwqDCoMKgwqAqIHRo ZSBwb3J0IGNvbm5lY3RlZCAqLwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKGhpZ2gpIHsKPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB3aWR0aCA9IHhtbHJwY19pbnRfbmV3KCZlbnYs IDApOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHhtbHJwY19hcnJheV9hcHBl bmRfaXRlbSgmZW52LCBwdWxzZV93aWR0aHMsCj4gPiB3aWR0aCk7Cj4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgeG1scnBjX0RFQ1JFRih3aWR0aCk7Cj4gPiArwqDCoMKgwqDCoMKg wqB9Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqB3aWR0aCA9IHhtbHJwY19pbnRfbmV3KCZlbnYs IGRlbGF5X3NlY3MgKiAxMDAwKTsKPiA+ICvCoMKgwqDCoMKgwqDCoHhtbHJwY19hcnJheV9hcHBl bmRfaXRlbSgmZW52LCBwdWxzZV93aWR0aHMsIHdpZHRoKTsKPiA+ICvCoMKgwqDCoMKgwqDCoHht bHJwY19ERUNSRUYod2lkdGgpOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgeG1scnBjX2NsaWVu dF9jYWxsX2FzeW5jaChjaGFtZWxpdW1fdXJsLAo+ID4gIkZpcmVNaXhlZEhwZFB1bHNlcyIsCj4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgYXN5bmNfcnBjX2hhbmRsZXIsIE5VTEwsICIoaUEpIiwKPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBpZCwgcHVsc2Vfd2lkdGhzKTsKPiA+ICvCoMKgwqDCoMKgwqDCoHhtbHJwY19ERUNSRUYocHVs c2Vfd2lkdGhzKTsKPiA+ICt9Cj4gPiArCj4gPiArLyoqCj4gPiArICogY2hhbWVsaXVtX2FzeW5j X2hwZF9wdWxzZV9maW5pc2g6Cj4gPiArICoKPiA+ICsgKiBXYWl0cyBmb3IgYW55IGFzeW5jaHJv bm91cyBSUEMgc3RhcnRlZCBieQo+ID4gI2NoYW1lbGl1bV9hc3luY19ocGRfcHVsc2Vfc3RhcnQK PiA+ICsgKiB0byBjb21wbGV0ZSwgYW5kIHRoZW4gY2xlYW5zIHVwIGFueSBsZWZ0b3ZlciByZXNw b25zZXMgZnJvbSB0aGUKPiA+IGNoYW1lbGl1bS4KPiA+ICsgKiBJZiBhbGwgb2YgdGhlIFJQQyBj YWxscyBoYXZlIGFscmVhZHkgY29tcGxldGVkLCB0aGlzIGZ1bmN0aW9uCj4gPiByZXR1cm5zCj4g PiArICogaW1tZWRpYXRlbHkuCj4gCj4gVGhpcyBtYWtlcyBtZSB3b25kZXIgaWYgaXQgd291bGRu J3QgaGF2ZSBiZWVuIGJldHRlciB0byBnbyB3aXRoCj4gbGlic291cCwgYXMgaXQgdXNlcyBhIHJl YWwgZXZlbnQgbG9vcCB0aGF0IHdlIG1heSBuZWVkIHRvIHVzZSBpbgo+IHRlc3RzCj4gZm9yIG90 aGVyIHJlYXNvbnMuCgpGd2l3LCBJIHdvdWxkbid0IHdvcnJ5IGFib3V0IHRoaXMgcGFydCB0b28g bXVjaC4gVGhlIG9ubHkgcmVhc29uIHdlIHdlCnVzZSBhc3luYyBjYWxscyBoZXJlIGlzIHNvIHRo YXQgd2UgY2FuIHVzZSB0aGUgbWl4ZWQgcHVsc2VzIFJQQyB0byBnZXQKdGhlIGNoYW1lbGl1bSB0 byBzZW5kIGRlbGF5ZWQgaG90cGx1ZyBldmVudHMgYnkgdXNpbmcgdGhlIHB1bHNlIHdpZHRoCmFz IHRoZSBkZWxheS4gSSB3b3VsZG4ndCB0aGluayB0aGVyZSB3b3VsZCBiZSBhbnkgc2l0dWF0aW9u cyB3aGVyZSB0aGUKY2hhbWVsaXVtIHdvdWxkIGZhaWwgdG8gc2VuZCBhIGhvdHBsdWcsIHNpbmNl IGFsbCB0aGF0IHBhcnQgcmVxdWlyZXMgaXMKanVzdCBhc3NlcnRpbmcgdGhlIGhwZCBsaW5lLiBJ dCBjb3VsZCBmYWlsIGlmIHRoZSBJTyBib2FyZCBzdG9wcGVkCnJlc3BvbmRpbmcsIGJ1dCBpbiB0 aGF0IGNhc2UgZXZlcnl0aGluZyBlbHNlIGlzIGdvaW5nIHRvIGZhaWwgdG9vIGFuZAp3ZSB3b24n dCBnZXQgdGhlIGhvdHBsdWcgZXZlbnQgd2UncmUgZXhwZWN0aW5nIGFueXdheS4KClRoaXMgaXMg anVzdCBteSBvcGluaW9uIHRob3VnaCwgaWYgeW91IGNhbiB0aGluayBvZiBzb21lIHVzZSBjYXNl cyB0aGF0CnRoaXMgY291bGQgc2VyaW91c2x5IGNhdXNlIHNvbWUgaXNzdWVzIEknbGwgYmUgaGFw cHkgdG8gY2hhbmdlIGl0Lgo+IAo+ID4gKyAqLwo+ID4gK3ZvaWQgY2hhbWVsaXVtX2FzeW5jX2hw ZF9wdWxzZV9maW5pc2godm9pZCkKPiA+ICt7Cj4gPiArwqDCoMKgwqDCoMKgwqB4bWxycGNfY2xp ZW50X2V2ZW50X2xvb3BfZmluaXNoX2FzeW5jaCgpOwo+ID4gK30KPiA+ICsKPiA+ICsvKioKPiA+ ICsgKiBjaGFtZWxpdW1fbmV3X2VkaWQ6Cj4gPiArICogQGVkaWQ6IFRoZSBlZGlkIGJsb2IgdG8g dXBsb2FkIHRvIHRoZSBjaGFtZWxpdW0KPiA+ICsgKgo+ID4gKyAqIFVwbG9hZHMgYW5kIHJlZ2lz dGVycyBhIG5ldyBFRElEIHdpdGggdGhlIGNoYW1lbGl1bS4gVGhlIEVESUQKPiA+IHdpbGwgYmUK PiA+ICsgKiBkZXN0cm95ZWQgYXV0b21hdGljYWxseSB3aGVuICNjaGFtZWxpdW1fZGVpbml0IGlz IGNhbGxlZC4KPiA+ICsgKgo+ID4gKyAqIFJldHVybnM6IFRoZSBJRCBvZiB0aGUgRURJRCB1cGxv YWRlZCB0byB0aGUgY2hhbWVsaXVtLgo+ID4gKyAqLwo+ID4gK2ludCBjaGFtZWxpdW1fbmV3X2Vk aWQoY29uc3QgdW5zaWduZWQgY2hhciAqZWRpZCkKPiA+ICt7Cj4gPiArwqDCoMKgwqDCoMKgwqB4 bWxycGNfdmFsdWUgKnJlczsKPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBjaGFtZWxpdW1fZWRp ZCAqYWxsb2NhdGVkX2VkaWQ7Cj4gPiArwqDCoMKgwqDCoMKgwqBpbnQgZWRpZF9pZDsKPiA+ICsK PiA+ICvCoMKgwqDCoMKgwqDCoHJlcyA9IHhtbHJwY19jbGllbnRfY2FsbCgmZW52LCBjaGFtZWxp dW1fdXJsLCAiQ3JlYXRlRWRpZCIsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCIoNikiLCBlZGlkLCBFRElEX0xFTkdU SCk7Cj4gPiArwqDCoMKgwqDCoMKgwqBjaGVja19ycGMoKTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKg wqDCoHhtbHJwY19yZWFkX2ludCgmZW52LCByZXMsICZlZGlkX2lkKTsKPiA+ICvCoMKgwqDCoMKg wqDCoHhtbHJwY19ERUNSRUYocmVzKTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoGFsbG9jYXRl ZF9lZGlkID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgY2hhbWVsaXVtX2VkaWQpKTsKPiAKPiBTaG91 bGQgYmUgemVyb2VkPwo+IAo+ID4gK8KgwqDCoMKgwqDCoMKgaWd0X2Fzc2VydChhbGxvY2F0ZWRf ZWRpZCk7Cj4gCj4gRG9uJ3QgdGhpbmsgaXQgbWFrZXMgc2Vuc2UgaW4gdXNlcnNwYWNlIHRvIGNo ZWNrIGZvciBtYWxsb2MgZmFpbHVyZXMuCj4gCj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBhbGxv Y2F0ZWRfZWRpZC0+aWQgPSBlZGlkX2lkOwo+ID4gK8KgwqDCoMKgwqDCoMKgaWd0X2xpc3RfaW5p dCgmYWxsb2NhdGVkX2VkaWQtPmxpbmspOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKGFs bG9jYXRlZF9lZGlkcykgewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlndF9s aXN0X2FkZCgmYWxsb2NhdGVkX2VkaWRzLT5saW5rLAo+ID4gJmFsbG9jYXRlZF9lZGlkLT5saW5r KTsKPiA+ICvCoMKgwqDCoMKgwqDCoH0gZWxzZSB7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgYWxsb2NhdGVkX2VkaWRzID0gYWxsb2NhdGVkX2VkaWQ7Cj4gPiArwqDCoMKgwqDC oMKgwqB9Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gZWRpZF9pZDsKPiA+ICt9Cj4g PiArCj4gPiArc3RhdGljIHZvaWQgY2hhbWVsaXVtX2Rlc3Ryb3lfZWRpZChpbnQgZWRpZF9pZCkK PiA+ICt7Cj4gPiArwqDCoMKgwqDCoMKgwqB4bWxycGNfdmFsdWUgKnJlczsKPiA+ICsKPiA+ICvC oMKgwqDCoMKgwqDCoHJlcyA9IHhtbHJwY19jbGllbnRfY2FsbCgmZW52LCBjaGFtZWxpdW1fdXJs LAo+ID4gIkRlc3Ryb3lFZGlkIiwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIihpKSIsIGVkaWRfaWQpOwo+ID4gK8Kg wqDCoMKgwqDCoMKgY2hlY2tfcnBjKCk7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqB4bWxycGNf REVDUkVGKHJlcyk7Cj4gPiArfQo+ID4gKwo+ID4gKy8qKgo+ID4gKyAqIGNoYW1lbGl1bV9wb3J0 X3NldF9lZGlkOgo+ID4gKyAqIEBpZDogVGhlIElEIG9mIHRoZSBwb3J0IHRvIHNldCB0aGUgRURJ RCBvbgo+ID4gKyAqIEBlZGlkX2lkOiBUaGUgSUQgb2YgYW4gRURJRCBvbiB0aGUgY2hhbWVsaXVt IGNyZWF0ZWQgd2l0aAo+ID4gKyAqICNjaGFtZWxpdW1fbmV3X2VkaWQsIG9yIDAgdG8gZGlzYWJs ZSB0aGUgRURJRCBvbiB0aGUgcG9ydAo+ID4gKyAqCj4gPiArICogU2V0cyBhIHBvcnQgb24gdGhl IGNoYW1lbGl1bSB0byB1c2UgdGhlIHNwZWNpZmllZCBFRElELiBUaGlzCj4gPiBkb2VzIG5vdCBm aXJlIGEKPiA+ICsgKiBob3RwbHVnIHB1bHNlIG9uIGl0J3Mgb3duLCBhbmQgbWVyZWx5IGNoYW5n ZXMgd2hhdCBFRElEIHRoZQo+ID4gY2hhbWVsaXVtIHBvcnQKPiA+ICsgKiB3aWxsIHJlcG9ydCB0 byB1cyB0aGUgbmV4dCB0aW1lIHdlIHByb2JlIGl0LiBVc2VycyB3aWxsIG5lZWQgdG8KPiA+IHJl cHJvYmUgdGhlCj4gPiArICogY29ubmVjdG9ycyB0aGVtc2VsdmVzIGlmIHRoZXkgd2FudCB0byBz ZWUgdGhlIEVESUQgcmVwb3J0ZWQgYnkKPiA+IHRoZSBwb3J0Cj4gPiArICogY2hhbmdlLgo+ID4g KyAqLwo+ID4gK3ZvaWQgY2hhbWVsaXVtX3BvcnRfc2V0X2VkaWQoaW50IGlkLCBpbnQgZWRpZF9p ZCkKPiA+ICt7Cj4gPiArwqDCoMKgwqDCoMKgwqB4bWxycGNfdmFsdWUgKnJlczsKPiA+ICsKPiA+ ICvCoMKgwqDCoMKgwqDCoHJlcyA9IHhtbHJwY19jbGllbnRfY2FsbCgmZW52LCBjaGFtZWxpdW1f dXJsLCAiQXBwbHlFZGlkIiwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIihpaSkiLCBpZCwgZWRpZF9pZCk7Cj4gPiAr wqDCoMKgwqDCoMKgwqBjaGVja19ycGMoKTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHhtbHJw Y19ERUNSRUYocmVzKTsKPiA+ICt9Cj4gPiArCj4gPiArLyoqCj4gPiArICogY2hhbWVsaXVtX3Bv cnRfc2V0X2RkY19zdGF0ZToKPiA+ICsgKiBAaWQ6IFRoZSBJRCBvZiB0aGUgcG9ydCB3aG9zZSBE REMgYnVzIHdlIHdhbnQgdG8gbW9kaWZ5Cj4gPiArICogQGVuYWJsZWQ6IFdoZXRoZXIgb3Igbm90 IHRvIGVuYWJsZSB0aGUgRERDIGJ1cwo+ID4gKyAqCj4gPiArICogVGhpcyBkaXNhYmxlcyB0aGUg RERDIGJ1cyAoZS5nLiB0aGUgaTJjIGxpbmUgb24gdGhlIGNvbm5lY3Rvcgo+ID4gdGhhdCBnaXZl cyB1cwo+ID4gKyAqIGFuIEVESUQpIG9mIHRoZSBzcGVjaWZpZWQgcG9ydCBvbiB0aGUgY2hhbWVs aXVtLiBUaGlzIGlzIHVzZWZ1bAo+ID4gZm9yIHRlc3RpbmcKPiA+ICsgKiBiZWhhdmlvciBvbiBs ZWdhY3kgY29ubmVjdG9ycyBzdWNoIGFzIFZHQSwgd2hlcmUgdGhlIHByZXNlbmNlCj4gPiBvZiBh IEREQyBidXMKPiA+ICsgKiBpcyBub3QgYWx3YXlzIGd1YXJhbnRlZWQuCj4gPiArICovCj4gPiAr dm9pZCBjaGFtZWxpdW1fcG9ydF9zZXRfZGRjX3N0YXRlKGludCBwb3J0LCBib29sIGVuYWJsZWQp Cj4gPiArewo+ID4gK8KgwqDCoMKgwqDCoMKgeG1scnBjX3ZhbHVlICpyZXM7Cj4gPiArCj4gPiAr wqDCoMKgwqDCoMKgwqBpZ3RfZGVidWcoIiVzYWJsaW5nIEREQyBidXMgb24gcG9ydCAlZFxuIiwK PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZW5hYmxlZCA/ICJFbiIgOiAi RGlzIiwgcG9ydCk7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqByZXMgPSB4bWxycGNfY2xpZW50 X2NhbGwoJmVudiwgY2hhbWVsaXVtX3VybCwKPiA+ICJTZXREZGNTdGF0ZSIsCj4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCIoaWIpIiwgcG9ydCwgZW5hYmxlZCk7Cj4gPiArwqDCoMKgwqDCoMKgwqBjaGVja19ycGMoKTsK PiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHhtbHJwY19ERUNSRUYocmVzKTsKPiA+ICt9Cj4gPiAr Cj4gPiArLyoqCj4gPiArICogY2hhbWVsaXVtX3BvcnRfZ2V0X2RkY19zdGF0ZToKPiA+ICsgKiBA aWQ6IFRoZSBJRCBvZiB0aGUgcG9ydCB3aG9zZSBEREMgYnVzIHdlIHdhbnQgdG8gY2hlY2sgdGhl Cj4gPiBzdGF0dXMgb2YKPiA+ICsgKgo+ID4gKyAqIENoZWNrIHdoZXRoZXIgb3Igbm90IHRoZSBE REMgYnVzIG9uIHRoZSBzcGVjaWZpZWQgY2hhbWVsaXVtCj4gPiBwb3J0IGlzIGVuYWJsZWQKPiA+ ICsgKiBvciBub3QuCj4gPiArICoKPiA+ICsgKiBSZXR1cm5zOiAldHJ1ZSBpZiB0aGUgRERDIGJ1 cyBpcyBlbmFibGVkLCAlZmFsc2Ugb3RoZXJ3aXNlLgo+ID4gKyAqLwo+ID4gK2Jvb2wgY2hhbWVs aXVtX3BvcnRfZ2V0X2RkY19zdGF0ZShpbnQgaWQpCj4gPiArewo+ID4gK8KgwqDCoMKgwqDCoMKg eG1scnBjX3ZhbHVlICpyZXM7Cj4gPiArwqDCoMKgwqDCoMKgwqB4bWxycGNfYm9vbCBlbmFibGVk Owo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgcmVzID0geG1scnBjX2NsaWVudF9jYWxsKCZlbnYs IGNoYW1lbGl1bV91cmwsCj4gPiAiSXNEZGNFbmFibGVkIiwKPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIihpKSIsIGlk KTsKPiA+ICvCoMKgwqDCoMKgwqDCoGNoZWNrX3JwYygpOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDC oMKgeG1scnBjX3JlYWRfYm9vbCgmZW52LCByZXMsICZlbmFibGVkKTsKPiA+ICsKPiA+ICvCoMKg wqDCoMKgwqDCoHhtbHJwY19ERUNSRUYocmVzKTsKPiA+ICvCoMKgwqDCoMKgwqDCoHJldHVybiBl bmFibGVkOwo+ID4gK30KPiA+ICsKPiA+ICsvKioKPiA+ICsgKiBjaGFtZWxpdW1fcG9ydF9nZXRf cmVzb2x1dGlvbjoKPiA+ICsgKiBAaWQ6IFRoZSBJRCBvZiB0aGUgcG9ydCB3aG9zZSBkaXNwbGF5 IHJlc29sdXRpb24gd2Ugd2FudCB0bwo+ID4gY2hlY2sKPiA+ICsgKiBAeDogV2hlcmUgdG8gc3Rv cmUgdGhlIGhvcml6b250YWwgcmVzb2x1dGlvbiBvZiB0aGUgcG9ydAo+ID4gKyAqIEB5OiBXaGVy ZSB0byBzdG9yZSB0aGUgdmVyaWNhbCByZXNvbHV0aW9uIG9mIHRoZSBwb3J0Cj4gPiArICoKPiA+ ICsgKiBDaGVjayB0aGUgY3VycmVudCByZXBvcnRlZCBkaXNwbGF5IHJlc29sdXRpb24gb2YgdGhl IHNwZWNpZmllZAo+ID4gcG9ydCBvbiB0aGUKPiA+ICsgKiBjaGFtZWxpdW0uIFRoaXMgaW5mb3Jt YXRpb24gaXMgcHJvdmlkZWQgYnkgdGhlIGNoYW1lbGl1bQo+ID4gaXRzZWxmLCBub3QgRFJNLgo+ ID4gKyAqIFVzZWZ1bCBmb3IgdmVyaWZ5aW5nIHRoYXQgd2UgcmVhbGx5IGFyZSBzY2FubmluZyBv dXQgYXQgdGhlCj4gPiByZXNvbHV0aW9uIHdlCj4gPiArICogdGhpbmsgd2UgYXJlLgo+ID4gKyAq Lwo+ID4gK3ZvaWQgY2hhbWVsaXVtX3BvcnRfZ2V0X3Jlc29sdXRpb24oaW50IGlkLCBpbnQgKngs IGludCAqeSkKPiA+ICt7Cj4gPiArwqDCoMKgwqDCoMKgwqB4bWxycGNfdmFsdWUgKnJlcywgKnJl c194LCAqcmVzX3k7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqByZXMgPSB4bWxycGNfY2xpZW50 X2NhbGwoJmVudiwgY2hhbWVsaXVtX3VybCwKPiA+ICJEZXRlY3RSZXNvbHV0aW9uIiwKPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIihpKSIsIGlkKTsKPiA+ICvCoMKgwqDCoMKgwqDCoGNoZWNrX3JwYygpOwo+ID4gKwo+ ID4gK8KgwqDCoMKgwqDCoMKgeG1scnBjX2FycmF5X3JlYWRfaXRlbSgmZW52LCByZXMsIDAsICZy ZXNfeCk7Cj4gPiArwqDCoMKgwqDCoMKgwqB4bWxycGNfYXJyYXlfcmVhZF9pdGVtKCZlbnYsIHJl cywgMSwgJnJlc195KTsKPiA+ICvCoMKgwqDCoMKgwqDCoHhtbHJwY19yZWFkX2ludCgmZW52LCBy ZXNfeCwgeCk7Cj4gPiArwqDCoMKgwqDCoMKgwqB4bWxycGNfcmVhZF9pbnQoJmVudiwgcmVzX3ks IHkpOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgeG1scnBjX0RFQ1JFRihyZXNfeCk7Cj4gPiAr wqDCoMKgwqDCoMKgwqB4bWxycGNfREVDUkVGKHJlc195KTsKPiA+ICvCoMKgwqDCoMKgwqDCoHht bHJwY19ERUNSRUYocmVzKTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgY3JjX2Zyb21f eG1sKHhtbHJwY192YWx1ZSAqeG1sX2NyYywgaWd0X2NyY190ICpvdXQpCj4gPiArewo+ID4gK8Kg wqDCoMKgwqDCoMKgeG1scnBjX3ZhbHVlICpyZXM7Cj4gPiArwqDCoMKgwqDCoMKgwqBpbnQgaTsK PiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoG91dC0+bl93b3JkcyA9IHhtbHJwY19hcnJheV9zaXpl KCZlbnYsIHhtbF9jcmMpOwo+ID4gK8KgwqDCoMKgwqDCoMKgZm9yIChpID0gMDsgaSA8IG91dC0+ bl93b3JkczsgaSsrKSB7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgeG1scnBj X2FycmF5X3JlYWRfaXRlbSgmZW52LCB4bWxfY3JjLCBpLCAmcmVzKTsKPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqB4bWxycGNfcmVhZF9pbnQoJmVudiwgcmVzLCAoaW50Kikmb3V0 LT5jcmNbaV0pOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHhtbHJwY19ERUNS RUYocmVzKTsKPiA+ICvCoMKgwqDCoMKgwqDCoH0KPiA+ICt9Cj4gPiArCj4gPiArLyoqCj4gPiAr ICogY2hhbWVsaXVtX2dldF9jcmNfZm9yX2FyZWE6Cj4gPiArICogQGlkOiBUaGUgSUQgb2YgdGhl IHBvcnQgZnJvbSB3aGljaCB3ZSB3YW50IHRvIHJldHJpZXZlIHRoZSBDUkMKPiA+ICsgKiBAeDog VGhlIFggY29vcmRpbmF0ZSBvbiB0aGUgZW11bGF0ZWQgZGlzcGxheSB0byBzdGFydAo+ID4gY2Fs Y3VsYXRpbmcgdGhlIENSQwo+ID4gKyAqIGZyb20KPiA+ICsgKiBAeTogVGhlIFkgY29vcmRpbmF0 ZSBvbiB0aGUgZW11bGF0ZWQgZGlzcGxheSB0byBzdGFydAo+ID4gY2FsY3VsYXRpbmcgdGhlIENS Qwo+ID4gKyAqIGZyb20KPiA+ICsgKiBAdzogVGhlIHdpZHRoIG9mIHRoZSBhcmVhIHRvIGZldGNo IHRoZSBDUkMgZnJvbSwgb3IgJTAgZm9yIHRoZQo+ID4gd2hvbGUgZGlzcGxheQo+ID4gKyAqIEBo OiBUaGUgaGVpZ2h0IG9mIHRoZSBhcmVhIHRvIGZldGNoIHRoZSBDUkMgZnJvbSwgb3IgJTAgZm9y IHRoZQo+ID4gd2hvbGUgZGlzcGxheQo+ID4gKyAqCj4gPiArICogUmVhZHMgYmFjayB0aGUgcGl4 ZWwgQ1JDIGZvciBhbiBhcmVhIG9uIHRoZSBzcGVjaWZpZWQgY2hhbWVsaXVtCj4gPiBwb3J0LiBU aGlzCj4gPiArICogaXMgdGhlIHNhbWUgYXMgdXNpbmcgdGhlIENSQyByZWFkYmFjayBmcm9tIGEg R1BVLCB0aGUgbWFpbgo+ID4gZGlmZmVyZW5jZSBiZWluZwo+ID4gKyAqIHRoZSBkYXRhIGlzIHBy b3ZpZGVkIGJ5IHRoZSBjaGFtZWxpdW0gYW5kIGFsc28gYWxsb3dzIHVzIHRvCj4gPiBzcGVjaWZ5 IGEgcmVnaW9uCj4gPiArICogb2YgdGhlIHNjcmVlbiB0byB1c2UgYXMgb3Bwb3NlZCB0byB0aGUg ZW50aXJlIHRoaW5nLgo+ID4gKyAqCj4gPiArICogUmV0dXJuczogVGhlIENSQyByZWFkIGJhY2sg ZnJvbSB0aGUgY2hhbWVsaXVtCj4gPiArICovCj4gPiAraWd0X2NyY190ICpjaGFtZWxpdW1fZ2V0 X2NyY19mb3JfYXJlYShpbnQgaWQsIGludCB4LCBpbnQgeSwgaW50IHcsCj4gPiBpbnQgaCkKPiA+ ICt7Cj4gPiArwqDCoMKgwqDCoMKgwqB4bWxycGNfdmFsdWUgKnJlczsKPiA+ICvCoMKgwqDCoMKg wqDCoGlndF9jcmNfdCAqcmV0ID0gbWFsbG9jKHNpemVvZihpZ3RfY3JjX3QpKTs7Cj4gCj4gRXh0 cmEgOy4gRG9jcyBzaG91bGQgbWVudGlvbiB0aGF0IHRoZSBjYWxsZXIgaGFzIHRvIGZyZWUuCj4g Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqByZXMgPSB4bWxycGNfY2xpZW50X2NhbGwoJmVudiwg Y2hhbWVsaXVtX3VybCwKPiA+ICJDb21wdXRlUGl4ZWxDaGVja3N1bSIsCj4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCh3 ICYmIGgpID8gIihpaWlpaSkiIDogIihpbm5ubikiLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZCwgeCwgeSwgdywg aCk7Cj4gPiArwqDCoMKgwqDCoMKgwqBjaGVja19ycGMoKTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKg wqDCoGNyY19mcm9tX3htbChyZXMsIHJldCk7Cj4gPiArwqDCoMKgwqDCoMKgwqB4bWxycGNfREVD UkVGKHJlcyk7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0Owo+ID4gK30KPiA+ ICsKPiA+ICsvKioKPiA+ICsgKiBjaGFtZWxpdW1fc3RhcnRfY2FwdHVyZToKPiA+ICsgKiBAaWQ6 IFRoZSBJRCBvZiB0aGUgcG9ydCBmb3Igd2hpY2ggd2Ugd2FudCB0byBzdGFydCBjYXB0dXJpbmcK PiA+IGZyYW1lcyBvbgo+ID4gKyAqIEB4OiBUaGUgWCBjb29yZGluYXRlIHRvIGNyb3AgdGhlIHZp ZGVvIHRvCj4gPiArICogQHk6IFRoZSBZIGNvb3JkaW5hdGUgdG8gY3JvcCB0aGUgdmlkZW8gdG8K PiA+ICsgKiBAdzogVGhlIHdpZHRoIG9mIHRoZSBjcm9wcGVkIHZpZGVvLCBvciAlMCBmb3IgdGhl IHdob2xlIGRpc3BsYXkKPiA+ICsgKiBAaDogVGhlIGhlaWdodCBvZiB0aGUgY3JvcHBlZCB2aWRl bywgb3IgJTAgZm9yIHRoZSB3aG9sZQo+ID4gZGlzcGxheQo+ID4gKyAqCj4gPiArICogU3RhcnRz IGNhcHR1cmluZyB2aWRlbyBmcmFtZXMgb24gdGhlIGdpdmVuIENoYW1lbGl1bSBwb3J0LiBPbmNl Cj4gPiB0aGUgdXNlciBpcwo+ID4gKyAqIGZpbmlzaGVkIGNhcHR1cmluZyBmcmFtZXMsIHRoZXkg c2hvdWxkIGNhbGwKPiA+ICNjaGFtZWxpdW1fc3RvcF9jYXB0dXJlLgo+ID4gKyAqCj4gPiArICog Rm9yIGNhcHR1cmluZyBhIHNpbmdsZSBmcmFtZSwgdXNlcnMgY2FuIHVzZSB0aGUgb25lLXNob3QK PiA+ICsgKiBAY2hhbWVsaXVtX2dldF9jcmNfZm9yX2FyZWEKPiA+ICsgKi8KPiA+ICt2b2lkIGNo YW1lbGl1bV9zdGFydF9jYXB0dXJlKGludCBpZCwgaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgp Cj4gPiArewo+ID4gK8KgwqDCoMKgwqDCoMKgeG1scnBjX2NsaWVudF9jYWxsKCZlbnYsIGNoYW1l bGl1bV91cmwsCj4gPiAiU3RhcnRDYXB0dXJpbmdWaWRlbyIsCj4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCh3ICYmIGgpID8gIihpaWlpaSki IDogIihpbm5ubikiLCBpZCwgeCwKPiA+IHksIHcsIGgpOwo+ID4gK8KgwqDCoMKgwqDCoMKgY2hl Y2tfcnBjKCk7Cj4gPiArfQo+ID4gKwo+ID4gKy8qKgo+ID4gKyAqIGNoYW1lbGl1bV9zdG9wX2Nh cHR1cmU6Cj4gPiArICogQGZyYW1lX2NvdW50OiBUaGUgbnVtYmVyIG9mIGZyYW1lcyB0byB3YWl0 IHRvIGNhcHR1cmUsIG9yICUwIHRvCj4gPiBzdG9wCj4gPiArICogaW1tZWRpYXRlbHkKPiA+ICsg Kgo+ID4gKyAqIEZpbmlzaGVzIGNhcHR1cmluZyB2aWRlbyBmcmFtZXMgb24gdGhlIGdpdmVuIENo YW1lbGl1bSBwb3J0LiBJZgo+ID4gQGZyYW1lX2NvdW50Cj4gPiArICogaXMgc3BlY2lmaWVkLCB0 aGlzIGNhbGwgd2lsbCBibG9jayB1bnRpbCB0aGUgZ2l2ZW4gbnVtYmVyIG9mCj4gPiBmcmFtZXMg aGF2ZSBiZWVuCj4gPiArICogY2FwdHVyZWQuCj4gPiArICovCj4gPiArdm9pZCBjaGFtZWxpdW1f c3RvcF9jYXB0dXJlKGludCBmcmFtZV9jb3VudCkKPiA+ICt7Cj4gPiArwqDCoMKgwqDCoMKgwqB4 bWxycGNfY2xpZW50X2NhbGwoJmVudiwgY2hhbWVsaXVtX3VybCwKPiA+ICJTdG9wQ2FwdHVyaW5n VmlkZW8iLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAiKGkpIiwgZnJhbWVfY291bnQpOwo+ID4gK8KgwqDCoMKgwqDCoMKgY2hlY2tfcnBj KCk7Cj4gPiArfQo+ID4gKwo+ID4gKy8qKgo+ID4gKyAqIGNoYW1lbGl1bV9yZWFkX2NhcHR1cmVk X2NyY3M6Cj4gPiArICogQGZyYW1lX2NvdW50OiBXaGVyZSB0byBzdG9yZSB0aGUgbnVtYmVyIG9m IENSQ3Mgd2UgcmVhZCBpbgo+ID4gKyAqCj4gPiArICogUmVhZHMgYWxsIG9mIHRoZSBDUkNzIHRo YXQgaGF2ZSBiZWVuIGNhcHR1cmVkIHRodXMgZmFyIGZyb20gdGhlCj4gPiBDaGFtZWxpdW0uCj4g PiArICoKPiA+ICsgKiBSZXR1cm5zOiBBbiBhcnJheSBvZiBAZnJhbWVfY291bnQgbGVuZ3RoIGNv bnRhaW5pbmcgYWxsIG9mIHRoZQo+ID4gQ1JDcyB3ZSByZWFkCj4gPiArICovCj4gPiAraWd0X2Ny Y190ICpjaGFtZWxpdW1fcmVhZF9jYXB0dXJlZF9jcmNzKGludCAqZnJhbWVfY291bnQpCj4gPiAr ewo+ID4gK8KgwqDCoMKgwqDCoMKgaWd0X2NyY190ICpyZXQ7Cj4gPiArwqDCoMKgwqDCoMKgwqB4 bWxycGNfdmFsdWUgKnJlcywgKmVsZW07Cj4gPiArwqDCoMKgwqDCoMKgwqBpbnQgaTsKPiA+ICsK PiA+ICvCoMKgwqDCoMKgwqDCoHJlcyA9IHhtbHJwY19jbGllbnRfY2FsbCgmZW52LCBjaGFtZWxp dW1fdXJsLAo+ID4gIkdldENhcHR1cmVkQ2hlY2tzdW1zIiwKPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIihpbikiLCAw KTsKPiA+ICvCoMKgwqDCoMKgwqDCoGNoZWNrX3JwYygpOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDC oMKgKmZyYW1lX2NvdW50ID0geG1scnBjX2FycmF5X3NpemUoJmVudiwgcmVzKTsKPiA+ICvCoMKg wqDCoMKgwqDCoHJldCA9IGNhbGxvYyhzaXplb2YoaWd0X2NyY190KSwgKmZyYW1lX2NvdW50KTsK PiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoGZvciAoaSA9IDA7IGkgPCAqZnJhbWVfY291bnQ7IGkr Kykgewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHhtbHJwY19hcnJheV9yZWFk X2l0ZW0oJmVudiwgcmVzLCBpLCAmZWxlbSk7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgY3JjX2Zyb21feG1sKGVsZW0sICZyZXRbaV0pOwo+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHJldFtpXS5mcmFtZSA9IGk7Cj4gPiArCj4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgeG1scnBjX0RFQ1JFRihlbGVtKTsKPiA+ICvCoMKgwqDCoMKg wqDCoH0KPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHhtbHJwY19ERUNSRUYocmVzKTsKPiA+ICsK PiA+ICvCoMKgwqDCoMKgwqDCoHJldHVybiByZXQ7Cj4gPiArfQo+ID4gKwo+ID4gKy8qKgo+ID4g KyAqIGNoYW1lbGl1bV9nZXRfZnJhbWVfbGltaXQ6Cj4gPiArICogQGlkOiBUaGUgSUQgb2YgdGhl IHBvcnQgdG8gZ2V0IHRoZSBjYXB0dXJlIGZyYW1lIGxpbWl0IGZvcgo+ID4gKyAqIEB3OiBUaGUg d2lkdGggb2YgdGhlIGFyZWEgdG8gZ2V0IHRoZSBjYXB0dXJlIGZyYW1lIGxpbWl0IGZvciwKPiA+ IG9yICUwIGZvciB0aGUKPiA+ICsgKiB3aG9sZSBkaXNwbGF5Cj4gPiArICogQGg6IFRoZSBoZWln aHQgb2YgdGhlIGFyZWEgdG8gZ2V0IHRoZSBjYXB0dXJlIGZyYW1lIGxpbWl0IGZvciwKPiA+IG9y ICUwIGZvciB0aGUKPiA+ICsgKiB3aG9sZSBkaXNwbGF5Cj4gPiArICoKPiA+ICsgKiBHZXRzIHRo ZSBtYXggbnVtYmVyIG9mIGZyYW1lcyB3ZSBjYW4gY2FwdHVyZSB3aXRoIHRoZSBDaGFtZWxpdW0K PiA+IGZvciB0aGUgZ2l2ZW4KPiA+ICsgKiByZXNvbHV0aW9uLgo+ID4gKyAqCj4gPiArICogUmV0 dXJuczogVGhlIG51bWJlciBvZiB0aGUgbWF4IG51bWJlciBvZiBmcmFtZXMgd2UgY2FuIGNhcHR1 cmUKPiA+ICsgKi8KPiA+ICtpbnQgY2hhbWVsaXVtX2dldF9mcmFtZV9saW1pdChpbnQgaWQsIGlu dCB3LCBpbnQgaCkKPiA+ICt7Cj4gPiArwqDCoMKgwqDCoMKgwqB4bWxycGNfdmFsdWUgKnJlczsK PiA+ICvCoMKgwqDCoMKgwqDCoGludCByZXQ7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBpZiAo IXcgJiYgIWgpCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY2hhbWVsaXVtX3Bv cnRfZ2V0X3Jlc29sdXRpb24oaWQsICZ3LCAmaCk7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBy ZXMgPSB4bWxycGNfY2xpZW50X2NhbGwoJmVudiwgY2hhbWVsaXVtX3VybCwKPiA+ICJHZXRNYXhG cmFtZUxpbWl0IiwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIihpaWkpIiwgaWQsIHcsIGgpOwo+ID4gK8KgwqDCoMKg wqDCoMKgY2hlY2tfcnBjKCk7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqB4bWxycGNfcmVhZF9p bnQoJmVudiwgcmVzLCAmcmV0KTsKPiA+ICvCoMKgwqDCoMKgwqDCoHhtbHJwY19ERUNSRUYocmVz KTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHJldHVybiByZXQ7Cj4gPiArfQo+ID4gKwo+ID4g K3N0YXRpYyB1bnNpZ25lZCBpbnQgY2hhbWVsaXVtX2dldF9wb3J0X3R5cGUoaW50IHBvcnQpCj4g PiArewo+ID4gK8KgwqDCoMKgwqDCoMKgeG1scnBjX3ZhbHVlICpyZXM7Cj4gPiArwqDCoMKgwqDC oMKgwqBjb25zdCBjaGFyICpwb3J0X3R5cGVfc3RyOwo+ID4gK8KgwqDCoMKgwqDCoMKgdW5zaWdu ZWQgaW50IHBvcnRfdHlwZTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHJlcyA9IHhtbHJwY19j bGllbnRfY2FsbCgmZW52LCBjaGFtZWxpdW1fdXJsLAo+ID4gIkdldENvbm5lY3RvclR5cGUiLAo+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAiKGkpIiwgcG9ydCk7Cj4gPiArwqDCoMKgwqDCoMKgwqBjaGVja19ycGMoKTsK PiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHhtbHJwY19yZWFkX3N0cmluZygmZW52LCByZXMsICZw b3J0X3R5cGVfc3RyKTsKPiA+ICvCoMKgwqDCoMKgwqDCoGlndF9kZWJ1ZygiUG9ydCAlZCBpcyBv ZiB0eXBlICclcydcbiIsIHBvcnQsCj4gPiBwb3J0X3R5cGVfc3RyKTsKPiA+ICsKPiA+ICvCoMKg wqDCoMKgwqDCoGlmIChzdHJjbXAocG9ydF90eXBlX3N0ciwgIkRQIikgPT0gMCkKPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwb3J0X3R5cGUgPSBEUk1fTU9ERV9DT05ORUNUT1Jf RGlzcGxheVBvcnQ7Cj4gPiArwqDCoMKgwqDCoMKgwqBlbHNlIGlmIChzdHJjbXAocG9ydF90eXBl X3N0ciwgIkhETUkiKSA9PSAwKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHBv cnRfdHlwZSA9IERSTV9NT0RFX0NPTk5FQ1RPUl9IRE1JQTsKPiA+ICvCoMKgwqDCoMKgwqDCoGVs c2UgaWYgKHN0cmNtcChwb3J0X3R5cGVfc3RyLCAiVkdBIikgPT0gMCkKPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBwb3J0X3R5cGUgPSBEUk1fTU9ERV9DT05ORUNUT1JfVkdBOwo+ ID4gK8KgwqDCoMKgwqDCoMKgZWxzZQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oHBvcnRfdHlwZSA9IERSTV9NT0RFX0NPTk5FQ1RPUl9Vbmtub3duOwo+ID4gKwo+ID4gK8KgwqDC oMKgwqDCoMKgZnJlZSgodm9pZCopcG9ydF90eXBlX3N0cik7Cj4gPiArwqDCoMKgwqDCoMKgwqB4 bWxycGNfREVDUkVGKHJlcyk7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gcG9ydF90 eXBlOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBjaGFtZWxpdW1fcmVhZF9wb3J0X21h cHBpbmdzKGludCBkcm1fZmQsIEdLZXlGaWxlCj4gPiAqa2V5X2ZpbGUpCj4gPiArewo+ID4gK8Kg wqDCoMKgwqDCoMKgZHJtTW9kZVJlcyAqcmVzOwo+ID4gK8KgwqDCoMKgwqDCoMKgZHJtTW9kZUNv bm5lY3RvciAqY29ubmVjdG9yOwo+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGNoYW1lbGl1bV9w b3J0ICpwb3J0Owo+ID4gK8KgwqDCoMKgwqDCoMKgR0Vycm9yICplcnJvciA9IE5VTEw7Cj4gPiAr wqDCoMKgwqDCoMKgwqBjaGFyICoqZ3JvdXBfbGlzdDsKPiA+ICvCoMKgwqDCoMKgwqDCoGNoYXIg Kmdyb3VwOwo+ID4gK8KgwqDCoMKgwqDCoMKgc2l6ZV90IGdyb3VwX2xpc3RfbGVuOwo+ID4gK8Kg wqDCoMKgwqDCoMKgaW50IHBvcnRfaSwgaSwgajsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoGdy b3VwX2xpc3QgPSBnX2tleV9maWxlX2dldF9ncm91cHMoa2V5X2ZpbGUsCj4gPiAmZ3JvdXBfbGlz dF9sZW4pOwo+ID4gK8KgwqDCoMKgwqDCoMKgY2hhbWVsaXVtX3BvcnRfY291bnQgPSBncm91cF9s aXN0X2xlbiAtIDE7Cj4gPiArwqDCoMKgwqDCoMKgwqBjaGFtZWxpdW1fcG9ydHMgPSBjYWxsb2Mo c2l6ZW9mKHN0cnVjdCBjaGFtZWxpdW1fcG9ydCksCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNoYW1lbGl1bV9wb3J0 X2NvdW50KTsKPiA+ICvCoMKgwqDCoMKgwqDCoG1lbXNldChjaGFtZWxpdW1fcG9ydHMsIDAsCj4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHNpemVvZihzdHJ1Y3QgY2hhbWVsaXVtX3Bv cnQpICoKPiA+IGNoYW1lbGl1bV9wb3J0X2NvdW50KTsKPiAKPiBjYWxsb2MgYWxyZWFkeSB6ZXJv ZXMuCj4gCj4gPiArwqDCoMKgwqDCoMKgwqBwb3J0X2kgPSAwOwo+ID4gK8KgwqDCoMKgwqDCoMKg cmVzID0gZHJtTW9kZUdldFJlc291cmNlcyhkcm1fZmQpOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDC oMKgZm9yIChpID0gMDsgZ3JvdXBfbGlzdFtpXSAhPSBOVUxMOyBpKyspIHsKPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBncm91cCA9IGdyb3VwX2xpc3RbaV07Cj4gPiArCj4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKHN0cmNtcChncm91cCwgIkNoYW1lbGl1 bSIpID09IDApCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoGNvbnRpbnVlOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHBv cnQgPSAmY2hhbWVsaXVtX3BvcnRzW3BvcnRfaSsrXTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBwb3J0LT5jb25uZWN0b3JfbmFtZSA9IHN0cmR1cChncm91cCk7Cj4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcG9ydC0+aWQgPSBnX2tleV9maWxlX2dldF9pbnRl Z2VyKGtleV9maWxlLCBncm91cCwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCJDaGFtZWxpdW1Qb3J0SUQiCj4gPiAsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAmZXJyb3IpOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGlndF9yZXF1aXJlX2YocG9ydC0+aWQsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCJGYWlsZWQgdG8gcmVhZCBj aGFtZWxpdW0gcG9ydCBJRCBmb3IKPiA+ICVzOiAlc1xuIiwKPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ3JvdXAsIGVycm9yLT5t ZXNzYWdlKTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwb3J0LT50 eXBlID0gY2hhbWVsaXVtX2dldF9wb3J0X3R5cGUocG9ydC0+aWQpOwo+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoGlndF9yZXF1aXJlX2YocG9ydC0+dHlwZSAhPQo+ID4gRFJNX01P REVfQ09OTkVDVE9SX1Vua25vd24sCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCJVbmFibGUgdG8gcmV0cmlldmUgdGhlIHBoeXNp Y2FsIHBvcnQKPiA+IHR5cGUgZnJvbSB0aGUgQ2hhbWVsaXVtIGZvciAnJXMnXG4iLAo+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBn cm91cCk7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZm9yIChqID0g MDsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaiA8IHJlcy0+ Y291bnRfY29ubmVjdG9ycyAmJiAhcG9ydC0KPiA+ID5jb25uZWN0b3JfaWQ7Cj4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGorKykgewo+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjaGFyIGNvbm5lY3Rvcl9uYW1lWzUw XTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgY29ubmVjdG9yID0gZHJtTW9kZUdldENvbm5lY3RvckN1cnJlbnQoCj4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJtX2ZkLCByZXMt PmNvbm5lY3RvcnNbal0pOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAvKiBXZSBoYXZlIHRvIGdlbmVyYXRlIHRoZSBjb25uZWN0b3IgbmFt ZQo+ID4gb24gb3VyIG93biAqLwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBzbnByaW50Zihjb25uZWN0b3JfbmFtZSwgNTAsICIlcy0ldSIsCj4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGttc3Rlc3RfY29ubmVjdG9yX3R5cGVfc3RyKGNvbm5lY3QKPiA+IG9yLT5jb25uZWN0 b3JfdHlwZSksCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5cGVfaWQpOwo+ID4g Kwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAo c3RyY21wKGNvbm5lY3Rvcl9uYW1lLCBncm91cCkgPT0gMCkKPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHBvcnQtPmNvbm5l Y3Rvcl9pZCA9IGNvbm5lY3Rvci0KPiA+ID5jb25uZWN0b3JfaWQ7Cj4gPiArCj4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRybU1vZGVGcmVlQ29ubmVj dG9yKGNvbm5lY3Rvcik7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlndF9hc3NlcnRfZihwb3J0LT5jb25uZWN0 b3JfaWQsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAiTm8gY29ubmVjdG9yIGZvdW5kIHdpdGggbmFtZSAnJXMnXG4iLAo+ID4gZ3Jv dXApOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlndF9kZWJ1Zygi UG9ydCAnJXMnIHdpdGggcGh5c2ljYWwgdHlwZSAnJXMnIG1hcHBlZAo+ID4gdG8gQ2hhbWVsaXVt IHBvcnQgJWRcbiIsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBncm91cCwga21zdGVzdF9jb25uZWN0b3JfdHlwZV9zdHIocG9ydC0KPiA+ID50 eXBlKSwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHBvcnQtPmlkKTsKPiA+ICvCoMKgwqDCoMKgwqDCoH0KPiA+ICsKPiA+ICvCoMKgwqDCoMKg wqDCoGRybU1vZGVGcmVlUmVzb3VyY2VzKHJlcyk7Cj4gPiArwqDCoMKgwqDCoMKgwqBnX3N0cmZy ZWV2KGdyb3VwX2xpc3QpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBjaGFtZWxpdW1f cmVhZF9jb25maWcoaW50IGRybV9mZCkKPiA+ICt7Cj4gPiArwqDCoMKgwqDCoMKgwqBHS2V5Rmls ZSAqa2V5X2ZpbGUgPSBnX2tleV9maWxlX25ldygpOwo+ID4gK8KgwqDCoMKgwqDCoMKgR0Vycm9y ICplcnJvciA9IE5VTEw7Cj4gPiArwqDCoMKgwqDCoMKgwqBjaGFyICprZXlfZmlsZV9sb2M7Cj4g PiArwqDCoMKgwqDCoMKgwqBpbnQgcmM7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBrZXlfZmls ZV9sb2MgPSBnZXRlbnYoIkNIQU1FTElVTV9DT05GSUdfUEFUSCIpOwo+ID4gK8KgwqDCoMKgwqDC oMKgaWYgKCFrZXlfZmlsZV9sb2MpIHsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBpZ3RfcmVxdWlyZShrZXlfZmlsZV9sb2MgPSBhbGxvY2EoMTAwKSk7Cj4gCj4gV2h5IHNraXAg dGhlIGN1cnJlbnQgdGVzdCBpZiBhbGxvY2EgZmFpbHM/IEFjdHVhbGx5LCB3aHkgY2hlY2tpbmcK PiBhbGxvY2EncyByZXN1bHQ/IElmIHdlIGFyZW4ndCAxMDAlIHN1cmUgdGhhdCBhbGxvY2Egd2ls bCBzdWNjZWVkLCB3ZQo+IHNob3VsZCBiZSB1c2luZyBtYWxsb2MgaW5zdGVhZC4KPiAKPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzbnByaW50ZihrZXlfZmlsZV9sb2MsIDEwMCwg IiVzLy5pZ3RfY2hhbWVsaXVtX3JjIiwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBnX2dldF9ob21lX2RpcigpKTsKPiA+ICvCoMKgwqDCoMKgwqDC oH0KPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHJjID0gZ19rZXlfZmlsZV9sb2FkX2Zyb21fZmls ZShrZXlfZmlsZSwga2V5X2ZpbGVfbG9jLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBHX0tFWV9G SUxFX05PTkUsICZlcnJvcik7Cj4gPiArwqDCoMKgwqDCoMKgwqBpZ3RfcmVxdWlyZV9mKHJjLCAi RmFpbGVkIHRvIHJlYWQgY2hhbWVsaXVtIGNvbmZpZ3VyYXRpb24KPiA+IGZpbGU6ICVzXG4iLAo+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGVycm9yLT5tZXNz YWdlKTsKPiAKPiBOb3Qgc3VyZSBJIGFncmVlIHdpdGggdGhlIHVzYWdlIG9mIGlndF9yZXF1aXJl IGluIHRoaXMgcGF0Y2guIEhvdyBJCj4gZW52aXNpb24gdGhpcyB0byB3b3JrLCBpcyB0aGF0IHdl IHJlcXVpcmUgdGhhdCB0aGUgZnVuY3Rpb25hbGl0eSB0bwo+IGJlCj4gdGVzdGVkIGlzIHRoZXJl LCBvdGhlcndpc2Ugd2Ugc2tpcC4gQnV0IG9uY2Ugd2UgaGF2ZSBkZXRlcm1pbmVkIHRoYXQsCj4g aWYgdGhlcmUgaXMgYW55IHByb2JsZW0gd2hlbiB0ZXN0aW5nIHRoYXQgZnVuY3Rpb25hbGl0eSwg aXQgc2hvdWxkCj4gY2F1c2UgYSBmYWlsdXJlLgo+IAo+IEkgdGhpbmsgaXQncyBhbHNvIGJldHRl ciBpZiB0aGUgdGVzdCBjb2RlIGlzIGFibGUgdG8gZGVjaWRlIHdoZXRoZXIKPiB0bwo+IHNraXAg b3IgZmFpbC4KPiAKPiA+ICvCoMKgwqDCoMKgwqDCoGNoYW1lbGl1bV91cmwgPSBnX2tleV9maWxl X2dldF9zdHJpbmcoa2V5X2ZpbGUsCj4gPiAiQ2hhbWVsaXVtIiwgIlVSTCIsCj4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgJmVycm9yKTsKPiA+ICvCoMKgwqDCoMKgwqDCoGln dF9yZXF1aXJlX2YoY2hhbWVsaXVtX3VybCwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAiQ291bGRuJ3QgcmVhZCBjaGFtZWxpdW0gVVJMIGZyb20gY29uZmln Cj4gPiBmaWxlOiAlc1xuIiwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBlcnJvci0+bWVzc2FnZSk7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBjaGFtZWxp dW1fcmVhZF9wb3J0X21hcHBpbmdzKGRybV9mZCwga2V5X2ZpbGUpOwo+ID4gKwo+ID4gK8KgwqDC oMKgwqDCoMKgZ19rZXlfZmlsZV9mcmVlKGtleV9maWxlKTsKPiA+ICt9Cj4gPiArCj4gPiArLyoq Cj4gPiArICogY2hhbWVsaXVtX3Jlc2V0Ogo+ID4gKyAqCj4gPiArICogUmVzZXRzIHRoZSBjaGFt ZWxpdW0ncyBJTyBib2FyZC4gQXMgd2VsbCwgdGhpcyBhbHNvIGhhcyB0aGUKPiA+IGVmZmVjdCBv Zgo+ID4gKyAqIGNhdXNpbmcgYWxsIG9mIHRoZSBjaGFtZWxpdW0gcG9ydHMgdG8gZ2V0IHNldCB0 byB1bnBsdWdnZWQKPiA+ICsgKi8KPiA+ICt2b2lkIGNoYW1lbGl1bV9yZXNldCh2b2lkKQo+ID4g K3sKPiA+ICvCoMKgwqDCoMKgwqDCoHhtbHJwY192YWx1ZSAqcmVzOwo+ID4gKwo+ID4gK8KgwqDC oMKgwqDCoMKgaWd0X2RlYnVnKCJSZXNldHRpbmcgdGhlIGNoYW1lbGl1bVxuIik7Cj4gPiArCj4g PiArwqDCoMKgwqDCoMKgwqByZXMgPSB4bWxycGNfY2xpZW50X2NhbGwoJmVudiwgY2hhbWVsaXVt X3VybCwgIlJlc2V0IiwKPiA+ICIoKSIpOwo+ID4gK8KgwqDCoMKgwqDCoMKgY2hlY2tfcnBjKCk7 Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqB4bWxycGNfREVDUkVGKHJlcyk7Cj4gPiArfQo+ID4g Kwo+ID4gK3N0YXRpYyB2b2lkIGNoYW1lbGl1bV9leGl0X2hhbmRsZXIoaW50IHNpZykKPiA+ICt7 Cj4gPiArwqDCoMKgwqDCoMKgwqB4bWxycGNfZW52X2NsZWFuKCZlbnYpOwo+ID4gK8KgwqDCoMKg wqDCoMKgeG1scnBjX2Vudl9pbml0KCZlbnYpOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgY2hh bWVsaXVtX2RlaW5pdCgpOwo+ID4gK30KPiA+ICsKPiA+ICsvKioKPiA+ICsgKiBjaGFtZWxpdW1f aW5pdDoKPiA+ICsgKiBAZHJtX2ZkOiBkcm0gZmlsZSBkZXNjcmlwdG9yCj4gPiArICoKPiA+ICsg KiBTZXRzIHVwIGEgY29ubmVjdGlvbiB3aXRoIGEgY2hhbWVsaXVtLCB1c2luZyB0aGUgVVJMIHNw ZWNpZmllZAo+ID4gaW4gdGhlCj4gPiArICogQ2hhbWVsaXVtIGNvbmZpZ3VyYXRpb24uIFRoaXMg bXVzdCBiZSBjYWxsZWQgZmlyc3QgYmVmb3JlCj4gPiB0cnlpbmcgdG8gdXNlIHRoZQo+ID4gKyAq IGNoYW1lbGl1bS4KPiA+ICsgKgo+ID4gKyAqIElmIHdlIGZhaWwgdG8gZXN0YWJsaXNoIGEgY29u bmVjdGlvbiB3aXRoIHRoZSBjaGFtZWxpdW0sIGZhaWwKPiA+IHRvIGZpbmQgYQo+ID4gKyAqIGNv bmZpZ3VyZWQgY29ubmVjdG9yLCBldGMuIHdlIGZhaWwgdGhlIGN1cnJlbnQgdGVzdC4KPiA+ICsg Ki8KPiA+ICt2b2lkIGNoYW1lbGl1bV9pbml0KGludCBkcm1fZmQpCj4gPiArewo+ID4gK8KgwqDC oMKgwqDCoMKgeG1scnBjX2Vudl9pbml0KCZlbnYpOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKg eG1scnBjX2NsaWVudF9pbml0MigmZW52LCBYTUxSUENfQ0xJRU5UX05PX0ZMQUdTLCBQQUNLQUdF LAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoFBBQ0tBR0VfVkVSU0lPTiwgTlVMTCwgMCk7Cj4gPiArwqDCoMKgwqDCoMKgwqBpZ3RfZmFp bF9vbl9mKGVudi5mYXVsdF9vY2N1cnJlZCwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAiRmFpbGVkIHRvIGluaXQgeG1scnBjOiAlc1xuIiwKPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBlbnYuZmF1bHRfc3RyaW5nKTsK PiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoGNoYW1lbGl1bV9yZWFkX2NvbmZpZyhkcm1fZmQpOwo+ ID4gK8KgwqDCoMKgwqDCoMKgY2hhbWVsaXVtX3Jlc2V0KCk7Cj4gPiArCj4gPiArwqDCoMKgwqDC oMKgwqBpZ3RfaW5zdGFsbF9leGl0X2hhbmRsZXIoY2hhbWVsaXVtX2V4aXRfaGFuZGxlcik7Cj4g PiArfQo+ID4gKwo+ID4gKy8qKgo+ID4gKyAqIGNoYW1lbGl1bV9kZWluaXQ6Cj4gPiArICoKPiA+ ICsgKiBGcmVlcyB0aGUgcmVzb3VyY2VzIHVzZWQgYnkgYSBjb25uZWN0aW9uIHRvIHRoZSBjaGFt ZWxpdW0gdGhhdAo+ID4gd2FzIHNldCB1cAo+ID4gKyAqIHdpdGggI2NoYW1lbGl1bV9pbml0LiBB cyB3ZWxsLCB0aGlzIGZ1bmN0aW9uIHJlc3RvcmVzIHRoZSBzdGF0ZQo+ID4gb2YgdGhlCj4gPiAr ICogY2hhbWVsaXVtIGxpa2UgaXQgd2FzIGJlZm9yZSBjYWxsaW5nICNjaGFtZWxpdW1faW5pdC4g VGhpcwo+ID4gZnVuY3Rpb24gaXMgYWxzbwo+ID4gKyAqIGNhbGxlZCBhcyBhbiBleGl0IGhhbmRs ZXIsIHNvIHVzZXJzIG9ubHkgbmVlZCB0byBjYWxsIG1hbnVhbGx5Cj4gPiBpZiB0aGV5IGRvbid0 Cj4gPiArICogd2FudCB0aGUgY2hhbWVsaXVtIGludGVyZmVyaW5nIHdpdGggb3RoZXIgdGVzdHMg aW4gdGhlIHNhbWUKPiA+IGZpbGUuCj4gPiArICovCj4gPiArdm9pZCBjaGFtZWxpdW1fZGVpbml0 KHZvaWQpCj4gPiArewo+ID4gK8KgwqDCoMKgwqDCoMKgaW50IGk7Cj4gPiArwqDCoMKgwqDCoMKg wqBzdHJ1Y3QgY2hhbWVsaXVtX2VkaWQgKnBvcywgKnRtcDsKPiA+ICsKPiA+ICvCoMKgwqDCoMKg wqDCoGlmICghY2hhbWVsaXVtX3VybCkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqByZXR1cm47Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqAvKiBXZSB3YW50IHRvIG1ha2Ugc3Vy ZSB3ZSBsZWF2ZSBhbGwgb2YgdGhlIHBvcnRzIHBsdWdnZWQKPiA+IGluLCBzaW5jZQo+ID4gK8Kg wqDCoMKgwqDCoMKgwqAqIHRlc3Rpbmcgc2V0dXBzIHJlcXVpcmluZyBtdWx0aXBsZSBtb25pdG9y cyBhcmUgcHJvYmFibHkKPiA+IHVzaW5nIHRoZQo+ID4gK8KgwqDCoMKgwqDCoMKgwqAqIGNoYW1l bGl1bSB0byBwcm92aWRlIHNhaWQgbW9uaXRvcnMKPiA+ICvCoMKgwqDCoMKgwqDCoMKgKi8KPiA+ ICvCoMKgwqDCoMKgwqDCoGNoYW1lbGl1bV9yZXNldCgpOwo+ID4gK8KgwqDCoMKgwqDCoMKgZm9y IChpID0gMDsgaSA8IGNoYW1lbGl1bV9wb3J0X2NvdW50OyBpKyspCj4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgY2hhbWVsaXVtX3BsdWcoY2hhbWVsaXVtX3BvcnRzW2ldLmlkKTsK PiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoC8qIERlc3Ryb3kgYW55IEVESURzIHdlIGNyZWF0ZWQg dG8gbWFrZSBzdXJlIHdlIGRvbid0IGxlYWsKPiA+IHRoZW0gKi8KPiA+ICvCoMKgwqDCoMKgwqDC oGlndF9saXN0X2Zvcl9lYWNoX3NhZmUocG9zLCB0bXAsICZhbGxvY2F0ZWRfZWRpZHMtPmxpbmss Cj4gPiBsaW5rKSB7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY2hhbWVsaXVt X2Rlc3Ryb3lfZWRpZChwb3MtPmlkKTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBmcmVlKHBvcyk7Cj4gPiArwqDCoMKgwqDCoMKgwqB9Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKg wqB4bWxycGNfY2xpZW50X2NsZWFudXAoKTsKPiA+ICvCoMKgwqDCoMKgwqDCoHhtbHJwY19lbnZf Y2xlYW4oJmVudik7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBmb3IgKGkgPSAwOyBpIDwgY2hh bWVsaXVtX3BvcnRfY291bnQ7IGkrKykKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBmcmVlKGNoYW1lbGl1bV9wb3J0c1tpXS5jb25uZWN0b3JfbmFtZSk7Cj4gPiArCj4gPiArwqDC oMKgwqDCoMKgwqBmcmVlKGNoYW1lbGl1bV9wb3J0cyk7Cj4gPiArwqDCoMKgwqDCoMKgwqBhbGxv Y2F0ZWRfZWRpZHMgPSBOVUxMOwo+ID4gK8KgwqDCoMKgwqDCoMKgY2hhbWVsaXVtX3VybCA9IE5V TEw7Cj4gPiArwqDCoMKgwqDCoMKgwqBjaGFtZWxpdW1fcG9ydHMgPSBOVUxMOwo+ID4gK8KgwqDC oMKgwqDCoMKgY2hhbWVsaXVtX3BvcnRfY291bnQgPSAwOwo+ID4gK30KPiA+ICsKPiA+IGRpZmYg LS1naXQgYS9saWIvaWd0X2NoYW1lbGl1bS5oIGIvbGliL2lndF9jaGFtZWxpdW0uaAo+ID4gbmV3 IGZpbGUgbW9kZSAxMDA2NDQKPiA+IGluZGV4IDAwMDAwMDAuLjJmN2FhZGYKPiA+IC0tLSAvZGV2 L251bGwKPiA+ICsrKyBiL2xpYi9pZ3RfY2hhbWVsaXVtLmgKPiA+IEBAIC0wLDAgKzEsNzMgQEAK PiA+ICsvKgo+ID4gKyAqIENvcHlyaWdodCDCqSAyMDE2IFJlZCBIYXQgSW5jLgo+ID4gKyAqCj4g PiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFu eSBwZXJzb24KPiA+IG9idGFpbmluZyBhCj4gPiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFu ZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQo+ID4gIlNvZnR3YXJlIiksCj4g PiArICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVk aW5nIHdpdGhvdXQKPiA+IGxpbWl0YXRpb24KPiA+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29w eSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwKPiA+IHN1YmxpY2Vuc2UsCj4g PiArICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBw ZXJzb25zIHRvCj4gPiB3aG9tIHRoZQo+ID4gKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBk byBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nCj4gPiBjb25kaXRpb25zOgo+ID4gKyAqCj4g PiArICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3Rp Y2UKPiA+IChpbmNsdWRpbmcgdGhlIG5leHQKPiA+ICsgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGlu Y2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwKPiA+IHBvcnRpb25zIG9mIHRoZQo+ ID4gKyAqIFNvZnR3YXJlLgo+ID4gKyAqCj4gPiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVE ICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCj4gPiBFWFBSRVNTIE9SCj4g PiArICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElF UyBPRgo+ID4gTUVSQ0hBTlRBQklMSVRZLAo+ID4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuwqDCoElOIE5PCj4gPiBFVkVOVCBTSEFMTAo+ ID4gKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5Z IENMQUlNLAo+ID4gREFNQUdFUyBPUiBPVEhFUgo+ID4gKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJ TiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAo+ID4gQVJJU0lORwo+ ID4gKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9S IFRIRSBVU0UgT1IKPiA+IE9USEVSIERFQUxJTkdTCj4gPiArICogSU4gVEhFIFNPRlRXQVJFLgo+ ID4gKyAqCj4gPiArICogQXV0aG9yczogTHl1ZGUgUGF1bCA8bHl1ZGVAcmVkaGF0LmNvbT4KPiA+ ICsgKi8KPiA+ICsKPiA+ICsjaWZuZGVmIElHVF9DSEFNRUxJVU1fSAo+ID4gKyNkZWZpbmUgSUdU X0NIQU1FTElVTV9ICj4gPiArCj4gPiArI2luY2x1ZGUgImNvbmZpZy5oIgo+ID4gKyNpbmNsdWRl ICJpZ3QuaCIKPiA+ICsjaW5jbHVkZSA8c3RkYm9vbC5oPgo+ID4gKwo+ID4gKy8qKgo+ID4gKyAq IGNoYW1lbGl1bV9wb3J0Ogo+ID4gKyAqIEB0eXBlOiBUaGUgRFJNIGNvbm5lY3RvciB0eXBlIG9m IHRoZSBjaGFtZWxpdW0gcG9ydCAobm90IHRoZQo+ID4gaG9zdCdzKQo+ID4gKyAqIEBpZDogVGhl IElEIG9mIHRoZSBjaGFtZWxpdW0gcG9ydAo+ID4gKyAqIEBjb25uZWN0b3JfaWQ6IFRoZSBJRCBv ZiB0aGUgRFJNIGNvbm5lY3RvciBjb25uZWN0ZWQgdG8gdGhpcwo+ID4gcG9ydAo+ID4gKyAqIEBj b25uZWN0b3JfbmFtZTogVGhlIG5hbWUgb2YgdGhlIERSTSBjb25uZWN0b3IKPiA+ICsgKi8KPiA+ ICtzdHJ1Y3QgY2hhbWVsaXVtX3BvcnQgewo+ID4gK8KgwqDCoMKgwqDCoMKgdW5zaWduZWQgaW50 IHR5cGU7Cj4gPiArwqDCoMKgwqDCoMKgwqBpbnQgaWQ7Cj4gPiArwqDCoMKgwqDCoMKgwqBpbnQg Y29ubmVjdG9yX2lkOwo+ID4gK8KgwqDCoMKgwqDCoMKgY2hhciAqY29ubmVjdG9yX25hbWU7Cj4g PiArfTsKPiA+IAo+ID4gK2V4dGVybiBpbnQgY2hhbWVsaXVtX3BvcnRfY291bnQ7Cj4gPiArZXh0 ZXJuIHN0cnVjdCBjaGFtZWxpdW1fcG9ydCAqY2hhbWVsaXVtX3BvcnRzOwo+IAo+IE5vdCBzdXJl IGl0J3MgYSBnb29kIGlkZWEgdG8gZXhwb3NlIGFsbCB0aGlzIHRvIHRlc3RzLiBBZnRlcndhcmRz Cj4gY291bGQgYmUgYSBsb3Qgb2Ygd29yayB0byB1cGRhdGUgdGVzdHMgaWYgd2UgZGVjaWRlIHRv IGRvIGNoYW5nZXMuCj4gCj4gPiArdm9pZCBjaGFtZWxpdW1faW5pdChpbnQgZHJtX2ZkKTsKPiA+ ICt2b2lkIGNoYW1lbGl1bV9kZWluaXQodm9pZCk7Cj4gPiArdm9pZCBjaGFtZWxpdW1fcmVzZXQo dm9pZCk7Cj4gPiArCj4gPiArdm9pZCBjaGFtZWxpdW1fcGx1ZyhpbnQgaWQpOwo+ID4gK3ZvaWQg Y2hhbWVsaXVtX3VucGx1ZyhpbnQgaWQpOwo+ID4gK2Jvb2wgY2hhbWVsaXVtX2lzX3BsdWdnZWQo aW50IGlkKTsKPiA+ICtib29sIGNoYW1lbGl1bV9wb3J0X3dhaXRfdmlkZW9faW5wdXRfc3RhYmxl KGludCBpZCwgaW50Cj4gPiB0aW1lb3V0X3NlY3MpOwo+ID4gK3ZvaWQgY2hhbWVsaXVtX2ZpcmVf bWl4ZWRfaHBkX3B1bHNlcyhpbnQgaWQsIC4uLik7Cj4gPiArdm9pZCBjaGFtZWxpdW1fZmlyZV9o cGRfcHVsc2VzKGludCBpZCwgaW50IHdpZHRoX21zZWMsIGludCBjb3VudCk7Cj4gPiArdm9pZCBj aGFtZWxpdW1fYXN5bmNfaHBkX3B1bHNlX3N0YXJ0KGludCBpZCwgYm9vbCBoaWdoLCBpbnQKPiA+ IGRlbGF5X3NlY3MpOwo+ID4gK3ZvaWQgY2hhbWVsaXVtX2FzeW5jX2hwZF9wdWxzZV9maW5pc2go dm9pZCk7Cj4gPiAraW50IGNoYW1lbGl1bV9uZXdfZWRpZChjb25zdCB1bnNpZ25lZCBjaGFyICpl ZGlkKTsKPiA+ICt2b2lkIGNoYW1lbGl1bV9wb3J0X3NldF9lZGlkKGludCBpZCwgaW50IGVkaWRf aWQpOwo+ID4gK2Jvb2wgY2hhbWVsaXVtX3BvcnRfZ2V0X2RkY19zdGF0ZShpbnQgaWQpOwo+ID4g K3ZvaWQgY2hhbWVsaXVtX3BvcnRfc2V0X2RkY19zdGF0ZShpbnQgaWQsIGJvb2wgZW5hYmxlZCk7 Cj4gPiArdm9pZCBjaGFtZWxpdW1fcG9ydF9nZXRfcmVzb2x1dGlvbihpbnQgaWQsIGludCAqeCwg aW50ICp5KTsKPiA+ICtpZ3RfY3JjX3QgKmNoYW1lbGl1bV9nZXRfY3JjX2Zvcl9hcmVhKGludCBp ZCwgaW50IHgsIGludCB5LCBpbnQgdywKPiA+IGludCBoKTsKPiA+ICt2b2lkIGNoYW1lbGl1bV9z dGFydF9jYXB0dXJlKGludCBpZCwgaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgpOwo+ID4gK3Zv aWQgY2hhbWVsaXVtX3N0b3BfY2FwdHVyZShpbnQgZnJhbWVfY291bnQpOwo+ID4gK2lndF9jcmNf dCAqY2hhbWVsaXVtX3JlYWRfY2FwdHVyZWRfY3JjcyhpbnQgKmZyYW1lX2NvdW50KTsKPiA+ICtp bnQgY2hhbWVsaXVtX2dldF9mcmFtZV9saW1pdChpbnQgaWQsIGludCB3LCBpbnQgaCk7Cj4gPiAr Cj4gPiArI2VuZGlmIC8qIElHVF9DSEFNRUxJVU1fSCAqLwo+ID4gZGlmZiAtLWdpdCBhL3Njcmlw dHMvcnVuLXRlc3RzLnNoIGIvc2NyaXB0cy9ydW4tdGVzdHMuc2gKPiA+IGluZGV4IDk3YmE5ZTUu LjY1MzliZjkgMTAwNzU1Cj4gPiAtLS0gYS9zY3JpcHRzL3J1bi10ZXN0cy5zaAo+ID4gKysrIGIv c2NyaXB0cy9ydW4tdGVzdHMuc2gKPiA+IEBAIC0xMjIsMTAgKzEyMiwxMCBAQCBpZiBbICEgLXgg IiRQSUdMSVQiIF07IHRoZW4KPiA+IMKgZmkKPiA+IAo+ID4gwqBpZiBbICJ4JFJFU1VNRSIgIT0g IngiIF07IHRoZW4KPiA+IC3CoMKgwqDCoMKgwqDCoHN1ZG8gSUdUX1RFU1RfUk9PVD0iJElHVF9U RVNUX1JPT1QiICIkUElHTElUIiByZXN1bWUKPiA+ICIkUkVTVUxUUyIgJE5PUkVUUlkKPiA+ICvC oMKgwqDCoMKgwqDCoHN1ZG8gSUdUX1RFU1RfUk9PVD0iJElHVF9URVNUX1JPT1QiCj4gPiBDSEFN RUxJVU1fSE9TVD0iJENIQU1FTElVTV9IT1NUIiAiJFBJR0xJVCIgcmVzdW1lICIkUkVTVUxUUyIK PiA+ICROT1JFVFJZCj4gPiDCoGVsc2UKPiA+IMKgwqDCoMKgwqDCoMKgwqBta2RpciAtcCAiJFJF U1VMVFMiCj4gPiAtwqDCoMKgwqDCoMKgwqBzdWRvIElHVF9URVNUX1JPT1Q9IiRJR1RfVEVTVF9S T09UIiAiJFBJR0xJVCIgcnVuIGlndCAtbwo+ID4gIiRSRVNVTFRTIiAtcyAkVkVSQk9TRSAkRVhD TFVERSAkRklMVEVSCj4gPiArwqDCoMKgwqDCoMKgwqBzdWRvIElHVF9URVNUX1JPT1Q9IiRJR1Rf VEVTVF9ST09UIgo+ID4gQ0hBTUVMSVVNX0hPU1Q9IiRDSEFNRUxJVU1fSE9TVCIgIiRQSUdMSVQi IHJ1biBpZ3QgLW8gIiRSRVNVTFRTIiAtcwo+ID4gJFZFUkJPU0UgJEVYQ0xVREUgJEZJTFRFUgo+ ID4gwqBmaQo+ID4gCj4gPiDCoGlmIFsgIiRTVU1NQVJZIiA9PSAiaHRtbCIgXTsgdGhlbgo+IAo+ IEd1ZXNzIHRoaXMgaXNuJ3QgbmVlZGVkIGFueSBtb3JlPwo+IAo+ID4gZGlmZiAtLWdpdCBhL3Rl c3RzL01ha2VmaWxlLmFtIGIvdGVzdHMvTWFrZWZpbGUuYW0KPiA+IGluZGV4IGE0MDgxMjYuLjA2 YThlNmIgMTAwNjQ0Cj4gPiAtLS0gYS90ZXN0cy9NYWtlZmlsZS5hbQo+ID4gKysrIGIvdGVzdHMv TWFrZWZpbGUuYW0KPiA+IEBAIC02Myw3ICs2Myw3IEBAIEFNX0NGTEFHUyA9ICQoRFJNX0NGTEFH UykgJChDV0FSTkZMQUdTKSAtV25vLQo+ID4gdW51c2VkLXJlc3VsdCAkKERFQlVHX0NGTEFHUylc Cj4gPiDCoMKgwqDCoMKgwqDCoMKgJChMSUJVTldJTkRfQ0ZMQUdTKSAkKFdFUlJPUl9DRkxBR1Mp IFwKPiA+IMKgwqDCoMKgwqDCoMKgwqAkKE5VTEwpCj4gPiAKPiA+IC1MREFERCA9IC4uL2xpYi9s aWJpbnRlbF90b29scy5sYSAkKEdMSUJfTElCUykKPiA+ICtMREFERCA9IC4uL2xpYi9saWJpbnRl bF90b29scy5sYSAkKEdMSUJfTElCUykgJChYTUxSUENfTElCUykKPiA+IAo+ID4gwqBBTV9DRkxB R1MgKz0gJChDQUlST19DRkxBR1MpICQoTElCVURFVl9DRkxBR1MpICQoR0xJQl9DRkxBR1MpCj4g PiDCoEFNX0xERkxBR1MgPSAtV2wsLS1hcy1uZWVkZWQKPiA+IEBAIC0xMTksNSArMTE5LDggQEAg dmM0X3dhaXRfYm9fQ0ZMQUdTID0gJChBTV9DRkxBR1MpCj4gPiAkKERSTV9WQzRfQ0ZMQUdTKQo+ ID4gwqB2YzRfd2FpdF9ib19MREFERCA9ICQoTERBREQpICQoRFJNX1ZDNF9MSUJTKQo+ID4gwqB2 YzRfd2FpdF9zZXFub19DRkxBR1MgPSAkKEFNX0NGTEFHUykgJChEUk1fVkM0X0NGTEFHUykKPiA+ IMKgdmM0X3dhaXRfc2Vxbm9fTERBREQgPSAkKExEQUREKSAkKERSTV9WQzRfTElCUykKPiA+ICsK PiA+ICtjaGFtZWxpdW1fQ0ZMQUdTID0gJChBTV9DRkxBR1MpICQoWE1MUlBDX0NGTEFHUykgJChV REVWX0NGTEFHUykKPiA+ICtjaGFtZWxpdW1fTERBREQgPSAkKExEQUREKSAkKFhNTFJQQ19MSUJT KSAkKFVERVZfTElCUykKPiAKPiBTYW1lIGFzIGJlZm9yZSAodGhlIHBhY2thZ2UgcHJlZml4IGlz IExJQlVERVYpLgo+IAo+ID4gwqBlbmRpZgo+ID4gCj4gPiBkaWZmIC0tZ2l0IGEvdGVzdHMvTWFr ZWZpbGUuc291cmNlcyBiL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKPiA+IGluZGV4IDU3YTEwYzUu LjVlZWFlNzcgMTAwNjQ0Cj4gPiAtLS0gYS90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCj4gPiArKysg Yi90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCj4gPiBAQCAtMTM1LDggKzEzNSwxMyBAQCBURVNUU19w cm9nc19NID0gXAo+ID4gwqDCoMKgwqDCoMKgwqDCoHByaW1lX3ZnZW0gXAo+ID4gwqDCoMKgwqDC oMKgwqDCoHRlbXBsYXRlIFwKPiA+IMKgwqDCoMKgwqDCoMKgwqB2Z2VtX2Jhc2ljIFwKPiA+IC3C oMKgwqDCoMKgwqDCoHZnZW1fc2xvdyBcCj4gPiAtwqDCoMKgwqDCoMKgwqAkKE5VTEwpCj4gPiAr wqDCoMKgwqDCoMKgwqB2Z2VtX3Nsb3cKPiA+ICsKPiA+ICtpZiBIQVZFX0NIQU1FTElVTQo+ID4g K1RFU1RTX3Byb2dzX00gKz0gY2hhbWVsaXVtCj4gPiArZW5kaWYKPiA+ICsKPiA+ICtURVNUU19w cm9nc19NICs9ICQoTlVMTCkKPiAKPiBTYW1lIGFzIGJlZm9yZS4KPiAKPiA+IMKgVEVTVFNfcHJv Z3NfWE0gPSBcCj4gPiDCoMKgwqDCoMKgZ2VtX2NvbmN1cnJlbnRfYWxsIFwKPiA+IGRpZmYgLS1n aXQgYS90ZXN0cy9jaGFtZWxpdW0uYyBiL3Rlc3RzL2NoYW1lbGl1bS5jCj4gPiBuZXcgZmlsZSBt b2RlIDEwMDY0NAo+ID4gaW5kZXggMDAwMDAwMC4uZTBmNjQ1YQo+ID4gLS0tIC9kZXYvbnVsbAo+ ID4gKysrIGIvdGVzdHMvY2hhbWVsaXVtLmMKPiA+IEBAIC0wLDAgKzEsNDA3IEBACj4gPiArLyoK PiA+ICsgKiBDb3B5cmlnaHQgwqkgMjAxNiBSZWQgSGF0IEluYy4KPiA+ICsgKgo+ID4gKyAqIFBl cm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29u Cj4gPiBvYnRhaW5pbmcgYQo+ID4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2Np YXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKPiA+ICJTb2Z0d2FyZSIpLAo+ID4gKyAqIHRv IGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRo b3V0Cj4gPiBsaW1pdGF0aW9uCj4gPiArICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlm eSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsCj4gPiBzdWJsaWNlbnNlLAo+ID4gKyAqIGFu ZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0 bwo+ID4gd2hvbSB0aGUKPiA+ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1 YmplY3QgdG8gdGhlIGZvbGxvd2luZwo+ID4gY29uZGl0aW9uczoKPiA+ICsgKgo+ID4gKyAqIFRo ZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlCj4gPiAo aW5jbHVkaW5nIHRoZSBuZXh0Cj4gPiArICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBp biBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsCj4gPiBwb3J0aW9ucyBvZiB0aGUKPiA+ICsgKiBT b2Z0d2FyZS4KPiA+ICsgKgo+ID4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMi LCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAo+ID4gRVhQUkVTUyBPUgo+ID4gKyAqIElN UExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKPiA+ IE1FUkNIQU5UQUJJTElUWSwKPiA+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RSBBTkQgTk9OSU5GUklOR0VNRU5ULsKgwqBJTiBOTwo+ID4gRVZFTlQgU0hBTEwKPiA+ICsgKiBU SEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwK PiA+IERBTUFHRVMgT1IgT1RIRVIKPiA+ICsgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNU SU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKPiA+IEFSSVNJTkcKPiA+ICsgKiBG Uk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNF IE9SCj4gPiBPVEhFUiBERUFMSU5HUwo+ID4gKyAqIElOIFRIRSBTT0ZUV0FSRS4KPiA+ICsgKgo+ ID4gKyAqIEF1dGhvcnM6Cj4gPiArICrCoMKgwqDCoEx5dWRlIFBhdWwgPGx5dWRlQHJlZGhhdC5j b20+Cj4gPiArICovCj4gPiArCj4gPiArI2luY2x1ZGUgImNvbmZpZy5oIgo+ID4gKyNpbmNsdWRl ICJpZ3QuaCIKPiA+ICsKPiA+ICsjaW5jbHVkZSA8ZmNudGwuaD4KPiA+ICsjaW5jbHVkZSA8c3Ry aW5nLmg+Cj4gPiArCj4gPiArdHlwZWRlZiBzdHJ1Y3Qgewo+ID4gK8KgwqDCoMKgwqDCoMKgaW50 IGRybV9mZDsKPiA+ICt9IGRhdGFfdDsKPiA+ICsKPiA+ICsjZGVmaW5lIEhPVFBMVUdfVElNRU9V VCAyMCAvKiBzZWNvbmRzICovCj4gPiArCj4gPiArc3RhdGljIHZvaWQKPiA+ICtyZXF1aXJlX2Nv bm5lY3Rvcl9wcmVzZW50KGRhdGFfdCAqZGF0YSwgdW5zaWduZWQgaW50IHR5cGUpCj4gPiArewo+ ID4gK8KgwqDCoMKgwqDCoMKgaW50IGk7Cj4gPiArwqDCoMKgwqDCoMKgwqBib29sIGZvdW5kID0g ZmFsc2U7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBmb3IgKGkgPSAwOyBpIDwgY2hhbWVsaXVt X3BvcnRfY291bnQgJiYgIWZvdW5kOyBpKyspIHsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBpZiAoY2hhbWVsaXVtX3BvcnRzW2ldLnR5cGUgPT0gdHlwZSkKPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZm91bmQgPSB0cnVlOwo+ID4g K8KgwqDCoMKgwqDCoMKgfQo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgaWd0X3JlcXVpcmVfZihm b3VuZCwgIk5vIHBvcnQgb2YgdHlwZSAlcyB3YXMgZm91bmRcbiIsCj4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKga21zdGVzdF9jb25uZWN0b3JfdHlwZV9zdHIo dHlwZSkpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgZHJtTW9kZUNvbm5lY3Rpb24KPiA+ICty ZXByb2JlX2Nvbm5lY3RvcihkYXRhX3QgKmRhdGEsIHN0cnVjdCBjaGFtZWxpdW1fcG9ydCAqcG9y dCkKPiA+ICt7Cj4gPiArwqDCoMKgwqDCoMKgwqBkcm1Nb2RlQ29ubmVjdG9yICpjb25uZWN0b3I7 Cj4gPiArwqDCoMKgwqDCoMKgwqBkcm1Nb2RlQ29ubmVjdGlvbiBzdGF0dXM7Cj4gPiArCj4gPiAr wqDCoMKgwqDCoMKgwqBpZ3RfZGVidWcoIlJlcHJvYmluZyAlcy4uLlxuIiwgcG9ydC0+Y29ubmVj dG9yX25hbWUpOwo+ID4gK8KgwqDCoMKgwqDCoMKgY29ubmVjdG9yID0gZHJtTW9kZUdldENvbm5l Y3RvcihkYXRhLT5kcm1fZmQsIHBvcnQtCj4gPiA+Y29ubmVjdG9yX2lkKTsKPiA+ICvCoMKgwqDC oMKgwqDCoGlndF9hc3NlcnQoY29ubmVjdG9yKTsKPiA+ICvCoMKgwqDCoMKgwqDCoHN0YXR1cyA9 IGNvbm5lY3Rvci0+Y29ubmVjdGlvbjsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoGRybU1vZGVG cmVlQ29ubmVjdG9yKGNvbm5lY3Rvcik7Cj4gPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gc3RhdHVz Owo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZAo+ID4gK3dhaXRfZm9yX2Nvbm5lY3Rvcihk YXRhX3QgKmRhdGEsIHN0cnVjdCBjaGFtZWxpdW1fcG9ydCAqcG9ydCwKPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkcm1Nb2RlQ29ubmVjdGlvbiBzdGF0dXMpCj4gPiAr ewo+ID4gK8KgwqDCoMKgwqDCoMKgYm9vbCBmaW5pc2hlZCA9IGZhbHNlOwo+ID4gKwo+ID4gK8Kg wqDCoMKgwqDCoMKgaWd0X2RlYnVnKCJXYWl0aW5nIGZvciAlcyB0byAlc2Nvbm5lY3QuLi5cbiIs IHBvcnQtCj4gPiA+Y29ubmVjdG9yX25hbWUsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHN0YXR1cyA9PSBEUk1fTU9ERV9ESVNDT05ORUNURUQgPyAiZGlzIiA6ICIiKTsK PiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoC8qCj4gPiArwqDCoMKgwqDCoMKgwqDCoCogUmVseSBv biBzaW1wbGUgcmVwcm9iaW5nIHNvIHdlIGRvbid0IGZhaWwgdGVzdHMgdGhhdAo+ID4gZG9uJ3Qg cmVxdWlyZQo+ID4gK8KgwqDCoMKgwqDCoMKgwqAqIHRoYXQgaHBkIGV2ZW50cyB3b3JrIGluIHRo ZSBldmVudCB0aGF0IGhwZCBkb2Vzbid0IHdvcmsKPiA+IG9uIHRoZSBzeXN0ZW0KPiA+ICvCoMKg wqDCoMKgwqDCoMKgKi8KPiA+ICvCoMKgwqDCoMKgwqDCoGlndF91bnRpbF90aW1lb3V0KEhPVFBM VUdfVElNRU9VVCkgewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChyZXBy b2JlX2Nvbm5lY3RvcihkYXRhLCBwb3J0KSA9PSBzdGF0dXMpIHsKPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZmluaXNoZWQgPSB0cnVlOwo+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm47Cj4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHNsZWVwKDEpOwo+ID4gK8KgwqDCoMKgwqDCoMKgfQo+ID4gKwo+ID4g K8KgwqDCoMKgwqDCoMKgaWd0X2Fzc2VydChmaW5pc2hlZCk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0 YXRpYyB2b2lkCj4gPiArcmVzZXRfc3RhdGUoZGF0YV90ICpkYXRhLCBzdHJ1Y3QgY2hhbWVsaXVt X3BvcnQgKnBvcnQpCj4gPiArewo+ID4gK8KgwqDCoMKgwqDCoMKgaWd0X3Jlc2V0X2Nvbm5lY3Rv cnMoKTsKPiA+ICvCoMKgwqDCoMKgwqDCoGNoYW1lbGl1bV9yZXNldCgpOwo+ID4gK8KgwqDCoMKg wqDCoMKgd2FpdF9mb3JfY29ubmVjdG9yKGRhdGEsIHBvcnQsIERSTV9NT0RFX0RJU0NPTk5FQ1RF RCk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkCj4gPiArdGVzdF9iYXNpY19ob3RwbHVn KGRhdGFfdCAqZGF0YSwgc3RydWN0IGNoYW1lbGl1bV9wb3J0ICpwb3J0KQo+ID4gK3sKPiA+ICvC oMKgwqDCoMKgwqDCoGludCBpOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgcmVzZXRfc3RhdGUo ZGF0YSwgcG9ydCk7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBpZ3Rfd2F0Y2hfaG90cGx1Zygp Owo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgZm9yIChpID0gMDsgaSA8IDE1OyBpKyspIHsKPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZ3RfZmx1c2hfaG90cGx1Z3MoKTsKPiA+ ICsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKiBDaGVjayBpZiB3ZSBnZXQg YSBzeXNmcyBob3RwbHVnIGV2ZW50ICovCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgY2hhbWVsaXVtX3BsdWcocG9ydC0+aWQpOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGlndF9hc3NlcnQoaWd0X2hvdHBsdWdfZGV0ZWN0ZWQoSE9UUExVR19USU1FT1VUKSk7 Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWd0X2Fzc2VydChyZXByb2JlX2Nv bm5lY3RvcihkYXRhLCBwb3J0KSA9PQo+ID4gRFJNX01PREVfQ09OTkVDVEVEKTsKPiAKPiBCZXR0 ZXIgdXNlIGlndF9hc3NlcnRfZXEgaW4gY2FzZSB3ZSBnZXQgRFJNX01PREVfVU5LTk9XTkNPTk5F Q1RJT04/Cj4gCj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWd0X2Zs dXNoX2hvdHBsdWdzKCk7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg LyogTm93IGNoZWNrIGlmIHdlIGdldCBhIGhvdHBsdWcgZnJvbSBkaXNjb25uZWN0aW9uCj4gPiAq Lwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNoYW1lbGl1bV91bnBsdWcocG9y dC0+aWQpOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlndF9hc3NlcnQoaWd0 X2hvdHBsdWdfZGV0ZWN0ZWQoSE9UUExVR19USU1FT1VUKSk7Cj4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgaWd0X2Fzc2VydChyZXByb2JlX2Nvbm5lY3RvcihkYXRhLCBwb3J0KSA9 PQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBEUk1fTU9ERV9ESVNDT05ORUNURUQpOwo+IAo+IERpdHRvLgo+IAo+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoC8qIFNsZWVwIHNvIHdlIGRvbid0IGFjY2lkZW50YWxseSBjYXVz ZSBhbiBocGQKPiA+IHN0b3JtICovCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg c2xlZXAoMSk7Cj4gCj4gV291bGRuJ3Qgc3VjaCBhIGxvbmcgc2xlZXAgdW5uZWNlc3NhcmlseSBz bG93IHRlc3QgcnVucyBkb3duPwpZZXMsIGJ1dCBJIGRvbid0IHNlZSBtdWNoIG9mIGEgd2F5IGFy b3VuZCBpdCByaWdodCBub3cuIEV2ZW50dWFsbHkgSSdkCmxpa2UgdG8gYWRkIHNvbWV0aGluZyB0 byBpOTE1J3MgZGVidWdmcyB0byBhbGxvdyBkaXNhYmxpbmcgSFBEIHN0b3JtCmRldGVjdGlvbiAo d2UnbGwgbmVlZCB0aGlzIGFzIHdlbGwgaWYgd2Ugd2FudCB0byBldmVudHVhbGx5IGFkZCBIUEQK c3Rvcm0gZGV0ZWN0aW9uIHRlc3RzKS4KCj4gCj4gPiArwqDCoMKgwqDCoMKgwqB9Cj4gPiArfQo+ ID4gKwo+ID4gK3N0YXRpYyB2b2lkCj4gPiArdGVzdF9lZGlkX3JlYWQoZGF0YV90ICpkYXRhLCBz dHJ1Y3QgY2hhbWVsaXVtX3BvcnQgKnBvcnQsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoGludCBlZGlkX2lkLCBjb25zdCB1bnNpZ25lZCBjaGFyICplZGlkKQo+ID4gK3sKPiA+ICvC oMKgwqDCoMKgwqDCoGRybU1vZGVQcm9wZXJ0eUJsb2JQdHIgZWRpZF9ibG9iID0gTlVMTDsKPiA+ ICvCoMKgwqDCoMKgwqDCoHVpbnQ2NF90IGVkaWRfYmxvYl9pZDsKPiA+ICsKPiA+ICvCoMKgwqDC oMKgwqDCoHJlc2V0X3N0YXRlKGRhdGEsIHBvcnQpOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKg Y2hhbWVsaXVtX3BvcnRfc2V0X2VkaWQocG9ydC0+aWQsIGVkaWRfaWQpOwo+ID4gK8KgwqDCoMKg wqDCoMKgY2hhbWVsaXVtX3BsdWcocG9ydC0+aWQpOwo+ID4gK8KgwqDCoMKgwqDCoMKgd2FpdF9m b3JfY29ubmVjdG9yKGRhdGEsIHBvcnQsIERSTV9NT0RFX0NPTk5FQ1RFRCk7Cj4gPiArCj4gPiAr wqDCoMKgwqDCoMKgwqBpZ3RfYXNzZXJ0KGttc3Rlc3RfZ2V0X3Byb3BlcnR5KGRhdGEtPmRybV9m ZCwgcG9ydC0KPiA+ID5jb25uZWN0b3JfaWQsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgRFJN X01PREVfT0JKRUNUX0NPTk5FQ1RPUiwKPiA+ICJFRElEIiwgTlVMTCwKPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAmZWRpZF9ibG9iX2lkLCBOVUxMKSk7Cj4gPiArwqDCoMKgwqDCoMKgwqBpZ3Rf YXNzZXJ0KGVkaWRfYmxvYiA9IGRybU1vZGVHZXRQcm9wZXJ0eUJsb2IoZGF0YS0+ZHJtX2ZkLAo+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBlZGlk X2Jsb2JfaWQpCj4gPiApOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgLyogQ29tcGFyZSB0aGUg RURJRCBmcm9tIHRoZSBjb25uZWN0b3IgdG8gd2hhdCB3ZSBleHBlY3QgKi8KPiA+ICvCoMKgwqDC oMKgwqDCoGlndF9hc3NlcnQobWVtY21wKGVkaWQsIGVkaWRfYmxvYi0+ZGF0YSwgRURJRF9MRU5H VEgpID09Cj4gPiAwKTsKPiAKPiBXb3VsZCBiZSBjb29sIGlmIHdlIGhhZCBhIGlndF9hc3NlcnRf bWVtX2VxIG9yIHN1Y2ggdGhhdCB3b3VsZCBwcmludAo+IHRoZSB1bmV4cGVjdGVkIGFuZCBleHBl Y3RlZCB2YWx1ZXMgdG8gdGhlIGxvZyAocHJvcGVybHkgY2FwcGVkLCBvZgo+IGNvdXJzZSkuCkkg bGlrZSB0aGlzIGFuZCB0aGlzIGRlZmluaXRlbHkgd291bGRuJ3QgYmUgdG9vIGRpZmZpY3VsdCB0 byBhZGQuCgo+IAo+ID4gK8KgwqDCoMKgwqDCoMKgZHJtTW9kZUZyZWVQcm9wZXJ0eUJsb2IoZWRp ZF9ibG9iKTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQKPiA+ICt0ZXN0X3N1c3BlbmRf cmVzdW1lX2hwZChkYXRhX3QgKmRhdGEsIHN0cnVjdCBjaGFtZWxpdW1fcG9ydCAqcG9ydCwKPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZW51bSBpZ3Rf c3VzcGVuZF9zdGF0ZSBzdGF0ZSwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgZW51bSBpZ3Rfc3VzcGVuZF90ZXN0IHRlc3QpCj4gPiArewo+ID4gK8Kg wqDCoMKgwqDCoMKgaW50IGRlbGF5ID0gNzsKPiAKPiBXb3VsZCBiZSBiZXR0ZXIgdG8gaGF2ZSB0 aGlzIGFuZCB0aGUgMTUgYmVsb3cgYXMgY29uc3RhbnRzIHNvIGl0J3MKPiBlYXNpZXIgdG8gc2Vl IHdoYXQga25vYnMgYXJlIHRoZXJlIGF0IGEgZ2xhbmNlPwo+IAo+ID4gK8KgwqDCoMKgwqDCoMKg aWd0X3NraXBfd2l0aG91dF9zdXNwZW5kX3N1cHBvcnQoc3RhdGUsIHRlc3QpOwo+ID4gK8KgwqDC oMKgwqDCoMKgcmVzZXRfc3RhdGUoZGF0YSwgcG9ydCk7Cj4gPiArwqDCoMKgwqDCoMKgwqBpZ3Rf d2F0Y2hfaG90cGx1ZygpOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgaWd0X3NldF9hdXRvcmVz dW1lX2RlbGF5KDE1KTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoC8qIE1ha2Ugc3VyZSB3ZSBu b3RpY2UgbmV3IGNvbm5lY3RvcnMgYWZ0ZXIgcmVzdW1pbmcgKi8KPiA+ICvCoMKgwqDCoMKgwqDC oGNoYW1lbGl1bV9hc3luY19ocGRfcHVsc2Vfc3RhcnQocG9ydC0+aWQsIGZhbHNlLCBkZWxheSk7 Cj4gPiArwqDCoMKgwqDCoMKgwqBpZ3Rfc3lzdGVtX3N1c3BlbmRfYXV0b3Jlc3VtZShzdGF0ZSwg dGVzdCk7Cj4gPiArwqDCoMKgwqDCoMKgwqBjaGFtZWxpdW1fYXN5bmNfaHBkX3B1bHNlX2Zpbmlz aCgpOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgaWd0X2Fzc2VydChpZ3RfaG90cGx1Z19kZXRl Y3RlZChIT1RQTFVHX1RJTUVPVVQpKTsKPiA+ICvCoMKgwqDCoMKgwqDCoGlndF9hc3NlcnQocmVw cm9iZV9jb25uZWN0b3IoZGF0YSwgcG9ydCkgPT0KPiA+IERSTV9NT0RFX0NPTk5FQ1RFRCk7Cj4g PiArCj4gPiArwqDCoMKgwqDCoMKgwqBpZ3RfZmx1c2hfaG90cGx1Z3MoKTsKPiA+ICsKPiA+ICvC oMKgwqDCoMKgwqDCoC8qIE5vdyBtYWtlIHN1cmUgd2Ugbm90aWNlIGRpc2Nvbm5lY3RlZCBjb25u ZWN0b3JzIGFmdGVyCj4gPiByZXN1bWluZyAqLwo+ID4gK8KgwqDCoMKgwqDCoMKgY2hhbWVsaXVt X2FzeW5jX2hwZF9wdWxzZV9zdGFydChwb3J0LT5pZCwgdHJ1ZSwgZGVsYXkpOwo+ID4gK8KgwqDC oMKgwqDCoMKgaWd0X3N5c3RlbV9zdXNwZW5kX2F1dG9yZXN1bWUoc3RhdGUsIHRlc3QpOwo+ID4g K8KgwqDCoMKgwqDCoMKgY2hhbWVsaXVtX2FzeW5jX2hwZF9wdWxzZV9maW5pc2goKTsKPiA+ICsK PiA+ICvCoMKgwqDCoMKgwqDCoGlndF9hc3NlcnQoaWd0X2hvdHBsdWdfZGV0ZWN0ZWQoSE9UUExV R19USU1FT1VUKSk7Cj4gPiArwqDCoMKgwqDCoMKgwqBpZ3RfYXNzZXJ0KHJlcHJvYmVfY29ubmVj dG9yKGRhdGEsIHBvcnQpID09Cj4gPiBEUk1fTU9ERV9ESVNDT05ORUNURUQpOwo+ID4gK30KPiA+ ICsKPiA+ICtzdGF0aWMgdm9pZAo+ID4gK3Rlc3Rfc3VzcGVuZF9yZXN1bWVfZWRpZF9jaGFuZ2Uo ZGF0YV90ICpkYXRhLCBzdHJ1Y3QKPiA+IGNoYW1lbGl1bV9wb3J0ICpwb3J0LAo+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg ZW51bSBpZ3Rfc3VzcGVuZF9zdGF0ZSBzdGF0ZSwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGVudW0gaWd0X3N1c3BlbmRf dGVzdCB0ZXN0LAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgaW50IGVkaWRfaWQsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpbnQgYWx0X2VkaWRf aWQpCj4gPiArewo+ID4gK8KgwqDCoMKgwqDCoMKgaWd0X3NraXBfd2l0aG91dF9zdXNwZW5kX3N1 cHBvcnQoc3RhdGUsIHRlc3QpOwo+IAo+IE1heWJlIGlndF9yZXF1aXJlX3N1c3BlbmQ/Cj4gCj4g PiArwqDCoMKgwqDCoMKgwqByZXNldF9zdGF0ZShkYXRhLCBwb3J0KTsKPiA+ICvCoMKgwqDCoMKg wqDCoGlndF93YXRjaF9ob3RwbHVnKCk7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqAvKiBGaXJz dCBwbHVnIGluIHRoZSBwb3J0ICovCj4gPiArwqDCoMKgwqDCoMKgwqBjaGFtZWxpdW1fcG9ydF9z ZXRfZWRpZChwb3J0LT5pZCwgZWRpZF9pZCk7Cj4gPiArwqDCoMKgwqDCoMKgwqBjaGFtZWxpdW1f cGx1Zyhwb3J0LT5pZCk7Cj4gPiArwqDCoMKgwqDCoMKgwqB3YWl0X2Zvcl9jb25uZWN0b3IoZGF0 YSwgcG9ydCwgRFJNX01PREVfQ09OTkVDVEVEKTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoGln dF9mbHVzaF9ob3RwbHVncygpOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgLyoKPiA+ICvCoMKg wqDCoMKgwqDCoMKgKiBDaGFuZ2UgdGhlIGVkaWQgYmVmb3JlIHdlIHN1c3BlbmQuIE9uIHJlc3Vt ZSwgdGhlCj4gPiBtYWNoaW5lIHNob3VsZAo+ID4gK8KgwqDCoMKgwqDCoMKgwqAqIG5vdGljZSB0 aGUgRURJRCBjaGFuZ2UgYW5kIGZpcmUgYSBob3RwbHVnIGV2ZW50Lgo+ID4gK8KgwqDCoMKgwqDC oMKgwqAqLwo+ID4gK8KgwqDCoMKgwqDCoMKgY2hhbWVsaXVtX3BvcnRfc2V0X2VkaWQocG9ydC0+ aWQsIGFsdF9lZGlkX2lkKTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoGlndF9zeXN0ZW1fc3Vz cGVuZF9hdXRvcmVzdW1lKHN0YXRlLCB0ZXN0KTsKPiA+ICvCoMKgwqDCoMKgwqDCoGlndF9hc3Nl cnQoaWd0X2hvdHBsdWdfZGV0ZWN0ZWQoSE9UUExVR19USU1FT1VUKSk7Cj4gPiArfQo+ID4gKwo+ ID4gK3N0YXRpYyB2b2lkCj4gPiArdGVzdF9kaXNwbGF5KGRhdGFfdCAqZGF0YSwgc3RydWN0IGNo YW1lbGl1bV9wb3J0ICpwb3J0KQo+ID4gK3sKPiA+ICvCoMKgwqDCoMKgwqDCoGlndF9kaXNwbGF5 X3QgZGlzcGxheTsKPiA+ICvCoMKgwqDCoMKgwqDCoGlndF9vdXRwdXRfdCAqb3V0cHV0Owo+ID4g K8KgwqDCoMKgwqDCoMKgaWd0X3BsYW5lX3QgKnByaW1hcnk7Cj4gPiArwqDCoMKgwqDCoMKgwqBz dHJ1Y3QgaWd0X2ZiIGZiOwo+ID4gK8KgwqDCoMKgwqDCoMKgZHJtTW9kZVJlcyAqcmVzOwo+ID4g K8KgwqDCoMKgwqDCoMKgZHJtTW9kZU1vZGVJbmZvICptb2RlOwo+ID4gK8KgwqDCoMKgwqDCoMKg ZHJtTW9kZUNvbm5lY3RvciAqY29ubmVjdG9yOwo+ID4gK8KgwqDCoMKgwqDCoMKgdWludDMyX3Qg Y3J0Y19pZDsKPiA+ICvCoMKgwqDCoMKgwqDCoGludCBmYl9pZDsKPiA+ICsKPiA+ICvCoMKgwqDC oMKgwqDCoHJlc2V0X3N0YXRlKGRhdGEsIHBvcnQpOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKg Y2hhbWVsaXVtX3BsdWcocG9ydC0+aWQpOwo+ID4gK8KgwqDCoMKgwqDCoMKgd2FpdF9mb3JfY29u bmVjdG9yKGRhdGEsIHBvcnQsIERSTV9NT0RFX0NPTk5FQ1RFRCk7Cj4gPiArwqDCoMKgwqDCoMKg wqBpZ3RfYXNzZXJ0KHJlcyA9IGRybU1vZGVHZXRSZXNvdXJjZXMoZGF0YS0+ZHJtX2ZkKSk7Cj4g PiArwqDCoMKgwqDCoMKgwqBrbXN0ZXN0X3Vuc2V0X2FsbF9jcnRjcyhkYXRhLT5kcm1fZmQsIHJl cyk7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBpZ3RfZGlzcGxheV9pbml0KCZkaXNwbGF5LCBk YXRhLT5kcm1fZmQpOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgLyogRmluZCB0aGUgb3V0cHV0 IHN0cnVjdCBmb3IgdGhpcyBjb25uZWN0b3IgKi8KPiA+ICvCoMKgwqDCoMKgwqDCoGZvcl9lYWNo X2Nvbm5lY3RlZF9vdXRwdXQoJmRpc3BsYXksIG91dHB1dCkgewo+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGlmIChvdXRwdXQtPmNvbmZpZy5jb25uZWN0b3ItPmNvbm5lY3Rvcl9p ZCA9PQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcG9ydC0+Y29u bmVjdG9yX2lkKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBicmVhazsKPiAKPiBBcmUgd2UgdGhhdCBzdXJlIHRoYXQgd2UnbGwgYWx3YXlzIGZpbmQg c3VjaCBhbiBvdXRwdXQ/IENvdWxkIGJlCj4gcXVpdGUKPiBkaXNjb25jZXJ0aW5nIGlmIHRoYXQg c3RvcHBlZCBiZWluZyB0cnVlLCBldmVuIGlmIGJ5IGEgYnVnLgpOb3Qgc3VyZSBJIGZvbGxvdyBo ZXJlOiB0aGF0J3Mgd2hhdCB0aGUgd2FpdF9mb3JfY29ubmVjdG9yKCkgY2FsbCBpcwp0aGVyZSBm b3IuIEknZCBleHBlY3QgdGhhdCB3ZSBjb3VsZCBtYWtlIHRoZSBhc3N1bXB0aW9uIHdlJ2xsIGZp bmQgYQpjb25uZWN0b3IgaWYgd2UndmUgbWFuYWdlZCB0byBtYWtlIGl0IHRoYXQgZmFyIHdpdGhv dXQgZmFpbGluZy4KCj4gCj4gPiArwqDCoMKgwqDCoMKgwqB9Cj4gPiArCj4gPiArwqDCoMKgwqDC oMKgwqBjb25uZWN0b3IgPSBkcm1Nb2RlR2V0Q29ubmVjdG9yQ3VycmVudChkYXRhLT5kcm1fZmQs Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwb3J0LT5jb25uZWN0b3Jf aWQpOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgLyogRmluZCBhIHNwYXJlIENSVEMgdG8gdXNl IGZvciB0aGUgZGlzcGxheSAqLwo+ID4gK8KgwqDCoMKgwqDCoMKgY3J0Y19pZCA9IGttc3Rlc3Rf ZmluZF9jcnRjX2Zvcl9jb25uZWN0b3IoZGF0YS0+ZHJtX2ZkLAo+ID4gcmVzLCBjb25uZWN0b3Is Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAwKTsKPiA+ICsK PiA+ICvCoMKgwqDCoMKgwqDCoC8qIFNldHVwIHRoZSBkaXNwbGF5ICovCj4gPiArwqDCoMKgwqDC oMKgwqBpZ3Rfb3V0cHV0X3NldF9waXBlKG91dHB1dCwKPiA+IGttc3Rlc3RfZ2V0X3BpcGVfZnJv bV9jcnRjX2lkKGRhdGEtPmRybV9mZCwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYwo+ID4gcnRjX2lk KSk7Cj4gPiArwqDCoMKgwqDCoMKgwqBtb2RlID0gaWd0X291dHB1dF9nZXRfbW9kZShvdXRwdXQp Owo+ID4gK8KgwqDCoMKgwqDCoMKgcHJpbWFyeSA9IGlndF9vdXRwdXRfZ2V0X3BsYW5lKG91dHB1 dCwgSUdUX1BMQU5FX1BSSU1BUlkpOwo+ID4gK8KgwqDCoMKgwqDCoMKgaWd0X2Fzc2VydChwcmlt YXJ5KTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoGZiX2lkID0gaWd0X2NyZWF0ZV9wYXR0ZXJu X2ZiKGRhdGEtPmRybV9mZCwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG1vZGUtPmhkaXNwbGF5LAo+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgbW9kZS0+dmRpc3BsYXksCj4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBEUk1fRk9STUFUX1hSR0I4ODg4LAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgTE9DQUxfRFJNX0ZP Uk1BVF9NT0RfTk9ORSwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCZmYik7Cj4gPiArwqDCoMKgwqDC oMKgwqBpZ3RfYXNzZXJ0KGZiX2lkID4gMCk7Cj4gPiArwqDCoMKgwqDCoMKgwqBpZ3RfcGxhbmVf c2V0X2ZiKHByaW1hcnksICZmYik7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBpZ3RfZGlzcGxh eV9jb21taXQoJmRpc3BsYXkpOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgaWd0X2Fzc2VydChj aGFtZWxpdW1fcG9ydF93YWl0X3ZpZGVvX2lucHV0X3N0YWJsZShwb3J0LT5pZCwKPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBIT1RQ TFVHX1QKPiA+IElNRU9VVCkpOwo+IAo+IElmIHdlIGhhdmUgYWxsIHRoaXMgYWxyZWFkeSwgd291 bGRuJ3QgbWFrZSBzZW5zZSB0byBhbHNvIHRlc3QgdGhhdAo+IHRoZQo+IENSQyBmdW5jdGlvbnMg d29yayBhcyBleHBlY3RlZD8KSSBkaWQgYWRkIHNvbWUgZGVidWdnaW5nIGNvZGUgaW4gd2hpbGUg d3JpdGluZyB0aG9zZSBmdW5jdGlvbnMgdG8gbWFrZQpzdXJlIGFsbCBvZiB0aGVtIHdvcmtlZCwg YnV0IEkgc3VwcG9zZSBpdCB3b3VsZCBiZSBhIGdvb2QgaWRlYSB0byBhZGQKc29tZSBhcyBhY3R1 YWwgdGVzdHMuCgpBbnl3YXksIEknbGwgZ2V0IHRvIHJlLXNwaW5uaW5nIGEgbmV3IHZlcnNpb24g b2YgdGhpcyBzZXJpZXMgd2l0aCBhbGwKb2YgdGhlc2UgY2hhbmdlcy4KCj4gCj4gPiArwqDCoMKg wqDCoMKgwqBkcm1Nb2RlRnJlZVJlc291cmNlcyhyZXMpOwo+ID4gK8KgwqDCoMKgwqDCoMKgZHJt TW9kZUZyZWVDb25uZWN0b3IoY29ubmVjdG9yKTsKPiA+ICvCoMKgwqDCoMKgwqDCoGlndF9kaXNw bGF5X2ZpbmkoJmRpc3BsYXkpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZAo+ID4gK3Rl c3RfaHBkX3dpdGhvdXRfZGRjKGRhdGFfdCAqZGF0YSwgc3RydWN0IGNoYW1lbGl1bV9wb3J0ICpw b3J0KQo+ID4gK3sKPiA+ICvCoMKgwqDCoMKgwqDCoHJlc2V0X3N0YXRlKGRhdGEsIHBvcnQpOwo+ ID4gK8KgwqDCoMKgwqDCoMKgaWd0X3dhdGNoX2hvdHBsdWcoKTsKPiA+ICsKPiA+ICvCoMKgwqDC oMKgwqDCoC8qIERpc2FibGUgdGhlIEREQyBvbiB0aGUgY29ubmVjdG9yIGFuZCBtYWtlIHN1cmUg d2Ugc3RpbGwKPiA+IGdldCBhCj4gPiArwqDCoMKgwqDCoMKgwqDCoCogaG90cGx1Zwo+ID4gK8Kg wqDCoMKgwqDCoMKgwqAqLwo+ID4gK8KgwqDCoMKgwqDCoMKgY2hhbWVsaXVtX3BvcnRfc2V0X2Rk Y19zdGF0ZShwb3J0LT5pZCwgZmFsc2UpOwo+ID4gK8KgwqDCoMKgwqDCoMKgY2hhbWVsaXVtX3Bs dWcocG9ydC0+aWQpOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgaWd0X2Fzc2VydChpZ3RfaG90 cGx1Z19kZXRlY3RlZChIT1RQTFVHX1RJTUVPVVQpKTsKPiA+ICvCoMKgwqDCoMKgwqDCoGlndF9h c3NlcnQocmVwcm9iZV9jb25uZWN0b3IoZGF0YSwgcG9ydCkgPT0KPiA+IERSTV9NT0RFX0NPTk5F Q1RFRCk7Cj4gPiArfQo+ID4gKwo+ID4gKyNkZWZpbmUgZm9yX2VhY2hfcG9ydChwLCBwb3J0KcKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoFwKPiA+ICvCoMKgwqDCoMKgwqDCoGZv ciAocCA9IDAsIHBvcnQgPSAmY2hhbWVsaXVtX3BvcnRzW3BdOyBcCj4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgcCA8IGNoYW1lbGl1bV9wb3J0X2NvdW50O8KgwqDCoMKgwqDCoMKgwqDCoMKg XAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHArKywgcG9ydCA9ICZjaGFtZWxpdW1fcG9y dHNbcF0pwqDCoMKgXAo+ID4gKwo+ID4gKyNkZWZpbmUgY29ubmVjdG9yX3N1YnRlc3QobmFtZV9f LCB0eXBlX18pIFwKPiA+ICvCoMKgwqDCoMKgwqDCoGlndF9zdWJ0ZXN0KG5hbWVfXynCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBcCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgZm9yX2VhY2hfcG9ydChwLCBwb3J0KcKgwqDCoMKgXAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAocG9ydC0+dHlwZSA9PSBEUk1fTU9ERV9D T05ORUNUT1JfICMjCj4gPiB0eXBlX18pCj4gPiArCj4gPiArI2RlZmluZSBkZWZpbmVfY29tbW9u X2Nvbm5lY3Rvcl90ZXN0cyh0eXBlX3N0cl9fLAo+ID4gdHlwZV9fKcKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoFwKPiA+ICvCoMKgwqDCoMKgwqDCoGNvbm5lY3Rvcl9z dWJ0ZXN0KHR5cGVfc3RyX18gIi1ocGQiLAo+ID4gdHlwZV9fKcKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBcCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgdGVzdF9iYXNpY19ob3RwbHVnKCZkYXRhLAo+ID4gcG9ydCk7wqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgXAo+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoAo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgXAo+ID4gK8Kg wqDCoMKgwqDCoMKgY29ubmVjdG9yX3N1YnRlc3QodHlwZV9zdHJfXyAiLWVkaWQtcmVhZCIsIHR5 cGVfXykKPiA+IHvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBcCj4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdGVzdF9lZGlkX3JlYWQoJmRhdGEsIHBvcnQsCj4g PiBlZGlkX2lkLMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBcCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgaWd0X2ttc19nZXRfYmFzZV9lZGlkKCkpO8KgwqDCoMKgwqDCoMKgwqDC oMKgwqAKPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBcCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgdGVzdF9lZGlkX3JlYWQoJmRhdGEsIHBvcnQsCj4gPiBhbHRfZWRpZF9pZCzC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoFwKPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZ3Rf a21zX2dldF9hbHRfZWRpZCgpKTvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAKPiA+IMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBcCj4gPiArwqDCoMKgwqDCoMKgwqB9wqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAKPiA+IMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBcCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBcCj4gPiArwqDCoMKgwqDCoMKgwqBjb25uZWN0b3Jfc3VidGVzdCh0eXBlX3N0cl9fICIt aHBkLWFmdGVyLXN1c3BlbmQiLAo+ID4gdHlwZV9fKcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoFwK PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB0ZXN0X3N1c3BlbmRfcmVzdW1lX2hw ZCgmZGF0YSwKPiA+IHBvcnQswqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoFwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBTVVNQRU5EX1NUQVRFX01F TSzCoMKgwqDCoMKgwqDCoMKgwqAKPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBcCj4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgU1VTUEVORF9URVNUX05PTkUpO8KgwqDCoMKgwqDCoMKgwqAKPiA+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBcCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgCj4gPiDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBcCj4gPiArwqDCoMKgwqDCoMKgwqBjb25uZWN0b3Jfc3VidGVz dCh0eXBlX3N0cl9fICItaHBkLWFmdGVyLWhpYmVybmF0ZSIsCj4gPiB0eXBlX18pwqDCoMKgwqDC oMKgwqDCoMKgwqBcCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdGVzdF9zdXNw ZW5kX3Jlc3VtZV9ocGQoJmRhdGEsCj4gPiBwb3J0LMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBcCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgU1VT UEVORF9TVEFURV9ESVNLLMKgwqDCoMKgwqDCoMKgwqAKPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBcCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgU1VTUEVORF9URVNUX0RFVklDRVMpO8KgwqDC oMKgwqAKPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBcCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg Cj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBcCj4gPiArwqDCoMKgwqDCoMKgwqBjb25uZWN0 b3Jfc3VidGVzdCh0eXBlX3N0cl9fICItZWRpZC1jaGFuZ2UtZHVyaW5nLXN1c3BlbmQiLCAKPiA+ IHR5cGVfXynCoMKgwqBcCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdGVzdF9z dXNwZW5kX3Jlc3VtZV9lZGlkX2NoYW5nZSgmZGF0YSwKPiA+IHBvcnQswqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgXAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBTVVNQRU5EX1NUQVRFX01FTSzCoAo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoFwK PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgU1VTUEVORF9URVNUX05P TkUswqAKPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBcCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoGVkaWRfaWQsCj4gPiBhbHRfZWRpZF9pZCk7wqDCoMKgwqDCoMKg wqDCoFwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAKPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oFwKPiA+ICvCoMKgwqDCoMKgwqDCoGNvbm5lY3Rvcl9zdWJ0ZXN0KHR5cGVfc3RyX18gIi1lZGlk LWNoYW5nZS1kdXJpbmctCj4gPiBoaWJlcm5hdGUiLCB0eXBlX18pIFwKPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqB0ZXN0X3N1c3BlbmRfcmVzdW1lX2VkaWRfY2hhbmdlKCZkYXRh LAo+ID4gcG9ydCzCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBcCj4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoFNVU1BFTkRfU1RBVEVfRElTSywKPiA+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBcCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoFNVU1BFTkRfVEVTVF9ERVZJQ0UKPiA+IFMswqDCoMKgwqDCoMKgwqDCoMKgXAo+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBlZGlkX2lkLAo+ID4gYWx0 X2VkaWRfaWQpO8KgwqDCoMKgwqDCoMKgwqBcCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgCj4gPiDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBcCj4gPiArwqDCoMKgwqDCoMKgwqBjb25uZWN0b3Jfc3Vi dGVzdCh0eXBlX3N0cl9fICItZGlzcGxheSIsCj4gPiB0eXBlX18pwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBcCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgdGVzdF9kaXNwbGF5KCZkYXRhLCBwb3J0KTsKPiAKPiBOb3Qgc3VyZSBhYm91dCB0aGUg b3RoZXJzLCBidXQgSSB0aGluayBJIHdvdWxkIHByZWZlciBpZiB0aGlzIHdhcyBDCj4gY29kZS4K PiAKPiA+ICtzdGF0aWMgZGF0YV90IGRhdGE7Cj4gPiArCj4gPiAraWd0X21haW4KPiA+ICt7Cj4g PiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgY2hhbWVsaXVtX3BvcnQgKnBvcnQ7Cj4gPiArwqDCoMKg wqDCoMKgwqBpbnQgZWRpZF9pZCwgYWx0X2VkaWRfaWQsIHA7Cj4gPiArCj4gPiArwqDCoMKgwqDC oMKgwqBpZ3RfZml4dHVyZSB7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWd0 X3NraXBfb25fc2ltdWxhdGlvbigpOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGRhdGEuZHJtX2ZkID0gZHJtX29wZW5fZHJpdmVyX21hc3RlcihEUklWRVJfQU5ZKTsK PiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjaGFtZWxpdW1faW5pdChk YXRhLmRybV9mZCk7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZWRp ZF9pZCA9Cj4gPiBjaGFtZWxpdW1fbmV3X2VkaWQoaWd0X2ttc19nZXRfYmFzZV9lZGlkKCkpOwo+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGFsdF9lZGlkX2lkID0KPiA+IGNoYW1l bGl1bV9uZXdfZWRpZChpZ3Rfa21zX2dldF9hbHRfZWRpZCgpKTsKPiA+ICsKPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKiBTbyBmYmNvbiBkb2Vzbid0IHRyeSB0byByZXByb2Jl IHRoaW5ncyBpdHNlbGYgKi8KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBrbXN0 ZXN0X3NldF92dF9ncmFwaGljc19tb2RlKCk7Cj4gPiArwqDCoMKgwqDCoMKgwqB9Cj4gPiArCj4g PiArwqDCoMKgwqDCoMKgwqBpZ3Rfc3VidGVzdF9ncm91cCB7Cj4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgaWd0X2ZpeHR1cmUgewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXF1aXJlX2Nvbm5lY3Rvcl9wcmVzZW50KAo+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCZkYXRh LCBEUk1fTU9ERV9DT05ORUNUT1JfRGlzcGxheVBvcnQpOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoH0KPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBk ZWZpbmVfY29tbW9uX2Nvbm5lY3Rvcl90ZXN0cygiZHAiLCBEaXNwbGF5UG9ydCk7Cj4gPiArwqDC oMKgwqDCoMKgwqB9Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBpZ3Rfc3VidGVzdF9ncm91cCB7 Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWd0X2ZpeHR1cmUgewo+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXF1aXJlX2Nvbm5l Y3Rvcl9wcmVzZW50KAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCZkYXRhLCBEUk1fTU9ERV9DT05ORUNUT1JfSERNSUEpOwo+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBkZWZpbmVfY29tbW9uX2Nvbm5lY3Rvcl90ZXN0cygiaGRtaSIsIEhETUlB KTsKPiA+ICvCoMKgwqDCoMKgwqDCoH0KPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoGlndF9zdWJ0 ZXN0X2dyb3VwIHsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZ3RfZml4dHVy ZSB7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJl cXVpcmVfY29ubmVjdG9yX3ByZXNlbnQoCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgJmRhdGEsIERSTV9NT0RFX0NPTk5FQ1RPUl9WR0Ep Owo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPiA+ICsKPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjb25uZWN0b3Jfc3VidGVzdCgidmdhLWhwZCIsIFZHQSkK PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdGVzdF9i YXNpY19ob3RwbHVnKCZkYXRhLCBwb3J0KTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBjb25uZWN0b3Jfc3VidGVzdCgidmdhLWVkaWQtcmVhZCIsIFZHQSkgewo+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB0ZXN0X2VkaWRf cmVhZCgmZGF0YSwgcG9ydCwgZWRpZF9pZCwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWd0X2tt c19nZXRfYmFzZV9lZGlkKCkpOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqB0ZXN0X2VkaWRfcmVhZCgmZGF0YSwgcG9ydCwgYWx0X2VkaWRfaWQsCj4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlndF9rbXNfZ2V0X2FsdF9lZGlkKCkpOwo+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAvKiBGSVhNRTogUmlnaHQgbm93IHRoZXJlIGlzbid0IGEgd2F5IHRvIGRvIGFu eQo+ID4gc29ydCBvZiBkZWxheWVkCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAqIHBzdWVkby1ob3RwbHVnIHdpdGggVkdBLCBzbyB0ZXN0aW5nIGRldGVjdGlvbgo+ID4gYWZ0 ZXIgYQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgKiBzdXNwZW5kL3Jlc3Vt ZSBjeWNsZSBpc24ndCBwb3NzaWJsZSB5ZXQKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCovCj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY29ubmVj dG9yX3N1YnRlc3QoInZnYS1ocGQtd2l0aG91dC1kZGMiLCBWR0EpCj4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHRlc3RfaHBkX3dpdGhvdXRfZGRjKCZk YXRhLCBwb3J0KTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjb25u ZWN0b3Jfc3VidGVzdCgidmdhLWRpc3BsYXkiLCBWR0EpCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHRlc3RfZGlzcGxheSgmZGF0YSwgcG9ydCk7Cj4g PiArwqDCoMKgwqDCoMKgwqB9Cj4gPiArfQo+ID4gLS0KPiA+IDIuOS4zCj4gPiAKLS0gCkNoZWVy cywKCUx5dWRlCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f CkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpo dHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=