From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) (using TLSv1 with cipher CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 46F781A1E30 for ; Mon, 17 Oct 2016 19:59:24 -0700 (PDT) Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by fmsmga102.fm.intel.com with ESMTP; 17 Oct 2016 19:59:24 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.31,359,1473145200"; d="scan'208";a="20629323" Received: from fmsmsx108.amr.corp.intel.com ([10.18.124.206]) by fmsmga005.fm.intel.com with ESMTP; 17 Oct 2016 19:59:23 -0700 Received: from fmsmsx111.amr.corp.intel.com (10.18.116.5) by FMSMSX108.amr.corp.intel.com (10.18.124.206) with Microsoft SMTP Server (TLS) id 14.3.248.2; Mon, 17 Oct 2016 19:59:22 -0700 Received: from fmsmsx103.amr.corp.intel.com ([169.254.2.167]) by fmsmsx111.amr.corp.intel.com ([169.254.12.12]) with mapi id 14.03.0248.002; Mon, 17 Oct 2016 19:59:22 -0700 From: "Carsey, Jaben" To: "Ni, Ruiyu" , Tim Lewis , Vladimir Olovyannikov , "edk2-devel@lists.01.org" CC: "Carsey, Jaben" Thread-Topic: [PATCH] GPT Shell Application/Library Thread-Index: AQHSJ22pkbT3FyyYSEa8i7cbwLd+taCt6T2AgAAAoQCAAAIDAP//nB6A Date: Tue, 18 Oct 2016 02:59:21 +0000 Message-ID: References: <1476595420-12566-1-git-send-email-vladimir.olovyannikov@broadcom.com> <734D49CCEBEEF84792F5B80ED585239D58E36F4F@SHSMSX104.ccr.corp.intel.com> <7236196A5DF6C040855A6D96F556A53F3F80DD@msmail.insydesw.com.tw> <734D49CCEBEEF84792F5B80ED585239D58E36F85@SHSMSX104.ccr.corp.intel.com> In-Reply-To: <734D49CCEBEEF84792F5B80ED585239D58E36F85@SHSMSX104.ccr.corp.intel.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.1.200.106] MIME-Version: 1.0 Subject: Re: [PATCH] GPT Shell Application/Library X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 18 Oct 2016 02:59:24 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 V2UgYWxyZWFkeSBoYXZlIGFkZGl0aW9uYWwgbGlicmFyaWVzIHRoYXQgcGVvcGxlIGNhbiBjb21w aWxlIGF0IHdpbGwgZm9yIHRoaW5ncyBsaWtlIERQIGFuZCBURlRQLiAgV2Ugb25seSBpbmNsdWRl IHRoZSBkb2N1bWVudGVkIGNvbW1hbmRzIGluIG91ciBiaW5hcnkgc2hlbGwgZGVsaXZlcmllcy4g IEkgdGhpbmsgdGhhdCB3ZSBjYW4gYWxsb3cgYSBsaWJyYXJ5IGFuZCBjb3VsZCBldmVuIGNvbnN1 bWUgdGhhdCBsaWJyYXJ5IGFuZCBtYWtlIGEgc3RhbmQgYWxvbmUgR1BULmVmaS4NCg0KSSB0aGlu ayB0aGF0IHRoZSBHUFQgY29tbWFuZCBzaG91bGQgbm90IGJlIGluY2x1ZGVkIGluIHRoZSBTaGVs bEJpblBrZyBmb3Igc3VyZS4NCg0KLUpBYmVuDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0t LS0NCj4gRnJvbTogTmksIFJ1aXl1DQo+IFNlbnQ6IE1vbmRheSwgT2N0b2JlciAxNywgMjAxNiA2 OjU1IFBNDQo+IFRvOiBUaW0gTGV3aXMgPHRpbS5sZXdpc0BpbnN5ZGUuY29tPjsgVmxhZGltaXIg T2xvdnlhbm5pa292DQo+IDx2bGFkaW1pci5vbG92eWFubmlrb3ZAYnJvYWRjb20uY29tPjsgQ2Fy c2V5LCBKYWJlbg0KPiA8amFiZW4uY2Fyc2V5QGludGVsLmNvbT47IGVkazItZGV2ZWxAbGlzdHMu MDEub3JnDQo+IFN1YmplY3Q6IFJFOiBbUEFUQ0hdIEdQVCBTaGVsbCBBcHBsaWNhdGlvbi9MaWJy YXJ5DQo+IEltcG9ydGFuY2U6IEhpZ2gNCj4gDQo+IE9yIHdlIGNvdWxkIGhhdmUgYSBjb21tb24g d3JhcHBlciBtb2R1bGUsIHRoYXQgbGlua3MgdG8gZGlmZmVyZW50IGxpYnJhcnkgdG8NCj4gcHJv dmlkZSBkaWZmZXJlbnQgPGNvbW1hbmQ+LmVmaS4NCj4gVGhpcyB3aWxsIHJlcXVpcmUgdGhlIG5h bWUgb2YgdGhlIHdyYXBwZXIgbW9kdWxlIGlzIGN1c3RvbWl6YWJsZS4gSGF2ZW4ndCB0cmllZA0K PiBvbiB0aGF0LCBzZWVtcyBkb2FibGUuDQo+IA0KPiBUaGFua3MvUmF5DQo+IA0KPiA+IC0tLS0t T3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4gRnJvbTogVGltIExld2lzIFttYWlsdG86dGltLmxl d2lzQGluc3lkZS5jb21dDQo+ID4gU2VudDogVHVlc2RheSwgT2N0b2JlciAxOCwgMjAxNiA5OjQ4 IEFNDQo+ID4gVG86IE5pLCBSdWl5dSA8cnVpeXUubmlAaW50ZWwuY29tPjsgVmxhZGltaXIgT2xv dnlhbm5pa292DQo+ID4gPHZsYWRpbWlyLm9sb3Z5YW5uaWtvdkBicm9hZGNvbS5jb20+OyBDYXJz ZXksIEphYmVuDQo+ID4gPGphYmVuLmNhcnNleUBpbnRlbC5jb20+OyBlZGsyLWRldmVsQGxpc3Rz LjAxLm9yZw0KPiA+IFN1YmplY3Q6IFJFOiBbUEFUQ0hdIEdQVCBTaGVsbCBBcHBsaWNhdGlvbi9M aWJyYXJ5DQo+ID4NCj4gPiBXZSB3b3VsZCBwcmVmZXIgdGhhdCB0aGlzIHRvb2wgYmUgZXh0ZXJu YWwuICBUaW0NCj4gPg0KPiA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4gRnJvbTog ZWRrMi1kZXZlbCBbbWFpbHRvOmVkazItZGV2ZWwtYm91bmNlc0BsaXN0cy4wMS5vcmddIE9uIEJl aGFsZiBPZiBOaSwNCj4gPiBSdWl5dQ0KPiA+IFNlbnQ6IE1vbmRheSwgT2N0b2JlciAxNywgMjAx NiA2OjQ2IFBNDQo+ID4gVG86IFZsYWRpbWlyIE9sb3Z5YW5uaWtvdiA8dmxhZGltaXIub2xvdnlh bm5pa292QGJyb2FkY29tLmNvbT47IENhcnNleSwNCj4gPiBKYWJlbiA8amFiZW4uY2Fyc2V5QGlu dGVsLmNvbT47IGVkazItZGV2ZWxAbGlzdHMuMDEub3JnDQo+ID4gU3ViamVjdDogUmU6IFtlZGsy XSBbUEFUQ0hdIEdQVCBTaGVsbCBBcHBsaWNhdGlvbi9MaWJyYXJ5DQo+ID4NCj4gPiBKYWJlbiwN Cj4gPiBEbyB5b3UgdGhpbmsgdGhhdCBwcm92aWRpbmcgYSBzdGFuZGFsb25lIGdwdC5lZmkgaXMg YmV0dGVyPyBTbyB0aGF0IFNoZWxsLmVmaQ0KPiA+IG9ubHkgcHJvdmlkZXMgdGhlIGludGVybmFs IGNvbW1hbmRzIGxpc3RlZCBpbiBTaGVsbCBzcGVjLg0KPiA+DQo+ID4gVGhhbmtzL1JheQ0KPiA+ DQo+ID4gPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+ID4gRnJvbTogVmxhZGltaXIg T2xvdnlhbm5pa292DQo+ID4gW21haWx0bzp2bGFkaW1pci5vbG92eWFubmlrb3ZAYnJvYWRjb20u Y29tXQ0KPiA+ID4gU2VudDogU3VuZGF5LCBPY3RvYmVyIDE2LCAyMDE2IDE6MjQgUE0NCj4gPiA+ IFRvOiBDYXJzZXksIEphYmVuIDxqYWJlbi5jYXJzZXlAaW50ZWwuY29tPjsgZWRrMi1kZXZlbEBs aXN0cy4wMS5vcmc7IE5pLA0KPiA+ID4gUnVpeXUgPHJ1aXl1Lm5pQGludGVsLmNvbT4NCj4gPiA+ IENjOiBWbGFkaW1pciBPbG92eWFubmlrb3YgPHZsYWRpbWlyLm9sb3Z5YW5uaWtvdkBicm9hZGNv bS5jb20+DQo+ID4gPiBTdWJqZWN0OiBbUEFUQ0hdIEdQVCBTaGVsbCBBcHBsaWNhdGlvbi9MaWJy YXJ5DQo+ID4gPg0KPiA+ID4gVGhpcyBhbGxvd3MgbWFuYWdpbmcgKGNyZWF0ZSwgZGVsZXRlLCBt b2RpZnksIGZhdCBmb3JtYXQpIG9mIEdQVA0KPiA+ID4gcGFydGl0aW9ucyBmcm9tIHdpdGhpbiBV RUZJIFNoZWxsLg0KPiA+ID4gU3ludGF4Og0KPiA+ID4gZ3B0IDxjb21tYW5kPiBbZGV2aWNlX21h cHBlZF9uYW1lXSBbcGFyYW1ldGVycy4uLl0NCj4gPiA+IFNlZSB1c2FnZSBleGFtcGxlcyBpbiB0 aGUgLnVuaSBmaWxlDQo+ID4gPiAtLS0NCj4gPiA+ICAuLi4vTGlicmFyeS9VZWZpU2hlbGxHcHRD b21tYW5kTGliL0ZhdEZvcm1hdC5jICAgICB8ICA2MTEgKysrKysrKw0KPiA+ID4gIC4uLi9MaWJy YXJ5L1VlZmlTaGVsbEdwdENvbW1hbmRMaWIvRmF0Rm9ybWF0LmggICAgIHwgIDExMSArKw0KPiA+ ID4gIC4uLi9MaWJyYXJ5L1VlZmlTaGVsbEdwdENvbW1hbmRMaWIvR3B0V29ya2VyLmMgICAgIHwg MTkwMg0KPiA+ID4gKysrKysrKysrKysrKysrKysrKysNCj4gPiA+ICAuLi4vTGlicmFyeS9VZWZp U2hlbGxHcHRDb21tYW5kTGliL0dwdFdvcmtlci5oICAgICB8ICAxODYgKysNCj4gPiA+ICAuLi4v VWVmaVNoZWxsR3B0Q29tbWFuZExpYi5jICAgICAgICAgICAgICAgICAgICAgICB8IDExMzUgKysr KysrKysrKysrDQo+ID4gPiAgLi4uL1VlZmlTaGVsbEdwdENvbW1hbmRMaWIuaW5mICAgICAgICAg ICAgICAgICAgICAgfCAgIDc5ICsNCj4gPiA+ICAuLi4vVWVmaVNoZWxsR3B0Q29tbWFuZExpYi51 bmkgICAgICAgICAgICAgICAgICAgICB8ICAxMTcgKysNCj4gPiA+ICBTaGVsbFBrZy9TaGVsbFBr Zy5kZWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDEgKw0KPiA+ID4gIFNoZWxs UGtnL1NoZWxsUGtnLmRzYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNCArDQo+ ID4gPiAgOSBmaWxlcyBjaGFuZ2VkLCA0MTQ2IGluc2VydGlvbnMoKykNCj4gPiA+ICBjcmVhdGUg bW9kZSAxMDA2NDQNCj4gPiBTaGVsbFBrZy9MaWJyYXJ5L1VlZmlTaGVsbEdwdENvbW1hbmRMaWIv RmF0Rm9ybWF0LmMNCj4gPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQNCj4gPiA+IFNoZWxsUGtnL0xp YnJhcnkvVWVmaVNoZWxsR3B0Q29tbWFuZExpYi9GYXRGb3JtYXQuaA0KPiA+ID4gIGNyZWF0ZSBt b2RlIDEwMDY0NA0KPiA+ID4gU2hlbGxQa2cvTGlicmFyeS9VZWZpU2hlbGxHcHRDb21tYW5kTGli L0dwdFdvcmtlci5jDQo+ID4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0DQo+ID4gPiBTaGVsbFBrZy9M aWJyYXJ5L1VlZmlTaGVsbEdwdENvbW1hbmRMaWIvR3B0V29ya2VyLmgNCj4gPiA+ICBjcmVhdGUg bW9kZSAxMDA2NDQNCj4gPiA+IFNoZWxsUGtnL0xpYnJhcnkvVWVmaVNoZWxsR3B0Q29tbWFuZExp Yi9VZWZpU2hlbGxHcHRDb21tYW5kTGliLmMNCj4gPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQNCj4g PiA+IFNoZWxsUGtnL0xpYnJhcnkvVWVmaVNoZWxsR3B0Q29tbWFuZExpYi9VZWZpU2hlbGxHcHRD b21tYW5kTGliLmluZg0KPiA+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NA0KPiA+ID4gU2hlbGxQa2cv TGlicmFyeS9VZWZpU2hlbGxHcHRDb21tYW5kTGliL1VlZmlTaGVsbEdwdENvbW1hbmRMaWIudW5p DQo+ID4gPg0KPiA+ID4gZGlmZiAtLWdpdCBhL1NoZWxsUGtnL0xpYnJhcnkvVWVmaVNoZWxsR3B0 Q29tbWFuZExpYi9GYXRGb3JtYXQuYw0KPiA+ID4gYi9TaGVsbFBrZy9MaWJyYXJ5L1VlZmlTaGVs bEdwdENvbW1hbmRMaWIvRmF0Rm9ybWF0LmMNCj4gPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ ID4gPiBpbmRleCAwMDAwMDAwMDAwMDAuLmJhNzkwNGU2YmUyOA0KPiA+ID4gLS0tIC9kZXYvbnVs bA0KPiA+ID4gKysrIGIvU2hlbGxQa2cvTGlicmFyeS9VZWZpU2hlbGxHcHRDb21tYW5kTGliL0Zh dEZvcm1hdC5jDQo+ID4gPiBAQCAtMCwwICsxLDYxMSBAQA0KPiA+ID4gKy8qKiBAZmlsZQ0KPiA+ ID4gKw0KPiA+ID4gKyAgQ29weXJpZ2h0IChjKSAyMDAzIC0gMjAxMiwgUm9iIFJpZ2xhciwgVWx0 cmEtRW1iZWRkZWQuY29tLiBBbGwgcmlnaHRzDQo+ID4gPiByZXNlcnZlZDxCUj4NCj4gPiA+ICsN Cj4gPiA+ICsgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCj4g PiA+ICsgIGFyZSBsaWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIGFu ZCBjb25kaXRpb25zIG9mIHRoZQ0KPiA+IEJTRA0KPiA+ID4gTGljZW5zZQ0KPiA+ID4gKyAgd2hp Y2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24uICBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBs aWNlbnNlIG1heSBiZQ0KPiA+ID4gZm91bmQgYXQNCj4gPiA+ICsgIGh0dHA6Ly9vcGVuc291cmNl Lm9yZy9saWNlbnNlcy9ic2QtbGljZW5zZS5waHANCj4gPiA+ICsNCj4gPiA+ICsgIFRIRSBQUk9H UkFNIElTIERJU1RSSUJVVEVEIFVOREVSIFRIRSBCU0QgTElDRU5TRSBPTiBBTiAiQVMgSVMiDQo+ ID4gPiBCQVNJUywNCj4gPiA+ICsgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElP TlMgT0YgQU5ZIEtJTkQsIEVJVEhFUg0KPiA+ID4gRVhQUkVTUyBPUiBJTVBMSUVELg0KPiA+ID4g Kw0KPiA+ID4gKyoqLw0KPiA+ID4gKw0KPiA+ID4gKy8qIFBvcnRpb25zIENvcHlyaWdodCAoYykg MjAxNiwgQnJvYWRjb20uIEFsbCByaWdodHMgcmVzZXJ2ZWQgKi8NCj4gPiA+ICsNCj4gPiA+ICsj aW5jbHVkZSAiRmF0Rm9ybWF0LmgiDQo+ID4gPiArDQo+ID4gPiArLy8tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQ0KPiA+ID4gKy8vIFRhYmxlcw0KPiA+ID4gKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCj4g PiA+ICt0eXBlZGVmIHN0cnVjdA0KPiA+ID4gK3sNCj4gPiA+ICsgIFVJTlQ2NCAgU2VjdG9yczsN Cj4gPiA+ICsgIFVJTlQ4ICAgU2VjdG9yc1BlckNsdXN0ZXI7DQo+ID4gPiArfSBTZWN0b3JzUGVy Q2x1c3RlclRhYmxlOw0KPiA+ID4gKw0KPiA+ID4gK1NUQVRJQyBTZWN0b3JzUGVyQ2x1c3RlclRh YmxlIENsdXN0ZXJTaXplVGFibGUxNltdID0NCj4gPiA+ICt7DQo+ID4gPiArICB7IDMyNjgwLCAy IH0sICAgICAvLyAxNk1CIC0gMUsNCj4gPiA+ICsgIHsgMjYyMTQ0LCA0IH0sICAgIC8vIDEyOE1C IC0gMksNCj4gPiA+ICsgIHsgNTI0Mjg4LCA4IH0sICAgIC8vIDI1Nk1CIC0gNEsNCj4gPiA+ICsg IHsgMTA0ODU3NiwgMTYgfSwgIC8vIDUxMk1CIC0gOEsNCj4gPiA+ICsgIHsgMjA5NzE1MiwgMzIg fSwgIC8vIDFHQiAtIDE2Sw0KPiA+ID4gKyAgeyA0MTk0MzA0LCA2NCB9LCAgLy8gMkdCIC0gMzJL DQo+ID4gPiArICB7IDgzODg2MDgsIDEyOCB9LCAvLyAyR0IgLSA2NEsgW1dhcm5pbmcgb25seSBz dXBwb3J0ZWQgYnkgV2luZG93cyBYUA0KPiA+ID4gb253YXJkc10NCj4gPiA+ICsgIHsgMCwgMCB9 ICAgICAgICAgIC8vIEludmFsaWQNCj4gPiA+ICt9Ow0KPiA+ID4gKw0KPiA+ID4gK1NUQVRJQyBT ZWN0b3JzUGVyQ2x1c3RlclRhYmxlIENsdXN0ZXJTaXplVGFibGUzMltdID0NCj4gPiA+ICt7DQo+ ID4gPiArICB7IDUzMjQ4MCwgMSB9LCAgICAgIC8vIDI2ME1CIC0gNTEyYg0KPiA+ID4gKyAgeyAx Njc3NzIxNiwgOCB9LCAgICAvLyA4R0IgLSA0Sw0KPiA+ID4gKyAgeyAzMzU1NDQzMiwgMTYgfSwg ICAvLyAxNkdCIC0gOEsNCj4gPiA+ICsgIHsgNjcxMDg4NjQsIDMyIH0sICAgLy8gMzJHQiAtIDE2 Sw0KPiA+ID4gKyAgeyAweEZGRkZGRkZGLCA2NCB9LCAvLyA+MzJHQiAtIDMySw0KPiA+ID4gKyAg eyAwLCAwIH0gICAgICAgICAgICAvLyBJbnZhbGlkDQo+ID4gPiArfTsNCj4gPiA+ICsNCj4gPiA+ ICtTVEFUSUMNCj4gPiA+ICtFRklfTEJBIExiYU9mQ2x1c3RlciAoDQo+ID4gPiArICBJTiBGQVRG UyAqRnMsDQo+ID4gPiArICBJTiBVSU5UNjQgQ2x1c3Rlck51bWJlcg0KPiA+ID4gKyAgKQ0KPiA+ ID4gK3sNCj4gPiA+ICsgIGlmIChGcy0+RmF0VHlwZSA9PSBGQVRfVFlQRV8xNikNCj4gPiA+ICsg ICAgcmV0dXJuIChGcy0+Q2x1c3RlckJlZ2luTGJhICsNCj4gPiA+ICsgICAgICAoRnMtPlJvb3RF bnRyeUNvdW50ICogMzIgLyBGQVRfU0VDVE9SX1NJWkUpICsNCj4gPiA+ICsgICAgICAoKENsdXN0 ZXJOdW1iZXIgLSAyKSAqIEZzLT5TZWN0b3JzUGVyQ2x1c3RlcikpOw0KPiA+ID4gKyAgZWxzZQ0K PiA+ID4gKyAgICByZXR1cm4gKChGcy0+Q2x1c3RlckJlZ2luTGJhICsNCj4gPiA+ICsgICAgICAo KENsdXN0ZXJOdW1iZXIgLSAyKSAqIEZzLT5TZWN0b3JzUGVyQ2x1c3RlcikpKTsNCj4gPiA+ICt9 DQo+ID4gPiArDQo+ID4gPiArLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPiA+ID4gKy8vIGZhdGZz X2NhbGNfY2x1c3Rlcl9zaXplOiBDYWxjdWxhdGUgd2hhdCBjbHVzdGVyIHNpemUgc2hvdWxkIGJl IHVzZWQNCj4gPiA+ICsvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQo+ID4gPiArU1RBVElDDQo+ID4g PiArVUlOVDggQ2FsY0NsdXN0ZXJTaXplICgNCj4gPiA+ICsgIElOIFVJTlROIFNlY3RvcnMsDQo+ ID4gPiArICBJTiBCT09MRUFOIElzRmF0MzIpDQo+ID4gPiArew0KPiA+ID4gKyAgVUlOVE4gSW5k ZXg7DQo+ID4gPiArDQo+ID4gPiArICBpZiAoIUlzRmF0MzIpIHsNCj4gPiA+ICsgICAgZm9yIChJ bmRleCA9IDA7IENsdXN0ZXJTaXplVGFibGUxNltJbmRleF0uU2VjdG9yc1BlckNsdXN0ZXIgIT0g MDsNCj4gPiBJbmRleCsrKQ0KPiA+ID4gKyAgICAgIGlmIChTZWN0b3JzIDw9IENsdXN0ZXJTaXpl VGFibGUxNltJbmRleF0uU2VjdG9ycykNCj4gPiA+ICsgICAgICAgIHJldHVybiBDbHVzdGVyU2l6 ZVRhYmxlMTZbSW5kZXhdLlNlY3RvcnNQZXJDbHVzdGVyOw0KPiA+ID4gKyAgfSBlbHNlIHsNCj4g PiA+ICsgICAgZm9yIChJbmRleCA9IDA7IENsdXN0ZXJTaXplVGFibGUzMltJbmRleF0uU2VjdG9y c1BlckNsdXN0ZXIgIT0gMDsNCj4gPiBJbmRleCsrKQ0KPiA+ID4gKyAgICAgIGlmIChTZWN0b3Jz IDw9IENsdXN0ZXJTaXplVGFibGUzMltJbmRleF0uU2VjdG9ycykNCj4gPiA+ICsgICAgICAgIHJl dHVybiBDbHVzdGVyU2l6ZVRhYmxlMzJbSW5kZXhdLlNlY3RvcnNQZXJDbHVzdGVyOw0KPiA+ID4g KyAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgcmV0dXJuIDA7DQo+ID4gPiArfQ0KPiA+ID4gKy8vLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0NCj4gPiA+ICsvLyBmYXRmc19lcmFzZV9zZWN0b3JzOiBFcmFzZSBh IG51bWJlciBvZiBzZWN0b3JzDQo+ID4gPiArLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPiA+ID4g K1NUQVRJQw0KPiA+ID4gK0VGSV9TVEFUVVMNCj4gPiA+ICtFcmFzZVNlY3RvcnMgKA0KPiA+ID4g KyAgSU4gRkFURlMgKkZzLA0KPiA+ID4gKyAgSU4gRUZJX0xCQSBMYmEsDQo+ID4gPiArICBJTiBV SU5UTiBDb3VudA0KPiA+ID4gKyAgKQ0KPiA+ID4gK3sNCj4gPiA+ICsgIFVJTlROIEluZGV4Ow0K PiA+ID4gKyAgRUZJX1NUQVRVUyBTdGF0dXM7DQo+ID4gPiArDQo+ID4gPiArICAvLyBaZXJvIFNl Y3RvciBmaXJzdA0KPiA+ID4gKyAgWmVyb01lbSAoRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yLCBG QVRfU0VDVE9SX1NJWkUpOw0KPiA+ID4gKw0KPiA+ID4gKyAgZm9yIChJbmRleCA9IDA7IEluZGV4 IDwgQ291bnQ7IEluZGV4KyspDQo+ID4gPiArICAgIFN0YXR1cyA9IEZzLT5EaXNrSW8tPldyaXRl RGlzayAoDQo+ID4gPiArICAgICAgRnMtPkRpc2tJbywgRnMtPkJsb2NrSW8tPk1lZGlhLT5NZWRp YUlkLA0KPiA+ID4gKyAgICAgIE11bHRVNjR4MzIgKEZzLT5TdGFydGluZ0xCQSwgRnMtPkJsb2Nr SW8tPk1lZGlhLT5CbG9ja1NpemUpICsNCj4gPiA+ICsgICAgICBNdWx0VTY0eDMyICgoTGJhICsg SW5kZXgpLCBGQVRfU0VDVE9SX1NJWkUpLA0KPiA+ID4gKyAgICAgIEZBVF9TRUNUT1JfU0laRSwg RnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yKTsNCj4gPiA+ICsNCj4gPiA+ICsgIHJldHVybiBTdGF0 dXM7DQo+ID4gPiArfQ0KPiA+ID4gKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCj4gPiA+ICsvLyBm YXRmc19jcmVhdGVfYm9vdF9zZWN0b3I6IENyZWF0ZSB0aGUgYm9vdCBTZWN0b3INCj4gPiA+ICsv Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tDQo+ID4gPiArU1RBVElDDQo+ID4gPiArRUZJX1NUQVRVUw0K PiA+ID4gK0NyZWF0ZUJvb3RTZWN0b3IgKA0KPiA+ID4gKyAgSU4gRkFURlMgKkZzLA0KPiA+ID4g KyAgSU4gRUZJX0xCQSBCb290U2VjdG9yTGJhLA0KPiA+ID4gKyAgSU4gVUlOVDY0IFZvbFNlY3Rv cnMsDQo+ID4gPiArICBJTiBDT05TVCBDSEFSOCAqTmFtZSwNCj4gPiA+ICsgIElOIEJPT0xFQU4g SXNGYXQzMg0KPiA+ID4gKyAgKQ0KPiA+ID4gK3sNCj4gPiA+ICsgIFVJTlROIFRvdGFsQ2x1c3Rl cnM7DQo+ID4gPiArICBVSU5UTiBJbmRleDsNCj4gPiA+ICsgIEVGSV9TVEFUVVMgU3RhdHVzOw0K PiA+ID4gKw0KPiA+ID4gKyAgLy8gWmVybyBTZWN0b3IgaW5pdGlhbGx5DQo+ID4gPiArICBaZXJv TWVtIChGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3IsIEZBVF9TRUNUT1JfU0laRSk7DQo+ID4gPiAr DQo+ID4gPiArICAvLyBPRU0gTmFtZSAmIEp1bXAgQ29kZQ0KPiA+ID4gKyAgRnMtPkN1cnJlbnRT ZWN0b3IuU2VjdG9yWzBdID0gMHhFQjsNCj4gPiA+ICsgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3Rv clsxXSA9IDB4M0M7DQo+ID4gPiArICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbMl0gPSAweDkw Ow0KPiA+ID4gKyAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzNdID0gMHg0RDsNCj4gPiA+ICsg IEZzLT5DdXJyZW50U2VjdG9yLlNlY3Rvcls0XSA9IDB4NTM7DQo+ID4gPiArICBGcy0+Q3VycmVu dFNlY3Rvci5TZWN0b3JbNV0gPSAweDQ0Ow0KPiA+ID4gKyAgRnMtPkN1cnJlbnRTZWN0b3IuU2Vj dG9yWzZdID0gMHg0RjsNCj4gPiA+ICsgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3Rvcls3XSA9IDB4 NTM7DQo+ID4gPiArICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbOF0gPSAweDM1Ow0KPiA+ID4g KyAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzldID0gMHgyRTsNCj4gPiA+ICsgIEZzLT5DdXJy ZW50U2VjdG9yLlNlY3RvclsxMF0gPSAweDMwOw0KPiA+ID4gKw0KPiA+ID4gKyAgLy8gQnl0ZXMg cGVyIFNlY3Rvcg0KPiA+ID4gKyAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzExXSA9IChGQVRf U0VDVE9SX1NJWkUgPj4gMCkgJiAweEZGOw0KPiA+ID4gKyAgRnMtPkN1cnJlbnRTZWN0b3IuU2Vj dG9yWzEyXSA9IChGQVRfU0VDVE9SX1NJWkUgPj4gOCkgJiAweEZGOw0KPiA+ID4gKw0KPiA+ID4g KyAgLy8gR2V0IHNlY3RvcnMgcGVyIGNsdXN0ZXIgc2l6ZSBmb3IgdGhlIGRpc2sNCj4gPiA+ICsg IEZzLT5TZWN0b3JzUGVyQ2x1c3RlciA9IENhbGNDbHVzdGVyU2l6ZSAoVm9sU2VjdG9ycywgSXNG YXQzMik7DQo+ID4gPiArICBpZiAoIUZzLT5TZWN0b3JzUGVyQ2x1c3RlcikNCj4gPiA+ICsgICAg cmV0dXJuIDA7IC8vIEludmFsaWQgZGlzayBzaXplDQo+ID4gPiArDQo+ID4gPiArICAvLyBTZWN0 b3JzIHBlciBjbHVzdGVyDQo+ID4gPiArICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbMTNdID0g RnMtPlNlY3RvcnNQZXJDbHVzdGVyOw0KPiA+ID4gKw0KPiA+ID4gKyAgLy8gUmVzZXJ2ZWQgU2Vj dG9ycw0KPiA+ID4gKyAgaWYgKCFJc0ZhdDMyKQ0KPiA+ID4gKyAgICBGcy0+UmVzZXJ2ZWRTZWN0 b3JzID0gODsNCj4gPiA+ICsgIGVsc2UNCj4gPiA+ICsgICAgRnMtPlJlc2VydmVkU2VjdG9ycyA9 IDMyOw0KPiA+ID4gKyAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzE0XSA9IChGcy0+UmVzZXJ2 ZWRTZWN0b3JzID4+IDApICYgMHhGRjsNCj4gPiA+ICsgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3Rv clsxNV0gPSAoRnMtPlJlc2VydmVkU2VjdG9ycyA+PiA4KSAmIDB4RkY7DQo+ID4gPiArDQo+ID4g PiArICAvLyBOdW1iZXIgb2YgRkFUUw0KPiA+ID4gKyAgRnMtPk51bU9mRmF0cyA9IDI7DQo+ID4g PiArICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbMTZdID0gRnMtPk51bU9mRmF0czsNCj4gPiA+ ICsNCj4gPiA+ICsgIC8vIE1heCBlbnRyaWVzIGluIHJvb3QgZGlyIChGQVQxNiBvbmx5KQ0KPiA+ ID4gKyAgaWYgKCFJc0ZhdDMyKSB7DQo+ID4gPiArICAgIEZzLT5Sb290RW50cnlDb3VudCA9IDUx MjsNCj4gPiA+ICsgICAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzE3XSA9IChGcy0+Um9vdEVu dHJ5Q291bnQgPj4gMCkgJiAweEZGOw0KPiA+ID4gKyAgICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0 b3JbMThdID0gKEZzLT5Sb290RW50cnlDb3VudCA+PiA4KSAmIDB4RkY7DQo+ID4gPiArICB9IGVs c2Ugew0KPiA+ID4gKyAgICBGcy0+Um9vdEVudHJ5Q291bnQgPSAwOw0KPiA+ID4gKyAgICBGcy0+ Q3VycmVudFNlY3Rvci5TZWN0b3JbMTddID0gMDsNCj4gPiA+ICsgICAgRnMtPkN1cnJlbnRTZWN0 b3IuU2VjdG9yWzE4XSA9IDA7DQo+ID4gPiArICB9DQo+ID4gPiArDQo+ID4gPiArICAvLyBbRkFU MTZdIFRvdGFsIHNlY3RvcnMgKHVzZSBGQVQzMiBjb3VudCBpbnN0ZWFkKQ0KPiA+ID4gKyAgRnMt PkN1cnJlbnRTZWN0b3IuU2VjdG9yWzE5XSA9IDB4MDA7DQo+ID4gPiArICBGcy0+Q3VycmVudFNl Y3Rvci5TZWN0b3JbMjBdID0gMHgwMDsNCj4gPiA+ICsNCj4gPiA+ICsgIC8vIE1lZGlhIHR5cGUN Cj4gPiA+ICsgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3RvclsyMV0gPSAweEY4Ow0KPiA+ID4gKw0K PiA+ID4gKw0KPiA+ID4gKyAgLy8gRkFUMTYgQlMgRGV0YWlscw0KPiA+ID4gKyAgaWYgKCFJc0Zh dDMyKSB7DQo+ID4gPiArICAgIC8vIENvdW50IG9mIHNlY3RvcnMgdXNlZCBieSB0aGUgRkFUIHRh YmxlIChGQVQxNiBvbmx5KQ0KPiA+ID4gKyAgICBUb3RhbENsdXN0ZXJzID0gKFZvbFNlY3RvcnMg LyBGcy0+U2VjdG9yc1BlckNsdXN0ZXIpICsgMTsNCj4gPiA+ICsgICAgRnMtPkZhdFNlY3RvcnMg PSAoVG90YWxDbHVzdGVycyAvIChGQVRfU0VDVE9SX1NJWkUgLyAyKSkgKyAxOw0KPiA+ID4gKyAg ICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbMjJdID0gKFVJTlQ4KSgoRnMtPkZhdFNlY3RvcnMg Pj4gMCkgJiAweEZGKTsNCj4gPiA+ICsgICAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzIzXSA9 IChVSU5UOCkoKEZzLT5GYXRTZWN0b3JzID4+IDgpICYgMHhGRik7DQo+ID4gPiArDQo+ID4gPiAr ICAgIC8vIFNlY3RvcnMgcGVyIHRyYWNrDQo+ID4gPiArICAgIEZzLT5DdXJyZW50U2VjdG9yLlNl Y3RvclsyNF0gPSAweDAwOw0KPiA+ID4gKyAgICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbMjVd ID0gMHgwMDsNCj4gPiA+ICsNCj4gPiA+ICsgICAgLy8gSGVhZHMNCj4gPiA+ICsgICAgRnMtPkN1 cnJlbnRTZWN0b3IuU2VjdG9yWzI2XSA9IDB4MDA7DQo+ID4gPiArICAgIEZzLT5DdXJyZW50U2Vj dG9yLlNlY3RvclsyN10gPSAweDAwOw0KPiA+ID4gKw0KPiA+ID4gKyAgICAvLyBIaWRkZW4gc2Vj dG9ycw0KPiA+ID4gKyAgICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbMjhdID0gMHgyMDsNCj4g PiA+ICsgICAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzI5XSA9IDB4MDA7DQo+ID4gPiArICAg IEZzLT5DdXJyZW50U2VjdG9yLlNlY3RvclszMF0gPSAweDAwOw0KPiA+ID4gKyAgICBGcy0+Q3Vy cmVudFNlY3Rvci5TZWN0b3JbMzFdID0gMHgwMDsNCj4gPiA+ICsNCj4gPiA+ICsgICAgLy8gVG90 YWwgc2VjdG9ycyBmb3IgdGhpcyB2b2x1bWUNCj4gPiA+ICsgICAgRnMtPkN1cnJlbnRTZWN0b3Iu U2VjdG9yWzMyXSA9IChVSU5UOCkoKFZvbFNlY3RvcnMgPj4gMCkgJiAweEZGKTsNCj4gPiA+ICsg ICAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzMzXSA9IChVSU5UOCkoKFZvbFNlY3RvcnMgPj4g OCkgJiAweEZGKTsNCj4gPiA+ICsgICAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzM0XSA9IChV SU5UOCkoKFZvbFNlY3RvcnMgPj4gMTYpICYgMHhGRik7DQo+ID4gPiArICAgIEZzLT5DdXJyZW50 U2VjdG9yLlNlY3RvclszNV0gPSAoVUlOVDgpKChWb2xTZWN0b3JzID4+IDI0KSAmIDB4RkYpOw0K PiA+ID4gKw0KPiA+ID4gKyAgICAvLyBEcml2ZSBudW1iZXINCj4gPiA+ICsgICAgRnMtPkN1cnJl bnRTZWN0b3IuU2VjdG9yWzM2XSA9IDB4MDA7DQo+ID4gPiArDQo+ID4gPiArICAgIC8vIFJlc2Vy dmVkDQo+ID4gPiArICAgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3RvclszN10gPSAweDAwOw0KPiA+ ID4gKw0KPiA+ID4gKyAgICAvLyBCb290IHNpZ25hdHVyZQ0KPiA+ID4gKyAgICBGcy0+Q3VycmVu dFNlY3Rvci5TZWN0b3JbMzhdID0gMHgyOTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgLy8gVm9sdW1l IElEDQo+ID4gPiArICAgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3RvclszOV0gPSAweDEyOw0KPiA+ ID4gKyAgICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbNDBdID0gMHgzNDsNCj4gPiA+ICsgICAg RnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzQxXSA9IDB4NTY7DQo+ID4gPiArICAgIEZzLT5DdXJy ZW50U2VjdG9yLlNlY3Rvcls0Ml0gPSAweDc4Ow0KPiA+ID4gKw0KPiA+ID4gKyAgICAvLyBWb2x1 bWUgbmFtZQ0KPiA+ID4gKyAgICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCAxMTsgSW5kZXgrKykg ew0KPiA+ID4gKyAgICAgIGlmIChJbmRleCA8IEFzY2lpU3RyTGVuIChOYW1lKSkNCj4gPiA+ICsg ICAgICAgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3RvcltJbmRleCArIDQzXSA9IE5hbWVbSW5kZXhd Ow0KPiA+ID4gKyAgICAgIGVsc2UNCj4gPiA+ICsgICAgICAgIEZzLT5DdXJyZW50U2VjdG9yLlNl Y3RvcltJbmRleCArIDQzXSA9ICcgJzsNCj4gPiA+ICsgICAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAg ICAvLyBGaWxlIHN5cyB0eXBlDQo+ID4gPiArICAgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3Rvcls1 NF0gPSAnRic7DQo+ID4gPiArICAgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3Rvcls1NV0gPSAnQSc7 DQo+ID4gPiArICAgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3Rvcls1Nl0gPSAnVCc7DQo+ID4gPiAr ICAgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3Rvcls1N10gPSAnMSc7DQo+ID4gPiArICAgIEZzLT5D dXJyZW50U2VjdG9yLlNlY3Rvcls1OF0gPSAnNic7DQo+ID4gPiArICAgIEZzLT5DdXJyZW50U2Vj dG9yLlNlY3Rvcls1OV0gPSAnICc7DQo+ID4gPiArICAgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3Rv cls2MF0gPSAnICc7DQo+ID4gPiArICAgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3Rvcls2MV0gPSAn ICc7DQo+ID4gPiArDQo+ID4gPiArICAgIC8vIFNpZ25hdHVyZQ0KPiA+ID4gKyAgICBGcy0+Q3Vy cmVudFNlY3Rvci5TZWN0b3JbNTEwXSA9IDB4NTU7DQo+ID4gPiArICAgIEZzLT5DdXJyZW50U2Vj dG9yLlNlY3Rvcls1MTFdID0gMHhBQTsNCj4gPiA+ICsgIH0NCj4gPiA+ICsgIC8vIEZBVDMyIEJT IERldGFpbHMNCj4gPiA+ICsgIGVsc2Ugew0KPiA+ID4gKyAgICAvLyBDb3VudCBvZiBzZWN0b3Jz IHVzZWQgYnkgdGhlIEZBVCB0YWJsZSAoRkFUMTYgb25seSkNCj4gPiA+ICsgICAgRnMtPkN1cnJl bnRTZWN0b3IuU2VjdG9yWzIyXSA9IDA7DQo+ID4gPiArICAgIEZzLT5DdXJyZW50U2VjdG9yLlNl Y3RvclsyM10gPSAwOw0KPiA+ID4gKw0KPiA+ID4gKyAgICAvLyBTZWN0b3JzIHBlciB0cmFjayAo ZGVmYXVsdCkNCj4gPiA+ICsgICAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzI0XSA9IDB4M0Y7 DQo+ID4gPiArICAgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3RvclsyNV0gPSAweDAwOw0KPiA+ID4g Kw0KPiA+ID4gKyAgICAvLyBIZWFkcyAoZGVmYXVsdCkNCj4gPiA+ICsgICAgRnMtPkN1cnJlbnRT ZWN0b3IuU2VjdG9yWzI2XSA9IDB4RkY7DQo+ID4gPiArICAgIEZzLT5DdXJyZW50U2VjdG9yLlNl Y3RvclsyN10gPSAweDAwOw0KPiA+ID4gKw0KPiA+ID4gKyAgICAvLyBIaWRkZW4gc2VjdG9ycw0K PiA+ID4gKyAgICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbMjhdID0gMHgwMDsNCj4gPiA+ICsg ICAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzI5XSA9IDB4MDA7DQo+ID4gPiArICAgIEZzLT5D dXJyZW50U2VjdG9yLlNlY3RvclszMF0gPSAweDAwOw0KPiA+ID4gKyAgICBGcy0+Q3VycmVudFNl Y3Rvci5TZWN0b3JbMzFdID0gMHgwMDsNCj4gPiA+ICsNCj4gPiA+ICsgICAgLy8gVG90YWwgc2Vj dG9ycyBmb3IgdGhpcyB2b2x1bWUNCj4gPiA+ICsgICAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9y WzMyXSA9IChVSU5UOCkoKFZvbFNlY3RvcnMgPj4gMCkgJiAweEZGKTsNCj4gPiA+ICsgICAgRnMt PkN1cnJlbnRTZWN0b3IuU2VjdG9yWzMzXSA9IChVSU5UOCkoKFZvbFNlY3RvcnMgPj4gOCkgJiAw eEZGKTsNCj4gPiA+ICsgICAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzM0XSA9IChVSU5UOCko KFZvbFNlY3RvcnMgPj4gMTYpICYgMHhGRik7DQo+ID4gPiArICAgIEZzLT5DdXJyZW50U2VjdG9y LlNlY3RvclszNV0gPSAoVUlOVDgpKChWb2xTZWN0b3JzID4+IDI0KSAmIDB4RkYpOw0KPiA+ID4g Kw0KPiA+ID4gKyAgICBUb3RhbENsdXN0ZXJzID0gKFZvbFNlY3RvcnMgLyBGcy0+U2VjdG9yc1Bl ckNsdXN0ZXIpICsgMTsNCj4gPiA+ICsgICAgRnMtPkZhdFNlY3RvcnMgPSAoVG90YWxDbHVzdGVy cyAvIChGQVRfU0VDVE9SX1NJWkUgLyA0KSkgKyAxOw0KPiA+ID4gKw0KPiA+ID4gKyAgICAvLyBC UEJfRkFUU3ozMg0KPiA+ID4gKyAgICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbMzZdID0gKFVJ TlQ4KSgoRnMtPkZhdFNlY3RvcnMgPj4gMCkgJiAweEZGKTsNCj4gPiA+ICsgICAgRnMtPkN1cnJl bnRTZWN0b3IuU2VjdG9yWzM3XSA9IChVSU5UOCkoKEZzLT5GYXRTZWN0b3JzID4+IDgpICYgMHhG Rik7DQo+ID4gPiArICAgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3RvclszOF0gPSAoVUlOVDgpKChG cy0+RmF0U2VjdG9ycyA+PiAxNikgJiAweEZGKTsNCj4gPiA+ICsgICAgRnMtPkN1cnJlbnRTZWN0 b3IuU2VjdG9yWzM5XSA9IChVSU5UOCkoKEZzLT5GYXRTZWN0b3JzID4+IDI0KSAmIDB4RkYpOw0K PiA+ID4gKw0KPiA+ID4gKyAgICAvLyBCUEJfRXh0RmxhZ3MNCj4gPiA+ICsgICAgRnMtPkN1cnJl bnRTZWN0b3IuU2VjdG9yWzQwXSA9IDA7DQo+ID4gPiArICAgIEZzLT5DdXJyZW50U2VjdG9yLlNl Y3Rvcls0MV0gPSAwOw0KPiA+ID4gKw0KPiA+ID4gKyAgICAvLyBCUEJfRlNWZXINCj4gPiA+ICsg ICAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzQyXSA9IDA7DQo+ID4gPiArICAgIEZzLT5DdXJy ZW50U2VjdG9yLlNlY3Rvcls0M10gPSAwOw0KPiA+ID4gKw0KPiA+ID4gKyAgICAvLyBCUEJfUm9v dENsdXMNCj4gPiA+ICsgICAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzQ0XSA9IChVSU5UOCko KEZzLT5Sb290ZGlyRmlyc3RDbHVzdGVyID4+IDApICYNCj4gPiA+IDB4RkYpOw0KPiA+ID4gKyAg ICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbNDVdID0gKFVJTlQ4KSgoRnMtPlJvb3RkaXJGaXJz dENsdXN0ZXIgPj4gOCkgJg0KPiA+ID4gMHhGRik7DQo+ID4gPiArICAgIEZzLT5DdXJyZW50U2Vj dG9yLlNlY3Rvcls0Nl0gPSAoVUlOVDgpKChGcy0+Um9vdGRpckZpcnN0Q2x1c3RlciA+PiAxNikN Cj4gPiAmDQo+ID4gPiAweEZGKTsNCj4gPiA+ICsgICAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9y WzQ3XSA9IChVSU5UOCkoKEZzLT5Sb290ZGlyRmlyc3RDbHVzdGVyID4+IDI0KQ0KPiA+ICYNCj4g PiA+IDB4RkYpOw0KPiA+ID4gKw0KPiA+ID4gKyAgICAvLyBCUEJfRlNJbmZvDQo+ID4gPiArICAg IEZzLT5DdXJyZW50U2VjdG9yLlNlY3Rvcls0OF0gPSAoVUlOVDgpKChGcy0+RnNJbmZvU2VjdG9y ID4+IDApICYgMHhGRik7DQo+ID4gPiArICAgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3Rvcls0OV0g PSAoVUlOVDgpKChGcy0+RnNJbmZvU2VjdG9yID4+IDgpICYgMHhGRik7DQo+ID4gPiArDQo+ID4g PiArICAgIC8vIEJQQl9Ca0Jvb3RTZWMNCj4gPiA+ICsgICAgRnMtPkN1cnJlbnRTZWN0b3IuU2Vj dG9yWzUwXSA9IDY7DQo+ID4gPiArICAgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3Rvcls1MV0gPSAw Ow0KPiA+ID4gKw0KPiA+ID4gKyAgICAvLyBEcml2ZSBudW1iZXINCj4gPiA+ICsgICAgRnMtPkN1 cnJlbnRTZWN0b3IuU2VjdG9yWzY0XSA9IDB4MDA7DQo+ID4gPiArDQo+ID4gPiArICAgIC8vIEJv b3Qgc2lnbmF0dXJlDQo+ID4gPiArICAgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3Rvcls2Nl0gPSAw eDI5Ow0KPiA+ID4gKw0KPiA+ID4gKyAgICAvLyBWb2x1bWUgSUQNCj4gPiA+ICsgICAgRnMtPkN1 cnJlbnRTZWN0b3IuU2VjdG9yWzY3XSA9IDB4MTI7DQo+ID4gPiArICAgIEZzLT5DdXJyZW50U2Vj dG9yLlNlY3Rvcls2OF0gPSAweDM0Ow0KPiA+ID4gKyAgICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0 b3JbNjldID0gMHg1NjsNCj4gPiA+ICsgICAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzcwXSA9 IDB4Nzg7DQo+ID4gPiArDQo+ID4gPiArICAgIC8vIFZvbHVtZSBuYW1lDQo+ID4gPiArICAgIGZv ciAoSW5kZXggPSAwOyBJbmRleCA8IDExOyBJbmRleCsrKSB7DQo+ID4gPiArICAgICAgaWYgKElu ZGV4IDwgKGludClBc2NpaVN0ckxlbiAoTmFtZSkpDQo+ID4gPiArICAgICAgICBGcy0+Q3VycmVu dFNlY3Rvci5TZWN0b3JbSW5kZXggKyA3MV0gPSBOYW1lW0luZGV4XTsNCj4gPiA+ICsgICAgICBl bHNlDQo+ID4gPiArICAgICAgICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbSW5kZXggKyA3MV0g PSAnICc7DQo+ID4gPiArICAgIH0NCj4gPiA+ICsNCj4gPiA+ICsgICAgLy8gRmlsZSBzeXMgdHlw ZQ0KPiA+ID4gKyAgICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbODJdID0gJ0YnOw0KPiA+ID4g KyAgICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbODNdID0gJ0EnOw0KPiA+ID4gKyAgICBGcy0+ Q3VycmVudFNlY3Rvci5TZWN0b3JbODRdID0gJ1QnOw0KPiA+ID4gKyAgICBGcy0+Q3VycmVudFNl Y3Rvci5TZWN0b3JbODVdID0gJzMnOw0KPiA+ID4gKyAgICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0 b3JbODZdID0gJzInOw0KPiA+ID4gKyAgICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbODddID0g JyAnOw0KPiA+ID4gKyAgICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbODhdID0gJyAnOw0KPiA+ ID4gKyAgICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbODldID0gJyAnOw0KPiA+ID4gKw0KPiA+ ID4gKyAgICAvLyBTaWduYXR1cmUNCj4gPiA+ICsgICAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9y WzUxMF0gPSAweDU1Ow0KPiA+ID4gKyAgICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbNTExXSA9 IDB4QUE7DQo+ID4gPiArICB9DQo+ID4gPiArDQo+ID4gPiArICBTdGF0dXMgPSBGcy0+RGlza0lv LT5Xcml0ZURpc2sgKA0KPiA+ID4gKyAgICBGcy0+RGlza0lvLCBGcy0+QmxvY2tJby0+TWVkaWEt Pk1lZGlhSWQsDQo+ID4gPiArICAgIE11bHRVNjR4MzIgKEZzLT5TdGFydGluZ0xCQSwgRnMtPkJs b2NrSW8tPk1lZGlhLT5CbG9ja1NpemUpICsNCj4gPiA+ICsgICAgTXVsdFU2NHgzMiAoRnMtPkZh dEJlZ2luTGJhLCBGQVRfU0VDVE9SX1NJWkUpLA0KPiA+ID4gKyAgICBGQVRfU0VDVE9SX1NJWkUs DQo+ID4gPiArICAgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3Rvcik7DQo+ID4gPiArDQo+ID4gPiAr ICByZXR1cm4gU3RhdHVzOw0KPiA+ID4gK30NCj4gPiA+ICsvLy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t DQo+ID4gPiArLy8gZmF0ZnNfY3JlYXRlX2ZzaW5mb19zZWN0b3I6IENyZWF0ZSB0aGUgRlNJbmZv IFNlY3RvciAoRkFUMzIpDQo+ID4gPiArLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPiA+ID4gK1NU QVRJQw0KPiA+ID4gK0VGSV9TVEFUVVMNCj4gPiA+ICtDcmVhdGVGc2luZm9TZWN0b3IgKA0KPiA+ ID4gKyAgSU4gRkFURlMgKkZzLA0KPiA+ID4gKyAgSU4gRUZJX0xCQSBTZWN0b3JMYmENCj4gPiA+ ICsgICkNCj4gPiA+ICt7DQo+ID4gPiArICBFRklfU1RBVFVTIFN0YXR1czsNCj4gPiA+ICsNCj4g PiA+ICsgIC8vIFplcm8gU2VjdG9yIGluaXRpYWxseQ0KPiA+ID4gKyAgWmVyb01lbSAoRnMtPkN1 cnJlbnRTZWN0b3IuU2VjdG9yLCBGQVRfU0VDVE9SX1NJWkUpOw0KPiA+ID4gKw0KPiA+ID4gKyAg Ly8gRlNJX0xlYWRTaWcNCj4gPiA+ICsgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3RvclswXSA9IDB4 NTI7DQo+ID4gPiArICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbMV0gPSAweDUyOw0KPiA+ID4g KyAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzJdID0gMHg2MTsNCj4gPiA+ICsgIEZzLT5DdXJy ZW50U2VjdG9yLlNlY3RvclszXSA9IDB4NDE7DQo+ID4gPiArDQo+ID4gPiArICAvLyBGU0lfU3Ry dWNTaWcNCj4gPiA+ICsgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3Rvcls0ODRdID0gMHg3MjsNCj4g PiA+ICsgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3Rvcls0ODVdID0gMHg3MjsNCj4gPiA+ICsgIEZz LT5DdXJyZW50U2VjdG9yLlNlY3Rvcls0ODZdID0gMHg0MTsNCj4gPiA+ICsgIEZzLT5DdXJyZW50 U2VjdG9yLlNlY3Rvcls0ODddID0gMHg2MTsNCj4gPiA+ICsNCj4gPiA+ICsgIC8vIEZTSV9GcmVl X0NvdW50DQo+ID4gPiArICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbNDg4XSA9IDB4RkY7DQo+ ID4gPiArICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbNDg5XSA9IDB4RkY7DQo+ID4gPiArICBG cy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbNDkwXSA9IDB4RkY7DQo+ID4gPiArICBGcy0+Q3VycmVu dFNlY3Rvci5TZWN0b3JbNDkxXSA9IDB4RkY7DQo+ID4gPiArDQo+ID4gPiArICAvLyBGU0lfTnh0 X0ZyZWUNCj4gPiA+ICsgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3Rvcls0OTJdID0gMHhGRjsNCj4g PiA+ICsgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3Rvcls0OTNdID0gMHhGRjsNCj4gPiA+ICsgIEZz LT5DdXJyZW50U2VjdG9yLlNlY3Rvcls0OTRdID0gMHhGRjsNCj4gPiA+ICsgIEZzLT5DdXJyZW50 U2VjdG9yLlNlY3Rvcls0OTVdID0gMHhGRjsNCj4gPiA+ICsNCj4gPiA+ICsgIC8vIFNpZ25hdHVy ZQ0KPiA+ID4gKyAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzUxMF0gPSAweDU1Ow0KPiA+ID4g KyAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzUxMV0gPSAweEFBOw0KPiA+ID4gKw0KPiA+ID4g KyAgU3RhdHVzID0gRnMtPkRpc2tJby0+V3JpdGVEaXNrICgNCj4gPiA+ICsgICAgRnMtPkRpc2tJ bywgRnMtPkJsb2NrSW8tPk1lZGlhLT5NZWRpYUlkLA0KPiA+ID4gKyAgICBNdWx0VTY0eDMyIChG cy0+U3RhcnRpbmdMQkEsIEZzLT5CbG9ja0lvLT5NZWRpYS0+QmxvY2tTaXplKSArDQo+ID4gPiAr ICAgIE11bHRVNjR4MzIgKFNlY3RvckxiYSwgIEZBVF9TRUNUT1JfU0laRSksDQo+ID4gPiArICAg IEZBVF9TRUNUT1JfU0laRSwNCj4gPiA+ICsgICAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yKTsN Cj4gPiA+ICsNCj4gPiA+ICsgIHJldHVybiBTdGF0dXM7DQo+ID4gPiArfQ0KPiA+ID4gKy8vLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0NCj4gPiA+ICsvLyBmYXRmc19lcmFzZV9mYXQ6IEVyYXNlIEZBVCB0 YWJsZSB1c2luZyBmcyBkZXRhaWxzIGluIGZzIHN0cnVjdA0KPiA+ID4gKy8vLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0NCj4gPiA+ICtTVEFUSUMNCj4gPiA+ICtFRklfU1RBVFVTDQo+ID4gPiArRXJhc2VG YXQgKA0KPiA+ID4gKyAgSU4gRkFURlMgKkZzLA0KPiA+ID4gKyAgSU4gQk9PTEVBTiBJc0ZhdDMy KQ0KPiA+ID4gK3sNCj4gPiA+ICsgIFVJTlROIEluZGV4Ow0KPiA+ID4gKyAgRUZJX1NUQVRVUyBT dGF0dXM7DQo+ID4gPiArDQo+ID4gPiArICAvLyBaZXJvIFNlY3RvciBpbml0aWFsbHkNCj4gPiA+ ICsgIFplcm9NZW0gKEZzLT5DdXJyZW50U2VjdG9yLlNlY3RvciwgRkFUX1NFQ1RPUl9TSVpFKTsN Cj4gPiA+ICsNCj4gPiA+ICsgIC8vIEluaXRpYWxpc2UgZGVmYXVsdCBhbGxvY2F0ZSAvIHJlc2Vy dmVkIGNsdXN0ZXJzDQo+ID4gPiArICBpZiAoIUlzRmF0MzIpIHsNCj4gPiA+ICsgICAgU0VUXzE2 QklUX1dPUkQgKEZzLT5DdXJyZW50U2VjdG9yLlNlY3RvciwgMCwgMHhGRkY4KTsNCj4gPiA+ICsg ICAgU0VUXzE2QklUX1dPUkQgKEZzLT5DdXJyZW50U2VjdG9yLlNlY3RvciwgMiwgMHhGRkZGKTsN Cj4gPiA+ICsgIH0gZWxzZSB7DQo+ID4gPiArICAgIFNFVF8zMkJJVF9XT1JEIChGcy0+Q3VycmVu dFNlY3Rvci5TZWN0b3IsIDAsIDB4MEZGRkZGRjgpOw0KPiA+ID4gKyAgICBTRVRfMzJCSVRfV09S RCAoRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yLCA0LCAweEZGRkZGRkZGKTsNCj4gPiA+ICsgICAg U0VUXzMyQklUX1dPUkQgKEZzLT5DdXJyZW50U2VjdG9yLlNlY3RvciwgOCwgMHgwRkZGRkZGRik7 DQo+ID4gPiArICB9DQo+ID4gPiArDQo+ID4gPiArICBTdGF0dXMgPSBGcy0+RGlza0lvLT5Xcml0 ZURpc2sgKA0KPiA+ID4gKyAgICBGcy0+RGlza0lvLCBGcy0+QmxvY2tJby0+TWVkaWEtPk1lZGlh SWQsDQo+ID4gPiArICAgIE11bHRVNjR4MzIgKEZzLT5TdGFydGluZ0xCQSwgRnMtPkJsb2NrSW8t Pk1lZGlhLT5CbG9ja1NpemUpICsNCj4gPiA+ICsgICAgTXVsdFU2NHgzMiAoRnMtPkZhdEJlZ2lu TGJhLCBGQVRfU0VDVE9SX1NJWkUpLA0KPiA+ID4gKyAgICBGQVRfU0VDVE9SX1NJWkUsDQo+ID4g PiArICAgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3Rvcik7DQo+ID4gPiArICBpZiAoRUZJX0VSUk9S IChTdGF0dXMpKSB7DQo+ID4gPiArICAgIHJldHVybiBTdGF0dXM7DQo+ID4gPiArICB9DQo+ID4g PiArDQo+ID4gPiArICAvLyBaZXJvIHJlbWFpbmluZyBGQVQgc2VjdG9ycw0KPiA+ID4gKyAgWmVy b01lbSAoRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yLCBGQVRfU0VDVE9SX1NJWkUpOw0KPiA+ID4g KyAgZm9yIChJbmRleCA9IDE7IEluZGV4IDwgRnMtPkZhdFNlY3RvcnMgKiBGcy0+TnVtT2ZGYXRz OyBJbmRleCsrKSB7DQo+ID4gPiArICAgIFN0YXR1cyA9IEZzLT5EaXNrSW8tPldyaXRlRGlzayAo DQo+ID4gPiArICAgICAgRnMtPkRpc2tJbywNCj4gPiA+ICsgICAgICBGcy0+QmxvY2tJby0+TWVk aWEtPk1lZGlhSWQsDQo+ID4gPiArICAgICAgTXVsdFU2NHgzMiAoRnMtPlN0YXJ0aW5nTEJBLCBG cy0+QmxvY2tJby0+TWVkaWEtPkJsb2NrU2l6ZSkgKw0KPiA+ID4gKyAgICAgIE11bHRVNjR4MzIg KChGcy0+RmF0QmVnaW5MYmEgKyBJbmRleCksIEZBVF9TRUNUT1JfU0laRSksDQo+ID4gPiArICAg ICAgRkFUX1NFQ1RPUl9TSVpFLA0KPiA+ID4gKyAgICAgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3Rv cik7DQo+ID4gPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiA+ICsgICAgICBy ZXR1cm4gU3RhdHVzOw0KPiA+ID4gKyAgICB9DQo+ID4gPiArICB9DQo+ID4gPiArICByZXR1cm4g U3RhdHVzOw0KPiA+ID4gK30NCj4gPiA+ICsvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQo+ID4gPiAr Ly8gZmF0ZnNfZm9ybWF0X2ZhdDE2OiBGb3JtYXQgYSBGQVQxNiBwYXJ0aXRpb24NCj4gPiA+ICsv Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tDQo+ID4gPiArU1RBVElDDQo+ID4gPiArRUZJX1NUQVRVUw0K PiA+ID4gK0Zvcm1hdEZhdDE2ICgNCj4gPiA+ICsgIElOIEZBVEZTICpGcywNCj4gPiA+ICsgIElO IFVJTlQ2NCBWb2x1bWVTZWN0b3JzLA0KPiA+ID4gKyAgSU4gQ09OU1QgQ0hBUjggKk5hbWUNCj4g PiA+ICsgICkNCj4gPiA+ICt7DQo+ID4gPiArICBFRklfU1RBVFVTIFN0YXR1czsNCj4gPiA+ICsN Cj4gPiA+ICsgIEZzLT5DdXJyZW50U2VjdG9yLkFkZHJlc3MgPSBGQVQzMl9JTlZBTElEX0NMVVNU RVI7DQo+ID4gPiArICBGcy0+Q3VycmVudFNlY3Rvci5EaXJ0eSA9IDA7DQo+ID4gPiArDQo+ID4g PiArICBGcy0+TmV4dEZyZWVDbHVzdGVyID0gMDsgLy8gSW52YWxpZA0KPiA+ID4gKw0KPiA+ID4g KyAgLy8gVm9sdW1lIGlzIEZBVDE2DQo+ID4gPiArICBGcy0+RmF0VHlwZSA9IEZBVF9UWVBFXzE2 Ow0KPiA+ID4gKw0KPiA+ID4gKyAgLy8gTm90IHZhbGlkIGZvciBGQVQxNg0KPiA+ID4gKyAgRnMt PkZzSW5mb1NlY3RvciA9IDA7DQo+ID4gPiArICBGcy0+Um9vdGRpckZpcnN0Q2x1c3RlciA9IDA7 DQo+ID4gPiArDQo+ID4gPiArICBGcy0+TGJhQmVnaW4gPSAwOw0KPiA+ID4gKyAgU3RhdHVzID0g Q3JlYXRlQm9vdFNlY3RvciAoRnMsIEZzLT5MYmFCZWdpbiwgVm9sdW1lU2VjdG9ycywgTmFtZSwg MCk7DQo+ID4gPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gPiArICAgIHJldHVy biBTdGF0dXM7DQo+ID4gPiArICB9DQo+ID4gPiArDQo+ID4gPiArICAvLyBGb3IgRkFUMTYgKHdo aWNoIHRoaXMgbWF5IGJlKSwgUm9vdGRpckZpcnN0Q2x1c3RlciBpcyBhY3R1YWxsDQo+ID4gPiBS b290ZGlyRmlyc3RTZWN0b3INCj4gPiA+ICsgIEZzLT5Sb290ZGlyRmlyc3RTZWN0b3IgPSBGcy0+ UmVzZXJ2ZWRTZWN0b3JzICsgKEZzLT5OdW1PZkZhdHMgKiBGcy0NCj4gPiA+ID5GYXRTZWN0b3Jz KTsNCj4gPiA+ICsgIEZzLT5Sb290ZGlyU2VjdG9ycyA9ICgoRnMtPlJvb3RFbnRyeUNvdW50ICog MzIpICsNCj4gPiA+ICsgICAgKEZBVF9TRUNUT1JfU0laRSAtIDEpKSAvIEZBVF9TRUNUT1JfU0la RTsNCj4gPiA+ICsNCj4gPiA+ICsgIC8vIEZpcnN0IEZBVCBMQkEgQWRkcmVzcw0KPiA+ID4gKyAg RnMtPkZhdEJlZ2luTGJhID0gRnMtPkxiYUJlZ2luICsgRnMtPlJlc2VydmVkU2VjdG9yczsNCj4g PiA+ICsNCj4gPiA+ICsgIC8vIFRoZSBBZGRyZXNzIG9mIHRoZSBmaXJzdCBkYXRhIGNsdXN0ZXIg b24gdGhpcyB2b2x1bWUNCj4gPiA+ICsgIEZzLT5DbHVzdGVyQmVnaW5MYmEgPSBGcy0+RmF0QmVn aW5MYmEgKw0KPiA+ID4gKyAgICAoRnMtPk51bU9mRmF0cyAqIEZzLT5GYXRTZWN0b3JzKTsNCj4g PiA+ICsNCj4gPiA+ICsgIC8vIEluaXRpYWxpc2UgRkFUIHNlY3RvcnMNCj4gPiA+ICsgIFN0YXR1 cyA9IEVyYXNlRmF0IChGcywgMCk7DQo+ID4gPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7 DQo+ID4gPiArICAgIHJldHVybiBTdGF0dXM7DQo+ID4gPiArICB9DQo+ID4gPiArDQo+ID4gPiAr ICAvLyBFcmFzZSBSb290IGRpcmVjdG9yeQ0KPiA+ID4gKyAgU3RhdHVzID0gRXJhc2VTZWN0b3Jz ICgNCj4gPiA+ICsgICAgICBGcywNCj4gPiA+ICsgICAgICBGcy0+TGJhQmVnaW4gKyBGcy0+Um9v dGRpckZpcnN0U2VjdG9yLA0KPiA+ID4gKyAgICAgIEZzLT5Sb290ZGlyU2VjdG9ycyk7DQo+ID4g PiArDQo+ID4gPiArICByZXR1cm4gU3RhdHVzOw0KPiA+ID4gK30NCj4gPiA+ICsvLy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tDQo+ID4gPiArLy8gZmF0ZnNfZm9ybWF0X2ZhdDMyOiBGb3JtYXQgYSBGQVQz MiBwYXJ0aXRpb24NCj4gPiA+ICsvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQo+ID4gPiArU1RBVElD DQo+ID4gPiArRUZJX1NUQVRVUw0KPiA+ID4gK0Zvcm1hdEZhdDMyICgNCj4gPiA+ICsgIElOIEZB VEZTICpGcywNCj4gPiA+ICsgIElOIFVJTlROIFZvbHVtZVNlY3RvcnMsDQo+ID4gPiArICBJTiBD T05TVCBDSEFSOCAqTmFtZQ0KPiA+ID4gKyAgKQ0KPiA+ID4gK3sNCj4gPiA+ICsgIEVGSV9TVEFU VVMgU3RhdHVzOw0KPiA+ID4gKw0KPiA+ID4gKyAgRnMtPkN1cnJlbnRTZWN0b3IuQWRkcmVzcyA9 IEZBVDMyX0lOVkFMSURfQ0xVU1RFUjsNCj4gPiA+ICsgIEZzLT5DdXJyZW50U2VjdG9yLkRpcnR5 ID0gMDsNCj4gPiA+ICsNCj4gPiA+ICsgIEZzLT5OZXh0RnJlZUNsdXN0ZXIgPSAwOyAvLyBJbnZh bGlkDQo+ID4gPiArDQo+ID4gPiArICAvLyBWb2x1bWUgaXMgRkFUMzINCj4gPiA+ICsgIEZzLT5G YXRUeXBlID0gRkFUX1RZUEVfMzI7DQo+ID4gPiArDQo+ID4gPiArICAvLyBCYXNpYyBkZWZhdWx0 cyBmb3Igbm9ybWFsIEZBVDMyIHBhcnRpdGlvbnMNCj4gPiA+ICsgIEZzLT5Gc0luZm9TZWN0b3Ig PSAxOw0KPiA+ID4gKyAgRnMtPlJvb3RkaXJGaXJzdENsdXN0ZXIgPSAyOw0KPiA+ID4gKw0KPiA+ ID4gKyAgLy8gU2VjdG9yIDA6IEJvb3QgU2VjdG9yDQo+ID4gPiArICAvLyBOT1RFOiBXZSBkb24n dCBuZWVkIGFuIE1CUiwgaXQgaXMgYSB3YXN0ZSBvZiBhIGdvb2QgU2VjdG9yIQ0KPiA+ID4gKyAg RnMtPkxiYUJlZ2luID0gMDsNCj4gPiA+ICsgIFN0YXR1cyA9IENyZWF0ZUJvb3RTZWN0b3IgKEZz LCBGcy0+TGJhQmVnaW4sIFZvbHVtZVNlY3RvcnMsIE5hbWUsIDEpOw0KPiA+ID4gKyAgaWYgKEVG SV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ID4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiA+ID4gKyAg fQ0KPiA+ID4gKw0KPiA+ID4gKyAgLy8gRmlyc3QgRkFUIExCQSBhZGRyZXNzDQo+ID4gPiArICBG cy0+RmF0QmVnaW5MYmEgPSBGcy0+TGJhQmVnaW4gKyBGcy0+UmVzZXJ2ZWRTZWN0b3JzOw0KPiA+ ID4gKw0KPiA+ID4gKyAgLy8gVGhlIGFkZHJlc3Mgb2YgdGhlIGZpcnN0IGRhdGEgY2x1c3RlciBv biB0aGlzIHZvbHVtZQ0KPiA+ID4gKyAgRnMtPkNsdXN0ZXJCZWdpbkxiYSA9IEZzLT5GYXRCZWdp bkxiYSArIChGcy0+TnVtT2ZGYXRzICogRnMtDQo+ID4gPiA+RmF0U2VjdG9ycyk7DQo+ID4gPiAr DQo+ID4gPiArICAvLyBJbml0aWFsaXNlIEZTSW5mbyBzZWN0b3INCj4gPiA+ICsgIFN0YXR1cyA9 IENyZWF0ZUZzaW5mb1NlY3RvciAoRnMsIEZzLT5Gc0luZm9TZWN0b3IpOw0KPiA+ID4gKyAgaWYg KEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ID4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiA+ID4g KyAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgLy8gSW5pdGlhbGlzZSBGQVQgc2VjdG9ycw0KPiA+ID4g KyAgU3RhdHVzID0gRXJhc2VGYXQgKEZzLCAxKTsNCj4gPiA+ICsgIGlmIChFRklfRVJST1IgKFN0 YXR1cykpIHsNCj4gPiA+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gPiA+ICsgIH0NCj4gPiA+ICsN Cj4gPiA+ICsgIC8vIEVyYXNlIFJvb3QgZGlyZWN0b3J5DQo+ID4gPiArICBTdGF0dXMgPSBFcmFz ZVNlY3RvcnMgKA0KPiA+ID4gKyAgICBGcywNCj4gPiA+ICsgICAgTGJhT2ZDbHVzdGVyIChGcywg RnMtPlJvb3RkaXJGaXJzdENsdXN0ZXIpLA0KPiA+ID4gKyAgICBGcy0+U2VjdG9yc1BlckNsdXN0 ZXIpOw0KPiA+ID4gKw0KPiA+ID4gKyAgcmV0dXJuIFN0YXR1czsNCj4gPiA+ICt9DQo+ID4gPiAr Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPiA+ID4gKy8vIGZhdGZzX2Zvcm1hdDogRm9ybWF0IGEg cGFydGl0aW9uIHdpdGggZWl0aGVyIEZBVDE2IG9yIEZBVDMyIGJhc2VkIG9uDQo+ID4gc2l6ZQ0K PiA+ID4gKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCj4gPiA+ICtFRklfU1RBVFVTDQo+ID4gPiAr RmF0Rm9ybWF0ICgNCj4gPiA+ICsgIElOIEVGSV9MQkEgICAgICAgICAgICAgICAgIFN0YXJ0aW5n TEJBLA0KPiA+ID4gKyAgSU4gRUZJX0xCQSAgICAgICAgICAgICAgICAgRW5kaW5nTEJBLA0KPiA+ ID4gKyAgSU4gRUZJX0JMT0NLX0lPX1BST1RPQ09MICAgKkJsb2NrSW8sDQo+ID4gPiArICBJTiBF RklfRElTS19JT19QUk9UT0NPTCAgICAqRGlza0lvLA0KPiA+ID4gKyAgSU4gQ0hBUjggICAgICAg ICAgICAgICAgICAgKlZvbHVtZU5hbWUsDQo+ID4gPiArICBJTiBCT09MRUFOICAgICAgICAgICAg ICAgICBGb3JjZUZhdDMyDQo+ID4gPiArICApDQo+ID4gPiArew0KPiA+ID4gKyAgRkFURlMgRnM7 DQo+ID4gPiArICBVSU5UNjQgVm9sdW1lU2VjdG9yczsNCj4gPiA+ICsNCj4gPiA+ICsgIFZvbHVt ZVNlY3RvcnMgPSBEaXZVNjR4MzIgKA0KPiA+ID4gKyAgICBNdWx0VTY0eDMyICgNCj4gPiA+ICsg ICAgICBFbmRpbmdMQkEgLSBTdGFydGluZ0xCQSArIDEsIEJsb2NrSW8tPk1lZGlhLT5CbG9ja1Np emUpLA0KPiA+ID4gKyAgICBGQVRfU0VDVE9SX1NJWkUpOw0KPiA+ID4gKw0KPiA+ID4gKyAgaWYg KFZvbHVtZU5hbWUgPT0gTlVMTCkgew0KPiA+ID4gKyAgICBWb2x1bWVOYW1lID0gREVGQVVMVF9G QVRfTEFCRUxfTkFNRTsNCj4gPiA+ICsgIH0NCj4gPiA+ICsNCj4gPiA+ICsgIFplcm9NZW0gKCZG cywgc2l6ZW9mKEZzKSk7DQo+ID4gPiArDQo+ID4gPiArICBGcy5TdGFydGluZ0xCQSA9IFN0YXJ0 aW5nTEJBOw0KPiA+ID4gKyAgRnMuRW5kaW5nTEJBID0gRW5kaW5nTEJBOw0KPiA+ID4gKyAgRnMu QmxvY2tJbyA9IEJsb2NrSW87DQo+ID4gPiArICBGcy5EaXNrSW8gPSBEaXNrSW87DQo+ID4gPiAr ICAvLyAyR0IgLSAzMksgbGltaXQgZm9yIHNhZmUgYmVoYXZpb3VyIGZvciBGQVQxNg0KPiA+ID4g KyAgaWYgKChWb2x1bWVTZWN0b3JzIDw9IDQxOTQzMDQpICYmICghRm9yY2VGYXQzMikpIHsNCj4g PiA+ICsgICAgcmV0dXJuIEZvcm1hdEZhdDE2ICgmRnMsIFZvbHVtZVNlY3RvcnMsIFZvbHVtZU5h bWUpOw0KPiA+ID4gKyAgfSBlbHNlIHsNCj4gPiA+ICsgICAgcmV0dXJuIEZvcm1hdEZhdDMyICgm RnMsIFZvbHVtZVNlY3RvcnMsIFZvbHVtZU5hbWUpOw0KPiA+ID4gKyAgfQ0KPiA+ID4gK30NCj4g PiA+IGRpZmYgLS1naXQgYS9TaGVsbFBrZy9MaWJyYXJ5L1VlZmlTaGVsbEdwdENvbW1hbmRMaWIv RmF0Rm9ybWF0LmgNCj4gPiA+IGIvU2hlbGxQa2cvTGlicmFyeS9VZWZpU2hlbGxHcHRDb21tYW5k TGliL0ZhdEZvcm1hdC5oDQo+ID4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+ID4gaW5kZXgg MDAwMDAwMDAwMDAwLi5kMWEzMjVhNTdhYmUNCj4gPiA+IC0tLSAvZGV2L251bGwNCj4gPiA+ICsr KyBiL1NoZWxsUGtnL0xpYnJhcnkvVWVmaVNoZWxsR3B0Q29tbWFuZExpYi9GYXRGb3JtYXQuaA0K PiA+ID4gQEAgLTAsMCArMSwxMTEgQEANCj4gPiA+ICsvKiogQGZpbGUNCj4gPiA+ICsNCj4gPiA+ ICsgIENvcHlyaWdodCAoYykgMjAwMyAtIDIwMTIsIFVsdHJhLUVtYmVkZGVkLmNvbS4gQWxsIHJp Z2h0cyByZXNlcnZlZDxCUj4NCj4gPiA+ICsNCj4gPiA+ICsgIFRoaXMgcHJvZ3JhbSBhbmQgdGhl IGFjY29tcGFueWluZyBtYXRlcmlhbHMNCj4gPiA+ICsgIGFyZSBsaWNlbnNlZCBhbmQgbWFkZSBh dmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZQ0KPiA+IEJTRA0K PiA+ID4gTGljZW5zZQ0KPiA+ID4gKyAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRp b24uICBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIG1heSBiZQ0KPiA+ID4gZm91bmQgYXQN Cj4gPiA+ICsgIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ic2QtbGljZW5zZS5waHAN Cj4gPiA+ICsNCj4gPiA+ICsgIFRIRSBQUk9HUkFNIElTIERJU1RSSUJVVEVEIFVOREVSIFRIRSBC U0QgTElDRU5TRSBPTiBBTiAiQVMgSVMiDQo+ID4gPiBCQVNJUywNCj4gPiA+ICsgIFdJVEhPVVQg V0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUg0KPiA+ID4g RVhQUkVTUyBPUiBJTVBMSUVELg0KPiA+ID4gKw0KPiA+ID4gKyoqLw0KPiA+ID4gKw0KPiA+ID4g Ky8qIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxNiwgQnJvYWRjb20uIEFsbCByaWdodHMgcmVz ZXJ2ZWQgKi8NCj4gPiA+ICsNCj4gPiA+ICsjaWZuZGVmIF9fRkFUX0ZPUk1BVF9IX18NCj4gPiA+ ICsjZGVmaW5lIF9fRkFUX0ZPUk1BVF9IX18NCj4gPiA+ICsNCj4gPiA+ICsjaW5jbHVkZSAiR3B0 V29ya2VyLmgiDQo+ID4gPiArDQo+ID4gPiArI2RlZmluZSBGQVRfU0VDVE9SX1NJWkUgICAgICAg ICAgICAgICAgICAgICA1MTINCj4gPiA+ICsjZGVmaW5lIEZBVF9CVUZGRVJfU0VDVE9SUyAgICAg ICAgICAgICAgICAgICAgMQ0KPiA+ID4gKyNkZWZpbmUgRkFUMzJfTEFTVF9DTFVTVEVSICAgICAg ICAgICAgICAweEZGRkZGRkZGDQo+ID4gPiArI2RlZmluZSBGQVQzMl9JTlZBTElEX0NMVVNURVIg ICAgICAgICAgIDB4RkZGRkZGRkYNCj4gPiA+ICsjZGVmaW5lIEZBVF9ESVJfRU5UUllfU0laRSAg ICAgICAgICAgICAgMzINCj4gPiA+ICsjZGVmaW5lIEZBVF9CVUZGRVJTICAgICAgICAgICAgICAg ICAgICAgMQ0KPiA+ID4gKyNkZWZpbmUgREVGQVVMVF9GQVRfTEFCRUxfTkFNRSAgICAgICAgICAi RUZJVk9MIg0KPiA+ID4gKw0KPiA+ID4gKyNkZWZpbmUgR0VUXzMyQklUX1dPUkQoQnVmZmVyLCBM b2NhdGlvbikNCj4gPiA+ICggKChVSU5UMzIpQnVmZmVyW0xvY2F0aW9uICsgM10gPDwgMjQpICsg XA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKChVSU5UMzIpQnVmZmVyW0xvY2F0aW9uICsgMl0gPDwxNiApICsgXA0KPiA+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChVSU5UMzIpQnVm ZmVyW0xvY2F0aW9uICsgMV0gPDwgOCkgKyBcDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoVUlOVDMyKUJ1ZmZlcltMb2NhdGlvbiswXSAp DQo+ID4gPiArDQo+ID4gPiArI2RlZmluZSBHRVRfMTZCSVRfV09SRChCdWZmZXIsIExvY2F0aW9u KQ0KPiA+ID4gKCAoKFVJTlQxNilCdWZmZXJbTG9jYXRpb24gKyAxXSA8PCA4KSArIFwNCj4gPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChVSU5U MTYpQnVmZmVyW0xvY2F0aW9uKzBdKQ0KPiA+ID4gKw0KPiA+ID4gKyNkZWZpbmUgU0VUXzMyQklU X1dPUkQoQnVmZmVyLCBMb2NhdGlvbiwgVmFsdWUpICAgeyBCdWZmZXJbTG9jYXRpb24gKyAwXQ0K PiA+ID0NCj4gPiA+IChVSU5UOCkoKFZhbHVlKSAmIDB4RkYpOyBcDQo+ID4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdWZmZXJbTG9jYXRpb24g KyAxXSA9IChVSU5UOCkoKFZhbHVlID4+IDgpICYNCj4gPiAweEZGKTsNCj4gPiA+IFwNCj4gPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1ZmZl cltMb2NhdGlvbiArIDJdID0gKFVJTlQ4KSgoVmFsdWUgPj4gMTYpICYNCj4gPiA+IDB4RkYpOyBc DQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBCdWZmZXJbTG9jYXRpb24gKyAzXSA9IChVSU5UOCkoKFZhbHVlID4+IDI0KSAmDQo+ID4gPiAw eEZGKTsgfQ0KPiA+ID4gKw0KPiA+ID4gKyNkZWZpbmUgU0VUXzE2QklUX1dPUkQoQnVmZmVyLCBM b2NhdGlvbiwgVmFsdWUpICAgeyBCdWZmZXJbTG9jYXRpb24gKyAwXQ0KPiA+ID0NCj4gPiA+IChV SU5UOCkoKFZhbHVlKSAmIDB4RkYpOyBcDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBCdWZmZXJbTG9jYXRpb24gKyAxXSA9IChVSU5UOCko KFZhbHVlID4+IDgpICYNCj4gPiA+IDB4RkYpOyB9DQo+ID4gPiArDQo+ID4gPiArdHlwZWRlZiBl bnVtIGVGYXRUeXBlDQo+ID4gPiArew0KPiA+ID4gKyAgRkFUX1RZUEVfMTYsDQo+ID4gPiArICBG QVRfVFlQRV8zMg0KPiA+ID4gK30gRkFUX0ZTX1RZUEU7DQo+ID4gPiArDQo+ID4gPiArDQo+ID4g PiArLy8gRm9yd2FyZCBkZWNsYXJhdGlvbg0KPiA+ID4gK3R5cGVkZWYgc3RydWN0IF9GQVRfQlVG RkVSIEZBVF9CVUZGRVI7DQo+ID4gPiArDQo+ID4gPiArc3RydWN0IF9GQVRfQlVGRkVSIHsNCj4g PiA+ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAgIFNlY3RvcltGQVRfU0VDVE9SX1NJWkUgKiBG QVRfQlVGRkVSX1NFQ1RPUlNdOw0KPiA+ID4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgQWRk cmVzczsNCj4gPiA+ICsgIEJPT0xFQU4gICAgICAgICAgICAgICAgIERpcnR5Ow0KPiA+ID4gKyAg VUlOVDggKlB0cjsNCj4gPiA+ICsNCj4gPiA+ICsgIC8vIE5leHQgaW4gY2hhaW4gb2Ygc2VjdG9y IGJ1ZmZlcnMNCj4gPiA+ICsgIHN0cnVjdCBGQVRfQlVGRkVSICAgICAgICpOZXh0QnVmOw0KPiA+ ID4gK307DQo+ID4gPiArDQo+ID4gPiArdHlwZWRlZiBzdHJ1Y3QNCj4gPiA+ICt7DQo+ID4gPiAr ICAvLyBGaWxlc3lzdGVtIGdsb2JhbHMNCj4gPiA+ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAg IFNlY3RvcnNQZXJDbHVzdGVyOw0KPiA+ID4gKyAgRUZJX0xCQSAgICAgICAgICAgICAgICAgQ2x1 c3RlckJlZ2luTGJhOw0KPiA+ID4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgUm9vdGRpckZp cnN0Q2x1c3RlcjsNCj4gPiA+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgIFJvb3RkaXJGaXJz dFNlY3RvcjsNCj4gPiA+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgIFJvb3RkaXJTZWN0b3Jz Ow0KPiA+ID4gKyAgRUZJX0xCQSAgICAgICAgICAgICAgICAgRmF0QmVnaW5MYmE7DQo+ID4gPiAr ICBVSU5UMTYgICAgICAgICAgICAgICAgICBGc0luZm9TZWN0b3I7DQo+ID4gPiArICBFRklfTEJB ICAgICAgICAgICAgICAgICBMYmFCZWdpbjsNCj4gPiA+ICsgIFVJTlROICAgICAgICAgICAgICAg ICAgIEZhdFNlY3RvcnM7DQo+ID4gPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICBOZXh0RnJl ZUNsdXN0ZXI7DQo+ID4gPiArICBVSU5UMTYgICAgICAgICAgICAgICAgICBSb290RW50cnlDb3Vu dDsNCj4gPiA+ICsgIFVJTlQxNiAgICAgICAgICAgICAgICAgIFJlc2VydmVkU2VjdG9yczsNCj4g PiA+ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAgIE51bU9mRmF0czsNCj4gPiA+ICsgIEZBVF9G U19UWVBFICAgICAgICAgICAgIEZhdFR5cGU7DQo+ID4gPiArDQo+ID4gPiArICAvLyBXb3JraW5n IGJ1ZmZlcg0KPiA+ID4gKyAgRkFUX0JVRkZFUiAgICAgICAgICAgICAgQ3VycmVudFNlY3RvcjsN Cj4gPiA+ICsgIC8vIEZBVCBCdWZmZXINCj4gPiA+ICsgIEZBVF9CVUZGRVIgICAgICAgICAgICAg ICpGYXRCdWZmZXJIZWFkOw0KPiA+ID4gKyAgRkFUX0JVRkZFUiAgICAgICAgICAgICAgRmF0QnVm ZmVyc1tGQVRfQlVGRkVSU107DQo+ID4gPiArICBFRklfTEJBICAgICAgICAgICAgICAgICBTdGFy dGluZ0xCQTsNCj4gPiA+ICsgIEVGSV9MQkEgICAgICAgICAgICAgICAgIEVuZGluZ0xCQTsNCj4g PiA+ICsgIEVGSV9CTE9DS19JT19QUk9UT0NPTCAgICpCbG9ja0lvOw0KPiA+ID4gKyAgRUZJX0RJ U0tfSU9fUFJPVE9DT0wgICAgKkRpc2tJbzsNCj4gPiA+ICsNCj4gPiA+ICt9IEZBVEZTOw0KPiA+ ID4gKw0KPiA+ID4gKw0KPiA+ID4gKw0KPiA+ID4gKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCj4g PiA+ICsvLyBQcm90b3R5cGVzDQo+ID4gPiArLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPiA+ID4g K0VGSV9TVEFUVVMNCj4gPiA+ICtGYXRGb3JtYXQgKA0KPiA+ID4gKyAgSU4gRUZJX0xCQSAgICAg ICAgICAgICAgICAgICBTdGFydGluZ0xCQSwNCj4gPiA+ICsgIElOIEVGSV9MQkEgICAgICAgICAg ICAgICAgICAgRW5kaW5nTEJBLA0KPiA+ID4gKyAgSU4gRUZJX0JMT0NLX0lPX1BST1RPQ09MICAg ICAqQmxvY2tJbywNCj4gPiA+ICsgIElOIEVGSV9ESVNLX0lPX1BST1RPQ09MICAgICAgKkRpc2tJ bywNCj4gPiA+ICsgIElOIENIQVI4ICAgICAgICAgICAgICAgICAgICAgKlZvbHVtZU5hbWUsDQo+ ID4gPiArICBJTiBCT09MRUFOICAgICAgICAgICAgICAgICAgIEZvcmNlRmF0MzINCj4gPiA+ICsg ICk7DQo+ID4gPiArDQo+ID4gPiArI2VuZGlmDQo+ID4gPiBkaWZmIC0tZ2l0IGEvU2hlbGxQa2cv TGlicmFyeS9VZWZpU2hlbGxHcHRDb21tYW5kTGliL0dwdFdvcmtlci5jDQo+ID4gPiBiL1NoZWxs UGtnL0xpYnJhcnkvVWVmaVNoZWxsR3B0Q29tbWFuZExpYi9HcHRXb3JrZXIuYw0KPiA+ID4gbmV3 IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiA+IGluZGV4IDAwMDAwMDAwMDAwMC4uMDU0NmM5NDQ4OGIw DQo+ID4gPiAtLS0gL2Rldi9udWxsDQo+ID4gPiArKysgYi9TaGVsbFBrZy9MaWJyYXJ5L1VlZmlT aGVsbEdwdENvbW1hbmRMaWIvR3B0V29ya2VyLmMNCj4gPiA+IEBAIC0wLDAgKzEsMTkwMiBAQA0K PiA+ID4gKy8qKiBAZmlsZQ0KPiA+ID4gK0NvcHlyaWdodCAoYykgMjAwNiAtIDIwMTMsIEludGVs IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gPiA+ICtDb3B5cmlnaHQg KGMpIDIwMTYsIEJyb2FkY29tLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gPiA+ICtUaGlz IHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQo+ID4gPiArYXJlIGxpY2Vu c2VkIGFuZCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2Yg dGhlDQo+ID4gQlNEDQo+ID4gPiBMaWNlbnNlDQo+ID4gPiArd2hpY2ggYWNjb21wYW5pZXMgdGhp cyBkaXN0cmlidXRpb24uICBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIG1heSBiZQ0KPiA+ ID4gZm91bmQgYXQNCj4gPiA+ICtodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLWxp Y2Vuc2UucGhwDQo+ID4gPiArDQo+ID4gPiArVEhFIFBST0dSQU0gSVMgRElTVFJJQlVURUQgVU5E RVIgVEhFIEJTRCBMSUNFTlNFIE9OIEFOICJBUyBJUyINCj4gPiA+IEJBU0lTLA0KPiA+ID4gK1dJ VEhPVVQgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUg0K PiA+ID4gRVhQUkVTUyBPUiBJTVBMSUVELg0KPiA+ID4gKw0KPiA+ID4gKyoqLw0KPiA+ID4gKw0K PiA+ID4gKyNpbmNsdWRlICJHcHRXb3JrZXIuaCINCj4gPiA+ICsNCj4gPiA+ICsjZGVmaW5lIEdQ VF9ERUJVR19MRVZFTCAwDQo+ID4gPiArDQo+ID4gPiArU1RBVElDIEVGSV9QQVJUSVRJT05fVEFC TEVfSEVBREVSICAgKlByaW1hcnlIZWFkZXIgICAgPSBOVUxMOw0KPiA+ID4gK1NUQVRJQyBFRklf UEFSVElUSU9OX1RBQkxFX0hFQURFUiAgICpCYWNrdXBIZWFkZXIgICAgID0gTlVMTDsNCj4gPiA+ ICtTVEFUSUMgRUZJX1BBUlRJVElPTl9FTlRSWSAgICAgICAgICAqUGFydEVudHJ5ICAgICAgICA9 IE5VTEw7DQo+ID4gPiArU1RBVElDIEVGSV9QQVJUSVRJT05fRU5UUllfU1RBVFVTICAgKlBFbnRy eVN0YXR1cyAgICAgPSBOVUxMOw0KPiA+ID4gKw0KPiA+ID4gK1NUQVRJQyBFRklfQkxPQ0tfSU9f UFJPVE9DT0wgICAgICAgICpCbG9ja0lvOw0KPiA+ID4gK1NUQVRJQyBFRklfRElTS19JT19QUk9U T0NPTCAgICAgICAgICpEaXNrSW87DQo+ID4gPiArDQo+ID4gPiArU1RBVElDIEJPT0xFQU4gICAg ICAgICAgICAgICAgICAgICAgTWJyVmFsaWQ7DQo+ID4gPiArU1RBVElDIEJPT0xFQU4gICAgICAg ICAgICAgICAgICAgICAgR3B0VmFsaWQ7DQo+ID4gPiArDQo+ID4gPiArU1RBVElDIEVGSV9LTk9X Tl9QQVJUSVRJT05fVFlQRSBQYXJ0aXRpb25UeXBlc1tdID0NCj4gPiA+ICt7DQo+ID4gPiArICAv LyBLbm93biBQYXJ0aXRpb24gdHlwZSBHVUlEcw0KPiA+ID4gKyAgLy8gRXhwYW5kIHRoaXMgdGFi bGUgYXMgbmVlZGVkLg0KPiA+ID4gKyAgLy8gU3RhcnRpbmcgd2l0aCBFRkkgU3lzdGVtIHBhcnRp dGlvbg0KPiA+ID4gKyAgeyB7IDB4QzEyQTczMjhMLCAweEY4MUYsIDB4MTFEMiwgeyAweEJBLCAw eDRCLCAweDAwLCAweEEwLCAweEM5LCAweDNFLA0KPiA+IDB4QzksDQo+ID4gPiAweDNCIH0gfSwg TCJFRkkgU3lzdGVtIiB9LA0KPiA+ID4gKyAgLy8gS25vd24gV2luZG93cyBwYXJ0aXRpb24gdHlw ZXMNCj4gPiA+ICsgIHsgeyAweEUzQzlFMzE2TCwgMHgwQjVDLCAweDREQjgsIHsgMHg4MSwgMHg3 RCwgMHhGOSwgMHgyRCwgMHhGMCwgMHgwMiwNCj4gPiAweDE1LA0KPiA+ID4gMHhBRSB9IH0sIEwi TVMgV2luZG93cyBSZXNlcnZlZCAoTVNSKSIgfSwNCj4gPiA+ICsgIHsgeyAweEVCRDBBMEEyTCwg MHhCOUU1LCAweDQ0MzMsIHsgMHg4NywgMHhDMCwgMHg2OCwgMHhCNiwgMHhCNywgMHgyNiwNCj4g PiAweDk5LA0KPiA+ID4gMHhDNyB9IH0sIEwiTVMgV2luZG93cyBCYXNpYyBEYXRhIiB9LA0KPiA+ ID4gKyAgeyB7IDB4NTgwOEM4QUFMLCAweDdFOEYsIDB4NDJFMCwgeyAweDg1LCAweEQyLCAweEUx LCAweEU5LCAweDA0LCAweDM0LA0KPiA+IDB4Q0YsDQo+ID4gPiAweEIzIH0gfSwgTCJNUyBXaW5k b3dzIExETSBNZXRhZGF0YSIgfSwNCj4gPiA+ICsgIHsgeyAweEFGOUI2MEEwTCwgMHgxNDMxLCAw eDRGNjIsIHsgMHhCQywgMHg2OCwgMHgzMywgMHgxMSwgMHg3MSwgMHg0QSwNCj4gPiAweDY5LA0K PiA+ID4gMHhBRCB9IH0sIEwiTVMgV2luZG93cyBMRE0gRGF0YSIgfSwNCj4gPiA+ICsgIHsgeyAw eERFOTRCQkE0TCwgMHgwNkQxLCAweDRENDAsIHsgMHhBMSwgMHg2QSwgMHhCRiwgMHhENSwgMHgw MSwgMHg3OSwNCj4gPiA+IDB4RDYsIDB4QUMgfSB9LCBMIk1TIFdpbmRvd3MgUmVjb3ZlcnkgRW52 aXJvbm1lbnQiIH0sDQo+ID4gPiArICB7IHsgMHhFNzVDQUY4RkwsIDB4RjY4MCwgMHg0Q0VFLCB7 IDB4QUYsIDB4QTMsIDB4QjAsIDB4MDEsIDB4RTUsIDB4NkUsDQo+ID4gMHhGQywNCj4gPiA+IDB4 MkQgfSB9LCBMIk1TIFdpbmRvd3MgU3RvcmFnZSBTcGFjZXMiIH0sDQo+ID4gPiArICAvLyBLbm93 biBMaW51eCBwYXJ0aXRpb24gdHlwZXMNCj4gPiA+ICsgIHsgeyAweDBGQzYzREFGTCwgMHg4NDgz LCAweDQ3NzIsIHsgMHg4RSwgMHg3OSwgMHgzRCwgMHg2OSwgMHhEOCwgMHg0NywNCj4gPiAweDdE LA0KPiA+ID4gMHhFNCB9IH0sIEwiTGludXggRmlsZXN5c3RlbSBEYXRhIiB9LA0KPiA+ID4gKyAg eyB7IDB4QTE5RDg4MEZMLCAweDA1RkMsIDB4NEQzQiwgeyAweEEwLCAweDA2LCAweDc0LCAweDNG LCAweDBGLCAweDg0LA0KPiA+IDB4OTEsDQo+ID4gPiAweDFFIH0gfSwgTCJMaW51eCBSQUlEIiB9 LA0KPiA+ID4gKyAgeyB7IDB4NDQ0Nzk1NDBMLCAweEYyOTcsIDB4NDFCMiwgeyAweDlBLCAweEY3 LCAweEQxLCAweDMxLCAweEQ1LCAweEYwLA0KPiA+IDB4NDUsDQo+ID4gPiAweDhBIH0gfSwgTCJM aW51eCBSb290ICh4ODYpIiB9LA0KPiA+ID4gKyAgeyB7IDB4NEY2OEJDRTNMLCAweEU4Q0QsIDB4 NERCMSwgeyAweDk2LCAweEU3LCAweEZCLCAweENBLCAweEY5LCAweDg0LA0KPiA+IDB4QjcsDQo+ ID4gPiAweDA5IH0gfSwgTCJMaW51eCBSb290ICh4ODYtNjQpIiB9LA0KPiA+ID4gKyAgeyB7IDB4 NjlEQUQ3MTBMLCAweDJDRTQsIDB4NEUzQywgeyAweEIxLCAweDZDLCAweDIxLCAweEExLCAweEQ0 LCAweDlBLA0KPiA+ID4gMHhCZSwgMHhEMyB9IH0sIEwiTGludXggUm9vdCAoQVJNIDMyLWJpdCki IH0sDQo+ID4gPiArICB7IHsgMHhCOTIxQjA0NUwsIDB4MURGMCwgMHg0MUMzLCB7IDB4QUYsIDB4 NDQsIDB4NEMsIDB4NkYsIDB4MjgsIDB4MEQsDQo+ID4gMHgzRiwNCj4gPiA+IDB4QUUgfSB9LCBM IkxpbnV4IFJvb3QgKEFSTSA2NC1iaXQvQUFSQ0g2NCkiIH0sDQo+ID4gPiArICB7IHsgMHgwNjU3 RkQ2REwsIDB4QTRBQiwgMHg0M0M0LCB7IDB4ODQsIDB4RTUsIDB4MDksIDB4MzMsIDB4QzgsIDB4 NEIsDQo+ID4gMHg0RiwNCj4gPiA+IDB4NEYgfSB9LCBMIkxpbnV4IFN3YXAiIH0sDQo+ID4gPiAr ICB7IHsgMHhFNkQ2RDM3OUwsIDB4RjUwNywgMHg0NEMyLCB7IDB4QTIsIDB4M0MsIDB4MjMsIDB4 OEYsIDB4MkEsIDB4M0QsDQo+ID4gMHhGOSwNCj4gPiA+IDB4MjggfSB9LCBMIkxpbnV4IExvZ2lj YWwgVm9sdW1lIE1hbmFnZXIgKExWTSkiIH0sDQo+ID4gPiArICB7IHsgMHg5MzNBQzdFMUwsIDB4 MkVCNCwgMHg0RjEzLCB7IDB4QjgsIDB4NDQsIDB4MEUsIDB4MTQsIDB4RTIsIDB4QUUsDQo+ID4g MHhGOSwNCj4gPiA+IDB4MTUgfSB9LCBMIkxpbnV4IC9ob21lIiB9LA0KPiA+ID4gKyAgeyB7IDB4 M0I4Rjg0MjVMLCAweDIwRTAsIDB4NEYzQiwgeyAweDkwLCAweDdGLCAweDFBLCAweDI1LCAweEE3 LCAweDZGLA0KPiA+IDB4OTgsDQo+ID4gPiAweEU4IH0gfSwgTCJMaW51eCAvc3J2IChzZXJ2ZXIg ZGF0YSkiIH0sDQo+ID4gPiArICB7IHsgMHg3RkZFQzVDOUwsIDB4MkQwMCwgMHg0OUI3LCB7IDB4 ODksIDB4NDEsIDB4M0UsIDB4QTEsIDB4MEEsIDB4NTUsDQo+ID4gMHg4NiwNCj4gPiA+IDB4Qjcg fSB9LCBMIkxpbnV4IFBsYWluIGRtLWNyeXB0IiB9LA0KPiA+ID4gKyAgeyB7IDB4Q0E3RDdDQ0JM LCAweDYzRUQsIDB4NEM1MywgeyAweDg2LCAweDFDLCAweDE3LCAweDQyLCAweDUzLCAweDYwLA0K PiA+IDB4NTksDQo+ID4gPiAweENDIH0gfSwgTCJMaW51eCBMVUtTIiB9LA0KPiA+ID4gKyAgeyB7 IDB4OERBNjMzMzlMLCAweDAwMDcsIDB4NjBDMCwgeyAweEM0LCAweDM2LCAweDA4LCAweDNBLCAw eEM4LCAweDIzLA0KPiA+IDB4MDksDQo+ID4gPiAweDA4IH0gfSwgTCJMaW51eCBSZXNlcnZlZCIg fSwNCj4gPiA+ICt9Ow0KPiA+ID4gKw0KPiA+ID4gK01BU1RFUl9CT09UX1JFQ09SRCBQcm90ZWN0 aXZlTWJyVGVtcGxhdGUgPSB7DQo+ID4gPiArICB7IDAgfSwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJvb3N0U3RyYXBDb2RlIFs0NDBdDQo+ID4g PiArICB7IDAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8vIFVuaXF1ZU1iclNpZ25hdHVyZVs0XSAodW51c2VkKQ0KPiA+ID4gKyAgeyAwIH0sICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBVbmtub3du WzJdDQo+ID4gPiArDQo+ID4gPiArICAvLyBQQVJUSVRJT05TDQo+ID4gPiArICB7DQo+ID4gPiAr ICAgIC8vIE1CUl9QQVJUSVRJT05fUkVDT1JEDQo+ID4gPiArICAgIHsNCj4gPiA+ICsgICAgICAw LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJvb3RJ bmRpY2F0b3INCj4gPiA+ICsgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8vIFN0YXJ0SGVhZA0KPiA+ID4gKyAgICAgIDB4MSwgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3RhcnRTZWN0b3INCj4gPiA+ ICsgICAgICAweDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8vIFN0YXJ0VHJhY2sNCj4gPiA+ICsgICAgICBQTUJSX0dQVF9QQVJUSVRJT04sICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8vIE9TSW5kaWNhdG9yDQo+ID4gPiArICAgICAgMHhmZiwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBFbmRIZWFkDQo+ ID4gPiArICAgICAgMHhmZiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvLyBFbmRTZWN0b3INCj4gPiA+ICsgICAgICAweGZmLCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEVuZFRyYWNrDQo+ID4gPiArICAgICAgeyAweDEs IDB4MCwgMHgwLCAweDAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTdGFydGluZ0xi YVs0XQ0KPiA+ID4gKyAgICAgIHsgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiB9LCAgICAgICAgICAg ICAgICAgICAgICAgLy8gU2l6ZUluTGJhWzRdDQo+ID4gPiArICAgIH0sDQo+ID4gPiArICAgIHsg MCB9LCB7IDAgfSwgeyAwIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBVbnVz ZWQgcGFydGl0aW9ucw0KPiA+ID4gKyAgfSwNCj4gPiA+ICsNCj4gPiA+ICsgIE1CUl9TSUdOQVRV UkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNpZ25hdHVyZQ0K PiA+ID4gK307DQo+ID4gPiArDQo+ID4gPiArU1RBVElDIFVJTlQzMiBDdXJSYW5kID0gMTsNCj4g PiA+ICsNCj4gPiA+ICsvKioNCj4gPiA+ICsgIEdldCByYW5kb20gc2VlZCBiYXNlZCBvbiB0aGUg UlRDDQo+ID4gPiArDQo+ID4gPiArKiovDQo+ID4gPiArDQo+ID4gPiArU1RBVElDDQo+ID4gPiAr Vk9JRA0KPiA+ID4gK1NyYW5kIChWT0lEKQ0KPiA+ID4gK3sNCj4gPiA+ICsgIEVGSV9USU1FICAg ICAgICAgICAgICAgICAgVGltZTsNCj4gPiA+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAg U2VlZDsNCj4gPiA+ICsgIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgTW9ub3RvbmljQ291bnQ7 DQo+ID4gPiArDQo+ID4gPiArICBnUlQtPkdldFRpbWUgKCZUaW1lLCBOVUxMKTsNCj4gPiA+ICsg IFNlZWQgPSAoflRpbWUuSG91ciA8PCAyNCB8IFRpbWUuRGF5IDw8IDE2IHwgVGltZS5NaW51dGUg PDwgOCB8DQo+ID4gPiBUaW1lLlNlY29uZCk7DQo+ID4gPiArICBTZWVkIF49IFRpbWUuTmFub3Nl Y29uZDsNCj4gPiA+ICsgIFNlZWQgXj0gVGltZS5ZZWFyIDw8IDc7DQo+ID4gPiArDQo+ID4gPiAr ICBnQlMtPkdldE5leHRNb25vdG9uaWNDb3VudCAoJk1vbm90b25pY0NvdW50KTsNCj4gPiA+ICsg IFNlZWQgKz0gKFVJTlQzMilNb25vdG9uaWNDb3VudDsNCj4gPiA+ICsNCj4gPiA+ICsgIC8qIFN0 b3JlIHRoaXMgc2VlZCAqLw0KPiA+ID4gKyAgQ3VyUmFuZCA9IChVSU5UMzIpU2VlZDsNCj4gPiA+ ICt9DQo+ID4gPiArDQo+ID4gPiArLyoqDQo+ID4gPiArICBHZXQgYSBwc2V1ZG8tcmFuZG9tIG51 bWJlcg0KPiA+ID4gKw0KPiA+ID4gKyAgQHJldHZhbCBBIHBzZXVkby1yYW5kb20gbnVtYmVyIGlu IHRoZSByYW5nZSAwIC0gMHg3ZmZmDQo+ID4gPiArKiovDQo+ID4gPiArDQo+ID4gPiArU1RBVElD IFVJTlROIFJhbmQgKFZPSUQpDQo+ID4gPiArew0KPiA+ID4gKyAgLyogcmV0dXJuIGEgcHNldWRv LXJhbmRvbSBpbiByYW5nZSAwIC0gMHg3ZmZmICovDQo+ID4gPiArICByZXR1cm4gKChDdXJSYW5k ID0gQ3VyUmFuZCAqIDIxNDAxM0wgKyAyNTMxMDExTCkgPj4gMTYpICYgMHg3ZmZmOw0KPiA+ID4g K30NCj4gPiA+ICsNCj4gPiA+ICsvKioNCj4gPiA+ICsgIEdlbmVyYXRlIGEgR1VJRA0KPiA+ID4g Kw0KPiA+ID4gKyAgQHBhcmFtW2luXSAgR3VpZCAgQSBwb2ludGVyIHRvIGEgR1VJRCByZWNlaXZp bmcgYSBnZW5lcmF0ZWQgdmFsdWUNCj4gPiA+ICsqKi8NCj4gPiA+ICsNCj4gPiA+ICtTVEFUSUMg Vk9JRA0KPiA+ID4gK0dlbmVyYXRlR3VpZCAoT1VUIEdVSUQgKkd1aWQpDQo+ID4gPiArew0KPiA+ ID4gKyAgVUlOVE4gSW5kZXg7DQo+ID4gPiArICBVSU5UMTYgQnVmZmVyW3NpemVvZihHVUlEKV07 DQo+ID4gPiArDQo+ID4gPiArICAvKiBHZW5lcmF0ZXMgMTI4IHJhbmRvbSBiaXRzIGZvciBuZXcg VVVJRCAqLw0KPiA+ID4gKyAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgc2l6ZW9mKEdVSUQpOyBJ bmRleCsrKSB7DQo+ID4gPiArICAgIFVJTlROIFY7DQo+ID4gPiArDQo+ID4gPiArICAgIFYgPSBS YW5kICgpID4+IDc7DQo+ID4gPiArICAgIEJ1ZmZlcltJbmRleF0gPSAoVUlOVDE2KVY7DQo+ID4g PiArICB9DQo+ID4gPiArICAvKiBzZXQgdmFyaWFudCAxMHggYW5kIHZlcnNpb24gNCBhcyByZXF1 aXJlZCBieSBSRkMgNDEyMiAqLw0KPiA+ID4gKyAgQnVmZmVyWzhdID0gMHg4MCB8IChCdWZmZXJb OF0gJiAweDNmKTsNCj4gPiA+ICsgIEJ1ZmZlcls2XSA9IDB4NDAgfCAoQnVmZmVyWzZdICYgMHhm KTsNCj4gPiA+ICsgIENvcHlHdWlkIChHdWlkLCAoQ09OU1QgR1VJRCAqKUJ1ZmZlcik7DQo+ID4g PiArfQ0KPiA+ID4gKw0KPiA+ID4gKy8qKg0KPiA+ID4gKyAgQ2xlYW4gdXAgZ2xvYmFscw0KPiA+ ID4gKyoqLw0KPiA+ID4gK1ZPSUQNCj4gPiA+ICtHcHRDbGVhbnVwR2xvYmFscyAoVk9JRCkNCj4g PiA+ICt7DQo+ID4gPiArICBTSEVMTF9GUkVFX05PTl9OVUxMIChQcmltYXJ5SGVhZGVyKTsNCj4g PiA+ICsgIFNIRUxMX0ZSRUVfTk9OX05VTEwgKEJhY2t1cEhlYWRlcik7DQo+ID4gPiArICBTSEVM TF9GUkVFX05PTl9OVUxMIChQYXJ0RW50cnkpOw0KPiA+ID4gKyAgU0hFTExfRlJFRV9OT05fTlVM TCAoUEVudHJ5U3RhdHVzKTsNCj4gPiA+ICsgIEdwdFZhbGlkID0gRkFMU0U7DQo+ID4gPiArICBN YnJWYWxpZCA9IEZBTFNFOw0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICsvKioNCj4gPiA+ICsg IENhdXRpb246IFRoaXMgZnVuY3Rpb24gbWF5IHJlY2VpdmUgdW50cnVzdGVkIGlucHV0Lg0KPiA+ ID4gKyAgVGhlIEdQVCBwYXJ0aXRpb24gdGFibGUgaGVhZGVyIGlzIGV4dGVybmFsIGlucHV0LCBz byB0aGlzIHJvdXRpbmUNCj4gPiA+ICsgIHdpbGwgZG8gYmFzaWMgdmFsaWRhdGlvbiBmb3IgR1BU IHBhcnRpdGlvbiB0YWJsZSBoZWFkZXIgYmVmb3JlIHJldHVybi4NCj4gPiA+ICsNCj4gPiA+ICsg IEBwYXJhbVtpbl0gIExiYSAgICAgICAgIFRoZSBzdGFydGluZyBMYmEgb2YgdGhlIFBhcnRpdGlv biBUYWJsZQ0KPiA+ID4gKyAgQHBhcmFtW291dF0gUGFydEhlYWRlciAgU3RvcmVzIHRoZSBwYXJ0 aXRpb24gdGFibGUgdGhhdCBpcyByZWFkDQo+ID4gPiArDQo+ID4gPiArICBAcmV0dmFsIEVGSV9T VUNDRVNTICAgICBUaGUgcGFydGl0aW9uIHRhYmxlIGlzIHZhbGlkDQo+ID4gPiArICBAcmV0dmFs IEVSUk9SICAgICAgICAgICBUaGUgcGFydGl0aW9uIHRhYmxlIGlzIG5vdCB2YWxpZA0KPiA+ID4g Kw0KPiA+ID4gKyoqLw0KPiA+ID4gK1NUQVRJQw0KPiA+ID4gK0VGSV9TVEFUVVMNCj4gPiA+ICtQ YXJ0aXRpb25WYWxpZEdwdFRhYmxlICgNCj4gPiA+ICsgIElOICBFRklfTEJBICAgICAgICAgICAg ICAgICAgICAgTGJhLA0KPiA+ID4gKyAgT1VUIEVGSV9QQVJUSVRJT05fVEFCTEVfSEVBREVSICAq UGFydEhlYWRlcg0KPiA+ID4gKyAgKTsNCj4gPiA+ICsNCj4gPiA+ICsvKioNCj4gPiA+ICsgIENo ZWNrIGlmIHRoZSBDUkMgZmllbGQgaW4gdGhlIFBhcnRpdGlvbiB0YWJsZSBoZWFkZXIgaXMgdmFs aWQNCj4gPiA+ICsgIGZvciBQYXJ0aXRpb24gZW50cnkgYXJyYXkuDQo+ID4gPiArDQo+ID4gPiAr ICBAcGFyYW1baW5dICBQYXJ0SGVhZGVyICBQYXJ0aXRpb24gdGFibGUgaGVhZGVyIHN0cnVjdHVy ZQ0KPiA+ID4gKw0KPiA+ID4gKyAgQHJldHZhbCBUUlVFICAgICAgdGhlIENSQyBpcyB2YWxpZA0K PiA+ID4gKyAgQHJldHZhbCBGQUxTRSAgICAgdGhlIENSQyBpcyBpbnZhbGlkDQo+ID4gPiArDQo+ ID4gPiArKiovDQo+ID4gPiArU1RBVElDDQo+ID4gPiArQk9PTEVBTg0KPiA+ID4gK1BhcnRpdGlv bkNoZWNrR3B0RW50cnlBcnJheUNSQyAoDQo+ID4gPiArICBJTiAgRUZJX1BBUlRJVElPTl9UQUJM RV9IRUFERVIgICpQYXJ0SGVhZGVyDQo+ID4gPiArICApOw0KPiA+ID4gKw0KPiA+ID4gKw0KPiA+ ID4gKy8qKg0KPiA+ID4gKyAgUmVzdG9yZSBQYXJ0aXRpb24gVGFibGUgdG8gaXRzIGFsdGVybmF0 ZSBwbGFjZQ0KPiA+ID4gKyAgKFByaW1hcnkgLT4gQmFja3VwIG9yIEJhY2t1cCAtPiBQcmltYXJ5 KS4NCj4gPiA+ICsNCj4gPiA+ICsgIEBwYXJhbVtpbl0gIFBhcnRIZWFkZXIgIFBhcnRpdGlvbiB0 YWJsZSBoZWFkZXIgc3RydWN0dXJlLg0KPiA+ID4gKw0KPiA+ID4gKyAgQHJldHZhbCBUUlVFICAg ICAgUmVzdG9yaW5nIHN1Y2NlZWRzDQo+ID4gPiArICBAcmV0dmFsIEZBTFNFICAgICBSZXN0b3Jp bmcgZmFpbGVkDQo+ID4gPiArDQo+ID4gPiArKiovDQo+ID4gPiArU1RBVElDDQo+ID4gPiArQk9P TEVBTg0KPiA+ID4gK1BhcnRpdGlvblJlc3RvcmVHcHRUYWJsZSAoDQo+ID4gPiArICBJTiAgRUZJ X1BBUlRJVElPTl9UQUJMRV9IRUFERVIgICpQYXJ0SGVhZGVyDQo+ID4gPiArICApOw0KPiA+ID4g Kw0KPiA+ID4gKw0KPiA+ID4gKy8qKg0KPiA+ID4gKyAgVGhpcyByb3V0aW5lIHdpbGwgY2hlY2sg R1BUIHBhcnRpdGlvbiBlbnRyeSBhbmQgcmV0dXJuIGVudHJ5IHN0YXR1cy4NCj4gPiA+ICsNCj4g PiA+ICsgIENhdXRpb246IFRoaXMgZnVuY3Rpb24gbWF5IHJlY2VpdmUgdW50cnVzdGVkIGlucHV0 Lg0KPiA+ID4gKyAgVGhlIEdQVCBwYXJ0aXRpb24gZW50cnkgaXMgZXh0ZXJuYWwgaW5wdXQsIHNv IHRoaXMgcm91dGluZQ0KPiA+ID4gKyAgd2lsbCBkbyBiYXNpYyB2YWxpZGF0aW9uIGZvciBHUFQg cGFydGl0aW9uIGVudHJ5IGFuZCByZXBvcnQgc3RhdHVzLg0KPiA+ID4gKw0KPiA+ID4gKyAgQHBh cmFtW2luXSAgICBQYXJ0SGVhZGVyICAgIFBhcnRpdGlvbiB0YWJsZSBoZWFkZXIgc3RydWN0dXJl DQo+ID4gPiArICBAcGFyYW1baW5dICAgIFBhcnRFbnRyeSAgICAgVGhlIHBhcnRpdGlvbiBlbnRy eSBhcnJheQ0KPiA+ID4gKyAgQHBhcmFtW291dF0gICBQRW50cnlTdGF0dXMgIHRoZSBwYXJ0aXRp b24gZW50cnkgc3RhdHVzIGFycmF5DQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcmVjb3JkaW5nIHRoZSBzdGF0dXMgb2YgZWFjaCBwYXJ0aXRpb24NCj4gPiA+ICsNCj4gPiA+ ICsqKi8NCj4gPiA+ICtTVEFUSUMNCj4gPiA+ICtWT0lEDQo+ID4gPiArUGFydGl0aW9uQ2hlY2tH cHRFbnRyeSAoDQo+ID4gPiArICBJTiAgRUZJX1BBUlRJVElPTl9UQUJMRV9IRUFERVIgICpQYXJ0 SGVhZGVyLA0KPiA+ID4gKyAgSU4gIEVGSV9QQVJUSVRJT05fRU5UUlkgICAgICAgICAqUGFydEVu dHJ5LA0KPiA+ID4gKyAgT1VUIEVGSV9QQVJUSVRJT05fRU5UUllfU1RBVFVTICAqUEVudHJ5U3Rh dHVzDQo+ID4gPiArICApOw0KPiA+ID4gKw0KPiA+ID4gKw0KPiA+ID4gKy8qKg0KPiA+ID4gKyAg Q2hlY2tzIHRoZSBDUkMzMiB2YWx1ZSBpbiB0aGUgdGFibGUgaGVhZGVyLg0KPiA+ID4gKw0KPiA+ ID4gKyAgQHBhcmFtICBNYXhTaXplICAgTWF4IFNpemUgbGltaXQNCj4gPiA+ICsgIEBwYXJhbSAg U2l6ZSAgICAgIFRoZSBzaXplIG9mIHRoZSB0YWJsZQ0KPiA+ID4gKyAgQHBhcmFtICBIZHIgICAg ICAgVGFibGUgdG8gY2hlY2sNCj4gPiA+ICsNCj4gPiA+ICsgIEByZXR1cm4gVFJVRSAgICBDUkMg VmFsaWQNCj4gPiA+ICsgIEByZXR1cm4gRkFMU0UgICBDUkMgSW52YWxpZA0KPiA+ID4gKw0KPiA+ ID4gKyoqLw0KPiA+ID4gK1NUQVRJQw0KPiA+ID4gK0JPT0xFQU4NCj4gPiA+ICtQYXJ0aXRpb25D aGVja0NyY0FsdFNpemUgKA0KPiA+ID4gKyAgSU4gVUlOVE4gICAgICAgICAgICAgICAgIE1heFNp emUsDQo+ID4gPiArICBJTiBVSU5UTiAgICAgICAgICAgICAgICAgU2l6ZSwNCj4gPiA+ICsgIElO IE9VVCBFRklfVEFCTEVfSEVBREVSICAqSGRyDQo+ID4gPiArICApOw0KPiA+ID4gKw0KPiA+ID4g Kw0KPiA+ID4gKy8qKg0KPiA+ID4gKyAgQ2hlY2tzIHRoZSBDUkMzMiB2YWx1ZSBpbiB0aGUgdGFi bGUgaGVhZGVyLg0KPiA+ID4gKw0KPiA+ID4gKyAgQHBhcmFtICBNYXhTaXplICAgTWF4IFNpemUg bGltaXQNCj4gPiA+ICsgIEBwYXJhbSAgSGRyICAgICAgIFRhYmxlIHRvIGNoZWNrDQo+ID4gPiAr DQo+ID4gPiArICBAcmV0dXJuIFRSVUUgICAgICBDUkMgVmFsaWQNCj4gPiA+ICsgIEByZXR1cm4g RkFMU0UgICAgIENSQyBJbnZhbGlkDQo+ID4gPiArDQo+ID4gPiArKiovDQo+ID4gPiArU1RBVElD DQo+ID4gPiArQk9PTEVBTg0KPiA+ID4gK1BhcnRpdGlvbkNoZWNrQ3JjICgNCj4gPiA+ICsgIElO IFVJTlROICAgICAgICAgICAgICAgICBNYXhTaXplLA0KPiA+ID4gKyAgSU4gT1VUIEVGSV9UQUJM RV9IRUFERVIgICpIZHINCj4gPiA+ICsgICk7DQo+ID4gPiArDQo+ID4gPiArDQo+ID4gPiArLyoq DQo+ID4gPiArICBVcGRhdGVzIHRoZSBDUkMzMiB2YWx1ZSBpbiB0aGUgdGFibGUgaGVhZGVyLg0K PiA+ID4gKw0KPiA+ID4gKyAgQHBhcmFtICBTaXplICAgVGhlIHNpemUgb2YgdGhlIHRhYmxlDQo+ ID4gPiArICBAcGFyYW0gIEhkciAgICBUYWJsZSB0byB1cGRhdGUNCj4gPiA+ICsNCj4gPiA+ICsq Ki8NCj4gPiA+ICtTVEFUSUMNCj4gPiA+ICtWT0lEDQo+ID4gPiArUGFydGl0aW9uU2V0Q3JjQWx0 U2l6ZSAoDQo+ID4gPiArICBJTiBVSU5UTiAgICAgICAgICAgICAgICAgU2l6ZSwNCj4gPiA+ICsg IElOIE9VVCBFRklfVEFCTEVfSEVBREVSICAqSGRyDQo+ID4gPiArICApOw0KPiA+ID4gKw0KPiA+ ID4gKw0KPiA+ID4gKy8qKg0KPiA+ID4gKyAgVXBkYXRlcyB0aGUgQ1JDMzIgdmFsdWUgaW4gdGhl IHRhYmxlIGhlYWRlci4NCj4gPiA+ICsNCj4gPiA+ICsgIEBwYXJhbSAgSGRyICAgIFRhYmxlIHRv IHVwZGF0ZQ0KPiA+ID4gKw0KPiA+ID4gKyoqLw0KPiA+ID4gK1NUQVRJQw0KPiA+ID4gK1ZPSUQN Cj4gPiA+ICtQYXJ0aXRpb25TZXRDcmMgKA0KPiA+ID4gKyAgSU4gT1VUIEVGSV9UQUJMRV9IRUFE RVIgKkhkcg0KPiA+ID4gKyAgKTsNCj4gPiA+ICsNCj4gPiA+ICsNCj4gPiA+ICsvKioNCj4gPiA+ ICsgIEdldCBHUFQgdGFibGVzLg0KPiA+ID4gKw0KPiA+ID4gKyAgQ2F1dGlvbjogVGhpcyBmdW5j dGlvbiBtYXkgcmVjZWl2ZSB1bnRydXN0ZWQgaW5wdXQuDQo+ID4gPiArICBUaGUgR1BUIHBhcnRp dGlvbiB0YWJsZSBpcyBleHRlcm5hbCBpbnB1dCwgc28gdGhpcyByb3V0aW5lDQo+ID4gPiArICB3 aWxsIGRvIGJhc2ljIHZhbGlkYXRpb24gZm9yIEdQVCBwYXJ0aXRpb24gdGFibGUgYmVmb3JlIGlu c3RhbGwNCj4gPiA+ICsgIGNoaWxkIGhhbmRsZSBmb3IgZWFjaCBHUFQgcGFydGl0aW9uLg0KPiA+ ID4gKw0KPiA+ID4gKyAgQHBhcmFtW2luXSAgRGlza0lvUHJvdCAgICAgRGlza0lvIGludGVyZmFj ZS4NCj4gPiA+ICsgIEBwYXJhbVtpbl0gIEJsb2NrSW9Qcm90ICAgIEJsb2NrSW8gaW50ZXJmYWNl Lg0KPiA+ID4gKw0KPiA+ID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVmFsaWQg R1BUIGRpc2suDQo+ID4gPiArICBAcmV0dmFsIEVGSV9NRURJQV9DSEFOR0VEICAgICBNZWRpYSBj aGFuZ2VkIERldGVjdGVkLg0KPiA+ID4gKyAgQHJldHZhbCBvdGhlciAgICAgICAgICAgICAgICAg Tm90IGEgdmFsaWQgR1BUIGRpc2suDQo+ID4gPiArDQo+ID4gPiArKiovDQo+ID4gPiArRUZJX1NU QVRVUw0KPiA+ID4gK1BhcnRpdGlvbkdldEdwdFRhYmxlcyAoDQo+ID4gPiArICBJTiAgRUZJX0RJ U0tfSU9fUFJPVE9DT0wgICAgICAgICAqRGlza0lvUHJvdCwNCj4gPiA+ICsgIElOICBFRklfQkxP Q0tfSU9fUFJPVE9DT0wgICAgICAgICpCbG9ja0lvUHJvdA0KPiA+ID4gKyAgKQ0KPiA+ID4gK3sN Cj4gPiA+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ID4gPiArICBV SU5UMzIgICAgICAgICAgICAgICAgICAgICAgQmxvY2tTaXplOw0KPiA+ID4gKyAgRUZJX0xCQSAg ICAgICAgICAgICAgICAgICAgIExhc3RCbG9jazsNCj4gPiA+ICsgIFVJTlROICAgICAgICAgICAg ICAgICAgICAgICBJbmRleDsNCj4gPiA+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICBH cHRWYWxpZFN0YXR1czsNCj4gPiA+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICBNZWRp YUlkOw0KPiA+ID4gKyAgTUFTVEVSX0JPT1RfUkVDT1JEICAgICAgICAgICpQcm90ZWN0aXZlTWJy Ow0KPiA+ID4gKw0KPiA+ID4gKyAgLy8gQ2xlYXIgbGVmdG92ZXJzDQo+ID4gPiArICBHcHRDbGVh bnVwR2xvYmFscyAoKTsNCj4gPiA+ICsNCj4gPiA+ICsgIE1iclZhbGlkID0gRkFMU0U7DQo+ID4g PiArICBHcHRWYWxpZCA9IEZBTFNFOw0KPiA+ID4gKw0KPiA+ID4gKyAgUHJvdGVjdGl2ZU1iciA9 IE5VTEw7DQo+ID4gPiArDQo+ID4gPiArICBCbG9ja0lvICAgICAgID0gQmxvY2tJb1Byb3Q7DQo+ ID4gPiArICBEaXNrSW8gICAgICAgID0gRGlza0lvUHJvdDsNCj4gPiA+ICsNCj4gPiA+ICsgIGlm IChDdXJSYW5kID09IDEpIHsNCj4gPiA+ICsgICAgU3JhbmQgKCk7DQo+ID4gPiArICB9DQo+ID4g PiArDQo+ID4gPiArICBCbG9ja1NpemUgICAgID0gQmxvY2tJby0+TWVkaWEtPkJsb2NrU2l6ZTsN Cj4gPiA+ICsgIExhc3RCbG9jayAgICAgPSBCbG9ja0lvLT5NZWRpYS0+TGFzdEJsb2NrOw0KPiA+ ID4gKyAgTWVkaWFJZCAgICAgICA9IEJsb2NrSW8tPk1lZGlhLT5NZWRpYUlkOw0KPiA+ID4gKw0K PiA+ID4gKyAgREVCVUcgKChFRklfRF9WRVJCT1NFLCAiIEJsb2NrU2l6ZSA6ICVkIFxuIiwgQmxv Y2tTaXplKSk7DQo+ID4gPiArICBERUJVRyAoKEVGSV9EX1ZFUkJPU0UsICIgTGFzdEJsb2NrIDog JWx4IFxuIiwgTGFzdEJsb2NrKSk7DQo+ID4gPiArDQo+ID4gPiArICBHcHRWYWxpZFN0YXR1cyA9 IEVGSV9OT1RfRk9VTkQ7DQo+ID4gPiArICBHcHRWYWxpZCAgICAgICA9IEZBTFNFOw0KPiA+ID4g KyAgTWJyVmFsaWQgICAgICAgPSBGQUxTRTsNCj4gPiA+ICsNCj4gPiA+ICsgIC8vDQo+ID4gPiAr ICAvLyBBbGxvY2F0ZSBhIGJ1ZmZlciBmb3IgdGhlIFByb3RlY3RpdmUgTUJSDQo+ID4gPiArICAv Lw0KPiA+ID4gKyAgUHJvdGVjdGl2ZU1iciA9IEFsbG9jYXRlUG9vbCAoQmxvY2tTaXplKTsNCj4g PiA+ICsgIGlmIChQcm90ZWN0aXZlTWJyID09IE5VTEwpIHsNCj4gPiA+ICsgICAgcmV0dXJuIEVG SV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiA+ID4gKyAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgLy8NCj4g PiA+ICsgIC8vIFJlYWQgdGhlIFByb3RlY3RpdmUgTUJSIGZyb20gTEJBICMwDQo+ID4gPiArICAv Lw0KPiA+ID4gKyAgU3RhdHVzID0gRGlza0lvLT5SZWFkRGlzayAoDQo+ID4gPiArICAgIERpc2tJ bywNCj4gPiA+ICsgICAgTWVkaWFJZCwNCj4gPiA+ICsgICAgMCwNCj4gPiA+ICsgICAgQmxvY2tT aXplLA0KPiA+ID4gKyAgICBQcm90ZWN0aXZlTWJyDQo+ID4gPiArICAgICk7DQo+ID4gPiArICBp ZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gPiArICAgIEdwdFZhbGlkU3RhdHVzID0gU3Rh dHVzOw0KPiA+ID4gKyAgICBnb3RvIERvbmU7DQo+ID4gPiArICB9DQo+ID4gPiArDQo+ID4gPiAr ICAvLw0KPiA+ID4gKyAgLy8gVmVyaWZ5IHRoYXQgdGhlIFByb3RlY3RpdmUgTUJSIGlzIHZhbGlk DQo+ID4gPiArICAvLw0KPiA+ID4gKyAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgTUFYX01CUl9Q QVJUSVRJT05TOyBJbmRleCsrKSB7DQo+ID4gPiArICAgIGlmIChQcm90ZWN0aXZlTWJyLT5QYXJ0 aXRpb25bSW5kZXhdLkJvb3RJbmRpY2F0b3IgPT0gMHgwMCAmJg0KPiA+ID4gKyAgICAgICAgUHJv dGVjdGl2ZU1ici0+UGFydGl0aW9uW0luZGV4XS5PU0luZGljYXRvciA9PQ0KPiA+ID4gUE1CUl9H UFRfUEFSVElUSU9OICYmDQo+ID4gPiArICAgICAgICBVTlBBQ0tfVUlOVDMyIChQcm90ZWN0aXZl TWJyLT5QYXJ0aXRpb25bSW5kZXhdLlN0YXJ0aW5nTEJBKSA9PSAxDQo+ID4gPiArICAgICAgICkg ew0KPiA+ID4gKyAgICAgIGJyZWFrOw0KPiA+ID4gKyAgICB9DQo+ID4gPiArICB9DQo+ID4gPiAr ICBpZiAoSW5kZXggPT0gTUFYX01CUl9QQVJUSVRJT05TKSB7DQo+ID4gPiArICAgIGdvdG8gRG9u ZTsNCj4gPiA+ICsgIH0NCj4gPiA+ICsNCj4gPiA+ICsgIE1iclZhbGlkID0gVFJVRTsNCj4gPiA+ ICsNCj4gPiA+ICsgIC8vDQo+ID4gPiArICAvLyBBbGxvY2F0ZSB0aGUgR1BUIHN0cnVjdHVyZXMN Cj4gPiA+ICsgIC8vDQo+ID4gPiArICBQcmltYXJ5SGVhZGVyID0gQWxsb2NhdGVaZXJvUG9vbA0K PiA+ID4gKHNpemVvZihFRklfUEFSVElUSU9OX1RBQkxFX0hFQURFUikpOw0KPiA+ID4gKyAgaWYg KFByaW1hcnlIZWFkZXIgPT0gTlVMTCkgew0KPiA+ID4gKyAgICBnb3RvIERvbmU7DQo+ID4gPiAr ICB9DQo+ID4gPiArDQo+ID4gPiArICBCYWNrdXBIZWFkZXIgPSBBbGxvY2F0ZVplcm9Qb29sDQo+ ID4gPiAoc2l6ZW9mKEVGSV9QQVJUSVRJT05fVEFCTEVfSEVBREVSKSk7DQo+ID4gPiArICBpZiAo QmFja3VwSGVhZGVyID09IE5VTEwpIHsNCj4gPiA+ICsgICAgZ290byBEb25lOw0KPiA+ID4gKyAg fQ0KPiA+ID4gKw0KPiA+ID4gKyAgLy8NCj4gPiA+ICsgIC8vIENoZWNrIHByaW1hcnkgYW5kIGJh Y2t1cCBwYXJ0aXRpb24gdGFibGVzDQo+ID4gPiArICAvLw0KPiA+ID4gKyAgU3RhdHVzID0gUGFy dGl0aW9uVmFsaWRHcHRUYWJsZSAoUFJJTUFSWV9QQVJUX0hFQURFUl9MQkEsDQo+ID4gPiBQcmlt YXJ5SGVhZGVyKTsNCj4gPiA+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiA+ICsg ICAgREVCVUcgKChFRklfRF9JTkZPLCAiIE5vdCBWYWxpZCBwcmltYXJ5IHBhcnRpdGlvbiB0YWJs ZVxuIikpOw0KPiA+ID4gKw0KPiA+ID4gKyAgICBTdGF0dXMgPSBQYXJ0aXRpb25WYWxpZEdwdFRh YmxlIChMYXN0QmxvY2ssIEJhY2t1cEhlYWRlcik7DQo+ID4gPiArICAgIGlmIChFRklfRVJST1Ig KFN0YXR1cykpIHsNCj4gPiA+ICsgICAgICBERUJVRyAoKEVGSV9EX0lORk8sICIgTm90IFZhbGlk IGJhY2t1cCBwYXJ0aXRpb24gdGFibGVcbiIpKTsNCj4gPiA+ICsgICAgICBnb3RvIERvbmU7DQo+ ID4gPiArICAgIH0gZWxzZSB7DQo+ID4gPiArICAgICAgREVCVUcgKChFRklfRF9JTkZPLCAiIFZh bGlkIGJhY2t1cCBwYXJ0aXRpb24gdGFibGVcbiIpKTsNCj4gPiA+ICsgICAgICBERUJVRyAoKEVG SV9EX0lORk8sICIgUmVzdG9yZSBwcmltYXJ5IHBhcnRpdGlvbiB0YWJsZSBieSB0aGUNCj4gPiA+ IGJhY2t1cFxuIikpOw0KPiA+ID4gKyAgICAgIGlmICghUGFydGl0aW9uUmVzdG9yZUdwdFRhYmxl IChCYWNrdXBIZWFkZXIpKSB7DQo+ID4gPiArICAgICAgICBERUJVRyAoKEVGSV9EX0lORk8sICIg UmVzdG9yZSBwcmltYXJ5IHBhcnRpdGlvbiB0YWJsZSBlcnJvclxuIikpOw0KPiA+ID4gKyAgICAg IH0NCj4gPiA+ICsNCj4gPiA+ICsgICAgICBTdGF0dXMgPSBQYXJ0aXRpb25WYWxpZEdwdFRhYmxl IChCYWNrdXBIZWFkZXItPkFsdGVybmF0ZUxCQSwNCj4gPiA+IFByaW1hcnlIZWFkZXIpOw0KPiA+ ID4gKyAgICAgIGlmICghRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gPiArICAgICAgICBERUJV RyAoKEVGSV9EX0lORk8sICIgUmVzdG9yZSBiYWNrdXAgcGFydGl0aW9uIHRhYmxlIHN1Y2Nlc3Nc biIpKTsNCj4gPiA+ICsgICAgICB9DQo+ID4gPiArICAgIH0NCj4gPiA+ICsgIH0gZWxzZSBpZiAo RUZJX0VSUk9SIChQYXJ0aXRpb25WYWxpZEdwdFRhYmxlIChQcmltYXJ5SGVhZGVyLQ0KPiA+ID4g PkFsdGVybmF0ZUxCQSwgQmFja3VwSGVhZGVyKSkpIHsNCj4gPiA+ICsgICAgREVCVUcgKChFRklf RF9JTkZPLCAiIFZhbGlkIHByaW1hcnkgYW5kICFWYWxpZCBiYWNrdXAgcGFydGl0aW9uDQo+ID4g PiB0YWJsZVxuIikpOw0KPiA+ID4gKyAgICBERUJVRyAoKEVGSV9EX0lORk8sICIgUmVzdG9yZSBi YWNrdXAgcGFydGl0aW9uIHRhYmxlIGJ5IHRoZQ0KPiA+ID4gcHJpbWFyeVxuIikpOw0KPiA+ID4g KyAgICBpZiAoIVBhcnRpdGlvblJlc3RvcmVHcHRUYWJsZSAoUHJpbWFyeUhlYWRlcikpIHsNCj4g PiA+ICsgICAgICBERUJVRyAoKEVGSV9EX0lORk8sICIgUmVzdG9yZSBiYWNrdXAgcGFydGl0aW9u IHRhYmxlIGVycm9yXG4iKSk7DQo+ID4gPiArICAgIH0NCj4gPiA+ICsNCj4gPiA+ICsgICAgU3Rh dHVzID0gUGFydGl0aW9uVmFsaWRHcHRUYWJsZSAoUHJpbWFyeUhlYWRlci0+QWx0ZXJuYXRlTEJB LA0KPiA+ID4gQmFja3VwSGVhZGVyKTsNCj4gPiA+ICsgICAgaWYgKCFFRklfRVJST1IgKFN0YXR1 cykpIHsNCj4gPiA+ICsgICAgICBERUJVRyAoKEVGSV9EX0lORk8sICIgUmVzdG9yZSBiYWNrdXAg cGFydGl0aW9uIHRhYmxlIHN1Y2Nlc3NcbiIpKTsNCj4gPiA+ICsgICAgfQ0KPiA+ID4gKyAgfQ0K PiA+ID4gKw0KPiA+ID4gKyAgREVCVUcgKChFRklfRF9WRVJCT1NFLCAiIFZhbGlkIHByaW1hcnkg YW5kIFZhbGlkIGJhY2t1cCBwYXJ0aXRpb24NCj4gPiA+IHRhYmxlXG4iKSk7DQo+ID4gPiArDQo+ ID4gPiArICAvLw0KPiA+ID4gKyAgLy8gUmVhZCB0aGUgRUZJIFBhcnRpdGlvbiBFbnRyaWVzDQo+ ID4gPiArICAvLw0KPiA+ID4gKyAgUGFydEVudHJ5ID0gQWxsb2NhdGVQb29sIChQcmltYXJ5SGVh ZGVyLT5OdW1iZXJPZlBhcnRpdGlvbkVudHJpZXMgKg0KPiA+ID4gUHJpbWFyeUhlYWRlci0+U2l6 ZU9mUGFydGl0aW9uRW50cnkpOw0KPiA+ID4gKyAgaWYgKFBhcnRFbnRyeSA9PSBOVUxMKSB7DQo+ ID4gPiArICAgIERFQlVHICgoRUZJX0RfRVJST1IsICJBbGxvY2F0ZSBwb29sIGVycm9yXG4iKSk7 DQo+ID4gPiArICAgIGdvdG8gRG9uZTsNCj4gPiA+ICsgIH0NCj4gPiA+ICsNCj4gPiA+ICsgIFN0 YXR1cyA9IERpc2tJby0+UmVhZERpc2sgKA0KPiA+ID4gKyAgICBEaXNrSW8sDQo+ID4gPiArICAg IE1lZGlhSWQsDQo+ID4gPiArICAgIE11bHRVNjR4MzIgKFByaW1hcnlIZWFkZXItPlBhcnRpdGlv bkVudHJ5TEJBLCBCbG9ja1NpemUpLA0KPiA+ID4gKyAgICBQcmltYXJ5SGVhZGVyLT5OdW1iZXJP ZlBhcnRpdGlvbkVudHJpZXMgKiAoUHJpbWFyeUhlYWRlci0NCj4gPiA+ID5TaXplT2ZQYXJ0aXRp b25FbnRyeSksDQo+ID4gPiArICAgIFBhcnRFbnRyeQ0KPiA+ID4gKyAgICApOw0KPiA+ID4gKyAg aWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ID4gKyAgICBHcHRWYWxpZFN0YXR1cyA9IFN0 YXR1czsNCj4gPiA+ICsgICAgREVCVUcgKChFRklfRF9FUlJPUiwgIiBQYXJ0aXRpb24gRW50cnkg UmVhZERpc2sgZXJyb3JcbiIpKTsNCj4gPiA+ICsgICAgZ290byBEb25lOw0KPiA+ID4gKyAgfQ0K PiA+ID4gKw0KPiA+ID4gKyAgREVCVUcgKChFRklfRF9WRVJCT1NFLCAiIFBhcnRpdGlvbiBlbnRy aWVzIHJlYWQgYmxvY2sgc3VjY2Vzc1xuIikpOw0KPiA+ID4gKw0KPiA+ID4gKyAgREVCVUcgKChF RklfRF9WRVJCT1NFLCAiIE51bWJlciBvZiBwYXJ0aXRpb24gZW50cmllczogJWRcbiIsDQo+ID4g PiBQcmltYXJ5SGVhZGVyLT5OdW1iZXJPZlBhcnRpdGlvbkVudHJpZXMpKTsNCj4gPiA+ICsNCj4g PiA+ICsgIFBFbnRyeVN0YXR1cyA9IEFsbG9jYXRlWmVyb1Bvb2wgKFByaW1hcnlIZWFkZXItDQo+ ID4gPiA+TnVtYmVyT2ZQYXJ0aXRpb25FbnRyaWVzICogc2l6ZW9mKEVGSV9QQVJUSVRJT05fRU5U UllfU1RBVFVTKSk7DQo+ID4gPiArICBpZiAoUEVudHJ5U3RhdHVzID09IE5VTEwpIHsNCj4gPiA+ ICsgICAgREVCVUcgKChFRklfRF9FUlJPUiwgIkFsbG9jYXRlIHBvb2wgZXJyb3JcbiIpKTsNCj4g PiA+ICsgICAgZ290byBEb25lOw0KPiA+ID4gKyAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgLy8NCj4g PiA+ICsgIC8vIENoZWNrIHRoZSBpbnRlZ3JpdHkgb2YgcGFydGl0aW9uIGVudHJpZXMNCj4gPiA+ ICsgIC8vDQo+ID4gPiArICBQYXJ0aXRpb25DaGVja0dwdEVudHJ5IChQcmltYXJ5SGVhZGVyLCBQ YXJ0RW50cnksIFBFbnRyeVN0YXR1cyk7DQo+ID4gPiArDQo+ID4gPiArICAvLw0KPiA+ID4gKyAg Ly8gSWYgd2UgZ290IHRoaXMgZmFyIHRoZSBHUFQgbGF5b3V0IG9mIHRoZSBkaXNrIGlzIHZhbGlk IGFuZCB3ZSBzaG91bGQNCj4gPiByZXR1cm4NCj4gPiA+IHRydWUNCj4gPiA+ICsgIC8vDQo+ID4g PiArICBHcHRWYWxpZFN0YXR1cyA9IEVGSV9TVUNDRVNTOw0KPiA+ID4gKw0KPiA+ID4gKyBEb25l Og0KPiA+ID4gKyAgU0hFTExfRlJFRV9OT05fTlVMTCAoUHJvdGVjdGl2ZU1icik7DQo+ID4gPiAr ICBpZiAoRUZJX0VSUk9SIChHcHRWYWxpZFN0YXR1cykpIHsNCj4gPiA+ICsgICAgU0hFTExfRlJF RV9OT05fTlVMTCAoUHJpbWFyeUhlYWRlcik7DQo+ID4gPiArICAgIFNIRUxMX0ZSRUVfTk9OX05V TEwgKEJhY2t1cEhlYWRlcik7DQo+ID4gPiArICAgIFNIRUxMX0ZSRUVfTk9OX05VTEwgKFBhcnRF bnRyeSk7DQo+ID4gPiArICAgIFNIRUxMX0ZSRUVfTk9OX05VTEwgKFBFbnRyeVN0YXR1cyk7DQo+ ID4gPiArICB9IGVsc2Ugew0KPiA+ID4gKyAgICBHcHRWYWxpZCA9IFRSVUU7DQo+ID4gPiArICB9 DQo+ID4gPiArDQo+ID4gPiArICByZXR1cm4gR3B0VmFsaWRTdGF0dXM7DQo+ID4gPiArfQ0KPiA+ ID4gKw0KPiA+ID4gKy8qKg0KPiA+ID4gKyAgVGhpcyByb3V0aW5lIHdpbGwgcmVhZCBHUFQgcGFy dGl0aW9uIHRhYmxlIGhlYWRlciBhbmQgcmV0dXJuIGl0Lg0KPiA+ID4gKw0KPiA+ID4gKyAgQ2F1 dGlvbjogVGhpcyBmdW5jdGlvbiBtYXkgcmVjZWl2ZSB1bnRydXN0ZWQgaW5wdXQuDQo+ID4gPiAr ICBUaGUgR1BUIHBhcnRpdGlvbiB0YWJsZSBoZWFkZXIgaXMgZXh0ZXJuYWwgaW5wdXQsIHNvIHRo aXMgcm91dGluZQ0KPiA+ID4gKyAgd2lsbCBkbyBiYXNpYyB2YWxpZGF0aW9uIGZvciBHUFQgcGFy dGl0aW9uIHRhYmxlIGhlYWRlciBiZWZvcmUgcmV0dXJuLg0KPiA+ID4gKw0KPiA+ID4gKyAgQHBh cmFtW2luXSAgTGJhICAgICAgICAgVGhlIHN0YXJ0aW5nIExiYSBvZiB0aGUgUGFydGl0aW9uIFRh YmxlDQo+ID4gPiArICBAcGFyYW1bb3V0XSBQYXJ0SGVhZGVyICBTdG9yZXMgdGhlIHBhcnRpdGlv biB0YWJsZSB0aGF0IGlzIHJlYWQNCj4gPiA+ICsNCj4gPiA+ICsgIEByZXR2YWwgVFJVRSAgICAg IFRoZSBwYXJ0aXRpb24gdGFibGUgaXMgdmFsaWQNCj4gPiA+ICsgIEByZXR2YWwgRkFMU0UgICAg IFRoZSBwYXJ0aXRpb24gdGFibGUgaXMgbm90IHZhbGlkDQo+ID4gPiArDQo+ID4gPiArKiovDQo+ ID4gPiArU1RBVElDDQo+ID4gPiArRUZJX1NUQVRVUw0KPiA+ID4gK1BhcnRpdGlvblZhbGlkR3B0 VGFibGUgKA0KPiA+ID4gKyAgSU4gIEVGSV9MQkEgICAgICAgICAgICAgICAgICAgICBMYmEsDQo+ ID4gPiArICBPVVQgRUZJX1BBUlRJVElPTl9UQUJMRV9IRUFERVIgICpQYXJ0SGVhZGVyDQo+ID4g PiArICApDQo+ID4gPiArew0KPiA+ID4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgIFN0 YXR1czsNCj4gPiA+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICBCbG9ja1NpemU7DQo+ ID4gPiArICBFRklfUEFSVElUSU9OX1RBQkxFX0hFQURFUiAgKlBhcnRIZHI7DQo+ID4gPiArICBV SU5UMzIgICAgICAgICAgICAgICAgICAgICAgTWVkaWFJZDsNCj4gPiA+ICsNCj4gPiA+ICsgIEJs b2NrU2l6ZSA9IEJsb2NrSW8tPk1lZGlhLT5CbG9ja1NpemU7DQo+ID4gPiArICBNZWRpYUlkICAg PSBCbG9ja0lvLT5NZWRpYS0+TWVkaWFJZDsNCj4gPiA+ICsgIFBhcnRIZHIgICA9IEFsbG9jYXRl WmVyb1Bvb2wgKEJsb2NrU2l6ZSk7DQo+ID4gPiArDQo+ID4gPiArICBpZiAoUGFydEhkciA9PSBO VUxMKSB7DQo+ID4gPiArICAgIERFQlVHICgoRUZJX0RfRVJST1IsICJBbGxvY2F0ZSBwb29sIGVy cm9yXG4iKSk7DQo+ID4gPiArICAgIHJldHVybiBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4gPiA+ ICsgIH0NCj4gPiA+ICsgIC8vDQo+ID4gPiArICAvLyBSZWFkIHRoZSBFRkkgUGFydGl0aW9uIFRh YmxlIEhlYWRlcg0KPiA+ID4gKyAgLy8NCj4gPiA+ICsgIFN0YXR1cyA9IERpc2tJby0+UmVhZERp c2sgKA0KPiA+ID4gKyAgICBEaXNrSW8sDQo+ID4gPiArICAgIE1lZGlhSWQsDQo+ID4gPiArICAg IE11bHRVNjR4MzIgKExiYSwgQmxvY2tTaXplKSwNCj4gPiA+ICsgICAgQmxvY2tTaXplLA0KPiA+ ID4gKyAgICBQYXJ0SGRyDQo+ID4gPiArICAgICk7DQo+ID4gPiArICBpZiAoRUZJX0VSUk9SIChT dGF0dXMpKSB7DQo+ID4gPiArICAgIEZyZWVQb29sIChQYXJ0SGRyKTsNCj4gPiA+ICsgICAgcmV0 dXJuIFN0YXR1czsNCj4gPiA+ICsgIH0NCj4gPiA+ICsNCj4gPiA+ICsgIGlmICgoUGFydEhkci0+ SGVhZGVyLlNpZ25hdHVyZSAhPSBFRklfUFRBQl9IRUFERVJfSUQpIHx8DQo+ID4gPiArICAgICAg IVBhcnRpdGlvbkNoZWNrQ3JjIChCbG9ja1NpemUsICZQYXJ0SGRyLT5IZWFkZXIpIHx8DQo+ID4g PiArICAgICAgUGFydEhkci0+TXlMQkEgIT0gTGJhIHx8DQo+ID4gPiArICAgICAgKFBhcnRIZHIt PlNpemVPZlBhcnRpdGlvbkVudHJ5IDwgc2l6ZW9mKEVGSV9QQVJUSVRJT05fRU5UUlkpKQ0KPiA+ ID4gKyAgICAgKSB7DQo+ID4gPiArICAgIERFQlVHICgoRUZJX0RfRVJST1IsICJJbnZhbGlkIGVm aSBwYXJ0aXRpb24gdGFibGUgaGVhZGVyXG4iKSk7DQo+ID4gPiArICAgIEZyZWVQb29sIChQYXJ0 SGRyKTsNCj4gPiA+ICsgICAgcmV0dXJuIEVGSV9WT0xVTUVfQ09SUlVQVEVEOw0KPiA+ID4gKyAg fQ0KPiA+ID4gKw0KPiA+ID4gKyAgLy8NCj4gPiA+ICsgIC8vIEVuc3VyZSB0aGUgTnVtYmVyT2ZQ YXJ0aXRpb25FbnRyaWVzICogU2l6ZU9mUGFydGl0aW9uRW50cnkgZG9lc24ndA0KPiA+ID4gb3Zl cmZsb3cuDQo+ID4gPiArICAvLw0KPiA+ID4gKyAgaWYgKFBhcnRIZHItPk51bWJlck9mUGFydGl0 aW9uRW50cmllcyA+IERpdlU2NHgzMiAoTUFYX1VJTlROLA0KPiA+ID4gUGFydEhkci0+U2l6ZU9m UGFydGl0aW9uRW50cnkpKSB7DQo+ID4gPiArICAgIEZyZWVQb29sIChQYXJ0SGRyKTsNCj4gPiA+ ICsgICAgcmV0dXJuIEVGSV9WT0xVTUVfQ09SUlVQVEVEOw0KPiA+ID4gKyAgfQ0KPiA+ID4gKw0K PiA+ID4gKyAgQ29weU1lbSAoUGFydEhlYWRlciwgUGFydEhkciwNCj4gPiBzaXplb2YoRUZJX1BB UlRJVElPTl9UQUJMRV9IRUFERVIpKTsNCj4gPiA+ICsgIGlmICghUGFydGl0aW9uQ2hlY2tHcHRF bnRyeUFycmF5Q1JDIChQYXJ0SGVhZGVyKSkgew0KPiA+ID4gKyAgICBGcmVlUG9vbCAoUGFydEhk cik7DQo+ID4gPiArICAgIHJldHVybiBFRklfVk9MVU1FX0NPUlJVUFRFRDsNCj4gPiA+ICsgIH0N Cj4gPiA+ICsNCj4gPiA+ICsgIERFQlVHICgoRUZJX0RfVkVSQk9TRSwgIiBWYWxpZCBlZmkgcGFy dGl0aW9uIHRhYmxlIGhlYWRlclxuIikpOw0KPiA+ID4gKyAgRnJlZVBvb2wgKFBhcnRIZHIpOw0K PiA+ID4gKw0KPiA+ID4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiA+ID4gK30NCj4gPiA+ICsN Cj4gPiA+ICsvKioNCj4gPiA+ICsgIENoZWNrIGlmIHRoZSBDUkMgZmllbGQgaW4gdGhlIFBhcnRp dGlvbiB0YWJsZSBoZWFkZXIgaXMgdmFsaWQNCj4gPiA+ICsgIGZvciBQYXJ0aXRpb24gZW50cnkg YXJyYXkuDQo+ID4gPiArDQo+ID4gPiArICBAcGFyYW1baW5dICBQYXJ0SGVhZGVyICBQYXJ0aXRp b24gdGFibGUgaGVhZGVyIHN0cnVjdHVyZQ0KPiA+ID4gKw0KPiA+ID4gKyAgQHJldHZhbCBUUlVF ICAgICAgdGhlIENSQyBpcyB2YWxpZA0KPiA+ID4gKyAgQHJldHZhbCBGQUxTRSAgICAgdGhlIENS QyBpcyBpbnZhbGlkDQo+ID4gPiArDQo+ID4gPiArKiovDQo+ID4gPiArU1RBVElDDQo+ID4gPiAr Qk9PTEVBTg0KPiA+ID4gK1BhcnRpdGlvbkNoZWNrR3B0RW50cnlBcnJheUNSQyAoDQo+ID4gPiAr ICBJTiAgRUZJX1BBUlRJVElPTl9UQUJMRV9IRUFERVIgICpQYXJ0SGVhZGVyDQo+ID4gPiArICAp DQo+ID4gPiArew0KPiA+ID4gKyAgRUZJX1NUQVRVUyAgU3RhdHVzOw0KPiA+ID4gKyAgVUlOVDgg ICAgICAgKlB0cjsNCj4gPiA+ICsgIFVJTlQzMiAgICAgIENyYzsNCj4gPiA+ICsgIFVJTlROICAg ICAgIFNpemU7DQo+ID4gPiArDQo+ID4gPiArICAvLw0KPiA+ID4gKyAgLy8gUmVhZCB0aGUgRUZJ IFBhcnRpdGlvbiBFbnRyaWVzDQo+ID4gPiArICAvLw0KPiA+ID4gKyAgUHRyID0gQWxsb2NhdGVQ b29sIChQYXJ0SGVhZGVyLT5OdW1iZXJPZlBhcnRpdGlvbkVudHJpZXMgKg0KPiA+IFBhcnRIZWFk ZXItDQo+ID4gPiA+U2l6ZU9mUGFydGl0aW9uRW50cnkpOw0KPiA+ID4gKyAgaWYgKFB0ciA9PSBO VUxMKSB7DQo+ID4gPiArICAgIERFQlVHICgoRUZJX0RfRVJST1IsICIgQWxsb2NhdGUgcG9vbCBl cnJvclxuIikpOw0KPiA+ID4gKyAgICByZXR1cm4gRkFMU0U7DQo+ID4gPiArICB9DQo+ID4gPiAr DQo+ID4gPiArICBTdGF0dXMgPSBEaXNrSW8tPlJlYWREaXNrICgNCj4gPiA+ICsgICAgRGlza0lv LA0KPiA+ID4gKyAgICBCbG9ja0lvLT5NZWRpYS0+TWVkaWFJZCwNCj4gPiA+ICsgICAgTXVsdFU2 NHgzMiAoUGFydEhlYWRlci0+UGFydGl0aW9uRW50cnlMQkEsIEJsb2NrSW8tPk1lZGlhLQ0KPiA+ ID5CbG9ja1NpemUpLA0KPiA+ID4gKyAgICBQYXJ0SGVhZGVyLT5OdW1iZXJPZlBhcnRpdGlvbkVu dHJpZXMgKiBQYXJ0SGVhZGVyLQ0KPiA+ID4gPlNpemVPZlBhcnRpdGlvbkVudHJ5LA0KPiA+ID4g KyAgICBQdHINCj4gPiA+ICsgICAgKTsNCj4gPiA+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykp IHsNCj4gPiA+ICsgICAgRnJlZVBvb2wgKFB0cik7DQo+ID4gPiArICAgIHJldHVybiBGQUxTRTsN Cj4gPiA+ICsgIH0NCj4gPiA+ICsNCj4gPiA+ICsgIFNpemUgICAgPSBQYXJ0SGVhZGVyLT5OdW1i ZXJPZlBhcnRpdGlvbkVudHJpZXMgKiBQYXJ0SGVhZGVyLQ0KPiA+ID4gPlNpemVPZlBhcnRpdGlv bkVudHJ5Ow0KPiA+ID4gKw0KPiA+ID4gKyAgU3RhdHVzICA9IGdCUy0+Q2FsY3VsYXRlQ3JjMzIg KFB0ciwgU2l6ZSwgJkNyYyk7DQo+ID4gPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ ID4gPiArICAgIERFQlVHICgoRUZJX0RfRVJST1IsICJDaGVja1BFbnRyeUFycmF5Q1JDOiBDcmMg Y2FsY3VsYXRpb24NCj4gPiBmYWlsZWRcbiIpKTsNCj4gPiA+ICsgICAgRnJlZVBvb2wgKFB0cik7 DQo+ID4gPiArICAgIHJldHVybiBGQUxTRTsNCj4gPiA+ICsgIH0NCj4gPiA+ICsNCj4gPiA+ICsg IEZyZWVQb29sIChQdHIpOw0KPiA+ID4gKw0KPiA+ID4gKyAgcmV0dXJuIChCT09MRUFOKShQYXJ0 SGVhZGVyLT5QYXJ0aXRpb25FbnRyeUFycmF5Q1JDMzIgPT0gQ3JjKTsNCj4gPiA+ICt9DQo+ID4g PiArDQo+ID4gPiArDQo+ID4gPiArLyoqDQo+ID4gPiArICBSZXN0b3JlIFBhcnRpdGlvbiBUYWJs ZSB0byBpdHMgYWx0ZXJuYXRlIHBsYWNlDQo+ID4gPiArICAoUHJpbWFyeSAtPiBCYWNrdXAgb3Ig QmFja3VwIC0+IFByaW1hcnkpLg0KPiA+ID4gKw0KPiA+ID4gKyAgQHBhcmFtW2luXSAgUGFydEhl YWRlciAgUGFydGl0aW9uIHRhYmxlIGhlYWRlciBzdHJ1Y3R1cmUuDQo+ID4gPiArDQo+ID4gPiAr ICBAcmV0dmFsIFRSVUUgICAgICBSZXN0b3Jpbmcgc3VjY2VlZHMNCj4gPiA+ICsgIEByZXR2YWwg RkFMU0UgICAgIFJlc3RvcmluZyBmYWlsZWQNCj4gPiA+ICsNCj4gPiA+ICsqKi8NCj4gPiA+ICtT VEFUSUMNCj4gPiA+ICtCT09MRUFODQo+ID4gPiArUGFydGl0aW9uUmVzdG9yZUdwdFRhYmxlICgN Cj4gPiA+ICsgIElOICBFRklfUEFSVElUSU9OX1RBQkxFX0hFQURFUiAgKlBhcnRIZWFkZXINCj4g PiA+ICsgICkNCj4gPiA+ICt7DQo+ID4gPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAg U3RhdHVzOw0KPiA+ID4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgIEJsb2NrU2l6ZTsN Cj4gPiA+ICsgIEVGSV9QQVJUSVRJT05fVEFCTEVfSEVBREVSICAqUGFydEhkcjsNCj4gPiA+ICsg IEVGSV9MQkEgICAgICAgICAgICAgICAgICAgICBQRW50cnlMQkE7DQo+ID4gPiArICBVSU5UOCAg ICAgICAgICAgICAgICAgICAgICAgKlB0cjsNCj4gPiA+ICsgIFVJTlQzMiAgICAgICAgICAgICAg ICAgICAgICBNZWRpYUlkOw0KPiA+ID4gKw0KPiA+ID4gKyAgUGFydEhkciAgID0gTlVMTDsNCj4g PiA+ICsgIFB0ciAgICAgICA9IE5VTEw7DQo+ID4gPiArDQo+ID4gPiArICBCbG9ja1NpemUgPSBC bG9ja0lvLT5NZWRpYS0+QmxvY2tTaXplOw0KPiA+ID4gKyAgTWVkaWFJZCAgID0gQmxvY2tJby0+ TWVkaWEtPk1lZGlhSWQ7DQo+ID4gPiArDQo+ID4gPiArICBQYXJ0SGRyICAgPSBBbGxvY2F0ZVpl cm9Qb29sIChCbG9ja1NpemUpOw0KPiA+ID4gKw0KPiA+ID4gKyAgaWYgKFBhcnRIZHIgPT0gTlVM TCkgew0KPiA+ID4gKyAgICBERUJVRyAoKEVGSV9EX0VSUk9SLCAiQWxsb2NhdGUgcG9vbCBlcnJv clxuIikpOw0KPiA+ID4gKyAgICByZXR1cm4gRkFMU0U7DQo+ID4gPiArICB9DQo+ID4gPiArDQo+ ID4gPiArICBQRW50cnlMQkEgPSAoUGFydEhlYWRlci0+TXlMQkEgPT0gUFJJTUFSWV9QQVJUX0hF QURFUl9MQkEpID9cDQo+ID4gPiArICAgIChQYXJ0SGVhZGVyLT5MYXN0VXNhYmxlTEJBICsgMSkg OlwNCj4gPiA+ICsgICAgKFBSSU1BUllfUEFSVF9IRUFERVJfTEJBICsgMSk7DQo+ID4gPiArDQo+ ID4gPiArICBDb3B5TWVtIChQYXJ0SGRyLCBQYXJ0SGVhZGVyLA0KPiA+IHNpemVvZihFRklfUEFS VElUSU9OX1RBQkxFX0hFQURFUikpOw0KPiA+ID4gKw0KPiA+ID4gKyAgUGFydEhkci0+TXlMQkEg ICAgICAgICAgICAgID0gUGFydEhlYWRlci0+QWx0ZXJuYXRlTEJBOw0KPiA+ID4gKyAgUGFydEhk ci0+QWx0ZXJuYXRlTEJBICAgICAgID0gUGFydEhlYWRlci0+TXlMQkE7DQo+ID4gPiArICBQYXJ0 SGRyLT5QYXJ0aXRpb25FbnRyeUxCQSAgPSBQRW50cnlMQkE7DQo+ID4gPiArICBQYXJ0aXRpb25T ZXRDcmMgKChFRklfVEFCTEVfSEVBREVSICopUGFydEhkcik7DQo+ID4gPiArDQo+ID4gPiArICBT dGF0dXMgPSBEaXNrSW8tPldyaXRlRGlzayAoDQo+ID4gPiArICAgIERpc2tJbywNCj4gPiA+ICsg ICAgTWVkaWFJZCwNCj4gPiA+ICsgICAgTXVsdFU2NHgzMiAoUGFydEhkci0+TXlMQkEsIChVSU5U MzIpQmxvY2tTaXplKSwNCj4gPiA+ICsgICAgQmxvY2tTaXplLA0KPiA+ID4gKyAgICBQYXJ0SGRy DQo+ID4gPiArICAgICk7DQo+ID4gPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4g PiArICAgIGdvdG8gRG9uZTsNCj4gPiA+ICsgIH0NCj4gPiA+ICsNCj4gPiA+ICsgIFB0ciA9IEFs bG9jYXRlUG9vbCAoUGFydEhlYWRlci0+TnVtYmVyT2ZQYXJ0aXRpb25FbnRyaWVzICoNCj4gPiBQ YXJ0SGVhZGVyLQ0KPiA+ID4gPlNpemVPZlBhcnRpdGlvbkVudHJ5KTsNCj4gPiA+ICsgIGlmIChQ dHIgPT0gTlVMTCkgew0KPiA+ID4gKyAgICBERUJVRyAoKEVGSV9EX0VSUk9SLCAiIEFsbG9jYXRl IHBvb2wgZXJyb3JcbiIpKTsNCj4gPiA+ICsgICAgU3RhdHVzID0gRUZJX09VVF9PRl9SRVNPVVJD RVM7DQo+ID4gPiArICAgIGdvdG8gRG9uZTsNCj4gPiA+ICsgIH0NCj4gPiA+ICsNCj4gPiA+ICsg IFN0YXR1cyA9IERpc2tJby0+UmVhZERpc2sgKA0KPiA+ID4gKyAgICBEaXNrSW8sDQo+ID4gPiAr ICAgIE1lZGlhSWQsDQo+ID4gPiArICAgIE11bHRVNjR4MzIgKFBhcnRIZWFkZXItPlBhcnRpdGlv bkVudHJ5TEJBLCAoVUlOVDMyKUJsb2NrU2l6ZSksDQo+ID4gPiArICAgIFBhcnRIZWFkZXItPk51 bWJlck9mUGFydGl0aW9uRW50cmllcyAqIFBhcnRIZWFkZXItDQo+ID4gPiA+U2l6ZU9mUGFydGl0 aW9uRW50cnksDQo+ID4gPiArICAgIFB0cg0KPiA+ID4gKyAgICApOw0KPiA+ID4gKyAgaWYgKEVG SV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ID4gKyAgICBnb3RvIERvbmU7DQo+ID4gPiArICB9DQo+ ID4gPiArDQo+ID4gPiArICBTdGF0dXMgPSBEaXNrSW8tPldyaXRlRGlzayAoDQo+ID4gPiArICAg IERpc2tJbywNCj4gPiA+ICsgICAgTWVkaWFJZCwNCj4gPiA+ICsgICAgTXVsdFU2NHgzMiAoUEVu dHJ5TEJBLCAoVUlOVDMyKUJsb2NrU2l6ZSksDQo+ID4gPiArICAgIFBhcnRIZWFkZXItPk51bWJl ck9mUGFydGl0aW9uRW50cmllcyAqIFBhcnRIZWFkZXItDQo+ID4gPiA+U2l6ZU9mUGFydGl0aW9u RW50cnksDQo+ID4gPiArICAgIFB0cg0KPiA+ID4gKyAgICApOw0KPiA+ID4gKw0KPiA+ID4gKyBE b25lOg0KPiA+ID4gKyAgRnJlZVBvb2wgKFBhcnRIZHIpOw0KPiA+ID4gKw0KPiA+ID4gKyAgaWYg KFB0ciAhPSBOVUxMKSB7DQo+ID4gPiArICAgIEZyZWVQb29sIChQdHIpOw0KPiA+ID4gKyAgfQ0K PiA+ID4gKw0KPiA+ID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ID4gKyAgICBy ZXR1cm4gRkFMU0U7DQo+ID4gPiArICB9DQo+ID4gPiArDQo+ID4gPiArICByZXR1cm4gVFJVRTsN Cj4gPiA+ICt9DQo+ID4gPiArDQo+ID4gPiArLyoqDQo+ID4gPiArICBUaGlzIHJvdXRpbmUgd2ls bCBjaGVjayBHUFQgcGFydGl0aW9uIGVudHJ5IGFuZCByZXR1cm4gZW50cnkgc3RhdHVzLg0KPiA+ ID4gKw0KPiA+ID4gKyAgQ2F1dGlvbjogVGhpcyBmdW5jdGlvbiBtYXkgcmVjZWl2ZSB1bnRydXN0 ZWQgaW5wdXQuDQo+ID4gPiArICBUaGUgR1BUIHBhcnRpdGlvbiBlbnRyeSBpcyBleHRlcm5hbCBp bnB1dCwgc28gdGhpcyByb3V0aW5lDQo+ID4gPiArICB3aWxsIGRvIGJhc2ljIHZhbGlkYXRpb24g Zm9yIEdQVCBwYXJ0aXRpb24gZW50cnkgYW5kIHJlcG9ydCBzdGF0dXMuDQo+ID4gPiArDQo+ID4g PiArICBAcGFyYW1baW5dICAgIFBhcnRIZWFkZXIgICAgUGFydGl0aW9uIHRhYmxlIGhlYWRlciBz dHJ1Y3R1cmUNCj4gPiA+ICsgIEBwYXJhbVtpbl0gICAgUGFydEVudHJ5ICAgICBUaGUgcGFydGl0 aW9uIGVudHJ5IGFycmF5DQo+ID4gPiArICBAcGFyYW1bb3V0XSAgIFBFbnRyeVN0YXR1cyAgdGhl IHBhcnRpdGlvbiBlbnRyeSBzdGF0dXMgYXJyYXkNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICByZWNvcmRpbmcgdGhlIHN0YXR1cyBvZiBlYWNoIHBhcnRpdGlvbg0KPiA+ID4g Kw0KPiA+ID4gKyoqLw0KPiA+ID4gK1NUQVRJQw0KPiA+ID4gK1ZPSUQNCj4gPiA+ICtQYXJ0aXRp b25DaGVja0dwdEVudHJ5ICgNCj4gPiA+ICsgIElOICBFRklfUEFSVElUSU9OX1RBQkxFX0hFQURF UiAgKlBhcnRIZWFkZXIsDQo+ID4gPiArICBJTiAgRUZJX1BBUlRJVElPTl9FTlRSWSAgICAgICAg ICpQYXJ0RW50cnksDQo+ID4gPiArICBPVVQgRUZJX1BBUlRJVElPTl9FTlRSWV9TVEFUVVMgICpQ RW50cnlTdGF0dXMNCj4gPiA+ICsgICkNCj4gPiA+ICt7DQo+ID4gPiArICBFRklfTEJBICAgICAg ICAgICAgICBTdGFydGluZ0xCQTsNCj4gPiA+ICsgIEVGSV9MQkEgICAgICAgICAgICAgIEVuZGlu Z0xCQTsNCj4gPiA+ICsgIEVGSV9QQVJUSVRJT05fRU5UUlkgICpFbnRyeTsNCj4gPiA+ICsgIFVJ TlROICAgICAgICAgICAgICAgIEluZGV4MTsNCj4gPiA+ICsgIFVJTlROICAgICAgICAgICAgICAg IEluZGV4MjsNCj4gPiA+ICsNCj4gPiA+ICsgIERFQlVHICgoRUZJX0RfVkVSQk9TRSwgIiBzdGFy dCBjaGVjayBwYXJ0aXRpb24gZW50cmllc1xuIikpOw0KPiA+ID4gKyAgZm9yIChJbmRleDEgPSAw OyBJbmRleDEgPCBQYXJ0SGVhZGVyLT5OdW1iZXJPZlBhcnRpdGlvbkVudHJpZXM7DQo+ID4gPiBJ bmRleDErKykgew0KPiA+ID4gKyAgICBFbnRyeSA9IChFRklfUEFSVElUSU9OX0VOVFJZICopKChV SU5UOCAqKVBhcnRFbnRyeSArIEluZGV4MSAqDQo+ID4gPiBQYXJ0SGVhZGVyLT5TaXplT2ZQYXJ0 aXRpb25FbnRyeSk7DQo+ID4gPiArICAgIGlmIChDb21wYXJlR3VpZCAoJkVudHJ5LT5QYXJ0aXRp b25UeXBlR1VJRCwNCj4gPiA+ICZnRWZpUGFydFR5cGVVbnVzZWRHdWlkKSkgew0KPiA+ID4gKyAg ICAgIGNvbnRpbnVlOw0KPiA+ID4gKyAgICB9DQo+ID4gPiArDQo+ID4gPiArICAgIFN0YXJ0aW5n TEJBID0gRW50cnktPlN0YXJ0aW5nTEJBOw0KPiA+ID4gKyAgICBFbmRpbmdMQkEgICA9IEVudHJ5 LT5FbmRpbmdMQkE7DQo+ID4gPiArICAgIGlmIChTdGFydGluZ0xCQSA+IEVuZGluZ0xCQSB8fA0K PiA+ID4gKyAgICAgICAgU3RhcnRpbmdMQkEgPCBQYXJ0SGVhZGVyLT5GaXJzdFVzYWJsZUxCQSB8 fA0KPiA+ID4gKyAgICAgICAgU3RhcnRpbmdMQkEgPiBQYXJ0SGVhZGVyLT5MYXN0VXNhYmxlTEJB IHx8DQo+ID4gPiArICAgICAgICBFbmRpbmdMQkEgPCBQYXJ0SGVhZGVyLT5GaXJzdFVzYWJsZUxC QSB8fA0KPiA+ID4gKyAgICAgICAgRW5kaW5nTEJBID4gUGFydEhlYWRlci0+TGFzdFVzYWJsZUxC QQ0KPiA+ID4gKyAgICAgICApIHsNCj4gPiA+ICsgICAgICBQRW50cnlTdGF0dXNbSW5kZXgxXS5P dXRPZlJhbmdlID0gVFJVRTsNCj4gPiA+ICsgICAgICBjb250aW51ZTsNCj4gPiA+ICsgICAgfQ0K PiA+ID4gKw0KPiA+ID4gKyAgICBpZiAoKEVudHJ5LT5BdHRyaWJ1dGVzICYgQklUMSkgIT0gMCkg ew0KPiA+ID4gKyAgICAgIC8vDQo+ID4gPiArICAgICAgLy8gSWYgQml0IDEgaXMgc2V0LCB0aGlz IGluZGljYXRlIHRoYXQgdGhpcyBpcyBhbiBPUyBzcGVjaWZpYyBHVUlEIHBhcnRpdGlvbi4NCj4g PiA+ICsgICAgICAvLw0KPiA+ID4gKyAgICAgIFBFbnRyeVN0YXR1c1tJbmRleDFdLk9zU3BlY2lm aWMgPSBUUlVFOw0KPiA+ID4gKyAgICB9DQo+ID4gPiArDQo+ID4gPiArICAgIGZvciAoSW5kZXgy ID0gSW5kZXgxICsgMTsgSW5kZXgyIDwgUGFydEhlYWRlci0NCj4gPiA+ID5OdW1iZXJPZlBhcnRp dGlvbkVudHJpZXM7IEluZGV4MisrKSB7DQo+ID4gPiArICAgICAgRW50cnkgPSAoRUZJX1BBUlRJ VElPTl9FTlRSWSAqKSgoVUlOVDggKilQYXJ0RW50cnkgKyBJbmRleDIgKg0KPiA+ID4gUGFydEhl YWRlci0+U2l6ZU9mUGFydGl0aW9uRW50cnkpOw0KPiA+ID4gKyAgICAgIGlmIChDb21wYXJlR3Vp ZCAoJkVudHJ5LT5QYXJ0aXRpb25UeXBlR1VJRCwNCj4gPiA+ICZnRWZpUGFydFR5cGVVbnVzZWRH dWlkKSkgew0KPiA+ID4gKyAgICAgICAgY29udGludWU7DQo+ID4gPiArICAgICAgfQ0KPiA+ID4g Kw0KPiA+ID4gKyAgICAgIGlmIChFbnRyeS0+RW5kaW5nTEJBID49IFN0YXJ0aW5nTEJBICYmIEVu dHJ5LT5TdGFydGluZ0xCQSA8PQ0KPiA+IEVuZGluZ0xCQSkNCj4gPiA+IHsNCj4gPiA+ICsgICAg ICAgIC8vDQo+ID4gPiArICAgICAgICAvLyBUaGlzIHJlZ2lvbiBvdmVybGFwcyB3aXRoIHRoZSBJ bmRleDEndGggcmVnaW9uDQo+ID4gPiArICAgICAgICAvLw0KPiA+ID4gKyAgICAgICAgUEVudHJ5 U3RhdHVzW0luZGV4MV0uT3ZlcmxhcCAgPSBUUlVFOw0KPiA+ID4gKyAgICAgICAgUEVudHJ5U3Rh dHVzW0luZGV4Ml0uT3ZlcmxhcCAgPSBUUlVFOw0KPiA+ID4gKyAgICAgICAgY29udGludWU7DQo+ ID4gPiArICAgICAgfQ0KPiA+ID4gKyAgICB9DQo+ID4gPiArICB9DQo+ID4gPiArDQo+ID4gPiAr ICBERUJVRyAoKEVGSV9EX1ZFUkJPU0UsICIgRW5kIGNoZWNrIHBhcnRpdGlvbiBlbnRyaWVzXG4i KSk7DQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4gKw0KPiA+ID4gKy8qKg0KPiA+ID4gKyAgVXBk YXRlcyB0aGUgQ1JDMzIgdmFsdWUgaW4gdGhlIHRhYmxlIGhlYWRlci4NCj4gPiA+ICsNCj4gPiA+ ICsgIEBwYXJhbSAgSGRyICAgIFRhYmxlIHRvIHVwZGF0ZQ0KPiA+ID4gKw0KPiA+ID4gKyoqLw0K PiA+ID4gK1NUQVRJQw0KPiA+ID4gK1ZPSUQNCj4gPiA+ICtQYXJ0aXRpb25TZXRDcmMgKA0KPiA+ ID4gKyAgSU4gT1VUIEVGSV9UQUJMRV9IRUFERVIgKkhkcg0KPiA+ID4gKyAgKQ0KPiA+ID4gK3sN Cj4gPiA+ICsgIFBhcnRpdGlvblNldENyY0FsdFNpemUgKEhkci0+SGVhZGVyU2l6ZSwgSGRyKTsN Cj4gPiA+ICt9DQo+ID4gPiArDQo+ID4gPiArDQo+ID4gPiArLyoqDQo+ID4gPiArICBVcGRhdGVz IHRoZSBDUkMzMiB2YWx1ZSBpbiB0aGUgdGFibGUgaGVhZGVyLg0KPiA+ID4gKw0KPiA+ID4gKyAg QHBhcmFtICBTaXplICAgVGhlIHNpemUgb2YgdGhlIHRhYmxlDQo+ID4gPiArICBAcGFyYW0gIEhk ciAgICBUYWJsZSB0byB1cGRhdGUNCj4gPiA+ICsNCj4gPiA+ICsqKi8NCj4gPiA+ICtTVEFUSUMN Cj4gPiA+ICtWT0lEDQo+ID4gPiArUGFydGl0aW9uU2V0Q3JjQWx0U2l6ZSAoDQo+ID4gPiArICBJ TiBVSU5UTiAgICAgICAgICAgICAgICAgU2l6ZSwNCj4gPiA+ICsgIElOIE9VVCBFRklfVEFCTEVf SEVBREVSICAqSGRyDQo+ID4gPiArICApDQo+ID4gPiArew0KPiA+ID4gKyAgVUlOVDMyICBDcmM7 DQo+ID4gPiArDQo+ID4gPiArICBIZHItPkNSQzMyID0gMDsNCj4gPiA+ICsgIGdCUy0+Q2FsY3Vs YXRlQ3JjMzIgKChVSU5UOCAqKUhkciwgU2l6ZSwgJkNyYyk7DQo+ID4gPiArICBIZHItPkNSQzMy ID0gQ3JjOw0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICsNCj4gPiA+ICsvKioNCj4gPiA+ICsg IENoZWNrcyB0aGUgQ1JDMzIgdmFsdWUgaW4gdGhlIHRhYmxlIGhlYWRlci4NCj4gPiA+ICsNCj4g PiA+ICsgIEBwYXJhbSAgTWF4U2l6ZSAgIE1heCBTaXplIGxpbWl0DQo+ID4gPiArICBAcGFyYW0g IEhkciAgICAgICBUYWJsZSB0byBjaGVjaw0KPiA+ID4gKw0KPiA+ID4gKyAgQHJldHVybiBUUlVF ICAgICAgQ1JDIFZhbGlkDQo+ID4gPiArICBAcmV0dXJuIEZBTFNFICAgICBDUkMgSW52YWxpZA0K PiA+ID4gKw0KPiA+ID4gKyoqLw0KPiA+ID4gK1NUQVRJQw0KPiA+ID4gK0JPT0xFQU4NCj4gPiA+ ICtQYXJ0aXRpb25DaGVja0NyYyAoDQo+ID4gPiArICBJTiBVSU5UTiAgICAgICAgICAgICAgICAg TWF4U2l6ZSwNCj4gPiA+ICsgIElOIE9VVCBFRklfVEFCTEVfSEVBREVSICAqSGRyDQo+ID4gPiAr ICApDQo+ID4gPiArew0KPiA+ID4gKyAgcmV0dXJuIFBhcnRpdGlvbkNoZWNrQ3JjQWx0U2l6ZSAo TWF4U2l6ZSwgSGRyLT5IZWFkZXJTaXplLCBIZHIpOw0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ ICsNCj4gPiA+ICsvKioNCj4gPiA+ICsgIENoZWNrcyB0aGUgQ1JDMzIgdmFsdWUgaW4gdGhlIHRh YmxlIGhlYWRlci4NCj4gPiA+ICsNCj4gPiA+ICsgIEBwYXJhbSAgTWF4U2l6ZSAgIE1heCBTaXpl IGxpbWl0DQo+ID4gPiArICBAcGFyYW0gIFNpemUgICAgICBUaGUgc2l6ZSBvZiB0aGUgdGFibGUN Cj4gPiA+ICsgIEBwYXJhbSAgSGRyICAgICAgIFRhYmxlIHRvIGNoZWNrDQo+ID4gPiArDQo+ID4g PiArICBAcmV0dXJuIFRSVUUgICAgQ1JDIFZhbGlkDQo+ID4gPiArICBAcmV0dXJuIEZBTFNFICAg Q1JDIEludmFsaWQNCj4gPiA+ICsNCj4gPiA+ICsqKi8NCj4gPiA+ICtTVEFUSUMNCj4gPiA+ICtC T09MRUFODQo+ID4gPiArUGFydGl0aW9uQ2hlY2tDcmNBbHRTaXplICgNCj4gPiA+ICsgIElOIFVJ TlROICAgICAgICAgICAgICAgICBNYXhTaXplLA0KPiA+ID4gKyAgSU4gVUlOVE4gICAgICAgICAg ICAgICAgIFNpemUsDQo+ID4gPiArICBJTiBPVVQgRUZJX1RBQkxFX0hFQURFUiAgKkhkcg0KPiA+ ID4gKyAgKQ0KPiA+ID4gK3sNCj4gPiA+ICsgIFVJTlQzMiAgICAgIENyYzsNCj4gPiA+ICsgIFVJ TlQzMiAgICAgIE9yZ0NyYzsNCj4gPiA+ICsgIEVGSV9TVEFUVVMgIFN0YXR1czsNCj4gPiA+ICsN Cj4gPiA+ICsgIENyYyA9IDA7DQo+ID4gPiArDQo+ID4gPiArICBpZiAoU2l6ZSA9PSAwKSB7DQo+ ID4gPiArICAgIC8vDQo+ID4gPiArICAgIC8vIElmIGhlYWRlciBzaXplIGlzIDAgQ1JDIHdpbGwg cGFzcyBzbyByZXR1cm4gRkFMU0UgaGVyZQ0KPiA+ID4gKyAgICAvLw0KPiA+ID4gKyAgICByZXR1 cm4gRkFMU0U7DQo+ID4gPiArICB9DQo+ID4gPiArDQo+ID4gPiArICBpZiAoKE1heFNpemUgIT0g MCkgJiYgKFNpemUgPiBNYXhTaXplKSkgew0KPiA+ID4gKyAgICBERUJVRyAoKEVGSV9EX0VSUk9S LCAiQ2hlY2tDcmMzMjogU2l6ZSA+IE1heFNpemVcbiIpKTsNCj4gPiA+ICsgICAgcmV0dXJuIEZB TFNFOw0KPiA+ID4gKyAgfQ0KPiA+ID4gKyAgLy8NCj4gPiA+ICsgIC8vIGNsZWFyIG9sZCBjcmMg ZnJvbSBoZWFkZXINCj4gPiA+ICsgIC8vDQo+ID4gPiArICBPcmdDcmMgICAgICA9IEhkci0+Q1JD MzI7DQo+ID4gPiArICBIZHItPkNSQzMyICA9IDA7DQo+ID4gPiArDQo+ID4gPiArICBTdGF0dXMg ICAgICA9IGdCUy0+Q2FsY3VsYXRlQ3JjMzIgKChVSU5UOCAqKUhkciwgU2l6ZSwgJkNyYyk7DQo+ ID4gPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gPiArICAgIERFQlVHICgoRUZJ X0RfRVJST1IsICJDaGVja0NyYzMyOiBDcmMgY2FsY3VsYXRpb24gZmFpbGVkXG4iKSk7DQo+ID4g PiArICAgIHJldHVybiBGQUxTRTsNCj4gPiA+ICsgIH0NCj4gPiA+ICsgIC8vDQo+ID4gPiArICAv LyBzZXQgcmVzdWx0cw0KPiA+ID4gKyAgLy8NCj4gPiA+ICsgIEhkci0+Q1JDMzIgPSBDcmM7DQo+ ID4gPiArDQo+ID4gPiArICAvLw0KPiA+ID4gKyAgLy8gcmV0dXJuIHN0YXR1cw0KPiA+ID4gKyAg Ly8NCj4gPiA+ICsgIERFQlVHX0NPREVfQkVHSU4gKCk7DQo+ID4gPiArICBpZiAoT3JnQ3JjICE9 IENyYykgew0KPiA+ID4gKyAgICBERUJVRyAoKEVGSV9EX0VSUk9SLCAiQ2hlY2tDcmMzMjogQ3Jj IGNoZWNrIGZhaWxlZFxuIikpOw0KPiA+ID4gKyAgfQ0KPiA+ID4gKyAgREVCVUdfQ09ERV9FTkQg KCk7DQo+ID4gPiArDQo+ID4gPiArICByZXR1cm4gKEJPT0xFQU4pKE9yZ0NyYyA9PSBDcmMpOw0K PiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICsvKioNCj4gPiA+ICsgIENvbnZlcnRzIGEgR1VJRCBp bnRvIGEgdW5pY29kZSBzdHJpbmcuDQo+ID4gPiArDQo+ID4gPiArICBAcGFyYW0gIFtpbl0gR3Vp ZCAgICAgICAgICAgICBBIEdVSUQgdG8gYmUgY29udmVydGVkDQo+ID4gPiArICBAcGFyYW0gIFtv dXRdIEJ1ZmZlciAgICAgICAgICBBIHBvaW50ZXIgdG8gYSBidWZmZXIgcmVjZWl2aW5nIHRoZSBz dHJpbmcNCj4gPiA+ICsgIEBwYXJhbSAgW2luXSBCdWZmZXJTaXplICAgICAgIFNpemUgb2YgdGhl IGJ1ZmZlcg0KPiA+ID4gKw0KPiA+ID4gKyAgQHJldHVybiBFRklfU1VDQ0VTUyAgICAgICAgICAg U3VjY2Vzc2Z1bCBjb252ZXJzaW9uDQo+ID4gPiArICBAcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFN RVRFUiBDb252ZXJzaW9uIGZhaWxlZA0KPiA+ID4gKw0KPiA+ID4gKyoqLw0KPiA+ID4gKw0KPiA+ ID4gK1NUQVRJQw0KPiA+ID4gK0VGSV9TVEFUVVMNCj4gPiA+ICtHdWlkVG9TdHJpbmcgKA0KPiA+ ID4gKyAgSU4gIEVGSV9HVUlEICAqR3VpZCwNCj4gPiA+ICsgIE9VVCBDSEFSMTYgICAgKkJ1ZmZl ciwNCj4gPiA+ICsgIElOICBVSU5UTiAgICAgQnVmZmVyU2l6ZQ0KPiA+ID4gKyAgKQ0KPiA+ID4g K3sNCj4gPiA+ICsgIFVJTlROIFNpemU7DQo+ID4gPiArICBFRklfU1RBVFVTIFN0YXR1czsNCj4g PiA+ICsNCj4gPiA+ICsgIFN0YXR1cyA9IEVGSV9TVUNDRVNTOw0KPiA+ID4gKw0KPiA+ID4gKyAg U2l6ZSA9IFVuaWNvZGVTUHJpbnQgKA0KPiA+ID4gKyAgICBCdWZmZXIsDQo+ID4gPiArICAgIEJ1 ZmZlclNpemUsDQo+ID4gPiArICAgIEwiJTA4eC0lMDR4LSUwNHgtJTAyeCUwMngtJTAyeCUwMngl MDJ4JTAyeCUwMnglMDJ4IiwNCj4gPiA+ICsgICAgKFVJTlROKUd1aWQtPkRhdGExLA0KPiA+ID4g KyAgICAoVUlOVE4pR3VpZC0+RGF0YTIsDQo+ID4gPiArICAgIChVSU5UTilHdWlkLT5EYXRhMywN Cj4gPiA+ICsgICAgKFVJTlROKUd1aWQtPkRhdGE0WzBdLA0KPiA+ID4gKyAgICAoVUlOVE4pR3Vp ZC0+RGF0YTRbMV0sDQo+ID4gPiArICAgIChVSU5UTilHdWlkLT5EYXRhNFsyXSwNCj4gPiA+ICsg ICAgKFVJTlROKUd1aWQtPkRhdGE0WzNdLA0KPiA+ID4gKyAgICAoVUlOVE4pR3VpZC0+RGF0YTRb NF0sDQo+ID4gPiArICAgIChVSU5UTilHdWlkLT5EYXRhNFs1XSwNCj4gPiA+ICsgICAgKFVJTlRO KUd1aWQtPkRhdGE0WzZdLA0KPiA+ID4gKyAgICAoVUlOVE4pR3VpZC0+RGF0YTRbN10NCj4gPiA+ ICsgICAgKTsNCj4gPiA+ICsgIGlmICghU2l6ZSkgew0KPiA+ID4gKyAgICBTdGF0dXMgPSBFRklf SU5WQUxJRF9QQVJBTUVURVI7DQo+ID4gPiArICB9DQo+ID4gPiArDQo+ID4gPiArICByZXR1cm4g U3RhdHVzOw0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICsvKioNCj4gPiA+ICsgIEdldCBhIHN0 cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIGtub3duDQo+ID4gPiArICBwYXJ0aXRpb24gdHlwZSBH VUlELiBJZiBwYXJ0aXRpb24gR1VJRCBpcyBub3QNCj4gPiA+ICsgIGtub3duLCBnZXRzIGEgc3Ry aW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBHVUlEDQo+ID4gPiArDQo+ID4gPiArICBAcGFyYW0g IEdVSUQgICAgICAgICAgR3VpZCB0byBiZSBzZWFyY2hlZCBmb3INCj4gPiA+ICsgIEBwYXJhbSAg UGFydFR5cGVTdHIgICBCdWZmZXIgcmVjZWl2aW5nIHRoZSBzdHJpbmcNCj4gPiA+ICsgIEBwYXJh bSAgTm9HdWlkU3RyICAgICBEbyBub3QgY29udmVydCBHVUlEIHRvIHN0cmluZw0KPiA+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgIGZvciBhbiB1bmtub3duIHBhcnRpdGlvbiB0eXBlDQo+ID4g PiArDQo+ID4gPiArICBAcmV0dXJuIEVGSV9TVUNDRVNTICAgR1VJRCB0eXBlIGlzIGtub3duDQo+ ID4gPiArICBAcmV0dXJuIEVGSV9OT1RfRk9VTkQgVW5rbm93biBHVUlEIHBhcnRpdGlvbiB0eXBl DQo+ID4gPiArDQo+ID4gPiArKiovDQo+ID4gPiArRUZJX1NUQVRVUw0KPiA+ID4gK0dldFBhcnRp dGlvblR5cGVTdHIgKA0KPiA+ID4gKyAgSU4gRUZJX0dVSUQgR3VpZCwNCj4gPiA+ICsgIE9VVCBD SEFSMTYgKlBhcnRUeXBlU3RyLA0KPiA+ID4gKyAgSU4gQk9PTEVBTiBOb0d1aWRTdHIpDQo+ID4g PiArew0KPiA+ID4gKyAgVUlOVE4gSW5kZXg7DQo+ID4gPiArICBFRklfU1RBVFVTIFN0YXR1czsN Cj4gPiA+ICsNCj4gPiA+ICsgIFN0YXR1cyA9IEVGSV9TVUNDRVNTOw0KPiA+ID4gKyAgZm9yIChJ bmRleCA9IDA7IEluZGV4IDwgQVJSQVlfU0laRSAoUGFydGl0aW9uVHlwZXMpOyBJbmRleCsrKSB7 DQo+ID4gPiArICAgIGlmIChDb21wYXJlR3VpZCAoJkd1aWQsICZQYXJ0aXRpb25UeXBlc1tJbmRl eF0uVHlwZUd1aWQpKSB7DQo+ID4gPiArICAgICAgU3RybkNweSAoUGFydFR5cGVTdHIsIFBhcnRp dGlvblR5cGVzW0luZGV4XS5UeXBlTmFtZSwNCj4gPiA+IE1BWF9QQVJUSVRJT05fTkFNRV9MRU5H VEgpOw0KPiA+ID4gKyAgICAgIHJldHVybiBTdGF0dXM7DQo+ID4gPiArICAgIH0NCj4gPiA+ICsg IH0NCj4gPiA+ICsgIGlmICghTm9HdWlkU3RyKSB7DQo+ID4gPiArICAgIEd1aWRUb1N0cmluZyAo Jkd1aWQsIFBhcnRUeXBlU3RyLCAoTUFYX1BBUlRJVElPTl9OQU1FX0xFTkdUSCArDQo+ID4gMSkN Cj4gPiA+ICogc2l6ZW9mKENIQVIxNikpOw0KPiA+ID4gKyAgfQ0KPiA+ID4gKyAgcmV0dXJuIEVG SV9OT1RfRk9VTkQ7DQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4gKy8qKg0KPiA+ID4gKyAgTGlz dHMgcGFydGl0aW9ucyBvbiBhIGJsb2NrIGRldmljZS4NCj4gPiA+ICsNCj4gPiA+ICsgIEByZXR1 cm4gICBOdW1iZXIgb2YgcGFydGl0aW9ucyB1c2VkDQo+ID4gPiArKiovDQo+ID4gPiArDQo+ID4g PiArVUlOVE4NCj4gPiA+ICtQYXJ0aXRpb25MaXN0R3B0RW50cmllcyAoVk9JRCkNCj4gPiA+ICt7 DQo+ID4gPiArICBVSU5UTiAgICAgICAgICAgICAgICBJbmRleDsNCj4gPiA+ICsgIEVGSV9QQVJU SVRJT05fRU5UUlkgICpFbnRyeTsNCj4gPiA+ICsgIEVGSV9MQkEgICAgICAgICAgICAgIExlbmd0 aDsNCj4gPiA+ICsgIFVJTlROICAgICAgICAgICAgICAgIE51bUVudHJpZXM7IC8vIFVzZWQgZW50 cmllcw0KPiA+ID4gKyAgVUlOVE4gICAgICAgICAgICAgICAgQmxvY2tTaXplOw0KPiA+ID4gKyAg Qk9PTEVBTiAgICAgICAgICAgICAgRmlyc3RUaW1lOw0KPiA+ID4gKyAgVUlOVDY0ICAgICAgICAg ICAgICAgQmxvY2tzT2NjdXBpZWQ7DQo+ID4gPiArDQo+ID4gPiArICBOdW1FbnRyaWVzID0gMDsN Cj4gPiA+ICsgIEJsb2NrU2l6ZSA9IEJsb2NrSW8tPk1lZGlhLT5CbG9ja1NpemU7DQo+ID4gPiAr ICBGaXJzdFRpbWUgPSBUUlVFOw0KPiA+ID4gKw0KPiA+ID4gKyAgaWYgKCFHcHRWYWxpZCkgew0K PiA+ID4gKyAgICByZXR1cm4gMDsNCj4gPiA+ICsgIH0NCj4gPiA+ICsNCj4gPiA+ICsgIEJsb2Nr c09jY3VwaWVkID0gMDsNCj4gPiA+ICsNCj4gPiA+ICsgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8 IFByaW1hcnlIZWFkZXItPk51bWJlck9mUGFydGl0aW9uRW50cmllczsNCj4gPiA+IEluZGV4Kysp IHsNCj4gPiA+ICsNCj4gPiA+ICsgICAgQk9PTEVBTiBTcGVjaWZpYzsNCj4gPiA+ICsgICAgQ0hB UjE2IFBhcnRUeXBlU3RyW01BWF9QQVJUSVRJT05fTkFNRV9MRU5HVEggKyAxXTsNCj4gPiA+ICsN Cj4gPiA+ICsgICAgU3BlY2lmaWMgPSBGQUxTRTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgRW50cnkg PSAoRUZJX1BBUlRJVElPTl9FTlRSWSAqKSgoVUlOVDggKilQYXJ0RW50cnkgKyBJbmRleCAqDQo+ ID4gPiBQcmltYXJ5SGVhZGVyLT5TaXplT2ZQYXJ0aXRpb25FbnRyeSk7DQo+ID4gPiArDQo+ID4g PiArICAgIExlbmd0aCA9IEVudHJ5LT5FbmRpbmdMQkEgLSBFbnRyeS0+U3RhcnRpbmdMQkEgKyAx Ow0KPiA+ID4gKw0KPiA+ID4gKyAgICBpZiAoQ29tcGFyZUd1aWQgKCZFbnRyeS0+UGFydGl0aW9u VHlwZUdVSUQsDQo+ID4gPiAmZ0VmaVBhcnRUeXBlVW51c2VkR3VpZCkpIHsNCj4gPiA+ICsgICAg ICBjb250aW51ZTsNCj4gPiA+ICsgICAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgICBpZiAoRmlyc3RU aW1lKSB7DQo+ID4gPiArICAgICAgUHJpbnQgKEwiICBObyBcdCUtMzZzXHRTdGFydCAoTEJBKVx0 RW5kIChMQkEpXHRTaXplIChNaUIpXHQgUGFydGl0aW9uDQo+ID4gPiBUeXBlXHJcbiIsIEwiTmFt ZSIpOw0KPiA+ID4gKyAgICAgIFByaW50IChMIiAtLS0tICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSAgIC0tLS0tLS0tLS0tICAgICAtLS0tLS0tLS0tLSAgICAgLS0tDQo+ ID4gLS0NCj4gPiA+IC0tLS0tICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1c clxuIik7DQo+ID4gPiArICAgICAgRmlyc3RUaW1lID0gRkFMU0U7DQo+ID4gPiArICAgIH0NCj4g PiA+ICsgICAgTnVtRW50cmllcysrOw0KPiA+ID4gKyAgICBpZiAoUEVudHJ5U3RhdHVzW0luZGV4 XS5PdXRPZlJhbmdlIHx8DQo+ID4gPiArICAgICAgICBQRW50cnlTdGF0dXNbSW5kZXhdLk92ZXJs YXAgfHwNCj4gPiA+ICsgICAgICAgIFBFbnRyeVN0YXR1c1tJbmRleF0uT3NTcGVjaWZpYykgew0K PiA+ID4gKyAgICAgIFNwZWNpZmljID0gVFJVRTsNCj4gPiA+ICsgICAgfQ0KPiA+ID4gKw0KPiA+ ID4gKyAgICBCbG9ja3NPY2N1cGllZCArPSBMZW5ndGg7DQo+ID4gPiArDQo+ID4gPiArICAgIEdl dFBhcnRpdGlvblR5cGVTdHIgKEVudHJ5LT5QYXJ0aXRpb25UeXBlR1VJRCwgKENIQVIxNg0KPiA+ ICopJlBhcnRUeXBlU3RyLA0KPiA+ID4gRkFMU0UpOw0KPiA+ID4gKw0KPiA+ID4gKyAgICBQcmlu dCAoTCIlMXMgJS0zZFx0JS0zNnNcdDB4JTA5bGx4XHQweCUwOWxseFx0JTA2bGx1XHQgICAgICAg ICAlc1xyXG4iLA0KPiA+ID4gKyAgICAgICAgICAgU3BlY2lmaWMgPyBMIlMiIDogTCIiLA0KPiA+ ID4gKyAgICAgICAgICAgSW5kZXggKyAxLA0KPiA+ID4gKyAgICAgICAgICAgRW50cnktPlBhcnRp dGlvbk5hbWUsDQo+ID4gPiArICAgICAgICAgICAoVUlOVDY0KUVudHJ5LT5TdGFydGluZ0xCQSwN Cj4gPiA+ICsgICAgICAgICAgIChVSU5UNjQpRW50cnktPkVuZGluZ0xCQSwNCj4gPiA+ICsgICAg ICAgICAgIChNdWx0VTY0eDMyIChMZW5ndGgsIEJsb2NrU2l6ZSkpID4+IDIwLA0KPiA+ID4gKyAg ICAgICAgICAgUGFydFR5cGVTdHIpOw0KPiA+ID4gKyAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgLy8g VGhpcyBjb2RlIGJsb2NrIGlzIHRvIHByb3ZpZGUgYWRkaXRpb25hbCBpbmZvDQo+ID4gPiArICB7 DQo+ID4gPiArICAgIFVJTlQ2NCBEaXNrU2l6ZU1pQiwgU2l6ZU9jY3VwaWVkTWlCOw0KPiA+ID4g Kw0KPiA+ID4gKyAgICBEaXNrU2l6ZU1pQiA9IE11bHRVNjR4MzIgKFByaW1hcnlIZWFkZXItPkxh c3RVc2FibGVMQkEgLQ0KPiA+ID4gUHJpbWFyeUhlYWRlci0+Rmlyc3RVc2FibGVMQkEgKyAxLCBC bG9ja0lvLT5NZWRpYS0+QmxvY2tTaXplKSA+PiAyMDsNCj4gPiA+ICsgICAgU2l6ZU9jY3VwaWVk TWlCID0gTXVsdFU2NHgzMiAoQmxvY2tzT2NjdXBpZWQsIEJsb2NrSW8tPk1lZGlhLQ0KPiA+ID4g PkJsb2NrU2l6ZSkgPj4gMjA7DQo+ID4gPiArICAgIFByaW50IChMIlxyXG4lZCBwYXJ0aXRpb24o cykgdXNlZCBvdXQgb2YgJWRcclxuIiwgTnVtRW50cmllcywNCj4gPiA+IFByaW1hcnlIZWFkZXIt Pk51bWJlck9mUGFydGl0aW9uRW50cmllcyk7DQo+ID4gPiArICAgIFByaW50IChMIlRvdGFsIGRl dmljZSBjYXBhY2l0eSAobWludXMgR1BUIHNlcnZpY2UgYmxvY2tzKTogJWxsdQ0KPiA+ID4gTWlC XHJcblBhcnRpdGlvbmVkIHNwYWNlOiAlbGx1IE1pQlxyXG4iLA0KPiA+ID4gKyAgICAgICAgICAg RGlza1NpemVNaUIsDQo+ID4gPiArICAgICAgICAgICBTaXplT2NjdXBpZWRNaUIpOw0KPiA+ID4g KyAgICBQcmludCAoTCJVbnBhcnRpdGlvbmVkIHNwYWNlIGF2YWlsYWJsZTogJWxsdSBNaUIgKCVk JSUpXG4iLA0KPiA+ID4gKyAgICAgICAgICAgRGlza1NpemVNaUIgLSBTaXplT2NjdXBpZWRNaUIs DQo+ID4gPiArICAgICAgICAgICAoMTAwICogKERpc2tTaXplTWlCIC0gU2l6ZU9jY3VwaWVkTWlC KSkgLyBEaXNrU2l6ZU1pQik7DQo+ID4gPiArICB9DQo+ID4gPiArDQo+ID4gPiArICByZXR1cm4g TnVtRW50cmllczsNCj4gPiA+ICt9DQo+ID4gPiArDQo+ID4gPiArLyoqDQo+ID4gPiArICBMb2Nh dGUgYSBwYXJ0aXRpb24gYnkgY3JpdGVyaWENCj4gPiA+ICsNCj4gPiA+ICsgIEBwYXJhbSAgTmFt ZSAgICAgICAgIFBhcnRpdGlvbiBuYW1lIChvciBvcmRpbmFsIHJlcHJlc2VudGVkIGEgc3RyaW5n KQ0KPiA+ID4gKyAgQHBhcmFtICBTdGFydExiYSAgICAgU3RhcnRMYmEgb2YgdGhlIHBhcnRpdGlv biB0byBzZWFyY2ggZm9yDQo+ID4gPiArICBAcGFyYW0gIEVuZGluZ0xiYSAgICBFbmRpbmdMYmEg b2YgdGhlIHBhcnRpdGlvbiB0byBzZWFyY2ggZm9yDQo+ID4gPiArICBAcGFyYW0gIFNlYXJjaFR5 cGUgICBBIGNvbWJpbmF0aW9uIChPUikgb2Ygc2VhcmNoIG9wdGlvbnMuDQo+ID4gPiArICAgICAg ICAgICAgICAgICAgICAgICBPcHRpb25zIGFyZToNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICBTUkNfQllfTkFNRSAgICA9IHNlYXJjaCBieSBwYXJ0aXRpb24gbmFtZQ0KPiA+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgIFNSQ19CWV9MQkEgICAgID0gc2VhcmNoIGJ5IFN0YXJ0L0Vu ZGluZyBsYmENCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICBTUkNfQU5ZICAgICAgICA9 IHJldHVybnMgYSBmaXJzdCB1c2VkIHBhcnRpdGlvbg0KPiA+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgIFNSQ19CWV9OVU0gICAgID0gc2VhcmNoIGJ5IG9yZGluYWwNCj4gPiA+ICsNCj4gPiA+ ICsNCj4gPiA+ICsgIEByZXR1cm4gTm9uLU5VTEwgICAgUG9pbnRlciB0byB0aCBwYXJ0aXRpb24g Zm91bmQNCj4gPiA+ICsgIEByZXR1cm4gTlVMTCAgICAgICAgTm8gcGFydGl0aW9uIGZvdW5kDQo+ ID4gPiArDQo+ID4gPiArKiovDQo+ID4gPiArRUZJX1BBUlRJVElPTl9FTlRSWSAqDQo+ID4gPiAr UGFydGl0aW9uRmluZFBhcnRpdGlvbkJ5Q3JpdGVyaWEgKA0KPiA+ID4gKyAgSU4gT1BUSU9OQUwg Q09OU1QgQ0hBUjE2ICAgKk5hbWUsDQo+ID4gPiArICBJTiBPUFRJT05BTCBFRklfTEJBICAgICAg ICBTdGFydExiYSwNCj4gPiA+ICsgIElOIE9QVElPTkFMIEVGSV9MQkEgICAgICAgIEVuZGluZ0xi YSwNCj4gPiA+ICsgIElOIFNFQVJDSF9UWVBFICAgICAgICAgICAgIFNlYXJjaFR5cGUNCj4gPiA+ ICsgICkNCj4gPiA+ICt7DQo+ID4gPiArICBVSU5UTiAgICAgICAgICAgICAgICBJbmRleDsNCj4g PiA+ICsgIEVGSV9QQVJUSVRJT05fRU5UUlkgICpFbnRyeTsNCj4gPiA+ICsNCj4gPiA+ICsgIGlm ICghR3B0VmFsaWQpIHsNCj4gPiA+ICsgICAgcmV0dXJuIE5VTEw7DQo+ID4gPiArICB9DQo+ID4g PiArDQo+ID4gPiArICBpZiAoIU5hbWUgJiYgKFNlYXJjaFR5cGUgJiBTUkNfQllfTkFNRSkpIHsN Cj4gPiA+ICsgICAgcmV0dXJuIE5VTEw7DQo+ID4gPiArICB9DQo+ID4gPiArDQo+ID4gPiArICBm b3IgKEluZGV4ID0gMDsgSW5kZXggPCBQcmltYXJ5SGVhZGVyLT5OdW1iZXJPZlBhcnRpdGlvbkVu dHJpZXM7DQo+ID4gPiBJbmRleCsrKSB7DQo+ID4gPiArICAgIEVudHJ5ID0gKEVGSV9QQVJUSVRJ T05fRU5UUlkgKikoKFVJTlQ4ICopUGFydEVudHJ5ICsgSW5kZXggKg0KPiA+ID4gUHJpbWFyeUhl YWRlci0+U2l6ZU9mUGFydGl0aW9uRW50cnkpOw0KPiA+ID4gKw0KPiA+ID4gKyAgICBpZiAoQ29t cGFyZUd1aWQgKCZFbnRyeS0+UGFydGl0aW9uVHlwZUdVSUQsDQo+ID4gPiAmZ0VmaVBhcnRUeXBl VW51c2VkR3VpZCkpIHsNCj4gPiA+ICsgICAgICBjb250aW51ZTsNCj4gPiA+ICsgICAgfQ0KPiA+ ID4gKw0KPiA+ID4gKyAgICBpZiAoU2VhcmNoVHlwZSAmIFNSQ19BTlkpIHsNCj4gPiA+ICsgICAg ICByZXR1cm4gRW50cnk7DQo+ID4gPiArICAgIH0NCj4gPiA+ICsNCj4gPiA+ICsgICAgaWYgKFNl YXJjaFR5cGUgJiBTUkNfQllfTkFNRSkgew0KPiA+ID4gKyAgICAgIGlmICghU3RyQ21wIChOYW1l LCBFbnRyeS0+UGFydGl0aW9uTmFtZSkpIHsNCj4gPiA+ICsgICAgICAgIHJldHVybiBFbnRyeTsN Cj4gPiA+ICsgICAgICB9DQo+ID4gPiArICAgIH0NCj4gPiA+ICsgICAgaWYgKFNlYXJjaFR5cGUg JiBTUkNfQllfTlVNKSB7DQo+ID4gPiArICAgICAgVUlOVE4gT3JkaW5hbDsNCj4gPiA+ICsNCj4g PiA+ICsgICAgICBPcmRpbmFsID0gU2hlbGxTdHJUb1VpbnRuIChOYW1lKTsNCj4gPiA+ICsgICAg ICBpZiAoSW5kZXggPT0gKE9yZGluYWwgLSAxKSkgew0KPiA+ID4gKyAgICAgICAgcmV0dXJuIEVu dHJ5Ow0KPiA+ID4gKyAgICAgIH0NCj4gPiA+ICsgICAgfQ0KPiA+ID4gKyAgICBpZiAoU2VhcmNo VHlwZSAmIFNSQ19CWV9MQkEpIHsNCj4gPiA+ICsgICAgICBpZiAoDQo+ID4gPiArICAgICAgICAg ICgoU3RhcnRMYmEgPj0gRW50cnktPlN0YXJ0aW5nTEJBKSAmJg0KPiA+ID4gKyAgICAgICAgICAg KFN0YXJ0TGJhIDw9IEVudHJ5LT5FbmRpbmdMQkEpDQo+ID4gPiArICAgICAgICAgICkgfHwNCj4g PiA+ICsgICAgICAgICAgKChFbmRpbmdMYmEgPj0gRW50cnktPlN0YXJ0aW5nTEJBKSAmJg0KPiA+ ID4gKyAgICAgICAgICAgKEVuZGluZ0xiYSA8PSBFbnRyeS0+RW5kaW5nTEJBKQ0KPiA+ID4gKyAg ICAgICAgICApDQo+ID4gPiArICAgICAgICAgKSB7DQo+ID4gPiArICAgICAgICByZXR1cm4gRW50 cnk7DQo+ID4gPiArICAgICAgfQ0KPiA+ID4gKyAgICB9DQo+ID4gPiArICB9DQo+ID4gPiArICBy ZXR1cm4gTlVMTDsNCj4gPiA+ICt9DQo+ID4gPiArDQo+ID4gPiArLyoqDQo+ID4gPiArICBQcmlu dHMgaW5mb3JtYXRpb24gb24gYSBnaXZlbiBwYXJ0aXRpb24uDQo+ID4gPiArDQo+ID4gPiArICBA cGFyYW0gIEVudHJ5ICAgUG9pbnRlciB0byB0aGUgUGFydGl0aW9uIG9mIGludGVyZXN0DQo+ID4g PiArKiovDQo+ID4gPiArDQo+ID4gPiArVk9JRA0KPiA+ID4gK1BhcnRpdGlvblByaW50R3B0UGFy dEluZm8gKA0KPiA+ID4gKyAgSU4gRUZJX1BBUlRJVElPTl9FTlRSWSAqRW50cnkNCj4gPiA+ICsg ICkNCj4gPiA+ICt7DQo+ID4gPiArICBDT05TVCBDSEFSMTYgUGFydFN0cltNQVhfUEFSVElUSU9O X05BTUVfTEVOR1RIICsgMV0gPSB7IEwnXDAnIH07DQo+ID4gPiArICBDT05TVCBDSEFSMTYgKlN0 clVua25vd24gPSBMIlVua25vd24iOw0KPiA+ID4gKyAgRUZJX1NUQVRVUyBTdGF0dXM7DQo+ID4g PiArICBFRklfTEJBIExlbmd0aDsNCj4gPiA+ICsNCj4gPiA+ICsgIEFTU0VSVCAoRW50cnkpOw0K PiA+ID4gKw0KPiA+ID4gKyAgU3RhdHVzID0gR2V0UGFydGl0aW9uVHlwZVN0ciAoRW50cnktPlBh cnRpdGlvblR5cGVHVUlELCAoQ0hBUjE2DQo+ID4gPiAqKSZQYXJ0U3RyLCBUUlVFKTsNCj4gPiA+ ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiA+ICsgICAgU3RyQ3B5ICgoQ0hBUjE2 ICopJlBhcnRTdHIsIFN0clVua25vd24pOw0KPiA+ID4gKyAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAg TGVuZ3RoID0gRW50cnktPkVuZGluZ0xCQSAtIEVudHJ5LT5TdGFydGluZ0xCQSArIDE7DQo+ID4g PiArDQo+ID4gPiArICBQcmludCAoTCJQYXJ0aXRpb24gbmFtZTogJXNcclxuIiwgRW50cnktPlBh cnRpdGlvbk5hbWUpOw0KPiA+ID4gKyAgUHJpbnQgKEwiU3RhcnRpbmcgTEJBICA6IDB4JTA5bGx4 XHJcbkVuZGluZyBMQkEgICAgOiAweCUwOWxseFxyXG4iLA0KPiA+ID4gKyAgICAgICAgIChVSU5U NjQpRW50cnktPlN0YXJ0aW5nTEJBLCAoVUlOVDY0KUVudHJ5LT5FbmRpbmdMQkEpOw0KPiA+ID4g KyAgUHJpbnQgKEwiUGFydGl0aW9uIFNpemU6ICVsbHUgTWlCICgweCVsbHggYmxvY2tzKVxuIiwN Cj4gPiA+ICsgICAgICAgICAoTXVsdFU2NHgzMiAoTGVuZ3RoLCBCbG9ja0lvLT5NZWRpYS0+Qmxv Y2tTaXplKSkgPj4gMjAsIExlbmd0aCk7DQo+ID4gPiArICBQcmludCAoTCJBdHRyaWJ1dGVzICAg IDogMHglMDlsbHhcclxuIiwgRW50cnktPkF0dHJpYnV0ZXMpOw0KPiA+ID4gKyAgUHJpbnQgKEwi VHlwZS9HVUlEICAgICA6ICVzLyVnXHJcbiIsIFBhcnRTdHIsICZFbnRyeS0+UGFydGl0aW9uVHlw ZUdVSUQpOw0KPiA+ID4gKyAgUHJpbnQgKEwiVW5pcXVlIEdVSUQgICA6ICVnXG4iLCAmRW50cnkt PlVuaXF1ZVBhcnRpdGlvbkdVSUQpOw0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICsNCj4gPiA+ ICsvKioNCj4gPiA+ICsgIFdyaXRlcyBwcm90ZWN0aXZlIE1CUiB0byBhIGJsb2NrIGRldmljZS4N Cj4gPiA+ICsNCj4gPiA+ICsgIEByZXR1cm4gRUZJX1NVQ0NFU1MgICAgTUJSIHdyaXR0ZW4gc3Vj Y2Vzc2Z1bGx5DQo+ID4gPiArICBAcmV0dXJuIG90aGVyICAgICAgICAgIEZhaWxlZCB0byB3cml0 ZSBhbiBNQlINCj4gPiA+ICsNCj4gPiA+ICsqKi8NCj4gPiA+ICsNCj4gPiA+ICtTVEFUSUMNCj4g PiA+ICtFRklfU1RBVFVTDQo+ID4gPiArV3JpdGVQcm90ZWN0aXZlTWJyICgNCj4gPiA+ICsgIFZP SUQNCj4gPiA+ICsgICkNCj4gPiA+ICt7DQo+ID4gPiArICBVSU5UMzIgICAgICAgICAgICAgICBC bG9ja1NpemU7DQo+ID4gPiArICBVSU5UNjQgICAgICAgICAgICAgICBEaXNrU2l6ZTsNCj4gPiA+ ICsgIEVGSV9TVEFUVVMgICAgICAgICAgIFN0YXR1czsNCj4gPiA+ICsgIE1CUl9QQVJUSVRJT05f UkVDT1JEICpQYXJ0aXRpb247DQo+ID4gPiArICBNQVNURVJfQk9PVF9SRUNPUkQgICAqUHJvdGVj dGl2ZU1icjsNCj4gPiA+ICsNCj4gPiA+ICsgIEJsb2NrU2l6ZSA9IEJsb2NrSW8tPk1lZGlhLT5C bG9ja1NpemU7DQo+ID4gPiArDQo+ID4gPiArICBQcm90ZWN0aXZlTWJyID0gTlVMTDsNCj4gPiA+ ICsgIFByb3RlY3RpdmVNYnIgPSBBbGxvY2F0ZVplcm9Qb29sIChCbG9ja1NpemUpOw0KPiA+ID4g KyAgaWYgKFByb3RlY3RpdmVNYnIgPT0gTlVMTCkgew0KPiA+ID4gKyAgICByZXR1cm4gRUZJX09V VF9PRl9SRVNPVVJDRVM7DQo+ID4gPiArICB9DQo+ID4gPiArDQo+ID4gPiArICBEaXNrU2l6ZSA9 IEJsb2NrSW8tPk1lZGlhLT5MYXN0QmxvY2sgKyAxOw0KPiA+ID4gKyAgaWYgKERpc2tTaXplID4g MHhmZmZmZmZmZikgew0KPiA+ID4gKyAgICBEaXNrU2l6ZSA9IDB4ZmZmZmZmZmY7DQo+ID4gPiAr ICB9DQo+ID4gPiArDQo+ID4gPiArICBDb3B5TWVtIChQcm90ZWN0aXZlTWJyLCAmUHJvdGVjdGl2 ZU1iclRlbXBsYXRlLA0KPiA+ID4gc2l6ZW9mKE1BU1RFUl9CT09UX1JFQ09SRCkpOw0KPiA+ID4g Kw0KPiA+ID4gKyAgUGFydGl0aW9uID0gJlByb3RlY3RpdmVNYnItPlBhcnRpdGlvblswXTsNCj4g PiA+ICsNCj4gPiA+ICsgIFBhcnRpdGlvbi0+Qm9vdEluZGljYXRvciA9IDA7DQo+ID4gPiArICBQ YXJ0aXRpb24tPlN0YXJ0U2VjdG9yID0gMTsNCj4gPiA+ICsNCj4gPiA+ICsgIC8vDQo+ID4gPiAr ICAvLyBXZSBkb24ndCBhY3R1YWxseSBrbm93IHRoaXMgZGF0YSwgc28gd2UnbGwgbWFrZSB1cA0K PiA+ID4gKyAgLy8gc29tZXRoaW5nIHRoYXQgc2VlbXMgbGlrZWx5Lg0KPiA+ID4gKyAgLy8NCj4g PiA+ICsNCj4gPiA+ICsgIC8vDQo+ID4gPiArICAvLyBPbGQgc29mdHdhcmUgaXMgZXhwZWN0aW5n IHRoZSBQYXJ0aXRpb24gdG8gc3RhcnQgb24NCj4gPiA+ICsgIC8vIGEgVHJhY2sgYm91bmRhcnks IHNvIHdlJ2xsIHNldCB0cmFjayB0byAxIHRvIGF2b2lkICJvdmVybGF5Ig0KPiA+ID4gKyAgLy8g d2l0aCB0aGUgTUJSDQo+ID4gPiArICAvLw0KPiA+ID4gKw0KPiA+ID4gKyAgUGFydGl0aW9uLT5T dGFydFRyYWNrID0gMTsNCj4gPiA+ICsNCj4gPiA+ICsgIFN0YXR1cyA9IERpc2tJby0+V3JpdGVE aXNrICgNCj4gPiA+ICsgICAgRGlza0lvLA0KPiA+ID4gKyAgICBCbG9ja0lvLT5NZWRpYS0+TWVk aWFJZCwNCj4gPiA+ICsgICAgMCwNCj4gPiA+ICsgICAgQmxvY2tTaXplLA0KPiA+ID4gKyAgICBQ cm90ZWN0aXZlTWJyDQo+ID4gPiArICAgICk7DQo+ID4gPiArDQo+ID4gPiArICBNYnJWYWxpZCA9 ICFFRklfRVJST1IgKFN0YXR1cyk7DQo+ID4gPiArDQo+ID4gPiArICBTSEVMTF9GUkVFX05PTl9O VUxMIChQcm90ZWN0aXZlTWJyKTsNCj4gPiA+ICsNCj4gPiA+ICsgIHJldHVybiBTdGF0dXM7DQo+ ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4gKy8qKg0KPiA+ID4gKyAgV3JpdGUgR1BUIHRhYmxlcyB0 byB0aGUgYmxvY2sgZGV2aWNlLg0KPiA+ID4gKw0KPiA+ID4gKyAgQHJldHVybiBFRklfU1VDQ0VT UyAgICBHUFQgdGFibGVzIHdlcmUgc3VjY2Vzc2Z1bGx5IHdyaXR0ZW4vdXBkYXRlZA0KPiA+ID4g KyAgQHJldHVybiBvdGhlciAgICAgICAgICBGYWlsZWQgdG8gd3JpdGUvdXBkYXRlIEdQVCB0YWJs ZXMNCj4gPiA+ICsNCj4gPiA+ICsqKi8NCj4gPiA+ICsNCj4gPiA+ICtTVEFUSUMNCj4gPiA+ICtF RklfU1RBVFVTDQo+ID4gPiArV3JpdGVHUFQgKA0KPiA+ID4gKyAgVk9JRA0KPiA+ID4gKyAgKQ0K PiA+ID4gKy8qDQo+ID4gPiArICAgIENBTExFUiBpcyBleHBlY3RlZCB0byBmaWxsIGluOg0KPiA+ ID4gKyAgICAgICAgICAgIEZpcnN0VXNlYWJsZUxCQQ0KPiA+ID4gKyAgICAgICAgICAgIExhc3RV c2VhYmxlTEJBDQo+ID4gPiArICAgICAgICAgICAgRW50cnlDb3VudA0KPiA+ID4gKyAgICAgICAg ICAgIERpc2tHVUlEDQo+ID4gPiArDQo+ID4gPiArICAgIFdlIGZpbGwgaW4gdGhlIHJlc3QsIGFu ZCBibGFzdCBpdCBvdXQuDQo+ID4gPiArDQo+ID4gPiArICAgIFJldHVybnMgYSBzdGF0dXMuDQo+ ID4gPiArDQo+ID4gPiArKi8NCj4gPiA+ICt7DQo+ID4gPiArICBVSU5UMzIgICAgICBCbG9ja1Np emU7DQo+ID4gPiArICBVSU5UMzIgICAgICBUYWJsZVNpemU7DQo+ID4gPiArICBFRklfU1RBVFVT ICBTdGF0dXMgPSBFRklfU1VDQ0VTUzsNCj4gPiA+ICsNCj4gPiA+ICsgIEJsb2NrU2l6ZSA9IEJs b2NrSW8tPk1lZGlhLT5CbG9ja1NpemU7DQo+ID4gPiArICBUYWJsZVNpemUgPSBQcmltYXJ5SGVh ZGVyLT5OdW1iZXJPZlBhcnRpdGlvbkVudHJpZXMgKg0KPiA+ID4gc2l6ZW9mKEVGSV9QQVJUSVRJ T05fRU5UUlkpOw0KPiA+ID4gKw0KPiA+ID4gKyAgaWYgKCFNYnJWYWxpZCkgew0KPiA+ID4gKyAg ICBXcml0ZVByb3RlY3RpdmVNYnIgKCk7DQo+ID4gPiArICB9DQo+ID4gPiArICAvLw0KPiA+ID4g KyAgLy8gV3JpdGUgb3V0IHRoZSBwcmltYXJ5IGhlYWRlci4uLg0KPiA+ID4gKyAgLy8NCj4gPiA+ ICsgIFByaW1hcnlIZWFkZXItPkhlYWRlci5TaWduYXR1cmUgPSBFRklfUFRBQl9IRUFERVJfSUQ7 DQo+ID4gPiArICBQcmltYXJ5SGVhZGVyLT5IZWFkZXIuUmV2aXNpb24gPSBHUFRfUkVWSVNJT05f MV8wOw0KPiA+ID4gKyAgUHJpbWFyeUhlYWRlci0+SGVhZGVyLkhlYWRlclNpemUgPQ0KPiA+ID4g c2l6ZW9mKEVGSV9QQVJUSVRJT05fVEFCTEVfSEVBREVSKTsNCj4gPiA+ICsNCj4gPiA+ICsgIFBy aW1hcnlIZWFkZXItPkFsdGVybmF0ZUxCQSA9IEJhY2t1cEhlYWRlci0+TXlMQkE7DQo+ID4gPiAr DQo+ID4gPiArICBQcmltYXJ5SGVhZGVyLT5TaXplT2ZQYXJ0aXRpb25FbnRyeSA9IHNpemVvZihF RklfUEFSVElUSU9OX0VOVFJZKTsNCj4gPiA+ICsNCj4gPiA+ICsgIFN0YXR1cyA9IGdCUy0+Q2Fs Y3VsYXRlQ3JjMzIgKChVSU5UOCAqKVBhcnRFbnRyeSwgVGFibGVTaXplLA0KPiA+ID4gJlByaW1h cnlIZWFkZXItPlBhcnRpdGlvbkVudHJ5QXJyYXlDUkMzMik7DQo+ID4gPiArICBpZiAoRUZJX0VS Uk9SIChTdGF0dXMpKSB7DQo+ID4gPiArICAgIHJldHVybiBTdGF0dXM7DQo+ID4gPiArICB9DQo+ ID4gPiArDQo+ID4gPiArICAvLyBXcml0ZSBwcmltYXJ5IGhlYWRlcg0KPiA+ID4gKyAgUGFydGl0 aW9uU2V0Q3JjICgmUHJpbWFyeUhlYWRlci0+SGVhZGVyKTsNCj4gPiA+ICsNCj4gPiA+ICsgIFN0 YXR1cyA9IERpc2tJby0+V3JpdGVEaXNrICgNCj4gPiA+ICsgICAgRGlza0lvLA0KPiA+ID4gKyAg ICBCbG9ja0lvLT5NZWRpYS0+TWVkaWFJZCwNCj4gPiA+ICsgICAgTXVsdFU2NHgzMiAoUHJpbWFy eUhlYWRlci0+TXlMQkEsIChVSU5UMzIpQmxvY2tTaXplKSwNCj4gPiA+ICsgICAgQmxvY2tTaXpl LA0KPiA+ID4gKyAgICBQcmltYXJ5SGVhZGVyDQo+ID4gPiArICAgICk7DQo+ID4gPiArDQo+ID4g PiArDQo+ID4gPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gPiArICAgIHJldHVy biBTdGF0dXM7DQo+ID4gPiArICB9DQo+ID4gPiArDQo+ID4gPiArICAvLw0KPiA+ID4gKyAgLy8g V3JpdGUgb3V0IHRoZSBwcmltYXJ5IHRhYmxlIC4uLg0KPiA+ID4gKyAgLy8NCj4gPiA+ICsgIFN0 YXR1cyA9IERpc2tJby0+V3JpdGVEaXNrICgNCj4gPiA+ICsgICAgRGlza0lvLA0KPiA+ID4gKyAg ICBCbG9ja0lvLT5NZWRpYS0+TWVkaWFJZCwNCj4gPiA+ICsgICAgTXVsdFU2NHgzMiAoUHJpbWFy eUhlYWRlci0+UGFydGl0aW9uRW50cnlMQkEsIChVSU5UMzIpQmxvY2tTaXplKSwNCj4gPiA+ICsg ICAgVGFibGVTaXplLA0KPiA+ID4gKyAgICBQYXJ0RW50cnkNCj4gPiA+ICsgICAgKTsNCj4gPiA+ ICsNCj4gPiA+ICsNCj4gPiA+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiA+ICsg ICAgcmV0dXJuIFN0YXR1czsNCj4gPiA+ICsgIH0NCj4gPiA+ICsNCj4gPiA+ICsgIC8vDQo+ID4g PiArICAvLyBXcml0ZSBvdXQgdGhlIHNlY29uZGFyeSBoZWFkZXIgYW5kIHRhYmxlIGJ5IGNhbGxp bmcgcmVzdG9yZQ0KPiA+ID4gKyAgLy8NCj4gPiA+ICsNCj4gPiA+ICsgIGlmICghUGFydGl0aW9u UmVzdG9yZUdwdFRhYmxlIChQcmltYXJ5SGVhZGVyKSkgew0KPiA+ID4gKyAgICByZXR1cm4gRUZJ X1ZPTFVNRV9DT1JSVVBURUQ7DQo+ID4gPiArICB9DQo+ID4gPiArICBCbG9ja0lvLT5GbHVzaEJs b2NrcyAoQmxvY2tJbyk7DQo+ID4gPiArICBHcHRWYWxpZCA9ICFFRklfRVJST1IgKFN0YXR1cyk7 DQo+ID4gPiArDQo+ID4gPiArICByZXR1cm4gU3RhdHVzOw0KPiA+ID4gK30NCj4gPiA+ICsNCj4g PiA+ICsvKioNCj4gPiA+ICsgIChSZSlpbml0aWFsaXplIEdQVCB0YWJsZXMgb24gdGhlIGJsb2Nr IGRldmljZQ0KPiA+ID4gKw0KPiA+ID4gKyAgQHJldHVybiBFRklfU1VDQ0VTUyAgICBTdWNjZXNz ZnVsbHkgKHJlKWluaXRpYWxpemVkIEdQVCBUYWJsZXMNCj4gPiA+ICsgIEByZXR1cm4gb3RoZXIg ICAgICAgICAgRmFpbGVkIHRvIChyZSlpbml0aWFsaXplIEdQVCB0YWJsZXMNCj4gPiA+ICsNCj4g PiA+ICsqKi8NCj4gPiA+ICtTVEFUSUMNCj4gPiA+ICtFRklfU1RBVFVTDQo+ID4gPiArVGFibGVD cmVhdGVFbXB0eUdwdCAoVk9JRCkNCj4gPiA+ICt7DQo+ID4gPiArICBVSU5UTiAgICAgICBFbnRy eUNvdW50Ow0KPiA+ID4gKyAgVUlOVE4gICAgICAgQmxvY2tGaXQ7DQo+ID4gPiArICBVSU5UTiAg ICAgICBCbG9ja1NpemU7DQo+ID4gPiArICBVSU5UTiAgICAgICBFbnRyeUJsb2NrczsNCj4gPiA+ ICsgIFVJTlQ2NCAgICAgIERpc2tTaXplOw0KPiA+ID4gKyAgVUlOVE4gICAgICAgVGFibGVTaXpl Ow0KPiA+ID4gKyAgRUZJX0xCQSAgICAgSGVhZGVyMV9MQkE7DQo+ID4gPiArICBFRklfTEJBICAg ICBUYWJsZTFfTEJBOw0KPiA+ID4gKyAgRUZJX0xCQSAgICAgSGVhZGVyMl9MQkE7DQo+ID4gPiAr ICBFRklfTEJBICAgICBUYWJsZTJfTEJBOw0KPiA+ID4gKyAgRUZJX0xCQSAgICAgRmlyc3RVc2Fi bGVMQkE7DQo+ID4gPiArICBFRklfTEJBICAgICBMYXN0VXNhYmxlTEJBOw0KPiA+ID4gKyAgRUZJ X1NUQVRVUyAgU3RhdHVzOw0KPiA+ID4gKw0KPiA+ID4gKyAgRW50cnlDb3VudCA9IEVOVFJZX0RF RkFVTFQ7DQo+ID4gPiArICBCbG9ja1NpemUgPSBCbG9ja0lvLT5NZWRpYS0+QmxvY2tTaXplOw0K PiA+ID4gKyAgQmxvY2tGaXQgPSAgQmxvY2tTaXplIC8gc2l6ZW9mKEVGSV9QQVJUSVRJT05fRU5U UlkpOw0KPiA+ID4gKw0KPiA+ID4gKyAgaWYgKEJsb2NrRml0ID4gRU5UUllfREVGQVVMVCkgew0K PiA+ID4gKyAgICBFbnRyeUNvdW50ID0gQmxvY2tGaXQ7DQo+ID4gPiArICB9DQo+ID4gPiArICBF bnRyeUJsb2NrcyA9IEVudHJ5Q291bnQgLyBCbG9ja0ZpdDsNCj4gPiA+ICsNCj4gPiA+ICsgIGlm ICgoRW50cnlCbG9ja3MgKiBCbG9ja0ZpdCkgIT0gRW50cnlDb3VudCkgew0KPiA+ID4gKyAgICBT dGF0dXMgPSBFRklfVk9MVU1FX0NPUlJVUFRFRDsNCj4gPiA+ICsgICAgUHJpbnRFcnIgKEwiSW52 YWxpZCBFbnRyeSBibG9ja3MgYW5kIEVudHJ5IGNvdW50IGNvbWJpbmF0aW9uXG4iLCBTdGF0dXMp Ow0KPiA+ID4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiA+ID4gKyAgfQ0KPiA+ID4gKw0KPiA+ID4g KyAgRGlza1NpemUgPSBCbG9ja0lvLT5NZWRpYS0+TGFzdEJsb2NrICsgMTsNCj4gPiA+ICsNCj4g PiA+ICsgIFNIRUxMX0ZSRUVfTk9OX05VTEwgKFByaW1hcnlIZWFkZXIpOw0KPiA+ID4gKyAgU0hF TExfRlJFRV9OT05fTlVMTCAoQmFja3VwSGVhZGVyKTsNCj4gPiA+ICsgIFNIRUxMX0ZSRUVfTk9O X05VTEwgKFBhcnRFbnRyeSk7DQo+ID4gPiArDQo+ID4gPiArICBQcmltYXJ5SGVhZGVyID0gQWxs b2NhdGVaZXJvUG9vbCAoQmxvY2tTaXplKTsNCj4gPiA+ICsgIGlmIChQcmltYXJ5SGVhZGVyID09 IE5VTEwpIHsNCj4gPiA+ICsgICAgcmV0dXJuIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiA+ID4g KyAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgQmFja3VwSGVhZGVyID0gQWxsb2NhdGVaZXJvUG9vbCAo QmxvY2tTaXplKTsNCj4gPiA+ICsgIGlmIChCYWNrdXBIZWFkZXIgPT0gTlVMTCkgew0KPiA+ID4g KyAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ID4gPiArICB9DQo+ID4gPiArDQo+ ID4gPiArICBIZWFkZXIxX0xCQSA9IDE7DQo+ID4gPiArICBUYWJsZTFfTEJBID0gMjsNCj4gPiA+ ICsgIEZpcnN0VXNhYmxlTEJBID0gVGFibGUxX0xCQSArIEVudHJ5QmxvY2tzOw0KPiA+ID4gKw0K PiA+ID4gKyAgSGVhZGVyMl9MQkEgPSBEaXNrU2l6ZSAtIDE7DQo+ID4gPiArICBUYWJsZTJfTEJB ID0gSGVhZGVyMl9MQkEgLSBFbnRyeUJsb2NrczsNCj4gPiA+ICsgIExhc3RVc2FibGVMQkEgPSBU YWJsZTJfTEJBIC0gMTsNCj4gPiA+ICsNCj4gPiA+ICsgIFRhYmxlU2l6ZSA9IEVudHJ5QmxvY2tz ICogQmxvY2tTaXplOw0KPiA+ID4gKw0KPiA+ID4gKyAgaWYgKFRhYmxlU2l6ZSAhPSAoRW50cnlD b3VudCAqIHNpemVvZihFRklfUEFSVElUSU9OX0VOVFJZKSkpIHsNCj4gPiA+ICsgICAgU3RhdHVz ID0gRUZJX1ZPTFVNRV9DT1JSVVBURUQ7DQo+ID4gPiArICAgIFByaW50RXJyIChMIkludmFsaWQg VGFibGUgc2l6ZSBhbmQgRW50cnkgY291bnQgY29tYmluYXRpb25cbiIsIFN0YXR1cyk7DQo+ID4g PiArICAgIHJldHVybiBTdGF0dXM7DQo+ID4gPiArICB9DQo+ID4gPiArDQo+ID4gPiArICBpZiAo R1BUX0RFQlVHX0xFVkVMKSB7DQo+ID4gPiArICAgIFByaW50IChMIkRpc2tTaXplID0gJWx4XG4i LCBEaXNrU2l6ZSk7DQo+ID4gPiArICAgIFByaW50IChMIkJsb2NrU2l6ZSA9ICV4XG4iLCBCbG9j a1NpemUpOw0KPiA+ID4gKyAgICBQcmludCAoTCJIZWFkZXIxX0xCQSA9ICVseFxuIiwgSGVhZGVy MV9MQkEpOw0KPiA+ID4gKyAgICBQcmludCAoTCJUYWJsZTFfTEJBID0gJWx4XG4iLCBUYWJsZTFf TEJBKTsNCj4gPiA+ICsgICAgUHJpbnQgKEwiRmlyc3RVc2FibGVMQkEgPSAlbHhcbiIsIEZpcnN0 VXNhYmxlTEJBKTsNCj4gPiA+ICsgICAgUHJpbnQgKEwiSGVhZGVyMl9MQkEgPSAlbHhcbiIsIEhl YWRlcjJfTEJBKTsNCj4gPiA+ICsgICAgUHJpbnQgKEwiVGFibGUyX0xCQSA9ICVseFxuIiwgVGFi bGUyX0xCQSk7DQo+ID4gPiArICAgIFByaW50IChMIkxhc3RVc2FibGVMQkEgPSAlbHhcbiIsIExh c3RVc2FibGVMQkEpOw0KPiA+ID4gKyAgICBQcmludCAoTCJFbnRyeUNvdW50ID0gJXhcbiIsIEVu dHJ5Q291bnQpOw0KPiA+ID4gKyAgICBQcmludCAoTCJFbnRyeUJsb2NrcyA9ICV4XG4iLCBFbnRy eUJsb2Nrcyk7DQo+ID4gPiArICB9DQo+ID4gPiArDQo+ID4gPiArICAvLw0KPiA+ID4gKyAgLy8g U2luY2Ugd2UncmUgbWFraW5nIGVtcHR5IHRhYmxlcywgd2UganVzdCB3cml0ZSB6ZXJvcy4uLg0K PiA+ID4gKyAgLy8NCj4gPiA+ICsNCj4gPiA+ICsgIFBhcnRFbnRyeSA9IEFsbG9jYXRlWmVyb1Bv b2wgKFRhYmxlU2l6ZSk7DQo+ID4gPiArICBpZiAoUGFydEVudHJ5ID09IE5VTEwpIHsNCj4gPiA+ ICsgICAgU0hFTExfRlJFRV9OT05fTlVMTCAoUHJpbWFyeUhlYWRlcik7DQo+ID4gPiArICAgIFNI RUxMX0ZSRUVfTk9OX05VTEwgKEJhY2t1cEhlYWRlcik7DQo+ID4gPiArICAgIHJldHVybiBFRklf T1VUX09GX1JFU09VUkNFUzsNCj4gPiA+ICsgIH0NCj4gPiA+ICsNCj4gPiA+ICsgIFBFbnRyeVN0 YXR1cyA9IEFsbG9jYXRlWmVyb1Bvb2wgKFRhYmxlU2l6ZSk7DQo+ID4gPiArDQo+ID4gPiArICBQ cmltYXJ5SGVhZGVyLT5GaXJzdFVzYWJsZUxCQSA9IEZpcnN0VXNhYmxlTEJBOw0KPiA+ID4gKyAg UHJpbWFyeUhlYWRlci0+TGFzdFVzYWJsZUxCQSA9IExhc3RVc2FibGVMQkE7DQo+ID4gPiArICBQ cmltYXJ5SGVhZGVyLT5OdW1iZXJPZlBhcnRpdGlvbkVudHJpZXMgPSAoVUlOVDMyKUVudHJ5Q291 bnQ7DQo+ID4gPiArICBHZW5lcmF0ZUd1aWQgKCZQcmltYXJ5SGVhZGVyLT5EaXNrR1VJRCk7DQo+ ID4gPiArDQo+ID4gPiArICBQcmltYXJ5SGVhZGVyLT5NeUxCQSAgICAgICAgICAgICA9IEhlYWRl cjFfTEJBOw0KPiA+ID4gKyAgQmFja3VwSGVhZGVyLT5NeUxCQSAgICAgICAgICAgICAgPSBIZWFk ZXIyX0xCQTsNCj4gPiA+ICsgIFByaW1hcnlIZWFkZXItPlBhcnRpdGlvbkVudHJ5TEJBID0gVGFi bGUxX0xCQTsNCj4gPiA+ICsgIEJhY2t1cEhlYWRlci0+UGFydGl0aW9uRW50cnlMQkEgID0gVGFi bGUyX0xCQTsNCj4gPiA+ICsNCj4gPiA+ICsgIFN0YXR1cyA9IFdyaXRlR1BUICgpOw0KPiA+ID4g Kw0KPiA+ID4gKyAgcmV0dXJuIFN0YXR1czsNCj4gPiA+ICt9DQo+ID4gPiArDQo+ID4gPiArLyoq DQo+ID4gPiArICBDbGVhciBHUFQgcGFydGl0aW9ucy4NCj4gPiA+ICsNCj4gPiA+ICsgIEByZXR1 cm4gRUZJX1NVQ0NFU1MgICAgQ2xlYXJlZCBzdWNjZXNzZnVsbHkNCj4gPiA+ICsgIEByZXR1cm4g RkFMU0UgICAgICAgICAgRmFpbGVkIHRvIGNsZWFyDQo+ID4gPiArDQo+ID4gPiArKiovDQo+ID4g PiArDQo+ID4gPiArRUZJX1NUQVRVUw0KPiA+ID4gK1BhcnRpdGlvbkdwdENsZWFyQWxsIChWT0lE KQ0KPiA+ID4gK3sNCj4gPiA+ICsgIEdwdENsZWFudXBHbG9iYWxzICgpOw0KPiA+ID4gKyAgR3B0 VmFsaWQgPSBGQUxTRTsNCj4gPiA+ICsgIE1iclZhbGlkID0gRkFMU0U7DQo+ID4gPiArICByZXR1 cm4gVGFibGVDcmVhdGVFbXB0eUdwdCAoKTsNCj4gPiA+ICt9DQo+ID4gPiArDQo+ID4gPiArLyoq DQo+ID4gPiArICBDcmVhdGUgYSBHUFQgcGFydGl0aW9uLg0KPiA+ID4gKw0KPiA+ID4gKyAgQHBh cmFtICBQYXJ0TmFtZSAgICAgICAgICAgICAgUGFydGl0aW9uIE5hbWUNCj4gPiA+ICsgIEBwYXJh bSAgU3RhcnRMYmEgICAgICAgICAgICAgIFN0YXJ0aW5nIExCQSBvZiB0aGUgcGFydGl0aW9uLg0K PiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgemVybywgd2lsbCBiZSBj YWxjdWxhdGVkDQo+ID4gPiArICBAcGFyYW0gIFNpemVJbk1lZ2FCeXRlcyAgICAgICBTaXplIG9m IHRoZSBwYXJ0aXRpb24gaW4gTUINCj4gPiA+ICsgIEBwYXJhbSAgQXR0cmlidXRlcyAgICAgICAg ICAgIFBhcnRpdGlvbiBhdHRyaWJ1dGVzDQo+ID4gPiArICBAcGFyYW0gIFBhcnRUeXBlR3VpZCAg ICAgICAgICBhIFR5cGUgR1VJRCB0byBiZSBhc3NpZ25lZCB0byB0aGUgcGFydGl0aW9uDQo+ID4g PiAobm90IGEgcGFydGl0aW9uIHVuaXF1ZSBHVUlEKQ0KPiA+ID4gKw0KPiA+ID4gKw0KPiA+ID4g KyAgQHJldHVybiBFRklfU1VDQ0VTUyAgICAgICAgICAgUGFydGl0aW9uIHN1Y2Nlc3NmdWxseSBj cmVhdGVkDQo+ID4gPiArICBAcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBFaXRoZXIgcGFy dGl0aW9uIGV4aXN0cywgb3Igd3JvbmcNCj4gPiA+IHBhcmFtZXRlcnMgc3BlY2lmaWVkDQo+ID4g PiArICBAcmV0dXJuIG90aGVyICAgICAgICAgICAgICAgICBGYWlsZWQgdG8gY3JlYXRlIGEgcGFy dGl0aW9uDQo+ID4gPiArKiovDQo+ID4gPiArRUZJX1NUQVRVUw0KPiA+ID4gK1BhcnRpdGlvbkdw dENyZWF0ZVBhcnRpdGlvbiAoDQo+ID4gPiArICBJTiBDT05TVCBDSEFSMTYgKlBhcnROYW1lLA0K PiA+ID4gKyAgSU4gRUZJX0xCQSBTdGFydExiYSwNCj4gPiA+ICsgIElOIFVJTlQ2NCBTaXplSW5N ZWdhYnl0ZXMsDQo+ID4gPiArICBJTiBVSU5UNjQgQXR0cmlidXRlcywNCj4gPiA+ICsgIElOIEVG SV9HVUlEIFBhcnRUeXBlR3VpZCkNCj4gPiA+ICt7DQo+ID4gPiArICBFRklfR1VJRCAgICBHdWlk LCBQYXJ0aXRpb25JZEd1aWQ7DQo+ID4gPiArICBFRklfU1RBVFVTICBTdGF0dXM7DQo+ID4gPiAr ICBVSU5UNjQgICAgICBTdGFydEJsb2NrOw0KPiA+ID4gKyAgVUlOVDY0ICAgICAgRW5kQmxvY2s7 DQo+ID4gPiArICBVSU5UNjQgICAgICBTaXplSW5CeXRlcyA9IDA7DQo+ID4gPiArICBVSU5UMzIg ICAgICBCbG9ja1NpemU7DQo+ID4gPiArICBVSU5UNjQgICAgICBEaXNrU2l6ZUJsb2NrczsNCj4g PiA+ICsgIFVJTlQ4ICAgICAgICpwOw0KPiA+ID4gKyAgQk9PTEVBTiAgICAgT2Zmc2V0U3BlY2lm aWVkID0gRkFMU0U7DQo+ID4gPiArICBCT09MRUFOICAgICBBbGxaZXJvczsNCj4gPiA+ICsgIElO VE4gICAgICAgIEFsbFplcm9FbnRyeTsNCj4gPiA+ICsgIElOVE4gICAgICAgIE9sZEZyZWVFbnRy eTsNCj4gPiA+ICsgIFVJTlQ2NCAgICAgIEF2YWlsQmxvY2tzOw0KPiA+ID4gKyAgVUlOVDY0ICAg ICAgQmxvY2tzVG9BbGxvY2F0ZTsNCj4gPiA+ICsgIFVJTlQ2NCAgICAgIEhpZ2hTZWVuOw0KPiA+ ID4gKyAgVUlOVE4gICAgICAgU2xvdDsNCj4gPiA+ICsgIFVJTlQ2NCAgICAgIExvd2VzdEFsaWdu ZWRMYmE7DQo+ID4gPiArICBVSU5UMzIgICAgICBPcHRpbWFsVHJhbnNmZXJCbG9ja3M7DQo+ID4g PiArICBVSU5UTiAgICAgICBpLCBqOw0KPiA+ID4gKyAgQ0hBUjE2ICAgICAgUGFydE5hbWVVc2Vk W01BWF9QQVJUSVRJT05fTkFNRV9MRU5HVEggKyAxXSA9DQo+ID4geyBMJ1wwJyB9Ow0KPiA+ID4g KyAgRUZJX1BBUlRJVElPTl9FTlRSWSAqRW50cnk7DQo+ID4gPiArDQo+ID4gPiArICBMb3dlc3RB bGlnbmVkTGJhID0gMDsNCj4gPiA+ICsgIE9wdGltYWxUcmFuc2ZlckJsb2NrcyA9IDE7DQo+ID4g PiArDQo+ID4gPiArICBBbGxaZXJvRW50cnkgPSAtMTsNCj4gPiA+ICsgIE9sZEZyZWVFbnRyeSA9 IC0xOw0KPiA+ID4gKw0KPiA+ID4gKyAgQmxvY2tTaXplID0gQmxvY2tJby0+TWVkaWEtPkJsb2Nr U2l6ZTsNCj4gPiA+ICsgIE9mZnNldFNwZWNpZmllZCA9IChTdGFydExiYSAhPSAwKTsNCj4gPiA+ ICsgIENvcHlNZW0gKCZQYXJ0TmFtZVVzZWQsIFBhcnROYW1lLCBzaXplb2YoQ0hBUjE2KSAqIFN0 clNpemUNCj4gPiA+IChQYXJ0TmFtZSkpOw0KPiA+ID4gKw0KPiA+ID4gKyAgR2VuZXJhdGVHdWlk ICgmR3VpZCk7DQo+ID4gPiArDQo+ID4gPiArICAvLyBDcmVhdGluZyBhIG5ldyBwYXJ0aXRpb24N Cj4gPiA+ICsgIGlmICghR3B0VmFsaWQpIHsNCj4gPiA+ICsgICAgLy8gQ3JlYXRpbmcgYSBHUFQg Zm9yIHRoZSBmaXJzdCB0aW1lDQo+ID4gPiArICAgIFN0YXR1cyA9IFRhYmxlQ3JlYXRlRW1wdHlH cHQgKCk7DQo+ID4gPiArICAgIGlmICghRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gPiArICAg ICAgLy8gRmlsbCBpbiB0aGUgc3RydWN0dXJlcw0KPiA+ID4gKyAgICAgIFN0YXR1cyA9IFBhcnRp dGlvbkdldEdwdFRhYmxlcyAoRGlza0lvLCBCbG9ja0lvKTsNCj4gPiA+ICsgICAgfQ0KPiA+ID4g KyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gPiArICAgICAgcmV0dXJuIFN0YXR1 czsNCj4gPiA+ICsgICAgfQ0KPiA+ID4gKyAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgRW50cnkgPSBQ YXJ0aXRpb25GaW5kUGFydGl0aW9uQnlDcml0ZXJpYSAoUGFydE5hbWUsIDAsIDAsIFNSQ19CWV9O QU1FKTsNCj4gPiA+ICsgIGlmIChFbnRyeSkgew0KPiA+ID4gKyAgICBTdGF0dXMgPSBFRklfSU5W QUxJRF9QQVJBTUVURVI7DQo+ID4gPiArICAgIFByaW50RXJyIChMIlBhcnRpdGlvbiB3aXRoIHRo aXMgbmFtZSBhbHJlYWR5IGV4aXN0cyIsIFN0YXR1cyk7DQo+ID4gPiArICAgIHJldHVybiBTdGF0 dXM7DQo+ID4gPiArICB9DQo+ID4gPiArICBIaWdoU2VlbiAgICAgPSBQcmltYXJ5SGVhZGVyLT5G aXJzdFVzYWJsZUxCQSAtIDE7DQo+ID4gPiArDQo+ID4gPiArICBpZiAoU3RhcnRMYmEpIHsNCj4g PiA+ICsgICAgLy8NCj4gPiA+ICsgICAgLy8gaWYgb2Zmc2V0IGlzIHNwZWNpZmllZCwgY29tcHV0 ZSB0aGUgc3RhcnQgYW5kIGVuZCBibG9ja3MNCj4gPiA+ICsgICAgLy8NCj4gPiA+ICsgICAgU3Rh cnRCbG9jayA9IFN0YXJ0TGJhOw0KPiA+ID4gKyAgICAvLw0KPiA+ID4gKyAgICAvLyBTdGFydEJs b2NrIHNob3VsZCBiZSBhbGlnbmVkIHRvIE9wdGltYWxUcmFuc2ZlckJsb2NrcywgdGhlIGxlYXN0 DQo+ID4gPiBjb21tb24gbXVsdGlwbGUgb2Y6DQo+ID4gPiArICAgIC8vIGEpLiB0aGUgcGh5c2lj YWwgYmxvY2sgYm91bmRhcnksIGlmIGFueQ0KPiA+ID4gKyAgICAvLyBiKS4gdGhlIG9wdGltYWwg dHJhbnNmZXIgbGVuZ3RoIGdyYW51bGFyaXR5LCBpZiBhbnkNCj4gPiA+ICsgICAgLy8NCj4gPiA+ ICsgICAgaWYgKFN0YXJ0QmxvY2sgPCBMb3dlc3RBbGlnbmVkTGJhKSB7DQo+ID4gPiArICAgICAg U3RhcnRCbG9jayA9IExvd2VzdEFsaWduZWRMYmE7DQo+ID4gPiArICAgIH0gZWxzZSB7DQo+ID4g PiArICAgICAgd2hpbGUgKCgoU3RhcnRCbG9jayAtIExvd2VzdEFsaWduZWRMYmEpICUgT3B0aW1h bFRyYW5zZmVyQmxvY2tzKSAhPSAwKQ0KPiA+IHsNCj4gPiA+ICsgICAgICAgIFN0YXJ0QmxvY2sr KzsNCj4gPiA+ICsgICAgICB9DQo+ID4gPiArICAgIH0NCj4gPiA+ICsNCj4gPiA+ICsgICAgaWYg KFN0YXJ0QmxvY2sgPCBQcmltYXJ5SGVhZGVyLT5GaXJzdFVzYWJsZUxCQSB8fA0KPiA+ID4gKyAg ICAgICAgU3RhcnRCbG9jayA+IFByaW1hcnlIZWFkZXItPkxhc3RVc2FibGVMQkEpIHsNCj4gPiA+ ICsgICAgICAvLw0KPiA+ID4gKyAgICAgIC8vIE9mZnNldCBzcGVjaWZpZWQgaXMgdG9vIGxhcmdl DQo+ID4gPiArICAgICAgLy8NCj4gPiA+ICsgICAgICBTdGF0dXMgPSBFRklfSU5WQUxJRF9QQVJB TUVURVI7DQo+ID4gPiArICAgICAgUHJpbnRFcnIgKEwiU3BlY2lmaWVkIG9mZnNldCBpcyB0b28g bGFyZ2UiLCBFRklfSU5WQUxJRF9QQVJBTUVURVIpOw0KPiA+ID4gKyAgICAgIGdvdG8gRXhpdDsN Cj4gPiA+ICsgICAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgICBTaXplSW5CeXRlcyA9IE11bHRVNjR4 MzIgKFNpemVJbk1lZ2FieXRlcywgKDEwMjQgKiAxMDI0KSk7DQo+ID4gPiArICAgIGlmIChTaXpl SW5CeXRlcyA8IFNpemVJbk1lZ2FieXRlcyB8fCBTaXplSW5CeXRlcyA9PSAwKSB7DQo+ID4gPiAr ICAgICAgLy8NCj4gPiA+ICsgICAgICAvLyBJZiBzaXplIGlzIG5vdCBzcGVjaWZpZWQgb3IgdG9v IGxhcmdlLA0KPiA+ID4gKyAgICAgIC8vIHRyeSB0byBtYWtlIHRoZSBwYXJ0aXRpb24gYXMgYmln IGFzIGl0IGNhbiBiZQ0KPiA+ID4gKyAgICAgIC8vDQo+ID4gPiArICAgICAgQmxvY2tzVG9BbGxv Y2F0ZSA9IEVuZEJsb2NrID0gU2l6ZUluQnl0ZXMgPSAweGZmZmZmZmZmZmZmZmZmZmY7DQo+ID4g PiArICAgIH0gZWxzZSB7DQo+ID4gPiArICAgICAgQmxvY2tzVG9BbGxvY2F0ZSA9IERpdlU2NHgz MiAoU2l6ZUluQnl0ZXMsIEJsb2NrU2l6ZSk7DQo+ID4gPiArICAgICAgRW5kQmxvY2sgPSBTdGFy dEJsb2NrICsgQmxvY2tzVG9BbGxvY2F0ZSAtIDE7DQo+ID4gPiArICAgICAgaWYgKEVuZEJsb2Nr ID4gUHJpbWFyeUhlYWRlci0+TGFzdFVzYWJsZUxCQSkgew0KPiA+ID4gKyAgICAgICAgRW5kQmxv Y2sgPSBQcmltYXJ5SGVhZGVyLT5MYXN0VXNhYmxlTEJBOw0KPiA+ID4gKyAgICAgICAgQmxvY2tz VG9BbGxvY2F0ZSA9IEVuZEJsb2NrIC0gU3RhcnRCbG9jayArIDE7DQo+ID4gPiArICAgICAgfQ0K PiA+ID4gKyAgICB9DQo+ID4gPiArICB9DQo+ID4gPiArDQo+ID4gPiArICBmb3IgKGkgPSAwOyBp IDwgUHJpbWFyeUhlYWRlci0+TnVtYmVyT2ZQYXJ0aXRpb25FbnRyaWVzOyBpKyspIHsNCj4gPiA+ ICsgICAgRW50cnkgPSAoRUZJX1BBUlRJVElPTl9FTlRSWSAqKSgoVUlOVDggKilQYXJ0RW50cnkg KyBpICoNCj4gPiA+IFByaW1hcnlIZWFkZXItPlNpemVPZlBhcnRpdGlvbkVudHJ5KTsNCj4gPiA+ ICsgICAgaWYgKCFDb21wYXJlR3VpZCAoJkVudHJ5LT5QYXJ0aXRpb25UeXBlR1VJRCwNCj4gPiA+ ICZnRWZpUGFydFR5cGVVbnVzZWRHdWlkKSkgew0KPiA+ID4gKw0KPiA+ID4gKyAgICAgIC8vDQo+ ID4gPiArICAgICAgLy8gVHlwZSBub3QgbnVsbCwgc28gaXQncyBhbGxvY2F0ZWQNCj4gPiA+ICsg ICAgICAvLw0KPiA+ID4gKyAgICAgIGlmIChFbnRyeS0+RW5kaW5nTEJBID4gSGlnaFNlZW4pIHsN Cj4gPiA+ICsgICAgICAgIEhpZ2hTZWVuID0gRW50cnktPkVuZGluZ0xCQTsNCj4gPiA+ICsgICAg ICB9DQo+ID4gPiArICAgICAgaWYgKE9mZnNldFNwZWNpZmllZCkgew0KPiA+ID4gKyAgICAgICAg Ly8NCj4gPiA+ICsgICAgICAgIC8vIG1ha2Ugc3VyZSBuZXcgcGFydGl0aW9uIGRvZXMgbm90IG92 ZXJsYXAgd2l0aCBleGlzdGluZyBwYXJ0aXRpb25zDQo+ID4gPiArICAgICAgICAvLw0KPiA+ID4g KyAgICAgICAgaWYgKEVudHJ5LT5TdGFydGluZ0xCQSA8PSBTdGFydEJsb2NrICYmDQo+ID4gPiAr ICAgICAgICAgICAgU3RhcnRCbG9jayA8PSBFbnRyeS0+RW5kaW5nTEJBKSB7DQo+ID4gPiArICAg ICAgICAgIC8vDQo+ID4gPiArICAgICAgICAgIC8vIHN0YXJ0aW5nIGJsb2NrIGlzIGluc2lkZSBh biBleGlzdGluZyBwYXJ0aXRpb24NCj4gPiA+ICsgICAgICAgICAgLy8NCj4gPiA+ICsgICAgICAg ICAgU3RhdHVzID0gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiA+ID4gKyAgICAgICAgICBQcmlu dEVyciAoTCJTdGFydGluZyBibG9jayBpcyBpbnNpZGUgYW4gZXhpc3RpbmcgcGFydGl0aW9uIiwg U3RhdHVzKTsNCj4gPiA+ICsgICAgICAgICAgZ290byBFeGl0Ow0KPiA+ID4gKyAgICAgICAgfQ0K PiA+ID4gKyAgICAgICAgaWYgKChFbnRyeS0+U3RhcnRpbmdMQkEgPD0gRW5kQmxvY2sgJiYNCj4g PiA+ICsgICAgICAgICAgICAgRW5kQmxvY2sgPD0gRW50cnktPkVuZGluZ0xCQSkgfHwNCj4gPiA+ ICsgICAgICAgICAgICAoU3RhcnRCbG9jayA8PSBFbnRyeS0+U3RhcnRpbmdMQkEgJiYNCj4gPiA+ ICsgICAgICAgICAgICAgRW50cnktPlN0YXJ0aW5nTEJBIDw9IEVuZEJsb2NrKSB8fA0KPiA+ID4g KyAgICAgICAgICAgIChTdGFydEJsb2NrIDw9IEVudHJ5LT5FbmRpbmdMQkEgJiYNCj4gPiA+ICsg ICAgICAgICAgICAgRW50cnktPkVuZGluZ0xCQSA8PSBFbmRCbG9jaykpIHsNCj4gPiA+ICsgICAg ICAgICAgLy8NCj4gPiA+ICsgICAgICAgICAgLy8gbmV3IHBhcnRpdGlvbiBvdmVybGFwcyB3aXRo IGFuIGV4aXN0aW5nIHBhcnRpdGlvbg0KPiA+ID4gKyAgICAgICAgICAvLyByZWFkanVzdCBuZXcg cGFydGl0aW9uIHNpemUgdG8gYXZvaWQgb3ZlcmxhcHBpbmcNCj4gPiA+ICsgICAgICAgICAgLy8N Cj4gPiA+ICsgICAgICAgICAgRW5kQmxvY2sgPSBFbnRyeS0+U3RhcnRpbmdMQkEgLSAxOw0KPiA+ ID4gKyAgICAgICAgICBpZiAoRW5kQmxvY2sgPCBTdGFydEJsb2NrKSB7DQo+ID4gPiArICAgICAg ICAgICAgU3RhdHVzID0gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiA+ID4gKyAgICAgICAgICAg IFByaW50RXJyIChMIkNhbm5vdCByZWFkanVzdCBuZXcgcGFydGl0aW9uIHNpemUgLSBvdmVybGFw cGluZyIsIFN0YXR1cyk7DQo+ID4gPiArICAgICAgICAgICAgZ290byBFeGl0Ow0KPiA+ID4gKyAg ICAgICAgICB9IGVsc2Ugew0KPiA+ID4gKyAgICAgICAgICAgIEJsb2Nrc1RvQWxsb2NhdGUgPSBF bmRCbG9jayAtIFN0YXJ0QmxvY2sgKyAxOw0KPiA+ID4gKyAgICAgICAgICB9DQo+ID4gPiArICAg ICAgICB9DQo+ID4gPiArICAgICAgfQ0KPiA+ID4gKyAgICB9IGVsc2Ugew0KPiA+ID4gKyAgICAg IHAgPSAoVUlOVDggKikoRW50cnkpOw0KPiA+ID4gKyAgICAgIEFsbFplcm9zID0gVFJVRTsNCj4g PiA+ICsgICAgICBmb3IgKGogPSAwOyBqIDwgc2l6ZW9mKEVGSV9QQVJUSVRJT05fRU5UUlkpOyBq KyspIHsNCj4gPiA+ICsgICAgICAgIGlmIChwW2pdICE9IDApIHsNCj4gPiA+ICsgICAgICAgICAg QWxsWmVyb3MgPSBGQUxTRTsNCj4gPiA+ICsgICAgICAgIH0NCj4gPiA+ICsgICAgICB9DQo+ID4g PiArICAgICAgaWYgKEFsbFplcm9zKSB7DQo+ID4gPiArICAgICAgICBpZiAoQWxsWmVyb0VudHJ5 ID09IC0xKSB7DQo+ID4gPiArICAgICAgICAgIEFsbFplcm9FbnRyeSA9IGk7DQo+ID4gPiArICAg ICAgICB9DQo+ID4gPiArICAgICAgfSBlbHNlIGlmIChPbGRGcmVlRW50cnkgPT0gLTEpIHsNCj4g PiA+ICsgICAgICAgIE9sZEZyZWVFbnRyeSA9IGk7DQo+ID4gPiArICAgICAgfQ0KPiA+ID4gKyAg ICB9DQo+ID4gPiArICB9DQo+ID4gPiArDQo+ID4gPiArICAvLw0KPiA+ID4gKyAgLy8gQWxsWmVy b0VudHJ5IC0gaWYgbm90IC0xLCBpcyBwb2ludGVyIHRvIGEgbmV2ZXIgYmVmb3JlIHVzZWQgZW50 cnkgKGZyZWUpDQo+ID4gPiArICAvLyBPbGRGcmVlRW50cnkgLSBpZiBub3QgLTEsIGlzIHBvaW50 ZXIgdG8gc29tZSBwcmUtdXNlZCBmcmVlIGVudHJ5DQo+ID4gPiArICAvLw0KPiA+ID4gKyAgaWYg KChBbGxaZXJvRW50cnkgPT0gLTEpICYmIChPbGRGcmVlRW50cnkgPT0gLTEpKSB7DQo+ID4gPiAr ICAgIC8vDQo+ID4gPiArICAgIC8vIFRBQkxFIElTIEZVTEwhIQ0KPiA+ID4gKyAgICAvLw0KPiA+ ID4gKyAgICBTdGF0dXMgPSBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4gPiA+ICsgICAgUHJpbnRF cnIgKEwiVGFibGUgaXMgZnVsbCIsIFN0YXR1cyk7DQo+ID4gPiArICAgIGdvdG8gRXhpdDsNCj4g PiA+ICsgIH0NCj4gPiA+ICsNCj4gPiA+ICsgIGlmIChPZmZzZXRTcGVjaWZpZWQpIHsNCj4gPiA+ ICsgICAgLy8NCj4gPiA+ICsgICAgLy8gdGhlIHVzZXIgaGF2ZW4ndCBzcGVjaWZpZWQgdGhlIG5l dyBwYXJ0aXRpb24gc2l6ZSBhbmQgd2UgaGF2ZW4ndA0KPiA+ID4gKyAgICAvLyBydW4gaW50byBh bnkgcGFydGl0aW9uIHRoYXQgd2lsbCBsaW1pdCB0aGUgc2l6ZSBvZiB0aGlzIG5ldyBwYXJ0aXRp b24uDQo+ID4gPiArICAgIC8vIFNvLCB1c2UgdGhlIG1heCBpdCBjYW4NCj4gPiA+ICsgICAgLy8N Cj4gPiA+ICsgICAgaWYgKEJsb2Nrc1RvQWxsb2NhdGUgPT0gLTEpIHsNCj4gPiA+ICsgICAgICBF bmRCbG9jayA9IFByaW1hcnlIZWFkZXItPkxhc3RVc2FibGVMQkE7DQo+ID4gPiArICAgICAgQmxv Y2tzVG9BbGxvY2F0ZSA9IEVuZEJsb2NrIC0gU3RhcnRCbG9jayArIDE7DQo+ID4gPiArICAgIH0N Cj4gPiA+ICsgIH0gZWxzZSB7DQo+ID4gPiArICAgIC8vDQo+ID4gPiArICAgIC8vIEJlY2F1c2Ug SGlnaFNlZW4gaXMgdGhlIGxhc3QgTEJBIG9mIHRoZSB1c2VkIGJsb2NrcywgbGV0IEhpZ2hTZWVu DQo+ID4gYWxpZ24NCj4gPiA+IHRvIHRoZSBsZWFzdCBjb21tb24gbXVsdGlwbGUgb2Y6DQo+ID4g PiArICAgIC8vIGEpLiB0aGUgcGh5c2ljYWwgYmxvY2sgYm91bmRhcnksIGlmIGFueQ0KPiA+ID4g KyAgICAvLyBiKS4gdGhlIG9wdGltYWwgdHJhbnNmZXIgbGVuZ3RoIGdyYW51bGFyaXR5LCBpZiBh bnkNCj4gPiA+ICsgICAgLy8NCj4gPiA+ICsgICAgaWYgKEhpZ2hTZWVuICsgMSA8IExvd2VzdEFs aWduZWRMYmEpIHsNCj4gPiA+ICsgICAgICBIaWdoU2VlbiA9IExvd2VzdEFsaWduZWRMYmEgLSAx Ow0KPiA+ID4gKyAgICB9IGVsc2Ugew0KPiA+ID4gKyAgICAgIHdoaWxlICgoKEhpZ2hTZWVuICsg MSAtIExvd2VzdEFsaWduZWRMYmEpICUgT3B0aW1hbFRyYW5zZmVyQmxvY2tzKSAhPQ0KPiA+IDAp DQo+ID4gPiB7DQo+ID4gPiArICAgICAgICBIaWdoU2VlbisrOw0KPiA+ID4gKyAgICAgIH0NCj4g PiA+ICsgICAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgICBpZiAoUHJpbWFyeUhlYWRlci0+TGFzdFVz YWJsZUxCQSA8PSBIaWdoU2Vlbikgew0KPiA+ID4gKyAgICAgIFN0YXR1cyA9IEVGSV9PVVRfT0Zf UkVTT1VSQ0VTOw0KPiA+ID4gKyAgICAgIFByaW50RXJyIChMIkRpc2sgaGFzIG5vIGZyZWUgYmxv Y2tzIChGVUxMKSBjYW5ub3QgY3JlYXRlIiwgU3RhdHVzKTsNCj4gPiA+ICsgICAgICBnb3RvIEV4 aXQ7DQo+ID4gPiArICAgIH0NCj4gPiA+ICsgICAgLy8NCj4gPiA+ICsgICAgLy8gW0hpZ2hTZWVu KzEgLi4uIExhc3RVc2FibGVMQkFdIGlzIGF2YWlsYWJsZS4uLg0KPiA+ID4gKyAgICAvLyBhdmFp bCA9IChMYXN0VXNhYmxlTEJBIC0gKEhpZ2hTZWVuKzEpKSArIDEgPT4gTGFzdFVzYWJibGVMQkEg LQ0KPiA+ID4gSGlnaFNlZW4NCj4gPiA+ICsgICAgLy8NCj4gPiA+ICsgICAgQXZhaWxCbG9ja3Mg PSBQcmltYXJ5SGVhZGVyLT5MYXN0VXNhYmxlTEJBIC0gSGlnaFNlZW47DQo+ID4gPiArDQo+ID4g PiArICAgIFNpemVJbkJ5dGVzID0gTXVsdFU2NHgzMiAoU2l6ZUluTWVnYWJ5dGVzLCAoMTAyNCAq IDEwMjQpKTsNCj4gPiA+ICsgICAgaWYgKFNpemVJbkJ5dGVzIDwgU2l6ZUluTWVnYWJ5dGVzKSB7 DQo+ID4gPiArICAgICAgLy8NCj4gPiA+ICsgICAgICAvLyBvdmVyZmxvdywgZm9yY2UgYSB2ZXJ5 IGJpZyBhbnN3ZXINCj4gPiA+ICsgICAgICAvLw0KPiA+ID4gKyAgICAgIFNpemVJbkJ5dGVzID0g MHhmZmZmZmZmZmZmZmZmZmZmOw0KPiA+ID4gKyAgICB9DQo+ID4gPiArDQo+ID4gPiArICAgIGlm ICAoKFNpemVJbkJ5dGVzID09IDApIHx8DQo+ID4gPiArICAgICAgICAgKFNpemVJbkJ5dGVzID4g KE11bHRVNjR4MzIgKEF2YWlsQmxvY2tzLCBCbG9ja1NpemUpKSkpIHsNCj4gPiA+ICsgICAgICAv Lw0KPiA+ID4gKyAgICAgIC8vIFVzZXIgYXNrZWQgZm9yIHplcm8sIG9yIGZvciBtb3JlIHRoYW4g d2UndmUgZ290LA0KPiA+ID4gKyAgICAgIC8vIHNvIGdpdmUgdGhlbSBhbGwgdGhhdCBpcyBsZWZ0 DQo+ID4gPiArICAgICAgLy8NCj4gPiA+ICsgICAgICBCbG9ja3NUb0FsbG9jYXRlID0gQXZhaWxC bG9ja3M7DQo+ID4gPiArDQo+ID4gPiArICAgIH0gZWxzZSB7DQo+ID4gPiArDQo+ID4gPiArICAg ICAgLy8NCj4gPiA+ICsgICAgICAvLyBXZSB3b3VsZCBoYXZlIHRvIGhhdmUgYSBCbG9ja1NpemUg PiAxbWIgZm9yIFJlbWFpbmRlciB0bw0KPiA+ID4gKyAgICAgIC8vIG5vdCBiZSAwLiAgU2luY2Ug d2UgY2Fubm90IGFjdHVhbGx5IHRlc3QgdGhpcyBjYXNlLCB3ZQ0KPiA+ID4gKyAgICAgIC8vIGlu Z29yZSBpdC4uLg0KPiA+ID4gKyAgICAgIC8vDQo+ID4gPiArICAgICAgQmxvY2tzVG9BbGxvY2F0 ZSA9IERpdlU2NHgzMiAoU2l6ZUluQnl0ZXMsIEJsb2NrU2l6ZSk7DQo+ID4gPiArDQo+ID4gPiAr ICAgIH0NCj4gPiA+ICsgIH0NCj4gPiA+ICsNCj4gPiA+ICsgIC8vDQo+ID4gPiArICAvLyBXZSBo YXZlIGEgbmFtZQ0KPiA+ID4gKyAgLy8gV2UgaGF2ZSBhIHR5cGUgZ3VpZA0KPiA+ID4gKyAgLy8g V2UgaGF2ZSBhIHNpemUgaW4gYmxvY2tzDQo+ID4gPiArICAvLyBXZSBoYXZlIGFuIGF0dHJpYnV0 ZSBtYXNrDQo+ID4gPiArICAvLw0KPiA+ID4gKw0KPiA+ID4gKyAgaWYgKEJsb2Nrc1RvQWxsb2Nh dGUgPCAoKDEwMjQgKiAxMDI0KSAvIEJsb2NrU2l6ZSkpIHsNCj4gPiA+ICsgICAgU3RhdHVzID0g RUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ID4gPiArICAgIFByaW50RXJyIChMIlBhcnRpdGlvbiBp cyB0b28gc21hbGwgdG8gYmUgY3JlYXRlZCIsIFN0YXR1cyk7DQo+ID4gPiArICAgIGdvdG8gRXhp dDsNCj4gPiA+ICsgIH0NCj4gPiA+ICsNCj4gPiA+ICsgIGlmIChHUFRfREVCVUdfTEVWRUwpIHsN Cj4gPiA+ICsgICAgUHJpbnQgKEwiUmVxdWVzdGVkIFNpemVJbk1lZ2FCeXRlcyA9ICVsZFxuIiwg U2l6ZUluTWVnYWJ5dGVzKTsNCj4gPiA+ICsgICAgUHJpbnQgKEwiUmVzdWx0aW5nIHNpemUgaW4g QmxvY2tzID0gJWxkXG4iLCBCbG9ja3NUb0FsbG9jYXRlKTsNCj4gPiA+ICsgICAgUHJpbnQgKEwi UmVzdWx0cyBzaXplIGluIEJ5dGVzID0gJWxkXG4iLCBNdWx0VTY0eDMyIChCbG9ja3NUb0FsbG9j YXRlLA0KPiA+ID4gQmxvY2tTaXplKSk7DQo+ID4gPiArICB9DQo+ID4gPiArDQo+ID4gPiArICBp ZiAoQWxsWmVyb0VudHJ5ICE9IC0xKSB7DQo+ID4gPiArICAgIFNsb3QgPSBBbGxaZXJvRW50cnk7 DQo+ID4gPiArICB9IGVsc2Ugew0KPiA+ID4gKyAgICBTbG90ID0gT2xkRnJlZUVudHJ5Ow0KPiA+ ID4gKyAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgR2VuZXJhdGVHdWlkICgmUGFydGl0aW9uSWRHdWlk KTsNCj4gPiA+ICsgIEVudHJ5ID0gKEVGSV9QQVJUSVRJT05fRU5UUlkgKikoKFVJTlQ4ICopUGFy dEVudHJ5ICsgU2xvdCAqDQo+ID4gPiBQcmltYXJ5SGVhZGVyLT5TaXplT2ZQYXJ0aXRpb25FbnRy eSk7DQo+ID4gPiArDQo+ID4gPiArICBDb3B5TWVtICgmRW50cnktPlBhcnRpdGlvblR5cGVHVUlE LCAmUGFydFR5cGVHdWlkLA0KPiA+ID4gc2l6ZW9mKEVGSV9HVUlEKSk7DQo+ID4gPiArICBDb3B5 TWVtICgmRW50cnktPlVuaXF1ZVBhcnRpdGlvbkdVSUQsICZQYXJ0aXRpb25JZEd1aWQsDQo+ID4g PiBzaXplb2YoRUZJX0dVSUQpKTsNCj4gPiA+ICsgIGlmIChPZmZzZXRTcGVjaWZpZWQpIHsNCj4g PiA+ICsgICAgUGFydEVudHJ5W1Nsb3RdLlN0YXJ0aW5nTEJBID0gU3RhcnRCbG9jazsNCj4gPiA+ ICsgICAgUGFydEVudHJ5W1Nsb3RdLkVuZGluZ0xCQSA9IEVuZEJsb2NrOw0KPiA+ID4gKyAgfSBl bHNlIHsNCj4gPiA+ICsgICAgUGFydEVudHJ5W1Nsb3RdLlN0YXJ0aW5nTEJBID0gSGlnaFNlZW4g KyAxOw0KPiA+ID4gKyAgICBQYXJ0RW50cnlbU2xvdF0uRW5kaW5nTEJBID0gSGlnaFNlZW4gKyBC bG9ja3NUb0FsbG9jYXRlOw0KPiA+ID4gKyAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgaWYgKCEoKChF bnRyeS0+RW5kaW5nTEJBIC0gRW50cnktPlN0YXJ0aW5nTEJBKSArIDEpID09IEJsb2Nrc1RvQWxs b2NhdGUpKSB7DQo+ID4gPiArICAgIFByaW50RXJyIChMIldyb25nIFNpemUgZm9yIG5ldyBwYXJ0 aXRvbiIsIEVGSV9JTlZBTElEX1BBUkFNRVRFUik7DQo+ID4gPiArICAgIGdvdG8gRXhpdDsNCj4g PiA+ICsgIH0NCj4gPiA+ICsNCj4gPiA+ICsgIGlmICgoRW50cnktPlN0YXJ0aW5nTEJBIDwgUHJp bWFyeUhlYWRlci0+Rmlyc3RVc2FibGVMQkEpIHx8DQo+ID4gPiArICAgICAgKEVudHJ5LT5FbmRp bmdMQkEgPiBQcmltYXJ5SGVhZGVyLT5MYXN0VXNhYmxlTEJBKSkgew0KPiA+ID4gKyAgICBQcmlu dEVyciAoTCJOZXcgUGFydGl0aW9uIG91dCBvZiBib3VuZHMiLCBFRklfSU5WQUxJRF9QQVJBTUVU RVIpOw0KPiA+ID4gKyAgICBnb3RvIEV4aXQ7DQo+ID4gPiArICB9DQo+ID4gPiArDQo+ID4gPiAr ICBFbnRyeS0+QXR0cmlidXRlcyA9IEF0dHJpYnV0ZXM7DQo+ID4gPiArICBDb3B5TWVtICgmKEVu dHJ5LT5QYXJ0aXRpb25OYW1lWzBdKSwgUGFydE5hbWUsDQo+ID4gPiBNQVhfUEFSVElUSU9OX05B TUVfTEVOR1RIICogc2l6ZW9mKENIQVIxNikpOw0KPiA+ID4gKw0KPiA+ID4gKyAgRGlza1NpemVC bG9ja3MgPSBCbG9ja0lvLT5NZWRpYS0+TGFzdEJsb2NrICsgMTsNCj4gPiA+ICsgIGlmIChEaXNr U2l6ZUJsb2NrcyA+IDB4ZmZmZmZmZmYpIHsNCj4gPiA+ICsgICAgRGlza1NpemVCbG9ja3MgPSAw eGZmZmZmZmZmOw0KPiA+ID4gKyAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgU3RhdHVzID0gV3JpdGVH UFQgKCk7DQo+ID4gPiArDQo+ID4gPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4g PiArICAgIFByaW50RXJyIChMIkF0dGVtcHQgdG8gV3JpdGUgb3V0IHBhcnRpdGlvbiB0YWJsZSBm YWlsZWQiLCBTdGF0dXMpOw0KPiA+ID4gKyAgfQ0KPiA+ID4gKw0KPiA+ID4gKyBFeGl0Og0KPiA+ ID4gKyAgcmV0dXJuIFN0YXR1czsNCj4gPiA+ICt9DQo+ID4gPiArDQo+ID4gPiArLyoqDQo+ID4g PiArICBNb2RpZml5IGEgcGFydGl0aW9uIGJhc2VkIG9uIHBhcmFtZXRlcnMuDQo+ID4gPiArDQo+ ID4gPiArICBAcGFyYW0gIEVudHJ5ICAgICAgUG9pbnRlciB0byBhbiBleGlzdGluZyBwYXJ0aXRp b24NCj4gPiA+ICsgIEBwYXJhbSAgUGFyYW1zICAgICBQYXJhbWV0ZXJzIHRvIGJlIG1vZGlmaWVk DQo+ID4gPiArICBAcGFyYW0gIEZsYWdzICAgICAgV2hpY2ggcGFyYW1ldGVyIGlzIHRvIGJlIG1v ZGlmaWVkDQo+ID4gPiArDQo+ID4gPiArICBAcmV0dXJuIEVGSV9TVUNDRVNTICBTdWNjZXNzZnVs bHkgbW9kaWZpZWQgdGhlIHBhcnRpdGlvbg0KPiA+ID4gKyAgQHJldHVybiBvdGhlciAgICAgICAg RmFpbGVkIHRvIG1vZGlmeSBhIHBhcnRpdGlvbg0KPiA+ID4gKw0KPiA+ID4gKyoqLw0KPiA+ID4g Kw0KPiA+ID4gK0VGSV9TVEFUVVMNCj4gPiA+ICtQYXJ0aXRpb25HcHRNb2RpZnlQYXJ0aXRpb24g KA0KPiA+ID4gKyAgSU4gRUZJX1BBUlRJVElPTl9FTlRSWSAqRW50cnksDQo+ID4gPiArICBJTiBN T0RfUEFSQU1TICpQYXJhbXMsDQo+ID4gPiArICBJTiBNT0RfRkxBR1MgRmxhZ3MNCj4gPiA+ICsg ICkNCj4gPiA+ICt7DQo+ID4gPiArICBFRklfU1RBVFVTIFN0YXR1czsNCj4gPiA+ICsNCj4gPiA+ ICsgIEFTU0VSVCAoRW50cnkpOw0KPiA+ID4gKw0KPiA+ID4gKyAgU3RhdHVzID0gRUZJX0lOVkFM SURfUEFSQU1FVEVSOw0KPiA+ID4gKw0KPiA+ID4gKyAgc3dpdGNoIChGbGFncykgew0KPiA+ID4g KyAgICBjYXNlIE1PRF9ERUxFVEU6DQo+ID4gPiArICAgICAgWmVyb01lbSAoRW50cnksIHNpemVv ZihFRklfUEFSVElUSU9OX0VOVFJZKSk7DQo+ID4gPiArICAgICAgYnJlYWs7DQo+ID4gPiArICAg IGNhc2UgTU9EX0FUVFI6DQo+ID4gPiArICAgICAgRW50cnktPkF0dHJpYnV0ZXMgPSBQYXJhbXMt PkF0dHJpYnV0ZXM7DQo+ID4gPiArICAgICAgYnJlYWs7DQo+ID4gPiArICAgIGNhc2UgTU9EX1RZ UEU6DQo+ID4gPiArICAgICAgRW50cnktPlBhcnRpdGlvblR5cGVHVUlEID0gUGFyYW1zLT5QYXJ0 VHlwZUd1aWQ7DQo+ID4gPiArICAgICAgYnJlYWs7DQo+ID4gPiArICAgIGNhc2UgTU9EX1JFTkFN RToNCj4gPiA+ICsgICAgICBTdHJDcHkgKEVudHJ5LT5QYXJ0aXRpb25OYW1lLCBQYXJhbXMtPk5l d05hbWUpOw0KPiA+ID4gKyAgICAgIGJyZWFrOw0KPiA+ID4gKyAgICBkZWZhdWx0Og0KPiA+ID4g KyAgICAgIFByaW50RXJyIChMIlVua25vd24gbW9kaWZpY2F0aW9uIGZsYWcocykiLCBTdGF0dXMp Ow0KPiA+ID4gKyAgICAgIHJldHVybiBTdGF0dXM7DQo+ID4gPiArICB9DQo+ID4gPiArDQo+ID4g PiArICByZXR1cm4gV3JpdGVHUFQgKCk7DQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4gK0VGSV9L Tk9XTl9QQVJUSVRJT05fVFlQRSAqUGFydGl0aW9uR2V0S25vd25UeXBlICgNCj4gPiA+ICsgIElO IFVJTlROIEluZGV4LA0KPiA+ID4gKyAgSU4gT1VUIE9QVElPTkFMIFVJTlROICpOdW1FbnRyaWVz DQo+ID4gPiArICApDQo+ID4gPiArew0KPiA+ID4gKyAgaWYgKE51bUVudHJpZXMpIHsNCj4gPiA+ ICsgICAgKk51bUVudHJpZXMgPSBBUlJBWV9TSVpFKFBhcnRpdGlvblR5cGVzKTsNCj4gPiA+ICsg IH0NCj4gPiA+ICsgIGlmIChJbmRleCA+IEFSUkFZX1NJWkUoUGFydGl0aW9uVHlwZXMpKSB7DQo+ ID4gPiArICAgIHJldHVybiBOVUxMOw0KPiA+ID4gKyAgfQ0KPiA+ID4gKw0KPiA+ID4gKyByZXR1 cm4gJlBhcnRpdGlvblR5cGVzW0luZGV4XTsNCj4gPiA+ICt9DQo+ID4gPiArDQo+ID4gPiBkaWZm IC0tZ2l0IGEvU2hlbGxQa2cvTGlicmFyeS9VZWZpU2hlbGxHcHRDb21tYW5kTGliL0dwdFdvcmtl ci5oDQo+ID4gPiBiL1NoZWxsUGtnL0xpYnJhcnkvVWVmaVNoZWxsR3B0Q29tbWFuZExpYi9HcHRX b3JrZXIuaA0KPiA+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiA+IGluZGV4IDAwMDAwMDAw MDAwMC4uOWVmZWM1Y2VmZTk0DQo+ID4gPiAtLS0gL2Rldi9udWxsDQo+ID4gPiArKysgYi9TaGVs bFBrZy9MaWJyYXJ5L1VlZmlTaGVsbEdwdENvbW1hbmRMaWIvR3B0V29ya2VyLmgNCj4gPiA+IEBA IC0wLDAgKzEsMTg2IEBADQo+ID4gPiArLyoNCj4gPiA+ICsgKiAgQlNEIExJQ0VOU0UNCj4gPiA+ ICsgKg0KPiA+ID4gKyAqICBDb3B5cmlnaHQoYykgMjAxNiBCcm9hZGNvbS4gIEFsbCByaWdodHMg cmVzZXJ2ZWQuDQo+ID4gPiArICoNCj4gPiA+ICsgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQo+ID4gPiArICogIG1v ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u ZGl0aW9ucw0KPiA+ID4gKyAqICBhcmUgbWV0Og0KPiA+ID4gKyAqDQo+ID4gPiArICogICAgKiBS ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly aWdodA0KPiA+ID4gKyAqICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KPiA+ID4gKyAqICAgICogUmVkaXN0cmlidXRpb25z IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQNCj4gPiA+ ICsgKiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp bmcgZGlzY2xhaW1lciBpbg0KPiA+ID4gKyAqICAgICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29y IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQ0KPiA+ID4gKyAqICAgICAgZGlzdHJp YnV0aW9uLg0KPiA+ID4gKyAqICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBCcm9hZGNvbSBub3Ig dGhlIG5hbWVzIG9mIGl0cw0KPiA+ID4gKyAqICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkDQo+ID4gPiArICogICAgICBm cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np b24uDQo+ID4gPiArICoNCj4gPiA+ICsgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EDQo+ID4gPiBDT05UUklCVVRPUlMNCj4gPiA+ICsgKiAg IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs IEJVVA0KPiA+ID4gTk9UDQo+ID4gPiArICogIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORA0KPiA+ID4gRklUTkVTUyBGT1INCj4gPiA+ICsg KiAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM IFRIRQ0KPiA+ID4gQ09QWVJJR0hUDQo+ID4gPiArICogIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULA0KPiA+ID4gSU5DSURFTlRBTCwNCj4g PiA+ICsgKiAgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO Q0xVRElORywNCj4gPiBCVVQNCj4gPiA+IE5PVA0KPiA+ID4gKyAqICBMSU1JVEVEIFRPLCBQUk9D VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOw0KPiA+IExPU1MNCj4gPiA+ IE9GIFVTRSwNCj4gPiA+ICsgKiAgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS VVBUSU9OKSBIT1dFVkVSIENBVVNFRA0KPiA+ID4gQU5EIE9OIEFOWQ0KPiA+ID4gKyAqICBUSEVP UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP Ug0KPiA+ID4gVE9SVA0KPiA+ID4gKyAqICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUDQo+ID4gT0YNCj4gPiA+IFRIRSBVU0UNCj4gPiA+ ICsgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ IE9GIFNVQ0gNCj4gPiA+IERBTUFHRS4NCj4gPiA+ICsgKi8NCj4gPiA+ICsNCj4gPiA+ICsvKiBH UFQgcGFydGl0aW9uZXIgaGVhZGVyIGZpbGUgKi8NCj4gPiA+ICsNCj4gPiA+ICsjaWZuZGVmIF9H UFRXT1JLRVJfSF8NCj4gPiA+ICsjZGVmaW5lIF9HUFRXT1JLRVJfSF8NCj4gPiA+ICsNCj4gPiA+ ICsjaW5jbHVkZSA8VWVmaS5oPg0KPiA+ID4gKyNpbmNsdWRlIDxTaGVsbEJhc2UuaD4NCj4gPiA+ ICsNCj4gPiA+ICsjaW5jbHVkZSA8TGlicmFyeS9CYXNlTGliLmg+DQo+ID4gPiArI2luY2x1ZGUg PExpYnJhcnkvQmFzZU1lbW9yeUxpYi5oPg0KPiA+ID4gKyNpbmNsdWRlIDxMaWJyYXJ5L0RlYnVn TGliLmg+DQo+ID4gPiArI2luY2x1ZGUgPExpYnJhcnkvTWVtb3J5QWxsb2NhdGlvbkxpYi5oPg0K PiA+ID4gKyNpbmNsdWRlIDxMaWJyYXJ5L1NoZWxsQ29tbWFuZExpYi5oPg0KPiA+ID4gKyNpbmNs dWRlIDxMaWJyYXJ5L1NoZWxsTGliLmg+DQo+ID4gPiArI2luY2x1ZGUgPExpYnJhcnkvVWVmaUxp Yi5oPg0KPiA+ID4gKyNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlTaGVsbExpYi9VZWZpU2hlbGxMaWIu aD4NCj4gPiA+ICsjaW5jbHVkZSA8TGlicmFyeS9VZWZpQm9vdFNlcnZpY2VzVGFibGVMaWIuaD4N Cj4gPiA+ICsjaW5jbHVkZSA8TGlicmFyeS9VZWZpUnVudGltZVNlcnZpY2VzVGFibGVMaWIuaD4N Cj4gPiA+ICsjaW5jbHVkZSA8TGlicmFyeS9QcmludExpYi5oPg0KPiA+ID4gKyNpbmNsdWRlIDxM aWJyYXJ5L1NoZWxsQ0VudHJ5TGliLmg+DQo+ID4gPiArI2luY2x1ZGUgPExpYnJhcnkvSGlpTGli Lmg+DQo+ID4gPiArI2luY2x1ZGUgPExpYnJhcnkvRmlsZUhhbmRsZUxpYi5oPg0KPiA+ID4gKyNp bmNsdWRlIDxQcm90b2NvbC9EZXZpY2VQYXRoLmg+DQo+ID4gPiArI2luY2x1ZGUgPExpYnJhcnkv RGV2aWNlUGF0aExpYi5oPg0KPiA+ID4gKyNpbmNsdWRlIDxQcm90b2NvbC9CbG9ja0lvLmg+DQo+ ID4gPiArI2luY2x1ZGUgPFByb3RvY29sL0Rpc2tJby5oPg0KPiA+ID4gKyNpbmNsdWRlIDxJbmR1 c3RyeVN0YW5kYXJkL01ici5oPg0KPiA+ID4gKw0KPiA+ID4gK3R5cGVkZWYgZW51bSB7DQo+ID4g PiArICBNT0RfTkFNRSAgID0gQklUMCwNCj4gPiA+ICsgIE1PRF9BVFRSICAgPSBCSVQxLA0KPiA+ ID4gKyAgTU9EX1RZUEUgICA9IEJJVDIsDQo+ID4gPiArICBNT0RfREVMRVRFID0gQklUMywNCj4g PiA+ICsgIE1PRF9SRU5BTUUgPSBCSVQ0DQo+ID4gPiArfSBNT0RfRkxBR1M7DQo+ID4gPiArDQo+ ID4gPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiA+ID4gKyAgVUlOVE4gQXR0cmlidXRlczsNCj4gPiA+ ICsgIEVGSV9HVUlEIFBhcnRUeXBlR3VpZDsNCj4gPiA+ICsgIENPTlNUIENIQVIxNiAqUGFydE5h bWU7DQo+ID4gPiArICBDT05TVCBDSEFSMTYgKk5ld05hbWU7DQo+ID4gPiArfSBNT0RfUEFSQU1T Ow0KPiA+ID4gKw0KPiA+ID4gK3R5cGVkZWYgZW51bSB7DQo+ID4gPiArICBTUkNfQllfTkFNRSA9 IEJJVDAsDQo+ID4gPiArICBTUkNfQllfTEJBICA9IEJJVDEsDQo+ID4gPiArICBTUkNfQllfTlVN ICA9IEJJVDIsDQo+ID4gPiArICBTUkNfQU5ZICAgICA9IEJJVDMNCj4gPiA+ICt9IFNFQVJDSF9U WVBFOw0KPiA+ID4gKw0KPiA+ID4gKyNkZWZpbmUgTUFYX1BBUlRJVElPTl9OQU1FX0xFTkdUSCAz Ng0KPiA+ID4gKyNkZWZpbmUgRU5UUllfREVGQVVMVCAgICAgICAgICAgICAxMjgNCj4gPiA+ICsj ZGVmaW5lIEdQVF9SRVZJU0lPTl8xXzAgICAgICAgICAgMHgwMDAxMDAwMA0KPiA+ID4gKw0KPiA+ ID4gKyNkZWZpbmUgQVJSQVlfU0laRSh4KSBcDQo+ID4gPiArICAoc2l6ZW9mKHgpIC8gc2l6ZW9m KCh4KVswXSkpDQo+ID4gPiArDQo+ID4gPiArLy8NCj4gPiA+ICsvLyBFeHRyYWN0IElOVDMyIGZy b20gY2hhciBhcnJheQ0KPiA+ID4gKy8vDQo+ID4gPiArI2RlZmluZSBVTlBBQ0tfSU5UMzIoYSkg KElOVDMyKSggKCgoVUlOVDggKikgYSlbMF0gPDwgIDApIHwgICAgXA0KPiA+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICgoKFVJTlQ4ICopIGEpWzFdIDw8ICA4KSB8ICAgIFwN Cj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChVSU5UOCAqKSBhKVsy XSA8PCAxNikgfCAgICBcDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KCgoVUlOVDggKikgYSlbM10gPDwgMjQpICkNCj4gPiA+ICsNCj4gPiA+ICsvLw0KPiA+ID4gKy8v IEV4dHJhY3QgVUlOVDMyIGZyb20gY2hhciBhcnJheQ0KPiA+ID4gKy8vDQo+ID4gPiArI2RlZmlu ZSBVTlBBQ0tfVUlOVDMyKGEpIChVSU5UMzIpKCAoKChVSU5UOCAqKSBhKVswXSA8PCAgMCkgfCAg ICBcDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChVSU5UOCAq KSBhKVsxXSA8PCAgOCkgfCAgICBcDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoKChVSU5UOCAqKSBhKVsyXSA8PCAxNikgfCAgICBcDQo+ID4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoKChVSU5UOCAqKSBhKVszXSA8PCAyNCkgKQ0KPiA+ ID4gKw0KPiA+ID4gKw0KPiA+ID4gKy8vDQo+ID4gPiArLy8gR1BUIFBhcnRpdGlvbiBFbnRyeSBT dGF0dXMNCj4gPiA+ICsvLw0KPiA+ID4gK3R5cGVkZWYgc3RydWN0IHsNCj4gPiA+ICsgIEJPT0xF QU4gT3V0T2ZSYW5nZTsNCj4gPiA+ICsgIEJPT0xFQU4gT3ZlcmxhcDsNCj4gPiA+ICsgIEJPT0xF QU4gT3NTcGVjaWZpYzsNCj4gPiA+ICt9IEVGSV9QQVJUSVRJT05fRU5UUllfU1RBVFVTOw0KPiA+ ID4gKw0KPiA+ID4gK3R5cGVkZWYgc3RydWN0IHsNCj4gPiA+ICsgIENPTlNUIEVGSV9HVUlEIFR5 cGVHdWlkOw0KPiA+ID4gKyAgQ09OU1QgQ0hBUjE2ICpUeXBlTmFtZTsNCj4gPiA+ICsNCj4gPiA+ ICt9IEVGSV9LTk9XTl9QQVJUSVRJT05fVFlQRTsNCj4gPiA+ICsNCj4gPiA+ICtFRklfS05PV05f UEFSVElUSU9OX1RZUEUgKlBhcnRpdGlvbkdldEtub3duVHlwZSAoDQo+ID4gPiArICBJTiBVSU5U TiBJbmRleCwNCj4gPiA+ICsgIElOIE9VVCBPUFRJT05BTCBVSU5UTiAqTnVtRW50cmllcw0KPiA+ ID4gKyAgKTsNCj4gPiA+ICsNCj4gPiA+ICtFRklfU1RBVFVTDQo+ID4gPiArUGFydGl0aW9uR2V0 R3B0VGFibGVzICgNCj4gPiA+ICsgIElOICBFRklfRElTS19JT19QUk9UT0NPTCAgICAgICAgICpE aXNrSW9Qcm90LA0KPiA+ID4gKyAgSU4gIEVGSV9CTE9DS19JT19QUk9UT0NPTCAgICAgICAgKkJs b2NrSW9Qcm90DQo+ID4gPiArICApOw0KPiA+ID4gKw0KPiA+ID4gK1VJTlRODQo+ID4gPiArUGFy dGl0aW9uTGlzdEdwdEVudHJpZXMgKA0KPiA+ID4gKyAgVk9JRA0KPiA+ID4gKyAgKTsNCj4gPiA+ ICsNCj4gPiA+ICtWT0lEDQo+ID4gPiArUGFydGl0aW9uUHJpbnRHcHRQYXJ0SW5mbyAoDQo+ID4g PiArICBJTiBFRklfUEFSVElUSU9OX0VOVFJZICpFbnRyeQ0KPiA+ID4gKyAgKTsNCj4gPiA+ICsN Cj4gPiA+ICtFRklfU1RBVFVTDQo+ID4gPiArR2V0UGFydGl0aW9uVHlwZVN0ciAoDQo+ID4gPiAr ICBFRklfR1VJRCBHdWlkLA0KPiA+ID4gKyAgQ0hBUjE2ICpQYXJ0VHlwZVN0ciwNCj4gPiA+ICsg IEJPT0xFQU4gTm9HdWlkU3RyDQo+ID4gPiArICApOw0KPiA+ID4gKw0KPiA+ID4gKw0KPiA+ID4g K0VGSV9TVEFUVVMNCj4gPiA+ICtQYXJ0aXRpb25HcHRDbGVhckFsbCAoDQo+ID4gPiArICBWT0lE DQo+ID4gPiArICApOw0KPiA+ID4gKw0KPiA+ID4gK0VGSV9TVEFUVVMNCj4gPiA+ICtQYXJ0aXRp b25HcHRDcmVhdGVQYXJ0aXRpb24gKA0KPiA+ID4gKyAgQ09OU1QgQ0hBUjE2ICpQYXJ0TmFtZSwN Cj4gPiA+ICsgIEVGSV9MQkEgU3RhcnRMYmEsDQo+ID4gPiArICBFRklfTEJBIFBhcnRpdGlvblNp emUsDQo+ID4gPiArICBVSU5UNjQgQXR0cmlidXRlcywNCj4gPiA+ICsgIEVGSV9HVUlEIFBhcnRU eXBlR3VpZCk7DQo+ID4gPiArDQo+ID4gPiArRUZJX1NUQVRVUw0KPiA+ID4gK1BhcnRpdGlvbkdw dE1vZGlmeVBhcnRpdGlvbiAoDQo+ID4gPiArICBFRklfUEFSVElUSU9OX0VOVFJZICpFbnRyeSwN Cj4gPiA+ICsgIE1PRF9QQVJBTVMgKlBhcmFtcywNCj4gPiA+ICsgIE1PRF9GTEFHUyBGbGFncw0K PiA+ID4gKyAgKTsNCj4gPiA+ICsNCj4gPiA+ICtWT0lEDQo+ID4gPiArR3B0Q2xlYW51cEdsb2Jh bHMgKA0KPiA+ID4gKyAgVk9JRA0KPiA+ID4gKyAgKTsNCj4gPiA+ICsNCj4gPiA+ICtFRklfUEFS VElUSU9OX0VOVFJZICoNCj4gPiA+ICtQYXJ0aXRpb25GaW5kUGFydGl0aW9uQnlDcml0ZXJpYSAo DQo+ID4gPiArICBDT05TVCBDSEFSMTYgICAqTmFtZSwNCj4gPiA+ICsgIEVGSV9MQkEgICAgICAg IFN0YXJ0TGJhLA0KPiA+ID4gKyAgRUZJX0xCQSAgICAgICAgRW5kaW5nTGJhLA0KPiA+ID4gKyAg U0VBUkNIX1RZUEUgICAgU2VhcmNoVHlwZSk7DQo+ID4gPiArDQo+ID4gPiArVk9JRA0KPiA+ID4g K1ByaW50RXJyIChJTiBDT05TVCBDSEFSMTYgKk1lc3NhZ2UsIElOIEVGSV9TVEFUVVMgU3RhdHVz KTsNCj4gPiA+ICsNCj4gPiA+ICsjZW5kaWYgLy9fR1BUV09SS0VSX0hfDQo+ID4gPiBkaWZmIC0t Z2l0DQo+ID4gPiBhL1NoZWxsUGtnL0xpYnJhcnkvVWVmaVNoZWxsR3B0Q29tbWFuZExpYi9VZWZp U2hlbGxHcHRDb21tYW5kTGliLmMNCj4gPiA+IGIvU2hlbGxQa2cvTGlicmFyeS9VZWZpU2hlbGxH cHRDb21tYW5kTGliL1VlZmlTaGVsbEdwdENvbW1hbmRMaWIuYw0KPiA+ID4gbmV3IGZpbGUgbW9k ZSAxMDA2NDQNCj4gPiA+IGluZGV4IDAwMDAwMDAwMDAwMC4uYTlkNzRhNzgwOTExDQo+ID4gPiAt LS0gL2Rldi9udWxsDQo+ID4gPiArKysNCj4gPiA+IGIvU2hlbGxQa2cvTGlicmFyeS9VZWZpU2hl bGxHcHRDb21tYW5kTGliL1VlZmlTaGVsbEdwdENvbW1hbmRMaWIuYw0KPiA+ID4gQEAgLTAsMCAr MSwxMTM1IEBADQo+ID4gPg0KPiA+ICsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqDQo+ID4gPiAqKioqKioqKioqKioqKioqKioqKioqDQo+ ID4gPiArQ29weXJpZ2h0IChDKSAyMDE2IE1hcnZlbGwgSW50ZXJuYXRpb25hbCBMdGQuDQo+ID4g PiArDQo+ID4gPiArTWFydmVsbCBCU0QgTGljZW5zZSBPcHRpb24NCj4gPiA+ICsNCj4gPiA+ICtJ ZiB5b3UgcmVjZWl2ZWQgdGhpcyBGaWxlIGZyb20gTWFydmVsbCwgeW91IG1heSBvcHQgdG8gdXNl LCByZWRpc3RyaWJ1dGUNCj4gPiA+IGFuZC9vcg0KPiA+ID4gK21vZGlmeSB0aGlzIEZpbGUgdW5k ZXIgdGhlIGZvbGxvd2luZyBsaWNlbnNpbmcgdGVybXMuDQo+ID4gPiArUmVkaXN0cmlidXRpb24g YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQo+ID4g PiBtb2RpZmljYXRpb24sDQo+ID4gPiArYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KPiA+ID4gKw0KPiA+ID4gKyogUmVkaXN0cmli dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90 aWNlLA0KPiA+ID4gKyAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg ZGlzY2xhaW1lci4NCj4gPiA+ICsNCj4gPiA+ICsqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0DQo+ID4gPiArICBub3RpY2Us IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g dGhlDQo+ID4gPiArICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KPiA+ID4gKw0KPiA+ID4gKyogTmVpdGhlciB0aGUg bmFtZSBvZiBNYXJ2ZWxsIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUN Cj4gPiA+ICsgIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv bSB0aGlzIHNvZnR3YXJlDQo+ID4gd2l0aG91dA0KPiA+ID4gKyAgc3BlY2lmaWMgcHJpb3Igd3Jp dHRlbiBwZXJtaXNzaW9uLg0KPiA+ID4gKw0KPiA+ID4gK1RISVMgU09GVFdBUkUgSVMgUFJPVklE RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORA0KPiA+ID4gQ09OVFJJQlVUT1JTICJBUyBJ UyIgQU5EDQo+ID4gPiArQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ TkcsIEJVVCBOT1QgTElNSVRFRA0KPiA+IFRPLA0KPiA+ID4gVEhFIElNUExJRUQNCj4gPiA+ICtX QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS DQo+ID4gPiBQVVJQT1NFIEFSRQ0KPiA+ID4gK0RJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM IFRIRSBDT1BZUklHSFQgT1dORVIgT1INCj4gPiA+IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S DQo+ID4gPiArQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q TEFSWSwgT1INCj4gPiA+IENPTlNFUVVFTlRJQUwgREFNQUdFUw0KPiA+ID4gKyhJTkNMVURJTkcs IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURQ0KPiA+IEdPT0RT DQo+ID4gPiBPUiBTRVJWSUNFUzsNCj4gPiA+ICtMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQ0KPiA+IEhPV0VWRVINCj4gPiA+IENBVVNFRCBB TkQgT04NCj4gPiA+ICtBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD VCwgU1RSSUNUIExJQUJJTElUWSwgT1INCj4gPiA+IFRPUlQNCj4gPiA+ICsoSU5DTFVESU5HIE5F R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GDQo+ID4gPiBU SEUgVVNFIE9GIFRISVMNCj4gPiA+ICtTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCj4gPiA+ICsNCj4gPiA+DQo+ID4gKyoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KPiA+ID4g KioqKioqKioqKioqKioqKioqKioqKi8NCj4gPiA+ICsNCj4gPiA+ICsvKiBQb3J0aW9ucyBDb3B5 cmlnaHQgKEMpIDIwMTYgQnJvYWRjb20gKi8NCj4gPiA+ICsNCj4gPiA+ICsjaW5jbHVkZSAiRmF0 Rm9ybWF0LmgiDQo+ID4gPiArI2luY2x1ZGUNCj4gPiA+IDxMaWJyYXJ5L1VlZmlTaGVsbERlYnVn MUNvbW1hbmRzTGliL1VlZmlTaGVsbERlYnVnMUNvbW1hbmRzTGliLmg+DQo+ID4gPiArI2luY2x1 ZGUgPExpYnJhcnkvVGltZXJMaWIuaD4NCj4gPiA+ICsNCj4gPiA+ICtDT05TVCBDSEFSMTYgZ1No ZWxsR3B0RmlsZU5hbWVbXSA9IEwiU2hlbGxDb21tYW5kIjsNCj4gPiA+ICtTVEFUSUMgQ09OU1Qg Q0hBUjE2IGdBcHBOYW1lW10gPSBMImdwdCI7DQo+ID4gPiArRUZJX0hBTkRMRSBnU2hlbGxHcHRI aWlIYW5kbGUgPSBOVUxMOw0KPiA+ID4gKw0KPiA+ID4gK1NUQVRJQyBDT05TVCBTSEVMTF9QQVJB TV9JVEVNIFBhcmFtTGlzdFtdID0gew0KPiA+ID4gKyAgLy8gUGFydGl0aW9uLXJlbGF0ZWQgb3Bl cmF0aW9ucw0KPiA+ID4gKyAgeyBMImNsZWFyIiwgVHlwZUZsYWcgfSwgICAgICAgICAgICAgICAg ICAvLyBDbGVhcnMgYWxsIHBhcnRpdGlvbnMNCj4gPiA+ICsgIHsgTCJjcmVhdGUiLCBUeXBlRmxh ZyB9LCAgICAgICAgICAgICAgICAgLy8gQ3JlYXRlcyBhIHBhcnRpdGlvbg0KPiA+ID4gKyAgeyBM ImRlbGV0ZSIsIFR5cGVGbGFnIH0sICAgICAgICAgICAgICAgICAvLyBEZWxldGVzIGEgcGFydGl0 aW9uDQo+ID4gPiArICB7IEwibGlzdCIsIFR5cGVGbGFnIH0sICAgICAgICAgICAgICAgICAgIC8v IExpc3RzIGFsbCBwYXJ0aXRpb25zDQo+ID4gPiArICB7IEwicmVuYW1lIiwgVHlwZUZsYWcgfSwg ICAgICAgICAgICAgICAgIC8vIFJlbmFtZXMgYSBwYXJ0aXRpb24NCj4gPiA+ICsgIHsgTCJzZXRh dHRyIiwgVHlwZUZsYWcgfSwgICAgICAgICAgICAgICAgLy8gU2V0IGF0dHJpYnV0ZXMgZm9yIGEg cGFydGl0aW9uIGluIHBhcnRpdGlvbg0KPiA+ID4gdGFibGUNCj4gPiA+ICsgIHsgTCJzZXR0eXBl IiwgVHlwZUZsYWcgfSwNCj4gPiA+ICsgIHsgTCJzeW5jIiwgVHlwZUZsYWcgfSwgICAgICAgICAg ICAgICAgICAgLy8gU3luY2hyb25pemVzIGVpdGhlciBtYXN0ZXIgb3INCj4gPiBhbHRlcm5hdGl2 ZQ0KPiA+ID4gcGFydGl0aW9uIHRhYmxlDQo+ID4gPiArICB7IEwidHlwZXNpbmZvIiwgVHlwZUZs YWcgfSwgICAgICAgICAgICAgICAgIC8vIFZlcmlmaWVzIGNvcnJlY3RuZXNzIG9mIG1hc3RlciBh bmQNCj4gPiA+IGFsdGVybmF0aXZlIHBhcnRpdGlvbiB0YWJsZXMNCj4gPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQmxvY2tJby1yZWxhdGVkIG9w ZXJhdGlvbnMNCj4gPiA+ICsgIHsgTCJyZWFkIiwgVHlwZUZsYWcgfSwgICAgICAgICAgICAgICAg ICAgLy8gUmVhZHMgbiBieXRlcyBpbnRvIG1lbW9yeSBhZGRyZXNzDQo+ID4gZnJvbQ0KPiA+ID4g YSBwYXJ0aXRpb24gc3RhcnRpbmcgZnJvbSBhIGNlcnRhaW4gbGJhDQo+ID4gPiArICB7IEwicmVh ZGZpbGUiLCBUeXBlRmxhZyB9LCAgICAgICAgICAgICAgIC8vIFNhbWUgYXMgYWJvdmUsIGJ1dCBp bnN0ZWFkIG9mIHN0b3JlIGl0DQo+ID4gaW4NCj4gPiA+IG1lbW9yeSBzYXZlcyBpbnRvIGEgZmls ZSBzeXN0ZW0NCj4gPiA+ICsgIHsgTCJ3cml0ZSIsIFR5cGVGbGFnIH0sICAgICAgICAgICAgICAg ICAgLy8gV3JpdGVzIG4gYnl0ZXMgZnJvbSBtZW1vcnkgaW50byBhDQo+ID4gPiBwYXJ0aXRpb24g c3RhcnRpbmcgZnJvbSBhIGNlcnRhaW4gbGJhDQo+ID4gPiArICB7IEwid3JpdGVmaWxlIiwgVHlw ZUZsYWcgfSwgICAgICAgICAgICAgIC8vIFNhbWUgYXMgYWJvdmUsIGJ1dCBpbnN0ZWFkIG9mIGdl dHRpbmcNCj4gPiA+IGRhdGEgZnJvbSBtZW1vcnkgcmVhZHMgYSBmaWxlDQo+ID4gPiArICB7IEwi aW5mbyIsIFR5cGVGbGFnIH0sICAgICAgICAgICAgICAgICAgIC8vIEdldCBpbmZvcm1hdGlvbiBv biBhIGNlcnRhaW4gcGFydGl0aW9uDQo+ID4gPiAoc3RhcnRMYmEsIGxhc3RMYmEsIGF0dHJpYnV0 ZXMpDQo+ID4gPiArICB7IEwiZmF0Zm9ybWF0IiwgVHlwZUZsYWcgfSwgICAgICAgICAgICAgIC8v IEZBVCBmb3JtYXQgb2YgYSBwYXJ0aXRpb24NCj4gPiA+ICsgIHsgTCItdHlwZSIsIFR5cGVWYWx1 ZSB9LA0KPiA+ID4gKyAgeyBMIi15ZXMiLCBUeXBlRmxhZyB9LA0KPiA+ID4gKyAgeyBMIi12ZXJi b3NlIiwgVHlwZUZsYWcgfSwNCj4gPiA+ICsgIHsgTlVMTCwgVHlwZU1heCB9DQo+ID4gPiArfTsN Cj4gPiA+ICsNCj4gPiA+ICt0eXBlZGVmIGVudW0gew0KPiA+ID4gKyAgLy8gTm90IHJlcXVpcmVz IHByZXNlbmNlDQo+ID4gPiArICBDTEVBUiAgICAgICA9IEJJVDAsDQo+ID4gPiArICBDUkVBVEUg ICAgICA9IEJJVDEsDQo+ID4gPiArICBMSVNUICAgICAgICA9IEJJVDIsDQo+ID4gPiArICBTWU5D ICAgICAgICA9IEJJVDMsDQo+ID4gPiArICBUWVBFU19JTkZPICA9IEJJVDQsDQo+ID4gPiArDQo+ ID4gPiArICAvLyBSZXF1aXJlcyBwcmVzZW5jZQ0KPiA+ID4gKyAgREVMRVRFICAgICAgPSBCSVQ1 LA0KPiA+ID4gKyAgSU5GTyAgICAgICAgPSBCSVQ2LA0KPiA+ID4gKyAgUkVBRCAgICAgICAgPSBC SVQ3LA0KPiA+ID4gKyAgUkVBRF9GSUxFICAgPSBCSVQ4LA0KPiA+ID4gKyAgUkVOQU1FICAgICAg PSBCSVQ5LA0KPiA+ID4gKyAgU0VUQVRUUiAgICAgPSBCSVQxMCwNCj4gPiA+ICsgIFNFVFRZUEUg ICAgID0gQklUMTEsDQo+ID4gPiArICBXUklURSAgICAgICA9IEJJVDEyLA0KPiA+ID4gKyAgV1JJ VEVfRklMRSAgPSBCSVQxMywNCj4gPiA+ICsgIEZBVF9GT1JNQVQgID0gQklUMTQsDQo+ID4gPiAr fSBGbGFnczsNCj4gPiA+ICsNCj4gPiA+ICsvKioNCj4gPiA+ICsgIFJldHVybiB0aGUgZmlsZSBu YW1lIG9mIHRoZSBoZWxwIHRleHQgZmlsZSBpZiBub3QgdXNpbmcgSElJLg0KPiA+ID4gKw0KPiA+ ID4gKyAgQHJldHVybiBUaGUgc3RyaW5nIHBvaW50ZXIgdG8gdGhlIGZpbGUgbmFtZS4NCj4gPiA+ ICsqKi8NCj4gPiA+ICtDT05TVCBDSEFSMTYgKg0KPiA+ID4gK0VGSUFQSQ0KPiA+ID4gK1NoZWxs Q29tbWFuZEdldE1hbkZpbGVOYW1lR3B0ICgNCj4gPiA+ICsgIFZPSUQNCj4gPiA+ICsgICkNCj4g PiA+ICt7DQo+ID4gPiArDQo+ID4gPiArICByZXR1cm4gZ1NoZWxsR3B0RmlsZU5hbWU7DQo+ID4g PiArfQ0KPiA+ID4gKw0KPiA+ID4gK1NUQVRJQw0KPiA+ID4gK0VGSV9TVEFUVVMNCj4gPiA+ICtP cGVuQW5kUHJlcGFyZUZpbGUgKA0KPiA+ID4gKyAgSU4gQ0hBUjE2ICpGaWxlUGF0aCwNCj4gPiA+ ICsgIE9VVCBTSEVMTF9GSUxFX0hBTkRMRSAqRmlsZUhhbmRsZSwNCj4gPiA+ICsgIElOIEJPT0xF QU4gV3JpdGVOZWVkZWQNCj4gPiA+ICsgICkNCj4gPiA+ICt7DQo+ID4gPiArICBFRklfU1RBVFVT IFN0YXR1czsNCj4gPiA+ICsgIFVJTlQ2NCBPcGVuTW9kZTsNCj4gPiA+ICsNCj4gPiA+ICsgIE9w ZW5Nb2RlID0gRUZJX0ZJTEVfTU9ERV9SRUFEOw0KPiA+ID4gKw0KPiA+ID4gKyAgaWYgKFdyaXRl TmVlZGVkKSB7DQo+ID4gPiArICAgIE9wZW5Nb2RlIHw9IEVGSV9GSUxFX01PREVfV1JJVEUgfCBF RklfRklMRV9NT0RFX0NSRUFURTsNCj4gPiA+ICsgIH0NCj4gPiA+ICsNCj4gPiA+ICsgIFN0YXR1 cyA9IFNoZWxsT3BlbkZpbGVCeU5hbWUgKEZpbGVQYXRoLCBGaWxlSGFuZGxlLCBPcGVuTW9kZSwg MCk7DQo+ID4gPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gPiArICAgIFNoZWxs UHJpbnRIaWlFeCAoLTEsIC0xLA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgIE5VTEwsIFNU UklOR19UT0tFTiAoU1RSX0dQVF9FUlJPUiksDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAg Z1NoZWxsR3B0SGlpSGFuZGxlLA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgIGdBcHBOYW1l LA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgIFN0YXR1cywNCj4gPiA+ICsgICAgICAgICAg ICAgICAgICAgICBMIkNhbm5vdCBvcGVuIGZpbGUiDQo+ID4gPiArICAgICAgICAgICAgICAgICAg ICApOw0KPiA+ID4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiA+ID4gKyAgfQ0KPiA+ID4gKw0KPiA+ ID4gKyAgU3RhdHVzID0gRmlsZUhhbmRsZVNldFBvc2l0aW9uICgqRmlsZUhhbmRsZSwgMCk7DQo+ ID4gPiArDQo+ID4gPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gPiArICAgIFNo ZWxsUHJpbnRIaWlFeCAoLTEsIC0xLA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgIE5VTEws IFNUUklOR19UT0tFTiAoU1RSX0dQVF9FUlJPUiksDQo+ID4gPiArICAgICAgICAgICAgICAgICAg ICAgZ1NoZWxsR3B0SGlpSGFuZGxlLA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgIGdBcHBO YW1lLA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgIFN0YXR1cywNCj4gPiA+ICsgICAgICAg ICAgICAgICAgICAgICAiQ2Fubm90IHNldCBmaWxlIHBvc2l0aW9uIHRvIHRoZSBmaXJzdCBieXRl Ig0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgKTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgU2hl bGxDbG9zZUZpbGUgKEZpbGVIYW5kbGUpOw0KPiA+ID4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiA+ ID4gKyAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiA+ID4gK30N Cj4gPiA+ICsNCj4gPiA+ICtWT0lEDQo+ID4gPiArUHJpbnRFcnIgKA0KPiA+ID4gKyAgSU4gQ09O U1QgQ0hBUjE2ICpNZXNzYWdlLA0KPiA+ID4gKyAgSU4gRUZJX1NUQVRVUyBTdGF0dXMNCj4gPiA+ ICsgICkNCj4gPiA+ICt7DQo+ID4gPiArICBTaGVsbFByaW50SGlpRXggKC0xLCAtMSwNCj4gPiA+ ICsgICAgICAgICAgICAgICAgICAgTlVMTCwgU1RSSU5HX1RPS0VOIChTVFJfR1BUX0VSUk9SKSwN Cj4gPiA+ICsgICAgICAgICAgICAgICAgICAgZ1NoZWxsR3B0SGlpSGFuZGxlLA0KPiA+ID4gKyAg ICAgICAgICAgICAgICAgICBnQXBwTmFtZSwNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgU3Rh dHVzLA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICBNZXNzYWdlDQo+ID4gPiArICAgICAgICAg ICAgICAgICAgKTsNCj4gPiA+ICt9DQo+ID4gPiArDQo+ID4gPiArU1RBVElDDQo+ID4gPiArQk9P TEVBTg0KPiA+ID4gK0lzUGFydGl0aW9uYWJsZURldmljZVBhdGggKA0KPiA+ID4gKyAgSU4gRUZJ X0RFVklDRV9QQVRIICpEZXZpY2VQYXRoDQo+ID4gPiArICApDQo+ID4gPiArew0KPiA+ID4gKyAg VUlOVE4gUGF0aFNpemU7DQo+ID4gPiArICBFRklfREVWSUNFX1BBVEggKlBhdGhJbnN0YW5jZTsN Cj4gPiA+ICsgIEJPT0xFQU4gUGFydGl0aW9uYWJsZTsNCj4gPiA+ICsNCj4gPiA+ICsgIFBhcnRp dGlvbmFibGUgPSBUUlVFOw0KPiA+ID4gKyAgd2hpbGUgKERldmljZVBhdGggIT0gTlVMTCkgew0K PiA+ID4gKyAgICBQYXRoSW5zdGFuY2UgPSBHZXROZXh0RGV2aWNlUGF0aEluc3RhbmNlICgmRGV2 aWNlUGF0aCwgJlBhdGhTaXplKTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgd2hpbGUgKCFJc0Rldmlj ZVBhdGhFbmQgKFBhdGhJbnN0YW5jZSkpIHsNCj4gPiA+ICsgICAgICBpZiAoKERldmljZVBhdGhU eXBlIChQYXRoSW5zdGFuY2UpID09IE1FRElBX0RFVklDRV9QQVRIKSkgew0KPiA+ID4gKyAgICAg ICAgUGFydGl0aW9uYWJsZSA9IEZBTFNFOw0KPiA+ID4gKyAgICAgIH0NCj4gPiA+ICsNCj4gPiA+ ICsgICAgICBQYXRoSW5zdGFuY2UgPSBOZXh0RGV2aWNlUGF0aE5vZGUgKFBhdGhJbnN0YW5jZSk7 DQo+ID4gPiArICAgIH0NCj4gPiA+ICsgIH0NCj4gPiA+ICsgIHJldHVybiBQYXJ0aXRpb25hYmxl Ow0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICtTVEFUSUMNCj4gPiA+ICtFRklfU1RBVFVTDQo+ ID4gPiArR3B0UHJvbXB0WWVzTm8gKA0KPiA+ID4gKyAgSU4gQ09OU1QgRUZJX1NUUklOR19JRCBI aWlGb3JtYXRTdHJpbmdJZA0KPiA+ID4gKyAgKQ0KPiA+ID4gK3sNCj4gPiA+ICsgIEVGSV9TVEFU VVMgU3RhdHVzOw0KPiA+ID4gKyAgVk9JRCAgICAgICAqUmVzcG9uc2U7DQo+ID4gPiArDQo+ID4g PiArICBTdGF0dXMgPSBTaGVsbFByb21wdEZvclJlc3BvbnNlSGlpIChTaGVsbFByb21wdFJlc3Bv bnNlVHlwZVllc05vLA0KPiA+ID4gSGlpRm9ybWF0U3RyaW5nSWQsIGdTaGVsbEdwdEhpaUhhbmRs ZSwgJlJlc3BvbnNlKTsNCj4gPiA+ICsgIGlmICgoRUZJX0VSUk9SIChTdGF0dXMpKSB8fCAoKihT SEVMTF9QUk9NUFRfUkVTUE9OU0UNCj4gPiAqKVJlc3BvbnNlKSAhPQ0KPiA+ID4gU2hlbGxQcm9t cHRSZXNwb25zZVllcykgew0KPiA+ID4gKyAgICByZXR1cm4gRUZJX0FCT1JURUQ7DQo+ID4gPiAr ICB9DQo+ID4gPiArDQo+ID4gPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ID4gPiArfQ0KPiA+ ID4gKw0KPiA+ID4gK1NUQVRJQw0KPiA+ID4gK1ZPSUQgRm9ybWF0U2l6ZSgNCj4gPiA+ICsgIFVJ TlQ2NCBTaXplLCBDSEFSMTYgKkJ1ZmZlcikNCj4gPiA+ICt7DQo+ID4gPiArI2RlZmluZSBNQVhf U0laRV9CVUZfU0laRSAzMg0KPiA+ID4gKyAgVUlOVDY0IEJhc2UsIEZyYWM7DQo+ID4gPiArICBD SEFSMTYgTWV0cmljOw0KPiA+ID4gKw0KPiA+ID4gKyAgTWV0cmljID0gTCdCJzsNCj4gPiA+ICsg IEZyYWMgPSAwOw0KPiA+ID4gKyAgaWYgKFNpemUgPCBTSVpFXzFLQikgew0KPiA+ID4gKyAgICBC YXNlID0gU2l6ZTsNCj4gPiA+ICsgIH0gZWxzZSBpZiAoU2l6ZSA8IFNJWkVfMU1CKSB7DQo+ID4g PiArICAgIEJhc2UgPSBTaXplIC8gU0laRV8xS0I7DQo+ID4gPiArICAgIEZyYWMgPSAoKFNpemUg JSBTSVpFXzFLQikgKiAxMCkgPj4gMTA7DQo+ID4gPiArICAgIE1ldHJpYyA9IEwnSyc7DQo+ID4g PiArICB9IGVsc2UgaWYgKFNpemUgPCBTSVpFXzFHQikgew0KPiA+ID4gKyAgICBCYXNlID0gU2l6 ZSAvIFNJWkVfMU1COw0KPiA+ID4gKyAgICBGcmFjID0gKChTaXplICUgU0laRV8xTUIpICogMTAp ID4+IDIwOw0KPiA+ID4gKyAgICBNZXRyaWMgPSBMJ00nOw0KPiA+ID4gKyAgfSBlbHNlIGlmIChT aXplIDwgU0laRV8xVEIpIHsNCj4gPiA+ICsgICAgQmFzZSA9IFNpemUgLyBTSVpFXzFHQjsNCj4g PiA+ICsgICAgRnJhYyA9ICgoU2l6ZSAlIFNJWkVfMUdCKSAqIDEwKSA+PiAzMDsNCj4gPiA+ICsg ICAgTWV0cmljID0gTCdHJzsNCj4gPiA+ICsgIH0gZWxzZSB7DQo+ID4gPiArICAgIEJhc2UgPSBT aXplIC8gU0laRV8xVEI7DQo+ID4gPiArICAgIEZyYWMgPSAoKFNpemUgJSBTSVpFXzFUQikgKiAx MCkgPj4gNDA7DQo+ID4gPiArICAgIE1ldHJpYyA9IEwnVCc7DQo+ID4gPiArICB9DQo+ID4gPiAr ICBpZiAoRnJhYykgew0KPiA+ID4gKyAgICBVbmljb2RlU1ByaW50IChCdWZmZXIsIE1BWF9TSVpF X0JVRl9TSVpFLCBMIiVkLiVkJWMiLCBCYXNlLCBGcmFjLA0KPiA+ID4gTWV0cmljKTsNCj4gPiA+ ICsgIH0gZWxzZSB7DQo+ID4gPiArICAgIFVuaWNvZGVTUHJpbnQgKEJ1ZmZlciwgTUFYX1NJWkVf QlVGX1NJWkUsIEwiJWQlYyIsIEJhc2UsIE1ldHJpYyk7DQo+ID4gPiArICB9DQo+ID4gPiArfQ0K PiA+ID4gKw0KPiA+ID4gK1NUQVRJQw0KPiA+ID4gK0VGSV9TVEFUVVMNCj4gPiA+ICtGaW5kQW5k UHJpbnRQYXJ0aXRpb25hYmxlRGV2aWNlcyAoVk9JRCkNCj4gPiA+ICt7DQo+ID4gPiArICBVSU5U TiBJbmRleDsNCj4gPiA+ICsgIEVGSV9IQU5ETEUgICAgICAqSGFuZGxlUG9pbnRlcjsNCj4gPiA+ ICsgIFVJTlROICAgICAgICAgICBIYW5kbGVDb3VudDsNCj4gPiA+ICsgIFVJTlROICAgICAgICAg ICBEZXZDb3VudDsNCj4gPiA+ICsgIEVGSV9TVEFUVVMgICAgICBTdGF0dXM7DQo+ID4gPiArICBC T09MRUFOICAgICAgICAgRmlyc3RUaW1lOw0KPiA+ID4gKw0KPiA+ID4gKyAgU3RhdHVzID0gZ0JT LT5Mb2NhdGVIYW5kbGVCdWZmZXIgKEJ5UHJvdG9jb2wsDQo+ID4gJmdFZmlCbG9ja0lvUHJvdG9j b2xHdWlkLA0KPiA+ID4gTlVMTCwgJkhhbmRsZUNvdW50LCAmSGFuZGxlUG9pbnRlcik7DQo+ID4g PiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gPiArICAgIHJldHVybiBTdGF0dXM7 DQo+ID4gPiArICB9DQo+ID4gPiArDQo+ID4gPiArICBEZXZDb3VudCA9IDA7DQo+ID4gPiArICBG aXJzdFRpbWUgPSBUUlVFOw0KPiA+ID4gKw0KPiA+ID4gKyAgZm9yIChJbmRleCA9IDA7IEluZGV4 IDwgSGFuZGxlQ291bnQ7IEluZGV4KyspIHsNCj4gPiA+ICsgICAgRUZJX0RFVklDRV9QQVRIICAg ICAgICpEZXZpY2VQYXRoOw0KPiA+ID4gKyAgICBDT05TVCBDSEFSMTYgICAgICAgICAgKk1hcFBh dGg7DQo+ID4gPiArICAgIENIQVIxNiAgICAgICAgICAgICAgICAqTWF0Y2g7DQo+ID4gPiArICAg IEVGSV9CTE9DS19JTyAgICAgICAgICAqQmxrSW87DQo+ID4gPiArICAgIEVGSV9ESVNLX0lPICAg ICAgICAgICAqRGlza0lvOw0KPiA+ID4gKyAgICBDSEFSMTYgICAgICAgICAgICAgICAgKkJ1ZmZl ckZvclNpemU7DQo+ID4gPiArDQo+ID4gPiArICAgIFN0YXR1cyA9IGdCUy0+SGFuZGxlUHJvdG9j b2wgKEhhbmRsZVBvaW50ZXJbSW5kZXhdLA0KPiA+ID4gJmdFZmlCbG9ja0lvUHJvdG9jb2xHdWlk LCAoVk9JRCAqKikmQmxrSW8pOw0KPiA+ID4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7 DQo+ID4gPiArICAgICAgY29udGludWU7DQo+ID4gPiArICAgIH0NCj4gPiA+ICsNCj4gPiA+ICsg ICAgRGV2aWNlUGF0aCA9IERldmljZVBhdGhGcm9tSGFuZGxlIChIYW5kbGVQb2ludGVyW0luZGV4 XSk7DQo+ID4gPiArICAgIGlmICghSXNQYXJ0aXRpb25hYmxlRGV2aWNlUGF0aCAoRGV2aWNlUGF0 aCkpIHsNCj4gPiA+ICsgICAgICBjb250aW51ZTsNCj4gPiA+ICsgICAgfQ0KPiA+ID4gKyAgICBN YXBQYXRoID0gZ0VmaVNoZWxsUHJvdG9jb2wtPkdldE1hcEZyb21EZXZpY2VQYXRoICgmRGV2aWNl UGF0aCk7DQo+ID4gPiArICAgIGlmIChNYXBQYXRoID09IE5VTEwpIHsNCj4gPiA+ICsgICAgICBj b250aW51ZTsNCj4gPiA+ICsgICAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgICBTdGF0dXMgPSBnQlMt PkhhbmRsZVByb3RvY29sIChIYW5kbGVQb2ludGVyW0luZGV4XSwNCj4gPiA+ICZnRWZpRGlza0lv UHJvdG9jb2xHdWlkLCAoVk9JRCAqKikmRGlza0lvKTsNCj4gPiA+ICsgICAgaWYgKEVGSV9FUlJP UiAoU3RhdHVzKSkgew0KPiA+ID4gKyAgICAgIGNvbnRpbnVlOw0KPiA+ID4gKyAgICB9DQo+ID4g PiArDQo+ID4gPiArICAgIE1hdGNoID0gU3RyU3RyIChNYXBQYXRoLCBMIjtCTEsiKTsNCj4gPiA+ ICsgICAgaWYgKE1hdGNoKSB7DQo+ID4gPiArICAgICAgTWFwUGF0aCA9IE1hdGNoOw0KPiA+ID4g KyAgICAgIE1hcFBhdGgrKzsNCj4gPiA+ICsgICAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgICBpZiAo Rmlyc3RUaW1lKSB7DQo+ID4gPiArICAgICAgQnVmZmVyRm9yU2l6ZSA9IEFsbG9jYXRlWmVyb1Bv b2wgKE1BWF9TSVpFX0JVRl9TSVpFICogc2l6ZW9mDQo+ID4gPiAoQ0hBUjE2KSk7DQo+ID4gPiAr ICAgICAgQVNTRVJUIChCdWZmZXJGb3JTaXplKTsNCj4gPiA+ICsgICAgICBQcmludCAoTCIgRGV2 aWNlXHQgICAgIFNpemUgIENvbW1lbnRzXG4iKTsNCj4gPiA+ICsgICAgICBQcmludCAoTCIgLS0t LS0tICAgLS0tLS0tLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tDQo+ID4gPiBcbiIpOw0KPiA+ID4gKyAgICAgIEZpcnN0VGltZSA9 IEZBTFNFOw0KPiA+ID4gKyAgICB9DQo+ID4gPiArICAgIEdwdENsZWFudXBHbG9iYWxzICgpOw0K PiA+ID4gKyAgICBGb3JtYXRTaXplIChNdWx0VTY0eDMyIChCbGtJby0+TWVkaWEtPkxhc3RCbG9j ayArIDEsIEJsa0lvLT5NZWRpYS0NCj4gPiA+ID5CbG9ja1NpemUpLCBCdWZmZXJGb3JTaXplKTsN Cj4gPiA+ICsgICAgU2hlbGxQcmludEhpaUV4ICgtMSwgLTEsDQo+ID4gPiArICAgICAgICAgICAg ICAgICAgICAgTlVMTCwgU1RSSU5HX1RPS0VOIChTVFJfR1BUX0xJU1RfREVWUyksDQo+ID4gPiAr ICAgICAgICAgICAgICAgICAgICAgZ1NoZWxsR3B0SGlpSGFuZGxlLA0KPiA+ID4gKyAgICAgICAg ICAgICAgICAgICAgIE1hcFBhdGgsDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgQnVmZmVy Rm9yU2l6ZSk7DQo+ID4gPiArICAgIGlmIChCbGtJby0+TWVkaWEtPlJlYWRPbmx5KSB7DQo+ID4g PiArICAgICAgUHJpbnQgKEwiUmVhZC1Pbmx5ISAiKTsNCj4gPiA+ICsgICAgfQ0KPiA+ID4gKyAg ICBpZiAoIUJsa0lvLT5NZWRpYS0+TWVkaWFQcmVzZW50KSB7DQo+ID4gPiArICAgICAgUHJpbnQg KEwiTm8gTWVkaWEhICIpOw0KPiA+ID4gKyAgICB9DQo+ID4gPiArICAgIGlmICghRUZJX0VSUk9S IChQYXJ0aXRpb25HZXRHcHRUYWJsZXMgKERpc2tJbywgQmxrSW8pKSkgew0KPiA+ID4gKyAgICAg IFByaW50IChMIlZhbGlkIEdQVC4gIik7DQo+ID4gPiArICAgIH0NCj4gPiA+ICsgICAgaWYgKEJs a0lvLT5NZWRpYS0+UmVtb3ZhYmxlTWVkaWEpIHsNCj4gPiA+ICsgICAgICBQcmludCAoTCJSZW1v dmFibGUgZGV2aWNlLiIpOw0KPiA+ID4gKyAgICB9DQo+ID4gPiArICAgIFByaW50IChMIlxuIik7 DQo+ID4gPiArICAgIERldkNvdW50Kys7DQo+ID4gPiArICB9DQo+ID4gPiArICBQcmludCAoTCJc clxuIik7DQo+ID4gPiArICBpZiAoRGV2Q291bnQpIHsNCj4gPiA+ICsgICAgUHJpbnQgKEwiJWQg cG90ZW50aWFsbHkgcGFydGl0aW9uYWJsZSBkZXZpY2UocykgZm91bmRcbiIsIERldkNvdW50KTsN Cj4gPiA+ICsgIH0gZWxzZSB7DQo+ID4gPiArICAgIFByaW50IChMIk5vIHBvdGVudGlhbGx5IHBh cnRpdGlvbmFibGUgZGV2aWNlKHMpIGZvdW5kXG4iKTsNCj4gPiA+ICsgIH0NCj4gPiA+ICsNCj4g PiA+ICsgIEdwdENsZWFudXBHbG9iYWxzICgpOw0KPiA+ID4gKyAgcmV0dXJuIEVGSV9TVUNDRVNT Ow0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICtTSEVMTF9TVEFUVVMNCj4gPiA+ICtFRklBUEkN Cj4gPiA+ICtTaGVsbENvbW1hbmRSdW5HcHQgKA0KPiA+ID4gKyAgSU4gRUZJX0hBTkRMRSAgICAg ICAgSW1hZ2VIYW5kbGUsDQo+ID4gPiArICBJTiBFRklfU1lTVEVNX1RBQkxFICAqU3lzdGVtVGFi bGUNCj4gPiA+ICsgICkNCj4gPiA+ICt7DQo+ID4gPiArICBFRklfU1RBVFVTICAgICAgICAgICAg ICAgICAgU3RhdHVzOw0KPiA+ID4gKyAgTElTVF9FTlRSWSAgICAgICAgICAgICAgICAqQ2hlY2tQ YWNrYWdlOw0KPiA+ID4gKyAgRUZJX1BIWVNJQ0FMX0FERFJFU1MgICAgICBBZGRyZXNzID0gMCwg T2Zmc2V0ID0gMDsNCj4gPiA+ICsgIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgUGFydEF0dHJp YnV0ZXMgPSAwOw0KPiA+ID4gKyAgRUZJX0dVSUQgICAgICAgICAgICAgICAgICBQYXJ0VHlwZUd1 aWQgPSB7IDAgfTsNCj4gPiA+ICsgIFNIRUxMX0ZJTEVfSEFORExFICAgICAgICAgRmlsZUhhbmRs ZSA9IE5VTEw7DQo+ID4gPiArICBVSU5UNjQgICAgICAgICAgICAgICAgICAgIEJ5dGVDb3VudCwg RmlsZVNpemU7DQo+ID4gPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgIEk7DQo+ID4gPiAr ICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICpCdWZmZXIgPSBOVUxMLCAqRmlsZUJ1ZmZlciA9 IE5VTEw7DQo+ID4gPiArDQo+ID4gPiArICBDSEFSMTYgICAgICAgICAgICAgICAgICAgICogUHJv YmxlbVBhcmFtLCpGaWxlUGF0aDsNCj4gPiA+ICsgIENPTlNUIENIQVIxNiAgICAgICAgICAgICAg KkFkZHJlc3NTdHIgPSBOVUxMLCAqT2Zmc2V0U3RyID0gTlVMTDsNCj4gPiA+ICsgIENPTlNUIENI QVIxNiAgICAgICAgICAgICAgKlBhcnROYW1lID0gTlVMTCwgKk5ld1BhcnROYW1lID0gTlVMTCwN Cj4gPiA+ICpBdHRyU3RyID0gTlVMTCwNCj4gPiA+ICsgICAgKkd1aWRTdHIgPSBOVUxMLCAqVm9s dW1lTmFtZSA9IE5VTEw7DQo+ID4gPiArICBDT05TVCBDSEFSMTYgICAgICAgICAgICAgICpMZW5n dGhTdHIgPSBOVUxMLCAqRmlsZVN0ciA9IE5VTEw7DQo+ID4gPiArICBCT09MRUFOICAgICAgICAg ICAgICAgICAgIEFkZHJGbGFnID0gRkFMU0UsIExlbmd0aEZsYWcgPSBUUlVFLCBGaWxlRmxhZyA9 DQo+IEZBTFNFLA0KPiA+ID4gR3VpZEZsYWcgPSBGQUxTRSwgT2Zmc2V0RmxhZyA9IFRSVUU7DQo+ ID4gPiArICBCT09MRUFOICAgICAgICAgICAgICAgICAgIFBhcnROYW1lRmxhZyA9IFRSVUUsIE5l d1BhcnROYW1lRmxhZyA9IEZBTFNFLA0KPiA+ID4gQXR0ckZsYWcgPSBGQUxTRTsNCj4gPiA+ICsg IFVJTlROICAgICAgICAgICAgICAgICAgICAgRmxhZyA9IDAsIENoZWNrRmxhZyA9IDA7DQo+ID4g PiArICBDT05TVCBDSEFSMTYgICAgICAgICAgICAgICpCbG9ja05hbWU7DQo+ID4gPiArICBFRklf REVWSUNFX1BBVEhfUFJPVE9DT0wgICpEZXZQYXRoOw0KPiA+ID4gKyAgRUZJX0JMT0NLX0lPX1BS T1RPQ09MICAgICAqQmxvY2tJbzsNCj4gPiA+ICsgIEVGSV9ESVNLX0lPX1BST1RPQ09MICAgICAg KkRpc2tJbzsNCj4gPiA+ICsgIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgQmxvY2tJb0hhbmRs ZTsNCj4gPiA+ICsgIE1PRF9QQVJBTVMgICAgICAgICAgICAgICAgTW9kUGFyYW1zOw0KPiA+ID4g KyAgRUZJX1BBUlRJVElPTl9FTlRSWSAgICAgICAqRW50cnk7DQo+ID4gPiArICBVSU5UTiAgICAg ICAgICAgICAgICAgICAgIE51bUtub3duUGFydFR5cGVzRW50cmllczsNCj4gPiA+ICsgIEJPT0xF QU4gICAgICAgICAgICAgICAgICAgVGFibGVOb3RFbXB0eSwgTm9Qcm9tcHQgPSBGQUxTRSwgUXVp ZXQgPSBUUlVFOw0KPiA+ID4gKyAgVUlOVDY0ICAgICAgICAgICAgICAgICAgICBUaW1lU3RhbXBC LCBUaW1lU3RhbXBFLCBTcGVlZEtCLCBGcmVxOw0KPiA+ID4gKw0KPiA+ID4gKyAgLy8gUGFyc2Ug U2hlbGwgY29tbWFuZCBsaW5lDQo+ID4gPiArICBTdGF0dXMgPSBTaGVsbEluaXRpYWxpemUgKCk7 DQo+ID4gPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gPiArICAgIFByaW50RXJy IChMIkNhbm5vdCBpbml0aWFsaXplIFNoZWxsIiwgU3RhdHVzKTsNCj4gPiA+ICsgICAgQVNTRVJU X0VGSV9FUlJPUiAoU3RhdHVzKTsNCj4gPiA+ICsgICAgcmV0dXJuIFNIRUxMX0FCT1JURUQ7DQo+ ID4gPiArICB9DQo+ID4gPiArDQo+ID4gPiArICBTdGF0dXMgPSBTaGVsbENvbW1hbmRMaW5lUGFy c2UgKFBhcmFtTGlzdCwgJkNoZWNrUGFja2FnZSwNCj4gPiA+ICZQcm9ibGVtUGFyYW0sIFRSVUUp Ow0KPiA+ID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ID4gKyAgICBQcmludEVy ciAoTCJFcnJvciB3aGlsZSBwYXJzaW5nIGNvbW1hbmQgbGluZSIsIFN0YXR1cyk7DQo+ID4gPiAr ICAgIHJldHVybiBTSEVMTF9BQk9SVEVEOw0KPiA+ID4gKyAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAg VGltZVN0YW1wQiA9IDA7DQo+ID4gPiArICBUaW1lU3RhbXBFID0gMDsNCj4gPiA+ICsNCj4gPiA+ ICsgIE5vUHJvbXB0ID0gU2hlbGxDb21tYW5kTGluZUdldEZsYWcgKENoZWNrUGFja2FnZSwgTCIt eWVzIik7DQo+ID4gPiArICBRdWlldCA9ICFTaGVsbENvbW1hbmRMaW5lR2V0RmxhZyAoQ2hlY2tQ YWNrYWdlLCBMIi12ZXJib3NlIik7DQo+ID4gPiArDQo+ID4gPiArICBGcmVxID0gR2V0UGVyZm9y bWFuY2VDb3VudGVyUHJvcGVydGllcyAoTlVMTCwgTlVMTCk7DQo+ID4gPiArDQo+ID4gPiArICAv LyBDaGVjayBmbGFncyBwcm92aWRlZCBieSB1c2VyDQo+ID4gPiArICBGbGFnIHw9IChTaGVsbENv bW1hbmRMaW5lR2V0RmxhZyAoQ2hlY2tQYWNrYWdlLCBMImNsZWFyIikgPDwgMCk7DQo+ID4gPiAr ICBGbGFnIHw9IChTaGVsbENvbW1hbmRMaW5lR2V0RmxhZyAoQ2hlY2tQYWNrYWdlLCBMImNyZWF0 ZSIpIDw8IDEpOw0KPiA+ID4gKyAgRmxhZyB8PSAoU2hlbGxDb21tYW5kTGluZUdldEZsYWcgKENo ZWNrUGFja2FnZSwgTCJsaXN0IikgPDwgMik7DQo+ID4gPiArICBGbGFnIHw9IChTaGVsbENvbW1h bmRMaW5lR2V0RmxhZyAoQ2hlY2tQYWNrYWdlLCBMInN5bmMiKSA8PCAzKTsNCj4gPiA+ICsgIEZs YWcgfD0gKFNoZWxsQ29tbWFuZExpbmVHZXRGbGFnIChDaGVja1BhY2thZ2UsIEwidHlwZXNpbmZv IikgPDwgNCk7DQo+ID4gPiArICBGbGFnIHw9IChTaGVsbENvbW1hbmRMaW5lR2V0RmxhZyAoQ2hl Y2tQYWNrYWdlLCBMImRlbGV0ZSIpIDw8IDUpOw0KPiA+ID4gKyAgRmxhZyB8PSAoU2hlbGxDb21t YW5kTGluZUdldEZsYWcgKENoZWNrUGFja2FnZSwgTCJpbmZvIikgPDwgNik7DQo+ID4gPiArICBG bGFnIHw9IChTaGVsbENvbW1hbmRMaW5lR2V0RmxhZyAoQ2hlY2tQYWNrYWdlLCBMInJlYWQiKSA8 PCA3KTsNCj4gPiA+ICsgIEZsYWcgfD0gKFNoZWxsQ29tbWFuZExpbmVHZXRGbGFnIChDaGVja1Bh Y2thZ2UsIEwicmVhZGZpbGUiKSA8PCA4KTsNCj4gPiA+ICsgIEZsYWcgfD0gKFNoZWxsQ29tbWFu ZExpbmVHZXRGbGFnIChDaGVja1BhY2thZ2UsIEwicmVuYW1lIikgPDwgOSk7DQo+ID4gPiArICBG bGFnIHw9IChTaGVsbENvbW1hbmRMaW5lR2V0RmxhZyAoQ2hlY2tQYWNrYWdlLCBMInNldGF0dHIi KSA8PCAxMCk7DQo+ID4gPiArICBGbGFnIHw9IChTaGVsbENvbW1hbmRMaW5lR2V0RmxhZyAoQ2hl Y2tQYWNrYWdlLCBMInNldHR5cGUiKSA8PCAxMSk7DQo+ID4gPiArICBGbGFnIHw9IChTaGVsbENv bW1hbmRMaW5lR2V0RmxhZyAoQ2hlY2tQYWNrYWdlLCBMIndyaXRlIikgPDwgMTIpOw0KPiA+ID4g KyAgRmxhZyB8PSAoU2hlbGxDb21tYW5kTGluZUdldEZsYWcgKENoZWNrUGFja2FnZSwgTCJ3cml0 ZWZpbGUiKSA8PCAxMyk7DQo+ID4gPiArICBGbGFnIHw9IChTaGVsbENvbW1hbmRMaW5lR2V0Rmxh ZyAoQ2hlY2tQYWNrYWdlLCBMImZhdGZvcm1hdCIpIDw8IDE0KTsNCj4gPiA+ICsNCj4gPiA+ICsg IFBhcnRpdGlvbkdldEtub3duVHlwZSAoKFVJTlROKSgtMSksICZOdW1Lbm93blBhcnRUeXBlc0Vu dHJpZXMpOw0KPiA+ID4gKw0KPiA+ID4gKyAgaWYgKEZsYWcgJiBUWVBFU19JTkZPKSB7DQo+ID4g PiArICAgIFVJTlROIEluZGV4Ow0KPiA+ID4gKw0KPiA+ID4gKyAgICBQcmludCAoTCIgIE5vXHQl LTM2c1x0R1VJRFxyXG4iLCBMIlR5cGUgbmFtZSIpOw0KPiA+ID4gKyAgICBQcmludCAoTCIgLS0t LSAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgICAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tDQo+ID4gLS0NCj4gPiA+IFxuIik7DQo+ID4gPiArICAgIGZv ciAoSW5kZXggPSAwOyBJbmRleCA8IE51bUtub3duUGFydFR5cGVzRW50cmllczsgSW5kZXgrKykg ew0KPiA+ID4gKyAgICAgIEVGSV9LTk9XTl9QQVJUSVRJT05fVFlQRSAqUGFydFR5cGU7DQo+ID4g PiArDQo+ID4gPiArICAgICAgUGFydFR5cGUgPSBQYXJ0aXRpb25HZXRLbm93blR5cGUgKEluZGV4 LCBOVUxMKTsNCj4gPiA+ICsgICAgICBpZiAoUGFydFR5cGUgPT0gTlVMTCkgew0KPiA+ID4gKyAg ICAgICAgYnJlYWs7DQo+ID4gPiArICAgICAgfQ0KPiA+ID4gKyAgICAgIFByaW50IChMIiAlM2Rc dCUtMzZzXHQlZ1xuIiwgSW5kZXgsIFBhcnRUeXBlLT5UeXBlTmFtZSwNCj4gPiAmUGFydFR5cGUt DQo+ID4gPiA+VHlwZUd1aWQpOw0KPiA+ID4gKyAgICB9DQo+ID4gPiArICAgIGlmIChGbGFnID09 IFRZUEVTX0lORk8pIHsNCj4gPiA+ICsgICAgICByZXR1cm4gU0hFTExfU1VDQ0VTUzsNCj4gPiA+ ICsgICAgfQ0KPiA+ID4gKyAgfQ0KPiA+ID4gKyAgLy8gU3RhcnQgcGFyc2luZyB0aGUgY29tbWFu ZC4NCj4gPiA+ICsgIC8vIEdlbmVyYWxseSBjb21tYW5kIGlzOg0KPiA+ID4gKyAgLy8gYmxvY2tf bmFtZTpib290cGFydF9ubyBhZGRyIG9yIGZpbGVuYW1lIG9mZnNldA0KPiA+ID4gKw0KPiA+ID4g KyAgQmxvY2tOYW1lID0gU2hlbGxDb21tYW5kTGluZUdldFJhd1ZhbHVlIChDaGVja1BhY2thZ2Us IDEpOw0KPiA+ID4gKyAgaWYgKEJsb2NrTmFtZSA9PSBOVUxMKSB7DQo+ID4gPiArICAgIGlmIChG bGFnICYgTElTVCkgew0KPiA+ID4gKyAgICAgIFN0YXR1cyA9IEZpbmRBbmRQcmludFBhcnRpdGlv bmFibGVEZXZpY2VzICgpOw0KPiA+ID4gKyAgICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsN Cj4gPiA+ICsgICAgICAgIFByaW50RXJyIChMIkVycm9yIGdldHRpbmcgbGlzdCBvZiBwYXJ0aXRp b25hYmxlIGRldmljZXMiLCBTdGF0dXMpOw0KPiA+ID4gKyAgICAgICAgU3RhdHVzID0gU0hFTExf QUJPUlRFRDsNCj4gPiA+ICsgICAgICB9DQo+ID4gPiArICAgICAgcmV0dXJuIFN0YXR1czsNCj4g PiA+ICsgICAgfQ0KPiA+ID4gKyAgICBQcmludEVyciAoTCJNaXNzaW5nIGJsb2NrIGRldmljZSBu YW1lIiwgRUZJX0lOVkFMSURfUEFSQU1FVEVSKTsNCj4gPiA+ICsgICAgcmV0dXJuIFNIRUxMX0lO VkFMSURfUEFSQU1FVEVSOw0KPiA+ID4gKyAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgLy8gRmluZCBk ZXZpY2UgaGFuZGxlIGJ5IG1hcHBlZCBuYW1lDQo+ID4gPiArICBpZiAoZ0VmaVNoZWxsUHJvdG9j b2wtPkdldERldmljZVBhdGhGcm9tTWFwIChCbG9ja05hbWUpID09IE5VTEwpIHsNCj4gPiA+ICsg ICAgU2hlbGxQcmludEhpaUV4ICgtMSwgLTEsIE5VTEwsIFNUUklOR19UT0tFTiAoU1RSX0dFTl9Q QVJBTV9JTlYpLA0KPiA+ID4gZ1NoZWxsR3B0SGlpSGFuZGxlLCBnQXBwTmFtZSwgQmxvY2tOYW1l KTsNCj4gPiA+ICsgICAgU3RhdHVzID0gU0hFTExfSU5WQUxJRF9QQVJBTUVURVI7DQo+ID4gPiAr ICB9IGVsc2Ugew0KPiA+ID4gKyAgICBEZXZQYXRoID0gKEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NP TCAqKWdFZmlTaGVsbFByb3RvY29sLQ0KPiA+ID4gPkdldERldmljZVBhdGhGcm9tTWFwIChCbG9j a05hbWUpOw0KPiA+ID4gKyAgICBpZiAoZ0JTLT5Mb2NhdGVEZXZpY2VQYXRoICgmZ0VmaUJsb2Nr SW9Qcm90b2NvbEd1aWQsICZEZXZQYXRoLCBOVUxMKQ0KPiA+ID4gPT0gRUZJX05PVF9GT1VORCkg ew0KPiA+ID4gKyAgICAgIFNoZWxsUHJpbnRIaWlFeCAoLTEsIC0xLCBOVUxMLCBTVFJJTkdfVE9L RU4NCj4gPiA+IChTVFJfR0VOX01BUF9QUk9UT0NPTCksIGdTaGVsbEdwdEhpaUhhbmRsZSwgZ0Fw cE5hbWUsIEJsb2NrTmFtZSwNCj4gPiA+IEwiQmxvY2tJbyIpOw0KPiA+ID4gKyAgICAgIFN0YXR1 cyA9IFNIRUxMX0lOVkFMSURfUEFSQU1FVEVSOw0KPiA+ID4gKyAgICB9DQo+ID4gPiArICB9DQo+ ID4gPiArDQo+ID4gPiArICBpZiAoU3RhdHVzKSB7DQo+ID4gPiArICAgIHJldHVybiBTSEVMTF9J TlZBTElEX1BBUkFNRVRFUjsNCj4gPiA+ICsgIH0NCj4gPiA+ICsNCj4gPiA+ICsgIEJsb2NrSW9I YW5kbGUgPSAwOw0KPiA+ID4gKw0KPiA+ID4gKyAgU3RhdHVzID0gZ0JTLT5Mb2NhdGVEZXZpY2VQ YXRoICgmZ0VmaUJsb2NrSW9Qcm90b2NvbEd1aWQsDQo+ID4gPiAoRUZJX0RFVklDRV9QQVRIX1BS T1RPQ09MICoqKSZEZXZQYXRoLCAmQmxvY2tJb0hhbmRsZSk7DQo+ID4gPiArICBpZiAoRUZJX0VS Uk9SIChTdGF0dXMpKSB7DQo+ID4gPiArICAgIGdvdG8gQ2xlYW5VcDsNCj4gPiA+ICsgIH0NCj4g PiA+ICsNCj4gPiA+ICsgIFN0YXR1cyA9IGdCUy0+T3BlblByb3RvY29sIChCbG9ja0lvSGFuZGxl LCAmZ0VmaUJsb2NrSW9Qcm90b2NvbEd1aWQsDQo+ID4gPiAoVk9JRCAqKikmQmxvY2tJbywgZ0lt YWdlSGFuZGxlLCBOVUxMLA0KPiA+ID4gRUZJX09QRU5fUFJPVE9DT0xfR0VUX1BST1RPQ09MKTsN Cj4gPiA+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiA+ICsgICAgU2hlbGxQcmlu dEhpaUV4ICgtMSwgLTEsIE5VTEwsIFNUUklOR19UT0tFTg0KPiA+ID4gKFNUUl9HRU5fTUFQX1BS T1RPQ09MKSwgZ1NoZWxsR3B0SGlpSGFuZGxlLCBnQXBwTmFtZSwgQmxvY2tOYW1lLA0KPiA+ID4g TCJCbG9ja0lvIik7DQo+ID4gPiArICAgIGdvdG8gQ2xlYW5VcDsNCj4gPiA+ICsgIH0NCj4gPiA+ ICsNCj4gPiA+ICsgIFN0YXR1cyA9IGdCUy0+SGFuZGxlUHJvdG9jb2wgKA0KPiA+ID4gKyAgICBC bG9ja0lvSGFuZGxlLA0KPiA+ID4gKyAgICAmZ0VmaURpc2tJb1Byb3RvY29sR3VpZCwNCj4gPiA+ ICsgICAgKFZPSUQgKiopJkRpc2tJbw0KPiA+ID4gKyAgICApOw0KPiA+ID4gKyAgaWYgKEVGSV9F UlJPUiAoU3RhdHVzKSkgew0KPiA+ID4gKyAgICBTaGVsbFByaW50SGlpRXggKC0xLCAtMSwgTlVM TCwgU1RSSU5HX1RPS0VODQo+ID4gPiAoU1RSX0dFTl9NQVBfUFJPVE9DT0wpLCBnU2hlbGxHcHRI aWlIYW5kbGUsIGdBcHBOYW1lLCBCbG9ja05hbWUsDQo+ID4gPiBMIkRpc2tJbyIpOw0KPiA+ID4g KyAgICBnb3RvIENsZWFuVXA7DQo+ID4gPiArICB9DQo+ID4gPiArDQo+ID4gPiArICBDaGVja0Zs YWcgPSBGbGFnOw0KPiA+ID4gKyAgZm9yIChJID0gMDsgQ2hlY2tGbGFnOyBDaGVja0ZsYWcgPj49 IDEpIHsNCj4gPiA+ICsgICAgSSArPSBDaGVja0ZsYWcgJiAxOw0KPiA+ID4gKyAgICBpZiAoSSA+ IDEpIHsNCj4gPiA+ICsgICAgICBQcmludEVyciAoTCJUb28gbWFueSBmbGFncyIsIEVGSV9JTlZB TElEX1BBUkFNRVRFUik7DQo+ID4gPiArICAgICAgU3RhdHVzID0gU0hFTExfSU5WQUxJRF9QQVJB TUVURVI7DQo+ID4gPiArICAgICAgZ290byBDbGVhblVwOw0KPiA+ID4gKyAgICB9DQo+ID4gPiAr ICB9DQo+ID4gPiArDQo+ID4gPiArICBpZiAoRmxhZyAmIFNZTkMpIHsNCj4gPiA+ICsgICAgLy8g TGV0IHRoZSBQYXJ0aXRpb24gdGFibGUgZHJpdmVyIGtub3cgdGhhdA0KPiA+ID4gKyAgICAvLyB3 ZSB3YW50IHRvIHJlcmVhZCB0aGUgdGFibGVzDQo+ID4gPiArICAgIFN0YXR1cyA9IGdCUy0+UmVp bnN0YWxsUHJvdG9jb2xJbnRlcmZhY2UgKA0KPiA+ID4gKyAgICAgIEJsb2NrSW9IYW5kbGUsDQo+ ID4gPiArICAgICAgJmdFZmlCbG9ja0lvUHJvdG9jb2xHdWlkLA0KPiA+ID4gKyAgICAgIEJsb2Nr SW8sDQo+ID4gPiArICAgICAgQmxvY2tJbw0KPiA+ID4gKyAgICAgICk7DQo+ID4gPiArICAgIFN0 YXR1cyA9IFNIRUxMX1NVQ0NFU1M7DQo+ID4gPiArICAgIGdvdG8gQ2xlYW5VcDsNCj4gPiA+ICsg IH0NCj4gPiA+ICsNCj4gPiA+ICsgIGlmICghSXNQYXJ0aXRpb25hYmxlRGV2aWNlUGF0aCAoRGV2 aWNlUGF0aEZyb21IYW5kbGUgKEJsb2NrSW9IYW5kbGUpKSkNCj4gPiB7DQo+ID4gPiArICAgIFNo ZWxsUHJpbnRIaWlFeCAoLTEsIC0xLCBOVUxMLCBTVFJJTkdfVE9LRU4gKFNUUl9HRU5fUEFSQU1f SU5WKSwNCj4gPiA+IGdTaGVsbEdwdEhpaUhhbmRsZSwgZ0FwcE5hbWUsIEJsb2NrTmFtZSk7DQo+ ID4gPiArICAgIFByaW50IChMIiVzIGlzIG5vdCBhIHJhdyBibG9jayBkZXZpY2VcbiIsIEJsb2Nr TmFtZSk7DQo+ID4gPiArICAgIFN0YXR1cyA9IFNIRUxMX0lOVkFMSURfUEFSQU1FVEVSOw0KPiA+ ID4gKyAgICBnb3RvIENsZWFuVXA7DQo+ID4gPiArICB9DQo+ID4gPiArDQo+ID4gPiArICBpZiAo IUJsb2NrSW8tPk1lZGlhLT5NZWRpYVByZXNlbnQpIHsNCj4gPiA+ICsgICAgUHJpbnRFcnIgKEwi TWVkaWEgaXMgbm90IHByZXNlbnQhXG4iLCBFRklfTk9fTUVESUEpOw0KPiA+ID4gKyAgICBTdGF0 dXMgPSBFRklfTk9fTUVESUE7DQo+ID4gPiArICAgIGdvdG8gQ2xlYW5VcDsNCj4gPiA+ICsgIH0N Cj4gPiA+ICsNCj4gPiA+ICsgIC8vIFByZWxvYWQgR1BUIHRhYmxlcyB3aXRoIHZhbGlkYXRpb24N Cj4gPiA+ICsgIFN0YXR1cyA9IFBhcnRpdGlvbkdldEdwdFRhYmxlcyAoRGlza0lvLCBCbG9ja0lv KTsNCj4gPiA+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiA+ICsgICAgQk9PTEVB TiBDYW5Db250aW51ZTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgQ2FuQ29udGludWUgPSAoRmxhZyAm IENSRUFURSkgfHwgKEZsYWcgJiBDTEVBUikgfHwgKEZsYWcgJg0KPiA+ID4gRkFUX0ZPUk1BVCk7 DQo+ID4gPiArICAgIGlmIChTdGF0dXMgIT0gRUZJX05PVF9GT1VORCkgew0KPiA+ID4gKyAgICAg IFByaW50RXJyIChMIlVuZXhwZWN0ZWQgZXJyb3IgZ2V0dGluZyBHUFQgdGFibGVzIiwgU3RhdHVz KTsNCj4gPiA+ICsgICAgICBnb3RvIENsZWFuVXA7DQo+ID4gPiArICAgIH0gZWxzZSB7DQo+ID4g PiArICAgICAgaWYgKCFDYW5Db250aW51ZSkgew0KPiA+ID4gKyAgICAgICAgUHJpbnRFcnIgKEwi Tm8gR1BUIHRhYmxlIGZvdW5kLiBDcmVhdGUgZmlyc3QiLCBTdGF0dXMpOw0KPiA+ID4gKyAgICAg ICAgZ290byBDbGVhblVwOw0KPiA+ID4gKyAgICAgIH0NCj4gPiA+ICsgICAgfQ0KPiA+ID4gKyAg fQ0KPiA+ID4gKw0KPiA+ID4gKyAgLy8gRG8gd2UgaGF2ZSBhbnkgcGFydGl0aW9ucyBhbHJlYWR5 Pw0KPiA+ID4gKyAgVGFibGVOb3RFbXB0eSA9IChQYXJ0aXRpb25GaW5kUGFydGl0aW9uQnlDcml0 ZXJpYSAoTlVMTCwgMCwgMCwNCj4gPiBTUkNfQU5ZKSAhPQ0KPiA+ID4gTlVMTCk7DQo+ID4gPiAr DQo+ID4gPiArICBTdGF0dXMgPSBTSEVMTF9JTlZBTElEX1BBUkFNRVRFUjsNCj4gPiA+ICsNCj4g PiA+ICsgIGlmICgoRmxhZyA8IExJU1QpIHx8DQo+ID4gPiArICAgICAgKEZsYWcgJiBERUxFVEUp IHx8DQo+ID4gPiArICAgICAgKEZsYWcgPiBSRUFEX0ZJTEUpDQo+ID4gPiArICAgICApIHsNCj4g PiA+ICsgICAgaWYgKEJsb2NrSW8tPk1lZGlhLT5SZWFkT25seSkgew0KPiA+ID4gKyAgICAgIFN0 YXR1cyA9IEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gPiA+ICsgICAgICBQcmludEVyciAoTCJD YW5ub3Qgd3JpdGUgdG8gYSByZWFkLW9ubHkgZGV2aWNlIiwgU3RhdHVzKTsNCj4gPiA+ICsgICAg ICBnb3RvIENsZWFuVXA7DQo+ID4gPiArICAgIH0NCj4gPiA+ICsgIH0NCj4gPiA+ICsNCj4gPiA+ ICsgIGlmIChCbG9ja0lvLT5NZWRpYS0+UmVtb3ZhYmxlTWVkaWEpIHsNCj4gPiA+ICsgICAgUHJp bnQgKEwiJXMgaXMgYSByZW1vdmFibGUgZGV2aWNlLiBKdXN0IGEgbm90ZVxuIiwgQmxvY2tOYW1l KTsNCj4gPiA+ICsgIH0NCj4gPiA+ICsNCj4gPiA+ICsgIHN3aXRjaCAoRmxhZykgew0KPiA+ID4g KyAgICBjYXNlIElORk86DQo+ID4gPiArICAgICAgUGFydE5hbWUgPSBTaGVsbENvbW1hbmRMaW5l R2V0UmF3VmFsdWUgKENoZWNrUGFja2FnZSwgMik7DQo+ID4gPiArICAgICAgT2Zmc2V0RmxhZyA9 IEZBTFNFOw0KPiA+ID4gKyAgICAgIExlbmd0aEZsYWcgPSBGQUxTRTsNCj4gPiA+ICsgICAgICBi cmVhazsNCj4gPiA+ICsgICAgY2FzZSBMSVNUOg0KPiA+ID4gKyAgICB7DQo+ID4gPiArICAgICAg VUlOVE4gTnVtRW50cmllczsNCj4gPiA+ICsNCj4gPiA+ICsgICAgICBOdW1FbnRyaWVzID0gUGFy dGl0aW9uTGlzdEdwdEVudHJpZXMgKCk7DQo+ID4gPiArICAgICAgaWYgKE51bUVudHJpZXMgPT0g MCkgew0KPiA+ID4gKyAgICAgICAgUHJpbnQgKEwiZ3B0OiBHUFQgaXMgdmFsaWQgb24gJXMsIGJ1 dCBubyBwYXJ0aXRpb24ocykgZGVmaW5lZCB5ZXQuIFVzZQ0KPiA+ID4gY3JlYXRlXG4iLCBCbG9j a05hbWUpOw0KPiA+ID4gKyAgICAgIH0NCj4gPiA+ICsgICAgICBTdGF0dXMgPSBTSEVMTF9TVUND RVNTOw0KPiA+ID4gKyAgICAgIGdvdG8gQ2xlYW5VcDsNCj4gPiA+ICsgICAgICBicmVhazsNCj4g PiA+ICsgICAgfQ0KPiA+ID4gKyAgICBjYXNlIENMRUFSOg0KPiA+ID4gKyAgICAgIGlmIChUYWJs ZU5vdEVtcHR5KSB7DQo+ID4gPiArICAgICAgICAvLyBUZWxsIHRoZSB1c2VyIHdoYXQgaGUvc2hl IGlzIGRvaW5nLi4uDQo+ID4gPiArICAgICAgICBTaGVsbFByaW50SGlpRXggKC0xLCAtMSwNCj4g PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgU1RSSU5HX1RPS0VOIChTVFJfR1BU X05PVF9FTVBUWSksDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgIGdTaGVsbEdwdEhp aUhhbmRsZSwNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgQmxvY2tOYW1lDQo+ID4g PiArICAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4gPiA+ICsgICAgICB9DQo+ID4gPiArDQo+ ID4gPiArICAgICAgLy8gRXZlbiBpZiBHUFQgdGFibGVzIGRvIG5vdCBleGlzdCwgdGhlcmUgbWln aHQgYmUgc29tZXRoaW5nLg0KPiA+ID4gKyAgICAgIC8vIFdhcm4gdGhlIHVzZXIgYW5kIGRvdWJs ZSBzdXJlIGl0IGlzIHRoZSBpbnRlbnRpb24sDQo+ID4gPiArICAgICAgLy8gdG8gcHJldmVudCBh IHVzZXIgZnJvbSBicmlja2luZyBhIGRldmljZSAoSlRBRyB3b3VsZCBiZSBuZWVkZWQgdG8NCj4g PiA+IHJlY292ZXIpDQo+ID4gPiArICAgICAgLy8gYnkgb3ZlcndyaXRpbmcgYW4gQVRGIGJvb3Qg ZGV2aWNlLiBIb3dldmVyIHdpdGggTm9Qcm9tcHQgb24sIHRoZQ0KPiA+ID4gdXNlciBpcw0KPiA+ ID4gKyAgICAgIC8vIHJlc3BvbnNpYmxlIGZvciBvcGVyYXRpb24gYmVjYXVzZSB0aGVyZSBpcyBu byBjb25maXJtYXRpb24NCj4gPiAoYXNzdW1pbmcNCj4gPiA+IHllcyBvbiBhbGwgcXVlcmllcyku DQo+ID4gPiArICAgICAgaWYgKChOb1Byb21wdCkgfHwgKCFHcHRQcm9tcHRZZXNObyAoU1RSSU5H X1RPS0VODQo+ID4gPiAoU1RSX0dQVF9DTEVBUl9TVVJFKSkgJiYNCj4gPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgKCFHcHRQcm9tcHRZZXNObyAoU1RSSU5HX1RPS0VODQo+ID4gPiAoU1RS X0dQVF9BQlNPTFVURUxZX1NVUkUpKSkpDQo+ID4gPiArICAgICAgICAgKSB7DQo+ID4gPiArICAg ICAgICBQYXJ0aXRpb25HcHRDbGVhckFsbCAoKTsNCj4gPiA+ICsgICAgICB9DQo+ID4gPiArICAg ICAgU3RhdHVzID0gU0hFTExfU1VDQ0VTUzsNCj4gPiA+ICsgICAgICBnb3RvIENsZWFuVXA7DQo+ ID4gPiArICAgICAgYnJlYWs7DQo+ID4gPiArICAgIGNhc2UgQ1JFQVRFOg0KPiA+ID4gKyAgICAg IFBhcnROYW1lICAgID0gU2hlbGxDb21tYW5kTGluZUdldFJhd1ZhbHVlIChDaGVja1BhY2thZ2Us IDIpOw0KPiA+ID4gKyAgICAgIE9mZnNldFN0ciA9IFNoZWxsQ29tbWFuZExpbmVHZXRSYXdWYWx1 ZSAoQ2hlY2tQYWNrYWdlLCAzKTsNCj4gPiA+ICsgICAgICBMZW5ndGhTdHIgICA9IFNoZWxsQ29t bWFuZExpbmVHZXRSYXdWYWx1ZSAoQ2hlY2tQYWNrYWdlLCA0KTsNCj4gPiA+ICsgICAgICBBdHRy U3RyICAgICA9IFNoZWxsQ29tbWFuZExpbmVHZXRSYXdWYWx1ZSAoQ2hlY2tQYWNrYWdlLCA1KTsN Cj4gPiA+ICsgICAgICBHdWlkU3RyICAgICA9IFNoZWxsQ29tbWFuZExpbmVHZXRWYWx1ZSAgICAo Q2hlY2tQYWNrYWdlLCBMIi10eXBlIik7DQo+ID4gPiArICAgICAgR3VpZEZsYWcgPSBUUlVFOw0K PiA+ID4gKyAgICAgIGJyZWFrOw0KPiA+ID4gKyAgICBjYXNlIERFTEVURToNCj4gPiA+ICsgICAg ICBQYXJ0TmFtZSAgICA9IFNoZWxsQ29tbWFuZExpbmVHZXRSYXdWYWx1ZSAoQ2hlY2tQYWNrYWdl LCAyKTsNCj4gPiA+ICsgICAgICBMZW5ndGhGbGFnICA9IEZBTFNFOw0KPiA+ID4gKyAgICAgIE9m ZnNldEZsYWcgPSBGQUxTRTsNCj4gPiA+ICsgICAgICBicmVhazsNCj4gPiA+ICsgICAgY2FzZSBS RU5BTUU6DQo+ID4gPiArICAgICAgUGFydE5hbWUgICAgPSBTaGVsbENvbW1hbmRMaW5lR2V0UmF3 VmFsdWUgKENoZWNrUGFja2FnZSwgMik7DQo+ID4gPiArICAgICAgTmV3UGFydE5hbWUgPSBTaGVs bENvbW1hbmRMaW5lR2V0UmF3VmFsdWUgKENoZWNrUGFja2FnZSwgMyk7DQo+ID4gPiArICAgICAg TmV3UGFydE5hbWVGbGFnID0gVFJVRTsNCj4gPiA+ICsgICAgICBMZW5ndGhGbGFnID0gRkFMU0U7 DQo+ID4gPiArICAgICAgT2Zmc2V0RmxhZyA9IEZBTFNFOw0KPiA+ID4gKyAgICAgIGJyZWFrOw0K PiA+ID4gKyAgICBjYXNlIFNFVEFUVFI6DQo+ID4gPiArICAgICAgUGFydE5hbWUgICAgPSBTaGVs bENvbW1hbmRMaW5lR2V0UmF3VmFsdWUgKENoZWNrUGFja2FnZSwgMik7DQo+ID4gPiArICAgICAg QXR0clN0ciAgICAgPSBTaGVsbENvbW1hbmRMaW5lR2V0UmF3VmFsdWUgKENoZWNrUGFja2FnZSwg Myk7DQo+ID4gPiArICAgICAgQXR0ckZsYWcgICAgPSBUUlVFOw0KPiA+ID4gKyAgICAgIExlbmd0 aEZsYWcgID0gRkFMU0U7DQo+ID4gPiArICAgICAgT2Zmc2V0RmxhZyAgPSBGQUxTRTsNCj4gPiA+ ICsgICAgICBicmVhazsNCj4gPiA+ICsgICAgY2FzZSBTRVRUWVBFOg0KPiA+ID4gKyAgICAgIFBh cnROYW1lICAgID0gU2hlbGxDb21tYW5kTGluZUdldFJhd1ZhbHVlIChDaGVja1BhY2thZ2UsIDIp Ow0KPiA+ID4gKyAgICAgIEd1aWRTdHIgICAgID0gU2hlbGxDb21tYW5kTGluZUdldFZhbHVlICAg IChDaGVja1BhY2thZ2UsIEwiLXR5cGUiKTsNCj4gPiA+ICsgICAgICBHdWlkRmxhZyA9IFRSVUU7 DQo+ID4gPiArICAgICAgTGVuZ3RoRmxhZyA9IEZBTFNFOw0KPiA+ID4gKyAgICAgIE9mZnNldEZs YWcgPSBGQUxTRTsNCj4gPiA+ICsgICAgICBicmVhazsNCj4gPiA+ICsgICAgY2FzZSBGQVRfRk9S TUFUOg0KPiA+ID4gKyAgICAgIFBhcnROYW1lICAgICA9IFNoZWxsQ29tbWFuZExpbmVHZXRSYXdW YWx1ZSAoQ2hlY2tQYWNrYWdlLCAyKTsNCj4gPiA+ICsgICAgICBWb2x1bWVOYW1lICAgPSBTaGVs bENvbW1hbmRMaW5lR2V0UmF3VmFsdWUgKENoZWNrUGFja2FnZSwgMyk7DQo+ID4gPiArICAgICAg TGVuZ3RoRmxhZyAgID0gRkFMU0U7DQo+ID4gPiArICAgICAgT2Zmc2V0RmxhZyAgID0gRkFMU0U7 DQo+ID4gPiArICAgICAgUGFydE5hbWVGbGFnID0gKFBhcnROYW1lICE9IE5VTEwpOw0KPiA+ID4g KyAgICAgIGlmICghUGFydE5hbWVGbGFnICYmIFRhYmxlTm90RW1wdHkpIHsNCj4gPiA+ICsgICAg ICAgIC8vIFRlbGwgdGhlIHVzZXIgd2hhdCBoZS9zaGUgaXMgZG9pbmcuLi4NCj4gPiA+ICsgICAg ICAgIFNoZWxsUHJpbnRIaWlFeCAoLTEsIC0xLA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICBOVUxMLCBTVFJJTkdfVE9LRU4gKFNUUl9HUFRfTk9UX0VNUFRZKSwNCj4gPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgZ1NoZWxsR3B0SGlpSGFuZGxlLA0KPiA+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICBCbG9ja05hbWUNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICApOw0KPiA+ID4gKyAgICAgIH0NCj4gPiA+ICsgICAgICBicmVhazsNCj4gPiA+ICsgICAgICAv LyBGYWxsIHRocm91Z2gNCj4gPiA+ICsgICAgY2FzZSBSRUFEOg0KPiA+ID4gKyAgICBjYXNlIFdS SVRFOg0KPiA+ID4gKyAgICAgIEFkZHJlc3NTdHIgPSBTaGVsbENvbW1hbmRMaW5lR2V0UmF3VmFs dWUgKENoZWNrUGFja2FnZSwgMik7DQo+ID4gPiArICAgICAgUGFydE5hbWUgID0gU2hlbGxDb21t YW5kTGluZUdldFJhd1ZhbHVlIChDaGVja1BhY2thZ2UsIDMpOw0KPiA+ID4gKyAgICAgIE9mZnNl dFN0ciA9IFNoZWxsQ29tbWFuZExpbmVHZXRSYXdWYWx1ZSAoQ2hlY2tQYWNrYWdlLCA0KTsNCj4g PiA+ICsgICAgICBMZW5ndGhTdHIgPSBTaGVsbENvbW1hbmRMaW5lR2V0UmF3VmFsdWUgKENoZWNr UGFja2FnZSwgNSk7DQo+ID4gPiArICAgICAgQWRkckZsYWcgPSBUUlVFOw0KPiA+ID4gKyAgICAg IGJyZWFrOw0KPiA+ID4gKyAgICBjYXNlIFJFQURfRklMRToNCj4gPiA+ICsgICAgICBGaWxlU3Ry ID0gU2hlbGxDb21tYW5kTGluZUdldFJhd1ZhbHVlIChDaGVja1BhY2thZ2UsIDIpOw0KPiA+ID4g KyAgICAgIFBhcnROYW1lICA9IFNoZWxsQ29tbWFuZExpbmVHZXRSYXdWYWx1ZSAoQ2hlY2tQYWNr YWdlLCAzKTsNCj4gPiA+ICsgICAgICBPZmZzZXRTdHIgPSBTaGVsbENvbW1hbmRMaW5lR2V0UmF3 VmFsdWUgKENoZWNrUGFja2FnZSwgNCk7DQo+ID4gPiArICAgICAgTGVuZ3RoU3RyID0gU2hlbGxD b21tYW5kTGluZUdldFJhd1ZhbHVlIChDaGVja1BhY2thZ2UsIDUpOw0KPiA+ID4gKyAgICAgIEZp bGVGbGFnID0gVFJVRTsNCj4gPiA+ICsgICAgICBicmVhazsNCj4gPiA+ICsgICAgY2FzZSBXUklU RV9GSUxFOg0KPiA+ID4gKyAgICAgIEZpbGVTdHIgPSBTaGVsbENvbW1hbmRMaW5lR2V0UmF3VmFs dWUgKENoZWNrUGFja2FnZSwgMik7DQo+ID4gPiArICAgICAgUGFydE5hbWUgID0gU2hlbGxDb21t YW5kTGluZUdldFJhd1ZhbHVlIChDaGVja1BhY2thZ2UsIDMpOw0KPiA+ID4gKyAgICAgIE9mZnNl dFN0ciA9IFNoZWxsQ29tbWFuZExpbmVHZXRSYXdWYWx1ZSAoQ2hlY2tQYWNrYWdlLCA0KTsNCj4g PiA+ICsgICAgICBMZW5ndGhGbGFnID0gRkFMU0U7DQo+ID4gPiArICAgICAgRmlsZUZsYWcgPSBU UlVFOw0KPiA+ID4gKyAgICAgIGJyZWFrOw0KPiA+ID4gKyAgICBkZWZhdWx0Og0KPiA+ID4gKyAg ICAgIFByaW50IChMIiVzOiBVbnN1cHBvcnRlZCBjb21tYW5kLiBUcnkgXCJoZWxwICVzXCIiLCBn QXBwTmFtZSk7DQo+ID4gPiArICAgICAgU3RhdHVzID0gU0hFTExfSU5WQUxJRF9QQVJBTUVURVI7 DQo+ID4gPiArICAgICAgZ290byBDbGVhblVwOw0KPiA+ID4gKyAgfQ0KPiA+ID4gKw0KPiA+ID4g KyAgLy8gUmVhZCBhZGRyZXNzIHBhcmFtZXRlcg0KPiA+ID4gKyAgaWYgKChBZGRyZXNzU3RyID09 IE5VTEwpICYgQWRkckZsYWcpIHsNCj4gPiA+ICsgICAgUHJpbnRFcnIgKEwiTm8gYWRkcmVzcyBw YXJhbWV0ZXIiLCBFRklfSU5WQUxJRF9QQVJBTUVURVIpOw0KPiA+ID4gKyAgICBnb3RvIENsZWFu VXA7DQo+ID4gPiArICB9IGVsc2UgaWYgKEFkZHJGbGFnKSB7DQo+ID4gPiArICAgIEFkZHJlc3Mg PSBTaGVsbEhleFN0clRvVWludG4gKEFkZHJlc3NTdHIpOw0KPiA+ID4gKyAgICBpZiAoQWRkcmVz cyA9PSAoVUlOVE4pKC0xKSkgew0KPiA+ID4gKyAgICAgIFByaW50RXJyIChMIldyb25nIGFkZHJl c3MgcGFyYW1ldGVyIiwgRUZJX0lOVkFMSURfUEFSQU1FVEVSKTsNCj4gPiA+ICsgICAgICBnb3Rv IENsZWFuVXA7DQo+ID4gPiArICAgIH0NCj4gPiA+ICsgIH0NCj4gPiA+ICsNCj4gPiA+ICsgIGlm ICgoUGFydE5hbWUgPT0gTlVMTCkgJiBQYXJ0TmFtZUZsYWcpIHsNCj4gPiA+ICsgICAgUHJpbnRF cnIgKEwiTWlzc2luZyBwYXJ0aXRpb24gbmFtZSIsIEVGSV9JTlZBTElEX1BBUkFNRVRFUik7DQo+ ID4gPiArICAgIGdvdG8gQ2xlYW5VcDsNCj4gPiA+ICsgIH0gZWxzZSBpZiAoUGFydE5hbWVGbGFn KSB7DQo+ID4gPiArICAgIGlmIChTdHJTaXplIChQYXJ0TmFtZSkgPiBNQVhfUEFSVElUSU9OX05B TUVfTEVOR1RIKSB7DQo+ID4gPiArICAgICAgUHJpbnRFcnIgKEwiUGFydGl0aW9uIG5hbWUgaXMg dG9vIGxvbmcgKG1heCAzNiBjaGFycykiLA0KPiA+ID4gRUZJX0lOVkFMSURfUEFSQU1FVEVSKTsN Cj4gPiA+ICsgICAgICBnb3RvIENsZWFuVXA7DQo+ID4gPiArICAgIH0NCj4gPiA+ICsgIH0NCj4g PiA+ICsNCj4gPiA+ICsgIC8vIFJlYWQgb2Zmc2V0IHBhcmFtZXRlcg0KPiA+ID4gKyAgaWYgKChP ZmZzZXRTdHIgPT0gTlVMTCkgJiBPZmZzZXRGbGFnKSB7DQo+ID4gPiArICAgIFByaW50RXJyIChM Ik5vIG9mZnNldCBQYXJhbWV0ZXIiLCBFRklfSU5WQUxJRF9QQVJBTUVURVIpOw0KPiA+ID4gKyAg ICBnb3RvIENsZWFuVXA7DQo+ID4gPiArICB9IGVsc2UgaWYgKE9mZnNldEZsYWcpIHsNCj4gPiA+ ICsgICAgT2Zmc2V0ID0gU2hlbGxIZXhTdHJUb1VpbnRuIChPZmZzZXRTdHIpOw0KPiA+ID4gKyAg ICBpZiAoT2Zmc2V0IDwgMCkgew0KPiA+ID4gKyAgICAgIFByaW50IChMIiVzOiBXcm9uZyBvZmZz ZXQgcGFyYW1ldGVyOiAlc1xuIiwgZ0FwcE5hbWUsIE9mZnNldFN0cik7DQo+ID4gPiArICAgICAg Z290byBDbGVhblVwOw0KPiA+ID4gKyAgICB9DQo+ID4gPiArICB9DQo+ID4gPiArDQo+ID4gPiAr ICAvLyBSZWFkIGxlbmd0aCBwYXJhbWV0ZXINCj4gPiA+ICsgIGlmICgoTGVuZ3RoU3RyID09IE5V TEwpICYgTGVuZ3RoRmxhZykgew0KPiA+ID4gKyAgICBQcmludEVyciAoTCJObyBsZW5ndGggcGFy YW1ldGVyIiwgRUZJX0lOVkFMSURfUEFSQU1FVEVSKTsNCj4gPiA+ICsgICAgZ290byBDbGVhblVw Ow0KPiA+ID4gKyAgfSBlbHNlIGlmIChMZW5ndGhGbGFnKSB7DQo+ID4gPiArICAgIEJ5dGVDb3Vu dCA9IChVSU5UNjQpU2hlbGxTdHJUb1VpbnRuIChMZW5ndGhTdHIpOw0KPiA+ID4gKyAgICBpZiAo Qnl0ZUNvdW50IDwgMCkgew0KPiA+ID4gKyAgICAgIFByaW50IChMIiVzOiBXcm9uZyBsZW5ndGgg cGFyYW1ldGVyICVzIVxuIiwgZ0FwcE5hbWUsIExlbmd0aFN0cik7DQo+ID4gPiArICAgICAgZ290 byBDbGVhblVwOw0KPiA+ID4gKyAgICB9DQo+ID4gPiArICB9DQo+ID4gPiArDQo+ID4gPiArICBp ZiAoKE5ld1BhcnROYW1lID09IE5VTEwpICYgTmV3UGFydE5hbWVGbGFnKSB7DQo+ID4gPiArICAg IFByaW50RXJyIChMIk1pc3NpbmcgbmFtZSB0byBiZSBhc3NpZ25lZCB0byBwYXJ0aXRpb24iLA0K PiA+ID4gRUZJX0lOVkFMSURfUEFSQU1FVEVSKTsNCj4gPiA+ICsgICAgZ290byBDbGVhblVwOw0K PiA+ID4gKyAgfSBlbHNlIGlmIChOZXdQYXJ0TmFtZUZsYWcpIHsNCj4gPiA+ICsgICAgaWYgKFN0 clNpemUgKE5ld1BhcnROYW1lKSA+IE1BWF9QQVJUSVRJT05fTkFNRV9MRU5HVEgpIHsNCj4gPiA+ ICsgICAgICBQcmludEVyciAoTCJQYXJ0aXRpb24gbmFtZSBpcyB0b28gbG9uZyAobWF4IDM2IGNo YXJzKSIsDQo+ID4gPiBFRklfSU5WQUxJRF9QQVJBTUVURVIpOw0KPiA+ID4gKyAgICAgIGdvdG8g Q2xlYW5VcDsNCj4gPiA+ICsgICAgfQ0KPiA+ID4gKyAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgaWYg KChBdHRyU3RyID09IE5VTEwpICYgQXR0ckZsYWcpIHsNCj4gPiA+ICsgICAgUHJpbnRFcnIgKEwi TWlzc2luZyBhdHRyaWJ1dGVzIHBhcmFtZXRlciIsIEVGSV9JTlZBTElEX1BBUkFNRVRFUik7DQo+ ID4gPiArICAgIGdvdG8gQ2xlYW5VcDsNCj4gPiA+ICsgIH0gZWxzZSBpZiAoQXR0clN0cikgew0K PiA+ID4gKyAgICBQYXJ0QXR0cmlidXRlcyA9IChVSU5UNjQpU2hlbGxTdHJUb1VpbnRuIChBdHRy U3RyKTsNCj4gPiA+ICsgIH0NCj4gPiA+ICsNCj4gPiA+ICsgIGlmICgoR3VpZFN0ciA9PSBOVUxM KSAmIEd1aWRGbGFnKSB7DQo+ID4gPiArICAgIFByaW50RXJyIChMIk1pc3NpbmcgcGFydGl0aW9u IHR5cGUgR1VJRCBwYXJhbWV0ZXIiLA0KPiA+ID4gRUZJX0lOVkFMSURfUEFSQU1FVEVSKTsNCj4g PiA+ICsgICAgZ290byBDbGVhblVwOw0KPiA+ID4gKyAgfSBlbHNlIGlmIChHdWlkRmxhZykgew0K PiA+ID4gKyAgICBTdGF0dXMgPSBTSEVMTF9JTlZBTElEX1BBUkFNRVRFUjsNCj4gPiA+ICsgICAg aWYgKEludGVybmFsU2hlbGxJc0hleE9yRGVjaW1hbE51bWJlciAoR3VpZFN0ciwgRkFMU0UsIFRS VUUsIEZBTFNFKSkgew0KPiA+ID4gKyAgICAgIFVJTlROIE9yZGluYWw7DQo+ID4gPiArDQo+ID4g PiArICAgICAgT3JkaW5hbCA9IFNoZWxsU3RyVG9VaW50biAoR3VpZFN0cik7DQo+ID4gPiArICAg ICAgaWYgKE9yZGluYWwgPCBOdW1Lbm93blBhcnRUeXBlc0VudHJpZXMpIHsNCj4gPiA+ICsgICAg ICAgIFBhcnRUeXBlR3VpZCA9IFBhcnRpdGlvbkdldEtub3duVHlwZSAoT3JkaW5hbCwgTlVMTCkt PlR5cGVHdWlkOw0KPiA+ID4gKyAgICAgICAgU3RhdHVzID0gU0hFTExfU1VDQ0VTUzsNCj4gPiA+ ICsgICAgICB9IGVsc2Ugew0KPiA+ID4gKyAgICAgICAgU2hlbGxQcmludEhpaUV4ICgtMSwgLTEs IE5VTEwsIFNUUklOR19UT0tFTiAoU1RSX0dFTl9QQVJBTV9JTlYpLA0KPiA+ID4gZ1NoZWxsR3B0 SGlpSGFuZGxlLCBnQXBwTmFtZSwgR3VpZFN0cik7DQo+ID4gPiArICAgICAgICBnb3RvIENsZWFu VXA7DQo+ID4gPiArICAgICAgfQ0KPiA+ID4gKyAgICB9IGVsc2Ugew0KPiA+ID4gKyAgICAgIFN0 YXR1cyA9IENvbnZlcnRTdHJpbmdUb0d1aWQgKEd1aWRTdHIsICZQYXJ0VHlwZUd1aWQpOw0KPiA+ ID4gKyAgICAgIGlmICgoRUZJX0VSUk9SIChTdGF0dXMpKSB8fCAoSXNaZXJvR3VpZCAoJlBhcnRU eXBlR3VpZCkpKSB7DQo+ID4gPiArICAgICAgICBTaGVsbFByaW50SGlpRXggKC0xLCAtMSwgTlVM TCwgU1RSSU5HX1RPS0VOIChTVFJfR0VOX1BBUkFNX0lOViksDQo+ID4gPiBnU2hlbGxHcHRIaWlI YW5kbGUsIGdBcHBOYW1lLCBHdWlkU3RyKTsNCj4gPiA+ICsgICAgICAgIFN0YXR1cyA9IFNIRUxM X0lOVkFMSURfUEFSQU1FVEVSOw0KPiA+ID4gKyAgICAgICAgZ290byBDbGVhblVwOw0KPiA+ID4g KyAgICAgIH0NCj4gPiA+ICsgICAgfQ0KPiA+ID4gKyAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgaWYg KEZpbGVGbGFnKSB7DQo+ID4gPiArICAgIC8vIFJlYWQgRmlsZVBhdGggcGFyYW1ldGVyDQo+ID4g PiArICAgIGlmIChGaWxlU3RyID09IE5VTEwpIHsNCj4gPiA+ICsgICAgICBQcmludEVyciAoTCJO byBGaWxlUGF0aCBwYXJhbWV0ZXIiLCBFRklfSU5WQUxJRF9QQVJBTUVURVIpOw0KPiA+ID4gKyAg ICAgIGdvdG8gQ2xlYW5VcDsNCj4gPiA+ICsgICAgfSBlbHNlIHsNCj4gPiA+ICsgICAgICBGaWxl UGF0aCA9IChDSEFSMTYgKilGaWxlU3RyOw0KPiA+ID4gKyAgICAgIFN0YXR1cyA9IFNoZWxsSXNG aWxlIChGaWxlUGF0aCk7DQo+ID4gPiArICAgICAgLy8gV2hlbiByZWFkIGZpbGUgaW50byBmbGFz aCwgZmlsZSBkb2Vzbid0IGhhdmUgdG8gZXhpc3QNCj4gPiA+ICsgICAgICBpZiAoRUZJX0VSUk9S IChTdGF0dXMgJiYgIShGbGFnICYgUkVBRF9GSUxFKSkpIHsNCj4gPiA+ICsgICAgICAgIFByaW50 RXJyIChMIldyb25nIEZpbGVQYXRoIHBhcmFtZXRlciIsIFN0YXR1cyk7DQo+ID4gPiArICAgICAg ICBTdGF0dXMgPSBTSEVMTF9JTlZBTElEX1BBUkFNRVRFUjsNCj4gPiA+ICsgICAgICAgIGdvdG8g Q2xlYW5VcDsNCj4gPiA+ICsgICAgICB9DQo+ID4gPiArICAgIH0NCj4gPiA+ICsNCj4gPiA+ICsg ICAgU3RhdHVzID0gT3BlbkFuZFByZXBhcmVGaWxlIChGaWxlUGF0aCwgJkZpbGVIYW5kbGUsICgo RmxhZyAmDQo+ID4gPiBSRUFEX0ZJTEUpICE9IDApKTsNCj4gPiA+ICsgICAgaWYgKEVGSV9FUlJP UiAoU3RhdHVzKSkgew0KPiA+ID4gKyAgICAgIFByaW50IChMIkVycm9yICVyIHdoaWxlIHByZXBh cmluZyBmaWxlICVzIiwgU3RhdHVzLCBGaWxlUGF0aCk7DQo+ID4gPiArICAgICAgU3RhdHVzID0g U0hFTExfQUJPUlRFRDsNCj4gPiA+ICsgICAgICBnb3RvIENsZWFuVXA7DQo+ID4gPiArICAgIH0N Cj4gPiA+ICsNCj4gPiA+ICsgICAgLy8gR2V0IGZpbGUgc2l6ZSBpbiBvcmRlciB0byBjaGVjayBj b3JyZWN0bmVzcyBhdCB0aGUgZW5kIG9mIHRyYW5zZmVyDQo+ID4gPiArICAgIGlmIChGbGFnICYg KFdSSVRFX0ZJTEUpKSB7DQo+ID4gPiArICAgICAgU3RhdHVzID0gRmlsZUhhbmRsZUdldFNpemUg KEZpbGVIYW5kbGUsICZGaWxlU2l6ZSk7DQo+ID4gPiArICAgICAgaWYgKEVGSV9FUlJPUiAoU3Rh dHVzKSkgew0KPiA+ID4gKyAgICAgICAgUHJpbnRFcnIgKEwiQ2Fubm90IGdldCBmaWxlIHNpemUi LCBTdGF0dXMpOw0KPiA+ID4gKyAgICAgICAgU3RhdHVzID0gU0hFTExfQUJPUlRFRDsNCj4gPiA+ ICsgICAgICAgIGdvdG8gQ2xlYW5VcDsNCj4gPiA+ICsgICAgICB9DQo+ID4gPiArICAgICAgQnl0 ZUNvdW50ID0gKFVJTlQ2NClGaWxlU2l6ZTsNCj4gPiA+ICsgICAgfQ0KPiA+ID4gKw0KPiA+ID4g KyAgICBGaWxlQnVmZmVyID0gQWxsb2NhdGVaZXJvUG9vbCAoKFVJTlROKUJ5dGVDb3VudCk7DQo+ ID4gPiArICAgIGlmIChGaWxlQnVmZmVyID09IE5VTEwpIHsNCj4gPiA+ICsgICAgICBQcmludEVy ciAoTCJDYW5ub3QgYWxsb2NhdGUgbWVtb3J5IiwgRUZJX09VVF9PRl9SRVNPVVJDRVMpOw0KPiA+ ID4gKyAgICAgIFN0YXR1cyA9IFNIRUxMX09VVF9PRl9SRVNPVVJDRVM7DQo+ID4gPiArICAgICAg Z290byBFcnJvcl9DbG9zZV9GaWxlOw0KPiA+ID4gKyAgICB9DQo+ID4gPiArDQo+ID4gPiArICAg IC8vIFJlYWQgZmlsZSBjb250ZW50IGFuZCBzdG9yZSBpdCBpbiBGaWxlQnVmZmVyDQo+ID4gPiAr ICAgIGlmIChGbGFnICYgKFdSSVRFX0ZJTEUpKSB7DQo+ID4gPiArICAgICAgaWYgKCFRdWlldCkg ew0KPiA+ID4gKyAgICAgICAgUHJpbnQgKEwiUmVhZGluZyAlcy4uLlxyIiwgRmlsZVBhdGgpOw0K PiA+ID4gKyAgICAgIH0NCj4gPiA+ICsgICAgICBTdGF0dXMgPSBGaWxlSGFuZGxlUmVhZCAoRmls ZUhhbmRsZSwgJkJ5dGVDb3VudCwgRmlsZUJ1ZmZlcik7DQo+ID4gPiArICAgICAgaWYgKEVGSV9F UlJPUiAoU3RhdHVzKSkgew0KPiA+ID4gKyAgICAgICAgUHJpbnRFcnIgKEwiUmVhZCBmcm9tIGZp bGUgZXJyb3IiLCBTdGF0dXMpOw0KPiA+ID4gKyAgICAgICAgU3RhdHVzID0gU0hFTExfQUJPUlRF RDsNCj4gPiA+ICsgICAgICAgIGdvdG8gRXJyb3JfRnJlZV9CdWZmZXI7DQo+ID4gPiArICAgICAg fSBlbHNlIGlmIChCeXRlQ291bnQgIT0gKFVJTlROKUZpbGVTaXplKSB7DQo+ID4gPiArICAgICAg ICBQcmludEVyciAoTCJOb3Qgd2hvbGUgZmlsZSByZWFkLiBBYm9ydCIsIEVGSV9ERVZJQ0VfRVJS T1IpOw0KPiA+ID4gKyAgICAgICAgU3RhdHVzID0gU0hFTExfREVWSUNFX0VSUk9SOw0KPiA+ID4g KyAgICAgICAgZ290byBFcnJvcl9GcmVlX0J1ZmZlcjsNCj4gPiA+ICsgICAgICB9DQo+ID4gPiAr ICAgICAgaWYgKCFRdWlldCkgew0KPiA+ID4gKyAgICAgICAgUHJpbnQgKEwiV3JpdGluZyAlcyBp bnRvIGRldmljZSAlcywgcGFydGl0aW9uICVzLi4uXG4iLCBGaWxlUGF0aCwNCj4gPiA+IEJsb2Nr TmFtZSwgUGFydE5hbWUpOw0KPiA+ID4gKyAgICAgIH0NCj4gPiA+ICsgICAgfQ0KPiA+ID4gKyAg fQ0KPiA+ID4gKw0KPiA+ID4gKyAgQnVmZmVyID0gKFVJTlQ4ICopQWRkcmVzczsNCj4gPiA+ICsg IGlmIChGaWxlRmxhZykgew0KPiA+ID4gKyAgICBCdWZmZXIgPSBGaWxlQnVmZmVyOw0KPiA+ID4g KyAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgaWYgKEZsYWcgPiBUWVBFU19JTkZPKSB7DQo+ID4gPiAr ICAgIEVudHJ5ID0gUGFydGl0aW9uRmluZFBhcnRpdGlvbkJ5Q3JpdGVyaWEgKFBhcnROYW1lLCAw LCAwLCBTUkNfQllfTkFNRSk7DQo+ID4gPiArICAgIGlmICghRW50cnkgJiYgUGFydE5hbWUgJiYg KEludGVybmFsU2hlbGxJc0hleE9yRGVjaW1hbE51bWJlcg0KPiA+ID4gKFBhcnROYW1lLCBGQUxT RSwgVFJVRSwgRkFMU0UpKSkgew0KPiA+ID4gKyAgICAgIEVudHJ5ID0gUGFydGl0aW9uRmluZFBh cnRpdGlvbkJ5Q3JpdGVyaWEgKFBhcnROYW1lLCAwLCAwLCBTUkNfQllfTlVNKTsNCj4gPiA+ICsg ICAgfQ0KPiA+ID4gKyAgICBpZiAoKCFFbnRyeSkgJiYgKFBhcnROYW1lRmxhZykpIHsNCj4gPiA+ ICsgICAgICBTaGVsbFByaW50SGlpRXggKC0xLCAtMSwgTlVMTCwgU1RSSU5HX1RPS0VOIChTVFJf R0VOX1BBUkFNX0lOViksDQo+ID4gPiBnU2hlbGxHcHRIaWlIYW5kbGUsIGdBcHBOYW1lLCBQYXJ0 TmFtZSk7DQo+ID4gPiArICAgICAgUHJpbnQgKEwiQ291bGQgbm90IGZpbmQgcGFydGl0aW9uICVz IChjYXNlLXNlbnNpdGl2ZSkuIE1ha2Ugc3VyZSB0aGUNCj4gPiBuYW1lDQo+ID4gPiBpcyBzcGVs bGVkIHByb3Blcmx5XG4iLCBQYXJ0TmFtZSk7DQo+ID4gPiArICAgICAgU3RhdHVzID0gU0hFTExf Tk9UX0ZPVU5EOw0KPiA+ID4gKyAgICAgIGdvdG8gQ2xlYW5VcDsNCj4gPiA+ICsgICAgfQ0KPiA+ ID4gKyAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgc3dpdGNoIChGbGFnKSB7DQo+ID4gPiArICAgIGNh c2UgQ1JFQVRFOg0KPiA+ID4gKyAgICAgIFBhcnRpdGlvbkdwdENyZWF0ZVBhcnRpdGlvbiAoDQo+ ID4gPiArICAgICAgICBQYXJ0TmFtZSwNCj4gPiA+ICsgICAgICAgIE9mZnNldCwgIC8vIExiYS4g SWYgMCwgdGhlIG5leHQgYXZhaWxhYmxlIGlzIGFzc3VtZWQNCj4gPiA+ICsgICAgICAgIEJ5dGVD b3VudCwgLy8gaW4gTWVnYUJ5dGVzLiBJZiAwIHRoZSB3aG9sZSByZW1haW5pbmcgc3BhY2UgaXMN Cj4gPiBhc3N1bWVkDQo+ID4gPiArICAgICAgICBQYXJ0QXR0cmlidXRlcywNCj4gPiA+ICsgICAg ICAgIFBhcnRUeXBlR3VpZCk7DQo+ID4gPiArICAgICAgYnJlYWs7DQo+ID4gPiArICAgIGNhc2Ug REVMRVRFOg0KPiA+ID4gKyAgICAgIE1vZFBhcmFtcy5QYXJ0TmFtZSA9IFBhcnROYW1lOw0KPiA+ ID4gKyAgICAgIFNoZWxsUHJpbnRIaWlFeCAoLTEsIC0xLA0KPiA+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgTlVMTCwgU1RSSU5HX1RPS0VOIChTVFJfR1BUX0RFTEVURV9XQVJOSU5HKSwNCj4g PiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGdTaGVsbEdwdEhpaUhhbmRsZSwNCj4gPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgIEVudHJ5LT5QYXJ0aXRpb25OYW1lDQo+ID4gPiArICAgICAg ICAgICAgICAgICAgICAgICk7DQo+ID4gPiArICAgICAgaWYgKChOb1Byb21wdCkgfHwgKCFHcHRQ cm9tcHRZZXNObyAoU1RSSU5HX1RPS0VODQo+ID4gPiAoU1RSX0dQVF9BQlNPTFVURUxZX1NVUkUp KSkpIHsNCj4gPiA+ICsgICAgICAgIFN0YXR1cyA9IFBhcnRpdGlvbkdwdE1vZGlmeVBhcnRpdGlv biAoDQo+ID4gPiArICAgICAgICAgIEVudHJ5LCAmTW9kUGFyYW1zLCBNT0RfREVMRVRFKTsNCj4g PiA+ICsgICAgICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiA+ICsgICAgICAgICAg UHJpbnRFcnIgKEwiRXJyb3IgZGVsZXRpbmcgdGhlIHBhcnRpdGlvbiIsIFN0YXR1cyk7DQo+ID4g PiArICAgICAgICAgIFN0YXR1cyA9IFNIRUxMX0FCT1JURUQ7DQo+ID4gPiArICAgICAgICAgIGdv dG8gQ2xlYW5VcDsNCj4gPiA+ICsgICAgICAgIH0NCj4gPiA+ICsgICAgICAgIFN0YXR1cyA9IFNI RUxMX1NVQ0NFU1M7DQo+ID4gPiArICAgICAgfSBlbHNlIHsNCj4gPiA+ICsgICAgICAgIFN0YXR1 cyA9IFNIRUxMX0FCT1JURUQ7DQo+ID4gPiArICAgICAgfQ0KPiA+ID4gKyAgICAgIGJyZWFrOw0K PiA+ID4gKyAgICBjYXNlIEZBVF9GT1JNQVQ6DQo+ID4gPiArICAgIHsNCj4gPiA+ICsgICAgICBF RklfTEJBIFN0YXJ0aW5nTEJBLCBFbmRpbmdMQkE7DQo+ID4gPiArICAgICAgQ0hBUjggICAgICAg ICAgICAgICAgTGFiZWxOYW1lWzEyXTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgICBpZiAoVm9sdW1l TmFtZSkgew0KPiA+ID4gKyAgICAgICAgaWYgKFN0ckxlbiAoVm9sdW1lTmFtZSkgPiAxMSkgew0K PiA+ID4gKyAgICAgICAgICBTdGF0dXMgPSBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ID4gPiAr ICAgICAgICAgIFByaW50RXJyIChMIlRoZSB2b2x1bWUgbGFiZWwgaXMgdG9vIGxvbmciLCBTdGF0 dXMpOw0KPiA+ID4gKyAgICAgICAgICBTdGF0dXMgPSBTSEVMTF9JTlZBTElEX1BBUkFNRVRFUjsN Cj4gPiA+ICsgICAgICAgICAgZ290byBDbGVhblVwOw0KPiA+ID4gKyAgICAgICAgfQ0KPiA+ID4g KyAgICAgICAgVW5pY29kZVN0clRvQXNjaWlTdHIgKFZvbHVtZU5hbWUsIChDSEFSOCAqKUxhYmVs TmFtZSk7DQo+ID4gPiArICAgICAgfQ0KPiA+ID4gKyAgICAgIFNoZWxsUHJpbnRIaWlFeCAoLTEs IC0xLA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgU1RSSU5HX1RPS0VOIChT VFJfR1BUX0ZPUk1BVF9XQVJOSU5HKSwNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGdT aGVsbEdwdEhpaUhhbmRsZSwNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIEVudHJ5ID8g RW50cnktPlBhcnRpdGlvbk5hbWUgOiBCbG9ja05hbWUNCj4gPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgKTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgICBpZiAoKE5vUHJvbXB0KSB8fCAoIUdwdFBy b21wdFllc05vIChTVFJJTkdfVE9LRU4NCj4gPiA+IChTVFJfR1BUX0ZPUk1BVF9TVVJFKSkgJiYN Cj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgKCFHcHRQcm9tcHRZZXNObyAoU1RSSU5H X1RPS0VODQo+ID4gPiAoU1RSX0dQVF9BQlNPTFVURUxZX1NVUkUpKSkpDQo+ID4gPiArICAgICAg ICAgKSB7DQo+ID4gPiArICAgICAgICBTdGFydGluZ0xCQSA9IDA7DQo+ID4gPiArICAgICAgICBF bmRpbmdMQkEgPSBCbG9ja0lvLT5NZWRpYS0+TGFzdEJsb2NrOw0KPiA+ID4gKyAgICAgICAgaWYg KEVudHJ5KSB7DQo+ID4gPiArICAgICAgICAgIFN0YXJ0aW5nTEJBID0gRW50cnktPlN0YXJ0aW5n TEJBOw0KPiA+ID4gKyAgICAgICAgICBFbmRpbmdMQkEgPSBFbnRyeS0+RW5kaW5nTEJBOw0KPiA+ ID4gKyAgICAgICAgfQ0KPiA+ID4gKyAgICAgICAgaWYgKCFRdWlldCkgew0KPiA+ID4gKyAgICAg ICAgICBQcmludCAoTCJGb3JtYXR0aW5nICVzIHRvIEZBVDMyLi4uXHIiLCBQYXJ0TmFtZUZsYWcg PyBFbnRyeS0NCj4gPiA+ID5QYXJ0aXRpb25OYW1lIDogQmxvY2tOYW1lKTsNCj4gPiA+ICsgICAg ICAgIH0NCj4gPiA+ICsgICAgICAgIFN0YXR1cyA9IEZhdEZvcm1hdCAoU3RhcnRpbmdMQkEsIEVu ZGluZ0xCQSwgQmxvY2tJbywgRGlza0lvLA0KPiA+ID4gVm9sdW1lTmFtZSA/IExhYmVsTmFtZSA6 IE5VTEwsIFRSVUUpOw0KPiA+ID4gKyAgICAgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0K PiA+ID4gKyAgICAgICAgICBQcmludEVyciAoTCJFcnJvciBmb3JtYXR0aW5nIHRoZSBwYXJ0aXRp b24gdG8gRkFUICAgICAgICAgICAgICIsIFN0YXR1cyk7DQo+ID4gPiArICAgICAgICAgIFN0YXR1 cyA9IFNIRUxMX0FCT1JURUQ7DQo+ID4gPiArICAgICAgICAgIGdvdG8gQ2xlYW5VcDsNCj4gPiA+ ICsgICAgICAgIH0gZWxzZSBpZiAoIVF1aWV0KSB7DQo+ID4gPiArICAgICAgICAgIFByaW50IChM IiVzIHN1Y2Nlc3NmdWxseSBmb3JtYXR0ZWQgdG8gRkFULiBGb3JtYXR0ZWQgc2l6ZSAlbGx1DQo+ ID4gTWlCXG4iLA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgUGFydE5hbWVGbGFnID8gRW50cnkt PlBhcnRpdGlvbk5hbWUgOiBCbG9ja05hbWUsDQo+ID4gPiArICAgICAgICAgICAgICAgICBNdWx0 VTY0eDMyIChFbmRpbmdMQkEgLSBTdGFydGluZ0xCQSArIDEsIEJsb2NrSW8tPk1lZGlhLQ0KPiA+ ID4gPkJsb2NrU2l6ZSkgPj4gMjANCj4gPiA+ICsgICAgICAgICAgICAgICAgKTsNCj4gPiA+ICsg ICAgICAgIH0NCj4gPiA+ICsgICAgICB9IGVsc2Ugew0KPiA+ID4gKyAgICAgICAgU3RhdHVzID0g U0hFTExfQUJPUlRFRDsNCj4gPiA+ICsgICAgICB9DQo+ID4gPiArICAgIH0NCj4gPiA+ICsgICAg ICBicmVhazsNCj4gPiA+ICsgICAgY2FzZSBSRU5BTUU6DQo+ID4gPiArICAgICAgTW9kUGFyYW1z LlBhcnROYW1lID0gUGFydE5hbWU7DQo+ID4gPiArICAgICAgTW9kUGFyYW1zLk5ld05hbWUgID0g TmV3UGFydE5hbWU7DQo+ID4gPiArICAgICAgU3RhdHVzID0gUGFydGl0aW9uR3B0TW9kaWZ5UGFy dGl0aW9uICgNCj4gPiA+ICsgICAgICAgIEVudHJ5LCAmTW9kUGFyYW1zLCBNT0RfUkVOQU1FKTsN Cj4gPiA+ICsgICAgICBicmVhazsNCj4gPiA+ICsgICAgY2FzZSBTRVRBVFRSOg0KPiA+ID4gKyAg ICAgIE1vZFBhcmFtcy5BdHRyaWJ1dGVzID0gUGFydEF0dHJpYnV0ZXM7DQo+ID4gPiArICAgICAg U3RhdHVzID0gUGFydGl0aW9uR3B0TW9kaWZ5UGFydGl0aW9uICgNCj4gPiA+ICsgICAgICAgIEVu dHJ5LCAmTW9kUGFyYW1zLCBNT0RfQVRUUik7DQo+ID4gPiArICAgICAgYnJlYWs7DQo+ID4gPiAr ICAgIGNhc2UgU0VUVFlQRToNCj4gPiA+ICsgICAgICBNb2RQYXJhbXMuUGFydFR5cGVHdWlkID0g UGFydFR5cGVHdWlkOw0KPiA+ID4gKyAgICAgIFN0YXR1cyA9IFBhcnRpdGlvbkdwdE1vZGlmeVBh cnRpdGlvbiAoDQo+ID4gPiArICAgICAgICBFbnRyeSwgJk1vZFBhcmFtcywgTU9EX1RZUEUpOw0K PiA+ID4gKyAgICAgIGJyZWFrOw0KPiA+ID4gKyAgICBjYXNlIElORk86DQo+ID4gPiArICAgICAg UGFydGl0aW9uUHJpbnRHcHRQYXJ0SW5mbyAoRW50cnkpOw0KPiA+ID4gKyAgICAgIFN0YXR1cyA9 IFNIRUxMX1NVQ0NFU1M7DQo+ID4gPiArICAgICAgYnJlYWs7DQo+ID4gPiArICAgIGNhc2UgUkVB RDoNCj4gPiA+ICsgICAgY2FzZSBSRUFEX0ZJTEU6DQo+ID4gPiArICAgIGNhc2UgV1JJVEU6DQo+ ID4gPiArICAgIGNhc2UgV1JJVEVfRklMRToNCj4gPiA+ICsgICAgew0KPiA+ID4gKyAgICAgIFVJ TlQ2NCBNYXhCeXRlczsNCj4gPiA+ICsgICAgICBCT09MRUFOIE9wUmVhZDsNCj4gPiA+ICsNCj4g PiA+ICsgICAgICBPcFJlYWQgPSAoKEZsYWcgJiBSRUFEKSB8fCAoRmxhZyAmIFJFQURfRklMRSkp Ow0KPiA+ID4gKyAgICAgIE1heEJ5dGVzID0gTXVsdFU2NHgzMiAoDQo+ID4gPiArICAgICAgICBF bnRyeS0+RW5kaW5nTEJBIC0gRW50cnktPlN0YXJ0aW5nTEJBLA0KPiA+ID4gKyAgICAgICAgQmxv Y2tJby0+TWVkaWEtPkJsb2NrU2l6ZSkgKw0KPiA+ID4gKyAgICAgICAgQmxvY2tJby0+TWVkaWEt PkJsb2NrU2l6ZSAtDQo+ID4gPiArICAgICAgICBNdWx0VTY0eDMyIChPZmZzZXQsIEJsb2NrSW8t Pk1lZGlhLT5CbG9ja1NpemUpOw0KPiA+ID4gKyAgICAgIGlmIChCeXRlQ291bnQgPiBNYXhCeXRl cykgew0KPiA+ID4gKyAgICAgICAgU3RhdHVzID0gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiA+ ID4gKyAgICAgICAgU2hlbGxQcmludEhpaUV4ICgtMSwgLTEsDQo+ID4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgIE5VTEwsIChPcFJlYWQpID8NCj4gPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgU1RSSU5HX1RPS0VOIChTVFJfR1BUX1JFQURfQk9VTkRBUlkpIDoNCj4gPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgU1RSSU5HX1RPS0VOIChTVFJfR1BUX1dSSVRFX0JPVU5EQVJZ KSwNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgZ1NoZWxsR3B0SGlpSGFuZGxlLA0K PiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICBnQXBwTmFtZSwNCj4gPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgRW50cnktPlBhcnRpdGlvbk5hbWUsDQo+ID4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgIE1heEJ5dGVzLA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICBCeXRlQ291bnQNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICApOw0KPiA+ID4gKyAg ICAgICAgU3RhdHVzID0gU0hFTExfSU5WQUxJRF9QQVJBTUVURVI7DQo+ID4gPiArICAgICAgICBn b3RvIENsZWFuVXA7DQo+ID4gPiArICAgICAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgICAgIFRpbWVT dGFtcEIgPSBHZXRQZXJmb3JtYW5jZUNvdW50ZXIgKCk7DQo+ID4gPiArICAgICAgaWYgKE9wUmVh ZCkgew0KPiA+ID4gKyAgICAgICAgU3RhdHVzID0gRGlza0lvLT5SZWFkRGlzayAoRGlza0lvLA0K PiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmxvY2tJby0+TWVkaWEt Pk1lZGlhSWQsDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNdWx0 VTY0eDMyIChPZmZzZXQgKyBFbnRyeS0+U3RhcnRpbmdMQkEsIEJsb2NrSW8tDQo+ID4gPiA+TWVk aWEtPkJsb2NrU2l6ZSksIEJ5dGVDb3VudCwgQnVmZmVyKTsNCj4gPiA+ICsgICAgICB9IGVsc2Ug ew0KPiA+ID4gKyAgICAgICAgU3RhdHVzID0gRGlza0lvLT5Xcml0ZURpc2sgKERpc2tJbywgQmxv Y2tJby0+TWVkaWEtPk1lZGlhSWQsDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgTXVsdFU2NHgzMiAoT2Zmc2V0ICsgRW50cnktPlN0YXJ0aW5nTEJBLCBCbG9ja0lv LQ0KPiA+ID4gPk1lZGlhLT5CbG9ja1NpemUpLCBCeXRlQ291bnQsIEJ1ZmZlcik7DQo+ID4gPiAr ICAgICAgfQ0KPiA+ID4gKyAgICB9DQo+ID4gPiArICAgICAgYnJlYWs7DQo+ID4gPiArICAgIGRl ZmF1bHQ6DQo+ID4gPiArICAgICAgU3RhdHVzID0gU0hFTExfSU5WQUxJRF9QQVJBTUVURVI7DQo+ ID4gPiArICAgICAgUHJpbnRFcnIgKEwiVW5rbm93biBjb21tYW5kLiBUcnkgXCJoZWxwIGdwdFwi IiwNCj4gPiA+IEVGSV9JTlZBTElEX1BBUkFNRVRFUik7DQo+ID4gPiArICAgICAgZ290byBDbGVh blVwOw0KPiA+ID4gKyAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVz KSkgew0KPiA+ID4gKyAgICBQcmludEVyciAoTCJFcnJvciB3aGlsZSBwZXJmb3JtaW5nIHRyYW5z ZmVyXG4iLCBTdGF0dXMpOw0KPiA+ID4gKyAgICBTdGF0dXMgPSBTSEVMTF9BQk9SVEVEOw0KPiA+ ID4gKyAgICBnb3RvIENsZWFuVXA7DQo+ID4gPiArICB9DQo+ID4gPiArDQo+ID4gPiArICBUaW1l U3RhbXBFID0gKChHZXRQZXJmb3JtYW5jZUNvdW50ZXIgKCkgLSBUaW1lU3RhbXBCKSAqIDEwMDAp IC8NCj4gPiBGcmVxOw0KPiA+ID4gKyAgU3BlZWRLQiA9IFRpbWVTdGFtcEUgPyAoQnl0ZUNvdW50 IC8gKFRpbWVTdGFtcEUgLyAxMDAwKSkgPj4gMTAgOiAwOw0KPiA+ID4gKw0KPiA+ID4gKyAgc3dp dGNoIChGbGFnKSB7DQo+ID4gPiArICAgIGNhc2UgV1JJVEU6DQo+ID4gPiArICAgIGNhc2UgV1JJ VEVfRklMRToNCj4gPiA+ICsgICAgICBpZiAoIVF1aWV0KSB7DQo+ID4gPiArICAgICAgICBTaGVs bFByaW50SGlpRXggKC0xLCAtMSwNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgTlVM TCwNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgU1RSSU5HX1RPS0VOIChTVFJfR1BU X1dSSVRFX09LKSwNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgZ1NoZWxsR3B0SGlp SGFuZGxlLA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICBCeXRlQ291bnQsDQo+ID4g PiArICAgICAgICAgICAgICAgICAgICAgICAgIE9mZnNldCwNCj4gPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgRW50cnktPlBhcnRpdGlvbk5hbWUsDQo+ID4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgIFRpbWVTdGFtcEUsDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgIFNw ZWVkS0INCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICApOw0KPiA+ID4gKyAgICAgIH0N Cj4gPiA+ICsgICAgICBicmVhazsNCj4gPiA+ICsgICAgY2FzZSBSRUFEOg0KPiA+ID4gKyAgICAg IGlmICghUXVpZXQpIHsNCj4gPiA+ICsgICAgICAgIFNoZWxsUHJpbnRIaWlFeCAoLTEsIC0xLA0K PiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLA0KPiA+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICBTVFJJTkdfVE9LRU4gKFNUUl9HUFRfUkVBRF9PSyksDQo+ID4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgIGdTaGVsbEdwdEhpaUhhbmRsZSwNCj4gPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgQnl0ZUNvdW50LA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICBPZmZzZXQsDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgIEVudHJ5LT5QYXJ0 aXRpb25OYW1lLA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICBUaW1lU3RhbXBFLA0K PiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICBTcGVlZEtCDQo+ID4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgKTsNCj4gPiA+ICsgICAgICB9DQo+ID4gPiArICAgICAgYnJlYWs7DQo+ ID4gPiArICAgIGNhc2UgUkVBRF9GSUxFOg0KPiA+ID4gKyAgICAgIFN0YXR1cyA9IEZpbGVIYW5k bGVXcml0ZSAoRmlsZUhhbmRsZSwgJkJ5dGVDb3VudCwgRmlsZUJ1ZmZlcik7DQo+ID4gPiArICAg ICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ID4gKyAgICAgICAgU2hlbGxQcmludEhp aUV4ICgtMSwgLTEsDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsDQo+ID4g PiArICAgICAgICAgICAgICAgICAgICAgICAgIFNUUklOR19UT0tFTiAoU1RSX0dQVF9GSUxFX1dS SVRFX0ZBSUwpLA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICBnU2hlbGxHcHRIaWlI YW5kbGUsDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgIGdBcHBOYW1lLA0KPiA+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICBGaWxlUGF0aCwNCj4gPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgU3RhdHVzDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4g PiA+ICsgICAgICAgIFN0YXR1cyA9IFNIRUxMX0RFVklDRV9FUlJPUjsNCj4gPiA+ICsgICAgICAg IGdvdG8gRXJyb3JfRnJlZV9CdWZmZXI7DQo+ID4gPiArICAgICAgfQ0KPiA+ID4gKw0KPiA+ID4g KyAgICAgIGlmICghUXVpZXQpIHsNCj4gPiA+ICsgICAgICAgIFNoZWxsUHJpbnRIaWlFeCAoLTEs IC0xLA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLA0KPiA+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICBTVFJJTkdfVE9LRU4gKFNUUl9HUFRfUkVBREZJTEVfT0spLA0K PiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICBnU2hlbGxHcHRIaWlIYW5kbGUsDQo+ID4g PiArICAgICAgICAgICAgICAgICAgICAgICAgIEJ5dGVDb3VudCwNCj4gPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgT2Zmc2V0LA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICBF bnRyeS0+UGFydGl0aW9uTmFtZSwNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgRmls ZVBhdGgsDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgIFRpbWVTdGFtcEUsDQo+ID4g PiArICAgICAgICAgICAgICAgICAgICAgICAgIFNwZWVkS0INCj4gPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICApOw0KPiA+ID4gKyAgICAgIH0NCj4gPiA+ICsgICAgICBicmVhazsNCj4gPiA+ ICsgIH0NCj4gPiA+ICsNCj4gPiA+ICsgIGlmIChGaWxlRmxhZykgew0KPiA+ID4gKyAgICBTSEVM TF9GUkVFX05PTl9OVUxMIChGaWxlQnVmZmVyKTsNCj4gPiA+ICsgICAgaWYgKEZpbGVIYW5kbGUg IT0gTlVMTCkgew0KPiA+ID4gKyAgICAgIFNoZWxsQ2xvc2VGaWxlICgmRmlsZUhhbmRsZSk7DQo+ ID4gPiArICAgICAgRmlsZUhhbmRsZSA9IE5VTEw7DQo+ID4gPiArICAgIH0NCj4gPiA+ICsgIH0N Cj4gPiA+ICsNCj4gPiA+ICsgIFN0YXR1cyA9ICBTSEVMTF9TVUNDRVNTOw0KPiA+ID4gKw0KPiA+ ID4gKyBFcnJvcl9GcmVlX0J1ZmZlcjoNCj4gPiA+ICsgIFNIRUxMX0ZSRUVfTk9OX05VTEwgKEZp bGVCdWZmZXIpOw0KPiA+ID4gKyBFcnJvcl9DbG9zZV9GaWxlOg0KPiA+ID4gKyAgaWYgKEZpbGVI YW5kbGUpIHsNCj4gPiA+ICsgICAgU2hlbGxDbG9zZUZpbGUgKCZGaWxlSGFuZGxlKTsNCj4gPiA+ ICsgIH0NCj4gPiA+ICsgQ2xlYW5VcDoNCj4gPiA+ICsgIGlmIChCbG9ja0lvSGFuZGxlKSB7DQo+ ID4gPiArICAgIC8vIEJ5IFVFRkkgU3BlYyBibG9ja3MgbXVzdCBiZSBmbHVzaGVkDQo+ID4gPiAr ICAgIEJsb2NrSW8tPkZsdXNoQmxvY2tzIChCbG9ja0lvKTsNCj4gPiA+ICsgICAgZ0JTLT5DbG9z ZVByb3RvY29sIChCbG9ja0lvSGFuZGxlLCAmZ0VmaUJsb2NrSW9Qcm90b2NvbEd1aWQsDQo+ID4g PiBnSW1hZ2VIYW5kbGUsIE5VTEwpOw0KPiA+ID4gKyAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgR3B0 Q2xlYW51cEdsb2JhbHMgKCk7DQo+ID4gPiArDQo+ID4gPiArICBTaGVsbENvbW1hbmRMaW5lRnJl ZVZhckxpc3QgKENoZWNrUGFja2FnZSk7DQo+ID4gPiArDQo+ID4gPiArICBpZiAoRUZJX0VSUk9S IChTdGF0dXMpKSB7DQo+ID4gPiArICAgIFN0YXR1cyA9IFNIRUxMX0FCT1JURUQ7DQo+ID4gPiAr ICB9DQo+ID4gPiArDQo+ID4gPiArICByZXR1cm4gU3RhdHVzOw0KPiA+ID4gK30NCj4gPiA+ICsN Cj4gPiA+ICtFRklfU1RBVFVTDQo+ID4gPiArRUZJQVBJDQo+ID4gPiArU2hlbGxHcHRMaWJDb25z dHJ1Y3RvciAoDQo+ID4gPiArICBJTiBFRklfSEFORExFICAgICAgICBJbWFnZUhhbmRsZSwNCj4g PiA+ICsgIElOIEVGSV9TWVNURU1fVEFCTEUgICpTeXN0ZW1UYWJsZQ0KPiA+ID4gKyAgKQ0KPiA+ ID4gK3sNCj4gPiA+ICsgIGdTaGVsbEdwdEhpaUhhbmRsZSA9IE5VTEw7DQo+ID4gPiArDQo+ID4g PiArICBnU2hlbGxHcHRIaWlIYW5kbGUgPSBIaWlBZGRQYWNrYWdlcyAoDQo+ID4gPiArICAgICZn U2hlbGxHcHRIaWlHdWlkLCBnSW1hZ2VIYW5kbGUsDQo+ID4gPiArICAgIFVlZmlTaGVsbEdwdENv bW1hbmRMaWJTdHJpbmdzLCBOVUxMDQo+ID4gPiArICAgICk7DQo+ID4gPiArICBpZiAoZ1NoZWxs R3B0SGlpSGFuZGxlID09IE5VTEwpIHsNCj4gPiA+ICsgICAgcmV0dXJuIEVGSV9ERVZJQ0VfRVJS T1I7DQo+ID4gPiArICB9DQo+ID4gPiArDQo+ID4gPiArICBTaGVsbENvbW1hbmRSZWdpc3RlckNv bW1hbmROYW1lICgNCj4gPiA+ICsgICAgZ0FwcE5hbWUsIFNoZWxsQ29tbWFuZFJ1bkdwdCwNCj4g PiBTaGVsbENvbW1hbmRHZXRNYW5GaWxlTmFtZUdwdCwNCj4gPiA+IDAsDQo+ID4gPiArICAgIGdB cHBOYW1lLCBUUlVFLCBnU2hlbGxHcHRIaWlIYW5kbGUsIFNUUklOR19UT0tFTg0KPiA+ID4gKFNU Ul9HRVRfSEVMUF9HUFQpDQo+ID4gPiArICAgICk7DQo+ID4gPiArDQo+ID4gPiArICByZXR1cm4g RUZJX1NVQ0NFU1M7DQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4gK0VGSV9TVEFUVVMNCj4gPiA+ ICtFRklBUEkNCj4gPiA+ICtTaGVsbEdwdExpYkRlc3RydWN0b3IgKA0KPiA+ID4gKyAgSU4gRUZJ X0hBTkRMRSAgICAgICAgSW1hZ2VIYW5kbGUsDQo+ID4gPiArICBJTiBFRklfU1lTVEVNX1RBQkxF ICAqU3lzdGVtVGFibGUNCj4gPiA+ICsgICkNCj4gPiA+ICt7DQo+ID4gPiArDQo+ID4gPiArICBp ZiAoZ1NoZWxsR3B0SGlpSGFuZGxlICE9IE5VTEwpIHsNCj4gPiA+ICsgICAgSGlpUmVtb3ZlUGFj a2FnZXMgKGdTaGVsbEdwdEhpaUhhbmRsZSk7DQo+ID4gPiArICB9DQo+ID4gPiArICByZXR1cm4g RUZJX1NVQ0NFU1M7DQo+ID4gPiArfQ0KPiA+ID4gZGlmZiAtLWdpdA0KPiA+ID4gYS9TaGVsbFBr Zy9MaWJyYXJ5L1VlZmlTaGVsbEdwdENvbW1hbmRMaWIvVWVmaVNoZWxsR3B0Q29tbWFuZExpYi5p bmYNCj4gPiA+DQo+ID4gYi9TaGVsbFBrZy9MaWJyYXJ5L1VlZmlTaGVsbEdwdENvbW1hbmRMaWIv VWVmaVNoZWxsR3B0Q29tbWFuZExpYi5pbmYNCj4gPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ ID4gPiBpbmRleCAwMDAwMDAwMDAwMDAuLjFiZTRiMWFiMGYxMQ0KPiA+ID4gLS0tIC9kZXYvbnVs bA0KPiA+ID4gKysrDQo+ID4gPg0KPiA+IGIvU2hlbGxQa2cvTGlicmFyeS9VZWZpU2hlbGxHcHRD b21tYW5kTGliL1VlZmlTaGVsbEdwdENvbW1hbmRMaWIuaW5mDQo+ID4gPiBAQCAtMCwwICsxLDc5 IEBADQo+ID4gPiArIw0KPiA+ID4gKyMgTWFydmVsbCBCU0QgTGljZW5zZSBPcHRpb24NCj4gPiA+ ICsjDQo+ID4gPiArIyBJZiB5b3UgcmVjZWl2ZWQgdGhpcyBGaWxlIGZyb20gTWFydmVsbCwgeW91 IG1heSBvcHQgdG8gdXNlLCByZWRpc3RyaWJ1dGUNCj4gPiA+ICsjIGFuZC9vciBtb2RpZnkgdGhp cyBGaWxlIHVuZGVyIHRoZSBmb2xsb3dpbmcgbGljZW5zaW5nIHRlcm1zLg0KPiA+ID4gKyMgUmVk aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3 aXRob3V0DQo+ID4gPiArIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlDQo+ID4gPiBtZXQ6DQo+ID4gPiArIw0KPiA+ ID4gKyMgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi b3ZlIGNvcHlyaWdodCBub3RpY2UsDQo+ID4gPiArIyB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KPiA+ID4gKyMNCj4gPiA+ICsjICogUmVkaXN0 cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln aHQNCj4gPiA+ICsjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUNCj4gPiA+ICsjIGRvY3VtZW50YXRpb24gYW5kL29yIG90 aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQo+ID4gPiArIw0K PiA+ID4gKyMgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIE1hcnZlbGwgbm9yIHRoZSBuYW1lcyBvZiBp dHMgY29udHJpYnV0b3JzIG1heSBiZQ0KPiA+ID4gKyMgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUNCj4gPiB3aXRob3V0DQo+ID4g PiArIyBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQo+ID4gPiArIw0KPiA+ID4g KyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E DQo+ID4gPiBDT05UUklCVVRPUlMgIkFTIElTIg0KPiA+ID4gKyMgQU5EIEFOWSBFWFBSRVNTIE9S IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UDQo+ID4gPiBMSU1JVEVEIFRP LCBUSEUNCj4gPiA+ICsjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E IEZJVE5FU1MgRk9SIEENCj4gPiA+IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUNCj4gPiA+ICsjIERJ U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1INCj4gPiA+ IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUNCj4gPiA+ICsjIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUg0KPiA+ID4gQ09OU0VRVUVOVElB TA0KPiA+ID4gKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV UkVNRU5UIE9GDQo+ID4gPiBTVUJTVElUVVRFIEdPT0RTIE9SDQo+ID4gPiArIyBTRVJWSUNFUzsg TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTDQo+ID4gSU5URVJSVVBU SU9OKQ0KPiA+ID4gSE9XRVZFUg0KPiA+ID4gKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwNCj4gPiA+IFNUUklDVCBMSUFCSUxJVFks DQo+ID4gPiArIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS SVNJTkcgSU4gQU5ZDQo+ID4gV0FZDQo+ID4gPiBPVVQgT0YgVEhFIFVTRQ0KPiA+ID4gKyMgT0Yg VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI DQo+ID4gPiBEQU1BR0UuDQo+ID4gPiArIw0KPiA+ID4gKw0KPiA+ID4gKyMNCj4gPiA+ICsjIFBv cnRpb25zIENvcHlyaWdodCAoQykgMjAxNiBCcm9hZGNvbQ0KPiA+ID4gKyMNCj4gPiA+ICsNCj4g PiA+ICtbRGVmaW5lc10NCj4gPiA+ICsgSU5GX1ZFUlNJT04gICAgICAgICAgICAgICAgPSAweDAw MDEwMDA2DQo+ID4gPiArIEJBU0VfTkFNRSAgICAgICAgICAgICAgICAgID0gVWVmaVNoZWxsR3B0 Q29tbWFuZExpYg0KPiA+ID4gKyBGSUxFX0dVSUQgICAgICAgICAgICAgICAgICA9IEY2MkFDRjI1 LTBEMTUtMjJGNS1FNjQyLUZGQjY1MTVFMDBENw0KPiA+ID4gKyBNT0RVTEVfVFlQRSAgICAgICAg ICAgICAgICA9IFVFRklfQVBQTElDQVRJT04NCj4gPiA+ICsgVkVSU0lPTl9TVFJJTkcgICAgICAg ICAgICAgPSAwLjENCj4gPiA+ICsgTElCUkFSWV9DTEFTUyAgICAgICAgICAgICAgPSBOVUxMfFVF RklfQVBQTElDQVRJT04gVUVGSV9EUklWRVINCj4gPiA+ICsgQ09OU1RSVUNUT1IgICAgICAgICAg ICAgICAgPSBTaGVsbEdwdExpYkNvbnN0cnVjdG9yDQo+ID4gPiArIERFU1RSVUNUT1IgICAgICAg ICAgICAgICAgID0gU2hlbGxHcHRMaWJEZXN0cnVjdG9yDQo+ID4gPiArDQo+ID4gPiArW1NvdXJj ZXNdDQo+ID4gPiArIEZhdEZvcm1hdC5jDQo+ID4gPiArIEdwdFdvcmtlci5jDQo+ID4gPiArIFVl ZmlTaGVsbEdwdENvbW1hbmRMaWIuYw0KPiA+ID4gKyBVZWZpU2hlbGxHcHRDb21tYW5kTGliLnVu aQ0KPiA+ID4gKw0KPiA+ID4gK1tQYWNrYWdlc10NCj4gPiA+ICsgTWRlTW9kdWxlUGtnL01kZU1v ZHVsZVBrZy5kZWMNCj4gPiA+ICsgTWRlUGtnL01kZVBrZy5kZWMNCj4gPiA+ICsgU2hlbGxQa2cv U2hlbGxQa2cuZGVjDQo+ID4gPiArDQo+ID4gPiArW0xpYnJhcnlDbGFzc2VzXQ0KPiA+ID4gKyBC YXNlTGliDQo+ID4gPiArIEJhc2VNZW1vcnlMaWINCj4gPiA+ICsgRGVidWdMaWINCj4gPiA+ICsg RGV2aWNlUGF0aExpYg0KPiA+ID4gKyBGaWxlSGFuZGxlTGliDQo+ID4gPiArIEhpaUxpYg0KPiA+ ID4gKyBNZW1vcnlBbGxvY2F0aW9uTGliDQo+ID4gPiArIFBjZExpYg0KPiA+ID4gKyBTaGVsbENv bW1hbmRMaWINCj4gPiA+ICsgU2hlbGxMaWINCj4gPiA+ICsgVWVmaUJvb3RTZXJ2aWNlc1RhYmxl TGliDQo+ID4gPiArIFVlZmlSdW50aW1lU2VydmljZXNUYWJsZUxpYg0KPiA+ID4gKyBVZWZpTGli DQo+ID4gPiArDQo+ID4gPiArW1Byb3RvY29sc10NCj4gPiA+ICsgIGdFZmlCbG9ja0lvUHJvdG9j b2xHdWlkDQo+ID4gPiArICBnRWZpRGV2aWNlUGF0aFByb3RvY29sR3VpZA0KPiA+ID4gKyAgZ0Vm aURpc2tJb1Byb3RvY29sR3VpZA0KPiA+ID4gKw0KPiA+ID4gK1tHdWlkc10NCj4gPiA+ICsgZ1No ZWxsR3B0SGlpR3VpZA0KPiA+ID4gKyBnRWZpUGFydFR5cGVVbnVzZWRHdWlkICAgICAgICAgICAg ICAgICAgICAgICAgIyMgU09NRVRJTUVTX0NPTlNVTUVTICMjDQo+ID4gR1VJRA0KPiA+ID4gZGlm ZiAtLWdpdA0KPiA+ID4NCj4gPiBhL1NoZWxsUGtnL0xpYnJhcnkvVWVmaVNoZWxsR3B0Q29tbWFu ZExpYi9VZWZpU2hlbGxHcHRDb21tYW5kTGliLnVuaQ0KPiA+ID4NCj4gPiBiL1NoZWxsUGtnL0xp YnJhcnkvVWVmaVNoZWxsR3B0Q29tbWFuZExpYi9VZWZpU2hlbGxHcHRDb21tYW5kTGliLnVuaQ0K PiA+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiA+IGluZGV4IDAwMDAwMDAwMDAwMC4uNTVi Y2I0MmNmZWIzDQo+ID4gPiAtLS0gL2Rldi9udWxsDQo+ID4gPiArKysNCj4gPiA+DQo+ID4gYi9T aGVsbFBrZy9MaWJyYXJ5L1VlZmlTaGVsbEdwdENvbW1hbmRMaWIvVWVmaVNoZWxsR3B0Q29tbWFu ZExpYi51bmkNCj4gPiA+IEBAIC0wLDAgKzEsMTE3IEBADQo+ID4gPg0KPiA+ICvvu78vKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQo+ID4g PiAqKioqKioqKioqKioqKioqKioqKioqDQo+ID4gPiArQ29weXJpZ2h0IChDKSAyMDE2IE1hcnZl bGwgSW50ZXJuYXRpb25hbCBMdGQuDQo+ID4gPiArDQo+ID4gPiArTWFydmVsbCBCU0QgTGljZW5z ZSBPcHRpb24NCj4gPiA+ICsNCj4gPiA+ICtJZiB5b3UgcmVjZWl2ZWQgdGhpcyBGaWxlIGZyb20g TWFydmVsbCwgeW91IG1heSBvcHQgdG8gdXNlLCByZWRpc3RyaWJ1dGUNCj4gPiA+IGFuZC9vcg0K PiA+ID4gK21vZGlmeSB0aGlzIEZpbGUgdW5kZXIgdGhlIGZvbGxvd2luZyBsaWNlbnNpbmcgdGVy bXMuDQo+ID4gPiArUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm b3Jtcywgd2l0aCBvciB3aXRob3V0DQo+ID4gPiBtb2RpZmljYXRpb24sDQo+ID4gPiArYXJlIHBl cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0K PiA+ID4gKw0KPiA+ID4gKyAgICAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodA0KPiA+IG5vdGljZSwNCj4gPiA+ICsgICAg ICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l ci4NCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQNCj4gPiA+ICsgICAgICAgICAg bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp bWVyIGluIHRoZQ0KPiA+ID4gKyAgICAgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KPiA+ID4gKw0KPiA+ID4g KyAgICAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIE1hcnZlbGwgbm9yIHRoZSBuYW1lcyBvZiBp dHMgY29udHJpYnV0b3JzIG1heQ0KPiA+IGJlDQo+ID4gPiArICAgICAgICAgIHVzZWQgdG8gZW5k b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlDQo+ID4g PiB3aXRob3V0DQo+ID4gPiArICAgICAgICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz c2lvbi4NCj4gPiA+ICsNCj4gPiA+ICtUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD T1BZUklHSFQgSE9MREVSUyBBTkQNCj4gPiA+IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORA0KPiA+ ID4gK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U IExJTUlURUQNCj4gPiBUTywNCj4gPiA+IFRIRSBJTVBMSUVEDQo+ID4gPiArV0FSUkFOVElFUyBP RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUg0KPiA+ID4gUFVS UE9TRSBBUkUNCj4gPiA+ICtESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ R0hUIE9XTkVSIE9SDQo+ID4gPiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUg0KPiA+ID4gK0FO WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SDQo+ ID4gPiBDT05TRVFVRU5USUFMIERBTUFHRVMNCj4gPiA+ICsoSU5DTFVESU5HLCBCVVQgTk9UIExJ TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUNCj4gPiBHT09EUw0KPiA+ID4gT1Ig U0VSVklDRVM7DQo+ID4gPiArTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO RVNTIElOVEVSUlVQVElPTikNCj4gPiBIT1dFVkVSDQo+ID4gPiBDQVVTRUQgQU5EIE9ODQo+ID4g PiArQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM SUFCSUxJVFksIE9SDQo+ID4gPiBUT1JUDQo+ID4gPiArKElOQ0xVRElORyBORUdMSUdFTkNFIE9S IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRg0KPiA+ID4gVEhFIFVTRSBPRiBU SElTDQo+ID4gPiArU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg T0YgU1VDSCBEQU1BR0UuDQo+ID4gPiArDQo+ID4gPg0KPiA+ICsqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCj4gPiA+ICoqKioqKioqKioq KioqKioqKioqKiovDQo+ID4gPiArDQo+ID4gPiArLyogUG9ydGlvbnMgQ29weXJpZ2h0IChDKSAy MDE2IEJyb2FkY29tICovDQo+ID4gPiArLz0jDQo+ID4gPiArDQo+ID4gPiArI2xhbmdkZWYgICBl bi1VUyAiZW5nbGlzaCINCj4gPiA+ICsNCj4gPiA+ICsjc3RyaW5nIFNUUl9HRU5fUEFSQU1fSU5W ICAgICAgICAgI2xhbmd1YWdlIGVuLVVTICIlSCVzJU46IEludmFsaWQNCj4gPiA+IGFyZ3VtZW50 IC0gJyVIJXMlTidcclxuIg0KPiA+ID4gKyNzdHJpbmcgU1RSX0dFTl9NQVBfUFJPVE9DT0wgICAg ICAjbGFuZ3VhZ2UgZW4tVVMgIiVIJXMlTjoNCj4gPiA+IE1hcHBlZCBkZXZpY2UgJyVCJXMlTicg ZG9lcyBub3QgaGF2ZSBwcm90b2NvbCAlQiVzJU5cclxuIg0KPiA+ID4gKw0KPiA+ID4gKyNzdHJp bmcgU1RSX0dQVF9FUlJPUiAgICAgICAgICAgICNsYW5ndWFnZSBlbi1VUyAiJUglcyVOOiAlciAt ICVzXHJcbiINCj4gPiA+ICsjc3RyaW5nIFNUUl9HUFRfTk9UX0VNUFRZICAgICAgICAjbGFuZ3Vh Z2UgZW4tVVMgIiVIJXMlTjoNCj4gPiBXQVJOSU5HISEhDQo+ID4gPiBUaGlzIGRldmljZSBoYXMg dmFsaWQgR1BUIHBhcnRpdGlvbiB0YWJsZXMhXHJcbiINCj4gPiA+ICsjc3RyaW5nIFNUUl9HUFRf Q0xFQVJfU1VSRSAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgIkFyZSB5b3Ugc3VyZSB5b3UNCj4gPiB3 YW50DQo+ID4gPiB0byBjbGVhciB0aGUgR1BUIHRhYmxlcyBvbiB0aGlzIGRldmljZT8gJUJZJU5l cywgJUJOJU5vICINCj4gPiA+ICsjc3RyaW5nIFNUUl9HUFRfQUJTT0xVVEVMWV9TVVJFICAjbGFu Z3VhZ2UgZW4tVVMgIlxyXG5BcmUgeW91ICoqKg0KPiA+ID4gQUJTT0xVVEVMWSBTVVJFICoqKiB5 b3Ugd2FudCB0byBwZXJmb3JtIHRoaXMNCj4gPiA+IG9wZXJhdGlvbiA/ICVCWSVOZXMsICVCTiVO byAiDQo+ID4gPiArI3N0cmluZyBTVFJfR1BUX0ZPUk1BVF9XQVJOSU5HICAgI2xhbmd1YWdlIGVu LVVTICIlSCVzJU46DQo+ID4gPiBXQVJOSU5HISEhIEZvcm1hdHRpbmcgb2YgdGhpcyBwYXJ0aXRp b24gd2lsbCBkZXN0cm95IGFsbCBkYXRhIG9uIGl0IVxyXG4iDQo+ID4gPiArI3N0cmluZyBTVFJf R1BUX0ZPUk1BVF9TVVJFICAgICAgI2xhbmd1YWdlIGVuLVVTICJBcmUgeW91IHN1cmUgeW91DQo+ ID4gPiB3YW50IHRvIGZvcm1hdCB0aGlzIHBhcnRpdGlvbiB0byBGQVQzMiBhbmQgZGVzdHJveSBh bGwgZGF0YSBvbg0KPiA+ID4gaXQgPyAlQlklTmVzLCAlQk4lTm8gIg0KPiA+ID4gKyNzdHJpbmcg U1RSX0dQVF9ERUxFVEVfV0FSTklORyAgICNsYW5ndWFnZSBlbi1VUyAiJUglcyVOOg0KPiA+IERl bGV0aW5nDQo+ID4gPiBvZiB0aGlzIHBhcnRpdGlvbiB3aWxsIG1ha2UgZGF0YSBvbiBpdCB1bnJl YWNoYWJsZSFcclxuIg0KPiA+ID4gKyNzdHJpbmcgU1RSX0dQVF9SRUFEX0JPVU5EQVJZICAgICNs YW5ndWFnZSBlbi1VUyAiJUglcyVOOg0KPiA+IEF0dGVtcHQNCj4gPiA+IHRvIHJlYWQgYmV5b25k ICVIJXMlTiBwYXJ0aXRpb24gYm91bmRhcnkgKGNhbiByZWFkIHVwdG8gJWxsdSBieXRlcw0KPiA+ IGZyb20NCj4gPiA+IHRoZSBnaXZlbiBvZmZzZXQsIHJlcXVlc3RlZCAlbGx1IGJ5dGVzKVxyXG4i DQo+ID4gPiArI3N0cmluZyBTVFJfR1BUX1dSSVRFX0JPVU5EQVJZICAgI2xhbmd1YWdlIGVuLVVT ICIlSCVzJU46DQo+ID4gPiBBdHRlbXB0IHRvIHdyaXRlIGJleW9uZCAlSCVzJU4gcGFydGl0aW9u IGJvdW5kYXJ5IChjYW4gd3JpdGUgdXB0byAlbGx1DQo+ID4gPiBieXRlcyBmcm9tIHRoZSBnaXZl biBvZmZzZXQsIHJlcXVlc3RlZCAlbGx1IGJ5dGVzKVxyXG4iDQo+ID4gPiArI3N0cmluZyBTVFJf R1BUX0ZJTEVfV1JJVEVfRkFJTCAgI2xhbmd1YWdlIGVuLVVTICIlSCVzJU46IEZhaWxlZCB0bw0K PiA+ID4gd3JpdGUgdG8gdGhlIGZpbGUgJXMsIGVycm9yICVyXHJcbiINCj4gPiA+ICsNCj4gPiA+ ICsjc3RyaW5nIFNUUl9HUFRfV1JJVEVfT0sgICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgIldyaXR0 ZW4gJWxsdSBieXRlcyBhdA0KPiA+ID4gb2Zmc2V0IDB4JXgsIHBhcnRpdGlvbiAlcy4gRWxhcHNl ZCB0aW1lICVsbHVtcyAoJWxsdSBLQi9zKVxyXG4iDQo+ID4gPiArI3N0cmluZyBTVFJfR1BUX1JF QURfT0sgICAgICAgICAgI2xhbmd1YWdlIGVuLVVTICJSZWFkICVsbHUgYnl0ZXMgZnJvbQ0KPiA+ ID4gb2Zmc2V0IDB4JXgsIHBhcnRpdGlvbiAlcy4gRWxhcHNlZCB0aW1lICVsbHVtcyAoJWxsdSBL Qi9zKVxyXG4iDQo+ID4gPiArI3N0cmluZyBTVFJfR1BUX1JFQURGSUxFX09LICAgICAgI2xhbmd1 YWdlIGVuLVVTICJSZWFkICVsbHUgYnl0ZXMgZnJvbQ0KPiA+ID4gb2Zmc2V0IDB4JXgsIHBhcnRp dGlvbiAlcyBpbnRvIGZpbGUgJXMuIEVsYXBzZWQgdGltZSAlbGx1bXMgKCVsbHUgS0Ivcylcclxu Ig0KPiA+ID4gKyNzdHJpbmcgU1RSX0dQVF9MSVNUX0RFVlMgICAgICAgICNsYW5ndWFnZSBlbi1V UyAiICVIJSs2cyVOICAlKzhzICAiDQo+ID4gPiArDQo+ID4gPiArI3N0cmluZyBTVFJfR0VUX0hF TFBfR1BUICAgICAgICAgI2xhbmd1YWdlIGVuLVVTICIiDQo+ID4gPiArIi5USCBncHQgMCAiR1BU IHBhcnRpdGlvbiBtYW5hZ2VyLiJcclxuIg0KPiA+ID4gKyIuU0ggTkFNRVxyXG4iDQo+ID4gPiAr Ik1hbmFnZXMgR1BUIHBhcnRpdGlvbnMgb24gYSBibG9jayBkZXZpY2UuXHJcbiINCj4gPiA+ICsi LlNIIFNZTk9QU0lTXHJcbiINCj4gPiA+ICsiIFxyXG4iDQo+ID4gPiArImdwdCBbcmVhZCB8IHJl YWRmaWxlIHwgd3JpdGUgfCB3cml0ZWZpbGUgfCBsaXN0IHwgaW5mbyB8IGNsZWFyIHxcclxuIg0K PiA+ID4gKyIgICAgIGNyZWF0ZSB8IGRlbGV0ZSB8IHJlbmFtZSB8IHNldGF0dHJzIHwgc3luYyB8 IGZhdGZvcm1hdCB8IC10eXBlc2luZm8gfCAtDQo+ID4geWVzXQ0KPiA+ID4gXHJcbiINCj4gPiA+ ICsiVGhpcyBpcyBhIGNvbXBsZXggdXRpbGl0eS4gUGxlYXNlIHNlZSBleGFtcGxlcyBmb3IgdXNh Z2UgaW5mb1xyXG4iDQo+ID4gPiArIi5TSCBPUFRJT05TXHJcbiINCj4gPiA+ICsiIFxyXG4iDQo+ ID4gPiArIiAgIERldmljZSAgICAgICAgLSBCbG9jayBkZXZpY2UgdG8gYmUgdXNlZCBmb3IgdGhl IG9wZXJhdGlvblxyXG4iDQo+ID4gPiArIiAgIExlbmd0aCAgICAgICAgLSBOdW1iZXIgb2YgYnl0 ZXMgdG8gdHJhbnNmZXIgKGZvciByZWFkL3dyaXRlKSlcclxuIg0KPiA+ID4gKyIgICBBZGRyZXNz ICAgICAgIC0gQWRkcmVzcyBpbiBSQU0gdG8gc3RvcmUvbG9hZCBkYXRhXHJcbiINCj4gPiA+ICsi ICAgT2Zmc2V0ICAgICAgICAtIE9mZnNldCAoaW4gYmxvY2tzKSBmcm9tIGJlZ2dpbmluZyBvZiB0 aGUgc3BlY2lmaWUgcGFydGl0aW9uIHRvDQo+ID4gPiBzdG9yZS9sb2FkIGRhdGFcclxuIg0KPiA+ ID4gKyIgICBGaWxlUGF0aCAgICAgIC0gUGF0aCB0byBmaWxlIHRvIHJlYWQgZGF0YSBpbnRvIG9y IHdyaXRlL3VwZGF0ZSBkYXRhDQo+ID4gZnJvbVxyXG4iDQo+ID4gPiArIiAgIC15ZXMgICAgICAg ICAgLSBBc3N1bWUgeWVzIGZvciBhbGwgcXVlcmllcywgZG8gbm90IHByb21wdFxyXG5cclxuIg0K PiA+ID4gKyIuU0ggRVhBTVBMRVNcclxuIg0KPiA+ID4gKyIgXHJcbiINCj4gPiA+ICsiRVhBTVBM RVM6XHJcbiINCj4gPiA+ICsiR2V0IHRoZSBsaXN0IG9mIGF2YWlsYWJsZSBwYXJ0aXRpb25hYmxl IGJsb2NrIGRldmljZShzKVxyXG4iDQo+ID4gPiArIiAgZ3B0ICVIbGlzdCVOXHJcbiINCj4gPiA+ ICsiR2V0IGluZm8gb24gdGhlIHBhcnRpY3VsYXIgcGFydGl0aW9uIHdpdGggbmFtZSBQYXJ0aXRp b25OYW1lIG9uIHRoZQ0KPiA+IGJsb2NrDQo+ID4gPiBkZXZpY2UgYmxrMDpcclxuIg0KPiA+ID4g KyIgIGdwdCAlSGluZm8lTiBibGswOiBQYXJ0aXRpb25OYW1lXHJcbiINCj4gPiA+ICsiTGlzdCBh bGwgYXZhaWxhYmxlIEdQVCBwYXJ0aXRpb25zIG9uIHRoZSBibG9jayBkZXZpY2UgYmxrMDpcclxu Ig0KPiA+ID4gKyIgIGdwdCBsaXN0IGJsazA6XHJcbiINCj4gPiA+ICsiTm90ZTogdGhlIG9yZGlu YWwgbnVtYmVyIHNob3duIGJ5IHRoaXMgY29tbWFuZCBjYW4gYmUgdXNlZCBhcyBhDQo+ID4gPiBw YXJ0aXRpb24gbmFtZSBpbiBhbnkgY29tbWFuZCByZXF1aXJpbmcgcGFydGl0aW9uIG5hbWVcclxu Ig0KPiA+ID4gKyJUaHVzIGdwdCBpbmZvIGJsazA6IDEgaXMgdmFsaWQgaWYgdGhlcmUgaXMgYSBw YXJ0aXRpb24gd2l0aCBvcmRpbmFsIDEgcHJlc2VudCBpbg0KPiA+ID4gdGhlIG91dHB1dCBvZiBn cHQgbGlzdCBjb21tYW5kXHJcbiINCj4gPiA+ICsiR2V0IGluZm9ybWF0aW9uIG9uIGFsbCByZWNv Z25pemVkIHBhcnRpdGlvbiB0eXBlc1xyXG4iDQo+ID4gPiArIiAgZ3B0ICVIdHlwZXNpbmZvJU5c clxuIg0KPiA+ID4gKyJDbGVhciBwYXJ0aXRpb25zIGluZm9ybWF0aW9uIGFuZCBpbnN0YWxsIGVt cHR5IEdQVCB0YWJsZXMgZm9yIGEgYmxvY2sNCj4gPiBkZXZpY2UNCj4gPiA+IGJsazA6XHJcbiIN Cj4gPiA+ICsiICBncHQgJUhjbGVhciVOIGJsazA6XHJcbiINCj4gPiA+ICsiQ3JlYXRlIGEgR1BU IHBhcnRpdGlvbiB3aXRoIG5hbWUgUGFydGl0aW9uTmFtZSBhbmQgdHlwZSBFRkkgU1lTVEVNIGlu DQo+ID4gPiB0aGUgR1BUIHRhYmxlLCB1c2luZyB0aGUgbmV4dCBhdmFpbGFibGUgTEJBLCB3aXRo IHNpemVcclxuIg0KPiA+ID4gKyI2NE1pQiwgd2l0aCBzeXN0ZW0gYXR0cmlidXRlLCBvbiBibG9j ayBkZXZpY2UgYmxrMDpcclxuIg0KPiA+ID4gKyIgIGdwdCAlSGNyZWF0ZSVOIGJsazA6IFBhcnRp dGlvbk5hbWUgMCA2NCAxIC10eXBlIDBcclxuIg0KPiA+ID4gKyJTYW1lIGFzIGFib3ZlLCBidXQg bm93IHRoZSBwYXJ0aXRpb24gdHlwZSBpcyBub3Qga25vd24gdG8gdGhlIGdwdCB1dGlsaXR5LA0K PiA+ID4gc28gdXNlIHNvbWUgR1VJRCBrbm93biB0byBhIDNyZCBwYXJ0eVxyXG4iDQo+ID4gPiAr IiAgZ3B0IGNyZWF0ZSBibGswOiBQYXJ0aXRpb25OYW1lIDAgNjQgMSAtdHlwZSA0NDU4MUE0QS1D ODM0LUQxQTYtMjYwMi0NCj4gPiA+IDlENTIyQThGMjMwN1xyXG4iDQo+ID4gPiArIlJlbmFtZSB0 aGUgR1BUIHBhcnRpdGlvbiBQYXJ0aXRpb25OYW1lIG9uIGJsazA6IHRvDQo+ID4gPiBOZXdQYXJ0 aXRpb25OYW1lXHJcbiINCj4gPiA+ICsiICBncHQgJUhyZW5hbWUlTiBibGswOiBQYXJ0aXRpb25O YW1lIE5ld1BhcnRpdGlvbk5hbWVcclxuIg0KPiA+ID4gKyJIYXZlIHRoZSBQYXJ0aXRpb25EeGUg ZHJpdmVyIHRvIHJlLXJlYWQgR1BUIHRhYmxlcyBvbiBhIGJsb2NrIGRldmljZQ0KPiA+ID4gYmxr MDooYWZ0ZXIgdGhleSB3ZXJlIHVwZGF0ZWQgd2l0aCBncHQgdXRpbGl0eSlcclxuIg0KPiA+ID4g KyIgIGdwdCAlSHN5bmMlTiBibGswOlxyXG4iDQo+ID4gPiArIlJlYWQgNEsgZnJvbSBibG9jayBv ZmZzZXQgMHgwZTAwMCBpbiBQYXJ0aXRpb24gbmFtZWQgUGFydGl0aW9uTmFtZSBvZg0KPiA+ID4g dGhlIGJsb2NrIGRldmljZSBhdCBibGswOiBpbnRvIFJBTSBhdCBhZGRyZXNzIDB4MTAwMDAwXHJc biINCj4gPiA+ICsiICBncHQgJUhyZWFkJU4gYmxrMDogMHgxMDAwMDAgUGFydGl0aW9uTmFtZSAw eGUwMDAgNDA5NlxyXG4iDQo+ID4gPiArIldyaXRlIDUxMiBieXRlcyBmcm9tIDB4MjAwMDAwIGF0 IFJBTSBpbnRvIHRoZSBibG9jayBkZXZpY2UgYXQgYmxrMDoNCj4gPiA+IHBhcnRpdGlvbiBQYXJ0 aXRpb25OYW1lIGF0IG9mZnNldCAweDEwMDBcclxuIg0KPiA+ID4gKyIgIGdwdCAlSHdyaXRlJU4g YmxrMDogMHgyMDAwMDAgUGFydGl0aW9uTmFtZSAweDEwMDAgNTEyXHJcbiINCj4gPiA+ICsiUmVh ZCAweDMwMDAgYnl0ZXMgZnJvbSAweDAgb2Zmc2V0IG9mIFBhcnRpdGlvbiBQYXJ0aXRpb25OYW1l IGF0IHRoZQ0KPiA+IGJsb2NrDQo+ID4gPiBkZXZpY2UgYmxrMDogaW50byBmaWxlIGZzMjpmaWxl LmJpblxyXG4iDQo+ID4gPiArIiAgZ3B0ICVIcmVhZGZpbGUlTiBibGswOiBmczI6ZmlsZS5iaW4g UGFydGl0aW9uTmFtZSAweDAgMHgzMDAwXHJcbiINCj4gPiA+ICsiV3JpdGUgY29udGVudHMgb2Yg ZmlsZSBmczI6ZmlsZS5iaW4gaW50byBwYXJ0aXRpb24gbmFtZWQgUGFydGl0aW9uTmFtZQ0KPiA+ IHdpdGgNCj4gPiA+IG9mZnNldCAoaW4gbGJhKSAweDEwIG9uIGEgYmxvY2sgZGV2aWNlIGJsazA6 XHJcbiINCj4gPiA+ICsiICBncHQgJUh3cml0ZWZpbGUlTiBibGswOiBmczI6ZmlsZS5iaW4gUGFy dGl0aW9uTmFtZSAweDEwXHJcbiINCj4gPiA+ICsiRkFUIEZvcm1hdCB0aGUgcGFydGl0aW9uIFBh cnRpdGlvbk5hbWUgb24gYmxvY2sgZGV2aWNlIGJsazA6XHJcbiINCj4gPiA+ICsiICBncHQgJUhm YXRmb3JtYXQlTiBibGswOiBQYXJ0aXRpb25OYW1lXHJcbiINCj4gPiA+ICsiRkFUIEZvcm1hdCB0 aGUgd2hvbGUgZGV2aWNlIGJsazA6XHJcbiINCj4gPiA+ICsiICBncHQgZmF0Zm9ybWF0IGJsazA6 XHJcbiINCj4gPiA+ICsNCj4gPiA+ICsiLlNIIFJFVFVSTlZBTFVFU1xyXG4iDQo+ID4gPiArIiBc clxuIg0KPiA+ID4gKyJSRVRVUk4gVkFMVUVTOlxyXG4iDQo+ID4gPiArIiAgU0hFTExfU1VDQ0VT UyAgICAgICAgIFRoZSBhY3Rpb24gd2FzIGNvbXBsZXRlZCBhcyByZXF1ZXN0ZWQuXHJcbiINCj4g PiA+ICsiICBTcGVjaWZpYyBTaGVsbCBlcnJvciAgRXJyb3Igd2hpbGUgcHJvY2Vzc2luZyBjb21t YW5kXHJcbiINCj4gPiA+IGRpZmYgLS1naXQgYS9TaGVsbFBrZy9TaGVsbFBrZy5kZWMgYi9TaGVs bFBrZy9TaGVsbFBrZy5kZWMNCj4gPiA+IGluZGV4IDM5ZjgwMTJiOThjMS4uNTM3NGEyYTYyZDVm IDEwMDY0NA0KPiA+ID4gLS0tIGEvU2hlbGxQa2cvU2hlbGxQa2cuZGVjDQo+ID4gPiArKysgYi9T aGVsbFBrZy9TaGVsbFBrZy5kZWMNCj4gPiA+IEBAIC01Niw2ICs1Niw3IEBAIFtHdWlkc10NCj4g PiA+ICAgIGdTaGVsbE5ldHdvcmsySGlpR3VpZCAgICAgICAgICAgPSB7MHgxNzRiMmI1LCAweGY1 MDUsIDB4NGIxMiwgezB4YWEsIDB4NjAsDQo+ID4gPiAweDU5LCAweGRmLCAweGY4LCAweGQ2LCAw eGVhLCAweDM3fX0NCj4gPiA+ICAgIGdTaGVsbFRmdHBIaWlHdWlkICAgICAgICAgICAgICAgPSB7 MHg3MzhhOTMxNCwgMHg4MmMxLCAweDQ1OTIsIHsweDhmLCAweGY3LA0KPiAweGMxLA0KPiA+ID4g MHhiZCwgMHhmMSwgMHhiMiwgMHgwZSwgMHhkNH19DQo+ID4gPiAgICBnU2hlbGxCY2ZnSGlpR3Vp ZCAgICAgICAgICAgICAgID0gezB4NWY1ZjYwNWQsIDB4MTU4MywgMHg0YTJkLCB7MHhhNiwgMHhi MiwNCj4gMHhlYiwNCj4gPiA+IDB4MTIsIDB4ZGEsIDB4YjQsIDB4YTIsIDB4YjZ9fQ0KPiA+ID4g KyAgZ1NoZWxsR3B0SGlpR3VpZCAgICAgICAgICAgICAgICA9IHsweDVhMWVkNzM5LCAweDVlZjEs IDB4NDI5YSwgezB4OGQsIDB4ZjgsDQo+IDB4MjgsDQo+ID4gPiAweGM5LCAweDkyLCAweDY0LCAw eGQ3LCAweGY4fX0NCj4gPiA+DQo+ID4gPiAgW1Byb3RvY29sc10NCj4gPiA+ICAgIGdFZmlTaGVs bFByb3RvY29sR3VpZCAgICAgICAgICAgICAgID0gezB4NjMwMmQwMDgsIDB4N2Y5YiwgMHg0ZjMw LCB7MHg4NywgMHhhYywNCj4gPiA+IDB4NjAsIDB4YzksIDB4ZmUsIDB4ZjUsIDB4ZGEsIDB4NGV9 fQ0KPiA+ID4gZGlmZiAtLWdpdCBhL1NoZWxsUGtnL1NoZWxsUGtnLmRzYyBiL1NoZWxsUGtnL1No ZWxsUGtnLmRzYw0KPiA+ID4gaW5kZXggODA5YmQ0MjIwYWYyLi45ODRjMWQwYWQ0OGIgMTAwNjQ0 DQo+ID4gPiAtLS0gYS9TaGVsbFBrZy9TaGVsbFBrZy5kc2MNCj4gPiA+ICsrKyBiL1NoZWxsUGtn L1NoZWxsUGtnLmRzYw0KPiA+ID4gQEAgLTg5LDYgKzg5LDcgQEAgW0NvbXBvbmVudHNdDQo+ID4g Pg0KPiA+ID4NCj4gPiBTaGVsbFBrZy9MaWJyYXJ5L1VlZmlTaGVsbExldmVsMkNvbW1hbmRzTGli L1VlZmlTaGVsbExldmVsMkNvbW1hbmRzTGliDQo+ID4gPiAuaW5mDQo+ID4gPg0KPiA+ID4NCj4g PiBTaGVsbFBrZy9MaWJyYXJ5L1VlZmlTaGVsbExldmVsM0NvbW1hbmRzTGliL1VlZmlTaGVsbExl dmVsM0NvbW1hbmRzTGliDQo+ID4gPiAuaW5mDQo+ID4gPg0KPiA+ID4NCj4gPiBTaGVsbFBrZy9M aWJyYXJ5L1VlZmlTaGVsbERyaXZlcjFDb21tYW5kc0xpYi9VZWZpU2hlbGxEcml2ZXIxQ29tbWFu ZHNMDQo+ID4gPiBpYi5pbmYNCj4gPiA+ICsNCj4gPiBTaGVsbFBrZy9MaWJyYXJ5L1VlZmlTaGVs bEdwdENvbW1hbmRMaWIvVWVmaVNoZWxsR3B0Q29tbWFuZExpYi5pbmYNCj4gPiA+DQo+ID4gPg0K PiA+IFNoZWxsUGtnL0xpYnJhcnkvVWVmaVNoZWxsSW5zdGFsbDFDb21tYW5kc0xpYi9VZWZpU2hl bGxJbnN0YWxsMUNvbW1hbmRzTGkNCj4gPiA+IGIuaW5mDQo+ID4gPg0KPiA+ID4NCj4gPiBTaGVs bFBrZy9MaWJyYXJ5L1VlZmlTaGVsbERlYnVnMUNvbW1hbmRzTGliL1VlZmlTaGVsbERlYnVnMUNv bW1hbmRzDQo+ID4gPiBMaWIuaW5mDQo+ID4gPg0KPiA+ID4NCj4gPiBTaGVsbFBrZy9MaWJyYXJ5 L1VlZmlTaGVsbE5ldHdvcmsxQ29tbWFuZHNMaWIvVWVmaVNoZWxsTmV0d29yazFDb21tDQo+ID4g PiBhbmRzTGliLmluZg0KPiA+ID4gQEAgLTExOSw2ICsxMjAsOSBAQCBbQ29tcG9uZW50c10NCj4g PiA+ICAhaWZkZWYgJChJTkNMVURFX1RGVFBfQ09NTUFORCkNCj4gPiA+DQo+ID4gPg0KPiA+IE5V TEx8U2hlbGxQa2cvTGlicmFyeS9VZWZpU2hlbGxUZnRwQ29tbWFuZExpYi9VZWZpU2hlbGxUZnRw Q29tbWFuZExpYg0KPiA+ID4gLmluZg0KPiA+ID4gICFlbmRpZiAjJChJTkNMVURFX1RGVFBfQ09N TUFORCkNCj4gPiA+ICshaWZkZWYgJChJTkNMVURFX0dQVF9DT01NQU5EKQ0KPiA+ID4gKw0KPiA+ ID4NCj4gPiBOVUxMfFNoZWxsUGtnL0xpYnJhcnkvVWVmaVNoZWxsR3B0Q29tbWFuZExpYi9VZWZp U2hlbGxHcHRDb21tYW5kTGliLg0KPiA+ID4gaW5mDQo+ID4gPiArIWVuZGlmICMkKElOQ0xVREVf R1BUX0NPTU1BTkQpDQo+ID4gPiAgIWVuZGlmICMkKE5PX1NIRUxMX1BST0ZJTEVTKQ0KPiA+ID4g ICAgfQ0KPiA+ID4NCj4gPiA+IC0tDQo+ID4gPiAxLjkuMQ0KPiA+DQo+ID4gX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18NCj4gPiBlZGsyLWRldmVsIG1haWxp bmcgbGlzdA0KPiA+IGVkazItZGV2ZWxAbGlzdHMuMDEub3JnDQo+ID4gaHR0cHM6Ly9saXN0cy4w MS5vcmcvbWFpbG1hbi9saXN0aW5mby9lZGsyLWRldmVsDQo=