From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=192.55.52.120; helo=mga04.intel.com; envelope-from=michael.d.kinney@intel.com; receiver=edk2-devel@lists.01.org Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) (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 861C82118D948 for ; Tue, 13 Nov 2018 16:44:14 -0800 (PST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga003.jf.intel.com ([10.7.209.27]) by fmsmga104.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 13 Nov 2018 16:44:13 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.56,230,1539673200"; d="scan'208,217";a="100037204" Received: from orsmsx103.amr.corp.intel.com ([10.22.225.130]) by orsmga003.jf.intel.com with ESMTP; 13 Nov 2018 16:44:13 -0800 Received: from orsmsx113.amr.corp.intel.com ([169.254.9.125]) by ORSMSX103.amr.corp.intel.com ([169.254.5.166]) with mapi id 14.03.0415.000; Tue, 13 Nov 2018 16:44:13 -0800 From: "Kinney, Michael D" To: "Cohen, Eugene" , "edk2-devel@lists.01.org" , "Yao, Jiewen" , "Zhang, Chao B" , "Kinney, Michael D" CC: "Bin, Sung-Uk (???)" Thread-Topic: [PATCH 3/4] SecurityPkg: add TpmIoLibMmio instance Thread-Index: AdR7nYTa2kHXzqxsRUyIavAWgtxLkAABiLTgAACfbXAAAtyyEA== Date: Wed, 14 Nov 2018 00:44:12 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-version: 11.0.400.15 dlp-reaction: no-action x-originating-ip: [10.22.254.138] MIME-Version: 1.0 X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: Re: [PATCH 3/4] SecurityPkg: add TpmIoLibMmio instance X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 14 Nov 2018 00:44:14 -0000 Content-Language: en-US Content-Type: text/plain; charset="ks_c_5601-1987" Content-Transfer-Encoding: base64 SGkgRXVnZW5lLA0KDQpNeSBleHBlcmllbmNlIGlzIHdpdGggRFRQTSBhbmQgc29tZSBJMkMgVFBN cyBhdCAxLjIgbGV2ZWwuDQoNCk9uZSBvZiB0aGUgSTJDIFRQTXMgd2FzIHNpZ25pZmljYW50bHkg ZGlmZmVyZW50LCBzbyB0aGUgVHBtSW9MaWIgY29uY2VwdCBkb2VzIG5vdCBhcHBseS4NCg0KUXVh cmtQbGF0Zm9ybVBrZ1xMaWJyYXJ5XFRwbTEyRGV2aWNlTGliQXRtZWxJMmMNCg0KVGhlIG90aGVy IGNvdWxkIHBvdGVudGlhbGx5IHVzZSBzb21ldGhpbmcgbGlrZSBUcG1Jb0xpYiwgYnV0IG1heSBy ZXF1aXJlIHNvbWUgZGlmZmVyZW50IGRlbGF5cyBhbmQgdGltZW91dCB2YWx1ZXMgdGhhbiBEVFBN Lg0KDQpRdWFya1BsYXRmb3JtUGtnXExpYnJhcnlcVHBtMTJEZXZpY2VMaWJJbmZpbmVvbkkyYw0K DQpTbyBtYXliZSB3ZSBvZmZlciAyIG1ldGhvZHMgdG8gcG9ydCBhIFRQTS4gIE9uY2UgaXMgVHBt SW9MaWIgaWYgdGhlIHJlZ2lzdGVyIGxheW91dCBhbmQgcmVxdWlyZWQgZGVsYXlzIGFyZSB0aGUg c2FtZSBhcyBEVFBNIHdpdGggcG90ZW50aWFsbHkgYSBkaWZmZXJlbnQgYmFzZSwgYW5kIHRoZSBv dGhlciBpcyB0byBqdXN0IGltcGxlbWVudCB0aGUgRGV2aWNlTGliLg0KDQpJIHdvdWxkIHJlY29t bWVuZCB0aGF0IGEgZnVsbCBpbXBsZW1lbnRhdGlvbiBvZiBUcG1Jb0xpYiBmb3IgYSBmZXcgbm9u IE1NSU8gVFBNIGRldmljZXMgYmUgY29tcGxldGVkIGFuZCBwYXNzIHZhbGlkYXRpb24gYmVmb3Jl IHdlIGNvbnNpZGVyIGFkZGluZyBuZXcgbGliIGNsYXNzIHRvIGVkazIuICBQZXJoYXBzIHVzaW5n IGFuIGVkazItc3RhZ2luZyBicmFuY2ggd291bGQgYmUgYSBiZXR0ZXIgcGxhY2UgdG8gc3RhcnQg YW5kIHlvdSBjYW4gZG9jdW1lbnQgaW4gdGhlIFJlYWRtZS5tZCB0aGUgY3JpdGVyaWEgdGhhdCBt dXN0IGJlIG1ldCBiZWZvcmUgdGhlIG5ldyBsaWIgY2xhc3MgbWVldHMgdGhlIHJlcXVpcmVtZW50 cyBmb3IgZWRrMi9tYXN0ZXIuDQoNCk1pa2UNCg0KRnJvbTogQ29oZW4sIEV1Z2VuZSBbbWFpbHRv OmV1Z2VuZUBocC5jb21dDQpTZW50OiBUdWVzZGF5LCBOb3ZlbWJlciAxMywgMjAxOCAzOjI0IFBN DQpUbzogS2lubmV5LCBNaWNoYWVsIEQgPG1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29tPjsgZWRr Mi1kZXZlbEBsaXN0cy4wMS5vcmc7IFlhbywgSmlld2VuIDxqaWV3ZW4ueWFvQGludGVsLmNvbT47 IFpoYW5nLCBDaGFvIEIgPGNoYW8uYi56aGFuZ0BpbnRlbC5jb20+DQpDYzogQmluLCBTdW5nLVVr ICi687y6v+0pIDxzdW5ndWstYmluQGhwLmNvbT4NClN1YmplY3Q6IFJFOiBbUEFUQ0ggMy80XSBT ZWN1cml0eVBrZzogYWRkIFRwbUlvTGliTW1pbyBpbnN0YW5jZQ0KDQpNaWtlLA0KDQpUaGVyZSBp cyBhIHByZXZhbGVuY2Ugb2YgYmFzZSBhZGRyZXNzIG5vbWVuY2xhdHVyZSBpbiB0aGUgRFRQTSBs aWJyYXJ5IGxpa2U6DQoNCiAgICAgICAgICAgICAgICByZXR1cm4gVGlzUGNSZXF1ZXN0VXNlVHBt ICgoVElTX1BDX1JFR0lTVEVSU19QVFIpIChVSU5UTikgUGNkR2V0NjQgKFBjZFRwbUJhc2VBZGRy ZXNzKSk7DQoNCmxpa2UgZnJvbSBUcG0yVGlzLmMuDQoNCg0KqKogIHNob3VsZG6hr3QgdGhlIEFk ZHJlc3MgYmUgdGhlIHJlbGF0aXZlIGFkZHJlc3MgZnJvbSBhIGJhc2U/DQoNCkkgdGhpbmsgaXQg aXMsIHRvIHRoZSBleHRlbnQgdGhhdCB0aGUgUGNkVHBtQmFzZUFkZHJlc3MgYWxyZWFkeSBleGlz dHMuDQoNCg0KqKogIE9yIGFyZSB5b3UgdXNpbmcgdGhlIGZ1bGwgRFRQTSBNTUlPIGFkZHJlc3Mg b24gcHVycG9zZSBhbmQgeW91IGV4cGVjdCBub24gRFRQTSBNTUlPIGltcGxlbWVudGF0aW9ucyB0 byB0cmFuc2xhdGUgZnJvbSB0aGUgRFRQTSBNTUlPIGFkZHJlc3MgdG8gdGhlIGVxdWl2YWxlbnQg cmVnaXN0ZXIgYWNjZXNzIGluIG9uIGFuIGFsdGVybmF0ZSBidXMgdHlwZT8NCg0KTXkgdGhvdWdo dCBpcyB0aGF0IHRoZSBQY2RUcG1CYXNlQWRkcmVzcyBjb3VsZCBiZSBzZXQgdG8gemVybyAob3Ig d2hhdGV2ZXIgbm9uLU1NSU8gb2Zmc2V0IG1ha2VzIHNlbnNlKS4NCg0KDQqoqiAgV291bGRuJ3Qg aXQgYmUgYmV0dGVyIHRvIGhhdmUgYW4gYWJzdHJhY3Rpb24gZm9yIGRpZmZlcmVudCBUUE0gcmVn aXN0ZXJzIGFuZCB0aGUgRFRQTSBpbXBsZW1lbnRhdGlvbiB3b3VsZCBjb252ZXJ0IHRvIGEgZnVs bCBNTUlPIGFkZHJlc3MgaW4gdGhlIGxpYiBpbXBsZW1lbnRhdGlvbj8NCg0KSSd2ZSBiZWVuIGxl ZCB0byB1bmRlcnN0YW5kIHRoYXQgdGhlIFRQTSByZWdpc3RlcnMgYXJlIHRoZSBzYW1lIGluIGJv dGggY2FzZXMuICBJIGhhdmVuJ3QgdmVyaWZpZWQgdGhpcyBteXNlbGYgLSBidXQgaWYgeW91IGhh dmUgZGF0YSB0byB0aGUgY29udHJhcnkgcGxlYXNlIGxldCB1cyBrbm93IHNvIHdlIHN0b3AgZ29p bmcgZG93biB0aGlzIHBhdGguDQoNCk15IG1haW4gcmVhc29uIGZvciByZXNpc3RpbmcgY3JlYXRp bmcgYSBuZXcgbGlicmFyeSBhdCB0aGUgVHBtMkRldmljZUxpYiBsYXllciBiZWNhdXNlIHRoZSBE VFBNIGxpYnJhcnkgY29udGFpbnMgYSBsb3Qgb2YgbG9naWMgYXJvdW5kIGhvdyB0byB0YWxrIHRv IHRoZSBUUE0gdGhhdCBleHRlbmRzIHdlbGwgYmV5b25kIHRoZSBhY2Nlc3MgbWVjaGFuaXNtIHRo YXQgd2Ugd291bGQgbm90IHdhbnQgdG8gZHVwbGljYXRlIHRvIGFub3RoZXIgbGlicmFyeSBpbnN0 YW5jZS4gIEknbSBsb29raW5nIGluc2lkZSBUcG0yVGlzLmMgYW5kIFRwbTJQdHAuYyB0byBnZXQg dGhpcyBwZXJzcGVjdGl2ZS4NCg0KVGhhbmtzLA0KDQpFdWdlbmUNCg0KRnJvbTogS2lubmV5LCBN aWNoYWVsIEQgPG1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29tPG1haWx0bzptaWNoYWVsLmQua2lu bmV5QGludGVsLmNvbT4+DQpTZW50OiBUdWVzZGF5LCBOb3ZlbWJlciAxMywgMjAxOCAzOjU4IFBN DQpUbzogQ29oZW4sIEV1Z2VuZSA8ZXVnZW5lQGhwLmNvbTxtYWlsdG86ZXVnZW5lQGhwLmNvbT4+ OyBlZGsyLWRldmVsQGxpc3RzLjAxLm9yZzxtYWlsdG86ZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmc+ OyBZYW8sIEppZXdlbiA8amlld2VuLnlhb0BpbnRlbC5jb208bWFpbHRvOmppZXdlbi55YW9AaW50 ZWwuY29tPj47IFpoYW5nLCBDaGFvIEIgPGNoYW8uYi56aGFuZ0BpbnRlbC5jb208bWFpbHRvOmNo YW8uYi56aGFuZ0BpbnRlbC5jb20+PjsgS2lubmV5LCBNaWNoYWVsIEQgPG1pY2hhZWwuZC5raW5u ZXlAaW50ZWwuY29tPG1haWx0bzptaWNoYWVsLmQua2lubmV5QGludGVsLmNvbT4+DQpDYzogQmlu LCBTdW5nLVVrICi687y6v+0pIDxzdW5ndWstYmluQGhwLmNvbTxtYWlsdG86c3VuZ3VrLWJpbkBo cC5jb20+Pg0KU3ViamVjdDogUkU6IFtQQVRDSCAzLzRdIFNlY3VyaXR5UGtnOiBhZGQgVHBtSW9M aWJNbWlvIGluc3RhbmNlDQoNCkV1Z2VuZSwNCg0KSXQgYXBwZWFycyB5b3UgYXJlIGV4cGVjdGlu ZyB0aGUgQWRkcmVzcyBwYXJhbWV0ZXINCnRvIGJlIHRoZSBmdWxsIE1NSU8gYWRkcmVzcyBmb3Ig RFRQTS4gSWYgeW91IGFyZQ0Kd2FudGluZyB0aGlzIGxpYiBjbGFzcyB0byBhYnN0cmFjdCB0aGUg YWNjZXNzIGZvcg0KZGlmZmVyZW50IGJ1cyB0eXBlcywgc2hvdWxkbqGvdCB0aGUgQWRkcmVzcyBi ZSB0aGUNCnJlbGF0aXZlIGFkZHJlc3MgZnJvbSBhIGJhc2U/DQoNCk9yIGFyZSB5b3UgdXNpbmcg dGhlIGZ1bGwgRFRQTSBNTUlPIGFkZHJlc3Mgb24NCnB1cnBvc2UgYW5kIHlvdSBleHBlY3Qgbm9u IERUUE0gTU1JTyBpbXBsZW1lbnRhdGlvbnMNCnRvIHRyYW5zbGF0ZSBmcm9tIHRoZSBEVFBNIE1N SU8gYWRkcmVzcyB0byB0aGUNCmVxdWl2YWxlbnQgcmVnaXN0ZXIgYWNjZXNzIGluIG9uIGFuIGFs dGVybmF0ZSBidXMNCnR5cGU/DQoNCldvdWxkbid0IGl0IGJlIGJldHRlciB0byBoYXZlIGFuIGFi c3RyYWN0aW9uIGZvcg0KZGlmZmVyZW50IFRQTSByZWdpc3RlcnMgYW5kIHRoZSBEVFBNIGltcGxl bWVudGF0aW9uDQp3b3VsZCBjb252ZXJ0IHRvIGEgZnVsbCBNTUlPIGFkZHJlc3MgaW4gdGhlIGxp Yg0KaW1wbGVtZW50YXRpb24/DQoNClRoYW5rcywNCg0KTWlrZQ0KDQoNCj4gLS0tLS1PcmlnaW5h bCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogZWRrMi1kZXZlbCBbbWFpbHRvOmVkazItZGV2ZWwtDQo+ IGJvdW5jZXNAbGlzdHMuMDEub3JnPG1haWx0bzpib3VuY2VzQGxpc3RzLjAxLm9yZz5dIE9uIEJl aGFsZiBPZiBDb2hlbiwgRXVnZW5lDQo+IFNlbnQ6IFR1ZXNkYXksIE5vdmVtYmVyIDEzLCAyMDE4 IDI6MTMgUE0NCj4gVG86IGVkazItZGV2ZWxAbGlzdHMuMDEub3JnPG1haWx0bzplZGsyLWRldmVs QGxpc3RzLjAxLm9yZz47IFlhbywgSmlld2VuDQo+IDxqaWV3ZW4ueWFvQGludGVsLmNvbTxtYWls dG86amlld2VuLnlhb0BpbnRlbC5jb20+PjsgWmhhbmcsIENoYW8gQg0KPiA8Y2hhby5iLnpoYW5n QGludGVsLmNvbTxtYWlsdG86Y2hhby5iLnpoYW5nQGludGVsLmNvbT4+DQo+IENjOiBCaW4sIFN1 bmctVWsgKLrzvLq/7SkgPHN1bmd1ay1iaW5AaHAuY29tPG1haWx0bzpzdW5ndWstYmluQGhwLmNv bT4+DQo+IFN1YmplY3Q6IFtlZGsyXSBbUEFUQ0ggMy80XSBTZWN1cml0eVBrZzogYWRkDQo+IFRw bUlvTGliTW1pbyBpbnN0YW5jZQ0KPg0KPiBTZWN1cml0eVBrZzogYWRkIFRwbUlvTGliTW1pbyBp bnN0YW5jZQ0KPg0KPiBDb250cmlidXRlZC11bmRlcjogVGlhbm9Db3JlIENvbnRyaWJ1dGlvbiBB Z3JlZW1lbnQgMS4xDQo+IENjOiBDaGFvIFpoYW5nIDxjaGFvLmIuemhhbmdAaW50ZWwuY29tPG1h aWx0bzpjaGFvLmIuemhhbmdAaW50ZWwuY29tPj4NCj4gQ2M6IEppZXdlbiBZYW8gPGppZXdlbi55 YW9AaW50ZWwuY29tPG1haWx0bzpqaWV3ZW4ueWFvQGludGVsLmNvbT4+DQo+IFNpZ25lZC1vZmYt Ynk6IEV1Z2VuZSBDb2hlbiA8ZXVnZW5lQGhwLmNvbTxtYWlsdG86ZXVnZW5lQGhwLmNvbT4+DQo+ IC0tLQ0KPiBTZWN1cml0eVBrZy9MaWJyYXJ5L1RwbUlvTGliTW1pby9UcG1Jb0xpYk1taW8uYyB8 DQo+IDIyMSArKysrKysrKysrKysrKysrKysrKw0KPiBTZWN1cml0eVBrZy9MaWJyYXJ5L1RwbUlv TGliTW1pby9UcG1Jb0xpYk1taW8uaW5mIHwNCj4gNDEgKysrKw0KPiAyIGZpbGVzIGNoYW5nZWQs IDI2MiBpbnNlcnRpb25zKCspDQo+DQo+IGRpZmYgLS1naXQNCj4gYS9TZWN1cml0eVBrZy9MaWJy YXJ5L1RwbUlvTGliTW1pby9UcG1Jb0xpYk1taW8uYw0KPiBiL1NlY3VyaXR5UGtnL0xpYnJhcnkv VHBtSW9MaWJNbWlvL1RwbUlvTGliTW1pby5jDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGlu ZGV4IDAwMDAwMDAuLjU2ZjMxODcNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9TZWN1cml0eVBr Zy9MaWJyYXJ5L1RwbUlvTGliTW1pby9UcG1Jb0xpYk1taW8uYw0KPiBAQCAtMCwwICsxLDIyMSBA QA0KPiArLyoqIEBmaWxlDQo+ICsgVGhpcyBsaWJyYXJ5IGlzIHRvIGFic3RyYWN0IFRQTTIgcmVn aXN0ZXIgYWNjZXNzZXMNCj4gc28gdGhhdCBhIGNvbW1vbg0KPiArIGludGVyZmFjZSBjYW4gYmUg dXNlZCBmb3IgbXVsdGlwbGUgdW5kZXJseWluZyBidXNzZXMNCj4gc3VjaCBhcyBUUE0sDQo+ICsg U1BJLCBvciBJMkMgYWNjZXNzLg0KPiArDQo+ICtDb3B5cmlnaHQgKGMpIDIwMTggSFAgRGV2ZWxv cG1lbnQgQ29tcGFueSwgTC5QLg0KPiArVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5n IG1hdGVyaWFscw0KPiArYXJlIGxpY2Vuc2VkIGFuZCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUg dGVybXMgYW5kDQo+IGNvbmRpdGlvbnMgb2YgdGhlIEJTRCBMaWNlbnNlDQo+ICt3aGljaCBhY2Nv bXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIGZ1bGwgdGV4dCBvZg0KPiB0aGUgbGljZW5z ZSBtYXkgYmUgZm91bmQgYXQNCj4gK2h0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ic2Qt bGljZW5zZS5waHANCj4gKw0KPiArVEhFIFBST0dSQU0gSVMgRElTVFJJQlVURUQgVU5ERVIgVEhF IEJTRCBMSUNFTlNFIE9OIEFODQo+ICJBUyBJUyIgQkFTSVMsDQo+ICtXSVRIT1VUIFdBUlJBTlRJ RVMgT1IgUkVQUkVTRU5UQVRJT05TIE9GIEFOWSBLSU5ELA0KPiBFSVRIRVIgRVhQUkVTUyBPUiBJ TVBMSUVELg0KPiArDQo+ICsqKi8NCj4gKw0KPiArI2luY2x1ZGUgPEJhc2UuaD4NCj4gKw0KPiAr I2luY2x1ZGUgPExpYnJhcnkvVHBtSW9MaWIuaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L0lvTGli Lmg+DQo+ICsNCj4gKw0KPiArDQo+ICsvKioNCj4gKyBSZWFkcyBhbiA4LWJpdCBUUE0gcmVnaXN0 ZXIuDQo+ICsNCj4gKyBSZWFkcyB0aGUgOC1iaXQgVFBNIHJlZ2lzdGVyIHNwZWNpZmllZCBieSBB ZGRyZXNzLg0KPiBUaGUgOC1iaXQgcmVhZCB2YWx1ZSBpcw0KPiArIHJldHVybmVkLiBUaGlzIGZ1 bmN0aW9uIG11c3QgZ3VhcmFudGVlIHRoYXQgYWxsIFRQTQ0KPiByZWFkIGFuZCB3cml0ZQ0KPiAr IG9wZXJhdGlvbnMgYXJlIHNlcmlhbGl6ZWQuDQo+ICsNCj4gKyBJZiA4LWJpdCBUUE0gcmVnaXN0 ZXIgb3BlcmF0aW9ucyBhcmUgbm90IHN1cHBvcnRlZCwNCj4gdGhlbiBBU1NFUlQoKS4NCj4gKw0K PiArIEBwYXJhbSBBZGRyZXNzIFRoZSBUUE0gcmVnaXN0ZXIgdG8gcmVhZC4NCj4gKw0KPiArIEBy ZXR1cm4gVGhlIHZhbHVlIHJlYWQuDQo+ICsNCj4gKyoqLw0KPiArVUlOVDgNCj4gK0VGSUFQSQ0K PiArVHBtUmVhZDggKA0KPiArIElOIFVJTlROIEFkZHJlc3MNCj4gKyApDQo+ICt7DQo+ICsgcmV0 dXJuIE1taW9SZWFkOCAoQWRkcmVzcyk7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArIFdyaXRlcyBh biA4LWJpdCBUUE0gcmVnaXN0ZXIuDQo+ICsNCj4gKyBXcml0ZXMgdGhlIDgtYml0IFRQTSByZWdp c3RlciBzcGVjaWZpZWQgYnkgQWRkcmVzcw0KPiB3aXRoIHRoZSB2YWx1ZSBzcGVjaWZpZWQNCj4g KyBieSBWYWx1ZSBhbmQgcmV0dXJucyBWYWx1ZS4gVGhpcyBmdW5jdGlvbiBtdXN0DQo+IGd1YXJh bnRlZSB0aGF0IGFsbCBUUE0gcmVhZA0KPiArIGFuZCB3cml0ZSBvcGVyYXRpb25zIGFyZSBzZXJp YWxpemVkLg0KPiArDQo+ICsgSWYgOC1iaXQgVFBNIHJlZ2lzdGVyIG9wZXJhdGlvbnMgYXJlIG5v dCBzdXBwb3J0ZWQsDQo+IHRoZW4gQVNTRVJUKCkuDQo+ICsNCj4gKyBAcGFyYW0gQWRkcmVzcyBU aGUgVFBNIHJlZ2lzdGVyIHRvIHdyaXRlLg0KPiArIEBwYXJhbSBWYWx1ZSBUaGUgdmFsdWUgdG8g d3JpdGUgdG8gdGhlIFRQTQ0KPiByZWdpc3Rlci4NCj4gKw0KPiArIEByZXR1cm4gVmFsdWUuDQo+ ICsNCj4gKyoqLw0KPiArVUlOVDgNCj4gK0VGSUFQSQ0KPiArVHBtV3JpdGU4ICgNCj4gKyBJTiBV SU5UTiBBZGRyZXNzLA0KPiArIElOIFVJTlQ4IFZhbHVlDQo+ICsgKQ0KPiArew0KPiArIHJldHVy biBNbWlvV3JpdGU4IChBZGRyZXNzLCBWYWx1ZSk7DQo+ICt9DQo+ICsNCj4gKw0KPiArLyoqDQo+ ICsgUmVhZHMgYSAxNi1iaXQgVFBNIHJlZ2lzdGVyLg0KPiArDQo+ICsgUmVhZHMgdGhlIDE2LWJp dCBUUE0gcmVnaXN0ZXIgc3BlY2lmaWVkIGJ5IEFkZHJlc3MuDQo+IFRoZSAxNi1iaXQgcmVhZCB2 YWx1ZSBpcw0KPiArIHJldHVybmVkLiBUaGlzIGZ1bmN0aW9uIG11c3QgZ3VhcmFudGVlIHRoYXQg YWxsIFRQTQ0KPiByZWFkIGFuZCB3cml0ZQ0KPiArIG9wZXJhdGlvbnMgYXJlIHNlcmlhbGl6ZWQu DQo+ICsNCj4gKyBJZiAxNi1iaXQgVFBNIHJlZ2lzdGVyIG9wZXJhdGlvbnMgYXJlIG5vdCBzdXBw b3J0ZWQsDQo+IHRoZW4gQVNTRVJUKCkuDQo+ICsgSWYgQWRkcmVzcyBpcyBub3QgYWxpZ25lZCBv biBhIDE2LWJpdCBib3VuZGFyeSwgdGhlbg0KPiBBU1NFUlQoKS4NCj4gKw0KPiArIEBwYXJhbSBB ZGRyZXNzIFRoZSBUUE0gcmVnaXN0ZXIgdG8gcmVhZC4NCj4gKw0KPiArIEByZXR1cm4gVGhlIHZh bHVlIHJlYWQuDQo+ICsNCj4gKyoqLw0KPiArVUlOVDE2DQo+ICtFRklBUEkNCj4gK1RwbVJlYWQx NiAoDQo+ICsgSU4gVUlOVE4gQWRkcmVzcw0KPiArICkNCj4gK3sNCj4gKyByZXR1cm4gTW1pb1Jl YWQxNiAoQWRkcmVzcyk7DQo+ICt9DQo+ICsNCj4gKw0KPiArLyoqDQo+ICsgV3JpdGVzIGEgMTYt Yml0IFRQTSByZWdpc3Rlci4NCj4gKw0KPiArIFdyaXRlcyB0aGUgMTYtYml0IFRQTSByZWdpc3Rl ciBzcGVjaWZpZWQgYnkgQWRkcmVzcw0KPiB3aXRoIHRoZSB2YWx1ZSBzcGVjaWZpZWQNCj4gKyBi eSBWYWx1ZSBhbmQgcmV0dXJucyBWYWx1ZS4gVGhpcyBmdW5jdGlvbiBtdXN0DQo+IGd1YXJhbnRl ZSB0aGF0IGFsbCBUUE0gcmVhZA0KPiArIGFuZCB3cml0ZSBvcGVyYXRpb25zIGFyZSBzZXJpYWxp emVkLg0KPiArDQo+ICsgSWYgMTYtYml0IFRQTSByZWdpc3RlciBvcGVyYXRpb25zIGFyZSBub3Qg c3VwcG9ydGVkLA0KPiB0aGVuIEFTU0VSVCgpLg0KPiArIElmIEFkZHJlc3MgaXMgbm90IGFsaWdu ZWQgb24gYSAxNi1iaXQgYm91bmRhcnksIHRoZW4NCj4gQVNTRVJUKCkuDQo+ICsNCj4gKyBAcGFy YW0gQWRkcmVzcyBUaGUgVFBNIHJlZ2lzdGVyIHRvIHdyaXRlLg0KPiArIEBwYXJhbSBWYWx1ZSBU aGUgdmFsdWUgdG8gd3JpdGUgdG8gdGhlIFRQTQ0KPiByZWdpc3Rlci4NCj4gKw0KPiArIEByZXR1 cm4gVmFsdWUuDQo+ICsNCj4gKyoqLw0KPiArVUlOVDE2DQo+ICtFRklBUEkNCj4gK1RwbVdyaXRl MTYgKA0KPiArIElOIFVJTlROIEFkZHJlc3MsDQo+ICsgSU4gVUlOVDE2IFZhbHVlDQo+ICsgKQ0K PiArew0KPiArIHJldHVybiBNbWlvV3JpdGUxNiAoQWRkcmVzcywgVmFsdWUpOw0KPiArfQ0KPiAr DQo+ICsvKioNCj4gKyBSZWFkcyBhIDMyLWJpdCBUUE0gcmVnaXN0ZXIuDQo+ICsNCj4gKyBSZWFk cyB0aGUgMzItYml0IFRQTSByZWdpc3RlciBzcGVjaWZpZWQgYnkgQWRkcmVzcy4NCj4gVGhlIDMy LWJpdCByZWFkIHZhbHVlIGlzDQo+ICsgcmV0dXJuZWQuIFRoaXMgZnVuY3Rpb24gbXVzdCBndWFy YW50ZWUgdGhhdCBhbGwgVFBNDQo+IHJlYWQgYW5kIHdyaXRlDQo+ICsgb3BlcmF0aW9ucyBhcmUg c2VyaWFsaXplZC4NCj4gKw0KPiArIElmIDMyLWJpdCBUUE0gcmVnaXN0ZXIgb3BlcmF0aW9ucyBh cmUgbm90IHN1cHBvcnRlZCwNCj4gdGhlbiBBU1NFUlQoKS4NCj4gKyBJZiBBZGRyZXNzIGlzIG5v dCBhbGlnbmVkIG9uIGEgMzItYml0IGJvdW5kYXJ5LCB0aGVuDQo+IEFTU0VSVCgpLg0KPiArDQo+ ICsgQHBhcmFtIEFkZHJlc3MgVGhlIFRQTSByZWdpc3RlciB0byByZWFkLg0KPiArDQo+ICsgQHJl dHVybiBUaGUgdmFsdWUgcmVhZC4NCj4gKw0KPiArKiovDQo+ICtVSU5UMzINCj4gK0VGSUFQSQ0K PiArVHBtUmVhZDMyICgNCj4gKyBJTiBVSU5UTiBBZGRyZXNzDQo+ICsgKQ0KPiArew0KPiArIHJl dHVybiBNbWlvUmVhZDMyIChBZGRyZXNzKTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgV3JpdGVz IGEgMzItYml0IFRQTSByZWdpc3Rlci4NCj4gKw0KPiArIFdyaXRlcyB0aGUgMzItYml0IFRQTSBy ZWdpc3RlciBzcGVjaWZpZWQgYnkgQWRkcmVzcw0KPiB3aXRoIHRoZSB2YWx1ZSBzcGVjaWZpZWQN Cj4gKyBieSBWYWx1ZSBhbmQgcmV0dXJucyBWYWx1ZS4gVGhpcyBmdW5jdGlvbiBtdXN0DQo+IGd1 YXJhbnRlZSB0aGF0IGFsbCBUUE0gcmVhZA0KPiArIGFuZCB3cml0ZSBvcGVyYXRpb25zIGFyZSBz ZXJpYWxpemVkLg0KPiArDQo+ICsgSWYgMzItYml0IFRQTSByZWdpc3RlciBvcGVyYXRpb25zIGFy ZSBub3Qgc3VwcG9ydGVkLA0KPiB0aGVuIEFTU0VSVCgpLg0KPiArIElmIEFkZHJlc3MgaXMgbm90 IGFsaWduZWQgb24gYSAzMi1iaXQgYm91bmRhcnksIHRoZW4NCj4gQVNTRVJUKCkuDQo+ICsNCj4g KyBAcGFyYW0gQWRkcmVzcyBUaGUgVFBNIHJlZ2lzdGVyIHRvIHdyaXRlLg0KPiArIEBwYXJhbSBW YWx1ZSBUaGUgdmFsdWUgdG8gd3JpdGUgdG8gdGhlIFRQTQ0KPiByZWdpc3Rlci4NCj4gKw0KPiAr IEByZXR1cm4gVmFsdWUuDQo+ICsNCj4gKyoqLw0KPiArVUlOVDMyDQo+ICtFRklBUEkNCj4gK1Rw bVdyaXRlMzIgKA0KPiArIElOIFVJTlROIEFkZHJlc3MsDQo+ICsgSU4gVUlOVDMyIFZhbHVlDQo+ ICsgKQ0KPiArew0KPiArIHJldHVybiBNbWlvV3JpdGUzMiAoQWRkcmVzcywgVmFsdWUpOw0KPiAr fQ0KPiArDQo+ICsNCj4gKy8qKg0KPiArIFJlYWRzIGEgNjQtYml0IFRQTSByZWdpc3Rlci4NCj4g Kw0KPiArIFJlYWRzIHRoZSA2NC1iaXQgVFBNIHJlZ2lzdGVyIHNwZWNpZmllZCBieSBBZGRyZXNz Lg0KPiBUaGUgNjQtYml0IHJlYWQgdmFsdWUgaXMNCj4gKyByZXR1cm5lZC4gVGhpcyBmdW5jdGlv biBtdXN0IGd1YXJhbnRlZSB0aGF0IGFsbCBUUE0NCj4gcmVhZCBhbmQgd3JpdGUNCj4gKyBvcGVy YXRpb25zIGFyZSBzZXJpYWxpemVkLg0KPiArDQo+ICsgSWYgNjQtYml0IFRQTSByZWdpc3RlciBv cGVyYXRpb25zIGFyZSBub3Qgc3VwcG9ydGVkLA0KPiB0aGVuIEFTU0VSVCgpLg0KPiArIElmIEFk ZHJlc3MgaXMgbm90IGFsaWduZWQgb24gYSA2NC1iaXQgYm91bmRhcnksIHRoZW4NCj4gQVNTRVJU KCkuDQo+ICsNCj4gKyBAcGFyYW0gQWRkcmVzcyBUaGUgVFBNIHJlZ2lzdGVyIHRvIHJlYWQuDQo+ ICsNCj4gKyBAcmV0dXJuIFRoZSB2YWx1ZSByZWFkLg0KPiArDQo+ICsqKi8NCj4gK1VJTlQ2NA0K PiArRUZJQVBJDQo+ICtUcG1SZWFkNjQgKA0KPiArIElOIFVJTlROIEFkZHJlc3MNCj4gKyApDQo+ ICt7DQo+ICsgcmV0dXJuIE1taW9SZWFkNjQgKEFkZHJlc3MpOw0KPiArfQ0KPiArDQo+ICsvKioN Cj4gKyBXcml0ZXMgYSA2NC1iaXQgVFBNIHJlZ2lzdGVyLg0KPiArDQo+ICsgV3JpdGVzIHRoZSA2 NC1iaXQgVFBNIHJlZ2lzdGVyIHNwZWNpZmllZCBieSBBZGRyZXNzDQo+IHdpdGggdGhlIHZhbHVl IHNwZWNpZmllZA0KPiArIGJ5IFZhbHVlIGFuZCByZXR1cm5zIFZhbHVlLiBUaGlzIGZ1bmN0aW9u IG11c3QNCj4gZ3VhcmFudGVlIHRoYXQgYWxsIFRQTSByZWFkDQo+ICsgYW5kIHdyaXRlIG9wZXJh dGlvbnMgYXJlIHNlcmlhbGl6ZWQuDQo+ICsNCj4gKyBJZiA2NC1iaXQgVFBNIHJlZ2lzdGVyIG9w ZXJhdGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQsDQo+IHRoZW4gQVNTRVJUKCkuDQo+ICsgSWYgQWRk cmVzcyBpcyBub3QgYWxpZ25lZCBvbiBhIDY0LWJpdCBib3VuZGFyeSwgdGhlbg0KPiBBU1NFUlQo KS4NCj4gKw0KPiArIEBwYXJhbSBBZGRyZXNzIFRoZSBUUE0gcmVnaXN0ZXIgdG8gd3JpdGUuDQo+ ICsgQHBhcmFtIFZhbHVlIFRoZSB2YWx1ZSB0byB3cml0ZSB0byB0aGUgVFBNDQo+IHJlZ2lzdGVy Lg0KPiArDQo+ICsqKi8NCj4gK1VJTlQ2NA0KPiArRUZJQVBJDQo+ICtUcG1Xcml0ZTY0ICgNCj4g KyBJTiBVSU5UTiBBZGRyZXNzLA0KPiArIElOIFVJTlQ2NCBWYWx1ZQ0KPiArICkNCj4gK3sNCj4g KyByZXR1cm4gTW1pb1dyaXRlNjQgKEFkZHJlc3MsIFZhbHVlKTsNCj4gK30NCj4gZGlmZiAtLWdp dA0KPiBhL1NlY3VyaXR5UGtnL0xpYnJhcnkvVHBtSW9MaWJNbWlvL1RwbUlvTGliTW1pby5pbmYN Cj4gYi9TZWN1cml0eVBrZy9MaWJyYXJ5L1RwbUlvTGliTW1pby9UcG1Jb0xpYk1taW8uaW5mDQo+ IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAuLmE0MGY5MGUNCj4gLS0tIC9k ZXYvbnVsbA0KPiArKysgYi9TZWN1cml0eVBrZy9MaWJyYXJ5L1RwbUlvTGliTW1pby9UcG1Jb0xp Yk1taW8uaW5mDQo+IEBAIC0wLDAgKzEsNDEgQEANCj4gKyMjIEBmaWxlDQo+ICsjIFByb3ZpZGVz IEJhc2VDcnlwdG8gU0hBMSBoYXNoIHNlcnZpY2UNCj4gKyMNCj4gKyMgVGhpcyBsaWJyYXJ5IGlz IHRvIGFic3RyYWN0IFRQTTIgcmVnaXN0ZXIgYWNjZXNzZXMNCj4gc28gdGhhdCBhIGNvbW1vbg0K PiArIyBpbnRlcmZhY2UgY2FuIGJlIHVzZWQgZm9yIG11bHRpcGxlIHVuZGVybHlpbmcNCj4gYnVz c2VzIHN1Y2ggYXMgVFBNLA0KPiArIyBTUEksIG9yIEkyQyBhY2Nlc3MuDQo+ICsjDQo+ICsjIENv cHlyaWdodCAoYykgMjAxOCBIUCBEZXZlbG9wbWVudCBDb21wYW55LCBMLlAuDQo+ICsjIFRoaXMg cHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCj4gKyMgYXJlIGxpY2Vuc2Vk IGFuZCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgYW5kDQo+IGNvbmRpdGlvbnMgb2Yg dGhlIEJTRCBMaWNlbnNlDQo+ICsjIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9u LiBUaGUgZnVsbCB0ZXh0DQo+IG9mIHRoZSBsaWNlbnNlIG1heSBiZSBmb3VuZCBhdA0KPiArIyBo dHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vuc2UucGhwDQo+ICsjIFRIRSBQ Uk9HUkFNIElTIERJU1RSSUJVVEVEIFVOREVSIFRIRSBCU0QgTElDRU5TRSBPTg0KPiBBTiAiQVMg SVMiIEJBU0lTLA0KPiArIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TIE9G IEFOWSBLSU5ELA0KPiBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELg0KPiArIw0KPiArIyMNCj4g Kw0KPiArW0RlZmluZXNdDQo+ICsgSU5GX1ZFUlNJT04gPSAweDAwMDEwMDA1DQo+ICsgQkFTRV9O QU1FID0gVHBtSW9MaWJNbWlvDQo+ICsgRklMRV9HVUlEID0gQjUxREUwQzYtOEE0OC00QUY5LQ0K PiBCRjg4LTVBNDZDQzg1M0ZDOA0KPiArIE1PRFVMRV9UWVBFID0gQkFTRQ0KPiArIFZFUlNJT05f U1RSSU5HID0gMS4wDQo+ICsgTElCUkFSWV9DTEFTUyA9IE5VTEwNCj4gKw0KPiArIw0KPiArIyBU aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGlzIGZvciByZWZlcmVuY2Ugb25seSBhbmQNCj4gbm90 IHJlcXVpcmVkIGJ5IHRoZSBidWlsZCB0b29scy4NCj4gKyMNCj4gKyMgVkFMSURfQVJDSElURUNU VVJFUyA9IElBMzIgWDY0IEFSTQ0KPiBBQVJDSDY0DQo+ICsjDQo+ICsNCj4gK1tTb3VyY2VzXQ0K PiArIFRwbUlvTGliTW1pby5jDQo+ICsNCj4gK1tQYWNrYWdlc10NCj4gKyBNZGVQa2cvTWRlUGtn LmRlYw0KPiArIFNlY3VyaXR5UGtnL1NlY3VyaXR5UGtnLmRlYw0KPiArDQo+ICtbTGlicmFyeUNs YXNzZXNdDQo+ICsgQmFzZUxpYg0KPiArIElvTGliDQo+IC0tDQo+IDIuNy40DQo+DQo+IF9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fDQo+IGVkazItZGV2ZWwg bWFpbGluZyBsaXN0DQo+IGVkazItZGV2ZWxAbGlzdHMuMDEub3JnPG1haWx0bzplZGsyLWRldmVs QGxpc3RzLjAxLm9yZz4NCj4gaHR0cHM6Ly9saXN0cy4wMS5vcmcvbWFpbG1hbi9saXN0aW5mby9l ZGsyLWRldmVsDQo=