From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) (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 AE0C081EAF for ; Wed, 14 Dec 2016 23:15:12 -0800 (PST) Received: from orsmga002.jf.intel.com ([10.7.209.21]) by orsmga101.jf.intel.com with ESMTP; 14 Dec 2016 23:14:58 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.33,350,1477983600"; d="scan'208";a="18375825" Received: from fmsmsx108.amr.corp.intel.com ([10.18.124.206]) by orsmga002.jf.intel.com with ESMTP; 14 Dec 2016 23:14:57 -0800 Received: from fmsmsx117.amr.corp.intel.com (10.18.116.17) by FMSMSX108.amr.corp.intel.com (10.18.124.206) with Microsoft SMTP Server (TLS) id 14.3.248.2; Wed, 14 Dec 2016 23:14:57 -0800 Received: from shsmsx104.ccr.corp.intel.com (10.239.4.70) by fmsmsx117.amr.corp.intel.com (10.18.116.17) with Microsoft SMTP Server (TLS) id 14.3.248.2; Wed, 14 Dec 2016 23:14:56 -0800 Received: from shsmsx103.ccr.corp.intel.com ([169.254.4.11]) by SHSMSX104.ccr.corp.intel.com ([169.254.5.9]) with mapi id 14.03.0248.002; Thu, 15 Dec 2016 15:14:54 +0800 From: "Wu, Jiaxin" To: "Fu, Siyuan" , "edk2-devel@lists.01.org" CC: "Ye, Ting" , "Zhang, Lubo" , "Long, Qin" , Thomas Palmer Thread-Topic: [Patch 07/10] NetworkPkg/HttpDxe: HTTPS support over IPv4 and IPv6 Thread-Index: AQHSVdyMjuJyc/46g0WSOotLeZoXI6EHxxWAgADRKyA= Date: Thu, 15 Dec 2016 07:14:53 +0000 Message-ID: <895558F6EA4E3B41AC93A00D163B72741627F514@SHSMSX103.ccr.corp.intel.com> References: <1481700859-76060-1-git-send-email-jiaxin.wu@intel.com> <1481700859-76060-8-git-send-email-jiaxin.wu@intel.com> In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiYTA2NDlhODUtZmU4Ni00NjlhLTk5YzUtNDVhZWM3MWI0YmFmIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX0lDIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE1LjkuNi42IiwiVHJ1c3RlZExhYmVsSGFzaCI6IkFub3dFdkM5QXFZZ1wvSnR1RjQyQ25kbEd3ZjZleXNSdzE4YWErdk5wVG5rPSJ9 x-ctpclassification: CTP_IC x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Subject: Re: [Patch 07/10] NetworkPkg/HttpDxe: HTTPS support over IPv4 and IPv6 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: Thu, 15 Dec 2016 07:15:12 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 R29vZCBzdWdnZXN0aW9uLCBJIHdpbGwgY2hhbmdlIHRoZSBmbGFnIHRvICJodHRwczovLyIgYmVm b3JlIGNvbW1pdCB0aGUgcGF0Y2guDQoNCkV2ZW4gd2UgaGF2ZSBhIGxpYnJhcnkgdG8gZ2V0IHRo ZSBVUkkgc2NoZW1lLCB3ZSBzdGlsbCBuZWVkIGNoZWNrIHdoZXRoZXIgaXQncyBodHRwIG9yIGh0 dHBzLg0KDQpUaGFua3MsDQpKaWF4aW4NCg0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0t DQo+IEZyb206IEZ1LCBTaXl1YW4NCj4gU2VudDogVGh1cnNkYXksIERlY2VtYmVyIDE1LCAyMDE2 IDEwOjM5IEFNDQo+IFRvOiBXdSwgSmlheGluIDxqaWF4aW4ud3VAaW50ZWwuY29tPjsgZWRrMi1k ZXZlbEBsaXN0cy4wMS5vcmcNCj4gQ2M6IFllLCBUaW5nIDx0aW5nLnllQGludGVsLmNvbT47IFpo YW5nLCBMdWJvIDxsdWJvLnpoYW5nQGludGVsLmNvbT47DQo+IExvbmcsIFFpbiA8cWluLmxvbmdA aW50ZWwuY29tPjsgVGhvbWFzIFBhbG1lciA8dGhvbWFzLnBhbG1lckBocGUuY29tPg0KPiBTdWJq ZWN0OiBSRTogW1BhdGNoIDA3LzEwXSBOZXR3b3JrUGtnL0h0dHBEeGU6IEhUVFBTIHN1cHBvcnQg b3ZlciBJUHY0DQo+IGFuZCBJUHY2DQo+IA0KPiBIaSwgSmlheGluDQo+IA0KPiBJbiBmdW5jdGlv biBJc0h0dHBzVXJsKCksIEkgc3VnZ2VzdCB0byBzZWFyY2ggc3RyaW5nICJodHRwczovLyIgaW5z dGVhZCBvZiBvbmx5DQo+ICJodHRwcyIsIGluIGNhc2Ugb2Ygc29tZSBpbmNvcnJlY3Qgc2NoZW1l IGxpa2UgImh0dHBzYWJjOi8vIi4NCj4gSG93ZXZlciwgc2luY2UgdGhlcmUgaXMgYWxyZWFkeSBj b2RlIHRvIHBhcnNlIHRoZSBVUkwgYnkgdXNpbmcNCj4gSHR0cFBhcnNlVXJsKCksIHRoZSBzY2hl bWUgc2hvdWxkIGFscmVhZHkgYmVlbiBrbm93biBieSB0aGUgSHR0cCB1cmwNCj4gcGFyc2VyLCBJ IHRoaW5rIGl0IGJldHRlciB0byBhZGQgYSBuZXcgZnVuY3Rpb24gdG8gdGhlIEh0dHBMaWIgbGlr ZQ0KPiBIdHRwVXJsR2V0U2NoZW1lKCkuDQo+IA0KPiBSZXZpZXdlZC1ieTogRnUgU2l5dWFuIDxz aXl1YW4uZnVAaW50ZWwuY29tPg0KPiANCj4gDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0t DQo+IEZyb206IFd1LCBKaWF4aW4NCj4gU2VudDogMjAxNuW5tDEy5pyIMTTml6UgMTU6MzQNCj4g VG86IGVkazItZGV2ZWxAbGlzdHMuMDEub3JnDQo+IENjOiBZZSwgVGluZyA8dGluZy55ZUBpbnRl bC5jb20+OyBGdSwgU2l5dWFuIDxzaXl1YW4uZnVAaW50ZWwuY29tPjsgWmhhbmcsDQo+IEx1Ym8g PGx1Ym8uemhhbmdAaW50ZWwuY29tPjsgTG9uZywgUWluIDxxaW4ubG9uZ0BpbnRlbC5jb20+OyBU aG9tYXMNCj4gUGFsbWVyIDx0aG9tYXMucGFsbWVyQGhwZS5jb20+OyBXdSwgSmlheGluIDxqaWF4 aW4ud3VAaW50ZWwuY29tPg0KPiBTdWJqZWN0OiBbUGF0Y2ggMDcvMTBdIE5ldHdvcmtQa2cvSHR0 cER4ZTogSFRUUFMgc3VwcG9ydCBvdmVyIElQdjQgYW5kDQo+IElQdjYNCj4gDQo+IFRoaXMgcGF0 Y2ggaXMgdXNlZCB0byBlbmFibGUgSFRUUFMgZmVhdHVyZS4gSHR0cER4ZSBkcml2ZXINCj4gd2ls bCBjb25zdW1lIFRsc0R4ZSBkcml2ZXIuIEl0IGNhbiBib3RoIHN1cHBvcnQgaHR0cCBhbmQgaHR0 cHMNCj4gZmVhdHVyZSwgdGhhdOKAmXMgZGVwZW5kZWQgb24gdGhlIGluZm9ybWF0aW9uIG9mIFVS TCwgdGhlIEhUVFANCj4gaW5zdGFuY2UgY2FuIGJlIGFibGUgdG8gZGV0ZXJtaW5lIHdoZXRoZXIg dG8gdXNlIGh0dHAgb3IgaHR0cHMuDQo+IA0KPiBDYzogWWUgVGluZyA8dGluZy55ZUBpbnRlbC5j b20+DQo+IENjOiBGdSBTaXl1YW4gPHNpeXVhbi5mdUBpbnRlbC5jb20+DQo+IENjOiBaaGFuZyBM dWJvIDxsdWJvLnpoYW5nQGludGVsLmNvbT4NCj4gQ2M6IExvbmcgUWluIDxxaW4ubG9uZ0BpbnRl bC5jb20+DQo+IENjOiBUaG9tYXMgUGFsbWVyIDx0aG9tYXMucGFsbWVyQGhwZS5jb20+DQo+IENv bnRyaWJ1dGVkLXVuZGVyOiBUaWFub0NvcmUgQ29udHJpYnV0aW9uIEFncmVlbWVudCAxLjANCj4g U2lnbmVkLW9mZi1ieTogV3UgSmlheGluIDxqaWF4aW4ud3VAaW50ZWwuY29tPg0KPiAtLS0NCj4g IE5ldHdvcmtQa2cvSHR0cER4ZS9IdHRwRHJpdmVyLmggICB8ICAgMTAgKy0NCj4gIE5ldHdvcmtQ a2cvSHR0cER4ZS9IdHRwRHhlLmluZiAgICB8ICAgMTIgKy0NCj4gIE5ldHdvcmtQa2cvSHR0cER4 ZS9IdHRwSW1wbC5jICAgICB8ICAyNTIgKysrKystDQo+ICBOZXR3b3JrUGtnL0h0dHBEeGUvSHR0 cFByb3RvLmMgICAgfCAgNDY0ICsrKysrKystLS0NCj4gIE5ldHdvcmtQa2cvSHR0cER4ZS9IdHRw UHJvdG8uaCAgICB8ICAgNjUgKy0NCj4gIE5ldHdvcmtQa2cvSHR0cER4ZS9IdHRwc1N1cHBvcnQu YyB8IDE2OTINCj4gKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKw0KPiAgTmV0 d29ya1BrZy9IdHRwRHhlL0h0dHBzU3VwcG9ydC5oIHwgIDI2MCArKysrKysNCj4gIDcgZmlsZXMg Y2hhbmdlZCwgMjYwMSBpbnNlcnRpb25zKCspLCAxNTQgZGVsZXRpb25zKC0pDQo+ICBjcmVhdGUg bW9kZSAxMDA2NDQgTmV0d29ya1BrZy9IdHRwRHhlL0h0dHBzU3VwcG9ydC5jDQo+ICBjcmVhdGUg bW9kZSAxMDA2NDQgTmV0d29ya1BrZy9IdHRwRHhlL0h0dHBzU3VwcG9ydC5oDQo+IA0KPiBkaWZm IC0tZ2l0IGEvTmV0d29ya1BrZy9IdHRwRHhlL0h0dHBEcml2ZXIuaA0KPiBiL05ldHdvcmtQa2cv SHR0cER4ZS9IdHRwRHJpdmVyLmgNCj4gaW5kZXggZmEyMzcyYy4uOTNhNDEyYSAxMDA2NDQNCj4g LS0tIGEvTmV0d29ya1BrZy9IdHRwRHhlL0h0dHBEcml2ZXIuaA0KPiArKysgYi9OZXR3b3JrUGtn L0h0dHBEeGUvSHR0cERyaXZlci5oDQo+IEBAIC0yMiwxMCArMjIsMTEgQEANCj4gDQo+ICAvLw0K PiAgLy8gTGlicmFyaWVzDQo+ICAvLw0KPiAgI2luY2x1ZGUgPExpYnJhcnkvVWVmaUJvb3RTZXJ2 aWNlc1RhYmxlTGliLmg+DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9VZWZpUnVudGltZVNlcnZpY2Vz VGFibGVMaWIuaD4NCj4gICNpbmNsdWRlIDxMaWJyYXJ5L01lbW9yeUFsbG9jYXRpb25MaWIuaD4N Cj4gICNpbmNsdWRlIDxMaWJyYXJ5L0Jhc2VMaWIuaD4NCj4gICNpbmNsdWRlIDxMaWJyYXJ5L1Vl ZmlMaWIuaD4NCj4gICNpbmNsdWRlIDxMaWJyYXJ5L0RlYnVnTGliLmg+DQo+ICAjaW5jbHVkZSA8 TGlicmFyeS9OZXRMaWIuaD4NCj4gQEAgLTQ4LDE3ICs0OSwyMyBAQA0KPiAgI2luY2x1ZGUgPFBy b3RvY29sL1RjcDYuaD4NCj4gICNpbmNsdWRlIDxQcm90b2NvbC9EbnM0Lmg+DQo+ICAjaW5jbHVk ZSA8UHJvdG9jb2wvRG5zNi5oPg0KPiAgI2luY2x1ZGUgPFByb3RvY29sL0lwNENvbmZpZzIuaD4N Cj4gICNpbmNsdWRlIDxQcm90b2NvbC9JcDZDb25maWcuaD4NCj4gKyNpbmNsdWRlIDxQcm90b2Nv bC9UbHMuaD4NCj4gKyNpbmNsdWRlIDxQcm90b2NvbC9UbHNDb25maWcuaD4NCj4gDQo+IC0NCj4g KyNpbmNsdWRlIDxHdWlkL0ltYWdlQXV0aGVudGljYXRpb24uaD4NCj4gIC8vDQo+ICAvLyBQcm9k dWNlZCBQcm90b2NvbHMNCj4gIC8vDQo+ICAjaW5jbHVkZSA8UHJvdG9jb2wvSHR0cC5oPg0KPiAN Cj4gKyNpbmNsdWRlIDxHdWlkL1Rsc0F1dGhlbnRpY2F0aW9uLmg+DQo+ICsNCj4gKyNpbmNsdWRl IDxJbmR1c3RyeVN0YW5kYXJkL1RsczEuaD4NCj4gKw0KPiAgLy8NCj4gIC8vIERyaXZlciBWZXJz aW9uDQo+ICAvLw0KPiAgI2RlZmluZSBIVFRQX0RSSVZFUl9WRVJTSU9OIDB4YQ0KPiANCj4gQEAg LTc3LDEwICs4NCwxMSBAQCBleHRlcm4gRUZJX0hUVFBfVVRJTElUSUVTX1BST1RPQ09MDQo+ICpt SHR0cFV0aWxpdGllczsNCj4gIC8vIEluY2x1ZGUgZmlsZXMgd2l0aCBmdW5jdGlvbiBwcm90b3R5 cGVzDQo+ICAvLw0KPiAgI2luY2x1ZGUgIkNvbXBvbmVudE5hbWUuaCINCj4gICNpbmNsdWRlICJI dHRwSW1wbC5oIg0KPiAgI2luY2x1ZGUgIkh0dHBQcm90by5oIg0KPiArI2luY2x1ZGUgIkh0dHBz U3VwcG9ydC5oIg0KPiAgI2luY2x1ZGUgIkh0dHBEbnMuaCINCj4gDQo+ICB0eXBlZGVmIHN0cnVj dCB7DQo+ICAgIEVGSV9TRVJWSUNFX0JJTkRJTkdfUFJPVE9DT0wgICpTZXJ2aWNlQmluZGluZzsN Cj4gICAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyT2ZDaGlsZHJlbjsNCj4g ZGlmZiAtLWdpdCBhL05ldHdvcmtQa2cvSHR0cER4ZS9IdHRwRHhlLmluZg0KPiBiL05ldHdvcmtQ a2cvSHR0cER4ZS9IdHRwRHhlLmluZg0KPiBpbmRleCBiZjJjYmVlLi4xMTE4MTgxIDEwMDY0NA0K PiAtLS0gYS9OZXR3b3JrUGtnL0h0dHBEeGUvSHR0cER4ZS5pbmYNCj4gKysrIGIvTmV0d29ya1Br Zy9IdHRwRHhlL0h0dHBEeGUuaW5mDQo+IEBAIC0xLDkgKzEsOSBAQA0KPiAgIyMgQGZpbGUNCj4g ICMgIEltcGxlbWVudGF0aW9uIG9mIEVGSSBIVFRQIHByb3RvY29sIGludGVyZmFjZXMuDQo+ICAj DQo+IC0jICBDb3B5cmlnaHQgKGMpIDIwMTUsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRz IHJlc2VydmVkLjxCUj4NCj4gKyMgIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIEludGVsIENv cnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gICMNCj4gICMgIFRoaXMgcHJv Z3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCj4gICMgIGFyZSBsaWNlbnNlZCBh bmQgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZQ0K PiBCU0QgTGljZW5zZQ0KPiAgIyAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24u IFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgbWF5IGJlDQo+IGZvdW5kIGF0DQo+ICAjICBo dHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vuc2UucGhwLg0KPiBAQCAtMjQs MTAgKzI0LDExIEBADQo+ICAgIE1PRFVMRV9VTklfRklMRSAgICAgICAgICAgPSBIdHRwRHhlLnVu aQ0KPiANCj4gIFtQYWNrYWdlc10NCj4gICAgTWRlUGtnL01kZVBrZy5kZWMNCj4gICAgTWRlTW9k dWxlUGtnL01kZU1vZHVsZVBrZy5kZWMNCj4gKyAgTmV0d29ya1BrZy9OZXR3b3JrUGtnLmRlYw0K PiANCj4gIFtTb3VyY2VzXQ0KPiAgICBDb21wb25lbnROYW1lLmgNCj4gICAgQ29tcG9uZW50TmFt ZS5jDQo+ICAgIEh0dHBEbnMuaA0KPiBAQCAtMzYsMTQgKzM3LDE3IEBADQo+ICAgIEh0dHBEcml2 ZXIuYw0KPiAgICBIdHRwSW1wbC5oDQo+ICAgIEh0dHBJbXBsLmMNCj4gICAgSHR0cFByb3RvLmgN Cj4gICAgSHR0cFByb3RvLmMNCj4gKyAgSHR0cHNTdXBwb3J0LmgNCj4gKyAgSHR0cHNTdXBwb3J0 LmMNCj4gDQo+ICBbTGlicmFyeUNsYXNzZXNdDQo+ICAgIFVlZmlEcml2ZXJFbnRyeVBvaW50DQo+ ICAgIFVlZmlCb290U2VydmljZXNUYWJsZUxpYg0KPiArICBVZWZpUnVudGltZVNlcnZpY2VzVGFi bGVMaWINCj4gICAgTWVtb3J5QWxsb2NhdGlvbkxpYg0KPiAgICBCYXNlTGliDQo+ICAgIFVlZmlM aWINCj4gICAgRGVidWdMaWINCj4gICAgTmV0TGliDQo+IEBAIC02Miw4ICs2NiwxNCBAQA0KPiAg ICBnRWZpRG5zNFByb3RvY29sR3VpZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMgU09N RVRJTUVTX0NPTlNVTUVTDQo+ICAgIGdFZmlEbnM2U2VydmljZUJpbmRpbmdQcm90b2NvbEd1aWQg ICAgICAgICAgICAgICAjIyBTT01FVElNRVNfQ09OU1VNRVMNCj4gICAgZ0VmaURuczZQcm90b2Nv bEd1aWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjIFNPTUVUSU1FU19DT05TVU1FUw0K PiAgICBnRWZpSXA0Q29uZmlnMlByb3RvY29sR3VpZCAgICAgICAgICAgICAgICAgICAgICAgIyMg U09NRVRJTUVTX0NPTlNVTUVTDQo+ICAgIGdFZmlJcDZDb25maWdQcm90b2NvbEd1aWQgICAgICAg ICAgICAgICAgICAgICAgICAjIyBTT01FVElNRVNfQ09OU1VNRVMNCj4gKyAgZ0VmaVRsc1NlcnZp Y2VCaW5kaW5nUHJvdG9jb2xHdWlkICAgICAgICAgICAgICAgICMjIFNPTUVUSU1FU19DT05TVU1F Uw0KPiArICBnRWZpVGxzUHJvdG9jb2xHdWlkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IyMgU09NRVRJTUVTX0NPTlNVTUVTDQo+ICsgIGdFZmlUbHNDb25maWd1cmF0aW9uUHJvdG9jb2xH dWlkICAgICAgICAgICAgICAgICAjIyBTT01FVElNRVNfQ09OU1VNRVMNCj4gKw0KPiArW0d1aWRz XQ0KPiArICBnRWZpVGxzQ2FDZXJ0aWZpY2F0ZUd1aWQgICAgICAgICAgICAgICAgICAgICAgICAg IyMgQ09OU1VNRVMgICMjIEdVSUQNCj4gDQo+ICBbVXNlckV4dGVuc2lvbnMuVGlhbm9Db3JlLiJF eHRyYUZpbGVzIl0NCj4gICAgSHR0cER4ZUV4dHJhLnVuaQ0KPiBcIE5vIG5ld2xpbmUgYXQgZW5k IG9mIGZpbGUNCj4gZGlmZiAtLWdpdCBhL05ldHdvcmtQa2cvSHR0cER4ZS9IdHRwSW1wbC5jDQo+ IGIvTmV0d29ya1BrZy9IdHRwRHhlL0h0dHBJbXBsLmMNCj4gaW5kZXggNmZjYjBiNy4uNzdhYTY0 YSAxMDA2NDQNCj4gLS0tIGEvTmV0d29ya1BrZy9IdHRwRHhlL0h0dHBJbXBsLmMNCj4gKysrIGIv TmV0d29ya1BrZy9IdHRwRHhlL0h0dHBJbXBsLmMNCj4gQEAgLTIzOSwxMCArMjM5LDExIEBAIEVm aUh0dHBSZXF1ZXN0ICgNCj4gICAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgSG9zdE5h bWVTaXplOw0KPiAgICBVSU5UMTYgICAgICAgICAgICAgICAgICAgICAgICBSZW1vdGVQb3J0Ow0K PiAgICBIVFRQX1BST1RPQ09MICAgICAgICAgICAgICAgICAqSHR0cEluc3RhbmNlOw0KPiAgICBC T09MRUFOICAgICAgICAgICAgICAgICAgICAgICBDb25maWd1cmU7DQo+ICAgIEJPT0xFQU4gICAg ICAgICAgICAgICAgICAgICAgIFJlQ29uZmlndXJlOw0KPiArICBCT09MRUFOICAgICAgICAgICAg ICAgICAgICAgICBUbHNDb25maWd1cmU7DQo+ICAgIENIQVI4ICAgICAgICAgICAgICAgICAgICAg ICAgICpSZXF1ZXN0TXNnOw0KPiAgICBDSEFSOCAgICAgICAgICAgICAgICAgICAgICAgICAqVXJs Ow0KPiAgICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICBVcmxMZW47DQo+ICAgIENIQVIx NiAgICAgICAgICAgICAgICAgICAgICAgICpIb3N0TmFtZVN0cjsNCj4gICAgSFRUUF9UT0tFTl9X UkFQICAgICAgICAgICAgICAgKldyYXA7DQo+IEBAIC0yNTgsMTAgKzI1OSwxMSBAQCBFZmlIdHRw UmVxdWVzdCAoDQo+ICAgIEhvc3ROYW1lID0gTlVMTDsNCj4gICAgUmVxdWVzdE1zZyA9IE5VTEw7 DQo+ICAgIEhvc3ROYW1lU3RyID0gTlVMTDsNCj4gICAgV3JhcCA9IE5VTEw7DQo+ICAgIEZpbGVV cmwgPSBOVUxMOw0KPiArICBUbHNDb25maWd1cmUgPSBGQUxTRTsNCj4gDQo+ICAgIGlmICgoVGhp cyA9PSBOVUxMKSB8fCAoVG9rZW4gPT0gTlVMTCkpIHsNCj4gICAgICByZXR1cm4gRUZJX0lOVkFM SURfUEFSQU1FVEVSOw0KPiAgICB9DQo+IA0KPiBAQCAtMzQzLDEwICszNDUsMzYgQEAgRWZpSHR0 cFJlcXVlc3QgKA0KPiAgICAgICAgSHR0cEluc3RhbmNlLT5VcmwgPSBVcmw7DQo+ICAgICAgfQ0K PiANCj4gDQo+ICAgICAgVW5pY29kZVN0clRvQXNjaWlTdHJTIChSZXF1ZXN0LT5VcmwsIFVybCwg VXJsTGVuKTsNCj4gKw0KPiArICAgIC8vDQo+ICsgICAgLy8gRnJvbSB0aGUgaW5mb3JtYXRpb24g aW4gVXJsLCB0aGUgSFRUUCBpbnN0YW5jZSB3aWxsDQo+ICsgICAgLy8gYmUgYWJsZSB0byBkZXRl cm1pbmUgd2hldGhlciB0byB1c2UgaHR0cCBvciBodHRwcy4NCj4gKyAgICAvLw0KPiArICAgIEh0 dHBJbnN0YW5jZS0+VXNlSHR0cHMgPSBJc0h0dHBzVXJsIChVcmwpOw0KPiArDQo+ICsgICAgLy8N Cj4gKyAgICAvLyBDaGVjayB3aGV0aGVyIHdlIG5lZWQgdG8gY3JlYXRlIFRscyBjaGlsZCBhbmQg b3BlbiB0aGUgVExTIHByb3RvY29sLg0KPiArICAgIC8vDQo+ICsgICAgaWYgKEh0dHBJbnN0YW5j ZS0+VXNlSHR0cHMgJiYgSHR0cEluc3RhbmNlLT5UbHNDaGlsZEhhbmRsZSA9PSBOVUxMKSB7DQo+ ICsgICAgICAvLw0KPiArICAgICAgLy8gVXNlIFRsc1NiIHRvIGNyZWF0ZSBUbHMgY2hpbGQgYW5k IG9wZW4gdGhlIFRMUyBwcm90b2NvbC4NCj4gKyAgICAgIC8vDQo+ICsgICAgICBIdHRwSW5zdGFu Y2UtPlRsc0NoaWxkSGFuZGxlID0gVGxzQ3JlYXRlQ2hpbGQgKA0KPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgSHR0cEluc3RhbmNlLT5TZXJ2aWNlLT5JbWFnZUhhbmRs ZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYoSHR0cEluc3Rh bmNlLT5UbHMpLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJihI dHRwSW5zdGFuY2UtPlRsc0NvbmZpZ3VyYXRpb24pDQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICApOw0KPiArICAgICAgaWYgKEh0dHBJbnN0YW5jZS0+VGxzQ2hpbGRI YW5kbGUgPT0gTlVMTCkgew0KPiArICAgICAgICByZXR1cm4gRUZJX0RFVklDRV9FUlJPUjsNCj4g KyAgICAgIH0NCj4gKw0KPiArICAgICAgVGxzQ29uZmlndXJlID0gVFJVRTsNCj4gKyAgICB9DQo+ ICsNCj4gICAgICBVcmxQYXJzZXIgPSBOVUxMOw0KPiAgICAgIFN0YXR1cyA9IEh0dHBQYXJzZVVy bCAoVXJsLCAoVUlOVDMyKSBBc2NpaVN0ckxlbiAoVXJsKSwgRkFMU0UsICZVcmxQYXJzZXIpOw0K PiAgICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gICAgICAgIGdvdG8gRXJyb3IxOw0K PiAgICAgIH0NCj4gQEAgLTM1NywxMSArMzg1LDE1IEBAIEVmaUh0dHBSZXF1ZXN0ICgNCj4gICAg ICAgZ290byBFcnJvcjE7DQo+ICAgICAgfQ0KPiANCj4gICAgICBTdGF0dXMgPSBIdHRwVXJsR2V0 UG9ydCAoVXJsLCBVcmxQYXJzZXIsICZSZW1vdGVQb3J0KTsNCj4gICAgICBpZiAoRUZJX0VSUk9S IChTdGF0dXMpKSB7DQo+IC0gICAgICBSZW1vdGVQb3J0ID0gSFRUUF9ERUZBVUxUX1BPUlQ7DQo+ ICsgICAgICBpZiAoSHR0cEluc3RhbmNlLT5Vc2VIdHRwcykgew0KPiArICAgICAgICBSZW1vdGVQ b3J0ID0gSFRUUFNfREVGQVVMVF9QT1JUOw0KPiArICAgICAgfSBlbHNlIHsNCj4gKyAgICAgICAg UmVtb3RlUG9ydCA9IEhUVFBfREVGQVVMVF9QT1JUOw0KPiArICAgICAgfQ0KPiAgICAgIH0NCj4g ICAgICAvLw0KPiAgICAgIC8vIElmIENvbmZpZ3VyZSBpcyBUUlVFLCBpdCBpbmRpY2F0ZXMgdGhl IGZpcnN0IHRpbWUgdG8gY2FsbCBSZXF1ZXN0KCk7DQo+ICAgICAgLy8gSWYgUmVDb25maWd1cmUg aXMgVFJVRSwgaXQgaW5kaWNhdGVzIHRoZSByZXF1ZXN0IFVSTCBpcyBub3Qgc2FtZQ0KPiAgICAg IC8vIHdpdGggdGhlIHByZXZpb3VzIGNhbGwgdG8gUmVxdWVzdCgpOw0KPiBAQCAtMzc0LDEzICs0 MDYsMTcgQEAgRWZpSHR0cFJlcXVlc3QgKA0KPiAgICAgICAgLy8gUmVxdWVzdCgpIGlzIGNhbGxl ZCB0aGUgZmlyc3QgdGltZS4NCj4gICAgICAgIC8vDQo+ICAgICAgICBSZUNvbmZpZ3VyZSA9IEZB TFNFOw0KPiAgICAgIH0gZWxzZSB7DQo+ICAgICAgICBpZiAoKEh0dHBJbnN0YW5jZS0+UmVtb3Rl UG9ydCA9PSBSZW1vdGVQb3J0KSAmJg0KPiAtICAgICAgICAoQXNjaWlTdHJDbXAgKEh0dHBJbnN0 YW5jZS0+UmVtb3RlSG9zdCwgSG9zdE5hbWUpID09IDApKSB7DQo+ICsgICAgICAgICAgKEFzY2lp U3RyQ21wIChIdHRwSW5zdGFuY2UtPlJlbW90ZUhvc3QsIEhvc3ROYW1lKSA9PSAwKSAmJg0KPiAr ICAgICAgICAgICghSHR0cEluc3RhbmNlLT5Vc2VIdHRwcyB8fCAoSHR0cEluc3RhbmNlLT5Vc2VI dHRwcyAmJg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIVRsc0Nv bmZpZ3VyZSAmJg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSHR0 cEluc3RhbmNlLT5UbHNTZXNzaW9uU3RhdGUgPT0NCj4gRWZpVGxzU2Vzc2lvbkRhdGFUcmFuc2Zl cnJpbmcpKSkgew0KPiAgICAgICAgICAvLw0KPiAgICAgICAgICAvLyBIb3N0IE5hbWUgYW5kIHBv cnQgbnVtYmVyIG9mIHRoZSByZXF1ZXN0IFVSTCBhcmUgdGhlIHNhbWUgd2l0aA0KPiBwcmV2aW91 cyBjYWxsIHRvIFJlcXVlc3QoKS4NCj4gKyAgICAgICAgLy8gSWYgSHR0cHMgcHJvdG9jb2wgdXNl ZCwgdGhlIGNvcnJlc3BvbmRpbmcgU2Vzc2lvblN0YXRlIGlzDQo+IEVmaVRsc1Nlc3Npb25EYXRh VHJhbnNmZXJyaW5nLg0KPiAgICAgICAgICAvLyBDaGVjayB3aGV0aGVyIHByZXZpb3VzIFRDUCBw YWNrZXQgc2VudCBvdXQuDQo+ICAgICAgICAgIC8vDQo+IA0KPiAgICAgICAgICBpZiAoRUZJX0VS Uk9SIChOZXRNYXBJdGVyYXRlICgmSHR0cEluc3RhbmNlLT5UeFRva2VucywNCj4gSHR0cFRjcE5v dFJlYWR5LCBOVUxMKSkpIHsNCj4gICAgICAgICAgICAvLw0KPiBAQCAtNDgwLDEwICs1MTYsMjAg QEAgRWZpSHR0cFJlcXVlc3QgKA0KPiAgICAgIGlmICghSHR0cEluc3RhbmNlLT5Mb2NhbEFkZHJl c3NJc0lQdjYpIHsNCj4gICAgICAgIEFTU0VSVCAoSHR0cEluc3RhbmNlLT5UY3A0ICE9IE5VTEwp Ow0KPiAgICAgIH0gZWxzZSB7DQo+ICAgICAgICBBU1NFUlQgKEh0dHBJbnN0YW5jZS0+VGNwNiAh PSBOVUxMKTsNCj4gICAgICB9DQo+ICsNCj4gKyAgICBpZiAoSHR0cEluc3RhbmNlLT5Vc2VIdHRw cyAmJiAhVGxzQ29uZmlndXJlKSB7DQo+ICsgICAgICBTdGF0dXMgPSBUbHNDbG9zZVNlc3Npb24g KEh0dHBJbnN0YW5jZSk7DQo+ICsgICAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsg ICAgICAgIGdvdG8gRXJyb3IxOw0KPiArICAgICAgfQ0KPiArDQo+ICsgICAgICBUbHNDbG9zZVR4 UnhFdmVudCAoSHR0cEluc3RhbmNlKTsNCj4gKyAgICB9DQo+ICsNCj4gICAgICBIdHRwQ2xvc2VD b25uZWN0aW9uIChIdHRwSW5zdGFuY2UpOw0KPiAgICAgIEVmaUh0dHBDYW5jZWwgKFRoaXMsIE5V TEwpOw0KPiAgICB9DQo+IA0KPiAgICAvLw0KPiBAQCAtNDk4LDE3ICs1NDQsMjIgQEAgRWZpSHR0 cFJlcXVlc3QgKA0KPiAgICBXcmFwLT5IdHRwVG9rZW4gICAgICA9IFRva2VuOw0KPiAgICBXcmFw LT5IdHRwSW5zdGFuY2UgICA9IEh0dHBJbnN0YW5jZTsNCj4gICAgaWYgKFJlcXVlc3QgIT0gTlVM TCkgew0KPiAgICAgIFdyYXAtPlRjcFdyYXAuTWV0aG9kID0gUmVxdWVzdC0+TWV0aG9kOw0KPiAg ICB9DQo+IC0NCj4gLSAgU3RhdHVzID0gSHR0cEluaXRUY3AgKEh0dHBJbnN0YW5jZSwgV3JhcCwg Q29uZmlndXJlKTsNCj4gKw0KPiArICBTdGF0dXMgPSBIdHRwSW5pdFNlc3Npb24gKA0KPiArICAg ICAgICAgICAgIEh0dHBJbnN0YW5jZSwNCj4gKyAgICAgICAgICAgICBXcmFwLA0KPiArICAgICAg ICAgICAgIENvbmZpZ3VyZSB8fCBSZUNvbmZpZ3VyZSwNCj4gKyAgICAgICAgICAgICBUbHNDb25m aWd1cmUNCj4gKyAgICAgICAgICAgICApOw0KPiAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7 DQo+ICAgICAgZ290byBFcnJvcjI7DQo+IC0gIH0NCj4gKyAgfQ0KPiANCj4gLSAgaWYgKCFDb25m aWd1cmUpIHsNCj4gKyAgaWYgKCFDb25maWd1cmUgJiYgIVJlQ29uZmlndXJlICYmICFUbHNDb25m aWd1cmUpIHsNCj4gICAgICAvLw0KPiAgICAgIC8vIEZvciB0aGUgbmV3IEhUVFAgdG9rZW4sIGNy ZWF0ZSBUWCBUQ1AgdG9rZW4gZXZlbnRzLg0KPiAgICAgIC8vDQo+ICAgICAgU3RhdHVzID0gSHR0 cENyZWF0ZVRjcFR4RXZlbnQgKFdyYXApOw0KPiAgICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykp IHsNCj4gQEAgLTU5MSwxMyArNjQyLDE4IEBAIEVycm9yNDoNCj4gICAgaWYgKFJlcXVlc3RNc2cg IT0gTlVMTCkgew0KPiAgICAgIEZyZWVQb29sIChSZXF1ZXN0TXNnKTsNCj4gICAgfQ0KPiANCj4g IEVycm9yMzoNCj4gLSAgSHR0cENsb3NlQ29ubmVjdGlvbiAoSHR0cEluc3RhbmNlKTsNCj4gKyAg aWYgKEh0dHBJbnN0YW5jZS0+VXNlSHR0cHMpIHsNCj4gKyAgICBUbHNDbG9zZVNlc3Npb24gKEh0 dHBJbnN0YW5jZSk7DQo+ICsgICAgVGxzQ2xvc2VUeFJ4RXZlbnQgKEh0dHBJbnN0YW5jZSk7DQo+ ICsgIH0NCj4gDQo+ICBFcnJvcjI6DQo+ICsgIEh0dHBDbG9zZUNvbm5lY3Rpb24gKEh0dHBJbnN0 YW5jZSk7DQo+ICsNCj4gICAgSHR0cENsb3NlVGNwQ29ubkNsb3NlRXZlbnQgKEh0dHBJbnN0YW5j ZSk7DQo+ICAgIGlmIChOVUxMICE9IFdyYXAtPlRjcFdyYXAuVHg0VG9rZW4uQ29tcGxldGlvblRv a2VuLkV2ZW50KSB7DQo+ICAgICAgZ0JTLT5DbG9zZUV2ZW50IChXcmFwLT5UY3BXcmFwLlR4NFRv a2VuLkNvbXBsZXRpb25Ub2tlbi5FdmVudCk7DQo+ICAgICAgV3JhcC0+VGNwV3JhcC5UeDRUb2tl bi5Db21wbGV0aW9uVG9rZW4uRXZlbnQgPSBOVUxMOw0KPiAgICB9DQo+IEBAIC03MjksMjYgKzc4 NSwzNCBAQCBIdHRwQ2FuY2VsICgNCj4gICAgICB9IGVsc2Ugew0KPiAgICAgICAgcmV0dXJuIFN0 YXR1czsNCj4gICAgICB9DQo+ICAgIH0NCj4gDQo+IC0gIC8vDQo+IC0gIC8vIFRoZW4gY2hlY2sg dGhlIHRva2VucyBxdWV1ZWQgYnkgRWZpSHR0cFJlc3BvbnNlKCkuDQo+IC0gIC8vDQo+IC0gIFN0 YXR1cyA9IE5ldE1hcEl0ZXJhdGUgKCZIdHRwSW5zdGFuY2UtPlJ4VG9rZW5zLCBIdHRwQ2FuY2Vs VG9rZW5zLA0KPiBUb2tlbik7DQo+IC0gIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gLSAg ICBpZiAoVG9rZW4gIT0gTlVMTCkgew0KPiAtICAgICAgaWYgKFN0YXR1cyA9PSBFRklfQUJPUlRF RCkgew0KPiAtICAgICAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ICsgIGlmICghSHR0cEluc3Rh bmNlLT5Vc2VIdHRwcykgew0KPiArICAgIC8vDQo+ICsgICAgLy8gVGhlbiBjaGVjayB0aGUgdG9r ZW5zIHF1ZXVlZCBieSBFZmlIdHRwUmVzcG9uc2UoKSwgZXhjZXB0IGZvciBIdHRwcy4NCj4gKyAg ICAvLw0KPiArICAgIFN0YXR1cyA9IE5ldE1hcEl0ZXJhdGUgKCZIdHRwSW5zdGFuY2UtPlJ4VG9r ZW5zLCBIdHRwQ2FuY2VsVG9rZW5zLA0KPiBUb2tlbik7DQo+ICsgICAgaWYgKEVGSV9FUlJPUiAo U3RhdHVzKSkgew0KPiArICAgICAgaWYgKFRva2VuICE9IE5VTEwpIHsNCj4gKyAgICAgICAgaWYg KFN0YXR1cyA9PSBFRklfQUJPUlRFRCkgew0KPiArICAgICAgICAgIHJldHVybiBFRklfU1VDQ0VT UzsNCj4gKyAgICAgICAgfSBlbHNlIHsNCj4gKyAgICAgICAgICByZXR1cm4gRUZJX05PVF9GT1VO RDsNCj4gKyAgICAgICAgfQ0KPiAgICAgICAgfSBlbHNlIHsNCj4gLSAgICAgICAgcmV0dXJuIEVG SV9OT1RfRk9VTkQ7DQo+ICsgICAgICAgIHJldHVybiBTdGF0dXM7DQo+ICAgICAgICB9DQo+ICsg ICAgfQ0KPiArICB9IGVsc2Ugew0KPiArICAgIGlmICghSHR0cEluc3RhbmNlLT5Mb2NhbEFkZHJl c3NJc0lQdjYpIHsNCj4gKyAgICAgIEh0dHBJbnN0YW5jZS0+VGNwNC0+Q2FuY2VsIChIdHRwSW5z dGFuY2UtPlRjcDQsICZIdHRwSW5zdGFuY2UtDQo+ID5UY3A0VGxzUnhUb2tlbi5Db21wbGV0aW9u VG9rZW4pOw0KPiAgICAgIH0gZWxzZSB7DQo+IC0gICAgICByZXR1cm4gU3RhdHVzOw0KPiArICAg ICAgSHR0cEluc3RhbmNlLT5UY3A2LT5DYW5jZWwgKEh0dHBJbnN0YW5jZS0+VGNwNiwgJkh0dHBJ bnN0YW5jZS0NCj4gPlRjcDZUbHNSeFRva2VuLkNvbXBsZXRpb25Ub2tlbik7DQo+ICAgICAgfQ0K PiAgICB9DQo+IC0NCj4gKw0KPiAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ICB9DQo+IA0KPiAN Cj4gIC8qKg0KPiBAQCAtODgwLDEwICs5NDQsMTEgQEAgSHR0cFJlc3BvbnNlV29ya2VyICgNCj4g ICAgSFRUUF9QUk9UT0NPTCAgICAgICAgICAgICAgICAgKkh0dHBJbnN0YW5jZTsNCj4gICAgRUZJ X0hUVFBfVE9LRU4gICAgICAgICAgICAgICAgKlRva2VuOw0KPiAgICBORVRfTUFQX0lURU0gICAg ICAgICAgICAgICAgICAqSXRlbTsNCj4gICAgSFRUUF9UT0tFTl9XUkFQICAgICAgICAgICAgICAg KlZhbHVlSW5JdGVtOw0KPiAgICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICBIZHJMZW47 DQo+ICsgIE5FVF9GUkFHTUVOVCAgICAgICAgICAgICAgICAgIEZyYWdtZW50Ow0KPiANCj4gICAg aWYgKFdyYXAgPT0gTlVMTCB8fCBXcmFwLT5IdHRwSW5zdGFuY2UgPT0gTlVMTCkgew0KPiAgICAg IHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ICAgIH0NCj4gDQo+IEBAIC04OTcsMjEg Kzk2MiwxNSBAQCBIdHRwUmVzcG9uc2VXb3JrZXIgKA0KPiAgICBIdHRwSGVhZGVycyAgICAgICAg ICAgICAgID0gTlVMTDsNCj4gICAgU2l6ZW9mSGVhZGVycyAgICAgICAgICAgICA9IDA7DQo+ICAg IEJ1ZmZlclNpemUgICAgICAgICAgICAgICAgPSAwOw0KPiAgICBFbmRvZkhlYWRlciAgICAgICAg ICAgICAgID0gTlVMTDsNCj4gICAgVmFsdWVJbkl0ZW0gICAgICAgICAgICAgICA9IE5VTEw7DQo+ ICsgIEZyYWdtZW50LkxlbiAgICAgICAgICAgICAgPSAwOw0KPiArICBGcmFnbWVudC5CdWxrICAg ICAgICAgICAgID0gTlVMTDsNCj4gDQo+ICAgIGlmIChIdHRwTXNnLT5EYXRhLlJlc3BvbnNlICE9 IE5VTEwpIHsNCj4gICAgICAvLw0KPiAtICAgIC8vIE5lZWQgcmVjZWl2ZSB0aGUgSFRUUCBoZWFk ZXJzLCBwcmVwYXJlIGJ1ZmZlci4NCj4gLSAgICAvLw0KPiAtICAgIFN0YXR1cyA9IEh0dHBDcmVh dGVUY3BSeEV2ZW50Rm9ySGVhZGVyIChIdHRwSW5zdGFuY2UpOw0KPiAtICAgIGlmIChFRklfRVJS T1IgKFN0YXR1cykpIHsNCj4gLSAgICAgIGdvdG8gRXJyb3I7DQo+IC0gICAgfQ0KPiAtDQo+IC0g ICAgLy8NCj4gICAgICAvLyBDaGVjayB3aGV0aGVyIHdlIGhhdmUgY2FjaGVkIGhlYWRlciBmcm9t IHByZXZpb3VzIGNhbGwuDQo+ICAgICAgLy8NCj4gICAgICBpZiAoKEh0dHBJbnN0YW5jZS0+Q2Fj aGVCb2R5ICE9IE5VTEwpICYmIChIdHRwSW5zdGFuY2UtPk5leHRNc2cgIT0NCj4gTlVMTCkpIHsN Cj4gICAgICAgIC8vDQo+ICAgICAgICAvLyBUaGUgZGF0YSBpcyBzdG9yZWQgYXQgW05leHRNc2cs IENhY2hlQm9keSArIENhY2hlTGVuXS4NCj4gQEAgLTExOTgsMTMgKzEyNTcsMTIwIEBAIEh0dHBS ZXNwb25zZVdvcmtlciAoDQo+ICAgIEFTU0VSVCAoSHR0cEluc3RhbmNlLT5Nc2dQYXJzZXIgIT0g TlVMTCk7DQo+IA0KPiAgICAvLw0KPiAgICAvLyBXZSBzdGlsbCBuZWVkIHJlY2VpdmUgbW9yZSBk YXRhIHdoZW4gdGhlcmUgaXMgbm8gY2FjaGUgZGF0YSBhbmQNCj4gTXNnUGFyc2VyIGlzIG5vdCBO VUxMOw0KPiAgICAvLw0KPiAtICBTdGF0dXMgPSBIdHRwVGNwUmVjZWl2ZUJvZHkgKFdyYXAsIEh0 dHBNc2cpOw0KPiAtICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+IC0gICAgZ290byBFcnJv cjI7DQo+ICsgIGlmICghSHR0cEluc3RhbmNlLT5Vc2VIdHRwcykgew0KPiArICAgIFN0YXR1cyA9 IEh0dHBUY3BSZWNlaXZlQm9keSAoV3JhcCwgSHR0cE1zZyk7DQo+ICsNCj4gKyAgICBpZiAoRUZJ X0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICBnb3RvIEVycm9yMjsNCj4gKyAgICB9DQo+ICsN Cj4gKyAgfSBlbHNlIHsNCj4gKyAgICBpZiAoSHR0cEluc3RhbmNlLT5UaW1lb3V0RXZlbnQgPT0g TlVMTCkgew0KPiArICAgICAgLy8NCj4gKyAgICAgIC8vIENyZWF0ZSBUaW1lb3V0RXZlbnQgZm9y IHJlc3BvbnNlDQo+ICsgICAgICAvLw0KPiArICAgICAgU3RhdHVzID0gZ0JTLT5DcmVhdGVFdmVu dCAoDQo+ICsgICAgICAgICAgICAgICAgICAgICAgRVZUX1RJTUVSLA0KPiArICAgICAgICAgICAg ICAgICAgICAgIFRQTF9DQUxMQkFDSywNCj4gKyAgICAgICAgICAgICAgICAgICAgICBOVUxMLA0K PiArICAgICAgICAgICAgICAgICAgICAgIE5VTEwsDQo+ICsgICAgICAgICAgICAgICAgICAgICAg Jkh0dHBJbnN0YW5jZS0+VGltZW91dEV2ZW50DQo+ICsgICAgICAgICAgICAgICAgICAgICAgKTsN Cj4gKyAgICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgICAgZ290byBFcnJv cjI7DQo+ICsgICAgICB9DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgLy8NCj4gKyAgICAvLyBTdGFy dCB0aGUgdGltZXIsIGFuZCB3YWl0IFRpbWVvdXQgc2Vjb25kcyB0byByZWNlaXZlIHRoZSBib2R5 IHBhY2tldC4NCj4gKyAgICAvLw0KPiArICAgIFN0YXR1cyA9IGdCUy0+U2V0VGltZXIgKEh0dHBJ bnN0YW5jZS0+VGltZW91dEV2ZW50LCBUaW1lclJlbGF0aXZlLA0KPiBIVFRQX1JFU1BPTlNFX1RJ TUVPVVQgKiBUSUNLU19QRVJfU0VDT05EKTsNCj4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMp KSB7DQo+ICsgICAgICBnb3RvIEVycm9yMjsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBTdGF0dXMg PSBIdHRwc1JlY2VpdmUgKEh0dHBJbnN0YW5jZSwgJkZyYWdtZW50LCBIdHRwSW5zdGFuY2UtDQo+ ID5UaW1lb3V0RXZlbnQpOw0KPiArDQo+ICsgICAgZ0JTLT5TZXRUaW1lciAoSHR0cEluc3RhbmNl LT5UaW1lb3V0RXZlbnQsIFRpbWVyQ2FuY2VsLCAwKTsNCj4gKw0KPiArICAgIGlmIChFRklfRVJS T1IgKFN0YXR1cykpIHsNCj4gKyAgICAgIGdvdG8gRXJyb3IyOw0KPiArICAgIH0NCj4gKw0KPiAr ICAgIC8vDQo+ICsgICAgLy8gQ2hlY2sgd2hldGhlciB3ZSByZWNlaXZlIGEgY29tcGxldGUgSFRU UCBtZXNzYWdlLg0KPiArICAgIC8vDQo+ICsgICAgU3RhdHVzID0gSHR0cFBhcnNlTWVzc2FnZUJv ZHkgKA0KPiArICAgICAgICAgICAgICAgSHR0cEluc3RhbmNlLT5Nc2dQYXJzZXIsDQo+ICsgICAg ICAgICAgICAgICAoVUlOVE4pIEZyYWdtZW50LkxlbiwNCj4gKyAgICAgICAgICAgICAgIChDSEFS OCAqKSBGcmFnbWVudC5CdWxrDQo+ICsgICAgICAgICAgICAgICApOw0KPiArICAgIGlmIChFRklf RVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgIGdvdG8gRXJyb3IyOw0KPiArICAgIH0NCj4gKw0K PiArICAgIGlmIChIdHRwSXNNZXNzYWdlQ29tcGxldGUgKEh0dHBJbnN0YW5jZS0+TXNnUGFyc2Vy KSkgew0KPiArICAgICAgLy8NCj4gKyAgICAgIC8vIEZyZWUgdGhlIE1zZ1BhcnNlIHNpbmNlIHdl IGFscmVhZHkgaGF2ZSBhIGZ1bGwgSFRUUCBtZXNzYWdlLg0KPiArICAgICAgLy8NCj4gKyAgICAg IEh0dHBGcmVlTXNnUGFyc2VyIChIdHRwSW5zdGFuY2UtPk1zZ1BhcnNlcik7DQo+ICsgICAgICBI dHRwSW5zdGFuY2UtPk1zZ1BhcnNlciA9IE5VTEw7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgLy8N Cj4gKyAgICAvLyBXZSByZWNlaXZlIHBhcnQgb2YgaGVhZGVyIG9mIG5leHQgSFRUUCBtc2cuDQo+ ICsgICAgLy8NCj4gKyAgICBpZiAoSHR0cEluc3RhbmNlLT5OZXh0TXNnICE9IE5VTEwpIHsNCj4g KyAgICAgIEh0dHBNc2ctPkJvZHlMZW5ndGggPSBNSU4gKChVSU5UTikgKEh0dHBJbnN0YW5jZS0+ TmV4dE1zZyAtDQo+IChDSEFSOCAqKSBGcmFnbWVudC5CdWxrKSwgSHR0cE1zZy0+Qm9keUxlbmd0 aCk7DQo+ICsgICAgICBDb3B5TWVtIChIdHRwTXNnLT5Cb2R5LCBGcmFnbWVudC5CdWxrLCBIdHRw TXNnLT5Cb2R5TGVuZ3RoKTsNCj4gKw0KPiArICAgICAgSHR0cEluc3RhbmNlLT5DYWNoZUxlbiA9 IEZyYWdtZW50LkxlbiAtIEh0dHBNc2ctPkJvZHlMZW5ndGg7DQo+ICsgICAgICBpZiAoSHR0cElu c3RhbmNlLT5DYWNoZUxlbiAhPSAwKSB7DQo+ICsgICAgICAgIGlmIChIdHRwSW5zdGFuY2UtPkNh Y2hlQm9keSAhPSBOVUxMKSB7DQo+ICsgICAgICAgICAgRnJlZVBvb2wgKEh0dHBJbnN0YW5jZS0+ Q2FjaGVCb2R5KTsNCj4gKyAgICAgICAgfQ0KPiArDQo+ICsgICAgICAgIEh0dHBJbnN0YW5jZS0+ Q2FjaGVCb2R5ID0gQWxsb2NhdGVaZXJvUG9vbCAoSHR0cEluc3RhbmNlLQ0KPiA+Q2FjaGVMZW4p Ow0KPiArICAgICAgICBpZiAoSHR0cEluc3RhbmNlLT5DYWNoZUJvZHkgPT0gTlVMTCkgew0KPiAr ICAgICAgICAgIFN0YXR1cyA9IEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiArICAgICAgICAgIGdv dG8gRXJyb3IyOw0KPiArICAgICAgICB9DQo+ICsNCj4gKyAgICAgICAgQ29weU1lbSAoSHR0cElu c3RhbmNlLT5DYWNoZUJvZHksIEZyYWdtZW50LkJ1bGsgKyBIdHRwTXNnLQ0KPiA+Qm9keUxlbmd0 aCwgSHR0cEluc3RhbmNlLT5DYWNoZUxlbik7DQo+ICsgICAgICAgIEh0dHBJbnN0YW5jZS0+Q2Fj aGVPZmZzZXQgPSAwOw0KPiArDQo+ICsgICAgICAgIEh0dHBJbnN0YW5jZS0+TmV4dE1zZyA9IEh0 dHBJbnN0YW5jZS0+Q2FjaGVCb2R5ICsgKFVJTlROKQ0KPiAoSHR0cEluc3RhbmNlLT5OZXh0TXNn IC0gKENIQVI4ICopIChGcmFnbWVudC5CdWxrICsgSHR0cE1zZy0NCj4gPkJvZHlMZW5ndGgpKTsN Cj4gKyAgICAgIH0NCj4gKyAgICB9IGVsc2Ugew0KPiArICAgICAgSHR0cE1zZy0+Qm9keUxlbmd0 aCA9IE1JTiAoRnJhZ21lbnQuTGVuLCAoVUlOVDMyKSBIdHRwTXNnLQ0KPiA+Qm9keUxlbmd0aCk7 DQo+ICsgICAgICBDb3B5TWVtIChIdHRwTXNnLT5Cb2R5LCBGcmFnbWVudC5CdWxrLCBIdHRwTXNn LT5Cb2R5TGVuZ3RoKTsNCj4gKyAgICAgIEh0dHBJbnN0YW5jZS0+Q2FjaGVMZW4gPSBGcmFnbWVu dC5MZW4gLSBIdHRwTXNnLT5Cb2R5TGVuZ3RoOw0KPiArICAgICAgaWYgKEh0dHBJbnN0YW5jZS0+ Q2FjaGVMZW4gIT0gMCkgew0KPiArICAgICAgICBpZiAoSHR0cEluc3RhbmNlLT5DYWNoZUJvZHkg IT0gTlVMTCkgew0KPiArICAgICAgICAgIEZyZWVQb29sIChIdHRwSW5zdGFuY2UtPkNhY2hlQm9k eSk7DQo+ICsgICAgICAgIH0NCj4gKw0KPiArICAgICAgICBIdHRwSW5zdGFuY2UtPkNhY2hlQm9k eSA9IEFsbG9jYXRlWmVyb1Bvb2wgKEh0dHBJbnN0YW5jZS0NCj4gPkNhY2hlTGVuKTsNCj4gKyAg ICAgICAgaWYgKEh0dHBJbnN0YW5jZS0+Q2FjaGVCb2R5ID09IE5VTEwpIHsNCj4gKyAgICAgICAg ICBTdGF0dXMgPSBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4gKyAgICAgICAgICBnb3RvIEVycm9y MjsNCj4gKyAgICAgICAgfQ0KPiArDQo+ICsgICAgICAgIENvcHlNZW0gKEh0dHBJbnN0YW5jZS0+ Q2FjaGVCb2R5LCBGcmFnbWVudC5CdWxrICsgSHR0cE1zZy0NCj4gPkJvZHlMZW5ndGgsIEh0dHBJ bnN0YW5jZS0+Q2FjaGVMZW4pOw0KPiArICAgICAgICBIdHRwSW5zdGFuY2UtPkNhY2hlT2Zmc2V0 ID0gMDsNCj4gKyAgICAgIH0NCj4gKyAgICB9DQo+ICsNCj4gKyAgICBpZiAoRnJhZ21lbnQuQnVs ayAhPSBOVUxMKSB7DQo+ICsgICAgICBGcmVlUG9vbCAoRnJhZ21lbnQuQnVsayk7DQo+ICsgICAg ICBGcmFnbWVudC5CdWxrID0gTlVMTDsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBnb3RvIEV4aXQ7 DQo+ICAgIH0NCj4gDQo+ICAgIHJldHVybiBTdGF0dXM7DQo+IA0KPiAgRXhpdDoNCj4gQEAgLTEy MzIsMTkgKzEzOTgsMzAgQEAgRXJyb3IyOg0KPiAgRXJyb3I6DQo+ICAgIEl0ZW0gPSBOZXRNYXBG aW5kS2V5ICgmV3JhcC0+SHR0cEluc3RhbmNlLT5SeFRva2VucywgV3JhcC0NCj4gPkh0dHBUb2tl bik7DQo+ICAgIGlmIChJdGVtICE9IE5VTEwpIHsNCj4gICAgICBOZXRNYXBSZW1vdmVJdGVtICgm V3JhcC0+SHR0cEluc3RhbmNlLT5SeFRva2VucywgSXRlbSwgTlVMTCk7DQo+ICAgIH0NCj4gLQ0K PiAtICBIdHRwVGNwVG9rZW5DbGVhbnVwIChXcmFwKTsNCj4gKw0KPiArICBpZiAoIUh0dHBJbnN0 YW5jZS0+VXNlSHR0cHMpIHsNCj4gKyAgICBIdHRwVGNwVG9rZW5DbGVhbnVwIChXcmFwKTsNCj4g KyAgfSBlbHNlIHsNCj4gKyAgICBGcmVlUG9vbCAoV3JhcCk7DQo+ICsgIH0NCj4gDQo+ICAgIGlm IChIdHRwSGVhZGVycyAhPSBOVUxMKSB7DQo+ICAgICAgRnJlZVBvb2wgKEh0dHBIZWFkZXJzKTsN Cj4gKyAgICBIdHRwSGVhZGVycyA9IE5VTEw7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoRnJhZ21l bnQuQnVsayAhPSBOVUxMKSB7DQo+ICsgICAgRnJlZVBvb2wgKEZyYWdtZW50LkJ1bGspOw0KPiAr ICAgIEZyYWdtZW50LkJ1bGsgPSBOVUxMOw0KPiAgICB9DQo+IA0KPiAgICBpZiAoSHR0cE1zZy0+ SGVhZGVycyAhPSBOVUxMKSB7DQo+ICAgICAgRnJlZVBvb2wgKEh0dHBNc2ctPkhlYWRlcnMpOw0K PiArICAgIEh0dHBNc2ctPkhlYWRlcnMgPSBOVUxMOw0KPiAgICB9DQo+IA0KPiAgICBpZiAoSHR0 cEluc3RhbmNlLT5DYWNoZUJvZHkgIT0gTlVMTCkgew0KPiAgICAgIEZyZWVQb29sIChIdHRwSW5z dGFuY2UtPkNhY2hlQm9keSk7DQo+ICAgICAgSHR0cEluc3RhbmNlLT5DYWNoZUJvZHkgPSBOVUxM Ow0KPiBAQCAtMTM1MSwxMyArMTUyOCwyMCBAQCBFZmlIdHRwUmVzcG9uc2UgKA0KPiAgICB9DQo+ IA0KPiAgICBXcmFwLT5IdHRwSW5zdGFuY2UgPSBIdHRwSW5zdGFuY2U7DQo+ICAgIFdyYXAtPkh0 dHBUb2tlbiAgICA9IFRva2VuOw0KPiANCj4gLSAgU3RhdHVzID0gSHR0cENyZWF0ZVRjcFJ4RXZl bnQgKFdyYXApOw0KPiAtICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+IC0gICAgZ290byBF cnJvcjsNCj4gKyAgLy8NCj4gKyAgLy8gTm90ZXM6IEZvciBIdHRwcywgcmVjZWl2ZSB0b2tlbiB3 cmFwcGVkIGluIEhUVFBfVE9LRU5fV1JBUCBpcyBub3QNCj4gdXNlZCB0bw0KPiArICAvLyByZWNl aXZlIHRoZSBodHRwcyByZXNwb25zZS4gQSBzcGVjaWFsIFRsc1J4VG9rZW4gaXMgdXNlZCBmb3Ig cmVjZWl2aW5nDQo+IFRMUw0KPiArICAvLyByZWxhdGVkIG1lc3NhZ2VzLiBJdCBzaG91bGQgYmUg YSBibG9ja2luZyByZXNwb25zZS4NCj4gKyAgLy8NCj4gKyAgaWYgKCFIdHRwSW5zdGFuY2UtPlVz ZUh0dHBzKSB7DQo+ICsgICAgU3RhdHVzID0gSHR0cENyZWF0ZVRjcFJ4RXZlbnQgKFdyYXApOw0K PiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgIGdvdG8gRXJyb3I7DQo+ ICsgICAgfQ0KPiAgICB9DQo+IA0KPiAgICBTdGF0dXMgPSBOZXRNYXBJbnNlcnRUYWlsICgmSHR0 cEluc3RhbmNlLT5SeFRva2VucywgVG9rZW4sIFdyYXApOw0KPiAgICBpZiAoRUZJX0VSUk9SIChT dGF0dXMpKSB7DQo+ICAgICAgZ290byBFcnJvcjsNCj4gZGlmZiAtLWdpdCBhL05ldHdvcmtQa2cv SHR0cER4ZS9IdHRwUHJvdG8uYw0KPiBiL05ldHdvcmtQa2cvSHR0cER4ZS9IdHRwUHJvdG8uYw0K PiBpbmRleCA2MzczZjA3Li43N2EzZWUzIDEwMDY0NA0KPiAtLS0gYS9OZXR3b3JrUGtnL0h0dHBE eGUvSHR0cFByb3RvLmMNCj4gKysrIGIvTmV0d29ya1BrZy9IdHRwRHhlL0h0dHBQcm90by5jDQo+ IEBAIC05MjYsMTAgKzkyNiwyNiBAQCBIdHRwQ2xlYW5Qcm90b2NvbCAoDQo+ICAgICAgICAgICAg IEh0dHBJbnN0YW5jZS0+U2VydmljZS0+SW1hZ2VIYW5kbGUsDQo+ICAgICAgICAgICAgIEh0dHBJ bnN0YW5jZS0+SGFuZGxlDQo+ICAgICAgICAgICAgICk7DQo+ICAgIH0NCj4gDQo+ICsgIGlmIChI dHRwSW5zdGFuY2UtPlRsc0NvbmZpZ0RhdGEuQ0FDZXJ0ICE9IE5VTEwpIHsNCj4gKyAgICBGcmVl UG9vbCAoSHR0cEluc3RhbmNlLT5UbHNDb25maWdEYXRhLkNBQ2VydCk7DQo+ICsgICAgSHR0cElu c3RhbmNlLT5UbHNDb25maWdEYXRhLkNBQ2VydCA9IE5VTEw7DQo+ICsgIH0NCj4gKw0KPiArICBp ZiAoSHR0cEluc3RhbmNlLT5UbHNDb25maWdEYXRhLkNsaWVudENlcnQgIT0gTlVMTCkgew0KPiAr ICAgIEZyZWVQb29sIChIdHRwSW5zdGFuY2UtPlRsc0NvbmZpZ0RhdGEuQ2xpZW50Q2VydCk7DQo+ ICsgICAgSHR0cEluc3RhbmNlLT5UbHNDb25maWdEYXRhLkNsaWVudENlcnQgPSBOVUxMOw0KPiAr ICB9DQo+ICsNCj4gKyAgaWYgKEh0dHBJbnN0YW5jZS0+VGxzQ29uZmlnRGF0YS5DbGllbnRQcml2 YXRlS2V5ICE9IE5VTEwpIHsNCj4gKyAgICBGcmVlUG9vbCAoSHR0cEluc3RhbmNlLT5UbHNDb25m aWdEYXRhLkNsaWVudFByaXZhdGVLZXkpOw0KPiArICAgIEh0dHBJbnN0YW5jZS0+VGxzQ29uZmln RGF0YS5DbGllbnRQcml2YXRlS2V5ID0gTlVMTDsNCj4gKyAgfQ0KPiArDQo+ICsgIFRsc0Nsb3Nl VHhSeEV2ZW50IChIdHRwSW5zdGFuY2UpOw0KPiAgfQ0KPiANCj4gIC8qKg0KPiAgICBFc3RhYmxp c2ggVENQIGNvbm5lY3Rpb24gd2l0aCBIVFRQIHNlcnZlci4NCj4gDQo+IEBAIC0xMTgzLDExICsx MTk5LDEyIEBAIEh0dHBDb25maWd1cmVUY3A2ICgNCj4gICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0K PiANCj4gIH0NCj4gDQo+ICAvKioNCj4gLSAgQ2hlY2sgZXhpc3RpbmcgVENQIGNvbm5lY3Rpb24s IGlmIGluIGVycm9yIHN0YXRlLCByZWNvdmVyIFRDUDQgY29ubmVjdGlvbi4NCj4gKyAgQ2hlY2sg ZXhpc3RpbmcgVENQIGNvbm5lY3Rpb24sIGlmIGluIGVycm9yIHN0YXRlLCByZWNvdmVyIFRDUDQg Y29ubmVjdGlvbi4NCj4gVGhlbiwNCj4gKyAgY29ubmVjdCBvbmUgVExTIHNlc3Npb24gaWYgcmVx dWlyZWQuDQo+IA0KPiAgICBAcGFyYW1baW5dICBIdHRwSW5zdGFuY2UgICAgICAgVGhlIEhUVFAg aW5zdGFuY2UgcHJpdmF0ZSBkYXRhLg0KPiANCj4gICAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAg ICAgICAgIFRoZSBUQ1AgY29ubmVjdGlvbiBpcyBlc3RhYmxpc2hlZC4NCj4gICAgQHJldHZhbCBF RklfTk9UX1JFQURZICAgICAgICAgIFRDUDQgcHJvdG9jb2wgY2hpbGQgaXMgbm90IGNyZWF0ZWQg b3INCj4gY29uZmlndXJlZC4NCj4gQEAgLTEyMjQsMTUgKzEyNDEsNjIgQEAgSHR0cENvbm5lY3RU Y3A0ICgNCj4gICAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ICAgIH0gZWxzZSBpZiAoVGNwNFN0 YXRlID4gVGNwNFN0YXRlRXN0YWJsaXNoZWQgKSB7DQo+ICAgICAgSHR0cENsb3NlQ29ubmVjdGlv bihIdHRwSW5zdGFuY2UpOw0KPiAgICB9DQo+IA0KPiAtICByZXR1cm4gSHR0cENyZWF0ZUNvbm5l Y3Rpb24gKEh0dHBJbnN0YW5jZSk7DQo+ICsgIFN0YXR1cyA9IEh0dHBDcmVhdGVDb25uZWN0aW9u IChIdHRwSW5zdGFuY2UpOw0KPiArICBpZiAoRUZJX0VSUk9SKFN0YXR1cykpew0KPiArICAgIERF QlVHICgoRUZJX0RfRVJST1IsICJUY3A0IENvbm5lY3Rpb24gZmFpbCAtICV4XG4iLCBTdGF0dXMp KTsNCj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8g VGxzIHNlc3Npb24gY29ubmVjdGlvbi4NCj4gKyAgLy8NCj4gKyAgaWYgKEh0dHBJbnN0YW5jZS0+ VXNlSHR0cHMpIHsNCj4gKyAgICBpZiAoSHR0cEluc3RhbmNlLT5UaW1lb3V0RXZlbnQgPT0gTlVM TCkgew0KPiArICAgICAgLy8NCj4gKyAgICAgIC8vIENyZWF0ZSBUaW1lb3V0RXZlbnQgZm9yIFRM UyBjb25uZWN0aW9uLg0KPiArICAgICAgLy8NCj4gKyAgICAgIFN0YXR1cyA9IGdCUy0+Q3JlYXRl RXZlbnQgKA0KPiArICAgICAgICAgICAgICAgICAgICAgIEVWVF9USU1FUiwNCj4gKyAgICAgICAg ICAgICAgICAgICAgICBUUExfQ0FMTEJBQ0ssDQo+ICsgICAgICAgICAgICAgICAgICAgICAgTlVM TCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICBOVUxMLA0KPiArICAgICAgICAgICAgICAgICAg ICAgICZIdHRwSW5zdGFuY2UtPlRpbWVvdXRFdmVudA0KPiArICAgICAgICAgICAgICAgICAgICAg ICk7DQo+ICsgICAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICAgIFRsc0Ns b3NlVHhSeEV2ZW50IChIdHRwSW5zdGFuY2UpOw0KPiArICAgICAgICByZXR1cm4gU3RhdHVzOw0K PiArICAgICAgfQ0KPiArICAgIH0NCj4gKw0KPiArICAgIC8vDQo+ICsgICAgLy8gU3RhcnQgdGhl IHRpbWVyLCBhbmQgd2FpdCBUaW1lb3V0IHNlY29uZHMgZm9yIGNvbm5lY3Rpb24uDQo+ICsgICAg Ly8NCj4gKyAgICBTdGF0dXMgPSBnQlMtPlNldFRpbWVyIChIdHRwSW5zdGFuY2UtPlRpbWVvdXRF dmVudCwgVGltZXJSZWxhdGl2ZSwNCj4gSFRUUF9DT05ORUNUSU9OX1RJTUVPVVQgKiBUSUNLU19Q RVJfU0VDT05EKTsNCj4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICBU bHNDbG9zZVR4UnhFdmVudCAoSHR0cEluc3RhbmNlKTsNCj4gKyAgICAgIHJldHVybiBTdGF0dXM7 DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgU3RhdHVzID0gVGxzQ29ubmVjdFNlc3Npb24gKEh0dHBJ bnN0YW5jZSwgSHR0cEluc3RhbmNlLT5UaW1lb3V0RXZlbnQpOw0KPiArDQo+ICsgICAgZ0JTLT5T ZXRUaW1lciAoSHR0cEluc3RhbmNlLT5UaW1lb3V0RXZlbnQsIFRpbWVyQ2FuY2VsLCAwKTsNCj4g Kw0KPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgIFRsc0Nsb3NlVHhS eEV2ZW50IChIdHRwSW5zdGFuY2UpOw0KPiArICAgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgICB9 DQo+ICsgIH0NCj4gKw0KPiArICByZXR1cm4gU3RhdHVzOw0KPiAgfQ0KPiANCj4gIC8qKg0KPiAt ICBDaGVjayBleGlzdGluZyBUQ1AgY29ubmVjdGlvbiwgaWYgaW4gZXJyb3Igc3RhdGUsIHJlY292 ZXIgVENQNiBjb25uZWN0aW9uLg0KPiArICBDaGVjayBleGlzdGluZyBUQ1AgY29ubmVjdGlvbiwg aWYgaW4gZXJyb3Igc3RhdGUsIHJlY292ZXIgVENQNiBjb25uZWN0aW9uLg0KPiBUaGVuLA0KPiAr ICBjb25uZWN0IG9uZSBUTFMgc2Vzc2lvbiBpZiByZXF1aXJlZC4NCj4gDQo+ICAgIEBwYXJhbVtp bl0gIEh0dHBJbnN0YW5jZSAgICAgICBUaGUgSFRUUCBpbnN0YW5jZSBwcml2YXRlIGRhdGEuDQo+ IA0KPiAgICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgVGhlIFRDUCBjb25uZWN0aW9u IGlzIGVzdGFibGlzaGVkLg0KPiAgICBAcmV0dmFsIEVGSV9OT1RfUkVBRFkgICAgICAgICAgVENQ NiBwcm90b2NvbCBjaGlsZCBpcyBub3QgY3JlYXRlZCBvcg0KPiBjb25maWd1cmVkLg0KPiBAQCAt MTI2OSwzNCArMTMzMyw5MiBAQCBIdHRwQ29ubmVjdFRjcDYgKA0KPiAgICAgIHJldHVybiBFRklf U1VDQ0VTUzsNCj4gICAgfSBlbHNlIGlmIChUY3A2U3RhdGUgPiBUY3A2U3RhdGVFc3RhYmxpc2hl ZCApIHsNCj4gICAgICBIdHRwQ2xvc2VDb25uZWN0aW9uKEh0dHBJbnN0YW5jZSk7DQo+ICAgIH0N Cj4gDQo+IC0gIHJldHVybiBIdHRwQ3JlYXRlQ29ubmVjdGlvbiAoSHR0cEluc3RhbmNlKTsNCj4g KyAgU3RhdHVzID0gSHR0cENyZWF0ZUNvbm5lY3Rpb24gKEh0dHBJbnN0YW5jZSk7DQo+ICsgIGlm IChFRklfRVJST1IoU3RhdHVzKSl7DQo+ICsgICAgREVCVUcgKChFRklfRF9FUlJPUiwgIlRjcDYg Q29ubmVjdGlvbiBmYWlsIC0gJXhcbiIsIFN0YXR1cykpOw0KPiArICAgIHJldHVybiBTdGF0dXM7 DQo+ICsgIH0NCj4gKw0KPiArICAvLw0KPiArICAvLyBUbHMgc2Vzc2lvbiBjb25uZWN0aW9uLg0K PiArICAvLw0KPiArICBpZiAoSHR0cEluc3RhbmNlLT5Vc2VIdHRwcykgew0KPiArICAgIGlmIChI dHRwSW5zdGFuY2UtPlRpbWVvdXRFdmVudCA9PSBOVUxMKSB7DQo+ICsgICAgICAvLw0KPiArICAg ICAgLy8gQ3JlYXRlIFRpbWVvdXRFdmVudCBmb3IgVExTIGNvbm5lY3Rpb24uDQo+ICsgICAgICAv Lw0KPiArICAgICAgU3RhdHVzID0gZ0JTLT5DcmVhdGVFdmVudCAoDQo+ICsgICAgICAgICAgICAg ICAgICAgICAgRVZUX1RJTUVSLA0KPiArICAgICAgICAgICAgICAgICAgICAgIFRQTF9DQUxMQkFD SywNCj4gKyAgICAgICAgICAgICAgICAgICAgICBOVUxMLA0KPiArICAgICAgICAgICAgICAgICAg ICAgIE5VTEwsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgJkh0dHBJbnN0YW5jZS0+VGltZW91 dEV2ZW50DQo+ICsgICAgICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgICAgIGlmIChFRklfRVJS T1IgKFN0YXR1cykpIHsNCj4gKyAgICAgICAgVGxzQ2xvc2VUeFJ4RXZlbnQgKEh0dHBJbnN0YW5j ZSk7DQo+ICsgICAgICAgIHJldHVybiBTdGF0dXM7DQo+ICsgICAgICB9DQo+ICsgICAgfQ0KPiAr DQo+ICsgICAgLy8NCj4gKyAgICAvLyBTdGFydCB0aGUgdGltZXIsIGFuZCB3YWl0IFRpbWVvdXQg c2Vjb25kcyBmb3IgY29ubmVjdGlvbi4NCj4gKyAgICAvLw0KPiArICAgIFN0YXR1cyA9IGdCUy0+ U2V0VGltZXIgKEh0dHBJbnN0YW5jZS0+VGltZW91dEV2ZW50LCBUaW1lclJlbGF0aXZlLA0KPiBI VFRQX0NPTk5FQ1RJT05fVElNRU9VVCAqIFRJQ0tTX1BFUl9TRUNPTkQpOw0KPiArICAgIGlmIChF RklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgIFRsc0Nsb3NlVHhSeEV2ZW50IChIdHRwSW5z dGFuY2UpOw0KPiArICAgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBT dGF0dXMgPSBUbHNDb25uZWN0U2Vzc2lvbiAoSHR0cEluc3RhbmNlLCBIdHRwSW5zdGFuY2UtPlRp bWVvdXRFdmVudCk7DQo+ICsNCj4gKyAgICBnQlMtPlNldFRpbWVyIChIdHRwSW5zdGFuY2UtPlRp bWVvdXRFdmVudCwgVGltZXJDYW5jZWwsIDApOw0KPiArDQo+ICsgICAgaWYgKEVGSV9FUlJPUiAo U3RhdHVzKSkgew0KPiArICAgICAgVGxzQ2xvc2VUeFJ4RXZlbnQgKEh0dHBJbnN0YW5jZSk7DQo+ ICsgICAgICByZXR1cm4gU3RhdHVzOw0KPiArICAgIH0NCj4gKyAgfQ0KPiArDQo+ICsgIHJldHVy biBTdGF0dXM7DQo+ICB9DQo+IA0KPiAgLyoqDQo+IC0gIEluaXRpYWxpemUgVENQIHJlbGF0ZWQg ZGF0YS4NCj4gKyAgSW5pdGlhbGl6ZSBIdHRwIHNlc3Npb24uDQo+IA0KPiAgICBAcGFyYW1baW5d ICBIdHRwSW5zdGFuY2UgICAgICAgVGhlIEhUVFAgaW5zdGFuY2UgcHJpdmF0ZSBkYXRhLg0KPiAg ICBAcGFyYW1baW5dICBXcmFwICAgICAgICAgICAgICAgVGhlIEhUVFAgdG9rZW4ncyB3cmFwIGRh dGEuDQo+IC0gIEBwYXJhbVtpbl0gIENvbmZpZ3VyZSAgICAgICAgICBUaGUgRmxhZyBpbmRpY2F0 ZXMgd2hldGhlciB0aGUgZmlyc3QgdGltZSB0bw0KPiBpbml0aWFsaXplIFRjcC4NCj4gKyAgQHBh cmFtW2luXSAgQ29uZmlndXJlICAgICAgICAgIFRoZSBGbGFnIGluZGljYXRlcyB3aGV0aGVyIG5l ZWQgdG8gaW5pdGlhbGl6ZQ0KPiBzZXNzaW9uLg0KPiArICBAcGFyYW1baW5dICBUbHNDb25maWd1 cmUgICAgICAgVGhlIEZsYWcgaW5kaWNhdGVzIHdoZXRoZXIgaXQncyB0aGUgbmV3IFRscw0KPiBz ZXNzaW9uLg0KPiANCj4gLSAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgIFRoZSBpbml0 aWFsaXphdGlvbiBvZiBUQ1AgaW5zdGFuY2UgaXMgZG9uZS4NCj4gKyAgQHJldHZhbCBFRklfU1VD Q0VTUyAgICAgICAgICAgIFRoZSBpbml0aWFsaXphdGlvbiBvZiBzZXNzaW9uIGlzIGRvbmUuDQo+ ICAgIEByZXR2YWwgT3RoZXJzICAgICAgICAgICAgICAgICBPdGhlciBlcnJvciBhcyBpbmRpY2F0 ZWQuDQo+IA0KPiAgKiovDQo+ICBFRklfU1RBVFVTDQo+IC1IdHRwSW5pdFRjcCAoDQo+ICtIdHRw SW5pdFNlc3Npb24gKA0KPiAgICBJTiAgSFRUUF9QUk9UT0NPTCAgICAqSHR0cEluc3RhbmNlLA0K PiAgICBJTiAgSFRUUF9UT0tFTl9XUkFQICAqV3JhcCwNCj4gLSAgSU4gIEJPT0xFQU4gICAgICAg ICAgQ29uZmlndXJlDQo+ICsgIElOICBCT09MRUFOICAgICAgICAgIENvbmZpZ3VyZSwNCj4gKyAg SU4gIEJPT0xFQU4gICAgICAgICAgVGxzQ29uZmlndXJlDQo+ICAgICkNCj4gIHsNCj4gICAgRUZJ X1NUQVRVUyAgICAgICAgICAgU3RhdHVzOw0KPiAgICBBU1NFUlQgKEh0dHBJbnN0YW5jZSAhPSBO VUxMKTsNCj4gDQo+ICsgIC8vDQo+ICsgIC8vIENvbmZpZ3VyZSBUbHMgc2Vzc2lvbi4NCj4gKyAg Ly8NCj4gKyAgaWYgKFRsc0NvbmZpZ3VyZSkgew0KPiArICAgIFN0YXR1cyA9IFRsc0NvbmZpZ3Vy ZVNlc3Npb24gKEh0dHBJbnN0YW5jZSk7DQo+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkg ew0KPiArICAgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgICB9DQo+ICsgIH0NCj4gKw0KPiAgICBp ZiAoIUh0dHBJbnN0YW5jZS0+TG9jYWxBZGRyZXNzSXNJUHY2KSB7DQo+ICAgICAgLy8NCj4gICAg ICAvLyBDb25maWd1cmUgVENQIGluc3RhbmNlLg0KPiAgICAgIC8vDQo+ICAgICAgaWYgKENvbmZp Z3VyZSkgew0KPiBAQCAtMTMzNiwxMSArMTQ1OCwxMSBAQCBIdHRwSW5pdFRjcCAoDQo+ICAgIHJl dHVybiBFRklfU1VDQ0VTUzsNCj4gDQo+ICB9DQo+IA0KPiAgLyoqDQo+IC0gIFNlbmQgdGhlIEhU VFAgbWVzc2FnZSB0aHJvdWdoIFRDUDQgb3IgVENQNi4NCj4gKyAgU2VuZCB0aGUgSFRUUCBvciBI VFRQUyBtZXNzYWdlIHRocm91Z2ggVENQNCBvciBUQ1A2Lg0KPiANCj4gICAgQHBhcmFtW2luXSAg SHR0cEluc3RhbmNlICAgICAgIFRoZSBIVFRQIGluc3RhbmNlIHByaXZhdGUgZGF0YS4NCj4gICAg QHBhcmFtW2luXSAgV3JhcCAgICAgICAgICAgICAgIFRoZSBIVFRQIHRva2VuJ3Mgd3JhcCBkYXRh Lg0KPiAgICBAcGFyYW1baW5dICBUeFN0cmluZyAgICAgICAgICAgQnVmZmVyIGNvbnRhaW5pbmcg dGhlIEhUVFAgbWVzc2FnZSBzdHJpbmcuDQo+ICAgIEBwYXJhbVtpbl0gIFR4U3RyaW5nTGVuICAg ICAgICBMZW5ndGggb2YgdGhlIEhUVFAgbWVzc2FnZSBzdHJpbmcgaW4gYnl0ZXMuDQo+IEBAIC0x MzYwLDE4ICsxNDgyLDY4IEBAIEh0dHBUcmFuc21pdFRjcCAoDQo+ICAgIEVGSV9TVEFUVVMgICAg ICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gICAgRUZJX1RDUDRfSU9fVE9LRU4gICAgICAgICAg ICAgKlR4NFRva2VuOw0KPiAgICBFRklfVENQNF9QUk9UT0NPTCAgICAgICAgICAgICAqVGNwNDsN Cj4gICAgRUZJX1RDUDZfSU9fVE9LRU4gICAgICAgICAgICAgKlR4NlRva2VuOw0KPiAgICBFRklf VENQNl9QUk9UT0NPTCAgICAgICAgICAgICAqVGNwNjsNCj4gKyAgVUlOVDggICAgICAgICAgICAg ICAgICAgICAgICAgKkJ1ZmZlcjsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAg QnVmZmVyU2l6ZTsNCj4gKyAgTkVUX0ZSQUdNRU5UICAgICAgICAgICAgICAgICAgVGVtcEZyYWdt ZW50Ow0KPiArDQo+ICsgIFN0YXR1cyAgICAgICAgICAgICAgICA9IEVGSV9TVUNDRVNTOw0KPiAr ICBCdWZmZXIgICAgICAgICAgICAgICAgPSBOVUxMOw0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIE5l ZWQgdG8gZW5jcnlwdCBkYXRhLg0KPiArICAvLw0KPiArICBpZiAoSHR0cEluc3RhbmNlLT5Vc2VI dHRwcykgew0KPiArICAgIC8vDQo+ICsgICAgLy8gQnVpbGQgQnVmZmVyT3V0IGRhdGENCj4gKyAg ICAvLw0KPiArICAgIEJ1ZmZlclNpemUgPSBzaXplb2YgKFRMU19SRUNPUkRfSEVBREVSKSArIFR4 U3RyaW5nTGVuOw0KPiArICAgIEJ1ZmZlciAgICAgPSBBbGxvY2F0ZVplcm9Qb29sIChCdWZmZXJT aXplKTsNCj4gKyAgICBpZiAoQnVmZmVyID09IE5VTEwpIHsNCj4gKyAgICAgIFN0YXR1cyA9IEVG SV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiArICAgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgICB9DQo+ ICsgICAgKChUTFNfUkVDT1JEX0hFQURFUiAqKSBCdWZmZXIpLT5Db250ZW50VHlwZSA9DQo+IFRM U19DT05URU5UX1RZUEVfQVBQTElDQVRJT05fREFUQTsNCj4gKyAgICAoKFRMU19SRUNPUkRfSEVB REVSICopIEJ1ZmZlciktPlZlcnNpb24uTWFqb3IgPSBIdHRwSW5zdGFuY2UtDQo+ID5UbHNDb25m aWdEYXRhLlZlcnNpb24uTWFqb3I7DQo+ICsgICAgKChUTFNfUkVDT1JEX0hFQURFUiAqKSBCdWZm ZXIpLT5WZXJzaW9uLk1pbm9yID0gSHR0cEluc3RhbmNlLQ0KPiA+VGxzQ29uZmlnRGF0YS5WZXJz aW9uLk1pbm9yOw0KPiArICAgICgoVExTX1JFQ09SRF9IRUFERVIgKikgQnVmZmVyKS0+TGVuZ3Ro ID0gKFVJTlQxNikgKFR4U3RyaW5nTGVuKTsNCj4gKyAgICBDb3B5TWVtIChCdWZmZXIgKyBzaXpl b2YgKFRMU19SRUNPUkRfSEVBREVSKSwgVHhTdHJpbmcsIFR4U3RyaW5nTGVuKTsNCj4gKw0KPiAr ICAgIC8vDQo+ICsgICAgLy8gRW5jcnlwdCBQYWNrZXQuDQo+ICsgICAgLy8NCj4gKyAgICBTdGF0 dXMgPSBUbHNQcm9jZXNzTWVzc2FnZSAoDQo+ICsgICAgICAgICAgICAgICBIdHRwSW5zdGFuY2Us DQo+ICsgICAgICAgICAgICAgICBCdWZmZXIsDQo+ICsgICAgICAgICAgICAgICBCdWZmZXJTaXpl LA0KPiArICAgICAgICAgICAgICAgRWZpVGxzRW5jcnlwdCwNCj4gKyAgICAgICAgICAgICAgICZU ZW1wRnJhZ21lbnQNCj4gKyAgICAgICAgICAgICAgICk7DQo+ICsNCj4gKyAgICBGcmVlUG9vbCAo QnVmZmVyKTsNCj4gKw0KPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAg IHJldHVybiBTdGF0dXM7DQo+ICsgICAgfQ0KPiArICB9DQo+IA0KPiAtICBpZiAoIUh0dHBJbnN0 YW5jZS0+TG9jYWxBZGRyZXNzSXNJUHY2KSB7DQo+ICsgIGlmICghSHR0cEluc3RhbmNlLT5Mb2Nh bEFkZHJlc3NJc0lQdjYpIHsNCj4gICAgICBUY3A0ID0gSHR0cEluc3RhbmNlLT5UY3A0Ow0KPiAg ICAgIFR4NFRva2VuID0gJldyYXAtPlRjcFdyYXAuVHg0VG9rZW47DQo+ICsNCj4gKyAgICBpZiAo SHR0cEluc3RhbmNlLT5Vc2VIdHRwcykgew0KPiArICAgICAgVHg0VG9rZW4tPlBhY2tldC5UeERh dGEtPkRhdGFMZW5ndGggPSBUZW1wRnJhZ21lbnQuTGVuOw0KPiArICAgICAgVHg0VG9rZW4tPlBh Y2tldC5UeERhdGEtPkZyYWdtZW50VGFibGVbMF0uRnJhZ21lbnRMZW5ndGggPQ0KPiBUZW1wRnJh Z21lbnQuTGVuOw0KPiArICAgICAgVHg0VG9rZW4tPlBhY2tldC5UeERhdGEtPkZyYWdtZW50VGFi bGVbMF0uRnJhZ21lbnRCdWZmZXIgPSAoVk9JRA0KPiAqKSBUZW1wRnJhZ21lbnQuQnVsazsNCj4g KyAgICB9IGVsc2Ugew0KPiArICAgICAgVHg0VG9rZW4tPlBhY2tldC5UeERhdGEtPkRhdGFMZW5n dGggPSAoVUlOVDMyKSBUeFN0cmluZ0xlbjsNCj4gKyAgICAgIFR4NFRva2VuLT5QYWNrZXQuVHhE YXRhLT5GcmFnbWVudFRhYmxlWzBdLkZyYWdtZW50TGVuZ3RoID0NCj4gKFVJTlQzMikgVHhTdHJp bmdMZW47DQo+ICsgICAgICBUeDRUb2tlbi0+UGFja2V0LlR4RGF0YS0+RnJhZ21lbnRUYWJsZVsw XS5GcmFnbWVudEJ1ZmZlciA9IChWT0lEDQo+ICopIFR4U3RyaW5nOw0KPiArICAgIH0NCj4gDQo+ IC0gICAgVHg0VG9rZW4tPlBhY2tldC5UeERhdGEtPkRhdGFMZW5ndGggPSAoVUlOVDMyKSBUeFN0 cmluZ0xlbjsNCj4gLSAgICBUeDRUb2tlbi0+UGFja2V0LlR4RGF0YS0+RnJhZ21lbnRUYWJsZVsw XS5GcmFnbWVudExlbmd0aCA9IChVSU5UMzIpDQo+IFR4U3RyaW5nTGVuOw0KPiAtICAgIFR4NFRv a2VuLT5QYWNrZXQuVHhEYXRhLT5GcmFnbWVudFRhYmxlWzBdLkZyYWdtZW50QnVmZmVyID0gKFZP SUQgKikNCj4gVHhTdHJpbmc7DQo+ICAgICAgVHg0VG9rZW4tPkNvbXBsZXRpb25Ub2tlbi5TdGF0 dXMgPSBFRklfTk9UX1JFQURZOw0KPiANCj4gICAgICBXcmFwLT5UY3BXcmFwLklzVHhEb25lID0g RkFMU0U7DQo+ICAgICAgU3RhdHVzICA9IFRjcDQtPlRyYW5zbWl0IChUY3A0LCBUeDRUb2tlbik7 DQo+ICAgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiBAQCAtMTM4MCwyNSArMTU1Miwz MSBAQCBIdHRwVHJhbnNtaXRUY3AgKA0KPiAgICAgIH0NCj4gDQo+ICAgIH0gZWxzZSB7DQo+ICAg ICAgVGNwNiA9IEh0dHBJbnN0YW5jZS0+VGNwNjsNCj4gICAgICBUeDZUb2tlbiA9ICZXcmFwLT5U Y3BXcmFwLlR4NlRva2VuOw0KPiAtDQo+IC0gICAgVHg2VG9rZW4tPlBhY2tldC5UeERhdGEtPkRh dGFMZW5ndGggPSAoVUlOVDMyKSBUeFN0cmluZ0xlbjsNCj4gLSAgICBUeDZUb2tlbi0+UGFja2V0 LlR4RGF0YS0+RnJhZ21lbnRUYWJsZVswXS5GcmFnbWVudExlbmd0aCA9IChVSU5UMzIpDQo+IFR4 U3RyaW5nTGVuOw0KPiAtICAgIFR4NlRva2VuLT5QYWNrZXQuVHhEYXRhLT5GcmFnbWVudFRhYmxl WzBdLkZyYWdtZW50QnVmZmVyID0gKFZPSUQgKikNCj4gVHhTdHJpbmc7DQo+ICsNCj4gKyAgICBp ZiAoSHR0cEluc3RhbmNlLT5Vc2VIdHRwcykgew0KPiArICAgICAgVHg2VG9rZW4tPlBhY2tldC5U eERhdGEtPkRhdGFMZW5ndGggPSBUZW1wRnJhZ21lbnQuTGVuOw0KPiArICAgICAgVHg2VG9rZW4t PlBhY2tldC5UeERhdGEtPkZyYWdtZW50VGFibGVbMF0uRnJhZ21lbnRMZW5ndGggPQ0KPiBUZW1w RnJhZ21lbnQuTGVuOw0KPiArICAgICAgVHg2VG9rZW4tPlBhY2tldC5UeERhdGEtPkZyYWdtZW50 VGFibGVbMF0uRnJhZ21lbnRCdWZmZXIgPSAoVk9JRA0KPiAqKSBUZW1wRnJhZ21lbnQuQnVsazsN Cj4gKyAgICB9IGVsc2Ugew0KPiArICAgICAgVHg2VG9rZW4tPlBhY2tldC5UeERhdGEtPkRhdGFM ZW5ndGggPSAoVUlOVDMyKSBUeFN0cmluZ0xlbjsNCj4gKyAgICAgIFR4NlRva2VuLT5QYWNrZXQu VHhEYXRhLT5GcmFnbWVudFRhYmxlWzBdLkZyYWdtZW50TGVuZ3RoID0NCj4gKFVJTlQzMikgVHhT dHJpbmdMZW47DQo+ICsgICAgICBUeDZUb2tlbi0+UGFja2V0LlR4RGF0YS0+RnJhZ21lbnRUYWJs ZVswXS5GcmFnbWVudEJ1ZmZlciA9IChWT0lEDQo+ICopIFR4U3RyaW5nOw0KPiArICAgIH0NCj4g Kw0KPiAgICAgIFR4NlRva2VuLT5Db21wbGV0aW9uVG9rZW4uU3RhdHVzID0gRUZJX05PVF9SRUFE WTsNCj4gDQo+ICAgICAgV3JhcC0+VGNwV3JhcC5Jc1R4RG9uZSA9IEZBTFNFOw0KPiAgICAgIFN0 YXR1cyA9IFRjcDYtPlRyYW5zbWl0IChUY3A2LCBUeDZUb2tlbik7DQo+ICAgICAgaWYgKEVGSV9F UlJPUiAoU3RhdHVzKSkgew0KPiAgICAgICAgREVCVUcgKChFRklfRF9FUlJPUiwgIlRyYW5zbWl0 IGZhaWxlZDogJXJcbiIsIFN0YXR1cykpOw0KPiAgICAgICAgcmV0dXJuIFN0YXR1czsNCj4gICAg ICB9DQo+ICAgIH0NCj4gDQo+IC0NCj4gICAgcmV0dXJuIFN0YXR1czsNCj4gIH0NCj4gDQo+ICAv KioNCj4gICAgQ2hlY2sgd2hldGhlciB0aGUgdXNlcidzIHRva2VuIG9yIGV2ZW50IGhhcyBhbHJl YWR5DQo+IEBAIC0xNDY0LDExICsxNjQyLDExIEBAIEh0dHBUY3BOb3RSZWFkeSAoDQo+IA0KPiAg ICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ICB9DQo+IA0KPiAgLyoqDQo+IC0gIFRyYW5zbWl0IHRo ZSBIVFRQIG1zc2FnZSBieSBwcm9jZXNzaW5nIHRoZSBhc3NvY2lhdGVkIEhUVFAgdG9rZW4uDQo+ ICsgIFRyYW5zbWl0IHRoZSBIVFRQIG9yIEhUVFBTIG1zc2FnZSBieSBwcm9jZXNzaW5nIHRoZSBh c3NvY2lhdGVkIEhUVFANCj4gdG9rZW4uDQo+IA0KPiAgICBAcGFyYW1baW5dICBNYXAgICAgICAg ICAgICAgICAgVGhlIGNvbnRhaW5lciBvZiBUeDRUb2tlbiBvciBUeDZUb2tlbi4NCj4gICAgQHBh cmFtW2luXSAgSXRlbSAgICAgICAgICAgICAgIEN1cnJlbnQgaXRlbSB0byBjaGVjayBhZ2FpbnN0 Lg0KPiAgICBAcGFyYW1baW5dICBDb250ZXh0ICAgICAgICAgICAgVGhlIFRva2VuIHRvIGNoZWNr IGFnYWluaXN0Lg0KPiANCj4gQEAgLTE1ODgsMTY3ICsxNzY2LDIzNSBAQCBIdHRwVGNwUmVjZWl2 ZUhlYWRlciAoDQo+ICAgIEVGSV9UQ1A2X0lPX1RPS0VOICAgICAgICAgICAgICpSeDZUb2tlbjsN Cj4gICAgRUZJX1RDUDZfUFJPVE9DT0wgICAgICAgICAgICAgKlRjcDY7DQo+ICAgIENIQVI4ICAg ICAgICAgICAgICAgICAgICAgICAgICoqRW5kb2ZIZWFkZXI7DQo+ICAgIENIQVI4ICAgICAgICAg ICAgICAgICAgICAgICAgICoqSHR0cEhlYWRlcnM7DQo+ICAgIENIQVI4ICAgICAgICAgICAgICAg ICAgICAgICAgICpCdWZmZXI7DQo+ICsgIE5FVF9GUkFHTUVOVCAgICAgICAgICAgICAgICAgIEZy YWdtZW50Ow0KPiANCj4gICAgQVNTRVJUIChIdHRwSW5zdGFuY2UgIT0gTlVMTCk7DQo+IA0KPiAg ICBFbmRvZkhlYWRlciA9IEh0dHBJbnN0YW5jZS0+RW5kb2ZIZWFkZXI7DQo+ICAgIEh0dHBIZWFk ZXJzID0gSHR0cEluc3RhbmNlLT5IdHRwSGVhZGVyczsNCj4gICAgVGNwNCA9IEh0dHBJbnN0YW5j ZS0+VGNwNDsNCj4gICAgVGNwNiA9IEh0dHBJbnN0YW5jZS0+VGNwNjsNCj4gICAgQnVmZmVyICAg ICAgPSBOVUxMOw0KPiAgICBSeDRUb2tlbiAgICA9IE5VTEw7DQo+ICAgIFJ4NlRva2VuICAgID0g TlVMTDsNCj4gKyAgRnJhZ21lbnQuTGVuICA9IDA7DQo+ICsgIEZyYWdtZW50LkJ1bGsgPSBOVUxM Ow0KPiANCj4gICAgaWYgKEh0dHBJbnN0YW5jZS0+TG9jYWxBZGRyZXNzSXNJUHY2KSB7DQo+ICAg ICAgQVNTRVJUIChUY3A2ICE9IE5VTEwpOw0KPiAgICB9IGVsc2Ugew0KPiAgICAgIEFTU0VSVCAo VGNwNCAhPSBOVUxMKTsNCj4gICAgfQ0KPiANCj4gLSAgaWYgKCFIdHRwSW5zdGFuY2UtPkxvY2Fs QWRkcmVzc0lzSVB2Nikgew0KPiAtICAgIFJ4NFRva2VuID0gJkh0dHBJbnN0YW5jZS0+Ung0VG9r ZW47DQo+IC0gICAgUng0VG9rZW4tPlBhY2tldC5SeERhdGEtPkZyYWdtZW50VGFibGVbMF0uRnJh Z21lbnRCdWZmZXIgPQ0KPiBBbGxvY2F0ZVplcm9Qb29sIChERUZfQlVGX0xFTik7DQo+IC0gICAg aWYgKFJ4NFRva2VuLT5QYWNrZXQuUnhEYXRhLT5GcmFnbWVudFRhYmxlWzBdLkZyYWdtZW50QnVm ZmVyID09DQo+IE5VTEwpIHsNCj4gLSAgICAgIFN0YXR1cyA9IEVGSV9PVVRfT0ZfUkVTT1VSQ0VT Ow0KPiArICBpZiAoIUh0dHBJbnN0YW5jZS0+VXNlSHR0cHMpIHsNCj4gKyAgICBTdGF0dXMgPSBI dHRwQ3JlYXRlVGNwUnhFdmVudEZvckhlYWRlciAoSHR0cEluc3RhbmNlKTsNCj4gKyAgICBpZiAo RUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICAgICAgICByZXR1cm4gU3RhdHVzOw0KPiAgICAgIH0N Cj4gKyAgfQ0KPiArDQo+ICsgIGlmICghSHR0cEluc3RhbmNlLT5Mb2NhbEFkZHJlc3NJc0lQdjYp IHsNCj4gKyAgICBpZiAoIUh0dHBJbnN0YW5jZS0+VXNlSHR0cHMpIHsNCj4gKyAgICAgIFJ4NFRv a2VuID0gJkh0dHBJbnN0YW5jZS0+Ung0VG9rZW47DQo+ICsgICAgICBSeDRUb2tlbi0+UGFja2V0 LlJ4RGF0YS0+RnJhZ21lbnRUYWJsZVswXS5GcmFnbWVudEJ1ZmZlciA9DQo+IEFsbG9jYXRlWmVy b1Bvb2wgKERFRl9CVUZfTEVOKTsNCj4gKyAgICAgIGlmIChSeDRUb2tlbi0+UGFja2V0LlJ4RGF0 YS0+RnJhZ21lbnRUYWJsZVswXS5GcmFnbWVudEJ1ZmZlciA9PQ0KPiBOVUxMKSB7DQo+ICsgICAg ICAgIFN0YXR1cyA9IEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiArICAgICAgICByZXR1cm4gU3Rh dHVzOw0KPiArICAgICAgfQ0KPiArICAgIH0NCj4gDQo+ICAgICAgLy8NCj4gICAgICAvLyBSZWNl aXZlIHRoZSBIVFRQIGhlYWRlcnMgb25seSB3aGVuIEVGSV9IVFRQX1JFU1BPTlNFX0RBVEEgaXMg bm90DQo+IE5VTEwuDQo+ICAgICAgLy8NCj4gLSAgICB3aGlsZSAoKkVuZG9mSGVhZGVyID09IE5V TEwpIHsNCj4gLSAgICAgIEh0dHBJbnN0YW5jZS0+SXNSeERvbmUgPSBGQUxTRTsNCj4gLSAgICAg IFJ4NFRva2VuLT5QYWNrZXQuUnhEYXRhLT5EYXRhTGVuZ3RoID0gREVGX0JVRl9MRU47DQo+IC0g ICAgICBSeDRUb2tlbi0+UGFja2V0LlJ4RGF0YS0+RnJhZ21lbnRUYWJsZVswXS5GcmFnbWVudExl bmd0aCA9DQo+IERFRl9CVUZfTEVOOw0KPiAtICAgICAgU3RhdHVzID0gVGNwNC0+UmVjZWl2ZSAo VGNwNCwgUng0VG9rZW4pOw0KPiAtICAgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiAt ICAgICAgICBERUJVRyAoKEVGSV9EX0VSUk9SLCAiVGNwNCByZWNlaXZlIGZhaWxlZDogJXJcbiIs IFN0YXR1cykpOw0KPiAtICAgICAgICByZXR1cm4gU3RhdHVzOw0KPiAtICAgICAgfQ0KPiAtDQo+ IC0gICAgICB3aGlsZSAoIUh0dHBJbnN0YW5jZS0+SXNSeERvbmUgJiYgKChUaW1lb3V0ID09IE5V TEwpIHx8IEVGSV9FUlJPUg0KPiAoZ0JTLT5DaGVja0V2ZW50IChUaW1lb3V0KSkpKSB7DQo+IC0g ICAgICAgIFRjcDQtPlBvbGwgKFRjcDQpOw0KPiArICAgIHdoaWxlICgqRW5kb2ZIZWFkZXIgPT0g TlVMTCkgew0KPiArICAgICAgaWYgKCFIdHRwSW5zdGFuY2UtPlVzZUh0dHBzKSB7DQo+ICsgICAg ICAgIEh0dHBJbnN0YW5jZS0+SXNSeERvbmUgPSBGQUxTRTsNCj4gKyAgICAgICAgUng0VG9rZW4t PlBhY2tldC5SeERhdGEtPkRhdGFMZW5ndGggPSBERUZfQlVGX0xFTjsNCj4gKyAgICAgICAgUng0 VG9rZW4tPlBhY2tldC5SeERhdGEtPkZyYWdtZW50VGFibGVbMF0uRnJhZ21lbnRMZW5ndGggPQ0K PiBERUZfQlVGX0xFTjsNCj4gKyAgICAgICAgU3RhdHVzID0gVGNwNC0+UmVjZWl2ZSAoVGNwNCwg Ung0VG9rZW4pOw0KPiArICAgICAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAg ICAgICAgREVCVUcgKChFRklfRF9FUlJPUiwgIlRjcDQgcmVjZWl2ZSBmYWlsZWQ6ICVyXG4iLCBT dGF0dXMpKTsNCj4gKyAgICAgICAgICByZXR1cm4gU3RhdHVzOw0KPiArICAgICAgICB9DQo+ICsN Cj4gKyAgICAgICAgd2hpbGUgKCFIdHRwSW5zdGFuY2UtPklzUnhEb25lICYmICgoVGltZW91dCA9 PSBOVUxMKSB8fCBFRklfRVJST1INCj4gKGdCUy0+Q2hlY2tFdmVudCAoVGltZW91dCkpKSkgew0K PiArICAgICAgICAgIFRjcDQtPlBvbGwgKFRjcDQpOw0KPiArICAgICAgICB9DQo+ICsNCj4gKyAg ICAgICAgaWYgKCFIdHRwSW5zdGFuY2UtPklzUnhEb25lKSB7DQo+ICsgICAgICAgICAgLy8NCj4g KyAgICAgICAgICAvLyBDYW5jbGUgdGhlIFRva2VuIGJlZm9yZSBjbG9zZSBpdHMgRXZlbnQuDQo+ ICsgICAgICAgICAgLy8NCj4gKyAgICAgICAgICBUY3A0LT5DYW5jZWwgKEh0dHBJbnN0YW5jZS0+ VGNwNCwgJlJ4NFRva2VuLT5Db21wbGV0aW9uVG9rZW4pOw0KPiArICAgICAgICAgIGdCUy0+Q2xv c2VFdmVudCAoUng0VG9rZW4tPkNvbXBsZXRpb25Ub2tlbi5FdmVudCk7DQo+ICsgICAgICAgICAg Ung0VG9rZW4tPkNvbXBsZXRpb25Ub2tlbi5TdGF0dXMgPSBFRklfVElNRU9VVDsNCj4gKyAgICAg ICAgfQ0KPiArDQo+ICsgICAgICAgIFN0YXR1cyA9IFJ4NFRva2VuLT5Db21wbGV0aW9uVG9rZW4u U3RhdHVzOw0KPiArICAgICAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICAg ICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgICAgICAgfQ0KPiArDQo+ICsgICAgICAgIEZyYWdtZW50 LkxlbiAgPSBSeDRUb2tlbi0+UGFja2V0LlJ4RGF0YS0NCj4gPkZyYWdtZW50VGFibGVbMF0uRnJh Z21lbnRMZW5ndGg7DQo+ICsgICAgICAgIEZyYWdtZW50LkJ1bGsgPSAoVUlOVDggKikgUng0VG9r ZW4tPlBhY2tldC5SeERhdGEtDQo+ID5GcmFnbWVudFRhYmxlWzBdLkZyYWdtZW50QnVmZmVyOw0K PiArICAgICAgfSBlbHNlIHsNCj4gKyAgICAgICAgaWYgKEZyYWdtZW50LkJ1bGsgIT0gTlVMTCkg ew0KPiArICAgICAgICAgIEZyZWVQb29sIChGcmFnbWVudC5CdWxrKTsNCj4gKyAgICAgICAgICBG cmFnbWVudC5CdWxrID0gTlVMTDsNCj4gKyAgICAgICAgfQ0KPiArDQo+ICsgICAgICAgIFN0YXR1 cyA9IEh0dHBzUmVjZWl2ZSAoSHR0cEluc3RhbmNlLCAmRnJhZ21lbnQsIFRpbWVvdXQpOw0KPiAr ICAgICAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICAgICAgREVCVUcgKChF RklfRF9FUlJPUiwgIlRjcDQgcmVjZWl2ZSBmYWlsZWQ6ICVyXG4iLCBTdGF0dXMpKTsNCj4gKyAg ICAgICAgICByZXR1cm4gU3RhdHVzOw0KPiArICAgICAgICB9DQo+ICAgICAgICB9DQo+IA0KPiAt ICAgICAgaWYgKCFIdHRwSW5zdGFuY2UtPklzUnhEb25lKSB7DQo+IC0gICAgICAgIC8vDQo+IC0g ICAgICAgIC8vIENhbmNsZSB0aGUgVG9rZW4gYmVmb3JlIGNsb3NlIGl0cyBFdmVudC4NCj4gLSAg ICAgICAgLy8NCj4gLSAgICAgICAgVGNwNC0+Q2FuY2VsIChIdHRwSW5zdGFuY2UtPlRjcDQsICZS eDRUb2tlbi0+Q29tcGxldGlvblRva2VuKTsNCj4gLSAgICAgICAgZ0JTLT5DbG9zZUV2ZW50IChS eDRUb2tlbi0+Q29tcGxldGlvblRva2VuLkV2ZW50KTsNCj4gLSAgICAgICAgUng0VG9rZW4tPkNv bXBsZXRpb25Ub2tlbi5TdGF0dXMgPSBFRklfVElNRU9VVDsNCj4gLSAgICAgIH0NCj4gLQ0KPiAt ICAgICAgU3RhdHVzID0gUng0VG9rZW4tPkNvbXBsZXRpb25Ub2tlbi5TdGF0dXM7DQo+IC0gICAg ICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+IC0gICAgICAgIHJldHVybiBTdGF0dXM7DQo+ IC0gICAgICB9DQo+IC0NCj4gICAgICAgIC8vDQo+ICAgICAgICAvLyBBcHBlbmQgdGhlIHJlc3Bv bnNlIHN0cmluZy4NCj4gICAgICAgIC8vDQo+IC0gICAgICAqQnVmZmVyU2l6ZSA9ICgqU2l6ZW9m SGVhZGVycykgKyBSeDRUb2tlbi0+UGFja2V0LlJ4RGF0YS0NCj4gPkZyYWdtZW50VGFibGVbMF0u RnJhZ21lbnRMZW5ndGg7DQo+ICsgICAgICAqQnVmZmVyU2l6ZSA9ICpTaXplb2ZIZWFkZXJzICsg RnJhZ21lbnQuTGVuOw0KPiAgICAgICAgQnVmZmVyICAgICAgPSBBbGxvY2F0ZVplcm9Qb29sICgq QnVmZmVyU2l6ZSk7DQo+ICAgICAgICBpZiAoQnVmZmVyID09IE5VTEwpIHsNCj4gICAgICAgICAg U3RhdHVzID0gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ICAgICAgICAgIHJldHVybiBTdGF0dXM7 DQo+ICAgICAgICB9DQo+IC0NCj4gKw0KPiAgICAgICAgaWYgKCpIdHRwSGVhZGVycyAhPSBOVUxM KSB7DQo+IC0gICAgICAgIENvcHlNZW0gKEJ1ZmZlciwgKkh0dHBIZWFkZXJzLCAoKlNpemVvZkhl YWRlcnMpKTsNCj4gKyAgICAgICAgQ29weU1lbSAoQnVmZmVyLCAqSHR0cEhlYWRlcnMsICpTaXpl b2ZIZWFkZXJzKTsNCj4gICAgICAgICAgRnJlZVBvb2wgKCpIdHRwSGVhZGVycyk7DQo+ICAgICAg ICB9DQo+IC0NCj4gKw0KPiAgICAgICAgQ29weU1lbSAoDQo+IC0gICAgICAgIEJ1ZmZlciArICgq U2l6ZW9mSGVhZGVycyksDQo+IC0gICAgICAgIFJ4NFRva2VuLT5QYWNrZXQuUnhEYXRhLT5GcmFn bWVudFRhYmxlWzBdLkZyYWdtZW50QnVmZmVyLA0KPiAtICAgICAgICBSeDRUb2tlbi0+UGFja2V0 LlJ4RGF0YS0+RnJhZ21lbnRUYWJsZVswXS5GcmFnbWVudExlbmd0aA0KPiArICAgICAgICBCdWZm ZXIgKyAqU2l6ZW9mSGVhZGVycywNCj4gKyAgICAgICAgRnJhZ21lbnQuQnVsaywNCj4gKyAgICAg ICAgRnJhZ21lbnQuTGVuDQo+ICAgICAgICAgICk7DQo+IC0gICAgICAqSHR0cEhlYWRlcnMgICAg PSBCdWZmZXI7DQo+IC0gICAgICAqU2l6ZW9mSGVhZGVycyAgPSAqQnVmZmVyU2l6ZTsNCj4gLQ0K PiArICAgICAgKkh0dHBIZWFkZXJzICAgPSBCdWZmZXI7DQo+ICsgICAgICAqU2l6ZW9mSGVhZGVy cyA9ICpCdWZmZXJTaXplOw0KPiArDQo+ICAgICAgICAvLw0KPiAgICAgICAgLy8gQ2hlY2sgd2hl dGhlciB3ZSByZWNlaXZlZCBlbmQgb2YgSFRUUCBoZWFkZXJzLg0KPiAgICAgICAgLy8NCj4gICAg ICAgICpFbmRvZkhlYWRlciA9IEFzY2lpU3RyU3RyICgqSHR0cEhlYWRlcnMsIEhUVFBfRU5EX09G X0hEUl9TVFIpOw0KPiAtICAgIH0NCj4gLSAgICBGcmVlUG9vbCAoUng0VG9rZW4tPlBhY2tldC5S eERhdGEtPkZyYWdtZW50VGFibGVbMF0uRnJhZ21lbnRCdWZmZXIpOw0KPiAtICAgIFJ4NFRva2Vu LT5QYWNrZXQuUnhEYXRhLT5GcmFnbWVudFRhYmxlWzBdLkZyYWdtZW50QnVmZmVyID0gTlVMTDsN Cj4gKyAgICB9Ow0KPiANCj4gKyAgICAvLw0KPiArICAgIC8vIEZyZWUgdGhlIGJ1ZmZlci4NCj4g KyAgICAvLw0KPiArICAgIGlmIChSeDRUb2tlbiAhPSBOVUxMICYmIFJ4NFRva2VuLT5QYWNrZXQu UnhEYXRhICE9IE5VTEwgJiYNCj4gUng0VG9rZW4tPlBhY2tldC5SeERhdGEtPkZyYWdtZW50VGFi bGVbMF0uRnJhZ21lbnRCdWZmZXIgIT0gTlVMTCkgew0KPiArICAgICAgRnJlZVBvb2wgKFJ4NFRv a2VuLT5QYWNrZXQuUnhEYXRhLQ0KPiA+RnJhZ21lbnRUYWJsZVswXS5GcmFnbWVudEJ1ZmZlcik7 DQo+ICsgICAgICBSeDRUb2tlbi0+UGFja2V0LlJ4RGF0YS0+RnJhZ21lbnRUYWJsZVswXS5GcmFn bWVudEJ1ZmZlciA9IE5VTEw7DQo+ICsgICAgICBGcmFnbWVudC5CdWxrID0gTlVMTDsNCj4gKyAg ICB9DQo+ICsNCj4gKyAgICBpZiAoRnJhZ21lbnQuQnVsayAhPSBOVUxMKSB7DQo+ICsgICAgICBG cmVlUG9vbCAoRnJhZ21lbnQuQnVsayk7DQo+ICsgICAgICBGcmFnbWVudC5CdWxrID0gTlVMTDsN Cj4gKyAgICB9DQo+ICAgIH0gZWxzZSB7DQo+IC0gICAgUng2VG9rZW4gPSAmSHR0cEluc3RhbmNl LT5SeDZUb2tlbjsNCj4gLSAgICBSeDZUb2tlbi0+UGFja2V0LlJ4RGF0YS0+RnJhZ21lbnRUYWJs ZVswXS5GcmFnbWVudEJ1ZmZlciA9DQo+IEFsbG9jYXRlWmVyb1Bvb2wgKERFRl9CVUZfTEVOKTsN Cj4gLSAgICBpZiAoUng2VG9rZW4tPlBhY2tldC5SeERhdGEtPkZyYWdtZW50VGFibGVbMF0uRnJh Z21lbnRCdWZmZXIgPT0NCj4gTlVMTCkgew0KPiAtICAgICAgU3RhdHVzID0gRUZJX09VVF9PRl9S RVNPVVJDRVM7DQo+IC0gICAgICByZXR1cm4gU3RhdHVzOw0KPiArICAgIGlmICghSHR0cEluc3Rh bmNlLT5Vc2VIdHRwcykgew0KPiArICAgICAgUng2VG9rZW4gPSAmSHR0cEluc3RhbmNlLT5SeDZU b2tlbjsNCj4gKyAgICAgIFJ4NlRva2VuLT5QYWNrZXQuUnhEYXRhLT5GcmFnbWVudFRhYmxlWzBd LkZyYWdtZW50QnVmZmVyID0NCj4gQWxsb2NhdGVaZXJvUG9vbCAoREVGX0JVRl9MRU4pOw0KPiAr ICAgICAgaWYgKFJ4NlRva2VuLT5QYWNrZXQuUnhEYXRhLT5GcmFnbWVudFRhYmxlWzBdLkZyYWdt ZW50QnVmZmVyID09DQo+IE5VTEwpIHsNCj4gKyAgICAgICAgU3RhdHVzID0gRUZJX09VVF9PRl9S RVNPVVJDRVM7DQo+ICsgICAgICAgIHJldHVybiBTdGF0dXM7DQo+ICsgICAgICB9DQo+ICAgICAg fQ0KPiANCj4gICAgICAvLw0KPiAgICAgIC8vIFJlY2VpdmUgdGhlIEhUVFAgaGVhZGVycyBvbmx5 IHdoZW4gRUZJX0hUVFBfUkVTUE9OU0VfREFUQSBpcyBub3QNCj4gTlVMTC4NCj4gICAgICAvLw0K PiAtICAgIHdoaWxlICgqRW5kb2ZIZWFkZXIgPT0gTlVMTCkgew0KPiAtICAgICAgSHR0cEluc3Rh bmNlLT5Jc1J4RG9uZSA9IEZBTFNFOw0KPiAtICAgICAgUng2VG9rZW4tPlBhY2tldC5SeERhdGEt PkRhdGFMZW5ndGggPSBERUZfQlVGX0xFTjsNCj4gLSAgICAgIFJ4NlRva2VuLT5QYWNrZXQuUnhE YXRhLT5GcmFnbWVudFRhYmxlWzBdLkZyYWdtZW50TGVuZ3RoID0NCj4gREVGX0JVRl9MRU47DQo+ IC0gICAgICBTdGF0dXMgPSBUY3A2LT5SZWNlaXZlIChUY3A2LCBSeDZUb2tlbik7DQo+IC0gICAg ICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+IC0gICAgICAgIERFQlVHICgoRUZJX0RfRVJS T1IsICJUY3A2IHJlY2VpdmUgZmFpbGVkOiAlclxuIiwgU3RhdHVzKSk7DQo+IC0gICAgICAgIHJl dHVybiBTdGF0dXM7DQo+IC0gICAgICB9DQo+IC0NCj4gLSAgICAgIHdoaWxlICghSHR0cEluc3Rh bmNlLT5Jc1J4RG9uZSAmJiAoKFRpbWVvdXQgPT0gTlVMTCkgfHwgRUZJX0VSUk9SDQo+IChnQlMt PkNoZWNrRXZlbnQgKFRpbWVvdXQpKSkpIHsNCj4gLSAgICAgICAgVGNwNi0+UG9sbCAoVGNwNik7 DQo+ICsgICAgd2hpbGUgKCpFbmRvZkhlYWRlciA9PSBOVUxMKSB7DQo+ICsgICAgICBpZiAoIUh0 dHBJbnN0YW5jZS0+VXNlSHR0cHMpIHsNCj4gKyAgICAgICAgSHR0cEluc3RhbmNlLT5Jc1J4RG9u ZSA9IEZBTFNFOw0KPiArICAgICAgICBSeDZUb2tlbi0+UGFja2V0LlJ4RGF0YS0+RGF0YUxlbmd0 aCA9IERFRl9CVUZfTEVOOw0KPiArICAgICAgICBSeDZUb2tlbi0+UGFja2V0LlJ4RGF0YS0+RnJh Z21lbnRUYWJsZVswXS5GcmFnbWVudExlbmd0aCA9DQo+IERFRl9CVUZfTEVOOw0KPiArICAgICAg ICBTdGF0dXMgPSBUY3A2LT5SZWNlaXZlIChUY3A2LCBSeDZUb2tlbik7DQo+ICsgICAgICAgIGlm IChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgICAgICBERUJVRyAoKEVGSV9EX0VSUk9S LCAiVGNwNiByZWNlaXZlIGZhaWxlZDogJXJcbiIsIFN0YXR1cykpOw0KPiArICAgICAgICAgIHJl dHVybiBTdGF0dXM7DQo+ICsgICAgICAgIH0NCj4gKw0KPiArICAgICAgICB3aGlsZSAoIUh0dHBJ bnN0YW5jZS0+SXNSeERvbmUgJiYgKChUaW1lb3V0ID09IE5VTEwpIHx8IEVGSV9FUlJPUg0KPiAo Z0JTLT5DaGVja0V2ZW50IChUaW1lb3V0KSkpKSB7DQo+ICsgICAgICAgICAgVGNwNi0+UG9sbCAo VGNwNik7DQo+ICsgICAgICAgIH0NCj4gKw0KPiArICAgICAgICBpZiAoIUh0dHBJbnN0YW5jZS0+ SXNSeERvbmUpIHsNCj4gKyAgICAgICAgICAvLw0KPiArICAgICAgICAgIC8vIENhbmNsZSB0aGUg VG9rZW4gYmVmb3JlIGNsb3NlIGl0cyBFdmVudC4NCj4gKyAgICAgICAgICAvLw0KPiArICAgICAg ICAgIFRjcDYtPkNhbmNlbCAoSHR0cEluc3RhbmNlLT5UY3A2LCAmUng2VG9rZW4tPkNvbXBsZXRp b25Ub2tlbik7DQo+ICsgICAgICAgICAgZ0JTLT5DbG9zZUV2ZW50IChSeDZUb2tlbi0+Q29tcGxl dGlvblRva2VuLkV2ZW50KTsNCj4gKyAgICAgICAgICBSeDZUb2tlbi0+Q29tcGxldGlvblRva2Vu LlN0YXR1cyA9IEVGSV9USU1FT1VUOw0KPiArICAgICAgICB9DQo+ICsNCj4gKyAgICAgICAgU3Rh dHVzID0gUng2VG9rZW4tPkNvbXBsZXRpb25Ub2tlbi5TdGF0dXM7DQo+ICsgICAgICAgIGlmIChF RklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgICAgICByZXR1cm4gU3RhdHVzOw0KPiArICAg ICAgICB9DQo+ICsNCj4gKyAgICAgICAgRnJhZ21lbnQuTGVuICA9IFJ4NlRva2VuLT5QYWNrZXQu UnhEYXRhLQ0KPiA+RnJhZ21lbnRUYWJsZVswXS5GcmFnbWVudExlbmd0aDsNCj4gKyAgICAgICAg RnJhZ21lbnQuQnVsayA9IChVSU5UOCAqKSBSeDZUb2tlbi0+UGFja2V0LlJ4RGF0YS0NCj4gPkZy YWdtZW50VGFibGVbMF0uRnJhZ21lbnRCdWZmZXI7DQo+ICsgICAgICB9IGVsc2Ugew0KPiArICAg ICAgICBpZiAoRnJhZ21lbnQuQnVsayAhPSBOVUxMKSB7DQo+ICsgICAgICAgICAgRnJlZVBvb2wg KEZyYWdtZW50LkJ1bGspOw0KPiArICAgICAgICAgIEZyYWdtZW50LkJ1bGsgPSBOVUxMOw0KPiAr ICAgICAgICB9DQo+ICsNCj4gKyAgICAgICAgU3RhdHVzID0gSHR0cHNSZWNlaXZlIChIdHRwSW5z dGFuY2UsICZGcmFnbWVudCwgVGltZW91dCk7DQo+ICsgICAgICAgIGlmIChFRklfRVJST1IgKFN0 YXR1cykpIHsNCj4gKyAgICAgICAgICBERUJVRyAoKEVGSV9EX0VSUk9SLCAiVGNwNiByZWNlaXZl IGZhaWxlZDogJXJcbiIsIFN0YXR1cykpOw0KPiArICAgICAgICAgIHJldHVybiBTdGF0dXM7DQo+ ICsgICAgICAgIH0NCj4gICAgICAgIH0NCj4gDQo+IC0gICAgICBpZiAoIUh0dHBJbnN0YW5jZS0+ SXNSeERvbmUpIHsNCj4gLSAgICAgICAgLy8NCj4gLSAgICAgICAgLy8gQ2FuY2xlIHRoZSBUb2tl biBiZWZvcmUgY2xvc2UgaXRzIEV2ZW50Lg0KPiAtICAgICAgICAvLw0KPiAtICAgICAgICBUY3A2 LT5DYW5jZWwgKEh0dHBJbnN0YW5jZS0+VGNwNiwgJlJ4NlRva2VuLT5Db21wbGV0aW9uVG9rZW4p Ow0KPiAtICAgICAgICBnQlMtPkNsb3NlRXZlbnQgKFJ4NlRva2VuLT5Db21wbGV0aW9uVG9rZW4u RXZlbnQpOw0KPiAtICAgICAgICBSeDZUb2tlbi0+Q29tcGxldGlvblRva2VuLlN0YXR1cyA9IEVG SV9USU1FT1VUOw0KPiAtICAgICAgfQ0KPiAtDQo+IC0gICAgICBTdGF0dXMgPSBSeDZUb2tlbi0+ Q29tcGxldGlvblRva2VuLlN0YXR1czsNCj4gLSAgICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykp IHsNCj4gLSAgICAgICAgcmV0dXJuIFN0YXR1czsNCj4gLSAgICAgIH0NCj4gLQ0KPiAgICAgICAg Ly8NCj4gICAgICAgIC8vIEFwcGVuZCB0aGUgcmVzcG9uc2Ugc3RyaW5nLg0KPiAgICAgICAgLy8N Cj4gLSAgICAgICpCdWZmZXJTaXplID0gKCpTaXplb2ZIZWFkZXJzKSArIFJ4NlRva2VuLT5QYWNr ZXQuUnhEYXRhLQ0KPiA+RnJhZ21lbnRUYWJsZVswXS5GcmFnbWVudExlbmd0aDsNCj4gKyAgICAg ICpCdWZmZXJTaXplID0gKlNpemVvZkhlYWRlcnMgKyBGcmFnbWVudC5MZW47DQo+ICAgICAgICBC dWZmZXIgICAgICA9IEFsbG9jYXRlWmVyb1Bvb2wgKCpCdWZmZXJTaXplKTsNCj4gICAgICAgIGlm IChCdWZmZXIgPT0gTlVMTCkgew0KPiAgICAgICAgICBTdGF0dXMgPSBFRklfT1VUX09GX1JFU09V UkNFUzsNCj4gICAgICAgICAgcmV0dXJuIFN0YXR1czsNCj4gICAgICAgIH0NCj4gLQ0KPiArDQo+ ICAgICAgICBpZiAoKkh0dHBIZWFkZXJzICE9IE5VTEwpIHsNCj4gLSAgICAgICAgQ29weU1lbSAo QnVmZmVyLCAqSHR0cEhlYWRlcnMsICgqU2l6ZW9mSGVhZGVycykpOw0KPiArICAgICAgICBDb3B5 TWVtIChCdWZmZXIsICpIdHRwSGVhZGVycywgKlNpemVvZkhlYWRlcnMpOw0KPiAgICAgICAgICBG cmVlUG9vbCAoKkh0dHBIZWFkZXJzKTsNCj4gICAgICAgIH0NCj4gLQ0KPiArDQo+ICAgICAgICBD b3B5TWVtICgNCj4gLSAgICAgICAgQnVmZmVyICsgKCpTaXplb2ZIZWFkZXJzKSwNCj4gLSAgICAg ICAgUng2VG9rZW4tPlBhY2tldC5SeERhdGEtPkZyYWdtZW50VGFibGVbMF0uRnJhZ21lbnRCdWZm ZXIsDQo+IC0gICAgICAgIFJ4NlRva2VuLT5QYWNrZXQuUnhEYXRhLT5GcmFnbWVudFRhYmxlWzBd LkZyYWdtZW50TGVuZ3RoDQo+ICsgICAgICAgIEJ1ZmZlciArICpTaXplb2ZIZWFkZXJzLA0KPiAr ICAgICAgICBGcmFnbWVudC5CdWxrLA0KPiArICAgICAgICBGcmFnbWVudC5MZW4NCj4gICAgICAg ICAgKTsNCj4gLSAgICAgICpIdHRwSGVhZGVycyAgICAgPSBCdWZmZXI7DQo+IC0gICAgICAqU2l6 ZW9mSGVhZGVycyAgPSAqQnVmZmVyU2l6ZTsNCj4gLQ0KPiArICAgICAgKkh0dHBIZWFkZXJzICAg PSBCdWZmZXI7DQo+ICsgICAgICAqU2l6ZW9mSGVhZGVycyA9ICpCdWZmZXJTaXplOw0KPiArDQo+ ICAgICAgICAvLw0KPiAgICAgICAgLy8gQ2hlY2sgd2hldGhlciB3ZSByZWNlaXZlZCBlbmQgb2Yg SFRUUCBoZWFkZXJzLg0KPiAgICAgICAgLy8NCj4gLSAgICAgICpFbmRvZkhlYWRlciA9IEFzY2lp U3RyU3RyICgqSHR0cEhlYWRlcnMsIEhUVFBfRU5EX09GX0hEUl9TVFIpOw0KPiAtDQo+ICsgICAg ICAqRW5kb2ZIZWFkZXIgPSBBc2NpaVN0clN0ciAoKkh0dHBIZWFkZXJzLCBIVFRQX0VORF9PRl9I RFJfU1RSKTsNCj4gKyAgICB9Ow0KPiArDQo+ICsgICAgLy8NCj4gKyAgICAvLyBGcmVlIHRoZSBi dWZmZXIuDQo+ICsgICAgLy8NCj4gKyAgICBpZiAoUng2VG9rZW4gIT0gTlVMTCAmJiBSeDZUb2tl bi0+UGFja2V0LlJ4RGF0YSAhPSBOVUxMICYmDQo+IFJ4NlRva2VuLT5QYWNrZXQuUnhEYXRhLT5G cmFnbWVudFRhYmxlWzBdLkZyYWdtZW50QnVmZmVyICE9IE5VTEwpIHsNCj4gKyAgICAgIEZyZWVQ b29sIChSeDZUb2tlbi0+UGFja2V0LlJ4RGF0YS0NCj4gPkZyYWdtZW50VGFibGVbMF0uRnJhZ21l bnRCdWZmZXIpOw0KPiArICAgICAgUng2VG9rZW4tPlBhY2tldC5SeERhdGEtPkZyYWdtZW50VGFi bGVbMF0uRnJhZ21lbnRCdWZmZXIgPSBOVUxMOw0KPiArICAgICAgRnJhZ21lbnQuQnVsayA9IE5V TEw7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgaWYgKEZyYWdtZW50LkJ1bGsgIT0gTlVMTCkgew0K PiArICAgICAgRnJlZVBvb2wgKEZyYWdtZW50LkJ1bGspOw0KPiArICAgICAgRnJhZ21lbnQuQnVs ayA9IE5VTEw7DQo+ICAgICAgfQ0KPiAtICAgIEZyZWVQb29sIChSeDZUb2tlbi0+UGFja2V0LlJ4 RGF0YS0+RnJhZ21lbnRUYWJsZVswXS5GcmFnbWVudEJ1ZmZlcik7DQo+IC0gICAgUng2VG9rZW4t PlBhY2tldC5SeERhdGEtPkZyYWdtZW50VGFibGVbMF0uRnJhZ21lbnRCdWZmZXIgPSBOVUxMOw0K PiAgICB9DQo+IA0KPiAgICAvLw0KPiAgICAvLyBTa2lwIHRoZSBDUkxGIGFmdGVyIHRoZSBIVFRQ IGhlYWRlcnMuDQo+ICAgIC8vDQo+IGRpZmYgLS1naXQgYS9OZXR3b3JrUGtnL0h0dHBEeGUvSHR0 cFByb3RvLmgNCj4gYi9OZXR3b3JrUGtnL0h0dHBEeGUvSHR0cFByb3RvLmgNCj4gaW5kZXggZTFm ZDc4NS4uZTNiMzI3NSAxMDA2NDQNCj4gLS0tIGEvTmV0d29ya1BrZy9IdHRwRHhlL0h0dHBQcm90 by5oDQo+ICsrKyBiL05ldHdvcmtQa2cvSHR0cER4ZS9IdHRwUHJvdG8uaA0KPiBAQCAtODEsMTAg KzgxLDI0IEBAIHR5cGVkZWYgc3RydWN0IHsNCj4gICAgQk9PTEVBTiAgICAgICAgICAgICAgICAg ICAgICAgSXNSeERvbmU7DQo+ICAgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgIEJvZHlM ZW47DQo+ICAgIEVGSV9IVFRQX01FVEhPRCAgICAgICAgICAgICAgIE1ldGhvZDsNCj4gIH0gSFRU UF9UQ1BfVE9LRU5fV1JBUDsNCj4gDQo+ICt0eXBlZGVmIHN0cnVjdCB7DQo+ICsgIEVGSV9UTFNf VkVSU0lPTiAgICAgICAgICAgICAgIFZlcnNpb247DQo+ICsgIEVGSV9UTFNfQ09OTkVDVElPTl9F TkQgICAgICAgIENvbm5lY3Rpb25FbmQ7DQo+ICsgIEVGSV9UTFNfVkVSSUZZICAgICAgICAgICAg ICAgIFZlcmlmeU1ldGhvZDsNCj4gKyAgRUZJX1RMU19TRVNTSU9OX1NUQVRFICAgICAgICAgU2Vz c2lvblN0YXRlOw0KPiArDQo+ICsgIFZPSUQgICAgICAgICAgICAgICAgICAgICAgICAgICpDQUNl cnQ7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgIENBQ2VydFNpemU7DQo+ICsg IFZPSUQgICAgICAgICAgICAgICAgICAgICAgICAgICpDbGllbnRDZXJ0Ow0KPiArICBVSU5UTiAg ICAgICAgICAgICAgICAgICAgICAgICBDbGllbnRDZXJ0U2l6ZTsNCj4gKyAgVk9JRCAgICAgICAg ICAgICAgICAgICAgICAgICAgKkNsaWVudFByaXZhdGVLZXk7DQo+ICsgIFVJTlROICAgICAgICAg ICAgICAgICAgICAgICAgIENsaWVudFByaXZhdGVLZXlTaXplOw0KPiArfSBUTFNfQ09ORklHX0RB VEE7DQo+ICsNCj4gIHR5cGVkZWYgc3RydWN0IF9IVFRQX1BST1RPQ09MIHsNCj4gICAgVUlOVDMy ICAgICAgICAgICAgICAgICAgICAgICAgU2lnbmF0dXJlOw0KPiAgICBFRklfSFRUUF9QUk9UT0NP TCAgICAgICAgICAgICBIdHRwOw0KPiAgICBFRklfSEFORExFICAgICAgICAgICAgICAgICAgICBI YW5kbGU7DQo+ICAgIEhUVFBfU0VSVklDRSAgICAgICAgICAgICAgICAgICpTZXJ2aWNlOw0KPiBA QCAtMTUxLDEwICsxNjUsMzkgQEAgdHlwZWRlZiBzdHJ1Y3QgX0hUVFBfUFJPVE9DT0wgew0KPiAN Cj4gICAgTkVUX01BUCAgICAgICAgICAgICAgICAgICAgICAgVHhUb2tlbnM7DQo+ICAgIE5FVF9N QVAgICAgICAgICAgICAgICAgICAgICAgIFJ4VG9rZW5zOw0KPiANCj4gICAgQ0hBUjggICAgICAg ICAgICAgICAgICAgICAgICAgKlVybDsNCj4gKw0KPiArICAvLw0KPiArICAvLyBIdHRwcyBTdXBw b3J0DQo+ICsgIC8vDQo+ICsgIEJPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgIFVzZUh0 dHBzOw0KPiArDQo+ICsgIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgICAgIFRsc0NoaWxk SGFuZGxlOyAvLy8gVGxzIENoaWxkSGFuZGxlDQo+ICsgIFRMU19DT05GSUdfREFUQSAgICAgICAg ICAgICAgICAgIFRsc0NvbmZpZ0RhdGE7DQo+ICsgIEVGSV9UTFNfUFJPVE9DT0wgICAgICAgICAg ICAgICAgICpUbHM7DQo+ICsgIEVGSV9UTFNfQ09ORklHVVJBVElPTl9QUk9UT0NPTCAgICpUbHND b25maWd1cmF0aW9uOw0KPiArICBFRklfVExTX1NFU1NJT05fU1RBVEUgICAgICAgICAgICBUbHNT ZXNzaW9uU3RhdGU7DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gVGxzVHhEYXRhIHVzZWQgZm9yIHRy YW5zbWl0dGluZyBUTFMgcmVsYXRlZCBtZXNzYWdlcy4NCj4gKyAgLy8NCj4gKyAgRUZJX1RDUDRf SU9fVE9LRU4gICAgICAgICAgICAgICAgVGNwNFRsc1R4VG9rZW47DQo+ICsgIEVGSV9UQ1A0X1RS QU5TTUlUX0RBVEEgICAgICAgICAgIFRjcDRUbHNUeERhdGE7DQo+ICsgIEVGSV9UQ1A2X0lPX1RP S0VOICAgICAgICAgICAgICAgIFRjcDZUbHNUeFRva2VuOw0KPiArICBFRklfVENQNl9UUkFOU01J VF9EQVRBICAgICAgICAgICBUY3A2VGxzVHhEYXRhOw0KPiArICBCT09MRUFOICAgICAgICAgICAg ICAgICAgICAgICAgICBUbHNJc1R4RG9uZTsNCj4gKw0KPiArICAvLw0KPiArICAvLyBUbHNSeERh dGEgdXNlZCBmb3IgcmVjZWl2aW5nIFRMUyByZWxhdGVkIG1lc3NhZ2VzLg0KPiArICAvLw0KPiAr ICBFRklfVENQNF9JT19UT0tFTiAgICAgICAgICAgICAgICBUY3A0VGxzUnhUb2tlbjsNCj4gKyAg RUZJX1RDUDRfUkVDRUlWRV9EQVRBICAgICAgICAgICAgVGNwNFRsc1J4RGF0YTsNCj4gKyAgRUZJ X1RDUDZfSU9fVE9LRU4gICAgICAgICAgICAgICAgVGNwNlRsc1J4VG9rZW47DQo+ICsgIEVGSV9U Q1A2X1JFQ0VJVkVfREFUQSAgICAgICAgICAgIFRjcDZUbHNSeERhdGE7DQo+ICsgIEJPT0xFQU4g ICAgICAgICAgICAgICAgICAgICAgICAgIFRsc0lzUnhEb25lOw0KPiAgfSBIVFRQX1BST1RPQ09M Ow0KPiANCj4gIHR5cGVkZWYgc3RydWN0IHsNCj4gICAgRUZJX0hUVFBfVE9LRU4gICAgICAgICAg ICAgICAgKkh0dHBUb2tlbjsNCj4gICAgSFRUUF9QUk9UT0NPTCAgICAgICAgICAgICAgICAgKkh0 dHBJbnN0YW5jZTsNCj4gQEAgLTM1MCwxMSArMzkzLDEyIEBAIEh0dHBDb25maWd1cmVUY3A2ICgN Cj4gICAgSU4gIEhUVFBfUFJPVE9DT0wgICAgICAgICpIdHRwSW5zdGFuY2UsDQo+ICAgIElOICBI VFRQX1RPS0VOX1dSQVAgICAgICAqV3JhcA0KPiAgICApOw0KPiANCj4gIC8qKg0KPiAtICBDaGVj ayBleGlzdGluZyBUQ1AgY29ubmVjdGlvbiwgaWYgaW4gZXJyb3Igc3RhdGUsIHJlY2VvdmVyIFRD UDQgY29ubmVjdGlvbi4NCj4gKyAgQ2hlY2sgZXhpc3RpbmcgVENQIGNvbm5lY3Rpb24sIGlmIGlu IGVycm9yIHN0YXRlLCByZWNvdmVyIFRDUDQgY29ubmVjdGlvbi4NCj4gVGhlbiwNCj4gKyAgY29u bmVjdCBvbmUgVExTIHNlc3Npb24gaWYgcmVxdWlyZWQuDQo+IA0KPiAgICBAcGFyYW1baW5dICBI dHRwSW5zdGFuY2UgICAgICAgVGhlIEhUVFAgaW5zdGFuY2UgcHJpdmF0ZSBkYXRhLg0KPiANCj4g ICAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgIFRoZSBUQ1AgY29ubmVjdGlvbiBpcyBl c3RhYmxpc2hlZC4NCj4gICAgQHJldHZhbCBFRklfTk9UX1JFQURZICAgICAgICAgIFRDUDQgcHJv dG9jb2wgY2hpbGQgaXMgbm90IGNyZWF0ZWQgb3INCj4gY29uZmlndXJlZC4NCj4gQEAgLTM2NSwx MSArNDA5LDEyIEBAIEVGSV9TVEFUVVMNCj4gIEh0dHBDb25uZWN0VGNwNCAoDQo+ICAgIElOICBI VFRQX1BST1RPQ09MICAgICAgICAqSHR0cEluc3RhbmNlDQo+ICAgICk7DQo+IA0KPiAgLyoqDQo+ IC0gIENoZWNrIGV4aXN0aW5nIFRDUCBjb25uZWN0aW9uLCBpZiBpbiBlcnJvciBzdGF0ZSwgcmVj b3ZlciBUQ1A2IGNvbm5lY3Rpb24uDQo+ICsgIENoZWNrIGV4aXN0aW5nIFRDUCBjb25uZWN0aW9u LCBpZiBpbiBlcnJvciBzdGF0ZSwgcmVjb3ZlciBUQ1A2IGNvbm5lY3Rpb24uDQo+IFRoZW4sDQo+ ICsgIGNvbm5lY3Qgb25lIFRMUyBzZXNzaW9uIGlmIHJlcXVpcmVkLg0KPiANCj4gICAgQHBhcmFt W2luXSAgSHR0cEluc3RhbmNlICAgICAgIFRoZSBIVFRQIGluc3RhbmNlIHByaXZhdGUgZGF0YS4N Cj4gDQo+ICAgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICBUaGUgVENQIGNvbm5lY3Rp b24gaXMgZXN0YWJsaXNoZWQuDQo+ICAgIEByZXR2YWwgRUZJX05PVF9SRUFEWSAgICAgICAgICBU Q1A2IHByb3RvY29sIGNoaWxkIGlzIG5vdCBjcmVhdGVkIG9yDQo+IGNvbmZpZ3VyZWQuDQo+IEBA IC0zODAsMTEgKzQyNSwxMSBAQCBFRklfU1RBVFVTDQo+ICBIdHRwQ29ubmVjdFRjcDYgKA0KPiAg ICBJTiAgSFRUUF9QUk9UT0NPTCAgICAgICAgKkh0dHBJbnN0YW5jZQ0KPiAgICApOw0KPiANCj4g IC8qKg0KPiAtICBTZW5kIHRoZSBIVFRQIG1lc3NhZ2UgdGhyb3VnaCBUQ1A0IG9yIFRDUDYuDQo+ ICsgIFNlbmQgdGhlIEhUVFAgb3IgSFRUUFMgbWVzc2FnZSB0aHJvdWdoIFRDUDQgb3IgVENQNi4N Cj4gDQo+ICAgIEBwYXJhbVtpbl0gIEh0dHBJbnN0YW5jZSAgICAgICBUaGUgSFRUUCBpbnN0YW5j ZSBwcml2YXRlIGRhdGEuDQo+ICAgIEBwYXJhbVtpbl0gIFdyYXAgICAgICAgICAgICAgICBUaGUg SFRUUCB0b2tlbidzIHdyYXAgZGF0YS4NCj4gICAgQHBhcmFtW2luXSAgVHhTdHJpbmcgICAgICAg ICAgIEJ1ZmZlciBjb250YWluaW5nIHRoZSBIVFRQIG1lc3NhZ2Ugc3RyaW5nLg0KPiAgICBAcGFy YW1baW5dICBUeFN0cmluZ0xlbiAgICAgICAgTGVuZ3RoIG9mIHRoZSBIVFRQIG1lc3NhZ2Ugc3Ry aW5nIGluIGJ5dGVzLg0KPiBAQCAtNDQxLDI5ICs0ODYsMzEgQEAgSHR0cFRjcE5vdFJlYWR5ICgN Cj4gICAgSU4gTkVUX01BUF9JVEVNICAgICAgICAgICAqSXRlbSwNCj4gICAgSU4gVk9JRCAgICAg ICAgICAgICAgICAgICAqQ29udGV4dA0KPiAgICApOw0KPiANCj4gIC8qKg0KPiAtICBJbml0aWFs aXplIFRDUCByZWxhdGVkIGRhdGEuDQo+ICsgIEluaXRpYWxpemUgSHR0cCBzZXNzaW9uLg0KPiAN Cj4gICAgQHBhcmFtW2luXSAgSHR0cEluc3RhbmNlICAgICAgIFRoZSBIVFRQIGluc3RhbmNlIHBy aXZhdGUgZGF0YS4NCj4gICAgQHBhcmFtW2luXSAgV3JhcCAgICAgICAgICAgICAgIFRoZSBIVFRQ IHRva2VuJ3Mgd3JhcCBkYXRhLg0KPiAtICBAcGFyYW1baW5dICBDb25maWd1cmUgICAgICAgICAg VGhlIEZsYWcgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGZpcnN0IHRpbWUgdG8NCj4gaW5pdGlhbGl6 ZSBUY3AuDQo+ICsgIEBwYXJhbVtpbl0gIENvbmZpZ3VyZSAgICAgICAgICBUaGUgRmxhZyBpbmRp Y2F0ZXMgd2hldGhlciBuZWVkIHRvIGluaXRpYWxpemUNCj4gc2Vzc2lvbi4NCj4gKyAgQHBhcmFt W2luXSAgVGxzQ29uZmlndXJlICAgICAgIFRoZSBGbGFnIGluZGljYXRlcyB3aGV0aGVyIGl0J3Mg dGhlIG5ldyBUbHMNCj4gc2Vzc2lvbi4NCj4gDQo+IC0gIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAg ICAgICAgICBUaGUgaW5pdGlhbGl6YXRpb24gb2YgVENQIGluc3RhbmNlIGlzIGRvbmUuDQo+ICsg IEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICBUaGUgaW5pdGlhbGl6YXRpb24gb2Ygc2Vz c2lvbiBpcyBkb25lLg0KPiAgICBAcmV0dmFsIE90aGVycyAgICAgICAgICAgICAgICAgT3RoZXIg ZXJyb3IgYXMgaW5kaWNhdGVkLg0KPiANCj4gICoqLw0KPiAgRUZJX1NUQVRVUw0KPiAtSHR0cElu aXRUY3AgKA0KPiArSHR0cEluaXRTZXNzaW9uICgNCj4gICAgSU4gIEhUVFBfUFJPVE9DT0wgICAg Kkh0dHBJbnN0YW5jZSwNCj4gICAgSU4gIEhUVFBfVE9LRU5fV1JBUCAgKldyYXAsDQo+IC0gIElO ICBCT09MRUFOICAgICAgICAgIENvbmZpZ3VyZQ0KPiArICBJTiAgQk9PTEVBTiAgICAgICAgICBD b25maWd1cmUsDQo+ICsgIElOICBCT09MRUFOICAgICAgICAgIFRsc0NvbmZpZ3VyZQ0KPiAgICAp Ow0KPiANCj4gIC8qKg0KPiAtICBUcmFuc21pdCB0aGUgSFRUUCBtc3NhZ2UgYnkgcHJvY2Vzc2lu ZyB0aGUgYXNzb2NpYXRlZCBIVFRQIHRva2VuLg0KPiArICBUcmFuc21pdCB0aGUgSFRUUCBvciBI VFRQUyBtc3NhZ2UgYnkgcHJvY2Vzc2luZyB0aGUgYXNzb2NpYXRlZCBIVFRQDQo+IHRva2VuLg0K PiANCj4gICAgQHBhcmFtW2luXSAgTWFwICAgICAgICAgICAgICAgIFRoZSBjb250YWluZXIgb2Yg VHhUb2tlbiBvciBUeDZUb2tlbi4NCj4gICAgQHBhcmFtW2luXSAgSXRlbSAgICAgICAgICAgICAg IEN1cnJlbnQgaXRlbSB0byBjaGVjayBhZ2FpbnN0Lg0KPiAgICBAcGFyYW1baW5dICBDb250ZXh0 ICAgICAgICAgICAgVGhlIFRva2VuIHRvIGNoZWNrIGFnYWluaXN0Lg0KPiANCj4gZGlmZiAtLWdp dCBhL05ldHdvcmtQa2cvSHR0cER4ZS9IdHRwc1N1cHBvcnQuYw0KPiBiL05ldHdvcmtQa2cvSHR0 cER4ZS9IdHRwc1N1cHBvcnQuYw0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAw MDAwLi4xNzdiOWE4DQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvTmV0d29ya1BrZy9IdHRwRHhl L0h0dHBzU3VwcG9ydC5jDQo+IEBAIC0wLDAgKzEsMTY5MiBAQA0KPiArLyoqIEBmaWxlDQo+ICsg IE1pc2NlbGxhbmVvdXMgcm91dGluZXMgc3BlY2lmaWMgdG8gSHR0cHMgZm9yIEh0dHBEeGUgZHJp dmVyLg0KPiArDQo+ICtDb3B5cmlnaHQgKGMpIDIwMTYsIEludGVsIENvcnBvcmF0aW9uLiBBbGwg cmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gKyhDKSBDb3B5cmlnaHQgMjAxNiBIZXdsZXR0IFBhY2th cmQgRW50ZXJwcmlzZSBEZXZlbG9wbWVudCBMUDxCUj4NCj4gK1RoaXMgcHJvZ3JhbSBhbmQgdGhl IGFjY29tcGFueWluZyBtYXRlcmlhbHMNCj4gK2FyZSBsaWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFi bGUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBCU0QNCj4gTGljZW5zZQ0K PiArd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24uICBUaGUgZnVsbCB0ZXh0IG9m IHRoZSBsaWNlbnNlIG1heSBiZQ0KPiBmb3VuZCBhdA0KPiAraHR0cDovL29wZW5zb3VyY2Uub3Jn L2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocA0KPiArDQo+ICtUSEUgUFJPR1JBTSBJUyBESVNUUklC VVRFRCBVTkRFUiBUSEUgQlNEIExJQ0VOU0UgT04gQU4gIkFTIElTIg0KPiBCQVNJUywNCj4gK1dJ VEhPVVQgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUg0K PiBFWFBSRVNTIE9SIElNUExJRUQuDQo+ICsNCj4gKyoqLw0KPiArDQo+ICsjaW5jbHVkZSAiSHR0 cERyaXZlci5oIg0KPiArDQo+ICsvKioNCj4gKyAgUmV0dXJucyB0aGUgZmlyc3Qgb2NjdXJyZW5j ZSBvZiBhIE51bGwtdGVybWluYXRlZCBBU0NJSSBzdWItc3RyaW5nIGluIGEgTnVsbC0NCj4gdGVy bWluYXRlZA0KPiArICBBU0NJSSBzdHJpbmcgYW5kIGlnbm9yZSBjYXNlIGR1cmluZyB0aGUgc2Vh cmNoIHByb2Nlc3MuDQo+ICsNCj4gKyAgVGhpcyBmdW5jdGlvbiBzY2FucyB0aGUgY29udGVudHMg b2YgdGhlIEFTQ0lJIHN0cmluZyBzcGVjaWZpZWQgYnkgU3RyaW5nDQo+ICsgIGFuZCByZXR1cm5z IHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIFNlYXJjaFN0cmluZyBhbmQgaWdub3JlIGNhc2UgZHVy aW5nIHRoZQ0KPiBzZWFyY2ggcHJvY2Vzcy4NCj4gKyAgSWYgU2VhcmNoU3RyaW5nIGlzIG5vdCBm b3VuZCBpbiBTdHJpbmcsIHRoZW4gTlVMTCBpcyByZXR1cm5lZC4gSWYgdGhlIGxlbmd0aCBvZg0K PiBTZWFyY2hTdHJpbmcNCj4gKyAgaXMgemVybywgdGhlbiBTdHJpbmcgaXMgcmV0dXJuZWQuDQo+ ICsNCj4gKyAgSWYgU3RyaW5nIGlzIE5VTEwsIHRoZW4gQVNTRVJUKCkuDQo+ICsgIElmIFNlYXJj aFN0cmluZyBpcyBOVUxMLCB0aGVuIEFTU0VSVCgpLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFN0 cmluZyAgICAgICAgICBBIHBvaW50ZXIgdG8gYSBOdWxsLXRlcm1pbmF0ZWQgQVNDSUkgc3RyaW5n Lg0KPiArICBAcGFyYW1baW5dICBTZWFyY2hTdHJpbmcgICAgQSBwb2ludGVyIHRvIGEgTnVsbC10 ZXJtaW5hdGVkIEFTQ0lJIHN0cmluZyB0bw0KPiBzZWFyY2ggZm9yLg0KPiArDQo+ICsgIEByZXR2 YWwgTlVMTCAgICAgICAgICAgIElmIHRoZSBTZWFyY2hTdHJpbmcgZG9lcyBub3QgYXBwZWFyIGlu IFN0cmluZy4NCj4gKyAgQHJldHZhbCBvdGhlcnMgICAgICAgICAgSWYgdGhlcmUgaXMgYSBtYXRj aCByZXR1cm4gdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YNCj4gU2VhcmNoaW5nU3RyaW5nLg0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB0aGUgbGVuZ3RoIG9mIFNlYXJjaFN0cmluZyBp cyB6ZXJvLHJldHVybiBTdHJpbmcuDQo+ICsNCj4gKyoqLw0KPiArQ0hBUjggKg0KPiArQXNjaWlT dHJDYXNlU3RyICgNCj4gKyAgSU4gICAgICBDT05TVCBDSEFSOCAgICAgICAgICAgICAgICpTdHJp bmcsDQo+ICsgIElOICAgICAgQ09OU1QgQ0hBUjggICAgICAgICAgICAgICAqU2VhcmNoU3RyaW5n DQo+ICsgICkNCj4gK3sNCj4gKyAgQ09OU1QgQ0hBUjggKkZpcnN0TWF0Y2g7DQo+ICsgIENPTlNU IENIQVI4ICpTZWFyY2hTdHJpbmdUbXA7DQo+ICsNCj4gKyAgQ0hBUjggU3JjOw0KPiArICBDSEFS OCBEc3Q7DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gQVNTRVJUIGJvdGggc3RyaW5ncyBhcmUgbGVz cyBsb25nIHRoYW4gUGNkTWF4aW11bUFzY2lpU3RyaW5nTGVuZ3RoDQo+ICsgIC8vDQo+ICsgIEFT U0VSVCAoQXNjaWlTdHJTaXplIChTdHJpbmcpICE9IDApOw0KPiArICBBU1NFUlQgKEFzY2lpU3Ry U2l6ZSAoU2VhcmNoU3RyaW5nKSAhPSAwKTsNCj4gKw0KPiArICBpZiAoKlNlYXJjaFN0cmluZyA9 PSAnXDAnKSB7DQo+ICsgICAgcmV0dXJuIChDSEFSOCAqKSBTdHJpbmc7DQo+ICsgIH0NCj4gKw0K PiArICB3aGlsZSAoKlN0cmluZyAhPSAnXDAnKSB7DQo+ICsgICAgU2VhcmNoU3RyaW5nVG1wID0g U2VhcmNoU3RyaW5nOw0KPiArICAgIEZpcnN0TWF0Y2ggPSBTdHJpbmc7DQo+ICsNCj4gKyAgICB3 aGlsZSAoKCpTZWFyY2hTdHJpbmdUbXAgIT0gJ1wwJykNCj4gKyAgICAgICAgICAgICYmICgqU3Ry aW5nICE9ICdcMCcpKSB7DQo+ICsgICAgICBTcmMgPSAqU3RyaW5nOw0KPiArICAgICAgRHN0ID0g KlNlYXJjaFN0cmluZ1RtcDsNCj4gKw0KPiArICAgICAgaWYgKChTcmMgPj0gJ0EnKSAmJiAoU3Jj IDw9ICdaJykpIHsNCj4gKyAgICAgICAgU3JjIC09ICgnQScgLSAnYScpOw0KPiArICAgICAgfQ0K PiArDQo+ICsgICAgICBpZiAoKERzdCA+PSAnQScpICYmIChEc3QgPD0gJ1onKSkgew0KPiArICAg ICAgICBEc3QgLT0gKCdBJyAtICdhJyk7DQo+ICsgICAgICB9DQo+ICsNCj4gKyAgICAgIGlmIChT cmMgIT0gRHN0KSB7DQo+ICsgICAgICAgIGJyZWFrOw0KPiArICAgICAgfQ0KPiArDQo+ICsgICAg ICBTdHJpbmcrKzsNCj4gKyAgICAgIFNlYXJjaFN0cmluZ1RtcCsrOw0KPiArICAgIH0NCj4gKw0K PiArICAgIGlmICgqU2VhcmNoU3RyaW5nVG1wID09ICdcMCcpIHsNCj4gKyAgICAgIHJldHVybiAo Q0hBUjggKikgRmlyc3RNYXRjaDsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBTdHJpbmcgPSBGaXJz dE1hdGNoICsgMTsNCj4gKyAgfQ0KPiArDQo+ICsgIHJldHVybiBOVUxMOw0KPiArfQ0KPiArDQo+ ICsvKioNCj4gKyAgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGZyZWUgdGhlIG5ldCBidWZmZXIg bGlzdC4NCj4gKw0KPiArICBAcGFyYW1baW5dICBBcmcgVGhlIG9wYXF1ZSBwYXJhbWV0ZXIuDQo+ ICsNCj4gKyoqLw0KPiArVk9JRA0KPiArRUZJQVBJDQo+ICtGcmVlTmJ1Zkxpc3QgKA0KPiArICBJ TiBWT0lEICpBcmcNCj4gKyAgKQ0KPiArew0KPiArICBBU1NFUlQgKEFyZyAhPSBOVUxMKTsNCj4g Kw0KPiArICBOZXRidWZGcmVlTGlzdCAoKExJU1RfRU5UUlkgKikgQXJnKTsNCj4gKyAgRnJlZVBv b2wgKEFyZyk7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBDaGVjayB3aGV0aGVyIHRoZSBVcmwg aXMgZnJvbSBIdHRwcy4NCj4gKw0KPiArICBAcGFyYW1baW5dICAgIFVybCAgICAgICAgICAgICBU aGUgcG9pbnRlciB0byBhIEhUVFAgb3IgSFRUUFMgVVJMIHN0cmluZy4NCj4gKw0KPiArICBAcmV0 dmFsIFRSVUUgICAgICAgICAgICAgICAgICBUaGUgVXJsIGlzIGZyb20gSFRUUFMuDQo+ICsgIEBy ZXR2YWwgRkFMU0UgICAgICAgICAgICAgICAgIFRoZSBVcmwgaXMgZnJvbSBIVFRQLg0KPiArDQo+ ICsqKi8NCj4gK0JPT0xFQU4NCj4gK0lzSHR0cHNVcmwgKA0KPiArICBJTiBDSEFSOCAgICAqVXJs DQo+ICsgICkNCj4gK3sNCj4gKyAgQ0hBUjggICpUbXA7DQo+ICsNCj4gKyAgVG1wID0gTlVMTDsN Cj4gKw0KPiArICBUbXAgPSBBc2NpaVN0ckNhc2VTdHIgKFVybCwgSFRUUFNfRkxBRyk7DQo+ICsg IGlmIChUbXAgIT0gTlVMTCAmJiBUbXAgPT0gVXJsKSB7DQo+ICsgICAgcmV0dXJuIFRSVUU7DQo+ ICsgIH0NCj4gKw0KPiArICByZXR1cm4gRkFMU0U7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBD cmVhdGVzIGEgVGxzIGNoaWxkIGhhbmRsZSwgb3BlbiBFRklfVExTX1BST1RPQ09MIGFuZA0KPiBF RklfVExTX0NPTkZJR1VSQVRJT05fUFJPVE9DT0wuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgSW1h Z2VIYW5kbGUgICAgICAgICAgIFRoZSBmaXJtd2FyZSBhbGxvY2F0ZWQgaGFuZGxlIGZvciB0aGUg VUVGSQ0KPiBpbWFnZS4NCj4gKyAgQHBhcmFtW291dF0gVGxzUHJvdG8gICAgICAgICAgICAgIFBv aW50ZXIgdG8gdGhlIEVGSV9UTFNfUFJPVE9DT0wgaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtvdXRd IFRsc0NvbmZpZ3VyYXRpb24gICAgICBQb2ludGVyIHRvIHRoZQ0KPiBFRklfVExTX0NPTkZJR1VS QVRJT05fUFJPVE9DT0wgaW5zdGFuY2UuDQo+ICsNCj4gKyAgQHJldHVybiAgVGhlIGNoaWxkIGhh bmRsZSB3aXRoIG9wZW5lZCBFRklfVExTX1BST1RPQ09MIGFuZA0KPiBFRklfVExTX0NPTkZJR1VS QVRJT05fUFJPVE9DT0wuDQo+ICsNCj4gKyoqLw0KPiArRUZJX0hBTkRMRQ0KPiArRUZJQVBJDQo+ ICtUbHNDcmVhdGVDaGlsZCAoDQo+ICsgIElOICBFRklfSEFORExFICAgICAgICAgICAgICAgICAg ICAgSW1hZ2VIYW5kbGUsDQo+ICsgIE9VVCBFRklfVExTX1BST1RPQ09MICAgICAgICAgICAgICAg KipUbHNQcm90bywNCj4gKyAgT1VUIEVGSV9UTFNfQ09ORklHVVJBVElPTl9QUk9UT0NPTCAqKlRs c0NvbmZpZ3VyYXRpb24NCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAg ICAgICAgICBTdGF0dXM7DQo+ICsgIEVGSV9TRVJWSUNFX0JJTkRJTkdfUFJPVE9DT0wgICpUbHNT YjsNCj4gKyAgRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICAgVGxzQ2hpbGRIYW5kbGU7DQo+ ICsNCj4gKyAgVGxzU2IgICAgICAgICAgPSBOVUxMOw0KPiArICBUbHNDaGlsZEhhbmRsZSA9IDA7 DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gTG9jYXRlIFRsc1NlcnZpY2VCaW5kaW5nIHByb3RvY29s Lg0KPiArICAvLw0KPiArICBnQlMtPkxvY2F0ZVByb3RvY29sICgNCj4gKyAgICAgJmdFZmlUbHNT ZXJ2aWNlQmluZGluZ1Byb3RvY29sR3VpZCwNCj4gKyAgICAgTlVMTCwNCj4gKyAgICAgKFZPSUQg KiopICZUbHNTYg0KPiArICAgICApOw0KPiArICBpZiAoVGxzU2IgPT0gTlVMTCkgew0KPiArICAg IHJldHVybiBOVUxMOw0KPiArICB9DQo+ICsNCj4gKyAgU3RhdHVzID0gVGxzU2ItPkNyZWF0ZUNo aWxkIChUbHNTYiwgJlRsc0NoaWxkSGFuZGxlKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVz KSkgew0KPiArICAgIHJldHVybiBOVUxMOw0KPiArICB9DQo+ICsNCj4gKyAgU3RhdHVzID0gZ0JT LT5PcGVuUHJvdG9jb2wgKA0KPiArICAgICAgICAgICAgICAgICAgVGxzQ2hpbGRIYW5kbGUsDQo+ ICsgICAgICAgICAgICAgICAgICAmZ0VmaVRsc1Byb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAg ICAgICAgIChWT0lEICoqKSBUbHNQcm90bywNCj4gKyAgICAgICAgICAgICAgICAgIEltYWdlSGFu ZGxlLA0KPiArICAgICAgICAgICAgICAgICAgVGxzQ2hpbGRIYW5kbGUsDQo+ICsgICAgICAgICAg ICAgICAgICBFRklfT1BFTl9QUk9UT0NPTF9HRVRfUFJPVE9DT0wNCj4gKyAgICAgICAgICAgICAg ICAgICk7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICBUbHNTYi0+RGVz dHJveUNoaWxkIChUbHNTYiwgVGxzQ2hpbGRIYW5kbGUpOw0KPiArICAgIHJldHVybiBOVUxMOw0K PiArICB9DQo+ICsNCj4gKyAgU3RhdHVzID0gZ0JTLT5PcGVuUHJvdG9jb2wgKA0KPiArICAgICAg ICAgICAgICAgICAgVGxzQ2hpbGRIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAgICAmZ0VmaVRs c0NvbmZpZ3VyYXRpb25Qcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgICAgICAgICAoVk9JRCAq KikgVGxzQ29uZmlndXJhdGlvbiwNCj4gKyAgICAgICAgICAgICAgICAgIEltYWdlSGFuZGxlLA0K PiArICAgICAgICAgICAgICAgICAgVGxzQ2hpbGRIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAg ICBFRklfT1BFTl9QUk9UT0NPTF9HRVRfUFJPVE9DT0wNCj4gKyAgICAgICAgICAgICAgICAgICk7 DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICBUbHNTYi0+RGVzdHJveUNo aWxkIChUbHNTYiwgVGxzQ2hpbGRIYW5kbGUpOw0KPiArICAgIHJldHVybiBOVUxMOw0KPiArICB9 DQo+ICsNCj4gKyAgcmV0dXJuIFRsc0NoaWxkSGFuZGxlOw0KPiArfQ0KPiArDQo+ICsvKioNCj4g KyAgQ3JlYXRlIGV2ZW50IGZvciB0aGUgVExTIHJlY2VpdmUgYW5kIHRyYW5zbWl0IHRva2VucyB3 aGljaCBhcmUgdXNlZCB0bw0KPiByZWNlaXZlIGFuZA0KPiArICB0cmFuc21pdCBUTFMgcmVsYXRl ZCBtZXNzYWdlcy4NCj4gKw0KPiArICBAcGFyYW1baW4sIG91dF0gIEh0dHBJbnN0YW5jZSAgICAg ICBQb2ludGVyIHRvIEhUVFBfUFJPVE9DT0wgc3RydWN0dXJlLg0KPiArDQo+ICsgIEByZXR2YWwg RUZJX1NVQ0NFU1MgICAgICAgICAgICBUaGUgZXZlbnRzIGFyZSBjcmVhdGVkIHN1Y2Nlc3NmdWxs eS4NCj4gKyAgQHJldHZhbCBvdGhlcnMgICAgICAgICAgICAgICAgIE90aGVyIGVycm9yIGFzIGlu ZGljYXRlZC4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1Rsc0Ny ZWF0ZVR4UnhFdmVudCAoDQo+ICsgIElOIE9VVCBIVFRQX1BST1RPQ09MICAgICAgKkh0dHBJbnN0 YW5jZQ0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgU3RhdHVz Ow0KPiArDQo+ICsgIGlmICghSHR0cEluc3RhbmNlLT5Mb2NhbEFkZHJlc3NJc0lQdjYpIHsNCj4g KyAgICAvLw0KPiArICAgIC8vIEZvciBUY3A0VGxzVHhUb2tlbi4NCj4gKyAgICAvLw0KPiArICAg IFN0YXR1cyA9IGdCUy0+Q3JlYXRlRXZlbnQgKA0KPiArICAgICAgICAgICAgICAgICAgICBFVlRf Tk9USUZZX1NJR05BTCwNCj4gKyAgICAgICAgICAgICAgICAgICAgVFBMX05PVElGWSwNCj4gKyAg ICAgICAgICAgICAgICAgICAgSHR0cENvbW1vbk5vdGlmeSwNCj4gKyAgICAgICAgICAgICAgICAg ICAgJkh0dHBJbnN0YW5jZS0+VGxzSXNUeERvbmUsDQo+ICsgICAgICAgICAgICAgICAgICAgICZI dHRwSW5zdGFuY2UtPlRjcDRUbHNUeFRva2VuLkNvbXBsZXRpb25Ub2tlbi5FdmVudA0KPiArICAg ICAgICAgICAgICAgICAgICApOw0KPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4g KyAgICAgIGdvdG8gRVJST1I7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgSHR0cEluc3RhbmNlLT5U Y3A0VGxzVHhEYXRhLlB1c2ggPSBUUlVFOw0KPiArICAgIEh0dHBJbnN0YW5jZS0+VGNwNFRsc1R4 RGF0YS5VcmdlbnQgPSBGQUxTRTsNCj4gKyAgICBIdHRwSW5zdGFuY2UtPlRjcDRUbHNUeERhdGEu RGF0YUxlbmd0aCA9IDA7DQo+ICsgICAgSHR0cEluc3RhbmNlLT5UY3A0VGxzVHhEYXRhLkZyYWdt ZW50Q291bnQgPSAxOw0KPiArICAgIEh0dHBJbnN0YW5jZS0+VGNwNFRsc1R4RGF0YS5GcmFnbWVu dFRhYmxlWzBdLkZyYWdtZW50TGVuZ3RoID0NCj4gSHR0cEluc3RhbmNlLT5UY3A0VGxzVHhEYXRh LkRhdGFMZW5ndGg7DQo+ICsgICAgSHR0cEluc3RhbmNlLT5UY3A0VGxzVHhEYXRhLkZyYWdtZW50 VGFibGVbMF0uRnJhZ21lbnRCdWZmZXIgPSBOVUxMOw0KPiArICAgIEh0dHBJbnN0YW5jZS0+VGNw NFRsc1R4VG9rZW4uUGFja2V0LlR4RGF0YSA9ICZIdHRwSW5zdGFuY2UtDQo+ID5UY3A0VGxzVHhE YXRhOw0KPiArICAgIEh0dHBJbnN0YW5jZS0+VGNwNFRsc1R4VG9rZW4uQ29tcGxldGlvblRva2Vu LlN0YXR1cyA9DQo+IEVGSV9OT1RfUkVBRFk7DQo+ICsNCj4gKyAgICAvLw0KPiArICAgIC8vIEZv ciBUY3A0VGxzUnhUb2tlbi4NCj4gKyAgICAvLw0KPiArICAgIFN0YXR1cyA9IGdCUy0+Q3JlYXRl RXZlbnQgKA0KPiArICAgICAgICAgICAgICAgICAgICBFVlRfTk9USUZZX1NJR05BTCwNCj4gKyAg ICAgICAgICAgICAgICAgICAgVFBMX05PVElGWSwNCj4gKyAgICAgICAgICAgICAgICAgICAgSHR0 cENvbW1vbk5vdGlmeSwNCj4gKyAgICAgICAgICAgICAgICAgICAgJkh0dHBJbnN0YW5jZS0+VGxz SXNSeERvbmUsDQo+ICsgICAgICAgICAgICAgICAgICAgICZIdHRwSW5zdGFuY2UtPlRjcDRUbHNS eFRva2VuLkNvbXBsZXRpb25Ub2tlbi5FdmVudA0KPiArICAgICAgICAgICAgICAgICAgICApOw0K PiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgIGdvdG8gRVJST1I7DQo+ ICsgICAgfQ0KPiArDQo+ICsgICAgSHR0cEluc3RhbmNlLT5UY3A0VGxzUnhEYXRhLkRhdGFMZW5n dGggICAgICAgICAgICAgICAgICAgICAgID0gMDsNCj4gKyAgICBIdHRwSW5zdGFuY2UtPlRjcDRU bHNSeERhdGEuRnJhZ21lbnRDb3VudCAgICAgICAgICAgICAgICAgICAgPSAxOw0KPiArICAgIEh0 dHBJbnN0YW5jZS0+VGNwNFRsc1J4RGF0YS5GcmFnbWVudFRhYmxlWzBdLkZyYWdtZW50TGVuZ3Ro ICA9DQo+IEh0dHBJbnN0YW5jZS0+VGNwNFRsc1J4RGF0YS5EYXRhTGVuZ3RoIDsNCj4gKyAgICBI dHRwSW5zdGFuY2UtPlRjcDRUbHNSeERhdGEuRnJhZ21lbnRUYWJsZVswXS5GcmFnbWVudEJ1ZmZl ciAgPSBOVUxMOw0KPiArICAgIEh0dHBJbnN0YW5jZS0+VGNwNFRsc1J4VG9rZW4uUGFja2V0LlJ4 RGF0YSAgICAgICAgICA9ICZIdHRwSW5zdGFuY2UtDQo+ID5UY3A0VGxzUnhEYXRhOw0KPiArICAg IEh0dHBJbnN0YW5jZS0+VGNwNFRsc1J4VG9rZW4uQ29tcGxldGlvblRva2VuLlN0YXR1cyA9DQo+ IEVGSV9OT1RfUkVBRFk7DQo+ICsgIH0gZWxzZSB7DQo+ICsgICAgLy8NCj4gKyAgICAvLyBGb3Ig VGNwNlRsc1R4VG9rZW4uDQo+ICsgICAgLy8NCj4gKyAgICBTdGF0dXMgPSBnQlMtPkNyZWF0ZUV2 ZW50ICgNCj4gKyAgICAgICAgICAgICAgICAgICAgRVZUX05PVElGWV9TSUdOQUwsDQo+ICsgICAg ICAgICAgICAgICAgICAgIFRQTF9OT1RJRlksDQo+ICsgICAgICAgICAgICAgICAgICAgIEh0dHBD b21tb25Ob3RpZnksDQo+ICsgICAgICAgICAgICAgICAgICAgICZIdHRwSW5zdGFuY2UtPlRsc0lz VHhEb25lLA0KPiArICAgICAgICAgICAgICAgICAgICAmSHR0cEluc3RhbmNlLT5UY3A2VGxzVHhU b2tlbi5Db21wbGV0aW9uVG9rZW4uRXZlbnQNCj4gKyAgICAgICAgICAgICAgICAgICAgKTsNCj4g KyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICBnb3RvIEVSUk9SOw0KPiAr ICAgIH0NCj4gKw0KPiArICAgIEh0dHBJbnN0YW5jZS0+VGNwNlRsc1R4RGF0YS5QdXNoID0gVFJV RTsNCj4gKyAgICBIdHRwSW5zdGFuY2UtPlRjcDZUbHNUeERhdGEuVXJnZW50ID0gRkFMU0U7DQo+ ICsgICAgSHR0cEluc3RhbmNlLT5UY3A2VGxzVHhEYXRhLkRhdGFMZW5ndGggPSAwOw0KPiArICAg IEh0dHBJbnN0YW5jZS0+VGNwNlRsc1R4RGF0YS5GcmFnbWVudENvdW50ID0gMTsNCj4gKyAgICBI dHRwSW5zdGFuY2UtPlRjcDZUbHNUeERhdGEuRnJhZ21lbnRUYWJsZVswXS5GcmFnbWVudExlbmd0 aCA9DQo+IEh0dHBJbnN0YW5jZS0+VGNwNlRsc1R4RGF0YS5EYXRhTGVuZ3RoOw0KPiArICAgIEh0 dHBJbnN0YW5jZS0+VGNwNlRsc1R4RGF0YS5GcmFnbWVudFRhYmxlWzBdLkZyYWdtZW50QnVmZmVy ID0gTlVMTDsNCj4gKyAgICBIdHRwSW5zdGFuY2UtPlRjcDZUbHNUeFRva2VuLlBhY2tldC5UeERh dGEgPSAmSHR0cEluc3RhbmNlLQ0KPiA+VGNwNlRsc1R4RGF0YTsNCj4gKyAgICBIdHRwSW5zdGFu Y2UtPlRjcDZUbHNUeFRva2VuLkNvbXBsZXRpb25Ub2tlbi5TdGF0dXMgPQ0KPiBFRklfTk9UX1JF QURZOw0KPiArDQo+ICsgICAgLy8NCj4gKyAgICAvLyBGb3IgVGNwNlRsc1J4VG9rZW4uDQo+ICsg ICAgLy8NCj4gKyAgICBTdGF0dXMgPSBnQlMtPkNyZWF0ZUV2ZW50ICgNCj4gKyAgICAgICAgICAg ICAgICAgICAgRVZUX05PVElGWV9TSUdOQUwsDQo+ICsgICAgICAgICAgICAgICAgICAgIFRQTF9O T1RJRlksDQo+ICsgICAgICAgICAgICAgICAgICAgIEh0dHBDb21tb25Ob3RpZnksDQo+ICsgICAg ICAgICAgICAgICAgICAgICZIdHRwSW5zdGFuY2UtPlRsc0lzUnhEb25lLA0KPiArICAgICAgICAg ICAgICAgICAgICAmSHR0cEluc3RhbmNlLT5UY3A2VGxzUnhUb2tlbi5Db21wbGV0aW9uVG9rZW4u RXZlbnQNCj4gKyAgICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgICBpZiAoRUZJX0VSUk9SIChT dGF0dXMpKSB7DQo+ICsgICAgICBnb3RvIEVSUk9SOw0KPiArICAgIH0NCj4gKw0KPiArICAgIEh0 dHBJbnN0YW5jZS0+VGNwNlRsc1J4RGF0YS5EYXRhTGVuZ3RoICAgICAgICAgICAgICAgICAgICAg ICA9IDA7DQo+ICsgICAgSHR0cEluc3RhbmNlLT5UY3A2VGxzUnhEYXRhLkZyYWdtZW50Q291bnQg ICAgICAgICAgICAgICAgICAgID0gMTsNCj4gKyAgICBIdHRwSW5zdGFuY2UtPlRjcDZUbHNSeERh dGEuRnJhZ21lbnRUYWJsZVswXS5GcmFnbWVudExlbmd0aCAgPQ0KPiBIdHRwSW5zdGFuY2UtPlRj cDZUbHNSeERhdGEuRGF0YUxlbmd0aCA7DQo+ICsgICAgSHR0cEluc3RhbmNlLT5UY3A2VGxzUnhE YXRhLkZyYWdtZW50VGFibGVbMF0uRnJhZ21lbnRCdWZmZXIgID0gTlVMTDsNCj4gKyAgICBIdHRw SW5zdGFuY2UtPlRjcDZUbHNSeFRva2VuLlBhY2tldC5SeERhdGEgICAgICAgICAgPSAmSHR0cElu c3RhbmNlLQ0KPiA+VGNwNlRsc1J4RGF0YTsNCj4gKyAgICBIdHRwSW5zdGFuY2UtPlRjcDZUbHNS eFRva2VuLkNvbXBsZXRpb25Ub2tlbi5TdGF0dXMgPQ0KPiBFRklfTk9UX1JFQURZOw0KPiArICB9 DQo+ICsNCj4gKyAgcmV0dXJuIFN0YXR1czsNCj4gKw0KPiArRVJST1I6DQo+ICsgIC8vDQo+ICsg IC8vIEVycm9yIGhhbmRsaW5nDQo+ICsgIC8vDQo+ICsgIFRsc0Nsb3NlVHhSeEV2ZW50IChIdHRw SW5zdGFuY2UpOw0KPiArDQo+ICsgIHJldHVybiBTdGF0dXM7DQo+ICt9DQo+ICsNCj4gKy8qKg0K PiArICBDbG9zZSBldmVudHMgaW4gdGhlIFRsc1R4VG9rZW4gYW5kIFRsc1J4VG9rZW4uDQo+ICsN Cj4gKyAgQHBhcmFtW2luXSAgSHR0cEluc3RhbmNlICAgUG9pbnRlciB0byBIVFRQX1BST1RPQ09M IHN0cnVjdHVyZS4NCj4gKw0KPiArKiovDQo+ICtWT0lEDQo+ICtFRklBUEkNCj4gK1Rsc0Nsb3Nl VHhSeEV2ZW50ICgNCj4gKyAgSU4gIEhUVFBfUFJPVE9DT0wgICAgICAgICpIdHRwSW5zdGFuY2UN Cj4gKyAgKQ0KPiArew0KPiArICBBU1NFUlQgKEh0dHBJbnN0YW5jZSAhPSBOVUxMKTsNCj4gKyAg aWYgKCFIdHRwSW5zdGFuY2UtPkxvY2FsQWRkcmVzc0lzSVB2Nikgew0KPiArICAgIGlmIChOVUxM ICE9IEh0dHBJbnN0YW5jZS0+VGNwNFRsc1R4VG9rZW4uQ29tcGxldGlvblRva2VuLkV2ZW50KSB7 DQo+ICsgICAgICBnQlMtPkNsb3NlRXZlbnQoSHR0cEluc3RhbmNlLQ0KPiA+VGNwNFRsc1R4VG9r ZW4uQ29tcGxldGlvblRva2VuLkV2ZW50KTsNCj4gKyAgICAgIEh0dHBJbnN0YW5jZS0+VGNwNFRs c1R4VG9rZW4uQ29tcGxldGlvblRva2VuLkV2ZW50ID0gTlVMTDsNCj4gKyAgICB9DQo+ICsNCj4g KyAgICBpZiAoTlVMTCAhPSBIdHRwSW5zdGFuY2UtPlRjcDRUbHNSeFRva2VuLkNvbXBsZXRpb25U b2tlbi5FdmVudCkgew0KPiArICAgICAgZ0JTLT5DbG9zZUV2ZW50IChIdHRwSW5zdGFuY2UtDQo+ ID5UY3A0VGxzUnhUb2tlbi5Db21wbGV0aW9uVG9rZW4uRXZlbnQpOw0KPiArICAgICAgSHR0cElu c3RhbmNlLT5UY3A0VGxzUnhUb2tlbi5Db21wbGV0aW9uVG9rZW4uRXZlbnQgPSBOVUxMOw0KPiAr ICAgIH0NCj4gKyAgfSBlbHNlIHsNCj4gKyAgICBpZiAoTlVMTCAhPSBIdHRwSW5zdGFuY2UtPlRj cDZUbHNUeFRva2VuLkNvbXBsZXRpb25Ub2tlbi5FdmVudCkgew0KPiArICAgICAgZ0JTLT5DbG9z ZUV2ZW50KEh0dHBJbnN0YW5jZS0NCj4gPlRjcDZUbHNUeFRva2VuLkNvbXBsZXRpb25Ub2tlbi5F dmVudCk7DQo+ICsgICAgICBIdHRwSW5zdGFuY2UtPlRjcDZUbHNUeFRva2VuLkNvbXBsZXRpb25U b2tlbi5FdmVudCA9IE5VTEw7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgaWYgKE5VTEwgIT0gSHR0 cEluc3RhbmNlLT5UY3A2VGxzUnhUb2tlbi5Db21wbGV0aW9uVG9rZW4uRXZlbnQpIHsNCj4gKyAg ICAgIGdCUy0+Q2xvc2VFdmVudCAoSHR0cEluc3RhbmNlLQ0KPiA+VGNwNlRsc1J4VG9rZW4uQ29t cGxldGlvblRva2VuLkV2ZW50KTsNCj4gKyAgICAgIEh0dHBJbnN0YW5jZS0+VGNwNlRsc1J4VG9r ZW4uQ29tcGxldGlvblRva2VuLkV2ZW50ID0gTlVMTDsNCj4gKyAgICB9DQo+ICsgIH0NCj4gK30N Cj4gKw0KPiArLyoqDQo+ICsgIFJlYWQgdGhlIFRsc0NhQ2VydGlmaWNhdGUgdmFyaWFibGUgYW5k IGNvbmZpZ3VyZSBpdC4NCj4gKw0KPiArICBAcGFyYW1baW4sIG91dF0gIEh0dHBJbnN0YW5jZSAg ICAgICBUaGUgSFRUUCBpbnN0YW5jZSBwcml2YXRlIGRhdGEuDQo+ICsNCj4gKyAgQHJldHZhbCBF RklfU1VDQ0VTUyAgICAgICAgICAgIFRsc0NhQ2VydGlmaWNhdGUgaXMgY29uZmlndXJlZC4NCj4g KyAgQHJldHZhbCBFRklfT1VUX09GX1JFU09VUkNFUyAgIENhbid0IGFsbG9jYXRlIG1lbW9yeSBy ZXNvdXJjZXMuDQo+ICsgIEByZXR2YWwgRUZJX05PVF9GT1VORCAgICAgICAgICBGYWlsIHRvIGdl dCAnVGxzQ2FDZXJ0aWZpY2F0ZScgdmFyaWFibGUuDQo+ICsgIEByZXR2YWwgT3RoZXJzICAgICAg ICAgICAgICAgICBPdGhlciBlcnJvciBhcyBpbmRpY2F0ZWQuDQo+ICsNCj4gKyoqLw0KPiArRUZJ X1NUQVRVUw0KPiArVGxzQ29uZmlnQ2VydGlmaWNhdGUgKA0KPiArICBJTiBPVVQgSFRUUF9QUk9U T0NPTCAgICAgICpIdHRwSW5zdGFuY2UNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICAg ICAgICAgIFN0YXR1czsNCj4gKyAgVUlOVDggICAgICAgICAgICAgICAqQ0FDZXJ0Ow0KPiArICBV SU5UTiAgICAgICAgICAgICAgIENBQ2VydFNpemU7DQo+ICsgIFVJTlQzMiAgICAgICAgICAgICAg SW5kZXg7DQo+ICsgIEVGSV9TSUdOQVRVUkVfTElTVCAgKkNlcnRMaXN0Ow0KPiArICBFRklfU0lH TkFUVVJFX0RBVEEgICpDZXJ0Ow0KPiArICBVSU5UTiAgICAgICAgICAgICAgIENlcnRDb3VudDsN Cj4gKyAgVUlOVDMyICAgICAgICAgICAgICBJdGVtRGF0YVNpemU7DQo+ICsNCj4gKyAgQ0FDZXJ0 ID0gKFVJTlQ4ICopIEh0dHBJbnN0YW5jZS0+VGxzQ29uZmlnRGF0YS5DQUNlcnQ7DQo+ICsgIENB Q2VydFNpemUgPSBIdHRwSW5zdGFuY2UtPlRsc0NvbmZpZ0RhdGEuQ0FDZXJ0U2l6ZTsNCj4gKw0K PiArICAvLw0KPiArICAvLyBUcnkgdG8gcmVhZCB0aGUgVGxzQ2FDZXJ0aWZpY2F0ZSB2YXJpYWJs ZS4NCj4gKyAgLy8NCj4gKyAgQ0FDZXJ0U2l6ZSA9IDA7DQo+ICsgIFN0YXR1cyAgPSBnUlQtPkdl dFZhcmlhYmxlICgNCj4gKyAgICAgICAgICAgICAgICAgICBFRklfVExTX0NBX0NFUlRJRklDQVRF X1ZBUklBQkxFLA0KPiArICAgICAgICAgICAgICAgICAgICZnRWZpVGxzQ2FDZXJ0aWZpY2F0ZUd1 aWQsDQo+ICsgICAgICAgICAgICAgICAgICAgTlVMTCwNCj4gKyAgICAgICAgICAgICAgICAgICAm Q0FDZXJ0U2l6ZSwNCj4gKyAgICAgICAgICAgICAgICAgICBOVUxMDQo+ICsgICAgICAgICAgICAg ICAgICAgKTsNCj4gKw0KPiArICBpZiAoU3RhdHVzID09IEVGSV9CVUZGRVJfVE9PX1NNQUxMKSB7 DQo+ICsgICAgLy8NCj4gKyAgICAvLyBBbGxvY2F0ZSBidWZmZXIgYW5kIHJlYWQgdGhlIGNvbmZp ZyB2YXJpYWJsZS4NCj4gKyAgICAvLw0KPiArICAgIENBQ2VydCA9IEFsbG9jYXRlUG9vbCAoQ0FD ZXJ0U2l6ZSk7DQo+ICsgICAgaWYgKENBQ2VydCA9PSBOVUxMKSB7DQo+ICsgICAgICByZXR1cm4g RUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgU3RhdHVzID0gZ1JU LT5HZXRWYXJpYWJsZSAoDQo+ICsgICAgICAgICAgICAgICAgICAgIEVGSV9UTFNfQ0FfQ0VSVElG SUNBVEVfVkFSSUFCTEUsDQo+ICsgICAgICAgICAgICAgICAgICAgICZnRWZpVGxzQ2FDZXJ0aWZp Y2F0ZUd1aWQsDQo+ICsgICAgICAgICAgICAgICAgICAgIE5VTEwsDQo+ICsgICAgICAgICAgICAg ICAgICAgICZDQUNlcnRTaXplLA0KPiArICAgICAgICAgICAgICAgICAgICBDQUNlcnQNCj4gKyAg ICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ ICsgICAgICAvLw0KPiArICAgICAgLy8gR2V0VmFyaWFibGUgc3RpbGwgZXJyb3Igb3IgdGhlIHZh cmlhYmxlIGlzIGNvcnJ1cHRlZC4NCj4gKyAgICAgIC8vIEZhbGwgYmFjayB0byB0aGUgZGVmYXVs dCB2YWx1ZS4NCj4gKyAgICAgIC8vDQo+ICsgICAgICBGcmVlUG9vbCAoQ0FDZXJ0KTsNCj4gKw0K PiArICAgICAgcmV0dXJuIEVGSV9OT1RfRk9VTkQ7DQo+ICsgICAgfQ0KPiArICB9DQo+ICsNCj4g KyAgLy8NCj4gKyAgLy8gRW51bWVyYXRlIGFsbCBkYXRhIGFuZCBlcmFzaW5nIHRoZSB0YXJnZXQg aXRlbS4NCj4gKyAgLy8NCj4gKyAgSXRlbURhdGFTaXplID0gKFVJTlQzMikgQ0FDZXJ0U2l6ZTsN Cj4gKyAgQ2VydExpc3QgPSAoRUZJX1NJR05BVFVSRV9MSVNUICopIENBQ2VydDsNCj4gKyAgd2hp bGUgKChJdGVtRGF0YVNpemUgPiAwKSAmJiAoSXRlbURhdGFTaXplID49IENlcnRMaXN0LT5TaWdu YXR1cmVMaXN0U2l6ZSkpDQo+IHsNCj4gKyAgICBDZXJ0ID0gKEVGSV9TSUdOQVRVUkVfREFUQSAq KSAoKFVJTlQ4ICopIENlcnRMaXN0ICsgc2l6ZW9mDQo+IChFRklfU0lHTkFUVVJFX0xJU1QpICsg Q2VydExpc3QtPlNpZ25hdHVyZUhlYWRlclNpemUpOw0KPiArICAgIENlcnRDb3VudCAgPSAoQ2Vy dExpc3QtPlNpZ25hdHVyZUxpc3RTaXplIC0gc2l6ZW9mIChFRklfU0lHTkFUVVJFX0xJU1QpIC0N Cj4gQ2VydExpc3QtPlNpZ25hdHVyZUhlYWRlclNpemUpIC8gQ2VydExpc3QtPlNpZ25hdHVyZVNp emU7DQo+ICsgICAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgQ2VydENvdW50OyBJbmRleCsrKSB7 DQo+ICsgICAgICAvLw0KPiArICAgICAgLy8gRWZpVGxzQ29uZmlnRGF0YVR5cGVDQUNlcnRpZmlj YXRlDQo+ICsgICAgICAvLw0KPiArICAgICAgU3RhdHVzID0gSHR0cEluc3RhbmNlLT5UbHNDb25m aWd1cmF0aW9uLT5TZXREYXRhICgNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBIdHRwSW5zdGFuY2UtPlRsc0NvbmZpZ3VyYXRpb24sDQo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWZpVGxzQ29uZmln RGF0YVR5cGVDQUNlcnRpZmljYXRlLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIENlcnQtPlNpZ25hdHVyZURhdGEsDQo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2VydExpc3QtPlNpZ25hdHVyZVNp emUgLSBzaXplb2YgKENlcnQtDQo+ID5TaWduYXR1cmVPd25lcikNCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KPiArICAgICAgaWYgKEVGSV9F UlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgICByZXR1cm4gU3RhdHVzOw0KPiArICAgICAgfQ0K PiArDQo+ICsgICAgICBDZXJ0ID0gKEVGSV9TSUdOQVRVUkVfREFUQSAqKSAoKFVJTlQ4ICopIENl cnQgKyBDZXJ0TGlzdC0NCj4gPlNpZ25hdHVyZVNpemUpOw0KPiArICAgIH0NCj4gKw0KPiArICAg IEl0ZW1EYXRhU2l6ZSAtPSBDZXJ0TGlzdC0+U2lnbmF0dXJlTGlzdFNpemU7DQo+ICsgICAgQ2Vy dExpc3QgPSAoRUZJX1NJR05BVFVSRV9MSVNUICopICgoVUlOVDggKikgQ2VydExpc3QgKyBDZXJ0 TGlzdC0NCj4gPlNpZ25hdHVyZUxpc3RTaXplKTsNCj4gKyAgfQ0KPiArDQo+ICsgIHJldHVybiBT dGF0dXM7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBDb25maWd1cmUgVExTIHNlc3Npb24gZGF0 YS4NCj4gKw0KPiArICBAcGFyYW1baW4sIG91dF0gIEh0dHBJbnN0YW5jZSAgICAgICBUaGUgSFRU UCBpbnN0YW5jZSBwcml2YXRlIGRhdGEuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAg ICAgICAgICAgIFRMUyBzZXNzaW9uIGRhdGEgaXMgY29uZmlndXJlZC4NCj4gKyAgQHJldHZhbCBP dGhlcnMgICAgICAgICAgICAgICAgIE90aGVyIGVycm9yIGFzIGluZGljYXRlZC4NCj4gKw0KPiAr KiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1Rsc0NvbmZpZ3VyZVNlc3Npb24gKA0K PiArICBJTiBPVVQgSFRUUF9QUk9UT0NPTCAgICAgICpIdHRwSW5zdGFuY2UNCj4gKyAgKQ0KPiAr ew0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ICsNCj4gKyAgLy8N Cj4gKyAgLy8gVGxzQ29uZmlnRGF0YSBpbml0aWFsaXphdGlvbg0KPiArICAvLw0KPiArICBIdHRw SW5zdGFuY2UtPlRsc0NvbmZpZ0RhdGEuQ29ubmVjdGlvbkVuZCA9IEVmaVRsc0NsaWVudDsNCj4g KyAgSHR0cEluc3RhbmNlLT5UbHNDb25maWdEYXRhLlZlcmlmeU1ldGhvZCA9IEVGSV9UTFNfVkVS SUZZX1BFRVI7DQo+ICsgIEh0dHBJbnN0YW5jZS0+VGxzQ29uZmlnRGF0YS5TZXNzaW9uU3RhdGUg PSBFZmlUbHNTZXNzaW9uTm90U3RhcnRlZDsNCj4gKw0KPiArICAvLw0KPiArICAvLyBFZmlUbHND b25uZWN0aW9uRW5kLA0KPiArICAvLyBFZmlUbHNWZXJpZnlNZXRob2QNCj4gKyAgLy8gRWZpVGxz U2Vzc2lvblN0YXRlDQo+ICsgIC8vDQo+ICsgIFN0YXR1cyA9IEh0dHBJbnN0YW5jZS0+VGxzLT5T ZXRTZXNzaW9uRGF0YSAoDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEh0dHBJ bnN0YW5jZS0+VGxzLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZmlUbHND b25uZWN0aW9uRW5kLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmKEh0dHBJ bnN0YW5jZS0+VGxzQ29uZmlnRGF0YS5Db25uZWN0aW9uRW5kKSwNCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc2l6ZW9mIChFRklfVExTX0NPTk5FQ1RJT05fRU5EKQ0KPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0 dXMpKSB7DQo+ICsgICAgZ290byBFUlJPUjsNCj4gKyAgfQ0KPiArDQo+ICsgIFN0YXR1cyA9IEh0 dHBJbnN0YW5jZS0+VGxzLT5TZXRTZXNzaW9uRGF0YSAoDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEh0dHBJbnN0YW5jZS0+VGxzLA0KPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBFZmlUbHNWZXJpZnlNZXRob2QsDQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICZIdHRwSW5zdGFuY2UtPlRsc0NvbmZpZ0RhdGEuVmVyaWZ5TWV0aG9kLA0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YgKEVGSV9UTFNfVkVSSUZZKQ0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KPiArICBpZiAoRUZJX0VSUk9S IChTdGF0dXMpKSB7DQo+ICsgICAgZ290byBFUlJPUjsNCj4gKyAgfQ0KPiArDQo+ICsgIFN0YXR1 cyA9IEh0dHBJbnN0YW5jZS0+VGxzLT5TZXRTZXNzaW9uRGF0YSAoDQo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEh0dHBJbnN0YW5jZS0+VGxzLA0KPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBFZmlUbHNTZXNzaW9uU3RhdGUsDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICYoSHR0cEluc3RhbmNlLT5UbHNDb25maWdEYXRhLlNlc3Npb25TdGF0 ZSksDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiAoRUZJX1RMU19T RVNTSU9OX1NUQVRFKQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KPiAr ICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgZ290byBFUlJPUjsNCj4gKyAgfQ0K PiArDQo+ICsgIC8vDQo+ICsgIC8vIFRscyBDb25maWcgQ2VydGlmaWNhdGUNCj4gKyAgLy8NCj4g KyAgU3RhdHVzID0gVGxzQ29uZmlnQ2VydGlmaWNhdGUgKEh0dHBJbnN0YW5jZSk7DQo+ICsgIGlm IChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICBERUJVRyAoKEVGSV9EX0VSUk9SLCAiVExT IENlcnRpZmljYXRlIENvbmZpZyBFcnJvciFcbiIpKTsNCj4gKyAgICBnb3RvIEVSUk9SOw0KPiAr ICB9DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gVGxzQ3JlYXRlVHhSeEV2ZW50DQo+ICsgIC8vDQo+ ICsgIFN0YXR1cyA9IFRsc0NyZWF0ZVR4UnhFdmVudCAoSHR0cEluc3RhbmNlKTsNCj4gKyAgaWYg KEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIGdvdG8gRVJST1I7DQo+ICsgIH0NCj4gKw0K PiArICByZXR1cm4gU3RhdHVzOw0KPiArDQo+ICtFUlJPUjoNCj4gKyAgVGxzQ2xvc2VUeFJ4RXZl bnQgKEh0dHBJbnN0YW5jZSk7DQo+ICsNCj4gKyAgcmV0dXJuIFN0YXR1czsNCj4gK30NCj4gKw0K PiArLyoqDQo+ICsgIFRyYW5zbWl0IHRoZSBQYWNrZXQgYnkgcHJvY2Vzc2luZyB0aGUgYXNzb2Np YXRlZCBIVFRQUyB0b2tlbi4NCj4gKw0KPiArICBAcGFyYW1baW4sIG91dF0gICBIdHRwSW5zdGFu Y2UgICAgUG9pbnRlciB0byBIVFRQX1BST1RPQ09MIHN0cnVjdHVyZS4NCj4gKyAgQHBhcmFtW2lu XSAgICAgICAgUGFja2V0ICAgICAgICAgIFRoZSBwYWNrZXQgdG8gdHJhbnNtaXQuDQo+ICsNCj4g KyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgIFRoZSBwYWNrZXQgaXMgdHJhbnNtaXR0 ZWQuDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICBIdHRwSW5zdGFuY2UgaXMg TlVMTCBvciBQYWNrZXQgaXMgTlVMTC4NCj4gKyAgQHJldHZhbCBFRklfT1VUX09GX1JFU09VUkNF UyAgIENhbid0IGFsbG9jYXRlIG1lbW9yeSByZXNvdXJjZXMuDQo+ICsgIEByZXR2YWwgRUZJX0RF VklDRV9FUlJPUiAgICAgICBBbiB1bmV4cGVjdGVkIHN5c3RlbSBvciBuZXR3b3JrIGVycm9yDQo+ IG9jY3VycmVkLg0KPiArICBAcmV0dmFsIE90aGVycyAgICAgICAgICAgICAgICAgT3RoZXIgZXJy b3JzIGFzIGluZGljYXRlZC4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkN Cj4gK1Rsc0NvbW1vblRyYW5zbWl0ICgNCj4gKyAgSU4gT1VUIEhUVFBfUFJPVE9DT0wgICAgICAq SHR0cEluc3RhbmNlLA0KPiArICBJTiAgICAgTkVUX0JVRiAgICAgICAgICAgICpQYWNrZXQNCj4g KyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gKyAg Vk9JRCAgICAgICAgICAgICAgICAgICAgICAqRGF0YTsNCj4gKyAgVUlOVE4gICAgICAgICAgICAg ICAgICAgICBTaXplOw0KPiArDQo+ICsgIGlmICgoSHR0cEluc3RhbmNlID09IE5VTEwpIHx8IChQ YWNrZXQgPT0gTlVMTCkpIHsNCj4gKyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0K PiArICB9DQo+ICsNCj4gKyAgaWYgKCFIdHRwSW5zdGFuY2UtPkxvY2FsQWRkcmVzc0lzSVB2Nikg ew0KPiArICAgIFNpemUgPSBzaXplb2YgKEVGSV9UQ1A0X1RSQU5TTUlUX0RBVEEpICsNCj4gKyAg ICAgICAgICAgKFBhY2tldC0+QmxvY2tPcE51bSAtIDEpICogc2l6ZW9mIChFRklfVENQNF9GUkFH TUVOVF9EQVRBKTsNCj4gKyAgfSBlbHNlIHsNCj4gKyAgICBTaXplID0gc2l6ZW9mIChFRklfVENQ Nl9UUkFOU01JVF9EQVRBKSArDQo+ICsgICAgICAgICAgIChQYWNrZXQtPkJsb2NrT3BOdW0gLSAx KSAqIHNpemVvZiAoRUZJX1RDUDZfRlJBR01FTlRfREFUQSk7DQo+ICsgIH0NCj4gKw0KPiArICBE YXRhID0gQWxsb2NhdGVQb29sIChTaXplKTsNCj4gKyAgaWYgKERhdGEgPT0gTlVMTCkgew0KPiAr ICAgIHJldHVybiBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmICgh SHR0cEluc3RhbmNlLT5Mb2NhbEFkZHJlc3NJc0lQdjYpIHsNCj4gKyAgICAoKEVGSV9UQ1A0X1RS QU5TTUlUX0RBVEEgKikgRGF0YSktPlB1c2ggICAgICAgID0gVFJVRTsNCj4gKyAgICAoKEVGSV9U Q1A0X1RSQU5TTUlUX0RBVEEgKikgRGF0YSktPlVyZ2VudCAgICAgID0gRkFMU0U7DQo+ICsgICAg KChFRklfVENQNF9UUkFOU01JVF9EQVRBICopIERhdGEpLT5EYXRhTGVuZ3RoICA9IFBhY2tldC0+ VG90YWxTaXplOw0KPiArDQo+ICsgICAgLy8NCj4gKyAgICAvLyBCdWlsZCB0aGUgZnJhZ21lbnQg dGFibGUuDQo+ICsgICAgLy8NCj4gKyAgICAoKEVGSV9UQ1A0X1RSQU5TTUlUX0RBVEEgKikgRGF0 YSktPkZyYWdtZW50Q291bnQgPSBQYWNrZXQtDQo+ID5CbG9ja09wTnVtOw0KPiArDQo+ICsgICAg TmV0YnVmQnVpbGRFeHQgKA0KPiArICAgICAgUGFja2V0LA0KPiArICAgICAgKE5FVF9GUkFHTUVO VCAqKSAmKChFRklfVENQNF9UUkFOU01JVF9EQVRBICopIERhdGEpLQ0KPiA+RnJhZ21lbnRUYWJs ZVswXSwNCj4gKyAgICAgICYoKEVGSV9UQ1A0X1RSQU5TTUlUX0RBVEEgKikgRGF0YSktPkZyYWdt ZW50Q291bnQNCj4gKyAgICAgICk7DQo+ICsNCj4gKyAgICBIdHRwSW5zdGFuY2UtPlRjcDRUbHNU eFRva2VuLlBhY2tldC5UeERhdGEgPQ0KPiAoRUZJX1RDUDRfVFJBTlNNSVRfREFUQSAqKSBEYXRh Ow0KPiArDQo+ICsgICAgU3RhdHVzID0gRUZJX0RFVklDRV9FUlJPUjsNCj4gKw0KPiArICAgIC8v DQo+ICsgICAgLy8gVHJhbnNtaXQgdGhlIHBhY2tldC4NCj4gKyAgICAvLw0KPiArICAgIFN0YXR1 cyAgPSBIdHRwSW5zdGFuY2UtPlRjcDQtPlRyYW5zbWl0IChIdHRwSW5zdGFuY2UtPlRjcDQsDQo+ ICZIdHRwSW5zdGFuY2UtPlRjcDRUbHNUeFRva2VuKTsNCj4gKyAgICBpZiAoRUZJX0VSUk9SIChT dGF0dXMpKSB7DQo+ICsgICAgICBnb3RvIE9OX0VYSVQ7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAg d2hpbGUgKCFIdHRwSW5zdGFuY2UtPlRsc0lzVHhEb25lKSB7DQo+ICsgICAgICBIdHRwSW5zdGFu Y2UtPlRjcDQtPlBvbGwgKEh0dHBJbnN0YW5jZS0+VGNwNCk7DQo+ICsgICAgfQ0KPiArDQo+ICsg ICAgSHR0cEluc3RhbmNlLT5UbHNJc1R4RG9uZSA9IEZBTFNFOw0KPiArICAgIFN0YXR1cyA9IEh0 dHBJbnN0YW5jZS0+VGNwNFRsc1R4VG9rZW4uQ29tcGxldGlvblRva2VuLlN0YXR1czsNCj4gKyAg fSBlbHNlIHsNCj4gKyAgICAoKEVGSV9UQ1A2X1RSQU5TTUlUX0RBVEEgKikgRGF0YSktPlB1c2gg ICAgICAgID0gVFJVRTsNCj4gKyAgICAoKEVGSV9UQ1A2X1RSQU5TTUlUX0RBVEEgKikgRGF0YSkt PlVyZ2VudCAgICAgID0gRkFMU0U7DQo+ICsgICAgKChFRklfVENQNl9UUkFOU01JVF9EQVRBICop IERhdGEpLT5EYXRhTGVuZ3RoICA9IFBhY2tldC0+VG90YWxTaXplOw0KPiArDQo+ICsgICAgLy8N Cj4gKyAgICAvLyBCdWlsZCB0aGUgZnJhZ21lbnQgdGFibGUuDQo+ICsgICAgLy8NCj4gKyAgICAo KEVGSV9UQ1A2X1RSQU5TTUlUX0RBVEEgKikgRGF0YSktPkZyYWdtZW50Q291bnQgPSBQYWNrZXQt DQo+ID5CbG9ja09wTnVtOw0KPiArDQo+ICsgICAgTmV0YnVmQnVpbGRFeHQgKA0KPiArICAgICAg UGFja2V0LA0KPiArICAgICAgKE5FVF9GUkFHTUVOVCAqKSAmKChFRklfVENQNl9UUkFOU01JVF9E QVRBICopIERhdGEpLQ0KPiA+RnJhZ21lbnRUYWJsZVswXSwNCj4gKyAgICAgICYoKEVGSV9UQ1A2 X1RSQU5TTUlUX0RBVEEgKikgRGF0YSktPkZyYWdtZW50Q291bnQNCj4gKyAgICAgICk7DQo+ICsN Cj4gKyAgICBIdHRwSW5zdGFuY2UtPlRjcDZUbHNUeFRva2VuLlBhY2tldC5UeERhdGEgPQ0KPiAo RUZJX1RDUDZfVFJBTlNNSVRfREFUQSAqKSBEYXRhOw0KPiArDQo+ICsgICAgU3RhdHVzID0gRUZJ X0RFVklDRV9FUlJPUjsNCj4gKw0KPiArICAgIC8vDQo+ICsgICAgLy8gVHJhbnNtaXQgdGhlIHBh Y2tldC4NCj4gKyAgICAvLw0KPiArICAgIFN0YXR1cyAgPSBIdHRwSW5zdGFuY2UtPlRjcDYtPlRy YW5zbWl0IChIdHRwSW5zdGFuY2UtPlRjcDYsDQo+ICZIdHRwSW5zdGFuY2UtPlRjcDZUbHNUeFRv a2VuKTsNCj4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICBnb3RvIE9O X0VYSVQ7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgd2hpbGUgKCFIdHRwSW5zdGFuY2UtPlRsc0lz VHhEb25lKSB7DQo+ICsgICAgICBIdHRwSW5zdGFuY2UtPlRjcDYtPlBvbGwgKEh0dHBJbnN0YW5j ZS0+VGNwNik7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgSHR0cEluc3RhbmNlLT5UbHNJc1R4RG9u ZSA9IEZBTFNFOw0KPiArICAgIFN0YXR1cyA9IEh0dHBJbnN0YW5jZS0+VGNwNlRsc1R4VG9rZW4u Q29tcGxldGlvblRva2VuLlN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICtPTl9FWElUOg0KPiArICBG cmVlUG9vbCAoRGF0YSk7DQo+ICsNCj4gKyAgcmV0dXJuIFN0YXR1czsNCj4gK30NCj4gKw0KPiAr LyoqDQo+ICsgIFJlY2VpdmUgdGhlIFBhY2tldCBieSBwcm9jZXNzaW5nIHRoZSBhc3NvY2lhdGVk IEhUVFBTIHRva2VuLg0KPiArDQo+ICsgIEBwYXJhbVtpbiwgb3V0XSAgIEh0dHBJbnN0YW5jZSAg ICBQb2ludGVyIHRvIEhUVFBfUFJPVE9DT0wgc3RydWN0dXJlLg0KPiArICBAcGFyYW1baW5dICAg ICAgICBQYWNrZXQgICAgICAgICAgVGhlIHBhY2tldCB0byB0cmFuc21pdC4NCj4gKyAgQHBhcmFt W2luXSAgICAgICAgVGltZW91dCAgICAgICAgIFRoZSB0aW1lIHRvIHdhaXQgZm9yIGNvbm5lY3Rp b24gZG9uZS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgVGhlIFBh Y2tldCBpcyByZWNlaXZlZC4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgIEh0 dHBJbnN0YW5jZSBpcyBOVUxMIG9yIFBhY2tldCBpcyBOVUxMLg0KPiArICBAcmV0dmFsIEVGSV9P VVRfT0ZfUkVTT1VSQ0VTICAgQ2FuJ3QgYWxsb2NhdGUgbWVtb3J5IHJlc291cmNlcy4NCj4gKyAg QHJldHZhbCBFRklfVElNRU9VVCAgICAgICAgICAgIFRoZSBvcGVyYXRpb24gaXMgdGltZSBvdXQu DQo+ICsgIEByZXR2YWwgT3RoZXJzICAgICAgICAgICAgICAgICBPdGhlciBlcnJvciBhcyBpbmRp Y2F0ZWQuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtUbHNDb21t b25SZWNlaXZlICgNCj4gKyAgSU4gT1VUIEhUVFBfUFJPVE9DT0wgICAgICAqSHR0cEluc3RhbmNl LA0KPiArICBJTiAgICAgTkVUX0JVRiAgICAgICAgICAgICpQYWNrZXQsDQo+ICsgIElOICAgICBF RklfRVZFTlQgICAgICAgICAgVGltZW91dA0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9UQ1A0X1JF Q0VJVkVfREFUQSAgICAgKlRjcDRSeERhdGE7DQo+ICsgIEVGSV9UQ1A2X1JFQ0VJVkVfREFUQSAg ICAgKlRjcDZSeERhdGE7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgU3RhdHVzOw0K PiArICBORVRfRlJBR01FTlQgICAgICAgICAgICAgICpGcmFnbWVudDsNCj4gKyAgVUlOVDMyICAg ICAgICAgICAgICAgICAgICBGcmFnbWVudENvdW50Ow0KPiArICBVSU5UMzIgICAgICAgICAgICAg ICAgICAgIEN1cnJlbnRGcmFnbWVudDsNCj4gKw0KPiArICBUY3A0UnhEYXRhID0gTlVMTDsNCj4g KyAgVGNwNlJ4RGF0YSA9IE5VTEw7DQo+ICsNCj4gKyAgaWYgKChIdHRwSW5zdGFuY2UgPT0gTlVM TCkgfHwgKFBhY2tldCA9PSBOVUxMKSkgew0KPiArICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJB TUVURVI7DQo+ICsgIH0NCj4gKw0KPiArICBGcmFnbWVudENvdW50ID0gUGFja2V0LT5CbG9ja09w TnVtOw0KPiArICBGcmFnbWVudCAgICAgID0gQWxsb2NhdGVQb29sIChGcmFnbWVudENvdW50ICog c2l6ZW9mIChORVRfRlJBR01FTlQpKTsNCj4gKyAgaWYgKEZyYWdtZW50ID09IE5VTEwpIHsNCj4g KyAgICBTdGF0dXMgPSBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4gKyAgICBnb3RvIE9OX0VYSVQ7 DQo+ICsgIH0NCj4gKw0KPiArICAvLw0KPiArICAvLyBCdWlsZCB0aGUgZnJhZ21lbnQgdGFibGUu DQo+ICsgIC8vDQo+ICsgIE5ldGJ1ZkJ1aWxkRXh0IChQYWNrZXQsIEZyYWdtZW50LCAmRnJhZ21l bnRDb3VudCk7DQo+ICsNCj4gKyAgaWYgKCFIdHRwSW5zdGFuY2UtPkxvY2FsQWRkcmVzc0lzSVB2 Nikgew0KPiArICAgIFRjcDRSeERhdGEgPSBIdHRwSW5zdGFuY2UtPlRjcDRUbHNSeFRva2VuLlBh Y2tldC5SeERhdGE7DQo+ICsgICAgaWYgKFRjcDRSeERhdGEgPT0gTlVMTCkgew0KPiArICAgICAg cmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gKyAgICB9DQo+ICsgICAgVGNwNFJ4RGF0 YS0+RnJhZ21lbnRDb3VudCAgICAgICAgID0gMTsNCj4gKyAgfSBlbHNlIHsNCj4gKyAgICBUY3A2 UnhEYXRhID0gSHR0cEluc3RhbmNlLT5UY3A2VGxzUnhUb2tlbi5QYWNrZXQuUnhEYXRhOw0KPiAr ICAgIGlmIChUY3A2UnhEYXRhID09IE5VTEwpIHsNCj4gKyAgICAgIHJldHVybiBFRklfSU5WQUxJ RF9QQVJBTUVURVI7DQo+ICsgICAgfQ0KPiArICAgIFRjcDZSeERhdGEtPkZyYWdtZW50Q291bnQg ICAgICAgICA9IDE7DQo+ICsgIH0NCj4gKw0KPiArICBDdXJyZW50RnJhZ21lbnQgICAgICAgICAg ICAgICA9IDA7DQo+ICsgIFN0YXR1cyAgICAgICAgICAgICAgICAgICAgICAgID0gRUZJX1NVQ0NF U1M7DQo+ICsNCj4gKyAgd2hpbGUgKEN1cnJlbnRGcmFnbWVudCA8IEZyYWdtZW50Q291bnQpIHsN Cj4gKyAgICBpZiAoIUh0dHBJbnN0YW5jZS0+TG9jYWxBZGRyZXNzSXNJUHY2KSB7DQo+ICsgICAg ICBUY3A0UnhEYXRhLT5EYXRhTGVuZ3RoICAgICAgICAgICAgICAgICAgICAgICA9IEZyYWdtZW50 W0N1cnJlbnRGcmFnbWVudF0uTGVuOw0KPiArICAgICAgVGNwNFJ4RGF0YS0+RnJhZ21lbnRUYWJs ZVswXS5GcmFnbWVudExlbmd0aCAgPQ0KPiBGcmFnbWVudFtDdXJyZW50RnJhZ21lbnRdLkxlbjsN Cj4gKyAgICAgIFRjcDRSeERhdGEtPkZyYWdtZW50VGFibGVbMF0uRnJhZ21lbnRCdWZmZXIgID0N Cj4gRnJhZ21lbnRbQ3VycmVudEZyYWdtZW50XS5CdWxrOw0KPiArICAgICAgU3RhdHVzID0gSHR0 cEluc3RhbmNlLT5UY3A0LT5SZWNlaXZlIChIdHRwSW5zdGFuY2UtPlRjcDQsDQo+ICZIdHRwSW5z dGFuY2UtPlRjcDRUbHNSeFRva2VuKTsNCj4gKyAgICB9IGVsc2Ugew0KPiArICAgICAgVGNwNlJ4 RGF0YS0+RGF0YUxlbmd0aCAgICAgICAgICAgICAgICAgICAgICAgPSBGcmFnbWVudFtDdXJyZW50 RnJhZ21lbnRdLkxlbjsNCj4gKyAgICAgIFRjcDZSeERhdGEtPkZyYWdtZW50VGFibGVbMF0uRnJh Z21lbnRMZW5ndGggID0NCj4gRnJhZ21lbnRbQ3VycmVudEZyYWdtZW50XS5MZW47DQo+ICsgICAg ICBUY3A2UnhEYXRhLT5GcmFnbWVudFRhYmxlWzBdLkZyYWdtZW50QnVmZmVyICA9DQo+IEZyYWdt ZW50W0N1cnJlbnRGcmFnbWVudF0uQnVsazsNCj4gKyAgICAgIFN0YXR1cyA9IEh0dHBJbnN0YW5j ZS0+VGNwNi0+UmVjZWl2ZSAoSHR0cEluc3RhbmNlLT5UY3A2LA0KPiAmSHR0cEluc3RhbmNlLT5U Y3A2VGxzUnhUb2tlbik7DQo+ICsgICAgfQ0KPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykp IHsNCj4gKyAgICAgIGdvdG8gT05fRVhJVDsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICB3aGlsZSAo IUh0dHBJbnN0YW5jZS0+VGxzSXNSeERvbmUgJiYgKChUaW1lb3V0ID09IE5VTEwpIHx8IEVGSV9F UlJPUg0KPiAoZ0JTLT5DaGVja0V2ZW50IChUaW1lb3V0KSkpKSB7DQo+ICsgICAgICAvLw0KPiAr ICAgICAgLy8gUG9sbCB1bnRpbCBzb21lIGRhdGEgaXMgcmVjZWl2ZWQgb3IgYW4gZXJyb3Igb2Nj dXJzLg0KPiArICAgICAgLy8NCj4gKyAgICAgIGlmICghSHR0cEluc3RhbmNlLT5Mb2NhbEFkZHJl c3NJc0lQdjYpIHsNCj4gKyAgICAgICAgSHR0cEluc3RhbmNlLT5UY3A0LT5Qb2xsIChIdHRwSW5z dGFuY2UtPlRjcDQpOw0KPiArICAgICAgfSBlbHNlIHsNCj4gKyAgICAgICAgSHR0cEluc3RhbmNl LT5UY3A2LT5Qb2xsIChIdHRwSW5zdGFuY2UtPlRjcDYpOw0KPiArICAgICAgfQ0KPiArICAgIH0N Cj4gKw0KPiArICAgIGlmICghSHR0cEluc3RhbmNlLT5UbHNJc1J4RG9uZSkgew0KPiArICAgICAg Ly8NCj4gKyAgICAgIC8vIFRpbWVvdXQgb2NjdXJzLCBjYW5jZWwgdGhlIHJlY2VpdmUgcmVxdWVz dC4NCj4gKyAgICAgIC8vDQo+ICsgICAgICBpZiAoIUh0dHBJbnN0YW5jZS0+TG9jYWxBZGRyZXNz SXNJUHY2KSB7DQo+ICsgICAgICAgIEh0dHBJbnN0YW5jZS0+VGNwNC0+Q2FuY2VsIChIdHRwSW5z dGFuY2UtPlRjcDQsICZIdHRwSW5zdGFuY2UtDQo+ID5UY3A0VGxzUnhUb2tlbi5Db21wbGV0aW9u VG9rZW4pOw0KPiArICAgICAgfSBlbHNlIHsNCj4gKyAgICAgICAgSHR0cEluc3RhbmNlLT5UY3A2 LT5DYW5jZWwgKEh0dHBJbnN0YW5jZS0+VGNwNiwgJkh0dHBJbnN0YW5jZS0NCj4gPlRjcDZUbHNS eFRva2VuLkNvbXBsZXRpb25Ub2tlbik7DQo+ICsgICAgICB9DQo+ICsNCj4gKyAgICAgIFN0YXR1 cyA9IEVGSV9USU1FT1VUOw0KPiArICAgICAgZ290byBPTl9FWElUOw0KPiArICAgIH0gZWxzZSB7 DQo+ICsgICAgICBIdHRwSW5zdGFuY2UtPlRsc0lzUnhEb25lID0gRkFMU0U7DQo+ICsgICAgfQ0K PiArDQo+ICsgICAgaWYgKCFIdHRwSW5zdGFuY2UtPkxvY2FsQWRkcmVzc0lzSVB2Nikgew0KPiAr ICAgICAgU3RhdHVzID0gSHR0cEluc3RhbmNlLT5UY3A0VGxzUnhUb2tlbi5Db21wbGV0aW9uVG9r ZW4uU3RhdHVzOw0KPiArICAgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAg ICBnb3RvIE9OX0VYSVQ7DQo+ICsgICAgICB9DQo+ICsNCj4gKyAgICAgIEZyYWdtZW50W0N1cnJl bnRGcmFnbWVudF0uTGVuIC09IFRjcDRSeERhdGEtDQo+ID5GcmFnbWVudFRhYmxlWzBdLkZyYWdt ZW50TGVuZ3RoOw0KPiArICAgICAgaWYgKEZyYWdtZW50W0N1cnJlbnRGcmFnbWVudF0uTGVuID09 IDApIHsNCj4gKyAgICAgICAgQ3VycmVudEZyYWdtZW50Kys7DQo+ICsgICAgICB9IGVsc2Ugew0K PiArICAgICAgICBGcmFnbWVudFtDdXJyZW50RnJhZ21lbnRdLkJ1bGsgKz0gVGNwNFJ4RGF0YS0N Cj4gPkZyYWdtZW50VGFibGVbMF0uRnJhZ21lbnRMZW5ndGg7DQo+ICsgICAgICB9DQo+ICsgICAg fSBlbHNlIHsNCj4gKyAgICAgIFN0YXR1cyA9IEh0dHBJbnN0YW5jZS0+VGNwNlRsc1J4VG9rZW4u Q29tcGxldGlvblRva2VuLlN0YXR1czsNCj4gKyAgICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykp IHsNCj4gKyAgICAgICAgZ290byBPTl9FWElUOw0KPiArICAgICAgfQ0KPiArDQo+ICsgICAgICBG cmFnbWVudFtDdXJyZW50RnJhZ21lbnRdLkxlbiAtPSBUY3A2UnhEYXRhLQ0KPiA+RnJhZ21lbnRU YWJsZVswXS5GcmFnbWVudExlbmd0aDsNCj4gKyAgICAgIGlmIChGcmFnbWVudFtDdXJyZW50RnJh Z21lbnRdLkxlbiA9PSAwKSB7DQo+ICsgICAgICAgIEN1cnJlbnRGcmFnbWVudCsrOw0KPiArICAg ICAgfSBlbHNlIHsNCj4gKyAgICAgICAgRnJhZ21lbnRbQ3VycmVudEZyYWdtZW50XS5CdWxrICs9 IFRjcDZSeERhdGEtDQo+ID5GcmFnbWVudFRhYmxlWzBdLkZyYWdtZW50TGVuZ3RoOw0KPiArICAg ICAgfQ0KPiArICAgIH0NCj4gKyAgfQ0KPiArDQo+ICtPTl9FWElUOg0KPiArDQo+ICsgIGlmIChG cmFnbWVudCAhPSBOVUxMKSB7DQo+ICsgICAgRnJlZVBvb2wgKEZyYWdtZW50KTsNCj4gKyAgfQ0K PiArDQo+ICsgIHJldHVybiBTdGF0dXM7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBSZWNlaXZl IG9uZSBUTFMgUERVLiBBbiBUTFMgUERVIGNvbnRhaW5zIGFuIFRMUyByZWNvcmQgaGVhZGVyIGFu ZCBpdCdzDQo+ICsgIGNvcnJlc3BvbmRpbmcgcmVjb3JkIGRhdGEuIFRoaXMgdHdvIHBhcnRzIHdp bGwgYmUgcHV0IGludG8gdHdvIGJsb2NrcyBvZg0KPiBidWZmZXJzIGluIHRoZQ0KPiArICBuZXQg YnVmZmVyLg0KPiArDQo+ICsgIEBwYXJhbVtpbiwgb3V0XSAgICAgIEh0dHBJbnN0YW5jZSAgICBQ b2ludGVyIHRvIEhUVFBfUFJPVE9DT0wgc3RydWN0dXJlLg0KPiArICBAcGFyYW1bb3V0XSAgICAg ICAgICBQZHUgICAgICAgICAgICAgVGhlIHJlY2VpdmVkIFRMUyBQRFUuDQo+ICsgIEBwYXJhbVtp bl0gICAgICAgICAgIFRpbWVvdXQgICAgICAgICBUaGUgdGltZSB0byB3YWl0IGZvciBjb25uZWN0 aW9uIGRvbmUuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICBBbiBUTFMg UERVIGlzIHJlY2VpdmVkLg0KPiArICBAcmV0dmFsIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTIENhbid0 IGFsbG9jYXRlIG1lbW9yeSByZXNvdXJjZXMuDQo+ICsgIEByZXR2YWwgRUZJX1BST1RPQ09MX0VS Uk9SICAgQW4gdW5leHBlY3RlZCBUTFMgcGFja2V0IHdhcyByZWNlaXZlZC4NCj4gKyAgQHJldHZh bCBPdGhlcnMgICAgICAgICAgICAgICBPdGhlciBlcnJvcnMgYXMgaW5kaWNhdGVkLg0KPiArDQo+ ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArVGxzUmVjZWl2ZU9uZVBkdSAoDQo+ ICsgIElOIE9VVCBIVFRQX1BST1RPQ09MICAgICAgKkh0dHBJbnN0YW5jZSwNCj4gKyAgICAgT1VU IE5FVF9CVUYgICAgICAgICAgICAqKlBkdSwNCj4gKyAgSU4gICAgIEVGSV9FVkVOVCAgICAgICAg ICBUaW1lb3V0DQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgIFN0YXR1czsNCj4g Kw0KPiArICBMSVNUX0VOVFJZICAgICAgKk5idWZMaXN0Ow0KPiArDQo+ICsgIFVJTlQzMiAgICAg ICAgICBMZW47DQo+ICsNCj4gKyAgTkVUX0JVRiAgICAgICAgICAgKlBkdUhkcjsNCj4gKyAgVUlO VDggICAgICAgICAgICAgKkhlYWRlcjsNCj4gKyAgVExTX1JFQ09SRF9IRUFERVIgUmVjb3JkSGVh ZGVyOw0KPiArDQo+ICsgIE5FVF9CVUYgICAgICAgICAgICpEYXRhU2VnOw0KPiArDQo+ICsgIE5i dWZMaXN0ID0gTlVMTDsNCj4gKyAgUGR1SGRyICAgPSBOVUxMOw0KPiArICBIZWFkZXIgICA9IE5V TEw7DQo+ICsgIERhdGFTZWcgID0gTlVMTDsNCj4gKw0KPiArICBOYnVmTGlzdCA9IEFsbG9jYXRl UG9vbCAoc2l6ZW9mIChMSVNUX0VOVFJZKSk7DQo+ICsgIGlmIChOYnVmTGlzdCA9PSBOVUxMKSB7 DQo+ICsgICAgcmV0dXJuIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiArICB9DQo+ICsNCj4gKyAg SW5pdGlhbGl6ZUxpc3RIZWFkIChOYnVmTGlzdCk7DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gQWxs b2NhdGUgYnVmZmVyIHRvIHJlY2VpdmUgb25lIFRMUyBoZWFkZXIuDQo+ICsgIC8vDQo+ICsgIExl biAgICAgPSBzaXplb2YgKFRMU19SRUNPUkRfSEVBREVSKTsNCj4gKyAgUGR1SGRyICA9IE5ldGJ1 ZkFsbG9jIChMZW4pOw0KPiArICBpZiAoUGR1SGRyID09IE5VTEwpIHsNCj4gKyAgICBTdGF0dXMg PSBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4gKyAgICBnb3RvIE9OX0VYSVQ7DQo+ICsgIH0NCj4g Kw0KPiArICBIZWFkZXIgPSBOZXRidWZBbGxvY1NwYWNlIChQZHVIZHIsIExlbiwgTkVUX0JVRl9U QUlMKTsNCj4gKyAgaWYgKEhlYWRlciA9PSBOVUxMKSB7DQo+ICsgICAgU3RhdHVzID0gRUZJX09V VF9PRl9SRVNPVVJDRVM7DQo+ICsgICAgZ290byBPTl9FWElUOw0KPiArICB9DQo+ICsNCj4gKyAg Ly8NCj4gKyAgLy8gRmlyc3Qgc3RlcCwgcmVjZWl2ZSBvbmUgVExTIGhlYWRlci4NCj4gKyAgLy8N Cj4gKyAgU3RhdHVzID0gVGxzQ29tbW9uUmVjZWl2ZSAoSHR0cEluc3RhbmNlLCBQZHVIZHIsIFRp bWVvdXQpOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgZ290byBPTl9F WElUOw0KPiArICB9DQo+ICsNCj4gKyAgUmVjb3JkSGVhZGVyID0gKihUTFNfUkVDT1JEX0hFQURF UiAqKSBIZWFkZXI7DQo+ICsgIGlmICgoUmVjb3JkSGVhZGVyLkNvbnRlbnRUeXBlID09IFRMU19D T05URU5UX1RZUEVfSEFORFNIQUtFIHx8DQo+ICsgICAgUmVjb3JkSGVhZGVyLkNvbnRlbnRUeXBl ID09IFRMU19DT05URU5UX1RZUEVfQUxFUlQgfHwNCj4gKyAgICBSZWNvcmRIZWFkZXIuQ29udGVu dFR5cGUgPT0NCj4gVExTX0NPTlRFTlRfVFlQRV9DSEFOR0VfQ0lQSEVSX1NQRUMgfHwNCj4gKyAg ICBSZWNvcmRIZWFkZXIuQ29udGVudFR5cGUgPT0NCj4gVExTX0NPTlRFTlRfVFlQRV9BUFBMSUNB VElPTl9EQVRBKSAmJg0KPiArICAgIChSZWNvcmRIZWFkZXIuVmVyc2lvbi5NYWpvciA9PSAweDAz KSAmJiAvLy8gTWFqb3IgdmVyc2lvbnMgYXJlIHNhbWUuDQo+ICsgICAgKFJlY29yZEhlYWRlci5W ZXJzaW9uLk1pbm9yID09IFRMUzEwX1BST1RPQ09MX1ZFUlNJT05fTUlOT1IgfHwNCj4gKyAgICBS ZWNvcmRIZWFkZXIuVmVyc2lvbi5NaW5vciA9PVRMUzExX1BST1RPQ09MX1ZFUlNJT05fTUlOT1Ig fHwNCj4gKyAgICBSZWNvcmRIZWFkZXIuVmVyc2lvbi5NaW5vciA9PSBUTFMxMl9QUk9UT0NPTF9W RVJTSU9OX01JTk9SKQ0KPiArICAgKSB7DQo+ICsgICAgSW5zZXJ0VGFpbExpc3QgKE5idWZMaXN0 LCAmUGR1SGRyLT5MaXN0KTsNCj4gKyAgfSBlbHNlIHsNCj4gKyAgICBTdGF0dXMgPSBFRklfUFJP VE9DT0xfRVJST1I7DQo+ICsgICAgZ290byBPTl9FWElUOw0KPiArICB9DQo+ICsNCj4gKyAgTGVu ID0gU3dhcEJ5dGVzMTYoUmVjb3JkSGVhZGVyLkxlbmd0aCk7DQo+ICsgIGlmIChMZW4gPT0gMCkg ew0KPiArICAgIC8vDQo+ICsgICAgLy8gTm8gVExTIHBheWxvYWQuDQo+ICsgICAgLy8NCj4gKyAg ICBnb3RvIEZPUk1fUERVOw0KPiArICB9DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gQWxsb2NhdGUg YnVmZmVyIHRvIHJlY2VpdmUgb25lIFRMUyBwYXlsb2FkLg0KPiArICAvLw0KPiArICBEYXRhU2Vn ID0gTmV0YnVmQWxsb2MgKExlbik7DQo+ICsgIGlmIChEYXRhU2VnID09IE5VTEwpIHsNCj4gKyAg ICBTdGF0dXMgPSBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4gKyAgICBnb3RvIE9OX0VYSVQ7DQo+ ICsgIH0NCj4gKw0KPiArICBOZXRidWZBbGxvY1NwYWNlIChEYXRhU2VnLCBMZW4sIE5FVF9CVUZf VEFJTCk7DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gU2Vjb25kIHN0ZXAsIHJlY2VpdmUgb25lIFRM UyBwYXlsb2FkLg0KPiArICAvLw0KPiArICBTdGF0dXMgPSBUbHNDb21tb25SZWNlaXZlIChIdHRw SW5zdGFuY2UsIERhdGFTZWcsIFRpbWVvdXQpOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMp KSB7DQo+ICsgICAgZ290byBPTl9FWElUOw0KPiArICB9DQo+ICsNCj4gKyAgSW5zZXJ0VGFpbExp c3QgKE5idWZMaXN0LCAmRGF0YVNlZy0+TGlzdCk7DQo+ICsNCj4gK0ZPUk1fUERVOg0KPiArICAv Lw0KPiArICAvLyBGb3JtIHRoZSBQRFUgZnJvbSBhIGxpc3Qgb2YgUERVLg0KPiArICAvLw0KPiAr ICAqUGR1ID0gTmV0YnVmRnJvbUJ1Zkxpc3QgKE5idWZMaXN0LCAwLCAwLCBGcmVlTmJ1Zkxpc3Qs IE5idWZMaXN0KTsNCj4gKyAgaWYgKCpQZHUgPT0gTlVMTCkgew0KPiArICAgIFN0YXR1cyA9IEVG SV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiArICB9DQo+ICsNCj4gK09OX0VYSVQ6DQo+ICsNCj4gKyAg aWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIC8vDQo+ICsgICAgLy8gRnJlZSB0aGUg TmJ1ZnMgaW4gdGhpcyBOYnVmTGlzdCBhbmQgdGhlIE5idWZMaXN0IGl0c2VsZi4NCj4gKyAgICAv Lw0KPiArICAgIEZyZWVOYnVmTGlzdCAoTmJ1Zkxpc3QpOw0KPiArICB9DQo+ICsNCj4gKyAgcmV0 dXJuIFN0YXR1czsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIENvbm5lY3Qgb25lIFRMUyBzZXNz aW9uIGJ5IGZpbmlzaGluZyB0aGUgVExTIGhhbmRzaGFrZSBwcm9jZXNzLg0KPiArDQo+ICsgIEBw YXJhbVtpbl0gIEh0dHBJbnN0YW5jZSAgICAgICBUaGUgSFRUUCBpbnN0YW5jZSBwcml2YXRlIGRh dGEuDQo+ICsgIEBwYXJhbVtpbl0gIFRpbWVvdXQgICAgICAgICAgICBUaGUgdGltZSB0byB3YWl0 IGZvciBjb25uZWN0aW9uIGRvbmUuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAg ICAgICAgIFRoZSBUTFMgc2Vzc2lvbiBpcyBlc3RhYmxpc2hlZC4NCj4gKyAgQHJldHZhbCBFRklf T1VUX09GX1JFU09VUkNFUyAgIENhbid0IGFsbG9jYXRlIG1lbW9yeSByZXNvdXJjZXMuDQo+ICsg IEByZXR2YWwgRUZJX0FCT1JURUQgICAgICAgICAgICBUTFMgc2Vzc2lvbiBzdGF0ZSBpcyBpbmNv cnJlY3QuDQo+ICsgIEByZXR2YWwgT3RoZXJzICAgICAgICAgICAgICAgICBPdGhlciBlcnJvciBh cyBpbmRpY2F0ZWQuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtU bHNDb25uZWN0U2Vzc2lvbiAoDQo+ICsgIElOICBIVFRQX1BST1RPQ09MICAgICAgICAgICAgKkh0 dHBJbnN0YW5jZSwNCj4gKyAgSU4gIEVGSV9FVkVOVCAgICAgICAgICAgICAgICBUaW1lb3V0DQo+ ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgU3RhdHVzOw0KPiArICBV SU5UOCAgICAgICAgICAgICAgICAgICAqQnVmZmVyT3V0Ow0KPiArICBVSU5UTiAgICAgICAgICAg ICAgICAgICBCdWZmZXJPdXRTaXplOw0KPiArICBORVRfQlVGICAgICAgICAgICAgICAgICAqUGFj a2V0T3V0Ow0KPiArICBVSU5UOCAgICAgICAgICAgICAgICAgICAqRGF0YU91dDsNCj4gKyAgTkVU X0JVRiAgICAgICAgICAgICAgICAgKlBkdTsNCj4gKyAgVUlOVDggICAgICAgICAgICAgICAgICAg KkJ1ZmZlckluOw0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICBCdWZmZXJJblNpemU7DQo+ ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICpHZXRTZXNzaW9uRGF0YUJ1ZmZlcjsNCj4gKyAg VUlOVE4gICAgICAgICAgICAgICAgICAgR2V0U2Vzc2lvbkRhdGFCdWZmZXJTaXplOw0KPiArDQo+ ICsgIEJ1ZmZlck91dCAgICA9IE5VTEw7DQo+ICsgIFBhY2tldE91dCAgICA9IE5VTEw7DQo+ICsg IERhdGFPdXQgICAgICA9IE5VTEw7DQo+ICsgIFBkdSAgICAgICAgICA9IE5VTEw7DQo+ICsgIEJ1 ZmZlckluICAgICA9IE5VTEw7DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gSW5pdGlhbGl6ZSBUTFMg c3RhdGUuDQo+ICsgIC8vDQo+ICsgIEh0dHBJbnN0YW5jZS0+VGxzU2Vzc2lvblN0YXRlID0gRWZp VGxzU2Vzc2lvbk5vdFN0YXJ0ZWQ7DQo+ICsgIFN0YXR1cyA9IEh0dHBJbnN0YW5jZS0+VGxzLT5T ZXRTZXNzaW9uRGF0YSAoDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEh0dHBJ bnN0YW5jZS0+VGxzLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZmlUbHNT ZXNzaW9uU3RhdGUsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYoSHR0cElu c3RhbmNlLT5UbHNTZXNzaW9uU3RhdGUpLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzaXplb2YgKEVGSV9UTFNfU0VTU0lPTl9TVEFURSkNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAg IHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICAvLw0KPiArICAvLyBDcmVhdGUgQ2xp ZW50SGVsbG8NCj4gKyAgLy8NCj4gKyAgQnVmZmVyT3V0U2l6ZSA9IERFRl9CVUZfTEVOOw0KPiAr ICBCdWZmZXJPdXQgPSBBbGxvY2F0ZVplcm9Qb29sIChCdWZmZXJPdXRTaXplKTsNCj4gKyAgaWYg KEJ1ZmZlck91dCA9PSBOVUxMKSB7DQo+ICsgICAgU3RhdHVzID0gRUZJX09VVF9PRl9SRVNPVVJD RVM7DQo+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIFN0YXR1cyA9IEh0 dHBJbnN0YW5jZS0+VGxzLT5CdWlsZFJlc3BvbnNlUGFja2V0ICgNCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgSHR0cEluc3RhbmNlLT5UbHMsDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIE5VTEwsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDAsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1ZmZlck91dCwNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkJ1ZmZlck91dFNpemUNCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgaWYgKFN0YXR1cyA9PSBFRklfQlVGRkVS X1RPT19TTUFMTCkgew0KPiArICAgIEZyZWVQb29sIChCdWZmZXJPdXQpOw0KPiArICAgIEJ1ZmZl ck91dCA9IEFsbG9jYXRlWmVyb1Bvb2wgKEJ1ZmZlck91dFNpemUpOw0KPiArICAgIGlmIChCdWZm ZXJPdXQgPT0gTlVMTCkgew0KPiArICAgICAgU3RhdHVzID0gRUZJX09VVF9PRl9SRVNPVVJDRVM7 DQo+ICsgICAgICByZXR1cm4gU3RhdHVzOw0KPiArICAgIH0NCj4gKw0KPiArICAgIFN0YXR1cyA9 IEh0dHBJbnN0YW5jZS0+VGxzLT5CdWlsZFJlc3BvbnNlUGFja2V0ICgNCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBIdHRwSW5zdGFuY2UtPlRscywNCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBOVUxMLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDAsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVmZmVy T3V0LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZCdWZmZXJPdXRTaXpl DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgfQ0KPiArICBp ZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgRnJlZVBvb2wgKEJ1ZmZlck91dCk7DQo+ ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIFRyYW5z bWl0IENsaWVudEhlbGxvDQo+ICsgIC8vDQo+ICsgIFBhY2tldE91dCA9IE5ldGJ1ZkFsbG9jICgo VUlOVDMyKSBCdWZmZXJPdXRTaXplKTsNCj4gKyAgRGF0YU91dCA9IE5ldGJ1ZkFsbG9jU3BhY2Ug KFBhY2tldE91dCwgKFVJTlQzMikgQnVmZmVyT3V0U2l6ZSwNCj4gTkVUX0JVRl9UQUlMKTsNCj4g KyAgQ29weU1lbSAoRGF0YU91dCwgQnVmZmVyT3V0LCBCdWZmZXJPdXRTaXplKTsNCj4gKyAgU3Rh dHVzID0gVGxzQ29tbW9uVHJhbnNtaXQgKEh0dHBJbnN0YW5jZSwgUGFja2V0T3V0KTsNCj4gKw0K PiArICBGcmVlUG9vbCAoQnVmZmVyT3V0KTsNCj4gKyAgTmV0YnVmRnJlZSAoUGFja2V0T3V0KTsN Cj4gKw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgcmV0dXJuIFN0YXR1 czsNCj4gKyAgfQ0KPiArDQo+ICsgIHdoaWxlKEh0dHBJbnN0YW5jZS0+VGxzU2Vzc2lvblN0YXRl ICE9IEVmaVRsc1Nlc3Npb25EYXRhVHJhbnNmZXJyaW5nICYmIFwNCj4gKyAgICAoKFRpbWVvdXQg PT0gTlVMTCkgfHwgRUZJX0VSUk9SIChnQlMtPkNoZWNrRXZlbnQgKFRpbWVvdXQpKSkpIHsNCj4g KyAgICAvLw0KPiArICAgIC8vIFJlY2VpdmUgb25lIFRMUyByZWNvcmQuDQo+ICsgICAgLy8NCj4g KyAgICBTdGF0dXMgPSBUbHNSZWNlaXZlT25lUGR1IChIdHRwSW5zdGFuY2UsICZQZHUsIFRpbWVv dXQpOw0KPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgIHJldHVybiBT dGF0dXM7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgQnVmZmVySW5TaXplID0gUGR1LT5Ub3RhbFNp emU7DQo+ICsgICAgQnVmZmVySW4gPSBBbGxvY2F0ZVplcm9Qb29sIChCdWZmZXJJblNpemUpOw0K PiArICAgIGlmIChCdWZmZXJJbiA9PSBOVUxMKSB7DQo+ICsgICAgICBOZXRidWZGcmVlIChQZHUp Ow0KPiArICAgICAgU3RhdHVzID0gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ICsgICAgICByZXR1 cm4gU3RhdHVzOw0KPiArICAgIH0NCj4gKw0KPiArICAgIE5ldGJ1ZkNvcHkgKFBkdSwgMCwgKFVJ TlQzMilCdWZmZXJJblNpemUsIEJ1ZmZlckluKTsNCj4gKw0KPiArICAgIE5ldGJ1ZkZyZWUgKFBk dSk7DQo+ICsNCj4gKyAgICAvLw0KPiArICAgIC8vIEhhbmRsZSBSZWNlaXZlIGRhdGEuDQo+ICsg ICAgLy8NCj4gKyAgICBCdWZmZXJPdXRTaXplID0gREVGX0JVRl9MRU47DQo+ICsgICAgQnVmZmVy T3V0ID0gQWxsb2NhdGVaZXJvUG9vbCAoQnVmZmVyT3V0U2l6ZSk7DQo+ICsgICAgaWYgKEJ1ZmZl ck91dCA9PSBOVUxMKSB7DQo+ICsgICAgICBTdGF0dXMgPSBFRklfT1VUX09GX1JFU09VUkNFUzsN Cj4gKyAgICAgIHJldHVybiBTdGF0dXM7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgU3RhdHVzID0g SHR0cEluc3RhbmNlLT5UbHMtPkJ1aWxkUmVzcG9uc2VQYWNrZXQgKA0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEh0dHBJbnN0YW5jZS0+VGxzLA0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEJ1ZmZlckluLA0KPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEJ1ZmZlckluU2l6ZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBCdWZmZXJPdXQsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg JkJ1ZmZlck91dFNpemUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0K PiArICAgIGlmIChTdGF0dXMgPT0gRUZJX0JVRkZFUl9UT09fU01BTEwpIHsNCj4gKyAgICAgICBG cmVlUG9vbCAoQnVmZmVyT3V0KTsNCj4gKyAgICAgICBCdWZmZXJPdXQgPSBBbGxvY2F0ZVplcm9Q b29sIChCdWZmZXJPdXRTaXplKTsNCj4gKyAgICAgICBpZiAoQnVmZmVyT3V0ID09IE5VTEwpIHsN Cj4gKyAgICAgICAgIEZyZWVQb29sIChCdWZmZXJJbik7DQo+ICsgICAgICAgICBTdGF0dXMgPSBF RklfT1VUX09GX1JFU09VUkNFUzsNCj4gKyAgICAgICAgIHJldHVybiBTdGF0dXM7DQo+ICsgICAg ICAgfQ0KPiArDQo+ICsgICAgICAgU3RhdHVzID0gSHR0cEluc3RhbmNlLT5UbHMtPkJ1aWxkUmVz cG9uc2VQYWNrZXQgKA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEh0 dHBJbnN0YW5jZS0+VGxzLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEJ1ZmZlckluLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1ZmZl ckluU2l6ZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdWZmZXJP dXQsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkJ1ZmZlck91dFNp emUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KPiArICAgIH0N Cj4gKw0KPiArICAgIEZyZWVQb29sIChCdWZmZXJJbik7DQo+ICsNCj4gKyAgICBpZiAoRUZJX0VS Uk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICByZXR1cm4gU3RhdHVzOw0KPiArICAgIH0NCj4gKw0K PiArICAgIGlmIChCdWZmZXJPdXRTaXplICE9IDApIHsNCj4gKyAgICAgIC8vDQo+ICsgICAgICAv LyBUcmFuc21pdCB0aGUgcmVzcG9uc2UgcGFja2V0Lg0KPiArICAgICAgLy8NCj4gKyAgICAgIFBh Y2tldE91dCA9IE5ldGJ1ZkFsbG9jICgoVUlOVDMyKSBCdWZmZXJPdXRTaXplKTsNCj4gKyAgICAg IERhdGFPdXQgPSBOZXRidWZBbGxvY1NwYWNlIChQYWNrZXRPdXQsIChVSU5UMzIpIEJ1ZmZlck91 dFNpemUsDQo+IE5FVF9CVUZfVEFJTCk7DQo+ICsgICAgICBDb3B5TWVtIChEYXRhT3V0LCBCdWZm ZXJPdXQsIEJ1ZmZlck91dFNpemUpOw0KPiArDQo+ICsgICAgICBTdGF0dXMgPSBUbHNDb21tb25U cmFuc21pdCAoSHR0cEluc3RhbmNlLCBQYWNrZXRPdXQpOw0KPiArDQo+ICsgICAgICBOZXRidWZG cmVlIChQYWNrZXRPdXQpOw0KPiArDQo+ICsgICAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7 DQo+ICsgICAgICAgIEZyZWVQb29sIChCdWZmZXJPdXQpOw0KPiArICAgICAgICByZXR1cm4gU3Rh dHVzOw0KPiArICAgICAgfQ0KPiArICAgIH0NCj4gKw0KPiArICAgIEZyZWVQb29sIChCdWZmZXJP dXQpOw0KPiArDQo+ICsgICAgLy8NCj4gKyAgICAvLyBHZXQgdGhlIHNlc3Npb24gc3RhdGUsIHRo ZW4gZGVjaWRlIHdoZXRoZXIgbmVlZCB0byBjb250aW51ZSBoYW5kbGUNCj4gcmVjZWl2ZWQgcGFj a2V0Lg0KPiArICAgIC8vDQo+ICsgICAgR2V0U2Vzc2lvbkRhdGFCdWZmZXJTaXplID0gREVGX0JV Rl9MRU47DQo+ICsgICAgR2V0U2Vzc2lvbkRhdGFCdWZmZXIgPSBBbGxvY2F0ZVplcm9Qb29sIChH ZXRTZXNzaW9uRGF0YUJ1ZmZlclNpemUpOw0KPiArICAgIGlmIChHZXRTZXNzaW9uRGF0YUJ1ZmZl ciA9PSBOVUxMKSB7DQo+ICsgICAgICBTdGF0dXMgPSBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4g KyAgICAgIHJldHVybiBTdGF0dXM7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgU3RhdHVzID0gSHR0 cEluc3RhbmNlLT5UbHMtPkdldFNlc3Npb25EYXRhICgNCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBIdHRwSW5zdGFuY2UtPlRscywNCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBFZmlUbHNTZXNzaW9uU3RhdGUsDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgR2V0U2Vzc2lvbkRhdGFCdWZmZXIsDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJkdldFNlc3Npb25EYXRhQnVmZmVyU2l6ZQ0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+ICsgICAgaWYgKFN0YXR1cyA9PSBFRklfQlVG RkVSX1RPT19TTUFMTCkgew0KPiArICAgICAgIEZyZWVQb29sIChHZXRTZXNzaW9uRGF0YUJ1ZmZl cik7DQo+ICsgICAgICAgR2V0U2Vzc2lvbkRhdGFCdWZmZXIgPSBBbGxvY2F0ZVplcm9Qb29sIChH ZXRTZXNzaW9uRGF0YUJ1ZmZlclNpemUpOw0KPiArICAgICAgIGlmIChHZXRTZXNzaW9uRGF0YUJ1 ZmZlciA9PSBOVUxMKSB7DQo+ICsgICAgICAgICBTdGF0dXMgPSBFRklfT1VUX09GX1JFU09VUkNF UzsNCj4gKyAgICAgICAgIHJldHVybiBTdGF0dXM7DQo+ICsgICAgICAgfQ0KPiArDQo+ICsgICAg ICAgU3RhdHVzID0gSHR0cEluc3RhbmNlLT5UbHMtPkdldFNlc3Npb25EYXRhICgNCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIdHRwSW5zdGFuY2UtPlRscywNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZmlUbHNTZXNzaW9uU3RhdGUsDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2V0U2Vzc2lvbkRhdGFCdWZm ZXIsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkdldFNlc3Npb25E YXRhQnVmZmVyU2l6ZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7 DQo+ICsgICAgfQ0KPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgIEZy ZWVQb29sKEdldFNlc3Npb25EYXRhQnVmZmVyKTsNCj4gKyAgICAgIHJldHVybiBTdGF0dXM7DQo+ ICsgICAgfQ0KPiArDQo+ICsgICAgQVNTRVJUKEdldFNlc3Npb25EYXRhQnVmZmVyU2l6ZSA9PSBz aXplb2YgKEVGSV9UTFNfU0VTU0lPTl9TVEFURSkpOw0KPiArICAgIEh0dHBJbnN0YW5jZS0+VGxz U2Vzc2lvblN0YXRlID0gKihFRklfVExTX1NFU1NJT05fU1RBVEUgKikNCj4gR2V0U2Vzc2lvbkRh dGFCdWZmZXI7DQo+ICsNCj4gKyAgICBGcmVlUG9vbCAoR2V0U2Vzc2lvbkRhdGFCdWZmZXIpOw0K PiArDQo+ICsgICAgaWYoSHR0cEluc3RhbmNlLT5UbHNTZXNzaW9uU3RhdGUgPT0gRWZpVGxzU2Vz c2lvbkVycm9yKSB7DQo+ICsgICAgICByZXR1cm4gRUZJX0FCT1JURUQ7DQo+ICsgICAgfQ0KPiAr ICB9DQo+ICsNCj4gKyAgaWYgKEh0dHBJbnN0YW5jZS0+VGxzU2Vzc2lvblN0YXRlICE9IEVmaVRs c1Nlc3Npb25EYXRhVHJhbnNmZXJyaW5nKSB7DQo+ICsgICAgU3RhdHVzID0gRUZJX0FCT1JURUQ7 DQo+ICsgIH0NCj4gKw0KPiArICByZXR1cm4gU3RhdHVzOw0KPiArfQ0KPiArDQo+ICsvKioNCj4g KyAgQ2xvc2UgdGhlIFRMUyBzZXNzaW9uIGFuZCBzZW5kIG91dCB0aGUgY2xvc2Ugbm90aWZpY2F0 aW9uIG1lc3NhZ2UuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgSHR0cEluc3RhbmNlICAgICAgIFRo ZSBIVFRQIGluc3RhbmNlIHByaXZhdGUgZGF0YS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUND RVNTICAgICAgICAgICAgVGhlIFRMUyBzZXNzaW9uIGlzIGNsb3NlZC4NCj4gKyAgQHJldHZhbCBF RklfSU5WQUxJRF9QQVJBTUVURVIgIEh0dHBJbnN0YW5jZSBpcyBOVUxMLg0KPiArICBAcmV0dmFs IEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICAgQ2FuJ3QgYWxsb2NhdGUgbWVtb3J5IHJlc291cmNlcy4N Cj4gKyAgQHJldHZhbCBPdGhlcnMgICAgICAgICAgICAgICAgIE90aGVyIGVycm9yIGFzIGluZGlj YXRlZC4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1Rsc0Nsb3Nl U2Vzc2lvbiAoDQo+ICsgIElOICBIVFRQX1BST1RPQ09MICAgICAgICAgICAgKkh0dHBJbnN0YW5j ZQ0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICBTdGF0dXM7DQo+ICsNCj4gKyAg VUlOVDggICAgICAgICAgICpCdWZmZXJPdXQ7DQo+ICsgIFVJTlROICAgICAgICAgICBCdWZmZXJP dXRTaXplOw0KPiArDQo+ICsgIE5FVF9CVUYgICAgICAgICAqUGFja2V0T3V0Ow0KPiArICBVSU5U OCAgICAgICAgICAgKkRhdGFPdXQ7DQo+ICsNCj4gKyAgU3RhdHVzICAgID0gRUZJX1NVQ0NFU1M7 DQo+ICsgIEJ1ZmZlck91dCA9IE5VTEw7DQo+ICsgIFBhY2tldE91dCA9IE5VTEw7DQo+ICsgIERh dGFPdXQgICA9IE5VTEw7DQo+ICsNCj4gKyAgaWYgKEh0dHBJbnN0YW5jZSA9PSBOVUxMKSB7DQo+ ICsgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gKyAgfQ0KPiArDQo+ICsgIEh0 dHBJbnN0YW5jZS0+VGxzU2Vzc2lvblN0YXRlID0gRWZpVGxzU2Vzc2lvbkNsb3Npbmc7DQo+ICsN Cj4gKyAgU3RhdHVzID0gSHR0cEluc3RhbmNlLT5UbHMtPlNldFNlc3Npb25EYXRhICgNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSHR0cEluc3RhbmNlLT5UbHMsDQo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVmaVRsc1Nlc3Npb25TdGF0ZSwNCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJihIdHRwSW5zdGFuY2UtPlRsc1Nlc3Npb25TdGF0 ZSksDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiAoRUZJX1RMU19T RVNTSU9OX1NUQVRFKQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KPiAr ICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAg fQ0KPiArDQo+ICsgIEJ1ZmZlck91dFNpemUgPSBERUZfQlVGX0xFTjsNCj4gKyAgQnVmZmVyT3V0 ID0gQWxsb2NhdGVaZXJvUG9vbCAoQnVmZmVyT3V0U2l6ZSk7DQo+ICsgIGlmIChCdWZmZXJPdXQg PT0gTlVMTCkgew0KPiArICAgIFN0YXR1cyA9IEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiArICAg IHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICBTdGF0dXMgPSBIdHRwSW5zdGFuY2Ut PlRscy0+QnVpbGRSZXNwb25zZVBhY2tldCAoDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEh0dHBJbnN0YW5jZS0+VGxzLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBOVUxMLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLA0KPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdWZmZXJPdXQsDQo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZCdWZmZXJPdXRTaXplDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICk7DQo+ICsgIGlmIChTdGF0dXMgPT0gRUZJX0JVRkZFUl9UT09fU01BTEwp IHsNCj4gKyAgICBGcmVlUG9vbCAoQnVmZmVyT3V0KTsNCj4gKyAgICBCdWZmZXJPdXQgPSBBbGxv Y2F0ZVplcm9Qb29sIChCdWZmZXJPdXRTaXplKTsNCj4gKyAgICBpZiAoQnVmZmVyT3V0ID09IE5V TEwpIHsNCj4gKyAgICAgIFN0YXR1cyA9IEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiArICAgICAg cmV0dXJuIFN0YXR1czsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBTdGF0dXMgPSBIdHRwSW5zdGFu Y2UtPlRscy0+QnVpbGRSZXNwb25zZVBhY2tldCAoDQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgSHR0cEluc3RhbmNlLT5UbHMsDQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgTlVMTCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1ZmZlck91dCwNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmQnVmZmVyT3V0U2l6ZQ0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoRUZJ X0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgRnJlZVBvb2wgKEJ1ZmZlck91dCk7DQo+ICsgICAg cmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIFBhY2tldE91dCA9IE5ldGJ1ZkFsbG9j ICgoVUlOVDMyKSBCdWZmZXJPdXRTaXplKTsNCj4gKyAgRGF0YU91dCA9IE5ldGJ1ZkFsbG9jU3Bh Y2UgKFBhY2tldE91dCwgKFVJTlQzMikgQnVmZmVyT3V0U2l6ZSwNCj4gTkVUX0JVRl9UQUlMKTsN Cj4gKyAgQ29weU1lbSAoRGF0YU91dCwgQnVmZmVyT3V0LCBCdWZmZXJPdXRTaXplKTsNCj4gKw0K PiArICBTdGF0dXMgPSBUbHNDb21tb25UcmFuc21pdCAoSHR0cEluc3RhbmNlLCBQYWNrZXRPdXQp Ow0KPiArDQo+ICsgIEZyZWVQb29sIChCdWZmZXJPdXQpOw0KPiArICBOZXRidWZGcmVlIChQYWNr ZXRPdXQpOw0KPiArDQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICByZXR1 cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgcmV0dXJuIFN0YXR1czsNCj4gK30NCj4gKw0K PiArLyoqDQo+ICsgIFByb2Nlc3Mgb25lIG1lc3NhZ2UgYWNjb3JkaW5nIHRvIHRoZSBDcnlwdE1v ZGUuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgICAgICAgICAgSHR0cEluc3RhbmNlICAgIFBvaW50 ZXIgdG8gSFRUUF9QUk9UT0NPTCBzdHJ1Y3R1cmUuDQo+ICsgIEBwYXJhbVtpbl0gICAgICAgICAg IE1lc3NhZ2UgICAgICAgICBQb2ludGVyIHRvIHRoZSBtZXNzYWdlIGJ1ZmZlciBuZWVkZWQgdG8N Cj4gcHJvY2Vzc2VkLg0KPiArICBAcGFyYW1baW5dICAgICAgICAgICBNZXNzYWdlU2l6ZSAgICAg UG9pbnRlciB0byB0aGUgbWVzc2FnZSBidWZmZXIgc2l6ZS4NCj4gKyAgQHBhcmFtW2luXSAgICAg ICAgICAgUHJvY2Vzc01vZGUgICAgIFByb2Nlc3MgbW9kZS4NCj4gKyAgQHBhcmFtW2luLCBvdXRd ICAgICAgRnJhZ21lbnQgICAgICAgIE9ubHkgb25lIEZyYWdtZW50IHJldHVybmVkIGFmdGVyIHRo ZQ0KPiBNZXNzYWdlIGlzDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBwcm9jZXNzZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1Mg ICAgICAgICAgTWVzc2FnZSBpcyBwcm9jZXNzZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFs IEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICAgQ2FuJ3QgYWxsb2NhdGUgbWVtb3J5IHJlc291cmNlcy4N Cj4gKyAgQHJldHZhbCBPdGhlcnMgICAgICAgICAgICAgICBPdGhlciBlcnJvcnMgYXMgaW5kaWNh dGVkLg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArVGxzUHJvY2Vz c01lc3NhZ2UgKA0KPiArICBJTiAgICAgSFRUUF9QUk9UT0NPTCAgICAgICAgICAgICpIdHRwSW5z dGFuY2UsDQo+ICsgIElOICAgICBVSU5UOCAgICAgICAgICAgICAgICAgICAgKk1lc3NhZ2UsDQo+ ICsgIElOICAgICBVSU5UTiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZVNpemUsDQo+ICsgIElO ICAgICBFRklfVExTX0NSWVBUX01PREUgICAgICAgUHJvY2Vzc01vZGUsDQo+ICsgIElOIE9VVCBO RVRfRlJBR01FTlQgICAgICAgICAgICAgKkZyYWdtZW50DQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJ X1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ICsgIFVJTlQ4ICAgICAgICAg ICAgICAgICAgICAgICAgICAgKkJ1ZmZlcjsNCj4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAg ICAgICAgICBCdWZmZXJTaXplOw0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAg IEJ5dGVzQ29waWVkOw0KPiArICBFRklfVExTX0ZSQUdNRU5UX0RBVEEgICAgICAgICAgICpGcmFn bWVudFRhYmxlOw0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgIEZyYWdtZW50 Q291bnQ7DQo+ICsgIEVGSV9UTFNfRlJBR01FTlRfREFUQSAgICAgICAgICAgKk9yaWdpbmFsRnJh Z21lbnRUYWJsZTsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleDsN Cj4gKw0KPiArICBTdGF0dXMgICAgICAgICAgICAgICAgICAgPSBFRklfU1VDQ0VTUzsNCj4gKyAg QnVmZmVyICAgICAgICAgICAgICAgICAgID0gTlVMTDsNCj4gKyAgQnVmZmVyU2l6ZSAgICAgICAg ICAgICAgID0gMDsNCj4gKyAgQnl0ZXNDb3BpZWQgICAgICAgICAgICAgID0gMDsNCj4gKyAgRnJh Z21lbnRUYWJsZSAgICAgICAgICAgID0gTlVMTDsNCj4gKyAgT3JpZ2luYWxGcmFnbWVudFRhYmxl ICAgID0gTlVMTDsNCj4gKw0KPiArICAvLw0KPiArICAvLyBSZWJ1aWxkIGZyYWdtZW50IHRhYmxl IGZyb20gQnVmZmVySW4uDQo+ICsgIC8vDQo+ICsgIEZyYWdtZW50Q291bnQgPSAxOw0KPiArICBG cmFnbWVudFRhYmxlID0gQWxsb2NhdGVaZXJvUG9vbCAoRnJhZ21lbnRDb3VudCAqIHNpemVvZg0K PiAoRUZJX1RMU19GUkFHTUVOVF9EQVRBKSk7DQo+ICsgIGlmIChGcmFnbWVudFRhYmxlID09IE5V TEwpIHsNCj4gKyAgICBTdGF0dXMgPSBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4gKyAgICBnb3Rv IE9OX0VYSVQ7DQo+ICsgIH0NCj4gKw0KPiArICBGcmFnbWVudFRhYmxlLT5GcmFnbWVudExlbmd0 aCA9IChVSU5UMzIpIE1lc3NhZ2VTaXplOw0KPiArICBGcmFnbWVudFRhYmxlLT5GcmFnbWVudEJ1 ZmZlciA9IE1lc3NhZ2U7DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gUmVjb3JkIHRoZSBvcmlnaW5h bCBGcmFnbWVudFRhYmxlLg0KPiArICAvLw0KPiArICBPcmlnaW5hbEZyYWdtZW50VGFibGUgPSBG cmFnbWVudFRhYmxlOw0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIFByb2Nlc3MgdGhlIE1lc3NhZ2Uu DQo+ICsgIC8vDQo+ICsgIFN0YXR1cyA9IEh0dHBJbnN0YW5jZS0+VGxzLT5Qcm9jZXNzUGFja2V0 ICgNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSHR0cEluc3RhbmNlLT5UbHMs DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZGcmFnbWVudFRhYmxlLA0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmRnJhZ21lbnRDb3VudCwNCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvY2Vzc01vZGUNCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiAr ICAgIGdvdG8gT05fRVhJVDsNCj4gKyAgfQ0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIENhbGN1bGF0 ZSB0aGUgc2l6ZSBhY2NvcmRpbmcgdG8gRnJhZ21lbnRUYWJsZS4NCj4gKyAgLy8NCj4gKyAgZm9y IChJbmRleCA9IDA7IEluZGV4IDwgRnJhZ21lbnRDb3VudDsgSW5kZXgrKykgew0KPiArICAgIEJ1 ZmZlclNpemUgKz0gRnJhZ21lbnRUYWJsZVtJbmRleF0uRnJhZ21lbnRMZW5ndGg7DQo+ICsgIH0N Cj4gKw0KPiArICAvLw0KPiArICAvLyBBbGxvY2F0ZSBidWZmZXIgZm9yIHByb2Nlc3NlZCBkYXRh Lg0KPiArICAvLw0KPiArICBCdWZmZXIgPSBBbGxvY2F0ZVplcm9Qb29sIChCdWZmZXJTaXplKTsN Cj4gKyAgaWYgKEJ1ZmZlciA9PSBOVUxMKSB7DQo+ICsgICAgU3RhdHVzID0gRUZJX09VVF9PRl9S RVNPVVJDRVM7DQo+ICsgICAgZ290byBPTl9FWElUOw0KPiArICB9DQo+ICsNCj4gKyAgLy8NCj4g KyAgLy8gQ29weSB0aGUgbmV3IEZyYWdtZW50VGFibGUgYnVmZmVyIGludG8gQnVmZmVyLg0KPiAr ICAvLw0KPiArICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBGcmFnbWVudENvdW50OyBJbmRleCsr KSB7DQo+ICsgICAgQ29weU1lbSAoDQo+ICsgICAgICAoQnVmZmVyICsgQnl0ZXNDb3BpZWQpLA0K PiArICAgICAgRnJhZ21lbnRUYWJsZVtJbmRleF0uRnJhZ21lbnRCdWZmZXIsDQo+ICsgICAgICBG cmFnbWVudFRhYmxlW0luZGV4XS5GcmFnbWVudExlbmd0aA0KPiArICAgICAgKTsNCj4gKyAgICBC eXRlc0NvcGllZCArPSBGcmFnbWVudFRhYmxlW0luZGV4XS5GcmFnbWVudExlbmd0aDsNCj4gKw0K PiArICAgIC8vDQo+ICsgICAgLy8gRnJlZSB0aGUgRnJhZ21lbnRCdWZmZXIgc2luY2UgaXQgaGFz IGJlZW4gY29waWVkLg0KPiArICAgIC8vDQo+ICsgICAgRnJlZVBvb2wgKEZyYWdtZW50VGFibGVb SW5kZXhdLkZyYWdtZW50QnVmZmVyKTsNCj4gKyAgfQ0KPiArDQo+ICsgIEZyYWdtZW50LT5MZW4g ID0gQnVmZmVyU2l6ZTsNCj4gKyAgRnJhZ21lbnQtPkJ1bGsgPSBCdWZmZXI7DQo+ICsNCj4gK09O X0VYSVQ6DQo+ICsNCj4gKyAgaWYgKE9yaWdpbmFsRnJhZ21lbnRUYWJsZSAhPSBOVUxMKSB7DQo+ ICsgICAgRnJlZVBvb2wgKE9yaWdpbmFsRnJhZ21lbnRUYWJsZSk7DQo+ICsgICAgT3JpZ2luYWxG cmFnbWVudFRhYmxlID0gTlVMTDsNCj4gKyAgfQ0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIENhbGxl ciBoYXMgdGhlIHJlc3BvbnNpYmlsaXR5IHRvIGZyZWUgdGhlIEZyYWdtZW50VGFibGUuDQo+ICsg IC8vDQo+ICsgIGlmIChGcmFnbWVudFRhYmxlICE9IE5VTEwpIHsNCj4gKyAgICBGcmVlUG9vbCAo RnJhZ21lbnRUYWJsZSk7DQo+ICsgICAgRnJhZ21lbnRUYWJsZSA9IE5VTEw7DQo+ICsgIH0NCj4g Kw0KPiArICByZXR1cm4gU3RhdHVzOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgUmVjZWl2ZSBv bmUgZnJhZ21lbnQgZGVjcnlwdGVkIGZyb20gb25lIFRMUyByZWNvcmQuDQo+ICsNCj4gKyAgQHBh cmFtW2luXSAgICAgICAgICAgSHR0cEluc3RhbmNlICAgIFBvaW50ZXIgdG8gSFRUUF9QUk9UT0NP TCBzdHJ1Y3R1cmUuDQo+ICsgIEBwYXJhbVtpbiwgb3V0XSAgICAgIEZyYWdtZW50ICAgICAgICBU aGUgcmVjZWl2ZWQgRnJhZ21lbnQuDQo+ICsgIEBwYXJhbVtpbl0gICAgICAgICAgIFRpbWVvdXQg ICAgICAgICBUaGUgdGltZSB0byB3YWl0IGZvciBjb25uZWN0aW9uIGRvbmUuDQo+ICsNCj4gKyAg QHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICBPbmUgZnJhZ21lbnQgaXMgcmVjZWl2ZWQuDQo+ ICsgIEByZXR2YWwgRUZJX09VVF9PRl9SRVNPVVJDRVMgQ2FuJ3QgYWxsb2NhdGUgbWVtb3J5IHJl c291cmNlcy4NCj4gKyAgQHJldHZhbCBFRklfQUJPUlRFRCAgICAgICAgICBTb21ldGhpbmcgd3Jv bmcgZGVjcnlwdGlvbiB0aGUgbWVzc2FnZS4NCj4gKyAgQHJldHZhbCBPdGhlcnMgICAgICAgICAg ICAgICBPdGhlciBlcnJvcnMgYXMgaW5kaWNhdGVkLg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFU VVMNCj4gK0VGSUFQSQ0KPiArSHR0cHNSZWNlaXZlICgNCj4gKyAgSU4gICAgIEhUVFBfUFJPVE9D T0wgICAgICAgICAqSHR0cEluc3RhbmNlLA0KPiArICBJTiBPVVQgTkVUX0ZSQUdNRU5UICAgICAg ICAgICpGcmFnbWVudCwNCj4gKyAgSU4gICAgIEVGSV9FVkVOVCAgICAgICAgICAgICBUaW1lb3V0 DQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICBTdGF0 dXM7DQo+ICsgIE5FVF9CVUYgICAgICAgICAgICAgICAgICAgICAgICAgKlBkdTsNCj4gKyAgVExT X1JFQ09SRF9IRUFERVIgICAgICAgICAgICAgICBSZWNvcmRIZWFkZXI7DQo+ICsgIFVJTlQ4ICAg ICAgICAgICAgICAgICAgICAgICAgICAgKkJ1ZmZlckluOw0KPiArICBVSU5UTiAgICAgICAgICAg ICAgICAgICAgICAgICAgIEJ1ZmZlckluU2l6ZTsNCj4gKyAgTkVUX0ZSQUdNRU5UICAgICAgICAg ICAgICAgICAgICBUZW1wRnJhZ21lbnQ7DQo+ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAg ICAgICAgKkJ1ZmZlck91dDsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICBC dWZmZXJPdXRTaXplOw0KPiArICBORVRfQlVGICAgICAgICAgICAgICAgICAgICAgICAgICpQYWNr ZXRPdXQ7DQo+ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgKkRhdGFPdXQ7DQo+ ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgKkdldFNlc3Npb25EYXRhQnVmZmVy Ow0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldFNlc3Npb25EYXRhQnVm ZmVyU2l6ZTsNCj4gKw0KPiArICBTdGF0dXMgICAgICAgICAgICAgICAgICAgPSBFRklfU1VDQ0VT UzsNCj4gKyAgUGR1ICAgICAgICAgICAgICAgICAgICAgID0gTlVMTDsNCj4gKyAgQnVmZmVySW4g ICAgICAgICAgICAgICAgID0gTlVMTDsNCj4gKyAgQnVmZmVySW5TaXplICAgICAgICAgICAgID0g MDsNCj4gKyAgQnVmZmVyT3V0ICAgICAgICAgICAgICAgID0gTlVMTDsNCj4gKyAgQnVmZmVyT3V0 U2l6ZSAgICAgICAgICAgID0gMDsNCj4gKyAgUGFja2V0T3V0ICAgICAgICAgICAgICAgID0gTlVM TDsNCj4gKyAgRGF0YU91dCAgICAgICAgICAgICAgICAgID0gTlVMTDsNCj4gKyAgR2V0U2Vzc2lv bkRhdGFCdWZmZXIgICAgID0gTlVMTDsNCj4gKyAgR2V0U2Vzc2lvbkRhdGFCdWZmZXJTaXplID0g MDsNCj4gKw0KPiArICAvLw0KPiArICAvLyBSZWNlaXZlIG9ubHkgb25lIFRMUyByZWNvcmQNCj4g KyAgLy8NCj4gKyAgU3RhdHVzID0gVGxzUmVjZWl2ZU9uZVBkdSAoSHR0cEluc3RhbmNlLCAmUGR1 LCBUaW1lb3V0KTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIHJldHVy biBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICBCdWZmZXJJblNpemUgPSBQZHUtPlRvdGFsU2l6 ZTsNCj4gKyAgQnVmZmVySW4gPSBBbGxvY2F0ZVplcm9Qb29sIChCdWZmZXJJblNpemUpOw0KPiAr ICBpZiAoQnVmZmVySW4gPT0gTlVMTCkgew0KPiArICAgIFN0YXR1cyA9IEVGSV9PVVRfT0ZfUkVT T1VSQ0VTOw0KPiArICAgIE5ldGJ1ZkZyZWUgKFBkdSk7DQo+ICsgICAgcmV0dXJuIFN0YXR1czsN Cj4gKyAgfQ0KPiArDQo+ICsgIE5ldGJ1ZkNvcHkgKFBkdSwgMCwgKFVJTlQzMikgQnVmZmVySW5T aXplLCBCdWZmZXJJbik7DQo+ICsNCj4gKyAgTmV0YnVmRnJlZSAoUGR1KTsNCj4gKw0KPiArICAv Lw0KPiArICAvLyBIYW5kbGUgUmVjZWl2ZSBkYXRhLg0KPiArICAvLw0KPiArICBSZWNvcmRIZWFk ZXIgPSAqKFRMU19SRUNPUkRfSEVBREVSICopIEJ1ZmZlckluOw0KPiArDQo+ICsgIGlmICgoUmVj b3JkSGVhZGVyLkNvbnRlbnRUeXBlID09DQo+IFRMU19DT05URU5UX1RZUEVfQVBQTElDQVRJT05f REFUQSkgJiYNCj4gKyAgICAoUmVjb3JkSGVhZGVyLlZlcnNpb24uTWFqb3IgPT0gMHgwMykgJiYN Cj4gKyAgICAoUmVjb3JkSGVhZGVyLlZlcnNpb24uTWlub3IgPT0gVExTMTBfUFJPVE9DT0xfVkVS U0lPTl9NSU5PUiB8fA0KPiArICAgIFJlY29yZEhlYWRlci5WZXJzaW9uLk1pbm9yID09IFRMUzEx X1BST1RPQ09MX1ZFUlNJT05fTUlOT1IgfHwNCj4gKyAgICBSZWNvcmRIZWFkZXIuVmVyc2lvbi5N aW5vciA9PSBUTFMxMl9QUk9UT0NPTF9WRVJTSU9OX01JTk9SKQ0KPiArICApIHsNCj4gKyAgICAv Lw0KPiArICAgIC8vIERlY3J5cHQgUGFja2V0Lg0KPiArICAgIC8vDQo+ICsgICAgU3RhdHVzID0g VGxzUHJvY2Vzc01lc3NhZ2UgKA0KPiArICAgICAgICAgICAgICAgSHR0cEluc3RhbmNlLA0KPiAr ICAgICAgICAgICAgICAgQnVmZmVySW4sDQo+ICsgICAgICAgICAgICAgICBCdWZmZXJJblNpemUs DQo+ICsgICAgICAgICAgICAgICBFZmlUbHNEZWNyeXB0LA0KPiArICAgICAgICAgICAgICAgJlRl bXBGcmFnbWVudA0KPiArICAgICAgICAgICAgICAgKTsNCj4gKw0KPiArICAgIEZyZWVQb29sIChC dWZmZXJJbik7DQo+ICsNCj4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAg ICBpZiAoU3RhdHVzID09IEVGSV9BQk9SVEVEKSB7DQo+ICsgICAgICAgIC8vDQo+ICsgICAgICAg IC8vIFNvbWV0aGluZyB3cm9uZyBkZWNyeXB0aW9uIHRoZSBtZXNzYWdlLg0KPiArICAgICAgICAv LyBCdWlsZFJlc3BvbnNlUGFja2V0KCkgd2lsbCBiZSBjYWxsZWQgdG8gZ2VuZXJhdGUgRXJyb3Ig QWxlcnQgbWVzc2FnZQ0KPiBhbmQgc2VuZCBpdCBvdXQuDQo+ICsgICAgICAgIC8vDQo+ICsgICAg ICAgIEJ1ZmZlck91dFNpemUgPSBERUZfQlVGX0xFTjsNCj4gKyAgICAgICAgQnVmZmVyT3V0ID0g QWxsb2NhdGVaZXJvUG9vbCAoQnVmZmVyT3V0U2l6ZSk7DQo+ICsgICAgICAgIGlmIChCdWZmZXJP dXQgPT0gTlVMTCkgew0KPiArICAgICAgICAgIFN0YXR1cyA9IEVGSV9PVVRfT0ZfUkVTT1VSQ0VT Ow0KPiArICAgICAgICAgIHJldHVybiBTdGF0dXM7DQo+ICsgICAgICAgIH0NCj4gKw0KPiArICAg ICAgICBTdGF0dXMgPSBIdHRwSW5zdGFuY2UtPlRscy0+QnVpbGRSZXNwb25zZVBhY2tldCAoDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEh0dHBJbnN0YW5jZS0+VGxz LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLA0KPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLA0KPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBCdWZmZXJPdXQsDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZCdWZmZXJPdXRTaXplDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICk7DQo+ICsgICAgICAgIGlmIChTdGF0dXMgPT0gRUZJX0JVRkZF Ul9UT09fU01BTEwpIHsNCj4gKyAgICAgICAgICBGcmVlUG9vbCAoQnVmZmVyT3V0KTsNCj4gKyAg ICAgICAgICBCdWZmZXJPdXQgPSBBbGxvY2F0ZVplcm9Qb29sIChCdWZmZXJPdXRTaXplKTsNCj4g KyAgICAgICAgICBpZiAoQnVmZmVyT3V0ID09IE5VTEwpIHsNCj4gKyAgICAgICAgICAgIFN0YXR1 cyA9IEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiArICAgICAgICAgICAgcmV0dXJuIFN0YXR1czsN Cj4gKyAgICAgICAgICB9DQo+ICsNCj4gKyAgICAgICAgICBTdGF0dXMgPSBIdHRwSW5zdGFuY2Ut PlRscy0+QnVpbGRSZXNwb25zZVBhY2tldCAoDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgSHR0cEluc3RhbmNlLT5UbHMsDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgTlVMTCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAwLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEJ1ZmZlck91dCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAmQnVmZmVyT3V0U2l6ZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICk7DQo+ICsgICAgICAgIH0NCj4gKyAgICAgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkg ew0KPiArICAgICAgICAgIEZyZWVQb29sKEJ1ZmZlck91dCk7DQo+ICsgICAgICAgICAgcmV0dXJu IFN0YXR1czsNCj4gKyAgICAgICAgfQ0KPiArDQo+ICsgICAgICAgIGlmIChCdWZmZXJPdXRTaXpl ICE9IDApIHsNCj4gKyAgICAgICAgICBQYWNrZXRPdXQgPSBOZXRidWZBbGxvYyAoKFVJTlQzMilC dWZmZXJPdXRTaXplKTsNCj4gKyAgICAgICAgICBEYXRhT3V0ID0gTmV0YnVmQWxsb2NTcGFjZSAo UGFja2V0T3V0LCAoVUlOVDMyKSBCdWZmZXJPdXRTaXplLA0KPiBORVRfQlVGX1RBSUwpOw0KPiAr ICAgICAgICAgIENvcHlNZW0gKERhdGFPdXQsIEJ1ZmZlck91dCwgQnVmZmVyT3V0U2l6ZSk7DQo+ ICsNCj4gKyAgICAgICAgICBTdGF0dXMgPSBUbHNDb21tb25UcmFuc21pdCAoSHR0cEluc3RhbmNl LCBQYWNrZXRPdXQpOw0KPiArDQo+ICsgICAgICAgICAgTmV0YnVmRnJlZSAoUGFja2V0T3V0KTsN Cj4gKyAgICAgICAgfQ0KPiArDQo+ICsgICAgICAgIEZyZWVQb29sKEJ1ZmZlck91dCk7DQo+ICsN Cj4gKyAgICAgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgICAgIHJldHVy biBTdGF0dXM7DQo+ICsgICAgICAgIH0NCj4gKw0KPiArICAgICAgICByZXR1cm4gRUZJX0FCT1JU RUQ7DQo+ICsgICAgICB9DQo+ICsNCj4gKyAgICAgIHJldHVybiBTdGF0dXM7DQo+ICsgICAgfQ0K PiArDQo+ICsgICAgLy8NCj4gKyAgICAvLyBQYXJzaW5nIGJ1ZmZlci4NCj4gKyAgICAvLw0KPiAr ICAgIEFTU0VSVCAoKChUTFNfUkVDT1JEX0hFQURFUiAqKSAoVGVtcEZyYWdtZW50LkJ1bGspKS0+ Q29udGVudFR5cGUNCj4gPT0gVExTX0NPTlRFTlRfVFlQRV9BUFBMSUNBVElPTl9EQVRBKTsNCj4g Kw0KPiArICAgIEJ1ZmZlckluU2l6ZSA9ICgoVExTX1JFQ09SRF9IRUFERVIgKikgKFRlbXBGcmFn bWVudC5CdWxrKSktPkxlbmd0aDsNCj4gKyAgICBCdWZmZXJJbiA9IEFsbG9jYXRlWmVyb1Bvb2wg KEJ1ZmZlckluU2l6ZSk7DQo+ICsgICAgaWYgKEJ1ZmZlckluID09IE5VTEwpIHsNCj4gKyAgICAg IFN0YXR1cyA9IEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiArICAgICAgcmV0dXJuIFN0YXR1czsN Cj4gKyAgICB9DQo+ICsNCj4gKyAgICBDb3B5TWVtIChCdWZmZXJJbiwgVGVtcEZyYWdtZW50LkJ1 bGsgKyBzaXplb2YNCj4gKFRMU19SRUNPUkRfSEVBREVSKSwgQnVmZmVySW5TaXplKTsNCj4gKw0K PiArICAgIC8vDQo+ICsgICAgLy8gRnJlZSB0aGUgYnVmZmVyIGluIFRlbXBGcmFnbWVudC4NCj4g KyAgICAvLw0KPiArICAgIEZyZWVQb29sIChUZW1wRnJhZ21lbnQuQnVsayk7DQo+ICsNCj4gKyAg fSBlbHNlIGlmICgoUmVjb3JkSGVhZGVyLkNvbnRlbnRUeXBlID09IFRMU19DT05URU5UX1RZUEVf QUxFUlQpICYmDQo+ICsgICAgKFJlY29yZEhlYWRlci5WZXJzaW9uLk1ham9yID09IDB4MDMpICYm DQo+ICsgICAgKFJlY29yZEhlYWRlci5WZXJzaW9uLk1pbm9yID09IFRMUzEwX1BST1RPQ09MX1ZF UlNJT05fTUlOT1IgfHwNCj4gKyAgICBSZWNvcmRIZWFkZXIuVmVyc2lvbi5NaW5vciA9PSBUTFMx MV9QUk9UT0NPTF9WRVJTSU9OX01JTk9SIHx8DQo+ICsgICAgUmVjb3JkSGVhZGVyLlZlcnNpb24u TWlub3IgPT0gVExTMTJfUFJPVE9DT0xfVkVSU0lPTl9NSU5PUikNCj4gKyAgICApIHsNCj4gKyAg ICBCdWZmZXJPdXRTaXplID0gREVGX0JVRl9MRU47DQo+ICsgICAgQnVmZmVyT3V0ID0gQWxsb2Nh dGVaZXJvUG9vbCAoQnVmZmVyT3V0U2l6ZSk7DQo+ICsgICAgaWYgKEJ1ZmZlck91dCA9PSBOVUxM KSB7DQo+ICsgICAgICBGcmVlUG9vbCAoQnVmZmVySW4pOw0KPiArICAgICAgU3RhdHVzID0gRUZJ X09VVF9PRl9SRVNPVVJDRVM7DQo+ICsgICAgICByZXR1cm4gU3RhdHVzOw0KPiArICAgIH0NCj4g Kw0KPiArICAgIFN0YXR1cyA9IEh0dHBJbnN0YW5jZS0+VGxzLT5CdWlsZFJlc3BvbnNlUGFja2V0 ICgNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIdHRwSW5zdGFuY2UtPlRs cywNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdWZmZXJJbiwNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdWZmZXJJblNpemUsDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVmZmVyT3V0LA0KPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZCdWZmZXJPdXRTaXplDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKTsNCj4gKyAgICBpZiAoU3RhdHVzID09IEVGSV9CVUZGRVJfVE9PX1NN QUxMKSB7DQo+ICsgICAgICBGcmVlUG9vbCAoQnVmZmVyT3V0KTsNCj4gKyAgICAgIEJ1ZmZlck91 dCA9IEFsbG9jYXRlWmVyb1Bvb2wgKEJ1ZmZlck91dFNpemUpOw0KPiArICAgICAgaWYgKEJ1ZmZl ck91dCA9PSBOVUxMKSB7DQo+ICsgICAgICAgIEZyZWVQb29sIChCdWZmZXJJbik7DQo+ICsgICAg ICAgIFN0YXR1cyA9IEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiArICAgICAgICByZXR1cm4gU3Rh dHVzOw0KPiArICAgICAgfQ0KPiArDQo+ICsgICAgICBTdGF0dXMgPSBIdHRwSW5zdGFuY2UtPlRs cy0+QnVpbGRSZXNwb25zZVBhY2tldCAoDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBIdHRwSW5zdGFuY2UtPlRscywNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEJ1ZmZlckluLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgQnVmZmVySW5TaXplLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg QnVmZmVyT3V0LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkJ1ZmZl ck91dFNpemUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+ICsg ICAgfQ0KPiArDQo+ICsgICAgRnJlZVBvb2wgKEJ1ZmZlckluKTsNCj4gKw0KPiArICAgIGlmIChF RklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgIEZyZWVQb29sIChCdWZmZXJPdXQpOw0KPiAr ICAgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBpZiAoQnVmZmVyT3V0 U2l6ZSAhPSAwKSB7DQo+ICsgICAgICBQYWNrZXRPdXQgPSBOZXRidWZBbGxvYyAoKFVJTlQzMikg QnVmZmVyT3V0U2l6ZSk7DQo+ICsgICAgICBEYXRhT3V0ID0gTmV0YnVmQWxsb2NTcGFjZSAoUGFj a2V0T3V0LCAoVUlOVDMyKSBCdWZmZXJPdXRTaXplLA0KPiBORVRfQlVGX1RBSUwpOw0KPiArICAg ICAgQ29weU1lbSAoRGF0YU91dCwgQnVmZmVyT3V0LCBCdWZmZXJPdXRTaXplKTsNCj4gKw0KPiAr ICAgICAgU3RhdHVzID0gVGxzQ29tbW9uVHJhbnNtaXQgKEh0dHBJbnN0YW5jZSwgUGFja2V0T3V0 KTsNCj4gKw0KPiArICAgICAgTmV0YnVmRnJlZSAoUGFja2V0T3V0KTsNCj4gKyAgICB9DQo+ICsN Cj4gKyAgICBGcmVlUG9vbCAoQnVmZmVyT3V0KTsNCj4gKw0KPiArICAgIC8vDQo+ICsgICAgLy8g R2V0IHRoZSBzZXNzaW9uIHN0YXRlLg0KPiArICAgIC8vDQo+ICsgICAgR2V0U2Vzc2lvbkRhdGFC dWZmZXJTaXplID0gREVGX0JVRl9MRU47DQo+ICsgICAgR2V0U2Vzc2lvbkRhdGFCdWZmZXIgPSBB bGxvY2F0ZVplcm9Qb29sIChHZXRTZXNzaW9uRGF0YUJ1ZmZlclNpemUpOw0KPiArICAgIGlmIChH ZXRTZXNzaW9uRGF0YUJ1ZmZlciA9PSBOVUxMKSB7DQo+ICsgICAgICBTdGF0dXMgPSBFRklfT1VU X09GX1JFU09VUkNFUzsNCj4gKyAgICAgIHJldHVybiBTdGF0dXM7DQo+ICsgICAgfQ0KPiArDQo+ ICsgICAgU3RhdHVzID0gSHR0cEluc3RhbmNlLT5UbHMtPkdldFNlc3Npb25EYXRhICgNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIdHRwSW5zdGFuY2UtPlRscywNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZmlUbHNTZXNzaW9uU3RhdGUsDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2V0U2Vzc2lvbkRhdGFCdWZmZXIsDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkdldFNlc3Npb25EYXRhQnVmZmVy U2l6ZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+ICsgICAgaWYg KFN0YXR1cyA9PSBFRklfQlVGRkVSX1RPT19TTUFMTCkgew0KPiArICAgICAgIEZyZWVQb29sIChH ZXRTZXNzaW9uRGF0YUJ1ZmZlcik7DQo+ICsgICAgICAgR2V0U2Vzc2lvbkRhdGFCdWZmZXIgPSBB bGxvY2F0ZVplcm9Qb29sIChHZXRTZXNzaW9uRGF0YUJ1ZmZlclNpemUpOw0KPiArICAgICAgIGlm IChHZXRTZXNzaW9uRGF0YUJ1ZmZlciA9PSBOVUxMKSB7DQo+ICsgICAgICAgICBTdGF0dXMgPSBF RklfT1VUX09GX1JFU09VUkNFUzsNCj4gKyAgICAgICAgIHJldHVybiBTdGF0dXM7DQo+ICsgICAg ICAgfQ0KPiArDQo+ICsgICAgICAgU3RhdHVzID0gSHR0cEluc3RhbmNlLT5UbHMtPkdldFNlc3Np b25EYXRhICgNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIdHRwSW5z dGFuY2UtPlRscywNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZmlU bHNTZXNzaW9uU3RhdGUsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg R2V0U2Vzc2lvbkRhdGFCdWZmZXIsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJkdldFNlc3Npb25EYXRhQnVmZmVyU2l6ZQ0KPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICk7DQo+ICsgICAgfQ0KPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1 cykpIHsNCj4gKyAgICAgIEZyZWVQb29sIChHZXRTZXNzaW9uRGF0YUJ1ZmZlcik7DQo+ICsgICAg ICByZXR1cm4gU3RhdHVzOw0KPiArICAgIH0NCj4gKw0KPiArICAgIEFTU0VSVChHZXRTZXNzaW9u RGF0YUJ1ZmZlclNpemUgPT0gc2l6ZW9mIChFRklfVExTX1NFU1NJT05fU1RBVEUpKTsNCj4gKyAg ICBIdHRwSW5zdGFuY2UtPlRsc1Nlc3Npb25TdGF0ZSA9ICooRUZJX1RMU19TRVNTSU9OX1NUQVRF ICopDQo+IEdldFNlc3Npb25EYXRhQnVmZmVyOw0KPiArDQo+ICsgICAgRnJlZVBvb2wgKEdldFNl c3Npb25EYXRhQnVmZmVyKTsNCj4gKw0KPiArICAgIGlmKEh0dHBJbnN0YW5jZS0+VGxzU2Vzc2lv blN0YXRlID09IEVmaVRsc1Nlc3Npb25FcnJvcikgew0KPiArICAgICAgREVCVUcgKChFRklfRF9F UlJPUiwgIlRMUyBTZXNzaW9uIFN0YXRlIEVycm9yIVxuIikpOw0KPiArICAgICAgcmV0dXJuIEVG SV9BQk9SVEVEOw0KPiArICAgIH0NCj4gKw0KPiArICAgIEJ1ZmZlckluID0gTlVMTDsNCj4gKyAg ICBCdWZmZXJJblNpemUgPSAwOw0KPiArICB9DQo+ICsNCj4gKyAgRnJhZ21lbnQtPkJ1bGsgPSBC dWZmZXJJbjsNCj4gKyAgRnJhZ21lbnQtPkxlbiA9IChVSU5UMzIpIEJ1ZmZlckluU2l6ZTsNCj4g Kw0KPiArICByZXR1cm4gU3RhdHVzOw0KPiArfQ0KPiBkaWZmIC0tZ2l0IGEvTmV0d29ya1BrZy9I dHRwRHhlL0h0dHBzU3VwcG9ydC5oDQo+IGIvTmV0d29ya1BrZy9IdHRwRHhlL0h0dHBzU3VwcG9y dC5oDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAuLmQ4NDZiNzYNCj4g LS0tIC9kZXYvbnVsbA0KPiArKysgYi9OZXR3b3JrUGtnL0h0dHBEeGUvSHR0cHNTdXBwb3J0LmgN Cj4gQEAgLTAsMCArMSwyNjAgQEANCj4gKy8qKiBAZmlsZQ0KPiArICBUaGUgaGVhZGVyIGZpbGVz IG9mIG1pc2NlbGxhbmVvdXMgcm91dGluZXMgc3BlY2lmaWMgdG8gSHR0cHMgZm9yIEh0dHBEeGUN Cj4gZHJpdmVyLg0KPiArDQo+ICtDb3B5cmlnaHQgKGMpIDIwMTYsIEludGVsIENvcnBvcmF0aW9u LiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gK1RoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29t cGFueWluZyBtYXRlcmlhbHMNCj4gK2FyZSBsaWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFibGUgdW5k ZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBCU0QNCj4gTGljZW5zZQ0KPiArd2hp Y2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24uICBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBs aWNlbnNlIG1heSBiZQ0KPiBmb3VuZCBhdA0KPiAraHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vu c2VzL2JzZC1saWNlbnNlLnBocA0KPiArDQo+ICtUSEUgUFJPR1JBTSBJUyBESVNUUklCVVRFRCBV TkRFUiBUSEUgQlNEIExJQ0VOU0UgT04gQU4gIkFTIElTIg0KPiBCQVNJUywNCj4gK1dJVEhPVVQg V0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUg0KPiBFWFBS RVNTIE9SIElNUExJRUQuDQo+ICsNCj4gKyoqLw0KPiArDQo+ICsjaWZuZGVmIF9fRUZJX0hUVFBT X1NVUFBPUlRfSF9fDQo+ICsjZGVmaW5lIF9fRUZJX0hUVFBTX1NVUFBPUlRfSF9fDQo+ICsNCj4g KyNkZWZpbmUgSFRUUFNfREVGQVVMVF9QT1JUICAgICAgIDQ0Mw0KPiArDQo+ICsjZGVmaW5lIEhU VFBTX0ZMQUcgICAgICAgICAgICAgICAiaHR0cHMiDQo+ICsNCj4gKy8qKg0KPiArICBDaGVjayB3 aGV0aGVyIHRoZSBVcmwgaXMgZnJvbSBIdHRwcy4NCj4gKw0KPiArICBAcGFyYW1baW5dICAgIFVy bCAgICAgICAgICAgICBUaGUgcG9pbnRlciB0byBhIEhUVFAgb3IgSFRUUFMgVVJMIHN0cmluZy4N Cj4gKw0KPiArICBAcmV0dmFsIFRSVUUgICAgICAgICAgICAgICAgICBUaGUgVXJsIGlzIGZyb20g SFRUUFMuDQo+ICsgIEByZXR2YWwgRkFMU0UgICAgICAgICAgICAgICAgIFRoZSBVcmwgaXMgZnJv bSBIVFRQLg0KPiArDQo+ICsqKi8NCj4gK0JPT0xFQU4NCj4gK0lzSHR0cHNVcmwgKA0KPiArICBJ TiBDSEFSOCAgICAqVXJsDQo+ICsgICk7DQo+ICsNCj4gKy8qKg0KPiArICBDcmVhdGVzIGEgVGxz IGNoaWxkIGhhbmRsZSwgb3BlbiBFRklfVExTX1BST1RPQ09MIGFuZA0KPiBFRklfVExTX0NPTkZJ R1VSQVRJT05fUFJPVE9DT0wuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgSW1hZ2VIYW5kbGUgICAg ICAgICAgIFRoZSBmaXJtd2FyZSBhbGxvY2F0ZWQgaGFuZGxlIGZvciB0aGUgVUVGSQ0KPiBpbWFn ZS4NCj4gKyAgQHBhcmFtW291dF0gVGxzUHJvdG8gICAgICAgICAgICAgIFBvaW50ZXIgdG8gdGhl IEVGSV9UTFNfUFJPVE9DT0wgaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtvdXRdIFRsc0NvbmZpZ3Vy YXRpb24gICAgICBQb2ludGVyIHRvIHRoZQ0KPiBFRklfVExTX0NPTkZJR1VSQVRJT05fUFJPVE9D T0wgaW5zdGFuY2UuDQo+ICsNCj4gKyAgQHJldHVybiAgVGhlIGNoaWxkIGhhbmRsZSB3aXRoIG9w ZW5lZCBFRklfVExTX1BST1RPQ09MIGFuZA0KPiBFRklfVExTX0NPTkZJR1VSQVRJT05fUFJPVE9D T0wuDQo+ICsNCj4gKyoqLw0KPiArRUZJX0hBTkRMRQ0KPiArRUZJQVBJDQo+ICtUbHNDcmVhdGVD aGlsZCAoDQo+ICsgIElOICBFRklfSEFORExFICAgICAgICAgICAgICAgICAgICAgSW1hZ2VIYW5k bGUsDQo+ICsgIE9VVCBFRklfVExTX1BST1RPQ09MICAgICAgICAgICAgICAgKipUbHNQcm90bywN Cj4gKyAgT1VUIEVGSV9UTFNfQ09ORklHVVJBVElPTl9QUk9UT0NPTCAqKlRsc0NvbmZpZ3VyYXRp b24NCj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIENyZWF0ZSBldmVudCBmb3IgdGhlIFRMUyBy ZWNlaXZlIGFuZCB0cmFuc21pdCB0b2tlbnMgd2hpY2ggYXJlIHVzZWQgdG8NCj4gcmVjZWl2ZSBh bmQNCj4gKyAgdHJhbnNtaXQgVExTIHJlbGF0ZWQgbWVzc2FnZXMuDQo+ICsNCj4gKyAgQHBhcmFt W2luLCBvdXRdICBIdHRwSW5zdGFuY2UgICAgICAgUG9pbnRlciB0byBIVFRQX1BST1RPQ09MIHN0 cnVjdHVyZS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgVGhlIGV2 ZW50cyBhcmUgY3JlYXRlZCBzdWNjZXNzZnVsbHkuDQo+ICsgIEByZXR2YWwgb3RoZXJzICAgICAg ICAgICAgICAgICBPdGhlciBlcnJvciBhcyBpbmRpY2F0ZWQuDQo+ICsNCj4gKyoqLw0KPiArRUZJ X1NUQVRVUw0KPiArRUZJQVBJDQo+ICtUbHNDcmVhdGVUeFJ4RXZlbnQgKA0KPiArICBJTiBPVVQg SFRUUF9QUk9UT0NPTCAgICAgICpIdHRwSW5zdGFuY2UNCj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ ICsgIENsb3NlIGV2ZW50cyBpbiB0aGUgVGxzVHhUb2tlbiBhbmQgVGxzUnhUb2tlbi4NCj4gKw0K PiArICBAcGFyYW1baW5dICBIdHRwSW5zdGFuY2UgICBQb2ludGVyIHRvIEhUVFBfUFJPVE9DT0wg c3RydWN0dXJlLg0KPiArDQo+ICsqKi8NCj4gK1ZPSUQNCj4gK0VGSUFQSQ0KPiArVGxzQ2xvc2VU eFJ4RXZlbnQgKA0KPiArICBJTiAgSFRUUF9QUk9UT0NPTCAgICAgICAgKkh0dHBJbnN0YW5jZQ0K PiArICApOw0KPiArDQo+ICsvKioNCj4gKyAgUmVhZCB0aGUgVGxzQ2FDZXJ0aWZpY2F0ZSB2YXJp YWJsZSBhbmQgY29uZmlndXJlIGl0Lg0KPiArDQo+ICsgIEBwYXJhbVtpbiwgb3V0XSAgSHR0cElu c3RhbmNlICAgICAgIFRoZSBIVFRQIGluc3RhbmNlIHByaXZhdGUgZGF0YS4NCj4gKw0KPiArICBA cmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgVGxzQ2FDZXJ0aWZpY2F0ZSBpcyBjb25maWd1 cmVkLg0KPiArICBAcmV0dmFsIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICAgQ2FuJ3QgYWxsb2NhdGUg bWVtb3J5IHJlc291cmNlcy4NCj4gKyAgQHJldHZhbCBFRklfTk9UX0ZPVU5EICAgICAgICAgIEZh aWwgdG8gZ2V0ICJUbHNDYUNlcnRpZmljYXRlIiB2YXJpYWJsZS4NCj4gKyAgQHJldHZhbCBPdGhl cnMgICAgICAgICAgICAgICAgIE90aGVyIGVycm9yIGFzIGluZGljYXRlZC4NCj4gKw0KPiArKiov DQo+ICtFRklfU1RBVFVTDQo+ICtUbHNDb25maWdDZXJ0aWZpY2F0ZSAoDQo+ICsgIElOIE9VVCBI VFRQX1BST1RPQ09MICAgICAgKkh0dHBJbnN0YW5jZQ0KPiArICApOw0KPiArDQo+ICsvKioNCj4g KyAgQ29uZmlndXJlIFRMUyBzZXNzaW9uIGRhdGEuDQo+ICsNCj4gKyAgQHBhcmFtW2luLCBvdXRd ICBIdHRwSW5zdGFuY2UgICAgICAgVGhlIEhUVFAgaW5zdGFuY2UgcHJpdmF0ZSBkYXRhLg0KPiAr DQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICBUTFMgc2Vzc2lvbiBkYXRhIGlz IGNvbmZpZ3VyZWQuDQo+ICsgIEByZXR2YWwgT3RoZXJzICAgICAgICAgICAgICAgICBPdGhlciBl cnJvciBhcyBpbmRpY2F0ZWQuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJ DQo+ICtUbHNDb25maWd1cmVTZXNzaW9uICgNCj4gKyAgSU4gT1VUIEhUVFBfUFJPVE9DT0wgICAg ICAqSHR0cEluc3RhbmNlDQo+ICsgICk7DQo+ICsNCj4gKy8qKg0KPiArICBUcmFuc21pdCB0aGUg UGFja2V0IGJ5IHByb2Nlc3NpbmcgdGhlIGFzc29jaWF0ZWQgSFRUUFMgdG9rZW4uDQo+ICsNCj4g KyAgQHBhcmFtW2luLCBvdXRdICAgSHR0cEluc3RhbmNlICAgIFBvaW50ZXIgdG8gSFRUUF9QUk9U T0NPTCBzdHJ1Y3R1cmUuDQo+ICsgIEBwYXJhbVtpbl0gICAgICAgIFBhY2tldCAgICAgICAgICBU aGUgcGFja2V0IHRvIHRyYW5zbWl0Lg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAg ICAgICAgICBUaGUgcGFja2V0IGlzIHRyYW5zbWl0dGVkLg0KPiArICBAcmV0dmFsIEVGSV9JTlZB TElEX1BBUkFNRVRFUiAgSHR0cEluc3RhbmNlIGlzIE5VTEwgb3IgUGFja2V0IGlzIE5VTEwuDQo+ ICsgIEByZXR2YWwgRUZJX09VVF9PRl9SRVNPVVJDRVMgICBDYW4ndCBhbGxvY2F0ZSBtZW1vcnkg cmVzb3VyY2VzLg0KPiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICAgQW4gdW5leHBl Y3RlZCBzeXN0ZW0gb3IgbmV0d29yayBlcnJvcg0KPiBvY2N1cnJlZC4NCj4gKyAgQHJldHZhbCBP dGhlcnMgICAgICAgICAgICAgICAgIE90aGVyIGVycm9ycyBhcyBpbmRpY2F0ZWQuDQo+ICsNCj4g KyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtUbHNDb21tb25UcmFuc21pdCAoDQo+ ICsgIElOIE9VVCBIVFRQX1BST1RPQ09MICAgICAgKkh0dHBJbnN0YW5jZSwNCj4gKyAgSU4gICAg IE5FVF9CVUYgICAgICAgICAgICAqUGFja2V0DQo+ICsgICk7DQo+ICsNCj4gKy8qKg0KPiArICBS ZWNlaXZlIHRoZSBQYWNrZXQgYnkgcHJvY2Vzc2luZyB0aGUgYXNzb2NpYXRlZCBIVFRQUyB0b2tl bi4NCj4gKw0KPiArICBAcGFyYW1baW4sIG91dF0gICBIdHRwSW5zdGFuY2UgICAgUG9pbnRlciB0 byBIVFRQX1BST1RPQ09MIHN0cnVjdHVyZS4NCj4gKyAgQHBhcmFtW2luXSAgICAgICAgUGFja2V0 ICAgICAgICAgIFRoZSBwYWNrZXQgdG8gdHJhbnNtaXQuDQo+ICsgIEBwYXJhbVtpbl0gICAgICAg IFRpbWVvdXQgICAgICAgICBUaGUgdGltZSB0byB3YWl0IGZvciBjb25uZWN0aW9uIGRvbmUuDQo+ ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgIFRoZSBQYWNrZXQgaXMgcmVj ZWl2ZWQuDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICBIdHRwSW5zdGFuY2Ug aXMgTlVMTCBvciBQYWNrZXQgaXMgTlVMTC4NCj4gKyAgQHJldHZhbCBFRklfT1VUX09GX1JFU09V UkNFUyAgIENhbid0IGFsbG9jYXRlIG1lbW9yeSByZXNvdXJjZXMuDQo+ICsgIEByZXR2YWwgRUZJ X1RJTUVPVVQgICAgICAgICAgICBUaGUgb3BlcmF0aW9uIGlzIHRpbWUgb3V0Lg0KPiArICBAcmV0 dmFsIE90aGVycyAgICAgICAgICAgICAgICAgT3RoZXIgZXJyb3IgYXMgaW5kaWNhdGVkLg0KPiAr DQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArVGxzQ29tbW9uUmVjZWl2ZSAo DQo+ICsgIElOIE9VVCBIVFRQX1BST1RPQ09MICAgICAgKkh0dHBJbnN0YW5jZSwNCj4gKyAgSU4g ICAgIE5FVF9CVUYgICAgICAgICAgICAqUGFja2V0LA0KPiArICBJTiAgICAgRUZJX0VWRU5UICAg ICAgICAgIFRpbWVvdXQNCj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIFJlY2VpdmUgb25lIFRM UyBQRFUuIEFuIFRMUyBQRFUgY29udGFpbnMgYW4gVExTIHJlY29yZCBoZWFkZXIgYW5kIGl0J3MN Cj4gKyAgY29ycmVzcG9uZGluZyByZWNvcmQgZGF0YS4gVGhlIHR3byBwYXJ0cyB3aWxsIGJlIHB1 dCBpbnRvIHR3byBibG9ja3Mgb2YNCj4gYnVmZmVycyBpbiB0aGUNCj4gKyAgbmV0IGJ1ZmZlci4N Cj4gKw0KPiArICBAcGFyYW1baW4sIG91dF0gICAgICBIdHRwSW5zdGFuY2UgICAgUG9pbnRlciB0 byBIVFRQX1BST1RPQ09MIHN0cnVjdHVyZS4NCj4gKyAgQHBhcmFtW291dF0gICAgICAgICAgUGR1 ICAgICAgICAgICAgIFRoZSByZWNlaXZlZCBUTFMgUERVLg0KPiArICBAcGFyYW1baW5dICAgICAg ICAgICBUaW1lb3V0ICAgICAgICAgVGhlIHRpbWUgdG8gd2FpdCBmb3IgY29ubmVjdGlvbiBkb25l Lg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgQW4gVExTIFBEVSBpcyBy ZWNlaXZlZC4NCj4gKyAgQHJldHZhbCBFRklfT1VUX09GX1JFU09VUkNFUyBDYW4ndCBhbGxvY2F0 ZSBtZW1vcnkgcmVzb3VyY2VzLg0KPiArICBAcmV0dmFsIEVGSV9QUk9UT0NPTF9FUlJPUiAgIEFu IHVuZXhwZWN0ZWQgVExTIHBhY2tldCB3YXMgcmVjZWl2ZWQuDQo+ICsgIEByZXR2YWwgT3RoZXJz ICAgICAgICAgICAgICAgT3RoZXIgZXJyb3JzIGFzIGluZGljYXRlZC4NCj4gKw0KPiArKiovDQo+ ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1Rsc1JlY2VpdmVPbmVQZHUgKA0KPiArICBJTiBP VVQgSFRUUF9QUk9UT0NPTCAgICAgICpIdHRwSW5zdGFuY2UsDQo+ICsgICAgIE9VVCBORVRfQlVG ICAgICAgICAgICAgKipQZHUsDQo+ICsgIElOICAgICBFRklfRVZFTlQgICAgICAgICAgVGltZW91 dA0KPiArICApOw0KPiArDQo+ICsvKioNCj4gKyAgQ29ubmVjdCBvbmUgVExTIHNlc3Npb24gYnkg ZmluaXNoaW5nIHRoZSBUTFMgaGFuZHNoYWtlIHByb2Nlc3MuDQo+ICsNCj4gKyAgQHBhcmFtW2lu XSAgSHR0cEluc3RhbmNlICAgICAgIFRoZSBIVFRQIGluc3RhbmNlIHByaXZhdGUgZGF0YS4NCj4g KyAgQHBhcmFtW2luXSAgVGltZW91dCAgICAgICAgICAgIFRoZSB0aW1lIHRvIHdhaXQgZm9yIGNv bm5lY3Rpb24gZG9uZS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAg VGhlIFRMUyBzZXNzaW9uIGlzIGVzdGFibGlzaGVkLg0KPiArICBAcmV0dmFsIEVGSV9PVVRfT0Zf UkVTT1VSQ0VTICAgQ2FuJ3QgYWxsb2NhdGUgbWVtb3J5IHJlc291cmNlcy4NCj4gKyAgQHJldHZh bCBFRklfQUJPUlRFRCAgICAgICAgICAgIFRMUyBzZXNzaW9uIHN0YXRlIGlzIGluY29ycmVjdC4N Cj4gKyAgQHJldHZhbCBPdGhlcnMgICAgICAgICAgICAgICAgIE90aGVyIGVycm9yIGFzIGluZGlj YXRlZC4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1Rsc0Nvbm5l Y3RTZXNzaW9uICgNCj4gKyAgSU4gIEhUVFBfUFJPVE9DT0wgICAgICAgICAgICAqSHR0cEluc3Rh bmNlLA0KPiArICBJTiAgRUZJX0VWRU5UICAgICAgICAgICAgICAgIFRpbWVvdXQNCj4gKyAgKTsN Cj4gKw0KPiArLyoqDQo+ICsgIENsb3NlIHRoZSBUTFMgc2Vzc2lvbiBhbmQgc2VuZCBvdXQgdGhl IGNsb3NlIG5vdGlmaWNhdGlvbiBtZXNzYWdlLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIEh0dHBJ bnN0YW5jZSAgICAgICBUaGUgSFRUUCBpbnN0YW5jZSBwcml2YXRlIGRhdGEuDQo+ICsNCj4gKyAg QHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgIFRoZSBUTFMgc2Vzc2lvbiBpcyBjbG9zZWQu DQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICBIdHRwSW5zdGFuY2UgaXMgTlVM TCBvciBQYWNrZXQgaXMgTlVMTC4NCj4gKyAgQHJldHZhbCBFRklfT1VUX09GX1JFU09VUkNFUyAg IENhbid0IGFsbG9jYXRlIG1lbW9yeSByZXNvdXJjZXMuDQo+ICsgIEByZXR2YWwgT3RoZXJzICAg ICAgICAgICAgICAgICBPdGhlciBlcnJvciBhcyBpbmRpY2F0ZWQuDQo+ICsNCj4gKyoqLw0KPiAr RUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtUbHNDbG9zZVNlc3Npb24gKA0KPiArICBJTiAgSFRU UF9QUk9UT0NPTCAgICAgICAgICAgICpIdHRwSW5zdGFuY2UNCj4gKyAgKTsNCj4gKw0KPiArLyoq DQo+ICsgIFByb2Nlc3Mgb25lIG1lc3NhZ2UgYWNjb3JkaW5nIHRvIHRoZSBDcnlwdE1vZGUuDQo+ ICsNCj4gKyAgQHBhcmFtW2luXSAgICAgICAgICAgSHR0cEluc3RhbmNlICAgIFBvaW50ZXIgdG8g SFRUUF9QUk9UT0NPTCBzdHJ1Y3R1cmUuDQo+ICsgIEBwYXJhbVtpbl0gICAgICAgICAgIE1lc3Nh Z2UgICAgICAgICBQb2ludGVyIHRvIHRoZSBtZXNzYWdlIGJ1ZmZlciBuZWVkZWQgdG8NCj4gcHJv Y2Vzc2VkLg0KPiArICBAcGFyYW1baW5dICAgICAgICAgICBNZXNzYWdlU2l6ZSAgICAgUG9pbnRl ciB0byB0aGUgbWVzc2FnZSBidWZmZXIgc2l6ZS4NCj4gKyAgQHBhcmFtW2luXSAgICAgICAgICAg UHJvY2Vzc01vZGUgICAgIFByb2Nlc3MgbW9kZS4NCj4gKyAgQHBhcmFtW2luLCBvdXRdICAgICAg RnJhZ21lbnQgICAgICAgIE9ubHkgb25lIEZyYWdtZW50IHJldHVybmVkIGFmdGVyIHRoZQ0KPiBN ZXNzYWdlIGlzDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9j ZXNzZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAg ICAgTWVzc2FnZSBpcyBwcm9jZXNzZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9P VVRfT0ZfUkVTT1VSQ0VTICAgQ2FuJ3QgYWxsb2NhdGUgbWVtb3J5IHJlc291cmNlcy4NCj4gKyAg QHJldHZhbCBPdGhlcnMgICAgICAgICAgICAgICBPdGhlciBlcnJvcnMgYXMgaW5kaWNhdGVkLg0K PiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArVGxzUHJvY2Vzc01lc3Nh Z2UgKA0KPiArICBJTiAgICAgSFRUUF9QUk9UT0NPTCAgICAgICAgICAgICpIdHRwSW5zdGFuY2Us DQo+ICsgIElOICAgICBVSU5UOCAgICAgICAgICAgICAgICAgICAgKk1lc3NhZ2UsDQo+ICsgIElO ICAgICBVSU5UTiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZVNpemUsDQo+ICsgIElOICAgICBF RklfVExTX0NSWVBUX01PREUgICAgICAgUHJvY2Vzc01vZGUsDQo+ICsgIElOIE9VVCBORVRfRlJB R01FTlQgICAgICAgICAgICAgKkZyYWdtZW50DQo+ICsgICk7DQo+ICsNCj4gKy8qKg0KPiArICBS ZWNlaXZlIG9uZSBmcmFnbWVudCBkZWNyeXB0ZWQgZnJvbSBvbmUgVExTIHJlY29yZC4NCj4gKw0K PiArICBAcGFyYW1baW5dICAgICAgICAgICBIdHRwSW5zdGFuY2UgICAgUG9pbnRlciB0byBIVFRQ X1BST1RPQ09MIHN0cnVjdHVyZS4NCj4gKyAgQHBhcmFtW2luLCBvdXRdICAgICAgRnJhZ21lbnQg ICAgICAgIFRoZSByZWNlaXZlZCBGcmFnbWVudC4NCj4gKyAgQHBhcmFtW2luXSAgICAgICAgICAg VGltZW91dCAgICAgICAgIFRoZSB0aW1lIHRvIHdhaXQgZm9yIGNvbm5lY3Rpb24gZG9uZS4NCj4g Kw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgIE9uZSBmcmFnbWVudCBpcyByZWNl aXZlZC4NCj4gKyAgQHJldHZhbCBFRklfT1VUX09GX1JFU09VUkNFUyBDYW4ndCBhbGxvY2F0ZSBt ZW1vcnkgcmVzb3VyY2VzLg0KPiArICBAcmV0dmFsIEVGSV9BQk9SVEVEICAgICAgICAgIFNvbWV0 aGluZyB3cm9uZyBkZWNyeXB0aW9uIHRoZSBtZXNzYWdlLg0KPiArICBAcmV0dmFsIE90aGVycyAg ICAgICAgICAgICAgIE90aGVyIGVycm9ycyBhcyBpbmRpY2F0ZWQuDQo+ICsNCj4gKyoqLw0KPiAr RUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtIdHRwc1JlY2VpdmUgKA0KPiArICBJTiAgICAgSFRU UF9QUk9UT0NPTCAgICAgICAgICpIdHRwSW5zdGFuY2UsDQo+ICsgIElOIE9VVCBORVRfRlJBR01F TlQgICAgICAgICAgKkZyYWdtZW50LA0KPiArICBJTiAgICAgRUZJX0VWRU5UICAgICAgICAgICAg IFRpbWVvdXQNCj4gKyAgKTsNCj4gKw0KPiArI2VuZGlmDQo+IC0tDQo+IDEuOS41Lm1zeXNnaXQu MQ0KDQo=