From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id C17841A1E10 for ; Mon, 17 Oct 2016 18:55:36 -0700 (PDT) Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by fmsmga105.fm.intel.com with ESMTP; 17 Oct 2016 18:55:36 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.31,359,1473145200"; d="scan'208";a="773841120" Received: from fmsmsx103.amr.corp.intel.com ([10.18.124.201]) by FMSMGA003.fm.intel.com with ESMTP; 17 Oct 2016 18:55:33 -0700 Received: from fmsmsx121.amr.corp.intel.com (10.18.125.36) by FMSMSX103.amr.corp.intel.com (10.18.124.201) with Microsoft SMTP Server (TLS) id 14.3.248.2; Mon, 17 Oct 2016 18:55:33 -0700 Received: from shsmsx151.ccr.corp.intel.com (10.239.6.50) by fmsmsx121.amr.corp.intel.com (10.18.125.36) with Microsoft SMTP Server (TLS) id 14.3.248.2; Mon, 17 Oct 2016 18:55:32 -0700 Received: from shsmsx104.ccr.corp.intel.com ([169.254.5.209]) by SHSMSX151.ccr.corp.intel.com ([169.254.3.96]) with mapi id 14.03.0248.002; Tue, 18 Oct 2016 09:55:26 +0800 From: "Ni, Ruiyu" To: Tim Lewis , Vladimir Olovyannikov , "Carsey, Jaben" , "edk2-devel@lists.01.org" Thread-Topic: [PATCH] GPT Shell Application/Library Thread-Index: AQHSJ22qh7QnFOzSAkuolXdskSURPaCtc0+g//97GgCAAIeUIA== Date: Tue, 18 Oct 2016 01:55:26 +0000 Message-ID: <734D49CCEBEEF84792F5B80ED585239D58E36F85@SHSMSX104.ccr.corp.intel.com> References: <1476595420-12566-1-git-send-email-vladimir.olovyannikov@broadcom.com> <734D49CCEBEEF84792F5B80ED585239D58E36F4F@SHSMSX104.ccr.corp.intel.com> <7236196A5DF6C040855A6D96F556A53F3F80DD@msmail.insydesw.com.tw> In-Reply-To: <7236196A5DF6C040855A6D96F556A53F3F80DD@msmail.insydesw.com.tw> Accept-Language: en-US, zh-CN X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Subject: Re: [PATCH] GPT Shell Application/Library X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 18 Oct 2016 01:55:37 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 T3Igd2UgY291bGQgaGF2ZSBhIGNvbW1vbiB3cmFwcGVyIG1vZHVsZSwgdGhhdCBsaW5rcyB0byBk aWZmZXJlbnQgbGlicmFyeSB0byBwcm92aWRlIGRpZmZlcmVudCA8Y29tbWFuZD4uZWZpLg0KVGhp cyB3aWxsIHJlcXVpcmUgdGhlIG5hbWUgb2YgdGhlIHdyYXBwZXIgbW9kdWxlIGlzIGN1c3RvbWl6 YWJsZS4gSGF2ZW4ndCB0cmllZCBvbiB0aGF0LCBzZWVtcyBkb2FibGUuDQoNClRoYW5rcy9SYXkN Cg0KPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBUaW0gTGV3aXMgW21haWx0 bzp0aW0ubGV3aXNAaW5zeWRlLmNvbV0NCj4gU2VudDogVHVlc2RheSwgT2N0b2JlciAxOCwgMjAx NiA5OjQ4IEFNDQo+IFRvOiBOaSwgUnVpeXUgPHJ1aXl1Lm5pQGludGVsLmNvbT47IFZsYWRpbWly IE9sb3Z5YW5uaWtvdg0KPiA8dmxhZGltaXIub2xvdnlhbm5pa292QGJyb2FkY29tLmNvbT47IENh cnNleSwgSmFiZW4NCj4gPGphYmVuLmNhcnNleUBpbnRlbC5jb20+OyBlZGsyLWRldmVsQGxpc3Rz LjAxLm9yZw0KPiBTdWJqZWN0OiBSRTogW1BBVENIXSBHUFQgU2hlbGwgQXBwbGljYXRpb24vTGli cmFyeQ0KPiANCj4gV2Ugd291bGQgcHJlZmVyIHRoYXQgdGhpcyB0b29sIGJlIGV4dGVybmFsLiAg VGltDQo+IA0KPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBlZGsyLWRldmVs IFttYWlsdG86ZWRrMi1kZXZlbC1ib3VuY2VzQGxpc3RzLjAxLm9yZ10gT24gQmVoYWxmIE9mIE5p LA0KPiBSdWl5dQ0KPiBTZW50OiBNb25kYXksIE9jdG9iZXIgMTcsIDIwMTYgNjo0NiBQTQ0KPiBU bzogVmxhZGltaXIgT2xvdnlhbm5pa292IDx2bGFkaW1pci5vbG92eWFubmlrb3ZAYnJvYWRjb20u Y29tPjsgQ2Fyc2V5LA0KPiBKYWJlbiA8amFiZW4uY2Fyc2V5QGludGVsLmNvbT47IGVkazItZGV2 ZWxAbGlzdHMuMDEub3JnDQo+IFN1YmplY3Q6IFJlOiBbZWRrMl0gW1BBVENIXSBHUFQgU2hlbGwg QXBwbGljYXRpb24vTGlicmFyeQ0KPiANCj4gSmFiZW4sDQo+IERvIHlvdSB0aGluayB0aGF0IHBy b3ZpZGluZyBhIHN0YW5kYWxvbmUgZ3B0LmVmaSBpcyBiZXR0ZXI/IFNvIHRoYXQgU2hlbGwuZWZp DQo+IG9ubHkgcHJvdmlkZXMgdGhlIGludGVybmFsIGNvbW1hbmRzIGxpc3RlZCBpbiBTaGVsbCBz cGVjLg0KPiANCj4gVGhhbmtzL1JheQ0KPiANCj4gPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0t LQ0KPiA+IEZyb206IFZsYWRpbWlyIE9sb3Z5YW5uaWtvdg0KPiBbbWFpbHRvOnZsYWRpbWlyLm9s b3Z5YW5uaWtvdkBicm9hZGNvbS5jb21dDQo+ID4gU2VudDogU3VuZGF5LCBPY3RvYmVyIDE2LCAy MDE2IDE6MjQgUE0NCj4gPiBUbzogQ2Fyc2V5LCBKYWJlbiA8amFiZW4uY2Fyc2V5QGludGVsLmNv bT47IGVkazItZGV2ZWxAbGlzdHMuMDEub3JnOyBOaSwNCj4gPiBSdWl5dSA8cnVpeXUubmlAaW50 ZWwuY29tPg0KPiA+IENjOiBWbGFkaW1pciBPbG92eWFubmlrb3YgPHZsYWRpbWlyLm9sb3Z5YW5u aWtvdkBicm9hZGNvbS5jb20+DQo+ID4gU3ViamVjdDogW1BBVENIXSBHUFQgU2hlbGwgQXBwbGlj YXRpb24vTGlicmFyeQ0KPiA+DQo+ID4gVGhpcyBhbGxvd3MgbWFuYWdpbmcgKGNyZWF0ZSwgZGVs ZXRlLCBtb2RpZnksIGZhdCBmb3JtYXQpIG9mIEdQVA0KPiA+IHBhcnRpdGlvbnMgZnJvbSB3aXRo aW4gVUVGSSBTaGVsbC4NCj4gPiBTeW50YXg6DQo+ID4gZ3B0IDxjb21tYW5kPiBbZGV2aWNlX21h cHBlZF9uYW1lXSBbcGFyYW1ldGVycy4uLl0NCj4gPiBTZWUgdXNhZ2UgZXhhbXBsZXMgaW4gdGhl IC51bmkgZmlsZQ0KPiA+IC0tLQ0KPiA+ICAuLi4vTGlicmFyeS9VZWZpU2hlbGxHcHRDb21tYW5k TGliL0ZhdEZvcm1hdC5jICAgICB8ICA2MTEgKysrKysrKw0KPiA+ICAuLi4vTGlicmFyeS9VZWZp U2hlbGxHcHRDb21tYW5kTGliL0ZhdEZvcm1hdC5oICAgICB8ICAxMTEgKysNCj4gPiAgLi4uL0xp YnJhcnkvVWVmaVNoZWxsR3B0Q29tbWFuZExpYi9HcHRXb3JrZXIuYyAgICAgfCAxOTAyDQo+ID4g KysrKysrKysrKysrKysrKysrKysNCj4gPiAgLi4uL0xpYnJhcnkvVWVmaVNoZWxsR3B0Q29tbWFu ZExpYi9HcHRXb3JrZXIuaCAgICAgfCAgMTg2ICsrDQo+ID4gIC4uLi9VZWZpU2hlbGxHcHRDb21t YW5kTGliLmMgICAgICAgICAgICAgICAgICAgICAgIHwgMTEzNSArKysrKysrKysrKysNCj4gPiAg Li4uL1VlZmlTaGVsbEdwdENvbW1hbmRMaWIuaW5mICAgICAgICAgICAgICAgICAgICAgfCAgIDc5 ICsNCj4gPiAgLi4uL1VlZmlTaGVsbEdwdENvbW1hbmRMaWIudW5pICAgICAgICAgICAgICAgICAg ICAgfCAgMTE3ICsrDQo+ID4gIFNoZWxsUGtnL1NoZWxsUGtnLmRlYyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHwgICAgMSArDQo+ID4gIFNoZWxsUGtnL1NoZWxsUGtnLmRzYyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHwgICAgNCArDQo+ID4gIDkgZmlsZXMgY2hhbmdlZCwgNDE0 NiBpbnNlcnRpb25zKCspDQo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NA0KPiBTaGVsbFBrZy9MaWJy YXJ5L1VlZmlTaGVsbEdwdENvbW1hbmRMaWIvRmF0Rm9ybWF0LmMNCj4gPiAgY3JlYXRlIG1vZGUg MTAwNjQ0DQo+ID4gU2hlbGxQa2cvTGlicmFyeS9VZWZpU2hlbGxHcHRDb21tYW5kTGliL0ZhdEZv cm1hdC5oDQo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NA0KPiA+IFNoZWxsUGtnL0xpYnJhcnkvVWVm aVNoZWxsR3B0Q29tbWFuZExpYi9HcHRXb3JrZXIuYw0KPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQN Cj4gPiBTaGVsbFBrZy9MaWJyYXJ5L1VlZmlTaGVsbEdwdENvbW1hbmRMaWIvR3B0V29ya2VyLmgN Cj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0DQo+ID4gU2hlbGxQa2cvTGlicmFyeS9VZWZpU2hlbGxH cHRDb21tYW5kTGliL1VlZmlTaGVsbEdwdENvbW1hbmRMaWIuYw0KPiA+ICBjcmVhdGUgbW9kZSAx MDA2NDQNCj4gPiBTaGVsbFBrZy9MaWJyYXJ5L1VlZmlTaGVsbEdwdENvbW1hbmRMaWIvVWVmaVNo ZWxsR3B0Q29tbWFuZExpYi5pbmYNCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0DQo+ID4gU2hlbGxQ a2cvTGlicmFyeS9VZWZpU2hlbGxHcHRDb21tYW5kTGliL1VlZmlTaGVsbEdwdENvbW1hbmRMaWIu dW5pDQo+ID4NCj4gPiBkaWZmIC0tZ2l0IGEvU2hlbGxQa2cvTGlicmFyeS9VZWZpU2hlbGxHcHRD b21tYW5kTGliL0ZhdEZvcm1hdC5jDQo+ID4gYi9TaGVsbFBrZy9MaWJyYXJ5L1VlZmlTaGVsbEdw dENvbW1hbmRMaWIvRmF0Rm9ybWF0LmMNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGlu ZGV4IDAwMDAwMDAwMDAwMC4uYmE3OTA0ZTZiZTI4DQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsr KyBiL1NoZWxsUGtnL0xpYnJhcnkvVWVmaVNoZWxsR3B0Q29tbWFuZExpYi9GYXRGb3JtYXQuYw0K PiA+IEBAIC0wLDAgKzEsNjExIEBADQo+ID4gKy8qKiBAZmlsZQ0KPiA+ICsNCj4gPiArICBDb3B5 cmlnaHQgKGMpIDIwMDMgLSAyMDEyLCBSb2IgUmlnbGFyLCBVbHRyYS1FbWJlZGRlZC5jb20uIEFs bCByaWdodHMNCj4gPiByZXNlcnZlZDxCUj4NCj4gPiArDQo+ID4gKyAgVGhpcyBwcm9ncmFtIGFu ZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KPiA+ICsgIGFyZSBsaWNlbnNlZCBhbmQgbWFk ZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZQ0KPiBCU0QN Cj4gPiBMaWNlbnNlDQo+ID4gKyAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24u ICBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIG1heSBiZQ0KPiA+IGZvdW5kIGF0DQo+ID4g KyAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocA0KPiA+ICsN Cj4gPiArICBUSEUgUFJPR1JBTSBJUyBESVNUUklCVVRFRCBVTkRFUiBUSEUgQlNEIExJQ0VOU0Ug T04gQU4gIkFTIElTIg0KPiA+IEJBU0lTLA0KPiA+ICsgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBS RVBSRVNFTlRBVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUg0KPiA+IEVYUFJFU1MgT1IgSU1QTElF RC4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ICsNCj4gPiArLyogUG9ydGlvbnMgQ29weXJpZ2h0IChj KSAyMDE2LCBCcm9hZGNvbS4gQWxsIHJpZ2h0cyByZXNlcnZlZCAqLw0KPiA+ICsNCj4gPiArI2lu Y2x1ZGUgIkZhdEZvcm1hdC5oIg0KPiA+ICsNCj4gPiArLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0K PiA+ICsvLyBUYWJsZXMNCj4gPiArLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPiA+ICt0eXBlZGVm IHN0cnVjdA0KPiA+ICt7DQo+ID4gKyAgVUlOVDY0ICBTZWN0b3JzOw0KPiA+ICsgIFVJTlQ4ICAg U2VjdG9yc1BlckNsdXN0ZXI7DQo+ID4gK30gU2VjdG9yc1BlckNsdXN0ZXJUYWJsZTsNCj4gPiAr DQo+ID4gK1NUQVRJQyBTZWN0b3JzUGVyQ2x1c3RlclRhYmxlIENsdXN0ZXJTaXplVGFibGUxNltd ID0NCj4gPiArew0KPiA+ICsgIHsgMzI2ODAsIDIgfSwgICAgIC8vIDE2TUIgLSAxSw0KPiA+ICsg IHsgMjYyMTQ0LCA0IH0sICAgIC8vIDEyOE1CIC0gMksNCj4gPiArICB7IDUyNDI4OCwgOCB9LCAg ICAvLyAyNTZNQiAtIDRLDQo+ID4gKyAgeyAxMDQ4NTc2LCAxNiB9LCAgLy8gNTEyTUIgLSA4Sw0K PiA+ICsgIHsgMjA5NzE1MiwgMzIgfSwgIC8vIDFHQiAtIDE2Sw0KPiA+ICsgIHsgNDE5NDMwNCwg NjQgfSwgIC8vIDJHQiAtIDMySw0KPiA+ICsgIHsgODM4ODYwOCwgMTI4IH0sIC8vIDJHQiAtIDY0 SyBbV2FybmluZyBvbmx5IHN1cHBvcnRlZCBieSBXaW5kb3dzIFhQDQo+ID4gb253YXJkc10NCj4g PiArICB7IDAsIDAgfSAgICAgICAgICAvLyBJbnZhbGlkDQo+ID4gK307DQo+ID4gKw0KPiA+ICtT VEFUSUMgU2VjdG9yc1BlckNsdXN0ZXJUYWJsZSBDbHVzdGVyU2l6ZVRhYmxlMzJbXSA9DQo+ID4g K3sNCj4gPiArICB7IDUzMjQ4MCwgMSB9LCAgICAgIC8vIDI2ME1CIC0gNTEyYg0KPiA+ICsgIHsg MTY3NzcyMTYsIDggfSwgICAgLy8gOEdCIC0gNEsNCj4gPiArICB7IDMzNTU0NDMyLCAxNiB9LCAg IC8vIDE2R0IgLSA4Sw0KPiA+ICsgIHsgNjcxMDg4NjQsIDMyIH0sICAgLy8gMzJHQiAtIDE2Sw0K PiA+ICsgIHsgMHhGRkZGRkZGRiwgNjQgfSwgLy8gPjMyR0IgLSAzMksNCj4gPiArICB7IDAsIDAg fSAgICAgICAgICAgIC8vIEludmFsaWQNCj4gPiArfTsNCj4gPiArDQo+ID4gK1NUQVRJQw0KPiA+ ICtFRklfTEJBIExiYU9mQ2x1c3RlciAoDQo+ID4gKyAgSU4gRkFURlMgKkZzLA0KPiA+ICsgIElO IFVJTlQ2NCBDbHVzdGVyTnVtYmVyDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgaWYgKEZzLT5G YXRUeXBlID09IEZBVF9UWVBFXzE2KQ0KPiA+ICsgICAgcmV0dXJuIChGcy0+Q2x1c3RlckJlZ2lu TGJhICsNCj4gPiArICAgICAgKEZzLT5Sb290RW50cnlDb3VudCAqIDMyIC8gRkFUX1NFQ1RPUl9T SVpFKSArDQo+ID4gKyAgICAgICgoQ2x1c3Rlck51bWJlciAtIDIpICogRnMtPlNlY3RvcnNQZXJD bHVzdGVyKSk7DQo+ID4gKyAgZWxzZQ0KPiA+ICsgICAgcmV0dXJuICgoRnMtPkNsdXN0ZXJCZWdp bkxiYSArDQo+ID4gKyAgICAgICgoQ2x1c3Rlck51bWJlciAtIDIpICogRnMtPlNlY3RvcnNQZXJD bHVzdGVyKSkpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQo+ ID4gKy8vIGZhdGZzX2NhbGNfY2x1c3Rlcl9zaXplOiBDYWxjdWxhdGUgd2hhdCBjbHVzdGVyIHNp emUgc2hvdWxkIGJlIHVzZWQNCj4gPiArLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPiA+ICtTVEFU SUMNCj4gPiArVUlOVDggQ2FsY0NsdXN0ZXJTaXplICgNCj4gPiArICBJTiBVSU5UTiBTZWN0b3Jz LA0KPiA+ICsgIElOIEJPT0xFQU4gSXNGYXQzMikNCj4gPiArew0KPiA+ICsgIFVJTlROIEluZGV4 Ow0KPiA+ICsNCj4gPiArICBpZiAoIUlzRmF0MzIpIHsNCj4gPiArICAgIGZvciAoSW5kZXggPSAw OyBDbHVzdGVyU2l6ZVRhYmxlMTZbSW5kZXhdLlNlY3RvcnNQZXJDbHVzdGVyICE9IDA7DQo+IElu ZGV4KyspDQo+ID4gKyAgICAgIGlmIChTZWN0b3JzIDw9IENsdXN0ZXJTaXplVGFibGUxNltJbmRl eF0uU2VjdG9ycykNCj4gPiArICAgICAgICByZXR1cm4gQ2x1c3RlclNpemVUYWJsZTE2W0luZGV4 XS5TZWN0b3JzUGVyQ2x1c3RlcjsNCj4gPiArICB9IGVsc2Ugew0KPiA+ICsgICAgZm9yIChJbmRl eCA9IDA7IENsdXN0ZXJTaXplVGFibGUzMltJbmRleF0uU2VjdG9yc1BlckNsdXN0ZXIgIT0gMDsN Cj4gSW5kZXgrKykNCj4gPiArICAgICAgaWYgKFNlY3RvcnMgPD0gQ2x1c3RlclNpemVUYWJsZTMy W0luZGV4XS5TZWN0b3JzKQ0KPiA+ICsgICAgICAgIHJldHVybiBDbHVzdGVyU2l6ZVRhYmxlMzJb SW5kZXhdLlNlY3RvcnNQZXJDbHVzdGVyOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgcmV0dXJu IDA7DQo+ID4gK30NCj4gPiArLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPiA+ICsvLyBmYXRmc19l cmFzZV9zZWN0b3JzOiBFcmFzZSBhIG51bWJlciBvZiBzZWN0b3JzDQo+ID4gKy8vLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0NCj4gPiArU1RBVElDDQo+ID4gK0VGSV9TVEFUVVMNCj4gPiArRXJhc2VTZWN0 b3JzICgNCj4gPiArICBJTiBGQVRGUyAqRnMsDQo+ID4gKyAgSU4gRUZJX0xCQSBMYmEsDQo+ID4g KyAgSU4gVUlOVE4gQ291bnQNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBVSU5UTiBJbmRleDsN Cj4gPiArICBFRklfU1RBVFVTIFN0YXR1czsNCj4gPiArDQo+ID4gKyAgLy8gWmVybyBTZWN0b3Ig Zmlyc3QNCj4gPiArICBaZXJvTWVtIChGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3IsIEZBVF9TRUNU T1JfU0laRSk7DQo+ID4gKw0KPiA+ICsgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IENvdW50OyBJ bmRleCsrKQ0KPiA+ICsgICAgU3RhdHVzID0gRnMtPkRpc2tJby0+V3JpdGVEaXNrICgNCj4gPiAr ICAgICAgRnMtPkRpc2tJbywgRnMtPkJsb2NrSW8tPk1lZGlhLT5NZWRpYUlkLA0KPiA+ICsgICAg ICBNdWx0VTY0eDMyIChGcy0+U3RhcnRpbmdMQkEsIEZzLT5CbG9ja0lvLT5NZWRpYS0+QmxvY2tT aXplKSArDQo+ID4gKyAgICAgIE11bHRVNjR4MzIgKChMYmEgKyBJbmRleCksIEZBVF9TRUNUT1Jf U0laRSksDQo+ID4gKyAgICAgIEZBVF9TRUNUT1JfU0laRSwgRnMtPkN1cnJlbnRTZWN0b3IuU2Vj dG9yKTsNCj4gPiArDQo+ID4gKyAgcmV0dXJuIFN0YXR1czsNCj4gPiArfQ0KPiA+ICsvLy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tDQo+ID4gKy8vIGZhdGZzX2NyZWF0ZV9ib290X3NlY3RvcjogQ3JlYXRl IHRoZSBib290IFNlY3Rvcg0KPiA+ICsvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQo+ID4gK1NUQVRJ Qw0KPiA+ICtFRklfU1RBVFVTDQo+ID4gK0NyZWF0ZUJvb3RTZWN0b3IgKA0KPiA+ICsgIElOIEZB VEZTICpGcywNCj4gPiArICBJTiBFRklfTEJBIEJvb3RTZWN0b3JMYmEsDQo+ID4gKyAgSU4gVUlO VDY0IFZvbFNlY3RvcnMsDQo+ID4gKyAgSU4gQ09OU1QgQ0hBUjggKk5hbWUsDQo+ID4gKyAgSU4g Qk9PTEVBTiBJc0ZhdDMyDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgVUlOVE4gVG90YWxDbHVz dGVyczsNCj4gPiArICBVSU5UTiBJbmRleDsNCj4gPiArICBFRklfU1RBVFVTIFN0YXR1czsNCj4g PiArDQo+ID4gKyAgLy8gWmVybyBTZWN0b3IgaW5pdGlhbGx5DQo+ID4gKyAgWmVyb01lbSAoRnMt PkN1cnJlbnRTZWN0b3IuU2VjdG9yLCBGQVRfU0VDVE9SX1NJWkUpOw0KPiA+ICsNCj4gPiArICAv LyBPRU0gTmFtZSAmIEp1bXAgQ29kZQ0KPiA+ICsgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3Rvclsw XSA9IDB4RUI7DQo+ID4gKyAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzFdID0gMHgzQzsNCj4g PiArICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbMl0gPSAweDkwOw0KPiA+ICsgIEZzLT5DdXJy ZW50U2VjdG9yLlNlY3RvclszXSA9IDB4NEQ7DQo+ID4gKyAgRnMtPkN1cnJlbnRTZWN0b3IuU2Vj dG9yWzRdID0gMHg1MzsNCj4gPiArICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbNV0gPSAweDQ0 Ow0KPiA+ICsgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3Rvcls2XSA9IDB4NEY7DQo+ID4gKyAgRnMt PkN1cnJlbnRTZWN0b3IuU2VjdG9yWzddID0gMHg1MzsNCj4gPiArICBGcy0+Q3VycmVudFNlY3Rv ci5TZWN0b3JbOF0gPSAweDM1Ow0KPiA+ICsgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3Rvcls5XSA9 IDB4MkU7DQo+ID4gKyAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzEwXSA9IDB4MzA7DQo+ID4g Kw0KPiA+ICsgIC8vIEJ5dGVzIHBlciBTZWN0b3INCj4gPiArICBGcy0+Q3VycmVudFNlY3Rvci5T ZWN0b3JbMTFdID0gKEZBVF9TRUNUT1JfU0laRSA+PiAwKSAmIDB4RkY7DQo+ID4gKyAgRnMtPkN1 cnJlbnRTZWN0b3IuU2VjdG9yWzEyXSA9IChGQVRfU0VDVE9SX1NJWkUgPj4gOCkgJiAweEZGOw0K PiA+ICsNCj4gPiArICAvLyBHZXQgc2VjdG9ycyBwZXIgY2x1c3RlciBzaXplIGZvciB0aGUgZGlz aw0KPiA+ICsgIEZzLT5TZWN0b3JzUGVyQ2x1c3RlciA9IENhbGNDbHVzdGVyU2l6ZSAoVm9sU2Vj dG9ycywgSXNGYXQzMik7DQo+ID4gKyAgaWYgKCFGcy0+U2VjdG9yc1BlckNsdXN0ZXIpDQo+ID4g KyAgICByZXR1cm4gMDsgLy8gSW52YWxpZCBkaXNrIHNpemUNCj4gPiArDQo+ID4gKyAgLy8gU2Vj dG9ycyBwZXIgY2x1c3Rlcg0KPiA+ICsgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3RvclsxM10gPSBG cy0+U2VjdG9yc1BlckNsdXN0ZXI7DQo+ID4gKw0KPiA+ICsgIC8vIFJlc2VydmVkIFNlY3RvcnMN Cj4gPiArICBpZiAoIUlzRmF0MzIpDQo+ID4gKyAgICBGcy0+UmVzZXJ2ZWRTZWN0b3JzID0gODsN Cj4gPiArICBlbHNlDQo+ID4gKyAgICBGcy0+UmVzZXJ2ZWRTZWN0b3JzID0gMzI7DQo+ID4gKyAg RnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzE0XSA9IChGcy0+UmVzZXJ2ZWRTZWN0b3JzID4+IDAp ICYgMHhGRjsNCj4gPiArICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbMTVdID0gKEZzLT5SZXNl cnZlZFNlY3RvcnMgPj4gOCkgJiAweEZGOw0KPiA+ICsNCj4gPiArICAvLyBOdW1iZXIgb2YgRkFU Uw0KPiA+ICsgIEZzLT5OdW1PZkZhdHMgPSAyOw0KPiA+ICsgIEZzLT5DdXJyZW50U2VjdG9yLlNl Y3RvclsxNl0gPSBGcy0+TnVtT2ZGYXRzOw0KPiA+ICsNCj4gPiArICAvLyBNYXggZW50cmllcyBp biByb290IGRpciAoRkFUMTYgb25seSkNCj4gPiArICBpZiAoIUlzRmF0MzIpIHsNCj4gPiArICAg IEZzLT5Sb290RW50cnlDb3VudCA9IDUxMjsNCj4gPiArICAgIEZzLT5DdXJyZW50U2VjdG9yLlNl Y3RvclsxN10gPSAoRnMtPlJvb3RFbnRyeUNvdW50ID4+IDApICYgMHhGRjsNCj4gPiArICAgIEZz LT5DdXJyZW50U2VjdG9yLlNlY3RvclsxOF0gPSAoRnMtPlJvb3RFbnRyeUNvdW50ID4+IDgpICYg MHhGRjsNCj4gPiArICB9IGVsc2Ugew0KPiA+ICsgICAgRnMtPlJvb3RFbnRyeUNvdW50ID0gMDsN Cj4gPiArICAgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3RvclsxN10gPSAwOw0KPiA+ICsgICAgRnMt PkN1cnJlbnRTZWN0b3IuU2VjdG9yWzE4XSA9IDA7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICAv LyBbRkFUMTZdIFRvdGFsIHNlY3RvcnMgKHVzZSBGQVQzMiBjb3VudCBpbnN0ZWFkKQ0KPiA+ICsg IEZzLT5DdXJyZW50U2VjdG9yLlNlY3RvclsxOV0gPSAweDAwOw0KPiA+ICsgIEZzLT5DdXJyZW50 U2VjdG9yLlNlY3RvclsyMF0gPSAweDAwOw0KPiA+ICsNCj4gPiArICAvLyBNZWRpYSB0eXBlDQo+ ID4gKyAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzIxXSA9IDB4Rjg7DQo+ID4gKw0KPiA+ICsN Cj4gPiArICAvLyBGQVQxNiBCUyBEZXRhaWxzDQo+ID4gKyAgaWYgKCFJc0ZhdDMyKSB7DQo+ID4g KyAgICAvLyBDb3VudCBvZiBzZWN0b3JzIHVzZWQgYnkgdGhlIEZBVCB0YWJsZSAoRkFUMTYgb25s eSkNCj4gPiArICAgIFRvdGFsQ2x1c3RlcnMgPSAoVm9sU2VjdG9ycyAvIEZzLT5TZWN0b3JzUGVy Q2x1c3RlcikgKyAxOw0KPiA+ICsgICAgRnMtPkZhdFNlY3RvcnMgPSAoVG90YWxDbHVzdGVycyAv IChGQVRfU0VDVE9SX1NJWkUgLyAyKSkgKyAxOw0KPiA+ICsgICAgRnMtPkN1cnJlbnRTZWN0b3Iu U2VjdG9yWzIyXSA9IChVSU5UOCkoKEZzLT5GYXRTZWN0b3JzID4+IDApICYgMHhGRik7DQo+ID4g KyAgICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbMjNdID0gKFVJTlQ4KSgoRnMtPkZhdFNlY3Rv cnMgPj4gOCkgJiAweEZGKTsNCj4gPiArDQo+ID4gKyAgICAvLyBTZWN0b3JzIHBlciB0cmFjaw0K PiA+ICsgICAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzI0XSA9IDB4MDA7DQo+ID4gKyAgICBG cy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbMjVdID0gMHgwMDsNCj4gPiArDQo+ID4gKyAgICAvLyBI ZWFkcw0KPiA+ICsgICAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzI2XSA9IDB4MDA7DQo+ID4g KyAgICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbMjddID0gMHgwMDsNCj4gPiArDQo+ID4gKyAg ICAvLyBIaWRkZW4gc2VjdG9ycw0KPiA+ICsgICAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzI4 XSA9IDB4MjA7DQo+ID4gKyAgICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbMjldID0gMHgwMDsN Cj4gPiArICAgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3RvclszMF0gPSAweDAwOw0KPiA+ICsgICAg RnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzMxXSA9IDB4MDA7DQo+ID4gKw0KPiA+ICsgICAgLy8g VG90YWwgc2VjdG9ycyBmb3IgdGhpcyB2b2x1bWUNCj4gPiArICAgIEZzLT5DdXJyZW50U2VjdG9y LlNlY3RvclszMl0gPSAoVUlOVDgpKChWb2xTZWN0b3JzID4+IDApICYgMHhGRik7DQo+ID4gKyAg ICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbMzNdID0gKFVJTlQ4KSgoVm9sU2VjdG9ycyA+PiA4 KSAmIDB4RkYpOw0KPiA+ICsgICAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzM0XSA9IChVSU5U OCkoKFZvbFNlY3RvcnMgPj4gMTYpICYgMHhGRik7DQo+ID4gKyAgICBGcy0+Q3VycmVudFNlY3Rv ci5TZWN0b3JbMzVdID0gKFVJTlQ4KSgoVm9sU2VjdG9ycyA+PiAyNCkgJiAweEZGKTsNCj4gPiAr DQo+ID4gKyAgICAvLyBEcml2ZSBudW1iZXINCj4gPiArICAgIEZzLT5DdXJyZW50U2VjdG9yLlNl Y3RvclszNl0gPSAweDAwOw0KPiA+ICsNCj4gPiArICAgIC8vIFJlc2VydmVkDQo+ID4gKyAgICBG cy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbMzddID0gMHgwMDsNCj4gPiArDQo+ID4gKyAgICAvLyBC b290IHNpZ25hdHVyZQ0KPiA+ICsgICAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzM4XSA9IDB4 Mjk7DQo+ID4gKw0KPiA+ICsgICAgLy8gVm9sdW1lIElEDQo+ID4gKyAgICBGcy0+Q3VycmVudFNl Y3Rvci5TZWN0b3JbMzldID0gMHgxMjsNCj4gPiArICAgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3Rv cls0MF0gPSAweDM0Ow0KPiA+ICsgICAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzQxXSA9IDB4 NTY7DQo+ID4gKyAgICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbNDJdID0gMHg3ODsNCj4gPiAr DQo+ID4gKyAgICAvLyBWb2x1bWUgbmFtZQ0KPiA+ICsgICAgZm9yIChJbmRleCA9IDA7IEluZGV4 IDwgMTE7IEluZGV4KyspIHsNCj4gPiArICAgICAgaWYgKEluZGV4IDwgQXNjaWlTdHJMZW4gKE5h bWUpKQ0KPiA+ICsgICAgICAgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3RvcltJbmRleCArIDQzXSA9 IE5hbWVbSW5kZXhdOw0KPiA+ICsgICAgICBlbHNlDQo+ID4gKyAgICAgICAgRnMtPkN1cnJlbnRT ZWN0b3IuU2VjdG9yW0luZGV4ICsgNDNdID0gJyAnOw0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiAr ICAgIC8vIEZpbGUgc3lzIHR5cGUNCj4gPiArICAgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3Rvcls1 NF0gPSAnRic7DQo+ID4gKyAgICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbNTVdID0gJ0EnOw0K PiA+ICsgICAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzU2XSA9ICdUJzsNCj4gPiArICAgIEZz LT5DdXJyZW50U2VjdG9yLlNlY3Rvcls1N10gPSAnMSc7DQo+ID4gKyAgICBGcy0+Q3VycmVudFNl Y3Rvci5TZWN0b3JbNThdID0gJzYnOw0KPiA+ICsgICAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9y WzU5XSA9ICcgJzsNCj4gPiArICAgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3Rvcls2MF0gPSAnICc7 DQo+ID4gKyAgICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbNjFdID0gJyAnOw0KPiA+ICsNCj4g PiArICAgIC8vIFNpZ25hdHVyZQ0KPiA+ICsgICAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzUx MF0gPSAweDU1Ow0KPiA+ICsgICAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzUxMV0gPSAweEFB Ow0KPiA+ICsgIH0NCj4gPiArICAvLyBGQVQzMiBCUyBEZXRhaWxzDQo+ID4gKyAgZWxzZSB7DQo+ ID4gKyAgICAvLyBDb3VudCBvZiBzZWN0b3JzIHVzZWQgYnkgdGhlIEZBVCB0YWJsZSAoRkFUMTYg b25seSkNCj4gPiArICAgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3RvclsyMl0gPSAwOw0KPiA+ICsg ICAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzIzXSA9IDA7DQo+ID4gKw0KPiA+ICsgICAgLy8g U2VjdG9ycyBwZXIgdHJhY2sgKGRlZmF1bHQpDQo+ID4gKyAgICBGcy0+Q3VycmVudFNlY3Rvci5T ZWN0b3JbMjRdID0gMHgzRjsNCj4gPiArICAgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3RvclsyNV0g PSAweDAwOw0KPiA+ICsNCj4gPiArICAgIC8vIEhlYWRzIChkZWZhdWx0KQ0KPiA+ICsgICAgRnMt PkN1cnJlbnRTZWN0b3IuU2VjdG9yWzI2XSA9IDB4RkY7DQo+ID4gKyAgICBGcy0+Q3VycmVudFNl Y3Rvci5TZWN0b3JbMjddID0gMHgwMDsNCj4gPiArDQo+ID4gKyAgICAvLyBIaWRkZW4gc2VjdG9y cw0KPiA+ICsgICAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzI4XSA9IDB4MDA7DQo+ID4gKyAg ICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbMjldID0gMHgwMDsNCj4gPiArICAgIEZzLT5DdXJy ZW50U2VjdG9yLlNlY3RvclszMF0gPSAweDAwOw0KPiA+ICsgICAgRnMtPkN1cnJlbnRTZWN0b3Iu U2VjdG9yWzMxXSA9IDB4MDA7DQo+ID4gKw0KPiA+ICsgICAgLy8gVG90YWwgc2VjdG9ycyBmb3Ig dGhpcyB2b2x1bWUNCj4gPiArICAgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3RvclszMl0gPSAoVUlO VDgpKChWb2xTZWN0b3JzID4+IDApICYgMHhGRik7DQo+ID4gKyAgICBGcy0+Q3VycmVudFNlY3Rv ci5TZWN0b3JbMzNdID0gKFVJTlQ4KSgoVm9sU2VjdG9ycyA+PiA4KSAmIDB4RkYpOw0KPiA+ICsg ICAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzM0XSA9IChVSU5UOCkoKFZvbFNlY3RvcnMgPj4g MTYpICYgMHhGRik7DQo+ID4gKyAgICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbMzVdID0gKFVJ TlQ4KSgoVm9sU2VjdG9ycyA+PiAyNCkgJiAweEZGKTsNCj4gPiArDQo+ID4gKyAgICBUb3RhbENs dXN0ZXJzID0gKFZvbFNlY3RvcnMgLyBGcy0+U2VjdG9yc1BlckNsdXN0ZXIpICsgMTsNCj4gPiAr ICAgIEZzLT5GYXRTZWN0b3JzID0gKFRvdGFsQ2x1c3RlcnMgLyAoRkFUX1NFQ1RPUl9TSVpFIC8g NCkpICsgMTsNCj4gPiArDQo+ID4gKyAgICAvLyBCUEJfRkFUU3ozMg0KPiA+ICsgICAgRnMtPkN1 cnJlbnRTZWN0b3IuU2VjdG9yWzM2XSA9IChVSU5UOCkoKEZzLT5GYXRTZWN0b3JzID4+IDApICYg MHhGRik7DQo+ID4gKyAgICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbMzddID0gKFVJTlQ4KSgo RnMtPkZhdFNlY3RvcnMgPj4gOCkgJiAweEZGKTsNCj4gPiArICAgIEZzLT5DdXJyZW50U2VjdG9y LlNlY3RvclszOF0gPSAoVUlOVDgpKChGcy0+RmF0U2VjdG9ycyA+PiAxNikgJiAweEZGKTsNCj4g PiArICAgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3RvclszOV0gPSAoVUlOVDgpKChGcy0+RmF0U2Vj dG9ycyA+PiAyNCkgJiAweEZGKTsNCj4gPiArDQo+ID4gKyAgICAvLyBCUEJfRXh0RmxhZ3MNCj4g PiArICAgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3Rvcls0MF0gPSAwOw0KPiA+ICsgICAgRnMtPkN1 cnJlbnRTZWN0b3IuU2VjdG9yWzQxXSA9IDA7DQo+ID4gKw0KPiA+ICsgICAgLy8gQlBCX0ZTVmVy DQo+ID4gKyAgICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbNDJdID0gMDsNCj4gPiArICAgIEZz LT5DdXJyZW50U2VjdG9yLlNlY3Rvcls0M10gPSAwOw0KPiA+ICsNCj4gPiArICAgIC8vIEJQQl9S b290Q2x1cw0KPiA+ICsgICAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzQ0XSA9IChVSU5UOCko KEZzLT5Sb290ZGlyRmlyc3RDbHVzdGVyID4+IDApICYNCj4gPiAweEZGKTsNCj4gPiArICAgIEZz LT5DdXJyZW50U2VjdG9yLlNlY3Rvcls0NV0gPSAoVUlOVDgpKChGcy0+Um9vdGRpckZpcnN0Q2x1 c3RlciA+PiA4KSAmDQo+ID4gMHhGRik7DQo+ID4gKyAgICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0 b3JbNDZdID0gKFVJTlQ4KSgoRnMtPlJvb3RkaXJGaXJzdENsdXN0ZXIgPj4gMTYpDQo+ICYNCj4g PiAweEZGKTsNCj4gPiArICAgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3Rvcls0N10gPSAoVUlOVDgp KChGcy0+Um9vdGRpckZpcnN0Q2x1c3RlciA+PiAyNCkNCj4gJg0KPiA+IDB4RkYpOw0KPiA+ICsN Cj4gPiArICAgIC8vIEJQQl9GU0luZm8NCj4gPiArICAgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3Rv cls0OF0gPSAoVUlOVDgpKChGcy0+RnNJbmZvU2VjdG9yID4+IDApICYgMHhGRik7DQo+ID4gKyAg ICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbNDldID0gKFVJTlQ4KSgoRnMtPkZzSW5mb1NlY3Rv ciA+PiA4KSAmIDB4RkYpOw0KPiA+ICsNCj4gPiArICAgIC8vIEJQQl9Ca0Jvb3RTZWMNCj4gPiAr ICAgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3Rvcls1MF0gPSA2Ow0KPiA+ICsgICAgRnMtPkN1cnJl bnRTZWN0b3IuU2VjdG9yWzUxXSA9IDA7DQo+ID4gKw0KPiA+ICsgICAgLy8gRHJpdmUgbnVtYmVy DQo+ID4gKyAgICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbNjRdID0gMHgwMDsNCj4gPiArDQo+ ID4gKyAgICAvLyBCb290IHNpZ25hdHVyZQ0KPiA+ICsgICAgRnMtPkN1cnJlbnRTZWN0b3IuU2Vj dG9yWzY2XSA9IDB4Mjk7DQo+ID4gKw0KPiA+ICsgICAgLy8gVm9sdW1lIElEDQo+ID4gKyAgICBG cy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbNjddID0gMHgxMjsNCj4gPiArICAgIEZzLT5DdXJyZW50 U2VjdG9yLlNlY3Rvcls2OF0gPSAweDM0Ow0KPiA+ICsgICAgRnMtPkN1cnJlbnRTZWN0b3IuU2Vj dG9yWzY5XSA9IDB4NTY7DQo+ID4gKyAgICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbNzBdID0g MHg3ODsNCj4gPiArDQo+ID4gKyAgICAvLyBWb2x1bWUgbmFtZQ0KPiA+ICsgICAgZm9yIChJbmRl eCA9IDA7IEluZGV4IDwgMTE7IEluZGV4KyspIHsNCj4gPiArICAgICAgaWYgKEluZGV4IDwgKGlu dClBc2NpaVN0ckxlbiAoTmFtZSkpDQo+ID4gKyAgICAgICAgRnMtPkN1cnJlbnRTZWN0b3IuU2Vj dG9yW0luZGV4ICsgNzFdID0gTmFtZVtJbmRleF07DQo+ID4gKyAgICAgIGVsc2UNCj4gPiArICAg ICAgICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbSW5kZXggKyA3MV0gPSAnICc7DQo+ID4gKyAg ICB9DQo+ID4gKw0KPiA+ICsgICAgLy8gRmlsZSBzeXMgdHlwZQ0KPiA+ICsgICAgRnMtPkN1cnJl bnRTZWN0b3IuU2VjdG9yWzgyXSA9ICdGJzsNCj4gPiArICAgIEZzLT5DdXJyZW50U2VjdG9yLlNl Y3Rvcls4M10gPSAnQSc7DQo+ID4gKyAgICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbODRdID0g J1QnOw0KPiA+ICsgICAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzg1XSA9ICczJzsNCj4gPiAr ICAgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3Rvcls4Nl0gPSAnMic7DQo+ID4gKyAgICBGcy0+Q3Vy cmVudFNlY3Rvci5TZWN0b3JbODddID0gJyAnOw0KPiA+ICsgICAgRnMtPkN1cnJlbnRTZWN0b3Iu U2VjdG9yWzg4XSA9ICcgJzsNCj4gPiArICAgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3Rvcls4OV0g PSAnICc7DQo+ID4gKw0KPiA+ICsgICAgLy8gU2lnbmF0dXJlDQo+ID4gKyAgICBGcy0+Q3VycmVu dFNlY3Rvci5TZWN0b3JbNTEwXSA9IDB4NTU7DQo+ID4gKyAgICBGcy0+Q3VycmVudFNlY3Rvci5T ZWN0b3JbNTExXSA9IDB4QUE7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBTdGF0dXMgPSBGcy0+ RGlza0lvLT5Xcml0ZURpc2sgKA0KPiA+ICsgICAgRnMtPkRpc2tJbywgRnMtPkJsb2NrSW8tPk1l ZGlhLT5NZWRpYUlkLA0KPiA+ICsgICAgTXVsdFU2NHgzMiAoRnMtPlN0YXJ0aW5nTEJBLCBGcy0+ QmxvY2tJby0+TWVkaWEtPkJsb2NrU2l6ZSkgKw0KPiA+ICsgICAgTXVsdFU2NHgzMiAoRnMtPkZh dEJlZ2luTGJhLCBGQVRfU0VDVE9SX1NJWkUpLA0KPiA+ICsgICAgRkFUX1NFQ1RPUl9TSVpFLA0K PiA+ICsgICAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yKTsNCj4gPiArDQo+ID4gKyAgcmV0dXJu IFN0YXR1czsNCj4gPiArfQ0KPiA+ICsvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQo+ID4gKy8vIGZh dGZzX2NyZWF0ZV9mc2luZm9fc2VjdG9yOiBDcmVhdGUgdGhlIEZTSW5mbyBTZWN0b3IgKEZBVDMy KQ0KPiA+ICsvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQo+ID4gK1NUQVRJQw0KPiA+ICtFRklfU1RB VFVTDQo+ID4gK0NyZWF0ZUZzaW5mb1NlY3RvciAoDQo+ID4gKyAgSU4gRkFURlMgKkZzLA0KPiA+ ICsgIElOIEVGSV9MQkEgU2VjdG9yTGJhDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgRUZJX1NU QVRVUyBTdGF0dXM7DQo+ID4gKw0KPiA+ICsgIC8vIFplcm8gU2VjdG9yIGluaXRpYWxseQ0KPiA+ ICsgIFplcm9NZW0gKEZzLT5DdXJyZW50U2VjdG9yLlNlY3RvciwgRkFUX1NFQ1RPUl9TSVpFKTsN Cj4gPiArDQo+ID4gKyAgLy8gRlNJX0xlYWRTaWcNCj4gPiArICBGcy0+Q3VycmVudFNlY3Rvci5T ZWN0b3JbMF0gPSAweDUyOw0KPiA+ICsgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3RvclsxXSA9IDB4 NTI7DQo+ID4gKyAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzJdID0gMHg2MTsNCj4gPiArICBG cy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbM10gPSAweDQxOw0KPiA+ICsNCj4gPiArICAvLyBGU0lf U3RydWNTaWcNCj4gPiArICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbNDg0XSA9IDB4NzI7DQo+ ID4gKyAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzQ4NV0gPSAweDcyOw0KPiA+ICsgIEZzLT5D dXJyZW50U2VjdG9yLlNlY3Rvcls0ODZdID0gMHg0MTsNCj4gPiArICBGcy0+Q3VycmVudFNlY3Rv ci5TZWN0b3JbNDg3XSA9IDB4NjE7DQo+ID4gKw0KPiA+ICsgIC8vIEZTSV9GcmVlX0NvdW50DQo+ ID4gKyAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzQ4OF0gPSAweEZGOw0KPiA+ICsgIEZzLT5D dXJyZW50U2VjdG9yLlNlY3Rvcls0ODldID0gMHhGRjsNCj4gPiArICBGcy0+Q3VycmVudFNlY3Rv ci5TZWN0b3JbNDkwXSA9IDB4RkY7DQo+ID4gKyAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzQ5 MV0gPSAweEZGOw0KPiA+ICsNCj4gPiArICAvLyBGU0lfTnh0X0ZyZWUNCj4gPiArICBGcy0+Q3Vy cmVudFNlY3Rvci5TZWN0b3JbNDkyXSA9IDB4RkY7DQo+ID4gKyAgRnMtPkN1cnJlbnRTZWN0b3Iu U2VjdG9yWzQ5M10gPSAweEZGOw0KPiA+ICsgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3Rvcls0OTRd ID0gMHhGRjsNCj4gPiArICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbNDk1XSA9IDB4RkY7DQo+ ID4gKw0KPiA+ICsgIC8vIFNpZ25hdHVyZQ0KPiA+ICsgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3Rv cls1MTBdID0gMHg1NTsNCj4gPiArICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbNTExXSA9IDB4 QUE7DQo+ID4gKw0KPiA+ICsgIFN0YXR1cyA9IEZzLT5EaXNrSW8tPldyaXRlRGlzayAoDQo+ID4g KyAgICBGcy0+RGlza0lvLCBGcy0+QmxvY2tJby0+TWVkaWEtPk1lZGlhSWQsDQo+ID4gKyAgICBN dWx0VTY0eDMyIChGcy0+U3RhcnRpbmdMQkEsIEZzLT5CbG9ja0lvLT5NZWRpYS0+QmxvY2tTaXpl KSArDQo+ID4gKyAgICBNdWx0VTY0eDMyIChTZWN0b3JMYmEsICBGQVRfU0VDVE9SX1NJWkUpLA0K PiA+ICsgICAgRkFUX1NFQ1RPUl9TSVpFLA0KPiA+ICsgICAgRnMtPkN1cnJlbnRTZWN0b3IuU2Vj dG9yKTsNCj4gPiArDQo+ID4gKyAgcmV0dXJuIFN0YXR1czsNCj4gPiArfQ0KPiA+ICsvLy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tDQo+ID4gKy8vIGZhdGZzX2VyYXNlX2ZhdDogRXJhc2UgRkFUIHRhYmxl IHVzaW5nIGZzIGRldGFpbHMgaW4gZnMgc3RydWN0DQo+ID4gKy8vLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0NCj4gPiArU1RBVElDDQo+ID4gK0VGSV9TVEFUVVMNCj4gPiArRXJhc2VGYXQgKA0KPiA+ICsg IElOIEZBVEZTICpGcywNCj4gPiArICBJTiBCT09MRUFOIElzRmF0MzIpDQo+ID4gK3sNCj4gPiAr ICBVSU5UTiBJbmRleDsNCj4gPiArICBFRklfU1RBVFVTIFN0YXR1czsNCj4gPiArDQo+ID4gKyAg Ly8gWmVybyBTZWN0b3IgaW5pdGlhbGx5DQo+ID4gKyAgWmVyb01lbSAoRnMtPkN1cnJlbnRTZWN0 b3IuU2VjdG9yLCBGQVRfU0VDVE9SX1NJWkUpOw0KPiA+ICsNCj4gPiArICAvLyBJbml0aWFsaXNl IGRlZmF1bHQgYWxsb2NhdGUgLyByZXNlcnZlZCBjbHVzdGVycw0KPiA+ICsgIGlmICghSXNGYXQz Mikgew0KPiA+ICsgICAgU0VUXzE2QklUX1dPUkQgKEZzLT5DdXJyZW50U2VjdG9yLlNlY3Rvciwg MCwgMHhGRkY4KTsNCj4gPiArICAgIFNFVF8xNkJJVF9XT1JEIChGcy0+Q3VycmVudFNlY3Rvci5T ZWN0b3IsIDIsIDB4RkZGRik7DQo+ID4gKyAgfSBlbHNlIHsNCj4gPiArICAgIFNFVF8zMkJJVF9X T1JEIChGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3IsIDAsIDB4MEZGRkZGRjgpOw0KPiA+ICsgICAg U0VUXzMyQklUX1dPUkQgKEZzLT5DdXJyZW50U2VjdG9yLlNlY3RvciwgNCwgMHhGRkZGRkZGRik7 DQo+ID4gKyAgICBTRVRfMzJCSVRfV09SRCAoRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yLCA4LCAw eDBGRkZGRkZGKTsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIFN0YXR1cyA9IEZzLT5EaXNrSW8t PldyaXRlRGlzayAoDQo+ID4gKyAgICBGcy0+RGlza0lvLCBGcy0+QmxvY2tJby0+TWVkaWEtPk1l ZGlhSWQsDQo+ID4gKyAgICBNdWx0VTY0eDMyIChGcy0+U3RhcnRpbmdMQkEsIEZzLT5CbG9ja0lv LT5NZWRpYS0+QmxvY2tTaXplKSArDQo+ID4gKyAgICBNdWx0VTY0eDMyIChGcy0+RmF0QmVnaW5M YmEsIEZBVF9TRUNUT1JfU0laRSksDQo+ID4gKyAgICBGQVRfU0VDVE9SX1NJWkUsDQo+ID4gKyAg ICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3IpOw0KPiA+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1 cykpIHsNCj4gPiArICAgIHJldHVybiBTdGF0dXM7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICAv LyBaZXJvIHJlbWFpbmluZyBGQVQgc2VjdG9ycw0KPiA+ICsgIFplcm9NZW0gKEZzLT5DdXJyZW50 U2VjdG9yLlNlY3RvciwgRkFUX1NFQ1RPUl9TSVpFKTsNCj4gPiArICBmb3IgKEluZGV4ID0gMTsg SW5kZXggPCBGcy0+RmF0U2VjdG9ycyAqIEZzLT5OdW1PZkZhdHM7IEluZGV4KyspIHsNCj4gPiAr ICAgIFN0YXR1cyA9IEZzLT5EaXNrSW8tPldyaXRlRGlzayAoDQo+ID4gKyAgICAgIEZzLT5EaXNr SW8sDQo+ID4gKyAgICAgIEZzLT5CbG9ja0lvLT5NZWRpYS0+TWVkaWFJZCwNCj4gPiArICAgICAg TXVsdFU2NHgzMiAoRnMtPlN0YXJ0aW5nTEJBLCBGcy0+QmxvY2tJby0+TWVkaWEtPkJsb2NrU2l6 ZSkgKw0KPiA+ICsgICAgICBNdWx0VTY0eDMyICgoRnMtPkZhdEJlZ2luTGJhICsgSW5kZXgpLCBG QVRfU0VDVE9SX1NJWkUpLA0KPiA+ICsgICAgICBGQVRfU0VDVE9SX1NJWkUsDQo+ID4gKyAgICAg IEZzLT5DdXJyZW50U2VjdG9yLlNlY3Rvcik7DQo+ID4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0 dXMpKSB7DQo+ID4gKyAgICAgIHJldHVybiBTdGF0dXM7DQo+ID4gKyAgICB9DQo+ID4gKyAgfQ0K PiA+ICsgIHJldHVybiBTdGF0dXM7DQo+ID4gK30NCj4gPiArLy8tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQ0KPiA+ICsvLyBmYXRmc19mb3JtYXRfZmF0MTY6IEZvcm1hdCBhIEZBVDE2IHBhcnRpdGlvbg0K PiA+ICsvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQo+ID4gK1NUQVRJQw0KPiA+ICtFRklfU1RBVFVT DQo+ID4gK0Zvcm1hdEZhdDE2ICgNCj4gPiArICBJTiBGQVRGUyAqRnMsDQo+ID4gKyAgSU4gVUlO VDY0IFZvbHVtZVNlY3RvcnMsDQo+ID4gKyAgSU4gQ09OU1QgQ0hBUjggKk5hbWUNCj4gPiArICAp DQo+ID4gK3sNCj4gPiArICBFRklfU1RBVFVTIFN0YXR1czsNCj4gPiArDQo+ID4gKyAgRnMtPkN1 cnJlbnRTZWN0b3IuQWRkcmVzcyA9IEZBVDMyX0lOVkFMSURfQ0xVU1RFUjsNCj4gPiArICBGcy0+ Q3VycmVudFNlY3Rvci5EaXJ0eSA9IDA7DQo+ID4gKw0KPiA+ICsgIEZzLT5OZXh0RnJlZUNsdXN0 ZXIgPSAwOyAvLyBJbnZhbGlkDQo+ID4gKw0KPiA+ICsgIC8vIFZvbHVtZSBpcyBGQVQxNg0KPiA+ ICsgIEZzLT5GYXRUeXBlID0gRkFUX1RZUEVfMTY7DQo+ID4gKw0KPiA+ICsgIC8vIE5vdCB2YWxp ZCBmb3IgRkFUMTYNCj4gPiArICBGcy0+RnNJbmZvU2VjdG9yID0gMDsNCj4gPiArICBGcy0+Um9v dGRpckZpcnN0Q2x1c3RlciA9IDA7DQo+ID4gKw0KPiA+ICsgIEZzLT5MYmFCZWdpbiA9IDA7DQo+ ID4gKyAgU3RhdHVzID0gQ3JlYXRlQm9vdFNlY3RvciAoRnMsIEZzLT5MYmFCZWdpbiwgVm9sdW1l U2VjdG9ycywgTmFtZSwgMCk7DQo+ID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIC8vIEZvciBGQVQx NiAod2hpY2ggdGhpcyBtYXkgYmUpLCBSb290ZGlyRmlyc3RDbHVzdGVyIGlzIGFjdHVhbGwNCj4g PiBSb290ZGlyRmlyc3RTZWN0b3INCj4gPiArICBGcy0+Um9vdGRpckZpcnN0U2VjdG9yID0gRnMt PlJlc2VydmVkU2VjdG9ycyArIChGcy0+TnVtT2ZGYXRzICogRnMtDQo+ID4gPkZhdFNlY3RvcnMp Ow0KPiA+ICsgIEZzLT5Sb290ZGlyU2VjdG9ycyA9ICgoRnMtPlJvb3RFbnRyeUNvdW50ICogMzIp ICsNCj4gPiArICAgIChGQVRfU0VDVE9SX1NJWkUgLSAxKSkgLyBGQVRfU0VDVE9SX1NJWkU7DQo+ ID4gKw0KPiA+ICsgIC8vIEZpcnN0IEZBVCBMQkEgQWRkcmVzcw0KPiA+ICsgIEZzLT5GYXRCZWdp bkxiYSA9IEZzLT5MYmFCZWdpbiArIEZzLT5SZXNlcnZlZFNlY3RvcnM7DQo+ID4gKw0KPiA+ICsg IC8vIFRoZSBBZGRyZXNzIG9mIHRoZSBmaXJzdCBkYXRhIGNsdXN0ZXIgb24gdGhpcyB2b2x1bWUN Cj4gPiArICBGcy0+Q2x1c3RlckJlZ2luTGJhID0gRnMtPkZhdEJlZ2luTGJhICsNCj4gPiArICAg IChGcy0+TnVtT2ZGYXRzICogRnMtPkZhdFNlY3RvcnMpOw0KPiA+ICsNCj4gPiArICAvLyBJbml0 aWFsaXNlIEZBVCBzZWN0b3JzDQo+ID4gKyAgU3RhdHVzID0gRXJhc2VGYXQgKEZzLCAwKTsNCj4g PiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gKyAgICByZXR1cm4gU3RhdHVzOw0K PiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgLy8gRXJhc2UgUm9vdCBkaXJlY3RvcnkNCj4gPiArICBT dGF0dXMgPSBFcmFzZVNlY3RvcnMgKA0KPiA+ICsgICAgICBGcywNCj4gPiArICAgICAgRnMtPkxi YUJlZ2luICsgRnMtPlJvb3RkaXJGaXJzdFNlY3RvciwNCj4gPiArICAgICAgRnMtPlJvb3RkaXJT ZWN0b3JzKTsNCj4gPiArDQo+ID4gKyAgcmV0dXJuIFN0YXR1czsNCj4gPiArfQ0KPiA+ICsvLy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tDQo+ID4gKy8vIGZhdGZzX2Zvcm1hdF9mYXQzMjogRm9ybWF0IGEg RkFUMzIgcGFydGl0aW9uDQo+ID4gKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCj4gPiArU1RBVElD DQo+ID4gK0VGSV9TVEFUVVMNCj4gPiArRm9ybWF0RmF0MzIgKA0KPiA+ICsgIElOIEZBVEZTICpG cywNCj4gPiArICBJTiBVSU5UTiBWb2x1bWVTZWN0b3JzLA0KPiA+ICsgIElOIENPTlNUIENIQVI4 ICpOYW1lDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgRUZJX1NUQVRVUyBTdGF0dXM7DQo+ID4g Kw0KPiA+ICsgIEZzLT5DdXJyZW50U2VjdG9yLkFkZHJlc3MgPSBGQVQzMl9JTlZBTElEX0NMVVNU RVI7DQo+ID4gKyAgRnMtPkN1cnJlbnRTZWN0b3IuRGlydHkgPSAwOw0KPiA+ICsNCj4gPiArICBG cy0+TmV4dEZyZWVDbHVzdGVyID0gMDsgLy8gSW52YWxpZA0KPiA+ICsNCj4gPiArICAvLyBWb2x1 bWUgaXMgRkFUMzINCj4gPiArICBGcy0+RmF0VHlwZSA9IEZBVF9UWVBFXzMyOw0KPiA+ICsNCj4g PiArICAvLyBCYXNpYyBkZWZhdWx0cyBmb3Igbm9ybWFsIEZBVDMyIHBhcnRpdGlvbnMNCj4gPiAr ICBGcy0+RnNJbmZvU2VjdG9yID0gMTsNCj4gPiArICBGcy0+Um9vdGRpckZpcnN0Q2x1c3RlciA9 IDI7DQo+ID4gKw0KPiA+ICsgIC8vIFNlY3RvciAwOiBCb290IFNlY3Rvcg0KPiA+ICsgIC8vIE5P VEU6IFdlIGRvbid0IG5lZWQgYW4gTUJSLCBpdCBpcyBhIHdhc3RlIG9mIGEgZ29vZCBTZWN0b3Ih DQo+ID4gKyAgRnMtPkxiYUJlZ2luID0gMDsNCj4gPiArICBTdGF0dXMgPSBDcmVhdGVCb290U2Vj dG9yIChGcywgRnMtPkxiYUJlZ2luLCBWb2x1bWVTZWN0b3JzLCBOYW1lLCAxKTsNCj4gPiArICBp ZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiA+ICsg IH0NCj4gPiArDQo+ID4gKyAgLy8gRmlyc3QgRkFUIExCQSBhZGRyZXNzDQo+ID4gKyAgRnMtPkZh dEJlZ2luTGJhID0gRnMtPkxiYUJlZ2luICsgRnMtPlJlc2VydmVkU2VjdG9yczsNCj4gPiArDQo+ ID4gKyAgLy8gVGhlIGFkZHJlc3Mgb2YgdGhlIGZpcnN0IGRhdGEgY2x1c3RlciBvbiB0aGlzIHZv bHVtZQ0KPiA+ICsgIEZzLT5DbHVzdGVyQmVnaW5MYmEgPSBGcy0+RmF0QmVnaW5MYmEgKyAoRnMt Pk51bU9mRmF0cyAqIEZzLQ0KPiA+ID5GYXRTZWN0b3JzKTsNCj4gPiArDQo+ID4gKyAgLy8gSW5p dGlhbGlzZSBGU0luZm8gc2VjdG9yDQo+ID4gKyAgU3RhdHVzID0gQ3JlYXRlRnNpbmZvU2VjdG9y IChGcywgRnMtPkZzSW5mb1NlY3Rvcik7DQo+ID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkg ew0KPiA+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIC8vIElu aXRpYWxpc2UgRkFUIHNlY3RvcnMNCj4gPiArICBTdGF0dXMgPSBFcmFzZUZhdCAoRnMsIDEpOw0K PiA+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiArICAgIHJldHVybiBTdGF0dXM7 DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICAvLyBFcmFzZSBSb290IGRpcmVjdG9yeQ0KPiA+ICsg IFN0YXR1cyA9IEVyYXNlU2VjdG9ycyAoDQo+ID4gKyAgICBGcywNCj4gPiArICAgIExiYU9mQ2x1 c3RlciAoRnMsIEZzLT5Sb290ZGlyRmlyc3RDbHVzdGVyKSwNCj4gPiArICAgIEZzLT5TZWN0b3Jz UGVyQ2x1c3Rlcik7DQo+ID4gKw0KPiA+ICsgIHJldHVybiBTdGF0dXM7DQo+ID4gK30NCj4gPiAr Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPiA+ICsvLyBmYXRmc19mb3JtYXQ6IEZvcm1hdCBhIHBh cnRpdGlvbiB3aXRoIGVpdGhlciBGQVQxNiBvciBGQVQzMiBiYXNlZCBvbg0KPiBzaXplDQo+ID4g Ky8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCj4gPiArRUZJX1NUQVRVUw0KPiA+ICtGYXRGb3JtYXQg KA0KPiA+ICsgIElOIEVGSV9MQkEgICAgICAgICAgICAgICAgIFN0YXJ0aW5nTEJBLA0KPiA+ICsg IElOIEVGSV9MQkEgICAgICAgICAgICAgICAgIEVuZGluZ0xCQSwNCj4gPiArICBJTiBFRklfQkxP Q0tfSU9fUFJPVE9DT0wgICAqQmxvY2tJbywNCj4gPiArICBJTiBFRklfRElTS19JT19QUk9UT0NP TCAgICAqRGlza0lvLA0KPiA+ICsgIElOIENIQVI4ICAgICAgICAgICAgICAgICAgICpWb2x1bWVO YW1lLA0KPiA+ICsgIElOIEJPT0xFQU4gICAgICAgICAgICAgICAgIEZvcmNlRmF0MzINCj4gPiAr ICApDQo+ID4gK3sNCj4gPiArICBGQVRGUyBGczsNCj4gPiArICBVSU5UNjQgVm9sdW1lU2VjdG9y czsNCj4gPiArDQo+ID4gKyAgVm9sdW1lU2VjdG9ycyA9IERpdlU2NHgzMiAoDQo+ID4gKyAgICBN dWx0VTY0eDMyICgNCj4gPiArICAgICAgRW5kaW5nTEJBIC0gU3RhcnRpbmdMQkEgKyAxLCBCbG9j a0lvLT5NZWRpYS0+QmxvY2tTaXplKSwNCj4gPiArICAgIEZBVF9TRUNUT1JfU0laRSk7DQo+ID4g Kw0KPiA+ICsgIGlmIChWb2x1bWVOYW1lID09IE5VTEwpIHsNCj4gPiArICAgIFZvbHVtZU5hbWUg PSBERUZBVUxUX0ZBVF9MQUJFTF9OQU1FOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgWmVyb01l bSAoJkZzLCBzaXplb2YoRnMpKTsNCj4gPiArDQo+ID4gKyAgRnMuU3RhcnRpbmdMQkEgPSBTdGFy dGluZ0xCQTsNCj4gPiArICBGcy5FbmRpbmdMQkEgPSBFbmRpbmdMQkE7DQo+ID4gKyAgRnMuQmxv Y2tJbyA9IEJsb2NrSW87DQo+ID4gKyAgRnMuRGlza0lvID0gRGlza0lvOw0KPiA+ICsgIC8vIDJH QiAtIDMySyBsaW1pdCBmb3Igc2FmZSBiZWhhdmlvdXIgZm9yIEZBVDE2DQo+ID4gKyAgaWYgKChW b2x1bWVTZWN0b3JzIDw9IDQxOTQzMDQpICYmICghRm9yY2VGYXQzMikpIHsNCj4gPiArICAgIHJl dHVybiBGb3JtYXRGYXQxNiAoJkZzLCBWb2x1bWVTZWN0b3JzLCBWb2x1bWVOYW1lKTsNCj4gPiAr ICB9IGVsc2Ugew0KPiA+ICsgICAgcmV0dXJuIEZvcm1hdEZhdDMyICgmRnMsIFZvbHVtZVNlY3Rv cnMsIFZvbHVtZU5hbWUpOw0KPiA+ICsgIH0NCj4gPiArfQ0KPiA+IGRpZmYgLS1naXQgYS9TaGVs bFBrZy9MaWJyYXJ5L1VlZmlTaGVsbEdwdENvbW1hbmRMaWIvRmF0Rm9ybWF0LmgNCj4gPiBiL1No ZWxsUGtnL0xpYnJhcnkvVWVmaVNoZWxsR3B0Q29tbWFuZExpYi9GYXRGb3JtYXQuaA0KPiA+IG5l dyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAwMDAwMDAwLi5kMWEzMjVhNTdhYmUN Cj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvU2hlbGxQa2cvTGlicmFyeS9VZWZpU2hlbGxH cHRDb21tYW5kTGliL0ZhdEZvcm1hdC5oDQo+ID4gQEAgLTAsMCArMSwxMTEgQEANCj4gPiArLyoq IEBmaWxlDQo+ID4gKw0KPiA+ICsgIENvcHlyaWdodCAoYykgMjAwMyAtIDIwMTIsIFVsdHJhLUVt YmVkZGVkLmNvbS4gQWxsIHJpZ2h0cyByZXNlcnZlZDxCUj4NCj4gPiArDQo+ID4gKyAgVGhpcyBw cm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KPiA+ICsgIGFyZSBsaWNlbnNl ZCBhbmQgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRo ZQ0KPiBCU0QNCj4gPiBMaWNlbnNlDQo+ID4gKyAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0 cmlidXRpb24uICBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIG1heSBiZQ0KPiA+IGZvdW5k IGF0DQo+ID4gKyAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBo cA0KPiA+ICsNCj4gPiArICBUSEUgUFJPR1JBTSBJUyBESVNUUklCVVRFRCBVTkRFUiBUSEUgQlNE IExJQ0VOU0UgT04gQU4gIkFTIElTIg0KPiA+IEJBU0lTLA0KPiA+ICsgIFdJVEhPVVQgV0FSUkFO VElFUyBPUiBSRVBSRVNFTlRBVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUg0KPiA+IEVYUFJFU1Mg T1IgSU1QTElFRC4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ICsNCj4gPiArLyogUG9ydGlvbnMgQ29w eXJpZ2h0IChjKSAyMDE2LCBCcm9hZGNvbS4gQWxsIHJpZ2h0cyByZXNlcnZlZCAqLw0KPiA+ICsN Cj4gPiArI2lmbmRlZiBfX0ZBVF9GT1JNQVRfSF9fDQo+ID4gKyNkZWZpbmUgX19GQVRfRk9STUFU X0hfXw0KPiA+ICsNCj4gPiArI2luY2x1ZGUgIkdwdFdvcmtlci5oIg0KPiA+ICsNCj4gPiArI2Rl ZmluZSBGQVRfU0VDVE9SX1NJWkUgICAgICAgICAgICAgICAgICAgICA1MTINCj4gPiArI2RlZmlu ZSBGQVRfQlVGRkVSX1NFQ1RPUlMgICAgICAgICAgICAgICAgICAgIDENCj4gPiArI2RlZmluZSBG QVQzMl9MQVNUX0NMVVNURVIgICAgICAgICAgICAgIDB4RkZGRkZGRkYNCj4gPiArI2RlZmluZSBG QVQzMl9JTlZBTElEX0NMVVNURVIgICAgICAgICAgIDB4RkZGRkZGRkYNCj4gPiArI2RlZmluZSBG QVRfRElSX0VOVFJZX1NJWkUgICAgICAgICAgICAgIDMyDQo+ID4gKyNkZWZpbmUgRkFUX0JVRkZF UlMgICAgICAgICAgICAgICAgICAgICAxDQo+ID4gKyNkZWZpbmUgREVGQVVMVF9GQVRfTEFCRUxf TkFNRSAgICAgICAgICAiRUZJVk9MIg0KPiA+ICsNCj4gPiArI2RlZmluZSBHRVRfMzJCSVRfV09S RChCdWZmZXIsIExvY2F0aW9uKQ0KPiA+ICggKChVSU5UMzIpQnVmZmVyW0xvY2F0aW9uICsgM10g PDwgMjQpICsgXA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICgoVUlOVDMyKUJ1ZmZlcltMb2NhdGlvbiArIDJdIDw8MTYgKSArIFwNCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFVJTlQz MilCdWZmZXJbTG9jYXRpb24gKyAxXSA8PCA4KSArIFwNCj4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoVUlOVDMyKUJ1ZmZlcltMb2NhdGlvbisw XSApDQo+ID4gKw0KPiA+ICsjZGVmaW5lIEdFVF8xNkJJVF9XT1JEKEJ1ZmZlciwgTG9jYXRpb24p DQo+ID4gKCAoKFVJTlQxNilCdWZmZXJbTG9jYXRpb24gKyAxXSA8PCA4KSArIFwNCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoVUlOVDE2KUJ1 ZmZlcltMb2NhdGlvbiswXSkNCj4gPiArDQo+ID4gKyNkZWZpbmUgU0VUXzMyQklUX1dPUkQoQnVm ZmVyLCBMb2NhdGlvbiwgVmFsdWUpICAgeyBCdWZmZXJbTG9jYXRpb24gKyAwXQ0KPiA9DQo+ID4g KFVJTlQ4KSgoVmFsdWUpICYgMHhGRik7IFwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBCdWZmZXJbTG9jYXRpb24gKyAxXSA9IChVSU5UOCko KFZhbHVlID4+IDgpICYNCj4gMHhGRik7DQo+ID4gXA0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1ZmZlcltMb2NhdGlvbiArIDJdID0gKFVJ TlQ4KSgoVmFsdWUgPj4gMTYpICYNCj4gPiAweEZGKTsgXA0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1ZmZlcltMb2NhdGlvbiArIDNdID0g KFVJTlQ4KSgoVmFsdWUgPj4gMjQpICYNCj4gPiAweEZGKTsgfQ0KPiA+ICsNCj4gPiArI2RlZmlu ZSBTRVRfMTZCSVRfV09SRChCdWZmZXIsIExvY2F0aW9uLCBWYWx1ZSkgICB7IEJ1ZmZlcltMb2Nh dGlvbiArIDBdDQo+ID0NCj4gPiAoVUlOVDgpKChWYWx1ZSkgJiAweEZGKTsgXA0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1ZmZlcltMb2Nh dGlvbiArIDFdID0gKFVJTlQ4KSgoVmFsdWUgPj4gOCkgJg0KPiA+IDB4RkYpOyB9DQo+ID4gKw0K PiA+ICt0eXBlZGVmIGVudW0gZUZhdFR5cGUNCj4gPiArew0KPiA+ICsgIEZBVF9UWVBFXzE2LA0K PiA+ICsgIEZBVF9UWVBFXzMyDQo+ID4gK30gRkFUX0ZTX1RZUEU7DQo+ID4gKw0KPiA+ICsNCj4g PiArLy8gRm9yd2FyZCBkZWNsYXJhdGlvbg0KPiA+ICt0eXBlZGVmIHN0cnVjdCBfRkFUX0JVRkZF UiBGQVRfQlVGRkVSOw0KPiA+ICsNCj4gPiArc3RydWN0IF9GQVRfQlVGRkVSIHsNCj4gPiArICBV SU5UOCAgICAgICAgICAgICAgICAgICBTZWN0b3JbRkFUX1NFQ1RPUl9TSVpFICogRkFUX0JVRkZF Ul9TRUNUT1JTXTsNCj4gPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICBBZGRyZXNzOw0KPiA+ ICsgIEJPT0xFQU4gICAgICAgICAgICAgICAgIERpcnR5Ow0KPiA+ICsgIFVJTlQ4ICpQdHI7DQo+ ID4gKw0KPiA+ICsgIC8vIE5leHQgaW4gY2hhaW4gb2Ygc2VjdG9yIGJ1ZmZlcnMNCj4gPiArICBz dHJ1Y3QgRkFUX0JVRkZFUiAgICAgICAqTmV4dEJ1ZjsNCj4gPiArfTsNCj4gPiArDQo+ID4gK3R5 cGVkZWYgc3RydWN0DQo+ID4gK3sNCj4gPiArICAvLyBGaWxlc3lzdGVtIGdsb2JhbHMNCj4gPiAr ICBVSU5UOCAgICAgICAgICAgICAgICAgICBTZWN0b3JzUGVyQ2x1c3RlcjsNCj4gPiArICBFRklf TEJBICAgICAgICAgICAgICAgICBDbHVzdGVyQmVnaW5MYmE7DQo+ID4gKyAgVUlOVE4gICAgICAg ICAgICAgICAgICAgUm9vdGRpckZpcnN0Q2x1c3RlcjsNCj4gPiArICBVSU5UTiAgICAgICAgICAg ICAgICAgICBSb290ZGlyRmlyc3RTZWN0b3I7DQo+ID4gKyAgVUlOVE4gICAgICAgICAgICAgICAg ICAgUm9vdGRpclNlY3RvcnM7DQo+ID4gKyAgRUZJX0xCQSAgICAgICAgICAgICAgICAgRmF0QmVn aW5MYmE7DQo+ID4gKyAgVUlOVDE2ICAgICAgICAgICAgICAgICAgRnNJbmZvU2VjdG9yOw0KPiA+ ICsgIEVGSV9MQkEgICAgICAgICAgICAgICAgIExiYUJlZ2luOw0KPiA+ICsgIFVJTlROICAgICAg ICAgICAgICAgICAgIEZhdFNlY3RvcnM7DQo+ID4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAg TmV4dEZyZWVDbHVzdGVyOw0KPiA+ICsgIFVJTlQxNiAgICAgICAgICAgICAgICAgIFJvb3RFbnRy eUNvdW50Ow0KPiA+ICsgIFVJTlQxNiAgICAgICAgICAgICAgICAgIFJlc2VydmVkU2VjdG9yczsN Cj4gPiArICBVSU5UOCAgICAgICAgICAgICAgICAgICBOdW1PZkZhdHM7DQo+ID4gKyAgRkFUX0ZT X1RZUEUgICAgICAgICAgICAgRmF0VHlwZTsNCj4gPiArDQo+ID4gKyAgLy8gV29ya2luZyBidWZm ZXINCj4gPiArICBGQVRfQlVGRkVSICAgICAgICAgICAgICBDdXJyZW50U2VjdG9yOw0KPiA+ICsg IC8vIEZBVCBCdWZmZXINCj4gPiArICBGQVRfQlVGRkVSICAgICAgICAgICAgICAqRmF0QnVmZmVy SGVhZDsNCj4gPiArICBGQVRfQlVGRkVSICAgICAgICAgICAgICBGYXRCdWZmZXJzW0ZBVF9CVUZG RVJTXTsNCj4gPiArICBFRklfTEJBICAgICAgICAgICAgICAgICBTdGFydGluZ0xCQTsNCj4gPiAr ICBFRklfTEJBICAgICAgICAgICAgICAgICBFbmRpbmdMQkE7DQo+ID4gKyAgRUZJX0JMT0NLX0lP X1BST1RPQ09MICAgKkJsb2NrSW87DQo+ID4gKyAgRUZJX0RJU0tfSU9fUFJPVE9DT0wgICAgKkRp c2tJbzsNCj4gPiArDQo+ID4gK30gRkFURlM7DQo+ID4gKw0KPiA+ICsNCj4gPiArDQo+ID4gKy8v LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0NCj4gPiArLy8gUHJvdG90eXBlcw0KPiA+ICsvLy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tDQo+ID4gK0VGSV9TVEFUVVMNCj4gPiArRmF0Rm9ybWF0ICgNCj4gPiArICBJ TiBFRklfTEJBICAgICAgICAgICAgICAgICAgIFN0YXJ0aW5nTEJBLA0KPiA+ICsgIElOIEVGSV9M QkEgICAgICAgICAgICAgICAgICAgRW5kaW5nTEJBLA0KPiA+ICsgIElOIEVGSV9CTE9DS19JT19Q Uk9UT0NPTCAgICAgKkJsb2NrSW8sDQo+ID4gKyAgSU4gRUZJX0RJU0tfSU9fUFJPVE9DT0wgICAg ICAqRGlza0lvLA0KPiA+ICsgIElOIENIQVI4ICAgICAgICAgICAgICAgICAgICAgKlZvbHVtZU5h bWUsDQo+ID4gKyAgSU4gQk9PTEVBTiAgICAgICAgICAgICAgICAgICBGb3JjZUZhdDMyDQo+ID4g KyAgKTsNCj4gPiArDQo+ID4gKyNlbmRpZg0KPiA+IGRpZmYgLS1naXQgYS9TaGVsbFBrZy9MaWJy YXJ5L1VlZmlTaGVsbEdwdENvbW1hbmRMaWIvR3B0V29ya2VyLmMNCj4gPiBiL1NoZWxsUGtnL0xp YnJhcnkvVWVmaVNoZWxsR3B0Q29tbWFuZExpYi9HcHRXb3JrZXIuYw0KPiA+IG5ldyBmaWxlIG1v ZGUgMTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAwMDAwMDAwLi4wNTQ2Yzk0NDg4YjANCj4gPiAtLS0g L2Rldi9udWxsDQo+ID4gKysrIGIvU2hlbGxQa2cvTGlicmFyeS9VZWZpU2hlbGxHcHRDb21tYW5k TGliL0dwdFdvcmtlci5jDQo+ID4gQEAgLTAsMCArMSwxOTAyIEBADQo+ID4gKy8qKiBAZmlsZQ0K PiA+ICtDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDEzLCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJp Z2h0cyByZXNlcnZlZC48QlI+DQo+ID4gK0NvcHlyaWdodCAoYykgMjAxNiwgQnJvYWRjb20uIEFs bCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiA+ICtUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBh bnlpbmcgbWF0ZXJpYWxzDQo+ID4gK2FyZSBsaWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFibGUgdW5k ZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZQ0KPiBCU0QNCj4gPiBMaWNlbnNlDQo+ ID4gK3doaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLiAgVGhlIGZ1bGwgdGV4dCBv ZiB0aGUgbGljZW5zZSBtYXkgYmUNCj4gPiBmb3VuZCBhdA0KPiA+ICtodHRwOi8vb3BlbnNvdXJj ZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vuc2UucGhwDQo+ID4gKw0KPiA+ICtUSEUgUFJPR1JBTSBJ UyBESVNUUklCVVRFRCBVTkRFUiBUSEUgQlNEIExJQ0VOU0UgT04gQU4gIkFTIElTIg0KPiA+IEJB U0lTLA0KPiA+ICtXSVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TIE9GIEFOWSBL SU5ELCBFSVRIRVINCj4gPiBFWFBSRVNTIE9SIElNUExJRUQuDQo+ID4gKw0KPiA+ICsqKi8NCj4g PiArDQo+ID4gKyNpbmNsdWRlICJHcHRXb3JrZXIuaCINCj4gPiArDQo+ID4gKyNkZWZpbmUgR1BU X0RFQlVHX0xFVkVMIDANCj4gPiArDQo+ID4gK1NUQVRJQyBFRklfUEFSVElUSU9OX1RBQkxFX0hF QURFUiAgICpQcmltYXJ5SGVhZGVyICAgID0gTlVMTDsNCj4gPiArU1RBVElDIEVGSV9QQVJUSVRJ T05fVEFCTEVfSEVBREVSICAgKkJhY2t1cEhlYWRlciAgICAgPSBOVUxMOw0KPiA+ICtTVEFUSUMg RUZJX1BBUlRJVElPTl9FTlRSWSAgICAgICAgICAqUGFydEVudHJ5ICAgICAgICA9IE5VTEw7DQo+ ID4gK1NUQVRJQyBFRklfUEFSVElUSU9OX0VOVFJZX1NUQVRVUyAgICpQRW50cnlTdGF0dXMgICAg ID0gTlVMTDsNCj4gPiArDQo+ID4gK1NUQVRJQyBFRklfQkxPQ0tfSU9fUFJPVE9DT0wgICAgICAg ICpCbG9ja0lvOw0KPiA+ICtTVEFUSUMgRUZJX0RJU0tfSU9fUFJPVE9DT0wgICAgICAgICAqRGlz a0lvOw0KPiA+ICsNCj4gPiArU1RBVElDIEJPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgTWJy VmFsaWQ7DQo+ID4gK1NUQVRJQyBCT09MRUFOICAgICAgICAgICAgICAgICAgICAgIEdwdFZhbGlk Ow0KPiA+ICsNCj4gPiArU1RBVElDIEVGSV9LTk9XTl9QQVJUSVRJT05fVFlQRSBQYXJ0aXRpb25U eXBlc1tdID0NCj4gPiArew0KPiA+ICsgIC8vIEtub3duIFBhcnRpdGlvbiB0eXBlIEdVSURzDQo+ ID4gKyAgLy8gRXhwYW5kIHRoaXMgdGFibGUgYXMgbmVlZGVkLg0KPiA+ICsgIC8vIFN0YXJ0aW5n IHdpdGggRUZJIFN5c3RlbSBwYXJ0aXRpb24NCj4gPiArICB7IHsgMHhDMTJBNzMyOEwsIDB4Rjgx RiwgMHgxMUQyLCB7IDB4QkEsIDB4NEIsIDB4MDAsIDB4QTAsIDB4QzksIDB4M0UsDQo+IDB4Qzks DQo+ID4gMHgzQiB9IH0sIEwiRUZJIFN5c3RlbSIgfSwNCj4gPiArICAvLyBLbm93biBXaW5kb3dz IHBhcnRpdGlvbiB0eXBlcw0KPiA+ICsgIHsgeyAweEUzQzlFMzE2TCwgMHgwQjVDLCAweDREQjgs IHsgMHg4MSwgMHg3RCwgMHhGOSwgMHgyRCwgMHhGMCwgMHgwMiwNCj4gMHgxNSwNCj4gPiAweEFF IH0gfSwgTCJNUyBXaW5kb3dzIFJlc2VydmVkIChNU1IpIiB9LA0KPiA+ICsgIHsgeyAweEVCRDBB MEEyTCwgMHhCOUU1LCAweDQ0MzMsIHsgMHg4NywgMHhDMCwgMHg2OCwgMHhCNiwgMHhCNywgMHgy NiwNCj4gMHg5OSwNCj4gPiAweEM3IH0gfSwgTCJNUyBXaW5kb3dzIEJhc2ljIERhdGEiIH0sDQo+ ID4gKyAgeyB7IDB4NTgwOEM4QUFMLCAweDdFOEYsIDB4NDJFMCwgeyAweDg1LCAweEQyLCAweEUx LCAweEU5LCAweDA0LCAweDM0LA0KPiAweENGLA0KPiA+IDB4QjMgfSB9LCBMIk1TIFdpbmRvd3Mg TERNIE1ldGFkYXRhIiB9LA0KPiA+ICsgIHsgeyAweEFGOUI2MEEwTCwgMHgxNDMxLCAweDRGNjIs IHsgMHhCQywgMHg2OCwgMHgzMywgMHgxMSwgMHg3MSwgMHg0QSwNCj4gMHg2OSwNCj4gPiAweEFE IH0gfSwgTCJNUyBXaW5kb3dzIExETSBEYXRhIiB9LA0KPiA+ICsgIHsgeyAweERFOTRCQkE0TCwg MHgwNkQxLCAweDRENDAsIHsgMHhBMSwgMHg2QSwgMHhCRiwgMHhENSwgMHgwMSwgMHg3OSwNCj4g PiAweEQ2LCAweEFDIH0gfSwgTCJNUyBXaW5kb3dzIFJlY292ZXJ5IEVudmlyb25tZW50IiB9LA0K PiA+ICsgIHsgeyAweEU3NUNBRjhGTCwgMHhGNjgwLCAweDRDRUUsIHsgMHhBRiwgMHhBMywgMHhC MCwgMHgwMSwgMHhFNSwgMHg2RSwNCj4gMHhGQywNCj4gPiAweDJEIH0gfSwgTCJNUyBXaW5kb3dz IFN0b3JhZ2UgU3BhY2VzIiB9LA0KPiA+ICsgIC8vIEtub3duIExpbnV4IHBhcnRpdGlvbiB0eXBl cw0KPiA+ICsgIHsgeyAweDBGQzYzREFGTCwgMHg4NDgzLCAweDQ3NzIsIHsgMHg4RSwgMHg3OSwg MHgzRCwgMHg2OSwgMHhEOCwgMHg0NywNCj4gMHg3RCwNCj4gPiAweEU0IH0gfSwgTCJMaW51eCBG aWxlc3lzdGVtIERhdGEiIH0sDQo+ID4gKyAgeyB7IDB4QTE5RDg4MEZMLCAweDA1RkMsIDB4NEQz QiwgeyAweEEwLCAweDA2LCAweDc0LCAweDNGLCAweDBGLCAweDg0LA0KPiAweDkxLA0KPiA+IDB4 MUUgfSB9LCBMIkxpbnV4IFJBSUQiIH0sDQo+ID4gKyAgeyB7IDB4NDQ0Nzk1NDBMLCAweEYyOTcs IDB4NDFCMiwgeyAweDlBLCAweEY3LCAweEQxLCAweDMxLCAweEQ1LCAweEYwLA0KPiAweDQ1LA0K PiA+IDB4OEEgfSB9LCBMIkxpbnV4IFJvb3QgKHg4NikiIH0sDQo+ID4gKyAgeyB7IDB4NEY2OEJD RTNMLCAweEU4Q0QsIDB4NERCMSwgeyAweDk2LCAweEU3LCAweEZCLCAweENBLCAweEY5LCAweDg0 LA0KPiAweEI3LA0KPiA+IDB4MDkgfSB9LCBMIkxpbnV4IFJvb3QgKHg4Ni02NCkiIH0sDQo+ID4g KyAgeyB7IDB4NjlEQUQ3MTBMLCAweDJDRTQsIDB4NEUzQywgeyAweEIxLCAweDZDLCAweDIxLCAw eEExLCAweEQ0LCAweDlBLA0KPiA+IDB4QmUsIDB4RDMgfSB9LCBMIkxpbnV4IFJvb3QgKEFSTSAz Mi1iaXQpIiB9LA0KPiA+ICsgIHsgeyAweEI5MjFCMDQ1TCwgMHgxREYwLCAweDQxQzMsIHsgMHhB RiwgMHg0NCwgMHg0QywgMHg2RiwgMHgyOCwgMHgwRCwNCj4gMHgzRiwNCj4gPiAweEFFIH0gfSwg TCJMaW51eCBSb290IChBUk0gNjQtYml0L0FBUkNINjQpIiB9LA0KPiA+ICsgIHsgeyAweDA2NTdG RDZETCwgMHhBNEFCLCAweDQzQzQsIHsgMHg4NCwgMHhFNSwgMHgwOSwgMHgzMywgMHhDOCwgMHg0 QiwNCj4gMHg0RiwNCj4gPiAweDRGIH0gfSwgTCJMaW51eCBTd2FwIiB9LA0KPiA+ICsgIHsgeyAw eEU2RDZEMzc5TCwgMHhGNTA3LCAweDQ0QzIsIHsgMHhBMiwgMHgzQywgMHgyMywgMHg4RiwgMHgy QSwgMHgzRCwNCj4gMHhGOSwNCj4gPiAweDI4IH0gfSwgTCJMaW51eCBMb2dpY2FsIFZvbHVtZSBN YW5hZ2VyIChMVk0pIiB9LA0KPiA+ICsgIHsgeyAweDkzM0FDN0UxTCwgMHgyRUI0LCAweDRGMTMs IHsgMHhCOCwgMHg0NCwgMHgwRSwgMHgxNCwgMHhFMiwgMHhBRSwNCj4gMHhGOSwNCj4gPiAweDE1 IH0gfSwgTCJMaW51eCAvaG9tZSIgfSwNCj4gPiArICB7IHsgMHgzQjhGODQyNUwsIDB4MjBFMCwg MHg0RjNCLCB7IDB4OTAsIDB4N0YsIDB4MUEsIDB4MjUsIDB4QTcsIDB4NkYsDQo+IDB4OTgsDQo+ ID4gMHhFOCB9IH0sIEwiTGludXggL3NydiAoc2VydmVyIGRhdGEpIiB9LA0KPiA+ICsgIHsgeyAw eDdGRkVDNUM5TCwgMHgyRDAwLCAweDQ5QjcsIHsgMHg4OSwgMHg0MSwgMHgzRSwgMHhBMSwgMHgw QSwgMHg1NSwNCj4gMHg4NiwNCj4gPiAweEI3IH0gfSwgTCJMaW51eCBQbGFpbiBkbS1jcnlwdCIg fSwNCj4gPiArICB7IHsgMHhDQTdEN0NDQkwsIDB4NjNFRCwgMHg0QzUzLCB7IDB4ODYsIDB4MUMs IDB4MTcsIDB4NDIsIDB4NTMsIDB4NjAsDQo+IDB4NTksDQo+ID4gMHhDQyB9IH0sIEwiTGludXgg TFVLUyIgfSwNCj4gPiArICB7IHsgMHg4REE2MzMzOUwsIDB4MDAwNywgMHg2MEMwLCB7IDB4QzQs IDB4MzYsIDB4MDgsIDB4M0EsIDB4QzgsIDB4MjMsDQo+IDB4MDksDQo+ID4gMHgwOCB9IH0sIEwi TGludXggUmVzZXJ2ZWQiIH0sDQo+ID4gK307DQo+ID4gKw0KPiA+ICtNQVNURVJfQk9PVF9SRUNP UkQgUHJvdGVjdGl2ZU1iclRlbXBsYXRlID0gew0KPiA+ICsgIHsgMCB9LCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQm9vc3RTdHJhcENvZGUgWzQ0 MF0NCj4gPiArICB7IDAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8vIFVuaXF1ZU1iclNpZ25hdHVyZVs0XSAodW51c2VkKQ0KPiA+ICsgIHsgMCB9 LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVW5r bm93blsyXQ0KPiA+ICsNCj4gPiArICAvLyBQQVJUSVRJT05TDQo+ID4gKyAgew0KPiA+ICsgICAg Ly8gTUJSX1BBUlRJVElPTl9SRUNPUkQNCj4gPiArICAgIHsNCj4gPiArICAgICAgMCwgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBCb290SW5kaWNhdG9y DQo+ID4gKyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLy8gU3RhcnRIZWFkDQo+ID4gKyAgICAgIDB4MSwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3RhcnRTZWN0b3INCj4gPiArICAgICAgMHgxLCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTdGFydFRyYWNr DQo+ID4gKyAgICAgIFBNQlJfR1BUX1BBUlRJVElPTiwgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLy8gT1NJbmRpY2F0b3INCj4gPiArICAgICAgMHhmZiwgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBFbmRIZWFkDQo+ID4gKyAgICAgIDB4ZmYsICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRW5kU2VjdG9yDQo+ ID4gKyAgICAgIDB4ZmYsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLy8gRW5kVHJhY2sNCj4gPiArICAgICAgeyAweDEsIDB4MCwgMHgwLCAweDAgfSwgICAgICAg ICAgICAgICAgICAgICAgICAgICAvLyBTdGFydGluZ0xiYVs0XQ0KPiA+ICsgICAgICB7IDB4ZmYs IDB4ZmYsIDB4ZmYsIDB4ZmYgfSwgICAgICAgICAgICAgICAgICAgICAgIC8vIFNpemVJbkxiYVs0 XQ0KPiA+ICsgICAgfSwNCj4gPiArICAgIHsgMCB9LCB7IDAgfSwgeyAwIH0sICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvLyBVbnVzZWQgcGFydGl0aW9ucw0KPiA+ICsgIH0sDQo+ID4g Kw0KPiA+ICsgIE1CUl9TSUdOQVRVUkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8vIFNpZ25hdHVyZQ0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArU1RBVElDIFVJTlQzMiBD dXJSYW5kID0gMTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIEdldCByYW5kb20gc2VlZCBiYXNl ZCBvbiB0aGUgUlRDDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArDQo+ID4gK1NUQVRJQw0KPiA+ICtW T0lEDQo+ID4gK1NyYW5kIChWT0lEKQ0KPiA+ICt7DQo+ID4gKyAgRUZJX1RJTUUgICAgICAgICAg ICAgICAgICBUaW1lOw0KPiA+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgU2VlZDsNCj4g PiArICBVSU5UNjQgICAgICAgICAgICAgICAgICAgIE1vbm90b25pY0NvdW50Ow0KPiA+ICsNCj4g PiArICBnUlQtPkdldFRpbWUgKCZUaW1lLCBOVUxMKTsNCj4gPiArICBTZWVkID0gKH5UaW1lLkhv dXIgPDwgMjQgfCBUaW1lLkRheSA8PCAxNiB8IFRpbWUuTWludXRlIDw8IDggfA0KPiA+IFRpbWUu U2Vjb25kKTsNCj4gPiArICBTZWVkIF49IFRpbWUuTmFub3NlY29uZDsNCj4gPiArICBTZWVkIF49 IFRpbWUuWWVhciA8PCA3Ow0KPiA+ICsNCj4gPiArICBnQlMtPkdldE5leHRNb25vdG9uaWNDb3Vu dCAoJk1vbm90b25pY0NvdW50KTsNCj4gPiArICBTZWVkICs9IChVSU5UMzIpTW9ub3RvbmljQ291 bnQ7DQo+ID4gKw0KPiA+ICsgIC8qIFN0b3JlIHRoaXMgc2VlZCAqLw0KPiA+ICsgIEN1clJhbmQg PSAoVUlOVDMyKVNlZWQ7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIEdldCBhIHBz ZXVkby1yYW5kb20gbnVtYmVyDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgQSBwc2V1ZG8tcmFuZG9t IG51bWJlciBpbiB0aGUgcmFuZ2UgMCAtIDB4N2ZmZg0KPiA+ICsqKi8NCj4gPiArDQo+ID4gK1NU QVRJQyBVSU5UTiBSYW5kIChWT0lEKQ0KPiA+ICt7DQo+ID4gKyAgLyogcmV0dXJuIGEgcHNldWRv LXJhbmRvbSBpbiByYW5nZSAwIC0gMHg3ZmZmICovDQo+ID4gKyAgcmV0dXJuICgoQ3VyUmFuZCA9 IEN1clJhbmQgKiAyMTQwMTNMICsgMjUzMTAxMUwpID4+IDE2KSAmIDB4N2ZmZjsNCj4gPiArfQ0K PiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgR2VuZXJhdGUgYSBHVUlEDQo+ID4gKw0KPiA+ICsgIEBw YXJhbVtpbl0gIEd1aWQgIEEgcG9pbnRlciB0byBhIEdVSUQgcmVjZWl2aW5nIGEgZ2VuZXJhdGVk IHZhbHVlDQo+ID4gKyoqLw0KPiA+ICsNCj4gPiArU1RBVElDIFZPSUQNCj4gPiArR2VuZXJhdGVH dWlkIChPVVQgR1VJRCAqR3VpZCkNCj4gPiArew0KPiA+ICsgIFVJTlROIEluZGV4Ow0KPiA+ICsg IFVJTlQxNiBCdWZmZXJbc2l6ZW9mKEdVSUQpXTsNCj4gPiArDQo+ID4gKyAgLyogR2VuZXJhdGVz IDEyOCByYW5kb20gYml0cyBmb3IgbmV3IFVVSUQgKi8NCj4gPiArICBmb3IgKEluZGV4ID0gMDsg SW5kZXggPCBzaXplb2YoR1VJRCk7IEluZGV4KyspIHsNCj4gPiArICAgIFVJTlROIFY7DQo+ID4g Kw0KPiA+ICsgICAgViA9IFJhbmQgKCkgPj4gNzsNCj4gPiArICAgIEJ1ZmZlcltJbmRleF0gPSAo VUlOVDE2KVY7DQo+ID4gKyAgfQ0KPiA+ICsgIC8qIHNldCB2YXJpYW50IDEweCBhbmQgdmVyc2lv biA0IGFzIHJlcXVpcmVkIGJ5IFJGQyA0MTIyICovDQo+ID4gKyAgQnVmZmVyWzhdID0gMHg4MCB8 IChCdWZmZXJbOF0gJiAweDNmKTsNCj4gPiArICBCdWZmZXJbNl0gPSAweDQwIHwgKEJ1ZmZlcls2 XSAmIDB4Zik7DQo+ID4gKyAgQ29weUd1aWQgKEd1aWQsIChDT05TVCBHVUlEICopQnVmZmVyKTsN Cj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgQ2xlYW4gdXAgZ2xvYmFscw0KPiA+ICsq Ki8NCj4gPiArVk9JRA0KPiA+ICtHcHRDbGVhbnVwR2xvYmFscyAoVk9JRCkNCj4gPiArew0KPiA+ ICsgIFNIRUxMX0ZSRUVfTk9OX05VTEwgKFByaW1hcnlIZWFkZXIpOw0KPiA+ICsgIFNIRUxMX0ZS RUVfTk9OX05VTEwgKEJhY2t1cEhlYWRlcik7DQo+ID4gKyAgU0hFTExfRlJFRV9OT05fTlVMTCAo UGFydEVudHJ5KTsNCj4gPiArICBTSEVMTF9GUkVFX05PTl9OVUxMIChQRW50cnlTdGF0dXMpOw0K PiA+ICsgIEdwdFZhbGlkID0gRkFMU0U7DQo+ID4gKyAgTWJyVmFsaWQgPSBGQUxTRTsNCj4gPiAr fQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgQ2F1dGlvbjogVGhpcyBmdW5jdGlvbiBtYXkgcmVj ZWl2ZSB1bnRydXN0ZWQgaW5wdXQuDQo+ID4gKyAgVGhlIEdQVCBwYXJ0aXRpb24gdGFibGUgaGVh ZGVyIGlzIGV4dGVybmFsIGlucHV0LCBzbyB0aGlzIHJvdXRpbmUNCj4gPiArICB3aWxsIGRvIGJh c2ljIHZhbGlkYXRpb24gZm9yIEdQVCBwYXJ0aXRpb24gdGFibGUgaGVhZGVyIGJlZm9yZSByZXR1 cm4uDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIExiYSAgICAgICAgIFRoZSBzdGFydGluZyBM YmEgb2YgdGhlIFBhcnRpdGlvbiBUYWJsZQ0KPiA+ICsgIEBwYXJhbVtvdXRdIFBhcnRIZWFkZXIg IFN0b3JlcyB0aGUgcGFydGl0aW9uIHRhYmxlIHRoYXQgaXMgcmVhZA0KPiA+ICsNCj4gPiArICBA cmV0dmFsIEVGSV9TVUNDRVNTICAgICBUaGUgcGFydGl0aW9uIHRhYmxlIGlzIHZhbGlkDQo+ID4g KyAgQHJldHZhbCBFUlJPUiAgICAgICAgICAgVGhlIHBhcnRpdGlvbiB0YWJsZSBpcyBub3QgdmFs aWQNCj4gPiArDQo+ID4gKyoqLw0KPiA+ICtTVEFUSUMNCj4gPiArRUZJX1NUQVRVUw0KPiA+ICtQ YXJ0aXRpb25WYWxpZEdwdFRhYmxlICgNCj4gPiArICBJTiAgRUZJX0xCQSAgICAgICAgICAgICAg ICAgICAgIExiYSwNCj4gPiArICBPVVQgRUZJX1BBUlRJVElPTl9UQUJMRV9IRUFERVIgICpQYXJ0 SGVhZGVyDQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIENoZWNrIGlmIHRoZSBD UkMgZmllbGQgaW4gdGhlIFBhcnRpdGlvbiB0YWJsZSBoZWFkZXIgaXMgdmFsaWQNCj4gPiArICBm b3IgUGFydGl0aW9uIGVudHJ5IGFycmF5Lg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICBQYXJ0 SGVhZGVyICBQYXJ0aXRpb24gdGFibGUgaGVhZGVyIHN0cnVjdHVyZQ0KPiA+ICsNCj4gPiArICBA cmV0dmFsIFRSVUUgICAgICB0aGUgQ1JDIGlzIHZhbGlkDQo+ID4gKyAgQHJldHZhbCBGQUxTRSAg ICAgdGhlIENSQyBpcyBpbnZhbGlkDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArU1RBVElDDQo+ID4g K0JPT0xFQU4NCj4gPiArUGFydGl0aW9uQ2hlY2tHcHRFbnRyeUFycmF5Q1JDICgNCj4gPiArICBJ TiAgRUZJX1BBUlRJVElPTl9UQUJMRV9IRUFERVIgICpQYXJ0SGVhZGVyDQo+ID4gKyAgKTsNCj4g PiArDQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBSZXN0b3JlIFBhcnRpdGlvbiBUYWJsZSB0byBp dHMgYWx0ZXJuYXRlIHBsYWNlDQo+ID4gKyAgKFByaW1hcnkgLT4gQmFja3VwIG9yIEJhY2t1cCAt PiBQcmltYXJ5KS4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgUGFydEhlYWRlciAgUGFydGl0 aW9uIHRhYmxlIGhlYWRlciBzdHJ1Y3R1cmUuDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgVFJVRSAg ICAgIFJlc3RvcmluZyBzdWNjZWVkcw0KPiA+ICsgIEByZXR2YWwgRkFMU0UgICAgIFJlc3Rvcmlu ZyBmYWlsZWQNCj4gPiArDQo+ID4gKyoqLw0KPiA+ICtTVEFUSUMNCj4gPiArQk9PTEVBTg0KPiA+ ICtQYXJ0aXRpb25SZXN0b3JlR3B0VGFibGUgKA0KPiA+ICsgIElOICBFRklfUEFSVElUSU9OX1RB QkxFX0hFQURFUiAgKlBhcnRIZWFkZXINCj4gPiArICApOw0KPiA+ICsNCj4gPiArDQo+ID4gKy8q Kg0KPiA+ICsgIFRoaXMgcm91dGluZSB3aWxsIGNoZWNrIEdQVCBwYXJ0aXRpb24gZW50cnkgYW5k IHJldHVybiBlbnRyeSBzdGF0dXMuDQo+ID4gKw0KPiA+ICsgIENhdXRpb246IFRoaXMgZnVuY3Rp b24gbWF5IHJlY2VpdmUgdW50cnVzdGVkIGlucHV0Lg0KPiA+ICsgIFRoZSBHUFQgcGFydGl0aW9u IGVudHJ5IGlzIGV4dGVybmFsIGlucHV0LCBzbyB0aGlzIHJvdXRpbmUNCj4gPiArICB3aWxsIGRv IGJhc2ljIHZhbGlkYXRpb24gZm9yIEdQVCBwYXJ0aXRpb24gZW50cnkgYW5kIHJlcG9ydCBzdGF0 dXMuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gICAgUGFydEhlYWRlciAgICBQYXJ0aXRpb24g dGFibGUgaGVhZGVyIHN0cnVjdHVyZQ0KPiA+ICsgIEBwYXJhbVtpbl0gICAgUGFydEVudHJ5ICAg ICBUaGUgcGFydGl0aW9uIGVudHJ5IGFycmF5DQo+ID4gKyAgQHBhcmFtW291dF0gICBQRW50cnlT dGF0dXMgIHRoZSBwYXJ0aXRpb24gZW50cnkgc3RhdHVzIGFycmF5DQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHJlY29yZGluZyB0aGUgc3RhdHVzIG9mIGVhY2ggcGFydGl0aW9u DQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArU1RBVElDDQo+ID4gK1ZPSUQNCj4gPiArUGFydGl0aW9u Q2hlY2tHcHRFbnRyeSAoDQo+ID4gKyAgSU4gIEVGSV9QQVJUSVRJT05fVEFCTEVfSEVBREVSICAq UGFydEhlYWRlciwNCj4gPiArICBJTiAgRUZJX1BBUlRJVElPTl9FTlRSWSAgICAgICAgICpQYXJ0 RW50cnksDQo+ID4gKyAgT1VUIEVGSV9QQVJUSVRJT05fRU5UUllfU1RBVFVTICAqUEVudHJ5U3Rh dHVzDQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBDaGVja3MgdGhl IENSQzMyIHZhbHVlIGluIHRoZSB0YWJsZSBoZWFkZXIuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbSAg TWF4U2l6ZSAgIE1heCBTaXplIGxpbWl0DQo+ID4gKyAgQHBhcmFtICBTaXplICAgICAgVGhlIHNp emUgb2YgdGhlIHRhYmxlDQo+ID4gKyAgQHBhcmFtICBIZHIgICAgICAgVGFibGUgdG8gY2hlY2sN Cj4gPiArDQo+ID4gKyAgQHJldHVybiBUUlVFICAgIENSQyBWYWxpZA0KPiA+ICsgIEByZXR1cm4g RkFMU0UgICBDUkMgSW52YWxpZA0KPiA+ICsNCj4gPiArKiovDQo+ID4gK1NUQVRJQw0KPiA+ICtC T09MRUFODQo+ID4gK1BhcnRpdGlvbkNoZWNrQ3JjQWx0U2l6ZSAoDQo+ID4gKyAgSU4gVUlOVE4g ICAgICAgICAgICAgICAgIE1heFNpemUsDQo+ID4gKyAgSU4gVUlOVE4gICAgICAgICAgICAgICAg IFNpemUsDQo+ID4gKyAgSU4gT1VUIEVGSV9UQUJMRV9IRUFERVIgICpIZHINCj4gPiArICApOw0K PiA+ICsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIENoZWNrcyB0aGUgQ1JDMzIgdmFsdWUgaW4g dGhlIHRhYmxlIGhlYWRlci4NCj4gPiArDQo+ID4gKyAgQHBhcmFtICBNYXhTaXplICAgTWF4IFNp emUgbGltaXQNCj4gPiArICBAcGFyYW0gIEhkciAgICAgICBUYWJsZSB0byBjaGVjaw0KPiA+ICsN Cj4gPiArICBAcmV0dXJuIFRSVUUgICAgICBDUkMgVmFsaWQNCj4gPiArICBAcmV0dXJuIEZBTFNF ICAgICBDUkMgSW52YWxpZA0KPiA+ICsNCj4gPiArKiovDQo+ID4gK1NUQVRJQw0KPiA+ICtCT09M RUFODQo+ID4gK1BhcnRpdGlvbkNoZWNrQ3JjICgNCj4gPiArICBJTiBVSU5UTiAgICAgICAgICAg ICAgICAgTWF4U2l6ZSwNCj4gPiArICBJTiBPVVQgRUZJX1RBQkxFX0hFQURFUiAgKkhkcg0KPiA+ ICsgICk7DQo+ID4gKw0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgVXBkYXRlcyB0aGUgQ1JDMzIg dmFsdWUgaW4gdGhlIHRhYmxlIGhlYWRlci4NCj4gPiArDQo+ID4gKyAgQHBhcmFtICBTaXplICAg VGhlIHNpemUgb2YgdGhlIHRhYmxlDQo+ID4gKyAgQHBhcmFtICBIZHIgICAgVGFibGUgdG8gdXBk YXRlDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArU1RBVElDDQo+ID4gK1ZPSUQNCj4gPiArUGFydGl0 aW9uU2V0Q3JjQWx0U2l6ZSAoDQo+ID4gKyAgSU4gVUlOVE4gICAgICAgICAgICAgICAgIFNpemUs DQo+ID4gKyAgSU4gT1VUIEVGSV9UQUJMRV9IRUFERVIgICpIZHINCj4gPiArICApOw0KPiA+ICsN Cj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFVwZGF0ZXMgdGhlIENSQzMyIHZhbHVlIGluIHRoZSB0 YWJsZSBoZWFkZXIuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbSAgSGRyICAgIFRhYmxlIHRvIHVwZGF0 ZQ0KPiA+ICsNCj4gPiArKiovDQo+ID4gK1NUQVRJQw0KPiA+ICtWT0lEDQo+ID4gK1BhcnRpdGlv blNldENyYyAoDQo+ID4gKyAgSU4gT1VUIEVGSV9UQUJMRV9IRUFERVIgKkhkcg0KPiA+ICsgICk7 DQo+ID4gKw0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgR2V0IEdQVCB0YWJsZXMuDQo+ID4gKw0K PiA+ICsgIENhdXRpb246IFRoaXMgZnVuY3Rpb24gbWF5IHJlY2VpdmUgdW50cnVzdGVkIGlucHV0 Lg0KPiA+ICsgIFRoZSBHUFQgcGFydGl0aW9uIHRhYmxlIGlzIGV4dGVybmFsIGlucHV0LCBzbyB0 aGlzIHJvdXRpbmUNCj4gPiArICB3aWxsIGRvIGJhc2ljIHZhbGlkYXRpb24gZm9yIEdQVCBwYXJ0 aXRpb24gdGFibGUgYmVmb3JlIGluc3RhbGwNCj4gPiArICBjaGlsZCBoYW5kbGUgZm9yIGVhY2gg R1BUIHBhcnRpdGlvbi4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgRGlza0lvUHJvdCAgICAg RGlza0lvIGludGVyZmFjZS4NCj4gPiArICBAcGFyYW1baW5dICBCbG9ja0lvUHJvdCAgICBCbG9j a0lvIGludGVyZmFjZS4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAg ICAgVmFsaWQgR1BUIGRpc2suDQo+ID4gKyAgQHJldHZhbCBFRklfTUVESUFfQ0hBTkdFRCAgICAg TWVkaWEgY2hhbmdlZCBEZXRlY3RlZC4NCj4gPiArICBAcmV0dmFsIG90aGVyICAgICAgICAgICAg ICAgICBOb3QgYSB2YWxpZCBHUFQgZGlzay4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ICtFRklfU1RB VFVTDQo+ID4gK1BhcnRpdGlvbkdldEdwdFRhYmxlcyAoDQo+ID4gKyAgSU4gIEVGSV9ESVNLX0lP X1BST1RPQ09MICAgICAgICAgKkRpc2tJb1Byb3QsDQo+ID4gKyAgSU4gIEVGSV9CTE9DS19JT19Q Uk9UT0NPTCAgICAgICAgKkJsb2NrSW9Qcm90DQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgRUZJ X1NUQVRVUyAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gPiArICBVSU5UMzIgICAgICAgICAg ICAgICAgICAgICAgQmxvY2tTaXplOw0KPiA+ICsgIEVGSV9MQkEgICAgICAgICAgICAgICAgICAg ICBMYXN0QmxvY2s7DQo+ID4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgIEluZGV4Ow0K PiA+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICBHcHRWYWxpZFN0YXR1czsNCj4gPiAr ICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgTWVkaWFJZDsNCj4gPiArICBNQVNURVJfQk9P VF9SRUNPUkQgICAgICAgICAgKlByb3RlY3RpdmVNYnI7DQo+ID4gKw0KPiA+ICsgIC8vIENsZWFy IGxlZnRvdmVycw0KPiA+ICsgIEdwdENsZWFudXBHbG9iYWxzICgpOw0KPiA+ICsNCj4gPiArICBN YnJWYWxpZCA9IEZBTFNFOw0KPiA+ICsgIEdwdFZhbGlkID0gRkFMU0U7DQo+ID4gKw0KPiA+ICsg IFByb3RlY3RpdmVNYnIgPSBOVUxMOw0KPiA+ICsNCj4gPiArICBCbG9ja0lvICAgICAgID0gQmxv Y2tJb1Byb3Q7DQo+ID4gKyAgRGlza0lvICAgICAgICA9IERpc2tJb1Byb3Q7DQo+ID4gKw0KPiA+ ICsgIGlmIChDdXJSYW5kID09IDEpIHsNCj4gPiArICAgIFNyYW5kICgpOw0KPiA+ICsgIH0NCj4g PiArDQo+ID4gKyAgQmxvY2tTaXplICAgICA9IEJsb2NrSW8tPk1lZGlhLT5CbG9ja1NpemU7DQo+ ID4gKyAgTGFzdEJsb2NrICAgICA9IEJsb2NrSW8tPk1lZGlhLT5MYXN0QmxvY2s7DQo+ID4gKyAg TWVkaWFJZCAgICAgICA9IEJsb2NrSW8tPk1lZGlhLT5NZWRpYUlkOw0KPiA+ICsNCj4gPiArICBE RUJVRyAoKEVGSV9EX1ZFUkJPU0UsICIgQmxvY2tTaXplIDogJWQgXG4iLCBCbG9ja1NpemUpKTsN Cj4gPiArICBERUJVRyAoKEVGSV9EX1ZFUkJPU0UsICIgTGFzdEJsb2NrIDogJWx4IFxuIiwgTGFz dEJsb2NrKSk7DQo+ID4gKw0KPiA+ICsgIEdwdFZhbGlkU3RhdHVzID0gRUZJX05PVF9GT1VORDsN Cj4gPiArICBHcHRWYWxpZCAgICAgICA9IEZBTFNFOw0KPiA+ICsgIE1iclZhbGlkICAgICAgID0g RkFMU0U7DQo+ID4gKw0KPiA+ICsgIC8vDQo+ID4gKyAgLy8gQWxsb2NhdGUgYSBidWZmZXIgZm9y IHRoZSBQcm90ZWN0aXZlIE1CUg0KPiA+ICsgIC8vDQo+ID4gKyAgUHJvdGVjdGl2ZU1iciA9IEFs bG9jYXRlUG9vbCAoQmxvY2tTaXplKTsNCj4gPiArICBpZiAoUHJvdGVjdGl2ZU1iciA9PSBOVUxM KSB7DQo+ID4gKyAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ID4gKyAgfQ0KPiA+ ICsNCj4gPiArICAvLw0KPiA+ICsgIC8vIFJlYWQgdGhlIFByb3RlY3RpdmUgTUJSIGZyb20gTEJB ICMwDQo+ID4gKyAgLy8NCj4gPiArICBTdGF0dXMgPSBEaXNrSW8tPlJlYWREaXNrICgNCj4gPiAr ICAgIERpc2tJbywNCj4gPiArICAgIE1lZGlhSWQsDQo+ID4gKyAgICAwLA0KPiA+ICsgICAgQmxv Y2tTaXplLA0KPiA+ICsgICAgUHJvdGVjdGl2ZU1icg0KPiA+ICsgICAgKTsNCj4gPiArICBpZiAo RUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gKyAgICBHcHRWYWxpZFN0YXR1cyA9IFN0YXR1czsN Cj4gPiArICAgIGdvdG8gRG9uZTsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIC8vDQo+ID4gKyAg Ly8gVmVyaWZ5IHRoYXQgdGhlIFByb3RlY3RpdmUgTUJSIGlzIHZhbGlkDQo+ID4gKyAgLy8NCj4g PiArICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBNQVhfTUJSX1BBUlRJVElPTlM7IEluZGV4Kysp IHsNCj4gPiArICAgIGlmIChQcm90ZWN0aXZlTWJyLT5QYXJ0aXRpb25bSW5kZXhdLkJvb3RJbmRp Y2F0b3IgPT0gMHgwMCAmJg0KPiA+ICsgICAgICAgIFByb3RlY3RpdmVNYnItPlBhcnRpdGlvbltJ bmRleF0uT1NJbmRpY2F0b3IgPT0NCj4gPiBQTUJSX0dQVF9QQVJUSVRJT04gJiYNCj4gPiArICAg ICAgICBVTlBBQ0tfVUlOVDMyIChQcm90ZWN0aXZlTWJyLT5QYXJ0aXRpb25bSW5kZXhdLlN0YXJ0 aW5nTEJBKSA9PSAxDQo+ID4gKyAgICAgICApIHsNCj4gPiArICAgICAgYnJlYWs7DQo+ID4gKyAg ICB9DQo+ID4gKyAgfQ0KPiA+ICsgIGlmIChJbmRleCA9PSBNQVhfTUJSX1BBUlRJVElPTlMpIHsN Cj4gPiArICAgIGdvdG8gRG9uZTsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIE1iclZhbGlkID0g VFJVRTsNCj4gPiArDQo+ID4gKyAgLy8NCj4gPiArICAvLyBBbGxvY2F0ZSB0aGUgR1BUIHN0cnVj dHVyZXMNCj4gPiArICAvLw0KPiA+ICsgIFByaW1hcnlIZWFkZXIgPSBBbGxvY2F0ZVplcm9Qb29s DQo+ID4gKHNpemVvZihFRklfUEFSVElUSU9OX1RBQkxFX0hFQURFUikpOw0KPiA+ICsgIGlmIChQ cmltYXJ5SGVhZGVyID09IE5VTEwpIHsNCj4gPiArICAgIGdvdG8gRG9uZTsNCj4gPiArICB9DQo+ ID4gKw0KPiA+ICsgIEJhY2t1cEhlYWRlciA9IEFsbG9jYXRlWmVyb1Bvb2wNCj4gPiAoc2l6ZW9m KEVGSV9QQVJUSVRJT05fVEFCTEVfSEVBREVSKSk7DQo+ID4gKyAgaWYgKEJhY2t1cEhlYWRlciA9 PSBOVUxMKSB7DQo+ID4gKyAgICBnb3RvIERvbmU7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICAv Lw0KPiA+ICsgIC8vIENoZWNrIHByaW1hcnkgYW5kIGJhY2t1cCBwYXJ0aXRpb24gdGFibGVzDQo+ ID4gKyAgLy8NCj4gPiArICBTdGF0dXMgPSBQYXJ0aXRpb25WYWxpZEdwdFRhYmxlIChQUklNQVJZ X1BBUlRfSEVBREVSX0xCQSwNCj4gPiBQcmltYXJ5SGVhZGVyKTsNCj4gPiArICBpZiAoRUZJX0VS Uk9SIChTdGF0dXMpKSB7DQo+ID4gKyAgICBERUJVRyAoKEVGSV9EX0lORk8sICIgTm90IFZhbGlk IHByaW1hcnkgcGFydGl0aW9uIHRhYmxlXG4iKSk7DQo+ID4gKw0KPiA+ICsgICAgU3RhdHVzID0g UGFydGl0aW9uVmFsaWRHcHRUYWJsZSAoTGFzdEJsb2NrLCBCYWNrdXBIZWFkZXIpOw0KPiA+ICsg ICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICsgICAgICBERUJVRyAoKEVGSV9EX0lO Rk8sICIgTm90IFZhbGlkIGJhY2t1cCBwYXJ0aXRpb24gdGFibGVcbiIpKTsNCj4gPiArICAgICAg Z290byBEb25lOw0KPiA+ICsgICAgfSBlbHNlIHsNCj4gPiArICAgICAgREVCVUcgKChFRklfRF9J TkZPLCAiIFZhbGlkIGJhY2t1cCBwYXJ0aXRpb24gdGFibGVcbiIpKTsNCj4gPiArICAgICAgREVC VUcgKChFRklfRF9JTkZPLCAiIFJlc3RvcmUgcHJpbWFyeSBwYXJ0aXRpb24gdGFibGUgYnkgdGhl DQo+ID4gYmFja3VwXG4iKSk7DQo+ID4gKyAgICAgIGlmICghUGFydGl0aW9uUmVzdG9yZUdwdFRh YmxlIChCYWNrdXBIZWFkZXIpKSB7DQo+ID4gKyAgICAgICAgREVCVUcgKChFRklfRF9JTkZPLCAi IFJlc3RvcmUgcHJpbWFyeSBwYXJ0aXRpb24gdGFibGUgZXJyb3JcbiIpKTsNCj4gPiArICAgICAg fQ0KPiA+ICsNCj4gPiArICAgICAgU3RhdHVzID0gUGFydGl0aW9uVmFsaWRHcHRUYWJsZSAoQmFj a3VwSGVhZGVyLT5BbHRlcm5hdGVMQkEsDQo+ID4gUHJpbWFyeUhlYWRlcik7DQo+ID4gKyAgICAg IGlmICghRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gKyAgICAgICAgREVCVUcgKChFRklfRF9J TkZPLCAiIFJlc3RvcmUgYmFja3VwIHBhcnRpdGlvbiB0YWJsZSBzdWNjZXNzXG4iKSk7DQo+ID4g KyAgICAgIH0NCj4gPiArICAgIH0NCj4gPiArICB9IGVsc2UgaWYgKEVGSV9FUlJPUiAoUGFydGl0 aW9uVmFsaWRHcHRUYWJsZSAoUHJpbWFyeUhlYWRlci0NCj4gPiA+QWx0ZXJuYXRlTEJBLCBCYWNr dXBIZWFkZXIpKSkgew0KPiA+ICsgICAgREVCVUcgKChFRklfRF9JTkZPLCAiIFZhbGlkIHByaW1h cnkgYW5kICFWYWxpZCBiYWNrdXAgcGFydGl0aW9uDQo+ID4gdGFibGVcbiIpKTsNCj4gPiArICAg IERFQlVHICgoRUZJX0RfSU5GTywgIiBSZXN0b3JlIGJhY2t1cCBwYXJ0aXRpb24gdGFibGUgYnkg dGhlDQo+ID4gcHJpbWFyeVxuIikpOw0KPiA+ICsgICAgaWYgKCFQYXJ0aXRpb25SZXN0b3JlR3B0 VGFibGUgKFByaW1hcnlIZWFkZXIpKSB7DQo+ID4gKyAgICAgIERFQlVHICgoRUZJX0RfSU5GTywg IiBSZXN0b3JlIGJhY2t1cCBwYXJ0aXRpb24gdGFibGUgZXJyb3JcbiIpKTsNCj4gPiArICAgIH0N Cj4gPiArDQo+ID4gKyAgICBTdGF0dXMgPSBQYXJ0aXRpb25WYWxpZEdwdFRhYmxlIChQcmltYXJ5 SGVhZGVyLT5BbHRlcm5hdGVMQkEsDQo+ID4gQmFja3VwSGVhZGVyKTsNCj4gPiArICAgIGlmICgh RUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gKyAgICAgIERFQlVHICgoRUZJX0RfSU5GTywgIiBS ZXN0b3JlIGJhY2t1cCBwYXJ0aXRpb24gdGFibGUgc3VjY2Vzc1xuIikpOw0KPiA+ICsgICAgfQ0K PiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgREVCVUcgKChFRklfRF9WRVJCT1NFLCAiIFZhbGlkIHBy aW1hcnkgYW5kIFZhbGlkIGJhY2t1cCBwYXJ0aXRpb24NCj4gPiB0YWJsZVxuIikpOw0KPiA+ICsN Cj4gPiArICAvLw0KPiA+ICsgIC8vIFJlYWQgdGhlIEVGSSBQYXJ0aXRpb24gRW50cmllcw0KPiA+ ICsgIC8vDQo+ID4gKyAgUGFydEVudHJ5ID0gQWxsb2NhdGVQb29sIChQcmltYXJ5SGVhZGVyLT5O dW1iZXJPZlBhcnRpdGlvbkVudHJpZXMgKg0KPiA+IFByaW1hcnlIZWFkZXItPlNpemVPZlBhcnRp dGlvbkVudHJ5KTsNCj4gPiArICBpZiAoUGFydEVudHJ5ID09IE5VTEwpIHsNCj4gPiArICAgIERF QlVHICgoRUZJX0RfRVJST1IsICJBbGxvY2F0ZSBwb29sIGVycm9yXG4iKSk7DQo+ID4gKyAgICBn b3RvIERvbmU7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBTdGF0dXMgPSBEaXNrSW8tPlJlYWRE aXNrICgNCj4gPiArICAgIERpc2tJbywNCj4gPiArICAgIE1lZGlhSWQsDQo+ID4gKyAgICBNdWx0 VTY0eDMyIChQcmltYXJ5SGVhZGVyLT5QYXJ0aXRpb25FbnRyeUxCQSwgQmxvY2tTaXplKSwNCj4g PiArICAgIFByaW1hcnlIZWFkZXItPk51bWJlck9mUGFydGl0aW9uRW50cmllcyAqIChQcmltYXJ5 SGVhZGVyLQ0KPiA+ID5TaXplT2ZQYXJ0aXRpb25FbnRyeSksDQo+ID4gKyAgICBQYXJ0RW50cnkN Cj4gPiArICAgICk7DQo+ID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICsgICAg R3B0VmFsaWRTdGF0dXMgPSBTdGF0dXM7DQo+ID4gKyAgICBERUJVRyAoKEVGSV9EX0VSUk9SLCAi IFBhcnRpdGlvbiBFbnRyeSBSZWFkRGlzayBlcnJvclxuIikpOw0KPiA+ICsgICAgZ290byBEb25l Ow0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgREVCVUcgKChFRklfRF9WRVJCT1NFLCAiIFBhcnRp dGlvbiBlbnRyaWVzIHJlYWQgYmxvY2sgc3VjY2Vzc1xuIikpOw0KPiA+ICsNCj4gPiArICBERUJV RyAoKEVGSV9EX1ZFUkJPU0UsICIgTnVtYmVyIG9mIHBhcnRpdGlvbiBlbnRyaWVzOiAlZFxuIiwN Cj4gPiBQcmltYXJ5SGVhZGVyLT5OdW1iZXJPZlBhcnRpdGlvbkVudHJpZXMpKTsNCj4gPiArDQo+ ID4gKyAgUEVudHJ5U3RhdHVzID0gQWxsb2NhdGVaZXJvUG9vbCAoUHJpbWFyeUhlYWRlci0NCj4g PiA+TnVtYmVyT2ZQYXJ0aXRpb25FbnRyaWVzICogc2l6ZW9mKEVGSV9QQVJUSVRJT05fRU5UUllf U1RBVFVTKSk7DQo+ID4gKyAgaWYgKFBFbnRyeVN0YXR1cyA9PSBOVUxMKSB7DQo+ID4gKyAgICBE RUJVRyAoKEVGSV9EX0VSUk9SLCAiQWxsb2NhdGUgcG9vbCBlcnJvclxuIikpOw0KPiA+ICsgICAg Z290byBEb25lOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgLy8NCj4gPiArICAvLyBDaGVjayB0 aGUgaW50ZWdyaXR5IG9mIHBhcnRpdGlvbiBlbnRyaWVzDQo+ID4gKyAgLy8NCj4gPiArICBQYXJ0 aXRpb25DaGVja0dwdEVudHJ5IChQcmltYXJ5SGVhZGVyLCBQYXJ0RW50cnksIFBFbnRyeVN0YXR1 cyk7DQo+ID4gKw0KPiA+ICsgIC8vDQo+ID4gKyAgLy8gSWYgd2UgZ290IHRoaXMgZmFyIHRoZSBH UFQgbGF5b3V0IG9mIHRoZSBkaXNrIGlzIHZhbGlkIGFuZCB3ZSBzaG91bGQNCj4gcmV0dXJuDQo+ ID4gdHJ1ZQ0KPiA+ICsgIC8vDQo+ID4gKyAgR3B0VmFsaWRTdGF0dXMgPSBFRklfU1VDQ0VTUzsN Cj4gPiArDQo+ID4gKyBEb25lOg0KPiA+ICsgIFNIRUxMX0ZSRUVfTk9OX05VTEwgKFByb3RlY3Rp dmVNYnIpOw0KPiA+ICsgIGlmIChFRklfRVJST1IgKEdwdFZhbGlkU3RhdHVzKSkgew0KPiA+ICsg ICAgU0hFTExfRlJFRV9OT05fTlVMTCAoUHJpbWFyeUhlYWRlcik7DQo+ID4gKyAgICBTSEVMTF9G UkVFX05PTl9OVUxMIChCYWNrdXBIZWFkZXIpOw0KPiA+ICsgICAgU0hFTExfRlJFRV9OT05fTlVM TCAoUGFydEVudHJ5KTsNCj4gPiArICAgIFNIRUxMX0ZSRUVfTk9OX05VTEwgKFBFbnRyeVN0YXR1 cyk7DQo+ID4gKyAgfSBlbHNlIHsNCj4gPiArICAgIEdwdFZhbGlkID0gVFJVRTsNCj4gPiArICB9 DQo+ID4gKw0KPiA+ICsgIHJldHVybiBHcHRWYWxpZFN0YXR1czsNCj4gPiArfQ0KPiA+ICsNCj4g PiArLyoqDQo+ID4gKyAgVGhpcyByb3V0aW5lIHdpbGwgcmVhZCBHUFQgcGFydGl0aW9uIHRhYmxl IGhlYWRlciBhbmQgcmV0dXJuIGl0Lg0KPiA+ICsNCj4gPiArICBDYXV0aW9uOiBUaGlzIGZ1bmN0 aW9uIG1heSByZWNlaXZlIHVudHJ1c3RlZCBpbnB1dC4NCj4gPiArICBUaGUgR1BUIHBhcnRpdGlv biB0YWJsZSBoZWFkZXIgaXMgZXh0ZXJuYWwgaW5wdXQsIHNvIHRoaXMgcm91dGluZQ0KPiA+ICsg IHdpbGwgZG8gYmFzaWMgdmFsaWRhdGlvbiBmb3IgR1BUIHBhcnRpdGlvbiB0YWJsZSBoZWFkZXIg YmVmb3JlIHJldHVybi4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgTGJhICAgICAgICAgVGhl IHN0YXJ0aW5nIExiYSBvZiB0aGUgUGFydGl0aW9uIFRhYmxlDQo+ID4gKyAgQHBhcmFtW291dF0g UGFydEhlYWRlciAgU3RvcmVzIHRoZSBwYXJ0aXRpb24gdGFibGUgdGhhdCBpcyByZWFkDQo+ID4g Kw0KPiA+ICsgIEByZXR2YWwgVFJVRSAgICAgIFRoZSBwYXJ0aXRpb24gdGFibGUgaXMgdmFsaWQN Cj4gPiArICBAcmV0dmFsIEZBTFNFICAgICBUaGUgcGFydGl0aW9uIHRhYmxlIGlzIG5vdCB2YWxp ZA0KPiA+ICsNCj4gPiArKiovDQo+ID4gK1NUQVRJQw0KPiA+ICtFRklfU1RBVFVTDQo+ID4gK1Bh cnRpdGlvblZhbGlkR3B0VGFibGUgKA0KPiA+ICsgIElOICBFRklfTEJBICAgICAgICAgICAgICAg ICAgICAgTGJhLA0KPiA+ICsgIE9VVCBFRklfUEFSVElUSU9OX1RBQkxFX0hFQURFUiAgKlBhcnRI ZWFkZXINCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAg ICAgU3RhdHVzOw0KPiA+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICBCbG9ja1NpemU7 DQo+ID4gKyAgRUZJX1BBUlRJVElPTl9UQUJMRV9IRUFERVIgICpQYXJ0SGRyOw0KPiA+ICsgIFVJ TlQzMiAgICAgICAgICAgICAgICAgICAgICBNZWRpYUlkOw0KPiA+ICsNCj4gPiArICBCbG9ja1Np emUgPSBCbG9ja0lvLT5NZWRpYS0+QmxvY2tTaXplOw0KPiA+ICsgIE1lZGlhSWQgICA9IEJsb2Nr SW8tPk1lZGlhLT5NZWRpYUlkOw0KPiA+ICsgIFBhcnRIZHIgICA9IEFsbG9jYXRlWmVyb1Bvb2wg KEJsb2NrU2l6ZSk7DQo+ID4gKw0KPiA+ICsgIGlmIChQYXJ0SGRyID09IE5VTEwpIHsNCj4gPiAr ICAgIERFQlVHICgoRUZJX0RfRVJST1IsICJBbGxvY2F0ZSBwb29sIGVycm9yXG4iKSk7DQo+ID4g KyAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ID4gKyAgfQ0KPiA+ICsgIC8vDQo+ ID4gKyAgLy8gUmVhZCB0aGUgRUZJIFBhcnRpdGlvbiBUYWJsZSBIZWFkZXINCj4gPiArICAvLw0K PiA+ICsgIFN0YXR1cyA9IERpc2tJby0+UmVhZERpc2sgKA0KPiA+ICsgICAgRGlza0lvLA0KPiA+ ICsgICAgTWVkaWFJZCwNCj4gPiArICAgIE11bHRVNjR4MzIgKExiYSwgQmxvY2tTaXplKSwNCj4g PiArICAgIEJsb2NrU2l6ZSwNCj4gPiArICAgIFBhcnRIZHINCj4gPiArICAgICk7DQo+ID4gKyAg aWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICsgICAgRnJlZVBvb2wgKFBhcnRIZHIpOw0K PiA+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIGlmICgoUGFy dEhkci0+SGVhZGVyLlNpZ25hdHVyZSAhPSBFRklfUFRBQl9IRUFERVJfSUQpIHx8DQo+ID4gKyAg ICAgICFQYXJ0aXRpb25DaGVja0NyYyAoQmxvY2tTaXplLCAmUGFydEhkci0+SGVhZGVyKSB8fA0K PiA+ICsgICAgICBQYXJ0SGRyLT5NeUxCQSAhPSBMYmEgfHwNCj4gPiArICAgICAgKFBhcnRIZHIt PlNpemVPZlBhcnRpdGlvbkVudHJ5IDwgc2l6ZW9mKEVGSV9QQVJUSVRJT05fRU5UUlkpKQ0KPiA+ ICsgICAgICkgew0KPiA+ICsgICAgREVCVUcgKChFRklfRF9FUlJPUiwgIkludmFsaWQgZWZpIHBh cnRpdGlvbiB0YWJsZSBoZWFkZXJcbiIpKTsNCj4gPiArICAgIEZyZWVQb29sIChQYXJ0SGRyKTsN Cj4gPiArICAgIHJldHVybiBFRklfVk9MVU1FX0NPUlJVUFRFRDsNCj4gPiArICB9DQo+ID4gKw0K PiA+ICsgIC8vDQo+ID4gKyAgLy8gRW5zdXJlIHRoZSBOdW1iZXJPZlBhcnRpdGlvbkVudHJpZXMg KiBTaXplT2ZQYXJ0aXRpb25FbnRyeSBkb2Vzbid0DQo+ID4gb3ZlcmZsb3cuDQo+ID4gKyAgLy8N Cj4gPiArICBpZiAoUGFydEhkci0+TnVtYmVyT2ZQYXJ0aXRpb25FbnRyaWVzID4gRGl2VTY0eDMy IChNQVhfVUlOVE4sDQo+ID4gUGFydEhkci0+U2l6ZU9mUGFydGl0aW9uRW50cnkpKSB7DQo+ID4g KyAgICBGcmVlUG9vbCAoUGFydEhkcik7DQo+ID4gKyAgICByZXR1cm4gRUZJX1ZPTFVNRV9DT1JS VVBURUQ7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBDb3B5TWVtIChQYXJ0SGVhZGVyLCBQYXJ0 SGRyLA0KPiBzaXplb2YoRUZJX1BBUlRJVElPTl9UQUJMRV9IRUFERVIpKTsNCj4gPiArICBpZiAo IVBhcnRpdGlvbkNoZWNrR3B0RW50cnlBcnJheUNSQyAoUGFydEhlYWRlcikpIHsNCj4gPiArICAg IEZyZWVQb29sIChQYXJ0SGRyKTsNCj4gPiArICAgIHJldHVybiBFRklfVk9MVU1FX0NPUlJVUFRF RDsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIERFQlVHICgoRUZJX0RfVkVSQk9TRSwgIiBWYWxp ZCBlZmkgcGFydGl0aW9uIHRhYmxlIGhlYWRlclxuIikpOw0KPiA+ICsgIEZyZWVQb29sIChQYXJ0 SGRyKTsNCj4gPiArDQo+ID4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiA+ICt9DQo+ID4gKw0K PiA+ICsvKioNCj4gPiArICBDaGVjayBpZiB0aGUgQ1JDIGZpZWxkIGluIHRoZSBQYXJ0aXRpb24g dGFibGUgaGVhZGVyIGlzIHZhbGlkDQo+ID4gKyAgZm9yIFBhcnRpdGlvbiBlbnRyeSBhcnJheS4N Cj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgUGFydEhlYWRlciAgUGFydGl0aW9uIHRhYmxlIGhl YWRlciBzdHJ1Y3R1cmUNCj4gPiArDQo+ID4gKyAgQHJldHZhbCBUUlVFICAgICAgdGhlIENSQyBp cyB2YWxpZA0KPiA+ICsgIEByZXR2YWwgRkFMU0UgICAgIHRoZSBDUkMgaXMgaW52YWxpZA0KPiA+ ICsNCj4gPiArKiovDQo+ID4gK1NUQVRJQw0KPiA+ICtCT09MRUFODQo+ID4gK1BhcnRpdGlvbkNo ZWNrR3B0RW50cnlBcnJheUNSQyAoDQo+ID4gKyAgSU4gIEVGSV9QQVJUSVRJT05fVEFCTEVfSEVB REVSICAqUGFydEhlYWRlcg0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIEVGSV9TVEFUVVMgIFN0 YXR1czsNCj4gPiArICBVSU5UOCAgICAgICAqUHRyOw0KPiA+ICsgIFVJTlQzMiAgICAgIENyYzsN Cj4gPiArICBVSU5UTiAgICAgICBTaXplOw0KPiA+ICsNCj4gPiArICAvLw0KPiA+ICsgIC8vIFJl YWQgdGhlIEVGSSBQYXJ0aXRpb24gRW50cmllcw0KPiA+ICsgIC8vDQo+ID4gKyAgUHRyID0gQWxs b2NhdGVQb29sIChQYXJ0SGVhZGVyLT5OdW1iZXJPZlBhcnRpdGlvbkVudHJpZXMgKg0KPiBQYXJ0 SGVhZGVyLQ0KPiA+ID5TaXplT2ZQYXJ0aXRpb25FbnRyeSk7DQo+ID4gKyAgaWYgKFB0ciA9PSBO VUxMKSB7DQo+ID4gKyAgICBERUJVRyAoKEVGSV9EX0VSUk9SLCAiIEFsbG9jYXRlIHBvb2wgZXJy b3JcbiIpKTsNCj4gPiArICAgIHJldHVybiBGQUxTRTsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsg IFN0YXR1cyA9IERpc2tJby0+UmVhZERpc2sgKA0KPiA+ICsgICAgRGlza0lvLA0KPiA+ICsgICAg QmxvY2tJby0+TWVkaWEtPk1lZGlhSWQsDQo+ID4gKyAgICBNdWx0VTY0eDMyIChQYXJ0SGVhZGVy LT5QYXJ0aXRpb25FbnRyeUxCQSwgQmxvY2tJby0+TWVkaWEtDQo+ID5CbG9ja1NpemUpLA0KPiA+ ICsgICAgUGFydEhlYWRlci0+TnVtYmVyT2ZQYXJ0aXRpb25FbnRyaWVzICogUGFydEhlYWRlci0N Cj4gPiA+U2l6ZU9mUGFydGl0aW9uRW50cnksDQo+ID4gKyAgICBQdHINCj4gPiArICAgICk7DQo+ ID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICsgICAgRnJlZVBvb2wgKFB0cik7 DQo+ID4gKyAgICByZXR1cm4gRkFMU0U7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBTaXplICAg ID0gUGFydEhlYWRlci0+TnVtYmVyT2ZQYXJ0aXRpb25FbnRyaWVzICogUGFydEhlYWRlci0NCj4g PiA+U2l6ZU9mUGFydGl0aW9uRW50cnk7DQo+ID4gKw0KPiA+ICsgIFN0YXR1cyAgPSBnQlMtPkNh bGN1bGF0ZUNyYzMyIChQdHIsIFNpemUsICZDcmMpOw0KPiA+ICsgIGlmIChFRklfRVJST1IgKFN0 YXR1cykpIHsNCj4gPiArICAgIERFQlVHICgoRUZJX0RfRVJST1IsICJDaGVja1BFbnRyeUFycmF5 Q1JDOiBDcmMgY2FsY3VsYXRpb24NCj4gZmFpbGVkXG4iKSk7DQo+ID4gKyAgICBGcmVlUG9vbCAo UHRyKTsNCj4gPiArICAgIHJldHVybiBGQUxTRTsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIEZy ZWVQb29sIChQdHIpOw0KPiA+ICsNCj4gPiArICByZXR1cm4gKEJPT0xFQU4pKFBhcnRIZWFkZXIt PlBhcnRpdGlvbkVudHJ5QXJyYXlDUkMzMiA9PSBDcmMpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsN Cj4gPiArLyoqDQo+ID4gKyAgUmVzdG9yZSBQYXJ0aXRpb24gVGFibGUgdG8gaXRzIGFsdGVybmF0 ZSBwbGFjZQ0KPiA+ICsgIChQcmltYXJ5IC0+IEJhY2t1cCBvciBCYWNrdXAgLT4gUHJpbWFyeSku DQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIFBhcnRIZWFkZXIgIFBhcnRpdGlvbiB0YWJsZSBo ZWFkZXIgc3RydWN0dXJlLg0KPiA+ICsNCj4gPiArICBAcmV0dmFsIFRSVUUgICAgICBSZXN0b3Jp bmcgc3VjY2VlZHMNCj4gPiArICBAcmV0dmFsIEZBTFNFICAgICBSZXN0b3JpbmcgZmFpbGVkDQo+ ID4gKw0KPiA+ICsqKi8NCj4gPiArU1RBVElDDQo+ID4gK0JPT0xFQU4NCj4gPiArUGFydGl0aW9u UmVzdG9yZUdwdFRhYmxlICgNCj4gPiArICBJTiAgRUZJX1BBUlRJVElPTl9UQUJMRV9IRUFERVIg ICpQYXJ0SGVhZGVyDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgRUZJX1NUQVRVUyAgICAgICAg ICAgICAgICAgIFN0YXR1czsNCj4gPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgQmxv Y2tTaXplOw0KPiA+ICsgIEVGSV9QQVJUSVRJT05fVEFCTEVfSEVBREVSICAqUGFydEhkcjsNCj4g PiArICBFRklfTEJBICAgICAgICAgICAgICAgICAgICAgUEVudHJ5TEJBOw0KPiA+ICsgIFVJTlQ4 ICAgICAgICAgICAgICAgICAgICAgICAqUHRyOw0KPiA+ICsgIFVJTlQzMiAgICAgICAgICAgICAg ICAgICAgICBNZWRpYUlkOw0KPiA+ICsNCj4gPiArICBQYXJ0SGRyICAgPSBOVUxMOw0KPiA+ICsg IFB0ciAgICAgICA9IE5VTEw7DQo+ID4gKw0KPiA+ICsgIEJsb2NrU2l6ZSA9IEJsb2NrSW8tPk1l ZGlhLT5CbG9ja1NpemU7DQo+ID4gKyAgTWVkaWFJZCAgID0gQmxvY2tJby0+TWVkaWEtPk1lZGlh SWQ7DQo+ID4gKw0KPiA+ICsgIFBhcnRIZHIgICA9IEFsbG9jYXRlWmVyb1Bvb2wgKEJsb2NrU2l6 ZSk7DQo+ID4gKw0KPiA+ICsgIGlmIChQYXJ0SGRyID09IE5VTEwpIHsNCj4gPiArICAgIERFQlVH ICgoRUZJX0RfRVJST1IsICJBbGxvY2F0ZSBwb29sIGVycm9yXG4iKSk7DQo+ID4gKyAgICByZXR1 cm4gRkFMU0U7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBQRW50cnlMQkEgPSAoUGFydEhlYWRl ci0+TXlMQkEgPT0gUFJJTUFSWV9QQVJUX0hFQURFUl9MQkEpID9cDQo+ID4gKyAgICAoUGFydEhl YWRlci0+TGFzdFVzYWJsZUxCQSArIDEpIDpcDQo+ID4gKyAgICAoUFJJTUFSWV9QQVJUX0hFQURF Ul9MQkEgKyAxKTsNCj4gPiArDQo+ID4gKyAgQ29weU1lbSAoUGFydEhkciwgUGFydEhlYWRlciwN Cj4gc2l6ZW9mKEVGSV9QQVJUSVRJT05fVEFCTEVfSEVBREVSKSk7DQo+ID4gKw0KPiA+ICsgIFBh cnRIZHItPk15TEJBICAgICAgICAgICAgICA9IFBhcnRIZWFkZXItPkFsdGVybmF0ZUxCQTsNCj4g PiArICBQYXJ0SGRyLT5BbHRlcm5hdGVMQkEgICAgICAgPSBQYXJ0SGVhZGVyLT5NeUxCQTsNCj4g PiArICBQYXJ0SGRyLT5QYXJ0aXRpb25FbnRyeUxCQSAgPSBQRW50cnlMQkE7DQo+ID4gKyAgUGFy dGl0aW9uU2V0Q3JjICgoRUZJX1RBQkxFX0hFQURFUiAqKVBhcnRIZHIpOw0KPiA+ICsNCj4gPiAr ICBTdGF0dXMgPSBEaXNrSW8tPldyaXRlRGlzayAoDQo+ID4gKyAgICBEaXNrSW8sDQo+ID4gKyAg ICBNZWRpYUlkLA0KPiA+ICsgICAgTXVsdFU2NHgzMiAoUGFydEhkci0+TXlMQkEsIChVSU5UMzIp QmxvY2tTaXplKSwNCj4gPiArICAgIEJsb2NrU2l6ZSwNCj4gPiArICAgIFBhcnRIZHINCj4gPiAr ICAgICk7DQo+ID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICsgICAgZ290byBE b25lOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgUHRyID0gQWxsb2NhdGVQb29sIChQYXJ0SGVh ZGVyLT5OdW1iZXJPZlBhcnRpdGlvbkVudHJpZXMgKg0KPiBQYXJ0SGVhZGVyLQ0KPiA+ID5TaXpl T2ZQYXJ0aXRpb25FbnRyeSk7DQo+ID4gKyAgaWYgKFB0ciA9PSBOVUxMKSB7DQo+ID4gKyAgICBE RUJVRyAoKEVGSV9EX0VSUk9SLCAiIEFsbG9jYXRlIHBvb2wgZXJyb3JcbiIpKTsNCj4gPiArICAg IFN0YXR1cyA9IEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiA+ICsgICAgZ290byBEb25lOw0KPiA+ ICsgIH0NCj4gPiArDQo+ID4gKyAgU3RhdHVzID0gRGlza0lvLT5SZWFkRGlzayAoDQo+ID4gKyAg ICBEaXNrSW8sDQo+ID4gKyAgICBNZWRpYUlkLA0KPiA+ICsgICAgTXVsdFU2NHgzMiAoUGFydEhl YWRlci0+UGFydGl0aW9uRW50cnlMQkEsIChVSU5UMzIpQmxvY2tTaXplKSwNCj4gPiArICAgIFBh cnRIZWFkZXItPk51bWJlck9mUGFydGl0aW9uRW50cmllcyAqIFBhcnRIZWFkZXItDQo+ID4gPlNp emVPZlBhcnRpdGlvbkVudHJ5LA0KPiA+ICsgICAgUHRyDQo+ID4gKyAgICApOw0KPiA+ICsgIGlm IChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiArICAgIGdvdG8gRG9uZTsNCj4gPiArICB9DQo+ ID4gKw0KPiA+ICsgIFN0YXR1cyA9IERpc2tJby0+V3JpdGVEaXNrICgNCj4gPiArICAgIERpc2tJ bywNCj4gPiArICAgIE1lZGlhSWQsDQo+ID4gKyAgICBNdWx0VTY0eDMyIChQRW50cnlMQkEsIChV SU5UMzIpQmxvY2tTaXplKSwNCj4gPiArICAgIFBhcnRIZWFkZXItPk51bWJlck9mUGFydGl0aW9u RW50cmllcyAqIFBhcnRIZWFkZXItDQo+ID4gPlNpemVPZlBhcnRpdGlvbkVudHJ5LA0KPiA+ICsg ICAgUHRyDQo+ID4gKyAgICApOw0KPiA+ICsNCj4gPiArIERvbmU6DQo+ID4gKyAgRnJlZVBvb2wg KFBhcnRIZHIpOw0KPiA+ICsNCj4gPiArICBpZiAoUHRyICE9IE5VTEwpIHsNCj4gPiArICAgIEZy ZWVQb29sIChQdHIpOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgaWYgKEVGSV9FUlJPUiAoU3Rh dHVzKSkgew0KPiA+ICsgICAgcmV0dXJuIEZBTFNFOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAg cmV0dXJuIFRSVUU7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFRoaXMgcm91dGlu ZSB3aWxsIGNoZWNrIEdQVCBwYXJ0aXRpb24gZW50cnkgYW5kIHJldHVybiBlbnRyeSBzdGF0dXMu DQo+ID4gKw0KPiA+ICsgIENhdXRpb246IFRoaXMgZnVuY3Rpb24gbWF5IHJlY2VpdmUgdW50cnVz dGVkIGlucHV0Lg0KPiA+ICsgIFRoZSBHUFQgcGFydGl0aW9uIGVudHJ5IGlzIGV4dGVybmFsIGlu cHV0LCBzbyB0aGlzIHJvdXRpbmUNCj4gPiArICB3aWxsIGRvIGJhc2ljIHZhbGlkYXRpb24gZm9y IEdQVCBwYXJ0aXRpb24gZW50cnkgYW5kIHJlcG9ydCBzdGF0dXMuDQo+ID4gKw0KPiA+ICsgIEBw YXJhbVtpbl0gICAgUGFydEhlYWRlciAgICBQYXJ0aXRpb24gdGFibGUgaGVhZGVyIHN0cnVjdHVy ZQ0KPiA+ICsgIEBwYXJhbVtpbl0gICAgUGFydEVudHJ5ICAgICBUaGUgcGFydGl0aW9uIGVudHJ5 IGFycmF5DQo+ID4gKyAgQHBhcmFtW291dF0gICBQRW50cnlTdGF0dXMgIHRoZSBwYXJ0aXRpb24g ZW50cnkgc3RhdHVzIGFycmF5DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl Y29yZGluZyB0aGUgc3RhdHVzIG9mIGVhY2ggcGFydGl0aW9uDQo+ID4gKw0KPiA+ICsqKi8NCj4g PiArU1RBVElDDQo+ID4gK1ZPSUQNCj4gPiArUGFydGl0aW9uQ2hlY2tHcHRFbnRyeSAoDQo+ID4g KyAgSU4gIEVGSV9QQVJUSVRJT05fVEFCTEVfSEVBREVSICAqUGFydEhlYWRlciwNCj4gPiArICBJ TiAgRUZJX1BBUlRJVElPTl9FTlRSWSAgICAgICAgICpQYXJ0RW50cnksDQo+ID4gKyAgT1VUIEVG SV9QQVJUSVRJT05fRU5UUllfU1RBVFVTICAqUEVudHJ5U3RhdHVzDQo+ID4gKyAgKQ0KPiA+ICt7 DQo+ID4gKyAgRUZJX0xCQSAgICAgICAgICAgICAgU3RhcnRpbmdMQkE7DQo+ID4gKyAgRUZJX0xC QSAgICAgICAgICAgICAgRW5kaW5nTEJBOw0KPiA+ICsgIEVGSV9QQVJUSVRJT05fRU5UUlkgICpF bnRyeTsNCj4gPiArICBVSU5UTiAgICAgICAgICAgICAgICBJbmRleDE7DQo+ID4gKyAgVUlOVE4g ICAgICAgICAgICAgICAgSW5kZXgyOw0KPiA+ICsNCj4gPiArICBERUJVRyAoKEVGSV9EX1ZFUkJP U0UsICIgc3RhcnQgY2hlY2sgcGFydGl0aW9uIGVudHJpZXNcbiIpKTsNCj4gPiArICBmb3IgKElu ZGV4MSA9IDA7IEluZGV4MSA8IFBhcnRIZWFkZXItPk51bWJlck9mUGFydGl0aW9uRW50cmllczsN Cj4gPiBJbmRleDErKykgew0KPiA+ICsgICAgRW50cnkgPSAoRUZJX1BBUlRJVElPTl9FTlRSWSAq KSgoVUlOVDggKilQYXJ0RW50cnkgKyBJbmRleDEgKg0KPiA+IFBhcnRIZWFkZXItPlNpemVPZlBh cnRpdGlvbkVudHJ5KTsNCj4gPiArICAgIGlmIChDb21wYXJlR3VpZCAoJkVudHJ5LT5QYXJ0aXRp b25UeXBlR1VJRCwNCj4gPiAmZ0VmaVBhcnRUeXBlVW51c2VkR3VpZCkpIHsNCj4gPiArICAgICAg Y29udGludWU7DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ICsgICAgU3RhcnRpbmdMQkEgPSBFbnRy eS0+U3RhcnRpbmdMQkE7DQo+ID4gKyAgICBFbmRpbmdMQkEgICA9IEVudHJ5LT5FbmRpbmdMQkE7 DQo+ID4gKyAgICBpZiAoU3RhcnRpbmdMQkEgPiBFbmRpbmdMQkEgfHwNCj4gPiArICAgICAgICBT dGFydGluZ0xCQSA8IFBhcnRIZWFkZXItPkZpcnN0VXNhYmxlTEJBIHx8DQo+ID4gKyAgICAgICAg U3RhcnRpbmdMQkEgPiBQYXJ0SGVhZGVyLT5MYXN0VXNhYmxlTEJBIHx8DQo+ID4gKyAgICAgICAg RW5kaW5nTEJBIDwgUGFydEhlYWRlci0+Rmlyc3RVc2FibGVMQkEgfHwNCj4gPiArICAgICAgICBF bmRpbmdMQkEgPiBQYXJ0SGVhZGVyLT5MYXN0VXNhYmxlTEJBDQo+ID4gKyAgICAgICApIHsNCj4g PiArICAgICAgUEVudHJ5U3RhdHVzW0luZGV4MV0uT3V0T2ZSYW5nZSA9IFRSVUU7DQo+ID4gKyAg ICAgIGNvbnRpbnVlOw0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArICAgIGlmICgoRW50cnktPkF0 dHJpYnV0ZXMgJiBCSVQxKSAhPSAwKSB7DQo+ID4gKyAgICAgIC8vDQo+ID4gKyAgICAgIC8vIElm IEJpdCAxIGlzIHNldCwgdGhpcyBpbmRpY2F0ZSB0aGF0IHRoaXMgaXMgYW4gT1Mgc3BlY2lmaWMg R1VJRCBwYXJ0aXRpb24uDQo+ID4gKyAgICAgIC8vDQo+ID4gKyAgICAgIFBFbnRyeVN0YXR1c1tJ bmRleDFdLk9zU3BlY2lmaWMgPSBUUlVFOw0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArICAgIGZv ciAoSW5kZXgyID0gSW5kZXgxICsgMTsgSW5kZXgyIDwgUGFydEhlYWRlci0NCj4gPiA+TnVtYmVy T2ZQYXJ0aXRpb25FbnRyaWVzOyBJbmRleDIrKykgew0KPiA+ICsgICAgICBFbnRyeSA9IChFRklf UEFSVElUSU9OX0VOVFJZICopKChVSU5UOCAqKVBhcnRFbnRyeSArIEluZGV4MiAqDQo+ID4gUGFy dEhlYWRlci0+U2l6ZU9mUGFydGl0aW9uRW50cnkpOw0KPiA+ICsgICAgICBpZiAoQ29tcGFyZUd1 aWQgKCZFbnRyeS0+UGFydGl0aW9uVHlwZUdVSUQsDQo+ID4gJmdFZmlQYXJ0VHlwZVVudXNlZEd1 aWQpKSB7DQo+ID4gKyAgICAgICAgY29udGludWU7DQo+ID4gKyAgICAgIH0NCj4gPiArDQo+ID4g KyAgICAgIGlmIChFbnRyeS0+RW5kaW5nTEJBID49IFN0YXJ0aW5nTEJBICYmIEVudHJ5LT5TdGFy dGluZ0xCQSA8PQ0KPiBFbmRpbmdMQkEpDQo+ID4gew0KPiA+ICsgICAgICAgIC8vDQo+ID4gKyAg ICAgICAgLy8gVGhpcyByZWdpb24gb3ZlcmxhcHMgd2l0aCB0aGUgSW5kZXgxJ3RoIHJlZ2lvbg0K PiA+ICsgICAgICAgIC8vDQo+ID4gKyAgICAgICAgUEVudHJ5U3RhdHVzW0luZGV4MV0uT3Zlcmxh cCAgPSBUUlVFOw0KPiA+ICsgICAgICAgIFBFbnRyeVN0YXR1c1tJbmRleDJdLk92ZXJsYXAgID0g VFJVRTsNCj4gPiArICAgICAgICBjb250aW51ZTsNCj4gPiArICAgICAgfQ0KPiA+ICsgICAgfQ0K PiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgREVCVUcgKChFRklfRF9WRVJCT1NFLCAiIEVuZCBjaGVj ayBwYXJ0aXRpb24gZW50cmllc1xuIikpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsNCj4gPiArLyoq DQo+ID4gKyAgVXBkYXRlcyB0aGUgQ1JDMzIgdmFsdWUgaW4gdGhlIHRhYmxlIGhlYWRlci4NCj4g PiArDQo+ID4gKyAgQHBhcmFtICBIZHIgICAgVGFibGUgdG8gdXBkYXRlDQo+ID4gKw0KPiA+ICsq Ki8NCj4gPiArU1RBVElDDQo+ID4gK1ZPSUQNCj4gPiArUGFydGl0aW9uU2V0Q3JjICgNCj4gPiAr ICBJTiBPVVQgRUZJX1RBQkxFX0hFQURFUiAqSGRyDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAg UGFydGl0aW9uU2V0Q3JjQWx0U2l6ZSAoSGRyLT5IZWFkZXJTaXplLCBIZHIpOw0KPiA+ICt9DQo+ ID4gKw0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgVXBkYXRlcyB0aGUgQ1JDMzIgdmFsdWUgaW4g dGhlIHRhYmxlIGhlYWRlci4NCj4gPiArDQo+ID4gKyAgQHBhcmFtICBTaXplICAgVGhlIHNpemUg b2YgdGhlIHRhYmxlDQo+ID4gKyAgQHBhcmFtICBIZHIgICAgVGFibGUgdG8gdXBkYXRlDQo+ID4g Kw0KPiA+ICsqKi8NCj4gPiArU1RBVElDDQo+ID4gK1ZPSUQNCj4gPiArUGFydGl0aW9uU2V0Q3Jj QWx0U2l6ZSAoDQo+ID4gKyAgSU4gVUlOVE4gICAgICAgICAgICAgICAgIFNpemUsDQo+ID4gKyAg SU4gT1VUIEVGSV9UQUJMRV9IRUFERVIgICpIZHINCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBV SU5UMzIgIENyYzsNCj4gPiArDQo+ID4gKyAgSGRyLT5DUkMzMiA9IDA7DQo+ID4gKyAgZ0JTLT5D YWxjdWxhdGVDcmMzMiAoKFVJTlQ4ICopSGRyLCBTaXplLCAmQ3JjKTsNCj4gPiArICBIZHItPkNS QzMyID0gQ3JjOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgQ2hlY2tz IHRoZSBDUkMzMiB2YWx1ZSBpbiB0aGUgdGFibGUgaGVhZGVyLg0KPiA+ICsNCj4gPiArICBAcGFy YW0gIE1heFNpemUgICBNYXggU2l6ZSBsaW1pdA0KPiA+ICsgIEBwYXJhbSAgSGRyICAgICAgIFRh YmxlIHRvIGNoZWNrDQo+ID4gKw0KPiA+ICsgIEByZXR1cm4gVFJVRSAgICAgIENSQyBWYWxpZA0K PiA+ICsgIEByZXR1cm4gRkFMU0UgICAgIENSQyBJbnZhbGlkDQo+ID4gKw0KPiA+ICsqKi8NCj4g PiArU1RBVElDDQo+ID4gK0JPT0xFQU4NCj4gPiArUGFydGl0aW9uQ2hlY2tDcmMgKA0KPiA+ICsg IElOIFVJTlROICAgICAgICAgICAgICAgICBNYXhTaXplLA0KPiA+ICsgIElOIE9VVCBFRklfVEFC TEVfSEVBREVSICAqSGRyDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgcmV0dXJuIFBhcnRpdGlv bkNoZWNrQ3JjQWx0U2l6ZSAoTWF4U2l6ZSwgSGRyLT5IZWFkZXJTaXplLCBIZHIpOw0KPiA+ICt9 DQo+ID4gKw0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgQ2hlY2tzIHRoZSBDUkMzMiB2YWx1ZSBp biB0aGUgdGFibGUgaGVhZGVyLg0KPiA+ICsNCj4gPiArICBAcGFyYW0gIE1heFNpemUgICBNYXgg U2l6ZSBsaW1pdA0KPiA+ICsgIEBwYXJhbSAgU2l6ZSAgICAgIFRoZSBzaXplIG9mIHRoZSB0YWJs ZQ0KPiA+ICsgIEBwYXJhbSAgSGRyICAgICAgIFRhYmxlIHRvIGNoZWNrDQo+ID4gKw0KPiA+ICsg IEByZXR1cm4gVFJVRSAgICBDUkMgVmFsaWQNCj4gPiArICBAcmV0dXJuIEZBTFNFICAgQ1JDIElu dmFsaWQNCj4gPiArDQo+ID4gKyoqLw0KPiA+ICtTVEFUSUMNCj4gPiArQk9PTEVBTg0KPiA+ICtQ YXJ0aXRpb25DaGVja0NyY0FsdFNpemUgKA0KPiA+ICsgIElOIFVJTlROICAgICAgICAgICAgICAg ICBNYXhTaXplLA0KPiA+ICsgIElOIFVJTlROICAgICAgICAgICAgICAgICBTaXplLA0KPiA+ICsg IElOIE9VVCBFRklfVEFCTEVfSEVBREVSICAqSGRyDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAg VUlOVDMyICAgICAgQ3JjOw0KPiA+ICsgIFVJTlQzMiAgICAgIE9yZ0NyYzsNCj4gPiArICBFRklf U1RBVFVTICBTdGF0dXM7DQo+ID4gKw0KPiA+ICsgIENyYyA9IDA7DQo+ID4gKw0KPiA+ICsgIGlm IChTaXplID09IDApIHsNCj4gPiArICAgIC8vDQo+ID4gKyAgICAvLyBJZiBoZWFkZXIgc2l6ZSBp cyAwIENSQyB3aWxsIHBhc3Mgc28gcmV0dXJuIEZBTFNFIGhlcmUNCj4gPiArICAgIC8vDQo+ID4g KyAgICByZXR1cm4gRkFMU0U7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBpZiAoKE1heFNpemUg IT0gMCkgJiYgKFNpemUgPiBNYXhTaXplKSkgew0KPiA+ICsgICAgREVCVUcgKChFRklfRF9FUlJP UiwgIkNoZWNrQ3JjMzI6IFNpemUgPiBNYXhTaXplXG4iKSk7DQo+ID4gKyAgICByZXR1cm4gRkFM U0U7DQo+ID4gKyAgfQ0KPiA+ICsgIC8vDQo+ID4gKyAgLy8gY2xlYXIgb2xkIGNyYyBmcm9tIGhl YWRlcg0KPiA+ICsgIC8vDQo+ID4gKyAgT3JnQ3JjICAgICAgPSBIZHItPkNSQzMyOw0KPiA+ICsg IEhkci0+Q1JDMzIgID0gMDsNCj4gPiArDQo+ID4gKyAgU3RhdHVzICAgICAgPSBnQlMtPkNhbGN1 bGF0ZUNyYzMyICgoVUlOVDggKilIZHIsIFNpemUsICZDcmMpOw0KPiA+ICsgIGlmIChFRklfRVJS T1IgKFN0YXR1cykpIHsNCj4gPiArICAgIERFQlVHICgoRUZJX0RfRVJST1IsICJDaGVja0NyYzMy OiBDcmMgY2FsY3VsYXRpb24gZmFpbGVkXG4iKSk7DQo+ID4gKyAgICByZXR1cm4gRkFMU0U7DQo+ ID4gKyAgfQ0KPiA+ICsgIC8vDQo+ID4gKyAgLy8gc2V0IHJlc3VsdHMNCj4gPiArICAvLw0KPiA+ ICsgIEhkci0+Q1JDMzIgPSBDcmM7DQo+ID4gKw0KPiA+ICsgIC8vDQo+ID4gKyAgLy8gcmV0dXJu IHN0YXR1cw0KPiA+ICsgIC8vDQo+ID4gKyAgREVCVUdfQ09ERV9CRUdJTiAoKTsNCj4gPiArICBp ZiAoT3JnQ3JjICE9IENyYykgew0KPiA+ICsgICAgREVCVUcgKChFRklfRF9FUlJPUiwgIkNoZWNr Q3JjMzI6IENyYyBjaGVjayBmYWlsZWRcbiIpKTsNCj4gPiArICB9DQo+ID4gKyAgREVCVUdfQ09E RV9FTkQgKCk7DQo+ID4gKw0KPiA+ICsgIHJldHVybiAoQk9PTEVBTikoT3JnQ3JjID09IENyYyk7 DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIENvbnZlcnRzIGEgR1VJRCBpbnRvIGEg dW5pY29kZSBzdHJpbmcuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbSAgW2luXSBHdWlkICAgICAgICAg ICAgIEEgR1VJRCB0byBiZSBjb252ZXJ0ZWQNCj4gPiArICBAcGFyYW0gIFtvdXRdIEJ1ZmZlciAg ICAgICAgICBBIHBvaW50ZXIgdG8gYSBidWZmZXIgcmVjZWl2aW5nIHRoZSBzdHJpbmcNCj4gPiAr ICBAcGFyYW0gIFtpbl0gQnVmZmVyU2l6ZSAgICAgICBTaXplIG9mIHRoZSBidWZmZXINCj4gPiAr DQo+ID4gKyAgQHJldHVybiBFRklfU1VDQ0VTUyAgICAgICAgICAgU3VjY2Vzc2Z1bCBjb252ZXJz aW9uDQo+ID4gKyAgQHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVIgQ29udmVyc2lvbiBmYWls ZWQNCj4gPiArDQo+ID4gKyoqLw0KPiA+ICsNCj4gPiArU1RBVElDDQo+ID4gK0VGSV9TVEFUVVMN Cj4gPiArR3VpZFRvU3RyaW5nICgNCj4gPiArICBJTiAgRUZJX0dVSUQgICpHdWlkLA0KPiA+ICsg IE9VVCBDSEFSMTYgICAgKkJ1ZmZlciwNCj4gPiArICBJTiAgVUlOVE4gICAgIEJ1ZmZlclNpemUN Cj4gPiArICApDQo+ID4gK3sNCj4gPiArICBVSU5UTiBTaXplOw0KPiA+ICsgIEVGSV9TVEFUVVMg U3RhdHVzOw0KPiA+ICsNCj4gPiArICBTdGF0dXMgPSBFRklfU1VDQ0VTUzsNCj4gPiArDQo+ID4g KyAgU2l6ZSA9IFVuaWNvZGVTUHJpbnQgKA0KPiA+ICsgICAgQnVmZmVyLA0KPiA+ICsgICAgQnVm ZmVyU2l6ZSwNCj4gPiArICAgIEwiJTA4eC0lMDR4LSUwNHgtJTAyeCUwMngtJTAyeCUwMnglMDJ4 JTAyeCUwMnglMDJ4IiwNCj4gPiArICAgIChVSU5UTilHdWlkLT5EYXRhMSwNCj4gPiArICAgIChV SU5UTilHdWlkLT5EYXRhMiwNCj4gPiArICAgIChVSU5UTilHdWlkLT5EYXRhMywNCj4gPiArICAg IChVSU5UTilHdWlkLT5EYXRhNFswXSwNCj4gPiArICAgIChVSU5UTilHdWlkLT5EYXRhNFsxXSwN Cj4gPiArICAgIChVSU5UTilHdWlkLT5EYXRhNFsyXSwNCj4gPiArICAgIChVSU5UTilHdWlkLT5E YXRhNFszXSwNCj4gPiArICAgIChVSU5UTilHdWlkLT5EYXRhNFs0XSwNCj4gPiArICAgIChVSU5U TilHdWlkLT5EYXRhNFs1XSwNCj4gPiArICAgIChVSU5UTilHdWlkLT5EYXRhNFs2XSwNCj4gPiAr ICAgIChVSU5UTilHdWlkLT5EYXRhNFs3XQ0KPiA+ICsgICAgKTsNCj4gPiArICBpZiAoIVNpemUp IHsNCj4gPiArICAgIFN0YXR1cyA9IEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gPiArICB9DQo+ ID4gKw0KPiA+ICsgIHJldHVybiBTdGF0dXM7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ ICsgIEdldCBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIGtub3duDQo+ID4gKyAgcGFydGl0 aW9uIHR5cGUgR1VJRC4gSWYgcGFydGl0aW9uIEdVSUQgaXMgbm90DQo+ID4gKyAga25vd24sIGdl dHMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIEdVSUQNCj4gPiArDQo+ID4gKyAgQHBh cmFtICBHVUlEICAgICAgICAgIEd1aWQgdG8gYmUgc2VhcmNoZWQgZm9yDQo+ID4gKyAgQHBhcmFt ICBQYXJ0VHlwZVN0ciAgIEJ1ZmZlciByZWNlaXZpbmcgdGhlIHN0cmluZw0KPiA+ICsgIEBwYXJh bSAgTm9HdWlkU3RyICAgICBEbyBub3QgY29udmVydCBHVUlEIHRvIHN0cmluZw0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICBmb3IgYW4gdW5rbm93biBwYXJ0aXRpb24gdHlwZQ0KPiA+ICsN Cj4gPiArICBAcmV0dXJuIEVGSV9TVUNDRVNTICAgR1VJRCB0eXBlIGlzIGtub3duDQo+ID4gKyAg QHJldHVybiBFRklfTk9UX0ZPVU5EIFVua25vd24gR1VJRCBwYXJ0aXRpb24gdHlwZQ0KPiA+ICsN Cj4gPiArKiovDQo+ID4gK0VGSV9TVEFUVVMNCj4gPiArR2V0UGFydGl0aW9uVHlwZVN0ciAoDQo+ ID4gKyAgSU4gRUZJX0dVSUQgR3VpZCwNCj4gPiArICBPVVQgQ0hBUjE2ICpQYXJ0VHlwZVN0ciwN Cj4gPiArICBJTiBCT09MRUFOIE5vR3VpZFN0cikNCj4gPiArew0KPiA+ICsgIFVJTlROIEluZGV4 Ow0KPiA+ICsgIEVGSV9TVEFUVVMgU3RhdHVzOw0KPiA+ICsNCj4gPiArICBTdGF0dXMgPSBFRklf U1VDQ0VTUzsNCj4gPiArICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBBUlJBWV9TSVpFIChQYXJ0 aXRpb25UeXBlcyk7IEluZGV4KyspIHsNCj4gPiArICAgIGlmIChDb21wYXJlR3VpZCAoJkd1aWQs ICZQYXJ0aXRpb25UeXBlc1tJbmRleF0uVHlwZUd1aWQpKSB7DQo+ID4gKyAgICAgIFN0cm5DcHkg KFBhcnRUeXBlU3RyLCBQYXJ0aXRpb25UeXBlc1tJbmRleF0uVHlwZU5hbWUsDQo+ID4gTUFYX1BB UlRJVElPTl9OQU1FX0xFTkdUSCk7DQo+ID4gKyAgICAgIHJldHVybiBTdGF0dXM7DQo+ID4gKyAg ICB9DQo+ID4gKyAgfQ0KPiA+ICsgIGlmICghTm9HdWlkU3RyKSB7DQo+ID4gKyAgICBHdWlkVG9T dHJpbmcgKCZHdWlkLCBQYXJ0VHlwZVN0ciwgKE1BWF9QQVJUSVRJT05fTkFNRV9MRU5HVEggKw0K PiAxKQ0KPiA+ICogc2l6ZW9mKENIQVIxNikpOw0KPiA+ICsgIH0NCj4gPiArICByZXR1cm4gRUZJ X05PVF9GT1VORDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgTGlzdHMgcGFydGl0 aW9ucyBvbiBhIGJsb2NrIGRldmljZS4NCj4gPiArDQo+ID4gKyAgQHJldHVybiAgIE51bWJlciBv ZiBwYXJ0aXRpb25zIHVzZWQNCj4gPiArKiovDQo+ID4gKw0KPiA+ICtVSU5UTg0KPiA+ICtQYXJ0 aXRpb25MaXN0R3B0RW50cmllcyAoVk9JRCkNCj4gPiArew0KPiA+ICsgIFVJTlROICAgICAgICAg ICAgICAgIEluZGV4Ow0KPiA+ICsgIEVGSV9QQVJUSVRJT05fRU5UUlkgICpFbnRyeTsNCj4gPiAr ICBFRklfTEJBICAgICAgICAgICAgICBMZW5ndGg7DQo+ID4gKyAgVUlOVE4gICAgICAgICAgICAg ICAgTnVtRW50cmllczsgLy8gVXNlZCBlbnRyaWVzDQo+ID4gKyAgVUlOVE4gICAgICAgICAgICAg ICAgQmxvY2tTaXplOw0KPiA+ICsgIEJPT0xFQU4gICAgICAgICAgICAgIEZpcnN0VGltZTsNCj4g PiArICBVSU5UNjQgICAgICAgICAgICAgICBCbG9ja3NPY2N1cGllZDsNCj4gPiArDQo+ID4gKyAg TnVtRW50cmllcyA9IDA7DQo+ID4gKyAgQmxvY2tTaXplID0gQmxvY2tJby0+TWVkaWEtPkJsb2Nr U2l6ZTsNCj4gPiArICBGaXJzdFRpbWUgPSBUUlVFOw0KPiA+ICsNCj4gPiArICBpZiAoIUdwdFZh bGlkKSB7DQo+ID4gKyAgICByZXR1cm4gMDsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIEJsb2Nr c09jY3VwaWVkID0gMDsNCj4gPiArDQo+ID4gKyAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgUHJp bWFyeUhlYWRlci0+TnVtYmVyT2ZQYXJ0aXRpb25FbnRyaWVzOw0KPiA+IEluZGV4KyspIHsNCj4g PiArDQo+ID4gKyAgICBCT09MRUFOIFNwZWNpZmljOw0KPiA+ICsgICAgQ0hBUjE2IFBhcnRUeXBl U3RyW01BWF9QQVJUSVRJT05fTkFNRV9MRU5HVEggKyAxXTsNCj4gPiArDQo+ID4gKyAgICBTcGVj aWZpYyA9IEZBTFNFOw0KPiA+ICsNCj4gPiArICAgIEVudHJ5ID0gKEVGSV9QQVJUSVRJT05fRU5U UlkgKikoKFVJTlQ4ICopUGFydEVudHJ5ICsgSW5kZXggKg0KPiA+IFByaW1hcnlIZWFkZXItPlNp emVPZlBhcnRpdGlvbkVudHJ5KTsNCj4gPiArDQo+ID4gKyAgICBMZW5ndGggPSBFbnRyeS0+RW5k aW5nTEJBIC0gRW50cnktPlN0YXJ0aW5nTEJBICsgMTsNCj4gPiArDQo+ID4gKyAgICBpZiAoQ29t cGFyZUd1aWQgKCZFbnRyeS0+UGFydGl0aW9uVHlwZUdVSUQsDQo+ID4gJmdFZmlQYXJ0VHlwZVVu dXNlZEd1aWQpKSB7DQo+ID4gKyAgICAgIGNvbnRpbnVlOw0KPiA+ICsgICAgfQ0KPiA+ICsNCj4g PiArICAgIGlmIChGaXJzdFRpbWUpIHsNCj4gPiArICAgICAgUHJpbnQgKEwiICBObyBcdCUtMzZz XHRTdGFydCAoTEJBKVx0RW5kIChMQkEpXHRTaXplIChNaUIpXHQgUGFydGl0aW9uDQo+ID4gVHlw ZVxyXG4iLCBMIk5hbWUiKTsNCj4gPiArICAgICAgUHJpbnQgKEwiIC0tLS0gIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgLS0tLS0tLS0tLS0gICAgIC0tLS0tLS0tLS0t ICAgICAtLS0NCj4gLS0NCj4gPiAtLS0tLSAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tXHJcbiIpOw0KPiA+ICsgICAgICBGaXJzdFRpbWUgPSBGQUxTRTsNCj4gPiArICAgIH0N Cj4gPiArICAgIE51bUVudHJpZXMrKzsNCj4gPiArICAgIGlmIChQRW50cnlTdGF0dXNbSW5kZXhd Lk91dE9mUmFuZ2UgfHwNCj4gPiArICAgICAgICBQRW50cnlTdGF0dXNbSW5kZXhdLk92ZXJsYXAg fHwNCj4gPiArICAgICAgICBQRW50cnlTdGF0dXNbSW5kZXhdLk9zU3BlY2lmaWMpIHsNCj4gPiAr ICAgICAgU3BlY2lmaWMgPSBUUlVFOw0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArICAgIEJsb2Nr c09jY3VwaWVkICs9IExlbmd0aDsNCj4gPiArDQo+ID4gKyAgICBHZXRQYXJ0aXRpb25UeXBlU3Ry IChFbnRyeS0+UGFydGl0aW9uVHlwZUdVSUQsIChDSEFSMTYNCj4gKikmUGFydFR5cGVTdHIsDQo+ ID4gRkFMU0UpOw0KPiA+ICsNCj4gPiArICAgIFByaW50IChMIiUxcyAlLTNkXHQlLTM2c1x0MHgl MDlsbHhcdDB4JTA5bGx4XHQlMDZsbHVcdCAgICAgICAgICVzXHJcbiIsDQo+ID4gKyAgICAgICAg ICAgU3BlY2lmaWMgPyBMIlMiIDogTCIiLA0KPiA+ICsgICAgICAgICAgIEluZGV4ICsgMSwNCj4g PiArICAgICAgICAgICBFbnRyeS0+UGFydGl0aW9uTmFtZSwNCj4gPiArICAgICAgICAgICAoVUlO VDY0KUVudHJ5LT5TdGFydGluZ0xCQSwNCj4gPiArICAgICAgICAgICAoVUlOVDY0KUVudHJ5LT5F bmRpbmdMQkEsDQo+ID4gKyAgICAgICAgICAgKE11bHRVNjR4MzIgKExlbmd0aCwgQmxvY2tTaXpl KSkgPj4gMjAsDQo+ID4gKyAgICAgICAgICAgUGFydFR5cGVTdHIpOw0KPiA+ICsgIH0NCj4gPiAr DQo+ID4gKyAgLy8gVGhpcyBjb2RlIGJsb2NrIGlzIHRvIHByb3ZpZGUgYWRkaXRpb25hbCBpbmZv DQo+ID4gKyAgew0KPiA+ICsgICAgVUlOVDY0IERpc2tTaXplTWlCLCBTaXplT2NjdXBpZWRNaUI7 DQo+ID4gKw0KPiA+ICsgICAgRGlza1NpemVNaUIgPSBNdWx0VTY0eDMyIChQcmltYXJ5SGVhZGVy LT5MYXN0VXNhYmxlTEJBIC0NCj4gPiBQcmltYXJ5SGVhZGVyLT5GaXJzdFVzYWJsZUxCQSArIDEs IEJsb2NrSW8tPk1lZGlhLT5CbG9ja1NpemUpID4+IDIwOw0KPiA+ICsgICAgU2l6ZU9jY3VwaWVk TWlCID0gTXVsdFU2NHgzMiAoQmxvY2tzT2NjdXBpZWQsIEJsb2NrSW8tPk1lZGlhLQ0KPiA+ID5C bG9ja1NpemUpID4+IDIwOw0KPiA+ICsgICAgUHJpbnQgKEwiXHJcbiVkIHBhcnRpdGlvbihzKSB1 c2VkIG91dCBvZiAlZFxyXG4iLCBOdW1FbnRyaWVzLA0KPiA+IFByaW1hcnlIZWFkZXItPk51bWJl ck9mUGFydGl0aW9uRW50cmllcyk7DQo+ID4gKyAgICBQcmludCAoTCJUb3RhbCBkZXZpY2UgY2Fw YWNpdHkgKG1pbnVzIEdQVCBzZXJ2aWNlIGJsb2Nrcyk6ICVsbHUNCj4gPiBNaUJcclxuUGFydGl0 aW9uZWQgc3BhY2U6ICVsbHUgTWlCXHJcbiIsDQo+ID4gKyAgICAgICAgICAgRGlza1NpemVNaUIs DQo+ID4gKyAgICAgICAgICAgU2l6ZU9jY3VwaWVkTWlCKTsNCj4gPiArICAgIFByaW50IChMIlVu cGFydGl0aW9uZWQgc3BhY2UgYXZhaWxhYmxlOiAlbGx1IE1pQiAoJWQlJSlcbiIsDQo+ID4gKyAg ICAgICAgICAgRGlza1NpemVNaUIgLSBTaXplT2NjdXBpZWRNaUIsDQo+ID4gKyAgICAgICAgICAg KDEwMCAqIChEaXNrU2l6ZU1pQiAtIFNpemVPY2N1cGllZE1pQikpIC8gRGlza1NpemVNaUIpOw0K PiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgcmV0dXJuIE51bUVudHJpZXM7DQo+ID4gK30NCj4gPiAr DQo+ID4gKy8qKg0KPiA+ICsgIExvY2F0ZSBhIHBhcnRpdGlvbiBieSBjcml0ZXJpYQ0KPiA+ICsN Cj4gPiArICBAcGFyYW0gIE5hbWUgICAgICAgICBQYXJ0aXRpb24gbmFtZSAob3Igb3JkaW5hbCBy ZXByZXNlbnRlZCBhIHN0cmluZykNCj4gPiArICBAcGFyYW0gIFN0YXJ0TGJhICAgICBTdGFydExi YSBvZiB0aGUgcGFydGl0aW9uIHRvIHNlYXJjaCBmb3INCj4gPiArICBAcGFyYW0gIEVuZGluZ0xi YSAgICBFbmRpbmdMYmEgb2YgdGhlIHBhcnRpdGlvbiB0byBzZWFyY2ggZm9yDQo+ID4gKyAgQHBh cmFtICBTZWFyY2hUeXBlICAgQSBjb21iaW5hdGlvbiAoT1IpIG9mIHNlYXJjaCBvcHRpb25zLg0K PiA+ICsgICAgICAgICAgICAgICAgICAgICAgIE9wdGlvbnMgYXJlOg0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICBTUkNfQllfTkFNRSAgICA9IHNlYXJjaCBieSBwYXJ0aXRpb24gbmFtZQ0K PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICBTUkNfQllfTEJBICAgICA9IHNlYXJjaCBieSBT dGFydC9FbmRpbmcgbGJhDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgIFNSQ19BTlkgICAg ICAgID0gcmV0dXJucyBhIGZpcnN0IHVzZWQgcGFydGl0aW9uDQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgIFNSQ19CWV9OVU0gICAgID0gc2VhcmNoIGJ5IG9yZGluYWwNCj4gPiArDQo+ID4g Kw0KPiA+ICsgIEByZXR1cm4gTm9uLU5VTEwgICAgUG9pbnRlciB0byB0aCBwYXJ0aXRpb24gZm91 bmQNCj4gPiArICBAcmV0dXJuIE5VTEwgICAgICAgIE5vIHBhcnRpdGlvbiBmb3VuZA0KPiA+ICsN Cj4gPiArKiovDQo+ID4gK0VGSV9QQVJUSVRJT05fRU5UUlkgKg0KPiA+ICtQYXJ0aXRpb25GaW5k UGFydGl0aW9uQnlDcml0ZXJpYSAoDQo+ID4gKyAgSU4gT1BUSU9OQUwgQ09OU1QgQ0hBUjE2ICAg Kk5hbWUsDQo+ID4gKyAgSU4gT1BUSU9OQUwgRUZJX0xCQSAgICAgICAgU3RhcnRMYmEsDQo+ID4g KyAgSU4gT1BUSU9OQUwgRUZJX0xCQSAgICAgICAgRW5kaW5nTGJhLA0KPiA+ICsgIElOIFNFQVJD SF9UWVBFICAgICAgICAgICAgIFNlYXJjaFR5cGUNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBV SU5UTiAgICAgICAgICAgICAgICBJbmRleDsNCj4gPiArICBFRklfUEFSVElUSU9OX0VOVFJZICAq RW50cnk7DQo+ID4gKw0KPiA+ICsgIGlmICghR3B0VmFsaWQpIHsNCj4gPiArICAgIHJldHVybiBO VUxMOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgaWYgKCFOYW1lICYmIChTZWFyY2hUeXBlICYg U1JDX0JZX05BTUUpKSB7DQo+ID4gKyAgICByZXR1cm4gTlVMTDsNCj4gPiArICB9DQo+ID4gKw0K PiA+ICsgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IFByaW1hcnlIZWFkZXItPk51bWJlck9mUGFy dGl0aW9uRW50cmllczsNCj4gPiBJbmRleCsrKSB7DQo+ID4gKyAgICBFbnRyeSA9IChFRklfUEFS VElUSU9OX0VOVFJZICopKChVSU5UOCAqKVBhcnRFbnRyeSArIEluZGV4ICoNCj4gPiBQcmltYXJ5 SGVhZGVyLT5TaXplT2ZQYXJ0aXRpb25FbnRyeSk7DQo+ID4gKw0KPiA+ICsgICAgaWYgKENvbXBh cmVHdWlkICgmRW50cnktPlBhcnRpdGlvblR5cGVHVUlELA0KPiA+ICZnRWZpUGFydFR5cGVVbnVz ZWRHdWlkKSkgew0KPiA+ICsgICAgICBjb250aW51ZTsNCj4gPiArICAgIH0NCj4gPiArDQo+ID4g KyAgICBpZiAoU2VhcmNoVHlwZSAmIFNSQ19BTlkpIHsNCj4gPiArICAgICAgcmV0dXJuIEVudHJ5 Ow0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArICAgIGlmIChTZWFyY2hUeXBlICYgU1JDX0JZX05B TUUpIHsNCj4gPiArICAgICAgaWYgKCFTdHJDbXAgKE5hbWUsIEVudHJ5LT5QYXJ0aXRpb25OYW1l KSkgew0KPiA+ICsgICAgICAgIHJldHVybiBFbnRyeTsNCj4gPiArICAgICAgfQ0KPiA+ICsgICAg fQ0KPiA+ICsgICAgaWYgKFNlYXJjaFR5cGUgJiBTUkNfQllfTlVNKSB7DQo+ID4gKyAgICAgIFVJ TlROIE9yZGluYWw7DQo+ID4gKw0KPiA+ICsgICAgICBPcmRpbmFsID0gU2hlbGxTdHJUb1VpbnRu IChOYW1lKTsNCj4gPiArICAgICAgaWYgKEluZGV4ID09IChPcmRpbmFsIC0gMSkpIHsNCj4gPiAr ICAgICAgICByZXR1cm4gRW50cnk7DQo+ID4gKyAgICAgIH0NCj4gPiArICAgIH0NCj4gPiArICAg IGlmIChTZWFyY2hUeXBlICYgU1JDX0JZX0xCQSkgew0KPiA+ICsgICAgICBpZiAoDQo+ID4gKyAg ICAgICAgICAoKFN0YXJ0TGJhID49IEVudHJ5LT5TdGFydGluZ0xCQSkgJiYNCj4gPiArICAgICAg ICAgICAoU3RhcnRMYmEgPD0gRW50cnktPkVuZGluZ0xCQSkNCj4gPiArICAgICAgICAgICkgfHwN Cj4gPiArICAgICAgICAgICgoRW5kaW5nTGJhID49IEVudHJ5LT5TdGFydGluZ0xCQSkgJiYNCj4g PiArICAgICAgICAgICAoRW5kaW5nTGJhIDw9IEVudHJ5LT5FbmRpbmdMQkEpDQo+ID4gKyAgICAg ICAgICApDQo+ID4gKyAgICAgICAgICkgew0KPiA+ICsgICAgICAgIHJldHVybiBFbnRyeTsNCj4g PiArICAgICAgfQ0KPiA+ICsgICAgfQ0KPiA+ICsgIH0NCj4gPiArICByZXR1cm4gTlVMTDsNCj4g PiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgUHJpbnRzIGluZm9ybWF0aW9uIG9uIGEgZ2l2 ZW4gcGFydGl0aW9uLg0KPiA+ICsNCj4gPiArICBAcGFyYW0gIEVudHJ5ICAgUG9pbnRlciB0byB0 aGUgUGFydGl0aW9uIG9mIGludGVyZXN0DQo+ID4gKyoqLw0KPiA+ICsNCj4gPiArVk9JRA0KPiA+ ICtQYXJ0aXRpb25QcmludEdwdFBhcnRJbmZvICgNCj4gPiArICBJTiBFRklfUEFSVElUSU9OX0VO VFJZICpFbnRyeQ0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIENPTlNUIENIQVIxNiBQYXJ0U3Ry W01BWF9QQVJUSVRJT05fTkFNRV9MRU5HVEggKyAxXSA9IHsgTCdcMCcgfTsNCj4gPiArICBDT05T VCBDSEFSMTYgKlN0clVua25vd24gPSBMIlVua25vd24iOw0KPiA+ICsgIEVGSV9TVEFUVVMgU3Rh dHVzOw0KPiA+ICsgIEVGSV9MQkEgTGVuZ3RoOw0KPiA+ICsNCj4gPiArICBBU1NFUlQgKEVudHJ5 KTsNCj4gPiArDQo+ID4gKyAgU3RhdHVzID0gR2V0UGFydGl0aW9uVHlwZVN0ciAoRW50cnktPlBh cnRpdGlvblR5cGVHVUlELCAoQ0hBUjE2DQo+ID4gKikmUGFydFN0ciwgVFJVRSk7DQo+ID4gKyAg aWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICsgICAgU3RyQ3B5ICgoQ0hBUjE2ICopJlBh cnRTdHIsIFN0clVua25vd24pOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgTGVuZ3RoID0gRW50 cnktPkVuZGluZ0xCQSAtIEVudHJ5LT5TdGFydGluZ0xCQSArIDE7DQo+ID4gKw0KPiA+ICsgIFBy aW50IChMIlBhcnRpdGlvbiBuYW1lOiAlc1xyXG4iLCBFbnRyeS0+UGFydGl0aW9uTmFtZSk7DQo+ ID4gKyAgUHJpbnQgKEwiU3RhcnRpbmcgTEJBICA6IDB4JTA5bGx4XHJcbkVuZGluZyBMQkEgICAg OiAweCUwOWxseFxyXG4iLA0KPiA+ICsgICAgICAgICAoVUlOVDY0KUVudHJ5LT5TdGFydGluZ0xC QSwgKFVJTlQ2NClFbnRyeS0+RW5kaW5nTEJBKTsNCj4gPiArICBQcmludCAoTCJQYXJ0aXRpb24g U2l6ZTogJWxsdSBNaUIgKDB4JWxseCBibG9ja3MpXG4iLA0KPiA+ICsgICAgICAgICAoTXVsdFU2 NHgzMiAoTGVuZ3RoLCBCbG9ja0lvLT5NZWRpYS0+QmxvY2tTaXplKSkgPj4gMjAsIExlbmd0aCk7 DQo+ID4gKyAgUHJpbnQgKEwiQXR0cmlidXRlcyAgICA6IDB4JTA5bGx4XHJcbiIsIEVudHJ5LT5B dHRyaWJ1dGVzKTsNCj4gPiArICBQcmludCAoTCJUeXBlL0dVSUQgICAgIDogJXMvJWdcclxuIiwg UGFydFN0ciwgJkVudHJ5LT5QYXJ0aXRpb25UeXBlR1VJRCk7DQo+ID4gKyAgUHJpbnQgKEwiVW5p cXVlIEdVSUQgICA6ICVnXG4iLCAmRW50cnktPlVuaXF1ZVBhcnRpdGlvbkdVSUQpOw0KPiA+ICt9 DQo+ID4gKw0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgV3JpdGVzIHByb3RlY3RpdmUgTUJSIHRv IGEgYmxvY2sgZGV2aWNlLg0KPiA+ICsNCj4gPiArICBAcmV0dXJuIEVGSV9TVUNDRVNTICAgIE1C UiB3cml0dGVuIHN1Y2Nlc3NmdWxseQ0KPiA+ICsgIEByZXR1cm4gb3RoZXIgICAgICAgICAgRmFp bGVkIHRvIHdyaXRlIGFuIE1CUg0KPiA+ICsNCj4gPiArKiovDQo+ID4gKw0KPiA+ICtTVEFUSUMN Cj4gPiArRUZJX1NUQVRVUw0KPiA+ICtXcml0ZVByb3RlY3RpdmVNYnIgKA0KPiA+ICsgIFZPSUQN Cj4gPiArICApDQo+ID4gK3sNCj4gPiArICBVSU5UMzIgICAgICAgICAgICAgICBCbG9ja1NpemU7 DQo+ID4gKyAgVUlOVDY0ICAgICAgICAgICAgICAgRGlza1NpemU7DQo+ID4gKyAgRUZJX1NUQVRV UyAgICAgICAgICAgU3RhdHVzOw0KPiA+ICsgIE1CUl9QQVJUSVRJT05fUkVDT1JEICpQYXJ0aXRp b247DQo+ID4gKyAgTUFTVEVSX0JPT1RfUkVDT1JEICAgKlByb3RlY3RpdmVNYnI7DQo+ID4gKw0K PiA+ICsgIEJsb2NrU2l6ZSA9IEJsb2NrSW8tPk1lZGlhLT5CbG9ja1NpemU7DQo+ID4gKw0KPiA+ ICsgIFByb3RlY3RpdmVNYnIgPSBOVUxMOw0KPiA+ICsgIFByb3RlY3RpdmVNYnIgPSBBbGxvY2F0 ZVplcm9Qb29sIChCbG9ja1NpemUpOw0KPiA+ICsgIGlmIChQcm90ZWN0aXZlTWJyID09IE5VTEwp IHsNCj4gPiArICAgIHJldHVybiBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4gPiArICB9DQo+ID4g Kw0KPiA+ICsgIERpc2tTaXplID0gQmxvY2tJby0+TWVkaWEtPkxhc3RCbG9jayArIDE7DQo+ID4g KyAgaWYgKERpc2tTaXplID4gMHhmZmZmZmZmZikgew0KPiA+ICsgICAgRGlza1NpemUgPSAweGZm ZmZmZmZmOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgQ29weU1lbSAoUHJvdGVjdGl2ZU1iciwg JlByb3RlY3RpdmVNYnJUZW1wbGF0ZSwNCj4gPiBzaXplb2YoTUFTVEVSX0JPT1RfUkVDT1JEKSk7 DQo+ID4gKw0KPiA+ICsgIFBhcnRpdGlvbiA9ICZQcm90ZWN0aXZlTWJyLT5QYXJ0aXRpb25bMF07 DQo+ID4gKw0KPiA+ICsgIFBhcnRpdGlvbi0+Qm9vdEluZGljYXRvciA9IDA7DQo+ID4gKyAgUGFy dGl0aW9uLT5TdGFydFNlY3RvciA9IDE7DQo+ID4gKw0KPiA+ICsgIC8vDQo+ID4gKyAgLy8gV2Ug ZG9uJ3QgYWN0dWFsbHkga25vdyB0aGlzIGRhdGEsIHNvIHdlJ2xsIG1ha2UgdXANCj4gPiArICAv LyBzb21ldGhpbmcgdGhhdCBzZWVtcyBsaWtlbHkuDQo+ID4gKyAgLy8NCj4gPiArDQo+ID4gKyAg Ly8NCj4gPiArICAvLyBPbGQgc29mdHdhcmUgaXMgZXhwZWN0aW5nIHRoZSBQYXJ0aXRpb24gdG8g c3RhcnQgb24NCj4gPiArICAvLyBhIFRyYWNrIGJvdW5kYXJ5LCBzbyB3ZSdsbCBzZXQgdHJhY2sg dG8gMSB0byBhdm9pZCAib3ZlcmxheSINCj4gPiArICAvLyB3aXRoIHRoZSBNQlINCj4gPiArICAv Lw0KPiA+ICsNCj4gPiArICBQYXJ0aXRpb24tPlN0YXJ0VHJhY2sgPSAxOw0KPiA+ICsNCj4gPiAr ICBTdGF0dXMgPSBEaXNrSW8tPldyaXRlRGlzayAoDQo+ID4gKyAgICBEaXNrSW8sDQo+ID4gKyAg ICBCbG9ja0lvLT5NZWRpYS0+TWVkaWFJZCwNCj4gPiArICAgIDAsDQo+ID4gKyAgICBCbG9ja1Np emUsDQo+ID4gKyAgICBQcm90ZWN0aXZlTWJyDQo+ID4gKyAgICApOw0KPiA+ICsNCj4gPiArICBN YnJWYWxpZCA9ICFFRklfRVJST1IgKFN0YXR1cyk7DQo+ID4gKw0KPiA+ICsgIFNIRUxMX0ZSRUVf Tk9OX05VTEwgKFByb3RlY3RpdmVNYnIpOw0KPiA+ICsNCj4gPiArICByZXR1cm4gU3RhdHVzOw0K PiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBXcml0ZSBHUFQgdGFibGVzIHRvIHRoZSBi bG9jayBkZXZpY2UuDQo+ID4gKw0KPiA+ICsgIEByZXR1cm4gRUZJX1NVQ0NFU1MgICAgR1BUIHRh YmxlcyB3ZXJlIHN1Y2Nlc3NmdWxseSB3cml0dGVuL3VwZGF0ZWQNCj4gPiArICBAcmV0dXJuIG90 aGVyICAgICAgICAgIEZhaWxlZCB0byB3cml0ZS91cGRhdGUgR1BUIHRhYmxlcw0KPiA+ICsNCj4g PiArKiovDQo+ID4gKw0KPiA+ICtTVEFUSUMNCj4gPiArRUZJX1NUQVRVUw0KPiA+ICtXcml0ZUdQ VCAoDQo+ID4gKyAgVk9JRA0KPiA+ICsgICkNCj4gPiArLyoNCj4gPiArICAgIENBTExFUiBpcyBl eHBlY3RlZCB0byBmaWxsIGluOg0KPiA+ICsgICAgICAgICAgICBGaXJzdFVzZWFibGVMQkENCj4g PiArICAgICAgICAgICAgTGFzdFVzZWFibGVMQkENCj4gPiArICAgICAgICAgICAgRW50cnlDb3Vu dA0KPiA+ICsgICAgICAgICAgICBEaXNrR1VJRA0KPiA+ICsNCj4gPiArICAgIFdlIGZpbGwgaW4g dGhlIHJlc3QsIGFuZCBibGFzdCBpdCBvdXQuDQo+ID4gKw0KPiA+ICsgICAgUmV0dXJucyBhIHN0 YXR1cy4NCj4gPiArDQo+ID4gKyovDQo+ID4gK3sNCj4gPiArICBVSU5UMzIgICAgICBCbG9ja1Np emU7DQo+ID4gKyAgVUlOVDMyICAgICAgVGFibGVTaXplOw0KPiA+ICsgIEVGSV9TVEFUVVMgIFN0 YXR1cyA9IEVGSV9TVUNDRVNTOw0KPiA+ICsNCj4gPiArICBCbG9ja1NpemUgPSBCbG9ja0lvLT5N ZWRpYS0+QmxvY2tTaXplOw0KPiA+ICsgIFRhYmxlU2l6ZSA9IFByaW1hcnlIZWFkZXItPk51bWJl ck9mUGFydGl0aW9uRW50cmllcyAqDQo+ID4gc2l6ZW9mKEVGSV9QQVJUSVRJT05fRU5UUlkpOw0K PiA+ICsNCj4gPiArICBpZiAoIU1iclZhbGlkKSB7DQo+ID4gKyAgICBXcml0ZVByb3RlY3RpdmVN YnIgKCk7DQo+ID4gKyAgfQ0KPiA+ICsgIC8vDQo+ID4gKyAgLy8gV3JpdGUgb3V0IHRoZSBwcmlt YXJ5IGhlYWRlci4uLg0KPiA+ICsgIC8vDQo+ID4gKyAgUHJpbWFyeUhlYWRlci0+SGVhZGVyLlNp Z25hdHVyZSA9IEVGSV9QVEFCX0hFQURFUl9JRDsNCj4gPiArICBQcmltYXJ5SGVhZGVyLT5IZWFk ZXIuUmV2aXNpb24gPSBHUFRfUkVWSVNJT05fMV8wOw0KPiA+ICsgIFByaW1hcnlIZWFkZXItPkhl YWRlci5IZWFkZXJTaXplID0NCj4gPiBzaXplb2YoRUZJX1BBUlRJVElPTl9UQUJMRV9IRUFERVIp Ow0KPiA+ICsNCj4gPiArICBQcmltYXJ5SGVhZGVyLT5BbHRlcm5hdGVMQkEgPSBCYWNrdXBIZWFk ZXItPk15TEJBOw0KPiA+ICsNCj4gPiArICBQcmltYXJ5SGVhZGVyLT5TaXplT2ZQYXJ0aXRpb25F bnRyeSA9IHNpemVvZihFRklfUEFSVElUSU9OX0VOVFJZKTsNCj4gPiArDQo+ID4gKyAgU3RhdHVz ID0gZ0JTLT5DYWxjdWxhdGVDcmMzMiAoKFVJTlQ4ICopUGFydEVudHJ5LCBUYWJsZVNpemUsDQo+ ID4gJlByaW1hcnlIZWFkZXItPlBhcnRpdGlvbkVudHJ5QXJyYXlDUkMzMik7DQo+ID4gKyAgaWYg KEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gPiArICB9 DQo+ID4gKw0KPiA+ICsgIC8vIFdyaXRlIHByaW1hcnkgaGVhZGVyDQo+ID4gKyAgUGFydGl0aW9u U2V0Q3JjICgmUHJpbWFyeUhlYWRlci0+SGVhZGVyKTsNCj4gPiArDQo+ID4gKyAgU3RhdHVzID0g RGlza0lvLT5Xcml0ZURpc2sgKA0KPiA+ICsgICAgRGlza0lvLA0KPiA+ICsgICAgQmxvY2tJby0+ TWVkaWEtPk1lZGlhSWQsDQo+ID4gKyAgICBNdWx0VTY0eDMyIChQcmltYXJ5SGVhZGVyLT5NeUxC QSwgKFVJTlQzMilCbG9ja1NpemUpLA0KPiA+ICsgICAgQmxvY2tTaXplLA0KPiA+ICsgICAgUHJp bWFyeUhlYWRlcg0KPiA+ICsgICAgKTsNCj4gPiArDQo+ID4gKw0KPiA+ICsgIGlmIChFRklfRVJS T1IgKFN0YXR1cykpIHsNCj4gPiArICAgIHJldHVybiBTdGF0dXM7DQo+ID4gKyAgfQ0KPiA+ICsN Cj4gPiArICAvLw0KPiA+ICsgIC8vIFdyaXRlIG91dCB0aGUgcHJpbWFyeSB0YWJsZSAuLi4NCj4g PiArICAvLw0KPiA+ICsgIFN0YXR1cyA9IERpc2tJby0+V3JpdGVEaXNrICgNCj4gPiArICAgIERp c2tJbywNCj4gPiArICAgIEJsb2NrSW8tPk1lZGlhLT5NZWRpYUlkLA0KPiA+ICsgICAgTXVsdFU2 NHgzMiAoUHJpbWFyeUhlYWRlci0+UGFydGl0aW9uRW50cnlMQkEsIChVSU5UMzIpQmxvY2tTaXpl KSwNCj4gPiArICAgIFRhYmxlU2l6ZSwNCj4gPiArICAgIFBhcnRFbnRyeQ0KPiA+ICsgICAgKTsN Cj4gPiArDQo+ID4gKw0KPiA+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiArICAg IHJldHVybiBTdGF0dXM7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICAvLw0KPiA+ICsgIC8vIFdy aXRlIG91dCB0aGUgc2Vjb25kYXJ5IGhlYWRlciBhbmQgdGFibGUgYnkgY2FsbGluZyByZXN0b3Jl DQo+ID4gKyAgLy8NCj4gPiArDQo+ID4gKyAgaWYgKCFQYXJ0aXRpb25SZXN0b3JlR3B0VGFibGUg KFByaW1hcnlIZWFkZXIpKSB7DQo+ID4gKyAgICByZXR1cm4gRUZJX1ZPTFVNRV9DT1JSVVBURUQ7 DQo+ID4gKyAgfQ0KPiA+ICsgIEJsb2NrSW8tPkZsdXNoQmxvY2tzIChCbG9ja0lvKTsNCj4gPiAr ICBHcHRWYWxpZCA9ICFFRklfRVJST1IgKFN0YXR1cyk7DQo+ID4gKw0KPiA+ICsgIHJldHVybiBT dGF0dXM7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIChSZSlpbml0aWFsaXplIEdQ VCB0YWJsZXMgb24gdGhlIGJsb2NrIGRldmljZQ0KPiA+ICsNCj4gPiArICBAcmV0dXJuIEVGSV9T VUNDRVNTICAgIFN1Y2Nlc3NmdWxseSAocmUpaW5pdGlhbGl6ZWQgR1BUIFRhYmxlcw0KPiA+ICsg IEByZXR1cm4gb3RoZXIgICAgICAgICAgRmFpbGVkIHRvIChyZSlpbml0aWFsaXplIEdQVCB0YWJs ZXMNCj4gPiArDQo+ID4gKyoqLw0KPiA+ICtTVEFUSUMNCj4gPiArRUZJX1NUQVRVUw0KPiA+ICtU YWJsZUNyZWF0ZUVtcHR5R3B0IChWT0lEKQ0KPiA+ICt7DQo+ID4gKyAgVUlOVE4gICAgICAgRW50 cnlDb3VudDsNCj4gPiArICBVSU5UTiAgICAgICBCbG9ja0ZpdDsNCj4gPiArICBVSU5UTiAgICAg ICBCbG9ja1NpemU7DQo+ID4gKyAgVUlOVE4gICAgICAgRW50cnlCbG9ja3M7DQo+ID4gKyAgVUlO VDY0ICAgICAgRGlza1NpemU7DQo+ID4gKyAgVUlOVE4gICAgICAgVGFibGVTaXplOw0KPiA+ICsg IEVGSV9MQkEgICAgIEhlYWRlcjFfTEJBOw0KPiA+ICsgIEVGSV9MQkEgICAgIFRhYmxlMV9MQkE7 DQo+ID4gKyAgRUZJX0xCQSAgICAgSGVhZGVyMl9MQkE7DQo+ID4gKyAgRUZJX0xCQSAgICAgVGFi bGUyX0xCQTsNCj4gPiArICBFRklfTEJBICAgICBGaXJzdFVzYWJsZUxCQTsNCj4gPiArICBFRklf TEJBICAgICBMYXN0VXNhYmxlTEJBOw0KPiA+ICsgIEVGSV9TVEFUVVMgIFN0YXR1czsNCj4gPiAr DQo+ID4gKyAgRW50cnlDb3VudCA9IEVOVFJZX0RFRkFVTFQ7DQo+ID4gKyAgQmxvY2tTaXplID0g QmxvY2tJby0+TWVkaWEtPkJsb2NrU2l6ZTsNCj4gPiArICBCbG9ja0ZpdCA9ICBCbG9ja1NpemUg LyBzaXplb2YoRUZJX1BBUlRJVElPTl9FTlRSWSk7DQo+ID4gKw0KPiA+ICsgIGlmIChCbG9ja0Zp dCA+IEVOVFJZX0RFRkFVTFQpIHsNCj4gPiArICAgIEVudHJ5Q291bnQgPSBCbG9ja0ZpdDsNCj4g PiArICB9DQo+ID4gKyAgRW50cnlCbG9ja3MgPSBFbnRyeUNvdW50IC8gQmxvY2tGaXQ7DQo+ID4g Kw0KPiA+ICsgIGlmICgoRW50cnlCbG9ja3MgKiBCbG9ja0ZpdCkgIT0gRW50cnlDb3VudCkgew0K PiA+ICsgICAgU3RhdHVzID0gRUZJX1ZPTFVNRV9DT1JSVVBURUQ7DQo+ID4gKyAgICBQcmludEVy ciAoTCJJbnZhbGlkIEVudHJ5IGJsb2NrcyBhbmQgRW50cnkgY291bnQgY29tYmluYXRpb25cbiIs IFN0YXR1cyk7DQo+ID4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4g KyAgRGlza1NpemUgPSBCbG9ja0lvLT5NZWRpYS0+TGFzdEJsb2NrICsgMTsNCj4gPiArDQo+ID4g KyAgU0hFTExfRlJFRV9OT05fTlVMTCAoUHJpbWFyeUhlYWRlcik7DQo+ID4gKyAgU0hFTExfRlJF RV9OT05fTlVMTCAoQmFja3VwSGVhZGVyKTsNCj4gPiArICBTSEVMTF9GUkVFX05PTl9OVUxMIChQ YXJ0RW50cnkpOw0KPiA+ICsNCj4gPiArICBQcmltYXJ5SGVhZGVyID0gQWxsb2NhdGVaZXJvUG9v bCAoQmxvY2tTaXplKTsNCj4gPiArICBpZiAoUHJpbWFyeUhlYWRlciA9PSBOVUxMKSB7DQo+ID4g KyAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiAr ICBCYWNrdXBIZWFkZXIgPSBBbGxvY2F0ZVplcm9Qb29sIChCbG9ja1NpemUpOw0KPiA+ICsgIGlm IChCYWNrdXBIZWFkZXIgPT0gTlVMTCkgew0KPiA+ICsgICAgcmV0dXJuIEVGSV9PVVRfT0ZfUkVT T1VSQ0VTOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgSGVhZGVyMV9MQkEgPSAxOw0KPiA+ICsg IFRhYmxlMV9MQkEgPSAyOw0KPiA+ICsgIEZpcnN0VXNhYmxlTEJBID0gVGFibGUxX0xCQSArIEVu dHJ5QmxvY2tzOw0KPiA+ICsNCj4gPiArICBIZWFkZXIyX0xCQSA9IERpc2tTaXplIC0gMTsNCj4g PiArICBUYWJsZTJfTEJBID0gSGVhZGVyMl9MQkEgLSBFbnRyeUJsb2NrczsNCj4gPiArICBMYXN0 VXNhYmxlTEJBID0gVGFibGUyX0xCQSAtIDE7DQo+ID4gKw0KPiA+ICsgIFRhYmxlU2l6ZSA9IEVu dHJ5QmxvY2tzICogQmxvY2tTaXplOw0KPiA+ICsNCj4gPiArICBpZiAoVGFibGVTaXplICE9IChF bnRyeUNvdW50ICogc2l6ZW9mKEVGSV9QQVJUSVRJT05fRU5UUlkpKSkgew0KPiA+ICsgICAgU3Rh dHVzID0gRUZJX1ZPTFVNRV9DT1JSVVBURUQ7DQo+ID4gKyAgICBQcmludEVyciAoTCJJbnZhbGlk IFRhYmxlIHNpemUgYW5kIEVudHJ5IGNvdW50IGNvbWJpbmF0aW9uXG4iLCBTdGF0dXMpOw0KPiA+ ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIGlmIChHUFRfREVC VUdfTEVWRUwpIHsNCj4gPiArICAgIFByaW50IChMIkRpc2tTaXplID0gJWx4XG4iLCBEaXNrU2l6 ZSk7DQo+ID4gKyAgICBQcmludCAoTCJCbG9ja1NpemUgPSAleFxuIiwgQmxvY2tTaXplKTsNCj4g PiArICAgIFByaW50IChMIkhlYWRlcjFfTEJBID0gJWx4XG4iLCBIZWFkZXIxX0xCQSk7DQo+ID4g KyAgICBQcmludCAoTCJUYWJsZTFfTEJBID0gJWx4XG4iLCBUYWJsZTFfTEJBKTsNCj4gPiArICAg IFByaW50IChMIkZpcnN0VXNhYmxlTEJBID0gJWx4XG4iLCBGaXJzdFVzYWJsZUxCQSk7DQo+ID4g KyAgICBQcmludCAoTCJIZWFkZXIyX0xCQSA9ICVseFxuIiwgSGVhZGVyMl9MQkEpOw0KPiA+ICsg ICAgUHJpbnQgKEwiVGFibGUyX0xCQSA9ICVseFxuIiwgVGFibGUyX0xCQSk7DQo+ID4gKyAgICBQ cmludCAoTCJMYXN0VXNhYmxlTEJBID0gJWx4XG4iLCBMYXN0VXNhYmxlTEJBKTsNCj4gPiArICAg IFByaW50IChMIkVudHJ5Q291bnQgPSAleFxuIiwgRW50cnlDb3VudCk7DQo+ID4gKyAgICBQcmlu dCAoTCJFbnRyeUJsb2NrcyA9ICV4XG4iLCBFbnRyeUJsb2Nrcyk7DQo+ID4gKyAgfQ0KPiA+ICsN Cj4gPiArICAvLw0KPiA+ICsgIC8vIFNpbmNlIHdlJ3JlIG1ha2luZyBlbXB0eSB0YWJsZXMsIHdl IGp1c3Qgd3JpdGUgemVyb3MuLi4NCj4gPiArICAvLw0KPiA+ICsNCj4gPiArICBQYXJ0RW50cnkg PSBBbGxvY2F0ZVplcm9Qb29sIChUYWJsZVNpemUpOw0KPiA+ICsgIGlmIChQYXJ0RW50cnkgPT0g TlVMTCkgew0KPiA+ICsgICAgU0hFTExfRlJFRV9OT05fTlVMTCAoUHJpbWFyeUhlYWRlcik7DQo+ ID4gKyAgICBTSEVMTF9GUkVFX05PTl9OVUxMIChCYWNrdXBIZWFkZXIpOw0KPiA+ICsgICAgcmV0 dXJuIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgUEVudHJ5 U3RhdHVzID0gQWxsb2NhdGVaZXJvUG9vbCAoVGFibGVTaXplKTsNCj4gPiArDQo+ID4gKyAgUHJp bWFyeUhlYWRlci0+Rmlyc3RVc2FibGVMQkEgPSBGaXJzdFVzYWJsZUxCQTsNCj4gPiArICBQcmlt YXJ5SGVhZGVyLT5MYXN0VXNhYmxlTEJBID0gTGFzdFVzYWJsZUxCQTsNCj4gPiArICBQcmltYXJ5 SGVhZGVyLT5OdW1iZXJPZlBhcnRpdGlvbkVudHJpZXMgPSAoVUlOVDMyKUVudHJ5Q291bnQ7DQo+ ID4gKyAgR2VuZXJhdGVHdWlkICgmUHJpbWFyeUhlYWRlci0+RGlza0dVSUQpOw0KPiA+ICsNCj4g PiArICBQcmltYXJ5SGVhZGVyLT5NeUxCQSAgICAgICAgICAgICA9IEhlYWRlcjFfTEJBOw0KPiA+ ICsgIEJhY2t1cEhlYWRlci0+TXlMQkEgICAgICAgICAgICAgID0gSGVhZGVyMl9MQkE7DQo+ID4g KyAgUHJpbWFyeUhlYWRlci0+UGFydGl0aW9uRW50cnlMQkEgPSBUYWJsZTFfTEJBOw0KPiA+ICsg IEJhY2t1cEhlYWRlci0+UGFydGl0aW9uRW50cnlMQkEgID0gVGFibGUyX0xCQTsNCj4gPiArDQo+ ID4gKyAgU3RhdHVzID0gV3JpdGVHUFQgKCk7DQo+ID4gKw0KPiA+ICsgIHJldHVybiBTdGF0dXM7 DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIENsZWFyIEdQVCBwYXJ0aXRpb25zLg0K PiA+ICsNCj4gPiArICBAcmV0dXJuIEVGSV9TVUNDRVNTICAgIENsZWFyZWQgc3VjY2Vzc2Z1bGx5 DQo+ID4gKyAgQHJldHVybiBGQUxTRSAgICAgICAgICBGYWlsZWQgdG8gY2xlYXINCj4gPiArDQo+ ID4gKyoqLw0KPiA+ICsNCj4gPiArRUZJX1NUQVRVUw0KPiA+ICtQYXJ0aXRpb25HcHRDbGVhckFs bCAoVk9JRCkNCj4gPiArew0KPiA+ICsgIEdwdENsZWFudXBHbG9iYWxzICgpOw0KPiA+ICsgIEdw dFZhbGlkID0gRkFMU0U7DQo+ID4gKyAgTWJyVmFsaWQgPSBGQUxTRTsNCj4gPiArICByZXR1cm4g VGFibGVDcmVhdGVFbXB0eUdwdCAoKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAg Q3JlYXRlIGEgR1BUIHBhcnRpdGlvbi4NCj4gPiArDQo+ID4gKyAgQHBhcmFtICBQYXJ0TmFtZSAg ICAgICAgICAgICAgUGFydGl0aW9uIE5hbWUNCj4gPiArICBAcGFyYW0gIFN0YXJ0TGJhICAgICAg ICAgICAgICBTdGFydGluZyBMQkEgb2YgdGhlIHBhcnRpdGlvbi4NCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpZiB6ZXJvLCB3aWxsIGJlIGNhbGN1bGF0ZWQNCj4gPiArICBA cGFyYW0gIFNpemVJbk1lZ2FCeXRlcyAgICAgICBTaXplIG9mIHRoZSBwYXJ0aXRpb24gaW4gTUIN Cj4gPiArICBAcGFyYW0gIEF0dHJpYnV0ZXMgICAgICAgICAgICBQYXJ0aXRpb24gYXR0cmlidXRl cw0KPiA+ICsgIEBwYXJhbSAgUGFydFR5cGVHdWlkICAgICAgICAgIGEgVHlwZSBHVUlEIHRvIGJl IGFzc2lnbmVkIHRvIHRoZSBwYXJ0aXRpb24NCj4gPiAobm90IGEgcGFydGl0aW9uIHVuaXF1ZSBH VUlEKQ0KPiA+ICsNCj4gPiArDQo+ID4gKyAgQHJldHVybiBFRklfU1VDQ0VTUyAgICAgICAgICAg UGFydGl0aW9uIHN1Y2Nlc3NmdWxseSBjcmVhdGVkDQo+ID4gKyAgQHJldHVybiBFRklfSU5WQUxJ RF9QQVJBTUVURVIgRWl0aGVyIHBhcnRpdGlvbiBleGlzdHMsIG9yIHdyb25nDQo+ID4gcGFyYW1l dGVycyBzcGVjaWZpZWQNCj4gPiArICBAcmV0dXJuIG90aGVyICAgICAgICAgICAgICAgICBGYWls ZWQgdG8gY3JlYXRlIGEgcGFydGl0aW9uDQo+ID4gKyoqLw0KPiA+ICtFRklfU1RBVFVTDQo+ID4g K1BhcnRpdGlvbkdwdENyZWF0ZVBhcnRpdGlvbiAoDQo+ID4gKyAgSU4gQ09OU1QgQ0hBUjE2ICpQ YXJ0TmFtZSwNCj4gPiArICBJTiBFRklfTEJBIFN0YXJ0TGJhLA0KPiA+ICsgIElOIFVJTlQ2NCBT aXplSW5NZWdhYnl0ZXMsDQo+ID4gKyAgSU4gVUlOVDY0IEF0dHJpYnV0ZXMsDQo+ID4gKyAgSU4g RUZJX0dVSUQgUGFydFR5cGVHdWlkKQ0KPiA+ICt7DQo+ID4gKyAgRUZJX0dVSUQgICAgR3VpZCwg UGFydGl0aW9uSWRHdWlkOw0KPiA+ICsgIEVGSV9TVEFUVVMgIFN0YXR1czsNCj4gPiArICBVSU5U NjQgICAgICBTdGFydEJsb2NrOw0KPiA+ICsgIFVJTlQ2NCAgICAgIEVuZEJsb2NrOw0KPiA+ICsg IFVJTlQ2NCAgICAgIFNpemVJbkJ5dGVzID0gMDsNCj4gPiArICBVSU5UMzIgICAgICBCbG9ja1Np emU7DQo+ID4gKyAgVUlOVDY0ICAgICAgRGlza1NpemVCbG9ja3M7DQo+ID4gKyAgVUlOVDggICAg ICAgKnA7DQo+ID4gKyAgQk9PTEVBTiAgICAgT2Zmc2V0U3BlY2lmaWVkID0gRkFMU0U7DQo+ID4g KyAgQk9PTEVBTiAgICAgQWxsWmVyb3M7DQo+ID4gKyAgSU5UTiAgICAgICAgQWxsWmVyb0VudHJ5 Ow0KPiA+ICsgIElOVE4gICAgICAgIE9sZEZyZWVFbnRyeTsNCj4gPiArICBVSU5UNjQgICAgICBB dmFpbEJsb2NrczsNCj4gPiArICBVSU5UNjQgICAgICBCbG9ja3NUb0FsbG9jYXRlOw0KPiA+ICsg IFVJTlQ2NCAgICAgIEhpZ2hTZWVuOw0KPiA+ICsgIFVJTlROICAgICAgIFNsb3Q7DQo+ID4gKyAg VUlOVDY0ICAgICAgTG93ZXN0QWxpZ25lZExiYTsNCj4gPiArICBVSU5UMzIgICAgICBPcHRpbWFs VHJhbnNmZXJCbG9ja3M7DQo+ID4gKyAgVUlOVE4gICAgICAgaSwgajsNCj4gPiArICBDSEFSMTYg ICAgICBQYXJ0TmFtZVVzZWRbTUFYX1BBUlRJVElPTl9OQU1FX0xFTkdUSCArIDFdID0NCj4geyBM J1wwJyB9Ow0KPiA+ICsgIEVGSV9QQVJUSVRJT05fRU5UUlkgKkVudHJ5Ow0KPiA+ICsNCj4gPiAr ICBMb3dlc3RBbGlnbmVkTGJhID0gMDsNCj4gPiArICBPcHRpbWFsVHJhbnNmZXJCbG9ja3MgPSAx Ow0KPiA+ICsNCj4gPiArICBBbGxaZXJvRW50cnkgPSAtMTsNCj4gPiArICBPbGRGcmVlRW50cnkg PSAtMTsNCj4gPiArDQo+ID4gKyAgQmxvY2tTaXplID0gQmxvY2tJby0+TWVkaWEtPkJsb2NrU2l6 ZTsNCj4gPiArICBPZmZzZXRTcGVjaWZpZWQgPSAoU3RhcnRMYmEgIT0gMCk7DQo+ID4gKyAgQ29w eU1lbSAoJlBhcnROYW1lVXNlZCwgUGFydE5hbWUsIHNpemVvZihDSEFSMTYpICogU3RyU2l6ZQ0K PiA+IChQYXJ0TmFtZSkpOw0KPiA+ICsNCj4gPiArICBHZW5lcmF0ZUd1aWQgKCZHdWlkKTsNCj4g PiArDQo+ID4gKyAgLy8gQ3JlYXRpbmcgYSBuZXcgcGFydGl0aW9uDQo+ID4gKyAgaWYgKCFHcHRW YWxpZCkgew0KPiA+ICsgICAgLy8gQ3JlYXRpbmcgYSBHUFQgZm9yIHRoZSBmaXJzdCB0aW1lDQo+ ID4gKyAgICBTdGF0dXMgPSBUYWJsZUNyZWF0ZUVtcHR5R3B0ICgpOw0KPiA+ICsgICAgaWYgKCFF RklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiArICAgICAgLy8gRmlsbCBpbiB0aGUgc3RydWN0dXJl cw0KPiA+ICsgICAgICBTdGF0dXMgPSBQYXJ0aXRpb25HZXRHcHRUYWJsZXMgKERpc2tJbywgQmxv Y2tJbyk7DQo+ID4gKyAgICB9DQo+ID4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ ID4gKyAgICAgIHJldHVybiBTdGF0dXM7DQo+ID4gKyAgICB9DQo+ID4gKyAgfQ0KPiA+ICsNCj4g PiArICBFbnRyeSA9IFBhcnRpdGlvbkZpbmRQYXJ0aXRpb25CeUNyaXRlcmlhIChQYXJ0TmFtZSwg MCwgMCwgU1JDX0JZX05BTUUpOw0KPiA+ICsgIGlmIChFbnRyeSkgew0KPiA+ICsgICAgU3RhdHVz ID0gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiA+ICsgICAgUHJpbnRFcnIgKEwiUGFydGl0aW9u IHdpdGggdGhpcyBuYW1lIGFscmVhZHkgZXhpc3RzIiwgU3RhdHVzKTsNCj4gPiArICAgIHJldHVy biBTdGF0dXM7DQo+ID4gKyAgfQ0KPiA+ICsgIEhpZ2hTZWVuICAgICA9IFByaW1hcnlIZWFkZXIt PkZpcnN0VXNhYmxlTEJBIC0gMTsNCj4gPiArDQo+ID4gKyAgaWYgKFN0YXJ0TGJhKSB7DQo+ID4g KyAgICAvLw0KPiA+ICsgICAgLy8gaWYgb2Zmc2V0IGlzIHNwZWNpZmllZCwgY29tcHV0ZSB0aGUg c3RhcnQgYW5kIGVuZCBibG9ja3MNCj4gPiArICAgIC8vDQo+ID4gKyAgICBTdGFydEJsb2NrID0g U3RhcnRMYmE7DQo+ID4gKyAgICAvLw0KPiA+ICsgICAgLy8gU3RhcnRCbG9jayBzaG91bGQgYmUg YWxpZ25lZCB0byBPcHRpbWFsVHJhbnNmZXJCbG9ja3MsIHRoZSBsZWFzdA0KPiA+IGNvbW1vbiBt dWx0aXBsZSBvZjoNCj4gPiArICAgIC8vIGEpLiB0aGUgcGh5c2ljYWwgYmxvY2sgYm91bmRhcnks IGlmIGFueQ0KPiA+ICsgICAgLy8gYikuIHRoZSBvcHRpbWFsIHRyYW5zZmVyIGxlbmd0aCBncmFu dWxhcml0eSwgaWYgYW55DQo+ID4gKyAgICAvLw0KPiA+ICsgICAgaWYgKFN0YXJ0QmxvY2sgPCBM b3dlc3RBbGlnbmVkTGJhKSB7DQo+ID4gKyAgICAgIFN0YXJ0QmxvY2sgPSBMb3dlc3RBbGlnbmVk TGJhOw0KPiA+ICsgICAgfSBlbHNlIHsNCj4gPiArICAgICAgd2hpbGUgKCgoU3RhcnRCbG9jayAt IExvd2VzdEFsaWduZWRMYmEpICUgT3B0aW1hbFRyYW5zZmVyQmxvY2tzKSAhPSAwKQ0KPiB7DQo+ ID4gKyAgICAgICAgU3RhcnRCbG9jaysrOw0KPiA+ICsgICAgICB9DQo+ID4gKyAgICB9DQo+ID4g Kw0KPiA+ICsgICAgaWYgKFN0YXJ0QmxvY2sgPCBQcmltYXJ5SGVhZGVyLT5GaXJzdFVzYWJsZUxC QSB8fA0KPiA+ICsgICAgICAgIFN0YXJ0QmxvY2sgPiBQcmltYXJ5SGVhZGVyLT5MYXN0VXNhYmxl TEJBKSB7DQo+ID4gKyAgICAgIC8vDQo+ID4gKyAgICAgIC8vIE9mZnNldCBzcGVjaWZpZWQgaXMg dG9vIGxhcmdlDQo+ID4gKyAgICAgIC8vDQo+ID4gKyAgICAgIFN0YXR1cyA9IEVGSV9JTlZBTElE X1BBUkFNRVRFUjsNCj4gPiArICAgICAgUHJpbnRFcnIgKEwiU3BlY2lmaWVkIG9mZnNldCBpcyB0 b28gbGFyZ2UiLCBFRklfSU5WQUxJRF9QQVJBTUVURVIpOw0KPiA+ICsgICAgICBnb3RvIEV4aXQ7 DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ICsgICAgU2l6ZUluQnl0ZXMgPSBNdWx0VTY0eDMyIChT aXplSW5NZWdhYnl0ZXMsICgxMDI0ICogMTAyNCkpOw0KPiA+ICsgICAgaWYgKFNpemVJbkJ5dGVz IDwgU2l6ZUluTWVnYWJ5dGVzIHx8IFNpemVJbkJ5dGVzID09IDApIHsNCj4gPiArICAgICAgLy8N Cj4gPiArICAgICAgLy8gSWYgc2l6ZSBpcyBub3Qgc3BlY2lmaWVkIG9yIHRvbyBsYXJnZSwNCj4g PiArICAgICAgLy8gdHJ5IHRvIG1ha2UgdGhlIHBhcnRpdGlvbiBhcyBiaWcgYXMgaXQgY2FuIGJl DQo+ID4gKyAgICAgIC8vDQo+ID4gKyAgICAgIEJsb2Nrc1RvQWxsb2NhdGUgPSBFbmRCbG9jayA9 IFNpemVJbkJ5dGVzID0gMHhmZmZmZmZmZmZmZmZmZmZmOw0KPiA+ICsgICAgfSBlbHNlIHsNCj4g PiArICAgICAgQmxvY2tzVG9BbGxvY2F0ZSA9IERpdlU2NHgzMiAoU2l6ZUluQnl0ZXMsIEJsb2Nr U2l6ZSk7DQo+ID4gKyAgICAgIEVuZEJsb2NrID0gU3RhcnRCbG9jayArIEJsb2Nrc1RvQWxsb2Nh dGUgLSAxOw0KPiA+ICsgICAgICBpZiAoRW5kQmxvY2sgPiBQcmltYXJ5SGVhZGVyLT5MYXN0VXNh YmxlTEJBKSB7DQo+ID4gKyAgICAgICAgRW5kQmxvY2sgPSBQcmltYXJ5SGVhZGVyLT5MYXN0VXNh YmxlTEJBOw0KPiA+ICsgICAgICAgIEJsb2Nrc1RvQWxsb2NhdGUgPSBFbmRCbG9jayAtIFN0YXJ0 QmxvY2sgKyAxOw0KPiA+ICsgICAgICB9DQo+ID4gKyAgICB9DQo+ID4gKyAgfQ0KPiA+ICsNCj4g PiArICBmb3IgKGkgPSAwOyBpIDwgUHJpbWFyeUhlYWRlci0+TnVtYmVyT2ZQYXJ0aXRpb25FbnRy aWVzOyBpKyspIHsNCj4gPiArICAgIEVudHJ5ID0gKEVGSV9QQVJUSVRJT05fRU5UUlkgKikoKFVJ TlQ4ICopUGFydEVudHJ5ICsgaSAqDQo+ID4gUHJpbWFyeUhlYWRlci0+U2l6ZU9mUGFydGl0aW9u RW50cnkpOw0KPiA+ICsgICAgaWYgKCFDb21wYXJlR3VpZCAoJkVudHJ5LT5QYXJ0aXRpb25UeXBl R1VJRCwNCj4gPiAmZ0VmaVBhcnRUeXBlVW51c2VkR3VpZCkpIHsNCj4gPiArDQo+ID4gKyAgICAg IC8vDQo+ID4gKyAgICAgIC8vIFR5cGUgbm90IG51bGwsIHNvIGl0J3MgYWxsb2NhdGVkDQo+ID4g KyAgICAgIC8vDQo+ID4gKyAgICAgIGlmIChFbnRyeS0+RW5kaW5nTEJBID4gSGlnaFNlZW4pIHsN Cj4gPiArICAgICAgICBIaWdoU2VlbiA9IEVudHJ5LT5FbmRpbmdMQkE7DQo+ID4gKyAgICAgIH0N Cj4gPiArICAgICAgaWYgKE9mZnNldFNwZWNpZmllZCkgew0KPiA+ICsgICAgICAgIC8vDQo+ID4g KyAgICAgICAgLy8gbWFrZSBzdXJlIG5ldyBwYXJ0aXRpb24gZG9lcyBub3Qgb3ZlcmxhcCB3aXRo IGV4aXN0aW5nIHBhcnRpdGlvbnMNCj4gPiArICAgICAgICAvLw0KPiA+ICsgICAgICAgIGlmIChF bnRyeS0+U3RhcnRpbmdMQkEgPD0gU3RhcnRCbG9jayAmJg0KPiA+ICsgICAgICAgICAgICBTdGFy dEJsb2NrIDw9IEVudHJ5LT5FbmRpbmdMQkEpIHsNCj4gPiArICAgICAgICAgIC8vDQo+ID4gKyAg ICAgICAgICAvLyBzdGFydGluZyBibG9jayBpcyBpbnNpZGUgYW4gZXhpc3RpbmcgcGFydGl0aW9u DQo+ID4gKyAgICAgICAgICAvLw0KPiA+ICsgICAgICAgICAgU3RhdHVzID0gRUZJX0lOVkFMSURf UEFSQU1FVEVSOw0KPiA+ICsgICAgICAgICAgUHJpbnRFcnIgKEwiU3RhcnRpbmcgYmxvY2sgaXMg aW5zaWRlIGFuIGV4aXN0aW5nIHBhcnRpdGlvbiIsIFN0YXR1cyk7DQo+ID4gKyAgICAgICAgICBn b3RvIEV4aXQ7DQo+ID4gKyAgICAgICAgfQ0KPiA+ICsgICAgICAgIGlmICgoRW50cnktPlN0YXJ0 aW5nTEJBIDw9IEVuZEJsb2NrICYmDQo+ID4gKyAgICAgICAgICAgICBFbmRCbG9jayA8PSBFbnRy eS0+RW5kaW5nTEJBKSB8fA0KPiA+ICsgICAgICAgICAgICAoU3RhcnRCbG9jayA8PSBFbnRyeS0+ U3RhcnRpbmdMQkEgJiYNCj4gPiArICAgICAgICAgICAgIEVudHJ5LT5TdGFydGluZ0xCQSA8PSBF bmRCbG9jaykgfHwNCj4gPiArICAgICAgICAgICAgKFN0YXJ0QmxvY2sgPD0gRW50cnktPkVuZGlu Z0xCQSAmJg0KPiA+ICsgICAgICAgICAgICAgRW50cnktPkVuZGluZ0xCQSA8PSBFbmRCbG9jaykp IHsNCj4gPiArICAgICAgICAgIC8vDQo+ID4gKyAgICAgICAgICAvLyBuZXcgcGFydGl0aW9uIG92 ZXJsYXBzIHdpdGggYW4gZXhpc3RpbmcgcGFydGl0aW9uDQo+ID4gKyAgICAgICAgICAvLyByZWFk anVzdCBuZXcgcGFydGl0aW9uIHNpemUgdG8gYXZvaWQgb3ZlcmxhcHBpbmcNCj4gPiArICAgICAg ICAgIC8vDQo+ID4gKyAgICAgICAgICBFbmRCbG9jayA9IEVudHJ5LT5TdGFydGluZ0xCQSAtIDE7 DQo+ID4gKyAgICAgICAgICBpZiAoRW5kQmxvY2sgPCBTdGFydEJsb2NrKSB7DQo+ID4gKyAgICAg ICAgICAgIFN0YXR1cyA9IEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gPiArICAgICAgICAgICAg UHJpbnRFcnIgKEwiQ2Fubm90IHJlYWRqdXN0IG5ldyBwYXJ0aXRpb24gc2l6ZSAtIG92ZXJsYXBw aW5nIiwgU3RhdHVzKTsNCj4gPiArICAgICAgICAgICAgZ290byBFeGl0Ow0KPiA+ICsgICAgICAg ICAgfSBlbHNlIHsNCj4gPiArICAgICAgICAgICAgQmxvY2tzVG9BbGxvY2F0ZSA9IEVuZEJsb2Nr IC0gU3RhcnRCbG9jayArIDE7DQo+ID4gKyAgICAgICAgICB9DQo+ID4gKyAgICAgICAgfQ0KPiA+ ICsgICAgICB9DQo+ID4gKyAgICB9IGVsc2Ugew0KPiA+ICsgICAgICBwID0gKFVJTlQ4ICopKEVu dHJ5KTsNCj4gPiArICAgICAgQWxsWmVyb3MgPSBUUlVFOw0KPiA+ICsgICAgICBmb3IgKGogPSAw OyBqIDwgc2l6ZW9mKEVGSV9QQVJUSVRJT05fRU5UUlkpOyBqKyspIHsNCj4gPiArICAgICAgICBp ZiAocFtqXSAhPSAwKSB7DQo+ID4gKyAgICAgICAgICBBbGxaZXJvcyA9IEZBTFNFOw0KPiA+ICsg ICAgICAgIH0NCj4gPiArICAgICAgfQ0KPiA+ICsgICAgICBpZiAoQWxsWmVyb3MpIHsNCj4gPiAr ICAgICAgICBpZiAoQWxsWmVyb0VudHJ5ID09IC0xKSB7DQo+ID4gKyAgICAgICAgICBBbGxaZXJv RW50cnkgPSBpOw0KPiA+ICsgICAgICAgIH0NCj4gPiArICAgICAgfSBlbHNlIGlmIChPbGRGcmVl RW50cnkgPT0gLTEpIHsNCj4gPiArICAgICAgICBPbGRGcmVlRW50cnkgPSBpOw0KPiA+ICsgICAg ICB9DQo+ID4gKyAgICB9DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICAvLw0KPiA+ICsgIC8vIEFs bFplcm9FbnRyeSAtIGlmIG5vdCAtMSwgaXMgcG9pbnRlciB0byBhIG5ldmVyIGJlZm9yZSB1c2Vk IGVudHJ5IChmcmVlKQ0KPiA+ICsgIC8vIE9sZEZyZWVFbnRyeSAtIGlmIG5vdCAtMSwgaXMgcG9p bnRlciB0byBzb21lIHByZS11c2VkIGZyZWUgZW50cnkNCj4gPiArICAvLw0KPiA+ICsgIGlmICgo QWxsWmVyb0VudHJ5ID09IC0xKSAmJiAoT2xkRnJlZUVudHJ5ID09IC0xKSkgew0KPiA+ICsgICAg Ly8NCj4gPiArICAgIC8vIFRBQkxFIElTIEZVTEwhIQ0KPiA+ICsgICAgLy8NCj4gPiArICAgIFN0 YXR1cyA9IEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiA+ICsgICAgUHJpbnRFcnIgKEwiVGFibGUg aXMgZnVsbCIsIFN0YXR1cyk7DQo+ID4gKyAgICBnb3RvIEV4aXQ7DQo+ID4gKyAgfQ0KPiA+ICsN Cj4gPiArICBpZiAoT2Zmc2V0U3BlY2lmaWVkKSB7DQo+ID4gKyAgICAvLw0KPiA+ICsgICAgLy8g dGhlIHVzZXIgaGF2ZW4ndCBzcGVjaWZpZWQgdGhlIG5ldyBwYXJ0aXRpb24gc2l6ZSBhbmQgd2Ug aGF2ZW4ndA0KPiA+ICsgICAgLy8gcnVuIGludG8gYW55IHBhcnRpdGlvbiB0aGF0IHdpbGwgbGlt aXQgdGhlIHNpemUgb2YgdGhpcyBuZXcgcGFydGl0aW9uLg0KPiA+ICsgICAgLy8gU28sIHVzZSB0 aGUgbWF4IGl0IGNhbg0KPiA+ICsgICAgLy8NCj4gPiArICAgIGlmIChCbG9ja3NUb0FsbG9jYXRl ID09IC0xKSB7DQo+ID4gKyAgICAgIEVuZEJsb2NrID0gUHJpbWFyeUhlYWRlci0+TGFzdFVzYWJs ZUxCQTsNCj4gPiArICAgICAgQmxvY2tzVG9BbGxvY2F0ZSA9IEVuZEJsb2NrIC0gU3RhcnRCbG9j ayArIDE7DQo+ID4gKyAgICB9DQo+ID4gKyAgfSBlbHNlIHsNCj4gPiArICAgIC8vDQo+ID4gKyAg ICAvLyBCZWNhdXNlIEhpZ2hTZWVuIGlzIHRoZSBsYXN0IExCQSBvZiB0aGUgdXNlZCBibG9ja3Ms IGxldCBIaWdoU2Vlbg0KPiBhbGlnbg0KPiA+IHRvIHRoZSBsZWFzdCBjb21tb24gbXVsdGlwbGUg b2Y6DQo+ID4gKyAgICAvLyBhKS4gdGhlIHBoeXNpY2FsIGJsb2NrIGJvdW5kYXJ5LCBpZiBhbnkN Cj4gPiArICAgIC8vIGIpLiB0aGUgb3B0aW1hbCB0cmFuc2ZlciBsZW5ndGggZ3JhbnVsYXJpdHks IGlmIGFueQ0KPiA+ICsgICAgLy8NCj4gPiArICAgIGlmIChIaWdoU2VlbiArIDEgPCBMb3dlc3RB bGlnbmVkTGJhKSB7DQo+ID4gKyAgICAgIEhpZ2hTZWVuID0gTG93ZXN0QWxpZ25lZExiYSAtIDE7 DQo+ID4gKyAgICB9IGVsc2Ugew0KPiA+ICsgICAgICB3aGlsZSAoKChIaWdoU2VlbiArIDEgLSBM b3dlc3RBbGlnbmVkTGJhKSAlIE9wdGltYWxUcmFuc2ZlckJsb2NrcykgIT0NCj4gMCkNCj4gPiB7 DQo+ID4gKyAgICAgICAgSGlnaFNlZW4rKzsNCj4gPiArICAgICAgfQ0KPiA+ICsgICAgfQ0KPiA+ ICsNCj4gPiArICAgIGlmIChQcmltYXJ5SGVhZGVyLT5MYXN0VXNhYmxlTEJBIDw9IEhpZ2hTZWVu KSB7DQo+ID4gKyAgICAgIFN0YXR1cyA9IEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiA+ICsgICAg ICBQcmludEVyciAoTCJEaXNrIGhhcyBubyBmcmVlIGJsb2NrcyAoRlVMTCkgY2Fubm90IGNyZWF0 ZSIsIFN0YXR1cyk7DQo+ID4gKyAgICAgIGdvdG8gRXhpdDsNCj4gPiArICAgIH0NCj4gPiArICAg IC8vDQo+ID4gKyAgICAvLyBbSGlnaFNlZW4rMSAuLi4gTGFzdFVzYWJsZUxCQV0gaXMgYXZhaWxh YmxlLi4uDQo+ID4gKyAgICAvLyBhdmFpbCA9IChMYXN0VXNhYmxlTEJBIC0gKEhpZ2hTZWVuKzEp KSArIDEgPT4gTGFzdFVzYWJibGVMQkEgLQ0KPiA+IEhpZ2hTZWVuDQo+ID4gKyAgICAvLw0KPiA+ ICsgICAgQXZhaWxCbG9ja3MgPSBQcmltYXJ5SGVhZGVyLT5MYXN0VXNhYmxlTEJBIC0gSGlnaFNl ZW47DQo+ID4gKw0KPiA+ICsgICAgU2l6ZUluQnl0ZXMgPSBNdWx0VTY0eDMyIChTaXplSW5NZWdh Ynl0ZXMsICgxMDI0ICogMTAyNCkpOw0KPiA+ICsgICAgaWYgKFNpemVJbkJ5dGVzIDwgU2l6ZUlu TWVnYWJ5dGVzKSB7DQo+ID4gKyAgICAgIC8vDQo+ID4gKyAgICAgIC8vIG92ZXJmbG93LCBmb3Jj ZSBhIHZlcnkgYmlnIGFuc3dlcg0KPiA+ICsgICAgICAvLw0KPiA+ICsgICAgICBTaXplSW5CeXRl cyA9IDB4ZmZmZmZmZmZmZmZmZmZmZjsNCj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAgICBpZiAg KChTaXplSW5CeXRlcyA9PSAwKSB8fA0KPiA+ICsgICAgICAgICAoU2l6ZUluQnl0ZXMgPiAoTXVs dFU2NHgzMiAoQXZhaWxCbG9ja3MsIEJsb2NrU2l6ZSkpKSkgew0KPiA+ICsgICAgICAvLw0KPiA+ ICsgICAgICAvLyBVc2VyIGFza2VkIGZvciB6ZXJvLCBvciBmb3IgbW9yZSB0aGFuIHdlJ3ZlIGdv dCwNCj4gPiArICAgICAgLy8gc28gZ2l2ZSB0aGVtIGFsbCB0aGF0IGlzIGxlZnQNCj4gPiArICAg ICAgLy8NCj4gPiArICAgICAgQmxvY2tzVG9BbGxvY2F0ZSA9IEF2YWlsQmxvY2tzOw0KPiA+ICsN Cj4gPiArICAgIH0gZWxzZSB7DQo+ID4gKw0KPiA+ICsgICAgICAvLw0KPiA+ICsgICAgICAvLyBX ZSB3b3VsZCBoYXZlIHRvIGhhdmUgYSBCbG9ja1NpemUgPiAxbWIgZm9yIFJlbWFpbmRlciB0bw0K PiA+ICsgICAgICAvLyBub3QgYmUgMC4gIFNpbmNlIHdlIGNhbm5vdCBhY3R1YWxseSB0ZXN0IHRo aXMgY2FzZSwgd2UNCj4gPiArICAgICAgLy8gaW5nb3JlIGl0Li4uDQo+ID4gKyAgICAgIC8vDQo+ ID4gKyAgICAgIEJsb2Nrc1RvQWxsb2NhdGUgPSBEaXZVNjR4MzIgKFNpemVJbkJ5dGVzLCBCbG9j a1NpemUpOw0KPiA+ICsNCj4gPiArICAgIH0NCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIC8vDQo+ ID4gKyAgLy8gV2UgaGF2ZSBhIG5hbWUNCj4gPiArICAvLyBXZSBoYXZlIGEgdHlwZSBndWlkDQo+ ID4gKyAgLy8gV2UgaGF2ZSBhIHNpemUgaW4gYmxvY2tzDQo+ID4gKyAgLy8gV2UgaGF2ZSBhbiBh dHRyaWJ1dGUgbWFzaw0KPiA+ICsgIC8vDQo+ID4gKw0KPiA+ICsgIGlmIChCbG9ja3NUb0FsbG9j YXRlIDwgKCgxMDI0ICogMTAyNCkgLyBCbG9ja1NpemUpKSB7DQo+ID4gKyAgICBTdGF0dXMgPSBF RklfT1VUX09GX1JFU09VUkNFUzsNCj4gPiArICAgIFByaW50RXJyIChMIlBhcnRpdGlvbiBpcyB0 b28gc21hbGwgdG8gYmUgY3JlYXRlZCIsIFN0YXR1cyk7DQo+ID4gKyAgICBnb3RvIEV4aXQ7DQo+ ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBpZiAoR1BUX0RFQlVHX0xFVkVMKSB7DQo+ID4gKyAgICBQ cmludCAoTCJSZXF1ZXN0ZWQgU2l6ZUluTWVnYUJ5dGVzID0gJWxkXG4iLCBTaXplSW5NZWdhYnl0 ZXMpOw0KPiA+ICsgICAgUHJpbnQgKEwiUmVzdWx0aW5nIHNpemUgaW4gQmxvY2tzID0gJWxkXG4i LCBCbG9ja3NUb0FsbG9jYXRlKTsNCj4gPiArICAgIFByaW50IChMIlJlc3VsdHMgc2l6ZSBpbiBC eXRlcyA9ICVsZFxuIiwgTXVsdFU2NHgzMiAoQmxvY2tzVG9BbGxvY2F0ZSwNCj4gPiBCbG9ja1Np emUpKTsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIGlmIChBbGxaZXJvRW50cnkgIT0gLTEpIHsN Cj4gPiArICAgIFNsb3QgPSBBbGxaZXJvRW50cnk7DQo+ID4gKyAgfSBlbHNlIHsNCj4gPiArICAg IFNsb3QgPSBPbGRGcmVlRW50cnk7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBHZW5lcmF0ZUd1 aWQgKCZQYXJ0aXRpb25JZEd1aWQpOw0KPiA+ICsgIEVudHJ5ID0gKEVGSV9QQVJUSVRJT05fRU5U UlkgKikoKFVJTlQ4ICopUGFydEVudHJ5ICsgU2xvdCAqDQo+ID4gUHJpbWFyeUhlYWRlci0+U2l6 ZU9mUGFydGl0aW9uRW50cnkpOw0KPiA+ICsNCj4gPiArICBDb3B5TWVtICgmRW50cnktPlBhcnRp dGlvblR5cGVHVUlELCAmUGFydFR5cGVHdWlkLA0KPiA+IHNpemVvZihFRklfR1VJRCkpOw0KPiA+ ICsgIENvcHlNZW0gKCZFbnRyeS0+VW5pcXVlUGFydGl0aW9uR1VJRCwgJlBhcnRpdGlvbklkR3Vp ZCwNCj4gPiBzaXplb2YoRUZJX0dVSUQpKTsNCj4gPiArICBpZiAoT2Zmc2V0U3BlY2lmaWVkKSB7 DQo+ID4gKyAgICBQYXJ0RW50cnlbU2xvdF0uU3RhcnRpbmdMQkEgPSBTdGFydEJsb2NrOw0KPiA+ ICsgICAgUGFydEVudHJ5W1Nsb3RdLkVuZGluZ0xCQSA9IEVuZEJsb2NrOw0KPiA+ICsgIH0gZWxz ZSB7DQo+ID4gKyAgICBQYXJ0RW50cnlbU2xvdF0uU3RhcnRpbmdMQkEgPSBIaWdoU2VlbiArIDE7 DQo+ID4gKyAgICBQYXJ0RW50cnlbU2xvdF0uRW5kaW5nTEJBID0gSGlnaFNlZW4gKyBCbG9ja3NU b0FsbG9jYXRlOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgaWYgKCEoKChFbnRyeS0+RW5kaW5n TEJBIC0gRW50cnktPlN0YXJ0aW5nTEJBKSArIDEpID09IEJsb2Nrc1RvQWxsb2NhdGUpKSB7DQo+ ID4gKyAgICBQcmludEVyciAoTCJXcm9uZyBTaXplIGZvciBuZXcgcGFydGl0b24iLCBFRklfSU5W QUxJRF9QQVJBTUVURVIpOw0KPiA+ICsgICAgZ290byBFeGl0Ow0KPiA+ICsgIH0NCj4gPiArDQo+ ID4gKyAgaWYgKChFbnRyeS0+U3RhcnRpbmdMQkEgPCBQcmltYXJ5SGVhZGVyLT5GaXJzdFVzYWJs ZUxCQSkgfHwNCj4gPiArICAgICAgKEVudHJ5LT5FbmRpbmdMQkEgPiBQcmltYXJ5SGVhZGVyLT5M YXN0VXNhYmxlTEJBKSkgew0KPiA+ICsgICAgUHJpbnRFcnIgKEwiTmV3IFBhcnRpdGlvbiBvdXQg b2YgYm91bmRzIiwgRUZJX0lOVkFMSURfUEFSQU1FVEVSKTsNCj4gPiArICAgIGdvdG8gRXhpdDsN Cj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIEVudHJ5LT5BdHRyaWJ1dGVzID0gQXR0cmlidXRlczsN Cj4gPiArICBDb3B5TWVtICgmKEVudHJ5LT5QYXJ0aXRpb25OYW1lWzBdKSwgUGFydE5hbWUsDQo+ ID4gTUFYX1BBUlRJVElPTl9OQU1FX0xFTkdUSCAqIHNpemVvZihDSEFSMTYpKTsNCj4gPiArDQo+ ID4gKyAgRGlza1NpemVCbG9ja3MgPSBCbG9ja0lvLT5NZWRpYS0+TGFzdEJsb2NrICsgMTsNCj4g PiArICBpZiAoRGlza1NpemVCbG9ja3MgPiAweGZmZmZmZmZmKSB7DQo+ID4gKyAgICBEaXNrU2l6 ZUJsb2NrcyA9IDB4ZmZmZmZmZmY7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBTdGF0dXMgPSBX cml0ZUdQVCAoKTsNCj4gPiArDQo+ID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ ICsgICAgUHJpbnRFcnIgKEwiQXR0ZW1wdCB0byBXcml0ZSBvdXQgcGFydGl0aW9uIHRhYmxlIGZh aWxlZCIsIFN0YXR1cyk7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArIEV4aXQ6DQo+ID4gKyAgcmV0 dXJuIFN0YXR1czsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgTW9kaWZpeSBhIHBh cnRpdGlvbiBiYXNlZCBvbiBwYXJhbWV0ZXJzLg0KPiA+ICsNCj4gPiArICBAcGFyYW0gIEVudHJ5 ICAgICAgUG9pbnRlciB0byBhbiBleGlzdGluZyBwYXJ0aXRpb24NCj4gPiArICBAcGFyYW0gIFBh cmFtcyAgICAgUGFyYW1ldGVycyB0byBiZSBtb2RpZmllZA0KPiA+ICsgIEBwYXJhbSAgRmxhZ3Mg ICAgICBXaGljaCBwYXJhbWV0ZXIgaXMgdG8gYmUgbW9kaWZpZWQNCj4gPiArDQo+ID4gKyAgQHJl dHVybiBFRklfU1VDQ0VTUyAgU3VjY2Vzc2Z1bGx5IG1vZGlmaWVkIHRoZSBwYXJ0aXRpb24NCj4g PiArICBAcmV0dXJuIG90aGVyICAgICAgICBGYWlsZWQgdG8gbW9kaWZ5IGEgcGFydGl0aW9uDQo+ ID4gKw0KPiA+ICsqKi8NCj4gPiArDQo+ID4gK0VGSV9TVEFUVVMNCj4gPiArUGFydGl0aW9uR3B0 TW9kaWZ5UGFydGl0aW9uICgNCj4gPiArICBJTiBFRklfUEFSVElUSU9OX0VOVFJZICpFbnRyeSwN Cj4gPiArICBJTiBNT0RfUEFSQU1TICpQYXJhbXMsDQo+ID4gKyAgSU4gTU9EX0ZMQUdTIEZsYWdz DQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgRUZJX1NUQVRVUyBTdGF0dXM7DQo+ID4gKw0KPiA+ ICsgIEFTU0VSVCAoRW50cnkpOw0KPiA+ICsNCj4gPiArICBTdGF0dXMgPSBFRklfSU5WQUxJRF9Q QVJBTUVURVI7DQo+ID4gKw0KPiA+ICsgIHN3aXRjaCAoRmxhZ3MpIHsNCj4gPiArICAgIGNhc2Ug TU9EX0RFTEVURToNCj4gPiArICAgICAgWmVyb01lbSAoRW50cnksIHNpemVvZihFRklfUEFSVElU SU9OX0VOVFJZKSk7DQo+ID4gKyAgICAgIGJyZWFrOw0KPiA+ICsgICAgY2FzZSBNT0RfQVRUUjoN Cj4gPiArICAgICAgRW50cnktPkF0dHJpYnV0ZXMgPSBQYXJhbXMtPkF0dHJpYnV0ZXM7DQo+ID4g KyAgICAgIGJyZWFrOw0KPiA+ICsgICAgY2FzZSBNT0RfVFlQRToNCj4gPiArICAgICAgRW50cnkt PlBhcnRpdGlvblR5cGVHVUlEID0gUGFyYW1zLT5QYXJ0VHlwZUd1aWQ7DQo+ID4gKyAgICAgIGJy ZWFrOw0KPiA+ICsgICAgY2FzZSBNT0RfUkVOQU1FOg0KPiA+ICsgICAgICBTdHJDcHkgKEVudHJ5 LT5QYXJ0aXRpb25OYW1lLCBQYXJhbXMtPk5ld05hbWUpOw0KPiA+ICsgICAgICBicmVhazsNCj4g PiArICAgIGRlZmF1bHQ6DQo+ID4gKyAgICAgIFByaW50RXJyIChMIlVua25vd24gbW9kaWZpY2F0 aW9uIGZsYWcocykiLCBTdGF0dXMpOw0KPiA+ICsgICAgICByZXR1cm4gU3RhdHVzOw0KPiA+ICsg IH0NCj4gPiArDQo+ID4gKyAgcmV0dXJuIFdyaXRlR1BUICgpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ ICtFRklfS05PV05fUEFSVElUSU9OX1RZUEUgKlBhcnRpdGlvbkdldEtub3duVHlwZSAoDQo+ID4g KyAgSU4gVUlOVE4gSW5kZXgsDQo+ID4gKyAgSU4gT1VUIE9QVElPTkFMIFVJTlROICpOdW1FbnRy aWVzDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgaWYgKE51bUVudHJpZXMpIHsNCj4gPiArICAg ICpOdW1FbnRyaWVzID0gQVJSQVlfU0laRShQYXJ0aXRpb25UeXBlcyk7DQo+ID4gKyAgfQ0KPiA+ ICsgIGlmIChJbmRleCA+IEFSUkFZX1NJWkUoUGFydGl0aW9uVHlwZXMpKSB7DQo+ID4gKyAgICBy ZXR1cm4gTlVMTDsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgcmV0dXJuICZQYXJ0aXRpb25UeXBl c1tJbmRleF07DQo+ID4gK30NCj4gPiArDQo+ID4gZGlmZiAtLWdpdCBhL1NoZWxsUGtnL0xpYnJh cnkvVWVmaVNoZWxsR3B0Q29tbWFuZExpYi9HcHRXb3JrZXIuaA0KPiA+IGIvU2hlbGxQa2cvTGli cmFyeS9VZWZpU2hlbGxHcHRDb21tYW5kTGliL0dwdFdvcmtlci5oDQo+ID4gbmV3IGZpbGUgbW9k ZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAwMDAwMDAuLjllZmVjNWNlZmU5NA0KPiA+IC0tLSAv ZGV2L251bGwNCj4gPiArKysgYi9TaGVsbFBrZy9MaWJyYXJ5L1VlZmlTaGVsbEdwdENvbW1hbmRM aWIvR3B0V29ya2VyLmgNCj4gPiBAQCAtMCwwICsxLDE4NiBAQA0KPiA+ICsvKg0KPiA+ICsgKiAg QlNEIExJQ0VOU0UNCj4gPiArICoNCj4gPiArICogIENvcHlyaWdodChjKSAyMDE2IEJyb2FkY29t LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4NCj4gPiArICoNCj4gPiArICogIFJlZGlzdHJpYnV0aW9u IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dA0KPiA+ ICsgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv d2luZyBjb25kaXRpb25zDQo+ID4gKyAqICBhcmUgbWV0Og0KPiA+ICsgKg0KPiA+ICsgKiAgICAq IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w eXJpZ2h0DQo+ID4gKyAqICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KPiA+ICsgKiAgICAqIFJlZGlzdHJpYnV0aW9ucyBp biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0DQo+ID4gKyAq ICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk aXNjbGFpbWVyIGluDQo+ID4gKyAqICAgICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQ0KPiA+ICsgKiAgICAgIGRpc3RyaWJ1dGlvbi4N Cj4gPiArICogICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEJyb2FkY29tIG5vciB0aGUgbmFtZXMg b2YgaXRzDQo+ID4gKyAqICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkDQo+ID4gKyAqICAgICAgZnJvbSB0aGlzIHNvZnR3 YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KPiA+ICsgKg0K PiA+ICsgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF UlMgQU5EDQo+ID4gQ09OVFJJQlVUT1JTDQo+ID4gKyAqICAiQVMgSVMiIEFORCBBTlkgRVhQUkVT UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUDQo+ID4gTk9UDQo+ID4gKyAq ICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB TkQNCj4gPiBGSVRORVNTIEZPUg0KPiA+ICsgKiAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQ0KPiA+IENPUFlSSUdIVA0KPiA+ICsgKiAg T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs DQo+ID4gSU5DSURFTlRBTCwNCj4gPiArICogIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsDQo+IEJVVA0KPiA+IE5PVA0KPiA+ICsgKiAgTElN SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsNCj4g TE9TUw0KPiA+IE9GIFVTRSwNCj4gPiArICogIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQNCj4gPiBBTkQgT04gQU5ZDQo+ID4gKyAqICBU SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ LCBPUg0KPiA+IFRPUlQNCj4gPiArICogIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQNCj4gT0YNCj4gPiBUSEUgVVNFDQo+ID4gKyAqIE9G IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD SA0KPiA+IERBTUFHRS4NCj4gPiArICovDQo+ID4gKw0KPiA+ICsvKiBHUFQgcGFydGl0aW9uZXIg aGVhZGVyIGZpbGUgKi8NCj4gPiArDQo+ID4gKyNpZm5kZWYgX0dQVFdPUktFUl9IXw0KPiA+ICsj ZGVmaW5lIF9HUFRXT1JLRVJfSF8NCj4gPiArDQo+ID4gKyNpbmNsdWRlIDxVZWZpLmg+DQo+ID4g KyNpbmNsdWRlIDxTaGVsbEJhc2UuaD4NCj4gPiArDQo+ID4gKyNpbmNsdWRlIDxMaWJyYXJ5L0Jh c2VMaWIuaD4NCj4gPiArI2luY2x1ZGUgPExpYnJhcnkvQmFzZU1lbW9yeUxpYi5oPg0KPiA+ICsj aW5jbHVkZSA8TGlicmFyeS9EZWJ1Z0xpYi5oPg0KPiA+ICsjaW5jbHVkZSA8TGlicmFyeS9NZW1v cnlBbGxvY2F0aW9uTGliLmg+DQo+ID4gKyNpbmNsdWRlIDxMaWJyYXJ5L1NoZWxsQ29tbWFuZExp Yi5oPg0KPiA+ICsjaW5jbHVkZSA8TGlicmFyeS9TaGVsbExpYi5oPg0KPiA+ICsjaW5jbHVkZSA8 TGlicmFyeS9VZWZpTGliLmg+DQo+ID4gKyNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlTaGVsbExpYi9V ZWZpU2hlbGxMaWIuaD4NCj4gPiArI2luY2x1ZGUgPExpYnJhcnkvVWVmaUJvb3RTZXJ2aWNlc1Rh YmxlTGliLmg+DQo+ID4gKyNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlSdW50aW1lU2VydmljZXNUYWJs ZUxpYi5oPg0KPiA+ICsjaW5jbHVkZSA8TGlicmFyeS9QcmludExpYi5oPg0KPiA+ICsjaW5jbHVk ZSA8TGlicmFyeS9TaGVsbENFbnRyeUxpYi5oPg0KPiA+ICsjaW5jbHVkZSA8TGlicmFyeS9IaWlM aWIuaD4NCj4gPiArI2luY2x1ZGUgPExpYnJhcnkvRmlsZUhhbmRsZUxpYi5oPg0KPiA+ICsjaW5j bHVkZSA8UHJvdG9jb2wvRGV2aWNlUGF0aC5oPg0KPiA+ICsjaW5jbHVkZSA8TGlicmFyeS9EZXZp Y2VQYXRoTGliLmg+DQo+ID4gKyNpbmNsdWRlIDxQcm90b2NvbC9CbG9ja0lvLmg+DQo+ID4gKyNp bmNsdWRlIDxQcm90b2NvbC9EaXNrSW8uaD4NCj4gPiArI2luY2x1ZGUgPEluZHVzdHJ5U3RhbmRh cmQvTWJyLmg+DQo+ID4gKw0KPiA+ICt0eXBlZGVmIGVudW0gew0KPiA+ICsgIE1PRF9OQU1FICAg PSBCSVQwLA0KPiA+ICsgIE1PRF9BVFRSICAgPSBCSVQxLA0KPiA+ICsgIE1PRF9UWVBFICAgPSBC SVQyLA0KPiA+ICsgIE1PRF9ERUxFVEUgPSBCSVQzLA0KPiA+ICsgIE1PRF9SRU5BTUUgPSBCSVQ0 DQo+ID4gK30gTU9EX0ZMQUdTOw0KPiA+ICsNCj4gPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiA+ICsg IFVJTlROIEF0dHJpYnV0ZXM7DQo+ID4gKyAgRUZJX0dVSUQgUGFydFR5cGVHdWlkOw0KPiA+ICsg IENPTlNUIENIQVIxNiAqUGFydE5hbWU7DQo+ID4gKyAgQ09OU1QgQ0hBUjE2ICpOZXdOYW1lOw0K PiA+ICt9IE1PRF9QQVJBTVM7DQo+ID4gKw0KPiA+ICt0eXBlZGVmIGVudW0gew0KPiA+ICsgIFNS Q19CWV9OQU1FID0gQklUMCwNCj4gPiArICBTUkNfQllfTEJBICA9IEJJVDEsDQo+ID4gKyAgU1JD X0JZX05VTSAgPSBCSVQyLA0KPiA+ICsgIFNSQ19BTlkgICAgID0gQklUMw0KPiA+ICt9IFNFQVJD SF9UWVBFOw0KPiA+ICsNCj4gPiArI2RlZmluZSBNQVhfUEFSVElUSU9OX05BTUVfTEVOR1RIIDM2 DQo+ID4gKyNkZWZpbmUgRU5UUllfREVGQVVMVCAgICAgICAgICAgICAxMjgNCj4gPiArI2RlZmlu ZSBHUFRfUkVWSVNJT05fMV8wICAgICAgICAgIDB4MDAwMTAwMDANCj4gPiArDQo+ID4gKyNkZWZp bmUgQVJSQVlfU0laRSh4KSBcDQo+ID4gKyAgKHNpemVvZih4KSAvIHNpemVvZigoeClbMF0pKQ0K PiA+ICsNCj4gPiArLy8NCj4gPiArLy8gRXh0cmFjdCBJTlQzMiBmcm9tIGNoYXIgYXJyYXkNCj4g PiArLy8NCj4gPiArI2RlZmluZSBVTlBBQ0tfSU5UMzIoYSkgKElOVDMyKSggKCgoVUlOVDggKikg YSlbMF0gPDwgIDApIHwgICAgXA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoKChVSU5UOCAqKSBhKVsxXSA8PCAgOCkgfCAgICBcDQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICgoKFVJTlQ4ICopIGEpWzJdIDw8IDE2KSB8ICAgIFwNCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoVUlOVDggKikgYSlbM10gPDwgMjQpICkN Cj4gPiArDQo+ID4gKy8vDQo+ID4gKy8vIEV4dHJhY3QgVUlOVDMyIGZyb20gY2hhciBhcnJheQ0K PiA+ICsvLw0KPiA+ICsjZGVmaW5lIFVOUEFDS19VSU5UMzIoYSkgKFVJTlQzMikoICgoKFVJTlQ4 ICopIGEpWzBdIDw8ICAwKSB8ICAgIFwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoKChVSU5UOCAqKSBhKVsxXSA8PCAgOCkgfCAgICBcDQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKCgoVUlOVDggKikgYSlbMl0gPDwgMTYpIHwgICAgXA0K PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKFVJTlQ4ICopIGEpWzNd IDw8IDI0KSApDQo+ID4gKw0KPiA+ICsNCj4gPiArLy8NCj4gPiArLy8gR1BUIFBhcnRpdGlvbiBF bnRyeSBTdGF0dXMNCj4gPiArLy8NCj4gPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiA+ICsgIEJPT0xF QU4gT3V0T2ZSYW5nZTsNCj4gPiArICBCT09MRUFOIE92ZXJsYXA7DQo+ID4gKyAgQk9PTEVBTiBP c1NwZWNpZmljOw0KPiA+ICt9IEVGSV9QQVJUSVRJT05fRU5UUllfU1RBVFVTOw0KPiA+ICsNCj4g PiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiA+ICsgIENPTlNUIEVGSV9HVUlEIFR5cGVHdWlkOw0KPiA+ ICsgIENPTlNUIENIQVIxNiAqVHlwZU5hbWU7DQo+ID4gKw0KPiA+ICt9IEVGSV9LTk9XTl9QQVJU SVRJT05fVFlQRTsNCj4gPiArDQo+ID4gK0VGSV9LTk9XTl9QQVJUSVRJT05fVFlQRSAqUGFydGl0 aW9uR2V0S25vd25UeXBlICgNCj4gPiArICBJTiBVSU5UTiBJbmRleCwNCj4gPiArICBJTiBPVVQg T1BUSU9OQUwgVUlOVE4gKk51bUVudHJpZXMNCj4gPiArICApOw0KPiA+ICsNCj4gPiArRUZJX1NU QVRVUw0KPiA+ICtQYXJ0aXRpb25HZXRHcHRUYWJsZXMgKA0KPiA+ICsgIElOICBFRklfRElTS19J T19QUk9UT0NPTCAgICAgICAgICpEaXNrSW9Qcm90LA0KPiA+ICsgIElOICBFRklfQkxPQ0tfSU9f UFJPVE9DT0wgICAgICAgICpCbG9ja0lvUHJvdA0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ICtVSU5U Tg0KPiA+ICtQYXJ0aXRpb25MaXN0R3B0RW50cmllcyAoDQo+ID4gKyAgVk9JRA0KPiA+ICsgICk7 DQo+ID4gKw0KPiA+ICtWT0lEDQo+ID4gK1BhcnRpdGlvblByaW50R3B0UGFydEluZm8gKA0KPiA+ ICsgIElOIEVGSV9QQVJUSVRJT05fRU5UUlkgKkVudHJ5DQo+ID4gKyAgKTsNCj4gPiArDQo+ID4g K0VGSV9TVEFUVVMNCj4gPiArR2V0UGFydGl0aW9uVHlwZVN0ciAoDQo+ID4gKyAgRUZJX0dVSUQg R3VpZCwNCj4gPiArICBDSEFSMTYgKlBhcnRUeXBlU3RyLA0KPiA+ICsgIEJPT0xFQU4gTm9HdWlk U3RyDQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gKw0KPiA+ICtFRklfU1RBVFVTDQo+ID4gK1BhcnRp dGlvbkdwdENsZWFyQWxsICgNCj4gPiArICBWT0lEDQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gK0VG SV9TVEFUVVMNCj4gPiArUGFydGl0aW9uR3B0Q3JlYXRlUGFydGl0aW9uICgNCj4gPiArICBDT05T VCBDSEFSMTYgKlBhcnROYW1lLA0KPiA+ICsgIEVGSV9MQkEgU3RhcnRMYmEsDQo+ID4gKyAgRUZJ X0xCQSBQYXJ0aXRpb25TaXplLA0KPiA+ICsgIFVJTlQ2NCBBdHRyaWJ1dGVzLA0KPiA+ICsgIEVG SV9HVUlEIFBhcnRUeXBlR3VpZCk7DQo+ID4gKw0KPiA+ICtFRklfU1RBVFVTDQo+ID4gK1BhcnRp dGlvbkdwdE1vZGlmeVBhcnRpdGlvbiAoDQo+ID4gKyAgRUZJX1BBUlRJVElPTl9FTlRSWSAqRW50 cnksDQo+ID4gKyAgTU9EX1BBUkFNUyAqUGFyYW1zLA0KPiA+ICsgIE1PRF9GTEFHUyBGbGFncw0K PiA+ICsgICk7DQo+ID4gKw0KPiA+ICtWT0lEDQo+ID4gK0dwdENsZWFudXBHbG9iYWxzICgNCj4g PiArICBWT0lEDQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gK0VGSV9QQVJUSVRJT05fRU5UUlkgKg0K PiA+ICtQYXJ0aXRpb25GaW5kUGFydGl0aW9uQnlDcml0ZXJpYSAoDQo+ID4gKyAgQ09OU1QgQ0hB UjE2ICAgKk5hbWUsDQo+ID4gKyAgRUZJX0xCQSAgICAgICAgU3RhcnRMYmEsDQo+ID4gKyAgRUZJ X0xCQSAgICAgICAgRW5kaW5nTGJhLA0KPiA+ICsgIFNFQVJDSF9UWVBFICAgIFNlYXJjaFR5cGUp Ow0KPiA+ICsNCj4gPiArVk9JRA0KPiA+ICtQcmludEVyciAoSU4gQ09OU1QgQ0hBUjE2ICpNZXNz YWdlLCBJTiBFRklfU1RBVFVTIFN0YXR1cyk7DQo+ID4gKw0KPiA+ICsjZW5kaWYgLy9fR1BUV09S S0VSX0hfDQo+ID4gZGlmZiAtLWdpdA0KPiA+IGEvU2hlbGxQa2cvTGlicmFyeS9VZWZpU2hlbGxH cHRDb21tYW5kTGliL1VlZmlTaGVsbEdwdENvbW1hbmRMaWIuYw0KPiA+IGIvU2hlbGxQa2cvTGli cmFyeS9VZWZpU2hlbGxHcHRDb21tYW5kTGliL1VlZmlTaGVsbEdwdENvbW1hbmRMaWIuYw0KPiA+ IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAwMDAwMDAwLi5hOWQ3NGE3ODA5 MTENCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrDQo+ID4gYi9TaGVsbFBrZy9MaWJyYXJ5L1Vl ZmlTaGVsbEdwdENvbW1hbmRMaWIvVWVmaVNoZWxsR3B0Q29tbWFuZExpYi5jDQo+ID4gQEAgLTAs MCArMSwxMTM1IEBADQo+ID4NCj4gKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioNCj4gPiAqKioqKioqKioqKioqKioqKioqKioqDQo+ID4g K0NvcHlyaWdodCAoQykgMjAxNiBNYXJ2ZWxsIEludGVybmF0aW9uYWwgTHRkLg0KPiA+ICsNCj4g PiArTWFydmVsbCBCU0QgTGljZW5zZSBPcHRpb24NCj4gPiArDQo+ID4gK0lmIHlvdSByZWNlaXZl ZCB0aGlzIEZpbGUgZnJvbSBNYXJ2ZWxsLCB5b3UgbWF5IG9wdCB0byB1c2UsIHJlZGlzdHJpYnV0 ZQ0KPiA+IGFuZC9vcg0KPiA+ICttb2RpZnkgdGhpcyBGaWxlIHVuZGVyIHRoZSBmb2xsb3dpbmcg bGljZW5zaW5nIHRlcm1zLg0KPiA+ICtSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCj4gPiBtb2RpZmljYXRpb24sDQo+ID4g K2FyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl IG1ldDoNCj4gPiArDQo+ID4gKyogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KPiA+ICsgIHRoaXMgbGlzdCBvZiBj b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQo+ID4gKw0KPiA+ICsqIFJl ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w eXJpZ2h0DQo+ID4gKyAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQ0KPiA+ICsgIGRvY3VtZW50YXRpb24gYW5kL29yIG90 aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQo+ID4gKw0KPiA+ ICsqIE5laXRoZXIgdGhlIG5hbWUgb2YgTWFydmVsbCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250 cmlidXRvcnMgbWF5IGJlDQo+ID4gKyAgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj dHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUNCj4gd2l0aG91dA0KPiA+ICsgIHNwZWNpZmlj IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCj4gPiArDQo+ID4gK1RISVMgU09GVFdBUkUgSVMg UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORA0KPiA+IENPTlRSSUJVVE9SUyAi QVMgSVMiIEFORA0KPiA+ICtBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV RElORywgQlVUIE5PVCBMSU1JVEVEDQo+IFRPLA0KPiA+IFRIRSBJTVBMSUVEDQo+ID4gK1dBUlJB TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVINCj4g PiBQVVJQT1NFIEFSRQ0KPiA+ICtESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q WVJJR0hUIE9XTkVSIE9SDQo+ID4gQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1INCj4gPiArQU5Z IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1INCj4g PiBDT05TRVFVRU5USUFMIERBTUFHRVMNCj4gPiArKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFDQo+IEdPT0RTDQo+ID4gT1IgU0VSVklDRVM7 DQo+ID4gK0xPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV UFRJT04pDQo+IEhPV0VWRVINCj4gPiBDQVVTRUQgQU5EIE9ODQo+ID4gK0FOWSBUSEVPUlkgT0Yg TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUg0KPiA+ IFRPUlQNCj4gPiArKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ TiBBTlkgV0FZIE9VVCBPRg0KPiA+IFRIRSBVU0UgT0YgVEhJUw0KPiA+ICtTT0ZUV0FSRSwgRVZF TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCj4gPiArDQo+ ID4NCj4gKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKg0KPiA+ICoqKioqKioqKioqKioqKioqKioqKiovDQo+ID4gKw0KPiA+ICsvKiBQb3J0 aW9ucyBDb3B5cmlnaHQgKEMpIDIwMTYgQnJvYWRjb20gKi8NCj4gPiArDQo+ID4gKyNpbmNsdWRl ICJGYXRGb3JtYXQuaCINCj4gPiArI2luY2x1ZGUNCj4gPiA8TGlicmFyeS9VZWZpU2hlbGxEZWJ1 ZzFDb21tYW5kc0xpYi9VZWZpU2hlbGxEZWJ1ZzFDb21tYW5kc0xpYi5oPg0KPiA+ICsjaW5jbHVk ZSA8TGlicmFyeS9UaW1lckxpYi5oPg0KPiA+ICsNCj4gPiArQ09OU1QgQ0hBUjE2IGdTaGVsbEdw dEZpbGVOYW1lW10gPSBMIlNoZWxsQ29tbWFuZCI7DQo+ID4gK1NUQVRJQyBDT05TVCBDSEFSMTYg Z0FwcE5hbWVbXSA9IEwiZ3B0IjsNCj4gPiArRUZJX0hBTkRMRSBnU2hlbGxHcHRIaWlIYW5kbGUg PSBOVUxMOw0KPiA+ICsNCj4gPiArU1RBVElDIENPTlNUIFNIRUxMX1BBUkFNX0lURU0gUGFyYW1M aXN0W10gPSB7DQo+ID4gKyAgLy8gUGFydGl0aW9uLXJlbGF0ZWQgb3BlcmF0aW9ucw0KPiA+ICsg IHsgTCJjbGVhciIsIFR5cGVGbGFnIH0sICAgICAgICAgICAgICAgICAgLy8gQ2xlYXJzIGFsbCBw YXJ0aXRpb25zDQo+ID4gKyAgeyBMImNyZWF0ZSIsIFR5cGVGbGFnIH0sICAgICAgICAgICAgICAg ICAvLyBDcmVhdGVzIGEgcGFydGl0aW9uDQo+ID4gKyAgeyBMImRlbGV0ZSIsIFR5cGVGbGFnIH0s ICAgICAgICAgICAgICAgICAvLyBEZWxldGVzIGEgcGFydGl0aW9uDQo+ID4gKyAgeyBMImxpc3Qi LCBUeXBlRmxhZyB9LCAgICAgICAgICAgICAgICAgICAvLyBMaXN0cyBhbGwgcGFydGl0aW9ucw0K PiA+ICsgIHsgTCJyZW5hbWUiLCBUeXBlRmxhZyB9LCAgICAgICAgICAgICAgICAgLy8gUmVuYW1l cyBhIHBhcnRpdGlvbg0KPiA+ICsgIHsgTCJzZXRhdHRyIiwgVHlwZUZsYWcgfSwgICAgICAgICAg ICAgICAgLy8gU2V0IGF0dHJpYnV0ZXMgZm9yIGEgcGFydGl0aW9uIGluIHBhcnRpdGlvbg0KPiA+ IHRhYmxlDQo+ID4gKyAgeyBMInNldHR5cGUiLCBUeXBlRmxhZyB9LA0KPiA+ICsgIHsgTCJzeW5j IiwgVHlwZUZsYWcgfSwgICAgICAgICAgICAgICAgICAgLy8gU3luY2hyb25pemVzIGVpdGhlciBt YXN0ZXIgb3INCj4gYWx0ZXJuYXRpdmUNCj4gPiBwYXJ0aXRpb24gdGFibGUNCj4gPiArICB7IEwi dHlwZXNpbmZvIiwgVHlwZUZsYWcgfSwgICAgICAgICAgICAgICAgIC8vIFZlcmlmaWVzIGNvcnJl Y3RuZXNzIG9mIG1hc3RlciBhbmQNCj4gPiBhbHRlcm5hdGl2ZSBwYXJ0aXRpb24gdGFibGVzDQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBCbG9j a0lvLXJlbGF0ZWQgb3BlcmF0aW9ucw0KPiA+ICsgIHsgTCJyZWFkIiwgVHlwZUZsYWcgfSwgICAg ICAgICAgICAgICAgICAgLy8gUmVhZHMgbiBieXRlcyBpbnRvIG1lbW9yeSBhZGRyZXNzDQo+IGZy b20NCj4gPiBhIHBhcnRpdGlvbiBzdGFydGluZyBmcm9tIGEgY2VydGFpbiBsYmENCj4gPiArICB7 IEwicmVhZGZpbGUiLCBUeXBlRmxhZyB9LCAgICAgICAgICAgICAgIC8vIFNhbWUgYXMgYWJvdmUs IGJ1dCBpbnN0ZWFkIG9mIHN0b3JlIGl0DQo+IGluDQo+ID4gbWVtb3J5IHNhdmVzIGludG8gYSBm aWxlIHN5c3RlbQ0KPiA+ICsgIHsgTCJ3cml0ZSIsIFR5cGVGbGFnIH0sICAgICAgICAgICAgICAg ICAgLy8gV3JpdGVzIG4gYnl0ZXMgZnJvbSBtZW1vcnkgaW50byBhDQo+ID4gcGFydGl0aW9uIHN0 YXJ0aW5nIGZyb20gYSBjZXJ0YWluIGxiYQ0KPiA+ICsgIHsgTCJ3cml0ZWZpbGUiLCBUeXBlRmxh ZyB9LCAgICAgICAgICAgICAgLy8gU2FtZSBhcyBhYm92ZSwgYnV0IGluc3RlYWQgb2YgZ2V0dGlu Zw0KPiA+IGRhdGEgZnJvbSBtZW1vcnkgcmVhZHMgYSBmaWxlDQo+ID4gKyAgeyBMImluZm8iLCBU eXBlRmxhZyB9LCAgICAgICAgICAgICAgICAgICAvLyBHZXQgaW5mb3JtYXRpb24gb24gYSBjZXJ0 YWluIHBhcnRpdGlvbg0KPiA+IChzdGFydExiYSwgbGFzdExiYSwgYXR0cmlidXRlcykNCj4gPiAr ICB7IEwiZmF0Zm9ybWF0IiwgVHlwZUZsYWcgfSwgICAgICAgICAgICAgIC8vIEZBVCBmb3JtYXQg b2YgYSBwYXJ0aXRpb24NCj4gPiArICB7IEwiLXR5cGUiLCBUeXBlVmFsdWUgfSwNCj4gPiArICB7 IEwiLXllcyIsIFR5cGVGbGFnIH0sDQo+ID4gKyAgeyBMIi12ZXJib3NlIiwgVHlwZUZsYWcgfSwN Cj4gPiArICB7IE5VTEwsIFR5cGVNYXggfQ0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArdHlwZWRlZiBl bnVtIHsNCj4gPiArICAvLyBOb3QgcmVxdWlyZXMgcHJlc2VuY2UNCj4gPiArICBDTEVBUiAgICAg ICA9IEJJVDAsDQo+ID4gKyAgQ1JFQVRFICAgICAgPSBCSVQxLA0KPiA+ICsgIExJU1QgICAgICAg ID0gQklUMiwNCj4gPiArICBTWU5DICAgICAgICA9IEJJVDMsDQo+ID4gKyAgVFlQRVNfSU5GTyAg PSBCSVQ0LA0KPiA+ICsNCj4gPiArICAvLyBSZXF1aXJlcyBwcmVzZW5jZQ0KPiA+ICsgIERFTEVU RSAgICAgID0gQklUNSwNCj4gPiArICBJTkZPICAgICAgICA9IEJJVDYsDQo+ID4gKyAgUkVBRCAg ICAgICAgPSBCSVQ3LA0KPiA+ICsgIFJFQURfRklMRSAgID0gQklUOCwNCj4gPiArICBSRU5BTUUg ICAgICA9IEJJVDksDQo+ID4gKyAgU0VUQVRUUiAgICAgPSBCSVQxMCwNCj4gPiArICBTRVRUWVBF ICAgICA9IEJJVDExLA0KPiA+ICsgIFdSSVRFICAgICAgID0gQklUMTIsDQo+ID4gKyAgV1JJVEVf RklMRSAgPSBCSVQxMywNCj4gPiArICBGQVRfRk9STUFUICA9IEJJVDE0LA0KPiA+ICt9IEZsYWdz Ow0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgUmV0dXJuIHRoZSBmaWxlIG5hbWUgb2YgdGhlIGhl bHAgdGV4dCBmaWxlIGlmIG5vdCB1c2luZyBISUkuDQo+ID4gKw0KPiA+ICsgIEByZXR1cm4gVGhl IHN0cmluZyBwb2ludGVyIHRvIHRoZSBmaWxlIG5hbWUuDQo+ID4gKyoqLw0KPiA+ICtDT05TVCBD SEFSMTYgKg0KPiA+ICtFRklBUEkNCj4gPiArU2hlbGxDb21tYW5kR2V0TWFuRmlsZU5hbWVHcHQg KA0KPiA+ICsgIFZPSUQNCj4gPiArICApDQo+ID4gK3sNCj4gPiArDQo+ID4gKyAgcmV0dXJuIGdT aGVsbEdwdEZpbGVOYW1lOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtTVEFUSUMNCj4gPiArRUZJX1NU QVRVUw0KPiA+ICtPcGVuQW5kUHJlcGFyZUZpbGUgKA0KPiA+ICsgIElOIENIQVIxNiAqRmlsZVBh dGgsDQo+ID4gKyAgT1VUIFNIRUxMX0ZJTEVfSEFORExFICpGaWxlSGFuZGxlLA0KPiA+ICsgIElO IEJPT0xFQU4gV3JpdGVOZWVkZWQNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBFRklfU1RBVFVT IFN0YXR1czsNCj4gPiArICBVSU5UNjQgT3Blbk1vZGU7DQo+ID4gKw0KPiA+ICsgIE9wZW5Nb2Rl ID0gRUZJX0ZJTEVfTU9ERV9SRUFEOw0KPiA+ICsNCj4gPiArICBpZiAoV3JpdGVOZWVkZWQpIHsN Cj4gPiArICAgIE9wZW5Nb2RlIHw9IEVGSV9GSUxFX01PREVfV1JJVEUgfCBFRklfRklMRV9NT0RF X0NSRUFURTsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIFN0YXR1cyA9IFNoZWxsT3BlbkZpbGVC eU5hbWUgKEZpbGVQYXRoLCBGaWxlSGFuZGxlLCBPcGVuTW9kZSwgMCk7DQo+ID4gKyAgaWYgKEVG SV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICsgICAgU2hlbGxQcmludEhpaUV4ICgtMSwgLTEsDQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgIE5VTEwsIFNUUklOR19UT0tFTiAoU1RSX0dQVF9FUlJP UiksDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGdTaGVsbEdwdEhpaUhhbmRsZSwNCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgZ0FwcE5hbWUsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAg IFN0YXR1cywNCj4gPiArICAgICAgICAgICAgICAgICAgICAgTCJDYW5ub3Qgb3BlbiBmaWxlIg0K PiA+ICsgICAgICAgICAgICAgICAgICAgICk7DQo+ID4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiA+ ICsgIH0NCj4gPiArDQo+ID4gKyAgU3RhdHVzID0gRmlsZUhhbmRsZVNldFBvc2l0aW9uICgqRmls ZUhhbmRsZSwgMCk7DQo+ID4gKw0KPiA+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4g PiArICAgIFNoZWxsUHJpbnRIaWlFeCAoLTEsIC0xLA0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICBOVUxMLCBTVFJJTkdfVE9LRU4gKFNUUl9HUFRfRVJST1IpLA0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICBnU2hlbGxHcHRIaWlIYW5kbGUsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGdB cHBOYW1lLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBTdGF0dXMsDQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICJDYW5ub3Qgc2V0IGZpbGUgcG9zaXRpb24gdG8gdGhlIGZpcnN0IGJ5dGUi DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgKTsNCj4gPiArDQo+ID4gKyAgICBTaGVsbENsb3Nl RmlsZSAoRmlsZUhhbmRsZSk7DQo+ID4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiA+ICsgIH0NCj4g PiArDQo+ID4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtWT0lE DQo+ID4gK1ByaW50RXJyICgNCj4gPiArICBJTiBDT05TVCBDSEFSMTYgKk1lc3NhZ2UsDQo+ID4g KyAgSU4gRUZJX1NUQVRVUyBTdGF0dXMNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBTaGVsbFBy aW50SGlpRXggKC0xLCAtMSwNCj4gPiArICAgICAgICAgICAgICAgICAgIE5VTEwsIFNUUklOR19U T0tFTiAoU1RSX0dQVF9FUlJPUiksDQo+ID4gKyAgICAgICAgICAgICAgICAgICBnU2hlbGxHcHRI aWlIYW5kbGUsDQo+ID4gKyAgICAgICAgICAgICAgICAgICBnQXBwTmFtZSwNCj4gPiArICAgICAg ICAgICAgICAgICAgIFN0YXR1cywNCj4gPiArICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UNCj4g PiArICAgICAgICAgICAgICAgICAgKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArU1RBVElDDQo+ID4g K0JPT0xFQU4NCj4gPiArSXNQYXJ0aXRpb25hYmxlRGV2aWNlUGF0aCAoDQo+ID4gKyAgSU4gRUZJ X0RFVklDRV9QQVRIICpEZXZpY2VQYXRoDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgVUlOVE4g UGF0aFNpemU7DQo+ID4gKyAgRUZJX0RFVklDRV9QQVRIICpQYXRoSW5zdGFuY2U7DQo+ID4gKyAg Qk9PTEVBTiBQYXJ0aXRpb25hYmxlOw0KPiA+ICsNCj4gPiArICBQYXJ0aXRpb25hYmxlID0gVFJV RTsNCj4gPiArICB3aGlsZSAoRGV2aWNlUGF0aCAhPSBOVUxMKSB7DQo+ID4gKyAgICBQYXRoSW5z dGFuY2UgPSBHZXROZXh0RGV2aWNlUGF0aEluc3RhbmNlICgmRGV2aWNlUGF0aCwgJlBhdGhTaXpl KTsNCj4gPiArDQo+ID4gKyAgICB3aGlsZSAoIUlzRGV2aWNlUGF0aEVuZCAoUGF0aEluc3RhbmNl KSkgew0KPiA+ICsgICAgICBpZiAoKERldmljZVBhdGhUeXBlIChQYXRoSW5zdGFuY2UpID09IE1F RElBX0RFVklDRV9QQVRIKSkgew0KPiA+ICsgICAgICAgIFBhcnRpdGlvbmFibGUgPSBGQUxTRTsN Cj4gPiArICAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAgUGF0aEluc3RhbmNlID0gTmV4dERldmlj ZVBhdGhOb2RlIChQYXRoSW5zdGFuY2UpOw0KPiA+ICsgICAgfQ0KPiA+ICsgIH0NCj4gPiArICBy ZXR1cm4gUGFydGl0aW9uYWJsZTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArU1RBVElDDQo+ID4gK0VG SV9TVEFUVVMNCj4gPiArR3B0UHJvbXB0WWVzTm8gKA0KPiA+ICsgIElOIENPTlNUIEVGSV9TVFJJ TkdfSUQgSGlpRm9ybWF0U3RyaW5nSWQNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBFRklfU1RB VFVTIFN0YXR1czsNCj4gPiArICBWT0lEICAgICAgICpSZXNwb25zZTsNCj4gPiArDQo+ID4gKyAg U3RhdHVzID0gU2hlbGxQcm9tcHRGb3JSZXNwb25zZUhpaSAoU2hlbGxQcm9tcHRSZXNwb25zZVR5 cGVZZXNObywNCj4gPiBIaWlGb3JtYXRTdHJpbmdJZCwgZ1NoZWxsR3B0SGlpSGFuZGxlLCAmUmVz cG9uc2UpOw0KPiA+ICsgIGlmICgoRUZJX0VSUk9SIChTdGF0dXMpKSB8fCAoKihTSEVMTF9QUk9N UFRfUkVTUE9OU0UNCj4gKilSZXNwb25zZSkgIT0NCj4gPiBTaGVsbFByb21wdFJlc3BvbnNlWWVz KSB7DQo+ID4gKyAgICByZXR1cm4gRUZJX0FCT1JURUQ7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiAr ICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ID4gK30NCj4gPiArDQo+ID4gK1NUQVRJQw0KPiA+ICtW T0lEIEZvcm1hdFNpemUoDQo+ID4gKyAgVUlOVDY0IFNpemUsIENIQVIxNiAqQnVmZmVyKQ0KPiA+ ICt7DQo+ID4gKyNkZWZpbmUgTUFYX1NJWkVfQlVGX1NJWkUgMzINCj4gPiArICBVSU5UNjQgQmFz ZSwgRnJhYzsNCj4gPiArICBDSEFSMTYgTWV0cmljOw0KPiA+ICsNCj4gPiArICBNZXRyaWMgPSBM J0InOw0KPiA+ICsgIEZyYWMgPSAwOw0KPiA+ICsgIGlmIChTaXplIDwgU0laRV8xS0IpIHsNCj4g PiArICAgIEJhc2UgPSBTaXplOw0KPiA+ICsgIH0gZWxzZSBpZiAoU2l6ZSA8IFNJWkVfMU1CKSB7 DQo+ID4gKyAgICBCYXNlID0gU2l6ZSAvIFNJWkVfMUtCOw0KPiA+ICsgICAgRnJhYyA9ICgoU2l6 ZSAlIFNJWkVfMUtCKSAqIDEwKSA+PiAxMDsNCj4gPiArICAgIE1ldHJpYyA9IEwnSyc7DQo+ID4g KyAgfSBlbHNlIGlmIChTaXplIDwgU0laRV8xR0IpIHsNCj4gPiArICAgIEJhc2UgPSBTaXplIC8g U0laRV8xTUI7DQo+ID4gKyAgICBGcmFjID0gKChTaXplICUgU0laRV8xTUIpICogMTApID4+IDIw Ow0KPiA+ICsgICAgTWV0cmljID0gTCdNJzsNCj4gPiArICB9IGVsc2UgaWYgKFNpemUgPCBTSVpF XzFUQikgew0KPiA+ICsgICAgQmFzZSA9IFNpemUgLyBTSVpFXzFHQjsNCj4gPiArICAgIEZyYWMg PSAoKFNpemUgJSBTSVpFXzFHQikgKiAxMCkgPj4gMzA7DQo+ID4gKyAgICBNZXRyaWMgPSBMJ0cn Ow0KPiA+ICsgIH0gZWxzZSB7DQo+ID4gKyAgICBCYXNlID0gU2l6ZSAvIFNJWkVfMVRCOw0KPiA+ ICsgICAgRnJhYyA9ICgoU2l6ZSAlIFNJWkVfMVRCKSAqIDEwKSA+PiA0MDsNCj4gPiArICAgIE1l dHJpYyA9IEwnVCc7DQo+ID4gKyAgfQ0KPiA+ICsgIGlmIChGcmFjKSB7DQo+ID4gKyAgICBVbmlj b2RlU1ByaW50IChCdWZmZXIsIE1BWF9TSVpFX0JVRl9TSVpFLCBMIiVkLiVkJWMiLCBCYXNlLCBG cmFjLA0KPiA+IE1ldHJpYyk7DQo+ID4gKyAgfSBlbHNlIHsNCj4gPiArICAgIFVuaWNvZGVTUHJp bnQgKEJ1ZmZlciwgTUFYX1NJWkVfQlVGX1NJWkUsIEwiJWQlYyIsIEJhc2UsIE1ldHJpYyk7DQo+ ID4gKyAgfQ0KPiA+ICt9DQo+ID4gKw0KPiA+ICtTVEFUSUMNCj4gPiArRUZJX1NUQVRVUw0KPiA+ ICtGaW5kQW5kUHJpbnRQYXJ0aXRpb25hYmxlRGV2aWNlcyAoVk9JRCkNCj4gPiArew0KPiA+ICsg IFVJTlROIEluZGV4Ow0KPiA+ICsgIEVGSV9IQU5ETEUgICAgICAqSGFuZGxlUG9pbnRlcjsNCj4g PiArICBVSU5UTiAgICAgICAgICAgSGFuZGxlQ291bnQ7DQo+ID4gKyAgVUlOVE4gICAgICAgICAg IERldkNvdW50Ow0KPiA+ICsgIEVGSV9TVEFUVVMgICAgICBTdGF0dXM7DQo+ID4gKyAgQk9PTEVB TiAgICAgICAgIEZpcnN0VGltZTsNCj4gPiArDQo+ID4gKyAgU3RhdHVzID0gZ0JTLT5Mb2NhdGVI YW5kbGVCdWZmZXIgKEJ5UHJvdG9jb2wsDQo+ICZnRWZpQmxvY2tJb1Byb3RvY29sR3VpZCwNCj4g PiBOVUxMLCAmSGFuZGxlQ291bnQsICZIYW5kbGVQb2ludGVyKTsNCj4gPiArICBpZiAoRUZJX0VS Uk9SIChTdGF0dXMpKSB7DQo+ID4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiA+ICsgIH0NCj4gPiAr DQo+ID4gKyAgRGV2Q291bnQgPSAwOw0KPiA+ICsgIEZpcnN0VGltZSA9IFRSVUU7DQo+ID4gKw0K PiA+ICsgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IEhhbmRsZUNvdW50OyBJbmRleCsrKSB7DQo+ ID4gKyAgICBFRklfREVWSUNFX1BBVEggICAgICAgKkRldmljZVBhdGg7DQo+ID4gKyAgICBDT05T VCBDSEFSMTYgICAgICAgICAgKk1hcFBhdGg7DQo+ID4gKyAgICBDSEFSMTYgICAgICAgICAgICAg ICAgKk1hdGNoOw0KPiA+ICsgICAgRUZJX0JMT0NLX0lPICAgICAgICAgICpCbGtJbzsNCj4gPiAr ICAgIEVGSV9ESVNLX0lPICAgICAgICAgICAqRGlza0lvOw0KPiA+ICsgICAgQ0hBUjE2ICAgICAg ICAgICAgICAgICpCdWZmZXJGb3JTaXplOw0KPiA+ICsNCj4gPiArICAgIFN0YXR1cyA9IGdCUy0+ SGFuZGxlUHJvdG9jb2wgKEhhbmRsZVBvaW50ZXJbSW5kZXhdLA0KPiA+ICZnRWZpQmxvY2tJb1By b3RvY29sR3VpZCwgKFZPSUQgKiopJkJsa0lvKTsNCj4gPiArICAgIGlmIChFRklfRVJST1IgKFN0 YXR1cykpIHsNCj4gPiArICAgICAgY29udGludWU7DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ICsg ICAgRGV2aWNlUGF0aCA9IERldmljZVBhdGhGcm9tSGFuZGxlIChIYW5kbGVQb2ludGVyW0luZGV4 XSk7DQo+ID4gKyAgICBpZiAoIUlzUGFydGl0aW9uYWJsZURldmljZVBhdGggKERldmljZVBhdGgp KSB7DQo+ID4gKyAgICAgIGNvbnRpbnVlOw0KPiA+ICsgICAgfQ0KPiA+ICsgICAgTWFwUGF0aCA9 IGdFZmlTaGVsbFByb3RvY29sLT5HZXRNYXBGcm9tRGV2aWNlUGF0aCAoJkRldmljZVBhdGgpOw0K PiA+ICsgICAgaWYgKE1hcFBhdGggPT0gTlVMTCkgew0KPiA+ICsgICAgICBjb250aW51ZTsNCj4g PiArICAgIH0NCj4gPiArDQo+ID4gKyAgICBTdGF0dXMgPSBnQlMtPkhhbmRsZVByb3RvY29sIChI YW5kbGVQb2ludGVyW0luZGV4XSwNCj4gPiAmZ0VmaURpc2tJb1Byb3RvY29sR3VpZCwgKFZPSUQg KiopJkRpc2tJbyk7DQo+ID4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gKyAg ICAgIGNvbnRpbnVlOw0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArICAgIE1hdGNoID0gU3RyU3Ry IChNYXBQYXRoLCBMIjtCTEsiKTsNCj4gPiArICAgIGlmIChNYXRjaCkgew0KPiA+ICsgICAgICBN YXBQYXRoID0gTWF0Y2g7DQo+ID4gKyAgICAgIE1hcFBhdGgrKzsNCj4gPiArICAgIH0NCj4gPiAr DQo+ID4gKyAgICBpZiAoRmlyc3RUaW1lKSB7DQo+ID4gKyAgICAgIEJ1ZmZlckZvclNpemUgPSBB bGxvY2F0ZVplcm9Qb29sIChNQVhfU0laRV9CVUZfU0laRSAqIHNpemVvZg0KPiA+IChDSEFSMTYp KTsNCj4gPiArICAgICAgQVNTRVJUIChCdWZmZXJGb3JTaXplKTsNCj4gPiArICAgICAgUHJpbnQg KEwiIERldmljZVx0ICAgICBTaXplICBDb21tZW50c1xuIik7DQo+ID4gKyAgICAgIFByaW50IChM IiAtLS0tLS0gICAtLS0tLS0tICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCj4gPiBcbiIpOw0KPiA+ICsgICAgICBGaXJzdFRpbWUg PSBGQUxTRTsNCj4gPiArICAgIH0NCj4gPiArICAgIEdwdENsZWFudXBHbG9iYWxzICgpOw0KPiA+ ICsgICAgRm9ybWF0U2l6ZSAoTXVsdFU2NHgzMiAoQmxrSW8tPk1lZGlhLT5MYXN0QmxvY2sgKyAx LCBCbGtJby0+TWVkaWEtDQo+ID4gPkJsb2NrU2l6ZSksIEJ1ZmZlckZvclNpemUpOw0KPiA+ICsg ICAgU2hlbGxQcmludEhpaUV4ICgtMSwgLTEsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIE5V TEwsIFNUUklOR19UT0tFTiAoU1RSX0dQVF9MSVNUX0RFVlMpLA0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICBnU2hlbGxHcHRIaWlIYW5kbGUsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIE1h cFBhdGgsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIEJ1ZmZlckZvclNpemUpOw0KPiA+ICsg ICAgaWYgKEJsa0lvLT5NZWRpYS0+UmVhZE9ubHkpIHsNCj4gPiArICAgICAgUHJpbnQgKEwiUmVh ZC1Pbmx5ISAiKTsNCj4gPiArICAgIH0NCj4gPiArICAgIGlmICghQmxrSW8tPk1lZGlhLT5NZWRp YVByZXNlbnQpIHsNCj4gPiArICAgICAgUHJpbnQgKEwiTm8gTWVkaWEhICIpOw0KPiA+ICsgICAg fQ0KPiA+ICsgICAgaWYgKCFFRklfRVJST1IgKFBhcnRpdGlvbkdldEdwdFRhYmxlcyAoRGlza0lv LCBCbGtJbykpKSB7DQo+ID4gKyAgICAgIFByaW50IChMIlZhbGlkIEdQVC4gIik7DQo+ID4gKyAg ICB9DQo+ID4gKyAgICBpZiAoQmxrSW8tPk1lZGlhLT5SZW1vdmFibGVNZWRpYSkgew0KPiA+ICsg ICAgICBQcmludCAoTCJSZW1vdmFibGUgZGV2aWNlLiIpOw0KPiA+ICsgICAgfQ0KPiA+ICsgICAg UHJpbnQgKEwiXG4iKTsNCj4gPiArICAgIERldkNvdW50Kys7DQo+ID4gKyAgfQ0KPiA+ICsgIFBy aW50IChMIlxyXG4iKTsNCj4gPiArICBpZiAoRGV2Q291bnQpIHsNCj4gPiArICAgIFByaW50IChM IiVkIHBvdGVudGlhbGx5IHBhcnRpdGlvbmFibGUgZGV2aWNlKHMpIGZvdW5kXG4iLCBEZXZDb3Vu dCk7DQo+ID4gKyAgfSBlbHNlIHsNCj4gPiArICAgIFByaW50IChMIk5vIHBvdGVudGlhbGx5IHBh cnRpdGlvbmFibGUgZGV2aWNlKHMpIGZvdW5kXG4iKTsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsg IEdwdENsZWFudXBHbG9iYWxzICgpOw0KPiA+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gPiAr fQ0KPiA+ICsNCj4gPiArU0hFTExfU1RBVFVTDQo+ID4gK0VGSUFQSQ0KPiA+ICtTaGVsbENvbW1h bmRSdW5HcHQgKA0KPiA+ICsgIElOIEVGSV9IQU5ETEUgICAgICAgIEltYWdlSGFuZGxlLA0KPiA+ ICsgIElOIEVGSV9TWVNURU1fVEFCTEUgICpTeXN0ZW1UYWJsZQ0KPiA+ICsgICkNCj4gPiArew0K PiA+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ID4gKyAgTElTVF9F TlRSWSAgICAgICAgICAgICAgICAqQ2hlY2tQYWNrYWdlOw0KPiA+ICsgIEVGSV9QSFlTSUNBTF9B RERSRVNTICAgICAgQWRkcmVzcyA9IDAsIE9mZnNldCA9IDA7DQo+ID4gKyAgVUlOVDY0ICAgICAg ICAgICAgICAgICAgICBQYXJ0QXR0cmlidXRlcyA9IDA7DQo+ID4gKyAgRUZJX0dVSUQgICAgICAg ICAgICAgICAgICBQYXJ0VHlwZUd1aWQgPSB7IDAgfTsNCj4gPiArICBTSEVMTF9GSUxFX0hBTkRM RSAgICAgICAgIEZpbGVIYW5kbGUgPSBOVUxMOw0KPiA+ICsgIFVJTlQ2NCAgICAgICAgICAgICAg ICAgICAgQnl0ZUNvdW50LCBGaWxlU2l6ZTsNCj4gPiArICBVSU5UTiAgICAgICAgICAgICAgICAg ICAgIEk7DQo+ID4gKyAgVUlOVDggICAgICAgICAgICAgICAgICAgICAqQnVmZmVyID0gTlVMTCwg KkZpbGVCdWZmZXIgPSBOVUxMOw0KPiA+ICsNCj4gPiArICBDSEFSMTYgICAgICAgICAgICAgICAg ICAgICogUHJvYmxlbVBhcmFtLCpGaWxlUGF0aDsNCj4gPiArICBDT05TVCBDSEFSMTYgICAgICAg ICAgICAgICpBZGRyZXNzU3RyID0gTlVMTCwgKk9mZnNldFN0ciA9IE5VTEw7DQo+ID4gKyAgQ09O U1QgQ0hBUjE2ICAgICAgICAgICAgICAqUGFydE5hbWUgPSBOVUxMLCAqTmV3UGFydE5hbWUgPSBO VUxMLA0KPiA+ICpBdHRyU3RyID0gTlVMTCwNCj4gPiArICAgICpHdWlkU3RyID0gTlVMTCwgKlZv bHVtZU5hbWUgPSBOVUxMOw0KPiA+ICsgIENPTlNUIENIQVIxNiAgICAgICAgICAgICAgKkxlbmd0 aFN0ciA9IE5VTEwsICpGaWxlU3RyID0gTlVMTDsNCj4gPiArICBCT09MRUFOICAgICAgICAgICAg ICAgICAgIEFkZHJGbGFnID0gRkFMU0UsIExlbmd0aEZsYWcgPSBUUlVFLCBGaWxlRmxhZyA9IEZB TFNFLA0KPiA+IEd1aWRGbGFnID0gRkFMU0UsIE9mZnNldEZsYWcgPSBUUlVFOw0KPiA+ICsgIEJP T0xFQU4gICAgICAgICAgICAgICAgICAgUGFydE5hbWVGbGFnID0gVFJVRSwgTmV3UGFydE5hbWVG bGFnID0gRkFMU0UsDQo+ID4gQXR0ckZsYWcgPSBGQUxTRTsNCj4gPiArICBVSU5UTiAgICAgICAg ICAgICAgICAgICAgIEZsYWcgPSAwLCBDaGVja0ZsYWcgPSAwOw0KPiA+ICsgIENPTlNUIENIQVIx NiAgICAgICAgICAgICAgKkJsb2NrTmFtZTsNCj4gPiArICBFRklfREVWSUNFX1BBVEhfUFJPVE9D T0wgICpEZXZQYXRoOw0KPiA+ICsgIEVGSV9CTE9DS19JT19QUk9UT0NPTCAgICAgKkJsb2NrSW87 DQo+ID4gKyAgRUZJX0RJU0tfSU9fUFJPVE9DT0wgICAgICAqRGlza0lvOw0KPiA+ICsgIEVGSV9I QU5ETEUgICAgICAgICAgICAgICAgQmxvY2tJb0hhbmRsZTsNCj4gPiArICBNT0RfUEFSQU1TICAg ICAgICAgICAgICAgIE1vZFBhcmFtczsNCj4gPiArICBFRklfUEFSVElUSU9OX0VOVFJZICAgICAg ICpFbnRyeTsNCj4gPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgIE51bUtub3duUGFydFR5 cGVzRW50cmllczsNCj4gPiArICBCT09MRUFOICAgICAgICAgICAgICAgICAgIFRhYmxlTm90RW1w dHksIE5vUHJvbXB0ID0gRkFMU0UsIFF1aWV0ID0gVFJVRTsNCj4gPiArICBVSU5UNjQgICAgICAg ICAgICAgICAgICAgIFRpbWVTdGFtcEIsIFRpbWVTdGFtcEUsIFNwZWVkS0IsIEZyZXE7DQo+ID4g Kw0KPiA+ICsgIC8vIFBhcnNlIFNoZWxsIGNvbW1hbmQgbGluZQ0KPiA+ICsgIFN0YXR1cyA9IFNo ZWxsSW5pdGlhbGl6ZSAoKTsNCj4gPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4g KyAgICBQcmludEVyciAoTCJDYW5ub3QgaW5pdGlhbGl6ZSBTaGVsbCIsIFN0YXR1cyk7DQo+ID4g KyAgICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KPiA+ICsgICAgcmV0dXJuIFNIRUxMX0FC T1JURUQ7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBTdGF0dXMgPSBTaGVsbENvbW1hbmRMaW5l UGFyc2UgKFBhcmFtTGlzdCwgJkNoZWNrUGFja2FnZSwNCj4gPiAmUHJvYmxlbVBhcmFtLCBUUlVF KTsNCj4gPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gKyAgICBQcmludEVyciAo TCJFcnJvciB3aGlsZSBwYXJzaW5nIGNvbW1hbmQgbGluZSIsIFN0YXR1cyk7DQo+ID4gKyAgICBy ZXR1cm4gU0hFTExfQUJPUlRFRDsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIFRpbWVTdGFtcEIg PSAwOw0KPiA+ICsgIFRpbWVTdGFtcEUgPSAwOw0KPiA+ICsNCj4gPiArICBOb1Byb21wdCA9IFNo ZWxsQ29tbWFuZExpbmVHZXRGbGFnIChDaGVja1BhY2thZ2UsIEwiLXllcyIpOw0KPiA+ICsgIFF1 aWV0ID0gIVNoZWxsQ29tbWFuZExpbmVHZXRGbGFnIChDaGVja1BhY2thZ2UsIEwiLXZlcmJvc2Ui KTsNCj4gPiArDQo+ID4gKyAgRnJlcSA9IEdldFBlcmZvcm1hbmNlQ291bnRlclByb3BlcnRpZXMg KE5VTEwsIE5VTEwpOw0KPiA+ICsNCj4gPiArICAvLyBDaGVjayBmbGFncyBwcm92aWRlZCBieSB1 c2VyDQo+ID4gKyAgRmxhZyB8PSAoU2hlbGxDb21tYW5kTGluZUdldEZsYWcgKENoZWNrUGFja2Fn ZSwgTCJjbGVhciIpIDw8IDApOw0KPiA+ICsgIEZsYWcgfD0gKFNoZWxsQ29tbWFuZExpbmVHZXRG bGFnIChDaGVja1BhY2thZ2UsIEwiY3JlYXRlIikgPDwgMSk7DQo+ID4gKyAgRmxhZyB8PSAoU2hl bGxDb21tYW5kTGluZUdldEZsYWcgKENoZWNrUGFja2FnZSwgTCJsaXN0IikgPDwgMik7DQo+ID4g KyAgRmxhZyB8PSAoU2hlbGxDb21tYW5kTGluZUdldEZsYWcgKENoZWNrUGFja2FnZSwgTCJzeW5j IikgPDwgMyk7DQo+ID4gKyAgRmxhZyB8PSAoU2hlbGxDb21tYW5kTGluZUdldEZsYWcgKENoZWNr UGFja2FnZSwgTCJ0eXBlc2luZm8iKSA8PCA0KTsNCj4gPiArICBGbGFnIHw9IChTaGVsbENvbW1h bmRMaW5lR2V0RmxhZyAoQ2hlY2tQYWNrYWdlLCBMImRlbGV0ZSIpIDw8IDUpOw0KPiA+ICsgIEZs YWcgfD0gKFNoZWxsQ29tbWFuZExpbmVHZXRGbGFnIChDaGVja1BhY2thZ2UsIEwiaW5mbyIpIDw8 IDYpOw0KPiA+ICsgIEZsYWcgfD0gKFNoZWxsQ29tbWFuZExpbmVHZXRGbGFnIChDaGVja1BhY2th Z2UsIEwicmVhZCIpIDw8IDcpOw0KPiA+ICsgIEZsYWcgfD0gKFNoZWxsQ29tbWFuZExpbmVHZXRG bGFnIChDaGVja1BhY2thZ2UsIEwicmVhZGZpbGUiKSA8PCA4KTsNCj4gPiArICBGbGFnIHw9IChT aGVsbENvbW1hbmRMaW5lR2V0RmxhZyAoQ2hlY2tQYWNrYWdlLCBMInJlbmFtZSIpIDw8IDkpOw0K PiA+ICsgIEZsYWcgfD0gKFNoZWxsQ29tbWFuZExpbmVHZXRGbGFnIChDaGVja1BhY2thZ2UsIEwi c2V0YXR0ciIpIDw8IDEwKTsNCj4gPiArICBGbGFnIHw9IChTaGVsbENvbW1hbmRMaW5lR2V0Rmxh ZyAoQ2hlY2tQYWNrYWdlLCBMInNldHR5cGUiKSA8PCAxMSk7DQo+ID4gKyAgRmxhZyB8PSAoU2hl bGxDb21tYW5kTGluZUdldEZsYWcgKENoZWNrUGFja2FnZSwgTCJ3cml0ZSIpIDw8IDEyKTsNCj4g PiArICBGbGFnIHw9IChTaGVsbENvbW1hbmRMaW5lR2V0RmxhZyAoQ2hlY2tQYWNrYWdlLCBMIndy aXRlZmlsZSIpIDw8IDEzKTsNCj4gPiArICBGbGFnIHw9IChTaGVsbENvbW1hbmRMaW5lR2V0Rmxh ZyAoQ2hlY2tQYWNrYWdlLCBMImZhdGZvcm1hdCIpIDw8IDE0KTsNCj4gPiArDQo+ID4gKyAgUGFy dGl0aW9uR2V0S25vd25UeXBlICgoVUlOVE4pKC0xKSwgJk51bUtub3duUGFydFR5cGVzRW50cmll cyk7DQo+ID4gKw0KPiA+ICsgIGlmIChGbGFnICYgVFlQRVNfSU5GTykgew0KPiA+ICsgICAgVUlO VE4gSW5kZXg7DQo+ID4gKw0KPiA+ICsgICAgUHJpbnQgKEwiICBOb1x0JS0zNnNcdEdVSURcclxu IiwgTCJUeXBlIG5hbWUiKTsNCj4gPiArICAgIFByaW50IChMIiAtLS0tICAgLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0NCj4gLS0NCj4gPiBcbiIpOw0KPiA+ICsgICAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwg TnVtS25vd25QYXJ0VHlwZXNFbnRyaWVzOyBJbmRleCsrKSB7DQo+ID4gKyAgICAgIEVGSV9LTk9X Tl9QQVJUSVRJT05fVFlQRSAqUGFydFR5cGU7DQo+ID4gKw0KPiA+ICsgICAgICBQYXJ0VHlwZSA9 IFBhcnRpdGlvbkdldEtub3duVHlwZSAoSW5kZXgsIE5VTEwpOw0KPiA+ICsgICAgICBpZiAoUGFy dFR5cGUgPT0gTlVMTCkgew0KPiA+ICsgICAgICAgIGJyZWFrOw0KPiA+ICsgICAgICB9DQo+ID4g KyAgICAgIFByaW50IChMIiAlM2RcdCUtMzZzXHQlZ1xuIiwgSW5kZXgsIFBhcnRUeXBlLT5UeXBl TmFtZSwNCj4gJlBhcnRUeXBlLQ0KPiA+ID5UeXBlR3VpZCk7DQo+ID4gKyAgICB9DQo+ID4gKyAg ICBpZiAoRmxhZyA9PSBUWVBFU19JTkZPKSB7DQo+ID4gKyAgICAgIHJldHVybiBTSEVMTF9TVUND RVNTOw0KPiA+ICsgICAgfQ0KPiA+ICsgIH0NCj4gPiArICAvLyBTdGFydCBwYXJzaW5nIHRoZSBj b21tYW5kLg0KPiA+ICsgIC8vIEdlbmVyYWxseSBjb21tYW5kIGlzOg0KPiA+ICsgIC8vIGJsb2Nr X25hbWU6Ym9vdHBhcnRfbm8gYWRkciBvciBmaWxlbmFtZSBvZmZzZXQNCj4gPiArDQo+ID4gKyAg QmxvY2tOYW1lID0gU2hlbGxDb21tYW5kTGluZUdldFJhd1ZhbHVlIChDaGVja1BhY2thZ2UsIDEp Ow0KPiA+ICsgIGlmIChCbG9ja05hbWUgPT0gTlVMTCkgew0KPiA+ICsgICAgaWYgKEZsYWcgJiBM SVNUKSB7DQo+ID4gKyAgICAgIFN0YXR1cyA9IEZpbmRBbmRQcmludFBhcnRpdGlvbmFibGVEZXZp Y2VzICgpOw0KPiA+ICsgICAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gKyAgICAg ICAgUHJpbnRFcnIgKEwiRXJyb3IgZ2V0dGluZyBsaXN0IG9mIHBhcnRpdGlvbmFibGUgZGV2aWNl cyIsIFN0YXR1cyk7DQo+ID4gKyAgICAgICAgU3RhdHVzID0gU0hFTExfQUJPUlRFRDsNCj4gPiAr ICAgICAgfQ0KPiA+ICsgICAgICByZXR1cm4gU3RhdHVzOw0KPiA+ICsgICAgfQ0KPiA+ICsgICAg UHJpbnRFcnIgKEwiTWlzc2luZyBibG9jayBkZXZpY2UgbmFtZSIsIEVGSV9JTlZBTElEX1BBUkFN RVRFUik7DQo+ID4gKyAgICByZXR1cm4gU0hFTExfSU5WQUxJRF9QQVJBTUVURVI7DQo+ID4gKyAg fQ0KPiA+ICsNCj4gPiArICAvLyBGaW5kIGRldmljZSBoYW5kbGUgYnkgbWFwcGVkIG5hbWUNCj4g PiArICBpZiAoZ0VmaVNoZWxsUHJvdG9jb2wtPkdldERldmljZVBhdGhGcm9tTWFwIChCbG9ja05h bWUpID09IE5VTEwpIHsNCj4gPiArICAgIFNoZWxsUHJpbnRIaWlFeCAoLTEsIC0xLCBOVUxMLCBT VFJJTkdfVE9LRU4gKFNUUl9HRU5fUEFSQU1fSU5WKSwNCj4gPiBnU2hlbGxHcHRIaWlIYW5kbGUs IGdBcHBOYW1lLCBCbG9ja05hbWUpOw0KPiA+ICsgICAgU3RhdHVzID0gU0hFTExfSU5WQUxJRF9Q QVJBTUVURVI7DQo+ID4gKyAgfSBlbHNlIHsNCj4gPiArICAgIERldlBhdGggPSAoRUZJX0RFVklD RV9QQVRIX1BST1RPQ09MICopZ0VmaVNoZWxsUHJvdG9jb2wtDQo+ID4gPkdldERldmljZVBhdGhG cm9tTWFwIChCbG9ja05hbWUpOw0KPiA+ICsgICAgaWYgKGdCUy0+TG9jYXRlRGV2aWNlUGF0aCAo JmdFZmlCbG9ja0lvUHJvdG9jb2xHdWlkLCAmRGV2UGF0aCwgTlVMTCkNCj4gPiA9PSBFRklfTk9U X0ZPVU5EKSB7DQo+ID4gKyAgICAgIFNoZWxsUHJpbnRIaWlFeCAoLTEsIC0xLCBOVUxMLCBTVFJJ TkdfVE9LRU4NCj4gPiAoU1RSX0dFTl9NQVBfUFJPVE9DT0wpLCBnU2hlbGxHcHRIaWlIYW5kbGUs IGdBcHBOYW1lLCBCbG9ja05hbWUsDQo+ID4gTCJCbG9ja0lvIik7DQo+ID4gKyAgICAgIFN0YXR1 cyA9IFNIRUxMX0lOVkFMSURfUEFSQU1FVEVSOw0KPiA+ICsgICAgfQ0KPiA+ICsgIH0NCj4gPiAr DQo+ID4gKyAgaWYgKFN0YXR1cykgew0KPiA+ICsgICAgcmV0dXJuIFNIRUxMX0lOVkFMSURfUEFS QU1FVEVSOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgQmxvY2tJb0hhbmRsZSA9IDA7DQo+ID4g Kw0KPiA+ICsgIFN0YXR1cyA9IGdCUy0+TG9jYXRlRGV2aWNlUGF0aCAoJmdFZmlCbG9ja0lvUHJv dG9jb2xHdWlkLA0KPiA+IChFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wgKiopJkRldlBhdGgsICZC bG9ja0lvSGFuZGxlKTsNCj4gPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gKyAg ICBnb3RvIENsZWFuVXA7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBTdGF0dXMgPSBnQlMtPk9w ZW5Qcm90b2NvbCAoQmxvY2tJb0hhbmRsZSwgJmdFZmlCbG9ja0lvUHJvdG9jb2xHdWlkLA0KPiA+ IChWT0lEICoqKSZCbG9ja0lvLCBnSW1hZ2VIYW5kbGUsIE5VTEwsDQo+ID4gRUZJX09QRU5fUFJP VE9DT0xfR0VUX1BST1RPQ09MKTsNCj4gPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ ID4gKyAgICBTaGVsbFByaW50SGlpRXggKC0xLCAtMSwgTlVMTCwgU1RSSU5HX1RPS0VODQo+ID4g KFNUUl9HRU5fTUFQX1BST1RPQ09MKSwgZ1NoZWxsR3B0SGlpSGFuZGxlLCBnQXBwTmFtZSwgQmxv Y2tOYW1lLA0KPiA+IEwiQmxvY2tJbyIpOw0KPiA+ICsgICAgZ290byBDbGVhblVwOw0KPiA+ICsg IH0NCj4gPiArDQo+ID4gKyAgU3RhdHVzID0gZ0JTLT5IYW5kbGVQcm90b2NvbCAoDQo+ID4gKyAg ICBCbG9ja0lvSGFuZGxlLA0KPiA+ICsgICAgJmdFZmlEaXNrSW9Qcm90b2NvbEd1aWQsDQo+ID4g KyAgICAoVk9JRCAqKikmRGlza0lvDQo+ID4gKyAgICApOw0KPiA+ICsgIGlmIChFRklfRVJST1Ig KFN0YXR1cykpIHsNCj4gPiArICAgIFNoZWxsUHJpbnRIaWlFeCAoLTEsIC0xLCBOVUxMLCBTVFJJ TkdfVE9LRU4NCj4gPiAoU1RSX0dFTl9NQVBfUFJPVE9DT0wpLCBnU2hlbGxHcHRIaWlIYW5kbGUs IGdBcHBOYW1lLCBCbG9ja05hbWUsDQo+ID4gTCJEaXNrSW8iKTsNCj4gPiArICAgIGdvdG8gQ2xl YW5VcDsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIENoZWNrRmxhZyA9IEZsYWc7DQo+ID4gKyAg Zm9yIChJID0gMDsgQ2hlY2tGbGFnOyBDaGVja0ZsYWcgPj49IDEpIHsNCj4gPiArICAgIEkgKz0g Q2hlY2tGbGFnICYgMTsNCj4gPiArICAgIGlmIChJID4gMSkgew0KPiA+ICsgICAgICBQcmludEVy ciAoTCJUb28gbWFueSBmbGFncyIsIEVGSV9JTlZBTElEX1BBUkFNRVRFUik7DQo+ID4gKyAgICAg IFN0YXR1cyA9IFNIRUxMX0lOVkFMSURfUEFSQU1FVEVSOw0KPiA+ICsgICAgICBnb3RvIENsZWFu VXA7DQo+ID4gKyAgICB9DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBpZiAoRmxhZyAmIFNZTkMp IHsNCj4gPiArICAgIC8vIExldCB0aGUgUGFydGl0aW9uIHRhYmxlIGRyaXZlciBrbm93IHRoYXQN Cj4gPiArICAgIC8vIHdlIHdhbnQgdG8gcmVyZWFkIHRoZSB0YWJsZXMNCj4gPiArICAgIFN0YXR1 cyA9IGdCUy0+UmVpbnN0YWxsUHJvdG9jb2xJbnRlcmZhY2UgKA0KPiA+ICsgICAgICBCbG9ja0lv SGFuZGxlLA0KPiA+ICsgICAgICAmZ0VmaUJsb2NrSW9Qcm90b2NvbEd1aWQsDQo+ID4gKyAgICAg IEJsb2NrSW8sDQo+ID4gKyAgICAgIEJsb2NrSW8NCj4gPiArICAgICAgKTsNCj4gPiArICAgIFN0 YXR1cyA9IFNIRUxMX1NVQ0NFU1M7DQo+ID4gKyAgICBnb3RvIENsZWFuVXA7DQo+ID4gKyAgfQ0K PiA+ICsNCj4gPiArICBpZiAoIUlzUGFydGl0aW9uYWJsZURldmljZVBhdGggKERldmljZVBhdGhG cm9tSGFuZGxlIChCbG9ja0lvSGFuZGxlKSkpDQo+IHsNCj4gPiArICAgIFNoZWxsUHJpbnRIaWlF eCAoLTEsIC0xLCBOVUxMLCBTVFJJTkdfVE9LRU4gKFNUUl9HRU5fUEFSQU1fSU5WKSwNCj4gPiBn U2hlbGxHcHRIaWlIYW5kbGUsIGdBcHBOYW1lLCBCbG9ja05hbWUpOw0KPiA+ICsgICAgUHJpbnQg KEwiJXMgaXMgbm90IGEgcmF3IGJsb2NrIGRldmljZVxuIiwgQmxvY2tOYW1lKTsNCj4gPiArICAg IFN0YXR1cyA9IFNIRUxMX0lOVkFMSURfUEFSQU1FVEVSOw0KPiA+ICsgICAgZ290byBDbGVhblVw Ow0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgaWYgKCFCbG9ja0lvLT5NZWRpYS0+TWVkaWFQcmVz ZW50KSB7DQo+ID4gKyAgICBQcmludEVyciAoTCJNZWRpYSBpcyBub3QgcHJlc2VudCFcbiIsIEVG SV9OT19NRURJQSk7DQo+ID4gKyAgICBTdGF0dXMgPSBFRklfTk9fTUVESUE7DQo+ID4gKyAgICBn b3RvIENsZWFuVXA7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICAvLyBQcmVsb2FkIEdQVCB0YWJs ZXMgd2l0aCB2YWxpZGF0aW9uDQo+ID4gKyAgU3RhdHVzID0gUGFydGl0aW9uR2V0R3B0VGFibGVz IChEaXNrSW8sIEJsb2NrSW8pOw0KPiA+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4g PiArICAgIEJPT0xFQU4gQ2FuQ29udGludWU7DQo+ID4gKw0KPiA+ICsgICAgQ2FuQ29udGludWUg PSAoRmxhZyAmIENSRUFURSkgfHwgKEZsYWcgJiBDTEVBUikgfHwgKEZsYWcgJg0KPiA+IEZBVF9G T1JNQVQpOw0KPiA+ICsgICAgaWYgKFN0YXR1cyAhPSBFRklfTk9UX0ZPVU5EKSB7DQo+ID4gKyAg ICAgIFByaW50RXJyIChMIlVuZXhwZWN0ZWQgZXJyb3IgZ2V0dGluZyBHUFQgdGFibGVzIiwgU3Rh dHVzKTsNCj4gPiArICAgICAgZ290byBDbGVhblVwOw0KPiA+ICsgICAgfSBlbHNlIHsNCj4gPiAr ICAgICAgaWYgKCFDYW5Db250aW51ZSkgew0KPiA+ICsgICAgICAgIFByaW50RXJyIChMIk5vIEdQ VCB0YWJsZSBmb3VuZC4gQ3JlYXRlIGZpcnN0IiwgU3RhdHVzKTsNCj4gPiArICAgICAgICBnb3Rv IENsZWFuVXA7DQo+ID4gKyAgICAgIH0NCj4gPiArICAgIH0NCj4gPiArICB9DQo+ID4gKw0KPiA+ ICsgIC8vIERvIHdlIGhhdmUgYW55IHBhcnRpdGlvbnMgYWxyZWFkeT8NCj4gPiArICBUYWJsZU5v dEVtcHR5ID0gKFBhcnRpdGlvbkZpbmRQYXJ0aXRpb25CeUNyaXRlcmlhIChOVUxMLCAwLCAwLA0K PiBTUkNfQU5ZKSAhPQ0KPiA+IE5VTEwpOw0KPiA+ICsNCj4gPiArICBTdGF0dXMgPSBTSEVMTF9J TlZBTElEX1BBUkFNRVRFUjsNCj4gPiArDQo+ID4gKyAgaWYgKChGbGFnIDwgTElTVCkgfHwNCj4g PiArICAgICAgKEZsYWcgJiBERUxFVEUpIHx8DQo+ID4gKyAgICAgIChGbGFnID4gUkVBRF9GSUxF KQ0KPiA+ICsgICAgICkgew0KPiA+ICsgICAgaWYgKEJsb2NrSW8tPk1lZGlhLT5SZWFkT25seSkg ew0KPiA+ICsgICAgICBTdGF0dXMgPSBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ID4gKyAgICAg IFByaW50RXJyIChMIkNhbm5vdCB3cml0ZSB0byBhIHJlYWQtb25seSBkZXZpY2UiLCBTdGF0dXMp Ow0KPiA+ICsgICAgICBnb3RvIENsZWFuVXA7DQo+ID4gKyAgICB9DQo+ID4gKyAgfQ0KPiA+ICsN Cj4gPiArICBpZiAoQmxvY2tJby0+TWVkaWEtPlJlbW92YWJsZU1lZGlhKSB7DQo+ID4gKyAgICBQ cmludCAoTCIlcyBpcyBhIHJlbW92YWJsZSBkZXZpY2UuIEp1c3QgYSBub3RlXG4iLCBCbG9ja05h bWUpOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgc3dpdGNoIChGbGFnKSB7DQo+ID4gKyAgICBj YXNlIElORk86DQo+ID4gKyAgICAgIFBhcnROYW1lID0gU2hlbGxDb21tYW5kTGluZUdldFJhd1Zh bHVlIChDaGVja1BhY2thZ2UsIDIpOw0KPiA+ICsgICAgICBPZmZzZXRGbGFnID0gRkFMU0U7DQo+ ID4gKyAgICAgIExlbmd0aEZsYWcgPSBGQUxTRTsNCj4gPiArICAgICAgYnJlYWs7DQo+ID4gKyAg ICBjYXNlIExJU1Q6DQo+ID4gKyAgICB7DQo+ID4gKyAgICAgIFVJTlROIE51bUVudHJpZXM7DQo+ ID4gKw0KPiA+ICsgICAgICBOdW1FbnRyaWVzID0gUGFydGl0aW9uTGlzdEdwdEVudHJpZXMgKCk7 DQo+ID4gKyAgICAgIGlmIChOdW1FbnRyaWVzID09IDApIHsNCj4gPiArICAgICAgICBQcmludCAo TCJncHQ6IEdQVCBpcyB2YWxpZCBvbiAlcywgYnV0IG5vIHBhcnRpdGlvbihzKSBkZWZpbmVkIHll dC4gVXNlDQo+ID4gY3JlYXRlXG4iLCBCbG9ja05hbWUpOw0KPiA+ICsgICAgICB9DQo+ID4gKyAg ICAgIFN0YXR1cyA9IFNIRUxMX1NVQ0NFU1M7DQo+ID4gKyAgICAgIGdvdG8gQ2xlYW5VcDsNCj4g PiArICAgICAgYnJlYWs7DQo+ID4gKyAgICB9DQo+ID4gKyAgICBjYXNlIENMRUFSOg0KPiA+ICsg ICAgICBpZiAoVGFibGVOb3RFbXB0eSkgew0KPiA+ICsgICAgICAgIC8vIFRlbGwgdGhlIHVzZXIg d2hhdCBoZS9zaGUgaXMgZG9pbmcuLi4NCj4gPiArICAgICAgICBTaGVsbFByaW50SGlpRXggKC0x LCAtMSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIFNUUklOR19UT0tFTiAo U1RSX0dQVF9OT1RfRU1QVFkpLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgZ1NoZWxs R3B0SGlpSGFuZGxlLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgQmxvY2tOYW1lDQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+ID4gKyAgICAgIH0NCj4gPiArDQo+ID4g KyAgICAgIC8vIEV2ZW4gaWYgR1BUIHRhYmxlcyBkbyBub3QgZXhpc3QsIHRoZXJlIG1pZ2h0IGJl IHNvbWV0aGluZy4NCj4gPiArICAgICAgLy8gV2FybiB0aGUgdXNlciBhbmQgZG91YmxlIHN1cmUg aXQgaXMgdGhlIGludGVudGlvbiwNCj4gPiArICAgICAgLy8gdG8gcHJldmVudCBhIHVzZXIgZnJv bSBicmlja2luZyBhIGRldmljZSAoSlRBRyB3b3VsZCBiZSBuZWVkZWQgdG8NCj4gPiByZWNvdmVy KQ0KPiA+ICsgICAgICAvLyBieSBvdmVyd3JpdGluZyBhbiBBVEYgYm9vdCBkZXZpY2UuIEhvd2V2 ZXIgd2l0aCBOb1Byb21wdCBvbiwgdGhlDQo+ID4gdXNlciBpcw0KPiA+ICsgICAgICAvLyByZXNw b25zaWJsZSBmb3Igb3BlcmF0aW9uIGJlY2F1c2UgdGhlcmUgaXMgbm8gY29uZmlybWF0aW9uDQo+ IChhc3N1bWluZw0KPiA+IHllcyBvbiBhbGwgcXVlcmllcykuDQo+ID4gKyAgICAgIGlmICgoTm9Q cm9tcHQpIHx8ICghR3B0UHJvbXB0WWVzTm8gKFNUUklOR19UT0tFTg0KPiA+IChTVFJfR1BUX0NM RUFSX1NVUkUpKSAmJg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgKCFHcHRQcm9tcHRZ ZXNObyAoU1RSSU5HX1RPS0VODQo+ID4gKFNUUl9HUFRfQUJTT0xVVEVMWV9TVVJFKSkpKQ0KPiA+ ICsgICAgICAgICApIHsNCj4gPiArICAgICAgICBQYXJ0aXRpb25HcHRDbGVhckFsbCAoKTsNCj4g PiArICAgICAgfQ0KPiA+ICsgICAgICBTdGF0dXMgPSBTSEVMTF9TVUNDRVNTOw0KPiA+ICsgICAg ICBnb3RvIENsZWFuVXA7DQo+ID4gKyAgICAgIGJyZWFrOw0KPiA+ICsgICAgY2FzZSBDUkVBVEU6 DQo+ID4gKyAgICAgIFBhcnROYW1lICAgID0gU2hlbGxDb21tYW5kTGluZUdldFJhd1ZhbHVlIChD aGVja1BhY2thZ2UsIDIpOw0KPiA+ICsgICAgICBPZmZzZXRTdHIgPSBTaGVsbENvbW1hbmRMaW5l R2V0UmF3VmFsdWUgKENoZWNrUGFja2FnZSwgMyk7DQo+ID4gKyAgICAgIExlbmd0aFN0ciAgID0g U2hlbGxDb21tYW5kTGluZUdldFJhd1ZhbHVlIChDaGVja1BhY2thZ2UsIDQpOw0KPiA+ICsgICAg ICBBdHRyU3RyICAgICA9IFNoZWxsQ29tbWFuZExpbmVHZXRSYXdWYWx1ZSAoQ2hlY2tQYWNrYWdl LCA1KTsNCj4gPiArICAgICAgR3VpZFN0ciAgICAgPSBTaGVsbENvbW1hbmRMaW5lR2V0VmFsdWUg ICAgKENoZWNrUGFja2FnZSwgTCItdHlwZSIpOw0KPiA+ICsgICAgICBHdWlkRmxhZyA9IFRSVUU7 DQo+ID4gKyAgICAgIGJyZWFrOw0KPiA+ICsgICAgY2FzZSBERUxFVEU6DQo+ID4gKyAgICAgIFBh cnROYW1lICAgID0gU2hlbGxDb21tYW5kTGluZUdldFJhd1ZhbHVlIChDaGVja1BhY2thZ2UsIDIp Ow0KPiA+ICsgICAgICBMZW5ndGhGbGFnICA9IEZBTFNFOw0KPiA+ICsgICAgICBPZmZzZXRGbGFn ID0gRkFMU0U7DQo+ID4gKyAgICAgIGJyZWFrOw0KPiA+ICsgICAgY2FzZSBSRU5BTUU6DQo+ID4g KyAgICAgIFBhcnROYW1lICAgID0gU2hlbGxDb21tYW5kTGluZUdldFJhd1ZhbHVlIChDaGVja1Bh Y2thZ2UsIDIpOw0KPiA+ICsgICAgICBOZXdQYXJ0TmFtZSA9IFNoZWxsQ29tbWFuZExpbmVHZXRS YXdWYWx1ZSAoQ2hlY2tQYWNrYWdlLCAzKTsNCj4gPiArICAgICAgTmV3UGFydE5hbWVGbGFnID0g VFJVRTsNCj4gPiArICAgICAgTGVuZ3RoRmxhZyA9IEZBTFNFOw0KPiA+ICsgICAgICBPZmZzZXRG bGFnID0gRkFMU0U7DQo+ID4gKyAgICAgIGJyZWFrOw0KPiA+ICsgICAgY2FzZSBTRVRBVFRSOg0K PiA+ICsgICAgICBQYXJ0TmFtZSAgICA9IFNoZWxsQ29tbWFuZExpbmVHZXRSYXdWYWx1ZSAoQ2hl Y2tQYWNrYWdlLCAyKTsNCj4gPiArICAgICAgQXR0clN0ciAgICAgPSBTaGVsbENvbW1hbmRMaW5l R2V0UmF3VmFsdWUgKENoZWNrUGFja2FnZSwgMyk7DQo+ID4gKyAgICAgIEF0dHJGbGFnICAgID0g VFJVRTsNCj4gPiArICAgICAgTGVuZ3RoRmxhZyAgPSBGQUxTRTsNCj4gPiArICAgICAgT2Zmc2V0 RmxhZyAgPSBGQUxTRTsNCj4gPiArICAgICAgYnJlYWs7DQo+ID4gKyAgICBjYXNlIFNFVFRZUEU6 DQo+ID4gKyAgICAgIFBhcnROYW1lICAgID0gU2hlbGxDb21tYW5kTGluZUdldFJhd1ZhbHVlIChD aGVja1BhY2thZ2UsIDIpOw0KPiA+ICsgICAgICBHdWlkU3RyICAgICA9IFNoZWxsQ29tbWFuZExp bmVHZXRWYWx1ZSAgICAoQ2hlY2tQYWNrYWdlLCBMIi10eXBlIik7DQo+ID4gKyAgICAgIEd1aWRG bGFnID0gVFJVRTsNCj4gPiArICAgICAgTGVuZ3RoRmxhZyA9IEZBTFNFOw0KPiA+ICsgICAgICBP ZmZzZXRGbGFnID0gRkFMU0U7DQo+ID4gKyAgICAgIGJyZWFrOw0KPiA+ICsgICAgY2FzZSBGQVRf Rk9STUFUOg0KPiA+ICsgICAgICBQYXJ0TmFtZSAgICAgPSBTaGVsbENvbW1hbmRMaW5lR2V0UmF3 VmFsdWUgKENoZWNrUGFja2FnZSwgMik7DQo+ID4gKyAgICAgIFZvbHVtZU5hbWUgICA9IFNoZWxs Q29tbWFuZExpbmVHZXRSYXdWYWx1ZSAoQ2hlY2tQYWNrYWdlLCAzKTsNCj4gPiArICAgICAgTGVu Z3RoRmxhZyAgID0gRkFMU0U7DQo+ID4gKyAgICAgIE9mZnNldEZsYWcgICA9IEZBTFNFOw0KPiA+ ICsgICAgICBQYXJ0TmFtZUZsYWcgPSAoUGFydE5hbWUgIT0gTlVMTCk7DQo+ID4gKyAgICAgIGlm ICghUGFydE5hbWVGbGFnICYmIFRhYmxlTm90RW1wdHkpIHsNCj4gPiArICAgICAgICAvLyBUZWxs IHRoZSB1c2VyIHdoYXQgaGUvc2hlIGlzIGRvaW5nLi4uDQo+ID4gKyAgICAgICAgU2hlbGxQcmlu dEhpaUV4ICgtMSwgLTEsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBTVFJJ TkdfVE9LRU4gKFNUUl9HUFRfTk9UX0VNUFRZKSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgIGdTaGVsbEdwdEhpaUhhbmRsZSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgIEJs b2NrTmFtZQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICApOw0KPiA+ICsgICAgICB9DQo+ ID4gKyAgICAgIGJyZWFrOw0KPiA+ICsgICAgICAvLyBGYWxsIHRocm91Z2gNCj4gPiArICAgIGNh c2UgUkVBRDoNCj4gPiArICAgIGNhc2UgV1JJVEU6DQo+ID4gKyAgICAgIEFkZHJlc3NTdHIgPSBT aGVsbENvbW1hbmRMaW5lR2V0UmF3VmFsdWUgKENoZWNrUGFja2FnZSwgMik7DQo+ID4gKyAgICAg IFBhcnROYW1lICA9IFNoZWxsQ29tbWFuZExpbmVHZXRSYXdWYWx1ZSAoQ2hlY2tQYWNrYWdlLCAz KTsNCj4gPiArICAgICAgT2Zmc2V0U3RyID0gU2hlbGxDb21tYW5kTGluZUdldFJhd1ZhbHVlIChD aGVja1BhY2thZ2UsIDQpOw0KPiA+ICsgICAgICBMZW5ndGhTdHIgPSBTaGVsbENvbW1hbmRMaW5l R2V0UmF3VmFsdWUgKENoZWNrUGFja2FnZSwgNSk7DQo+ID4gKyAgICAgIEFkZHJGbGFnID0gVFJV RTsNCj4gPiArICAgICAgYnJlYWs7DQo+ID4gKyAgICBjYXNlIFJFQURfRklMRToNCj4gPiArICAg ICAgRmlsZVN0ciA9IFNoZWxsQ29tbWFuZExpbmVHZXRSYXdWYWx1ZSAoQ2hlY2tQYWNrYWdlLCAy KTsNCj4gPiArICAgICAgUGFydE5hbWUgID0gU2hlbGxDb21tYW5kTGluZUdldFJhd1ZhbHVlIChD aGVja1BhY2thZ2UsIDMpOw0KPiA+ICsgICAgICBPZmZzZXRTdHIgPSBTaGVsbENvbW1hbmRMaW5l R2V0UmF3VmFsdWUgKENoZWNrUGFja2FnZSwgNCk7DQo+ID4gKyAgICAgIExlbmd0aFN0ciA9IFNo ZWxsQ29tbWFuZExpbmVHZXRSYXdWYWx1ZSAoQ2hlY2tQYWNrYWdlLCA1KTsNCj4gPiArICAgICAg RmlsZUZsYWcgPSBUUlVFOw0KPiA+ICsgICAgICBicmVhazsNCj4gPiArICAgIGNhc2UgV1JJVEVf RklMRToNCj4gPiArICAgICAgRmlsZVN0ciA9IFNoZWxsQ29tbWFuZExpbmVHZXRSYXdWYWx1ZSAo Q2hlY2tQYWNrYWdlLCAyKTsNCj4gPiArICAgICAgUGFydE5hbWUgID0gU2hlbGxDb21tYW5kTGlu ZUdldFJhd1ZhbHVlIChDaGVja1BhY2thZ2UsIDMpOw0KPiA+ICsgICAgICBPZmZzZXRTdHIgPSBT aGVsbENvbW1hbmRMaW5lR2V0UmF3VmFsdWUgKENoZWNrUGFja2FnZSwgNCk7DQo+ID4gKyAgICAg IExlbmd0aEZsYWcgPSBGQUxTRTsNCj4gPiArICAgICAgRmlsZUZsYWcgPSBUUlVFOw0KPiA+ICsg ICAgICBicmVhazsNCj4gPiArICAgIGRlZmF1bHQ6DQo+ID4gKyAgICAgIFByaW50IChMIiVzOiBV bnN1cHBvcnRlZCBjb21tYW5kLiBUcnkgXCJoZWxwICVzXCIiLCBnQXBwTmFtZSk7DQo+ID4gKyAg ICAgIFN0YXR1cyA9IFNIRUxMX0lOVkFMSURfUEFSQU1FVEVSOw0KPiA+ICsgICAgICBnb3RvIENs ZWFuVXA7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICAvLyBSZWFkIGFkZHJlc3MgcGFyYW1ldGVy DQo+ID4gKyAgaWYgKChBZGRyZXNzU3RyID09IE5VTEwpICYgQWRkckZsYWcpIHsNCj4gPiArICAg IFByaW50RXJyIChMIk5vIGFkZHJlc3MgcGFyYW1ldGVyIiwgRUZJX0lOVkFMSURfUEFSQU1FVEVS KTsNCj4gPiArICAgIGdvdG8gQ2xlYW5VcDsNCj4gPiArICB9IGVsc2UgaWYgKEFkZHJGbGFnKSB7 DQo+ID4gKyAgICBBZGRyZXNzID0gU2hlbGxIZXhTdHJUb1VpbnRuIChBZGRyZXNzU3RyKTsNCj4g PiArICAgIGlmIChBZGRyZXNzID09IChVSU5UTikoLTEpKSB7DQo+ID4gKyAgICAgIFByaW50RXJy IChMIldyb25nIGFkZHJlc3MgcGFyYW1ldGVyIiwgRUZJX0lOVkFMSURfUEFSQU1FVEVSKTsNCj4g PiArICAgICAgZ290byBDbGVhblVwOw0KPiA+ICsgICAgfQ0KPiA+ICsgIH0NCj4gPiArDQo+ID4g KyAgaWYgKChQYXJ0TmFtZSA9PSBOVUxMKSAmIFBhcnROYW1lRmxhZykgew0KPiA+ICsgICAgUHJp bnRFcnIgKEwiTWlzc2luZyBwYXJ0aXRpb24gbmFtZSIsIEVGSV9JTlZBTElEX1BBUkFNRVRFUik7 DQo+ID4gKyAgICBnb3RvIENsZWFuVXA7DQo+ID4gKyAgfSBlbHNlIGlmIChQYXJ0TmFtZUZsYWcp IHsNCj4gPiArICAgIGlmIChTdHJTaXplIChQYXJ0TmFtZSkgPiBNQVhfUEFSVElUSU9OX05BTUVf TEVOR1RIKSB7DQo+ID4gKyAgICAgIFByaW50RXJyIChMIlBhcnRpdGlvbiBuYW1lIGlzIHRvbyBs b25nIChtYXggMzYgY2hhcnMpIiwNCj4gPiBFRklfSU5WQUxJRF9QQVJBTUVURVIpOw0KPiA+ICsg ICAgICBnb3RvIENsZWFuVXA7DQo+ID4gKyAgICB9DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICAv LyBSZWFkIG9mZnNldCBwYXJhbWV0ZXINCj4gPiArICBpZiAoKE9mZnNldFN0ciA9PSBOVUxMKSAm IE9mZnNldEZsYWcpIHsNCj4gPiArICAgIFByaW50RXJyIChMIk5vIG9mZnNldCBQYXJhbWV0ZXIi LCBFRklfSU5WQUxJRF9QQVJBTUVURVIpOw0KPiA+ICsgICAgZ290byBDbGVhblVwOw0KPiA+ICsg IH0gZWxzZSBpZiAoT2Zmc2V0RmxhZykgew0KPiA+ICsgICAgT2Zmc2V0ID0gU2hlbGxIZXhTdHJU b1VpbnRuIChPZmZzZXRTdHIpOw0KPiA+ICsgICAgaWYgKE9mZnNldCA8IDApIHsNCj4gPiArICAg ICAgUHJpbnQgKEwiJXM6IFdyb25nIG9mZnNldCBwYXJhbWV0ZXI6ICVzXG4iLCBnQXBwTmFtZSwg T2Zmc2V0U3RyKTsNCj4gPiArICAgICAgZ290byBDbGVhblVwOw0KPiA+ICsgICAgfQ0KPiA+ICsg IH0NCj4gPiArDQo+ID4gKyAgLy8gUmVhZCBsZW5ndGggcGFyYW1ldGVyDQo+ID4gKyAgaWYgKChM ZW5ndGhTdHIgPT0gTlVMTCkgJiBMZW5ndGhGbGFnKSB7DQo+ID4gKyAgICBQcmludEVyciAoTCJO byBsZW5ndGggcGFyYW1ldGVyIiwgRUZJX0lOVkFMSURfUEFSQU1FVEVSKTsNCj4gPiArICAgIGdv dG8gQ2xlYW5VcDsNCj4gPiArICB9IGVsc2UgaWYgKExlbmd0aEZsYWcpIHsNCj4gPiArICAgIEJ5 dGVDb3VudCA9IChVSU5UNjQpU2hlbGxTdHJUb1VpbnRuIChMZW5ndGhTdHIpOw0KPiA+ICsgICAg aWYgKEJ5dGVDb3VudCA8IDApIHsNCj4gPiArICAgICAgUHJpbnQgKEwiJXM6IFdyb25nIGxlbmd0 aCBwYXJhbWV0ZXIgJXMhXG4iLCBnQXBwTmFtZSwgTGVuZ3RoU3RyKTsNCj4gPiArICAgICAgZ290 byBDbGVhblVwOw0KPiA+ICsgICAgfQ0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgaWYgKChOZXdQ YXJ0TmFtZSA9PSBOVUxMKSAmIE5ld1BhcnROYW1lRmxhZykgew0KPiA+ICsgICAgUHJpbnRFcnIg KEwiTWlzc2luZyBuYW1lIHRvIGJlIGFzc2lnbmVkIHRvIHBhcnRpdGlvbiIsDQo+ID4gRUZJX0lO VkFMSURfUEFSQU1FVEVSKTsNCj4gPiArICAgIGdvdG8gQ2xlYW5VcDsNCj4gPiArICB9IGVsc2Ug aWYgKE5ld1BhcnROYW1lRmxhZykgew0KPiA+ICsgICAgaWYgKFN0clNpemUgKE5ld1BhcnROYW1l KSA+IE1BWF9QQVJUSVRJT05fTkFNRV9MRU5HVEgpIHsNCj4gPiArICAgICAgUHJpbnRFcnIgKEwi UGFydGl0aW9uIG5hbWUgaXMgdG9vIGxvbmcgKG1heCAzNiBjaGFycykiLA0KPiA+IEVGSV9JTlZB TElEX1BBUkFNRVRFUik7DQo+ID4gKyAgICAgIGdvdG8gQ2xlYW5VcDsNCj4gPiArICAgIH0NCj4g PiArICB9DQo+ID4gKw0KPiA+ICsgIGlmICgoQXR0clN0ciA9PSBOVUxMKSAmIEF0dHJGbGFnKSB7 DQo+ID4gKyAgICBQcmludEVyciAoTCJNaXNzaW5nIGF0dHJpYnV0ZXMgcGFyYW1ldGVyIiwgRUZJ X0lOVkFMSURfUEFSQU1FVEVSKTsNCj4gPiArICAgIGdvdG8gQ2xlYW5VcDsNCj4gPiArICB9IGVs c2UgaWYgKEF0dHJTdHIpIHsNCj4gPiArICAgIFBhcnRBdHRyaWJ1dGVzID0gKFVJTlQ2NClTaGVs bFN0clRvVWludG4gKEF0dHJTdHIpOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgaWYgKChHdWlk U3RyID09IE5VTEwpICYgR3VpZEZsYWcpIHsNCj4gPiArICAgIFByaW50RXJyIChMIk1pc3Npbmcg cGFydGl0aW9uIHR5cGUgR1VJRCBwYXJhbWV0ZXIiLA0KPiA+IEVGSV9JTlZBTElEX1BBUkFNRVRF Uik7DQo+ID4gKyAgICBnb3RvIENsZWFuVXA7DQo+ID4gKyAgfSBlbHNlIGlmIChHdWlkRmxhZykg ew0KPiA+ICsgICAgU3RhdHVzID0gU0hFTExfSU5WQUxJRF9QQVJBTUVURVI7DQo+ID4gKyAgICBp ZiAoSW50ZXJuYWxTaGVsbElzSGV4T3JEZWNpbWFsTnVtYmVyIChHdWlkU3RyLCBGQUxTRSwgVFJV RSwgRkFMU0UpKSB7DQo+ID4gKyAgICAgIFVJTlROIE9yZGluYWw7DQo+ID4gKw0KPiA+ICsgICAg ICBPcmRpbmFsID0gU2hlbGxTdHJUb1VpbnRuIChHdWlkU3RyKTsNCj4gPiArICAgICAgaWYgKE9y ZGluYWwgPCBOdW1Lbm93blBhcnRUeXBlc0VudHJpZXMpIHsNCj4gPiArICAgICAgICBQYXJ0VHlw ZUd1aWQgPSBQYXJ0aXRpb25HZXRLbm93blR5cGUgKE9yZGluYWwsIE5VTEwpLT5UeXBlR3VpZDsN Cj4gPiArICAgICAgICBTdGF0dXMgPSBTSEVMTF9TVUNDRVNTOw0KPiA+ICsgICAgICB9IGVsc2Ug ew0KPiA+ICsgICAgICAgIFNoZWxsUHJpbnRIaWlFeCAoLTEsIC0xLCBOVUxMLCBTVFJJTkdfVE9L RU4gKFNUUl9HRU5fUEFSQU1fSU5WKSwNCj4gPiBnU2hlbGxHcHRIaWlIYW5kbGUsIGdBcHBOYW1l LCBHdWlkU3RyKTsNCj4gPiArICAgICAgICBnb3RvIENsZWFuVXA7DQo+ID4gKyAgICAgIH0NCj4g PiArICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgIFN0YXR1cyA9IENvbnZlcnRTdHJpbmdUb0d1aWQg KEd1aWRTdHIsICZQYXJ0VHlwZUd1aWQpOw0KPiA+ICsgICAgICBpZiAoKEVGSV9FUlJPUiAoU3Rh dHVzKSkgfHwgKElzWmVyb0d1aWQgKCZQYXJ0VHlwZUd1aWQpKSkgew0KPiA+ICsgICAgICAgIFNo ZWxsUHJpbnRIaWlFeCAoLTEsIC0xLCBOVUxMLCBTVFJJTkdfVE9LRU4gKFNUUl9HRU5fUEFSQU1f SU5WKSwNCj4gPiBnU2hlbGxHcHRIaWlIYW5kbGUsIGdBcHBOYW1lLCBHdWlkU3RyKTsNCj4gPiAr ICAgICAgICBTdGF0dXMgPSBTSEVMTF9JTlZBTElEX1BBUkFNRVRFUjsNCj4gPiArICAgICAgICBn b3RvIENsZWFuVXA7DQo+ID4gKyAgICAgIH0NCj4gPiArICAgIH0NCj4gPiArICB9DQo+ID4gKw0K PiA+ICsgIGlmIChGaWxlRmxhZykgew0KPiA+ICsgICAgLy8gUmVhZCBGaWxlUGF0aCBwYXJhbWV0 ZXINCj4gPiArICAgIGlmIChGaWxlU3RyID09IE5VTEwpIHsNCj4gPiArICAgICAgUHJpbnRFcnIg KEwiTm8gRmlsZVBhdGggcGFyYW1ldGVyIiwgRUZJX0lOVkFMSURfUEFSQU1FVEVSKTsNCj4gPiAr ICAgICAgZ290byBDbGVhblVwOw0KPiA+ICsgICAgfSBlbHNlIHsNCj4gPiArICAgICAgRmlsZVBh dGggPSAoQ0hBUjE2ICopRmlsZVN0cjsNCj4gPiArICAgICAgU3RhdHVzID0gU2hlbGxJc0ZpbGUg KEZpbGVQYXRoKTsNCj4gPiArICAgICAgLy8gV2hlbiByZWFkIGZpbGUgaW50byBmbGFzaCwgZmls ZSBkb2Vzbid0IGhhdmUgdG8gZXhpc3QNCj4gPiArICAgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVz ICYmICEoRmxhZyAmIFJFQURfRklMRSkpKSB7DQo+ID4gKyAgICAgICAgUHJpbnRFcnIgKEwiV3Jv bmcgRmlsZVBhdGggcGFyYW1ldGVyIiwgU3RhdHVzKTsNCj4gPiArICAgICAgICBTdGF0dXMgPSBT SEVMTF9JTlZBTElEX1BBUkFNRVRFUjsNCj4gPiArICAgICAgICBnb3RvIENsZWFuVXA7DQo+ID4g KyAgICAgIH0NCj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAgICBTdGF0dXMgPSBPcGVuQW5kUHJl cGFyZUZpbGUgKEZpbGVQYXRoLCAmRmlsZUhhbmRsZSwgKChGbGFnICYNCj4gPiBSRUFEX0ZJTEUp ICE9IDApKTsNCj4gPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiArICAgICAg UHJpbnQgKEwiRXJyb3IgJXIgd2hpbGUgcHJlcGFyaW5nIGZpbGUgJXMiLCBTdGF0dXMsIEZpbGVQ YXRoKTsNCj4gPiArICAgICAgU3RhdHVzID0gU0hFTExfQUJPUlRFRDsNCj4gPiArICAgICAgZ290 byBDbGVhblVwOw0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArICAgIC8vIEdldCBmaWxlIHNpemUg aW4gb3JkZXIgdG8gY2hlY2sgY29ycmVjdG5lc3MgYXQgdGhlIGVuZCBvZiB0cmFuc2Zlcg0KPiA+ ICsgICAgaWYgKEZsYWcgJiAoV1JJVEVfRklMRSkpIHsNCj4gPiArICAgICAgU3RhdHVzID0gRmls ZUhhbmRsZUdldFNpemUgKEZpbGVIYW5kbGUsICZGaWxlU2l6ZSk7DQo+ID4gKyAgICAgIGlmIChF RklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiArICAgICAgICBQcmludEVyciAoTCJDYW5ub3QgZ2V0 IGZpbGUgc2l6ZSIsIFN0YXR1cyk7DQo+ID4gKyAgICAgICAgU3RhdHVzID0gU0hFTExfQUJPUlRF RDsNCj4gPiArICAgICAgICBnb3RvIENsZWFuVXA7DQo+ID4gKyAgICAgIH0NCj4gPiArICAgICAg Qnl0ZUNvdW50ID0gKFVJTlQ2NClGaWxlU2l6ZTsNCj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAg ICBGaWxlQnVmZmVyID0gQWxsb2NhdGVaZXJvUG9vbCAoKFVJTlROKUJ5dGVDb3VudCk7DQo+ID4g KyAgICBpZiAoRmlsZUJ1ZmZlciA9PSBOVUxMKSB7DQo+ID4gKyAgICAgIFByaW50RXJyIChMIkNh bm5vdCBhbGxvY2F0ZSBtZW1vcnkiLCBFRklfT1VUX09GX1JFU09VUkNFUyk7DQo+ID4gKyAgICAg IFN0YXR1cyA9IFNIRUxMX09VVF9PRl9SRVNPVVJDRVM7DQo+ID4gKyAgICAgIGdvdG8gRXJyb3Jf Q2xvc2VfRmlsZTsNCj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAgICAvLyBSZWFkIGZpbGUgY29u dGVudCBhbmQgc3RvcmUgaXQgaW4gRmlsZUJ1ZmZlcg0KPiA+ICsgICAgaWYgKEZsYWcgJiAoV1JJ VEVfRklMRSkpIHsNCj4gPiArICAgICAgaWYgKCFRdWlldCkgew0KPiA+ICsgICAgICAgIFByaW50 IChMIlJlYWRpbmcgJXMuLi5cciIsIEZpbGVQYXRoKTsNCj4gPiArICAgICAgfQ0KPiA+ICsgICAg ICBTdGF0dXMgPSBGaWxlSGFuZGxlUmVhZCAoRmlsZUhhbmRsZSwgJkJ5dGVDb3VudCwgRmlsZUJ1 ZmZlcik7DQo+ID4gKyAgICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiArICAgICAg ICBQcmludEVyciAoTCJSZWFkIGZyb20gZmlsZSBlcnJvciIsIFN0YXR1cyk7DQo+ID4gKyAgICAg ICAgU3RhdHVzID0gU0hFTExfQUJPUlRFRDsNCj4gPiArICAgICAgICBnb3RvIEVycm9yX0ZyZWVf QnVmZmVyOw0KPiA+ICsgICAgICB9IGVsc2UgaWYgKEJ5dGVDb3VudCAhPSAoVUlOVE4pRmlsZVNp emUpIHsNCj4gPiArICAgICAgICBQcmludEVyciAoTCJOb3Qgd2hvbGUgZmlsZSByZWFkLiBBYm9y dCIsIEVGSV9ERVZJQ0VfRVJST1IpOw0KPiA+ICsgICAgICAgIFN0YXR1cyA9IFNIRUxMX0RFVklD RV9FUlJPUjsNCj4gPiArICAgICAgICBnb3RvIEVycm9yX0ZyZWVfQnVmZmVyOw0KPiA+ICsgICAg ICB9DQo+ID4gKyAgICAgIGlmICghUXVpZXQpIHsNCj4gPiArICAgICAgICBQcmludCAoTCJXcml0 aW5nICVzIGludG8gZGV2aWNlICVzLCBwYXJ0aXRpb24gJXMuLi5cbiIsIEZpbGVQYXRoLA0KPiA+ IEJsb2NrTmFtZSwgUGFydE5hbWUpOw0KPiA+ICsgICAgICB9DQo+ID4gKyAgICB9DQo+ID4gKyAg fQ0KPiA+ICsNCj4gPiArICBCdWZmZXIgPSAoVUlOVDggKilBZGRyZXNzOw0KPiA+ICsgIGlmIChG aWxlRmxhZykgew0KPiA+ICsgICAgQnVmZmVyID0gRmlsZUJ1ZmZlcjsNCj4gPiArICB9DQo+ID4g Kw0KPiA+ICsgIGlmIChGbGFnID4gVFlQRVNfSU5GTykgew0KPiA+ICsgICAgRW50cnkgPSBQYXJ0 aXRpb25GaW5kUGFydGl0aW9uQnlDcml0ZXJpYSAoUGFydE5hbWUsIDAsIDAsIFNSQ19CWV9OQU1F KTsNCj4gPiArICAgIGlmICghRW50cnkgJiYgUGFydE5hbWUgJiYgKEludGVybmFsU2hlbGxJc0hl eE9yRGVjaW1hbE51bWJlcg0KPiA+IChQYXJ0TmFtZSwgRkFMU0UsIFRSVUUsIEZBTFNFKSkpIHsN Cj4gPiArICAgICAgRW50cnkgPSBQYXJ0aXRpb25GaW5kUGFydGl0aW9uQnlDcml0ZXJpYSAoUGFy dE5hbWUsIDAsIDAsIFNSQ19CWV9OVU0pOw0KPiA+ICsgICAgfQ0KPiA+ICsgICAgaWYgKCghRW50 cnkpICYmIChQYXJ0TmFtZUZsYWcpKSB7DQo+ID4gKyAgICAgIFNoZWxsUHJpbnRIaWlFeCAoLTEs IC0xLCBOVUxMLCBTVFJJTkdfVE9LRU4gKFNUUl9HRU5fUEFSQU1fSU5WKSwNCj4gPiBnU2hlbGxH cHRIaWlIYW5kbGUsIGdBcHBOYW1lLCBQYXJ0TmFtZSk7DQo+ID4gKyAgICAgIFByaW50IChMIkNv dWxkIG5vdCBmaW5kIHBhcnRpdGlvbiAlcyAoY2FzZS1zZW5zaXRpdmUpLiBNYWtlIHN1cmUgdGhl DQo+IG5hbWUNCj4gPiBpcyBzcGVsbGVkIHByb3Blcmx5XG4iLCBQYXJ0TmFtZSk7DQo+ID4gKyAg ICAgIFN0YXR1cyA9IFNIRUxMX05PVF9GT1VORDsNCj4gPiArICAgICAgZ290byBDbGVhblVwOw0K PiA+ICsgICAgfQ0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgc3dpdGNoIChGbGFnKSB7DQo+ID4g KyAgICBjYXNlIENSRUFURToNCj4gPiArICAgICAgUGFydGl0aW9uR3B0Q3JlYXRlUGFydGl0aW9u ICgNCj4gPiArICAgICAgICBQYXJ0TmFtZSwNCj4gPiArICAgICAgICBPZmZzZXQsICAvLyBMYmEu IElmIDAsIHRoZSBuZXh0IGF2YWlsYWJsZSBpcyBhc3N1bWVkDQo+ID4gKyAgICAgICAgQnl0ZUNv dW50LCAvLyBpbiBNZWdhQnl0ZXMuIElmIDAgdGhlIHdob2xlIHJlbWFpbmluZyBzcGFjZSBpcw0K PiBhc3N1bWVkDQo+ID4gKyAgICAgICAgUGFydEF0dHJpYnV0ZXMsDQo+ID4gKyAgICAgICAgUGFy dFR5cGVHdWlkKTsNCj4gPiArICAgICAgYnJlYWs7DQo+ID4gKyAgICBjYXNlIERFTEVURToNCj4g PiArICAgICAgTW9kUGFyYW1zLlBhcnROYW1lID0gUGFydE5hbWU7DQo+ID4gKyAgICAgIFNoZWxs UHJpbnRIaWlFeCAoLTEsIC0xLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIFNU UklOR19UT0tFTiAoU1RSX0dQVF9ERUxFVEVfV0FSTklORyksDQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgZ1NoZWxsR3B0SGlpSGFuZGxlLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAg IEVudHJ5LT5QYXJ0aXRpb25OYW1lDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICApOw0KPiA+ ICsgICAgICBpZiAoKE5vUHJvbXB0KSB8fCAoIUdwdFByb21wdFllc05vIChTVFJJTkdfVE9LRU4N Cj4gPiAoU1RSX0dQVF9BQlNPTFVURUxZX1NVUkUpKSkpIHsNCj4gPiArICAgICAgICBTdGF0dXMg PSBQYXJ0aXRpb25HcHRNb2RpZnlQYXJ0aXRpb24gKA0KPiA+ICsgICAgICAgICAgRW50cnksICZN b2RQYXJhbXMsIE1PRF9ERUxFVEUpOw0KPiA+ICsgICAgICAgIGlmIChFRklfRVJST1IgKFN0YXR1 cykpIHsNCj4gPiArICAgICAgICAgIFByaW50RXJyIChMIkVycm9yIGRlbGV0aW5nIHRoZSBwYXJ0 aXRpb24iLCBTdGF0dXMpOw0KPiA+ICsgICAgICAgICAgU3RhdHVzID0gU0hFTExfQUJPUlRFRDsN Cj4gPiArICAgICAgICAgIGdvdG8gQ2xlYW5VcDsNCj4gPiArICAgICAgICB9DQo+ID4gKyAgICAg ICAgU3RhdHVzID0gU0hFTExfU1VDQ0VTUzsNCj4gPiArICAgICAgfSBlbHNlIHsNCj4gPiArICAg ICAgICBTdGF0dXMgPSBTSEVMTF9BQk9SVEVEOw0KPiA+ICsgICAgICB9DQo+ID4gKyAgICAgIGJy ZWFrOw0KPiA+ICsgICAgY2FzZSBGQVRfRk9STUFUOg0KPiA+ICsgICAgew0KPiA+ICsgICAgICBF RklfTEJBIFN0YXJ0aW5nTEJBLCBFbmRpbmdMQkE7DQo+ID4gKyAgICAgIENIQVI4ICAgICAgICAg ICAgICAgIExhYmVsTmFtZVsxMl07DQo+ID4gKw0KPiA+ICsgICAgICBpZiAoVm9sdW1lTmFtZSkg ew0KPiA+ICsgICAgICAgIGlmIChTdHJMZW4gKFZvbHVtZU5hbWUpID4gMTEpIHsNCj4gPiArICAg ICAgICAgIFN0YXR1cyA9IEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gPiArICAgICAgICAgIFBy aW50RXJyIChMIlRoZSB2b2x1bWUgbGFiZWwgaXMgdG9vIGxvbmciLCBTdGF0dXMpOw0KPiA+ICsg ICAgICAgICAgU3RhdHVzID0gU0hFTExfSU5WQUxJRF9QQVJBTUVURVI7DQo+ID4gKyAgICAgICAg ICBnb3RvIENsZWFuVXA7DQo+ID4gKyAgICAgICAgfQ0KPiA+ICsgICAgICAgIFVuaWNvZGVTdHJU b0FzY2lpU3RyIChWb2x1bWVOYW1lLCAoQ0hBUjggKilMYWJlbE5hbWUpOw0KPiA+ICsgICAgICB9 DQo+ID4gKyAgICAgIFNoZWxsUHJpbnRIaWlFeCAoLTEsIC0xLA0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgIE5VTEwsIFNUUklOR19UT0tFTiAoU1RSX0dQVF9GT1JNQVRfV0FSTklORyksDQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgZ1NoZWxsR3B0SGlpSGFuZGxlLA0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgIEVudHJ5ID8gRW50cnktPlBhcnRpdGlvbk5hbWUgOiBCbG9ja05h bWUNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICk7DQo+ID4gKw0KPiA+ICsgICAgICBpZiAo KE5vUHJvbXB0KSB8fCAoIUdwdFByb21wdFllc05vIChTVFJJTkdfVE9LRU4NCj4gPiAoU1RSX0dQ VF9GT1JNQVRfU1VSRSkpICYmDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAoIUdwdFBy b21wdFllc05vIChTVFJJTkdfVE9LRU4NCj4gPiAoU1RSX0dQVF9BQlNPTFVURUxZX1NVUkUpKSkp DQo+ID4gKyAgICAgICAgICkgew0KPiA+ICsgICAgICAgIFN0YXJ0aW5nTEJBID0gMDsNCj4gPiAr ICAgICAgICBFbmRpbmdMQkEgPSBCbG9ja0lvLT5NZWRpYS0+TGFzdEJsb2NrOw0KPiA+ICsgICAg ICAgIGlmIChFbnRyeSkgew0KPiA+ICsgICAgICAgICAgU3RhcnRpbmdMQkEgPSBFbnRyeS0+U3Rh cnRpbmdMQkE7DQo+ID4gKyAgICAgICAgICBFbmRpbmdMQkEgPSBFbnRyeS0+RW5kaW5nTEJBOw0K PiA+ICsgICAgICAgIH0NCj4gPiArICAgICAgICBpZiAoIVF1aWV0KSB7DQo+ID4gKyAgICAgICAg ICBQcmludCAoTCJGb3JtYXR0aW5nICVzIHRvIEZBVDMyLi4uXHIiLCBQYXJ0TmFtZUZsYWcgPyBF bnRyeS0NCj4gPiA+UGFydGl0aW9uTmFtZSA6IEJsb2NrTmFtZSk7DQo+ID4gKyAgICAgICAgfQ0K PiA+ICsgICAgICAgIFN0YXR1cyA9IEZhdEZvcm1hdCAoU3RhcnRpbmdMQkEsIEVuZGluZ0xCQSwg QmxvY2tJbywgRGlza0lvLA0KPiA+IFZvbHVtZU5hbWUgPyBMYWJlbE5hbWUgOiBOVUxMLCBUUlVF KTsNCj4gPiArICAgICAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gKyAgICAgICAg ICBQcmludEVyciAoTCJFcnJvciBmb3JtYXR0aW5nIHRoZSBwYXJ0aXRpb24gdG8gRkFUICAgICAg ICAgICAgICIsIFN0YXR1cyk7DQo+ID4gKyAgICAgICAgICBTdGF0dXMgPSBTSEVMTF9BQk9SVEVE Ow0KPiA+ICsgICAgICAgICAgZ290byBDbGVhblVwOw0KPiA+ICsgICAgICAgIH0gZWxzZSBpZiAo IVF1aWV0KSB7DQo+ID4gKyAgICAgICAgICBQcmludCAoTCIlcyBzdWNjZXNzZnVsbHkgZm9ybWF0 dGVkIHRvIEZBVC4gRm9ybWF0dGVkIHNpemUgJWxsdQ0KPiBNaUJcbiIsDQo+ID4gKyAgICAgICAg ICAgICAgICAgUGFydE5hbWVGbGFnID8gRW50cnktPlBhcnRpdGlvbk5hbWUgOiBCbG9ja05hbWUs DQo+ID4gKyAgICAgICAgICAgICAgICAgTXVsdFU2NHgzMiAoRW5kaW5nTEJBIC0gU3RhcnRpbmdM QkEgKyAxLCBCbG9ja0lvLT5NZWRpYS0NCj4gPiA+QmxvY2tTaXplKSA+PiAyMA0KPiA+ICsgICAg ICAgICAgICAgICAgKTsNCj4gPiArICAgICAgICB9DQo+ID4gKyAgICAgIH0gZWxzZSB7DQo+ID4g KyAgICAgICAgU3RhdHVzID0gU0hFTExfQUJPUlRFRDsNCj4gPiArICAgICAgfQ0KPiA+ICsgICAg fQ0KPiA+ICsgICAgICBicmVhazsNCj4gPiArICAgIGNhc2UgUkVOQU1FOg0KPiA+ICsgICAgICBN b2RQYXJhbXMuUGFydE5hbWUgPSBQYXJ0TmFtZTsNCj4gPiArICAgICAgTW9kUGFyYW1zLk5ld05h bWUgID0gTmV3UGFydE5hbWU7DQo+ID4gKyAgICAgIFN0YXR1cyA9IFBhcnRpdGlvbkdwdE1vZGlm eVBhcnRpdGlvbiAoDQo+ID4gKyAgICAgICAgRW50cnksICZNb2RQYXJhbXMsIE1PRF9SRU5BTUUp Ow0KPiA+ICsgICAgICBicmVhazsNCj4gPiArICAgIGNhc2UgU0VUQVRUUjoNCj4gPiArICAgICAg TW9kUGFyYW1zLkF0dHJpYnV0ZXMgPSBQYXJ0QXR0cmlidXRlczsNCj4gPiArICAgICAgU3RhdHVz ID0gUGFydGl0aW9uR3B0TW9kaWZ5UGFydGl0aW9uICgNCj4gPiArICAgICAgICBFbnRyeSwgJk1v ZFBhcmFtcywgTU9EX0FUVFIpOw0KPiA+ICsgICAgICBicmVhazsNCj4gPiArICAgIGNhc2UgU0VU VFlQRToNCj4gPiArICAgICAgTW9kUGFyYW1zLlBhcnRUeXBlR3VpZCA9IFBhcnRUeXBlR3VpZDsN Cj4gPiArICAgICAgU3RhdHVzID0gUGFydGl0aW9uR3B0TW9kaWZ5UGFydGl0aW9uICgNCj4gPiAr ICAgICAgICBFbnRyeSwgJk1vZFBhcmFtcywgTU9EX1RZUEUpOw0KPiA+ICsgICAgICBicmVhazsN Cj4gPiArICAgIGNhc2UgSU5GTzoNCj4gPiArICAgICAgUGFydGl0aW9uUHJpbnRHcHRQYXJ0SW5m byAoRW50cnkpOw0KPiA+ICsgICAgICBTdGF0dXMgPSBTSEVMTF9TVUNDRVNTOw0KPiA+ICsgICAg ICBicmVhazsNCj4gPiArICAgIGNhc2UgUkVBRDoNCj4gPiArICAgIGNhc2UgUkVBRF9GSUxFOg0K PiA+ICsgICAgY2FzZSBXUklURToNCj4gPiArICAgIGNhc2UgV1JJVEVfRklMRToNCj4gPiArICAg IHsNCj4gPiArICAgICAgVUlOVDY0IE1heEJ5dGVzOw0KPiA+ICsgICAgICBCT09MRUFOIE9wUmVh ZDsNCj4gPiArDQo+ID4gKyAgICAgIE9wUmVhZCA9ICgoRmxhZyAmIFJFQUQpIHx8IChGbGFnICYg UkVBRF9GSUxFKSk7DQo+ID4gKyAgICAgIE1heEJ5dGVzID0gTXVsdFU2NHgzMiAoDQo+ID4gKyAg ICAgICAgRW50cnktPkVuZGluZ0xCQSAtIEVudHJ5LT5TdGFydGluZ0xCQSwNCj4gPiArICAgICAg ICBCbG9ja0lvLT5NZWRpYS0+QmxvY2tTaXplKSArDQo+ID4gKyAgICAgICAgQmxvY2tJby0+TWVk aWEtPkJsb2NrU2l6ZSAtDQo+ID4gKyAgICAgICAgTXVsdFU2NHgzMiAoT2Zmc2V0LCBCbG9ja0lv LT5NZWRpYS0+QmxvY2tTaXplKTsNCj4gPiArICAgICAgaWYgKEJ5dGVDb3VudCA+IE1heEJ5dGVz KSB7DQo+ID4gKyAgICAgICAgU3RhdHVzID0gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiA+ICsg ICAgICAgIFNoZWxsUHJpbnRIaWlFeCAoLTEsIC0xLA0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgTlVMTCwgKE9wUmVhZCkgPw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgU1RS SU5HX1RPS0VOIChTVFJfR1BUX1JFQURfQk9VTkRBUlkpIDoNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgIFNUUklOR19UT0tFTiAoU1RSX0dQVF9XUklURV9CT1VOREFSWSksDQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICBnU2hlbGxHcHRIaWlIYW5kbGUsDQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICBnQXBwTmFtZSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAg IEVudHJ5LT5QYXJ0aXRpb25OYW1lLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgTWF4 Qnl0ZXMsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICBCeXRlQ291bnQNCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgKTsNCj4gPiArICAgICAgICBTdGF0dXMgPSBTSEVMTF9JTlZB TElEX1BBUkFNRVRFUjsNCj4gPiArICAgICAgICBnb3RvIENsZWFuVXA7DQo+ID4gKyAgICAgIH0N Cj4gPiArDQo+ID4gKyAgICAgIFRpbWVTdGFtcEIgPSBHZXRQZXJmb3JtYW5jZUNvdW50ZXIgKCk7 DQo+ID4gKyAgICAgIGlmIChPcFJlYWQpIHsNCj4gPiArICAgICAgICBTdGF0dXMgPSBEaXNrSW8t PlJlYWREaXNrIChEaXNrSW8sDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgQmxvY2tJby0+TWVkaWEtPk1lZGlhSWQsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgTXVsdFU2NHgzMiAoT2Zmc2V0ICsgRW50cnktPlN0YXJ0aW5nTEJBLCBCbG9j a0lvLQ0KPiA+ID5NZWRpYS0+QmxvY2tTaXplKSwgQnl0ZUNvdW50LCBCdWZmZXIpOw0KPiA+ICsg ICAgICB9IGVsc2Ugew0KPiA+ICsgICAgICAgIFN0YXR1cyA9IERpc2tJby0+V3JpdGVEaXNrIChE aXNrSW8sIEJsb2NrSW8tPk1lZGlhLT5NZWRpYUlkLA0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBNdWx0VTY0eDMyIChPZmZzZXQgKyBFbnRyeS0+U3RhcnRpbmdMQkEs IEJsb2NrSW8tDQo+ID4gPk1lZGlhLT5CbG9ja1NpemUpLCBCeXRlQ291bnQsIEJ1ZmZlcik7DQo+ ID4gKyAgICAgIH0NCj4gPiArICAgIH0NCj4gPiArICAgICAgYnJlYWs7DQo+ID4gKyAgICBkZWZh dWx0Og0KPiA+ICsgICAgICBTdGF0dXMgPSBTSEVMTF9JTlZBTElEX1BBUkFNRVRFUjsNCj4gPiAr ICAgICAgUHJpbnRFcnIgKEwiVW5rbm93biBjb21tYW5kLiBUcnkgXCJoZWxwIGdwdFwiIiwNCj4g PiBFRklfSU5WQUxJRF9QQVJBTUVURVIpOw0KPiA+ICsgICAgICBnb3RvIENsZWFuVXA7DQo+ID4g KyAgfQ0KPiA+ICsNCj4gPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gKyAgICBQ cmludEVyciAoTCJFcnJvciB3aGlsZSBwZXJmb3JtaW5nIHRyYW5zZmVyXG4iLCBTdGF0dXMpOw0K PiA+ICsgICAgU3RhdHVzID0gU0hFTExfQUJPUlRFRDsNCj4gPiArICAgIGdvdG8gQ2xlYW5VcDsN Cj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIFRpbWVTdGFtcEUgPSAoKEdldFBlcmZvcm1hbmNlQ291 bnRlciAoKSAtIFRpbWVTdGFtcEIpICogMTAwMCkgLw0KPiBGcmVxOw0KPiA+ICsgIFNwZWVkS0Ig PSBUaW1lU3RhbXBFID8gKEJ5dGVDb3VudCAvIChUaW1lU3RhbXBFIC8gMTAwMCkpID4+IDEwIDog MDsNCj4gPiArDQo+ID4gKyAgc3dpdGNoIChGbGFnKSB7DQo+ID4gKyAgICBjYXNlIFdSSVRFOg0K PiA+ICsgICAgY2FzZSBXUklURV9GSUxFOg0KPiA+ICsgICAgICBpZiAoIVF1aWV0KSB7DQo+ID4g KyAgICAgICAgU2hlbGxQcmludEhpaUV4ICgtMSwgLTEsDQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICBOVUxMLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgU1RSSU5HX1RPS0VO IChTVFJfR1BUX1dSSVRFX09LKSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgIGdTaGVs bEdwdEhpaUhhbmRsZSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgIEJ5dGVDb3VudCwN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgIE9mZnNldCwNCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgIEVudHJ5LT5QYXJ0aXRpb25OYW1lLA0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgVGltZVN0YW1wRSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgIFNwZWVk S0INCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4gPiArICAgICAgfQ0KPiA+ICsg ICAgICBicmVhazsNCj4gPiArICAgIGNhc2UgUkVBRDoNCj4gPiArICAgICAgaWYgKCFRdWlldCkg ew0KPiA+ICsgICAgICAgIFNoZWxsUHJpbnRIaWlFeCAoLTEsIC0xLA0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgTlVMTCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgIFNUUklO R19UT0tFTiAoU1RSX0dQVF9SRUFEX09LKSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAg IGdTaGVsbEdwdEhpaUhhbmRsZSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgIEJ5dGVD b3VudCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgIE9mZnNldCwNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgIEVudHJ5LT5QYXJ0aXRpb25OYW1lLA0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgVGltZVN0YW1wRSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAg IFNwZWVkS0INCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4gPiArICAgICAgfQ0K PiA+ICsgICAgICBicmVhazsNCj4gPiArICAgIGNhc2UgUkVBRF9GSUxFOg0KPiA+ICsgICAgICBT dGF0dXMgPSBGaWxlSGFuZGxlV3JpdGUgKEZpbGVIYW5kbGUsICZCeXRlQ291bnQsIEZpbGVCdWZm ZXIpOw0KPiA+ICsgICAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gKyAgICAgICAg U2hlbGxQcmludEhpaUV4ICgtMSwgLTEsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICBO VUxMLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgU1RSSU5HX1RPS0VOIChTVFJfR1BU X0ZJTEVfV1JJVEVfRkFJTCksDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICBnU2hlbGxH cHRIaWlIYW5kbGUsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICBnQXBwTmFtZSwNCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgIEZpbGVQYXRoLA0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgU3RhdHVzDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+ID4g KyAgICAgICAgU3RhdHVzID0gU0hFTExfREVWSUNFX0VSUk9SOw0KPiA+ICsgICAgICAgIGdvdG8g RXJyb3JfRnJlZV9CdWZmZXI7DQo+ID4gKyAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgIGlmICgh UXVpZXQpIHsNCj4gPiArICAgICAgICBTaGVsbFByaW50SGlpRXggKC0xLCAtMSwNCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgIE5VTEwsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICBTVFJJTkdfVE9LRU4gKFNUUl9HUFRfUkVBREZJTEVfT0spLA0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgZ1NoZWxsR3B0SGlpSGFuZGxlLA0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgQnl0ZUNvdW50LA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgT2Zmc2V0LA0K PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgRW50cnktPlBhcnRpdGlvbk5hbWUsDQo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICBGaWxlUGF0aCwNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgIFRpbWVTdGFtcEUsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICBTcGVl ZEtCDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+ID4gKyAgICAgIH0NCj4gPiAr ICAgICAgYnJlYWs7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBpZiAoRmlsZUZsYWcpIHsNCj4g PiArICAgIFNIRUxMX0ZSRUVfTk9OX05VTEwgKEZpbGVCdWZmZXIpOw0KPiA+ICsgICAgaWYgKEZp bGVIYW5kbGUgIT0gTlVMTCkgew0KPiA+ICsgICAgICBTaGVsbENsb3NlRmlsZSAoJkZpbGVIYW5k bGUpOw0KPiA+ICsgICAgICBGaWxlSGFuZGxlID0gTlVMTDsNCj4gPiArICAgIH0NCj4gPiArICB9 DQo+ID4gKw0KPiA+ICsgIFN0YXR1cyA9ICBTSEVMTF9TVUNDRVNTOw0KPiA+ICsNCj4gPiArIEVy cm9yX0ZyZWVfQnVmZmVyOg0KPiA+ICsgIFNIRUxMX0ZSRUVfTk9OX05VTEwgKEZpbGVCdWZmZXIp Ow0KPiA+ICsgRXJyb3JfQ2xvc2VfRmlsZToNCj4gPiArICBpZiAoRmlsZUhhbmRsZSkgew0KPiA+ ICsgICAgU2hlbGxDbG9zZUZpbGUgKCZGaWxlSGFuZGxlKTsNCj4gPiArICB9DQo+ID4gKyBDbGVh blVwOg0KPiA+ICsgIGlmIChCbG9ja0lvSGFuZGxlKSB7DQo+ID4gKyAgICAvLyBCeSBVRUZJIFNw ZWMgYmxvY2tzIG11c3QgYmUgZmx1c2hlZA0KPiA+ICsgICAgQmxvY2tJby0+Rmx1c2hCbG9ja3Mg KEJsb2NrSW8pOw0KPiA+ICsgICAgZ0JTLT5DbG9zZVByb3RvY29sIChCbG9ja0lvSGFuZGxlLCAm Z0VmaUJsb2NrSW9Qcm90b2NvbEd1aWQsDQo+ID4gZ0ltYWdlSGFuZGxlLCBOVUxMKTsNCj4gPiAr ICB9DQo+ID4gKw0KPiA+ICsgIEdwdENsZWFudXBHbG9iYWxzICgpOw0KPiA+ICsNCj4gPiArICBT aGVsbENvbW1hbmRMaW5lRnJlZVZhckxpc3QgKENoZWNrUGFja2FnZSk7DQo+ID4gKw0KPiA+ICsg IGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiArICAgIFN0YXR1cyA9IFNIRUxMX0FCT1JU RUQ7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICByZXR1cm4gU3RhdHVzOw0KPiA+ICt9DQo+ID4g Kw0KPiA+ICtFRklfU1RBVFVTDQo+ID4gK0VGSUFQSQ0KPiA+ICtTaGVsbEdwdExpYkNvbnN0cnVj dG9yICgNCj4gPiArICBJTiBFRklfSEFORExFICAgICAgICBJbWFnZUhhbmRsZSwNCj4gPiArICBJ TiBFRklfU1lTVEVNX1RBQkxFICAqU3lzdGVtVGFibGUNCj4gPiArICApDQo+ID4gK3sNCj4gPiAr ICBnU2hlbGxHcHRIaWlIYW5kbGUgPSBOVUxMOw0KPiA+ICsNCj4gPiArICBnU2hlbGxHcHRIaWlI YW5kbGUgPSBIaWlBZGRQYWNrYWdlcyAoDQo+ID4gKyAgICAmZ1NoZWxsR3B0SGlpR3VpZCwgZ0lt YWdlSGFuZGxlLA0KPiA+ICsgICAgVWVmaVNoZWxsR3B0Q29tbWFuZExpYlN0cmluZ3MsIE5VTEwN Cj4gPiArICAgICk7DQo+ID4gKyAgaWYgKGdTaGVsbEdwdEhpaUhhbmRsZSA9PSBOVUxMKSB7DQo+ ID4gKyAgICByZXR1cm4gRUZJX0RFVklDRV9FUlJPUjsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsg IFNoZWxsQ29tbWFuZFJlZ2lzdGVyQ29tbWFuZE5hbWUgKA0KPiA+ICsgICAgZ0FwcE5hbWUsIFNo ZWxsQ29tbWFuZFJ1bkdwdCwNCj4gU2hlbGxDb21tYW5kR2V0TWFuRmlsZU5hbWVHcHQsDQo+ID4g MCwNCj4gPiArICAgIGdBcHBOYW1lLCBUUlVFLCBnU2hlbGxHcHRIaWlIYW5kbGUsIFNUUklOR19U T0tFTg0KPiA+IChTVFJfR0VUX0hFTFBfR1BUKQ0KPiA+ICsgICAgKTsNCj4gPiArDQo+ID4gKyAg cmV0dXJuIEVGSV9TVUNDRVNTOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtFRklfU1RBVFVTDQo+ID4g K0VGSUFQSQ0KPiA+ICtTaGVsbEdwdExpYkRlc3RydWN0b3IgKA0KPiA+ICsgIElOIEVGSV9IQU5E TEUgICAgICAgIEltYWdlSGFuZGxlLA0KPiA+ICsgIElOIEVGSV9TWVNURU1fVEFCTEUgICpTeXN0 ZW1UYWJsZQ0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsNCj4gPiArICBpZiAoZ1NoZWxsR3B0SGlp SGFuZGxlICE9IE5VTEwpIHsNCj4gPiArICAgIEhpaVJlbW92ZVBhY2thZ2VzIChnU2hlbGxHcHRI aWlIYW5kbGUpOw0KPiA+ICsgIH0NCj4gPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ID4gK30N Cj4gPiBkaWZmIC0tZ2l0DQo+ID4gYS9TaGVsbFBrZy9MaWJyYXJ5L1VlZmlTaGVsbEdwdENvbW1h bmRMaWIvVWVmaVNoZWxsR3B0Q29tbWFuZExpYi5pbmYNCj4gPg0KPiBiL1NoZWxsUGtnL0xpYnJh cnkvVWVmaVNoZWxsR3B0Q29tbWFuZExpYi9VZWZpU2hlbGxHcHRDb21tYW5kTGliLmluZg0KPiA+ IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAwMDAwMDAwLi4xYmU0YjFhYjBm MTENCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrDQo+ID4NCj4gYi9TaGVsbFBrZy9MaWJyYXJ5 L1VlZmlTaGVsbEdwdENvbW1hbmRMaWIvVWVmaVNoZWxsR3B0Q29tbWFuZExpYi5pbmYNCj4gPiBA QCAtMCwwICsxLDc5IEBADQo+ID4gKyMNCj4gPiArIyBNYXJ2ZWxsIEJTRCBMaWNlbnNlIE9wdGlv bg0KPiA+ICsjDQo+ID4gKyMgSWYgeW91IHJlY2VpdmVkIHRoaXMgRmlsZSBmcm9tIE1hcnZlbGws IHlvdSBtYXkgb3B0IHRvIHVzZSwgcmVkaXN0cmlidXRlDQo+ID4gKyMgYW5kL29yIG1vZGlmeSB0 aGlzIEZpbGUgdW5kZXIgdGhlIGZvbGxvd2luZyBsaWNlbnNpbmcgdGVybXMuDQo+ID4gKyMgUmVk aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3 aXRob3V0DQo+ID4gKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQ0KPiA+IG1ldDoNCj4gPiArIw0KPiA+ICsjICog UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5 cmlnaHQgbm90aWNlLA0KPiA+ICsjIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s bG93aW5nIGRpc2NsYWltZXIuDQo+ID4gKyMNCj4gPiArIyAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0DQo+ID4gKyMgbm90 aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy IGluIHRoZQ0KPiA+ICsjIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92 aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQo+ID4gKyMNCj4gPiArIyAqIE5laXRoZXIgdGhl IG5hbWUgb2YgTWFydmVsbCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJl DQo+ID4gKyMgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t IHRoaXMgc29mdHdhcmUNCj4gd2l0aG91dA0KPiA+ICsjIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g cGVybWlzc2lvbi4NCj4gPiArIw0KPiA+ICsjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORA0KPiA+IENPTlRSSUJVVE9SUyAiQVMgSVMiDQo+ID4g KyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg Tk9UDQo+ID4gTElNSVRFRCBUTywgVEhFDQo+ID4gKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQQ0KPiA+IFBBUlRJQ1VMQVIgUFVSUE9TRSBB UkUNCj4gPiArIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9X TkVSIE9SDQo+ID4gQ09OVFJJQlVUT1JTIEJFIExJQUJMRQ0KPiA+ICsjIEZPUiBBTlkgRElSRUNU LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUg0KPiA+IENPTlNF UVVFTlRJQUwNCj4gPiArIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg UFJPQ1VSRU1FTlQgT0YNCj4gPiBTVUJTVElUVVRFIEdPT0RTIE9SDQo+ID4gKyMgU0VSVklDRVM7 IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUw0KPiBJTlRFUlJVUFRJ T04pDQo+ID4gSE9XRVZFUg0KPiA+ICsjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsDQo+ID4gU1RSSUNUIExJQUJJTElUWSwNCj4gPiAr IyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g QU5ZDQo+IFdBWQ0KPiA+IE9VVCBPRiBUSEUgVVNFDQo+ID4gKyMgT0YgVEhJUyBTT0ZUV0FSRSwg RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIDQo+ID4gREFNQUdFLg0K PiA+ICsjDQo+ID4gKw0KPiA+ICsjDQo+ID4gKyMgUG9ydGlvbnMgQ29weXJpZ2h0IChDKSAyMDE2 IEJyb2FkY29tDQo+ID4gKyMNCj4gPiArDQo+ID4gK1tEZWZpbmVzXQ0KPiA+ICsgSU5GX1ZFUlNJ T04gICAgICAgICAgICAgICAgPSAweDAwMDEwMDA2DQo+ID4gKyBCQVNFX05BTUUgICAgICAgICAg ICAgICAgICA9IFVlZmlTaGVsbEdwdENvbW1hbmRMaWINCj4gPiArIEZJTEVfR1VJRCAgICAgICAg ICAgICAgICAgID0gRjYyQUNGMjUtMEQxNS0yMkY1LUU2NDItRkZCNjUxNUUwMEQ3DQo+ID4gKyBN T0RVTEVfVFlQRSAgICAgICAgICAgICAgICA9IFVFRklfQVBQTElDQVRJT04NCj4gPiArIFZFUlNJ T05fU1RSSU5HICAgICAgICAgICAgID0gMC4xDQo+ID4gKyBMSUJSQVJZX0NMQVNTICAgICAgICAg ICAgICA9IE5VTEx8VUVGSV9BUFBMSUNBVElPTiBVRUZJX0RSSVZFUg0KPiA+ICsgQ09OU1RSVUNU T1IgICAgICAgICAgICAgICAgPSBTaGVsbEdwdExpYkNvbnN0cnVjdG9yDQo+ID4gKyBERVNUUlVD VE9SICAgICAgICAgICAgICAgICA9IFNoZWxsR3B0TGliRGVzdHJ1Y3Rvcg0KPiA+ICsNCj4gPiAr W1NvdXJjZXNdDQo+ID4gKyBGYXRGb3JtYXQuYw0KPiA+ICsgR3B0V29ya2VyLmMNCj4gPiArIFVl ZmlTaGVsbEdwdENvbW1hbmRMaWIuYw0KPiA+ICsgVWVmaVNoZWxsR3B0Q29tbWFuZExpYi51bmkN Cj4gPiArDQo+ID4gK1tQYWNrYWdlc10NCj4gPiArIE1kZU1vZHVsZVBrZy9NZGVNb2R1bGVQa2cu ZGVjDQo+ID4gKyBNZGVQa2cvTWRlUGtnLmRlYw0KPiA+ICsgU2hlbGxQa2cvU2hlbGxQa2cuZGVj DQo+ID4gKw0KPiA+ICtbTGlicmFyeUNsYXNzZXNdDQo+ID4gKyBCYXNlTGliDQo+ID4gKyBCYXNl TWVtb3J5TGliDQo+ID4gKyBEZWJ1Z0xpYg0KPiA+ICsgRGV2aWNlUGF0aExpYg0KPiA+ICsgRmls ZUhhbmRsZUxpYg0KPiA+ICsgSGlpTGliDQo+ID4gKyBNZW1vcnlBbGxvY2F0aW9uTGliDQo+ID4g KyBQY2RMaWINCj4gPiArIFNoZWxsQ29tbWFuZExpYg0KPiA+ICsgU2hlbGxMaWINCj4gPiArIFVl ZmlCb290U2VydmljZXNUYWJsZUxpYg0KPiA+ICsgVWVmaVJ1bnRpbWVTZXJ2aWNlc1RhYmxlTGli DQo+ID4gKyBVZWZpTGliDQo+ID4gKw0KPiA+ICtbUHJvdG9jb2xzXQ0KPiA+ICsgIGdFZmlCbG9j a0lvUHJvdG9jb2xHdWlkDQo+ID4gKyAgZ0VmaURldmljZVBhdGhQcm90b2NvbEd1aWQNCj4gPiAr ICBnRWZpRGlza0lvUHJvdG9jb2xHdWlkDQo+ID4gKw0KPiA+ICtbR3VpZHNdDQo+ID4gKyBnU2hl bGxHcHRIaWlHdWlkDQo+ID4gKyBnRWZpUGFydFR5cGVVbnVzZWRHdWlkICAgICAgICAgICAgICAg ICAgICAgICAgIyMgU09NRVRJTUVTX0NPTlNVTUVTICMjDQo+IEdVSUQNCj4gPiBkaWZmIC0tZ2l0 DQo+ID4NCj4gYS9TaGVsbFBrZy9MaWJyYXJ5L1VlZmlTaGVsbEdwdENvbW1hbmRMaWIvVWVmaVNo ZWxsR3B0Q29tbWFuZExpYi51bmkNCj4gPg0KPiBiL1NoZWxsUGtnL0xpYnJhcnkvVWVmaVNoZWxs R3B0Q29tbWFuZExpYi9VZWZpU2hlbGxHcHRDb21tYW5kTGliLnVuaQ0KPiA+IG5ldyBmaWxlIG1v ZGUgMTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAwMDAwMDAwLi41NWJjYjQyY2ZlYjMNCj4gPiAtLS0g L2Rldi9udWxsDQo+ID4gKysrDQo+ID4NCj4gYi9TaGVsbFBrZy9MaWJyYXJ5L1VlZmlTaGVsbEdw dENvbW1hbmRMaWIvVWVmaVNoZWxsR3B0Q29tbWFuZExpYi51bmkNCj4gPiBAQCAtMCwwICsxLDEx NyBAQA0KPiA+DQo+ICvvu78vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqDQo+ID4gKioqKioqKioqKioqKioqKioqKioqKg0KPiA+ICtDb3B5 cmlnaHQgKEMpIDIwMTYgTWFydmVsbCBJbnRlcm5hdGlvbmFsIEx0ZC4NCj4gPiArDQo+ID4gK01h cnZlbGwgQlNEIExpY2Vuc2UgT3B0aW9uDQo+ID4gKw0KPiA+ICtJZiB5b3UgcmVjZWl2ZWQgdGhp cyBGaWxlIGZyb20gTWFydmVsbCwgeW91IG1heSBvcHQgdG8gdXNlLCByZWRpc3RyaWJ1dGUNCj4g PiBhbmQvb3INCj4gPiArbW9kaWZ5IHRoaXMgRmlsZSB1bmRlciB0aGUgZm9sbG93aW5nIGxpY2Vu c2luZyB0ZXJtcy4NCj4gPiArUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQo+ID4gbW9kaWZpY2F0aW9uLA0KPiA+ICthcmUg cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6 DQo+ID4gKw0KPiA+ICsgICAgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11 c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQNCj4gbm90aWNlLA0KPiA+ICsgICAgICAgICAg dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCj4g PiArDQo+ID4gKyAgICAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodA0KPiA+ICsgICAgICAgICAgbm90aWNlLCB0aGlz IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQ0K PiA+ICsgICAgICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCj4gPiArDQo+ID4gKyAgICAgICAgKiBOZWl0aGVy IHRoZSBuYW1lIG9mIE1hcnZlbGwgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1h eQ0KPiBiZQ0KPiA+ICsgICAgICAgICAgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj dHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUNCj4gPiB3aXRob3V0DQo+ID4gKyAgICAgICAg ICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQo+ID4gKw0KPiA+ICtUSElTIFNP RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQNCj4gPiBDT05U UklCVVRPUlMgIkFTIElTIiBBTkQNCj4gPiArQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRA0KPiBUTywNCj4gPiBUSEUgSU1QTElFRA0K PiA+ICtXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSDQo+ID4gUFVSUE9TRSBBUkUNCj4gPiArRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB TEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUg0KPiA+IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S DQo+ID4gK0FOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB UlksIE9SDQo+ID4gQ09OU0VRVUVOVElBTCBEQU1BR0VTDQo+ID4gKyhJTkNMVURJTkcsIEJVVCBO T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURQ0KPiBHT09EUw0KPiA+IE9S IFNFUlZJQ0VTOw0KPiA+ICtMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F U1MgSU5URVJSVVBUSU9OKQ0KPiBIT1dFVkVSDQo+ID4gQ0FVU0VEIEFORCBPTg0KPiA+ICtBTlkg VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU WSwgT1INCj4gPiBUT1JUDQo+ID4gKyhJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YNCj4gPiBUSEUgVVNFIE9GIFRISVMNCj4gPiArU09G VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu DQo+ID4gKw0KPiA+DQo+ICsqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioNCj4gPiAqKioqKioqKioqKioqKioqKioqKioqLw0KPiA+ICsNCj4g PiArLyogUG9ydGlvbnMgQ29weXJpZ2h0IChDKSAyMDE2IEJyb2FkY29tICovDQo+ID4gKy89Iw0K PiA+ICsNCj4gPiArI2xhbmdkZWYgICBlbi1VUyAiZW5nbGlzaCINCj4gPiArDQo+ID4gKyNzdHJp bmcgU1RSX0dFTl9QQVJBTV9JTlYgICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgIiVIJXMlTjogSW52 YWxpZA0KPiA+IGFyZ3VtZW50IC0gJyVIJXMlTidcclxuIg0KPiA+ICsjc3RyaW5nIFNUUl9HRU5f TUFQX1BST1RPQ09MICAgICAgI2xhbmd1YWdlIGVuLVVTICIlSCVzJU46DQo+ID4gTWFwcGVkIGRl dmljZSAnJUIlcyVOJyBkb2VzIG5vdCBoYXZlIHByb3RvY29sICVCJXMlTlxyXG4iDQo+ID4gKw0K PiA+ICsjc3RyaW5nIFNUUl9HUFRfRVJST1IgICAgICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgIiVI JXMlTjogJXIgLSAlc1xyXG4iDQo+ID4gKyNzdHJpbmcgU1RSX0dQVF9OT1RfRU1QVFkgICAgICAg ICNsYW5ndWFnZSBlbi1VUyAiJUglcyVOOg0KPiBXQVJOSU5HISEhDQo+ID4gVGhpcyBkZXZpY2Ug aGFzIHZhbGlkIEdQVCBwYXJ0aXRpb24gdGFibGVzIVxyXG4iDQo+ID4gKyNzdHJpbmcgU1RSX0dQ VF9DTEVBUl9TVVJFICAgICAgICNsYW5ndWFnZSBlbi1VUyAiQXJlIHlvdSBzdXJlIHlvdQ0KPiB3 YW50DQo+ID4gdG8gY2xlYXIgdGhlIEdQVCB0YWJsZXMgb24gdGhpcyBkZXZpY2U/ICVCWSVOZXMs ICVCTiVObyAiDQo+ID4gKyNzdHJpbmcgU1RSX0dQVF9BQlNPTFVURUxZX1NVUkUgICNsYW5ndWFn ZSBlbi1VUyAiXHJcbkFyZSB5b3UgKioqDQo+ID4gQUJTT0xVVEVMWSBTVVJFICoqKiB5b3Ugd2Fu dCB0byBwZXJmb3JtIHRoaXMNCj4gPiBvcGVyYXRpb24gPyAlQlklTmVzLCAlQk4lTm8gIg0KPiA+ ICsjc3RyaW5nIFNUUl9HUFRfRk9STUFUX1dBUk5JTkcgICAjbGFuZ3VhZ2UgZW4tVVMgIiVIJXMl TjoNCj4gPiBXQVJOSU5HISEhIEZvcm1hdHRpbmcgb2YgdGhpcyBwYXJ0aXRpb24gd2lsbCBkZXN0 cm95IGFsbCBkYXRhIG9uIGl0IVxyXG4iDQo+ID4gKyNzdHJpbmcgU1RSX0dQVF9GT1JNQVRfU1VS RSAgICAgICNsYW5ndWFnZSBlbi1VUyAiQXJlIHlvdSBzdXJlIHlvdQ0KPiA+IHdhbnQgdG8gZm9y bWF0IHRoaXMgcGFydGl0aW9uIHRvIEZBVDMyIGFuZCBkZXN0cm95IGFsbCBkYXRhIG9uDQo+ID4g aXQgPyAlQlklTmVzLCAlQk4lTm8gIg0KPiA+ICsjc3RyaW5nIFNUUl9HUFRfREVMRVRFX1dBUk5J TkcgICAjbGFuZ3VhZ2UgZW4tVVMgIiVIJXMlTjoNCj4gRGVsZXRpbmcNCj4gPiBvZiB0aGlzIHBh cnRpdGlvbiB3aWxsIG1ha2UgZGF0YSBvbiBpdCB1bnJlYWNoYWJsZSFcclxuIg0KPiA+ICsjc3Ry aW5nIFNUUl9HUFRfUkVBRF9CT1VOREFSWSAgICAjbGFuZ3VhZ2UgZW4tVVMgIiVIJXMlTjoNCj4g QXR0ZW1wdA0KPiA+IHRvIHJlYWQgYmV5b25kICVIJXMlTiBwYXJ0aXRpb24gYm91bmRhcnkgKGNh biByZWFkIHVwdG8gJWxsdSBieXRlcw0KPiBmcm9tDQo+ID4gdGhlIGdpdmVuIG9mZnNldCwgcmVx dWVzdGVkICVsbHUgYnl0ZXMpXHJcbiINCj4gPiArI3N0cmluZyBTVFJfR1BUX1dSSVRFX0JPVU5E QVJZICAgI2xhbmd1YWdlIGVuLVVTICIlSCVzJU46DQo+ID4gQXR0ZW1wdCB0byB3cml0ZSBiZXlv bmQgJUglcyVOIHBhcnRpdGlvbiBib3VuZGFyeSAoY2FuIHdyaXRlIHVwdG8gJWxsdQ0KPiA+IGJ5 dGVzIGZyb20gdGhlIGdpdmVuIG9mZnNldCwgcmVxdWVzdGVkICVsbHUgYnl0ZXMpXHJcbiINCj4g PiArI3N0cmluZyBTVFJfR1BUX0ZJTEVfV1JJVEVfRkFJTCAgI2xhbmd1YWdlIGVuLVVTICIlSCVz JU46IEZhaWxlZCB0bw0KPiA+IHdyaXRlIHRvIHRoZSBmaWxlICVzLCBlcnJvciAlclxyXG4iDQo+ ID4gKw0KPiA+ICsjc3RyaW5nIFNUUl9HUFRfV1JJVEVfT0sgICAgICAgICAjbGFuZ3VhZ2UgZW4t VVMgIldyaXR0ZW4gJWxsdSBieXRlcyBhdA0KPiA+IG9mZnNldCAweCV4LCBwYXJ0aXRpb24gJXMu IEVsYXBzZWQgdGltZSAlbGx1bXMgKCVsbHUgS0IvcylcclxuIg0KPiA+ICsjc3RyaW5nIFNUUl9H UFRfUkVBRF9PSyAgICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgIlJlYWQgJWxsdSBieXRlcyBmcm9t DQo+ID4gb2Zmc2V0IDB4JXgsIHBhcnRpdGlvbiAlcy4gRWxhcHNlZCB0aW1lICVsbHVtcyAoJWxs dSBLQi9zKVxyXG4iDQo+ID4gKyNzdHJpbmcgU1RSX0dQVF9SRUFERklMRV9PSyAgICAgICNsYW5n dWFnZSBlbi1VUyAiUmVhZCAlbGx1IGJ5dGVzIGZyb20NCj4gPiBvZmZzZXQgMHgleCwgcGFydGl0 aW9uICVzIGludG8gZmlsZSAlcy4gRWxhcHNlZCB0aW1lICVsbHVtcyAoJWxsdSBLQi9zKVxyXG4i DQo+ID4gKyNzdHJpbmcgU1RSX0dQVF9MSVNUX0RFVlMgICAgICAgICNsYW5ndWFnZSBlbi1VUyAi ICVIJSs2cyVOICAlKzhzICAiDQo+ID4gKw0KPiA+ICsjc3RyaW5nIFNUUl9HRVRfSEVMUF9HUFQg ICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgIiINCj4gPiArIi5USCBncHQgMCAiR1BUIHBhcnRpdGlv biBtYW5hZ2VyLiJcclxuIg0KPiA+ICsiLlNIIE5BTUVcclxuIg0KPiA+ICsiTWFuYWdlcyBHUFQg cGFydGl0aW9ucyBvbiBhIGJsb2NrIGRldmljZS5cclxuIg0KPiA+ICsiLlNIIFNZTk9QU0lTXHJc biINCj4gPiArIiBcclxuIg0KPiA+ICsiZ3B0IFtyZWFkIHwgcmVhZGZpbGUgfCB3cml0ZSB8IHdy aXRlZmlsZSB8IGxpc3QgfCBpbmZvIHwgY2xlYXIgfFxyXG4iDQo+ID4gKyIgICAgIGNyZWF0ZSB8 IGRlbGV0ZSB8IHJlbmFtZSB8IHNldGF0dHJzIHwgc3luYyB8IGZhdGZvcm1hdCB8IC10eXBlc2lu Zm8gfCAtDQo+IHllc10NCj4gPiBcclxuIg0KPiA+ICsiVGhpcyBpcyBhIGNvbXBsZXggdXRpbGl0 eS4gUGxlYXNlIHNlZSBleGFtcGxlcyBmb3IgdXNhZ2UgaW5mb1xyXG4iDQo+ID4gKyIuU0ggT1BU SU9OU1xyXG4iDQo+ID4gKyIgXHJcbiINCj4gPiArIiAgIERldmljZSAgICAgICAgLSBCbG9jayBk ZXZpY2UgdG8gYmUgdXNlZCBmb3IgdGhlIG9wZXJhdGlvblxyXG4iDQo+ID4gKyIgICBMZW5ndGgg ICAgICAgIC0gTnVtYmVyIG9mIGJ5dGVzIHRvIHRyYW5zZmVyIChmb3IgcmVhZC93cml0ZSkpXHJc biINCj4gPiArIiAgIEFkZHJlc3MgICAgICAgLSBBZGRyZXNzIGluIFJBTSB0byBzdG9yZS9sb2Fk IGRhdGFcclxuIg0KPiA+ICsiICAgT2Zmc2V0ICAgICAgICAtIE9mZnNldCAoaW4gYmxvY2tzKSBm cm9tIGJlZ2dpbmluZyBvZiB0aGUgc3BlY2lmaWUgcGFydGl0aW9uIHRvDQo+ID4gc3RvcmUvbG9h ZCBkYXRhXHJcbiINCj4gPiArIiAgIEZpbGVQYXRoICAgICAgLSBQYXRoIHRvIGZpbGUgdG8gcmVh ZCBkYXRhIGludG8gb3Igd3JpdGUvdXBkYXRlIGRhdGENCj4gZnJvbVxyXG4iDQo+ID4gKyIgICAt eWVzICAgICAgICAgIC0gQXNzdW1lIHllcyBmb3IgYWxsIHF1ZXJpZXMsIGRvIG5vdCBwcm9tcHRc clxuXHJcbiINCj4gPiArIi5TSCBFWEFNUExFU1xyXG4iDQo+ID4gKyIgXHJcbiINCj4gPiArIkVY QU1QTEVTOlxyXG4iDQo+ID4gKyJHZXQgdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIHBhcnRpdGlvbmFi bGUgYmxvY2sgZGV2aWNlKHMpXHJcbiINCj4gPiArIiAgZ3B0ICVIbGlzdCVOXHJcbiINCj4gPiAr IkdldCBpbmZvIG9uIHRoZSBwYXJ0aWN1bGFyIHBhcnRpdGlvbiB3aXRoIG5hbWUgUGFydGl0aW9u TmFtZSBvbiB0aGUNCj4gYmxvY2sNCj4gPiBkZXZpY2UgYmxrMDpcclxuIg0KPiA+ICsiICBncHQg JUhpbmZvJU4gYmxrMDogUGFydGl0aW9uTmFtZVxyXG4iDQo+ID4gKyJMaXN0IGFsbCBhdmFpbGFi bGUgR1BUIHBhcnRpdGlvbnMgb24gdGhlIGJsb2NrIGRldmljZSBibGswOlxyXG4iDQo+ID4gKyIg IGdwdCBsaXN0IGJsazA6XHJcbiINCj4gPiArIk5vdGU6IHRoZSBvcmRpbmFsIG51bWJlciBzaG93 biBieSB0aGlzIGNvbW1hbmQgY2FuIGJlIHVzZWQgYXMgYQ0KPiA+IHBhcnRpdGlvbiBuYW1lIGlu IGFueSBjb21tYW5kIHJlcXVpcmluZyBwYXJ0aXRpb24gbmFtZVxyXG4iDQo+ID4gKyJUaHVzIGdw dCBpbmZvIGJsazA6IDEgaXMgdmFsaWQgaWYgdGhlcmUgaXMgYSBwYXJ0aXRpb24gd2l0aCBvcmRp bmFsIDEgcHJlc2VudCBpbg0KPiA+IHRoZSBvdXRwdXQgb2YgZ3B0IGxpc3QgY29tbWFuZFxyXG4i DQo+ID4gKyJHZXQgaW5mb3JtYXRpb24gb24gYWxsIHJlY29nbml6ZWQgcGFydGl0aW9uIHR5cGVz XHJcbiINCj4gPiArIiAgZ3B0ICVIdHlwZXNpbmZvJU5cclxuIg0KPiA+ICsiQ2xlYXIgcGFydGl0 aW9ucyBpbmZvcm1hdGlvbiBhbmQgaW5zdGFsbCBlbXB0eSBHUFQgdGFibGVzIGZvciBhIGJsb2Nr DQo+IGRldmljZQ0KPiA+IGJsazA6XHJcbiINCj4gPiArIiAgZ3B0ICVIY2xlYXIlTiBibGswOlxy XG4iDQo+ID4gKyJDcmVhdGUgYSBHUFQgcGFydGl0aW9uIHdpdGggbmFtZSBQYXJ0aXRpb25OYW1l IGFuZCB0eXBlIEVGSSBTWVNURU0gaW4NCj4gPiB0aGUgR1BUIHRhYmxlLCB1c2luZyB0aGUgbmV4 dCBhdmFpbGFibGUgTEJBLCB3aXRoIHNpemVcclxuIg0KPiA+ICsiNjRNaUIsIHdpdGggc3lzdGVt IGF0dHJpYnV0ZSwgb24gYmxvY2sgZGV2aWNlIGJsazA6XHJcbiINCj4gPiArIiAgZ3B0ICVIY3Jl YXRlJU4gYmxrMDogUGFydGl0aW9uTmFtZSAwIDY0IDEgLXR5cGUgMFxyXG4iDQo+ID4gKyJTYW1l IGFzIGFib3ZlLCBidXQgbm93IHRoZSBwYXJ0aXRpb24gdHlwZSBpcyBub3Qga25vd24gdG8gdGhl IGdwdCB1dGlsaXR5LA0KPiA+IHNvIHVzZSBzb21lIEdVSUQga25vd24gdG8gYSAzcmQgcGFydHlc clxuIg0KPiA+ICsiICBncHQgY3JlYXRlIGJsazA6IFBhcnRpdGlvbk5hbWUgMCA2NCAxIC10eXBl IDQ0NTgxQTRBLUM4MzQtRDFBNi0yNjAyLQ0KPiA+IDlENTIyQThGMjMwN1xyXG4iDQo+ID4gKyJS ZW5hbWUgdGhlIEdQVCBwYXJ0aXRpb24gUGFydGl0aW9uTmFtZSBvbiBibGswOiB0bw0KPiA+IE5l d1BhcnRpdGlvbk5hbWVcclxuIg0KPiA+ICsiICBncHQgJUhyZW5hbWUlTiBibGswOiBQYXJ0aXRp b25OYW1lIE5ld1BhcnRpdGlvbk5hbWVcclxuIg0KPiA+ICsiSGF2ZSB0aGUgUGFydGl0aW9uRHhl IGRyaXZlciB0byByZS1yZWFkIEdQVCB0YWJsZXMgb24gYSBibG9jayBkZXZpY2UNCj4gPiBibGsw OihhZnRlciB0aGV5IHdlcmUgdXBkYXRlZCB3aXRoIGdwdCB1dGlsaXR5KVxyXG4iDQo+ID4gKyIg IGdwdCAlSHN5bmMlTiBibGswOlxyXG4iDQo+ID4gKyJSZWFkIDRLIGZyb20gYmxvY2sgb2Zmc2V0 IDB4MGUwMDAgaW4gUGFydGl0aW9uIG5hbWVkIFBhcnRpdGlvbk5hbWUgb2YNCj4gPiB0aGUgYmxv Y2sgZGV2aWNlIGF0IGJsazA6IGludG8gUkFNIGF0IGFkZHJlc3MgMHgxMDAwMDBcclxuIg0KPiA+ ICsiICBncHQgJUhyZWFkJU4gYmxrMDogMHgxMDAwMDAgUGFydGl0aW9uTmFtZSAweGUwMDAgNDA5 NlxyXG4iDQo+ID4gKyJXcml0ZSA1MTIgYnl0ZXMgZnJvbSAweDIwMDAwMCBhdCBSQU0gaW50byB0 aGUgYmxvY2sgZGV2aWNlIGF0IGJsazA6DQo+ID4gcGFydGl0aW9uIFBhcnRpdGlvbk5hbWUgYXQg b2Zmc2V0IDB4MTAwMFxyXG4iDQo+ID4gKyIgIGdwdCAlSHdyaXRlJU4gYmxrMDogMHgyMDAwMDAg UGFydGl0aW9uTmFtZSAweDEwMDAgNTEyXHJcbiINCj4gPiArIlJlYWQgMHgzMDAwIGJ5dGVzIGZy b20gMHgwIG9mZnNldCBvZiBQYXJ0aXRpb24gUGFydGl0aW9uTmFtZSBhdCB0aGUNCj4gYmxvY2sN Cj4gPiBkZXZpY2UgYmxrMDogaW50byBmaWxlIGZzMjpmaWxlLmJpblxyXG4iDQo+ID4gKyIgIGdw dCAlSHJlYWRmaWxlJU4gYmxrMDogZnMyOmZpbGUuYmluIFBhcnRpdGlvbk5hbWUgMHgwIDB4MzAw MFxyXG4iDQo+ID4gKyJXcml0ZSBjb250ZW50cyBvZiBmaWxlIGZzMjpmaWxlLmJpbiBpbnRvIHBh cnRpdGlvbiBuYW1lZCBQYXJ0aXRpb25OYW1lDQo+IHdpdGgNCj4gPiBvZmZzZXQgKGluIGxiYSkg MHgxMCBvbiBhIGJsb2NrIGRldmljZSBibGswOlxyXG4iDQo+ID4gKyIgIGdwdCAlSHdyaXRlZmls ZSVOIGJsazA6IGZzMjpmaWxlLmJpbiBQYXJ0aXRpb25OYW1lIDB4MTBcclxuIg0KPiA+ICsiRkFU IEZvcm1hdCB0aGUgcGFydGl0aW9uIFBhcnRpdGlvbk5hbWUgb24gYmxvY2sgZGV2aWNlIGJsazA6 XHJcbiINCj4gPiArIiAgZ3B0ICVIZmF0Zm9ybWF0JU4gYmxrMDogUGFydGl0aW9uTmFtZVxyXG4i DQo+ID4gKyJGQVQgRm9ybWF0IHRoZSB3aG9sZSBkZXZpY2UgYmxrMDpcclxuIg0KPiA+ICsiICBn cHQgZmF0Zm9ybWF0IGJsazA6XHJcbiINCj4gPiArDQo+ID4gKyIuU0ggUkVUVVJOVkFMVUVTXHJc biINCj4gPiArIiBcclxuIg0KPiA+ICsiUkVUVVJOIFZBTFVFUzpcclxuIg0KPiA+ICsiICBTSEVM TF9TVUNDRVNTICAgICAgICAgVGhlIGFjdGlvbiB3YXMgY29tcGxldGVkIGFzIHJlcXVlc3RlZC5c clxuIg0KPiA+ICsiICBTcGVjaWZpYyBTaGVsbCBlcnJvciAgRXJyb3Igd2hpbGUgcHJvY2Vzc2lu ZyBjb21tYW5kXHJcbiINCj4gPiBkaWZmIC0tZ2l0IGEvU2hlbGxQa2cvU2hlbGxQa2cuZGVjIGIv U2hlbGxQa2cvU2hlbGxQa2cuZGVjDQo+ID4gaW5kZXggMzlmODAxMmI5OGMxLi41Mzc0YTJhNjJk NWYgMTAwNjQ0DQo+ID4gLS0tIGEvU2hlbGxQa2cvU2hlbGxQa2cuZGVjDQo+ID4gKysrIGIvU2hl bGxQa2cvU2hlbGxQa2cuZGVjDQo+ID4gQEAgLTU2LDYgKzU2LDcgQEAgW0d1aWRzXQ0KPiA+ICAg IGdTaGVsbE5ldHdvcmsySGlpR3VpZCAgICAgICAgICAgPSB7MHgxNzRiMmI1LCAweGY1MDUsIDB4 NGIxMiwgezB4YWEsIDB4NjAsDQo+ID4gMHg1OSwgMHhkZiwgMHhmOCwgMHhkNiwgMHhlYSwgMHgz N319DQo+ID4gICAgZ1NoZWxsVGZ0cEhpaUd1aWQgICAgICAgICAgICAgICA9IHsweDczOGE5MzE0 LCAweDgyYzEsIDB4NDU5MiwgezB4OGYsIDB4ZjcsIDB4YzEsDQo+ID4gMHhiZCwgMHhmMSwgMHhi MiwgMHgwZSwgMHhkNH19DQo+ID4gICAgZ1NoZWxsQmNmZ0hpaUd1aWQgICAgICAgICAgICAgICA9 IHsweDVmNWY2MDVkLCAweDE1ODMsIDB4NGEyZCwgezB4YTYsIDB4YjIsIDB4ZWIsDQo+ID4gMHgx MiwgMHhkYSwgMHhiNCwgMHhhMiwgMHhiNn19DQo+ID4gKyAgZ1NoZWxsR3B0SGlpR3VpZCAgICAg ICAgICAgICAgICA9IHsweDVhMWVkNzM5LCAweDVlZjEsIDB4NDI5YSwgezB4OGQsIDB4ZjgsIDB4 MjgsDQo+ID4gMHhjOSwgMHg5MiwgMHg2NCwgMHhkNywgMHhmOH19DQo+ID4NCj4gPiAgW1Byb3Rv Y29sc10NCj4gPiAgICBnRWZpU2hlbGxQcm90b2NvbEd1aWQgICAgICAgICAgICAgICA9IHsweDYz MDJkMDA4LCAweDdmOWIsIDB4NGYzMCwgezB4ODcsIDB4YWMsDQo+ID4gMHg2MCwgMHhjOSwgMHhm ZSwgMHhmNSwgMHhkYSwgMHg0ZX19DQo+ID4gZGlmZiAtLWdpdCBhL1NoZWxsUGtnL1NoZWxsUGtn LmRzYyBiL1NoZWxsUGtnL1NoZWxsUGtnLmRzYw0KPiA+IGluZGV4IDgwOWJkNDIyMGFmMi4uOTg0 YzFkMGFkNDhiIDEwMDY0NA0KPiA+IC0tLSBhL1NoZWxsUGtnL1NoZWxsUGtnLmRzYw0KPiA+ICsr KyBiL1NoZWxsUGtnL1NoZWxsUGtnLmRzYw0KPiA+IEBAIC04OSw2ICs4OSw3IEBAIFtDb21wb25l bnRzXQ0KPiA+DQo+ID4NCj4gU2hlbGxQa2cvTGlicmFyeS9VZWZpU2hlbGxMZXZlbDJDb21tYW5k c0xpYi9VZWZpU2hlbGxMZXZlbDJDb21tYW5kc0xpYg0KPiA+IC5pbmYNCj4gPg0KPiA+DQo+IFNo ZWxsUGtnL0xpYnJhcnkvVWVmaVNoZWxsTGV2ZWwzQ29tbWFuZHNMaWIvVWVmaVNoZWxsTGV2ZWwz Q29tbWFuZHNMaWINCj4gPiAuaW5mDQo+ID4NCj4gPg0KPiBTaGVsbFBrZy9MaWJyYXJ5L1VlZmlT aGVsbERyaXZlcjFDb21tYW5kc0xpYi9VZWZpU2hlbGxEcml2ZXIxQ29tbWFuZHNMDQo+ID4gaWIu aW5mDQo+ID4gKw0KPiBTaGVsbFBrZy9MaWJyYXJ5L1VlZmlTaGVsbEdwdENvbW1hbmRMaWIvVWVm aVNoZWxsR3B0Q29tbWFuZExpYi5pbmYNCj4gPg0KPiA+DQo+IFNoZWxsUGtnL0xpYnJhcnkvVWVm aVNoZWxsSW5zdGFsbDFDb21tYW5kc0xpYi9VZWZpU2hlbGxJbnN0YWxsMUNvbW1hbmRzTGkNCj4g PiBiLmluZg0KPiA+DQo+ID4NCj4gU2hlbGxQa2cvTGlicmFyeS9VZWZpU2hlbGxEZWJ1ZzFDb21t YW5kc0xpYi9VZWZpU2hlbGxEZWJ1ZzFDb21tYW5kcw0KPiA+IExpYi5pbmYNCj4gPg0KPiA+DQo+ IFNoZWxsUGtnL0xpYnJhcnkvVWVmaVNoZWxsTmV0d29yazFDb21tYW5kc0xpYi9VZWZpU2hlbGxO ZXR3b3JrMUNvbW0NCj4gPiBhbmRzTGliLmluZg0KPiA+IEBAIC0xMTksNiArMTIwLDkgQEAgW0Nv bXBvbmVudHNdDQo+ID4gICFpZmRlZiAkKElOQ0xVREVfVEZUUF9DT01NQU5EKQ0KPiA+DQo+ID4N Cj4gTlVMTHxTaGVsbFBrZy9MaWJyYXJ5L1VlZmlTaGVsbFRmdHBDb21tYW5kTGliL1VlZmlTaGVs bFRmdHBDb21tYW5kTGliDQo+ID4gLmluZg0KPiA+ICAhZW5kaWYgIyQoSU5DTFVERV9URlRQX0NP TU1BTkQpDQo+ID4gKyFpZmRlZiAkKElOQ0xVREVfR1BUX0NPTU1BTkQpDQo+ID4gKw0KPiA+DQo+ IE5VTEx8U2hlbGxQa2cvTGlicmFyeS9VZWZpU2hlbGxHcHRDb21tYW5kTGliL1VlZmlTaGVsbEdw dENvbW1hbmRMaWIuDQo+ID4gaW5mDQo+ID4gKyFlbmRpZiAjJChJTkNMVURFX0dQVF9DT01NQU5E KQ0KPiA+ICAhZW5kaWYgIyQoTk9fU0hFTExfUFJPRklMRVMpDQo+ID4gICAgfQ0KPiA+DQo+ID4g LS0NCj4gPiAxLjkuMQ0KPiANCj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX18NCj4gZWRrMi1kZXZlbCBtYWlsaW5nIGxpc3QNCj4gZWRrMi1kZXZlbEBsaXN0 cy4wMS5vcmcNCj4gaHR0cHM6Ly9saXN0cy4wMS5vcmcvbWFpbG1hbi9saXN0aW5mby9lZGsyLWRl dmVsDQo=