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=chao.b.zhang@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 36DC32118FF37 for ; Tue, 13 Nov 2018 17:53:09 -0800 (PST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by orsmga106.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 13 Nov 2018 17:53:08 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.56,230,1539673200"; d="scan'208,217";a="86290651" Received: from fmsmsx107.amr.corp.intel.com ([10.18.124.205]) by fmsmga008.fm.intel.com with ESMTP; 13 Nov 2018 17:53:08 -0800 Received: from shsmsx103.ccr.corp.intel.com (10.239.4.69) by fmsmsx107.amr.corp.intel.com (10.18.124.205) with Microsoft SMTP Server (TLS) id 14.3.408.0; Tue, 13 Nov 2018 17:53:07 -0800 Received: from shsmsx102.ccr.corp.intel.com ([169.254.2.84]) by SHSMSX103.ccr.corp.intel.com ([169.254.4.161]) with mapi id 14.03.0415.000; Wed, 14 Nov 2018 09:53:05 +0800 From: "Zhang, Chao B" To: "Kinney, Michael D" , "Cohen, Eugene" , "edk2-devel@lists.01.org" , "Yao, Jiewen" CC: "Bin, Sung-Uk (???)" Thread-Topic: [PATCH 3/4] SecurityPkg: add TpmIoLibMmio instance Thread-Index: AdR7nYTa2kHXzqxsRUyIavAWgtxLkAABiLTgAACfbXAAAtyyEAACXJPA Date: Wed, 14 Nov 2018 01:53:05 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ctpclassification: CTP_NT x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiMzI0NDI0MTUtZDY3YS00Y2MwLWE2M2EtN2I0ZTNkZDNkYjg2IiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoiWXJURnB0RFM2SzhtWVFZMWN1XC81UGd0U2szemVyR3JJdGx3U1wvT2UydWc2NEpoQ2l4RW9YdzVQTUt4UTB1ajMrIn0= dlp-product: dlpe-windows dlp-version: 11.0.400.15 dlp-reaction: no-action x-originating-ip: [10.239.127.40] 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 01:53:09 -0000 Content-Language: en-US Content-Type: text/plain; charset="ks_c_5601-1987" Content-Transfer-Encoding: base64 SGkgQWxsOg0KICAgUFRQIDEuMyBzcGVjIGFscmVhZHkgaW5jbHVkZSBJMkMgc3VwcG9ydC4gSXQg c2VlcyBJMkMgVFBNIGNvbW11bmljYXRpb24gaW50byAzIGxheWVycw0KICAgICAgQXBwbGljYXRp b24gIExheWVyICAtPiBBbHJlYWR5IGltcGxlbWVudGVkIFRDRyBQRUkvVENHIERYRQ0KICAgICAg VENHLUkyQyAgICAgICAgICAgICAgICAgICAtPiAgTm90IGltcGxlbWVudGVkIGJ5IFVFRkkgVENH IChJbmZpbmVvbiBjaGlwIG1lbnRpb25lZCBieSBNaWtlIGlzIGFuIGV4YW1wbGUgYnV0IGl0cyBy ZWdpc3RlciBzcGFjZSBkb2VzbqGvdCBjb21wbHkgdG8gUFRQIHNwZWMpDQogICAgICAgIEkyQyAg ICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFdoYXQgVHBtSW9MaWIgYWxzbyBuZWVkIHRvIGFk ZHJlc3MNCiAgIEl0IHdpbGwgYmUgZ29vZCB0byBoYXZlIG1vcmUgdXNlIGNhc2VzIHRvIHNlZSBp ZiBUcG1Jb0xpYiBpcyBzdWZmaWNpZW50bHkgZGVzaWduZWQgdG8gbWVldCBnZW5lcmljIFRQTSBk ZXZpY2VzIGNvdmVyZWQgYnkgVENHIHNwZWMuDQoNCg0KRnJvbTogS2lubmV5LCBNaWNoYWVsIEQN ClNlbnQ6IFdlZG5lc2RheSwgTm92ZW1iZXIgMTQsIDIwMTggODo0NCBBTQ0KVG86IENvaGVuLCBF dWdlbmUgPGV1Z2VuZUBocC5jb20+OyBlZGsyLWRldmVsQGxpc3RzLjAxLm9yZzsgWWFvLCBKaWV3 ZW4gPGppZXdlbi55YW9AaW50ZWwuY29tPjsgWmhhbmcsIENoYW8gQiA8Y2hhby5iLnpoYW5nQGlu dGVsLmNvbT47IEtpbm5leSwgTWljaGFlbCBEIDxtaWNoYWVsLmQua2lubmV5QGludGVsLmNvbT4N CkNjOiBCaW4sIFN1bmctVWsgKD8/PykgPHN1bmd1ay1iaW5AaHAuY29tPg0KU3ViamVjdDogUkU6 IFtQQVRDSCAzLzRdIFNlY3VyaXR5UGtnOiBhZGQgVHBtSW9MaWJNbWlvIGluc3RhbmNlDQoNCkhp IEV1Z2VuZSwNCg0KTXkgZXhwZXJpZW5jZSBpcyB3aXRoIERUUE0gYW5kIHNvbWUgSTJDIFRQTXMg YXQgMS4yIGxldmVsLg0KDQpPbmUgb2YgdGhlIEkyQyBUUE1zIHdhcyBzaWduaWZpY2FudGx5IGRp ZmZlcmVudCwgc28gdGhlIFRwbUlvTGliIGNvbmNlcHQgZG9lcyBub3QgYXBwbHkuDQoNClF1YXJr UGxhdGZvcm1Qa2dcTGlicmFyeVxUcG0xMkRldmljZUxpYkF0bWVsSTJjDQoNClRoZSBvdGhlciBj b3VsZCBwb3RlbnRpYWxseSB1c2Ugc29tZXRoaW5nIGxpa2UgVHBtSW9MaWIsIGJ1dCBtYXkgcmVx dWlyZSBzb21lIGRpZmZlcmVudCBkZWxheXMgYW5kIHRpbWVvdXQgdmFsdWVzIHRoYW4gRFRQTS4N Cg0KUXVhcmtQbGF0Zm9ybVBrZ1xMaWJyYXJ5XFRwbTEyRGV2aWNlTGliSW5maW5lb25JMmMNCg0K U28gbWF5YmUgd2Ugb2ZmZXIgMiBtZXRob2RzIHRvIHBvcnQgYSBUUE0uICBPbmNlIGlzIFRwbUlv TGliIGlmIHRoZSByZWdpc3RlciBsYXlvdXQgYW5kIHJlcXVpcmVkIGRlbGF5cyBhcmUgdGhlIHNh bWUgYXMgRFRQTSB3aXRoIHBvdGVudGlhbGx5IGEgZGlmZmVyZW50IGJhc2UsIGFuZCB0aGUgb3Ro ZXIgaXMgdG8ganVzdCBpbXBsZW1lbnQgdGhlIERldmljZUxpYi4NCg0KSSB3b3VsZCByZWNvbW1l bmQgdGhhdCBhIGZ1bGwgaW1wbGVtZW50YXRpb24gb2YgVHBtSW9MaWIgZm9yIGEgZmV3IG5vbiBN TUlPIFRQTSBkZXZpY2VzIGJlIGNvbXBsZXRlZCBhbmQgcGFzcyB2YWxpZGF0aW9uIGJlZm9yZSB3 ZSBjb25zaWRlciBhZGRpbmcgbmV3IGxpYiBjbGFzcyB0byBlZGsyLiAgUGVyaGFwcyB1c2luZyBh biBlZGsyLXN0YWdpbmcgYnJhbmNoIHdvdWxkIGJlIGEgYmV0dGVyIHBsYWNlIHRvIHN0YXJ0IGFu ZCB5b3UgY2FuIGRvY3VtZW50IGluIHRoZSBSZWFkbWUubWQgdGhlIGNyaXRlcmlhIHRoYXQgbXVz dCBiZSBtZXQgYmVmb3JlIHRoZSBuZXcgbGliIGNsYXNzIG1lZXRzIHRoZSByZXF1aXJlbWVudHMg Zm9yIGVkazIvbWFzdGVyLg0KDQpNaWtlDQoNCkZyb206IENvaGVuLCBFdWdlbmUgW21haWx0bzpl dWdlbmVAaHAuY29tXQ0KU2VudDogVHVlc2RheSwgTm92ZW1iZXIgMTMsIDIwMTggMzoyNCBQTQ0K VG86IEtpbm5leSwgTWljaGFlbCBEIDxtaWNoYWVsLmQua2lubmV5QGludGVsLmNvbTxtYWlsdG86 bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb20+PjsgZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmc8bWFp bHRvOmVkazItZGV2ZWxAbGlzdHMuMDEub3JnPjsgWWFvLCBKaWV3ZW4gPGppZXdlbi55YW9AaW50 ZWwuY29tPG1haWx0bzpqaWV3ZW4ueWFvQGludGVsLmNvbT4+OyBaaGFuZywgQ2hhbyBCIDxjaGFv LmIuemhhbmdAaW50ZWwuY29tPG1haWx0bzpjaGFvLmIuemhhbmdAaW50ZWwuY29tPj4NCkNjOiBC aW4sIFN1bmctVWsgKLrzvLq/7SkgPHN1bmd1ay1iaW5AaHAuY29tPG1haWx0bzpzdW5ndWstYmlu QGhwLmNvbT4+DQpTdWJqZWN0OiBSRTogW1BBVENIIDMvNF0gU2VjdXJpdHlQa2c6IGFkZCBUcG1J b0xpYk1taW8gaW5zdGFuY2UNCg0KTWlrZSwNCg0KVGhlcmUgaXMgYSBwcmV2YWxlbmNlIG9mIGJh c2UgYWRkcmVzcyBub21lbmNsYXR1cmUgaW4gdGhlIERUUE0gbGlicmFyeSBsaWtlOg0KDQogICAg ICAgICAgICAgICAgcmV0dXJuIFRpc1BjUmVxdWVzdFVzZVRwbSAoKFRJU19QQ19SRUdJU1RFUlNf UFRSKSAoVUlOVE4pIFBjZEdldDY0IChQY2RUcG1CYXNlQWRkcmVzcykpOw0KDQpsaWtlIGZyb20g VHBtMlRpcy5jLg0KDQoNCqiqICBzaG91bGRuoa90IHRoZSBBZGRyZXNzIGJlIHRoZSByZWxhdGl2 ZSBhZGRyZXNzIGZyb20gYSBiYXNlPw0KDQpJIHRoaW5rIGl0IGlzLCB0byB0aGUgZXh0ZW50IHRo YXQgdGhlIFBjZFRwbUJhc2VBZGRyZXNzIGFscmVhZHkgZXhpc3RzLg0KDQoNCqiqICBPciBhcmUg eW91IHVzaW5nIHRoZSBmdWxsIERUUE0gTU1JTyBhZGRyZXNzIG9uIHB1cnBvc2UgYW5kIHlvdSBl eHBlY3Qgbm9uIERUUE0gTU1JTyBpbXBsZW1lbnRhdGlvbnMgdG8gdHJhbnNsYXRlIGZyb20gdGhl IERUUE0gTU1JTyBhZGRyZXNzIHRvIHRoZSBlcXVpdmFsZW50IHJlZ2lzdGVyIGFjY2VzcyBpbiBv biBhbiBhbHRlcm5hdGUgYnVzIHR5cGU/DQoNCk15IHRob3VnaHQgaXMgdGhhdCB0aGUgUGNkVHBt QmFzZUFkZHJlc3MgY291bGQgYmUgc2V0IHRvIHplcm8gKG9yIHdoYXRldmVyIG5vbi1NTUlPIG9m ZnNldCBtYWtlcyBzZW5zZSkuDQoNCg0KqKogIFdvdWxkbid0IGl0IGJlIGJldHRlciB0byBoYXZl IGFuIGFic3RyYWN0aW9uIGZvciBkaWZmZXJlbnQgVFBNIHJlZ2lzdGVycyBhbmQgdGhlIERUUE0g aW1wbGVtZW50YXRpb24gd291bGQgY29udmVydCB0byBhIGZ1bGwgTU1JTyBhZGRyZXNzIGluIHRo ZSBsaWIgaW1wbGVtZW50YXRpb24/DQoNCkkndmUgYmVlbiBsZWQgdG8gdW5kZXJzdGFuZCB0aGF0 IHRoZSBUUE0gcmVnaXN0ZXJzIGFyZSB0aGUgc2FtZSBpbiBib3RoIGNhc2VzLiAgSSBoYXZlbid0 IHZlcmlmaWVkIHRoaXMgbXlzZWxmIC0gYnV0IGlmIHlvdSBoYXZlIGRhdGEgdG8gdGhlIGNvbnRy YXJ5IHBsZWFzZSBsZXQgdXMga25vdyBzbyB3ZSBzdG9wIGdvaW5nIGRvd24gdGhpcyBwYXRoLg0K DQpNeSBtYWluIHJlYXNvbiBmb3IgcmVzaXN0aW5nIGNyZWF0aW5nIGEgbmV3IGxpYnJhcnkgYXQg dGhlIFRwbTJEZXZpY2VMaWIgbGF5ZXIgYmVjYXVzZSB0aGUgRFRQTSBsaWJyYXJ5IGNvbnRhaW5z IGEgbG90IG9mIGxvZ2ljIGFyb3VuZCBob3cgdG8gdGFsayB0byB0aGUgVFBNIHRoYXQgZXh0ZW5k cyB3ZWxsIGJleW9uZCB0aGUgYWNjZXNzIG1lY2hhbmlzbSB0aGF0IHdlIHdvdWxkIG5vdCB3YW50 IHRvIGR1cGxpY2F0ZSB0byBhbm90aGVyIGxpYnJhcnkgaW5zdGFuY2UuICBJJ20gbG9va2luZyBp bnNpZGUgVHBtMlRpcy5jIGFuZCBUcG0yUHRwLmMgdG8gZ2V0IHRoaXMgcGVyc3BlY3RpdmUuDQoN ClRoYW5rcywNCg0KRXVnZW5lDQoNCkZyb206IEtpbm5leSwgTWljaGFlbCBEIDxtaWNoYWVsLmQu a2lubmV5QGludGVsLmNvbTxtYWlsdG86bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb20+Pg0KU2Vu dDogVHVlc2RheSwgTm92ZW1iZXIgMTMsIDIwMTggMzo1OCBQTQ0KVG86IENvaGVuLCBFdWdlbmUg PGV1Z2VuZUBocC5jb208bWFpbHRvOmV1Z2VuZUBocC5jb20+PjsgZWRrMi1kZXZlbEBsaXN0cy4w MS5vcmc8bWFpbHRvOmVkazItZGV2ZWxAbGlzdHMuMDEub3JnPjsgWWFvLCBKaWV3ZW4gPGppZXdl bi55YW9AaW50ZWwuY29tPG1haWx0bzpqaWV3ZW4ueWFvQGludGVsLmNvbT4+OyBaaGFuZywgQ2hh byBCIDxjaGFvLmIuemhhbmdAaW50ZWwuY29tPG1haWx0bzpjaGFvLmIuemhhbmdAaW50ZWwuY29t Pj47IEtpbm5leSwgTWljaGFlbCBEIDxtaWNoYWVsLmQua2lubmV5QGludGVsLmNvbTxtYWlsdG86 bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb20+Pg0KQ2M6IEJpbiwgU3VuZy1VayAouvO8ur/tKSA8 c3VuZ3VrLWJpbkBocC5jb208bWFpbHRvOnN1bmd1ay1iaW5AaHAuY29tPj4NClN1YmplY3Q6IFJF OiBbUEFUQ0ggMy80XSBTZWN1cml0eVBrZzogYWRkIFRwbUlvTGliTW1pbyBpbnN0YW5jZQ0KDQpF dWdlbmUsDQoNCkl0IGFwcGVhcnMgeW91IGFyZSBleHBlY3RpbmcgdGhlIEFkZHJlc3MgcGFyYW1l dGVyDQp0byBiZSB0aGUgZnVsbCBNTUlPIGFkZHJlc3MgZm9yIERUUE0uIElmIHlvdSBhcmUNCndh bnRpbmcgdGhpcyBsaWIgY2xhc3MgdG8gYWJzdHJhY3QgdGhlIGFjY2VzcyBmb3INCmRpZmZlcmVu dCBidXMgdHlwZXMsIHNob3VsZG6hr3QgdGhlIEFkZHJlc3MgYmUgdGhlDQpyZWxhdGl2ZSBhZGRy ZXNzIGZyb20gYSBiYXNlPw0KDQpPciBhcmUgeW91IHVzaW5nIHRoZSBmdWxsIERUUE0gTU1JTyBh ZGRyZXNzIG9uDQpwdXJwb3NlIGFuZCB5b3UgZXhwZWN0IG5vbiBEVFBNIE1NSU8gaW1wbGVtZW50 YXRpb25zDQp0byB0cmFuc2xhdGUgZnJvbSB0aGUgRFRQTSBNTUlPIGFkZHJlc3MgdG8gdGhlDQpl cXVpdmFsZW50IHJlZ2lzdGVyIGFjY2VzcyBpbiBvbiBhbiBhbHRlcm5hdGUgYnVzDQp0eXBlPw0K DQpXb3VsZG4ndCBpdCBiZSBiZXR0ZXIgdG8gaGF2ZSBhbiBhYnN0cmFjdGlvbiBmb3INCmRpZmZl cmVudCBUUE0gcmVnaXN0ZXJzIGFuZCB0aGUgRFRQTSBpbXBsZW1lbnRhdGlvbg0Kd291bGQgY29u dmVydCB0byBhIGZ1bGwgTU1JTyBhZGRyZXNzIGluIHRoZSBsaWINCmltcGxlbWVudGF0aW9uPw0K DQpUaGFua3MsDQoNCk1pa2UNCg0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZy b206IGVkazItZGV2ZWwgW21haWx0bzplZGsyLWRldmVsLQ0KPiBib3VuY2VzQGxpc3RzLjAxLm9y ZzxtYWlsdG86Ym91bmNlc0BsaXN0cy4wMS5vcmc+XSBPbiBCZWhhbGYgT2YgQ29oZW4sIEV1Z2Vu ZQ0KPiBTZW50OiBUdWVzZGF5LCBOb3ZlbWJlciAxMywgMjAxOCAyOjEzIFBNDQo+IFRvOiBlZGsy LWRldmVsQGxpc3RzLjAxLm9yZzxtYWlsdG86ZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmc+OyBZYW8s IEppZXdlbg0KPiA8amlld2VuLnlhb0BpbnRlbC5jb208bWFpbHRvOmppZXdlbi55YW9AaW50ZWwu Y29tPj47IFpoYW5nLCBDaGFvIEINCj4gPGNoYW8uYi56aGFuZ0BpbnRlbC5jb208bWFpbHRvOmNo YW8uYi56aGFuZ0BpbnRlbC5jb20+Pg0KPiBDYzogQmluLCBTdW5nLVVrICi687y6v+0pIDxzdW5n dWstYmluQGhwLmNvbTxtYWlsdG86c3VuZ3VrLWJpbkBocC5jb20+Pg0KPiBTdWJqZWN0OiBbZWRr Ml0gW1BBVENIIDMvNF0gU2VjdXJpdHlQa2c6IGFkZA0KPiBUcG1Jb0xpYk1taW8gaW5zdGFuY2UN Cj4NCj4gU2VjdXJpdHlQa2c6IGFkZCBUcG1Jb0xpYk1taW8gaW5zdGFuY2UNCj4NCj4gQ29udHJp YnV0ZWQtdW5kZXI6IFRpYW5vQ29yZSBDb250cmlidXRpb24gQWdyZWVtZW50IDEuMQ0KPiBDYzog Q2hhbyBaaGFuZyA8Y2hhby5iLnpoYW5nQGludGVsLmNvbTxtYWlsdG86Y2hhby5iLnpoYW5nQGlu dGVsLmNvbT4+DQo+IENjOiBKaWV3ZW4gWWFvIDxqaWV3ZW4ueWFvQGludGVsLmNvbTxtYWlsdG86 amlld2VuLnlhb0BpbnRlbC5jb20+Pg0KPiBTaWduZWQtb2ZmLWJ5OiBFdWdlbmUgQ29oZW4gPGV1 Z2VuZUBocC5jb208bWFpbHRvOmV1Z2VuZUBocC5jb20+Pg0KPiAtLS0NCj4gU2VjdXJpdHlQa2cv TGlicmFyeS9UcG1Jb0xpYk1taW8vVHBtSW9MaWJNbWlvLmMgfA0KPiAyMjEgKysrKysrKysrKysr KysrKysrKysNCj4gU2VjdXJpdHlQa2cvTGlicmFyeS9UcG1Jb0xpYk1taW8vVHBtSW9MaWJNbWlv LmluZiB8DQo+IDQxICsrKysNCj4gMiBmaWxlcyBjaGFuZ2VkLCAyNjIgaW5zZXJ0aW9ucygrKQ0K Pg0KPiBkaWZmIC0tZ2l0DQo+IGEvU2VjdXJpdHlQa2cvTGlicmFyeS9UcG1Jb0xpYk1taW8vVHBt SW9MaWJNbWlvLmMNCj4gYi9TZWN1cml0eVBrZy9MaWJyYXJ5L1RwbUlvTGliTW1pby9UcG1Jb0xp Yk1taW8uYw0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwLi41NmYzMTg3 DQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvU2VjdXJpdHlQa2cvTGlicmFyeS9UcG1Jb0xpYk1t aW8vVHBtSW9MaWJNbWlvLmMNCj4gQEAgLTAsMCArMSwyMjEgQEANCj4gKy8qKiBAZmlsZQ0KPiAr IFRoaXMgbGlicmFyeSBpcyB0byBhYnN0cmFjdCBUUE0yIHJlZ2lzdGVyIGFjY2Vzc2VzDQo+IHNv IHRoYXQgYSBjb21tb24NCj4gKyBpbnRlcmZhY2UgY2FuIGJlIHVzZWQgZm9yIG11bHRpcGxlIHVu ZGVybHlpbmcgYnVzc2VzDQo+IHN1Y2ggYXMgVFBNLA0KPiArIFNQSSwgb3IgSTJDIGFjY2Vzcy4N Cj4gKw0KPiArQ29weXJpZ2h0IChjKSAyMDE4IEhQIERldmVsb3BtZW50IENvbXBhbnksIEwuUC4N Cj4gK1RoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCj4gK2FyZSBs aWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIGFuZA0KPiBjb25kaXRp b25zIG9mIHRoZSBCU0QgTGljZW5zZQ0KPiArd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmli dXRpb24uIFRoZSBmdWxsIHRleHQgb2YNCj4gdGhlIGxpY2Vuc2UgbWF5IGJlIGZvdW5kIGF0DQo+ ICtodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vuc2UucGhwDQo+ICsNCj4g K1RIRSBQUk9HUkFNIElTIERJU1RSSUJVVEVEIFVOREVSIFRIRSBCU0QgTElDRU5TRSBPTiBBTg0K PiAiQVMgSVMiIEJBU0lTLA0KPiArV0lUSE9VVCBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9O UyBPRiBBTlkgS0lORCwNCj4gRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRC4NCj4gKw0KPiArKiov DQo+ICsNCj4gKyNpbmNsdWRlIDxCYXNlLmg+DQo+ICsNCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L1Rw bUlvTGliLmg+DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9Jb0xpYi5oPg0KPiArDQo+ICsNCj4gKw0K PiArLyoqDQo+ICsgUmVhZHMgYW4gOC1iaXQgVFBNIHJlZ2lzdGVyLg0KPiArDQo+ICsgUmVhZHMg dGhlIDgtYml0IFRQTSByZWdpc3RlciBzcGVjaWZpZWQgYnkgQWRkcmVzcy4NCj4gVGhlIDgtYml0 IHJlYWQgdmFsdWUgaXMNCj4gKyByZXR1cm5lZC4gVGhpcyBmdW5jdGlvbiBtdXN0IGd1YXJhbnRl ZSB0aGF0IGFsbCBUUE0NCj4gcmVhZCBhbmQgd3JpdGUNCj4gKyBvcGVyYXRpb25zIGFyZSBzZXJp YWxpemVkLg0KPiArDQo+ICsgSWYgOC1iaXQgVFBNIHJlZ2lzdGVyIG9wZXJhdGlvbnMgYXJlIG5v dCBzdXBwb3J0ZWQsDQo+IHRoZW4gQVNTRVJUKCkuDQo+ICsNCj4gKyBAcGFyYW0gQWRkcmVzcyBU aGUgVFBNIHJlZ2lzdGVyIHRvIHJlYWQuDQo+ICsNCj4gKyBAcmV0dXJuIFRoZSB2YWx1ZSByZWFk Lg0KPiArDQo+ICsqKi8NCj4gK1VJTlQ4DQo+ICtFRklBUEkNCj4gK1RwbVJlYWQ4ICgNCj4gKyBJ TiBVSU5UTiBBZGRyZXNzDQo+ICsgKQ0KPiArew0KPiArIHJldHVybiBNbWlvUmVhZDggKEFkZHJl c3MpOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyBXcml0ZXMgYW4gOC1iaXQgVFBNIHJlZ2lzdGVy Lg0KPiArDQo+ICsgV3JpdGVzIHRoZSA4LWJpdCBUUE0gcmVnaXN0ZXIgc3BlY2lmaWVkIGJ5IEFk ZHJlc3MNCj4gd2l0aCB0aGUgdmFsdWUgc3BlY2lmaWVkDQo+ICsgYnkgVmFsdWUgYW5kIHJldHVy bnMgVmFsdWUuIFRoaXMgZnVuY3Rpb24gbXVzdA0KPiBndWFyYW50ZWUgdGhhdCBhbGwgVFBNIHJl YWQNCj4gKyBhbmQgd3JpdGUgb3BlcmF0aW9ucyBhcmUgc2VyaWFsaXplZC4NCj4gKw0KPiArIElm IDgtYml0IFRQTSByZWdpc3RlciBvcGVyYXRpb25zIGFyZSBub3Qgc3VwcG9ydGVkLA0KPiB0aGVu IEFTU0VSVCgpLg0KPiArDQo+ICsgQHBhcmFtIEFkZHJlc3MgVGhlIFRQTSByZWdpc3RlciB0byB3 cml0ZS4NCj4gKyBAcGFyYW0gVmFsdWUgVGhlIHZhbHVlIHRvIHdyaXRlIHRvIHRoZSBUUE0NCj4g cmVnaXN0ZXIuDQo+ICsNCj4gKyBAcmV0dXJuIFZhbHVlLg0KPiArDQo+ICsqKi8NCj4gK1VJTlQ4 DQo+ICtFRklBUEkNCj4gK1RwbVdyaXRlOCAoDQo+ICsgSU4gVUlOVE4gQWRkcmVzcywNCj4gKyBJ TiBVSU5UOCBWYWx1ZQ0KPiArICkNCj4gK3sNCj4gKyByZXR1cm4gTW1pb1dyaXRlOCAoQWRkcmVz cywgVmFsdWUpOw0KPiArfQ0KPiArDQo+ICsNCj4gKy8qKg0KPiArIFJlYWRzIGEgMTYtYml0IFRQ TSByZWdpc3Rlci4NCj4gKw0KPiArIFJlYWRzIHRoZSAxNi1iaXQgVFBNIHJlZ2lzdGVyIHNwZWNp ZmllZCBieSBBZGRyZXNzLg0KPiBUaGUgMTYtYml0IHJlYWQgdmFsdWUgaXMNCj4gKyByZXR1cm5l ZC4gVGhpcyBmdW5jdGlvbiBtdXN0IGd1YXJhbnRlZSB0aGF0IGFsbCBUUE0NCj4gcmVhZCBhbmQg d3JpdGUNCj4gKyBvcGVyYXRpb25zIGFyZSBzZXJpYWxpemVkLg0KPiArDQo+ICsgSWYgMTYtYml0 IFRQTSByZWdpc3RlciBvcGVyYXRpb25zIGFyZSBub3Qgc3VwcG9ydGVkLA0KPiB0aGVuIEFTU0VS VCgpLg0KPiArIElmIEFkZHJlc3MgaXMgbm90IGFsaWduZWQgb24gYSAxNi1iaXQgYm91bmRhcnks IHRoZW4NCj4gQVNTRVJUKCkuDQo+ICsNCj4gKyBAcGFyYW0gQWRkcmVzcyBUaGUgVFBNIHJlZ2lz dGVyIHRvIHJlYWQuDQo+ICsNCj4gKyBAcmV0dXJuIFRoZSB2YWx1ZSByZWFkLg0KPiArDQo+ICsq Ki8NCj4gK1VJTlQxNg0KPiArRUZJQVBJDQo+ICtUcG1SZWFkMTYgKA0KPiArIElOIFVJTlROIEFk ZHJlc3MNCj4gKyApDQo+ICt7DQo+ICsgcmV0dXJuIE1taW9SZWFkMTYgKEFkZHJlc3MpOw0KPiAr fQ0KPiArDQo+ICsNCj4gKy8qKg0KPiArIFdyaXRlcyBhIDE2LWJpdCBUUE0gcmVnaXN0ZXIuDQo+ ICsNCj4gKyBXcml0ZXMgdGhlIDE2LWJpdCBUUE0gcmVnaXN0ZXIgc3BlY2lmaWVkIGJ5IEFkZHJl c3MNCj4gd2l0aCB0aGUgdmFsdWUgc3BlY2lmaWVkDQo+ICsgYnkgVmFsdWUgYW5kIHJldHVybnMg VmFsdWUuIFRoaXMgZnVuY3Rpb24gbXVzdA0KPiBndWFyYW50ZWUgdGhhdCBhbGwgVFBNIHJlYWQN Cj4gKyBhbmQgd3JpdGUgb3BlcmF0aW9ucyBhcmUgc2VyaWFsaXplZC4NCj4gKw0KPiArIElmIDE2 LWJpdCBUUE0gcmVnaXN0ZXIgb3BlcmF0aW9ucyBhcmUgbm90IHN1cHBvcnRlZCwNCj4gdGhlbiBB U1NFUlQoKS4NCj4gKyBJZiBBZGRyZXNzIGlzIG5vdCBhbGlnbmVkIG9uIGEgMTYtYml0IGJvdW5k YXJ5LCB0aGVuDQo+IEFTU0VSVCgpLg0KPiArDQo+ICsgQHBhcmFtIEFkZHJlc3MgVGhlIFRQTSBy ZWdpc3RlciB0byB3cml0ZS4NCj4gKyBAcGFyYW0gVmFsdWUgVGhlIHZhbHVlIHRvIHdyaXRlIHRv IHRoZSBUUE0NCj4gcmVnaXN0ZXIuDQo+ICsNCj4gKyBAcmV0dXJuIFZhbHVlLg0KPiArDQo+ICsq Ki8NCj4gK1VJTlQxNg0KPiArRUZJQVBJDQo+ICtUcG1Xcml0ZTE2ICgNCj4gKyBJTiBVSU5UTiBB ZGRyZXNzLA0KPiArIElOIFVJTlQxNiBWYWx1ZQ0KPiArICkNCj4gK3sNCj4gKyByZXR1cm4gTW1p b1dyaXRlMTYgKEFkZHJlc3MsIFZhbHVlKTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgUmVhZHMg YSAzMi1iaXQgVFBNIHJlZ2lzdGVyLg0KPiArDQo+ICsgUmVhZHMgdGhlIDMyLWJpdCBUUE0gcmVn aXN0ZXIgc3BlY2lmaWVkIGJ5IEFkZHJlc3MuDQo+IFRoZSAzMi1iaXQgcmVhZCB2YWx1ZSBpcw0K PiArIHJldHVybmVkLiBUaGlzIGZ1bmN0aW9uIG11c3QgZ3VhcmFudGVlIHRoYXQgYWxsIFRQTQ0K PiByZWFkIGFuZCB3cml0ZQ0KPiArIG9wZXJhdGlvbnMgYXJlIHNlcmlhbGl6ZWQuDQo+ICsNCj4g KyBJZiAzMi1iaXQgVFBNIHJlZ2lzdGVyIG9wZXJhdGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQsDQo+ IHRoZW4gQVNTRVJUKCkuDQo+ICsgSWYgQWRkcmVzcyBpcyBub3QgYWxpZ25lZCBvbiBhIDMyLWJp dCBib3VuZGFyeSwgdGhlbg0KPiBBU1NFUlQoKS4NCj4gKw0KPiArIEBwYXJhbSBBZGRyZXNzIFRo ZSBUUE0gcmVnaXN0ZXIgdG8gcmVhZC4NCj4gKw0KPiArIEByZXR1cm4gVGhlIHZhbHVlIHJlYWQu DQo+ICsNCj4gKyoqLw0KPiArVUlOVDMyDQo+ICtFRklBUEkNCj4gK1RwbVJlYWQzMiAoDQo+ICsg SU4gVUlOVE4gQWRkcmVzcw0KPiArICkNCj4gK3sNCj4gKyByZXR1cm4gTW1pb1JlYWQzMiAoQWRk cmVzcyk7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArIFdyaXRlcyBhIDMyLWJpdCBUUE0gcmVnaXN0 ZXIuDQo+ICsNCj4gKyBXcml0ZXMgdGhlIDMyLWJpdCBUUE0gcmVnaXN0ZXIgc3BlY2lmaWVkIGJ5 IEFkZHJlc3MNCj4gd2l0aCB0aGUgdmFsdWUgc3BlY2lmaWVkDQo+ICsgYnkgVmFsdWUgYW5kIHJl dHVybnMgVmFsdWUuIFRoaXMgZnVuY3Rpb24gbXVzdA0KPiBndWFyYW50ZWUgdGhhdCBhbGwgVFBN IHJlYWQNCj4gKyBhbmQgd3JpdGUgb3BlcmF0aW9ucyBhcmUgc2VyaWFsaXplZC4NCj4gKw0KPiAr IElmIDMyLWJpdCBUUE0gcmVnaXN0ZXIgb3BlcmF0aW9ucyBhcmUgbm90IHN1cHBvcnRlZCwNCj4g dGhlbiBBU1NFUlQoKS4NCj4gKyBJZiBBZGRyZXNzIGlzIG5vdCBhbGlnbmVkIG9uIGEgMzItYml0 IGJvdW5kYXJ5LCB0aGVuDQo+IEFTU0VSVCgpLg0KPiArDQo+ICsgQHBhcmFtIEFkZHJlc3MgVGhl IFRQTSByZWdpc3RlciB0byB3cml0ZS4NCj4gKyBAcGFyYW0gVmFsdWUgVGhlIHZhbHVlIHRvIHdy aXRlIHRvIHRoZSBUUE0NCj4gcmVnaXN0ZXIuDQo+ICsNCj4gKyBAcmV0dXJuIFZhbHVlLg0KPiAr DQo+ICsqKi8NCj4gK1VJTlQzMg0KPiArRUZJQVBJDQo+ICtUcG1Xcml0ZTMyICgNCj4gKyBJTiBV SU5UTiBBZGRyZXNzLA0KPiArIElOIFVJTlQzMiBWYWx1ZQ0KPiArICkNCj4gK3sNCj4gKyByZXR1 cm4gTW1pb1dyaXRlMzIgKEFkZHJlc3MsIFZhbHVlKTsNCj4gK30NCj4gKw0KPiArDQo+ICsvKioN Cj4gKyBSZWFkcyBhIDY0LWJpdCBUUE0gcmVnaXN0ZXIuDQo+ICsNCj4gKyBSZWFkcyB0aGUgNjQt Yml0IFRQTSByZWdpc3RlciBzcGVjaWZpZWQgYnkgQWRkcmVzcy4NCj4gVGhlIDY0LWJpdCByZWFk IHZhbHVlIGlzDQo+ICsgcmV0dXJuZWQuIFRoaXMgZnVuY3Rpb24gbXVzdCBndWFyYW50ZWUgdGhh dCBhbGwgVFBNDQo+IHJlYWQgYW5kIHdyaXRlDQo+ICsgb3BlcmF0aW9ucyBhcmUgc2VyaWFsaXpl ZC4NCj4gKw0KPiArIElmIDY0LWJpdCBUUE0gcmVnaXN0ZXIgb3BlcmF0aW9ucyBhcmUgbm90IHN1 cHBvcnRlZCwNCj4gdGhlbiBBU1NFUlQoKS4NCj4gKyBJZiBBZGRyZXNzIGlzIG5vdCBhbGlnbmVk IG9uIGEgNjQtYml0IGJvdW5kYXJ5LCB0aGVuDQo+IEFTU0VSVCgpLg0KPiArDQo+ICsgQHBhcmFt IEFkZHJlc3MgVGhlIFRQTSByZWdpc3RlciB0byByZWFkLg0KPiArDQo+ICsgQHJldHVybiBUaGUg dmFsdWUgcmVhZC4NCj4gKw0KPiArKiovDQo+ICtVSU5UNjQNCj4gK0VGSUFQSQ0KPiArVHBtUmVh ZDY0ICgNCj4gKyBJTiBVSU5UTiBBZGRyZXNzDQo+ICsgKQ0KPiArew0KPiArIHJldHVybiBNbWlv UmVhZDY0IChBZGRyZXNzKTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgV3JpdGVzIGEgNjQtYml0 IFRQTSByZWdpc3Rlci4NCj4gKw0KPiArIFdyaXRlcyB0aGUgNjQtYml0IFRQTSByZWdpc3RlciBz cGVjaWZpZWQgYnkgQWRkcmVzcw0KPiB3aXRoIHRoZSB2YWx1ZSBzcGVjaWZpZWQNCj4gKyBieSBW YWx1ZSBhbmQgcmV0dXJucyBWYWx1ZS4gVGhpcyBmdW5jdGlvbiBtdXN0DQo+IGd1YXJhbnRlZSB0 aGF0IGFsbCBUUE0gcmVhZA0KPiArIGFuZCB3cml0ZSBvcGVyYXRpb25zIGFyZSBzZXJpYWxpemVk Lg0KPiArDQo+ICsgSWYgNjQtYml0IFRQTSByZWdpc3RlciBvcGVyYXRpb25zIGFyZSBub3Qgc3Vw cG9ydGVkLA0KPiB0aGVuIEFTU0VSVCgpLg0KPiArIElmIEFkZHJlc3MgaXMgbm90IGFsaWduZWQg b24gYSA2NC1iaXQgYm91bmRhcnksIHRoZW4NCj4gQVNTRVJUKCkuDQo+ICsNCj4gKyBAcGFyYW0g QWRkcmVzcyBUaGUgVFBNIHJlZ2lzdGVyIHRvIHdyaXRlLg0KPiArIEBwYXJhbSBWYWx1ZSBUaGUg dmFsdWUgdG8gd3JpdGUgdG8gdGhlIFRQTQ0KPiByZWdpc3Rlci4NCj4gKw0KPiArKiovDQo+ICtV SU5UNjQNCj4gK0VGSUFQSQ0KPiArVHBtV3JpdGU2NCAoDQo+ICsgSU4gVUlOVE4gQWRkcmVzcywN Cj4gKyBJTiBVSU5UNjQgVmFsdWUNCj4gKyApDQo+ICt7DQo+ICsgcmV0dXJuIE1taW9Xcml0ZTY0 IChBZGRyZXNzLCBWYWx1ZSk7DQo+ICt9DQo+IGRpZmYgLS1naXQNCj4gYS9TZWN1cml0eVBrZy9M aWJyYXJ5L1RwbUlvTGliTW1pby9UcG1Jb0xpYk1taW8uaW5mDQo+IGIvU2VjdXJpdHlQa2cvTGli cmFyeS9UcG1Jb0xpYk1taW8vVHBtSW9MaWJNbWlvLmluZg0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0 NA0KPiBpbmRleCAwMDAwMDAwLi5hNDBmOTBlDQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvU2Vj dXJpdHlQa2cvTGlicmFyeS9UcG1Jb0xpYk1taW8vVHBtSW9MaWJNbWlvLmluZg0KPiBAQCAtMCww ICsxLDQxIEBADQo+ICsjIyBAZmlsZQ0KPiArIyBQcm92aWRlcyBCYXNlQ3J5cHRvIFNIQTEgaGFz aCBzZXJ2aWNlDQo+ICsjDQo+ICsjIFRoaXMgbGlicmFyeSBpcyB0byBhYnN0cmFjdCBUUE0yIHJl Z2lzdGVyIGFjY2Vzc2VzDQo+IHNvIHRoYXQgYSBjb21tb24NCj4gKyMgaW50ZXJmYWNlIGNhbiBi ZSB1c2VkIGZvciBtdWx0aXBsZSB1bmRlcmx5aW5nDQo+IGJ1c3NlcyBzdWNoIGFzIFRQTSwNCj4g KyMgU1BJLCBvciBJMkMgYWNjZXNzLg0KPiArIw0KPiArIyBDb3B5cmlnaHQgKGMpIDIwMTggSFAg RGV2ZWxvcG1lbnQgQ29tcGFueSwgTC5QLg0KPiArIyBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2Nv bXBhbnlpbmcgbWF0ZXJpYWxzDQo+ICsjIGFyZSBsaWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFibGUg dW5kZXIgdGhlIHRlcm1zIGFuZA0KPiBjb25kaXRpb25zIG9mIHRoZSBCU0QgTGljZW5zZQ0KPiAr IyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIGZ1bGwgdGV4dA0KPiBv ZiB0aGUgbGljZW5zZSBtYXkgYmUgZm91bmQgYXQNCj4gKyMgaHR0cDovL29wZW5zb3VyY2Uub3Jn L2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocA0KPiArIyBUSEUgUFJPR1JBTSBJUyBESVNUUklCVVRF RCBVTkRFUiBUSEUgQlNEIExJQ0VOU0UgT04NCj4gQU4gIkFTIElTIiBCQVNJUywNCj4gKyMgV0lU SE9VVCBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUyBPRiBBTlkgS0lORCwNCj4gRUlUSEVS IEVYUFJFU1MgT1IgSU1QTElFRC4NCj4gKyMNCj4gKyMjDQo+ICsNCj4gK1tEZWZpbmVzXQ0KPiAr IElORl9WRVJTSU9OID0gMHgwMDAxMDAwNQ0KPiArIEJBU0VfTkFNRSA9IFRwbUlvTGliTW1pbw0K PiArIEZJTEVfR1VJRCA9IEI1MURFMEM2LThBNDgtNEFGOS0NCj4gQkY4OC01QTQ2Q0M4NTNGQzgN Cj4gKyBNT0RVTEVfVFlQRSA9IEJBU0UNCj4gKyBWRVJTSU9OX1NUUklORyA9IDEuMA0KPiArIExJ QlJBUllfQ0xBU1MgPSBOVUxMDQo+ICsNCj4gKyMNCj4gKyMgVGhlIGZvbGxvd2luZyBpbmZvcm1h dGlvbiBpcyBmb3IgcmVmZXJlbmNlIG9ubHkgYW5kDQo+IG5vdCByZXF1aXJlZCBieSB0aGUgYnVp bGQgdG9vbHMuDQo+ICsjDQo+ICsjIFZBTElEX0FSQ0hJVEVDVFVSRVMgPSBJQTMyIFg2NCBBUk0N Cj4gQUFSQ0g2NA0KPiArIw0KPiArDQo+ICtbU291cmNlc10NCj4gKyBUcG1Jb0xpYk1taW8uYw0K PiArDQo+ICtbUGFja2FnZXNdDQo+ICsgTWRlUGtnL01kZVBrZy5kZWMNCj4gKyBTZWN1cml0eVBr Zy9TZWN1cml0eVBrZy5kZWMNCj4gKw0KPiArW0xpYnJhcnlDbGFzc2VzXQ0KPiArIEJhc2VMaWIN Cj4gKyBJb0xpYg0KPiAtLQ0KPiAyLjcuNA0KPg0KPiBfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXw0KPiBlZGsyLWRldmVsIG1haWxpbmcgbGlzdA0KPiBlZGsy LWRldmVsQGxpc3RzLjAxLm9yZzxtYWlsdG86ZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmc+DQo+IGh0 dHBzOi8vbGlzdHMuMDEub3JnL21haWxtYW4vbGlzdGluZm8vZWRrMi1kZXZlbA0K