From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=134.134.136.126; helo=mga18.intel.com; envelope-from=jian.j.wang@intel.com; receiver=edk2-devel@lists.01.org Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 61896210ED794 for ; Wed, 13 Jun 2018 17:46:59 -0700 (PDT) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga007.jf.intel.com ([10.7.209.58]) by orsmga106.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 13 Jun 2018 17:46:58 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.51,220,1526367600"; d="scan'208";a="48829051" Received: from fmsmsx103.amr.corp.intel.com ([10.18.124.201]) by orsmga007.jf.intel.com with ESMTP; 13 Jun 2018 17:46:58 -0700 Received: from fmsmsx151.amr.corp.intel.com (10.18.125.4) by FMSMSX103.amr.corp.intel.com (10.18.124.201) with Microsoft SMTP Server (TLS) id 14.3.319.2; Wed, 13 Jun 2018 17:46:58 -0700 Received: from shsmsx104.ccr.corp.intel.com (10.239.4.70) by FMSMSX151.amr.corp.intel.com (10.18.125.4) with Microsoft SMTP Server (TLS) id 14.3.319.2; Wed, 13 Jun 2018 17:46:57 -0700 Received: from shsmsx103.ccr.corp.intel.com ([169.254.4.51]) by SHSMSX104.ccr.corp.intel.com ([169.254.5.87]) with mapi id 14.03.0319.002; Thu, 14 Jun 2018 08:46:55 +0800 From: "Wang, Jian J" To: Laszlo Ersek , "edk2-devel@lists.01.org" CC: "Ni, Ruiyu" , "Yao, Jiewen" , "Dong, Eric" Thread-Topic: [edk2] [PATCH v2 1/2] UefiCpuPkg/CpuDxe: allow accessing (DXE) page table in SMM mode Thread-Index: AQHUAthcYF/e6uWZj0yiWCA5Q45hnqRdxXAAgAEmDpA= Date: Thu, 14 Jun 2018 00:46:54 +0000 Message-ID: References: <20180613053501.4604-1-jian.j.wang@intel.com> <20180613053501.4604-2-jian.j.wang@intel.com> In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiMTliYzllYzYtZGRjOS00MDM3LWJhNTQtMjgyNDNhNjU0YTAxIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoiTnBveHlDVHhJTnQxdHRmMjViUXdHNG5HNitabXFuTER3Ym1TQlRmazdjXC92NjNjcUJ4b2hibXhDY0dnVkx3NlIifQ== x-ctpclassification: CTP_NT dlp-product: dlpe-windows dlp-version: 11.0.200.100 dlp-reaction: no-action x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Subject: Re: [PATCH v2 1/2] UefiCpuPkg/CpuDxe: allow accessing (DXE) page table in SMM mode X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.26 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 14 Jun 2018 00:46:59 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 SGkgTGFzemxvLA0KDQpSZWdhcmRzLA0KSmlhbg0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0t LS0tDQo+IEZyb206IExhc3psbyBFcnNlayBbbWFpbHRvOmxlcnNla0ByZWRoYXQuY29tXQ0KPiBT ZW50OiBXZWRuZXNkYXksIEp1bmUgMTMsIDIwMTggMTE6MTAgUE0NCj4gVG86IFdhbmcsIEppYW4g SiA8amlhbi5qLndhbmdAaW50ZWwuY29tPjsgZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmcNCj4gQ2M6 IE5pLCBSdWl5dSA8cnVpeXUubmlAaW50ZWwuY29tPjsgWWFvLCBKaWV3ZW4gPGppZXdlbi55YW9A aW50ZWwuY29tPjsgRG9uZywNCj4gRXJpYyA8ZXJpYy5kb25nQGludGVsLmNvbT4NCj4gU3ViamVj dDogUmU6IFtlZGsyXSBbUEFUQ0ggdjIgMS8yXSBVZWZpQ3B1UGtnL0NwdUR4ZTogYWxsb3cgYWNj ZXNzaW5nIChEWEUpDQo+IHBhZ2UgdGFibGUgaW4gU01NIG1vZGUNCj4gDQo+IEhpIEppYW4sDQo+ IA0KPiBJIGhhdmUgdGhyZWUgY29tbWVudHM6DQo+IA0KPiBPbiAwNi8xMy8xOCAwNzozNSwgSmlh biBKIFdhbmcgd3JvdGU6DQo+ID4+IHYyOg0KPiA+PiAgIGEuIGFkZCBtb3JlIHNwZWNpZmljIGV4 cGxhbmF0aW9ucyBpbiBjb21taXQgbWVzc2FnZQ0KPiA+PiAgIGIuIGFkZCBtb3JlIGNvbW1lbnRz IGluIGNvZGUNCj4gPj4gICBjLiByZW1vdmUgcmVkdW5kYW50IGxvZ2ljIGluIElzSW5TbW0oKQ0K PiA+PiAgIGQuIGZpeCBhIGxvZ2ljIGhvbGUgaW4gR2V0Q3VycmVudFBhZ2luZ0NvbnRleHQoKQ0K PiA+PiAgIGUuIHJlcGxhY2UgbWVhbmxlc3MgY29uc3RhbnQgbWFjcm8gd2l0aCBtZWFuaW5nIG9u ZXMNCj4gPg0KPiA+IFRoZSBNZGVQa2cvTGlicmFyeS9TbW1NZW1vcnlBbGxvY2F0aW9uTGliLCB1 c2VkIG9ubHkgYnkNCj4gRFhFX1NNTV9EUklWRVIsDQo+ID4gYWxsb3dzIHRvIGZyZWUgbWVtb3J5 IGFsbG9jYXRlZCBpbiBEWEUgKGJlZm9yZSBFbmRPZkR4ZSkuIFRoaXMgaXMgZG9uZQ0KPiA+IGJ5 IGNoZWNraW5nIHRoZSBtZW1vcnkgcmFuZ2UgYW5kIGNhbGxpbmcgZ0JTIHNlcnZpY2VzIHRvIGRv IHJlYWwNCj4gPiBvcGVyYXRpb24gaWYgdGhlIG1lbW9yeSB0byBmcmVlIGlzIG91dCBvZiBTTVJB TS4gSWYgc29tZSBtZW1vcnkgcmVsYXRlZA0KPiA+IGZlYXR1cmVzLCBsaWtlIEhlYXAgR3VhcmQs IGFyZSBlbmFibGVkLCBnQlMgaW50ZXJmYWNlIHdpbGwgdHVybiB0bw0KPiA+IEVGSV9DUFVfQVJD SF9QUk9UT0NPTC5TZXRNZW1vcnlBdHRyaWJ1dGVzKCksIHByb3ZpZGVkIGJ5DQo+ID4gRFhFIGRy aXZlciBVZWZpQ3B1UGtnL0NwdUR4ZSwgdG8gY2hhbmdlIG1lbW9yeSBwYWdpbmcgYXR0cmlidXRl cy4gVGhpcw0KPiA+IG1lYW5zIHdlIGhhdmUgcGFydCBvZiBEWEUgY29kZSBydW5uaW5nIGluIFNN TSBtb2RlIGluIGNlcnRhaW4NCj4gPiBjaXJjdW1zdGFuY2VzLg0KPiA+DQo+ID4gQmVjYXVzZSBw YWdlIHRhYmxlIGluIFNNTSBtb2RlIGlzIGRpZmZlcmVudCBmcm9tIERYRSBtb2RlIGFuZCBDcHVE eGUNCj4gPiBhbHdheXMgdXNlcyBjdXJyZW50IHJlZ2lzdGVycyAoQ1IwLCBDUjMsIGV0Yy4pIHRv IGdldCBtZW1vcnkgcGFnaW5nDQo+ID4gYXR0cmlidXRlcywgaXQgY2Fubm90IGdldCB0aGUgY29y cmVjdCBhdHRyaWJ1dGVzIG9mIERYRSBtZW1vcnkgaW4gU01NDQo+ID4gbW9kZSBmcm9tIFNNTSBw YWdlIHRhYmxlLiBUaGlzIHdpbGwgY2F1c2UgaW5jb3JyZWN0IG1lbW9yeSBtYW5pcHVsYXRpb25z LA0KPiA+IGxpa2UgZmFpbCB0aGUgcmVsZWFzaW5nIG9mIEd1YXJkIHBhZ2VzIGlmIEhlYXAgR3Vh cmQgaXMgZW5hYmxlZC4NCj4gPg0KPiA+IFRoZSBzb2x1dGlvbiBpbiB0aGlzIHBhdGNoIGlzIHRv IHN0b3JlIHRoZSBEWEUgcGFnZSB0YWJsZSBpbmZvcm1hdGlvbg0KPiA+IChlLmcuIHZhbHVlIG9m IENSMCwgQ1IzIHJlZ2lzdGVycywgZXRjLikgaW4gYSBnbG9iYWwgdmFyaWFibGUgb2YgQ3B1RHhl DQo+ID4gZHJpdmVyLiBJZiBDcHVEeGUgZGV0ZWN0cyBpdCdzIGluIFNNTSBtb2RlLCBpdCB3aWxs IHVzZSB0aGlzIGdsb2JhbA0KPiA+IHZhcmlhYmxlIHRvIGFjY2VzcyBwYWdlIHRhYmxlIGluc3Rl YWQgb2YgY3VycmVudCBwcm9jZXNzb3IgcmVnaXN0ZXJzLg0KPiA+IFRoaXMgY2FuIGF2b2lkIHJl dHJpZXZpbmcgd3JvbmcgRFhFIG1lbW9yeSBwYWdpbmcgYXR0cmlidXRlcyBhbmQgY2hhbmdpbmcN Cj4gPiBTTU0gcGFnZSB0YWJsZSBhdHRyaWJ1dGVzIHVuZXhwZWN0ZWRseS4NCj4gPg0KPiA+IENj OiBFcmljIERvbmcgPGVyaWMuZG9uZ0BpbnRlbC5jb20+DQo+ID4gQ2M6IExhc3psbyBFcnNlayA8 bGVyc2VrQHJlZGhhdC5jb20+DQo+ID4gQ2M6IEppZXdlbiBZYW8gPGppZXdlbi55YW9AaW50ZWwu Y29tPg0KPiA+IENjOiBSdWl5dSBOaSA8cnVpeXUubmlAaW50ZWwuY29tPg0KPiA+IENvbnRyaWJ1 dGVkLXVuZGVyOiBUaWFub0NvcmUgQ29udHJpYnV0aW9uIEFncmVlbWVudCAxLjENCj4gPiBTaWdu ZWQtb2ZmLWJ5OiBKaWFuIEogV2FuZyA8amlhbi5qLndhbmdAaW50ZWwuY29tPg0KPiA+IC0tLQ0K PiA+ICBVZWZpQ3B1UGtnL0NwdUR4ZS9DcHVEeGUuaW5mICAgICB8ICAgMSArDQo+ID4gIFVlZmlD cHVQa2cvQ3B1RHhlL0NwdVBhZ2VUYWJsZS5jIHwgMTU5DQo+ICsrKysrKysrKysrKysrKysrKysr KysrKysrKysrKy0tLS0tLS0tLQ0KPiA+ICAyIGZpbGVzIGNoYW5nZWQsIDEyMyBpbnNlcnRpb25z KCspLCAzNyBkZWxldGlvbnMoLSkNCj4gPg0KPiA+IGRpZmYgLS1naXQgYS9VZWZpQ3B1UGtnL0Nw dUR4ZS9DcHVEeGUuaW5mIGIvVWVmaUNwdVBrZy9DcHVEeGUvQ3B1RHhlLmluZg0KPiA+IGluZGV4 IDNjOTM4Y2VlNTMuLmNlMmJkMzYyN2MgMTAwNjQ0DQo+ID4gLS0tIGEvVWVmaUNwdVBrZy9DcHVE eGUvQ3B1RHhlLmluZg0KPiA+ICsrKyBiL1VlZmlDcHVQa2cvQ3B1RHhlL0NwdUR4ZS5pbmYNCj4g PiBAQCAtNjYsNiArNjYsNyBAQA0KPiA+ICBbUHJvdG9jb2xzXQ0KPiA+ICAgIGdFZmlDcHVBcmNo UHJvdG9jb2xHdWlkICAgICAgICAgICAgICAgICAgICAgICAjIyBQUk9EVUNFUw0KPiA+ICAgIGdF ZmlNcFNlcnZpY2VQcm90b2NvbEd1aWQgICAgICAgICAgICAgICAgICAgICAjIyBQUk9EVUNFUw0K PiA+ICsgIGdFZmlTbW1CYXNlMlByb3RvY29sR3VpZCAgICAgICAgICAgICAgICAgICAgICAjIyBD T05TVU1FUw0KPiANCj4gKDEpIEluIG15IHYxIHJldmlldywgSSBzdWdnZXN0ZWQgIlNPTUVUSU1F U19DT05TVU1FUyIgZm9yIHRoaXMgaGludC4NCj4gDQo+IEFuZCB0aGF0J3MgYmVjYXVzZSBDcHVE eGUgY2FuIGJlIGluY2x1ZGVkIGluIHBsYXRmb3JtIGJ1aWxkcyB0aGF0IGRvbid0DQo+IGluY2x1 ZGUgdGhlIFNNTSBkcml2ZXIgc3RhY2sgYXQgYWxsOyBpbiB0aGF0IGNhc2UsDQo+IGdFZmlTbW1C YXNlMlByb3RvY29sR3VpZCB3aWxsIG5vdCBiZSBhdmFpbGFibGUgYW5kIHdpbGwgbm90IGJlIGNv bnN1bWVkLg0KPiBJbiBvdGhlciB3b3Jkcywgd2UgY2Fubm90IHNheSB0aGF0IHRoZSBwcm90b2Nv bCBpcyBhbHdheXMgY29uc3VtZWQuDQo+IA0KDQpNYWtlIHNlbnNlLg0KDQo+ID4NCj4gPiAgW0d1 aWRzXQ0KPiA+ICAgIGdJZGxlTG9vcEV2ZW50R3VpZCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAjIyBDT05TVU1FUyAgICAgICAgICAgIyMgRXZlbnQNCj4gPiBkaWZmIC0tZ2l0IGEvVWVmaUNw dVBrZy9DcHVEeGUvQ3B1UGFnZVRhYmxlLmMNCj4gYi9VZWZpQ3B1UGtnL0NwdUR4ZS9DcHVQYWdl VGFibGUuYw0KPiA+IGluZGV4IGUyNTk1YjRkODkuLmI3ZTc1OTIyYjYgMTAwNjQ0DQo+ID4gLS0t IGEvVWVmaUNwdVBrZy9DcHVEeGUvQ3B1UGFnZVRhYmxlLmMNCj4gPiArKysgYi9VZWZpQ3B1UGtn L0NwdUR4ZS9DcHVQYWdlVGFibGUuYw0KPiA+IEBAIC0yMywxMCArMjMsMjEgQEANCj4gPiAgI2lu Y2x1ZGUgPExpYnJhcnkvRGVidWdMaWIuaD4NCj4gPiAgI2luY2x1ZGUgPExpYnJhcnkvVWVmaUJv b3RTZXJ2aWNlc1RhYmxlTGliLmg+DQo+ID4gICNpbmNsdWRlIDxQcm90b2NvbC9NcFNlcnZpY2Uu aD4NCj4gPiArI2luY2x1ZGUgPFByb3RvY29sL1NtbUJhc2UyLmg+DQo+ID4gKyNpbmNsdWRlIDxS ZWdpc3Rlci9DcHVpZC5oPg0KPiA+ICsjaW5jbHVkZSA8UmVnaXN0ZXIvTXNyLmg+DQo+ID4NCj4g PiAgI2luY2x1ZGUgIkNwdUR4ZS5oIg0KPiA+ICAjaW5jbHVkZSAiQ3B1UGFnZVRhYmxlLmgiDQo+ ID4NCj4gPiArLy8vDQo+ID4gKy8vLyBQYWdpbmcgcmVnaXN0ZXJzDQo+ID4gKy8vLw0KPiA+ICsj ZGVmaW5lIENSMF9XUCAgICAgICAgICAgICAgICAgICAgICBCSVQxNg0KPiA+ICsjZGVmaW5lIENS MF9QRyAgICAgICAgICAgICAgICAgICAgICBCSVQzMQ0KPiA+ICsjZGVmaW5lIENSNF9QU0UgICAg ICAgICAgICAgICAgICAgICBCSVQ0DQo+ID4gKyNkZWZpbmUgQ1I0X1BBRSAgICAgICAgICAgICAg ICAgICAgIEJJVDUNCj4gDQo+ICgyYSkgSSB0aGluayB0aGUgQklUeHggLT4gQ1J4X3h4IG1hY3Jv IHJlcGxhY2VtZW50cyBzaG91bGQgaGF2ZSBiZWVuDQo+IHNwbGl0IHRvIGEgc2VwYXJhdGUgcGF0 Y2guDQo+IA0KDQpTdXJlLg0KDQo+ID4gKw0KPiA+ICAvLy8NCj4gPiAgLy8vIFBhZ2UgVGFibGUg RW50cnkNCj4gPiAgLy8vDQo+ID4gQEAgLTg3LDcgKzk4LDQ2IEBAIFBBR0VfQVRUUklCVVRFX1RB QkxFIG1QYWdlQXR0cmlidXRlVGFibGVbXSA9IHsNCj4gPiAgICB7UGFnZTFHLCAgU0laRV8xR0Is IFBBR0lOR18xR19BRERSRVNTX01BU0tfNjR9LA0KPiA+ICB9Ow0KPiA+DQo+ID4gLVBBR0VfVEFC TEVfUE9PTCAgICptUGFnZVRhYmxlUG9vbCA9IE5VTEw7DQo+ID4gK1BBR0VfVEFCTEVfUE9PTCAg ICAgICAgICAgICAgICAgICAqbVBhZ2VUYWJsZVBvb2wgPSBOVUxMOw0KPiA+ICtQQUdFX1RBQkxF X0xJQl9QQUdJTkdfQ09OVEVYVCAgICAgbVBhZ2luZ0NvbnRleHQ7DQo+ID4gK0VGSV9TTU1fQkFT RTJfUFJPVE9DT0wgICAgICAgICAgICAqbVNtbUJhc2UyID0gTlVMTDsNCj4gPiArDQo+ID4gKy8q Kg0KPiA+ICsgQ2hlY2sgaWYgY3VycmVudCBleGVjdXRpb24gZW52aXJvbm1lbnQgaXMgaW4gU01N IG1vZGUgb3Igbm90LCB2aWENCj4gPiArIEVGSV9TTU1fQkFTRTJfUFJPVE9DT0wuDQo+ID4gKw0K PiA+ICsgVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBvZiB0aGUgZmFjdCB0aGF0DQo+IE1kZVBr Z1xMaWJyYXJ5XFNtbU1lbW9yeUFsbG9jYXRpb25MaWINCj4gPiArIHN1cHBvcnRzIHRvIGZyZWUg bWVtb3J5IG91dHNpZGUgU01SQU0uIFRoZSBsaWJyYXJ5IHdpbGwgY2FsbCBnQlMtPkZyZWVQb29s KCkNCj4gb3INCj4gPiArIGdCUy0+RnJlZVBhZ2VzKCkgYW5kIHRoZW4gU2V0TWVtb3J5U3BhY2VB dHRyaWJ1dGVzIGludGVyZmFjZSBpbiB0dXJuIHRvDQo+IGNoYW5nZQ0KPiA+ICsgbWVtb3J5IHBh Z2luZyBhdHRyaWJ1dGVzIGR1cmluZyBmcmVlIG9wZXJhdGlvbiwgaWYgc29tZSBtZW1vcnkgcmVs YXRlZA0KPiBmZWF0dXJlcw0KPiA+ICsgYXJlIGVuYWJsZWQgKGxpa2UgSGVhcCBHdWFyZCkuDQo+ ID4gKw0KPiA+ICsgVGhpcyBtZWFucyB0aGF0IFNldE1lbW9yeVNwYWNlQXR0cmlidXRlcygpIGhh cyBjaGFuY2UgdG8gcnVuIGluIFNNTQ0KPiBtb2RlLiBUaGlzDQo+ID4gKyB3aWxsIGNhdXNlIGlu Y29ycmVjdCByZXN1bHQgYmVjYXVzZSBTTU0gbW9kZSBhbHdheXMgbG9hZHMgaXRzIG93biBwYWdl DQo+IHRhYmxlcywNCj4gPiArIHdoaWNoIGFyZSB1c3VhbGx5IGRpZmZlcmVudCBmcm9tIERYRS4g VGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBkZXRlY3QNCj4gc3VjaA0KPiA+ICsgc2l0dWF0 aW9uIGFuZCBoZWxwIHRvIGF2b2lkIGZ1cnRoZXIgbWlzb3BlcmF0aW9ucy4NCj4gPiArDQo+ID4g KyAgQHJldHZhbCBUUlVFICAgIEluIFNNTSBtb2RlLg0KPiA+ICsgIEByZXR2YWwgRkFMU0UgICBO b3QgaW4gU01NIG1vZGUuDQo+ID4gKyoqLw0KPiA+ICtCT09MRUFODQo+ID4gK0lzSW5TbW0gKA0K PiA+ICsgIFZPSUQNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBCT09MRUFOICAgICAgICAgICAg ICAgICBJblNtbTsNCj4gPiArDQo+ID4gKyAgSW5TbW0gPSBGQUxTRTsNCj4gPiArICBpZiAobVNt bUJhc2UyID09IE5VTEwpIHsNCj4gPiArICAgIGdCUy0+TG9jYXRlUHJvdG9jb2wgKCZnRWZpU21t QmFzZTJQcm90b2NvbEd1aWQsIE5VTEwsIChWT0lEDQo+ICoqKSZtU21tQmFzZTIpOw0KPiA+ICsg IH0NCj4gPiArDQo+ID4gKyAgaWYgKG1TbW1CYXNlMiAhPSBOVUxMKSB7DQo+ID4gKyAgICBtU21t QmFzZTItPkluU21tIChtU21tQmFzZTIsICZJblNtbSk7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiAr ICByZXR1cm4gSW5TbW07DQo+ID4gK30NCj4gPg0KPiA+ICAvKioNCj4gPiAgICBSZXR1cm4gY3Vy cmVudCBwYWdpbmcgY29udGV4dC4NCj4gPiBAQCAtOTksNDUgKzE0OSw2MSBAQCBHZXRDdXJyZW50 UGFnaW5nQ29udGV4dCAoDQo+ID4gICAgSU4gT1VUIFBBR0VfVEFCTEVfTElCX1BBR0lOR19DT05U RVhUICAgICAqUGFnaW5nQ29udGV4dA0KPiA+ICAgICkNCj4gPiAgew0KPiA+IC0gIFVJTlQzMiAg ICAgICAgICAgICAgICAgICAgICAgICBSZWdFYXg7DQo+ID4gLSAgVUlOVDMyICAgICAgICAgICAg ICAgICAgICAgICAgIFJlZ0VkeDsNCj4gPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAg ICAgIFJlZ0VheDsNCj4gPiArICBDUFVJRF9FWFRFTkRFRF9DUFVfU0lHX0VEWCAgICAgIFJlZ0Vk eDsNCj4gPiArICBNU1JfSUEzMl9FRkVSX1JFR0lTVEVSICAgICAgICAgIE1zckVmZXI7DQo+ID4N Cj4gPiAtICBaZXJvTWVtKFBhZ2luZ0NvbnRleHQsIHNpemVvZigqUGFnaW5nQ29udGV4dCkpOw0K PiA+IC0gIGlmIChzaXplb2YoVUlOVE4pID09IHNpemVvZihVSU5UNjQpKSB7DQo+ID4gLSAgICBQ YWdpbmdDb250ZXh0LT5NYWNoaW5lVHlwZSA9IElNQUdFX0ZJTEVfTUFDSElORV9YNjQ7DQo+ID4g LSAgfSBlbHNlIHsNCj4gPiAtICAgIFBhZ2luZ0NvbnRleHQtPk1hY2hpbmVUeXBlID0gSU1BR0Vf RklMRV9NQUNISU5FX0kzODY7DQo+ID4gLSAgfQ0KPiA+IC0gIGlmICgoQXNtUmVhZENyMCAoKSAm IEJJVDMxKSAhPSAwKSB7DQo+ID4gLSAgICBQYWdpbmdDb250ZXh0LT5Db250ZXh0RGF0YS5YNjQu UGFnZVRhYmxlQmFzZSA9IChBc21SZWFkQ3IzICgpICYNCj4gUEFHSU5HXzRLX0FERFJFU1NfTUFT S182NCk7DQo+ID4gLSAgfSBlbHNlIHsNCj4gPiAtICAgIFBhZ2luZ0NvbnRleHQtPkNvbnRleHRE YXRhLlg2NC5QYWdlVGFibGVCYXNlID0gMDsNCj4gPiAtICB9DQo+ID4gKyAgLy8NCj4gPiArICAv LyBEb24ndCByZXRyaWV2ZSBjdXJyZW50IHBhZ2luZyBjb250ZXh0IGZyb20gcHJvY2Vzc29yIGlm IGluIFNNTSBtb2RlLg0KPiA+ICsgIC8vDQo+ID4gKyAgaWYgKCFJc0luU21tICgpKSB7DQo+ID4g KyAgICBaZXJvTWVtICgmbVBhZ2luZ0NvbnRleHQsIHNpemVvZihtUGFnaW5nQ29udGV4dCkpOw0K PiA+DQo+ID4gLSAgaWYgKChBc21SZWFkQ3I0ICgpICYgQklUNCkgIT0gMCkgew0KPiA+IC0gICAg UGFnaW5nQ29udGV4dC0+Q29udGV4dERhdGEuSWEzMi5BdHRyaWJ1dGVzIHw9DQo+IFBBR0VfVEFC TEVfTElCX1BBR0lOR19DT05URVhUX0lBMzJfWDY0X0FUVFJJQlVURVNfUFNFOw0KPiA+IC0gIH0N Cj4gPiAtICBpZiAoKEFzbVJlYWRDcjQgKCkgJiBCSVQ1KSAhPSAwKSB7DQo+ID4gLSAgICBQYWdp bmdDb250ZXh0LT5Db250ZXh0RGF0YS5JYTMyLkF0dHJpYnV0ZXMgfD0NCj4gUEFHRV9UQUJMRV9M SUJfUEFHSU5HX0NPTlRFWFRfSUEzMl9YNjRfQVRUUklCVVRFU19QQUU7DQo+ID4gLSAgfQ0KPiA+ IC0gIGlmICgoQXNtUmVhZENyMCAoKSAmIEJJVDE2KSAhPSAwKSB7DQo+ID4gLSAgICBQYWdpbmdD b250ZXh0LT5Db250ZXh0RGF0YS5JYTMyLkF0dHJpYnV0ZXMgfD0NCj4gUEFHRV9UQUJMRV9MSUJf UEFHSU5HX0NPTlRFWFRfSUEzMl9YNjRfQVRUUklCVVRFU19XUF9FTkFCTEU7DQo+ID4gLSAgfQ0K PiA+ICsgICAgaWYgKHNpemVvZihVSU5UTikgPT0gc2l6ZW9mKFVJTlQ2NCkpIHsNCj4gPiArICAg ICAgbVBhZ2luZ0NvbnRleHQuTWFjaGluZVR5cGUgPSBJTUFHRV9GSUxFX01BQ0hJTkVfWDY0Ow0K PiA+ICsgICAgfSBlbHNlIHsNCj4gPiArICAgICAgbVBhZ2luZ0NvbnRleHQuTWFjaGluZVR5cGUg PSBJTUFHRV9GSUxFX01BQ0hJTkVfSTM4NjsNCj4gPiArICAgIH0NCj4gPiArICAgIGlmICgoQXNt UmVhZENyMCAoKSAmIENSMF9QRykgIT0gMCkgew0KPiA+ICsgICAgICBtUGFnaW5nQ29udGV4dC5D b250ZXh0RGF0YS5YNjQuUGFnZVRhYmxlQmFzZSA9IChBc21SZWFkQ3IzICgpICYNCj4gUEFHSU5H XzRLX0FERFJFU1NfTUFTS182NCk7DQo+ID4gKyAgICB9IGVsc2Ugew0KPiA+ICsgICAgICBtUGFn aW5nQ29udGV4dC5Db250ZXh0RGF0YS5YNjQuUGFnZVRhYmxlQmFzZSA9IDA7DQo+ID4gKyAgICB9 DQo+ID4NCj4gPiAtICBBc21DcHVpZCAoMHg4MDAwMDAwMCwgJlJlZ0VheCwgTlVMTCwgTlVMTCwg TlVMTCk7DQo+ID4gLSAgaWYgKFJlZ0VheCA+IDB4ODAwMDAwMDApIHsNCj4gPiAtICAgIEFzbUNw dWlkICgweDgwMDAwMDAxLCBOVUxMLCBOVUxMLCBOVUxMLCAmUmVnRWR4KTsNCj4gPiAtICAgIGlm ICgoUmVnRWR4ICYgQklUMjApICE9IDApIHsNCj4gPiAtICAgICAgLy8gWEQgc3VwcG9ydGVkDQo+ ID4gLSAgICAgIGlmICgoQXNtUmVhZE1zcjY0ICgweEMwMDAwMDgwKSAmIEJJVDExKSAhPSAwKSB7 DQo+ID4gLSAgICAgICAgLy8gWEQgYWN0aXZhdGVkDQo+ID4gLSAgICAgICAgUGFnaW5nQ29udGV4 dC0+Q29udGV4dERhdGEuSWEzMi5BdHRyaWJ1dGVzIHw9DQo+IFBBR0VfVEFCTEVfTElCX1BBR0lO R19DT05URVhUX0lBMzJfWDY0X0FUVFJJQlVURVNfWERfQUNUSVZBVEVEOw0KPiA+IC0gICAgICB9 DQo+ID4gKyAgICBpZiAoKEFzbVJlYWRDcjQgKCkgJiBDUjRfUFNFKSAhPSAwKSB7DQo+ID4gKyAg ICAgIG1QYWdpbmdDb250ZXh0LkNvbnRleHREYXRhLklhMzIuQXR0cmlidXRlcyB8PQ0KPiBQQUdF X1RBQkxFX0xJQl9QQUdJTkdfQ09OVEVYVF9JQTMyX1g2NF9BVFRSSUJVVEVTX1BTRTsNCj4gPiAr ICAgIH0NCj4gPiArICAgIGlmICgoQXNtUmVhZENyNCAoKSAmIENSNF9QQUUpICE9IDApIHsNCj4g PiArICAgICAgbVBhZ2luZ0NvbnRleHQuQ29udGV4dERhdGEuSWEzMi5BdHRyaWJ1dGVzIHw9DQo+ IFBBR0VfVEFCTEVfTElCX1BBR0lOR19DT05URVhUX0lBMzJfWDY0X0FUVFJJQlVURVNfUEFFOw0K PiA+ICsgICAgfQ0KPiA+ICsgICAgaWYgKChBc21SZWFkQ3IwICgpICYgQ1IwX1dQKSAhPSAwKSB7 DQo+ID4gKyAgICAgIG1QYWdpbmdDb250ZXh0LkNvbnRleHREYXRhLklhMzIuQXR0cmlidXRlcyB8 PQ0KPiBQQUdFX1RBQkxFX0xJQl9QQUdJTkdfQ09OVEVYVF9JQTMyX1g2NF9BVFRSSUJVVEVTX1dQ X0VOQUJMRTsNCj4gPiAgICAgIH0NCj4gPiAtICAgIGlmICgoUmVnRWR4ICYgQklUMjYpICE9IDAp IHsNCj4gPiAtICAgICAgUGFnaW5nQ29udGV4dC0+Q29udGV4dERhdGEuSWEzMi5BdHRyaWJ1dGVz IHw9DQo+IFBBR0VfVEFCTEVfTElCX1BBR0lOR19DT05URVhUX0lBMzJfWDY0X0FUVFJJQlVURVNf UEFHRV8xR19TVVBQTw0KPiBSVDsNCj4gPiArDQo+ID4gKyAgICBBc21DcHVpZCAoQ1BVSURfRVhU RU5ERURfRlVOQ1RJT04sICZSZWdFYXgsIE5VTEwsIE5VTEwsIE5VTEwpOw0KPiA+ICsgICAgaWYg KFJlZ0VheCA+PSBDUFVJRF9FWFRFTkRFRF9DUFVfU0lHKSB7DQo+IA0KPiAoMmIpIFNpbWlsYXJs eSB0byAoMmEpLCB0aGlzIGNsZWFudXAgKHdoaWNoIGlzIGNvcnJlY3QsIGFuZCB3ZWxjb21lKQ0K PiBzaG91bGQgaGF2ZSBiZWVuIHNwbGl0IHRvIGEgc2VwYXJhdGUgcGF0Y2guDQo+IA0KDQoNCk9r Lg0KDQo+ID4gKyAgICAgIEFzbUNwdWlkIChDUFVJRF9FWFRFTkRFRF9DUFVfU0lHLCBOVUxMLCBO VUxMLCBOVUxMLCAoVUlOVDMyDQo+ICopJlJlZ0VkeCk7DQo+IA0KPiAoMykgSSB0aGluayBpdCB3 b3VsZCBiZSBtb3JlIGlkaW9tYXRpYyB0byBwYXNzICZSZWdFZHguVWludDMyIGFzIHRoZQ0KPiBs YXN0IGFyZ3VtZW50LiBIb3dldmVyLCB0aGlzIG1ldGhvZCB3b3JrcyBhcyB3ZWxsLg0KPiANCg0K WW91ciB3YXkgaXMgYmV0dGVyLiBBdCBsZWFzdCBpdCBzYXZlcyBhIHR5cGUgY2FzdC4NCg0KPiAN Cj4gSSBkb24ndCB0aGluayB0aGF0IHBvc3RpbmcgYSB2MyBpcyBuZWNlc3NhcnkganVzdCBiZWNh dXNlIG9mIHRoZXNlDQo+IHJlbWFya3MuIFBsZWFzZSBmaXggKDEpIHRob3VnaCwganVzdCBiZWZv cmUgeW91IHB1c2ggdGhlIHBhdGNoLg0KPiANCj4gKiBGb3IgdGhpcyBwYXRjaCwgd2l0aCAoMSkg dXBkYXRlZDoNCj4gDQo+IFJldmlld2VkLWJ5OiBMYXN6bG8gRXJzZWsgPGxlcnNla0ByZWRoYXQu Y29tPg0KPiANCj4gKiBGb3IgdGhlIHNlcmllczoNCj4gDQo+IFJlZ3Jlc3Npb24tdGVzdGVkLWJ5 OiBMYXN6bG8gRXJzZWsgPGxlcnNla0ByZWRoYXQuY29tPg0KPiANCj4gRm9yIHRoZSByZWdyZXNz aW9uIHRlc3RpbmcsIEkgdXNlZCBPVk1GIGJ1aWx0IGJvdGggd2l0aCBhbmQgd2l0aG91dCBTTU0u DQo+IEFsc28sIGZvciBwYXRjaCAjMiwgcGxlYXNlIHJlbWVtYmVyIHRoYXQgT1ZNRiBkb2VzIG5v dCBlbmFibGUgdGhlIHBhZ2UNCj4gZ3VhcmQgZmVhdHVyZS4NCj4gDQoNClRoYW5rIHlvdSB2ZXJ5 IG11Y2ggZm9yIHRoZSB0ZXN0Lg0KDQo+IFRoYW5rcyENCj4gTGFzemxvDQo+IA0KPiANCj4gPiAr DQo+ID4gKyAgICAgIGlmIChSZWdFZHguQml0cy5OWCAhPSAwKSB7DQo+ID4gKyAgICAgICAgLy8g WEQgc3VwcG9ydGVkDQo+ID4gKyAgICAgICAgTXNyRWZlci5VaW50NjQgPSBBc21SZWFkTXNyNjQo TVNSX0NPUkVfSUEzMl9FRkVSKTsNCj4gPiArICAgICAgICBpZiAoTXNyRWZlci5CaXRzLk5YRSAh PSAwKSB7DQo+ID4gKyAgICAgICAgICAvLyBYRCBhY3RpdmF0ZWQNCj4gPiArICAgICAgICAgIG1Q YWdpbmdDb250ZXh0LkNvbnRleHREYXRhLklhMzIuQXR0cmlidXRlcyB8PQ0KPiBQQUdFX1RBQkxF X0xJQl9QQUdJTkdfQ09OVEVYVF9JQTMyX1g2NF9BVFRSSUJVVEVTX1hEX0FDVElWQVRFRDsNCj4g PiArICAgICAgICB9DQo+ID4gKyAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgIGlmIChSZWdFZHgu Qml0cy5QYWdlMUdCICE9IDApIHsNCj4gPiArICAgICAgICBtUGFnaW5nQ29udGV4dC5Db250ZXh0 RGF0YS5JYTMyLkF0dHJpYnV0ZXMgfD0NCj4gUEFHRV9UQUJMRV9MSUJfUEFHSU5HX0NPTlRFWFRf SUEzMl9YNjRfQVRUUklCVVRFU19QQUdFXzFHX1NVUFBPDQo+IFJUOw0KPiA+ICsgICAgICB9DQo+ ID4gICAgICB9DQo+ID4gICAgfQ0KPiA+ICsNCj4gPiArICAvLw0KPiA+ICsgIC8vIFRoaXMgY2Fu IGF2b2lkIGdldHRpbmcgU01NIHBhZ2luZyBjb250ZXh0IGlmIGluIFNNTSBtb2RlLiBXZSBjYW5u b3QNCj4gYXNzdW1lDQo+ID4gKyAgLy8gU01NIG1vZGUgc2hhcmVzIHRoZSBzYW1lIHBhZ2luZyBj b250ZXh0IGFzIERYRS4NCj4gPiArICAvLw0KPiA+ICsgIENvcHlNZW0gKFBhZ2luZ0NvbnRleHQs ICZtUGFnaW5nQ29udGV4dCwgc2l6ZW9mIChtUGFnaW5nQ29udGV4dCkpOw0KPiA+ICB9DQo+ID4N Cj4gPiAgLyoqDQo+ID4gQEAgLTUwNyw3ICs1NzMsMTQgQEAgSXNSZWFkT25seVBhZ2VXcml0ZVBy b3RlY3RlZCAoDQo+ID4gICAgVk9JRA0KPiA+ICAgICkNCj4gPiAgew0KPiA+IC0gIHJldHVybiAo KEFzbVJlYWRDcjAgKCkgJiBCSVQxNikgIT0gMCk7DQo+ID4gKyAgLy8NCj4gPiArICAvLyBUbyBh dm9pZCB1bmZvcnNlZW4gY29uc2VxdWVuY2VzLCBkb24ndCB0b3VjaCBwYWdpbmcgc2V0dGluZ3Mg aW4gU01NDQo+IG1vZGUNCj4gPiArICAvLyBpbiB0aGlzIGRyaXZlci4NCj4gPiArICAvLw0KPiA+ ICsgIGlmICghSXNJblNtbSAoKSkgew0KPiA+ICsgICAgcmV0dXJuICgoQXNtUmVhZENyMCAoKSAm IENSMF9XUCkgIT0gMCk7DQo+ID4gKyAgfQ0KPiA+ICsgIHJldHVybiBGQUxTRTsNCj4gPiAgfQ0K PiA+DQo+ID4gIC8qKg0KPiA+IEBAIC01MTgsNyArNTkxLDEzIEBAIERpc2FibGVSZWFkT25seVBh Z2VXcml0ZVByb3RlY3QgKA0KPiA+ICAgIFZPSUQNCj4gPiAgICApDQo+ID4gIHsNCj4gPiAtICBB c21Xcml0ZUNyMCAoQXNtUmVhZENyMCgpICYgfkJJVDE2KTsNCj4gPiArICAvLw0KPiA+ICsgIC8v IFRvIGF2b2lkIHVuZm9yc2VlbiBjb25zZXF1ZW5jZXMsIGRvbid0IHRvdWNoIHBhZ2luZyBzZXR0 aW5ncyBpbiBTTU0NCj4gbW9kZQ0KPiA+ICsgIC8vIGluIHRoaXMgZHJpdmVyLg0KPiA+ICsgIC8v DQo+ID4gKyAgaWYgKCFJc0luU21tICgpKSB7DQo+ID4gKyAgICBBc21Xcml0ZUNyMCAoQXNtUmVh ZENyMCAoKSAmIH5DUjBfV1ApOw0KPiA+ICsgIH0NCj4gPiAgfQ0KPiA+DQo+ID4gIC8qKg0KPiA+ IEBAIC01MjksNyArNjA4LDEzIEBAIEVuYWJsZVJlYWRPbmx5UGFnZVdyaXRlUHJvdGVjdCAoDQo+ ID4gICAgVk9JRA0KPiA+ICAgICkNCj4gPiAgew0KPiA+IC0gIEFzbVdyaXRlQ3IwIChBc21SZWFk Q3IwKCkgfCBCSVQxNik7DQo+ID4gKyAgLy8NCj4gPiArICAvLyBUbyBhdm9pZCB1bmZvcnNlZW4g Y29uc2VxdWVuY2VzLCBkb24ndCB0b3VjaCBwYWdpbmcgc2V0dGluZ3MgaW4gU01NDQo+IG1vZGUN Cj4gPiArICAvLyBpbiB0aGlzIGRyaXZlci4NCj4gPiArICAvLw0KPiA+ICsgIGlmICghSXNJblNt bSAoKSkgew0KPiA+ICsgICAgQXNtV3JpdGVDcjAgKEFzbVJlYWRDcjAgKCkgfCBDUjBfV1ApOw0K PiA+ICsgIH0NCj4gPiAgfQ0KPiA+DQo+ID4gIC8qKg0KPiA+DQoNCg==