From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: mx.groups.io; dkim=pass header.i=@amdcloud.onmicrosoft.com header.s=selector1-amdcloud-onmicrosoft-com header.b=J2HP4fks; spf=none, err=SPF record not found (domain: amd.com, ip: 40.107.70.41, mailfrom: brijesh.singh@amd.com) Received: from NAM04-SN1-obe.outbound.protection.outlook.com (NAM04-SN1-obe.outbound.protection.outlook.com [40.107.70.41]) by groups.io with SMTP; Tue, 23 Jul 2019 12:45:29 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=N/k0KDYN8y3liXTIiPPy8dEW57TFFvrohZ8wWNbVUQvnSPHToZ8lTqXbULSaAiBQMNER+2H0IPnQFCyXWt3Kl8NtC3+crZBvdjUuaLz/nQrcYCAwLd6Um5g2LS/MixOar8A6FHCFyHtlxr9SuotYtnU08nxS2NJaNhKnE7ZF+RaI9ZTR3KCYaURzPE6w4nIZGDGqNRpGrLIjXdeyZIduj2AwUmRn0qG5N6hQ0xYEBlOsTo3t/P2wcWCWQzZeXPEJQHSGgjkZAltFfT/gkZAN2LuZIwjJD/xGbdj1ZSV4h5/dgSDFLI7J8mprF+vVGdh0blbcz2uhPbjb5PaNXyAtXA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=trryLf4PvS8s0/UJgotWci3g8g3bK9kZEAGSsVlKn9g=; b=m2yTSFSBqyy2FxsKovgL40ADrL8+9+H3Dy2noqYShrEa39zHY/C4kuYSdKZ2xItqMuiY4WPqzZdFeaLyQGfr9pYMjHKOgrRgQKxczZKe44r1nWMjDiNccn7MzJzesPV1uN4Y96Xuzpu+9J+TBSryzgbUFcI+MHXFHyWnb7bY0slMMmaqpSvIdjqngdHPV9cSu2P77j+n2v76P/hALeag+LAA54spnVuefZ7eg1li7yIKq4QWlCGzsCedSJ8MdrvOTD27aeUZNUHBda+1yhdVD+qv/JCR2zKxSLhxoDfTwpoUfDO+E2bh3+RJP6vo0Pm003CxGODsXBPQ++9vSKIFSA== ARC-Authentication-Results: i=1; mx.microsoft.com 1;spf=pass smtp.mailfrom=amd.com;dmarc=pass action=none header.from=amd.com;dkim=pass header.d=amd.com;arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amdcloud.onmicrosoft.com; s=selector1-amdcloud-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=trryLf4PvS8s0/UJgotWci3g8g3bK9kZEAGSsVlKn9g=; b=J2HP4fksGribNAwW1uOybhh5xrVqRQThgwk/RWZJh8DcoA7txN4MeEJpR8UcTvFMpdh9TqrFEP5VN2jb4AzGr80gRVJaCOJm1nsGtPgYtK52KFhKJoOevqBt3TdplPllIoSqZ4iRHf8ZHZ3h7Me4goa0Znsfbj+1Eo2r2KKfiRk= Received: from DM6PR12MB2682.namprd12.prod.outlook.com (20.176.118.13) by DM6PR12MB3900.namprd12.prod.outlook.com (10.255.174.29) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2094.16; Tue, 23 Jul 2019 19:45:27 +0000 Received: from DM6PR12MB2682.namprd12.prod.outlook.com ([fe80::7439:ea87:cc5d:71]) by DM6PR12MB2682.namprd12.prod.outlook.com ([fe80::7439:ea87:cc5d:71%7]) with mapi id 15.20.2094.017; Tue, 23 Jul 2019 19:45:27 +0000 From: "Singh, Brijesh" To: Laszlo Ersek , "Wu, Hao A" , "devel@edk2.groups.io" , "Ni, Ray" CC: "Singh, Brijesh" , "Dong, Eric" Subject: Re: [edk2-devel] [PATCH 4/4] MdeModulePkg/DxeIpl: Create 5-level page table for long mode Thread-Topic: [edk2-devel] [PATCH 4/4] MdeModulePkg/DxeIpl: Create 5-level page table for long mode Thread-Index: AQHVQSr6Bt9eodvgvUe4ct90UnHDBabYnAAA Date: Tue, 23 Jul 2019 19:45:26 +0000 Message-ID: References: <20190722081547.56100-1-ray.ni@intel.com> <20190722081547.56100-5-ray.ni@intel.com> <337cf1e3-9b42-e8ac-d8f5-55f9aa03cd42@redhat.com> In-Reply-To: <337cf1e3-9b42-e8ac-d8f5-55f9aa03cd42@redhat.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: SN6PR15CA0017.namprd15.prod.outlook.com (2603:10b6:805:16::30) To DM6PR12MB2682.namprd12.prod.outlook.com (2603:10b6:5:42::13) authentication-results: spf=none (sender IP is ) smtp.mailfrom=brijesh.singh@amd.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [165.204.77.1] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 95904793-bca9-4be3-1ead-08d70fa64ef4 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600148)(711020)(4605104)(1401327)(4618075)(2017052603328)(7193020);SRVR:DM6PR12MB3900; x-ms-traffictypediagnostic: DM6PR12MB3900: x-ms-exchange-purlcount: 4 x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:9508; x-forefront-prvs: 0107098B6C x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(4636009)(396003)(39860400002)(366004)(136003)(376002)(346002)(199004)(189003)(13464003)(316002)(2501003)(256004)(2616005)(110136005)(476003)(6436002)(54906003)(53546011)(14444005)(3846002)(386003)(6306002)(52116002)(229853002)(6116002)(5660300002)(6506007)(19627235002)(31686004)(2906002)(7736002)(6486002)(305945005)(68736007)(76176011)(30864003)(25786009)(6246003)(53946003)(66066001)(86362001)(26005)(81166006)(966005)(31696002)(8936002)(478600001)(186003)(14454004)(64756008)(66946007)(102836004)(66476007)(66446008)(8676002)(11346002)(36756003)(4326008)(486006)(66556008)(71190400001)(71200400001)(53936002)(446003)(99286004)(81156014)(6512007);DIR:OUT;SFP:1101;SCL:1;SRVR:DM6PR12MB3900;H:DM6PR12MB2682.namprd12.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;A:1;MX:1; received-spf: None (protection.outlook.com: amd.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: IfaDoz4Kviv3gM4EkDs1mXE+8ypj42HvymQVkUtNzi8zC37wGZWHe8Y3Mna+sj/7JMGse0tOu8TYwjQwYdKuk806D7HYLMA9dryFQH3PRvvfH021w8pPi2fGIKz2T4e6/t2TLrUPp5H6jeoahhPudvf1KQj150rHf+GO7V/qQ7P0bMAAos0KMaOMh47xN5Oyl7iDJsE2ln/elsCKvr7B0fhn5hEtfcJ+dIsr+8jpBu+96aeJGPWNtitR8iQ2gy1sal5QZcl6w84ml2pk8EH4ar42XZ8XqqUn2dxAV1DrU0+FKojPFT5BgoR34SAoShiemxiRr64X9mEnfBwr146d7+5+ZPxU1F7C0C+8Z163KyvRxTYoVpqzoKh8MAw0IVmqAnWlqpz0NYkHRB+S2gx+AdDEIgTnD9PA/WE4pqU7Aus= MIME-Version: 1.0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 95904793-bca9-4be3-1ead-08d70fa64ef4 X-MS-Exchange-CrossTenant-originalarrivaltime: 23 Jul 2019 19:45:26.8448 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: sbrijesh@amd.com X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB3900 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-ID: <880FB262F984EF44828FE820038BA1F0@namprd12.prod.outlook.com> Content-Transfer-Encoding: base64 DQoNCk9uIDcvMjMvMTkgMjo0OCBBTSwgTGFzemxvIEVyc2VrIHdyb3RlOg0KPiAoKyBCcmlqZXNo LCBhbmQgb25lIGNvbW1lbnQgYmVsb3cpDQo+IA0KPiBPbiAwNy8yMy8xOSAwNDowNSwgV3UsIEhh byBBIHdyb3RlOg0KPj4+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+Pj4gRnJvbTogZGV2 ZWxAZWRrMi5ncm91cHMuaW8gW21haWx0bzpkZXZlbEBlZGsyLmdyb3Vwcy5pb10gT24gQmVoYWxm IE9mIE5pLA0KPj4+IFJheQ0KPj4+IFNlbnQ6IE1vbmRheSwgSnVseSAyMiwgMjAxOSA0OjE2IFBN DQo+Pj4gVG86IGRldmVsQGVkazIuZ3JvdXBzLmlvDQo+Pj4gQ2M6IERvbmcsIEVyaWM7IExhc3ps byBFcnNlaw0KPj4+IFN1YmplY3Q6IFtlZGsyLWRldmVsXSBbUEFUQ0ggNC80XSBNZGVNb2R1bGVQ a2cvRHhlSXBsOiBDcmVhdGUgNS1sZXZlbA0KPj4+IHBhZ2UgdGFibGUgZm9yIGxvbmcgbW9kZQ0K Pj4+DQo+Pj4gUkVGOiBodHRwczovL2J1Z3ppbGxhLnRpYW5vY29yZS5vcmcvc2hvd19idWcuY2dp P2lkPTIwMDgNCj4+Pg0KPj4+IER4ZUlwbCBpcyByZXNwb25zaWJsZSB0byBjcmVhdGUgcGFnZSB0 YWJsZSBmb3IgRFhFIHBoYXNlIHJ1bm5pbmcNCj4+PiBlaXRoZXIgaW4gbG9uZyBtb2RlIG9yIGlu IDMyYml0IG1vZGUgd2l0aCBjZXJ0YWluIHByb3RlY3Rpb24NCj4+PiBtZWNoYW5pc20gZW5hYmxl ZCAocmVmZXIgdG8gVG9CdWlsZFBhZ2VUYWJsZSgpKS4NCj4+Pg0KPj4+IFRoZSBwYXRjaCB1cGRh dGVzIER4ZUlwbCB0byBjcmVhdGUgNS1sZXZlbCBwYWdlIHRhYmxlIGZvciBEWEUgcGhhc2UNCj4+ PiBydW5uaW5nIGluIGxvbmcgbW9kZSB3aGVuIFBjZFVzZTVMZXZlbFBhZ2VUYWJsZSBpcyBUUlVF IGFuZCBDUFUNCj4+PiBzdXBwb3J0cyA1LWxldmVsIHBhZ2UgdGFibGUuDQo+Pj4NCj4+PiBTaWdu ZWQtb2ZmLWJ5OiBSYXkgTmkgPHJheS5uaUBpbnRlbC5jb20+DQo+Pj4gQ2M6IEVyaWMgRG9uZyA8 ZXJpYy5kb25nQGludGVsLmNvbT4NCj4+PiBDYzogTGFzemxvIEVyc2VrIDxsZXJzZWtAcmVkaGF0 LmNvbT4NCj4+PiAtLS0NCj4+PiAgIE1kZU1vZHVsZVBrZy9Db3JlL0R4ZUlwbFBlaW0vRHhlSXBs LmluZiAgICAgICB8ICAgMSArDQo+Pj4gICAuLi4vQ29yZS9EeGVJcGxQZWltL1g2NC9WaXJ0dWFs TWVtb3J5LmMgICAgICAgfCAyMjcgKysrKysrKysrKysrLS0tLS0tDQo+Pj4gICAyIGZpbGVzIGNo YW5nZWQsIDE1MSBpbnNlcnRpb25zKCspLCA3NyBkZWxldGlvbnMoLSkNCj4+Pg0KPj4+IGRpZmYg LS1naXQgYS9NZGVNb2R1bGVQa2cvQ29yZS9EeGVJcGxQZWltL0R4ZUlwbC5pbmYNCj4+PiBiL01k ZU1vZHVsZVBrZy9Db3JlL0R4ZUlwbFBlaW0vRHhlSXBsLmluZg0KPj4+IGluZGV4IGFiYzMyMTdi MDEuLjk4YmMxN2ZjOWQgMTAwNjQ0DQo+Pj4gLS0tIGEvTWRlTW9kdWxlUGtnL0NvcmUvRHhlSXBs UGVpbS9EeGVJcGwuaW5mDQo+Pj4gKysrIGIvTWRlTW9kdWxlUGtnL0NvcmUvRHhlSXBsUGVpbS9E eGVJcGwuaW5mDQo+Pj4gQEAgLTExMCw2ICsxMTAsNyBAQCBbUGNkLklBMzIsUGNkLlg2NF0NCj4+ Pg0KPj4+IGdFZmlNZGVNb2R1bGVQa2dUb2tlblNwYWNlR3VpZC5QY2ROdWxsUG9pbnRlckRldGVj dGlvblByb3BlcnR5TWFzaw0KPj4+ICMjIENPTlNVTUVTDQo+Pj4gICAgIGdFZmlNZGVNb2R1bGVQ a2dUb2tlblNwYWNlR3VpZC5QY2RIZWFwR3VhcmRQcm9wZXJ0eU1hc2sNCj4+PiAjIyBDT05TVU1F Uw0KPj4+ICAgICBnRWZpTWRlTW9kdWxlUGtnVG9rZW5TcGFjZUd1aWQuUGNkQ3B1U3RhY2tHdWFy ZCAgICAgICAgICAgICAgICAgICAgICAgIyMNCj4+PiBDT05TVU1FUw0KPj4+ICsgIGdFZmlNZGVN b2R1bGVQa2dUb2tlblNwYWNlR3VpZC5QY2RVc2U1TGV2ZWxQYWdlVGFibGUgICAgICAgICAgICAg ICAgICAjIw0KPj4+IFNPTUVUSU1FU19DT05TVU1FUw0KPj4+DQo+Pj4gICBbUGNkLklBMzIsUGNk Llg2NCxQY2QuQVJNLFBjZC5BQVJDSDY0XQ0KPj4+ICAgICBnRWZpTWRlTW9kdWxlUGtnVG9rZW5T cGFjZUd1aWQuUGNkU2V0TnhGb3JTdGFjayAgICAgICAgICAgICAgICMjDQo+Pj4gU09NRVRJTUVT X0NPTlNVTUVTDQo+Pj4gZGlmZiAtLWdpdCBhL01kZU1vZHVsZVBrZy9Db3JlL0R4ZUlwbFBlaW0v WDY0L1ZpcnR1YWxNZW1vcnkuYw0KPj4+IGIvTWRlTW9kdWxlUGtnL0NvcmUvRHhlSXBsUGVpbS9Y NjQvVmlydHVhbE1lbW9yeS5jDQo+Pj4gaW5kZXggZWRjMzhlNDUyNS4uYTViY2RjYzczNCAxMDA2 NDQNCj4+PiAtLS0gYS9NZGVNb2R1bGVQa2cvQ29yZS9EeGVJcGxQZWltL1g2NC9WaXJ0dWFsTWVt b3J5LmMNCj4+PiArKysgYi9NZGVNb2R1bGVQa2cvQ29yZS9EeGVJcGxQZWltL1g2NC9WaXJ0dWFs TWVtb3J5LmMNCj4+PiBAQCAtMTUsNyArMTUsNyBAQA0KPj4+ICAgICAgIDIpIElBLTMyIEludGVs KFIpIEFyY2hpdGVjdHVyZSBTb2Z0d2FyZSBEZXZlbG9wZXIncyBNYW51YWwgVm9sdW1lDQo+Pj4g MjpJbnN0cnVjdGlvbiBTZXQgUmVmZXJlbmNlLCBJbnRlbA0KPj4+ICAgICAgIDMpIElBLTMyIElu dGVsKFIpIEFyY2hpdGVjdHVyZSBTb2Z0d2FyZSBEZXZlbG9wZXIncyBNYW51YWwgVm9sdW1lDQo+ Pj4gMzpTeXN0ZW0gUHJvZ3JhbW1lcidzIEd1aWRlLCBJbnRlbA0KPj4+DQo+Pj4gLUNvcHlyaWdo dCAoYykgMjAwNiAtIDIwMTgsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVk LjxCUj4NCj4+PiArQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAxOSwgSW50ZWwgQ29ycG9yYXRpb24u IEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPj4+ICAgQ29weXJpZ2h0IChjKSAyMDE3LCBBTUQg SW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4+Pg0KPj4+ICAgU1BEWC1M aWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCj4+PiBAQCAtNjI2LDE0ICs2 MjYsMTkgQEAgQ3JlYXRlSWRlbnRpdHlNYXBwaW5nUGFnZVRhYmxlcyAoDQo+Pj4gICAgICkNCj4+ PiAgIHsNCj4+PiAgICAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFJlZ0VheDsNCj4+PiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUmVnRWJ4Ow0KPj4+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBSZWdFY3g7DQo+Pj4gICAgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBSZWdFZHg7DQo+Pj4gICAgIFVJTlQ4ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQaHlzaWNhbEFkZHJlc3NCaXRzOw0KPj4+ICAgICBF RklfUEhZU0lDQUxfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgUGFnZUFkZHJlc3M7 DQo+Pj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElu ZGV4T2ZQbWw1RW50cmllczsNCj4+PiAgICAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEluZGV4T2ZQbWw0RW50cmllczsNCj4+PiAgICAgVUlOVE4gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4T2ZQZHBFbnRyaWVzOw0KPj4+ ICAgICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXhP ZlBhZ2VEaXJlY3RvcnlFbnRyaWVzOw0KPj4+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBOdW1iZXJPZlBtbDVFbnRyaWVzTmVlZGVkOw0KPj4+ICAgICBV SU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyT2ZQbWw0 RW50cmllc05lZWRlZDsNCj4+PiAgICAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIE51bWJlck9mUGRwRW50cmllc05lZWRlZDsNCj4+PiArICBQQUdFX01BUF9B TkRfRElSRUNUT1JZX1BPSU5URVIgICAgICAgICAgICAgICAgKlBhZ2VNYXBMZXZlbDVFbnRyeTsN Cj4+PiAgICAgUEFHRV9NQVBfQU5EX0RJUkVDVE9SWV9QT0lOVEVSICAgICAgICAgICAgICAgICpQ YWdlTWFwTGV2ZWw0RW50cnk7DQo+Pj4gICAgIFBBR0VfTUFQX0FORF9ESVJFQ1RPUllfUE9JTlRF UiAgICAgICAgICAgICAgICAqUGFnZU1hcDsNCj4+PiAgICAgUEFHRV9NQVBfQU5EX0RJUkVDVE9S WV9QT0lOVEVSDQo+Pj4gKlBhZ2VEaXJlY3RvcnlQb2ludGVyRW50cnk7DQo+Pj4gQEAgLTY0MSw5 ICs2NDYsMTEgQEAgQ3JlYXRlSWRlbnRpdHlNYXBwaW5nUGFnZVRhYmxlcyAoDQo+Pj4gICAgIFVJ TlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUb3RhbFBhZ2VzTnVt Ow0KPj4+ICAgICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg QmlnUGFnZUFkZHJlc3M7DQo+Pj4gICAgIFZPSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAqSG9iOw0KPj4+ICsgIEJPT0xFQU4gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQYWdlNUxldmVsU3VwcG9ydDsNCj4+PiAgICAgQk9PTEVBTiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhZ2UxR1N1cHBvcnQ7DQo+Pj4gICAg IFBBR0VfVEFCTEVfMUdfRU5UUlkgICAgICAgICAgICAgICAgICAgICAgICAgICAqUGFnZURpcmVj dG9yeTFHRW50cnk7DQo+Pj4gICAgIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBBZGRyZXNzRW5jTWFzazsNCj4+PiArICBJQTMyX0NSNCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgQ3I0Ow0KPj4+DQo+Pj4gICAgIC8vDQo+Pj4gICAgIC8v IE1ha2Ugc3VyZSBBZGRyZXNzRW5jTWFzayBpcyBjb250YWluZWQgdG8gc21hbGxlc3Qgc3VwcG9y dGVkIGFkZHJlc3MNCj4+PiBmaWVsZA0KPj4+IEBAIC02NzcsMzMgKzY4NCw2NiBAQCBDcmVhdGVJ ZGVudGl0eU1hcHBpbmdQYWdlVGFibGVzICgNCj4+PiAgICAgICB9DQo+Pj4gICAgIH0NCj4+Pg0K Pj4+ICsgIFBhZ2U1TGV2ZWxTdXBwb3J0ID0gRkFMU0U7DQo+Pj4gKyAgaWYgKFBjZEdldEJvb2wg KFBjZFVzZTVMZXZlbFBhZ2VUYWJsZSkpIHsNCj4+PiArICAgIEFzbUNwdWlkRXggKDB4NywgMCwg JlJlZ0VheCwgJlJlZ0VieCwgJlJlZ0VjeCwgJlJlZ0VkeCk7DQo+Pj4gKyAgICBERUJVRyAoKERF QlVHX0lORk8sICJDcHVpZCg3LzApOiAlMDh4LyUwOHgvJTA4eC8lMDh4XG4iLCBSZWdFYXgsDQo+ Pj4gUmVnRWJ4LCBSZWdFY3gsIFJlZ0VkeCkpOw0KPj4+ICsgICAgaWYgKChSZWdFY3ggJiBCSVQx NikgIT0gMCkgew0KPj4+ICsgICAgICBQYWdlNUxldmVsU3VwcG9ydCA9IFRSVUU7DQo+Pj4gKyAg ICB9DQo+Pj4gKyAgfQ0KPj4+ICsNCj4+PiArICBERUJVRyAoKERFQlVHX0lORk8sICJBZGRyZXNz Qml0cy81TGV2ZWxQYWdpbmcvMUdQYWdlDQo+Pj4gPSAlZC8lZC8lZFxuIiwgUGh5c2ljYWxBZGRy ZXNzQml0cywgUGFnZTVMZXZlbFN1cHBvcnQsIFBhZ2UxR1N1cHBvcnQpKTsNCj4+PiArDQo+Pj4g ICAgIC8vDQo+Pj4gLSAgLy8gSUEtMzJlIHBhZ2luZyB0cmFuc2xhdGVzIDQ4LWJpdCBsaW5lYXIg YWRkcmVzc2VzIHRvIDUyLWJpdCBwaHlzaWNhbA0KPj4+IGFkZHJlc3Nlcy4NCj4+PiArICAvLyBJ QS0zMmUgcGFnaW5nIHRyYW5zbGF0ZXMgNDgtYml0IGxpbmVhciBhZGRyZXNzZXMgdG8gNTItYml0 IHBoeXNpY2FsDQo+Pj4gYWRkcmVzc2VzDQo+Pj4gKyAgLy8gIHdoZW4gNS1MZXZlbCBQYWdpbmcg aXMgZGlzYWJsZWQsDQo+Pj4gKyAgLy8gIGR1ZSB0byBlaXRoZXIgdW5zdXBwb3J0ZWQgYnkgSFcs IG9yIGRpc2FibGVkIGJ5IFBDRC4NCj4+PiAgICAgLy8NCj4+PiAgICAgQVNTRVJUIChQaHlzaWNh bEFkZHJlc3NCaXRzIDw9IDUyKTsNCj4+PiAtICBpZiAoUGh5c2ljYWxBZGRyZXNzQml0cyA+IDQ4 KSB7DQo+Pj4gKyAgaWYgKCFQYWdlNUxldmVsU3VwcG9ydCAmJiBQaHlzaWNhbEFkZHJlc3NCaXRz ID4gNDgpIHsNCj4+PiAgICAgICBQaHlzaWNhbEFkZHJlc3NCaXRzID0gNDg7DQo+Pj4gICAgIH0N Cj4+Pg0KPj4+ICAgICAvLw0KPj4+ICAgICAvLyBDYWxjdWxhdGUgdGhlIHRhYmxlIGVudHJpZXMg bmVlZGVkLg0KPj4+ICAgICAvLw0KPj4+IC0gIGlmIChQaHlzaWNhbEFkZHJlc3NCaXRzIDw9IDM5 ICkgew0KPj4+IC0gICAgTnVtYmVyT2ZQbWw0RW50cmllc05lZWRlZCA9IDE7DQo+Pj4gLSAgICBO dW1iZXJPZlBkcEVudHJpZXNOZWVkZWQgPSAoVUlOVDMyKUxTaGlmdFU2NCAoMSwNCj4+PiAoUGh5 c2ljYWxBZGRyZXNzQml0cyAtIDMwKSk7DQo+Pj4gLSAgfSBlbHNlIHsNCj4+PiAtICAgIE51bWJl ck9mUG1sNEVudHJpZXNOZWVkZWQgPSAoVUlOVDMyKUxTaGlmdFU2NCAoMSwNCj4+PiAoUGh5c2lj YWxBZGRyZXNzQml0cyAtIDM5KSk7DQo+Pj4gLSAgICBOdW1iZXJPZlBkcEVudHJpZXNOZWVkZWQg PSA1MTI7DQo+Pj4gKyAgTnVtYmVyT2ZQbWw1RW50cmllc05lZWRlZCA9IDE7DQo+Pj4gKyAgaWYg KFBoeXNpY2FsQWRkcmVzc0JpdHMgPiA0OCkgew0KPj4+ICsgICAgTnVtYmVyT2ZQbWw1RW50cmll c05lZWRlZCA9IChVSU5UMzIpIExTaGlmdFU2NCAoMSwNCj4+PiBQaHlzaWNhbEFkZHJlc3NCaXRz IC0gNDgpOw0KPj4+ICsgICAgUGh5c2ljYWxBZGRyZXNzQml0cyA9IDQ4Ow0KPj4+ICAgICB9DQo+ Pj4NCj4+PiArICBOdW1iZXJPZlBtbDRFbnRyaWVzTmVlZGVkID0gMTsNCj4+PiArICBpZiAoUGh5 c2ljYWxBZGRyZXNzQml0cyA+IDM5KSB7DQo+Pj4gKyAgICBOdW1iZXJPZlBtbDRFbnRyaWVzTmVl ZGVkID0gKFVJTlQzMikgTFNoaWZ0VTY0ICgxLA0KPj4+IFBoeXNpY2FsQWRkcmVzc0JpdHMgLSAz OSk7DQo+Pj4gKyAgICBQaHlzaWNhbEFkZHJlc3NCaXRzID0gMzk7DQo+Pj4gKyAgfQ0KPj4+ICsN Cj4+PiArICBOdW1iZXJPZlBkcEVudHJpZXNOZWVkZWQgPSAxOw0KPj4+ICsgIEFTU0VSVCAoUGh5 c2ljYWxBZGRyZXNzQml0cyA+IDMwKTsNCj4+PiArICBOdW1iZXJPZlBkcEVudHJpZXNOZWVkZWQg PSAoVUlOVDMyKSBMU2hpZnRVNjQgKDEsIFBoeXNpY2FsQWRkcmVzc0JpdHMNCj4+PiAtIDMwKTsN Cj4+PiArDQo+Pj4gICAgIC8vDQo+Pj4gICAgIC8vIFByZS1hbGxvY2F0ZSBiaWcgcGFnZXMgdG8g YXZvaWQgbGF0ZXIgYWxsb2NhdGlvbnMuDQo+Pj4gICAgIC8vDQo+Pj4gICAgIGlmICghUGFnZTFH U3VwcG9ydCkgew0KPj4+IC0gICAgVG90YWxQYWdlc051bSA9IChOdW1iZXJPZlBkcEVudHJpZXNO ZWVkZWQgKyAxKSAqDQo+Pj4gTnVtYmVyT2ZQbWw0RW50cmllc05lZWRlZCArIDE7DQo+Pj4gKyAg ICBUb3RhbFBhZ2VzTnVtID0gKChOdW1iZXJPZlBkcEVudHJpZXNOZWVkZWQgKyAxKSAqDQo+Pj4g TnVtYmVyT2ZQbWw0RW50cmllc05lZWRlZCArIDEpICogTnVtYmVyT2ZQbWw1RW50cmllc05lZWRl ZCArIDE7DQo+Pj4gICAgIH0gZWxzZSB7DQo+Pj4gLSAgICBUb3RhbFBhZ2VzTnVtID0gTnVtYmVy T2ZQbWw0RW50cmllc05lZWRlZCArIDE7DQo+Pj4gKyAgICBUb3RhbFBhZ2VzTnVtID0gKE51bWJl ck9mUG1sNEVudHJpZXNOZWVkZWQgKyAxKSAqDQo+Pj4gTnVtYmVyT2ZQbWw1RW50cmllc05lZWRl ZCArIDE7DQo+Pj4gKyAgfQ0KPj4+ICsNCj4+PiArICAvLw0KPj4+ICsgIC8vIFN1YnN0cmFjdCB0 aGUgb25lIHBhZ2Ugb2NjdXBpZWQgYnkgUE1MNSBlbnRyaWVzIGlmIDUtTGV2ZWwgUGFnaW5nIGlz DQo+Pj4gZGlzYWJsZWQuDQo+Pj4gKyAgLy8NCj4+PiArICBpZiAoIVBhZ2U1TGV2ZWxTdXBwb3J0 KSB7DQo+Pj4gKyAgICBUb3RhbFBhZ2VzTnVtLS07DQo+Pj4gICAgIH0NCj4+PiArDQo+Pj4gKyAg REVCVUcgKChERUJVR19JTkZPLCAiUG1sNS9QbWw0L1BkcC9Ub3RhbFBhZ2UgPSAlZC8lZC8lZC8l ZFxuIiwNCj4+PiArICAgIE51bWJlck9mUG1sNUVudHJpZXNOZWVkZWQsIE51bWJlck9mUG1sNEVu dHJpZXNOZWVkZWQsDQo+Pj4gKyAgICBOdW1iZXJPZlBkcEVudHJpZXNOZWVkZWQsIFRvdGFsUGFn ZXNOdW0pKTsNCj4+PiArDQo+Pj4gICAgIEJpZ1BhZ2VBZGRyZXNzID0gKFVJTlROKSBBbGxvY2F0 ZVBhZ2VUYWJsZU1lbW9yeSAoVG90YWxQYWdlc051bSk7DQo+Pj4gICAgIEFTU0VSVCAoQmlnUGFn ZUFkZHJlc3MgIT0gMCk7DQo+Pj4NCj4+PiBAQCAtNzExLDkyICs3NTEsMTI1IEBAIENyZWF0ZUlk ZW50aXR5TWFwcGluZ1BhZ2VUYWJsZXMgKA0KPj4+ICAgICAvLyBCeSBhcmNoaXRlY3R1cmUgb25s eSBvbmUgUGFnZU1hcExldmVsNCBleGlzdHMgLSBzbyBsZXRzIGFsbG9jYXRlIHN0b3JhZ2UNCj4+ PiBmb3IgaXQuDQo+Pj4gICAgIC8vDQo+Pj4gICAgIFBhZ2VNYXAgICAgICAgICA9IChWT0lEICop IEJpZ1BhZ2VBZGRyZXNzOw0KPj4+IC0gIEJpZ1BhZ2VBZGRyZXNzICs9IFNJWkVfNEtCOw0KPj4+ IC0NCj4+PiAtICBQYWdlTWFwTGV2ZWw0RW50cnkgPSBQYWdlTWFwOw0KPj4+IC0gIFBhZ2VBZGRy ZXNzICAgICAgICA9IDA7DQo+Pj4gLSAgZm9yIChJbmRleE9mUG1sNEVudHJpZXMgPSAwOyBJbmRl eE9mUG1sNEVudHJpZXMgPA0KPj4+IE51bWJlck9mUG1sNEVudHJpZXNOZWVkZWQ7IEluZGV4T2ZQ bWw0RW50cmllcysrLA0KPj4+IFBhZ2VNYXBMZXZlbDRFbnRyeSsrKSB7DQo+Pj4gKyAgaWYgKFBh Z2U1TGV2ZWxTdXBwb3J0KSB7DQo+Pj4gICAgICAgLy8NCj4+PiAtICAgIC8vIEVhY2ggUE1MNCBl bnRyeSBwb2ludHMgdG8gYSBwYWdlIG9mIFBhZ2UgRGlyZWN0b3J5IFBvaW50ZXIgZW50aXJlcy4N Cj4+PiAtICAgIC8vIFNvIGxldHMgYWxsb2NhdGUgc3BhY2UgZm9yIHRoZW0gYW5kIGZpbGwgdGhl bSBpbiBpbiB0aGUgSW5kZXhPZlBkcEVudHJpZXMNCj4+PiBsb29wLg0KPj4+ICsgICAgLy8gQnkg YXJjaGl0ZWN0dXJlIG9ubHkgb25lIFBhZ2VNYXBMZXZlbDUgZXhpc3RzIC0gc28gbGV0cyBhbGxv Y2F0ZSBzdG9yYWdlDQo+Pj4gZm9yIGl0Lg0KPj4+ICAgICAgIC8vDQo+Pj4gLSAgICBQYWdlRGly ZWN0b3J5UG9pbnRlckVudHJ5ID0gKFZPSUQgKikgQmlnUGFnZUFkZHJlc3M7DQo+Pj4gLSAgICBC aWdQYWdlQWRkcmVzcyArPSBTSVpFXzRLQjsNCj4+PiArICAgIFBhZ2VNYXBMZXZlbDVFbnRyeSA9 IFBhZ2VNYXA7DQo+Pj4gKyAgICBCaWdQYWdlQWRkcmVzcyAgICArPSBTSVpFXzRLQjsNCj4+PiAr ICB9DQo+Pj4gKyAgUGFnZUFkZHJlc3MgICAgICAgID0gMDsNCj4+Pg0KPj4+ICsgIGZvciAoIElu ZGV4T2ZQbWw1RW50cmllcyA9IDANCj4+PiArICAgICAgOyBJbmRleE9mUG1sNUVudHJpZXMgPCBO dW1iZXJPZlBtbDVFbnRyaWVzTmVlZGVkDQo+Pj4gKyAgICAgIDsgSW5kZXhPZlBtbDVFbnRyaWVz KyssIFBhZ2VNYXBMZXZlbDVFbnRyeSsrKSB7DQo+Pj4gICAgICAgLy8NCj4+PiAtICAgIC8vIE1h a2UgYSBQTUw0IEVudHJ5DQo+Pj4gKyAgICAvLyBFYWNoIFBNTDUgZW50cnkgcG9pbnRzIHRvIGEg cGFnZSBvZiBQTUw0IGVudGlyZXMuDQo+Pj4gKyAgICAvLyBTbyBsZXRzIGFsbG9jYXRlIHNwYWNl IGZvciB0aGVtIGFuZCBmaWxsIHRoZW0gaW4gaW4gdGhlDQo+Pj4gSW5kZXhPZlBtbDRFbnRyaWVz IGxvb3AuDQo+Pj4gKyAgICAvLyBXaGVuIDUtTGV2ZWwgUGFnaW5nIGlzIGRpc2FibGVkLCBiZWxv dyBhbGxvY2F0aW9uIGhhcHBlbnMgb25seSBvbmNlLg0KPj4+ICAgICAgIC8vDQo+Pj4gLSAgICBQ YWdlTWFwTGV2ZWw0RW50cnktPlVpbnQ2NCA9DQo+Pj4gKFVJTlQ2NCkoVUlOVE4pUGFnZURpcmVj dG9yeVBvaW50ZXJFbnRyeSB8IEFkZHJlc3NFbmNNYXNrOw0KPj4+IC0gICAgUGFnZU1hcExldmVs NEVudHJ5LT5CaXRzLlJlYWRXcml0ZSA9IDE7DQo+Pj4gLSAgICBQYWdlTWFwTGV2ZWw0RW50cnkt PkJpdHMuUHJlc2VudCA9IDE7DQo+Pj4gKyAgICBQYWdlTWFwTGV2ZWw0RW50cnkgPSAoVk9JRCAq KSBCaWdQYWdlQWRkcmVzczsNCj4+PiArICAgIEJpZ1BhZ2VBZGRyZXNzICAgICs9IFNJWkVfNEtC Ow0KPj4+DQo+Pj4gLSAgICBpZiAoUGFnZTFHU3VwcG9ydCkgew0KPj4+IC0gICAgICBQYWdlRGly ZWN0b3J5MUdFbnRyeSA9IChWT0lEICopIFBhZ2VEaXJlY3RvcnlQb2ludGVyRW50cnk7DQo+Pj4g KyAgICBpZiAoUGFnZTVMZXZlbFN1cHBvcnQpIHsNCj4+PiArICAgICAgLy8NCj4+PiArICAgICAg Ly8gTWFrZSBhIFBNTDUgRW50cnkNCj4+PiArICAgICAgLy8NCj4+PiArICAgICAgUGFnZU1hcExl dmVsNUVudHJ5LT5VaW50NjQgPSAoVUlOVDY0KSAoVUlOVE4pIFBhZ2VNYXBMZXZlbDRFbnRyeTsN Cj4+DQo+Pg0KPj4gSGVsbG8sDQo+Pg0KPj4gRG8gd2UgbmVlZCB0byBiaXR3aXNlLW9yIHdpdGgg J0FkZHJlc3NFbmNNYXNrJyBoZXJlPw0KPiANCj4gSW5kZWVkIGl0IGNyb3NzZWQgbXkgbWluZCBo b3cgdGhpcyBleHRlbnNpb24gaW50ZXJzZWN0cyB3aXRoIFNFVi4NCj4gDQo+IEkgZGlkbid0IGFz ayB0aGUgcXVlc3Rpb24gbXlzZWxmIGJlY2F1c2UgSSB0aG91Z2h0IDUtbGV2ZWwgcGFnaW5nIGRp ZG4ndA0KPiBhcHBseSB0byB0aGUgQU1EIHByb2Nlc3NvcnMgdGhhdCBzdXBwb3J0ZWQgU0VWLiBC dXQgbWF5YmUgd2Ugc2hvdWxkDQo+IGZpZ3VyZSB0aGF0IG91dCBub3cgcmVnYXJkbGVzcy4NCj4g DQoNCldlIHNob3VsZCBhcHBseSB0aGUgUEFHRV9FTkMgbWFzayB3aGlsZSBjcmVhdGluZyB0aGUg NS1sZXZlbCBwZ3RhYmxlDQplbnRyaWVzIChzaW1pbGFyIHRvIHdoYXQgd2UgZG8gdG9kYXkpLiBU aGUgY3VycmVudCBhdmFpbGFibGUgcHJvY2Vzc29yDQp3aGljaCBzdXBwb3J0IFNFViBkb2VzIG5v dCBzdXBwb3J0IDUtbGV2ZWwgcGd0YWJsZSBidXQgSSBleHBlY3QgdGhpbmdzDQp3aWxsIGNoYW5n ZSBpbiBmdXR1cmUgZ2VuZXJhdGlvbi4NCg0KLUJyaWplc2gNCg0KPiBUaGFua3MNCj4gTGFzemxv DQo+IA0KPj4gQmVzdCBSZWdhcmRzLA0KPj4gSGFvIFd1DQo+Pg0KPj4NCj4+PiArICAgICAgUGFn ZU1hcExldmVsNUVudHJ5LT5CaXRzLlJlYWRXcml0ZSA9IDE7DQo+Pj4gKyAgICAgIFBhZ2VNYXBM ZXZlbDVFbnRyeS0+Qml0cy5QcmVzZW50ICAgPSAxOw0KPj4+ICsgICAgfQ0KPj4+DQo+Pj4gLSAg ICAgIGZvciAoSW5kZXhPZlBhZ2VEaXJlY3RvcnlFbnRyaWVzID0gMDsgSW5kZXhPZlBhZ2VEaXJl Y3RvcnlFbnRyaWVzIDwgNTEyOw0KPj4+IEluZGV4T2ZQYWdlRGlyZWN0b3J5RW50cmllcysrLCBQ YWdlRGlyZWN0b3J5MUdFbnRyeSsrLCBQYWdlQWRkcmVzcyArPQ0KPj4+IFNJWkVfMUdCKSB7DQo+ Pj4gLSAgICAgICAgaWYgKFRvU3BsaXRQYWdlVGFibGUgKFBhZ2VBZGRyZXNzLCBTSVpFXzFHQiwg U3RhY2tCYXNlLCBTdGFja1NpemUpKSB7DQo+Pj4gLSAgICAgICAgICBTcGxpdDFHUGFnZVRvMk0g KFBhZ2VBZGRyZXNzLCAoVUlOVDY0ICopIFBhZ2VEaXJlY3RvcnkxR0VudHJ5LA0KPj4+IFN0YWNr QmFzZSwgU3RhY2tTaXplKTsNCj4+PiAtICAgICAgICB9IGVsc2Ugew0KPj4+IC0gICAgICAgICAg Ly8NCj4+PiAtICAgICAgICAgIC8vIEZpbGwgaW4gdGhlIFBhZ2UgRGlyZWN0b3J5IGVudHJpZXMN Cj4+PiAtICAgICAgICAgIC8vDQo+Pj4gLSAgICAgICAgICBQYWdlRGlyZWN0b3J5MUdFbnRyeS0+ VWludDY0ID0gKFVJTlQ2NClQYWdlQWRkcmVzcyB8DQo+Pj4gQWRkcmVzc0VuY01hc2s7DQo+Pj4g LSAgICAgICAgICBQYWdlRGlyZWN0b3J5MUdFbnRyeS0+Qml0cy5SZWFkV3JpdGUgPSAxOw0KPj4+ IC0gICAgICAgICAgUGFnZURpcmVjdG9yeTFHRW50cnktPkJpdHMuUHJlc2VudCA9IDE7DQo+Pj4g LSAgICAgICAgICBQYWdlRGlyZWN0b3J5MUdFbnRyeS0+Qml0cy5NdXN0QmUxID0gMTsNCj4+PiAt ICAgICAgICB9DQo+Pj4gLSAgICAgIH0NCj4+PiAtICAgIH0gZWxzZSB7DQo+Pj4gLSAgICAgIGZv ciAoSW5kZXhPZlBkcEVudHJpZXMgPSAwOyBJbmRleE9mUGRwRW50cmllcyA8DQo+Pj4gTnVtYmVy T2ZQZHBFbnRyaWVzTmVlZGVkOyBJbmRleE9mUGRwRW50cmllcysrLA0KPj4+IFBhZ2VEaXJlY3Rv cnlQb2ludGVyRW50cnkrKykgew0KPj4+IC0gICAgICAgIC8vDQo+Pj4gLSAgICAgICAgLy8gRWFj aCBEaXJlY3RvcnkgUG9pbnRlciBlbnRyaWVzIHBvaW50cyB0byBhIHBhZ2Ugb2YgUGFnZSBEaXJl Y3RvcnkNCj4+PiBlbnRpcmVzLg0KPj4+IC0gICAgICAgIC8vIFNvIGFsbG9jYXRlIHNwYWNlIGZv ciB0aGVtIGFuZCBmaWxsIHRoZW0gaW4gaW4gdGhlDQo+Pj4gSW5kZXhPZlBhZ2VEaXJlY3RvcnlF bnRyaWVzIGxvb3AuDQo+Pj4gLSAgICAgICAgLy8NCj4+PiAtICAgICAgICBQYWdlRGlyZWN0b3J5 RW50cnkgPSAoVk9JRCAqKSBCaWdQYWdlQWRkcmVzczsNCj4+PiAtICAgICAgICBCaWdQYWdlQWRk cmVzcyArPSBTSVpFXzRLQjsNCj4+PiArICAgIGZvciAoIEluZGV4T2ZQbWw0RW50cmllcyA9IDAN Cj4+PiArICAgICAgICA7IEluZGV4T2ZQbWw0RW50cmllcyA8IChOdW1iZXJPZlBtbDVFbnRyaWVz TmVlZGVkID09IDEgPw0KPj4+IE51bWJlck9mUG1sNEVudHJpZXNOZWVkZWQgOiA1MTIpDQo+Pj4g KyAgICAgICAgOyBJbmRleE9mUG1sNEVudHJpZXMrKywgUGFnZU1hcExldmVsNEVudHJ5KyspIHsN Cj4+PiArICAgICAgLy8NCj4+PiArICAgICAgLy8gRWFjaCBQTUw0IGVudHJ5IHBvaW50cyB0byBh IHBhZ2Ugb2YgUGFnZSBEaXJlY3RvcnkgUG9pbnRlciBlbnRpcmVzLg0KPj4+ICsgICAgICAvLyBT byBsZXRzIGFsbG9jYXRlIHNwYWNlIGZvciB0aGVtIGFuZCBmaWxsIHRoZW0gaW4gaW4gdGhlDQo+ Pj4gSW5kZXhPZlBkcEVudHJpZXMgbG9vcC4NCj4+PiArICAgICAgLy8NCj4+PiArICAgICAgUGFn ZURpcmVjdG9yeVBvaW50ZXJFbnRyeSA9IChWT0lEICopIEJpZ1BhZ2VBZGRyZXNzOw0KPj4+ICsg ICAgICBCaWdQYWdlQWRkcmVzcyArPSBTSVpFXzRLQjsNCj4+Pg0KPj4+IC0gICAgICAgIC8vDQo+ Pj4gLSAgICAgICAgLy8gRmlsbCBpbiBhIFBhZ2UgRGlyZWN0b3J5IFBvaW50ZXIgRW50cmllcw0K Pj4+IC0gICAgICAgIC8vDQo+Pj4gLSAgICAgICAgUGFnZURpcmVjdG9yeVBvaW50ZXJFbnRyeS0+ VWludDY0ID0NCj4+PiAoVUlOVDY0KShVSU5UTilQYWdlRGlyZWN0b3J5RW50cnkgfCBBZGRyZXNz RW5jTWFzazsNCj4+PiAtICAgICAgICBQYWdlRGlyZWN0b3J5UG9pbnRlckVudHJ5LT5CaXRzLlJl YWRXcml0ZSA9IDE7DQo+Pj4gLSAgICAgICAgUGFnZURpcmVjdG9yeVBvaW50ZXJFbnRyeS0+Qml0 cy5QcmVzZW50ID0gMTsNCj4+PiArICAgICAgLy8NCj4+PiArICAgICAgLy8gTWFrZSBhIFBNTDQg RW50cnkNCj4+PiArICAgICAgLy8NCj4+PiArICAgICAgUGFnZU1hcExldmVsNEVudHJ5LT5VaW50 NjQgPQ0KPj4+IChVSU5UNjQpKFVJTlROKVBhZ2VEaXJlY3RvcnlQb2ludGVyRW50cnkgfCBBZGRy ZXNzRW5jTWFzazsNCj4+PiArICAgICAgUGFnZU1hcExldmVsNEVudHJ5LT5CaXRzLlJlYWRXcml0 ZSA9IDE7DQo+Pj4gKyAgICAgIFBhZ2VNYXBMZXZlbDRFbnRyeS0+Qml0cy5QcmVzZW50ID0gMTsN Cj4+Pg0KPj4+IC0gICAgICAgIGZvciAoSW5kZXhPZlBhZ2VEaXJlY3RvcnlFbnRyaWVzID0gMDsg SW5kZXhPZlBhZ2VEaXJlY3RvcnlFbnRyaWVzIDwNCj4+PiA1MTI7IEluZGV4T2ZQYWdlRGlyZWN0 b3J5RW50cmllcysrLCBQYWdlRGlyZWN0b3J5RW50cnkrKywgUGFnZUFkZHJlc3MgKz0NCj4+PiBT SVpFXzJNQikgew0KPj4+IC0gICAgICAgICAgaWYgKFRvU3BsaXRQYWdlVGFibGUgKFBhZ2VBZGRy ZXNzLCBTSVpFXzJNQiwgU3RhY2tCYXNlLCBTdGFja1NpemUpKSB7DQo+Pj4gLSAgICAgICAgICAg IC8vDQo+Pj4gLSAgICAgICAgICAgIC8vIE5lZWQgdG8gc3BsaXQgdGhpcyAyTSBwYWdlIHRoYXQg Y292ZXJzIE5VTEwgb3Igc3RhY2sgcmFuZ2UuDQo+Pj4gLSAgICAgICAgICAgIC8vDQo+Pj4gLSAg ICAgICAgICAgIFNwbGl0Mk1QYWdlVG80SyAoUGFnZUFkZHJlc3MsIChVSU5UNjQgKikgUGFnZURp cmVjdG9yeUVudHJ5LA0KPj4+IFN0YWNrQmFzZSwgU3RhY2tTaXplKTsNCj4+PiArICAgICAgaWYg KFBhZ2UxR1N1cHBvcnQpIHsNCj4+PiArICAgICAgICBQYWdlRGlyZWN0b3J5MUdFbnRyeSA9IChW T0lEICopIFBhZ2VEaXJlY3RvcnlQb2ludGVyRW50cnk7DQo+Pj4gKw0KPj4+ICsgICAgICAgIGZv ciAoSW5kZXhPZlBhZ2VEaXJlY3RvcnlFbnRyaWVzID0gMDsgSW5kZXhPZlBhZ2VEaXJlY3RvcnlF bnRyaWVzIDwNCj4+PiA1MTI7IEluZGV4T2ZQYWdlRGlyZWN0b3J5RW50cmllcysrLCBQYWdlRGly ZWN0b3J5MUdFbnRyeSsrLCBQYWdlQWRkcmVzcw0KPj4+ICs9IFNJWkVfMUdCKSB7DQo+Pj4gKyAg ICAgICAgICBpZiAoVG9TcGxpdFBhZ2VUYWJsZSAoUGFnZUFkZHJlc3MsIFNJWkVfMUdCLCBTdGFj a0Jhc2UsIFN0YWNrU2l6ZSkpIHsNCj4+PiArICAgICAgICAgICAgU3BsaXQxR1BhZ2VUbzJNIChQ YWdlQWRkcmVzcywgKFVJTlQ2NCAqKSBQYWdlRGlyZWN0b3J5MUdFbnRyeSwNCj4+PiBTdGFja0Jh c2UsIFN0YWNrU2l6ZSk7DQo+Pj4gICAgICAgICAgICAgfSBlbHNlIHsNCj4+PiAgICAgICAgICAg ICAgIC8vDQo+Pj4gICAgICAgICAgICAgICAvLyBGaWxsIGluIHRoZSBQYWdlIERpcmVjdG9yeSBl bnRyaWVzDQo+Pj4gICAgICAgICAgICAgICAvLw0KPj4+IC0gICAgICAgICAgICBQYWdlRGlyZWN0 b3J5RW50cnktPlVpbnQ2NCA9IChVSU5UNjQpUGFnZUFkZHJlc3MgfA0KPj4+IEFkZHJlc3NFbmNN YXNrOw0KPj4+IC0gICAgICAgICAgICBQYWdlRGlyZWN0b3J5RW50cnktPkJpdHMuUmVhZFdyaXRl ID0gMTsNCj4+PiAtICAgICAgICAgICAgUGFnZURpcmVjdG9yeUVudHJ5LT5CaXRzLlByZXNlbnQg PSAxOw0KPj4+IC0gICAgICAgICAgICBQYWdlRGlyZWN0b3J5RW50cnktPkJpdHMuTXVzdEJlMSA9 IDE7DQo+Pj4gKyAgICAgICAgICAgIFBhZ2VEaXJlY3RvcnkxR0VudHJ5LT5VaW50NjQgPSAoVUlO VDY0KVBhZ2VBZGRyZXNzIHwNCj4+PiBBZGRyZXNzRW5jTWFzazsNCj4+PiArICAgICAgICAgICAg UGFnZURpcmVjdG9yeTFHRW50cnktPkJpdHMuUmVhZFdyaXRlID0gMTsNCj4+PiArICAgICAgICAg ICAgUGFnZURpcmVjdG9yeTFHRW50cnktPkJpdHMuUHJlc2VudCA9IDE7DQo+Pj4gKyAgICAgICAg ICAgIFBhZ2VEaXJlY3RvcnkxR0VudHJ5LT5CaXRzLk11c3RCZTEgPSAxOw0KPj4+ICAgICAgICAg ICAgIH0NCj4+PiAgICAgICAgICAgfQ0KPj4+IC0gICAgICB9DQo+Pj4gKyAgICAgIH0gZWxzZSB7 DQo+Pj4gKyAgICAgICAgZm9yICggSW5kZXhPZlBkcEVudHJpZXMgPSAwDQo+Pj4gKyAgICAgICAg ICAgIDsgSW5kZXhPZlBkcEVudHJpZXMgPCAoTnVtYmVyT2ZQbWw0RW50cmllc05lZWRlZCA9PSAx ID8NCj4+PiBOdW1iZXJPZlBkcEVudHJpZXNOZWVkZWQgOiA1MTIpDQo+Pj4gKyAgICAgICAgICAg IDsgSW5kZXhPZlBkcEVudHJpZXMrKywgUGFnZURpcmVjdG9yeVBvaW50ZXJFbnRyeSsrKSB7DQo+ Pj4gKyAgICAgICAgICAvLw0KPj4+ICsgICAgICAgICAgLy8gRWFjaCBEaXJlY3RvcnkgUG9pbnRl ciBlbnRyaWVzIHBvaW50cyB0byBhIHBhZ2Ugb2YgUGFnZSBEaXJlY3RvcnkNCj4+PiBlbnRpcmVz Lg0KPj4+ICsgICAgICAgICAgLy8gU28gYWxsb2NhdGUgc3BhY2UgZm9yIHRoZW0gYW5kIGZpbGwg dGhlbSBpbiBpbiB0aGUNCj4+PiBJbmRleE9mUGFnZURpcmVjdG9yeUVudHJpZXMgbG9vcC4NCj4+ PiArICAgICAgICAgIC8vDQo+Pj4gKyAgICAgICAgICBQYWdlRGlyZWN0b3J5RW50cnkgPSAoVk9J RCAqKSBCaWdQYWdlQWRkcmVzczsNCj4+PiArICAgICAgICAgIEJpZ1BhZ2VBZGRyZXNzICs9IFNJ WkVfNEtCOw0KPj4+DQo+Pj4gLSAgICAgIGZvciAoOyBJbmRleE9mUGRwRW50cmllcyA8IDUxMjsg SW5kZXhPZlBkcEVudHJpZXMrKywNCj4+PiBQYWdlRGlyZWN0b3J5UG9pbnRlckVudHJ5KyspIHsN Cj4+PiAtICAgICAgICBaZXJvTWVtICgNCj4+PiAtICAgICAgICAgIFBhZ2VEaXJlY3RvcnlQb2lu dGVyRW50cnksDQo+Pj4gLSAgICAgICAgICBzaXplb2YoUEFHRV9NQVBfQU5EX0RJUkVDVE9SWV9Q T0lOVEVSKQ0KPj4+IC0gICAgICAgICAgKTsNCj4+PiArICAgICAgICAgIC8vDQo+Pj4gKyAgICAg ICAgICAvLyBGaWxsIGluIGEgUGFnZSBEaXJlY3RvcnkgUG9pbnRlciBFbnRyaWVzDQo+Pj4gKyAg ICAgICAgICAvLw0KPj4+ICsgICAgICAgICAgUGFnZURpcmVjdG9yeVBvaW50ZXJFbnRyeS0+VWlu dDY0ID0NCj4+PiAoVUlOVDY0KShVSU5UTilQYWdlRGlyZWN0b3J5RW50cnkgfCBBZGRyZXNzRW5j TWFzazsNCj4+PiArICAgICAgICAgIFBhZ2VEaXJlY3RvcnlQb2ludGVyRW50cnktPkJpdHMuUmVh ZFdyaXRlID0gMTsNCj4+PiArICAgICAgICAgIFBhZ2VEaXJlY3RvcnlQb2ludGVyRW50cnktPkJp dHMuUHJlc2VudCA9IDE7DQo+Pj4gKw0KPj4+ICsgICAgICAgICAgZm9yIChJbmRleE9mUGFnZURp cmVjdG9yeUVudHJpZXMgPSAwOyBJbmRleE9mUGFnZURpcmVjdG9yeUVudHJpZXMgPA0KPj4+IDUx MjsgSW5kZXhPZlBhZ2VEaXJlY3RvcnlFbnRyaWVzKyssIFBhZ2VEaXJlY3RvcnlFbnRyeSsrLCBQ YWdlQWRkcmVzcyArPQ0KPj4+IFNJWkVfMk1CKSB7DQo+Pj4gKyAgICAgICAgICAgIGlmIChUb1Nw bGl0UGFnZVRhYmxlIChQYWdlQWRkcmVzcywgU0laRV8yTUIsIFN0YWNrQmFzZSwgU3RhY2tTaXpl KSkgew0KPj4+ICsgICAgICAgICAgICAgIC8vDQo+Pj4gKyAgICAgICAgICAgICAgLy8gTmVlZCB0 byBzcGxpdCB0aGlzIDJNIHBhZ2UgdGhhdCBjb3ZlcnMgTlVMTCBvciBzdGFjayByYW5nZS4NCj4+ PiArICAgICAgICAgICAgICAvLw0KPj4+ICsgICAgICAgICAgICAgIFNwbGl0Mk1QYWdlVG80SyAo UGFnZUFkZHJlc3MsIChVSU5UNjQgKikgUGFnZURpcmVjdG9yeUVudHJ5LA0KPj4+IFN0YWNrQmFz ZSwgU3RhY2tTaXplKTsNCj4+PiArICAgICAgICAgICAgfSBlbHNlIHsNCj4+PiArICAgICAgICAg ICAgICAvLw0KPj4+ICsgICAgICAgICAgICAgIC8vIEZpbGwgaW4gdGhlIFBhZ2UgRGlyZWN0b3J5 IGVudHJpZXMNCj4+PiArICAgICAgICAgICAgICAvLw0KPj4+ICsgICAgICAgICAgICAgIFBhZ2VE aXJlY3RvcnlFbnRyeS0+VWludDY0ID0gKFVJTlQ2NClQYWdlQWRkcmVzcyB8DQo+Pj4gQWRkcmVz c0VuY01hc2s7DQo+Pj4gKyAgICAgICAgICAgICAgUGFnZURpcmVjdG9yeUVudHJ5LT5CaXRzLlJl YWRXcml0ZSA9IDE7DQo+Pj4gKyAgICAgICAgICAgICAgUGFnZURpcmVjdG9yeUVudHJ5LT5CaXRz LlByZXNlbnQgPSAxOw0KPj4+ICsgICAgICAgICAgICAgIFBhZ2VEaXJlY3RvcnlFbnRyeS0+Qml0 cy5NdXN0QmUxID0gMTsNCj4+PiArICAgICAgICAgICAgfQ0KPj4+ICsgICAgICAgICAgfQ0KPj4+ ICsgICAgICAgIH0NCj4+PiArDQo+Pj4gKyAgICAgICAgLy8NCj4+PiArICAgICAgICAvLyBGaWxs IHdpdGggbnVsbCBlbnRyeSBmb3IgdW51c2VkIFBEUFRFDQo+Pj4gKyAgICAgICAgLy8NCj4+PiAr ICAgICAgICBaZXJvTWVtIChQYWdlRGlyZWN0b3J5UG9pbnRlckVudHJ5LCAoNTEyIC0gSW5kZXhP ZlBkcEVudHJpZXMpICoNCj4+PiBzaXplb2YoUEFHRV9NQVBfQU5EX0RJUkVDVE9SWV9QT0lOVEVS KSk7DQo+Pj4gICAgICAgICB9DQo+Pj4gICAgICAgfQ0KPj4+ICsNCj4+PiArICAgIC8vDQo+Pj4g KyAgICAvLyBGb3IgdGhlIFBNTDQgZW50cmllcyB3ZSBhcmUgbm90IHVzaW5nIGZpbGwgaW4gYSBu dWxsIGVudHJ5Lg0KPj4+ICsgICAgLy8NCj4+PiArICAgIFplcm9NZW0gKFBhZ2VNYXBMZXZlbDRF bnRyeSwgKDUxMiAtIEluZGV4T2ZQbWw0RW50cmllcykgKiBzaXplb2YNCj4+PiAoUEFHRV9NQVBf QU5EX0RJUkVDVE9SWV9QT0lOVEVSKSk7DQo+Pj4gICAgIH0NCj4+Pg0KPj4+IC0gIC8vDQo+Pj4g LSAgLy8gRm9yIHRoZSBQTUw0IGVudHJpZXMgd2UgYXJlIG5vdCB1c2luZyBmaWxsIGluIGEgbnVs bCBlbnRyeS4NCj4+PiAtICAvLw0KPj4+IC0gIGZvciAoOyBJbmRleE9mUG1sNEVudHJpZXMgPCA1 MTI7IEluZGV4T2ZQbWw0RW50cmllcysrLA0KPj4+IFBhZ2VNYXBMZXZlbDRFbnRyeSsrKSB7DQo+ Pj4gLSAgICBaZXJvTWVtICgNCj4+PiAtICAgICAgUGFnZU1hcExldmVsNEVudHJ5LA0KPj4+IC0g ICAgICBzaXplb2YgKFBBR0VfTUFQX0FORF9ESVJFQ1RPUllfUE9JTlRFUikNCj4+PiAtICAgICAg KTsNCj4+PiArICBpZiAoUGFnZTVMZXZlbFN1cHBvcnQpIHsNCj4+PiArICAgIENyNC5VaW50TiA9 IEFzbVJlYWRDcjQgKCk7DQo+Pj4gKyAgICBDcjQuQml0cy5MQTU3ID0gMTsNCj4+PiArICAgIEFz bVdyaXRlQ3I0IChDcjQuVWludE4pOw0KPj4+ICsgICAgLy8NCj4+PiArICAgIC8vIEZvciB0aGUg UE1MNSBlbnRyaWVzIHdlIGFyZSBub3QgdXNpbmcgZmlsbCBpbiBhIG51bGwgZW50cnkuDQo+Pj4g KyAgICAvLw0KPj4+ICsgICAgWmVyb01lbSAoUGFnZU1hcExldmVsNUVudHJ5LCAoNTEyIC0gSW5k ZXhPZlBtbDVFbnRyaWVzKSAqIHNpemVvZg0KPj4+IChQQUdFX01BUF9BTkRfRElSRUNUT1JZX1BP SU5URVIpKTsNCj4+PiAgICAgfQ0KPj4+DQo+Pj4gICAgIC8vDQo+Pj4gLS0NCj4+PiAyLjIxLjAu d2luZG93cy4xDQo+Pj4NCj4+Pg0KPj4+IA0KPj4NCj4gDQo=