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.20; helo=mga02.intel.com; envelope-from=jian.j.wang@intel.com; receiver=edk2-devel@lists.01.org Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id D1D902217CE23 for ; Wed, 6 Dec 2017 05:00:50 -0800 (PST) Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by orsmga101.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 06 Dec 2017 05:05:22 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.45,368,1508828400"; d="scan'208";a="10131745" Received: from fmsmsx106.amr.corp.intel.com ([10.18.124.204]) by fmsmga004.fm.intel.com with ESMTP; 06 Dec 2017 05:05:21 -0800 Received: from fmsmsx116.amr.corp.intel.com (10.18.116.20) by FMSMSX106.amr.corp.intel.com (10.18.124.204) with Microsoft SMTP Server (TLS) id 14.3.319.2; Wed, 6 Dec 2017 05:05:21 -0800 Received: from shsmsx101.ccr.corp.intel.com (10.239.4.153) by fmsmsx116.amr.corp.intel.com (10.18.116.20) with Microsoft SMTP Server (TLS) id 14.3.319.2; Wed, 6 Dec 2017 05:05:21 -0800 Received: from shsmsx103.ccr.corp.intel.com ([169.254.4.213]) by SHSMSX101.ccr.corp.intel.com ([169.254.1.159]) with mapi id 14.03.0319.002; Wed, 6 Dec 2017 21:05:19 +0800 From: "Wang, Jian J" To: "Ni, Ruiyu" , "edk2-devel@lists.01.org" CC: "Yao, Jiewen" , "Dong, Eric" , "Zeng, Star" Thread-Topic: [edk2] [PATCH v3 1/2] MdeModulePkg/DxeIpl: Mark page table as read-only Thread-Index: AQHTbaFWWrtmy1rtkUeahtgNwHzwnaM1kd2AgACxQIA= Date: Wed, 6 Dec 2017 13:05:19 +0000 Message-ID: References: <20171205081604.11644-1-jian.j.wang@intel.com> <20171205081604.11644-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: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiYWJjNTE1YjUtZjRiNS00OGYzLTlmMjgtYzg1NWY1NWRlY2E3IiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX0lDIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjIuNS4xOCIsIlRydXN0ZWRMYWJlbEhhc2giOiJiWGxYYndwYUFXQ3BrYjBlT3IxRHBCUkhUTXZocll6WjNRWGxlMnVKNjFmenhsS3Zub3laQjlUVFNzXC9NaUpJWCJ9 x-ctpclassification: CTP_IC dlp-product: dlpe-windows dlp-version: 11.0.0.116 dlp-reaction: no-action x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Subject: Re: [PATCH v3 1/2] MdeModulePkg/DxeIpl: Mark page table as read-only X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 06 Dec 2017 13:00:51 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 SGksDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogTmksIFJ1aXl1DQo+ IFNlbnQ6IFdlZG5lc2RheSwgRGVjZW1iZXIgMDYsIDIwMTcgNjowNSBQTQ0KPiBUbzogV2FuZywg SmlhbiBKIDxqaWFuLmoud2FuZ0BpbnRlbC5jb20+OyBlZGsyLWRldmVsQGxpc3RzLjAxLm9yZw0K PiBDYzogWWFvLCBKaWV3ZW4gPGppZXdlbi55YW9AaW50ZWwuY29tPjsgRG9uZywgRXJpYyA8ZXJp Yy5kb25nQGludGVsLmNvbT47DQo+IFplbmcsIFN0YXIgPHN0YXIuemVuZ0BpbnRlbC5jb20+DQo+ IFN1YmplY3Q6IFJlOiBbZWRrMl0gW1BBVENIIHYzIDEvMl0gTWRlTW9kdWxlUGtnL0R4ZUlwbDog TWFyayBwYWdlIHRhYmxlIGFzDQo+IHJlYWQtb25seQ0KPiANCj4gT24gMTIvNS8yMDE3IDQ6MTYg UE0sIEppYW4gSiBXYW5nIHdyb3RlOg0KPiA+PiB2MzoNCj4gPj4gICAgIFJlbW92ZSB0aGUgcHVi bGljIGRlZmluaXRpb24gb2YgUEFHRV9UQUJMRV9QT09MX0hFQURFUiBidXQga2VlcA0KPiBzaW1p bGFyDQo+ID4+ICAgICBjb25jZXB0IGxvY2FsbHkuIENwdUR4ZSBoYXMgaXRzIG93biBwYWdlIHRh YmxlIHBvb2wuDQo+ID4NCj4gPj4gdjI6DQo+ID4+ICAgICBJbnRyb2R1Y2UgcGFnZSB0YWJsZSBw b29sIHRvIGVhc2UgdGhlIHBhZ2UgdGFibGUgbWVtb3J5IGFsbG9jYXRpb24gYW5kDQo+ID4+ICAg ICBwcm90ZWN0aW9uLCB3aGljaCByZXBsYWNlcyB0aGUgZGlyZWN0IGNhbGxpbmcgb2YgQWxsb2Nh dGVQYWdlcygpLg0KPiA+DQo+ID4gVGhpcyBwYXRjaCB3aWxsIHNldCB0aGUgbWVtb3J5IHBhZ2Vz IHVzZWQgZm9yIHBhZ2UgdGFibGUgYXMgcmVhZC1vbmx5DQo+ID4gbWVtb3J5IGFmdGVyIHRoZSBw YWdpbmcgaXMgc2V0dXAuIENSMC5XUCBtdXN0IHNldCB0byBsZXQgaXQgdGFrZSBpbnRvDQo+ID4g ZWZmZWN0Lg0KPiA+DQo+ID4gQSBzaW1wbGUgcGFnZSB0YWJsZSBtZW1vcnkgbWFuYWdlbWVudCBt ZWNoYW5pc20sIHBhZ2UgdGFibGUgcG9vbA0KPiBjb25jZXB0LA0KPiA+IGlzIGludHJvZHVjZWQg dG8gc2ltcGxpZnkgdGhlIHBhZ2UgdGFibGUgbWVtb3J5IGFsbG9jYXRpb24gYW5kIHByb3RlY3Rp b24uDQo+ID4gSXQgd2lsbCBhbHNvIGhlbHAgdG8gcmVkdWNlIHRoZSBwb3RlbnRpYWwgcmVjdXJz aXZlICJzcGxpdCIgYWN0aW9uIGR1cmluZw0KPiA+IHVwZGF0aW5nIG1lbW9yeSBwYWdpbmcgYXR0 cmlidXRlcy4NCj4gPg0KPiA+IFRoZSBiYXNpYyBpZGVhIGlzIHRvIGFsbG9jYXRlIGEgYnVuY2gg b2YgY29udGludW91cyBwYWdlcyBvZiBtZW1vcnkgaW4NCj4gPiBhZHZhbmNlIGFzIG9uZSBvciBt b3JlIHBhZ2UgdGFibGUgcG9vbHMsIGFuZCBhbGwgZnV0dXJlIHBhZ2UgdGFibGVzDQo+ID4gY29u c3VtcHRpb24gd2lsbCBoYXBwZW4gaW4gdGhvc2UgcG9vbCBpbnN0ZWFkIG9mIHN5c3RlbSBtZW1v cnkuIElmIHRoZSBwYWdlDQo+ID4gcG9vbCBpcyByZXNlcnZlZCBhdCB0aGUgYm91bmRhcnkgb2Yg Mk1CIHBhZ2UgYW5kIHdpdGggc2FtZSBzaXplIG9mIDJNQiBwYWdlLA0KPiA+IHRoZXJlJ3Mgbm8g cGFnZSBncmFudWxhcml0eSAic3BsaXQiIG9wZXJhdGlvbiB3aWxsIGJlIG5lZWRlZCwgYmVjYXVz ZSB0aGUNCj4gPiBtZW1vcnkgb2YgbmV3IHBhZ2UgdGFibGVzIChpZiBuZWVkZWQpIHdpbGwgYmUg dXN1YWxseSBpbiB0aGUgc2FtZSBwYWdlIGFzDQo+ID4gdGFyZ2V0IHBhZ2UgdGFibGUgeW91J3Jl IHdvcmtpbmcgb24uDQo+ID4NCj4gPiBBbmQgc2luY2Ugd2UgaGF2ZSBjZW50cmFsaXplZCBwYWdl IHRhYmxlcyAoYSBmZXcgMk1CIHBhZ2VzKSwgaXQncyBlYXNpZXINCj4gPiB0byBwcm90ZWN0IHRo ZW0gYnkgY2hhbmdpbmcgdGhlaXIgYXR0cmlidXRlcyB0byBiZSByZWFkLW9ubHkgb25jZSBhbmQg Zm9yDQo+ID4gYWxsLiBUaGVyZSdzIG5vIG5lZWQgdG8gYXBwbHkgdGhlIHByb3RlY3Rpb24gZm9y IG5ldyBwYWdlIHRhYmxlcyBhbnkgbW9yZQ0KPiA+IGFzIGxvbmcgYXMgdGhlIHBvb2wgaGFzIGZy ZWUgcGFnZXMgYXZhaWxhYmxlLg0KPiA+DQo+ID4gT25jZSBjdXJyZW50IHBhZ2UgdGFibGUgcG9v bCBoYXMgYmVlbiB1c2VkIHVwLCBvbmUgY2FuIGFsbG9jYXRlIGFub3RoZXIgMk1CDQo+ID4gbWVt b3J5IHBvb2wgYW5kIGp1c3Qgc2V0IHRoaXMgbmV3IDJNQiBtZW1vcnkgYmxvY2sgdG8gYmUgcmVh ZC1vbmx5IGluc3RlYWQNCj4gb2YNCj4gPiBzZXR0aW5nIHRoZSBuZXcgcGFnZSB0YWJsZXMgb25l IHBhZ2UgYnkgb25lIHBhZ2UuDQo+ID4NCj4gPiBUd28gbmV3IFBDRHMgUGNkUGFnZVRhYmxlUG9v bFVuaXRTaXplIGFuZCBQY2RQYWdlVGFibGVQb29sQWxpZ25tZW50DQo+IGFyZSB1c2VkDQo+ID4g dG8gc3BlY2lmeSB0aGUgc2l6ZSBhbmQgYWxpZ25tZW50IGZvciBwYWdlIHRhYmxlIHBvb2wuIEZv ciBJQTMyIHByb2Nlc3Nvcg0KPiA+IDB4MjAwMDAwICgyTUIpIGlzIHRoZSBvbmx5IGNob2ljZSBm b3IgYm90aCBvZiB0aGVtIHRvIG1lZXQgdGhlIHJlcXVpcmVtZW50DQo+IG9mDQo+ID4gcGFnZSB0 YWJsZSBwb29sLg0KPiA+DQo+ID4gQ2M6IEppZXdlbiBZYW8gPGppZXdlbi55YW9AaW50ZWwuY29t Pg0KPiA+IENjOiBTdGFyIFplbmcgPHN0YXIuemVuZ0BpbnRlbC5jb20+DQo+ID4gQ2M6IEVyaWMg RG9uZyA8ZXJpYy5kb25nQGludGVsLmNvbT4NCj4gPiBDYzogUnVpeXUgTmkgPHJ1aXl1Lm5pQGlu dGVsLmNvbT4NCj4gPiBDb250cmlidXRlZC11bmRlcjogVGlhbm9Db3JlIENvbnRyaWJ1dGlvbiBB Z3JlZW1lbnQgMS4xDQo+ID4gU2lnbmVkLW9mZi1ieTogSmlhbiBKIFdhbmcgPGppYW4uai53YW5n QGludGVsLmNvbT4NCj4gPiAtLS0NCj4gPiAgIE1kZU1vZHVsZVBrZy9Db3JlL0R4ZUlwbFBlaW0v RHhlSXBsLmggICAgICAgICAgICB8ICAzNCArKysNCj4gPiAgIE1kZU1vZHVsZVBrZy9Db3JlL0R4 ZUlwbFBlaW0vSWEzMi9EeGVMb2FkRnVuYy5jICB8ICAgOCArLQ0KPiA+ICAgTWRlTW9kdWxlUGtn L0NvcmUvRHhlSXBsUGVpbS9YNjQvVmlydHVhbE1lbW9yeS5jIHwgMzAxDQo+ICsrKysrKysrKysr KysrKysrKysrKystDQo+ID4gICBNZGVNb2R1bGVQa2cvQ29yZS9EeGVJcGxQZWltL1g2NC9WaXJ0 dWFsTWVtb3J5LmggfCAgMjYgKysNCj4gPiAgIDQgZmlsZXMgY2hhbmdlZCwgMzY1IGluc2VydGlv bnMoKyksIDQgZGVsZXRpb25zKC0pDQo+ID4NCj4gPiBkaWZmIC0tZ2l0IGEvTWRlTW9kdWxlUGtn L0NvcmUvRHhlSXBsUGVpbS9EeGVJcGwuaA0KPiBiL01kZU1vZHVsZVBrZy9Db3JlL0R4ZUlwbFBl aW0vRHhlSXBsLmgNCj4gPiBpbmRleCBmM2FhYmRiN2UwLi45ZGM4MGIxNTA4IDEwMDY0NA0KPiA+ IC0tLSBhL01kZU1vZHVsZVBrZy9Db3JlL0R4ZUlwbFBlaW0vRHhlSXBsLmgNCj4gPiArKysgYi9N ZGVNb2R1bGVQa2cvQ29yZS9EeGVJcGxQZWltL0R4ZUlwbC5oDQo+ID4gQEAgLTI2NSw0ICsyNjUs MzggQEAgSXNOdWxsRGV0ZWN0aW9uRW5hYmxlZCAoDQo+ID4gICAgIFZPSUQNCj4gPiAgICAgKTsN Cj4gPg0KPiA+ICsvKioNCj4gPiArICBQcmV2ZW50IHRoZSBtZW1vcnkgcGFnZXMgdXNlZCBmb3Ig cGFnZSB0YWJsZSBmcm9tIGJlZW4gb3ZlcndyaXR0ZW4uDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtp bl0gUGFnZVRhYmxlQmFzZSAgICBCYXNlIGFkZHJlc3Mgb2YgcGFnZSB0YWJsZSAoQ1IzKS4NCj4g PiArDQo+ID4gKyoqLw0KPiA+ICtWT0lEDQo+ID4gK0VuYWJsZVBhZ2VUYWJsZVByb3RlY3Rpb24g KA0KPiA+ICsgIElOICBVSU5UTiAgICAgUGFnZVRhYmxlQmFzZSwNCj4gPiArICBJTiAgQk9PTEVB TiAgIExldmVsNFBhZ2luZw0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBUaGlz IEFQSSBwcm92aWRlcyBhIHdheSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIHBhZ2UgdGFibGUuDQo+ ID4gKw0KPiA+ICsgIFRoaXMgQVBJIGNhbiBiZSBjYWxsZWQgbW9yZSB0aGFuIG9uY2UgdG8gYWxs b2NhdGUgbWVtb3J5IGZvciBwYWdlIHRhYmxlcy4NCj4gPiArDQo+ID4gKyAgQWxsb2NhdGVzIHRo ZSBudW1iZXIgb2YgNEtCIHBhZ2VzIGFuZCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgYWxsb2Nh dGVkDQo+ID4gKyAgYnVmZmVyLiBUaGUgYnVmZmVyIHJldHVybmVkIGlzIGFsaWduZWQgb24gYSA0 S0IgYm91bmRhcnkuDQo+ID4gKw0KPiA+ICsgIElmIFBhZ2VzIGlzIDAsIHRoZW4gTlVMTCBpcyBy ZXR1cm5lZC4NCj4gPiArICBJZiB0aGVyZSBpcyBub3QgZW5vdWdoIG1lbW9yeSByZW1haW5pbmcg dG8gc2F0aXNmeSB0aGUgcmVxdWVzdCwgdGhlbiBOVUxMIGlzDQo+ID4gKyAgcmV0dXJuZWQuDQo+ ID4gKw0KPiA+ICsgIEBwYXJhbSAgUGFnZXMgICAgICAgICAgICAgICAgIFRoZSBudW1iZXIgb2Yg NCBLQiBwYWdlcyB0byBhbGxvY2F0ZS4NCj4gPiArDQo+ID4gKyAgQHJldHVybiBBIHBvaW50ZXIg dG8gdGhlIGFsbG9jYXRlZCBidWZmZXIgb3IgTlVMTCBpZiBhbGxvY2F0aW9uIGZhaWxzLg0KPiA+ ICsNCj4gPiArKiovDQo+ID4gK1ZPSUQgKg0KPiA+ICtBbGxvY2F0ZVBhZ2VUYWJsZU1lbW9yeSAo DQo+ID4gKyAgSU4gVUlOVE4gICAgICAgICAgIFBhZ2VzDQo+ID4gKyAgKTsNCj4gPiArDQo+ID4g ICAjZW5kaWYNCj4gPiBkaWZmIC0tZ2l0IGEvTWRlTW9kdWxlUGtnL0NvcmUvRHhlSXBsUGVpbS9J YTMyL0R4ZUxvYWRGdW5jLmMNCj4gYi9NZGVNb2R1bGVQa2cvQ29yZS9EeGVJcGxQZWltL0lhMzIv RHhlTG9hZEZ1bmMuYw0KPiA+IGluZGV4IDU2NDkyNjUzNjcuLjEzZmZmMjhlOTMgMTAwNjQ0DQo+ ID4gLS0tIGEvTWRlTW9kdWxlUGtnL0NvcmUvRHhlSXBsUGVpbS9JYTMyL0R4ZUxvYWRGdW5jLmMN Cj4gPiArKysgYi9NZGVNb2R1bGVQa2cvQ29yZS9EeGVJcGxQZWltL0lhMzIvRHhlTG9hZEZ1bmMu Yw0KPiA+IEBAIC05OSw3ICs5OSw3IEBAIENyZWF0ZTRHUGFnZVRhYmxlc0lhMzJQYWUgKA0KPiA+ ICAgICBOdW1iZXJPZlBkcEVudHJpZXNOZWVkZWQgPSAoVUlOVDMyKSBMU2hpZnRVNjQgKDEsIChQ aHlzaWNhbEFkZHJlc3NCaXRzIC0NCj4gMzApKTsNCj4gPg0KPiA+ICAgICBUb3RhbFBhZ2VzTnVt ID0gTnVtYmVyT2ZQZHBFbnRyaWVzTmVlZGVkICsgMTsNCj4gPiAtICBQYWdlQWRkcmVzcyA9IChV SU5UTikgQWxsb2NhdGVQYWdlcyAoVG90YWxQYWdlc051bSk7DQo+ID4gKyAgUGFnZUFkZHJlc3Mg PSAoVUlOVE4pIEFsbG9jYXRlUGFnZVRhYmxlTWVtb3J5IChUb3RhbFBhZ2VzTnVtKTsNCj4gPiAg ICAgQVNTRVJUIChQYWdlQWRkcmVzcyAhPSAwKTsNCj4gPg0KPiA+ICAgICBQYWdlTWFwID0gKFZP SUQgKikgUGFnZUFkZHJlc3M7DQo+ID4gQEAgLTE0OSw2ICsxNDksMTIgQEAgQ3JlYXRlNEdQYWdl VGFibGVzSWEzMlBhZSAoDQo+ID4gICAgICAgICApOw0KPiA+ICAgICB9DQo+ID4NCj4gPiArICAv Lw0KPiA+ICsgIC8vIFByb3RlY3QgdGhlIHBhZ2UgdGFibGUgYnkgbWFya2luZyB0aGUgbWVtb3J5 IHVzZWQgZm9yIHBhZ2UgdGFibGUgdG8gYmUNCj4gPiArICAvLyByZWFkLW9ubHkuDQo+ID4gKyAg Ly8NCj4gPiArICBFbmFibGVQYWdlVGFibGVQcm90ZWN0aW9uICgoVUlOVE4pUGFnZU1hcCwgRkFM U0UpOw0KPiA+ICsNCj4gPiAgICAgcmV0dXJuIChVSU5UTikgUGFnZU1hcDsNCj4gPiAgIH0NCj4g Pg0KPiA+IGRpZmYgLS1naXQgYS9NZGVNb2R1bGVQa2cvQ29yZS9EeGVJcGxQZWltL1g2NC9WaXJ0 dWFsTWVtb3J5LmMNCj4gYi9NZGVNb2R1bGVQa2cvQ29yZS9EeGVJcGxQZWltL1g2NC9WaXJ0dWFs TWVtb3J5LmMNCj4gPiBpbmRleCAyOWI2MjA1ZTg4Li40ZWYzNTIxMjI0IDEwMDY0NA0KPiA+IC0t LSBhL01kZU1vZHVsZVBrZy9Db3JlL0R4ZUlwbFBlaW0vWDY0L1ZpcnR1YWxNZW1vcnkuYw0KPiA+ ICsrKyBiL01kZU1vZHVsZVBrZy9Db3JlL0R4ZUlwbFBlaW0vWDY0L1ZpcnR1YWxNZW1vcnkuYw0K PiA+IEBAIC0zMSw2ICszMSwxMSBAQCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJ T05TIE9GIEFOWQ0KPiBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELg0KPiA+ICAgI2lu Y2x1ZGUgIkR4ZUlwbC5oIg0KPiA+ICAgI2luY2x1ZGUgIlZpcnR1YWxNZW1vcnkuaCINCj4gPg0K PiA+ICsvLw0KPiA+ICsvLyBHbG9iYWwgdmFyaWFibGUgdG8ga2VlcCB0cmFjayBjdXJyZW50IGF2 YWlsYWJsZSBtZW1vcnkgdXNlZCBhcyBwYWdlIHRhYmxlLg0KPiA+ICsvLw0KPiA+ICtQQUdFX1RB QkxFX1BPT0wgICAqbVBhZ2VUYWJsZVBvb2wgPSBOVUxMOw0KPiA+ICsNCj4gPiAgIC8qKg0KPiA+ ICAgICBDbGVhciBsZWdhY3kgbWVtb3J5IGxvY2F0ZWQgYXQgdGhlIGZpcnN0IDRLLXBhZ2UsIGlm IGF2YWlsYWJsZS4NCj4gPg0KPiA+IEBAIC0xMTcsNiArMTIyLDExMiBAQCBFbmFibGVFeGVjdXRl RGlzYWJsZUJpdCAoDQo+ID4gICAgIEFzbVdyaXRlTXNyNjQgKDB4QzAwMDAwODAsIE1zclJlZ2lz dGVycyk7DQo+ID4gICB9DQo+ID4NCj4gPiArLyoqDQo+ID4gKyAgSW5pdGlhbGl6ZSBhIGJ1ZmZl ciBwb29sIGZvciBwYWdlIHRhYmxlIHVzZSBvbmx5Lg0KPiA+ICsNCj4gPiArICBUbyByZWR1Y2Ug dGhlIHBvdGVudGlhbCBzcGxpdCBvcGVyYXRpb24gb24gcGFnZSB0YWJsZSwgdGhlIHBhZ2VzIHJl c2VydmVkIGZvcg0KPiA+ICsgIHBhZ2UgdGFibGUgc2hvdWxkIGJlIGFsbG9jYXRlZCBpbiB0aGUg dGltZXMgb2YgNTEyICg9IFNJWkVfMk1CKSBhbmQgYXQgdGhlDQo+ID4gKyAgYm91bmRhcnkgb2Yg U0laRV8yTUIuIFNvIHRoZSBwYWdlIHBvb2wgaXMgYWx3YXlzIGluaXRpYWxpemVkIHdpdGggbnVt YmVyIG9mDQo+ID4gKyAgcGFnZXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSBnaXZlbiBQ b29sUGFnZXMuDQo+ID4gKw0KPiA+ICsgIE9uY2UgdGhlIHBhZ2VzIGluIHRoZSBwb29sIGFyZSB1 c2VkIHVwLCB0aGlzIG1ldGhvZCBzaG91bGQgYmUgY2FsbGVkIGFnYWluDQo+IHRvDQo+ID4gKyAg cmVzZXJ2ZSBhdCBsZWFzdCBhbm90aGVyIDUxMiBwYWdlcy4gQnV0IHVzdWFsbHkgdGhpcyB3b24n dCBoYXBwZW4gaW4gcHJhY3RpY2UuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbSBQb29sUGFnZXMgIFRo ZSBsZWFzdCBwYWdlIG51bWJlciBvZiB0aGUgcG9vbCB0byBiZSBjcmVhdGVkLg0KPiA+ICsNCj4g PiArICBAcmV0dmFsIFRSVUUgICAgVGhlIHBvb2wgaXMgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5 Lg0KPiA+ICsgIEByZXR2YWwgRkFMU0UgICBUaGUgbWVtb3J5IGlzIG91dCBvZiByZXNvdXJjZS4N Cj4gPiArKiovDQo+ID4gK0JPT0xFQU4NCj4gPiArSW5pdGlhbGl6ZVBhZ2VUYWJsZVBvb2wgKA0K PiA+ICsgIElOIFVJTlROICAgICAgICAgICBQb29sUGFnZXMNCj4gPiArICApDQo+ID4gK3sNCj4g PiArICBWT0lEICAgICAgICAgICpCdWZmZXI7DQo+ID4gKw0KPiA+ICsgIC8vDQo+ID4gKyAgLy8g QWx3YXlzIHJlc2VydmUgYXQgbGVhc3QgUEFHRV9UQUJMRV9QT09MX1VOSVRfUEFHRVMgKDUxMiku DQo+ID4gKyAgLy8NCj4gPiArICBpZiAoUG9vbFBhZ2VzIDw9IFBBR0VfVEFCTEVfUE9PTF9VTklU X1BBR0VTKSB7DQo+ID4gKyAgICBQb29sUGFnZXMgPSBQQUdFX1RBQkxFX1BPT0xfVU5JVF9QQUdF UzsNCj4gPiArICB9IGVsc2Ugew0KPiA+ICsgICAgUG9vbFBhZ2VzID0gKChQb29sUGFnZXMgKyBQ QUdFX1RBQkxFX1BPT0xfVU5JVF9QQUdFUyAtIDEpIC8NCj4gPiArICAgICAgICAgICAgICAgICBQ QUdFX1RBQkxFX1BPT0xfVU5JVF9QQUdFUykgKg0KPiBQQUdFX1RBQkxFX1BPT0xfVU5JVF9QQUdF UzsNCj4gDQo+IFdoYXQgZG9lcyB0aGUgYWJvdmUgY2FsY3VsYXRpb24gbWVhbj8NCj4gSWYgUG9v bFBhZ2VzIGVxdWFscyB0byA1MTMsIG5ldyBQb29sUGFnZXMgPSAoKDUxMyArIDUxMikgJSA1MTIp ICogNTEyDQo+ID0gNTEyLg0KPiANCj4gTWF5YmUgdGhlIGxvZ2ljIGlzIHRyeWluZyB0byBtYWtl IFBvb2xQYWdlcyBtdWx0aXBsZSBvZiA1MTI/DQo+IElmIGl0J3MgYW4gaW50ZXJuYWwgZnVuY3Rp b24sIGp1c3QgYXNzZXJ0IHdoZW4gUG9vbFBhZ2VzIGlzIG5vdCBtdWx0aXBsZQ0KPiBvZiA1MTIg c2hvdWxkIGJlIGdvb2QgZW5vdWdoLg0KPiANCg0KSSB3YW50IHRvIGFsd2F5cyBnZXQgbXVsdGlw bGUgdGltZXMgb2YgNTEyIHBhZ2VzIHdoaWNoIGlzIGxhcmdlIHRoYW4gcmVxdWVzdGVkIHBhZ2Vz Lg0KQmVjYXVzZSB0aGVyZSdzIGEgY2hhbmNlIChtb3N0IGxpa2VseSBhdCB0aGUgZmlyc3QgdGlt ZSBvZiByZXF1ZXN0aW5nIHBhZ2UgdGFibGVzKQ0KdGhhdCBtb3JlIHRoYW4gNTEyIHBhZ2VzIG9m IHBhZ2UgdGFibGUgd2lsbCBiZSByZXF1ZXN0ZWQsIGFuZCB3ZSBkb24ndCBrbm93IGZvciBzdXJl DQpob3cgbWFueSBwYWdlIHRhYmxlcyBhcmUgcmVxdWlyZWQgYXQgZWFjaCBib290IG9uIGRpZmZl cmVudCBwbGF0Zm9ybSwgSSB0aGluayBpdCBpcyBzYWZlcg0KdG8gbGV0IHRoZSBJbml0aWxpYXpl UGFnZVRhYmxlUG9vbCB0byBjYWxjdWxhdGUgYSByaWdodCBudW1iZXIgcGFnZXMgdG8gcmVzZXJ2 ZSBpbiBwb29sLg0KDQpJbiBhZGRpdGlvbiwgSSB0aGluayBpdCdkIGJlIGJldHRlciBub3QgdG8g ZXhwb3NlIHRoZSBwb29sIGRldGFpbHMgdG8gaXRzIHVzZXJzLCB3aG8ganVzdCBuZWVkDQp0byBy ZXF1ZXN0IGRlc2lyZWQgbnVtYmVyIG9mIHBhZ2VzIGZvciBwYWdlIHRhYmxlLg0KDQpBbmQgeW91 J3JlIHJpZ2h0IHRoZXJlJ3MgZXJyb3IgaW4gdGhlIGNhbGN1bGF0aW9uLiBUaGFua3MgZm9yIGNh dGNoaW5nIGl0Lg0KDQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBCdWZmZXIgPSBBbGxvY2F0ZUFs aWduZWRQYWdlcyAoUG9vbFBhZ2VzLA0KPiBQQUdFX1RBQkxFX1BPT0xfQUxJR05NRU5UKTsNCj4g DQo+IFBBR0VfVEFCTEVfUE9PTF9VTklUX1BBR0VTIGFuZCBQQUdFX1RBQkxFX1BPT0xfQUxJR05N RU5UIGFjdHVhbGx5DQo+IGRvDQo+IGhhdmUgc29tZSByZWxhdGlvbnNoaXAgYmV0d2Vlbi4gTWF5 YmUganVzdCB1c2UNCj4gRUZJX1NJWkVfVE9fUEFHRVMgKFNJWkVfMk1CKSB0byByZXBsYWNlIFBB R0VfVEFCTEVfUE9PTF9VTklUX1BBR0VTDQo+IGFuZA0KPiBTSVpFXzJNQiB0byByZXBsYWNlIFBB R0VfVEFCTEVfUE9PTF9BTElHTk1FTlQ/DQo+IA0KDQpGb3IgSUEgcHJvY2Vzc29yLCAyTUIgaXMg YWN0dWFsbHkgb3VyIG9ubHkgY2hvaWNlIGZvciB0aGUgcG9vbCB1bml0IHNpemUgYW5kIGFsaWdu bWVudC4NClNvIEkgZG9uJ3QgaGF2ZSBzdHJvbmcgb3BpbmlvbiBmb3IgdGhpcy4gQW55d2F5IHdv cmtzIGZvciBtZS4NCg0KPiA+ICsgIGlmIChCdWZmZXIgPT0gTlVMTCkgew0KPiA+ICsgICAgREVC VUcgKChERUJVR19FUlJPUiwgIkVSUk9SOiBPdXQgb2YgYWxpZ25lZCBwYWdlc1xyXG4iKSk7DQo+ ID4gKyAgICByZXR1cm4gRkFMU0U7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICAvLw0KPiA+ICsg IC8vIExpbmsgYWxsIHBvb2xzIGludG8gYSBsaXN0IGZvciBlYXNpZXIgdHJhY2sgbGF0ZXIuDQo+ ID4gKyAgLy8NCj4gPiArICBpZiAobVBhZ2VUYWJsZVBvb2wgPT0gTlVMTCkgew0KPiA+ICsgICAg bVBhZ2VUYWJsZVBvb2wgPSBCdWZmZXI7DQo+ID4gKyAgICBtUGFnZVRhYmxlUG9vbC0+TmV4dFBv b2wgPSBtUGFnZVRhYmxlUG9vbDsNCj4gPiArICB9IGVsc2Ugew0KPiA+ICsgICAgKChQQUdFX1RB QkxFX1BPT0wgKilCdWZmZXIpLT5OZXh0UG9vbCA9IG1QYWdlVGFibGVQb29sLT5OZXh0UG9vbDsN Cj4gPiArICAgIG1QYWdlVGFibGVQb29sLT5OZXh0UG9vbCA9IEJ1ZmZlcjsNCj4gPiArICAgIG1Q YWdlVGFibGVQb29sID0gQnVmZmVyOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgLy8NCj4gPiAr ICAvLyBSZXNlcnZlIG9uZSBwYWdlIGZvciBwb29sIGhlYWRlci4NCj4gPiArICAvLw0KPiA+ICsg IG1QYWdlVGFibGVQb29sLT5GcmVlUGFnZXMgID0gUG9vbFBhZ2VzIC0gMTsNCj4gPiArICBtUGFn ZVRhYmxlUG9vbC0+T2Zmc2V0ID0gRUZJX1BBR0VTX1RPX1NJWkUgKDEpOw0KPiA+ICsNCj4gPiAr ICByZXR1cm4gVFJVRTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgVGhpcyBBUEkg cHJvdmlkZXMgYSB3YXkgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBwYWdlIHRhYmxlLg0KPiA+ICsN Cj4gPiArICBUaGlzIEFQSSBjYW4gYmUgY2FsbGVkIG1vcmUgdGhhbiBvbmNlIHRvIGFsbG9jYXRl IG1lbW9yeSBmb3IgcGFnZSB0YWJsZXMuDQo+ID4gKw0KPiA+ICsgIEFsbG9jYXRlcyB0aGUgbnVt YmVyIG9mIDRLQiBwYWdlcyBhbmQgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGFsbG9jYXRlZA0K PiA+ICsgIGJ1ZmZlci4gVGhlIGJ1ZmZlciByZXR1cm5lZCBpcyBhbGlnbmVkIG9uIGEgNEtCIGJv dW5kYXJ5Lg0KPiA+ICsNCj4gPiArICBJZiBQYWdlcyBpcyAwLCB0aGVuIE5VTEwgaXMgcmV0dXJu ZWQuDQo+ID4gKyAgSWYgdGhlcmUgaXMgbm90IGVub3VnaCBtZW1vcnkgcmVtYWluaW5nIHRvIHNh dGlzZnkgdGhlIHJlcXVlc3QsIHRoZW4gTlVMTCBpcw0KPiA+ICsgIHJldHVybmVkLg0KPiA+ICsN Cj4gPiArICBAcGFyYW0gIFBhZ2VzICAgICAgICAgICAgICAgICBUaGUgbnVtYmVyIG9mIDQgS0Ig cGFnZXMgdG8gYWxsb2NhdGUuDQo+ID4gKw0KPiA+ICsgIEByZXR1cm4gQSBwb2ludGVyIHRvIHRo ZSBhbGxvY2F0ZWQgYnVmZmVyIG9yIE5VTEwgaWYgYWxsb2NhdGlvbiBmYWlscy4NCj4gPiArDQo+ ID4gKyoqLw0KPiA+ICtWT0lEICoNCj4gPiArQWxsb2NhdGVQYWdlVGFibGVNZW1vcnkgKA0KPiA+ ICsgIElOIFVJTlROICAgICAgICAgICBQYWdlcw0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIFZP SUQgICAgICAgICAgKkJ1ZmZlcjsNCj4gPiArDQo+ID4gKyAgaWYgKFBhZ2VzID09IDApIHsNCj4g PiArICAgIHJldHVybiBOVUxMOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgLy8NCj4gPiArICAv LyBSZW5ldyB0aGUgcG9vbCBpZiBuZWNlc3NhcnkuDQo+ID4gKyAgLy8NCj4gPiArICBpZiAobVBh Z2VUYWJsZVBvb2wgPT0gTlVMTCB8fA0KPiA+ICsgICAgICBQYWdlcyA+IG1QYWdlVGFibGVQb29s LT5GcmVlUGFnZXMpIHsNCj4gDQo+IEdyZWF0IHRvIHVzZSBGcmVlUGFnZXMgdG8gdHJhY2sgdGhl IHJlbWFpbmluZyBmcmVlIHBhZ2VzLg0KPiBJdCdzIHBvc3NpYmxlIHRoYXQgd2hlbiBGcmVlUGFn ZXMgZXF1YWxzIHRvIDMsIFBhZ2VzDQo+IGVxdWFscyB0byA0LCB0aGUgMyBwYWdlcyBhcmUgd2Fz dGVkLg0KPiBCdXQgSSB0aGluayBpdCBzaG91bGQgYmUgZmluZS4gTm90IGEgYmlnIHdhc3RlIG9m IG1lbW9yeS4NCj4gDQoNClllcyBhbmQgTm8uIFRoZW9yZXRpY2FsbHksIHBhZ2VzIHdpbGwgYmUg d2FzdGVkIGluIHlvdXIgY2FzZS4gVGhhdCdzIGZvciBzdXJlLg0KQnV0IGluIGFjdHVhbCBjdXJy ZW50IGNvZGUsIHRoZXJlJ3Mgbm8gY2hhbmNlIHRvIHJlcXVlc3QgbW9yZSB0aGFuIDEgcGFnZQ0K ZWFjaCB0aW1lIGFmdGVyIHRoZSBmaXJzdCBwYWdlIHRhYmxlIG1lbW9yeSByZXF1ZXN0LiBTbyB5 b3VyIGNhc2Ugd29uJ3QNCmhhcHBlbi4NCg0KQW55d2F5LCBJIHRoaW5rIHdlIGRvbid0IG5lZWQg YSBjb21wbGljYXRlZCBtZW1vcnkgbWFuYWdlbWVudCBoZXJlLg0KSSBhZ3JlZSB0aGF0IGEgbGl0 dGxlIGJpdCBtZW1vcnkgd2FzdGUgaXMgYWNjZXB0YWJsZS4NCg0KPiA+ICsgICAgaWYgKCFJbml0 aWFsaXplUGFnZVRhYmxlUG9vbCAoUGFnZXMpKSB7DQo+ID4gKyAgICAgIHJldHVybiBOVUxMOw0K PiA+ICsgICAgfQ0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgQnVmZmVyID0gKFVJTlQ4ICopbVBh Z2VUYWJsZVBvb2wgKyBtUGFnZVRhYmxlUG9vbC0+T2Zmc2V0Ow0KPiA+ICsNCj4gPiArICBtUGFn ZVRhYmxlUG9vbC0+T2Zmc2V0ICAgICArPSBFRklfUEFHRVNfVE9fU0laRSAoUGFnZXMpOw0KPiA+ ICsgIG1QYWdlVGFibGVQb29sLT5GcmVlUGFnZXMgIC09IFBhZ2VzOw0KPiA+ICsNCj4gPiArICBy ZXR1cm4gQnVmZmVyOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICAgLyoqDQo+ID4gICAgIFNwbGl0IDJN IHBhZ2UgdG8gNEsuDQo+ID4NCj4gPiBAQCAtMTQ0LDcgKzI1NSw3IEBAIFNwbGl0Mk1QYWdlVG80 SyAoDQo+ID4gICAgIC8vDQo+ID4gICAgIEFkZHJlc3NFbmNNYXNrID0gUGNkR2V0NjQgKFBjZFB0 ZU1lbW9yeUVuY3J5cHRpb25BZGRyZXNzT3JNYXNrKSAmDQo+IFBBR0lOR18xR19BRERSRVNTX01B U0tfNjQ7DQo+ID4NCj4gPiAtICBQYWdlVGFibGVFbnRyeSA9IEFsbG9jYXRlUGFnZXMgKDEpOw0K PiA+ICsgIFBhZ2VUYWJsZUVudHJ5ID0gQWxsb2NhdGVQYWdlVGFibGVNZW1vcnkgKDEpOw0KPiA+ ICAgICBBU1NFUlQgKFBhZ2VUYWJsZUVudHJ5ICE9IE5VTEwpOw0KPiA+DQo+ID4gICAgIC8vDQo+ ID4gQEAgLTIwNCw3ICszMTUsNyBAQCBTcGxpdDFHUGFnZVRvMk0gKA0KPiA+ICAgICAvLw0KPiA+ ICAgICBBZGRyZXNzRW5jTWFzayA9IFBjZEdldDY0IChQY2RQdGVNZW1vcnlFbmNyeXB0aW9uQWRk cmVzc09yTWFzaykgJg0KPiBQQUdJTkdfMUdfQUREUkVTU19NQVNLXzY0Ow0KPiA+DQo+ID4gLSAg UGFnZURpcmVjdG9yeUVudHJ5ID0gQWxsb2NhdGVQYWdlcyAoMSk7DQo+ID4gKyAgUGFnZURpcmVj dG9yeUVudHJ5ID0gQWxsb2NhdGVQYWdlVGFibGVNZW1vcnkgKDEpOw0KPiA+ICAgICBBU1NFUlQg KFBhZ2VEaXJlY3RvcnlFbnRyeSAhPSBOVUxMKTsNCj4gPg0KPiA+ICAgICAvLw0KPiA+IEBAIC0y MzQsNiArMzQ1LDE4NCBAQCBTcGxpdDFHUGFnZVRvMk0gKA0KPiA+ICAgICB9DQo+ID4gICB9DQo+ ID4NCj4gPiArLyoqDQo+ID4gKyAgU2V0IG9uZSBwYWdlIG9mIHBhZ2UgdGFibGUgcG9vbCBtZW1v cnkgdG8gYmUgcmVhZC1vbmx5Lg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dIFBhZ2VUYWJsZUJh c2UgICAgQmFzZSBhZGRyZXNzIG9mIHBhZ2UgdGFibGUgKENSMykuDQo+ID4gKyAgQHBhcmFtW2lu XSBBZGRyZXNzICAgICAgICAgIFN0YXJ0IGFkZHJlc3Mgb2YgYSBwYWdlIHRvIGJlIHNldCBhcyBy ZWFkLW9ubHkuDQo+ID4gKyAgQHBhcmFtW2luXSBMZXZlbDRQYWdpbmcgICAgIExldmVsIDQgcGFn aW5nIGZsYWcuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArVk9JRA0KPiA+ICtTZXRQYWdlVGFibGVQ b29sUmVhZE9ubHkgKA0KPiA+ICsgIElOICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUGFnZVRhYmxlQmFzZSwNCj4gPiArICBJTiAgRUZJX1BIWVNJQ0FMX0FERFJFU1MgICAgICAg ICAgICAgIEFkZHJlc3MsDQo+ID4gKyAgSU4gIEJPT0xFQU4gICAgICAgICAgICAgICAgICAgICAg ICAgICBMZXZlbDRQYWdpbmcNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBVSU5UTiAgICAgICAg ICAgICAgICAgSW5kZXg7DQo+ID4gKyAgVUlOVE4gICAgICAgICAgICAgICAgIEVudHJ5SW5kZXg7 DQo+ID4gKyAgVUlOVDY0ICAgICAgICAgICAgICAgIEFkZHJlc3NFbmNNYXNrOw0KPiA+ICsgIEVG SV9QSFlTSUNBTF9BRERSRVNTICBQaHlzaWNhbEFkZHJlc3M7DQo+ID4gKyAgVUlOVDY0ICAgICAg ICAgICAgICAgICpQYWdlVGFibGU7DQo+ID4gKyAgVUlOVDY0ICAgICAgICAgICAgICAgICpOZXdQ YWdlVGFibGU7DQo+ID4gKyAgVUlOVDY0ICAgICAgICAgICAgICAgIFBhZ2VBdHRyOw0KPiA+ICsg IFVJTlQ2NCAgICAgICAgICAgICAgICBMZXZlbFNpemVbNV07DQo+ID4gKyAgVUlOVDY0ICAgICAg ICAgICAgICAgIExldmVsTWFza1s1XTsNCj4gPiArICBVSU5UTiAgICAgICAgICAgICAgICAgTGV2 ZWxTaGlmdFs1XTsNCj4gPiArICBVSU5UTiAgICAgICAgICAgICAgICAgTGV2ZWw7DQo+ID4gKyAg VUlOVDY0ICAgICAgICAgICAgICAgIFBvb2xVbml0U2l6ZTsNCj4gPiArDQo+ID4gKyAgQVNTRVJU IChQYWdlVGFibGVCYXNlICE9IDApOw0KPiA+ICsNCj4gPiArICAvLw0KPiA+ICsgIC8vIFNpbmNl IHRoZSBwYWdlIHRhYmxlIGlzIGFsd2F5cyBmcm9tIHBhZ2UgdGFibGUgcG9vbCwgd2hpY2ggaXMg YWx3YXlzDQo+ID4gKyAgLy8gbG9jYXRlZCBhdCB0aGUgYm91bmRhcnkgb2YgUGNkUGFnZVRhYmxl UG9vbEFsaWdubWVudCwgd2UganVzdCBuZWVkIHRvDQo+ID4gKyAgLy8gc2V0IHRoZSB3aG9sZSBw b29sIHVuaXQgdG8gYmUgcmVhZC1vbmx5Lg0KPiA+ICsgIC8vDQo+ID4gKyAgQWRkcmVzcyA9IEFk ZHJlc3MgJiBQQUdFX1RBQkxFX1BPT0xfQUxJR05fTUFTSzsNCj4gPiArDQo+ID4gKyAgTGV2ZWxT aGlmdFsxXSA9IFBBR0lOR19MMV9BRERSRVNTX1NISUZUOw0KPiA+ICsgIExldmVsU2hpZnRbMl0g PSBQQUdJTkdfTDJfQUREUkVTU19TSElGVDsNCj4gPiArICBMZXZlbFNoaWZ0WzNdID0gUEFHSU5H X0wzX0FERFJFU1NfU0hJRlQ7DQo+ID4gKyAgTGV2ZWxTaGlmdFs0XSA9IFBBR0lOR19MNF9BRERS RVNTX1NISUZUOw0KPiA+ICsNCj4gPiArICBMZXZlbE1hc2tbMV0gPSBQQUdJTkdfNEtfQUREUkVT U19NQVNLXzY0Ow0KPiA+ICsgIExldmVsTWFza1syXSA9IFBBR0lOR18yTV9BRERSRVNTX01BU0tf NjQ7DQo+ID4gKyAgTGV2ZWxNYXNrWzNdID0gUEFHSU5HXzFHX0FERFJFU1NfTUFTS182NDsNCj4g PiArICBMZXZlbE1hc2tbNF0gPSBQQUdJTkdfMUdfQUREUkVTU19NQVNLXzY0Ow0KPiA+ICsNCj4g PiArICBMZXZlbFNpemVbMV0gPSBTSVpFXzRLQjsNCj4gPiArICBMZXZlbFNpemVbMl0gPSBTSVpF XzJNQjsNCj4gPiArICBMZXZlbFNpemVbM10gPSBTSVpFXzFHQjsNCj4gPiArICBMZXZlbFNpemVb NF0gPSBTSVpFXzUxMkdCOw0KPiA+ICsNCj4gPiArICBBZGRyZXNzRW5jTWFzayAgPSBQY2RHZXQ2 NCAoUGNkUHRlTWVtb3J5RW5jcnlwdGlvbkFkZHJlc3NPck1hc2spICYNCj4gPiArICAgICAgICAg ICAgICAgICAgICBQQUdJTkdfMUdfQUREUkVTU19NQVNLXzY0Ow0KPiA+ICsgIFBhZ2VUYWJsZSAg ICAgICA9IChVSU5UNjQgKikoVUlOVE4pUGFnZVRhYmxlQmFzZTsNCj4gPiArICBQb29sVW5pdFNp emUgICAgPSBQQUdFX1RBQkxFX1BPT0xfVU5JVF9TSVpFOw0KPiA+ICsNCj4gPiArICBmb3IgKExl dmVsID0gKExldmVsNFBhZ2luZykgPyA0IDogMzsgTGV2ZWwgPiAwOyAtLUxldmVsKSB7DQo+ID4g KyAgICBJbmRleCA9ICgoVUlOVE4pUlNoaWZ0VTY0IChBZGRyZXNzLCBMZXZlbFNoaWZ0W0xldmVs XSkpOw0KPiA+ICsgICAgSW5kZXggJj0gUEFHSU5HX1BBRV9JTkRFWF9NQVNLOw0KPiA+ICsNCj4g PiArICAgIFBhZ2VBdHRyID0gUGFnZVRhYmxlW0luZGV4XTsNCj4gPiArICAgIGlmICgoUGFnZUF0 dHIgJiBJQTMyX1BHX1BTKSA9PSAwKSB7DQo+ID4gKyAgICAgIC8vDQo+ID4gKyAgICAgIC8vIEdv IHRvIG5leHQgbGV2ZWwgb2YgdGFibGUuDQo+ID4gKyAgICAgIC8vDQo+ID4gKyAgICAgIFBhZ2VU YWJsZSA9IChVSU5UNjQgKikoVUlOVE4pKFBhZ2VBdHRyICYgfkFkZHJlc3NFbmNNYXNrICYNCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEFHSU5HXzRLX0FERFJFU1Nf TUFTS182NCk7DQo+ID4gKyAgICAgIGNvbnRpbnVlOw0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiAr ICAgIGlmIChQb29sVW5pdFNpemUgPj0gTGV2ZWxTaXplW0xldmVsXSkgew0KPiA+ICsgICAgICAv Lw0KPiA+ICsgICAgICAvLyBDbGVhciBSL1cgYml0IGlmIGN1cnJlbnQgcGFnZSBncmFudWxhcml0 eSBpcyBub3QgbGFyZ2VyIHRoYW4gcG9vbCB1bml0DQo+ID4gKyAgICAgIC8vIHNpemUuDQo+ID4g KyAgICAgIC8vDQo+ID4gKyAgICAgIGlmICgoUGFnZUF0dHIgJiBJQTMyX1BHX1JXKSAhPSAwKSB7 DQo+ID4gKyAgICAgICAgd2hpbGUgKFBvb2xVbml0U2l6ZSA+IDApIHsNCj4gPiArICAgICAgICAg IC8vDQo+ID4gKyAgICAgICAgICAvLyBQQUdFX1RBQkxFX1BPT0xfVU5JVF9TSVpFIGFuZA0KPiBQ QUdFX1RBQkxFX1BPT0xfQUxJR05NRU5UIGFyZSBmaXQgaW4NCj4gPiArICAgICAgICAgIC8vIG9u ZSBwYWdlICgyTUIpLiBUaGVuIHdlIGRvbid0IG5lZWQgdG8gdXBkYXRlIGF0dHJpYnV0ZXMgZm9y IHBhZ2VzDQo+ID4gKyAgICAgICAgICAvLyBjcm9zc2luZyBwYWdlIGRpcmVjdG9yeS4gQVNTRVJU IGJlbG93IGlzIGZvciB0aGF0IHB1cnBvc2UuDQo+ID4gKyAgICAgICAgICAvLw0KPiA+ICsgICAg ICAgICAgQVNTRVJUIChJbmRleCA8IEVGSV9QQUdFX1NJWkUvc2l6ZW9mIChVSU5UNjQpKTsNCj4g PiArDQo+ID4gKyAgICAgICAgICBQYWdlVGFibGVbSW5kZXhdICY9IH4oVUlOVDY0KUlBMzJfUEdf Ulc7DQo+ID4gKyAgICAgICAgICBQb29sVW5pdFNpemUgICAgLT0gTGV2ZWxTaXplW0xldmVsXTsN Cj4gPiArDQo+ID4gKyAgICAgICAgICArK0luZGV4Ow0KPiA+ICsgICAgICAgIH0NCj4gPiArICAg ICAgfQ0KPiA+ICsNCj4gPiArICAgICAgYnJlYWs7DQo+ID4gKw0KPiA+ICsgICAgfSBlbHNlIHsN Cj4gPiArICAgICAgLy8NCj4gPiArICAgICAgLy8gVGhlIHNtYWxsZXIgZ3JhbnVsYXJpdHkgb2Yg cGFnZSBtdXN0IGJlIG5lZWRlZC4NCj4gPiArICAgICAgLy8NCj4gPiArICAgICAgTmV3UGFnZVRh YmxlID0gQWxsb2NhdGVQYWdlVGFibGVNZW1vcnkgKDEpOw0KPiA+ICsgICAgICBBU1NFUlQgKE5l d1BhZ2VUYWJsZSAhPSBOVUxMKTsNCj4gPiArDQo+ID4gKyAgICAgIFBoeXNpY2FsQWRkcmVzcyA9 IFBhZ2VBdHRyICYgTGV2ZWxNYXNrW0xldmVsXTsNCj4gPiArICAgICAgZm9yIChFbnRyeUluZGV4 ID0gMDsNCj4gPiArICAgICAgICAgICAgRW50cnlJbmRleCA8IEVGSV9QQUdFX1NJWkUvc2l6ZW9m IChVSU5UNjQpOw0KPiA+ICsgICAgICAgICAgICArK0VudHJ5SW5kZXgpIHsNCj4gPiArICAgICAg ICBOZXdQYWdlVGFibGVbRW50cnlJbmRleF0gPSBQaHlzaWNhbEFkZHJlc3MgIHwgQWRkcmVzc0Vu Y01hc2sgfA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElBMzJfUEdf UCB8IElBMzJfUEdfUlc7DQo+ID4gKyAgICAgICAgaWYgKExldmVsID4gMSkgew0KPiA+ICsgICAg ICAgICAgTmV3UGFnZVRhYmxlW0VudHJ5SW5kZXhdIHw9IElBMzJfUEdfUFM7DQo+ID4gKyAgICAg ICAgfQ0KPiA+ICsgICAgICAgIFBoeXNpY2FsQWRkcmVzcyArPSBMZXZlbFNpemVbTGV2ZWxdOw0K PiA+ICsgICAgICB9DQo+ID4gKw0KPiA+ICsgICAgICBQYWdlVGFibGVbSW5kZXhdID0gKFVJTlQ2 NCkoVUlOVE4pTmV3UGFnZVRhYmxlIHwgQWRkcmVzc0VuY01hc2sgfA0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUEzMl9QR19QIHwgSUEzMl9QR19SVzsNCj4g PiArICAgICAgUGFnZVRhYmxlID0gTmV3UGFnZVRhYmxlOw0KPiA+ICsgICAgfQ0KPiA+ICsgIH0N Cj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgUHJldmVudCB0aGUgbWVtb3J5IHBhZ2Vz IHVzZWQgZm9yIHBhZ2UgdGFibGUgZnJvbSBiZWVuIG92ZXJ3cml0dGVuLg0KPiA+ICsNCj4gPiAr ICBAcGFyYW1baW5dIFBhZ2VUYWJsZUJhc2UgICAgQmFzZSBhZGRyZXNzIG9mIHBhZ2UgdGFibGUg KENSMykuDQo+ID4gKyAgQHBhcmFtW2luXSBMZXZlbDRQYWdpbmcgICAgIExldmVsIDQgcGFnaW5n IGZsYWcuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArVk9JRA0KPiA+ICtFbmFibGVQYWdlVGFibGVQ cm90ZWN0aW9uICgNCj4gPiArICBJTiAgVUlOVE4gICAgIFBhZ2VUYWJsZUJhc2UsDQo+ID4gKyAg SU4gIEJPT0xFQU4gICBMZXZlbDRQYWdpbmcNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBQQUdF X1RBQkxFX1BPT0wgICAgICAgICAqSGVhZFBvb2w7DQo+ID4gKyAgUEFHRV9UQUJMRV9QT09MICAg ICAgICAgKlBvb2w7DQo+ID4gKyAgVUlOVDY0ICAgICAgICAgICAgICAgICAgUG9vbFNpemU7DQo+ ID4gKyAgRUZJX1BIWVNJQ0FMX0FERFJFU1MgICAgQWRkcmVzczsNCj4gPiArDQo+ID4gKyAgaWYg KG1QYWdlVGFibGVQb29sID09IE5VTEwpIHsNCj4gPiArICAgIHJldHVybjsNCj4gPiArICB9DQo+ ID4gKw0KPiA+ICsgIC8vDQo+ID4gKyAgLy8gRGlzYWJsZSB3cml0ZSBwcm90ZWN0aW9uLCBiZWNh dXNlIHdlIG5lZWQgdG8gbWFyayBwYWdlIHRhYmxlIHRvIGJlIHdyaXRlDQo+ID4gKyAgLy8gcHJv dGVjdGVkLg0KPiA+ICsgIC8vDQo+ID4gKyAgQXNtV3JpdGVDcjAgKEFzbVJlYWRDcjAoKSAmIH5D UjBfV1ApOw0KPiA+ICsNCj4gPiArICAvLw0KPiA+ICsgIC8vIFNldFBhZ2VUYWJsZVBvb2xSZWFk T25seSBtaWdodCB1cGRhdGUgbVBhZ2VUYWJsZVBvb2wuIEl0J3Mgc2FmZXIgdG8NCj4gPiArICAv LyByZW1lbWJlciBvcmlnaW5hbCBvbmUgaW4gYWR2YW5jZS4NCj4gPiArICAvLw0KPiA+ICsgIEhl YWRQb29sID0gbVBhZ2VUYWJsZVBvb2w7DQo+ID4gKyAgUG9vbCA9IEhlYWRQb29sOw0KPiA+ICsg IGRvIHsNCj4gPiArICAgIEFkZHJlc3MgID0gKEVGSV9QSFlTSUNBTF9BRERSRVNTKShVSU5UTilQ b29sOw0KPiA+ICsgICAgUG9vbFNpemUgPSBQb29sLT5PZmZzZXQgKyBFRklfUEFHRVNfVE9fU0la RSAoUG9vbC0+RnJlZVBhZ2VzKTsNCj4gPiArDQo+ID4gKyAgICAvLw0KPiA+ICsgICAgLy8gVGhl IHNpemUgb2Ygb25lIHBvb2wgbXVzdCBiZSBtdWx0aXBsZSBvZiBQQUdFX1RBQkxFX1BPT0xfVU5J VF9TSVpFLA0KPiB3aGljaA0KPiA+ICsgICAgLy8gaXMgb25lIG9mIHBhZ2Ugc2l6ZSBvZiB0aGUg cHJvY2Vzc29yICgyTUIgYnkgZGVmYXVsdCkuIExldCdzIGFwcGx5IHRoZQ0KPiA+ICsgICAgLy8g cHJvdGVjdGlvbiB0byB0aGVtIG9uZSBieSBvbmUuDQo+ID4gKyAgICAvLw0KPiA+ICsgICAgd2hp bGUgKFBvb2xTaXplID4gMCkgew0KPiA+ICsgICAgICBTZXRQYWdlVGFibGVQb29sUmVhZE9ubHko UGFnZVRhYmxlQmFzZSwgQWRkcmVzcywgTGV2ZWw0UGFnaW5nKTsNCj4gPiArICAgICAgQWRkcmVz cyAgICs9IFBBR0VfVEFCTEVfUE9PTF9VTklUX1NJWkU7DQo+ID4gKyAgICAgIFBvb2xTaXplICAt PSBQQUdFX1RBQkxFX1BPT0xfVU5JVF9TSVpFOw0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArICAg IFBvb2wgPSBQb29sLT5OZXh0UG9vbDsNCj4gPiArICB9IHdoaWxlIChQb29sICE9IEhlYWRQb29s KTsNCj4gPiArDQo+ID4gKyAgLy8NCj4gPiArICAvLyBFbmFibGUgd3JpdGUgcHJvdGVjdGlvbiwg YWZ0ZXIgcGFnZSB0YWJsZSBhdHRyaWJ1dGUgdXBkYXRlZC4NCj4gPiArICAvLw0KPiA+ICsgIEFz bVdyaXRlQ3IwIChBc21SZWFkQ3IwKCkgfCBDUjBfV1ApOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICAg LyoqDQo+ID4gICAgIEFsbG9jYXRlcyBhbmQgZmlsbHMgaW4gdGhlIFBhZ2UgRGlyZWN0b3J5IGFu ZCBQYWdlIFRhYmxlIEVudHJpZXMgdG8NCj4gPiAgICAgZXN0YWJsaXNoIGEgMToxIFZpcnR1YWwg dG8gUGh5c2ljYWwgbWFwcGluZy4NCj4gPiBAQCAtMzI5LDcgKzYxOCw3IEBAIENyZWF0ZUlkZW50 aXR5TWFwcGluZ1BhZ2VUYWJsZXMgKA0KPiA+ICAgICB9IGVsc2Ugew0KPiA+ICAgICAgIFRvdGFs UGFnZXNOdW0gPSBOdW1iZXJPZlBtbDRFbnRyaWVzTmVlZGVkICsgMTsNCj4gPiAgICAgfQ0KPiA+ IC0gIEJpZ1BhZ2VBZGRyZXNzID0gKFVJTlROKSBBbGxvY2F0ZVBhZ2VzIChUb3RhbFBhZ2VzTnVt KTsNCj4gPiArICBCaWdQYWdlQWRkcmVzcyA9IChVSU5UTikgQWxsb2NhdGVQYWdlVGFibGVNZW1v cnkgKFRvdGFsUGFnZXNOdW0pOw0KPiA+ICAgICBBU1NFUlQgKEJpZ1BhZ2VBZGRyZXNzICE9IDAp Ow0KPiA+DQo+ID4gICAgIC8vDQo+ID4gQEAgLTQzMCw2ICs3MTksMTIgQEAgQ3JlYXRlSWRlbnRp dHlNYXBwaW5nUGFnZVRhYmxlcyAoDQo+ID4gICAgICAgICApOw0KPiA+ICAgICB9DQo+ID4NCj4g PiArICAvLw0KPiA+ICsgIC8vIFByb3RlY3QgdGhlIHBhZ2UgdGFibGUgYnkgbWFya2luZyB0aGUg bWVtb3J5IHVzZWQgZm9yIHBhZ2UgdGFibGUgdG8gYmUNCj4gPiArICAvLyByZWFkLW9ubHkuDQo+ ID4gKyAgLy8NCj4gPiArICBFbmFibGVQYWdlVGFibGVQcm90ZWN0aW9uICgoVUlOVE4pUGFnZU1h cCwgVFJVRSk7DQo+ID4gKw0KPiA+ICAgICBpZiAoUGNkR2V0Qm9vbCAoUGNkU2V0TnhGb3JTdGFj aykpIHsNCj4gPiAgICAgICBFbmFibGVFeGVjdXRlRGlzYWJsZUJpdCAoKTsNCj4gPiAgICAgfQ0K PiA+IGRpZmYgLS1naXQgYS9NZGVNb2R1bGVQa2cvQ29yZS9EeGVJcGxQZWltL1g2NC9WaXJ0dWFs TWVtb3J5LmgNCj4gYi9NZGVNb2R1bGVQa2cvQ29yZS9EeGVJcGxQZWltL1g2NC9WaXJ0dWFsTWVt b3J5LmgNCj4gPiBpbmRleCA3YzliYjQ5ZTNlLi45ZjE0YWM2MDA3IDEwMDY0NA0KPiA+IC0tLSBh L01kZU1vZHVsZVBrZy9Db3JlL0R4ZUlwbFBlaW0vWDY0L1ZpcnR1YWxNZW1vcnkuaA0KPiA+ICsr KyBiL01kZU1vZHVsZVBrZy9Db3JlL0R4ZUlwbFBlaW0vWDY0L1ZpcnR1YWxNZW1vcnkuaA0KPiA+ IEBAIC0xNDgsMTEgKzE0OCwzNyBAQCB0eXBlZGVmIHVuaW9uIHsNCj4gPg0KPiA+ICAgI3ByYWdt YSBwYWNrKCkNCj4gPg0KPiA+ICsjZGVmaW5lIENSMF9XUCAgICAgICAgICAgICAgICAgICAgICBC SVQxNg0KPiA+ICsNCj4gPiAgICNkZWZpbmUgSUEzMl9QR19QICAgICAgICAgICAgICAgICAgIEJJ VDANCj4gPiAgICNkZWZpbmUgSUEzMl9QR19SVyAgICAgICAgICAgICAgICAgIEJJVDENCj4gPiAr I2RlZmluZSBJQTMyX1BHX1BTICAgICAgICAgICAgICAgICAgQklUNw0KPiA+ICsNCj4gPiArI2Rl ZmluZSBQQUdJTkdfUEFFX0lOREVYX01BU0sgICAgICAgMHgxRkYNCj4gPg0KPiA+ICsjZGVmaW5l IFBBR0lOR180S19BRERSRVNTX01BU0tfNjQgICAweDAwMEZGRkZGRkZGRkYwMDB1bGwNCj4gPiAr I2RlZmluZSBQQUdJTkdfMk1fQUREUkVTU19NQVNLXzY0ICAgMHgwMDBGRkZGRkZGRTAwMDAwdWxs DQo+ID4gICAjZGVmaW5lIFBBR0lOR18xR19BRERSRVNTX01BU0tfNjQgICAweDAwMEZGRkZGQzAw MDAwMDB1bGwNCj4gPg0KPiA+ICsjZGVmaW5lIFBBR0lOR19MMV9BRERSRVNTX1NISUZUICAgICAx Mg0KPiA+ICsjZGVmaW5lIFBBR0lOR19MMl9BRERSRVNTX1NISUZUICAgICAyMQ0KPiA+ICsjZGVm aW5lIFBBR0lOR19MM19BRERSRVNTX1NISUZUICAgICAzMA0KPiA+ICsjZGVmaW5lIFBBR0lOR19M NF9BRERSRVNTX1NISUZUICAgICAzOQ0KPiA+ICsNCj4gPiArI2RlZmluZSBQQUdJTkdfUE1MNEVf TlVNQkVSICAgICAgICAgNA0KPiA+ICsNCj4gPiArI2RlZmluZSBQQUdFX1RBQkxFX1BPT0xfQUxJ R05NRU5UICAgQkFTRV8yTUINCj4gPiArI2RlZmluZSBQQUdFX1RBQkxFX1BPT0xfVU5JVF9TSVpF ICAgU0laRV8yTUINCj4gPiArI2RlZmluZSBQQUdFX1RBQkxFX1BPT0xfVU5JVF9QQUdFUyAgRUZJ X1NJWkVfVE9fUEFHRVMgKFNJWkVfMk1CKQ0KPiA+ICsjZGVmaW5lIFBBR0VfVEFCTEVfUE9PTF9B TElHTl9NQVNLICBcDQo+ID4gKyAgKH4oRUZJX1BIWVNJQ0FMX0FERFJFU1MpKFBBR0VfVEFCTEVf UE9PTF9BTElHTk1FTlQgLSAxKSkNCj4gPiArDQo+ID4gK3R5cGVkZWYgc3RydWN0IHsNCj4gPiAr ICBWT0lEICAgICAgICAgICAgKk5leHRQb29sOw0KPiA+ICsgIFVJTlROICAgICAgICAgICBPZmZz ZXQ7DQo+ID4gKyAgVUlOVE4gICAgICAgICAgIEZyZWVQYWdlczsNCj4gPiArfSBQQUdFX1RBQkxF X1BPT0w7DQo+ID4gKw0KPiA+ICAgLyoqDQo+ID4gICAgIEVuYWJsZSBFeGVjdXRlIERpc2FibGUg Qml0Lg0KPiA+DQo+ID4NCj4gDQo+IA0KPiAtLQ0KPiBUaGFua3MsDQo+IFJheQ0K