From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=192.55.52.151; helo=mga17.intel.com; envelope-from=liming.gao@intel.com; receiver=edk2-devel@lists.01.org Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) (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 D2609211B1FA7 for ; Tue, 8 Jan 2019 18:17:32 -0800 (PST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga007.jf.intel.com ([10.7.209.58]) by fmsmga107.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 08 Jan 2019 18:17:31 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.56,455,1539673200"; d="scan'208";a="105082233" Received: from fmsmsx103.amr.corp.intel.com ([10.18.124.201]) by orsmga007.jf.intel.com with ESMTP; 08 Jan 2019 18:17:29 -0800 Received: from fmsmsx102.amr.corp.intel.com (10.18.124.200) by FMSMSX103.amr.corp.intel.com (10.18.124.201) with Microsoft SMTP Server (TLS) id 14.3.408.0; Tue, 8 Jan 2019 18:17:29 -0800 Received: from shsmsx101.ccr.corp.intel.com (10.239.4.153) by FMSMSX102.amr.corp.intel.com (10.18.124.200) with Microsoft SMTP Server (TLS) id 14.3.408.0; Tue, 8 Jan 2019 18:17:25 -0800 Received: from shsmsx152.ccr.corp.intel.com ([169.254.6.44]) by SHSMSX101.ccr.corp.intel.com ([169.254.1.196]) with mapi id 14.03.0415.000; Wed, 9 Jan 2019 10:17:23 +0800 From: "Gao, Liming" To: "Chen, Chen A" , "edk2-devel@lists.01.org" CC: "Zhang, Chao B" Thread-Topic: [edk2] [PATCH] SecurityPkg: Remove code under UserIdentification folder. Thread-Index: AQHUp7jo5KbEieEaNkSQSrXNde2i06WmKIyA//9+eACAAIw2MA== Date: Wed, 9 Jan 2019 02:17:21 +0000 Message-ID: <4A89E2EF3DFEDB4C8BFDE51014F606A14E3ADFE8@SHSMSX152.ccr.corp.intel.com> References: <20190109010913.29524-1-chen.a.chen@intel.com> <4A89E2EF3DFEDB4C8BFDE51014F606A14E3ADF77@SHSMSX152.ccr.corp.intel.com> <8CCE94730AD68946B3D28B43192D9D2D06E597BD@shsmsx102.ccr.corp.intel.com> In-Reply-To: <8CCE94730AD68946B3D28B43192D9D2D06E597BD@shsmsx102.ccr.corp.intel.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Subject: Re: [PATCH] SecurityPkg: Remove code under UserIdentification folder. X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 09 Jan 2019 02:17:33 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 V2hlbiB5b3UgdXBkYXRlIHRoZSBwYXRjaCwgcGxlYXNlIGFsc28gYWRkIEJaIFVSTCBpbiB0aGUg Y29tbWl0IG1lc3NhZ2UuIA0KDQpUaGFua3MNCkxpbWluZw0KPi0tLS0tT3JpZ2luYWwgTWVzc2Fn ZS0tLS0tDQo+RnJvbTogQ2hlbiwgQ2hlbiBBDQo+U2VudDogV2VkbmVzZGF5LCBKYW51YXJ5IDA5 LCAyMDE5IDk6NTUgQU0NCj5UbzogR2FvLCBMaW1pbmcgPGxpbWluZy5nYW9AaW50ZWwuY29tPjsg ZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmcNCj5DYzogWmhhbmcsIENoYW8gQiA8Y2hhby5iLnpoYW5n QGludGVsLmNvbT4NCj5TdWJqZWN0OiBSRTogW2VkazJdIFtQQVRDSF0gU2VjdXJpdHlQa2c6IFJl bW92ZSBjb2RlIHVuZGVyDQo+VXNlcklkZW50aWZpY2F0aW9uIGZvbGRlci4NCj4NCj5ZZXMsIENo YW8gaGFzIGZpbGVkIG9uIEJaMTQyNy4NCj4NCj4tLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0K PkZyb206IEdhbywgTGltaW5nDQo+U2VudDogV2VkbmVzZGF5LCBKYW51YXJ5IDksIDIwMTkgOToz OSBBTQ0KPlRvOiBDaGVuLCBDaGVuIEEgPGNoZW4uYS5jaGVuQGludGVsLmNvbT47IGVkazItZGV2 ZWxAbGlzdHMuMDEub3JnDQo+Q2M6IFpoYW5nLCBDaGFvIEIgPGNoYW8uYi56aGFuZ0BpbnRlbC5j b20+DQo+U3ViamVjdDogUkU6IFtlZGsyXSBbUEFUQ0hdIFNlY3VyaXR5UGtnOiBSZW1vdmUgY29k ZSB1bmRlcg0KPlVzZXJJZGVudGlmaWNhdGlvbiBmb2xkZXIuDQo+DQo+Q291bGQgeW91IGNyZWF0 ZSBCWiBmb3IgdGhpcyBjaGFuZ2U/DQo+DQo+Pi0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ PkZyb206IGVkazItZGV2ZWwgW21haWx0bzplZGsyLWRldmVsLWJvdW5jZXNAbGlzdHMuMDEub3Jn XSBPbiBCZWhhbGYgT2YNCj4+Y2hlbmNoZTQNCj4+U2VudDogV2VkbmVzZGF5LCBKYW51YXJ5IDA5 LCAyMDE5IDk6MDkgQU0NCj4+VG86IGVkazItZGV2ZWxAbGlzdHMuMDEub3JnDQo+PkNjOiBaaGFu ZywgQ2hhbyBCIDxjaGFvLmIuemhhbmdAaW50ZWwuY29tPg0KPj5TdWJqZWN0OiBbZWRrMl0gW1BB VENIXSBTZWN1cml0eVBrZzogUmVtb3ZlIGNvZGUgdW5kZXIgVXNlcklkZW50aWZpY2F0aW9uDQo+ PmZvbGRlci4NCj4+DQo+PjEuIFVzZXJJZGVudGlmeU1hbmFnZXJEeGUgaXMgdXNlZCB0byBwcm92 aWRlIFVzZXJNYW5hZ2VyUHJvdG9jb2wuDQo+PjIuIFVzZXJQcm9maWxlTWFuYWdlckR4ZSBwcm92 aWRlIFVJIHNldHRpbmcNCj4+My4gUHdkQ3JlZGVudGlhbFByb3ZpZGVyRHhlICYgVXNiQ3JlZGVu dGlhbFByb3ZpZGVyRHhlIGFyZQ0KPj5pbXBsZW1lbnRhdGlvbg0KPj4gICBleGFtcGxlcy4NCj4+ DQo+PlJlbW92ZSBhYm92ZSBmZWF0dXJlcyBiZWNhdXNlIG9mIG5vIHBsYXRmb3JtIHVzZSBpdC4N Cj4+DQo+PkNjOiBaaGFuZyBDaGFvIEIgPGNoYW8uYi56aGFuZ0BpbnRlbC5jb20+DQo+PkNvbnRy aWJ1dGVkLXVuZGVyOiBUaWFub0NvcmUgQ29udHJpYnV0aW9uIEFncmVlbWVudCAxLjENCj4+U2ln bmVkLW9mZi1ieTogQ2hlbiBBIENoZW4gPGNoZW4uYS5jaGVuQGludGVsLmNvbT4NCj4+LS0tDQo+ PiAuLi4vSW5jbHVkZS9HdWlkL1VzYkNyZWRlbnRpYWxQcm92aWRlckhpaS5oICAgICAgICB8ICAg MjkgLQ0KPj4gU2VjdXJpdHlQa2cvSW5jbHVkZS9HdWlkL1VzZXJJZGVudGlmeU1hbmFnZXJIaWku aCAgfCAgIDI1IC0NCj4+IFNlY3VyaXR5UGtnL0luY2x1ZGUvR3VpZC9Vc2VyUHJvZmlsZU1hbmFn ZXJIaWkuaCAgIHwgICAyNSAtDQo+PiBTZWN1cml0eVBrZy9TZWN1cml0eVBrZy5kZWMgICAgICAg ICAgICAgICAgICAgICAgICB8ICAgMTIgLQ0KPj4gU2VjdXJpdHlQa2cvU2VjdXJpdHlQa2cuZHNj ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA0IC0NCj4+IC4uLi9Qd2RDcmVkZW50aWFsUHJv dmlkZXIuYyAgICAgICAgICAgICAgICAgICAgICAgIHwgMTQ2NCAtLS0tLS0tLQ0KPj4gLi4uL1B3 ZENyZWRlbnRpYWxQcm92aWRlci5oICAgICAgICAgICAgICAgICAgICAgICAgfCAgMzc0IC0tDQo+ PiAuLi4vUHdkQ3JlZGVudGlhbFByb3ZpZGVyLnVuaSAgICAgICAgICAgICAgICAgICAgICB8ICAg MjEgLQ0KPj4gLi4uL1B3ZENyZWRlbnRpYWxQcm92aWRlckRhdGEuaCAgICAgICAgICAgICAgICAg ICAgfCAgIDMwIC0NCj4+IC4uLi9Qd2RDcmVkZW50aWFsUHJvdmlkZXJEeGUuaW5mICAgICAgICAg ICAgICAgICAgIHwgICA2NSAtDQo+PiAuLi4vUHdkQ3JlZGVudGlhbFByb3ZpZGVyRXh0cmEudW5p ICAgICAgICAgICAgICAgICB8ICAgMTkgLQ0KPj4gLi4uL1B3ZENyZWRlbnRpYWxQcm92aWRlclN0 cmluZ3MudW5pICAgICAgICAgICAgICAgfCAgIDM4IC0NCj4+IC4uLi9Qd2RDcmVkZW50aWFsUHJv dmlkZXJWZnIuVmZyICAgICAgICAgICAgICAgICAgIHwgICAzNCAtDQo+PiAuLi4vVXNiQ3JlZGVu dGlhbFByb3ZpZGVyLmMgICAgICAgICAgICAgICAgICAgICAgICB8IDE0MTAgLS0tLS0tLS0NCj4+ IC4uLi9Vc2JDcmVkZW50aWFsUHJvdmlkZXIuaCAgICAgICAgICAgICAgICAgICAgICAgIHwgIDM2 MSAtLQ0KPj4gLi4uL1VzYkNyZWRlbnRpYWxQcm92aWRlci51bmkgICAgICAgICAgICAgICAgICAg ICAgfCAgIDIzIC0NCj4+IC4uLi9Vc2JDcmVkZW50aWFsUHJvdmlkZXJEeGUuaW5mICAgICAgICAg ICAgICAgICAgIHwgICA3MCAtDQo+PiAuLi4vVXNiQ3JlZGVudGlhbFByb3ZpZGVyRXh0cmEudW5p ICAgICAgICAgICAgICAgICB8ICAgMTkgLQ0KPj4gLi4uL1VzYkNyZWRlbnRpYWxQcm92aWRlclN0 cmluZ3MudW5pICAgICAgICAgICAgICAgfCAgIDI5IC0NCj4+IC4uLi9Vc2VySWRlbnRpZnlNYW5h Z2VyRHhlL0xvYWREZWZlcnJlZEltYWdlLmMgICAgIHwgIDE0OCAtDQo+PiAuLi4vVXNlcklkZW50 aWZ5TWFuYWdlckR4ZS9Vc2VySWRlbnRpZnlNYW5hZ2VyLmMgICB8IDM3NjYgLS0tLS0tLS0tLS0t LS0tLS0tDQo+LS0NCj4+IC4uLi9Vc2VySWRlbnRpZnlNYW5hZ2VyRHhlL1VzZXJJZGVudGlmeU1h bmFnZXIuaCAgIHwgIDQxMyAtLS0NCj4+IC4uLi9Vc2VySWRlbnRpZnlNYW5hZ2VyRHhlL1VzZXJJ ZGVudGlmeU1hbmFnZXIudW5pIHwgICAyMSAtDQo+PiAuLi4vVXNlcklkZW50aWZ5TWFuYWdlckRh dGEuaCAgICAgICAgICAgICAgICAgICAgICB8ICAgMzUgLQ0KPj4gLi4uL1VzZXJJZGVudGlmeU1h bmFnZXJEeGUuaW5mICAgICAgICAgICAgICAgICAgICAgfCAgIDc5IC0NCj4+IC4uLi9Vc2VySWRl bnRpZnlNYW5hZ2VyRXh0cmEudW5pICAgICAgICAgICAgICAgICAgIHwgICAxOSAtDQo+PiAuLi4v VXNlcklkZW50aWZ5TWFuYWdlclN0cmluZ3MudW5pICAgICAgICAgICAgICAgICB8ICAgMjcgLQ0K Pj4gLi4uL1VzZXJJZGVudGlmeU1hbmFnZXJWZnIuVmZyICAgICAgICAgICAgICAgICAgICAgfCAg IDQzIC0NCj4+IC4uLi9Vc2VyUHJvZmlsZU1hbmFnZXJEeGUvTW9kaWZ5QWNjZXNzUG9saWN5LmMg ICAgIHwgIDY4OCAtLS0tDQo+PiAuLi4vVXNlclByb2ZpbGVNYW5hZ2VyRHhlL01vZGlmeUlkZW50 aXR5UG9saWN5LmMgICB8ICA1MTYgLS0tDQo+PiAuLi4vVXNlclByb2ZpbGVNYW5hZ2VyRHhlL1Vz ZXJQcm9maWxlQWRkLmMgICAgICAgICB8ICAzNzIgLS0NCj4+IC4uLi9Vc2VyUHJvZmlsZU1hbmFn ZXJEeGUvVXNlclByb2ZpbGVEZWxldGUuYyAgICAgIHwgIDM0MyAtLQ0KPj4gLi4uL1VzZXJQcm9m aWxlTWFuYWdlckR4ZS9Vc2VyUHJvZmlsZU1hbmFnZXIuYyAgICAgfCAgODg3IC0tLS0tDQo+PiAu Li4vVXNlclByb2ZpbGVNYW5hZ2VyRHhlL1VzZXJQcm9maWxlTWFuYWdlci5oICAgICB8ICA0NDQg LS0tDQo+PiAuLi4vVXNlclByb2ZpbGVNYW5hZ2VyRHhlL1VzZXJQcm9maWxlTWFuYWdlci51bmkg ICB8ICAgMjIgLQ0KPj4gLi4uL1VzZXJQcm9maWxlTWFuYWdlckR4ZS9Vc2VyUHJvZmlsZU1hbmFn ZXJEYXRhLmggfCAgMTU4IC0NCj4+IC4uLi9Vc2VyUHJvZmlsZU1hbmFnZXJEeGUuaW5mICAgICAg ICAgICAgICAgICAgICAgIHwgICA3MiAtDQo+PiAuLi4vVXNlclByb2ZpbGVNYW5hZ2VyRXh0cmEu dW5pICAgICAgICAgICAgICAgICAgICB8ICAgMTkgLQ0KPj4gLi4uL1VzZXJQcm9maWxlTWFuYWdl clN0cmluZ3MudW5pICAgICAgICAgICAgICAgICAgfCAgMTU4IC0NCj4+IC4uLi9Vc2VyUHJvZmls ZU1hbmFnZXJWZnIuVmZyICAgICAgICAgICAgICAgICAgICAgIHwgIDI0NCAtLQ0KPj4gLi4uL1Vz ZXJQcm9maWxlTWFuYWdlckR4ZS9Vc2VyUHJvZmlsZU1vZGlmeS5jICAgICAgfCAxNDc1IC0tLS0t LS0tDQo+PiA0MSBmaWxlcyBjaGFuZ2VkLCAxNDAwMSBkZWxldGlvbnMoLSkNCj4+IGRlbGV0ZSBt b2RlIDEwMDY0NCBTZWN1cml0eVBrZy9JbmNsdWRlL0d1aWQvVXNiQ3JlZGVudGlhbFByb3ZpZGVy SGlpLmgNCj4+IGRlbGV0ZSBtb2RlIDEwMDY0NCBTZWN1cml0eVBrZy9JbmNsdWRlL0d1aWQvVXNl cklkZW50aWZ5TWFuYWdlckhpaS5oDQo+PiBkZWxldGUgbW9kZSAxMDA2NDQgU2VjdXJpdHlQa2cv SW5jbHVkZS9HdWlkL1VzZXJQcm9maWxlTWFuYWdlckhpaS5oDQo+PiBkZWxldGUgbW9kZSAxMDA2 NDQNCj4+U2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9uL1B3ZENyZWRlbnRpYWxQcm92aWRl ckR4ZS9Qd2RDcmVkZW50aWFsUHINCj5vDQo+PnZpZGVyLmMNCj4+IGRlbGV0ZSBtb2RlIDEwMDY0 NA0KPj5TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vUHdkQ3JlZGVudGlhbFByb3ZpZGVy RHhlL1B3ZENyZWRlbnRpYWxQcg0KPm8NCj4+dmlkZXIuaA0KPj4gZGVsZXRlIG1vZGUgMTAwNjQ0 DQo+PlNlY3VyaXR5UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Qd2RDcmVkZW50aWFsUHJvdmlkZXJE eGUvUHdkQ3JlZGVudGlhbFByDQo+bw0KPj52aWRlci51bmkNCj4+IGRlbGV0ZSBtb2RlIDEwMDY0 NA0KPj5TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vUHdkQ3JlZGVudGlhbFByb3ZpZGVy RHhlL1B3ZENyZWRlbnRpYWxQcg0KPm8NCj4+dmlkZXJEYXRhLmgNCj4+IGRlbGV0ZSBtb2RlIDEw MDY0NA0KPj5TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vUHdkQ3JlZGVudGlhbFByb3Zp ZGVyRHhlL1B3ZENyZWRlbnRpYWxQcg0KPm8NCj4+dmlkZXJEeGUuaW5mDQo+PiBkZWxldGUgbW9k ZSAxMDA2NDQNCj4+U2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9uL1B3ZENyZWRlbnRpYWxQ cm92aWRlckR4ZS9Qd2RDcmVkZW50aWFsUHINCj5vDQo+PnZpZGVyRXh0cmEudW5pDQo+PiBkZWxl dGUgbW9kZSAxMDA2NDQNCj4+U2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9uL1B3ZENyZWRl bnRpYWxQcm92aWRlckR4ZS9Qd2RDcmVkZW50aWFsUHINCj5vDQo+PnZpZGVyU3RyaW5ncy51bmkN Cj4+IGRlbGV0ZSBtb2RlIDEwMDY0NA0KPj5TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24v UHdkQ3JlZGVudGlhbFByb3ZpZGVyRHhlL1B3ZENyZWRlbnRpYWxQcg0KPm8NCj4+dmlkZXJWZnIu VmZyDQo+PiBkZWxldGUgbW9kZSAxMDA2NDQNCj4+U2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0 aW9uL1VzYkNyZWRlbnRpYWxQcm92aWRlckR4ZS9Vc2JDcmVkZW50aWFsUHINCj5vDQo+PnZpZGVy LmMNCj4+IGRlbGV0ZSBtb2RlIDEwMDY0NA0KPj5TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRp b24vVXNiQ3JlZGVudGlhbFByb3ZpZGVyRHhlL1VzYkNyZWRlbnRpYWxQcg0KPm8NCj4+dmlkZXIu aA0KPj4gZGVsZXRlIG1vZGUgMTAwNjQ0DQo+PlNlY3VyaXR5UGtnL1VzZXJJZGVudGlmaWNhdGlv bi9Vc2JDcmVkZW50aWFsUHJvdmlkZXJEeGUvVXNiQ3JlZGVudGlhbFByDQo+bw0KPj52aWRlci51 bmkNCj4+IGRlbGV0ZSBtb2RlIDEwMDY0NA0KPj5TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRp b24vVXNiQ3JlZGVudGlhbFByb3ZpZGVyRHhlL1VzYkNyZWRlbnRpYWxQcg0KPm8NCj4+dmlkZXJE eGUuaW5mDQo+PiBkZWxldGUgbW9kZSAxMDA2NDQNCj4+U2VjdXJpdHlQa2cvVXNlcklkZW50aWZp Y2F0aW9uL1VzYkNyZWRlbnRpYWxQcm92aWRlckR4ZS9Vc2JDcmVkZW50aWFsUHINCj5vDQo+PnZp ZGVyRXh0cmEudW5pDQo+PiBkZWxldGUgbW9kZSAxMDA2NDQNCj4+U2VjdXJpdHlQa2cvVXNlcklk ZW50aWZpY2F0aW9uL1VzYkNyZWRlbnRpYWxQcm92aWRlckR4ZS9Vc2JDcmVkZW50aWFsUHINCj5v DQo+PnZpZGVyU3RyaW5ncy51bmkNCj4+IGRlbGV0ZSBtb2RlIDEwMDY0NA0KPj5TZWN1cml0eVBr Zy9Vc2VySWRlbnRpZmljYXRpb24vVXNlcklkZW50aWZ5TWFuYWdlckR4ZS9Mb2FkRGVmZXJyZWRJ bWENCj5nDQo+PmUuYw0KPj4gZGVsZXRlIG1vZGUgMTAwNjQ0DQo+PlNlY3VyaXR5UGtnL1VzZXJJ ZGVudGlmaWNhdGlvbi9Vc2VySWRlbnRpZnlNYW5hZ2VyRHhlL1VzZXJJZGVudGlmeU1hbmENCj5n DQo+PmVyLmMNCj4+IGRlbGV0ZSBtb2RlIDEwMDY0NA0KPj5TZWN1cml0eVBrZy9Vc2VySWRlbnRp ZmljYXRpb24vVXNlcklkZW50aWZ5TWFuYWdlckR4ZS9Vc2VySWRlbnRpZnlNYW5hDQo+Zw0KPj5l ci5oDQo+PiBkZWxldGUgbW9kZSAxMDA2NDQNCj4+U2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0 aW9uL1VzZXJJZGVudGlmeU1hbmFnZXJEeGUvVXNlcklkZW50aWZ5TWFuYQ0KPmcNCj4+ZXIudW5p DQo+PiBkZWxldGUgbW9kZSAxMDA2NDQNCj4+U2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9u L1VzZXJJZGVudGlmeU1hbmFnZXJEeGUvVXNlcklkZW50aWZ5TWFuYQ0KPmcNCj4+ZXJEYXRhLmgN Cj4+IGRlbGV0ZSBtb2RlIDEwMDY0NA0KPj5TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24v VXNlcklkZW50aWZ5TWFuYWdlckR4ZS9Vc2VySWRlbnRpZnlNYW5hDQo+Zw0KPj5lckR4ZS5pbmYN Cj4+IGRlbGV0ZSBtb2RlIDEwMDY0NA0KPj5TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24v VXNlcklkZW50aWZ5TWFuYWdlckR4ZS9Vc2VySWRlbnRpZnlNYW5hDQo+Zw0KPj5lckV4dHJhLnVu aQ0KPj4gZGVsZXRlIG1vZGUgMTAwNjQ0DQo+PlNlY3VyaXR5UGtnL1VzZXJJZGVudGlmaWNhdGlv bi9Vc2VySWRlbnRpZnlNYW5hZ2VyRHhlL1VzZXJJZGVudGlmeU1hbmENCj5nDQo+PmVyU3RyaW5n cy51bmkNCj4+IGRlbGV0ZSBtb2RlIDEwMDY0NA0KPj5TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmlj YXRpb24vVXNlcklkZW50aWZ5TWFuYWdlckR4ZS9Vc2VySWRlbnRpZnlNYW5hDQo+Zw0KPj5lclZm ci5WZnINCj4+IGRlbGV0ZSBtb2RlIDEwMDY0NA0KPj5TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmlj YXRpb24vVXNlclByb2ZpbGVNYW5hZ2VyRHhlL01vZGlmeUFjY2Vzc1BvbGljeS4NCj4+Yw0KPj4g ZGVsZXRlIG1vZGUgMTAwNjQ0DQo+PlNlY3VyaXR5UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Vc2Vy UHJvZmlsZU1hbmFnZXJEeGUvTW9kaWZ5SWRlbnRpdHlQb2xpYw0KPnkNCj4+LmMNCj4+IGRlbGV0 ZSBtb2RlIDEwMDY0NA0KPj5TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vVXNlclByb2Zp bGVNYW5hZ2VyRHhlL1VzZXJQcm9maWxlQWRkLmMNCj4+IGRlbGV0ZSBtb2RlIDEwMDY0NA0KPj5T ZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vVXNlclByb2ZpbGVNYW5hZ2VyRHhlL1VzZXJQ cm9maWxlRGVsZXRlLmMNCj4+IGRlbGV0ZSBtb2RlIDEwMDY0NA0KPj5TZWN1cml0eVBrZy9Vc2Vy SWRlbnRpZmljYXRpb24vVXNlclByb2ZpbGVNYW5hZ2VyRHhlL1VzZXJQcm9maWxlTWFuYWdlDQo+ ci4NCj4+Yw0KPj4gZGVsZXRlIG1vZGUgMTAwNjQ0DQo+PlNlY3VyaXR5UGtnL1VzZXJJZGVudGlm aWNhdGlvbi9Vc2VyUHJvZmlsZU1hbmFnZXJEeGUvVXNlclByb2ZpbGVNYW5hZ2UNCj5yLg0KPj5o DQo+PiBkZWxldGUgbW9kZSAxMDA2NDQNCj4+U2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9u L1VzZXJQcm9maWxlTWFuYWdlckR4ZS9Vc2VyUHJvZmlsZU1hbmFnZQ0KPnIuDQo+PnVuaQ0KPj4g ZGVsZXRlIG1vZGUgMTAwNjQ0DQo+PlNlY3VyaXR5UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Vc2Vy UHJvZmlsZU1hbmFnZXJEeGUvVXNlclByb2ZpbGVNYW5hZ2UNCj5yDQo+PkRhdGEuaA0KPj4gZGVs ZXRlIG1vZGUgMTAwNjQ0DQo+PlNlY3VyaXR5UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Vc2VyUHJv ZmlsZU1hbmFnZXJEeGUvVXNlclByb2ZpbGVNYW5hZ2UNCj5yDQo+PkR4ZS5pbmYNCj4+IGRlbGV0 ZSBtb2RlIDEwMDY0NA0KPj5TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vVXNlclByb2Zp bGVNYW5hZ2VyRHhlL1VzZXJQcm9maWxlTWFuYWdlDQo+cg0KPj5FeHRyYS51bmkNCj4+IGRlbGV0 ZSBtb2RlIDEwMDY0NA0KPj5TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vVXNlclByb2Zp bGVNYW5hZ2VyRHhlL1VzZXJQcm9maWxlTWFuYWdlDQo+cg0KPj5TdHJpbmdzLnVuaQ0KPj4gZGVs ZXRlIG1vZGUgMTAwNjQ0DQo+PlNlY3VyaXR5UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Vc2VyUHJv ZmlsZU1hbmFnZXJEeGUvVXNlclByb2ZpbGVNYW5hZ2UNCj5yDQo+PlZmci5WZnINCj4+IGRlbGV0 ZSBtb2RlIDEwMDY0NA0KPj5TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vVXNlclByb2Zp bGVNYW5hZ2VyRHhlL1VzZXJQcm9maWxlTW9kaWZ5Lg0KPmMNCj4+DQo+PmRpZmYgLS1naXQgYS9T ZWN1cml0eVBrZy9JbmNsdWRlL0d1aWQvVXNiQ3JlZGVudGlhbFByb3ZpZGVySGlpLmgNCj4+Yi9T ZWN1cml0eVBrZy9JbmNsdWRlL0d1aWQvVXNiQ3JlZGVudGlhbFByb3ZpZGVySGlpLmgNCj4+ZGVs ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0DQo+PmluZGV4IDA1OWQ2OGYzMmUuLjAwMDAwMDAwMDANCj4+ LS0tIGEvU2VjdXJpdHlQa2cvSW5jbHVkZS9HdWlkL1VzYkNyZWRlbnRpYWxQcm92aWRlckhpaS5o DQo+PisrKyAvZGV2L251bGwNCj4+QEAgLTEsMjkgKzAsMCBAQA0KPj4tLyoqIEBmaWxlDQo+Pi0g IEdVSUQgdXNlZCBhcyBISUkgUGFja2FnZSBsaXN0IEdVSUQgaW4gVXNiQ3JlZGVudGlhbFByb3Zp ZGVyRHhlIGRyaXZlci4NCj4+LQ0KPj4tQ29weXJpZ2h0IChjKSAyMDExIC0gMjAxOCwgSW50ZWwg Q29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPj4tVGhpcyBwcm9ncmFtIGFu ZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KPj4tYXJlIGxpY2Vuc2VkIGFuZCBtYWRlIGF2 YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEJTRA0KPj5MaWNl bnNlDQo+Pi13aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbi4gIFRoZSBmdWxsIHRl eHQgb2YgdGhlIGxpY2Vuc2UgbWF5IGJlDQo+PmZvdW5kIGF0DQo+Pi1odHRwOi8vb3BlbnNvdXJj ZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vuc2UucGhwDQo+Pi0NCj4+LVRIRSBQUk9HUkFNIElTIERJ U1RSSUJVVEVEIFVOREVSIFRIRSBCU0QgTElDRU5TRSBPTiBBTiAiQVMgSVMiDQo+QkFTSVMsDQo+ Pi1XSVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TIE9GIEFOWSBLSU5ELCBFSVRI RVINCj4+RVhQUkVTUyBPUiBJTVBMSUVELg0KPj4tDQo+Pi0qKi8NCj4+LQ0KPj4tI2lmbmRlZiBf X1VTQl9DUkVERU5USUFMX1BST1ZJREVSX0hJSV9IX18NCj4+LSNkZWZpbmUgX19VU0JfQ1JFREVO VElBTF9QUk9WSURFUl9ISUlfSF9fDQo+Pi0NCj4+LS8vDQo+Pi0vLyBVc2VkIGZvciBzYXZlIHBh c3N3b3JkIGNyZWRlbnRpYWwgYW5kIGZvcm0gYnJvd3Nlcg0KPj4tLy8gQW5kIHVzZWQgYXMgcHJv dmlkZXIgaWRlbnRpZmllcg0KPj4tLy8NCj4+LSNkZWZpbmUgVVNCX0NSRURFTlRJQUxfUFJPVklE RVJfR1VJRCBcDQo+Pi0gIHsgXA0KPj4tICAgIDB4ZDA4NDllZDEsIDB4YTg4YywgMHg0YmE2LCB7 IDB4YjEsIDB4ZDYsIDB4YWIsIDB4NTAsIDB4ZTIsIDB4ODAsIDB4YjcsDQo+PjB4YTkgfVwNCj4+ LSAgfQ0KPj4tDQo+Pi1leHRlcm4gRUZJX0dVSUQgZ1VzYkNyZWRlbnRpYWxQcm92aWRlckd1aWQ7 DQo+Pi0NCj4+LSNlbmRpZg0KPj5kaWZmIC0tZ2l0IGEvU2VjdXJpdHlQa2cvSW5jbHVkZS9HdWlk L1VzZXJJZGVudGlmeU1hbmFnZXJIaWkuaA0KPj5iL1NlY3VyaXR5UGtnL0luY2x1ZGUvR3VpZC9V c2VySWRlbnRpZnlNYW5hZ2VySGlpLmgNCj4+ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0DQo+Pmlu ZGV4IDMyM2M1MWYwZjYuLjAwMDAwMDAwMDANCj4+LS0tIGEvU2VjdXJpdHlQa2cvSW5jbHVkZS9H dWlkL1VzZXJJZGVudGlmeU1hbmFnZXJIaWkuaA0KPj4rKysgL2Rldi9udWxsDQo+PkBAIC0xLDI1 ICswLDAgQEANCj4+LS8qKiBAZmlsZQ0KPj4tICBHVUlEIHVzZWQgYXMgSElJIEZvcm1TZXQgYW5k IEhJSSBQYWNrYWdlIGxpc3QgR1VJRCBpbg0KPj5Vc2VySWRlbnRpZnlNYW5hZ2VyRHhlIGRyaXZl ci4NCj4+LQ0KPj4tQ29weXJpZ2h0IChjKSAyMDExIC0gMjAxOCwgSW50ZWwgQ29ycG9yYXRpb24u IEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPj4tVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21w YW55aW5nIG1hdGVyaWFscw0KPj4tYXJlIGxpY2Vuc2VkIGFuZCBtYWRlIGF2YWlsYWJsZSB1bmRl ciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEJTRA0KPj5MaWNlbnNlDQo+Pi13aGlj aCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbi4gIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxp Y2Vuc2UgbWF5IGJlDQo+PmZvdW5kIGF0DQo+Pi1odHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5z ZXMvYnNkLWxpY2Vuc2UucGhwDQo+Pi0NCj4+LVRIRSBQUk9HUkFNIElTIERJU1RSSUJVVEVEIFVO REVSIFRIRSBCU0QgTElDRU5TRSBPTiBBTiAiQVMgSVMiDQo+QkFTSVMsDQo+Pi1XSVRIT1VUIFdB UlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVINCj4+RVhQUkVT UyBPUiBJTVBMSUVELg0KPj4tDQo+Pi0qKi8NCj4+LQ0KPj4tI2lmbmRlZiBfX1VTRVJfSURFTlRJ RllfTUFOQUdFUl9ISUlfSF9fDQo+Pi0jZGVmaW5lIF9fVVNFUl9JREVOVElGWV9NQU5BR0VSX0hJ SV9IX18NCj4+LQ0KPj4tI2RlZmluZSBVU0VSX0lERU5USUZZX01BTkFHRVJfR1VJRCBcDQo+Pi0g IHsgXA0KPj4tICAgIDB4M2NjZDNkZDgsIDB4OGQ0NSwgMHg0ZmVkLCB7IDB4OTYsIDB4MmQsIDB4 MmIsIDB4MzgsIDB4Y2QsIDB4ODIsIDB4YjMsDQo+PjB4YzQgfSBcDQo+Pi0gIH0NCj4+LQ0KPj4t ZXh0ZXJuIEVGSV9HVUlEIGdVc2VySWRlbnRpZnlNYW5hZ2VyR3VpZDsNCj4+LQ0KPj4tI2VuZGlm DQo+PmRpZmYgLS1naXQgYS9TZWN1cml0eVBrZy9JbmNsdWRlL0d1aWQvVXNlclByb2ZpbGVNYW5h Z2VySGlpLmgNCj4+Yi9TZWN1cml0eVBrZy9JbmNsdWRlL0d1aWQvVXNlclByb2ZpbGVNYW5hZ2Vy SGlpLmgNCj4+ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0DQo+PmluZGV4IDEwNTA1OTM1MGMuLjAw MDAwMDAwMDANCj4+LS0tIGEvU2VjdXJpdHlQa2cvSW5jbHVkZS9HdWlkL1VzZXJQcm9maWxlTWFu YWdlckhpaS5oDQo+PisrKyAvZGV2L251bGwNCj4+QEAgLTEsMjUgKzAsMCBAQA0KPj4tLyoqIEBm aWxlDQo+Pi0gIEdVSUQgdXNlZCBhcyBISUkgRm9ybVNldCBhbmQgSElJIFBhY2thZ2UgbGlzdCBH VUlEIGluDQo+PlVzZXJQcm9maWxlTWFuYWdlckR4ZSBkcml2ZXIuDQo+Pi0NCj4+LUNvcHlyaWdo dCAoYykgMjAxMSAtIDIwMTgsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVk LjxCUj4NCj4+LVRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCj4+ LWFyZSBsaWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25k aXRpb25zIG9mIHRoZSBCU0QNCj4+TGljZW5zZQ0KPj4td2hpY2ggYWNjb21wYW5pZXMgdGhpcyBk aXN0cmlidXRpb24uICBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIG1heSBiZQ0KPj5mb3Vu ZCBhdA0KPj4taHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocA0K Pj4tDQo+Pi1USEUgUFJPR1JBTSBJUyBESVNUUklCVVRFRCBVTkRFUiBUSEUgQlNEIExJQ0VOU0Ug T04gQU4gIkFTIElTIg0KPkJBU0lTLA0KPj4tV0lUSE9VVCBXQVJSQU5USUVTIE9SIFJFUFJFU0VO VEFUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSDQo+PkVYUFJFU1MgT1IgSU1QTElFRC4NCj4+LQ0K Pj4tKiovDQo+Pi0NCj4+LSNpZm5kZWYgX19VU0VSX1BST0ZJTEVfTUFOQUdFUl9ISUlfSF9fDQo+ Pi0jZGVmaW5lIF9fVVNFUl9QUk9GSUxFX01BTkFHRVJfSElJX0hfXw0KPj4tDQo+Pi0jZGVmaW5l IFVTRVJfUFJPRklMRV9NQU5BR0VSX0dVSUQgXA0KPj4tICB7IFwNCj4+LSAgICAweGMzNWYyNzJj LCAweDk3YzIsIDB4NDY1YSwgeyAweGEyLCAweDE2LCAweDY5LCAweDZiLCAweDY2LCAweDhhLCAw eDhjLA0KPjB4ZmUgfQ0KPj5cDQo+Pi0gIH0NCj4+LQ0KPj4tZXh0ZXJuIEVGSV9HVUlEIGdVc2Vy UHJvZmlsZU1hbmFnZXJHdWlkOw0KPj4tDQo+Pi0jZW5kaWYNCj4+ZGlmZiAtLWdpdCBhL1NlY3Vy aXR5UGtnL1NlY3VyaXR5UGtnLmRlYyBiL1NlY3VyaXR5UGtnL1NlY3VyaXR5UGtnLmRlYw0KPj5p bmRleCA4ZDY0YjRmZWZlLi4wYzJhZmUyOTM4IDEwMDY0NA0KPj4tLS0gYS9TZWN1cml0eVBrZy9T ZWN1cml0eVBrZy5kZWMNCj4+KysrIGIvU2VjdXJpdHlQa2cvU2VjdXJpdHlQa2cuZGVjDQo+PkBA IC0xMzksMjIgKzEzOSwxMCBAQA0KPj4gICAjICBJbmNsdWRlL0d1aWQvVGNnMlBoeXNpY2FsUHJl c2VuY2VEYXRhLmgNCj4+ICAgZ0VmaVRjZzJQaHlzaWNhbFByZXNlbmNlR3VpZCA9IHsgMHhhZWI5 YzVjMSwgMHg5NGYxLCAweDRkMDIsIHsgMHhiZiwgMHhkOSwNCj4+MHg0NiwgMHgyLCAweGRiLCAw eDJkLCAweDNjLCAweDU0IH19DQo+Pg0KPj4tICAjIyBHVUlEIHVzZWQgZm9yIGZvcm0gYnJvd3Nl ciwgcGFzc3dvcmQgY3JlZGVudGlhbCBhbmQgcHJvdmlkZXINCj5pZGVudGlmaWVyLg0KPj4tICAj IEluY2x1ZGUvR3VpZC9Qd2RDcmVkZW50aWFsUHJvdmlkZXJIaWkuaA0KPj4tICBnUHdkQ3JlZGVu dGlhbFByb3ZpZGVyR3VpZCAgICAgICAgID0geyAweDc4YjllYzhiLCAweGMwMDAsIDB4NDZjNSwg eyAweGFjLA0KPj4weDkzLCAweDI0LCAweGEwLCAweGMxLCAweGJiLCAweDAsIDB4Y2UgfX0NCj4+ LQ0KPj4tICAjIyBHVUlEIHVzZWQgZm9yIGZvcm0gYnJvd3NlciwgVVNCIGNyZWRlbnRpYWwgYW5k IHByb3ZpZGVyIGlkZW50aWZpZXIuDQo+Pi0gICMgIEluY2x1ZGUvR3VpZC9Vc2JDcmVkZW50aWFs UHJvdmlkZXJIaWkuaA0KPj4tICBnVXNiQ3JlZGVudGlhbFByb3ZpZGVyR3VpZCAgICAgICAgID0g eyAweGQwODQ5ZWQxLCAweGE4OGMsIDB4NGJhNiwgeyAweGIxLA0KPj4weGQ2LCAweGFiLCAweDUw LCAweGUyLCAweDgwLCAweGI3LCAweGE5IH19DQo+Pi0NCj4+ICAgIyMgR1VJRCB1c2VkIGZvciBG b3JtU2V0IGd1aWQgYW5kIHVzZXIgcHJvZmlsZSB2YXJpYWJsZS4NCj4+ICAgIyBJbmNsdWRlL0d1 aWQvVXNlcklkZW50aWZ5TWFuYWdlckhpaS5oDQo+PiAgIGdVc2VySWRlbnRpZnlNYW5hZ2VyR3Vp ZCAgICAgICAgICAgPSB7IDB4M2NjZDNkZDgsIDB4OGQ0NSwgMHg0ZmVkLCB7IDB4OTYsDQo+PjB4 MmQsIDB4MmIsIDB4MzgsIDB4Y2QsIDB4ODIsIDB4YjMsIDB4YzQgfX0NCj4+DQo+Pi0gICMjIEdV SUQgdXNlZCBmb3IgRm9ybVNldC4NCj4+LSAgIyAgSW5jbHVkZS9HdWlkL1VzZXJQcm9maWxlTWFu YWdlckhpaS5oDQo+Pi0gIGdVc2VyUHJvZmlsZU1hbmFnZXJHdWlkICAgICAgICAgICAgPSB7IDB4 YzM1ZjI3MmMsIDB4OTdjMiwgMHg0NjVhLCB7IDB4YTIsIDB4MTYsDQo+PjB4NjksIDB4NmIsIDB4 NjYsIDB4OGEsIDB4OGMsIDB4ZmUgfX0NCj4+LQ0KPj4gICAjIyBHVUlEIHVzZWQgZm9yIEZvcm1T ZXQuDQo+PiAgICMgIEluY2x1ZGUvR3VpZC9UY2dDb25maWdIaWkuaA0KPj4gICBnVGNnQ29uZmln Rm9ybVNldEd1aWQgICAgICAgICAgICAgID0geyAweGIwZjkwMWU0LCAweGM0MjQsIDB4NDVkZSwg eyAweDkwLCAweDgxLA0KPj4weDk1LCAweGUyLCAweGIsIDB4ZGUsIDB4NmYsIDB4YjUgfX0NCj4+ ZGlmZiAtLWdpdCBhL1NlY3VyaXR5UGtnL1NlY3VyaXR5UGtnLmRzYyBiL1NlY3VyaXR5UGtnL1Nl Y3VyaXR5UGtnLmRzYw0KPj5pbmRleCA2OGEyOTUzMTYyLi4xOWFhZWJmZjFmIDEwMDY0NA0KPj4t LS0gYS9TZWN1cml0eVBrZy9TZWN1cml0eVBrZy5kc2MNCj4+KysrIGIvU2VjdXJpdHlQa2cvU2Vj dXJpdHlQa2cuZHNjDQo+PkBAIC0xNDYsOCArMTQ2LDYgQEANCj4+ICAgU2VjdXJpdHlQa2cvTGli cmFyeS9EeGVJbWFnZVZlcmlmaWNhdGlvbkxpYi9EeGVJbWFnZVZlcmlmaWNhdGlvbkxpYi5pbmYN Cj4+ICAgI1NlY3VyaXR5UGtnL0xpYnJhcnkvRHhlRGVmZXJJbWFnZUxvYWRMaWIvRHhlRGVmZXJJ bWFnZUxvYWRMaWIuaW5mDQo+Pg0KPj5TZWN1cml0eVBrZy9MaWJyYXJ5L0R4ZUltYWdlQXV0aGVu dGljYXRpb25TdGF0dXNMaWIvRHhlSW1hZ2VBdXRoZW50aWNhDQo+dGkNCj4+b25TdGF0dXNMaWIu aW5mDQo+Pi0NCj4+I1NlY3VyaXR5UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Vc2VySWRlbnRpZnlN YW5hZ2VyRHhlL1VzZXJJZGVudGlmeU1hbg0KPmENCj4+Z2VyRHhlLmluZg0KPj4tDQo+PiNTZWN1 cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vVXNlclByb2ZpbGVNYW5hZ2VyRHhlL1VzZXJQcm9m aWxlTWFuYWcNCj5lDQo+PnJEeGUuaW5mDQo+Pg0KPj4gICAjDQo+PiAgICMgVFBNDQo+PkBAIC0y MDAsOCArMTk4LDYgQEANCj4+ICAgU2VjdXJpdHlQa2cvTGlicmFyeS9BdXRoVmFyaWFibGVMaWIv QXV0aFZhcmlhYmxlTGliLmluZg0KPj4NCj4+IFtDb21wb25lbnRzLklBMzIsIENvbXBvbmVudHMu WDY0XQ0KPj4tIw0KPj5TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vUHdkQ3JlZGVudGlh bFByb3ZpZGVyRHhlL1B3ZENyZWRlbnRpYWxQcg0KPm8NCj4+dmlkZXJEeGUuaW5mDQo+Pi0jDQo+ PlNlY3VyaXR5UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Vc2JDcmVkZW50aWFsUHJvdmlkZXJEeGUv VXNiQ3JlZGVudGlhbFByDQo+bw0KPj52aWRlckR4ZS5pbmYNCj4+DQo+PlNlY3VyaXR5UGtnL1Zh cmlhYmxlQXV0aGVudGljYXRlZC9TZWN1cmVCb290Q29uZmlnRHhlL1NlY3VyZUJvb3RDb25maQ0K PmcNCj4+RHhlLmluZg0KPj4NCj4+ICAgIw0KPj5kaWZmIC0tZ2l0DQo+PmEvU2VjdXJpdHlQa2cv VXNlcklkZW50aWZpY2F0aW9uL1B3ZENyZWRlbnRpYWxQcm92aWRlckR4ZS9Qd2RDcmVkZW50aWFs DQo+UA0KPj5yb3ZpZGVyLmMNCj4+Yi9TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vUHdk Q3JlZGVudGlhbFByb3ZpZGVyRHhlL1B3ZENyZWRlbnRpYQ0KPmwNCj4+UHJvdmlkZXIuYw0KPj5k ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCj4+aW5kZXggNTJmYzY4YjVlZS4uMDAwMDAwMDAwMA0K Pj4tLS0NCj4+YS9TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vUHdkQ3JlZGVudGlhbFBy b3ZpZGVyRHhlL1B3ZENyZWRlbnRpYWwNCj5QDQo+PnJvdmlkZXIuYw0KPj4rKysgL2Rldi9udWxs DQo+PkBAIC0xLDE0NjQgKzAsMCBAQA0KPj4tLyoqIEBmaWxlDQo+Pi0gIFBhc3N3b3JkIENyZWRl bnRpYWwgUHJvdmlkZXIgZHJpdmVyIGltcGxlbWVudGF0aW9uLg0KPj4tDQo+Pi1Db3B5cmlnaHQg KGMpIDIwMDkgLSAyMDE4LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48 QlI+DQo+Pi0oQykgQ29weXJpZ2h0IDIwMTggSGV3bGV0dCBQYWNrYXJkIEVudGVycHJpc2UgRGV2 ZWxvcG1lbnQgTFA8QlI+DQo+Pi1UaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0 ZXJpYWxzDQo+Pi1hcmUgbGljZW5zZWQgYW5kIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJt cyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgQlNEDQo+PkxpY2Vuc2UNCj4+LXdoaWNoIGFjY29tcGFu aWVzIHRoaXMgZGlzdHJpYnV0aW9uLiAgVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBtYXkg YmUNCj4+Zm91bmQgYXQNCj4+LWh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ic2QtbGlj ZW5zZS5waHANCj4+LQ0KPj4tVEhFIFBST0dSQU0gSVMgRElTVFJJQlVURUQgVU5ERVIgVEhFIEJT RCBMSUNFTlNFIE9OIEFOICJBUyBJUyINCj5CQVNJUywNCj4+LVdJVEhPVVQgV0FSUkFOVElFUyBP UiBSRVBSRVNFTlRBVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUg0KPj5FWFBSRVNTIE9SIElNUExJ RUQuDQo+Pi0NCj4+LSoqLw0KPj4tDQo+Pi0jaW5jbHVkZSAiUHdkQ3JlZGVudGlhbFByb3ZpZGVy LmgiDQo+Pi0NCj4+LUNSRURFTlRJQUxfVEFCTEUgICAgICAgICAgICAqbVB3ZFRhYmxlICAgICAg PSBOVUxMOw0KPj4tUFdEX1BST1ZJREVSX0NBTExCQUNLX0lORk8gICptQ2FsbGJhY2tJbmZvICA9 IE5VTEw7DQo+Pi1QQVNTV09SRF9DUkVERU5USUFMX0lORk8gICAgKm1Qd2RJbmZvSGFuZGxlID0g TlVMTDsNCj4+LQ0KPj4tSElJX1ZFTkRPUl9ERVZJQ0VfUEFUSCAgICAgIG1IaWlWZW5kb3JEZXZp Y2VQYXRoID0gew0KPj4tICB7DQo+Pi0gICAgew0KPj4tICAgICAgSEFSRFdBUkVfREVWSUNFX1BB VEgsDQo+Pi0gICAgICBIV19WRU5ET1JfRFAsDQo+Pi0gICAgICB7DQo+Pi0gICAgICAgIChVSU5U OCkgKHNpemVvZiAoVkVORE9SX0RFVklDRV9QQVRIKSksDQo+Pi0gICAgICAgIChVSU5UOCkgKChz aXplb2YgKFZFTkRPUl9ERVZJQ0VfUEFUSCkpID4+IDgpDQo+Pi0gICAgICB9DQo+Pi0gICAgfSwN Cj4+LSAgICBQV0RfQ1JFREVOVElBTF9QUk9WSURFUl9HVUlEDQo+Pi0gIH0sDQo+Pi0gIHsNCj4+ LSAgICBFTkRfREVWSUNFX1BBVEhfVFlQRSwNCj4+LSAgICBFTkRfRU5USVJFX0RFVklDRV9QQVRI X1NVQlRZUEUsDQo+Pi0gICAgew0KPj4tICAgICAgKFVJTlQ4KSAoRU5EX0RFVklDRV9QQVRIX0xF TkdUSCksDQo+Pi0gICAgICAoVUlOVDgpICgoRU5EX0RFVklDRV9QQVRIX0xFTkdUSCkgPj4gOCkN Cj4+LSAgICB9DQo+Pi0gIH0NCj4+LX07DQo+Pi0NCj4+LUVGSV9VU0VSX0NSRURFTlRJQUwyX1BS T1RPQ09MICBnUHdkQ3JlZGVudGlhbFByb3ZpZGVyRHJpdmVyID0gew0KPj4tICBQV0RfQ1JFREVO VElBTF9QUk9WSURFUl9HVUlELA0KPj4tICBFRklfVVNFUl9DUkVERU5USUFMX0NMQVNTX1BBU1NX T1JELA0KPj4tICBDcmVkZW50aWFsRW5yb2xsLA0KPj4tICBDcmVkZW50aWFsRm9ybSwNCj4+LSAg Q3JlZGVudGlhbFRpbGUsDQo+Pi0gIENyZWRlbnRpYWxUaXRsZSwNCj4+LSAgQ3JlZGVudGlhbFVz ZXIsDQo+Pi0gIENyZWRlbnRpYWxTZWxlY3QsDQo+Pi0gIENyZWRlbnRpYWxEZXNlbGVjdCwNCj4+ LSAgQ3JlZGVudGlhbERlZmF1bHQsDQo+Pi0gIENyZWRlbnRpYWxHZXRJbmZvLA0KPj4tICBDcmVk ZW50aWFsR2V0TmV4dEluZm8sDQo+Pi0gIEVGSV9DUkVERU5USUFMX0NBUEFCSUxJVElFU19FTlJP TEwsDQo+Pi0gIENyZWRlbnRpYWxEZWxldGUNCj4+LX07DQo+Pi0NCj4+LQ0KPj4tLyoqDQo+Pi0g IEdldCBzdHJpbmcgYnkgc3RyaW5nIGlkIGZyb20gSElJIEludGVyZmFjZS4NCj4+LQ0KPj4tDQo+ Pi0gIEBwYXJhbVtpbl0gSWQgICAgICBTdHJpbmcgSUQgdG8gZ2V0IHRoZSBzdHJpbmcgZnJvbS4N Cj4+LQ0KPj4tICBAcmV0dmFsICBDSEFSMTYgKiAgU3RyaW5nIGZyb20gSUQuDQo+Pi0gIEByZXR2 YWwgIE5VTEwgICAgICBJZiBlcnJvciBvY2N1cnMuDQo+Pi0NCj4+LSoqLw0KPj4tQ0hBUjE2ICoN Cj4+LUdldFN0cmluZ0J5SWQgKA0KPj4tICBJTiBFRklfU1RSSU5HX0lEICAgICAgICAgICAgIElk DQo+Pi0gICkNCj4+LXsNCj4+LSAgLy8NCj4+LSAgLy8gR2V0IHRoZSBjdXJyZW50IHN0cmluZyBm b3IgdGhlIGN1cnJlbnQgTGFuZ3VhZ2UuDQo+Pi0gIC8vDQo+Pi0gIHJldHVybiBIaWlHZXRTdHJp bmcgKG1DYWxsYmFja0luZm8tPkhpaUhhbmRsZSwgSWQsIE5VTEwpOw0KPj4tfQ0KPj4tDQo+Pi0N Cj4+LS8qKg0KPj4tICBFeHBhbmQgcGFzc3dvcmQgdGFibGUgc2l6ZS4NCj4+LQ0KPj4tKiovDQo+ Pi1WT0lEDQo+Pi1FeHBhbmRUYWJsZVNpemUgKA0KPj4tICBWT0lEDQo+Pi0gICkNCj4+LXsNCj4+ LSAgQ1JFREVOVElBTF9UQUJMRSAgKk5ld1RhYmxlOw0KPj4tICBVSU5UTiAgICAgICAgICAgICBD b3VudDsNCj4+LQ0KPj4tICBDb3VudCA9IG1Qd2RUYWJsZS0+TWF4Q291bnQgKyBQQVNTV09SRF9U QUJMRV9JTkM7DQo+Pi0gIC8vDQo+Pi0gIC8vIENyZWF0ZSBuZXcgY3JlZGVudGlhbCB0YWJsZS4N Cj4+LSAgLy8NCj4+LSAgTmV3VGFibGUgPSAoQ1JFREVOVElBTF9UQUJMRSAqKSBBbGxvY2F0ZVpl cm9Qb29sICgNCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiAo Q1JFREVOVElBTF9UQUJMRSkgKw0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKENvdW50IC0gMSkgKiBzaXplb2YgKFBBU1NXT1JEX0lORk8pDQo+Pi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICApOw0KPj4tICBBU1NFUlQgKE5ld1RhYmxlICE9IE5VTEwp Ow0KPj4tDQo+Pi0gIE5ld1RhYmxlLT5NYXhDb3VudCAgICA9IENvdW50Ow0KPj4tICBOZXdUYWJs ZS0+Q291bnQgICAgICAgPSBtUHdkVGFibGUtPkNvdW50Ow0KPj4tICBOZXdUYWJsZS0+VmFsaWRJ bmRleCAgPSBtUHdkVGFibGUtPlZhbGlkSW5kZXg7DQo+Pi0gIC8vDQo+Pi0gIC8vIENvcHkgb2xk IGVudHJpZXMNCj4+LSAgLy8NCj4+LSAgQ29weU1lbSAoDQo+Pi0gICAgJk5ld1RhYmxlLT5Vc2Vy SW5mbywNCj4+LSAgICAmbVB3ZFRhYmxlLT5Vc2VySW5mbywNCj4+LSAgICBtUHdkVGFibGUtPkNv dW50ICogc2l6ZW9mIChQQVNTV09SRF9JTkZPKQ0KPj4tICAgICk7DQo+Pi0gIEZyZWVQb29sICht UHdkVGFibGUpOw0KPj4tICBtUHdkVGFibGUgPSBOZXdUYWJsZTsNCj4+LX0NCj4+LQ0KPj4tDQo+ Pi0vKioNCj4+LSAgQWRkLCB1cGRhdGUgb3IgZGVsZXRlIGluZm8gaW4gdGFibGUsIGFuZCBzeW5j IHdpdGggTlYgdmFyaWFibGUuDQo+Pi0NCj4+LSAgQHBhcmFtW2luXSAgSW5kZXggICAgIFRoZSBp bmRleCBvZiB0aGUgcGFzc3dvcmQgaW4gdGFibGUuIElmIGluZGV4IGlzIGZvdW5kDQo+aW4NCj4+ LSAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlLCB1cGRhdGUgdGhlIGluZm8sIGVsc2UgYWRk IHRoZSBpbnRvIHRvIHRhYmxlLg0KPj4tICBAcGFyYW1baW5dICBJbmZvICAgICAgVGhlIG5ldyBw YXNzd29yZCBpbmZvIHRvIGFkZCBpbnRvIHRhYmxlLklmIEluZm8gaXMgTlVMTCwNCj4+LSAgICAg ICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGUgaW5mbyBieSBJbmRleC4NCj4+LQ0KPj4tICBA cmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgSW5mbyBpcyBOVUxMIHdoZW4gc2F2ZSB0aGUg aW5mby4NCj4+LSAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgIE1vZGlmeSB0aGUgdGFi bGUgc3VjY2Vzc2Z1bGx5Lg0KPj4tICBAcmV0dmFsIE90aGVycyAgICAgICAgICAgICAgICAgRmFp bGVkIHRvIG1vZGlmeSB0aGUgdGFibGUuDQo+Pi0NCj4+LSoqLw0KPj4tRUZJX1NUQVRVUw0KPj4t TW9kaWZ5VGFibGUgKA0KPj4tICBJTiAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgSW5kZXgsDQo+Pi0gIElOICBQQVNTV09SRF9JTkZPICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAqIEluZm8gT1BUSU9OQUwNCj4+LSAgKQ0KPj4tew0KPj4tICBFRklfU1RBVFVT ICAgICAgIFN0YXR1czsNCj4+LSAgUEFTU1dPUkRfSU5GTyAgICAqTmV3UGFzc3dvcmRJbmZvOw0K Pj4tDQo+Pi0gIE5ld1Bhc3N3b3JkSW5mbyA9IE5VTEw7DQo+Pi0NCj4+LSAgaWYgKEluZGV4IDwg bVB3ZFRhYmxlLT5Db3VudCkgew0KPj4tICAgIGlmIChJbmZvID09IE5VTEwpIHsNCj4+LSAgICAg IC8vDQo+Pi0gICAgICAvLyBEZWxldGUgdGhlIHNwZWNpZmllZCBlbnRyeS4NCj4+LSAgICAgIC8v DQo+Pi0gICAgICBtUHdkVGFibGUtPkNvdW50LS07DQo+Pi0gICAgICBpZiAoSW5kZXggIT0gbVB3 ZFRhYmxlLT5Db3VudCkgew0KPj4tICAgICAgICBOZXdQYXNzd29yZEluZm8gPSAmbVB3ZFRhYmxl LT5Vc2VySW5mb1ttUHdkVGFibGUtPkNvdW50XTsNCj4+LSAgICAgIH0NCj4+LSAgICB9IGVsc2Ug ew0KPj4tICAgICAgLy8NCj4+LSAgICAgIC8vIFVwZGF0ZSB0aGUgc3BlY2lmaWVkIGVudHJ5Lg0K Pj4tICAgICAgLy8NCj4+LSAgICAgIE5ld1Bhc3N3b3JkSW5mbyA9IEluZm87DQo+Pi0gICAgfQ0K Pj4tICB9IGVsc2Ugew0KPj4tICAgIC8vDQo+Pi0gICAgLy8gQWRkIGEgbmV3IHBhc3N3b3JkIGlu Zm8uDQo+Pi0gICAgLy8NCj4+LSAgICBpZiAoSW5mbyA9PSBOVUxMKSB7DQo+Pi0gICAgICByZXR1 cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPj4tICAgIH0NCj4+LQ0KPj4tICAgIGlmIChtUHdk VGFibGUtPkNvdW50ID49IG1Qd2RUYWJsZS0+TWF4Q291bnQpIHsNCj4+LSAgICAgIEV4cGFuZFRh YmxlU2l6ZSAoKTsNCj4+LSAgICB9DQo+Pi0NCj4+LSAgICBOZXdQYXNzd29yZEluZm8gPSBJbmZv Ow0KPj4tICAgIG1Qd2RUYWJsZS0+Q291bnQrKzsNCj4+LSAgfQ0KPj4tDQo+Pi0gIGlmIChOZXdQ YXNzd29yZEluZm8gIT0gTlVMTCkgew0KPj4tICAgIENvcHlNZW0gKCZtUHdkVGFibGUtPlVzZXJJ bmZvW0luZGV4XSwgTmV3UGFzc3dvcmRJbmZvLCBzaXplb2YNCj4+KFBBU1NXT1JEX0lORk8pKTsN Cj4+LSAgfQ0KPj4tDQo+Pi0gIC8vDQo+Pi0gIC8vIFNhdmUgdGhlIGNyZWRlbnRpYWwgdGFibGUu DQo+Pi0gIC8vDQo+Pi0gIFN0YXR1cyA9IGdSVC0+U2V0VmFyaWFibGUgKA0KPj4tICAgICAgICAg ICAgICAgICAgTCJQd2RDcmVkZW50aWFsIiwNCj4+LSAgICAgICAgICAgICAgICAgICZnUHdkQ3Jl ZGVudGlhbFByb3ZpZGVyR3VpZCwNCj4+LSAgICAgICAgICAgICAgICAgIEVGSV9WQVJJQUJMRV9O T05fVk9MQVRJTEUgfA0KPj5FRklfVkFSSUFCTEVfQk9PVFNFUlZJQ0VfQUNDRVNTLA0KPj4tICAg ICAgICAgICAgICAgICAgbVB3ZFRhYmxlLT5Db3VudCAqIHNpemVvZiAoUEFTU1dPUkRfSU5GTyks DQo+Pi0gICAgICAgICAgICAgICAgICAmbVB3ZFRhYmxlLT5Vc2VySW5mbw0KPj4tICAgICAgICAg ICAgICAgICAgKTsNCj4+LSAgcmV0dXJuIFN0YXR1czsNCj4+LX0NCj4+LQ0KPj4tDQo+Pi0vKioN Cj4+LSAgQ3JlYXRlIGEgcGFzc3dvcmQgdGFibGUuDQo+Pi0NCj4+LSAgQHJldHZhbCBFRklfU1VD Q0VTUyAgICAgIENyZWF0ZSBhIHBhc3N3b3JkIHRhYmxlIHN1Y2Nlc3NmdWxseS4NCj4+LSAgQHJl dHZhbCBPdGhlcnMgICAgICAgICAgIEZhaWxlZCB0byBjcmVhdGUgYSBwYXNzd29yZC4NCj4+LQ0K Pj4tKiovDQo+Pi1FRklfU1RBVFVTDQo+Pi1Jbml0Q3JlZGVudGlhbFRhYmxlICgNCj4+LSAgVk9J RA0KPj4tICApDQo+Pi17DQo+Pi0gIEVGSV9TVEFUVVMgIFN0YXR1czsNCj4+LSAgVUlOVDggICAg ICAgKlZhcjsNCj4+LSAgVUlOVE4gICAgICAgVmFyU2l6ZTsNCj4+LQ0KPj4tICAvLw0KPj4tICAv LyBHZXQgUGFzc3dvcmQgY3JlZGVudGlhbCBkYXRhIGZyb20gTlYgdmFyaWFibGUuDQo+Pi0gIC8v DQo+Pi0gIFZhclNpemUgPSAwOw0KPj4tICBWYXIgICAgID0gTlVMTDsNCj4+LSAgU3RhdHVzICA9 IGdSVC0+R2V0VmFyaWFibGUgKA0KPj4tICAgICAgICAgICAgICAgICAgIEwiUHdkQ3JlZGVudGlh bCIsDQo+Pi0gICAgICAgICAgICAgICAgICAgJmdQd2RDcmVkZW50aWFsUHJvdmlkZXJHdWlkLA0K Pj4tICAgICAgICAgICAgICAgICAgIE5VTEwsDQo+Pi0gICAgICAgICAgICAgICAgICAgJlZhclNp emUsDQo+Pi0gICAgICAgICAgICAgICAgICAgVmFyDQo+Pi0gICAgICAgICAgICAgICAgICAgKTsN Cj4+LSAgaWYgKFN0YXR1cyA9PSBFRklfQlVGRkVSX1RPT19TTUFMTCkgew0KPj4tICAgIFZhciA9 IEFsbG9jYXRlWmVyb1Bvb2wgKFZhclNpemUpOw0KPj4tICAgIGlmIChWYXIgPT0gTlVMTCkgew0K Pj4tICAgICAgcmV0dXJuIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPj4tICAgIH0NCj4+LSAgICBT dGF0dXMgPSBnUlQtPkdldFZhcmlhYmxlICgNCj4+LSAgICAgICAgICAgICAgICAgICAgTCJQd2RD cmVkZW50aWFsIiwNCj4+LSAgICAgICAgICAgICAgICAgICAgJmdQd2RDcmVkZW50aWFsUHJvdmlk ZXJHdWlkLA0KPj4tICAgICAgICAgICAgICAgICAgICBOVUxMLA0KPj4tICAgICAgICAgICAgICAg ICAgICAmVmFyU2l6ZSwNCj4+LSAgICAgICAgICAgICAgICAgICAgVmFyDQo+Pi0gICAgICAgICAg ICAgICAgICAgICk7DQo+Pi0gIH0NCj4+LSAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSAmJiAoU3Rh dHVzICE9IEVGSV9OT1RfRk9VTkQpKSB7DQo+Pi0gICAgcmV0dXJuIFN0YXR1czsNCj4+LSAgfQ0K Pj4tDQo+Pi0gIC8vDQo+Pi0gIC8vIENyZWF0ZSB0aGUgcGFzc3dvcmQgY3JlZGVudGlhbCB0YWJs ZS4NCj4+LSAgLy8NCj4+LSAgbVB3ZFRhYmxlID0gQWxsb2NhdGVaZXJvUG9vbCAoDQo+Pi0gICAg ICAgICAgICAgICAgc2l6ZW9mIChDUkVERU5USUFMX1RBQkxFKSAtIHNpemVvZiAoUEFTU1dPUkRf SU5GTykgKw0KPj4tICAgICAgICAgICAgICAgIFBBU1NXT1JEX1RBQkxFX0lOQyAqIHNpemVvZiAo UEFTU1dPUkRfSU5GTykgKw0KPj4tICAgICAgICAgICAgICAgIFZhclNpemUNCj4+LSAgICAgICAg ICAgICAgICApOw0KPj4tICBpZiAobVB3ZFRhYmxlID09IE5VTEwpIHsNCj4+LSAgICBGcmVlUG9v bCAoVmFyKTsNCj4+LSAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+Pi0gIH0NCj4+ LQ0KPj4tICBtUHdkVGFibGUtPkNvdW50ICAgICAgPSBWYXJTaXplIC8gc2l6ZW9mIChQQVNTV09S RF9JTkZPKTsNCj4+LSAgbVB3ZFRhYmxlLT5NYXhDb3VudCAgID0gbVB3ZFRhYmxlLT5Db3VudCAr IFBBU1NXT1JEX1RBQkxFX0lOQzsNCj4+LSAgbVB3ZFRhYmxlLT5WYWxpZEluZGV4ID0gMDsNCj4+ LSAgaWYgKFZhciAhPSBOVUxMKSB7DQo+Pi0gICAgQ29weU1lbSAobVB3ZFRhYmxlLT5Vc2VySW5m bywgVmFyLCBWYXJTaXplKTsNCj4+LSAgICBGcmVlUG9vbCAoVmFyKTsNCj4+LSAgfQ0KPj4tICBy ZXR1cm4gRUZJX1NVQ0NFU1M7DQo+Pi19DQo+Pi0NCj4+LQ0KPj4tLyoqDQo+Pi0gIEhhc2ggdGhl IHBhc3N3b3JkIHRvIGdldCBjcmVkZW50aWFsLg0KPj4tDQo+Pi0gIEBwYXJhbVtpbl0gICBQYXNz d29yZCAgICAgICBQb2ludHMgdG8gdGhlIGlucHV0IHBhc3N3b3JkLg0KPj4tICBAcGFyYW1baW5d ICAgUGFzc3dvcmRTaXplICAgVGhlIHNpemUgb2YgcGFzc3dvcmQsIGluIGJ5dGVzLg0KPj4tICBA cGFyYW1bb3V0XSAgQ3JlZGVudGlhbCAgICAgUG9pbnRzIHRvIHRoZSBoYXNoZWQgcmVzdWx0Lg0K Pj4tDQo+Pi0gIEByZXR2YWwgICAgICBUUlVFICAgICAgICAgICBIYXNoIHRoZSBwYXNzd29yZCBz dWNjZXNzZnVsbHkuDQo+Pi0gIEByZXR2YWwgICAgICBGQUxTRSAgICAgICAgICBGYWlsZWQgdG8g aGFzaCB0aGUgcGFzc3dvcmQuDQo+Pi0NCj4+LSoqLw0KPj4tQk9PTEVBTg0KPj4tR2VuZXJhdGVD cmVkZW50aWFsICgNCj4+LSAgSU4gICAgICBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAqUGFzc3dvcmQsDQo+Pi0gIElOICAgICAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUGFzc3dvcmRTaXplLA0KPj4tICAgICBPVVQgIFVJTlQ4ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICpDcmVkZW50aWFsDQo+Pi0gICkNCj4+LXsNCj4+LSAgQk9PTEVBTiAg ICAgICAgICAgU3RhdHVzOw0KPj4tICBVSU5UTiAgICAgICAgICAgICBIYXNoU2l6ZTsNCj4+LSAg Vk9JRCAgICAgICAgICAgICAgKkhhc2g7DQo+Pi0NCj4+LSAgSGFzaFNpemUgPSBTaGExR2V0Q29u dGV4dFNpemUgKCk7DQo+Pi0gIEhhc2ggICAgID0gQWxsb2NhdGVQb29sIChIYXNoU2l6ZSk7DQo+ Pi0gIEFTU0VSVCAoSGFzaCAhPSBOVUxMKTsNCj4+LQ0KPj4tICBTdGF0dXMgPSBTaGExSW5pdCAo SGFzaCk7DQo+Pi0gIGlmICghU3RhdHVzKSB7DQo+Pi0gICAgZ290byBEb25lOw0KPj4tICB9DQo+ Pi0NCj4+LSAgU3RhdHVzID0gU2hhMVVwZGF0ZSAoSGFzaCwgUGFzc3dvcmQsIFBhc3N3b3JkU2l6 ZSk7DQo+Pi0gIGlmICghU3RhdHVzKSB7DQo+Pi0gICAgZ290byBEb25lOw0KPj4tICB9DQo+Pi0N Cj4+LSAgU3RhdHVzID0gU2hhMUZpbmFsIChIYXNoLCBDcmVkZW50aWFsKTsNCj4+LQ0KPj4tRG9u ZToNCj4+LSAgRnJlZVBvb2wgKEhhc2gpOw0KPj4tICByZXR1cm4gU3RhdHVzOw0KPj4tfQ0KPj4t DQo+Pi0NCj4+LS8qKg0KPj4tICBHZXQgcGFzc3dvcmQgZnJvbSB1c2VyIGlucHV0Lg0KPj4tDQo+ Pi0gIEBwYXJhbVtpbl0gICBGaXJzdFB3ZCAgICAgICBJZiBUcnVlLCBwcm9tcHQgdG8gaW5wdXQg dGhlIGZpcnN0IHBhc3N3b3JkLg0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYg RmFsc2UsIHByb21wdCB0byBpbnB1dCBwYXNzd29yZCBhZ2Fpbi4NCj4+LSAgQHBhcmFtW291dF0g IENyZWRlbnRpYWwgICAgIFBvaW50cyB0byB0aGUgaW5wdXQgcGFzc3dvcmQuDQo+Pi0NCj4+LSoq Lw0KPj4tVk9JRA0KPj4tR2V0UGFzc3dvcmQgKA0KPj4tICBJTiAgQk9PTEVBTiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBGaXJzdFB3ZCwNCj4+LSAgT1VUIENIQVI4ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKkNyZWRlbnRpYWwNCj4+LSAgKQ0KPj4tew0KPj4tICBFRklf SU5QVVRfS0VZIEtleTsNCj4+LSAgQ0hBUjE2ICAgICAgICBQYXNzd29yZE1hc2tbQ1JFREVOVElB TF9MRU4gKyAxXTsNCj4+LSAgQ0hBUjE2ICAgICAgICBQYXNzd29yZFtDUkVERU5USUFMX0xFTl07 DQo+Pi0gIFVJTlROICAgICAgICAgUGFzc3dvcmRMZW47DQo+Pi0gIENIQVIxNiAgICAgICAgKlF1 ZXN0aW9uU3RyOw0KPj4tICBDSEFSMTYgICAgICAgICpMaW5lU3RyOw0KPj4tDQo+Pi0gIFBhc3N3 b3JkTGVuID0gMDsNCj4+LSAgd2hpbGUgKFRSVUUpIHsNCj4+LSAgICBQYXNzd29yZE1hc2tbUGFz c3dvcmRMZW5dICAgICA9IEwnXyc7DQo+Pi0gICAgUGFzc3dvcmRNYXNrW1Bhc3N3b3JkTGVuICsg MV0gPSBMJ1wwJzsNCj4+LSAgICBMaW5lU3RyID0gR2V0U3RyaW5nQnlJZCAoU1RSSU5HX1RPS0VO IChTVFJfRFJBV19BX0xJTkUpKTsNCj4+LSAgICBpZiAoRmlyc3RQd2QpIHsNCj4+LSAgICAgIFF1 ZXN0aW9uU3RyID0gR2V0U3RyaW5nQnlJZCAoU1RSSU5HX1RPS0VOIChTVFJfSU5QVVRfUEFTU1dP UkQpKTsNCj4+LSAgICB9IGVsc2Ugew0KPj4tICAgICAgUXVlc3Rpb25TdHIgPSBHZXRTdHJpbmdC eUlkIChTVFJJTkdfVE9LRU4NCj4+KFNUUl9JTlBVVF9QQVNTV09SRF9BR0FJTikpOw0KPj4tICAg IH0NCj4+LSAgICBDcmVhdGVQb3BVcCAoDQo+Pi0gICAgICBFRklfTElHSFRHUkFZIHwgRUZJX0JB Q0tHUk9VTkRfQkxVRSwNCj4+LSAgICAgICZLZXksDQo+Pi0gICAgICBRdWVzdGlvblN0ciwNCj4+ LSAgICAgIExpbmVTdHIsDQo+Pi0gICAgICBQYXNzd29yZE1hc2ssDQo+Pi0gICAgICBOVUxMDQo+ Pi0gICAgICApOw0KPj4tICAgIEZyZWVQb29sIChRdWVzdGlvblN0cik7DQo+Pi0gICAgRnJlZVBv b2wgKExpbmVTdHIpOw0KPj4tDQo+Pi0gICAgLy8NCj4+LSAgICAvLyBDaGVjayBrZXkgc3Ryb2tl DQo+Pi0gICAgLy8NCj4+LSAgICBpZiAoS2V5LlNjYW5Db2RlID09IFNDQU5fTlVMTCkgew0KPj4t ICAgICAgaWYgKEtleS5Vbmljb2RlQ2hhciA9PSBDSEFSX0NBUlJJQUdFX1JFVFVSTikgew0KPj4t ICAgICAgICBicmVhazsNCj4+LSAgICAgIH0gZWxzZSBpZiAoS2V5LlVuaWNvZGVDaGFyID09IENI QVJfQkFDS1NQQUNFKSB7DQo+Pi0gICAgICAgIGlmIChQYXNzd29yZExlbiA+IDApIHsNCj4+LSAg ICAgICAgICBQYXNzd29yZExlbi0tOw0KPj4tICAgICAgICB9DQo+Pi0gICAgICB9IGVsc2UgaWYg KChLZXkuVW5pY29kZUNoYXIgPT0gQ0hBUl9OVUxMKSB8fA0KPj4tICAgICAgICAgICAgICAgICAo S2V5LlVuaWNvZGVDaGFyID09IENIQVJfVEFCKSB8fA0KPj4tICAgICAgICAgICAgICAgICAoS2V5 LlVuaWNvZGVDaGFyID09IENIQVJfTElORUZFRUQpKSB7DQo+Pi0gICAgICAgIGNvbnRpbnVlOw0K Pj4tICAgICAgfSBlbHNlIHsNCj4+LSAgICAgICAgUGFzc3dvcmRbUGFzc3dvcmRMZW5dID0gS2V5 LlVuaWNvZGVDaGFyOw0KPj4tICAgICAgICBQYXNzd29yZE1hc2tbUGFzc3dvcmRMZW5dID0gTCcq JzsNCj4+LSAgICAgICAgUGFzc3dvcmRMZW4rKzsNCj4+LSAgICAgICAgaWYgKFBhc3N3b3JkTGVu ID09IENSRURFTlRJQUxfTEVOKSB7DQo+Pi0gICAgICAgICAgYnJlYWs7DQo+Pi0gICAgICAgIH0N Cj4+LSAgICAgIH0NCj4+LSAgICB9DQo+Pi0gIH0NCj4+LQ0KPj4tICBQYXNzd29yZExlbiA9IFBh c3N3b3JkTGVuICogc2l6ZW9mIChDSEFSMTYpOw0KPj4tICBHZW5lcmF0ZUNyZWRlbnRpYWwgKFBh c3N3b3JkLCBQYXNzd29yZExlbiwgKFVJTlQ4ICopQ3JlZGVudGlhbCk7DQo+Pi19DQo+Pi0NCj4+ LS8qKg0KPj4tICBDaGVjayB3aGV0aGVyIHRoZSBwYXNzd29yZCBjYW4gYmUgZm91bmQgb24gdGhp cyBwcm92aWRlci4NCj4+LQ0KPj4tICBAcGFyYW1baW5dICBQYXNzd29yZCAgICAgICAgICAgVGhl IHBhc3N3b3JkIHRvIGJlIGZvdW5kLg0KPj4tDQo+Pi0gIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAg ICAgICAgICBGb3VuZCBwYXNzd29yZCBzdWNlc3NmdWxseS4NCj4+LSAgQHJldHZhbCBFRklfTk9U X0ZPVU5EICAgICAgICAgIEZhaWwgdG8gZmluZCB0aGUgcGFzc3dvcmQuDQo+Pi0NCj4+LSoqLw0K Pj4tRUZJX1NUQVRVUw0KPj4tQ2hlY2tQYXNzd29yZCAoDQo+Pi0gIElOIENIQVI4ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqUGFzc3dvcmQNCj4+LSAgKQ0KPj4tew0KPj4t ICBVSU5UTiAgICAgIEluZGV4Ow0KPj4tICBDSEFSOCAgICAgICpQd2Q7DQo+Pi0NCj4+LSAgLy8N Cj4+LSAgLy8gQ2hlY2sgcGFzc3dvcmQgY3JlZGVudGlhbC4NCj4+LSAgLy8NCj4+LSAgbVB3ZFRh YmxlLT5WYWxpZEluZGV4ID0gMDsNCj4+LSAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgbVB3ZFRh YmxlLT5Db3VudDsgSW5kZXgrKykgew0KPj4tICAgIFB3ZCA9IG1Qd2RUYWJsZS0+VXNlckluZm9b SW5kZXhdLlBhc3N3b3JkOw0KPj4tICAgIGlmIChDb21wYXJlTWVtIChQd2QsIFBhc3N3b3JkLCBD UkVERU5USUFMX0xFTikgPT0gMCkgew0KPj4tICAgICAgbVB3ZFRhYmxlLT5WYWxpZEluZGV4ID0g SW5kZXggKyAxOw0KPj4tICAgICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPj4tICAgIH0NCj4+LSAg fQ0KPj4tDQo+Pi0gIHJldHVybiBFRklfTk9UX0ZPVU5EOw0KPj4tfQ0KPj4tDQo+Pi0NCj4+LS8q Kg0KPj4tICBGaW5kIGEgdXNlciBpbmZvbWF0aW9uIHJlY29yZCBieSB0aGUgaW5mb3JtYXRpb24g cmVjb3JkIHR5cGUuDQo+Pi0NCj4+LSAgVGhpcyBmdW5jdGlvbiBzZWFyY2hlcyBhbGwgdXNlciBp bmZvcm1hdGlvbiByZWNvcmRzIG9mIFVzZXIgZnJvbSBiZWdpbm5pbmcNCj4+LSAgdW50aWwgZWl0 aGVyIHRoZSBpbmZvcm1hdGlvbiBpcyBmb3VuZCwgb3IgdGhlcmUgYXJlIG5vIG1vcmUgdXNlciBp bmZvbWF0aW9uDQo+Pi0gIHJlY29yZHMuIEEgbWF0Y2ggb2NjdXJzIHdoZW4gYSBJbmZvLkluZm9U eXBlIGZpZWxkIG1hdGNoZXMgdGhlIHVzZXINCj4+aW5mb3JtYXRpb24NCj4+LSAgcmVjb3JkIHR5 cGUuDQo+Pi0NCj4+LSAgQHBhcmFtW2luXSAgICAgVXNlciAgICAgIFBvaW50cyB0byB0aGUgdXNl ciBwcm9maWxlIHJlY29yZCB0byBzZWFyY2guDQo+Pi0gIEBwYXJhbVtpbl0gICAgIEluZm9UeXBl ICBUaGUgaW5mb21hdGlvbiB0eXBlIHRvIGJlIHNlYXJjaGVkLg0KPj4tICBAcGFyYW1bb3V0XSAg ICBJbmZvICAgICAgUG9pbnRzIHRvIHRoZSB1c2VyIGluZm8gZm91bmQsIHRoZSBjYWxsZXIgaXMN Cj5yZXNwb25zaWJsZQ0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gZnJlZS4NCj4+ LQ0KPj4tICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgRmluZCB0aGUgdXNlciBpbmZvcm1hdGlv biBzdWNjZXNzZnVsbHkuDQo+Pi0gIEByZXR2YWwgT3RoZXJzICAgICAgICAgICBGYWlsIHRvIGZp bmQgdGhlIHVzZXIgaW5mb3JtYXRpb24uDQo+Pi0NCj4+LSoqLw0KPj4tRUZJX1NUQVRVUw0KPj4t RmluZFVzZXJJbmZvQnlUeXBlICgNCj4+LSAgSU4gICAgICBFRklfVVNFUl9QUk9GSUxFX0hBTkRM RSAgICAgICAgICAgICAgIFVzZXIsDQo+Pi0gIElOICAgICAgVUlOVDggICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBJbmZvVHlwZSwNCj4+LSAgT1VUICAgICBFRklfVVNFUl9JTkZPICAg ICAgICAgICAgICAgICAgICAgICAgICoqSW5mbw0KPj4tICApDQo+Pi17DQo+Pi0gIEVGSV9TVEFU VVMgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4+LSAgRUZJX1VTRVJfSU5GTyAgICAgICAgICAg ICAgKlVzZXJJbmZvOw0KPj4tICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICBVc2VySW5mb1Np emU7DQo+Pi0gIEVGSV9VU0VSX0lORk9fSEFORExFICAgICAgIFVzZXJJbmZvSGFuZGxlOw0KPj4t ICBFRklfVVNFUl9NQU5BR0VSX1BST1RPQ09MICAqVXNlck1hbmFnZXI7DQo+Pi0NCj4+LSAgLy8N Cj4+LSAgLy8gRmluZCB1c2VyIGluZm9ybWF0aW9uIGJ5IGluZm9ybWF0aW9uIHR5cGUuDQo+Pi0g IC8vDQo+Pi0gIGlmIChJbmZvID09IE5VTEwpIHsNCj4+LSAgICByZXR1cm4gRUZJX0lOVkFMSURf UEFSQU1FVEVSOw0KPj4tICB9DQo+Pi0NCj4+LSAgU3RhdHVzID0gZ0JTLT5Mb2NhdGVQcm90b2Nv bCAoDQo+Pi0gICAgICAgICAgICAgICAgICAmZ0VmaVVzZXJNYW5hZ2VyUHJvdG9jb2xHdWlkLA0K Pj4tICAgICAgICAgICAgICAgICAgTlVMTCwNCj4+LSAgICAgICAgICAgICAgICAgIChWT0lEICoq KSAmVXNlck1hbmFnZXINCj4+LSAgICAgICAgICAgICAgICAgICk7DQo+Pi0gIGlmIChFRklfRVJS T1IgKFN0YXR1cykpIHsNCj4+LSAgICByZXR1cm4gRUZJX05PVF9GT1VORDsNCj4+LSAgfQ0KPj4t DQo+Pi0gIC8vDQo+Pi0gIC8vIEdldCBlYWNoIHVzZXIgaW5mb3JtYXRpb24uDQo+Pi0gIC8vDQo+ Pi0NCj4+LSAgVXNlckluZm9IYW5kbGUgPSBOVUxMOw0KPj4tICBVc2VySW5mbyAgICAgICA9IE5V TEw7DQo+Pi0gIFVzZXJJbmZvU2l6ZSAgID0gMDsNCj4+LSAgd2hpbGUgKFRSVUUpIHsNCj4+LSAg ICBTdGF0dXMgPSBVc2VyTWFuYWdlci0+R2V0TmV4dEluZm8gKFVzZXJNYW5hZ2VyLCBVc2VyLA0K Pj4mVXNlckluZm9IYW5kbGUpOw0KPj4tICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4+ LSAgICAgIGJyZWFrOw0KPj4tICAgIH0NCj4+LSAgICAvLw0KPj4tICAgIC8vIEdldCBpbmZvcm1h dGlvbi4NCj4+LSAgICAvLw0KPj4tICAgIFN0YXR1cyA9IFVzZXJNYW5hZ2VyLT5HZXRJbmZvICgN Cj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VyTWFuYWdlciwNCj4+LSAgICAgICAg ICAgICAgICAgICAgICAgICAgICBVc2VyLA0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAg IFVzZXJJbmZvSGFuZGxlLA0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJJbmZv LA0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICZVc2VySW5mb1NpemUNCj4+LSAgICAg ICAgICAgICAgICAgICAgICAgICAgICApOw0KPj4tICAgIGlmIChTdGF0dXMgPT0gRUZJX0JVRkZF Ul9UT09fU01BTEwpIHsNCj4+LSAgICAgIGlmIChVc2VySW5mbyAhPSBOVUxMKSB7DQo+Pi0gICAg ICAgIEZyZWVQb29sIChVc2VySW5mbyk7DQo+Pi0gICAgICB9DQo+Pi0gICAgICBVc2VySW5mbyA9 IEFsbG9jYXRlWmVyb1Bvb2wgKFVzZXJJbmZvU2l6ZSk7DQo+Pi0gICAgICBpZiAoVXNlckluZm8g PT0gTlVMTCkgew0KPj4tICAgICAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+Pi0g ICAgICB9DQo+Pi0gICAgICBTdGF0dXMgPSBVc2VyTWFuYWdlci0+R2V0SW5mbyAoDQo+Pi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VyTWFuYWdlciwNCj4+LSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFVzZXIsDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBV c2VySW5mb0hhbmRsZSwNCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJJbmZv LA0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlVzZXJJbmZvU2l6ZQ0KPj4tICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4+LSAgICB9DQo+Pi0gICAgaWYgKEVGSV9F UlJPUiAoU3RhdHVzKSkgew0KPj4tICAgICAgYnJlYWs7DQo+Pi0gICAgfQ0KPj4tDQo+Pi0gICAg QVNTRVJUIChVc2VySW5mbyAhPSBOVUxMKTsNCj4+LSAgICBpZiAoVXNlckluZm8tPkluZm9UeXBl ID09IEluZm9UeXBlKSB7DQo+Pi0gICAgICAqSW5mbyA9IFVzZXJJbmZvOw0KPj4tICAgICAgcmV0 dXJuIEVGSV9TVUNDRVNTOw0KPj4tICAgIH0NCj4+LSAgfQ0KPj4tDQo+Pi0gIGlmIChVc2VySW5m byAhPSBOVUxMKSB7DQo+Pi0gICAgRnJlZVBvb2wgKFVzZXJJbmZvKTsNCj4+LSAgfQ0KPj4tICBy ZXR1cm4gU3RhdHVzOw0KPj4tfQ0KPj4tDQo+Pi0NCj4+LS8qKg0KPj4tICBUaGlzIGZ1bmN0aW9u IHByb2Nlc3NlcyB0aGUgcmVzdWx0cyBvZiBjaGFuZ2VzIGluIGNvbmZpZ3VyYXRpb24uDQo+Pi0N Cj4+LSAgQHBhcmFtICBUaGlzICAgICAgICAgICAgICAgICAgIFBvaW50cyB0byB0aGUgRUZJX0hJ SV9DT05GSUdfQUNDRVNTX1BST1RPQ09MLg0KPj4tICBAcGFyYW0gIEFjdGlvbiAgICAgICAgICAg ICAgICAgU3BlY2lmaWVzIHRoZSB0eXBlIG9mIGFjdGlvbiB0YWtlbiBieSB0aGUgYnJvd3Nlci4N Cj4+LSAgQHBhcmFtICBRdWVzdGlvbklkICAgICAgICAgICAgIEEgdW5pcXVlIHZhbHVlIHdoaWNo IGlzIHNlbnQgdG8gdGhlIG9yaWdpbmFsDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBleHBvcnRpbmcgZHJpdmVyIHNvIHRoYXQgaXQgY2FuIGlkZW50aWZ5IHRoZSB0eXBlDQo+ Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiBkYXRhIHRvIGV4cGVjdC4NCj4+ LSAgQHBhcmFtICBUeXBlICAgICAgICAgICAgICAgICAgIFRoZSB0eXBlIG9mIHZhbHVlIGZvciB0 aGUgcXVlc3Rpb24uDQo+Pi0gIEBwYXJhbSAgVmFsdWUgICAgICAgICAgICAgICAgICBBIHBvaW50 ZXIgdG8gdGhlIGRhdGEgYmVpbmcgc2VudCB0byB0aGUgb3JpZ2luYWwNCj4+LSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydGluZyBkcml2ZXIuDQo+Pi0gIEBwYXJhbSAgQWN0 aW9uUmVxdWVzdCAgICAgICAgICBPbiByZXR1cm4sIHBvaW50cyB0byB0aGUgYWN0aW9uIHJlcXVl c3RlZCBieQ0KPj50aGUNCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxi YWNrIGZ1bmN0aW9uLg0KPj4tDQo+Pi0gIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICBU aGUgY2FsbGJhY2sgc3VjY2Vzc2Z1bGx5IGhhbmRsZWQgdGhlIGFjdGlvbi4NCj4+LSAgQHJldHZh bCBFRklfT1VUX09GX1JFU09VUkNFUyAgIE5vdCBlbm91Z2ggc3RvcmFnZSBpcyBhdmFpbGFibGUg dG8gaG9sZA0KPj50aGUNCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlh YmxlIGFuZCBpdHMgZGF0YS4NCj4+LSAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgIFRo ZSB2YXJpYWJsZSBjb3VsZCBub3QgYmUgc2F2ZWQuDQo+Pi0gIEByZXR2YWwgRUZJX1VOU1VQUE9S VEVEICAgICAgICBUaGUgc3BlY2lmaWVkIEFjdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5DQo+dGhl DQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay4NCj4+LQ0KPj4t KiovDQo+Pi1FRklfU1RBVFVTDQo+Pi1FRklBUEkNCj4+LUNyZWRlbnRpYWxEcml2ZXJDYWxsYmFj ayAoDQo+Pi0gIElOICBDT05TVCBFRklfSElJX0NPTkZJR19BQ0NFU1NfUFJPVE9DT0wgICAqVGhp cywNCj4+LSAgSU4gIEVGSV9CUk9XU0VSX0FDVElPTiAgICAgICAgICAgICAgICAgICAgIEFjdGlv biwNCj4+LSAgSU4gIEVGSV9RVUVTVElPTl9JRCAgICAgICAgICAgICAgICAgICAgICAgIFF1ZXN0 aW9uSWQsDQo+Pi0gIElOICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBU eXBlLA0KPj4tICBJTiAgRUZJX0lGUl9UWVBFX1ZBTFVFICAgICAgICAgICAgICAgICAgICAgKlZh bHVlLA0KPj4tICBPVVQgRUZJX0JST1dTRVJfQUNUSU9OX1JFUVVFU1QgICAgICAgICAgICAgKkFj dGlvblJlcXVlc3QNCj4+LSAgKQ0KPj4tew0KPj4tICBFRklfU1RBVFVTICAgIFN0YXR1czsNCj4+ LSAgRUZJX0lOUFVUX0tFWSBLZXk7DQo+Pi0gIENIQVI4ICAgICAgICAgUGFzc3dvcmRbQ1JFREVO VElBTF9MRU5dOw0KPj4tICBDSEFSMTYgICAgICAgICpQcm9tcHRTdHI7DQo+Pi0NCj4+LSAgaWYg KEFjdGlvbiA9PSBFRklfQlJPV1NFUl9BQ1RJT05fQ0hBTkdFRCkgew0KPj4tICAgIGlmIChRdWVz dGlvbklkID09IEtFWV9HRVRfUEFTU1dPUkQpIHsNCj4+LSAgICAgIC8vDQo+Pi0gICAgICAvLyBH ZXQgYW5kIGNoZWNrIHBhc3N3b3JkLg0KPj4tICAgICAgLy8NCj4+LSAgICAgIEdldFBhc3N3b3Jk IChUUlVFLCBQYXNzd29yZCk7DQo+Pi0gICAgICBTdGF0dXMgPSBDaGVja1Bhc3N3b3JkIChQYXNz d29yZCk7DQo+Pi0gICAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+Pi0gICAgICAgIFBy b21wdFN0ciA9IEdldFN0cmluZ0J5SWQgKFNUUklOR19UT0tFTg0KPj4oU1RSX1BBU1NXT1JEX0lO Q09SUkVDVCkpOw0KPj4tICAgICAgICBDcmVhdGVQb3BVcCAoDQo+Pi0gICAgICAgICAgRUZJX0xJ R0hUR1JBWSB8IEVGSV9CQUNLR1JPVU5EX0JMVUUsDQo+Pi0gICAgICAgICAgJktleSwNCj4+LSAg ICAgICAgICBMIiIsDQo+Pi0gICAgICAgICAgUHJvbXB0U3RyLA0KPj4tICAgICAgICAgIEwiIiwN Cj4+LSAgICAgICAgICBOVUxMDQo+Pi0gICAgICAgICAgKTsNCj4+LSAgICAgICAgRnJlZVBvb2wg KFByb21wdFN0cik7DQo+Pi0gICAgICAgIHJldHVybiBTdGF0dXM7DQo+Pi0gICAgICB9DQo+Pi0g ICAgICAqQWN0aW9uUmVxdWVzdCAgPSBFRklfQlJPV1NFUl9BQ1RJT05fUkVRVUVTVF9FWElUOw0K Pj4tICAgIH0NCj4+LSAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+Pi0gIH0NCj4+LQ0KPj4tICAv Lw0KPj4tICAvLyBBbGwgb3RoZXIgYWN0aW9uIHJldHVybiB1bnN1cHBvcnRlZC4NCj4+LSAgLy8N Cj4+LSAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsNCj4+LX0NCj4+LQ0KPj4tDQo+Pi0vKioNCj4+ LSAgVGhpcyBmdW5jdGlvbiBhbGxvd3MgYSBjYWxsZXIgdG8gZXh0cmFjdCB0aGUgY3VycmVudCBj b25maWd1cmF0aW9uIGZvciBvbmUNCj4+LSAgb3IgbW9yZSBuYW1lZCBlbGVtZW50cyBmcm9tIHRo ZSB0YXJnZXQgZHJpdmVyLg0KPj4tDQo+Pi0NCj4+LSAgQHBhcmFtIFRoaXMgICAgICAgICAgICBQ b2ludHMgdG8gdGhlIEVGSV9ISUlfQ09ORklHX0FDQ0VTU19QUk9UT0NPTC4NCj4+LSAgQHBhcmFt IFJlcXVlc3QgICAgICAgICBBIG51bGwtdGVybWluYXRlZCBVbmljb2RlIHN0cmluZyBpbiA8Q29u ZmlnUmVxdWVzdD4NCj4+Zm9ybWF0Lg0KPj4tICBAcGFyYW0gUHJvZ3Jlc3MgICAgICAgIE9uIHJl dHVybiwgcG9pbnRzIHRvIGEgY2hhcmFjdGVyIGluIHRoZSBSZXF1ZXN0IHN0cmluZy4NCj4+LSAg ICAgICAgICAgICAgICAgICAgICAgICBQb2ludHMgdG8gdGhlIHN0cmluZydzIG51bGwgdGVybWlu YXRvciBpZiByZXF1ZXN0IHdhcyBzdWNjZXNzZnVsLg0KPj4tICAgICAgICAgICAgICAgICAgICAg ICAgIFBvaW50cyB0byB0aGUgbW9zdCByZWNlbnQgJyYnIGJlZm9yZSB0aGUgZmlyc3QgZmFpbGlu ZyBuYW1lL3ZhbHVlDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgcGFpciAob3IgdGhlIGJl Z2lubmluZyBvZiB0aGUgc3RyaW5nIGlmIHRoZSBmYWlsdXJlIGlzIGluIHRoZQ0KPj4tICAgICAg ICAgICAgICAgICAgICAgICAgIGZpcnN0IG5hbWUvdmFsdWUgcGFpcikgaWYgdGhlIHJlcXVlc3Qg d2FzIG5vdCBzdWNjZXNzZnVsLg0KPj4tICBAcGFyYW0gUmVzdWx0cyAgICAgICAgIEEgbnVsbC10 ZXJtaW5hdGVkIFVuaWNvZGUgc3RyaW5nIGluIDxDb25maWdBbHRSZXNwPg0KPj5mb3JtYXQgd2hp Y2gNCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICBoYXMgYWxsIHZhbHVlcyBmaWxsZWQgaW4g Zm9yIHRoZSBuYW1lcyBpbiB0aGUgUmVxdWVzdCBzdHJpbmcuDQo+Pi0gICAgICAgICAgICAgICAg ICAgICAgICAgU3RyaW5nIHRvIGJlIGFsbG9jYXRlZCBieSB0aGUgY2FsbGVkIGZ1bmN0aW9uLg0K Pj4tDQo+Pi0gIEByZXR2YWwgIEVGSV9TVUNDRVNTICAgICAgICAgICAgVGhlIFJlc3VsdHMgaXMg ZmlsbGVkIHdpdGggdGhlIHJlcXVlc3RlZCB2YWx1ZXMuDQo+Pi0gIEByZXR2YWwgIEVGSV9PVVRf T0ZfUkVTT1VSQ0VTICAgTm90IGVub3VnaCBtZW1vcnkgdG8gc3RvcmUgdGhlDQo+PnJlc3VsdHMu DQo+Pi0gIEByZXR2YWwgIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgUmVxdWVzdCBpcyBpbGxlZ2Fs IHN5bnRheCwgb3IgdW5rbm93bg0KPj5uYW1lLg0KPj4tICBAcmV0dmFsICBFRklfTk9UX0ZPVU5E ICAgICAgICAgIFJvdXRpbmcgZGF0YSBkb2Vzbid0IG1hdGNoIGFueSBzdG9yYWdlIGluDQo+PnRo aXMgZHJpdmVyLg0KPj4tDQo+Pi0qKi8NCj4+LUVGSV9TVEFUVVMNCj4+LUVGSUFQSQ0KPj4tRmFr ZUV4dHJhY3RDb25maWcgKA0KPj4tICBJTiAgQ09OU1QgRUZJX0hJSV9DT05GSUdfQUNDRVNTX1BS T1RPQ09MICAgKlRoaXMsDQo+Pi0gIElOICBDT05TVCBFRklfU1RSSU5HICAgICAgICAgICAgICAg ICAgICAgICBSZXF1ZXN0LA0KPj4tICBPVVQgRUZJX1NUUklORyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKlByb2dyZXNzLA0KPj4tICBPVVQgRUZJX1NUUklORyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKlJlc3VsdHMNCj4+LSAgKQ0KPj4tew0KPj4tICBpZiAoUHJvZ3Jlc3MgPT0g TlVMTCB8fCBSZXN1bHRzID09IE5VTEwpIHsNCj4+LSAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFS QU1FVEVSOw0KPj4tICB9DQo+Pi0gICpQcm9ncmVzcyA9IFJlcXVlc3Q7DQo+Pi0gIHJldHVybiBF RklfTk9UX0ZPVU5EOw0KPj4tfQ0KPj4tDQo+Pi0vKioNCj4+LSAgVGhpcyBmdW5jdGlvbiBwcm9j ZXNzZXMgdGhlIHJlc3VsdHMgb2YgY2hhbmdlcyBpbiBjb25maWd1cmF0aW9uLg0KPj4tDQo+Pi0N Cj4+LSAgQHBhcmFtIFRoaXMgICAgICAgICAgICBQb2ludHMgdG8gdGhlIEVGSV9ISUlfQ09ORklH X0FDQ0VTU19QUk9UT0NPTC4NCj4+LSAgQHBhcmFtIENvbmZpZ3VyYXRpb24gICBBIG51bGwtdGVy bWluYXRlZCBVbmljb2RlIHN0cmluZyBpbiA8Q29uZmlnUmVzcD4NCj4+Zm9ybWF0Lg0KPj4tICBA cGFyYW0gUHJvZ3Jlc3MgICAgICAgIEEgcG9pbnRlciB0byBhIHN0cmluZyBmaWxsZWQgaW4gd2l0 aCB0aGUgb2Zmc2V0IG9mIHRoZQ0KPj5tb3N0DQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAg cmVjZW50ICcmJyBiZWZvcmUgdGhlIGZpcnN0IGZhaWxpbmcgbmFtZS92YWx1ZSBwYWlyIChvciB0 aGUNCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbm5pbmcgb2YgdGhlIHN0cmluZyBp ZiB0aGUgZmFpbHVyZSBpcyBpbiB0aGUgZmlyc3QNCj4+LSAgICAgICAgICAgICAgICAgICAgICAg ICBuYW1lL3ZhbHVlIHBhaXIpIG9yIHRoZSB0ZXJtaW5hdGluZyBOVUxMIGlmIGFsbCB3YXMgc3Vj Y2Vzc2Z1bC4NCj4+LQ0KPj4tICBAcmV0dmFsICBFRklfU1VDQ0VTUyAgICAgICAgICAgIFRoZSBS ZXN1bHRzIGlzIHByb2Nlc3NlZCBzdWNjZXNzZnVsbHkuDQo+Pi0gIEByZXR2YWwgIEVGSV9JTlZB TElEX1BBUkFNRVRFUiAgQ29uZmlndXJhdGlvbiBpcyBOVUxMLg0KPj4tICBAcmV0dmFsICBFRklf Tk9UX0ZPVU5EICAgICAgICAgIFJvdXRpbmcgZGF0YSBkb2Vzbid0IG1hdGNoIGFueSBzdG9yYWdl IGluDQo+PnRoaXMgZHJpdmVyLg0KPj4tDQo+Pi0qKi8NCj4+LUVGSV9TVEFUVVMNCj4+LUVGSUFQ SQ0KPj4tRmFrZVJvdXRlQ29uZmlnICgNCj4+LSAgSU4gIENPTlNUIEVGSV9ISUlfQ09ORklHX0FD Q0VTU19QUk9UT0NPTCAgICpUaGlzLA0KPj4tICBJTiAgQ09OU1QgRUZJX1NUUklORyAgICAgICAg ICAgICAgICAgICAgICAgQ29uZmlndXJhdGlvbiwNCj4+LSAgT1VUIEVGSV9TVFJJTkcgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICpQcm9ncmVzcw0KPj4tICApDQo+Pi17DQo+Pi0gIGlmIChD b25maWd1cmF0aW9uID09IE5VTEwgfHwgUHJvZ3Jlc3MgPT0gTlVMTCkgew0KPj4tICAgIHJldHVy biBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+Pi0gIH0NCj4+LQ0KPj4tICAqUHJvZ3Jlc3MgPSBD b25maWd1cmF0aW9uOw0KPj4tDQo+Pi0gIHJldHVybiBFRklfTk9UX0ZPVU5EOw0KPj4tfQ0KPj4t DQo+Pi0vKioNCj4+LSAgVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplIHRoZSBkYXRhIG1haW5seSB1 c2VkIGluIGZvcm0gYnJvd3Nlci4NCj4+LQ0KPj4tICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAg ICAgIEluaXRpYWxpemUgZm9ybSBkYXRhIHN1Y2Nlc3NmdWxseS4NCj4+LSAgQHJldHZhbCBPdGhl cnMgICAgICAgICAgICAgICBGYWlsIHRvIEluaXRpYWxpemUgZm9ybSBkYXRhLg0KPj4tDQo+Pi0q Ki8NCj4+LUVGSV9TVEFUVVMNCj4+LUluaXRGb3JtQnJvd3NlciAoDQo+Pi0gIFZPSUQNCj4+LSAg KQ0KPj4tew0KPj4tICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPj4tICBQ V0RfUFJPVklERVJfQ0FMTEJBQ0tfSU5GTyAgKkNhbGxiYWNrSW5mbzsNCj4+LQ0KPj4tICAvLw0K Pj4tICAvLyBJbml0aWFsaXplIGRyaXZlciBwcml2YXRlIGRhdGEuDQo+Pi0gIC8vDQo+Pi0gIENh bGxiYWNrSW5mbyA9IEFsbG9jYXRlWmVyb1Bvb2wgKHNpemVvZg0KPihQV0RfUFJPVklERVJfQ0FM TEJBQ0tfSU5GTykpOw0KPj4tICBpZiAoQ2FsbGJhY2tJbmZvID09IE5VTEwpIHsNCj4+LSAgICBy ZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+Pi0gIH0NCj4+LQ0KPj4tICBDYWxsYmFja0lu Zm8tPlNpZ25hdHVyZSAgICAgICAgICAgICAgICAgICA9IFBXRF9QUk9WSURFUl9TSUdOQVRVUkU7 DQo+Pi0gIENhbGxiYWNrSW5mby0+Q29uZmlnQWNjZXNzLkV4dHJhY3RDb25maWcgID0gRmFrZUV4 dHJhY3RDb25maWc7DQo+Pi0gIENhbGxiYWNrSW5mby0+Q29uZmlnQWNjZXNzLlJvdXRlQ29uZmln ICAgID0gRmFrZVJvdXRlQ29uZmlnOw0KPj4tICBDYWxsYmFja0luZm8tPkNvbmZpZ0FjY2Vzcy5D YWxsYmFjayAgICAgICA9IENyZWRlbnRpYWxEcml2ZXJDYWxsYmFjazsNCj4+LSAgQ2FsbGJhY2tJ bmZvLT5Ecml2ZXJIYW5kbGUgID0gTlVMTDsNCj4+LQ0KPj4tICAvLw0KPj4tICAvLyBJbnN0YWxs IERldmljZSBQYXRoIFByb3RvY29sIGFuZCBDb25maWcgQWNjZXNzIHByb3RvY29sIHRvIGRyaXZl ciBoYW5kbGUuDQo+Pi0gIC8vDQo+Pi0gIFN0YXR1cyA9IGdCUy0+SW5zdGFsbE11bHRpcGxlUHJv dG9jb2xJbnRlcmZhY2VzICgNCj4+LSAgICAgICAgICAgICAgICAgICZDYWxsYmFja0luZm8tPkRy aXZlckhhbmRsZSwNCj4+LSAgICAgICAgICAgICAgICAgICZnRWZpRGV2aWNlUGF0aFByb3RvY29s R3VpZCwNCj4+LSAgICAgICAgICAgICAgICAgICZtSGlpVmVuZG9yRGV2aWNlUGF0aCwNCj4+LSAg ICAgICAgICAgICAgICAgICZnRWZpSGlpQ29uZmlnQWNjZXNzUHJvdG9jb2xHdWlkLA0KPj4tICAg ICAgICAgICAgICAgICAgJkNhbGxiYWNrSW5mby0+Q29uZmlnQWNjZXNzLA0KPj4tICAgICAgICAg ICAgICAgICAgTlVMTA0KPj4tICAgICAgICAgICAgICAgICAgKTsNCj4+LSAgQVNTRVJUX0VGSV9F UlJPUiAoU3RhdHVzKTsNCj4+LQ0KPj4tICAvLw0KPj4tICAvLyBQdWJsaXNoIEhJSSBkYXRhLg0K Pj4tICAvLw0KPj4tICBDYWxsYmFja0luZm8tPkhpaUhhbmRsZSA9IEhpaUFkZFBhY2thZ2VzICgN Cj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZnUHdkQ3JlZGVudGlhbFByb3ZpZGVy R3VpZCwNCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhbGxiYWNrSW5mby0+RHJp dmVySGFuZGxlLA0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHdkQ3JlZGVudGlh bFByb3ZpZGVyU3RyaW5ncywNCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB3ZENy ZWRlbnRpYWxQcm92aWRlclZmckJpbiwNCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IE5VTEwNCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+Pi0gIGlmIChDYWxs YmFja0luZm8tPkhpaUhhbmRsZSA9PSBOVUxMKSB7DQo+Pi0gICAgcmV0dXJuIEVGSV9PVVRfT0Zf UkVTT1VSQ0VTOw0KPj4tICB9DQo+Pi0gIG1DYWxsYmFja0luZm8gPSBDYWxsYmFja0luZm87DQo+ Pi0NCj4+LSAgcmV0dXJuIFN0YXR1czsNCj4+LX0NCj4+LQ0KPj4tDQo+Pi0vKioNCj4+LSAgRW5y b2xsIGEgdXNlciBvbiBhIGNyZWRlbnRpYWwgcHJvdmlkZXIuDQo+Pi0NCj4+LSAgVGhpcyBmdW5j dGlvbiBlbnJvbGxzIGEgdXNlciBvbiB0aGlzIGNyZWRlbnRpYWwgcHJvdmlkZXIuIElmIHRoZSB1 c2VyIGV4aXN0cyBvbg0KPj4tICB0aGlzIGNyZWRlbnRpYWwgcHJvdmlkZXIsIHVwZGF0ZSB0aGUg dXNlciBpbmZvcm1hdGlvbiBvbiB0aGlzIGNyZWRlbnRpYWwNCj4+cHJvdmlkZXI7DQo+Pi0gIG90 aGVyd2lzZSBhZGQgdGhlIHVzZXIgaW5mb3JtYXRpb24gb24gY3JlZGVudGlhbCBwcm92aWRlci4N Cj4+LQ0KPj4tICBAcGFyYW1baW5dIFRoaXMgICAgICAgICAgICAgICAgUG9pbnRzIHRvIHRoaXMg aW5zdGFuY2Ugb2YNCj4+RUZJX1VTRVJfQ1JFREVOVElBTDJfUFJPVE9DT0wuDQo+Pi0gIEBwYXJh bVtpbl0gVXNlciAgICAgICAgICAgICAgICBUaGUgdXNlciBwcm9maWxlIHRvIGVucm9sbC4NCj4+ LQ0KPj4tICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgVXNlciBwcm9maWxlIHdhcyBz dWNjZXNzZnVsbHkgZW5yb2xsZWQuDQo+Pi0gIEByZXR2YWwgRUZJX0FDQ0VTU19ERU5JRUQgICAg ICBDdXJyZW50IHVzZXIgcHJvZmlsZSBkb2VzIG5vdCBwZXJtaXQNCj4+ZW5yb2xsbWVudCBvbiB0 aGUNCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIgcHJvZmlsZSBoYW5k bGUuIEVpdGhlciB0aGUgdXNlciBwcm9maWxlIGNhbm5vdCBlbnJvbGwNCj4+LSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG9uIGFueSB1c2VyIHByb2ZpbGUgb3IgY2Fubm90IGVucm9s bCBvbiBhIHVzZXIgcHJvZmlsZQ0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg b3RoZXIgdGhhbiB0aGUgY3VycmVudCB1c2VyIHByb2ZpbGUuDQo+Pi0gIEByZXR2YWwgRUZJX1VO U1VQUE9SVEVEICAgICAgICBUaGlzIGNyZWRlbnRpYWwgcHJvdmlkZXIgZG9lcyBub3Qgc3VwcG9y dA0KPj5lbnJvbGxtZW50IGluDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0 aGUgcHJlLU9TLg0KPj4tICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICAgVGhlIG5ldyBj cmVkZW50aWFsIGNvdWxkIG5vdCBiZSBjcmVhdGVkDQo+PmJlY2F1c2Ugb2YgYSBkZXZpY2UNCj4+ LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yLg0KPj4tICBAcmV0dmFsIEVG SV9JTlZBTElEX1BBUkFNRVRFUiAgVXNlciBkb2VzIG5vdCByZWZlciB0byBhIHZhbGlkIHVzZXIN Cj4+cHJvZmlsZSBoYW5kbGUuDQo+Pi0NCj4+LSoqLw0KPj4tRUZJX1NUQVRVUw0KPj4tRUZJQVBJ DQo+Pi1DcmVkZW50aWFsRW5yb2xsICgNCj4+LSAgSU4gQ09OU1QgIEVGSV9VU0VSX0NSRURFTlRJ QUwyX1BST1RPQ09MICAgICAgICpUaGlzLA0KPj4tICBJTiAgICAgICAgRUZJX1VTRVJfUFJPRklM RV9IQU5ETEUgICAgICAgICAgICAgVXNlcg0KPj4tICApDQo+Pi17DQo+Pi0gIEVGSV9TVEFUVVMg ICAgICAgICAgICAgICAgU3RhdHVzOw0KPj4tICBVSU5UTiAgICAgICAgICAgICAgICAgICAgIElu ZGV4Ow0KPj4tICBQQVNTV09SRF9JTkZPICAgICAgICAgICAgIFB3ZEluZm87DQo+Pi0gIEVGSV9V U0VSX0lORk8gICAgICAgICAgICAgKlVzZXJJbmZvOw0KPj4tICBDSEFSOCAgICAgICAgICAgICAg ICAgICAgIFBhc3N3b3JkW0NSRURFTlRJQUxfTEVOXTsNCj4+LSAgRUZJX0lOUFVUX0tFWSAgICAg ICAgICAgICBLZXk7DQo+Pi0gIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgKlVzZXJJZDsNCj4+ LSAgQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAqUXVlc3Rpb25TdHI7DQo+Pi0gIENIQVIxNiAg ICAgICAgICAgICAgICAgICAgKlByb21wdFN0cjsNCj4+LQ0KPj4tICBpZiAoKFRoaXMgPT0gTlVM TCkgfHwgKFVzZXIgPT0gTlVMTCkpIHsNCj4+LSAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1F VEVSOw0KPj4tICB9DQo+Pi0NCj4+LSAgLy8NCj4+LSAgLy8gR2V0IFVzZXIgSWRlbnRpZmllci4N Cj4+LSAgLy8NCj4+LSAgVXNlckluZm8gPSBOVUxMOw0KPj4tICBTdGF0dXMgPSBGaW5kVXNlcklu Zm9CeVR5cGUgKA0KPj4tICAgICAgICAgICAgIFVzZXIsDQo+Pi0gICAgICAgICAgICAgRUZJX1VT RVJfSU5GT19JREVOVElGSUVSX1JFQ09SRCwNCj4+LSAgICAgICAgICAgICAmVXNlckluZm8NCj4+ LSAgICAgICAgICAgICApOw0KPj4tICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+Pi0gICAg cmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4+LSAgfQ0KPj4tDQo+Pi0gIENvcHlNZW0g KFB3ZEluZm8uVXNlcklkLCAoVUlOVDggKikgKFVzZXJJbmZvICsgMSksIHNpemVvZg0KPj4oRUZJ X1VTRVJfSU5GT19JREVOVElGSUVSKSk7DQo+Pi0gIEZyZWVQb29sIChVc2VySW5mbyk7DQo+Pi0N Cj4+LSAgLy8NCj4+LSAgLy8gR2V0IHBhc3N3b3JkIGZyb20gdXNlci4NCj4+LSAgLy8NCj4+LSAg d2hpbGUgKFRSVUUpIHsNCj4+LSAgICAvLw0KPj4tICAgIC8vIElucHV0IHBhc3N3b3JkLg0KPj4t ICAgIC8vDQo+Pi0gICAgR2V0UGFzc3dvcmQgKFRSVUUsIFB3ZEluZm8uUGFzc3dvcmQpOw0KPj4t DQo+Pi0gICAgLy8NCj4+LSAgICAvLyBJbnB1dCBwYXNzd29yZCBhZ2Fpbi4NCj4+LSAgICAvLw0K Pj4tICAgIEdldFBhc3N3b3JkIChGQUxTRSwgUGFzc3dvcmQpOw0KPj4tDQo+Pi0gICAgLy8NCj4+ LSAgICAvLyBDb21wYXJlIHRoZSB0d28gcGFzc3dvcmQgY29uc2lzdGVuY3kuDQo+Pi0gICAgLy8N Cj4+LSAgICBpZiAoQ29tcGFyZU1lbSAoUHdkSW5mby5QYXNzd29yZCwgUGFzc3dvcmQsIENSRURF TlRJQUxfTEVOKSA9PSAwKQ0KPnsNCj4+LSAgICAgIGJyZWFrOw0KPj4tICAgIH0NCj4+LQ0KPj4t ICAgIFF1ZXN0aW9uU3RyID0gR2V0U3RyaW5nQnlJZCAoU1RSSU5HX1RPS0VODQo+PihTVFJfUEFT U1dPUkRfTUlTTUFUQ0gpKTsNCj4+LSAgICBQcm9tcHRTdHIgICA9IEdldFN0cmluZ0J5SWQgKFNU UklOR19UT0tFTg0KPj4oU1RSX0lOUFVUX1BBU1NXT1JEX0FHQUlOKSk7DQo+Pi0gICAgQ3JlYXRl UG9wVXAgKA0KPj4tICAgICAgRUZJX0xJR0hUR1JBWSB8IEVGSV9CQUNLR1JPVU5EX0JMVUUsDQo+ Pi0gICAgICAmS2V5LA0KPj4tICAgICAgUXVlc3Rpb25TdHIsDQo+Pi0gICAgICBMIiIsDQo+Pi0g ICAgICBQcm9tcHRTdHIsDQo+Pi0gICAgICBOVUxMDQo+Pi0gICAgICApOw0KPj4tICAgIEZyZWVQ b29sIChRdWVzdGlvblN0cik7DQo+Pi0gICAgRnJlZVBvb2wgKFByb21wdFN0cik7DQo+Pi0gIH0N Cj4+LQ0KPj4tICAvLw0KPj4tICAvLyBDaGVjayB3aGV0aGVyIFVzZXIgaXMgZXZlciBlbnJvbGxl ZCBpbiB0aGUgcHJvdmlkZXIuDQo+Pi0gIC8vDQo+Pi0gIGZvciAoSW5kZXggPSAwOyBJbmRleCA8 IG1Qd2RUYWJsZS0+Q291bnQ7IEluZGV4KyspIHsNCj4+LSAgICBVc2VySWQgPSAoVUlOVDggKikg Jm1Qd2RUYWJsZS0+VXNlckluZm9bSW5kZXhdLlVzZXJJZDsNCj4+LSAgICBpZiAoQ29tcGFyZU1l bSAoVXNlcklkLCAoVUlOVDggKikgJlB3ZEluZm8uVXNlcklkLCBzaXplb2YNCj4+KEVGSV9VU0VS X0lORk9fSURFTlRJRklFUikpID09IDApIHsNCj4+LSAgICAgIC8vDQo+Pi0gICAgICAvLyBVc2Vy IGFscmVhZHkgZXhpc3RzLCB1cGRhdGUgdGhlIHBhc3N3b3JkLg0KPj4tICAgICAgLy8NCj4+LSAg ICAgIGJyZWFrOw0KPj4tICAgIH0NCj4+LSAgfQ0KPj4tDQo+Pi0gIC8vDQo+Pi0gIC8vIEVucm9s bCB0aGUgVXNlciB0byB0aGUgcHJvdmlkZXIuDQo+Pi0gIC8vDQo+Pi0gIFN0YXR1cyA9IE1vZGlm eVRhYmxlIChJbmRleCwgJlB3ZEluZm8pOw0KPj4tICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7 DQo+Pi0gICAgcmV0dXJuIFN0YXR1czsNCj4+LSAgfQ0KPj4tDQo+Pi0gIHJldHVybiBFRklfU1VD Q0VTUzsNCj4+LX0NCj4+LQ0KPj4tDQo+Pi0vKioNCj4+LSAgUmV0dXJucyB0aGUgdXNlciBpbnRl cmZhY2UgaW5mb3JtYXRpb24gdXNlZCBkdXJpbmcgdXNlciBpZGVudGlmaWNhdGlvbi4NCj4+LQ0K Pj4tICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGZvcm0gdXNl ZCB3aGVuIGludGVyYWN0aW5nDQo+PndpdGggdGhlDQo+Pi0gIHVzZXIgZHVyaW5nIHVzZXIgaWRl bnRpZmljYXRpb24uIFRoZSBmb3JtIGlzIHRoZSBmaXJzdCBlbmFibGVkIGZvcm0gaW4gdGhlDQo+ PmZvcm0tc2V0DQo+Pi0gIGNsYXNzIEVGSV9ISUlfVVNFUl9DUkVERU5USUFMX0ZPUk1TRVRfR1VJ RCBpbnN0YWxsZWQgb24gdGhlIEhJSQ0KPj5oYW5kbGUgSGlpSGFuZGxlLiBJZg0KPj4tICB0aGUg dXNlciBjcmVkZW50aWFsIHByb3ZpZGVyIGRvZXMgbm90IHJlcXVpcmUgYSBmb3JtIHRvIGlkZW50 aWZ5IHRoZSB1c2VyLA0KPj50aGVuIHRoaXMNCj4+LSAgZnVuY3Rpb24gc2hvdWxkIHJldHVybiBF RklfTk9UX0ZPVU5ELg0KPj4tDQo+Pi0gIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgUG9pbnRzIHRv IHRoaXMgaW5zdGFuY2Ugb2YgdGhlDQo+PkVGSV9VU0VSX0NSRURFTlRJQUwyX1BST1RPQ09MLg0K Pj4tICBAcGFyYW1bb3V0XSBIaWkgICAgICAgIE9uIHJldHVybiwgaG9sZHMgdGhlIEhJSSBkYXRh YmFzZSBoYW5kbGUuDQo+Pi0gIEBwYXJhbVtvdXRdIEZvcm1TZXRJZCAgT24gcmV0dXJuLCBob2xk cyB0aGUgaWRlbnRpZmllciBvZiB0aGUgZm9ybSBzZXQNCj4+d2hpY2ggY29udGFpbnMNCj4+LSAg ICAgICAgICAgICAgICAgICAgICAgICB0aGUgZm9ybSB1c2VkIGR1cmluZyB1c2VyIGlkZW50aWZp Y2F0aW9uLg0KPj4tICBAcGFyYW1bb3V0XSBGb3JtSWQgICAgIE9uIHJldHVybiwgaG9sZHMgdGhl IGlkZW50aWZpZXIgb2YgdGhlIGZvcm0gdXNlZA0KPj5kdXJpbmcgdXNlcg0KPj4tICAgICAgICAg ICAgICAgICAgICAgICAgIGlkZW50aWZpY2F0aW9uLg0KPj4tDQo+Pi0gIEByZXR2YWwgRUZJX1NV Q0NFU1MgICAgICAgICAgICBGb3JtIHJldHVybmVkIHN1Y2Nlc3NmdWxseS4NCj4+LSAgQHJldHZh bCBFRklfTk9UX0ZPVU5EICAgICAgICAgIEZvcm0gbm90IHJldHVybmVkLg0KPj4tICBAcmV0dmFs IEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgSGlpIGlzIE5VTEwgb3IgRm9ybVNldElkIGlzIE5VTEwg b3INCj4+Rm9ybUlkIGlzIE5VTEwuDQo+Pi0NCj4+LSoqLw0KPj4tRUZJX1NUQVRVUw0KPj4tRUZJ QVBJDQo+Pi1DcmVkZW50aWFsRm9ybSAoDQo+Pi0gIElOIENPTlNUICBFRklfVVNFUl9DUkVERU5U SUFMMl9QUk9UT0NPTCAgICAgICAqVGhpcywNCj4+LSAgT1VUICAgICAgIEVGSV9ISUlfSEFORExF ICAgICAgICAgICAgICAgICAgICAgICpIaWksDQo+Pi0gIE9VVCAgICAgICBFRklfR1VJRCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAqRm9ybVNldElkLA0KPj4tICBPVVQgICAgICAgRUZJX0ZP Uk1fSUQgICAgICAgICAgICAgICAgICAgICAgICAgKkZvcm1JZA0KPj4tICApDQo+Pi17DQo+Pi0g IGlmICgoVGhpcyA9PSBOVUxMKSB8fCAoSGlpID09IE5VTEwpIHx8DQo+Pi0gICAgICAoRm9ybVNl dElkID09IE5VTEwpIHx8IChGb3JtSWQgPT0gTlVMTCkpIHsNCj4+LSAgICByZXR1cm4gRUZJX0lO VkFMSURfUEFSQU1FVEVSOw0KPj4tICB9DQo+Pi0NCj4+LSAgKkhpaSAgICAgICA9IG1DYWxsYmFj a0luZm8tPkhpaUhhbmRsZTsNCj4+LSAgKkZvcm1JZCAgICA9IEZPUk1JRF9HRVRfUEFTU1dPUkRf Rk9STTsNCj4+LSAgQ29weUd1aWQgKEZvcm1TZXRJZCwgJmdQd2RDcmVkZW50aWFsUHJvdmlkZXJH dWlkKTsNCj4+LQ0KPj4tICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+Pi19DQo+Pi0NCj4+LQ0KPj4t LyoqDQo+Pi0gIFJldHVybnMgYml0bWFwIHVzZWQgdG8gZGVzY3JpYmUgdGhlIGNyZWRlbnRpYWwg cHJvdmlkZXIgdHlwZS4NCj4+LQ0KPj4tICBUaGlzIG9wdGlvbmFsIGZ1bmN0aW9uIHJldHVybnMg YSBiaXRtYXAgdGhhdCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlDQo+Pm51bWJlcg0KPj4t ICBvZiBwaXhlbHMgc3BlY2lmaWVkIGJ5IFdpZHRoIGFuZCBIZWlnaHQuIElmIG5vIHN1Y2ggYml0 bWFwIGV4aXN0cywgdGhlbg0KPj5FRklfTk9UX0ZPVU5EDQo+Pi0gIGlzIHJldHVybmVkLg0KPj4t DQo+Pi0gIEBwYXJhbVtpbl0gICAgICBUaGlzICAgIFBvaW50cyB0byB0aGlzIGluc3RhbmNlIG9m IHRoZQ0KPj5FRklfVVNFUl9DUkVERU5USUFMMl9QUk9UT0NPTC4NCj4+LSAgQHBhcmFtW2luLCBv dXRdIFdpZHRoICAgT24gZW50cnksIHBvaW50cyB0byB0aGUgZGVzaXJlZCBiaXRtYXAgd2lkdGgu IElmDQo+Pk5VTEwgdGhlbiBubw0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRtYXAg aW5mb3JtYXRpb24gd2lsbCBiZSByZXR1cm5lZC4gT24gZXhpdCwgcG9pbnRzIHRvIHRoZQ0KPj4t ICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCBvZiB0aGUgYml0bWFwIHJldHVybmVkLg0K Pj4tICBAcGFyYW1baW4sIG91dF0gSGVpZ2h0ICBPbiBlbnRyeSwgcG9pbnRzIHRvIHRoZSBkZXNp cmVkIGJpdG1hcCBoZWlnaHQuIElmDQo+Pk5VTEwgdGhlbiBubw0KPj4tICAgICAgICAgICAgICAg ICAgICAgICAgICBiaXRtYXAgaW5mb3JtYXRpb24gd2lsbCBiZSByZXR1cm5lZC4gT24gZXhpdCwg cG9pbnRzIHRvIHRoZQ0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQgb2YgdGhl IGJpdG1hcCByZXR1cm5lZA0KPj4tICBAcGFyYW1bb3V0XSAgICAgSGlpICAgICBPbiByZXR1cm4s IGhvbGRzIHRoZSBISUkgZGF0YWJhc2UgaGFuZGxlLg0KPj4tICBAcGFyYW1bb3V0XSAgICAgSW1h Z2UgICBPbiByZXR1cm4sIGhvbGRzIHRoZSBISUkgaW1hZ2UgaWRlbnRpZmllci4NCj4+LQ0KPj4t ICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgSW1hZ2UgaWRlbnRpZmllciByZXR1cm5l ZCBzdWNjZXNzZnVsbHkuDQo+Pi0gIEByZXR2YWwgRUZJX05PVF9GT1VORCAgICAgICAgICBJbWFn ZSBpZGVudGlmaWVyIG5vdCByZXR1cm5lZC4NCj4+LSAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJB TUVURVIgIEhpaSBpcyBOVUxMIG9yIEltYWdlIGlzIE5VTEwuDQo+Pi0NCj4+LSoqLw0KPj4tRUZJ X1NUQVRVUw0KPj4tRUZJQVBJDQo+Pi1DcmVkZW50aWFsVGlsZSAoDQo+Pi0gIElOICBDT05TVCAg RUZJX1VTRVJfQ1JFREVOVElBTDJfUFJPVE9DT0wgICAgICAgKlRoaXMsDQo+Pi0gIElOICBPVVQg ICAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKldpZHRoLA0KPj4tICBJTiAg T1VUICAgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpIZWlnaHQsDQo+Pi0g ICAgICBPVVQgICAgRUZJX0hJSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgICAgKkhpaSwNCj4+ LSAgICAgIE9VVCAgICBFRklfSU1BR0VfSUQgICAgICAgICAgICAgICAgICAgICAgICAqSW1hZ2UN Cj4+LSAgKQ0KPj4tew0KPj4tICBpZiAoKFRoaXMgPT0gTlVMTCkgfHwgKEhpaSA9PSBOVUxMKSB8 fCAoSW1hZ2UgPT0gTlVMTCkpIHsNCj4+LSAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVS Ow0KPj4tICB9DQo+Pi0gIHJldHVybiBFRklfTk9UX0ZPVU5EOw0KPj4tfQ0KPj4tDQo+Pi0NCj4+ LS8qKg0KPj4tICBSZXR1cm5zIHN0cmluZyB1c2VkIHRvIGRlc2NyaWJlIHRoZSBjcmVkZW50aWFs IHByb3ZpZGVyIHR5cGUuDQo+Pi0NCj4+LSAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgc3RyaW5n IHdoaWNoIGRlc2NyaWJlcyB0aGUgY3JlZGVudGlhbCBwcm92aWRlci4gSWYgbm8NCj4+LSAgc3Vj aCBzdHJpbmcgZXhpc3RzLCB0aGVuIEVGSV9OT1RfRk9VTkQgaXMgcmV0dXJuZWQuDQo+Pi0NCj4+ LSAgQHBhcmFtW2luXSAgVGhpcyAgICAgICBQb2ludHMgdG8gdGhpcyBpbnN0YW5jZSBvZiB0aGUN Cj4+RUZJX1VTRVJfQ1JFREVOVElBTDJfUFJPVE9DT0wuDQo+Pi0gIEBwYXJhbVtvdXRdIEhpaSAg ICAgICAgT24gcmV0dXJuLCBob2xkcyB0aGUgSElJIGRhdGFiYXNlIGhhbmRsZS4NCj4+LSAgQHBh cmFtW291dF0gU3RyaW5nICAgICBPbiByZXR1cm4sIGhvbGRzIHRoZSBISUkgc3RyaW5nIGlkZW50 aWZpZXIuDQo+Pi0NCj4+LSAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgIFN0cmluZyBp ZGVudGlmaWVyIHJldHVybmVkIHN1Y2Nlc3NmdWxseS4NCj4+LSAgQHJldHZhbCBFRklfTk9UX0ZP VU5EICAgICAgICAgIFN0cmluZyBpZGVudGlmaWVyIG5vdCByZXR1cm5lZC4NCj4+LSAgQHJldHZh bCBFRklfSU5WQUxJRF9QQVJBTUVURVIgIEhpaSBpcyBOVUxMIG9yIFN0cmluZyBpcyBOVUxMLg0K Pj4tDQo+Pi0qKi8NCj4+LUVGSV9TVEFUVVMNCj4+LUVGSUFQSQ0KPj4tQ3JlZGVudGlhbFRpdGxl ICgNCj4+LSAgSU4gQ09OU1QgIEVGSV9VU0VSX0NSRURFTlRJQUwyX1BST1RPQ09MICAgICAgICpU aGlzLA0KPj4tICBPVVQgICAgICAgRUZJX0hJSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgICAg KkhpaSwNCj4+LSAgT1VUICAgICAgIEVGSV9TVFJJTkdfSUQgICAgICAgICAgICAgICAgICAgICAg ICpTdHJpbmcNCj4+LSAgKQ0KPj4tew0KPj4tICBpZiAoKFRoaXMgPT0gTlVMTCkgfHwgKEhpaSA9 PSBOVUxMKSB8fCAoU3RyaW5nID09IE5VTEwpKSB7DQo+Pi0gICAgcmV0dXJuIEVGSV9JTlZBTElE X1BBUkFNRVRFUjsNCj4+LSAgfQ0KPj4tDQo+Pi0gIC8vDQo+Pi0gIC8vIFNldCBIaWkgaGFuZGxl IGFuZCBTdHJpbmcgSUQuDQo+Pi0gIC8vDQo+Pi0gICpIaWkgICAgPSBtQ2FsbGJhY2tJbmZvLT5I aWlIYW5kbGU7DQo+Pi0gICpTdHJpbmcgPSBTVFJJTkdfVE9LRU4gKFNUUl9DUkVERU5USUFMX1RJ VExFKTsNCj4+LQ0KPj4tICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+Pi19DQo+Pi0NCj4+LQ0KPj4t LyoqDQo+Pi0gIFJldHVybiB0aGUgdXNlciBpZGVudGlmaWVyIGFzc29jaWF0ZWQgd2l0aCB0aGUg Y3VycmVudGx5IGF1dGhlbnRpY2F0ZWQgdXNlci4NCj4+LQ0KPj4tICBUaGlzIGZ1bmN0aW9uIHJl dHVybnMgdGhlIHVzZXIgaWRlbnRpZmllciBvZiB0aGUgdXNlciBhdXRoZW50aWNhdGVkIGJ5IHRo aXMNCj4+Y3JlZGVudGlhbA0KPj4tICBwcm92aWRlci4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQg YWZ0ZXIgdGhlIGNyZWRlbnRpYWwtcmVsYXRlZCBpbmZvcm1hdGlvbiBoYXMNCj4+YmVlbg0KPj4t ICBzdWJtaXR0ZWQgb24gYSBmb3JtLCBPUiBhZnRlciBhIGNhbGwgdG8gRGVmYXVsdCgpIGhhcyBy ZXR1cm5lZCB0aGF0IHRoaXMNCj4+Y3JlZGVudGlhbCBpcw0KPj4tICByZWFkeSB0byBsb2cgb24u DQo+Pi0NCj4+LSAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAgICAgUG9pbnRzIHRvIHRoaXMgaW5z dGFuY2Ugb2YgdGhlDQo+PkVGSV9VU0VSX0NSRURFTlRJQUwyX1BST1RPQ09MLg0KPj4tICBAcGFy YW1baW5dICBVc2VyICAgICAgICAgICBUaGUgdXNlciBwcm9maWxlIGhhbmRsZSBvZiB0aGUgdXNl ciBwcm9maWxlIGN1cnJlbnRseQ0KPj5iZWluZw0KPj4tICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zaWRlcmVkIGJ5IHRoZSB1c2VyIGlkZW50aXR5IG1hbmFnZXIuIElmIE5VTEwsIHRo ZW4gbm8NCj51c2VyDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2ZpbGUgaXMg Y3VycmVudGx5IHVuZGVyIGNvbnNpZGVyYXRpb24uDQo+Pi0gIEBwYXJhbVtvdXRdIElkZW50aWZp ZXIgICAgIE9uIHJldHVybiwgcG9pbnRzIHRvIHRoZSB1c2VyIGlkZW50aWZpZXIuDQo+Pi0NCj4+ LSAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgIFVzZXIgaWRlbnRpZmllciByZXR1cm5l ZCBzdWNjZXNzZnVsbHkuDQo+Pi0gIEByZXR2YWwgRUZJX05PVF9SRUFEWSAgICAgICAgICBObyB1 c2VyIGlkZW50aWZpZXIgY2FuIGJlIHJldHVybmVkLg0KPj4tICBAcmV0dmFsIEVGSV9BQ0NFU1Nf REVOSUVEICAgICAgVGhlIHVzZXIgaGFzIGJlZW4gbG9ja2VkIG91dCBvZiB0aGlzIHVzZXINCj4+ Y3JlZGVudGlhbC4NCj4+LSAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgIFRoaXMgaXMg TlVMTCwgb3IgSWRlbnRpZmllciBpcyBOVUxMLg0KPj4tICBAcmV0dmFsIEVGSV9OT1RfRk9VTkQg ICAgICAgICAgVXNlciBpcyBub3QgTlVMTCwgYW5kIHRoZSBzcGVjaWZpZWQgdXNlcg0KPj5oYW5k bGUgY2FuJ3QgYmUNCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kIGlu IHVzZXIgcHJvZmlsZSBkYXRhYmFzZQ0KPj4tDQo+Pi0qKi8NCj4+LUVGSV9TVEFUVVMNCj4+LUVG SUFQSQ0KPj4tQ3JlZGVudGlhbFVzZXIgKA0KPj4tICBJTiBDT05TVCAgRUZJX1VTRVJfQ1JFREVO VElBTDJfUFJPVE9DT0wgICAgICAgKlRoaXMsDQo+Pi0gIElOICAgICAgICBFRklfVVNFUl9QUk9G SUxFX0hBTkRMRSAgICAgICAgICAgICBVc2VyLA0KPj4tICBPVVQgICAgICAgRUZJX1VTRVJfSU5G T19JREVOVElGSUVSICAgICAgICAgICAgKklkZW50aWZpZXINCj4+LSAgKQ0KPj4tew0KPj4tICBF RklfU1RBVFVTICAgIFN0YXR1czsNCj4+LSAgVUlOVE4gICAgICAgICBJbmRleDsNCj4+LSAgRUZJ X1VTRVJfSU5GTyAqVXNlckluZm87DQo+Pi0gIFVJTlQ4ICAgICAgICAgKlVzZXJJZDsNCj4+LSAg VUlOVDggICAgICAgICAqTmV3VXNlcklkOw0KPj4tICBDSEFSOCAgICAgICAgICpQd2Q7DQo+Pi0g IENIQVI4ICAgICAgICAgKk5ld1B3ZDsNCj4+LQ0KPj4tICBpZiAoKFRoaXMgPT0gTlVMTCkgfHwg KElkZW50aWZpZXIgPT0gTlVMTCkpIHsNCj4+LSAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1F VEVSOw0KPj4tICB9DQo+Pi0NCj4+LSAgaWYgKG1Qd2RUYWJsZS0+VmFsaWRJbmRleCA9PSAwKSB7 DQo+Pi0gICAgLy8NCj4+LSAgICAvLyBObyBwYXNzd29yZCBpbnB1dCwgb3IgdGhlIGlucHV0IHBh c3N3b3JkIGRvZXNuJ3QgbWF0Y2gNCj4+LSAgICAvLyBhbnlvbmUgaW4gUHdkVGFibGUuDQo+Pi0g ICAgLy8NCj4+LSAgICByZXR1cm4gRUZJX05PVF9SRUFEWTsNCj4+LSAgfQ0KPj4tDQo+Pi0gIGlm IChVc2VyID09IE5VTEwpIHsNCj4+LSAgICAvLw0KPj4tICAgIC8vIFJldHVybiB0aGUgdXNlciBJ RCB3aG9zZSBwYXNzd29yZCBtYXRjaGVzIHRoZSBpbnB1dCBwYXNzd29yZC4NCj4+LSAgICAvLw0K Pj4tICAgIENvcHlNZW0gKA0KPj4tICAgICAgSWRlbnRpZmllciwNCj4+LSAgICAgICZtUHdkVGFi bGUtPlVzZXJJbmZvW21Qd2RUYWJsZS0+VmFsaWRJbmRleCAtIDFdLlVzZXJJZCwNCj4+LSAgICAg IHNpemVvZiAoRUZJX1VTRVJfSU5GT19JREVOVElGSUVSKQ0KPj4tICAgICAgKTsNCj4+LSAgICBy ZXR1cm4gRUZJX1NVQ0NFU1M7DQo+Pi0gIH0NCj4+LQ0KPj4tICAvLw0KPj4tICAvLyBHZXQgdGhl IFVzZXIncyBJRC4NCj4+LSAgLy8NCj4+LSAgU3RhdHVzID0gRmluZFVzZXJJbmZvQnlUeXBlICgN Cj4+LSAgICAgICAgICAgICBVc2VyLA0KPj4tICAgICAgICAgICAgIEVGSV9VU0VSX0lORk9fSURF TlRJRklFUl9SRUNPUkQsDQo+Pi0gICAgICAgICAgICAgJlVzZXJJbmZvDQo+Pi0gICAgICAgICAg ICAgKTsNCj4+LSAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPj4tICAgIHJldHVybiBFRklf Tk9UX0ZPVU5EOw0KPj4tICB9DQo+Pi0NCj4+LSAgLy8NCj4+LSAgLy8gQ2hlY2sgd2hldGhlciB0 aGUgaW5wdXQgcGFzc3dvcmQgbWF0Y2hlcyBvbmUgaW4gUHdkVGFibGUuDQo+Pi0gIC8vDQo+Pi0g IGZvciAoSW5kZXggPSAwOyBJbmRleCA8IG1Qd2RUYWJsZS0+Q291bnQ7IEluZGV4KyspIHsNCj4+ LSAgICBVc2VySWQgICAgPSAoVUlOVDggKikgJm1Qd2RUYWJsZS0+VXNlckluZm9bSW5kZXhdLlVz ZXJJZDsNCj4+LSAgICBOZXdVc2VySWQgPSAoVUlOVDggKikgKFVzZXJJbmZvICsgMSk7DQo+Pi0g ICAgaWYgKENvbXBhcmVNZW0gKFVzZXJJZCwgTmV3VXNlcklkLCBzaXplb2YNCj4oRUZJX1VTRVJf SU5GT19JREVOVElGSUVSKSkNCj4+PT0gMCkgew0KPj4tICAgICAgUHdkICAgID0gbVB3ZFRhYmxl LT5Vc2VySW5mb1tJbmRleF0uUGFzc3dvcmQ7DQo+Pi0gICAgICBOZXdQd2QgPSBtUHdkVGFibGUt PlVzZXJJbmZvW21Qd2RUYWJsZS0+VmFsaWRJbmRleCAtDQo+MV0uUGFzc3dvcmQ7DQo+Pi0gICAg ICBpZiAoQ29tcGFyZU1lbSAoUHdkLCBOZXdQd2QsIENSRURFTlRJQUxfTEVOKSA9PSAwKSB7DQo+ Pi0gICAgICAgIENvcHlNZW0gKElkZW50aWZpZXIsIFVzZXJJZCwgc2l6ZW9mIChFRklfVVNFUl9J TkZPX0lERU5USUZJRVIpKTsNCj4+LSAgICAgICAgRnJlZVBvb2wgKFVzZXJJbmZvKTsNCj4+LSAg ICAgICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPj4tICAgICAgfQ0KPj4tICAgIH0NCj4+LSAgfQ0K Pj4tDQo+Pi0gIEZyZWVQb29sIChVc2VySW5mbyk7DQo+Pi0gIHJldHVybiBFRklfTk9UX1JFQURZ Ow0KPj4tfQ0KPj4tDQo+Pi0NCj4+LS8qKg0KPj4tICBJbmRpY2F0ZSB0aGF0IHVzZXIgaW50ZXJm YWNlIGludGVyYWN0aW9uIGhhcyBiZWd1biBmb3IgdGhlIHNwZWNpZmllZA0KPj5jcmVkZW50aWFs Lg0KPj4tDQo+Pi0gIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYSBjcmVkZW50aWFsIHBy b3ZpZGVyIGlzIHNlbGVjdGVkIGJ5IHRoZSB1c2VyLiBJZg0KPj4tICBBdXRvTG9nb24gcmV0dXJu cyBGQUxTRSwgdGhlbiB0aGUgdXNlciBpbnRlcmZhY2Ugd2lsbCBiZSBjb25zdHJ1Y3RlZCBieQ0K PnRoZQ0KPj5Vc2VyDQo+Pi0gIElkZW50aXR5IE1hbmFnZXIuDQo+Pi0NCj4+LSAgQHBhcmFtW2lu XSAgVGhpcyAgICAgICBQb2ludHMgdG8gdGhpcyBpbnN0YW5jZSBvZiB0aGUNCj4+RUZJX1VTRVJf Q1JFREVOVElBTDJfUFJPVE9DT0wuDQo+Pi0gIEBwYXJhbVtvdXRdIEF1dG9Mb2dvbiAgT24gcmV0 dXJuLCBwb2ludHMgdG8gdGhlIGNyZWRlbnRpYWwgcHJvdmlkZXIncw0KPj5jYXBhYmlsaXRpZXMN Cj4+LSAgICAgICAgICAgICAgICAgICAgICAgICBhZnRlciB0aGUgY3JlZGVudGlhbCBwcm92aWRl ciBoYXMgYmVlbiBzZWxlY3RlZCBieSB0aGUgdXNlci4NCj4+LQ0KPj4tICBAcmV0dmFsIEVGSV9T VUNDRVNTICAgICAgICAgICAgQ3JlZGVudGlhbCBwcm92aWRlciBzdWNjZXNzZnVsbHkgc2VsZWN0 ZWQuDQo+Pi0gIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICBBdXRvTG9nb24gaXMgTlVM TC4NCj4+LQ0KPj4tKiovDQo+Pi1FRklfU1RBVFVTDQo+Pi1FRklBUEkNCj4+LUNyZWRlbnRpYWxT ZWxlY3QgKA0KPj4tICBJTiAgQ09OU1QgIEVGSV9VU0VSX0NSRURFTlRJQUwyX1BST1RPQ09MICAg KlRoaXMsDQo+Pi0gIE9VVCAgICAgICAgRUZJX0NSRURFTlRJQUxfTE9HT05fRkxBR1MgICAgICAq QXV0b0xvZ29uDQo+Pi0gICkNCj4+LXsNCj4+LSAgaWYgKChUaGlzID09IE5VTEwpIHx8IChBdXRv TG9nb24gPT0gTlVMTCkpIHsNCj4+LSAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0K Pj4tICB9DQo+Pi0gICpBdXRvTG9nb24gPSAwOw0KPj4tDQo+Pi0gIHJldHVybiBFRklfU1VDQ0VT UzsNCj4+LX0NCj4+LQ0KPj4tDQo+Pi0vKioNCj4+LSAgSW5kaWNhdGUgdGhhdCB1c2VyIGludGVy ZmFjZSBpbnRlcmFjdGlvbiBoYXMgZW5kZWQgZm9yIHRoZSBzcGVjaWZpZWQNCj4+Y3JlZGVudGlh bC4NCj4+LQ0KPj4tICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGEgY3JlZGVudGlhbCBw cm92aWRlciBpcyBkZXNlbGVjdGVkIGJ5IHRoZSB1c2VyLg0KPj4tDQo+Pi0gIEBwYXJhbVtpbl0g VGhpcyAgICAgICAgUG9pbnRzIHRvIHRoaXMgaW5zdGFuY2Ugb2YgdGhlDQo+PkVGSV9VU0VSX0NS RURFTlRJQUwyX1BST1RPQ09MLg0KPj4tDQo+Pi0gIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgQ3Jl ZGVudGlhbCBwcm92aWRlciBzdWNjZXNzZnVsbHkgZGVzZWxlY3RlZC4NCj4+LQ0KPj4tKiovDQo+ Pi1FRklfU1RBVFVTDQo+Pi1FRklBUEkNCj4+LUNyZWRlbnRpYWxEZXNlbGVjdCAoDQo+Pi0gIElO IENPTlNUICBFRklfVVNFUl9DUkVERU5USUFMMl9QUk9UT0NPTCAgICAgICAqVGhpcw0KPj4tICAp DQo+Pi17DQo+Pi0gIGlmIChUaGlzID09IE5VTEwpIHsNCj4+LSAgICByZXR1cm4gRUZJX0lOVkFM SURfUEFSQU1FVEVSOw0KPj4tICB9DQo+Pi0gIHJldHVybiBFRklfU1VDQ0VTUzsNCj4+LX0NCj4+ LQ0KPj4tDQo+Pi0vKioNCj4+LSAgUmV0dXJuIHRoZSBkZWZhdWx0IGxvZ29uIGJlaGF2aW9yIGZv ciB0aGlzIHVzZXIgY3JlZGVudGlhbC4NCj4+LQ0KPj4tICBUaGlzIGZ1bmN0aW9uIHJlcG9ydHMg dGhlIGRlZmF1bHQgbG9naW4gYmVoYXZpb3IgcmVnYXJkaW5nIHRoaXMgY3JlZGVudGlhbA0KPj5w cm92aWRlci4NCj4+LQ0KPj4tICBAcGFyYW1baW5dICBUaGlzICAgICAgIFBvaW50cyB0byB0aGlz IGluc3RhbmNlIG9mIHRoZQ0KPj5FRklfVVNFUl9DUkVERU5USUFMMl9QUk9UT0NPTC4NCj4+LSAg QHBhcmFtW291dF0gQXV0b0xvZ29uICBPbiByZXR1cm4sIGhvbGRzIHdoZXRoZXIgdGhlIGNyZWRl bnRpYWwNCj5wcm92aWRlcg0KPj5zaG91bGQgYmUgdXNlZA0KPj4tICAgICAgICAgICAgICAgICAg ICAgICAgIGJ5IGRlZmF1bHQgdG8gYXV0b21hdGljYWxseSBsb2cgb24gdGhlIHVzZXIuDQo+Pi0N Cj4+LSAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgIERlZmF1bHQgaW5mb3JtYXRpb24g c3VjY2Vzc2Z1bGx5IHJldHVybmVkLg0KPj4tICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRF UiAgQXV0b0xvZ29uIGlzIE5VTEwuDQo+Pi0NCj4+LSoqLw0KPj4tRUZJX1NUQVRVUw0KPj4tRUZJ QVBJDQo+Pi1DcmVkZW50aWFsRGVmYXVsdCAoDQo+Pi0gIElOIENPTlNUICBFRklfVVNFUl9DUkVE RU5USUFMMl9QUk9UT0NPTCAgICAgICAqVGhpcywNCj4+LSAgT1VUICAgICAgIEVGSV9DUkVERU5U SUFMX0xPR09OX0ZMQUdTICAgICAgICAgICpBdXRvTG9nb24NCj4+LSAgKQ0KPj4tew0KPj4tICBp ZiAoKFRoaXMgPT0gTlVMTCkgfHwgKEF1dG9Mb2dvbiA9PSBOVUxMKSkgew0KPj4tICAgIHJldHVy biBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+Pi0gIH0NCj4+LSAgKkF1dG9Mb2dvbiA9IDA7DQo+ Pi0NCj4+LSAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPj4tfQ0KPj4tDQo+Pi0NCj4+LS8qKg0KPj4t ICBSZXR1cm4gaW5mb3JtYXRpb24gYXR0YWNoZWQgdG8gdGhlIGNyZWRlbnRpYWwgcHJvdmlkZXIu DQo+Pi0NCj4+LSAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHVzZXIgaW5mb3JtYXRpb24uDQo+Pi0N Cj4+LSAgQHBhcmFtW2luXSAgICAgIFRoaXMgICAgICAgICAgUG9pbnRzIHRvIHRoaXMgaW5zdGFu Y2Ugb2YgdGhlDQo+PkVGSV9VU0VSX0NSRURFTlRJQUwyX1BST1RPQ09MLg0KPj4tICBAcGFyYW1b aW5dICAgICAgVXNlckluZm8gICAgICBIYW5kbGUgb2YgdGhlIHVzZXIgaW5mb3JtYXRpb24gZGF0 YSByZWNvcmQuDQo+Pi0gIEBwYXJhbVtvdXRdICAgICBJbmZvICAgICAgICAgIE9uIGVudHJ5LCBw b2ludHMgdG8gYSBidWZmZXIgb2YgYXQgbGVhc3QgKkluZm9TaXplDQo+PmJ5dGVzLiBPbg0KPj4t ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGl0LCBob2xkcyB0aGUgdXNlciBpbmZv cm1hdGlvbi4gSWYgdGhlIGJ1ZmZlciBpcyB0b28gc21hbGwNCj4+LSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdG8gaG9sZCB0aGUgaW5mb3JtYXRpb24sIHRoZW4gRUZJX0JVRkZFUl9U T09fU01BTEwgaXMNCj4+cmV0dXJuZWQNCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgYW5kIEluZm9TaXplIGlzIHVwZGF0ZWQgdG8gY29udGFpbiB0aGUgbnVtYmVyIG9mIGJ5dGVz DQo+PmFjdHVhbGx5DQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVk Lg0KPj4tICBAcGFyYW1baW4sIG91dF0gSW5mb1NpemUgICAgICBPbiBlbnRyeSwgcG9pbnRzIHRv IHRoZSBzaXplIG9mIEluZm8uIE9uIHJldHVybiwNCj4+cG9pbnRzIHRvIHRoZQ0KPj4tICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplIG9mIHRoZSB1c2VyIGluZm9ybWF0aW9uLg0K Pj4tDQo+Pi0gIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIEluZm9ybWF0aW9uIHJldHVy bmVkIHN1Y2Nlc3NmdWxseS4NCj4+LSAgQHJldHZhbCBFRklfQlVGRkVSX1RPT19TTUFMTCAgVGhl IHNpemUgc3BlY2lmaWVkIGJ5IEluZm9TaXplIGlzIHRvbw0KPnNtYWxsDQo+PnRvIGhvbGQgYWxs IG9mIHRoZQ0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyIGluZm9ybWF0 aW9uLiBUaGUgc2l6ZSByZXF1aXJlZCBpcyByZXR1cm5lZCBpbiAqSW5mb1NpemUuDQo+Pi0gIEBy ZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIEluZm8gaXMgTlVMTCBvciBJbmZvU2l6ZSBpcyBO VUxMLg0KPj4tICBAcmV0dmFsIEVGSV9OT1RfRk9VTkQgICAgICAgICBUaGUgc3BlY2lmaWVkIFVz ZXJJbmZvIGRvZXMgbm90IHJlZmVyIHRvIGENCj4+dmFsaWQgdXNlciBpbmZvIGhhbmRsZS4NCj4+ LQ0KPj4tKiovDQo+Pi1FRklfU1RBVFVTDQo+Pi1FRklBUEkNCj4+LUNyZWRlbnRpYWxHZXRJbmZv ICgNCj4+LSAgSU4gQ09OU1QgIEVGSV9VU0VSX0NSRURFTlRJQUwyX1BST1RPQ09MICAgICAgICpU aGlzLA0KPj4tICBJTiAgICAgICAgRUZJX1VTRVJfSU5GT19IQU5ETEUgICAgICAgICAgICAgICAg VXNlckluZm8sDQo+Pi0gIE9VVCAgICAgICBFRklfVVNFUl9JTkZPICAgICAgICAgICAgICAgICAg ICAgICAqSW5mbywNCj4+LSAgSU4gT1VUICAgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICpJbmZvU2l6ZQ0KPj4tICApDQo+Pi17DQo+Pi0gIEVGSV9VU0VSX0lORk8gICAgICAg ICAgICAqQ3JlZGVudGlhbEluZm87DQo+Pi0gIFVJTlROICAgICAgICAgICAgICAgICAgICBJbmRl eDsNCj4+LQ0KPj4tICBpZiAoKFRoaXMgPT0gTlVMTCkgfHwgKEluZm9TaXplID09IE5VTEwpIHx8 IChJbmZvID09IE5VTEwpKSB7DQo+Pi0gICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsN Cj4+LSAgfQ0KPj4tDQo+Pi0gIGlmICgoVXNlckluZm8gPT0gTlVMTCkgfHwgKG1Qd2RJbmZvSGFu ZGxlID09IE5VTEwpKSB7DQo+Pi0gICAgcmV0dXJuIEVGSV9OT1RfRk9VTkQ7DQo+Pi0gIH0NCj4+ LQ0KPj4tICAvLw0KPj4tICAvLyBGaW5kIGluZm9ybWF0aW9uIGhhbmRsZSBpbiBjcmVkZW50aWFs IGluZm8gdGFibGUuDQo+Pi0gIC8vDQo+Pi0gIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IG1Qd2RJ bmZvSGFuZGxlLT5Db3VudDsgSW5kZXgrKykgew0KPj4tICAgIENyZWRlbnRpYWxJbmZvID0gbVB3 ZEluZm9IYW5kbGUtPkluZm9bSW5kZXhdOw0KPj4tICAgIGlmIChVc2VySW5mbyA9PSAoRUZJX1VT RVJfSU5GT19IQU5ETEUpQ3JlZGVudGlhbEluZm8pIHsNCj4+LSAgICAgIC8vDQo+Pi0gICAgICAv LyBUaGUgaGFuZGxlIGlzIGZvdW5kLCBjb3B5IHRoZSB1c2VyIGluZm8uDQo+Pi0gICAgICAvLw0K Pj4tICAgICAgaWYgKENyZWRlbnRpYWxJbmZvLT5JbmZvU2l6ZSA+ICpJbmZvU2l6ZSkgew0KPj4t ICAgICAgICAqSW5mb1NpemUgPSBDcmVkZW50aWFsSW5mby0+SW5mb1NpemU7DQo+Pi0gICAgICAg IHJldHVybiBFRklfQlVGRkVSX1RPT19TTUFMTDsNCj4+LSAgICAgIH0NCj4+LSAgICAgIENvcHlN ZW0gKEluZm8sIENyZWRlbnRpYWxJbmZvLCBDcmVkZW50aWFsSW5mby0+SW5mb1NpemUpOw0KPj4t ICAgICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPj4tICAgIH0NCj4+LSAgfQ0KPj4tDQo+Pi0gIHJl dHVybiBFRklfTk9UX0ZPVU5EOw0KPj4tfQ0KPj4tDQo+Pi0NCj4+LS8qKg0KPj4tICBFbnVtZXJh dGUgYWxsIG9mIHRoZSB1c2VyIGluZm9ybWF0aW9ucyBvbiB0aGUgY3JlZGVudGlhbCBwcm92aWRl ci4NCj4+LQ0KPj4tICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIG5leHQgdXNlciBpbmZvcm1h dGlvbiByZWNvcmQuIFRvIHJldHJpZXZlIHRoZSBmaXJzdA0KPj51c2VyDQo+Pi0gIGluZm9ybWF0 aW9uIHJlY29yZCBoYW5kbGUsIHBvaW50IFVzZXJJbmZvIGF0IGEgTlVMTC4gRWFjaCBzdWJzZXF1 ZW50IGNhbGwNCj4+d2lsbCByZXRyaWV2ZQ0KPj4tICBhbm90aGVyIHVzZXIgaW5mb3JtYXRpb24g cmVjb3JkIGhhbmRsZSB1bnRpbCB0aGVyZSBhcmUgbm8gbW9yZSwgYXQgd2hpY2gNCj4+cG9pbnQg VXNlckluZm8NCj4+LSAgd2lsbCBwb2ludCB0byBOVUxMLg0KPj4tDQo+Pi0gIEBwYXJhbVtpbl0g ICAgICBUaGlzICAgICBQb2ludHMgdG8gdGhpcyBpbnN0YW5jZSBvZiB0aGUNCj4+RUZJX1VTRVJf Q1JFREVOVElBTDJfUFJPVE9DT0wuDQo+Pi0gIEBwYXJhbVtpbiwgb3V0XSBVc2VySW5mbyBPbiBl bnRyeSwgcG9pbnRzIHRvIHRoZSBwcmV2aW91cyB1c2VyDQo+aW5mb3JtYXRpb24NCj4+aGFuZGxl IG9yIE5VTEwNCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHN0YXJ0IGVudW1lcmF0 aW9uLiBPbiBleGl0LCBwb2ludHMgdG8gdGhlIG5leHQgdXNlcg0KPj5pbmZvcm1hdGlvbg0KPj4t ICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlIG9yIE5VTEwgaWYgdGhlcmUgaXMgbm8g bW9yZSB1c2VyIGluZm9ybWF0aW9uLg0KPj4tDQo+Pi0gIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAg ICAgICAgICBVc2VyIGluZm9ybWF0aW9uIHJldHVybmVkLg0KPj4tICBAcmV0dmFsIEVGSV9OT1Rf Rk9VTkQgICAgICAgICAgTm8gbW9yZSB1c2VyIGluZm9ybWF0aW9uIGZvdW5kLg0KPj4tICBAcmV0 dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgVXNlckluZm8gaXMgTlVMTC4NCj4+LQ0KPj4tKiov DQo+Pi1FRklfU1RBVFVTDQo+Pi1FRklBUEkNCj4+LUNyZWRlbnRpYWxHZXROZXh0SW5mbyAoDQo+ Pi0gIElOIENPTlNUICBFRklfVVNFUl9DUkVERU5USUFMMl9QUk9UT0NPTCAgICAgICAqVGhpcywN Cj4+LSAgSU4gT1VUICAgIEVGSV9VU0VSX0lORk9fSEFORExFICAgICAgICAgICAgICAgICpVc2Vy SW5mbw0KPj4tICApDQo+Pi17DQo+Pi0gIEVGSV9VU0VSX0lORk8gICAgICAgICAgICAqSW5mbzsN Cj4+LSAgQ0hBUjE2ICAgICAgICAgICAgICAgICAgICpQcm92TmFtZVN0cjsNCj4+LSAgVUlOVE4g ICAgICAgICAgICAgICAgICAgIEluZm9MZW47DQo+Pi0gIFVJTlROICAgICAgICAgICAgICAgICAg ICBJbmRleDsNCj4+LSAgVUlOVE4gICAgICAgICAgICAgICAgICAgIFByb3ZTdHJMZW47DQo+Pi0N Cj4+LSAgaWYgKChUaGlzID09IE5VTEwpIHx8IChVc2VySW5mbyA9PSBOVUxMKSkgew0KPj4tICAg IHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+Pi0gIH0NCj4+LQ0KPj4tICBpZiAobVB3 ZEluZm9IYW5kbGUgPT0gTlVMTCkgew0KPj4tICAgIC8vDQo+Pi0gICAgLy8gSW5pdGlsaXplZCB1 c2VyIGluZm8gdGFibGUuIFRoZXJlIGFyZSA0IHVzZXIgaW5mbyByZWNvcmRzIGluIHRoZSB0YWJs ZS4NCj4+LSAgICAvLw0KPj4tICAgIEluZm9MZW4gID0gc2l6ZW9mIChQQVNTV09SRF9DUkVERU5U SUFMX0lORk8pICsgKDQgLSAxKSAqIHNpemVvZg0KPj4oRUZJX1VTRVJfSU5GTyAqKTsNCj4+LSAg ICBtUHdkSW5mb0hhbmRsZSA9IEFsbG9jYXRlWmVyb1Bvb2wgKEluZm9MZW4pOw0KPj4tICAgIGlm IChtUHdkSW5mb0hhbmRsZSA9PSBOVUxMKSB7DQo+Pi0gICAgICAqVXNlckluZm8gPSBOVUxMOw0K Pj4tICAgICAgcmV0dXJuIEVGSV9OT1RfRk9VTkQ7DQo+Pi0gICAgfQ0KPj4tDQo+Pi0gICAgLy8N Cj4+LSAgICAvLyBUaGUgZmlyc3QgaW5mb3JtYXRpb24sIENyZWRlbnRpYWwgUHJvdmlkZXIgaW5m by4NCj4+LSAgICAvLw0KPj4tICAgIEluZm9MZW4gPSBzaXplb2YgKEVGSV9VU0VSX0lORk8pICsg c2l6ZW9mIChFRklfR1VJRCk7DQo+Pi0gICAgSW5mbyAgICA9IEFsbG9jYXRlWmVyb1Bvb2wgKElu Zm9MZW4pOw0KPj4tICAgIEFTU0VSVCAoSW5mbyAhPSBOVUxMKTsNCj4+LQ0KPj4tICAgIEluZm8t PkluZm9UeXBlICAgID0gRUZJX1VTRVJfSU5GT19DUkVERU5USUFMX1BST1ZJREVSX1JFQ09SRDsN Cj4+LSAgICBJbmZvLT5JbmZvU2l6ZSAgICA9IChVSU5UMzIpIEluZm9MZW47DQo+Pi0gICAgSW5m by0+SW5mb0F0dHJpYnMgPSBFRklfVVNFUl9JTkZPX1BST1RFQ1RFRDsNCj4+LSAgICBDb3B5R3Vp ZCAoJkluZm8tPkNyZWRlbnRpYWwsICZnUHdkQ3JlZGVudGlhbFByb3ZpZGVyR3VpZCk7DQo+Pi0g ICAgQ29weUd1aWQgKChFRklfR1VJRCAqKShJbmZvICsgMSksICZnUHdkQ3JlZGVudGlhbFByb3Zp ZGVyR3VpZCk7DQo+Pi0NCj4+LSAgICBtUHdkSW5mb0hhbmRsZS0+SW5mb1swXSA9IEluZm87DQo+ Pi0gICAgbVB3ZEluZm9IYW5kbGUtPkNvdW50Kys7DQo+Pi0NCj4+LSAgICAvLw0KPj4tICAgIC8v IFRoZSBzZWNvbmQgaW5mb3JtYXRpb24sIENyZWRlbnRpYWwgUHJvdmlkZXIgbmFtZSBpbmZvLg0K Pj4tICAgIC8vDQo+Pi0gICAgUHJvdk5hbWVTdHIgPSBHZXRTdHJpbmdCeUlkIChTVFJJTkdfVE9L RU4gKFNUUl9QUk9WSURFUl9OQU1FKSk7DQo+Pi0gICAgUHJvdlN0ckxlbiAgPSBTdHJTaXplIChQ cm92TmFtZVN0cik7DQo+Pi0gICAgSW5mb0xlbiAgICAgPSBzaXplb2YgKEVGSV9VU0VSX0lORk8p ICsgUHJvdlN0ckxlbjsNCj4+LSAgICBJbmZvICAgICAgICA9IEFsbG9jYXRlWmVyb1Bvb2wgKElu Zm9MZW4pOw0KPj4tICAgIEFTU0VSVCAoSW5mbyAhPSBOVUxMKTsNCj4+LQ0KPj4tICAgIEluZm8t PkluZm9UeXBlICAgID0NCj4+RUZJX1VTRVJfSU5GT19DUkVERU5USUFMX1BST1ZJREVSX05BTUVf UkVDT1JEOw0KPj4tICAgIEluZm8tPkluZm9TaXplICAgID0gKFVJTlQzMikgSW5mb0xlbjsNCj4+ LSAgICBJbmZvLT5JbmZvQXR0cmlicyA9IEVGSV9VU0VSX0lORk9fUFJPVEVDVEVEOw0KPj4tICAg IENvcHlHdWlkICgmSW5mby0+Q3JlZGVudGlhbCwgJmdQd2RDcmVkZW50aWFsUHJvdmlkZXJHdWlk KTsNCj4+LSAgICBDb3B5TWVtICgoVUlOVDgqKShJbmZvICsgMSksIFByb3ZOYW1lU3RyLCBQcm92 U3RyTGVuKTsNCj4+LSAgICBGcmVlUG9vbCAoUHJvdk5hbWVTdHIpOw0KPj4tDQo+Pi0gICAgbVB3 ZEluZm9IYW5kbGUtPkluZm9bMV0gPSBJbmZvOw0KPj4tICAgIG1Qd2RJbmZvSGFuZGxlLT5Db3Vu dCsrOw0KPj4tDQo+Pi0gICAgLy8NCj4+LSAgICAvLyBUaGUgdGhpcmQgaW5mb3JtYXRpb24sIENy ZWRlbnRpYWwgUHJvdmlkZXIgdHlwZSBpbmZvLg0KPj4tICAgIC8vDQo+Pi0gICAgSW5mb0xlbiA9 IHNpemVvZiAoRUZJX1VTRVJfSU5GTykgKyBzaXplb2YgKEVGSV9HVUlEKTsNCj4+LSAgICBJbmZv ICAgID0gQWxsb2NhdGVaZXJvUG9vbCAoSW5mb0xlbik7DQo+Pi0gICAgQVNTRVJUIChJbmZvICE9 IE5VTEwpOw0KPj4tDQo+Pi0gICAgSW5mby0+SW5mb1R5cGUgICAgPSBFRklfVVNFUl9JTkZPX0NS RURFTlRJQUxfVFlQRV9SRUNPUkQ7DQo+Pi0gICAgSW5mby0+SW5mb1NpemUgICAgPSAoVUlOVDMy KSBJbmZvTGVuOw0KPj4tICAgIEluZm8tPkluZm9BdHRyaWJzID0gRUZJX1VTRVJfSU5GT19QUk9U RUNURUQ7DQo+Pi0gICAgQ29weUd1aWQgKCZJbmZvLT5DcmVkZW50aWFsLCAmZ1B3ZENyZWRlbnRp YWxQcm92aWRlckd1aWQpOw0KPj4tICAgIENvcHlHdWlkICgoRUZJX0dVSUQgKikoSW5mbyArIDEp LA0KPiZnRWZpVXNlckNyZWRlbnRpYWxDbGFzc1Bhc3N3b3JkR3VpZCk7DQo+Pi0NCj4+LSAgICBt UHdkSW5mb0hhbmRsZS0+SW5mb1syXSA9IEluZm87DQo+Pi0gICAgbVB3ZEluZm9IYW5kbGUtPkNv dW50Kys7DQo+Pi0NCj4+LSAgICAvLw0KPj4tICAgIC8vIFRoZSBmb3VydGggaW5mb3JtYXRpb24s IENyZWRlbnRpYWwgUHJvdmlkZXIgdHlwZSBuYW1lIGluZm8uDQo+Pi0gICAgLy8NCj4+LSAgICBQ cm92TmFtZVN0ciA9IEdldFN0cmluZ0J5SWQgKFNUUklOR19UT0tFTg0KPj4oU1RSX1BST1ZJREVS X1RZUEVfTkFNRSkpOw0KPj4tICAgIFByb3ZTdHJMZW4gID0gU3RyU2l6ZSAoUHJvdk5hbWVTdHIp Ow0KPj4tICAgIEluZm9MZW4gICAgID0gc2l6ZW9mIChFRklfVVNFUl9JTkZPKSArIFByb3ZTdHJM ZW47DQo+Pi0gICAgSW5mbyAgICAgICAgPSBBbGxvY2F0ZVplcm9Qb29sIChJbmZvTGVuKTsNCj4+ LSAgICBBU1NFUlQgKEluZm8gIT0gTlVMTCk7DQo+Pi0NCj4+LSAgICBJbmZvLT5JbmZvVHlwZSAg ICA9DQo+PkVGSV9VU0VSX0lORk9fQ1JFREVOVElBTF9QUk9WSURFUl9OQU1FX1JFQ09SRDsNCj4+ LSAgICBJbmZvLT5JbmZvU2l6ZSAgICA9IChVSU5UMzIpIEluZm9MZW47DQo+Pi0gICAgSW5mby0+ SW5mb0F0dHJpYnMgPSBFRklfVVNFUl9JTkZPX1BST1RFQ1RFRDsNCj4+LSAgICBDb3B5R3VpZCAo JkluZm8tPkNyZWRlbnRpYWwsICZnUHdkQ3JlZGVudGlhbFByb3ZpZGVyR3VpZCk7DQo+Pi0gICAg Q29weU1lbSAoKFVJTlQ4KikoSW5mbyArIDEpLCBQcm92TmFtZVN0ciwgUHJvdlN0ckxlbik7DQo+ Pi0gICAgRnJlZVBvb2wgKFByb3ZOYW1lU3RyKTsNCj4+LQ0KPj4tICAgIG1Qd2RJbmZvSGFuZGxl LT5JbmZvWzNdID0gSW5mbzsNCj4+LSAgICBtUHdkSW5mb0hhbmRsZS0+Q291bnQrKzsNCj4+LSAg fQ0KPj4tDQo+Pi0gIGlmICgqVXNlckluZm8gPT0gTlVMTCkgew0KPj4tICAgIC8vDQo+Pi0gICAg Ly8gUmV0dXJuIHRoZSBmaXJzdCBpbmZvIGhhbmRsZS4NCj4+LSAgICAvLw0KPj4tICAgICpVc2Vy SW5mbyA9IChFRklfVVNFUl9JTkZPX0hBTkRMRSkgbVB3ZEluZm9IYW5kbGUtPkluZm9bMF07DQo+ Pi0gICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPj4tICB9DQo+Pi0NCj4+LSAgLy8NCj4+LSAgLy8g RmluZCBpbmZvcm1hdGlvbiBoYW5kbGUgaW4gY3JlZGVudGlhbCBpbmZvIHRhYmxlLg0KPj4tICAv Lw0KPj4tICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBtUHdkSW5mb0hhbmRsZS0+Q291bnQ7IElu ZGV4KyspIHsNCj4+LSAgICBJbmZvID0gbVB3ZEluZm9IYW5kbGUtPkluZm9bSW5kZXhdOw0KPj4t ICAgIGlmICgqVXNlckluZm8gPT0gKEVGSV9VU0VSX0lORk9fSEFORExFKUluZm8pIHsNCj4+LSAg ICAgIC8vDQo+Pi0gICAgICAvLyBUaGUgaGFuZGxlIGlzIGZvdW5kLCBnZXQgdGhlIG5leHQgb25l Lg0KPj4tICAgICAgLy8NCj4+LSAgICAgIGlmIChJbmRleCA9PSBtUHdkSW5mb0hhbmRsZS0+Q291 bnQgLSAxKSB7DQo+Pi0gICAgICAgIC8vDQo+Pi0gICAgICAgIC8vIEFscmVhZHkgbGFzdCBvbmUu DQo+Pi0gICAgICAgIC8vDQo+Pi0gICAgICAgICpVc2VySW5mbyA9IE5VTEw7DQo+Pi0gICAgICAg IHJldHVybiBFRklfTk9UX0ZPVU5EOw0KPj4tICAgICAgfQ0KPj4tDQo+Pi0gICAgICBJbmRleCsr Ow0KPj4tICAgICAgKlVzZXJJbmZvID0gKEVGSV9VU0VSX0lORk9fSEFORExFKW1Qd2RJbmZvSGFu ZGxlLT5JbmZvW0luZGV4XTsNCj4+LSAgICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4+LSAgICB9 DQo+Pi0gIH0NCj4+LQ0KPj4tICAqVXNlckluZm8gPSBOVUxMOw0KPj4tICByZXR1cm4gRUZJX05P VF9GT1VORDsNCj4+LX0NCj4+LQ0KPj4tLyoqDQo+Pi0gIERlbGV0ZSBhIHVzZXIgb24gdGhpcyBj cmVkZW50aWFsIHByb3ZpZGVyLg0KPj4tDQo+Pi0gIFRoaXMgZnVuY3Rpb24gZGVsZXRlcyBhIHVz ZXIgb24gdGhpcyBjcmVkZW50aWFsIHByb3ZpZGVyLg0KPj4tDQo+Pi0gIEBwYXJhbVtpbl0gICAg IFRoaXMgICAgICAgICAgICBQb2ludHMgdG8gdGhpcyBpbnN0YW5jZSBvZiB0aGUNCj4+RUZJX1VT RVJfQ1JFREVOVElBTDJfUFJPVE9DT0wuDQo+Pi0gIEBwYXJhbVtpbl0gICAgIFVzZXIgICAgICAg ICAgICBUaGUgdXNlciBwcm9maWxlIGhhbmRsZSB0byBkZWxldGUuDQo+Pi0NCj4+LSAgQHJldHZh bCBFRklfU1VDQ0VTUyAgICAgICAgICAgIFVzZXIgcHJvZmlsZSB3YXMgc3VjY2Vzc2Z1bGx5IGRl bGV0ZWQuDQo+Pi0gIEByZXR2YWwgRUZJX0FDQ0VTU19ERU5JRUQgICAgICBDdXJyZW50IHVzZXIg cHJvZmlsZSBkb2VzIG5vdCBwZXJtaXQNCj4+ZGVsZXRpb24gb24gdGhlIHVzZXIgcHJvZmlsZSBo YW5kbGUuDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFaXRoZXIgdGhlIHVz ZXIgcHJvZmlsZSBjYW5ub3QgZGVsZXRlIG9uIGFueSB1c2VyIHByb2ZpbGUgb3INCj4+Y2Fubm90 IGRlbGV0ZQ0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb24gYSB1c2VyIHBy b2ZpbGUgb3RoZXIgdGhhbiB0aGUgY3VycmVudCB1c2VyIHByb2ZpbGUuDQo+Pi0gIEByZXR2YWwg RUZJX1VOU1VQUE9SVEVEICAgICAgICBUaGlzIGNyZWRlbnRpYWwgcHJvdmlkZXIgZG9lcyBub3Qg c3VwcG9ydA0KPj5kZWxldGlvbiBpbiB0aGUgcHJlLU9TLg0KPj4tICBAcmV0dmFsIEVGSV9ERVZJ Q0VfRVJST1IgICAgICAgVGhlIG5ldyBjcmVkZW50aWFsIGNvdWxkIG5vdCBiZSBkZWxldGVkDQo+ PmJlY2F1c2Ugb2YgYSBkZXZpY2UgZXJyb3IuDQo+Pi0gIEByZXR2YWwgRUZJX0lOVkFMSURfUEFS QU1FVEVSICBVc2VyIGRvZXMgbm90IHJlZmVyIHRvIGEgdmFsaWQgdXNlcg0KPj5wcm9maWxlIGhh bmRsZS4NCj4+LSoqLw0KPj4tRUZJX1NUQVRVUw0KPj4tRUZJQVBJDQo+Pi1DcmVkZW50aWFsRGVs ZXRlICgNCj4+LSAgSU4gQ09OU1QgIEVGSV9VU0VSX0NSRURFTlRJQUwyX1BST1RPQ09MICAgICAg ICpUaGlzLA0KPj4tICBJTiAgICAgICAgRUZJX1VTRVJfUFJPRklMRV9IQU5ETEUgICAgICAgICAg ICAgVXNlcg0KPj4tICApDQo+Pi17DQo+Pi0gIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgU3Rh dHVzOw0KPj4tICBFRklfVVNFUl9JTkZPICAgICAgICAgICAgICpVc2VySW5mbzsNCj4+LSAgVUlO VDggICAgICAgICAgICAgICAgICAgICAqVXNlcklkOw0KPj4tICBVSU5UOCAgICAgICAgICAgICAg ICAgICAgICpOZXdVc2VySWQ7DQo+Pi0gIFVJTlROICAgICAgICAgICAgICAgICAgICAgSW5kZXg7 DQo+Pi0NCj4+LSAgaWYgKChUaGlzID09IE5VTEwpIHx8IChVc2VyID09IE5VTEwpKSB7DQo+Pi0g ICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4+LSAgfQ0KPj4tDQo+Pi0gIC8vDQo+ Pi0gIC8vIEdldCBVc2VyIElkZW50aWZpZXIuDQo+Pi0gIC8vDQo+Pi0gIFVzZXJJbmZvID0gTlVM TDsNCj4+LSAgU3RhdHVzID0gRmluZFVzZXJJbmZvQnlUeXBlICgNCj4+LSAgICAgICAgICAgICBV c2VyLA0KPj4tICAgICAgICAgICAgIEVGSV9VU0VSX0lORk9fSURFTlRJRklFUl9SRUNPUkQsDQo+ Pi0gICAgICAgICAgICAgJlVzZXJJbmZvDQo+Pi0gICAgICAgICAgICAgKTsNCj4+LSAgaWYgKEVG SV9FUlJPUiAoU3RhdHVzKSkgew0KPj4tICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7 DQo+Pi0gIH0NCj4+LQ0KPj4tICAvLw0KPj4tICAvLyBGaW5kIHRoZSB1c2VyIGJ5IHVzZXIgaWRl bnRpZmllciBpbiBtUHdkVGFibGUuDQo+Pi0gIC8vDQo+Pi0gIGZvciAoSW5kZXggPSAwOyBJbmRl eCA8IG1Qd2RUYWJsZS0+Q291bnQ7IEluZGV4KyspIHsNCj4+LSAgICBVc2VySWQgICAgPSAoVUlO VDggKikgJm1Qd2RUYWJsZS0+VXNlckluZm9bSW5kZXhdLlVzZXJJZDsNCj4+LSAgICBOZXdVc2Vy SWQgPSAoVUlOVDggKikgKFVzZXJJbmZvICsgMSk7DQo+Pi0gICAgaWYgKENvbXBhcmVNZW0gKFVz ZXJJZCwgTmV3VXNlcklkLCBzaXplb2YNCj4oRUZJX1VTRVJfSU5GT19JREVOVElGSUVSKSkNCj4+ PT0gMCkgew0KPj4tICAgICAgLy8NCj4+LSAgICAgIC8vIEZvdW5kIHRoZSB1c2VyLCBkZWxldGUg aXQuDQo+Pi0gICAgICAvLw0KPj4tICAgICAgTW9kaWZ5VGFibGUgKEluZGV4LCBOVUxMKTsNCj4+ LSAgICAgIGJyZWFrOw0KPj4tICAgIH0NCj4+LSAgfQ0KPj4tDQo+Pi0gIEZyZWVQb29sIChVc2Vy SW5mbyk7DQo+Pi0gIHJldHVybiBFRklfU1VDQ0VTUzsNCj4+LX0NCj4+LQ0KPj4tDQo+Pi0vKioN Cj4+LSAgTWFpbiBlbnRyeSBmb3IgdGhpcyBkcml2ZXIuDQo+Pi0NCj4+LSAgQHBhcmFtIEltYWdl SGFuZGxlICAgICBJbWFnZSBoYW5kbGUgdGhpcyBkcml2ZXIuDQo+Pi0gIEBwYXJhbSBTeXN0ZW1U YWJsZSAgICAgUG9pbnRlciB0byBTeXN0ZW1UYWJsZS4NCj4+LQ0KPj4tICBAcmV0dmFsIEVGSV9T VUNFU1MgICAgIFRoaXMgZnVuY3Rpb24gYWx3YXlzIGNvbXBsZXRlIHN1Y2Nlc3NmdWxseS4NCj4+ LQ0KPj4tKiovDQo+Pi1FRklfU1RBVFVTDQo+Pi1FRklBUEkNCj4+LVBhc3N3b3JkUHJvdmlkZXJJ bml0ICgNCj4+LSAgSU4gRUZJX0hBTkRMRSAgICAgICAgSW1hZ2VIYW5kbGUsDQo+Pi0gIElOIEVG SV9TWVNURU1fVEFCTEUgICpTeXN0ZW1UYWJsZQ0KPj4tICApDQo+Pi17DQo+Pi0gIEVGSV9TVEFU VVMgIFN0YXR1czsNCj4+LQ0KPj4tICAvLw0KPj4tICAvLyBJdCBpcyBOT1Qgcm9idXN0IGVub3Vn aCB0byBiZSBpbmNsdWRlZCBpbiBwcm9kdWN0aW9uLg0KPj4tICAvLw0KPj4tICAjZXJyb3IgIlRo aXMgaW1wbGVtZW50YXRpb24gaXMganVzdCBhIHNhbXBsZSwgcGxlYXNlIGNvbW1lbnQgdGhpcyBs aW5lIGlmDQo+eW91DQo+PnJlYWxseSB3YW50IHRvIHVzZSB0aGlzIGRyaXZlci4iDQo+Pi0NCj4+ LSAgLy8NCj4+LSAgLy8gSW5pdCBjcmVkZW50aWFsIHRhYmxlLg0KPj4tICAvLw0KPj4tICBTdGF0 dXMgPSBJbml0Q3JlZGVudGlhbFRhYmxlICgpOw0KPj4tICBpZiAoRUZJX0VSUk9SIChTdGF0dXMp KSB7DQo+Pi0gICAgcmV0dXJuIFN0YXR1czsNCj4+LSAgfQ0KPj4tDQo+Pi0gIC8vDQo+Pi0gIC8v IEluaXQgRm9ybSBCcm93c2VyLg0KPj4tICAvLw0KPj4tICBTdGF0dXMgPSBJbml0Rm9ybUJyb3dz ZXIgKCk7DQo+Pi0gIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4+LSAgICByZXR1cm4gU3Rh dHVzOw0KPj4tICB9DQo+Pi0NCj4+LSAgLy8NCj4+LSAgLy8gSW5zdGFsbCBwcm90b2NvbCBpbnRl cmZhY2VzIGZvciB0aGUgcGFzc3dvcmQgY3JlZGVudGlhbCBwcm92aWRlci4NCj4+LSAgLy8NCj4+ LSAgU3RhdHVzID0gZ0JTLT5JbnN0YWxsUHJvdG9jb2xJbnRlcmZhY2UgKA0KPj4tICAgICAgICAg ICAgICAgICAgJm1DYWxsYmFja0luZm8tPkRyaXZlckhhbmRsZSwNCj4+LSAgICAgICAgICAgICAg ICAgICZnRWZpVXNlckNyZWRlbnRpYWwyUHJvdG9jb2xHdWlkLA0KPj4tICAgICAgICAgICAgICAg ICAgRUZJX05BVElWRV9JTlRFUkZBQ0UsDQo+Pi0gICAgICAgICAgICAgICAgICAmZ1B3ZENyZWRl bnRpYWxQcm92aWRlckRyaXZlcg0KPj4tICAgICAgICAgICAgICAgICAgKTsNCj4+LSAgcmV0dXJu IFN0YXR1czsNCj4+LX0NCj4+ZGlmZiAtLWdpdA0KPj5hL1NlY3VyaXR5UGtnL1VzZXJJZGVudGlm aWNhdGlvbi9Qd2RDcmVkZW50aWFsUHJvdmlkZXJEeGUvUHdkQ3JlZGVudGlhbA0KPlANCj4+cm92 aWRlci5oDQo+PmIvU2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9uL1B3ZENyZWRlbnRpYWxQ cm92aWRlckR4ZS9Qd2RDcmVkZW50aWENCj5sDQo+PlByb3ZpZGVyLmgNCj4+ZGVsZXRlZCBmaWxl IG1vZGUgMTAwNjQ0DQo+PmluZGV4IGZkNzgyNTQ5ZmQuLjAwMDAwMDAwMDANCj4+LS0tDQo+PmEv U2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9uL1B3ZENyZWRlbnRpYWxQcm92aWRlckR4ZS9Q d2RDcmVkZW50aWFsDQo+UA0KPj5yb3ZpZGVyLmgNCj4+KysrIC9kZXYvbnVsbA0KPj5AQCAtMSwz NzQgKzAsMCBAQA0KPj4tLyoqIEBmaWxlDQo+Pi0gIFBhc3N3b3JkIENyZWRlbnRpYWwgUHJvdmlk ZXIgZHJpdmVyIGhlYWRlciBmaWxlLg0KPj4tDQo+Pi1Db3B5cmlnaHQgKGMpIDIwMDkgLSAyMDE4 LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+Pi1UaGlzIHBy b2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQo+Pi1hcmUgbGljZW5zZWQgYW5k IG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgQlNE DQo+PkxpY2Vuc2UNCj4+LXdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLiAgVGhl IGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBtYXkgYmUNCj4+Zm91bmQgYXQNCj4+LWh0dHA6Ly9v cGVuc291cmNlLm9yZy9saWNlbnNlcy9ic2QtbGljZW5zZS5waHANCj4+LQ0KPj4tVEhFIFBST0dS QU0gSVMgRElTVFJJQlVURUQgVU5ERVIgVEhFIEJTRCBMSUNFTlNFIE9OIEFOICJBUyBJUyINCj5C QVNJUywNCj4+LVdJVEhPVVQgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlMgT0YgQU5ZIEtJ TkQsIEVJVEhFUg0KPj5FWFBSRVNTIE9SIElNUExJRUQuDQo+Pi0NCj4+LSoqLw0KPj4tDQo+Pi0j aWZuZGVmIF9QQVNTV09SRF9DUkVERU5USUFMX1BST1ZJREVSX0hfDQo+Pi0jZGVmaW5lIF9QQVNT V09SRF9DUkVERU5USUFMX1BST1ZJREVSX0hfDQo+Pi0NCj4+LSNpbmNsdWRlIDxVZWZpLmg+DQo+ Pi0NCj4+LSNpbmNsdWRlIDxHdWlkL0dsb2JhbFZhcmlhYmxlLmg+DQo+Pi0NCj4+LSNpbmNsdWRl IDxQcm90b2NvbC9IaWlDb25maWdBY2Nlc3MuaD4NCj4+LSNpbmNsdWRlIDxQcm90b2NvbC9Vc2Vy Q3JlZGVudGlhbDIuaD4NCj4+LSNpbmNsdWRlIDxQcm90b2NvbC9Vc2VyTWFuYWdlci5oPg0KPj4t DQo+Pi0jaW5jbHVkZSA8TGlicmFyeS9VZWZpUnVudGltZVNlcnZpY2VzVGFibGVMaWIuaD4NCj4+ LSNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlCb290U2VydmljZXNUYWJsZUxpYi5oPg0KPj4tI2luY2x1 ZGUgPExpYnJhcnkvTWVtb3J5QWxsb2NhdGlvbkxpYi5oPg0KPj4tI2luY2x1ZGUgPExpYnJhcnkv QmFzZU1lbW9yeUxpYi5oPg0KPj4tI2luY2x1ZGUgPExpYnJhcnkvRGV2aWNlUGF0aExpYi5oPg0K Pj4tI2luY2x1ZGUgPExpYnJhcnkvRGVidWdMaWIuaD4NCj4+LSNpbmNsdWRlIDxMaWJyYXJ5L1Vl ZmlMaWIuaD4NCj4+LSNpbmNsdWRlIDxMaWJyYXJ5L1ByaW50TGliLmg+DQo+Pi0jaW5jbHVkZSA8 TGlicmFyeS9IaWlMaWIuaD4NCj4+LSNpbmNsdWRlIDxMaWJyYXJ5L0Jhc2VDcnlwdExpYi5oPg0K Pj4tDQo+Pi0jaW5jbHVkZSAiUHdkQ3JlZGVudGlhbFByb3ZpZGVyRGF0YS5oIg0KPj4tDQo+Pi1l eHRlcm4gVUlOVDggICAgICBQd2RDcmVkZW50aWFsUHJvdmlkZXJTdHJpbmdzW107DQo+Pi1leHRl cm4gVUlOVDggICAgICBQd2RDcmVkZW50aWFsUHJvdmlkZXJWZnJCaW5bXTsNCj4+LQ0KPj4tI2Rl ZmluZSBQQVNTV09SRF9UQUJMRV9JTkMgIDE2DQo+Pi0jZGVmaW5lIENSRURFTlRJQUxfTEVOICAg ICAgMjANCj4+LQ0KPj4tLy8NCj4+LS8vIFBhc3N3b3JkIGNyZWRlbnRpYWwgaW5mb3JtYXRpb24u DQo+Pi0vLw0KPj4tdHlwZWRlZiBzdHJ1Y3Qgew0KPj4tICBFRklfVVNFUl9JTkZPX0lERU5USUZJ RVIgIFVzZXJJZDsNCj4+LSAgQ0hBUjggICAgICAgICAgICAgICAgICAgICBQYXNzd29yZFtDUkVE RU5USUFMX0xFTl07DQo+Pi19IFBBU1NXT1JEX0lORk87DQo+Pi0NCj4+LS8vDQo+Pi0vLyBQYXNz d29yZCBjcmVkZW50aWFsIHRhYmxlLg0KPj4tLy8NCj4+LXR5cGVkZWYgc3RydWN0IHsNCj4+LSAg VUlOVE4gICAgICAgICBDb3VudDsNCj4+LSAgVUlOVE4gICAgICAgICBNYXhDb3VudDsNCj4+LSAg VUlOVE4gICAgICAgICBWYWxpZEluZGV4Ow0KPj4tICBQQVNTV09SRF9JTkZPIFVzZXJJbmZvWzFd Ow0KPj4tfSBDUkVERU5USUFMX1RBQkxFOw0KPj4tDQo+Pi0vLw0KPj4tLy8gVGhlIHVzZXIgaW5m b3JtYXRpb24gb24gdGhlIHBhc3N3b3JkIHByb3ZpZGVyLg0KPj4tLy8NCj4+LXR5cGVkZWYgc3Ry dWN0IHsNCj4+LSAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgQ291bnQ7DQo+Pi0gIEVG SV9VU0VSX0lORk8gICAgICAgICAgICAgICAgICpJbmZvWzFdOw0KPj4tfSBQQVNTV09SRF9DUkVE RU5USUFMX0lORk87DQo+Pi0NCj4+LS8vLw0KPj4tLy8vIEhJSSBzcGVjaWZpYyBWZW5kb3IgRGV2 aWNlIFBhdGggZGVmaW5pdGlvbi4NCj4+LS8vLw0KPj4tdHlwZWRlZiBzdHJ1Y3Qgew0KPj4tICBW RU5ET1JfREVWSUNFX1BBVEggICAgICAgIFZlbmRvckRldmljZVBhdGg7DQo+Pi0gIEVGSV9ERVZJ Q0VfUEFUSF9QUk9UT0NPTCAgRW5kOw0KPj4tfSBISUlfVkVORE9SX0RFVklDRV9QQVRIOw0KPj4t DQo+Pi0jZGVmaW5lIFBXRF9QUk9WSURFUl9TSUdOQVRVUkUgIFNJR05BVFVSRV8zMiAoJ1AnLCAn VycsICdEJywgJ1AnKQ0KPj4tDQo+Pi10eXBlZGVmIHN0cnVjdCB7DQo+Pi0gIFVJTlROICAgICAg ICAgICAgICAgICAgICAgICAgICAgU2lnbmF0dXJlOw0KPj4tICBFRklfSEFORExFICAgICAgICAg ICAgICAgICAgICAgIERyaXZlckhhbmRsZTsNCj4+LSAgRUZJX0hJSV9IQU5ETEUgICAgICAgICAg ICAgICAgICBIaWlIYW5kbGU7DQo+Pi0gIC8vDQo+Pi0gIC8vIFByb2R1Y2VkIHByb3RvY29sLg0K Pj4tICAvLw0KPj4tICBFRklfSElJX0NPTkZJR19BQ0NFU1NfUFJPVE9DT0wgIENvbmZpZ0FjY2Vz czsNCj4+LX0gUFdEX1BST1ZJREVSX0NBTExCQUNLX0lORk87DQo+Pi0NCj4+LQ0KPj4tLyoqDQo+ Pi0gIEVucm9sbCBhIHVzZXIgb24gYSBjcmVkZW50aWFsIHByb3ZpZGVyLg0KPj4tDQo+Pi0gIFRo aXMgZnVuY3Rpb24gZW5yb2xscyBhIHVzZXIgb24gdGhpcyBjcmVkZW50aWFsIHByb3ZpZGVyLiBJ ZiB0aGUgdXNlciBleGlzdHMgb24NCj4+LSAgdGhpcyBjcmVkZW50aWFsIHByb3ZpZGVyLCB1cGRh dGUgdGhlIHVzZXIgaW5mb3JtYXRpb24gb24gdGhpcyBjcmVkZW50aWFsDQo+PnByb3ZpZGVyOw0K Pj4tICBvdGhlcndpc2UgZGVsZXRlIHRoZSB1c2VyIGluZm9ybWF0aW9uIG9uIGNyZWRlbnRpYWwg cHJvdmlkZXIuDQo+Pi0NCj4+LSAgQHBhcmFtW2luXSBUaGlzICAgICAgICAgICAgICAgIFBvaW50 cyB0byB0aGlzIGluc3RhbmNlIG9mDQo+PkVGSV9VU0VSX0NSRURFTlRJQUwyX1BST1RPQ09MLg0K Pj4tICBAcGFyYW1baW5dIFVzZXIgICAgICAgICAgICAgICAgVGhlIHVzZXIgcHJvZmlsZSB0byBl bnJvbGwuDQo+Pi0NCj4+LSAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgIFVzZXIgcHJv ZmlsZSB3YXMgc3VjY2Vzc2Z1bGx5IGVucm9sbGVkLg0KPj4tICBAcmV0dmFsIEVGSV9BQ0NFU1Nf REVOSUVEICAgICAgQ3VycmVudCB1c2VyIHByb2ZpbGUgZG9lcyBub3QgcGVybWl0DQo+PmVucm9s bG1lbnQgb24gdGhlDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyIHBy b2ZpbGUgaGFuZGxlLiBFaXRoZXIgdGhlIHVzZXIgcHJvZmlsZSBjYW5ub3QgZW5yb2xsDQo+Pi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbiBhbnkgdXNlciBwcm9maWxlIG9yIGNh bm5vdCBlbnJvbGwgb24gYSB1c2VyIHByb2ZpbGUNCj4+LSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIG90aGVyIHRoYW4gdGhlIGN1cnJlbnQgdXNlciBwcm9maWxlLg0KPj4tICBAcmV0 dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICAgVGhpcyBjcmVkZW50aWFsIHByb3ZpZGVyIGRvZXMg bm90IHN1cHBvcnQNCj4+ZW5yb2xsbWVudCBpbg0KPj4tICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdGhlIHByZS1PUy4NCj4+LSAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAg IFRoZSBuZXcgY3JlZGVudGlhbCBjb3VsZCBub3QgYmUgY3JlYXRlZA0KPj5iZWNhdXNlIG9mIGEg ZGV2aWNlDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvci4NCj4+LSAg QHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgIFVzZXIgZG9lcyBub3QgcmVmZXIgdG8gYSB2 YWxpZCB1c2VyDQo+PnByb2ZpbGUgaGFuZGxlLg0KPj4tDQo+Pi0qKi8NCj4+LUVGSV9TVEFUVVMN Cj4+LUVGSUFQSQ0KPj4tQ3JlZGVudGlhbEVucm9sbCAoDQo+Pi0gIElOIENPTlNUICBFRklfVVNF Ul9DUkVERU5USUFMMl9QUk9UT0NPTCAgICAgICAqVGhpcywNCj4+LSAgSU4gICAgICAgIEVGSV9V U0VSX1BST0ZJTEVfSEFORExFICAgICAgICAgICAgIFVzZXINCj4+LSAgKTsNCj4+LQ0KPj4tLyoq DQo+Pi0gIFJldHVybnMgdGhlIHVzZXIgaW50ZXJmYWNlIGluZm9ybWF0aW9uIHVzZWQgZHVyaW5n IHVzZXIgaWRlbnRpZmljYXRpb24uDQo+Pi0NCj4+LSAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIGlu Zm9ybWF0aW9uIGFib3V0IHRoZSBmb3JtIHVzZWQgd2hlbiBpbnRlcmFjdGluZw0KPj53aXRoIHRo ZQ0KPj4tICB1c2VyIGR1cmluZyB1c2VyIGlkZW50aWZpY2F0aW9uLiBUaGUgZm9ybSBpcyB0aGUg Zmlyc3QgZW5hYmxlZCBmb3JtIGluIHRoZQ0KPj5mb3JtLXNldA0KPj4tICBjbGFzcyBFRklfSElJ X1VTRVJfQ1JFREVOVElBTF9GT1JNU0VUX0dVSUQgaW5zdGFsbGVkIG9uIHRoZSBISUkNCj4+aGFu ZGxlIEhpaUhhbmRsZS4gSWYNCj4+LSAgdGhlIHVzZXIgY3JlZGVudGlhbCBwcm92aWRlciBkb2Vz IG5vdCByZXF1aXJlIGEgZm9ybSB0byBpZGVudGlmeSB0aGUgdXNlciwNCj4+dGhlbiB0aGlzDQo+ Pi0gIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gRUZJX05PVF9GT1VORC4NCj4+LQ0KPj4tICBAcGFy YW1baW5dICBUaGlzICAgICAgIFBvaW50cyB0byB0aGlzIGluc3RhbmNlIG9mIHRoZQ0KPj5FRklf VVNFUl9DUkVERU5USUFMMl9QUk9UT0NPTC4NCj4+LSAgQHBhcmFtW291dF0gSGlpICAgICAgICBP biByZXR1cm4sIGhvbGRzIHRoZSBISUkgZGF0YWJhc2UgaGFuZGxlLg0KPj4tICBAcGFyYW1bb3V0 XSBGb3JtU2V0SWQgIE9uIHJldHVybiwgaG9sZHMgdGhlIGlkZW50aWZpZXIgb2YgdGhlIGZvcm0g c2V0DQo+PndoaWNoIGNvbnRhaW5zDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGZv cm0gdXNlZCBkdXJpbmcgdXNlciBpZGVudGlmaWNhdGlvbi4NCj4+LSAgQHBhcmFtW291dF0gRm9y bUlkICAgICBPbiByZXR1cm4sIGhvbGRzIHRoZSBpZGVudGlmaWVyIG9mIHRoZSBmb3JtIHVzZWQN Cj4+ZHVyaW5nIHVzZXINCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICBpZGVudGlmaWNhdGlv bi4NCj4+LQ0KPj4tICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgRm9ybSByZXR1cm5l ZCBzdWNjZXNzZnVsbHkuDQo+Pi0gIEByZXR2YWwgRUZJX05PVF9GT1VORCAgICAgICAgICBGb3Jt IG5vdCByZXR1cm5lZC4NCj4+LSAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgIEhpaSBp cyBOVUxMIG9yIEZvcm1TZXRJZCBpcyBOVUxMIG9yDQo+PkZvcm1JZCBpcyBOVUxMLg0KPj4tDQo+ Pi0qKi8NCj4+LUVGSV9TVEFUVVMNCj4+LUVGSUFQSQ0KPj4tQ3JlZGVudGlhbEZvcm0gKA0KPj4t ICBJTiBDT05TVCAgRUZJX1VTRVJfQ1JFREVOVElBTDJfUFJPVE9DT0wgICAgICAgKlRoaXMsDQo+ Pi0gIE9VVCAgICAgICBFRklfSElJX0hBTkRMRSAgICAgICAgICAgICAgICAgICAgICAqSGlpLA0K Pj4tICBPVVQgICAgICAgRUZJX0dVSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkZvcm1T ZXRJZCwNCj4+LSAgT1VUICAgICAgIEVGSV9GT1JNX0lEICAgICAgICAgICAgICAgICAgICAgICAg ICpGb3JtSWQNCj4+LSAgKTsNCj4+LQ0KPj4tLyoqDQo+Pi0gIFJldHVybnMgYml0bWFwIHVzZWQg dG8gZGVzY3JpYmUgdGhlIGNyZWRlbnRpYWwgcHJvdmlkZXIgdHlwZS4NCj4+LQ0KPj4tICBUaGlz IG9wdGlvbmFsIGZ1bmN0aW9uIHJldHVybnMgYSBiaXRtYXAgd2hpY2ggaXMgbGVzcyB0aGFuIG9y IGVxdWFsIHRvIHRoZQ0KPj5udW1iZXINCj4+LSAgb2YgcGl4ZWxzIHNwZWNpZmllZCBieSBXaWR0 aCBhbmQgSGVpZ2h0LiBJZiBubyBzdWNoIGJpdG1hcCBleGlzdHMsIHRoZW4NCj4+RUZJX05PVF9G T1VORA0KPj4tICBpcyByZXR1cm5lZC4NCj4+LQ0KPj4tICBAcGFyYW1baW5dICAgICAgVGhpcyAg ICBQb2ludHMgdG8gdGhpcyBpbnN0YW5jZSBvZiB0aGUNCj4+RUZJX1VTRVJfQ1JFREVOVElBTDJf UFJPVE9DT0wuDQo+Pi0gIEBwYXJhbVtpbiwgb3V0XSBXaWR0aCAgIE9uIGVudHJ5LCBwb2ludHMg dG8gdGhlIGRlc2lyZWQgYml0bWFwIHdpZHRoLiBJZg0KPj5OVUxMIHRoZW4gbm8NCj4+LSAgICAg ICAgICAgICAgICAgICAgICAgICAgYml0bWFwIGluZm9ybWF0aW9uIHdpbGwgYmUgcmV0dXJuZWQu IE9uIGV4aXQsIHBvaW50cyB0byB0aGUNCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgd2lk dGggb2YgdGhlIGJpdG1hcCByZXR1cm5lZC4NCj4+LSAgQHBhcmFtW2luLCBvdXRdIEhlaWdodCAg T24gZW50cnksIHBvaW50cyB0byB0aGUgZGVzaXJlZCBiaXRtYXAgaGVpZ2h0LiBJZg0KPj5OVUxM IHRoZW4gbm8NCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgYml0bWFwIGluZm9ybWF0aW9u IHdpbGwgYmUgcmV0dXJuZWQuIE9uIGV4aXQsIHBvaW50cyB0byB0aGUNCj4+LSAgICAgICAgICAg ICAgICAgICAgICAgICAgaGVpZ2h0IG9mIHRoZSBiaXRtYXAgcmV0dXJuZWQNCj4+LSAgQHBhcmFt W291dF0gICAgIEhpaSAgICAgT24gcmV0dXJuLCBob2xkcyB0aGUgSElJIGRhdGFiYXNlIGhhbmRs ZS4NCj4+LSAgQHBhcmFtW291dF0gICAgIEltYWdlICAgT24gcmV0dXJuLCBob2xkcyB0aGUgSElJ IGltYWdlIGlkZW50aWZpZXIuDQo+Pi0NCj4+LSAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAg ICAgIEltYWdlIGlkZW50aWZpZXIgcmV0dXJuZWQgc3VjY2Vzc2Z1bGx5Lg0KPj4tICBAcmV0dmFs IEVGSV9OT1RfRk9VTkQgICAgICAgICAgSW1hZ2UgaWRlbnRpZmllciBub3QgcmV0dXJuZWQuDQo+ Pi0gIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICBIaWkgaXMgTlVMTCBvciBJbWFnZSBp cyBOVUxMLg0KPj4tDQo+Pi0qKi8NCj4+LUVGSV9TVEFUVVMNCj4+LUVGSUFQSQ0KPj4tQ3JlZGVu dGlhbFRpbGUgKA0KPj4tICBJTiAgQ09OU1QgIEVGSV9VU0VSX0NSRURFTlRJQUwyX1BST1RPQ09M ICAgICAgICpUaGlzLA0KPj4tICBJTiAgT1VUICAgIFVJTlROICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICpXaWR0aCwNCj4+LSAgSU4gIE9VVCAgICBVSU5UTiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAqSGVpZ2h0LA0KPj4tICAgICAgT1VUICAgIEVGSV9ISUlfSEFORExFICAg ICAgICAgICAgICAgICAgICAgICpIaWksDQo+Pi0gICAgICBPVVQgICAgRUZJX0lNQUdFX0lEICAg ICAgICAgICAgICAgICAgICAgICAgKkltYWdlDQo+Pi0gICk7DQo+Pi0NCj4+LS8qKg0KPj4tICBS ZXR1cm5zIHN0cmluZyB1c2VkIHRvIGRlc2NyaWJlIHRoZSBjcmVkZW50aWFsIHByb3ZpZGVyIHR5 cGUuDQo+Pi0NCj4+LSAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgc3RyaW5nIHdoaWNoIGRlc2Ny aWJlcyB0aGUgY3JlZGVudGlhbCBwcm92aWRlci4gSWYgbm8NCj4+LSAgc3VjaCBzdHJpbmcgZXhp c3RzLCB0aGVuIEVGSV9OT1RfRk9VTkQgaXMgcmV0dXJuZWQuDQo+Pi0NCj4+LSAgQHBhcmFtW2lu XSAgVGhpcyAgICAgICBQb2ludHMgdG8gdGhpcyBpbnN0YW5jZSBvZiB0aGUNCj4+RUZJX1VTRVJf Q1JFREVOVElBTDJfUFJPVE9DT0wuDQo+Pi0gIEBwYXJhbVtvdXRdIEhpaSAgICAgICAgT24gcmV0 dXJuLCBob2xkcyB0aGUgSElJIGRhdGFiYXNlIGhhbmRsZS4NCj4+LSAgQHBhcmFtW291dF0gU3Ry aW5nICAgICBPbiByZXR1cm4sIGhvbGRzIHRoZSBISUkgc3RyaW5nIGlkZW50aWZpZXIuDQo+Pi0N Cj4+LSAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgIFN0cmluZyBpZGVudGlmaWVyIHJl dHVybmVkIHN1Y2Nlc3NmdWxseS4NCj4+LSAgQHJldHZhbCBFRklfTk9UX0ZPVU5EICAgICAgICAg IFN0cmluZyBpZGVudGlmaWVyIG5vdCByZXR1cm5lZC4NCj4+LSAgQHJldHZhbCBFRklfSU5WQUxJ RF9QQVJBTUVURVIgIEhpaSBpcyBOVUxMIG9yIFN0cmluZyBpcyBOVUxMLg0KPj4tDQo+Pi0qKi8N Cj4+LUVGSV9TVEFUVVMNCj4+LUVGSUFQSQ0KPj4tQ3JlZGVudGlhbFRpdGxlICgNCj4+LSAgSU4g Q09OU1QgIEVGSV9VU0VSX0NSRURFTlRJQUwyX1BST1RPQ09MICAgICAgICpUaGlzLA0KPj4tICBP VVQgICAgICAgRUZJX0hJSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgICAgKkhpaSwNCj4+LSAg T1VUICAgICAgIEVGSV9TVFJJTkdfSUQgICAgICAgICAgICAgICAgICAgICAgICpTdHJpbmcNCj4+ LSAgKTsNCj4+LQ0KPj4tLyoqDQo+Pi0gIFJldHVybiB0aGUgdXNlciBpZGVudGlmaWVyIGFzc29j aWF0ZWQgd2l0aCB0aGUgY3VycmVudGx5IGF1dGhlbnRpY2F0ZWQgdXNlci4NCj4+LQ0KPj4tICBU aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHVzZXIgaWRlbnRpZmllciBvZiB0aGUgdXNlciBhdXRo ZW50aWNhdGVkIGJ5IHRoaXMNCj4+Y3JlZGVudGlhbA0KPj4tICBwcm92aWRlci4gVGhpcyBmdW5j dGlvbiBpcyBjYWxsZWQgYWZ0ZXIgdGhlIGNyZWRlbnRpYWwtcmVsYXRlZCBpbmZvcm1hdGlvbiBo YXMNCj4+YmVlbg0KPj4tICBzdWJtaXR0ZWQgb24gYSBmb3JtIE9SIGFmdGVyIGEgY2FsbCB0byBE ZWZhdWx0KCkgaGFzIHJldHVybmVkIHRoYXQgdGhpcw0KPj5jcmVkZW50aWFsIGlzDQo+Pi0gIHJl YWR5IHRvIGxvZyBvbi4NCj4+LQ0KPj4tICBAcGFyYW1baW5dICBUaGlzICAgICAgICAgICBQb2lu dHMgdG8gdGhpcyBpbnN0YW5jZSBvZiB0aGUNCj4+RUZJX1VTRVJfQ1JFREVOVElBTDJfUFJPVE9D T0wuDQo+Pi0gIEBwYXJhbVtpbl0gIFVzZXIgICAgICAgICAgIFRoZSB1c2VyIHByb2ZpbGUgaGFu ZGxlIG9mIHRoZSB1c2VyIHByb2ZpbGUgY3VycmVudGx5DQo+PmJlaW5nDQo+Pi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnNpZGVyZWQgYnkgdGhlIHVzZXIgaWRlbnRpdHkgbWFuYWdl ci4gSWYgTlVMTCwgdGhlbiBubw0KPnVzZXINCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcHJvZmlsZSBpcyBjdXJyZW50bHkgdW5kZXIgY29uc2lkZXJhdGlvbi4NCj4+LSAgQHBhcmFt W291dF0gSWRlbnRpZmllciAgICAgT24gcmV0dXJuLCBwb2ludHMgdG8gdGhlIHVzZXIgaWRlbnRp Zmllci4NCj4+LQ0KPj4tICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgVXNlciBpZGVu dGlmaWVyIHJldHVybmVkIHN1Y2Nlc3NmdWxseS4NCj4+LSAgQHJldHZhbCBFRklfTk9UX1JFQURZ ICAgICAgICAgIE5vIHVzZXIgaWRlbnRpZmllciBjYW4gYmUgcmV0dXJuZWQuDQo+Pi0gIEByZXR2 YWwgRUZJX0FDQ0VTU19ERU5JRUQgICAgICBUaGUgdXNlciBoYXMgYmVlbiBsb2NrZWQgb3V0IG9m IHRoaXMgdXNlcg0KPj5jcmVkZW50aWFsLg0KPj4tICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFN RVRFUiAgVGhpcyBpcyBOVUxMLCBvciBJZGVudGlmaWVyIGlzIE5VTEwuDQo+Pi0gIEByZXR2YWwg RUZJX05PVF9GT1VORCAgICAgICAgICBVc2VyIGlzIG5vdCBOVUxMLCBhbmQgdGhlIHNwZWNpZmll ZCB1c2VyDQo+PmhhbmRsZSBjYW4ndCBiZQ0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZm91bmQgaW4gdXNlciBwcm9maWxlIGRhdGFiYXNlDQo+Pi0NCj4+LSoqLw0KPj4tRUZJ X1NUQVRVUw0KPj4tRUZJQVBJDQo+Pi1DcmVkZW50aWFsVXNlciAoDQo+Pi0gIElOIENPTlNUICBF RklfVVNFUl9DUkVERU5USUFMMl9QUk9UT0NPTCAgICAgICAqVGhpcywNCj4+LSAgSU4gICAgICAg IEVGSV9VU0VSX1BST0ZJTEVfSEFORExFICAgICAgICAgICAgIFVzZXIsDQo+Pi0gIE9VVCAgICAg ICBFRklfVVNFUl9JTkZPX0lERU5USUZJRVIgICAgICAgICAgICAqSWRlbnRpZmllcg0KPj4tICAp Ow0KPj4tDQo+Pi0vKioNCj4+LSAgSW5kaWNhdGUgdGhhdCB1c2VyIGludGVyZmFjZSBpbnRlcmFj dGlvbiBoYXMgYmVndW4gZm9yIHRoZSBzcGVjaWZpZWQNCj4+Y3JlZGVudGlhbC4NCj4+LQ0KPj4t ICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGEgY3JlZGVudGlhbCBwcm92aWRlciBpcyBz ZWxlY3RlZCBieSB0aGUgdXNlci4gSWYNCj4+LSAgQXV0b0xvZ29uIHJldHVybnMgRkFMU0UsIHRo ZW4gdGhlIHVzZXIgaW50ZXJmYWNlIHdpbGwgYmUgY29uc3RydWN0ZWQgYnkNCj50aGUNCj4+VXNl cg0KPj4tICBJZGVudGl0eSBNYW5hZ2VyLg0KPj4tDQo+Pi0gIEBwYXJhbVtpbl0gIFRoaXMgICAg ICAgUG9pbnRzIHRvIHRoaXMgaW5zdGFuY2Ugb2YgdGhlDQo+PkVGSV9VU0VSX0NSRURFTlRJQUwy X1BST1RPQ09MLg0KPj4tICBAcGFyYW1bb3V0XSBBdXRvTG9nb24gIE9uIHJldHVybiwgcG9pbnRz IHRvIHRoZSBjcmVkZW50aWFsIHByb3ZpZGVyJ3MNCj4+Y2FwYWJpbGl0aWVzDQo+Pi0gICAgICAg ICAgICAgICAgICAgICAgICAgYWZ0ZXIgdGhlIGNyZWRlbnRpYWwgcHJvdmlkZXIgaGFzIGJlZW4g c2VsZWN0ZWQgYnkgdGhlIHVzZXIuDQo+Pi0NCj4+LSAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAg ICAgICAgIENyZWRlbnRpYWwgcHJvdmlkZXIgc3VjY2Vzc2Z1bGx5IHNlbGVjdGVkLg0KPj4tICBA cmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgQXV0b0xvZ29uIGlzIE5VTEwuDQo+Pi0NCj4+ LSoqLw0KPj4tRUZJX1NUQVRVUw0KPj4tRUZJQVBJDQo+Pi1DcmVkZW50aWFsU2VsZWN0ICgNCj4+ LSAgSU4gIENPTlNUICBFRklfVVNFUl9DUkVERU5USUFMMl9QUk9UT0NPTCAgICpUaGlzLA0KPj4t ICBPVVQgICAgICAgIEVGSV9DUkVERU5USUFMX0xPR09OX0ZMQUdTICAgICAgKkF1dG9Mb2dvbg0K Pj4tICApOw0KPj4tDQo+Pi0vKioNCj4+LSAgSW5kaWNhdGUgdGhhdCB1c2VyIGludGVyZmFjZSBp bnRlcmFjdGlvbiBoYXMgZW5kZWQgZm9yIHRoZSBzcGVjaWZpZWQNCj4+Y3JlZGVudGlhbC4NCj4+ LQ0KPj4tICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGEgY3JlZGVudGlhbCBwcm92aWRl ciBpcyBkZXNlbGVjdGVkIGJ5IHRoZSB1c2VyLg0KPj4tDQo+Pi0gIEBwYXJhbVtpbl0gVGhpcyAg ICAgICAgUG9pbnRzIHRvIHRoaXMgaW5zdGFuY2Ugb2YgdGhlDQo+PkVGSV9VU0VSX0NSRURFTlRJ QUwyX1BST1RPQ09MLg0KPj4tDQo+Pi0gIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgQ3JlZGVudGlh bCBwcm92aWRlciBzdWNjZXNzZnVsbHkgZGVzZWxlY3RlZC4NCj4+LQ0KPj4tKiovDQo+Pi1FRklf U1RBVFVTDQo+Pi1FRklBUEkNCj4+LUNyZWRlbnRpYWxEZXNlbGVjdCAoDQo+Pi0gIElOIENPTlNU ICBFRklfVVNFUl9DUkVERU5USUFMMl9QUk9UT0NPTCAgICAgICAqVGhpcw0KPj4tICApOw0KPj4t DQo+Pi0vKioNCj4+LSAgUmV0dXJuIHRoZSBkZWZhdWx0IGxvZ29uIGJlaGF2aW9yIGZvciB0aGlz IHVzZXIgY3JlZGVudGlhbC4NCj4+LQ0KPj4tICBUaGlzIGZ1bmN0aW9uIHJlcG9ydHMgdGhlIGRl ZmF1bHQgbG9naW4gYmVoYXZpb3IgcmVnYXJkaW5nIHRoaXMgY3JlZGVudGlhbA0KPj5wcm92aWRl ci4NCj4+LQ0KPj4tICBAcGFyYW1baW5dICBUaGlzICAgICAgIFBvaW50cyB0byB0aGlzIGluc3Rh bmNlIG9mIHRoZQ0KPj5FRklfVVNFUl9DUkVERU5USUFMMl9QUk9UT0NPTC4NCj4+LSAgQHBhcmFt W291dF0gQXV0b0xvZ29uICBPbiByZXR1cm4sIGhvbGRzIHdoZXRoZXIgdGhlIGNyZWRlbnRpYWwN Cj5wcm92aWRlcg0KPj5zaG91bGQgYmUgdXNlZA0KPj4tICAgICAgICAgICAgICAgICAgICAgICAg IGJ5IGRlZmF1bHQgdG8gYXV0b21hdGljYWxseSBsb2cgb24gdGhlIHVzZXIuDQo+Pi0NCj4+LSAg QHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgIERlZmF1bHQgaW5mb3JtYXRpb24gc3VjY2Vz c2Z1bGx5IHJldHVybmVkLg0KPj4tICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgQXV0 b0xvZ29uIGlzIE5VTEwuDQo+Pi0NCj4+LSoqLw0KPj4tRUZJX1NUQVRVUw0KPj4tRUZJQVBJDQo+ Pi1DcmVkZW50aWFsRGVmYXVsdCAoDQo+Pi0gIElOIENPTlNUICBFRklfVVNFUl9DUkVERU5USUFM Ml9QUk9UT0NPTCAgICAgICAqVGhpcywNCj4+LSAgT1VUICAgICAgIEVGSV9DUkVERU5USUFMX0xP R09OX0ZMQUdTICAgICAgICAgICpBdXRvTG9nb24NCj4+LSAgKTsNCj4+LQ0KPj4tLyoqDQo+Pi0g IFJldHVybiBpbmZvcm1hdGlvbiBhdHRhY2hlZCB0byB0aGUgY3JlZGVudGlhbCBwcm92aWRlci4N Cj4+LQ0KPj4tICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdXNlciBpbmZvcm1hdGlvbi4NCj4+LQ0K Pj4tICBAcGFyYW1baW5dICAgICAgVGhpcyAgICAgICAgICBQb2ludHMgdG8gdGhpcyBpbnN0YW5j ZSBvZiB0aGUNCj4+RUZJX1VTRVJfQ1JFREVOVElBTDJfUFJPVE9DT0wuDQo+Pi0gIEBwYXJhbVtp bl0gICAgICBVc2VySW5mbyAgICAgIEhhbmRsZSBvZiB0aGUgdXNlciBpbmZvcm1hdGlvbiBkYXRh IHJlY29yZC4NCj4+LSAgQHBhcmFtW291dF0gICAgIEluZm8gICAgICAgICAgT24gZW50cnksIHBv aW50cyB0byBhIGJ1ZmZlciBvZiBhdCBsZWFzdCAqSW5mb1NpemUNCj4+Ynl0ZXMuIE9uDQo+Pi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQsIGhvbGRzIHRoZSB1c2VyIGluZm9y bWF0aW9uLiBJZiB0aGUgYnVmZmVyIGlzIHRvbyBzbWFsbA0KPj4tICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB0byBob2xkIHRoZSBpbmZvcm1hdGlvbiwgdGhlbiBFRklfQlVGRkVSX1RP T19TTUFMTCBpcw0KPj5yZXR1cm5lZA0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBhbmQgSW5mb1NpemUgaXMgdXBkYXRlZCB0byBjb250YWluIHRoZSBudW1iZXIgb2YgYnl0ZXMN Cj4+YWN0dWFsbHkNCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQu DQo+Pi0gIEBwYXJhbVtpbiwgb3V0XSBJbmZvU2l6ZSAgICAgIE9uIGVudHJ5LCBwb2ludHMgdG8g dGhlIHNpemUgb2YgSW5mby4gT24gcmV0dXJuLA0KPj5wb2ludHMgdG8gdGhlDQo+Pi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgb2YgdGhlIHVzZXIgaW5mb3JtYXRpb24uDQo+ Pi0NCj4+LSAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgSW5mb3JtYXRpb24gcmV0dXJu ZWQgc3VjY2Vzc2Z1bGx5Lg0KPj4tICBAcmV0dmFsIEVGSV9CVUZGRVJfVE9PX1NNQUxMICBUaGUg c2l6ZSBzcGVjaWZpZWQgYnkgSW5mb1NpemUgaXMgdG9vDQo+c21hbGwNCj4+dG8gaG9sZCBhbGwg b2YgdGhlDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIgaW5mb3JtYXRp b24uIFRoZSBzaXplIHJlcXVpcmVkIGlzIHJldHVybmVkIGluICpJbmZvU2l6ZS4NCj4+LSAgQHJl dHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgSW5mbyBpcyBOVUxMIG9yIEluZm9TaXplIGlzIE5V TEwuDQo+Pi0gIEByZXR2YWwgRUZJX05PVF9GT1VORCAgICAgICAgIFRoZSBzcGVjaWZpZWQgVXNl ckluZm8gZG9lcyBub3QgcmVmZXIgdG8gYQ0KPj52YWxpZCB1c2VyIGluZm8gaGFuZGxlLg0KPj4t DQo+Pi0qKi8NCj4+LUVGSV9TVEFUVVMNCj4+LUVGSUFQSQ0KPj4tQ3JlZGVudGlhbEdldEluZm8g KA0KPj4tICBJTiBDT05TVCAgRUZJX1VTRVJfQ1JFREVOVElBTDJfUFJPVE9DT0wgICAgICAgKlRo aXMsDQo+Pi0gIElOICAgICAgICBFRklfVVNFUl9JTkZPX0hBTkRMRSAgICAgICAgICAgICAgICBV c2VySW5mbywNCj4+LSAgT1VUICAgICAgIEVGSV9VU0VSX0lORk8gICAgICAgICAgICAgICAgICAg ICAgICpJbmZvLA0KPj4tICBJTiBPVVQgICAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKkluZm9TaXplDQo+Pi0gICk7DQo+Pi0NCj4+LQ0KPj4tLyoqDQo+Pi0gIEVudW1lcmF0 ZSBhbGwgb2YgdGhlIHVzZXIgaW5mb3JtYXRpb25zIG9uIHRoZSBjcmVkZW50aWFsIHByb3ZpZGVy Lg0KPj4tDQo+Pi0gIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgbmV4dCB1c2VyIGluZm9ybWF0 aW9uIHJlY29yZC4gVG8gcmV0cmlldmUgdGhlIGZpcnN0DQo+PnVzZXINCj4+LSAgaW5mb3JtYXRp b24gcmVjb3JkIGhhbmRsZSwgcG9pbnQgVXNlckluZm8gYXQgYSBOVUxMLiBFYWNoIHN1YnNlcXVl bnQgY2FsbA0KPj53aWxsIHJldHJpZXZlDQo+Pi0gIGFub3RoZXIgdXNlciBpbmZvcm1hdGlvbiBy ZWNvcmQgaGFuZGxlIHVudGlsIHRoZXJlIGFyZSBubyBtb3JlLCBhdCB3aGljaA0KPj5wb2ludCBV c2VySW5mbw0KPj4tICB3aWxsIHBvaW50IHRvIE5VTEwuDQo+Pi0NCj4+LSAgQHBhcmFtW2luXSAg ICAgIFRoaXMgICAgIFBvaW50cyB0byB0aGlzIGluc3RhbmNlIG9mIHRoZQ0KPj5FRklfVVNFUl9D UkVERU5USUFMMl9QUk9UT0NPTC4NCj4+LSAgQHBhcmFtW2luLCBvdXRdIFVzZXJJbmZvIE9uIGVu dHJ5LCBwb2ludHMgdG8gdGhlIHByZXZpb3VzIHVzZXINCj5pbmZvcm1hdGlvbg0KPj5oYW5kbGUg b3IgTlVMTA0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gc3RhcnQgZW51bWVyYXRp b24uIE9uIGV4aXQsIHBvaW50cyB0byB0aGUgbmV4dCB1c2VyDQo+PmluZm9ybWF0aW9uDQo+Pi0g ICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUgb3IgTlVMTCBpZiB0aGVyZSBpcyBubyBt b3JlIHVzZXIgaW5mb3JtYXRpb24uDQo+Pi0NCj4+LSAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAg ICAgICAgIFVzZXIgaW5mb3JtYXRpb24gcmV0dXJuZWQuDQo+Pi0gIEByZXR2YWwgRUZJX05PVF9G T1VORCAgICAgICAgICBObyBtb3JlIHVzZXIgaW5mb3JtYXRpb24gZm91bmQuDQo+Pi0gIEByZXR2 YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICBVc2VySW5mbyBpcyBOVUxMLg0KPj4tDQo+Pi0qKi8N Cj4+LUVGSV9TVEFUVVMNCj4+LUVGSUFQSQ0KPj4tQ3JlZGVudGlhbEdldE5leHRJbmZvICgNCj4+ LSAgSU4gQ09OU1QgIEVGSV9VU0VSX0NSRURFTlRJQUwyX1BST1RPQ09MICAgICAgICpUaGlzLA0K Pj4tICBJTiBPVVQgICAgRUZJX1VTRVJfSU5GT19IQU5ETEUgICAgICAgICAgICAgICAgKlVzZXJJ bmZvDQo+Pi0gICk7DQo+Pi0NCj4+LS8qKg0KPj4tICBEZWxldGUgYSB1c2VyIG9uIHRoaXMgY3Jl ZGVudGlhbCBwcm92aWRlci4NCj4+LQ0KPj4tICBUaGlzIGZ1bmN0aW9uIGRlbGV0ZXMgYSB1c2Vy IG9uIHRoaXMgY3JlZGVudGlhbCBwcm92aWRlci4NCj4+LQ0KPj4tICBAcGFyYW1baW5dICAgICBU aGlzICAgICAgICAgICAgUG9pbnRzIHRvIHRoaXMgaW5zdGFuY2Ugb2YgdGhlDQo+PkVGSV9VU0VS X0NSRURFTlRJQUwyX1BST1RPQ09MLg0KPj4tICBAcGFyYW1baW5dICAgICBVc2VyICAgICAgICAg ICAgVGhlIHVzZXIgcHJvZmlsZSBoYW5kbGUgdG8gZGVsZXRlLg0KPj4tDQo+Pi0gIEByZXR2YWwg RUZJX1NVQ0NFU1MgICAgICAgICAgICBVc2VyIHByb2ZpbGUgd2FzIHN1Y2Nlc3NmdWxseSBkZWxl dGVkLg0KPj4tICBAcmV0dmFsIEVGSV9BQ0NFU1NfREVOSUVEICAgICAgQ3VycmVudCB1c2VyIHBy b2ZpbGUgZG9lcyBub3QgcGVybWl0DQo+PmRlbGV0aW9uIG9uIHRoZSB1c2VyIHByb2ZpbGUgaGFu ZGxlLg0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWl0aGVyIHRoZSB1c2Vy IHByb2ZpbGUgY2Fubm90IGRlbGV0ZSBvbiBhbnkgdXNlciBwcm9maWxlIG9yDQo+PmNhbm5vdCBk ZWxldGUNCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uIGEgdXNlciBwcm9m aWxlIG90aGVyIHRoYW4gdGhlIGN1cnJlbnQgdXNlciBwcm9maWxlLg0KPj4tICBAcmV0dmFsIEVG SV9VTlNVUFBPUlRFRCAgICAgICAgVGhpcyBjcmVkZW50aWFsIHByb3ZpZGVyIGRvZXMgbm90IHN1 cHBvcnQNCj4+ZGVsZXRpb24gaW4gdGhlIHByZS1PUy4NCj4+LSAgQHJldHZhbCBFRklfREVWSUNF X0VSUk9SICAgICAgIFRoZSBuZXcgY3JlZGVudGlhbCBjb3VsZCBub3QgYmUgZGVsZXRlZA0KPj5i ZWNhdXNlIG9mIGEgZGV2aWNlIGVycm9yLg0KPj4tICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFN RVRFUiAgVXNlciBkb2VzIG5vdCByZWZlciB0byBhIHZhbGlkIHVzZXINCj4+cHJvZmlsZSBoYW5k bGUuDQo+Pi0qKi8NCj4+LUVGSV9TVEFUVVMNCj4+LUVGSUFQSQ0KPj4tQ3JlZGVudGlhbERlbGV0 ZSAoDQo+Pi0gIElOIENPTlNUICBFRklfVVNFUl9DUkVERU5USUFMMl9QUk9UT0NPTCAgICAgICAq VGhpcywNCj4+LSAgSU4gICAgICAgIEVGSV9VU0VSX1BST0ZJTEVfSEFORExFICAgICAgICAgICAg IFVzZXINCj4+LSAgKTsNCj4+LQ0KPj4tI2VuZGlmDQo+PmRpZmYgLS1naXQNCj4+YS9TZWN1cml0 eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vUHdkQ3JlZGVudGlhbFByb3ZpZGVyRHhlL1B3ZENyZWRl bnRpYWwNCj5QDQo+PnJvdmlkZXIudW5pDQo+PmIvU2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0 aW9uL1B3ZENyZWRlbnRpYWxQcm92aWRlckR4ZS9Qd2RDcmVkZW50aWENCj5sDQo+PlByb3ZpZGVy LnVuaQ0KPj5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCj4+aW5kZXggNzQ5ZTlhOGYxNy4uMDAw MDAwMDAwMA0KPj4tLS0NCj4+YS9TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vUHdkQ3Jl ZGVudGlhbFByb3ZpZGVyRHhlL1B3ZENyZWRlbnRpYWwNCj5QDQo+PnJvdmlkZXIudW5pDQo+Pisr KyAvZGV2L251bGwNCj4+QEAgLTEsMjEgKzAsMCBAQA0KPj4tLy8gLyoqIEBmaWxlDQo+Pi0vLyBQ cm92aWRlcyBhIHBhc3N3b3JkIGNyZWRlbnRpYWwgcHJvdmlkZXIgaW1wbGVtZW50YXRpb24NCj4+ LS8vDQo+Pi0vLyBUaGlzIG1vZHVsZSBwcm92aWRlcyBhIHBhc3N3b3JkIGNyZWRlbnRpYWwgcHJv dmlkZXIgaW1wbGVtZW50YXRpb24uDQo+Pi0vLw0KPj4tLy8gQ29weXJpZ2h0IChjKSAyMDA5IC0g MjAxNCwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPj4tLy8N Cj4+LS8vIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCj4+LS8v IGFyZSBsaWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25k aXRpb25zIG9mIHRoZQ0KPkJTRA0KPj5MaWNlbnNlDQo+Pi0vLyB3aGljaCBhY2NvbXBhbmllcyB0 aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBtYXkgYmUNCj4+ Zm91bmQgYXQNCj4+LS8vIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ic2QtbGljZW5z ZS5waHANCj4+LS8vIFRIRSBQUk9HUkFNIElTIERJU1RSSUJVVEVEIFVOREVSIFRIRSBCU0QgTElD RU5TRSBPTiBBTiAiQVMgSVMiDQo+PkJBU0lTLA0KPj4tLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9S IFJFUFJFU0VOVEFUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSDQo+PkVYUFJFU1MgT1IgSU1QTElF RC4NCj4+LS8vDQo+Pi0vLyAqKi8NCj4+LQ0KPj4tDQo+Pi0jc3RyaW5nIFNUUl9NT0RVTEVfQUJT VFJBQ1QgICAgICAgICAgICAgI2xhbmd1YWdlIGVuLVVTICJQcm92aWRlcyBhDQo+PnBhc3N3b3Jk IGNyZWRlbnRpYWwgcHJvdmlkZXIgaW1wbGVtZW50YXRpb24iDQo+Pi0NCj4+LSNzdHJpbmcgU1RS X01PRFVMRV9ERVNDUklQVElPTiAgICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgIlRoaXMgbW9kdWxl DQo+PnByb3ZpZGVzIGEgcGFzc3dvcmQgY3JlZGVudGlhbCBwcm92aWRlciBpbXBsZW1lbnRhdGlv bi4iDQo+Pi0NCj4+ZGlmZiAtLWdpdA0KPj5hL1NlY3VyaXR5UGtnL1VzZXJJZGVudGlmaWNhdGlv bi9Qd2RDcmVkZW50aWFsUHJvdmlkZXJEeGUvUHdkQ3JlZGVudGlhbA0KPlANCj4+cm92aWRlckRh dGEuaA0KPj5iL1NlY3VyaXR5UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Qd2RDcmVkZW50aWFsUHJv dmlkZXJEeGUvUHdkQ3JlZGVudGlhDQo+bA0KPj5Qcm92aWRlckRhdGEuaA0KPj5kZWxldGVkIGZp bGUgbW9kZSAxMDA2NDQNCj4+aW5kZXggMzFiZGZlNGM1MC4uMDAwMDAwMDAwMA0KPj4tLS0NCj4+ YS9TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vUHdkQ3JlZGVudGlhbFByb3ZpZGVyRHhl L1B3ZENyZWRlbnRpYWwNCj5QDQo+PnJvdmlkZXJEYXRhLmgNCj4+KysrIC9kZXYvbnVsbA0KPj5A QCAtMSwzMCArMCwwIEBADQo+Pi0vKiogQGZpbGUNCj4+LSAgRGF0YSBzdHJ1Y3R1cmUgdXNlZCBi eSB0aGUgUGFzc3dvcmQgQ3JlZGVudGlhbCBQcm92aWRlciBkcml2ZXIuDQo+Pi0NCj4+LUNvcHly aWdodCAoYykgMjAwOSAtIDIwMTgsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2Vy dmVkLjxCUj4NCj4+LVRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMN Cj4+LWFyZSBsaWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIGFuZCBj b25kaXRpb25zIG9mIHRoZSBCU0QNCj4+TGljZW5zZQ0KPj4td2hpY2ggYWNjb21wYW5pZXMgdGhp cyBkaXN0cmlidXRpb24uICBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIG1heSBiZQ0KPj5m b3VuZCBhdA0KPj4taHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBo cA0KPj4tDQo+Pi1USEUgUFJPR1JBTSBJUyBESVNUUklCVVRFRCBVTkRFUiBUSEUgQlNEIExJQ0VO U0UgT04gQU4gIkFTIElTIg0KPkJBU0lTLA0KPj4tV0lUSE9VVCBXQVJSQU5USUVTIE9SIFJFUFJF U0VOVEFUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSDQo+PkVYUFJFU1MgT1IgSU1QTElFRC4NCj4+ LQ0KPj4tKiovDQo+Pi0NCj4+LSNpZm5kZWYgX1BXRF9DUkVERU5USUFMX1BST1ZJREVSX0RBVEFf SF8NCj4+LSNkZWZpbmUgX1BXRF9DUkVERU5USUFMX1BST1ZJREVSX0RBVEFfSF8NCj4+LQ0KPj4t I2luY2x1ZGUgPEd1aWQvUHdkQ3JlZGVudGlhbFByb3ZpZGVySGlpLmg+DQo+Pi0NCj4+LS8vDQo+ Pi0vLyBGb3JtcyBkZWZpbml0aW9uDQo+Pi0vLw0KPj4tI2RlZmluZSBGT1JNSURfR0VUX1BBU1NX T1JEX0ZPUk0gICAgICAxDQo+Pi0NCj4+LS8vDQo+Pi0vLyBLZXkgZGVmaW5hdGlvbg0KPj4tLy8N Cj4+LSNkZWZpbmUgS0VZX0dFVF9QQVNTV09SRCAgICAgICAgICAgICAgMHgxMDAwDQo+Pi0NCj4+ LSNlbmRpZg0KPj5kaWZmIC0tZ2l0DQo+PmEvU2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9u L1B3ZENyZWRlbnRpYWxQcm92aWRlckR4ZS9Qd2RDcmVkZW50aWFsDQo+UA0KPj5yb3ZpZGVyRHhl LmluZg0KPj5iL1NlY3VyaXR5UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Qd2RDcmVkZW50aWFsUHJv dmlkZXJEeGUvUHdkQ3JlZGVudGlhDQo+bA0KPj5Qcm92aWRlckR4ZS5pbmYNCj4+ZGVsZXRlZCBm aWxlIG1vZGUgMTAwNjQ0DQo+PmluZGV4IGFiN2JhMmM5MTMuLjAwMDAwMDAwMDANCj4+LS0tDQo+ PmEvU2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9uL1B3ZENyZWRlbnRpYWxQcm92aWRlckR4 ZS9Qd2RDcmVkZW50aWFsDQo+UA0KPj5yb3ZpZGVyRHhlLmluZg0KPj4rKysgL2Rldi9udWxsDQo+ PkBAIC0xLDY1ICswLDAgQEANCj4+LSMjIEBmaWxlDQo+Pi0jICBQcm92aWRlcyBhIHBhc3N3b3Jk IGNyZWRlbnRpYWwgcHJvdmlkZXIgaW1wbGVtZW50YXRpb24NCj4+LSMgIFRoaXMgbW9kdWxlIHBy b3ZpZGVzIGEgcGFzc3dvcmQgY3JlZGVudGlhbCBwcm92aWRlciBpbXBsZW1lbnRhdGlvbi4NCj4+ LSMNCj4+LSMgQ29weXJpZ2h0IChjKSAyMDA5IC0gMjAxOCwgSW50ZWwgQ29ycG9yYXRpb24uIEFs bCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPj4tIyBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBh bnlpbmcgbWF0ZXJpYWxzDQo+Pi0jIGFyZSBsaWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFibGUgdW5k ZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZQ0KPkJTRA0KPj5MaWNlbnNlDQo+Pi0j IHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgZnVsbCB0ZXh0IG9mIHRo ZSBsaWNlbnNlIG1heSBiZQ0KPj5mb3VuZCBhdA0KPj4tIyBodHRwOi8vb3BlbnNvdXJjZS5vcmcv bGljZW5zZXMvYnNkLWxpY2Vuc2UucGhwDQo+Pi0jIFRIRSBQUk9HUkFNIElTIERJU1RSSUJVVEVE IFVOREVSIFRIRSBCU0QgTElDRU5TRSBPTiBBTiAiQVMgSVMiDQo+PkJBU0lTLA0KPj4tIyBXSVRI T1VUIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVINCj4+ RVhQUkVTUyBPUiBJTVBMSUVELg0KPj4tIw0KPj4tIyMNCj4+LQ0KPj4tW0RlZmluZXNdDQo+Pi0g IElORl9WRVJTSU9OICAgICAgICAgICAgICAgICAgICA9IDB4MDAwMTAwMDUNCj4+LSAgQkFTRV9O QU1FICAgICAgICAgICAgICAgICAgICAgID0gUHdkQ3JlZGVudGlhbFByb3ZpZGVyDQo+Pi0gIE1P RFVMRV9VTklfRklMRSAgICAgICAgICAgICAgICA9IFB3ZENyZWRlbnRpYWxQcm92aWRlci51bmkN Cj4+LSAgRklMRV9HVUlEICAgICAgICAgICAgICAgICAgICAgID0gRDZDNTg5RUEtREQyOS00OWVm LTk3RjYtMUE5RkUxOUEwNEUwDQo+Pi0gIE1PRFVMRV9UWVBFICAgICAgICAgICAgICAgICAgICA9 IFVFRklfRFJJVkVSDQo+Pi0gIFZFUlNJT05fU1RSSU5HICAgICAgICAgICAgICAgICA9IDEuMA0K Pj4tICBFTlRSWV9QT0lOVCAgICAgICAgICAgICAgICAgICAgPSBQYXNzd29yZFByb3ZpZGVySW5p dA0KPj4tDQo+Pi1bU291cmNlc10NCj4+LSAgUHdkQ3JlZGVudGlhbFByb3ZpZGVyLmMNCj4+LSAg UHdkQ3JlZGVudGlhbFByb3ZpZGVyLmgNCj4+LSAgUHdkQ3JlZGVudGlhbFByb3ZpZGVyRGF0YS5o DQo+Pi0gIFB3ZENyZWRlbnRpYWxQcm92aWRlclZmci5WZnINCj4+LSAgUHdkQ3JlZGVudGlhbFBy b3ZpZGVyU3RyaW5ncy51bmkNCj4+LQ0KPj4tW1BhY2thZ2VzXQ0KPj4tICBNZGVQa2cvTWRlUGtn LmRlYw0KPj4tICBNZGVNb2R1bGVQa2cvTWRlTW9kdWxlUGtnLmRlYw0KPj4tICBDcnlwdG9Qa2cv Q3J5cHRvUGtnLmRlYw0KPj4tICBTZWN1cml0eVBrZy9TZWN1cml0eVBrZy5kZWMNCj4+LQ0KPj4t W0xpYnJhcnlDbGFzc2VzXQ0KPj4tICBVZWZpUnVudGltZVNlcnZpY2VzVGFibGVMaWINCj4+LSAg VWVmaUJvb3RTZXJ2aWNlc1RhYmxlTGliDQo+Pi0gIFVlZmlEcml2ZXJFbnRyeVBvaW50DQo+Pi0g IE1lbW9yeUFsbG9jYXRpb25MaWINCj4+LSAgQmFzZU1lbW9yeUxpYg0KPj4tICBEZWJ1Z0xpYg0K Pj4tICBIaWlMaWINCj4+LSAgVWVmaUxpYg0KPj4tICBCYXNlQ3J5cHRMaWINCj4+LQ0KPj4tW0d1 aWRzXQ0KPj4tICBnRWZpVXNlckNyZWRlbnRpYWxDbGFzc1Bhc3N3b3JkR3VpZCAgICAgICAgICAg IyMgU09NRVRJTUVTX0NPTlNVTUVTDQo+PiMjIEdVSUQNCj4+LQ0KPj4tICAjIyBQUk9EVUNFUyAg ICAgICAgICAgICAjIyBWYXJpYWJsZTpMIlB3ZENyZWRlbnRpYWwiDQo+Pi0gICMjIENPTlNVTUVT ICAgICAgICAgICAgICMjIFZhcmlhYmxlOkwiUHdkQ3JlZGVudGlhbCINCj4+LSAgIyMgQ09OU1VN RVMgICAgICAgICAgICAgIyMgSElJDQo+Pi0gICMjIFNPTUVUSU1FU19DT05TVU1FUyAgICMjIEdV SUQgICAgICAgICAgICAgICAjICBUaGUgY3JlZGVudGlhbCBwcm92aWRlcg0KPj5pZGVudGlmaWVy DQo+Pi0gIGdQd2RDcmVkZW50aWFsUHJvdmlkZXJHdWlkDQo+Pi0NCj4+LVtQcm90b2NvbHNdDQo+ Pi0gIGdFZmlEZXZpY2VQYXRoUHJvdG9jb2xHdWlkICAgICAgICAgICAgICAgICAgICAjIyBQUk9E VUNFUw0KPj4tICBnRWZpSGlpQ29uZmlnQWNjZXNzUHJvdG9jb2xHdWlkICAgICAgICAgICAgICAg IyMgUFJPRFVDRVMNCj4+LSAgZ0VmaVVzZXJDcmVkZW50aWFsMlByb3RvY29sR3VpZCAgICAgICAg ICAgICAgICMjIFBST0RVQ0VTDQo+Pi0gIGdFZmlVc2VyTWFuYWdlclByb3RvY29sR3VpZCAgICAg ICAgICAgICAgICAgICAjIyBTT01FVElNRVNfQ09OU1VNRVMNCj4+LQ0KPj4tW1VzZXJFeHRlbnNp b25zLlRpYW5vQ29yZS4iRXh0cmFGaWxlcyJdDQo+Pi0gIFB3ZENyZWRlbnRpYWxQcm92aWRlckV4 dHJhLnVuaQ0KPj4tDQo+PmRpZmYgLS1naXQNCj4+YS9TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmlj YXRpb24vUHdkQ3JlZGVudGlhbFByb3ZpZGVyRHhlL1B3ZENyZWRlbnRpYWwNCj5QDQo+PnJvdmlk ZXJFeHRyYS51bmkNCj4+Yi9TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vUHdkQ3JlZGVu dGlhbFByb3ZpZGVyRHhlL1B3ZENyZWRlbnRpYQ0KPmwNCj4+UHJvdmlkZXJFeHRyYS51bmkNCj4+ ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0DQo+PmluZGV4IGJjYzIyMGE1MWQuLjAwMDAwMDAwMDAN Cj4+LS0tDQo+PmEvU2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9uL1B3ZENyZWRlbnRpYWxQ cm92aWRlckR4ZS9Qd2RDcmVkZW50aWFsDQo+UA0KPj5yb3ZpZGVyRXh0cmEudW5pDQo+PisrKyAv ZGV2L251bGwNCj4+QEAgLTEsMTkgKzAsMCBAQA0KPj4tLy8gLyoqIEBmaWxlDQo+Pi0vLyBQd2RD cmVkZW50aWFsUHJvdmlkZXIgTG9jYWxpemVkIFN0cmluZ3MgYW5kIENvbnRlbnQNCj4+LS8vDQo+ Pi0vLyBDb3B5cmlnaHQgKGMpIDIwMTMgLSAyMDE4LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJp Z2h0cyByZXNlcnZlZC48QlI+DQo+Pi0vLw0KPj4tLy8gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNj b21wYW55aW5nIG1hdGVyaWFscw0KPj4tLy8gYXJlIGxpY2Vuc2VkIGFuZCBtYWRlIGF2YWlsYWJs ZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlDQo+QlNEDQo+PkxpY2Vuc2UN Cj4+LS8vIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgZnVsbCB0ZXh0 IG9mIHRoZSBsaWNlbnNlIG1heSBiZQ0KPj5mb3VuZCBhdA0KPj4tLy8gaHR0cDovL29wZW5zb3Vy Y2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocA0KPj4tLy8gVEhFIFBST0dSQU0gSVMgRElT VFJJQlVURUQgVU5ERVIgVEhFIEJTRCBMSUNFTlNFIE9OIEFOICJBUyBJUyINCj4+QkFTSVMsDQo+ Pi0vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TIE9GIEFOWSBLSU5ELCBF SVRIRVINCj4+RVhQUkVTUyBPUiBJTVBMSUVELg0KPj4tLy8NCj4+LS8vICoqLw0KPj4tDQo+Pi0j c3RyaW5nIFNUUl9QUk9QRVJUSUVTX01PRFVMRV9OQU1FDQo+Pi0jbGFuZ3VhZ2UgZW4tVVMNCj4+ LSJQYXNzd29yZCBDcmVkZW50aWFsIFByb3ZpZGVyIg0KPj4tDQo+Pi0NCj4+ZGlmZiAtLWdpdA0K Pj5hL1NlY3VyaXR5UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Qd2RDcmVkZW50aWFsUHJvdmlkZXJE eGUvUHdkQ3JlZGVudGlhbA0KPlANCj4+cm92aWRlclN0cmluZ3MudW5pDQo+PmIvU2VjdXJpdHlQ a2cvVXNlcklkZW50aWZpY2F0aW9uL1B3ZENyZWRlbnRpYWxQcm92aWRlckR4ZS9Qd2RDcmVkZW50 aWENCj5sDQo+PlByb3ZpZGVyU3RyaW5ncy51bmkNCj4+ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0 DQo+PmluZGV4IGU3YjMxMjZmODMuLjAwMDAwMDAwMDANCj4+LS0tDQo+PmEvU2VjdXJpdHlQa2cv VXNlcklkZW50aWZpY2F0aW9uL1B3ZENyZWRlbnRpYWxQcm92aWRlckR4ZS9Qd2RDcmVkZW50aWFs DQo+UA0KPj5yb3ZpZGVyU3RyaW5ncy51bmkNCj4+KysrIC9kZXYvbnVsbA0KPj5AQCAtMSwzOCAr MCwwIEBADQo+Pi0vKiogQGZpbGUNCj4+LSAgU3RyaW5nIGRlZmluaXRpb25zIGZvciB0aGUgUGFz c3dvcmQgQ3JlZGVudGlhbCBQcm92aWRlci4NCj4+LQ0KPj4tQ29weXJpZ2h0IChjKSAyMDA5IC0g MjAxOCwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPj4tVGhp cyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KPj4tYXJlIGxpY2Vuc2Vk IGFuZCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhl IEJTRA0KPj5MaWNlbnNlDQo+Pi13aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbi4g IFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgbWF5IGJlDQo+PmZvdW5kIGF0DQo+Pi1odHRw Oi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vuc2UucGhwLg0KPj4tDQo+Pi1USEUg UFJPR1JBTSBJUyBESVNUUklCVVRFRCBVTkRFUiBUSEUgQlNEIExJQ0VOU0UgT04gQU4gIkFTIElT Ig0KPkJBU0lTLA0KPj4tV0lUSE9VVCBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUyBPRiBB TlkgS0lORCwgRUlUSEVSDQo+PkVYUFJFU1MgT1IgSU1QTElFRC4NCj4+LQ0KPj4tKiovDQo+Pi0N Cj4+LSNsYW5nZGVmIGVuLVVTICJFbmdsaXNoIg0KPj4tI2xhbmdkZWYgZnItRlIgICJGcmFuY2Fp cyINCj4+LQ0KPj4tI3N0cmluZyBTVFJfQ1JFREVOVElBTF9USVRMRSAgICAgICAgICAgICAgICAg ICAgI2xhbmd1YWdlIGVuLVVTICAiUGFzc3dvcmQNCj4+Q3JlZGVudGlhbCBQcm92aWRlciINCj4+ LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2xhbmd1 YWdlIGZyLUZSICAiUGFzc3dvcmQgQ3JlZGVudGlhbCBQcm92aWRlcg0KPj4oRnJlbmNoKSINCj4+ LSNzdHJpbmcgU1RSX0ZPUk1fVElUTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2xhbmd1 YWdlIGVuLVVTICAiR2V0IFBhc3N3b3JkIg0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAjbGFuZ3VhZ2UgZnItRlIgICJHZXQgUGFzc3dvcmQoRnJl bmNoKSINCj4+LSNzdHJpbmcgU1RSX05VTExfU1RSSU5HICAgICAgICAgICAgICAgICAgICAgICAg ICAgI2xhbmd1YWdlIGVuLVVTICAiIg0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAjbGFuZ3VhZ2UgZnItRlIgICIiDQo+Pi0jc3RyaW5nIFNUUl9J TlBVVF9QQVNTV09SRCAgICAgICAgICAgICAgICAgICAgICAgICNsYW5ndWFnZSBlbi1VUyAgIlBs ZWFzZSBJbnB1dA0KPj5QYXNzd29yZCINCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgI2xhbmd1YWdlIGZyLUZSICAiUGxlYXNlIElucHV0IFBhc3N3 b3JkKEZyZW5jaCkiDQo+Pi0jc3RyaW5nIFNUUl9QUk9WSURFUl9OQU1FICAgICAgICAgICAgICAg ICAgICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgICJJTlRFTA0KPj5QYXNzd29yZCBDcmVkZW50aWFs IFByb3ZpZGVyIg0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAjbGFuZ3VhZ2UgZnItRlIgICJJTlRFTCBQYXNzd29yZCBDcmVkZW50aWFsDQo+PlBy b3ZpZGVyKEZyZW5jaCkiDQo+Pi0jc3RyaW5nIFNUUl9QUk9WSURFUl9UWVBFX05BTUUgICAgICAg ICAgICAgICAgICAgICNsYW5ndWFnZSBlbi1VUyAgIlBhc3N3b3JkDQo+PkNyZWRlbnRpYWwgUHJv dmlkZXIiDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICNsYW5ndWFnZSBmci1GUiAgIlBhc3N3b3JkIENyZWRlbnRpYWwNCj4+UHJvdmlkZXIoRnJl bmNoKSINCj4+LSNzdHJpbmcgU1RSX0lOUFVUX1BBU1NXT1JEX0FHQUlOICAgICAgICAgICAgICAg ICAgI2xhbmd1YWdlIGVuLVVTICAiSW5wdXQNCj4+UGFzc3dvcmQgQWdhaW4iDQo+Pi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNsYW5ndWFnZSBmci1G UiAgIklucHV0IFBhc3N3b3JkIEFnYWluIChGcmVuY2gpIg0KPj4tI3N0cmluZyBTVFJfRFJBV19B X0xJTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgICItLS0tLS0t LS0tLS0tLS0tLS0tLQ0KPi0NCj4+LS0tLS0tLS0iDQo+Pi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICNsYW5ndWFnZSBmci1GUiAgIi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSINCj4+LSNzdHJpbmcgU1RSX1BBU1NXT1JEX0lOQ09S UkVDVCAgICAgICAgICAgICAgICAgICAgI2xhbmd1YWdlIGVuLVVTICAiDQo+SW5jb3JyZWN0DQo+ PlBhc3N3b3JkISAgICAgIg0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAjbGFuZ3VhZ2UgZnItRlIgICIgICAgSW5jb3JyZWN0IFBhc3N3b3JkISAo RnJlbmNoKQ0KPiINCj4+LSNzdHJpbmcgU1RSX1BBU1NXT1JEX01JU01BVENIICAgICAgICAgICAg ICAgICAgICAgI2xhbmd1YWdlIGVuLVVTICAiICAgIFRoZQ0KPj5QYXNzd29yZCBNaXNtYXRjaCEg ICAgIg0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAjbGFuZ3VhZ2UgZnItRlIgICIgICBUaGUgUGFzc3dvcmQgTWlzbWF0Y2ghDQo+KEZyZW5jaCkN Cj4+Ig0KPj4tDQo+PmRpZmYgLS1naXQNCj4+YS9TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRp b24vUHdkQ3JlZGVudGlhbFByb3ZpZGVyRHhlL1B3ZENyZWRlbnRpYWwNCj5QDQo+PnJvdmlkZXJW ZnIuVmZyDQo+PmIvU2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9uL1B3ZENyZWRlbnRpYWxQ cm92aWRlckR4ZS9Qd2RDcmVkZW50aWENCj5sDQo+PlByb3ZpZGVyVmZyLlZmcg0KPj5kZWxldGVk IGZpbGUgbW9kZSAxMDA2NDQNCj4+aW5kZXggNjA5NzIyMDNiMC4uMDAwMDAwMDAwMA0KPj4tLS0N Cj4+YS9TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vUHdkQ3JlZGVudGlhbFByb3ZpZGVy RHhlL1B3ZENyZWRlbnRpYWwNCj5QDQo+PnJvdmlkZXJWZnIuVmZyDQo+PisrKyAvZGV2L251bGwN Cj4+QEAgLTEsMzQgKzAsMCBAQA0KPj4tLyoqIEBmaWxlDQo+Pi0gIFBhc3N3b3JkIENyZWRlbnRp YWwgUHJvdmlkZXIgZm9ybXNldC4NCj4+LQ0KPj4tQ29weXJpZ2h0IChjKSAyMDA5IC0gMjAxMCwg SW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPj4tVGhpcyBwcm9n cmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KPj4tYXJlIGxpY2Vuc2VkIGFuZCBt YWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEJTRA0K Pj5MaWNlbnNlDQo+Pi13aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbi4gIFRoZSBm dWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgbWF5IGJlDQo+PmZvdW5kIGF0DQo+Pi1odHRwOi8vb3Bl bnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vuc2UucGhwDQo+Pi0NCj4+LVRIRSBQUk9HUkFN IElTIERJU1RSSUJVVEVEIFVOREVSIFRIRSBCU0QgTElDRU5TRSBPTiBBTiAiQVMgSVMiDQo+QkFT SVMsDQo+Pi1XSVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TIE9GIEFOWSBLSU5E LCBFSVRIRVINCj4+RVhQUkVTUyBPUiBJTVBMSUVELg0KPj4tDQo+Pi0qKi8NCj4+LQ0KPj4tI2lu Y2x1ZGUgIlB3ZENyZWRlbnRpYWxQcm92aWRlckRhdGEuaCINCj4+LQ0KPj4tZm9ybXNldA0KPj4t ICBndWlkICAgICAgPSBQV0RfQ1JFREVOVElBTF9QUk9WSURFUl9HVUlELA0KPj4tICB0aXRsZSAg ICAgPSBTVFJJTkdfVE9LRU4oU1RSX0NSRURFTlRJQUxfVElUTEUpLA0KPj4tICBoZWxwICAgICAg PSBTVFJJTkdfVE9LRU4oU1RSX05VTExfU1RSSU5HKSwNCj4+LSAgY2xhc3NndWlkID0gUFdEX0NS RURFTlRJQUxfUFJPVklERVJfR1VJRCwNCj4+LQ0KPj4tICBmb3JtIGZvcm1pZCA9IEZPUk1JRF9H RVRfUEFTU1dPUkRfRk9STSwNCj4+LSAgICB0aXRsZSA9IFNUUklOR19UT0tFTihTVFJfRk9STV9U SVRMRSk7DQo+Pi0NCj4+LSAgICB0ZXh0DQo+Pi0gICAgICBoZWxwICAgPSBTVFJJTkdfVE9LRU4o U1RSX05VTExfU1RSSU5HKSwNCj4+LSAgICAgIHRleHQgICA9IFNUUklOR19UT0tFTihTVFJfSU5Q VVRfUEFTU1dPUkQpLA0KPj4tICAgICAgZmxhZ3MgID0gSU5URVJBQ1RJVkUsDQo+Pi0gICAgICBr ZXkgICAgPSBLRVlfR0VUX1BBU1NXT1JEOw0KPj4tDQo+Pi0gIGVuZGZvcm07DQo+Pi0NCj4+LWVu ZGZvcm1zZXQ7DQo+PlwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQ0KPj5kaWZmIC0tZ2l0DQo+ PmEvU2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9uL1VzYkNyZWRlbnRpYWxQcm92aWRlckR4 ZS9Vc2JDcmVkZW50aWFsDQo+UHINCj4+b3ZpZGVyLmMNCj4+Yi9TZWN1cml0eVBrZy9Vc2VySWRl bnRpZmljYXRpb24vVXNiQ3JlZGVudGlhbFByb3ZpZGVyRHhlL1VzYkNyZWRlbnRpYWwNCj5Qcg0K Pj5vdmlkZXIuYw0KPj5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCj4+aW5kZXggODQxZTk3NTEw My4uMDAwMDAwMDAwMA0KPj4tLS0NCj4+YS9TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24v VXNiQ3JlZGVudGlhbFByb3ZpZGVyRHhlL1VzYkNyZWRlbnRpYWwNCj5Qcg0KPj5vdmlkZXIuYw0K Pj4rKysgL2Rldi9udWxsDQo+PkBAIC0xLDE0MTAgKzAsMCBAQA0KPj4tLyoqIEBmaWxlDQo+Pi0g IFVzYiBDcmVkZW50aWFsIFByb3ZpZGVyIGRyaXZlciBpbXBsZW1lbmV0YXRpb24uDQo+Pi0NCj4+ LUNvcHlyaWdodCAoYykgMjAwOSAtIDIwMTgsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRz IHJlc2VydmVkLjxCUj4NCj4+LVRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRl cmlhbHMNCj4+LWFyZSBsaWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1z IGFuZCBjb25kaXRpb25zIG9mIHRoZSBCU0QNCj4+TGljZW5zZQ0KPj4td2hpY2ggYWNjb21wYW5p ZXMgdGhpcyBkaXN0cmlidXRpb24uICBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIG1heSBi ZQ0KPj5mb3VuZCBhdA0KPj4taHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNl bnNlLnBocA0KPj4tDQo+Pi1USEUgUFJPR1JBTSBJUyBESVNUUklCVVRFRCBVTkRFUiBUSEUgQlNE IExJQ0VOU0UgT04gQU4gIkFTIElTIg0KPkJBU0lTLA0KPj4tV0lUSE9VVCBXQVJSQU5USUVTIE9S IFJFUFJFU0VOVEFUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSDQo+PkVYUFJFU1MgT1IgSU1QTElF RC4NCj4+LQ0KPj4tKiovDQo+Pi0NCj4+LSNpbmNsdWRlICJVc2JDcmVkZW50aWFsUHJvdmlkZXIu aCINCj4+LQ0KPj4tQ1JFREVOVElBTF9UQUJMRSAgICAgICAgICAgICptVXNiVGFibGUgICAgICAg PSBOVUxMOw0KPj4tVVNCX1BST1ZJREVSX0NBTExCQUNLX0lORk8gICptQ2FsbGJhY2tJbmZvICAg PSBOVUxMOw0KPj4tVVNCX0NSRURFTlRJQUxfSU5GTyAgICAgICAgICptVXNiSW5mb0hhbmRsZSAg PSBOVUxMOw0KPj4tDQo+Pi1FRklfVVNFUl9DUkVERU5USUFMMl9QUk9UT0NPTCAgZ1VzYkNyZWRl bnRpYWxQcm92aWRlckRyaXZlciA9IHsNCj4+LSAgVVNCX0NSRURFTlRJQUxfUFJPVklERVJfR1VJ RCwNCj4+LSAgRUZJX1VTRVJfQ1JFREVOVElBTF9DTEFTU19TRUNVUkVfQ0FSRCwNCj4+LSAgQ3Jl ZGVudGlhbEVucm9sbCwNCj4+LSAgQ3JlZGVudGlhbEZvcm0sDQo+Pi0gIENyZWRlbnRpYWxUaWxl LA0KPj4tICBDcmVkZW50aWFsVGl0bGUsDQo+Pi0gIENyZWRlbnRpYWxVc2VyLA0KPj4tICBDcmVk ZW50aWFsU2VsZWN0LA0KPj4tICBDcmVkZW50aWFsRGVzZWxlY3QsDQo+Pi0gIENyZWRlbnRpYWxE ZWZhdWx0LA0KPj4tICBDcmVkZW50aWFsR2V0SW5mbywNCj4+LSAgQ3JlZGVudGlhbEdldE5leHRJ bmZvLA0KPj4tICBFRklfQ1JFREVOVElBTF9DQVBBQklMSVRJRVNfRU5ST0xMLA0KPj4tICBDcmVk ZW50aWFsRGVsZXRlDQo+Pi19Ow0KPj4tDQo+Pi0NCj4+LS8qKg0KPj4tICBHZXQgc3RyaW5nIGJ5 IHN0cmluZyBpZCBmcm9tIEhJSSBJbnRlcmZhY2UuDQo+Pi0NCj4+LQ0KPj4tICBAcGFyYW1baW5d IElkICAgICAgU3RyaW5nIElEIHRvIGdldCB0aGUgc3RyaW5nIGZyb20uDQo+Pi0NCj4+LSAgQHJl dHZhbCAgQ0hBUjE2ICogIFN0cmluZyBmcm9tIElELg0KPj4tICBAcmV0dmFsICBOVUxMICAgICAg SWYgZXJyb3Igb2NjdXJzLg0KPj4tDQo+Pi0qKi8NCj4+LUNIQVIxNiAqDQo+Pi1HZXRTdHJpbmdC eUlkICgNCj4+LSAgSU4gRUZJX1NUUklOR19JRCAgICAgICAgICAgICBJZA0KPj4tICApDQo+Pi17 DQo+Pi0gIC8vDQo+Pi0gIC8vIEdldCB0aGUgY3VycmVudCBzdHJpbmcgZm9yIHRoZSBjdXJyZW50 IExhbmd1YWdlDQo+Pi0gIC8vDQo+Pi0gIHJldHVybiBIaWlHZXRTdHJpbmcgKG1DYWxsYmFja0lu Zm8tPkhpaUhhbmRsZSwgSWQsIE5VTEwpOw0KPj4tfQ0KPj4tDQo+Pi0NCj4+LS8qKg0KPj4tICBF eHBhbmQgcGFzc3dvcmQgdGFibGUgc2l6ZS4NCj4+LQ0KPj4tKiovDQo+Pi1WT0lEDQo+Pi1FeHBh bmRUYWJsZVNpemUgKA0KPj4tICBWT0lEDQo+Pi0gICkNCj4+LXsNCj4+LSAgQ1JFREVOVElBTF9U QUJMRSAgKk5ld1RhYmxlOw0KPj4tICBVSU5UTiAgICAgICAgICAgICBDb3VudDsNCj4+LQ0KPj4t ICBDb3VudCA9IG1Vc2JUYWJsZS0+TWF4Q291bnQgKyBVU0JfVEFCTEVfSU5DOw0KPj4tICAvLw0K Pj4tICAvLyBDcmVhdGUgbmV3IGNyZWRlbnRpYWwgdGFibGUuDQo+Pi0gIC8vDQo+Pi0gIE5ld1Rh YmxlID0gQWxsb2NhdGVaZXJvUG9vbCAoDQo+Pi0gICAgICAgICAgICAgICBzaXplb2YgKENSRURF TlRJQUxfVEFCTEUpIC0gc2l6ZW9mIChVU0JfSU5GTykgKw0KPj4tICAgICAgICAgICAgICAgQ291 bnQgKiBzaXplb2YgKFVTQl9JTkZPKQ0KPj4tICAgICAgICAgICAgICAgKTsNCj4+LSAgQVNTRVJU IChOZXdUYWJsZSAhPSBOVUxMKTsNCj4+LQ0KPj4tICBOZXdUYWJsZS0+TWF4Q291bnQgPSBDb3Vu dDsNCj4+LSAgTmV3VGFibGUtPkNvdW50ICAgID0gbVVzYlRhYmxlLT5Db3VudDsNCj4+LQ0KPj4t ICAvLw0KPj4tICAvLyBDb3B5IG9sZCBlbnRyaWVzLg0KPj4tICAvLw0KPj4tICBDb3B5TWVtICgN Cj4+LSAgICAmTmV3VGFibGUtPlVzZXJJbmZvLA0KPj4tICAgICZtVXNiVGFibGUtPlVzZXJJbmZv LA0KPj4tICAgIG1Vc2JUYWJsZS0+Q291bnQgKiBzaXplb2YgKFVTQl9JTkZPKQ0KPj4tICAgICk7 DQo+Pi0gIEZyZWVQb29sIChtVXNiVGFibGUpOw0KPj4tICBtVXNiVGFibGUgPSBOZXdUYWJsZTsN Cj4+LX0NCj4+LQ0KPj4tDQo+Pi0vKioNCj4+LSAgQWRkLCB1cGRhdGUgb3IgZGVsZXRlIGluZm8g aW4gdGFibGUsIGFuZCBzeW5jIHdpdGggTlYgdmFyaWFibGUuDQo+Pi0NCj4+LSAgQHBhcmFtW2lu XSAgSW5kZXggICAgIFRoZSBpbmRleCBvZiB0aGUgcGFzc3dvcmQgaW4gdGFibGUuIElmIGluZGV4 IGlzIGZvdW5kDQo+aW4NCj4+LSAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlLCB1cGRhdGUg dGhlIGluZm8sIGVsc2UgYWRkIHRoZSBpbnRvIHRvIHRhYmxlLg0KPj4tICBAcGFyYW1baW5dICBJ bmZvICAgICAgVGhlIG5ldyBjcmVkZW50aWFsIGluZm8gdG8gYWRkIGludG8gdGFibGUuIElmIElu Zm8gaXMNCj5OVUxMLA0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoZSBpbmZv IGJ5IEluZGV4Lg0KPj4tDQo+Pi0gIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICBJbmZv IGlzIE5VTEwgd2hlbiBzYXZlIHRoZSBpbmZvLg0KPj4tICBAcmV0dmFsIEVGSV9TVUNDRVNTICAg ICAgICAgICAgTW9kaWZ5IHRoZSB0YWJsZSBzdWNjZXNzZnVsbHkuDQo+Pi0gIEByZXR2YWwgT3Ro ZXJzICAgICAgICAgICAgICAgICBGYWlsZWQgdG8gbW9kaWZ5IHRoZSB0YWJsZS4NCj4+LQ0KPj4t KiovDQo+Pi1FRklfU1RBVFVTDQo+Pi1Nb2RpZnlUYWJsZSAoDQo+Pi0gIElOICBVSU5UTiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXgsDQo+Pi0gIElOICBVU0JfSU5GTyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKiBJbmZvIE9QVElPTkFMDQo+Pi0gICkNCj4+LXsNCj4+ LSAgRUZJX1NUQVRVUyAgU3RhdHVzOw0KPj4tICBVU0JfSU5GTyAgICAqTmV3VXNiSW5mbzsNCj4+ LQ0KPj4tICBOZXdVc2JJbmZvID0gTlVMTDsNCj4+LSAgaWYgKEluZGV4IDwgbVVzYlRhYmxlLT5D b3VudCkgew0KPj4tICAgIGlmIChJbmZvID09IE5VTEwpIHsNCj4+LSAgICAgIC8vDQo+Pi0gICAg ICAvLyBEZWxldGUgdGhlIHNwZWNpZmllZCBlbnRyeS4NCj4+LSAgICAgIC8vDQo+Pi0gICAgICBt VXNiVGFibGUtPkNvdW50LS07DQo+Pi0gICAgICBpZiAoSW5kZXggIT0gbVVzYlRhYmxlLT5Db3Vu dCkgew0KPj4tICAgICAgICBOZXdVc2JJbmZvID0gJm1Vc2JUYWJsZS0+VXNlckluZm9bbVVzYlRh YmxlLT5Db3VudF07DQo+Pi0gICAgICB9DQo+Pi0gICAgfSBlbHNlIHsNCj4+LSAgICAgIC8vDQo+ Pi0gICAgICAvLyBVcGRhdGUgdGhlIHNwZWNpZmllZCBlbnRyeS4NCj4+LSAgICAgIC8vDQo+Pi0g ICAgICBOZXdVc2JJbmZvID0gSW5mbzsNCj4+LSAgICB9DQo+Pi0gIH0gZWxzZSB7DQo+Pi0gICAg Ly8NCj4+LSAgICAvLyBBZGQgYSBuZXcgZW50cnkNCj4+LSAgICAvLw0KPj4tICAgIGlmIChJbmZv ID09IE5VTEwpIHsNCj4+LSAgICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+Pi0g ICAgfQ0KPj4tDQo+Pi0gICAgaWYgKG1Vc2JUYWJsZS0+Q291bnQgPj0gbVVzYlRhYmxlLT5NYXhD b3VudCkgew0KPj4tICAgICAgRXhwYW5kVGFibGVTaXplICgpOw0KPj4tICAgIH0NCj4+LQ0KPj4t ICAgIE5ld1VzYkluZm8gPSBJbmZvOw0KPj4tICAgIG1Vc2JUYWJsZS0+Q291bnQrKzsNCj4+LSAg fQ0KPj4tDQo+Pi0gIGlmIChOZXdVc2JJbmZvICE9IE5VTEwpIHsNCj4+LSAgICBDb3B5TWVtICgm bVVzYlRhYmxlLT5Vc2VySW5mb1tJbmRleF0sIE5ld1VzYkluZm8sIHNpemVvZg0KPj4oVVNCX0lO Rk8pKTsNCj4+LSAgfQ0KPj4tDQo+Pi0gIC8vDQo+Pi0gIC8vIFNhdmUgdGhlIGNyZWRlbnRpYWwg dGFibGUuDQo+Pi0gIC8vDQo+Pi0gIFN0YXR1cyA9IGdSVC0+U2V0VmFyaWFibGUgKA0KPj4tICAg ICAgICAgICAgICAgICAgTCJVc2JDcmVkZW50aWFsIiwNCj4+LSAgICAgICAgICAgICAgICAgICZn VXNiQ3JlZGVudGlhbFByb3ZpZGVyR3VpZCwNCj4+LSAgICAgICAgICAgICAgICAgIEVGSV9WQVJJ QUJMRV9OT05fVk9MQVRJTEUgfA0KPj5FRklfVkFSSUFCTEVfQk9PVFNFUlZJQ0VfQUNDRVNTLA0K Pj4tICAgICAgICAgICAgICAgICAgbVVzYlRhYmxlLT5Db3VudCAqIHNpemVvZiAoVVNCX0lORk8p LA0KPj4tICAgICAgICAgICAgICAgICAgJm1Vc2JUYWJsZS0+VXNlckluZm8NCj4+LSAgICAgICAg ICAgICAgICAgICk7DQo+Pi0gIHJldHVybiBTdGF0dXM7DQo+Pi19DQo+Pi0NCj4+LQ0KPj4tLyoq DQo+Pi0gIENyZWF0ZSBhIGNyZWRlbnRpYWwgdGFibGUNCj4+LQ0KPj4tICBAcmV0dmFsIEVGSV9T VUNDRVNTICAgICAgQ3JlYXRlIGEgY3JlZGVudGlhbCB0YWJsZSBzdWNjZXNzZnVsbHkuDQo+Pi0g IEByZXR2YWwgT3RoZXJzICAgICAgICAgICBGYWlsZWQgdG8gY3JlYXRlIGEgcGFzc3dvcmQuDQo+ Pi0NCj4+LSoqLw0KPj4tRUZJX1NUQVRVUw0KPj4tSW5pdENyZWRlbnRpYWxUYWJsZSAoDQo+Pi0g IFZPSUQNCj4+LSAgKQ0KPj4tew0KPj4tICBFRklfU1RBVFVTICBTdGF0dXM7DQo+Pi0gIFVJTlQ4 ICAgICAgICpWYXI7DQo+Pi0gIFVJTlROICAgICAgIFZhclNpemU7DQo+Pi0NCj4+LSAgLy8NCj4+ LSAgLy8gR2V0IFVzYiBjcmVkZW50aWFsIGRhdGEgZnJvbSBOViB2YXJpYWJsZS4NCj4+LSAgLy8N Cj4+LSAgVmFyU2l6ZSA9IDA7DQo+Pi0gIFZhciAgICAgPSBOVUxMOw0KPj4tICBTdGF0dXMgID0g Z1JULT5HZXRWYXJpYWJsZSAoDQo+Pi0gICAgICAgICAgICAgICAgICAgTCJVc2JDcmVkZW50aWFs IiwNCj4+LSAgICAgICAgICAgICAgICAgICAmZ1VzYkNyZWRlbnRpYWxQcm92aWRlckd1aWQsDQo+ Pi0gICAgICAgICAgICAgICAgICAgTlVMTCwNCj4+LSAgICAgICAgICAgICAgICAgICAmVmFyU2l6 ZSwNCj4+LSAgICAgICAgICAgICAgICAgICBWYXINCj4+LSAgICAgICAgICAgICAgICAgICApOw0K Pj4tICBpZiAoU3RhdHVzID09IEVGSV9CVUZGRVJfVE9PX1NNQUxMKSB7DQo+Pi0gICAgVmFyID0g QWxsb2NhdGVaZXJvUG9vbCAoVmFyU2l6ZSk7DQo+Pi0gICAgaWYgKFZhciA9PSBOVUxMKSB7DQo+ Pi0gICAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+Pi0gICAgfQ0KPj4tICAgIFN0 YXR1cyA9IGdSVC0+R2V0VmFyaWFibGUgKA0KPj4tICAgICAgICAgICAgICAgICAgICBMIlVzYkNy ZWRlbnRpYWwiLA0KPj4tICAgICAgICAgICAgICAgICAgICAmZ1VzYkNyZWRlbnRpYWxQcm92aWRl ckd1aWQsDQo+Pi0gICAgICAgICAgICAgICAgICAgIE5VTEwsDQo+Pi0gICAgICAgICAgICAgICAg ICAgICZWYXJTaXplLA0KPj4tICAgICAgICAgICAgICAgICAgICBWYXINCj4+LSAgICAgICAgICAg ICAgICAgICAgKTsNCj4+LSAgfQ0KPj4tICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpICYmIChTdGF0 dXMgIT0gRUZJX05PVF9GT1VORCkpIHsNCj4+LSAgICByZXR1cm4gU3RhdHVzOw0KPj4tICB9DQo+ Pi0NCj4+LSAgLy8NCj4+LSAgLy8gSW5pdCBVc2IgY3JlZGVudGlhbCB0YWJsZS4NCj4+LSAgLy8N Cj4+LSAgbVVzYlRhYmxlID0gQWxsb2NhdGVaZXJvUG9vbCAoDQo+Pi0gICAgICAgICAgICAgICAg c2l6ZW9mIChDUkVERU5USUFMX1RBQkxFKSAtIHNpemVvZiAoVVNCX0lORk8pICsNCj4+LSAgICAg ICAgICAgICAgICBVU0JfVEFCTEVfSU5DICogc2l6ZW9mIChVU0JfSU5GTykgKw0KPj4tICAgICAg ICAgICAgICAgIFZhclNpemUNCj4+LSAgICAgICAgICAgICAgICApOw0KPj4tICBpZiAobVVzYlRh YmxlID09IE5VTEwpIHsNCj4+LSAgICBGcmVlUG9vbCAoVmFyKTsNCj4+LSAgICByZXR1cm4gRUZJ X09VVF9PRl9SRVNPVVJDRVM7DQo+Pi0gIH0NCj4+LQ0KPj4tICBtVXNiVGFibGUtPkNvdW50ICAg ICAgPSBWYXJTaXplIC8gc2l6ZW9mIChVU0JfSU5GTyk7DQo+Pi0gIG1Vc2JUYWJsZS0+TWF4Q291 bnQgICA9IG1Vc2JUYWJsZS0+Q291bnQgKyBVU0JfVEFCTEVfSU5DOw0KPj4tICBpZiAoVmFyICE9 IE5VTEwpIHsNCj4+LSAgICBDb3B5TWVtIChtVXNiVGFibGUtPlVzZXJJbmZvLCBWYXIsIFZhclNp emUpOw0KPj4tICAgIEZyZWVQb29sIChWYXIpOw0KPj4tICB9DQo+Pi0gIHJldHVybiBFRklfU1VD Q0VTUzsNCj4+LX0NCj4+LQ0KPj4tDQo+Pi0vKioNCj4+LSAgUmVhZCB0aGUgc3BlY2lmaWVkIGZp bGUgYnkgRmlsZU5hbWUgaW4gdGhlIFVzYiBrZXkgYW5kIHJldHVybiB0aGUgZmlsZSBzaXplDQo+ aW4NCj4+QnVmZmVyU2l6ZQ0KPj4tICBhbmQgZmlsZSBjb250ZW50IGluIEJ1ZmZlci4NCj4+LSAg Tm90ZTogdGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSB0byBmcmVlIHRoZSBidWZmZXIgbWVtb3J5 Lg0KPj4tDQo+Pi0gIEBwYXJhbSAgRmlsZU5hbWUgICAgICAgICAgICAgICBGaWxlIHRvIHJlYWQu DQo+Pi0gIEBwYXJhbSAgQnVmZmVyICAgICAgICAgICAgICAgICBSZXR1cm5lZCB3aXRoIGRhdGEg cmVhZCBmcm9tIHRoZSBmaWxlLg0KPj4tICBAcGFyYW0gIEJ1ZmZlclNpemUgICAgICAgICAgICAg U2l6ZSBvZiB0aGUgZGF0YSBidWZmZXIuDQo+Pi0NCj4+LSAgQHJldHZhbCBFRklfU1VDQ0VTUyAg ICAgICAgICAgIFRoZSBjb21tYW5kIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuDQo+Pi0gIEByZXR2 YWwgRUZJX09VVF9PRl9SRVNPVVJDRVMgICBSZXNvdXJjZSBhbGxvY2F0aW9uIGZhaWxlZC4NCj4+ LSAgQHJldHZhbCBFRklfTk9UX0ZPVU5EICAgICAgICAgIEZpbGUgbm90IGZvdW5kLg0KPj4tICBA cmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICAgRGV2aWNlIEkvTyBlcnJvci4NCj4+LQ0KPj4t KiovDQo+Pi1FRklfU1RBVFVTDQo+Pi1HZXRGaWxlRGF0YSAoDQo+Pi0gIElOICAgICBDSEFSMTYg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqRmlsZU5hbWUsDQo+Pi0gIE9VVCBWT0lE ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKkJ1ZmZlciwNCj4+LSAgT1VU IFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpCdWZmZXJTaXplDQo+ Pi0gICkNCj4+LXsNCj4+LSAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICBTdGF0dXM7 DQo+Pi0gIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXg7DQo+Pi0gIFVJTlRO ICAgICAgICAgICAgICAgICAgICAgICAgICAgSGFuZGxlQ291bnQ7DQo+Pi0gIFVJTlROICAgICAg ICAgICAgICAgICAgICAgICAgICAgU2NyYXRjaEJ1ZmZlclNpemU7DQo+Pi0gIEVGSV9IQU5ETEUg ICAgICAgICAgICAgICAgICAgICAgKkhhbmRsZUJ1ZmZlcjsNCj4+LSAgRUZJX0ZJTEUgICAgICAg ICAgICAgICAgICAgICAgICAqUm9vdEZzOw0KPj4tICBFRklfRklMRSAgICAgICAgICAgICAgICAg ICAgICAgICpGaWxlSGFuZGxlOw0KPj4tICBFRklfRklMRV9JTkZPICAgICAgICAgICAgICAgICAg ICpGaWxlSW5mbzsNCj4+LSAgRUZJX1NJTVBMRV9GSUxFX1NZU1RFTV9QUk9UT0NPTCAqU2ltcGxl RmlsZVN5c3RlbTsNCj4+LSAgRUZJX0JMT0NLX0lPX1BST1RPQ09MICAgICAgICAgICAqQmxrSW87 DQo+Pi0NCj4+LSAgRmlsZUluZm8gICAgICA9IE5VTEw7DQo+Pi0gIEZpbGVIYW5kbGUgICAgPSBO VUxMOw0KPj4tDQo+Pi0gIFN0YXR1cyA9IGdCUy0+TG9jYXRlSGFuZGxlQnVmZmVyICgNCj4+LSAg ICAgICAgICAgICAgICAgIEJ5UHJvdG9jb2wsDQo+Pi0gICAgICAgICAgICAgICAgICAmZ0VmaVNp bXBsZUZpbGVTeXN0ZW1Qcm90b2NvbEd1aWQsDQo+Pi0gICAgICAgICAgICAgICAgICBOVUxMLA0K Pj4tICAgICAgICAgICAgICAgICAgJkhhbmRsZUNvdW50LA0KPj4tICAgICAgICAgICAgICAgICAg JkhhbmRsZUJ1ZmZlcg0KPj4tICAgICAgICAgICAgICAgICAgKTsNCj4+LSAgaWYgKEVGSV9FUlJP UiAoU3RhdHVzKSkgew0KPj4tICAgIERFQlVHICgoREVCVUdfRVJST1IsICJDYW4gbm90IExvY2F0 ZSBTaW1wbGVGaWxlU3lzdGVtUHJvdG9jb2xcbiIpKTsNCj4+LSAgICBnb3RvIERvbmU7DQo+Pi0g IH0NCj4+LQ0KPj4tICAvLw0KPj4tICAvLyBGaW5kIGFuZCBvcGVuIHRoZSBmaWxlIGluIHJlbW92 YWJsZSBtZWRpYSBkaXNrLg0KPj4tICAvLw0KPj4tICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBI YW5kbGVDb3VudDsgSW5kZXgrKykgew0KPj4tICAgIFN0YXR1cyA9IGdCUy0+SGFuZGxlUHJvdG9j b2wgKA0KPj4tICAgICAgICAgICAgICAgICAgICBIYW5kbGVCdWZmZXJbSW5kZXhdLA0KPj4tICAg ICAgICAgICAgICAgICAgICAmZ0VmaUJsb2NrSW9Qcm90b2NvbEd1aWQsDQo+Pi0gICAgICAgICAg ICAgICAgICAgIChWT0lEICoqKSAmQmxrSW8NCj4+LSAgICAgICAgICAgICAgICAgICAgKTsNCj4+ LSAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+Pi0gICAgICBjb250aW51ZTsNCj4+LSAg ICB9DQo+Pi0NCj4+LSAgICBpZiAoQmxrSW8tPk1lZGlhLT5SZW1vdmFibGVNZWRpYSkgew0KPj4t ICAgICAgU3RhdHVzID0gZ0JTLT5IYW5kbGVQcm90b2NvbCAoDQo+Pi0gICAgICAgICAgICAgICAg ICAgICAgSGFuZGxlQnVmZmVyW0luZGV4XSwNCj4+LSAgICAgICAgICAgICAgICAgICAgICAmZ0Vm aVNpbXBsZUZpbGVTeXN0ZW1Qcm90b2NvbEd1aWQsDQo+Pi0gICAgICAgICAgICAgICAgICAgICAg KFZPSUQgKiopICZTaW1wbGVGaWxlU3lzdGVtDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgKTsN Cj4+LSAgICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4+LSAgICAgICAgY29udGludWU7 DQo+Pi0gICAgICB9DQo+Pi0NCj4+LSAgICAgIFN0YXR1cyA9IFNpbXBsZUZpbGVTeXN0ZW0tPk9w ZW5Wb2x1bWUgKA0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaW1wbGVG aWxlU3lzdGVtLA0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUm9vdEZz DQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+Pi0gICAgICBpZiAo RUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+Pi0gICAgICAgIGNvbnRpbnVlOw0KPj4tICAgICAgfQ0K Pj4tDQo+Pi0gICAgICBTdGF0dXMgPSBSb290RnMtPk9wZW4gKA0KPj4tICAgICAgICAgICAgICAg ICAgICAgICAgIFJvb3RGcywNCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAmRmlsZUhhbmRs ZSwNCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICBGaWxlTmFtZSwNCj4+LSAgICAgICAgICAg ICAgICAgICAgICAgICBFRklfRklMRV9NT0RFX1JFQUQsDQo+Pi0gICAgICAgICAgICAgICAgICAg ICAgICAgMA0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+Pi0gICAgICBpZiAoIUVG SV9FUlJPUiAoU3RhdHVzKSkgew0KPj4tICAgICAgICBicmVhazsNCj4+LSAgICAgIH0NCj4+LSAg ICB9DQo+Pi0gIH0NCj4+LQ0KPj4tICBGcmVlUG9vbCAoSGFuZGxlQnVmZmVyKTsNCj4+LQ0KPj4t ICBpZiAoSW5kZXggPj0gSGFuZGxlQ291bnQpIHsNCj4+LSAgICBERUJVRyAoKERFQlVHX0VSUk9S LCAiQ2FuIG5vdCBmb3VuZCB0aGUgdG9rZW4gZmlsZSFcbiIpKTsNCj4+LSAgICBTdGF0dXMgPSBF RklfTk9UX0ZPVU5EOw0KPj4tICAgIGdvdG8gRG9uZTsNCj4+LSAgfQ0KPj4tDQo+Pi0gIC8vDQo+ Pi0gIC8vIEZpZ3VyZSBvdXQgaG93IGJpZyB0aGUgZmlsZSBpcy4NCj4+LSAgLy8NCj4+LSAgU2Ny YXRjaEJ1ZmZlclNpemUgPSAwOw0KPj4tICBTdGF0dXMgPSBGaWxlSGFuZGxlLT5HZXRJbmZvICgN Cj4+LSAgICAgICAgICAgICAgICAgICAgICAgIEZpbGVIYW5kbGUsDQo+Pi0gICAgICAgICAgICAg ICAgICAgICAgICAmZ0VmaUZpbGVJbmZvR3VpZCwNCj4+LSAgICAgICAgICAgICAgICAgICAgICAg ICZTY3JhdGNoQnVmZmVyU2l6ZSwNCj4+LSAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwNCj4+ LSAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+Pi0gIGlmIChFRklfRVJST1IgKFN0YXR1cykg JiYgKFN0YXR1cyAhPSBFRklfQlVGRkVSX1RPT19TTUFMTCkpIHsNCj4+LSAgICBERUJVRyAoKERF QlVHX0VSUk9SLCAiQ2FuIG5vdCBvYnRhaW4gZmlsZSBzaXplIGluZm8hXG4iKSk7DQo+Pi0gICAg U3RhdHVzID0gRUZJX0RFVklDRV9FUlJPUjsNCj4+LSAgICBnb3RvIERvbmU7DQo+Pi0gIH0NCj4+ LQ0KPj4tICBGaWxlSW5mbyA9IEFsbG9jYXRlWmVyb1Bvb2wgKFNjcmF0Y2hCdWZmZXJTaXplKTsN Cj4+LSAgaWYgKEZpbGVJbmZvID09IE5VTEwpIHsNCj4+LSAgICBERUJVRyAoKERFQlVHX0VSUk9S LCAiQ2FuIG5vdCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciB0aGUgdG9rZW4NCj4+ZmlsZSFc biIpKTsNCj4+LSAgICBTdGF0dXMgPSBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4+LSAgICBnb3Rv IERvbmU7DQo+Pi0gIH0NCj4+LQ0KPj4tICBTdGF0dXMgPSBGaWxlSGFuZGxlLT5HZXRJbmZvICgN Cj4+LSAgICAgICAgICAgICAgICAgICAgICAgIEZpbGVIYW5kbGUsDQo+Pi0gICAgICAgICAgICAg ICAgICAgICAgICAmZ0VmaUZpbGVJbmZvR3VpZCwNCj4+LSAgICAgICAgICAgICAgICAgICAgICAg ICZTY3JhdGNoQnVmZmVyU2l6ZSwNCj4+LSAgICAgICAgICAgICAgICAgICAgICAgIEZpbGVJbmZv DQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICApOw0KPj4tICBpZiAoRUZJX0VSUk9SIChTdGF0 dXMpKSB7DQo+Pi0gICAgREVCVUcgKChERUJVR19FUlJPUiwgIkNhbiBub3Qgb2J0YWluIGZpbGUg aW5mbyBmcm9tIHRoZSB0b2tlbg0KPmZpbGUhXG4iKSk7DQo+Pi0gICAgU3RhdHVzID0gRUZJX0RF VklDRV9FUlJPUjsNCj4+LSAgICBnb3RvIERvbmU7DQo+Pi0gIH0NCj4+LQ0KPj4tICAvLw0KPj4t ICAvLyBBbGxvY2F0ZSBhIGJ1ZmZlciBmb3IgdGhlIGZpbGUuDQo+Pi0gIC8vDQo+Pi0gICpCdWZm ZXJTaXplID0gKFVJTlQzMikgRmlsZUluZm8tPkZpbGVTaXplOw0KPj4tICAqQnVmZmVyICAgICA9 IEFsbG9jYXRlWmVyb1Bvb2wgKCpCdWZmZXJTaXplKTsNCj4+LSAgaWYgKCpCdWZmZXIgPT0gTlVM TCkgew0KPj4tICAgIERFQlVHICgoREVCVUdfRVJST1IsICJDYW4gbm90IGFsbG9jYXRlIGEgYnVm ZmVyIGZvciB0aGUgZmlsZSFcbiIpKTsNCj4+LSAgICBTdGF0dXMgPSBFRklfT1VUX09GX1JFU09V UkNFUzsNCj4+LSAgICBnb3RvIERvbmU7DQo+Pi0gIH0NCj4+LQ0KPj4tICAvLw0KPj4tICAvLyBM b2FkIGZpbGUgaW50byB0aGUgYWxsb2NhdGVkIG1lbW9yeS4NCj4+LSAgLy8NCj4+LSAgU3RhdHVz ID0gRmlsZUhhbmRsZS0+UmVhZCAoRmlsZUhhbmRsZSwgQnVmZmVyU2l6ZSwgKkJ1ZmZlcik7DQo+ Pi0gIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4+LSAgICBGcmVlUG9vbCAoKkJ1ZmZlcik7 DQo+Pi0gICAgREVCVUcgKChERUJVR19FUlJPUiwgIkNhbiBub3QgcmVhZCB0aGUgdG9rZW4gZmls ZSFcbiIpKTsNCj4+LSAgICBTdGF0dXMgPSBFRklfREVWSUNFX0VSUk9SOw0KPj4tICAgIGdvdG8g RG9uZTsNCj4+LSAgfQ0KPj4tDQo+Pi0gIC8vDQo+Pi0gIC8vIENsb3NlIGZpbGUuDQo+Pi0gIC8v DQo+Pi0gIFN0YXR1cyA9IEZpbGVIYW5kbGUtPkNsb3NlIChGaWxlSGFuZGxlKTsNCj4+LSAgaWYg KEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPj4tICAgIEZyZWVQb29sICgqQnVmZmVyKTsNCj4+LSAg ICBERUJVRyAoKERFQlVHX0VSUk9SLCAiQ2FuIG5vdCBjbG9zZSB0aGUgdG9rZW4gZmlsZSAhXG4i KSk7DQo+Pi0gICAgU3RhdHVzID0gRUZJX0RFVklDRV9FUlJPUjsNCj4+LSAgfQ0KPj4tDQo+Pi1E b25lOg0KPj4tDQo+Pi0gIGlmIChGaWxlSW5mbyAhPSBOVUxMKSB7DQo+Pi0gICAgRnJlZVBvb2wg KEZpbGVJbmZvKTsNCj4+LSAgfQ0KPj4tDQo+Pi0gIHJldHVybiBTdGF0dXM7DQo+Pi19DQo+Pi0N Cj4+LQ0KPj4tLyoqDQo+Pi0gIEhhc2ggdGhlIGRhdGEgdG8gZ2V0IGNyZWRlbnRpYWwuDQo+Pi0N Cj4+LSAgQHBhcmFtW2luXSAgIEJ1ZmZlciAgICAgICAgIFBvaW50cyB0byB0aGUgZGF0YSBidWZm ZXINCj4+LSAgQHBhcmFtW2luXSAgIEJ1ZmZlclNpemUgICAgIFRoZSBzaXplIG9mIGRhdGEgaW4g YnVmZmVyLCBpbiBieXRlcy4NCj4+LSAgQHBhcmFtW291dF0gIENyZWRlbnRpYWwgICAgIFBvaW50 cyB0byB0aGUgaGFzaGVkIHJlc3VsdA0KPj4tDQo+Pi0gIEByZXR2YWwgICAgICBUUlVFICAgICAg ICAgICBIYXNoIHRoZSBkYXRhIHN1Y2Nlc3NmdWxseS4NCj4+LSAgQHJldHZhbCAgICAgIEZBTFNF ICAgICAgICAgIEZhaWxlZCB0byBoYXNoIHRoZSBkYXRhLg0KPj4tDQo+Pi0qKi8NCj4+LUJPT0xF QU4NCj4+LUdlbmVyYXRlQ3JlZGVudGlhbCAoDQo+Pi0gIElOICAgICAgVUlOVDggICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKkJ1ZmZlciwNCj4+LSAgSU4gICAgICBVSU5UTiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBCdWZmZXJTaXplLA0KPj4tICAgICBPVVQgIFVJTlQ4ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICpDcmVkZW50aWFsDQo+Pi0gICkNCj4+LXsNCj4+ LSAgQk9PTEVBTiAgICAgICAgICAgU3RhdHVzOw0KPj4tICBVSU5UTiAgICAgICAgICAgICBIYXNo U2l6ZTsNCj4+LSAgVk9JRCAgICAgICAgICAgICAgKkhhc2g7DQo+Pi0NCj4+LSAgSGFzaFNpemUg PSBTaGExR2V0Q29udGV4dFNpemUgKCk7DQo+Pi0gIEhhc2ggICAgID0gQWxsb2NhdGVQb29sIChI YXNoU2l6ZSk7DQo+Pi0gIEFTU0VSVCAoSGFzaCAhPSBOVUxMKTsNCj4+LQ0KPj4tICBTdGF0dXMg PSBTaGExSW5pdCAoSGFzaCk7DQo+Pi0gIGlmICghU3RhdHVzKSB7DQo+Pi0gICAgZ290byBEb25l Ow0KPj4tICB9DQo+Pi0NCj4+LSAgU3RhdHVzID0gU2hhMVVwZGF0ZSAoSGFzaCwgQnVmZmVyLCBC dWZmZXJTaXplKTsNCj4+LSAgaWYgKCFTdGF0dXMpIHsNCj4+LSAgICBnb3RvIERvbmU7DQo+Pi0g IH0NCj4+LQ0KPj4tICBTdGF0dXMgPSBTaGExRmluYWwgKEhhc2gsIENyZWRlbnRpYWwpOw0KPj4t DQo+Pi1Eb25lOg0KPj4tICBGcmVlUG9vbCAoSGFzaCk7DQo+Pi0gIHJldHVybiBTdGF0dXM7DQo+ Pi19DQo+Pi0NCj4+LQ0KPj4tLyoqDQo+Pi0gIFJlYWQgdGhlIHRva2VuIGZpbGUsIGFuZCBkZWZh dWx0IHRoZSBUb2tlbiBpcyBzYXZlZCBhdCB0aGUgYmVnaW5pbmcgb2YgdGhlDQo+ZmlsZS4NCj4+ LQ0KPj4tICBAcGFyYW1bb3V0XSAgVG9rZW4gICAgICAgICAgICBUb2tlbiByZWFkIGZyb20gYSBU b2tlbiBmaWxlLg0KPj4tDQo+Pi0gIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFJlYWQg YSBUb2tlbiBzdWNjZXNzZnVsbHkuDQo+Pi0gIEByZXR2YWwgT3RoZXJzICAgICAgICAgICAgICAg IEZhaWxzIHRvIHJlYWQgYSBUb2tlbi4NCj4+LQ0KPj4tKiovDQo+Pi1FRklfU1RBVFVTDQo+Pi1H ZXRUb2tlbiAoDQo+Pi0gIE9VVCBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICpUb2tlbg0KPj4tICApDQo+Pi17DQo+Pi0gIEVGSV9TVEFUVVMgIFN0YXR1czsNCj4+LSAgVUlO VDggICAgICAgKkJ1ZmZlcjsNCj4+LSAgVUlOVE4gICAgICAgQnVmU2l6ZTsNCj4+LSAgQ0hBUjE2 ICAgICAgKlRva2VuRmlsZTsNCj4+LQ0KPj4tICBCdWZTaXplID0gMDsNCj4+LSAgQnVmZmVyICA9 IE5VTEw7DQo+Pi0gIFRva2VuRmlsZSA9IFBjZEdldFB0ciAoUGNkRml4ZWRVc2JDcmVkZW50aWFs UHJvdmlkZXJUb2tlbkZpbGVOYW1lKTsNCj4+LSAgU3RhdHVzID0gR2V0RmlsZURhdGEgKFRva2Vu RmlsZSwgKFZPSUQgKikmQnVmZmVyLCAmQnVmU2l6ZSk7DQo+Pi0gIGlmIChFRklfRVJST1IgKFN0 YXR1cykpIHsNCj4+LSAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiUmVhZCBmaWxlICVzIGZyb20g VVNCIGVycm9yISBTdGF0dXM9KCVyKVxuIiwNCj4+VG9rZW5GaWxlLCBTdGF0dXMpKTsNCj4+LSAg ICByZXR1cm4gU3RhdHVzOw0KPj4tICB9DQo+Pi0NCj4+LSAgaWYgKCFHZW5lcmF0ZUNyZWRlbnRp YWwgKEJ1ZmZlciwgQnVmU2l6ZSwgVG9rZW4pKSB7DQo+Pi0gICAgREVCVUcgKChERUJVR19FUlJP UiwgIkdlbmVyYXRlIGNyZWRlbnRpYWwgZnJvbSByZWFkIGRhdGENCj5mYWlsZWQhXG4iKSk7DQo+ Pi0gICAgRnJlZVBvb2wgKEJ1ZmZlcik7DQo+Pi0gICAgcmV0dXJuIEVGSV9TRUNVUklUWV9WSU9M QVRJT047DQo+Pi0gIH0NCj4+LQ0KPj4tICBGcmVlUG9vbCAoQnVmZmVyKTsNCj4+LSAgcmV0dXJu IEVGSV9TVUNDRVNTOw0KPj4tfQ0KPj4tDQo+Pi0NCj4+LS8qKg0KPj4tICBGaW5kIGEgdXNlciBp bmZvbWF0aW9uIHJlY29yZCBieSB0aGUgaW5mb3JtYXRpb24gcmVjb3JkIHR5cGUuDQo+Pi0NCj4+ LSAgVGhpcyBmdW5jdGlvbiBzZWFyY2hlcyBhbGwgdXNlciBpbmZvcm1hdGlvbiByZWNvcmRzIG9m IFVzZXIgZnJvbSBiZWdpbm5pbmcNCj4+LSAgdW50aWwgZWl0aGVyIHRoZSBpbmZvcm1hdGlvbiBp cyBmb3VuZCBvciB0aGVyZSBhcmUgbm8gbW9yZSB1c2VyIGluZm9tYXRpb24NCj4+LSAgcmVjb3Jk LiBBIG1hdGNoIG9jY3VycyB3aGVuIGEgSW5mby5JbmZvVHlwZSBmaWVsZCBtYXRjaGVzIHRoZSB1 c2VyDQo+PmluZm9ybWF0aW9uDQo+Pi0gIHJlY29yZCB0eXBlLg0KPj4tDQo+Pi0gIEBwYXJhbVtp bl0gICAgIFVzZXIgICAgICBQb2ludHMgdG8gdGhlIHVzZXIgcHJvZmlsZSByZWNvcmQgdG8gc2Vh cmNoLg0KPj4tICBAcGFyYW1baW5dICAgICBJbmZvVHlwZSAgVGhlIGluZm9tYXRpb24gdHlwZSB0 byBiZSBzZWFyY2hlZC4NCj4+LSAgQHBhcmFtW291dF0gICAgSW5mbyAgICAgIFBvaW50cyB0byB0 aGUgdXNlciBpbmZvIGZvdW5kLCB0aGUgY2FsbGVyIGlzDQo+cmVzcG9uc2libGUNCj4+LSAgICAg ICAgICAgICAgICAgICAgICAgICAgIHRvIGZyZWUuDQo+Pi0NCj4+LSAgQHJldHZhbCBFRklfU1VD Q0VTUyAgICAgIEZpbmQgdGhlIHVzZXIgaW5mb3JtYXRpb24gc3VjY2Vzc2Z1bGx5Lg0KPj4tICBA cmV0dmFsIE90aGVycyAgICAgICAgICAgRmFpbCB0byBmaW5kIHRoZSB1c2VyIGluZm9ybWF0aW9u Lg0KPj4tDQo+Pi0qKi8NCj4+LUVGSV9TVEFUVVMNCj4+LUZpbmRVc2VySW5mb0J5VHlwZSAoDQo+ Pi0gIElOICAgICAgRUZJX1VTRVJfUFJPRklMRV9IQU5ETEUgICAgICAgICAgICAgICBVc2VyLA0K Pj4tICBJTiAgICAgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5mb1R5 cGUsDQo+Pi0gIE9VVCAgICAgRUZJX1VTRVJfSU5GTyAgICAgICAgICAgICAgICAgICAgICAgICAq KkluZm8NCj4+LSAgKQ0KPj4tew0KPj4tICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICBTdGF0 dXM7DQo+Pi0gIEVGSV9VU0VSX0lORk8gICAgICAgICAgICAgICpVc2VySW5mbzsNCj4+LSAgVUlO VE4gICAgICAgICAgICAgICAgICAgICAgVXNlckluZm9TaXplOw0KPj4tICBFRklfVVNFUl9JTkZP X0hBTkRMRSAgICAgICBVc2VySW5mb0hhbmRsZTsNCj4+LSAgRUZJX1VTRVJfTUFOQUdFUl9QUk9U T0NPTCAgKlVzZXJNYW5hZ2VyOw0KPj4tDQo+Pi0gIC8vDQo+Pi0gIC8vIEZpbmQgdXNlciBpbmZv cm1hdGlvbiBieSBpbmZvcm1hdGlvbiB0eXBlLg0KPj4tICAvLw0KPj4tICBpZiAoSW5mbyA9PSBO VUxMKSB7DQo+Pi0gICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4+LSAgfQ0KPj4t DQo+Pi0gIFN0YXR1cyA9IGdCUy0+TG9jYXRlUHJvdG9jb2wgKA0KPj4tICAgICAgICAgICAgICAg ICAgJmdFZmlVc2VyTWFuYWdlclByb3RvY29sR3VpZCwNCj4+LSAgICAgICAgICAgICAgICAgIE5V TEwsDQo+Pi0gICAgICAgICAgICAgICAgICAoVk9JRCAqKikgJlVzZXJNYW5hZ2VyDQo+Pi0gICAg ICAgICAgICAgICAgICApOw0KPj4tICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+Pi0gICAg cmV0dXJuIEVGSV9OT1RfRk9VTkQ7DQo+Pi0gIH0NCj4+LQ0KPj4tICAvLw0KPj4tICAvLyBHZXQg ZWFjaCB1c2VyIGluZm9ybWF0aW9uLg0KPj4tICAvLw0KPj4tDQo+Pi0gIFVzZXJJbmZvSGFuZGxl ID0gTlVMTDsNCj4+LSAgVXNlckluZm8gICAgICAgPSBOVUxMOw0KPj4tICBVc2VySW5mb1NpemUg ICA9IDA7DQo+Pi0gIHdoaWxlIChUUlVFKSB7DQo+Pi0gICAgU3RhdHVzID0gVXNlck1hbmFnZXIt PkdldE5leHRJbmZvIChVc2VyTWFuYWdlciwgVXNlciwNCj4+JlVzZXJJbmZvSGFuZGxlKTsNCj4+ LSAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+Pi0gICAgICBicmVhazsNCj4+LSAgICB9 DQo+Pi0gICAgLy8NCj4+LSAgICAvLyBHZXQgaW5mb3JtYXRpb24uDQo+Pi0gICAgLy8NCj4+LSAg ICBTdGF0dXMgPSBVc2VyTWFuYWdlci0+R2V0SW5mbyAoDQo+Pi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgVXNlck1hbmFnZXIsDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNl ciwNCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VySW5mb0hhbmRsZSwNCj4+LSAg ICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VySW5mbywNCj4+LSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAmVXNlckluZm9TaXplDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg KTsNCj4+LSAgICBpZiAoU3RhdHVzID09IEVGSV9CVUZGRVJfVE9PX1NNQUxMKSB7DQo+Pi0gICAg ICBpZiAoVXNlckluZm8gIT0gTlVMTCkgew0KPj4tICAgICAgICBGcmVlUG9vbCAoVXNlckluZm8p Ow0KPj4tICAgICAgfQ0KPj4tICAgICAgVXNlckluZm8gPSBBbGxvY2F0ZVplcm9Qb29sIChVc2Vy SW5mb1NpemUpOw0KPj4tICAgICAgaWYgKFVzZXJJbmZvID09IE5VTEwpIHsNCj4+LSAgICAgICAg cmV0dXJuIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPj4tICAgICAgfQ0KPj4tICAgICAgU3RhdHVz ID0gVXNlck1hbmFnZXItPkdldEluZm8gKA0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgVXNlck1hbmFnZXIsDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VyLA0K Pj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlckluZm9IYW5kbGUsDQo+Pi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VySW5mbywNCj4+LSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICZVc2VySW5mb1NpemUNCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICk7DQo+Pi0gICAgfQ0KPj4tICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4+LSAg ICAgIGJyZWFrOw0KPj4tICAgIH0NCj4+LQ0KPj4tICAgIEFTU0VSVCAoVXNlckluZm8gIT0gTlVM TCk7DQo+Pi0gICAgaWYgKFVzZXJJbmZvLT5JbmZvVHlwZSA9PSBJbmZvVHlwZSkgew0KPj4tICAg ICAgKkluZm8gPSBVc2VySW5mbzsNCj4+LSAgICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4+LSAg ICB9DQo+Pi0gIH0NCj4+LQ0KPj4tICBpZiAoVXNlckluZm8gIT0gTlVMTCkgew0KPj4tICAgIEZy ZWVQb29sIChVc2VySW5mbyk7DQo+Pi0gIH0NCj4+LSAgcmV0dXJuIFN0YXR1czsNCj4+LX0NCj4+ LQ0KPj4tDQo+Pi0vKioNCj4+LSAgVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplIHRoZSBkYXRhIG1h aW5seSB1c2VkIGluIGZvcm0gYnJvd3Nlci4NCj4+LQ0KPj4tICBAcmV0dmFsIEVGSV9TVUNDRVNT ICAgICAgICAgIEluaXRpYWxpemUgZm9ybSBkYXRhIHN1Y2Nlc3NmdWxseS4NCj4+LSAgQHJldHZh bCBPdGhlcnMgICAgICAgICAgICAgICBGYWlsIHRvIEluaXRpYWxpemUgZm9ybSBkYXRhLg0KPj4t DQo+Pi0qKi8NCj4+LUVGSV9TVEFUVVMNCj4+LUluaXRGb3JtQnJvd3NlciAoDQo+Pi0gIFZPSUQN Cj4+LSAgKQ0KPj4tew0KPj4tICBVU0JfUFJPVklERVJfQ0FMTEJBQ0tfSU5GTyAgKkNhbGxiYWNr SW5mbzsNCj4+LQ0KPj4tICAvLw0KPj4tICAvLyBJbml0aWFsaXplIGRyaXZlciBwcml2YXRlIGRh dGEuDQo+Pi0gIC8vDQo+Pi0gIENhbGxiYWNrSW5mbyA9IEFsbG9jYXRlWmVyb1Bvb2wgKHNpemVv Zg0KPihVU0JfUFJPVklERVJfQ0FMTEJBQ0tfSU5GTykpOw0KPj4tICBpZiAoQ2FsbGJhY2tJbmZv ID09IE5VTEwpIHsNCj4+LSAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+Pi0gIH0N Cj4+LQ0KPj4tICBDYWxsYmFja0luZm8tPkRyaXZlckhhbmRsZSAgPSBOVUxMOw0KPj4tDQo+Pi0g IC8vDQo+Pi0gIC8vIFB1Ymxpc2ggSElJIGRhdGEuDQo+Pi0gIC8vDQo+Pi0gIENhbGxiYWNrSW5m by0+SGlpSGFuZGxlID0gSGlpQWRkUGFja2FnZXMgKA0KPj4tICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJmdVc2JDcmVkZW50aWFsUHJvdmlkZXJHdWlkLA0KPj4tICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgQ2FsbGJhY2tJbmZvLT5Ecml2ZXJIYW5kbGUsDQo+Pi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBVc2JDcmVkZW50aWFsUHJvdmlkZXJTdHJpbmdzLA0KPj4tICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTA0KPj4tICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKTsNCj4+LSAgaWYgKENhbGxiYWNrSW5mby0+SGlpSGFuZGxlID09IE5VTEwpIHsN Cj4+LSAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+Pi0gIH0NCj4+LSAgbUNhbGxi YWNrSW5mbyA9IENhbGxiYWNrSW5mbzsNCj4+LQ0KPj4tICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ Pi19DQo+Pi0NCj4+LQ0KPj4tLyoqDQo+Pi0gIEVucm9sbCBhIHVzZXIgb24gYSBjcmVkZW50aWFs IHByb3ZpZGVyLg0KPj4tDQo+Pi0gIFRoaXMgZnVuY3Rpb24gZW5yb2xscyBhIHVzZXIgb24gdGhp cyBjcmVkZW50aWFsIHByb3ZpZGVyLiBJZiB0aGUgdXNlciBleGlzdHMgb24NCj4+LSAgdGhpcyBj cmVkZW50aWFsIHByb3ZpZGVyLCB1cGRhdGUgdGhlIHVzZXIgaW5mb3JtYXRpb24gb24gdGhpcyBj cmVkZW50aWFsDQo+PnByb3ZpZGVyOw0KPj4tICBvdGhlcndpc2UgYWRkIHRoZSB1c2VyIGluZm9y bWF0aW9uIG9uIGNyZWRlbnRpYWwgcHJvdmlkZXIuDQo+Pi0NCj4+LSAgQHBhcmFtW2luXSBUaGlz ICAgICAgICAgICAgICAgIFBvaW50cyB0byB0aGlzIGluc3RhbmNlIG9mDQo+PkVGSV9VU0VSX0NS RURFTlRJQUwyX1BST1RPQ09MLg0KPj4tICBAcGFyYW1baW5dIFVzZXIgICAgICAgICAgICAgICAg VGhlIHVzZXIgcHJvZmlsZSB0byBlbnJvbGwuDQo+Pi0NCj4+LSAgQHJldHZhbCBFRklfU1VDQ0VT UyAgICAgICAgICAgIFVzZXIgcHJvZmlsZSB3YXMgc3VjY2Vzc2Z1bGx5IGVucm9sbGVkLg0KPj4t ICBAcmV0dmFsIEVGSV9BQ0NFU1NfREVOSUVEICAgICAgQ3VycmVudCB1c2VyIHByb2ZpbGUgZG9l cyBub3QgcGVybWl0DQo+PmVucm9sbG1lbnQgb24gdGhlDQo+Pi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB1c2VyIHByb2ZpbGUgaGFuZGxlLiBFaXRoZXIgdGhlIHVzZXIgcHJvZmls ZSBjYW5ub3QgZW5yb2xsDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbiBh bnkgdXNlciBwcm9maWxlIG9yIGNhbm5vdCBlbnJvbGwgb24gYSB1c2VyIHByb2ZpbGUNCj4+LSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVyIHRoYW4gdGhlIGN1cnJlbnQgdXNl ciBwcm9maWxlLg0KPj4tICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICAgVGhpcyBjcmVk ZW50aWFsIHByb3ZpZGVyIGRvZXMgbm90IHN1cHBvcnQNCj4+ZW5yb2xsbWVudCBpbg0KPj4tICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHByZS1PUy4NCj4+LSAgQHJldHZhbCBF RklfREVWSUNFX0VSUk9SICAgICAgIFRoZSBuZXcgY3JlZGVudGlhbCBjb3VsZCBub3QgYmUgY3Jl YXRlZA0KPj5iZWNhdXNlIG9mIGEgZGV2aWNlDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBlcnJvci4NCj4+LSAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgIFVzZXIg ZG9lcyBub3QgcmVmZXIgdG8gYSB2YWxpZCB1c2VyDQo+PnByb2ZpbGUgaGFuZGxlLg0KPj4tDQo+ Pi0qKi8NCj4+LUVGSV9TVEFUVVMNCj4+LUVGSUFQSQ0KPj4tQ3JlZGVudGlhbEVucm9sbCAoDQo+ Pi0gIElOIENPTlNUICBFRklfVVNFUl9DUkVERU5USUFMMl9QUk9UT0NPTCAgICAgICAqVGhpcywN Cj4+LSAgSU4gICAgICAgIEVGSV9VU0VSX1BST0ZJTEVfSEFORExFICAgICAgICAgICAgIFVzZXIN Cj4+LSAgKQ0KPj4tew0KPj4tICBFRklfU1RBVFVTICAgICAgICAgICAgICAgIFN0YXR1czsNCj4+ LSAgVUlOVE4gICAgICAgICAgICAgICAgICAgICBJbmRleDsNCj4+LSAgVVNCX0lORk8gICAgICAg ICAgICAgICAgICBVc2JJbmZvOw0KPj4tICBFRklfVVNFUl9JTkZPICAgICAgICAgICAgICpVc2Vy SW5mbzsNCj4+LSAgRUZJX0lOUFVUX0tFWSAgICAgICAgICAgICBLZXk7DQo+Pi0gIFVJTlQ4ICAg ICAgICAgICAgICAgICAgICAgKlVzZXJJZDsNCj4+LSAgQ0hBUjE2ICAgICAgICAgICAgICAgICAg ICAqUXVlc3Rpb25TdHI7DQo+Pi0gIENIQVIxNiAgICAgICAgICAgICAgICAgICAgKlByb21wdFN0 cjsNCj4+LQ0KPj4tICBpZiAoKFRoaXMgPT0gTlVMTCkgfHwgKFVzZXIgPT0gTlVMTCkpIHsNCj4+ LSAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPj4tICB9DQo+Pi0NCj4+LSAgLy8N Cj4+LSAgLy8gR2V0IFVzZXIgSWRlbnRpZmllcg0KPj4tICAvLw0KPj4tICBVc2VySW5mbyA9IE5V TEw7DQo+Pi0gIFN0YXR1cyA9IEZpbmRVc2VySW5mb0J5VHlwZSAoDQo+Pi0gICAgICAgICAgICAg VXNlciwNCj4+LSAgICAgICAgICAgICBFRklfVVNFUl9JTkZPX0lERU5USUZJRVJfUkVDT1JELA0K Pj4tICAgICAgICAgICAgICZVc2VySW5mbw0KPj4tICAgICAgICAgICAgICk7DQo+Pi0gIGlmIChF RklfRVJST1IgKFN0YXR1cykpIHsNCj4+LSAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVS Ow0KPj4tICB9DQo+Pi0NCj4+LSAgQ29weU1lbSAoVXNiSW5mby5Vc2VySWQsIChVSU5UOCAqKSAo VXNlckluZm8gKyAxKSwgc2l6ZW9mDQo+PihFRklfVVNFUl9JTkZPX0lERU5USUZJRVIpKTsNCj4+ LSAgRnJlZVBvb2wgKFVzZXJJbmZvKTsNCj4+LQ0KPj4tICAvLw0KPj4tICAvLyBHZXQgVG9rZW4g YW5kIFVzZXIgSUQgdG8gVXNiSW5mby4NCj4+LSAgLy8NCj4+LSAgU3RhdHVzID0gR2V0VG9rZW4g KFVzYkluZm8uVG9rZW4pOw0KPj4tICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+Pi0gICAg UXVlc3Rpb25TdHIgPSBHZXRTdHJpbmdCeUlkIChTVFJJTkdfVE9LRU4NCj4+KFNUUl9SRUFEX1VT Ql9UT0tFTl9FUlJPUikpOw0KPj4tICAgIFByb21wdFN0ciAgID0gR2V0U3RyaW5nQnlJZCAoU1RS SU5HX1RPS0VOIChTVFJfSU5TRVJUX1VTQl9UT0tFTikpOw0KPj4tICAgIENyZWF0ZVBvcFVwICgN Cj4+LSAgICAgIEVGSV9MSUdIVEdSQVkgfCBFRklfQkFDS0dST1VORF9CTFVFLA0KPj4tICAgICAg JktleSwNCj4+LSAgICAgIFF1ZXN0aW9uU3RyLA0KPj4tICAgICAgTCIiLA0KPj4tICAgICAgUHJv bXB0U3RyLA0KPj4tICAgICAgTlVMTA0KPj4tICAgICAgKTsNCj4+LSAgICBGcmVlUG9vbCAoUXVl c3Rpb25TdHIpOw0KPj4tICAgIEZyZWVQb29sIChQcm9tcHRTdHIpOw0KPj4tICAgIHJldHVybiBT dGF0dXM7DQo+Pi0gIH0NCj4+LQ0KPj4tICAvLw0KPj4tICAvLyBDaGVjayB3aGV0aGVyIFVzZXIg aXMgZXZlciBlbnJvbGxlZCBpbiB0aGUgcHJvdmlkZXIuDQo+Pi0gIC8vDQo+Pi0gIGZvciAoSW5k ZXggPSAwOyBJbmRleCA8IG1Vc2JUYWJsZS0+Q291bnQ7IEluZGV4KyspIHsNCj4+LSAgICBVc2Vy SWQgPSAoVUlOVDggKikgJm1Vc2JUYWJsZS0+VXNlckluZm9bSW5kZXhdLlVzZXJJZDsNCj4+LSAg ICBpZiAoQ29tcGFyZU1lbSAoVXNlcklkLCAoVUlOVDggKikgJlVzYkluZm8uVXNlcklkLCBzaXpl b2YNCj4+KEVGSV9VU0VSX0lORk9fSURFTlRJRklFUikpID09IDApIHsNCj4+LSAgICAgIC8vDQo+ Pi0gICAgICAvLyBVc2VyIGFscmVhZHkgZXhpc3RzLCB1cGRhdGUgdGhlIHBhc3N3b3JkLg0KPj4t ICAgICAgLy8NCj4+LSAgICAgIGJyZWFrOw0KPj4tICAgIH0NCj4+LSAgfQ0KPj4tDQo+Pi0gIC8v DQo+Pi0gIC8vIEVucm9sbCB0aGUgVXNlciB0byB0aGUgcHJvdmlkZXIuDQo+Pi0gIC8vDQo+Pi0g IFN0YXR1cyA9IE1vZGlmeVRhYmxlIChJbmRleCwgJlVzYkluZm8pOw0KPj4tICBpZiAoRUZJX0VS Uk9SIChTdGF0dXMpKSB7DQo+Pi0gICAgcmV0dXJuIFN0YXR1czsNCj4+LSAgfQ0KPj4tDQo+Pi0g IHJldHVybiBFRklfU1VDQ0VTUzsNCj4+LX0NCj4+LQ0KPj4tDQo+Pi0vKioNCj4+LSAgUmV0dXJu cyB0aGUgdXNlciBpbnRlcmZhY2UgaW5mb3JtYXRpb24gdXNlZCBkdXJpbmcgdXNlciBpZGVudGlm aWNhdGlvbi4NCj4+LQ0KPj4tICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgaW5mb3JtYXRpb24gYWJv dXQgdGhlIGZvcm0gdXNlZCB3aGVuIGludGVyYWN0aW5nDQo+PndpdGggdGhlDQo+Pi0gIHVzZXIg ZHVyaW5nIHVzZXIgaWRlbnRpZmljYXRpb24uIFRoZSBmb3JtIGlzIHRoZSBmaXJzdCBlbmFibGVk IGZvcm0gaW4gdGhlDQo+PmZvcm0tc2V0DQo+Pi0gIGNsYXNzIEVGSV9ISUlfVVNFUl9DUkVERU5U SUFMX0ZPUk1TRVRfR1VJRCBpbnN0YWxsZWQgb24gdGhlIEhJSQ0KPj5oYW5kbGUgSGlpSGFuZGxl LiBJZg0KPj4tICB0aGUgdXNlciBjcmVkZW50aWFsIHByb3ZpZGVyIGRvZXMgbm90IHJlcXVpcmUg YSBmb3JtIHRvIGlkZW50aWZ5IHRoZSB1c2VyLA0KPj50aGVuIHRoaXMNCj4+LSAgZnVuY3Rpb24g c2hvdWxkIHJldHVybiBFRklfTk9UX0ZPVU5ELg0KPj4tDQo+Pi0gIEBwYXJhbVtpbl0gIFRoaXMg ICAgICAgUG9pbnRzIHRvIHRoaXMgaW5zdGFuY2Ugb2YgdGhlDQo+PkVGSV9VU0VSX0NSRURFTlRJ QUwyX1BST1RPQ09MLg0KPj4tICBAcGFyYW1bb3V0XSBIaWkgICAgICAgIE9uIHJldHVybiwgaG9s ZHMgdGhlIEhJSSBkYXRhYmFzZSBoYW5kbGUuDQo+Pi0gIEBwYXJhbVtvdXRdIEZvcm1TZXRJZCAg T24gcmV0dXJuLCBob2xkcyB0aGUgaWRlbnRpZmllciBvZiB0aGUgZm9ybSBzZXQNCj4+d2hpY2gg Y29udGFpbnMNCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZm9ybSB1c2VkIGR1cmlu ZyB1c2VyIGlkZW50aWZpY2F0aW9uLg0KPj4tICBAcGFyYW1bb3V0XSBGb3JtSWQgICAgIE9uIHJl dHVybiwgaG9sZHMgdGhlIGlkZW50aWZpZXIgb2YgdGhlIGZvcm0gdXNlZA0KPj5kdXJpbmcgdXNl cg0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgIGlkZW50aWZpY2F0aW9uLg0KPj4tDQo+Pi0g IEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICBGb3JtIHJldHVybmVkIHN1Y2Nlc3NmdWxs eS4NCj4+LSAgQHJldHZhbCBFRklfTk9UX0ZPVU5EICAgICAgICAgIEZvcm0gbm90IHJldHVybmVk Lg0KPj4tICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgSGlpIGlzIE5VTEwgb3IgRm9y bVNldElkIGlzIE5VTEwgb3INCj4+Rm9ybUlkIGlzIE5VTEwuDQo+Pi0NCj4+LSoqLw0KPj4tRUZJ X1NUQVRVUw0KPj4tRUZJQVBJDQo+Pi1DcmVkZW50aWFsRm9ybSAoDQo+Pi0gIElOIENPTlNUICBF RklfVVNFUl9DUkVERU5USUFMMl9QUk9UT0NPTCAgICAgICAqVGhpcywNCj4+LSAgT1VUICAgICAg IEVGSV9ISUlfSEFORExFICAgICAgICAgICAgICAgICAgICAgICpIaWksDQo+Pi0gIE9VVCAgICAg ICBFRklfR1VJRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqRm9ybVNldElkLA0KPj4tICBP VVQgICAgICAgRUZJX0ZPUk1fSUQgICAgICAgICAgICAgICAgICAgICAgICAgKkZvcm1JZA0KPj4t ICApDQo+Pi17DQo+Pi0gIGlmICgoVGhpcyA9PSBOVUxMKSB8fCAoSGlpID09IE5VTEwpIHx8DQo+ Pi0gICAgICAoRm9ybVNldElkID09IE5VTEwpIHx8IChGb3JtSWQgPT0gTlVMTCkpIHsNCj4+LSAg ICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPj4tICB9DQo+Pi0gIHJldHVybiBFRklf Tk9UX0ZPVU5EOw0KPj4tfQ0KPj4tDQo+Pi0NCj4+LS8qKg0KPj4tICBSZXR1cm5zIGJpdG1hcCB1 c2VkIHRvIGRlc2NyaWJlIHRoZSBjcmVkZW50aWFsIHByb3ZpZGVyIHR5cGUuDQo+Pi0NCj4+LSAg VGhpcyBvcHRpb25hbCBmdW5jdGlvbiByZXR1cm5zIGEgYml0bWFwIHdoaWNoIGlzIGxlc3MgdGhh biBvciBlcXVhbCB0byB0aGUNCj4+bnVtYmVyDQo+Pi0gIG9mIHBpeGVscyBzcGVjaWZpZWQgYnkg V2lkdGggYW5kIEhlaWdodC4gSWYgbm8gc3VjaCBiaXRtYXAgZXhpc3RzLCB0aGVuDQo+PkVGSV9O T1RfRk9VTkQNCj4+LSAgaXMgcmV0dXJuZWQuDQo+Pi0NCj4+LSAgQHBhcmFtW2luXSAgICAgVGhp cyAgICBQb2ludHMgdG8gdGhpcyBpbnN0YW5jZSBvZiB0aGUNCj4+RUZJX1VTRVJfQ1JFREVOVElB TDJfUFJPVE9DT0wuDQo+Pi0gIEBwYXJhbVtpbiwgb3V0XSBXaWR0aCAgT24gZW50cnksIHBvaW50 cyB0byB0aGUgZGVzaXJlZCBiaXRtYXAgd2lkdGguIElmDQo+Pk5VTEwgdGhlbiBubw0KPj4tICAg ICAgICAgICAgICAgICAgICAgICAgIGJpdG1hcCBpbmZvcm1hdGlvbiB3aWxsIGJlIHJldHVybmVk LiBPbiBleGl0LCBwb2ludHMgdG8gdGhlDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgd2lk dGggb2YgdGhlIGJpdG1hcCByZXR1cm5lZC4NCj4+LSAgQHBhcmFtW2luLCBvdXRdIEhlaWdodCBP biBlbnRyeSwgcG9pbnRzIHRvIHRoZSBkZXNpcmVkIGJpdG1hcCBoZWlnaHQuIElmDQo+Pk5VTEwg dGhlbiBubw0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgIGJpdG1hcCBpbmZvcm1hdGlvbiB3 aWxsIGJlIHJldHVybmVkLiBPbiBleGl0LCBwb2ludHMgdG8gdGhlDQo+Pi0gICAgICAgICAgICAg ICAgICAgICAgICAgaGVpZ2h0IG9mIHRoZSBiaXRtYXAgcmV0dXJuZWQuDQo+Pi0gIEBwYXJhbVtv dXRdICAgIEhpaSAgICAgT24gcmV0dXJuLCBob2xkcyB0aGUgSElJIGRhdGFiYXNlIGhhbmRsZS4N Cj4+LSAgQHBhcmFtW291dF0gICAgSW1hZ2UgICBPbiByZXR1cm4sIGhvbGRzIHRoZSBISUkgaW1h Z2UgaWRlbnRpZmllci4NCj4+LQ0KPj4tICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAg SW1hZ2UgaWRlbnRpZmllciByZXR1cm5lZCBzdWNjZXNzZnVsbHkuDQo+Pi0gIEByZXR2YWwgRUZJ X05PVF9GT1VORCAgICAgICAgICBJbWFnZSBpZGVudGlmaWVyIG5vdCByZXR1cm5lZC4NCj4+LSAg QHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgIEhpaSBpcyBOVUxMIG9yIEltYWdlIGlzIE5V TEwuDQo+Pi0NCj4+LSoqLw0KPj4tRUZJX1NUQVRVUw0KPj4tRUZJQVBJDQo+Pi1DcmVkZW50aWFs VGlsZSAoDQo+Pi0gIElOIENPTlNUICBFRklfVVNFUl9DUkVERU5USUFMMl9QUk9UT0NPTCAgICAg ICAqVGhpcywNCj4+LSAgSU4gT1VUICAgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICpXaWR0aCwNCj4+LSAgSU4gT1VUICAgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICpIZWlnaHQsDQo+Pi0gIE9VVCAgICAgICBFRklfSElJX0hBTkRMRSAgICAgICAgICAg ICAgICAgICAgICAqSGlpLA0KPj4tICBPVVQgICAgICAgRUZJX0lNQUdFX0lEICAgICAgICAgICAg ICAgICAgICAgICAgKkltYWdlDQo+Pi0gICkNCj4+LXsNCj4+LSAgaWYgKChUaGlzID09IE5VTEwp IHx8IChIaWkgPT0gTlVMTCkgfHwgKEltYWdlID09IE5VTEwpKSB7DQo+Pi0gICAgcmV0dXJuIEVG SV9JTlZBTElEX1BBUkFNRVRFUjsNCj4+LSAgfQ0KPj4tICByZXR1cm4gRUZJX05PVF9GT1VORDsN Cj4+LX0NCj4+LQ0KPj4tDQo+Pi0vKioNCj4+LSAgUmV0dXJucyBzdHJpbmcgdXNlZCB0byBkZXNj cmliZSB0aGUgY3JlZGVudGlhbCBwcm92aWRlciB0eXBlLg0KPj4tDQo+Pi0gIFRoaXMgZnVuY3Rp b24gcmV0dXJucyBhIHN0cmluZyB3aGljaCBkZXNjcmliZXMgdGhlIGNyZWRlbnRpYWwgcHJvdmlk ZXIuIElmIG5vDQo+Pi0gIHN1Y2ggc3RyaW5nIGV4aXN0cywgdGhlbiBFRklfTk9UX0ZPVU5EIGlz IHJldHVybmVkLg0KPj4tDQo+Pi0gIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgUG9pbnRzIHRvIHRo aXMgaW5zdGFuY2Ugb2YgdGhlDQo+PkVGSV9VU0VSX0NSRURFTlRJQUwyX1BST1RPQ09MLg0KPj4t ICBAcGFyYW1bb3V0XSBIaWkgICAgICAgIE9uIHJldHVybiwgaG9sZHMgdGhlIEhJSSBkYXRhYmFz ZSBoYW5kbGUuDQo+Pi0gIEBwYXJhbVtvdXRdIFN0cmluZyAgICAgT24gcmV0dXJuLCBob2xkcyB0 aGUgSElJIHN0cmluZyBpZGVudGlmaWVyLg0KPj4tDQo+Pi0gIEByZXR2YWwgRUZJX1NVQ0NFU1Mg ICAgICAgICAgICBTdHJpbmcgaWRlbnRpZmllciByZXR1cm5lZCBzdWNjZXNzZnVsbHkuDQo+Pi0g IEByZXR2YWwgRUZJX05PVF9GT1VORCAgICAgICAgICBTdHJpbmcgaWRlbnRpZmllciBub3QgcmV0 dXJuZWQuDQo+Pi0gIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICBIaWkgaXMgTlVMTCBv ciBTdHJpbmcgaXMgTlVMTC4NCj4+LQ0KPj4tKiovDQo+Pi1FRklfU1RBVFVTDQo+Pi1FRklBUEkN Cj4+LUNyZWRlbnRpYWxUaXRsZSAoDQo+Pi0gIElOIENPTlNUICBFRklfVVNFUl9DUkVERU5USUFM Ml9QUk9UT0NPTCAgICAgICAqVGhpcywNCj4+LSAgT1VUICAgICAgIEVGSV9ISUlfSEFORExFICAg ICAgICAgICAgICAgICAgICAgICpIaWksDQo+Pi0gIE9VVCAgICAgICBFRklfU1RSSU5HX0lEICAg ICAgICAgICAgICAgICAgICAgICAqU3RyaW5nDQo+Pi0gICkNCj4+LXsNCj4+LSAgaWYgKChUaGlz ID09IE5VTEwpIHx8IChIaWkgPT0gTlVMTCkgfHwgKFN0cmluZyA9PSBOVUxMKSkgew0KPj4tICAg IHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+Pi0gIH0NCj4+LSAgLy8NCj4+LSAgLy8g U2V0IEhpaSBoYW5kbGUgYW5kIFN0cmluZyBJRC4NCj4+LSAgLy8NCj4+LSAgKkhpaSAgICA9IG1D YWxsYmFja0luZm8tPkhpaUhhbmRsZTsNCj4+LSAgKlN0cmluZyA9IFNUUklOR19UT0tFTiAoU1RS X0NSRURFTlRJQUxfVElUTEUpOw0KPj4tDQo+Pi0gIHJldHVybiBFRklfU1VDQ0VTUzsNCj4+LX0N Cj4+LQ0KPj4tDQo+Pi0vKioNCj4+LSAgUmV0dXJuIHRoZSB1c2VyIGlkZW50aWZpZXIgYXNzb2Np YXRlZCB3aXRoIHRoZSBjdXJyZW50bHkgYXV0aGVudGljYXRlZCB1c2VyLg0KPj4tDQo+Pi0gIFRo aXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgdXNlciBpZGVudGlmaWVyIG9mIHRoZSB1c2VyIGF1dGhl bnRpY2F0ZWQgYnkgdGhpcw0KPj5jcmVkZW50aWFsDQo+Pi0gIHByb3ZpZGVyLiBUaGlzIGZ1bmN0 aW9uIGlzIGNhbGxlZCBhZnRlciB0aGUgY3JlZGVudGlhbC1yZWxhdGVkIGluZm9ybWF0aW9uIGhh cw0KPj5iZWVuDQo+Pi0gIHN1Ym1pdHRlZCBvbiBhIGZvcm0gT1IgYWZ0ZXIgYSBjYWxsIHRvIERl ZmF1bHQoKSBoYXMgcmV0dXJuZWQgdGhhdCB0aGlzDQo+PmNyZWRlbnRpYWwgaXMNCj4+LSAgcmVh ZHkgdG8gbG9nIG9uLg0KPj4tDQo+Pi0gIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgICAgIFBvaW50 cyB0byB0aGlzIGluc3RhbmNlIG9mIHRoZQ0KPj5FRklfVVNFUl9DUkVERU5USUFMMl9QUk9UT0NP TC4NCj4+LSAgQHBhcmFtW2luXSAgVXNlciAgICAgICAgICAgVGhlIHVzZXIgcHJvZmlsZSBoYW5k bGUgb2YgdGhlIHVzZXIgcHJvZmlsZSBjdXJyZW50bHkNCj4+YmVpbmcNCj4+LSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc2lkZXJlZCBieSB0aGUgdXNlciBpZGVudGl0eSBtYW5hZ2Vy LiBJZiBOVUxMLCB0aGVuIG5vDQo+dXNlcg0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBwcm9maWxlIGlzIGN1cnJlbnRseSB1bmRlciBjb25zaWRlcmF0aW9uLg0KPj4tICBAcGFyYW1b b3V0XSBJZGVudGlmaWVyICAgICBPbiByZXR1cm4sIHBvaW50cyB0byB0aGUgdXNlciBpZGVudGlm aWVyLg0KPj4tDQo+Pi0gIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICBVc2VyIGlkZW50 aWZpZXIgcmV0dXJuZWQgc3VjY2Vzc2Z1bGx5Lg0KPj4tICBAcmV0dmFsIEVGSV9OT1RfUkVBRFkg ICAgICAgICAgTm8gdXNlciBpZGVudGlmaWVyIGNhbiBiZSByZXR1cm5lZC4NCj4+LSAgQHJldHZh bCBFRklfQUNDRVNTX0RFTklFRCAgICAgIFRoZSB1c2VyIGhhcyBiZWVuIGxvY2tlZCBvdXQgb2Yg dGhpcyB1c2VyDQo+PmNyZWRlbnRpYWwuDQo+Pi0gIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1F VEVSICBUaGlzIGlzIE5VTEwsIG9yIElkZW50aWZpZXIgaXMgTlVMTC4NCj4+LSAgQHJldHZhbCBF RklfTk9UX0ZPVU5EICAgICAgICAgIFVzZXIgaXMgbm90IE5VTEwsIGFuZCB0aGUgc3BlY2lmaWVk IHVzZXINCj4+aGFuZGxlIGNhbid0IGJlDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBmb3VuZCBpbiB1c2VyIHByb2ZpbGUgZGF0YWJhc2UuDQo+Pi0NCj4+LSoqLw0KPj4tRUZJ X1NUQVRVUw0KPj4tRUZJQVBJDQo+Pi1DcmVkZW50aWFsVXNlciAoDQo+Pi0gIElOIENPTlNUICBF RklfVVNFUl9DUkVERU5USUFMMl9QUk9UT0NPTCAgICAgICAqVGhpcywNCj4+LSAgSU4gICAgICAg IEVGSV9VU0VSX1BST0ZJTEVfSEFORExFICAgICAgICAgICAgIFVzZXIsDQo+Pi0gIE9VVCAgICAg ICBFRklfVVNFUl9JTkZPX0lERU5USUZJRVIgICAgICAgICAgICAqSWRlbnRpZmllcg0KPj4tICAp DQo+Pi17DQo+Pi0gIEVGSV9TVEFUVVMgICAgU3RhdHVzOw0KPj4tICBVSU5UTiAgICAgICAgIElu ZGV4Ow0KPj4tICBFRklfVVNFUl9JTkZPICpVc2VySW5mbzsNCj4+LSAgVUlOVDggICAgICAgICAq VXNlcklkOw0KPj4tICBVSU5UOCAgICAgICAgICpOZXdVc2VySWQ7DQo+Pi0gIFVJTlQ4ICAgICAg ICAgKlVzZXJUb2tlbjsNCj4+LSAgVUlOVDggICAgICAgICBSZWFkVG9rZW5bSEFTSEVEX0NSRURF TlRJQUxfTEVOXTsNCj4+LSAgRUZJX0lOUFVUX0tFWSBLZXk7DQo+Pi0gIENIQVIxNiAgICAgICAg KlF1ZXN0aW9uU3RyOw0KPj4tICBDSEFSMTYgICAgICAgICpQcm9tcHRTdHI7DQo+Pi0NCj4+LSAg aWYgKChUaGlzID09IE5VTEwpIHx8IChJZGVudGlmaWVyID09IE5VTEwpKSB7DQo+Pi0gICAgcmV0 dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4+LSAgfQ0KPj4tDQo+Pi0gIGlmIChVc2VyID09 IE5VTEwpIHsNCj4+LSAgICAvLw0KPj4tICAgIC8vIFZlcmlmeSB0aGUgYXV0byBsb2dvbiB1c2Vy LCBnZXQgdXNlciBpZCBieSBtYXRjaGVkIHRva2VuLg0KPj4tICAgIC8vDQo+Pi0gICAgaWYgKG1V c2JUYWJsZS0+Q291bnQgPT0gMCkgew0KPj4tICAgICAgcmV0dXJuIEVGSV9OT1RfUkVBRFk7DQo+ Pi0gICAgfQ0KPj4tDQo+Pi0gICAgLy8NCj4+LSAgICAvLyBObyB1c2VyIHNlbGVjdGVkLCBnZXQg dG9rZW4gZmlyc3QgYW5kIHZlcmlmeSB0aGUgdXNlciBleGlzdGVkIGluIHVzZXINCj4+ZGF0YWJh c2UuDQo+Pi0gICAgLy8NCj4+LSAgICBTdGF0dXMgPSBHZXRUb2tlbiAoUmVhZFRva2VuKTsNCj4+ LSAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+Pi0gICAgICByZXR1cm4gRUZJX05PVF9S RUFEWTsNCj4+LSAgICB9DQo+Pi0NCj4+LSAgICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBtVXNi VGFibGUtPkNvdW50OyBJbmRleCsrKSB7DQo+Pi0gICAgICAvLw0KPj4tICAgICAgLy8gZmluZCB0 aGUgc3BlY2lmaWVkIGNyZWRlbnRpYWwgaW4gdGhlIFVzYiBjcmVkZW50aWFsIGRhdGFiYXNlLg0K Pj4tICAgICAgLy8NCj4+LSAgICAgIFVzZXJUb2tlbiA9IG1Vc2JUYWJsZS0+VXNlckluZm9bSW5k ZXhdLlRva2VuOw0KPj4tICAgICAgaWYgKENvbXBhcmVNZW0gKFVzZXJUb2tlbiwgUmVhZFRva2Vu LCBIQVNIRURfQ1JFREVOVElBTF9MRU4pDQo+PT0NCj4+MCkgew0KPj4tICAgICAgICBVc2VySWQg ID0gKFVJTlQ4ICopICZtVXNiVGFibGUtPlVzZXJJbmZvW0luZGV4XS5Vc2VySWQ7DQo+Pi0gICAg ICAgIENvcHlNZW0gKElkZW50aWZpZXIsIFVzZXJJZCwgc2l6ZW9mIChFRklfVVNFUl9JTkZPX0lE RU5USUZJRVIpKTsNCj4+LSAgICAgICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPj4tICAgICAgfQ0K Pj4tICAgIH0NCj4+LQ0KPj4tICAgIHJldHVybiBFRklfTk9UX1JFQURZOw0KPj4tICB9DQo+Pi0N Cj4+LSAgLy8NCj4+LSAgLy8gVXNlciBpcyBub3QgTlVMTCBoZXJlLiBSZWFkIGEgdG9rZW4sIGFu ZCBjaGVjayB3aGV0aGVyIHRoZSB0b2tlbg0KPj5tYXRjaGVzIHdpdGgNCj4+LSAgLy8gdGhlIHNl bGVjdGVkIHVzZXIncyBUb2tlbi4gSWYgbm90LCB0cnkgdG8gZmluZCBhIHRva2VuIGluIHRva2Vu IERCIHRvDQo+Pm1hdGNoZXMNCj4+LSAgLy8gd2l0aCByZWFkIHRva2VuLg0KPj4tICAvLw0KPj4t DQo+Pi0gIFN0YXR1cyA9IEdldFRva2VuIChSZWFkVG9rZW4pOw0KPj4tICBpZiAoRUZJX0VSUk9S IChTdGF0dXMpKSB7DQo+Pi0gICAgUXVlc3Rpb25TdHIgPSBHZXRTdHJpbmdCeUlkIChTVFJJTkdf VE9LRU4NCj4+KFNUUl9SRUFEX1VTQl9UT0tFTl9FUlJPUikpOw0KPj4tICAgIFByb21wdFN0ciAg ID0gR2V0U3RyaW5nQnlJZCAoU1RSSU5HX1RPS0VOIChTVFJfSU5TRVJUX1VTQl9UT0tFTikpOw0K Pj4tICAgIENyZWF0ZVBvcFVwICgNCj4+LSAgICAgIEVGSV9MSUdIVEdSQVkgfCBFRklfQkFDS0dS T1VORF9CTFVFLA0KPj4tICAgICAgJktleSwNCj4+LSAgICAgIFF1ZXN0aW9uU3RyLA0KPj4tICAg ICAgTCIiLA0KPj4tICAgICAgUHJvbXB0U3RyLA0KPj4tICAgICAgTlVMTA0KPj4tICAgICAgKTsN Cj4+LSAgICBGcmVlUG9vbCAoUXVlc3Rpb25TdHIpOw0KPj4tICAgIEZyZWVQb29sIChQcm9tcHRT dHIpOw0KPj4tICAgIHJldHVybiBFRklfTk9UX0ZPVU5EOw0KPj4tICB9DQo+Pi0NCj4+LSAgLy8N Cj4+LSAgLy8gR2V0IHRoZSBzZWxlY3RlZCB1c2VyJ3MgaWRlbnRpZmllci4NCj4+LSAgLy8NCj4+ LSAgU3RhdHVzID0gRmluZFVzZXJJbmZvQnlUeXBlIChVc2VyLCBFRklfVVNFUl9JTkZPX0lERU5U SUZJRVJfUkVDT1JELA0KPj4mVXNlckluZm8pOw0KPj4tICBpZiAoRUZJX0VSUk9SIChTdGF0dXMp KSB7DQo+Pi0gICAgcmV0dXJuIEVGSV9OT1RfRk9VTkQ7DQo+Pi0gIH0NCj4+LQ0KPj4tICAvLw0K Pj4tICAvLyBDaGVjayB0aGUgc2VsZWN0ZWQgdXNlcidzIFRva2VuIHdpdGggdGhlIHJlYWQgdG9r ZW4uDQo+Pi0gIC8vDQo+Pi0gIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IG1Vc2JUYWJsZS0+Q291 bnQ7IEluZGV4KyspIHsNCj4+LSAgICBVc2VySWQgICAgPSAoVUlOVDggKikgJm1Vc2JUYWJsZS0+ VXNlckluZm9bSW5kZXhdLlVzZXJJZDsNCj4+LSAgICBOZXdVc2VySWQgPSAoVUlOVDggKikgKFVz ZXJJbmZvICsgMSk7DQo+Pi0gICAgaWYgKENvbXBhcmVNZW0gKFVzZXJJZCwgTmV3VXNlcklkLCBz aXplb2YNCj4oRUZJX1VTRVJfSU5GT19JREVOVElGSUVSKSkNCj4+PT0gMCkgew0KPj4tICAgICAg Ly8NCj4+LSAgICAgIC8vIFRoZSB1c2VyJ3MgSUQgaXMgZm91bmQgaW4gdGhlIFVzYlRhYmxlLg0K Pj4tICAgICAgLy8NCj4+LSAgICAgIFVzZXJUb2tlbiA9IG1Vc2JUYWJsZS0+VXNlckluZm9bSW5k ZXhdLlRva2VuOw0KPj4tICAgICAgaWYgKENvbXBhcmVNZW0gKFVzZXJUb2tlbiwgUmVhZFRva2Vu LCBIQVNIRURfQ1JFREVOVElBTF9MRU4pDQo+PT0NCj4+MCkgew0KPj4tICAgICAgICAvLw0KPj4t ICAgICAgICAvLyBUaGUgcmVhZCB0b2tlbiBtYXRjaGVzIHdpdGggdGhlIG9uZSBpbiBVc2JUYWJs ZS4NCj4+LSAgICAgICAgLy8NCj4+LSAgICAgICAgQ29weU1lbSAoSWRlbnRpZmllciwgVXNlcklk LCBzaXplb2YgKEVGSV9VU0VSX0lORk9fSURFTlRJRklFUikpOw0KPj4tICAgICAgICBGcmVlUG9v bCAoVXNlckluZm8pOw0KPj4tICAgICAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+Pi0gICAgICB9 DQo+Pi0gICAgfQ0KPj4tICB9DQo+Pi0NCj4+LSAgRnJlZVBvb2wgKFVzZXJJbmZvKTsNCj4+LQ0K Pj4tICByZXR1cm4gRUZJX05PVF9SRUFEWTsNCj4+LX0NCj4+LQ0KPj4tDQo+Pi0vKioNCj4+LSAg SW5kaWNhdGUgdGhhdCB1c2VyIGludGVyZmFjZSBpbnRlcmFjdGlvbiBoYXMgYmVndW4gZm9yIHRo ZSBzcGVjaWZpZWQNCj4+Y3JlZGVudGlhbC4NCj4+LQ0KPj4tICBUaGlzIGZ1bmN0aW9uIGlzIGNh bGxlZCB3aGVuIGEgY3JlZGVudGlhbCBwcm92aWRlciBpcyBzZWxlY3RlZCBieSB0aGUgdXNlci4g SWYNCj4+LSAgQXV0b0xvZ29uIHJldHVybnMgRkFMU0UsIHRoZW4gdGhlIHVzZXIgaW50ZXJmYWNl IHdpbGwgYmUgY29uc3RydWN0ZWQgYnkNCj50aGUNCj4+VXNlcg0KPj4tICBJZGVudGl0eSBNYW5h Z2VyLg0KPj4tDQo+Pi0gIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgUG9pbnRzIHRvIHRoaXMgaW5z dGFuY2Ugb2YgdGhlDQo+PkVGSV9VU0VSX0NSRURFTlRJQUwyX1BST1RPQ09MLg0KPj4tICBAcGFy YW1bb3V0XSBBdXRvTG9nb24gIE9uIHJldHVybiwgcG9pbnRzIHRvIHRoZSBjcmVkZW50aWFsIHBy b3ZpZGVyJ3MNCj4+Y2FwYWJpbGl0aWVzDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgYWZ0 ZXIgdGhlIGNyZWRlbnRpYWwgcHJvdmlkZXIgaGFzIGJlZW4gc2VsZWN0ZWQgYnkgdGhlIHVzZXIu DQo+Pi0NCj4+LSAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgIENyZWRlbnRpYWwgcHJv dmlkZXIgc3VjY2Vzc2Z1bGx5IHNlbGVjdGVkLg0KPj4tICBAcmV0dmFsIEVGSV9JTlZBTElEX1BB UkFNRVRFUiAgQXV0b0xvZ29uIGlzIE5VTEwuDQo+Pi0NCj4+LSoqLw0KPj4tRUZJX1NUQVRVUw0K Pj4tRUZJQVBJDQo+Pi1DcmVkZW50aWFsU2VsZWN0ICgNCj4+LSAgSU4gIENPTlNUICBFRklfVVNF Ul9DUkVERU5USUFMMl9QUk9UT0NPTCAgICpUaGlzLA0KPj4tICBPVVQgICAgICAgIEVGSV9DUkVE RU5USUFMX0xPR09OX0ZMQUdTICAgICAgKkF1dG9Mb2dvbg0KPj4tICApDQo+Pi17DQo+Pi0gIGlm ICgoVGhpcyA9PSBOVUxMKSB8fCAoQXV0b0xvZ29uID09IE5VTEwpKSB7DQo+Pi0gICAgcmV0dXJu IEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4+LSAgfQ0KPj4tDQo+Pi0gICpBdXRvTG9nb24gPSBF RklfQ1JFREVOVElBTF9MT0dPTl9GTEFHX0RFRkFVTFQgfA0KPj5FRklfQ1JFREVOVElBTF9MT0dP Tl9GTEFHX0FVVE87DQo+Pi0NCj4+LSAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPj4tfQ0KPj4tDQo+ Pi0NCj4+LS8qKg0KPj4tICBJbmRpY2F0ZSB0aGF0IHVzZXIgaW50ZXJmYWNlIGludGVyYWN0aW9u IGhhcyBlbmRlZCBmb3IgdGhlIHNwZWNpZmllZA0KPj5jcmVkZW50aWFsLg0KPj4tDQo+Pi0gIFRo aXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYSBjcmVkZW50aWFsIHByb3ZpZGVyIGlzIGRlc2Vs ZWN0ZWQgYnkgdGhlIHVzZXIuDQo+Pi0NCj4+LSAgQHBhcmFtW2luXSBUaGlzICAgICAgICBQb2lu dHMgdG8gdGhpcyBpbnN0YW5jZSBvZiB0aGUNCj4+RUZJX1VTRVJfQ1JFREVOVElBTDJfUFJPVE9D T0wuDQo+Pi0NCj4+LSAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICBDcmVkZW50aWFsIHByb3ZpZGVy IHN1Y2Nlc3NmdWxseSBkZXNlbGVjdGVkLg0KPj4tDQo+Pi0qKi8NCj4+LUVGSV9TVEFUVVMNCj4+ LUVGSUFQSQ0KPj4tQ3JlZGVudGlhbERlc2VsZWN0ICgNCj4+LSAgSU4gQ09OU1QgIEVGSV9VU0VS X0NSRURFTlRJQUwyX1BST1RPQ09MICAgICAgICpUaGlzDQo+Pi0gICkNCj4+LXsNCj4+LSAgaWYg KFRoaXMgPT0gTlVMTCkgew0KPj4tICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ Pi0gIH0NCj4+LSAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPj4tfQ0KPj4tDQo+Pi0NCj4+LS8qKg0K Pj4tICBSZXR1cm4gdGhlIGRlZmF1bHQgbG9nb24gYmVoYXZpb3IgZm9yIHRoaXMgdXNlciBjcmVk ZW50aWFsLg0KPj4tDQo+Pi0gIFRoaXMgZnVuY3Rpb24gcmVwb3J0cyB0aGUgZGVmYXVsdCBsb2dp biBiZWhhdmlvciByZWdhcmRpbmcgdGhpcyBjcmVkZW50aWFsDQo+PnByb3ZpZGVyLg0KPj4tDQo+ Pi0gIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgUG9pbnRzIHRvIHRoaXMgaW5zdGFuY2Ugb2YgdGhl DQo+PkVGSV9VU0VSX0NSRURFTlRJQUwyX1BST1RPQ09MLg0KPj4tICBAcGFyYW1bb3V0XSBBdXRv TG9nb24gIE9uIHJldHVybiwgaG9sZHMgd2hldGhlciB0aGUgY3JlZGVudGlhbA0KPnByb3ZpZGVy DQo+PnNob3VsZCBiZSB1c2VkDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgYnkgZGVmYXVs dCB0byBhdXRvbWF0aWNhbGx5IGxvZyBvbiB0aGUgdXNlci4NCj4+LQ0KPj4tICBAcmV0dmFsIEVG SV9TVUNDRVNTICAgICAgICAgICAgRGVmYXVsdCBpbmZvcm1hdGlvbiBzdWNjZXNzZnVsbHkgcmV0 dXJuZWQuDQo+Pi0gIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICBBdXRvTG9nb24gaXMg TlVMTC4NCj4+LQ0KPj4tKiovDQo+Pi1FRklfU1RBVFVTDQo+Pi1FRklBUEkNCj4+LUNyZWRlbnRp YWxEZWZhdWx0ICgNCj4+LSAgSU4gQ09OU1QgIEVGSV9VU0VSX0NSRURFTlRJQUwyX1BST1RPQ09M ICAgICAgICpUaGlzLA0KPj4tICBPVVQgICAgICAgRUZJX0NSRURFTlRJQUxfTE9HT05fRkxBR1Mg ICAgICAgICAgKkF1dG9Mb2dvbg0KPj4tICApDQo+Pi17DQo+Pi0gIGlmICgoVGhpcyA9PSBOVUxM KSB8fCAoQXV0b0xvZ29uID09IE5VTEwpKSB7DQo+Pi0gICAgcmV0dXJuIEVGSV9JTlZBTElEX1BB UkFNRVRFUjsNCj4+LSAgfQ0KPj4tDQo+Pi0gICpBdXRvTG9nb24gPSBFRklfQ1JFREVOVElBTF9M T0dPTl9GTEFHX0RFRkFVTFQgfA0KPj5FRklfQ1JFREVOVElBTF9MT0dPTl9GTEFHX0FVVE87DQo+ Pi0gIHJldHVybiBFRklfU1VDQ0VTUzsNCj4+LX0NCj4+LQ0KPj4tDQo+Pi0vKioNCj4+LSAgUmV0 dXJuIGluZm9ybWF0aW9uIGF0dGFjaGVkIHRvIHRoZSBjcmVkZW50aWFsIHByb3ZpZGVyLg0KPj4t DQo+Pi0gIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB1c2VyIGluZm9ybWF0aW9uLg0KPj4tDQo+Pi0g IEBwYXJhbVtpbl0gICAgICBUaGlzICAgICAgICAgIFBvaW50cyB0byB0aGlzIGluc3RhbmNlIG9m IHRoZQ0KPj5FRklfVVNFUl9DUkVERU5USUFMMl9QUk9UT0NPTC4NCj4+LSAgQHBhcmFtW2luXSAg ICAgIFVzZXJJbmZvICAgICAgSGFuZGxlIG9mIHRoZSB1c2VyIGluZm9ybWF0aW9uIGRhdGEgcmVj b3JkLg0KPj4tICBAcGFyYW1bb3V0XSAgICAgSW5mbyAgICAgICAgICBPbiBlbnRyeSwgcG9pbnRz IHRvIGEgYnVmZmVyIG9mIGF0IGxlYXN0ICpJbmZvU2l6ZQ0KPj5ieXRlcy4gT24NCj4+LSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpdCwgaG9sZHMgdGhlIHVzZXIgaW5mb3JtYXRp b24uIElmIHRoZSBidWZmZXIgaXMgdG9vIHNtYWxsDQo+Pi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHRvIGhvbGQgdGhlIGluZm9ybWF0aW9uLCB0aGVuIEVGSV9CVUZGRVJfVE9PX1NN QUxMIGlzDQo+PnJldHVybmVkDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFu ZCBJbmZvU2l6ZSBpcyB1cGRhdGVkIHRvIGNvbnRhaW4gdGhlIG51bWJlciBvZiBieXRlcw0KPj5h Y3R1YWxseQ0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZC4NCj4+ LSAgQHBhcmFtW2luLCBvdXRdIEluZm9TaXplICAgICAgT24gZW50cnksIHBvaW50cyB0byB0aGUg c2l6ZSBvZiBJbmZvLiBPbiByZXR1cm4sDQo+PnBvaW50cyB0byB0aGUNCj4+LSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc2l6ZSBvZiB0aGUgdXNlciBpbmZvcm1hdGlvbi4NCj4+LQ0K Pj4tICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBJbmZvcm1hdGlvbiByZXR1cm5lZCBz dWNjZXNzZnVsbHkuDQo+Pi0gIEByZXR2YWwgRUZJX0JVRkZFUl9UT09fU01BTEwgIFRoZSBzaXpl IHNwZWNpZmllZCBieSBJbmZvU2l6ZSBpcyB0b28NCj5zbWFsbA0KPj50byBob2xkIGFsbCBvZiB0 aGUNCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlciBpbmZvcm1hdGlvbi4g VGhlIHNpemUgcmVxdWlyZWQgaXMgcmV0dXJuZWQgaW4gKkluZm9TaXplLg0KPj4tICBAcmV0dmFs IEVGSV9JTlZBTElEX1BBUkFNRVRFUiBJbmZvIGlzIE5VTEwgb3IgSW5mb1NpemUgaXMgTlVMTC4N Cj4+LSAgQHJldHZhbCBFRklfTk9UX0ZPVU5EICAgICAgICAgVGhlIHNwZWNpZmllZCBVc2VySW5m byBkb2VzIG5vdCByZWZlciB0byBhDQo+PnZhbGlkIHVzZXIgaW5mbyBoYW5kbGUuDQo+Pi0NCj4+ LSoqLw0KPj4tRUZJX1NUQVRVUw0KPj4tRUZJQVBJDQo+Pi1DcmVkZW50aWFsR2V0SW5mbyAoDQo+ Pi0gIElOIENPTlNUICBFRklfVVNFUl9DUkVERU5USUFMMl9QUk9UT0NPTCAgICAgICAqVGhpcywN Cj4+LSAgSU4gICAgICAgIEVGSV9VU0VSX0lORk9fSEFORExFICAgICAgICAgICAgICAgIFVzZXJJ bmZvLA0KPj4tICBPVVQgICAgICAgRUZJX1VTRVJfSU5GTyAgICAgICAgICAgICAgICAgICAgICAg KkluZm8sDQo+Pi0gIElOIE9VVCAgICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAqSW5mb1NpemUNCj4+LSAgKQ0KPj4tew0KPj4tICBFRklfVVNFUl9JTkZPICAgICAgICAgICAg KkNyZWRlbnRpYWxJbmZvOw0KPj4tICBVSU5UTiAgICAgICAgICAgICAgICAgICAgSW5kZXg7DQo+ Pi0NCj4+LSAgaWYgKChUaGlzID09IE5VTEwpIHx8IChJbmZvU2l6ZSA9PSBOVUxMKSB8fCAoSW5m byA9PSBOVUxMKSkgew0KPj4tICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+Pi0g IH0NCj4+LQ0KPj4tICBpZiAoKFVzZXJJbmZvID09IE5VTEwpIHx8IChtVXNiSW5mb0hhbmRsZSA9 PSBOVUxMKSkgew0KPj4tICAgIHJldHVybiBFRklfTk9UX0ZPVU5EOw0KPj4tICB9DQo+Pi0NCj4+ LSAgLy8NCj4+LSAgLy8gRmluZCBpbmZvcm1hdGlvbiBoYW5kbGUgaW4gY3JlZGVudGlhbCBpbmZv IHRhYmxlLg0KPj4tICAvLw0KPj4tICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBtVXNiSW5mb0hh bmRsZS0+Q291bnQ7IEluZGV4KyspIHsNCj4+LSAgICBDcmVkZW50aWFsSW5mbyA9IG1Vc2JJbmZv SGFuZGxlLT5JbmZvW0luZGV4XTsNCj4+LSAgICBpZiAoVXNlckluZm8gPT0gKEVGSV9VU0VSX0lO Rk9fSEFORExFKUNyZWRlbnRpYWxJbmZvKSB7DQo+Pi0gICAgICAvLw0KPj4tICAgICAgLy8gVGhl IGhhbmRsZSBpcyBmb3VuZCwgY29weSB0aGUgdXNlciBpbmZvLg0KPj4tICAgICAgLy8NCj4+LSAg ICAgIGlmIChDcmVkZW50aWFsSW5mby0+SW5mb1NpemUgPiAqSW5mb1NpemUpIHsNCj4+LSAgICAg ICAgKkluZm9TaXplID0gQ3JlZGVudGlhbEluZm8tPkluZm9TaXplOw0KPj4tICAgICAgICByZXR1 cm4gRUZJX0JVRkZFUl9UT09fU01BTEw7DQo+Pi0gICAgICB9DQo+Pi0NCj4+LSAgICAgIENvcHlN ZW0gKEluZm8sIENyZWRlbnRpYWxJbmZvLCBDcmVkZW50aWFsSW5mby0+SW5mb1NpemUpOw0KPj4t ICAgICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPj4tICAgIH0NCj4+LSAgfQ0KPj4tDQo+Pi0gIHJl dHVybiBFRklfTk9UX0ZPVU5EOw0KPj4tfQ0KPj4tDQo+Pi0NCj4+LS8qKg0KPj4tICBFbnVtZXJh dGUgYWxsIG9mIHRoZSB1c2VyIGluZm9ybWF0aW9ucyBvbiB0aGUgY3JlZGVudGlhbCBwcm92aWRl ci4NCj4+LQ0KPj4tICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIG5leHQgdXNlciBpbmZvcm1h dGlvbiByZWNvcmQuIFRvIHJldHJpZXZlIHRoZSBmaXJzdA0KPj51c2VyDQo+Pi0gIGluZm9ybWF0 aW9uIHJlY29yZCBoYW5kbGUsIHBvaW50IFVzZXJJbmZvIGF0IGEgTlVMTC4gRWFjaCBzdWJzZXF1 ZW50IGNhbGwNCj4+d2lsbCByZXRyaWV2ZQ0KPj4tICBhbm90aGVyIHVzZXIgaW5mb3JtYXRpb24g cmVjb3JkIGhhbmRsZSB1bnRpbCB0aGVyZSBhcmUgbm8gbW9yZSwgYXQgd2hpY2gNCj4+cG9pbnQg VXNlckluZm8NCj4+LSAgd2lsbCBwb2ludCB0byBOVUxMLg0KPj4tDQo+Pi0gIEBwYXJhbVtpbl0g ICAgICBUaGlzICAgICBQb2ludHMgdG8gdGhpcyBpbnN0YW5jZSBvZiB0aGUNCj4+RUZJX1VTRVJf Q1JFREVOVElBTDJfUFJPVE9DT0wuDQo+Pi0gIEBwYXJhbVtpbiwgb3V0XSBVc2VySW5mbyBPbiBl bnRyeSwgcG9pbnRzIHRvIHRoZSBwcmV2aW91cyB1c2VyDQo+aW5mb3JtYXRpb24NCj4+aGFuZGxl IG9yIE5VTEwNCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHN0YXJ0IGVudW1lcmF0 aW9uLiBPbiBleGl0LCBwb2ludHMgdG8gdGhlIG5leHQgdXNlcg0KPj5pbmZvcm1hdGlvbg0KPj4t ICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlIG9yIE5VTEwgaWYgdGhlcmUgaXMgbm8g bW9yZSB1c2VyIGluZm9ybWF0aW9uLg0KPj4tDQo+Pi0gIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAg ICAgICAgICBVc2VyIGluZm9ybWF0aW9uIHJldHVybmVkLg0KPj4tICBAcmV0dmFsIEVGSV9OT1Rf Rk9VTkQgICAgICAgICAgTm8gbW9yZSB1c2VyIGluZm9ybWF0aW9uIGZvdW5kLg0KPj4tICBAcmV0 dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgVXNlckluZm8gaXMgTlVMTC4NCj4+LQ0KPj4tKiov DQo+Pi1FRklfU1RBVFVTDQo+Pi1FRklBUEkNCj4+LUNyZWRlbnRpYWxHZXROZXh0SW5mbyAoDQo+ Pi0gIElOIENPTlNUICBFRklfVVNFUl9DUkVERU5USUFMMl9QUk9UT0NPTCAgICAgICAqVGhpcywN Cj4+LSAgSU4gT1VUICAgIEVGSV9VU0VSX0lORk9fSEFORExFICAgICAgICAgICAgICAgICpVc2Vy SW5mbw0KPj4tICApDQo+Pi17DQo+Pi0gIEVGSV9VU0VSX0lORk8gICAgICAgICAgICAqSW5mbzsN Cj4+LSAgQ0hBUjE2ICAgICAgICAgICAgICAgICAgICpQcm92TmFtZVN0cjsNCj4+LSAgVUlOVE4g ICAgICAgICAgICAgICAgICAgIEluZm9MZW47DQo+Pi0gIFVJTlROICAgICAgICAgICAgICAgICAg ICBJbmRleDsNCj4+LSAgVUlOVE4gICAgICAgICAgICAgICAgICAgIFByb3ZTdHJMZW47DQo+Pi0N Cj4+LSAgaWYgKChUaGlzID09IE5VTEwpIHx8IChVc2VySW5mbyA9PSBOVUxMKSkgew0KPj4tICAg IHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+Pi0gIH0NCj4+LQ0KPj4tICBpZiAobVVz YkluZm9IYW5kbGUgPT0gTlVMTCkgew0KPj4tICAgIC8vDQo+Pi0gICAgLy8gSW5pdGlsaXplZCB1 c2VyIGluZm8gdGFibGUuIFRoZXJlIGFyZSA0IHVzZXIgaW5mbyByZWNvcmRzIGluIHRoZSB0YWJs ZS4NCj4+LSAgICAvLw0KPj4tICAgIEluZm9MZW4gID0gc2l6ZW9mIChVU0JfQ1JFREVOVElBTF9J TkZPKSArICg0IC0gMSkgKiBzaXplb2YNCj4+KEVGSV9VU0VSX0lORk8gKik7DQo+Pi0gICAgbVVz YkluZm9IYW5kbGUgPSBBbGxvY2F0ZVplcm9Qb29sIChJbmZvTGVuKTsNCj4+LSAgICBpZiAobVVz YkluZm9IYW5kbGUgPT0gTlVMTCkgew0KPj4tICAgICAgKlVzZXJJbmZvID0gTlVMTDsNCj4+LSAg ICAgIHJldHVybiBFRklfTk9UX0ZPVU5EOw0KPj4tICAgIH0NCj4+LQ0KPj4tICAgIC8vDQo+Pi0g ICAgLy8gVGhlIGZpcnN0IGluZm9ybWF0aW9uLCBDcmVkZW50aWFsIFByb3ZpZGVyIGluZm8uDQo+ Pi0gICAgLy8NCj4+LSAgICBJbmZvTGVuID0gc2l6ZW9mIChFRklfVVNFUl9JTkZPKSArIHNpemVv ZiAoRUZJX0dVSUQpOw0KPj4tICAgIEluZm8gICAgPSBBbGxvY2F0ZVplcm9Qb29sIChJbmZvTGVu KTsNCj4+LSAgICBBU1NFUlQgKEluZm8gIT0gTlVMTCk7DQo+Pi0NCj4+LSAgICBJbmZvLT5JbmZv VHlwZSAgICA9IEVGSV9VU0VSX0lORk9fQ1JFREVOVElBTF9QUk9WSURFUl9SRUNPUkQ7DQo+Pi0g ICAgSW5mby0+SW5mb1NpemUgICAgPSAoVUlOVDMyKSBJbmZvTGVuOw0KPj4tICAgIEluZm8tPklu Zm9BdHRyaWJzID0gRUZJX1VTRVJfSU5GT19QUk9URUNURUQ7DQo+Pi0gICAgQ29weUd1aWQgKCZJ bmZvLT5DcmVkZW50aWFsLCAmZ1VzYkNyZWRlbnRpYWxQcm92aWRlckd1aWQpOw0KPj4tICAgIENv cHlHdWlkICgoRUZJX0dVSUQgKikoSW5mbyArIDEpLCAmZ1VzYkNyZWRlbnRpYWxQcm92aWRlckd1 aWQpOw0KPj4tDQo+Pi0gICAgbVVzYkluZm9IYW5kbGUtPkluZm9bMF0gPSBJbmZvOw0KPj4tICAg IG1Vc2JJbmZvSGFuZGxlLT5Db3VudCsrOw0KPj4tDQo+Pi0gICAgLy8NCj4+LSAgICAvLyBUaGUg c2Vjb25kIGluZm9ybWF0aW9uLCBDcmVkZW50aWFsIFByb3ZpZGVyIG5hbWUgaW5mby4NCj4+LSAg ICAvLw0KPj4tICAgIFByb3ZOYW1lU3RyID0gR2V0U3RyaW5nQnlJZCAoU1RSSU5HX1RPS0VOIChT VFJfUFJPVklERVJfTkFNRSkpOw0KPj4tICAgIFByb3ZTdHJMZW4gID0gU3RyU2l6ZSAoUHJvdk5h bWVTdHIpOw0KPj4tICAgIEluZm9MZW4gICAgID0gc2l6ZW9mIChFRklfVVNFUl9JTkZPKSArIFBy b3ZTdHJMZW47DQo+Pi0gICAgSW5mbyAgICAgICAgPSBBbGxvY2F0ZVplcm9Qb29sIChJbmZvTGVu KTsNCj4+LSAgICBBU1NFUlQgKEluZm8gIT0gTlVMTCk7DQo+Pi0NCj4+LSAgICBJbmZvLT5JbmZv VHlwZSAgICA9DQo+PkVGSV9VU0VSX0lORk9fQ1JFREVOVElBTF9QUk9WSURFUl9OQU1FX1JFQ09S RDsNCj4+LSAgICBJbmZvLT5JbmZvU2l6ZSAgICA9IChVSU5UMzIpIEluZm9MZW47DQo+Pi0gICAg SW5mby0+SW5mb0F0dHJpYnMgPSBFRklfVVNFUl9JTkZPX1BST1RFQ1RFRDsNCj4+LSAgICBDb3B5 R3VpZCAoJkluZm8tPkNyZWRlbnRpYWwsICZnVXNiQ3JlZGVudGlhbFByb3ZpZGVyR3VpZCk7DQo+ Pi0gICAgQ29weU1lbSAoKFVJTlQ4KikoSW5mbyArIDEpLCBQcm92TmFtZVN0ciwgUHJvdlN0ckxl bik7DQo+Pi0gICAgRnJlZVBvb2wgKFByb3ZOYW1lU3RyKTsNCj4+LQ0KPj4tICAgIG1Vc2JJbmZv SGFuZGxlLT5JbmZvWzFdID0gSW5mbzsNCj4+LSAgICBtVXNiSW5mb0hhbmRsZS0+Q291bnQrKzsN Cj4+LQ0KPj4tICAgIC8vDQo+Pi0gICAgLy8gVGhlIHRoaXJkIGluZm9ybWF0aW9uLCBDcmVkZW50 aWFsIFByb3ZpZGVyIHR5cGUgaW5mby4NCj4+LSAgICAvLw0KPj4tICAgIEluZm9MZW4gPSBzaXpl b2YgKEVGSV9VU0VSX0lORk8pICsgc2l6ZW9mIChFRklfR1VJRCk7DQo+Pi0gICAgSW5mbyAgICA9 IEFsbG9jYXRlWmVyb1Bvb2wgKEluZm9MZW4pOw0KPj4tICAgIEFTU0VSVCAoSW5mbyAhPSBOVUxM KTsNCj4+LQ0KPj4tICAgIEluZm8tPkluZm9UeXBlICAgID0gRUZJX1VTRVJfSU5GT19DUkVERU5U SUFMX1RZUEVfUkVDT1JEOw0KPj4tICAgIEluZm8tPkluZm9TaXplICAgID0gKFVJTlQzMikgSW5m b0xlbjsNCj4+LSAgICBJbmZvLT5JbmZvQXR0cmlicyA9IEVGSV9VU0VSX0lORk9fUFJPVEVDVEVE Ow0KPj4tICAgIENvcHlHdWlkICgmSW5mby0+Q3JlZGVudGlhbCwgJmdVc2JDcmVkZW50aWFsUHJv dmlkZXJHdWlkKTsNCj4+LSAgICBDb3B5R3VpZCAoKEVGSV9HVUlEICopKEluZm8gKyAxKSwNCj4+ JmdFZmlVc2VyQ3JlZGVudGlhbENsYXNzU2VjdXJlQ2FyZEd1aWQpOw0KPj4tDQo+Pi0gICAgbVVz YkluZm9IYW5kbGUtPkluZm9bMl0gPSBJbmZvOw0KPj4tICAgIG1Vc2JJbmZvSGFuZGxlLT5Db3Vu dCsrOw0KPj4tDQo+Pi0gICAgLy8NCj4+LSAgICAvLyBUaGUgZm91cnRoIGluZm9ybWF0aW9uLCBD cmVkZW50aWFsIFByb3ZpZGVyIHR5cGUgbmFtZSBpbmZvLg0KPj4tICAgIC8vDQo+Pi0gICAgUHJv dk5hbWVTdHIgPSBHZXRTdHJpbmdCeUlkIChTVFJJTkdfVE9LRU4NCj4+KFNUUl9QUk9WSURFUl9U WVBFX05BTUUpKTsNCj4+LSAgICBQcm92U3RyTGVuICA9IFN0clNpemUgKFByb3ZOYW1lU3RyKTsN Cj4+LSAgICBJbmZvTGVuICAgICA9IHNpemVvZiAoRUZJX1VTRVJfSU5GTykgKyBQcm92U3RyTGVu Ow0KPj4tICAgIEluZm8gICAgICAgID0gQWxsb2NhdGVaZXJvUG9vbCAoSW5mb0xlbik7DQo+Pi0g ICAgQVNTRVJUIChJbmZvICE9IE5VTEwpOw0KPj4tDQo+Pi0gICAgSW5mby0+SW5mb1R5cGUgICAg PQ0KPj5FRklfVVNFUl9JTkZPX0NSRURFTlRJQUxfUFJPVklERVJfTkFNRV9SRUNPUkQ7DQo+Pi0g ICAgSW5mby0+SW5mb1NpemUgICAgPSAoVUlOVDMyKSBJbmZvTGVuOw0KPj4tICAgIEluZm8tPklu Zm9BdHRyaWJzID0gRUZJX1VTRVJfSU5GT19QUk9URUNURUQ7DQo+Pi0gICAgQ29weUd1aWQgKCZJ bmZvLT5DcmVkZW50aWFsLCAmZ1VzYkNyZWRlbnRpYWxQcm92aWRlckd1aWQpOw0KPj4tICAgIENv cHlNZW0gKChVSU5UOCopKEluZm8gKyAxKSwgUHJvdk5hbWVTdHIsIFByb3ZTdHJMZW4pOw0KPj4t ICAgIEZyZWVQb29sIChQcm92TmFtZVN0cik7DQo+Pi0NCj4+LSAgICBtVXNiSW5mb0hhbmRsZS0+ SW5mb1szXSA9IEluZm87DQo+Pi0gICAgbVVzYkluZm9IYW5kbGUtPkNvdW50Kys7DQo+Pi0gIH0N Cj4+LQ0KPj4tICBpZiAoKlVzZXJJbmZvID09IE5VTEwpIHsNCj4+LSAgICAvLw0KPj4tICAgIC8v IFJldHVybiB0aGUgZmlyc3QgaW5mbyBoYW5kbGUuDQo+Pi0gICAgLy8NCj4+LSAgICAqVXNlcklu Zm8gPSAoRUZJX1VTRVJfSU5GT19IQU5ETEUpIG1Vc2JJbmZvSGFuZGxlLT5JbmZvWzBdOw0KPj4t ICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4+LSAgfQ0KPj4tDQo+Pi0gIC8vDQo+Pi0gIC8vIEZp bmQgaW5mb3JtYXRpb24gaGFuZGxlIGluIGNyZWRlbnRpYWwgaW5mbyB0YWJsZS4NCj4+LSAgLy8N Cj4+LSAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgbVVzYkluZm9IYW5kbGUtPkNvdW50OyBJbmRl eCsrKSB7DQo+Pi0gICAgSW5mbyA9IG1Vc2JJbmZvSGFuZGxlLT5JbmZvW0luZGV4XTsNCj4+LSAg ICBpZiAoKlVzZXJJbmZvID09IChFRklfVVNFUl9JTkZPX0hBTkRMRSlJbmZvKSB7DQo+Pi0gICAg ICAvLw0KPj4tICAgICAgLy8gVGhlIGhhbmRsZSBpcyBmb3VuZCwgZ2V0IHRoZSBuZXh0IG9uZS4N Cj4+LSAgICAgIC8vDQo+Pi0gICAgICBpZiAoSW5kZXggPT0gbVVzYkluZm9IYW5kbGUtPkNvdW50 IC0gMSkgew0KPj4tICAgICAgICAvLw0KPj4tICAgICAgICAvLyBBbHJlYWR5IGxhc3Qgb25lLg0K Pj4tICAgICAgICAvLw0KPj4tICAgICAgICAqVXNlckluZm8gPSBOVUxMOw0KPj4tICAgICAgICBy ZXR1cm4gRUZJX05PVF9GT1VORDsNCj4+LSAgICAgIH0NCj4+LSAgICAgIEluZGV4Kys7DQo+Pi0g ICAgICAqVXNlckluZm8gPSAoRUZJX1VTRVJfSU5GT19IQU5ETEUpbVVzYkluZm9IYW5kbGUtPklu Zm9bSW5kZXhdOw0KPj4tICAgICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPj4tICAgIH0NCj4+LSAg fQ0KPj4tDQo+Pi0gICpVc2VySW5mbyA9IE5VTEw7DQo+Pi0gIHJldHVybiBFRklfTk9UX0ZPVU5E Ow0KPj4tfQ0KPj4tDQo+Pi0NCj4+LS8qKg0KPj4tICBEZWxldGUgYSB1c2VyIG9uIHRoaXMgY3Jl ZGVudGlhbCBwcm92aWRlci4NCj4+LQ0KPj4tICBUaGlzIGZ1bmN0aW9uIGRlbGV0ZXMgYSB1c2Vy IG9uIHRoaXMgY3JlZGVudGlhbCBwcm92aWRlci4NCj4+LQ0KPj4tICBAcGFyYW1baW5dICAgICBU aGlzICAgICAgICAgICAgUG9pbnRzIHRvIHRoaXMgaW5zdGFuY2Ugb2YgdGhlDQo+PkVGSV9VU0VS X0NSRURFTlRJQUwyX1BST1RPQ09MLg0KPj4tICBAcGFyYW1baW5dICAgICBVc2VyICAgICAgICAg ICAgVGhlIHVzZXIgcHJvZmlsZSBoYW5kbGUgdG8gZGVsZXRlLg0KPj4tDQo+Pi0gIEByZXR2YWwg RUZJX1NVQ0NFU1MgICAgICAgICAgICBVc2VyIHByb2ZpbGUgd2FzIHN1Y2Nlc3NmdWxseSBkZWxl dGVkLg0KPj4tICBAcmV0dmFsIEVGSV9BQ0NFU1NfREVOSUVEICAgICAgQ3VycmVudCB1c2VyIHBy b2ZpbGUgZG9lcyBub3QgcGVybWl0DQo+PmRlbGV0aW9uIG9uIHRoZSB1c2VyIHByb2ZpbGUgaGFu ZGxlLg0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWl0aGVyIHRoZSB1c2Vy IHByb2ZpbGUgY2Fubm90IGRlbGV0ZSBvbiBhbnkgdXNlciBwcm9maWxlIG9yDQo+PmNhbm5vdCBk ZWxldGUNCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uIGEgdXNlciBwcm9m aWxlIG90aGVyIHRoYW4gdGhlIGN1cnJlbnQgdXNlciBwcm9maWxlLg0KPj4tICBAcmV0dmFsIEVG SV9VTlNVUFBPUlRFRCAgICAgICAgVGhpcyBjcmVkZW50aWFsIHByb3ZpZGVyIGRvZXMgbm90IHN1 cHBvcnQNCj4+ZGVsZXRpb24gaW4gdGhlIHByZS1PUy4NCj4+LSAgQHJldHZhbCBFRklfREVWSUNF X0VSUk9SICAgICAgIFRoZSBuZXcgY3JlZGVudGlhbCBjb3VsZCBub3QgYmUgZGVsZXRlZA0KPj5i ZWNhdXNlIG9mIGEgZGV2aWNlIGVycm9yLg0KPj4tICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFN RVRFUiAgVXNlciBkb2VzIG5vdCByZWZlciB0byBhIHZhbGlkIHVzZXINCj4+cHJvZmlsZSBoYW5k bGUuDQo+Pi0qKi8NCj4+LUVGSV9TVEFUVVMNCj4+LUVGSUFQSQ0KPj4tQ3JlZGVudGlhbERlbGV0 ZSAoDQo+Pi0gIElOIENPTlNUICBFRklfVVNFUl9DUkVERU5USUFMMl9QUk9UT0NPTCAgICAgICAq VGhpcywNCj4+LSAgSU4gICAgICAgIEVGSV9VU0VSX1BST0ZJTEVfSEFORExFICAgICAgICAgICAg IFVzZXINCj4+LSAgKQ0KPj4tew0KPj4tICBFRklfU1RBVFVTICAgICAgICAgICAgICAgIFN0YXR1 czsNCj4+LSAgRUZJX1VTRVJfSU5GTyAgICAgICAgICAgICAqVXNlckluZm87DQo+Pi0gIFVJTlQ4 ICAgICAgICAgICAgICAgICAgICAgKlVzZXJJZDsNCj4+LSAgVUlOVDggICAgICAgICAgICAgICAg ICAgICAqTmV3VXNlcklkOw0KPj4tICBVSU5UTiAgICAgICAgICAgICAgICAgICAgIEluZGV4Ow0K Pj4tDQo+Pi0gIGlmICgoVGhpcyA9PSBOVUxMKSB8fCAoVXNlciA9PSBOVUxMKSkgew0KPj4tICAg IHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+Pi0gIH0NCj4+LQ0KPj4tICAvLw0KPj4t ICAvLyBHZXQgVXNlciBJZGVudGlmaWVyLg0KPj4tICAvLw0KPj4tICBVc2VySW5mbyA9IE5VTEw7 DQo+Pi0gIFN0YXR1cyA9IEZpbmRVc2VySW5mb0J5VHlwZSAoDQo+Pi0gICAgICAgICAgICAgVXNl ciwNCj4+LSAgICAgICAgICAgICBFRklfVVNFUl9JTkZPX0lERU5USUZJRVJfUkVDT1JELA0KPj4t ICAgICAgICAgICAgICZVc2VySW5mbw0KPj4tICAgICAgICAgICAgICk7DQo+Pi0gIGlmIChFRklf RVJST1IgKFN0YXR1cykpIHsNCj4+LSAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0K Pj4tICB9DQo+Pi0NCj4+LSAgLy8NCj4+LSAgLy8gRmluZCB0aGUgdXNlciBieSB1c2VyIGlkZW50 aWZpZXIgaW4gbVB3ZFRhYmxlLg0KPj4tICAvLw0KPj4tICBmb3IgKEluZGV4ID0gMDsgSW5kZXgg PCBtVXNiVGFibGUtPkNvdW50OyBJbmRleCsrKSB7DQo+Pi0gICAgVXNlcklkICAgID0gKFVJTlQ4 ICopICZtVXNiVGFibGUtPlVzZXJJbmZvW0luZGV4XS5Vc2VySWQ7DQo+Pi0gICAgTmV3VXNlcklk ID0gKFVJTlQ4ICopIChVc2VySW5mbyArIDEpOw0KPj4tICAgIGlmIChDb21wYXJlTWVtIChVc2Vy SWQsIE5ld1VzZXJJZCwgc2l6ZW9mDQo+KEVGSV9VU0VSX0lORk9fSURFTlRJRklFUikpDQo+Pj09 IDApIHsNCj4+LSAgICAgIC8vDQo+Pi0gICAgICAvLyBGb3VuZCB0aGUgdXNlciwgZGVsZXRlIGl0 Lg0KPj4tICAgICAgLy8NCj4+LSAgICAgIE1vZGlmeVRhYmxlIChJbmRleCwgTlVMTCk7DQo+Pi0g ICAgICBicmVhazsNCj4+LSAgICB9DQo+Pi0gIH0NCj4+LQ0KPj4tICBGcmVlUG9vbCAoVXNlcklu Zm8pOw0KPj4tICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+Pi19DQo+Pi0NCj4+LQ0KPj4tLyoqDQo+ Pi0gIE1haW4gZW50cnkgZm9yIHRoaXMgZHJpdmVyLg0KPj4tDQo+Pi0gIEBwYXJhbSBJbWFnZUhh bmRsZSAgICAgSW1hZ2UgaGFuZGxlIHRoaXMgZHJpdmVyLg0KPj4tICBAcGFyYW0gU3lzdGVtVGFi bGUgICAgIFBvaW50ZXIgdG8gU3lzdGVtVGFibGUuDQo+Pi0NCj4+LSAgQHJldHZhbCBFRklfU1VD RVNTICAgICBUaGlzIGZ1bmN0aW9uIGFsd2F5cyBjb21wbGV0ZSBzdWNjZXNzZnVsbHkuDQo+Pi0N Cj4+LSoqLw0KPj4tRUZJX1NUQVRVUw0KPj4tRUZJQVBJDQo+Pi1Vc2JQcm92aWRlckluaXQgKA0K Pj4tICBJTiBFRklfSEFORExFICAgICAgICBJbWFnZUhhbmRsZSwNCj4+LSAgSU4gRUZJX1NZU1RF TV9UQUJMRSAgKlN5c3RlbVRhYmxlDQo+Pi0gICkNCj4+LXsNCj4+LSAgRUZJX1NUQVRVUyAgU3Rh dHVzOw0KPj4tDQo+Pi0gIC8vDQo+Pi0gIC8vIEl0IGlzIE5PVCByb2J1c3QgZW5vdWdoIHRvIGJl IGluY2x1ZGVkIGluIHByb2R1Y3Rpb24uDQo+Pi0gIC8vDQo+Pi0gICNlcnJvciAiVGhpcyBpbXBs ZW1lbnRhdGlvbiBpcyBqdXN0IGEgc2FtcGxlLCBwbGVhc2UgY29tbWVudCB0aGlzIGxpbmUgaWYN Cj55b3UNCj4+cmVhbGx5IHdhbnQgdG8gdXNlIHRoaXMgZHJpdmVyLiINCj4+LQ0KPj4tICAvLw0K Pj4tICAvLyBJbml0IGNyZWRlbnRpYWwgdGFibGUuDQo+Pi0gIC8vDQo+Pi0gIFN0YXR1cyA9IElu aXRDcmVkZW50aWFsVGFibGUgKCk7DQo+Pi0gIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4+ LSAgICByZXR1cm4gU3RhdHVzOw0KPj4tICB9DQo+Pi0NCj4+LSAgLy8NCj4+LSAgLy8gSW5pdCBG b3JtIEJyb3dzZXINCj4+LSAgLy8NCj4+LSAgU3RhdHVzID0gSW5pdEZvcm1Ccm93c2VyICgpOw0K Pj4tICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+Pi0gICAgcmV0dXJuIFN0YXR1czsNCj4+ LSAgfQ0KPj4tDQo+Pi0gIC8vDQo+Pi0gIC8vIEluc3RhbGwgcHJvdG9jb2wgaW50ZXJmYWNlcyBm b3IgdGhlIFVzYiBDcmVkZW50aWFsIFByb3ZpZGVyLg0KPj4tICAvLw0KPj4tICBTdGF0dXMgPSBn QlMtPkluc3RhbGxQcm90b2NvbEludGVyZmFjZSAoDQo+Pi0gICAgICAgICAgICAgICAgICAmbUNh bGxiYWNrSW5mby0+RHJpdmVySGFuZGxlLA0KPj4tICAgICAgICAgICAgICAgICAgJmdFZmlVc2Vy Q3JlZGVudGlhbDJQcm90b2NvbEd1aWQsDQo+Pi0gICAgICAgICAgICAgICAgICBFRklfTkFUSVZF X0lOVEVSRkFDRSwNCj4+LSAgICAgICAgICAgICAgICAgICZnVXNiQ3JlZGVudGlhbFByb3ZpZGVy RHJpdmVyDQo+Pi0gICAgICAgICAgICAgICAgICApOw0KPj4tICByZXR1cm4gU3RhdHVzOw0KPj4t fQ0KPj5kaWZmIC0tZ2l0DQo+PmEvU2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9uL1VzYkNy ZWRlbnRpYWxQcm92aWRlckR4ZS9Vc2JDcmVkZW50aWFsDQo+UHINCj4+b3ZpZGVyLmgNCj4+Yi9T ZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vVXNiQ3JlZGVudGlhbFByb3ZpZGVyRHhlL1Vz YkNyZWRlbnRpYWwNCj5Qcg0KPj5vdmlkZXIuaA0KPj5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQN Cj4+aW5kZXggNjNmNjU3NjA0NS4uMDAwMDAwMDAwMA0KPj4tLS0NCj4+YS9TZWN1cml0eVBrZy9V c2VySWRlbnRpZmljYXRpb24vVXNiQ3JlZGVudGlhbFByb3ZpZGVyRHhlL1VzYkNyZWRlbnRpYWwN Cj5Qcg0KPj5vdmlkZXIuaA0KPj4rKysgL2Rldi9udWxsDQo+PkBAIC0xLDM2MSArMCwwIEBADQo+ Pi0vKiogQGZpbGUNCj4+LSAgVXNiIENyZWRlbnRpYWwgUHJvdmlkZXIgZHJpdmVyIGhlYWRlciBm aWxlLg0KPj4tDQo+Pi1Db3B5cmlnaHQgKGMpIDIwMDkgLSAyMDE4LCBJbnRlbCBDb3Jwb3JhdGlv bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+Pi1UaGlzIHByb2dyYW0gYW5kIHRoZSBhY2Nv bXBhbnlpbmcgbWF0ZXJpYWxzDQo+Pi1hcmUgbGljZW5zZWQgYW5kIG1hZGUgYXZhaWxhYmxlIHVu ZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgQlNEDQo+PkxpY2Vuc2UNCj4+LXdo aWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLiAgVGhlIGZ1bGwgdGV4dCBvZiB0aGUg bGljZW5zZSBtYXkgYmUNCj4+Zm91bmQgYXQNCj4+LWh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNl bnNlcy9ic2QtbGljZW5zZS5waHANCj4+LQ0KPj4tVEhFIFBST0dSQU0gSVMgRElTVFJJQlVURUQg VU5ERVIgVEhFIEJTRCBMSUNFTlNFIE9OIEFOICJBUyBJUyINCj5CQVNJUywNCj4+LVdJVEhPVVQg V0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUg0KPj5FWFBS RVNTIE9SIElNUExJRUQuDQo+Pi0NCj4+LSoqLw0KPj4tDQo+Pi0jaWZuZGVmIF9VU0JfQ1JFREVO VElBTF9QUk9WSURFUl9IXw0KPj4tI2RlZmluZSBfVVNCX0NSRURFTlRJQUxfUFJPVklERVJfSF8N Cj4+LQ0KPj4tI2luY2x1ZGUgPFVlZmkuaD4NCj4+LQ0KPj4tI2luY2x1ZGUgPEd1aWQvR2xvYmFs VmFyaWFibGUuaD4NCj4+LSNpbmNsdWRlIDxHdWlkL0ZpbGVJbmZvLmg+DQo+Pi0jaW5jbHVkZSA8 R3VpZC9TZWN1cml0eVBrZ1Rva2VuU3BhY2UuaD4NCj4+LSNpbmNsdWRlIDxHdWlkL1VzYkNyZWRl bnRpYWxQcm92aWRlckhpaS5oPg0KPj4tDQo+Pi0jaW5jbHVkZSA8UHJvdG9jb2wvU2ltcGxlRmls ZVN5c3RlbS5oPg0KPj4tI2luY2x1ZGUgPFByb3RvY29sL0Jsb2NrSW8uaD4NCj4+LSNpbmNsdWRl IDxQcm90b2NvbC9Vc2VyQ3JlZGVudGlhbDIuaD4NCj4+LSNpbmNsdWRlIDxQcm90b2NvbC9Vc2Vy TWFuYWdlci5oPg0KPj4tDQo+Pi0jaW5jbHVkZSA8TGlicmFyeS9VZWZpUnVudGltZVNlcnZpY2Vz VGFibGVMaWIuaD4NCj4+LSNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlCb290U2VydmljZXNUYWJsZUxp Yi5oPg0KPj4tI2luY2x1ZGUgPExpYnJhcnkvTWVtb3J5QWxsb2NhdGlvbkxpYi5oPg0KPj4tI2lu Y2x1ZGUgPExpYnJhcnkvQmFzZU1lbW9yeUxpYi5oPg0KPj4tI2luY2x1ZGUgPExpYnJhcnkvRGV2 aWNlUGF0aExpYi5oPg0KPj4tI2luY2x1ZGUgPExpYnJhcnkvQmFzZUNyeXB0TGliLmg+DQo+Pi0j aW5jbHVkZSA8TGlicmFyeS9EZWJ1Z0xpYi5oPg0KPj4tI2luY2x1ZGUgPExpYnJhcnkvVWVmaUxp Yi5oPg0KPj4tI2luY2x1ZGUgPExpYnJhcnkvUHJpbnRMaWIuaD4NCj4+LSNpbmNsdWRlIDxMaWJy YXJ5L0hpaUxpYi5oPg0KPj4tI2luY2x1ZGUgPExpYnJhcnkvUGNkTGliLmg+DQo+Pi0NCj4+LWV4 dGVybiBVSU5UOCAgICAgIFVzYkNyZWRlbnRpYWxQcm92aWRlclN0cmluZ3NbXTsNCj4+LQ0KPj4t I2RlZmluZSBVU0JfVEFCTEVfSU5DICAgICAgICAgIDE2DQo+Pi0jZGVmaW5lIEhBU0hFRF9DUkVE RU5USUFMX0xFTiAgMjANCj4+LQ0KPj4tLy8NCj4+LS8vIFNhdmUgdGhlIGVucm9sbCB1c2VyIGNy ZWRlbnRpYWwgSW5mb3JtYXRpb24uDQo+Pi0vLw0KPj4tdHlwZWRlZiBzdHJ1Y3Qgew0KPj4tICBF RklfVVNFUl9JTkZPX0lERU5USUZJRVIgIFVzZXJJZDsNCj4+LSAgVUlOVDggICAgICAgICAgICAg ICAgICAgICBUb2tlbltIQVNIRURfQ1JFREVOVElBTF9MRU5dOw0KPj4tfSBVU0JfSU5GTzsNCj4+ LQ0KPj4tLy8NCj4+LS8vIFVTQiBDcmVkZW50aWFsIFRhYmxlLg0KPj4tLy8NCj4+LXR5cGVkZWYg c3RydWN0IHsNCj4+LSAgVUlOVE4gICAgIENvdW50Ow0KPj4tICBVSU5UTiAgICAgTWF4Q291bnQ7 DQo+Pi0gIFVTQl9JTkZPICBVc2VySW5mb1sxXTsNCj4+LX0gQ1JFREVOVElBTF9UQUJMRTsNCj4+ LQ0KPj4tLy8NCj4+LS8vIFRoZSB1c2VyIGluZm9ybWF0aW9uIG9uIHRoZSBVU0IgcHJvdmlkZXIu DQo+Pi0vLw0KPj4tdHlwZWRlZiBzdHJ1Y3Qgew0KPj4tICBVSU5UTiAgICAgICAgICAgICAgICAg ICAgICAgICBDb3VudDsNCj4+LSAgRUZJX1VTRVJfSU5GTyAgICAgICAgICAgICAgICAgKkluZm9b MV07DQo+Pi19IFVTQl9DUkVERU5USUFMX0lORk87DQo+Pi0NCj4+LSNkZWZpbmUgVVNCX1BST1ZJ REVSX1NJR05BVFVSRSAgU0lHTkFUVVJFXzMyICgnVScsICdTJywgJ0InLCAnUCcpDQo+Pi0NCj4+ LXR5cGVkZWYgc3RydWN0IHsNCj4+LSAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICBT aWduYXR1cmU7DQo+Pi0gIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgICAgRHJpdmVySGFu ZGxlOw0KPj4tICBFRklfSElJX0hBTkRMRSAgICAgICAgICAgICAgICAgIEhpaUhhbmRsZTsNCj4+ LX0gVVNCX1BST1ZJREVSX0NBTExCQUNLX0lORk87DQo+Pi0NCj4+LS8qKg0KPj4tICBFbnJvbGwg YSB1c2VyIG9uIGEgY3JlZGVudGlhbCBwcm92aWRlci4NCj4+LQ0KPj4tICBUaGlzIGZ1bmN0aW9u IGVucm9sbHMgYW5kIGRlbGV0ZXMgYSB1c2VyIHByb2ZpbGUgdXNpbmcgdGhpcyBjcmVkZW50aWFs DQo+cHJvdmlkZXIuDQo+Pi0gIElmIGEgdXNlciBwcm9maWxlIGlzIHN1Y2Nlc3NmdWxseSBlbnJv bGxlZCwgaXQgY2FsbHMgdGhlIFVzZXIgTWFuYWdlciBQcm90b2NvbA0KPj4tICBmdW5jdGlvbiBO b3RpZnkoKSB0byBub3RpZnkgdGhlIHVzZXIgbWFuYWdlciBkcml2ZXIgdGhhdCBjcmVkZW50aWFs DQo+PmluZm9ybWF0aW9uDQo+Pi0gIGhhcyBjaGFuZ2VkLiBJZiBhbiBlbnJvbGxlZCB1c2VyIGRv ZXMgZXhpc3QsIGRlbGV0ZSB0aGUgdXNlciBvbiB0aGUNCj4+Y3JlZGVudGlhbA0KPj4tICBwcm92 aWRlci4NCj4+LQ0KPj4tICBAcGFyYW1baW5dIFRoaXMgICAgICAgICAgICAgICAgUG9pbnRzIHRv IHRoaXMgaW5zdGFuY2Ugb2YNCj4+RUZJX1VTRVJfQ1JFREVOVElBTDJfUFJPVE9DT0wuDQo+Pi0g IEBwYXJhbVtpbl0gVXNlciAgICAgICAgICAgICAgICBUaGUgdXNlciBwcm9maWxlIHRvIGVucm9s bC4NCj4+LQ0KPj4tICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgVXNlciBwcm9maWxl IHdhcyBzdWNjZXNzZnVsbHkgZW5yb2xsZWQuDQo+Pi0gIEByZXR2YWwgRUZJX0FDQ0VTU19ERU5J RUQgICAgICBDdXJyZW50IHVzZXIgcHJvZmlsZSBkb2VzIG5vdCBwZXJtaXQNCj4+ZW5yb2xsbWVu dCBvbiB0aGUNCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIgcHJvZmls ZSBoYW5kbGUuIEVpdGhlciB0aGUgdXNlciBwcm9maWxlIGNhbm5vdCBlbnJvbGwNCj4+LSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uIGFueSB1c2VyIHByb2ZpbGUgb3IgY2Fubm90 IGVucm9sbCBvbiBhIHVzZXIgcHJvZmlsZQ0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgb3RoZXIgdGhhbiB0aGUgY3VycmVudCB1c2VyIHByb2ZpbGUuDQo+Pi0gIEByZXR2YWwg RUZJX1VOU1VQUE9SVEVEICAgICAgICBUaGlzIGNyZWRlbnRpYWwgcHJvdmlkZXIgZG9lcyBub3Qg c3VwcG9ydA0KPj5lbnJvbGxtZW50IGluDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB0aGUgcHJlLU9TLg0KPj4tICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICAgVGhl IG5ldyBjcmVkZW50aWFsIGNvdWxkIG5vdCBiZSBjcmVhdGVkDQo+PmJlY2F1c2Ugb2YgYSBkZXZp Y2UNCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yLg0KPj4tICBAcmV0 dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgVXNlciBkb2VzIG5vdCByZWZlciB0byBhIHZhbGlk IHVzZXINCj4+cHJvZmlsZSBoYW5kbGUuDQo+Pi0NCj4+LSoqLw0KPj4tRUZJX1NUQVRVUw0KPj4t RUZJQVBJDQo+Pi1DcmVkZW50aWFsRW5yb2xsICgNCj4+LSAgSU4gQ09OU1QgIEVGSV9VU0VSX0NS RURFTlRJQUwyX1BST1RPQ09MICAgICAgICpUaGlzLA0KPj4tICBJTiAgICAgICAgRUZJX1VTRVJf UFJPRklMRV9IQU5ETEUgICAgICAgICAgICAgVXNlcg0KPj4tICApOw0KPj4tDQo+Pi0vKioNCj4+ LSAgUmV0dXJucyB0aGUgdXNlciBpbnRlcmZhY2UgaW5mb3JtYXRpb24gdXNlZCBkdXJpbmcgdXNl ciBpZGVudGlmaWNhdGlvbi4NCj4+LQ0KPj4tICBUaGlzIGZ1bmN0aW9uIGVucm9sbHMgYSB1c2Vy IG9uIHRoaXMgY3JlZGVudGlhbCBwcm92aWRlci4gSWYgdGhlIHVzZXIgZXhpc3RzIG9uDQo+Pi0g IHRoaXMgY3JlZGVudGlhbCBwcm92aWRlciwgdXBkYXRlIHRoZSB1c2VyIGluZm9ybWF0aW9uIG9u IHRoaXMgY3JlZGVudGlhbA0KPj5wcm92aWRlcjsNCj4+LSAgb3RoZXJ3aXNlIGRlbGV0ZSB0aGUg dXNlciBpbmZvcm1hdGlvbiBvbiBjcmVkZW50aWFsIHByb3ZpZGVyLg0KPj4tDQo+Pi0gIEBwYXJh bVtpbl0gIFRoaXMgICAgICAgUG9pbnRzIHRvIHRoaXMgaW5zdGFuY2Ugb2YgdGhlDQo+PkVGSV9V U0VSX0NSRURFTlRJQUwyX1BST1RPQ09MLg0KPj4tICBAcGFyYW1bb3V0XSBIaWkgICAgICAgIE9u IHJldHVybiwgaG9sZHMgdGhlIEhJSSBkYXRhYmFzZSBoYW5kbGUuDQo+Pi0gIEBwYXJhbVtvdXRd IEZvcm1TZXRJZCAgT24gcmV0dXJuLCBob2xkcyB0aGUgaWRlbnRpZmllciBvZiB0aGUgZm9ybSBz ZXQNCj4+d2hpY2ggY29udGFpbnMNCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZm9y bSB1c2VkIGR1cmluZyB1c2VyIGlkZW50aWZpY2F0aW9uLg0KPj4tICBAcGFyYW1bb3V0XSBGb3Jt SWQgICAgIE9uIHJldHVybiwgaG9sZHMgdGhlIGlkZW50aWZpZXIgb2YgdGhlIGZvcm0gdXNlZA0K Pj5kdXJpbmcgdXNlcg0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgIGlkZW50aWZpY2F0aW9u Lg0KPj4tDQo+Pi0gIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICBGb3JtIHJldHVybmVk IHN1Y2Nlc3NmdWxseS4NCj4+LSAgQHJldHZhbCBFRklfTk9UX0ZPVU5EICAgICAgICAgIEZvcm0g bm90IHJldHVybmVkLg0KPj4tICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgSGlpIGlz IE5VTEwgb3IgRm9ybVNldElkIGlzIE5VTEwgb3INCj4+Rm9ybUlkIGlzIE5VTEwuDQo+Pi0NCj4+ LSoqLw0KPj4tRUZJX1NUQVRVUw0KPj4tRUZJQVBJDQo+Pi1DcmVkZW50aWFsRm9ybSAoDQo+Pi0g IElOIENPTlNUICBFRklfVVNFUl9DUkVERU5USUFMMl9QUk9UT0NPTCAgICAgICAqVGhpcywNCj4+ LSAgT1VUICAgICAgIEVGSV9ISUlfSEFORExFICAgICAgICAgICAgICAgICAgICAgICpIaWksDQo+ Pi0gIE9VVCAgICAgICBFRklfR1VJRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqRm9ybVNl dElkLA0KPj4tICBPVVQgICAgICAgRUZJX0ZPUk1fSUQgICAgICAgICAgICAgICAgICAgICAgICAg KkZvcm1JZA0KPj4tICApOw0KPj4tDQo+Pi0vKioNCj4+LSAgUmV0dXJucyBiaXRtYXAgdXNlZCB0 byBkZXNjcmliZSB0aGUgY3JlZGVudGlhbCBwcm92aWRlciB0eXBlLg0KPj4tDQo+Pi0gIFRoaXMg b3B0aW9uYWwgZnVuY3Rpb24gcmV0dXJucyBhIGJpdG1hcCB3aGljaCBpcyBsZXNzIHRoYW4gb3Ig ZXF1YWwgdG8gdGhlDQo+Pm51bWJlcg0KPj4tICBvZiBwaXhlbHMgc3BlY2lmaWVkIGJ5IFdpZHRo IGFuZCBIZWlnaHQuIElmIG5vIHN1Y2ggYml0bWFwIGV4aXN0cywgdGhlbg0KPj5FRklfTk9UX0ZP VU5EDQo+Pi0gIGlzIHJldHVybmVkLg0KPj4tDQo+Pi0gIEBwYXJhbVtpbl0gICAgIFRoaXMgICAg UG9pbnRzIHRvIHRoaXMgaW5zdGFuY2Ugb2YgdGhlDQo+PkVGSV9VU0VSX0NSRURFTlRJQUwyX1BS T1RPQ09MLg0KPj4tICBAcGFyYW1baW4sIG91dF0gV2lkdGggIE9uIGVudHJ5LCBwb2ludHMgdG8g dGhlIGRlc2lyZWQgYml0bWFwIHdpZHRoLiBJZg0KPj5OVUxMIHRoZW4gbm8NCj4+LSAgICAgICAg ICAgICAgICAgICAgICAgICBiaXRtYXAgaW5mb3JtYXRpb24gd2lsbCBiZSByZXR1cm5lZC4gT24g ZXhpdCwgcG9pbnRzIHRvIHRoZQ0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoIG9m IHRoZSBiaXRtYXAgcmV0dXJuZWQuDQo+Pi0gIEBwYXJhbVtpbiwgb3V0XSBIZWlnaHQgT24gZW50 cnksIHBvaW50cyB0byB0aGUgZGVzaXJlZCBiaXRtYXAgaGVpZ2h0LiBJZg0KPj5OVUxMIHRoZW4g bm8NCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICBiaXRtYXAgaW5mb3JtYXRpb24gd2lsbCBi ZSByZXR1cm5lZC4gT24gZXhpdCwgcG9pbnRzIHRvIHRoZQ0KPj4tICAgICAgICAgICAgICAgICAg ICAgICAgIGhlaWdodCBvZiB0aGUgYml0bWFwIHJldHVybmVkLg0KPj4tICBAcGFyYW1bb3V0XSAg ICBIaWkgICAgIE9uIHJldHVybiwgaG9sZHMgdGhlIEhJSSBkYXRhYmFzZSBoYW5kbGUuDQo+Pi0g IEBwYXJhbVtvdXRdICAgIEltYWdlICAgT24gcmV0dXJuLCBob2xkcyB0aGUgSElJIGltYWdlIGlk ZW50aWZpZXIuDQo+Pi0NCj4+LSAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgIEltYWdl IGlkZW50aWZpZXIgcmV0dXJuZWQgc3VjY2Vzc2Z1bGx5Lg0KPj4tICBAcmV0dmFsIEVGSV9OT1Rf Rk9VTkQgICAgICAgICAgSW1hZ2UgaWRlbnRpZmllciBub3QgcmV0dXJuZWQuDQo+Pi0gIEByZXR2 YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICBIaWkgaXMgTlVMTCBvciBJbWFnZSBpcyBOVUxMLg0K Pj4tDQo+Pi0qKi8NCj4+LUVGSV9TVEFUVVMNCj4+LUVGSUFQSQ0KPj4tQ3JlZGVudGlhbFRpbGUg KA0KPj4tICBJTiBDT05TVCAgRUZJX1VTRVJfQ1JFREVOVElBTDJfUFJPVE9DT0wgICAgICAgKlRo aXMsDQo+Pi0gIElOIE9VVCAgICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAq V2lkdGgsDQo+Pi0gIElOIE9VVCAgICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAqSGVpZ2h0LA0KPj4tICBPVVQgICAgICAgRUZJX0hJSV9IQU5ETEUgICAgICAgICAgICAgICAg ICAgICAgKkhpaSwNCj4+LSAgT1VUICAgICAgIEVGSV9JTUFHRV9JRCAgICAgICAgICAgICAgICAg ICAgICAgICpJbWFnZQ0KPj4tICApOw0KPj4tDQo+Pi0vKioNCj4+LSAgUmV0dXJucyBzdHJpbmcg dXNlZCB0byBkZXNjcmliZSB0aGUgY3JlZGVudGlhbCBwcm92aWRlciB0eXBlLg0KPj4tDQo+Pi0g IFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIHN0cmluZyB3aGljaCBkZXNjcmliZXMgdGhlIGNyZWRl bnRpYWwgcHJvdmlkZXIuIElmIG5vDQo+Pi0gIHN1Y2ggc3RyaW5nIGV4aXN0cywgdGhlbiBFRklf Tk9UX0ZPVU5EIGlzIHJldHVybmVkLg0KPj4tDQo+Pi0gIEBwYXJhbVtpbl0gIFRoaXMgICAgICAg UG9pbnRzIHRvIHRoaXMgaW5zdGFuY2Ugb2YgdGhlDQo+PkVGSV9VU0VSX0NSRURFTlRJQUwyX1BS T1RPQ09MLg0KPj4tICBAcGFyYW1bb3V0XSBIaWkgICAgICAgIE9uIHJldHVybiwgaG9sZHMgdGhl IEhJSSBkYXRhYmFzZSBoYW5kbGUuDQo+Pi0gIEBwYXJhbVtvdXRdIFN0cmluZyAgICAgT24gcmV0 dXJuLCBob2xkcyB0aGUgSElJIHN0cmluZyBpZGVudGlmaWVyLg0KPj4tDQo+Pi0gIEByZXR2YWwg RUZJX1NVQ0NFU1MgICAgICAgICAgICBTdHJpbmcgaWRlbnRpZmllciByZXR1cm5lZCBzdWNjZXNz ZnVsbHkuDQo+Pi0gIEByZXR2YWwgRUZJX05PVF9GT1VORCAgICAgICAgICBTdHJpbmcgaWRlbnRp ZmllciBub3QgcmV0dXJuZWQuDQo+Pi0gIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICBI aWkgaXMgTlVMTCBvciBTdHJpbmcgaXMgTlVMTC4NCj4+LQ0KPj4tKiovDQo+Pi1FRklfU1RBVFVT DQo+Pi1FRklBUEkNCj4+LUNyZWRlbnRpYWxUaXRsZSAoDQo+Pi0gIElOIENPTlNUICBFRklfVVNF Ul9DUkVERU5USUFMMl9QUk9UT0NPTCAgICAgICAqVGhpcywNCj4+LSAgT1VUICAgICAgIEVGSV9I SUlfSEFORExFICAgICAgICAgICAgICAgICAgICAgICpIaWksDQo+Pi0gIE9VVCAgICAgICBFRklf U1RSSU5HX0lEICAgICAgICAgICAgICAgICAgICAgICAqU3RyaW5nDQo+Pi0gICk7DQo+Pi0NCj4+ LS8qKg0KPj4tICBSZXR1cm4gdGhlIHVzZXIgaWRlbnRpZmllciBhc3NvY2lhdGVkIHdpdGggdGhl IGN1cnJlbnRseSBhdXRoZW50aWNhdGVkIHVzZXIuDQo+Pi0NCj4+LSAgVGhpcyBmdW5jdGlvbiBy ZXR1cm5zIHRoZSB1c2VyIGlkZW50aWZpZXIgb2YgdGhlIHVzZXIgYXV0aGVudGljYXRlZCBieSB0 aGlzDQo+PmNyZWRlbnRpYWwNCj4+LSAgcHJvdmlkZXIuIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVk IGFmdGVyIHRoZSBjcmVkZW50aWFsLXJlbGF0ZWQgaW5mb3JtYXRpb24gaGFzDQo+PmJlZW4NCj4+ LSAgc3VibWl0dGVkIG9uIGEgZm9ybSBPUiBhZnRlciBhIGNhbGwgdG8gRGVmYXVsdCgpIGhhcyBy ZXR1cm5lZCB0aGF0IHRoaXMNCj4+Y3JlZGVudGlhbCBpcw0KPj4tICByZWFkeSB0byBsb2cgb24u DQo+Pi0NCj4+LSAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAgICAgUG9pbnRzIHRvIHRoaXMgaW5z dGFuY2Ugb2YgdGhlDQo+PkVGSV9VU0VSX0NSRURFTlRJQUwyX1BST1RPQ09MLg0KPj4tICBAcGFy YW1baW5dICBVc2VyICAgICAgICAgICBUaGUgdXNlciBwcm9maWxlIGhhbmRsZSBvZiB0aGUgdXNl ciBwcm9maWxlIGN1cnJlbnRseQ0KPj5iZWluZw0KPj4tICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zaWRlcmVkIGJ5IHRoZSB1c2VyIGlkZW50aXR5IG1hbmFnZXIuIElmIE5VTEwsIHRo ZW4gbm8NCj51c2VyDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2ZpbGUgaXMg Y3VycmVudGx5IHVuZGVyIGNvbnNpZGVyYXRpb24uDQo+Pi0gIEBwYXJhbVtvdXRdIElkZW50aWZp ZXIgICAgIE9uIHJldHVybiwgcG9pbnRzIHRvIHRoZSB1c2VyIGlkZW50aWZpZXIuDQo+Pi0NCj4+ LSAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgVXNlciBpZGVudGlmaWVyIHJldHVybmVkIHN1 Y2Nlc3NmdWxseS4NCj4+LSAgQHJldHZhbCBFRklfTk9UX1JFQURZICAgICAgTm8gdXNlciBpZGVu dGlmaWVyIGNhbiBiZSByZXR1cm5lZC4NCj4+LSAgQHJldHZhbCBFRklfQUNDRVNTX0RFTklFRCAg VGhlIHVzZXIgaGFzIGJlZW4gbG9ja2VkIG91dCBvZiB0aGlzIHVzZXINCj4+Y3JlZGVudGlhbC4N Cj4+LSAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgIFRoaXMgaXMgTlVMTCwgb3IgSWRl bnRpZmllciBpcyBOVUxMLg0KPj4tICBAcmV0dmFsIEVGSV9OT1RfRk9VTkQgICAgICAgICAgVXNl ciBpcyBub3QgTlVMTCwgYW5kIHRoZSBzcGVjaWZpZWQgdXNlcg0KPj5oYW5kbGUgY2FuJ3QgYmUN Cj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kIGluIHVzZXIgcHJvZmls ZSBkYXRhYmFzZS4NCj4+LQ0KPj4tKiovDQo+Pi1FRklfU1RBVFVTDQo+Pi1FRklBUEkNCj4+LUNy ZWRlbnRpYWxVc2VyICgNCj4+LSAgSU4gQ09OU1QgIEVGSV9VU0VSX0NSRURFTlRJQUwyX1BST1RP Q09MICAgICAgICpUaGlzLA0KPj4tICBJTiAgICAgICAgRUZJX1VTRVJfUFJPRklMRV9IQU5ETEUg ICAgICAgICAgICAgVXNlciwNCj4+LSAgT1VUICAgICAgIEVGSV9VU0VSX0lORk9fSURFTlRJRklF UiAgICAgICAgICAgICpJZGVudGlmaWVyDQo+Pi0gICk7DQo+Pi0NCj4+LS8qKg0KPj4tICBJbmRp Y2F0ZSB0aGF0IHVzZXIgaW50ZXJmYWNlIGludGVyYWN0aW9uIGhhcyBiZWd1biBmb3IgdGhlIHNw ZWNpZmllZA0KPj5jcmVkZW50aWFsLg0KPj4tDQo+Pi0gIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVk IHdoZW4gYSBjcmVkZW50aWFsIHByb3ZpZGVyIGlzIHNlbGVjdGVkIGJ5IHRoZSB1c2VyLiBJZg0K Pj4tICBBdXRvTG9nb24gcmV0dXJucyBGQUxTRSwgdGhlbiB0aGUgdXNlciBpbnRlcmZhY2Ugd2ls bCBiZSBjb25zdHJ1Y3RlZCBieQ0KPnRoZQ0KPj5Vc2VyDQo+Pi0gIElkZW50aXR5IE1hbmFnZXIu DQo+Pi0NCj4+LSAgQHBhcmFtW2luXSAgVGhpcyAgICAgICBQb2ludHMgdG8gdGhpcyBpbnN0YW5j ZSBvZiB0aGUNCj4+RUZJX1VTRVJfQ1JFREVOVElBTDJfUFJPVE9DT0wuDQo+Pi0gIEBwYXJhbVtv dXRdIEF1dG9Mb2dvbiAgT24gcmV0dXJuLCBwb2ludHMgdG8gdGhlIGNyZWRlbnRpYWwgcHJvdmlk ZXIncw0KPj5jYXBhYmlsaXRpZXMNCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICBhZnRlciB0 aGUgY3JlZGVudGlhbCBwcm92aWRlciBoYXMgYmVlbiBzZWxlY3RlZCBieSB0aGUgdXNlci4NCj4+ LQ0KPj4tICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgQ3JlZGVudGlhbCBwcm92aWRl ciBzdWNjZXNzZnVsbHkgc2VsZWN0ZWQuDQo+Pi0gIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1F VEVSICBBdXRvTG9nb24gaXMgTlVMTC4NCj4+LQ0KPj4tKiovDQo+Pi1FRklfU1RBVFVTDQo+Pi1F RklBUEkNCj4+LUNyZWRlbnRpYWxTZWxlY3QgKA0KPj4tICBJTiAgQ09OU1QgIEVGSV9VU0VSX0NS RURFTlRJQUwyX1BST1RPQ09MICAgKlRoaXMsDQo+Pi0gIE9VVCAgICAgICAgRUZJX0NSRURFTlRJ QUxfTE9HT05fRkxBR1MgICAgICAqQXV0b0xvZ29uDQo+Pi0gICk7DQo+Pi0NCj4+LS8qKg0KPj4t ICBJbmRpY2F0ZSB0aGF0IHVzZXIgaW50ZXJmYWNlIGludGVyYWN0aW9uIGhhcyBlbmRlZCBmb3Ig dGhlIHNwZWNpZmllZA0KPj5jcmVkZW50aWFsLg0KPj4tDQo+Pi0gIFRoaXMgZnVuY3Rpb24gaXMg Y2FsbGVkIHdoZW4gYSBjcmVkZW50aWFsIHByb3ZpZGVyIGlzIGRlc2VsZWN0ZWQgYnkgdGhlIHVz ZXIuDQo+Pi0NCj4+LSAgQHBhcmFtW2luXSBUaGlzICAgICAgICBQb2ludHMgdG8gdGhpcyBpbnN0 YW5jZSBvZiB0aGUNCj4+RUZJX1VTRVJfQ1JFREVOVElBTDJfUFJPVE9DT0wuDQo+Pi0NCj4+LSAg QHJldHZhbCBFRklfU1VDQ0VTUyAgICBDcmVkZW50aWFsIHByb3ZpZGVyIHN1Y2Nlc3NmdWxseSBk ZXNlbGVjdGVkLg0KPj4tDQo+Pi0qKi8NCj4+LUVGSV9TVEFUVVMNCj4+LUVGSUFQSQ0KPj4tQ3Jl ZGVudGlhbERlc2VsZWN0ICgNCj4+LSAgSU4gQ09OU1QgIEVGSV9VU0VSX0NSRURFTlRJQUwyX1BS T1RPQ09MICAgICAgICpUaGlzDQo+Pi0gICk7DQo+Pi0NCj4+LS8qKg0KPj4tICBSZXR1cm4gdGhl IGRlZmF1bHQgbG9nb24gYmVoYXZpb3IgZm9yIHRoaXMgdXNlciBjcmVkZW50aWFsLg0KPj4tDQo+ Pi0gIFRoaXMgZnVuY3Rpb24gcmVwb3J0cyB0aGUgZGVmYXVsdCBsb2dpbiBiZWhhdmlvciByZWdh cmRpbmcgdGhpcyBjcmVkZW50aWFsDQo+PnByb3ZpZGVyLg0KPj4tDQo+Pi0gIEBwYXJhbVtpbl0g IFRoaXMgICAgICAgUG9pbnRzIHRvIHRoaXMgaW5zdGFuY2Ugb2YgdGhlDQo+PkVGSV9VU0VSX0NS RURFTlRJQUwyX1BST1RPQ09MLg0KPj4tICBAcGFyYW1bb3V0XSBBdXRvTG9nb24gIE9uIHJldHVy biwgaG9sZHMgd2hldGhlciB0aGUgY3JlZGVudGlhbA0KPnByb3ZpZGVyDQo+PnNob3VsZCBiZSB1 c2VkDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgYnkgZGVmYXVsdCB0byBhdXRvbWF0aWNh bGx5IGxvZyBvbiB0aGUgdXNlci4NCj4+LQ0KPj4tICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAg ICAgICAgRGVmYXVsdCBpbmZvcm1hdGlvbiBzdWNjZXNzZnVsbHkgcmV0dXJuZWQuDQo+Pi0gIEBy ZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICBBdXRvTG9nb24gaXMgTlVMTC4NCj4+LQ0KPj4t KiovDQo+Pi1FRklfU1RBVFVTDQo+Pi1FRklBUEkNCj4+LUNyZWRlbnRpYWxEZWZhdWx0ICgNCj4+ LSAgSU4gQ09OU1QgIEVGSV9VU0VSX0NSRURFTlRJQUwyX1BST1RPQ09MICAgICAgICpUaGlzLA0K Pj4tICBPVVQgICAgICAgRUZJX0NSRURFTlRJQUxfTE9HT05fRkxBR1MgICAgICAgICAgKkF1dG9M b2dvbg0KPj4tICApOw0KPj4tDQo+Pi0vKioNCj4+LSAgUmV0dXJuIGluZm9ybWF0aW9uIGF0dGFj aGVkIHRvIHRoZSBjcmVkZW50aWFsIHByb3ZpZGVyLg0KPj4tDQo+Pi0gIFRoaXMgZnVuY3Rpb24g cmV0dXJucyB1c2VyIGluZm9ybWF0aW9uLg0KPj4tDQo+Pi0gIEBwYXJhbVtpbl0gICAgICBUaGlz ICAgICAgICAgIFBvaW50cyB0byB0aGlzIGluc3RhbmNlIG9mIHRoZQ0KPj5FRklfVVNFUl9DUkVE RU5USUFMMl9QUk9UT0NPTC4NCj4+LSAgQHBhcmFtW2luXSAgICAgIFVzZXJJbmZvICAgICAgSGFu ZGxlIG9mIHRoZSB1c2VyIGluZm9ybWF0aW9uIGRhdGEgcmVjb3JkLg0KPj4tICBAcGFyYW1bb3V0 XSAgICAgSW5mbyAgICAgICAgICBPbiBlbnRyeSwgcG9pbnRzIHRvIGEgYnVmZmVyIG9mIGF0IGxl YXN0ICpJbmZvU2l6ZQ0KPj5ieXRlcy4gT24NCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZXhpdCwgaG9sZHMgdGhlIHVzZXIgaW5mb3JtYXRpb24uIElmIHRoZSBidWZmZXIgaXMg dG9vIHNtYWxsDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGhvbGQgdGhl IGluZm9ybWF0aW9uLCB0aGVuIEVGSV9CVUZGRVJfVE9PX1NNQUxMIGlzDQo+PnJldHVybmVkDQo+ Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBJbmZvU2l6ZSBpcyB1cGRhdGVk IHRvIGNvbnRhaW4gdGhlIG51bWJlciBvZiBieXRlcw0KPj5hY3R1YWxseQ0KPj4tICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZC4NCj4+LSAgQHBhcmFtW2luLCBvdXRdIElu Zm9TaXplICAgICAgT24gZW50cnksIHBvaW50cyB0byB0aGUgc2l6ZSBvZiBJbmZvLiBPbiByZXR1 cm4sDQo+PnBvaW50cyB0byB0aGUNCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c2l6ZSBvZiB0aGUgdXNlciBpbmZvcm1hdGlvbi4NCj4+LQ0KPj4tICBAcmV0dmFsIEVGSV9TVUND RVNTICAgICAgICAgICBJbmZvcm1hdGlvbiByZXR1cm5lZCBzdWNjZXNzZnVsbHkuDQo+Pi0gIEBy ZXR2YWwgRUZJX0JVRkZFUl9UT09fU01BTEwgIFRoZSBzaXplIHNwZWNpZmllZCBieSBJbmZvU2l6 ZSBpcyB0b28NCj5zbWFsbA0KPj50byBob2xkIGFsbCBvZiB0aGUNCj4+LSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdXNlciBpbmZvcm1hdGlvbi4gVGhlIHNpemUgcmVxdWlyZWQgaXMg cmV0dXJuZWQgaW4gKkluZm9TaXplLg0KPj4tICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRF UiBJbmZvIGlzIE5VTEwgb3IgSW5mb1NpemUgaXMgTlVMTC4NCj4+LSAgQHJldHZhbCBFRklfTk9U X0ZPVU5EICAgICAgICAgVGhlIHNwZWNpZmllZCBVc2VySW5mbyBkb2VzIG5vdCByZWZlciB0byBh DQo+PnZhbGlkIHVzZXIgaW5mbyBoYW5kbGUuDQo+Pi0NCj4+LSoqLw0KPj4tRUZJX1NUQVRVUw0K Pj4tRUZJQVBJDQo+Pi1DcmVkZW50aWFsR2V0SW5mbyAoDQo+Pi0gIElOIENPTlNUICBFRklfVVNF Ul9DUkVERU5USUFMMl9QUk9UT0NPTCAgICAgICAqVGhpcywNCj4+LSAgSU4gICAgICAgIEVGSV9V U0VSX0lORk9fSEFORExFICAgICAgICAgICAgICAgIFVzZXJJbmZvLA0KPj4tICBPVVQgICAgICAg RUZJX1VTRVJfSU5GTyAgICAgICAgICAgICAgICAgICAgICAgKkluZm8sDQo+Pi0gIElOIE9VVCAg ICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqSW5mb1NpemUNCj4+LSAgKTsN Cj4+LQ0KPj4tLyoqDQo+Pi0gIEVudW1lcmF0ZSBhbGwgb2YgdGhlIHVzZXIgaW5mb3JtYXRpb25z IG9uIHRoZSBjcmVkZW50aWFsIHByb3ZpZGVyLg0KPj4tDQo+Pi0gIFRoaXMgZnVuY3Rpb24gcmV0 dXJucyB0aGUgbmV4dCB1c2VyIGluZm9ybWF0aW9uIHJlY29yZC4gVG8gcmV0cmlldmUgdGhlIGZp cnN0DQo+PnVzZXINCj4+LSAgaW5mb3JtYXRpb24gcmVjb3JkIGhhbmRsZSwgcG9pbnQgVXNlcklu Zm8gYXQgYSBOVUxMLiBFYWNoIHN1YnNlcXVlbnQgY2FsbA0KPj53aWxsIHJldHJpZXZlDQo+Pi0g IGFub3RoZXIgdXNlciBpbmZvcm1hdGlvbiByZWNvcmQgaGFuZGxlIHVudGlsIHRoZXJlIGFyZSBu byBtb3JlLCBhdCB3aGljaA0KPj5wb2ludCBVc2VySW5mbw0KPj4tICB3aWxsIHBvaW50IHRvIE5V TEwuDQo+Pi0NCj4+LSAgQHBhcmFtW2luXSAgICAgIFRoaXMgICAgIFBvaW50cyB0byB0aGlzIGlu c3RhbmNlIG9mIHRoZQ0KPj5FRklfVVNFUl9DUkVERU5USUFMMl9QUk9UT0NPTC4NCj4+LSAgQHBh cmFtW2luLCBvdXRdIFVzZXJJbmZvIE9uIGVudHJ5LCBwb2ludHMgdG8gdGhlIHByZXZpb3VzIHVz ZXINCj5pbmZvcm1hdGlvbg0KPj5oYW5kbGUgb3IgTlVMTA0KPj4tICAgICAgICAgICAgICAgICAg ICAgICAgICAgdG8gc3RhcnQgZW51bWVyYXRpb24uIE9uIGV4aXQsIHBvaW50cyB0byB0aGUgbmV4 dCB1c2VyDQo+PmluZm9ybWF0aW9uDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5k bGUgb3IgTlVMTCBpZiB0aGVyZSBpcyBubyBtb3JlIHVzZXIgaW5mb3JtYXRpb24uDQo+Pi0NCj4+ LSAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgIFVzZXIgaW5mb3JtYXRpb24gcmV0dXJu ZWQuDQo+Pi0gIEByZXR2YWwgRUZJX05PVF9GT1VORCAgICAgICAgICBObyBtb3JlIHVzZXIgaW5m b3JtYXRpb24gZm91bmQuDQo+Pi0gIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICBVc2Vy SW5mbyBpcyBOVUxMLg0KPj4tDQo+Pi0qKi8NCj4+LUVGSV9TVEFUVVMNCj4+LUVGSUFQSQ0KPj4t Q3JlZGVudGlhbEdldE5leHRJbmZvICgNCj4+LSAgSU4gQ09OU1QgIEVGSV9VU0VSX0NSRURFTlRJ QUwyX1BST1RPQ09MICAgICAgICpUaGlzLA0KPj4tICBJTiBPVVQgICAgRUZJX1VTRVJfSU5GT19I QU5ETEUgICAgICAgICAgICAgICAgKlVzZXJJbmZvDQo+Pi0gICk7DQo+Pi0NCj4+LS8qKg0KPj4t ICBEZWxldGUgYSB1c2VyIG9uIHRoaXMgY3JlZGVudGlhbCBwcm92aWRlci4NCj4+LQ0KPj4tICBU aGlzIGZ1bmN0aW9uIGRlbGV0ZXMgYSB1c2VyIG9uIHRoaXMgY3JlZGVudGlhbCBwcm92aWRlci4N Cj4+LQ0KPj4tICBAcGFyYW1baW5dICAgICBUaGlzICAgICAgICAgICAgUG9pbnRzIHRvIHRoaXMg aW5zdGFuY2Ugb2YgdGhlDQo+PkVGSV9VU0VSX0NSRURFTlRJQUwyX1BST1RPQ09MLg0KPj4tICBA cGFyYW1baW5dICAgICBVc2VyICAgICAgICAgICAgVGhlIHVzZXIgcHJvZmlsZSBoYW5kbGUgdG8g ZGVsZXRlLg0KPj4tDQo+Pi0gIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICBVc2VyIHBy b2ZpbGUgd2FzIHN1Y2Nlc3NmdWxseSBkZWxldGVkLg0KPj4tICBAcmV0dmFsIEVGSV9BQ0NFU1Nf REVOSUVEICAgICAgQ3VycmVudCB1c2VyIHByb2ZpbGUgZG9lcyBub3QgcGVybWl0DQo+PmRlbGV0 aW9uIG9uIHRoZSB1c2VyIHByb2ZpbGUgaGFuZGxlLg0KPj4tICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRWl0aGVyIHRoZSB1c2VyIHByb2ZpbGUgY2Fubm90IGRlbGV0ZSBvbiBhbnkg dXNlciBwcm9maWxlIG9yDQo+PmNhbm5vdCBkZWxldGUNCj4+LSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIG9uIGEgdXNlciBwcm9maWxlIG90aGVyIHRoYW4gdGhlIGN1cnJlbnQgdXNl ciBwcm9maWxlLg0KPj4tICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICAgVGhpcyBjcmVk ZW50aWFsIHByb3ZpZGVyIGRvZXMgbm90IHN1cHBvcnQNCj4+ZGVsZXRpb24gaW4gdGhlIHByZS1P Uy4NCj4+LSAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgIFRoZSBuZXcgY3JlZGVudGlh bCBjb3VsZCBub3QgYmUgZGVsZXRlZA0KPj5iZWNhdXNlIG9mIGEgZGV2aWNlIGVycm9yLg0KPj4t ICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgVXNlciBkb2VzIG5vdCByZWZlciB0byBh IHZhbGlkIHVzZXINCj4+cHJvZmlsZSBoYW5kbGUuDQo+Pi0qKi8NCj4+LUVGSV9TVEFUVVMNCj4+ LUVGSUFQSQ0KPj4tQ3JlZGVudGlhbERlbGV0ZSAoDQo+Pi0gIElOIENPTlNUICBFRklfVVNFUl9D UkVERU5USUFMMl9QUk9UT0NPTCAgICAgICAqVGhpcywNCj4+LSAgSU4gICAgICAgIEVGSV9VU0VS X1BST0ZJTEVfSEFORExFICAgICAgICAgICAgIFVzZXINCj4+LSAgKTsNCj4+LQ0KPj4tI2VuZGlm DQo+PmRpZmYgLS1naXQNCj4+YS9TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vVXNiQ3Jl ZGVudGlhbFByb3ZpZGVyRHhlL1VzYkNyZWRlbnRpYWwNCj5Qcg0KPj5vdmlkZXIudW5pDQo+PmIv U2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9uL1VzYkNyZWRlbnRpYWxQcm92aWRlckR4ZS9V c2JDcmVkZW50aWFsDQo+UHINCj4+b3ZpZGVyLnVuaQ0KPj5kZWxldGVkIGZpbGUgbW9kZSAxMDA2 NDQNCj4+aW5kZXggOTYxZTA5ZjM2MC4uMDAwMDAwMDAwMA0KPj4tLS0NCj4+YS9TZWN1cml0eVBr Zy9Vc2VySWRlbnRpZmljYXRpb24vVXNiQ3JlZGVudGlhbFByb3ZpZGVyRHhlL1VzYkNyZWRlbnRp YWwNCj5Qcg0KPj5vdmlkZXIudW5pDQo+PisrKyAvZGV2L251bGwNCj4+QEAgLTEsMjMgKzAsMCBA QA0KPj4tLy8gLyoqIEBmaWxlDQo+Pi0vLyBQcm92aWRlcyBhIFVTQiBjcmVkZW50aWFsIHByb3Zp ZGVyIGltcGxlbWVudGF0aW9uDQo+Pi0vLw0KPj4tLy8gVGhpcyBtb2R1bGUgcmVhZHMgYSB0b2tl biBmcm9tIGEgdG9rZW4gZmlsZSB0aGF0IGlzIHNhdmVkIGluIHRoZSByb290DQo+Pi0vLyBmb2xk ZXIgb2YgYSBVU0Igc3RpY2suIFRoZSB0b2tlbiBmaWxlIG5hbWUgY2FuIGJlIHNwZWNpZmllZCBi eSB0aGUgUENEDQo+Pi0vLyBQY2RGaXhlZFVzYkNyZWRlbnRpYWxQcm92aWRlclRva2VuRmlsZU5h bWUuDQo+Pi0vLw0KPj4tLy8gQ29weXJpZ2h0IChjKSAyMDA5IC0gMjAxNCwgSW50ZWwgQ29ycG9y YXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPj4tLy8NCj4+LS8vIFRoaXMgcHJvZ3Jh bSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCj4+LS8vIGFyZSBsaWNlbnNlZCBhbmQg bWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZQ0KPkJT RA0KPj5MaWNlbnNlDQo+Pi0vLyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbi4g VGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBtYXkgYmUNCj4+Zm91bmQgYXQNCj4+LS8vIGh0 dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ic2QtbGljZW5zZS5waHANCj4+LS8vIFRIRSBQ Uk9HUkFNIElTIERJU1RSSUJVVEVEIFVOREVSIFRIRSBCU0QgTElDRU5TRSBPTiBBTiAiQVMgSVMi DQo+PkJBU0lTLA0KPj4tLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUyBP RiBBTlkgS0lORCwgRUlUSEVSDQo+PkVYUFJFU1MgT1IgSU1QTElFRC4NCj4+LS8vDQo+Pi0vLyAq Ki8NCj4+LQ0KPj4tDQo+Pi0jc3RyaW5nIFNUUl9NT0RVTEVfQUJTVFJBQ1QgICAgICAgICAgICAg I2xhbmd1YWdlIGVuLVVTICJQcm92aWRlcyBhIFVTQg0KPj5jcmVkZW50aWFsIHByb3ZpZGVyIGlt cGxlbWVudGF0aW9uIg0KPj4tDQo+Pi0jc3RyaW5nIFNUUl9NT0RVTEVfREVTQ1JJUFRJT04gICAg ICAgICAgI2xhbmd1YWdlIGVuLVVTICJUaGlzIG1vZHVsZQ0KPj5yZWFkcyBhIHRva2VuIGZyb20g YSB0b2tlbiBmaWxlIHRoYXQgaXMgc2F2ZWQgaW4gdGhlIHJvb3QgZm9sZGVyIG9mIGEgVVNCIHN0 aWNrLg0KPj5UaGUgdG9rZW4gZmlsZSBuYW1lIGNhbiBiZSBzcGVjaWZpZWQgYnkgdGhlIFBDRA0K Pj5QY2RGaXhlZFVzYkNyZWRlbnRpYWxQcm92aWRlclRva2VuRmlsZU5hbWUuIg0KPj4tDQo+PmRp ZmYgLS1naXQNCj4+YS9TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vVXNiQ3JlZGVudGlh bFByb3ZpZGVyRHhlL1VzYkNyZWRlbnRpYWwNCj5Qcg0KPj5vdmlkZXJEeGUuaW5mDQo+PmIvU2Vj dXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9uL1VzYkNyZWRlbnRpYWxQcm92aWRlckR4ZS9Vc2JD cmVkZW50aWFsDQo+UHINCj4+b3ZpZGVyRHhlLmluZg0KPj5kZWxldGVkIGZpbGUgbW9kZSAxMDA2 NDQNCj4+aW5kZXggMWU4ZTQyMzMyZi4uMDAwMDAwMDAwMA0KPj4tLS0NCj4+YS9TZWN1cml0eVBr Zy9Vc2VySWRlbnRpZmljYXRpb24vVXNiQ3JlZGVudGlhbFByb3ZpZGVyRHhlL1VzYkNyZWRlbnRp YWwNCj5Qcg0KPj5vdmlkZXJEeGUuaW5mDQo+PisrKyAvZGV2L251bGwNCj4+QEAgLTEsNzAgKzAs MCBAQA0KPj4tIyMgQGZpbGUNCj4+LSMgIFByb3ZpZGVzIGEgVVNCIGNyZWRlbnRpYWwgcHJvdmlk ZXIgaW1wbGVtZW50YXRpb24NCj4+LSMNCj4+LSMgIFRoaXMgbW9kdWxlIHJlYWRzIGEgdG9rZW4g ZnJvbSBhIHRva2VuIGZpbGUgdGhhdCBpcyBzYXZlZCBpbiB0aGUgcm9vdA0KPj4tIyAgZm9sZGVy IG9mIGEgVVNCIHN0aWNrLiBUaGUgdG9rZW4gZmlsZSBuYW1lIGNhbiBiZSBzcGVjaWZpZWQgYnkg dGhlIFBDRA0KPj4tIyAgUGNkRml4ZWRVc2JDcmVkZW50aWFsUHJvdmlkZXJUb2tlbkZpbGVOYW1l Lg0KPj4tIw0KPj4tIyBDb3B5cmlnaHQgKGMpIDIwMDkgLSAyMDE4LCBJbnRlbCBDb3Jwb3JhdGlv bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+Pi0jIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFj Y29tcGFueWluZyBtYXRlcmlhbHMNCj4+LSMgYXJlIGxpY2Vuc2VkIGFuZCBtYWRlIGF2YWlsYWJs ZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlDQo+QlNEDQo+PkxpY2Vuc2UN Cj4+LSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24uIFRoZSBmdWxsIHRleHQg b2YgdGhlIGxpY2Vuc2UgbWF5IGJlDQo+PmZvdW5kIGF0DQo+Pi0jIGh0dHA6Ly9vcGVuc291cmNl Lm9yZy9saWNlbnNlcy9ic2QtbGljZW5zZS5waHANCj4+LSMgVEhFIFBST0dSQU0gSVMgRElTVFJJ QlVURUQgVU5ERVIgVEhFIEJTRCBMSUNFTlNFIE9OIEFOICJBUyBJUyINCj4+QkFTSVMsDQo+Pi0j IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhF Ug0KPj5FWFBSRVNTIE9SIElNUExJRUQuDQo+Pi0jDQo+Pi0jIw0KPj4tDQo+Pi1bRGVmaW5lc10N Cj4+LSAgSU5GX1ZFUlNJT04gICAgICAgICAgICAgICAgICAgID0gMHgwMDAxMDAwNQ0KPj4tICBC QVNFX05BTUUgICAgICAgICAgICAgICAgICAgICAgPSBVc2JDcmVkZW50aWFsUHJvdmlkZXINCj4+ LSAgTU9EVUxFX1VOSV9GSUxFICAgICAgICAgICAgICAgID0gVXNiQ3JlZGVudGlhbFByb3ZpZGVy LnVuaQ0KPj4tICBGSUxFX0dVSUQgICAgICAgICAgICAgICAgICAgICAgPSA2NzJBMEM2OC0yQkYw LTQ2ZjktOTNDMy1DNEU3REMwRkE1NTUNCj4+LSAgTU9EVUxFX1RZUEUgICAgICAgICAgICAgICAg ICAgID0gVUVGSV9EUklWRVINCj4+LSAgVkVSU0lPTl9TVFJJTkcgICAgICAgICAgICAgICAgID0g MS4wDQo+Pi0gIEVOVFJZX1BPSU5UICAgICAgICAgICAgICAgICAgICA9IFVzYlByb3ZpZGVySW5p dA0KPj4tDQo+Pi1bU291cmNlc10NCj4+LSAgVXNiQ3JlZGVudGlhbFByb3ZpZGVyLmMNCj4+LSAg VXNiQ3JlZGVudGlhbFByb3ZpZGVyLmgNCj4+LSAgVXNiQ3JlZGVudGlhbFByb3ZpZGVyU3RyaW5n cy51bmkNCj4+LQ0KPj4tW1BhY2thZ2VzXQ0KPj4tICBNZGVQa2cvTWRlUGtnLmRlYw0KPj4tICBN ZGVNb2R1bGVQa2cvTWRlTW9kdWxlUGtnLmRlYw0KPj4tICBDcnlwdG9Qa2cvQ3J5cHRvUGtnLmRl Yw0KPj4tICBTZWN1cml0eVBrZy9TZWN1cml0eVBrZy5kZWMNCj4+LQ0KPj4tW0xpYnJhcnlDbGFz c2VzXQ0KPj4tICBVZWZpUnVudGltZVNlcnZpY2VzVGFibGVMaWINCj4+LSAgVWVmaUJvb3RTZXJ2 aWNlc1RhYmxlTGliDQo+Pi0gIFVlZmlEcml2ZXJFbnRyeVBvaW50DQo+Pi0gIE1lbW9yeUFsbG9j YXRpb25MaWINCj4+LSAgQmFzZU1lbW9yeUxpYg0KPj4tICBEZWJ1Z0xpYg0KPj4tICBIaWlMaWIN Cj4+LSAgVWVmaUxpYg0KPj4tICBCYXNlQ3J5cHRMaWINCj4+LQ0KPj4tW0d1aWRzXQ0KPj4tICAj IyBQUk9EVUNFUyAgICAgICAgICAgICAjIyBWYXJpYWJsZTpMIlVzYkNyZWRlbnRpYWwiDQo+Pi0g ICMjIENPTlNVTUVTICAgICAgICAgICAgICMjIFZhcmlhYmxlOkwiVXNiQ3JlZGVudGlhbCINCj4+ LSAgIyMgQ09OU1VNRVMgICAgICAgICAgICAgIyMgSElJDQo+Pi0gICMjIFNPTUVUSU1FU19DT05T VU1FUyAgICMjIEdVSUQgICAgICAgICAgICAgICAjIFRoZSBjcmVkZW50aWFsIHByb3ZpZGVyDQo+ PmlkZW50aWZpZXINCj4+LSAgZ1VzYkNyZWRlbnRpYWxQcm92aWRlckd1aWQNCj4+LQ0KPj4tICBn RWZpRmlsZUluZm9HdWlkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMgU09NRVRJTUVT X0NPTlNVTUVTICAgICAgICAgIyMgR1VJRA0KPj4tICBnRWZpVXNlckNyZWRlbnRpYWxDbGFzc1Nl Y3VyZUNhcmRHdWlkICAgICAgICAgIyMgU09NRVRJTUVTX0NPTlNVTUVTDQo+PiMjIEdVSUQNCj4+ LQ0KPj4tW1BjZF0NCj4+LQ0KPj5nRWZpU2VjdXJpdHlQa2dUb2tlblNwYWNlR3VpZC5QY2RGaXhl ZFVzYkNyZWRlbnRpYWxQcm92aWRlclRva2VuRmlsZU4NCj5hDQo+Pm1lICAgICMjIFNPTUVUSU1F U19DT05TVU1FUw0KPj4tDQo+Pi1bUHJvdG9jb2xzXQ0KPj4tICBnRWZpVXNlckNyZWRlbnRpYWwy UHJvdG9jb2xHdWlkICAgICAgICAgICAgICAgIyMgUFJPRFVDRVMNCj4+LSAgZ0VmaVVzZXJNYW5h Z2VyUHJvdG9jb2xHdWlkICAgICAgICAgICAgICAgICAgICMjIFNPTUVUSU1FU19DT05TVU1FUw0K Pj4tICBnRWZpQmxvY2tJb1Byb3RvY29sR3VpZCAgICAgICAgICAgICAgICAgICAgICAgIyMgU09N RVRJTUVTX0NPTlNVTUVTDQo+Pi0gIGdFZmlTaW1wbGVGaWxlU3lzdGVtUHJvdG9jb2xHdWlkICAg ICAgICAgICAgICAjIyBTT01FVElNRVNfQ09OU1VNRVMNCj4+LQ0KPj4tW1VzZXJFeHRlbnNpb25z LlRpYW5vQ29yZS4iRXh0cmFGaWxlcyJdDQo+Pi0gIFVzYkNyZWRlbnRpYWxQcm92aWRlckV4dHJh LnVuaQ0KPj4tDQo+PmRpZmYgLS1naXQNCj4+YS9TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRp b24vVXNiQ3JlZGVudGlhbFByb3ZpZGVyRHhlL1VzYkNyZWRlbnRpYWwNCj5Qcg0KPj5vdmlkZXJF eHRyYS51bmkNCj4+Yi9TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vVXNiQ3JlZGVudGlh bFByb3ZpZGVyRHhlL1VzYkNyZWRlbnRpYWwNCj5Qcg0KPj5vdmlkZXJFeHRyYS51bmkNCj4+ZGVs ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0DQo+PmluZGV4IGEyMDkxN2Q1ZjcuLjAwMDAwMDAwMDANCj4+ LS0tDQo+PmEvU2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9uL1VzYkNyZWRlbnRpYWxQcm92 aWRlckR4ZS9Vc2JDcmVkZW50aWFsDQo+UHINCj4+b3ZpZGVyRXh0cmEudW5pDQo+PisrKyAvZGV2 L251bGwNCj4+QEAgLTEsMTkgKzAsMCBAQA0KPj4tLy8gLyoqIEBmaWxlDQo+Pi0vLyBVc2JDcmVk ZW50aWFsUHJvdmlkZXIgTG9jYWxpemVkIFN0cmluZ3MgYW5kIENvbnRlbnQNCj4+LS8vDQo+Pi0v LyBDb3B5cmlnaHQgKGMpIDIwMTMgLSAyMDE4LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0 cyByZXNlcnZlZC48QlI+DQo+Pi0vLw0KPj4tLy8gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21w YW55aW5nIG1hdGVyaWFscw0KPj4tLy8gYXJlIGxpY2Vuc2VkIGFuZCBtYWRlIGF2YWlsYWJsZSB1 bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlDQo+QlNEDQo+PkxpY2Vuc2UNCj4+ LS8vIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgZnVsbCB0ZXh0IG9m IHRoZSBsaWNlbnNlIG1heSBiZQ0KPj5mb3VuZCBhdA0KPj4tLy8gaHR0cDovL29wZW5zb3VyY2Uu b3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocA0KPj4tLy8gVEhFIFBST0dSQU0gSVMgRElTVFJJ QlVURUQgVU5ERVIgVEhFIEJTRCBMSUNFTlNFIE9OIEFOICJBUyBJUyINCj4+QkFTSVMsDQo+Pi0v LyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TIE9GIEFOWSBLSU5ELCBFSVRI RVINCj4+RVhQUkVTUyBPUiBJTVBMSUVELg0KPj4tLy8NCj4+LS8vICoqLw0KPj4tDQo+Pi0jc3Ry aW5nIFNUUl9QUk9QRVJUSUVTX01PRFVMRV9OQU1FDQo+Pi0jbGFuZ3VhZ2UgZW4tVVMNCj4+LSJV U0IgQ3JlZGVudGlhbCBQcm92aWRlciINCj4+LQ0KPj4tDQo+PmRpZmYgLS1naXQNCj4+YS9TZWN1 cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vVXNiQ3JlZGVudGlhbFByb3ZpZGVyRHhlL1VzYkNy ZWRlbnRpYWwNCj5Qcg0KPj5vdmlkZXJTdHJpbmdzLnVuaQ0KPj5iL1NlY3VyaXR5UGtnL1VzZXJJ ZGVudGlmaWNhdGlvbi9Vc2JDcmVkZW50aWFsUHJvdmlkZXJEeGUvVXNiQ3JlZGVudGlhbA0KPlBy DQo+Pm92aWRlclN0cmluZ3MudW5pDQo+PmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NA0KPj5pbmRl eCBmMzA2ZDUwYTRlLi4wMDAwMDAwMDAwDQo+Pi0tLQ0KPj5hL1NlY3VyaXR5UGtnL1VzZXJJZGVu dGlmaWNhdGlvbi9Vc2JDcmVkZW50aWFsUHJvdmlkZXJEeGUvVXNiQ3JlZGVudGlhbA0KPlByDQo+ Pm92aWRlclN0cmluZ3MudW5pDQo+PisrKyAvZGV2L251bGwNCj4+QEAgLTEsMjkgKzAsMCBAQA0K Pj4tLyoqIEBmaWxlDQo+Pi0gIFN0cmluZyBkZWZpbml0aW9ucyBmb3IgdGhlIFVTQiBDcmVkZW50 aWFsIFByb3ZpZGVyLg0KPj4tDQo+Pi1Db3B5cmlnaHQgKGMpIDIwMDkgLSAyMDE4LCBJbnRlbCBD b3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+Pi1UaGlzIHByb2dyYW0gYW5k IHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQo+Pi1hcmUgbGljZW5zZWQgYW5kIG1hZGUgYXZh aWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgQlNEDQo+PkxpY2Vu c2UNCj4+LXdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLiAgVGhlIGZ1bGwgdGV4 dCBvZiB0aGUgbGljZW5zZSBtYXkgYmUNCj4+Zm91bmQgYXQNCj4+LWh0dHA6Ly9vcGVuc291cmNl Lm9yZy9saWNlbnNlcy9ic2QtbGljZW5zZS5waHAuDQo+Pi0NCj4+LVRIRSBQUk9HUkFNIElTIERJ U1RSSUJVVEVEIFVOREVSIFRIRSBCU0QgTElDRU5TRSBPTiBBTiAiQVMgSVMiDQo+QkFTSVMsDQo+ Pi1XSVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TIE9GIEFOWSBLSU5ELCBFSVRI RVINCj4+RVhQUkVTUyBPUiBJTVBMSUVELg0KPj4tDQo+Pi0qKi8NCj4+LQ0KPj4tI2xhbmdkZWYg ZW4tVVMgIkVuZ2xpc2giDQo+Pi0jbGFuZ2RlZiBmci1GUiAiRnJhbmNhaXMiDQo+Pi0NCj4+LSNz dHJpbmcgU1RSX0NSRURFTlRJQUxfVElUTEUgICAgICAgICAgICAgICAgICAgICAgI2xhbmd1YWdl IGVuLVVTICAiVVNCIENyZWRlbnRpYWwNCj4+UHJvdmlkZXIiDQo+Pi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNsYW5ndWFnZSBmci1GUiAgIlVTQiBD cmVkZW50aWFsIFByb3ZpZGVyDQo+KEZyZW5jaCkiDQo+Pi0jc3RyaW5nIFNUUl9OVUxMX1NUUklO RyAgICAgICAgICAgICAgICAgICAgICAgICAgICNsYW5ndWFnZSBlbi1VUyAgIiINCj4+LSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2xhbmd1YWdlIGZy LUZSICAiIg0KPj4tI3N0cmluZyBTVFJfUFJPVklERVJfTkFNRSAgICAgICAgICAgICAgICAgICAg ICAgICAjbGFuZ3VhZ2UgZW4tVVMgICJJTlRFTCBVU0INCj4+Q3JlZGVudGlhbCBQcm92aWRlciIN Cj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2xh bmd1YWdlIGZyLUZSICAiSU5URUwgVVNCIENyZWRlbnRpYWwgUHJvdmlkZXINCj4+KEZyZW5jaCki DQo+Pi0jc3RyaW5nIFNUUl9QUk9WSURFUl9UWVBFX05BTUUgICAgICAgICAgICAgICAgICAgICNs YW5ndWFnZSBlbi1VUyAgIlNlY3VyZQ0KPkNhcmQNCj4+Q3JlZGVudGlhbCBQcm92aWRlciINCj4+ LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2xhbmd1 YWdlIGZyLUZSICAiU2VjdXJlIENhcmQgQ3JlZGVudGlhbCBQcm92aWRlcg0KPj4oRnJlbmNoKSIN Cj4+LSNzdHJpbmcgU1RSX1JFQURfVVNCX1RPS0VOX0VSUk9SICAgICAgICAgICAgICAgICAgI2xh bmd1YWdlIGVuLVVTICAiUmVhZA0KPlVTQg0KPj5Ub2tlbiBGaWxlIEVycm9yISINCj4+LSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2xhbmd1YWdlIGZy LUZSICAiUmVhZCBVU0IgVG9rZW4gRmlsZSBFcnJvciENCj4+KEZyZW5jaCkiDQo+Pi0jc3RyaW5n IFNUUl9JTlNFUlRfVVNCX1RPS0VOICAgICAgICAgICAgICAgICAgICAgICNsYW5ndWFnZSBlbi1V UyAgIlBsZWFzZSBpbnNlcnQNCj4+VVNCIGtleSB3aXRoIFRva2VuIg0KPj4tICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjbGFuZ3VhZ2UgZnItRlIgICJQ bGVhc2UgaW5zZXJ0IFVTQiBrZXkgd2l0aCBUb2tlbg0KPj4oRnJlbmNoKSINCj4+ZGlmZiAtLWdp dA0KPj5hL1NlY3VyaXR5UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Vc2VySWRlbnRpZnlNYW5hZ2Vy RHhlL0xvYWREZWZlcnJlZEkNCj5tYQ0KPj5nZS5jDQo+PmIvU2VjdXJpdHlQa2cvVXNlcklkZW50 aWZpY2F0aW9uL1VzZXJJZGVudGlmeU1hbmFnZXJEeGUvTG9hZERlZmVycmVkSQ0KPm0NCj4+YWdl LmMNCj4+ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0DQo+PmluZGV4IDJjZmUxMzBkYjguLjAwMDAw MDAwMDANCj4+LS0tDQo+PmEvU2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9uL1VzZXJJZGVu dGlmeU1hbmFnZXJEeGUvTG9hZERlZmVycmVkSQ0KPm1hDQo+PmdlLmMNCj4+KysrIC9kZXYvbnVs bA0KPj5AQCAtMSwxNDggKzAsMCBAQA0KPj4tLyoqIEBmaWxlDQo+Pi0gIExvYWQgdGhlIGRlZmVy cmVkIGltYWdlcyBhZnRlciB1c2VyIGlzIGlkZW50aWZpZWQuDQo+Pi0NCj4+LUNvcHlyaWdodCAo YykgMjAwOSAtIDIwMTgsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxC Uj4NCj4+LVRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCj4+LWFy ZSBsaWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRp b25zIG9mIHRoZSBCU0QNCj4+TGljZW5zZQ0KPj4td2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0 cmlidXRpb24uICBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIG1heSBiZQ0KPj5mb3VuZCBh dA0KPj4taHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocA0KPj4t DQo+Pi1USEUgUFJPR1JBTSBJUyBESVNUUklCVVRFRCBVTkRFUiBUSEUgQlNEIExJQ0VOU0UgT04g QU4gIkFTIElTIg0KPkJBU0lTLA0KPj4tV0lUSE9VVCBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFU SU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSDQo+PkVYUFJFU1MgT1IgSU1QTElFRC4NCj4+LQ0KPj4t KiovDQo+Pi0NCj4+LSNpbmNsdWRlICJVc2VySWRlbnRpZnlNYW5hZ2VyLmgiDQo+Pi0NCj4+LUVG SV9IQU5ETEUgICAgICAgIG1EZWZlcnJlZEltYWdlSGFuZGxlOw0KPj4tDQo+Pi0vKioNCj4+LSAg VGhlIGZ1bmN0aW9uIHdpbGwgbG9hZCBhbGwgdGhlIGRlZmVycmVkIGltYWdlcyBhZ2Fpbi4gSWYg dGhlIGRlZmVycmVkIGltYWdlDQo+aXMNCj4+bG9hZGVkDQo+Pi0gIHN1Y2Nlc3NmdWxseSwgdHJ5 IHRvIHN0YXJ0IGl0Lg0KPj4tDQo+Pi0gIEBwYXJhbSAgRXZlbnQgICAgICAgICBFdmVudCB3aG9z ZSBub3RpZmljYXRpb24gZnVuY3Rpb24gaXMgYmVpbmcgaW52b2tlZC4NCj4+LSAgQHBhcmFtICBD b250ZXh0ICAgICAgIFBvaW50ZXIgdG8gdGhlIG5vdGlmaWNhdGlvbiBmdW5jdGlvbidzIGNvbnRl eHQNCj4+LQ0KPj4tKiovDQo+Pi1WT0lEDQo+Pi1FRklBUEkNCj4+LUxvYWREZWZlcnJlZEltYWdl ICgNCj4+LSAgSU4gRUZJX0VWRU5UICAgICAgICAgICAgICAgICAgICAgICBFdmVudCwNCj4+LSAg SU4gVk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqQ29udGV4dA0KPj4tICApDQo+Pi17 DQo+Pi0gIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPj4tICBF RklfREVGRVJSRURfSU1BR0VfTE9BRF9QUk9UT0NPTCAgICpEZWZlcnJlZEltYWdlOw0KPj4tICBV SU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhhbmRsZUNvdW50Ow0KPj4tICBFRklf SEFORExFICAgICAgICAgICAgICAgICAgICAgICAgICpIYW5kbGVCdWY7DQo+Pi0gIFVJTlROICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXg7DQo+Pi0gIFVJTlROICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRHJpdmVySW5kZXg7DQo+Pi0gIEVGSV9ERVZJQ0VfUEFUSF9QUk9U T0NPTCAgICAgICAgICAgKkltYWdlRGV2aWNlUGF0aDsNCj4+LSAgVk9JRCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAqRHJpdmVySW1hZ2U7DQo+Pi0gIFVJTlROICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgSW1hZ2VTaXplOw0KPj4tICBCT09MRUFOICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEJvb3RPcHRpb247DQo+Pi0gIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAg ICAgICAgSW1hZ2VIYW5kbGU7DQo+Pi0gIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRXhpdERhdGFTaXplOw0KPj4tICBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICpFeGl0RGF0YTsNCj4+LQ0KPj4tICAvLw0KPj4tICAvLyBGaW5kIGFsbCB0aGUgZGVmZXJyZWQg aW1hZ2UgbG9hZCBwcm90b2NvbHMuDQo+Pi0gIC8vDQo+Pi0gIEhhbmRsZUNvdW50ID0gMDsNCj4+ LSAgSGFuZGxlQnVmICAgPSBOVUxMOw0KPj4tICBTdGF0dXMgPSBnQlMtPkxvY2F0ZUhhbmRsZUJ1 ZmZlciAoDQo+Pi0gICAgICAgICAgICAgICAgICBCeVByb3RvY29sLA0KPj4tICAgICAgICAgICAg ICAgICAgJmdFZmlEZWZlcnJlZEltYWdlTG9hZFByb3RvY29sR3VpZCwNCj4+LSAgICAgICAgICAg ICAgICAgIE5VTEwsDQo+Pi0gICAgICAgICAgICAgICAgICAmSGFuZGxlQ291bnQsDQo+Pi0gICAg ICAgICAgICAgICAgICAmSGFuZGxlQnVmDQo+Pi0gICAgICAgICAgICAgICAgICApOw0KPj4tICBp ZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+Pi0gICAgcmV0dXJuIDsNCj4+LSAgfQ0KPj4tDQo+ Pi0gIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IEhhbmRsZUNvdW50OyBJbmRleCsrKSB7DQo+Pi0g ICAgU3RhdHVzID0gZ0JTLT5IYW5kbGVQcm90b2NvbCAoDQo+Pi0gICAgICAgICAgICAgICAgICAg IEhhbmRsZUJ1ZltJbmRleF0sDQo+Pi0gICAgICAgICAgICAgICAgICAgICZnRWZpRGVmZXJyZWRJ bWFnZUxvYWRQcm90b2NvbEd1aWQsDQo+Pi0gICAgICAgICAgICAgICAgICAgIChWT0lEICoqKSAm RGVmZXJyZWRJbWFnZQ0KPj4tICAgICAgICAgICAgICAgICAgICApOw0KPj4tICAgIGlmIChFRklf RVJST1IgKFN0YXR1cykpIHsNCj4+LSAgICAgIGNvbnRpbnVlIDsNCj4+LSAgICB9DQo+Pi0NCj4+ LSAgICBEcml2ZXJJbmRleCA9IDA7DQo+Pi0gICAgZG8gew0KPj4tICAgICAgLy8NCj4+LSAgICAg IC8vIExvYWQgYWxsIHRoZSBkZWZlcnJlZCBpbWFnZXMgaW4gdGhpcyBwcm90b2NvbCBpbnN0YW5j ZS4NCj4+LSAgICAgIC8vDQo+Pi0gICAgICBTdGF0dXMgPSBEZWZlcnJlZEltYWdlLT5HZXRJbWFn ZUluZm8oDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlZmVycmVkSW1hZ2Us DQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERyaXZlckluZGV4LA0KPj4tICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmSW1hZ2VEZXZpY2VQYXRoLA0KPj4tICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoVk9JRCAqKikgJkRyaXZlckltYWdlLA0KPj4tICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmSW1hZ2VTaXplLA0KPj4tICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAmQm9vdE9wdGlvbg0KPj4tICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICApOw0KPj4tICAgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPj4tICAg ICAgICBicmVhazsNCj4+LSAgICAgIH0NCj4+LQ0KPj4tICAgICAgLy8NCj4+LSAgICAgIC8vIExv YWQgYW5kIHN0YXJ0IHRoZSBpbWFnZS4NCj4+LSAgICAgIC8vDQo+Pi0gICAgICBTdGF0dXMgPSBn QlMtPkxvYWRJbWFnZSAoDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgQm9vdE9wdGlvbiwNCj4+ LSAgICAgICAgICAgICAgICAgICAgICBtRGVmZXJyZWRJbWFnZUhhbmRsZSwNCj4+LSAgICAgICAg ICAgICAgICAgICAgICBJbWFnZURldmljZVBhdGgsDQo+Pi0gICAgICAgICAgICAgICAgICAgICAg TlVMTCwNCj4+LSAgICAgICAgICAgICAgICAgICAgICAwLA0KPj4tICAgICAgICAgICAgICAgICAg ICAgICZJbWFnZUhhbmRsZQ0KPj4tICAgICAgICAgICAgICAgICAgICAgICk7DQo+Pi0gICAgICBp ZiAoIUVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPj4tICAgICAgICAvLw0KPj4tICAgICAgICAvLyBC ZWZvcmUgY2FsbGluZyB0aGUgaW1hZ2UsIGVuYWJsZSB0aGUgV2F0Y2hkb2cgVGltZXIgZm9yDQo+ Pi0gICAgICAgIC8vIGEgNSBNaW51dGUgcGVyaW9kDQo+Pi0gICAgICAgIC8vDQo+Pi0gICAgICAg IGdCUy0+U2V0V2F0Y2hkb2dUaW1lciAoNSAqIDYwLCAweDAwMDAsIDB4MDAsIE5VTEwpOw0KPj4t ICAgICAgICBTdGF0dXMgPSBnQlMtPlN0YXJ0SW1hZ2UgKEltYWdlSGFuZGxlLCAmRXhpdERhdGFT aXplLCAmRXhpdERhdGEpOw0KPj4tDQo+Pi0gICAgICAgIC8vDQo+Pi0gICAgICAgIC8vIENsZWFy IHRoZSBXYXRjaGRvZyBUaW1lciBhZnRlciB0aGUgaW1hZ2UgcmV0dXJucy4NCj4+LSAgICAgICAg Ly8NCj4+LSAgICAgICAgZ0JTLT5TZXRXYXRjaGRvZ1RpbWVyICgweDAwMDAsIDB4MDAwMCwgMHgw MDAwLCBOVUxMKTsNCj4+LSAgICAgIH0NCj4+LSAgICAgIERyaXZlckluZGV4Kys7DQo+Pi0gICAg fSB3aGlsZSAoVFJVRSk7DQo+Pi0gIH0NCj4+LSAgRnJlZVBvb2wgKEhhbmRsZUJ1Zik7DQo+Pi19 DQo+Pi0NCj4+LQ0KPj4tLyoqDQo+Pi0gIFJlZ2lzdGVyIGFuIGV2ZW50IG5vdGlmaWNhdGlvbiBm dW5jdGlvbiBmb3IgdXNlciBwcm9maWxlIGNoYW5nZWQuDQo+Pi0NCj4+LSAgQHBhcmFtW2luXSAg SW1hZ2VIYW5kbGUgICAgIEltYWdlIGhhbmRsZSB0aGlzIGRyaXZlci4NCj4+LQ0KPj4tKiovDQo+ Pi1WT0lEDQo+Pi1Mb2FkRGVmZXJyZWRJbWFnZUluaXQgKA0KPj4tICBJTiBFRklfSEFORExFICAg ICAgICBJbWFnZUhhbmRsZQ0KPj4tICApDQo+Pi17DQo+Pi0gIEVGSV9TVEFUVVMgICAgU3RhdHVz Ow0KPj4tICBFRklfRVZFTlQgICAgIEV2ZW50Ow0KPj4tDQo+Pi0gIG1EZWZlcnJlZEltYWdlSGFu ZGxlID0gSW1hZ2VIYW5kbGU7DQo+Pi0NCj4+LSAgU3RhdHVzID0gZ0JTLT5DcmVhdGVFdmVudEV4 ICgNCj4+LSAgICAgICAgICAgICAgICAgIEVWVF9OT1RJRllfU0lHTkFMLA0KPj4tICAgICAgICAg ICAgICAgICAgVFBMX0NBTExCQUNLLA0KPj4tICAgICAgICAgICAgICAgICAgTG9hZERlZmVycmVk SW1hZ2UsDQo+Pi0gICAgICAgICAgICAgICAgICBOVUxMLA0KPj4tICAgICAgICAgICAgICAgICAg JmdFZmlFdmVudFVzZXJQcm9maWxlQ2hhbmdlZEd1aWQsDQo+Pi0gICAgICAgICAgICAgICAgICAm RXZlbnQNCj4+LSAgICAgICAgICAgICAgICAgICk7DQo+Pi0NCj4+LSAgQVNTRVJUIChTdGF0dXMg PT0gRUZJX1NVQ0NFU1MpOw0KPj4tfQ0KPj5kaWZmIC0tZ2l0DQo+PmEvU2VjdXJpdHlQa2cvVXNl cklkZW50aWZpY2F0aW9uL1VzZXJJZGVudGlmeU1hbmFnZXJEeGUvVXNlcklkZW50aWZ5TWENCj5u DQo+PmFnZXIuYw0KPj5iL1NlY3VyaXR5UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Vc2VySWRlbnRp ZnlNYW5hZ2VyRHhlL1VzZXJJZGVudGlmeU1hDQo+bg0KPj5hZ2VyLmMNCj4+ZGVsZXRlZCBmaWxl IG1vZGUgMTAwNjQ0DQo+PmluZGV4IGZkOTQxNzkyYzEuLjAwMDAwMDAwMDANCj4+LS0tDQo+PmEv U2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9uL1VzZXJJZGVudGlmeU1hbmFnZXJEeGUvVXNl cklkZW50aWZ5TWENCj5uDQo+PmFnZXIuYw0KPj4rKysgL2Rldi9udWxsDQo+PkBAIC0xLDM3NjYg KzAsMCBAQA0KPj4tLyoqIEBmaWxlDQo+Pi0gIFRoaXMgZHJpdmVyIG1hbmFnZXMgdXNlciBpbmZv cm1hdGlvbiBhbmQgcHJvZHVjZXMgdXNlciBtYW5hZ2VyIHByb3RvY29sLg0KPj4tDQo+Pi1Db3B5 cmlnaHQgKGMpIDIwMDkgLSAyMDE4LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNl cnZlZC48QlI+DQo+Pi0oQykgQ29weXJpZ2h0IDIwMTggSGV3bGV0dCBQYWNrYXJkIEVudGVycHJp c2UgRGV2ZWxvcG1lbnQgTFA8QlI+DQo+Pi1UaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlp bmcgbWF0ZXJpYWxzDQo+Pi1hcmUgbGljZW5zZWQgYW5kIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRo ZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgQlNEDQo+PkxpY2Vuc2UNCj4+LXdoaWNoIGFj Y29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLiAgVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5z ZSBtYXkgYmUNCj4+Zm91bmQgYXQNCj4+LWh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9i c2QtbGljZW5zZS5waHANCj4+LQ0KPj4tVEhFIFBST0dSQU0gSVMgRElTVFJJQlVURUQgVU5ERVIg VEhFIEJTRCBMSUNFTlNFIE9OIEFOICJBUyBJUyINCj5CQVNJUywNCj4+LVdJVEhPVVQgV0FSUkFO VElFUyBPUiBSRVBSRVNFTlRBVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUg0KPj5FWFBSRVNTIE9S IElNUExJRUQuDQo+Pi0NCj4+LSoqLw0KPj4tDQo+Pi0jaW5jbHVkZSAiVXNlcklkZW50aWZ5TWFu YWdlci5oIg0KPj4tDQo+Pi0vLw0KPj4tLy8gRGVmYXVsdCB1c2VyIG5hbWUuDQo+Pi0vLw0KPj4t Q0hBUjE2ICAgICAgICAgICAgICAgICAgICAgIG1Vc2VyTmFtZVtdICAgICAgID0gTCJBZG1pbmlz dHJhdG9yIjsNCj4+LQ0KPj4tLy8NCj4+LS8vIFBvaW50cyB0byB0aGUgdXNlciBwcm9maWxlIGRh dGFiYXNlLg0KPj4tLy8NCj4+LVVTRVJfUFJPRklMRV9EQiAgICAgICAgICAgICAqbVVzZXJQcm9m aWxlRGIgICA9IE5VTEw7DQo+Pi0NCj4+LS8vDQo+Pi0vLyBQb2ludHMgdG8gdGhlIGNyZWRlbnRp YWwgcHJvdmlkZXJzIGZvdW5kIGluIHN5c3RlbS4NCj4+LS8vDQo+Pi1DUkVERU5USUFMX1BST1ZJ REVSX0lORk8gICAgKm1Qcm92aWRlckRiICAgICAgPSBOVUxMOw0KPj4tDQo+Pi0vLw0KPj4tLy8g Q3VycmVudCB1c2VyIHNoYXJlZCBpbiBtdWx0aSBmdW5jdGlvbi4NCj4+LS8vDQo+Pi1FRklfVVNF Ul9QUk9GSUxFX0hBTkRMRSAgICAgbUN1cnJlbnRVc2VyICAgICAgPSBOVUxMOw0KPj4tDQo+Pi0v Lw0KPj4tLy8gRmxhZyBpbmRpY2F0ZXMgYSB1c2VyIGlzIGlkZW50aWZpZWQuDQo+Pi0vLw0KPj4t Qk9PTEVBTiAgICAgICAgICAgICAgICAgICAgIG1JZGVudGlmaWVkICAgICAgID0gRkFMU0U7DQo+ Pi1VU0VSX01BTkFHRVJfQ0FMTEJBQ0tfSU5GTyAgKm1DYWxsYmFja0luZm8gICAgPSBOVUxMOw0K Pj4tSElJX1ZFTkRPUl9ERVZJQ0VfUEFUSCAgICAgIG1IaWlWZW5kb3JEZXZpY2VQYXRoID0gew0K Pj4tICB7DQo+Pi0gICAgew0KPj4tICAgICAgSEFSRFdBUkVfREVWSUNFX1BBVEgsDQo+Pi0gICAg ICBIV19WRU5ET1JfRFAsDQo+Pi0gICAgICB7DQo+Pi0gICAgICAgIChVSU5UOCkgKHNpemVvZiAo VkVORE9SX0RFVklDRV9QQVRIKSksDQo+Pi0gICAgICAgIChVSU5UOCkgKChzaXplb2YgKFZFTkRP Ul9ERVZJQ0VfUEFUSCkpID4+IDgpDQo+Pi0gICAgICB9DQo+Pi0gICAgfSwNCj4+LSAgICBVU0VS X0lERU5USUZZX01BTkFHRVJfR1VJRA0KPj4tICB9LA0KPj4tICB7DQo+Pi0gICAgRU5EX0RFVklD RV9QQVRIX1RZUEUsDQo+Pi0gICAgRU5EX0VOVElSRV9ERVZJQ0VfUEFUSF9TVUJUWVBFLA0KPj4t ICAgIHsNCj4+LSAgICAgIChVSU5UOCkgKEVORF9ERVZJQ0VfUEFUSF9MRU5HVEgpLA0KPj4tICAg ICAgKFVJTlQ4KSAoKEVORF9ERVZJQ0VfUEFUSF9MRU5HVEgpID4+IDgpDQo+Pi0gICAgfQ0KPj4t ICB9DQo+Pi19Ow0KPj4tDQo+Pi0NCj4+LUVGSV9VU0VSX01BTkFHRVJfUFJPVE9DT0wgZ1VzZXJJ ZGVudGlmeU1hbmFnZXIgPSB7DQo+Pi0gIFVzZXJQcm9maWxlQ3JlYXRlLA0KPj4tICBVc2VyUHJv ZmlsZURlbGV0ZSwNCj4+LSAgVXNlclByb2ZpbGVHZXROZXh0LA0KPj4tICBVc2VyUHJvZmlsZUN1 cnJlbnQsDQo+Pi0gIFVzZXJQcm9maWxlSWRlbnRpZnksDQo+Pi0gIFVzZXJQcm9maWxlRmluZCwN Cj4+LSAgVXNlclByb2ZpbGVOb3RpZnksDQo+Pi0gIFVzZXJQcm9maWxlR2V0SW5mbywNCj4+LSAg VXNlclByb2ZpbGVTZXRJbmZvLA0KPj4tICBVc2VyUHJvZmlsZURlbGV0ZUluZm8sDQo+Pi0gIFVz ZXJQcm9maWxlR2V0TmV4dEluZm8sDQo+Pi19Ow0KPj4tDQo+Pi0NCj4+LS8qKg0KPj4tICBGaW5k IHRoZSBzcGVjaWZpZWQgdXNlciBpbiB0aGUgdXNlciBkYXRhYmFzZS4NCj4+LQ0KPj4tICBUaGlz IGZ1bmN0aW9uIHNlYXJjaGVzIHRoZSBzcGVjaWZpZWQgdXNlciBmcm9tIHRoZSBiZWdpbm5pbmcg b2YgdGhlIHVzZXINCj4+ZGF0YWJhc2UuDQo+Pi0gIEFuZCBpZiBOZXh0VXNlciBpcyBUUlVFLCBy ZXR1cm4gdGhlIG5leHQgVXNlciBpbiB0aGUgdXNlciBkYXRhYmFzZS4NCj4+LQ0KPj4tICBAcGFy YW1baW4sIG91dF0gVXNlciAgICAgICAgIE9uIGVudHJ5LCBwb2ludHMgdG8gdGhlIHVzZXIgcHJv ZmlsZSBlbnRyeSB0bw0KPj5zZWFyY2guDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgT24gcmV0dXJuLCBwb2ludHMgdG8gdGhlIHVzZXIgcHJvZmlsZSBlbnRyeSBvciBOVUxMIGlm IG5vdA0KPj5mb3VuZC4NCj4+LSAgQHBhcmFtW2luXSAgICAgIE5leHRVc2VyICAgICBJZiBGQUxT RSwgZmluZCB0aGUgdXNlciBpbiB1c2VyIHByb2ZpbGUgZGF0YWJhc2UNCj4+c3BlY2lmeWVkIGJ5 IFVzZXINCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBUUlVFLCBmaW5kIHRo ZSBuZXh0IHVzZXIgaW4gdXNlciBwcm9maWxlIGRhdGFiYXNlIHNwZWNpZnllZA0KPj4tICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGJ5IFVzZXIuDQo+Pi0gIEBwYXJhbVtvdXRdICAgICBQ cm9maWxlSW5kZXggQSBwb2ludGVyIHRvIHRoZSBpbmRleCBvZiB1c2VyIHByb2ZpbGUNCj5kYXRh YmFzZQ0KPj50aGF0IG1hdGNoZXMgdGhlDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdXNlciBzcGVjaWZ5ZWQgYnkgVXNlci4NCj4+LQ0KPj4tICBAcmV0dmFsIEVGSV9OT1RfRk9V TkQgICAgICAgIFVzZXIgd2FzIE5VTEwsIG9yIFVzZXIgd2FzIG5vdCBmb3VuZCwgb3INCj50aGUN Cj4+bmV4dCB1c2VyIHdhcyBub3QgZm91bmQuDQo+Pi0gIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAg ICAgICAgVXNlciBvciB0aGUgbmV4dCB1c2VyIGFyZSBmb3VuZCBpbiB1c2VyIHByb2ZpbGUNCj4+ ZGF0YWJhc2UNCj4+LQ0KPj4tKiovDQo+Pi1FRklfU1RBVFVTDQo+Pi1GaW5kVXNlclByb2ZpbGUg KA0KPj4tICBJTiBPVVQgIFVTRVJfUFJPRklMRV9FTlRSWSAgICAgICAgICAgICAgICAgICAgKipV c2VyLA0KPj4tICBJTiAgICAgIEJPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg TmV4dFVzZXIsDQo+Pi0gICAgIE9VVCAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAqUHJvZmlsZUluZGV4IE9QVElPTkFMDQo+Pi0gICkNCj4+LXsNCj4+LSAgVUlOVE4gICAg ICAgICAgICAgICBJbmRleDsNCj4+LQ0KPj4tICAvLw0KPj4tICAvLyBDaGVjayBwYXJhbWV0ZXJz DQo+Pi0gIC8vDQo+Pi0gIGlmICgobVVzZXJQcm9maWxlRGIgPT0gTlVMTCkgfHwgKFVzZXIgPT0g TlVMTCkpIHsNCj4+LSAgICByZXR1cm4gRUZJX05PVF9GT1VORDsNCj4+LSAgfQ0KPj4tDQo+Pi0g IC8vDQo+Pi0gIC8vIENoZWNrIHdoZXRoZXIgdGhlIHVzZXIgcHJvZmlsZSBpcyBpbiB0aGUgdXNl ciBwcm9maWxlIGRhdGFiYXNlLg0KPj4tICAvLw0KPj4tICBmb3IgKEluZGV4ID0gMDsgSW5kZXgg PCBtVXNlclByb2ZpbGVEYi0+VXNlclByb2ZpbGVOdW07IEluZGV4KyspIHsNCj4+LSAgICBpZiAo bVVzZXJQcm9maWxlRGItPlVzZXJQcm9maWxlW0luZGV4XSA9PSAqVXNlcikgew0KPj4tICAgICAg aWYgKFByb2ZpbGVJbmRleCAhPSBOVUxMKSB7DQo+Pi0gICAgICAgICpQcm9maWxlSW5kZXggPSBJ bmRleDsNCj4+LSAgICAgIH0NCj4+LSAgICAgIGJyZWFrOw0KPj4tICAgIH0NCj4+LSAgfQ0KPj4t DQo+Pi0gIGlmIChOZXh0VXNlcikgew0KPj4tICAgIC8vDQo+Pi0gICAgLy8gRmluZCB0aGUgbmV4 dCB1c2VyIHByb2ZpbGUuDQo+Pi0gICAgLy8NCj4+LSAgICBJbmRleCsrOw0KPj4tICAgIGlmIChJ bmRleCA8IG1Vc2VyUHJvZmlsZURiLT5Vc2VyUHJvZmlsZU51bSkgew0KPj4tICAgICAgKlVzZXIg PSBtVXNlclByb2ZpbGVEYi0+VXNlclByb2ZpbGVbSW5kZXhdOw0KPj4tICAgIH0gZWxzZSBpZiAo SW5kZXggPT0gbVVzZXJQcm9maWxlRGItPlVzZXJQcm9maWxlTnVtKSB7DQo+Pi0gICAgICAqVXNl ciA9IE5VTEw7DQo+Pi0gICAgICByZXR1cm4gRUZJX05PVF9GT1VORDsNCj4+LSAgICB9IGVsc2Ug ew0KPj4tICAgICAgaWYgKChtVXNlclByb2ZpbGVEYi0+VXNlclByb2ZpbGVOdW0gPiAwKSAmJiAo KlVzZXIgPT0gTlVMTCkpIHsNCj4+LSAgICAgICAgKlVzZXIgPSBtVXNlclByb2ZpbGVEYi0+VXNl clByb2ZpbGVbMF07DQo+Pi0gICAgICB9IGVsc2Ugew0KPj4tICAgICAgICAqVXNlciA9IE5VTEw7 DQo+Pi0gICAgICAgIHJldHVybiBFRklfTk9UX0ZPVU5EOw0KPj4tICAgICAgfQ0KPj4tICAgIH0N Cj4+LSAgfSBlbHNlIGlmIChJbmRleCA9PSBtVXNlclByb2ZpbGVEYi0+VXNlclByb2ZpbGVOdW0p IHsNCj4+LSAgICByZXR1cm4gRUZJX05PVF9GT1VORDsNCj4+LSAgfQ0KPj4tDQo+Pi0gIHJldHVy biBFRklfU1VDQ0VTUzsNCj4+LX0NCj4+LQ0KPj4tLyoqDQo+Pi0gIEZpbmQgdGhlIHNwZWNpZmll ZCB1c2VyIGluZm9ybWF0aW9uIHJlY29yZCBpbiB0aGUgc3BlY2lmaWVkIFVzZXIgcHJvZmlsZS4N Cj4+LQ0KPj4tICBUaGlzIGZ1bmN0aW9uIHNlYXJjaGVzIHRoZSBzcGVjaWZpZWQgdXNlciBpbmZv cm1hdGlvbiByZWNvcmQgZnJvbSB0aGUNCj4+YmVnaW5uaW5nIG9mIHRoZSB1c2VyDQo+Pi0gIHBy b2ZpbGUuIEFuZCBpZiBOZXh0SW5mbyBpcyBUUlVFLCByZXR1cm4gdGhlIG5leHQgaW5mbyBpbiB0 aGUgdXNlciBwcm9maWxlLg0KPj4tDQo+Pi0gIEBwYXJhbVtpbl0gICAgICBVc2VyICAgICBQb2lu dHMgdG8gdGhlIHVzZXIgcHJvZmlsZSBlbnRyeS4NCj4+LSAgQHBhcmFtW2luLCBvdXRdIEluZm8g ICAgIE9uIGVudHJ5LCBwb2ludHMgdG8gdGhlIHVzZXIgaW5mb3JtYXRpb24gcmVjb3JkIG9yDQo+ Pk5VTEwgdG8gc3RhcnQNCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaGluZyB3 aXRoIHRoZSBmaXJzdCB1c2VyIGluZm9ybWF0aW9uIHJlY29yZC4NCj4+LSAgICAgICAgICAgICAg ICAgICAgICAgICAgIE9uIHJldHVybiwgcG9pbnRzIHRvIHRoZSB1c2VyIGluZm9ybWF0aW9uIHJl Y29yZCBvciBOVUxMIGlmIG5vdA0KPj5mb3VuZC4NCj4+LSAgQHBhcmFtW2luXSAgICAgIE5leHRJ bmZvIElmIEZBTFNFLCBmaW5kIHRoZSB1c2VyIGluZm9ybWF0aW9uIHJlY29yZCBpbiBwcm9maWxl DQo+PnNwZWNpZnllZCBieSBVc2VyLg0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYg VFJVRSwgZmluZCB0aGUgbmV4dCB1c2VyIGluZm9ybWF0aW9uIHJlY29yZCBpbiBwcm9maWxlDQo+ PnNwZWNpZnllZA0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgYnkgVXNlci4NCj4+LSAg QHBhcmFtW291dF0gICAgIE9mZnNldCAgIEEgcG9pbnRlciB0byB0aGUgb2Zmc2V0IG9mIHRoZSBp bmZvcm1hdGlvbiByZWNvcmQgaW4NCj4+dGhlIHVzZXIgcHJvZmlsZS4NCj4+LQ0KPj4tICBAcmV0 dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBJbmZvIGlzIE5VTEwNCj4+LSAgQHJldHZhbCBFRklf Tk9UX0ZPVU5EICAgICAgICAgSW5mbyB3YXMgbm90IGZvdW5kLCBvciB0aGUgbmV4dCBJbmZvIHdh cyBub3QNCj4+Zm91bmQuDQo+Pi0gIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIEluZm8g b3IgdGhlIG5leHQgaW5mbyBhcmUgZm91bmQgaW4gdXNlciBwcm9maWxlLg0KPj4tDQo+Pi0qKi8N Cj4+LUVGSV9TVEFUVVMNCj4+LUZpbmRVc2VySW5mbyAoDQo+Pi0gIElOICAgICBVU0VSX1BST0ZJ TEVfRU5UUlkgICAgICAgICAgICAgICAgICAgICogVXNlciwNCj4+LSAgSU4gT1VUIEVGSV9VU0VS X0lORk8gICAgICAgICAgICAgICAgICAgICAgICAgKipJbmZvLA0KPj4tICBJTiAgICAgQk9PTEVB TiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXh0SW5mbywNCj4+LSAgICAgT1VUIFVJ TlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKk9mZnNldCBPUFRJT05BTA0KPj4t ICApDQo+Pi17DQo+Pi0gIEVGSV9TVEFUVVMgICAgU3RhdHVzOw0KPj4tICBFRklfVVNFUl9JTkZP ICpVc2VySW5mbzsNCj4+LSAgVUlOVE4gICAgICAgICBJbmZvTGVuOw0KPj4tDQo+Pi0gIGlmIChJ bmZvID09IE5VTEwpIHsNCj4+LSAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPj4t ICB9DQo+Pi0NCj4+LSAgLy8NCj4+LSAgLy8gQ2hlY2sgdXNlciBwcm9maWxlIGVudHJ5DQo+Pi0g IC8vDQo+Pi0gIFN0YXR1cyA9IEZpbmRVc2VyUHJvZmlsZSAoJlVzZXIsIEZBTFNFLCBOVUxMKTsN Cj4+LSAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPj4tICAgIHJldHVybiBTdGF0dXM7DQo+ Pi0gIH0NCj4+LQ0KPj4tICAvLw0KPj4tICAvLyBGaW5kIHVzZXIgaW5mb3JtYXRpb24gaW4gdGhl IHNwZWNpZmllZCB1c2VyIHJlY29yZC4NCj4+LSAgLy8NCj4+LSAgSW5mb0xlbiA9IDA7DQo+Pi0g IHdoaWxlIChJbmZvTGVuIDwgVXNlci0+VXNlclByb2ZpbGVTaXplKSB7DQo+Pi0gICAgVXNlcklu Zm8gPSAoRUZJX1VTRVJfSU5GTyAqKSAoVXNlci0+UHJvZmlsZUluZm8gKyBJbmZvTGVuKTsNCj4+ LSAgICBpZiAoVXNlckluZm8gPT0gKkluZm8pIHsNCj4+LSAgICAgIGlmIChPZmZzZXQgIT0gTlVM TCkgew0KPj4tICAgICAgICAqT2Zmc2V0ID0gSW5mb0xlbjsNCj4+LSAgICAgIH0NCj4+LSAgICAg IGJyZWFrOw0KPj4tICAgIH0NCj4+LSAgICBJbmZvTGVuICs9IEFMSUdOX1ZBUklBQkxFIChVc2Vy SW5mby0+SW5mb1NpemUpOw0KPj4tICB9DQo+Pi0NCj4+LSAgLy8NCj4+LSAgLy8gQ2hlY2sgd2hl dGhlciB0byBmaW5kIHRoZSBuZXh0IHVzZXIgaW5mb3JtYXRpb24uDQo+Pi0gIC8vDQo+Pi0gIGlm IChOZXh0SW5mbykgew0KPj4tICAgIGlmIChJbmZvTGVuIDwgVXNlci0+VXNlclByb2ZpbGVTaXpl KSB7DQo+Pi0gICAgICBVc2VySW5mbyA9IChFRklfVVNFUl9JTkZPICopIChVc2VyLT5Qcm9maWxl SW5mbyArIEluZm9MZW4pOw0KPj4tICAgICAgSW5mb0xlbiArPSBBTElHTl9WQVJJQUJMRSAoVXNl ckluZm8tPkluZm9TaXplKTsNCj4+LSAgICAgIGlmIChJbmZvTGVuIDwgVXNlci0+VXNlclByb2Zp bGVTaXplKSB7DQo+Pi0gICAgICAgICpJbmZvID0gKEVGSV9VU0VSX0lORk8gKikgKFVzZXItPlBy b2ZpbGVJbmZvICsgSW5mb0xlbik7DQo+Pi0gICAgICAgIGlmIChPZmZzZXQgIT0gTlVMTCkgew0K Pj4tICAgICAgICAgICpPZmZzZXQgPSBJbmZvTGVuOw0KPj4tICAgICAgICB9DQo+Pi0gICAgICB9 IGVsc2UgaWYgKEluZm9MZW4gPT0gVXNlci0+VXNlclByb2ZpbGVTaXplKSB7DQo+Pi0gICAgICAg ICpJbmZvID0gTlVMTDsNCj4+LSAgICAgICAgcmV0dXJuIEVGSV9OT1RfRk9VTkQ7DQo+Pi0gICAg ICB9DQo+Pi0gICAgfSBlbHNlIHsNCj4+LSAgICAgIGlmICgqSW5mbyA9PSBOVUxMKSB7DQo+Pi0g ICAgICAgICpJbmZvID0gKEVGSV9VU0VSX0lORk8gKikgVXNlci0+UHJvZmlsZUluZm87DQo+Pi0g ICAgICAgIGlmIChPZmZzZXQgIT0gTlVMTCkgew0KPj4tICAgICAgICAgICpPZmZzZXQgPSAwOw0K Pj4tICAgICAgICB9DQo+Pi0gICAgICB9IGVsc2Ugew0KPj4tICAgICAgICAqSW5mbyA9IE5VTEw7 DQo+Pi0gICAgICAgIHJldHVybiBFRklfTk9UX0ZPVU5EOw0KPj4tICAgICAgfQ0KPj4tICAgIH0N Cj4+LSAgfSBlbHNlIGlmIChJbmZvTGVuID09IFVzZXItPlVzZXJQcm9maWxlU2l6ZSkgew0KPj4t ICAgIHJldHVybiBFRklfTk9UX0ZPVU5EOw0KPj4tICB9DQo+Pi0NCj4+LSAgcmV0dXJuIEVGSV9T VUNDRVNTOw0KPj4tfQ0KPj4tDQo+Pi0vKioNCj4+LSAgRmluZCBhIHVzZXIgaW5mb21hdGlvbiBy ZWNvcmQgYnkgdGhlIGluZm9ybWF0aW9uIHJlY29yZCB0eXBlLg0KPj4tDQo+Pi0gIFRoaXMgZnVu Y3Rpb24gc2VhcmNoZXMgYWxsIHVzZXIgaW5mb3JtYXRpb24gcmVjb3JkcyBvZiBVc2VyLiBUaGUg c2VhcmNoDQo+c3RhcnRzDQo+PndpdGggdGhlDQo+Pi0gIHVzZXIgaW5mb3JtYXRpb24gcmVjb3Jk IGZvbGxvd2luZyBJbmZvIGFuZCBjb250aW51ZXMgdW50aWwgZWl0aGVyIHRoZQ0KPj5pbmZvcm1h dGlvbiBpcyBmb3VuZA0KPj4tICBvciB0aGVyZSBhcmUgbm8gbW9yZSB1c2VyIGluZm9tYXRpb24g cmVjb3JkLg0KPj4tICBBIG1hdGNoIG9jY3VycyB3aGVuIGEgSW5mby5JbmZvVHlwZSBmaWVsZCBt YXRjaGVzIHRoZSB1c2VyIGluZm9ybWF0aW9uDQo+PnJlY29yZCB0eXBlLg0KPj4tDQo+Pi0gIEBw YXJhbVtpbl0gICAgICBVc2VyICAgICBQb2ludHMgdG8gdGhlIHVzZXIgcHJvZmlsZSByZWNvcmQg dG8gc2VhcmNoLg0KPj4tICBAcGFyYW1baW4sIG91dF0gSW5mbyAgICAgT24gZW50cnksIHBvaW50 cyB0byB0aGUgdXNlciBpbmZvcm1hdGlvbiByZWNvcmQgb3INCj4+TlVMTCB0byBzdGFydA0KPj4t ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoaW5nIHdpdGggdGhlIGZpcnN0IHVzZXIg aW5mb3JtYXRpb24gcmVjb3JkLg0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgT24gcmV0 dXJuLCBwb2ludHMgdG8gdGhlIHVzZXIgaW5mb3JtYXRpb24gcmVjb3JkIG9yIE5VTEwgaWYgbm90 DQo+PmZvdW5kLg0KPj4tICBAcGFyYW1baW5dICAgICAgSW5mb1R5cGUgVGhlIGluZm9tYXRpb24g dHlwZSB0byBiZSBzZWFyY2hlZC4NCj4+LQ0KPj4tICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAg ICAgICBVc2VyIGluZm9ybWF0aW9uIHdhcyBmb3VuZC4gSW5mbyBwb2ludHMgdG8gdGhlDQo+PnVz ZXIgaW5mb3JtYXRpb24gcmVjb3JkLg0KPj4tICBAcmV0dmFsIEVGSV9OT1RfRk9VTkQgICAgICAg ICBVc2VyIGluZm9ybWF0aW9uIHdhcyBub3QgZm91bmQuDQo+Pi0gIEByZXR2YWwgRUZJX0lOVkFM SURfUEFSQU1FVEVSIFVzZXIgaXMgTlVMTCBvciBJbmZvIGlzIE5VTEwuDQo+Pi0NCj4+LSoqLw0K Pj4tRUZJX1NUQVRVUw0KPj4tRmluZFVzZXJJbmZvQnlUeXBlICgNCj4+LSAgSU4gICAgICBVU0VS X1BST0ZJTEVfRU5UUlkgICAgICAgICAgICAgICAgICAgICpVc2VyLA0KPj4tICBJTiBPVVQgIEVG SV9VU0VSX0lORk8gICAgICAgICAgICAgICAgICAgICAgICAgKipJbmZvLA0KPj4tICBJTiAgICAg IFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5mb1R5cGUNCj4+LSAgKQ0K Pj4tew0KPj4tICBFRklfU1RBVFVTICAgIFN0YXR1czsNCj4+LSAgRUZJX1VTRVJfSU5GTyAqVXNl ckluZm87DQo+Pi0gIFVJTlROICAgICAgICAgSW5mb0xlbjsNCj4+LQ0KPj4tICBpZiAoSW5mbyA9 PSBOVUxMKSB7DQo+Pi0gICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4+LSAgfQ0K Pj4tDQo+Pi0gIC8vDQo+Pi0gIC8vIENoZWNrIHdoZXRoZXIgdGhlIHVzZXIgaGFzIHRoZSBzcGVj aWZpZWQgdXNlciBpbmZvcm1hdGlvbi4NCj4+LSAgLy8NCj4+LSAgSW5mb0xlbiA9IDA7DQo+Pi0g IGlmICgqSW5mbyA9PSBOVUxMKSB7DQo+Pi0gICAgU3RhdHVzID0gRmluZFVzZXJQcm9maWxlICgm VXNlciwgRkFMU0UsIE5VTEwpOw0KPj4tICB9IGVsc2Ugew0KPj4tICAgIFN0YXR1cyA9IEZpbmRV c2VySW5mbyAoVXNlciwgSW5mbywgVFJVRSwgJkluZm9MZW4pOw0KPj4tICB9DQo+Pi0NCj4+LSAg aWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPj4tICAgIHJldHVybiBFRklfTk9UX0ZPVU5EOw0K Pj4tICB9DQo+Pi0NCj4+LSAgd2hpbGUgKEluZm9MZW4gPCBVc2VyLT5Vc2VyUHJvZmlsZVNpemUp IHsNCj4+LSAgICBVc2VySW5mbyA9IChFRklfVVNFUl9JTkZPICopIChVc2VyLT5Qcm9maWxlSW5m byArIEluZm9MZW4pOw0KPj4tICAgIGlmIChVc2VySW5mby0+SW5mb1R5cGUgPT0gSW5mb1R5cGUp IHsNCj4+LSAgICAgIGlmIChVc2VySW5mbyAhPSAqSW5mbykgew0KPj4tICAgICAgICAqSW5mbyA9 IFVzZXJJbmZvOw0KPj4tICAgICAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+Pi0gICAgICB9DQo+ Pi0gICAgfQ0KPj4tDQo+Pi0gICAgSW5mb0xlbiArPSBBTElHTl9WQVJJQUJMRSAoVXNlckluZm8t PkluZm9TaXplKTsNCj4+LSAgfQ0KPj4tDQo+Pi0gICpJbmZvID0gTlVMTDsNCj4+LSAgcmV0dXJu IEVGSV9OT1RfRk9VTkQ7DQo+Pi19DQo+Pi0NCj4+LS8qKg0KPj4tICBGaW5kIGEgdXNlciB1c2lu ZyBhIHVzZXIgaW5mb3JtYXRpb24gcmVjb3JkLg0KPj4tDQo+Pi0gIFRoaXMgZnVuY3Rpb24gc2Vh cmNoZXMgYWxsIHVzZXIgcHJvZmlsZXMgZm9yIHRoZSBzcGVjaWZpZWQgdXNlciBpbmZvcm1hdGlv bg0KPj5yZWNvcmQuIFRoZQ0KPj4tICBzZWFyY2ggc3RhcnRzIHdpdGggdGhlIHVzZXIgaW5mb3Jt YXRpb24gcmVjb3JkIGhhbmRsZSBmb2xsb3dpbmcgVXNlckluZm8NCj4+YW5kIGNvbnRpbnVlcw0K Pj4tICB1bnRpbCBlaXRoZXIgdGhlIGluZm9ybWF0aW9uIGlzIGZvdW5kIG9yIHRoZXJlIGFyZSBu byBtb3JlIHVzZXIgcHJvZmlsZXMuDQo+Pi0gIEEgbWF0Y2ggb2NjdXJzIHdoZW4gdGhlIEluZm8u SW5mb1R5cGUgZmllbGQgbWF0Y2hlcyB0aGUgdXNlciBpbmZvcm1hdGlvbg0KPj5yZWNvcmQgdHlw ZSBhbmQgdGhlDQo+Pi0gIHVzZXIgaW5mb3JtYXRpb24gcmVjb3JkIGRhdGEgbWF0Y2hlcyB0aGUg cG9ydGlvbiBvZiBJbmZvIHBhc3NlZCB0aGUNCj4+RUZJX1VTRVJfSU5GTyBoZWFkZXIuDQo+Pi0N Cj4+LSAgQHBhcmFtW2luLCBvdXRdIFVzZXIgICAgIE9uIGVudHJ5LCBwb2ludHMgdG8gdGhlIHBy ZXZpb3VzbHkgcmV0dXJuZWQgdXNlcg0KPj5wcm9maWxlIHJlY29yZCwNCj4+LSAgICAgICAgICAg ICAgICAgICAgICAgICAgIG9yIE5VTEwgdG8gc3RhcnQgc2VhcmNoaW5nIHdpdGggdGhlIGZpcnN0 IHVzZXIgcHJvZmlsZS4NCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgIE9uIHJldHVybiwg cG9pbnRzIHRvIHRoZSB1c2VyIHByb2ZpbGUgZW50cnksIG9yIE5VTEwgaWYgbm90DQo+Zm91bmQu DQo+Pi0gIEBwYXJhbVtpbiwgb3V0XSBVc2VySW5mbyBPbiBlbnRyeSwgcG9pbnRzIHRvIHRoZSBw cmV2aW91c2x5IHJldHVybmVkIHVzZXINCj4+aW5mb3JtYXRpb24gcmVjb3JkLA0KPj4tICAgICAg ICAgICAgICAgICAgICAgICAgICAgb3IgTlVMTCB0byBzdGFydCBzZWFyY2hpbmcgd2l0aCB0aGUg Zmlyc3QuDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICBPbiByZXR1cm4sIHBvaW50cyB0 byB0aGUgdXNlciBpbmZvcm1hdGlvbiByZWNvcmQsIG9yIE5VTEwgaWYNCj5ub3QNCj4+Zm91bmQu DQo+Pi0gIEBwYXJhbVtpbl0gICAgICBJbmZvICAgICBQb2ludHMgdG8gdGhlIGJ1ZmZlciBjb250 YWluaW5nIHRoZSB1c2VyIGluZm9ybWF0aW9uDQo+dG8NCj4+YmUgY29tcGFyZWQNCj4+LSAgICAg ICAgICAgICAgICAgICAgICAgICAgIHRvIHRoZSB1c2VyIGluZm9ybWF0aW9uIHJlY29yZC4NCj4+ LSAgQHBhcmFtW2luXSAgICAgIEluZm9TaXplIFRoZSBzaXplIG9mIEluZm8sIGluIGJ5dGVzLiBT YW1lIGFzIEluZm8tPkluZm9TaXplLg0KPj4tDQo+Pi0gIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAg ICAgICAgIFVzZXIgaW5mb3JtYXRpb24gd2FzIGZvdW5kLiBVc2VyIHBvaW50cyB0byB0aGUNCj4+ dXNlciBwcm9maWxlIHJlY29yZCwNCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg YW5kIFVzZXJJbmZvIHBvaW50cyB0byB0aGUgdXNlciBpbmZvcm1hdGlvbiByZWNvcmQuDQo+Pi0g IEByZXR2YWwgRUZJX05PVF9GT1VORCAgICAgICAgIFVzZXIgaW5mb3JtYXRpb24gd2FzIG5vdCBm b3VuZC4NCj4+LSAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgVXNlciBpcyBOVUxMOyBJ bmZvIGlzIE5VTEw7IG9yLCBJbmZvU2l6ZQ0KPmlzDQo+PnRvbyBzbWFsbC4NCj4+LQ0KPj4tKiov DQo+Pi1FRklfU1RBVFVTDQo+Pi1GaW5kVXNlclByb2ZpbGVCeUluZm8gKA0KPj4tICBJTiBPVVQg IFVTRVJfUFJPRklMRV9FTlRSWSAgICAgICAgICAgICAgICAgICAgKipVc2VyLA0KPj4tICBJTiBP VVQgIEVGSV9VU0VSX0lORk8gICAgICAgICAgICAgICAgICAgICAgICAgKipVc2VySW5mbywgT1BU SU9OQUwNCj4+LSAgSU4gICAgICBFRklfVVNFUl9JTkZPICAgICAgICAgICAgICAgICAgICAgICAg ICpJbmZvLA0KPj4tICBJTiAgICAgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgSW5mb1NpemUNCj4+LSAgKQ0KPj4tew0KPj4tICBFRklfU1RBVFVTICAgIFN0YXR1czsNCj4+ LSAgRUZJX1VTRVJfSU5GTyAqSW5mb0VudHJ5Ow0KPj4tDQo+Pi0NCj4+LSAgaWYgKChVc2VyID09 IE5VTEwpIHx8IChJbmZvID09IE5VTEwpKSB7DQo+Pi0gICAgcmV0dXJuIEVGSV9JTlZBTElEX1BB UkFNRVRFUjsNCj4+LSAgfQ0KPj4tDQo+Pi0gIGlmIChJbmZvU2l6ZSA8IHNpemVvZiAoRUZJX1VT RVJfSU5GTykpIHsNCj4+LSAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPj4tICB9 DQo+Pi0NCj4+LSAgaWYgKFVzZXJJbmZvICE9IE5VTEwpIHsNCj4+LSAgICBJbmZvRW50cnkgPSAq VXNlckluZm87DQo+Pi0gIH0gZWxzZSB7DQo+Pi0gICAgSW5mb0VudHJ5ID0gTlVMTDsNCj4+LSAg fQ0KPj4tICAvLw0KPj4tICAvLyBGaW5kIHVzZXIgcHJvZmlsZSBhY2NvcmRpbmcgdG8gaW5mb3Jt YXRpb24uDQo+Pi0gIC8vDQo+Pi0gIGlmICgqVXNlciA9PSBOVUxMKSB7DQo+Pi0gICAgKlVzZXIg PSBtVXNlclByb2ZpbGVEYi0+VXNlclByb2ZpbGVbMF07DQo+Pi0gIH0NCj4+LQ0KPj4tICAvLw0K Pj4tICAvLyBDaGVjayB1c2VyIHByb2ZpbGUgaGFuZGxlLg0KPj4tICAvLw0KPj4tICBTdGF0dXMg PSBGaW5kVXNlclByb2ZpbGUgKFVzZXIsIEZBTFNFLCBOVUxMKTsNCj4+LQ0KPj4tICB3aGlsZSAo IUVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPj4tICAgIC8vDQo+Pi0gICAgLy8gRmluZCB0aGUgdXNl ciBpbmZvcm1hdGlvbiBpbiBhIHVzZXIgcHJvZmlsZS4NCj4+LSAgICAvLw0KPj4tICAgIHdoaWxl IChUUlVFKSB7DQo+Pi0gICAgICBTdGF0dXMgPSBGaW5kVXNlckluZm9CeVR5cGUgKCpVc2VyLCAm SW5mb0VudHJ5LCBJbmZvLT5JbmZvVHlwZSk7DQo+Pi0gICAgICBpZiAoRUZJX0VSUk9SIChTdGF0 dXMpKSB7DQo+Pi0gICAgICAgIGJyZWFrOw0KPj4tICAgICAgfQ0KPj4tDQo+Pi0gICAgICBpZiAo SW5mb1NpemUgPT0gSW5mby0+SW5mb1NpemUpIHsNCj4+LSAgICAgICAgaWYgKENvbXBhcmVNZW0g KChVSU5UOCAqKSAoSW5mb0VudHJ5ICsgMSksIChVSU5UOCAqKSAoSW5mbyArIDEpLA0KPkluZm9T aXplDQo+Pi0gc2l6ZW9mIChFRklfVVNFUl9JTkZPKSkgPT0gMCkgew0KPj4tICAgICAgICAgIC8v DQo+Pi0gICAgICAgICAgLy8gRm91bmQgdGhlIGluZm9tYXRpb24gcmVjb3JkLg0KPj4tICAgICAg ICAgIC8vDQo+Pi0gICAgICAgICAgaWYgKFVzZXJJbmZvICE9IE5VTEwpIHsNCj4+LSAgICAgICAg ICAgICpVc2VySW5mbyA9IEluZm9FbnRyeTsNCj4+LSAgICAgICAgICB9DQo+Pi0gICAgICAgICAg cmV0dXJuIEVGSV9TVUNDRVNTOw0KPj4tICAgICAgICB9DQo+Pi0gICAgICB9DQo+Pi0gICAgfQ0K Pj4tDQo+Pi0gICAgLy8NCj4+LSAgICAvLyBHZXQgbmV4dCB1c2VyIHByb2ZpbGUuDQo+Pi0gICAg Ly8NCj4+LSAgICBJbmZvRW50cnkgPSBOVUxMOw0KPj4tICAgIFN0YXR1cyAgICA9IEZpbmRVc2Vy UHJvZmlsZSAoVXNlciwgVFJVRSwgTlVMTCk7DQo+Pi0gIH0NCj4+LQ0KPj4tICByZXR1cm4gRUZJ X05PVF9GT1VORDsNCj4+LX0NCj4+LQ0KPj4tDQo+Pi0vKioNCj4+LSAgQ2hlY2sgd2hldGhlciB0 aGUgYWNjZXNzIHBvbGljeSBpcyB2YWxpZC4NCj4+LQ0KPj4tICBAcGFyYW1baW5dICBQb2xpY3lJ bmZvICAgICAgICAgIFBvaW50IHRvIHRoZSBhY2Nlc3MgcG9saWN5Lg0KPj4tICBAcGFyYW1baW5d ICBJbmZvTGVuICAgICAgICAgICAgIFRoZSBwb2xpY3kgbGVuZ3RoLg0KPj4tDQo+Pi0gIEByZXR2 YWwgVFJVRSAgICAgVGhlIHBvbGljeSBpcyBhIHZhbGlkIGFjY2VzcyBwb2xpY3kuDQo+Pi0gIEBy ZXR2YWwgRkFMU0UgICAgVGhlIGFjY2VzcyBwb2xpY3kgaXMgbm90IGEgdmFsaWQgYWNjZXNzIHBv bGljeS4NCj4+LQ0KPj4tKiovDQo+Pi1CT09MRUFODQo+Pi1DaGVja0FjY2Vzc1BvbGljeSAoDQo+ Pi0gIElOICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqUG9saWN5 SW5mbywNCj4+LSAgSU4gIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEluZm9MZW4NCj4+LSAgKQ0KPj4tew0KPj4tICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAg ICBUb3RhbExlbjsNCj4+LSAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWVMZW47 DQo+Pi0gIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgIE9mZlNldDsNCj4+LSAgRUZJX1VT RVJfSU5GT19BQ0NFU1NfQ09OVFJPTCAgQWNjZXNzOw0KPj4tICBFRklfREVWSUNFX1BBVEhfUFJP VE9DT0wgICAgICAqUGF0aDsNCj4+LSAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgUGF0 aFNpemU7DQo+Pi0NCj4+LSAgVG90YWxMZW4gPSAwOw0KPj4tICB3aGlsZSAoVG90YWxMZW4gPCBJ bmZvTGVuKSB7DQo+Pi0gICAgLy8NCj4+LSAgICAvLyBDaGVjayBhY2Nlc3MgcG9saWN5IGFjY29y ZGluZyB0byB0eXBlLg0KPj4tICAgIC8vDQo+Pi0gICAgQ29weU1lbSAoJkFjY2VzcywgUG9saWN5 SW5mbyArIFRvdGFsTGVuLCBzaXplb2YgKEFjY2VzcykpOw0KPj4tICAgIFZhbHVlTGVuID0gQWNj ZXNzLlNpemUgLSBzaXplb2YgKEVGSV9VU0VSX0lORk9fQUNDRVNTX0NPTlRST0wpOw0KPj4tICAg IHN3aXRjaCAoQWNjZXNzLlR5cGUpIHsNCj4+LSAgICBjYXNlIEVGSV9VU0VSX0lORk9fQUNDRVNT X0ZPUkJJRF9MT0FEOg0KPj4tICAgIGNhc2UgRUZJX1VTRVJfSU5GT19BQ0NFU1NfUEVSTUlUX0xP QUQ6DQo+Pi0gICAgY2FzZSBFRklfVVNFUl9JTkZPX0FDQ0VTU19GT1JCSURfQ09OTkVDVDoNCj4+ LSAgICBjYXNlIEVGSV9VU0VSX0lORk9fQUNDRVNTX1BFUk1JVF9DT05ORUNUOg0KPj4tICAgICAg T2ZmU2V0ID0gMDsNCj4+LSAgICAgIHdoaWxlIChPZmZTZXQgPCBWYWx1ZUxlbikgew0KPj4tICAg ICAgICBQYXRoICAgICAgPSAoRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICopIChQb2xpY3lJbmZv ICsgVG90YWxMZW4gKw0KPj5zaXplb2YgKEFjY2VzcykgKyBPZmZTZXQpOw0KPj4tICAgICAgICBQ YXRoU2l6ZSAgPSBHZXREZXZpY2VQYXRoU2l6ZSAoUGF0aCk7DQo+Pi0gICAgICAgIE9mZlNldCAr PSBQYXRoU2l6ZTsNCj4+LSAgICAgIH0NCj4+LSAgICAgIGlmIChPZmZTZXQgIT0gVmFsdWVMZW4p IHsNCj4+LSAgICAgICAgcmV0dXJuIEZBTFNFOw0KPj4tICAgICAgfQ0KPj4tICAgICAgYnJlYWs7 DQo+Pi0NCj4+LSAgICBjYXNlIEVGSV9VU0VSX0lORk9fQUNDRVNTX1NFVFVQOg0KPj4tICAgICAg aWYgKFZhbHVlTGVuICUgc2l6ZW9mIChFRklfR1VJRCkgIT0gMCkgew0KPj4tICAgICAgICByZXR1 cm4gRkFMU0U7DQo+Pi0gICAgICB9DQo+Pi0gICAgICBicmVhazsNCj4+LQ0KPj4tICAgIGNhc2Ug RUZJX1VTRVJfSU5GT19BQ0NFU1NfQk9PVF9PUkRFUjoNCj4+LSAgICAgIGlmIChWYWx1ZUxlbiAl IHNpemVvZiAoRUZJX1VTRVJfSU5GT19BQ0NFU1NfQk9PVF9PUkRFUl9IRFIpICE9IDApDQo+PnsN Cj4+LSAgICAgICAgcmV0dXJuIEZBTFNFOw0KPj4tICAgICAgfQ0KPj4tICAgICAgYnJlYWs7DQo+ Pi0NCj4+LSAgICBjYXNlIEVGSV9VU0VSX0lORk9fQUNDRVNTX0VOUk9MTF9TRUxGOg0KPj4tICAg IGNhc2UgRUZJX1VTRVJfSU5GT19BQ0NFU1NfRU5ST0xMX09USEVSUzoNCj4+LSAgICBjYXNlIEVG SV9VU0VSX0lORk9fQUNDRVNTX01BTkFHRToNCj4+LSAgICAgIGlmIChWYWx1ZUxlbiAhPSAwKSB7 DQo+Pi0gICAgICAgIHJldHVybiBGQUxTRTsNCj4+LSAgICAgIH0NCj4+LSAgICAgIGJyZWFrOw0K Pj4tDQo+Pi0gICAgZGVmYXVsdDoNCj4+LSAgICAgIHJldHVybiBGQUxTRTsNCj4+LSAgICAgIGJy ZWFrOw0KPj4tICAgIH0NCj4+LQ0KPj4tICAgIFRvdGFsTGVuICs9IEFjY2Vzcy5TaXplOw0KPj4t ICB9DQo+Pi0NCj4+LSAgaWYgKFRvdGFsTGVuICE9IEluZm9MZW4pIHsNCj4+LSAgICByZXR1cm4g RkFMU0U7DQo+Pi0gIH0NCj4+LQ0KPj4tICByZXR1cm4gVFJVRTsNCj4+LX0NCj4+LQ0KPj4tDQo+ Pi0vKioNCj4+LSAgQ2hlY2sgd2hldGhlciB0aGUgaWRlbnRpdHkgcG9saWN5IGlzIHZhbGlkLg0K Pj4tDQo+Pi0gIEBwYXJhbVtpbl0gIFBvbGljeUluZm8gICAgICAgICAgUG9pbnQgdG8gdGhlIGlk ZW50aXR5IHBvbGljeS4NCj4+LSAgQHBhcmFtW2luXSAgSW5mb0xlbiAgICAgICAgICAgICBUaGUg cG9saWN5IGxlbmd0aC4NCj4+LQ0KPj4tICBAcmV0dmFsIFRSVUUgICAgIFRoZSBwb2xpY3kgaXMg YSB2YWxpZCBpZGVudGl0eSBwb2xpY3kuDQo+Pi0gIEByZXR2YWwgRkFMU0UgICAgVGhlIGFjY2Vz cyBwb2xpY3kgaXMgbm90IGEgdmFsaWQgaWRlbnRpdHkgcG9saWN5Lg0KPj4tDQo+Pi0qKi8NCj4+ LUJPT0xFQU4NCj4+LUNoZWNrSWRlbnRpdHlQb2xpY3kgKA0KPj4tICBJTiAgVUlOVDggICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlBvbGljeUluZm8sDQo+Pi0gIElOICBVSU5U TiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmZvTGVuDQo+Pi0gICkNCj4+ LXsNCj4+LSAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgVG90YWxMZW47DQo+Pi0gIFVJ TlROICAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlTGVuOw0KPj4tICBFRklfVVNFUl9JTkZP X0lERU5USVRZX1BPTElDWSAqSWRlbnRpdHk7DQo+Pi0NCj4+LSAgVG90YWxMZW4gID0gMDsNCj4+ LQ0KPj4tICAvLw0KPj4tICAvLyBDaGVjayBlYWNoIHBhcnQgb2YgcG9saWN5IGV4cHJlc3Npb24u DQo+Pi0gIC8vDQo+Pi0gIHdoaWxlIChUb3RhbExlbiA8IEluZm9MZW4pIHsNCj4+LSAgICAvLw0K Pj4tICAgIC8vIENoZWNrIGFjY2VzcyBwb2xpc3kgYWNjb3JkaW5nIHRvIHR5cGUuDQo+Pi0gICAg Ly8NCj4+LSAgICBJZGVudGl0eSAgPSAoRUZJX1VTRVJfSU5GT19JREVOVElUWV9QT0xJQ1kgKikg KFBvbGljeUluZm8gKyBUb3RhbExlbik7DQo+Pi0gICAgVmFsdWVMZW4gID0gSWRlbnRpdHktPkxl bmd0aCAtIHNpemVvZiAoRUZJX1VTRVJfSU5GT19JREVOVElUWV9QT0xJQ1kpOw0KPj4tICAgIHN3 aXRjaCAoSWRlbnRpdHktPlR5cGUpIHsNCj4+LSAgICAvLw0KPj4tICAgIC8vIENoZWNrIEZhbHNl IG9wdGlvbi4NCj4+LSAgICAvLw0KPj4tICAgIGNhc2UgRUZJX1VTRVJfSU5GT19JREVOVElUWV9G QUxTRToNCj4+LSAgICAgIGlmIChWYWx1ZUxlbiAhPSAwKSB7DQo+Pi0gICAgICAgIHJldHVybiBG QUxTRTsNCj4+LSAgICAgIH0NCj4+LSAgICAgIGJyZWFrOw0KPj4tDQo+Pi0gICAgLy8NCj4+LSAg ICAvLyBDaGVjayBUcnVlIG9wdGlvbi4NCj4+LSAgICAvLw0KPj4tICAgIGNhc2UgRUZJX1VTRVJf SU5GT19JREVOVElUWV9UUlVFOg0KPj4tICAgICAgaWYgKFZhbHVlTGVuICE9IDApIHsNCj4+LSAg ICAgICAgcmV0dXJuIEZBTFNFOw0KPj4tICAgICAgfQ0KPj4tICAgICAgYnJlYWs7DQo+Pi0NCj4+ LSAgICAvLw0KPj4tICAgIC8vIENoZWNrIG5lZ2F0aXZlIG9wZXJhdGlvbi4NCj4+LSAgICAvLw0K Pj4tICAgIGNhc2UgRUZJX1VTRVJfSU5GT19JREVOVElUWV9OT1Q6DQo+Pi0gICAgICBpZiAoVmFs dWVMZW4gIT0gMCkgew0KPj4tICAgICAgICByZXR1cm4gRkFMU0U7DQo+Pi0gICAgICB9DQo+Pi0g ICAgICBicmVhazsNCj4+LQ0KPj4tICAgIC8vDQo+Pi0gICAgLy8gQ2hlY2sgYW5kIG9wZXJhdGlv bi4NCj4+LSAgICAvLw0KPj4tICAgIGNhc2UgRUZJX1VTRVJfSU5GT19JREVOVElUWV9BTkQ6DQo+ Pi0gICAgICBpZiAoVmFsdWVMZW4gIT0gMCkgew0KPj4tICAgICAgICByZXR1cm4gRkFMU0U7DQo+ Pi0gICAgICB9DQo+Pi0gICAgICBicmVhazsNCj4+LQ0KPj4tICAgIC8vDQo+Pi0gICAgLy8gQ2hl Y2sgb3Igb3BlcmF0aW9uLg0KPj4tICAgIC8vDQo+Pi0gICAgY2FzZSBFRklfVVNFUl9JTkZPX0lE RU5USVRZX09SOg0KPj4tICAgICAgaWYgKFZhbHVlTGVuICE9IDApIHsNCj4+LSAgICAgICAgcmV0 dXJuIEZBTFNFOw0KPj4tICAgICAgfQ0KPj4tICAgICAgYnJlYWs7DQo+Pi0NCj4+LSAgICAvLw0K Pj4tICAgIC8vIENoZWNrIGNyZWRlbnRpYWwgcHJvdmlkZXIgYnkgdHlwZS4NCj4+LSAgICAvLw0K Pj4tICAgIGNhc2UgRUZJX1VTRVJfSU5GT19JREVOVElUWV9DUkVERU5USUFMX1RZUEU6DQo+Pi0g ICAgICBpZiAoVmFsdWVMZW4gIT0gc2l6ZW9mIChFRklfR1VJRCkpIHsNCj4+LSAgICAgICAgcmV0 dXJuIEZBTFNFOw0KPj4tICAgICAgfQ0KPj4tICAgICAgYnJlYWs7DQo+Pi0NCj4+LSAgICAvLw0K Pj4tICAgIC8vIENoZWNrIGNyZWRlbnRpYWwgcHJvdmlkZXIgYnkgSUQuDQo+Pi0gICAgLy8NCj4+ LSAgICBjYXNlIEVGSV9VU0VSX0lORk9fSURFTlRJVFlfQ1JFREVOVElBTF9QUk9WSURFUjoNCj4+ LSAgICAgIGlmIChWYWx1ZUxlbiAhPSBzaXplb2YgKEVGSV9HVUlEKSkgew0KPj4tICAgICAgICBy ZXR1cm4gRkFMU0U7DQo+Pi0gICAgICB9DQo+Pi0gICAgICBicmVhazsNCj4+LQ0KPj4tICAgIGRl ZmF1bHQ6DQo+Pi0gICAgICByZXR1cm4gRkFMU0U7DQo+Pi0gICAgICBicmVhazsNCj4+LSAgICB9 DQo+Pi0NCj4+LSAgICBUb3RhbExlbiArPSBJZGVudGl0eS0+TGVuZ3RoOw0KPj4tICB9DQo+Pi0N Cj4+LSAgaWYgKFRvdGFsTGVuICE9IEluZm9MZW4pIHsNCj4+LSAgICByZXR1cm4gRkFMU0U7DQo+ Pi0gIH0NCj4+LQ0KPj4tICByZXR1cm4gVFJVRTsNCj4+LX0NCj4+LQ0KPj4tDQo+Pi0vKioNCj4+ LSAgQ2hlY2sgd2hldGhlciB0aGUgdXNlciBpbmZvcm1hdGlvbiBpcyBhIHZhbGlkIHVzZXIgaW5m b3JtYXRpb24gcmVjb3JkLg0KPj4tDQo+Pi0gIEBwYXJhbVtpbl0gIEluZm8gcG9pbnRzIHRvIHRo ZSB1c2VyIGluZm9ybWF0aW9uLg0KPj4tDQo+Pi0gIEByZXR2YWwgVFJVRSAgICAgVGhlIGluZm8g aXMgYSB2YWxpZCB1c2VyIGluZm9ybWF0aW9uIHJlY29yZC4NCj4+LSAgQHJldHZhbCBGQUxTRSAg ICBUaGUgaW5mbyBpcyBub3QgYSB2YWxpZCB1c2VyIGluZm9ybWF0aW9uIHJlY29yZC4NCj4+LQ0K Pj4tKiovDQo+Pi1CT09MRUFODQo+Pi1DaGVja1VzZXJJbmZvICgNCj4+LSAgSU4gQ09OU1QgIEVG SV9VU0VSX0lORk8gICAgICAgICAgICAgICAgICAgICAgICpJbmZvDQo+Pi0gICkNCj4+LXsNCj4+ LSAgVUlOVE4gICAgICAgSW5mb0xlbjsNCj4+LQ0KPj4tICBpZiAoSW5mbyA9PSBOVUxMKSB7DQo+ Pi0gICAgcmV0dXJuIEZBTFNFOw0KPj4tICB9DQo+Pi0gIC8vDQo+Pi0gIC8vIENoZWNrIHVzZXIg aW5mb3JtYXRpb24gYWNjb3JkaW5nIHRvIGluZm9ybWF0aW9uIHR5cGUuDQo+Pi0gIC8vDQo+Pi0g IEluZm9MZW4gPSBJbmZvLT5JbmZvU2l6ZSAtIHNpemVvZiAoRUZJX1VTRVJfSU5GTyk7DQo+Pi0g IHN3aXRjaCAoSW5mby0+SW5mb1R5cGUpIHsNCj4+LSAgY2FzZSBFRklfVVNFUl9JTkZPX0VNUFRZ X1JFQ09SRDoNCj4+LSAgICBpZiAoSW5mb0xlbiAhPSAwKSB7DQo+Pi0gICAgICByZXR1cm4gRkFM U0U7DQo+Pi0gICAgfQ0KPj4tICAgIGJyZWFrOw0KPj4tDQo+Pi0gIGNhc2UgRUZJX1VTRVJfSU5G T19OQU1FX1JFQ09SRDoNCj4+LSAgY2FzZSBFRklfVVNFUl9JTkZPX0NSRURFTlRJQUxfVFlQRV9O QU1FX1JFQ09SRDoNCj4+LSAgY2FzZSBFRklfVVNFUl9JTkZPX0NSRURFTlRJQUxfUFJPVklERVJf TkFNRV9SRUNPUkQ6DQo+Pi0gICAgYnJlYWs7DQo+Pi0NCj4+LSAgY2FzZSBFRklfVVNFUl9JTkZP X0NSRUFURV9EQVRFX1JFQ09SRDoNCj4+LSAgY2FzZSBFRklfVVNFUl9JTkZPX1VTQUdFX0RBVEVf UkVDT1JEOg0KPj4tICAgIGlmIChJbmZvTGVuICE9IHNpemVvZiAoRUZJX1RJTUUpKSB7DQo+Pi0g ICAgICByZXR1cm4gRkFMU0U7DQo+Pi0gICAgfQ0KPj4tICAgIGJyZWFrOw0KPj4tDQo+Pi0gIGNh c2UgRUZJX1VTRVJfSU5GT19VU0FHRV9DT1VOVF9SRUNPUkQ6DQo+Pi0gICAgaWYgKEluZm9MZW4g IT0gc2l6ZW9mIChVSU5UNjQpKSB7DQo+Pi0gICAgICByZXR1cm4gRkFMU0U7DQo+Pi0gICAgfQ0K Pj4tICAgIGJyZWFrOw0KPj4tDQo+Pi0gIGNhc2UgRUZJX1VTRVJfSU5GT19JREVOVElGSUVSX1JF Q09SRDoNCj4+LSAgICBpZiAoSW5mb0xlbiAhPSAxNikgew0KPj4tICAgICAgcmV0dXJuIEZBTFNF Ow0KPj4tICAgIH0NCj4+LSAgICBicmVhazsNCj4+LQ0KPj4tICBjYXNlIEVGSV9VU0VSX0lORk9f Q1JFREVOVElBTF9UWVBFX1JFQ09SRDoNCj4+LSAgY2FzZSBFRklfVVNFUl9JTkZPX0NSRURFTlRJ QUxfUFJPVklERVJfUkVDT1JEOg0KPj4tICBjYXNlIEVGSV9VU0VSX0lORk9fR1VJRF9SRUNPUkQ6 DQo+Pi0gICAgaWYgKEluZm9MZW4gIT0gc2l6ZW9mIChFRklfR1VJRCkpIHsNCj4+LSAgICAgIHJl dHVybiBGQUxTRTsNCj4+LSAgICB9DQo+Pi0gICAgYnJlYWs7DQo+Pi0NCj4+LSAgY2FzZSBFRklf VVNFUl9JTkZPX1BLQ1MxMV9SRUNPUkQ6DQo+Pi0gIGNhc2UgRUZJX1VTRVJfSU5GT19DQkVGRl9S RUNPUkQ6DQo+Pi0gICAgYnJlYWs7DQo+Pi0NCj4+LSAgY2FzZSBFRklfVVNFUl9JTkZPX0ZBUl9S RUNPUkQ6DQo+Pi0gIGNhc2UgRUZJX1VTRVJfSU5GT19SRVRSWV9SRUNPUkQ6DQo+Pi0gICAgaWYg KEluZm9MZW4gIT0gMSkgew0KPj4tICAgICAgcmV0dXJuIEZBTFNFOw0KPj4tICAgIH0NCj4+LSAg ICBicmVhazsNCj4+LQ0KPj4tICBjYXNlIEVGSV9VU0VSX0lORk9fQUNDRVNTX1BPTElDWV9SRUNP UkQ6DQo+Pi0gICAgaWYoIUNoZWNrQWNjZXNzUG9saWN5ICgoVUlOVDggKikgKEluZm8gKyAxKSwg SW5mb0xlbikpIHsNCj4+LSAgICAgIHJldHVybiBGQUxTRTsNCj4+LSAgICB9DQo+Pi0gICAgYnJl YWs7DQo+Pi0NCj4+LSAgY2FzZSBFRklfVVNFUl9JTkZPX0lERU5USVRZX1BPTElDWV9SRUNPUkQ6 DQo+Pi0gICAgaWYgKCFDaGVja0lkZW50aXR5UG9saWN5ICgoVUlOVDggKikgKEluZm8gKyAxKSwg SW5mb0xlbikpIHsNCj4+LSAgICAgIHJldHVybiBGQUxTRTsNCj4+LSAgICB9DQo+Pi0gICAgYnJl YWs7DQo+Pi0NCj4+LSAgZGVmYXVsdDoNCj4+LSAgICByZXR1cm4gRkFMU0U7DQo+Pi0gICAgYnJl YWs7DQo+Pi0gIH0NCj4+LQ0KPj4tICByZXR1cm4gVFJVRTsNCj4+LX0NCj4+LQ0KPj4tDQo+Pi0v KioNCj4+LSAgQ2hlY2sgdGhlIHVzZXIgcHJvZmlsZSBkYXRhIGZvcm1hdCB0byBiZSBhZGRlZC4N Cj4+LQ0KPj4tICBAcGFyYW1baW5dICBVc2VyUHJvZmlsZUluZm8gICAgIFBvaW50cyB0byB0aGUg dXNlciBwcm9maWxlIGRhdGEuDQo+Pi0gIEBwYXJhbVtpbl0gIFVzZXJQcm9maWxlU2l6ZSAgICAg VGhlIGxlbmd0aCBvZiB1c2VyIHByb2ZpbGUgZGF0YS4NCj4+LQ0KPj4tICBAcmV0dmFsIFRSVUUg ICAgIEl0IGlzIGEgdmFsaWQgdXNlciBwcm9maWxlLg0KPj4tICBAcmV0dmFsIEZBTFNFICAgIEl0 IGlzIG5vdCBhIHZhbGlkIHVzZXIgcHJvZmlsZS4NCj4+LQ0KPj4tKiovDQo+Pi1CT09MRUFODQo+ Pi1DaGVja1Byb2ZpbGVJbmZvICgNCj4+LSAgSU4gIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICpVc2VyUHJvZmlsZUluZm8sDQo+Pi0gIElOICBVSU5UTiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VyUHJvZmlsZVNpemUNCj4+LSAgKQ0KPj4t ew0KPj4tICBVSU5UTiAgICAgICAgIENoa0xlbjsNCj4+LSAgRUZJX1VTRVJfSU5GTyAqSW5mbzsN Cj4+LQ0KPj4tICBpZiAoVXNlclByb2ZpbGVJbmZvID09IE5VTEwpIHsNCj4+LSAgICByZXR1cm4g RkFMU0U7DQo+Pi0gIH0NCj4+LQ0KPj4tICAvLw0KPj4tICAvLyBDaGVjayB1c2VyIHByb2ZpbGUg aW5mb3JtYXRpb24gbGVuZ3RoLg0KPj4tICAvLw0KPj4tICBDaGtMZW4gPSAwOw0KPj4tICB3aGls ZSAoQ2hrTGVuIDwgVXNlclByb2ZpbGVTaXplKSB7DQo+Pi0gICAgSW5mbyA9IChFRklfVVNFUl9J TkZPICopIChVc2VyUHJvZmlsZUluZm8gKyBDaGtMZW4pOw0KPj4tICAgIC8vDQo+Pi0gICAgLy8g Q2hlY2sgdXNlciBpbmZvcm1hdGlvbiBmb3JtYXQuDQo+Pi0gICAgLy8NCj4+LSAgICBpZiAoIUNo ZWNrVXNlckluZm8gKEluZm8pKSB7DQo+Pi0gICAgICByZXR1cm4gRkFMU0U7DQo+Pi0gICAgfQ0K Pj4tDQo+Pi0gICAgQ2hrTGVuICs9IEFMSUdOX1ZBUklBQkxFIChJbmZvLT5JbmZvU2l6ZSk7DQo+ Pi0gIH0NCj4+LQ0KPj4tICBpZiAoQ2hrTGVuICE9IFVzZXJQcm9maWxlU2l6ZSkgew0KPj4tICAg IHJldHVybiBGQUxTRTsNCj4+LSAgfQ0KPj4tDQo+Pi0gIHJldHVybiBUUlVFOw0KPj4tfQ0KPj4t DQo+Pi0NCj4+LS8qKg0KPj4tICBGaW5kIHRoZSBzcGVjaWZpZWQgUmlnaHRUeXBlIGluIGN1cnJl bnQgdXNlciBwcm9maWxlLg0KPj4tDQo+Pi0gIEBwYXJhbVtpbl0gIFJpZ2h0VHlwZSAgICAgIENv dWxkIGJlIEVGSV9VU0VSX0lORk9fQUNDRVNTX01BTkFHRSwNCj4+LSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRUZJX1VTRVJfSU5GT19BQ0NFU1NfRU5ST0xMX09USEVSUyBvcg0KPj4tICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBFRklfVVNFUl9JTkZPX0FDQ0VTU19FTlJPTExfU0VM Ri4NCj4+LQ0KPj4tICBAcmV0dmFsIFRSVUUgICAgIEZpbmQgdGhlIHNwZWNpZmllZCBSaWdodFR5 cGUgaW4gY3VycmVudCB1c2VyIHByb2ZpbGUuDQo+Pi0gIEByZXR2YWwgRkFMU0UgICAgQ2FuJ3Qg ZmluZCB0aGUgcmlnaHQgaW4gdGhlIHByb2ZpbGUuDQo+Pi0NCj4+LSoqLw0KPj4tQk9PTEVBTg0K Pj4tQ2hlY2tDdXJyZW50VXNlckFjY2Vzc1JpZ2h0ICgNCj4+LSAgSU4gICAgICAgIFVJTlQzMiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJpZ2h0VHlwZQ0KPj4tICApDQo+Pi17DQo+Pi0g IEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4+LSAgRUZJX1VTRVJfSU5G TyAgICAgICAgICAgICAgICAgKkluZm87DQo+Pi0gIFVJTlROICAgICAgICAgICAgICAgICAgICAg ICAgIFRvdGFsTGVuOw0KPj4tICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICBDaGVja0xl bjsNCj4+LSAgRUZJX1VTRVJfSU5GT19BQ0NFU1NfQ09OVFJPTCAgQWNjZXNzOw0KPj4tDQo+Pi0g IC8vDQo+Pi0gIC8vIEdldCB1c2VyIGFjY2VzcyByaWdodCBpbmZvcm1hdGlvbi4NCj4+LSAgLy8N Cj4+LSAgSW5mbyA9IE5VTEw7DQo+Pi0gIFN0YXR1cyA9IEZpbmRVc2VySW5mb0J5VHlwZSAoDQo+ Pi0gICAgICAgICAgICAoVVNFUl9QUk9GSUxFX0VOVFJZICopIG1DdXJyZW50VXNlciwNCj4+LSAg ICAgICAgICAgICZJbmZvLA0KPj4tICAgICAgICAgICAgRUZJX1VTRVJfSU5GT19BQ0NFU1NfUE9M SUNZX1JFQ09SRA0KPj4tICAgICAgICAgICAgKTsNCj4+LSAgaWYgKEVGSV9FUlJPUiAoU3RhdHVz KSkgew0KPj4tICAgIHJldHVybiBGQUxTRTsNCj4+LSAgfQ0KPj4tDQo+Pi0gIEFTU0VSVCAoSW5m byAhPSBOVUxMKTsNCj4+LSAgVG90YWxMZW4gID0gSW5mby0+SW5mb1NpemUgLSBzaXplb2YgKEVG SV9VU0VSX0lORk8pOw0KPj4tICBDaGVja0xlbiAgPSAwOw0KPj4tICB3aGlsZSAoQ2hlY2tMZW4g PCBUb3RhbExlbikgew0KPj4tICAgIC8vDQo+Pi0gICAgLy8gQ2hlY2sgcmlnaHQgYWNjb3JkaW5n IHRvIGFjY2VzcyB0eXBlLg0KPj4tICAgIC8vDQo+Pi0gICAgQ29weU1lbSAoJkFjY2VzcywgKFVJ TlQ4ICopIChJbmZvICsgMSkgKyBDaGVja0xlbiwgc2l6ZW9mIChBY2Nlc3MpKTsNCj4+LSAgICBp ZiAoQWNjZXNzLlR5cGUgPT0gUmlnaHRUeXBlKSB7DQo+Pi0gICAgICByZXR1cm4gVFJVRTs7DQo+ Pi0gICAgfQ0KPj4tDQo+Pi0gICAgQ2hlY2tMZW4gKz0gQWNjZXNzLlNpemU7DQo+Pi0gIH0NCj4+ LQ0KPj4tICByZXR1cm4gRkFMU0U7DQo+Pi19DQo+Pi0NCj4+LQ0KPj4tLyoqDQo+Pi0gIENyZWF0 ZSBhIHVuaXF1ZSB1c2VyIGlkZW50aWZpZXIuDQo+Pi0NCj4+LSAgQHBhcmFtW291dF0gIElkZW50 aWZpZXIgICAgIFRoaXMgcG9pbnRzIHRvIHRoZSBpZGVudGlmaWVyLg0KPj4tDQo+Pi0qKi8NCj4+ LVZPSUQNCj4+LUdlbmVyYXRlSWRlbnRpZmllciAoDQo+Pi0gICBPVVQgICAgVUlOVDggICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKklkZW50aWZpZXINCj4+LSAgKQ0KPj4tew0KPj4tICBF RklfVElNRSAgVGltZTsNCj4+LSAgVUlOVDY0ICAgIE1vbm90b25pY0NvdW50Ow0KPj4tICBVSU5U MzIgICAgKk1vbm90b25pY1BvaW50ZXI7DQo+Pi0gIFVJTlROICAgICBJbmRleDsNCj4+LQ0KPj4t ICAvLw0KPj4tICAvLyBDcmVhdGUgYSB1bmlxdWUgdXNlciBpZGVudGlmaWVyLg0KPj4tICAvLw0K Pj4tICBnUlQtPkdldFRpbWUgKCZUaW1lLCBOVUxMKTsNCj4+LSAgQ29weU1lbSAoSWRlbnRpZmll ciwgJlRpbWUsIHNpemVvZiAoRUZJX1RJTUUpKTsNCj4+LSAgLy8NCj4+LSAgLy8gUmVtb3ZlIHpl cm9zLg0KPj4tICAvLw0KPj4tICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBzaXplb2YgKEVGSV9U SU1FKTsgSW5kZXgrKykgew0KPj4tICAgIGlmIChJZGVudGlmaWVyW0luZGV4XSA9PSAwKSB7DQo+ Pi0gICAgICBJZGVudGlmaWVyW0luZGV4XSA9IDB4NWE7DQo+Pi0gICAgfQ0KPj4tICB9DQo+Pi0N Cj4+LSAgTW9ub3RvbmljUG9pbnRlciA9IChVSU5UMzIgKikgSWRlbnRpZmllcjsNCj4+LSAgZ0JT LT5HZXROZXh0TW9ub3RvbmljQ291bnQgKCZNb25vdG9uaWNDb3VudCk7DQo+Pi0gIE1vbm90b25p Y1BvaW50ZXJbMF0gKz0gKFVJTlQzMikgTW9ub3RvbmljQ291bnQ7DQo+Pi0gIE1vbm90b25pY1Bv aW50ZXJbMV0gKz0gKFVJTlQzMikgTW9ub3RvbmljQ291bnQ7DQo+Pi0gIE1vbm90b25pY1BvaW50 ZXJbMl0gKz0gKFVJTlQzMikgTW9ub3RvbmljQ291bnQ7DQo+Pi0gIE1vbm90b25pY1BvaW50ZXJb M10gKz0gKFVJTlQzMikgTW9ub3RvbmljQ291bnQ7DQo+Pi19DQo+Pi0NCj4+LQ0KPj4tLyoqDQo+ Pi0gIEdlbmVyYXRlIHVuaXF1ZSB1c2VyIElELg0KPj4tDQo+Pi0gIEBwYXJhbVtvdXRdICBVc2Vy SWQgICAgICAgICAgICAgICAgIFBvaW50cyB0byB0aGUgdXNlciBpZGVudGlmZXIuDQo+Pi0NCj4+ LSoqLw0KPj4tVk9JRA0KPj4tR2VuZXJhdGVVc2VySWQgKA0KPj4tICBPVVQgICAgVUlOVDggICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKlVzZXJJZA0KPj4tICApDQo+Pi17DQo+Pi0gIEVG SV9TVEFUVVMgICAgICAgICAgICAgIFN0YXR1czsNCj4+LSAgVVNFUl9QUk9GSUxFX0VOVFJZICAg ICAgKlVzZXJQcm9maWxlOw0KPj4tICBFRklfVVNFUl9JTkZPICAgICAgICAgICAqVXNlckluZm87 DQo+Pi0gIFVJTlROICAgICAgICAgICAgICAgICAgIEluZGV4Ow0KPj4tDQo+Pi0gIC8vDQo+Pi0g IC8vIEdlbmVyYXRlIHVuaXF1ZSB1c2VyIElEDQo+Pi0gIC8vDQo+Pi0gIHdoaWxlIChUUlVFKSB7 DQo+Pi0gICAgR2VuZXJhdGVJZGVudGlmaWVyIChVc2VySWQpOw0KPj4tICAgIC8vDQo+Pi0gICAg Ly8gQ2hlY2sgd2hldGhlciBpdCdzIHVuaXF1ZSBpbiB1c2VyIHByb2ZpbGUgZGF0YWJhc2UuDQo+ Pi0gICAgLy8NCj4+LSAgICBpZiAobVVzZXJQcm9maWxlRGIgPT0gTlVMTCkgew0KPj4tICAgICAg cmV0dXJuIDsNCj4+LSAgICB9DQo+Pi0NCj4+LSAgICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBt VXNlclByb2ZpbGVEYi0+VXNlclByb2ZpbGVOdW07IEluZGV4KyspIHsNCj4+LSAgICAgIFVzZXJQ cm9maWxlID0gKFVTRVJfUFJPRklMRV9FTlRSWSAqKSAobVVzZXJQcm9maWxlRGItDQo+Pj5Vc2Vy UHJvZmlsZVtJbmRleF0pOw0KPj4tICAgICAgVXNlckluZm8gICAgPSBOVUxMOw0KPj4tICAgICAg U3RhdHVzICAgICAgPSBGaW5kVXNlckluZm9CeVR5cGUgKFVzZXJQcm9maWxlLCAmVXNlckluZm8s DQo+PkVGSV9VU0VSX0lORk9fSURFTlRJRklFUl9SRUNPUkQpOw0KPj4tICAgICAgaWYgKEVGSV9F UlJPUiAoU3RhdHVzKSkgew0KPj4tICAgICAgICBjb250aW51ZTsNCj4+LSAgICAgIH0NCj4+LQ0K Pj4tICAgICAgaWYgKENvbXBhcmVNZW0gKChVSU5UOCAqKSAoVXNlckluZm8gKyAxKSwgVXNlcklk LCBzaXplb2YNCj4+KEVGSV9VU0VSX0lORk9fSURFTlRJRklFUikpID09IDApIHsNCj4+LSAgICAg ICAgYnJlYWs7DQo+Pi0gICAgICB9DQo+Pi0gICAgfQ0KPj4tDQo+Pi0gICAgaWYgKEluZGV4ID09 IG1Vc2VyUHJvZmlsZURiLT5Vc2VyUHJvZmlsZU51bSkgew0KPj4tICAgICAgcmV0dXJuIDsNCj4+ LSAgICB9DQo+Pi0gIH0NCj4+LX0NCj4+LQ0KPj4tDQo+Pi0vKioNCj4+LSAgRXhwYW5kIHVzZXIg cHJvZmlsZSBkYXRhYmFzZS4NCj4+LQ0KPj4tICBAcmV0dmFsIFRSVUUgICAgIFN1Y2Nlc3MgdG8g ZXhwYW5kIHVzZXIgcHJvZmlsZSBkYXRhYmFzZS4NCj4+LSAgQHJldHZhbCBGQUxTRSAgICBGYWls IHRvIGV4cGFuZCB1c2VyIHByb2ZpbGUgZGF0YWJhc2UuDQo+Pi0NCj4+LSoqLw0KPj4tQk9PTEVB Tg0KPj4tRXhwYW5kVXNlcm1Vc2VyUHJvZmlsZURiICgNCj4+LSAgVk9JRA0KPj4tICApDQo+Pi17 DQo+Pi0gIFVJTlROICAgICAgICAgICAgICAgTWF4TnVtOw0KPj4tICBVU0VSX1BST0ZJTEVfREIg ICAgICpOZXdEYXRhQmFzZTsNCj4+LQ0KPj4tICAvLw0KPj4tICAvLyBDcmVhdGUgbmV3IHVzZXIg cHJvZmlsZSBkYXRhYmFzZS4NCj4+LSAgLy8NCj4+LSAgaWYgKG1Vc2VyUHJvZmlsZURiID09IE5V TEwpIHsNCj4+LSAgICBNYXhOdW0gPSBVU0VSX05VTUJFUl9JTkM7DQo+Pi0gIH0gZWxzZSB7DQo+ Pi0gICAgTWF4TnVtID0gbVVzZXJQcm9maWxlRGItPk1heFByb2ZpbGVOdW0gKyBVU0VSX05VTUJF Ul9JTkM7DQo+Pi0gIH0NCj4+LQ0KPj4tICBOZXdEYXRhQmFzZSA9IEFsbG9jYXRlWmVyb1Bvb2wg KA0KPj4tICAgICAgICAgICAgICAgICAgc2l6ZW9mIChVU0VSX1BST0ZJTEVfREIpIC0gc2l6ZW9m IChFRklfVVNFUl9QUk9GSUxFX0hBTkRMRSkgKw0KPj4tICAgICAgICAgICAgICAgICAgTWF4TnVt ICogc2l6ZW9mIChFRklfVVNFUl9QUk9GSUxFX0hBTkRMRSkNCj4+LSAgICAgICAgICAgICAgICAg ICk7DQo+Pi0gIGlmIChOZXdEYXRhQmFzZSA9PSBOVUxMKSB7DQo+Pi0gICAgcmV0dXJuIEZBTFNF Ow0KPj4tICB9DQo+Pi0NCj4+LSAgTmV3RGF0YUJhc2UtPk1heFByb2ZpbGVOdW0gPSBNYXhOdW07 DQo+Pi0NCj4+LSAgLy8NCj4+LSAgLy8gQ29weSBvbGQgdXNlciBwcm9maWxlIGRhdGFiYXNlIHZh bHVlDQo+Pi0gIC8vDQo+Pi0gIGlmIChtVXNlclByb2ZpbGVEYiA9PSBOVUxMKSB7DQo+Pi0gICAg TmV3RGF0YUJhc2UtPlVzZXJQcm9maWxlTnVtID0gMDsNCj4+LSAgfSBlbHNlIHsNCj4+LSAgICBO ZXdEYXRhQmFzZS0+VXNlclByb2ZpbGVOdW0gPSBtVXNlclByb2ZpbGVEYi0+VXNlclByb2ZpbGVO dW07DQo+Pi0gICAgQ29weU1lbSAoDQo+Pi0gICAgICBOZXdEYXRhQmFzZS0+VXNlclByb2ZpbGUs DQo+Pi0gICAgICBtVXNlclByb2ZpbGVEYi0+VXNlclByb2ZpbGUsDQo+Pi0gICAgICBOZXdEYXRh QmFzZS0+VXNlclByb2ZpbGVOdW0gKiBzaXplb2YgKEVGSV9VU0VSX1BST0ZJTEVfSEFORExFKQ0K Pj4tICAgICAgKTsNCj4+LSAgICBGcmVlUG9vbCAobVVzZXJQcm9maWxlRGIpOw0KPj4tICB9DQo+ Pi0NCj4+LSAgbVVzZXJQcm9maWxlRGIgPSBOZXdEYXRhQmFzZTsNCj4+LSAgcmV0dXJuIFRSVUU7 DQo+Pi19DQo+Pi0NCj4+LQ0KPj4tLyoqDQo+Pi0gIEV4cGFuZCB1c2VyIHByb2ZpbGUNCj4+LQ0K Pj4tICBAcGFyYW1baW5dICBVc2VyICAgICAgICAgICAgICAgICAgICBQb2ludHMgdG8gdXNlciBw cm9maWxlLg0KPj4tICBAcGFyYW1baW5dICBFeHBhbmRTaXplICAgICAgICAgICAgICBUaGUgc2l6 ZSBvZiB1c2VyIHByb2ZpbGUuDQo+Pi0NCj4+LSAgQHJldHZhbCBUUlVFICAgICBTdWNjZXNzIHRv IGV4cGFuZCB1c2VyIHByb2ZpbGUgc2l6ZS4NCj4+LSAgQHJldHZhbCBGQUxTRSAgICBGYWlsIHRv IGV4cGFuZCB1c2VyIHByb2ZpbGUgc2l6ZS4NCj4+LQ0KPj4tKiovDQo+Pi1CT09MRUFODQo+Pi1F eHBhbmRVc2VyUHJvZmlsZSAoDQo+Pi0gIElOIFVTRVJfUFJPRklMRV9FTlRSWSAgICAgICAgICAg ICAgICAgICAgICAgICAqVXNlciwNCj4+LSAgSU4gVUlOVE4gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEV4cGFuZFNpemUNCj4+LSAgKQ0KPj4tew0KPj4tICBVSU5UOCAqSW5m bzsNCj4+LSAgVUlOVE4gSW5mb1NpemVJbmM7DQo+Pi0NCj4+LSAgLy8NCj4+LSAgLy8gQWxsb2Nh dGUgbmV3IG1lbW9yeS4NCj4+LSAgLy8NCj4+LSAgSW5mb1NpemVJbmMgPSAxMjg7DQo+Pi0gIFVz ZXItPk1heFByb2ZpbGVTaXplICs9ICgoRXhwYW5kU2l6ZSArIEluZm9TaXplSW5jIC0gMSkgLyBJ bmZvU2l6ZUluYykgKg0KPj5JbmZvU2l6ZUluYzsNCj4+LSAgSW5mbyA9IEFsbG9jYXRlWmVyb1Bv b2wgKFVzZXItPk1heFByb2ZpbGVTaXplKTsNCj4+LSAgaWYgKEluZm8gPT0gTlVMTCkgew0KPj4t ICAgIHJldHVybiBGQUxTRTsNCj4+LSAgfQ0KPj4tDQo+Pi0gIC8vDQo+Pi0gIC8vIENvcHkgZXhp c3QgaW5mb3JtYXRpb24uDQo+Pi0gIC8vDQo+Pi0gIGlmIChVc2VyLT5Vc2VyUHJvZmlsZVNpemUg PiAwKSB7DQo+Pi0gICAgQ29weU1lbSAoSW5mbywgVXNlci0+UHJvZmlsZUluZm8sIFVzZXItPlVz ZXJQcm9maWxlU2l6ZSk7DQo+Pi0gICAgRnJlZVBvb2wgKFVzZXItPlByb2ZpbGVJbmZvKTsNCj4+ LSAgfQ0KPj4tDQo+Pi0gIFVzZXItPlByb2ZpbGVJbmZvID0gSW5mbzsNCj4+LSAgcmV0dXJuIFRS VUU7DQo+Pi19DQo+Pi0NCj4+LQ0KPj4tLyoqDQo+Pi0gIFNhdmUgdGhlIHVzZXIgcHJvZmlsZSB0 byBub24tdm9sYXRpbGUgbWVtb3J5LCBvciBkZWxldGUgaXQgZnJvbSBub24tdm9sYXRpbGUNCj4+ bWVtb3J5Lg0KPj4tDQo+Pi0gIEBwYXJhbVtpbl0gIFVzZXIgICAgICAgICBQb2ludCB0byB0aGUg dXNlciBwcm9maWxlDQo+Pi0gIEBwYXJhbVtpbl0gIERlbGV0ZSAgICAgICBJZiBUUlVFLCBkZWxl dGUgdGhlIGZvdW5kIHVzZXIgcHJvZmlsZS4NCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAg IElmIEZBTFNFLCBzYXZlIHRoZSB1c2VyIHByb2ZpbGUuDQo+Pi0gIEByZXR2YWwgRUZJX1NVQ0NF U1MgICAgICBTYXZlIG9yIGRlbGV0ZSB1c2VyIHByb2ZpbGUgc3VjY2Vzc2Z1bGx5Lg0KPj4tICBA cmV0dmFsIE90aGVycyAgICAgICAgICAgRmFpbCB0byBjaGFuZ2UgdGhlIHByb2ZpbGUuDQo+Pi0N Cj4+LSoqLw0KPj4tRUZJX1NUQVRVUw0KPj4tU2F2ZU52VXNlclByb2ZpbGUgKA0KPj4tICBJTiAg VVNFUl9QUk9GSUxFX0VOVFJZICAgICAgICAgICAgICAgICAgICAgICAgKlVzZXIsDQo+Pi0gIElO ICBCT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWxldGUNCj4+LSAg KQ0KPj4tew0KPj4tICBFRklfU1RBVFVTICBTdGF0dXM7DQo+Pi0NCj4+LSAgLy8NCj4+LSAgLy8g Q2hlY2sgdXNlciBwcm9maWxlIGVudHJ5Lg0KPj4tICAvLw0KPj4tICBTdGF0dXMgPSBGaW5kVXNl clByb2ZpbGUgKCZVc2VyLCBGQUxTRSwgTlVMTCk7DQo+Pi0gIGlmIChFRklfRVJST1IgKFN0YXR1 cykpIHsNCj4+LSAgICByZXR1cm4gU3RhdHVzOw0KPj4tICB9DQo+Pi0NCj4+LSAgLy8NCj4+LSAg Ly8gU2F2ZSB0aGUgdXNlciBwcm9maWxlIHRvIG5vbi12b2xhdGlsZSBtZW1vcnkuDQo+Pi0gIC8v DQo+Pi0gIFN0YXR1cyA9IGdSVC0+U2V0VmFyaWFibGUgKA0KPj4tICAgICAgICAgICAgICAgICAg VXNlci0+VXNlclZhck5hbWUsDQo+Pi0gICAgICAgICAgICAgICAgICAmZ1VzZXJJZGVudGlmeU1h bmFnZXJHdWlkLA0KPj4tICAgICAgICAgICAgICAgICAgRUZJX1ZBUklBQkxFX05PTl9WT0xBVElM RSB8DQo+PkVGSV9WQVJJQUJMRV9CT09UU0VSVklDRV9BQ0NFU1MsDQo+Pi0gICAgICAgICAgICAg ICAgICBEZWxldGUgPyAwIDogVXNlci0+VXNlclByb2ZpbGVTaXplLA0KPj4tICAgICAgICAgICAg ICAgICAgVXNlci0+UHJvZmlsZUluZm8NCj4+LSAgICAgICAgICAgICAgICAgICk7DQo+Pi0gIHJl dHVybiBTdGF0dXM7DQo+Pi19DQo+Pi0NCj4+LS8qKg0KPj4tICBBZGQgb25lIG5ldyB1c2VyIGlu Zm8gaW50byB0aGUgdXNlcidzIHByb2ZpbGUuDQo+Pi0NCj4+LSAgQHBhcmFtW2luXSAgIFVzZXIg ICAgICAgIHBvaW50IHRvIHRoZSB1c2VyIHByb2ZpbGUNCj4+LSAgQHBhcmFtW2luXSAgIEluZm8g ICAgICAgIFBvaW50cyB0byB0aGUgdXNlciBpbmZvcm1hdGlvbiBwYXlsb2FkLg0KPj4tICBAcGFy YW1baW5dICAgSW5mb1NpemUgICAgVGhlIHNpemUgb2YgdGhlIHVzZXIgaW5mb3JtYXRpb24gcGF5 bG9hZCwgaW4gYnl0ZXMuDQo+Pi0gIEBwYXJhbVtvdXRdICBVc2VySW5mbyAgICBQb2ludCB0byB0 aGUgbmV3IGluZm8gaW4gdXNlciBwcm9maWxlDQo+Pi0gIEBwYXJhbVtpbl0gICBTYXZlICAgICAg ICBJZiBUUlVFLCBzYXZlIHRoZSBwcm9maWxlIHRvIE5WIGZsYXNoLg0KPj4tICAgICAgICAgICAg ICAgICAgICAgICAgICAgSWYgRkFMU0UsIGRvbid0IG5lZWQgdG8gc2F2ZSB0aGUgcHJvZmlsZSB0 byBOViBmbGFzaC4NCj4+LQ0KPj4tICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgQWRkIHVzZXIg aW5mbyB0byB1c2VyIHByb2ZpbGUgc3VjY2Vzc2Z1bGx5Lg0KPj4tICBAcmV0dmFsIE90aGVycyAg ICAgICAgICAgRmFpbCB0byBhZGQgdXNlciBpbmZvIHRvIHVzZXIgcHJvZmlsZS4NCj4+LQ0KPj4t KiovDQo+Pi1FRklfU1RBVFVTDQo+Pi1BZGRVc2VySW5mbyAoDQo+Pi0gIElOICBVU0VSX1BST0ZJ TEVfRU5UUlkgICAgICAgICAgICAgICAgICAgICAgICAqVXNlciwNCj4+LSAgSU4gIFVJTlQ4ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpJbmZvLA0KPj4tICBJTiAgVUlOVE4g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5mb1NpemUsDQo+Pi0gIE9VVCBF RklfVVNFUl9JTkZPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKlVzZXJJbmZvLCBPUFRJ T05BTA0KPj4tICBJTiAgQk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg U2F2ZQ0KPj4tICApDQo+Pi17DQo+Pi0gIEVGSV9TVEFUVVMgIFN0YXR1czsNCj4+LQ0KPj4tICBp ZiAoKEluZm8gPT0gTlVMTCkgfHwgKFVzZXIgPT0gTlVMTCkpIHsNCj4+LSAgICByZXR1cm4gRUZJ X0lOVkFMSURfUEFSQU1FVEVSOw0KPj4tICB9DQo+Pi0NCj4+LSAgLy8NCj4+LSAgLy8gQ2hlY2sg dXNlciBwcm9maWxlIGhhbmRsZS4NCj4+LSAgLy8NCj4+LSAgU3RhdHVzID0gRmluZFVzZXJQcm9m aWxlICgmVXNlciwgRkFMU0UsIE5VTEwpOw0KPj4tICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7 DQo+Pi0gICAgcmV0dXJuIFN0YXR1czsNCj4+LSAgfQ0KPj4tDQo+Pi0gIC8vDQo+Pi0gIC8vIENo ZWNrIHVzZXIgaW5mb3JtYXRpb24gbWVtb3J5IHNpemUuDQo+Pi0gIC8vDQo+Pi0gIGlmIChVc2Vy LT5NYXhQcm9maWxlU2l6ZSAtIFVzZXItPlVzZXJQcm9maWxlU2l6ZSA8IEFMSUdOX1ZBUklBQkxF DQo+PihJbmZvU2l6ZSkpIHsNCj4+LSAgICBpZiAoIUV4cGFuZFVzZXJQcm9maWxlIChVc2VyLCBB TElHTl9WQVJJQUJMRSAoSW5mb1NpemUpKSkgew0KPj4tICAgICAgcmV0dXJuIEVGSV9PVVRfT0Zf UkVTT1VSQ0VTOw0KPj4tICAgIH0NCj4+LSAgfQ0KPj4tDQo+Pi0gIC8vDQo+Pi0gIC8vIEFkZCBu ZXcgdXNlciBpbmZvcm1hdGlvbi4NCj4+LSAgLy8NCj4+LSAgQ29weU1lbSAoVXNlci0+UHJvZmls ZUluZm8gKyBVc2VyLT5Vc2VyUHJvZmlsZVNpemUsIEluZm8sIEluZm9TaXplKTsNCj4+LSAgaWYg KFVzZXJJbmZvICE9IE5VTEwpIHsNCj4+LSAgICAqVXNlckluZm8gPSAoRUZJX1VTRVJfSU5GTyAq KSAoVXNlci0+UHJvZmlsZUluZm8gKyBVc2VyLQ0KPj4+VXNlclByb2ZpbGVTaXplKTsNCj4+LSAg fQ0KPj4tICBVc2VyLT5Vc2VyUHJvZmlsZVNpemUgKz0gQUxJR05fVkFSSUFCTEUgKEluZm9TaXpl KTsNCj4+LQ0KPj4tICAvLw0KPj4tICAvLyBTYXZlIHVzZXIgcHJvZmlsZSBpbmZvcm1hdGlvbi4N Cj4+LSAgLy8NCj4+LSAgaWYgKFNhdmUpIHsNCj4+LSAgICBTdGF0dXMgPSBTYXZlTnZVc2VyUHJv ZmlsZSAoVXNlciwgRkFMU0UpOw0KPj4tICB9DQo+Pi0NCj4+LSAgcmV0dXJuIFN0YXR1czsNCj4+ LX0NCj4+LQ0KPj4tDQo+Pi0vKioNCj4+LSAgR2V0IHRoZSB1c2VyIGluZm8gZnJvbSB0aGUgc3Bl Y2lmaWVkIHVzZXIgaW5mbyBoYW5kbGUuDQo+Pi0NCj4+LSAgQHBhcmFtW2luXSAgICAgIFVzZXIg ICAgICAgICAgICBQb2ludCB0byB0aGUgdXNlciBwcm9maWxlLg0KPj4tICBAcGFyYW1baW5dICAg ICAgVXNlckluZm8gICAgICAgIFBvaW50IHRvIHRoZSB1c2VyIGluZm9ybWF0aW9uIHJlY29yZCB0 byBnZXQuDQo+Pi0gIEBwYXJhbVtvdXRdICAgICBJbmZvICAgICAgICAgICAgT24gZW50cnksIHBv aW50cyB0byBhIGJ1ZmZlciBvZiBhdCBsZWFzdCAqSW5mb1NpemUNCj4+Ynl0ZXMuDQo+Pi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT24gZXhpdCwgaG9sZHMgdGhlIHVzZXIgaW5m b3JtYXRpb24uDQo+Pi0gIEBwYXJhbVtpbiwgb3V0XSBJbmZvU2l6ZSAgICAgICAgT24gZW50cnks IHBvaW50cyB0byB0aGUgc2l6ZSBvZiBJbmZvLg0KPj4tICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIE9uIHJldHVybiwgcG9pbnRzIHRvIHRoZSBzaXplIG9mIHRoZSB1c2VyIGluZm9y bWF0aW9uLg0KPj4tICBAcGFyYW1baW5dICAgICAgQ2hrUmlnaHQgICAgICAgIElmIFRSVUUsIGNo ZWNrIHRoZSB1c2VyIGluZm8gYXR0cmlidXRlLg0KPj4tICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIElmIEZBTFNFLCBkb24ndCBjaGVjayB0aGUgdXNlciBpbmZvIGF0dHJpYnV0ZS4N Cj4+LQ0KPj4tDQo+Pi0gIEByZXR2YWwgRUZJX0FDQ0VTU19ERU5JRUQgICAgICAgVGhlIGluZm9y bWF0aW9uIGNhbm5vdCBiZSBhY2Nlc3NlZCBieQ0KPnRoZQ0KPj5jdXJyZW50IHVzZXIuDQo+Pi0g IEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICAgSW5mb1NpemUgaXMgTlVMTCBvciBVc2Vy SW5mbyBpcyBOVUxMLg0KPj4tICBAcmV0dmFsIEVGSV9CVUZGRVJfVE9PX1NNQUxMICAgIFRoZSBu dW1iZXIgb2YgYnl0ZXMgc3BlY2lmaWVkIGJ5DQo+PipJbmZvU2l6ZSBpcyB0b28gc21hbGwgdG8g aG9sZCB0aGUNCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5lZCBk YXRhLiBUaGUgYWN0dWFsIHNpemUgcmVxdWlyZWQgaXMgcmV0dXJuZWQgaW4NCj4+KkluZm9TaXpl Lg0KPj4tICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgIEluZm9ybWF0aW9uIHJldHVy bmVkIHN1Y2Nlc3NmdWxseS4NCj4+LQ0KPj4tKiovDQo+Pi1FRklfU1RBVFVTDQo+Pi1HZXRVc2Vy SW5mbyAoDQo+Pi0gIElOICAgICAgICBVU0VSX1BST0ZJTEVfRU5UUlkgICAgICAgICAgICAgICAg ICAqVXNlciwNCj4+LSAgSU4gICAgICAgIEVGSV9VU0VSX0lORk8gICAgICAgICAgICAgICAgICAg ICAgICpVc2VySW5mbywNCj4+LSAgT1VUICAgICAgIEVGSV9VU0VSX0lORk8gICAgICAgICAgICAg ICAgICAgICAgICpJbmZvLA0KPj4tICBJTiBPVVQgICAgVUlOVE4gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKkluZm9TaXplLA0KPj4tICBJTiAgICAgICAgQk9PTEVBTiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgQ2hrUmlnaHQNCj4+LSAgKQ0KPj4tew0KPj4tICBFRklfU1RBVFVT ICBTdGF0dXM7DQo+Pi0NCj4+LSAgaWYgKChJbmZvU2l6ZSA9PSBOVUxMKSB8fCAoVXNlckluZm8g PT0gTlVMTCkpIHsNCj4+LSAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPj4tICB9 DQo+Pi0NCj4+LSAgaWYgKCgqSW5mb1NpemUgIT0gMCkgJiYgKEluZm8gPT0gTlVMTCkpIHsNCj4+ LSAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPj4tICB9DQo+Pi0NCj4+LSAgLy8N Cj4+LSAgLy8gRmluZCB0aGUgdXNlciBpbmZvcm1hdGlvbiB0byBnZXQuDQo+Pi0gIC8vDQo+Pi0g IFN0YXR1cyA9IEZpbmRVc2VySW5mbyAoVXNlciwgJlVzZXJJbmZvLCBGQUxTRSwgTlVMTCk7DQo+ Pi0gIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4+LSAgICByZXR1cm4gU3RhdHVzOw0KPj4t ICB9DQo+Pi0NCj4+LSAgLy8NCj4+LSAgLy8gQ2hlY2sgaW5mb3JtYXRpb24gYXR0cmlidXRlcy4N Cj4+LSAgLy8NCj4+LSAgaWYgKENoa1JpZ2h0KSB7DQo+Pi0gICAgc3dpdGNoIChVc2VySW5mby0+ SW5mb0F0dHJpYnMgJiBFRklfVVNFUl9JTkZPX0FDQ0VTUykgew0KPj4tICAgIGNhc2UgRUZJX1VT RVJfSU5GT19QUklWQVRFOg0KPj4tICAgIGNhc2UgRUZJX1VTRVJfSU5GT19QUk9URUNURUQ6DQo+ Pi0gICAgICBpZiAoVXNlciAhPSBtQ3VycmVudFVzZXIpIHsNCj4+LSAgICAgICAgcmV0dXJuIEVG SV9BQ0NFU1NfREVOSUVEOw0KPj4tICAgICAgfQ0KPj4tICAgICAgYnJlYWs7DQo+Pi0NCj4+LSAg ICBjYXNlIEVGSV9VU0VSX0lORk9fUFVCTElDOg0KPj4tICAgICAgYnJlYWs7DQo+Pi0NCj4+LSAg ICBkZWZhdWx0Og0KPj4tICAgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4+LSAg ICAgIGJyZWFrOw0KPj4tICAgIH0NCj4+LSAgfQ0KPj4tDQo+Pi0gIC8vDQo+Pi0gIC8vIEdldCB1 c2VyIGluZm9ybWF0aW9uLg0KPj4tICAvLw0KPj4tICBpZiAoVXNlckluZm8tPkluZm9TaXplID4g KkluZm9TaXplKSB7DQo+Pi0gICAgKkluZm9TaXplID0gVXNlckluZm8tPkluZm9TaXplOw0KPj4t ICAgIHJldHVybiBFRklfQlVGRkVSX1RPT19TTUFMTDsNCj4+LSAgfQ0KPj4tDQo+Pi0gICpJbmZv U2l6ZSA9IFVzZXJJbmZvLT5JbmZvU2l6ZTsNCj4+LSAgaWYgKEluZm8gIT0gTlVMTCkgew0KPj4t ICAgIENvcHlNZW0gKEluZm8sIFVzZXJJbmZvLCAqSW5mb1NpemUpOw0KPj4tICB9DQo+Pi0NCj4+ LSAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPj4tfQ0KPj4tDQo+Pi0NCj4+LS8qKg0KPj4tICBEZWxl dGUgdGhlIHNwZWNpZmllZCB1c2VyIGluZm9ybWF0aW9uIGZyb20gdXNlciBwcm9maWxlLg0KPj4t DQo+Pi0gIEBwYXJhbVtpbl0gIFVzZXIgICAgICAgIFBvaW50IHRvIHRoZSB1c2VyIHByb2ZpbGUu DQo+Pi0gIEBwYXJhbVtpbl0gIEluZm8gICAgICAgIFBvaW50IHRvIHRoZSB1c2VyIGluZm9ybWF0 aW9uIHJlY29yZCB0byBkZWxldGUuDQo+Pi0gIEBwYXJhbVtpbl0gIFNhdmUgICAgICAgIElmIFRS VUUsIHNhdmUgdGhlIHByb2ZpbGUgdG8gTlYgZmxhc2guDQo+Pi0gICAgICAgICAgICAgICAgICAg ICAgICAgIElmIEZBTFNFLCBkb24ndCBuZWVkIHRvIHNhdmUgdGhlIHByb2ZpbGUgdG8gTlYgZmxh c2guDQo+Pi0NCj4+LSAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgRGVsZXRlIHVzZXIgaW5mbyBm cm9tIHVzZXIgcHJvZmlsZSBzdWNjZXNzZnVsbHkuDQo+Pi0gIEByZXR2YWwgT3RoZXJzICAgICAg ICAgIEZhaWwgdG8gZGVsZXRlIHVzZXIgaW5mbyBmcm9tIHVzZXIgcHJvZmlsZS4NCj4+LQ0KPj4t KiovDQo+Pi1FRklfU1RBVFVTDQo+Pi1EZWxVc2VySW5mbyAoDQo+Pi0gIElOICBVU0VSX1BST0ZJ TEVfRU5UUlkgICAgICAgICAgICAgICAgICAgICAgICAqVXNlciwNCj4+LSAgSU4gIEVGSV9VU0VS X0lORk8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICpJbmZvLA0KPj4tICBJTiAgQk9PTEVB TiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2F2ZQ0KPj4tICApDQo+Pi17DQo+ Pi0gIEVGSV9TVEFUVVMgIFN0YXR1czsNCj4+LSAgVUlOVE4gICAgICAgT2Zmc2V0Ow0KPj4tICBV SU5UTiAgICAgICBOZXh0T2Zmc2V0Ow0KPj4tDQo+Pi0gIC8vDQo+Pi0gIC8vIENoZWNrIHVzZXIg aW5mb3JtYXRpb24gaGFuZGxlLg0KPj4tICAvLw0KPj4tICBTdGF0dXMgPSBGaW5kVXNlckluZm8g KFVzZXIsICZJbmZvLCBGQUxTRSwgJk9mZnNldCk7DQo+Pi0gIGlmIChFRklfRVJST1IgKFN0YXR1 cykpIHsNCj4+LSAgICByZXR1cm4gU3RhdHVzOw0KPj4tICB9DQo+Pi0NCj4+LSAgaWYgKEluZm8t PkluZm9UeXBlID09IEVGSV9VU0VSX0lORk9fSURFTlRJRklFUl9SRUNPUkQpIHsNCj4+LSAgICBy ZXR1cm4gRUZJX0FDQ0VTU19ERU5JRUQ7DQo+Pi0gIH0NCj4+LQ0KPj4tICAvLw0KPj4tICAvLyBE ZWxldGUgdGhlIHNwZWNpZmllZCB1c2VyIGluZm9ybWF0aW9uLg0KPj4tICAvLw0KPj4tICBOZXh0 T2Zmc2V0ID0gT2Zmc2V0ICsgQUxJR05fVkFSSUFCTEUgKEluZm8tPkluZm9TaXplKTsNCj4+LSAg VXNlci0+VXNlclByb2ZpbGVTaXplIC09IEFMSUdOX1ZBUklBQkxFIChJbmZvLT5JbmZvU2l6ZSk7 DQo+Pi0gIGlmIChPZmZzZXQgPCBVc2VyLT5Vc2VyUHJvZmlsZVNpemUpIHsNCj4+LSAgICBDb3B5 TWVtIChVc2VyLT5Qcm9maWxlSW5mbyArIE9mZnNldCwgVXNlci0+UHJvZmlsZUluZm8gKyBOZXh0 T2Zmc2V0LA0KPj5Vc2VyLT5Vc2VyUHJvZmlsZVNpemUgLSBPZmZzZXQpOw0KPj4tICB9DQo+Pi0N Cj4+LSAgaWYgKFNhdmUpIHsNCj4+LSAgICBTdGF0dXMgPSBTYXZlTnZVc2VyUHJvZmlsZSAoVXNl ciwgRkFMU0UpOw0KPj4tICB9DQo+Pi0NCj4+LSAgcmV0dXJuIFN0YXR1czsNCj4+LX0NCj4+LQ0K Pj4tDQo+Pi0vKioNCj4+LSAgQWRkIG9yIHVwZGF0ZSB1c2VyIGluZm9ybWF0aW9uLg0KPj4tDQo+ Pi0gIEBwYXJhbVtpbl0gICAgICBVc2VyICAgICAgICAgICBQb2ludCB0byB0aGUgdXNlciBwcm9m aWxlLg0KPj4tICBAcGFyYW1baW4sIG91dF0gVXNlckluZm8gICAgICAgT24gZW50cnksIHBvaW50 cyB0byB0aGUgdXNlciBpbmZvcm1hdGlvbiB0bw0KPj5tb2RpZnksDQo+Pi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBvciBOVUxMIHRvIGFkZCBhIG5ldyBVc2VySW5mby4NCj4+LSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9uIHJldHVybiwgcG9pbnRzIHRvIHRoZSBt b2RpZmllZCB1c2VyIGluZm9ybWF0aW9uLg0KPj4tICBAcGFyYW1baW5dICAgICAgSW5mbyAgICAg ICAgICAgUG9pbnRzIHRvIHRoZSBuZXcgdXNlciBpbmZvcm1hdGlvbi4NCj4+LSAgQHBhcmFtW2lu XSAgICAgIEluZm9TaXplICAgICAgIFRoZSBzaXplIG9mIEluZm8saW4gYnl0ZXMuDQo+Pi0NCj4+ LSAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgIFVzZXJJbmZvIGlzIE5VTEwgb3IgSW5m byBpcyBOVUxMLg0KPj4tICBAcmV0dmFsIEVGSV9BQ0NFU1NfREVOSUVEICAgICAgVGhlIHJlY29y ZCBpcyBleGNsdXNpdmUuDQo+Pi0gIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICBVc2Vy IGluZm9ybWF0aW9uIHdhcyBzdWNjZXNzZnVsbHkNCj4+Y2hhbmdlZC9hZGRlZC4NCj4+LQ0KPj4t KiovDQo+Pi1FRklfU1RBVFVTDQo+Pi1Nb2RpZnlVc2VySW5mbyAoDQo+Pi0gIElOICAgICAgICBV U0VSX1BST0ZJTEVfRU5UUlkgICAgICAgICAgICAgICAgICAqVXNlciwNCj4+LSAgSU4gT1VUICAg IEVGSV9VU0VSX0lORk8gICAgICAgICAgICAgICAgICAgICAgICoqVXNlckluZm8sDQo+Pi0gIElO IENPTlNUICBFRklfVVNFUl9JTkZPICAgICAgICAgICAgICAgICAgICAgICAqSW5mbywNCj4+LSAg SU4gICAgICAgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZm9TaXplDQo+ Pi0gICkNCj4+LXsNCj4+LSAgRUZJX1NUQVRVUyAgICBTdGF0dXM7DQo+Pi0gIFVJTlROICAgICAg ICAgUGF5bG9hZExlbjsNCj4+LSAgRUZJX1VTRVJfSU5GTyAqT2xkSW5mbzsNCj4+LQ0KPj4tICBp ZiAoKFVzZXJJbmZvID09IE5VTEwpIHx8IChJbmZvID09IE5VTEwpKSB7DQo+Pi0gICAgcmV0dXJu IEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4+LSAgfQ0KPj4tDQo+Pi0gIGlmIChJbmZvU2l6ZSA8 IHNpemVvZiAoRUZJX1VTRVJfSU5GTykgfHwgSW5mb1NpemUgIT0gSW5mby0+SW5mb1NpemUpIHsN Cj4+LSAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPj4tICB9DQo+Pi0NCj4+LSAg Ly8NCj4+LSAgLy8gQ2hlY2sgdXNlciBpbmZvcm1hdGlvbi4NCj4+LSAgLy8NCj4+LSAgaWYgKElu Zm8tPkluZm9UeXBlID09IEVGSV9VU0VSX0lORk9fSURFTlRJRklFUl9SRUNPUkQpIHsNCj4+LSAg ICByZXR1cm4gRUZJX0FDQ0VTU19ERU5JRUQ7DQo+Pi0gIH0NCj4+LQ0KPj4tICBpZiAoIUNoZWNr VXNlckluZm8gKEluZm8pKSB7DQo+Pi0gICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsN Cj4+LSAgfQ0KPj4tDQo+Pi0NCj4+LSAgaWYgKCpVc2VySW5mbyA9PSBOVUxMKSB7DQo+Pi0gICAg Ly8NCj4+LSAgICAvLyBBZGQgbmV3IHVzZXIgaW5mb3JtYXRpb24uDQo+Pi0gICAgLy8NCj4+LSAg ICBPbGRJbmZvID0gTlVMTDsNCj4+LSAgICBkbyB7DQo+Pi0gICAgICBTdGF0dXMgPSBGaW5kVXNl ckluZm9CeVR5cGUgKFVzZXIsICZPbGRJbmZvLCBJbmZvLT5JbmZvVHlwZSk7DQo+Pi0gICAgICBp ZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+Pi0gICAgICAgIGJyZWFrOw0KPj4tICAgICAgfQ0K Pj4tICAgICAgQVNTRVJUIChPbGRJbmZvICE9IE5VTEwpOw0KPj4tDQo+Pi0gICAgICBpZiAoKChP bGRJbmZvLT5JbmZvQXR0cmlicyAmIEVGSV9VU0VSX0lORk9fRVhDTFVTSVZFKSAhPSAwKSB8fA0K Pj4tICAgICAgICAgICAoKEluZm8tPkluZm9BdHRyaWJzICYgRUZJX1VTRVJfSU5GT19FWENMVVNJ VkUpICE9IDApKSB7DQo+Pi0gICAgICAgIC8vDQo+Pi0gICAgICAgIC8vICBTYW1lIHR5cGUgY2Fu IG5vdCBjby1leGlzdCBmb3IgZXhjbHVzaXZlIGluZm9ybWF0aW9uLg0KPj4tICAgICAgICAvLw0K Pj4tICAgICAgICByZXR1cm4gRUZJX0FDQ0VTU19ERU5JRUQ7DQo+Pi0gICAgICB9DQo+Pi0NCj4+ LSAgICAgIC8vDQo+Pi0gICAgICAvLyBDaGVjayB3aGV0aGVyIGl0IGV4aXN0cyBpbiBEQi4NCj4+ LSAgICAgIC8vDQo+Pi0gICAgICBpZiAoSW5mby0+SW5mb1NpemUgIT0gT2xkSW5mby0+SW5mb1Np emUpIHsNCj4+LSAgICAgICAgY29udGludWU7DQo+Pi0gICAgICB9DQo+Pi0NCj4+LSAgICAgIGlm ICghQ29tcGFyZUd1aWQgKCZPbGRJbmZvLT5DcmVkZW50aWFsLCAmSW5mby0+Q3JlZGVudGlhbCkp IHsNCj4+LSAgICAgICAgY29udGludWU7DQo+Pi0gICAgICB9DQo+Pi0NCj4+LSAgICAgIFBheWxv YWRMZW4gPSBJbmZvLT5JbmZvU2l6ZSAtIHNpemVvZiAoRUZJX1VTRVJfSU5GTyk7DQo+Pi0gICAg ICBpZiAoUGF5bG9hZExlbiA9PSAwKSB7DQo+Pi0gICAgICAgIGNvbnRpbnVlOw0KPj4tICAgICAg fQ0KPj4tDQo+Pi0gICAgICBpZiAoQ29tcGFyZU1lbSAoKFVJTlQ4ICopKE9sZEluZm8gKyAxKSwg KFVJTlQ4ICopKEluZm8gKyAxKSwNCj4+UGF5bG9hZExlbikgIT0gMCkgew0KPj4tICAgICAgICBj b250aW51ZTsNCj4+LSAgICAgIH0NCj4+LQ0KPj4tICAgICAgLy8NCj4+LSAgICAgIC8vIFllcy4g VGhlIG5ldyBpbmZvIGlzIGFzIHNhbWUgYXMgdGhlIG9uZSBpbiBwcm9maWxlLg0KPj4tICAgICAg Ly8NCj4+LSAgICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4+LSAgICB9IHdoaWxlICghRUZJX0VS Uk9SIChTdGF0dXMpKTsNCj4+LQ0KPj4tICAgIFN0YXR1cyA9IEFkZFVzZXJJbmZvIChVc2VyLCAo VUlOVDggKikgSW5mbywgSW5mb1NpemUsIFVzZXJJbmZvLCBUUlVFKTsNCj4+LSAgICByZXR1cm4g U3RhdHVzOw0KPj4tICB9DQo+Pi0NCj4+LSAgLy8NCj4+LSAgLy8gTW9kaWZ5IGV4aXN0aW5nIHVz ZXIgaW5mb3JtYXRpb24uDQo+Pi0gIC8vDQo+Pi0gIE9sZEluZm8gPSAqVXNlckluZm87DQo+Pi0g IGlmIChPbGRJbmZvLT5JbmZvVHlwZSAhPSBJbmZvLT5JbmZvVHlwZSkgew0KPj4tICAgIHJldHVy biBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+Pi0gIH0NCj4+LQ0KPj4tICBpZiAoKChJbmZvLT5J bmZvQXR0cmlicyAmIEVGSV9VU0VSX0lORk9fRVhDTFVTSVZFKSAhPSAwKSAmJg0KPj4tICAgICAg IChPbGRJbmZvLT5JbmZvQXR0cmlicyAmIEVGSV9VU0VSX0lORk9fRVhDTFVTSVZFKSA9PSAwKSB7 DQo+Pi0gICAgLy8NCj4+LSAgICAvLyBUcnkgdG8gYWRkIGV4Y2x1c2l2ZSBhdHRyaWIgaW4gbmV3 IGluZm8uDQo+Pi0gICAgLy8gQ2hlY2sgd2hldGhlciB0aGVyZSBpcyBhbm90aGVyIGluZm9ybWF0 aW9uIHdpdGggdGhlIHNhbWUgdHlwZSBpbg0KPj5wcm9maWxlLg0KPj4tICAgIC8vDQo+Pi0gICAg T2xkSW5mbyA9IE5VTEw7DQo+Pi0gICAgZG8gew0KPj4tICAgICAgU3RhdHVzID0gRmluZFVzZXJJ bmZvQnlUeXBlIChVc2VyLCAmT2xkSW5mbywgSW5mby0+SW5mb1R5cGUpOw0KPj4tICAgICAgaWYg KEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPj4tICAgICAgICBicmVhazsNCj4+LSAgICAgIH0NCj4+ LSAgICAgIGlmIChPbGRJbmZvICE9ICpVc2VySW5mbykgew0KPj4tICAgICAgICAvLw0KPj4tICAg ICAgICAvLyBUaGVyZSBpcyBhbm90aGVyIGluZm9ybWF0aW9uIHdpdGggdGhlIHNhbWUgdHlwZSBp biBwcm9maWxlLg0KPj4tICAgICAgICAvLyBUaGVyZWZvcmUsIGNhbid0IG1vZGlmeSBleGlzdGlu ZyB1c2VyIGluZm9ybWF0aW9uIHRvIGFkZCBleGNsdXNpdmUNCj4+YXR0cmlidXRlLg0KPj4tICAg ICAgICAvLw0KPj4tICAgICAgICByZXR1cm4gRUZJX0FDQ0VTU19ERU5JRUQ7DQo+Pi0gICAgICB9 DQo+Pi0gICAgfSB3aGlsZSAoVFJVRSk7DQo+Pi0gIH0NCj4+LQ0KPj4tICBTdGF0dXMgPSBEZWxV c2VySW5mbyAoVXNlciwgKlVzZXJJbmZvLCBGQUxTRSk7DQo+Pi0gIGlmIChFRklfRVJST1IgKFN0 YXR1cykpIHsNCj4+LSAgICByZXR1cm4gU3RhdHVzOw0KPj4tICB9DQo+Pi0NCj4+LSAgcmV0dXJu IEFkZFVzZXJJbmZvIChVc2VyLCAoVUlOVDggKikgSW5mbywgSW5mb1NpemUsIFVzZXJJbmZvLCBU UlVFKTsNCj4+LX0NCj4+LQ0KPj4tDQo+Pi0vKioNCj4+LSAgRGVsZXRlIHRoZSB1c2VyIHByb2Zp bGUgZnJvbSBub24tdm9sYXRpbGUgbWVtb3J5IGFuZCBkYXRhYmFzZS4NCj4+LQ0KPj4tICBAcGFy YW1baW5dICBVc2VyICAgICAgICAgICAgICBQb2ludHMgdG8gdGhlIHVzZXIgcHJvZmlsZS4NCj4+ LQ0KPj4tICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgRGVsZXRlIHVzZXIgZnJvbSB0aGUgdXNl ciBwcm9maWxlIHN1Y2Nlc3NmdWxseS4NCj4+LSAgQHJldHZhbCBPdGhlcnMgICAgICAgICAgIEZh aWwgdG8gZGVsZXRlIHVzZXIgZnJvbSB1c2VyIHByb2ZpbGUNCj4+LQ0KPj4tKiovDQo+Pi1FRklf U1RBVFVTDQo+Pi1EZWxVc2VyUHJvZmlsZSAoDQo+Pi0gIElOICBVU0VSX1BST0ZJTEVfRU5UUlkg ICAgICAgICAgICAgICAgICAgICAgICAqVXNlcg0KPj4tICApDQo+Pi17DQo+Pi0gIEVGSV9TVEFU VVMgICAgICAgICAgU3RhdHVzOw0KPj4tICBVSU5UTiAgICAgICAgICAgICAgIEluZGV4Ow0KPj4t DQo+Pi0gIC8vDQo+Pi0gIC8vIENoZWNrIHdoZXRoZXIgaXQgaXMgaW4gdGhlIHVzZXIgcHJvZmls ZSBkYXRhYmFzZS4NCj4+LSAgLy8NCj4+LSAgU3RhdHVzID0gRmluZFVzZXJQcm9maWxlICgmVXNl ciwgRkFMU0UsICZJbmRleCk7DQo+Pi0gIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4+LSAg ICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPj4tICB9DQo+Pi0NCj4+LSAgLy8NCj4+ LSAgLy8gQ2hlY2sgd2hldGhlciBpdCBpcyB0aGUgY3VycmVudCB1c2VyLg0KPj4tICAvLw0KPj4t ICBpZiAoVXNlciA9PSBtQ3VycmVudFVzZXIpIHsNCj4+LSAgICByZXR1cm4gRUZJX0FDQ0VTU19E RU5JRUQ7DQo+Pi0gIH0NCj4+LQ0KPj4tICAvLw0KPj4tICAvLyBEZWxldGUgdXNlciBwcm9maWxl IGZyb20gdGhlIG5vbi12b2xhdGlsZSBtZW1vcnkuDQo+Pi0gIC8vDQo+Pi0gIFN0YXR1cyAgICA9 IFNhdmVOdlVzZXJQcm9maWxlIChtVXNlclByb2ZpbGVEYi0NCj4+PlVzZXJQcm9maWxlW21Vc2Vy UHJvZmlsZURiLT5Vc2VyUHJvZmlsZU51bSAtIDFdLCBUUlVFKTsNCj4+LSAgaWYgKEVGSV9FUlJP UiAoU3RhdHVzKSkgew0KPj4tICAgIHJldHVybiBTdGF0dXM7DQo+Pi0gIH0NCj4+LSAgbVVzZXJQ cm9maWxlRGItPlVzZXJQcm9maWxlTnVtLS07DQo+Pi0NCj4+LSAgLy8NCj4+LSAgLy8gTW9kaWZ5 IHVzZXIgcHJvZmlsZSBkYXRhYmFzZS4NCj4+LSAgLy8NCj4+LSAgaWYgKEluZGV4ICE9IG1Vc2Vy UHJvZmlsZURiLT5Vc2VyUHJvZmlsZU51bSkgew0KPj4tICAgIG1Vc2VyUHJvZmlsZURiLT5Vc2Vy UHJvZmlsZVtJbmRleF0gPSBtVXNlclByb2ZpbGVEYi0NCj4+PlVzZXJQcm9maWxlW21Vc2VyUHJv ZmlsZURiLT5Vc2VyUHJvZmlsZU51bV07DQo+Pi0gICAgQ29weU1lbSAoDQo+Pi0gICAgICAoKFVT RVJfUFJPRklMRV9FTlRSWSAqKSBtVXNlclByb2ZpbGVEYi0+VXNlclByb2ZpbGVbSW5kZXhdKS0N Cj4+PlVzZXJWYXJOYW1lLA0KPj4tICAgICAgVXNlci0+VXNlclZhck5hbWUsDQo+Pi0gICAgICBz aXplb2YgKFVzZXItPlVzZXJWYXJOYW1lKQ0KPj4tICAgICAgKTsNCj4+LSAgICBTdGF0dXMgPSBT YXZlTnZVc2VyUHJvZmlsZSAobVVzZXJQcm9maWxlRGItPlVzZXJQcm9maWxlW0luZGV4XSwgRkFM U0UpOw0KPj4tICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4+LSAgICAgIHJldHVybiBT dGF0dXM7DQo+Pi0gICAgfQ0KPj4tICB9DQo+Pi0gIC8vDQo+Pi0gIC8vIERlbGV0ZSB1c2VyIHBy b2ZpbGUgaW5mb3JtYXRpb24uDQo+Pi0gIC8vDQo+Pi0gIGlmIChVc2VyLT5Qcm9maWxlSW5mbyAh PSBOVUxMKSB7DQo+Pi0gICAgRnJlZVBvb2wgKFVzZXItPlByb2ZpbGVJbmZvKTsNCj4+LSAgfQ0K Pj4tDQo+Pi0gIEZyZWVQb29sIChVc2VyKTsNCj4+LSAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPj4t fQ0KPj4tDQo+Pi0NCj4+LS8qKg0KPj4tICBBZGQgdXNlciBwcm9maWxlIHRvIHVzZXIgcHJvZmls ZSBkYXRhYmFzZS4NCj4+LQ0KPj4tICBAcGFyYW1bb3V0XSAgIFVzZXJQcm9maWxlICAgUG9pbnQg dG8gdGhlIG5ld2x5IGFkZGVkIHVzZXIgcHJvZmlsZS4NCj4+LSAgQHBhcmFtW2luXSAgICBQcm9m aWxlU2l6ZSAgIFRoZSBzaXplIG9mIHRoZSB1c2VyIHByb2ZpbGUuDQo+Pi0gIEBwYXJhbVtpbl0g ICAgUHJvZmlsZUluZm8gICBQb2ludCB0byB0aGUgdXNlciBwcm9maWUgZGF0YS4NCj4+LSAgQHBh cmFtW2luXSAgICBTYXZlICAgICAgICAgIElmIFRSVUUsIHNhdmUgdGhlIG5ldyBhZGRlZCBwcm9m aWxlIHRvIE5WIGZsYXNoLg0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgRkFM U0UsIGRvbid0IHNhdmUgdGhlIHByb2ZpbGUgdG8gTlYgZmxhc2guDQo+Pi0NCj4+LSAgQHJldHZh bCBFRklfU1VDQ0VTUyAgICAgICAgIEFkZCB1c2VyIHByb2ZpbGUgdG8gdXNlciBwcm9maWxlIGRh dGFiYXNlDQo+PnN1Y2Nlc3NmdWxseS4NCj4+LSAgQHJldHZhbCBPdGhlcnMgICAgICAgICAgICAg IEZhaWwgdG8gYWRkIHVzZXIgcHJvZmlsZSB0byB1c2VyIHByb2ZpbGUgZGF0YWJhc2UuDQo+Pi0N Cj4+LSoqLw0KPj4tRUZJX1NUQVRVUw0KPj4tQWRkVXNlclByb2ZpbGUgKA0KPj4tICAgICBPVVQg IFVTRVJfUFJPRklMRV9FTlRSWSAgICAgICAgICAgICAgICAgICAgKipVc2VyUHJvZmlsZSwgT1BU SU9OQUwNCj4+LSAgSU4gICAgICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFByb2ZpbGVTaXplLA0KPj4tICBJTiAgICAgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKlByb2ZpbGVJbmZvLA0KPj4tICBJTiAgICAgIEJPT0xFQU4gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgU2F2ZQ0KPj4tICApDQo+Pi17DQo+Pi0gIEVGSV9TVEFUVVMgICAg ICAgICAgICAgIFN0YXR1czsNCj4+LSAgVVNFUl9QUk9GSUxFX0VOVFJZICAgICAgKlVzZXI7DQo+ Pi0NCj4+LSAgLy8NCj4+LSAgLy8gQ2hlY2sgdGhlIGRhdGEgZm9ybWF0IHRvIGJlIGFkZGVkLg0K Pj4tICAvLw0KPj4tICBpZiAoIUNoZWNrUHJvZmlsZUluZm8gKFByb2ZpbGVJbmZvLCBQcm9maWxl U2l6ZSkpIHsNCj4+LSAgICByZXR1cm4gRUZJX1NFQ1VSSVRZX1ZJT0xBVElPTjsNCj4+LSAgfQ0K Pj4tDQo+Pi0gIC8vDQo+Pi0gIC8vIENyZWF0ZSB1c2VyIHByb2ZpbGUgZW50cnkuDQo+Pi0gIC8v DQo+Pi0gIFVzZXIgPSBBbGxvY2F0ZVplcm9Qb29sIChzaXplb2YgKFVTRVJfUFJPRklMRV9FTlRS WSkpOw0KPj4tICBpZiAoVXNlciA9PSBOVUxMKSB7DQo+Pi0gICAgcmV0dXJuIEVGSV9PVVRfT0Zf UkVTT1VSQ0VTOw0KPj4tICB9DQo+Pi0gIC8vDQo+Pi0gIC8vIEFkZCB0aGUgZW50cnkgdG8gdGhl IHVzZXIgcHJvZmlsZSBkYXRhYmFzZS4NCj4+LSAgLy8NCj4+LSAgaWYgKG1Vc2VyUHJvZmlsZURi LT5Vc2VyUHJvZmlsZU51bSA9PSBtVXNlclByb2ZpbGVEYi0+TWF4UHJvZmlsZU51bSkNCj4+ew0K Pj4tICAgIGlmICghRXhwYW5kVXNlcm1Vc2VyUHJvZmlsZURiICgpKSB7DQo+Pi0gICAgICBGcmVl UG9vbCAoVXNlcik7DQo+Pi0gICAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+Pi0g ICAgfQ0KPj4tICB9DQo+Pi0NCj4+LSAgVW5pY29kZVNQcmludCAoDQo+Pi0gICAgVXNlci0+VXNl clZhck5hbWUsDQo+Pi0gICAgc2l6ZW9mIChVc2VyLT5Vc2VyVmFyTmFtZSksDQo+Pi0gICAgTCJV c2VyJTA0eCIsDQo+Pi0gICAgbVVzZXJQcm9maWxlRGItPlVzZXJQcm9maWxlTnVtDQo+Pi0gICAg KTsNCj4+LSAgVXNlci0+VXNlclByb2ZpbGVTaXplID0gMDsNCj4+LSAgVXNlci0+TWF4UHJvZmls ZVNpemUgID0gMDsNCj4+LSAgVXNlci0+UHJvZmlsZUluZm8gICAgID0gTlVMTDsNCj4+LSAgbVVz ZXJQcm9maWxlRGItPlVzZXJQcm9maWxlW21Vc2VyUHJvZmlsZURiLT5Vc2VyUHJvZmlsZU51bV0g PQ0KPj4oRUZJX1VTRVJfUFJPRklMRV9IQU5ETEUpIFVzZXI7DQo+Pi0gIG1Vc2VyUHJvZmlsZURi LT5Vc2VyUHJvZmlsZU51bSsrOw0KPj4tDQo+Pi0gIC8vDQo+Pi0gIC8vIEFkZCB1c2VyIHByb2Zp bGUgaW5mb3JtYXRpb24uDQo+Pi0gIC8vDQo+Pi0gIFN0YXR1cyA9IEFkZFVzZXJJbmZvIChVc2Vy LCBQcm9maWxlSW5mbywgUHJvZmlsZVNpemUsIE5VTEwsIFNhdmUpOw0KPj4tICBpZiAoRUZJX0VS Uk9SIChTdGF0dXMpKSB7DQo+Pi0gICAgRGVsVXNlclByb2ZpbGUgKFVzZXIpOw0KPj4tICAgIHJl dHVybiBTdGF0dXM7DQo+Pi0gIH0NCj4+LSAgLy8NCj4+LSAgLy8gU2V0IG5ldyB1c2VyIHByb2Zp bGUgaGFuZGxlLg0KPj4tICAvLw0KPj4tICBpZiAoVXNlclByb2ZpbGUgIT0gTlVMTCkgew0KPj4t ICAgICpVc2VyUHJvZmlsZSA9IFVzZXI7DQo+Pi0gIH0NCj4+LQ0KPj4tICByZXR1cm4gRUZJX1NV Q0NFU1M7DQo+Pi19DQo+Pi0NCj4+LQ0KPj4tLyoqDQo+Pi0gIFRoaXMgZnVuY3Rpb24gY3JlYXRl cyBhIG5ldyB1c2VyIHByb2ZpbGUgd2l0aCBvbmx5IGEgbmV3IHVzZXIgaWRlbnRpZmllcg0KPj4t ICBhdHRhY2hlZCBhbmQgcmV0dXJucyBpdHMgaGFuZGxlLiBUaGUgdXNlciBwcm9maWxlIGlzIG5v bi12b2xhdGlsZSwgYnV0IHRoZQ0KPj4tICBoYW5kbGUgVXNlciBjYW4gY2hhbmdlIGFjcm9zcyBy ZWJvb3RzLg0KPj4tDQo+Pi0gIEBwYXJhbVtvdXRdICBVc2VyICAgICAgICAgICAgICAgSGFuZGxl IG9mIGEgbmV3IHVzZXIgcHJvZmlsZS4NCj4+LQ0KPj4tICBAcmV0dmFsIEVGSV9TVUNDRVNTICAg ICAgICAgICAgIFVzZXIgcHJvZmlsZSB3YXMgc3VjY2Vzc2Z1bGx5IGNyZWF0ZWQuDQo+Pi0gIEBy ZXR2YWwgT3RoZXJzICAgICAgICAgICAgICAgICAgRmFpbCB0byBjcmVhdGUgdXNlciBwcm9maWxl DQo+Pi0NCj4+LSoqLw0KPj4tRUZJX1NUQVRVUw0KPj4tQ3JlYXRlVXNlclByb2ZpbGUgKA0KPj4t ICBPVVQgVVNFUl9QUk9GSUxFX0VOVFJZICAgICAgICAgICAgICAgICAgICAgICAgKipVc2VyDQo+ Pi0gICkNCj4+LXsNCj4+LSAgRUZJX1NUQVRVUyAgICBTdGF0dXM7DQo+Pi0gIEVGSV9VU0VSX0lO Rk8gKlVzZXJJbmZvOw0KPj4tDQo+Pi0gIGlmIChVc2VyID09IE5VTEwpIHsNCj4+LSAgICByZXR1 cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPj4tICB9DQo+Pi0gIC8vDQo+Pi0gIC8vIEdlbmVy YXRlIHVzZXIgaWQgaW5mb3JtYXRpb24uDQo+Pi0gIC8vDQo+Pi0gIFVzZXJJbmZvID0gQWxsb2Nh dGVaZXJvUG9vbCAoc2l6ZW9mIChFRklfVVNFUl9JTkZPKSArIHNpemVvZg0KPj4oRUZJX1VTRVJf SU5GT19JREVOVElGSUVSKSk7DQo+Pi0gIGlmIChVc2VySW5mbyA9PSBOVUxMKSB7DQo+Pi0gICAg cmV0dXJuIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPj4tICB9DQo+Pi0NCj4+LSAgVXNlckluZm8t PkluZm9UeXBlICAgID0gRUZJX1VTRVJfSU5GT19JREVOVElGSUVSX1JFQ09SRDsNCj4+LSAgVXNl ckluZm8tPkluZm9TaXplICAgID0gc2l6ZW9mIChFRklfVVNFUl9JTkZPKSArIHNpemVvZg0KPj4o RUZJX1VTRVJfSU5GT19JREVOVElGSUVSKTsNCj4+LSAgVXNlckluZm8tPkluZm9BdHRyaWJzID0g RUZJX1VTRVJfSU5GT19TVE9SQUdFX1BMQVRGT1JNX05WIHwNCj4+RUZJX1VTRVJfSU5GT19QVUJM SUMgfCBFRklfVVNFUl9JTkZPX0VYQ0xVU0lWRTsNCj4+LSAgR2VuZXJhdGVVc2VySWQgKChVSU5U OCAqKSAoVXNlckluZm8gKyAxKSk7DQo+Pi0NCj4+LSAgLy8NCj4+LSAgLy8gQWRkIHVzZXIgcHJv ZmlsZSB0byB0aGUgdXNlciBwcm9maWxlIGRhdGFiYXNlLg0KPj4tICAvLw0KPj4tICBTdGF0dXMg PSBBZGRVc2VyUHJvZmlsZSAoVXNlciwgVXNlckluZm8tPkluZm9TaXplLCAoVUlOVDggKikgVXNl ckluZm8sDQo+PlRSVUUpOw0KPj4tICBGcmVlUG9vbCAoVXNlckluZm8pOw0KPj4tICByZXR1cm4g U3RhdHVzOw0KPj4tfQ0KPj4tDQo+Pi0NCj4+LS8qKg0KPj4tICBBZGQgYSBkZWZhdWx0IHVzZXIg cHJvZmlsZSB0byB1c2VyIHByb2ZpbGUgZGF0YWJhc2UuDQo+Pi0NCj4+LSAgQHJldHZhbCBFRklf U1VDQ0VTUyAgICAgICAgICAgICBBIGRlZmF1bHQgdXNlciBwcm9maWxlIGlzIGFkZGVkIHN1Y2Nl c3NmdWxseS4NCj4+LSAgQHJldHZhbCBPdGhlcnMgICAgICAgICAgICAgICAgICBGYWlsIHRvIGFk ZCBhIGRlZmF1bHQgdXNlciBwcm9maWxlDQo+Pi0NCj4+LSoqLw0KPj4tRUZJX1NUQVRVUw0KPj4t QWRkRGVmYXVsdFVzZXJQcm9maWxlICgNCj4+LSAgVk9JRA0KPj4tICApDQo+Pi17DQo+Pi0gIEVG SV9TVEFUVVMgICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4+LSAgVVNFUl9QUk9GSUxFX0VO VFJZICAgICAgICAgICAgKlVzZXI7DQo+Pi0gIEVGSV9VU0VSX0lORk8gICAgICAgICAgICAgICAg ICpJbmZvOw0KPj4tICBFRklfVVNFUl9JTkZPICAgICAgICAgICAgICAgICAqTmV3SW5mbzsNCj4+ LSAgRUZJX1VTRVJfSU5GT19DUkVBVEVfREFURSAgICAgQ3JlYXRlRGF0ZTsNCj4+LSAgRUZJX1VT RVJfSU5GT19VU0FHRV9DT1VOVCAgICAgVXNhZ2VDb3VudDsNCj4+LSAgRUZJX1VTRVJfSU5GT19B Q0NFU1NfQ09OVFJPTCAgKkFjY2VzczsNCj4+LSAgRUZJX1VTRVJfSU5GT19JREVOVElUWV9QT0xJ Q1kgKlBvbGljeTsNCj4+LQ0KPj4tICAvLw0KPj4tICAvLyBDcmVhdGUgYSB1c2VyIHByb2ZpbGUu DQo+Pi0gIC8vDQo+Pi0gIFN0YXR1cyA9IENyZWF0ZVVzZXJQcm9maWxlICgmVXNlcik7DQo+Pi0g IGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4+LSAgICByZXR1cm4gU3RhdHVzOw0KPj4tICB9 DQo+Pi0NCj4+LSAgLy8NCj4+LSAgLy8gQWxsb2NhdGUgYSBidWZmZXIgdG8gYWRkIGFsbCBkZWZh dWx0IHVzZXIgaW5mb3JtYXRpb24uDQo+Pi0gIC8vDQo+Pi0gIEluZm8gPSBBbGxvY2F0ZVplcm9Q b29sIChzaXplb2YgKEVGSV9VU0VSX0lORk8pICsgSU5GT19QQVlMT0FEX1NJWkUpOw0KPj4tICBp ZiAoSW5mbyA9PSBOVUxMKSB7DQo+Pi0gICAgcmV0dXJuIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0K Pj4tICB9DQo+Pi0NCj4+LSAgLy8NCj4+LSAgLy8gQWRkIHVzZXIgbmFtZS4NCj4+LSAgLy8NCj4+ LSAgSW5mby0+SW5mb1R5cGUgICAgPSBFRklfVVNFUl9JTkZPX05BTUVfUkVDT1JEOw0KPj4tICBJ bmZvLT5JbmZvQXR0cmlicyA9IEVGSV9VU0VSX0lORk9fU1RPUkFHRV9QTEFURk9STV9OViB8DQo+ PkVGSV9VU0VSX0lORk9fUFVCTElDIHwgRUZJX1VTRVJfSU5GT19FWENMVVNJVkU7DQo+Pi0gIElu Zm8tPkluZm9TaXplICAgID0gc2l6ZW9mIChFRklfVVNFUl9JTkZPKSArIHNpemVvZiAobVVzZXJO YW1lKTsNCj4+LSAgQ29weU1lbSAoKFVJTlQ4ICopIChJbmZvICsgMSksIG1Vc2VyTmFtZSwgc2l6 ZW9mIChtVXNlck5hbWUpKTsNCj4+LSAgTmV3SW5mbyA9IE5VTEw7DQo+Pi0gIFN0YXR1cyAgPSBN b2RpZnlVc2VySW5mbyAoVXNlciwgJk5ld0luZm8sIEluZm8sIEluZm8tPkluZm9TaXplKTsNCj4+ LSAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPj4tICAgIGdvdG8gRG9uZTsNCj4+LSAgfQ0K Pj4tDQo+Pi0gIC8vDQo+Pi0gIC8vIEFkZCB1c2VyIHByb2ZpbGUgY3JlYXRlIGRhdGUgcmVjb3Jk Lg0KPj4tICAvLw0KPj4tICBJbmZvLT5JbmZvVHlwZSAgICA9IEVGSV9VU0VSX0lORk9fQ1JFQVRF X0RBVEVfUkVDT1JEOw0KPj4tICBJbmZvLT5JbmZvQXR0cmlicyA9IEVGSV9VU0VSX0lORk9fU1RP UkFHRV9QTEFURk9STV9OViB8DQo+PkVGSV9VU0VSX0lORk9fUFVCTElDIHwgRUZJX1VTRVJfSU5G T19FWENMVVNJVkU7DQo+Pi0gIEluZm8tPkluZm9TaXplICAgID0gc2l6ZW9mIChFRklfVVNFUl9J TkZPKSArIHNpemVvZg0KPj4oRUZJX1VTRVJfSU5GT19DUkVBVEVfREFURSk7DQo+Pi0gIFN0YXR1 cyAgICAgICAgICAgID0gZ1JULT5HZXRUaW1lICgmQ3JlYXRlRGF0ZSwgTlVMTCk7DQo+Pi0gIGlm IChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4+LSAgICBnb3RvIERvbmU7DQo+Pi0gIH0NCj4+LQ0K Pj4tICBDb3B5TWVtICgoVUlOVDggKikgKEluZm8gKyAxKSwgJkNyZWF0ZURhdGUsIHNpemVvZg0K Pj4oRUZJX1VTRVJfSU5GT19DUkVBVEVfREFURSkpOw0KPj4tICBOZXdJbmZvID0gTlVMTDsNCj4+ LSAgU3RhdHVzICA9IE1vZGlmeVVzZXJJbmZvIChVc2VyLCAmTmV3SW5mbywgSW5mbywgSW5mby0+ SW5mb1NpemUpOw0KPj4tICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+Pi0gICAgZ290byBE b25lOw0KPj4tICB9DQo+Pi0NCj4+LSAgLy8NCj4+LSAgLy8gQWRkIHVzZXIgcHJvZmlsZSB1c2Fn ZSBjb3VudCByZWNvcmQuDQo+Pi0gIC8vDQo+Pi0gIEluZm8tPkluZm9UeXBlICAgID0gRUZJX1VT RVJfSU5GT19VU0FHRV9DT1VOVF9SRUNPUkQ7DQo+Pi0gIEluZm8tPkluZm9BdHRyaWJzID0gRUZJ X1VTRVJfSU5GT19TVE9SQUdFX1BMQVRGT1JNX05WIHwNCj4+RUZJX1VTRVJfSU5GT19QVUJMSUMg fCBFRklfVVNFUl9JTkZPX0VYQ0xVU0lWRTsNCj4+LSAgSW5mby0+SW5mb1NpemUgICAgPSBzaXpl b2YgKEVGSV9VU0VSX0lORk8pICsgc2l6ZW9mDQo+PihFRklfVVNFUl9JTkZPX1VTQUdFX0NPVU5U KTsNCj4+LSAgVXNhZ2VDb3VudCAgICAgICAgPSAwOw0KPj4tICBDb3B5TWVtICgoVUlOVDggKikg KEluZm8gKyAxKSwgJlVzYWdlQ291bnQsIHNpemVvZg0KPj4oRUZJX1VTRVJfSU5GT19VU0FHRV9D T1VOVCkpOw0KPj4tICBOZXdJbmZvID0gTlVMTDsNCj4+LSAgU3RhdHVzICA9IE1vZGlmeVVzZXJJ bmZvIChVc2VyLCAmTmV3SW5mbywgSW5mbywgSW5mby0+SW5mb1NpemUpOw0KPj4tICBpZiAoRUZJ X0VSUk9SIChTdGF0dXMpKSB7DQo+Pi0gICAgZ290byBEb25lOw0KPj4tICB9DQo+Pi0NCj4+LSAg Ly8NCj4+LSAgLy8gQWRkIHVzZXIgYWNjZXNzIHJpZ2h0Lg0KPj4tICAvLw0KPj4tICBJbmZvLT5J bmZvVHlwZSAgICA9IEVGSV9VU0VSX0lORk9fQUNDRVNTX1BPTElDWV9SRUNPUkQ7DQo+Pi0gIElu Zm8tPkluZm9BdHRyaWJzID0gRUZJX1VTRVJfSU5GT19TVE9SQUdFX1BMQVRGT1JNX05WIHwNCj4+ RUZJX1VTRVJfSU5GT19QVUJMSUMgfCBFRklfVVNFUl9JTkZPX0VYQ0xVU0lWRTsNCj4+LSAgQWNj ZXNzICAgICAgICAgICAgPSAoRUZJX1VTRVJfSU5GT19BQ0NFU1NfQ09OVFJPTCAqKSAoSW5mbyAr IDEpOw0KPj4tICBBY2Nlc3MtPlR5cGUgICAgICA9IEVGSV9VU0VSX0lORk9fQUNDRVNTX01BTkFH RTsNCj4+LSAgQWNjZXNzLT5TaXplICAgICAgPSBzaXplb2YgKEVGSV9VU0VSX0lORk9fQUNDRVNT X0NPTlRST0wpOw0KPj4tICBJbmZvLT5JbmZvU2l6ZSAgICA9IHNpemVvZiAoRUZJX1VTRVJfSU5G TykgKyBBY2Nlc3MtPlNpemU7DQo+Pi0gIE5ld0luZm8gPSBOVUxMOw0KPj4tICBTdGF0dXMgID0g TW9kaWZ5VXNlckluZm8gKFVzZXIsICZOZXdJbmZvLCBJbmZvLCBJbmZvLT5JbmZvU2l6ZSk7DQo+ Pi0gIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4+LSAgICBnb3RvIERvbmU7DQo+Pi0gIH0N Cj4+LQ0KPj4tICAvLw0KPj4tICAvLyBBZGQgdXNlciBpZGVudGl0eSBwb2xpY3kuDQo+Pi0gIC8v DQo+Pi0gIEluZm8tPkluZm9UeXBlICAgID0gRUZJX1VTRVJfSU5GT19JREVOVElUWV9QT0xJQ1lf UkVDT1JEOw0KPj4tICBJbmZvLT5JbmZvQXR0cmlicyA9IEVGSV9VU0VSX0lORk9fU1RPUkFHRV9Q TEFURk9STV9OViB8DQo+PkVGSV9VU0VSX0lORk9fUFJJVkFURSB8IEVGSV9VU0VSX0lORk9fRVhD TFVTSVZFOw0KPj4tICBQb2xpY3kgICAgICAgICAgICA9IChFRklfVVNFUl9JTkZPX0lERU5USVRZ X1BPTElDWSAqKSAoSW5mbyArIDEpOw0KPj4tICBQb2xpY3ktPlR5cGUgICAgICA9IEVGSV9VU0VS X0lORk9fSURFTlRJVFlfVFJVRTsNCj4+LSAgUG9saWN5LT5MZW5ndGggICAgPSBzaXplb2YgKEVG SV9VU0VSX0lORk9fSURFTlRJVFlfUE9MSUNZKTsNCj4+LSAgSW5mby0+SW5mb1NpemUgICAgPSBz aXplb2YgKEVGSV9VU0VSX0lORk8pICsgUG9saWN5LT5MZW5ndGg7DQo+Pi0gIE5ld0luZm8gPSBO VUxMOw0KPj4tICBTdGF0dXMgID0gTW9kaWZ5VXNlckluZm8gKFVzZXIsICZOZXdJbmZvLCBJbmZv LCBJbmZvLT5JbmZvU2l6ZSk7DQo+Pi0NCj4+LURvbmU6DQo+Pi0gIEZyZWVQb29sIChJbmZvKTsN Cj4+LSAgcmV0dXJuIFN0YXR1czsNCj4+LX0NCj4+LQ0KPj4tDQo+Pi0vKioNCj4+LSAgUHVibGlz aCBjdXJyZW50IHVzZXIgaW5mb3JtYXRpb24gaW50byBFRkkgU3lzdGVtIENvbmZpZ3VyYXRpb24g VGFibGUuDQo+Pi0NCj4+LSAgQnkgVUVGSSBzcGVjLCB0aGUgVXNlciBJZGVudGl0eSBNYW5hZ2Vy IHdpbGwgcHVibGlzaCB0aGUgY3VycmVudCB1c2VyDQo+cHJvZmlsZQ0KPj4tICBpbnRvIHRoZSBF RkkgU3lzdGVtIENvbmZpZ3VyYXRpb24gVGFibGUuIEN1cnJlbnRseSwgb25seSB0aGUgdXNlciBp ZGVudGlmaWVyDQo+PmFuZCB1c2VyDQo+Pi0gIG5hbWUgYXJlIHB1Ymxpc2hlZC4NCj4+LQ0KPj4t ICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgQ3VycmVudCB1c2VyIGluZm9ybWF0aW9uIGlzIHB1 Ymxpc2hlZCBzdWNjZXNzZnVsbHkuDQo+Pi0gIEByZXR2YWwgT3RoZXJzICAgICAgICAgICBGYWls IHRvIHB1Ymxpc2ggY3VycmVudCB1c2VyIGluZm9ybWF0aW9uDQo+Pi0NCj4+LSoqLw0KPj4tRUZJ X1NUQVRVUw0KPj4tUHVibGlzaFVzZXJUYWJsZSAoDQo+Pi0gIFZPSUQNCj4+LSAgKQ0KPj4tew0K Pj4tICBFRklfU1RBVFVTICAgICAgICAgICAgICBTdGF0dXM7DQo+Pi0gIEVGSV9DT05GSUdVUkFU SU9OX1RBQkxFICpFZmlDb25maWd1cmF0aW9uVGFibGU7DQo+Pi0gIEVGSV9VU0VSX0lORk9fVEFC TEUgICAgICpVc2VySW5mb1RhYmxlOw0KPj4tICBFRklfVVNFUl9JTkZPICAgICAgICAgICAqSWRJ bmZvOw0KPj4tICBFRklfVVNFUl9JTkZPICAgICAgICAgICAqTmFtZUluZm87DQo+Pi0NCj4+LSAg U3RhdHVzID0gRWZpR2V0U3lzdGVtQ29uZmlndXJhdGlvblRhYmxlICgNCj4+LSAgICAgICAgICAg ICAmZ0VmaVVzZXJNYW5hZ2VyUHJvdG9jb2xHdWlkLA0KPj4tICAgICAgICAgICAgIChWT0lEICoq KSAmRWZpQ29uZmlndXJhdGlvblRhYmxlDQo+Pi0gICAgICAgICAgICAgKTsNCj4+LSAgaWYgKCFF RklfRVJST1IgKFN0YXR1cykpIHsNCj4+LSAgICAvLw0KPj4tICAgIC8vIFRoZSB0YWJsZSBleGlz dGVkIQ0KPj4tICAgIC8vDQo+Pi0gICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPj4tICB9DQo+Pi0N Cj4+LSAgLy8NCj4+LSAgLy8gR2V0IHVzZXIgSUQgaW5mb3JtYXRpb24uDQo+Pi0gIC8vDQo+Pi0g IElkSW5mbyAgPSBOVUxMOw0KPj4tICBTdGF0dXMgID0gRmluZFVzZXJJbmZvQnlUeXBlIChtQ3Vy cmVudFVzZXIsICZJZEluZm8sDQo+PkVGSV9VU0VSX0lORk9fSURFTlRJRklFUl9SRUNPUkQpOw0K Pj4tICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+Pi0gICAgcmV0dXJuIFN0YXR1czsNCj4+ LQ0KPj4tICB9DQo+Pi0gIC8vDQo+Pi0gIC8vIEdldCB1c2VyIG5hbWUgaW5mb3JtYXRpb24uDQo+ Pi0gIC8vDQo+Pi0gIE5hbWVJbmZvICA9IE5VTEw7DQo+Pi0gIFN0YXR1cyAgICA9IEZpbmRVc2Vy SW5mb0J5VHlwZSAobUN1cnJlbnRVc2VyLCAmTmFtZUluZm8sDQo+PkVGSV9VU0VSX0lORk9fTkFN RV9SRUNPUkQpOw0KPj4tICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+Pi0gICAgcmV0dXJu IFN0YXR1czsNCj4+LSAgfQ0KPj4tDQo+Pi0gIC8vDQo+Pi0gIC8vIEFsbG9jYXRlIGEgYnVmZmVy IGZvciB1c2VyIGluZm9ybWF0aW9uIHRhYmxlLg0KPj4tICAvLw0KPj4tICBVc2VySW5mb1RhYmxl ID0gKEVGSV9VU0VSX0lORk9fVEFCTEUgKikgQWxsb2NhdGVSdW50aW1lUG9vbCAoDQo+Pi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiAoRUZJX1VTRVJf SU5GT19UQUJMRSkgKw0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBJZEluZm8tPkluZm9TaXplICsNCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgTmFtZUluZm8tPkluZm9TaXplDQo+Pi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+Pi0gIGlmIChVc2VySW5mb1RhYmxlID09IE5V TEwpIHsNCj4+LSAgICBTdGF0dXMgPSBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4+LSAgICByZXR1 cm4gU3RhdHVzOw0KPj4tICB9DQo+Pi0NCj4+LSAgVXNlckluZm9UYWJsZS0+U2l6ZSA9IHNpemVv ZiAoRUZJX1VTRVJfSU5GT19UQUJMRSk7DQo+Pi0NCj4+LSAgLy8NCj4+LSAgLy8gQXBwZW5kIHRo ZSB1c2VyIGluZm9ybWF0aW9uIHRvIHRoZSB1c2VyIGluZm8gdGFibGUNCj4+LSAgLy8NCj4+LSAg Q29weU1lbSAoKFVJTlQ4ICopIFVzZXJJbmZvVGFibGUgKyBVc2VySW5mb1RhYmxlLT5TaXplLCAo VUlOVDggKikNCj5JZEluZm8sDQo+PklkSW5mby0+SW5mb1NpemUpOw0KPj4tICBVc2VySW5mb1Rh YmxlLT5TaXplICs9IElkSW5mby0+SW5mb1NpemU7DQo+Pi0NCj4+LSAgQ29weU1lbSAoKFVJTlQ4 ICopIFVzZXJJbmZvVGFibGUgKyBVc2VySW5mb1RhYmxlLT5TaXplLCAoVUlOVDggKikNCj4+TmFt ZUluZm8sIE5hbWVJbmZvLT5JbmZvU2l6ZSk7DQo+Pi0gIFVzZXJJbmZvVGFibGUtPlNpemUgKz0g TmFtZUluZm8tPkluZm9TaXplOw0KPj4tDQo+Pi0gIFN0YXR1cyA9IGdCUy0+SW5zdGFsbENvbmZp Z3VyYXRpb25UYWJsZSAoJmdFZmlVc2VyTWFuYWdlclByb3RvY29sR3VpZCwNCj4+KFZPSUQgKikg VXNlckluZm9UYWJsZSk7DQo+Pi0gIHJldHVybiBTdGF0dXM7DQo+Pi19DQo+Pi0NCj4+LQ0KPj4t LyoqDQo+Pi0gIEdldCB0aGUgdXNlcidzIGlkZW50aXR5IHR5cGUuDQo+Pi0NCj4+LSAgVGhlIGlk ZW50aWZ5IG1hbmFnZXIgb25seSBzdXBwb3J0cyB0aGUgaWRlbnRpdHkgcG9saWN5IGluIHdoaWNo IHRoZQ0KPj5jcmVkZW50aWFsDQo+Pi0gIHByb3ZpZGVyIGhhbmRsZXMgYXJlIGNvbm5lY3RlZCBi eSB0aGUgb3BlcmF0b3IgJ0FORCcgb3IgJ09SJy4NCj4+LQ0KPj4tDQo+Pi0gIEBwYXJhbVtpbl0g ICBVc2VyICAgICAgICAgICAgICBIYW5kbGUgb2YgYSB1c2VyIHByb2ZpbGUuDQo+Pi0gIEBwYXJh bVtvdXRdICBQb2xpY3lUeXBlICAgICAgICBQb2ludCB0byB0aGUgaWRlbnRpdHkgdHlwZS4NCj4+ LQ0KPj4tICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgR2V0IHVzZXIncyBpZGVudGl0 eSB0eXBlIHN1Y2Nlc3NmdWxseS4NCj4+LSAgQHJldHZhbCBPdGhlcnMgICAgICAgICAgICAgICAg IEZhaWwgdG8gZ2V0IHVzZXIncyBpZGVudGl0eSB0eXBlLg0KPj4tDQo+Pi0qKi8NCj4+LUVGSV9T VEFUVVMNCj4+LUdldElkZW50aWZ5VHlwZSAoDQo+Pi0gIElOICAgICAgRUZJX1VTRVJfUFJPRklM RV9IQU5ETEUgICAgICAgICAgICAgICBVc2VyLA0KPj4tICAgICBPVVQgIFVJTlQ4ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKlBvbGljeVR5cGUNCj4+LSAgKQ0KPj4tew0KPj4tICBF RklfU1RBVFVTICAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+Pi0gIEVGSV9VU0VSX0lORk8g ICAgICAgICAgICAgICAgICpJZGVudGlmeUluZm87DQo+Pi0gIFVJTlROICAgICAgICAgICAgICAg ICAgICAgICAgIFRvdGFsTGVuOw0KPj4tICBFRklfVVNFUl9JTkZPX0lERU5USVRZX1BPTElDWSAq SWRlbnRpdHk7DQo+Pi0NCj4+LSAgLy8NCj4+LSAgLy8gR2V0IHVzZXIgaWRlbnRpZnkgcG9saWN5 IGluZm9ybWF0aW9uLg0KPj4tICAvLw0KPj4tICBJZGVudGlmeUluZm8gID0gTlVMTDsNCj4+LSAg U3RhdHVzICAgICAgICA9IEZpbmRVc2VySW5mb0J5VHlwZSAoVXNlciwgJklkZW50aWZ5SW5mbywN Cj4+RUZJX1VTRVJfSU5GT19JREVOVElUWV9QT0xJQ1lfUkVDT1JEKTsNCj4+LSAgaWYgKEVGSV9F UlJPUiAoU3RhdHVzKSkgew0KPj4tICAgIHJldHVybiBTdGF0dXM7DQo+Pi0gIH0NCj4+LSAgQVNT RVJUIChJZGVudGlmeUluZm8gIT0gTlVMTCk7DQo+Pi0NCj4+LSAgLy8NCj4+LSAgLy8gU2VhcmNo IHRoZSB1c2VyIGlkZW50aWZ5IHBvbGljeSBhY2NvcmRpbmcgdG8gdHlwZS4NCj4+LSAgLy8NCj4+ LSAgVG90YWxMZW4gICAgPSAwOw0KPj4tICAqUG9saWN5VHlwZSA9IEVGSV9VU0VSX0lORk9fSURF TlRJVFlfRkFMU0U7DQo+Pi0gIHdoaWxlIChUb3RhbExlbiA8IElkZW50aWZ5SW5mby0+SW5mb1Np emUgLSBzaXplb2YgKEVGSV9VU0VSX0lORk8pKSB7DQo+Pi0gICAgSWRlbnRpdHkgPSAoRUZJX1VT RVJfSU5GT19JREVOVElUWV9QT0xJQ1kgKikgKChVSU5UOCAqKSAoSWRlbnRpZnlJbmZvDQo+Kw0K Pj4xKSArIFRvdGFsTGVuKTsNCj4+LSAgICBpZiAoSWRlbnRpdHktPlR5cGUgPT0gRUZJX1VTRVJf SU5GT19JREVOVElUWV9BTkQpIHsNCj4+LSAgICAgICpQb2xpY3lUeXBlID0gRUZJX1VTRVJfSU5G T19JREVOVElUWV9BTkQ7DQo+Pi0gICAgICBicmVhazsNCj4+LSAgICB9DQo+Pi0NCj4+LSAgICBp ZiAoSWRlbnRpdHktPlR5cGUgPT0gRUZJX1VTRVJfSU5GT19JREVOVElUWV9PUikgew0KPj4tICAg ICAgKlBvbGljeVR5cGUgPSBFRklfVVNFUl9JTkZPX0lERU5USVRZX09SOw0KPj4tICAgICAgYnJl YWs7DQo+Pi0gICAgfQ0KPj4tICAgIFRvdGFsTGVuICs9IElkZW50aXR5LT5MZW5ndGg7DQo+Pi0g IH0NCj4+LSAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPj4tfQ0KPj4tDQo+Pi0NCj4+LS8qKg0KPj4t ICBJZGVudGlmeSB0aGUgVXNlciBieSB0aGUgc3BlY2ZpZWQgcHJvdmlkZXIuDQo+Pi0NCj4+LSAg QHBhcmFtW2luXSAgVXNlciAgICAgICAgICAgICAgICBIYW5kbGUgb2YgYSB1c2VyIHByb2ZpbGUu DQo+Pi0gIEBwYXJhbVtpbl0gIFByb3ZpZGVyICAgICAgICAgICAgUG9pbnRzIHRvIHRoZSBpZGVu dGlmaWVyIG9mIGNyZWRlbnRpYWwgcHJvdmlkZXIuDQo+Pi0NCj4+LSAgQHJldHZhbCBFRklfSU5W QUxJRF9QQVJBTUVURVIgICBQcm92aWRlciBpcyBOVUxMLg0KPj4tICBAcmV0dmFsIEVGSV9OT1Rf Rk9VTkQgICAgICAgICAgIEZhaWwgdG8gaWRlbnRpZnkgdGhlIHNwZWNpZmllZCB1c2VyLg0KPj4t ICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgIFVzZXIgaXMgaWRlbnRpZmllZCBzdWNj ZXNzZnVsbHkuDQo+Pi0NCj4+LSoqLw0KPj4tRUZJX1NUQVRVUw0KPj4tSWRlbnRpZnlCeVByb3Zp ZGVySWQgKA0KPj4tICBJTiAgRUZJX1VTRVJfUFJPRklMRV9IQU5ETEUgICAgICAgICAgICAgICAg ICAgVXNlciwNCj4+LSAgSU4gIEVGSV9HVUlEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICpQcm92aWRlcg0KPj4tICApDQo+Pi17DQo+Pi0gIEVGSV9TVEFUVVMgICAgICAgICAgICAg ICAgICAgIFN0YXR1czsNCj4+LSAgRUZJX1VTRVJfSU5GT19JREVOVElGSUVSICAgICAgVXNlcklk Ow0KPj4tICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleDsNCj4+LSAgRUZJX0NS RURFTlRJQUxfTE9HT05fRkxBR1MgICAgQXV0b0xvZ29uOw0KPj4tICBFRklfSElJX0hBTkRMRSAg ICAgICAgICAgICAgICBIaWlIYW5kbGU7DQo+Pi0gIEVGSV9HVUlEICAgICAgICAgICAgICAgICAg ICAgIEZvcm1TZXRJZDsNCj4+LSAgRUZJX0ZPUk1fSUQgICAgICAgICAgICAgICAgICAgRm9ybUlk Ow0KPj4tICBFRklfVVNFUl9DUkVERU5USUFMMl9QUk9UT0NPTCAqVXNlckNyZWRlbnRpYWw7DQo+ Pi0NCj4+LSAgaWYgKFByb3ZpZGVyID09IE5VTEwpIHsNCj4+LSAgICByZXR1cm4gRUZJX0lOVkFM SURfUEFSQU1FVEVSOw0KPj4tICB9DQo+Pi0NCj4+LSAgLy8NCj4+LSAgLy8gQ2hlY2sgdGhlIHVz ZXIgSUQgaWRlbnRpZmllZCBieSB0aGUgc3BlY2lmaWVkIGNyZWRlbnRpYWwgcHJvdmlkZXIuDQo+ Pi0gIC8vDQo+Pi0gIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IG1Qcm92aWRlckRiLT5Db3VudDsg SW5kZXgrKykgew0KPj4tICAgIC8vDQo+Pi0gICAgLy8gQ2hlY2sgY3JlZGVudGlhbCBwcm92aWRl ciBjbGFzcy4NCj4+LSAgICAvLw0KPj4tICAgIFVzZXJDcmVkZW50aWFsID0gbVByb3ZpZGVyRGIt PlByb3ZpZGVyW0luZGV4XTsNCj4+LSAgICBpZiAoQ29tcGFyZUd1aWQgKCZVc2VyQ3JlZGVudGlh bC0+SWRlbnRpZmllciwgUHJvdmlkZXIpKSB7DQo+Pi0gICAgICBTdGF0dXMgPSBVc2VyQ3JlZGVu dGlhbC0+U2VsZWN0IChVc2VyQ3JlZGVudGlhbCwgJkF1dG9Mb2dvbik7DQo+Pi0gICAgICBpZiAo RUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+Pi0gICAgICAgIHJldHVybiBTdGF0dXM7DQo+Pi0gICAg ICB9DQo+Pi0NCj4+LSAgICAgIGlmICgoQXV0b0xvZ29uICYgRUZJX0NSRURFTlRJQUxfTE9HT05f RkxBR19BVVRPKSA9PSAwKSB7DQo+Pi0gICAgICAgIC8vDQo+Pi0gICAgICAgIC8vIEdldCBjcmVk ZW50aWFsIHByb3ZpZGVyIGZvcm0uDQo+Pi0gICAgICAgIC8vDQo+Pi0gICAgICAgIFN0YXR1cyA9 IFVzZXJDcmVkZW50aWFsLT5Gb3JtICgNCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgVXNlckNyZWRlbnRpYWwsDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICZIaWlIYW5kbGUsDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZG b3JtU2V0SWQsDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZGb3JtSWQN Cj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4+LSAgICAgICAgaWYg KCFFRklfRVJST1IgKFN0YXR1cykpIHsNCj4+LSAgICAgICAgICAvLw0KPj4tICAgICAgICAgIC8v IFNlbmQgZm9ybSB0byBnZXQgdXNlciBpbnB1dC4NCj4+LSAgICAgICAgICAvLw0KPj4tICAgICAg ICAgIFN0YXR1cyA9IG1DYWxsYmFja0luZm8tPkZvcm1Ccm93c2VyMi0+U2VuZEZvcm0gKA0KPj4t ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtQ2FsbGJh Y2tJbmZvLT5Gb3JtQnJvd3NlcjIsDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZIaWlIYW5kbGUsDQo+Pi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsDQo+Pi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZGb3JtU2V0SWQsDQo+Pi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvcm1JZCwNCj4+LSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwNCj4+LSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTA0KPj4tICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KPj4tICAg ICAgICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4+LSAgICAgICAgICAgIHJldHVybiBT dGF0dXM7DQo+Pi0gICAgICAgICAgfQ0KPj4tICAgICAgICB9DQo+Pi0gICAgICB9DQo+Pi0NCj4+ LSAgICAgIFN0YXR1cyA9IFVzZXJDcmVkZW50aWFsLT5Vc2VyIChVc2VyQ3JlZGVudGlhbCwgVXNl ciwgJlVzZXJJZCk7DQo+Pi0gICAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+Pi0gICAg ICAgIHJldHVybiBTdGF0dXM7DQo+Pi0gICAgICB9DQo+Pi0NCj4+LSAgICAgIFN0YXR1cyA9IFVz ZXJDcmVkZW50aWFsLT5EZXNlbGVjdCAoVXNlckNyZWRlbnRpYWwpOw0KPj4tICAgICAgaWYgKEVG SV9FUlJPUiAoU3RhdHVzKSkgew0KPj4tICAgICAgICByZXR1cm4gU3RhdHVzOw0KPj4tICAgICAg fQ0KPj4tDQo+Pi0gICAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+Pi0gICAgfQ0KPj4tICB9DQo+ Pi0NCj4+LSAgcmV0dXJuIEVGSV9OT1RfRk9VTkQ7DQo+Pi19DQo+Pi0NCj4+LQ0KPj4tLyoqDQo+ Pi0gIFVwZGF0ZSB1c2VyIGluZm9ybWF0aW9uIHdoZW4gdXNlciBpcyBsb2dvbiBvbiBzdWNjZXNz ZnVsbHkuDQo+Pi0NCj4+LSAgQHBhcmFtW2luXSAgVXNlciAgICAgICAgIFBvaW50cyB0byB1c2Vy IHByb2ZpbGUuDQo+Pi0NCj4+LSAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgIFVwZGF0ZSB1c2Vy IGluZm9ybWF0aW9uIHN1Y2Nlc3NmdWxseS4NCj4+LSAgQHJldHZhbCBPdGhlcnMgICAgICAgICAg IEZhaWwgdG8gdXBkYXRlIHVzZXIgaW5mb3JtYXRpb24uDQo+Pi0NCj4+LSoqLw0KPj4tRUZJX1NU QVRVUw0KPj4tVXBkYXRlVXNlckluZm8gKA0KPj4tICBJTiAgVVNFUl9QUk9GSUxFX0VOVFJZICAg ICAgICAgICAgICAgICAgICAgICAgKlVzZXINCj4+LSAgKQ0KPj4tew0KPj4tICBFRklfU1RBVFVT ICAgICAgICAgICAgICAgIFN0YXR1czsNCj4+LSAgRUZJX1VTRVJfSU5GTyAgICAgICAgICAgICAq SW5mbzsNCj4+LSAgRUZJX1VTRVJfSU5GTyAgICAgICAgICAgICAqTmV3SW5mbzsNCj4+LSAgRUZJ X1VTRVJfSU5GT19DUkVBVEVfREFURSBEYXRlOw0KPj4tICBFRklfVVNFUl9JTkZPX1VTQUdFX0NP VU5UIFVzYWdlQ291bnQ7DQo+Pi0gIFVJTlROICAgICAgICAgICAgICAgICAgICAgSW5mb0xlbjsN Cj4+LQ0KPj4tICAvLw0KPj4tICAvLyBBbGxvY2F0ZSBhIGJ1ZmZlciB0byB1cGRhdGUgdXNlcidz IGRhdGUgcmVjb3JkIGFuZCB1c2FnZSByZWNvcmQuDQo+Pi0gIC8vDQo+Pi0gIEluZm9MZW4gID0g TUFYIChzaXplb2YgKEVGSV9VU0VSX0lORk9fQ1JFQVRFX0RBVEUpLCBzaXplb2YNCj4+KEVGSV9V U0VSX0lORk9fVVNBR0VfQ09VTlQpKTsNCj4+LSAgSW5mbyAgICAgPSBBbGxvY2F0ZVplcm9Qb29s IChzaXplb2YgKEVGSV9VU0VSX0lORk8pICsgSW5mb0xlbik7DQo+Pi0gIGlmIChJbmZvID09IE5V TEwpIHsNCj4+LSAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+Pi0gIH0NCj4+LQ0K Pj4tICAvLw0KPj4tICAvLyBDaGVjayBjcmVhdGUgZGF0ZSByZWNvcmQuDQo+Pi0gIC8vDQo+Pi0g IE5ld0luZm8gPSBOVUxMOw0KPj4tICBTdGF0dXMgID0gRmluZFVzZXJJbmZvQnlUeXBlIChVc2Vy LCAmTmV3SW5mbywNCj4+RUZJX1VTRVJfSU5GT19DUkVBVEVfREFURV9SRUNPUkQpOw0KPj4tICBp ZiAoU3RhdHVzID09IEVGSV9OT1RfRk9VTkQpIHsNCj4+LSAgICBJbmZvLT5JbmZvVHlwZSAgICA9 IEVGSV9VU0VSX0lORk9fQ1JFQVRFX0RBVEVfUkVDT1JEOw0KPj4tICAgIEluZm8tPkluZm9BdHRy aWJzID0gRUZJX1VTRVJfSU5GT19TVE9SQUdFX1BMQVRGT1JNX05WIHwNCj4+RUZJX1VTRVJfSU5G T19QVUJMSUMgfCBFRklfVVNFUl9JTkZPX0VYQ0xVU0lWRTsNCj4+LSAgICBJbmZvLT5JbmZvU2l6 ZSAgICA9IHNpemVvZiAoRUZJX1VTRVJfSU5GTykgKyBzaXplb2YNCj4+KEVGSV9VU0VSX0lORk9f Q1JFQVRFX0RBVEUpOw0KPj4tICAgIFN0YXR1cyAgICAgICAgICAgID0gZ1JULT5HZXRUaW1lICgm RGF0ZSwgTlVMTCk7DQo+Pi0gICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPj4tICAgICAg RnJlZVBvb2wgKEluZm8pOw0KPj4tICAgICAgcmV0dXJuIFN0YXR1czsNCj4+LSAgICB9DQo+Pi0N Cj4+LSAgICBDb3B5TWVtICgoVUlOVDggKikgKEluZm8gKyAxKSwgJkRhdGUsIHNpemVvZg0KPj4o RUZJX1VTRVJfSU5GT19DUkVBVEVfREFURSkpOw0KPj4tICAgIE5ld0luZm8gPSBOVUxMOw0KPj4t ICAgIFN0YXR1cyAgPSBNb2RpZnlVc2VySW5mbyAoVXNlciwgJk5ld0luZm8sIEluZm8sIEluZm8t PkluZm9TaXplKTsNCj4+LSAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+Pi0gICAgICBG cmVlUG9vbCAoSW5mbyk7DQo+Pi0gICAgICByZXR1cm4gU3RhdHVzOw0KPj4tICAgIH0NCj4+LSAg fQ0KPj4tDQo+Pi0gIC8vDQo+Pi0gIC8vIFVwZGF0ZSB1c2FnZSBkYXRlIHJlY29yZC4NCj4+LSAg Ly8NCj4+LSAgTmV3SW5mbyA9IE5VTEw7DQo+Pi0gIFN0YXR1cyAgPSBGaW5kVXNlckluZm9CeVR5 cGUgKFVzZXIsICZOZXdJbmZvLA0KPj5FRklfVVNFUl9JTkZPX1VTQUdFX0RBVEVfUkVDT1JEKTsN Cj4+LSAgaWYgKChTdGF0dXMgPT0gRUZJX1NVQ0NFU1MpIHx8IChTdGF0dXMgPT0gRUZJX05PVF9G T1VORCkpIHsNCj4+LSAgICBJbmZvLT5JbmZvVHlwZSAgICA9IEVGSV9VU0VSX0lORk9fVVNBR0Vf REFURV9SRUNPUkQ7DQo+Pi0gICAgSW5mby0+SW5mb0F0dHJpYnMgPSBFRklfVVNFUl9JTkZPX1NU T1JBR0VfUExBVEZPUk1fTlYgfA0KPj5FRklfVVNFUl9JTkZPX1BVQkxJQyB8IEVGSV9VU0VSX0lO Rk9fRVhDTFVTSVZFOw0KPj4tICAgIEluZm8tPkluZm9TaXplICAgID0gc2l6ZW9mIChFRklfVVNF Ul9JTkZPKSArIHNpemVvZg0KPj4oRUZJX1VTRVJfSU5GT19VU0FHRV9EQVRFKTsNCj4+LSAgICBT dGF0dXMgICAgICAgICAgICA9IGdSVC0+R2V0VGltZSAoJkRhdGUsIE5VTEwpOw0KPj4tICAgIGlm IChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4+LSAgICAgIEZyZWVQb29sIChJbmZvKTsNCj4+LSAg ICAgIHJldHVybiBTdGF0dXM7DQo+Pi0gICAgfQ0KPj4tDQo+Pi0gICAgQ29weU1lbSAoKFVJTlQ4 ICopIChJbmZvICsgMSksICZEYXRlLCBzaXplb2YNCj4+KEVGSV9VU0VSX0lORk9fVVNBR0VfREFU RSkpOw0KPj4tICAgIFN0YXR1cyA9IE1vZGlmeVVzZXJJbmZvIChVc2VyLCAmTmV3SW5mbywgSW5m bywgSW5mby0+SW5mb1NpemUpOw0KPj4tICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4+ LSAgICAgIEZyZWVQb29sIChJbmZvKTsNCj4+LSAgICAgIHJldHVybiBTdGF0dXM7DQo+Pi0gICAg fQ0KPj4tICB9DQo+Pi0NCj4+LSAgLy8NCj4+LSAgLy8gVXBkYXRlIHVzYWdlIGNvdW50IHJlY29y ZC4NCj4+LSAgLy8NCj4+LSAgVXNhZ2VDb3VudCAgPSAwOw0KPj4tICBOZXdJbmZvICAgICA9IE5V TEw7DQo+Pi0gIFN0YXR1cyAgICAgID0gRmluZFVzZXJJbmZvQnlUeXBlIChVc2VyLCAmTmV3SW5m bywNCj4+RUZJX1VTRVJfSU5GT19VU0FHRV9DT1VOVF9SRUNPUkQpOw0KPj4tICAvLw0KPj4tICAv LyBHZXQgdXNhZ2UgY291bnQuDQo+Pi0gIC8vDQo+Pi0gIGlmIChTdGF0dXMgPT0gRUZJX1NVQ0NF U1MpIHsNCj4+LSAgICBDb3B5TWVtICgmVXNhZ2VDb3VudCwgKFVJTlQ4ICopIChOZXdJbmZvICsg MSksIHNpemVvZg0KPj4oRUZJX1VTRVJfSU5GT19VU0FHRV9DT1VOVCkpOw0KPj4tICB9DQo+Pi0N Cj4+LSAgVXNhZ2VDb3VudCsrOw0KPj4tICBpZiAoKFN0YXR1cyA9PSBFRklfU1VDQ0VTUykgfHwg KFN0YXR1cyA9PSBFRklfTk9UX0ZPVU5EKSkgew0KPj4tICAgIEluZm8tPkluZm9UeXBlICAgID0g RUZJX1VTRVJfSU5GT19VU0FHRV9DT1VOVF9SRUNPUkQ7DQo+Pi0gICAgSW5mby0+SW5mb0F0dHJp YnMgPSBFRklfVVNFUl9JTkZPX1NUT1JBR0VfUExBVEZPUk1fTlYgfA0KPj5FRklfVVNFUl9JTkZP X1BVQkxJQyB8IEVGSV9VU0VSX0lORk9fRVhDTFVTSVZFOw0KPj4tICAgIEluZm8tPkluZm9TaXpl ICAgID0gc2l6ZW9mIChFRklfVVNFUl9JTkZPKSArIHNpemVvZg0KPj4oRUZJX1VTRVJfSU5GT19V U0FHRV9DT1VOVCk7DQo+Pi0gICAgQ29weU1lbSAoKFVJTlQ4ICopIChJbmZvICsgMSksICZVc2Fn ZUNvdW50LCBzaXplb2YNCj4+KEVGSV9VU0VSX0lORk9fVVNBR0VfQ09VTlQpKTsNCj4+LSAgICBT dGF0dXMgPSBNb2RpZnlVc2VySW5mbyAoVXNlciwgJk5ld0luZm8sIEluZm8sIEluZm8tPkluZm9T aXplKTsNCj4+LSAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+Pi0gICAgICBGcmVlUG9v bCAoSW5mbyk7DQo+Pi0gICAgICByZXR1cm4gU3RhdHVzOw0KPj4tICAgIH0NCj4+LSAgfQ0KPj4t DQo+Pi0gIEZyZWVQb29sIChJbmZvKTsNCj4+LSAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPj4tfQ0K Pj4tDQo+Pi0NCj4+LS8qKg0KPj4tICBBZGQgYSBjcmVkZW5ldGlhbCBwcm92aWRlciBpdGVtIGlu IGZvcm0uDQo+Pi0NCj4+LSAgQHBhcmFtW2luXSAgUHJvdmlkZXJHdWlkICAgICAgICBQb2ludHMg dG8gdGhlIGlkZW50aWZpciBvZiBjcmVkZW50aWFsIHByb3ZpZGVyLg0KPj4tICBAcGFyYW1baW5d ICBPcENvZGVIYW5kbGUgICAgICAgIFBvaW50cyB0byBjb250YWluZXIgZm9yIGR5bmFtaWMgY3Jl YXRlZA0KPj5vcGNvZGVzLg0KPj4tDQo+Pi0qKi8NCj4+LVZPSUQNCj4+LUFkZFByb3ZpZGVyU2Vs ZWN0aW9uICgNCj4+LSAgSU4gICAgIEVGSV9HVUlEICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICpQcm92aWRlckd1aWQsDQo+Pi0gIElOICAgICBWT0lEICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAqT3BDb2RlSGFuZGxlDQo+Pi0gICkNCj4+LXsNCj4+LSAgRUZJX0hJSV9I QU5ETEUgICAgICAgICAgICAgICAgSGlpSGFuZGxlOw0KPj4tICBFRklfU1RSSU5HX0lEICAgICAg ICAgICAgICAgICBQcm92SUQ7DQo+Pi0gIENIQVIxNiAgICAgICAgICAgICAgICAgICAgICAgICpQ cm92U3RyOw0KPj4tICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleDsNCj4+LSAg RUZJX1VTRVJfQ1JFREVOVElBTDJfUFJPVE9DT0wgKlVzZXJDcmVkZW50aWFsOw0KPj4tDQo+Pi0g IGZvciAoSW5kZXggPSAwOyBJbmRleCA8IG1Qcm92aWRlckRiLT5Db3VudDsgSW5kZXgrKykgew0K Pj4tICAgIFVzZXJDcmVkZW50aWFsID0gbVByb3ZpZGVyRGItPlByb3ZpZGVyW0luZGV4XTsNCj4+ LSAgICBpZiAoQ29tcGFyZUd1aWQgKCZVc2VyQ3JlZGVudGlhbC0+SWRlbnRpZmllciwgUHJvdmlk ZXJHdWlkKSkgew0KPj4tICAgICAgLy8NCj4+LSAgICAgIC8vIEFkZCBjcmVkZW50aWFsIHByb3Zp ZGVyIHNlbGVjdGlvbi4NCj4+LSAgICAgIC8vDQo+Pi0gICAgICBVc2VyQ3JlZGVudGlhbC0+VGl0 bGUgKFVzZXJDcmVkZW50aWFsLCAmSGlpSGFuZGxlLCAmUHJvdklEKTsNCj4+LSAgICAgIFByb3ZT dHIgPSBIaWlHZXRTdHJpbmcgKEhpaUhhbmRsZSwgUHJvdklELCBOVUxMKTsNCj4+LSAgICAgIGlm IChQcm92U3RyID09IE5VTEwpIHsNCj4+LSAgICAgICAgY29udGludWUgOw0KPj4tICAgICAgfQ0K Pj4tICAgICAgUHJvdklEICA9IEhpaVNldFN0cmluZyAobUNhbGxiYWNrSW5mby0+SGlpSGFuZGxl LCAwLCBQcm92U3RyLCBOVUxMKTsNCj4+LSAgICAgIEZyZWVQb29sIChQcm92U3RyKTsNCj4+LSAg ICAgIEhpaUNyZWF0ZUFjdGlvbk9wQ29kZSAoDQo+Pi0gICAgICAgIE9wQ29kZUhhbmRsZSwgICAg ICAgICAgICAgICAgICAgICAgICAgIC8vIENvbnRhaW5lciBmb3IgZHluYW1pYyBjcmVhdGVkIG9w Y29kZXMNCj4+LSAgICAgICAgKEVGSV9RVUVTVElPTl9JRCkoTEFCRUxfUFJPVklERVJfTkFNRSAr IEluZGV4KSwgIC8vIFF1ZXN0aW9uIElEDQo+Pi0gICAgICAgIFByb3ZJRCwgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8vIFByb21wdCB0ZXh0DQo+Pi0gICAgICAgIFNUUklOR19UT0tF TiAoU1RSX05VTExfU1RSSU5HKSwgICAgICAgIC8vIEhlbHAgdGV4dA0KPj4tICAgICAgICBFRklf SUZSX0ZMQUdfQ0FMTEJBQ0ssICAgICAgICAgICAgICAgICAvLyBRdWVzdGlvbiBmbGFnDQo+Pi0g ICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFjdGlvbiBT dHJpbmcgSUQNCj4+LSAgICAgICAgKTsNCj4+LSAgICAgIGJyZWFrOw0KPj4tICAgIH0NCj4+LSAg fQ0KPj4tfQ0KPj4tDQo+Pi0NCj4+LS8qKg0KPj4tICBBZGQgYSB1c2VybmFtZSBpdGVtIGluIGZv cm0uDQo+Pi0NCj4+LSAgQHBhcmFtW2luXSAgSW5kZXggICAgICAgICAgICBUaGUgaW5kZXggb2Yg dGhlIHVzZXIgaW4gdGhlIHVzZXIgbmFtZSBsaXN0Lg0KPj4tICBAcGFyYW1baW5dICBVc2VyICAg ICAgICAgICAgIFBvaW50cyB0byB0aGUgdXNlciBwcm9maWxlIHdob3NlIHVzZXJuYW1lIGlzDQo+ YWRkZWQuDQo+Pi0gIEBwYXJhbVtpbl0gIE9wQ29kZUhhbmRsZSAgICAgUG9pbnRzIHRvIGNvbnRh aW5lciBmb3IgZHluYW1pYyBjcmVhdGVkDQo+Pm9wY29kZXMuDQo+Pi0NCj4+LSAgQHJldHZhbCBF RklfU1VDQ0VTUyAgICAgICAgICBBZGQgYSB1c2VybmFtZSBzdWNjZXNzZnVsbHkuDQo+Pi0gIEBy ZXR2YWwgT3RoZXJzICAgICAgICAgICAgICAgRmFpbCB0byBhZGQgYSB1c2VybmFtZS4NCj4+LQ0K Pj4tKiovDQo+Pi1FRklfU1RBVFVTDQo+Pi1BZGRVc2VyU2VsZWN0aW9uICgNCj4+LSAgSU4gICAg IFVJTlQxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4LA0KPj4tICBJTiAg ICAgVVNFUl9QUk9GSUxFX0VOVFJZICAgICAgICAgICAgICAgICAgICAgKlVzZXIsDQo+Pi0gIElO ICAgICBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqT3BDb2RlSGFuZGxl DQo+Pi0gICkNCj4+LXsNCj4+LSAgRUZJX1NUUklOR19JRCBVc2VyTmFtZTsNCj4+LSAgRUZJX1NU QVRVUyAgICBTdGF0dXM7DQo+Pi0gIEVGSV9VU0VSX0lORk8gKlVzZXJJbmZvOw0KPj4tDQo+Pi0g IFVzZXJJbmZvICA9IE5VTEw7DQo+Pi0gIFN0YXR1cyAgICA9IEZpbmRVc2VySW5mb0J5VHlwZSAo VXNlciwgJlVzZXJJbmZvLA0KPj5FRklfVVNFUl9JTkZPX05BTUVfUkVDT1JEKTsNCj4+LSAgaWYg KEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPj4tICAgIHJldHVybiBTdGF0dXM7DQo+Pi0gIH0NCj4+ LQ0KPj4tICAvLw0KPj4tICAvLyBBZGQgdXNlciBuYW1lIHNlbGVjdGlvbi4NCj4+LSAgLy8NCj4+ LSAgVXNlck5hbWUgPSBIaWlTZXRTdHJpbmcgKG1DYWxsYmFja0luZm8tPkhpaUhhbmRsZSwgMCwg KEVGSV9TVFJJTkcpDQo+PihVc2VySW5mbyArIDEpLCBOVUxMKTsNCj4+LSAgaWYgKFVzZXJOYW1l ID09IDApIHsNCj4+LSAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+Pi0gIH0NCj4+ LQ0KPj4tICBIaWlDcmVhdGVHb3RvT3BDb2RlICgNCj4+LSAgICBPcENvZGVIYW5kbGUsICAgICAg ICAgICAgICAgICAgIC8vIENvbnRhaW5lciBmb3IgZHluYW1pYyBjcmVhdGVkIG9wY29kZXMNCj4+ LSAgICBGT1JNSURfUFJPVklERVJfRk9STSwgICAgICAgICAgIC8vIFRhcmdldCBGb3JtIElEDQo+ Pi0gICAgVXNlck5hbWUsICAgICAgICAgICAgICAgICAgICAgICAvLyBQcm9tcHQgdGV4dA0KPj4t ICAgIFNUUklOR19UT0tFTiAoU1RSX05VTExfU1RSSU5HKSwgLy8gSGVscCB0ZXh0DQo+Pi0gICAg RUZJX0lGUl9GTEFHX0NBTExCQUNLLCAgICAgICAgICAvLyBRdWVzdGlvbiBmbGFnDQo+Pi0gICAg KFVJTlQxNikgSW5kZXggICAgICAgICAgICAgICAgICAvLyBRdWVzdGlvbiBJRA0KPj4tICAgICk7 DQo+Pi0NCj4+LSAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPj4tfQ0KPj4tDQo+Pi0NCj4+LS8qKg0K Pj4tICBJZGVudGlmeSB0aGUgdXNlciB3aG9zZSBpZGVudGl0eSBwb2xpY3kgZG9lcyBub3QgY29u dGFpbiB0aGUgb3BlcmF0b3IgJ09SJy4NCj4+LQ0KPj4tICBAcGFyYW1baW5dICBVc2VyICAgICAg ICAgICAgIFBvaW50cyB0byB0aGUgdXNlciBwcm9maWxlLg0KPj4tDQo+Pi0gIEByZXR2YWwgRUZJ X1NVQ0NFU1MgICAgICAgICAgVGhlIHNwZWNpZmllZCB1c2VyIGlzIGlkZW50aWZpZWQgc3VjY2Vz c2Z1bGx5Lg0KPj4tICBAcmV0dmFsIE90aGVycyAgICAgICAgICAgICAgIEZhaWwgdG8gaWRlbnRp ZnkgdGhlIHVzZXIuDQo+Pi0NCj4+LSoqLw0KPj4tRUZJX1NUQVRVUw0KPj4tSWRlbnRpZnlBbmRU eXBlVXNlciAoDQo+Pi0gIElOICBVU0VSX1BST0ZJTEVfRU5UUlkgICAgICAgICAgICAgICAgICAg ICAgICAqVXNlcg0KPj4tICApDQo+Pi17DQo+Pi0gIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAg ICAgIFN0YXR1czsNCj4+LSAgRUZJX1VTRVJfSU5GTyAgICAgICAgICAgICAgICAgKklkZW50aWZ5 SW5mbzsNCj4+LSAgQk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgU3VjY2VzczsNCj4+LSAg VUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgVG90YWxMZW47DQo+Pi0gIFVJTlROICAgICAg ICAgICAgICAgICAgICAgICAgIFZhbHVlTGVuOw0KPj4tICBFRklfVVNFUl9JTkZPX0lERU5USVRZ X1BPTElDWSAqSWRlbnRpdHk7DQo+Pi0NCj4+LSAgLy8NCj4+LSAgLy8gR2V0IHVzZXIgaWRlbnRp ZnkgcG9saWN5IGluZm9ybWF0aW9uLg0KPj4tICAvLw0KPj4tICBJZGVudGlmeUluZm8gID0gTlVM TDsNCj4+LSAgU3RhdHVzICAgICAgICA9IEZpbmRVc2VySW5mb0J5VHlwZSAoVXNlciwgJklkZW50 aWZ5SW5mbywNCj4+RUZJX1VTRVJfSU5GT19JREVOVElUWV9QT0xJQ1lfUkVDT1JEKTsNCj4+LSAg aWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPj4tICAgIHJldHVybiBTdGF0dXM7DQo+Pi0gIH0N Cj4+LSAgQVNTRVJUIChJZGVudGlmeUluZm8gIT0gTlVMTCk7DQo+Pi0NCj4+LSAgLy8NCj4+LSAg Ly8gQ2hlY2sgZWFjaCBwYXJ0IG9mIGlkZW50aWZpY2F0aW9uIHBvbGljeSBleHByZXNzaW9uLg0K Pj4tICAvLw0KPj4tICBTdWNjZXNzICAgPSBGQUxTRTsNCj4+LSAgVG90YWxMZW4gID0gMDsNCj4+ LSAgd2hpbGUgKFRvdGFsTGVuIDwgSWRlbnRpZnlJbmZvLT5JbmZvU2l6ZSAtIHNpemVvZiAoRUZJ X1VTRVJfSU5GTykpIHsNCj4+LSAgICBJZGVudGl0eSAgPSAoRUZJX1VTRVJfSU5GT19JREVOVElU WV9QT0xJQ1kgKikgKChVSU5UOCAqKSAoSWRlbnRpZnlJbmZvDQo+Kw0KPj4xKSArIFRvdGFsTGVu KTsNCj4+LSAgICBWYWx1ZUxlbiAgPSBJZGVudGl0eS0+TGVuZ3RoIC0gc2l6ZW9mIChFRklfVVNF Ul9JTkZPX0lERU5USVRZX1BPTElDWSk7DQo+Pi0gICAgc3dpdGNoIChJZGVudGl0eS0+VHlwZSkg ew0KPj4tDQo+Pi0gICAgY2FzZSBFRklfVVNFUl9JTkZPX0lERU5USVRZX0ZBTFNFOg0KPj4tICAg ICAgLy8NCj4+LSAgICAgIC8vIENoZWNrIEZhbHNlIG9wdGlvbi4NCj4+LSAgICAgIC8vDQo+Pi0g ICAgICBTdWNjZXNzID0gRkFMU0U7DQo+Pi0gICAgICBicmVhazsNCj4+LQ0KPj4tICAgIGNhc2Ug RUZJX1VTRVJfSU5GT19JREVOVElUWV9UUlVFOg0KPj4tICAgICAgLy8NCj4+LSAgICAgIC8vIENo ZWNrIFRydWUgb3B0aW9uLg0KPj4tICAgICAgLy8NCj4+LSAgICAgIFN1Y2Nlc3MgPSBUUlVFOw0K Pj4tICAgICAgYnJlYWs7DQo+Pi0NCj4+LSAgICBjYXNlIEVGSV9VU0VSX0lORk9fSURFTlRJVFlf Tk9UOg0KPj4tICAgICAgLy8NCj4+LSAgICAgIC8vIENoZWNrIG5lZ2F0aXZlIG9wZXJhdGlvbi4N Cj4+LSAgICAgIC8vDQo+Pi0gICAgICBicmVhazsNCj4+LQ0KPj4tICAgIGNhc2UgRUZJX1VTRVJf SU5GT19JREVOVElUWV9BTkQ6DQo+Pi0gICAgICAvLw0KPj4tICAgICAgLy8gQ2hlY2sgYW5kIG9w ZXJhdGlvbi4NCj4+LSAgICAgIC8vDQo+Pi0gICAgICBpZiAoIVN1Y2Nlc3MpIHsNCj4+LSAgICAg ICAgcmV0dXJuIEVGSV9OT1RfUkVBRFk7DQo+Pi0gICAgICB9DQo+Pi0NCj4+LSAgICAgIFN1Y2Nl c3MgPSBGQUxTRTsNCj4+LSAgICAgIGJyZWFrOw0KPj4tDQo+Pi0gICAgY2FzZSBFRklfVVNFUl9J TkZPX0lERU5USVRZX09SOg0KPj4tICAgICAgLy8NCj4+LSAgICAgIC8vIENoZWNrIG9yIG9wZXJh dGlvbi4NCj4+LSAgICAgIC8vDQo+Pi0gICAgICBpZiAoU3VjY2Vzcykgew0KPj4tICAgICAgICBy ZXR1cm4gRUZJX1NVQ0NFU1M7DQo+Pi0gICAgICB9DQo+Pi0gICAgICBicmVhazsNCj4+LQ0KPj4t ICAgIGNhc2UgRUZJX1VTRVJfSU5GT19JREVOVElUWV9DUkVERU5USUFMX1RZUEU6DQo+Pi0gICAg ICAvLw0KPj4tICAgICAgLy8gQ2hlY2sgY3JlZGVudGlhbCBwcm92aWRlciBieSB0eXBlLg0KPj4t ICAgICAgLy8NCj4+LSAgICAgIGJyZWFrOw0KPj4tDQo+Pi0gICAgY2FzZSBFRklfVVNFUl9JTkZP X0lERU5USVRZX0NSRURFTlRJQUxfUFJPVklERVI6DQo+Pi0gICAgICAvLw0KPj4tICAgICAgLy8g Q2hlY2sgY3JlZGVudGlhbCBwcm92aWRlciBieSBJRC4NCj4+LSAgICAgIC8vDQo+Pi0gICAgICBp ZiAoVmFsdWVMZW4gIT0gc2l6ZW9mIChFRklfR1VJRCkpIHsNCj4+LSAgICAgICAgcmV0dXJuIEVG SV9JTlZBTElEX1BBUkFNRVRFUjsNCj4+LSAgICAgIH0NCj4+LQ0KPj4tICAgICAgU3RhdHVzID0g SWRlbnRpZnlCeVByb3ZpZGVySWQgKFVzZXIsIChFRklfR1VJRCAqKSAoSWRlbnRpdHkgKyAxKSk7 DQo+Pi0gICAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+Pi0gICAgICAgIHJldHVybiBT dGF0dXM7DQo+Pi0gICAgICB9DQo+Pi0NCj4+LSAgICAgIFN1Y2Nlc3MgPSBUUlVFOw0KPj4tICAg ICAgYnJlYWs7DQo+Pi0NCj4+LSAgICBkZWZhdWx0Og0KPj4tICAgICAgcmV0dXJuIEVGSV9JTlZB TElEX1BBUkFNRVRFUjsNCj4+LSAgICAgIGJyZWFrOw0KPj4tICAgIH0NCj4+LQ0KPj4tICAgIFRv dGFsTGVuICs9IElkZW50aXR5LT5MZW5ndGg7DQo+Pi0gIH0NCj4+LQ0KPj4tICBpZiAoVG90YWxM ZW4gIT0gSWRlbnRpZnlJbmZvLT5JbmZvU2l6ZSAtIHNpemVvZiAoRUZJX1VTRVJfSU5GTykpIHsN Cj4+LSAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPj4tICB9DQo+Pi0NCj4+LSAg aWYgKCFTdWNjZXNzKSB7DQo+Pi0gICAgcmV0dXJuIEVGSV9OT1RfUkVBRFk7DQo+Pi0gIH0NCj4+ LQ0KPj4tICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+Pi19DQo+Pi0NCj4+LQ0KPj4tLyoqDQo+Pi0g IElkZW50aWZ5IHRoZSB1c2VyIHdob3NlIGlkZW50aXR5IHBvbGljeSBkb2VzIG5vdCBjb250YWlu IHRoZSBvcGVyYXRvciAnQU5EJy4NCj4+LQ0KPj4tICBAcGFyYW1baW5dICBVc2VyICAgICAgICAg ICAgIFBvaW50cyB0byB0aGUgdXNlciBwcm9maWxlLg0KPj4tDQo+Pi0gIEByZXR2YWwgRUZJX1NV Q0NFU1MgICAgICAgICAgVGhlIHNwZWNpZmllZCB1c2VyIGlzIGlkZW50aWZpZWQgc3VjY2Vzc2Z1 bGx5Lg0KPj4tICBAcmV0dmFsIE90aGVycyAgICAgICAgICAgICAgIEZhaWwgdG8gaWRlbnRpZnkg dGhlIHVzZXIuDQo+Pi0NCj4+LSoqLw0KPj4tRUZJX1NUQVRVUw0KPj4tSWRlbnRpZnlPclR5cGVV c2VyICgNCj4+LSAgSU4gIFVTRVJfUFJPRklMRV9FTlRSWSAgICAgICAgICAgICAgICAgICAgICAg ICpVc2VyDQo+Pi0gICkNCj4+LXsNCj4+LSAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAg U3RhdHVzOw0KPj4tICBFRklfVVNFUl9JTkZPICAgICAgICAgICAgICAgICAqSWRlbnRpZnlJbmZv Ow0KPj4tICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICBUb3RhbExlbjsNCj4+LSAgVUlO VE4gICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWVMZW47DQo+Pi0gIEVGSV9VU0VSX0lORk9f SURFTlRJVFlfUE9MSUNZICpJZGVudGl0eTsNCj4+LSAgVk9JRCAgICAgICAgICAgICAgICAgICAg ICAgICAgKlN0YXJ0T3BDb2RlSGFuZGxlOw0KPj4tICBWT0lEICAgICAgICAgICAgICAgICAgICAg ICAgICAqRW5kT3BDb2RlSGFuZGxlOw0KPj4tICBFRklfSUZSX0dVSURfTEFCRUwgICAgICAgICAg ICAqU3RhcnRMYWJlbDsNCj4+LSAgRUZJX0lGUl9HVUlEX0xBQkVMICAgICAgICAgICAgKkVuZExh YmVsOw0KPj4tDQo+Pi0gIC8vDQo+Pi0gIC8vIEdldCB1c2VyIGlkZW50aWZ5IHBvbGljeSBpbmZv cm1hdGlvbi4NCj4+LSAgLy8NCj4+LSAgSWRlbnRpZnlJbmZvICA9IE5VTEw7DQo+Pi0gIFN0YXR1 cyAgICAgICAgPSBGaW5kVXNlckluZm9CeVR5cGUgKFVzZXIsICZJZGVudGlmeUluZm8sDQo+PkVG SV9VU0VSX0lORk9fSURFTlRJVFlfUE9MSUNZX1JFQ09SRCk7DQo+Pi0gIGlmIChFRklfRVJST1Ig KFN0YXR1cykpIHsNCj4+LSAgICByZXR1cm4gU3RhdHVzOw0KPj4tICB9DQo+Pi0gIEFTU0VSVCAo SWRlbnRpZnlJbmZvICE9IE5VTEwpOw0KPj4tDQo+Pi0gIC8vDQo+Pi0gIC8vIEluaXRpYWxpemUg dGhlIGNvbnRhaW5lciBmb3IgZHluYW1pYyBvcGNvZGVzLg0KPj4tICAvLw0KPj4tICBTdGFydE9w Q29kZUhhbmRsZSA9IEhpaUFsbG9jYXRlT3BDb2RlSGFuZGxlICgpOw0KPj4tICBBU1NFUlQgKFN0 YXJ0T3BDb2RlSGFuZGxlICE9IE5VTEwpOw0KPj4tDQo+Pi0gIEVuZE9wQ29kZUhhbmRsZSA9IEhp aUFsbG9jYXRlT3BDb2RlSGFuZGxlICgpOw0KPj4tICBBU1NFUlQgKEVuZE9wQ29kZUhhbmRsZSAh PSBOVUxMKTsNCj4+LQ0KPj4tICAvLw0KPj4tICAvLyBDcmVhdGUgSGlpIEV4dGVuZCBMYWJlbCBP cENvZGUuDQo+Pi0gIC8vDQo+Pi0gIFN0YXJ0TGFiZWwgPSAoRUZJX0lGUl9HVUlEX0xBQkVMICop IEhpaUNyZWF0ZUd1aWRPcENvZGUgKA0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFN0YXJ0T3BDb2RlSGFuZGxlLA0KPj4tICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICZnRWZpSWZyVGlhbm9HdWlkLA0KPj4tICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIE5VTEwsDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc2l6ZW9mIChFRklfSUZSX0dVSURfTEFCRUwpDQo+Pi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4+LSAgU3RhcnRMYWJlbC0+RXh0ZW5k T3BDb2RlICA9IEVGSV9JRlJfRVhURU5EX09QX0xBQkVMOw0KPj4tICBTdGFydExhYmVsLT5OdW1i ZXIgICAgICAgID0gTEFCRUxfUFJPVklERVJfTkFNRTsNCj4+LQ0KPj4tICBFbmRMYWJlbCA9IChF RklfSUZSX0dVSURfTEFCRUwgKikgSGlpQ3JlYXRlR3VpZE9wQ29kZSAoDQo+Pi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVuZE9wQ29kZUhhbmRsZSwNCj4+LSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmdFZmlJZnJUaWFub0d1aWQsDQo+Pi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsDQo+Pi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiAoRUZJX0lGUl9HVUlEX0xBQkVMKQ0KPj4t ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KPj4tICBFbmRMYWJlbC0+ RXh0ZW5kT3BDb2RlICA9IEVGSV9JRlJfRVhURU5EX09QX0xBQkVMOw0KPj4tICBFbmRMYWJlbC0+ TnVtYmVyICAgICAgICA9IExBQkVMX0VORDsNCj4+LQ0KPj4tICAvLw0KPj4tICAvLyBBZGQgdGhl IHByb3ZpZGVycyB0aGF0IGV4aXN0cyBpbiB0aGUgdXNlcidzIHBvbGljeS4NCj4+LSAgLy8NCj4+ LSAgVG90YWxMZW4gPSAwOw0KPj4tICB3aGlsZSAoVG90YWxMZW4gPCBJZGVudGlmeUluZm8tPklu Zm9TaXplIC0gc2l6ZW9mIChFRklfVVNFUl9JTkZPKSkgew0KPj4tICAgIElkZW50aXR5ICA9IChF RklfVVNFUl9JTkZPX0lERU5USVRZX1BPTElDWSAqKSAoKFVJTlQ4ICopIChJZGVudGlmeUluZm8N Cj4rDQo+PjEpICsgVG90YWxMZW4pOw0KPj4tICAgIFZhbHVlTGVuICA9IElkZW50aXR5LT5MZW5n dGggLSBzaXplb2YgKEVGSV9VU0VSX0lORk9fSURFTlRJVFlfUE9MSUNZKTsNCj4+LSAgICBpZiAo SWRlbnRpdHktPlR5cGUgPT0gRUZJX1VTRVJfSU5GT19JREVOVElUWV9DUkVERU5USUFMX1BST1ZJ REVSKQ0KPnsNCj4+LSAgICAgIEFkZFByb3ZpZGVyU2VsZWN0aW9uICgoRUZJX0dVSUQgKikgKElk ZW50aXR5ICsgMSksIFN0YXJ0T3BDb2RlSGFuZGxlKTsNCj4+LSAgICB9DQo+Pi0NCj4+LSAgICBU b3RhbExlbiArPSBJZGVudGl0eS0+TGVuZ3RoOw0KPj4tICB9DQo+Pi0NCj4+LSAgSGlpVXBkYXRl Rm9ybSAoDQo+Pi0gICAgbUNhbGxiYWNrSW5mby0+SGlpSGFuZGxlLCAvLyBISUkgaGFuZGxlDQo+ Pi0gICAgJmdVc2VySWRlbnRpZnlNYW5hZ2VyR3VpZCwvLyBGb3Jtc2V0IEdVSUQNCj4+LSAgICBG T1JNSURfUFJPVklERVJfRk9STSwgICAgIC8vIEZvcm0gSUQNCj4+LSAgICBTdGFydE9wQ29kZUhh bmRsZSwgICAgICAgIC8vIExhYmVsIGZvciB3aGVyZSB0byBpbnNlcnQgb3Bjb2Rlcw0KPj4tICAg IEVuZE9wQ29kZUhhbmRsZSAgICAgICAgICAgLy8gUmVwbGFjZSBkYXRhDQo+Pi0gICAgKTsNCj4+ LQ0KPj4tICBIaWlGcmVlT3BDb2RlSGFuZGxlIChTdGFydE9wQ29kZUhhbmRsZSk7DQo+Pi0gIEhp aUZyZWVPcENvZGVIYW5kbGUgKEVuZE9wQ29kZUhhbmRsZSk7DQo+Pi0NCj4+LSAgcmV0dXJuIEVG SV9TVUNDRVNTOw0KPj4tfQ0KPj4tDQo+Pi0NCj4+LS8qKg0KPj4tICBUaGlzIGZ1bmN0aW9uIHBy b2Nlc3NlcyB0aGUgcmVzdWx0cyBvZiBjaGFuZ2VzIGluIGNvbmZpZ3VyYXRpb24uDQo+Pi0NCj4+ LSAgQHBhcmFtICBUaGlzICAgICAgICAgICAgICAgICAgIFBvaW50cyB0byB0aGUgRUZJX0hJSV9D T05GSUdfQUNDRVNTX1BST1RPQ09MLg0KPj4tICBAcGFyYW0gIEFjdGlvbiAgICAgICAgICAgICAg ICAgU3BlY2lmaWVzIHRoZSB0eXBlIG9mIGFjdGlvbiB0YWtlbiBieSB0aGUgYnJvd3Nlci4NCj4+ LSAgQHBhcmFtICBRdWVzdGlvbklkICAgICAgICAgICAgIEEgdW5pcXVlIHZhbHVlIHdoaWNoIGlz IHNlbnQgdG8gdGhlIG9yaWdpbmFsDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBleHBvcnRpbmcgZHJpdmVyIHNvIHRoYXQgaXQgY2FuIGlkZW50aWZ5IHRoZSB0eXBlDQo+Pi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiBkYXRhIHRvIGV4cGVjdC4NCj4+LSAg QHBhcmFtICBUeXBlICAgICAgICAgICAgICAgICAgIFRoZSB0eXBlIG9mIHZhbHVlIGZvciB0aGUg cXVlc3Rpb24uDQo+Pi0gIEBwYXJhbSAgVmFsdWUgICAgICAgICAgICAgICAgICBBIHBvaW50ZXIg dG8gdGhlIGRhdGEgYmVpbmcgc2VudCB0byB0aGUgb3JpZ2luYWwNCj4+LSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGV4cG9ydGluZyBkcml2ZXIuDQo+Pi0gIEBwYXJhbSAgQWN0aW9u UmVxdWVzdCAgICAgICAgICBPbiByZXR1cm4sIHBvaW50cyB0byB0aGUgYWN0aW9uIHJlcXVlc3Rl ZCBieQ0KPj50aGUNCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNr IGZ1bmN0aW9uLg0KPj4tDQo+Pi0gIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICBUaGUg Y2FsbGJhY2sgc3VjY2Vzc2Z1bGx5IGhhbmRsZWQgdGhlIGFjdGlvbi4NCj4+LSAgQHJldHZhbCBP dGhlcnMgICAgICAgICAgICAgICAgIEZhaWwgdG8gaGFuZGxlIHRoZSBhY3Rpb24uDQo+Pi0NCj4+ LSoqLw0KPj4tRUZJX1NUQVRVUw0KPj4tRUZJQVBJDQo+Pi1Vc2VySWRlbnRpZnlNYW5hZ2VyQ2Fs bGJhY2sgKA0KPj4tICBJTiAgQ09OU1QgRUZJX0hJSV9DT05GSUdfQUNDRVNTX1BST1RPQ09MICAg ICAgKlRoaXMsDQo+Pi0gIElOICBFRklfQlJPV1NFUl9BQ1RJT04gICAgICAgICAgICAgICAgICAg ICAgICBBY3Rpb24sDQo+Pi0gIElOICBFRklfUVVFU1RJT05fSUQgICAgICAgICAgICAgICAgICAg ICAgICAgICBRdWVzdGlvbklkLA0KPj4tICBJTiAgVUlOVDggICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgVHlwZSwNCj4+LSAgSU4gIEVGSV9JRlJfVFlQRV9WQUxVRSAgICAgICAg ICAgICAgICAgICAgICAgICpWYWx1ZSwNCj4+LSAgT1VUIEVGSV9CUk9XU0VSX0FDVElPTl9SRVFV RVNUICAgICAgICAgICAgICAgICpBY3Rpb25SZXF1ZXN0DQo+Pi0gICkNCj4+LXsNCj4+LSAgRUZJ X1NUQVRVUyAgICAgICAgICAgICAgU3RhdHVzOw0KPj4tICBVU0VSX1BST0ZJTEVfRU5UUlkgICAg ICAqVXNlcjsNCj4+LSAgVUlOVDggICAgICAgICAgICAgICAgICAgUG9saWN5VHlwZTsNCj4+LSAg VUlOVDE2ICAgICAgICAgICAgICAgICAgSW5kZXg7DQo+Pi0gIFZPSUQgICAgICAgICAgICAgICAg ICAgICpTdGFydE9wQ29kZUhhbmRsZTsNCj4+LSAgVk9JRCAgICAgICAgICAgICAgICAgICAgKkVu ZE9wQ29kZUhhbmRsZTsNCj4+LSAgRUZJX0lGUl9HVUlEX0xBQkVMICAgICAgKlN0YXJ0TGFiZWw7 DQo+Pi0gIEVGSV9JRlJfR1VJRF9MQUJFTCAgICAgICpFbmRMYWJlbDsNCj4+LQ0KPj4tICBTdGF0 dXMgPSBFRklfU1VDQ0VTUzsNCj4+LQ0KPj4tICBzd2l0Y2ggKEFjdGlvbikgew0KPj4tICBjYXNl IEVGSV9CUk9XU0VSX0FDVElPTl9GT1JNX09QRU46DQo+Pi0gICAgew0KPj4tICAgICAgLy8NCj4+ LSAgICAgIC8vIFVwZGF0ZSB1c2VyIEZvcm0gd2hlbiB1c2VyIEZvcm0gaXMgb3BlbmVkLg0KPj4t ICAgICAgLy8gVGhpcyB3aWxsIGJlIGRvbmUgb25seSBpbiBGT1JNX09QRU4gQ2FsbEJhY2sgb2Yg cXVlc3Rpb24gd2l0aA0KPj5GT1JNX09QRU5fUVVFU1RJT05fSUQgZnJvbSB1c2VyIEZvcm0uDQo+ Pi0gICAgICAvLw0KPj4tICAgICAgaWYgKFF1ZXN0aW9uSWQgIT0gRk9STV9PUEVOX1FVRVNUSU9O X0lEKSB7DQo+Pi0gICAgICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4+LSAgICAgIH0NCj4+LQ0K Pj4tICAgICAgLy8NCj4+LSAgICAgIC8vIEluaXRpYWxpemUgdGhlIGNvbnRhaW5lciBmb3IgZHlu YW1pYyBvcGNvZGVzLg0KPj4tICAgICAgLy8NCj4+LSAgICAgIFN0YXJ0T3BDb2RlSGFuZGxlID0g SGlpQWxsb2NhdGVPcENvZGVIYW5kbGUgKCk7DQo+Pi0gICAgICBBU1NFUlQgKFN0YXJ0T3BDb2Rl SGFuZGxlICE9IE5VTEwpOw0KPj4tDQo+Pi0gICAgICBFbmRPcENvZGVIYW5kbGUgPSBIaWlBbGxv Y2F0ZU9wQ29kZUhhbmRsZSAoKTsNCj4+LSAgICAgIEFTU0VSVCAoRW5kT3BDb2RlSGFuZGxlICE9 IE5VTEwpOw0KPj4tDQo+Pi0gICAgICAvLw0KPj4tICAgICAgLy8gQ3JlYXRlIEhpaSBFeHRlbmQg TGFiZWwgT3BDb2RlLg0KPj4tICAgICAgLy8NCj4+LSAgICAgIFN0YXJ0TGFiZWwgPSAoRUZJX0lG Ul9HVUlEX0xBQkVMICopIEhpaUNyZWF0ZUd1aWRPcENvZGUgKA0KPj4tICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGFydE9wQ29kZUhhbmRsZSwNCj4+LSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmdFZmlJZnJUaWFub0d1aWQs DQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsDQo+ Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiAoRUZJ X0lGUl9HVUlEX0xBQkVMKQ0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICApOw0KPj4tICAgICAgU3RhcnRMYWJlbC0+RXh0ZW5kT3BDb2RlICA9IEVGSV9JRlJf RVhURU5EX09QX0xBQkVMOw0KPj4tICAgICAgU3RhcnRMYWJlbC0+TnVtYmVyICAgICAgICA9IExB QkVMX1VTRVJfTkFNRTsNCj4+LQ0KPj4tICAgICAgRW5kTGFiZWwgPSAoRUZJX0lGUl9HVUlEX0xB QkVMICopIEhpaUNyZWF0ZUd1aWRPcENvZGUgKA0KPj4tICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRW5kT3BDb2RlSGFuZGxlLA0KPj4tICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJmdFZmlJZnJUaWFub0d1aWQsDQo+Pi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLA0KPj4tICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mIChFRklfSUZSX0dVSURfTEFCRUwpDQo+ Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KPj4tICAgICAg RW5kTGFiZWwtPkV4dGVuZE9wQ29kZSAgPSBFRklfSUZSX0VYVEVORF9PUF9MQUJFTDsNCj4+LSAg ICAgIEVuZExhYmVsLT5OdW1iZXIgICAgICAgID0gTEFCRUxfRU5EOw0KPj4tDQo+Pi0gICAgICAv Lw0KPj4tICAgICAgLy8gQWRkIGFsbCB0aGUgdXNlciBwcm9maWxlIGluIHRoZSB1c2VyIHByb2Zp bGUgZGF0YWJhc2UuDQo+Pi0gICAgICAvLw0KPj4tICAgICAgZm9yIChJbmRleCA9IDA7IEluZGV4 IDwgbVVzZXJQcm9maWxlRGItPlVzZXJQcm9maWxlTnVtOyBJbmRleCsrKSB7DQo+Pi0gICAgICAg IFVzZXIgPSAoVVNFUl9QUk9GSUxFX0VOVFJZICopIG1Vc2VyUHJvZmlsZURiLT5Vc2VyUHJvZmls ZVtJbmRleF07DQo+Pi0gICAgICAgIEFkZFVzZXJTZWxlY3Rpb24gKChVSU5UMTYpKExBQkVMX1VT RVJfTkFNRSArIEluZGV4KSwgVXNlciwNCj4+U3RhcnRPcENvZGVIYW5kbGUpOw0KPj4tICAgICAg fQ0KPj4tDQo+Pi0gICAgICBIaWlVcGRhdGVGb3JtICgNCj4+LSAgICAgICAgbUNhbGxiYWNrSW5m by0+SGlpSGFuZGxlLCAvLyBISUkgaGFuZGxlDQo+Pi0gICAgICAgICZnVXNlcklkZW50aWZ5TWFu YWdlckd1aWQsLy8gRm9ybXNldCBHVUlEDQo+Pi0gICAgICAgIEZPUk1JRF9VU0VSX0ZPUk0sICAg ICAgICAgLy8gRm9ybSBJRA0KPj4tICAgICAgICBTdGFydE9wQ29kZUhhbmRsZSwgICAgICAgIC8v IExhYmVsIGZvciB3aGVyZSB0byBpbnNlcnQgb3Bjb2Rlcw0KPj4tICAgICAgICBFbmRPcENvZGVI YW5kbGUgICAgICAgICAgIC8vIFJlcGxhY2UgZGF0YQ0KPj4tICAgICAgICApOw0KPj4tDQo+Pi0g ICAgICBIaWlGcmVlT3BDb2RlSGFuZGxlIChTdGFydE9wQ29kZUhhbmRsZSk7DQo+Pi0gICAgICBI aWlGcmVlT3BDb2RlSGFuZGxlIChFbmRPcENvZGVIYW5kbGUpOw0KPj4tDQo+Pi0gICAgICByZXR1 cm4gRUZJX1NVQ0NFU1M7DQo+Pi0gICAgfQ0KPj4tICAgIGJyZWFrOw0KPj4tDQo+Pi0gIGNhc2Ug RUZJX0JST1dTRVJfQUNUSU9OX0ZPUk1fQ0xPU0U6DQo+Pi0gICAgU3RhdHVzID0gRUZJX1NVQ0NF U1M7DQo+Pi0gICAgYnJlYWs7DQo+Pi0NCj4+LSAgY2FzZSBFRklfQlJPV1NFUl9BQ1RJT05fQ0hB TkdFRDoNCj4+LSAgICBpZiAoUXVlc3Rpb25JZCA+PSBMQUJFTF9QUk9WSURFUl9OQU1FKSB7DQo+ Pi0gICAgICAvLw0KPj4tICAgICAgLy8gUXVlc3Rpb25JZCBjb21lcyBmcm9tIHRoZSBzZWNvbmQg Rm9ybSAoU2VsZWN0IGEgQ3JlZGVudGlhbCBQcm92aWRlcg0KPmlmDQo+PmlkZW50aXR5DQo+Pi0g ICAgICAvLyBwb2xpY3kgaXMgT1IgdHlwZSkuIElkZW50aWZ5IHRoZSB1c2VyIGJ5IHRoZSBzZWxl Y3RlZCBwcm92aWRlci4NCj4+LSAgICAgIC8vDQo+Pi0gICAgICBTdGF0dXMgPSBJZGVudGlmeUJ5 UHJvdmlkZXJJZCAobUN1cnJlbnRVc2VyLCAmbVByb3ZpZGVyRGItDQo+Pj5Qcm92aWRlcltRdWVz dGlvbklkICYgMHhGRkZdLT5JZGVudGlmaWVyKTsNCj4+LSAgICAgIGlmIChTdGF0dXMgPT0gRUZJ X1NVQ0NFU1MpIHsNCj4+LSAgICAgICAgbUlkZW50aWZpZWQgICAgID0gVFJVRTsNCj4+LSAgICAg ICAgKkFjdGlvblJlcXVlc3QgID0gRUZJX0JST1dTRVJfQUNUSU9OX1JFUVVFU1RfRVhJVDsNCj4+ LSAgICAgIH0NCj4+LSAgICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4+LSAgICB9DQo+Pi0gICAg YnJlYWs7DQo+Pi0NCj4+LSAgY2FzZSBFRklfQlJPV1NFUl9BQ1RJT05fQ0hBTkdJTkc6DQo+Pi0g ICAgLy8NCj4+LSAgICAvLyBRdWVzdGlvbklkIGNvbWVzIGZyb20gdGhlIGZpcnN0IEZvcm0gKFNl bGVjdCBhIHVzZXIgdG8gaWRlbnRpZnkpLg0KPj4tICAgIC8vDQo+Pi0gICAgaWYgKFF1ZXN0aW9u SWQgPj0gTEFCRUxfUFJPVklERVJfTkFNRSkgew0KPj4tICAgICAgcmV0dXJuIEVGSV9TVUNDRVNT Ow0KPj4tICAgIH0NCj4+LQ0KPj4tICAgIFVzZXIgICA9IChVU0VSX1BST0ZJTEVfRU5UUlkgKikg bVVzZXJQcm9maWxlRGItDQo+Pj5Vc2VyUHJvZmlsZVtRdWVzdGlvbklkICYgMHhGRkZdOw0KPj4t ICAgIFN0YXR1cyA9IEdldElkZW50aWZ5VHlwZSAoVXNlciwgJlBvbGljeVR5cGUpOw0KPj4tICAg IGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4+LSAgICAgIHJldHVybiBTdGF0dXM7DQo+Pi0g ICAgfQ0KPj4tDQo+Pi0gICAgaWYgKFBvbGljeVR5cGUgPT0gRUZJX1VTRVJfSU5GT19JREVOVElU WV9PUikgew0KPj4tICAgICAgLy8NCj4+LSAgICAgIC8vIElkZW50aWZ5IHRoZSB1c2VyIGJ5ICJP UiIgbG9naWNhbC4NCj4+LSAgICAgIC8vDQo+Pi0gICAgICBTdGF0dXMgPSBJZGVudGlmeU9yVHlw ZVVzZXIgKFVzZXIpOw0KPj4tICAgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPj4tICAg ICAgICByZXR1cm4gU3RhdHVzOw0KPj4tICAgICAgfQ0KPj4tDQo+Pi0gICAgICBtQ3VycmVudFVz ZXIgPSAoRUZJX1VTRVJfUFJPRklMRV9IQU5ETEUpIFVzZXI7DQo+Pi0gICAgfSBlbHNlIHsNCj4+ LSAgICAgIC8vDQo+Pi0gICAgICAvLyBJZGVudGlmeSB0aGUgdXNlciBieSAiQU5EIiBsb2dpY2Fs Lg0KPj4tICAgICAgLy8NCj4+LSAgICAgIFN0YXR1cyA9IElkZW50aWZ5QW5kVHlwZVVzZXIgKFVz ZXIpOw0KPj4tICAgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPj4tICAgICAgICByZXR1 cm4gU3RhdHVzOw0KPj4tICAgICAgfQ0KPj4tDQo+Pi0gICAgICBtQ3VycmVudFVzZXIgICAgPSAo RUZJX1VTRVJfUFJPRklMRV9IQU5ETEUpIFVzZXI7DQo+Pi0gICAgICBtSWRlbnRpZmllZCAgICAg PSBUUlVFOw0KPj4tICAgICAgaWYgKFR5cGUgPT0gRUZJX0lGUl9UWVBFX1JFRikgew0KPj4tICAg ICAgICBWYWx1ZS0+cmVmLkZvcm1JZCA9IEZPUk1JRF9JTlZBTElEX0ZPUk07DQo+Pi0gICAgICB9 DQo+Pi0gICAgfQ0KPj4tICBicmVhazsNCj4+LQ0KPj4tICBkZWZhdWx0Og0KPj4tICAgIC8vDQo+ Pi0gICAgLy8gQWxsIG90aGVyIGFjdGlvbiByZXR1cm4gdW5zdXBwb3J0ZWQuDQo+Pi0gICAgLy8N Cj4+LSAgICBTdGF0dXMgPSBFRklfVU5TVVBQT1JURUQ7DQo+Pi0gICAgYnJlYWs7DQo+Pi0gIH0N Cj4+LQ0KPj4tDQo+Pi0gIHJldHVybiBTdGF0dXM7DQo+Pi19DQo+Pi0NCj4+LQ0KPj4tLyoqDQo+ Pi0gIFRoaXMgZnVuY3Rpb24gY29uc3RydWN0IHVzZXIgcHJvZmlsZSBkYXRhYmFzZSBmcm9tIHVz ZXIgZGF0YSBzYXZlZCBpbiB0aGUNCj4+Rmxhc2guDQo+Pi0gIElmIG5vIHVzZXIgaXMgZm91bmQg aW4gRmxhc2gsIGFkZCBvbmUgZGVmYXVsdCB1c2VyICJhZG1pbmlzdHJhdG9yIiBpbiB0aGUgdXNl cg0KPj4tICBwcm9maWxlIGRhdGFiYXNlLg0KPj4tDQo+Pi0gIEByZXR2YWwgRUZJX1NVQ0NFU1Mg ICAgICAgICAgICBJbml0IHVzZXIgcHJvZmlsZSBkYXRhYmFzZSBzdWNjZXNzZnVsbHkuDQo+Pi0g IEByZXR2YWwgT3RoZXJzICAgICAgICAgICAgICAgICBGYWlsIHRvIGluaXQgdXNlciBwcm9maWxl IGRhdGFiYXNlLg0KPj4tDQo+Pi0qKi8NCj4+LUVGSV9TVEFUVVMNCj4+LUluaXRVc2VyUHJvZmls ZURiICgNCj4+LSAgVk9JRA0KPj4tICApDQo+Pi17DQo+Pi0gIEVGSV9TVEFUVVMgIFN0YXR1czsN Cj4+LSAgVUlOVDggICAgICAgKlZhckRhdGE7DQo+Pi0gIFVJTlROICAgICAgIFZhclNpemU7DQo+ Pi0gIFVJTlROICAgICAgIEN1clZhclNpemU7DQo+Pi0gIENIQVIxNiAgICAgIFZhck5hbWVbMTBd Ow0KPj4tICBVSU5UTiAgICAgICBJbmRleDsNCj4+LSAgVUlOVDMyICAgICAgVmFyQXR0cjsNCj4+ LQ0KPj4tICBpZiAobVVzZXJQcm9maWxlRGIgIT0gTlVMTCkgew0KPj4tICAgIC8vDQo+Pi0gICAg Ly8gVGhlIHVzZXIgcHJvZmlsZXMgaGFkIGJlZW4gYWxyZWFkeSBpbml0aWFsaXplZC4NCj4+LSAg ICAvLw0KPj4tICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4+LSAgfQ0KPj4tDQo+Pi0gIC8vDQo+ Pi0gIC8vIEluaXQgdXNlciBwcm9maWxlIGRhdGFiYXNlIHN0cnVjdHVyZS4NCj4+LSAgLy8NCj4+ LSAgaWYgKCFFeHBhbmRVc2VybVVzZXJQcm9maWxlRGIgKCkpIHsNCj4+LSAgICByZXR1cm4gRUZJ X09VVF9PRl9SRVNPVVJDRVM7DQo+Pi0gIH0NCj4+LQ0KPj4tICBDdXJWYXJTaXplID0gREVGQVVM VF9QUk9GSUxFX1NJWkU7DQo+Pi0gIFZhckRhdGEgICAgPSBBbGxvY2F0ZVplcm9Qb29sIChDdXJW YXJTaXplKTsNCj4+LSAgaWYgKFZhckRhdGEgPT0gTlVMTCkgew0KPj4tICAgIHJldHVybiBFRklf T1VUX09GX1JFU09VUkNFUzsNCj4+LSAgfQ0KPj4tDQo+Pi0gIC8vDQo+Pi0gIC8vIEdldCBhbGwg dXNlciBwcm9pZmxlIGVudHJpZXMuDQo+Pi0gIC8vDQo+Pi0gIEluZGV4ID0gMDsNCj4+LSAgd2hp bGUgKFRSVUUpIHsNCj4+LSAgICAvLw0KPj4tICAgIC8vIEdldCB2YXJpYWJsZSBuYW1lLg0KPj4t ICAgIC8vDQo+Pi0gICAgVW5pY29kZVNQcmludCAoDQo+Pi0gICAgICBWYXJOYW1lLA0KPj4tICAg ICAgc2l6ZW9mIChWYXJOYW1lKSwNCj4+LSAgICAgIEwiVXNlciUwNHgiLA0KPj4tICAgICAgSW5k ZXgNCj4+LSAgICAgICk7DQo+Pi0gICAgSW5kZXgrKzsNCj4+LQ0KPj4tICAgIC8vDQo+Pi0gICAg Ly8gR2V0IHZhcmlhYmxlIHZhbHVlLg0KPj4tICAgIC8vDQo+Pi0gICAgVmFyU2l6ZSA9IEN1clZh clNpemU7DQo+Pi0gICAgU3RhdHVzICA9IGdSVC0+R2V0VmFyaWFibGUgKFZhck5hbWUsICZnVXNl cklkZW50aWZ5TWFuYWdlckd1aWQsDQo+PiZWYXJBdHRyLCAmVmFyU2l6ZSwgVmFyRGF0YSk7DQo+ Pi0gICAgaWYgKFN0YXR1cyA9PSBFRklfQlVGRkVSX1RPT19TTUFMTCkgew0KPj4tICAgICAgRnJl ZVBvb2wgKFZhckRhdGEpOw0KPj4tICAgICAgVmFyRGF0YSA9IEFsbG9jYXRlUG9vbCAoVmFyU2l6 ZSk7DQo+Pi0gICAgICBpZiAoVmFyRGF0YSA9PSBOVUxMKSB7DQo+Pi0gICAgICAgIFN0YXR1cyA9 IEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPj4tICAgICAgICBicmVhazsNCj4+LSAgICAgIH0NCj4+ LQ0KPj4tICAgICAgQ3VyVmFyU2l6ZSAgPSBWYXJTaXplOw0KPj4tICAgICAgU3RhdHVzICAgICAg PSBnUlQtPkdldFZhcmlhYmxlIChWYXJOYW1lLCAmZ1VzZXJJZGVudGlmeU1hbmFnZXJHdWlkLA0K Pj4mVmFyQXR0ciwgJlZhclNpemUsIFZhckRhdGEpOw0KPj4tICAgIH0NCj4+LQ0KPj4tICAgIGlm IChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4+LSAgICAgIGlmIChTdGF0dXMgPT0gRUZJX05PVF9G T1VORCkgew0KPj4tICAgICAgICBTdGF0dXMgPSBFRklfU1VDQ0VTUzsNCj4+LSAgICAgIH0NCj4+ LSAgICAgIGJyZWFrOw0KPj4tICAgIH0NCj4+LQ0KPj4tICAgIC8vDQo+Pi0gICAgLy8gQ2hlY2sg dmFyaWFibGUgYXR0cmlidXRlcy4NCj4+LSAgICAvLw0KPj4tICAgIGlmIChWYXJBdHRyICE9IChF RklfVkFSSUFCTEVfTk9OX1ZPTEFUSUxFIHwNCj4+RUZJX1ZBUklBQkxFX0JPT1RTRVJWSUNFX0FD Q0VTUykpIHsNCj4+LSAgICAgIFN0YXR1cyA9IGdSVC0+U2V0VmFyaWFibGUgKFZhck5hbWUsICZn VXNlcklkZW50aWZ5TWFuYWdlckd1aWQsDQo+PlZhckF0dHIsIDAsIE5VTEwpOw0KPj4tICAgICAg Y29udGludWU7DQo+Pi0gICAgfQ0KPj4tDQo+Pi0gICAgLy8NCj4+LSAgICAvLyBBZGQgdXNlciBw cm9maWxlIHRvIHRoZSB1c2VyIHByb2ZpbGUgZGF0YWJhc2UuDQo+Pi0gICAgLy8NCj4+LSAgICBT dGF0dXMgPSBBZGRVc2VyUHJvZmlsZSAoTlVMTCwgVmFyU2l6ZSwgVmFyRGF0YSwgRkFMU0UpOw0K Pj4tICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4+LSAgICAgIGlmIChTdGF0dXMgPT0g RUZJX1NFQ1VSSVRZX1ZJT0xBVElPTikgew0KPj4tICAgICAgICAvLw0KPj4tICAgICAgICAvLyBE ZWxldGUgaW52YWxpZCB1c2VyIHByb2ZpbGUNCj4+LSAgICAgICAgLy8NCj4+LSAgICAgICAgZ1JU LT5TZXRWYXJpYWJsZSAoVmFyTmFtZSwgJmdVc2VySWRlbnRpZnlNYW5hZ2VyR3VpZCwgVmFyQXR0 ciwgMCwNCj4+TlVMTCk7DQo+Pi0gICAgICB9IGVsc2UgaWYgKFN0YXR1cyA9PSBFRklfT1VUX09G X1JFU09VUkNFUykgew0KPj4tICAgICAgICBicmVhazsNCj4+LSAgICAgIH0NCj4+LSAgICB9IGVs c2Ugew0KPj4tICAgICAgLy8NCj4+LSAgICAgIC8vIERlbGV0ZSBhbmQgc2F2ZSB0aGUgcHJvZmls ZSBhZ2FpbiBpZiBzb21lIGludmFsaWQgcHJvZmlsZXMgYXJlIGRlbGV0ZWQuDQo+Pi0gICAgICAv Lw0KPj4tICAgICAgaWYgKG1Vc2VyUHJvZmlsZURiLT5Vc2VyUHJvZmlsZU51bSA8IEluZGV4KSB7 DQo+Pi0gICAgICAgIGdSVC0+U2V0VmFyaWFibGUgKFZhck5hbWUsICZnVXNlcklkZW50aWZ5TWFu YWdlckd1aWQsIFZhckF0dHIsIDAsDQo+Pk5VTEwpOw0KPj4tICAgICAgICBTYXZlTnZVc2VyUHJv ZmlsZSAobVVzZXJQcm9maWxlRGItPlVzZXJQcm9maWxlW21Vc2VyUHJvZmlsZURiLQ0KPj4+VXNl clByb2ZpbGVOdW0gLSAxXSwgRkFMU0UpOw0KPj4tICAgICAgfQ0KPj4tICAgIH0NCj4+LSAgfQ0K Pj4tDQo+Pi0gIGlmIChWYXJEYXRhICE9IE5VTEwpIHsNCj4+LSAgICBGcmVlUG9vbCAoVmFyRGF0 YSk7DQo+Pi0gIH0NCj4+LQ0KPj4tICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+Pi0gICAg cmV0dXJuIFN0YXR1czsNCj4+LSAgfQ0KPj4tDQo+Pi0gIC8vDQo+Pi0gIC8vIENoZWNrIHdoZXRo ZXIgdGhlIHVzZXIgcHJvZmlsZSBkYXRhYmFzZSBpcyBlbXB0eS4NCj4+LSAgLy8NCj4+LSAgaWYg KG1Vc2VyUHJvZmlsZURiLT5Vc2VyUHJvZmlsZU51bSA9PSAwKSB7DQo+Pi0gICAgU3RhdHVzID0g QWRkRGVmYXVsdFVzZXJQcm9maWxlICgpOw0KPj4tICB9DQo+Pi0NCj4+LSAgcmV0dXJuIFN0YXR1 czsNCj4+LX0NCj4+LQ0KPj4tDQo+Pi0vKioNCj4+LSAgVGhpcyBmdW5jdGlvbiBjb2xsZWN0cyBh bGwgdGhlIGNyZWRlbnRpYWwgcHJvdmlkZXJzIGFuZCBzYXZlcyB0byBtUHJvdmlkZXJEYi4NCj4+ LQ0KPj4tICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgQ29sbGVjdCBjcmVkZW50aWFs IHByb3ZpZGVycyBzdWNjZXNzZnVsbHkuDQo+Pi0gIEByZXR2YWwgT3RoZXJzICAgICAgICAgICAg ICAgICBGYWlsIHRvIGNvbGxlY3QgY3JlZGVudGlhbCBwcm92aWRlcnMuDQo+Pi0NCj4+LSoqLw0K Pj4tRUZJX1NUQVRVUw0KPj4tSW5pdFByb3ZpZGVySW5mbyAoDQo+Pi0gIFZPSUQNCj4+LSAgKQ0K Pj4tew0KPj4tICBFRklfU1RBVFVTICBTdGF0dXM7DQo+Pi0gIFVJTlROICAgICAgIEhhbmRsZUNv dW50Ow0KPj4tICBFRklfSEFORExFICAqSGFuZGxlQnVmOw0KPj4tICBVSU5UTiAgICAgICBJbmRl eDsNCj4+LQ0KPj4tICBpZiAobVByb3ZpZGVyRGIgIT0gTlVMTCkgew0KPj4tICAgIC8vDQo+Pi0g ICAgLy8gVGhlIGNyZWRlbnRpYWwgcHJvdmlkZXJzIGhhZCBiZWVuIGNvbGxlY3RlZCBiZWZvcmUu DQo+Pi0gICAgLy8NCj4+LSAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+Pi0gIH0NCj4+LQ0KPj4t ICAvLw0KPj4tICAvLyBUcnkgdG8gZmluZCBhbGwgdGhlIHVzZXIgY3JlZGVudGlhbCBwcm92aWRl ciBkcml2ZXIuDQo+Pi0gIC8vDQo+Pi0gIEhhbmRsZUNvdW50ID0gMDsNCj4+LSAgSGFuZGxlQnVm ICAgPSBOVUxMOw0KPj4tICBTdGF0dXMgPSBnQlMtPkxvY2F0ZUhhbmRsZUJ1ZmZlciAoDQo+Pi0g ICAgICAgICAgICAgICAgICBCeVByb3RvY29sLA0KPj4tICAgICAgICAgICAgICAgICAgJmdFZmlV c2VyQ3JlZGVudGlhbDJQcm90b2NvbEd1aWQsDQo+Pi0gICAgICAgICAgICAgICAgICBOVUxMLA0K Pj4tICAgICAgICAgICAgICAgICAgJkhhbmRsZUNvdW50LA0KPj4tICAgICAgICAgICAgICAgICAg JkhhbmRsZUJ1Zg0KPj4tICAgICAgICAgICAgICAgICAgKTsNCj4+LSAgaWYgKEVGSV9FUlJPUiAo U3RhdHVzKSkgew0KPj4tICAgIHJldHVybiBTdGF0dXM7DQo+Pi0gIH0NCj4+LQ0KPj4tICAvLw0K Pj4tICAvLyBHZXQgcHJvdmlkZXIgaW5mb21hdGlvbi4NCj4+LSAgLy8NCj4+LSAgbVByb3ZpZGVy RGIgPSBBbGxvY2F0ZVplcm9Qb29sICgNCj4+LSAgICAgICAgICAgICAgICAgIHNpemVvZiAoQ1JF REVOVElBTF9QUk9WSURFUl9JTkZPKSAtDQo+Pi0gICAgICAgICAgICAgICAgICBzaXplb2YgKEVG SV9VU0VSX0NSRURFTlRJQUwyX1BST1RPQ09MICopICsNCj4+LSAgICAgICAgICAgICAgICAgIEhh bmRsZUNvdW50ICogc2l6ZW9mIChFRklfVVNFUl9DUkVERU5USUFMMl9QUk9UT0NPTCAqKQ0KPj4t ICAgICAgICAgICAgICAgICAgKTsNCj4+LSAgaWYgKG1Qcm92aWRlckRiID09IE5VTEwpIHsNCj4+ LSAgICBGcmVlUG9vbCAoSGFuZGxlQnVmKTsNCj4+LSAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNP VVJDRVM7DQo+Pi0gIH0NCj4+LQ0KPj4tIG1Qcm92aWRlckRiLT5Db3VudCA9IEhhbmRsZUNvdW50 Ow0KPj4tICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBIYW5kbGVDb3VudDsgSW5kZXgrKykgew0K Pj4tICAgIFN0YXR1cyA9IGdCUy0+SGFuZGxlUHJvdG9jb2wgKA0KPj4tICAgICAgICAgICAgICAg ICAgICBIYW5kbGVCdWZbSW5kZXhdLA0KPj4tICAgICAgICAgICAgICAgICAgICAmZ0VmaVVzZXJD cmVkZW50aWFsMlByb3RvY29sR3VpZCwNCj4+LSAgICAgICAgICAgICAgICAgICAgKFZPSUQgKiop ICZtUHJvdmlkZXJEYi0+UHJvdmlkZXJbSW5kZXhdDQo+Pi0gICAgICAgICAgICAgICAgICAgICk7 DQo+Pi0gICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPj4tICAgICAgRnJlZVBvb2wgKEhh bmRsZUJ1Zik7DQo+Pi0gICAgICBGcmVlUG9vbCAobVByb3ZpZGVyRGIpOw0KPj4tICAgICAgbVBy b3ZpZGVyRGIgPSBOVUxMOw0KPj4tICAgICAgcmV0dXJuIFN0YXR1czsNCj4+LSAgICB9DQo+Pi0g IH0NCj4+LQ0KPj4tICBGcmVlUG9vbCAoSGFuZGxlQnVmKTsNCj4+LSAgcmV0dXJuIEVGSV9TVUND RVNTOw0KPj4tfQ0KPj4tDQo+Pi0NCj4+LS8qKg0KPj4tICBUaGlzIGZ1bmN0aW9uIGFsbG93cyBh IGNhbGxlciB0byBleHRyYWN0IHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gZm9yIG9uZQ0KPj4t ICBvciBtb3JlIG5hbWVkIGVsZW1lbnRzIGZyb20gdGhlIHRhcmdldCBkcml2ZXIuDQo+Pi0NCj4+ LQ0KPj4tICBAcGFyYW0gVGhpcyAgICAgICAgICAgIFBvaW50cyB0byB0aGUgRUZJX0hJSV9DT05G SUdfQUNDRVNTX1BST1RPQ09MLg0KPj4tICBAcGFyYW0gUmVxdWVzdCAgICAgICAgIEEgbnVsbC10 ZXJtaW5hdGVkIFVuaWNvZGUgc3RyaW5nIGluIDxDb25maWdSZXF1ZXN0Pg0KPj5mb3JtYXQuDQo+ Pi0gIEBwYXJhbSBQcm9ncmVzcyAgICAgICAgT24gcmV0dXJuLCBwb2ludHMgdG8gYSBjaGFyYWN0 ZXIgaW4gdGhlIFJlcXVlc3Qgc3RyaW5nLg0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgIFBv aW50cyB0byB0aGUgc3RyaW5nJ3MgbnVsbCB0ZXJtaW5hdG9yIGlmIHJlcXVlc3Qgd2FzIHN1Y2Nl c3NmdWwuDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgUG9pbnRzIHRvIHRoZSBtb3N0IHJl Y2VudCAnJicgYmVmb3JlIHRoZSBmaXJzdCBmYWlsaW5nIG5hbWUvdmFsdWUNCj4+LSAgICAgICAg ICAgICAgICAgICAgICAgICBwYWlyIChvciB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzdHJpbmcgaWYg dGhlIGZhaWx1cmUgaXMgaW4gdGhlDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3Qg bmFtZS92YWx1ZSBwYWlyKSBpZiB0aGUgcmVxdWVzdCB3YXMgbm90IHN1Y2Nlc3NmdWwuDQo+Pi0g IEBwYXJhbSBSZXN1bHRzICAgICAgICAgQSBudWxsLXRlcm1pbmF0ZWQgVW5pY29kZSBzdHJpbmcg aW4gPENvbmZpZ0FsdFJlc3A+DQo+PmZvcm1hdCB3aGljaA0KPj4tICAgICAgICAgICAgICAgICAg ICAgICAgIGhhcyBhbGwgdmFsdWVzIGZpbGxlZCBpbiBmb3IgdGhlIG5hbWVzIGluIHRoZSBSZXF1 ZXN0IHN0cmluZy4NCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgdG8gYmUgYWxs b2NhdGVkIGJ5IHRoZSBjYWxsZWQgZnVuY3Rpb24uDQo+Pi0NCj4+LSAgQHJldHZhbCAgRUZJX1NV Q0NFU1MgICAgICAgICAgICBUaGUgUmVzdWx0cyBpcyBmaWxsZWQgd2l0aCB0aGUgcmVxdWVzdGVk IHZhbHVlcy4NCj4+LSAgQHJldHZhbCAgRUZJX09VVF9PRl9SRVNPVVJDRVMgICBOb3QgZW5vdWdo IG1lbW9yeSB0byBzdG9yZSB0aGUNCj4+cmVzdWx0cy4NCj4+LSAgQHJldHZhbCAgRUZJX0lOVkFM SURfUEFSQU1FVEVSICBSZXF1ZXN0IGlzIGlsbGVnYWwgc3ludGF4LCBvciB1bmtub3duDQo+Pm5h bWUuDQo+Pi0gIEByZXR2YWwgIEVGSV9OT1RfRk9VTkQgICAgICAgICAgUm91dGluZyBkYXRhIGRv ZXNuJ3QgbWF0Y2ggYW55IHN0b3JhZ2UgaW4NCj4+dGhpcyBkcml2ZXIuDQo+Pi0NCj4+LSoqLw0K Pj4tRUZJX1NUQVRVUw0KPj4tRUZJQVBJDQo+Pi1GYWtlRXh0cmFjdENvbmZpZyAoDQo+Pi0gIElO ICBDT05TVCBFRklfSElJX0NPTkZJR19BQ0NFU1NfUFJPVE9DT0wgICAqVGhpcywNCj4+LSAgSU4g IENPTlNUIEVGSV9TVFJJTkcgICAgICAgICAgICAgICAgICAgICAgIFJlcXVlc3QsDQo+Pi0gIE9V VCBFRklfU1RSSU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqUHJvZ3Jlc3MsDQo+Pi0g IE9VVCBFRklfU1RSSU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqUmVzdWx0cw0KPj4t ICApDQo+Pi17DQo+Pi0gIGlmIChQcm9ncmVzcyA9PSBOVUxMIHx8IFJlc3VsdHMgPT0gTlVMTCkg ew0KPj4tICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+Pi0gIH0NCj4+LSAgKlBy b2dyZXNzID0gUmVxdWVzdDsNCj4+LSAgcmV0dXJuIEVGSV9OT1RfRk9VTkQ7DQo+Pi19DQo+Pi0N Cj4+LS8qKg0KPj4tICBUaGlzIGZ1bmN0aW9uIHByb2Nlc3NlcyB0aGUgcmVzdWx0cyBvZiBjaGFu Z2VzIGluIGNvbmZpZ3VyYXRpb24uDQo+Pi0NCj4+LQ0KPj4tICBAcGFyYW0gVGhpcyAgICAgICAg ICAgIFBvaW50cyB0byB0aGUgRUZJX0hJSV9DT05GSUdfQUNDRVNTX1BST1RPQ09MLg0KPj4tICBA cGFyYW0gQ29uZmlndXJhdGlvbiAgIEEgbnVsbC10ZXJtaW5hdGVkIFVuaWNvZGUgc3RyaW5nIGlu IDxDb25maWdSZXNwPg0KPj5mb3JtYXQuDQo+Pi0gIEBwYXJhbSBQcm9ncmVzcyAgICAgICAgQSBw b2ludGVyIHRvIGEgc3RyaW5nIGZpbGxlZCBpbiB3aXRoIHRoZSBvZmZzZXQgb2YgdGhlDQo+Pm1v c3QNCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICByZWNlbnQgJyYnIGJlZm9yZSB0aGUgZmly c3QgZmFpbGluZyBuYW1lL3ZhbHVlIHBhaXIgKG9yIHRoZQ0KPj4tICAgICAgICAgICAgICAgICAg ICAgICAgIGJlZ2lubmluZyBvZiB0aGUgc3RyaW5nIGlmIHRoZSBmYWlsdXJlIGlzIGluIHRoZSBm aXJzdA0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUvdmFsdWUgcGFpcikgb3IgdGhl IHRlcm1pbmF0aW5nIE5VTEwgaWYgYWxsIHdhcyBzdWNjZXNzZnVsLg0KPj4tDQo+Pi0gIEByZXR2 YWwgIEVGSV9TVUNDRVNTICAgICAgICAgICAgVGhlIFJlc3VsdHMgaXMgcHJvY2Vzc2VkIHN1Y2Nl c3NmdWxseS4NCj4+LSAgQHJldHZhbCAgRUZJX0lOVkFMSURfUEFSQU1FVEVSICBDb25maWd1cmF0 aW9uIGlzIE5VTEwuDQo+Pi0gIEByZXR2YWwgIEVGSV9OT1RfRk9VTkQgICAgICAgICAgUm91dGlu ZyBkYXRhIGRvZXNuJ3QgbWF0Y2ggYW55IHN0b3JhZ2UgaW4NCj4+dGhpcyBkcml2ZXIuDQo+Pi0N Cj4+LSoqLw0KPj4tRUZJX1NUQVRVUw0KPj4tRUZJQVBJDQo+Pi1GYWtlUm91dGVDb25maWcgKA0K Pj4tICBJTiAgQ09OU1QgRUZJX0hJSV9DT05GSUdfQUNDRVNTX1BST1RPQ09MICAgKlRoaXMsDQo+ Pi0gIElOICBDT05TVCBFRklfU1RSSU5HICAgICAgICAgICAgICAgICAgICAgICBDb25maWd1cmF0 aW9uLA0KPj4tICBPVVQgRUZJX1NUUklORyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlBy b2dyZXNzDQo+Pi0gICkNCj4+LXsNCj4+LSAgaWYgKENvbmZpZ3VyYXRpb24gPT0gTlVMTCB8fCBQ cm9ncmVzcyA9PSBOVUxMKSB7DQo+Pi0gICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsN Cj4+LSAgfQ0KPj4tDQo+Pi0gICpQcm9ncmVzcyA9IENvbmZpZ3VyYXRpb247DQo+Pi0NCj4+LSAg cmV0dXJuIEVGSV9OT1RfRk9VTkQ7DQo+Pi19DQo+Pi0NCj4+LQ0KPj4tLyoqDQo+Pi0gIFRoaXMg ZnVuY3Rpb24gaW5pdGlhbGl6ZSB0aGUgZGF0YSBtYWlubHkgdXNlZCBpbiBmb3JtIGJyb3dzZXIu DQo+Pi0NCj4+LSAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICBJbml0aWFsaXplIGZvcm0g ZGF0YSBzdWNjZXNzZnVsbHkuDQo+Pi0gIEByZXR2YWwgT3RoZXJzICAgICAgICAgICAgICAgRmFp bCB0byBJbml0aWFsaXplIGZvcm0gZGF0YS4NCj4+LQ0KPj4tKiovDQo+Pi1FRklfU1RBVFVTDQo+ Pi1Jbml0Rm9ybUJyb3dzZXIgKA0KPj4tICBWT0lEDQo+Pi0gICkNCj4+LXsNCj4+LSAgRUZJX1NU QVRVUyAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4+LSAgVVNFUl9NQU5BR0VSX0NBTExCQUNL X0lORk8gICpDYWxsYmFja0luZm87DQo+Pi0gIEVGSV9ISUlfREFUQUJBU0VfUFJPVE9DT0wgICAq SGlpRGF0YWJhc2U7DQo+Pi0gIEVGSV9ISUlfU1RSSU5HX1BST1RPQ09MICAgICAqSGlpU3RyaW5n Ow0KPj4tICBFRklfRk9STV9CUk9XU0VSMl9QUk9UT0NPTCAgKkZvcm1Ccm93c2VyMjsNCj4+LQ0K Pj4tICAvLw0KPj4tICAvLyBJbml0aWFsaXplIGRyaXZlciBwcml2YXRlIGRhdGEuDQo+Pi0gIC8v DQo+Pi0gIENhbGxiYWNrSW5mbyA9IEFsbG9jYXRlWmVyb1Bvb2wgKHNpemVvZg0KPj4oVVNFUl9N QU5BR0VSX0NBTExCQUNLX0lORk8pKTsNCj4+LSAgaWYgKENhbGxiYWNrSW5mbyA9PSBOVUxMKSB7 DQo+Pi0gICAgcmV0dXJuIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPj4tICB9DQo+Pi0NCj4+LSAg Q2FsbGJhY2tJbmZvLT5TaWduYXR1cmUgICAgICAgICAgICAgICAgICAgPSBVU0VSX01BTkFHRVJf U0lHTkFUVVJFOw0KPj4tICBDYWxsYmFja0luZm8tPkNvbmZpZ0FjY2Vzcy5FeHRyYWN0Q29uZmln ICA9IEZha2VFeHRyYWN0Q29uZmlnOw0KPj4tICBDYWxsYmFja0luZm8tPkNvbmZpZ0FjY2Vzcy5S b3V0ZUNvbmZpZyAgICA9IEZha2VSb3V0ZUNvbmZpZzsNCj4+LSAgQ2FsbGJhY2tJbmZvLT5Db25m aWdBY2Nlc3MuQ2FsbGJhY2sgICAgICAgPSBVc2VySWRlbnRpZnlNYW5hZ2VyQ2FsbGJhY2s7DQo+ Pi0NCj4+LSAgLy8NCj4+LSAgLy8gTG9jYXRlIEhpaSBEYXRhYmFzZSBwcm90b2NvbC4NCj4+LSAg Ly8NCj4+LSAgU3RhdHVzID0gZ0JTLT5Mb2NhdGVQcm90b2NvbCAoJmdFZmlIaWlEYXRhYmFzZVBy b3RvY29sR3VpZCwgTlVMTCwgKFZPSUQNCj4+KiopICZIaWlEYXRhYmFzZSk7DQo+Pi0gIGlmIChF RklfRVJST1IgKFN0YXR1cykpIHsNCj4+LSAgICByZXR1cm4gU3RhdHVzOw0KPj4tICB9DQo+Pi0g IENhbGxiYWNrSW5mby0+SGlpRGF0YWJhc2UgPSBIaWlEYXRhYmFzZTsNCj4+LQ0KPj4tICAvLw0K Pj4tICAvLyBMb2NhdGUgSGlpU3RyaW5nIHByb3RvY29sLg0KPj4tICAvLw0KPj4tICBTdGF0dXMg PSBnQlMtPkxvY2F0ZVByb3RvY29sICgmZ0VmaUhpaVN0cmluZ1Byb3RvY29sR3VpZCwgTlVMTCwg KFZPSUQgKiopDQo+PiZIaWlTdHJpbmcpOw0KPj4tICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7 DQo+Pi0gICAgcmV0dXJuIFN0YXR1czsNCj4+LSAgfQ0KPj4tICBDYWxsYmFja0luZm8tPkhpaVN0 cmluZyA9IEhpaVN0cmluZzsNCj4+LQ0KPj4tICAvLw0KPj4tICAvLyBMb2NhdGUgRm9ybWJyb3dz ZXIyIHByb3RvY29sLg0KPj4tICAvLw0KPj4tICBTdGF0dXMgPSBnQlMtPkxvY2F0ZVByb3RvY29s ICgmZ0VmaUZvcm1Ccm93c2VyMlByb3RvY29sR3VpZCwgTlVMTCwNCj4+KFZPSUQgKiopICZGb3Jt QnJvd3NlcjIpOw0KPj4tICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+Pi0gICAgcmV0dXJu IFN0YXR1czsNCj4+LSAgfQ0KPj4tDQo+Pi0gIENhbGxiYWNrSW5mby0+Rm9ybUJyb3dzZXIyICA9 IEZvcm1Ccm93c2VyMjsNCj4+LSAgQ2FsbGJhY2tJbmZvLT5Ecml2ZXJIYW5kbGUgID0gTlVMTDsN Cj4+LQ0KPj4tICAvLw0KPj4tICAvLyBJbnN0YWxsIERldmljZSBQYXRoIFByb3RvY29sIGFuZCBD b25maWcgQWNjZXNzIHByb3RvY29sIHRvIGRyaXZlciBoYW5kbGUuDQo+Pi0gIC8vDQo+Pi0gIFN0 YXR1cyA9IGdCUy0+SW5zdGFsbE11bHRpcGxlUHJvdG9jb2xJbnRlcmZhY2VzICgNCj4+LSAgICAg ICAgICAgICAgICAgICZDYWxsYmFja0luZm8tPkRyaXZlckhhbmRsZSwNCj4+LSAgICAgICAgICAg ICAgICAgICZnRWZpRGV2aWNlUGF0aFByb3RvY29sR3VpZCwNCj4+LSAgICAgICAgICAgICAgICAg ICZtSGlpVmVuZG9yRGV2aWNlUGF0aCwNCj4+LSAgICAgICAgICAgICAgICAgICZnRWZpSGlpQ29u ZmlnQWNjZXNzUHJvdG9jb2xHdWlkLA0KPj4tICAgICAgICAgICAgICAgICAgJkNhbGxiYWNrSW5m by0+Q29uZmlnQWNjZXNzLA0KPj4tICAgICAgICAgICAgICAgICAgTlVMTA0KPj4tICAgICAgICAg ICAgICAgICAgKTsNCj4+LSAgQVNTRVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsNCj4+LQ0KPj4tICAv Lw0KPj4tICAvLyBQdWJsaXNoIEhJSSBkYXRhLg0KPj4tICAvLw0KPj4tICBDYWxsYmFja0luZm8t PkhpaUhhbmRsZSA9IEhpaUFkZFBhY2thZ2VzICgNCj4+LSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICZnVXNlcklkZW50aWZ5TWFuYWdlckd1aWQsDQo+Pi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBDYWxsYmFja0luZm8tPkRyaXZlckhhbmRsZSwNCj4+LSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFVzZXJJZGVudGlmeU1hbmFnZXJTdHJpbmdzLA0KPj4tICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgVXNlcklkZW50aWZ5TWFuYWdlclZmckJpbiwNCj4+LSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwNCj4+LSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICk7DQo+Pi0gIGlmIChDYWxsYmFja0luZm8tPkhpaUhhbmRsZSA9PSBOVUxMKSB7DQo+ Pi0gICAgcmV0dXJuIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPj4tICB9DQo+Pi0NCj4+LSAgbUNh bGxiYWNrSW5mbyA9IENhbGxiYWNrSW5mbzsNCj4+LQ0KPj4tICByZXR1cm4gRUZJX1NVQ0NFU1M7 DQo+Pi19DQo+Pi0NCj4+LQ0KPj4tLyoqDQo+Pi0gIElkZW50aWZ5IHRoZSB1c2VyIHdob3NlIGlk ZW50aWZpY2F0aW9uIHBvbGljeSBzdXBwb3J0cyBhdXRvIGxvZ29uLg0KPj4tDQo+Pi0gIEBwYXJh bVtpbl0gICBQcm92aWRlckluZGV4ICAgVGhlIHByb3ZpZGVyIGluZGV4IGluIHRoZSBwcm92aWRl ciBsaXN0Lg0KPj4tICBAcGFyYW1bb3V0XSAgVXNlciAgICAgICAgICAgIFBvaW50cyB0byB1c2Vy IHVzZXIgcHJvZmlsZSBpZiBhIHVzZXIgaXMgaWRlbnRpZmllZA0KPj5zdWNjZXNzZnVsbHkuDQo+ Pi0NCj4+LSAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICBJZGVudGlmeSBhIHVzZXIgd2l0 aCB0aGUgc3BlY2lmaWVkIHByb3ZpZGVyDQo+PnN1Y2Nlc3NmdWxseS4NCj4+LSAgQHJldHZhbCBP dGhlcnMgICAgICAgICAgICAgICBGYWlsIHRvIGlkZW50aWZ5IGEgdXNlci4NCj4+LQ0KPj4tKiov DQo+Pi1FRklfU1RBVFVTDQo+Pi1JZGVudGlmeUF1dG9Mb2dvblVzZXIgKA0KPj4tICBJTiAgVUlO VE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvdmlkZXJJbmRleCwNCj4+ LSAgT1VUIFVTRVJfUFJPRklMRV9FTlRSWSAgICAgICAgICAgICAgICAgICAgICAgICoqVXNlcg0K Pj4tICApDQo+Pi17DQo+Pi0gIEVGSV9TVEFUVVMgICAgU3RhdHVzOw0KPj4tICBFRklfVVNFUl9J TkZPICpJbmZvOw0KPj4tICBVSU5UOCAgICAgICAgIFBvbGljeVR5cGU7DQo+Pi0NCj4+LSAgSW5m byA9IEFsbG9jYXRlWmVyb1Bvb2wgKHNpemVvZiAoRUZJX1VTRVJfSU5GTykgKyBzaXplb2YNCj4+ KEVGSV9VU0VSX0lORk9fSURFTlRJRklFUikpOw0KPj4tICBpZiAoSW5mbyA9PSBOVUxMKSB7DQo+ Pi0gICAgcmV0dXJuIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPj4tICB9DQo+Pi0NCj4+LSAgSW5m by0+SW5mb1R5cGUgID0gRUZJX1VTRVJfSU5GT19JREVOVElGSUVSX1JFQ09SRDsNCj4+LSAgSW5m by0+SW5mb1NpemUgID0gc2l6ZW9mIChFRklfVVNFUl9JTkZPKSArIHNpemVvZg0KPj4oRUZJX1VT RVJfSU5GT19JREVOVElGSUVSKTsNCj4+LQ0KPj4tICAvLw0KPj4tICAvLyBJZGVudGlmeSB0aGUg c3BlY2lmaWVkIGNyZWRlbnRpYWwgcHJvdmlkZXIncyBhdXRvIGxvZ29uIHVzZXIuDQo+Pi0gIC8v DQo+Pi0gIFN0YXR1cyA9IG1Qcm92aWRlckRiLT5Qcm92aWRlcltQcm92aWRlckluZGV4XS0+VXNl ciAoDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBtUHJvdmlkZXJEYi0+UHJvdmlkZXJbUHJvdmlkZXJJbmRleF0sDQo+Pi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLA0KPj4tICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEVGSV9VU0VSX0lORk9f SURFTlRJRklFUiAqKSAoSW5mbyArIDEpDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICApOw0KPj4tICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7 DQo+Pi0gICAgRnJlZVBvb2wgKEluZm8pOw0KPj4tICAgIHJldHVybiBTdGF0dXM7DQo+Pi0gIH0N Cj4+LQ0KPj4tICAvLw0KPj4tICAvLyBGaW5kIHVzZXIgd2l0aCB0aGUgc3BlY2lmaWVkIHVzZXIg SUQuDQo+Pi0gIC8vDQo+Pi0gICpVc2VyICAgPSBOVUxMOw0KPj4tICBTdGF0dXMgID0gRmluZFVz ZXJQcm9maWxlQnlJbmZvIChVc2VyLCBOVUxMLCBJbmZvLCBJbmZvLT5JbmZvU2l6ZSk7DQo+Pi0g IEZyZWVQb29sIChJbmZvKTsNCj4+LSAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPj4tICAg IHJldHVybiBTdGF0dXM7DQo+Pi0gIH0NCj4+LQ0KPj4tICBTdGF0dXMgPSBHZXRJZGVudGlmeVR5 cGUgKChFRklfVVNFUl9QUk9GSUxFX0hBTkRMRSkgKiBVc2VyLA0KPj4mUG9saWN5VHlwZSk7DQo+ Pi0gIGlmIChQb2xpY3lUeXBlID09IEVGSV9VU0VSX0lORk9fSURFTlRJVFlfQU5EKSB7DQo+Pi0g ICAgLy8NCj4+LSAgICAvLyBUaGUgaWRlbnRpZmllZCB1c2VyIG5lZWQgYWxzbyBpZGVudGlmaWVk IGJ5IG90aGVyIGNyZWRlbnRpYWwgcHJvdmlkZXIuDQo+Pi0gICAgLy8gVGhpcyBjYW4gaGFuZGxl IHRocm91Z2ggc2VsZWN0IHVzZXIuDQo+Pi0gICAgLy8NCj4+LSAgICByZXR1cm4gRUZJX05PVF9S RUFEWTsNCj4+LSAgfQ0KPj4tDQo+Pi0gIHJldHVybiBTdGF0dXM7DQo+Pi19DQo+Pi0NCj4+LQ0K Pj4tLyoqDQo+Pi0gIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIGNvbnNvbGUgaXMgcmVhZHkuDQo+ Pi0NCj4+LSAgQHBhcmFtW2luXSAgIFByb3RvY29sR3VpZCAgIFBvaW50cyB0byB0aGUgcHJvdG9j b2wgZ3VpZCBvZiBzb25zb2xlIC4NCj4+LQ0KPj4tICBAcmV0dmFsIFRSVUUgICAgIFRoZSBnaXZl biBjb25zb2xlIGlzIHJlYWR5Lg0KPj4tICBAcmV0dmFsIEZBTFNFICAgIFRoZSBnaXZlbiBjb25z b2xlIGlzIG5vdCByZWFkeS4NCj4+LQ0KPj4tKiovDQo+Pi1CT09MRUFODQo+Pi1DaGVja0NvbnNv bGUgKA0KPj4tICBFRklfR1VJRCAgICAgICAgICAgICAgICAgICAgICpQcm90b2NvbEd1aWQNCj4+ LSAgKQ0KPj4tew0KPj4tICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4+ LSAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICBIYW5kbGVDb3VudDsNCj4+LSAgRUZJX0hB TkRMRSAgICAgICAgICAgICAgICAgICAqSGFuZGxlQnVmOw0KPj4tICBVSU5UTiAgICAgICAgICAg ICAgICAgICAgICAgIEluZGV4Ow0KPj4tICBFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wgICAgICpE ZXZpY2VQYXRoOw0KPj4tDQo+Pi0gIC8vDQo+Pi0gIC8vIFRyeSB0byBmaW5kIGFsbCB0aGUgaGFu ZGxlIGRyaXZlci4NCj4+LSAgLy8NCj4+LSAgSGFuZGxlQ291bnQgPSAwOw0KPj4tICBIYW5kbGVC dWYgICA9IE5VTEw7DQo+Pi0gIFN0YXR1cyA9IGdCUy0+TG9jYXRlSGFuZGxlQnVmZmVyICgNCj4+ LSAgICAgICAgICAgICAgICAgIEJ5UHJvdG9jb2wsDQo+Pi0gICAgICAgICAgICAgICAgICBQcm90 b2NvbEd1aWQsDQo+Pi0gICAgICAgICAgICAgICAgICBOVUxMLA0KPj4tICAgICAgICAgICAgICAg ICAgJkhhbmRsZUNvdW50LA0KPj4tICAgICAgICAgICAgICAgICAgJkhhbmRsZUJ1Zg0KPj4tICAg ICAgICAgICAgICAgICAgKTsNCj4+LSAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPj4tICAg IHJldHVybiBGQUxTRTsNCj4+LSAgfQ0KPj4tDQo+Pi0gIGZvciAoSW5kZXggPSAwOyBJbmRleCA8 IEhhbmRsZUNvdW50OyBJbmRleCsrKSB7DQo+Pi0gICAgRGV2aWNlUGF0aCA9IERldmljZVBhdGhG cm9tSGFuZGxlIChIYW5kbGVCdWZbSW5kZXhdKTsNCj4+LSAgICBpZiAoRGV2aWNlUGF0aCAhPSBO VUxMKSB7DQo+Pi0gICAgICBGcmVlUG9vbCAoSGFuZGxlQnVmKTsNCj4+LSAgICAgIHJldHVybiBU UlVFOw0KPj4tICAgIH0NCj4+LSAgfQ0KPj4tICBGcmVlUG9vbCAoSGFuZGxlQnVmKTsNCj4+LSAg cmV0dXJuIEZBTFNFOw0KPj4tfQ0KPj4tDQo+Pi0NCj4+LS8qKg0KPj4tICBDaGVjayB3aGV0aGVy IHRoZSBjb25zb2xlIGlzIHJlYWR5Lg0KPj4tDQo+Pi0gIEByZXR2YWwgVFJVRSAgICAgVGhlIGNv bnNvbGUgaXMgcmVhZHkuDQo+Pi0gIEByZXR2YWwgRkFMU0UgICAgVGhlIGNvbnNvbGUgaXMgbm90 IHJlYWR5Lg0KPj4tDQo+Pi0qKi8NCj4+LUJPT0xFQU4NCj4+LUlzQ29uc29sZVJlYWR5ICgNCj4+ LSAgVk9JRA0KPj4tICApDQo+Pi17DQo+Pi0gIGlmICghQ2hlY2tDb25zb2xlICgmZ0VmaVNpbXBs ZVRleHRPdXRQcm90b2NvbEd1aWQpKSB7DQo+Pi0gICAgcmV0dXJuIEZBTFNFOw0KPj4tICB9DQo+ Pi0NCj4+LSAgaWYgKCFDaGVja0NvbnNvbGUgKCZnRWZpU2ltcGxlVGV4dEluUHJvdG9jb2xHdWlk KSkgew0KPj4tICAgIGlmICghQ2hlY2tDb25zb2xlICgmZ0VmaVNpbXBsZVRleHRJbnB1dEV4UHJv dG9jb2xHdWlkKSkgew0KPj4tICAgIHJldHVybiBGQUxTRTsNCj4+LSAgICB9DQo+Pi0gIH0NCj4+ LQ0KPj4tICByZXR1cm4gVFJVRTsNCj4+LX0NCj4+LQ0KPj4tDQo+Pi0vKioNCj4+LSAgSWRlbnRp ZnkgYSB1c2VyIHRvIGxvZ29uLg0KPj4tDQo+Pi0gIEBwYXJhbVtvdXRdICBVc2VyICAgICAgICAg IFBvaW50cyB0byB1c2VyIHVzZXIgcHJvZmlsZSBpZiBhIHVzZXIgaXMgaWRlbnRpZmllZA0KPj5z dWNjZXNzZnVsbHkuDQo+Pi0NCj4+LSAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgSWRlbnRp ZnkgYSB1c2VyIHN1Y2Nlc3NmdWxseS4NCj4+LQ0KPj4tKiovDQo+Pi1FRklfU1RBVFVTDQo+Pi1J ZGVudGlmeVVzZXIgKA0KPj4tICBPVVQgVVNFUl9QUk9GSUxFX0VOVFJZICAgICAgICAgICAgICAg ICAgICAgICAgKipVc2VyDQo+Pi0gICkNCj4+LXsNCj4+LSAgRUZJX1NUQVRVUyAgICAgICAgICAg ICAgICAgICAgU3RhdHVzOw0KPj4tICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICBJbmRl eDsNCj4+LSAgRUZJX0NSRURFTlRJQUxfTE9HT05fRkxBR1MgICAgQXV0b0xvZ29uOw0KPj4tICBF RklfVVNFUl9JTkZPICAgICAgICAgICAgICAgICAqSWRlbnRpZnlJbmZvOw0KPj4tICBFRklfVVNF Ul9JTkZPX0lERU5USVRZX1BPTElDWSAqSWRlbnRpdHk7DQo+Pi0gIEVGSV9VU0VSX0NSRURFTlRJ QUwyX1BST1RPQ09MICpVc2VyQ3JlZGVudGlhbDsNCj4+LSAgVVNFUl9QUk9GSUxFX0VOVFJZICAg ICAgICAgICAgKlVzZXJFbnRyeTsNCj4+LQ0KPj4tICAvLw0KPj4tICAvLyBJbml0aWFsaXplIGNy ZWRlbnRpYWwgcHJvdmlkZXJzLg0KPj4tICAvLw0KPj4tICBJbml0UHJvdmlkZXJJbmZvICgpOw0K Pj4tDQo+Pi0gIC8vDQo+Pi0gIC8vIEluaXRpYWxpemUgdXNlciBwcm9maWxlIGRhdGFiYXNlLg0K Pj4tICAvLw0KPj4tICBJbml0VXNlclByb2ZpbGVEYiAoKTsNCj4+LQ0KPj4tICAvLw0KPj4tICAv LyBJZiBvbmx5IG9uZSB1c2VyIGluIHN5c3RlbSwgYW5kIGl0cyBpZGVudGlmeSBwb2xpY3kgaXMg VFJVRSwgdGhlbiBhdXRvIGxvZ29uLg0KPj4tICAvLw0KPj4tICBpZiAobVVzZXJQcm9maWxlRGIt PlVzZXJQcm9maWxlTnVtID09IDEpIHsNCj4+LSAgICBVc2VyRW50cnkgICAgID0gKFVTRVJfUFJP RklMRV9FTlRSWSAqKSBtVXNlclByb2ZpbGVEYi0+VXNlclByb2ZpbGVbMF07DQo+Pi0gICAgSWRl bnRpZnlJbmZvICA9IE5VTEw7DQo+Pi0gICAgU3RhdHVzICAgICAgICA9IEZpbmRVc2VySW5mb0J5 VHlwZSAoVXNlckVudHJ5LCAmSWRlbnRpZnlJbmZvLA0KPj5FRklfVVNFUl9JTkZPX0lERU5USVRZ X1BPTElDWV9SRUNPUkQpOw0KPj4tICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4+LSAg ICAgIHJldHVybiBTdGF0dXM7DQo+Pi0gICAgfQ0KPj4tICAgIEFTU0VSVCAoSWRlbnRpZnlJbmZv ICE9IE5VTEwpOw0KPj4tDQo+Pi0gICAgSWRlbnRpdHkgPSAoRUZJX1VTRVJfSU5GT19JREVOVElU WV9QT0xJQ1kgKikgKChVSU5UOCAqKSAoSWRlbnRpZnlJbmZvDQo+Kw0KPj4xKSk7DQo+Pi0gICAg aWYgKElkZW50aXR5LT5UeXBlID09IEVGSV9VU0VSX0lORk9fSURFTlRJVFlfVFJVRSkgew0KPj4t ICAgICAgbUN1cnJlbnRVc2VyID0gKEVGSV9VU0VSX1BST0ZJTEVfSEFORExFKSBVc2VyRW50cnk7 DQo+Pi0gICAgICBVcGRhdGVVc2VySW5mbyAoVXNlckVudHJ5KTsNCj4+LSAgICAgICpVc2VyID0g VXNlckVudHJ5Ow0KPj4tICAgICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPj4tICAgIH0NCj4+LSAg fQ0KPj4tDQo+Pi0gIC8vDQo+Pi0gIC8vIEZpbmQgYW5kIGxvZ2luIHRoZSBkZWZhdWx0ICYgQXV0 b0xvZ29uIHVzZXIuDQo+Pi0gIC8vDQo+Pi0gIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IG1Qcm92 aWRlckRiLT5Db3VudDsgSW5kZXgrKykgew0KPj4tICAgIFVzZXJDcmVkZW50aWFsID0gbVByb3Zp ZGVyRGItPlByb3ZpZGVyW0luZGV4XTsNCj4+LSAgICBTdGF0dXMgPSBVc2VyQ3JlZGVudGlhbC0+ RGVmYXVsdCAoVXNlckNyZWRlbnRpYWwsICZBdXRvTG9nb24pOw0KPj4tICAgIGlmIChFRklfRVJS T1IgKFN0YXR1cykpIHsNCj4+LSAgICAgIGNvbnRpbnVlOw0KPj4tICAgIH0NCj4+LQ0KPj4tICAg IGlmICgoQXV0b0xvZ29uICYgKEVGSV9DUkVERU5USUFMX0xPR09OX0ZMQUdfREVGQVVMVCB8DQo+ PkVGSV9DUkVERU5USUFMX0xPR09OX0ZMQUdfQVVUTykpICE9IDApIHsNCj4+LSAgICAgIFN0YXR1 cyA9IElkZW50aWZ5QXV0b0xvZ29uVXNlciAoSW5kZXgsICZVc2VyRW50cnkpOw0KPj4tICAgICAg aWYgKFN0YXR1cyA9PSBFRklfU1VDQ0VTUykgew0KPj4tICAgICAgICBtQ3VycmVudFVzZXIgPSAo RUZJX1VTRVJfUFJPRklMRV9IQU5ETEUpIFVzZXJFbnRyeTsNCj4+LSAgICAgICAgVXBkYXRlVXNl ckluZm8gKFVzZXJFbnRyeSk7DQo+Pi0gICAgICAgICpVc2VyID0gVXNlckVudHJ5Ow0KPj4tICAg ICAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+Pi0gICAgICB9DQo+Pi0gICAgfQ0KPj4tICB9DQo+ Pi0NCj4+LSAgaWYgKCFJc0NvbnNvbGVSZWFkeSAoKSkgew0KPj4tICAgIC8vDQo+Pi0gICAgLy8g VGhlIGNvbnNvbGUgaXMgc3RpbGwgbm90IHJlYWR5IGZvciB1c2VyIHNlbGVjdGlvbi4NCj4+LSAg ICAvLw0KPj4tICAgIHJldHVybiBFRklfQUNDRVNTX0RFTklFRDsNCj4+LSAgfQ0KPj4tDQo+Pi0g IC8vDQo+Pi0gIC8vIFNlbGVjdCBhIHVzZXIgYW5kIGlkZW50aWZ5IGl0Lg0KPj4tICAvLw0KPj4t ICBtQ2FsbGJhY2tJbmZvLT5Gb3JtQnJvd3NlcjItPlNlbmRGb3JtICgNCj4+LSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG1DYWxsYmFja0luZm8tPkZvcm1Ccm93c2VyMiwNCj4+LSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtQ2FsbGJhY2tJbmZvLT5IaWlIYW5kbGUs DQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLA0KPj4tICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJmdVc2VySWRlbnRpZnlNYW5hZ2VyR3VpZCwNCj4+LSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsDQo+Pi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBOVUxMLA0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVM TA0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4+LQ0KPj4tICBpZiAo bUlkZW50aWZpZWQpIHsNCj4+LSAgICAqVXNlciA9IChVU0VSX1BST0ZJTEVfRU5UUlkgKikgbUN1 cnJlbnRVc2VyOw0KPj4tICAgIFVwZGF0ZVVzZXJJbmZvICgqVXNlcik7DQo+Pi0gICAgcmV0dXJu IEVGSV9TVUNDRVNTOw0KPj4tICB9DQo+Pi0NCj4+LSAgcmV0dXJuIEVGSV9BQ0NFU1NfREVOSUVE Ow0KPj4tfQ0KPj4tDQo+Pi0NCj4+LS8qKg0KPj4tICBBbiBlbXB0eSBmdW5jdGlvbiB0byBwYXNz IGVycm9yIGNoZWNraW5nIG9mIENyZWF0ZUV2ZW50RXggKCkuDQo+Pi0NCj4+LSAgQHBhcmFtICBF dmVudCAgICAgICAgIEV2ZW50IHdob3NlIG5vdGlmaWNhdGlvbiBmdW5jdGlvbiBpcyBiZWluZyBp bnZva2VkLg0KPj4tICBAcGFyYW0gIENvbnRleHQgICAgICAgUG9pbnRlciB0byB0aGUgbm90aWZp Y2F0aW9uIGZ1bmN0aW9uJ3MgY29udGV4dCwNCj4+LSAgICAgICAgICAgICAgICAgICAgICAgIHdo aWNoIGlzIGltcGxlbWVudGF0aW9uLWRlcGVuZGVudC4NCj4+LQ0KPj4tKiovDQo+Pi1WT0lEDQo+ Pi1FRklBUEkNCj4+LUludGVybmFsRW1wdHlGdW50aW9uICgNCj4+LSAgSU4gRUZJX0VWRU5UICAg ICAgICAgICAgICAgIEV2ZW50LA0KPj4tICBJTiBWT0lEICAgICAgICAgICAgICAgICAgICAgKkNv bnRleHQNCj4+LSAgKQ0KPj4tew0KPj4tfQ0KPj4tDQo+Pi0NCj4+LS8qKg0KPj4tICBDcmVhdGUs IFNpZ25hbCwgYW5kIENsb3NlIHRoZSBVc2VyIFByb2ZpbGUgQ2hhbmdlZCBldmVudC4NCj4+LQ0K Pj4tKiovDQo+Pi1WT0lEDQo+Pi1TaWduYWxFdmVudFVzZXJQcm9maWxlQ2hhbmdlZCAoDQo+Pi0g IFZPSUQNCj4+LSAgKQ0KPj4tew0KPj4tICBFRklfU1RBVFVTICAgIFN0YXR1czsNCj4+LSAgRUZJ X0VWRU5UICAgICBFdmVudDsNCj4+LQ0KPj4tICBTdGF0dXMgPSBnQlMtPkNyZWF0ZUV2ZW50RXgg KA0KPj4tICAgICAgICAgICAgICAgICAgRVZUX05PVElGWV9TSUdOQUwsDQo+Pi0gICAgICAgICAg ICAgICAgICBUUExfQ0FMTEJBQ0ssDQo+Pi0gICAgICAgICAgICAgICAgICBJbnRlcm5hbEVtcHR5 RnVudGlvbiwNCj4+LSAgICAgICAgICAgICAgICAgIE5VTEwsDQo+Pi0gICAgICAgICAgICAgICAg ICAmZ0VmaUV2ZW50VXNlclByb2ZpbGVDaGFuZ2VkR3VpZCwNCj4+LSAgICAgICAgICAgICAgICAg ICZFdmVudA0KPj4tICAgICAgICAgICAgICAgICAgKTsNCj4+LSAgQVNTRVJUX0VGSV9FUlJPUiAo U3RhdHVzKTsNCj4+LSAgZ0JTLT5TaWduYWxFdmVudCAoRXZlbnQpOw0KPj4tICBnQlMtPkNsb3Nl RXZlbnQgKEV2ZW50KTsNCj4+LX0NCj4+LQ0KPj4tDQo+Pi0vKioNCj4+LSAgQ3JlYXRlIGEgbmV3 IHVzZXIgcHJvZmlsZS4NCj4+LQ0KPj4tICBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYSBuZXcgdXNl ciBwcm9maWxlIHdpdGggb25seSBhIG5ldyB1c2VyIGlkZW50aWZpZXINCj4+YXR0YWNoZWQgYW5k IHJldHVybnMNCj4+LSAgaXRzIGhhbmRsZS4gVGhlIHVzZXIgcHJvZmlsZSBpcyBub24tdm9sYXRp bGUsIGJ1dCB0aGUgaGFuZGxlIFVzZXIgY2FuIGNoYW5nZQ0KPj5hY3Jvc3MgcmVib290cy4NCj4+ LQ0KPj4tICBAcGFyYW1baW5dICBUaGlzICAgICAgICAgICAgICAgUG9pbnRzIHRvIHRoaXMgaW5z dGFuY2Ugb2YgdGhlDQo+PkVGSV9VU0VSX01BTkFHRVJfUFJPVE9DT0wuDQo+Pi0gIEBwYXJhbVtv dXRdIFVzZXIgICAgICAgICAgICAgICBPbiByZXR1cm4sIHBvaW50cyB0byB0aGUgbmV3IHVzZXIg cHJvZmlsZSBoYW5kbGUuDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUg dXNlciBwcm9maWxlIGhhbmRsZSBpcyB1bmlxdWUgb25seSBkdXJpbmcgdGhpcyBib290Lg0KPj4t DQo+Pi0gIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICBVc2VyIHByb2ZpbGUgd2FzIHN1 Y2Nlc3NmdWxseSBjcmVhdGVkLg0KPj4tICBAcmV0dmFsIEVGSV9BQ0NFU1NfREVOSUVEICAgICAg Q3VycmVudCB1c2VyIGRvZXMgbm90IGhhdmUgc3VmZmljaWVudA0KPj5wZXJtaXNzaW9ucyB0byBj cmVhdGUgYQ0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlciBwcm9maWxl Lg0KPj4tICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICAgQ3JlYXRpb24gb2YgbmV3IHVz ZXIgcHJvZmlsZXMgaXMgbm90DQo+PnN1cHBvcnRlZC4NCj4+LSAgQHJldHZhbCBFRklfSU5WQUxJ RF9QQVJBTUVURVIgIFRoZSBVc2VyIHBhcmFtZXRlciBpcyBOVUxMLg0KPj4tDQo+Pi0qKi8NCj4+ LUVGSV9TVEFUVVMNCj4+LUVGSUFQSQ0KPj4tVXNlclByb2ZpbGVDcmVhdGUgKA0KPj4tICBJTiBD T05TVCAgRUZJX1VTRVJfTUFOQUdFUl9QUk9UT0NPTCAgICAgICAgICAgKlRoaXMsDQo+Pi0gIE9V VCAgICAgICBFRklfVVNFUl9QUk9GSUxFX0hBTkRMRSAgICAgICAgICAgICAqVXNlcg0KPj4tICAp DQo+Pi17DQo+Pi0gIEVGSV9TVEFUVVMgIFN0YXR1czsNCj4+LQ0KPj4tICBpZiAoKFRoaXMgPT0g TlVMTCkgfHwgKFVzZXIgPT0gTlVMTCkpIHsNCj4+LSAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFS QU1FVEVSOw0KPj4tICB9DQo+Pi0NCj4+LSAgLy8NCj4+LSAgLy8gQ2hlY2sgdGhlIHJpZ2h0IG9m IHRoZSBjdXJyZW50IHVzZXIuDQo+Pi0gIC8vDQo+Pi0gIGlmICghQ2hlY2tDdXJyZW50VXNlckFj Y2Vzc1JpZ2h0IChFRklfVVNFUl9JTkZPX0FDQ0VTU19NQU5BR0UpKSB7DQo+Pi0gICAgaWYgKCFD aGVja0N1cnJlbnRVc2VyQWNjZXNzUmlnaHQNCj4+KEVGSV9VU0VSX0lORk9fQUNDRVNTX0VOUk9M TF9PVEhFUlMpKSB7DQo+Pi0gICAgICByZXR1cm4gRUZJX0FDQ0VTU19ERU5JRUQ7DQo+Pi0gICAg fQ0KPj4tICB9DQo+Pi0NCj4+LSAgLy8NCj4+LSAgLy8gQ3JlYXRlIG5ldyB1c2VyIHByb2ZpbGUN Cj4+LSAgLy8NCj4+LSAgU3RhdHVzID0gQ3JlYXRlVXNlclByb2ZpbGUgKChVU0VSX1BST0ZJTEVf RU5UUlkgKiopIFVzZXIpOw0KPj4tICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+Pi0gICAg cmV0dXJuIEVGSV9BQ0NFU1NfREVOSUVEOw0KPj4tICB9DQo+Pi0gIHJldHVybiBFRklfU1VDQ0VT UzsNCj4+LX0NCj4+LQ0KPj4tDQo+Pi0vKioNCj4+LSAgRGVsZXRlIGFuIGV4aXN0aW5nIHVzZXIg cHJvZmlsZS4NCj4+LQ0KPj4tICBAcGFyYW1baW5dIFRoaXMgICAgICAgICAgICAgICAgUG9pbnRz IHRvIHRoaXMgaW5zdGFuY2Ugb2YgdGhlDQo+PkVGSV9VU0VSX01BTkFHRVJfUFJPVE9DT0wuDQo+ Pi0gIEBwYXJhbVtpbl0gVXNlciAgICAgICAgICAgICAgICBVc2VyIHByb2ZpbGUgaGFuZGxlLg0K Pj4tDQo+Pi0gIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICBVc2VyIHByb2ZpbGUgd2Fz IHN1Y2Nlc3NmdWxseSBkZWxldGVkLg0KPj4tICBAcmV0dmFsIEVGSV9BQ0NFU1NfREVOSUVEICAg ICAgQ3VycmVudCB1c2VyIGRvZXMgbm90IGhhdmUgc3VmZmljaWVudA0KPj5wZXJtaXNzaW9ucyB0 byBkZWxldGUgYSB1c2VyDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9m aWxlIG9yIHRoZXJlIGlzIG9ubHkgb25lIHVzZXIgcHJvZmlsZS4NCj4+LSAgQHJldHZhbCBFRklf VU5TVVBQT1JURUQgICAgICAgIERlbGV0aW9uIG9mIG5ldyB1c2VyIHByb2ZpbGVzIGlzIG5vdA0K Pj5zdXBwb3J0ZWQuDQo+Pi0gIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICBVc2VyIGRv ZXMgbm90IHJlZmVyIHRvIGEgdmFsaWQgdXNlcg0KPj5wcm9maWxlLg0KPj4tDQo+Pi0qKi8NCj4+ LUVGSV9TVEFUVVMNCj4+LUVGSUFQSQ0KPj4tVXNlclByb2ZpbGVEZWxldGUgKA0KPj4tICBJTiBD T05TVCAgRUZJX1VTRVJfTUFOQUdFUl9QUk9UT0NPTCAgICAgICAgICAgKlRoaXMsDQo+Pi0gIElO ICAgICAgICBFRklfVVNFUl9QUk9GSUxFX0hBTkRMRSAgICAgICAgICAgICBVc2VyDQo+Pi0gICkN Cj4+LXsNCj4+LSAgRUZJX1NUQVRVUyAgU3RhdHVzOw0KPj4tDQo+Pi0gIGlmIChUaGlzID09IE5V TEwpIHsNCj4+LSAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPj4tICB9DQo+Pi0N Cj4+LSAgLy8NCj4+LSAgLy8gQ2hlY2sgdGhlIHJpZ2h0IG9mIHRoZSBjdXJyZW50IHVzZXIuDQo+ Pi0gIC8vDQo+Pi0gIGlmICghQ2hlY2tDdXJyZW50VXNlckFjY2Vzc1JpZ2h0IChFRklfVVNFUl9J TkZPX0FDQ0VTU19NQU5BR0UpKSB7DQo+Pi0gICAgcmV0dXJuIEVGSV9BQ0NFU1NfREVOSUVEOw0K Pj4tICB9DQo+Pi0NCj4+LSAgLy8NCj4+LSAgLy8gRGVsZXRlIHVzZXIgcHJvZmlsZS4NCj4+LSAg Ly8NCj4+LSAgU3RhdHVzID0gRGVsVXNlclByb2ZpbGUgKFVzZXIpOw0KPj4tICBpZiAoRUZJX0VS Uk9SIChTdGF0dXMpKSB7DQo+Pi0gICAgaWYgKFN0YXR1cyAhPSBFRklfSU5WQUxJRF9QQVJBTUVU RVIpIHsNCj4+LSAgICAgIHJldHVybiBFRklfQUNDRVNTX0RFTklFRDsNCj4+LSAgICB9DQo+Pi0g ICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4+LSAgfQ0KPj4tDQo+Pi0gIHJldHVy biBFRklfU1VDQ0VTUzsNCj4+LX0NCj4+LQ0KPj4tDQo+Pi0vKioNCj4+LSAgRW51bWVyYXRlIGFs bCBvZiB0aGUgZW5yb2xsZWQgdXNlcnMgb24gdGhlIHBsYXRmb3JtLg0KPj4tDQo+Pi0gIFRoaXMg ZnVuY3Rpb24gcmV0dXJucyB0aGUgbmV4dCBlbnJvbGxlZCB1c2VyIHByb2ZpbGUuIFRvIHJldHJp ZXZlIHRoZSBmaXJzdA0KPnVzZXINCj4+cHJvZmlsZSBoYW5kbGUsDQo+Pi0gIHBvaW50IFVzZXIg YXQgYSBOVUxMLiBFYWNoIHN1YnNlcXVlbnQgY2FsbCB3aWxsIHJldHJpZXZlIGFub3RoZXIgdXNl ciBwcm9maWxlDQo+PmhhbmRsZSB1bnRpbCB0aGVyZQ0KPj4tICBhcmUgbm8gbW9yZSwgYXQgd2hp Y2ggcG9pbnQgVXNlciB3aWxsIHBvaW50IHRvIE5VTEwuDQo+Pi0NCj4+LSAgQHBhcmFtW2luXSAg ICAgIFRoaXMgICAgICAgICAgIFBvaW50cyB0byB0aGlzIGluc3RhbmNlIG9mIHRoZQ0KPj5FRklf VVNFUl9NQU5BR0VSX1BST1RPQ09MLg0KPj4tICBAcGFyYW1baW4sIG91dF0gVXNlciAgICAgICAg ICAgT24gZW50cnksIHBvaW50cyB0byB0aGUgcHJldmlvdXMgdXNlciBwcm9maWxlDQo+PmhhbmRs ZSBvciBOVUxMIHRvDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCBl bnVtZXJhdGlvbi4gT24gZXhpdCwgcG9pbnRzIHRvIHRoZSBuZXh0IHVzZXIgcHJvZmlsZQ0KPj5o YW5kbGUNCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIE5VTEwgaWYgdGhl cmUgYXJlIG5vIG1vcmUgdXNlciBwcm9maWxlcy4NCj4+LQ0KPj4tICBAcmV0dmFsIEVGSV9TVUND RVNTICAgICAgICAgICAgTmV4dCBlbnJvbGxlZCB1c2VyIHByb2ZpbGUgc3VjY2Vzc2Z1bGx5IHJl dHVybmVkLg0KPj4tICBAcmV0dmFsIEVGSV9BQ0NFU1NfREVOSUVEICAgICAgTmV4dCBlbnJvbGxl ZCB1c2VyIHByb2ZpbGUgd2FzIG5vdA0KPj5zdWNjZXNzZnVsbHkgcmV0dXJuZWQuDQo+Pi0gIEBy ZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICBUaGUgVXNlciBwYXJhbWV0ZXIgaXMgTlVMTC4N Cj4+LSoqLw0KPj4tRUZJX1NUQVRVUw0KPj4tRUZJQVBJDQo+Pi1Vc2VyUHJvZmlsZUdldE5leHQg KA0KPj4tICBJTiBDT05TVCAgRUZJX1VTRVJfTUFOQUdFUl9QUk9UT0NPTCAgICAgICAgICAgKlRo aXMsDQo+Pi0gIElOIE9VVCAgICBFRklfVVNFUl9QUk9GSUxFX0hBTkRMRSAgICAgICAgICAgICAq VXNlcg0KPj4tICApDQo+Pi17DQo+Pi0gIEVGSV9TVEFUVVMgIFN0YXR1czsNCj4+LQ0KPj4tICBp ZiAoKFRoaXMgPT0gTlVMTCkgfHwgKFVzZXIgPT0gTlVMTCkpIHsNCj4+LSAgICByZXR1cm4gRUZJ X0lOVkFMSURfUEFSQU1FVEVSOw0KPj4tICB9DQo+Pi0NCj4+LSAgU3RhdHVzID0gRmluZFVzZXJQ cm9maWxlICgoVVNFUl9QUk9GSUxFX0VOVFJZICoqKSBVc2VyLCBUUlVFLCBOVUxMKTsNCj4+LSAg aWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPj4tICAgIHJldHVybiBFRklfQUNDRVNTX0RFTklF RDsNCj4+LSAgfQ0KPj4tICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+Pi19DQo+Pi0NCj4+LQ0KPj4t LyoqDQo+Pi0gIFJldHVybiB0aGUgY3VycmVudCB1c2VyIHByb2ZpbGUgaGFuZGxlLg0KPj4tDQo+ Pi0gIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgICAgICAgICBQb2ludHMgdG8gdGhpcyBpbnN0YW5j ZSBvZiB0aGUNCj4+RUZJX1VTRVJfTUFOQUdFUl9QUk9UT0NPTC4NCj4+LSAgQHBhcmFtW291dF0g Q3VycmVudFVzZXIgICAgICAgIE9uIHJldHVybiwgcG9pbnRzIHRvIHRoZSBjdXJyZW50IHVzZXIg cHJvZmlsZQ0KPj5oYW5kbGUuDQo+Pi0NCj4+LSAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAg ICAgIEN1cnJlbnQgdXNlciBwcm9maWxlIGhhbmRsZSByZXR1cm5lZA0KPnN1Y2Nlc3NmdWxseS4N Cj4+LSAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgIFRoZSBDdXJyZW50VXNlciBwYXJh bWV0ZXIgaXMgTlVMTC4NCj4+LQ0KPj4tKiovDQo+Pi1FRklfU1RBVFVTDQo+Pi1FRklBUEkNCj4+ LVVzZXJQcm9maWxlQ3VycmVudCAoDQo+Pi0gIElOIENPTlNUICBFRklfVVNFUl9NQU5BR0VSX1BS T1RPQ09MICAgICAgICAgICAqVGhpcywNCj4+LSAgT1VUICAgICAgIEVGSV9VU0VSX1BST0ZJTEVf SEFORExFICAgICAgICAgICAgICpDdXJyZW50VXNlcg0KPj4tICApDQo+Pi17DQo+Pi0gIC8vDQo+ Pi0gIC8vIEdldCBjdXJyZW50IHVzZXIgcHJvZmlsZS4NCj4+LSAgLy8NCj4+LSAgaWYgKChUaGlz ID09IE5VTEwpIHx8IChDdXJyZW50VXNlciA9PSBOVUxMKSkgew0KPj4tICAgIHJldHVybiBFRklf SU5WQUxJRF9QQVJBTUVURVI7DQo+Pi0gIH0NCj4+LQ0KPj4tICAqQ3VycmVudFVzZXIgPSBtQ3Vy cmVudFVzZXI7DQo+Pi0gIHJldHVybiBFRklfU1VDQ0VTUzsNCj4+LX0NCj4+LQ0KPj4tDQo+Pi0v KioNCj4+LSAgSWRlbnRpZnkgYSB1c2VyLg0KPj4tDQo+Pi0gIElkZW50aWZ5IHRoZSB1c2VyIGFu ZCwgaWYgYXV0aGVudGljYXRlZCwgcmV0dXJucyB0aGUgdXNlciBoYW5kbGUgYW5kDQo+Y2hhbmdl cw0KPj50aGUgY3VycmVudA0KPj4tICB1c2VyIHByb2ZpbGUuIEFsbCB1c2VyIGluZm9ybWF0aW9u IG1hcmtlZCBhcyBwcml2YXRlIGluIGEgcHJldmlvdXNseSBzZWxlY3RlZA0KPj5wcm9maWxlDQo+ Pi0gIGlzIG5vIGxvbmdlciBhdmFpbGFibGUgZm9yIGluc3BlY3Rpb24uDQo+Pi0gIFdoZW5ldmVy IHRoZSBjdXJyZW50IHVzZXIgcHJvZmlsZSBpcyBjaGFuZ2VkIHRoZW4gdGhlIGFuIGV2ZW50IHdp dGggdGhlDQo+PkdVSUQNCj4+LSAgRUZJX0VWRU5UX0dST1VQX1VTRVJfUFJPRklMRV9DSEFOR0VE IGlzIHNpZ25hbGVkLg0KPj4tDQo+Pi0gIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgICAgICAgICBQ b2ludHMgdG8gdGhpcyBpbnN0YW5jZSBvZiB0aGUNCj4+RUZJX1VTRVJfTUFOQUdFUl9QUk9UT0NP TC4NCj4+LSAgQHBhcmFtW291dF0gVXNlciAgICAgICAgICAgICAgIE9uIHJldHVybiwgcG9pbnRz IHRvIHRoZSB1c2VyIHByb2ZpbGUgaGFuZGxlIGZvcg0KPj50aGUgY3VycmVudA0KPj4tICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlciBwcm9maWxlLg0KPj4tDQo+Pi0gIEByZXR2 YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICBVc2VyIHdhcyBzdWNjZXNzZnVsbHkgaWRlbnRpZmll ZC4NCj4+LSAgQHJldHZhbCBFRklfQUNDRVNTX0RFTklFRCAgICAgIFVzZXIgd2FzIG5vdCBzdWNj ZXNzZnVsbHkgaWRlbnRpZmllZC4NCj4+LSAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIg IFRoZSBVc2VyIHBhcmFtZXRlciBpcyBOVUxMLg0KPj4tDQo+Pi0qKi8NCj4+LUVGSV9TVEFUVVMN Cj4+LUVGSUFQSQ0KPj4tVXNlclByb2ZpbGVJZGVudGlmeSAoDQo+Pi0gIElOIENPTlNUICBFRklf VVNFUl9NQU5BR0VSX1BST1RPQ09MICAgICAgICAgICAqVGhpcywNCj4+LSAgT1VUICAgICAgIEVG SV9VU0VSX1BST0ZJTEVfSEFORExFICAgICAgICAgICAgICpVc2VyDQo+Pi0gICkNCj4+LXsNCj4+ LSAgRUZJX1NUQVRVUyAgU3RhdHVzOw0KPj4tDQo+Pi0gIGlmICgoVGhpcyA9PSBOVUxMKSB8fCAo VXNlciA9PSBOVUxMKSkgew0KPj4tICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ Pi0gIH0NCj4+LQ0KPj4tICBpZiAobUN1cnJlbnRVc2VyICE9IE5VTEwpIHsNCj4+LSAgICAqVXNl ciA9IG1DdXJyZW50VXNlcjsNCj4+LSAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+Pi0gIH0NCj4+ LQ0KPj4tICAvLw0KPj4tICAvLyBJZGVudGlmeSB1c2VyDQo+Pi0gIC8vDQo+Pi0gIFN0YXR1cyA9 IElkZW50aWZ5VXNlciAoKFVTRVJfUFJPRklMRV9FTlRSWSAqKikgVXNlcik7DQo+Pi0gIGlmIChF RklfRVJST1IgKFN0YXR1cykpIHsNCj4+LSAgICByZXR1cm4gRUZJX0FDQ0VTU19ERU5JRUQ7DQo+ Pi0gIH0NCj4+LQ0KPj4tICAvLw0KPj4tICAvLyBQdWJsaXNoIHRoZSB1c2VyIGluZm8gaW50byB0 aGUgRUZJIHN5c3RlbSBjb25maWd1cmF0aW9uIHRhYmxlLg0KPj4tICAvLw0KPj4tICBQdWJsaXNo VXNlclRhYmxlICgpOw0KPj4tDQo+Pi0gIC8vDQo+Pi0gIC8vIFNpZ25hbCBVc2VyIFByb2ZpbGUg Q2hhbmdlZCBldmVudC4NCj4+LSAgLy8NCj4+LSAgU2lnbmFsRXZlbnRVc2VyUHJvZmlsZUNoYW5n ZWQgKCk7DQo+Pi0gIHJldHVybiBFRklfU1VDQ0VTUzsNCj4+LX0NCj4+LQ0KPj4tLyoqDQo+Pi0g IEZpbmQgYSB1c2VyIHVzaW5nIGEgdXNlciBpbmZvcm1hdGlvbiByZWNvcmQuDQo+Pi0NCj4+LSAg VGhpcyBmdW5jdGlvbiBzZWFyY2hlcyBhbGwgdXNlciBwcm9maWxlcyBmb3IgdGhlIHNwZWNpZmll ZCB1c2VyIGluZm9ybWF0aW9uDQo+PnJlY29yZC4NCj4+LSAgVGhlIHNlYXJjaCBzdGFydHMgd2l0 aCB0aGUgdXNlciBpbmZvcm1hdGlvbiByZWNvcmQgaGFuZGxlIGZvbGxvd2luZw0KPj5Vc2VySW5m byBhbmQNCj4+LSAgY29udGludWVzIHVudGlsIGVpdGhlciB0aGUgaW5mb3JtYXRpb24gaXMgZm91 bmQgb3IgdGhlcmUgYXJlIG5vIG1vcmUgdXNlcg0KPj5wcm9maWxlcy4NCj4+LSAgQSBtYXRjaCBv Y2N1cnMgd2hlbiB0aGUgSW5mby5JbmZvVHlwZSBmaWVsZCBtYXRjaGVzIHRoZSB1c2VyIGluZm9y bWF0aW9uDQo+PnJlY29yZA0KPj4tICB0eXBlIGFuZCB0aGUgdXNlciBpbmZvcm1hdGlvbiByZWNv cmQgZGF0YSBtYXRjaGVzIHRoZSBwb3J0aW9uIG9mIEluZm8uDQo+Pi0NCj4+LSAgQHBhcmFtW2lu XSAgICAgIFRoaXMgICAgICAgICAgIFBvaW50cyB0byB0aGlzIGluc3RhbmNlIG9mIHRoZQ0KPj5F RklfVVNFUl9NQU5BR0VSX1BST1RPQ09MLg0KPj4tICBAcGFyYW1baW4sIG91dF0gVXNlciAgICAg ICAgICAgT24gZW50cnksIHBvaW50cyB0byB0aGUgcHJldmlvdXNseSByZXR1cm5lZA0KPnVzZXIN Cj4+cHJvZmlsZQ0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLCBv ciBOVUxMIHRvIHN0YXJ0IHNlYXJjaGluZyB3aXRoIHRoZSBmaXJzdCB1c2VyIHByb2ZpbGUuDQo+ Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPbiByZXR1cm4sIHBvaW50cyB0byB0 aGUgdXNlciBwcm9maWxlIGhhbmRsZSwgb3IgTlVMTCBpZiBub3QNCj4+LSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGZvdW5kLg0KPj4tICBAcGFyYW1baW4sIG91dF0gVXNlckluZm8g ICAgICAgT24gZW50cnksIHBvaW50cyB0byB0aGUgcHJldmlvdXNseSByZXR1cm5lZA0KPj51c2Vy IGluZm9ybWF0aW9uDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUs IG9yIE5VTEwgdG8gc3RhcnQgc2VhcmNoaW5nIHdpdGggdGhlIGZpcnN0LiBPbiByZXR1cm4sDQo+ Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMgdG8gdGhlIHVzZXIgaW5m b3JtYXRpb24gaGFuZGxlIG9mIHRoZSB1c2VyDQo+PmluZm9ybWF0aW9uDQo+Pi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICByZWNvcmQsIG9yIE5VTEwgaWYgbm90IGZvdW5kLiBDYW4g YmUgTlVMTCwgaW4gd2hpY2ggY2FzZQ0KPm9ubHkNCj4+LSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIG9uZSB1c2VyIGluZm9ybWF0aW9uIHJlY29yZCBwZXIgdXNlciBjYW4gYmUgcmV0 dXJuZWQuDQo+Pi0gIEBwYXJhbVtpbl0gICAgICBJbmZvICAgICAgICAgICBQb2ludHMgdG8gdGhl IGJ1ZmZlciBjb250YWluaW5nIHRoZSB1c2VyDQo+aW5mb3JtYXRpb24NCj4+dG8gYmUNCj4+LSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhcmVkIHRvIHRoZSB1c2VyIGluZm9y bWF0aW9uIHJlY29yZC4gSWYgdGhlIHVzZXINCj4+aW5mb3JtYXRpb24NCj4+LSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHJlY29yZCBkYXRhIGlzIGVtcHR5LCB0aGVuIG9ubHkgdGhl IHVzZXIgaW5mb3JtYXRpb24gcmVjb3JkDQo+PnR5cGUNCj4+LSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGlzIGNvbXBhcmVkLiBJZiBJbmZvU2l6ZSBpcyAwLCB0aGVuIHRoZSB1c2Vy IGluZm9ybWF0aW9uDQo+cmVjb3JkDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBtdXN0IGJlIGVtcHR5Lg0KPj4tDQo+Pi0gIEBwYXJhbVtpbl0gICAgICBJbmZvU2l6ZSAgICAg ICBUaGUgc2l6ZSBvZiBJbmZvLCBpbiBieXRlcy4NCj4+LQ0KPj4tICBAcmV0dmFsIEVGSV9TVUND RVNTICAgICAgICAgICAgVXNlciBpbmZvcm1hdGlvbiB3YXMgZm91bmQuIFVzZXIgcG9pbnRzIHRv IHRoZQ0KPj51c2VyIHByb2ZpbGUNCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGhhbmRsZSwgYW5kIFVzZXJJbmZvIHBvaW50cyB0byB0aGUgdXNlciBpbmZvcm1hdGlvbiBoYW5k bGUuDQo+Pi0gIEByZXR2YWwgRUZJX05PVF9GT1VORCAgICAgICAgICBVc2VyIGluZm9ybWF0aW9u IHdhcyBub3QgZm91bmQuIFVzZXINCj5wb2ludHMNCj4+dG8gTlVMTCwgYW5kDQo+Pi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VySW5mbyBwb2ludHMgdG8gTlVMTC4NCj4+LSAg QHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgIFVzZXIgaXMgTlVMTC4gT3IgSW5mbyBpcyBO VUxMLg0KPj4tDQo+Pi0qKi8NCj4+LUVGSV9TVEFUVVMNCj4+LUVGSUFQSQ0KPj4tVXNlclByb2Zp bGVGaW5kICgNCj4+LSAgSU4gICAgIENPTlNUIEVGSV9VU0VSX01BTkFHRVJfUFJPVE9DT0wgICAg ICAgICpUaGlzLA0KPj4tICBJTiBPVVQgRUZJX1VTRVJfUFJPRklMRV9IQU5ETEUgICAgICAgICAg ICAgICAgKlVzZXIsDQo+Pi0gIElOIE9VVCBFRklfVVNFUl9JTkZPX0hBTkRMRSAgICAgICAgICAg ICAgICAgICAqVXNlckluZm8gT1BUSU9OQUwsDQo+Pi0gIElOICAgICBDT05TVCBFRklfVVNFUl9J TkZPICAgICAgICAgICAgICAgICAgICAqSW5mbywNCj4+LSAgSU4gICAgIFVJTlROICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEluZm9TaXplDQo+Pi0gICkNCj4+LXsNCj4+LSAgRUZJ X1NUQVRVUyAgU3RhdHVzOw0KPj4tICBVSU5UTiAgICAgICBTaXplOw0KPj4tDQo+Pi0gIGlmICgo VGhpcyA9PSBOVUxMKSB8fCAoVXNlciA9PSBOVUxMKSB8fCAoSW5mbyA9PSBOVUxMKSkgew0KPj4t ICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+Pi0gIH0NCj4+LQ0KPj4tICBpZiAo SW5mb1NpemUgPT0gMCkgew0KPj4tICAgIC8vDQo+Pi0gICAgLy8gSWYgSW5mb1NpemUgaXMgMCwg dGhlbiB0aGUgdXNlciBpbmZvcm1hdGlvbiByZWNvcmQgbXVzdCBiZSBlbXB0eS4NCj4+LSAgICAv Lw0KPj4tICAgIGlmIChJbmZvLT5JbmZvU2l6ZSAhPSBzaXplb2YgKEVGSV9VU0VSX0lORk8pKSB7 DQo+Pi0gICAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPj4tICAgIH0NCj4+LSAg fSBlbHNlIHsNCj4+LSAgICBpZiAoSW5mb1NpemUgIT0gSW5mby0+SW5mb1NpemUpIHsNCj4+LSAg ICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+Pi0gICAgfQ0KPj4tICB9DQo+Pi0g IFNpemUgPSBJbmZvLT5JbmZvU2l6ZTsNCj4+LQ0KPj4tICAvLw0KPj4tICAvLyBGaW5kIHVzZXIg cHJvZmlsZSBhY2Nkb3JpbmcgdG8gdXNlciBpbmZvcm1hdGlvbi4NCj4+LSAgLy8NCj4+LSAgU3Rh dHVzID0gRmluZFVzZXJQcm9maWxlQnlJbmZvICgNCj4+LSAgICAgICAgICAgIChVU0VSX1BST0ZJ TEVfRU5UUlkgKiopIFVzZXIsDQo+Pi0gICAgICAgICAgICAoRUZJX1VTRVJfSU5GTyAqKikgVXNl ckluZm8sDQo+Pi0gICAgICAgICAgICAoRUZJX1VTRVJfSU5GTyAqKSBJbmZvLA0KPj4tICAgICAg ICAgICAgU2l6ZQ0KPj4tICAgICAgICAgICAgKTsNCj4+LSAgaWYgKEVGSV9FUlJPUiAoU3RhdHVz KSkgew0KPj4tICAgICpVc2VyID0gTlVMTDsNCj4+LSAgICBpZiAoVXNlckluZm8gIT0gTlVMTCkg ew0KPj4tICAgICAgKlVzZXJJbmZvID0gTlVMTDsNCj4+LSAgICB9DQo+Pi0gICAgcmV0dXJuIEVG SV9OT1RfRk9VTkQ7DQo+Pi0gIH0NCj4+LQ0KPj4tICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+Pi19 DQo+Pi0NCj4+LQ0KPj4tLyoqDQo+Pi0gIFJldHVybiBpbmZvcm1hdGlvbiBhdHRhY2hlZCB0byB0 aGUgdXNlci4NCj4+LQ0KPj4tICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdXNlciBpbmZvcm1hdGlv bi4gVGhlIGZvcm1hdCBvZiB0aGUgaW5mb3JtYXRpb24gaXMNCj4+ZGVzY3JpYmVkIGluIFVzZXIN Cj4+LSAgSW5mb3JtYXRpb24uIFRoZSBmdW5jdGlvbiBtYXkgcmV0dXJuIEVGSV9BQ0NFU1NfREVO SUVEIGlmIHRoZQ0KPj5pbmZvcm1hdGlvbiBpcyBtYXJrZWQgcHJpdmF0ZQ0KPj4tICBhbmQgdGhl IGhhbmRsZSBzcGVjaWZpZWQgYnkgVXNlciBpcyBub3QgdGhlIGN1cnJlbnQgdXNlciBwcm9maWxl LiBUaGUNCj5mdW5jdGlvbg0KPj5tYXkgcmV0dXJuDQo+Pi0gIEVGSV9BQ0NFU1NfREVOSUVEIGlm IHRoZSBpbmZvcm1hdGlvbiBpcyBtYXJrZWQgcHJvdGVjdGVkIGFuZCB0aGUNCj4+aW5mb3JtYXRp b24gaXMgYXNzb2NpYXRlZA0KPj4tICB3aXRoIGEgY3JlZGVudGlhbCBwcm92aWRlciBmb3Igd2hp Y2ggdGhlIHVzZXIgaGFzIG5vdCBiZWVuIGF1dGhlbnRpY2F0ZWQuDQo+Pi0NCj4+LSAgQHBhcmFt W2luXSAgICAgIFRoaXMgICAgICAgICAgIFBvaW50cyB0byB0aGlzIGluc3RhbmNlIG9mIHRoZQ0K Pj5FRklfVVNFUl9NQU5BR0VSX1BST1RPQ09MLg0KPj4tICBAcGFyYW1baW5dICAgICAgVXNlciAg ICAgICAgICAgSGFuZGxlIG9mIHRoZSB1c2VyIHdob3NlIHByb2ZpbGUgd2lsbCBiZSByZXRyaWV2 ZWQuDQo+Pi0gIEBwYXJhbVtpbl0gICAgICBVc2VySW5mbyAgICAgICBIYW5kbGUgb2YgdGhlIHVz ZXIgaW5mb3JtYXRpb24gZGF0YSByZWNvcmQuDQo+Pi0gIEBwYXJhbVtvdXRdICAgICBJbmZvICAg ICAgICAgICBPbiBlbnRyeSwgcG9pbnRzIHRvIGEgYnVmZmVyIG9mIGF0IGxlYXN0ICpJbmZvU2l6 ZQ0KPj5ieXRlcy4gT24gZXhpdCwNCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGhvbGRzIHRoZSB1c2VyIGluZm9ybWF0aW9uLiBJZiB0aGUgYnVmZmVyIGlzIHRvbyBzbWFsbCB0 byBob2xkDQo+PnRoZQ0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mb3Jt YXRpb24sIHRoZW4gRUZJX0JVRkZFUl9UT09fU01BTEwgaXMgcmV0dXJuZWQgYW5kDQo+PkluZm9T aXplIGlzDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVkIHRvIGNv bnRhaW4gdGhlIG51bWJlciBvZiBieXRlcyBhY3R1YWxseSByZXF1aXJlZC4NCj4+LSAgQHBhcmFt W2luLCBvdXRdIEluZm9TaXplICAgICAgIE9uIGVudHJ5LCBwb2ludHMgdG8gdGhlIHNpemUgb2Yg SW5mby4gT24gcmV0dXJuLA0KPj5wb2ludHMgdG8gdGhlIHNpemUNCj4+LSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG9mIHRoZSB1c2VyIGluZm9ybWF0aW9uLg0KPj4tDQo+Pi0gIEBy ZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICBJbmZvcm1hdGlvbiByZXR1cm5lZCBzdWNjZXNz ZnVsbHkuDQo+Pi0gIEByZXR2YWwgRUZJX0FDQ0VTU19ERU5JRUQgICAgICBUaGUgaW5mb3JtYXRp b24gYWJvdXQgdGhlIHNwZWNpZmllZCB1c2VyDQo+PmNhbm5vdCBiZSBhY2Nlc3NlZCBieSB0aGUN Cj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgdXNlci4NCj4+LSAg QHJldHZhbCBFRklfQlVGRkVSX1RPT19TTUFMTCAgIFRoZSBudW1iZXIgb2YgYnl0ZXMgc3BlY2lm aWVkIGJ5DQo+PipJbmZvU2l6ZSBpcyB0b28gc21hbGwgdG8gaG9sZCB0aGUNCj4+LSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybmVkIGRhdGEuIFRoZSBhY3R1YWwgc2l6ZSBy ZXF1aXJlZCBpcyByZXR1cm5lZCBpbg0KPj4qSW5mb1NpemUuDQo+Pi0gIEByZXR2YWwgRUZJX05P VF9GT1VORCAgICAgICAgICBVc2VyIGRvZXMgbm90IHJlZmVyIHRvIGEgdmFsaWQgdXNlciBwcm9m aWxlIG9yDQo+PlVzZXJJbmZvIGRvZXMgbm90IHJlZmVyDQo+Pi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB0byBhIHZhbGlkIHVzZXIgaW5mbyBoYW5kbGUuDQo+Pi0gIEByZXR2YWwg RUZJX0lOVkFMSURfUEFSQU1FVEVSICBJbmZvIGlzIE5VTEwgb3IgSW5mb1NpemUgaXMgTlVMTC4N Cj4+LQ0KPj4tKiovDQo+Pi1FRklfU1RBVFVTDQo+Pi1FRklBUEkNCj4+LVVzZXJQcm9maWxlR2V0 SW5mbyAoDQo+Pi0gIElOIENPTlNUICBFRklfVVNFUl9NQU5BR0VSX1BST1RPQ09MICAgICAgICAg ICAqVGhpcywNCj4+LSAgSU4gICAgICAgIEVGSV9VU0VSX1BST0ZJTEVfSEFORExFICAgICAgICAg ICAgIFVzZXIsDQo+Pi0gIElOICAgICAgICBFRklfVVNFUl9JTkZPX0hBTkRMRSAgICAgICAgICAg ICAgICBVc2VySW5mbywNCj4+LSAgT1VUICAgICAgIEVGSV9VU0VSX0lORk8gICAgICAgICAgICAg ICAgICAgICAgICpJbmZvLA0KPj4tICBJTiBPVVQgICAgVUlOVE4gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKkluZm9TaXplDQo+Pi0gICkNCj4+LXsNCj4+LSAgRUZJX1NUQVRVUyAgU3Rh dHVzOw0KPj4tDQo+Pi0gIGlmICgoVGhpcyA9PSBOVUxMKSB8fCAoSW5mb1NpemUgPT0gTlVMTCkp IHsNCj4+LSAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPj4tICB9DQo+Pi0NCj4+ LSAgaWYgKCgqSW5mb1NpemUgIT0gMCkgJiYgKEluZm8gPT0gTlVMTCkpIHsNCj4+LSAgICByZXR1 cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPj4tICB9DQo+Pi0NCj4+LSAgaWYgKChVc2VyID09 IE5VTEwpIHx8IChVc2VySW5mbyA9PSBOVUxMKSkgew0KPj4tICAgIHJldHVybiBFRklfTk9UX0ZP VU5EOw0KPj4tICB9DQo+Pi0NCj4+LSAgU3RhdHVzID0gR2V0VXNlckluZm8gKFVzZXIsIFVzZXJJ bmZvLCBJbmZvLCBJbmZvU2l6ZSwgVFJVRSk7DQo+Pi0gIGlmIChFRklfRVJST1IgKFN0YXR1cykp IHsNCj4+LSAgICBpZiAoU3RhdHVzID09IEVGSV9CVUZGRVJfVE9PX1NNQUxMKSB7DQo+Pi0gICAg ICByZXR1cm4gRUZJX0JVRkZFUl9UT09fU01BTEw7DQo+Pi0gICAgfQ0KPj4tICAgIHJldHVybiBF RklfQUNDRVNTX0RFTklFRDsNCj4+LSAgfQ0KPj4tICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+Pi19 DQo+Pi0NCj4+LQ0KPj4tLyoqDQo+Pi0gIEFkZCBvciB1cGRhdGUgdXNlciBpbmZvcm1hdGlvbi4N Cj4+LQ0KPj4tICBUaGlzIGZ1bmN0aW9uIGNoYW5nZXMgdXNlciBpbmZvcm1hdGlvbi4gIElmIE5V TEwgaXMgcG9pbnRlZCB0byBieSBVc2VySW5mbywNCj4+dGhlbiBhIG5ldyB1c2VyDQo+Pi0gIGlu Zm9ybWF0aW9uIHJlY29yZCBpcyBjcmVhdGVkIGFuZCBpdHMgaGFuZGxlIGlzIHJldHVybmVkIGlu IFVzZXJJbmZvLg0KPj5PdGhlcndpc2UsIHRoZSBleGlzdGluZw0KPj4tICBvbmUgaXMgcmVwbGFj ZWQuDQo+Pi0gIElmIEVGSV9VU0VSX0lORk9fSURFTklUVFlfUE9MSUNZX1JFQ09SRCBpcyBjaGFu Z2VkLCBpdCBpcyB0aGUgY2FsbGVyJ3MNCj4+cmVzcG9uc2liaWxpdHkgdG8ga2VlcA0KPj4tICBp dCB0byBiZSBzeW5jZWQgd2l0aCB0aGUgaW5mb3JtYXRpb24gb24gY3JlZGVudGlhbCBwcm92aWRl cnMuDQo+Pi0gIElmIEVGSV9VU0VSX0lORk9fRVhDTFVTSVZFIGlzIHNwZWNpZmllZCBpbiBJbmZv IGFuZCBhIHVzZXIgaW5mb3JtYXRpb24NCj4+cmVjb3JkIG9mIHRoZSBzYW1lDQo+Pi0gIHR5cGUg YWxyZWFkeSBleGlzdHMgaW4gdGhlIHVzZXIgcHJvZmlsZSwgdGhlbiBFRklfQUNDRVNTX0RFTklF RCB3aWxsIGJlDQo+PnJldHVybmVkIGFuZCBVc2VySW5mbw0KPj4tICB3aWxsIHBvaW50IHRvIHRo ZSBoYW5kbGUgb2YgdGhlIGV4aXN0aW5nIHJlY29yZC4NCj4+LQ0KPj4tICBAcGFyYW1baW5dICAg ICAgVGhpcyAgICAgICAgICAgIFBvaW50cyB0byB0aGlzIGluc3RhbmNlIG9mIHRoZQ0KPj5FRklf VVNFUl9NQU5BR0VSX1BST1RPQ09MLg0KPj4tICBAcGFyYW1baW5dICAgICAgVXNlciAgICAgICAg ICAgIEhhbmRsZSBvZiB0aGUgdXNlciB3aG9zZSBwcm9maWxlIHdpbGwgYmUNCj5yZXRyaWV2ZWQu DQo+Pi0gIEBwYXJhbVtpbiwgb3V0XSBVc2VySW5mbyAgICAgICAgSGFuZGxlIG9mIHRoZSB1c2Vy IGluZm9ybWF0aW9uIGRhdGEgcmVjb3JkLg0KPj4tICBAcGFyYW1baW5dICAgICAgSW5mbyAgICAg ICAgICAgIE9uIGVudHJ5LCBwb2ludHMgdG8gYSBidWZmZXIgb2YgYXQgbGVhc3QgKkluZm9TaXpl DQo+PmJ5dGVzLiBPbiBleGl0LA0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGhvbGRzIHRoZSB1c2VyIGluZm9ybWF0aW9uLiBJZiB0aGUgYnVmZmVyIGlzIHRvbyBzbWFsbCB0 byBob2xkDQo+PnRoZQ0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9y bWF0aW9uLCB0aGVuIEVGSV9CVUZGRVJfVE9PX1NNQUxMIGlzIHJldHVybmVkDQo+YW5kDQo+Pklu Zm9TaXplIGlzDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlZCB0 byBjb250YWluIHRoZSBudW1iZXIgb2YgYnl0ZXMgYWN0dWFsbHkgcmVxdWlyZWQuDQo+Pi0gIEBw YXJhbVtpbl0gICAgICBJbmZvU2l6ZSAgICAgICAgT24gZW50cnksIHBvaW50cyB0byB0aGUgc2l6 ZSBvZiBJbmZvLiBPbiByZXR1cm4sDQo+PnBvaW50cyB0byB0aGUgc2l6ZQ0KPj4tICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSB1c2VyIGluZm9ybWF0aW9uLg0KPj4tDQo+ Pi0gIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICAgSW5mb3JtYXRpb24gcmV0dXJuZWQg c3VjY2Vzc2Z1bGx5Lg0KPj4tICBAcmV0dmFsIEVGSV9BQ0NFU1NfREVOSUVEICAgICAgIFRoZSBy ZWNvcmQgaXMgZXhjbHVzaXZlLg0KPj4tICBAcmV0dmFsIEVGSV9TRUNVUklUWV9WSU9MQVRJT04g IFRoZSBjdXJyZW50IHVzZXIgZG9lcyBub3QgaGF2ZQ0KPj5wZXJtaXNzaW9uIHRvIGNoYW5nZSB0 aGUgc3BlY2lmaWVkDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlciBw cm9maWxlIG9yIHVzZXIgaW5mb3JtYXRpb24gcmVjb3JkLg0KPj4tICBAcmV0dmFsIEVGSV9OT1Rf Rk9VTkQgICAgICAgICAgIFVzZXIgZG9lcyBub3QgcmVmZXIgdG8gYSB2YWxpZCB1c2VyIHByb2Zp bGUgb3INCj4+VXNlckluZm8gZG9lcyBub3QNCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICByZWZlciB0byBhIHZhbGlkIHVzZXIgaW5mbyBoYW5kbGUuDQo+Pi0gIEByZXR2YWwg RUZJX0lOVkFMSURfUEFSQU1FVEVSICAgVXNlckluZm8gaXMgTlVMTCBvciBJbmZvIGlzIE5VTEwu DQo+Pi0qKi8NCj4+LUVGSV9TVEFUVVMNCj4+LUVGSUFQSQ0KPj4tVXNlclByb2ZpbGVTZXRJbmZv ICgNCj4+LSAgSU4gQ09OU1QgIEVGSV9VU0VSX01BTkFHRVJfUFJPVE9DT0wgICAgICAgICAgICpU aGlzLA0KPj4tICBJTiAgICAgICAgRUZJX1VTRVJfUFJPRklMRV9IQU5ETEUgICAgICAgICAgICAg VXNlciwNCj4+LSAgSU4gT1VUICAgIEVGSV9VU0VSX0lORk9fSEFORExFICAgICAgICAgICAgICAg ICpVc2VySW5mbywNCj4+LSAgSU4gQ09OU1QgIEVGSV9VU0VSX0lORk8gICAgICAgICAgICAgICAg ICAgICAgICpJbmZvLA0KPj4tICBJTiAgICAgICAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgSW5mb1NpemUNCj4+LSAgKQ0KPj4tew0KPj4tICBFRklfU1RBVFVTICBTdGF0dXM7 DQo+Pi0NCj4+LSAgaWYgKChUaGlzID09IE5VTEwpIHx8IChVc2VyID09IE5VTEwpIHx8IChVc2Vy SW5mbyA9PSBOVUxMKSB8fCAoSW5mbyA9PQ0KPk5VTEwpKQ0KPj57DQo+Pi0gICAgcmV0dXJuIEVG SV9JTlZBTElEX1BBUkFNRVRFUjsNCj4+LSAgfQ0KPj4tDQo+Pi0gIC8vDQo+Pi0gIC8vIENoZWNr IHRoZSByaWdodCBvZiB0aGUgY3VycmVudCB1c2VyLg0KPj4tICAvLw0KPj4tICBpZiAoVXNlciAh PSBtQ3VycmVudFVzZXIpIHsNCj4+LSAgICBpZiAoIUNoZWNrQ3VycmVudFVzZXJBY2Nlc3NSaWdo dCAoRUZJX1VTRVJfSU5GT19BQ0NFU1NfTUFOQUdFKSkgew0KPj4tICAgICAgaWYgKCpVc2VySW5m byAhPSBOVUxMKSB7DQo+Pi0gICAgICAgIC8vDQo+Pi0gICAgICAgIC8vIENhbid0IHVwZGF0ZSBp bmZvIGluIG90aGVyIHByb2ZpbGVzIHdpdGhvdXQgTUFOQUdFIHJpZ2h0Lg0KPj4tICAgICAgICAv Lw0KPj4tICAgICAgICByZXR1cm4gRUZJX1NFQ1VSSVRZX1ZJT0xBVElPTjsNCj4+LSAgICAgIH0N Cj4+LQ0KPj4tICAgICAgaWYgKCFDaGVja0N1cnJlbnRVc2VyQWNjZXNzUmlnaHQNCj4+KEVGSV9V U0VSX0lORk9fQUNDRVNTX0VOUk9MTF9PVEhFUlMpKSB7DQo+Pi0gICAgICAgIC8vDQo+Pi0gICAg ICAgIC8vIENhbid0IGFkZCBpbmZvIGludG8gb3RoZXIgcHJvZmlsZXMuDQo+Pi0gICAgICAgIC8v DQo+Pi0gICAgICAgIHJldHVybiBFRklfU0VDVVJJVFlfVklPTEFUSU9OOw0KPj4tICAgICAgfQ0K Pj4tICAgIH0NCj4+LSAgfQ0KPj4tDQo+Pi0gIGlmIChVc2VyID09IG1DdXJyZW50VXNlcikgew0K Pj4tICAgIGlmIChDaGVja0N1cnJlbnRVc2VyQWNjZXNzUmlnaHQNCj4oRUZJX1VTRVJfSU5GT19B Q0NFU1NfRU5ST0xMX1NFTEYpKQ0KPj57DQo+Pi0gICAgICAvLw0KPj4tICAgICAgLy8gT25seSBp ZGVudGlmeSBwb2xpY3kgY2FuIGJlIGFkZGVkL3VwZGF0ZWQuDQo+Pi0gICAgICAvLw0KPj4tICAg ICAgaWYgKEluZm8tPkluZm9UeXBlICE9IEVGSV9VU0VSX0lORk9fSURFTlRJVFlfUE9MSUNZX1JF Q09SRCkgew0KPj4tICAgICAgICByZXR1cm4gRUZJX1NFQ1VSSVRZX1ZJT0xBVElPTjsNCj4+LSAg ICAgIH0NCj4+LSAgICB9DQo+Pi0gIH0NCj4+LQ0KPj4tICAvLw0KPj4tICAvLyBNb2RpZnkgdXNl ciBpbmZvcm1hdGlvbi4NCj4+LSAgLy8NCj4+LSAgU3RhdHVzID0gTW9kaWZ5VXNlckluZm8gKFVz ZXIsIChFRklfVVNFUl9JTkZPICoqKSBVc2VySW5mbywgSW5mbywNCj4+SW5mb1NpemUpOw0KPj4t ICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+Pi0gICAgaWYgKFN0YXR1cyA9PSBFRklfQUND RVNTX0RFTklFRCkgew0KPj4tICAgICAgcmV0dXJuIEVGSV9BQ0NFU1NfREVOSUVEOw0KPj4tICAg IH0NCj4+LSAgICByZXR1cm4gRUZJX1NFQ1VSSVRZX1ZJT0xBVElPTjsNCj4+LSAgfQ0KPj4tICBy ZXR1cm4gRUZJX1NVQ0NFU1M7DQo+Pi19DQo+Pi0NCj4+LQ0KPj4tLyoqDQo+Pi0gIENhbGxlZCBi eSBjcmVkZW50aWFsIHByb3ZpZGVyIHRvIG5vdGlmeSBvZiBpbmZvcm1hdGlvbiBjaGFuZ2UuDQo+ Pi0NCj4+LSAgVGhpcyBmdW5jdGlvbiBhbGxvd3MgdGhlIGNyZWRlbnRpYWwgcHJvdmlkZXIgdG8g bm90aWZ5IHRoZSBVc2VyIElkZW50aXR5DQo+Pk1hbmFnZXIgd2hlbiB1c2VyIHN0YXR1cw0KPj4t ICBoYXMgY2hhbmdlZC4NCj4+LSAgSWYgdGhlIFVzZXIgSWRlbnRpdHkgTWFuYWdlciBkb2Vzbid0 IHN1cHBvcnQgYXN5bmNocm9ub3VzIGNoYW5nZXMgaW4NCj4+Y3JlZGVudGlhbHMsIHRoZW4gdGhp cyBmdW5jdGlvbg0KPj4tICBzaG91bGQgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRC4NCj4+LSAgSWYg Y3VycmVudCB1c2VyIGRvZXMgbm90IGV4aXN0LCBhbmQgdGhlIGNyZWRlbnRpYWwgcHJvdmlkZXIg Y2FuIGlkZW50aWZ5IGENCj51c2VyLA0KPj50aGVuIG1ha2UgdGhlIHVzZXINCj4+LSAgdG8gYmUg Y3VycmVudCB1c2VyIGFuZCBzaWduYWwgdGhlDQo+PkVGSV9FVkVOVF9HUk9VUF9VU0VSX1BST0ZJ TEVfQ0hBTkdFRCBldmVudC4NCj4+LSAgSWYgY3VycmVudCB1c2VyIGFscmVhZHkgZXhpc3RzLCBh bmQgdGhlIGNyZWRlbnRpYWwgcHJvdmlkZXIgY2FuIGlkZW50aWZ5DQo+PmFub3RoZXIgdXNlciwg dGhlbiBzd2l0Y2gNCj4+LSAgY3VycmVudCB1c2VyIHRvIHRoZSBuZXdseSBpZGVudGlmaWVkIHVz ZXIsIGFuZCBzaWduYWwgdGhlDQo+PkVGSV9FVkVOVF9HUk9VUF9VU0VSX1BST0ZJTEVfQ0hBTkdF RCBldmVudC4NCj4+LSAgSWYgY3VycmVudCB1c2VyIHdhcyBpZGVudGlmaWVkIGJ5IHRoaXMgY3Jl ZGVudGlhbCBwcm92aWRlciBhbmQgbm93IHRoZQ0KPj5jcmVkZW50aWFsIHByb3ZpZGVyIGNhbm5v dCBpZGVudGlmeQ0KPj4tICBjdXJyZW50IHVzZXIsIHRoZW4gbG9nb3V0IGN1cnJlbnQgdXNlciBh bmQgc2lnbmFsIHRoZQ0KPj5FRklfRVZFTlRfR1JPVVBfVVNFUl9QUk9GSUxFX0NIQU5HRUQgZXZl bnQuDQo+Pi0NCj4+LSAgQHBhcmFtW2luXSBUaGlzICAgICAgICAgIFBvaW50cyB0byB0aGlzIGlu c3RhbmNlIG9mIHRoZQ0KPj5FRklfVVNFUl9NQU5BR0VSX1BST1RPQ09MLg0KPj4tICBAcGFyYW1b aW5dIENoYW5nZWQgICAgICAgSGFuZGxlIG9uIHdoaWNoIGlzIGluc3RhbGxlZCBhbiBpbnN0YW5j ZSBvZiB0aGUNCj4+RUZJX1VTRVJfQ1JFREVOVElBTDJfUFJPVE9DT0wNCj4+LSAgICAgICAgICAg ICAgICAgICAgICAgICAgIHdoZXJlIHRoZSB1c2VyIGhhcyBjaGFuZ2VkLg0KPj4tDQo+Pi0gIEBy ZXR2YWwgRUZJX1NVQ0NFU1MgICAgICBUaGUgVXNlciBJZGVudGl0eSBNYW5hZ2VyIGhhcyBoYW5k bGVkIHRoZQ0KPj5ub3RpZmljYXRpb24uDQo+Pi0gIEByZXR2YWwgRUZJX05PVF9SRUFEWSAgICBU aGUgZnVuY3Rpb24gd2FzIGNhbGxlZCB3aGlsZSB0aGUgc3BlY2lmaWVkDQo+PmNyZWRlbnRpYWwg cHJvdmlkZXIgd2FzIG5vdCBzZWxlY3RlZC4NCj4+LSAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQg IFRoZSBVc2VyIElkZW50aXR5IE1hbmFnZXIgZG9lc24ndCBzdXBwb3J0DQo+PmFzeW5jaHJvbm91 cyBub3RpZmljYXRpb25zLg0KPj4tDQo+Pi0qKi8NCj4+LUVGSV9TVEFUVVMNCj4+LUVGSUFQSQ0K Pj4tVXNlclByb2ZpbGVOb3RpZnkgKA0KPj4tICBJTiBDT05TVCAgRUZJX1VTRVJfTUFOQUdFUl9Q Uk9UT0NPTCAgICAgICAgICAgKlRoaXMsDQo+Pi0gIElOICAgICAgICBFRklfSEFORExFICAgICAg ICAgICAgICAgICAgICAgICAgICBDaGFuZ2VkDQo+Pi0gICkNCj4+LXsNCj4+LSAgcmV0dXJuIEVG SV9VTlNVUFBPUlRFRDsNCj4+LX0NCj4+LQ0KPj4tDQo+Pi0vKioNCj4+LSAgRGVsZXRlIHVzZXIg aW5mb3JtYXRpb24uDQo+Pi0NCj4+LSAgRGVsZXRlIHRoZSB1c2VyIGluZm9ybWF0aW9uIGF0dGFj aGVkIHRvIHRoZSB1c2VyIHByb2ZpbGUgc3BlY2lmaWVkIGJ5IHRoZQ0KPj5Vc2VySW5mby4NCj4+ LQ0KPj4tICBAcGFyYW1baW5dIFRoaXMgICAgICAgICAgICBQb2ludHMgdG8gdGhpcyBpbnN0YW5j ZSBvZiB0aGUNCj4+RUZJX1VTRVJfTUFOQUdFUl9QUk9UT0NPTC4NCj4+LSAgQHBhcmFtW2luXSBV c2VyICAgICAgICAgICAgSGFuZGxlIG9mIHRoZSB1c2VyIHdob3NlIGluZm9ybWF0aW9uIHdpbGwg YmUNCj4+ZGVsZXRlZC4NCj4+LSAgQHBhcmFtW2luXSBVc2VySW5mbyAgICAgICAgSGFuZGxlIG9m IHRoZSB1c2VyIGluZm9ybWF0aW9uIHRvIHJlbW92ZS4NCj4+LQ0KPj4tICBAcmV0dmFsIEVGSV9T VUNDRVNTICAgICAgICBVc2VyIGluZm9ybWF0aW9uIGRlbGV0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPj4t ICBAcmV0dmFsIEVGSV9OT1RfRk9VTkQgICAgICBVc2VyIGluZm9ybWF0aW9uIHJlY29yZCBVc2Vy SW5mbyBkb2VzIG5vdA0KPj5leGlzdCBpbiB0aGUgdXNlciBwcm9maWxlLg0KPj4tICBAcmV0dmFs IEVGSV9BQ0NFU1NfREVOSUVEICBUaGUgY3VycmVudCB1c2VyIGRvZXMgbm90IGhhdmUgcGVybWlz c2lvbg0KPnRvDQo+PmRlbGV0ZSB0aGlzIHVzZXIgaW5mb3JtYXRpb24uDQo+Pi0NCj4+LSoqLw0K Pj4tRUZJX1NUQVRVUw0KPj4tRUZJQVBJDQo+Pi1Vc2VyUHJvZmlsZURlbGV0ZUluZm8gKA0KPj4t ICBJTiBDT05TVCAgRUZJX1VTRVJfTUFOQUdFUl9QUk9UT0NPTCAgICAgICAgICAgKlRoaXMsDQo+ Pi0gIElOICAgICAgICBFRklfVVNFUl9QUk9GSUxFX0hBTkRMRSAgICAgICAgICAgICBVc2VyLA0K Pj4tICBJTiAgICAgICAgRUZJX1VTRVJfSU5GT19IQU5ETEUgICAgICAgICAgICAgICAgVXNlcklu Zm8NCj4+LSAgKQ0KPj4tew0KPj4tICBFRklfU1RBVFVTICBTdGF0dXM7DQo+Pi0NCj4+LSAgaWYg KFRoaXMgPT0gTlVMTCkgew0KPj4tICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ Pi0gIH0NCj4+LQ0KPj4tICAvLw0KPj4tICAvLyBDaGVjayB0aGUgcmlnaHQgb2YgdGhlIGN1cnJl bnQgdXNlci4NCj4+LSAgLy8NCj4+LSAgaWYgKFVzZXIgIT0gbUN1cnJlbnRVc2VyKSB7DQo+Pi0g ICAgaWYgKCFDaGVja0N1cnJlbnRVc2VyQWNjZXNzUmlnaHQgKEVGSV9VU0VSX0lORk9fQUNDRVNT X01BTkFHRSkpIHsNCj4+LSAgICAgIHJldHVybiBFRklfQUNDRVNTX0RFTklFRDsNCj4+LSAgICB9 DQo+Pi0gIH0NCj4+LQ0KPj4tICAvLw0KPj4tICAvLyBEZWxldGUgdXNlciBpbmZvcm1hdGlvbi4N Cj4+LSAgLy8NCj4+LSAgU3RhdHVzID0gRGVsVXNlckluZm8gKFVzZXIsIFVzZXJJbmZvLCBUUlVF KTsNCj4+LSAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPj4tICAgIGlmIChTdGF0dXMgPT0g RUZJX05PVF9GT1VORCkgew0KPj4tICAgICAgcmV0dXJuIEVGSV9OT1RfRk9VTkQ7DQo+Pi0gICAg fQ0KPj4tICAgIHJldHVybiBFRklfQUNDRVNTX0RFTklFRDsNCj4+LSAgfQ0KPj4tICByZXR1cm4g RUZJX1NVQ0NFU1M7DQo+Pi19DQo+Pi0NCj4+LQ0KPj4tLyoqDQo+Pi0gIEVudW1lcmF0ZSB1c2Vy IGluZm9ybWF0aW9uIG9mIGFsbCB0aGUgZW5yb2xsZWQgdXNlcnMgb24gdGhlIHBsYXRmb3JtLg0K Pj4tDQo+Pi0gIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgbmV4dCB1c2VyIGluZm9ybWF0aW9u IHJlY29yZC4gVG8gcmV0cmlldmUgdGhlIGZpcnN0DQo+PnVzZXINCj4+LSAgaW5mb3JtYXRpb24g cmVjb3JkIGhhbmRsZSwgcG9pbnQgVXNlckluZm8gYXQgYSBOVUxMLiBFYWNoIHN1YnNlcXVlbnQg Y2FsbA0KPj53aWxsIHJldHJpZXZlDQo+Pi0gIGFub3RoZXIgdXNlciBpbmZvcm1hdGlvbiByZWNv cmQgaGFuZGxlIHVudGlsIHRoZXJlIGFyZSBubyBtb3JlLCBhdCB3aGljaA0KPj5wb2ludCBVc2Vy SW5mbw0KPj4tICB3aWxsIHBvaW50IHRvIE5VTEwuDQo+Pi0NCj4+LSAgQHBhcmFtW2luXSAgICAg IFRoaXMgICAgICAgICAgIFBvaW50cyB0byB0aGlzIGluc3RhbmNlIG9mIHRoZQ0KPj5FRklfVVNF Ul9NQU5BR0VSX1BST1RPQ09MLg0KPj4tICBAcGFyYW1baW5dICAgICAgVXNlciAgICAgICAgICAg SGFuZGxlIG9mIHRoZSB1c2VyIHdob3NlIGluZm9ybWF0aW9uIHdpbGwgYmUNCj4+ZGVsZXRlZC4N Cj4+LSAgQHBhcmFtW2luLCBvdXRdIFVzZXJJbmZvICAgICAgIEhhbmRsZSBvZiB0aGUgdXNlciBp bmZvcm1hdGlvbiB0byByZW1vdmUuDQo+Pi0NCj4+LSAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAg ICAgICAgIFVzZXIgaW5mb3JtYXRpb24gcmV0dXJuZWQuDQo+Pi0gIEByZXR2YWwgRUZJX05PVF9G T1VORCAgICAgICAgICBObyBtb3JlIHVzZXIgaW5mb3JtYXRpb24gZm91bmQuDQo+Pi0gIEByZXR2 YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICBVc2VySW5mbyBpcyBOVUxMLg0KPj4tDQo+Pi0qKi8N Cj4+LUVGSV9TVEFUVVMNCj4+LUVGSUFQSQ0KPj4tVXNlclByb2ZpbGVHZXROZXh0SW5mbyAoDQo+ Pi0gIElOIENPTlNUICBFRklfVVNFUl9NQU5BR0VSX1BST1RPQ09MICAgICAgICAgICAqVGhpcywN Cj4+LSAgSU4gICAgICAgIEVGSV9VU0VSX1BST0ZJTEVfSEFORExFICAgICAgICAgICAgIFVzZXIs DQo+Pi0gIElOIE9VVCAgICBFRklfVVNFUl9JTkZPX0hBTkRMRSAgICAgICAgICAgICAgICAqVXNl ckluZm8NCj4+LSAgKQ0KPj4tew0KPj4tICBpZiAoKFRoaXMgPT0gTlVMTCkgfHwgKFVzZXJJbmZv ID09IE5VTEwpKSB7DQo+Pi0gICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4+LSAg fQ0KPj4tICAvLw0KPj4tICAvLyBHZXQgbmV4dCB1c2VyIGluZm9ybWF0aW9uIGVudHJ5Lg0KPj4t ICAvLw0KPj4tICByZXR1cm4gRmluZFVzZXJJbmZvIChVc2VyLCAoRUZJX1VTRVJfSU5GTyAqKikg VXNlckluZm8sIFRSVUUsIE5VTEwpOw0KPj4tfQ0KPj4tDQo+Pi0NCj4+LS8qKg0KPj4tICBNYWlu IGVudHJ5IGZvciB0aGlzIGRyaXZlci4NCj4+LQ0KPj4tICBAcGFyYW1baW5dIEltYWdlSGFuZGxl ICAgICBJbWFnZSBoYW5kbGUgdGhpcyBkcml2ZXIuDQo+Pi0gIEBwYXJhbVtpbl0gU3lzdGVtVGFi bGUgICAgIFBvaW50ZXIgdG8gU3lzdGVtVGFibGUuDQo+Pi0NCj4+LSAgQHJldHZhbCBFRklfU1VD RVNTICAgICAgICAgVGhpcyBmdW5jdGlvbiBhbHdheXMgY29tcGxldGUgc3VjY2Vzc2Z1bGx5Lg0K Pj4tDQo+Pi0qKi8NCj4+LUVGSV9TVEFUVVMNCj4+LUVGSUFQSQ0KPj4tVXNlcklkZW50aWZ5TWFu YWdlckluaXQgKA0KPj4tICBJTiBFRklfSEFORExFICAgICAgICBJbWFnZUhhbmRsZSwNCj4+LSAg SU4gRUZJX1NZU1RFTV9UQUJMRSAgKlN5c3RlbVRhYmxlDQo+Pi0gICkNCj4+LXsNCj4+LQ0KPj4t ICBFRklfU1RBVFVTICBTdGF0dXM7DQo+Pi0NCj4+LSAgLy8NCj4+LSAgLy8gSXQgaXMgTk9UIHJv YnVzdCBlbm91Z2ggdG8gYmUgaW5jbHVkZWQgaW4gcHJvZHVjdGlvbi4NCj4+LSAgLy8NCj4+LSAg I2Vycm9yICJUaGlzIGltcGxlbWVudGF0aW9uIGlzIGp1c3QgYSBzYW1wbGUsIHBsZWFzZSBjb21t ZW50IHRoaXMgbGluZSBpZg0KPnlvdQ0KPj5yZWFsbHkgd2FudCB0byB1c2UgdGhpcyBkcml2ZXIu Ig0KPj4tDQo+Pi0gIC8vDQo+Pi0gIC8vIEluaXRpYXRlIGZvcm0gYnJvd3Nlci4NCj4+LSAgLy8N Cj4+LSAgSW5pdEZvcm1Ccm93c2VyICgpOw0KPj4tDQo+Pi0gIC8vDQo+Pi0gIC8vIEluc3RhbGwg cHJvdG9jb2wgaW50ZXJmYWNlcyBmb3IgdGhlIFVzZXIgSWRlbnRpdHkgTWFuYWdlci4NCj4+LSAg Ly8NCj4+LSAgU3RhdHVzID0gZ0JTLT5JbnN0YWxsUHJvdG9jb2xJbnRlcmZhY2UgKA0KPj4tICAg ICAgICAgICAgICAgICAgJm1DYWxsYmFja0luZm8tPkRyaXZlckhhbmRsZSwNCj4+LSAgICAgICAg ICAgICAgICAgICZnRWZpVXNlck1hbmFnZXJQcm90b2NvbEd1aWQsDQo+Pi0gICAgICAgICAgICAg ICAgICBFRklfTkFUSVZFX0lOVEVSRkFDRSwNCj4+LSAgICAgICAgICAgICAgICAgICZnVXNlcklk ZW50aWZ5TWFuYWdlcg0KPj4tICAgICAgICAgICAgICAgICAgKTsNCj4+LSAgQVNTRVJUX0VGSV9F UlJPUiAoU3RhdHVzKTsNCj4+LQ0KPj4tICBMb2FkRGVmZXJyZWRJbWFnZUluaXQgKEltYWdlSGFu ZGxlKTsNCj4+LSAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPj4tfQ0KPj4tDQo+Pi0NCj4+ZGlmZiAt LWdpdA0KPj5hL1NlY3VyaXR5UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Vc2VySWRlbnRpZnlNYW5h Z2VyRHhlL1VzZXJJZGVudGlmeU1hDQo+bg0KPj5hZ2VyLmgNCj4+Yi9TZWN1cml0eVBrZy9Vc2Vy SWRlbnRpZmljYXRpb24vVXNlcklkZW50aWZ5TWFuYWdlckR4ZS9Vc2VySWRlbnRpZnlNYQ0KPm4N Cj4+YWdlci5oDQo+PmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NA0KPj5pbmRleCAxYzQ0OWIwMTI4 Li4wMDAwMDAwMDAwDQo+Pi0tLQ0KPj5hL1NlY3VyaXR5UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9V c2VySWRlbnRpZnlNYW5hZ2VyRHhlL1VzZXJJZGVudGlmeU1hDQo+bg0KPj5hZ2VyLmgNCj4+Kysr IC9kZXYvbnVsbA0KPj5AQCAtMSw0MTMgKzAsMCBAQA0KPj4tLyoqIEBmaWxlDQo+Pi0gIFRoZSBo ZWFkZXIgZmlsZSBmb3IgVXNlciBpZGVudGlmeSBNYW5hZ2VyIGRyaXZlci4NCj4+LQ0KPj4tQ29w eXJpZ2h0IChjKSAyMDA5IC0gMjAxOCwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVz ZXJ2ZWQuPEJSPg0KPj4tVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFs cw0KPj4tYXJlIGxpY2Vuc2VkIGFuZCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgYW5k IGNvbmRpdGlvbnMgb2YgdGhlIEJTRA0KPj5MaWNlbnNlDQo+Pi13aGljaCBhY2NvbXBhbmllcyB0 aGlzIGRpc3RyaWJ1dGlvbi4gIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgbWF5IGJlDQo+ PmZvdW5kIGF0DQo+Pi1odHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vuc2Uu cGhwDQo+Pi0NCj4+LVRIRSBQUk9HUkFNIElTIERJU1RSSUJVVEVEIFVOREVSIFRIRSBCU0QgTElD RU5TRSBPTiBBTiAiQVMgSVMiDQo+QkFTSVMsDQo+Pi1XSVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQ UkVTRU5UQVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVINCj4+RVhQUkVTUyBPUiBJTVBMSUVELg0K Pj4tDQo+Pi0qKi8NCj4+LQ0KPj4tI2lmbmRlZiBfVVNFUl9JREVOVElGWV9NQU5BR0VSX0hfDQo+ Pi0jZGVmaW5lIF9VU0VSX0lERU5USUZZX01BTkFHRVJfSF8NCj4+LQ0KPj4tI2luY2x1ZGUgPFVl ZmkuaD4NCj4+LQ0KPj4tI2luY2x1ZGUgPEd1aWQvR2xvYmFsVmFyaWFibGUuaD4NCj4+LSNpbmNs dWRlIDxHdWlkL01kZU1vZHVsZUhpaS5oPg0KPj4tDQo+Pi0jaW5jbHVkZSA8UHJvdG9jb2wvRm9y bUJyb3dzZXIyLmg+DQo+Pi0jaW5jbHVkZSA8UHJvdG9jb2wvSGlpRGF0YWJhc2UuaD4NCj4+LSNp bmNsdWRlIDxQcm90b2NvbC9IaWlDb25maWdBY2Nlc3MuaD4NCj4+LSNpbmNsdWRlIDxQcm90b2Nv bC9IaWlTdHJpbmcuaD4NCj4+LSNpbmNsdWRlIDxQcm90b2NvbC9IaWlDb25maWdSb3V0aW5nLmg+ DQo+Pi0jaW5jbHVkZSA8UHJvdG9jb2wvVXNlckNyZWRlbnRpYWwyLmg+DQo+Pi0jaW5jbHVkZSA8 UHJvdG9jb2wvVXNlck1hbmFnZXIuaD4NCj4+LSNpbmNsdWRlIDxQcm90b2NvbC9EZWZlcnJlZElt YWdlTG9hZC5oPg0KPj4tI2luY2x1ZGUgPFByb3RvY29sL1NpbXBsZVRleHRPdXQuaD4NCj4+LSNp bmNsdWRlIDxQcm90b2NvbC9TaW1wbGVUZXh0SW4uaD4NCj4+LSNpbmNsdWRlIDxQcm90b2NvbC9T aW1wbGVUZXh0SW5FeC5oPg0KPj4tDQo+Pi0jaW5jbHVkZSA8TGlicmFyeS9VZWZpUnVudGltZVNl cnZpY2VzVGFibGVMaWIuaD4NCj4+LSNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlCb290U2VydmljZXNU YWJsZUxpYi5oPg0KPj4tI2luY2x1ZGUgPExpYnJhcnkvTWVtb3J5QWxsb2NhdGlvbkxpYi5oPg0K Pj4tI2luY2x1ZGUgPExpYnJhcnkvQmFzZU1lbW9yeUxpYi5oPg0KPj4tI2luY2x1ZGUgPExpYnJh cnkvRGV2aWNlUGF0aExpYi5oPg0KPj4tI2luY2x1ZGUgPExpYnJhcnkvRGVidWdMaWIuaD4NCj4+ LSNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlMaWIuaD4NCj4+LSNpbmNsdWRlIDxMaWJyYXJ5L1ByaW50 TGliLmg+DQo+Pi0jaW5jbHVkZSA8TGlicmFyeS9IaWlMaWIuaD4NCj4+LQ0KPj4tI2luY2x1ZGUg IlVzZXJJZGVudGlmeU1hbmFnZXJEYXRhLmgiDQo+Pi0NCj4+LS8vDQo+Pi0vLyBUaGlzIGlzIHRo ZSBnZW5lcmF0ZWQgSUZSIGJpbmFyeSBkYXRhIGZvciBlYWNoIGZvcm1zZXQgZGVmaW5lZCBpbiBW RlIuDQo+Pi0vLyBUaGlzIGRhdGEgYXJyYXkgaXMgcmVhZHkgdG8gYmUgdXNlZCBhcyBpbnB1dCBv ZiBIaWlBZGRQYWNrYWdlcygpIHRvDQo+Pi0vLyBjcmVhdGUgYSBwYWNrYWdlbGlzdC4NCj4+LS8v DQo+Pi1leHRlcm4gVUlOVDggICAgICAgICAgICAgICAgVXNlcklkZW50aWZ5TWFuYWdlclZmckJp bltdOw0KPj4tDQo+Pi0vLw0KPj4tLy8gVGhpcyBpcyB0aGUgZ2VuZXJhdGVkIFN0cmluZyBwYWNr YWdlIGRhdGEgZm9yIGFsbCAuVU5JIGZpbGVzLg0KPj4tLy8gVGhpcyBkYXRhIGFycmF5IGlzIHJl YWR5IHRvIGJlIHVzZWQgYXMgaW5wdXQgb2YgSGlpQWRkUGFja2FnZXMoKSB0bw0KPj4tLy8gY3Jl YXRlIGEgcGFja2FnZWxpc3QuDQo+Pi0vLw0KPj4tZXh0ZXJuIFVJTlQ4ICAgICAgICAgICAgICAg IFVzZXJJZGVudGlmeU1hbmFnZXJTdHJpbmdzW107DQo+Pi0NCj4+LSNkZWZpbmUgICBVU0VSX05V TUJFUl9JTkMgICAgICAgICAgIDMyDQo+Pi0jZGVmaW5lICAgREVGQVVMVF9QUk9GSUxFX1NJWkUg ICAgICA1MTINCj4+LSNkZWZpbmUgICBJTkZPX1BBWUxPQURfU0laRSAgICAgICAgIDY0DQo+Pi0N Cj4+LS8vDQo+Pi0vLyBDcmVkZW50aWFsIFByb3ZpZGVyIEluZm9ybWF0aW9uLg0KPj4tLy8NCj4+ LXR5cGVkZWYgc3RydWN0IHsNCj4+LSAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgQ291 bnQ7DQo+Pi0gIEVGSV9VU0VSX0NSRURFTlRJQUwyX1BST1RPQ09MICpQcm92aWRlclsxXTsNCj4+ LX0gQ1JFREVOVElBTF9QUk9WSURFUl9JTkZPOw0KPj4tDQo+Pi0vLw0KPj4tLy8gSW50ZXJuYWwg dXNlciBwcm9maWxlIGVudHJ5Lg0KPj4tLy8NCj4+LXR5cGVkZWYgc3RydWN0IHsNCj4+LSAgVUlO VE4gICBNYXhQcm9maWxlU2l6ZTsNCj4+LSAgVUlOVE4gICBVc2VyUHJvZmlsZVNpemU7DQo+Pi0g IENIQVIxNiAgVXNlclZhck5hbWVbOV07DQo+Pi0gIFVJTlQ4ICAgKlByb2ZpbGVJbmZvOw0KPj4t fSBVU0VSX1BST0ZJTEVfRU5UUlk7DQo+Pi0NCj4+LS8vDQo+Pi0vLyBJbnRlcm5hbCB1c2VyIHBy b2ZpbGUgZGF0YWJhc2UuDQo+Pi0vLw0KPj4tdHlwZWRlZiBzdHJ1Y3Qgew0KPj4tICBVSU5UTiAg ICAgICAgICAgICAgICAgICBVc2VyUHJvZmlsZU51bTsNCj4+LSAgVUlOVE4gICAgICAgICAgICAg ICAgICAgTWF4UHJvZmlsZU51bTsNCj4+LSAgRUZJX1VTRVJfUFJPRklMRV9IQU5ETEUgVXNlclBy b2ZpbGVbMV07DQo+Pi19IFVTRVJfUFJPRklMRV9EQjsNCj4+LQ0KPj4tI2RlZmluZSBVU0VSX01B TkFHRVJfU0lHTkFUVVJFICBTSUdOQVRVUkVfMzIgKCdVJywgJ0knLCAnTScsICdTJykNCj4+LQ0K Pj4tdHlwZWRlZiBzdHJ1Y3Qgew0KPj4tICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAg IFNpZ25hdHVyZTsNCj4+LSAgRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICAgICBEcml2ZXJI YW5kbGU7DQo+Pi0gIEVGSV9ISUlfSEFORExFICAgICAgICAgICAgICAgICAgSGlpSGFuZGxlOw0K Pj4tDQo+Pi0gIC8vDQo+Pi0gIC8vIENvbnN1bWVkIHByb3RvY29sLg0KPj4tICAvLw0KPj4tICBF RklfSElJX0RBVEFCQVNFX1BST1RPQ09MICAgICAgICpIaWlEYXRhYmFzZTsNCj4+LSAgRUZJX0hJ SV9TVFJJTkdfUFJPVE9DT0wgICAgICAgICAqSGlpU3RyaW5nOw0KPj4tICBFRklfSElJX0NPTkZJ R19ST1VUSU5HX1BST1RPQ09MICpIaWlDb25maWdSb3V0aW5nOw0KPj4tICBFRklfRk9STV9CUk9X U0VSMl9QUk9UT0NPTCAgICAgICpGb3JtQnJvd3NlcjI7DQo+Pi0NCj4+LSAgLy8NCj4+LSAgLy8g UHJvZHVjZWQgcHJvdG9jb2wuDQo+Pi0gIC8vDQo+Pi0gIEVGSV9ISUlfQ09ORklHX0FDQ0VTU19Q Uk9UT0NPTCAgQ29uZmlnQWNjZXNzOw0KPj4tfSBVU0VSX01BTkFHRVJfQ0FMTEJBQ0tfSU5GTzsN Cj4+LQ0KPj4tLy8vDQo+Pi0vLy8gSElJIHNwZWNpZmljIFZlbmRvciBEZXZpY2UgUGF0aCBkZWZp bml0aW9uLg0KPj4tLy8vDQo+Pi10eXBlZGVmIHN0cnVjdCB7DQo+Pi0gIFZFTkRPUl9ERVZJQ0Vf UEFUSCAgICAgICAgVmVuZG9yRGV2aWNlUGF0aDsNCj4+LSAgRUZJX0RFVklDRV9QQVRIX1BST1RP Q09MICBFbmQ7DQo+Pi19IEhJSV9WRU5ET1JfREVWSUNFX1BBVEg7DQo+Pi0NCj4+LS8qKg0KPj4t ICBSZWdpc3RlciBhbiBldmVudCBub3RpZmljYXRpb24gZnVuY3Rpb24gZm9yIHRoZSB1c2VyIHBy b2ZpbGUgY2hhbmdlZC4NCj4+LQ0KPj4tICBAcGFyYW1baW5dICBJbWFnZUhhbmRsZSAgICAgSW1h Z2UgaGFuZGxlIHRoaXMgZHJpdmVyLg0KPj4tDQo+Pi0qKi8NCj4+LVZPSUQNCj4+LUxvYWREZWZl cnJlZEltYWdlSW5pdCAoDQo+Pi0gIElOIEVGSV9IQU5ETEUgICAgICAgIEltYWdlSGFuZGxlDQo+ Pi0gICk7DQo+Pi0NCj4+LQ0KPj4tLyoqDQo+Pi0gIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyBhIG5l dyB1c2VyIHByb2ZpbGUgd2l0aCBvbmx5DQo+Pi0gIGEgbmV3IHVzZXIgaWRlbnRpZmllciBhdHRh Y2hlZCBhbmQgcmV0dXJucyBpdHMgaGFuZGxlLg0KPj4tICBUaGUgdXNlciBwcm9maWxlIGlzIG5v bi12b2xhdGlsZSwgYnV0IHRoZSBoYW5kbGUgVXNlcg0KPj4tICBjYW4gY2hhbmdlIGFjcm9zcyBy ZWJvb3RzLg0KPj4tDQo+Pi0gIEBwYXJhbVtpbl0gICBUaGlzICAgICAgICAgICAgICAgUHJvdG9j b2wgRUZJX1VTRVJfTUFOQUdFUl9QUk9UT0NPTA0KPj5pbnN0YW5jZQ0KPj4tICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHBvaW50ZXIuDQo+Pi0gIEBwYXJhbVtvdXRdICBVc2VyICAg ICAgICAgICAgICAgSGFuZGxlIG9mIGEgbmV3IHVzZXIgcHJvZmlsZS4NCj4+LQ0KPj4tICBAcmV0 dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgIFVzZXIgcHJvZmlsZSB3YXMgc3VjY2Vzc2Z1bGx5 IGNyZWF0ZWQuDQo+Pi0gIEByZXR2YWwgRUZJX0FDQ0VTU19ERU5JRUQgICAgICAgQ3VycmVudCB1 c2VyIGRvZXMgbm90IGhhdmUgc3VmZmljaWVudA0KPj5wZXJtaXNzaW9ucw0KPj4tICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGNyZWF0ZSBhIHVzZXIgcHJvZmlsZS4NCj4+LSAg QHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgICBDcmVhdGlvbiBvZiBuZXcgdXNlciBwcm9m aWxlcyBpcyBub3QNCj4+c3VwcG9ydGVkLg0KPj4tICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFN RVRFUiAgIFVzZXIgaXMgTlVMTC4NCj4+LQ0KPj4tKiovDQo+Pi1FRklfU1RBVFVTDQo+Pi1FRklB UEkNCj4+LVVzZXJQcm9maWxlQ3JlYXRlICgNCj4+LSAgSU4gQ09OU1QgIEVGSV9VU0VSX01BTkFH RVJfUFJPVE9DT0wgICAgICAgICAgICpUaGlzLA0KPj4tICBPVVQgICAgICAgRUZJX1VTRVJfUFJP RklMRV9IQU5ETEUgICAgICAgICAgICAgKlVzZXINCj4+LSAgKTsNCj4+LQ0KPj4tDQo+Pi0vKioN Cj4+LSAgRGVsZXRlIGFuIGV4aXN0aW5nIHVzZXIgcHJvZmlsZS4NCj4+LQ0KPj4tICBAcGFyYW0g IFRoaXMgICAgICAgICAgICAgICAgICAgIFByb3RvY29sIEVGSV9VU0VSX01BTkFHRVJfUFJPVE9D T0wgaW5zdGFuY2UNCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludGVy Lg0KPj4tICBAcGFyYW0gIFVzZXIgICAgICAgICAgICAgICAgICAgIFVzZXIgcHJvZmlsZSBoYW5k bGUuDQo+Pi0NCj4+LSAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgICBVc2VyIHByb2Zp bGUgd2FzIHN1Y2Nlc3NmdWxseSBkZWxldGVkLg0KPj4tICBAcmV0dmFsIEVGSV9BQ0NFU1NfREVO SUVEICAgICAgIEN1cnJlbnQgdXNlciBkb2VzIG5vdCBoYXZlIHN1ZmZpY2llbnQNCj4+cGVybWlz c2lvbnMNCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBkZWxldGUgYSB1 c2VyIHByb2ZpbGUgb3IgdGhlcmUgaXMgb25seSBvbmUNCj4+LSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB1c2VyIHByb2ZpbGUuDQo+Pi0gIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVE ICAgICAgICAgRGVsZXRpb24gb2YgbmV3IHVzZXIgcHJvZmlsZXMgaXMgbm90DQo+PnN1cHBvcnRl ZC4NCj4+LSAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgICBVc2VyIGRvZXMgbm90IHJl ZmVyIHRvIGEgdmFsaWQgdXNlcg0KPj5wcm9maWxlLg0KPj4tDQo+Pi0qKi8NCj4+LUVGSV9TVEFU VVMNCj4+LUVGSUFQSQ0KPj4tVXNlclByb2ZpbGVEZWxldGUgKA0KPj4tICBJTiBDT05TVCAgRUZJ X1VTRVJfTUFOQUdFUl9QUk9UT0NPTCAgICAgICAgICAgKlRoaXMsDQo+Pi0gIElOICAgICAgICBF RklfVVNFUl9QUk9GSUxFX0hBTkRMRSAgICAgICAgICAgICBVc2VyDQo+Pi0gICk7DQo+Pi0NCj4+ LQ0KPj4tLyoqDQo+Pi0gIEdldCBuZXh0IHVzZXIgcHJvZmlsZSBmcm9tIHRoZSB1c2VyIHByb2Zp bGUgZGF0YWJhc2UuDQo+Pi0NCj4+LSAgQHBhcmFtW2luXSAgICAgICBUaGlzICAgICAgICAgICBQ cm90b2NvbCBFRklfVVNFUl9NQU5BR0VSX1BST1RPQ09MDQo+Pmluc3RhbmNlDQo+Pi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRlci4NCj4+LSAgQHBhcmFtW2luLCBvdXRd ICBVc2VyICAgICAgICAgICBVc2VyIHByb2ZpbGUgaGFuZGxlLg0KPj4tDQo+Pi0gIEByZXR2YWwg RUZJX1NVQ0NFU1MgICAgICAgICAgICAgTmV4dCBlbnJvbGxlZCB1c2VyIHByb2ZpbGUgc3VjY2Vz c2Z1bGx5DQo+cmV0dXJuZWQuDQo+Pi0gIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICAg VXNlciBpcyBOVUxMLg0KPj4tDQo+Pi0qKi8NCj4+LUVGSV9TVEFUVVMNCj4+LUVGSUFQSQ0KPj4t VXNlclByb2ZpbGVHZXROZXh0ICgNCj4+LSAgSU4gQ09OU1QgIEVGSV9VU0VSX01BTkFHRVJfUFJP VE9DT0wgICAgICAgICAgICpUaGlzLA0KPj4tICBJTiBPVVQgICAgRUZJX1VTRVJfUFJPRklMRV9I QU5ETEUgICAgICAgICAgICAgKlVzZXINCj4+LSAgKTsNCj4+LQ0KPj4tDQo+Pi0vKioNCj4+LSAg VGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBjdXJyZW50IHVzZXIgcHJvZmlsZSBoYW5kbGUuDQo+ Pi0NCj4+LSAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAgICAgICAgICBQcm90b2NvbCBFRklfVVNF Ul9NQU5BR0VSX1BST1RPQ09MDQo+Pmluc3RhbmNlIHBvaW50ZXIuDQo+Pi0gIEBwYXJhbVtvdXRd ICBDdXJyZW50VXNlciAgICAgICAgVXNlciBwcm9maWxlIGhhbmRsZS4NCj4+LQ0KPj4tICBAcmV0 dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgIEN1cnJlbnQgdXNlciBwcm9maWxlIGhhbmRsZSBy ZXR1cm5lZA0KPj5zdWNjZXNzZnVsbHkuDQo+Pi0gIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1F VEVSICAgQ3VycmVudFVzZXIgaXMgTlVMTC4NCj4+LQ0KPj4tKiovDQo+Pi1FRklfU1RBVFVTDQo+ Pi1FRklBUEkNCj4+LVVzZXJQcm9maWxlQ3VycmVudCAoDQo+Pi0gIElOIENPTlNUICBFRklfVVNF Ul9NQU5BR0VSX1BST1RPQ09MICAgICAgICAgICAqVGhpcywNCj4+LSAgT1VUICAgICAgIEVGSV9V U0VSX1BST0ZJTEVfSEFORExFICAgICAgICAgICAgICpDdXJyZW50VXNlcg0KPj4tICApOw0KPj4t DQo+Pi0NCj4+LS8qKg0KPj4tICBJZGVudGlmeSB0aGUgdXNlciBhbmQsIGlmIGF1dGhlbnRpY2F0 ZWQsIHJldHVybnMgdGhlIHVzZXIgaGFuZGxlIGFuZA0KPmNoYW5nZXMNCj4+LSAgdGhlIGN1cnJl bnQgdXNlciBwcm9maWxlLg0KPj4tDQo+Pi0gIEBwYXJhbSAgVGhpcyAgICAgICAgICAgICAgICAg ICAgUHJvdG9jb2wgRUZJX1VTRVJfTUFOQUdFUl9QUk9UT0NPTCBpbnN0YW5jZQ0KPj5wb2ludGVy Lg0KPj4tICBAcGFyYW0gIEN1cnJlbnRVc2VyICAgICAgICAgICAgIFVzZXIgcHJvZmlsZSBoYW5k bGUuDQo+Pi0NCj4+LSAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgICBVc2VyIHdhcyBz dWNjZXNzZnVsbHkgaWRlbnRpZmllZC4NCj4+LSAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVU RVIgICBVc2VyIGlzIE5VTEwuDQo+Pi0gIEByZXR2YWwgRUZJX0FDQ0VTU19ERU5JRUQgICAgICAg VXNlciB3YXMgbm90IHN1Y2Nlc3NmdWxseSBpZGVudGlmaWVkLg0KPj4tDQo+Pi0qKi8NCj4+LUVG SV9TVEFUVVMNCj4+LUVGSUFQSQ0KPj4tVXNlclByb2ZpbGVJZGVudGlmeSAoDQo+Pi0gIElOIENP TlNUICBFRklfVVNFUl9NQU5BR0VSX1BST1RPQ09MICAgICAgICAgICAqVGhpcywNCj4+LSAgT1VU ICAgICAgIEVGSV9VU0VSX1BST0ZJTEVfSEFORExFICAgICAgICAgICAgICpVc2VyDQo+Pi0gICk7 DQo+Pi0NCj4+LQ0KPj4tLyoqDQo+Pi0gIEZpbmQgYSB1c2VyIHVzaW5nIGEgdXNlciBpbmZvcm1h dGlvbiByZWNvcmQuDQo+Pi0NCj4+LSAgVGhpcyBmdW5jdGlvbiBzZWFyY2hlcyBhbGwgdXNlciBw cm9maWxlcyBmb3IgdGhlIHNwZWNpZmllZCB1c2VyIGluZm9ybWF0aW9uDQo+PnJlY29yZC4NCj4+ LSAgVGhlIHNlYXJjaCBzdGFydHMgd2l0aCB0aGUgdXNlciBpbmZvcm1hdGlvbiByZWNvcmQgaGFu ZGxlIGZvbGxvd2luZw0KPj5Vc2VySW5mbyBhbmQNCj4+LSAgY29udGludWVzIHVudGlsIGVpdGhl ciB0aGUgaW5mb3JtYXRpb24gaXMgZm91bmQgb3IgdGhlcmUgYXJlIG5vIG1vcmUgdXNlcg0KPj5w cm9maWxlcy4NCj4+LSAgQSBtYXRjaCBvY2N1cnMgd2hlbiB0aGUgSW5mby5JbmZvVHlwZSBmaWVs ZCBtYXRjaGVzIHRoZSB1c2VyIGluZm9ybWF0aW9uDQo+PnJlY29yZA0KPj4tICB0eXBlIGFuZCB0 aGUgdXNlciBpbmZvcm1hdGlvbiByZWNvcmQgZGF0YSBtYXRjaGVzIHRoZSBwb3J0aW9uIG9mIElu Zm8NCj4+cGFzc2VkIHRoZQ0KPj4tICBFRklfVVNFUl9JTkZPIGhlYWRlci4NCj4+LQ0KPj4tICBA cGFyYW1baW5dICAgICAgVGhpcyAgICAgUG9pbnRzIHRvIHRoaXMgaW5zdGFuY2Ugb2YgdGhlDQo+ PkVGSV9VU0VSX01BTkFHRVJfUFJPVE9DT0wuDQo+Pi0gIEBwYXJhbVtpbiwgb3V0XSBVc2VyICAg ICBPbiBlbnRyeSwgcG9pbnRzIHRvIHRoZSBwcmV2aW91c2x5IHJldHVybmVkIHVzZXINCj4+cHJv ZmlsZQ0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLCBvciBOVUxMIHRvIHN0 YXJ0IHNlYXJjaGluZyB3aXRoIHRoZSBmaXJzdCB1c2VyIHByb2ZpbGUuDQo+Pi0gICAgICAgICAg ICAgICAgICAgICAgICAgICBPbiByZXR1cm4sIHBvaW50cyB0byB0aGUgdXNlciBwcm9maWxlIGhh bmRsZSwgb3IgTlVMTCBpZiBub3QNCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5k Lg0KPj4tICBAcGFyYW1baW4sIG91dF0gVXNlckluZm8gT24gZW50cnksIHBvaW50cyB0byB0aGUg cHJldmlvdXNseSByZXR1cm5lZCB1c2VyDQo+PmluZm9ybWF0aW9uDQo+Pi0gICAgICAgICAgICAg ICAgICAgICAgICAgICBoYW5kbGUsIG9yIE5VTEwgdG8gc3RhcnQgc2VhcmNoaW5nIHdpdGggdGhl IGZpcnN0LiBPbiByZXR1cm4sDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMg dG8gdGhlIHVzZXIgaW5mb3JtYXRpb24gaGFuZGxlIG9mIHRoZSB1c2VyIGluZm9ybWF0aW9uDQo+ Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICByZWNvcmQsIG9yIE5VTEwgaWYgbm90IGZvdW5k LiBDYW4gYmUgTlVMTCwgaW4gd2hpY2ggY2FzZSBvbmx5DQo+Pi0gICAgICAgICAgICAgICAgICAg ICAgICAgICBvbmUgdXNlciBpbmZvcm1hdGlvbiByZWNvcmQgcGVyIHVzZXIgY2FuIGJlIHJldHVy bmVkLg0KPj4tICBAcGFyYW1baW5dICAgICAgSW5mbyAgICAgUG9pbnRzIHRvIHRoZSBidWZmZXIg Y29udGFpbmluZyB0aGUgdXNlciBpbmZvcm1hdGlvbg0KPnRvDQo+PmJlDQo+Pi0gICAgICAgICAg ICAgICAgICAgICAgICAgICBjb21wYXJlZCB0byB0aGUgdXNlciBpbmZvcm1hdGlvbiByZWNvcmQu IElmIE5VTEwsIHRoZW4gb25seQ0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHVz ZXIgaW5mb3JtYXRpb24gcmVjb3JkIHR5cGUgaXMgY29tcGFyZWQuIElmIEluZm9TaXplIGlzIDAs DQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVuIHRoZSB1c2VyIGluZm9ybWF0aW9u IHJlY29yZCBtdXN0IGJlIGVtcHR5Lg0KPj4tDQo+Pi0gIEBwYXJhbVtpbl0gICAgICBJbmZvU2l6 ZSBUaGUgc2l6ZSBvZiBJbmZvLCBpbiBieXRlcy4NCj4+LQ0KPj4tICBAcmV0dmFsIEVGSV9TVUND RVNTICAgICAgVXNlciBpbmZvcm1hdGlvbiB3YXMgZm91bmQuIFVzZXIgcG9pbnRzIHRvIHRoZQ0K Pj51c2VyIHByb2ZpbGUgaGFuZGxlLA0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5k IFVzZXJJbmZvIHBvaW50cyB0byB0aGUgdXNlciBpbmZvcm1hdGlvbiBoYW5kbGUuDQo+Pi0gIEBy ZXR2YWwgRUZJX05PVF9GT1VORCAgICBVc2VyIGluZm9ybWF0aW9uIHdhcyBub3QgZm91bmQuIFVz ZXIgcG9pbnRzDQo+dG8NCj4+TlVMTCBhbmQgVXNlckluZm8NCj4+LSAgICAgICAgICAgICAgICAg ICAgICAgICAgIHBvaW50cyB0byBOVUxMLg0KPj4tDQo+Pi0qKi8NCj4+LUVGSV9TVEFUVVMNCj4+ LUVGSUFQSQ0KPj4tVXNlclByb2ZpbGVGaW5kICgNCj4+LSAgSU4gICAgIENPTlNUIEVGSV9VU0VS X01BTkFHRVJfUFJPVE9DT0wgICAgICAgICpUaGlzLA0KPj4tICBJTiBPVVQgRUZJX1VTRVJfUFJP RklMRV9IQU5ETEUgICAgICAgICAgICAgICAgKlVzZXIsDQo+Pi0gIElOIE9VVCBFRklfVVNFUl9J TkZPX0hBTkRMRSAgICAgICAgICAgICAgICAgICAqVXNlckluZm8gT1BUSU9OQUwsDQo+Pi0gIElO ICAgICBDT05TVCBFRklfVVNFUl9JTkZPICAgICAgICAgICAgICAgICAgICAqSW5mbywNCj4+LSAg SU4gICAgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZm9TaXplDQo+ Pi0gICk7DQo+Pi0NCj4+LQ0KPj4tLyoqDQo+Pi0gIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB1c2Vy IGluZm9ybWF0aW9uLg0KPj4tDQo+Pi0gIEBwYXJhbSAgVGhpcyAgICAgICAgICAgICAgICAgICAg UHJvdG9jb2wgRUZJX1VTRVJfTUFOQUdFUl9QUk9UT0NPTCBpbnN0YW5jZQ0KPj4tICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50ZXIuDQo+Pi0gIEBwYXJhbSAgVXNlciAgICAg ICAgICAgICAgICAgICAgSGFuZGxlIG9mIHRoZSB1c2VyIHdob3NlIHByb2ZpbGUgd2lsbCBiZQ0K Pj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHJpZXZlZC4NCj4+LSAgQHBh cmFtICBVc2VySW5mbyAgICAgICAgICAgICAgICBIYW5kbGUgb2YgdGhlIHVzZXIgaW5mb3JtYXRp b24gZGF0YSByZWNvcmQuDQo+Pi0gIEBwYXJhbSAgSW5mbyAgICAgICAgICAgICAgICAgICAgT24g ZW50cnksIHBvaW50cyB0byBhIGJ1ZmZlciBvZiBhdCBsZWFzdA0KPj4tICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICpJbmZvU2l6ZSBieXRlcy4gIE9uIGV4aXQsIGhvbGRzIHRoZSB1 c2VyDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24uDQo+ Pi0gIEBwYXJhbSAgSW5mb1NpemUgICAgICAgICAgICAgICAgT24gZW50cnksIHBvaW50cyB0byB0 aGUgc2l6ZSBvZiBJbmZvLiBPbiByZXR1cm4sDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcG9pbnRzIHRvIHRoZSBzaXplIG9mIHRoZSB1c2VyIGluZm9ybWF0aW9uLg0KPj4t DQo+Pi0gIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICAgSW5mb3JtYXRpb24gcmV0dXJu ZWQgc3VjY2Vzc2Z1bGx5Lg0KPj4tICBAcmV0dmFsIEVGSV9BQ0NFU1NfREVOSUVEICAgICAgIFRo ZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3BlY2lmaWVkIHVzZXINCj4+Y2Fubm90DQo+Pi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgYWNjZXNzZWQgIGJ5IHRoZSBjdXJyZW50 IHVzZXIuDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUZJX0JVRkZFUl9U T09fU01BTEwtIFRoZSBudW1iZXIgb2YgYnl0ZXMNCj4+LSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzcGVjaWZpZWQgYnkgKkluZm9TaXplIGlzIHRvbyBzbWFsbCB0byBob2xkIHRo ZQ0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybmVkIGRhdGEuDQo+ Pi0NCj4+LSoqLw0KPj4tRUZJX1NUQVRVUw0KPj4tRUZJQVBJDQo+Pi1Vc2VyUHJvZmlsZUdldElu Zm8gKA0KPj4tICBJTiBDT05TVCAgRUZJX1VTRVJfTUFOQUdFUl9QUk9UT0NPTCAgICAgICAgICAg KlRoaXMsDQo+Pi0gIElOICAgICAgICBFRklfVVNFUl9QUk9GSUxFX0hBTkRMRSAgICAgICAgICAg ICBVc2VyLA0KPj4tICBJTiAgICAgICAgRUZJX1VTRVJfSU5GT19IQU5ETEUgICAgICAgICAgICAg ICAgVXNlckluZm8sDQo+Pi0gIE9VVCAgICAgICBFRklfVVNFUl9JTkZPICAgICAgICAgICAgICAg ICAgICAgICAqSW5mbywNCj4+LSAgSU4gT1VUICAgIFVJTlROICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICpJbmZvU2l6ZQ0KPj4tICApOw0KPj4tDQo+Pi0NCj4+LS8qKg0KPj4tICBUaGlz IGZ1bmN0aW9uIGNoYW5nZXMgdXNlciBpbmZvcm1hdGlvbi4NCj4+LQ0KPj4tICBAcGFyYW0gIFRo aXMgICAgICAgICAgICAgICAgICAgIFByb3RvY29sIEVGSV9VU0VSX01BTkFHRVJfUFJPVE9DT0wg aW5zdGFuY2UNCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludGVyLg0K Pj4tICBAcGFyYW0gIFVzZXIgICAgICAgICAgICAgICAgICAgIEhhbmRsZSBvZiB0aGUgdXNlciB3 aG9zZSBwcm9maWxlIHdpbGwgYmUNCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICByZXRyaWV2ZWQuDQo+Pi0gIEBwYXJhbSAgVXNlckluZm8gICAgICAgICAgICAgICAgSGFuZGxl IG9mIHRoZSB1c2VyIGluZm9ybWF0aW9uIGRhdGEgcmVjb3JkLg0KPj4tICBAcGFyYW0gIEluZm8g ICAgICAgICAgICAgICAgICAgIFBvaW50cyB0byB0aGUgdXNlciBpbmZvcm1hdGlvbi4NCj4+LSAg QHBhcmFtICBJbmZvU2l6ZSAgICAgICAgICAgICAgICBUaGUgc2l6ZSBvZiBJbmZvLCBpbiBieXRl cy4NCj4+LQ0KPj4tICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgIFVzZXIgcHJvZmls ZSBpbmZvcm1hdGlvbiB3YXMgc3VjY2Vzc2Z1bGx5DQo+Pi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY2hhbmdlZC9hZGRlZC4NCj4+LSAgQHJldHZhbCBFRklfQUNDRVNTX0RFTklF RCAgICAgICBUaGUgcmVjb3JkIGlzIGV4Y2x1c2l2ZS4NCj4+LSAgQHJldHZhbCBFRklfU0VDVVJJ VFlfVklPTEFUSU9OICBUaGUgY3VycmVudCB1c2VyIGRvZXMgbm90IGhhdmUNCj4+cGVybWlzc2lv biB0bw0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZSAgdGhlIHNw ZWNpZmllZCB1c2VyIHByb2ZpbGUgb3IgdXNlcg0KPj4tICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGluZm9ybWF0aW9uIHJlY29yZC4NCj4+LQ0KPj4tKiovDQo+Pi1FRklfU1RBVFVT DQo+Pi1FRklBUEkNCj4+LVVzZXJQcm9maWxlU2V0SW5mbyAoDQo+Pi0gIElOIENPTlNUICBFRklf VVNFUl9NQU5BR0VSX1BST1RPQ09MICAgICAgICAgICAqVGhpcywNCj4+LSAgSU4gICAgICAgIEVG SV9VU0VSX1BST0ZJTEVfSEFORExFICAgICAgICAgICAgIFVzZXIsDQo+Pi0gIElOIE9VVCAgICBF RklfVVNFUl9JTkZPX0hBTkRMRSAgICAgICAgICAgICAgICAqVXNlckluZm8sDQo+Pi0gIElOIENP TlNUICBFRklfVVNFUl9JTkZPICAgICAgICAgICAgICAgICAgICAgICAqSW5mbywNCj4+LSAgSU4g ICAgICAgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZm9TaXplDQo+Pi0g ICk7DQo+Pi0NCj4+LQ0KPj4tLyoqDQo+Pi0gIFRoaXMgZnVuY3Rpb24gYWxsb3dzIHRoZSBjcmVk ZW50aWFsIHByb3ZpZGVyIHRvIG5vdGlmeSB0aGUgVXNlciBJZGVudGl0eQ0KPj5NYW5hZ2VyDQo+ Pi0gIHdoZW4gdXNlciBzdGF0dXMgaGFzIGNoYW5nZWQgd2hpbGUgZGVzZWxlY3RlZC4NCj4+LQ0K Pj4tICBAcGFyYW0gIFRoaXMgICAgICAgICAgICAgICAgICAgIFByb3RvY29sIEVGSV9VU0VSX01B TkFHRVJfUFJPVE9DT0wgaW5zdGFuY2UNCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBwb2ludGVyLg0KPj4tICBAcGFyYW0gIENoYW5nZWQgICAgICAgICAgICAgICAgIFBvaW50 cyB0byB0aGUgaW5zdGFuY2Ugb2YgdGhlDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRUZJX1VTRVJfQ1JFREVOVElBTF9QUk9UT0NPTCAgd2hlcmUgdGhlIHVzZXIgaGFzDQo+ Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZC4NCj4+LQ0KPj4tICBA cmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgIFRoZSBVc2VyIElkZW50aXR5IE1hbmFnZXIg aGFzIGhhbmRsZWQgdGhlDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90 aWZpY2F0aW9uLg0KPj4tICBAcmV0dmFsIEVGSV9OT1RfUkVBRFkgICAgICAgICAgIFRoZSBmdW5j dGlvbiB3YXMgY2FsbGVkIHdoaWxlIHRoZSBzcGVjaWZpZWQNCj4+LSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjcmVkZW50aWFsICBwcm92aWRlciB3YXMgbm90IHNlbGVjdGVkLg0K Pj4tICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICAgIFRoZSBVc2VyIElkZW50aXR5IE1h bmFnZXIgZG9lc24ndA0KPnN1cHBvcnQNCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBhc3luY2hyb25vdXMgIG5vdGlmaWNhdGlvbnMuDQo+Pi0NCj4+LSoqLw0KPj4tRUZJX1NU QVRVUw0KPj4tRUZJQVBJDQo+Pi1Vc2VyUHJvZmlsZU5vdGlmeSAoDQo+Pi0gIElOIENPTlNUICBF RklfVVNFUl9NQU5BR0VSX1BST1RPQ09MICAgICAgICAgICAqVGhpcywNCj4+LSAgSU4gICAgICAg IEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZWQNCj4+LSAgKTsNCj4+ LQ0KPj4tDQo+Pi0vKioNCj4+LSAgRGVsZXRlIHRoZSB1c2VyIGluZm9ybWF0aW9uIGF0dGFjaGVk IHRvIHRoZSB1c2VyIHByb2ZpbGUgc3BlY2lmaWVkIGJ5IHRoZQ0KPj5Vc2VySW5mby4NCj4+LQ0K Pj4tICBAcGFyYW0gIFRoaXMgICAgICAgICAgICAgICAgICAgIFByb3RvY29sIEVGSV9VU0VSX01B TkFHRVJfUFJPVE9DT0wgaW5zdGFuY2UNCj4+cG9pbnRlci4NCj4+LSAgQHBhcmFtICBVc2VyICAg ICAgICAgICAgICAgICAgICBIYW5kbGUgb2YgdGhlIHVzZXIgd2hvc2UgcHJvZmlsZSB3aWxsIGJl IHJldHJpZXZlZC4NCj4+LSAgQHBhcmFtICBVc2VySW5mbyAgICAgICAgICAgICAgICBIYW5kbGUg b2YgdGhlIHVzZXIgaW5mb3JtYXRpb24gZGF0YSByZWNvcmQuDQo+Pi0NCj4+LSAgQHJldHZhbCBF RklfU1VDQ0VTUyAgICAgICAgICAgICBVc2VyIGluZm9ybWF0aW9uIGRlbGV0ZWQgc3VjY2Vzc2Z1 bGx5Lg0KPj4tICBAcmV0dmFsIEVGSV9BQ0NFU1NfREVOSUVEICAgICAgIFRoZSBjdXJyZW50IHVz ZXIgZG9lcyBub3QgaGF2ZQ0KPnBlcm1pc3Npb24NCj4+dG8NCj4+LSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcyB1c2VyIGluLWZvcm1hdGlvbi4NCj4+LSAgQHJl dHZhbCBFRklfTk9UX0ZPVU5EICAgICAgICAgICBVc2VyIGluZm9ybWF0aW9uIHJlY29yZCBVc2Vy SW5mbyBkb2VzIG5vdA0KPj5leGlzdA0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGluIHRoZSB1c2VyIHByby1maWxlLg0KPj4tDQo+Pi0qKi8NCj4+LUVGSV9TVEFUVVMNCj4+ LUVGSUFQSQ0KPj4tVXNlclByb2ZpbGVEZWxldGVJbmZvICgNCj4+LSAgSU4gQ09OU1QgIEVGSV9V U0VSX01BTkFHRVJfUFJPVE9DT0wgICAgICAgICAgICpUaGlzLA0KPj4tICBJTiAgICAgICAgRUZJ X1VTRVJfUFJPRklMRV9IQU5ETEUgICAgICAgICAgICAgVXNlciwNCj4+LSAgSU4gICAgICAgIEVG SV9VU0VSX0lORk9fSEFORExFICAgICAgICAgICAgICAgIFVzZXJJbmZvDQo+Pi0gICk7DQo+Pi0N Cj4+LQ0KPj4tLyoqDQo+Pi0gIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgbmV4dCB1c2VyIGlu Zm9ybWF0aW9uIHJlY29yZC4NCj4+LQ0KPj4tICBAcGFyYW0gIFRoaXMgICAgICAgICAgICAgICAg ICAgIFByb3RvY29sIEVGSV9VU0VSX01BTkFHRVJfUFJPVE9DT0wgaW5zdGFuY2UNCj4+cG9pbnRl ci4NCj4+LSAgQHBhcmFtICBVc2VyICAgICAgICAgICAgICAgICAgICBIYW5kbGUgb2YgdGhlIHVz ZXIgd2hvc2UgcHJvZmlsZSB3aWxsIGJlIHJldHJpZXZlZC4NCj4+LSAgQHBhcmFtICBVc2VySW5m byAgICAgICAgICAgICAgICBIYW5kbGUgb2YgdGhlIHVzZXIgaW5mb3JtYXRpb24gZGF0YSByZWNv cmQuDQo+Pi0NCj4+LSAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgICBVc2VyIGluZm9y bWF0aW9uIHJldHVybmVkLg0KPj4tICBAcmV0dmFsIEVGSV9OT1RfRk9VTkQgICAgICAgICAgIE5v IG1vcmUgdXNlciBpbmZvcm1hdGlvbiBmb3VuZC4NCj4+LQ0KPj4tKiovDQo+Pi1FRklfU1RBVFVT DQo+Pi1FRklBUEkNCj4+LVVzZXJQcm9maWxlR2V0TmV4dEluZm8gKA0KPj4tICBJTiBDT05TVCAg RUZJX1VTRVJfTUFOQUdFUl9QUk9UT0NPTCAgICAgICAgICAgKlRoaXMsDQo+Pi0gIElOICAgICAg ICBFRklfVVNFUl9QUk9GSUxFX0hBTkRMRSAgICAgICAgICAgICBVc2VyLA0KPj4tICBJTiBPVVQg ICAgRUZJX1VTRVJfSU5GT19IQU5ETEUgICAgICAgICAgICAgICAgKlVzZXJJbmZvDQo+Pi0gICk7 DQo+Pi0NCj4+LSNlbmRpZg0KPj5kaWZmIC0tZ2l0DQo+PmEvU2VjdXJpdHlQa2cvVXNlcklkZW50 aWZpY2F0aW9uL1VzZXJJZGVudGlmeU1hbmFnZXJEeGUvVXNlcklkZW50aWZ5TWENCj5uDQo+PmFn ZXIudW5pDQo+PmIvU2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9uL1VzZXJJZGVudGlmeU1h bmFnZXJEeGUvVXNlcklkZW50aWZ5TWENCj5uDQo+PmFnZXIudW5pDQo+PmRlbGV0ZWQgZmlsZSBt b2RlIDEwMDY0NA0KPj5pbmRleCA4MmM3MmJhZWViLi4wMDAwMDAwMDAwDQo+Pi0tLQ0KPj5hL1Nl Y3VyaXR5UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Vc2VySWRlbnRpZnlNYW5hZ2VyRHhlL1VzZXJJ ZGVudGlmeU1hDQo+bg0KPj5hZ2VyLnVuaQ0KPj4rKysgL2Rldi9udWxsDQo+PkBAIC0xLDIxICsw LDAgQEANCj4+LS8vIC8qKiBAZmlsZQ0KPj4tLy8gUHJvZHVjZXMgdXNlciBtYW5hZ2VyIHByb3Rv Y29sDQo+Pi0vLw0KPj4tLy8gVGhpcyBtb2R1bGUgbWFuYWdlcyB1c2VyIGluZm9ybWF0aW9uIGFu ZCBwcm9kdWNlcyB1c2VyIG1hbmFnZXINCj4+cHJvdG9jb2wuDQo+Pi0vLw0KPj4tLy8gQ29weXJp Z2h0IChjKSAyMDA5IC0gMjAxNCwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2 ZWQuPEJSPg0KPj4tLy8NCj4+LS8vIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBt YXRlcmlhbHMNCj4+LS8vIGFyZSBsaWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhl IHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZQ0KPkJTRA0KPj5MaWNlbnNlDQo+Pi0vLyB3aGlj aCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGlj ZW5zZSBtYXkgYmUNCj4+Zm91bmQgYXQNCj4+LS8vIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNl bnNlcy9ic2QtbGljZW5zZS5waHANCj4+LS8vIFRIRSBQUk9HUkFNIElTIERJU1RSSUJVVEVEIFVO REVSIFRIRSBCU0QgTElDRU5TRSBPTiBBTiAiQVMgSVMiDQo+PkJBU0lTLA0KPj4tLy8gV0lUSE9V VCBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSDQo+PkVY UFJFU1MgT1IgSU1QTElFRC4NCj4+LS8vDQo+Pi0vLyAqKi8NCj4+LQ0KPj4tDQo+Pi0jc3RyaW5n IFNUUl9NT0RVTEVfQUJTVFJBQ1QgICAgICAgICAgICAgI2xhbmd1YWdlIGVuLVVTICJQcm9kdWNl cyB1c2VyDQo+Pm1hbmFnZXIgcHJvdG9jb2wiDQo+Pi0NCj4+LSNzdHJpbmcgU1RSX01PRFVMRV9E RVNDUklQVElPTiAgICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgIlRoaXMgbW9kdWxlDQo+Pm1hbmFn ZXMgdXNlciBpbmZvcm1hdGlvbiBhbmQgcHJvZHVjZXMgdXNlciBtYW5hZ2VyIHByb3RvY29sLiIN Cj4+LQ0KPj5kaWZmIC0tZ2l0DQo+PmEvU2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9uL1Vz ZXJJZGVudGlmeU1hbmFnZXJEeGUvVXNlcklkZW50aWZ5TWENCj5uDQo+PmFnZXJEYXRhLmgNCj4+ Yi9TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vVXNlcklkZW50aWZ5TWFuYWdlckR4ZS9V c2VySWRlbnRpZnlNYQ0KPm4NCj4+YWdlckRhdGEuaA0KPj5kZWxldGVkIGZpbGUgbW9kZSAxMDA2 NDQNCj4+aW5kZXggNGUwN2RkZDMwOS4uMDAwMDAwMDAwMA0KPj4tLS0NCj4+YS9TZWN1cml0eVBr Zy9Vc2VySWRlbnRpZmljYXRpb24vVXNlcklkZW50aWZ5TWFuYWdlckR4ZS9Vc2VySWRlbnRpZnlN YQ0KPm4NCj4+YWdlckRhdGEuaA0KPj4rKysgL2Rldi9udWxsDQo+PkBAIC0xLDM1ICswLDAgQEAN Cj4+LS8qKiBAZmlsZQ0KPj4tICBEYXRhIHN0cnVjdHVyZSB1c2VkIGJ5IHRoZSB1c2VyIGlkZW50 aWZ5IG1hbmFnZXIgZHJpdmVyLg0KPj4tDQo+Pi1Db3B5cmlnaHQgKGMpIDIwMDkgLSAyMDE4LCBJ bnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+Pi1UaGlzIHByb2dy YW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQo+Pi1hcmUgbGljZW5zZWQgYW5kIG1h ZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgQlNEDQo+ PkxpY2Vuc2UNCj4+LXdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLiAgVGhlIGZ1 bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBtYXkgYmUNCj4+Zm91bmQgYXQNCj4+LWh0dHA6Ly9vcGVu c291cmNlLm9yZy9saWNlbnNlcy9ic2QtbGljZW5zZS5waHANCj4+LQ0KPj4tVEhFIFBST0dSQU0g SVMgRElTVFJJQlVURUQgVU5ERVIgVEhFIEJTRCBMSUNFTlNFIE9OIEFOICJBUyBJUyINCj5CQVNJ UywNCj4+LVdJVEhPVVQgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlMgT0YgQU5ZIEtJTkQs IEVJVEhFUg0KPj5FWFBSRVNTIE9SIElNUExJRUQuDQo+Pi0NCj4+LSoqLw0KPj4tDQo+Pi0jaWZu ZGVmIF9VU0VSX0lERU5USUZZX01BTkFHRVJfREFUQV9IXw0KPj4tI2RlZmluZSBfVVNFUl9JREVO VElGWV9NQU5BR0VSX0RBVEFfSF8NCj4+LQ0KPj4tI2luY2x1ZGUgPEd1aWQvVXNlcklkZW50aWZ5 TWFuYWdlckhpaS5oPg0KPj4tDQo+Pi0vLw0KPj4tLy8gRm9ybXMgZGVmaW5pdGlvbi4NCj4+LS8v DQo+Pi0jZGVmaW5lIEZPUk1JRF9VU0VSX0ZPUk0gICAgICAxDQo+Pi0jZGVmaW5lIEZPUk1JRF9Q Uk9WSURFUl9GT1JNICAyDQo+Pi0jZGVmaW5lIEZPUk1JRF9JTlZBTElEX0ZPUk0gICAweDBGRkYN Cj4+LQ0KPj4tLy8NCj4+LS8vIExhYmVscyBkZWZpbml0aW9uLg0KPj4tLy8NCj4+LSNkZWZpbmUg TEFCRUxfVVNFUl9OQU1FICAgICAgIDB4MTAwMA0KPj4tI2RlZmluZSBMQUJFTF9QUk9WSURFUl9O QU1FICAgMHgzMDAwDQo+Pi0jZGVmaW5lIExBQkVMX0VORCAgICAgICAgICAgICAweGZmZmYNCj4+ LSNkZWZpbmUgRk9STV9PUEVOX1FVRVNUSU9OX0lEIDB4ZmZmZQ0KPj4tDQo+Pi0jZW5kaWYNCj4+ ZGlmZiAtLWdpdA0KPj5hL1NlY3VyaXR5UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Vc2VySWRlbnRp ZnlNYW5hZ2VyRHhlL1VzZXJJZGVudGlmeU1hDQo+bg0KPj5hZ2VyRHhlLmluZg0KPj5iL1NlY3Vy aXR5UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Vc2VySWRlbnRpZnlNYW5hZ2VyRHhlL1VzZXJJZGVu dGlmeU1hDQo+bg0KPj5hZ2VyRHhlLmluZg0KPj5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCj4+ aW5kZXggMjdlOGJhMTlhZC4uMDAwMDAwMDAwMA0KPj4tLS0NCj4+YS9TZWN1cml0eVBrZy9Vc2Vy SWRlbnRpZmljYXRpb24vVXNlcklkZW50aWZ5TWFuYWdlckR4ZS9Vc2VySWRlbnRpZnlNYQ0KPm4N Cj4+YWdlckR4ZS5pbmYNCj4+KysrIC9kZXYvbnVsbA0KPj5AQCAtMSw3OSArMCwwIEBADQo+Pi0j IyBAZmlsZQ0KPj4tIyAgUHJvZHVjZXMgdXNlciBtYW5hZ2VyIHByb3RvY29sDQo+Pi0jDQo+Pi0j ICBUaGlzIG1vZHVsZSBtYW5hZ2VzIHVzZXIgaW5mb3JtYXRpb24gYW5kIHByb2R1Y2VzIHVzZXIg bWFuYWdlcg0KPj5wcm90b2NvbC4NCj4+LSMNCj4+LSMgQ29weXJpZ2h0IChjKSAyMDA5IC0gMjAx OCwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPj4tIyBUaGlz IHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQo+Pi0jIGFyZSBsaWNlbnNl ZCBhbmQgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRo ZQ0KPkJTRA0KPj5MaWNlbnNlDQo+Pi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0 aW9uLiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIG1heSBiZQ0KPj5mb3VuZCBhdA0KPj4t IyBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vuc2UucGhwDQo+Pi0jIFRI RSBQUk9HUkFNIElTIERJU1RSSUJVVEVEIFVOREVSIFRIRSBCU0QgTElDRU5TRSBPTiBBTiAiQVMg SVMiDQo+PkJBU0lTLA0KPj4tIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05T IE9GIEFOWSBLSU5ELCBFSVRIRVINCj4+RVhQUkVTUyBPUiBJTVBMSUVELg0KPj4tIw0KPj4tIyMN Cj4+LQ0KPj4tW2RlZmluZXNdDQo+Pi0gIElORl9WRVJTSU9OICAgICAgICAgICAgICAgICAgICA9 IDB4MDAwMTAwMDUNCj4+LSAgQkFTRV9OQU1FICAgICAgICAgICAgICAgICAgICAgID0gVXNlcklk ZW50aWZ5TWFuYWdlcg0KPj4tICBNT0RVTEVfVU5JX0ZJTEUgICAgICAgICAgICAgICAgPSBVc2Vy SWRlbnRpZnlNYW5hZ2VyLnVuaQ0KPj4tICBGSUxFX0dVSUQgICAgICAgICAgICAgICAgICAgICAg PSBDNUQzMTkxQi0yN0Q1LTQ4NzMtOERGMi02MjgxMzY5OTFBMjENCj4+LSAgTU9EVUxFX1RZUEUg ICAgICAgICAgICAgICAgICAgID0gRFhFX0RSSVZFUg0KPj4tICBWRVJTSU9OX1NUUklORyAgICAg ICAgICAgICAgICAgPSAxLjANCj4+LSAgRU5UUllfUE9JTlQgICAgICAgICAgICAgICAgICAgID0g VXNlcklkZW50aWZ5TWFuYWdlckluaXQNCj4+LQ0KPj4tW3NvdXJjZXNdDQo+Pi0gIFVzZXJJZGVu dGlmeU1hbmFnZXIuYw0KPj4tICBMb2FkRGVmZXJyZWRJbWFnZS5jDQo+Pi0gIFVzZXJJZGVudGlm eU1hbmFnZXIuaA0KPj4tICBVc2VySWRlbnRpZnlNYW5hZ2VyRGF0YS5oDQo+Pi0gIFVzZXJJZGVu dGlmeU1hbmFnZXJTdHJpbmdzLnVuaQ0KPj4tICBVc2VySWRlbnRpZnlNYW5hZ2VyVmZyLlZmcg0K Pj4tDQo+Pi1bUGFja2FnZXNdDQo+Pi0gIE1kZVBrZy9NZGVQa2cuZGVjDQo+Pi0gIE1kZU1vZHVs ZVBrZy9NZGVNb2R1bGVQa2cuZGVjDQo+Pi0gIFNlY3VyaXR5UGtnL1NlY3VyaXR5UGtnLmRlYw0K Pj4tDQo+Pi1bTGlicmFyeUNsYXNzZXNdDQo+Pi0gIFVlZmlSdW50aW1lU2VydmljZXNUYWJsZUxp Yg0KPj4tICBVZWZpQm9vdFNlcnZpY2VzVGFibGVMaWINCj4+LSAgVWVmaURyaXZlckVudHJ5UG9p bnQNCj4+LSAgTWVtb3J5QWxsb2NhdGlvbkxpYg0KPj4tICBCYXNlTWVtb3J5TGliDQo+Pi0gIERl YnVnTGliDQo+Pi0gIEhpaUxpYg0KPj4tICBVZWZpTGliDQo+Pi0NCj4+LVtHdWlkc10NCj4+LSAg Z0VmaUlmclRpYW5vR3VpZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjIFNPTUVUSU1F U19DT05TVU1FUyAgIyMgR1VJRA0KPj4tICBnRWZpRXZlbnRVc2VyUHJvZmlsZUNoYW5nZWRHdWlk ICAgICAgICAgICAgICAgIyMgU09NRVRJTUVTX1BST0RVQ0VTICAjIw0KPj5FdmVudA0KPj4tDQo+ Pi0gICMjIFNPTUVUSU1FU19QUk9EVUNFUyAgICAgICAgICAgICAgICAgICAgICAgICAjIyBWYXJp YWJsZTpMIlVzZXJ4eHh4Ig0KPj4tICAjIyBTT01FVElNRVNfQ09OU1VNRVMgICAgICAgICAgICAg ICAgICAgICAgICAgIyMgVmFyaWFibGU6TCJVc2VyeHh4eCINCj4+LSAgIyMgQ09OU1VNRVMgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjIEhJSQ0KPj4tICBnVXNlcklkZW50aWZ5 TWFuYWdlckd1aWQNCj4+LQ0KPj4tW1Byb3RvY29sc10NCj4+LSAgZ0VmaUZvcm1Ccm93c2VyMlBy b3RvY29sR3VpZCAgICAgICAgICAgICAgICAgICMjIENPTlNVTUVTDQo+Pi0gIGdFZmlIaWlEYXRh YmFzZVByb3RvY29sR3VpZCAgICAgICAgICAgICAgICAgICAjIyBDT05TVU1FUw0KPj4tICBnRWZp VXNlckNyZWRlbnRpYWwyUHJvdG9jb2xHdWlkICAgICAgICAgICAgICAgIyMgU09NRVRJTUVTX0NP TlNVTUVTDQo+Pi0gIGdFZmlEZWZlcnJlZEltYWdlTG9hZFByb3RvY29sR3VpZCAgICAgICAgICAg ICAjIyBTT01FVElNRVNfQ09OU1VNRVMNCj4+LSAgZ0VmaVNpbXBsZVRleHRPdXRQcm90b2NvbEd1 aWQgICAgICAgICAgICAgICAgICMjIFNPTUVUSU1FU19DT05TVU1FUw0KPj4tICBnRWZpU2ltcGxl VGV4dEluUHJvdG9jb2xHdWlkICAgICAgICAgICAgICAgICAgIyMgU09NRVRJTUVTX0NPTlNVTUVT DQo+Pi0gIGdFZmlTaW1wbGVUZXh0SW5wdXRFeFByb3RvY29sR3VpZCAgICAgICAgICAgICAjIyBT T01FVElNRVNfQ09OU1VNRVMNCj4+LSAgZ0VmaUhpaUNvbmZpZ0FjY2Vzc1Byb3RvY29sR3VpZCAg ICAgICAgICAgICAgICMjIFBST0RVQ0VTDQo+Pi0gIGdFZmlEZXZpY2VQYXRoUHJvdG9jb2xHdWlk ICAgICAgICAgICAgICAgICAgICAjIyBQUk9EVUNFUw0KPj4tDQo+Pi0gICMjIFBST0RVQ0VTDQo+ Pi0gICMjIFNPTUVUSU1FU19QUk9EVUNFUyAgICAgICAgICAgICAgICAgICAgICAgICAjIyBTeXN0 ZW1UYWJsZQ0KPj4tICBnRWZpVXNlck1hbmFnZXJQcm90b2NvbEd1aWQNCj4+LQ0KPj4tW0RlcGV4 XQ0KPj4tICBnRWZpSGlpRGF0YWJhc2VQcm90b2NvbEd1aWQgICBBTkQNCj4+LSAgZ0VmaUhpaVN0 cmluZ1Byb3RvY29sR3VpZCAgICAgQU5EDQo+Pi0gIGdFZmlGb3JtQnJvd3NlcjJQcm90b2NvbEd1 aWQNCj4+LQ0KPj4tW1VzZXJFeHRlbnNpb25zLlRpYW5vQ29yZS4iRXh0cmFGaWxlcyJdDQo+Pi0g IFVzZXJJZGVudGlmeU1hbmFnZXJFeHRyYS51bmkNCj4+LQ0KPj5kaWZmIC0tZ2l0DQo+PmEvU2Vj dXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9uL1VzZXJJZGVudGlmeU1hbmFnZXJEeGUvVXNlcklk ZW50aWZ5TWENCj5uDQo+PmFnZXJFeHRyYS51bmkNCj4+Yi9TZWN1cml0eVBrZy9Vc2VySWRlbnRp ZmljYXRpb24vVXNlcklkZW50aWZ5TWFuYWdlckR4ZS9Vc2VySWRlbnRpZnlNYQ0KPm4NCj4+YWdl ckV4dHJhLnVuaQ0KPj5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCj4+aW5kZXggOGI3Y2JhN2Iz Mi4uMDAwMDAwMDAwMA0KPj4tLS0NCj4+YS9TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24v VXNlcklkZW50aWZ5TWFuYWdlckR4ZS9Vc2VySWRlbnRpZnlNYQ0KPm4NCj4+YWdlckV4dHJhLnVu aQ0KPj4rKysgL2Rldi9udWxsDQo+PkBAIC0xLDE5ICswLDAgQEANCj4+LS8vIC8qKiBAZmlsZQ0K Pj4tLy8gVXNlcklkZW50aWZ5TWFuYWdlciBMb2NhbGl6ZWQgU3RyaW5ncyBhbmQgQ29udGVudA0K Pj4tLy8NCj4+LS8vIENvcHlyaWdodCAoYykgMjAxMyAtIDIwMTgsIEludGVsIENvcnBvcmF0aW9u LiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4+LS8vDQo+Pi0vLyBUaGlzIHByb2dyYW0gYW5k IHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQo+Pi0vLyBhcmUgbGljZW5zZWQgYW5kIG1hZGUg YXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUNCj5CU0QNCj4+ TGljZW5zZQ0KPj4tLy8gd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24uIFRoZSBm dWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgbWF5IGJlDQo+PmZvdW5kIGF0DQo+Pi0vLyBodHRwOi8v b3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vuc2UucGhwDQo+Pi0vLyBUSEUgUFJPR1JB TSBJUyBESVNUUklCVVRFRCBVTkRFUiBUSEUgQlNEIExJQ0VOU0UgT04gQU4gIkFTIElTIg0KPj5C QVNJUywNCj4+LS8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlMgT0YgQU5Z IEtJTkQsIEVJVEhFUg0KPj5FWFBSRVNTIE9SIElNUExJRUQuDQo+Pi0vLw0KPj4tLy8gKiovDQo+ Pi0NCj4+LSNzdHJpbmcgU1RSX1BST1BFUlRJRVNfTU9EVUxFX05BTUUNCj4+LSNsYW5ndWFnZSBl bi1VUw0KPj4tIlVzZXIgSWRlbnRpZnkgTWFuYWdlciINCj4+LQ0KPj4tDQo+PmRpZmYgLS1naXQN Cj4+YS9TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vVXNlcklkZW50aWZ5TWFuYWdlckR4 ZS9Vc2VySWRlbnRpZnlNYQ0KPm4NCj4+YWdlclN0cmluZ3MudW5pDQo+PmIvU2VjdXJpdHlQa2cv VXNlcklkZW50aWZpY2F0aW9uL1VzZXJJZGVudGlmeU1hbmFnZXJEeGUvVXNlcklkZW50aWZ5TWEN Cj5uDQo+PmFnZXJTdHJpbmdzLnVuaQ0KPj5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCj4+aW5k ZXggZmNiZjUwMDVjZC4uMDAwMDAwMDAwMA0KPj4tLS0NCj4+YS9TZWN1cml0eVBrZy9Vc2VySWRl bnRpZmljYXRpb24vVXNlcklkZW50aWZ5TWFuYWdlckR4ZS9Vc2VySWRlbnRpZnlNYQ0KPm4NCj4+ YWdlclN0cmluZ3MudW5pDQo+PisrKyAvZGV2L251bGwNCj4+QEAgLTEsMjcgKzAsMCBAQA0KPj4t LyoqIEBmaWxlDQo+Pi0gIFN0cmluZyBkZWZpbml0aW9ucyBmb3IgdGhlIFVzZXIgSWRlbnRpZnkg TWFuYWdlciBkcml2ZXIuDQo+Pi0NCj4+LUNvcHlyaWdodCAoYykgMjAwOSAtIDIwMTgsIEludGVs IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4+LVRoaXMgcHJvZ3JhbSBh bmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCj4+LWFyZSBsaWNlbnNlZCBhbmQgbWFkZSBh dmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBCU0QNCj4+TGlj ZW5zZQ0KPj4td2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24uICBUaGUgZnVsbCB0 ZXh0IG9mIHRoZSBsaWNlbnNlIG1heSBiZQ0KPj5mb3VuZCBhdA0KPj4taHR0cDovL29wZW5zb3Vy Y2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocC4NCj4+LQ0KPj4tVEhFIFBST0dSQU0gSVMg RElTVFJJQlVURUQgVU5ERVIgVEhFIEJTRCBMSUNFTlNFIE9OIEFOICJBUyBJUyINCj5CQVNJUywN Cj4+LVdJVEhPVVQgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlMgT0YgQU5ZIEtJTkQsIEVJ VEhFUg0KPj5FWFBSRVNTIE9SIElNUExJRUQuDQo+Pi0NCj4+LSoqLw0KPj4tDQo+Pi0jbGFuZ2Rl ZiBlbi1VUyAiRW5nbGlzaCINCj4+LSNsYW5nZGVmIGZyLUZSICJGcmFuY2FpcyINCj4+LQ0KPj4t I3N0cmluZyBTVFJfVElUTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjbGFuZ3Vh Z2UgZW4tVVMgICJVc2VyIElkZW50aXR5DQo+TWFuYWdlciINCj4+LSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2xhbmd1YWdlIGZyLUZSICAiVXNlciBJ ZGVudGl0eSBNYW5hZ2VyKEZyZW5jaCkiDQo+Pi0jc3RyaW5nIFNUUl9VU0VSX1NFTEVDVCAgICAg ICAgICAgICAgICAgICAgICAgICAgICNsYW5ndWFnZSBlbi1VUyAgIlVzZXIgU2VsZWN0aW9uIg0K Pj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjbGFu Z3VhZ2UgZnItRlIgICJVc2VyIFNlbGVjdGlvbihGcmVuY2gpIg0KPj4tI3N0cmluZyBTVFJfUFJP VklERVJfU0VMRUNUICAgICAgICAgICAgICAgICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgICJQcm92 aWRlcg0KPj5TZWxlY3Rpb24iDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICNsYW5ndWFnZSBmci1GUiAgIlVzZXIgU2VsZWN0aW9uKEZyZW5jaCki DQo+Pi0jc3RyaW5nIFNUUl9OVUxMX1NUUklORyAgICAgICAgICAgICAgICAgICAgICAgICAgICNs YW5ndWFnZSBlbi1VUyAgIiINCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgI2xhbmd1YWdlIGZyLUZSICAiIg0KPj4tDQo+Pi0NCj4+ZGlmZiAtLWdp dA0KPj5hL1NlY3VyaXR5UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Vc2VySWRlbnRpZnlNYW5hZ2Vy RHhlL1VzZXJJZGVudGlmeU1hDQo+bg0KPj5hZ2VyVmZyLlZmcg0KPj5iL1NlY3VyaXR5UGtnL1Vz ZXJJZGVudGlmaWNhdGlvbi9Vc2VySWRlbnRpZnlNYW5hZ2VyRHhlL1VzZXJJZGVudGlmeU1hDQo+ bg0KPj5hZ2VyVmZyLlZmcg0KPj5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCj4+aW5kZXggMzA2 Njc5Nzc2ZC4uMDAwMDAwMDAwMA0KPj4tLS0NCj4+YS9TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmlj YXRpb24vVXNlcklkZW50aWZ5TWFuYWdlckR4ZS9Vc2VySWRlbnRpZnlNYQ0KPm4NCj4+YWdlclZm ci5WZnINCj4+KysrIC9kZXYvbnVsbA0KPj5AQCAtMSw0MyArMCwwIEBADQo+Pi0vKiogQGZpbGUN Cj4+LSAgVXNlciBpZGVudGlmeSBtYW5hZ2VyIGZvcm1zZXQuDQo+Pi0NCj4+LUNvcHlyaWdodCAo YykgMjAwOSAtIDIwMTAsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxC Uj4NCj4+LVRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCj4+LWFy ZSBsaWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRp b25zIG9mIHRoZSBCU0QNCj4+TGljZW5zZQ0KPj4td2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0 cmlidXRpb24uICBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIG1heSBiZQ0KPj5mb3VuZCBh dA0KPj4taHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocA0KPj4t DQo+Pi1USEUgUFJPR1JBTSBJUyBESVNUUklCVVRFRCBVTkRFUiBUSEUgQlNEIExJQ0VOU0UgT04g QU4gIkFTIElTIg0KPkJBU0lTLA0KPj4tV0lUSE9VVCBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFU SU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSDQo+PkVYUFJFU1MgT1IgSU1QTElFRC4NCj4+LQ0KPj4t KiovDQo+Pi0NCj4+LSNpbmNsdWRlICJVc2VySWRlbnRpZnlNYW5hZ2VyRGF0YS5oIg0KPj4tDQo+ Pi1mb3Jtc2V0DQo+Pi0gIGd1aWQgICAgICA9IFVTRVJfSURFTlRJRllfTUFOQUdFUl9HVUlELA0K Pj4tICB0aXRsZSAgICAgPSBTVFJJTkdfVE9LRU4oU1RSX1RJVExFKSwNCj4+LSAgaGVscCAgICAg ID0gU1RSSU5HX1RPS0VOKFNUUl9OVUxMX1NUUklORyksDQo+Pi0gIGNsYXNzZ3VpZCA9IFVTRVJf SURFTlRJRllfTUFOQUdFUl9HVUlELA0KPj4tDQo+Pi0gIGZvcm0gZm9ybWlkID0gRk9STUlEX1VT RVJfRk9STSwNCj4+LSAgICB0aXRsZSA9IFNUUklOR19UT0tFTihTVFJfVVNFUl9TRUxFQ1QpOw0K Pj4tDQo+Pi0gICAgc3VwcHJlc3NpZiBUUlVFOw0KPj4tICAgICAgdGV4dA0KPj4tICAgICAgICBo ZWxwICAgPSBTVFJJTkdfVE9LRU4oU1RSX05VTExfU1RSSU5HKSwNCj4+LSAgICAgICAgdGV4dCAg ID0gU1RSSU5HX1RPS0VOKFNUUl9OVUxMX1NUUklORyksDQo+Pi0gICAgICAgIGZsYWdzICA9IElO VEVSQUNUSVZFLA0KPj4tICAgICAgICBrZXkgICAgPSBGT1JNX09QRU5fUVVFU1RJT05fSUQ7DQo+ Pi0gICAgZW5kaWY7DQo+Pi0NCj4+LSAgICBsYWJlbCBMQUJFTF9VU0VSX05BTUU7DQo+Pi0gICAg bGFiZWwgTEFCRUxfRU5EOw0KPj4tICBlbmRmb3JtOw0KPj4tDQo+Pi0gIGZvcm0gZm9ybWlkID0g Rk9STUlEX1BST1ZJREVSX0ZPUk0sDQo+Pi0gICAgdGl0bGUgPSBTVFJJTkdfVE9LRU4oU1RSX1BS T1ZJREVSX1NFTEVDVCk7DQo+Pi0gICAgbGFiZWwgTEFCRUxfUFJPVklERVJfTkFNRTsNCj4+LSAg ICBsYWJlbCBMQUJFTF9FTkQ7DQo+Pi0gIGVuZGZvcm07DQo+Pi1lbmRmb3Jtc2V0Ow0KPj5cIE5v IG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUNCj4+ZGlmZiAtLWdpdA0KPj5hL1NlY3VyaXR5UGtnL1Vz ZXJJZGVudGlmaWNhdGlvbi9Vc2VyUHJvZmlsZU1hbmFnZXJEeGUvTW9kaWZ5QWNjZXNzUG9saQ0K PmMNCj4+eS5jDQo+PmIvU2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9uL1VzZXJQcm9maWxl TWFuYWdlckR4ZS9Nb2RpZnlBY2Nlc3NQb2xpDQo+Yw0KPj55LmMNCj4+ZGVsZXRlZCBmaWxlIG1v ZGUgMTAwNjQ0DQo+PmluZGV4IDU2ZDNiMWRmOTguLjAwMDAwMDAwMDANCj4+LS0tDQo+PmEvU2Vj dXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9uL1VzZXJQcm9maWxlTWFuYWdlckR4ZS9Nb2RpZnlB Y2Nlc3NQb2xpDQo+Yw0KPj55LmMNCj4+KysrIC9kZXYvbnVsbA0KPj5AQCAtMSw2ODggKzAsMCBA QA0KPj4tLyoqIEBmaWxlDQo+Pi0gIFRoZSBmdW5jdGlvbnMgZm9yIGFjY2VzcyBwb2xpY3kgbW9k aWZpY2F0aW9uLg0KPj4tDQo+Pi1Db3B5cmlnaHQgKGMpIDIwMDkgLSAyMDE4LCBJbnRlbCBDb3Jw b3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+Pi1UaGlzIHByb2dyYW0gYW5kIHRo ZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQo+Pi1hcmUgbGljZW5zZWQgYW5kIG1hZGUgYXZhaWxh YmxlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgQlNEDQo+PkxpY2Vuc2UN Cj4+LXdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLiAgVGhlIGZ1bGwgdGV4dCBv ZiB0aGUgbGljZW5zZSBtYXkgYmUNCj4+Zm91bmQgYXQNCj4+LWh0dHA6Ly9vcGVuc291cmNlLm9y Zy9saWNlbnNlcy9ic2QtbGljZW5zZS5waHANCj4+LQ0KPj4tVEhFIFBST0dSQU0gSVMgRElTVFJJ QlVURUQgVU5ERVIgVEhFIEJTRCBMSUNFTlNFIE9OIEFOICJBUyBJUyINCj5CQVNJUywNCj4+LVdJ VEhPVVQgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUg0K Pj5FWFBSRVNTIE9SIElNUExJRUQuDQo+Pi0NCj4+LSoqLw0KPj4tDQo+Pi0jaW5jbHVkZSAiVXNl clByb2ZpbGVNYW5hZ2VyLmgiDQo+Pi0NCj4+LS8qKg0KPj4tICBDb2xsZWN0IGFsbCB0aGUgYWNj ZXNzIHBvbGljeSBkYXRhIHRvIG1Vc2VySW5mby5BY2Nlc3NQb2xpY3ksDQo+Pi0gIGFuZCBzYXZl IGl0IHRvIHVzZXIgcHJvZmlsZS4NCj4+LQ0KPj4tKiovDQo+Pi1WT0lEDQo+Pi1TYXZlQWNjZXNz UG9saWN5ICgNCj4+LSAgVk9JRA0KPj4tICApDQo+Pi17DQo+Pi0gIEVGSV9TVEFUVVMgICAgICAg ICAgICAgICAgICAgIFN0YXR1czsNCj4+LSAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAg T2ZmU2V0Ow0KPj4tICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICBTaXplOw0KPj4tICBF RklfVVNFUl9JTkZPX0FDQ0VTU19DT05UUk9MICBDb250cm9sOw0KPj4tICBFRklfVVNFUl9JTkZP X0hBTkRMRSAgICAgICAgICBVc2VySW5mbzsNCj4+LSAgRUZJX1VTRVJfSU5GTyAgICAgICAgICAg ICAgICAgKkluZm87DQo+Pi0NCj4+LSAgaWYgKG1Vc2VySW5mby5BY2Nlc3NQb2xpY3kgIT0gTlVM TCkgew0KPj4tICAgIEZyZWVQb29sIChtVXNlckluZm8uQWNjZXNzUG9saWN5KTsNCj4+LSAgfQ0K Pj4tICBtVXNlckluZm8uQWNjZXNzUG9saWN5ICAgICAgICAgID0gTlVMTDsNCj4+LSAgbVVzZXJJ bmZvLkFjY2Vzc1BvbGljeUxlbiAgICAgICA9IDA7DQo+Pi0gIG1Vc2VySW5mby5BY2Nlc3NQb2xp Y3lNb2RpZmllZCAgPSBUUlVFOw0KPj4tICBPZmZTZXQgICAgICAgICAgICAgICAgICAgICAgICAg ID0gMDsNCj4+LQ0KPj4tICAvLw0KPj4tICAvLyBTYXZlIGFjY2VzcyByaWdodC4NCj4+LSAgLy8N Cj4+LSAgU2l6ZSA9IHNpemVvZiAoRUZJX1VTRVJfSU5GT19BQ0NFU1NfQ09OVFJPTCk7DQo+Pi0g IGlmIChtVXNlckluZm8uQWNjZXNzUG9saWN5TGVuIC0gT2ZmU2V0IDwgU2l6ZSkgew0KPj4tICAg IEV4cGFuZE1lbW9yeSAoT2ZmU2V0LCBTaXplKTsNCj4+LSAgfQ0KPj4tDQo+Pi0gIENvbnRyb2wu VHlwZSA9IG1BY2Nlc3NJbmZvLkFjY2Vzc1JpZ2h0Ow0KPj4tICBDb250cm9sLlNpemUgPSAoVUlO VDMyKSBTaXplOw0KPj4tICBDb3B5TWVtIChtVXNlckluZm8uQWNjZXNzUG9saWN5ICsgT2ZmU2V0 LCAmQ29udHJvbCwgc2l6ZW9mIChDb250cm9sKSk7DQo+Pi0gIE9mZlNldCArPSBzaXplb2YgKENv bnRyb2wpOw0KPj4tDQo+Pi0gIC8vDQo+Pi0gIC8vIFNhdmUgYWNjZXNzIHNldHVwLg0KPj4tICAv Lw0KPj4tICBTaXplID0gc2l6ZW9mIChFRklfVVNFUl9JTkZPX0FDQ0VTU19DT05UUk9MKSArIHNp emVvZiAoRUZJX0dVSUQpOw0KPj4tICBpZiAobVVzZXJJbmZvLkFjY2Vzc1BvbGljeUxlbiAtIE9m ZlNldCA8IFNpemUpIHsNCj4+LSAgICBFeHBhbmRNZW1vcnkgKE9mZlNldCwgU2l6ZSk7DQo+Pi0g IH0NCj4+LQ0KPj4tICBDb250cm9sLlR5cGUgPSBFRklfVVNFUl9JTkZPX0FDQ0VTU19TRVRVUDsN Cj4+LSAgQ29udHJvbC5TaXplID0gKFVJTlQzMikgU2l6ZTsNCj4+LSAgQ29weU1lbSAobVVzZXJJ bmZvLkFjY2Vzc1BvbGljeSArIE9mZlNldCwgJkNvbnRyb2wsIHNpemVvZiAoQ29udHJvbCkpOw0K Pj4tICBPZmZTZXQgKz0gc2l6ZW9mIChDb250cm9sKTsNCj4+LQ0KPj4tICBpZiAobUFjY2Vzc0lu Zm8uQWNjZXNzU2V0dXAgPT0gQUNDRVNTX1NFVFVQX05PUk1BTCkgew0KPj4tICAgIENvcHlHdWlk ICgoRUZJX0dVSUQgKikgKG1Vc2VySW5mby5BY2Nlc3NQb2xpY3kgKyBPZmZTZXQpLA0KPj4mZ0Vm aVVzZXJJbmZvQWNjZXNzU2V0dXBOb3JtYWxHdWlkKTsNCj4+LSAgfSBlbHNlIGlmIChtQWNjZXNz SW5mby5BY2Nlc3NTZXR1cCA9PSBBQ0NFU1NfU0VUVVBfUkVTVFJJQ1RFRCkgew0KPj4tICAgIENv cHlHdWlkICgoRUZJX0dVSUQgKikgKG1Vc2VySW5mby5BY2Nlc3NQb2xpY3kgKyBPZmZTZXQpLA0K Pj4mZ0VmaVVzZXJJbmZvQWNjZXNzU2V0dXBSZXN0cmljdGVkR3VpZCk7DQo+Pi0gIH0gZWxzZSBp ZiAobUFjY2Vzc0luZm8uQWNjZXNzU2V0dXAgPT0gQUNDRVNTX1NFVFVQX0FETUlOKSB7DQo+Pi0g ICAgQ29weUd1aWQgKChFRklfR1VJRCAqKSAobVVzZXJJbmZvLkFjY2Vzc1BvbGljeSArIE9mZlNl dCksDQo+PiZnRWZpVXNlckluZm9BY2Nlc3NTZXR1cEFkbWluR3VpZCk7DQo+Pi0gIH0NCj4+LSAg T2ZmU2V0ICs9IHNpemVvZiAoRUZJX0dVSUQpOw0KPj4tDQo+Pi0gIC8vDQo+Pi0gIC8vIFNhdmUg YWNjZXNzIG9mIGJvb3Qgb3JkZXIuDQo+Pi0gIC8vDQo+Pi0gIFNpemUgPSBzaXplb2YgKEVGSV9V U0VSX0lORk9fQUNDRVNTX0NPTlRST0wpICsgc2l6ZW9mIChVSU5UMzIpOw0KPj4tICBpZiAobVVz ZXJJbmZvLkFjY2Vzc1BvbGljeUxlbiAtIE9mZlNldCA8IFNpemUpIHsNCj4+LSAgICBFeHBhbmRN ZW1vcnkgKE9mZlNldCwgU2l6ZSk7DQo+Pi0gIH0NCj4+LQ0KPj4tICBDb250cm9sLlR5cGUgPSBF RklfVVNFUl9JTkZPX0FDQ0VTU19CT09UX09SREVSOw0KPj4tICBDb250cm9sLlNpemUgPSAoVUlO VDMyKSBTaXplOw0KPj4tICBDb3B5TWVtIChtVXNlckluZm8uQWNjZXNzUG9saWN5ICsgT2ZmU2V0 LCAmQ29udHJvbCwgc2l6ZW9mIChDb250cm9sKSk7DQo+Pi0gIE9mZlNldCArPSBzaXplb2YgKENv bnRyb2wpOw0KPj4tDQo+Pi0gIENvcHlNZW0gKChVSU5UOCAqKSAobVVzZXJJbmZvLkFjY2Vzc1Bv bGljeSArIE9mZlNldCksDQo+PiZtQWNjZXNzSW5mby5BY2Nlc3NCb290T3JkZXIsIHNpemVvZiAo VUlOVDMyKSk7DQo+Pi0gIE9mZlNldCArPSBzaXplb2YgKFVJTlQzMik7DQo+Pi0NCj4+LSAgLy8N Cj4+LSAgLy8gU2F2ZSBwZXJtaXQgbG9hZC4NCj4+LSAgLy8NCj4+LSAgaWYgKG1BY2Nlc3NJbmZv LkxvYWRQZXJtaXRMZW4gPiAwKSB7DQo+Pi0gICAgU2l6ZSA9IHNpemVvZiAoRUZJX1VTRVJfSU5G T19BQ0NFU1NfQ09OVFJPTCkgKw0KPj5tQWNjZXNzSW5mby5Mb2FkUGVybWl0TGVuOw0KPj4tICAg IGlmIChtVXNlckluZm8uQWNjZXNzUG9saWN5TGVuIC0gT2ZmU2V0IDwgU2l6ZSkgew0KPj4tICAg ICAgRXhwYW5kTWVtb3J5IChPZmZTZXQsIFNpemUpOw0KPj4tICAgIH0NCj4+LQ0KPj4tICAgIENv bnRyb2wuVHlwZSA9IEVGSV9VU0VSX0lORk9fQUNDRVNTX1BFUk1JVF9MT0FEOw0KPj4tICAgIENv bnRyb2wuU2l6ZSA9IChVSU5UMzIpIFNpemU7DQo+Pi0gICAgQ29weU1lbSAobVVzZXJJbmZvLkFj Y2Vzc1BvbGljeSArIE9mZlNldCwgJkNvbnRyb2wsIHNpemVvZiAoQ29udHJvbCkpOw0KPj4tICAg IE9mZlNldCArPSBzaXplb2YgKENvbnRyb2wpOw0KPj4tDQo+Pi0gICAgQ29weU1lbSAobVVzZXJJ bmZvLkFjY2Vzc1BvbGljeSArIE9mZlNldCwgbUFjY2Vzc0luZm8uTG9hZFBlcm1pdCwNCj4+bUFj Y2Vzc0luZm8uTG9hZFBlcm1pdExlbik7DQo+Pi0gICAgT2ZmU2V0ICs9IG1BY2Nlc3NJbmZvLkxv YWRQZXJtaXRMZW47DQo+Pi0gIH0NCj4+LQ0KPj4tICAvLw0KPj4tICAvLyBTYXZlIGZvcmJpZCBs b2FkLg0KPj4tICAvLw0KPj4tICBpZiAobUFjY2Vzc0luZm8uTG9hZEZvcmJpZExlbiA+IDApIHsN Cj4+LSAgICBTaXplID0gc2l6ZW9mIChFRklfVVNFUl9JTkZPX0FDQ0VTU19DT05UUk9MKSArDQo+ Pm1BY2Nlc3NJbmZvLkxvYWRGb3JiaWRMZW47DQo+Pi0gICAgaWYgKG1Vc2VySW5mby5BY2Nlc3NQ b2xpY3lMZW4gLSBPZmZTZXQgPCBTaXplKSB7DQo+Pi0gICAgICBFeHBhbmRNZW1vcnkgKE9mZlNl dCwgU2l6ZSk7DQo+Pi0gICAgfQ0KPj4tDQo+Pi0gICAgQ29udHJvbC5UeXBlID0gRUZJX1VTRVJf SU5GT19BQ0NFU1NfRk9SQklEX0xPQUQ7DQo+Pi0gICAgQ29udHJvbC5TaXplID0gKFVJTlQzMikg U2l6ZTsNCj4+LSAgICBDb3B5TWVtIChtVXNlckluZm8uQWNjZXNzUG9saWN5ICsgT2ZmU2V0LCAm Q29udHJvbCwgc2l6ZW9mIChDb250cm9sKSk7DQo+Pi0gICAgT2ZmU2V0ICs9IHNpemVvZiAoQ29u dHJvbCk7DQo+Pi0NCj4+LSAgICBDb3B5TWVtIChtVXNlckluZm8uQWNjZXNzUG9saWN5ICsgT2Zm U2V0LCBtQWNjZXNzSW5mby5Mb2FkRm9yYmlkLA0KPj5tQWNjZXNzSW5mby5Mb2FkRm9yYmlkTGVu KTsNCj4+LSAgICBPZmZTZXQgKz0gbUFjY2Vzc0luZm8uTG9hZEZvcmJpZExlbjsNCj4+LSAgfQ0K Pj4tDQo+Pi0gIC8vDQo+Pi0gIC8vIFNhdmUgcGVybWl0IGNvbm5lY3QuDQo+Pi0gIC8vDQo+Pi0g IGlmIChtQWNjZXNzSW5mby5Db25uZWN0UGVybWl0TGVuID4gMCkgew0KPj4tICAgIFNpemUgPSBz aXplb2YgKEVGSV9VU0VSX0lORk9fQUNDRVNTX0NPTlRST0wpICsNCj4+bUFjY2Vzc0luZm8uQ29u bmVjdFBlcm1pdExlbjsNCj4+LSAgICBpZiAobVVzZXJJbmZvLkFjY2Vzc1BvbGljeUxlbiAtIE9m ZlNldCA8IFNpemUpIHsNCj4+LSAgICAgIEV4cGFuZE1lbW9yeSAoT2ZmU2V0LCBTaXplKTsNCj4+ LSAgICB9DQo+Pi0NCj4+LSAgICBDb250cm9sLlR5cGUgPSBFRklfVVNFUl9JTkZPX0FDQ0VTU19Q RVJNSVRfQ09OTkVDVDsNCj4+LSAgICBDb250cm9sLlNpemUgPSAoVUlOVDMyKSBTaXplOw0KPj4t ICAgIENvcHlNZW0gKG1Vc2VySW5mby5BY2Nlc3NQb2xpY3kgKyBPZmZTZXQsICZDb250cm9sLCBz aXplb2YgKENvbnRyb2wpKTsNCj4+LSAgICBPZmZTZXQgKz0gc2l6ZW9mIChDb250cm9sKTsNCj4+ LQ0KPj4tICAgIENvcHlNZW0gKG1Vc2VySW5mby5BY2Nlc3NQb2xpY3kgKyBPZmZTZXQsDQo+bUFj Y2Vzc0luZm8uQ29ubmVjdFBlcm1pdCwNCj4+bUFjY2Vzc0luZm8uQ29ubmVjdFBlcm1pdExlbik7 DQo+Pi0gICAgT2ZmU2V0ICs9IG1BY2Nlc3NJbmZvLkNvbm5lY3RQZXJtaXRMZW47DQo+Pi0gIH0N Cj4+LQ0KPj4tICAvLw0KPj4tICAvLyBTYXZlIGZvcmJpZCBjb25uZWN0Lg0KPj4tICAvLw0KPj4t ICBpZiAobUFjY2Vzc0luZm8uQ29ubmVjdEZvcmJpZExlbiA+IDApIHsNCj4+LSAgICBTaXplID0g c2l6ZW9mIChFRklfVVNFUl9JTkZPX0FDQ0VTU19DT05UUk9MKSArDQo+Pm1BY2Nlc3NJbmZvLkNv bm5lY3RGb3JiaWRMZW47DQo+Pi0gICAgaWYgKG1Vc2VySW5mby5BY2Nlc3NQb2xpY3lMZW4gLSBP ZmZTZXQgPCBTaXplKSB7DQo+Pi0gICAgICBFeHBhbmRNZW1vcnkgKE9mZlNldCwgU2l6ZSk7DQo+ Pi0gICAgfQ0KPj4tDQo+Pi0gICAgQ29udHJvbC5UeXBlID0gRUZJX1VTRVJfSU5GT19BQ0NFU1Nf Rk9SQklEX0NPTk5FQ1Q7DQo+Pi0gICAgQ29udHJvbC5TaXplID0gKFVJTlQzMikgU2l6ZTsNCj4+ LSAgICBDb3B5TWVtIChtVXNlckluZm8uQWNjZXNzUG9saWN5ICsgT2ZmU2V0LCAmQ29udHJvbCwg c2l6ZW9mIChDb250cm9sKSk7DQo+Pi0gICAgT2ZmU2V0ICs9IHNpemVvZiAoQ29udHJvbCk7DQo+ Pi0NCj4+LSAgICBDb3B5TWVtIChtVXNlckluZm8uQWNjZXNzUG9saWN5ICsgT2ZmU2V0LCBtQWNj ZXNzSW5mby5Db25uZWN0Rm9yYmlkLA0KPj5tQWNjZXNzSW5mby5Db25uZWN0Rm9yYmlkTGVuKTsN Cj4+LSAgICBPZmZTZXQgKz0gbUFjY2Vzc0luZm8uQ29ubmVjdEZvcmJpZExlbjsNCj4+LSAgfQ0K Pj4tDQo+Pi0gIG1Vc2VySW5mby5BY2Nlc3NQb2xpY3lMZW4gPSBPZmZTZXQ7DQo+Pi0NCj4+LSAg Ly8NCj4+LSAgLy8gU2F2ZSBhY2Nlc3MgcG9saWN5Lg0KPj4tICAvLw0KPj4tICBpZiAobVVzZXJJ bmZvLkFjY2Vzc1BvbGljeU1vZGlmaWVkICYmIChtVXNlckluZm8uQWNjZXNzUG9saWN5TGVuID4g MCkNCj4+JiYgKG1Vc2VySW5mby5BY2Nlc3NQb2xpY3kgIT0gTlVMTCkpIHsNCj4+LSAgICBJbmZv ID0gQWxsb2NhdGVaZXJvUG9vbCAoc2l6ZW9mIChFRklfVVNFUl9JTkZPKSArDQo+Pm1Vc2VySW5m by5BY2Nlc3NQb2xpY3lMZW4pOw0KPj4tICAgIGlmIChJbmZvID09IE5VTEwpIHsNCj4+LSAgICAg IHJldHVybiA7DQo+Pi0gICAgfQ0KPj4tDQo+Pi0gICAgU3RhdHVzID0gRmluZEluZm9CeVR5cGUg KG1Nb2RpZnlVc2VyLA0KPj5FRklfVVNFUl9JTkZPX0FDQ0VTU19QT0xJQ1lfUkVDT1JELCAmVXNl ckluZm8pOw0KPj4tICAgIGlmICghRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+Pi0gICAgICBJbmZv LT5JbmZvVHlwZSAgICA9IEVGSV9VU0VSX0lORk9fQUNDRVNTX1BPTElDWV9SRUNPUkQ7DQo+Pi0g ICAgICBJbmZvLT5JbmZvQXR0cmlicyA9IEVGSV9VU0VSX0lORk9fU1RPUkFHRV9QTEFURk9STV9O ViB8DQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgIEVGSV9VU0VSX0lORk9fUFVCTElDIHwN Cj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgRUZJX1VTRVJfSU5GT19FWENMVVNJVkU7DQo+ Pi0gICAgICBJbmZvLT5JbmZvU2l6ZSAgICA9IChVSU5UMzIpIChzaXplb2YgKEVGSV9VU0VSX0lO Rk8pICsNCj4+bVVzZXJJbmZvLkFjY2Vzc1BvbGljeUxlbik7DQo+Pi0gICAgICBDb3B5TWVtICgo VUlOVDggKikgKEluZm8gKyAxKSwgbVVzZXJJbmZvLkFjY2Vzc1BvbGljeSwNCj4+bVVzZXJJbmZv LkFjY2Vzc1BvbGljeUxlbik7DQo+Pi0gICAgICBTdGF0dXMgPSBtVXNlck1hbmFnZXItPlNldElu Zm8gKA0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VyTWFuYWdlciwNCj4+ LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtTW9kaWZ5VXNlciwNCj4+LSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAmVXNlckluZm8sDQo+Pi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgSW5mbywNCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmZv LT5JbmZvU2l6ZQ0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+Pi0gICAg ICBtVXNlckluZm8uQWNjZXNzUG9saWN5TW9kaWZpZWQgPSBGQUxTRTsNCj4+LSAgICB9DQo+Pi0g ICAgRnJlZVBvb2wgKEluZm8pOw0KPj4tICB9DQo+Pi0NCj4+LSAgaWYgKG1BY2Nlc3NJbmZvLkNv bm5lY3RGb3JiaWQgIT0gTlVMTCkgew0KPj4tICAgIEZyZWVQb29sIChtQWNjZXNzSW5mby5Db25u ZWN0Rm9yYmlkKTsNCj4+LSAgICBtQWNjZXNzSW5mby5Db25uZWN0Rm9yYmlkID0gTlVMTDsNCj4+ LSAgfQ0KPj4tDQo+Pi0gIGlmIChtQWNjZXNzSW5mby5Db25uZWN0UGVybWl0ICE9IE5VTEwpIHsN Cj4+LSAgICBGcmVlUG9vbCAobUFjY2Vzc0luZm8uQ29ubmVjdFBlcm1pdCk7DQo+Pi0gICAgbUFj Y2Vzc0luZm8uQ29ubmVjdFBlcm1pdCA9IE5VTEw7DQo+Pi0gIH0NCj4+LQ0KPj4tICBpZiAobUFj Y2Vzc0luZm8uTG9hZEZvcmJpZCAhPSBOVUxMKSB7DQo+Pi0gICAgRnJlZVBvb2wgKG1BY2Nlc3NJ bmZvLkxvYWRGb3JiaWQpOw0KPj4tICAgIG1BY2Nlc3NJbmZvLkxvYWRGb3JiaWQgPSBOVUxMOw0K Pj4tICB9DQo+Pi0NCj4+LSAgaWYgKG1BY2Nlc3NJbmZvLkxvYWRQZXJtaXQgIT0gTlVMTCkgew0K Pj4tICAgIEZyZWVQb29sIChtQWNjZXNzSW5mby5Mb2FkUGVybWl0KTsNCj4+LSAgICBtQWNjZXNz SW5mby5Mb2FkUGVybWl0ID0gTlVMTDsNCj4+LSAgfQ0KPj4tfQ0KPj4tDQo+Pi0vKioNCj4+LSAg Q3JlYXRlIGFuIGFjdGlvbiBPcENvZGUgd2l0aCBRdWVzdGlvbklEIGFuZCBEZXZpY2VQYXRoIG9u IGEgZ2l2ZW4NCj4+T3BDb2RlSGFuZGxlLg0KPj4tDQo+Pi0gIEBwYXJhbVtpbl0gIFF1ZXN0aW9u SUQgICAgICAgICAgICBUaGUgcXVlc3Rpb24gSUQuDQo+Pi0gIEBwYXJhbVtpbl0gIERldmljZVBh dGggICAgICAgICAgICBQb2ludHMgdG8gZGV2aWNlIHBhdGguDQo+Pi0gIEBwYXJhbVtpbl0gIE9w Q29kZUhhbmRsZSAgICAgICAgICBQb2ludHMgdG8gY29udGFpbmVyIGZvciBkeW5hbWljIGNyZWF0 ZWQNCj4+b3Bjb2Rlcy4NCj4+LQ0KPj4tKiovDQo+Pi1WT0lEDQo+Pi1BZGREZXZpY2VQYXRoICgN Cj4+LSAgSU4gIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFF1ZXN0 aW9uSUQsDQo+Pi0gIElOICBFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wgICAgICAgICAgICAgICAg ICAqRGV2aWNlUGF0aCwNCj4+LSAgSU4gICAgIFZPSUQgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICpPcENvZGVIYW5kbGUNCj4+LSAgKQ0KPj4tew0KPj4tICBFRklfREVWSUNFX1BB VEhfUFJPVE9DT0wgICAgICAgICAgKk5leHQ7DQo+Pi0gIEVGSV9TVFJJTkdfSUQgICAgICAgICAg ICAgICAgICAgICBOYW1lSUQ7DQo+Pi0gIEVGSV9TVFJJTkcgICAgICAgICAgICAgICAgICAgICAg ICBEcml2ZXJOYW1lOw0KPj4tDQo+Pi0gIC8vDQo+Pi0gIC8vIEdldCBkcml2ZXIgZmlsZSBuYW1l IG5vZGUuDQo+Pi0gIC8vDQo+Pi0gIE5leHQgPSBEZXZpY2VQYXRoOw0KPj4tICB3aGlsZSAoIUlz RGV2aWNlUGF0aEVuZCAoTmV4dCkpIHsNCj4+LSAgICBEZXZpY2VQYXRoICA9IE5leHQ7DQo+Pi0g ICAgTmV4dCAgICAgICAgPSBOZXh0RGV2aWNlUGF0aE5vZGUgKE5leHQpOw0KPj4tICB9DQo+Pi0N Cj4+LSAgLy8NCj4+LSAgLy8gRGlzcGxheSB0aGUgZGV2aWNlIHBhdGggaW4gZm9ybS4NCj4+LSAg Ly8NCj4+LSAgRHJpdmVyTmFtZSA9IENvbnZlcnREZXZpY2VQYXRoVG9UZXh0IChEZXZpY2VQYXRo LCBGQUxTRSwgRkFMU0UpOw0KPj4tICBOYW1lSUQgPSBIaWlTZXRTdHJpbmcgKG1DYWxsYmFja0lu Zm8tPkhpaUhhbmRsZSwgMCwgRHJpdmVyTmFtZSwgTlVMTCk7DQo+Pi0gIEZyZWVQb29sIChEcml2 ZXJOYW1lKTsNCj4+LSAgaWYgKE5hbWVJRCA9PSAwKSB7DQo+Pi0gICAgcmV0dXJuIDsNCj4+LSAg fQ0KPj4tDQo+Pi0gIEhpaUNyZWF0ZUFjdGlvbk9wQ29kZSAoDQo+Pi0gICAgT3BDb2RlSGFuZGxl LCAgICAgICAgICAgICAgICAgICAvLyBDb250YWluZXIgZm9yIGR5bmFtaWMgY3JlYXRlZCBvcGNv ZGVzDQo+Pi0gICAgKFVJTlQxNikgUXVlc3Rpb25JRCwgICAgICAgICAgICAvLyBRdWVzdGlvbiBJ RA0KPj4tICAgIE5hbWVJRCwgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUHJvbXB0IHRleHQN Cj4+LSAgICBTVFJJTkdfVE9LRU4gKFNUUl9OVUxMX1NUUklORyksIC8vIEhlbHAgdGV4dA0KPj4t ICAgIEVGSV9JRlJfRkxBR19DQUxMQkFDSywgICAgICAgICAgLy8gUXVlc3Rpb24gZmxhZw0KPj4t ICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWN0aW9uIFN0cmluZyBJRA0K Pj4tICAgICk7DQo+Pi19DQo+Pi0NCj4+LQ0KPj4tLyoqDQo+Pi0gIENoZWNrIHdoZXRoZXIgdGhl IERldmljZVBhdGggaXMgaW4gdGhlIGRldmljZSBwYXRoIGZvcmJpZCBsaXN0DQo+Pi0gIChtQWNj ZXNzSW5mby5Mb2FkRm9yYmlkKS4NCj4+LQ0KPj4tICBAcGFyYW1baW5dICBEZXZpY2VQYXRoICAg ICAgICAgICBQb2ludHMgdG8gZGV2aWNlIHBhdGguDQo+Pi0NCj4+LSAgQHJldHZhbCBUUlVFICAg ICBUaGUgRGV2aWNlUGF0aCBpcyBpbiB0aGUgZGV2aWNlIHBhdGggZm9yYmlkIGxpc3QuDQo+Pi0g IEByZXR2YWwgRkFMU0UgICAgVGhlIERldmljZVBhdGggaXMgbm90IGluIHRoZSBkZXZpY2UgcGF0 aCBmb3JiaWQgbGlzdC4NCj4+LQ0KPj4tKiovDQo+Pi1CT09MRUFODQo+Pi1Jc0xvYWRGb3JiaWRk ZW4gKA0KPj4tICBJTiAgRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICAgICAgICAgICAgICAgICAg KkRldmljZVBhdGgNCj4+LSAgKQ0KPj4tew0KPj4tICBVSU5UTiAgICAgICAgICAgICAgICAgICAg IE9mZlNldDsNCj4+LSAgVUlOVE4gICAgICAgICAgICAgICAgICAgICBEUFNpemU7DQo+Pi0gIFVJ TlROICAgICAgICAgICAgICAgICAgICAgU2l6ZTsNCj4+LSAgRUZJX0RFVklDRV9QQVRIX1BST1RP Q09MICAqRHA7DQo+Pi0NCj4+LSAgT2ZmU2V0ID0gMDsNCj4+LSAgU2l6ZSAgID0gR2V0RGV2aWNl UGF0aFNpemUgKERldmljZVBhdGgpOw0KPj4tICAvLw0KPj4tICAvLyBDaGVjayBlYWNoIGRldmlj ZSBwYXRoLg0KPj4tICAvLw0KPj4tICB3aGlsZSAoT2ZmU2V0IDwgbUFjY2Vzc0luZm8uTG9hZEZv cmJpZExlbikgew0KPj4tICAgIERwICAgICAgPSAoRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICop IChtQWNjZXNzSW5mby5Mb2FkRm9yYmlkICsNCj4+T2ZmU2V0KTsNCj4+LSAgICBEUFNpemUgID0g R2V0RGV2aWNlUGF0aFNpemUgKERwKTsNCj4+LSAgICAvLw0KPj4tICAgIC8vIENvbXBhcmUgZGV2 aWNlIHBhdGguDQo+Pi0gICAgLy8NCj4+LSAgICBpZiAoKERQU2l6ZSA9PSBTaXplKSAmJiAoQ29t cGFyZU1lbSAoRGV2aWNlUGF0aCwgRHAsIFNpemUpID09IDApKSB7DQo+Pi0gICAgICByZXR1cm4g VFJVRTsNCj4+LSAgICB9DQo+Pi0gICAgT2ZmU2V0ICs9IERQU2l6ZTsNCj4+LSAgfQ0KPj4tICBy ZXR1cm4gRkFMU0U7DQo+Pi19DQo+Pi0NCj4+LQ0KPj4tLyoqDQo+Pi0gIERpc3BsYXkgdGhlIHBl cm1pdCBsb2FkIGRldmljZSBwYXRoIGluIHRoZSBsb2FkYWJsZSBkZXZpY2UgcGF0aCBsaXN0Lg0K Pj4tDQo+Pi0qKi8NCj4+LVZPSUQNCj4+LURpc3BsYXlMb2FkUGVybWl0KA0KPj4tICBWT0lEDQo+ Pi0gICkNCj4+LXsNCj4+LSAgRUZJX1NUQVRVUyAgICAgICAgICBTdGF0dXM7DQo+Pi0gIENIQVIx NiAgICAgICAgICAgICAgKk9yZGVyOw0KPj4tICBVSU5UTiAgICAgICAgICAgICAgIE9yZGVyU2l6 ZTsNCj4+LSAgVUlOVE4gICAgICAgICAgICAgICBMaXN0Q291bnQ7DQo+Pi0gIFVJTlROICAgICAg ICAgICAgICAgSW5kZXg7DQo+Pi0gIFVJTlQ4ICAgICAgICAgICAgICAgKlZhcjsNCj4+LSAgVUlO VDggICAgICAgICAgICAgICAqVmFyUHRyOw0KPj4tICBDSEFSMTYgICAgICAgICAgICAgIFZhck5h bWVbMTJdOw0KPj4tICBWT0lEICAgICAgICAgICAgICAgICpTdGFydE9wQ29kZUhhbmRsZTsNCj4+ LSAgVk9JRCAgICAgICAgICAgICAgICAqRW5kT3BDb2RlSGFuZGxlOw0KPj4tICBFRklfSUZSX0dV SURfTEFCRUwgICpTdGFydExhYmVsOw0KPj4tICBFRklfSUZSX0dVSURfTEFCRUwgICpFbmRMYWJl bDsNCj4+LQ0KPj4tICAvLw0KPj4tICAvLyBHZXQgRHJpdmVyT3JkZXIuDQo+Pi0gIC8vDQo+Pi0g IE9yZGVyU2l6ZSA9IDA7DQo+Pi0gIFN0YXR1cyAgICA9IGdSVC0+R2V0VmFyaWFibGUgKA0KPj4t ICAgICAgICAgICAgICAgICAgICAgTCJEcml2ZXJPcmRlciIsDQo+Pi0gICAgICAgICAgICAgICAg ICAgICAmZ0VmaUdsb2JhbFZhcmlhYmxlR3VpZCwNCj4+LSAgICAgICAgICAgICAgICAgICAgIE5V TEwsDQo+Pi0gICAgICAgICAgICAgICAgICAgICAmT3JkZXJTaXplLA0KPj4tICAgICAgICAgICAg ICAgICAgICAgTlVMTA0KPj4tICAgICAgICAgICAgICAgICAgICAgKTsNCj4+LSAgaWYgKFN0YXR1 cyAhPSBFRklfQlVGRkVSX1RPT19TTUFMTCkgew0KPj4tICAgIHJldHVybiA7DQo+Pi0gIH0NCj4+ LQ0KPj4tICBPcmRlciA9IEFsbG9jYXRlWmVyb1Bvb2wgKE9yZGVyU2l6ZSk7DQo+Pi0gIGlmIChP cmRlciA9PSBOVUxMKSB7DQo+Pi0gICAgcmV0dXJuIDsNCj4+LSAgfQ0KPj4tDQo+Pi0gIFN0YXR1 cyA9IGdSVC0+R2V0VmFyaWFibGUgKA0KPj4tICAgICAgICAgICAgICAgICAgTCJEcml2ZXJPcmRl ciIsDQo+Pi0gICAgICAgICAgICAgICAgICAmZ0VmaUdsb2JhbFZhcmlhYmxlR3VpZCwNCj4+LSAg ICAgICAgICAgICAgICAgIE5VTEwsDQo+Pi0gICAgICAgICAgICAgICAgICAmT3JkZXJTaXplLA0K Pj4tICAgICAgICAgICAgICAgICAgT3JkZXINCj4+LSAgICAgICAgICAgICAgICAgICk7DQo+Pi0g IGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4+LSAgICByZXR1cm4gOw0KPj4tICB9DQo+Pi0N Cj4+LSAgLy8NCj4+LSAgLy8gSW5pdGlhbGl6ZSB0aGUgY29udGFpbmVyIGZvciBkeW5hbWljIG9w Y29kZXMuDQo+Pi0gIC8vDQo+Pi0gIFN0YXJ0T3BDb2RlSGFuZGxlID0gSGlpQWxsb2NhdGVPcENv ZGVIYW5kbGUgKCk7DQo+Pi0gIEFTU0VSVCAoU3RhcnRPcENvZGVIYW5kbGUgIT0gTlVMTCk7DQo+ Pi0NCj4+LSAgRW5kT3BDb2RlSGFuZGxlID0gSGlpQWxsb2NhdGVPcENvZGVIYW5kbGUgKCk7DQo+ Pi0gIEFTU0VSVCAoRW5kT3BDb2RlSGFuZGxlICE9IE5VTEwpOw0KPj4tDQo+Pi0gIC8vDQo+Pi0g IC8vIENyZWF0ZSBIaWkgRXh0ZW5kIExhYmVsIE9wQ29kZS4NCj4+LSAgLy8NCj4+LSAgU3RhcnRM YWJlbCA9IChFRklfSUZSX0dVSURfTEFCRUwgKikgSGlpQ3JlYXRlR3VpZE9wQ29kZSAoDQo+Pi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnRPcENvZGVIYW5kbGUs DQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmdFZmlJZnJUaWFu b0d1aWQsDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwN Cj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YgKEVGSV9J RlJfR1VJRF9MQUJFTCkNCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICApOw0KPj4tICBTdGFydExhYmVsLT5FeHRlbmRPcENvZGUgID0gRUZJX0lGUl9FWFRFTkRfT1Bf TEFCRUw7DQo+Pi0gIFN0YXJ0TGFiZWwtPk51bWJlciAgICAgICAgPSBMQUJFTF9QRVJNSVRfTE9B RF9GVU5DOw0KPj4tDQo+Pi0gIEVuZExhYmVsID0gKEVGSV9JRlJfR1VJRF9MQUJFTCAqKSBIaWlD cmVhdGVHdWlkT3BDb2RlICgNCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRW5kT3BDb2RlSGFuZGxlLA0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAmZ0VmaUlmclRpYW5vR3VpZCwNCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgTlVMTCwNCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c2l6ZW9mIChFRklfSUZSX0dVSURfTEFCRUwpDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICk7DQo+Pi0gIEVuZExhYmVsLT5FeHRlbmRPcENvZGUgID0gRUZJX0lGUl9F WFRFTkRfT1BfTEFCRUw7DQo+Pi0gIEVuZExhYmVsLT5OdW1iZXIgICAgICAgID0gTEFCRUxfRU5E Ow0KPj4tDQo+Pi0gIC8vDQo+Pi0gIC8vIEFkZCBlYWNoIGRyaXZlciBvcHRpb24uDQo+Pi0gIC8v DQo+Pi0gIFZhciAgICAgICA9IE5VTEw7DQo+Pi0gIExpc3RDb3VudCA9IE9yZGVyU2l6ZSAvIHNp emVvZiAoVUlOVDE2KTsNCj4+LSAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgTGlzdENvdW50OyBJ bmRleCsrKSB7DQo+Pi0gICAgLy8NCj4+LSAgICAvLyBHZXQgZHJpdmVyIGRldmljZSBwYXRoLg0K Pj4tICAgIC8vDQo+Pi0gICAgVW5pY29kZVNQcmludCAoVmFyTmFtZSwgc2l6ZW9mIChWYXJOYW1l KSwgTCJEcml2ZXIlMDR4IiwNCj5PcmRlcltJbmRleF0pOw0KPj4tICAgIEdldEVmaUdsb2JhbFZh cmlhYmxlMiAoVmFyTmFtZSwgKFZPSUQqKikmVmFyLCBOVUxMKTsNCj4+LSAgICBpZiAoVmFyID09 IE5VTEwpIHsNCj4+LSAgICAgIGNvbnRpbnVlOw0KPj4tICAgIH0NCj4+LQ0KPj4tICAgIC8vDQo+ Pi0gICAgLy8gQ2hlY2sgd2hldGhlciB0aGUgZHJpdmVyIGlzIGFscmVhZHkgZm9yYmlkZGVuLg0K Pj4tICAgIC8vDQo+Pi0NCj4+LSAgICBWYXJQdHIgPSBWYXI7DQo+Pi0gICAgLy8NCj4+LSAgICAv LyBTa2lwIGF0dHJpYnV0ZS4NCj4+LSAgICAvLw0KPj4tICAgIFZhclB0ciArPSBzaXplb2YgKFVJ TlQzMik7DQo+Pi0NCj4+LSAgICAvLw0KPj4tICAgIC8vIFNraXAgZGV2aWNlIHBhdGggbGVudGgu DQo+Pi0gICAgLy8NCj4+LSAgICBWYXJQdHIgKz0gc2l6ZW9mIChVSU5UMTYpOw0KPj4tDQo+Pi0g ICAgLy8NCj4+LSAgICAvLyBTa2lwIGRlc2NyaXB0IHN0cmluZy4NCj4+LSAgICAvLw0KPj4tICAg IFZhclB0ciArPSBTdHJTaXplICgoVUlOVDE2ICopIFZhclB0cik7DQo+Pi0NCj4+LSAgICBpZiAo SXNMb2FkRm9yYmlkZGVuICgoRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICopIFZhclB0cikpIHsN Cj4+LSAgICAgIEZyZWVQb29sIChWYXIpOw0KPj4tICAgICAgVmFyID0gTlVMTDsNCj4+LSAgICAg IGNvbnRpbnVlOw0KPj4tICAgIH0NCj4+LQ0KPj4tICAgIEFkZERldmljZVBhdGggKA0KPj4tICAg ICAgS0VZX01PRElGWV9VU0VSIHwgS0VZX01PRElGWV9BUF9EUCB8DQo+S0VZX0xPQURfUEVSTUlU X01PRElGWQ0KPj58IE9yZGVyW0luZGV4XSwNCj4+LSAgICAgIChFRklfREVWSUNFX1BBVEhfUFJP VE9DT0wgKikgVmFyUHRyLA0KPj4tICAgICAgU3RhcnRPcENvZGVIYW5kbGUNCj4+LSAgICAgICk7 DQo+Pi0gICAgRnJlZVBvb2wgKFZhcik7DQo+Pi0gICAgVmFyID0gTlVMTDsNCj4+LSAgfQ0KPj4t DQo+Pi0gIEhpaVVwZGF0ZUZvcm0gKA0KPj4tICAgIG1DYWxsYmFja0luZm8tPkhpaUhhbmRsZSwg Ly8gSElJIGhhbmRsZQ0KPj4tICAgICZnVXNlclByb2ZpbGVNYW5hZ2VyR3VpZCwgLy8gRm9ybXNl dCBHVUlEDQo+Pi0gICAgRk9STUlEX1BFUk1JVF9MT0FEX0RQLCAgICAvLyBGb3JtIElEDQo+Pi0g ICAgU3RhcnRPcENvZGVIYW5kbGUsICAgICAgICAvLyBMYWJlbCBmb3Igd2hlcmUgdG8gaW5zZXJ0 IG9wY29kZXMNCj4+LSAgICBFbmRPcENvZGVIYW5kbGUgICAgICAgICAgIC8vIFJlcGxhY2UgZGF0 YQ0KPj4tICAgICk7DQo+Pi0NCj4+LSAgSGlpRnJlZU9wQ29kZUhhbmRsZSAoU3RhcnRPcENvZGVI YW5kbGUpOw0KPj4tICBIaWlGcmVlT3BDb2RlSGFuZGxlIChFbmRPcENvZGVIYW5kbGUpOw0KPj4t DQo+Pi0gIC8vDQo+Pi0gIC8vIENsZWFyIEVudmlyb25tZW50Lg0KPj4tICAvLw0KPj4tICBpZiAo VmFyICE9IE5VTEwpIHsNCj4+LSAgICBGcmVlUG9vbCAoVmFyKTsNCj4+LSAgfQ0KPj4tICBGcmVl UG9vbCAoT3JkZXIpOw0KPj4tfQ0KPj4tDQo+Pi0NCj4+LS8qKg0KPj4tICBEaXNwbGF5IHRoZSBm b3JiaWQgbG9hZCBkZXZpY2UgcGF0aCBsaXN0IChtQWNjZXNzSW5mby5Mb2FkRm9yYmlkKS4NCj4+ LQ0KPj4tKiovDQo+Pi1WT0lEDQo+Pi1EaXNwbGF5TG9hZEZvcmJpZCAoDQo+Pi0gIFZPSUQNCj4+ LSAgKQ0KPj4tew0KPj4tICBVSU5UTiAgICAgICAgICAgICAgICAgICAgIE9mZnNldDsNCj4+LSAg VUlOVE4gICAgICAgICAgICAgICAgICAgICBEUFNpemU7DQo+Pi0gIFVJTlROICAgICAgICAgICAg ICAgICAgICAgSW5kZXg7DQo+Pi0gIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAgKkRwOw0KPj4t ICBWT0lEICAgICAgICAgICAgICAgICAgICAgICpTdGFydE9wQ29kZUhhbmRsZTsNCj4+LSAgVk9J RCAgICAgICAgICAgICAgICAgICAgICAqRW5kT3BDb2RlSGFuZGxlOw0KPj4tICBFRklfSUZSX0dV SURfTEFCRUwgICAgICAgICpTdGFydExhYmVsOw0KPj4tICBFRklfSUZSX0dVSURfTEFCRUwgICAg ICAgICpFbmRMYWJlbDsNCj4+LQ0KPj4tICAvLw0KPj4tICAvLyBJbml0aWFsaXplIHRoZSBjb250 YWluZXIgZm9yIGR5bmFtaWMgb3Bjb2Rlcy4NCj4+LSAgLy8NCj4+LSAgU3RhcnRPcENvZGVIYW5k bGUgPSBIaWlBbGxvY2F0ZU9wQ29kZUhhbmRsZSAoKTsNCj4+LSAgQVNTRVJUIChTdGFydE9wQ29k ZUhhbmRsZSAhPSBOVUxMKTsNCj4+LQ0KPj4tICBFbmRPcENvZGVIYW5kbGUgPSBIaWlBbGxvY2F0 ZU9wQ29kZUhhbmRsZSAoKTsNCj4+LSAgQVNTRVJUIChFbmRPcENvZGVIYW5kbGUgIT0gTlVMTCk7 DQo+Pi0NCj4+LSAgLy8NCj4+LSAgLy8gQ3JlYXRlIEhpaSBFeHRlbmQgTGFiZWwgT3BDb2RlLg0K Pj4tICAvLw0KPj4tICBTdGFydExhYmVsID0gKEVGSV9JRlJfR1VJRF9MQUJFTCAqKSBIaWlDcmVh dGVHdWlkT3BDb2RlICgNCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBTdGFydE9wQ29kZUhhbmRsZSwNCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAmZ0VmaUlmclRpYW5vR3VpZCwNCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBOVUxMLA0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHNpemVvZiAoRUZJX0lGUl9HVUlEX0xBQkVMKQ0KPj4tICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICk7DQo+Pi0gIFN0YXJ0TGFiZWwtPkV4dGVuZE9wQ29kZSAg PSBFRklfSUZSX0VYVEVORF9PUF9MQUJFTDsNCj4+LSAgU3RhcnRMYWJlbC0+TnVtYmVyICAgICAg ICA9IExBQkxFX0ZPUkJJRF9MT0FEX0ZVTkM7DQo+Pi0NCj4+LSAgRW5kTGFiZWwgPSAoRUZJX0lG Ul9HVUlEX0xBQkVMICopIEhpaUNyZWF0ZUd1aWRPcENvZGUgKA0KPj4tICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBFbmRPcENvZGVIYW5kbGUsDQo+Pi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICZnRWZpSWZyVGlhbm9HdWlkLA0KPj4tICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLA0KPj4tICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzaXplb2YgKEVGSV9JRlJfR1VJRF9MQUJFTCkNCj4+LSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4+LSAgRW5kTGFiZWwtPkV4dGVu ZE9wQ29kZSAgPSBFRklfSUZSX0VYVEVORF9PUF9MQUJFTDsNCj4+LSAgRW5kTGFiZWwtPk51bWJl ciAgICAgICAgPSBMQUJFTF9FTkQ7DQo+Pi0NCj4+LSAgLy8NCj4+LSAgLy8gQWRkIGVhY2ggZm9y YmlkIGxvYWQgZHJpdmVycy4NCj4+LSAgLy8NCj4+LSAgT2Zmc2V0ICA9IDA7DQo+Pi0gIEluZGV4 ICAgPSAwOw0KPj4tICB3aGlsZSAoT2Zmc2V0IDwgbUFjY2Vzc0luZm8uTG9hZEZvcmJpZExlbikg ew0KPj4tICAgIERwICAgICAgPSAoRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICopIChtQWNjZXNz SW5mby5Mb2FkRm9yYmlkICsNCj4+T2Zmc2V0KTsNCj4+LSAgICBEUFNpemUgID0gR2V0RGV2aWNl UGF0aFNpemUgKERwKTsNCj4+LSAgICBBZGREZXZpY2VQYXRoICgNCj4+LSAgICAgIEtFWV9NT0RJ RllfVVNFUiB8IEtFWV9NT0RJRllfQVBfRFAgfA0KPktFWV9MT0FEX0ZPUkJJRF9NT0RJRlkNCj4+ fCBJbmRleCwNCj4+LSAgICAgIERwLA0KPj4tICAgICAgU3RhcnRPcENvZGVIYW5kbGUNCj4+LSAg ICAgICk7DQo+Pi0gICAgSW5kZXgrKzsNCj4+LSAgICBPZmZzZXQgKz0gRFBTaXplOw0KPj4tICB9 DQo+Pi0NCj4+LSAgSGlpVXBkYXRlRm9ybSAoDQo+Pi0gICAgbUNhbGxiYWNrSW5mby0+SGlpSGFu ZGxlLCAvLyBISUkgaGFuZGxlDQo+Pi0gICAgJmdVc2VyUHJvZmlsZU1hbmFnZXJHdWlkLCAvLyBG b3Jtc2V0IEdVSUQNCj4+LSAgICBGT1JNSURfRk9SQklEX0xPQURfRFAsICAgIC8vIEZvcm0gSUQN Cj4+LSAgICBTdGFydE9wQ29kZUhhbmRsZSwgICAgICAgIC8vIExhYmVsIGZvciB3aGVyZSB0byBp bnNlcnQgb3Bjb2Rlcw0KPj4tICAgIEVuZE9wQ29kZUhhbmRsZSAgICAgICAgICAgLy8gUmVwbGFj ZSBkYXRhDQo+Pi0gICAgKTsNCj4+LQ0KPj4tICBIaWlGcmVlT3BDb2RlSGFuZGxlIChTdGFydE9w Q29kZUhhbmRsZSk7DQo+Pi0gIEhpaUZyZWVPcENvZGVIYW5kbGUgKEVuZE9wQ29kZUhhbmRsZSk7 DQo+Pi19DQo+Pi0NCj4+LQ0KPj4tLyoqDQo+Pi0gIERpc3BsYXkgdGhlIHBlcm1pdCBjb25uZWN0 IGRldmljZSBwYXRoLg0KPj4tDQo+Pi0qKi8NCj4+LVZPSUQNCj4+LURpc3BsYXlDb25uZWN0UGVy bWl0ICgNCj4+LSAgVk9JRA0KPj4tICApDQo+Pi17DQo+Pi0gIC8vDQo+Pi0gIC8vIE5vdGU6DQo+ Pi0gIC8vIEFzIG5vIGFyY2hpdGVjdCBwcm90b2NvbC9pbnRlcmZhY2UgdG8gYmUgY2FsbGVkIGlu IENvbm5lY3RDb250cm9sbGVyKCkNCj4+LSAgLy8gdG8gdmVyaWZ5IHRoZSBkZXZpY2UgcGF0aCwg anVzdCBhZGQgYSBwbGFjZSBob2xkZXIgZm9yIHBlcm1pdHRlZCBjb25uZWN0DQo+Pi0gIC8vIGRl dmljZSBwYXRoLg0KPj4tICAvLw0KPj4tfQ0KPj4tDQo+Pi0NCj4+LS8qKg0KPj4tICBEaXNwbGF5 IHRoZSBmb3JiaWQgY29ubmVjdCBkZXZpY2UgcGF0aCBsaXN0Lg0KPj4tDQo+Pi0qKi8NCj4+LVZP SUQNCj4+LURpc3BsYXlDb25uZWN0Rm9yYmlkICgNCj4+LSAgVk9JRA0KPj4tICApDQo+Pi17DQo+ Pi0gIC8vDQo+Pi0gIC8vIE5vdGU6DQo+Pi0gIC8vIEFzIG5vIGFyY2hpdGVjdCBwcm90b2NvbC9p bnRlcmZhY2UgdG8gYmUgY2FsbGVkIGluIENvbm5lY3RDb250cm9sbGVyKCkNCj4+LSAgLy8gdG8g dmVyaWZ5IHRoZSBkZXZpY2UgcGF0aCwganVzdCBhZGQgYSBwbGFjZSBob2xkZXIgZm9yIGZvcmJp ZGRlbiBjb25uZWN0DQo+Pi0gIC8vIGRldmljZSBwYXRoLg0KPj4tICAvLw0KPj4tfQ0KPj4tDQo+ Pi0NCj4+LS8qKg0KPj4tICBEZWxldGUgdGhlIHNwZWNpZmllZCBkZXZpY2UgcGF0aCBieSBEcml2 ZXJJbmRleCBmcm9tIHRoZSBmb3JiaWQgZGV2aWNlDQo+cGF0aA0KPj4tICBsaXN0IChtQWNjZXNz SW5mby5Mb2FkRm9yYmlkKS4NCj4+LQ0KPj4tICBAcGFyYW1baW5dICBEcml2ZXJJbmRleCAgIFRo ZSBpbmRleCBvZiBkcml2ZXIgaW4gZm9yYmlkZGVuIGRldmljZSBwYXRoIGxpc3QuDQo+Pi0NCj4+ LSoqLw0KPj4tVk9JRA0KPj4tRGVsZXRlRnJvbUZvcmJpZExvYWQgKA0KPj4tICBJTiAgVUlOVDE2 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRHJpdmVySW5kZXgNCj4+LSAgKQ0K Pj4tew0KPj4tICBVSU5UTiAgICAgICAgICAgICAgICAgICAgIE9mZlNldDsNCj4+LSAgVUlOVE4g ICAgICAgICAgICAgICAgICAgICBEUFNpemU7DQo+Pi0gIFVJTlROICAgICAgICAgICAgICAgICAg ICAgT2ZmTGVuOw0KPj4tICBFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wgICpEcDsNCj4+LQ0KPj4t ICBPZmZTZXQgPSAwOw0KPj4tICAvLw0KPj4tICAvLyBGaW5kIHRoZSBzcGVjaWZpZWQgZGV2aWNl IHBhdGguDQo+Pi0gIC8vDQo+Pi0gIHdoaWxlICgoT2ZmU2V0IDwgbUFjY2Vzc0luZm8uTG9hZEZv cmJpZExlbikgJiYgKERyaXZlckluZGV4ID4gMCkpIHsNCj4+LSAgICBEcCAgICAgID0gKEVGSV9E RVZJQ0VfUEFUSF9QUk9UT0NPTCAqKSAobUFjY2Vzc0luZm8uTG9hZEZvcmJpZCArDQo+Pk9mZlNl dCk7DQo+Pi0gICAgRFBTaXplICA9IEdldERldmljZVBhdGhTaXplIChEcCk7DQo+Pi0gICAgT2Zm U2V0ICs9IERQU2l6ZTsNCj4+LSAgICBEcml2ZXJJbmRleC0tOw0KPj4tICB9DQo+Pi0NCj4+LSAg Ly8NCj4+LSAgLy8gU3BlY2lmaWVkIGRldmljZSBwYXRoIGZvdW5kLg0KPj4tICAvLw0KPj4tICBp ZiAoRHJpdmVySW5kZXggPT0gMCkgew0KPj4tICAgIERwICAgICAgPSAoRUZJX0RFVklDRV9QQVRI X1BST1RPQ09MICopIChtQWNjZXNzSW5mby5Mb2FkRm9yYmlkICsNCj4+T2ZmU2V0KTsNCj4+LSAg ICBEUFNpemUgID0gR2V0RGV2aWNlUGF0aFNpemUgKERwKTsNCj4+LSAgICBPZmZMZW4gID0gbUFj Y2Vzc0luZm8uTG9hZEZvcmJpZExlbiAtIE9mZlNldCAtIERQU2l6ZTsNCj4+LSAgICBpZiAoT2Zm TGVuID4gMCkgew0KPj4tICAgICAgQ29weU1lbSAoDQo+Pi0gICAgICAgIG1BY2Nlc3NJbmZvLkxv YWRGb3JiaWQgKyBPZmZTZXQsDQo+Pi0gICAgICAgIG1BY2Nlc3NJbmZvLkxvYWRGb3JiaWQgKyBP ZmZTZXQgKyBEUFNpemUsDQo+Pi0gICAgICAgIE9mZkxlbg0KPj4tICAgICAgICApOw0KPj4tICAg IH0NCj4+LSAgICBtQWNjZXNzSW5mby5Mb2FkRm9yYmlkTGVuIC09IERQU2l6ZTsNCj4+LSAgfQ0K Pj4tfQ0KPj4tDQo+Pi0NCj4+LS8qKg0KPj4tICBBZGQgdGhlIHNwZWNpZmllZCBkZXZpY2UgcGF0 aCBieSBEcml2ZXJJbmRleCB0byB0aGUgZm9yYmlkIGRldmljZSBwYXRoDQo+Pi0gIGxpc3QgKG1B Y2Nlc3NJbmZvLkxvYWRGb3JiaWQpLg0KPj4tDQo+Pi0gIEBwYXJhbVtpbl0gIERyaXZlckluZGV4 ICAgVGhlIGluZGV4IG9mIGRyaXZlciBzYXZlZCBpbiBkcml2ZXIgb3B0aW9ucy4NCj4+LQ0KPj4t KiovDQo+Pi1WT0lEDQo+Pi1BZGRUb0ZvcmJpZExvYWQgKA0KPj4tICBJTiAgVUlOVDE2ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRHJpdmVySW5kZXgNCj4+LSAgKQ0KPj4tew0K Pj4tICBVSU5UTiAgICAgICBEZXZpY2VQYXRoTGVuOw0KPj4tICBVSU5UOCAgICAgICAqVmFyOw0K Pj4tICBVSU5UOCAgICAgICAqVmFyUHRyOw0KPj4tICBVSU5UTiAgICAgICBOZXdMZW47DQo+Pi0g IFVJTlQ4ICAgICAgICpOZXdGTDsNCj4+LSAgQ0hBUjE2ICAgICAgVmFyTmFtZVsxM107DQo+Pi0N Cj4+LSAgLy8NCj4+LSAgLy8gR2V0IGxvYWRhYmxlIGRyaXZlciBkZXZpY2UgcGF0aC4NCj4+LSAg Ly8NCj4+LSAgVW5pY29kZVNQcmludCAgKFZhck5hbWUsIHNpemVvZiAoVmFyTmFtZSksIEwiRHJp dmVyJTA0eCIsIERyaXZlckluZGV4KTsNCj4+LSAgR2V0RWZpR2xvYmFsVmFyaWFibGUyIChWYXJO YW1lLCAoVk9JRCoqKSZWYXIsIE5VTEwpOw0KPj4tICBpZiAoVmFyID09IE5VTEwpIHsNCj4+LSAg ICByZXR1cm47DQo+Pi0gIH0NCj4+LQ0KPj4tICAvLw0KPj4tICAvLyBTYXZlIGZvcmJpZCBsb2Fk IGRyaXZlci4NCj4+LSAgLy8NCj4+LQ0KPj4tICBWYXJQdHIgPSBWYXI7DQo+Pi0gIC8vDQo+Pi0g IC8vIFNraXAgYXR0cmlidXRlLg0KPj4tICAvLw0KPj4tICBWYXJQdHIgKz0gc2l6ZW9mIChVSU5U MzIpOw0KPj4tDQo+Pi0gIERldmljZVBhdGhMZW4gPSAqKFVJTlQxNiAqKSBWYXJQdHI7DQo+Pi0g IC8vDQo+Pi0gIC8vIFNraXAgZGV2aWNlIHBhdGggbGVuZ3RoLg0KPj4tICAvLw0KPj4tICBWYXJQ dHIgKz0gc2l6ZW9mIChVSU5UMTYpOw0KPj4tDQo+Pi0gIC8vDQo+Pi0gIC8vIFNraXAgZGVzY3Jp cHRpb24gc3RyaW5nLg0KPj4tICAvLw0KPj4tICBWYXJQdHIgKz0gU3RyU2l6ZSAoKFVJTlQxNiAq KSBWYXJQdHIpOw0KPj4tDQo+Pi0gIE5ld0xlbiAgPSBtQWNjZXNzSW5mby5Mb2FkRm9yYmlkTGVu ICsgRGV2aWNlUGF0aExlbjsNCj4+LSAgTmV3RkwgICA9IEFsbG9jYXRlWmVyb1Bvb2wgKE5ld0xl bik7DQo+Pi0gIGlmIChOZXdGTCA9PSBOVUxMKSB7DQo+Pi0gICAgRnJlZVBvb2wgKFZhcik7DQo+ Pi0gICAgcmV0dXJuIDsNCj4+LSAgfQ0KPj4tDQo+Pi0gIGlmIChtQWNjZXNzSW5mby5Mb2FkRm9y YmlkTGVuID4gMCkgew0KPj4tICAgIENvcHlNZW0gKE5ld0ZMLCBtQWNjZXNzSW5mby5Mb2FkRm9y YmlkLA0KPm1BY2Nlc3NJbmZvLkxvYWRGb3JiaWRMZW4pOw0KPj4tICAgIEZyZWVQb29sIChtQWNj ZXNzSW5mby5Mb2FkRm9yYmlkKTsNCj4+LSAgfQ0KPj4tDQo+Pi0gIENvcHlNZW0gKE5ld0ZMICsg bUFjY2Vzc0luZm8uTG9hZEZvcmJpZExlbiwgVmFyUHRyLCBEZXZpY2VQYXRoTGVuKTsNCj4+LSAg bUFjY2Vzc0luZm8uTG9hZEZvcmJpZExlbiA9IE5ld0xlbjsNCj4+LSAgbUFjY2Vzc0luZm8uTG9h ZEZvcmJpZCAgICA9IE5ld0ZMOw0KPj4tICBGcmVlUG9vbCAoVmFyKTsNCj4+LX0NCj4+LQ0KPj4t DQo+PmRpZmYgLS1naXQNCj4+YS9TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vVXNlclBy b2ZpbGVNYW5hZ2VyRHhlL01vZGlmeUlkZW50aXR5UG8NCj5saQ0KPj5jeS5jDQo+PmIvU2VjdXJp dHlQa2cvVXNlcklkZW50aWZpY2F0aW9uL1VzZXJQcm9maWxlTWFuYWdlckR4ZS9Nb2RpZnlJZGVu dGl0eVANCj5vbGkNCj4+Y3kuYw0KPj5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCj4+aW5kZXgg NjAyYzRhODM5Ny4uMDAwMDAwMDAwMA0KPj4tLS0NCj4+YS9TZWN1cml0eVBrZy9Vc2VySWRlbnRp ZmljYXRpb24vVXNlclByb2ZpbGVNYW5hZ2VyRHhlL01vZGlmeUlkZW50aXR5UG8NCj5saQ0KPj5j eS5jDQo+PisrKyAvZGV2L251bGwNCj4+QEAgLTEsNTE2ICswLDAgQEANCj4+LS8qKiBAZmlsZQ0K Pj4tICBUaGUgZnVuY3Rpb25zIGZvciBpZGVudGlmaWNhdGlvbiBwb2xpY3kgbW9kaWZpY2F0aW9u Lg0KPj4tDQo+Pi1Db3B5cmlnaHQgKGMpIDIwMDkgLSAyMDE4LCBJbnRlbCBDb3Jwb3JhdGlvbi4g QWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+Pi1UaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBh bnlpbmcgbWF0ZXJpYWxzDQo+Pi1hcmUgbGljZW5zZWQgYW5kIG1hZGUgYXZhaWxhYmxlIHVuZGVy IHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgQlNEDQo+PkxpY2Vuc2UNCj4+LXdoaWNo IGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLiAgVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGlj ZW5zZSBtYXkgYmUNCj4+Zm91bmQgYXQNCj4+LWh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNl cy9ic2QtbGljZW5zZS5waHANCj4+LQ0KPj4tVEhFIFBST0dSQU0gSVMgRElTVFJJQlVURUQgVU5E RVIgVEhFIEJTRCBMSUNFTlNFIE9OIEFOICJBUyBJUyINCj5CQVNJUywNCj4+LVdJVEhPVVQgV0FS UkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUg0KPj5FWFBSRVNT IE9SIElNUExJRUQuDQo+Pi0NCj4+LSoqLw0KPj4tDQo+Pi0jaW5jbHVkZSAiVXNlclByb2ZpbGVN YW5hZ2VyLmgiDQo+Pi0NCj4+LQ0KPj4tLyoqDQo+Pi0gIFZlcmlmeSB0aGUgbmV3IGlkZW50aXR5 IHBvbGljeSBpbiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbi4gVGhlIHNhbWUNCj4+Y3JlZGVu dGlhbA0KPj4tICBwcm92aWRlciBjYW4ndCBhcHBlYXIgdHdpY2UgaW4gb25lIGlkZW50aXR5IHBv bGljeS4NCj4+LQ0KPj4tICBAcGFyYW1baW5dIE5ld0d1aWQgICAgICAgUG9pbnRzIHRvIHRoZSBj cmVkZW50aWFsIHByb3ZpZGVyIGd1aWQuDQo+Pi0NCj4+LSAgQHJldHZhbCBUUlVFICAgICBUaGUg TmV3R3VpZCB3YXMgZm91bmQgaW4gdGhlIGlkZW50aXR5IHBvbGljeS4NCj4+LSAgQHJldHZhbCBG QUxTRSAgICBUaGUgTmV3R3VpZCB3YXMgbm90IGZvdW5kLg0KPj4tDQo+Pi0qKi8NCj4+LUJPT0xF QU4NCj4+LVByb3ZpZGVyQWxyZWFkeUluUG9saWN5ICgNCj4+LSAgSU4gRUZJX0dVSUQgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpOZXdHdWlkDQo+Pi0gICkNCj4+LXsNCj4+ LSAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgT2Zmc2V0Ow0KPj4tICBFRklfVVNFUl9J TkZPX0lERU5USVRZX1BPTElDWSAqSWRlbnRpdHk7DQo+Pi0gIEVGSV9JTlBVVF9LRVkgICAgICAg ICAgICAgICAgIEtleTsNCj4+LQ0KPj4tICBPZmZzZXQgPSAwOw0KPj4tICB3aGlsZSAoT2Zmc2V0 IDwgbVVzZXJJbmZvLk5ld0lkZW50aXR5UG9saWN5TGVuKSB7DQo+Pi0gICAgSWRlbnRpdHkgPSAo RUZJX1VTRVJfSU5GT19JREVOVElUWV9QT0xJQ1kgKikNCj4+KG1Vc2VySW5mby5OZXdJZGVudGl0 eVBvbGljeSArIE9mZnNldCk7DQo+Pi0gICAgaWYgKElkZW50aXR5LT5UeXBlID09IEVGSV9VU0VS X0lORk9fSURFTlRJVFlfQ1JFREVOVElBTF9QUk9WSURFUikNCj57DQo+Pi0gICAgICBpZiAoQ29t cGFyZUd1aWQgKE5ld0d1aWQsIChFRklfR1VJRCAqKSAoSWRlbnRpdHkgKyAxKSkpIHsNCj4+LSAg ICAgICAgQ3JlYXRlUG9wVXAgKA0KPj4tICAgICAgICAgIEVGSV9MSUdIVEdSQVkgfCBFRklfQkFD S0dST1VORF9CTFVFLA0KPj4tICAgICAgICAgICZLZXksDQo+Pi0gICAgICAgICAgTCJUaGlzIENy ZWRlbnRpYWwgUHJvdmlkZXIgQXJlIEFscmVhZHkgVXNlZCEiLA0KPj4tICAgICAgICAgIEwiIiwN Cj4+LSAgICAgICAgICBMIlByZXNzIEFueSBLZXkgdG8gQ29udGludWUgLi4uIiwNCj4+LSAgICAg ICAgICBOVUxMDQo+Pi0gICAgICAgICAgKTsNCj4+LSAgICAgICAgcmV0dXJuIFRSVUU7DQo+Pi0g ICAgICB9DQo+Pi0gICAgfQ0KPj4tICAgIE9mZnNldCArPSBJZGVudGl0eS0+TGVuZ3RoOw0KPj4t ICB9DQo+Pi0NCj4+LSAgcmV0dXJuIEZBTFNFOw0KPj4tfQ0KPj4tDQo+Pi0NCj4+LS8qKg0KPj4t ICBBZGQgdGhlIHVzZXIncyBjcmVkZW50aWFsIHJlY29yZCBpbiB0aGUgcHJvdmlkZXIuDQo+Pi0N Cj4+LSAgQHBhcmFtW2luXSAgSWRlbnRpdHkgICAgIElkZW50aXR5IHBvbGljeSBpdGVtIGluY2x1 ZGluZyBjcmVkZW50aWFsIHByb3ZpZGVyLg0KPj4tICBAcGFyYW1baW5dICBVc2VyICAgICAgICAg UG9pbnRzIHRvIHVzZXIgcHJvZmlsZS4NCj4+LQ0KPj4tICBAcmV0dmFsIEVGSV9TVUNDRVNTICAg ICAgQWRkIG9yIGRlbGV0ZSByZWNvcmQgc3VjY2Vzc2Z1bGx5Lg0KPj4tICBAcmV0dmFsIE90aGVy cyAgICAgICAgICAgRmFpbCB0byBhZGQgb3IgZGVsZXRlIHJlY29yZC4NCj4+LQ0KPj4tKiovDQo+ Pi1FRklfU1RBVFVTDQo+Pi1FbnJvbGxVc2VyT25Qcm92aWRlciAoDQo+Pi0gIElOICBFRklfVVNF Ul9JTkZPX0lERU5USVRZX1BPTElDWSAgICAgICAgICAgICAgKklkZW50aXR5LA0KPj4tICBJTiAg RUZJX1VTRVJfUFJPRklMRV9IQU5ETEUgICAgICAgICAgICAgICAgICAgIFVzZXINCj4+LSAgKQ0K Pj4tew0KPj4tICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXg7DQo+Pi0gIEVG SV9VU0VSX0NSRURFTlRJQUwyX1BST1RPQ09MICAqVXNlckNyZWRlbnRpYWw7DQo+Pi0NCj4+LSAg Ly8NCj4+LSAgLy8gRmluZCB0aGUgc3BlY2lmaWVkIGNyZWRlbnRpYWwgcHJvdmlkZXIuDQo+Pi0g IC8vDQo+Pi0gIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IG1Qcm92aWRlckluZm8tPkNvdW50OyBJ bmRleCsrKSB7DQo+Pi0gICAgVXNlckNyZWRlbnRpYWwgPSBtUHJvdmlkZXJJbmZvLT5Qcm92aWRl cltJbmRleF07DQo+Pi0gICAgaWYgKENvbXBhcmVHdWlkICgoRUZJX0dVSUQgKikoSWRlbnRpdHkg KyAxKSwgJlVzZXJDcmVkZW50aWFsLQ0KPj5JZGVudGlmaWVyKSkNCj4+ew0KPj4tICAgICAgcmV0 dXJuIFVzZXJDcmVkZW50aWFsLT5FbnJvbGwgKFVzZXJDcmVkZW50aWFsLCBVc2VyKTsNCj4+LSAg ICB9DQo+Pi0gIH0NCj4+LQ0KPj4tICByZXR1cm4gRUZJX05PVF9GT1VORDsNCj4+LX0NCj4+LQ0K Pj4tDQo+Pi0vKioNCj4+LSAgRGVsZXRlIHRoZSBVc2VyJ3MgY3JlZGVudGlhbCByZWNvcmQgb24g dGhlIHByb3ZpZGVyLg0KPj4tDQo+Pi0gIEBwYXJhbVtpbl0gIElkZW50aXR5ICAgICBQb2ludCB0 bw0KPj5FRklfVVNFUl9JTkZPX0lERU5USVRZX0NSRURFTlRJQUxfUFJPVklERVIgdXNlciBpbmZv Lg0KPj4tICBAcGFyYW1baW5dICBVc2VyICAgICAgICAgUG9pbnRzIHRvIHVzZXIgcHJvZmlsZS4N Cj4+LQ0KPj4tICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgRGVsZXRlIFVzZXIncyBjcmVkZW50 aWFsIHJlY29yZCBzdWNjZXNzZnVsbHkuDQo+Pi0gIEByZXR2YWwgT3RoZXJzICAgICAgICAgICBG YWlsIHRvIGFkZCBvciBkZWxldGUgcmVjb3JkLg0KPj4tDQo+Pi0qKi8NCj4+LUVGSV9TVEFUVVMN Cj4+LURlbGV0ZVVzZXJPblByb3ZpZGVyICgNCj4+LSAgSU4gIEVGSV9VU0VSX0lORk9fSURFTlRJ VFlfUE9MSUNZICAgICAgICAgICAgICAqSWRlbnRpdHksDQo+Pi0gIElOICBFRklfVVNFUl9QUk9G SUxFX0hBTkRMRSAgICAgICAgICAgICAgICAgICAgVXNlcg0KPj4tICApDQo+Pi17DQo+Pi0gIFVJ TlROICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleDsNCj4+LSAgRUZJX1VTRVJfQ1JFREVO VElBTDJfUFJPVE9DT0wgICpVc2VyQ3JlZGVudGlhbDsNCj4+LQ0KPj4tICAvLw0KPj4tICAvLyBG aW5kIHRoZSBzcGVjaWZpZWQgY3JlZGVudGlhbCBwcm92aWRlci4NCj4+LSAgLy8NCj4+LSAgZm9y IChJbmRleCA9IDA7IEluZGV4IDwgbVByb3ZpZGVySW5mby0+Q291bnQ7IEluZGV4KyspIHsNCj4+ LSAgICBVc2VyQ3JlZGVudGlhbCA9IG1Qcm92aWRlckluZm8tPlByb3ZpZGVyW0luZGV4XTsNCj4+ LSAgICBpZiAoQ29tcGFyZUd1aWQgKChFRklfR1VJRCAqKShJZGVudGl0eSArIDEpLCAmVXNlckNy ZWRlbnRpYWwtDQo+PklkZW50aWZpZXIpKQ0KPj57DQo+Pi0gICAgICByZXR1cm4gVXNlckNyZWRl bnRpYWwtPkRlbGV0ZSAoVXNlckNyZWRlbnRpYWwsIFVzZXIpOw0KPj4tICAgIH0NCj4+LSAgfQ0K Pj4tDQo+Pi0gIHJldHVybiBFRklfTk9UX0ZPVU5EOw0KPj4tfQ0KPj4tDQo+Pi0NCj4+LS8qKg0K Pj4tICBEZWxldGUgVXNlcidzIGNyZWRlbnRhbCBmcm9tIGFsbCB0aGUgcHJvdmlkZXJzIHRoYXQg ZXhpc3QgaW4gVXNlcidzIGlkZW50aXR5DQo+PnBvbGljeS4NCj4+LQ0KPj4tICBAcGFyYW1baW5d ICBJZGVudGl0eVBvbGljeSAgICAgUG9pbnQgdG8gVXNlcidzIGlkZW50aXR5IHBvbGljeS4NCj4+ LSAgQHBhcmFtW2luXSAgSWRlbnRpdHlQb2xpY3lMZW4gIFRoZSBsZW5ndGggb2YgdGhlIGlkZW50 aXR5IHBvbGljeS4NCj4+LSAgQHBhcmFtW2luXSAgVXNlciAgICAgICAgICAgICAgIFBvaW50cyB0 byB1c2VyIHByb2ZpbGUuDQo+Pi0NCj4+LSoqLw0KPj4tVk9JRA0KPj4tRGVsZXRlQ3JlZGVudGlh bEZyb21Qcm92aWRlcnMgKA0KPj4tICBJTiAgICAgVUlOVDggICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICpJZGVudGl0eVBvbGljeSwNCj4+LSAgSU4gICAgIFVJTlROICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgSWRlbnRpdHlQb2xpY3lMZW4sDQo+Pi0gIElOICAgICBFRklf VVNFUl9QUk9GSUxFX0hBTkRMRSAgICAgICAgICAgICAgIFVzZXINCj4+LSAgKQ0KPj4tew0KPj4t ICBFRklfVVNFUl9JTkZPX0lERU5USVRZX1BPTElDWSAgICAqSWRlbnRpdHk7DQo+Pi0gIFVJTlRO ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9mZnNldDsNCj4+LQ0KPj4tICBPZmZzZXQgPSAw Ow0KPj4tICB3aGlsZSAoT2Zmc2V0IDwgSWRlbnRpdHlQb2xpY3lMZW4pIHsNCj4+LSAgICBJZGVu dGl0eSA9IChFRklfVVNFUl9JTkZPX0lERU5USVRZX1BPTElDWSAqKSAoSWRlbnRpdHlQb2xpY3kg KyBPZmZzZXQpOw0KPj4tICAgIGlmIChJZGVudGl0eS0+VHlwZSA9PSBFRklfVVNFUl9JTkZPX0lE RU5USVRZX0NSRURFTlRJQUxfUFJPVklERVIpDQo+ew0KPj4tICAgICAgLy8NCj4+LSAgICAgIC8v IERlbGV0ZSB0aGUgdXNlciBvbiB0aGlzIHByb3ZpZGVyLg0KPj4tICAgICAgLy8NCj4+LSAgICAg IERlbGV0ZVVzZXJPblByb3ZpZGVyIChJZGVudGl0eSwgVXNlcik7DQo+Pi0gICAgfQ0KPj4tICAg IE9mZnNldCArPSBJZGVudGl0eS0+TGVuZ3RoOw0KPj4tICB9DQo+Pi0NCj4+LX0NCj4+LQ0KPj4t DQo+Pi0vKioNCj4+LSAgUmVtb3ZlIHRoZSBwcm92aWRlciBzcGVjaWZpZWQgYnkgT2Zmc2V0IGZy b20gdGhlIG5ldyB1c2VyIGlkZW50aWZpY2F0aW9uDQo+PnJlY29yZC4NCj4+LQ0KPj4tICBAcGFy YW1baW5dICBJZGVudGl0eVBvbGljeSAgICBQb2ludCB0byB1c2VyIGlkZW50aXR5IGl0ZW0gaW4g bmV3DQo+aWRlbnRpZmljYXRpb24NCj4+cG9saWN5Lg0KPj4tICBAcGFyYW1baW5dICBPZmZzZXQg ICAgICAgICAgICBUaGUgaXRlbSBvZmZzZXQgaW4gdGhlIG5ldyBpZGVudGlmaWNhdGlvbiBwb2xp Y3kuDQo+Pi0NCj4+LSoqLw0KPj4tVk9JRA0KPj4tRGVsZXRlUHJvdmlkZXJGcm9tUG9saWN5ICgN Cj4+LSAgSU4gICAgIEVGSV9VU0VSX0lORk9fSURFTlRJVFlfUE9MSUNZICAgICAgICAgKklkZW50 aXR5UG9saWN5LA0KPj4tICBJTiAgICAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBPZmZzZXQNCj4+LSAgKQ0KPj4tew0KPj4tICBVSU5UTiAgICAgICAgICAgICAgICAgICAg ICAgICBSZW1haW5pbmdMZW47DQo+Pi0gIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgIERl bGV0ZUxlbjsNCj4+LQ0KPj4tICBpZiAoSWRlbnRpdHlQb2xpY3ktPkxlbmd0aCA9PSBtVXNlcklu Zm8uTmV3SWRlbnRpdHlQb2xpY3lMZW4pIHsNCj4+LSAgICAvLw0KPj4tICAgIC8vIE9ubHkgb25l IGNyZWRlbnRpYWwgcHJvdmlkZXIgaW4gdGhlIGlkZW50aWZpY2F0aW9uIHBvbGljeS4NCj4+LSAg ICAvLyBTZXQgdGhlIG5ldyBwb2xpY3kgdG8gYmUgVFJVRSBhZnRlciByZW1vdmVkIHRoZSBwcm92 aWRlci4NCj4+LSAgICAvLw0KPj4tICAgIElkZW50aXR5UG9saWN5LT5UeXBlICAgICAgICAgICA9 IEVGSV9VU0VSX0lORk9fSURFTlRJVFlfVFJVRTsNCj4+LSAgICBJZGVudGl0eVBvbGljeS0+TGVu Z3RoICAgICAgICAgPSBzaXplb2YgKEVGSV9VU0VSX0lORk9fSURFTlRJVFlfUE9MSUNZKTsNCj4+ LSAgICBtVXNlckluZm8uTmV3SWRlbnRpdHlQb2xpY3lMZW4gPSBJZGVudGl0eVBvbGljeS0+TGVu Z3RoOw0KPj4tICAgIHJldHVybiA7DQo+Pi0gIH0NCj4+LQ0KPj4tICBEZWxldGVMZW4gPSBJZGVu dGl0eVBvbGljeS0+TGVuZ3RoICsNCj4+c2l6ZW9mKEVGSV9VU0VSX0lORk9fSURFTlRJVFlfUE9M SUNZKTsNCj4+LSAgaWYgKChPZmZzZXQgKyBJZGVudGl0eVBvbGljeS0+TGVuZ3RoKSAhPSBtVXNl ckluZm8uTmV3SWRlbnRpdHlQb2xpY3lMZW4pIHsNCj4+LSAgICAvLw0KPj4tICAgIC8vIFRoaXMg cHJvdmlkZXIgaXMgbm90IHRoZSBsYXN0IGl0ZW0gaW4gdGhlIGlkZW50aWZpY2F0aW9uIHBvbGlj eSwgZGVsZXRlIGl0DQo+YW5kDQo+PnRoZSBjb25uZWN0b3IuDQo+Pi0gICAgLy8NCj4+LSAgICBS ZW1haW5pbmdMZW4gPSBtVXNlckluZm8uTmV3SWRlbnRpdHlQb2xpY3lMZW4gLSBPZmZzZXQgLSBE ZWxldGVMZW47DQo+Pi0gICAgQ29weU1lbSAoKFVJTlQ4ICopIElkZW50aXR5UG9saWN5LCAoVUlO VDggKikgSWRlbnRpdHlQb2xpY3kgKyBEZWxldGVMZW4sDQo+PlJlbWFpbmluZ0xlbik7DQo+Pi0g IH0NCj4+LSAgbVVzZXJJbmZvLk5ld0lkZW50aXR5UG9saWN5TGVuIC09IERlbGV0ZUxlbjsNCj4+ LX0NCj4+LQ0KPj4tDQo+Pi0vKioNCj4+LSAgQWRkIGEgbmV3IHByb3ZpZGVyIHRvIHRoZSBtVXNl ckluZm8uTmV3SWRlbnRpdHlQb2xpY3kuDQo+Pi0NCj4+LSAgSXQgaXMgaW52b2tlZCB3aGVuICdh ZGQgb3B0aW9uJyBpbiBVSSBpcyBwcmVzc2VkLg0KPj4tDQo+Pi0gIEBwYXJhbVtpbl0gTmV3R3Vp ZCAgICAgICBQb2ludHMgdG8gdGhlIGNyZWRlbnRpYWwgcHJvdmlkZXIgZ3VpZC4NCj4+LQ0KPj4t KiovDQo+Pi1WT0lEDQo+Pi1BZGRQcm92aWRlclRvUG9saWN5ICgNCj4+LSAgSU4gIEVGSV9HVUlE ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpOZXdHdWlkDQo+Pi0gICkNCj4+LXsN Cj4+LSAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgKk5ld1BvbGljeUluZm87DQo+Pi0g IFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgIE5ld1BvbGljeUluZm9MZW47DQo+Pi0gIEVG SV9VU0VSX0lORk9fSURFTlRJVFlfUE9MSUNZICpQb2xpY3k7DQo+Pi0NCj4+LSAgLy8NCj4+LSAg Ly8gQWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgbmV3IGlkZW50aXR5IHBvbGljeS4NCj4+LSAgLy8N Cj4+LSAgTmV3UG9saWN5SW5mb0xlbiA9IG1Vc2VySW5mby5OZXdJZGVudGl0eVBvbGljeUxlbiAr IHNpemVvZg0KPj4oRUZJX1VTRVJfSU5GT19JREVOVElUWV9QT0xJQ1kpICsgc2l6ZW9mIChFRklf R1VJRCk7DQo+Pi0gIGlmIChtVXNlckluZm8uTmV3SWRlbnRpdHlQb2xpY3lMZW4gPiAwKSB7DQo+ Pi0gICAgLy8NCj4+LSAgICAvLyBJdCBpcyBub3QgdGhlIGZpcnN0IHByb3ZpZGVyIGluIHRoZSBw b2xpY3kuIEFkZCBhIGNvbm5lY3RvciBiZWZvcmUgcHJvdmlkZXIuDQo+Pi0gICAgLy8NCj4+LSAg ICBOZXdQb2xpY3lJbmZvTGVuICs9IHNpemVvZiAoRUZJX1VTRVJfSU5GT19JREVOVElUWV9QT0xJ Q1kpOw0KPj4tICB9DQo+Pi0gIE5ld1BvbGljeUluZm8gPSBBbGxvY2F0ZVplcm9Qb29sIChOZXdQ b2xpY3lJbmZvTGVuKTsNCj4+LSAgaWYgKE5ld1BvbGljeUluZm8gPT0gTlVMTCkgew0KPj4tICAg IHJldHVybiA7DQo+Pi0gIH0NCj4+LQ0KPj4tICBOZXdQb2xpY3lJbmZvTGVuID0gMDsNCj4+LSAg aWYgKG1Vc2VySW5mby5OZXdJZGVudGl0eVBvbGljeUxlbiA+IDApIHsNCj4+LSAgICAvLw0KPj4t ICAgIC8vIFNhdmUgb3JnaW5hbCBwb2xpY3kuDQo+Pi0gICAgLy8NCj4+LSAgICBDb3B5TWVtIChO ZXdQb2xpY3lJbmZvLCBtVXNlckluZm8uTmV3SWRlbnRpdHlQb2xpY3ksDQo+Pm1Vc2VySW5mby5O ZXdJZGVudGl0eVBvbGljeUxlbik7DQo+Pi0NCj4+LSAgICAvLw0KPj4tICAgIC8vIFNhdmUgbG9n aWNhbCBjb25uZWN0b3IuDQo+Pi0gICAgLy8NCj4+LSAgICBQb2xpY3kgPSAoRUZJX1VTRVJfSU5G T19JREVOVElUWV9QT0xJQ1kgKikgKE5ld1BvbGljeUluZm8gKw0KPj5tVXNlckluZm8uTmV3SWRl bnRpdHlQb2xpY3lMZW4pOw0KPj4tICAgIGlmIChtQ29ubmNldExvZ2ljYWwgPT0gMCkgew0KPj4t ICAgICAgUG9saWN5LT5UeXBlID0gRUZJX1VTRVJfSU5GT19JREVOVElUWV9BTkQ7DQo+Pi0gICAg fSBlbHNlIHsNCj4+LSAgICAgIFBvbGljeS0+VHlwZSA9IEVGSV9VU0VSX0lORk9fSURFTlRJVFlf T1I7DQo+Pi0gICAgfQ0KPj4tDQo+Pi0gICAgUG9saWN5LT5MZW5ndGggICA9IHNpemVvZiAoRUZJ X1VTRVJfSU5GT19JREVOVElUWV9QT0xJQ1kpOw0KPj4tICAgIE5ld1BvbGljeUluZm9MZW4gPSBt VXNlckluZm8uTmV3SWRlbnRpdHlQb2xpY3lMZW4gKyBQb2xpY3ktPkxlbmd0aDsNCj4+LSAgICBG cmVlUG9vbCAobVVzZXJJbmZvLk5ld0lkZW50aXR5UG9saWN5KTsNCj4+LSAgfQ0KPj4tDQo+Pi0g IC8vDQo+Pi0gIC8vIFNhdmUgY3JlZGVudGlhbCBwcm92aWRlci4NCj4+LSAgLy8NCj4+LSAgUG9s aWN5ID0gKEVGSV9VU0VSX0lORk9fSURFTlRJVFlfUE9MSUNZICopIChOZXdQb2xpY3lJbmZvICsN Cj4+TmV3UG9saWN5SW5mb0xlbik7DQo+Pi0gIFBvbGljeS0+TGVuZ3RoID0gc2l6ZW9mIChFRklf VVNFUl9JTkZPX0lERU5USVRZX1BPTElDWSkgKyBzaXplb2YNCj4+KEVGSV9HVUlEKTsNCj4+LSAg UG9saWN5LT5UeXBlICAgPSBFRklfVVNFUl9JTkZPX0lERU5USVRZX0NSRURFTlRJQUxfUFJPVklE RVI7DQo+Pi0gIENvcHlHdWlkICgoRUZJX0dVSUQgKikgKFBvbGljeSArIDEpLCBOZXdHdWlkKTsN Cj4+LSAgTmV3UG9saWN5SW5mb0xlbiArPSBQb2xpY3ktPkxlbmd0aDsNCj4+LQ0KPj4tICAvLw0K Pj4tICAvLyBVcGRhdGUgaWRlbnRpdHkgcG9saWN5IGNob2ljZS4NCj4+LSAgLy8NCj4+LSAgbVVz ZXJJbmZvLk5ld0lkZW50aXR5UG9saWN5ICAgICAgICAgPSBOZXdQb2xpY3lJbmZvOw0KPj4tICBt VXNlckluZm8uTmV3SWRlbnRpdHlQb2xpY3lMZW4gICAgICA9IE5ld1BvbGljeUluZm9MZW47DQo+ Pi0gIG1Vc2VySW5mby5OZXdJZGVudGl0eVBvbGljeU1vZGlmaWVkID0gVFJVRTsNCj4+LX0NCj4+ LQ0KPj4tDQo+Pi0vKioNCj4+LSAgVGhpcyBmdW5jdGlvbiByZXBsYWNlcyB0aGUgb2xkIGlkZW50 aXR5IHBvbGljeSB3aXRoIGEgbmV3IGlkZW50aXR5IHBvbGljeS4NCj4+LQ0KPj4tICBUaGlzIGZ1 bmN0aW9uIGRlbGV0ZSB0aGUgdXNlciBpZGVudGl0eSBwb2xpY3kgaW5mb3JtYXRpb24uDQo+Pi0g IElmIGVucm9sbCBuZXcgY3JlZGVudGlhbCBmYWlsZWQsIHJlY292ZXIgdGhlIG9sZCBpZGVudGl0 eSBwb2xpY3kuDQo+Pi0NCj4+LSAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgIE1vZGlmeSB1c2Vy IGlkZW50aXR5IHBvbGljeSBzdWNjZXNzZnVsbHkuDQo+Pi0gIEByZXR2YWwgT3RoZXJzICAgICAg ICAgICBGYWlsIHRvIG1vZGlmeSB1c2VyIGlkZW50aXR5IHBvbGljeS4NCj4+LQ0KPj4tKiovDQo+ Pi1FRklfU1RBVFVTDQo+Pi1VcGRhdGVDcmVkZW50aWFsUHJvdmlkZXIgKA0KPj4tICApDQo+Pi17 DQo+Pi0gIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4+LSAgRUZJX1VT RVJfSU5GT19JREVOVElUWV9QT0xJQ1kgKklkZW50aXR5Ow0KPj4tICBVSU5UTiAgICAgICAgICAg ICAgICAgICAgICAgICBPZmZzZXQ7DQo+Pi0NCj4+LSAgLy8NCj4+LSAgLy8gRGVsZXRlIHRoZSBv bGQgaWRlbnRpZmljYXRpb24gcG9saWN5Lg0KPj4tICAvLw0KPj4tICBEZWxldGVDcmVkZW50aWFs RnJvbVByb3ZpZGVycyAobVVzZXJJbmZvLklkZW50aXR5UG9saWN5LA0KPj5tVXNlckluZm8uSWRl bnRpdHlQb2xpY3lMZW4sIG1Nb2RpZnlVc2VyKTsNCj4+LQ0KPj4tICAvLw0KPj4tICAvLyBBZGQg dGhlIG5ldyBpZGVudGlmaWNhdGlvbiBwb2xpY3kuDQo+Pi0gIC8vDQo+Pi0gIE9mZnNldCAgPSAw Ow0KPj4tICB3aGlsZSAoT2Zmc2V0IDwgbVVzZXJJbmZvLk5ld0lkZW50aXR5UG9saWN5TGVuKSB7 DQo+Pi0gICAgSWRlbnRpdHkgPSAoRUZJX1VTRVJfSU5GT19JREVOVElUWV9QT0xJQ1kgKikNCj4+ KG1Vc2VySW5mby5OZXdJZGVudGl0eVBvbGljeSArIE9mZnNldCk7DQo+Pi0gICAgaWYgKElkZW50 aXR5LT5UeXBlID09IEVGSV9VU0VSX0lORk9fSURFTlRJVFlfQ1JFREVOVElBTF9QUk9WSURFUikN Cj57DQo+Pi0gICAgICAvLw0KPj4tICAgICAgLy8gRW5yb2xsIHRoZSB1c2VyIG9uIHRoaXMgcHJv dmlkZXINCj4+LSAgICAgIC8vDQo+Pi0gICAgICBTdGF0dXMgPSBFbnJvbGxVc2VyT25Qcm92aWRl ciAoSWRlbnRpdHksIG1Nb2RpZnlVc2VyKTsNCj4+LSAgICAgIGlmIChFRklfRVJST1IgKFN0YXR1 cykpIHsNCj4+LSAgICAgICAgLy8NCj4+LSAgICAgICAgLy8gRmFpbGVkIHRvIGVucm9sbCB0aGUg dXNlciBieSBuZXcgaWRlbnRpZmljYXRpb24gcG9saWN5Lg0KPj4tICAgICAgICAvLyBTbyByZW1v dmVkIHRoZSBjcmVkZW50aWFsIHByb3ZpZGVyIGZyb20gdGhlIGlkZW50aWZpY2F0aW9uIHBvbGlj eQ0KPj4tICAgICAgICAvLw0KPj4tICAgICAgICBEZWxldGVQcm92aWRlckZyb21Qb2xpY3kgKElk ZW50aXR5LCBPZmZzZXQpOw0KPj4tICAgICAgICBjb250aW51ZTsNCj4+LSAgICAgIH0NCj4+LSAg ICB9DQo+Pi0gICAgT2Zmc2V0ICs9IElkZW50aXR5LT5MZW5ndGg7DQo+Pi0gIH0NCj4+LQ0KPj4t ICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+Pi19DQo+Pi0NCj4+LQ0KPj4tLyoqDQo+Pi0gIENoZWNr IHdoZXRoZXIgdGhlIGlkZW50aXR5IHBvbGljeSBpcyB2YWxpZC4NCj4+LQ0KPj4tICBAcGFyYW1b aW5dICBQb2xpY3lJbmZvICAgICAgICAgIFBvaW50IHRvIHRoZSBpZGVudGl0eSBwb2xpY3kuDQo+ Pi0gIEBwYXJhbVtpbl0gIFBvbGljeUluZm9MZW4gICAgICAgVGhlIHBvbGljeSBsZW5ndGguDQo+ Pi0NCj4+LSAgQHJldHZhbCBUUlVFICAgICBUaGUgcG9saWN5IGlzIGEgdmFsaWQgaWRlbnRpdHkg cG9saWN5Lg0KPj4tICBAcmV0dmFsIEZBTFNFICAgIFRoZSBwb2xpY3kgaXMgbm90IGEgdmFsaWQg aWRlbnRpdHkgcG9saWN5Lg0KPj4tDQo+Pi0qKi8NCj4+LUJPT0xFQU4NCj4+LUNoZWNrTmV3SWRl bnRpdHlQb2xpY3kgKA0KPj4tICBJTiAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKlBvbGljeUluZm8sDQo+Pi0gIElOICBVSU5UTiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQb2xpY3lJbmZvTGVuDQo+Pi0gICkNCj4+LXsNCj4+LSAgRUZJX1VT RVJfSU5GT19JREVOVElUWV9QT0xJQ1kgKklkZW50aXR5Ow0KPj4tICBFRklfSU5QVVRfS0VZICAg ICAgICAgICAgICAgICBLZXk7DQo+Pi0gIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgIE9m ZnNldDsNCj4+LSAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgT3BDb2RlOw0KPj4tDQo+ Pi0gIC8vDQo+Pi0gIC8vIENoZWNrIHBvbGljeSBleHByZXNzaW9uLg0KPj4tICAvLw0KPj4tICBP cENvZGUgID0gRUZJX1VTRVJfSU5GT19JREVOVElUWV9GQUxTRTsNCj4+LSAgT2Zmc2V0ICA9IDA7 DQo+Pi0gIHdoaWxlIChPZmZzZXQgPCBQb2xpY3lJbmZvTGVuKSB7DQo+Pi0gICAgLy8NCj4+LSAg ICAvLyBDaGVjayBpZGVudGlmaWNhdGlvbiBwb2xpY3kgYWNjb3JkaW5nIHRvIHR5cGUNCj4+LSAg ICAvLw0KPj4tICAgIElkZW50aXR5ID0gKEVGSV9VU0VSX0lORk9fSURFTlRJVFlfUE9MSUNZICop IChQb2xpY3lJbmZvICsgT2Zmc2V0KTsNCj4+LSAgICBzd2l0Y2ggKElkZW50aXR5LT5UeXBlKSB7 DQo+Pi0NCj4+LSAgICBjYXNlIEVGSV9VU0VSX0lORk9fSURFTlRJVFlfVFJVRToNCj4+LSAgICAg IGJyZWFrOw0KPj4tDQo+Pi0gICAgY2FzZSBFRklfVVNFUl9JTkZPX0lERU5USVRZX09SOg0KPj4t ICAgICAgaWYgKE9wQ29kZSA9PSBFRklfVVNFUl9JTkZPX0lERU5USVRZX0FORCkgew0KPj4tICAg ICAgICBDcmVhdGVQb3BVcCAoDQo+Pi0gICAgICAgICAgRUZJX0xJR0hUR1JBWSB8IEVGSV9CQUNL R1JPVU5EX0JMVUUsDQo+Pi0gICAgICAgICAgJktleSwNCj4+LSAgICAgICAgICBMIkludmFsaWQg SWRlbnRpdHkgUG9saWN5LCBNaXhlZCBDb25uZWN0b3IgVW5zdXBwb3J0ISIsDQo+Pi0gICAgICAg ICAgTCIiLA0KPj4tICAgICAgICAgIEwiUHJlc3MgQW55IEtleSB0byBDb250aW51ZSAuLi4iLA0K Pj4tICAgICAgICAgIE5VTEwNCj4+LSAgICAgICAgICApOw0KPj4tICAgICAgICByZXR1cm4gRkFM U0U7DQo+Pi0gICAgICB9DQo+Pi0NCj4+LSAgICAgIE9wQ29kZSA9IEVGSV9VU0VSX0lORk9fSURF TlRJVFlfT1I7DQo+Pi0gICAgICBicmVhazsNCj4+LQ0KPj4tICAgIGNhc2UgRUZJX1VTRVJfSU5G T19JREVOVElUWV9BTkQ6DQo+Pi0gICAgICBpZiAoT3BDb2RlID09IEVGSV9VU0VSX0lORk9fSURF TlRJVFlfT1IpIHsNCj4+LSAgICAgICAgQ3JlYXRlUG9wVXAgKA0KPj4tICAgICAgICAgIEVGSV9M SUdIVEdSQVkgfCBFRklfQkFDS0dST1VORF9CTFVFLA0KPj4tICAgICAgICAgICZLZXksDQo+Pi0g ICAgICAgICAgTCJJbnZhbGlkIElkZW50aXR5IFBvbGljeSwgTWl4ZWQgQ29ubmVjdG9yIFVuc3Vw cG9ydCEiLA0KPj4tICAgICAgICAgIEwiIiwNCj4+LSAgICAgICAgICBMIlByZXNzIEFueSBLZXkg dG8gQ29udGludWUgLi4uIiwNCj4+LSAgICAgICAgICBOVUxMDQo+Pi0gICAgICAgICAgKTsNCj4+ LSAgICAgICAgcmV0dXJuIEZBTFNFOw0KPj4tICAgICAgfQ0KPj4tDQo+Pi0gICAgICBPcENvZGUg PSBFRklfVVNFUl9JTkZPX0lERU5USVRZX0FORDsNCj4+LSAgICAgIGJyZWFrOw0KPj4tDQo+Pi0g ICAgY2FzZSBFRklfVVNFUl9JTkZPX0lERU5USVRZX0NSRURFTlRJQUxfUFJPVklERVI6DQo+Pi0g ICAgICBicmVhazsNCj4+LQ0KPj4tICAgIGRlZmF1bHQ6DQo+Pi0gICAgICBDcmVhdGVQb3BVcCAo DQo+Pi0gICAgICAgIEVGSV9MSUdIVEdSQVkgfCBFRklfQkFDS0dST1VORF9CTFVFLA0KPj4tICAg ICAgICAmS2V5LA0KPj4tICAgICAgICBMIlVuc3VwcG9ydCBwYXJhbWV0ZXIiLA0KPj4tICAgICAg ICBMIiIsDQo+Pi0gICAgICAgIEwiUHJlc3MgQW55IEtleSB0byBDb250aW51ZSAuLi4iLA0KPj4t ICAgICAgICBOVUxMDQo+Pi0gICAgICAgICk7DQo+Pi0gICAgICByZXR1cm4gRkFMU0U7DQo+Pi0g ICAgfQ0KPj4tICAgIE9mZnNldCArPSBJZGVudGl0eS0+TGVuZ3RoOw0KPj4tICB9DQo+Pi0NCj4+ LSAgcmV0dXJuIFRSVUU7DQo+Pi19DQo+Pi0NCj4+LQ0KPj4tLyoqDQo+Pi0gIFNhdmUgdGhlIGlk ZW50aXR5IHBvbGljeSBhbmQgdXBkYXRlIFVJIHdpdGggaXQuDQo+Pi0NCj4+LSAgVGhpcyBmdW5j dGlvbiB3aWxsIHZlcmlmeSB0aGUgbmV3IGlkZW50aXR5IHBvbGljeSwgaW4gY3VycmVudCBpbXBs ZW1lbnRhdGlvbiwNCj4+LSAgdGhlIGlkZW50aXR5IHBvbGljeSBjYW4gYmU6ICBULCBQICYgUCAm IFAgJiAuLi4sIFAgfCBQIHwgUCB8IC4uLg0KPj4tICBIZXJlLCAiVCIgbWVhbnMgIlRydWUiLCAi UCIgbWVhbnMgIkNyZWRlbnRpYWwgUHJvdmlkZXIiLCAiJiIgbWVhbnMNCj4iYW5kIiwNCj4+Inwi IG1lYW5zICJvciIuDQo+Pi0gIE90aGVyIGlkZW50aXR5IHBvbGljaWVzIGFyZSBub3Qgc3VwcG9y dGVkLg0KPj4tDQo+Pi0qKi8NCj4+LVZPSUQNCj4+LVNhdmVJZGVudGl0eVBvbGljeSAoDQo+Pi0g IFZPSUQNCj4+LSAgKQ0KPj4tew0KPj4tICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgICBT dGF0dXM7DQo+Pi0gIEVGSV9VU0VSX0lORk9fSEFORExFICAgICAgICAgIFVzZXJJbmZvOw0KPj4t ICBFRklfVVNFUl9JTkZPICAgICAgICAgICAgICAgICAqSW5mbzsNCj4+LQ0KPj4tICBpZiAoIW1V c2VySW5mby5OZXdJZGVudGl0eVBvbGljeU1vZGlmaWVkIHx8DQo+PihtVXNlckluZm8uTmV3SWRl bnRpdHlQb2xpY3lMZW4gPT0gMCkpIHsNCj4+LSAgICByZXR1cm47DQo+Pi0gIH0NCj4+LQ0KPj4t ICAvLw0KPj4tICAvLyBDaGVjayBwb2xpY3kgZXhwcmVzc2lvbi4NCj4+LSAgLy8NCj4+LSAgaWYg KCFDaGVja05ld0lkZW50aXR5UG9saWN5IChtVXNlckluZm8uTmV3SWRlbnRpdHlQb2xpY3ksDQo+ Pm1Vc2VySW5mby5OZXdJZGVudGl0eVBvbGljeUxlbikpIHsNCj4+LSAgICByZXR1cm47DQo+Pi0g IH0NCj4+LQ0KPj4tICBTdGF0dXMgPSBGaW5kSW5mb0J5VHlwZSAobU1vZGlmeVVzZXIsDQo+PkVG SV9VU0VSX0lORk9fSURFTlRJVFlfUE9MSUNZX1JFQ09SRCwgJlVzZXJJbmZvKTsNCj4+LSAgaWYg KEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPj4tICAgIHJldHVybiA7DQo+Pi0gIH0NCj4+LQ0KPj4t ICAvLw0KPj4tICAvLyBVcGRhdGUgdGhlIGluZm9ybWFudGlvbiBvbiBjcmVkZW50aWFsIHByb3Zp ZGVyLg0KPj4tICAvLw0KPj4tICBTdGF0dXMgPSBVcGRhdGVDcmVkZW50aWFsUHJvdmlkZXIgKCk7 DQo+Pi0gIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4+LSAgICByZXR1cm4gOw0KPj4tICB9 DQo+Pi0NCj4+LSAgLy8NCj4+LSAgLy8gU2F2ZSBuZXcgaWRlbnRpZmljYXRpb24gcG9saWN5Lg0K Pj4tICAvLw0KPj4tICBJbmZvID0gQWxsb2NhdGVaZXJvUG9vbCAoc2l6ZW9mIChFRklfVVNFUl9J TkZPKSArDQo+Pm1Vc2VySW5mby5OZXdJZGVudGl0eVBvbGljeUxlbik7DQo+Pi0gIEFTU0VSVCAo SW5mbyAhPSBOVUxMKTsNCj4+LQ0KPj4tICBJbmZvLT5JbmZvVHlwZSAgICA9IEVGSV9VU0VSX0lO Rk9fSURFTlRJVFlfUE9MSUNZX1JFQ09SRDsNCj4+LSAgSW5mby0+SW5mb0F0dHJpYnMgPSBFRklf VVNFUl9JTkZPX1NUT1JBR0VfUExBVEZPUk1fTlYgfA0KPj5FRklfVVNFUl9JTkZPX1BVQkxJQyB8 IEVGSV9VU0VSX0lORk9fRVhDTFVTSVZFOw0KPj4tICBJbmZvLT5JbmZvU2l6ZSAgICA9IChVSU5U MzIpIChzaXplb2YgKEVGSV9VU0VSX0lORk8pICsNCj4+bVVzZXJJbmZvLk5ld0lkZW50aXR5UG9s aWN5TGVuKTsNCj4+LSAgQ29weU1lbSAoKFVJTlQ4ICopIChJbmZvICsgMSksIG1Vc2VySW5mby5O ZXdJZGVudGl0eVBvbGljeSwNCj4+bVVzZXJJbmZvLk5ld0lkZW50aXR5UG9saWN5TGVuKTsNCj4+ LQ0KPj4tICBTdGF0dXMgPSBtVXNlck1hbmFnZXItPlNldEluZm8gKG1Vc2VyTWFuYWdlciwgbU1v ZGlmeVVzZXIsDQo+PiZVc2VySW5mbywgSW5mbywgSW5mby0+SW5mb1NpemUpOw0KPj4tICBGcmVl UG9vbCAoSW5mbyk7DQo+Pi0NCj4+LSAgLy8NCj4+LSAgLy8gVXBkYXRlIHRoZSBtVXNlckluZm8u SWRlbnRpdHlQb2xpY3kgYnkgbVVzZXJJbmZvLk5ld0lkZW50aXR5UG9saWN5DQo+Pi0gIC8vDQo+ Pi0gIGlmIChtVXNlckluZm8uSWRlbnRpdHlQb2xpY3kgIT0gTlVMTCkgew0KPj4tICAgIEZyZWVQ b29sIChtVXNlckluZm8uSWRlbnRpdHlQb2xpY3kpOw0KPj4tICB9DQo+Pi0gIG1Vc2VySW5mby5J ZGVudGl0eVBvbGljeSAgICA9IG1Vc2VySW5mby5OZXdJZGVudGl0eVBvbGljeTsNCj4+LSAgbVVz ZXJJbmZvLklkZW50aXR5UG9saWN5TGVuID0gbVVzZXJJbmZvLk5ld0lkZW50aXR5UG9saWN5TGVu Ow0KPj4tDQo+Pi0gIG1Vc2VySW5mby5OZXdJZGVudGl0eVBvbGljeSAgICAgICAgID0gTlVMTDsN Cj4+LSAgbVVzZXJJbmZvLk5ld0lkZW50aXR5UG9saWN5TGVuICAgICAgPSAwOw0KPj4tICBtVXNl ckluZm8uTmV3SWRlbnRpdHlQb2xpY3lNb2RpZmllZCA9IEZBTFNFOw0KPj4tDQo+Pi0gIC8vDQo+ Pi0gIC8vIFVwZGF0ZSBpZGVudGl0eSBwb2xpY3kgY2hvaWNlLg0KPj4tICAvLw0KPj4tICBSZXNv bHZlSWRlbnRpdHlQb2xpY3kgKG1Vc2VySW5mby5JZGVudGl0eVBvbGljeSwNCj4+bVVzZXJJbmZv LklkZW50aXR5UG9saWN5TGVuLCBTVFJJTkdfVE9LRU4gKFNUUl9JREVOVElGWV9QT0xJQ1lfVkFM KSk7DQo+Pi19DQo+Pi0NCj4+LQ0KPj4tLyoqDQo+Pi0gIFVwZGF0ZSB0aGUgbVVzZXJJbmZvLk5l d0lkZW50aXR5UG9saWN5LCBhbmQgVUkgd2hlbiAnYWRkIG9wdGlvbicgaXMNCj4+cHJlc3NlZC4N Cj4+LQ0KPj4tKiovDQo+Pi1WT0lEDQo+Pi1BZGRJZGVudGl0eVBvbGljeUl0ZW0gKA0KPj4tICBW T0lEDQo+Pi0gICkNCj4+LXsNCj4+LSAgaWYgKG1Qcm92aWRlckluZm8tPkNvdW50ID09IDApIHsN Cj4+LSAgICByZXR1cm4gOw0KPj4tICB9DQo+Pi0NCj4+LSAgLy8NCj4+LSAgLy8gQ2hlY2sgdGhl IGlkZW50aXR5IHBvbGljeS4NCj4+LSAgLy8NCj4+LSAgaWYgKFByb3ZpZGVyQWxyZWFkeUluUG9s aWN5ICgmbVByb3ZpZGVySW5mby0+UHJvdmlkZXJbbVByb3ZpZGVyQ2hvaWNlXS0NCj4+PklkZW50 aWZpZXIpKSB7DQo+Pi0gICAgcmV0dXJuOw0KPj4tICB9DQo+Pi0NCj4+LSAgLy8NCj4+LSAgLy8g QWRkIGl0IHRvIGlkZW50aWZpY2F0aW9uIHBvbGljeQ0KPj4tICAvLw0KPj4tICBBZGRQcm92aWRl clRvUG9saWN5ICgmbVByb3ZpZGVySW5mby0+UHJvdmlkZXJbbVByb3ZpZGVyQ2hvaWNlXS0NCj4+ PklkZW50aWZpZXIpOw0KPj4tDQo+Pi0gIC8vDQo+Pi0gIC8vIFVwZGF0ZSBpZGVudGl0eSBwb2xp Y3kgY2hvaWNlLg0KPj4tICAvLw0KPj4tICBSZXNvbHZlSWRlbnRpdHlQb2xpY3kgKG1Vc2VySW5m by5OZXdJZGVudGl0eVBvbGljeSwNCj4+bVVzZXJJbmZvLk5ld0lkZW50aXR5UG9saWN5TGVuLCBT VFJJTkdfVE9LRU4NCj4+KFNUUl9JREVOVElGWV9QT0xJQ1lfVkFMVUUpKTsNCj4+LX0NCj4+LQ0K Pj4tDQo+PmRpZmYgLS1naXQNCj4+YS9TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vVXNl clByb2ZpbGVNYW5hZ2VyRHhlL1VzZXJQcm9maWxlQWRkLmMNCj4+Yi9TZWN1cml0eVBrZy9Vc2Vy SWRlbnRpZmljYXRpb24vVXNlclByb2ZpbGVNYW5hZ2VyRHhlL1VzZXJQcm9maWxlQWRkLmMNCj4+ ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0DQo+PmluZGV4IDZkZTdlNzVlNzkuLjAwMDAwMDAwMDAN Cj4+LS0tDQo+PmEvU2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9uL1VzZXJQcm9maWxlTWFu YWdlckR4ZS9Vc2VyUHJvZmlsZUFkZC5jDQo+PisrKyAvZGV2L251bGwNCj4+QEAgLTEsMzcyICsw LDAgQEANCj4+LS8qKiBAZmlsZQ0KPj4tICBUaGUgZnVuY3Rpb25zIHRvIGFkZCBhIHVzZXIgcHJv ZmlsZS4NCj4+LQ0KPj4tQ29weXJpZ2h0IChjKSAyMDA5IC0gMjAxOCwgSW50ZWwgQ29ycG9yYXRp b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPj4tVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNj b21wYW55aW5nIG1hdGVyaWFscw0KPj4tYXJlIGxpY2Vuc2VkIGFuZCBtYWRlIGF2YWlsYWJsZSB1 bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEJTRA0KPj5MaWNlbnNlDQo+Pi13 aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbi4gIFRoZSBmdWxsIHRleHQgb2YgdGhl IGxpY2Vuc2UgbWF5IGJlDQo+PmZvdW5kIGF0DQo+Pi1odHRwOi8vb3BlbnNvdXJjZS5vcmcvbGlj ZW5zZXMvYnNkLWxpY2Vuc2UucGhwDQo+Pi0NCj4+LVRIRSBQUk9HUkFNIElTIERJU1RSSUJVVEVE IFVOREVSIFRIRSBCU0QgTElDRU5TRSBPTiBBTiAiQVMgSVMiDQo+QkFTSVMsDQo+Pi1XSVRIT1VU IFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVINCj4+RVhQ UkVTUyBPUiBJTVBMSUVELg0KPj4tDQo+Pi0qKi8NCj4+LQ0KPj4tI2luY2x1ZGUgIlVzZXJQcm9m aWxlTWFuYWdlci5oIg0KPj4tDQo+Pi0NCj4+LS8qKg0KPj4tICBHZXQgdXNlciBuYW1lIGZyb20g dGhlIHBvcHVwIHdpbmRvd3MuDQo+Pi0NCj4+LSAgQHBhcmFtW2luLCBvdXRdICBVc2VyTmFtZUxl biAgT24gZW50cnksIHBvaW50IHRvIFVzZXJOYW1lIGJ1ZmZlcg0KPmxlbmdoLA0KPj5pbiBieXRl cy4NCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT24gZXhpdCwgcG9pbnQgdG8g aW5wdXQgdXNlciBuYW1lIGxlbmd0aCwgaW4gYnl0ZXMuDQo+Pi0gIEBwYXJhbVtvdXRdICAgICAg VXNlck5hbWUgICAgIFRoZSBidWZmZXIgdG8gaG9sZCB0aGUgaW5wdXQgdXNlciBuYW1lLg0KPj4t DQo+Pi0gIEByZXR2YWwgRUZJX0FCT1JURUQgICAgICAgICAgIEl0IGlzIGdpdmVuIHVwIGJ5IHBy ZXNzaW5nICdFU0MnIGtleS4NCj4+LSAgQHJldHZhbCBFRklfTk9UX1JFQURZICAgICAgICAgTm90 IGEgdmFsaWQgaW5wdXQgYXQgYWxsLg0KPj4tICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAg ICBHZXQgYSB1c2VyIG5hbWUgc3VjY2Vzc2Z1bGx5Lg0KPj4tDQo+Pi0qKi8NCj4+LUVGSV9TVEFU VVMNCj4+LUdldFVzZXJOYW1lSW5wdXQgKA0KPj4tICBJTiBPVVQgIFVJTlROICAgICAgICAgKlVz ZXJOYW1lTGVuLA0KPj4tICAgICBPVVQgIENIQVIxNiAgICAgICAgKlVzZXJOYW1lDQo+Pi0gICkN Cj4+LXsNCj4+LSAgRUZJX0lOUFVUX0tFWSBLZXk7DQo+Pi0gIFVJTlROICAgICAgICAgTmFtZUxl bjsNCj4+LSAgQ0hBUjE2ICAgICAgICBOYW1lW1VTRVJfTkFNRV9MRU5HVEhdOw0KPj4tDQo+Pi0g IE5hbWVMZW4gPSAwOw0KPj4tICB3aGlsZSAoVFJVRSkgew0KPj4tICAgIE5hbWVbTmFtZUxlbl0g ICAgID0gTCdfJzsNCj4+LSAgICBOYW1lW05hbWVMZW4gKyAxXSA9IEwnXDAnOw0KPj4tICAgIENy ZWF0ZVBvcFVwICgNCj4+LSAgICAgIEVGSV9MSUdIVEdSQVkgfCBFRklfQkFDS0dST1VORF9CTFVF LA0KPj4tICAgICAgJktleSwNCj4+LSAgICAgIEwiSW5wdXQgVXNlciBOYW1lIiwNCj4+LSAgICAg IEwiLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiwNCj4+LSAgICAgIE5hbWUsDQo+Pi0gICAgICBOVUxM DQo+Pi0gICAgICApOw0KPj4tICAgIC8vDQo+Pi0gICAgLy8gQ2hlY2sga2V5Lg0KPj4tICAgIC8v DQo+Pi0gICAgaWYgKEtleS5TY2FuQ29kZSA9PSBTQ0FOX05VTEwpIHsNCj4+LSAgICAgIGlmIChL ZXkuVW5pY29kZUNoYXIgPT0gQ0hBUl9DQVJSSUFHRV9SRVRVUk4pIHsNCj4+LSAgICAgICAgLy8N Cj4+LSAgICAgICAgLy8gQWRkIHRoZSBudWxsIHRlcm1pbmF0b3IuDQo+Pi0gICAgICAgIC8vDQo+ Pi0gICAgICAgIE5hbWVbTmFtZUxlbl0gPSAwOw0KPj4tICAgICAgICBOYW1lTGVuKys7DQo+Pi0g ICAgICAgIGJyZWFrOw0KPj4tICAgICAgfSBlbHNlIGlmICgoS2V5LlVuaWNvZGVDaGFyID09IENI QVJfTlVMTCkgfHwNCj4+LSAgICAgICAgICAgICAgICAgKEtleS5Vbmljb2RlQ2hhciA9PSBDSEFS X1RBQikgfHwNCj4+LSAgICAgICAgICAgICAgICAgKEtleS5Vbmljb2RlQ2hhciA9PSBDSEFSX0xJ TkVGRUVEKQ0KPj4tICAgICAgICAgICAgICAgICApIHsNCj4+LSAgICAgICAgY29udGludWU7DQo+ Pi0gICAgICB9IGVsc2Ugew0KPj4tICAgICAgICBpZiAoS2V5LlVuaWNvZGVDaGFyID09IENIQVJf QkFDS1NQQUNFKSB7DQo+Pi0gICAgICAgICAgaWYgKE5hbWVMZW4gPiAwKSB7DQo+Pi0gICAgICAg ICAgICBOYW1lTGVuLS07DQo+Pi0gICAgICAgICAgfQ0KPj4tICAgICAgICB9IGVsc2Ugew0KPj4t ICAgICAgICAgIE5hbWVbTmFtZUxlbl0gPSBLZXkuVW5pY29kZUNoYXI7DQo+Pi0gICAgICAgICAg TmFtZUxlbisrOw0KPj4tICAgICAgICAgIGlmIChOYW1lTGVuICsgMSA9PSBVU0VSX05BTUVfTEVO R1RIKSB7DQo+Pi0gICAgICAgICAgICAvLw0KPj4tICAgICAgICAgICAgLy8gQWRkIHRoZSBudWxs IHRlcm1pbmF0b3IuDQo+Pi0gICAgICAgICAgICAvLw0KPj4tICAgICAgICAgICAgTmFtZVtOYW1l TGVuXSA9IDA7DQo+Pi0gICAgICAgICAgICBOYW1lTGVuKys7DQo+Pi0gICAgICAgICAgICBicmVh azsNCj4+LSAgICAgICAgICB9DQo+Pi0gICAgICAgIH0NCj4+LSAgICAgIH0NCj4+LSAgICB9DQo+ Pi0NCj4+LSAgICBpZiAoS2V5LlNjYW5Db2RlID09IFNDQU5fRVNDKSB7DQo+Pi0gICAgICByZXR1 cm4gRUZJX0FCT1JURUQ7DQo+Pi0gICAgfQ0KPj4tICB9DQo+Pi0NCj4+LSAgaWYgKE5hbWVMZW4g PD0gMSkgew0KPj4tICAgIHJldHVybiBFRklfTk9UX1JFQURZOw0KPj4tICB9DQo+Pi0NCj4+LSAg aWYgKCpVc2VyTmFtZUxlbiA8IE5hbWVMZW4gKiBzaXplb2YgKENIQVIxNikpIHsNCj4+LSAgICBy ZXR1cm4gRUZJX05PVF9SRUFEWTsNCj4+LSAgfQ0KPj4tDQo+Pi0gICpVc2VyTmFtZUxlbiA9IE5h bWVMZW4gKiBzaXplb2YgKENIQVIxNik7DQo+Pi0gIENvcHlNZW0gKFVzZXJOYW1lLCBOYW1lLCAq VXNlck5hbWVMZW4pOw0KPj4tDQo+Pi0gIHJldHVybiBFRklfU1VDQ0VTUzsNCj4+LX0NCj4+LQ0K Pj4tLyoqDQo+Pi0gIFNldCBhIHVzZXIncyB1c2VybmFtZS4NCj4+LQ0KPj4tICBAcGFyYW1baW5d ICAgVXNlciAgICAgICAgICBIYW5kbGUgb2YgYSB1c2VyIHByb2ZpbGUgLg0KPj4tICBAcGFyYW1b aW5dICAgVXNlck5hbWVMZW4gICBUaGUgbGVuZ2ggb2YgVXNlck5hbWUuDQo+Pi0gIEBwYXJhbVtp bl0gICBVc2VyTmFtZSAgICAgIFBvaW50IHRvIHRoZSBidWZmZXIgb2YgdXNlciBuYW1lLg0KPj4t DQo+Pi0gIEByZXR2YWwgRUZJX05PVF9SRUFEWSAgICAgIFRoZSB1c2Vybm1lIGluIG1BZGRVc2Vy TmFtZSBoYWQgYmVlbg0KPnVzZWQuDQo+Pi0gIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgIENo YW5nZSB0aGUgdXNlcidzIHVzZXJuYW1lIHN1Y2Nlc3NmdWxseSB3aXRoDQo+Pi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHVzZXJuYW1lIGluIG1BZGRVc2VyTmFtZS4NCj4+LQ0KPj4tKiov DQo+Pi1FRklfU1RBVFVTDQo+Pi1TZXRVc2VyTmFtZSAoDQo+Pi0gIElOICBFRklfVVNFUl9QUk9G SUxFX0hBTkRMRSAgICBVc2VyLA0KPj4tICBJTiAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAg VXNlck5hbWVMZW4sDQo+Pi0gIElOICBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAqVXNlck5h bWUNCj4+LSAgKQ0KPj4tew0KPj4tICBFRklfU1RBVFVTICAgICAgICAgICAgICBTdGF0dXM7DQo+ Pi0gIEVGSV9VU0VSX0lORk9fSEFORExFICAgIFVzZXJJbmZvOw0KPj4tICBFRklfVVNFUl9QUk9G SUxFX0hBTkRMRSBUZW1wVXNlcjsNCj4+LSAgRUZJX1VTRVJfSU5GTyAgICAgICAgICAgKk5ld1Vz ZXJJbmZvOw0KPj4tDQo+Pi0gIE5ld1VzZXJJbmZvID0gQWxsb2NhdGVaZXJvUG9vbCAoc2l6ZW9m IChFRklfVVNFUl9JTkZPKSArDQo+VXNlck5hbWVMZW4pOw0KPj4tICBBU1NFUlQgKE5ld1VzZXJJ bmZvICE9IE5VTEwpOw0KPj4tDQo+Pi0gIE5ld1VzZXJJbmZvLT5JbmZvVHlwZSAgICA9IEVGSV9V U0VSX0lORk9fTkFNRV9SRUNPUkQ7DQo+Pi0gIE5ld1VzZXJJbmZvLT5JbmZvQXR0cmlicyA9IEVG SV9VU0VSX0lORk9fU1RPUkFHRV9QTEFURk9STV9OViB8DQo+Pi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEVGSV9VU0VSX0lORk9fUFVCTElDIHwNCj4+LSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgRUZJX1VTRVJfSU5GT19FWENMVVNJVkU7DQo+Pi0gIE5ld1VzZXJJbmZvLT5JbmZv U2l6ZSAgICA9IChVSU5UMzIpIChzaXplb2YgKEVGSV9VU0VSX0lORk8pICsNCj4+VXNlck5hbWVM ZW4pOw0KPj4tICBDb3B5TWVtICgoVUlOVDggKikgKE5ld1VzZXJJbmZvICsgMSksIFVzZXJOYW1l LCBVc2VyTmFtZUxlbik7DQo+Pi0gIFRlbXBVc2VyICA9IE5VTEw7DQo+Pi0gIFN0YXR1cyAgICA9 IG1Vc2VyTWFuYWdlci0+RmluZCAoDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt VXNlck1hbmFnZXIsDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmVGVtcFVzZXIs DQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLA0KPj4tICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgTmV3VXNlckluZm8sDQo+Pi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBOZXdVc2VySW5mby0+SW5mb1NpemUNCj4+LSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICk7DQo+Pi0gIGlmICghRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+Pi0gICAgLy8NCj4+ LSAgICAvLyBUaGUgdXNlciBuYW1lIGhhZCBiZWVuIHVzZWQsIHJldHVybiBlcnJvci4NCj4+LSAg ICAvLw0KPj4tICAgIEZyZWVQb29sIChOZXdVc2VySW5mbyk7DQo+Pi0gICAgcmV0dXJuIEVGSV9O T1RfUkVBRFk7DQo+Pi0gIH0NCj4+LQ0KPj4tICBVc2VySW5mbyA9IE5VTEw7DQo+Pi0gIG1Vc2Vy TWFuYWdlci0+U2V0SW5mbyAoDQo+Pi0gICAgICAgICAgICAgICAgICBtVXNlck1hbmFnZXIsDQo+ Pi0gICAgICAgICAgICAgICAgICBVc2VyLA0KPj4tICAgICAgICAgICAgICAgICAgJlVzZXJJbmZv LA0KPj4tICAgICAgICAgICAgICAgICAgTmV3VXNlckluZm8sDQo+Pi0gICAgICAgICAgICAgICAg ICBOZXdVc2VySW5mby0+SW5mb1NpemUNCj4+LSAgICAgICAgICAgICAgICAgICk7DQo+Pi0gIEZy ZWVQb29sIChOZXdVc2VySW5mbyk7DQo+Pi0gIHJldHVybiBFRklfU1VDQ0VTUzsNCj4+LX0NCj4+ LQ0KPj4tDQo+Pi0vKioNCj4+LSAgU2V0IGNyZWF0ZSBkYXRlIG9mIHRoZSBzcGVjaWZpZWQgdXNl ci4NCj4+LQ0KPj4tICBAcGFyYW1baW5dICBVc2VyICAgICAgICAgICAgICAgSGFuZGxlIG9mIGEg dXNlciBwcm9maWxlLg0KPj4tDQo+Pi0qKi8NCj4+LVZPSUQNCj4+LVNldENyZWF0ZURhdGUgKA0K Pj4tICBJTiAgICAgICAgRUZJX1VTRVJfUFJPRklMRV9IQU5ETEUgICBVc2VyDQo+Pi0gICkNCj4+ LXsNCj4+LSAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICBTdGF0dXM7DQo+Pi0gIEVGSV9VU0VS X0lORk9fSEFORExFICAgICAgVXNlckluZm87DQo+Pi0gIEVGSV9VU0VSX0lORk9fQ1JFQVRFX0RB VEUgRGF0ZTsNCj4+LSAgRUZJX1VTRVJfSU5GTyAgICAgICAgICAgICAqTmV3VXNlckluZm87DQo+ Pi0NCj4+LSAgTmV3VXNlckluZm8gPSBBbGxvY2F0ZVplcm9Qb29sICgNCj4+LSAgICAgICAgICAg ICAgICAgIHNpemVvZiAoRUZJX1VTRVJfSU5GTykgKw0KPj4tICAgICAgICAgICAgICAgICAgc2l6 ZW9mIChFRklfVVNFUl9JTkZPX0NSRUFURV9EQVRFKQ0KPj4tICAgICAgICAgICAgICAgICAgKTsN Cj4+LSAgQVNTRVJUIChOZXdVc2VySW5mbyAhPSBOVUxMKTsNCj4+LQ0KPj4tICBOZXdVc2VySW5m by0+SW5mb1R5cGUgICAgPSBFRklfVVNFUl9JTkZPX0NSRUFURV9EQVRFX1JFQ09SRDsNCj4+LSAg TmV3VXNlckluZm8tPkluZm9BdHRyaWJzID0gRUZJX1VTRVJfSU5GT19TVE9SQUdFX1BMQVRGT1JN X05WIHwNCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUZJX1VTRVJfSU5GT19QVUJM SUMgfA0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFRklfVVNFUl9JTkZPX0VYQ0xV U0lWRTsNCj4+LSAgTmV3VXNlckluZm8tPkluZm9TaXplICAgID0gc2l6ZW9mIChFRklfVVNFUl9J TkZPKSArIHNpemVvZg0KPj4oRUZJX1VTRVJfSU5GT19DUkVBVEVfREFURSk7DQo+Pi0gIFN0YXR1 cyAgICAgICAgICAgICAgICAgICA9IGdSVC0+R2V0VGltZSAoJkRhdGUsIE5VTEwpOw0KPj4tICBp ZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+Pi0gICAgRnJlZVBvb2wgKE5ld1VzZXJJbmZvKTsN Cj4+LSAgICByZXR1cm4gOw0KPj4tICB9DQo+Pi0NCj4+LSAgQ29weU1lbSAoKFVJTlQ4ICopIChO ZXdVc2VySW5mbyArIDEpLCAmRGF0ZSwgc2l6ZW9mDQo+PihFRklfVVNFUl9JTkZPX0NSRUFURV9E QVRFKSk7DQo+Pi0gIFVzZXJJbmZvID0gTlVMTDsNCj4+LSAgbVVzZXJNYW5hZ2VyLT5TZXRJbmZv ICgNCj4+LSAgICAgICAgICAgICAgICAgIG1Vc2VyTWFuYWdlciwNCj4+LSAgICAgICAgICAgICAg ICAgIFVzZXIsDQo+Pi0gICAgICAgICAgICAgICAgICAmVXNlckluZm8sDQo+Pi0gICAgICAgICAg ICAgICAgICBOZXdVc2VySW5mbywNCj4+LSAgICAgICAgICAgICAgICAgIE5ld1VzZXJJbmZvLT5J bmZvU2l6ZQ0KPj4tICAgICAgICAgICAgICAgICAgKTsNCj4+LSAgRnJlZVBvb2wgKE5ld1VzZXJJ bmZvKTsNCj4+LX0NCj4+LQ0KPj4tDQo+Pi0vKioNCj4+LSAgU2V0IHRoZSBkZWZhdWx0IGlkZW50 aXR5IHBvbGljeSBvZiB0aGUgc3BlY2lmaWVkIHVzZXIuDQo+Pi0NCj4+LSAgQHBhcmFtW2luXSAg VXNlciAgICAgICAgICAgICAgIEhhbmRsZSBvZiBhIHVzZXIgcHJvZmlsZS4NCj4+LQ0KPj4tKiov DQo+Pi1WT0lEDQo+Pi1TZXRJZGVudGl0eVBvbGljeSAoDQo+Pi0gIElOICAgICAgICBFRklfVVNF Ul9QUk9GSUxFX0hBTkRMRSAgIFVzZXINCj4+LSAgKQ0KPj4tew0KPj4tICBFRklfVVNFUl9JTkZP X0lERU5USVRZX1BPTElDWSAqUG9saWN5Ow0KPj4tICBFRklfVVNFUl9JTkZPX0hBTkRMRSAgICAg ICAgICBVc2VySW5mbzsNCj4+LSAgRUZJX1VTRVJfSU5GTyAgICAgICAgICAgICAgICAgKk5ld1Vz ZXJJbmZvOw0KPj4tDQo+Pi0gIE5ld1VzZXJJbmZvID0gQWxsb2NhdGVaZXJvUG9vbCAoDQo+Pi0g ICAgICAgICAgICAgICAgICBzaXplb2YgKEVGSV9VU0VSX0lORk8pICsNCj4+LSAgICAgICAgICAg ICAgICAgIHNpemVvZiAoRUZJX1VTRVJfSU5GT19JREVOVElUWV9QT0xJQ1kpDQo+Pi0gICAgICAg ICAgICAgICAgICApOw0KPj4tICBBU1NFUlQgKE5ld1VzZXJJbmZvICE9IE5VTEwpOw0KPj4tDQo+ Pi0gIFBvbGljeSAgICAgICAgICAgICAgICAgICA9IChFRklfVVNFUl9JTkZPX0lERU5USVRZX1BP TElDWSAqKSAoTmV3VXNlckluZm8gKyAxKTsNCj4+LSAgUG9saWN5LT5UeXBlICAgICAgICAgICAg ID0gRUZJX1VTRVJfSU5GT19JREVOVElUWV9UUlVFOw0KPj4tICBQb2xpY3ktPkxlbmd0aCAgICAg ICAgICAgPSBzaXplb2YgKEVGSV9VU0VSX0lORk9fSURFTlRJVFlfUE9MSUNZKTsNCj4+LQ0KPj4t ICBOZXdVc2VySW5mby0+SW5mb1R5cGUgICAgPSBFRklfVVNFUl9JTkZPX0lERU5USVRZX1BPTElD WV9SRUNPUkQ7DQo+Pi0gIE5ld1VzZXJJbmZvLT5JbmZvQXR0cmlicyA9IEVGSV9VU0VSX0lORk9f U1RPUkFHRV9QTEFURk9STV9OViB8DQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVG SV9VU0VSX0lORk9fUFVCTElDIHwNCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUZJ X1VTRVJfSU5GT19FWENMVVNJVkU7DQo+Pi0gIE5ld1VzZXJJbmZvLT5JbmZvU2l6ZSAgICA9IHNp emVvZiAoRUZJX1VTRVJfSU5GTykgKyBQb2xpY3ktPkxlbmd0aDsNCj4+LSAgVXNlckluZm8gICAg ICAgICAgICAgICAgID0gTlVMTDsNCj4+LSAgbVVzZXJNYW5hZ2VyLT5TZXRJbmZvICgNCj4+LSAg ICAgICAgICAgICAgICAgIG1Vc2VyTWFuYWdlciwNCj4+LSAgICAgICAgICAgICAgICAgIFVzZXIs DQo+Pi0gICAgICAgICAgICAgICAgICAmVXNlckluZm8sDQo+Pi0gICAgICAgICAgICAgICAgICBO ZXdVc2VySW5mbywNCj4+LSAgICAgICAgICAgICAgICAgIE5ld1VzZXJJbmZvLT5JbmZvU2l6ZQ0K Pj4tICAgICAgICAgICAgICAgICAgKTsNCj4+LSAgRnJlZVBvb2wgKE5ld1VzZXJJbmZvKTsNCj4+ LX0NCj4+LQ0KPj4tDQo+Pi0vKioNCj4+LSAgU2V0IHRoZSBkZWZhdWx0IGFjY2VzcyBwb2xpY3kg b2YgdGhlIHNwZWNpZmllZCB1c2VyLg0KPj4tDQo+Pi0gIEBwYXJhbVtpbl0gIFVzZXIgICAgICAg ICAgICAgICBIYW5kbGUgb2YgYSB1c2VyIHByb2ZpbGUuDQo+Pi0NCj4+LSoqLw0KPj4tVk9JRA0K Pj4tU2V0QWNjZXNzUG9saWN5ICgNCj4+LSAgSU4gICAgICAgIEVGSV9VU0VSX1BST0ZJTEVfSEFO RExFICAgVXNlcg0KPj4tICApDQo+Pi17DQo+Pi0gIEVGSV9VU0VSX0lORk9fQUNDRVNTX0NPTlRS T0wgICpDb250cm9sOw0KPj4tICBFRklfVVNFUl9JTkZPX0hBTkRMRSAgICAgICAgICBVc2VySW5m bzsNCj4+LSAgRUZJX1VTRVJfSU5GTyAgICAgICAgICAgICAgICAgKk5ld1VzZXJJbmZvOw0KPj4t DQo+Pi0gIE5ld1VzZXJJbmZvID0gQWxsb2NhdGVaZXJvUG9vbCAoDQo+Pi0gICAgICAgICAgICAg ICAgICBzaXplb2YgKEVGSV9VU0VSX0lORk8pICsNCj4+LSAgICAgICAgICAgICAgICAgIHNpemVv ZiAoRUZJX1VTRVJfSU5GT19BQ0NFU1NfQ09OVFJPTCkNCj4+LSAgICAgICAgICAgICAgICAgICk7 DQo+Pi0gIEFTU0VSVCAoTmV3VXNlckluZm8gIT0gTlVMTCk7DQo+Pi0NCj4+LSAgQ29udHJvbCAg ICAgICAgICAgICAgICAgID0gKEVGSV9VU0VSX0lORk9fQUNDRVNTX0NPTlRST0wgKikgKE5ld1Vz ZXJJbmZvICsNCj4+MSk7DQo+Pi0gIENvbnRyb2wtPlR5cGUgICAgICAgICAgICA9IEVGSV9VU0VS X0lORk9fQUNDRVNTX0VOUk9MTF9TRUxGOw0KPj4tICBDb250cm9sLT5TaXplICAgICAgICAgICAg PSBzaXplb2YgKEVGSV9VU0VSX0lORk9fQUNDRVNTX0NPTlRST0wpOw0KPj4tDQo+Pi0gIE5ld1Vz ZXJJbmZvLT5JbmZvVHlwZSAgICA9IEVGSV9VU0VSX0lORk9fQUNDRVNTX1BPTElDWV9SRUNPUkQ7 DQo+Pi0gIE5ld1VzZXJJbmZvLT5JbmZvQXR0cmlicyA9IEVGSV9VU0VSX0lORk9fU1RPUkFHRV9Q TEFURk9STV9OViB8DQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVGSV9VU0VSX0lO Rk9fUFVCTElDIHwNCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUZJX1VTRVJfSU5G T19FWENMVVNJVkU7DQo+Pi0gIE5ld1VzZXJJbmZvLT5JbmZvU2l6ZSAgICA9IHNpemVvZiAoRUZJ X1VTRVJfSU5GTykgKyBDb250cm9sLT5TaXplOw0KPj4tICBVc2VySW5mbyAgICAgICAgICAgICAg ICAgPSBOVUxMOw0KPj4tICBtVXNlck1hbmFnZXItPlNldEluZm8gKA0KPj4tICAgICAgICAgICAg ICAgICAgbVVzZXJNYW5hZ2VyLA0KPj4tICAgICAgICAgICAgICAgICAgVXNlciwNCj4+LSAgICAg ICAgICAgICAgICAgICZVc2VySW5mbywNCj4+LSAgICAgICAgICAgICAgICAgIE5ld1VzZXJJbmZv LA0KPj4tICAgICAgICAgICAgICAgICAgTmV3VXNlckluZm8tPkluZm9TaXplDQo+Pi0gICAgICAg ICAgICAgICAgICApOw0KPj4tICBGcmVlUG9vbCAoTmV3VXNlckluZm8pOw0KPj4tfQ0KPj4tDQo+ Pi0NCj4+LS8qKg0KPj4tICBBZGQgYSBuZXcgdXNlciBwcm9maWxlIGludG8gdGhlIHVzZXIgcHJv ZmlsZSBkYXRhYmFzZS4NCj4+LQ0KPj4tKiovDQo+Pi1WT0lEDQo+Pi1DYWxsQWRkVXNlciAoDQo+ Pi0gIFZPSUQNCj4+LSAgKQ0KPj4tew0KPj4tICBFRklfU1RBVFVTICAgICAgICAgICAgICBTdGF0 dXM7DQo+Pi0gIEVGSV9JTlBVVF9LRVkgICAgICAgICAgIEtleTsNCj4+LSAgRUZJX1VTRVJfUFJP RklMRV9IQU5ETEUgVXNlcjsNCj4+LSAgVUlOVE4gICAgICAgICAgICAgICAgICAgVXNlck5hbWVM ZW47DQo+Pi0gIENIQVIxNiAgICAgICAgICAgICAgICAgIFVzZXJOYW1lW1VTRVJfTkFNRV9MRU5H VEhdOw0KPj4tICBDSEFSMTYgICAgICAgICAgICAgICAgICAqUXVlc3Rpb25TdHI7DQo+Pi0gIENI QVIxNiAgICAgICAgICAgICAgICAgICpQcm9tcHRTdHI7DQo+Pi0NCj4+LSAgUXVlc3Rpb25TdHIg PSBOVUxMOw0KPj4tICBQcm9tcHRTdHIgICA9IE5VTEw7DQo+Pi0NCj4+LSAgLy8NCj4+LSAgLy8g R2V0IHVzZXIgbmFtZSB0byBhZGQuDQo+Pi0gIC8vDQo+Pi0gIFVzZXJOYW1lTGVuID0gc2l6ZW9m IChVc2VyTmFtZSk7DQo+Pi0gIFN0YXR1cyA9IEdldFVzZXJOYW1lSW5wdXQgKCZVc2VyTmFtZUxl biwgVXNlck5hbWUpOw0KPj4tICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+Pi0gICAgaWYg KFN0YXR1cyAhPSBFRklfQUJPUlRFRCkgew0KPj4tICAgICAgUXVlc3Rpb25TdHIgPSBHZXRTdHJp bmdCeUlkIChTVFJJTkdfVE9LRU4NCj4+KFNUUl9HRVRfVVNFUk5BTUVfRkFJTEVEKSk7DQo+Pi0g ICAgICBQcm9tcHRTdHIgICA9IEdldFN0cmluZ0J5SWQgKFNUUklOR19UT0tFTg0KPj4oU1RSX1NU Uk9LRV9LRVlfQ09OVElOVUUpKTsNCj4+LSAgICAgIGdvdG8gRG9uZTsNCj4+LSAgICB9DQo+Pi0g ICAgcmV0dXJuIDsNCj4+LSAgfQ0KPj4tDQo+Pi0gIC8vDQo+Pi0gIC8vIENyZWF0ZSBhIG5ldyB1 c2VyIHByb2ZpbGUuDQo+Pi0gIC8vDQo+Pi0gIFVzZXIgICAgPSBOVUxMOw0KPj4tICBTdGF0dXMg ID0gbVVzZXJNYW5hZ2VyLT5DcmVhdGUgKG1Vc2VyTWFuYWdlciwgJlVzZXIpOw0KPj4tICBpZiAo RUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+Pi0gICAgUXVlc3Rpb25TdHIgPSBHZXRTdHJpbmdCeUlk IChTVFJJTkdfVE9LRU4NCj4+KFNUUl9DUkVBVEVfUFJPRklMRV9GQUlMRUQpKTsNCj4+LSAgICBQ cm9tcHRTdHIgICA9IEdldFN0cmluZ0J5SWQgKFNUUklOR19UT0tFTg0KPj4oU1RSX1NUUk9LRV9L RVlfQ09OVElOVUUpKTsNCj4+LSAgfSBlbHNlIHsNCj4+LSAgICAvLw0KPj4tICAgIC8vIEFkZCBk ZWZhdWx0IHVzZXIgaW5mb3JtYXRpb24uDQo+Pi0gICAgLy8NCj4+LSAgICBTdGF0dXMgPSBTZXRV c2VyTmFtZSAoVXNlciwgVXNlck5hbWVMZW4sIFVzZXJOYW1lKTsNCj4+LSAgICBpZiAoRUZJX0VS Uk9SIChTdGF0dXMpKSB7DQo+Pi0gICAgICBRdWVzdGlvblN0ciA9IEdldFN0cmluZ0J5SWQgKFNU UklOR19UT0tFTg0KPj4oU1RSX1VTRVJfQUxSRUFEWV9FWElTVEVEKSk7DQo+Pi0gICAgICBQcm9t cHRTdHIgICA9IEdldFN0cmluZ0J5SWQgKFNUUklOR19UT0tFTg0KPj4oU1RSX1NUUk9LRV9LRVlf Q09OVElOVUUpKTsNCj4+LSAgICAgIGdvdG8gRG9uZTsNCj4+LSAgICB9DQo+Pi0NCj4+LSAgICBT ZXRDcmVhdGVEYXRlIChVc2VyKTsNCj4+LSAgICBTZXRJZGVudGl0eVBvbGljeSAoVXNlcik7DQo+ Pi0gICAgU2V0QWNjZXNzUG9saWN5IChVc2VyKTsNCj4+LQ0KPj4tICAgIFF1ZXN0aW9uU3RyID0g R2V0U3RyaW5nQnlJZCAoU1RSSU5HX1RPS0VODQo+PihTVFJfQ1JFQVRFX1BST0ZJTEVfU1VDQ0VT UykpOw0KPj4tICAgIFByb21wdFN0ciAgID0gR2V0U3RyaW5nQnlJZCAoU1RSSU5HX1RPS0VODQo+ PihTVFJfU1RST0tFX0tFWV9DT05USU5VRSkpOw0KPj4tICB9DQo+Pi0NCj4+LURvbmU6DQo+Pi0g IENyZWF0ZVBvcFVwICgNCj4+LSAgICBFRklfTElHSFRHUkFZIHwgRUZJX0JBQ0tHUk9VTkRfQkxV RSwNCj4+LSAgICAmS2V5LA0KPj4tICAgIFF1ZXN0aW9uU3RyLA0KPj4tICAgIEwiIiwNCj4+LSAg ICBQcm9tcHRTdHIsDQo+Pi0gICAgTlVMTA0KPj4tICAgICk7DQo+Pi0gIEZyZWVQb29sIChRdWVz dGlvblN0cik7DQo+Pi0gIEZyZWVQb29sIChQcm9tcHRTdHIpOw0KPj4tfQ0KPj4tDQo+PmRpZmYg LS1naXQNCj4+YS9TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vVXNlclByb2ZpbGVNYW5h Z2VyRHhlL1VzZXJQcm9maWxlRGVsZXQNCj5lLg0KPj5jDQo+PmIvU2VjdXJpdHlQa2cvVXNlcklk ZW50aWZpY2F0aW9uL1VzZXJQcm9maWxlTWFuYWdlckR4ZS9Vc2VyUHJvZmlsZURlbGV0DQo+ZS4N Cj4+Yw0KPj5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCj4+aW5kZXggYWY1ZDMxMDlkZC4uMDAw MDAwMDAwMA0KPj4tLS0NCj4+YS9TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vVXNlclBy b2ZpbGVNYW5hZ2VyRHhlL1VzZXJQcm9maWxlRGVsZXQNCj5lLg0KPj5jDQo+PisrKyAvZGV2L251 bGwNCj4+QEAgLTEsMzQzICswLDAgQEANCj4+LS8qKiBAZmlsZQ0KPj4tICBUaGUgZnVuY3Rpb25z IHRvIGRlbGV0ZSBhIHVzZXIgcHJvZmlsZS4NCj4+LQ0KPj4tQ29weXJpZ2h0IChjKSAyMDA5IC0g MjAxOCwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPj4tVGhp cyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KPj4tYXJlIGxpY2Vuc2Vk IGFuZCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhl IEJTRA0KPj5MaWNlbnNlDQo+Pi13aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbi4g IFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgbWF5IGJlDQo+PmZvdW5kIGF0DQo+Pi1odHRw Oi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vuc2UucGhwDQo+Pi0NCj4+LVRIRSBQ Uk9HUkFNIElTIERJU1RSSUJVVEVEIFVOREVSIFRIRSBCU0QgTElDRU5TRSBPTiBBTiAiQVMgSVMi DQo+QkFTSVMsDQo+Pi1XSVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TIE9GIEFO WSBLSU5ELCBFSVRIRVINCj4+RVhQUkVTUyBPUiBJTVBMSUVELg0KPj4tDQo+Pi0qKi8NCj4+LQ0K Pj4tI2luY2x1ZGUgIlVzZXJQcm9maWxlTWFuYWdlci5oIg0KPj4tDQo+Pi0vKioNCj4+LSAgR2V0 IHRoZSB1c2VybmFtZSBmcm9tIHRoZSBzcGVjaWZpZWQgdXNlci4NCj4+LQ0KPj4tICBAcGFyYW1b aW5dICAgVXNlciAgICAgICAgICAgICAgSGFuZGxlIG9mIGEgdXNlciBwcm9maWxlLg0KPj4tDQo+ Pi0gIEByZXR2YWwgRUZJX1NUUklOR19JRCAgICAgICAgICBUaGUgU3RyaW5nIElkIG9mIHRoZSB1 c2VyJ3MgdXNlcm5hbWUuDQo+Pi0NCj4+LSoqLw0KPj4tRUZJX1NUUklOR19JRA0KPj4tR2V0VXNl ck5hbWUgKA0KPj4tICBJTiAgRUZJX1VTRVJfUFJPRklMRV9IQU5ETEUgICAgICAgICAgICAgICAg ICAgVXNlcg0KPj4tICApDQo+Pi17DQo+Pi0gIEVGSV9TVEFUVVMgICAgICAgICAgICBTdGF0dXM7 DQo+Pi0gIEVGSV9VU0VSX0lORk9fSEFORExFICBVc2VySW5mbzsNCj4+LSAgRUZJX1VTRVJfSU5G TyAgICAgICAgICpJbmZvOw0KPj4tICBVSU5UTiAgICAgICAgICAgICAgICAgSW5mb1NpemU7DQo+ Pi0gIFVJTlROICAgICAgICAgICAgICAgICBNZW1TaXplOw0KPj4tICBVSU5UTiAgICAgICAgICAg ICAgICAgTmFtZUxlbjsNCj4+LSAgQ0hBUjE2ICAgICAgICAgICAgICAgIFVzZXJOYW1lW1VTRVJf TkFNRV9MRU5HVEhdOw0KPj4tICBFRklfU1RSSU5HX0lEICAgICAgICAgVXNlcklkOw0KPj4tDQo+ Pi0gIC8vDQo+Pi0gIC8vIEFsbG9jYXRlIHVzZXIgaW5mb3JtYXRpb24gbWVtb3J5Lg0KPj4tICAv Lw0KPj4tICBNZW1TaXplID0gc2l6ZW9mIChFRklfVVNFUl9JTkZPKSArIDYzOw0KPj4tICBJbmZv ICAgID0gQWxsb2NhdGVaZXJvUG9vbCAoTWVtU2l6ZSk7DQo+Pi0gIEFTU0VSVCAoSW5mbyAhPSBO VUxMKTsNCj4+LQ0KPj4tICAvLw0KPj4tICAvLyBHZXQgdXNlciBuYW1lIGluZm9ybWF0aW9uLg0K Pj4tICAvLw0KPj4tICBVc2VySW5mbyA9IE5VTEw7DQo+Pi0gIHdoaWxlIChUUlVFKSB7DQo+Pi0g ICAgSW5mb1NpemUgPSBNZW1TaXplOw0KPj4tICAgIC8vDQo+Pi0gICAgLy8gR2V0IG5leHQgdXNl ciBpbmZvcm1hdGlvbi4NCj4+LSAgICAvLw0KPj4tICAgIFN0YXR1cyA9IG1Vc2VyTWFuYWdlci0+ R2V0TmV4dEluZm8gKA0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlck1hbmFn ZXIsDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZXIsDQo+Pi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZVc2VySW5mbw0KPj4tICAgICAgICAgICAgICAgICAgICAgICAg ICAgICApOw0KPj4tICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4+LSAgICAgIGJyZWFr Ow0KPj4tICAgIH0NCj4+LQ0KPj4tICAgIFN0YXR1cyA9IG1Vc2VyTWFuYWdlci0+R2V0SW5mbyAo DQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VyTWFuYWdlciwNCj4+LSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgVXNlciwNCj4+LSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgVXNlckluZm8sDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZm8sDQo+ Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICZJbmZvU2l6ZQ0KPj4tICAgICAgICAgICAg ICAgICAgICAgICAgICAgICApOw0KPj4tICAgIGlmIChTdGF0dXMgPT0gRUZJX0JVRkZFUl9UT09f U01BTEwpIHsNCj4+LSAgICAgIE1lbVNpemUgPSBJbmZvU2l6ZTsNCj4+LSAgICAgIEZyZWVQb29s IChJbmZvKTsNCj4+LSAgICAgIEluZm8gPSBBbGxvY2F0ZVplcm9Qb29sIChNZW1TaXplKTsNCj4+ LSAgICAgIEFTU0VSVCAoSW5mbyAhPSBOVUxMKTsNCj4+LQ0KPj4tICAgICAgU3RhdHVzID0gbVVz ZXJNYW5hZ2VyLT5HZXRJbmZvICgNCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt VXNlck1hbmFnZXIsDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlciwNCj4+ LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VySW5mbywNCj4+LSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBJbmZvLA0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICZJbmZvU2l6ZQ0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+Pi0g ICAgfQ0KPj4tICAgIC8vDQo+Pi0gICAgLy8gQ2hlY2sgdXNlciBpbmZvcm1hdGlvbi4NCj4+LSAg ICAvLw0KPj4tICAgIGlmIChTdGF0dXMgPT0gRUZJX1NVQ0NFU1MpIHsNCj4+LSAgICAgIGlmIChJ bmZvLT5JbmZvVHlwZSA9PSBFRklfVVNFUl9JTkZPX05BTUVfUkVDT1JEKSB7DQo+Pi0gICAgICAg IE5hbWVMZW4gPSBJbmZvLT5JbmZvU2l6ZSAtIHNpemVvZiAoRUZJX1VTRVJfSU5GTyk7DQo+Pi0g ICAgICAgIGlmIChOYW1lTGVuID4gVVNFUl9OQU1FX0xFTkdUSCAqIHNpemVvZiAoQ0hBUjE2KSkg ew0KPj4tICAgICAgICAgIE5hbWVMZW4gPSBVU0VSX05BTUVfTEVOR1RIICogc2l6ZW9mIChDSEFS MTYpOw0KPj4tICAgICAgICB9DQo+Pi0gICAgICAgIEFTU0VSVCAoTmFtZUxlbiA+PSBzaXplb2Yg KENIQVIxNikpOw0KPj4tICAgICAgICBDb3B5TWVtIChVc2VyTmFtZSwgKFVJTlQ4ICopIChJbmZv ICsgMSksIE5hbWVMZW4pOw0KPj4tICAgICAgICBVc2VyTmFtZVtOYW1lTGVuIC8gc2l6ZW9mIChD SEFSMTYpIC0gMV0gPSAwOw0KPj4tICAgICAgICBVc2VySWQgPSBIaWlTZXRTdHJpbmcgKA0KPj4t ICAgICAgICAgICAgICAgICAgIG1DYWxsYmFja0luZm8tPkhpaUhhbmRsZSwNCj4+LSAgICAgICAg ICAgICAgICAgICAwLA0KPj4tICAgICAgICAgICAgICAgICAgIFVzZXJOYW1lLA0KPj4tICAgICAg ICAgICAgICAgICAgIE5VTEwNCj4+LSAgICAgICAgICAgICAgICAgICApOw0KPj4tICAgICAgICBp ZiAoVXNlcklkICE9IDApIHsNCj4+LSAgICAgICAgICBGcmVlUG9vbCAoSW5mbyk7DQo+Pi0gICAg ICAgICAgcmV0dXJuIFVzZXJJZDsNCj4+LSAgICAgICAgfQ0KPj4tICAgICAgfQ0KPj4tICAgIH0N Cj4+LSAgfQ0KPj4tDQo+Pi0gIEZyZWVQb29sIChJbmZvKTsNCj4+LSAgcmV0dXJuIDA7DQo+Pi19 DQo+Pi0NCj4+LQ0KPj4tLyoqDQo+Pi0gIEFkZCBhIHVzZXJuYW1lIGl0ZW0gaW4gZm9ybS4NCj4+ LQ0KPj4tICBAcGFyYW1baW5dICBVc2VyICAgICAgICAgIFBvaW50cyB0byB0aGUgdXNlciBwcm9m aWxlIHdob3NlIHVzZXJuYW1lIGlzIGFkZGVkLg0KPj4tICBAcGFyYW1baW5dICBJbmRleCAgICAg ICAgIFRoZSBpbmRleCBvZiB0aGUgdXNlciBpbiB0aGUgdXNlciBuYW1lIGxpc3QNCj4+LSAgQHBh cmFtW2luXSAgT3BDb2RlSGFuZGxlICBQb2ludHMgdG8gY29udGFpbmVyIGZvciBkeW5hbWljIGNy ZWF0ZWQNCj4+b3Bjb2Rlcy4NCj4+LQ0KPj4tKiovDQo+Pi1WT0lEDQo+Pi1BZGRVc2VyVG9Gb3Jt ICgNCj4+LSAgSU4gIEVGSV9VU0VSX1BST0ZJTEVfSEFORExFICAgICAgICAgICAgICAgICAgIFVz ZXIsDQo+Pi0gIElOICBVSU5UMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJ bmRleCwNCj4+LSAgSU4gIFZPSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICpPcENvZGVIYW5kbGUNCj4+LSAgKQ0KPj4tew0KPj4tICBFRklfU1RSSU5HX0lEIE5hbWVJZDsN Cj4+LQ0KPj4tICAvLw0KPj4tICAvLyBHZXQgdXNlciBuYW1lDQo+Pi0gIC8vDQo+Pi0gIE5hbWVJ ZCA9IEdldFVzZXJOYW1lIChVc2VyKTsNCj4+LSAgaWYgKE5hbWVJZCA9PSAwKSB7DQo+Pi0gICAg cmV0dXJuIDsNCj4+LSAgfQ0KPj4tDQo+Pi0gIC8vDQo+Pi0gIC8vIENyZWF0ZSB1c2VyIG5hbWUg b3B0aW9uLg0KPj4tICAvLw0KPj4tICBzd2l0Y2ggKEluZGV4ICYgS0VZX0ZJUlNUX0ZPUk1fTUFT Sykgew0KPj4tICBjYXNlIEtFWV9NT0RJRllfVVNFUjoNCj4+LSAgICBIaWlDcmVhdGVHb3RvT3BD b2RlICgNCj4+LSAgICAgIE9wQ29kZUhhbmRsZSwgICAgICAgICAgICAgICAgICAgLy8gQ29udGFp bmVyIGZvciBkeW5hbWljIGNyZWF0ZWQgb3Bjb2Rlcw0KPj4tICAgICAgRk9STUlEX1VTRVJfSU5G TywgICAgICAgICAgICAgICAvLyBUYXJnZXQgRm9ybSBJRA0KPj4tICAgICAgTmFtZUlkLCAgICAg ICAgICAgICAgICAgICAgICAgICAvLyBQcm9tcHQgdGV4dA0KPj4tICAgICAgU1RSSU5HX1RPS0VO IChTVFJfTlVMTF9TVFJJTkcpLCAvLyBIZWxwIHRleHQNCj4+LSAgICAgIEVGSV9JRlJfRkxBR19D QUxMQkFDSywgICAgICAgICAgLy8gUXVlc3Rpb24gZmxhZw0KPj4tICAgICAgSW5kZXggICAgICAg ICAgICAgICAgICAgICAgICAgICAvLyBRdWVzdGlvbiBJRA0KPj4tICAgICAgKTsNCj4+LSAgICBi cmVhazsNCj4+LQ0KPj4tICBjYXNlIEtFWV9ERUxfVVNFUjoNCj4+LSAgICBIaWlDcmVhdGVBY3Rp b25PcENvZGUgKA0KPj4tICAgICAgT3BDb2RlSGFuZGxlLCAgICAgICAgICAgICAgICAgICAvLyBD b250YWluZXIgZm9yIGR5bmFtaWMgY3JlYXRlZCBvcGNvZGVzDQo+Pi0gICAgICBJbmRleCwgICAg ICAgICAgICAgICAgICAgICAgICAgIC8vIFF1ZXN0aW9uIElEDQo+Pi0gICAgICBOYW1lSWQsICAg ICAgICAgICAgICAgICAgICAgICAgIC8vIFByb21wdCB0ZXh0DQo+Pi0gICAgICBTVFJJTkdfVE9L RU4gKFNUUl9OVUxMX1NUUklORyksIC8vIEhlbHAgdGV4dA0KPj4tICAgICAgRUZJX0lGUl9GTEFH X0NBTExCQUNLLCAgICAgICAgICAvLyBRdWVzdGlvbiBmbGFnDQo+Pi0gICAgICAwICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8vIEFjdGlvbiBTdHJpbmcgSUQNCj4+LSAgICAgICk7DQo+ Pi0gICAgYnJlYWs7DQo+Pi0NCj4+LSAgZGVmYXVsdDoNCj4+LSAgICBicmVhazsNCj4+LSAgfQ0K Pj4tfQ0KPj4tDQo+Pi0NCj4+LS8qKg0KPj4tICBEZWxldGUgdGhlIHVzZXIgc3BlY2lmaWVkIGJ5 IFVzZXJJbmRleCBpbiB1c2VyIHByb2ZpbGUgZGF0YWJhc2UuDQo+Pi0NCj4+LSAgQHBhcmFtW2lu XSAgVXNlckluZGV4ICAgICAgIFRoZSBpbmRleCBvZiB1c2VyIGluIHRoZSB1c2VyIG5hbWUgbGlz dA0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gYmUgZGVsZXRlZC4NCj4+LQ0K Pj4tKiovDQo+Pi1WT0lEDQo+Pi1EZWxldGVVc2VyICgNCj4+LSAgSU4gVUlOVDggICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJJbmRleA0KPj4tICApDQo+Pi17DQo+Pi0g IEVGSV9TVEFUVVMgICAgICAgICAgICAgIFN0YXR1czsNCj4+LSAgRUZJX1VTRVJfUFJPRklMRV9I QU5ETEUgVXNlcjsNCj4+LSAgRUZJX0lOUFVUX0tFWSAgICAgICAgICAgS2V5Ow0KPj4tICBFRklf VVNFUl9JTkZPX0hBTkRMRSAgICBVc2VySW5mbzsNCj4+LSAgRUZJX1VTRVJfSU5GTyAgICAgICAg ICAgKkluZm87DQo+Pi0gIFVJTlROICAgICAgICAgICAgICAgICAgIEluZm9TaXplOw0KPj4tDQo+ Pi0gIC8vDQo+Pi0gIC8vIEZpbmQgc3BlY2lmaWVkIHVzZXIgcHJvZmlsZSBhbmQgZGVsZXRlIGl0 Lg0KPj4tICAvLw0KPj4tICBVc2VyICAgID0gTlVMTDsNCj4+LSAgU3RhdHVzICA9IG1Vc2VyTWFu YWdlci0+R2V0TmV4dCAobVVzZXJNYW5hZ2VyLCAmVXNlcik7DQo+Pi0gIGlmIChFRklfRVJST1Ig KFN0YXR1cykpIHsNCj4+LSAgICBnb3RvIERvbmU7DQo+Pi0gIH0NCj4+LQ0KPj4tICB3aGlsZSAo VXNlckluZGV4ID4gMSkgew0KPj4tICAgIFN0YXR1cyA9IG1Vc2VyTWFuYWdlci0+R2V0TmV4dCAo bVVzZXJNYW5hZ2VyLCAmVXNlcik7DQo+Pi0gICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0K Pj4tICAgICAgZ290byBEb25lOw0KPj4tICAgIH0NCj4+LSAgICBVc2VySW5kZXgtLTsNCj4+LSAg fQ0KPj4tDQo+Pi0gIGlmIChVc2VySW5kZXggPT0gMSkgew0KPj4tICAgIC8vDQo+Pi0gICAgLy8g R2V0IHRoZSBpZGVudGlmaWNhdGlvbiBwb2xpY3kuDQo+Pi0gICAgLy8NCj4+LSAgICBTdGF0dXMg PSBGaW5kSW5mb0J5VHlwZSAoVXNlciwNCj4+RUZJX1VTRVJfSU5GT19JREVOVElUWV9QT0xJQ1lf UkVDT1JELCAmVXNlckluZm8pOw0KPj4tICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4+ LSAgICAgIGdvdG8gRG9uZTsNCj4+LSAgICB9DQo+Pi0NCj4+LSAgICBJbmZvU2l6ZSA9IDA7DQo+ Pi0gICAgSW5mbyA9IE5VTEw7DQo+Pi0gICAgU3RhdHVzICAgPSBtVXNlck1hbmFnZXItPkdldElu Zm8gKG1Vc2VyTWFuYWdlciwgVXNlciwgVXNlckluZm8sIEluZm8sDQo+PiZJbmZvU2l6ZSk7DQo+ Pi0gICAgaWYgKFN0YXR1cyA9PSBFRklfQlVGRkVSX1RPT19TTUFMTCkgew0KPj4tICAgICAgSW5m byA9IEFsbG9jYXRlWmVyb1Bvb2wgKEluZm9TaXplKTsNCj4+LSAgICAgIGlmIChJbmZvID09IE5V TEwpIHsNCj4+LSAgICAgICAgZ290byBEb25lOw0KPj4tICAgICAgfQ0KPj4tICAgICAgU3RhdHVz ID0gbVVzZXJNYW5hZ2VyLT5HZXRJbmZvIChtVXNlck1hbmFnZXIsIFVzZXIsIFVzZXJJbmZvLCBJ bmZvLA0KPj4mSW5mb1NpemUpOw0KPj4tICAgIH0NCj4+LQ0KPj4tICAgIC8vDQo+Pi0gICAgLy8g RGVsZXRlIHRoZSB1c2VyIG9uIHRoZSBjcmVkZW50aWFsIHByb3ZpZGVycyBieSBpdHMgaWRlbnRp ZmljYXRpb24gcG9saWN5Lg0KPj4tICAgIC8vDQo+Pi0gICAgQVNTRVJUIChJbmZvICE9IE5VTEwp Ow0KPj4tICAgIERlbGV0ZUNyZWRlbnRpYWxGcm9tUHJvdmlkZXJzICgoVUlOVDggKikoSW5mbyAr IDEpLCBJbmZvLT5JbmZvU2l6ZSAtDQo+c2l6ZW9mDQo+PihFRklfVVNFUl9JTkZPKSwgVXNlcik7 DQo+Pi0gICAgRnJlZVBvb2wgKEluZm8pOw0KPj4tDQo+Pi0gICAgU3RhdHVzID0gbVVzZXJNYW5h Z2VyLT5EZWxldGUgKG1Vc2VyTWFuYWdlciwgVXNlcik7DQo+Pi0gICAgaWYgKEVGSV9FUlJPUiAo U3RhdHVzKSkgew0KPj4tICAgICAgZ290byBEb25lOw0KPj4tICAgIH0NCj4+LSAgICBDcmVhdGVQ b3BVcCAoDQo+Pi0gICAgICBFRklfTElHSFRHUkFZIHwgRUZJX0JBQ0tHUk9VTkRfQkxVRSwNCj4+ LSAgICAgICZLZXksDQo+Pi0gICAgICBMIkRlbGV0ZSBVc2VyIFN1Y2NlZWQhIiwNCj4+LSAgICAg IEwiIiwNCj4+LSAgICAgIEwiUGxlYXNlIFByZXNzIEFueSBLZXkgdG8gQ29udGludWUgLi4uIiwN Cj4+LSAgICAgIE5VTEwNCj4+LSAgICAgICk7DQo+Pi0gICAgcmV0dXJuIDsNCj4+LSAgfQ0KPj4t DQo+Pi1Eb25lOg0KPj4tICBDcmVhdGVQb3BVcCAoDQo+Pi0gICAgRUZJX0xJR0hUR1JBWSB8IEVG SV9CQUNLR1JPVU5EX0JMVUUsDQo+Pi0gICAgJktleSwNCj4+LSAgICBMIkRlbGV0ZSBVc2VyIEZh aWxlZCEiLA0KPj4tICAgIEwiIiwNCj4+LSAgICBMIlBsZWFzZSBQcmVzcyBBbnkgS2V5IHRvIENv bnRpbnVlIC4uLiIsDQo+Pi0gICAgTlVMTA0KPj4tICAgICk7DQo+Pi19DQo+Pi0NCj4+LQ0KPj4t LyoqDQo+Pi0gIERpc3BsYXkgdXNlciBzZWxlY3QgZm9ybSwgY2FiIHNlbGVjdCBhIHVzZXIgdG8g ZGVsZXRlLg0KPj4tDQo+Pi0qKi8NCj4+LVZPSUQNCj4+LVNlbGVjdFVzZXJUb0RlbGV0ZSAoDQo+ Pi0gIFZPSUQNCj4+LSAgKQ0KPj4tew0KPj4tICBFRklfU1RBVFVTICAgICAgICAgICAgICBTdGF0 dXM7DQo+Pi0gIFVJTlQ4ICAgICAgICAgICAgICAgICAgIEluZGV4Ow0KPj4tICBFRklfVVNFUl9Q Uk9GSUxFX0hBTkRMRSBVc2VyOw0KPj4tICBFRklfVVNFUl9QUk9GSUxFX0hBTkRMRSBDdXJyZW50 VXNlcjsNCj4+LSAgVk9JRCAgICAgICAgICAgICAgICAgICAgKlN0YXJ0T3BDb2RlSGFuZGxlOw0K Pj4tICBWT0lEICAgICAgICAgICAgICAgICAgICAqRW5kT3BDb2RlSGFuZGxlOw0KPj4tICBFRklf SUZSX0dVSURfTEFCRUwgICAgICAqU3RhcnRMYWJlbDsNCj4+LSAgRUZJX0lGUl9HVUlEX0xBQkVM ICAgICAgKkVuZExhYmVsOw0KPj4tDQo+Pi0gIC8vDQo+Pi0gIC8vIEluaXRpYWxpemUgdGhlIGNv bnRhaW5lciBmb3IgZHluYW1pYyBvcGNvZGVzLg0KPj4tICAvLw0KPj4tICBTdGFydE9wQ29kZUhh bmRsZSA9IEhpaUFsbG9jYXRlT3BDb2RlSGFuZGxlICgpOw0KPj4tICBBU1NFUlQgKFN0YXJ0T3BD b2RlSGFuZGxlICE9IE5VTEwpOw0KPj4tDQo+Pi0gIEVuZE9wQ29kZUhhbmRsZSA9IEhpaUFsbG9j YXRlT3BDb2RlSGFuZGxlICgpOw0KPj4tICBBU1NFUlQgKEVuZE9wQ29kZUhhbmRsZSAhPSBOVUxM KTsNCj4+LQ0KPj4tICAvLw0KPj4tICAvLyBDcmVhdGUgSGlpIEV4dGVuZCBMYWJlbCBPcENvZGUu DQo+Pi0gIC8vDQo+Pi0gIFN0YXJ0TGFiZWwgPSAoRUZJX0lGUl9HVUlEX0xBQkVMICopIEhpaUNy ZWF0ZUd1aWRPcENvZGUgKA0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFN0YXJ0T3BDb2RlSGFuZGxlLA0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICZnRWZpSWZyVGlhbm9HdWlkLA0KPj4tICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIE5VTEwsDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc2l6ZW9mIChFRklfSUZSX0dVSURfTEFCRUwpDQo+Pi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4+LSAgU3RhcnRMYWJlbC0+RXh0ZW5kT3BDb2Rl ICA9IEVGSV9JRlJfRVhURU5EX09QX0xBQkVMOw0KPj4tICBTdGFydExhYmVsLT5OdW1iZXIgICAg ICAgID0gTEFCRUxfVVNFUl9ERUxfRlVOQzsNCj4+LQ0KPj4tICBFbmRMYWJlbCA9IChFRklfSUZS X0dVSURfTEFCRUwgKikgSGlpQ3JlYXRlR3VpZE9wQ29kZSAoDQo+Pi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEVuZE9wQ29kZUhhbmRsZSwNCj4+LSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJmdFZmlJZnJUaWFub0d1aWQsDQo+Pi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsDQo+Pi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHNpemVvZiAoRUZJX0lGUl9HVUlEX0xBQkVMKQ0KPj4tICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KPj4tICBFbmRMYWJlbC0+RXh0ZW5k T3BDb2RlICA9IEVGSV9JRlJfRVhURU5EX09QX0xBQkVMOw0KPj4tICBFbmRMYWJlbC0+TnVtYmVy ICAgICAgICA9IExBQkVMX0VORDsNCj4+LQ0KPj4tICAvLw0KPj4tICAvLyBBZGQgZWFjaCB1c2Vy IGNhbiBiZSBkZWxldGVkLg0KPj4tICAvLw0KPj4tICBVc2VyICA9IE5VTEw7DQo+Pi0gIEluZGV4 ID0gMTsNCj4+LSAgbVVzZXJNYW5hZ2VyLT5DdXJyZW50IChtVXNlck1hbmFnZXIsICZDdXJyZW50 VXNlcik7DQo+Pi0gIHdoaWxlIChUUlVFKSB7DQo+Pi0gICAgU3RhdHVzID0gbVVzZXJNYW5hZ2Vy LT5HZXROZXh0IChtVXNlck1hbmFnZXIsICZVc2VyKTsNCj4+LSAgICBpZiAoRUZJX0VSUk9SIChT dGF0dXMpKSB7DQo+Pi0gICAgICBicmVhazsNCj4+LSAgICB9DQo+Pi0NCj4+LSAgICBpZiAoVXNl ciAhPSBDdXJyZW50VXNlcikgew0KPj4tICAgICAgQWRkVXNlclRvRm9ybSAoDQo+Pi0gICAgICAg IFVzZXIsDQo+Pi0gICAgICAgIChVSU5UMTYpKEtFWV9ERUxfVVNFUiB8IEtFWV9TRUxFQ1RfVVNF UiB8IEluZGV4KSwNCj4+LSAgICAgICAgU3RhcnRPcENvZGVIYW5kbGUNCj4+LSAgICAgICAgKTsN Cj4+LSAgICB9DQo+Pi0gICAgSW5kZXgrKzsNCj4+LSAgfQ0KPj4tDQo+Pi0gIEhpaVVwZGF0ZUZv cm0gKA0KPj4tICAgIG1DYWxsYmFja0luZm8tPkhpaUhhbmRsZSwgLy8gSElJIGhhbmRsZQ0KPj4t ICAgICZnVXNlclByb2ZpbGVNYW5hZ2VyR3VpZCwgLy8gRm9ybXNldCBHVUlEDQo+Pi0gICAgRk9S TUlEX0RFTF9VU0VSLCAgICAgICAgICAvLyBGb3JtIElEDQo+Pi0gICAgU3RhcnRPcENvZGVIYW5k bGUsICAgICAgICAvLyBMYWJlbCBmb3Igd2hlcmUgdG8gaW5zZXJ0IG9wY29kZXMNCj4+LSAgICBF bmRPcENvZGVIYW5kbGUgICAgICAgICAgIC8vIFJlcGxhY2UgZGF0YQ0KPj4tICAgICk7DQo+Pi0N Cj4+LSAgSGlpRnJlZU9wQ29kZUhhbmRsZSAoU3RhcnRPcENvZGVIYW5kbGUpOw0KPj4tICBIaWlG cmVlT3BDb2RlSGFuZGxlIChFbmRPcENvZGVIYW5kbGUpOw0KPj4tfQ0KPj5kaWZmIC0tZ2l0DQo+ PmEvU2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9uL1VzZXJQcm9maWxlTWFuYWdlckR4ZS9V c2VyUHJvZmlsZU1hbmENCj5nDQo+PmVyLmMNCj4+Yi9TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmlj YXRpb24vVXNlclByb2ZpbGVNYW5hZ2VyRHhlL1VzZXJQcm9maWxlTWFuYQ0KPmcNCj4+ZXIuYw0K Pj5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCj4+aW5kZXggZTczYmEzYThmYy4uMDAwMDAwMDAw MA0KPj4tLS0NCj4+YS9TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vVXNlclByb2ZpbGVN YW5hZ2VyRHhlL1VzZXJQcm9maWxlTWFuYQ0KPmcNCj4+ZXIuYw0KPj4rKysgL2Rldi9udWxsDQo+ PkBAIC0xLDg4NyArMCwwIEBADQo+Pi0vKiogQGZpbGUNCj4+LSAgVGhpcyBkcml2ZXIgaXMgYSBj b25maWd1cmF0aW9uIHRvb2wgZm9yIGFkZGluZywgZGVsZXRpbmcgb3IgbW9kaWZ5aW5nIHVzZXIN Cj4+LSAgcHJvZmlsZXMsIGluY2x1ZGluZyBnYXRoZXJpbmcgdGhlIG5lY2Vzc2FyeSBpbmZvcm1h dGlvbiB0byBhc2NlcnRhaW4gdGhlaXINCj4+LSAgaWRlbnRpdHkgaW4gdGhlIGZ1dHVyZSwgdXBk YXRpbmcgdXNlciBhY2Nlc3MgcG9saWN5IGFuZCBpZGVudGlmaWNhdGlvbg0KPj4tICBwb2xpY3ks IGV0Yy4NCj4+LQ0KPj4tQ29weXJpZ2h0IChjKSAyMDA5IC0gMjAxOCwgSW50ZWwgQ29ycG9yYXRp b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPj4tKEMpIENvcHlyaWdodCAyMDE4IEhld2xl dHQgUGFja2FyZCBFbnRlcnByaXNlIERldmVsb3BtZW50IExQPEJSPg0KPj4tVGhpcyBwcm9ncmFt IGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KPj4tYXJlIGxpY2Vuc2VkIGFuZCBtYWRl IGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEJTRA0KPj5M aWNlbnNlDQo+Pi13aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbi4gIFRoZSBmdWxs IHRleHQgb2YgdGhlIGxpY2Vuc2UgbWF5IGJlDQo+PmZvdW5kIGF0DQo+Pi1odHRwOi8vb3BlbnNv dXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vuc2UucGhwDQo+Pi0NCj4+LVRIRSBQUk9HUkFNIElT IERJU1RSSUJVVEVEIFVOREVSIFRIRSBCU0QgTElDRU5TRSBPTiBBTiAiQVMgSVMiDQo+QkFTSVMs DQo+Pi1XSVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TIE9GIEFOWSBLSU5ELCBF SVRIRVINCj4+RVhQUkVTUyBPUiBJTVBMSUVELg0KPj4tDQo+Pi0qKi8NCj4+LQ0KPj4tI2luY2x1 ZGUgIlVzZXJQcm9maWxlTWFuYWdlci5oIg0KPj4tDQo+Pi1FRklfVVNFUl9NQU5BR0VSX1BST1RP Q09MICptVXNlck1hbmFnZXIgICAgICAgICAgID0gTlVMTDsNCj4+LUNSRURFTlRJQUxfUFJPVklE RVJfSU5GTyAgKm1Qcm92aWRlckluZm8gICAgICAgICAgPSBOVUxMOw0KPj4tVUlOVDggICAgICAg ICAgICAgICAgICAgICBtUHJvdmlkZXJDaG9pY2U7DQo+Pi1VSU5UOCAgICAgICAgICAgICAgICAg ICAgIG1Db25uY2V0TG9naWNhbDsNCj4+LVVTRVJfSU5GT19BQ0NFU1MgICAgICAgICAgbUFjY2Vz c0luZm87DQo+Pi1VU0VSX0lORk8gICAgICAgICAgICAgICAgIG1Vc2VySW5mbzsNCj4+LVVTRVJf UFJPRklMRV9NQU5BR0VSX0NBTExCQUNLX0lORk8gICptQ2FsbGJhY2tJbmZvOw0KPj4tSElJX1ZF TkRPUl9ERVZJQ0VfUEFUSCAgbUhpaVZlbmRvckRldmljZVBhdGggPSB7DQo+Pi0gIHsNCj4+LSAg ICB7DQo+Pi0gICAgICBIQVJEV0FSRV9ERVZJQ0VfUEFUSCwNCj4+LSAgICAgIEhXX1ZFTkRPUl9E UCwNCj4+LSAgICAgIHsNCj4+LSAgICAgICAgKFVJTlQ4KSAoc2l6ZW9mIChWRU5ET1JfREVWSUNF X1BBVEgpKSwNCj4+LSAgICAgICAgKFVJTlQ4KSAoKHNpemVvZiAoVkVORE9SX0RFVklDRV9QQVRI KSkgPj4gOCkNCj4+LSAgICAgIH0NCj4+LSAgICB9LA0KPj4tICAgIFVTRVJfUFJPRklMRV9NQU5B R0VSX0dVSUQNCj4+LSAgfSwNCj4+LSAgew0KPj4tICAgIEVORF9ERVZJQ0VfUEFUSF9UWVBFLA0K Pj4tICAgIEVORF9FTlRJUkVfREVWSUNFX1BBVEhfU1VCVFlQRSwNCj4+LSAgICB7DQo+Pi0gICAg ICAoVUlOVDgpIChFTkRfREVWSUNFX1BBVEhfTEVOR1RIKSwNCj4+LSAgICAgIChVSU5UOCkgKChF TkRfREVWSUNFX1BBVEhfTEVOR1RIKSA+PiA4KQ0KPj4tICAgIH0NCj4+LSAgfQ0KPj4tfTsNCj4+ LQ0KPj4tDQo+Pi0vKioNCj4+LSAgR2V0IHN0cmluZyBieSBzdHJpbmcgaWQgZnJvbSBISUkgSW50 ZXJmYWNlLg0KPj4tDQo+Pi0NCj4+LSAgQHBhcmFtW2luXSBJZCAgICAgIFN0cmluZyBJRCB0byBn ZXQgdGhlIHN0cmluZyBmcm9tLg0KPj4tDQo+Pi0gIEByZXR2YWwgIENIQVIxNiAqICBTdHJpbmcg ZnJvbSBJRC4NCj4+LSAgQHJldHZhbCAgTlVMTCAgICAgIElmIGVycm9yIG9jY3Vycy4NCj4+LQ0K Pj4tKiovDQo+Pi1DSEFSMTYgKg0KPj4tR2V0U3RyaW5nQnlJZCAoDQo+Pi0gIElOIEVGSV9TVFJJ TkdfSUQgICAgICAgICAgICAgSWQNCj4+LSAgKQ0KPj4tew0KPj4tICAvLw0KPj4tICAvLyBHZXQg dGhlIGN1cnJlbnQgc3RyaW5nIGZvciB0aGUgY3VycmVudCBMYW5ndWFnZS4NCj4+LSAgLy8NCj4+ LSAgcmV0dXJuIEhpaUdldFN0cmluZyAobUNhbGxiYWNrSW5mby0+SGlpSGFuZGxlLCBJZCwgTlVM TCk7DQo+Pi19DQo+Pi0NCj4+LQ0KPj4tLyoqDQo+Pi0gIFRoaXMgZnVuY3Rpb24gZ2V0cyBhbGwg dGhlIGNyZWRlbnRpYWwgcHJvdmlkZXJzIGluIHRoZSBzeXN0ZW0gYW5kIHNhdmVkDQo+dGhlbQ0K Pj4tICB0byBtUHJvdmlkZXJJbmZvLg0KPj4tDQo+Pi0gIEByZXR2YWwgRUZJX1NVQ0VTUyAgICAg SW5pdCBjcmVkZW50aWFsIHByb3ZpZGVyIGRhdGFiYXNlIHN1Y2Nlc3NmdWxseS4NCj4+LSAgQHJl dHZhbCBPdGhlcnMgICAgICAgICBGYWlsIHRvIGluaXQgY3JlZGVudGlhbCBwcm92aWRlciBkYXRh YmFzZS4NCj4+LQ0KPj4tKiovDQo+Pi1FRklfU1RBVFVTDQo+Pi1Jbml0UHJvdmlkZXJJbmZvICgN Cj4+LSAgVk9JRA0KPj4tICApDQo+Pi17DQo+Pi0gIEVGSV9TVEFUVVMgIFN0YXR1czsNCj4+LSAg VUlOVE4gICAgICAgSGFuZGxlQ291bnQ7DQo+Pi0gIEVGSV9IQU5ETEUgICpIYW5kbGVCdWY7DQo+ Pi0gIFVJTlROICAgICAgIEluZGV4Ow0KPj4tDQo+Pi0gIC8vDQo+Pi0gIC8vIFRyeSB0byBmaW5k IGFsbCB0aGUgdXNlciBjcmVkZW50aWFsIHByb3ZpZGVyIGRyaXZlci4NCj4+LSAgLy8NCj4+LSAg SGFuZGxlQ291bnQgPSAwOw0KPj4tICBIYW5kbGVCdWYgICA9IE5VTEw7DQo+Pi0gIFN0YXR1cyA9 IGdCUy0+TG9jYXRlSGFuZGxlQnVmZmVyICgNCj4+LSAgICAgICAgICAgICAgICAgIEJ5UHJvdG9j b2wsDQo+Pi0gICAgICAgICAgICAgICAgICAmZ0VmaVVzZXJDcmVkZW50aWFsMlByb3RvY29sR3Vp ZCwNCj4+LSAgICAgICAgICAgICAgICAgIE5VTEwsDQo+Pi0gICAgICAgICAgICAgICAgICAmSGFu ZGxlQ291bnQsDQo+Pi0gICAgICAgICAgICAgICAgICAmSGFuZGxlQnVmDQo+Pi0gICAgICAgICAg ICAgICAgICApOw0KPj4tICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+Pi0gICAgcmV0dXJu IFN0YXR1czsNCj4+LSAgfQ0KPj4tDQo+Pi0gIC8vDQo+Pi0gIC8vIEdldCBwcm92aWRlciBpbmZv bWF0aW9uLg0KPj4tICAvLw0KPj4tICBpZiAobVByb3ZpZGVySW5mbyAhPSBOVUxMKSB7DQo+Pi0g ICAgRnJlZVBvb2wgKG1Qcm92aWRlckluZm8pOw0KPj4tICB9DQo+Pi0gIG1Qcm92aWRlckluZm8g PSBBbGxvY2F0ZVplcm9Qb29sICgNCj4+LSAgICAgICAgICAgICAgICAgICAgc2l6ZW9mIChDUkVE RU5USUFMX1BST1ZJREVSX0lORk8pIC0NCj4+LSAgICAgICAgICAgICAgICAgICAgc2l6ZW9mIChF RklfVVNFUl9DUkVERU5USUFMMl9QUk9UT0NPTCAqKSArDQo+Pi0gICAgICAgICAgICAgICAgICAg IEhhbmRsZUNvdW50ICogc2l6ZW9mIChFRklfVVNFUl9DUkVERU5USUFMMl9QUk9UT0NPTCAqKQ0K Pj4tICAgICAgICAgICAgICAgICAgICApOw0KPj4tICBpZiAobVByb3ZpZGVySW5mbyA9PSBOVUxM KSB7DQo+Pi0gICAgRnJlZVBvb2wgKEhhbmRsZUJ1Zik7DQo+Pi0gICAgcmV0dXJuIEVGSV9PVVRf T0ZfUkVTT1VSQ0VTOw0KPj4tICB9DQo+Pi0NCj4+LSAgbVByb3ZpZGVySW5mby0+Q291bnQgPSBI YW5kbGVDb3VudDsNCj4+LSAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgSGFuZGxlQ291bnQ7IElu ZGV4KyspIHsNCj4+LSAgICBTdGF0dXMgPSBnQlMtPkhhbmRsZVByb3RvY29sICgNCj4+LSAgICAg ICAgICAgICAgICAgICAgSGFuZGxlQnVmW0luZGV4XSwNCj4+LSAgICAgICAgICAgICAgICAgICAg JmdFZmlVc2VyQ3JlZGVudGlhbDJQcm90b2NvbEd1aWQsDQo+Pi0gICAgICAgICAgICAgICAgICAg IChWT0lEICoqKSAmbVByb3ZpZGVySW5mby0+UHJvdmlkZXJbSW5kZXhdDQo+Pi0gICAgICAgICAg ICAgICAgICAgICk7DQo+Pi0gICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPj4tICAgICAg RnJlZVBvb2wgKEhhbmRsZUJ1Zik7DQo+Pi0gICAgICBGcmVlUG9vbCAobVByb3ZpZGVySW5mbyk7 DQo+Pi0gICAgICBtUHJvdmlkZXJJbmZvID0gTlVMTDsNCj4+LSAgICAgIHJldHVybiBTdGF0dXM7 DQo+Pi0gICAgfQ0KPj4tICB9DQo+Pi0NCj4+LSAgRnJlZVBvb2wgKEhhbmRsZUJ1Zik7DQo+Pi0g IHJldHVybiBFRklfU1VDQ0VTUzsNCj4+LX0NCj4+LQ0KPj4tDQo+Pi0vKioNCj4+LSAgVGhpcyBm dW5jdGlvbiBwcm9jZXNzZXMgY2hhbmdlcyBpbiB1c2VyIHByb2ZpbGUgY29uZmlndXJhdGlvbi4N Cj4+LQ0KPj4tICBAcGFyYW0gIFRoaXMgICAgICAgICAgICAgICAgICAgUG9pbnRzIHRvIHRoZSBF RklfSElJX0NPTkZJR19BQ0NFU1NfUFJPVE9DT0wuDQo+Pi0gIEBwYXJhbSAgQWN0aW9uICAgICAg ICAgICAgICAgICBTcGVjaWZpZXMgdGhlIHR5cGUgb2YgYWN0aW9uIHRha2VuIGJ5IHRoZSBicm93 c2VyLg0KPj4tICBAcGFyYW0gIFF1ZXN0aW9uSWQgICAgICAgICAgICAgQSB1bmlxdWUgdmFsdWUg d2hpY2ggaXMgc2VudCB0byB0aGUgb3JpZ2luYWwNCj4+LSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGV4cG9ydGluZyBkcml2ZXIgc28gdGhhdCBpdCBjYW4gaWRlbnRpZnkgdGhlIHR5 cGUNCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIGRhdGEgdG8gZXhwZWN0 Lg0KPj4tICBAcGFyYW0gIFR5cGUgICAgICAgICAgICAgICAgICAgVGhlIHR5cGUgb2YgdmFsdWUg Zm9yIHRoZSBxdWVzdGlvbi4NCj4+LSAgQHBhcmFtICBWYWx1ZSAgICAgICAgICAgICAgICAgIEEg cG9pbnRlciB0byB0aGUgZGF0YSBiZWluZyBzZW50IHRvIHRoZSBvcmlnaW5hbA0KPj4tICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwb3J0aW5nIGRyaXZlci4NCj4+LSAgQHBhcmFt ICBBY3Rpb25SZXF1ZXN0ICAgICAgICAgIE9uIHJldHVybiwgcG9pbnRzIHRvIHRoZSBhY3Rpb24g cmVxdWVzdGVkIGJ5DQo+PnRoZQ0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y2FsbGJhY2sgZnVuY3Rpb24uDQo+Pi0NCj4+LSAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAg ICAgIFRoZSBjYWxsYmFjayBzdWNjZXNzZnVsbHkgaGFuZGxlZCB0aGUgYWN0aW9uLg0KPj4tICBA cmV0dmFsIE90aGVycyAgICAgICAgICAgICAgICAgRmFpbCB0byBoYW5kbGUgdGhlIGFjdGlvbi4N Cj4+LQ0KPj4tKiovDQo+Pi1FRklfU1RBVFVTDQo+Pi1FRklBUEkNCj4+LVVzZXJQcm9maWxlTWFu YWdlckNhbGxiYWNrICgNCj4+LSAgSU4gIENPTlNUIEVGSV9ISUlfQ09ORklHX0FDQ0VTU19QUk9U T0NPTCAgICAgICpUaGlzLA0KPj4tICBJTiAgRUZJX0JST1dTRVJfQUNUSU9OICAgICAgICAgICAg ICAgICAgICAgICAgQWN0aW9uLA0KPj4tICBJTiAgRUZJX1FVRVNUSU9OX0lEICAgICAgICAgICAg ICAgICAgICAgICAgICAgUXVlc3Rpb25JZCwNCj4+LSAgSU4gIFVJTlQ4ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFR5cGUsDQo+Pi0gIElOICBFRklfSUZSX1RZUEVfVkFMVUUg ICAgICAgICAgICAgICAgICAgICAgICAqVmFsdWUsDQo+Pi0gIE9VVCBFRklfQlJPV1NFUl9BQ1RJ T05fUkVRVUVTVCAgICAgICAgICAgICAgICAqQWN0aW9uUmVxdWVzdA0KPj4tICApDQo+Pi17DQo+ Pi0gIEVGSV9TVEFUVVMgICAgICAgICAgICAgICBTdGF0dXM7DQo+Pi0gIEVGSV9JTlBVVF9LRVkg ICAgICAgICAgICBLZXk7DQo+Pi0gIFVJTlQzMiAgICAgICAgICAgICAgICAgICBDdXJyZW50QWNj ZXNzUmlnaHQ7DQo+Pi0gIENIQVIxNiAgICAgICAgICAgICAgICAgICAqUXVlc3Rpb25TdHI7DQo+ Pi0gIENIQVIxNiAgICAgICAgICAgICAgICAgICAqUHJvbXB0U3RyOw0KPj4tICBWT0lEICAgICAg ICAgICAgICAgICAgICAgKlN0YXJ0T3BDb2RlSGFuZGxlOw0KPj4tICBWT0lEICAgICAgICAgICAg ICAgICAgICAgKkVuZE9wQ29kZUhhbmRsZTsNCj4+LSAgRUZJX0lGUl9HVUlEX0xBQkVMICAgICAg ICpTdGFydExhYmVsOw0KPj4tICBFRklfSUZSX0dVSURfTEFCRUwgICAgICAgKkVuZExhYmVsOw0K Pj4tICBFRklfVVNFUl9QUk9GSUxFX0hBTkRMRSAgQ3VycmVudFVzZXI7DQo+Pi0NCj4+LSAgU3Rh dHVzID0gRUZJX1NVQ0NFU1M7DQo+Pi0NCj4+LSAgc3dpdGNoIChBY3Rpb24pIHsNCj4+LSAgY2Fz ZSBFRklfQlJPV1NFUl9BQ1RJT05fRk9STV9PUEVOOg0KPj4tICAgIHsNCj4+LSAgICAgIC8vDQo+ Pi0gICAgICAvLyBVcGRhdGUgdXNlciBtYW5hZ2UgRm9ybSB3aGVuIHVzZXIgbWFuYWdlIEZvcm0g aXMgb3BlbmVkLg0KPj4tICAgICAgLy8gVGhpcyB3aWxsIGJlIGRvbmUgb25seSBpbiBGT1JNX09Q RU4gQ2FsbEJhY2sgb2YgcXVlc3Rpb24gd2l0aA0KPj5RVUVTVElPTklEX1VTRVJfTUFOQUdFIGZy b20gdXNlciBtYW5hZ2UgRm9ybS4NCj4+LSAgICAgIC8vDQo+Pi0gICAgICBpZiAoUXVlc3Rpb25J ZCAhPSBRVUVTVElPTklEX1VTRVJfTUFOQUdFKSB7DQo+Pi0gICAgICAgIHJldHVybiBFRklfU1VD Q0VTUzsNCj4+LSAgICAgIH0NCj4+LQ0KPj4tICAgICAgLy8NCj4+LSAgICAgIC8vIEdldCBjdXJy ZW50IHVzZXINCj4+LSAgICAgIC8vDQo+Pi0gICAgICBDdXJyZW50VXNlciA9IE5VTEw7DQo+Pi0g ICAgICBtVXNlck1hbmFnZXItPkN1cnJlbnQgKG1Vc2VyTWFuYWdlciwgJkN1cnJlbnRVc2VyKTsN Cj4+LSAgICAgIGlmIChDdXJyZW50VXNlciA9PSBOVUxMKSB7DQo+Pi0gICAgICAgIERFQlVHICgo REVCVUdfRVJST1IsICJFcnJvcjogY3VycmVudCB1c2VyIGRvZXMgbm90IGV4aXN0IVxuIikpOw0K Pj4tICAgICAgICByZXR1cm4gRUZJX05PVF9SRUFEWTsNCj4+LSAgICAgIH0NCj4+LQ0KPj4tICAg ICAgLy8NCj4+LSAgICAgIC8vIEdldCBjdXJyZW50IHVzZXIncyByaWdodCBpbmZvcm1hdGlvbi4N Cj4+LSAgICAgIC8vDQo+Pi0gICAgICBTdGF0dXMgPSBHZXRBY2Nlc3NSaWdodCAoJkN1cnJlbnRB Y2Nlc3NSaWdodCk7DQo+Pi0gICAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+Pi0gICAg ICAgIEN1cnJlbnRBY2Nlc3NSaWdodCA9IEVGSV9VU0VSX0lORk9fQUNDRVNTX0VOUk9MTF9TRUxG Ow0KPj4tICAgICAgfQ0KPj4tDQo+Pi0gICAgICAvLw0KPj4tICAgICAgLy8gSW5pdCBjcmVkZW50 aWFsIHByb3ZpZGVyIGluZm9ybWF0aW9uLg0KPj4tICAgICAgLy8NCj4+LSAgICAgIFN0YXR1cyA9 IEluaXRQcm92aWRlckluZm8gKCk7DQo+Pi0gICAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7 DQo+Pi0gICAgICAgIHJldHVybiBTdGF0dXM7DQo+Pi0gICAgICB9DQo+Pi0NCj4+LSAgICAgIC8v DQo+Pi0gICAgICAvLyBJbml0aWFsaXplIHRoZSBjb250YWluZXIgZm9yIGR5bmFtaWMgb3Bjb2Rl cy4NCj4+LSAgICAgIC8vDQo+Pi0gICAgICBTdGFydE9wQ29kZUhhbmRsZSA9IEhpaUFsbG9jYXRl T3BDb2RlSGFuZGxlICgpOw0KPj4tICAgICAgQVNTRVJUIChTdGFydE9wQ29kZUhhbmRsZSAhPSBO VUxMKTsNCj4+LQ0KPj4tICAgICAgRW5kT3BDb2RlSGFuZGxlID0gSGlpQWxsb2NhdGVPcENvZGVI YW5kbGUgKCk7DQo+Pi0gICAgICBBU1NFUlQgKEVuZE9wQ29kZUhhbmRsZSAhPSBOVUxMKTsNCj4+ LQ0KPj4tICAgICAgLy8NCj4+LSAgICAgIC8vIENyZWF0ZSBIaWkgRXh0ZW5kIExhYmVsIE9wQ29k ZS4NCj4+LSAgICAgIC8vDQo+Pi0gICAgICBTdGFydExhYmVsID0gKEVGSV9JRlJfR1VJRF9MQUJF TCAqKSBIaWlDcmVhdGVHdWlkT3BDb2RlICgNCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgU3RhcnRPcENvZGVIYW5kbGUsDQo+Pi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZnRWZpSWZyVGlhbm9HdWlkLA0KPj4tICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLA0KPj4tICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YgKEVGSV9JRlJfR1VJRF9M QUJFTCkNCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsN Cj4+LSAgICAgIFN0YXJ0TGFiZWwtPkV4dGVuZE9wQ29kZSAgPSBFRklfSUZSX0VYVEVORF9PUF9M QUJFTDsNCj4+LSAgICAgIFN0YXJ0TGFiZWwtPk51bWJlciAgICAgICAgPSBMQUJFTF9VU0VSX01B TkFHRV9GVU5DOw0KPj4tDQo+Pi0gICAgICBFbmRMYWJlbCA9IChFRklfSUZSX0dVSURfTEFCRUwg KikgSGlpQ3JlYXRlR3VpZE9wQ29kZSAoDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBFbmRPcENvZGVIYW5kbGUsDQo+Pi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAmZ0VmaUlmclRpYW5vR3VpZCwNCj4+LSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsDQo+Pi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YgKEVGSV9JRlJfR1VJRF9MQUJFTCkNCj4+LSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+Pi0gICAgICBFbmRM YWJlbC0+RXh0ZW5kT3BDb2RlICA9IEVGSV9JRlJfRVhURU5EX09QX0xBQkVMOw0KPj4tICAgICAg RW5kTGFiZWwtPk51bWJlciAgICAgICAgPSBMQUJFTF9FTkQ7DQo+Pi0NCj4+LSAgICAgIC8vDQo+ Pi0gICAgICAvLyBBZGQgdXNlciBwcm9maWxlIG9wdGlvbi4NCj4+LSAgICAgIC8vDQo+Pi0gICAg ICBpZiAoKEN1cnJlbnRBY2Nlc3NSaWdodCA9PSBFRklfVVNFUl9JTkZPX0FDQ0VTU19NQU5BR0Up IHx8DQo+Pi0gICAgICAgICAgKEN1cnJlbnRBY2Nlc3NSaWdodCA9PSBFRklfVVNFUl9JTkZPX0FD Q0VTU19FTlJPTExfT1RIRVJTKQ0KPj4tICAgICAgICAgICkgew0KPj4tICAgICAgICBIaWlDcmVh dGVBY3Rpb25PcENvZGUgKA0KPj4tICAgICAgICAgIFN0YXJ0T3BDb2RlSGFuZGxlLCAgICAgICAg ICAgICAgICAgIC8vIENvbnRhaW5lciBmb3IgZHluYW1pYyBjcmVhdGVkDQo+b3Bjb2Rlcw0KPj4t ICAgICAgICAgIEtFWV9BRERfVVNFUiwgICAgICAgICAgICAgICAgICAgICAgIC8vIFF1ZXN0aW9u IElEDQo+Pi0gICAgICAgICAgU1RSSU5HX1RPS0VOIChTVFJfQUREX1VTRVJfVElUTEUpLCAgLy8g UHJvbXB0IHRleHQNCj4+LSAgICAgICAgICBTVFJJTkdfVE9LRU4gKFNUUl9BRERfVVNFUl9IRUxQ KSwgICAvLyBIZWxwIHRleHQNCj4+LSAgICAgICAgICBFRklfSUZSX0ZMQUdfQ0FMTEJBQ0ssICAg ICAgICAgICAgICAvLyBRdWVzdGlvbiBmbGFnDQo+Pi0gICAgICAgICAgMCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLy8gQWN0aW9uIFN0cmluZyBJRA0KPj4tICAgICAgICAgICk7 DQo+Pi0gICAgICB9DQo+Pi0NCj4+LSAgICAgIC8vDQo+Pi0gICAgICAvLyBBZGQgbW9kaWZ5IHVz ZXIgcHJvZmlsZSBvcHRpb24uDQo+Pi0gICAgICAvLw0KPj4tICAgICAgSGlpQ3JlYXRlR290b09w Q29kZSAoDQo+Pi0gICAgICAgIFN0YXJ0T3BDb2RlSGFuZGxlLCAgICAgICAgICAgICAgICAgICAg Ly8gQ29udGFpbmVyIGZvciBkeW5hbWljIGNyZWF0ZWQNCj5vcGNvZGVzDQo+Pi0gICAgICAgIEZP Uk1JRF9NT0RJRllfVVNFUiwgICAgICAgICAgICAgICAgICAgLy8gVGFyZ2V0IEZvcm0gSUQNCj4+ LSAgICAgICAgU1RSSU5HX1RPS0VOIChTVFJfTU9ESUZZX1VTRVJfVElUTEUpLCAvLyBQcm9tcHQg dGV4dA0KPj4tICAgICAgICBTVFJJTkdfVE9LRU4gKFNUUl9NT0RJRllfVVNFUl9IRUxQKSwgIC8v IEhlbHAgdGV4dA0KPj4tICAgICAgICBFRklfSUZSX0ZMQUdfQ0FMTEJBQ0ssICAgICAgICAgICAg ICAgIC8vIFF1ZXN0aW9uIGZsYWcNCj4+LSAgICAgICAgS0VZX01PRElGWV9VU0VSICAgICAgICAg ICAgICAgICAgICAgICAvLyBRdWVzdGlvbiBJRA0KPj4tICAgICAgICApOw0KPj4tDQo+Pi0gICAg ICAvLw0KPj4tICAgICAgLy8gQWRkIGRlbGV0ZSB1c2VyIHByb2ZpbGUgb3B0aW9uDQo+Pi0gICAg ICAvLw0KPj4tICAgICAgaWYgKEN1cnJlbnRBY2Nlc3NSaWdodCA9PSBFRklfVVNFUl9JTkZPX0FD Q0VTU19NQU5BR0UpIHsNCj4+LSAgICAgICAgSGlpQ3JlYXRlR290b09wQ29kZSAoDQo+Pi0gICAg ICAgICAgU3RhcnRPcENvZGVIYW5kbGUsICAgICAgICAgICAgICAgICAgICAvLyBDb250YWluZXIg Zm9yIGR5bmFtaWMgY3JlYXRlZA0KPm9wY29kZXMNCj4+LSAgICAgICAgICBGT1JNSURfREVMX1VT RVIsICAgICAgICAgICAgICAgICAgICAgIC8vIFRhcmdldCBGb3JtIElEDQo+Pi0gICAgICAgICAg U1RSSU5HX1RPS0VOIChTVFJfREVMRVRFX1VTRVJfVElUTEUpLCAvLyBQcm9tcHQgdGV4dA0KPj4t ICAgICAgICAgIFNUUklOR19UT0tFTiAoU1RSX0RFTEVURV9VU0VSX0hFTFApLCAgLy8gSGVscCB0 ZXh0DQo+Pi0gICAgICAgICAgRUZJX0lGUl9GTEFHX0NBTExCQUNLLCAgICAgICAgICAgICAgICAv LyBRdWVzdGlvbiBmbGFnDQo+Pi0gICAgICAgICAgS0VZX0RFTF9VU0VSICAgICAgICAgICAgICAg ICAgICAgICAgICAvLyBRdWVzdGlvbiBJRA0KPj4tICAgICAgICAgICk7DQo+Pi0gICAgICB9DQo+ Pi0NCj4+LSAgICAgIEhpaVVwZGF0ZUZvcm0gKA0KPj4tICAgICAgICBtQ2FsbGJhY2tJbmZvLT5I aWlIYW5kbGUsICAgICAgICAgICAgICAgLy8gSElJIGhhbmRsZQ0KPj4tICAgICAgICAmZ1VzZXJQ cm9maWxlTWFuYWdlckd1aWQsICAgICAgICAgICAgICAgLy8gRm9ybXNldCBHVUlEDQo+Pi0gICAg ICAgIEZPUk1JRF9VU0VSX01BTkFHRSwgICAgICAgICAgICAgICAgICAgICAvLyBGb3JtIElEDQo+ Pi0gICAgICAgIFN0YXJ0T3BDb2RlSGFuZGxlLCAgICAgICAgICAgICAgICAgICAgICAvLyBMYWJl bCBmb3Igd2hlcmUgdG8gaW5zZXJ0IG9wY29kZXMNCj4+LSAgICAgICAgRW5kT3BDb2RlSGFuZGxl ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlcGxhY2UgZGF0YQ0KPj4tICAgICAgICApOw0K Pj4tDQo+Pi0gICAgICBIaWlGcmVlT3BDb2RlSGFuZGxlIChTdGFydE9wQ29kZUhhbmRsZSk7DQo+ Pi0gICAgICBIaWlGcmVlT3BDb2RlSGFuZGxlIChFbmRPcENvZGVIYW5kbGUpOw0KPj4tDQo+Pi0g ICAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+Pi0gICAgfQ0KPj4tICAgIGJyZWFrOw0KPj4tDQo+ Pi0gIGNhc2UgRUZJX0JST1dTRVJfQUNUSU9OX0ZPUk1fQ0xPU0U6DQo+Pi0gICAgU3RhdHVzID0g RUZJX1NVQ0NFU1M7DQo+Pi0gICAgYnJlYWs7DQo+Pi0NCj4+LSAgY2FzZSBFRklfQlJPV1NFUl9B Q1RJT05fQ0hBTkdFRDoNCj4+LSAgew0KPj4tICAgIC8vDQo+Pi0gICAgLy8gSGFuZGxlIHRoZSBy ZXF1ZXN0IGZyb20gZm9ybS4NCj4+LSAgICAvLw0KPj4tICAgIGlmICgoVmFsdWUgPT0gTlVMTCkg fHwgKEFjdGlvblJlcXVlc3QgPT0gTlVMTCkpIHsNCj4+LSAgICAgIHJldHVybiBFRklfSU5WQUxJ RF9QQVJBTUVURVI7DQo+Pi0gICAgfQ0KPj4tDQo+Pi0gICAgLy8NCj4+LSAgICAvLyBKdWRnZSBm aXJzdCAyIGJpdHMuDQo+Pi0gICAgLy8NCj4+LSAgICBzd2l0Y2ggKFF1ZXN0aW9uSWQgJiBLRVlf RklSU1RfRk9STV9NQVNLKSB7DQo+Pi0gICAgLy8NCj4+LSAgICAvLyBBZGQgdXNlciBwcm9maWxl IG9wZXJhdGlvbi4NCj4+LSAgICAvLw0KPj4tICAgIGNhc2UgS0VZX0FERF9VU0VSOg0KPj4tICAg ICAgQ2FsbEFkZFVzZXIgKCk7DQo+Pi0gICAgICBicmVhazsNCj4+LQ0KPj4tICAgIC8vDQo+Pi0g ICAgLy8gRGVsZXRlIHVzZXIgcHJvZmlsZSBvcGVyYXRpb24uDQo+Pi0gICAgLy8NCj4+LSAgICBj YXNlIEtFWV9ERUxfVVNFUjoNCj4+LSAgICAgIC8vDQo+Pi0gICAgICAvLyBKdWRnZSBuZXh0IDIg Yml0cy4NCj4+LSAgICAgIC8vDQo+Pi0gICAgICBzd2l0Y2ggKFF1ZXN0aW9uSWQgJiBLRVlfU0VD T05EX0ZPUk1fTUFTSykgew0KPj4tICAgICAgLy8NCj4+LSAgICAgIC8vIERlbGV0ZSBzcGVjaWZp ZWQgdXNlciBwcm9maWxlLg0KPj4tICAgICAgLy8NCj4+LSAgICAgIGNhc2UgS0VZX1NFTEVDVF9V U0VSOg0KPj4tICAgICAgICBEZWxldGVVc2VyICgoVUlOVDgpIFF1ZXN0aW9uSWQpOw0KPj4tICAg ICAgICAvLw0KPj4tICAgICAgICAvLyBVcGRhdGUgc2VsZWN0IHVzZXIgZm9ybSBhZnRlciBkZWxl dGUgYSB1c2VyLg0KPj4tICAgICAgICAvLw0KPj4tICAgICAgICBTZWxlY3RVc2VyVG9EZWxldGUg KCk7DQo+Pi0gICAgICAgIGJyZWFrOw0KPj4tDQo+Pi0gICAgICBkZWZhdWx0Og0KPj4tICAgICAg ICBicmVhazsNCj4+LSAgICAgIH0NCj4+LSAgICAgIGJyZWFrOw0KPj4tDQo+Pi0gICAgLy8NCj4+ LSAgICAvLyBNb2RpZnkgdXNlciBwcm9maWxlIG9wZXJhdGlvbi4NCj4+LSAgICAvLw0KPj4tICAg IGNhc2UgS0VZX01PRElGWV9VU0VSOg0KPj4tICAgICAgLy8NCj4+LSAgICAgIC8vIEp1ZGdlIG5l eHQgMiBiaXRzLg0KPj4tICAgICAgLy8NCj4+LSAgICAgIHN3aXRjaCAoUXVlc3Rpb25JZCAmIEtF WV9TRUNPTkRfRk9STV9NQVNLKSB7DQo+Pi0gICAgICAvLw0KPj4tICAgICAgLy8gRW50ZXIgdXNl ciBwcm9maWxlIGluZm9ybWF0aW9uIGZvcm0uDQo+Pi0gICAgICAvLw0KPj4tICAgICAgY2FzZSBL RVlfU0VMRUNUX1VTRVI6DQo+Pi0gICAgICAgIC8vDQo+Pi0gICAgICAgIC8vIEp1ZGdlIG5leHQg MyBiaXRzLg0KPj4tICAgICAgICAvLw0KPj4tICAgICAgICBzd2l0Y2ggKFF1ZXN0aW9uSWQgJiBL RVlfTU9ESUZZX0lORk9fTUFTSykgew0KPj4tICAgICAgICAvLw0KPj4tICAgICAgICAvLyBNb2Rp ZnkgdXNlciBuYW1lLg0KPj4tICAgICAgICAvLw0KPj4tICAgICAgICBjYXNlIEtFWV9NT0RJRllf TkFNRToNCj4+LSAgICAgICAgICBNb2RpZnlVc2VyTmFtZSAoKTsNCj4+LSAgICAgICAgICAvLw0K Pj4tICAgICAgICAgIC8vIFVwZGF0ZSB1c2VybmFtZSBpbiBwYXJlbnQgZm9ybS4NCj4+LSAgICAg ICAgICAvLw0KPj4tICAgICAgICAgIFNlbGVjdFVzZXJUb01vZGlmeSAoKTsNCj4+LSAgICAgICAg ICBicmVhazsNCj4+LQ0KPj4tICAgICAgICAvLw0KPj4tICAgICAgICAvLyBNb2RpZnkgaWRlbnRp dHkgcG9saWN5Lg0KPj4tICAgICAgICAvLw0KPj4tICAgICAgICBjYXNlIEtFWV9NT0RJRllfSVA6 DQo+Pi0gICAgICAgICAgLy8NCj4+LSAgICAgICAgICAvLyBKdWRnZSBuZXh0IDMgYml0cw0KPj4t ICAgICAgICAgIC8vDQo+Pi0gICAgICAgICAgc3dpdGNoIChRdWVzdGlvbklkICYgS0VZX01PRElG WV9JUF9NQVNLKSB7DQo+Pi0gICAgICAgICAgLy8NCj4+LSAgICAgICAgICAvLyBDaGFuZ2UgY3Jl ZGVudGlhbCBwcm92aWRlciBvcHRpb24uDQo+Pi0gICAgICAgICAgLy8NCj4+LSAgICAgICAgICBj YXNlIEtFWV9NT0RJRllfUFJPVjoNCj4+LSAgICAgICAgICAgIG1Qcm92aWRlckNob2ljZSA9IFZh bHVlLT51ODsNCj4+LSAgICAgICAgICAgIGJyZWFrOw0KPj4tDQo+Pi0gICAgICAgICAgLy8NCj4+ LSAgICAgICAgICAvLyBDaGFuZ2UgbG9naWNhbCBjb25uZWN0b3IuDQo+Pi0gICAgICAgICAgLy8N Cj4+LSAgICAgICAgICBjYXNlIEtFWV9NT0RJRllfQ09OTjoNCj4+LSAgICAgICAgICAgIG1Db25u Y2V0TG9naWNhbCA9IFZhbHVlLT51ODsNCj4+LSAgICAgICAgICAgIGJyZWFrOw0KPj4tDQo+Pi0g ICAgICAgICAgLy8NCj4+LSAgICAgICAgICAvLyBTYXZlIG9wdGlvbi4NCj4+LSAgICAgICAgICAv Lw0KPj4tICAgICAgICAgIGNhc2UgS0VZX0FERF9JUF9PUDoNCj4+LSAgICAgICAgICAgIEFkZElk ZW50aXR5UG9saWN5SXRlbSAoKTsNCj4+LSAgICAgICAgICAgIGJyZWFrOw0KPj4tDQo+Pi0gICAg ICAgICAgLy8NCj4+LSAgICAgICAgICAvLyBSZXR1cm4gdG8gdXNlciBwcm9maWxlIGluZm9ybWF0 aW9uIGZvcm0uDQo+Pi0gICAgICAgICAgLy8NCj4+LSAgICAgICAgICBjYXNlIEtFWV9JUF9SRVRV Uk5fVUlGOg0KPj4tICAgICAgICAgICAgU2F2ZUlkZW50aXR5UG9saWN5ICgpOw0KPj4tICAgICAg ICAgICAgKkFjdGlvblJlcXVlc3QgPQ0KPj5FRklfQlJPV1NFUl9BQ1RJT05fUkVRVUVTVF9GT1JN X1NVQk1JVF9FWElUOw0KPj4tICAgICAgICAgICAgYnJlYWs7DQo+Pi0NCj4+LSAgICAgICAgICBk ZWZhdWx0Og0KPj4tICAgICAgICAgICAgYnJlYWs7DQo+Pi0gICAgICAgICAgfQ0KPj4tICAgICAg ICAgIGJyZWFrOw0KPj4tDQo+Pi0gICAgICAgIC8vDQo+Pi0gICAgICAgIC8vIE1vZGlmeSBhY2Nl c3MgcG9saWN5Lg0KPj4tICAgICAgICAvLw0KPj4tICAgICAgICBjYXNlIEtFWV9NT0RJRllfQVA6 DQo+Pi0gICAgICAgICAgLy8NCj4+LSAgICAgICAgICAvLyBKdWRnZSBuZXh0IDMgYml0cy4NCj4+ LSAgICAgICAgICAvLw0KPj4tICAgICAgICAgIHN3aXRjaCAoUXVlc3Rpb25JZCAmIEtFWV9NT0RJ RllfQVBfTUFTSykgew0KPj4tICAgICAgICAgIC8vDQo+Pi0gICAgICAgICAgLy8gQ2hhbmdlIGFj Y2VzcyByaWdodCBjaG9pY2UuDQo+Pi0gICAgICAgICAgLy8NCj4+LSAgICAgICAgICBjYXNlIEtF WV9NT0RJRllfUklHSFQ6DQo+Pi0gICAgICAgICAgICBtQWNjZXNzSW5mby5BY2Nlc3NSaWdodCA9 IFZhbHVlLT51ODsNCj4+LSAgICAgICAgICAgIGJyZWFrOw0KPj4tDQo+Pi0gICAgICAgICAgLy8N Cj4+LSAgICAgICAgICAvLyBDaGFuZ2Ugc2V0dXAgY2hvaWNlLg0KPj4tICAgICAgICAgIC8vDQo+ Pi0gICAgICAgICAgY2FzZSBLRVlfTU9ESUZZX1NFVFVQOg0KPj4tICAgICAgICAgICAgbUFjY2Vz c0luZm8uQWNjZXNzU2V0dXA9IFZhbHVlLT51ODsNCj4+LSAgICAgICAgICAgIGJyZWFrOw0KPj4t DQo+Pi0gICAgICAgICAgLy8NCj4+LSAgICAgICAgICAvLyBDaGFuZ2UgYm9vdCBvcmRlciBjaG9p Y2UuDQo+Pi0gICAgICAgICAgLy8NCj4+LSAgICAgICAgICBjYXNlIEtFWV9NT0RJRllfQk9PVDoN Cj4+LSAgICAgICAgICAgIG1BY2Nlc3NJbmZvLkFjY2Vzc0Jvb3RPcmRlciA9IFZhbHVlLT51MzI7 DQo+Pi0gICAgICAgICAgICBicmVhazsNCj4+LQ0KPj4tICAgICAgICAgIC8vDQo+Pi0gICAgICAg ICAgLy8gUmV0dXJuIHRvIHVzZXIgcHJvZmlsZSBpbmZvcm1hdGlvbiBmb3JtLg0KPj4tICAgICAg ICAgIC8vDQo+Pi0gICAgICAgICAgY2FzZSBLRVlfQVBfUkVUVVJOX1VJRjoNCj4+LSAgICAgICAg ICAgIFNhdmVBY2Nlc3NQb2xpY3kgKCk7DQo+Pi0gICAgICAgICAgICAqQWN0aW9uUmVxdWVzdCA9 DQo+PkVGSV9CUk9XU0VSX0FDVElPTl9SRVFVRVNUX0ZPUk1fU1VCTUlUX0VYSVQ7DQo+Pi0gICAg ICAgICAgICBicmVhazsNCj4+LQ0KPj4tICAgICAgICAgIGRlZmF1bHQ6DQo+Pi0gICAgICAgICAg ICBicmVhazsNCj4+LSAgICAgICAgICB9DQo+Pi0gICAgICAgICAgYnJlYWs7DQo+Pi0NCj4+LSAg ICAgICAgZGVmYXVsdDoNCj4+LSAgICAgICAgICBicmVhazsNCj4+LSAgICAgICAgfQ0KPj4tICAg ICAgICBicmVhazsNCj4+LQ0KPj4tICAgICAgLy8NCj4+LSAgICAgIC8vIEFjY2VzcyBwb2xpY3kg ZGV2aWNlIHBhdGggbW9kaWZpZWQuDQo+Pi0gICAgICAvLw0KPj4tICAgICAgY2FzZSBLRVlfTU9E SUZZX0FQX0RQOg0KPj4tICAgICAgICAvLw0KPj4tICAgICAgICAvLyBKdWRnZSBuZXh0IDIgYml0 cy4NCj4+LSAgICAgICAgLy8NCj4+LSAgICAgICAgc3dpdGNoIChRdWVzdGlvbklkICYgS0VZX01P RElGWV9EUF9NQVNLKSB7DQo+Pi0gICAgICAgIC8vDQo+Pi0gICAgICAgIC8vIExvYWQgcGVybWl0 IGRldmljZSBwYXRoIG1vZGlmaWVkLg0KPj4tICAgICAgICAvLw0KPj4tICAgICAgICBjYXNlIEtF WV9MT0FEX1BFUk1JVF9NT0RJRlk6DQo+Pi0gICAgICAgICAgUXVlc3Rpb25TdHIgPSBHZXRTdHJp bmdCeUlkIChTVFJJTkdfVE9LRU4NCj4+KFNUUl9NT1ZFX1RPX0ZPUkJJRF9MSVNUKSk7DQo+Pi0g ICAgICAgICAgUHJvbXB0U3RyICAgPSBHZXRTdHJpbmdCeUlkIChTVFJJTkdfVE9LRU4NCj4+KFNU Ul9QUkVTU19LRVlfQ09OVElOVUUpKTsNCj4+LSAgICAgICAgICBDcmVhdGVQb3BVcCAoDQo+Pi0g ICAgICAgICAgICBFRklfTElHSFRHUkFZIHwgRUZJX0JBQ0tHUk9VTkRfQkxVRSwNCj4+LSAgICAg ICAgICAgICZLZXksDQo+Pi0gICAgICAgICAgICBRdWVzdGlvblN0ciwNCj4+LSAgICAgICAgICAg IEwiIiwNCj4+LSAgICAgICAgICAgIFByb21wdFN0ciwNCj4+LSAgICAgICAgICAgIE5VTEwNCj4+ LSAgICAgICAgICAgICk7DQo+Pi0gICAgICAgICAgRnJlZVBvb2wgKFF1ZXN0aW9uU3RyKTsNCj4+ LSAgICAgICAgICBGcmVlUG9vbCAoUHJvbXB0U3RyKTsNCj4+LSAgICAgICAgICBpZiAoS2V5LlVu aWNvZGVDaGFyICE9IENIQVJfQ0FSUklBR0VfUkVUVVJOKSB7DQo+Pi0gICAgICAgICAgICBicmVh azsNCj4+LSAgICAgICAgICB9DQo+Pi0NCj4+LSAgICAgICAgICBBZGRUb0ZvcmJpZExvYWQgKChV SU5UMTYpKFF1ZXN0aW9uSWQgJiAoS0VZX01PRElGWV9EUF9NQVNLIC0NCj4+MSkpKTsNCj4+LSAg ICAgICAgICBEaXNwbGF5TG9hZFBlcm1pdCAoKTsNCj4+LSAgICAgICAgICBicmVhazsNCj4+LQ0K Pj4tICAgICAgICAvLw0KPj4tICAgICAgICAvLyBMb2FkIGZvcmJpZCBkZXZpY2UgcGF0aCBtb2Rp ZmllZC4NCj4+LSAgICAgICAgLy8NCj4+LSAgICAgICAgY2FzZSBLRVlfTE9BRF9GT1JCSURfTU9E SUZZOg0KPj4tICAgICAgICAgIFF1ZXN0aW9uU3RyID0gR2V0U3RyaW5nQnlJZCAoU1RSSU5HX1RP S0VODQo+PihTVFJfTU9WRV9UT19QRVJNSVRfTElTVCkpOw0KPj4tICAgICAgICAgIFByb21wdFN0 ciAgID0gR2V0U3RyaW5nQnlJZCAoU1RSSU5HX1RPS0VODQo+PihTVFJfUFJFU1NfS0VZX0NPTlRJ TlVFKSk7DQo+Pi0gICAgICAgICAgQ3JlYXRlUG9wVXAgKA0KPj4tICAgICAgICAgICAgRUZJX0xJ R0hUR1JBWSB8IEVGSV9CQUNLR1JPVU5EX0JMVUUsDQo+Pi0gICAgICAgICAgICAmS2V5LA0KPj4t ICAgICAgICAgICAgUXVlc3Rpb25TdHIsDQo+Pi0gICAgICAgICAgICBMIiIsDQo+Pi0gICAgICAg ICAgICBQcm9tcHRTdHIsDQo+Pi0gICAgICAgICAgICBOVUxMDQo+Pi0gICAgICAgICAgICApOw0K Pj4tICAgICAgICAgIEZyZWVQb29sIChRdWVzdGlvblN0cik7DQo+Pi0gICAgICAgICAgRnJlZVBv b2wgKFByb21wdFN0cik7DQo+Pi0gICAgICAgICAgaWYgKEtleS5Vbmljb2RlQ2hhciAhPSBDSEFS X0NBUlJJQUdFX1JFVFVSTikgew0KPj4tICAgICAgICAgICAgYnJlYWs7DQo+Pi0gICAgICAgICAg fQ0KPj4tDQo+Pi0gICAgICAgICAgRGVsZXRlRnJvbUZvcmJpZExvYWQgKChVSU5UMTYpKFF1ZXN0 aW9uSWQgJg0KPj4oS0VZX01PRElGWV9EUF9NQVNLIC0gMSkpKTsNCj4+LSAgICAgICAgICBEaXNw bGF5TG9hZEZvcmJpZCAoKTsNCj4+LSAgICAgICAgICBicmVhazsNCj4+LQ0KPj4tICAgICAgICAv Lw0KPj4tICAgICAgICAvLyBDb25uZWN0IHBlcm1pdCBkZXZpY2UgcGF0aCBtb2RpZmllZC4NCj4+ LSAgICAgICAgLy8NCj4+LSAgICAgICAgY2FzZSBLRVlfQ09OTkVDVF9QRVJNSVRfTU9ESUZZOg0K Pj4tICAgICAgICAgIGJyZWFrOw0KPj4tDQo+Pi0gICAgICAgIC8vDQo+Pi0gICAgICAgIC8vIENv bm5lY3QgZm9yYmlkIGRldmljZSBwYXRoIG1vZGlmaWVkLg0KPj4tICAgICAgICAvLw0KPj4tICAg ICAgICBjYXNlIEtFWV9DT05ORUNUX0ZPUkJJRF9NT0RJRlk6DQo+Pi0gICAgICAgICAgYnJlYWs7 DQo+Pi0NCj4+LSAgICAgICAgZGVmYXVsdDoNCj4+LSAgICAgICAgICBicmVhazsNCj4+LSAgICAg ICAgfQ0KPj4tICAgICAgICBicmVhazsNCj4+LQ0KPj4tICAgICAgZGVmYXVsdDoNCj4+LSAgICAg ICAgYnJlYWs7DQo+Pi0gICAgICB9DQo+Pi0gICAgICBicmVhazsNCj4+LQ0KPj4tICAgIGRlZmF1 bHQ6DQo+Pi0gICAgICBicmVhazsNCj4+LSAgICB9DQo+Pi0gIH0NCj4+LSAgYnJlYWs7DQo+Pi0N Cj4+LQ0KPj4tICBjYXNlIEVGSV9CUk9XU0VSX0FDVElPTl9DSEFOR0lORzoNCj4+LSAgew0KPj4t ICAgIC8vDQo+Pi0gICAgLy8gSGFuZGxlIHRoZSByZXF1ZXN0IGZyb20gZm9ybS4NCj4+LSAgICAv Lw0KPj4tICAgIGlmIChWYWx1ZSA9PSBOVUxMKSB7DQo+Pi0gICAgICByZXR1cm4gRUZJX0lOVkFM SURfUEFSQU1FVEVSOw0KPj4tICAgIH0NCj4+LQ0KPj4tICAgIC8vDQo+Pi0gICAgLy8gSnVkZ2Ug Zmlyc3QgMiBiaXRzLg0KPj4tICAgIC8vDQo+Pi0gICAgc3dpdGNoIChRdWVzdGlvbklkICYgS0VZ X0ZJUlNUX0ZPUk1fTUFTSykgew0KPj4tICAgIC8vDQo+Pi0gICAgLy8gRGVsZXRlIHVzZXIgcHJv ZmlsZSBvcGVyYXRpb24uDQo+Pi0gICAgLy8NCj4+LSAgICBjYXNlIEtFWV9ERUxfVVNFUjoNCj4+ LSAgICAgIC8vDQo+Pi0gICAgICAvLyBKdWRnZSBuZXh0IDIgYml0cy4NCj4+LSAgICAgIC8vDQo+ Pi0gICAgICBzd2l0Y2ggKFF1ZXN0aW9uSWQgJiBLRVlfU0VDT05EX0ZPUk1fTUFTSykgew0KPj4t ICAgICAgLy8NCj4+LSAgICAgIC8vIEVudGVyIGRlbGV0ZSB1c2VyIHByb2ZpbGUgZm9ybS4NCj4+ LSAgICAgIC8vDQo+Pi0gICAgICBjYXNlIEtFWV9FTlRFUl9ORVhUX0ZPUk06DQo+Pi0gICAgICAg IFNlbGVjdFVzZXJUb0RlbGV0ZSAoKTsNCj4+LSAgICAgICAgYnJlYWs7DQo+Pi0NCj4+LSAgICAg IGRlZmF1bHQ6DQo+Pi0gICAgICAgIGJyZWFrOw0KPj4tICAgICAgfQ0KPj4tICAgICAgYnJlYWs7 DQo+Pi0NCj4+LSAgICAvLw0KPj4tICAgIC8vIE1vZGlmeSB1c2VyIHByb2ZpbGUgb3BlcmF0aW9u Lg0KPj4tICAgIC8vDQo+Pi0gICAgY2FzZSBLRVlfTU9ESUZZX1VTRVI6DQo+Pi0gICAgICAvLw0K Pj4tICAgICAgLy8gSnVkZ2UgbmV4dCAyIGJpdHMuDQo+Pi0gICAgICAvLw0KPj4tICAgICAgc3dp dGNoIChRdWVzdGlvbklkICYgS0VZX1NFQ09ORF9GT1JNX01BU0spIHsNCj4+LSAgICAgIC8vDQo+ Pi0gICAgICAvLyBFbnRlciBtb2RpZnkgdXNlciBwcm9maWxlIGZvcm0uDQo+Pi0gICAgICAvLw0K Pj4tICAgICAgY2FzZSBLRVlfRU5URVJfTkVYVF9GT1JNOg0KPj4tICAgICAgICBTZWxlY3RVc2Vy VG9Nb2RpZnkgKCk7DQo+Pi0gICAgICAgIGJyZWFrOw0KPj4tDQo+Pi0gICAgICAvLw0KPj4tICAg ICAgLy8gRW50ZXIgdXNlciBwcm9maWxlIGluZm9ybWF0aW9uIGZvcm0uDQo+Pi0gICAgICAvLw0K Pj4tICAgICAgY2FzZSBLRVlfU0VMRUNUX1VTRVI6DQo+Pi0gICAgICAgIC8vDQo+Pi0gICAgICAg IC8vIEp1ZGdlIG5leHQgMyBiaXRzLg0KPj4tICAgICAgICAvLw0KPj4tICAgICAgICBzd2l0Y2gg KFF1ZXN0aW9uSWQgJiBLRVlfTU9ESUZZX0lORk9fTUFTSykgew0KPj4tICAgICAgICAvLw0KPj4t ICAgICAgICAvLyBEaXNwbGF5IHVzZXIgaW5mb3JtYXRpb24gZm9ybS4NCj4+LSAgICAgICAgLy8N Cj4+LSAgICAgICAgY2FzZSBLRVlfRU5URVJfTkVYVF9GT1JNOg0KPj4tICAgICAgICAgIE1vZGlm eVVzZXJJbmZvICgoVUlOVDgpIFF1ZXN0aW9uSWQpOw0KPj4tICAgICAgICAgIGJyZWFrOw0KPj4t DQo+Pi0gICAgICAgIC8vDQo+Pi0gICAgICAgIC8vIE1vZGlmeSBpZGVudGl0eSBwb2xpY3kuDQo+ Pi0gICAgICAgIC8vDQo+Pi0gICAgICAgIGNhc2UgS0VZX01PRElGWV9JUDoNCj4+LSAgICAgICAg ICAvLw0KPj4tICAgICAgICAgIC8vIEp1ZGdlIG5leHQgMyBiaXRzDQo+Pi0gICAgICAgICAgLy8N Cj4+LSAgICAgICAgICBzd2l0Y2ggKFF1ZXN0aW9uSWQgJiBLRVlfTU9ESUZZX0lQX01BU0spIHsN Cj4+LSAgICAgICAgICAvLw0KPj4tICAgICAgICAgIC8vIERpc3BsYXkgaWRlbnRpdHkgcG9saWN5 IG1vZGlmeSBmb3JtLg0KPj4tICAgICAgICAgIC8vDQo+Pi0gICAgICAgICAgY2FzZSBLRVlfRU5U RVJfTkVYVF9GT1JNOg0KPj4tICAgICAgICAgICAgTW9kaWZ5SWRlbnRpdHlQb2xpY3kgKCk7DQo+ Pi0gICAgICAgICAgICBicmVhazsNCj4+LQ0KPj4tICAgICAgICAgIGRlZmF1bHQ6DQo+Pi0gICAg ICAgICAgICBicmVhazsNCj4+LSAgICAgICAgICB9DQo+Pi0gICAgICAgICAgYnJlYWs7DQo+Pi0N Cj4+LSAgICAgICAgLy8NCj4+LSAgICAgICAgLy8gTW9kaWZ5IGFjY2VzcyBwb2xpY3kuDQo+Pi0g ICAgICAgIC8vDQo+Pi0gICAgICAgIGNhc2UgS0VZX01PRElGWV9BUDoNCj4+LSAgICAgICAgICAv Lw0KPj4tICAgICAgICAgIC8vIEp1ZGdlIG5leHQgMyBiaXRzLg0KPj4tICAgICAgICAgIC8vDQo+ Pi0gICAgICAgICAgc3dpdGNoIChRdWVzdGlvbklkICYgS0VZX01PRElGWV9BUF9NQVNLKSB7DQo+ Pi0gICAgICAgICAgLy8NCj4+LSAgICAgICAgICAvLyBEaXNwbGF5IGFjY2VzcyBwb2xpY3kgbW9k aWZ5IGZvcm0uDQo+Pi0gICAgICAgICAgLy8NCj4+LSAgICAgICAgICBjYXNlIEtFWV9FTlRFUl9O RVhUX0ZPUk06DQo+Pi0gICAgICAgICAgICBNb2RpZHlBY2Nlc3NQb2xpY3kgKCk7DQo+Pi0gICAg ICAgICAgICBicmVhazsNCj4+LSAgICAgICAgICAvLw0KPj4tICAgICAgICAgIC8vIExvYWQgZGV2 aWNlIHBhdGggZm9ybS4NCj4+LSAgICAgICAgICAvLw0KPj4tICAgICAgICAgIGNhc2UgS0VZX01P RElGWV9MT0FEOg0KPj4tICAgICAgICAgICAgLy8NCj4+LSAgICAgICAgICAgIC8vIEp1ZGdlIG5l eHQgMiBiaXRzLg0KPj4tICAgICAgICAgICAgLy8NCj4+LSAgICAgICAgICAgIHN3aXRjaCAoUXVl c3Rpb25JZCAmIEtFWV9ESVNQTEFZX0RQX01BU0spIHsNCj4+LSAgICAgICAgICAgIC8vDQo+Pi0g ICAgICAgICAgICAvLyBQZXJtaXQgbG9hZCBkZXZpY2UgcGF0aC4NCj4+LSAgICAgICAgICAgIC8v DQo+Pi0gICAgICAgICAgICBjYXNlIEtFWV9QRVJNSVRfTU9ESUZZOg0KPj4tICAgICAgICAgICAg ICBEaXNwbGF5TG9hZFBlcm1pdCAoKTsNCj4+LSAgICAgICAgICAgICAgYnJlYWs7DQo+Pi0NCj4+ LSAgICAgICAgICAgIC8vDQo+Pi0gICAgICAgICAgICAvLyBGb3JiaWQgbG9hZCBkZXZpY2UgcGF0 aC4NCj4+LSAgICAgICAgICAgIC8vDQo+Pi0gICAgICAgICAgICBjYXNlIEtFWV9GT1JCSURfTU9E SUZZOg0KPj4tICAgICAgICAgICAgICBEaXNwbGF5TG9hZEZvcmJpZCAoKTsNCj4+LSAgICAgICAg ICAgICAgYnJlYWs7DQo+Pi0NCj4+LSAgICAgICAgICAgIGRlZmF1bHQ6DQo+Pi0gICAgICAgICAg ICAgIGJyZWFrOw0KPj4tICAgICAgICAgICAgfQ0KPj4tICAgICAgICAgICAgYnJlYWs7DQo+Pi0N Cj4+LSAgICAgICAgICAvLw0KPj4tICAgICAgICAgIC8vIENvbm5lY3QgZGV2aWNlIHBhdGggZm9y bS4NCj4+LSAgICAgICAgICAvLw0KPj4tICAgICAgICAgIGNhc2UgS0VZX01PRElGWV9DT05ORUNU Og0KPj4tICAgICAgICAgICAgLy8NCj4+LSAgICAgICAgICAgIC8vIEp1ZGdlIG5leHQgMiBiaXRz Lg0KPj4tICAgICAgICAgICAgLy8NCj4+LSAgICAgICAgICAgIHN3aXRjaCAoUXVlc3Rpb25JZCAm IEtFWV9ESVNQTEFZX0RQX01BU0spIHsNCj4+LSAgICAgICAgICAgIC8vDQo+Pi0gICAgICAgICAg ICAvLyBQZXJtaXQgY29ubmVjdCBkZXZpY2UgcGF0aC4NCj4+LSAgICAgICAgICAgIC8vDQo+Pi0g ICAgICAgICAgICBjYXNlIEtFWV9QRVJNSVRfTU9ESUZZOg0KPj4tICAgICAgICAgICAgICBEaXNw bGF5Q29ubmVjdFBlcm1pdCAoKTsNCj4+LSAgICAgICAgICAgICAgYnJlYWs7DQo+Pi0NCj4+LSAg ICAgICAgICAgIC8vDQo+Pi0gICAgICAgICAgICAvLyBGb3JiaWQgY29ubmVjdCBkZXZpY2UgcGF0 aC4NCj4+LSAgICAgICAgICAgIC8vDQo+Pi0gICAgICAgICAgICBjYXNlIEtFWV9GT1JCSURfTU9E SUZZOg0KPj4tICAgICAgICAgICAgICBEaXNwbGF5Q29ubmVjdEZvcmJpZCAoKTsNCj4+LSAgICAg ICAgICAgICAgYnJlYWs7DQo+Pi0NCj4+LSAgICAgICAgICAgIGRlZmF1bHQ6DQo+Pi0gICAgICAg ICAgICAgIGJyZWFrOw0KPj4tICAgICAgICAgICAgfQ0KPj4tICAgICAgICAgICAgYnJlYWs7DQo+ Pi0NCj4+LSAgICAgICAgICBkZWZhdWx0Og0KPj4tICAgICAgICAgICAgYnJlYWs7DQo+Pi0gICAg ICAgICAgfQ0KPj4tICAgICAgICAgIGJyZWFrOw0KPj4tDQo+Pi0gICAgICAgIGRlZmF1bHQ6DQo+ Pi0gICAgICAgICAgYnJlYWs7DQo+Pi0gICAgICAgIH0NCj4+LSAgICAgICAgYnJlYWs7DQo+Pi0N Cj4+LSAgICAgIGRlZmF1bHQ6DQo+Pi0gICAgICAgIGJyZWFrOw0KPj4tICAgICAgfQ0KPj4tICAg ICAgYnJlYWs7DQo+Pi0NCj4+LSAgICBkZWZhdWx0Og0KPj4tICAgICAgYnJlYWs7DQo+Pi0gICAg fQ0KPj4tICB9DQo+Pi0gIGJyZWFrOw0KPj4tDQo+Pi0gIGRlZmF1bHQ6DQo+Pi0gICAgLy8NCj4+ LSAgICAvLyBBbGwgb3RoZXIgYWN0aW9uIHJldHVybiB1bnN1cHBvcnRlZC4NCj4+LSAgICAvLw0K Pj4tICAgIFN0YXR1cyA9IEVGSV9VTlNVUFBPUlRFRDsNCj4+LSAgICBicmVhazsNCj4+LSAgfQ0K Pj4tDQo+Pi0NCj4+LSAgcmV0dXJuIFN0YXR1czsNCj4+LX0NCj4+LQ0KPj4tDQo+Pi0vKioNCj4+ LSAgVGhpcyBmdW5jdGlvbiBhbGxvd3MgYSBjYWxsZXIgdG8gZXh0cmFjdCB0aGUgY3VycmVudCBj b25maWd1cmF0aW9uIGZvciBvbmUNCj4+LSAgb3IgbW9yZSBuYW1lZCBlbGVtZW50cyBmcm9tIHRo ZSB0YXJnZXQgZHJpdmVyLg0KPj4tDQo+Pi0NCj4+LSAgQHBhcmFtIFRoaXMgICAgICAgICAgICBQ b2ludHMgdG8gdGhlIEVGSV9ISUlfQ09ORklHX0FDQ0VTU19QUk9UT0NPTC4NCj4+LSAgQHBhcmFt IFJlcXVlc3QgICAgICAgICBBIG51bGwtdGVybWluYXRlZCBVbmljb2RlIHN0cmluZyBpbiA8Q29u ZmlnUmVxdWVzdD4NCj4+Zm9ybWF0Lg0KPj4tICBAcGFyYW0gUHJvZ3Jlc3MgICAgICAgIE9uIHJl dHVybiwgcG9pbnRzIHRvIGEgY2hhcmFjdGVyIGluIHRoZSBSZXF1ZXN0IHN0cmluZy4NCj4+LSAg ICAgICAgICAgICAgICAgICAgICAgICBQb2ludHMgdG8gdGhlIHN0cmluZydzIG51bGwgdGVybWlu YXRvciBpZiByZXF1ZXN0IHdhcyBzdWNjZXNzZnVsLg0KPj4tICAgICAgICAgICAgICAgICAgICAg ICAgIFBvaW50cyB0byB0aGUgbW9zdCByZWNlbnQgJyYnIGJlZm9yZSB0aGUgZmlyc3QgZmFpbGlu ZyBuYW1lL3ZhbHVlDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgcGFpciAob3IgdGhlIGJl Z2lubmluZyBvZiB0aGUgc3RyaW5nIGlmIHRoZSBmYWlsdXJlIGlzIGluIHRoZQ0KPj4tICAgICAg ICAgICAgICAgICAgICAgICAgIGZpcnN0IG5hbWUvdmFsdWUgcGFpcikgaWYgdGhlIHJlcXVlc3Qg d2FzIG5vdCBzdWNjZXNzZnVsLg0KPj4tICBAcGFyYW0gUmVzdWx0cyAgICAgICAgIEEgbnVsbC10 ZXJtaW5hdGVkIFVuaWNvZGUgc3RyaW5nIGluIDxDb25maWdBbHRSZXNwPg0KPj5mb3JtYXQgd2hp Y2gNCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICBoYXMgYWxsIHZhbHVlcyBmaWxsZWQgaW4g Zm9yIHRoZSBuYW1lcyBpbiB0aGUgUmVxdWVzdCBzdHJpbmcuDQo+Pi0gICAgICAgICAgICAgICAg ICAgICAgICAgU3RyaW5nIHRvIGJlIGFsbG9jYXRlZCBieSB0aGUgY2FsbGVkIGZ1bmN0aW9uLg0K Pj4tDQo+Pi0gIEByZXR2YWwgIEVGSV9TVUNDRVNTICAgICAgICAgICAgVGhlIFJlc3VsdHMgaXMg ZmlsbGVkIHdpdGggdGhlIHJlcXVlc3RlZCB2YWx1ZXMuDQo+Pi0gIEByZXR2YWwgIEVGSV9PVVRf T0ZfUkVTT1VSQ0VTICAgTm90IGVub3VnaCBtZW1vcnkgdG8gc3RvcmUgdGhlDQo+PnJlc3VsdHMu DQo+Pi0gIEByZXR2YWwgIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgUmVxdWVzdCBpcyBpbGxlZ2Fs IHN5bnRheCwgb3IgdW5rbm93bg0KPj5uYW1lLg0KPj4tICBAcmV0dmFsICBFRklfTk9UX0ZPVU5E ICAgICAgICAgIFJvdXRpbmcgZGF0YSBkb2Vzbid0IG1hdGNoIGFueSBzdG9yYWdlIGluDQo+PnRo aXMgZHJpdmVyLg0KPj4tDQo+Pi0qKi8NCj4+LUVGSV9TVEFUVVMNCj4+LUVGSUFQSQ0KPj4tRmFr ZUV4dHJhY3RDb25maWcgKA0KPj4tICBJTiAgQ09OU1QgRUZJX0hJSV9DT05GSUdfQUNDRVNTX1BS T1RPQ09MICAgKlRoaXMsDQo+Pi0gIElOICBDT05TVCBFRklfU1RSSU5HICAgICAgICAgICAgICAg ICAgICAgICBSZXF1ZXN0LA0KPj4tICBPVVQgRUZJX1NUUklORyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKlByb2dyZXNzLA0KPj4tICBPVVQgRUZJX1NUUklORyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKlJlc3VsdHMNCj4+LSAgKQ0KPj4tew0KPj4tICBpZiAoUHJvZ3Jlc3MgPT0g TlVMTCB8fCBSZXN1bHRzID09IE5VTEwpIHsNCj4+LSAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFS QU1FVEVSOw0KPj4tICB9DQo+Pi0gICpQcm9ncmVzcyA9IFJlcXVlc3Q7DQo+Pi0gIHJldHVybiBF RklfTk9UX0ZPVU5EOw0KPj4tfQ0KPj4tDQo+Pi0vKioNCj4+LSAgVGhpcyBmdW5jdGlvbiBwcm9j ZXNzZXMgdGhlIHJlc3VsdHMgb2YgY2hhbmdlcyBpbiBjb25maWd1cmF0aW9uLg0KPj4tDQo+Pi0N Cj4+LSAgQHBhcmFtIFRoaXMgICAgICAgICAgICBQb2ludHMgdG8gdGhlIEVGSV9ISUlfQ09ORklH X0FDQ0VTU19QUk9UT0NPTC4NCj4+LSAgQHBhcmFtIENvbmZpZ3VyYXRpb24gICBBIG51bGwtdGVy bWluYXRlZCBVbmljb2RlIHN0cmluZyBpbiA8Q29uZmlnUmVzcD4NCj4+Zm9ybWF0Lg0KPj4tICBA cGFyYW0gUHJvZ3Jlc3MgICAgICAgIEEgcG9pbnRlciB0byBhIHN0cmluZyBmaWxsZWQgaW4gd2l0 aCB0aGUgb2Zmc2V0IG9mIHRoZQ0KPj5tb3N0DQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAg cmVjZW50ICcmJyBiZWZvcmUgdGhlIGZpcnN0IGZhaWxpbmcgbmFtZS92YWx1ZSBwYWlyIChvciB0 aGUNCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbm5pbmcgb2YgdGhlIHN0cmluZyBp ZiB0aGUgZmFpbHVyZSBpcyBpbiB0aGUgZmlyc3QNCj4+LSAgICAgICAgICAgICAgICAgICAgICAg ICBuYW1lL3ZhbHVlIHBhaXIpIG9yIHRoZSB0ZXJtaW5hdGluZyBOVUxMIGlmIGFsbCB3YXMgc3Vj Y2Vzc2Z1bC4NCj4+LQ0KPj4tICBAcmV0dmFsICBFRklfU1VDQ0VTUyAgICAgICAgICAgIFRoZSBS ZXN1bHRzIGlzIHByb2Nlc3NlZCBzdWNjZXNzZnVsbHkuDQo+Pi0gIEByZXR2YWwgIEVGSV9JTlZB TElEX1BBUkFNRVRFUiAgQ29uZmlndXJhdGlvbiBpcyBOVUxMLg0KPj4tICBAcmV0dmFsICBFRklf Tk9UX0ZPVU5EICAgICAgICAgIFJvdXRpbmcgZGF0YSBkb2Vzbid0IG1hdGNoIGFueSBzdG9yYWdl IGluDQo+PnRoaXMgZHJpdmVyLg0KPj4tDQo+Pi0qKi8NCj4+LUVGSV9TVEFUVVMNCj4+LUVGSUFQ SQ0KPj4tRmFrZVJvdXRlQ29uZmlnICgNCj4+LSAgSU4gIENPTlNUIEVGSV9ISUlfQ09ORklHX0FD Q0VTU19QUk9UT0NPTCAgICpUaGlzLA0KPj4tICBJTiAgQ09OU1QgRUZJX1NUUklORyAgICAgICAg ICAgICAgICAgICAgICAgQ29uZmlndXJhdGlvbiwNCj4+LSAgT1VUIEVGSV9TVFJJTkcgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICpQcm9ncmVzcw0KPj4tICApDQo+Pi17DQo+Pi0gIGlmIChD b25maWd1cmF0aW9uID09IE5VTEwgfHwgUHJvZ3Jlc3MgPT0gTlVMTCkgew0KPj4tICAgIHJldHVy biBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+Pi0gIH0NCj4+LQ0KPj4tICAqUHJvZ3Jlc3MgPSBD b25maWd1cmF0aW9uOw0KPj4tDQo+Pi0gIHJldHVybiBFRklfTk9UX0ZPVU5EOw0KPj4tfQ0KPj4t DQo+Pi0NCj4+LS8qKg0KPj4tICBNYWluIGVudHJ5IGZvciB0aGlzIGRyaXZlci4NCj4+LQ0KPj4t ICBAcGFyYW0gSW1hZ2VIYW5kbGUgICAgIEltYWdlIGhhbmRsZSB0aGlzIGRyaXZlci4NCj4+LSAg QHBhcmFtIFN5c3RlbVRhYmxlICAgICBQb2ludGVyIHRvIFN5c3RlbVRhYmxlLg0KPj4tDQo+Pi0g IEByZXR2YWwgRUZJX1NVQ0VTUyAgICAgVGhpcyBmdW5jdGlvbiBhbHdheXMgY29tcGxldGUgc3Vj Y2Vzc2Z1bGx5Lg0KPj4tDQo+Pi0qKi8NCj4+LUVGSV9TVEFUVVMNCj4+LUVGSUFQSQ0KPj4tVXNl clByb2ZpbGVNYW5hZ2VySW5pdCAoDQo+Pi0gIElOIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAg ICAgICAgIEltYWdlSGFuZGxlLA0KPj4tICBJTiBFRklfU1lTVEVNX1RBQkxFICAgICAgICAgICAg ICAgICAqU3lzdGVtVGFibGUNCj4+LSAgKQ0KPj4tew0KPj4tICBFRklfU1RBVFVTICAgICAgICAg ICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+Pi0gIFVTRVJfUFJPRklMRV9NQU5BR0VSX0NBTExC QUNLX0lORk8gICpDYWxsYmFja0luZm87DQo+Pi0NCj4+LSAgU3RhdHVzID0gZ0JTLT5Mb2NhdGVQ cm90b2NvbCAoDQo+Pi0gICAgICAgICAgICAgICAgICAmZ0VmaVVzZXJNYW5hZ2VyUHJvdG9jb2xH dWlkLA0KPj4tICAgICAgICAgICAgICAgICAgTlVMTCwNCj4+LSAgICAgICAgICAgICAgICAgIChW T0lEICoqKSAmbVVzZXJNYW5hZ2VyDQo+Pi0gICAgICAgICAgICAgICAgICApOw0KPj4tICBpZiAo RUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+Pi0gICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPj4tICB9 DQo+Pi0NCj4+LSAgLy8NCj4+LSAgLy8gSW5pdGlhbGl6ZSBkcml2ZXIgcHJpdmF0ZSBkYXRhLg0K Pj4tICAvLw0KPj4tICBaZXJvTWVtICgmbVVzZXJJbmZvLCBzaXplb2YgKG1Vc2VySW5mbykpOw0K Pj4tICBaZXJvTWVtICgmbUFjY2Vzc0luZm8sIHNpemVvZiAobUFjY2Vzc0luZm8pKTsNCj4+LQ0K Pj4tICBDYWxsYmFja0luZm8gPSBBbGxvY2F0ZVplcm9Qb29sIChzaXplb2YNCj4+KFVTRVJfUFJP RklMRV9NQU5BR0VSX0NBTExCQUNLX0lORk8pKTsNCj4+LSAgQVNTRVJUIChDYWxsYmFja0luZm8g IT0gTlVMTCk7DQo+Pi0NCj4+LSAgQ2FsbGJhY2tJbmZvLT5TaWduYXR1cmUgICAgICAgICAgICAg ICAgICAgPSBVU0VSX1BST0ZJTEVfTUFOQUdFUl9TSUdOQVRVUkU7DQo+Pi0gIENhbGxiYWNrSW5m by0+Q29uZmlnQWNjZXNzLkV4dHJhY3RDb25maWcgID0gRmFrZUV4dHJhY3RDb25maWc7DQo+Pi0g IENhbGxiYWNrSW5mby0+Q29uZmlnQWNjZXNzLlJvdXRlQ29uZmlnICAgID0gRmFrZVJvdXRlQ29u ZmlnOw0KPj4tICBDYWxsYmFja0luZm8tPkNvbmZpZ0FjY2Vzcy5DYWxsYmFjayAgICAgICA9IFVz ZXJQcm9maWxlTWFuYWdlckNhbGxiYWNrOw0KPj4tICBDYWxsYmFja0luZm8tPkRyaXZlckhhbmRs ZSAgICAgICAgICAgICAgICA9IE5VTEw7DQo+Pi0NCj4+LSAgLy8NCj4+LSAgLy8gSW5zdGFsbCBE ZXZpY2UgUGF0aCBQcm90b2NvbCBhbmQgQ29uZmlnIEFjY2VzcyBwcm90b2NvbCB0byBkcml2ZXIg aGFuZGxlLg0KPj4tICAvLw0KPj4tICBTdGF0dXMgPSBnQlMtPkluc3RhbGxNdWx0aXBsZVByb3Rv Y29sSW50ZXJmYWNlcyAoDQo+Pi0gICAgICAgICAgICAgICAgICAmQ2FsbGJhY2tJbmZvLT5Ecml2 ZXJIYW5kbGUsDQo+Pi0gICAgICAgICAgICAgICAgICAmZ0VmaURldmljZVBhdGhQcm90b2NvbEd1 aWQsDQo+Pi0gICAgICAgICAgICAgICAgICAmbUhpaVZlbmRvckRldmljZVBhdGgsDQo+Pi0gICAg ICAgICAgICAgICAgICAmZ0VmaUhpaUNvbmZpZ0FjY2Vzc1Byb3RvY29sR3VpZCwNCj4+LSAgICAg ICAgICAgICAgICAgICZDYWxsYmFja0luZm8tPkNvbmZpZ0FjY2VzcywNCj4+LSAgICAgICAgICAg ICAgICAgIE5VTEwNCj4+LSAgICAgICAgICAgICAgICAgICk7DQo+Pi0gIEFTU0VSVF9FRklfRVJS T1IgKFN0YXR1cyk7DQo+Pi0NCj4+LSAgLy8NCj4+LSAgLy8gUHVibGlzaCBISUkgZGF0YS4NCj4+ LSAgLy8NCj4+LSAgQ2FsbGJhY2tJbmZvLT5IaWlIYW5kbGUgPSBIaWlBZGRQYWNrYWdlcyAoDQo+ Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZ1VzZXJQcm9maWxlTWFuYWdlckd1aWQs DQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYWxsYmFja0luZm8tPkRyaXZlckhh bmRsZSwNCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJQcm9maWxlTWFuYWdl clN0cmluZ3MsDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VyUHJvZmlsZU1h bmFnZXJWZnJCaW4sDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMDQo+Pi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KPj4tICBBU1NFUlQgKENhbGxiYWNrSW5m by0+SGlpSGFuZGxlICE9IE5VTEwpOw0KPj4tICBtQ2FsbGJhY2tJbmZvID0gQ2FsbGJhY2tJbmZv Ow0KPj4tDQo+Pi0gIHJldHVybiBTdGF0dXM7DQo+Pi19DQo+Pi0NCj4+LQ0KPj5kaWZmIC0tZ2l0 DQo+PmEvU2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9uL1VzZXJQcm9maWxlTWFuYWdlckR4 ZS9Vc2VyUHJvZmlsZU1hbmENCj5nDQo+PmVyLmgNCj4+Yi9TZWN1cml0eVBrZy9Vc2VySWRlbnRp ZmljYXRpb24vVXNlclByb2ZpbGVNYW5hZ2VyRHhlL1VzZXJQcm9maWxlTWFuYQ0KPmcNCj4+ZXIu aA0KPj5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCj4+aW5kZXggYWZmMWUyOGQ5ZC4uMDAwMDAw MDAwMA0KPj4tLS0NCj4+YS9TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vVXNlclByb2Zp bGVNYW5hZ2VyRHhlL1VzZXJQcm9maWxlTWFuYQ0KPmcNCj4+ZXIuaA0KPj4rKysgL2Rldi9udWxs DQo+PkBAIC0xLDQ0NCArMCwwIEBADQo+Pi0vKiogQGZpbGUNCj4+LSAgVGhlIGhlYWRlciBmaWxl IGZvciB1c2VyIHByb2ZpbGUgbWFuYWdlciBkcml2ZXIuDQo+Pi0NCj4+LUNvcHlyaWdodCAoYykg MjAwOSAtIDIwMTgsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4N Cj4+LVRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCj4+LWFyZSBs aWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25z IG9mIHRoZSBCU0QNCj4+TGljZW5zZQ0KPj4td2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmli dXRpb24uICBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIG1heSBiZQ0KPj5mb3VuZCBhdA0K Pj4taHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocA0KPj4tDQo+ Pi1USEUgUFJPR1JBTSBJUyBESVNUUklCVVRFRCBVTkRFUiBUSEUgQlNEIExJQ0VOU0UgT04gQU4g IkFTIElTIg0KPkJBU0lTLA0KPj4tV0lUSE9VVCBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9O UyBPRiBBTlkgS0lORCwgRUlUSEVSDQo+PkVYUFJFU1MgT1IgSU1QTElFRC4NCj4+LQ0KPj4tKiov DQo+Pi0NCj4+LSNpZm5kZWYgX19FRklfVVNFUl9QUk9GSUxFX01BTkFHRVJfSF9fDQo+Pi0jZGVm aW5lIF9fRUZJX1VTRVJfUFJPRklMRV9NQU5BR0VSX0hfXw0KPj4tDQo+Pi0jaW5jbHVkZSA8VWVm aS5oPg0KPj4tDQo+Pi0jaW5jbHVkZSA8R3VpZC9HbG9iYWxWYXJpYWJsZS5oPg0KPj4tI2luY2x1 ZGUgPEd1aWQvTWRlTW9kdWxlSGlpLmg+DQo+Pi0NCj4+LSNpbmNsdWRlIDxQcm90b2NvbC9IaWlD b25maWdBY2Nlc3MuaD4NCj4+LSNpbmNsdWRlIDxQcm90b2NvbC9Vc2VyQ3JlZGVudGlhbDIuaD4N Cj4+LSNpbmNsdWRlIDxQcm90b2NvbC9Vc2VyTWFuYWdlci5oPg0KPj4tDQo+Pi0jaW5jbHVkZSA8 TGlicmFyeS9VZWZpUnVudGltZVNlcnZpY2VzVGFibGVMaWIuaD4NCj4+LSNpbmNsdWRlIDxMaWJy YXJ5L1VlZmlCb290U2VydmljZXNUYWJsZUxpYi5oPg0KPj4tI2luY2x1ZGUgPExpYnJhcnkvTWVt b3J5QWxsb2NhdGlvbkxpYi5oPg0KPj4tI2luY2x1ZGUgPExpYnJhcnkvQmFzZU1lbW9yeUxpYi5o Pg0KPj4tI2luY2x1ZGUgPExpYnJhcnkvRGV2aWNlUGF0aExpYi5oPg0KPj4tI2luY2x1ZGUgPExp YnJhcnkvRGVidWdMaWIuaD4NCj4+LSNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlMaWIuaD4NCj4+LSNp bmNsdWRlIDxMaWJyYXJ5L1ByaW50TGliLmg+DQo+Pi0jaW5jbHVkZSA8TGlicmFyeS9IaWlMaWIu aD4NCj4+LQ0KPj4tI2luY2x1ZGUgIlVzZXJQcm9maWxlTWFuYWdlckRhdGEuaCINCj4+LQ0KPj4t I2RlZmluZSAgVVNFUl9OQU1FX0xFTkdUSCAgICAgICAgICAxNw0KPj4tDQo+Pi0vLw0KPj4tLy8g Q3JlZGVudGlhbCBQcm92aWRlciBJbmZvcm1hdGlvbi4NCj4+LS8vDQo+Pi10eXBlZGVmIHN0cnVj dCB7DQo+Pi0gIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgIENvdW50Ow0KPj4tICBFRklf VVNFUl9DUkVERU5USUFMMl9QUk9UT0NPTCAqUHJvdmlkZXJbMV07DQo+Pi19IENSRURFTlRJQUxf UFJPVklERVJfSU5GTzsNCj4+LQ0KPj4tLy8NCj4+LS8vIFVzZXIgcHJvZmlsZSBpbmZvcm1hdGlv biBzdHJ1Y3R1cmUuDQo+Pi0vLw0KPj4tdHlwZWRlZiBzdHJ1Y3Qgew0KPj4tICBVSU5UNjQgICAg VXNhZ2VDb3VudDsNCj4+LSAgRUZJX1RJTUUgIENyZWF0ZURhdGU7DQo+Pi0gIEVGSV9USU1FICBV c2FnZURhdGU7DQo+Pi0gIFVJTlROICAgICBBY2Nlc3NQb2xpY3lMZW47DQo+Pi0gIFVJTlROICAg ICBJZGVudGl0eVBvbGljeUxlbjsNCj4+LSAgVUlOVE4gICAgIE5ld0lkZW50aXR5UG9saWN5TGVu Ow0KPj4tICBVSU5UOCAgICAgKkFjY2Vzc1BvbGljeTsNCj4+LSAgVUlOVDggICAgICpJZGVudGl0 eVBvbGljeTsNCj4+LSAgVUlOVDggICAgICpOZXdJZGVudGl0eVBvbGljeTsNCj4+LSAgQ0hBUjE2 ICAgIFVzZXJOYW1lW1VTRVJfTkFNRV9MRU5HVEhdOw0KPj4tICBCT09MRUFOICAgQ3JlYXRlRGF0 ZUV4aXN0Ow0KPj4tICBCT09MRUFOICAgVXNhZ2VEYXRlRXhpc3Q7DQo+Pi0gIEJPT0xFQU4gICBB Y2Nlc3NQb2xpY3lNb2RpZmllZDsNCj4+LSAgQk9PTEVBTiAgIElkZW50aXR5UG9saWN5TW9kaWZp ZWQ7DQo+Pi0gIEJPT0xFQU4gICBOZXdJZGVudGl0eVBvbGljeU1vZGlmaWVkOw0KPj4tfSBVU0VS X0lORk87DQo+Pi0NCj4+LS8vDQo+Pi0vLyBVc2VyIGFjY2VzcyBpbmZvcm1hdGlvbiBzdHJ1Y3R1 cmUuDQo+Pi0vLw0KPj4tdHlwZWRlZiBzdHJ1Y3Qgew0KPj4tICBVSU5UTiAgTG9hZFBlcm1pdExl bjsNCj4+LSAgVUlOVE4gIExvYWRGb3JiaWRMZW47DQo+Pi0gIFVJTlROICBDb25uZWN0UGVybWl0 TGVuOw0KPj4tICBVSU5UTiAgQ29ubmVjdEZvcmJpZExlbjsNCj4+LSAgVUlOVDggICpMb2FkUGVy bWl0Ow0KPj4tICBVSU5UOCAgKkxvYWRGb3JiaWQ7DQo+Pi0gIFVJTlQ4ICAqQ29ubmVjdFBlcm1p dDsNCj4+LSAgVUlOVDggICpDb25uZWN0Rm9yYmlkOw0KPj4tICBVSU5UMzIgQWNjZXNzQm9vdE9y ZGVyOw0KPj4tICBVSU5UOCAgQWNjZXNzUmlnaHQ7DQo+Pi0gIFVJTlQ4ICBBY2Nlc3NTZXR1cDsN Cj4+LX0gVVNFUl9JTkZPX0FDQ0VTUzsNCj4+LQ0KPj4tI2RlZmluZSBVU0VSX1BST0ZJTEVfTUFO QUdFUl9TSUdOQVRVUkUgIFNJR05BVFVSRV8zMiAoJ1UnLCAnUCcsDQo+J00nLA0KPj4nUycpDQo+ Pi0NCj4+LXR5cGVkZWYgc3RydWN0IHsNCj4+LSAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAg ICAgICBTaWduYXR1cmU7DQo+Pi0gIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgICAgRHJp dmVySGFuZGxlOw0KPj4tICBFRklfSElJX0hBTkRMRSAgICAgICAgICAgICAgICAgIEhpaUhhbmRs ZTsNCj4+LSAgRUZJX0hJSV9DT05GSUdfQUNDRVNTX1BST1RPQ09MICBDb25maWdBY2Nlc3M7DQo+ Pi19IFVTRVJfUFJPRklMRV9NQU5BR0VSX0NBTExCQUNLX0lORk87DQo+Pi0NCj4+LS8vDQo+Pi0v LyBISUkgc3BlY2lmaWMgVmVuZG9yIERldmljZSBQYXRoIGRlZmluaXRpb24uDQo+Pi0vLw0KPj4t dHlwZWRlZiBzdHJ1Y3Qgew0KPj4tICBWRU5ET1JfREVWSUNFX1BBVEggICAgICAgIFZlbmRvckRl dmljZVBhdGg7DQo+Pi0gIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAgRW5kOw0KPj4tfSBISUlf VkVORE9SX0RFVklDRV9QQVRIOw0KPj4tDQo+Pi0vLw0KPj4tLy8gVGhpcyBpcyB0aGUgZ2VuZXJh dGVkIElGUiBiaW5hcnkgZGF0YSBmb3IgZWFjaCBmb3Jtc2V0IGRlZmluZWQgaW4gVkZSLg0KPj4t Ly8NCj4+LWV4dGVybiBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VyUHJv ZmlsZU1hbmFnZXJWZnJCaW5bXTsNCj4+LQ0KPj4tLy8NCj4+LS8vIFRoaXMgaXMgdGhlIGdlbmVy YXRlZCBTdHJpbmcgcGFja2FnZSBkYXRhIGZvciAuVU5JIGZpbGUuDQo+Pi0vLw0KPj4tZXh0ZXJu IFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJQcm9maWxlTWFuYWdlclN0 cmluZ3NbXTsNCj4+LQ0KPj4tLy8NCj4+LS8vIFRoZSB1c2VyIG1hbmFnZXIgcHJvdG9jb2wsIHVz ZWQgaW4gc2V2ZXJhbCBmdW5jdGlvbi4NCj4+LS8vDQo+Pi1leHRlcm4gRUZJX1VTRVJfTUFOQUdF Ul9QUk9UT0NPTCAgICAgICAgICAgKm1Vc2VyTWFuYWdlcjsNCj4+LQ0KPj4tLy8NCj4+LS8vIFRo ZSBjcmVkZW50aWFsIHByb3ZpZGVycyBkYXRhYmFzZSBpbiBzeXN0ZW0uDQo+Pi0vLw0KPj4tZXh0 ZXJuIENSRURFTlRJQUxfUFJPVklERVJfSU5GTyAgICAgICAgICAgICptUHJvdmlkZXJJbmZvOw0K Pj4tDQo+Pi0vLw0KPj4tLy8gVGhlIHZhcmlhYmxlcyB1c2VkIHRvIHVwZGF0ZSBpZGVudGl0eSBw b2xpY3kuDQo+Pi0vLw0KPj4tZXh0ZXJuIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG1Qcm92aWRlckNob2ljZTsNCj4+LWV4dGVybiBVSU5UOCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBtQ29ubmNldExvZ2ljYWw7DQo+Pi0NCj4+LS8vDQo+Pi0vLyBUaGUgdmFyaWFi bGVzIHVzZWQgdG8gdXBkYXRlIGFjY2VzcyBwb2xpY3kuDQo+Pi0vLw0KPj4tZXh0ZXJuIFVTRVJf SU5GT19BQ0NFU1MgICAgICAgICAgICAgICAgICAgIG1BY2Nlc3NJbmZvOw0KPj4tDQo+Pi0vLw0K Pj4tLy8gVGhlIHVzZXIgaW5mb3JtYXRpb24gdXNlZCB0byByZWNvcmQgYWxsIGRhdGEgaW4gVUku DQo+Pi0vLw0KPj4tZXh0ZXJuIFVTRVJfSU5GTyAgICAgICAgICAgICAgICAgICAgICAgICAgIG1V c2VySW5mbzsNCj4+LQ0KPj4tZXh0ZXJuIFVTRVJfUFJPRklMRV9NQU5BR0VSX0NBTExCQUNLX0lO Rk8gICptQ2FsbGJhY2tJbmZvOw0KPj4tDQo+Pi1leHRlcm4gRUZJX1VTRVJfUFJPRklMRV9IQU5E TEUgICAgICAgICAgICAgbU1vZGlmeVVzZXI7DQo+Pi0NCj4+LS8qKg0KPj4tICBHZXQgc3RyaW5n IGJ5IHN0cmluZyBpZCBmcm9tIEhJSSBJbnRlcmZhY2UuDQo+Pi0NCj4+LQ0KPj4tICBAcGFyYW1b aW5dIElkICAgICAgU3RyaW5nIElEIHRvIGdldCB0aGUgc3RyaW5nIGZyb20uDQo+Pi0NCj4+LSAg QHJldHZhbCAgQ0hBUjE2ICogIFN0cmluZyBmcm9tIElELg0KPj4tICBAcmV0dmFsICBOVUxMICAg ICAgSWYgZXJyb3Igb2NjdXJzLg0KPj4tDQo+Pi0qKi8NCj4+LUNIQVIxNiAqDQo+Pi1HZXRTdHJp bmdCeUlkICgNCj4+LSAgSU4gRUZJX1NUUklOR19JRCAgICAgICAgICAgICBJZA0KPj4tICApOw0K Pj4tDQo+Pi0vKioNCj4+LSAgQWRkIGEgbmV3IHVzZXIgcHJvZmlsZSBpbnRvIHRoZSB1c2VyIHBy b2ZpbGUgZGF0YWJhc2UuDQo+Pi0NCj4+LSoqLw0KPj4tVk9JRA0KPj4tQ2FsbEFkZFVzZXIgKA0K Pj4tICBWT0lEDQo+Pi0gICk7DQo+Pi0NCj4+LS8qKg0KPj4tICBEaXNwbGF5IHVzZXIgc2VsZWN0 IGZvcm07IGNhbiBzZWxlY3QgYSB1c2VyIHRvIG1vZGlmeS4NCj4+LQ0KPj4tKiovDQo+Pi1WT0lE DQo+Pi1TZWxlY3RVc2VyVG9Nb2RpZnkgICgNCj4+LSAgVk9JRA0KPj4tICApOw0KPj4tDQo+Pi0v KioNCj4+LSAgRGlzcGxheSB1c2VyIHNlbGVjdCBmb3JtLCBjYWIgc2VsZWN0IGEgdXNlciB0byBk ZWxldGUuDQo+Pi0NCj4+LSoqLw0KPj4tVk9JRA0KPj4tU2VsZWN0VXNlclRvRGVsZXRlICgNCj4+ LSAgVk9JRA0KPj4tICApOw0KPj4tDQo+Pi0vKioNCj4+LSAgRGVsZXRlIHRoZSB1c2VyIHNwZWNp ZmllZCBieSBVc2VySW5kZXggaW4gdXNlciBwcm9maWxlIGRhdGFiYXNlLg0KPj4tDQo+Pi0gIEBw YXJhbVtpbl0gIFVzZXJJbmRleCAgICBUaGUgaW5kZXggb2YgdXNlciBpbiB0aGUgdXNlciBuYW1l IGxpc3QgdG8gYmUNCj4+ZGVsZXRlZC4NCj4+LQ0KPj4tKiovDQo+Pi1WT0lEDQo+Pi1EZWxldGVV c2VyICgNCj4+LSAgSU4gVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFVzZXJJbmRleA0KPj4tICApOw0KPj4tDQo+Pi0vKioNCj4+LSAgQWRkIGEgdXNlcm5hbWUgaXRl bSBpbiBmb3JtLg0KPj4tDQo+Pi0gIEBwYXJhbVtpbl0gIFVzZXIgICAgICAgICAgICAgUG9pbnRz IHRvIHRoZSB1c2VyIHByb2ZpbGUgd2hvc2UgdXNlcm5hbWUgaXMNCj5hZGRlZC4NCj4+LSAgQHBh cmFtW2luXSAgSW5kZXggICAgICAgICAgICBUaGUgaW5kZXggb2YgdGhlIHVzZXIgaW4gdGhlIHVz ZXIgbmFtZSBsaXN0Lg0KPj4tICBAcGFyYW1baW5dICBPcENvZGVIYW5kbGUgICAgIFBvaW50cyB0 byBjb250YWluZXIgZm9yIGR5bmFtaWMgY3JlYXRlZA0KPj5vcGNvZGVzLg0KPj4tDQo+Pi0qKi8N Cj4+LVZPSUQNCj4+LUFkZFVzZXJUb0Zvcm0gKA0KPj4tICBJTiAgRUZJX1VTRVJfUFJPRklMRV9I QU5ETEUgICAgICAgICAgICAgICAgICAgVXNlciwNCj4+LSAgSU4gIFVJTlQxNiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4LA0KPj4tICBJTiAgVk9JRCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKk9wQ29kZUhhbmRsZQ0KPj4tICApOw0KPj4tDQo+ Pi0vKioNCj4+LSAgRGlzcGxheSBtb2RpZnkgdXNlciBpbmZvcm1hdGlvbiBmb3JtDQo+Pi0NCj4+ LSAgSW4gdGhpcyBmb3JtLCB1c2VybmFtZSwgY3JlYXRlIERhdGUsIHVzYWdlIGRhdGUsIHVzYWdl IGNvdW50LCBpZGVudGl0eQ0KPnBvbGljeSwNCj4+LSAgYW5kIGFjY2VzcyBwb2xpY3kgYXJlIGRp c3BsYXllZC4NCj4+LQ0KPj4tICBAcGFyYW1baW5dIFVzZXJJbmRleCAgICAgICBUaGUgaW5kZXgg b2YgdGhlIHVzZXIgaW4gZGlzcGxheSBsaXN0IHRvIG1vZGlmeS4NCj4+LQ0KPj4tKiovDQo+Pi1W T0lEDQo+Pi1Nb2RpZnlVc2VySW5mbyAoDQo+Pi0gIElOIFVJTlQ4ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBVc2VySW5kZXgNCj4+LSAgKTsNCj4+LQ0KPj4tLyoqDQo+Pi0g IEdldCB0aGUgdXNlcm5hbWUgZnJvbSB1c2VyIGlucHV0IGFuZCB1cGRhdGUgdXNlcm5hbWUgc3Ry aW5nIGluIEhpaQ0KPj4tICBkYXRhYmFzZSB3aXRoIGl0Lg0KPj4tDQo+Pi0qKi8NCj4+LVZPSUQN Cj4+LU1vZGlmeVVzZXJOYW1lICgNCj4+LSAgVk9JRA0KPj4tICApOw0KPj4tDQo+Pi0vKioNCj4+ LSAgRGlzcGxheSB0aGUgZm9ybSBvZiBtb2RpZnlpbmcgdXNlciBpZGVudGl0eSBwb2xpY3kuDQo+ Pi0NCj4+LSoqLw0KPj4tVk9JRA0KPj4tTW9kaWZ5SWRlbnRpdHlQb2xpY3kgKA0KPj4tICBWT0lE DQo+Pi0gICk7DQo+Pi0NCj4+LS8qKg0KPj4tICBVcGRhdGUgdGhlIG1Vc2VySW5mby5OZXdJZGVu dGl0eVBvbGljeSBhbmQgVUkgd2hlbiAnYWRkIG9wdGlvbicgaXMNCj4+cHJlc3NlZC4NCj4+LQ0K Pj4tKiovDQo+Pi1WT0lEDQo+Pi1BZGRJZGVudGl0eVBvbGljeUl0ZW0gKA0KPj4tICBWT0lEDQo+ Pi0gICk7DQo+Pi0NCj4+LS8qKg0KPj4tICBTYXZlIHRoZSBpZGVudGl0eSBwb2xpY3kgYW5kIHVw ZGF0ZSBVSSB3aXRoIGl0Lg0KPj4tDQo+Pi0gIFRoaXMgZnVuY3Rpb24gd2lsbCB2ZXJpZnkgdGhl IG5ldyBpZGVudGl0eSBwb2xpY3ksIGluIGN1cnJlbnQgaW1wbGVtZW50YXRpb24sDQo+Pi0gIHRo ZSBpZGVudGl0eSBwb2xpY3kgY2FuIGJlOiAgVCwgUCAmIFAgJiBQICYgLi4uLCBQIHwgUCB8IFAg fCAuLi4NCj4+LSAgSGVyZSwgIlQiIG1lYW5zICJUcnVlIiwgIlAiIG1lYW5zICJDcmVkZW50aWFs IFByb3ZpZGVyIiwgIiYiIG1lYW5zDQo+ImFuZCIsDQo+PiJ8IiBtZWFucyAib3IiLg0KPj4tICBP dGhlciBpZGVudGl0eSBwb2xpY2llcyBhcmUgbm90IHN1cHBvcnRlZC4NCj4+LQ0KPj4tKiovDQo+ Pi1WT0lEDQo+Pi1TYXZlSWRlbnRpdHlQb2xpY3kgKA0KPj4tICBWT0lEDQo+Pi0gICk7DQo+Pi0N Cj4+LS8qKg0KPj4tICBEaXNwbGF5IG1vZGlmeSB1c2VyIGFjY2VzcyBwb2xpY3kgZm9ybQ0KPj4t DQo+Pi0gIEluIHRoaXMgZm9ybSwgYWNjZXNzIHJpZ2h0LCBhY2Nlc3Mgc2V0dSxwIGFuZCBhY2Nl c3MgYm9vdCBvcmRlciBhcmUNCj4+ZHluYW1pY2FsbHkNCj4+LSAgYWRkZWQuIExvYWQgZGV2aWNl cGF0aCBhbmQgY29ubmVjdCBkZXZpY2VwYXRoIGFyZSBkaXNwbGF5ZWQgdG9vLg0KPj4tDQo+Pi0q Ki8NCj4+LVZPSUQNCj4+LU1vZGlkeUFjY2Vzc1BvbGljeSAoDQo+Pi0gIFZPSUQNCj4+LSAgKTsN Cj4+LQ0KPj4tLyoqDQo+Pi0gIENvbGxlY3QgYWxsIHRoZSBhY2Nlc3MgcG9saWN5IGRhdGEgdG8g bVVzZXJJbmZvLkFjY2Vzc1BvbGljeSwNCj4+LSAgYW5kIHNhdmUgaXQgdG8gdXNlciBwcm9maWxl Lg0KPj4tDQo+Pi0qKi8NCj4+LVZPSUQNCj4+LVNhdmVBY2Nlc3NQb2xpY3kgKA0KPj4tICBWT0lE DQo+Pi0gICk7DQo+Pi0NCj4+LS8qKg0KPj4tICBHZXQgY3VycmVudCB1c2VyJ3MgYWNjZXNzIHJp Z2h0cy4NCj4+LQ0KPj4tICBAcGFyYW1bb3V0XSAgQWNjZXNzUmlnaHQgICBQb2ludHMgdG8gdGhl IGJ1ZmZlciB1c2VkIGZvciB1c2VyJ3MgYWNjZXNzDQo+cmlnaHRzLg0KPj4tDQo+Pi0gIEByZXR2 YWwgRUZJX1NVQ0NFU1MgICAgICAgIEdldCBjdXJyZW50IHVzZXIgYWNjZXNzIHJpZ2h0cyBzdWNj ZXNzZnVsbHkuDQo+Pi0gIEByZXR2YWwgb3RoZXJzICAgICAgICAgICAgIEZhaWwgdG8gZ2V0IGN1 cnJlbnQgdXNlciBhY2Nlc3MgcmlnaHRzLg0KPj4tDQo+Pi0qKi8NCj4+LUVGSV9TVEFUVVMNCj4+ LUdldEFjY2Vzc1JpZ2h0ICgNCj4+LSAgT1VUICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAqQWNjZXNzUmlnaHQNCj4+LSAgKTsNCj4+LQ0KPj4tLyoqDQo+Pi0gIERp c3BsYXkgdGhlIHBlcm1pdCBsb2FkIGRldmljZSBwYXRoIGluIHRoZSBsb2FkYWJsZSBkZXZpY2Ug cGF0aCBsaXN0Lg0KPj4tDQo+Pi0qKi8NCj4+LVZPSUQNCj4+LURpc3BsYXlMb2FkUGVybWl0KA0K Pj4tICBWT0lEDQo+Pi0gICk7DQo+Pi0NCj4+LS8qKg0KPj4tICBEaXNwbGF5IHRoZSBmb3JiaWQg bG9hZCBkZXZpY2UgcGF0aCBsaXN0IChtQWNjZXNzSW5mby5Mb2FkRm9yYmlkKS4NCj4+LQ0KPj4t KiovDQo+Pi1WT0lEDQo+Pi1EaXNwbGF5TG9hZEZvcmJpZCAoDQo+Pi0gIFZPSUQNCj4+LSAgKTsN Cj4+LQ0KPj4tLyoqDQo+Pi0gIERpc3BsYXkgdGhlIHBlcm1pdCBjb25uZWN0IGRldmljZSBwYXRo Lg0KPj4tDQo+Pi0qKi8NCj4+LVZPSUQNCj4+LURpc3BsYXlDb25uZWN0UGVybWl0ICgNCj4+LSAg Vk9JRA0KPj4tICApOw0KPj4tDQo+Pi0vKioNCj4+LSAgRGlzcGxheSB0aGUgZm9yYmlkIGNvbm5l Y3QgZGV2aWNlIHBhdGggbGlzdC4NCj4+LQ0KPj4tKiovDQo+Pi1WT0lEDQo+Pi1EaXNwbGF5Q29u bmVjdEZvcmJpZCAoDQo+Pi0gIFZPSUQNCj4+LSAgKTsNCj4+LQ0KPj4tLyoqDQo+Pi0gIERlbGV0 ZSB0aGUgc3BlY2lmaWVkIGRldmljZSBwYXRoIGJ5IERyaXZlckluZGV4IGZyb20gdGhlIGZvcmJp ZCBkZXZpY2UNCj5wYXRoDQo+Pi0gIGxpc3QgKG1BY2Nlc3NJbmZvLkxvYWRGb3JiaWQpLg0KPj4t DQo+Pi0gIEBwYXJhbVtpbl0gIERyaXZlckluZGV4ICAgVGhlIGluZGV4IG9mIGRyaXZlciBpbiBh IGZvcmJpZGRlbiBkZXZpY2UgcGF0aCBsaXN0Lg0KPj4tDQo+Pi0qKi8NCj4+LVZPSUQNCj4+LURl bGV0ZUZyb21Gb3JiaWRMb2FkICgNCj4+LSAgSU4gIFVJTlQxNiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIERyaXZlckluZGV4DQo+Pi0gICk7DQo+Pi0NCj4+LS8qKg0KPj4tICBB ZGQgdGhlIHNwZWNpZmllZCBkZXZpY2UgcGF0aCBieSBEcml2ZXJJbmRleCB0byB0aGUgZm9yYmlk IGRldmljZSBwYXRoDQo+Pi0gIGxpc3QgKG1BY2Nlc3NJbmZvLkxvYWRGb3JiaWQpLg0KPj4tDQo+ Pi0gIEBwYXJhbVtpbl0gIERyaXZlckluZGV4ICAgVGhlIGluZGV4IG9mIGRyaXZlciBzYXZlZCBp biBkcml2ZXIgb3B0aW9ucy4NCj4+LQ0KPj4tKiovDQo+Pi1WT0lEDQo+Pi1BZGRUb0ZvcmJpZExv YWQgKA0KPj4tICBJTiAgVUlOVDE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg RHJpdmVySW5kZXgNCj4+LSAgKTsNCj4+LQ0KPj4tLyoqDQo+Pi0gIEdldCB1c2VyIG5hbWUgZnJv bSB0aGUgcG9wdXAgd2luZG93cy4NCj4+LQ0KPj4tICBAcGFyYW1baW4sIG91dF0gIFVzZXJOYW1l TGVuICAgT24gZW50cnksIHBvaW50IHRvIHRoZSBidWZmZXIgbGVuZ2ggb2YNCj4+VXNlck5hbWUu DQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPbiBleGl0LCBwb2ludCB0byB0 aGUgaW5wdXQgdXNlciBuYW1lIGxlbmd0aC4NCj4+LSAgQHBhcmFtW291dF0gICAgICBVc2VyTmFt ZSAgICAgIFRoZSBidWZmZXIgdG8gaG9sZCB0aGUgaW5wdXQgdXNlciBuYW1lLg0KPj4tDQo+Pi0g IEByZXR2YWwgRUZJX0FCT1JURUQgICAgICAgICAgICBJdCBpcyBnaXZlbiB1cCBieSBwcmVzc2lu ZyAnRVNDJyBrZXkuDQo+Pi0gIEByZXR2YWwgRUZJX05PVF9SRUFEWSAgICAgICAgICBOb3QgYSB2 YWxpZCBpbnB1dCBhdCBhbGwuDQo+Pi0gIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICBH ZXQgYSB1c2VyIG5hbWUgc3VjY2Vzc2Z1bGx5Lg0KPj4tDQo+Pi0qKi8NCj4+LUVGSV9TVEFUVVMN Cj4+LUdldFVzZXJOYW1lSW5wdXQgKA0KPj4tICBJTiBPVVQgIFVJTlROICAgICAgICAgKlVzZXJO YW1lTGVuLA0KPj4tICAgICBPVVQgIENIQVIxNiAgICAgICAgKlVzZXJOYW1lDQo+Pi0gICk7DQo+ Pi0NCj4+LS8qKg0KPj4tICBGaW5kIHRoZSBzcGVjaWZpZWQgaW5mbyBpbiBVc2VyIHByb2ZpbGUg YnkgdGhlIEluZm9UeXBlLg0KPj4tDQo+Pi0gIEBwYXJhbVtpbl0gIFVzZXIgICAgICAgICBIYW5k bGUgb2YgdGhlIHVzZXIgd2hvc2UgaW5mb3JtYXRpb24gd2lsbCBiZQ0KPj5zZWFyY2hlZC4NCj4+ LSAgQHBhcmFtW2luXSAgSW5mb1R5cGUgICAgIFRoZSB1c2VyIGluZm9ybWF0aW9uIHR5cGUgdG8g ZmluZC4NCj4+LSAgQHBhcmFtW291dF0gVXNlckluZm8gICAgIFBvaW50cyB0byB1c2VyIGluZm9y bWF0aW9uIGhhbmRsZSBmb3VuZC4NCj4+LQ0KPj4tICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAg RmluZCB0aGUgdXNlciBpbmZvcm1hdGlvbiBzdWNjZXNzZnVsbHkuDQo+Pi0gIEByZXR2YWwgT3Ro ZXJzICAgICAgICAgICBGYWlsIHRvIGZpbmQgdGhlIHVzZXIgaW5mb3JtYXRpb24uDQo+Pi0NCj4+ LSoqLw0KPj4tRUZJX1NUQVRVUw0KPj4tRmluZEluZm9CeVR5cGUgKA0KPj4tICBJTiAgRUZJX1VT RVJfUFJPRklMRV9IQU5ETEUgICAgICAgICAgICAgICAgICAgVXNlciwNCj4+LSAgSU4gIFVJTlQ4 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZm9UeXBlLA0KPj4tICBPVVQg RUZJX1VTRVJfSU5GT19IQU5ETEUgICAgICAgICAgICAgICAgICAgICAgKlVzZXJJbmZvDQo+Pi0g ICk7DQo+Pi0NCj4+LS8qKg0KPj4tICBDb252ZXJ0IHRoZSBpZGVudGl0eSBwb2xpY3kgdG8gYSB1 bmljb2RlIHN0cmluZyBhbmQgdXBkYXRlIHRoZSBIaWkgZGF0YWJhc2UNCj4+LSAgSXBTdHJpbmdJ ZCBzdHJpbmcgd2l0aCBpdC4NCj4+LQ0KPj4tICBAcGFyYW1baW5dICBJcCAgICAgICAgIFBvaW50 cyB0byBpZGVudGl0eSBwb2xpY3kuDQo+Pi0gIEBwYXJhbVtpbl0gIElwTGVuICAgICAgVGhlIGlk ZW50aXR5IHBvbGljeSBsZW5ndGguDQo+Pi0gIEBwYXJhbVtpbl0gIElwU3RyaW5nSWQgU3RyaW5n IElEIGluIHRoZSBISUkgZGF0YWJhc2UgdG8gYmUgcmVwbGFjZWQuDQo+Pi0NCj4+LSoqLw0KPj4t Vk9JRA0KPj4tUmVzb2x2ZUlkZW50aXR5UG9saWN5ICgNCj4+LSAgSU4gIFVJTlQ4ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICpJcCwNCj4+LSAgSU4gIFVJTlROICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIElwTGVuLA0KPj4tICBJTiAgRUZJX1NUUklOR19J RCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSXBTdHJpbmdJZA0KPj4tICApOw0KPj4tDQo+ Pi0vKioNCj4+LSAgRXhwYW5kIGFjY2VzcyBwb2xpY3kgbWVtb3J5IHNpemUuDQo+Pi0NCj4+LSAg QHBhcmFtW2luXSBWYWxpZExlbiAgICAgICBUaGUgdmFsaWQgYWNjZXNzIHBvbGljeSBsZW5ndGgu DQo+Pi0gIEBwYXJhbVtpbl0gRXhwYW5kTGVuICAgICAgVGhlIGxlbmd0aCB0aGF0IGlzIG5lZWRl ZCB0byBleHBhbmQuDQo+Pi0NCj4+LSoqLw0KPj4tVk9JRA0KPj4tRXhwYW5kTWVtb3J5ICgNCj4+ LSAgSU4gICAgICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbGlkTGVu LA0KPj4tICBJTiAgICAgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhw YW5kTGVuDQo+Pi0gICk7DQo+Pi0NCj4+LS8qKg0KPj4tICBEZWxldGUgVXNlcidzIGNyZWRlbnRh bCBmcm9tIGFsbCB0aGUgcHJvdmlkZXJzIHRoYXQgZXhpc3QgaW4gVXNlcidzIGlkZW50aXR5DQo+ PnBvbGljeS4NCj4+LQ0KPj4tICBAcGFyYW1baW5dICBJZGVudGl0eVBvbGljeSAgICAgUG9pbnQg dG8gVXNlcidzIGlkZW50aXR5IHBvbGljeS4NCj4+LSAgQHBhcmFtW2luXSAgSWRlbnRpdHlQb2xp Y3lMZW4gIFRoZSBsZW5ndGggb2YgdGhlIGlkZW50aXR5IHBvbGljeS4NCj4+LSAgQHBhcmFtW2lu XSAgVXNlciAgICAgICAgICAgICAgIFBvaW50cyB0byB1c2VyIHByb2ZpbGUuDQo+Pi0NCj4+LSoq Lw0KPj4tVk9JRA0KPj4tRGVsZXRlQ3JlZGVudGlhbEZyb21Qcm92aWRlcnMgKA0KPj4tICBJTiAg ICAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpJZGVudGl0eVBvbGljeSwN Cj4+LSAgSU4gICAgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWRlbnRp dHlQb2xpY3lMZW4sDQo+Pi0gIElOICAgICBFRklfVVNFUl9QUk9GSUxFX0hBTkRMRSAgICAgICAg ICAgICAgIFVzZXINCj4+LSAgKTsNCj4+LQ0KPj4tI2VuZGlmDQo+PmRpZmYgLS1naXQNCj4+YS9T ZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vVXNlclByb2ZpbGVNYW5hZ2VyRHhlL1VzZXJQ cm9maWxlTWFuYQ0KPmcNCj4+ZXIudW5pDQo+PmIvU2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0 aW9uL1VzZXJQcm9maWxlTWFuYWdlckR4ZS9Vc2VyUHJvZmlsZU1hbmENCj5nDQo+PmVyLnVuaQ0K Pj5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCj4+aW5kZXggZTRhNzY4ZTAwYS4uMDAwMDAwMDAw MA0KPj4tLS0NCj4+YS9TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vVXNlclByb2ZpbGVN YW5hZ2VyRHhlL1VzZXJQcm9maWxlTWFuYQ0KPmcNCj4+ZXIudW5pDQo+PisrKyAvZGV2L251bGwN Cj4+QEAgLTEsMjIgKzAsMCBAQA0KPj4tLy8gLyoqIEBmaWxlDQo+Pi0vLyBBIFVJIHRvb2wgdG8g bWFuYWdlIHVzZXIgcHJvZmlsZXMNCj4+LS8vDQo+Pi0vLyBCeSB0aGlzIG1vZHVsZSwgdXNlciBj YW4gYWRkL3VwZGF0ZS9kZWxldGUgdXNlciBwcm9maWxlcywgYW5kIGNhbiBhbHNvDQo+Pi0vLyBt b2RpZnkgdGhlIHVzZXIgYWNjZXNzIHBvbGljeSBhbmQgdGhlIHVzZXIgaWRlbnRpZmljYXRpb24g cG9saWN5Lg0KPj4tLy8NCj4+LS8vIENvcHlyaWdodCAoYykgMjAwOSAtIDIwMTQsIEludGVsIENv cnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4+LS8vDQo+Pi0vLyBUaGlzIHBy b2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQo+Pi0vLyBhcmUgbGljZW5zZWQg YW5kIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUN Cj5CU0QNCj4+TGljZW5zZQ0KPj4tLy8gd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRp b24uIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgbWF5IGJlDQo+PmZvdW5kIGF0DQo+Pi0v LyBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vuc2UucGhwDQo+Pi0vLyBU SEUgUFJPR1JBTSBJUyBESVNUUklCVVRFRCBVTkRFUiBUSEUgQlNEIExJQ0VOU0UgT04gQU4gIkFT IElTIg0KPj5CQVNJUywNCj4+LS8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElP TlMgT0YgQU5ZIEtJTkQsIEVJVEhFUg0KPj5FWFBSRVNTIE9SIElNUExJRUQuDQo+Pi0vLw0KPj4t Ly8gKiovDQo+Pi0NCj4+LQ0KPj4tI3N0cmluZyBTVFJfTU9EVUxFX0FCU1RSQUNUICAgICAgICAg ICAgICNsYW5ndWFnZSBlbi1VUyAiQSBVSSB0b29sIHRvDQo+Pm1hbmFnZSB1c2VyIHByb2ZpbGVz Ig0KPj4tDQo+Pi0jc3RyaW5nIFNUUl9NT0RVTEVfREVTQ1JJUFRJT04gICAgICAgICAgI2xhbmd1 YWdlIGVuLVVTICJCeSB0aGlzIG1vZHVsZSwNCj4+dXNlciBjYW4gYWRkL3VwZGF0ZS9kZWxldGUg dXNlciBwcm9maWxlcywgYW5kIGNhbiBhbHNvIG1vZGlmeSB0aGUgdXNlcg0KPmFjY2Vzcw0KPj5w b2xpY3kgYW5kIHRoZSB1c2VyIGlkZW50aWZpY2F0aW9uIHBvbGljeS4iDQo+Pi0NCj4+ZGlmZiAt LWdpdA0KPj5hL1NlY3VyaXR5UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Vc2VyUHJvZmlsZU1hbmFn ZXJEeGUvVXNlclByb2ZpbGVNYW5hDQo+Zw0KPj5lckRhdGEuaA0KPj5iL1NlY3VyaXR5UGtnL1Vz ZXJJZGVudGlmaWNhdGlvbi9Vc2VyUHJvZmlsZU1hbmFnZXJEeGUvVXNlclByb2ZpbGVNYW5hDQo+ Zw0KPj5lckRhdGEuaA0KPj5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCj4+aW5kZXggYTgzY2Fh YzliYS4uMDAwMDAwMDAwMA0KPj4tLS0NCj4+YS9TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRp b24vVXNlclByb2ZpbGVNYW5hZ2VyRHhlL1VzZXJQcm9maWxlTWFuYQ0KPmcNCj4+ZXJEYXRhLmgN Cj4+KysrIC9kZXYvbnVsbA0KPj5AQCAtMSwxNTggKzAsMCBAQA0KPj4tLyoqIEBmaWxlDQo+Pi0g IFRoZSBmb3JtIGRhdGEgZm9yIHVzZXIgcHJvZmlsZSBtYW5hZ2VyIGRyaXZlci4NCj4+LQ0KPj4t Q29weXJpZ2h0IChjKSAyMDA5IC0gMjAxOCwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMg cmVzZXJ2ZWQuPEJSPg0KPj4tVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVy aWFscw0KPj4tYXJlIGxpY2Vuc2VkIGFuZCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMg YW5kIGNvbmRpdGlvbnMgb2YgdGhlIEJTRA0KPj5MaWNlbnNlDQo+Pi13aGljaCBhY2NvbXBhbmll cyB0aGlzIGRpc3RyaWJ1dGlvbi4gIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgbWF5IGJl DQo+PmZvdW5kIGF0DQo+Pi1odHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vu c2UucGhwDQo+Pi0NCj4+LVRIRSBQUk9HUkFNIElTIERJU1RSSUJVVEVEIFVOREVSIFRIRSBCU0Qg TElDRU5TRSBPTiBBTiAiQVMgSVMiDQo+QkFTSVMsDQo+Pi1XSVRIT1VUIFdBUlJBTlRJRVMgT1Ig UkVQUkVTRU5UQVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVINCj4+RVhQUkVTUyBPUiBJTVBMSUVE Lg0KPj4tDQo+Pi0qKi8NCj4+LQ0KPj4tI2lmbmRlZiBfX1VTRVJfUFJPRklMRV9NQU5BR0VSX0RB VEFfSF9fDQo+Pi0jZGVmaW5lIF9fVVNFUl9QUk9GSUxFX01BTkFHRVJfREFUQV9IX18NCj4+LQ0K Pj4tI2luY2x1ZGUgPEd1aWQvVXNlclByb2ZpbGVNYW5hZ2VySGlpLmg+DQo+Pi0NCj4+LS8vDQo+ Pi0vLyBGb3JtIElEDQo+Pi0vLw0KPj4tI2RlZmluZSBGT1JNSURfVVNFUl9NQU5BR0UgICAgICAg ICAgMHgwMDAxDQo+Pi0jZGVmaW5lIEZPUk1JRF9NT0RJRllfVVNFUiAgICAgICAgICAweDAwMDIN Cj4+LSNkZWZpbmUgRk9STUlEX0RFTF9VU0VSICAgICAgICAgICAgIDB4MDAwMw0KPj4tI2RlZmlu ZSBGT1JNSURfVVNFUl9JTkZPICAgICAgICAgICAgMHgwMDA0DQo+Pi0jZGVmaW5lIEZPUk1JRF9N T0RJRllfSVAgICAgICAgICAgICAweDAwMDUNCj4+LSNkZWZpbmUgRk9STUlEX01PRElGWV9BUCAg ICAgICAgICAgIDB4MDAwNg0KPj4tI2RlZmluZSBGT1JNSURfTE9BRF9EUCAgICAgICAgICAgICAg MHgwMDA3DQo+Pi0jZGVmaW5lIEZPUk1JRF9DT05ORUNUX0RQICAgICAgICAgICAweDAwMDgNCj4+ LSNkZWZpbmUgRk9STUlEX1BFUk1JVF9MT0FEX0RQICAgICAgIDB4MDAwOQ0KPj4tI2RlZmluZSBG T1JNSURfRk9SQklEX0xPQURfRFAgICAgICAgMHgwMDBBDQo+Pi0jZGVmaW5lIEZPUk1JRF9QRVJN SVRfQ09OTkVDVF9EUCAgICAweDAwMEINCj4+LSNkZWZpbmUgRk9STUlEX0ZPUkJJRF9DT05ORUNU X0RQICAgIDB4MDAwQw0KPj4tDQo+Pi0vLw0KPj4tLy8gTGFiZWwgSUQNCj4+LS8vDQo+Pi0jZGVm aW5lICBMQUJFTF9VU0VSX01BTkFHRV9GVU5DICAgICAweDAwMTANCj4+LSNkZWZpbmUgIExBQkVM X1VTRVJfREVMX0ZVTkMgICAgICAgIDB4MDAyMA0KPj4tI2RlZmluZSAgTEFCRUxfVVNFUl9NT0Rf RlVOQyAgICAgICAgMHgwMDMwDQo+Pi0jZGVmaW5lICBMQUJFTF9VU0VSX0lORk9fRlVOQyAgICAg ICAweDAwNDANCj4+LSNkZWZpbmUgIExBQkVMX0lQX01PRF9GVU5DICAgICAgICAgIDB4MDA1MA0K Pj4tI2RlZmluZSAgTEFCRUxfQVBfTU9EX0ZVTkMgICAgICAgICAgMHgwMDYwDQo+Pi0jZGVmaW5l ICBMQUJFTF9QRVJNSVRfTE9BRF9GVU5DICAgICAweDAwNzANCj4+LSNkZWZpbmUgIExBQkxFX0ZP UkJJRF9MT0FEX0ZVTkMgICAgIDB4MDA4MA0KPj4tI2RlZmluZSAgTEFCRUxfRU5EICAgICAgICAg ICAgICAgICAgMHgwMEYwDQo+Pi0NCj4+LS8vDQo+Pi0vLyBGaXJzdCBmb3JtIGtleSAoQWRkL21v ZGlmeS9kZWwgdXNlciBwcm9maWxlKS4NCj4+LS8vIEZpcnN0IDIgYml0cyAoYml0IDE2fjE1KS4N Cj4+LS8vDQo+Pi0jZGVmaW5lICBLRVlfTU9ESUZZX1VTRVIgICAgICAgICAgICAweDQwMDANCj4+ LSNkZWZpbmUgIEtFWV9ERUxfVVNFUiAgICAgICAgICAgICAgIDB4ODAwMA0KPj4tI2RlZmluZSAg S0VZX0FERF9VU0VSICAgICAgICAgICAgICAgMHhDMDAwDQo+Pi0jZGVmaW5lICBLRVlfRklSU1Rf Rk9STV9NQVNLICAgICAgICAweEMwMDANCj4+LQ0KPj4tLy8NCj4+LS8vIFNlY29uZCBmb3JtIGtl eSAoRGlzcGxheSBuZXcgZm9ybSAvU2VsZWN0IHVzZXIgLyBtb2RpZnkgZGV2aWNlIHBhdGggaW4N Cj4+YWNjZXNzIHBvbGljeSkuDQo+Pi0vLyBOZXh0IDIgYml0cyAoYml0IDE0fjEzKS4NCj4+LS8v DQo+Pi0jZGVmaW5lICBLRVlfRU5URVJfTkVYVF9GT1JNICAgICAgICAweDAwMDANCj4+LSNkZWZp bmUgIEtFWV9TRUxFQ1RfVVNFUiAgICAgICAgICAgIDB4MTAwMA0KPj4tI2RlZmluZSAgS0VZX01P RElGWV9BUF9EUCAgICAgICAgICAgMHgyMDAwDQo+Pi0jZGVmaW5lICBLRVlfT1BFTl9DTE9TRV9G T1JNX0FDVElPTiAweDMwMDANCj4+LSNkZWZpbmUgIEtFWV9TRUNPTkRfRk9STV9NQVNLICAgICAg IDB4MzAwMA0KPj4tDQo+Pi0vLw0KPj4tLy8gVXNlciBwcm9maWxlIGluZm9ybWF0aW9uIGZvcm0g a2V5Lg0KPj4tLy8gTmV4dCAzIGJpdHMgKGJpdCAxMn4xMCkuDQo+Pi0vLw0KPj4tI2RlZmluZSAg S0VZX01PRElGWV9OQU1FICAgICAgICAgICAgMHgwMjAwDQo+Pi0jZGVmaW5lICBLRVlfTU9ESUZZ X0lQICAgICAgICAgICAgICAweDA0MDANCj4+LSNkZWZpbmUgIEtFWV9NT0RJRllfQVAgICAgICAg ICAgICAgIDB4MDYwMA0KPj4tI2RlZmluZSAgS0VZX01PRElGWV9JTkZPX01BU0sgICAgICAgMHgw RTAwDQo+Pi0NCj4+LS8vDQo+Pi0vLyBTcGVjaWZpZWQga2V5LCB1c2VkIGluIFZGUiAoS0VZX01P RElGWV9VU0VSIHwgS0VZX1NFTEVDVF9VU0VSIHwNCj4+S0VZX01PRElGWV9OQU1FKS4NCj4+LS8v DQo+Pi0jZGVmaW5lICBLRVlfTU9ESUZZX1VTRVJfTkFNRSAgICAgICAweDUyMDANCj4+LQ0KPj4t Ly8NCj4+LS8vIE1vZGlmeSBpZGVudGl0eSBwb2xpY3kgZm9ybSBrZXkuDQo+Pi0vLyBOZXh0IDMg Yml0cyAoYml0IDl+NykuDQo+Pi0vLw0KPj4tI2RlZmluZSAgS0VZX01PRElGWV9QUk9WICAgICAg ICAgICAgMHgwMDQwDQo+Pi0jZGVmaW5lICBLRVlfTU9ESUZZX01UWVBFICAgICAgICAgICAweDAw ODANCj4+LSNkZWZpbmUgIEtFWV9NT0RJRllfQ09OTiAgICAgICAgICAgIDB4MDBDMA0KPj4tI2Rl ZmluZSAgS0VZX0FERF9JUF9PUCAgICAgICAgICAgICAgMHgwMTAwDQo+Pi0jZGVmaW5lICBLRVlf SVBfUkVUVVJOX1VJRiAgICAgICAgICAweDAxNDANCj4+LSNkZWZpbmUgIEtFWV9NT0RJRllfSVBf TUFTSyAgICAgICAgIDB4MDFDMA0KPj4tDQo+Pi0vLw0KPj4tLy8gU3BlY2lmaWVkIGtleS4NCj4+ LS8vDQo+Pi0jZGVmaW5lICBLRVlfQUREX0xPR0lDQUxfT1AgICAgICAgICAweDU1MDANCj4+LSNk ZWZpbmUgIEtFWV9JUF9SRVRVUk4gICAgICAgICAgICAgIDB4NTU0MA0KPj4tDQo+Pi0vLw0KPj4t Ly8gTW9kaWZ5IGFjY2VzcyBwb2xpY3kgZm9ybSBrZXkuDQo+Pi0vLyBOZXh0IDMgYml0cyAoYml0 IDl+NykuDQo+Pi0vLw0KPj4tI2RlZmluZSAgS0VZX01PRElGWV9SSUdIVCAgICAgICAgICAgMHgw MDQwDQo+Pi0jZGVmaW5lICBLRVlfTU9ESUZZX1NFVFVQICAgICAgICAgICAweDAwODANCj4+LSNk ZWZpbmUgIEtFWV9NT0RJRllfQk9PVCAgICAgICAgICAgIDB4MDBDMA0KPj4tI2RlZmluZSAgS0VZ X01PRElGWV9MT0FEICAgICAgICAgICAgMHgwMTAwDQo+Pi0jZGVmaW5lICBLRVlfTU9ESUZZX0NP Tk5FQ1QgICAgICAgICAweDAxNDANCj4+LSNkZWZpbmUgIEtFWV9BUF9SRVRVUk5fVUlGICAgICAg ICAgIDB4MDE4MA0KPj4tI2RlZmluZSAgS0VZX01PRElGWV9BUF9NQVNLICAgICAgICAgMHgwMUMw DQo+Pi0NCj4+LS8vDQo+Pi0vLyBTcGVjaWZpZWQga2V5Lg0KPj4tLy8NCj4+LSNkZWZpbmUgIEtF WV9MT0FEX0RQICAgICAgICAgICAgICAgIDB4NTcwMA0KPj4tI2RlZmluZSAgS0VZX0NPTk5fRFAg ICAgICAgICAgICAgICAgMHg1NzQwDQo+Pi0jZGVmaW5lICBLRVlfQVBfUkVUVVJOICAgICAgICAg ICAgICAweDU3ODANCj4+LQ0KPj4tLy8NCj4+LS8vIERldmljZSBwYXRoIGZvcm0ga2V5Lg0KPj4t Ly8gTmV4dCAyIGJpdHMgKGJpdCA2fjUpLg0KPj4tLy8NCj4+LSNkZWZpbmUgIEtFWV9QRVJNSVRf TU9ESUZZICAgICAgICAgIDB4MDAxMA0KPj4tI2RlZmluZSAgS0VZX0ZPUkJJRF9NT0RJRlkgICAg ICAgICAgMHgwMDIwDQo+Pi0jZGVmaW5lICBLRVlfRElTUExBWV9EUF9NQVNLICAgICAgICAweDAw MzANCj4+LQ0KPj4tLy8NCj4+LS8vIFNwZWNpZmllZCBrZXkuDQo+Pi0vLw0KPj4tI2RlZmluZSAg S0VZX0xPQURfUEVSTUlUICAgICAgICAgICAgMHg1NzEwDQo+Pi0jZGVmaW5lICBLRVlfTE9BRF9G T1JCSUQgICAgICAgICAgICAweDU3MjANCj4+LSNkZWZpbmUgIEtFWV9DT05ORUNUX1BFUk1JVCAg ICAgICAgIDB4NTc1MA0KPj4tI2RlZmluZSAgS0VZX0NPTk5FQ1RfRk9SQklEICAgICAgICAgMHg1 NzYwDQo+Pi0NCj4+LS8vDQo+Pi0vLyBEZXZpY2UgcGF0aCBtb2RpZnkga2V5Lg0KPj4tLy8gMiBi aXRzIChiaXQgMTJ+MTEpLg0KPj4tLy8NCj4+LSNkZWZpbmUgS0VZX0xPQURfUEVSTUlUX01PRElG WSAgICAgIDB4MDAwMA0KPj4tI2RlZmluZSBLRVlfTE9BRF9GT1JCSURfTU9ESUZZICAgICAgMHgw NDAwDQo+Pi0jZGVmaW5lIEtFWV9DT05ORUNUX1BFUk1JVF9NT0RJRlkgICAweDA4MDANCj4+LSNk ZWZpbmUgS0VZX0NPTk5FQ1RfRk9SQklEX01PRElGWSAgIDB4MEMwMA0KPj4tI2RlZmluZSBLRVlf TU9ESUZZX0RQX01BU0sgICAgICAgICAgMHgwQzAwDQo+Pi0NCj4+LQ0KPj4tLy8NCj4+LS8vIFRo ZSBwZXJtaXNzaW9ucyB1c2FibGUgd2hlbiBjb25maWd1cmluZyB0aGUgcGxhdGZvcm0uDQo+Pi0v Lw0KPj4tI2RlZmluZSAgQUNDRVNTX1NFVFVQX1JFU1RSSUNURUQgICAxDQo+Pi0jZGVmaW5lICBB Q0NFU1NfU0VUVVBfTk9STUFMICAgICAgIDINCj4+LSNkZWZpbmUgIEFDQ0VTU19TRVRVUF9BRE1J TiAgICAgICAgMw0KPj4tDQo+Pi0vLw0KPj4tLy8gUXVlc3Rpb24gSUQgZm9yIHRoZSBxdWVzdGlv biB1c2VkIGluIGVhY2ggZm9ybQ0KPj4oS0VZX09QRU5fQ0xPU0VfRk9STV9BQ1RJT04gfCBGT1JN SURfRk9STV9VU0VSX01BTkFHRSkNCj4+LS8vIFRoaXMgSUQgaXMgdXNlZCBpbiBGT1JNIE9QRU4v Q0xPU0UgQ2FsbEJhY2sgYWN0aW9uLg0KPj4tLy8NCj4+LSNkZWZpbmUgUVVFU1RJT05JRF9VU0VS X01BTkFHRSAgICAgIDB4MzAwMQ0KPj4tDQo+Pi0jZW5kaWYNCj4+ZGlmZiAtLWdpdA0KPj5hL1Nl Y3VyaXR5UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Vc2VyUHJvZmlsZU1hbmFnZXJEeGUvVXNlclBy b2ZpbGVNYW5hDQo+Zw0KPj5lckR4ZS5pbmYNCj4+Yi9TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmlj YXRpb24vVXNlclByb2ZpbGVNYW5hZ2VyRHhlL1VzZXJQcm9maWxlTWFuYQ0KPmcNCj4+ZXJEeGUu aW5mDQo+PmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NA0KPj5pbmRleCBjZGQ5NzczMWIyLi4wMDAw MDAwMDAwDQo+Pi0tLQ0KPj5hL1NlY3VyaXR5UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Vc2VyUHJv ZmlsZU1hbmFnZXJEeGUvVXNlclByb2ZpbGVNYW5hDQo+Zw0KPj5lckR4ZS5pbmYNCj4+KysrIC9k ZXYvbnVsbA0KPj5AQCAtMSw3MiArMCwwIEBADQo+Pi0jIyBAZmlsZQ0KPj4tIyAgQSBVSSB0b29s IHRvIG1hbmFnZSB1c2VyIHByb2ZpbGVzDQo+Pi0jDQo+Pi0jICBCeSB0aGlzIG1vZHVsZSwgdXNl ciBjYW4gYWRkL3VwZGF0ZS9kZWxldGUgdXNlciBwcm9maWxlcywgYW5kIGNhbiBhbHNvDQo+Pi0j ICBtb2RpZnkgdGhlIHVzZXIgYWNjZXNzIHBvbGljeSBhbmQgdGhlIHVzZXIgaWRlbnRpZmljYXRp b24gcG9saWN5Lg0KPj4tIw0KPj4tIyBDb3B5cmlnaHQgKGMpIDIwMDkgLSAyMDE4LCBJbnRlbCBD b3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+Pi0jIFRoaXMgcHJvZ3JhbSBh bmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCj4+LSMgYXJlIGxpY2Vuc2VkIGFuZCBtYWRl IGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlDQo+QlNEDQo+ PkxpY2Vuc2UNCj4+LSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24uIFRoZSBm dWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgbWF5IGJlDQo+PmZvdW5kIGF0DQo+Pi0jIGh0dHA6Ly9v cGVuc291cmNlLm9yZy9saWNlbnNlcy9ic2QtbGljZW5zZS5waHANCj4+LSMgVEhFIFBST0dSQU0g SVMgRElTVFJJQlVURUQgVU5ERVIgVEhFIEJTRCBMSUNFTlNFIE9OIEFOICJBUyBJUyINCj4+QkFT SVMsDQo+Pi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlMgT0YgQU5ZIEtJ TkQsIEVJVEhFUg0KPj5FWFBSRVNTIE9SIElNUExJRUQuDQo+Pi0jDQo+Pi0jIw0KPj4tDQo+Pi1b RGVmaW5lc10NCj4+LSAgSU5GX1ZFUlNJT04gICAgICAgICAgICAgICAgICAgID0gMHgwMDAxMDAw NQ0KPj4tICBCQVNFX05BTUUgICAgICAgICAgICAgICAgICAgICAgPSBVc2VyUHJvZmlsZU1hbmFn ZXINCj4+LSAgTU9EVUxFX1VOSV9GSUxFICAgICAgICAgICAgICAgID0gVXNlclByb2ZpbGVNYW5h Z2VyLnVuaQ0KPj4tICBGSUxFX0dVSUQgICAgICAgICAgICAgICAgICAgICAgPSBFMzhDQjUyRC1B NzRELTQ1ZGItQThEMC0yOTBDOUIyMUJCRjINCj4+LSAgTU9EVUxFX1RZUEUgICAgICAgICAgICAg ICAgICAgID0gRFhFX0RSSVZFUg0KPj4tICBWRVJTSU9OX1NUUklORyAgICAgICAgICAgICAgICAg PSAxLjANCj4+LSAgRU5UUllfUE9JTlQgICAgICAgICAgICAgICAgICAgID0gVXNlclByb2ZpbGVN YW5hZ2VySW5pdA0KPj4tDQo+Pi1bU291cmNlc10NCj4+LSAgVXNlclByb2ZpbGVNYW5hZ2VyLmMN Cj4+LSAgVXNlclByb2ZpbGVNYW5hZ2VyLmgNCj4+LSAgVXNlclByb2ZpbGVBZGQuYw0KPj4tICBV c2VyUHJvZmlsZURlbGV0ZS5jDQo+Pi0gIFVzZXJQcm9maWxlTW9kaWZ5LmMNCj4+LSAgTW9kaWZ5 SWRlbnRpdHlQb2xpY3kuYw0KPj4tICBNb2RpZnlBY2Nlc3NQb2xpY3kuYw0KPj4tICBVc2VyUHJv ZmlsZU1hbmFnZXJEYXRhLmgNCj4+LSAgVXNlclByb2ZpbGVNYW5hZ2VyU3RyaW5ncy51bmkNCj4+ LSAgVXNlclByb2ZpbGVNYW5hZ2VyVmZyLlZmcg0KPj4tDQo+Pi1bUGFja2FnZXNdDQo+Pi0gIE1k ZVBrZy9NZGVQa2cuZGVjDQo+Pi0gIE1kZU1vZHVsZVBrZy9NZGVNb2R1bGVQa2cuZGVjDQo+Pi0g IFNlY3VyaXR5UGtnL1NlY3VyaXR5UGtnLmRlYw0KPj4tDQo+Pi1bTGlicmFyeUNsYXNzZXNdDQo+ Pi0gIFVlZmlSdW50aW1lU2VydmljZXNUYWJsZUxpYg0KPj4tICBVZWZpQm9vdFNlcnZpY2VzVGFi bGVMaWINCj4+LSAgVWVmaURyaXZlckVudHJ5UG9pbnQNCj4+LSAgTWVtb3J5QWxsb2NhdGlvbkxp Yg0KPj4tICBCYXNlTWVtb3J5TGliDQo+Pi0gIERlYnVnTGliDQo+Pi0gIEhpaUxpYg0KPj4tICBV ZWZpTGliDQo+Pi0gIERldmljZVBhdGhMaWINCj4+LQ0KPj4tW0d1aWRzXQ0KPj4tICBnRWZpSWZy VGlhbm9HdWlkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMgU09NRVRJTUVTX0NPTlNV TUVTICAjIyBHVUlEDQo+Pi0gIGdFZmlVc2VySW5mb0FjY2Vzc1NldHVwQWRtaW5HdWlkICAgICAg ICAgICAgICAjIyBTT01FVElNRVNfQ09OU1VNRVMNCj4jIw0KPj5HVUlEDQo+Pi0gIGdFZmlVc2Vy SW5mb0FjY2Vzc1NldHVwTm9ybWFsR3VpZCAgICAgICAgICAgICAjIyBTT01FVElNRVNfQ09OU1VN RVMNCj4jIw0KPj5HVUlEDQo+Pi0gIGdFZmlVc2VySW5mb0FjY2Vzc1NldHVwUmVzdHJpY3RlZEd1 aWQgICAgICAgICAjIyBTT01FVElNRVNfQ09OU1VNRVMNCj4+IyMgR1VJRA0KPj4tICBnVXNlclBy b2ZpbGVNYW5hZ2VyR3VpZCAgICAgICAgICAgICAgICAgICAgICAgIyMgQ09OU1VNRVMgICAgICAg ICAgICAjIyBISUkNCj4+LQ0KPj4tW1Byb3RvY29sc10NCj4+LSAgZ0VmaURldmljZVBhdGhQcm90 b2NvbEd1aWQgICAgICAgICAgICAgICAgICAgICMjIFBST0RVQ0VTDQo+Pi0gIGdFZmlIaWlDb25m aWdBY2Nlc3NQcm90b2NvbEd1aWQgICAgICAgICAgICAgICAjIyBQUk9EVUNFUw0KPj4tICBnRWZp VXNlckNyZWRlbnRpYWwyUHJvdG9jb2xHdWlkICAgICAgICAgICAgICAgIyMgU09NRVRJTUVTX0NP TlNVTUVTDQo+Pi0gIGdFZmlVc2VyTWFuYWdlclByb3RvY29sR3VpZCAgICAgICAgICAgICAgICAg ICAjIyBDT05TVU1FUw0KPj4tDQo+Pi1bRGVwZXhdDQo+Pi0gIGdFZmlVc2VyTWFuYWdlclByb3Rv Y29sR3VpZA0KPj4tDQo+Pi1bVXNlckV4dGVuc2lvbnMuVGlhbm9Db3JlLiJFeHRyYUZpbGVzIl0N Cj4+LSAgVXNlclByb2ZpbGVNYW5hZ2VyRXh0cmEudW5pDQo+Pi0NCj4+ZGlmZiAtLWdpdA0KPj5h L1NlY3VyaXR5UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Vc2VyUHJvZmlsZU1hbmFnZXJEeGUvVXNl clByb2ZpbGVNYW5hDQo+Zw0KPj5lckV4dHJhLnVuaQ0KPj5iL1NlY3VyaXR5UGtnL1VzZXJJZGVu dGlmaWNhdGlvbi9Vc2VyUHJvZmlsZU1hbmFnZXJEeGUvVXNlclByb2ZpbGVNYW5hDQo+Zw0KPj5l ckV4dHJhLnVuaQ0KPj5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCj4+aW5kZXggYmY3YWM3ZGMw NC4uMDAwMDAwMDAwMA0KPj4tLS0NCj4+YS9TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24v VXNlclByb2ZpbGVNYW5hZ2VyRHhlL1VzZXJQcm9maWxlTWFuYQ0KPmcNCj4+ZXJFeHRyYS51bmkN Cj4+KysrIC9kZXYvbnVsbA0KPj5AQCAtMSwxOSArMCwwIEBADQo+Pi0vLyAvKiogQGZpbGUNCj4+ LS8vIFVzZXJQcm9maWxlTWFuYWdlciBMb2NhbGl6ZWQgU3RyaW5ncyBhbmQgQ29udGVudA0KPj4t Ly8NCj4+LS8vIENvcHlyaWdodCAoYykgMjAxMyAtIDIwMTgsIEludGVsIENvcnBvcmF0aW9uLiBB bGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4+LS8vDQo+Pi0vLyBUaGlzIHByb2dyYW0gYW5kIHRo ZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQo+Pi0vLyBhcmUgbGljZW5zZWQgYW5kIG1hZGUgYXZh aWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUNCj5CU0QNCj4+TGlj ZW5zZQ0KPj4tLy8gd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24uIFRoZSBmdWxs IHRleHQgb2YgdGhlIGxpY2Vuc2UgbWF5IGJlDQo+PmZvdW5kIGF0DQo+Pi0vLyBodHRwOi8vb3Bl bnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vuc2UucGhwDQo+Pi0vLyBUSEUgUFJPR1JBTSBJ UyBESVNUUklCVVRFRCBVTkRFUiBUSEUgQlNEIExJQ0VOU0UgT04gQU4gIkFTIElTIg0KPj5CQVNJ UywNCj4+LS8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlMgT0YgQU5ZIEtJ TkQsIEVJVEhFUg0KPj5FWFBSRVNTIE9SIElNUExJRUQuDQo+Pi0vLw0KPj4tLy8gKiovDQo+Pi0N Cj4+LSNzdHJpbmcgU1RSX1BST1BFUlRJRVNfTU9EVUxFX05BTUUNCj4+LSNsYW5ndWFnZSBlbi1V Uw0KPj4tIlVzZXIgUHJvZmlsZSBNYW5hZ2VyIg0KPj4tDQo+Pi0NCj4+ZGlmZiAtLWdpdA0KPj5h L1NlY3VyaXR5UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Vc2VyUHJvZmlsZU1hbmFnZXJEeGUvVXNl clByb2ZpbGVNYW5hDQo+Zw0KPj5lclN0cmluZ3MudW5pDQo+PmIvU2VjdXJpdHlQa2cvVXNlcklk ZW50aWZpY2F0aW9uL1VzZXJQcm9maWxlTWFuYWdlckR4ZS9Vc2VyUHJvZmlsZU1hbmENCj5nDQo+ PmVyU3RyaW5ncy51bmkNCj4+ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0DQo+PmluZGV4IDNhMDAz YTk4ODMuLjAwMDAwMDAwMDANCj4+LS0tDQo+PmEvU2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0 aW9uL1VzZXJQcm9maWxlTWFuYWdlckR4ZS9Vc2VyUHJvZmlsZU1hbmENCj5nDQo+PmVyU3RyaW5n cy51bmkNCj4+KysrIC9kZXYvbnVsbA0KPj5AQCAtMSwxNTggKzAsMCBAQA0KPj4tLyoqIEBmaWxl DQo+Pi0gIFN0cmluZyBkZWZpbml0aW9ucyBmb3IgVXNlciBQcm9maWxlIE1hbmFnZXIgZHJpdmVy Lg0KPj4tDQo+Pi1Db3B5cmlnaHQgKGMpIDIwMDkgLSAyMDE4LCBJbnRlbCBDb3Jwb3JhdGlvbi4g QWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+Pi1UaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBh bnlpbmcgbWF0ZXJpYWxzDQo+Pi1hcmUgbGljZW5zZWQgYW5kIG1hZGUgYXZhaWxhYmxlIHVuZGVy IHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgQlNEDQo+PkxpY2Vuc2UNCj4+LXdoaWNo IGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLiAgVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGlj ZW5zZSBtYXkgYmUNCj4+Zm91bmQgYXQNCj4+LWh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNl cy9ic2QtbGljZW5zZS5waHANCj4+LQ0KPj4tVEhFIFBST0dSQU0gSVMgRElTVFJJQlVURUQgVU5E RVIgVEhFIEJTRCBMSUNFTlNFIE9OIEFOICJBUyBJUyINCj5CQVNJUywNCj4+LVdJVEhPVVQgV0FS UkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUg0KPj5FWFBSRVNT IE9SIElNUExJRUQuDQo+Pi0NCj4+LSoqLw0KPj4tDQo+Pi0jbGFuZ2RlZiAgIGVuLVVTICJFbmds aXNoIg0KPj4tI2xhbmdkZWYgICBmci1GUiAiRnJhbsOnYWlzIg0KPj4tDQo+Pi0jc3RyaW5nIFNU Ul9OVUxMX1NUUklORyAgICAgICAgICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgICIiDQo+Pi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjbGFuZ3VhZ2UgZnItRlIgICIiDQo+ Pi0jc3RyaW5nIFNUUl9GT1JNU0VUX1RJVExFICAgICAgICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMg ICJVc2VyIE1hbmFnZXIiDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAjbGFuZ3VhZ2UgZnItRlIgICJVc2VyIE1hbmFnZXIoRnJlbmNoKSINCj4+LSNzdHJpbmcgU1RS X1RJVExFX0hFTFAgICAgICAgICAgICAgICAgICNsYW5ndWFnZSBlbi1VUyAgIlRoaXMgc2VsZWN0 aW9uIHdpbGwgdGFrZQ0KPj55b3UgdG8gdGhlIFVzZXIgTWFuYWdlciINCj4+LSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICNsYW5ndWFnZSBmci1GUiAgIlRoaXMgc2VsZWN0 aW9uIHdpbGwgdGFrZSB5b3UgdG8gdGhlIFVzZXINCj4+TWFuYWdlcihGcmVuY2gpIg0KPj4tI3N0 cmluZyBTVFJfVVNFUk1BTl9USVRMRSAgICAgICAgICAgICAgI2xhbmd1YWdlIGVuLVVTICAiVXNl ciBNYW5hZ2VyIg0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2xh bmd1YWdlIGZyLUZSICAiVXNlciBNYW5hZ2VyKEZyZW5jaCkiDQo+Pi0jc3RyaW5nIFNUUl9BRERf VVNFUl9USVRMRSAgICAgICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgICJBZGQgVXNlciBQcm9maWxl Ig0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2xhbmd1YWdlIGZy LUZSICAiQWRkIFVzZXIgUHJvZmlsZShGcmVuY2gpIg0KPj4tI3N0cmluZyBTVFJfQUREX1VTRVJf SEVMUCAgICAgICAgICAgICAgICNsYW5ndWFnZSBlbi1VUyAgIkFkZCBVc2VyIFByb2ZpbGUgdG8N Cj4+VXNlciBEYXRhYmFzZSINCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICNsYW5ndWFnZSBmci1GUiAgIkFkZCBVc2VyIFByb2ZpbGUgdG8gVXNlcg0KPj5EYXRhYmFz ZShGcmVuY2gpIg0KPj4tI3N0cmluZyBTVFJfTU9ESUZZX1VTRVJfVElUTEUgICAgICAgICAgICNs YW5ndWFnZSBlbi1VUyAgIk1vZGlmeSBVc2VyDQo+PlByb2ZpbGUiDQo+Pi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAjbGFuZ3VhZ2UgZnItRlIgICJNb2RpZnkgVXNlciBQ cm9maWxlKEZyZW5jaCkiDQo+Pi0jc3RyaW5nIFNUUl9NT0RJRllfVVNFUl9IRUxQICAgICAgICAg ICAjbGFuZ3VhZ2UgZW4tVVMgICJNb2RpZnkgVXNlcg0KPlByb2ZpbGUNCj4+SW5mb3JtYXRpb24i DQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjbGFuZ3VhZ2UgZnIt RlIgICJNb2RpZnkgVXNlciBQcm9maWxlDQo+PkluZm9ybWF0aW9uKEZyZW5jaCkiDQo+Pi0jc3Ry aW5nIFNUUl9ERUxFVEVfVVNFUl9USVRMRSAgICAgICAgICAgI2xhbmd1YWdlIGVuLVVTICAiRGVs ZXRlIFVzZXINCj5Qcm9maWxlIg0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgI2xhbmd1YWdlIGZyLUZSICAiRGVsZXRlIFVzZXIgUHJvZmlsZShGcmVuY2gpIg0KPj4t I3N0cmluZyBTVFJfREVMRVRFX1VTRVJfSEVMUCAgICAgICAgICAgI2xhbmd1YWdlIGVuLVVTICAi RGVsZXRlIFVzZXIgUHJvZmlsZQ0KPj5mcm9tIFVzZXIgRGF0YWJhc2UiDQo+Pi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjbGFuZ3VhZ2UgZnItRlIgICJEZWxldGUgVXNl ciBQcm9maWxlIGZyb20gVXNlcg0KPj5EYXRhYmFzZShGcmVuY2gpIg0KPj4tI3N0cmluZyBTVFJf VVNFUl9JTkZPICAgICAgICAgICAgICAgICAgICNsYW5ndWFnZSBlbi1VUyAgIlVzZXIgUHJvZmls ZQ0KPj5JbmZvcm1hdGlvbiINCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICNsYW5ndWFnZSBmci1GUiAgIlVzZXIgUHJvZmlsZSBJbmZvcm1hdGlvbihGcmVuY2gpIg0K Pj4tI3N0cmluZyBTVFJfVVNFUl9OQU1FICAgICAgICAgICAgICAgICAgICNsYW5ndWFnZSBlbi1V UyAgIlVzZXIgTmFtZSINCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICNsYW5ndWFnZSBmci1GUiAgIlVzZXIgTmFtZShGcmVuY2gpIg0KPj4tI3N0cmluZyBTVFJfVVNF Ul9OQU1FX1ZBTCAgICAgICAgICAgICAgICNsYW5ndWFnZSBlbi1VUyAgIiINCj4+LSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNsYW5ndWFnZSBmci1GUiAgIiINCj4+LSNz dHJpbmcgU1RSX0NSRUFURV9EQVRFICAgICAgICAgICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgICJD cmVhdGUgRGF0ZSINCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNs YW5ndWFnZSBmci1GUiAgIkNyZWF0ZSBEYXRlKEZyZW5jaCkiDQo+Pi0jc3RyaW5nIFNUUl9DUkVB VEVfREFURV9WQUwgICAgICAgICAgICAgI2xhbmd1YWdlIGVuLVVTICAiIg0KPj4tICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2xhbmd1YWdlIGZyLUZSICAiIg0KPj4tI3N0 cmluZyBTVFJfVVNBR0VfREFURSAgICAgICAgICAgICAgICAgICNsYW5ndWFnZSBlbi1VUyAgIlVz YWdlIERhdGUiDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjbGFu Z3VhZ2UgZnItRlIgICJVc2FnZSBEYXRlKEZyZW5jaCkiDQo+Pi0jc3RyaW5nIFNUUl9VU0FHRV9E QVRFX1ZBTCAgICAgICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgICIiDQo+Pi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAjbGFuZ3VhZ2UgZnItRlIgICIiDQo+Pi0jc3RyaW5n IFNUUl9VU0FHRV9DT1VOVCAgICAgICAgICAgICAgICAgI2xhbmd1YWdlIGVuLVVTICAiVXNhZ2Ug Q291bnQiDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjbGFuZ3Vh Z2UgZnItRlIgICJVc2FnZSBDb3VudChGcmVuY2gpIg0KPj4tI3N0cmluZyBTVFJfVVNBR0VfQ09V TlRfVkFMICAgICAgICAgICAgICNsYW5ndWFnZSBlbi1VUyAgIiINCj4+LSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICNsYW5ndWFnZSBmci1GUiAgIiINCj4+LSNzdHJpbmcg U1RSX0lERU5USUZZX1BPTElDWSAgICAgICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgICJJZGVudGlm eSBQb2xpY3kiDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjbGFu Z3VhZ2UgZnItRlIgICJJZGVudGlmeSBQb2xpY3koRnJlbmNoKSINCj4+LSNzdHJpbmcgU1RSX0lE RU5USUZZX1BPTElDWV9WQUwgICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgICIiDQo+Pi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjbGFuZ3VhZ2UgZnItRlIgICIiDQo+Pi0j c3RyaW5nIFNUUl9BQ0NFU1NfUE9MSUNZICAgICAgICAgICAgICAgI2xhbmd1YWdlIGVuLVVTICAi QWNjZXNzIFBvbGljeSINCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICNsYW5ndWFnZSBmci1GUiAgIkFjY2VzcyBQb2xpY3koRnJlbmNoKSINCj4+LSNzdHJpbmcgU1RS X1NBVkUgICAgICAgICAgICAgICAgICAgICAgICNsYW5ndWFnZSBlbi1VUyAgIlNhdmUgJiBFeGl0 Ig0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2xhbmd1YWdlIGZy LUZSICAiU2F2ZSAmIEV4aXQoRnJlbmNoKSINCj4+LSNzdHJpbmcgU1RSX0lERU5USUZZX1NBVkVf SEVMUCAgICAgICAgICNsYW5ndWFnZSBlbi1VUyAgIlNhdmUgSWRlbnRpZnkNCj5Qb2xpY3kNCj4+ YW5kIEV4aXQiDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjbGFu Z3VhZ2UgZnItRlIgICJTYXZlIElkZW50aWZ5IFBvbGljeSBhbmQgRXhpdChGcmVuY2gpIg0KPj4t I3N0cmluZyBTVFJfUFJPVklERVIgICAgICAgICAgICAgICAgICAgI2xhbmd1YWdlIGVuLVVTICAi Q3JlZGVudGlhbCBQcm92aWRlciINCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICNsYW5ndWFnZSBmci1GUiAgIkNyZWRlbnRpYWwgUHJvdmlkZXIoRnJlbmNoKSINCj4+ LSNzdHJpbmcgU1RSX1BST1ZJREVSX0hFTFAgICAgICAgICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMg ICJTZWxlY3QgQ3JlZGVudGlhbA0KPj5Qcm92aWRlciBPcHRpb24iDQo+Pi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAjbGFuZ3VhZ2UgZnItRlIgICJTZWxlY3QgQ3JlZGVu dGlhbCBQcm92aWRlcg0KPj5PcHRpb24oRnJlbmNoKSINCj4+LSNzdHJpbmcgU1RSX09SX0NPTiAg ICAgICAgICAgICAgICAgICAgICNsYW5ndWFnZSBlbi1VUyAgIk9yIg0KPj4tICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgI2xhbmd1YWdlIGZyLUZSICAiT3IoRnJlbmNoKSIN Cj4+LSNzdHJpbmcgU1RSX0FORF9DT04gICAgICAgICAgICAgICAgICAgICAjbGFuZ3VhZ2UgZW4t VVMgICJBbmQiDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjbGFu Z3VhZ2UgZnItRlIgICJBbmQoRnJlbmNoKSINCj4+LSNzdHJpbmcgU1RSX0NPTk5FQ1RPUiAgICAg ICAgICAgICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgICJMb2dpY2FsIENvbm5lY3RvciINCj4+LSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNsYW5ndWFnZSBmci1GUiAgIkxv Z2ljYWwgQ29ubmVjdG9yKEZyZW5jaCkiDQo+Pi0jc3RyaW5nIFNUUl9DT05ORUNUT1JfSEVMUCAg ICAgICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgICJTZWxlY3QgTG9naWNhbA0KPj5Db25uZWN0b3Ig T3B0aW9uIg0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2xhbmd1 YWdlIGZyLUZSICAiU2VsZWN0IExvZ2ljYWwgQ29ubmVjdG9yDQo+Pk9wdGlvbihGcmVuY2gpIg0K Pj4tI3N0cmluZyBTVFJfSURFTlRJRllfUE9MSUNZX1ZBTFVFICAgICAgICNsYW5ndWFnZSBlbi1V UyAgIiINCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNsYW5ndWFn ZSBmci1GUiAgIiINCj4+LSNzdHJpbmcgU1RSX0lERU5USUZZX1BPTElDWV9IRUxQICAgICAgICNs YW5ndWFnZSBlbi1VUyAgIkN1cnJlbnQgSWRlbnRpZnkNCj4+UG9saWN5Ig0KPj4tICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2xhbmd1YWdlIGZyLUZSICAiQ3VycmVudCBJ ZGVudGlmeSBQb2xpY3koRnJlbmNoKSINCj4+LSNzdHJpbmcgU1RSX0FERF9PUFRJT04gICAgICAg ICAgICAgICAgICNsYW5ndWFnZSBlbi1VUyAgIkFkZCBPcHRpb24iDQo+Pi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAjbGFuZ3VhZ2UgZnItRlIgICJBZGQgT3B0aW9uKEZy ZW5jaCkiDQo+Pi0jc3RyaW5nIFNUUl9BRERfT1BUSU9OX0hFTFAgICAgICAgICAgICAgI2xhbmd1 YWdlIGVuLVVTICAiQWRkIFRoaXMgT3B0aW9uDQo+dG8NCj4+SWRlbnRpZnkgUG9saWN5Ig0KPj4t ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2xhbmd1YWdlIGZyLUZSICAi QWRkIFRoaXMgT3B0aW9uIHRvIElkZW50aWZ5DQo+PlBvbGljeShGcmVuY2gpIg0KPj4tI3N0cmlu ZyBTVFJfQUNDRVNTX1NBVkVfSEVMUCAgICAgICAgICAgI2xhbmd1YWdlIGVuLVVTICAiU2F2ZSBB Y2Nlc3MgUG9saWN5DQo+PmFuZCBFeGl0Ig0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgI2xhbmd1YWdlIGZyLUZSICAiU2F2ZSBBY2Nlc3MgUG9saWN5IGFuZCBFeGl0 KEZyZW5jaCkiDQo+Pi0jc3RyaW5nIFNUUl9BQ0NFU1NfUklHSFQgICAgICAgICAgICAgICAjbGFu Z3VhZ2UgZW4tVVMgICJBY2Nlc3MgUmlnaHQiDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAjbGFuZ3VhZ2UgZnItRlIgICJBY2Nlc3MgUmlnaHQoRnJlbmNoKSINCj4+ LSNzdHJpbmcgU1RSX0FDQ0VTU19SSUdIVF9IRUxQICAgICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMg ICJTZWxlY3QgQWNjZXNzDQo+UmlnaHQNCj4+T3B0aW9uIg0KPj4tICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgI2xhbmd1YWdlIGZyLUZSICAiU2VsZWN0IEFjY2VzcyBSaWdo dCBPcHRpb24oRnJlbmNoKSINCj4+LSNzdHJpbmcgU1RSX05PUk1BTCAgICAgICAgICAgICAgICAg ICAgICNsYW5ndWFnZSBlbi1VUyAgIk5vcm1hbCINCj4+LSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICNsYW5ndWFnZSBmci1GUiAgIk5vcm1hbChGcmVuY2gpIg0KPj4tI3N0 cmluZyBTVFJfRU5ST0xMICAgICAgICAgICAgICAgICAgICAgI2xhbmd1YWdlIGVuLVVTICAiRW5y b2xsIg0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2xhbmd1YWdl IGZyLUZSICAiRW5yb2xsKEZyZW5jaCkiDQo+Pi0jc3RyaW5nIFNUUl9NQU5BR0UgICAgICAgICAg ICAgICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgICJNYW5hZ2UiDQo+Pi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAjbGFuZ3VhZ2UgZnItRlIgICJNYW5hZ2UoRnJlbmNoKSIN Cj4+LSNzdHJpbmcgU1RSX0FDQ0VTU19TRVRVUCAgICAgICAgICAgICAgICNsYW5ndWFnZSBlbi1V UyAgIkFjY2VzcyBTZXR1cCINCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICNsYW5ndWFnZSBmci1GUiAgIkFjY2VzcyBTZXR1cChGcmVuY2gpIg0KPj4tI3N0cmluZyBT VFJfQUNDRVNTX1NFVFVQX0hFTFAgICAgICAgICAgICNsYW5ndWFnZSBlbi1VUyAgIlNlbGVjdCBB Y2Nlc3MNCj4+U2V0dXAgT3B0aW9uIg0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgI2xhbmd1YWdlIGZyLUZSICAiU2VsZWxjdCBBY2Nlc3MgU2V0dXAgT3B0aW9uKEZy ZW5jaCkiDQo+Pi0jc3RyaW5nIFNUUl9SRVNUUklDVEVEICAgICAgICAgICAgICAgICAjbGFuZ3Vh Z2UgZW4tVVMgICJSZXN0cmljdGVkIg0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgI2xhbmd1YWdlIGZyLUZSICAiUmVzdHJpY3RlZChGcmVuY2gpIg0KPj4tI3N0cmlu ZyBTVFJfQURNSU4gICAgICAgICAgICAgICAgICAgICAgICNsYW5ndWFnZSBlbi1VUyAgIkFkbWlu Ig0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2xhbmd1YWdlIGZy LUZSICAiQWRtaW4oRnJlbmNoKSINCj4+LSNzdHJpbmcgU1RSX0JPT1JfT1JERVIgICAgICAgICAg ICAgICAgICNsYW5ndWFnZSBlbi1VUyAgIkFjY2VzcyBCb290IE9yZGVyIg0KPj4tICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2xhbmd1YWdlIGZyLUZSICAiQWNjZXNzIEJv b3QgT3JkZXIoRnJlbmNoKSINCj4+LSNzdHJpbmcgU1RSX0JPT1RfT1JERVJfSEVMUCAgICAgICAg ICAgICAjbGFuZ3VhZ2UgZW4tVVMgICJTZWxlY3QgQWNjZXNzDQo+Qm9vdA0KPj5PcmRlciBPcHRp b24iDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjbGFuZ3VhZ2Ug ZnItRlIgICJTZWxlY3QgQWNjZXNzIEJvb3QgT3JkZXINCj4+T3B0aW9uKEZyZW5jaCkiDQo+Pi0j c3RyaW5nIFNUUl9JTlNFUlQgICAgICAgICAgICAgICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgICJJ bnNlcnQiDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjbGFuZ3Vh Z2UgZnItRlIgICJJbnNlcnQoRnJlbmNoKSINCj4+LSNzdHJpbmcgU1RSX0FQUEVORCAgICAgICAg ICAgICAgICAgICAgICNsYW5ndWFnZSBlbi1VUyAgIkFwcGVuZCINCj4+LSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICNsYW5ndWFnZSBmci1GUiAgIkFwcGVuZChGcmVuY2gp Ig0KPj4tI3N0cmluZyBTVFJfUkVQTEFDRSAgICAgICAgICAgICAgICAgICAgICNsYW5ndWFnZSBl bi1VUyAgIlJlcGxhY2UiDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAjbGFuZ3VhZ2UgZnItRlIgICJSZXBsYWNlKEZyZW5jaCkiDQo+Pi0jc3RyaW5nIFNUUl9OT0RF RkFVTFQgICAgICAgICAgICAgICAgICAgI2xhbmd1YWdlIGVuLVVTICAiTm9kZWZhdWx0Ig0KPj4t ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2xhbmd1YWdlIGZyLUZSICAi Tm9kZWZhdWx0KEZyZW5jaCkiDQo+Pi0jc3RyaW5nIFNUUl9MT0FEICAgICAgICAgICAgICAgICAg ICAgICAgI2xhbmd1YWdlIGVuLVVTICAiTG9hZCBEZXZpY2UgUGF0aCINCj4+LSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjbGFuZ3VhZ2UgZnItRlIgICJMb2FkIERldmlj ZSBQYXRoKEZyZW5jaCkiDQo+Pi0jc3RyaW5nIFNUUl9MT0FEX0hFTFAgICAgICAgICAgICAgICAg ICAgI2xhbmd1YWdlIGVuLVVTICAiU2VsZWN0IFBlcm1pdC9Gb3JiaWQNCj4+TG9hZCBEZXZpY2Ug UGF0aCINCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNsYW5ndWFn ZSBmci1GUiAgIlNlbGVjdCBQZXJtaXQvRm9yYmlkIExvYWQgRGV2aWNlDQo+PlBhdGgoRnJlbmNo KSINCj4+LSNzdHJpbmcgU1RSX0NPTk5FQ1QgICAgICAgICAgICAgICAgICAgICAjbGFuZ3VhZ2Ug ZW4tVVMgICJDb25uZWN0IERldmljZSBQYXRoIg0KPj4tICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgI2xhbmd1YWdlIGZyLUZSICAiQ29ubmVjdCBEZXZpY2UgUGF0aChGcmVu Y2gpIg0KPj4tI3N0cmluZyBTVFJfQ09OTkVDVF9IRUxQICAgICAgICAgICAgICAgI2xhbmd1YWdl IGVuLVVTICAiU2VsZWN0IFBlcm1pdC9Gb3JiaWQNCj4+Q29ubmVjdCBEZXZpY2UgUGF0aCINCj4+ LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNsYW5ndWFnZSBmci1GUiAg IlNlbGVjdCBQZXJtaXQvRm9yYmlkIENvbm5lY3QgRGV2aWNlDQo+PlBhdGgoRnJlbmNoKSINCj4+ LSNzdHJpbmcgU1RSX0xPQURfUEVSTUlUICAgICAgICAgICAgICAgICAgI2xhbmd1YWdlIGVuLVVT ICAiUGVybWl0IExvYWQgRGV2aWNlDQo+PlBhdGgiDQo+Pi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAjbGFuZ3VhZ2UgZnItRlIgICJQZXJtaXQgTG9hZCBEZXZpY2UgUGF0 aChGcmVuY2gpIg0KPj4tI3N0cmluZyBTVFJfTE9BRF9QRVJNSVRfSEVMUCAgICAgICAgICAgI2xh bmd1YWdlIGVuLVVTICAiQ2hhbmdlIFBlcm1pdA0KPj5Mb2FkIERldmljZSBQYXRoIHRvIEZvcmJp ZCINCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNsYW5ndWFnZSBm ci1GUiAgIkNoYW5nZSBQZXJtaXQgTG9hZCBEZXZpY2UgUGF0aCB0bw0KPj5Gb3JiaWQoRnJlbmNo KSINCj4+LSNzdHJpbmcgU1RSX0xPQURfRk9SQklEICAgICAgICAgICAgICAgICAgI2xhbmd1YWdl IGVuLVVTICAiRm9yYmlkIExvYWQgRGV2aWNlDQo+PlBhdGgiDQo+Pi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAjbGFuZ3VhZ2UgZnItRlIgICJGb3JiaWQgTG9hZCBEZXZp Y2UgUGF0aChGcmVuY2gpIg0KPj4tI3N0cmluZyBTVFJfTE9BRF9GT1JCSURfSEVMUCAgICAgICAg ICAgI2xhbmd1YWdlIGVuLVVTICAiQ2hhbmdlIEZvcmJpZA0KPkxvYWQNCj4+RGV2aWNlIFBhdGgg dG8gUGVybWl0Ig0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2xh bmd1YWdlIGZyLUZSICAiQ2hhbmdlIEZvcmJpZCBMb2FkIERldmljZSBQYXRoIHRvDQo+PlBlcm1p dChGcmVuY2gpIg0KPj4tI3N0cmluZyBTVFJfQ09OTkVDVF9QRVJNSVQgICAgICAgICAgICAgI2xh bmd1YWdlIGVuLVVTICAiUGVybWl0IENvbm5lY3QNCj4+RGV2aWNlIFBhdGgiDQo+Pi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjbGFuZ3VhZ2UgZnItRlIgICJQZXJtaXQg Q29ubmVjdCBEZXZpY2UgUGF0aChGcmVuY2gpIg0KPj4tI3N0cmluZyBTVFJfQ09OTkVDVF9QRVJN SVRfSEVMUCAgICAgICAgICNsYW5ndWFnZSBlbi1VUyAgIkNoYW5nZSBQZXJtaXQNCj4+Q29ubmVj dCBEZXZpY2UgUGF0aCB0byBGb3JiaWQiDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAjbGFuZ3VhZ2UgZnItRlIgICJDaGFuZ2UgUGVybWl0IENvbm5lY3QgRGV2aWNl IFBhdGggdG8NCj4+Rm9yYmlkKEZyZW5jaCkiDQo+Pi0jc3RyaW5nIFNUUl9DT05ORUNUX0ZPUkJJ RCAgICAgICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgICJGb3JiaWQgQ29ubmVjdA0KPj5EZXZpY2Ug UGF0aCINCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNsYW5ndWFn ZSBmci1GUiAgIkZvcmJpZCBDb25uZWN0IERldmljZSBQYXRoKEZyZW5jaCkiDQo+Pi0jc3RyaW5n IFNUUl9DT05ORUNUX0ZPUkJJRF9IRUxQICAgICAgICAgI2xhbmd1YWdlIGVuLVVTICAiQ2hhbmdl IEZvcmJpZA0KPj5Db25uZWN0IERldmljZSBQYXRoIHRvIFBlcm1pdCINCj4+LSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICNsYW5ndWFnZSBmci1GUiAgIkNoYW5nZSBGb3Ji aWQgQ29ubmVjdCBEZXZpY2UgUGF0aCB0bw0KPj5QZXJtaXQoRnJlbmNoKSINCj4+LSNzdHJpbmcg U1RSX1BSRVNTX0tFWV9DT05USU5VRSAgICAgICAgICNsYW5ndWFnZSBlbi1VUyAgIlByZXNzIEVO VEVSIHRvDQo+PkNvbnRpbnVlLCBPdGhlciBLZXkgdG8gQ2FuY2VsIC4uLiINCj4+LSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNsYW5ndWFnZSBmci1GUiAgIlByZXNzIEVO VEVSIHRvIENvbnRpbnVlLCBPdGhlciBLZXkgdG8NCj4+Q2FuY2VsIC4uLihGcmVuY2gpIg0KPj4t I3N0cmluZyBTVFJfTU9WRV9UT19GT1JCSURfTElTVCAgICAgICAgICNsYW5ndWFnZSBlbi1VUyAg IkFyZSBZb3UgU3VyZSB0bw0KPj5Nb3ZlIEl0IHRvIEZvcmJpZCBMaXN0PyINCj4+LSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNsYW5ndWFnZSBmci1GUiAgIkFyZSBZb3Ug U3VyZSB0byBNb3ZlIEl0IHRvIEZvcmJpZA0KPj5MaXN0PyhGcmVuY2gpIg0KPj4tI3N0cmluZyBT VFJfTU9WRV9UT19QRVJNSVRfTElTVCAgICAgICAgICNsYW5ndWFnZSBlbi1VUyAgIkFyZSBZb3Ug U3VyZQ0KPnRvDQo+Pk1vdmUgSXQgdG8gUGVybWl0IExpc3Q/Ig0KPj4tICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgI2xhbmd1YWdlIGZyLUZSICAiQXJlIFlvdSBTdXJlIHRv IE1vdmUgSXQgdG8gUGVybWl0DQo+Pkxpc3Q/KEZyZW5jaCkiDQo+Pi0jc3RyaW5nIFNUUl9TVFJP S0VfS0VZX0NPTlRJTlVFICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgICJQbGVhc2UgUHJlc3MNCj5B bnkNCj4+S2V5IHRvIENvbnRpbnVlIC4uLiINCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICNsYW5ndWFnZSBmci1GUiAgIlBsZWFzZSBQcmVzcyBBbnkgS2V5IHRvIENv bnRpbnVlIC4uLg0KPj4oRnJlbmNoKSINCj4+LSNzdHJpbmcgU1RSX0NSRUFURV9QUk9GSUxFX0ZB SUxFRCAgICAgICNsYW5ndWFnZSBlbi1VUyAgIkNyZWF0ZSBOZXcNCj5Vc2VyDQo+PlByb2ZpbGUg RmFpbGVkISINCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNsYW5n dWFnZSBmci1GUiAgIkNyZWF0ZSBOZXcgVXNlciBQcm9maWxlIEZhaWxlZCENCj4+KEZyZW5jaCki DQo+Pi0jc3RyaW5nIFNUUl9DUkVBVEVfUFJPRklMRV9TVUNDRVNTICAgICAjbGFuZ3VhZ2UgZW4t VVMgICJDcmVhdGUgTmV3DQo+PlVzZXIgUHJvZmlsZSBTdWNjZWVkISINCj4+LSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICNsYW5ndWFnZSBmci1GUiAgIkNyZWF0ZSBOZXcg VXNlciBQcm9maWxlIFN1Y2NlZWQhDQo+PihGcmVuY2gpIg0KPj4tI3N0cmluZyBTVFJfVVNFUl9B TFJFQURZX0VYSVNURUQgICAgICAgI2xhbmd1YWdlIGVuLVVTICAiVXNlciBOYW1lIEhhZA0KPj5B bHJlYWR5IEV4aXN0ZWQuIg0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgI2xhbmd1YWdlIGZyLUZSICAiVXNlciBOYW1lIEhhZCBBbHJlYWR5IEV4aXN0ZWQuDQo+PihG cmVuY2gpIg0KPj4tI3N0cmluZyBTVFJfR0VUX1VTRVJOQU1FX0ZBSUxFRCAgICAgICAgI2xhbmd1 YWdlIGVuLVVTICAiRmFpbGVkIFRvIEdldA0KPj5Vc2VyIE5hbWUuIg0KPj4tICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgI2xhbmd1YWdlIGZyLUZSICAiRmFpbGVkIFRvIEdl dCBVc2VyIE5hbWUuIChGcmVuY2gpIg0KPj4tDQo+PmRpZmYgLS1naXQNCj4+YS9TZWN1cml0eVBr Zy9Vc2VySWRlbnRpZmljYXRpb24vVXNlclByb2ZpbGVNYW5hZ2VyRHhlL1VzZXJQcm9maWxlTWFu YQ0KPmcNCj4+ZXJWZnIuVmZyDQo+PmIvU2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9uL1Vz ZXJQcm9maWxlTWFuYWdlckR4ZS9Vc2VyUHJvZmlsZU1hbmENCj5nDQo+PmVyVmZyLlZmcg0KPj5k ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCj4+aW5kZXggMmNmMzM1OWYyYS4uMDAwMDAwMDAwMA0K Pj4tLS0NCj4+YS9TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vVXNlclByb2ZpbGVNYW5h Z2VyRHhlL1VzZXJQcm9maWxlTWFuYQ0KPmcNCj4+ZXJWZnIuVmZyDQo+PisrKyAvZGV2L251bGwN Cj4+QEAgLTEsMjQ0ICswLDAgQEANCj4+LS8qKiBAZmlsZQ0KPj4tICBVc2VyIFByb2ZpbGUgTWFu YWdlciBmb3Jtc2V0Lg0KPj4tDQo+Pi1Db3B5cmlnaHQgKGMpIDIwMDkgLSAyMDEwLCBJbnRlbCBD b3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+Pi1UaGlzIHByb2dyYW0gYW5k IHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQo+Pi1hcmUgbGljZW5zZWQgYW5kIG1hZGUgYXZh aWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgQlNEDQo+PkxpY2Vu c2UNCj4+LXdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLiAgVGhlIGZ1bGwgdGV4 dCBvZiB0aGUgbGljZW5zZSBtYXkgYmUNCj4+Zm91bmQgYXQNCj4+LWh0dHA6Ly9vcGVuc291cmNl Lm9yZy9saWNlbnNlcy9ic2QtbGljZW5zZS5waHANCj4+LQ0KPj4tVEhFIFBST0dSQU0gSVMgRElT VFJJQlVURUQgVU5ERVIgVEhFIEJTRCBMSUNFTlNFIE9OIEFOICJBUyBJUyINCj5CQVNJUywNCj4+ LVdJVEhPVVQgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhF Ug0KPj5FWFBSRVNTIE9SIElNUExJRUQuDQo+Pi0NCj4+LSoqLw0KPj4tDQo+Pi0jaW5jbHVkZSAi VXNlclByb2ZpbGVNYW5hZ2VyRGF0YS5oIg0KPj4tDQo+Pi0jZGVmaW5lIFVTRVJfTUFOQUdFUl9D TEFTUyAgICAgICAweDAwDQo+Pi0jZGVmaW5lIFVTRVJfTUFOQUdFUl9TVUJDTEFTUyAgICAweDA0 DQo+Pi0NCj4+LWZvcm1zZXQNCj4+LSAgZ3VpZCAgICAgPSBVU0VSX1BST0ZJTEVfTUFOQUdFUl9H VUlELA0KPj4tICB0aXRsZSAgICA9IFNUUklOR19UT0tFTihTVFJfRk9STVNFVF9USVRMRSksDQo+ Pi0gIGhlbHAgICAgID0gU1RSSU5HX1RPS0VOKFNUUl9USVRMRV9IRUxQKSwNCj4+LQ0KPj4tICAv LyBVc2VyIG1hbmFnZXIgZm9ybQ0KPj4tICBmb3JtIGZvcm1pZCA9IEZPUk1JRF9VU0VSX01BTkFH RSwNCj4+LSAgICB0aXRsZSAgICAgPSBTVFJJTkdfVE9LRU4oU1RSX1VTRVJNQU5fVElUTEUpOw0K Pj4tDQo+Pi0gICAgbGFiZWwgTEFCRUxfVVNFUl9NQU5BR0VfRlVOQzsNCj4+LSAgICBsYWJlbCBM QUJFTF9FTkQ7DQo+Pi0NCj4+LSAgICBzdXBwcmVzc2lmIFRSVUU7DQo+Pi0gICAgICB0ZXh0DQo+ Pi0gICAgICAgIGhlbHAgICA9IFNUUklOR19UT0tFTihTVFJfTlVMTF9TVFJJTkcpLA0KPj4tICAg ICAgICB0ZXh0ICAgPSBTVFJJTkdfVE9LRU4oU1RSX05VTExfU1RSSU5HKSwNCj4+LSAgICAgICAg ZmxhZ3MgID0gSU5URVJBQ1RJVkUsDQo+Pi0gICAgICAgIGtleSAgICA9IFFVRVNUSU9OSURfVVNF Ul9NQU5BR0U7DQo+Pi0gICAgZW5kaWY7DQo+Pi0NCj4+LSAgZW5kZm9ybTsNCj4+LQ0KPj4tICAv LyBNb2RpZnkgdXNlciBwcm9maWxlIGZvcm0NCj4+LSAgZm9ybSBmb3JtaWQgPSBGT1JNSURfTU9E SUZZX1VTRVIsDQo+Pi0gICAgdGl0bGUgICAgID0gU1RSSU5HX1RPS0VOKFNUUl9NT0RJRllfVVNF Ul9USVRMRSk7DQo+Pi0NCj4+LSAgICBsYWJlbCBMQUJFTF9VU0VSX01PRF9GVU5DOw0KPj4tICAg IGxhYmVsIExBQkVMX0VORDsNCj4+LQ0KPj4tICBlbmRmb3JtOw0KPj4tDQo+Pi0gIC8vIERlbGV0 ZSB1c2VyIHByb2ZpbGUgZm9ybQ0KPj4tICBmb3JtIGZvcm1pZCA9IEZPUk1JRF9ERUxfVVNFUiwN Cj4+LSAgICB0aXRsZSAgICAgPSBTVFJJTkdfVE9LRU4oU1RSX0RFTEVURV9VU0VSX1RJVExFKTsN Cj4+LQ0KPj4tICAgIGxhYmVsIExBQkVMX1VTRVJfREVMX0ZVTkM7DQo+Pi0gICAgbGFiZWwgTEFC RUxfRU5EOw0KPj4tDQo+Pi0gICAgc3VidGl0bGUNCj4+LSAgICAgIHRleHQgICA9IFNUUklOR19U T0tFTihTVFJfTlVMTF9TVFJJTkcpOw0KPj4tICBlbmRmb3JtOw0KPj4tDQo+Pi0gIC8vDQo+Pi0g IC8vIFVzZXIgcHJvZmlsZSBpbmZvcm1hdGlvbiBmb3JtDQo+Pi0gIC8vDQo+Pi0gIGZvcm0gZm9y bWlkID0gRk9STUlEX1VTRVJfSU5GTywNCj4+LSAgICB0aXRsZSAgICAgPSBTVFJJTkdfVE9LRU4o U1RSX1VTRVJfSU5GTyk7DQo+Pi0NCj4+LSAgICB0ZXh0DQo+Pi0gICAgICBoZWxwICAgPSBTVFJJ TkdfVE9LRU4oU1RSX1VTRVJfTkFNRV9WQUwpLA0KPj4tICAgICAgdGV4dCAgID0gU1RSSU5HX1RP S0VOKFNUUl9VU0VSX05BTUUpLA0KPj4tICAgICAgZmxhZ3MgID0gSU5URVJBQ1RJVkUsDQo+Pi0g ICAgICBrZXkgICAgPSBLRVlfTU9ESUZZX1VTRVJfTkFNRTsNCj4+LQ0KPj4tICAgIHRleHQNCj4+ LSAgICAgIGhlbHAgICA9IFNUUklOR19UT0tFTihTVFJfQ1JFQVRFX0RBVEVfVkFMKSwNCj4+LSAg ICAgIHRleHQgICA9IFNUUklOR19UT0tFTihTVFJfQ1JFQVRFX0RBVEUpOw0KPj4tDQo+Pi0gICAg dGV4dA0KPj4tICAgICAgaGVscCAgID0gU1RSSU5HX1RPS0VOKFNUUl9VU0FHRV9EQVRFX1ZBTCks DQo+Pi0gICAgICB0ZXh0ICAgPSBTVFJJTkdfVE9LRU4oU1RSX1VTQUdFX0RBVEUpOw0KPj4tDQo+ Pi0gICAgdGV4dA0KPj4tICAgICAgaGVscCAgID0gU1RSSU5HX1RPS0VOKFNUUl9VU0FHRV9DT1VO VF9WQUwpLA0KPj4tICAgICAgdGV4dCAgID0gU1RSSU5HX1RPS0VOKFNUUl9VU0FHRV9DT1VOVCk7 DQo+Pi0NCj4+LSAgICBsYWJlbCBMQUJFTF9VU0VSX0lORk9fRlVOQzsNCj4+LSAgICBsYWJlbCBM QUJFTF9FTkQ7DQo+Pi0NCj4+LSAgZW5kZm9ybTsNCj4+LQ0KPj4tICAvLw0KPj4tICAvLyBJZGVu dGlmeSBwb2xpY3kgbW9kaWZ5IGZvcm0NCj4+LSAgLy8NCj4+LSAgZm9ybSBmb3JtaWQgPSBGT1JN SURfTU9ESUZZX0lQLA0KPj4tICAgIHRpdGxlICAgICA9IFNUUklOR19UT0tFTihTVFJfSURFTlRJ RllfUE9MSUNZKTsNCj4+LQ0KPj4tICAgIHRleHQNCj4+LSAgICAgIGhlbHAgICA9IFNUUklOR19U T0tFTihTVFJfSURFTlRJRllfUE9MSUNZX0hFTFApLA0KPj4tICAgICAgdGV4dCAgID0gU1RSSU5H X1RPS0VOKFNUUl9JREVOVElGWV9QT0xJQ1kpLA0KPj4tICAgICAgICB0ZXh0ICAgPSBTVFJJTkdf VE9LRU4oU1RSX0lERU5USUZZX1BPTElDWV9WQUxVRSk7DQo+Pi0NCj4+LSAgICBsYWJlbCBMQUJF TF9JUF9NT0RfRlVOQzsNCj4+LSAgICBsYWJlbCBMQUJFTF9FTkQ7DQo+Pi0NCj4+LSAgICB0ZXh0 DQo+Pi0gICAgICBoZWxwICAgPSBTVFJJTkdfVE9LRU4oU1RSX0FERF9PUFRJT05fSEVMUCksDQo+ Pi0gICAgICB0ZXh0ICAgPSBTVFJJTkdfVE9LRU4oU1RSX0FERF9PUFRJT04pLA0KPj4tICAgICAg ZmxhZ3MgID0gSU5URVJBQ1RJVkUsDQo+Pi0gICAgICBrZXkgICAgPSBLRVlfQUREX0xPR0lDQUxf T1A7DQo+Pi0NCj4+LSAgICBzdWJ0aXRsZQ0KPj4tICAgICAgdGV4dCAgID0gU1RSSU5HX1RPS0VO KFNUUl9OVUxMX1NUUklORyk7DQo+Pi0NCj4+LSAgICB0ZXh0DQo+Pi0gICAgICBoZWxwICAgPSBT VFJJTkdfVE9LRU4oU1RSX0lERU5USUZZX1NBVkVfSEVMUCksDQo+Pi0gICAgICB0ZXh0ICAgPSBT VFJJTkdfVE9LRU4oU1RSX1NBVkUpLA0KPj4tICAgICAgZmxhZ3MgID0gSU5URVJBQ1RJVkUsDQo+ Pi0gICAgICBrZXkgICAgPSBLRVlfSVBfUkVUVVJOOw0KPj4tDQo+Pi0gIGVuZGZvcm07DQo+Pi0N Cj4+LSAgLy8NCj4+LSAgLy8gQWNjZXNzIHBvbGljeSBtb2RpZnkgZm9ybQ0KPj4tICAvLw0KPj4t ICBmb3JtIGZvcm1pZCA9IEZPUk1JRF9NT0RJRllfQVAsDQo+Pi0gICAgdGl0bGUgICAgID0gU1RS SU5HX1RPS0VOKFNUUl9BQ0NFU1NfUE9MSUNZKTsNCj4+LQ0KPj4tICAgIGxhYmVsIExBQkVMX0FQ X01PRF9GVU5DOw0KPj4tICAgIGxhYmVsIExBQkVMX0VORDsNCj4+LQ0KPj4tICAgIGdvdG8gRk9S TUlEX0xPQURfRFAsDQo+Pi0gICAgICBwcm9tcHQgID0gU1RSSU5HX1RPS0VOKFNUUl9MT0FEKSwN Cj4+LSAgICAgIGhlbHAgICAgPSBTVFJJTkdfVE9LRU4oU1RSX0xPQURfSEVMUCksDQo+Pi0gICAg ICBmbGFncyAgID0gSU5URVJBQ1RJVkUsDQo+Pi0gICAgICBrZXkgICAgID0gS0VZX0xPQURfRFA7 DQo+Pi0NCj4+LSAgICBnb3RvIEZPUk1JRF9DT05ORUNUX0RQLA0KPj4tICAgICAgcHJvbXB0ICA9 IFNUUklOR19UT0tFTihTVFJfQ09OTkVDVCksDQo+Pi0gICAgICBoZWxwICAgID0gU1RSSU5HX1RP S0VOKFNUUl9DT05ORUNUX0hFTFApLA0KPj4tICAgICAgZmxhZ3MgICA9IElOVEVSQUNUSVZFLA0K Pj4tICAgICAga2V5ICAgICA9IEtFWV9DT05OX0RQOw0KPj4tDQo+Pi0gICAgc3VidGl0bGUNCj4+ LSAgICAgIHRleHQgICA9IFNUUklOR19UT0tFTihTVFJfTlVMTF9TVFJJTkcpOw0KPj4tDQo+Pi0g ICAgdGV4dA0KPj4tICAgICAgaGVscCAgID0gU1RSSU5HX1RPS0VOKFNUUl9BQ0NFU1NfU0FWRV9I RUxQKSwNCj4+LSAgICAgIHRleHQgICA9IFNUUklOR19UT0tFTihTVFJfU0FWRSksDQo+Pi0gICAg ICBmbGFncyAgPSBJTlRFUkFDVElWRSwNCj4+LSAgICAgIGtleSAgICA9IEtFWV9BUF9SRVRVUk47 DQo+Pi0NCj4+LSAgZW5kZm9ybTsNCj4+LQ0KPj4tICAvLw0KPj4tICAvLyBMb2FkIGRldmljZSBw YXRoIGZvcm0NCj4+LSAgLy8NCj4+LSAgZm9ybSBmb3JtaWQgPSBGT1JNSURfTE9BRF9EUCwNCj4+ LSAgICB0aXRsZSAgICAgPSBTVFJJTkdfVE9LRU4oU1RSX0xPQUQpOw0KPj4tDQo+Pi0gICAgZ290 byBGT1JNSURfUEVSTUlUX0xPQURfRFAsDQo+Pi0gICAgICBwcm9tcHQgID0gU1RSSU5HX1RPS0VO KFNUUl9MT0FEX1BFUk1JVCksDQo+Pi0gICAgICBoZWxwICAgID0gU1RSSU5HX1RPS0VOKFNUUl9M T0FEX1BFUk1JVF9IRUxQKSwNCj4+LSAgICAgIGZsYWdzICAgPSBJTlRFUkFDVElWRSwNCj4+LSAg ICAgIGtleSAgICAgPSBLRVlfTE9BRF9QRVJNSVQ7DQo+Pi0NCj4+LSAgICBnb3RvIEZPUk1JRF9G T1JCSURfTE9BRF9EUCwNCj4+LSAgICAgIHByb21wdCAgPSBTVFJJTkdfVE9LRU4oU1RSX0xPQURf Rk9SQklEKSwNCj4+LSAgICAgIGhlbHAgICAgPSBTVFJJTkdfVE9LRU4oU1RSX0xPQURfRk9SQklE X0hFTFApLA0KPj4tICAgICAgZmxhZ3MgICA9IElOVEVSQUNUSVZFLA0KPj4tICAgICAga2V5ICAg ICA9IEtFWV9MT0FEX0ZPUkJJRDsNCj4+LQ0KPj4tICBlbmRmb3JtOw0KPj4tDQo+Pi0gIC8vDQo+ Pi0gIC8vIFBlcm1pdCBsb2FkIGRldmljZSBwYXRoIGZvcm0NCj4+LSAgLy8NCj4+LSAgZm9ybSBm b3JtaWQgPSBGT1JNSURfUEVSTUlUX0xPQURfRFAsDQo+Pi0gICAgdGl0bGUgICAgID0gU1RSSU5H X1RPS0VOKFNUUl9MT0FEX1BFUk1JVCk7DQo+Pi0NCj4+LSAgICBsYWJlbCBMQUJFTF9QRVJNSVRf TE9BRF9GVU5DOw0KPj4tICAgIGxhYmVsIExBQkVMX0VORDsNCj4+LQ0KPj4tICAgIHN1YnRpdGxl DQo+Pi0gICAgICB0ZXh0ICAgPSBTVFJJTkdfVE9LRU4oU1RSX05VTExfU1RSSU5HKTsNCj4+LQ0K Pj4tICBlbmRmb3JtOw0KPj4tDQo+Pi0gIC8vDQo+Pi0gIC8vIEZvcmJpZCBsb2FkIGRldmljZSBw YXRoIGZvcm0NCj4+LSAgLy8NCj4+LSAgZm9ybSBmb3JtaWQgPSBGT1JNSURfRk9SQklEX0xPQURf RFAsDQo+Pi0gICAgdGl0bGUgICAgID0gU1RSSU5HX1RPS0VOKFNUUl9MT0FEX0ZPUkJJRCk7DQo+ Pi0NCj4+LSAgICBsYWJlbCBMQUJMRV9GT1JCSURfTE9BRF9GVU5DOw0KPj4tICAgIGxhYmVsIExB QkVMX0VORDsNCj4+LQ0KPj4tICAgIHN1YnRpdGxlDQo+Pi0gICAgICB0ZXh0ICAgPSBTVFJJTkdf VE9LRU4oU1RSX05VTExfU1RSSU5HKTsNCj4+LQ0KPj4tICBlbmRmb3JtOw0KPj4tDQo+Pi0gIC8v DQo+Pi0gIC8vIENvbm5lY3QgZGV2aWNlIHBhdGggZm9ybQ0KPj4tICAvLw0KPj4tICBmb3JtIGZv cm1pZCA9IEZPUk1JRF9DT05ORUNUX0RQLA0KPj4tICAgIHRpdGxlICAgICA9IFNUUklOR19UT0tF TihTVFJfQ09OTkVDVCk7DQo+Pi0NCj4+LSAgICBnb3RvIEZPUk1JRF9QRVJNSVRfQ09OTkVDVF9E UCwNCj4+LSAgICAgIHByb21wdCAgPSBTVFJJTkdfVE9LRU4oU1RSX0NPTk5FQ1RfUEVSTUlUKSwN Cj4+LSAgICAgIGhlbHAgICAgPSBTVFJJTkdfVE9LRU4oU1RSX0NPTk5FQ1RfUEVSTUlUX0hFTFAp LA0KPj4tICAgICAgZmxhZ3MgICA9IElOVEVSQUNUSVZFLA0KPj4tICAgICAga2V5ICAgICA9IEtF WV9DT05ORUNUX1BFUk1JVDsNCj4+LQ0KPj4tICAgIGdvdG8gRk9STUlEX0ZPUkJJRF9DT05ORUNU X0RQLA0KPj4tICAgICAgcHJvbXB0ICA9IFNUUklOR19UT0tFTihTVFJfQ09OTkVDVF9GT1JCSUQp LA0KPj4tICAgICAgaGVscCAgICA9IFNUUklOR19UT0tFTihTVFJfQ09OTkVDVF9GT1JCSURfSEVM UCksDQo+Pi0gICAgICBmbGFncyAgID0gSU5URVJBQ1RJVkUsDQo+Pi0gICAgICBrZXkgICAgID0g S0VZX0NPTk5FQ1RfRk9SQklEOw0KPj4tDQo+Pi0gIGVuZGZvcm07DQo+Pi0NCj4+LSAgLy8NCj4+ LSAgLy8gUGVybWl0IGNvbm5lY3QgZGV2aWNlIHBhdGggZm9ybQ0KPj4tICAvLw0KPj4tICBmb3Jt IGZvcm1pZCA9IEZPUk1JRF9QRVJNSVRfQ09OTkVDVF9EUCwNCj4+LSAgICB0aXRsZSAgICAgPSBT VFJJTkdfVE9LRU4oU1RSX0NPTk5FQ1RfUEVSTUlUKTsNCj4+LQ0KPj4tICAgIHN1YnRpdGxlDQo+ Pi0gICAgICB0ZXh0ICAgPSBTVFJJTkdfVE9LRU4oU1RSX05VTExfU1RSSU5HKTsNCj4+LQ0KPj4t ICBlbmRmb3JtOw0KPj4tDQo+Pi0gIC8vDQo+Pi0gIC8vIEZvcmJpZCBjb25uZWN0IGRldmljZSBw YXRoIGZvcm0NCj4+LSAgLy8NCj4+LSAgZm9ybSBmb3JtaWQgPSBGT1JNSURfRk9SQklEX0NPTk5F Q1RfRFAsDQo+Pi0gICAgdGl0bGUgICAgID0gU1RSSU5HX1RPS0VOKFNUUl9DT05ORUNUX0ZPUkJJ RCk7DQo+Pi0NCj4+LSAgIHN1YnRpdGxlDQo+Pi0gICAgIHRleHQgICA9IFNUUklOR19UT0tFTihT VFJfTlVMTF9TVFJJTkcpOw0KPj4tDQo+Pi0gIGVuZGZvcm07DQo+Pi0NCj4+LWVuZGZvcm1zZXQ7 DQo+PmRpZmYgLS1naXQNCj4+YS9TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vVXNlclBy b2ZpbGVNYW5hZ2VyRHhlL1VzZXJQcm9maWxlTW9kaWYNCj55DQo+Pi5jDQo+PmIvU2VjdXJpdHlQ a2cvVXNlcklkZW50aWZpY2F0aW9uL1VzZXJQcm9maWxlTWFuYWdlckR4ZS9Vc2VyUHJvZmlsZU1v ZGlmDQo+eQ0KPj4uYw0KPj5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCj4+aW5kZXggZDE2NWU1 YWU5Yi4uMDAwMDAwMDAwMA0KPj4tLS0NCj4+YS9TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRp b24vVXNlclByb2ZpbGVNYW5hZ2VyRHhlL1VzZXJQcm9maWxlTW9kaWYNCj55DQo+Pi5jDQo+Pisr KyAvZGV2L251bGwNCj4+QEAgLTEsMTQ3NSArMCwwIEBADQo+Pi0vKiogQGZpbGUNCj4+LSAgVGhl IGZ1bmN0aW9ucyB0byBtb2RpZnkgYSB1c2VyIHByb2ZpbGUuDQo+Pi0NCj4+LUNvcHlyaWdodCAo YykgMjAwOSAtIDIwMTgsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxC Uj4NCj4+LVRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCj4+LWFy ZSBsaWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRp b25zIG9mIHRoZSBCU0QNCj4+TGljZW5zZQ0KPj4td2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0 cmlidXRpb24uICBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIG1heSBiZQ0KPj5mb3VuZCBh dA0KPj4taHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocA0KPj4t DQo+Pi1USEUgUFJPR1JBTSBJUyBESVNUUklCVVRFRCBVTkRFUiBUSEUgQlNEIExJQ0VOU0UgT04g QU4gIkFTIElTIg0KPkJBU0lTLA0KPj4tV0lUSE9VVCBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFU SU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSDQo+PkVYUFJFU1MgT1IgSU1QTElFRC4NCj4+LQ0KPj4t KiovDQo+Pi0NCj4+LSNpbmNsdWRlICJVc2VyUHJvZmlsZU1hbmFnZXIuaCINCj4+LQ0KPj4tRUZJ X1VTRVJfUFJPRklMRV9IQU5ETEUgICAgICAgICAgIG1Nb2RpZnlVc2VyID0gTlVMTDsNCj4+LQ0K Pj4tLyoqDQo+Pi0gIERpc3BsYXkgdXNlciBzZWxlY3QgZm9ybSwgY2FiIHNlbGVjdCBhIHVzZXIg dG8gbW9kaWZ5Lg0KPj4tDQo+Pi0qKi8NCj4+LVZPSUQNCj4+LVNlbGVjdFVzZXJUb01vZGlmeSAg KA0KPj4tICBWT0lEDQo+Pi0gICkNCj4+LXsNCj4+LSAgRUZJX1NUQVRVUyAgICAgICAgICAgICAg U3RhdHVzOw0KPj4tICBVSU5UOCAgICAgICAgICAgICAgICAgICBJbmRleDsNCj4+LSAgRUZJX1VT RVJfUFJPRklMRV9IQU5ETEUgVXNlcjsNCj4+LSAgRUZJX1VTRVJfUFJPRklMRV9IQU5ETEUgQ3Vy cmVudFVzZXI7DQo+Pi0gIFVJTlQzMiAgICAgICAgICAgICAgICAgIEN1cnJlbnRBY2Nlc3NSaWdo dDsNCj4+LSAgVk9JRCAgICAgICAgICAgICAgICAgICAgKlN0YXJ0T3BDb2RlSGFuZGxlOw0KPj4t ICBWT0lEICAgICAgICAgICAgICAgICAgICAqRW5kT3BDb2RlSGFuZGxlOw0KPj4tICBFRklfSUZS X0dVSURfTEFCRUwgICAgICAqU3RhcnRMYWJlbDsNCj4+LSAgRUZJX0lGUl9HVUlEX0xBQkVMICAg ICAgKkVuZExhYmVsOw0KPj4tDQo+Pi0gIC8vDQo+Pi0gIC8vIEluaXRpYWxpemUgdGhlIGNvbnRh aW5lciBmb3IgZHluYW1pYyBvcGNvZGVzLg0KPj4tICAvLw0KPj4tICBTdGFydE9wQ29kZUhhbmRs ZSA9IEhpaUFsbG9jYXRlT3BDb2RlSGFuZGxlICgpOw0KPj4tICBBU1NFUlQgKFN0YXJ0T3BDb2Rl SGFuZGxlICE9IE5VTEwpOw0KPj4tDQo+Pi0gIEVuZE9wQ29kZUhhbmRsZSA9IEhpaUFsbG9jYXRl T3BDb2RlSGFuZGxlICgpOw0KPj4tICBBU1NFUlQgKEVuZE9wQ29kZUhhbmRsZSAhPSBOVUxMKTsN Cj4+LQ0KPj4tICAvLw0KPj4tICAvLyBDcmVhdGUgSGlpIEV4dGVuZCBMYWJlbCBPcENvZGUuDQo+ Pi0gIC8vDQo+Pi0gIFN0YXJ0TGFiZWwgPSAoRUZJX0lGUl9HVUlEX0xBQkVMICopIEhpaUNyZWF0 ZUd1aWRPcENvZGUgKA0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFN0YXJ0T3BDb2RlSGFuZGxlLA0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICZnRWZpSWZyVGlhbm9HdWlkLA0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIE5VTEwsDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc2l6ZW9mIChFRklfSUZSX0dVSURfTEFCRUwpDQo+Pi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKTsNCj4+LSAgU3RhcnRMYWJlbC0+RXh0ZW5kT3BDb2RlICA9 IEVGSV9JRlJfRVhURU5EX09QX0xBQkVMOw0KPj4tICBTdGFydExhYmVsLT5OdW1iZXIgICAgICAg ID0gTEFCRUxfVVNFUl9NT0RfRlVOQzsNCj4+LQ0KPj4tICBFbmRMYWJlbCA9IChFRklfSUZSX0dV SURfTEFCRUwgKikgSGlpQ3JlYXRlR3VpZE9wQ29kZSAoDQo+Pi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEVuZE9wQ29kZUhhbmRsZSwNCj4+LSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJmdFZmlJZnJUaWFub0d1aWQsDQo+Pi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsDQo+Pi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHNpemVvZiAoRUZJX0lGUl9HVUlEX0xBQkVMKQ0KPj4tICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KPj4tICBFbmRMYWJlbC0+RXh0ZW5kT3BD b2RlICA9IEVGSV9JRlJfRVhURU5EX09QX0xBQkVMOw0KPj4tICBFbmRMYWJlbC0+TnVtYmVyICAg ICAgICA9IExBQkVMX0VORDsNCj4+LQ0KPj4tICAvLw0KPj4tICAvLyBBZGQgZWFjaCB1c2VyIGNh biBiZSBtb2RpZmllZC4NCj4+LSAgLy8NCj4+LSAgVXNlciAgPSBOVUxMOw0KPj4tICBJbmRleCA9 IDE7DQo+Pi0gIG1Vc2VyTWFuYWdlci0+Q3VycmVudCAobVVzZXJNYW5hZ2VyLCAmQ3VycmVudFVz ZXIpOw0KPj4tICB3aGlsZSAoVFJVRSkgew0KPj4tICAgIFN0YXR1cyA9IG1Vc2VyTWFuYWdlci0+ R2V0TmV4dCAobVVzZXJNYW5hZ2VyLCAmVXNlcik7DQo+Pi0gICAgaWYgKEVGSV9FUlJPUiAoU3Rh dHVzKSkgew0KPj4tICAgICAgYnJlYWs7DQo+Pi0gICAgfQ0KPj4tDQo+Pi0gICAgU3RhdHVzID0g R2V0QWNjZXNzUmlnaHQgKCZDdXJyZW50QWNjZXNzUmlnaHQpOw0KPj4tICAgIGlmIChFRklfRVJS T1IgKFN0YXR1cykpIHsNCj4+LSAgICAgIEN1cnJlbnRBY2Nlc3NSaWdodCA9IEVGSV9VU0VSX0lO Rk9fQUNDRVNTX0VOUk9MTF9TRUxGOw0KPj4tICAgIH0NCj4+LQ0KPj4tICAgIGlmICgoQ3VycmVu dEFjY2Vzc1JpZ2h0ID09IEVGSV9VU0VSX0lORk9fQUNDRVNTX01BTkFHRSkgfHwgKFVzZXINCj49 PQ0KPj5DdXJyZW50VXNlcikpIHsNCj4+LSAgICAgIEFkZFVzZXJUb0Zvcm0gKFVzZXIsIChVSU5U MTYpKEtFWV9NT0RJRllfVVNFUiB8DQo+S0VZX1NFTEVDVF9VU0VSDQo+PnwgSW5kZXgpLCBTdGFy dE9wQ29kZUhhbmRsZSk7DQo+Pi0gICAgfQ0KPj4tICAgIEluZGV4Kys7DQo+Pi0gIH0NCj4+LQ0K Pj4tICBIaWlVcGRhdGVGb3JtICgNCj4+LSAgICBtQ2FsbGJhY2tJbmZvLT5IaWlIYW5kbGUsIC8v IEhJSSBoYW5kbGUNCj4+LSAgICAmZ1VzZXJQcm9maWxlTWFuYWdlckd1aWQsIC8vIEZvcm1zZXQg R1VJRA0KPj4tICAgIEZPUk1JRF9NT0RJRllfVVNFUiwgICAgICAgLy8gRm9ybSBJRA0KPj4tICAg IFN0YXJ0T3BDb2RlSGFuZGxlLCAgICAgICAgLy8gTGFiZWwgZm9yIHdoZXJlIHRvIGluc2VydCBv cGNvZGVzDQo+Pi0gICAgRW5kT3BDb2RlSGFuZGxlICAgICAgICAgICAvLyBSZXBsYWNlIGRhdGEN Cj4+LSAgICApOw0KPj4tDQo+Pi0gIEhpaUZyZWVPcENvZGVIYW5kbGUgKFN0YXJ0T3BDb2RlSGFu ZGxlKTsNCj4+LSAgSGlpRnJlZU9wQ29kZUhhbmRsZSAoRW5kT3BDb2RlSGFuZGxlKTsNCj4+LX0N Cj4+LQ0KPj4tDQo+Pi0vKioNCj4+LSAgR2V0IGFsbCB0aGUgdXNlciBpbmZvIGZyb20gbU1vZGlm eVVzZXIgaW4gdGhlIHVzZXIgbWFuYWdlciwgYW5kIHNhdmUgb24NCj4+dGhlDQo+Pi0gIGdsb2Jh bCB2YXJpYWJsZS4NCj4+LQ0KPj4tKiovDQo+Pi1WT0lEDQo+Pi1HZXRBbGxVc2VySW5mbyAoDQo+ Pi0gIFZPSUQNCj4+LSAgKQ0KPj4tew0KPj4tICBFRklfU1RBVFVTICAgICAgICAgICAgU3RhdHVz Ow0KPj4tICBFRklfVVNFUl9JTkZPX0hBTkRMRSAgVXNlckluZm87DQo+Pi0gIEVGSV9VU0VSX0lO Rk8gICAgICAgICAqSW5mbzsNCj4+LSAgVUlOVE4gICAgICAgICAgICAgICAgIEluZm9TaXplOw0K Pj4tICBVSU5UTiAgICAgICAgICAgICAgICAgTWVtU2l6ZTsNCj4+LSAgVUlOVE4gICAgICAgICAg ICAgICAgIERhdGFMZW47DQo+Pi0NCj4+LSAgLy8NCj4+LSAgLy8gSW5pdCB2YXJpYWJsZSB0byBk ZWZhdWx0IHZhbHVlLg0KPj4tICAvLw0KPj4tICBtUHJvdmlkZXJDaG9pY2UgICAgICAgICAgICAg ICAgICAgPSAwOw0KPj4tICBtQ29ubmNldExvZ2ljYWwgICAgICAgICAgICAgICAgICAgPSAwOw0K Pj4tDQo+Pi0gIG1Vc2VySW5mby5DcmVhdGVEYXRlRXhpc3QgICAgICAgICA9IEZBTFNFOw0KPj4t ICBtVXNlckluZm8uVXNhZ2VEYXRlRXhpc3QgICAgICAgICAgPSBGQUxTRTsNCj4+LSAgbVVzZXJJ bmZvLlVzYWdlQ291bnQgICAgICAgICAgICAgID0gMDsNCj4+LQ0KPj4tICBtVXNlckluZm8uQWNj ZXNzUG9saWN5TGVuICAgICAgICAgPSAwOw0KPj4tICBtVXNlckluZm8uQWNjZXNzUG9saWN5TW9k aWZpZWQgICAgPSBGQUxTRTsNCj4+LSAgaWYgKG1Vc2VySW5mby5BY2Nlc3NQb2xpY3kgIT0gTlVM TCkgew0KPj4tICAgIEZyZWVQb29sIChtVXNlckluZm8uQWNjZXNzUG9saWN5KTsNCj4+LSAgICBt VXNlckluZm8uQWNjZXNzUG9saWN5ID0gTlVMTDsNCj4+LSAgfQ0KPj4tICBtVXNlckluZm8uSWRl bnRpdHlQb2xpY3lMZW4gICAgICAgPSAwOw0KPj4tICBtVXNlckluZm8uSWRlbnRpdHlQb2xpY3lN b2RpZmllZCAgPSBGQUxTRTsNCj4+LSAgaWYgKG1Vc2VySW5mby5JZGVudGl0eVBvbGljeSAhPSBO VUxMKSB7DQo+Pi0gICAgRnJlZVBvb2wgKG1Vc2VySW5mby5JZGVudGl0eVBvbGljeSk7DQo+Pi0g ICAgbVVzZXJJbmZvLklkZW50aXR5UG9saWN5ID0gTlVMTDsNCj4+LSAgfQ0KPj4tDQo+Pi0gIC8v DQo+Pi0gIC8vIEFsbG9jYXRlIHVzZXIgaW5mb3JtYXRpb24gbWVtb3J5Lg0KPj4tICAvLw0KPj4t ICBNZW1TaXplID0gc2l6ZW9mIChFRklfVVNFUl9JTkZPKSArIDYzOw0KPj4tICBJbmZvICAgID0g QWxsb2NhdGVaZXJvUG9vbCAoTWVtU2l6ZSk7DQo+Pi0gIGlmIChJbmZvID09IE5VTEwpIHsNCj4+ LSAgICByZXR1cm4gOw0KPj4tICB9DQo+Pi0NCj4+LSAgLy8NCj4+LSAgLy8gR2V0IGVhY2ggdXNl ciBpbmZvcm1hdGlvbi4NCj4+LSAgLy8NCj4+LSAgVXNlckluZm8gPSBOVUxMOw0KPj4tICB3aGls ZSAoVFJVRSkgew0KPj4tICAgIFN0YXR1cyA9IG1Vc2VyTWFuYWdlci0+R2V0TmV4dEluZm8gKG1V c2VyTWFuYWdlciwgbU1vZGlmeVVzZXIsDQo+PiZVc2VySW5mbyk7DQo+Pi0gICAgaWYgKEVGSV9F UlJPUiAoU3RhdHVzKSkgew0KPj4tICAgICAgYnJlYWs7DQo+Pi0gICAgfQ0KPj4tICAgIC8vDQo+ Pi0gICAgLy8gR2V0IGluZm9ybWF0aW9uLg0KPj4tICAgIC8vDQo+Pi0gICAgSW5mb1NpemUgID0g TWVtU2l6ZTsNCj4+LSAgICBTdGF0dXMgICAgPSBtVXNlck1hbmFnZXItPkdldEluZm8gKA0KPj4t ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlck1hbmFnZXIsDQo+Pi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIG1Nb2RpZnlVc2VyLA0KPj4tICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBVc2VySW5mbywNCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgSW5mbywNCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkluZm9TaXpl DQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+Pi0gICAgaWYgKFN0YXR1 cyA9PSBFRklfQlVGRkVSX1RPT19TTUFMTCkgew0KPj4tICAgICAgTWVtU2l6ZSA9IEluZm9TaXpl Ow0KPj4tICAgICAgRnJlZVBvb2wgKEluZm8pOw0KPj4tICAgICAgSW5mbyA9IEFsbG9jYXRlWmVy b1Bvb2wgKE1lbVNpemUpOw0KPj4tICAgICAgaWYgKEluZm8gPT0gTlVMTCkgew0KPj4tICAgICAg ICByZXR1cm4gOw0KPj4tICAgICAgfQ0KPj4tDQo+Pi0gICAgICBTdGF0dXMgPSBtVXNlck1hbmFn ZXItPkdldEluZm8gKA0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VyTWFu YWdlciwNCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtTW9kaWZ5VXNlciwNCj4+ LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VySW5mbywNCj4+LSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBJbmZvLA0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICZJbmZvU2l6ZQ0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+Pi0g ICAgfQ0KPj4tDQo+Pi0gICAgaWYgKFN0YXR1cyA9PSBFRklfU1VDQ0VTUykgew0KPj4tICAgICAg Ly8NCj4+LSAgICAgIC8vIERlYWwgd2l0aCBlYWNoIGluZm9ybWF0aW9uIGFjY29yZGluZyB0byBp bmZvcm1haXRvbiB0eXBlLg0KPj4tICAgICAgLy8NCj4+LSAgICAgIERhdGFMZW4gPSBJbmZvLT5J bmZvU2l6ZSAtIHNpemVvZiAoRUZJX1VTRVJfSU5GTyk7DQo+Pi0gICAgICBzd2l0Y2ggKEluZm8t PkluZm9UeXBlKSB7DQo+Pi0gICAgICBjYXNlIEVGSV9VU0VSX0lORk9fTkFNRV9SRUNPUkQ6DQo+ Pi0gICAgICAgIENvcHlNZW0gKCZtVXNlckluZm8uVXNlck5hbWUsIChVSU5UOCAqKSAoSW5mbyAr IDEpLCBEYXRhTGVuKTsNCj4+LSAgICAgICAgYnJlYWs7DQo+Pi0NCj4+LSAgICAgIGNhc2UgRUZJ X1VTRVJfSU5GT19DUkVBVEVfREFURV9SRUNPUkQ6DQo+Pi0gICAgICAgIENvcHlNZW0gKCZtVXNl ckluZm8uQ3JlYXRlRGF0ZSwgKFVJTlQ4ICopIChJbmZvICsgMSksIERhdGFMZW4pOw0KPj4tICAg ICAgICBtVXNlckluZm8uQ3JlYXRlRGF0ZUV4aXN0ID0gVFJVRTsNCj4+LSAgICAgICAgYnJlYWs7 DQo+Pi0NCj4+LSAgICAgIGNhc2UgRUZJX1VTRVJfSU5GT19VU0FHRV9EQVRFX1JFQ09SRDoNCj4+ LSAgICAgICAgQ29weU1lbSAoJm1Vc2VySW5mby5Vc2FnZURhdGUsIChVSU5UOCAqKSAoSW5mbyAr IDEpLCBEYXRhTGVuKTsNCj4+LSAgICAgICAgbVVzZXJJbmZvLlVzYWdlRGF0ZUV4aXN0ID0gVFJV RTsNCj4+LSAgICAgICAgYnJlYWs7DQo+Pi0NCj4+LSAgICAgIGNhc2UgRUZJX1VTRVJfSU5GT19V U0FHRV9DT1VOVF9SRUNPUkQ6DQo+Pi0gICAgICAgIENvcHlNZW0gKCZtVXNlckluZm8uVXNhZ2VD b3VudCwgKFVJTlQ4ICopIChJbmZvICsgMSksIERhdGFMZW4pOw0KPj4tICAgICAgICBicmVhazsN Cj4+LQ0KPj4tICAgICAgY2FzZSBFRklfVVNFUl9JTkZPX0FDQ0VTU19QT0xJQ1lfUkVDT1JEOg0K Pj4tICAgICAgICBtVXNlckluZm8uQWNjZXNzUG9saWN5ID0gQWxsb2NhdGVaZXJvUG9vbCAoRGF0 YUxlbik7DQo+Pi0gICAgICAgIGlmIChtVXNlckluZm8uQWNjZXNzUG9saWN5ID09IE5VTEwpIHsN Cj4+LSAgICAgICAgICBicmVhazsNCj4+LSAgICAgICAgfQ0KPj4tDQo+Pi0gICAgICAgIENvcHlN ZW0gKG1Vc2VySW5mby5BY2Nlc3NQb2xpY3ksIChVSU5UOCAqKSAoSW5mbyArIDEpLCBEYXRhTGVu KTsNCj4+LSAgICAgICAgbVVzZXJJbmZvLkFjY2Vzc1BvbGljeUxlbiA9IERhdGFMZW47DQo+Pi0g ICAgICAgIGJyZWFrOw0KPj4tDQo+Pi0gICAgICBjYXNlIEVGSV9VU0VSX0lORk9fSURFTlRJVFlf UE9MSUNZX1JFQ09SRDoNCj4+LSAgICAgICAgbVVzZXJJbmZvLklkZW50aXR5UG9saWN5ID0gQWxs b2NhdGVaZXJvUG9vbCAoRGF0YUxlbik7DQo+Pi0gICAgICAgIGlmIChtVXNlckluZm8uSWRlbnRp dHlQb2xpY3kgPT0gTlVMTCkgew0KPj4tICAgICAgICAgIGJyZWFrOw0KPj4tICAgICAgICB9DQo+ Pi0NCj4+LSAgICAgICAgQ29weU1lbSAobVVzZXJJbmZvLklkZW50aXR5UG9saWN5LCAoVUlOVDgg KikgKEluZm8gKyAxKSwgRGF0YUxlbik7DQo+Pi0gICAgICAgIG1Vc2VySW5mby5JZGVudGl0eVBv bGljeUxlbiA9IERhdGFMZW47DQo+Pi0gICAgICAgIGJyZWFrOw0KPj4tDQo+Pi0gICAgICBkZWZh dWx0Og0KPj4tICAgICAgICBicmVhazsNCj4+LSAgICAgIH0NCj4+LSAgICB9DQo+Pi0gIH0NCj4+ LSAgRnJlZVBvb2wgKEluZm8pOw0KPj4tfQ0KPj4tDQo+Pi0NCj4+LS8qKg0KPj4tICBDb252ZXJ0 IHRoZSBEYXRlIHRvIGEgc3RyaW5nLCBhbmQgdXBkYXRlIHRoZSBIaWkgZGF0YWJhc2UgRGF0ZUlE IHN0cmluZw0KPndpdGgNCj4+aXQuDQo+Pi0NCj4+LSAgQHBhcmFtW2luXSBEYXRlICAgICAgIFBv aW50cyB0byB0aGUgZGF0ZSB0byBiZSBjb252ZXJ0ZWQuDQo+Pi0gIEBwYXJhbVtpbl0gRGF0ZUlk ICAgICBTdHJpbmcgSUQgaW4gdGhlIEhJSSBkYXRhYmFzZSB0byBiZSByZXBsYWNlZC4NCj4+LQ0K Pj4tKiovDQo+Pi1WT0lEDQo+Pi1SZXNvbHZlRGF0ZSAoDQo+Pi0gIElOIEVGSV9USU1FICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqRGF0ZSwNCj4+LSAgSU4gRUZJX1NUUklOR19J RCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGVJZA0KPj4tICApDQo+Pi17DQo+Pi0g IENIQVIxNiAgKlN0cjsNCj4+LSAgVUlOVE4gICBEYXRlQnVmTGVuOw0KPj4tDQo+Pi0gIC8vDQo+ Pi0gIC8vIENvbnZlcnQgZGF0ZSB0byBzdHJpbmcuDQo+Pi0gIC8vDQo+Pi0gIERhdGVCdWZMZW4g PSA2NDsNCj4+LSAgU3RyICAgICAgICA9IEFsbG9jYXRlWmVyb1Bvb2wgKERhdGVCdWZMZW4pOw0K Pj4tICBpZiAoU3RyID09IE5VTEwpIHsNCj4+LSAgICByZXR1cm4gOw0KPj4tICB9DQo+Pi0NCj4+ LSAgVW5pY29kZVNQcmludCAoDQo+Pi0gICAgU3RyLA0KPj4tICAgIERhdGVCdWZMZW4sDQo+Pi0g ICAgTCIlNGQtJTJkLSUyZCAiLA0KPj4tICAgIERhdGUtPlllYXIsDQo+Pi0gICAgRGF0ZS0+TW9u dGgsDQo+Pi0gICAgRGF0ZS0+RGF5DQo+Pi0gICAgKTsNCj4+LQ0KPj4tICAvLw0KPj4tICAvLyBD b252ZXJ0IHRpbWUgdG8gc3RyaW5nLg0KPj4tICAvLw0KPj4tICBEYXRlQnVmTGVuIC09IFN0ckxl biAoU3RyKTsNCj4+LSAgVW5pY29kZVNQcmludCAoDQo+Pi0gICAgU3RyICsgU3RyTGVuIChTdHIp LA0KPj4tICAgIERhdGVCdWZMZW4sDQo+Pi0gICAgTCIlMmQ6JTJkOiUyZCIsDQo+Pi0gICAgRGF0 ZS0+SG91ciwNCj4+LSAgICBEYXRlLT5NaW51dGUsDQo+Pi0gICAgRGF0ZS0+U2Vjb25kDQo+Pi0g ICAgKTsNCj4+LQ0KPj4tICBIaWlTZXRTdHJpbmcgKG1DYWxsYmFja0luZm8tPkhpaUhhbmRsZSwg RGF0ZUlkLCBTdHIsIE5VTEwpOw0KPj4tICBGcmVlUG9vbCAoU3RyKTsNCj4+LX0NCj4+LQ0KPj4t DQo+Pi0vKioNCj4+LSAgQ29udmVydCB0aGUgQ291bnRWYWwgdG8gYSBzdHJpbmcsIGFuZCB1cGRh dGUgdGhlIEhpaSBkYXRhYmFzZSBDb3VudElkDQo+c3RyaW5nDQo+Pi0gIHdpdGggaXQuDQo+Pi0N Cj4+LSAgQHBhcmFtW2luXSAgQ291bnRWYWwgICBUaGUgaGV4IHZhbHVlIHRvIGNvbnZlcnQuDQo+ Pi0gIEBwYXJhbVtpbl0gIENvdW50SWQgICAgU3RyaW5nIElEIGluIHRoZSBISUkgZGF0YWJhc2Ug dG8gYmUgcmVwbGFjZWQuDQo+Pi0NCj4+LSoqLw0KPj4tVk9JRA0KPj4tUmVzb2x2ZUNvdW50ICgN Cj4+LSAgSU4gVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvdW50 VmFsLA0KPj4tICBJTiBFRklfU1RSSU5HX0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Q291bnRJZA0KPj4tICApDQo+Pi17DQo+Pi0gIENIQVIxNiAgQ291bnRbMTBdOw0KPj4tDQo+Pi0g IFVuaWNvZGVTUHJpbnQgKENvdW50LCAyMCwgTCIlZCIsIENvdW50VmFsKTsNCj4+LSAgSGlpU2V0 U3RyaW5nIChtQ2FsbGJhY2tJbmZvLT5IaWlIYW5kbGUsIENvdW50SWQsIENvdW50LCBOVUxMKTsN Cj4+LX0NCj4+LQ0KPj4tDQo+Pi0vKioNCj4+LSAgQ29uY2F0ZW5hdGVzIG9uZSBOdWxsLXRlcm1p bmF0ZWQgVW5pY29kZSBzdHJpbmcgdG8gYW5vdGhlciBOdWxsLQ0KPj50ZXJtaW5hdGVkDQo+Pi0g IFVuaWNvZGUgc3RyaW5nLg0KPj4tDQo+Pi0gIEBwYXJhbVtpbiwgb3V0XSAgU291cmNlMSAgICAg IE9uIGVudHJ5LCBwb2ludCB0byBhIE51bGwtdGVybWluYXRlZCBVbmljb2RlDQo+PnN0cmluZy4N Cj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT24gZXhpdCwgcG9pbnQgdG8gYSBu ZXcgY29uY2F0ZW5hdGVkIFVuaWNvZGUgc3RyaW5nDQo+Pi0gIEBwYXJhbVtpbl0gICAgICAgU291 cmNlMiAgICAgIFBvaW50ZXIgdG8gYSBOdWxsLXRlcm1pbmF0ZWQgVW5pY29kZSBzdHJpbmcuDQo+ Pi0NCj4+LSoqLw0KPj4tVk9JRA0KPj4tQWRkU3RyICgNCj4+LSAgSU4gT1VUICBDSEFSMTYgICAg ICAgICAgICAgICAgICAqKlNvdXJjZTEsDQo+Pi0gIElOICAgICAgQ09OU1QgQ0hBUjE2ICAgICAg ICAgICAgKlNvdXJjZTINCj4+LSAgKQ0KPj4tew0KPj4tICBDSEFSMTYgICAgICAgICAgICAgICAg ICAgICAgICAqVG1wU3RyOw0KPj4tICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICBTdHJM ZW5ndGg7DQo+Pi0NCj4+LSAgQVNTRVJUIChTb3VyY2UxICE9IE5VTEwpOw0KPj4tICBBU1NFUlQg KFNvdXJjZTIgIT0gTlVMTCk7DQo+Pi0NCj4+LSAgaWYgKCpTb3VyY2UxID09IE5VTEwpIHsNCj4+ LSAgICBTdHJMZW5ndGggPSBTdHJTaXplIChTb3VyY2UyKTsNCj4+LSAgfSBlbHNlIHsNCj4+LSAg ICBTdHJMZW5ndGggID0gU3RyU2l6ZSAoKlNvdXJjZTEpOw0KPj4tICAgIFN0ckxlbmd0aCArPSBT dHJTaXplIChTb3VyY2UyKSAtIDI7DQo+Pi0gIH0NCj4+LQ0KPj4tICBUbXBTdHIgICAgID0gQWxs b2NhdGVaZXJvUG9vbCAoU3RyTGVuZ3RoKTsNCj4+LSAgQVNTRVJUIChUbXBTdHIgIT0gTlVMTCk7 DQo+Pi0NCj4+LSAgaWYgKCpTb3VyY2UxID09IE5VTEwpIHsNCj4+LSAgICBTdHJDcHlTIChUbXBT dHIsIFN0ckxlbmd0aCAvIHNpemVvZiAoQ0hBUjE2KSwgU291cmNlMik7DQo+Pi0gIH0gZWxzZSB7 DQo+Pi0gICAgU3RyQ3B5UyAoVG1wU3RyLCBTdHJMZW5ndGggLyBzaXplb2YgKENIQVIxNiksICpT b3VyY2UxKTsNCj4+LSAgICBGcmVlUG9vbCAoKlNvdXJjZTEpOw0KPj4tICAgIFN0ckNhdFMgKFRt cFN0ciwgU3RyTGVuZ3RoIC8gc2l6ZW9mIChDSEFSMTYpLFNvdXJjZTIpOw0KPj4tICB9DQo+Pi0N Cj4+LSAgKlNvdXJjZTEgPSBUbXBTdHI7DQo+Pi19DQo+Pi0NCj4+LQ0KPj4tLyoqDQo+Pi0gIENv bnZlcnQgdGhlIGlkZW50aXR5IHBvbGljeSB0byBhIHVuaWNvZGUgc3RyaW5nIGFuZCB1cGRhdGUg dGhlIEhpaSBkYXRhYmFzZQ0KPj4tICBJcFN0cmluZ0lkIHN0cmluZyB3aXRoIGl0Lg0KPj4tDQo+ Pi0gIEBwYXJhbVtpbl0gIElwICAgICAgICAgUG9pbnRzIHRvIGlkZW50aXR5IHBvbGljeS4NCj4+ LSAgQHBhcmFtW2luXSAgSXBMZW4gICAgICBUaGUgaWRlbnRpdHkgcG9saWN5IGxlbmd0aC4NCj4+ LSAgQHBhcmFtW2luXSAgSXBTdHJpbmdJZCBTdHJpbmcgSUQgaW4gdGhlIEhJSSBkYXRhYmFzZSB0 byBiZSByZXBsYWNlZC4NCj4+LQ0KPj4tKiovDQo+Pi1WT0lEDQo+Pi1SZXNvbHZlSWRlbnRpdHlQ b2xpY3kgKA0KPj4tICBJTiAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKklwLA0KPj4tICBJTiAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgSXBMZW4sDQo+Pi0gIElOICBFRklfU1RSSU5HX0lEICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBJcFN0cmluZ0lkDQo+Pi0gICkNCj4+LXsNCj4+LSAgQ0hBUjE2ICAgICAgICAgICAgICAg ICAgICAgICAgKlRtcFN0cjsNCj4+LSAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgQ2hr TGVuOw0KPj4tICBFRklfVVNFUl9JTkZPX0lERU5USVRZX1BPTElDWSAqSWRlbnRpdHk7DQo+Pi0g IFVJTlQxNiAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4Ow0KPj4tICBDSEFSMTYgICAgICAg ICAgICAgICAgICAgICAgICAqUHJvdlN0cjsNCj4+LSAgRUZJX1NUUklOR19JRCAgICAgICAgICAg ICAgICAgUHJvdklkOw0KPj4tICBFRklfSElJX0hBTkRMRSAgICAgICAgICAgICAgICBIaWlIYW5k bGU7DQo+Pi0gIEVGSV9VU0VSX0NSRURFTlRJQUwyX1BST1RPQ09MICpVc2VyQ3JlZGVudGlhbDsN Cj4+LQ0KPj4tICBUbXBTdHIgPSBOVUxMOw0KPj4tDQo+Pi0gIC8vDQo+Pi0gIC8vIFJlc29sdmUg ZWFjaCBwb2xpY3kuDQo+Pi0gIC8vDQo+Pi0gIENoa0xlbiAgPSAwOw0KPj4tICB3aGlsZSAoQ2hr TGVuIDwgSXBMZW4pIHsNCj4+LSAgICBJZGVudGl0eSA9IChFRklfVVNFUl9JTkZPX0lERU5USVRZ X1BPTElDWSAqKSAoSXAgKyBDaGtMZW4pOw0KPj4tICAgIHN3aXRjaCAoSWRlbnRpdHktPlR5cGUp IHsNCj4+LSAgICBjYXNlIEVGSV9VU0VSX0lORk9fSURFTlRJVFlfRkFMU0U6DQo+Pi0gICAgICBB ZGRTdHIgKCZUbXBTdHIsIEwiRmFsc2UiKTsNCj4+LSAgICAgIGJyZWFrOw0KPj4tDQo+Pi0gICAg Y2FzZSBFRklfVVNFUl9JTkZPX0lERU5USVRZX1RSVUU6DQo+Pi0gICAgICBBZGRTdHIgKCZUbXBT dHIsIEwiTm9uZSIpOw0KPj4tICAgICAgYnJlYWs7DQo+Pi0NCj4+LSAgICBjYXNlIEVGSV9VU0VS X0lORk9fSURFTlRJVFlfTk9UOg0KPj4tICAgICAgQWRkU3RyICgmVG1wU3RyLCBMIiEgIik7DQo+ Pi0gICAgICBicmVhazsNCj4+LQ0KPj4tICAgIGNhc2UgRUZJX1VTRVJfSU5GT19JREVOVElUWV9B TkQ6DQo+Pi0gICAgICBBZGRTdHIgKCZUbXBTdHIsIEwiICYmICIpOw0KPj4tICAgICAgYnJlYWs7 DQo+Pi0NCj4+LSAgICBjYXNlIEVGSV9VU0VSX0lORk9fSURFTlRJVFlfT1I6DQo+Pi0gICAgICBB ZGRTdHIgKCZUbXBTdHIsIEwiIHx8ICIpOw0KPj4tICAgICAgYnJlYWs7DQo+Pi0NCj4+LSAgICBj YXNlIEVGSV9VU0VSX0lORk9fSURFTlRJVFlfQ1JFREVOVElBTF9UWVBFOg0KPj4tICAgICAgZm9y IChJbmRleCA9IDA7IEluZGV4IDwgbVByb3ZpZGVySW5mby0+Q291bnQ7IEluZGV4KyspIHsNCj4+ LSAgICAgICAgVXNlckNyZWRlbnRpYWwgPSBtUHJvdmlkZXJJbmZvLT5Qcm92aWRlcltJbmRleF07 DQo+Pi0gICAgICAgIGlmIChDb21wYXJlR3VpZCAoKEVGSV9HVUlEICopIChJZGVudGl0eSArIDEp LCAmVXNlckNyZWRlbnRpYWwtPlR5cGUpKQ0KPnsNCj4+LSAgICAgICAgICBVc2VyQ3JlZGVudGlh bC0+VGl0bGUgKA0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJDcmVkZW50aWFs LA0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICZIaWlIYW5kbGUsDQo+Pi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgJlByb3ZJZA0KPj4tICAgICAgICAgICAgICAgICAgICAgICAg ICAgICk7DQo+Pi0gICAgICAgICAgUHJvdlN0ciA9IEhpaUdldFN0cmluZyAoSGlpSGFuZGxlLCBQ cm92SWQsIE5VTEwpOw0KPj4tICAgICAgICAgIGlmIChQcm92U3RyICE9IE5VTEwpIHsNCj4+LSAg ICAgICAgICAgIEFkZFN0ciAoJlRtcFN0ciwgUHJvdlN0cik7DQo+Pi0gICAgICAgICAgICBGcmVl UG9vbCAoUHJvdlN0cik7DQo+Pi0gICAgICAgICAgfQ0KPj4tICAgICAgICAgIGJyZWFrOw0KPj4t ICAgICAgICB9DQo+Pi0gICAgICB9DQo+Pi0gICAgICBicmVhazsNCj4+LQ0KPj4tICAgIGNhc2Ug RUZJX1VTRVJfSU5GT19JREVOVElUWV9DUkVERU5USUFMX1BST1ZJREVSOg0KPj4tICAgICAgZm9y IChJbmRleCA9IDA7IEluZGV4IDwgbVByb3ZpZGVySW5mby0+Q291bnQ7IEluZGV4KyspIHsNCj4+ LSAgICAgICAgVXNlckNyZWRlbnRpYWwgPSBtUHJvdmlkZXJJbmZvLT5Qcm92aWRlcltJbmRleF07 DQo+Pi0gICAgICAgIGlmIChDb21wYXJlR3VpZCAoKEVGSV9HVUlEICopIChJZGVudGl0eSArIDEp LCAmVXNlckNyZWRlbnRpYWwtDQo+Pj5JZGVudGlmaWVyKSkgew0KPj4tICAgICAgICAgIFVzZXJD cmVkZW50aWFsLT5UaXRsZSAoDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlckNy ZWRlbnRpYWwsDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJkhpaUhhbmRsZSwNCj4+ LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUHJvdklkDQo+Pi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgKTsNCj4+LSAgICAgICAgICBQcm92U3RyID0gSGlpR2V0U3RyaW5nIChIaWlI YW5kbGUsIFByb3ZJZCwgTlVMTCk7DQo+Pi0gICAgICAgICAgaWYgKFByb3ZTdHIgIT0gTlVMTCkg ew0KPj4tICAgICAgICAgICAgQWRkU3RyICgmVG1wU3RyLCBQcm92U3RyKTsNCj4+LSAgICAgICAg ICAgIEZyZWVQb29sIChQcm92U3RyKTsNCj4+LSAgICAgICAgICB9DQo+Pi0gICAgICAgICAgYnJl YWs7DQo+Pi0gICAgICAgIH0NCj4+LSAgICAgIH0NCj4+LSAgICAgIGJyZWFrOw0KPj4tICAgIH0N Cj4+LQ0KPj4tICAgIENoa0xlbiArPSBJZGVudGl0eS0+TGVuZ3RoOw0KPj4tICB9DQo+Pi0NCj4+ LSAgaWYgKFRtcFN0ciAhPSBOVUxMKSB7DQo+Pi0gICAgSGlpU2V0U3RyaW5nIChtQ2FsbGJhY2tJ bmZvLT5IaWlIYW5kbGUsIElwU3RyaW5nSWQsIFRtcFN0ciwgTlVMTCk7DQo+Pi0gICAgRnJlZVBv b2wgKFRtcFN0cik7DQo+Pi0gIH0NCj4+LX0NCj4+LQ0KPj4tDQo+Pi0vKioNCj4+LSAgRGlzcGxh eSBtb2RpZnkgdXNlciBpbmZvcm1hdGlvbiBmb3JtLg0KPj4tDQo+Pi0gIFRoaXMgZm9ybSBkaXNw bGF5cywgdXNlcm5hbWUsIGNyZWF0ZSBEYXRlLCB1c2FnZSBkYXRlLCB1c2FnZSBjb3VudCwNCj5p ZGVudGl0eQ0KPj5wb2xpY3ksDQo+Pi0gIGFuZCBhY2Nlc3MgcG9saWN5Lg0KPj4tDQo+Pi0gIEBw YXJhbVtpbl0gVXNlckluZGV4ICAgICAgIFRoZSBpbmRleCBvZiB0aGUgdXNlciBpbiBkaXNwbGF5 IGxpc3QgdG8gbW9kaWZ5Lg0KPj4tDQo+Pi0qKi8NCj4+LVZPSUQNCj4+LU1vZGlmeVVzZXJJbmZv ICgNCj4+LSAgSU4gVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVz ZXJJbmRleA0KPj4tICApDQo+Pi17DQo+Pi0gIEVGSV9TVEFUVVMgICAgICAgICAgICAgICBTdGF0 dXM7DQo+Pi0gIEVGSV9VU0VSX1BST0ZJTEVfSEFORExFICBDdXJyZW50VXNlcjsNCj4+LSAgVUlO VDMyICAgICAgICAgICAgICAgICAgIEN1cnJlbnRBY2Nlc3NSaWdodDsNCj4+LSAgVk9JRCAgICAg ICAgICAgICAgICAgICAgICpTdGFydE9wQ29kZUhhbmRsZTsNCj4+LSAgVk9JRCAgICAgICAgICAg ICAgICAgICAgICpFbmRPcENvZGVIYW5kbGU7DQo+Pi0gIEVGSV9JRlJfR1VJRF9MQUJFTCAgICAg ICAqU3RhcnRMYWJlbDsNCj4+LSAgRUZJX0lGUl9HVUlEX0xBQkVMICAgICAgICpFbmRMYWJlbDsN Cj4+LQ0KPj4tICAvLw0KPj4tICAvLyBJbml0aWFsaXplIHRoZSBjb250YWluZXIgZm9yIGR5bmFt aWMgb3Bjb2Rlcy4NCj4+LSAgLy8NCj4+LSAgU3RhcnRPcENvZGVIYW5kbGUgPSBIaWlBbGxvY2F0 ZU9wQ29kZUhhbmRsZSAoKTsNCj4+LSAgQVNTRVJUIChTdGFydE9wQ29kZUhhbmRsZSAhPSBOVUxM KTsNCj4+LQ0KPj4tICBFbmRPcENvZGVIYW5kbGUgPSBIaWlBbGxvY2F0ZU9wQ29kZUhhbmRsZSAo KTsNCj4+LSAgQVNTRVJUIChFbmRPcENvZGVIYW5kbGUgIT0gTlVMTCk7DQo+Pi0NCj4+LSAgLy8N Cj4+LSAgLy8gQ3JlYXRlIEhpaSBFeHRlbmQgTGFiZWwgT3BDb2RlLg0KPj4tICAvLw0KPj4tICBT dGFydExhYmVsID0gKEVGSV9JRlJfR1VJRF9MQUJFTCAqKSBIaWlDcmVhdGVHdWlkT3BDb2RlICgN Cj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGFydE9wQ29kZUhh bmRsZSwNCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZ0VmaUlm clRpYW5vR3VpZCwNCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBO VUxMLA0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiAo RUZJX0lGUl9HVUlEX0xBQkVMKQ0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICk7DQo+Pi0gIFN0YXJ0TGFiZWwtPkV4dGVuZE9wQ29kZSAgPSBFRklfSUZSX0VYVEVO RF9PUF9MQUJFTDsNCj4+LSAgU3RhcnRMYWJlbC0+TnVtYmVyICAgICAgICA9IExBQkVMX1VTRVJf SU5GT19GVU5DOw0KPj4tDQo+Pi0gIEVuZExhYmVsID0gKEVGSV9JRlJfR1VJRF9MQUJFTCAqKSBI aWlDcmVhdGVHdWlkT3BDb2RlICgNCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRW5kT3BDb2RlSGFuZGxlLA0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAmZ0VmaUlmclRpYW5vR3VpZCwNCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgTlVMTCwNCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc2l6ZW9mIChFRklfSUZSX0dVSURfTEFCRUwpDQo+Pi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICk7DQo+Pi0gIEVuZExhYmVsLT5FeHRlbmRPcENvZGUgID0gRUZJX0lG Ul9FWFRFTkRfT1BfTEFCRUw7DQo+Pi0gIEVuZExhYmVsLT5OdW1iZXIgICAgICAgID0gTEFCRUxf RU5EOw0KPj4tDQo+Pi0gIC8vDQo+Pi0gIC8vIEZpbmQgdGhlIHVzZXIgcHJvZmlsZSB0byBiZSBt b2RpZmllZC4NCj4+LSAgLy8NCj4+LSAgbU1vZGlmeVVzZXIgPSBOVUxMOw0KPj4tICBTdGF0dXMg ICAgICA9IG1Vc2VyTWFuYWdlci0+R2V0TmV4dCAobVVzZXJNYW5hZ2VyLCAmbU1vZGlmeVVzZXIp Ow0KPj4tICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+Pi0gICAgcmV0dXJuIDsNCj4+LSAg fQ0KPj4tDQo+Pi0gIHdoaWxlIChVc2VySW5kZXggPiAxKSB7DQo+Pi0gICAgU3RhdHVzID0gbVVz ZXJNYW5hZ2VyLT5HZXROZXh0IChtVXNlck1hbmFnZXIsICZtTW9kaWZ5VXNlcik7DQo+Pi0gICAg aWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPj4tICAgICAgcmV0dXJuIDsNCj4+LSAgICB9DQo+ Pi0gICAgVXNlckluZGV4LS07DQo+Pi0gIH0NCj4+LQ0KPj4tICAvLw0KPj4tICAvLyBHZXQgdXNl ciBwcm9maWxlIGluZm9ybWF0aW9uLg0KPj4tICAvLw0KPj4tICBHZXRBbGxVc2VySW5mbyAoKTsN Cj4+LQ0KPj4tICAvLw0KPj4tICAvLyBVcGRhdGUgdXNlciBuYW1lLg0KPj4tICBIaWlTZXRTdHJp bmcgKA0KPj4tICAgIG1DYWxsYmFja0luZm8tPkhpaUhhbmRsZSwNCj4+LSAgICBTVFJJTkdfVE9L RU4gKFNUUl9VU0VSX05BTUVfVkFMKSwNCj4+LSAgICBtVXNlckluZm8uVXNlck5hbWUsDQo+Pi0g ICAgTlVMTA0KPj4tICAgICk7DQo+Pi0NCj4+LSAgLy8NCj4+LSAgLy8gVXBkYXRlIGNyZWF0ZSBk YXRlLg0KPj4tICAvLw0KPj4tICBpZiAobVVzZXJJbmZvLkNyZWF0ZURhdGVFeGlzdCkgew0KPj4t ICAgIFJlc29sdmVEYXRlICgmbVVzZXJJbmZvLkNyZWF0ZURhdGUsIFNUUklOR19UT0tFTg0KPj4o U1RSX0NSRUFURV9EQVRFX1ZBTCkpOw0KPj4tICB9IGVsc2Ugew0KPj4tICAgIEhpaVNldFN0cmlu ZyAoDQo+Pi0gICAgICBtQ2FsbGJhY2tJbmZvLT5IaWlIYW5kbGUsDQo+Pi0gICAgICBTVFJJTkdf VE9LRU4gKFNUUl9DUkVBVEVfREFURV9WQUwpLA0KPj4tICAgICAgTCIiLA0KPj4tICAgICAgTlVM TA0KPj4tICAgICAgKTsNCj4+LSAgfQ0KPj4tDQo+Pi0gIC8vDQo+Pi0gIC8vIEFkZCB1c2FnZSBk YXRlLg0KPj4tICAvLw0KPj4tICBpZiAobVVzZXJJbmZvLlVzYWdlRGF0ZUV4aXN0KSB7DQo+Pi0g ICAgUmVzb2x2ZURhdGUgKCZtVXNlckluZm8uVXNhZ2VEYXRlLCBTVFJJTkdfVE9LRU4NCj4+KFNU Ul9VU0FHRV9EQVRFX1ZBTCkpOw0KPj4tICB9IGVsc2Ugew0KPj4tICAgIEhpaVNldFN0cmluZyAo DQo+Pi0gICAgICBtQ2FsbGJhY2tJbmZvLT5IaWlIYW5kbGUsDQo+Pi0gICAgICBTVFJJTkdfVE9L RU4gKFNUUl9VU0FHRV9EQVRFX1ZBTCksDQo+Pi0gICAgICBMIiIsDQo+Pi0gICAgICBOVUxMDQo+ Pi0gICAgICApOw0KPj4tICB9DQo+Pi0NCj4+LSAgLy8NCj4+LSAgLy8gQWRkIHVzYWdlIGNvdW50 Lg0KPj4tICAvLw0KPj4tICBSZXNvbHZlQ291bnQgKChVSU5UMzIpIG1Vc2VySW5mby5Vc2FnZUNv dW50LCBTVFJJTkdfVE9LRU4NCj4+KFNUUl9VU0FHRV9DT1VOVF9WQUwpKTsNCj4+LQ0KPj4tICAv Lw0KPj4tICAvLyBBZGQgaWRlbnRpdHkgcG9saWN5Lg0KPj4tICAvLw0KPj4tICBtVXNlck1hbmFn ZXItPkN1cnJlbnQgKG1Vc2VyTWFuYWdlciwgJkN1cnJlbnRVc2VyKTsNCj4+LSAgaWYgKG1Nb2Rp ZnlVc2VyID09IEN1cnJlbnRVc2VyKSB7DQo+Pi0gICAgUmVzb2x2ZUlkZW50aXR5UG9saWN5ICgN Cj4+LSAgICAgIG1Vc2VySW5mby5JZGVudGl0eVBvbGljeSwNCj4+LSAgICAgIG1Vc2VySW5mby5J ZGVudGl0eVBvbGljeUxlbiwNCj4+LSAgICAgIFNUUklOR19UT0tFTiAoU1RSX0lERU5USUZZX1BP TElDWV9WQUwpDQo+Pi0gICAgICApOw0KPj4tICAgIEhpaUNyZWF0ZUdvdG9PcENvZGUgKA0KPj4t ICAgICAgU3RhcnRPcENvZGVIYW5kbGUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8vIENvbnRhaW5lciBmb3Igb3Bjb2Rlcw0KPj4tICAgICAgRk9STUlEX01PRElGWV9JUCwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRhcmdldCBGb3JtIElEDQo+Pi0gICAg ICBTVFJJTkdfVE9LRU4gKFNUUl9JREVOVElGWV9QT0xJQ1kpLCAgICAgICAgICAgICAgICAgLy8g UHJvbXB0IHRleHQNCj4+LSAgICAgIFNUUklOR19UT0tFTiAoU1RSX0lERU5USUZZX1BPTElDWV9W QUwpLCAgICAgICAgICAgICAvLyBIZWxwIHRleHQNCj4+LSAgICAgIEVGSV9JRlJfRkxBR19DQUxM QkFDSywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBRdWVzdGlvbiBmbGFnDQo+Pi0g ICAgICBLRVlfTU9ESUZZX1VTRVIgfCBLRVlfU0VMRUNUX1VTRVIgfCBLRVlfTU9ESUZZX0lQICAg Ly8gUXVlc3Rpb24NCj4+SUQNCj4+LSAgICAgICk7DQo+Pi0gIH0NCj4+LQ0KPj4tICAvLw0KPj4t ICAvLyBBZGQgYWNjZXNzIHBvbGljeS4NCj4+LSAgLy8NCj4+LSAgU3RhdHVzID0gR2V0QWNjZXNz UmlnaHQgKCZDdXJyZW50QWNjZXNzUmlnaHQpOw0KPj4tICBpZiAoRUZJX0VSUk9SIChTdGF0dXMp KSB7DQo+Pi0gICAgQ3VycmVudEFjY2Vzc1JpZ2h0ID0gRUZJX1VTRVJfSU5GT19BQ0NFU1NfRU5S T0xMX1NFTEY7DQo+Pi0gIH0NCj4+LQ0KPj4tICBpZiAoQ3VycmVudEFjY2Vzc1JpZ2h0ID09IEVG SV9VU0VSX0lORk9fQUNDRVNTX01BTkFHRSkgew0KPj4tICAgIEhpaUNyZWF0ZUdvdG9PcENvZGUg KA0KPj4tICAgICAgU3RhcnRPcENvZGVIYW5kbGUsICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8vIENvbnRhaW5lciBmb3Igb3Bjb2Rlcw0KPj4tICAgICAgRk9STUlEX01PRElGWV9B UCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRhcmdldCBGb3JtIElEDQo+ Pi0gICAgICBTVFJJTkdfVE9LRU4gKFNUUl9BQ0NFU1NfUE9MSUNZKSwgICAgICAgICAgICAgICAg ICAgLy8gUHJvbXB0IHRleHQNCj4+LSAgICAgIFNUUklOR19UT0tFTiAoU1RSX05VTExfU1RSSU5H KSwgICAgICAgICAgICAgICAgICAgICAvLyBIZWxwIHRleHQNCj4+LSAgICAgIEVGSV9JRlJfRkxB R19DQUxMQkFDSywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBRdWVzdGlvbiBmbGFn DQo+Pi0gICAgICBLRVlfTU9ESUZZX1VTRVIgfCBLRVlfU0VMRUNUX1VTRVIgfCBLRVlfTU9ESUZZ X0FQICAgLy8gUXVlc3Rpb24NCj4+SUQNCj4+LSAgICAgICk7DQo+Pi0gIH0NCj4+LQ0KPj4tICBI aWlVcGRhdGVGb3JtICgNCj4+LSAgICBtQ2FsbGJhY2tJbmZvLT5IaWlIYW5kbGUsICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvLyBISUkgaGFuZGxlDQo+Pi0gICAgJmdVc2VyUHJvZmlsZU1h bmFnZXJHdWlkLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRm9ybXNldCBHVUlEDQo+ Pi0gICAgRk9STUlEX1VTRVJfSU5GTywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLy8gRm9ybSBJRA0KPj4tICAgIFN0YXJ0T3BDb2RlSGFuZGxlLCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8vIExhYmVsDQo+Pi0gICAgRW5kT3BDb2RlSGFuZGxlICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVwbGFjZSBkYXRhDQo+Pi0gICAg KTsNCj4+LQ0KPj4tICBIaWlGcmVlT3BDb2RlSGFuZGxlIChTdGFydE9wQ29kZUhhbmRsZSk7DQo+ Pi0gIEhpaUZyZWVPcENvZGVIYW5kbGUgKEVuZE9wQ29kZUhhbmRsZSk7DQo+Pi19DQo+Pi0NCj4+ LQ0KPj4tLyoqDQo+Pi0gIEdldCBhbGwgdGhlIGFjY2VzcyBwb2xpY3kgaW5mbyBmcm9tIGN1cnJl bnQgdXNlciBpbmZvLCBhbmQgc2F2ZSBpbiB0aGUgZ2xvYmFsDQo+Pi0gIHZhcmlhYmxlLg0KPj4t DQo+Pi0qKi8NCj4+LVZPSUQNCj4+LVJlc29sdmVBY2Nlc3NQb2xpY3kgKA0KPj4tICBWT0lEDQo+ Pi0gICkNCj4+LXsNCj4+LSAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgT2ZmU2V0Ow0K Pj4tICBFRklfVVNFUl9JTkZPX0FDQ0VTU19DT05UUk9MICBDb250cm9sOw0KPj4tICBVSU5UTiAg ICAgICAgICAgICAgICAgICAgICAgICBWYWxMZW47DQo+Pi0gIFVJTlQ4ICAgICAgICAgICAgICAg ICAgICAgICAgICpBY2Nlc3NEYXRhOw0KPj4tDQo+Pi0gIC8vDQo+Pi0gIC8vIFNldCBkZWZhdWx0 IHZhbHVlDQo+Pi0gIC8vDQo+Pi0gIG1BY2Nlc3NJbmZvLkFjY2Vzc1JpZ2h0ICAgICAgID0gRUZJ X1VTRVJfSU5GT19BQ0NFU1NfRU5ST0xMX1NFTEY7DQo+Pi0gIG1BY2Nlc3NJbmZvLkFjY2Vzc1Nl dHVwICAgICAgID0gQUNDRVNTX1NFVFVQX1JFU1RSSUNURUQ7DQo+Pi0gIG1BY2Nlc3NJbmZvLkFj Y2Vzc0Jvb3RPcmRlciAgID0NCj4+RUZJX1VTRVJfSU5GT19BQ0NFU1NfQk9PVF9PUkRFUl9JTlNF UlQ7DQo+Pi0NCj4+LSAgbUFjY2Vzc0luZm8uTG9hZFBlcm1pdExlbiAgICAgPSAwOw0KPj4tICBt QWNjZXNzSW5mby5Mb2FkRm9yYmlkTGVuICAgICA9IDA7DQo+Pi0gIG1BY2Nlc3NJbmZvLkNvbm5l Y3RQZXJtaXRMZW4gID0gMDsNCj4+LSAgbUFjY2Vzc0luZm8uQ29ubmVjdEZvcmJpZExlbiAgPSAw Ow0KPj4tDQo+Pi0gIC8vDQo+Pi0gIC8vIEdldCBlYWNoIHVzZXIgYWNjZXNzIHBvbGljeS4NCj4+ LSAgLy8NCj4+LSAgT2ZmU2V0ID0gMDsNCj4+LSAgd2hpbGUgKE9mZlNldCA8IG1Vc2VySW5mby5B Y2Nlc3NQb2xpY3lMZW4pIHsNCj4+LSAgICBDb3B5TWVtICgmQ29udHJvbCwgbVVzZXJJbmZvLkFj Y2Vzc1BvbGljeSArIE9mZlNldCwgc2l6ZW9mIChDb250cm9sKSk7DQo+Pi0gICAgVmFsTGVuID0g Q29udHJvbC5TaXplIC0gc2l6ZW9mIChDb250cm9sKTsNCj4+LSAgICBzd2l0Y2ggKENvbnRyb2wu VHlwZSkgew0KPj4tICAgIGNhc2UgRUZJX1VTRVJfSU5GT19BQ0NFU1NfRU5ST0xMX1NFTEY6DQo+ Pi0gICAgICBtQWNjZXNzSW5mby5BY2Nlc3NSaWdodCA9IEVGSV9VU0VSX0lORk9fQUNDRVNTX0VO Uk9MTF9TRUxGOw0KPj4tICAgICAgYnJlYWs7DQo+Pi0NCj4+LSAgICBjYXNlIEVGSV9VU0VSX0lO Rk9fQUNDRVNTX0VOUk9MTF9PVEhFUlM6DQo+Pi0gICAgICBtQWNjZXNzSW5mby5BY2Nlc3NSaWdo dCA9IEVGSV9VU0VSX0lORk9fQUNDRVNTX0VOUk9MTF9PVEhFUlM7DQo+Pi0gICAgICBicmVhazsN Cj4+LQ0KPj4tICAgIGNhc2UgRUZJX1VTRVJfSU5GT19BQ0NFU1NfTUFOQUdFOg0KPj4tICAgICAg bUFjY2Vzc0luZm8uQWNjZXNzUmlnaHQgPSBFRklfVVNFUl9JTkZPX0FDQ0VTU19NQU5BR0U7DQo+ Pi0gICAgICBicmVhazsNCj4+LQ0KPj4tICAgIGNhc2UgRUZJX1VTRVJfSU5GT19BQ0NFU1NfU0VU VVA6DQo+Pi0gICAgICBBY2Nlc3NEYXRhID0gbVVzZXJJbmZvLkFjY2Vzc1BvbGljeSArIE9mZlNl dCArIHNpemVvZiAoQ29udHJvbCk7DQo+Pi0gICAgICBpZiAoQ29tcGFyZUd1aWQgKChFRklfR1VJ RCAqKSBBY2Nlc3NEYXRhLA0KPj4mZ0VmaVVzZXJJbmZvQWNjZXNzU2V0dXBOb3JtYWxHdWlkKSkg ew0KPj4tICAgICAgICBtQWNjZXNzSW5mby5BY2Nlc3NTZXR1cCA9IEFDQ0VTU19TRVRVUF9OT1JN QUw7DQo+Pi0gICAgICB9IGVsc2UgaWYgKENvbXBhcmVHdWlkICgoRUZJX0dVSUQgKikgQWNjZXNz RGF0YSwNCj4+JmdFZmlVc2VySW5mb0FjY2Vzc1NldHVwUmVzdHJpY3RlZEd1aWQpKSB7DQo+Pi0g ICAgICAgIG1BY2Nlc3NJbmZvLkFjY2Vzc1NldHVwID0gQUNDRVNTX1NFVFVQX1JFU1RSSUNURUQ7 DQo+Pi0gICAgICB9IGVsc2UgaWYgKENvbXBhcmVHdWlkICgoRUZJX0dVSUQgKikgQWNjZXNzRGF0 YSwNCj4+JmdFZmlVc2VySW5mb0FjY2Vzc1NldHVwQWRtaW5HdWlkKSkgew0KPj4tICAgICAgICBt QWNjZXNzSW5mby5BY2Nlc3NTZXR1cCA9IEFDQ0VTU19TRVRVUF9BRE1JTjsNCj4+LSAgICAgIH0N Cj4+LSAgICAgIGJyZWFrOw0KPj4tDQo+Pi0gICAgY2FzZSBFRklfVVNFUl9JTkZPX0FDQ0VTU19C T09UX09SREVSOg0KPj4tICAgICAgQWNjZXNzRGF0YSA9IG1Vc2VySW5mby5BY2Nlc3NQb2xpY3kg KyBPZmZTZXQgKyBzaXplb2YgKENvbnRyb2wpOw0KPj4tICAgICAgQ29weU1lbSAoJm1BY2Nlc3NJ bmZvLkFjY2Vzc0Jvb3RPcmRlciwgQWNjZXNzRGF0YSwgc2l6ZW9mDQo+KFVJTlQzMikpOw0KPj4t ICAgICAgYnJlYWs7DQo+Pi0NCj4+LSAgICBjYXNlIEVGSV9VU0VSX0lORk9fQUNDRVNTX0ZPUkJJ RF9MT0FEOg0KPj4tICAgICAgaWYgKG1BY2Nlc3NJbmZvLkxvYWRGb3JiaWQgIT0gTlVMTCkgew0K Pj4tICAgICAgICBGcmVlUG9vbCAobUFjY2Vzc0luZm8uTG9hZEZvcmJpZCk7DQo+Pi0gICAgICB9 DQo+Pi0NCj4+LSAgICAgIG1BY2Nlc3NJbmZvLkxvYWRGb3JiaWQgPSBBbGxvY2F0ZVplcm9Qb29s IChWYWxMZW4pOw0KPj4tICAgICAgaWYgKG1BY2Nlc3NJbmZvLkxvYWRGb3JiaWQgIT0gTlVMTCkg ew0KPj4tICAgICAgICBBY2Nlc3NEYXRhID0gbVVzZXJJbmZvLkFjY2Vzc1BvbGljeSArIE9mZlNl dCArIHNpemVvZiAoQ29udHJvbCk7DQo+Pi0gICAgICAgIENvcHlNZW0gKG1BY2Nlc3NJbmZvLkxv YWRGb3JiaWQsIEFjY2Vzc0RhdGEsIFZhbExlbik7DQo+Pi0gICAgICAgIG1BY2Nlc3NJbmZvLkxv YWRGb3JiaWRMZW4gPSBWYWxMZW47DQo+Pi0gICAgICB9DQo+Pi0gICAgICBicmVhazsNCj4+LQ0K Pj4tICAgIGNhc2UgRUZJX1VTRVJfSU5GT19BQ0NFU1NfUEVSTUlUX0xPQUQ6DQo+Pi0gICAgICBp ZiAobUFjY2Vzc0luZm8uTG9hZFBlcm1pdCAhPSBOVUxMKSB7DQo+Pi0gICAgICAgIEZyZWVQb29s IChtQWNjZXNzSW5mby5Mb2FkUGVybWl0KTsNCj4+LSAgICAgIH0NCj4+LQ0KPj4tICAgICAgbUFj Y2Vzc0luZm8uTG9hZFBlcm1pdCA9IEFsbG9jYXRlWmVyb1Bvb2wgKFZhbExlbik7DQo+Pi0gICAg ICBpZiAobUFjY2Vzc0luZm8uTG9hZFBlcm1pdCAhPSBOVUxMKSB7DQo+Pi0gICAgICAgIEFjY2Vz c0RhdGEgPSBtVXNlckluZm8uQWNjZXNzUG9saWN5ICsgT2ZmU2V0ICsgc2l6ZW9mIChDb250cm9s KTsNCj4+LSAgICAgICAgQ29weU1lbSAobUFjY2Vzc0luZm8uTG9hZFBlcm1pdCwgQWNjZXNzRGF0 YSwgVmFsTGVuKTsNCj4+LSAgICAgICAgbUFjY2Vzc0luZm8uTG9hZFBlcm1pdExlbiA9IFZhbExl bjsNCj4+LSAgICAgIH0NCj4+LSAgICAgIGJyZWFrOw0KPj4tDQo+Pi0gICAgY2FzZSBFRklfVVNF Ul9JTkZPX0FDQ0VTU19GT1JCSURfQ09OTkVDVDoNCj4+LSAgICAgIGlmIChtQWNjZXNzSW5mby5D b25uZWN0Rm9yYmlkICE9IE5VTEwpIHsNCj4+LSAgICAgICAgRnJlZVBvb2wgKG1BY2Nlc3NJbmZv LkNvbm5lY3RGb3JiaWQpOw0KPj4tICAgICAgfQ0KPj4tDQo+Pi0gICAgICBtQWNjZXNzSW5mby5D b25uZWN0Rm9yYmlkID0gQWxsb2NhdGVaZXJvUG9vbCAoVmFsTGVuKTsNCj4+LSAgICAgIGlmICht QWNjZXNzSW5mby5Db25uZWN0Rm9yYmlkICE9IE5VTEwpIHsNCj4+LSAgICAgICAgQWNjZXNzRGF0 YSA9IG1Vc2VySW5mby5BY2Nlc3NQb2xpY3kgKyBPZmZTZXQgKyBzaXplb2YgKENvbnRyb2wpOw0K Pj4tICAgICAgICBDb3B5TWVtIChtQWNjZXNzSW5mby5Db25uZWN0Rm9yYmlkLCBBY2Nlc3NEYXRh LCBWYWxMZW4pOw0KPj4tICAgICAgICBtQWNjZXNzSW5mby5Db25uZWN0Rm9yYmlkTGVuID0gVmFs TGVuOw0KPj4tICAgICAgfQ0KPj4tICAgICAgYnJlYWs7DQo+Pi0NCj4+LSAgICBjYXNlIEVGSV9V U0VSX0lORk9fQUNDRVNTX1BFUk1JVF9DT05ORUNUOg0KPj4tICAgICAgaWYgKG1BY2Nlc3NJbmZv LkNvbm5lY3RQZXJtaXQgIT0gTlVMTCkgew0KPj4tICAgICAgICBGcmVlUG9vbCAobUFjY2Vzc0lu Zm8uQ29ubmVjdFBlcm1pdCk7DQo+Pi0gICAgICB9DQo+Pi0NCj4+LSAgICAgIG1BY2Nlc3NJbmZv LkNvbm5lY3RQZXJtaXQgPSBBbGxvY2F0ZVplcm9Qb29sIChWYWxMZW4pOw0KPj4tICAgICAgaWYg KG1BY2Nlc3NJbmZvLkNvbm5lY3RQZXJtaXQgIT0gTlVMTCkgew0KPj4tICAgICAgICBBY2Nlc3NE YXRhID0gbVVzZXJJbmZvLkFjY2Vzc1BvbGljeSArIE9mZlNldCArIHNpemVvZiAoQ29udHJvbCk7 DQo+Pi0gICAgICAgIENvcHlNZW0gKG1BY2Nlc3NJbmZvLkNvbm5lY3RQZXJtaXQsIEFjY2Vzc0Rh dGEsIFZhbExlbik7DQo+Pi0gICAgICAgIG1BY2Nlc3NJbmZvLkNvbm5lY3RQZXJtaXRMZW4gPSBW YWxMZW47DQo+Pi0gICAgICB9DQo+Pi0gICAgICBicmVhazsNCj4+LSAgICB9DQo+Pi0NCj4+LSAg ICBPZmZTZXQgKz0gQ29udHJvbC5TaXplOw0KPj4tICB9DQo+Pi19DQo+Pi0NCj4+LQ0KPj4tLyoq DQo+Pi0gIEZpbmQgdGhlIHNwZWNpZmllZCBpbmZvIGluIFVzZXIgcHJvZmlsZSBieSB0aGUgSW5m b1R5cGUuDQo+Pi0NCj4+LSAgQHBhcmFtW2luXSAgVXNlciAgICAgICAgIEhhbmRsZSBvZiB0aGUg dXNlciB3aG9zZSBpbmZvcm1hdGlvbiB3aWxsIGJlDQo+PnNlYXJjaGVkLg0KPj4tICBAcGFyYW1b aW5dICBJbmZvVHlwZSAgICAgVGhlIHVzZXIgaW5mb3JtYXRpb24gdHlwZSB0byBmaW5kLg0KPj4t ICBAcGFyYW1bb3V0XSBVc2VySW5mbyAgICAgUG9pbnRzIHRvIHVzZXIgaW5mb3JtYXRpb24gaGFu ZGxlIGZvdW5kLg0KPj4tDQo+Pi0gIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICBGaW5kIHRoZSB1 c2VyIGluZm9ybWF0aW9uIHN1Y2Nlc3NmdWxseS4NCj4+LSAgQHJldHZhbCBPdGhlcnMgICAgICAg ICAgIEZhaWwgdG8gZmluZCB0aGUgdXNlciBpbmZvcm1hdGlvbi4NCj4+LQ0KPj4tKiovDQo+Pi1F RklfU1RBVFVTDQo+Pi1GaW5kSW5mb0J5VHlwZSAoDQo+Pi0gIElOICBFRklfVVNFUl9QUk9GSUxF X0hBTkRMRSAgICAgICAgICAgICAgICAgICBVc2VyLA0KPj4tICBJTiAgVUlOVDggICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5mb1R5cGUsDQo+Pi0gIE9VVCBFRklfVVNFUl9J TkZPX0hBTkRMRSAgICAgICAgICAgICAgICAgICAgICAqVXNlckluZm8NCj4+LSAgKQ0KPj4tew0K Pj4tICBFRklfU1RBVFVTICAgIFN0YXR1czsNCj4+LSAgRUZJX1VTRVJfSU5GTyAqSW5mbzsNCj4+ LSAgVUlOVE4gICAgICAgICBJbmZvU2l6ZTsNCj4+LSAgVUlOVE4gICAgICAgICBNZW1TaXplOw0K Pj4tDQo+Pi0gIGlmIChVc2VySW5mbyA9PSBOVUxMKSB7DQo+Pi0gICAgcmV0dXJuIEVGSV9JTlZB TElEX1BBUkFNRVRFUjsNCj4+LSAgfQ0KPj4tDQo+Pi0gICpVc2VySW5mbyA9IE5VTEw7DQo+Pi0g IC8vDQo+Pi0gIC8vIEFsbG9jYXRlIHVzZXIgaW5mb3JtYXRpb24gbWVtb3J5Lg0KPj4tICAvLw0K Pj4tICBNZW1TaXplID0gc2l6ZW9mIChFRklfVVNFUl9JTkZPKSArIDYzOw0KPj4tICBJbmZvICAg ID0gQWxsb2NhdGVaZXJvUG9vbCAoTWVtU2l6ZSk7DQo+Pi0gIGlmIChJbmZvID09IE5VTEwpIHsN Cj4+LSAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+Pi0gIH0NCj4+LQ0KPj4tICAv Lw0KPj4tICAvLyBHZXQgZWFjaCB1c2VyIGluZm9ybWF0aW9uLg0KPj4tICAvLw0KPj4tICB3aGls ZSAoVFJVRSkgew0KPj4tICAgIFN0YXR1cyA9IG1Vc2VyTWFuYWdlci0+R2V0TmV4dEluZm8gKG1V c2VyTWFuYWdlciwgVXNlciwgVXNlckluZm8pOw0KPj4tICAgIGlmIChFRklfRVJST1IgKFN0YXR1 cykpIHsNCj4+LSAgICAgIGJyZWFrOw0KPj4tICAgIH0NCj4+LSAgICAvLw0KPj4tICAgIC8vIEdl dCBpbmZvcm1hdGlvbi4NCj4+LSAgICAvLw0KPj4tICAgIEluZm9TaXplICA9IE1lbVNpemU7DQo+ Pi0gICAgU3RhdHVzICAgID0gbVVzZXJNYW5hZ2VyLT5HZXRJbmZvICgNCj4+LSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbVVzZXJNYW5hZ2VyLA0KPj4tICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBVc2VyLA0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAq VXNlckluZm8sDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZm8sDQo+Pi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZJbmZvU2l6ZQ0KPj4tICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICApOw0KPj4tICAgIGlmIChTdGF0dXMgPT0gRUZJX0JVRkZFUl9U T09fU01BTEwpIHsNCj4+LSAgICAgIE1lbVNpemUgPSBJbmZvU2l6ZTsNCj4+LSAgICAgIEZyZWVQ b29sIChJbmZvKTsNCj4+LSAgICAgIEluZm8gPSBBbGxvY2F0ZVplcm9Qb29sIChNZW1TaXplKTsN Cj4+LSAgICAgIGlmIChJbmZvID09IE5VTEwpIHsNCj4+LSAgICAgICAgcmV0dXJuIEVGSV9PVVRf T0ZfUkVTT1VSQ0VTOw0KPj4tICAgICAgfQ0KPj4tICAgICAgU3RhdHVzID0gbVVzZXJNYW5hZ2Vy LT5HZXRJbmZvICgNCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlck1hbmFn ZXIsDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlciwNCj4+LSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAqVXNlckluZm8sDQo+Pi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgSW5mbywNCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmSW5m b1NpemUNCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KPj4tICAgIH0NCj4+ LSAgICBpZiAoU3RhdHVzID09IEVGSV9TVUNDRVNTKSB7DQo+Pi0gICAgICBpZiAoSW5mby0+SW5m b1R5cGUgPT0gSW5mb1R5cGUpIHsNCj4+LSAgICAgICAgYnJlYWs7DQo+Pi0gICAgICB9DQo+Pi0g ICAgfQ0KPj4tICB9DQo+Pi0NCj4+LSAgRnJlZVBvb2wgKEluZm8pOw0KPj4tICByZXR1cm4gU3Rh dHVzOw0KPj4tfQ0KPj4tDQo+Pi0NCj4+LS8qKg0KPj4tICBEaXNwbGF5IG1vZGlmeSB1c2VyIGFj Y2VzcyBwb2xpY3kgZm9ybS4NCj4+LQ0KPj4tICBJbiB0aGlzIGZvcm0sIGFjY2VzcyByaWdodCwg YWNjZXNzIHNldHVwIGFuZCBhY2Nlc3MgYm9vdCBvcmRlciBhcmUNCj5keW5hbWljYWxseQ0KPj4t ICBhZGRlZC4gTG9hZCBkZXZpY2VwYXRoIGFuZCBjb25uZWN0IGRldmljZXBhdGggYXJlIGRpc3Bs YXllZCB0b28uDQo+Pi0NCj4+LSoqLw0KPj4tVk9JRA0KPj4tTW9kaWR5QWNjZXNzUG9saWN5ICgN Cj4+LSAgVk9JRA0KPj4tICApDQo+Pi17DQo+Pi0gIFZPSUQgICAgICAgICAgICAgICAgKlN0YXJ0 T3BDb2RlSGFuZGxlOw0KPj4tICBWT0lEICAgICAgICAgICAgICAgICpFbmRPcENvZGVIYW5kbGU7 DQo+Pi0gIFZPSUQgICAgICAgICAgICAgICAgKk9wdGlvbnNPcENvZGVIYW5kbGU7DQo+Pi0gIEVG SV9JRlJfR1VJRF9MQUJFTCAgKlN0YXJ0TGFiZWw7DQo+Pi0gIEVGSV9JRlJfR1VJRF9MQUJFTCAg KkVuZExhYmVsOw0KPj4tICBWT0lEICAgICAgICAgICAgICAgICpEZWZhdWx0T3BDb2RlSGFuZGxl Ow0KPj4tDQo+Pi0gIC8vDQo+Pi0gIC8vIEluaXRpYWxpemUgdGhlIGNvbnRhaW5lciBmb3IgZHlu YW1pYyBvcGNvZGVzLg0KPj4tICAvLw0KPj4tICBTdGFydE9wQ29kZUhhbmRsZSA9IEhpaUFsbG9j YXRlT3BDb2RlSGFuZGxlICgpOw0KPj4tICBBU1NFUlQgKFN0YXJ0T3BDb2RlSGFuZGxlICE9IE5V TEwpOw0KPj4tDQo+Pi0gIEVuZE9wQ29kZUhhbmRsZSA9IEhpaUFsbG9jYXRlT3BDb2RlSGFuZGxl ICgpOw0KPj4tICBBU1NFUlQgKEVuZE9wQ29kZUhhbmRsZSAhPSBOVUxMKTsNCj4+LQ0KPj4tICAv Lw0KPj4tICAvLyBDcmVhdGUgSGlpIEV4dGVuZCBMYWJlbCBPcENvZGUuDQo+Pi0gIC8vDQo+Pi0g IFN0YXJ0TGFiZWwgPSAoRUZJX0lGUl9HVUlEX0xBQkVMICopIEhpaUNyZWF0ZUd1aWRPcENvZGUg KA0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0T3BDb2Rl SGFuZGxlLA0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZnRWZp SWZyVGlhbm9HdWlkLA0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IE5VTEwsDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9m IChFRklfSUZSX0dVSURfTEFCRUwpDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKTsNCj4+LSAgU3RhcnRMYWJlbC0+RXh0ZW5kT3BDb2RlICA9IEVGSV9JRlJfRVhU RU5EX09QX0xBQkVMOw0KPj4tICBTdGFydExhYmVsLT5OdW1iZXIgICAgICAgID0gTEFCRUxfQVBf TU9EX0ZVTkM7DQo+Pi0NCj4+LSAgRW5kTGFiZWwgPSAoRUZJX0lGUl9HVUlEX0xBQkVMICopIEhp aUNyZWF0ZUd1aWRPcENvZGUgKA0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBFbmRPcENvZGVIYW5kbGUsDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICZnRWZpSWZyVGlhbm9HdWlkLA0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBOVUxMLA0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzaXplb2YgKEVGSV9JRlJfR1VJRF9MQUJFTCkNCj4+LSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKTsNCj4+LSAgRW5kTGFiZWwtPkV4dGVuZE9wQ29kZSAgPSBFRklfSUZS X0VYVEVORF9PUF9MQUJFTDsNCj4+LSAgRW5kTGFiZWwtPk51bWJlciAgICAgICAgPSBMQUJFTF9F TkQ7DQo+Pi0NCj4+LQ0KPj4tICAvLw0KPj4tICAvLyBSZXNvbHZlIGFjY2VzcyBwb2xpY3kgaW5m b3JtYXRpb24uDQo+Pi0gIC8vDQo+Pi0gIFJlc29sdmVBY2Nlc3NQb2xpY3kgKCk7DQo+Pi0NCj4+ LSAgLy8NCj4+LSAgLy8gQWRkIGFjY2VzcyByaWdodCBvbmUtb2YtY29kZS4NCj4+LSAgLy8NCj4+ LSAgT3B0aW9uc09wQ29kZUhhbmRsZSA9IEhpaUFsbG9jYXRlT3BDb2RlSGFuZGxlICgpOw0KPj4t ICBBU1NFUlQgKE9wdGlvbnNPcENvZGVIYW5kbGUgIT0gTlVMTCk7DQo+Pi0gIERlZmF1bHRPcENv ZGVIYW5kbGUgPSBIaWlBbGxvY2F0ZU9wQ29kZUhhbmRsZSAoKTsNCj4+LSAgQVNTRVJUIChEZWZh dWx0T3BDb2RlSGFuZGxlICE9IE5VTEwpOw0KPj4tDQo+Pi0gIEhpaUNyZWF0ZU9uZU9mT3B0aW9u T3BDb2RlICgNCj4+LSAgICBPcHRpb25zT3BDb2RlSGFuZGxlLA0KPj4tICAgIFNUUklOR19UT0tF TiAoU1RSX05PUk1BTCksDQo+Pi0gICAgMCwNCj4+LSAgICBFRklfSUZSX05VTUVSSUNfU0laRV8x LA0KPj4tICAgIEVGSV9VU0VSX0lORk9fQUNDRVNTX0VOUk9MTF9TRUxGDQo+Pi0gICAgKTsNCj4+ LQ0KPj4tICBIaWlDcmVhdGVPbmVPZk9wdGlvbk9wQ29kZSAoDQo+Pi0gICAgT3B0aW9uc09wQ29k ZUhhbmRsZSwNCj4+LSAgICBTVFJJTkdfVE9LRU4gKFNUUl9FTlJPTEwpLA0KPj4tICAgIDAsDQo+ Pi0gICAgRUZJX0lGUl9OVU1FUklDX1NJWkVfMSwNCj4+LSAgICBFRklfVVNFUl9JTkZPX0FDQ0VT U19FTlJPTExfT1RIRVJTDQo+Pi0gICAgKTsNCj4+LQ0KPj4tICBIaWlDcmVhdGVPbmVPZk9wdGlv bk9wQ29kZSAoDQo+Pi0gICAgT3B0aW9uc09wQ29kZUhhbmRsZSwNCj4+LSAgICBTVFJJTkdfVE9L RU4gKFNUUl9NQU5BR0UpLA0KPj4tICAgIDAsDQo+Pi0gICAgRUZJX0lGUl9OVU1FUklDX1NJWkVf MSwNCj4+LSAgICBFRklfVVNFUl9JTkZPX0FDQ0VTU19NQU5BR0UNCj4+LSAgICApOw0KPj4tDQo+ Pi0gIEhpaUNyZWF0ZURlZmF1bHRPcENvZGUgKA0KPj4tICAgIERlZmF1bHRPcENvZGVIYW5kbGUs DQo+Pi0gICAgRUZJX0hJSV9ERUZBVUxUX0NMQVNTX1NUQU5EQVJELA0KPj4tICAgIEVGSV9JRlJf TlVNRVJJQ19TSVpFXzEsDQo+Pi0gICAgbUFjY2Vzc0luZm8uQWNjZXNzUmlnaHQNCj4+LSAgICAp Ow0KPj4tDQo+Pi0gIEhpaUNyZWF0ZU9uZU9mT3BDb2RlICgNCj4+LSAgICBTdGFydE9wQ29kZUhh bmRsZSwgICAgICAgICAgICAgICAgICAgIC8vIENvbnRhaW5lciBmb3IgZHluYW1pYyBjcmVhdGVk IG9wY29kZXMNCj4+LSAgICBLRVlfTU9ESUZZX1VTRVIgfCBLRVlfU0VMRUNUX1VTRVIgfCBLRVlf TU9ESUZZX0FQIHwNCj4+S0VZX01PRElGWV9SSUdIVCwgLy8gUXVlc3Rpb24gSUQNCj4+LSAgICAw LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFZhclN0b3JlIElEDQo+Pi0g ICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBPZmZzZXQgaW4gQnVm ZmVyIFN0b3JhZ2UNCj4+LSAgICBTVFJJTkdfVE9LRU4gKFNUUl9BQ0NFU1NfUklHSFQpLCAgICAg IC8vIFF1ZXN0aW9uIHByb21wdCB0ZXh0DQo+Pi0gICAgU1RSSU5HX1RPS0VOIChTVFJfQUNDRVNT X1JJR0hUX0hFTFApLCAvLyBRdWVzdGlvbiBoZWxwIHRleHQNCj4+LSAgICBFRklfSUZSX0ZMQUdf Q0FMTEJBQ0ssICAgICAgICAgICAgICAgIC8vIFF1ZXN0aW9uIGZsYWcNCj4+LSAgICBFRklfSUZS X05VTUVSSUNfU0laRV8xLCAgICAgICAgICAgICAgIC8vIERhdGEgdHlwZSBvZiBRdWVzdGlvbiBW YWx1ZQ0KPj4tICAgIE9wdGlvbnNPcENvZGVIYW5kbGUsICAgICAgICAgICAgICAgICAgLy8gT3B0 aW9uIE9wY29kZSBsaXN0DQo+Pi0gICAgRGVmYXVsdE9wQ29kZUhhbmRsZSAgICAgICAgICAgICAg ICAgICAvLyBEZWZhdWx0IE9wY29kZQ0KPj4tICAgICk7DQo+Pi0gIEhpaUZyZWVPcENvZGVIYW5k bGUgKERlZmF1bHRPcENvZGVIYW5kbGUpOw0KPj4tICBIaWlGcmVlT3BDb2RlSGFuZGxlIChPcHRp b25zT3BDb2RlSGFuZGxlKTsNCj4+LQ0KPj4tDQo+Pi0gIC8vDQo+Pi0gIC8vIEFkZCBzZXR1cCB0 eXBlIG9uZS1vZi1jb2RlLg0KPj4tICAvLw0KPj4tICBPcHRpb25zT3BDb2RlSGFuZGxlID0gSGlp QWxsb2NhdGVPcENvZGVIYW5kbGUgKCk7DQo+Pi0gIEFTU0VSVCAoT3B0aW9uc09wQ29kZUhhbmRs ZSAhPSBOVUxMKTsNCj4+LSAgRGVmYXVsdE9wQ29kZUhhbmRsZSA9IEhpaUFsbG9jYXRlT3BDb2Rl SGFuZGxlICgpOw0KPj4tICBBU1NFUlQgKERlZmF1bHRPcENvZGVIYW5kbGUgIT0gTlVMTCk7DQo+ Pi0NCj4+LSAgSGlpQ3JlYXRlT25lT2ZPcHRpb25PcENvZGUgKA0KPj4tICAgIE9wdGlvbnNPcENv ZGVIYW5kbGUsDQo+Pi0gICAgU1RSSU5HX1RPS0VOIChTVFJfUkVTVFJJQ1RFRCksDQo+Pi0gICAg MCwNCj4+LSAgICBFRklfSUZSX05VTUVSSUNfU0laRV8xLA0KPj4tICAgIEFDQ0VTU19TRVRVUF9S RVNUUklDVEVEDQo+Pi0gICAgKTsNCj4+LQ0KPj4tICBIaWlDcmVhdGVPbmVPZk9wdGlvbk9wQ29k ZSAoDQo+Pi0gICAgT3B0aW9uc09wQ29kZUhhbmRsZSwNCj4+LSAgICBTVFJJTkdfVE9LRU4gKFNU Ul9OT1JNQUwpLA0KPj4tICAgIDAsDQo+Pi0gICAgRUZJX0lGUl9OVU1FUklDX1NJWkVfMSwNCj4+ LSAgICBBQ0NFU1NfU0VUVVBfTk9STUFMDQo+Pi0gICAgKTsNCj4+LQ0KPj4tICBIaWlDcmVhdGVP bmVPZk9wdGlvbk9wQ29kZSAoDQo+Pi0gICAgT3B0aW9uc09wQ29kZUhhbmRsZSwNCj4+LSAgICBT VFJJTkdfVE9LRU4gKFNUUl9BRE1JTiksDQo+Pi0gICAgMCwNCj4+LSAgICBFRklfSUZSX05VTUVS SUNfU0laRV8xLA0KPj4tICAgIEFDQ0VTU19TRVRVUF9BRE1JTg0KPj4tICAgICk7DQo+Pi0NCj4+ LSAgSGlpQ3JlYXRlRGVmYXVsdE9wQ29kZSAoDQo+Pi0gICAgRGVmYXVsdE9wQ29kZUhhbmRsZSwN Cj4+LSAgICBFRklfSElJX0RFRkFVTFRfQ0xBU1NfU1RBTkRBUkQsDQo+Pi0gICAgRUZJX0lGUl9O VU1FUklDX1NJWkVfMSwNCj4+LSAgICBtQWNjZXNzSW5mby5BY2Nlc3NTZXR1cA0KPj4tICAgICk7 DQo+Pi0NCj4+LSAgSGlpQ3JlYXRlT25lT2ZPcENvZGUgKA0KPj4tICAgIFN0YXJ0T3BDb2RlSGFu ZGxlLCAgICAgICAgICAgICAgICAgICAgLy8gQ29udGFpbmVyIGZvciBkeW5hbWljIGNyZWF0ZWQg b3Bjb2Rlcw0KPj4tICAgIEtFWV9NT0RJRllfVVNFUiB8IEtFWV9TRUxFQ1RfVVNFUiB8IEtFWV9N T0RJRllfQVAgfA0KPj5LRVlfTU9ESUZZX1NFVFVQLCAvLyBRdWVzdGlvbiBJRA0KPj4tICAgIDAs ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVmFyU3RvcmUgSUQNCj4+LSAg ICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9mZnNldCBpbiBCdWZm ZXIgU3RvcmFnZQ0KPj4tICAgIFNUUklOR19UT0tFTiAoU1RSX0FDQ0VTU19TRVRVUCksICAgICAg Ly8gUXVlc3Rpb24gcHJvbXB0IHRleHQNCj4+LSAgICBTVFJJTkdfVE9LRU4gKFNUUl9BQ0NFU1Nf U0VUVVBfSEVMUCksIC8vIFF1ZXN0aW9uIGhlbHAgdGV4dA0KPj4tICAgIEVGSV9JRlJfRkxBR19D QUxMQkFDSywgICAgICAgICAgICAgICAgLy8gUXVlc3Rpb24gZmxhZw0KPj4tICAgIEVGSV9JRlJf TlVNRVJJQ19TSVpFXzEsICAgICAgICAgICAgICAgLy8gRGF0YSB0eXBlIG9mIFF1ZXN0aW9uIFZh bHVlDQo+Pi0gICAgT3B0aW9uc09wQ29kZUhhbmRsZSwgICAgICAgICAgICAgICAgICAvLyBPcHRp b24gT3Bjb2RlIGxpc3QNCj4+LSAgICBEZWZhdWx0T3BDb2RlSGFuZGxlICAgICAgICAgICAgICAg ICAgIC8vIERlZmF1bHQgT3Bjb2RlDQo+Pi0gICAgKTsNCj4+LSAgSGlpRnJlZU9wQ29kZUhhbmRs ZSAoRGVmYXVsdE9wQ29kZUhhbmRsZSk7DQo+Pi0gIEhpaUZyZWVPcENvZGVIYW5kbGUgKE9wdGlv bnNPcENvZGVIYW5kbGUpOw0KPj4tDQo+Pi0gIC8vDQo+Pi0gIC8vIEFkZCBib290IG9yZGVyIG9u ZS1vZi1jb2RlLg0KPj4tICAvLw0KPj4tICBPcHRpb25zT3BDb2RlSGFuZGxlID0gSGlpQWxsb2Nh dGVPcENvZGVIYW5kbGUgKCk7DQo+Pi0gIEFTU0VSVCAoT3B0aW9uc09wQ29kZUhhbmRsZSAhPSBO VUxMKTsNCj4+LSAgRGVmYXVsdE9wQ29kZUhhbmRsZSA9IEhpaUFsbG9jYXRlT3BDb2RlSGFuZGxl ICgpOw0KPj4tICBBU1NFUlQgKERlZmF1bHRPcENvZGVIYW5kbGUgIT0gTlVMTCk7DQo+Pi0NCj4+ LSAgSGlpQ3JlYXRlT25lT2ZPcHRpb25PcENvZGUgKA0KPj4tICAgIE9wdGlvbnNPcENvZGVIYW5k bGUsDQo+Pi0gICAgU1RSSU5HX1RPS0VOIChTVFJfSU5TRVJUKSwNCj4+LSAgICAwLA0KPj4tICAg IEVGSV9JRlJfTlVNRVJJQ19TSVpFXzQsDQo+Pi0gICAgRUZJX1VTRVJfSU5GT19BQ0NFU1NfQk9P VF9PUkRFUl9JTlNFUlQNCj4+LSAgICApOw0KPj4tDQo+Pi0gIEhpaUNyZWF0ZU9uZU9mT3B0aW9u T3BDb2RlICgNCj4+LSAgICBPcHRpb25zT3BDb2RlSGFuZGxlLA0KPj4tICAgIFNUUklOR19UT0tF TiAoU1RSX0FQUEVORCksDQo+Pi0gICAgMCwNCj4+LSAgICBFRklfSUZSX05VTUVSSUNfU0laRV80 LA0KPj4tICAgIEVGSV9VU0VSX0lORk9fQUNDRVNTX0JPT1RfT1JERVJfQVBQRU5EDQo+Pi0gICAg KTsNCj4+LQ0KPj4tICBIaWlDcmVhdGVPbmVPZk9wdGlvbk9wQ29kZSAoDQo+Pi0gICAgT3B0aW9u c09wQ29kZUhhbmRsZSwNCj4+LSAgICBTVFJJTkdfVE9LRU4gKFNUUl9SRVBMQUNFKSwNCj4+LSAg ICAwLA0KPj4tICAgIEVGSV9JRlJfTlVNRVJJQ19TSVpFXzQsDQo+Pi0gICAgRUZJX1VTRVJfSU5G T19BQ0NFU1NfQk9PVF9PUkRFUl9SRVBMQUNFDQo+Pi0gICAgKTsNCj4+LQ0KPj4tICBIaWlDcmVh dGVPbmVPZk9wdGlvbk9wQ29kZSAoDQo+Pi0gICAgT3B0aW9uc09wQ29kZUhhbmRsZSwNCj4+LSAg ICBTVFJJTkdfVE9LRU4gKFNUUl9OT0RFRkFVTFQpLA0KPj4tICAgIDAsDQo+Pi0gICAgRUZJX0lG Ul9OVU1FUklDX1NJWkVfNCwNCj4+LSAgICBFRklfVVNFUl9JTkZPX0FDQ0VTU19CT09UX09SREVS X05PREVGQVVMVA0KPj4tICAgICk7DQo+Pi0NCj4+LSAgSGlpQ3JlYXRlRGVmYXVsdE9wQ29kZSAo DQo+Pi0gICAgRGVmYXVsdE9wQ29kZUhhbmRsZSwNCj4+LSAgICBFRklfSElJX0RFRkFVTFRfQ0xB U1NfU1RBTkRBUkQsDQo+Pi0gICAgRUZJX0lGUl9OVU1FUklDX1NJWkVfNCwNCj4+LSAgICBtQWNj ZXNzSW5mby5BY2Nlc3NCb290T3JkZXINCj4+LSAgICApOw0KPj4tDQo+Pi0gIEhpaUNyZWF0ZU9u ZU9mT3BDb2RlICgNCj4+LSAgICBTdGFydE9wQ29kZUhhbmRsZSwgICAgICAgICAgICAgICAgICAv LyBDb250YWluZXIgZm9yIGR5bmFtaWMgY3JlYXRlZCBvcGNvZGVzDQo+Pi0gICAgS0VZX01PRElG WV9VU0VSIHwgS0VZX1NFTEVDVF9VU0VSIHwgS0VZX01PRElGWV9BUCB8DQo+PktFWV9NT0RJRllf Qk9PVCwgLy8gUXVlc3Rpb24gSUQNCj4+LSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvLyBWYXJTdG9yZSBJRA0KPj4tICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8vIE9mZnNldCBpbiBCdWZmZXIgU3RvcmFnZQ0KPj4tICAgIFNUUklOR19UT0tF TiAoU1RSX0JPT1JfT1JERVIpLCAgICAgIC8vIFF1ZXN0aW9uIHByb21wdCB0ZXh0DQo+Pi0gICAg U1RSSU5HX1RPS0VOIChTVFJfQk9PVF9PUkRFUl9IRUxQKSwgLy8gUXVlc3Rpb24gaGVscCB0ZXh0 DQo+Pi0gICAgRUZJX0lGUl9GTEFHX0NBTExCQUNLLCAgICAgICAgICAgICAgLy8gUXVlc3Rpb24g ZmxhZw0KPj4tICAgIEVGSV9JRlJfTlVNRVJJQ19TSVpFXzEsICAgICAgICAgICAgIC8vIERhdGEg dHlwZSBvZiBRdWVzdGlvbiBWYWx1ZQ0KPj4tICAgIE9wdGlvbnNPcENvZGVIYW5kbGUsICAgICAg ICAgICAgICAgIC8vIE9wdGlvbiBPcGNvZGUgbGlzdA0KPj4tICAgIERlZmF1bHRPcENvZGVIYW5k bGUgICAgICAgICAgICAgICAgIC8vIERlZmF1bHQgT3Bjb2RlDQo+Pi0gICAgKTsNCj4+LSAgSGlp RnJlZU9wQ29kZUhhbmRsZSAoRGVmYXVsdE9wQ29kZUhhbmRsZSk7DQo+Pi0gIEhpaUZyZWVPcENv ZGVIYW5kbGUgKE9wdGlvbnNPcENvZGVIYW5kbGUpOw0KPj4tDQo+Pi0gIC8vDQo+Pi0gIC8vIFVw ZGF0ZSBGb3JtLg0KPj4tICAvLw0KPj4tICBIaWlVcGRhdGVGb3JtICgNCj4+LSAgICBtQ2FsbGJh Y2tJbmZvLT5IaWlIYW5kbGUsICAgICAgICAgICAvLyBISUkgaGFuZGxlDQo+Pi0gICAgJmdVc2Vy UHJvZmlsZU1hbmFnZXJHdWlkLCAgICAgICAgICAgLy8gRm9ybXNldCBHVUlEDQo+Pi0gICAgRk9S TUlEX01PRElGWV9BUCwgICAgICAgICAgICAgICAgICAgLy8gRm9ybSBJRA0KPj4tICAgIFN0YXJ0 T3BDb2RlSGFuZGxlLCAgICAgICAgICAgICAgICAgIC8vIExhYmVsIGZvciB3aGVyZSB0byBpbnNl cnQgb3Bjb2Rlcw0KPj4tICAgIEVuZE9wQ29kZUhhbmRsZSAgICAgICAgICAgICAgICAgICAgIC8v IFJlcGxhY2UgZGF0YQ0KPj4tICAgICk7DQo+Pi0NCj4+LSAgSGlpRnJlZU9wQ29kZUhhbmRsZSAo U3RhcnRPcENvZGVIYW5kbGUpOw0KPj4tICBIaWlGcmVlT3BDb2RlSGFuZGxlIChFbmRPcENvZGVI YW5kbGUpOw0KPj4tfQ0KPj4tDQo+Pi0NCj4+LS8qKg0KPj4tICBFeHBhbmQgYWNjZXNzIHBvbGlj eSBtZW1vcnkgc2l6ZS4NCj4+LQ0KPj4tICBAcGFyYW1baW5dIFZhbGlkTGVuICAgICAgIFRoZSB2 YWxpZCBhY2Nlc3MgcG9saWN5IGxlbmd0aC4NCj4+LSAgQHBhcmFtW2luXSBFeHBhbmRMZW4gICAg ICBUaGUgbGVuZ3RoIHRoYXQgaXMgbmVlZGVkIHRvIGV4cGFuZC4NCj4+LQ0KPj4tKiovDQo+Pi1W T0lEDQo+Pi1FeHBhbmRNZW1vcnkgKA0KPj4tICBJTiAgICAgIFVJTlROICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgVmFsaWRMZW4sDQo+Pi0gIElOICAgICAgVUlOVE4gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBFeHBhbmRMZW4NCj4+LSAgKQ0KPj4tew0KPj4tICBVSU5U OCAqTWVtOw0KPj4tICBVSU5UTiBMZW47DQo+Pi0NCj4+LSAgLy8NCj4+LSAgLy8gRXhwYW5kIG1l bW9yeS4NCj4+LSAgLy8NCj4+LSAgTGVuID0gbVVzZXJJbmZvLkFjY2Vzc1BvbGljeUxlbiArIChF eHBhbmRMZW4gLyA2NCArIDEpICogNjQ7DQo+Pi0gIE1lbSA9IEFsbG9jYXRlWmVyb1Bvb2wgKExl bik7DQo+Pi0gIEFTU0VSVCAoTWVtICE9IE5VTEwpOw0KPj4tDQo+Pi0gIGlmIChtVXNlckluZm8u QWNjZXNzUG9saWN5ICE9IE5VTEwpIHsNCj4+LSAgICBDb3B5TWVtIChNZW0sIG1Vc2VySW5mby5B Y2Nlc3NQb2xpY3ksIFZhbGlkTGVuKTsNCj4+LSAgICBGcmVlUG9vbCAobVVzZXJJbmZvLkFjY2Vz c1BvbGljeSk7DQo+Pi0gIH0NCj4+LQ0KPj4tICBtVXNlckluZm8uQWNjZXNzUG9saWN5ICAgID0g TWVtOw0KPj4tICBtVXNlckluZm8uQWNjZXNzUG9saWN5TGVuID0gTGVuOw0KPj4tfQ0KPj4tDQo+ Pi0NCj4+LS8qKg0KPj4tICBHZXQgdGhlIHVzZXJuYW1lIGZyb20gdXNlciBpbnB1dCwgYW5kIHVw ZGF0ZSB1c2VybmFtZSBzdHJpbmcgaW4gdGhlIEhpaQ0KPj4tICBkYXRhYmFzZSB3aXRoIGl0Lg0K Pj4tDQo+Pi0qKi8NCj4+LVZPSUQNCj4+LU1vZGlmeVVzZXJOYW1lICgNCj4+LSAgVk9JRA0KPj4t ICApDQo+Pi17DQo+Pi0gIEVGSV9TVEFUVVMgICAgICAgICAgICAgIFN0YXR1czsNCj4+LSAgQ0hB UjE2ICAgICAgICAgICAgICAgICAgVXNlck5hbWVbVVNFUl9OQU1FX0xFTkdUSF07DQo+Pi0gIFVJ TlROICAgICAgICAgICAgICAgICAgIExlbjsNCj4+LSAgRUZJX0lOUFVUX0tFWSAgICAgICAgICAg S2V5Ow0KPj4tICBFRklfVVNFUl9JTkZPX0hBTkRMRSAgICBVc2VySW5mbzsNCj4+LSAgRUZJX1VT RVJfSU5GTyAgICAgICAgICAgKkluZm87DQo+Pi0gIEVGSV9VU0VSX1BST0ZJTEVfSEFORExFIFRl bXBVc2VyOw0KPj4tDQo+Pi0gIC8vDQo+Pi0gIC8vIEdldCB0aGUgbmV3IHVzZXIgbmFtZS4NCj4+ LSAgLy8NCj4+LSAgTGVuID0gc2l6ZW9mIChVc2VyTmFtZSk7DQo+Pi0gIFN0YXR1cyA9IEdldFVz ZXJOYW1lSW5wdXQgKCZMZW4sIFVzZXJOYW1lKTsNCj4+LSAgaWYgKEVGSV9FUlJPUiAoU3RhdHVz KSkgew0KPj4tICAgIGlmIChTdGF0dXMgIT0gRUZJX0FCT1JURUQpIHsNCj4+LSAgICAgIENyZWF0 ZVBvcFVwICgNCj4+LSAgICAgICAgRUZJX0xJR0hUR1JBWSB8IEVGSV9CQUNLR1JPVU5EX0JMVUUs DQo+Pi0gICAgICAgICZLZXksDQo+Pi0gICAgICAgIEwiRmFpbGVkIFRvIEdldCBVc2VyIE5hbWUu IiwNCj4+LSAgICAgICAgTCIiLA0KPj4tICAgICAgICBMIlBsZWFzZSBQcmVzcyBBbnkgS2V5IHRv IENvbnRpbnVlIC4uLiIsDQo+Pi0gICAgICAgIE5VTEwNCj4+LSAgICAgICAgKTsNCj4+LSAgICB9 DQo+Pi0gICAgcmV0dXJuIDsNCj4+LSAgfQ0KPj4tDQo+Pi0gIC8vDQo+Pi0gIC8vIENoZWNrIHdo ZXRoZXIgdGhlIHVzZXJuYW1lIGhhZCBiZWVuIHVzZWQgb3Igbm90Lg0KPj4tICAvLw0KPj4tICBJ bmZvID0gQWxsb2NhdGVaZXJvUG9vbCAoc2l6ZW9mIChFRklfVVNFUl9JTkZPKSArIExlbik7DQo+ Pi0gIGlmIChJbmZvID09IE5VTEwpIHsNCj4+LSAgICByZXR1cm4gOw0KPj4tICB9DQo+Pi0NCj4+ LSAgSW5mby0+SW5mb1R5cGUgICAgPSBFRklfVVNFUl9JTkZPX05BTUVfUkVDT1JEOw0KPj4tICBJ bmZvLT5JbmZvQXR0cmlicyA9IEVGSV9VU0VSX0lORk9fU1RPUkFHRV9QTEFURk9STV9OViB8DQo+ Pi0gICAgICAgICAgICAgICAgICAgICAgRUZJX1VTRVJfSU5GT19QVUJMSUMgfA0KPj4tICAgICAg ICAgICAgICAgICAgICAgIEVGSV9VU0VSX0lORk9fRVhDTFVTSVZFOw0KPj4tICBJbmZvLT5JbmZv U2l6ZSAgICA9IChVSU5UMzIpIChzaXplb2YgKEVGSV9VU0VSX0lORk8pICsgTGVuKTsNCj4+LSAg Q29weU1lbSAoKFVJTlQ4ICopIChJbmZvICsgMSksIFVzZXJOYW1lLCBMZW4pOw0KPj4tDQo+Pi0g IFRlbXBVc2VyICA9IE5VTEw7DQo+Pi0gIFN0YXR1cyAgICA9IG1Vc2VyTWFuYWdlci0+RmluZCAo DQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlck1hbmFnZXIsDQo+Pi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAmVGVtcFVzZXIsDQo+Pi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBOVUxMLA0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5m bywNCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZm8tPkluZm9TaXplDQo+Pi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KPj4tICBpZiAoIUVGSV9FUlJPUiAoU3Rh dHVzKSkgew0KPj4tICAgIENyZWF0ZVBvcFVwICgNCj4+LSAgICAgIEVGSV9MSUdIVEdSQVkgfCBF RklfQkFDS0dST1VORF9CTFVFLA0KPj4tICAgICAgJktleSwNCj4+LSAgICAgIEwiVGhlIFVzZXIg TmFtZSBIYWQgQmVlbiBVc2VkLiIsDQo+Pi0gICAgICBMIiIsDQo+Pi0gICAgICBMIlBsZWFzZSBV c2UgT3RoZXIgVXNlciBOYW1lIiwNCj4+LSAgICAgIE5VTEwNCj4+LSAgICAgICk7DQo+Pi0gICAg RnJlZVBvb2wgKEluZm8pOw0KPj4tICAgIHJldHVybiA7DQo+Pi0gIH0NCj4+LQ0KPj4tICAvLw0K Pj4tICAvLyBVcGRhdGUgdXNlcm5hbWUgZGlzcGxheSBpbiB0aGUgZm9ybS4NCj4+LSAgLy8NCj4+ LSAgQ29weU1lbSAobVVzZXJJbmZvLlVzZXJOYW1lLCBVc2VyTmFtZSwgTGVuKTsNCj4+LSAgSGlp U2V0U3RyaW5nICgNCj4+LSAgICBtQ2FsbGJhY2tJbmZvLT5IaWlIYW5kbGUsDQo+Pi0gICAgU1RS SU5HX1RPS0VOIChTVFJfVVNFUl9OQU1FX1ZBTCksDQo+Pi0gICAgbVVzZXJJbmZvLlVzZXJOYW1l LA0KPj4tICAgIE5VTEwNCj4+LSAgICApOw0KPj4tDQo+Pi0gIC8vDQo+Pi0gIC8vIFNhdmUgdGhl IHVzZXIgbmFtZS4NCj4+LSAgLy8NCj4+LSAgU3RhdHVzID0gRmluZEluZm9CeVR5cGUgKG1Nb2Rp ZnlVc2VyLCBFRklfVVNFUl9JTkZPX05BTUVfUkVDT1JELA0KPj4mVXNlckluZm8pOw0KPj4tICBp ZiAoIUVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPj4tICAgIG1Vc2VyTWFuYWdlci0+U2V0SW5mbyAo DQo+Pi0gICAgICAgICAgICAgICAgICAgIG1Vc2VyTWFuYWdlciwNCj4+LSAgICAgICAgICAgICAg ICAgICAgbU1vZGlmeVVzZXIsDQo+Pi0gICAgICAgICAgICAgICAgICAgICZVc2VySW5mbywNCj4+ LSAgICAgICAgICAgICAgICAgICAgSW5mbywNCj4+LSAgICAgICAgICAgICAgICAgICAgSW5mby0+ SW5mb1NpemUNCj4+LSAgICAgICAgICAgICAgICAgICAgKTsNCj4+LSAgfQ0KPj4tICBGcmVlUG9v bCAoSW5mbyk7DQo+Pi19DQo+Pi0NCj4+LQ0KPj4tLyoqDQo+Pi0gIERpc3BsYXkgdGhlIGZvcm0g b2YgdGhlIG1vZGlmeWluZyB1c2VyIGlkZW50aXR5IHBvbGljeS4NCj4+LQ0KPj4tKiovDQo+Pi1W T0lEDQo+Pi1Nb2RpZnlJZGVudGl0eVBvbGljeSAoDQo+Pi0gIFZPSUQNCj4+LSAgKQ0KPj4tew0K Pj4tICBVSU5UTiAgICAgICAgICAgICAgIEluZGV4Ow0KPj4tICBDSEFSMTYgICAgICAgICAgICAg ICpQcm92U3RyOw0KPj4tICBFRklfU1RSSU5HX0lEICAgICAgIFByb3ZJRDsNCj4+LSAgRUZJX0hJ SV9IQU5ETEUgICAgICBIaWlIYW5kbGU7DQo+Pi0gIFZPSUQgICAgICAgICAgICAgICAgKk9wdGlv bnNPcENvZGVIYW5kbGU7DQo+Pi0gIFZPSUQgICAgICAgICAgICAgICAgKlN0YXJ0T3BDb2RlSGFu ZGxlOw0KPj4tICBWT0lEICAgICAgICAgICAgICAgICpFbmRPcENvZGVIYW5kbGU7DQo+Pi0gIEVG SV9JRlJfR1VJRF9MQUJFTCAgKlN0YXJ0TGFiZWw7DQo+Pi0gIEVGSV9JRlJfR1VJRF9MQUJFTCAg KkVuZExhYmVsOw0KPj4tDQo+Pi0gIC8vDQo+Pi0gIC8vIEluaXRpYWxpemUgdGhlIGNvbnRhaW5l ciBmb3IgZHluYW1pYyBvcGNvZGVzLg0KPj4tICAvLw0KPj4tICBTdGFydE9wQ29kZUhhbmRsZSA9 IEhpaUFsbG9jYXRlT3BDb2RlSGFuZGxlICgpOw0KPj4tICBBU1NFUlQgKFN0YXJ0T3BDb2RlSGFu ZGxlICE9IE5VTEwpOw0KPj4tDQo+Pi0gIEVuZE9wQ29kZUhhbmRsZSA9IEhpaUFsbG9jYXRlT3BD b2RlSGFuZGxlICgpOw0KPj4tICBBU1NFUlQgKEVuZE9wQ29kZUhhbmRsZSAhPSBOVUxMKTsNCj4+ LQ0KPj4tICAvLw0KPj4tICAvLyBDcmVhdGUgSGlpIEV4dGVuZCBMYWJlbCBPcENvZGUuDQo+Pi0g IC8vDQo+Pi0gIFN0YXJ0TGFiZWwgPSAoRUZJX0lGUl9HVUlEX0xBQkVMICopIEhpaUNyZWF0ZUd1 aWRPcENvZGUgKA0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0 YXJ0T3BDb2RlSGFuZGxlLA0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICZnRWZpSWZyVGlhbm9HdWlkLA0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIE5VTEwsDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc2l6ZW9mIChFRklfSUZSX0dVSURfTEFCRUwpDQo+Pi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKTsNCj4+LSAgU3RhcnRMYWJlbC0+RXh0ZW5kT3BDb2RlICA9IEVG SV9JRlJfRVhURU5EX09QX0xBQkVMOw0KPj4tICBTdGFydExhYmVsLT5OdW1iZXIgICAgICAgID0g TEFCRUxfSVBfTU9EX0ZVTkM7DQo+Pi0NCj4+LSAgRW5kTGFiZWwgPSAoRUZJX0lGUl9HVUlEX0xB QkVMICopIEhpaUNyZWF0ZUd1aWRPcENvZGUgKA0KPj4tICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBFbmRPcENvZGVIYW5kbGUsDQo+Pi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICZnRWZpSWZyVGlhbm9HdWlkLA0KPj4tICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBOVUxMLA0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzaXplb2YgKEVGSV9JRlJfR1VJRF9MQUJFTCkNCj4+LSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4+LSAgRW5kTGFiZWwtPkV4dGVuZE9wQ29kZSAg PSBFRklfSUZSX0VYVEVORF9PUF9MQUJFTDsNCj4+LSAgRW5kTGFiZWwtPk51bWJlciAgICAgICAg PSBMQUJFTF9FTkQ7DQo+Pi0NCj4+LSAgLy8NCj4+LSAgLy8gQWRkIGNyZWRlbnRpYWwgcHJvdmlk ZXJzDQo+Pi0gIC8vLg0KPj4tICBpZiAobVByb3ZpZGVySW5mby0+Q291bnQgPiAwKSB7DQo+Pi0g ICAgT3B0aW9uc09wQ29kZUhhbmRsZSA9IEhpaUFsbG9jYXRlT3BDb2RlSGFuZGxlICgpOw0KPj4t ICAgIEFTU0VSVCAoT3B0aW9uc09wQ29kZUhhbmRsZSAhPSBOVUxMKTsNCj4+LQ0KPj4tICAgIC8v DQo+Pi0gICAgLy8gQWRkIGNyZWRlbnRpYWwgcHJvdmlkZXIgT3B0aW9uIE9wQ29kZS4NCj4+LSAg ICAvLw0KPj4tICAgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IG1Qcm92aWRlckluZm8tPkNvdW50 OyBJbmRleCsrKSB7DQo+Pi0gICAgICBtUHJvdmlkZXJJbmZvLT5Qcm92aWRlcltJbmRleF0tPlRp dGxlICgNCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtUHJvdmlk ZXJJbmZvLT5Qcm92aWRlcltJbmRleF0sDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJkhpaUhhbmRsZSwNCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAmUHJvdklEDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKTsNCj4+LSAgICAgIFByb3ZTdHIgPSBIaWlHZXRTdHJpbmcgKEhpaUhhbmRsZSwgUHJv dklELCBOVUxMKTsNCj4+LSAgICAgIFByb3ZJRCAgPSBIaWlTZXRTdHJpbmcgKG1DYWxsYmFja0lu Zm8tPkhpaUhhbmRsZSwgMCwgUHJvdlN0ciwgTlVMTCk7DQo+Pi0gICAgICBGcmVlUG9vbCAoUHJv dlN0cik7DQo+Pi0gICAgICBpZiAoUHJvdklEID09IDApIHsNCj4+LSAgICAgICAgcmV0dXJuIDsN Cj4+LSAgICAgIH0NCj4+LQ0KPj4tICAgICAgSGlpQ3JlYXRlT25lT2ZPcHRpb25PcENvZGUgKA0K Pj4tICAgICAgICBPcHRpb25zT3BDb2RlSGFuZGxlLA0KPj4tICAgICAgICBQcm92SUQsDQo+Pi0g ICAgICAgIDAsDQo+Pi0gICAgICAgIEVGSV9JRlJfTlVNRVJJQ19TSVpFXzEsDQo+Pi0gICAgICAg IChVSU5UOCkgSW5kZXgNCj4+LSAgICAgICAgKTsNCj4+LSAgICB9DQo+Pi0NCj4+LSAgICBIaWlD cmVhdGVPbmVPZk9wQ29kZSAoDQo+Pi0gICAgICBTdGFydE9wQ29kZUhhbmRsZSwgICAgICAgICAg ICAgICAgLy8gQ29udGFpbmVyIGZvciBkeW5hbWljIGNyZWF0ZWQgb3Bjb2Rlcw0KPj4tICAgICAg S0VZX01PRElGWV9VU0VSIHwgS0VZX1NFTEVDVF9VU0VSIHwgS0VZX01PRElGWV9JUCB8DQo+PktF WV9NT0RJRllfUFJPViwgIC8vIFF1ZXN0aW9uIElEDQo+Pi0gICAgICAwLCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLy8gVmFyU3RvcmUgSUQNCj4+LSAgICAgIDAsICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvLyBPZmZzZXQgaW4gQnVmZmVyIFN0b3JhZ2UNCj4+LSAgICAg IFNUUklOR19UT0tFTiAoU1RSX1BST1ZJREVSKSwgICAgICAvLyBRdWVzdGlvbiBwcm9tcHQgdGV4 dA0KPj4tICAgICAgU1RSSU5HX1RPS0VOIChTVFJfUFJPVklERVJfSEVMUCksIC8vIFF1ZXN0aW9u IGhlbHAgdGV4dA0KPj4tICAgICAgRUZJX0lGUl9GTEFHX0NBTExCQUNLLCAgICAgICAgICAgIC8v IFF1ZXN0aW9uIGZsYWcNCj4+LSAgICAgIEVGSV9JRlJfTlVNRVJJQ19TSVpFXzEsICAgICAgICAg ICAvLyBEYXRhIHR5cGUgb2YgUXVlc3Rpb24gVmFsdWUNCj4+LSAgICAgIE9wdGlvbnNPcENvZGVI YW5kbGUsICAgICAgICAgICAgICAvLyBPcHRpb24gT3Bjb2RlIGxpc3QNCj4+LSAgICAgIE5VTEwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWZhdWx0IE9wY29kZSBpcyBOVUxsDQo+ Pi0gICAgICApOw0KPj4tDQo+Pi0gICAgSGlpRnJlZU9wQ29kZUhhbmRsZSAoT3B0aW9uc09wQ29k ZUhhbmRsZSk7DQo+Pi0gIH0NCj4+LQ0KPj4tICAvLw0KPj4tICAvLyBBZGQgbG9naWNhbCBjb25u ZWN0b3IgT3B0aW9uIE9wQ29kZS4NCj4+LSAgLy8NCj4+LSAgT3B0aW9uc09wQ29kZUhhbmRsZSA9 IEhpaUFsbG9jYXRlT3BDb2RlSGFuZGxlICgpOw0KPj4tICBBU1NFUlQgKE9wdGlvbnNPcENvZGVI YW5kbGUgIT0gTlVMTCk7DQo+Pi0NCj4+LSAgSGlpQ3JlYXRlT25lT2ZPcHRpb25PcENvZGUgKA0K Pj4tICAgIE9wdGlvbnNPcENvZGVIYW5kbGUsDQo+Pi0gICAgU1RSSU5HX1RPS0VOIChTVFJfQU5E X0NPTiksDQo+Pi0gICAgMCwNCj4+LSAgICBFRklfSUZSX05VTUVSSUNfU0laRV8xLA0KPj4tICAg IDANCj4+LSAgICApOw0KPj4tDQo+Pi0gIEhpaUNyZWF0ZU9uZU9mT3B0aW9uT3BDb2RlICgNCj4+ LSAgICBPcHRpb25zT3BDb2RlSGFuZGxlLA0KPj4tICAgIFNUUklOR19UT0tFTiAoU1RSX09SX0NP TiksDQo+Pi0gICAgMCwNCj4+LSAgICBFRklfSUZSX05VTUVSSUNfU0laRV8xLA0KPj4tICAgIDEN Cj4+LSAgICApOw0KPj4tDQo+Pi0gIEhpaUNyZWF0ZU9uZU9mT3BDb2RlICgNCj4+LSAgICBTdGFy dE9wQ29kZUhhbmRsZSwgICAgICAgICAgICAgICAgICAvLyBDb250YWluZXIgZm9yIGR5bmFtaWMg Y3JlYXRlZCBvcGNvZGVzDQo+Pi0gICAgS0VZX01PRElGWV9VU0VSIHwgS0VZX1NFTEVDVF9VU0VS IHwgS0VZX01PRElGWV9JUCB8DQo+PktFWV9NT0RJRllfQ09OTiwgIC8vIFF1ZXN0aW9uIElEDQo+ Pi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVmFyU3RvcmUgSUQN Cj4+LSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBPZmZzZXQgaW4g QnVmZmVyIFN0b3JhZ2UNCj4+LSAgICBTVFJJTkdfVE9LRU4gKFNUUl9DT05ORUNUT1IpLCAgICAg ICAvLyBRdWVzdGlvbiBwcm9tcHQgdGV4dA0KPj4tICAgIFNUUklOR19UT0tFTiAoU1RSX0NPTk5F Q1RPUl9IRUxQKSwgIC8vIFF1ZXN0aW9uIGhlbHAgdGV4dA0KPj4tICAgIEVGSV9JRlJfRkxBR19D QUxMQkFDSywgICAgICAgICAgICAgIC8vIFF1ZXN0aW9uIGZsYWcNCj4+LSAgICBFRklfSUZSX05V TUVSSUNfU0laRV8xLCAgICAgICAgICAgICAvLyBEYXRhIHR5cGUgb2YgUXVlc3Rpb24gVmFsdWUN Cj4+LSAgICBPcHRpb25zT3BDb2RlSGFuZGxlLCAgICAgICAgICAgICAgICAvLyBPcHRpb24gT3Bj b2RlIGxpc3QNCj4+LSAgICBOVUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBE ZWZhdWx0IE9wY29kZSBpcyBOVUxsDQo+Pi0gICAgKTsNCj4+LQ0KPj4tICBIaWlGcmVlT3BDb2Rl SGFuZGxlIChPcHRpb25zT3BDb2RlSGFuZGxlKTsNCj4+LQ0KPj4tICAvLw0KPj4tICAvLyBVcGRh dGUgaWRlbnRpdHkgcG9saWN5IGluIHRoZSBmb3JtLg0KPj4tICAvLw0KPj4tICBSZXNvbHZlSWRl bnRpdHlQb2xpY3kgKA0KPj4tICAgIG1Vc2VySW5mby5JZGVudGl0eVBvbGljeSwNCj4+LSAgICBt VXNlckluZm8uSWRlbnRpdHlQb2xpY3lMZW4sDQo+Pi0gICAgU1RSSU5HX1RPS0VOIChTVFJfSURF TlRJRllfUE9MSUNZX1ZBTFVFKQ0KPj4tICAgICk7DQo+Pi0NCj4+LSAgaWYgKG1Vc2VySW5mby5O ZXdJZGVudGl0eVBvbGljeSAhPSBOVUxMKSB7DQo+Pi0gICAgRnJlZVBvb2wgKG1Vc2VySW5mby5O ZXdJZGVudGl0eVBvbGljeSk7DQo+Pi0gICAgbVVzZXJJbmZvLk5ld0lkZW50aXR5UG9saWN5ICAg ICAgICAgPSBOVUxMOw0KPj4tICAgIG1Vc2VySW5mby5OZXdJZGVudGl0eVBvbGljeUxlbiAgICAg ID0gMDsNCj4+LSAgICBtVXNlckluZm8uTmV3SWRlbnRpdHlQb2xpY3lNb2RpZmllZCA9IEZBTFNF Ow0KPj4tICB9DQo+Pi0gIG1Qcm92aWRlckNob2ljZSA9IDA7DQo+Pi0gIG1Db25uY2V0TG9naWNh bCA9IDA7DQo+Pi0NCj4+LSAgSGlpVXBkYXRlRm9ybSAoDQo+Pi0gICAgbUNhbGxiYWNrSW5mby0+ SGlpSGFuZGxlLCAvLyBISUkgaGFuZGxlDQo+Pi0gICAgJmdVc2VyUHJvZmlsZU1hbmFnZXJHdWlk LCAvLyBGb3Jtc2V0IEdVSUQNCj4+LSAgICBGT1JNSURfTU9ESUZZX0lQLCAgICAgICAgIC8vIEZv cm0gSUQNCj4+LSAgICBTdGFydE9wQ29kZUhhbmRsZSwgICAgICAgIC8vIExhYmVsIGZvciB3aGVy ZSB0byBpbnNlcnQgb3Bjb2Rlcw0KPj4tICAgIEVuZE9wQ29kZUhhbmRsZSAgICAgICAgICAgLy8g UmVwbGFjZSBkYXRhDQo+Pi0gICAgKTsNCj4+LQ0KPj4tICBIaWlGcmVlT3BDb2RlSGFuZGxlIChT dGFydE9wQ29kZUhhbmRsZSk7DQo+Pi0gIEhpaUZyZWVPcENvZGVIYW5kbGUgKEVuZE9wQ29kZUhh bmRsZSk7DQo+Pi19DQo+Pi0NCj4+LQ0KPj4tLyoqDQo+Pi0gIEdldCBjdXJyZW50IHVzZXIncyBh Y2Nlc3MgcmlnaHQuDQo+Pi0NCj4+LSAgQHBhcmFtW291dF0gIEFjY2Vzc1JpZ2h0ICBQb2ludHMg dG8gdGhlIGJ1ZmZlciB1c2VkIGZvciB1c2VyJ3MgYWNjZXNzIHJpZ2h0Lg0KPj4tDQo+Pi0gIEBy ZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgR2V0IGN1cnJlbnQgdXNlciBhY2Nlc3MgcmlnaHQgc3Vj Y2Vzc2Z1bGx5Lg0KPj4tICBAcmV0dmFsIG90aGVycyAgICAgICAgICAgIEZhaWwgdG8gZ2V0IGN1 cnJlbnQgdXNlciBhY2Nlc3MgcmlnaHQuDQo+Pi0NCj4+LSoqLw0KPj4tRUZJX1NUQVRVUw0KPj4t R2V0QWNjZXNzUmlnaHQgKA0KPj4tICBPVVQgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICpBY2Nlc3NSaWdodA0KPj4tICApDQo+Pi17DQo+Pi0gIEVGSV9TVEFUVVMg ICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4+LSAgRUZJX1VTRVJfSU5GT19IQU5ETEUgICAg ICAgICAgVXNlckluZm87DQo+Pi0gIEVGSV9VU0VSX0lORk8gICAgICAgICAgICAgICAgICpJbmZv Ow0KPj4tICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICBJbmZvU2l6ZTsNCj4+LSAgVUlO VE4gICAgICAgICAgICAgICAgICAgICAgICAgTWVtU2l6ZTsNCj4+LSAgRUZJX1VTRVJfSU5GT19B Q0NFU1NfQ09OVFJPTCAgQWNjZXNzOw0KPj4tICBFRklfVVNFUl9QUk9GSUxFX0hBTkRMRSAgICAg ICBDdXJyZW50VXNlcjsNCj4+LSAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgVG90YWxM ZW47DQo+Pi0gIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgIENoZWNrTGVuOw0KPj4tDQo+ Pi0gIC8vDQo+Pi0gIC8vIEFsbG9jYXRlIHVzZXIgaW5mb3JtYXRpb24gbWVtb3J5Lg0KPj4tICAv Lw0KPj4tICBNZW1TaXplID0gc2l6ZW9mIChFRklfVVNFUl9JTkZPKSArIDYzOw0KPj4tICBJbmZv ICAgID0gQWxsb2NhdGVaZXJvUG9vbCAoTWVtU2l6ZSk7DQo+Pi0gIGlmIChJbmZvID09IE5VTEwp IHsNCj4+LSAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+Pi0gIH0NCj4+LQ0KPj4t ICAvLw0KPj4tICAvLyBHZXQgdXNlciBhY2Nlc3MgaW5mb3JtYXRpb24uDQo+Pi0gIC8vDQo+Pi0g IFVzZXJJbmZvID0gTlVMTDsNCj4+LSAgbVVzZXJNYW5hZ2VyLT5DdXJyZW50IChtVXNlck1hbmFn ZXIsICZDdXJyZW50VXNlcik7DQo+Pi0gIHdoaWxlIChUUlVFKSB7DQo+Pi0gICAgSW5mb1NpemUg PSBNZW1TaXplOw0KPj4tICAgIC8vDQo+Pi0gICAgLy8gR2V0IG5leHQgdXNlciBpbmZvcm1hdGlv bi4NCj4+LSAgICAvLw0KPj4tICAgIFN0YXR1cyA9IG1Vc2VyTWFuYWdlci0+R2V0TmV4dEluZm8g KG1Vc2VyTWFuYWdlciwgQ3VycmVudFVzZXIsDQo+PiZVc2VySW5mbyk7DQo+Pi0gICAgaWYgKEVG SV9FUlJPUiAoU3RhdHVzKSkgew0KPj4tICAgICAgYnJlYWs7DQo+Pi0gICAgfQ0KPj4tDQo+Pi0g ICAgU3RhdHVzID0gbVVzZXJNYW5hZ2VyLT5HZXRJbmZvICgNCj4+LSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbVVzZXJNYW5hZ2VyLA0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBDdXJyZW50VXNlciwNCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlckluZm8s DQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZm8sDQo+Pi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICZJbmZvU2l6ZQ0KPj4tICAgICAgICAgICAgICAgICAgICAgICAgICAg ICApOw0KPj4tICAgIGlmIChTdGF0dXMgPT0gRUZJX0JVRkZFUl9UT09fU01BTEwpIHsNCj4+LSAg ICAgIE1lbVNpemUgPSBJbmZvU2l6ZTsNCj4+LSAgICAgIEZyZWVQb29sIChJbmZvKTsNCj4+LSAg ICAgIEluZm8gPSBBbGxvY2F0ZVplcm9Qb29sIChNZW1TaXplKTsNCj4+LSAgICAgIGlmIChJbmZv ID09IE5VTEwpIHsNCj4+LSAgICAgICAgcmV0dXJuIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPj4t ICAgICAgfQ0KPj4tICAgICAgU3RhdHVzID0gbVVzZXJNYW5hZ2VyLT5HZXRJbmZvICgNCj4+LSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlck1hbmFnZXIsDQo+Pi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgQ3VycmVudFVzZXIsDQo+Pi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgVXNlckluZm8sDQo+Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg SW5mbywNCj4+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmSW5mb1NpemUNCj4+LSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KPj4tICAgIH0NCj4+LSAgICBpZiAoRUZJ X0VSUk9SIChTdGF0dXMpKSB7DQo+Pi0gICAgICBicmVhazsNCj4+LSAgICB9DQo+Pi0NCj4+LSAg ICAvLw0KPj4tICAgIC8vIENoZWNrIHVzZXIgaW5mb3JtYXRpb24uDQo+Pi0gICAgLy8NCj4+LSAg ICBpZiAoSW5mby0+SW5mb1R5cGUgPT0gRUZJX1VTRVJfSU5GT19BQ0NFU1NfUE9MSUNZX1JFQ09S RCkgew0KPj4tICAgICAgVG90YWxMZW4gID0gSW5mby0+SW5mb1NpemUgLSBzaXplb2YgKEVGSV9V U0VSX0lORk8pOw0KPj4tICAgICAgQ2hlY2tMZW4gID0gMDsNCj4+LSAgICAgIC8vDQo+Pi0gICAg ICAvLyBHZXQgc3BlY2lmaWVkIGFjY2VzcyBpbmZvcm1hdGlvbi4NCj4+LSAgICAgIC8vDQo+Pi0g ICAgICB3aGlsZSAoQ2hlY2tMZW4gPCBUb3RhbExlbikgew0KPj4tICAgICAgICBDb3B5TWVtICgm QWNjZXNzLCAoVUlOVDggKikgKEluZm8gKyAxKSArIENoZWNrTGVuLCBzaXplb2YgKEFjY2Vzcykp Ow0KPj4tICAgICAgICBpZiAoKEFjY2Vzcy5UeXBlID09IEVGSV9VU0VSX0lORk9fQUNDRVNTX0VO Uk9MTF9TRUxGKSB8fA0KPj4tICAgICAgICAgICAgKEFjY2Vzcy5UeXBlID09IEVGSV9VU0VSX0lO Rk9fQUNDRVNTX0VOUk9MTF9PVEhFUlMpIHx8DQo+Pi0gICAgICAgICAgICAoQWNjZXNzLlR5cGUg PT0gRUZJX1VTRVJfSU5GT19BQ0NFU1NfTUFOQUdFKQ0KPj4tICAgICAgICAgICAgKSB7DQo+Pi0g ICAgICAgICAgKkFjY2Vzc1JpZ2h0ID0gQWNjZXNzLlR5cGU7DQo+Pi0gICAgICAgICAgRnJlZVBv b2wgKEluZm8pOw0KPj4tICAgICAgICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4+LSAgICAgICAg fQ0KPj4tICAgICAgICBDaGVja0xlbiArPSBBY2Nlc3MuU2l6ZTsNCj4+LSAgICAgIH0NCj4+LSAg ICB9DQo+Pi0gIH0NCj4+LSAgRnJlZVBvb2wgKEluZm8pOw0KPj4tICByZXR1cm4gRUZJX05PVF9G T1VORDsNCj4+LX0NCj4+LQ0KPj4tLQ0KPj4yLjE2LjIud2luZG93cy4xDQo+Pg0KPj5fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXw0KPj5lZGsyLWRldmVsIG1h aWxpbmcgbGlzdA0KPj5lZGsyLWRldmVsQGxpc3RzLjAxLm9yZw0KPj5odHRwczovL2xpc3RzLjAx Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2VkazItZGV2ZWwNCg==