From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by dpdk.org (Postfix) with ESMTP id A5F9C2BF4 for ; Wed, 3 Oct 2018 02:43:18 +0200 (CEST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by orsmga106.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 02 Oct 2018 17:43:17 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.54,334,1534834800"; d="scan'208";a="91641625" Received: from fmsmsx108.amr.corp.intel.com ([10.18.124.206]) by fmsmga002.fm.intel.com with ESMTP; 02 Oct 2018 17:43:11 -0700 Received: from fmsmsx151.amr.corp.intel.com ([169.254.7.87]) by FMSMSX108.amr.corp.intel.com ([169.254.9.237]) with mapi id 14.03.0319.002; Tue, 2 Oct 2018 17:43:11 -0700 From: "Wang, Yipeng1" To: Dharmik Thakkar CC: "Richardson, Bruce" , "Ananyev, Konstantin" , "dev@dpdk.org" , "Honnappa Nagarahalli" , "Gobriel, Sameh" Thread-Topic: [dpdk-dev] [PATCH v5 4/4] hash: use partial-key hashing Thread-Index: AQHUWfD3C+MXEk3DsUynI5fWXEDw0KUMb+MAgAA/kuA= Date: Wed, 3 Oct 2018 00:43:10 +0000 Message-ID: References: <1537993618-92630-1-git-send-email-yipeng1.wang@intel.com> <1538418902-154892-1-git-send-email-yipeng1.wang@intel.com> <1538418902-154892-5-git-send-email-yipeng1.wang@intel.com> <78E29C5B-78E9-4CB5-8B4C-15C603AA0C1C@arm.com> In-Reply-To: <78E29C5B-78E9-4CB5-8B4C-15C603AA0C1C@arm.com> Accept-Language: en-US Content-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-ctpclassification: CTP_NT x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiNjZmODI3NmUtYTgzNS00MTcyLWIyYjItNDg4YTNiNWRiNmIzIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoidm5cL3F4UnAxaEZheHhcL3BWZW1ZZGxpSGZZWWh6NytyREhrS2lvTE44U0ZvZENNSFAwdmV0NXA0VDhjV0FtbTRqIn0= x-originating-ip: [10.1.200.107] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 Subject: Re: [dpdk-dev] [PATCH v5 4/4] hash: use partial-key hashing X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 03 Oct 2018 00:43:19 -0000 SSBhbSBzb3JyeSB0aGF0IEkgZGlkIG5vdCBjbGVhcmx5IHNheSBpbiB0aGUgY292ZXIgbGV0dGVy IHRoYXQgdGhpcyBwYXRjaCBzZXQgaXMNCmRlcGVuZGluZyBvbiBhbm90aGVyIGJ1Zy1maXggcGF0 Y2ggc2V0IChodHRwOi8vcGF0Y2h3b3JrLmRwZGsub3JnL2NvdmVyLzQ1NjExLykNCndlIHN1Ym1p dHRlZC4gSSB3aWxsIHVwZGF0ZSB0aGUgY292ZXIgbGV0dGVyIGluIG5leHQgdmVyc2lvbi4NCg0K VGhleSB3ZXJlIGluIHRoZSBzYW1lIHBhdGNoIHNldCBhbmQgSSBzZXBhcmF0ZWQgdGhlbSBiZWNh dXNlIG9uZSBpcyBkZWRpY2F0ZWQgdG8gYnVnIGZpeGluZy4NCg0KUGxlYXNlIGNoZWNrIGlmIHRo aXMgaXMgdGhlIHJlYXNvbiB0aGF0IHlvdSBjYW5ub3QgYXBwbHkuDQoNClRoYW5rcw0KWWlwZW5n DQoNCj4tLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPkZyb206IERoYXJtaWsgVGhha2thciBb bWFpbHRvOkRoYXJtaWsuVGhha2thckBhcm0uY29tXQ0KPlNlbnQ6IFR1ZXNkYXksIE9jdG9iZXIg MiwgMjAxOCAxOjUzIFBNDQo+VG86IFdhbmcsIFlpcGVuZzEgPHlpcGVuZzEud2FuZ0BpbnRlbC5j b20+DQo+Q2M6IFJpY2hhcmRzb24sIEJydWNlIDxicnVjZS5yaWNoYXJkc29uQGludGVsLmNvbT47 IEFuYW55ZXYsIEtvbnN0YW50aW4gPGtvbnN0YW50aW4uYW5hbnlldkBpbnRlbC5jb20+OyBkZXZA ZHBkay5vcmc7DQo+SG9ubmFwcGEgTmFnYXJhaGFsbGkgPEhvbm5hcHBhLk5hZ2FyYWhhbGxpQGFy bS5jb20+OyBHb2JyaWVsLCBTYW1laCA8c2FtZWguZ29icmllbEBpbnRlbC5jb20+DQo+U3ViamVj dDogUmU6IFtkcGRrLWRldl0gW1BBVENIIHY1IDQvNF0gaGFzaDogdXNlIHBhcnRpYWwta2V5IGhh c2hpbmcNCj4NCj5JIGFtIGF0dGVtcHRpbmcgdG8gdGVzdCB0aGUgcGF0Y2ggb24gYW4gQXJtIG1h Y2hpbmUsIGJ1dCBpdCBmYWlsZWQgdG8gYXBwbHkuDQo+DQo+SeKAmW0gZ2V0dGluZyB0aGUgZm9s bG93aW5nIGVycm9yOg0KPg0KPmVycm9yOiBwYXRjaCBmYWlsZWQ6IHRlc3QvdGVzdC90ZXN0X2hh c2hfcGVyZi5jOjE4DQo+ZXJyb3I6IHRlc3QvdGVzdC90ZXN0X2hhc2hfcGVyZi5jOiBwYXRjaCBk b2VzIG5vdCBhcHBseQ0KPlBhdGNoIGZhaWxlZCBhdCAwMDAzIHRlc3QvaGFzaDogaW1wbGVtZW50 IGV4dGVuZGFibGUgYnVja2V0IGhhc2ggdGVzdA0KPg0KPj4gT24gT2N0IDEsIDIwMTgsIGF0IDE6 MzUgUE0sIFlpcGVuZyBXYW5nIDx5aXBlbmcxLndhbmdAaW50ZWwuY29tPiB3cm90ZToNCj4+DQo+ PiBUaGlzIGNvbW1pdCBjaGFuZ2VzIHRoZSBoYXNoaW5nIG1lY2hhbmlzbSB0byAicGFydGlhbC1r ZXkNCj4+IGhhc2hpbmciIHRvIGNhbGN1bGF0ZSBidWNrZXQgaW5kZXggYW5kIHNpZ25hdHVyZSBv ZiBrZXkuDQo+Pg0KPj4gVGhpcyBpcyAgcHJvcG9zZWQgaW4gQmluIEZhbiwgZXQgYWwncyBwYXBl cg0KPj4gIk1lbUMzOiBDb21wYWN0IGFuZCBDb25jdXJyZW50IE1lbUNhY2hlIHdpdGggRHVtYmVy IENhY2hpbmcNCj4+IGFuZCBTbWFydGVyIEhhc2hpbmciLiBCYXNjaWFsbHkgdGhlIGlkZWEgaXMg dG8gdXNlICJ4b3IiIHRvDQo+PiBkZXJpdmUgYWx0ZXJuYXRpdmUgYnVja2V0IGZyb20gY3VycmVu dCBidWNrZXQgaW5kZXggYW5kDQo+PiBzaWduYXR1cmUuDQo+Pg0KPj4gV2l0aCAicGFydGlhbC1r ZXkgaGFzaGluZyIsIGl0IHJlZHVjZXMgdGhlIGJ1Y2tldCBtZW1vcnkNCj4+IHJlcXVpcmVtZW50 IGZyb20gdHdvIGNhY2hlIGxpbmVzIHRvIG9uZSBjYWNoZSBsaW5lLCB3aGljaA0KPj4gaW1wcm92 ZXMgdGhlIG1lbW9yeSBlZmZpY2llbmN5IGFuZCB0aHVzIHRoZSBsb29rdXAgc3BlZWQuDQo+Pg0K Pj4gU2lnbmVkLW9mZi1ieTogWWlwZW5nIFdhbmcgPHlpcGVuZzEud2FuZ0BpbnRlbC5jb20+DQo+ PiBSZXZpZXdlZC1ieTogSG9ubmFwcGEgTmFnYXJhaGFsbGkgPGhvbm5hcHBhLm5hZ2FyYWhhbGxp QGFybS5jb20+DQo+PiAtLS0NCj4+IGxpYi9saWJydGVfaGFzaC9ydGVfY3Vja29vX2hhc2guYyB8 IDI0NiArKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPj4gbGliL2xpYnJ0 ZV9oYXNoL3J0ZV9jdWNrb29faGFzaC5oIHwgICA2ICstDQo+PiBsaWIvbGlicnRlX2hhc2gvcnRl X2hhc2guaCAgICAgICAgfCAgIDUgKy0NCj4+IDMgZmlsZXMgY2hhbmdlZCwgMTMxIGluc2VydGlv bnMoKyksIDEyNiBkZWxldGlvbnMoLSkNCj4+DQo+PiBkaWZmIC0tZ2l0IGEvbGliL2xpYnJ0ZV9o YXNoL3J0ZV9jdWNrb29faGFzaC5jIGIvbGliL2xpYnJ0ZV9oYXNoL3J0ZV9jdWNrb29faGFzaC5j DQo+PiBpbmRleCAxMzNlMTgxLi4zYzdjOWM1IDEwMDY0NA0KPj4gLS0tIGEvbGliL2xpYnJ0ZV9o YXNoL3J0ZV9jdWNrb29faGFzaC5jDQo+PiArKysgYi9saWIvbGlicnRlX2hhc2gvcnRlX2N1Y2tv b19oYXNoLmMNCj4+IEBAIC05MCw2ICs5MCwzNiBAQCBydGVfaGFzaF9jbXBfZXEoY29uc3Qgdm9p ZCAqa2V5MSwgY29uc3Qgdm9pZCAqa2V5MiwgY29uc3Qgc3RydWN0IHJ0ZV9oYXNoICpoKQ0KPj4g cmV0dXJuIGNtcF9qdW1wX3RhYmxlW2gtPmNtcF9qdW1wX3RhYmxlX2lkeF0oa2V5MSwga2V5Miwg aC0+a2V5X2xlbik7DQo+PiB9DQo+Pg0KPj4gKy8qDQo+PiArICogV2UgdXNlIGhpZ2hlciAxNiBi aXRzIG9mIGhhc2ggYXMgdGhlIHNpZ25hdHVyZSB2YWx1ZSBzdG9yZWQgaW4gdGFibGUuDQo+PiAr ICogV2UgdXNlIHRoZSBsb3dlciBiaXRzIGZvciB0aGUgcHJpbWFyeSBidWNrZXQNCj4+ICsgKiBs b2NhdGlvbi4gVGhlbiB3ZSBYT1IgcHJpbWFyeSBidWNrZXQgbG9jYXRpb24gYW5kIHRoZSBzaWdu YXR1cmUNCj4+ICsgKiB0byBnZXQgdGhlIHNlY29uZGFyeSBidWNrZXQgbG9jYXRpb24uIFRoaXMg aXMgc2FtZSBhcw0KPj4gKyAqIHByb3Bvc2VkIGluIEJpbiBGYW4sIGV0IGFsJ3MgcGFwZXINCj4+ ICsgKiAiTWVtQzM6IENvbXBhY3QgYW5kIENvbmN1cnJlbnQgTWVtQ2FjaGUgd2l0aCBEdW1iZXIg Q2FjaGluZyBhbmQNCj4+ICsgKiBTbWFydGVyIEhhc2hpbmciLiBUaGUgYmVuZWZpdCB0byB1c2UN Cj4+ICsgKiBYT1IgaXMgdGhhdCBvbmUgY291bGQgZGVyaXZlIHRoZSBhbHRlcm5hdGl2ZSBidWNr ZXQgbG9jYXRpb24NCj4+ICsgKiBieSBvbmx5IHVzaW5nIHRoZSBjdXJyZW50IGJ1Y2tldCBsb2Nh dGlvbiBhbmQgdGhlIHNpZ25hdHVyZS4NCj4+ICsgKi8NCj4+ICtzdGF0aWMgaW5saW5lIHVpbnQx Nl90DQo+PiArZ2V0X3Nob3J0X3NpZyhjb25zdCBoYXNoX3NpZ190IGhhc2gpDQo+PiArew0KPj4g K3JldHVybiBoYXNoID4+IDE2Ow0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgaW5saW5lIHVpbnQz Ml90DQo+PiArZ2V0X3ByaW1fYnVja2V0X2luZGV4KGNvbnN0IHN0cnVjdCBydGVfaGFzaCAqaCwg Y29uc3QgaGFzaF9zaWdfdCBoYXNoKQ0KPj4gK3sNCj4+ICtyZXR1cm4gaGFzaCAmIGgtPmJ1Y2tl dF9iaXRtYXNrOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgaW5saW5lIHVpbnQzMl90DQo+PiAr Z2V0X2FsdF9idWNrZXRfaW5kZXgoY29uc3Qgc3RydWN0IHJ0ZV9oYXNoICpoLA0KPj4gK3VpbnQz Ml90IGN1cl9ia3RfaWR4LCB1aW50MTZfdCBzaWcpDQo+PiArew0KPj4gK3JldHVybiAoY3VyX2Jr dF9pZHggXiBzaWcpICYgaC0+YnVja2V0X2JpdG1hc2s7DQo+PiArfQ0KPj4gKw0KPj4gc3RydWN0 IHJ0ZV9oYXNoICoNCj4+IHJ0ZV9oYXNoX2NyZWF0ZShjb25zdCBzdHJ1Y3QgcnRlX2hhc2hfcGFy YW1ldGVycyAqcGFyYW1zKQ0KPj4gew0KPj4gQEAgLTMyNyw5ICszNTcsNyBAQCBydGVfaGFzaF9j cmVhdGUoY29uc3Qgc3RydWN0IHJ0ZV9oYXNoX3BhcmFtZXRlcnMgKnBhcmFtcykNCj4+IGgtPmV4 dF90YWJsZV9zdXBwb3J0ID0gZXh0X3RhYmxlX3N1cHBvcnQ7DQo+Pg0KPj4gI2lmIGRlZmluZWQo UlRFX0FSQ0hfWDg2KQ0KPj4gLWlmIChydGVfY3B1X2dldF9mbGFnX2VuYWJsZWQoUlRFX0NQVUZM QUdfQVZYMikpDQo+PiAtaC0+c2lnX2NtcF9mbiA9IFJURV9IQVNIX0NPTVBBUkVfQVZYMjsNCj4+ IC1lbHNlIGlmIChydGVfY3B1X2dldF9mbGFnX2VuYWJsZWQoUlRFX0NQVUZMQUdfU1NFMikpDQo+ PiAraWYgKHJ0ZV9jcHVfZ2V0X2ZsYWdfZW5hYmxlZChSVEVfQ1BVRkxBR19TU0UyKSkNCj4+IGgt PnNpZ19jbXBfZm4gPSBSVEVfSEFTSF9DT01QQVJFX1NTRTsNCj4+IGVsc2UNCj4+ICNlbmRpZg0K Pj4gQEAgLTQxNywxOCArNDQ1LDYgQEAgcnRlX2hhc2hfaGFzaChjb25zdCBzdHJ1Y3QgcnRlX2hh c2ggKmgsIGNvbnN0IHZvaWQgKmtleSkNCj4+IHJldHVybiBoLT5oYXNoX2Z1bmMoa2V5LCBoLT5r ZXlfbGVuLCBoLT5oYXNoX2Z1bmNfaW5pdF92YWwpOw0KPj4gfQ0KPj4NCj4+IC0vKiBDYWxjIHRo ZSBzZWNvbmRhcnkgaGFzaCB2YWx1ZSBmcm9tIHRoZSBwcmltYXJ5IGhhc2ggdmFsdWUgb2YgYSBn aXZlbiBrZXkgKi8NCj4+IC1zdGF0aWMgaW5saW5lIGhhc2hfc2lnX3QNCj4+IC1ydGVfaGFzaF9z ZWNvbmRhcnlfaGFzaChjb25zdCBoYXNoX3NpZ190IHByaW1hcnlfaGFzaCkNCj4+IC17DQo+PiAt c3RhdGljIGNvbnN0IHVuc2lnbmVkIGFsbF9iaXRzX3NoaWZ0ID0gMTI7DQo+PiAtc3RhdGljIGNv bnN0IHVuc2lnbmVkIGFsdF9iaXRzX3hvciA9IDB4NWJkMWU5OTU7DQo+PiAtDQo+PiAtdWludDMy X3QgdGFnID0gcHJpbWFyeV9oYXNoID4+IGFsbF9iaXRzX3NoaWZ0Ow0KPj4gLQ0KPj4gLXJldHVy biBwcmltYXJ5X2hhc2ggXiAoKHRhZyArIDEpICogYWx0X2JpdHNfeG9yKTsNCj4+IC19DQo+PiAt DQo+PiBpbnQzMl90DQo+PiBydGVfaGFzaF9jb3VudChjb25zdCBzdHJ1Y3QgcnRlX2hhc2ggKmgp DQo+PiB7DQo+PiBAQCAtNTYwLDE0ICs1NzYsMTMgQEAgZW5xdWV1ZV9zbG90X2JhY2soY29uc3Qg c3RydWN0IHJ0ZV9oYXNoICpoLA0KPj4gLyogU2VhcmNoIGEga2V5IGZyb20gYnVja2V0IGFuZCB1 cGRhdGUgaXRzIGRhdGEgKi8NCj4+IHN0YXRpYyBpbmxpbmUgaW50MzJfdA0KPj4gc2VhcmNoX2Fu ZF91cGRhdGUoY29uc3Qgc3RydWN0IHJ0ZV9oYXNoICpoLCB2b2lkICpkYXRhLCBjb25zdCB2b2lk ICprZXksDQo+PiAtc3RydWN0IHJ0ZV9oYXNoX2J1Y2tldCAqYmt0LCBoYXNoX3NpZ190IHNpZywg aGFzaF9zaWdfdCBhbHRfaGFzaCkNCj4+ICtzdHJ1Y3QgcnRlX2hhc2hfYnVja2V0ICpia3QsIHVp bnQxNl90IHNpZykNCj4+IHsNCj4+IGludCBpOw0KPj4gc3RydWN0IHJ0ZV9oYXNoX2tleSAqaywg KmtleXMgPSBoLT5rZXlfc3RvcmU7DQo+Pg0KPj4gZm9yIChpID0gMDsgaSA8IFJURV9IQVNIX0JV Q0tFVF9FTlRSSUVTOyBpKyspIHsNCj4+IC1pZiAoYmt0LT5zaWdfY3VycmVudFtpXSA9PSBzaWcg JiYNCj4+IC1ia3QtPnNpZ19hbHRbaV0gPT0gYWx0X2hhc2gpIHsNCj4+ICtpZiAoYmt0LT5zaWdf Y3VycmVudFtpXSA9PSBzaWcpIHsNCj4+IGsgPSAoc3RydWN0IHJ0ZV9oYXNoX2tleSAqKSAoKGNo YXIgKilrZXlzICsNCj4+IGJrdC0+a2V5X2lkeFtpXSAqIGgtPmtleV9lbnRyeV9zaXplKTsNCj4+ IGlmIChydGVfaGFzaF9jbXBfZXEoa2V5LCBrLT5rZXksIGgpID09IDApIHsNCj4+IEBAIC01OTQs NyArNjA5LDcgQEAgcnRlX2hhc2hfY3Vja29vX2luc2VydF9tdyhjb25zdCBzdHJ1Y3QgcnRlX2hh c2ggKmgsDQo+PiBzdHJ1Y3QgcnRlX2hhc2hfYnVja2V0ICpwcmltX2JrdCwNCj4+IHN0cnVjdCBy dGVfaGFzaF9idWNrZXQgKnNlY19ia3QsDQo+PiBjb25zdCBzdHJ1Y3QgcnRlX2hhc2hfa2V5ICpr ZXksIHZvaWQgKmRhdGEsDQo+PiAtaGFzaF9zaWdfdCBzaWcsIGhhc2hfc2lnX3QgYWx0X2hhc2gs IHVpbnQzMl90IG5ld19pZHgsDQo+PiArdWludDE2X3Qgc2lnLCB1aW50MzJfdCBuZXdfaWR4LA0K Pj4gaW50MzJfdCAqcmV0X3ZhbCkNCj4+IHsNCj4+IHVuc2lnbmVkIGludCBpOw0KPj4gQEAgLTYw NSw3ICs2MjAsNyBAQCBydGVfaGFzaF9jdWNrb29faW5zZXJ0X213KGNvbnN0IHN0cnVjdCBydGVf aGFzaCAqaCwNCj4+IC8qIENoZWNrIGlmIGtleSB3YXMgaW5zZXJ0ZWQgYWZ0ZXIgbGFzdCBjaGVj ayBidXQgYmVmb3JlIHRoaXMNCj4+ICAqIHByb3RlY3RlZCByZWdpb24gaW4gY2FzZSBvZiBpbnNl cnRpbmcgZHVwbGljYXRlZCBrZXlzLg0KPj4gICovDQo+PiAtcmV0ID0gc2VhcmNoX2FuZF91cGRh dGUoaCwgZGF0YSwga2V5LCBwcmltX2JrdCwgc2lnLCBhbHRfaGFzaCk7DQo+PiArcmV0ID0gc2Vh cmNoX2FuZF91cGRhdGUoaCwgZGF0YSwga2V5LCBwcmltX2JrdCwgc2lnKTsNCj4+IGlmIChyZXQg IT0gLTEpIHsNCj4+IF9faGFzaF9yd193cml0ZXJfdW5sb2NrKGgpOw0KPj4gKnJldF92YWwgPSBy ZXQ7DQo+PiBAQCAtNjEzLDcgKzYyOCw3IEBAIHJ0ZV9oYXNoX2N1Y2tvb19pbnNlcnRfbXcoY29u c3Qgc3RydWN0IHJ0ZV9oYXNoICpoLA0KPj4gfQ0KPj4NCj4+IEZPUl9FQUNIX0JVQ0tFVChjdXJf Ymt0LCBzZWNfYmt0KSB7DQo+PiAtcmV0ID0gc2VhcmNoX2FuZF91cGRhdGUoaCwgZGF0YSwga2V5 LCBjdXJfYmt0LCBhbHRfaGFzaCwgc2lnKTsNCj4+ICtyZXQgPSBzZWFyY2hfYW5kX3VwZGF0ZSho LCBkYXRhLCBrZXksIGN1cl9ia3QsIHNpZyk7DQo+PiBpZiAocmV0ICE9IC0xKSB7DQo+PiBfX2hh c2hfcndfd3JpdGVyX3VubG9jayhoKTsNCj4+ICpyZXRfdmFsID0gcmV0Ow0KPj4gQEAgLTYyOCw3 ICs2NDMsNiBAQCBydGVfaGFzaF9jdWNrb29faW5zZXJ0X213KGNvbnN0IHN0cnVjdCBydGVfaGFz aCAqaCwNCj4+IC8qIENoZWNrIGlmIHNsb3QgaXMgYXZhaWxhYmxlICovDQo+PiBpZiAobGlrZWx5 KHByaW1fYmt0LT5rZXlfaWR4W2ldID09IEVNUFRZX1NMT1QpKSB7DQo+PiBwcmltX2JrdC0+c2ln X2N1cnJlbnRbaV0gPSBzaWc7DQo+PiAtcHJpbV9ia3QtPnNpZ19hbHRbaV0gPSBhbHRfaGFzaDsN Cj4+IHByaW1fYmt0LT5rZXlfaWR4W2ldID0gbmV3X2lkeDsNCj4+IGJyZWFrOw0KPj4gfQ0KPj4g QEAgLTY1Myw3ICs2NjcsNyBAQCBydGVfaGFzaF9jdWNrb29fbW92ZV9pbnNlcnRfbXcoY29uc3Qg c3RydWN0IHJ0ZV9oYXNoICpoLA0KPj4gc3RydWN0IHJ0ZV9oYXNoX2J1Y2tldCAqYWx0X2JrdCwN Cj4+IGNvbnN0IHN0cnVjdCBydGVfaGFzaF9rZXkgKmtleSwgdm9pZCAqZGF0YSwNCj4+IHN0cnVj dCBxdWV1ZV9ub2RlICpsZWFmLCB1aW50MzJfdCBsZWFmX3Nsb3QsDQo+PiAtaGFzaF9zaWdfdCBz aWcsIGhhc2hfc2lnX3QgYWx0X2hhc2gsIHVpbnQzMl90IG5ld19pZHgsDQo+PiArdWludDE2X3Qg c2lnLCB1aW50MzJfdCBuZXdfaWR4LA0KPj4gaW50MzJfdCAqcmV0X3ZhbCkNCj4+IHsNCj4+IHVp bnQzMl90IHByZXZfYWx0X2JrdF9pZHg7DQo+PiBAQCAtNjc0LDcgKzY4OCw3IEBAIHJ0ZV9oYXNo X2N1Y2tvb19tb3ZlX2luc2VydF9tdyhjb25zdCBzdHJ1Y3QgcnRlX2hhc2ggKmgsDQo+PiAvKiBD aGVjayBpZiBrZXkgd2FzIGluc2VydGVkIGFmdGVyIGxhc3QgY2hlY2sgYnV0IGJlZm9yZSB0aGlz DQo+PiAgKiBwcm90ZWN0ZWQgcmVnaW9uLg0KPj4gICovDQo+PiAtcmV0ID0gc2VhcmNoX2FuZF91 cGRhdGUoaCwgZGF0YSwga2V5LCBia3QsIHNpZywgYWx0X2hhc2gpOw0KPj4gK3JldCA9IHNlYXJj aF9hbmRfdXBkYXRlKGgsIGRhdGEsIGtleSwgYmt0LCBzaWcpOw0KPj4gaWYgKHJldCAhPSAtMSkg ew0KPj4gX19oYXNoX3J3X3dyaXRlcl91bmxvY2soaCk7DQo+PiAqcmV0X3ZhbCA9IHJldDsNCj4+ IEBAIC02ODIsNyArNjk2LDcgQEAgcnRlX2hhc2hfY3Vja29vX21vdmVfaW5zZXJ0X213KGNvbnN0 IHN0cnVjdCBydGVfaGFzaCAqaCwNCj4+IH0NCj4+DQo+PiBGT1JfRUFDSF9CVUNLRVQoY3VyX2Jr dCwgYWx0X2JrdCkgew0KPj4gLXJldCA9IHNlYXJjaF9hbmRfdXBkYXRlKGgsIGRhdGEsIGtleSwg Y3VyX2JrdCwgYWx0X2hhc2gsIHNpZyk7DQo+PiArcmV0ID0gc2VhcmNoX2FuZF91cGRhdGUoaCwg ZGF0YSwga2V5LCBjdXJfYmt0LCBzaWcpOw0KPj4gaWYgKHJldCAhPSAtMSkgew0KPj4gX19oYXNo X3J3X3dyaXRlcl91bmxvY2soaCk7DQo+PiAqcmV0X3ZhbCA9IHJldDsNCj4+IEBAIC02OTUsOCAr NzA5LDkgQEAgcnRlX2hhc2hfY3Vja29vX21vdmVfaW5zZXJ0X213KGNvbnN0IHN0cnVjdCBydGVf aGFzaCAqaCwNCj4+IHByZXZfYmt0ID0gcHJldl9ub2RlLT5ia3Q7DQo+PiBwcmV2X3Nsb3QgPSBj dXJyX25vZGUtPnByZXZfc2xvdDsNCj4+DQo+PiAtcHJldl9hbHRfYmt0X2lkeCA9DQo+PiAtcHJl dl9ia3QtPnNpZ19hbHRbcHJldl9zbG90XSAmIGgtPmJ1Y2tldF9iaXRtYXNrOw0KPj4gK3ByZXZf YWx0X2JrdF9pZHggPSBnZXRfYWx0X2J1Y2tldF9pbmRleChoLA0KPj4gK3ByZXZfbm9kZS0+Y3Vy X2JrdF9pZHgsDQo+PiArcHJldl9ia3QtPnNpZ19jdXJyZW50W3ByZXZfc2xvdF0pOw0KPj4NCj4+ IGlmICh1bmxpa2VseSgmaC0+YnVja2V0c1twcmV2X2FsdF9ia3RfaWR4XQ0KPj4gIT0gY3Vycl9i a3QpKSB7DQo+PiBAQCAtNzEwLDEwICs3MjUsOCBAQCBydGVfaGFzaF9jdWNrb29fbW92ZV9pbnNl cnRfbXcoY29uc3Qgc3RydWN0IHJ0ZV9oYXNoICpoLA0KPj4gICogQ3Vja29vIGluc2VydCB0byBt b3ZlIGVsZW1lbnRzIGJhY2sgdG8gaXRzDQo+PiAgKiBwcmltYXJ5IGJ1Y2tldCBpZiBhdmFpbGFi bGUNCj4+ICAqLw0KPj4gLWN1cnJfYmt0LT5zaWdfYWx0W2N1cnJfc2xvdF0gPQ0KPj4gLSBwcmV2 X2JrdC0+c2lnX2N1cnJlbnRbcHJldl9zbG90XTsNCj4+IGN1cnJfYmt0LT5zaWdfY3VycmVudFtj dXJyX3Nsb3RdID0NCj4+IC1wcmV2X2JrdC0+c2lnX2FsdFtwcmV2X3Nsb3RdOw0KPj4gK3ByZXZf Ymt0LT5zaWdfY3VycmVudFtwcmV2X3Nsb3RdOw0KPj4gY3Vycl9ia3QtPmtleV9pZHhbY3Vycl9z bG90XSA9DQo+PiBwcmV2X2JrdC0+a2V5X2lkeFtwcmV2X3Nsb3RdOw0KPj4NCj4+IEBAIC03MjMs NyArNzM2LDYgQEAgcnRlX2hhc2hfY3Vja29vX21vdmVfaW5zZXJ0X213KGNvbnN0IHN0cnVjdCBy dGVfaGFzaCAqaCwNCj4+IH0NCj4+DQo+PiBjdXJyX2JrdC0+c2lnX2N1cnJlbnRbY3Vycl9zbG90 XSA9IHNpZzsNCj4+IC1jdXJyX2JrdC0+c2lnX2FsdFtjdXJyX3Nsb3RdID0gYWx0X2hhc2g7DQo+ PiBjdXJyX2JrdC0+a2V5X2lkeFtjdXJyX3Nsb3RdID0gbmV3X2lkeDsNCj4+DQo+PiBfX2hhc2hf cndfd3JpdGVyX3VubG9jayhoKTsNCj4+IEBAIC03NDEsMzkgKzc1Myw0NCBAQCBydGVfaGFzaF9j dWNrb29fbWFrZV9zcGFjZV9tdyhjb25zdCBzdHJ1Y3QgcnRlX2hhc2ggKmgsDQo+PiBzdHJ1Y3Qg cnRlX2hhc2hfYnVja2V0ICpia3QsDQo+PiBzdHJ1Y3QgcnRlX2hhc2hfYnVja2V0ICpzZWNfYmt0 LA0KPj4gY29uc3Qgc3RydWN0IHJ0ZV9oYXNoX2tleSAqa2V5LCB2b2lkICpkYXRhLA0KPj4gLWhh c2hfc2lnX3Qgc2lnLCBoYXNoX3NpZ190IGFsdF9oYXNoLA0KPj4gK3VpbnQxNl90IHNpZywgdWlu dDMyX3QgYnVja2V0X2lkeCwNCj4+IHVpbnQzMl90IG5ld19pZHgsIGludDMyX3QgKnJldF92YWwp DQo+PiB7DQo+PiB1bnNpZ25lZCBpbnQgaTsNCj4+IHN0cnVjdCBxdWV1ZV9ub2RlIHF1ZXVlW1JU RV9IQVNIX0JGU19RVUVVRV9NQVhfTEVOXTsNCj4+IHN0cnVjdCBxdWV1ZV9ub2RlICp0YWlsLCAq aGVhZDsNCj4+IHN0cnVjdCBydGVfaGFzaF9idWNrZXQgKmN1cnJfYmt0LCAqYWx0X2JrdDsNCj4+ ICt1aW50MzJfdCBjdXJfaWR4LCBhbHRfaWR4Ow0KPj4NCj4+IHRhaWwgPSBxdWV1ZTsNCj4+IGhl YWQgPSBxdWV1ZSArIDE7DQo+PiB0YWlsLT5ia3QgPSBia3Q7DQo+PiB0YWlsLT5wcmV2ID0gTlVM TDsNCj4+IHRhaWwtPnByZXZfc2xvdCA9IC0xOw0KPj4gK3RhaWwtPmN1cl9ia3RfaWR4ID0gYnVj a2V0X2lkeDsNCj4+DQo+PiAvKiBDdWNrb28gYmZzIFNlYXJjaCAqLw0KPj4gd2hpbGUgKGxpa2Vs eSh0YWlsICE9IGhlYWQgJiYgaGVhZCA8DQo+PiBxdWV1ZSArIFJURV9IQVNIX0JGU19RVUVVRV9N QVhfTEVOIC0NCj4+IFJURV9IQVNIX0JVQ0tFVF9FTlRSSUVTKSkgew0KPj4gY3Vycl9ia3QgPSB0 YWlsLT5ia3Q7DQo+PiArY3VyX2lkeCA9IHRhaWwtPmN1cl9ia3RfaWR4Ow0KPj4gZm9yIChpID0g MDsgaSA8IFJURV9IQVNIX0JVQ0tFVF9FTlRSSUVTOyBpKyspIHsNCj4+IGlmIChjdXJyX2JrdC0+ a2V5X2lkeFtpXSA9PSBFTVBUWV9TTE9UKSB7DQo+PiBpbnQzMl90IHJldCA9IHJ0ZV9oYXNoX2N1 Y2tvb19tb3ZlX2luc2VydF9tdyhoLA0KPj4gYmt0LCBzZWNfYmt0LCBrZXksIGRhdGEsDQo+PiAt dGFpbCwgaSwgc2lnLCBhbHRfaGFzaCwNCj4+ICt0YWlsLCBpLCBzaWcsDQo+PiBuZXdfaWR4LCBy ZXRfdmFsKTsNCj4+IGlmIChsaWtlbHkocmV0ICE9IC0xKSkNCj4+IHJldHVybiByZXQ7DQo+PiB9 DQo+Pg0KPj4gLyogRW5xdWV1ZSBuZXcgbm9kZSBhbmQga2VlcCBwcmV2IG5vZGUgaW5mbyAqLw0K Pj4gLWFsdF9ia3QgPSAmKGgtPmJ1Y2tldHNbY3Vycl9ia3QtPnNpZ19hbHRbaV0NCj4+IC0gICAg JiBoLT5idWNrZXRfYml0bWFza10pOw0KPj4gK2FsdF9pZHggPSBnZXRfYWx0X2J1Y2tldF9pbmRl eChoLCBjdXJfaWR4LA0KPj4gK2N1cnJfYmt0LT5zaWdfY3VycmVudFtpXSk7DQo+PiArYWx0X2Jr dCA9ICYoaC0+YnVja2V0c1thbHRfaWR4XSk7DQo+PiBoZWFkLT5ia3QgPSBhbHRfYmt0Ow0KPj4g K2hlYWQtPmN1cl9ia3RfaWR4ID0gYWx0X2lkeDsNCj4+IGhlYWQtPnByZXYgPSB0YWlsOw0KPj4g aGVhZC0+cHJldl9zbG90ID0gaTsNCj4+IGhlYWQrKzsNCj4+IEBAIC03ODgsNyArODA1LDcgQEAg c3RhdGljIGlubGluZSBpbnQzMl90DQo+PiBfX3J0ZV9oYXNoX2FkZF9rZXlfd2l0aF9oYXNoKGNv bnN0IHN0cnVjdCBydGVfaGFzaCAqaCwgY29uc3Qgdm9pZCAqa2V5LA0KPj4gaGFzaF9zaWdfdCBz aWcsIHZvaWQgKmRhdGEpDQo+PiB7DQo+PiAtaGFzaF9zaWdfdCBhbHRfaGFzaDsNCj4+ICt1aW50 MTZfdCBzaG9ydF9zaWc7DQo+PiB1aW50MzJfdCBwcmltX2J1Y2tldF9pZHgsIHNlY19idWNrZXRf aWR4Ow0KPj4gc3RydWN0IHJ0ZV9oYXNoX2J1Y2tldCAqcHJpbV9ia3QsICpzZWNfYmt0LCAqY3Vy X2JrdDsNCj4+IHN0cnVjdCBydGVfaGFzaF9rZXkgKm5ld19rLCAqa2V5cyA9IGgtPmtleV9zdG9y ZTsNCj4+IEBAIC04MDMsMTggKzgyMCwxNyBAQCBfX3J0ZV9oYXNoX2FkZF9rZXlfd2l0aF9oYXNo KGNvbnN0IHN0cnVjdCBydGVfaGFzaCAqaCwgY29uc3Qgdm9pZCAqa2V5LA0KPj4gaW50MzJfdCBy ZXRfdmFsOw0KPj4gc3RydWN0IHJ0ZV9oYXNoX2J1Y2tldCAqbGFzdDsNCj4+DQo+PiAtcHJpbV9i dWNrZXRfaWR4ID0gc2lnICYgaC0+YnVja2V0X2JpdG1hc2s7DQo+PiArc2hvcnRfc2lnID0gZ2V0 X3Nob3J0X3NpZyhzaWcpOw0KPj4gK3ByaW1fYnVja2V0X2lkeCA9IGdldF9wcmltX2J1Y2tldF9p bmRleChoLCBzaWcpOw0KPj4gK3NlY19idWNrZXRfaWR4ID0gZ2V0X2FsdF9idWNrZXRfaW5kZXgo aCwgcHJpbV9idWNrZXRfaWR4LCBzaG9ydF9zaWcpOw0KPj4gcHJpbV9ia3QgPSAmaC0+YnVja2V0 c1twcmltX2J1Y2tldF9pZHhdOw0KPj4gLXJ0ZV9wcmVmZXRjaDAocHJpbV9ia3QpOw0KPj4gLQ0K Pj4gLWFsdF9oYXNoID0gcnRlX2hhc2hfc2Vjb25kYXJ5X2hhc2goc2lnKTsNCj4+IC1zZWNfYnVj a2V0X2lkeCA9IGFsdF9oYXNoICYgaC0+YnVja2V0X2JpdG1hc2s7DQo+PiBzZWNfYmt0ID0gJmgt PmJ1Y2tldHNbc2VjX2J1Y2tldF9pZHhdOw0KPj4gK3J0ZV9wcmVmZXRjaDAocHJpbV9ia3QpOw0K Pj4gcnRlX3ByZWZldGNoMChzZWNfYmt0KTsNCj4+DQo+PiAvKiBDaGVjayBpZiBrZXkgaXMgYWxy ZWFkeSBpbnNlcnRlZCBpbiBwcmltYXJ5IGxvY2F0aW9uICovDQo+PiBfX2hhc2hfcndfd3JpdGVy X2xvY2soaCk7DQo+PiAtcmV0ID0gc2VhcmNoX2FuZF91cGRhdGUoaCwgZGF0YSwga2V5LCBwcmlt X2JrdCwgc2lnLCBhbHRfaGFzaCk7DQo+PiArcmV0ID0gc2VhcmNoX2FuZF91cGRhdGUoaCwgZGF0 YSwga2V5LCBwcmltX2JrdCwgc2hvcnRfc2lnKTsNCj4+IGlmIChyZXQgIT0gLTEpIHsNCj4+IF9f aGFzaF9yd193cml0ZXJfdW5sb2NrKGgpOw0KPj4gcmV0dXJuIHJldDsNCj4+IEBAIC04MjIsMTIg KzgzOCwxMyBAQCBfX3J0ZV9oYXNoX2FkZF9rZXlfd2l0aF9oYXNoKGNvbnN0IHN0cnVjdCBydGVf aGFzaCAqaCwgY29uc3Qgdm9pZCAqa2V5LA0KPj4NCj4+IC8qIENoZWNrIGlmIGtleSBpcyBhbHJl YWR5IGluc2VydGVkIGluIHNlY29uZGFyeSBsb2NhdGlvbiAqLw0KPj4gRk9SX0VBQ0hfQlVDS0VU KGN1cl9ia3QsIHNlY19ia3QpIHsNCj4+IC1yZXQgPSBzZWFyY2hfYW5kX3VwZGF0ZShoLCBkYXRh LCBrZXksIGN1cl9ia3QsIGFsdF9oYXNoLCBzaWcpOw0KPj4gK3JldCA9IHNlYXJjaF9hbmRfdXBk YXRlKGgsIGRhdGEsIGtleSwgY3VyX2JrdCwgc2hvcnRfc2lnKTsNCj4+IGlmIChyZXQgIT0gLTEp IHsNCj4+IF9faGFzaF9yd193cml0ZXJfdW5sb2NrKGgpOw0KPj4gcmV0dXJuIHJldDsNCj4+IH0N Cj4+IH0NCj4+ICsNCj4+IF9faGFzaF9yd193cml0ZXJfdW5sb2NrKGgpOw0KPj4NCj4+IC8qIERp ZCBub3QgZmluZCBhIG1hdGNoLCBzbyBnZXQgYSBuZXcgc2xvdCBmb3Igc3RvcmluZyB0aGUgbmV3 IGtleSAqLw0KPj4gQEAgLTg2NSw3ICs4ODIsNyBAQCBfX3J0ZV9oYXNoX2FkZF9rZXlfd2l0aF9o YXNoKGNvbnN0IHN0cnVjdCBydGVfaGFzaCAqaCwgY29uc3Qgdm9pZCAqa2V5LA0KPj4NCj4+IC8q IEZpbmQgYW4gZW1wdHkgc2xvdCBhbmQgaW5zZXJ0ICovDQo+PiByZXQgPSBydGVfaGFzaF9jdWNr b29faW5zZXJ0X213KGgsIHByaW1fYmt0LCBzZWNfYmt0LCBrZXksIGRhdGEsDQo+PiAtc2lnLCBh bHRfaGFzaCwgbmV3X2lkeCwgJnJldF92YWwpOw0KPj4gK3Nob3J0X3NpZywgbmV3X2lkeCwgJnJl dF92YWwpOw0KPj4gaWYgKHJldCA9PSAwKQ0KPj4gcmV0dXJuIG5ld19pZHggLSAxOw0KPj4gZWxz ZSBpZiAocmV0ID09IDEpIHsNCj4+IEBAIC04NzUsNyArODkyLDcgQEAgX19ydGVfaGFzaF9hZGRf a2V5X3dpdGhfaGFzaChjb25zdCBzdHJ1Y3QgcnRlX2hhc2ggKmgsIGNvbnN0IHZvaWQgKmtleSwN Cj4+DQo+PiAvKiBQcmltYXJ5IGJ1Y2tldCBmdWxsLCBuZWVkIHRvIG1ha2Ugc3BhY2UgZm9yIG5l dyBlbnRyeSAqLw0KPj4gcmV0ID0gcnRlX2hhc2hfY3Vja29vX21ha2Vfc3BhY2VfbXcoaCwgcHJp bV9ia3QsIHNlY19ia3QsIGtleSwgZGF0YSwNCj4+IC1zaWcsIGFsdF9oYXNoLCBuZXdfaWR4LCAm cmV0X3ZhbCk7DQo+PiArc2hvcnRfc2lnLCBwcmltX2J1Y2tldF9pZHgsIG5ld19pZHgsICZyZXRf dmFsKTsNCj4+IGlmIChyZXQgPT0gMCkNCj4+IHJldHVybiBuZXdfaWR4IC0gMTsNCj4+IGVsc2Ug aWYgKHJldCA9PSAxKSB7DQo+PiBAQCAtODg1LDcgKzkwMiw3IEBAIF9fcnRlX2hhc2hfYWRkX2tl eV93aXRoX2hhc2goY29uc3Qgc3RydWN0IHJ0ZV9oYXNoICpoLCBjb25zdCB2b2lkICprZXksDQo+ Pg0KPj4gLyogQWxzbyBzZWFyY2ggc2Vjb25kYXJ5IGJ1Y2tldCB0byBnZXQgYmV0dGVyIG9jY3Vw YW5jeSAqLw0KPj4gcmV0ID0gcnRlX2hhc2hfY3Vja29vX21ha2Vfc3BhY2VfbXcoaCwgc2VjX2Jr dCwgcHJpbV9ia3QsIGtleSwgZGF0YSwNCj4+IC1hbHRfaGFzaCwgc2lnLCBuZXdfaWR4LCAmcmV0 X3ZhbCk7DQo+PiArc2hvcnRfc2lnLCBzZWNfYnVja2V0X2lkeCwgbmV3X2lkeCwgJnJldF92YWwp Ow0KPj4NCj4+IGlmIChyZXQgPT0gMCkNCj4+IHJldHVybiBuZXdfaWR4IC0gMTsNCj4+IEBAIC05 MDUsMTQgKzkyMiwxNCBAQCBfX3J0ZV9oYXNoX2FkZF9rZXlfd2l0aF9oYXNoKGNvbnN0IHN0cnVj dCBydGVfaGFzaCAqaCwgY29uc3Qgdm9pZCAqa2V5LA0KPj4gICovDQo+PiBfX2hhc2hfcndfd3Jp dGVyX2xvY2soaCk7DQo+PiAvKiBXZSBjaGVjayBmb3IgZHVwbGljYXRlcyBhZ2FpbiBzaW5jZSBj b3VsZCBiZSBpbnNlcnRlZCBiZWZvcmUgdGhlIGxvY2sgKi8NCj4+IC1yZXQgPSBzZWFyY2hfYW5k X3VwZGF0ZShoLCBkYXRhLCBrZXksIHByaW1fYmt0LCBzaWcsIGFsdF9oYXNoKTsNCj4+ICtyZXQg PSBzZWFyY2hfYW5kX3VwZGF0ZShoLCBkYXRhLCBrZXksIHByaW1fYmt0LCBzaG9ydF9zaWcpOw0K Pj4gaWYgKHJldCAhPSAtMSkgew0KPj4gZW5xdWV1ZV9zbG90X2JhY2soaCwgY2FjaGVkX2ZyZWVf c2xvdHMsIHNsb3RfaWQpOw0KPj4gZ290byBmYWlsdXJlOw0KPj4gfQ0KPj4NCj4+IEZPUl9FQUNI X0JVQ0tFVChjdXJfYmt0LCBzZWNfYmt0KSB7DQo+PiAtcmV0ID0gc2VhcmNoX2FuZF91cGRhdGUo aCwgZGF0YSwga2V5LCBjdXJfYmt0LCBhbHRfaGFzaCwgc2lnKTsNCj4+ICtyZXQgPSBzZWFyY2hf YW5kX3VwZGF0ZShoLCBkYXRhLCBrZXksIGN1cl9ia3QsIHNob3J0X3NpZyk7DQo+PiBpZiAocmV0 ICE9IC0xKSB7DQo+PiBlbnF1ZXVlX3Nsb3RfYmFjayhoLCBjYWNoZWRfZnJlZV9zbG90cywgc2xv dF9pZCk7DQo+PiBnb3RvIGZhaWx1cmU7DQo+PiBAQCAtOTI0LDggKzk0MSw3IEBAIF9fcnRlX2hh c2hfYWRkX2tleV93aXRoX2hhc2goY29uc3Qgc3RydWN0IHJ0ZV9oYXNoICpoLCBjb25zdCB2b2lk ICprZXksDQo+PiBmb3IgKGkgPSAwOyBpIDwgUlRFX0hBU0hfQlVDS0VUX0VOVFJJRVM7IGkrKykg ew0KPj4gLyogQ2hlY2sgaWYgc2xvdCBpcyBhdmFpbGFibGUgKi8NCj4+IGlmIChsaWtlbHkoY3Vy X2JrdC0+a2V5X2lkeFtpXSA9PSBFTVBUWV9TTE9UKSkgew0KPj4gLWN1cl9ia3QtPnNpZ19jdXJy ZW50W2ldID0gYWx0X2hhc2g7DQo+PiAtY3VyX2JrdC0+c2lnX2FsdFtpXSA9IHNpZzsNCj4+ICtj dXJfYmt0LT5zaWdfY3VycmVudFtpXSA9IHNob3J0X3NpZzsNCj4+IGN1cl9ia3QtPmtleV9pZHhb aV0gPSBuZXdfaWR4Ow0KPj4gX19oYXNoX3J3X3dyaXRlcl91bmxvY2soaCk7DQo+PiByZXR1cm4g bmV3X2lkeCAtIDE7DQo+PiBAQCAtOTQzLDggKzk1OSw3IEBAIF9fcnRlX2hhc2hfYWRkX2tleV93 aXRoX2hhc2goY29uc3Qgc3RydWN0IHJ0ZV9oYXNoICpoLCBjb25zdCB2b2lkICprZXksDQo+Pg0K Pj4gYmt0X2lkID0gKHVpbnQzMl90KSgodWludHB0cl90KWV4dF9ia3RfaWQpIC0gMTsNCj4+IC8q IFVzZSB0aGUgZmlyc3QgbG9jYXRpb24gb2YgdGhlIG5ldyBidWNrZXQgKi8NCj4+IC0oaC0+YnVj a2V0c19leHRbYmt0X2lkXSkuc2lnX2N1cnJlbnRbMF0gPSBhbHRfaGFzaDsNCj4+IC0oaC0+YnVj a2V0c19leHRbYmt0X2lkXSkuc2lnX2FsdFswXSA9IHNpZzsNCj4+ICsoaC0+YnVja2V0c19leHRb Ymt0X2lkXSkuc2lnX2N1cnJlbnRbMF0gPSBzaG9ydF9zaWc7DQo+PiAoaC0+YnVja2V0c19leHRb Ymt0X2lkXSkua2V5X2lkeFswXSA9IG5ld19pZHg7DQo+PiAvKiBMaW5rIHRoZSBuZXcgYnVja2V0 IHRvIHNlYyBidWNrZXQgbGlua2VkIGxpc3QgKi8NCj4+IGxhc3QgPSBydGVfaGFzaF9nZXRfbGFz dF9ia3Qoc2VjX2JrdCk7DQo+PiBAQCAtMTAwMyw3ICsxMDE4LDcgQEAgcnRlX2hhc2hfYWRkX2tl eV9kYXRhKGNvbnN0IHN0cnVjdCBydGVfaGFzaCAqaCwgY29uc3Qgdm9pZCAqa2V5LCB2b2lkICpk YXRhKQ0KPj4NCj4+IC8qIFNlYXJjaCBvbmUgYnVja2V0IHRvIGZpbmQgdGhlIG1hdGNoIGtleSAq Lw0KPj4gc3RhdGljIGlubGluZSBpbnQzMl90DQo+PiAtc2VhcmNoX29uZV9idWNrZXQoY29uc3Qg c3RydWN0IHJ0ZV9oYXNoICpoLCBjb25zdCB2b2lkICprZXksIGhhc2hfc2lnX3Qgc2lnLA0KPj4g K3NlYXJjaF9vbmVfYnVja2V0KGNvbnN0IHN0cnVjdCBydGVfaGFzaCAqaCwgY29uc3Qgdm9pZCAq a2V5LCB1aW50MTZfdCBzaWcsDQo+PiB2b2lkICoqZGF0YSwgY29uc3Qgc3RydWN0IHJ0ZV9oYXNo X2J1Y2tldCAqYmt0KQ0KPj4gew0KPj4gaW50IGk7DQo+PiBAQCAtMTAzMiwzMCArMTA0NywzMCBA QCBzdGF0aWMgaW5saW5lIGludDMyX3QNCj4+IF9fcnRlX2hhc2hfbG9va3VwX3dpdGhfaGFzaChj b25zdCBzdHJ1Y3QgcnRlX2hhc2ggKmgsIGNvbnN0IHZvaWQgKmtleSwNCj4+IGhhc2hfc2lnX3Qg c2lnLCB2b2lkICoqZGF0YSkNCj4+IHsNCj4+IC11aW50MzJfdCBidWNrZXRfaWR4Ow0KPj4gLWhh c2hfc2lnX3QgYWx0X2hhc2g7DQo+PiArdWludDMyX3QgcHJpbV9idWNrZXRfaWR4LCBzZWNfYnVj a2V0X2lkeDsNCj4+IHN0cnVjdCBydGVfaGFzaF9idWNrZXQgKmJrdCwgKmN1cl9ia3Q7DQo+PiBp bnQgcmV0Ow0KPj4gK3VpbnQxNl90IHNob3J0X3NpZzsNCj4+DQo+PiAtYnVja2V0X2lkeCA9IHNp ZyAmIGgtPmJ1Y2tldF9iaXRtYXNrOw0KPj4gLWJrdCA9ICZoLT5idWNrZXRzW2J1Y2tldF9pZHhd Ow0KPj4gK3Nob3J0X3NpZyA9IGdldF9zaG9ydF9zaWcoc2lnKTsNCj4+ICtwcmltX2J1Y2tldF9p ZHggPSBnZXRfcHJpbV9idWNrZXRfaW5kZXgoaCwgc2lnKTsNCj4+ICtzZWNfYnVja2V0X2lkeCA9 IGdldF9hbHRfYnVja2V0X2luZGV4KGgsIHByaW1fYnVja2V0X2lkeCwgc2hvcnRfc2lnKTsNCj4+ ICtia3QgPSAmaC0+YnVja2V0c1twcmltX2J1Y2tldF9pZHhdOw0KPj4NCj4+IF9faGFzaF9yd19y ZWFkZXJfbG9jayhoKTsNCj4+DQo+PiAvKiBDaGVjayBpZiBrZXkgaXMgaW4gcHJpbWFyeSBsb2Nh dGlvbiAqLw0KPj4gLXJldCA9IHNlYXJjaF9vbmVfYnVja2V0KGgsIGtleSwgc2lnLCBkYXRhLCBi a3QpOw0KPj4gK3JldCA9IHNlYXJjaF9vbmVfYnVja2V0KGgsIGtleSwgc2hvcnRfc2lnLCBkYXRh LCBia3QpOw0KPj4gaWYgKHJldCAhPSAtMSkgew0KPj4gX19oYXNoX3J3X3JlYWRlcl91bmxvY2so aCk7DQo+PiByZXR1cm4gcmV0Ow0KPj4gfQ0KPj4gLyogQ2FsY3VsYXRlIHNlY29uZGFyeSBoYXNo ICovDQo+PiAtYWx0X2hhc2ggPSBydGVfaGFzaF9zZWNvbmRhcnlfaGFzaChzaWcpOw0KPj4gLWJ1 Y2tldF9pZHggPSBhbHRfaGFzaCAmIGgtPmJ1Y2tldF9iaXRtYXNrOw0KPj4gLWJrdCA9ICZoLT5i dWNrZXRzW2J1Y2tldF9pZHhdOw0KPj4gK2JrdCA9ICZoLT5idWNrZXRzW3NlY19idWNrZXRfaWR4 XTsNCj4+DQo+PiAvKiBDaGVjayBpZiBrZXkgaXMgaW4gc2Vjb25kYXJ5IGxvY2F0aW9uICovDQo+ PiBGT1JfRUFDSF9CVUNLRVQoY3VyX2JrdCwgYmt0KSB7DQo+PiAtcmV0ID0gc2VhcmNoX29uZV9i dWNrZXQoaCwga2V5LCBhbHRfaGFzaCwgZGF0YSwgY3VyX2JrdCk7DQo+PiArcmV0ID0gc2VhcmNo X29uZV9idWNrZXQoaCwga2V5LCBzaG9ydF9zaWcsIGRhdGEsIGN1cl9ia3QpOw0KPj4gaWYgKHJl dCAhPSAtMSkgew0KPj4gX19oYXNoX3J3X3JlYWRlcl91bmxvY2soaCk7DQo+PiByZXR1cm4gcmV0 Ow0KPj4gQEAgLTExMDIsNyArMTExNyw2IEBAIHJlbW92ZV9lbnRyeShjb25zdCBzdHJ1Y3QgcnRl X2hhc2ggKmgsIHN0cnVjdCBydGVfaGFzaF9idWNrZXQgKmJrdCwgdW5zaWduZWQgaSkNCj4+IHN0 cnVjdCBsY29yZV9jYWNoZSAqY2FjaGVkX2ZyZWVfc2xvdHM7DQo+Pg0KPj4gYmt0LT5zaWdfY3Vy cmVudFtpXSA9IE5VTExfU0lHTkFUVVJFOw0KPj4gLWJrdC0+c2lnX2FsdFtpXSA9IE5VTExfU0lH TkFUVVJFOw0KPj4gaWYgKGgtPm11bHRpX3dyaXRlcl9zdXBwb3J0KSB7DQo+PiBsY29yZV9pZCA9 IHJ0ZV9sY29yZV9pZCgpOw0KPj4gY2FjaGVkX2ZyZWVfc2xvdHMgPSAmaC0+bG9jYWxfZnJlZV9z bG90c1tsY29yZV9pZF07DQo+PiBAQCAtMTE0MSw5ICsxMTU1LDcgQEAgX19ydGVfaGFzaF9jb21w YWN0X2xsKHN0cnVjdCBydGVfaGFzaF9idWNrZXQgKmN1cl9ia3QsIGludCBwb3MpIHsNCj4+IGlm IChsYXN0X2JrdC0+a2V5X2lkeFtpXSAhPSBFTVBUWV9TTE9UKSB7DQo+PiBjdXJfYmt0LT5rZXlf aWR4W3Bvc10gPSBsYXN0X2JrdC0+a2V5X2lkeFtpXTsNCj4+IGN1cl9ia3QtPnNpZ19jdXJyZW50 W3Bvc10gPSBsYXN0X2JrdC0+c2lnX2N1cnJlbnRbaV07DQo+PiAtY3VyX2JrdC0+c2lnX2FsdFtw b3NdID0gbGFzdF9ia3QtPnNpZ19hbHRbaV07DQo+PiBsYXN0X2JrdC0+c2lnX2N1cnJlbnRbaV0g PSBOVUxMX1NJR05BVFVSRTsNCj4+IC1sYXN0X2JrdC0+c2lnX2FsdFtpXSA9IE5VTExfU0lHTkFU VVJFOw0KPj4gbGFzdF9ia3QtPmtleV9pZHhbaV0gPSBFTVBUWV9TTE9UOw0KPj4gcmV0dXJuOw0K Pj4gfQ0KPj4gQEAgLTExNTMsNyArMTE2NSw3IEBAIF9fcnRlX2hhc2hfY29tcGFjdF9sbChzdHJ1 Y3QgcnRlX2hhc2hfYnVja2V0ICpjdXJfYmt0LCBpbnQgcG9zKSB7DQo+PiAvKiBTZWFyY2ggb25l IGJ1Y2tldCBhbmQgcmVtb3ZlIHRoZSBtYXRjaGVkIGtleSAqLw0KPj4gc3RhdGljIGlubGluZSBp bnQzMl90DQo+PiBzZWFyY2hfYW5kX3JlbW92ZShjb25zdCBzdHJ1Y3QgcnRlX2hhc2ggKmgsIGNv bnN0IHZvaWQgKmtleSwNCj4+IC1zdHJ1Y3QgcnRlX2hhc2hfYnVja2V0ICpia3QsIGhhc2hfc2ln X3Qgc2lnLCBpbnQgKnBvcykNCj4+ICtzdHJ1Y3QgcnRlX2hhc2hfYnVja2V0ICpia3QsIHVpbnQx Nl90IHNpZywgaW50ICpwb3MpDQo+PiB7DQo+PiBzdHJ1Y3QgcnRlX2hhc2hfa2V5ICprLCAqa2V5 cyA9IGgtPmtleV9zdG9yZTsNCj4+IHVuc2lnbmVkIGludCBpOw0KPj4gQEAgLTExODUsMTkgKzEx OTcsMjEgQEAgc3RhdGljIGlubGluZSBpbnQzMl90DQo+PiBfX3J0ZV9oYXNoX2RlbF9rZXlfd2l0 aF9oYXNoKGNvbnN0IHN0cnVjdCBydGVfaGFzaCAqaCwgY29uc3Qgdm9pZCAqa2V5LA0KPj4gaGFz aF9zaWdfdCBzaWcpDQo+PiB7DQo+PiAtdWludDMyX3QgYnVja2V0X2lkeDsNCj4+IC1oYXNoX3Np Z190IGFsdF9oYXNoOw0KPj4gK3VpbnQzMl90IHByaW1fYnVja2V0X2lkeCwgc2VjX2J1Y2tldF9p ZHg7DQo+PiBzdHJ1Y3QgcnRlX2hhc2hfYnVja2V0ICpwcmltX2JrdCwgKnNlY19ia3QsICpwcmV2 X2JrdCwgKmxhc3RfYmt0Ow0KPj4gc3RydWN0IHJ0ZV9oYXNoX2J1Y2tldCAqY3VyX2JrdDsNCj4+ IGludCBwb3M7DQo+PiBpbnQzMl90IHJldCwgaTsNCj4+ICt1aW50MTZfdCBzaG9ydF9zaWc7DQo+ Pg0KPj4gLWJ1Y2tldF9pZHggPSBzaWcgJiBoLT5idWNrZXRfYml0bWFzazsNCj4+IC1wcmltX2Jr dCA9ICZoLT5idWNrZXRzW2J1Y2tldF9pZHhdOw0KPj4gK3Nob3J0X3NpZyA9IGdldF9zaG9ydF9z aWcoc2lnKTsNCj4+ICtwcmltX2J1Y2tldF9pZHggPSBnZXRfcHJpbV9idWNrZXRfaW5kZXgoaCwg c2lnKTsNCj4+ICtzZWNfYnVja2V0X2lkeCA9IGdldF9hbHRfYnVja2V0X2luZGV4KGgsIHByaW1f YnVja2V0X2lkeCwgc2hvcnRfc2lnKTsNCj4+ICtwcmltX2JrdCA9ICZoLT5idWNrZXRzW3ByaW1f YnVja2V0X2lkeF07DQo+Pg0KPj4gX19oYXNoX3J3X3dyaXRlcl9sb2NrKGgpOw0KPj4gLyogbG9v ayBmb3Iga2V5IGluIHByaW1hcnkgYnVja2V0ICovDQo+PiAtcmV0ID0gc2VhcmNoX2FuZF9yZW1v dmUoaCwga2V5LCBwcmltX2JrdCwgc2lnLCAmcG9zKTsNCj4+ICtyZXQgPSBzZWFyY2hfYW5kX3Jl bW92ZShoLCBrZXksIHByaW1fYmt0LCBzaG9ydF9zaWcsICZwb3MpOw0KPj4gaWYgKHJldCAhPSAt MSkgew0KPj4gX19ydGVfaGFzaF9jb21wYWN0X2xsKHByaW1fYmt0LCBwb3MpOw0KPj4gbGFzdF9i a3QgPSBwcmltX2JrdC0+bmV4dDsNCj4+IEBAIC0xMjA2LDEyICsxMjIwLDEwIEBAIF9fcnRlX2hh c2hfZGVsX2tleV93aXRoX2hhc2goY29uc3Qgc3RydWN0IHJ0ZV9oYXNoICpoLCBjb25zdCB2b2lk ICprZXksDQo+PiB9DQo+Pg0KPj4gLyogQ2FsY3VsYXRlIHNlY29uZGFyeSBoYXNoICovDQo+PiAt YWx0X2hhc2ggPSBydGVfaGFzaF9zZWNvbmRhcnlfaGFzaChzaWcpOw0KPj4gLWJ1Y2tldF9pZHgg PSBhbHRfaGFzaCAmIGgtPmJ1Y2tldF9iaXRtYXNrOw0KPj4gLXNlY19ia3QgPSAmaC0+YnVja2V0 c1tidWNrZXRfaWR4XTsNCj4+ICtzZWNfYmt0ID0gJmgtPmJ1Y2tldHNbc2VjX2J1Y2tldF9pZHhd Ow0KPj4NCj4+IEZPUl9FQUNIX0JVQ0tFVChjdXJfYmt0LCBzZWNfYmt0KSB7DQo+PiAtcmV0ID0g c2VhcmNoX2FuZF9yZW1vdmUoaCwga2V5LCBjdXJfYmt0LCBhbHRfaGFzaCwgJnBvcyk7DQo+PiAr cmV0ID0gc2VhcmNoX2FuZF9yZW1vdmUoaCwga2V5LCBjdXJfYmt0LCBzaG9ydF9zaWcsICZwb3Mp Ow0KPj4gaWYgKHJldCAhPSAtMSkgew0KPj4gX19ydGVfaGFzaF9jb21wYWN0X2xsKGN1cl9ia3Qs IHBvcyk7DQo+PiBsYXN0X2JrdCA9IHNlY19ia3QtPm5leHQ7DQo+PiBAQCAtMTI4OCw1NSArMTMw MCwzNSBAQCBzdGF0aWMgaW5saW5lIHZvaWQNCj4+IGNvbXBhcmVfc2lnbmF0dXJlcyh1aW50MzJf dCAqcHJpbV9oYXNoX21hdGNoZXMsIHVpbnQzMl90ICpzZWNfaGFzaF9tYXRjaGVzLA0KPj4gY29u c3Qgc3RydWN0IHJ0ZV9oYXNoX2J1Y2tldCAqcHJpbV9ia3QsDQo+PiBjb25zdCBzdHJ1Y3QgcnRl X2hhc2hfYnVja2V0ICpzZWNfYmt0LA0KPj4gLWhhc2hfc2lnX3QgcHJpbV9oYXNoLCBoYXNoX3Np Z190IHNlY19oYXNoLA0KPj4gK3VpbnQxNl90IHNpZywNCj4+IGVudW0gcnRlX2hhc2hfc2lnX2Nv bXBhcmVfZnVuY3Rpb24gc2lnX2NtcF9mbikNCj4+IHsNCj4+IHVuc2lnbmVkIGludCBpOw0KPj4N Cj4+ICsvKiBGb3IgbWF0Y2ggbWFzayB0aGUgZmlyc3QgYml0IG9mIGV2ZXJ5IHR3byBiaXRzIGlu ZGljYXRlcyB0aGUgbWF0Y2ggKi8NCj4+IHN3aXRjaCAoc2lnX2NtcF9mbikgew0KPj4gLSNpZmRl ZiBSVEVfTUFDSElORV9DUFVGTEFHX0FWWDINCj4+IC1jYXNlIFJURV9IQVNIX0NPTVBBUkVfQVZY MjoNCj4+IC0qcHJpbV9oYXNoX21hdGNoZXMgPSBfbW0yNTZfbW92ZW1hc2tfcHMoKF9fbTI1Nilf bW0yNTZfY21wZXFfZXBpMzIoDQo+PiAtX21tMjU2X2xvYWRfc2kyNTYoDQo+PiAtKF9fbTI1Nmkg Y29uc3QgKilwcmltX2JrdC0+c2lnX2N1cnJlbnQpLA0KPj4gLV9tbTI1Nl9zZXQxX2VwaTMyKHBy aW1faGFzaCkpKTsNCj4+IC0qc2VjX2hhc2hfbWF0Y2hlcyA9IF9tbTI1Nl9tb3ZlbWFza19wcygo X19tMjU2KV9tbTI1Nl9jbXBlcV9lcGkzMigNCj4+IC1fbW0yNTZfbG9hZF9zaTI1NigNCj4+IC0o X19tMjU2aSBjb25zdCAqKXNlY19ia3QtPnNpZ19jdXJyZW50KSwNCj4+IC1fbW0yNTZfc2V0MV9l cGkzMihzZWNfaGFzaCkpKTsNCj4+IC1icmVhazsNCj4+IC0jZW5kaWYNCj4+ICNpZmRlZiBSVEVf TUFDSElORV9DUFVGTEFHX1NTRTINCj4+IGNhc2UgUlRFX0hBU0hfQ09NUEFSRV9TU0U6DQo+PiAt LyogQ29tcGFyZSB0aGUgZmlyc3QgNCBzaWduYXR1cmVzIGluIHRoZSBidWNrZXQgKi8NCj4+IC0q cHJpbV9oYXNoX21hdGNoZXMgPSBfbW1fbW92ZW1hc2tfcHMoKF9fbTEyOClfbW1fY21wZXFfZXBp MTYoDQo+PiArLyogQ29tcGFyZSBhbGwgc2lnbmF0dXJlcyBpbiB0aGUgYnVja2V0ICovDQo+PiAr KnByaW1faGFzaF9tYXRjaGVzID0gX21tX21vdmVtYXNrX2VwaTgoX21tX2NtcGVxX2VwaTE2KA0K Pj4gX21tX2xvYWRfc2kxMjgoDQo+PiAoX19tMTI4aSBjb25zdCAqKXByaW1fYmt0LT5zaWdfY3Vy cmVudCksDQo+PiAtX21tX3NldDFfZXBpMzIocHJpbV9oYXNoKSkpOw0KPj4gLSpwcmltX2hhc2hf bWF0Y2hlcyB8PSAoX21tX21vdmVtYXNrX3BzKChfX20xMjgpX21tX2NtcGVxX2VwaTE2KA0KPj4g LV9tbV9sb2FkX3NpMTI4KA0KPj4gLShfX20xMjhpIGNvbnN0ICopJnByaW1fYmt0LT5zaWdfY3Vy cmVudFs0XSksDQo+PiAtX21tX3NldDFfZXBpMzIocHJpbV9oYXNoKSkpKSA8PCA0Ow0KPj4gLS8q IENvbXBhcmUgdGhlIGZpcnN0IDQgc2lnbmF0dXJlcyBpbiB0aGUgYnVja2V0ICovDQo+PiAtKnNl Y19oYXNoX21hdGNoZXMgPSBfbW1fbW92ZW1hc2tfcHMoKF9fbTEyOClfbW1fY21wZXFfZXBpMTYo DQo+PiArX21tX3NldDFfZXBpMTYoc2lnKSkpOw0KPj4gKy8qIENvbXBhcmUgYWxsIHNpZ25hdHVy ZXMgaW4gdGhlIGJ1Y2tldCAqLw0KPj4gKypzZWNfaGFzaF9tYXRjaGVzID0gX21tX21vdmVtYXNr X2VwaTgoX21tX2NtcGVxX2VwaTE2KA0KPj4gX21tX2xvYWRfc2kxMjgoDQo+PiAoX19tMTI4aSBj b25zdCAqKXNlY19ia3QtPnNpZ19jdXJyZW50KSwNCj4+IC1fbW1fc2V0MV9lcGkzMihzZWNfaGFz aCkpKTsNCj4+IC0qc2VjX2hhc2hfbWF0Y2hlcyB8PSAoX21tX21vdmVtYXNrX3BzKChfX20xMjgp X21tX2NtcGVxX2VwaTE2KA0KPj4gLV9tbV9sb2FkX3NpMTI4KA0KPj4gLShfX20xMjhpIGNvbnN0 ICopJnNlY19ia3QtPnNpZ19jdXJyZW50WzRdKSwNCj4+IC1fbW1fc2V0MV9lcGkzMihzZWNfaGFz aCkpKSkgPDwgNDsNCj4+ICtfbW1fc2V0MV9lcGkxNihzaWcpKSk7DQo+PiBicmVhazsNCj4+ICNl bmRpZg0KPj4gZGVmYXVsdDoNCj4+IGZvciAoaSA9IDA7IGkgPCBSVEVfSEFTSF9CVUNLRVRfRU5U UklFUzsgaSsrKSB7DQo+PiAqcHJpbV9oYXNoX21hdGNoZXMgfD0NCj4+IC0oKHByaW1faGFzaCA9 PSBwcmltX2JrdC0+c2lnX2N1cnJlbnRbaV0pIDw8IGkpOw0KPj4gKygoc2lnID09IHByaW1fYmt0 LT5zaWdfY3VycmVudFtpXSkgPDwgKGkgPDwgMSkpOw0KPj4gKnNlY19oYXNoX21hdGNoZXMgfD0N Cj4+IC0oKHNlY19oYXNoID09IHNlY19ia3QtPnNpZ19jdXJyZW50W2ldKSA8PCBpKTsNCj4+ICso KHNpZyA9PSBzZWNfYmt0LT5zaWdfY3VycmVudFtpXSkgPDwgKGkgPDwgMSkpOw0KPj4gfQ0KPj4g fQ0KPj4gLQ0KPj4gfQ0KPj4NCj4+ICNkZWZpbmUgUFJFRkVUQ0hfT0ZGU0VUIDQNCj4+IEBAIC0x MzQ5LDcgKzEzNDEsOSBAQCBfX3J0ZV9oYXNoX2xvb2t1cF9idWxrKGNvbnN0IHN0cnVjdCBydGVf aGFzaCAqaCwgY29uc3Qgdm9pZCAqKmtleXMsDQo+PiBpbnQzMl90IGk7DQo+PiBpbnQzMl90IHJl dDsNCj4+IHVpbnQzMl90IHByaW1faGFzaFtSVEVfSEFTSF9MT09LVVBfQlVMS19NQVhdOw0KPj4g LXVpbnQzMl90IHNlY19oYXNoW1JURV9IQVNIX0xPT0tVUF9CVUxLX01BWF07DQo+PiArdWludDMy X3QgcHJpbV9pbmRleFtSVEVfSEFTSF9MT09LVVBfQlVMS19NQVhdOw0KPj4gK3VpbnQzMl90IHNl Y19pbmRleFtSVEVfSEFTSF9MT09LVVBfQlVMS19NQVhdOw0KPj4gK3VpbnQxNl90IHNpZ1tSVEVf SEFTSF9MT09LVVBfQlVMS19NQVhdOw0KPj4gY29uc3Qgc3RydWN0IHJ0ZV9oYXNoX2J1Y2tldCAq cHJpbWFyeV9ia3RbUlRFX0hBU0hfTE9PS1VQX0JVTEtfTUFYXTsNCj4+IGNvbnN0IHN0cnVjdCBy dGVfaGFzaF9idWNrZXQgKnNlY29uZGFyeV9ia3RbUlRFX0hBU0hfTE9PS1VQX0JVTEtfTUFYXTsN Cj4+IHVpbnQzMl90IHByaW1faGl0bWFza1tSVEVfSEFTSF9MT09LVVBfQlVMS19NQVhdID0gezB9 Ow0KPj4gQEAgLTEzNjgsMTAgKzEzNjIsMTMgQEAgX19ydGVfaGFzaF9sb29rdXBfYnVsayhjb25z dCBzdHJ1Y3QgcnRlX2hhc2ggKmgsIGNvbnN0IHZvaWQgKiprZXlzLA0KPj4gcnRlX3ByZWZldGNo MChrZXlzW2kgKyBQUkVGRVRDSF9PRkZTRVRdKTsNCj4+DQo+PiBwcmltX2hhc2hbaV0gPSBydGVf aGFzaF9oYXNoKGgsIGtleXNbaV0pOw0KPj4gLXNlY19oYXNoW2ldID0gcnRlX2hhc2hfc2Vjb25k YXJ5X2hhc2gocHJpbV9oYXNoW2ldKTsNCj4+DQo+PiAtcHJpbWFyeV9ia3RbaV0gPSAmaC0+YnVj a2V0c1twcmltX2hhc2hbaV0gJiBoLT5idWNrZXRfYml0bWFza107DQo+PiAtc2Vjb25kYXJ5X2Jr dFtpXSA9ICZoLT5idWNrZXRzW3NlY19oYXNoW2ldICYgaC0+YnVja2V0X2JpdG1hc2tdOw0KPj4g K3NpZ1tpXSA9IGdldF9zaG9ydF9zaWcocHJpbV9oYXNoW2ldKTsNCj4+ICtwcmltX2luZGV4W2ld ID0gZ2V0X3ByaW1fYnVja2V0X2luZGV4KGgsIHByaW1faGFzaFtpXSk7DQo+PiArc2VjX2luZGV4 W2ldID0gZ2V0X2FsdF9idWNrZXRfaW5kZXgoaCwgcHJpbV9pbmRleFtpXSwgc2lnW2ldKTsNCj4+ ICsNCj4+ICtwcmltYXJ5X2JrdFtpXSA9ICZoLT5idWNrZXRzW3ByaW1faW5kZXhbaV1dOw0KPj4g K3NlY29uZGFyeV9ia3RbaV0gPSAmaC0+YnVja2V0c1tzZWNfaW5kZXhbaV1dOw0KPj4NCj4+IHJ0 ZV9wcmVmZXRjaDAocHJpbWFyeV9ia3RbaV0pOw0KPj4gcnRlX3ByZWZldGNoMChzZWNvbmRhcnlf Ymt0W2ldKTsNCj4+IEBAIC0xMzgwLDEwICsxMzc3LDEzIEBAIF9fcnRlX2hhc2hfbG9va3VwX2J1 bGsoY29uc3Qgc3RydWN0IHJ0ZV9oYXNoICpoLCBjb25zdCB2b2lkICoqa2V5cywNCj4+IC8qIENh bGN1bGF0ZSBhbmQgcHJlZmV0Y2ggcmVzdCBvZiB0aGUgYnVja2V0cyAqLw0KPj4gZm9yICg7IGkg PCBudW1fa2V5czsgaSsrKSB7DQo+PiBwcmltX2hhc2hbaV0gPSBydGVfaGFzaF9oYXNoKGgsIGtl eXNbaV0pOw0KPj4gLXNlY19oYXNoW2ldID0gcnRlX2hhc2hfc2Vjb25kYXJ5X2hhc2gocHJpbV9o YXNoW2ldKTsNCj4+DQo+PiAtcHJpbWFyeV9ia3RbaV0gPSAmaC0+YnVja2V0c1twcmltX2hhc2hb aV0gJiBoLT5idWNrZXRfYml0bWFza107DQo+PiAtc2Vjb25kYXJ5X2JrdFtpXSA9ICZoLT5idWNr ZXRzW3NlY19oYXNoW2ldICYgaC0+YnVja2V0X2JpdG1hc2tdOw0KPj4gK3NpZ1tpXSA9IGdldF9z aG9ydF9zaWcocHJpbV9oYXNoW2ldKTsNCj4+ICtwcmltX2luZGV4W2ldID0gZ2V0X3ByaW1fYnVj a2V0X2luZGV4KGgsIHByaW1faGFzaFtpXSk7DQo+PiArc2VjX2luZGV4W2ldID0gZ2V0X2FsdF9i dWNrZXRfaW5kZXgoaCwgcHJpbV9pbmRleFtpXSwgc2lnW2ldKTsNCj4+ICsNCj4+ICtwcmltYXJ5 X2JrdFtpXSA9ICZoLT5idWNrZXRzW3ByaW1faW5kZXhbaV1dOw0KPj4gK3NlY29uZGFyeV9ia3Rb aV0gPSAmaC0+YnVja2V0c1tzZWNfaW5kZXhbaV1dOw0KPj4NCj4+IHJ0ZV9wcmVmZXRjaDAocHJp bWFyeV9ia3RbaV0pOw0KPj4gcnRlX3ByZWZldGNoMChzZWNvbmRhcnlfYmt0W2ldKTsNCj4+IEBA IC0xMzk0LDEwICsxMzk0LDExIEBAIF9fcnRlX2hhc2hfbG9va3VwX2J1bGsoY29uc3Qgc3RydWN0 IHJ0ZV9oYXNoICpoLCBjb25zdCB2b2lkICoqa2V5cywNCj4+IGZvciAoaSA9IDA7IGkgPCBudW1f a2V5czsgaSsrKSB7DQo+PiBjb21wYXJlX3NpZ25hdHVyZXMoJnByaW1faGl0bWFza1tpXSwgJnNl Y19oaXRtYXNrW2ldLA0KPj4gcHJpbWFyeV9ia3RbaV0sIHNlY29uZGFyeV9ia3RbaV0sDQo+PiAt cHJpbV9oYXNoW2ldLCBzZWNfaGFzaFtpXSwgaC0+c2lnX2NtcF9mbik7DQo+PiArc2lnW2ldLCBo LT5zaWdfY21wX2ZuKTsNCj4+DQo+PiBpZiAocHJpbV9oaXRtYXNrW2ldKSB7DQo+PiAtdWludDMy X3QgZmlyc3RfaGl0ID0gX19idWlsdGluX2N0emwocHJpbV9oaXRtYXNrW2ldKTsNCj4+ICt1aW50 MzJfdCBmaXJzdF9oaXQgPQ0KPj4gK19fYnVpbHRpbl9jdHpsKHByaW1faGl0bWFza1tpXSkgPj4g MTsNCj4+IHVpbnQzMl90IGtleV9pZHggPSBwcmltYXJ5X2JrdFtpXS0+a2V5X2lkeFtmaXJzdF9o aXRdOw0KPj4gY29uc3Qgc3RydWN0IHJ0ZV9oYXNoX2tleSAqa2V5X3Nsb3QgPQ0KPj4gKGNvbnN0 IHN0cnVjdCBydGVfaGFzaF9rZXkgKikoDQo+PiBAQCAtMTQwOCw3ICsxNDA5LDggQEAgX19ydGVf aGFzaF9sb29rdXBfYnVsayhjb25zdCBzdHJ1Y3QgcnRlX2hhc2ggKmgsIGNvbnN0IHZvaWQgKipr ZXlzLA0KPj4gfQ0KPj4NCj4+IGlmIChzZWNfaGl0bWFza1tpXSkgew0KPj4gLXVpbnQzMl90IGZp cnN0X2hpdCA9IF9fYnVpbHRpbl9jdHpsKHNlY19oaXRtYXNrW2ldKTsNCj4+ICt1aW50MzJfdCBm aXJzdF9oaXQgPQ0KPj4gK19fYnVpbHRpbl9jdHpsKHNlY19oaXRtYXNrW2ldKSA+PiAxOw0KPj4g dWludDMyX3Qga2V5X2lkeCA9IHNlY29uZGFyeV9ia3RbaV0tPmtleV9pZHhbZmlyc3RfaGl0XTsN Cj4+IGNvbnN0IHN0cnVjdCBydGVfaGFzaF9rZXkgKmtleV9zbG90ID0NCj4+IChjb25zdCBzdHJ1 Y3QgcnRlX2hhc2hfa2V5ICopKA0KPj4gQEAgLTE0MjIsNyArMTQyNCw4IEBAIF9fcnRlX2hhc2hf bG9va3VwX2J1bGsoY29uc3Qgc3RydWN0IHJ0ZV9oYXNoICpoLCBjb25zdCB2b2lkICoqa2V5cywN Cj4+IGZvciAoaSA9IDA7IGkgPCBudW1fa2V5czsgaSsrKSB7DQo+PiBwb3NpdGlvbnNbaV0gPSAt RU5PRU5UOw0KPj4gd2hpbGUgKHByaW1faGl0bWFza1tpXSkgew0KPj4gLXVpbnQzMl90IGhpdF9p bmRleCA9IF9fYnVpbHRpbl9jdHpsKHByaW1faGl0bWFza1tpXSk7DQo+PiArdWludDMyX3QgaGl0 X2luZGV4ID0NCj4+ICtfX2J1aWx0aW5fY3R6bChwcmltX2hpdG1hc2tbaV0pID4+IDE7DQo+Pg0K Pj4gdWludDMyX3Qga2V5X2lkeCA9IHByaW1hcnlfYmt0W2ldLT5rZXlfaWR4W2hpdF9pbmRleF07 DQo+PiBjb25zdCBzdHJ1Y3QgcnRlX2hhc2hfa2V5ICprZXlfc2xvdCA9DQo+PiBAQCAtMTQ0MSwx MSArMTQ0NCwxMiBAQCBfX3J0ZV9oYXNoX2xvb2t1cF9idWxrKGNvbnN0IHN0cnVjdCBydGVfaGFz aCAqaCwgY29uc3Qgdm9pZCAqKmtleXMsDQo+PiBwb3NpdGlvbnNbaV0gPSBrZXlfaWR4IC0gMTsN Cj4+IGdvdG8gbmV4dF9rZXk7DQo+PiB9DQo+PiAtcHJpbV9oaXRtYXNrW2ldICY9IH4oMSA8PCAo aGl0X2luZGV4KSk7DQo+PiArcHJpbV9oaXRtYXNrW2ldICY9IH4oM1VMTCA8PCAoaGl0X2luZGV4 IDw8IDEpKTsNCj4+IH0NCj4+DQo+PiB3aGlsZSAoc2VjX2hpdG1hc2tbaV0pIHsNCj4+IC11aW50 MzJfdCBoaXRfaW5kZXggPSBfX2J1aWx0aW5fY3R6bChzZWNfaGl0bWFza1tpXSk7DQo+PiArdWlu dDMyX3QgaGl0X2luZGV4ID0NCj4+ICtfX2J1aWx0aW5fY3R6bChzZWNfaGl0bWFza1tpXSkgPj4g MTsNCj4+DQo+PiB1aW50MzJfdCBrZXlfaWR4ID0gc2Vjb25kYXJ5X2JrdFtpXS0+a2V5X2lkeFto aXRfaW5kZXhdOw0KPj4gY29uc3Qgc3RydWN0IHJ0ZV9oYXNoX2tleSAqa2V5X3Nsb3QgPQ0KPj4g QEAgLTE0NjUsNyArMTQ2OSw3IEBAIF9fcnRlX2hhc2hfbG9va3VwX2J1bGsoY29uc3Qgc3RydWN0 IHJ0ZV9oYXNoICpoLCBjb25zdCB2b2lkICoqa2V5cywNCj4+IHBvc2l0aW9uc1tpXSA9IGtleV9p ZHggLSAxOw0KPj4gZ290byBuZXh0X2tleTsNCj4+IH0NCj4+IC1zZWNfaGl0bWFza1tpXSAmPSB+ KDEgPDwgKGhpdF9pbmRleCkpOw0KPj4gK3NlY19oaXRtYXNrW2ldICY9IH4oM1VMTCA8PCAoaGl0 X2luZGV4IDw8IDEpKTsNCj4+IH0NCj4+DQo+PiBuZXh0X2tleToNCj4+IEBAIC0xNDg4LDEwICsx NDkyLDEwIEBAIF9fcnRlX2hhc2hfbG9va3VwX2J1bGsoY29uc3Qgc3RydWN0IHJ0ZV9oYXNoICpo LCBjb25zdCB2b2lkICoqa2V5cywNCj4+IEZPUl9FQUNIX0JVQ0tFVChjdXJfYmt0LCBuZXh0X2Jr dCkgew0KPj4gaWYgKGRhdGEgIT0gTlVMTCkNCj4+IHJldCA9IHNlYXJjaF9vbmVfYnVja2V0KGgs IGtleXNbaV0sDQo+PiAtc2VjX2hhc2hbaV0sICZkYXRhW2ldLCBjdXJfYmt0KTsNCj4+ICtzaWdb aV0sICZkYXRhW2ldLCBjdXJfYmt0KTsNCj4+IGVsc2UNCj4+IHJldCA9IHNlYXJjaF9vbmVfYnVj a2V0KGgsIGtleXNbaV0sDQo+PiAtc2VjX2hhc2hbaV0sIE5VTEwsIGN1cl9ia3QpOw0KPj4gK3Np Z1tpXSwgTlVMTCwgY3VyX2JrdCk7DQo+PiBpZiAocmV0ICE9IC0xKSB7DQo+PiBwb3NpdGlvbnNb aV0gPSByZXQ7DQo+PiBoaXRzIHw9IDFVTEwgPDwgaTsNCj4+IGRpZmYgLS1naXQgYS9saWIvbGli cnRlX2hhc2gvcnRlX2N1Y2tvb19oYXNoLmggYi9saWIvbGlicnRlX2hhc2gvcnRlX2N1Y2tvb19o YXNoLmgNCj4+IGluZGV4IGU2MDE1MjAuLjc3NTNjZDggMTAwNjQ0DQo+PiAtLS0gYS9saWIvbGli cnRlX2hhc2gvcnRlX2N1Y2tvb19oYXNoLmgNCj4+ICsrKyBiL2xpYi9saWJydGVfaGFzaC9ydGVf Y3Vja29vX2hhc2guaA0KPj4gQEAgLTEyOSwxOCArMTI5LDE1IEBAIHN0cnVjdCBydGVfaGFzaF9r ZXkgew0KPj4gZW51bSBydGVfaGFzaF9zaWdfY29tcGFyZV9mdW5jdGlvbiB7DQo+PiBSVEVfSEFT SF9DT01QQVJFX1NDQUxBUiA9IDAsDQo+PiBSVEVfSEFTSF9DT01QQVJFX1NTRSwNCj4+IC1SVEVf SEFTSF9DT01QQVJFX0FWWDIsDQo+PiBSVEVfSEFTSF9DT01QQVJFX05VTQ0KPj4gfTsNCj4+DQo+ PiAvKiogQnVja2V0IHN0cnVjdHVyZSAqLw0KPj4gc3RydWN0IHJ0ZV9oYXNoX2J1Y2tldCB7DQo+ PiAtaGFzaF9zaWdfdCBzaWdfY3VycmVudFtSVEVfSEFTSF9CVUNLRVRfRU5UUklFU107DQo+PiAr dWludDE2X3Qgc2lnX2N1cnJlbnRbUlRFX0hBU0hfQlVDS0VUX0VOVFJJRVNdOw0KPj4NCj4+IHVp bnQzMl90IGtleV9pZHhbUlRFX0hBU0hfQlVDS0VUX0VOVFJJRVNdOw0KPj4NCj4+IC1oYXNoX3Np Z190IHNpZ19hbHRbUlRFX0hBU0hfQlVDS0VUX0VOVFJJRVNdOw0KPj4gLQ0KPj4gdWludDhfdCBm bGFnW1JURV9IQVNIX0JVQ0tFVF9FTlRSSUVTXTsNCj4+DQo+PiB2b2lkICpuZXh0Ow0KPj4gQEAg LTE5Myw2ICsxOTAsNyBAQCBzdHJ1Y3QgcnRlX2hhc2ggew0KPj4NCj4+IHN0cnVjdCBxdWV1ZV9u b2RlIHsNCj4+IHN0cnVjdCBydGVfaGFzaF9idWNrZXQgKmJrdDsgLyogQ3VycmVudCBidWNrZXQg b24gdGhlIGJmcyBzZWFyY2ggKi8NCj4+ICt1aW50MzJfdCBjdXJfYmt0X2lkeDsNCj4+DQo+PiBz dHJ1Y3QgcXVldWVfbm9kZSAqcHJldjsgICAgIC8qIFBhcmVudChidWNrZXQpIGluIHNlYXJjaCBw YXRoICovDQo+PiBpbnQgcHJldl9zbG90OyAgICAgICAgICAgICAgIC8qIFBhcmVudChzbG90KSBp biBzZWFyY2ggcGF0aCAqLw0KPj4gZGlmZiAtLWdpdCBhL2xpYi9saWJydGVfaGFzaC9ydGVfaGFz aC5oIGIvbGliL2xpYnJ0ZV9oYXNoL3J0ZV9oYXNoLmgNCj4+IGluZGV4IDExZDhlMjguLjZhY2U2 NGUgMTAwNjQ0DQo+PiAtLS0gYS9saWIvbGlicnRlX2hhc2gvcnRlX2hhc2guaA0KPj4gKysrIGIv bGliL2xpYnJ0ZV9oYXNoL3J0ZV9oYXNoLmgNCj4+IEBAIC00MCw3ICs0MCwxMCBAQCBleHRlcm4g IkMiIHsNCj4+IC8qKiBGbGFnIHRvIGluZGljYXRlIHRoZSBleHRlbmRhYmUgYnVja2V0IHRhYmxl IGZlYXR1cmUgc2hvdWxkIGJlIHVzZWQgKi8NCj4+ICNkZWZpbmUgUlRFX0hBU0hfRVhUUkFfRkxB R1NfRVhUX1RBQkxFIDB4MDgNCj4+DQo+PiAtLyoqIFNpZ25hdHVyZSBvZiBrZXkgdGhhdCBpcyBz dG9yZWQgaW50ZXJuYWxseS4gKi8NCj4+ICsvKioNCj4+ICsgKiBUaGUgdHlwZSBvZiBoYXNoIHZh bHVlIG9mIGEga2V5Lg0KPj4gKyAqIEl0IHNob3VsZCBiZSBhIHZhbHVlIG9mIGF0IGxlYXN0IDMy Yml0IHdpdGggZnVsbHkgcmFuZG9tIHBhdHRlcm4uDQo+PiArICovDQo+PiB0eXBlZGVmIHVpbnQz Ml90IGhhc2hfc2lnX3Q7DQo+Pg0KPj4gLyoqIFR5cGUgb2YgZnVuY3Rpb24gdGhhdCBjYW4gYmUg dXNlZCBmb3IgY2FsY3VsYXRpbmcgdGhlIGhhc2ggdmFsdWUuICovDQo+PiAtLQ0KPj4gMi43LjQN Cj4+DQo+DQo+SU1QT1JUQU5UIE5PVElDRTogVGhlIGNvbnRlbnRzIG9mIHRoaXMgZW1haWwgYW5k IGFueSBhdHRhY2htZW50cyBhcmUgY29uZmlkZW50aWFsIGFuZCBtYXkgYWxzbyBiZSBwcml2aWxl Z2VkLiBJZiB5b3UgYXJlIG5vdCB0aGUNCj5pbnRlbmRlZCByZWNpcGllbnQsIHBsZWFzZSBub3Rp ZnkgdGhlIHNlbmRlciBpbW1lZGlhdGVseSBhbmQgZG8gbm90IGRpc2Nsb3NlIHRoZSBjb250ZW50 cyB0byBhbnkgb3RoZXIgcGVyc29uLCB1c2UgaXQgZm9yIGFueSBwdXJwb3NlLA0KPm9yIHN0b3Jl IG9yIGNvcHkgdGhlIGluZm9ybWF0aW9uIGluIGFueSBtZWRpdW0uIFRoYW5rIHlvdS4NCg==