From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by mx.groups.io with SMTP id smtpd.web12.5218.1573743144484358403 for ; Thu, 14 Nov 2019 06:52:24 -0800 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: intel.com, ip: 192.55.52.151, mailfrom: jian.j.wang@intel.com) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga007.jf.intel.com ([10.7.209.58]) by fmsmga107.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 14 Nov 2019 06:52:24 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.68,304,1569308400"; d="scan'208";a="195054256" Received: from fmsmsx108.amr.corp.intel.com ([10.18.124.206]) by orsmga007.jf.intel.com with ESMTP; 14 Nov 2019 06:52:23 -0800 Received: from fmsmsx158.amr.corp.intel.com (10.18.116.75) by FMSMSX108.amr.corp.intel.com (10.18.124.206) with Microsoft SMTP Server (TLS) id 14.3.439.0; Thu, 14 Nov 2019 06:52:23 -0800 Received: from shsmsx153.ccr.corp.intel.com (10.239.6.53) by fmsmsx158.amr.corp.intel.com (10.18.116.75) with Microsoft SMTP Server (TLS) id 14.3.439.0; Thu, 14 Nov 2019 06:52:22 -0800 Received: from shsmsx107.ccr.corp.intel.com ([169.254.9.63]) by SHSMSX153.ccr.corp.intel.com ([169.254.12.215]) with mapi id 14.03.0439.000; Thu, 14 Nov 2019 22:52:20 +0800 From: "Wang, Jian J" To: Laszlo Ersek , "devel@edk2.groups.io" CC: "Yao, Jiewen" , "Zhang, Chao B" , Ard Biesheuvel , "Matthew Carlson" , Sean Brogan , "Bret Barkelew" , "Gao, Liming" , "Ni, Ray" Subject: Re: [edk2-devel] [PATCH 06/11] SecurityPkg/DxeRngLibRngProtocol: add RNG protocol version of RngLib Thread-Topic: [edk2-devel] [PATCH 06/11] SecurityPkg/DxeRngLibRngProtocol: add RNG protocol version of RngLib Thread-Index: AQHVmtzk/ge+MeezvkaPI8cNSisPk6eKvVLA Date: Thu, 14 Nov 2019 14:52:20 +0000 Message-ID: References: <20191114021743.3876-1-jian.j.wang@intel.com> <20191114021743.3876-7-jian.j.wang@intel.com> <014e7809-4c92-e61f-b6a8-4a08151bbcdd@redhat.com> In-Reply-To: <014e7809-4c92-e61f-b6a8-4a08151bbcdd@redhat.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiODZiM2QxMDQtM2FjNy00YzEyLThkMDAtMGNjMDg4YzNkMDY5IiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoiMWIrK2czenhPNkJZd2QzU0pMaWtXaHVsQjkyWlp1VlFSYWMzaTE5cmN5cjg2bU1kOTFpbXBmTVdjaW1WR05VaCJ9 x-ctpclassification: CTP_NT dlp-product: dlpe-windows dlp-version: 11.2.0.6 dlp-reaction: no-action x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Return-Path: jian.j.wang@intel.com Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 TGFzemxvLA0KDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogTGFzemxv IEVyc2VrIDxsZXJzZWtAcmVkaGF0LmNvbT4NCj4gU2VudDogVGh1cnNkYXksIE5vdmVtYmVyIDE0 LCAyMDE5IDc6MTYgUE0NCj4gVG86IGRldmVsQGVkazIuZ3JvdXBzLmlvOyBXYW5nLCBKaWFuIEog PGppYW4uai53YW5nQGludGVsLmNvbT4NCj4gQ2M6IFlhbywgSmlld2VuIDxqaWV3ZW4ueWFvQGlu dGVsLmNvbT47IFpoYW5nLCBDaGFvIEINCj4gPGNoYW8uYi56aGFuZ0BpbnRlbC5jb20+OyBBcmQg Qmllc2hldXZlbCA8YXJkLmJpZXNoZXV2ZWxAbGluYXJvLm9yZz47DQo+IE1hdHRoZXcgQ2FybHNv biA8bWFjYXJsQG1pY3Jvc29mdC5jb20+OyBTZWFuIEJyb2dhbg0KPiA8c2Vhbi5icm9nYW5AbWlj cm9zb2Z0LmNvbT47IEJyZXQgQmFya2VsZXcNCj4gPGJyZXQuYmFya2VsZXdAbWljcm9zb2Z0LmNv bT47IEdhbywgTGltaW5nIDxsaW1pbmcuZ2FvQGludGVsLmNvbT47IE5pLCBSYXkNCj4gPHJheS5u aUBpbnRlbC5jb20+DQo+IFN1YmplY3Q6IFJlOiBbZWRrMi1kZXZlbF0gW1BBVENIIDA2LzExXSBT ZWN1cml0eVBrZy9EeGVSbmdMaWJSbmdQcm90b2NvbDoNCj4gYWRkIFJORyBwcm90b2NvbCB2ZXJz aW9uIG9mIFJuZ0xpYg0KPiANCj4gT24gMTEvMTQvMTkgMDM6MTcsIFdhbmcsIEppYW4gSiB3cm90 ZToNCj4gPiBGcm9tOiBNYXR0aGV3IENhcmxzb24gPG1hY2FybEBtaWNyb3NvZnQuY29tPg0KPiA+ DQo+ID4gVGhpcyB2ZXJzaW9uIG9mIFJuZ0xpYiBtYWtlcyB1c2Ugb2YgRUZJX1JOR19QUk9UT0NP TCB0byBwcm92aWRlIHJhbmRvbQ0KPiA+IG51bWJlci4gQWNjb3JkaW5nIHRvIFVFRkkgc3BlYywg RUZJX1JOR19QUk9UT0NPTCBzaG91bGQgbWVldCBOSVNUIFNQDQo+ID4gODAwLTkwIGFuZC9vciBB TlNJIFg5LjMxIHN0YW5kYXJkcy4NCj4gDQo+IEknZCBsaWtlIHRvIHNsaWdodGx5IGNvcnJlY3Qg dGhlIFVFRkkgc3BlYyByZWZlcmVuY2UuIEluIFVFRkktMi44LA0KPiBzZWN0aW9uICIzNy41LjEg RUZJIFJORyBBbGdvcml0aG0gRGVmaW5pdGlvbnMiIHdyaXRlcywNCj4gDQo+ICAgICBbLi4uXSBU aGUgYWxnb3JpdGhtcyBsaXN0ZWQgYXJlIG9wdGlvbmFsLCBub3QgbWVhbnQgdG8gYmUgZXhoYXVz dGl2ZQ0KPiAgICAgYW5kIG1heSBiZSBhdWdtZW50ZWQgYnkgdmVuZG9ycyBvciBvdGhlciBpbmR1 c3RyeSBzdGFuZGFyZHMuIFsuLi5dDQo+IA0KPiBNZWFuaW5nIHRoYXQgYW4gRUZJX1JOR19QUk9U T0NPTCBpbnN0YW5jZSBpcyBub3QgInJlcXVpcmVkIiwgcGVyIHNwZWMsDQo+IHRvIHN1cHBvcnQg YW55IG9uZSBvZiB0aGUNCj4gLSBnRWZpUm5nQWxnb3JpdGhtU3A4MDA5MEN0cjI1Nkd1aWQNCj4g LSBnRWZpUm5nQWxnb3JpdGhtU3A4MDA5MEhtYWMyNTZHdWlkDQo+IC0gZ0VmaVJuZ0FsZ29yaXRo bVNwODAwOTBIYXNoMjU2R3VpZA0KPiBhbGdvcml0aG1zLg0KPiANCj4gSXQncyBvZiBjb3Vyc2Ug ZmluZSB0byByZXF1aXJlIG9uZSBvZiB0aG9zZSBhbGdvcml0aG1zLCBhcyBhIHBvbGljeQ0KPiBk ZWNpc2lvbiwgaW4gdGhpcyBwYXJ0aWN1bGFyIGxpYnJhcnkgaW5zdGFuY2UgLS0gYnV0LCBhcyBm YXIgYXMgSSBjYW4NCj4gdGVsbCwgdGhhdCBkZWNpc2lvbiBkb2VzIG5vdCBmb2xsb3cgZnJvbSB0 aGUgc3BlYy4NCj4gDQoNCkkgdGhpbmsgeW91J3JlIHJpZ2h0IGFib3V0IHRoZSBzcGVjLiBBbHRo b3VnaCB0aGV5J3JlIG5vdCAicmVxdWlyZWQiDQpvbmVzLCB3ZSBjYW4gc3RpbGwgc3VnZ2VzdCB0 byBmb2xsb3cgdGhlIE5JU1QvQU5TSSBzcGVjIGFib3V0IHJhbmRvbQ0KZW50cm9weSBpbiB0aGUg aW1wbGVtZW50YXRpb24gb2YgRUZJX1JOR19QUk9UT0NPTC4NCg0KUmVnYXJkcywNCkppYW4NCg0K PiBUaGFua3MNCj4gTGFzemxvDQo+IA0KPiA+DQo+ID4gUmVmOiBodHRwczovL2J1Z3ppbGxhLnRp YW5vY29yZS5vcmcvc2hvd19idWcuY2dpP2lkPTE4NzENCj4gPiBDYzogSmlld2VuIFlhbyA8amll d2VuLnlhb0BpbnRlbC5jb20+DQo+ID4gQ2M6IENoYW8gWmhhbmcgPGNoYW8uYi56aGFuZ0BpbnRl bC5jb20+DQo+ID4gQ2M6IExhc3psbyBFcnNlayA8bGVyc2VrQHJlZGhhdC5jb20+DQo+ID4gQ2M6 IEFyZCBCaWVzaGV1dmVsIDxhcmQuYmllc2hldXZlbEBsaW5hcm8ub3JnPg0KPiA+IENjOiBNYXR0 aGV3IENhcmxzb24gPG1hY2FybEBtaWNyb3NvZnQuY29tPg0KPiA+IENjOiBTZWFuIEJyb2dhbiA8 c2Vhbi5icm9nYW5AbWljcm9zb2Z0LmNvbT4NCj4gPiBDYzogQnJldCBCYXJrZWxldyA8YnJldC5i YXJrZWxld0BtaWNyb3NvZnQuY29tPg0KPiA+IENjOiBMaW1pbmcgR2FvIDxsaW1pbmcuZ2FvQGlu dGVsLmNvbT4NCj4gPiBDYzogUmF5IE5pIDxyYXkubmlAaW50ZWwuY29tPg0KPiA+IFNpZ25lZC1v ZmYtYnk6IEppYW4gSiBXYW5nIDxqaWFuLmoud2FuZ0BpbnRlbC5jb20+DQo+ID4gLS0tDQo+ID4g IC4uLi9EeGVSbmdMaWJSbmdQcm90b2NvbC5jICAgICAgICAgICAgICAgICAgICB8IDIwMCArKysr KysrKysrKysrKysrKysNCj4gPiAgLi4uL0R4ZVJuZ0xpYlJuZ1Byb3RvY29sLmluZiAgICAgICAg ICAgICAgICAgIHwgIDQyICsrKysNCj4gPiAgLi4uL0R4ZVJuZ0xpYlJuZ1Byb3RvY29sLnVuaSAg ICAgICAgICAgICAgICAgIHwgIDE0ICsrDQo+ID4gIDMgZmlsZXMgY2hhbmdlZCwgMjU2IGluc2Vy dGlvbnMoKykNCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0DQo+IFNlY3VyaXR5UGtnL1JhbmRvbU51 bWJlckdlbmVyYXRvci9EeGVSbmdMaWJSbmdQcm90b2NvbC9EeGVSbmdMaWJSbmdQcg0KPiBvdG9j b2wuYw0KPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQNCj4gU2VjdXJpdHlQa2cvUmFuZG9tTnVtYmVy R2VuZXJhdG9yL0R4ZVJuZ0xpYlJuZ1Byb3RvY29sL0R4ZVJuZ0xpYlJuZ1ByDQo+IG90b2NvbC5p bmYNCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0DQo+IFNlY3VyaXR5UGtnL1JhbmRvbU51bWJlckdl bmVyYXRvci9EeGVSbmdMaWJSbmdQcm90b2NvbC9EeGVSbmdMaWJSbmdQcg0KPiBvdG9jb2wudW5p DQo+ID4NCj4gPiBkaWZmIC0tZ2l0DQo+IGEvU2VjdXJpdHlQa2cvUmFuZG9tTnVtYmVyR2VuZXJh dG9yL0R4ZVJuZ0xpYlJuZ1Byb3RvY29sL0R4ZVJuZ0xpYlJuDQo+IGdQcm90b2NvbC5jDQo+IGIv U2VjdXJpdHlQa2cvUmFuZG9tTnVtYmVyR2VuZXJhdG9yL0R4ZVJuZ0xpYlJuZ1Byb3RvY29sL0R4 ZVJuZ0xpYlJuDQo+IGdQcm90b2NvbC5jDQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBp bmRleCAwMDAwMDAwMDAwLi44Y2U0YTcwNTBkDQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKw0K PiBiL1NlY3VyaXR5UGtnL1JhbmRvbU51bWJlckdlbmVyYXRvci9EeGVSbmdMaWJSbmdQcm90b2Nv bC9EeGVSbmdMaWJSbg0KPiBnUHJvdG9jb2wuYw0KPiA+IEBAIC0wLDAgKzEsMjAwIEBADQo+ID4g Ky8qKiBAZmlsZQ0KPiA+ICsgUHJvdmlkZXMgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIGxpYnJh cnkgY2xhc3MgUm5nTGliIHRoYXQgdXNlcyB0aGUgUm5nDQo+IHByb3RvY29sLg0KPiA+ICsNCj4g PiArQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2 ZWQuDQo+ID4gK0NvcHlyaWdodCAoYykgMjAxOSwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdo dHMgcmVzZXJ2ZWQuDQo+ID4gK1NQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2Ut UGF0ZW50DQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArI2luY2x1ZGUgPFVlZmkuaD4NCj4gPiArI2lu Y2x1ZGUgPExpYnJhcnkvVWVmaUJvb3RTZXJ2aWNlc1RhYmxlTGliLmg+DQo+ID4gKyNpbmNsdWRl IDxMaWJyYXJ5L0RlYnVnTGliLmg+DQo+ID4gKyNpbmNsdWRlIDxMaWJyYXJ5L1JuZ0xpYi5oPg0K PiA+ICsjaW5jbHVkZSA8UHJvdG9jb2wvUm5nLmg+DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBH ZW5lcmF0ZXMgYSByYW5kb20gbnVtYmVyIHZpYSB0aGUgTklTVCA4MDAtOUEgYWxnb3JpdGhtLiAg UmVmZXIgdG8NCj4gPiArICBodHRwOi8vY3NyYy5uaXN0Lmdvdi9ncm91cHMvU1RNL2NhdnAvZG9j dW1lbnRzL2RyYmcvRFJCR1ZTLnBkZg0KPiA+ICsgIGZvciBtb3JlIGluZm9ybWF0aW9uLg0KPiA+ ICsNCj4gPiArICBAcGFyYW1bb3V0XSBCdWZmZXIgICAgICBCdWZmZXIgdG8gcmVjZWl2ZSB0aGUg cmFuZG9tIG51bWJlci4NCj4gPiArICBAcGFyYW1baW5dICBCdWZmZXJTaXplICBOdW1iZXIgb2Yg Ynl0ZXMgaW4gQnVmZmVyLg0KPiA+ICsNCj4gPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICBSYW5k b20gZGF0YSBnZW5lcmF0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiA+ICsgIEByZXR2YWwgT3RoZXJzICAg ICAgIEZhaWxlZCB0byBnZW5lcmF0ZSB0aGUgcmFuZG9tIG51bWJlci4NCj4gPiArDQo+ID4gKyoq Lw0KPiA+ICtTVEFUSUMNCj4gPiArRUZJX1NUQVRVUw0KPiA+ICtHZW5lcmF0ZVJhbmRvbU51bWJl clZpYU5pc3Q4MDBBbGdvcml0aG0oDQo+ID4gKyAgT1VUIFVJTlQ4KiBCdWZmZXIsDQo+ID4gKyAg SU4gIFVJTlROICBCdWZmZXJTaXplDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgRUZJX1NUQVRV UyAgICAgICAgU3RhdHVzOw0KPiA+ICsgIEVGSV9STkdfUFJPVE9DT0wqIFJuZ1Byb3RvY29sOw0K PiA+ICsNCj4gPiArICBTdGF0dXMgPSBFRklfVU5TVVBQT1JURUQ7DQo+ID4gKyAgUm5nUHJvdG9j b2wgPSBOVUxMOw0KPiA+ICsNCj4gPiArICBpZiAoQnVmZmVyID09IE5VTEwpIHsNCj4gPiArICAg IERFQlVHICgoREVCVUdfRVJST1IsICJbJWFdIEJ1ZmZlciA9PSBOVUxMLlxuIiwgX19GVU5DVElP Tl9fKSk7DQo+ID4gKyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiA+ICsgIH0N Cj4gPiArDQo+ID4gKyAgaWYgKGdCUyA9PSBOVUxMKSB7DQo+ID4gKyAgICBERUJVRyAoKERFQlVH X0VSUk9SLCAiWyVhXSBHZW5lcmF0ZVJhbmRvbU51bWJlciwgZ0JTID09IE5VTEwuDQo+IENhbGxl ZCB0b28gc29vbi5cbiIsIF9fRlVOQ1RJT05fXykpOw0KPiA+ICsgICAgcmV0dXJuIEVGSV9MT0FE X0VSUk9SOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgU3RhdHVzID0gZ0JTLT5Mb2NhdGVQcm90 b2NvbCAoJmdFZmlSbmdQcm90b2NvbEd1aWQsIE5VTEwsIChWT0lEDQo+ICoqKSZSbmdQcm90b2Nv bCk7DQo+ID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSB8fCBSbmdQcm90b2NvbCA9PSBOVUxM KSB7DQo+ID4gKyAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiWyVhXSBDb3VsZCBub3QgbG9jYXRl IFJORyBwcm90b3RvY29sLCBTdGF0dXMNCj4gPSAlclxuIiwgX19GVU5DVElPTl9fLCBTdGF0dXMp KTsNCj4gPiArICAgIHJldHVybiBTdGF0dXM7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBTdGF0 dXMgPSBSbmdQcm90b2NvbC0+R2V0Uk5HIChSbmdQcm90b2NvbCwNCj4gJmdFZmlSbmdBbGdvcml0 aG1TcDgwMDkwQ3RyMjU2R3VpZCwgQnVmZmVyU2l6ZSwgQnVmZmVyKTsNCj4gPiArICBERUJVRyAo KERFQlVHX1ZFUkJPU0UsICJbJWFdIEdldFJORyBhbGdvcml0aG0gQ1RSLTI1NiAtIFN0YXR1cw0K PiA9ICVyXG4iLCBfX0ZVTkNUSU9OX18sIFN0YXR1cykpOw0KPiA+ICsgIGlmICghRUZJX0VSUk9S IChTdGF0dXMpKSB7DQo+ID4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiA+ICsgIH0NCj4gPiArDQo+ ID4gKyAgU3RhdHVzID0gUm5nUHJvdG9jb2wtPkdldFJORyAoUm5nUHJvdG9jb2wsDQo+ICZnRWZp Um5nQWxnb3JpdGhtU3A4MDA5MEhtYWMyNTZHdWlkLCBCdWZmZXJTaXplLCBCdWZmZXIpOw0KPiA+ ICsgIERFQlVHICgoREVCVUdfVkVSQk9TRSwgIlslYV0gR2V0Uk5HIGFsZ29yaXRobSBITUFDLTI1 NiAtIFN0YXR1cw0KPiA9ICVyXG4iLCBfX0ZVTkNUSU9OX18sIFN0YXR1cykpOw0KPiA+ICsgIGlm ICghRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiA+ICsg IH0NCj4gPiArDQo+ID4gKyAgU3RhdHVzID0gUm5nUHJvdG9jb2wtPkdldFJORyAoUm5nUHJvdG9j b2wsDQo+ICZnRWZpUm5nQWxnb3JpdGhtU3A4MDA5MEhhc2gyNTZHdWlkLCBCdWZmZXJTaXplLCBC dWZmZXIpOw0KPiA+ICsgIERFQlVHICgoREVCVUdfVkVSQk9TRSwgIlslYV0gR2V0Uk5HIGFsZ29y aXRobSBIYXNoLTI1NiAtIFN0YXR1cw0KPiA9ICVyXG4iLCBfX0ZVTkNUSU9OX18sIFN0YXR1cykp Ow0KPiA+ICsgIGlmICghRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gKyAgICByZXR1cm4gU3Rh dHVzOw0KPiA+ICsgIH0NCj4gPiArICAvLw0KPiA+ICsgIC8vIElmIHdlIGdldCB0byB0aGlzIHBv aW50LCB3ZSBoYXZlIGZhaWxlZA0KPiA+ICsgIC8vDQo+ID4gKyAgREVCVUcoKERFQlVHX0VSUk9S LCAiWyVhXSBHZXRSTkcoKSBmYWlsZWQsIHN0YXVzID0gJXJcbiIsDQo+IF9fRlVOQ1RJT05fXywg U3RhdHVzKSk7DQo+ID4gKw0KPiA+ICsgIHJldHVybiBTdGF0dXM7DQo+ID4gK30NCj4gPiArDQo+ ID4gKw0KPiA+ICsvKioNCj4gPiArICBHZW5lcmF0ZXMgYSAxNi1iaXQgcmFuZG9tIG51bWJlci4N Cj4gPiArDQo+ID4gKyAgaWYgUmFuZCBpcyBOVUxMLCByZXR1cm4gRkFMU0UuDQo+ID4gKw0KPiA+ ICsgIEBwYXJhbVtvdXRdIFJhbmQgICAgIEJ1ZmZlciBwb2ludGVyIHRvIHN0b3JlIHRoZSAxNi1i aXQgcmFuZG9tIHZhbHVlLg0KPiA+ICsNCj4gPiArICBAcmV0dmFsIFRSVUUgICAgICAgICBSYW5k b20gbnVtYmVyIGdlbmVyYXRlZCBzdWNjZXNzZnVsbHkuDQo+ID4gKyAgQHJldHZhbCBGQUxTRSAg ICAgICAgRmFpbGVkIHRvIGdlbmVyYXRlIHRoZSByYW5kb20gbnVtYmVyLg0KPiA+ICsNCj4gPiAr KiovDQo+ID4gK0JPT0xFQU4NCj4gPiArRUZJQVBJDQo+ID4gK0dldFJhbmRvbU51bWJlcjE2ICgN Cj4gPiArICBPVVQgICAgIFVJTlQxNiAgICAgICAgICAgICAgICAgICAgKlJhbmQNCj4gPiArICAp DQo+ID4gK3sNCj4gPiArICBFRklfU1RBVFVTIFN0YXR1czsNCj4gPiArDQo+ID4gKyAgaWYgKFJh bmQgPT0gTlVMTCkgew0KPiA+ICsgICAgcmV0dXJuIEZBTFNFOw0KPiA+ICsgIH0NCj4gPiArDQo+ ID4gKyAgU3RhdHVzID0gR2VuZXJhdGVSYW5kb21OdW1iZXJWaWFOaXN0ODAwQWxnb3JpdGhtICgo VUlOVDggKilSYW5kLCAyKTsNCj4gPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4g KyAgICByZXR1cm4gRkFMU0U7DQo+ID4gKyAgfQ0KPiA+ICsgIHJldHVybiBUUlVFOw0KPiA+ICt9 DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBHZW5lcmF0ZXMgYSAzMi1iaXQgcmFuZG9tIG51bWJl ci4NCj4gPiArDQo+ID4gKyAgaWYgUmFuZCBpcyBOVUxMLCByZXR1cm4gRkFMU0UuDQo+ID4gKw0K PiA+ICsgIEBwYXJhbVtvdXRdIFJhbmQgICAgIEJ1ZmZlciBwb2ludGVyIHRvIHN0b3JlIHRoZSAz Mi1iaXQgcmFuZG9tIHZhbHVlLg0KPiA+ICsNCj4gPiArICBAcmV0dmFsIFRSVUUgICAgICAgICBS YW5kb20gbnVtYmVyIGdlbmVyYXRlZCBzdWNjZXNzZnVsbHkuDQo+ID4gKyAgQHJldHZhbCBGQUxT RSAgICAgICAgRmFpbGVkIHRvIGdlbmVyYXRlIHRoZSByYW5kb20gbnVtYmVyLg0KPiA+ICsNCj4g PiArKiovDQo+ID4gK0JPT0xFQU4NCj4gPiArRUZJQVBJDQo+ID4gK0dldFJhbmRvbU51bWJlcjMy ICgNCj4gPiArICBPVVQgICAgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgKlJhbmQNCj4gPiAr ICApDQo+ID4gK3sNCj4gPiArICBFRklfU1RBVFVTIFN0YXR1czsNCj4gPiArDQo+ID4gKyAgaWYg KFJhbmQgPT0gTlVMTCkgew0KPiA+ICsgICAgcmV0dXJuIEZBTFNFOw0KPiA+ICsgIH0NCj4gPiAr DQo+ID4gKyAgU3RhdHVzID0gR2VuZXJhdGVSYW5kb21OdW1iZXJWaWFOaXN0ODAwQWxnb3JpdGht ICgoVUlOVDggKilSYW5kLCA0KTsNCj4gPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ ID4gKyAgICByZXR1cm4gRkFMU0U7DQo+ID4gKyAgfQ0KPiA+ICsgIHJldHVybiBUUlVFOw0KPiA+ ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBHZW5lcmF0ZXMgYSA2NC1iaXQgcmFuZG9tIG51 bWJlci4NCj4gPiArDQo+ID4gKyAgaWYgUmFuZCBpcyBOVUxMLCByZXR1cm4gRkFMU0UuDQo+ID4g Kw0KPiA+ICsgIEBwYXJhbVtvdXRdIFJhbmQgICAgIEJ1ZmZlciBwb2ludGVyIHRvIHN0b3JlIHRo ZSA2NC1iaXQgcmFuZG9tIHZhbHVlLg0KPiA+ICsNCj4gPiArICBAcmV0dmFsIFRSVUUgICAgICAg ICBSYW5kb20gbnVtYmVyIGdlbmVyYXRlZCBzdWNjZXNzZnVsbHkuDQo+ID4gKyAgQHJldHZhbCBG QUxTRSAgICAgICAgRmFpbGVkIHRvIGdlbmVyYXRlIHRoZSByYW5kb20gbnVtYmVyLg0KPiA+ICsN Cj4gPiArKiovDQo+ID4gK0JPT0xFQU4NCj4gPiArRUZJQVBJDQo+ID4gK0dldFJhbmRvbU51bWJl cjY0ICgNCj4gPiArICBPVVQgICAgIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgKlJhbmQNCj4g PiArICApDQo+ID4gK3sNCj4gPiArICBFRklfU1RBVFVTIFN0YXR1czsNCj4gPiArDQo+ID4gKyAg aWYgKFJhbmQgPT0gTlVMTCkgew0KPiA+ICsgICAgcmV0dXJuIEZBTFNFOw0KPiA+ICsgIH0NCj4g PiArDQo+ID4gKyAgU3RhdHVzID0gR2VuZXJhdGVSYW5kb21OdW1iZXJWaWFOaXN0ODAwQWxnb3Jp dGhtICgoVUlOVDggKilSYW5kLCA4KTsNCj4gPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7 DQo+ID4gKyAgICByZXR1cm4gRkFMU0U7DQo+ID4gKyAgfQ0KPiA+ICsgIHJldHVybiBUUlVFOw0K PiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBHZW5lcmF0ZXMgYSAxMjgtYml0IHJhbmRv bSBudW1iZXIuDQo+ID4gKw0KPiA+ICsgIGlmIFJhbmQgaXMgTlVMTCwgcmV0dXJuIEZBTFNFLg0K PiA+ICsNCj4gPiArICBAcGFyYW1bb3V0XSBSYW5kICAgICBCdWZmZXIgcG9pbnRlciB0byBzdG9y ZSB0aGUgMTI4LWJpdCByYW5kb20gdmFsdWUuDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgVFJVRSAg ICAgICAgIFJhbmRvbSBudW1iZXIgZ2VuZXJhdGVkIHN1Y2Nlc3NmdWxseS4NCj4gPiArICBAcmV0 dmFsIEZBTFNFICAgICAgICBGYWlsZWQgdG8gZ2VuZXJhdGUgdGhlIHJhbmRvbSBudW1iZXIuDQo+ ID4gKw0KPiA+ICsqKi8NCj4gPiArQk9PTEVBTg0KPiA+ICtFRklBUEkNCj4gPiArR2V0UmFuZG9t TnVtYmVyMTI4ICgNCj4gPiArICBPVVQgICAgIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgKlJh bmQNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBFRklfU1RBVFVTIFN0YXR1czsNCj4gPiArDQo+ ID4gKyAgaWYgKFJhbmQgPT0gTlVMTCkgew0KPiA+ICsgICAgcmV0dXJuIEZBTFNFOw0KPiA+ICsg IH0NCj4gPiArDQo+ID4gKyAgU3RhdHVzID0gR2VuZXJhdGVSYW5kb21OdW1iZXJWaWFOaXN0ODAw QWxnb3JpdGhtICgoVUlOVDggKilSYW5kLCAxNik7DQo+ID4gKyAgaWYgKEVGSV9FUlJPUiAoU3Rh dHVzKSkgew0KPiA+ICsgICAgcmV0dXJuIEZBTFNFOw0KPiA+ICsgIH0NCj4gPiArICByZXR1cm4g VFJVRTsNCj4gPiArfQ0KPiA+IGRpZmYgLS1naXQNCj4gYS9TZWN1cml0eVBrZy9SYW5kb21OdW1i ZXJHZW5lcmF0b3IvRHhlUm5nTGliUm5nUHJvdG9jb2wvRHhlUm5nTGliUm4NCj4gZ1Byb3RvY29s LmluZg0KPiBiL1NlY3VyaXR5UGtnL1JhbmRvbU51bWJlckdlbmVyYXRvci9EeGVSbmdMaWJSbmdQ cm90b2NvbC9EeGVSbmdMaWJSbg0KPiBnUHJvdG9jb2wuaW5mDQo+ID4gbmV3IGZpbGUgbW9kZSAx MDA2NDQNCj4gPiBpbmRleCAwMDAwMDAwMDAwLi5kNDdmZTNiZTUzDQo+ID4gLS0tIC9kZXYvbnVs bA0KPiA+ICsrKw0KPiBiL1NlY3VyaXR5UGtnL1JhbmRvbU51bWJlckdlbmVyYXRvci9EeGVSbmdM aWJSbmdQcm90b2NvbC9EeGVSbmdMaWJSbg0KPiBnUHJvdG9jb2wuaW5mDQo+ID4gQEAgLTAsMCAr MSw0MiBAQA0KPiA+ICsjIEBmaWxlDQo+ID4gKyMgUHJvdmlkZXMgaW1wbGVtZW50YXRpb24gb2Yg dGhlIGxpYnJhcnkgY2xhc3MgUm5nTGliIHRoYXQgdXNlcyB0aGUNCj4gUm5nUHJvdG9jb2wNCj4g PiArIw0KPiA+ICsjIEBjb3B5cmlnaHQNCj4gPiArIyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBD b3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCj4gPiArIyBTUERYLUxpY2Vuc2UtSWRl bnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiA+ICsjDQo+ID4gKyMjDQo+ID4gKw0KPiA+ ICtbRGVmaW5lc10NCj4gPiArICBJTkZfVkVSU0lPTiAgICAgPSAweDAwMDEwMDI5DQo+ID4gKyAg QkFTRV9OQU1FICAgICAgID0gRHhlUm5nTGliUm5nUHJvdG9jb2wNCj4gPiArICBNT0RVTEVfVU5J X0ZJTEUgPSBEeGVSbmdMaWJSbmdQcm90b2NvbC51bmkNCj4gPiArICBGSUxFX0dVSUQgICAgICAg PSBGRjlGODRDNS1BMzNFLTQ0RTMtOUJCNS0wRDY1NEIyRDQxNDkNCj4gPiArICBNT0RVTEVfVFlQ RSAgICAgPSBEWEVfRFJJVkVSDQo+ID4gKyAgVkVSU0lPTl9TVFJJTkcgID0gMS4wDQo+ID4gKyAg TElCUkFSWV9DTEFTUyAgID0gUm5nTGlifERYRV9EUklWRVIgRFhFX1JVTlRJTUVfRFJJVkVSDQo+ IERYRV9TTU1fRFJJVkVSIFVFRklfQVBQTElDQVRJT04gVUVGSV9EUklWRVINCj4gPiArDQo+ID4g KyMNCj4gPiArIyAgVkFMSURfQVJDSElURUNUVVJFUyAgICAgICAgICAgPSBJQTMyIFg2NCBFQkMg QVJNIEFBUkNINjQNCj4gPiArIw0KPiA+ICsNCj4gPiArW1BhY2thZ2VzXQ0KPiA+ICsgIE1kZVBr Zy9NZGVQa2cuZGVjDQo+ID4gKw0KPiA+ICtbU291cmNlc10NCj4gPiArICBEeGVSbmdMaWJSbmdQ cm90b2NvbC5jDQo+ID4gKw0KPiA+ICtbTGlicmFyeUNsYXNzZXNdDQo+ID4gKyAgRGVidWdMaWIN Cj4gPiArICBVZWZpQm9vdFNlcnZpY2VzVGFibGVMaWINCj4gPiArDQo+ID4gK1tQcm90b2NvbHNd DQo+ID4gKyAgZ0VmaVJuZ1Byb3RvY29sR3VpZCAgICAgICAgICAgICAgICAgIyMgQ09OU1VNRVMN Cj4gPiArDQo+ID4gK1tEZXBleF0NCj4gPiArICBnRWZpUm5nUHJvdG9jb2xHdWlkDQo+ID4gKw0K PiA+ICtbR3VpZHNdDQo+ID4gKyAgZ0VmaVJuZ0FsZ29yaXRobVNwODAwOTBDdHIyNTZHdWlkICAg ICAgICAgICAgIyMgQ09OU1VNRVMNCj4gPiArICBnRWZpUm5nQWxnb3JpdGhtU3A4MDA5MEhhc2gy NTZHdWlkICAgICAgICAgICAjIyBDT05TVU1FUw0KPiA+ICsgIGdFZmlSbmdBbGdvcml0aG1TcDgw MDkwSG1hYzI1Nkd1aWQgICAgICAgICAgICMjIENPTlNVTUVTDQo+ID4gZGlmZiAtLWdpdA0KPiBh L1NlY3VyaXR5UGtnL1JhbmRvbU51bWJlckdlbmVyYXRvci9EeGVSbmdMaWJSbmdQcm90b2NvbC9E eGVSbmdMaWJSbg0KPiBnUHJvdG9jb2wudW5pDQo+IGIvU2VjdXJpdHlQa2cvUmFuZG9tTnVtYmVy R2VuZXJhdG9yL0R4ZVJuZ0xpYlJuZ1Byb3RvY29sL0R4ZVJuZ0xpYlJuDQo+IGdQcm90b2NvbC51 bmkNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAwMDAuLjA5YWYw NTZiZDMNCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrDQo+IGIvU2VjdXJpdHlQa2cvUmFuZG9t TnVtYmVyR2VuZXJhdG9yL0R4ZVJuZ0xpYlJuZ1Byb3RvY29sL0R4ZVJuZ0xpYlJuDQo+IGdQcm90 b2NvbC51bmkNCj4gPiBAQCAtMCwwICsxLDE0IEBADQo+ID4gKy8vIC8qKiBAZmlsZQ0KPiA+ICsv LyBJbnN0YW5jZSBvZiBSTkcgKFJhbmRvbSBOdW1iZXIgR2VuZXJhdG9yKSBMaWJyYXJ5IEJhc2Vk IG9uDQo+IEVGSV9STkdfUFJPVE9DT0wuDQo+ID4gKy8vDQo+ID4gKy8vIENvcHlyaWdodCAoYykg MjAxOSwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiA+ICsv Lw0KPiA+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0K PiA+ICsvLw0KPiA+ICsvLyAqKi8NCj4gPiArDQo+ID4gKw0KPiA+ICsjc3RyaW5nIFNUUl9NT0RV TEVfQUJTVFJBQ1QgICAgICAgICAgICAgI2xhbmd1YWdlIGVuLVVTICJJbnN0YW5jZSBvZiBSTkcN Cj4gTGlicmFyeSBCYXNlZCBvbiBFRklfUk5HX1BST1RPQ09MLiINCj4gPiArDQo+ID4gKyNzdHJp bmcgU1RSX01PRFVMRV9ERVNDUklQVElPTiAgICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgIlRoaXMg dmVyc2lvbiBvZg0KPiBSTkcgbGlicmFyeSBtYWtlcyB1c2Ugb2YgRUZJX1JOR19QUk9UT0NPTCB0 byBnZW5lcmF0ZSByYW5kb20gbnVtYmVyDQo+IGNvbXBsaWFudCB3aXRoIE5JU1QgODAwLTlBLiIN Cj4gPiArDQo+ID4NCg0K