From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 74476A0588; Thu, 16 Apr 2020 12:23:47 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 555BE1D58F; Thu, 16 Apr 2020 12:23:47 +0200 (CEST) Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by dpdk.org (Postfix) with ESMTP id 612881D586 for ; Thu, 16 Apr 2020 12:23:45 +0200 (CEST) IronPort-SDR: 1EwRtROc1IVPwqhaCz6Y351FWoS++FnXBsnvzI4BGJvuc5bSPCVMFlznQFEkJbFFYAKXklYlb5 prmaCXhhGywA== X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga007.fm.intel.com ([10.253.24.52]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 16 Apr 2020 03:23:44 -0700 IronPort-SDR: 9sR5R1v+24Vx7QidLzZdOl0ZsC8+Ak7qOJDtDZMX4alVgJgZo7ZITK7tIIRg7rEKXkI74zabPE +VAJ8mghUNWQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.72,390,1580803200"; d="scan'208";a="244359539" Received: from irsmsx102.ger.corp.intel.com ([163.33.3.155]) by fmsmga007.fm.intel.com with ESMTP; 16 Apr 2020 03:23:43 -0700 Received: from irsmsx605.ger.corp.intel.com (163.33.146.138) by IRSMSX102.ger.corp.intel.com (163.33.3.155) with Microsoft SMTP Server (TLS) id 14.3.439.0; Thu, 16 Apr 2020 11:23:42 +0100 Received: from irsmsx605.ger.corp.intel.com (163.33.146.138) by IRSMSX605.ger.corp.intel.com (163.33.146.138) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 16 Apr 2020 11:23:42 +0100 Received: from irsmsx605.ger.corp.intel.com ([163.33.146.138]) by IRSMSX605.ger.corp.intel.com ([163.33.146.138]) with mapi id 15.01.1713.004; Thu, 16 Apr 2020 11:23:42 +0100 From: "Medvedkin, Vladimir" To: =?utf-8?B?TWF0dGlhcyBSw7ZubmJsb20=?= , "dev@dpdk.org" CC: "Ananyev, Konstantin" , "Wang, Yipeng1" , "Gobriel, Sameh" , "Richardson, Bruce" Thread-Topic: [dpdk-dev] [PATCH v3 1/4] hash: add k32v64 hash library Thread-Index: AQHWE1I+B+djQ4hyIE6Z2Vz225wY26h6eLSAgAERhMA= Date: Thu, 16 Apr 2020 10:23:41 +0000 Message-ID: References: <0e767e9171c4e90d57ec06b50d6bf3b7d79828b1.1586974411.git.vladimir.medvedkin@intel.com> <2c0ed656-a8dc-5536-6eff-a63c31d5458c@ericsson.com> In-Reply-To: <2c0ed656-a8dc-5536-6eff-a63c31d5458c@ericsson.com> Accept-Language: en-IE, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-reaction: no-action dlp-version: 11.2.0.6 dlp-product: dlpe-windows x-originating-ip: [163.33.253.164] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 Subject: Re: [dpdk-dev] [PATCH v3 1/4] hash: add k32v64 hash library 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: , Errors-To: dev-bounces@dpdk.org Sender: "dev" SGkgTWF0dGlhcywNCg0KLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCkZyb206IE1hdHRpYXMg UsO2bm5ibG9tIDxtYXR0aWFzLnJvbm5ibG9tQGVyaWNzc29uLmNvbT4gDQpTZW50OiBXZWRuZXNk YXksIEFwcmlsIDE1LCAyMDIwIDg6MDAgUE0NClRvOiBNZWR2ZWRraW4sIFZsYWRpbWlyIDx2bGFk aW1pci5tZWR2ZWRraW5AaW50ZWwuY29tPjsgZGV2QGRwZGsub3JnDQpDYzogQW5hbnlldiwgS29u c3RhbnRpbiA8a29uc3RhbnRpbi5hbmFueWV2QGludGVsLmNvbT47IFdhbmcsIFlpcGVuZzEgPHlp cGVuZzEud2FuZ0BpbnRlbC5jb20+OyBHb2JyaWVsLCBTYW1laCA8c2FtZWguZ29icmllbEBpbnRl bC5jb20+OyBSaWNoYXJkc29uLCBCcnVjZSA8YnJ1Y2UucmljaGFyZHNvbkBpbnRlbC5jb20+DQpT dWJqZWN0OiBSZTogW2RwZGstZGV2XSBbUEFUQ0ggdjMgMS80XSBoYXNoOiBhZGQgazMydjY0IGhh c2ggbGlicmFyeQ0KDQpPbiAyMDIwLTA0LTE1IDIwOjE3LCBWbGFkaW1pciBNZWR2ZWRraW4gd3Jv dGU6DQo+IEszMlY2NCBoYXNoIGlzIGEgaGFzaCB0YWJsZSB0aGF0IHN1cHBvcnRzIDMyIGJpdCBr ZXlzIGFuZCA2NCBiaXQgdmFsdWVzLg0KPiBUaGlzIHRhYmxlIGlzIGhhc2ggZnVuY3Rpb24gYWdu b3N0aWMgc28gdXNlciBtdXN0IHByb3ZpZGUgDQo+IHByZWNhbGN1bGF0ZWQgaGFzaCBzaWduYXR1 cmUgZm9yIGFkZC9kZWxldGUvbG9va3VwIG9wZXJhdGlvbnMuDQo+DQo+IFNpZ25lZC1vZmYtYnk6 IFZsYWRpbWlyIE1lZHZlZGtpbiA8dmxhZGltaXIubWVkdmVka2luQGludGVsLmNvbT4NCj4gLS0t DQo+ICAgbGliL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIgKy0NCj4g ICBsaWIvbGlicnRlX2hhc2gvTWFrZWZpbGUgICAgICAgICAgICAgICB8ICAxMyArLQ0KPiAgIGxp Yi9saWJydGVfaGFzaC9rMzJ2NjRfaGFzaF9hdng1MTJ2bC5jIHwgIDU2ICsrKysrKw0KPiAgIGxp Yi9saWJydGVfaGFzaC9tZXNvbi5idWlsZCAgICAgICAgICAgIHwgIDE3ICstDQo+ICAgbGliL2xp YnJ0ZV9oYXNoL3J0ZV9oYXNoX3ZlcnNpb24ubWFwICAgfCAgIDYgKy0NCj4gICBsaWIvbGlicnRl X2hhc2gvcnRlX2szMnY2NF9oYXNoLmMgICAgICB8IDMxNSArKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysNCj4gICBsaWIvbGlicnRlX2hhc2gvcnRlX2szMnY2NF9oYXNoLmggICAgICB8 IDIxMSArKysrKysrKysrKysrKysrKysrKysrDQo+ICAgNyBmaWxlcyBjaGFuZ2VkLCA2MTUgaW5z ZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkNCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL2xp YnJ0ZV9oYXNoL2szMnY2NF9oYXNoX2F2eDUxMnZsLmMNCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQg bGliL2xpYnJ0ZV9oYXNoL3J0ZV9rMzJ2NjRfaGFzaC5jDQo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0 IGxpYi9saWJydGVfaGFzaC9ydGVfazMydjY0X2hhc2guaA0KPg0KPiBkaWZmIC0tZ2l0IGEvbGli L01ha2VmaWxlIGIvbGliL01ha2VmaWxlIGluZGV4IDQ2YjkxYWUuLmE4YzAyZTQgMTAwNjQ0DQo+ IC0tLSBhL2xpYi9NYWtlZmlsZQ0KPiArKysgYi9saWIvTWFrZWZpbGUNCj4gQEAgLTQ4LDcgKzQ4 LDcgQEAgRElSUy0kKENPTkZJR19SVEVfTElCUlRFX1ZIT1NUKSArPSBsaWJydGVfdmhvc3QNCj4g ICBERVBESVJTLWxpYnJ0ZV92aG9zdCA6PSBsaWJydGVfZWFsIGxpYnJ0ZV9tZW1wb29sIGxpYnJ0 ZV9tYnVmIGxpYnJ0ZV9ldGhkZXYgXA0KPiAgIAkJCWxpYnJ0ZV9uZXQgbGlicnRlX2hhc2ggbGli cnRlX2NyeXB0b2Rldg0KPiAgIERJUlMtJChDT05GSUdfUlRFX0xJQlJURV9IQVNIKSArPSBsaWJy dGVfaGFzaCAtREVQRElSUy1saWJydGVfaGFzaCANCj4gOj0gbGlicnRlX2VhbCBsaWJydGVfcmlu Zw0KPiArREVQRElSUy1saWJydGVfaGFzaCA6PSBsaWJydGVfZWFsIGxpYnJ0ZV9yaW5nIGxpYnJ0 ZV9tZW1wb29sDQo+ICAgRElSUy0kKENPTkZJR19SVEVfTElCUlRFX0VGRCkgKz0gbGlicnRlX2Vm ZA0KPiAgIERFUERJUlMtbGlicnRlX2VmZCA6PSBsaWJydGVfZWFsIGxpYnJ0ZV9yaW5nIGxpYnJ0 ZV9oYXNoDQo+ICAgRElSUy0kKENPTkZJR19SVEVfTElCUlRFX1JJQikgKz0gbGlicnRlX3JpYiBk aWZmIC0tZ2l0IA0KPiBhL2xpYi9saWJydGVfaGFzaC9NYWtlZmlsZSBiL2xpYi9saWJydGVfaGFz aC9NYWtlZmlsZSBpbmRleCANCj4gZWM5Zjg2NC4uMDIzNjg5ZCAxMDA2NDQNCj4gLS0tIGEvbGli L2xpYnJ0ZV9oYXNoL01ha2VmaWxlDQo+ICsrKyBiL2xpYi9saWJydGVfaGFzaC9NYWtlZmlsZQ0K PiBAQCAtOCwxMyArOCwxNCBAQCBMSUIgPSBsaWJydGVfaGFzaC5hDQo+ICAgDQo+ICAgQ0ZMQUdT ICs9IC1PMw0KPiAgIENGTEFHUyArPSAkKFdFUlJPUl9GTEFHUykgLUkkKFNSQ0RJUikgLUxETElC UyArPSAtbHJ0ZV9lYWwgDQo+IC1scnRlX3JpbmcNCj4gK0xETElCUyArPSAtbHJ0ZV9lYWwgLWxy dGVfcmluZyAtbHJ0ZV9tZW1wb29sDQo+ICAgDQo+ICAgRVhQT1JUX01BUCA6PSBydGVfaGFzaF92 ZXJzaW9uLm1hcA0KPiAgIA0KPiAgICMgYWxsIHNvdXJjZSBhcmUgc3RvcmVkIGluIFNSQ1MteQ0K PiAgIFNSQ1MtJChDT05GSUdfUlRFX0xJQlJURV9IQVNIKSA6PSBydGVfY3Vja29vX2hhc2guYw0K PiAgIFNSQ1MtJChDT05GSUdfUlRFX0xJQlJURV9IQVNIKSArPSBydGVfZmJrX2hhc2guYw0KPiAr U1JDUy0kKENPTkZJR19SVEVfTElCUlRFX0hBU0gpICs9IHJ0ZV9rMzJ2NjRfaGFzaC5jDQo+ICAg DQo+ICAgIyBpbnN0YWxsIHRoaXMgaGVhZGVyIGZpbGUNCj4gICBTWU1MSU5LLSQoQ09ORklHX1JU RV9MSUJSVEVfSEFTSCktaW5jbHVkZSA6PSBydGVfaGFzaC5oIEBAIC0yNyw1IA0KPiArMjgsMTUg QEAgZW5kaWYNCj4gICBTWU1MSU5LLSQoQ09ORklHX1JURV9MSUJSVEVfSEFTSCktaW5jbHVkZSAr PSBydGVfamhhc2guaA0KPiAgIFNZTUxJTkstJChDT05GSUdfUlRFX0xJQlJURV9IQVNIKS1pbmNs dWRlICs9IHJ0ZV90aGFzaC5oDQo+ICAgU1lNTElOSy0kKENPTkZJR19SVEVfTElCUlRFX0hBU0gp LWluY2x1ZGUgKz0gcnRlX2Zia19oYXNoLmgNCj4gK1NZTUxJTkstJChDT05GSUdfUlRFX0xJQlJU RV9IQVNIKS1pbmNsdWRlICs9IHJ0ZV9rMzJ2NjRfaGFzaC5oDQo+ICsNCj4gK0NDX0FWWDUxMlZM X1NVUFBPUlQ9JChzaGVsbCAkKENDKSAtbWF2eDUxMnZsIC1kTSAtRSAtIDwvZGV2L251bGwgMj4m MSANCj4gK3wgXCBncmVwIC1xIF9fQVZYNTEyVkxfXyAmJiBlY2hvIDEpDQo+ICsNCj4gK2lmZXEg KCQoQ0NfQVZYNTEyVkxfU1VQUE9SVCksIDEpDQo+ICsJU1JDUy0kKENPTkZJR19SVEVfTElCUlRF X0hBU0gpICs9IGszMnY2NF9oYXNoX2F2eDUxMnZsLmMNCj4gKwlDRkxBR1NfazMydjY0X2hhc2hf YXZ4NTEydmwubyArPSAtbWF2eDUxMnZsDQo+ICsJQ0ZMQUdTX3J0ZV9rMzJ2NjRfaGFzaC5vICs9 IC1EQ0NfQVZYNTEyVkxfU1VQUE9SVCBlbmRpZg0KPiAgIA0KPiAgIGluY2x1ZGUgJChSVEVfU0RL KS9tay9ydGUubGliLm1rDQo+IGRpZmYgLS1naXQgYS9saWIvbGlicnRlX2hhc2gvazMydjY0X2hh c2hfYXZ4NTEydmwuYyANCj4gYi9saWIvbGlicnRlX2hhc2gvazMydjY0X2hhc2hfYXZ4NTEydmwu Yw0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwLi43YzcwZGQyDQo+IC0t LSAvZGV2L251bGwNCj4gKysrIGIvbGliL2xpYnJ0ZV9oYXNoL2szMnY2NF9oYXNoX2F2eDUxMnZs LmMNCj4gQEAgLTAsMCArMSw1NiBAQA0KPiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJT RC0zLUNsYXVzZQ0KPiArICogQ29weXJpZ2h0KGMpIDIwMjAgSW50ZWwgQ29ycG9yYXRpb24gICov DQo+ICsNCj4gKyNpbmNsdWRlIDxydGVfazMydjY0X2hhc2guaD4NCj4gKw0KPiAraW50DQo+ICtr MzJ2NjRfaGFzaF9idWxrX2xvb2t1cF9hdng1MTJ2bChzdHJ1Y3QgcnRlX2szMnY2NF9oYXNoX3Rh YmxlICp0YWJsZSwNCj4gKwl1aW50MzJfdCAqa2V5cywgdWludDMyX3QgKmhhc2hlcywgdWludDY0 X3QgKnZhbHVlcywgdW5zaWduZWQgaW50IG4pOw0KPiArDQo+ICtzdGF0aWMgaW5saW5lIGludA0K PiArazMydjY0X2NtcF9rZXlzX2F2eDUxMnZsKHN0cnVjdCBydGVfazMydjY0X2hhc2hfYnVja2V0 ICpidWNrZXQsIHVpbnQzMl90IGtleSwNCj4gKwl1aW50NjRfdCAqdmFsKQ0KPiArew0KPiArCV9f bTEyOGkga2V5cywgc3JjaF9rZXk7DQo+ICsJX19tbWFzazggbXNrOw0KPiArDQo+ICsJa2V5cyA9 IF9tbV9sb2FkX3NpMTI4KCh2b2lkICopYnVja2V0KTsNCj4gKwlzcmNoX2tleSA9IF9tbV9zZXQx X2VwaTMyKGtleSk7DQo+ICsNCj4gKwltc2sgPSBfbW1fbWFza19jbXBlcV9lcGkzMl9tYXNrKGJ1 Y2tldC0+a2V5X21hc2ssIGtleXMsIHNyY2hfa2V5KTsNCj4gKwlpZiAobXNrKSB7DQo+ICsJCSp2 YWwgPSBidWNrZXQtPnZhbFtfX2J1aWx0aW5fY3R6KG1zayldOw0KPiArCQlyZXR1cm4gMTsNCj4g Kwl9DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGlubGluZSBpbnQN Cj4gK2szMnY2NF9oYXNoX2xvb2t1cF9hdng1MTJ2bChzdHJ1Y3QgcnRlX2szMnY2NF9oYXNoX3Rh YmxlICp0YWJsZSwgdWludDMyX3Qga2V5LA0KPiArCXVpbnQzMl90IGhhc2gsIHVpbnQ2NF90ICp2 YWx1ZSkNCj4gK3sNCj4gKwlyZXR1cm4gX19rMzJ2NjRfaGFzaF9sb29rdXAodGFibGUsIGtleSwg aGFzaCwgdmFsdWUsDQo+ICsJCWszMnY2NF9jbXBfa2V5c19hdng1MTJ2bCk7DQo+ICt9DQo+ICsN Cj4gK2ludA0KPiArazMydjY0X2hhc2hfYnVsa19sb29rdXBfYXZ4NTEydmwoc3RydWN0IHJ0ZV9r MzJ2NjRfaGFzaF90YWJsZSAqdGFibGUsDQo+ICsJdWludDMyX3QgKmtleXMsIHVpbnQzMl90ICpo YXNoZXMsIHVpbnQ2NF90ICp2YWx1ZXMsIHVuc2lnbmVkIGludCBuKSANCj4gK3sNCj4gKwlpbnQg cmV0LCBjbnQgPSAwOw0KPiArCXVuc2lnbmVkIGludCBpOw0KPiArDQo+ICsJaWYgKHVubGlrZWx5 KCh0YWJsZSA9PSBOVUxMKSB8fCAoa2V5cyA9PSBOVUxMKSB8fCAoaGFzaGVzID09IE5VTEwpIHx8 DQo+ICsJCQkodmFsdWVzID09IE5VTEwpKSkNCj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ICsNCj4g Kwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7DQo+ICsJCXJldCA9IGszMnY2NF9oYXNoX2xvb2t1 cF9hdng1MTJ2bCh0YWJsZSwga2V5c1tpXSwgaGFzaGVzW2ldLA0KPiArCQkJJnZhbHVlc1tpXSk7 DQo+ICsJCWlmIChyZXQgPT0gMCkNCj4gKwkJCWNudCsrOw0KPiArCX0NCj4gKwlyZXR1cm4gY250 Ow0KPiArfQ0KPiBkaWZmIC0tZ2l0IGEvbGliL2xpYnJ0ZV9oYXNoL21lc29uLmJ1aWxkIGIvbGli L2xpYnJ0ZV9oYXNoL21lc29uLmJ1aWxkIA0KPiBpbmRleCA2YWI0NmFlLi44YTM3Y2M0IDEwMDY0 NA0KPiAtLS0gYS9saWIvbGlicnRlX2hhc2gvbWVzb24uYnVpbGQNCj4gKysrIGIvbGliL2xpYnJ0 ZV9oYXNoL21lc29uLmJ1aWxkDQo+IEBAIC0zLDEwICszLDIzIEBADQo+ICAgDQo+ICAgaGVhZGVy cyA9IGZpbGVzKCdydGVfY3JjX2FybTY0LmgnLA0KPiAgIAkncnRlX2Zia19oYXNoLmgnLA0KPiAr CSdydGVfazMydjY0X2hhc2guaCcsDQo+ICAgCSdydGVfaGFzaF9jcmMuaCcsDQo+ICAgCSdydGVf aGFzaC5oJywNCj4gICAJJ3J0ZV9qaGFzaC5oJywNCj4gICAJJ3J0ZV90aGFzaC5oJykNCj4gICAN Cj4gLXNvdXJjZXMgPSBmaWxlcygncnRlX2N1Y2tvb19oYXNoLmMnLCAncnRlX2Zia19oYXNoLmMn KSAtZGVwcyArPSANCj4gWydyaW5nJ10NCj4gK3NvdXJjZXMgPSBmaWxlcygncnRlX2N1Y2tvb19o YXNoLmMnLCAncnRlX2Zia19oYXNoLmMnLCANCj4gKydydGVfazMydjY0X2hhc2guYycpIGRlcHMg Kz0gWydyaW5nJywgJ21lbXBvb2wnXQ0KPiArDQo+ICtpZiBkcGRrX2NvbmYuaGFzKCdSVEVfQVJD SF9YODYnKQ0KPiArCWlmIGNjLmhhc19hcmd1bWVudCgnLW1hdng1MTJ2bCcpDQo+ICsJCWF2eDUx Ml90bXBsaWIgPSBzdGF0aWNfbGlicmFyeSgnYXZ4NTEyX3RtcCcsDQo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICdrMzJ2NjRfaGFzaF9hdng1MTJ2bC5jJywNCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kZW5jaWVzOiBzdGF0aWNfcnRlX21lbXBvb2ws DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNfYXJnczogY2ZsYWdzICsgWyct bWF2eDUxMnZsJ10pDQo+ICsgICAgICAgICAgICAgICAgb2JqcyArPSBhdng1MTJfdG1wbGliLmV4 dHJhY3Rfb2JqZWN0cygnazMydjY0X2hhc2hfYXZ4NTEydmwuYycpDQo+ICsgICAgICAgICAgICAg ICAgY2ZsYWdzICs9ICctRENDX0FWWDUxMlZMX1NVUFBPUlQnDQo+ICsNCj4gKwllbmRpZg0KPiAr ZW5kaWYNCj4gZGlmZiAtLWdpdCBhL2xpYi9saWJydGVfaGFzaC9ydGVfaGFzaF92ZXJzaW9uLm1h cCANCj4gYi9saWIvbGlicnRlX2hhc2gvcnRlX2hhc2hfdmVyc2lvbi5tYXANCj4gaW5kZXggYThm YmJjMy4uOWE0ZjJmNiAxMDA2NDQNCj4gLS0tIGEvbGliL2xpYnJ0ZV9oYXNoL3J0ZV9oYXNoX3Zl cnNpb24ubWFwDQo+ICsrKyBiL2xpYi9saWJydGVfaGFzaC9ydGVfaGFzaF92ZXJzaW9uLm1hcA0K PiBAQCAtMzQsNSArMzQsOSBAQCBFWFBFUklNRU5UQUwgew0KPiAgIA0KPiAgIAlydGVfaGFzaF9m cmVlX2tleV93aXRoX3Bvc2l0aW9uOw0KPiAgIAlydGVfaGFzaF9tYXhfa2V5X2lkOw0KPiAtDQo+ ICsJcnRlX2szMnY2NF9oYXNoX2NyZWF0ZTsNCj4gKwlydGVfazMydjY0X2hhc2hfZmluZF9leGlz dGluZzsNCj4gKwlydGVfazMydjY0X2hhc2hfZnJlZTsNCj4gKwlydGVfazMydjY0X2hhc2hfYWRk Ow0KPiArCXJ0ZV9rMzJ2NjRfaGFzaF9kZWxldGU7DQo+ICAgfTsNCj4gZGlmZiAtLWdpdCBhL2xp Yi9saWJydGVfaGFzaC9ydGVfazMydjY0X2hhc2guYyANCj4gYi9saWIvbGlicnRlX2hhc2gvcnRl X2szMnY2NF9oYXNoLmMNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMC4u N2VkOTRiNA0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL2xpYi9saWJydGVfaGFzaC9ydGVfazMy djY0X2hhc2guYw0KPiBAQCAtMCwwICsxLDMxNSBAQA0KPiArLyogU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IEJTRC0zLUNsYXVzZQ0KPiArICogQ29weXJpZ2h0KGMpIDIwMjAgSW50ZWwgQ29ycG9y YXRpb24gICovDQo+ICsNCj4gKyNpbmNsdWRlIDxzdHJpbmcuaD4NCj4gKw0KPiArI2luY2x1ZGUg PHJ0ZV9lYWxfbWVtY29uZmlnLmg+DQo+ICsjaW5jbHVkZSA8cnRlX2Vycm5vLmg+DQo+ICsjaW5j bHVkZSA8cnRlX21hbGxvYy5oPg0KPiArI2luY2x1ZGUgPHJ0ZV9tZW1vcnkuaD4NCj4gKyNpbmNs dWRlIDxydGVfdGFpbHEuaD4NCj4gKw0KPiArI2luY2x1ZGUgPHJ0ZV9rMzJ2NjRfaGFzaC5oPg0K PiArDQo+ICtUQUlMUV9IRUFEKHJ0ZV9rMzJ2NjRfaGFzaF9saXN0LCBydGVfdGFpbHFfZW50cnkp Ow0KPiArDQo+ICtzdGF0aWMgc3RydWN0IHJ0ZV90YWlscV9lbGVtIHJ0ZV9rMzJ2NjRfaGFzaF90 YWlscSA9IHsNCj4gKwkubmFtZSA9ICJSVEVfSzMyVjY0X0hBU0giLA0KPiArfTsNCj4gKw0KPiAr RUFMX1JFR0lTVEVSX1RBSUxRKHJ0ZV9rMzJ2NjRfaGFzaF90YWlscSk7DQo+ICsNCj4gKyNkZWZp bmUgVkFMSURfS0VZX01TSyAgICAgICAgICAgKCgxIDw8IFJURV9LMzJWNjRfS0VZU19QRVJfQlVD S0VUKSAtIDEpDQo+ICsNCj4gKyNpZmRlZiBDQ19BVlg1MTJWTF9TVVBQT1JUDQo+ICtpbnQNCj4g K2szMnY2NF9oYXNoX2J1bGtfbG9va3VwX2F2eDUxMnZsKHN0cnVjdCBydGVfazMydjY0X2hhc2hf dGFibGUgKnRhYmxlLA0KPiArCXVpbnQzMl90ICprZXlzLCB1aW50MzJfdCAqaGFzaGVzLCB1aW50 NjRfdCAqdmFsdWVzLCB1bnNpZ25lZCBpbnQgbik7IA0KPiArI2VuZGlmDQo+ICsNCj4gK3N0YXRp YyBpbnQNCj4gK2szMnY2NF9oYXNoX2J1bGtfbG9va3VwKHN0cnVjdCBydGVfazMydjY0X2hhc2hf dGFibGUgKnRhYmxlLCB1aW50MzJfdCAqa2V5cywNCj4gKwl1aW50MzJfdCAqaGFzaGVzLCB1aW50 NjRfdCAqdmFsdWVzLCB1bnNpZ25lZCBpbnQgbikgew0KPiArCWludCByZXQsIGNudCA9IDA7DQo+ ICsJdW5zaWduZWQgaW50IGk7DQo+ICsNCj4gKwlpZiAodW5saWtlbHkoKHRhYmxlID09IE5VTEwp IHx8IChrZXlzID09IE5VTEwpIHx8IChoYXNoZXMgPT0gTlVMTCkgfHwNCj4gKwkJCSh2YWx1ZXMg PT0gTlVMTCkpKQ0KPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gKw0KPiArCWZvciAoaSA9IDA7IGkg PCBuOyBpKyspIHsNCj4gKwkJcmV0ID0gcnRlX2szMnY2NF9oYXNoX2xvb2t1cCh0YWJsZSwga2V5 c1tpXSwgaGFzaGVzW2ldLA0KPiArCQkJJnZhbHVlc1tpXSk7DQo+ICsJCWlmIChyZXQgPT0gMCkN Cj4gKwkJCWNudCsrOw0KPiArCX0NCj4gKwlyZXR1cm4gY250Ow0KPiArfQ0KPiArDQo+ICtzdGF0 aWMgcnRlX2szMnY2NF9oYXNoX2J1bGtfbG9va3VwX3QNCj4gK2dldF9sb29rdXBfYnVsa19mbih2 b2lkKQ0KPiArew0KPiArI2lmZGVmIENDX0FWWDUxMlZMX1NVUFBPUlQNCj4gKwlpZiAocnRlX2Nw dV9nZXRfZmxhZ19lbmFibGVkKFJURV9DUFVGTEFHX0FWWDUxMkYpKQ0KPiArCQlyZXR1cm4gazMy djY0X2hhc2hfYnVsa19sb29rdXBfYXZ4NTEydmw7ICNlbmRpZg0KPiArCXJldHVybiBrMzJ2NjRf aGFzaF9idWxrX2xvb2t1cDsNCj4gK30NCj4gKw0KPiAraW50DQo+ICtydGVfazMydjY0X2hhc2hf YWRkKHN0cnVjdCBydGVfazMydjY0X2hhc2hfdGFibGUgKnRhYmxlLCB1aW50MzJfdCBrZXksDQo+ ICsJdWludDMyX3QgaGFzaCwgdWludDY0X3QgdmFsdWUpDQo+ICt7DQo+ICsJdWludDMyX3QgYnVj a2V0Ow0KPiArCWludCBpLCBpZHgsIHJldDsNCj4gKwl1aW50OF90IG1zazsNCj4gKwlzdHJ1Y3Qg cnRlX2szMnY2NF9leHRfZW50ICp0bXAsICplbnQsICpwcmV2ID0gTlVMTDsNCj4gKw0KPiArCWlm ICh0YWJsZSA9PSBOVUxMKQ0KPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gKw0KPiArCWJ1Y2tldCA9 IGhhc2ggJiB0YWJsZS0+YnVja2V0X21zazsNCj4gKwkvKiBTZWFyY2gga2V5IGluIHRhYmxlLiBV cGRhdGUgdmFsdWUgaWYgZXhpc3RzICovDQo+ICsJZm9yIChpID0gMDsgaSA8IFJURV9LMzJWNjRf S0VZU19QRVJfQlVDS0VUOyBpKyspIHsNCj4gKwkJaWYgKChrZXkgPT0gdGFibGUtPnRbYnVja2V0 XS5rZXlbaV0pICYmDQo+ICsJCQkJKHRhYmxlLT50W2J1Y2tldF0ua2V5X21hc2sgJiAoMSA8PCBp KSkpIHsNCj4gKwkJCXRhYmxlLT50W2J1Y2tldF0udmFsW2ldID0gdmFsdWU7DQo+ICsJCQlyZXR1 cm4gMDsNCj4gKwkJfQ0KPiArCX0NCj4gKw0KPiArCWlmICghU0xJU1RfRU1QVFkoJnRhYmxlLT50 W2J1Y2tldF0uaGVhZCkpIHsNCj4gKwkJU0xJU1RfRk9SRUFDSChlbnQsICZ0YWJsZS0+dFtidWNr ZXRdLmhlYWQsIG5leHQpIHsNCj4gKwkJCWlmIChlbnQtPmtleSA9PSBrZXkpIHsNCj4gKwkJCQll bnQtPnZhbCA9IHZhbHVlOw0KPiArCQkJCXJldHVybiAwOw0KPiArCQkJfQ0KPiArCQl9DQo+ICsJ fQ0KPiArDQo+ICsJbXNrID0gfnRhYmxlLT50W2J1Y2tldF0ua2V5X21hc2sgJiBWQUxJRF9LRVlf TVNLOw0KPiArCWlmIChtc2spIHsNCj4gKwkJaWR4ID0gX19idWlsdGluX2N0eihtc2spOw0KPiAr CQl0YWJsZS0+dFtidWNrZXRdLmtleVtpZHhdID0ga2V5Ow0KPiArCQl0YWJsZS0+dFtidWNrZXRd LnZhbFtpZHhdID0gdmFsdWU7DQo+ICsJCXJ0ZV9zbXBfd21iKCk7DQo+ICsJCXRhYmxlLT50W2J1 Y2tldF0ua2V5X21hc2sgfD0gMSA8PCBpZHg7DQo+ICsJCXRhYmxlLT5uYl9lbnQrKzsNCj4gKwkJ cmV0dXJuIDA7DQo+ICsJfQ0KPiArDQo+ICsJcmV0ID0gcnRlX21lbXBvb2xfZ2V0KHRhYmxlLT5l eHRfZW50X3Bvb2wsICh2b2lkICoqKSZlbnQpOw0KPiArCWlmIChyZXQgPCAwKQ0KPiArCQlyZXR1 cm4gcmV0Ow0KPiArDQo+ICsJU0xJU1RfTkVYVChlbnQsIG5leHQpID0gTlVMTDsNCj4gKwllbnQt PmtleSA9IGtleTsNCj4gKwllbnQtPnZhbCA9IHZhbHVlOw0KPiArCXJ0ZV9zbXBfd21iKCk7DQo+ ICsJU0xJU1RfRk9SRUFDSCh0bXAsICZ0YWJsZS0+dFtidWNrZXRdLmhlYWQsIG5leHQpDQo+ICsJ CXByZXYgPSB0bXA7DQo+ICsNCj4gKwlpZiAocHJldiA9PSBOVUxMKQ0KPiArCQlTTElTVF9JTlNF UlRfSEVBRCgmdGFibGUtPnRbYnVja2V0XS5oZWFkLCBlbnQsIG5leHQpOw0KPiArCWVsc2UNCj4g KwkJU0xJU1RfSU5TRVJUX0FGVEVSKHByZXYsIGVudCwgbmV4dCk7DQo+ICsNCj4gKwl0YWJsZS0+ bmJfZW50Kys7DQo+ICsJdGFibGUtPm5iX2V4dF9lbnQrKzsNCj4gKwlyZXR1cm4gMDsNCj4gK30N Cj4gKw0KPiAraW50DQo+ICtydGVfazMydjY0X2hhc2hfZGVsZXRlKHN0cnVjdCBydGVfazMydjY0 X2hhc2hfdGFibGUgKnRhYmxlLCB1aW50MzJfdCBrZXksDQo+ICsJdWludDMyX3QgaGFzaCkNCj4g K3sNCj4gKwl1aW50MzJfdCBidWNrZXQ7DQo+ICsJaW50IGk7DQo+ICsJc3RydWN0IHJ0ZV9rMzJ2 NjRfZXh0X2VudCAqZW50Ow0KPiArDQo+ICsJaWYgKHRhYmxlID09IE5VTEwpDQo+ICsJCXJldHVy biAtRUlOVkFMOw0KPiArDQo+ICsJYnVja2V0ID0gaGFzaCAmIHRhYmxlLT5idWNrZXRfbXNrOw0K PiArDQo+ICsJZm9yIChpID0gMDsgaSA8IFJURV9LMzJWNjRfS0VZU19QRVJfQlVDS0VUOyBpKysp IHsNCj4gKwkJaWYgKChrZXkgPT0gdGFibGUtPnRbYnVja2V0XS5rZXlbaV0pICYmDQo+ICsJCQkJ KHRhYmxlLT50W2J1Y2tldF0ua2V5X21hc2sgJiAoMSA8PCBpKSkpIHsNCj4gKwkJCWVudCA9IFNM SVNUX0ZJUlNUKCZ0YWJsZS0+dFtidWNrZXRdLmhlYWQpOw0KPiArCQkJaWYgKGVudCkgew0KPiAr CQkJCXJ0ZV9hdG9taWMzMl9pbmMoJnRhYmxlLT50W2J1Y2tldF0uY250KTsNCj4gKwkJCQl0YWJs ZS0+dFtidWNrZXRdLmtleVtpXSA9IGVudC0+a2V5Ow0KPiArCQkJCXRhYmxlLT50W2J1Y2tldF0u dmFsW2ldID0gZW50LT52YWw7DQo+ICsJCQkJU0xJU1RfUkVNT1ZFX0hFQUQoJnRhYmxlLT50W2J1 Y2tldF0uaGVhZCwgbmV4dCk7DQo+ICsJCQkJcnRlX2F0b21pYzMyX2luYygmdGFibGUtPnRbYnVj a2V0XS5jbnQpOw0KPiArCQkJCXRhYmxlLT5uYl9leHRfZW50LS07DQo+ICsJCQl9IGVsc2UNCj4g KwkJCQl0YWJsZS0+dFtidWNrZXRdLmtleV9tYXNrICY9IH4oMSA8PCBpKTsNCj4gKwkJCWlmIChl bnQpDQo+ICsJCQkJcnRlX21lbXBvb2xfcHV0KHRhYmxlLT5leHRfZW50X3Bvb2wsIGVudCk7DQo+ ICsJCQl0YWJsZS0+bmJfZW50LS07DQo+ICsJCQlyZXR1cm4gMDsNCj4gKwkJfQ0KPiArCX0NCj4g Kw0KPiArCVNMSVNUX0ZPUkVBQ0goZW50LCAmdGFibGUtPnRbYnVja2V0XS5oZWFkLCBuZXh0KQ0K PiArCQlpZiAoZW50LT5rZXkgPT0ga2V5KQ0KPiArCQkJYnJlYWs7DQo+ICsNCj4gKwlpZiAoZW50 ID09IE5VTEwpDQo+ICsJCXJldHVybiAtRU5PRU5UOw0KPiArDQo+ICsJcnRlX2F0b21pYzMyX2lu YygmdGFibGUtPnRbYnVja2V0XS5jbnQpOw0KPiArCVNMSVNUX1JFTU9WRSgmdGFibGUtPnRbYnVj a2V0XS5oZWFkLCBlbnQsIHJ0ZV9rMzJ2NjRfZXh0X2VudCwgbmV4dCk7DQo+ICsJcnRlX2F0b21p YzMyX2luYygmdGFibGUtPnRbYnVja2V0XS5jbnQpOw0KPiArCXJ0ZV9tZW1wb29sX3B1dCh0YWJs ZS0+ZXh0X2VudF9wb29sLCBlbnQpOw0KPiArDQo+ICsJdGFibGUtPm5iX2V4dF9lbnQtLTsNCj4g Kwl0YWJsZS0+bmJfZW50LS07DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArc3Ry dWN0IHJ0ZV9rMzJ2NjRfaGFzaF90YWJsZSAqDQo+ICtydGVfazMydjY0X2hhc2hfZmluZF9leGlz dGluZyhjb25zdCBjaGFyICpuYW1lKSB7DQo+ICsJc3RydWN0IHJ0ZV9rMzJ2NjRfaGFzaF90YWJs ZSAqaCA9IE5VTEw7DQo+ICsJc3RydWN0IHJ0ZV90YWlscV9lbnRyeSAqdGU7DQo+ICsJc3RydWN0 IHJ0ZV9rMzJ2NjRfaGFzaF9saXN0ICprMzJ2NjRfaGFzaF9saXN0Ow0KPiArDQo+ICsJazMydjY0 X2hhc2hfbGlzdCA9IFJURV9UQUlMUV9DQVNUKHJ0ZV9rMzJ2NjRfaGFzaF90YWlscS5oZWFkLA0K PiArCQkJcnRlX2szMnY2NF9oYXNoX2xpc3QpOw0KPiArDQo+ICsJcnRlX21jZmdfdGFpbHFfcmVh ZF9sb2NrKCk7DQo+ICsJVEFJTFFfRk9SRUFDSCh0ZSwgazMydjY0X2hhc2hfbGlzdCwgbmV4dCkg ew0KPiArCQloID0gKHN0cnVjdCBydGVfazMydjY0X2hhc2hfdGFibGUgKikgdGUtPmRhdGE7DQo+ ICsJCWlmIChzdHJuY21wKG5hbWUsIGgtPm5hbWUsIFJURV9LMzJWNjRfSEFTSF9OQU1FU0laRSkg PT0gMCkNCj4gKwkJCWJyZWFrOw0KPiArCX0NCj4gKwlydGVfbWNmZ190YWlscV9yZWFkX3VubG9j aygpOw0KPiArCWlmICh0ZSA9PSBOVUxMKSB7DQo+ICsJCXJ0ZV9lcnJubyA9IEVOT0VOVDsNCj4g KwkJcmV0dXJuIE5VTEw7DQo+ICsJfQ0KPiArCXJldHVybiBoOw0KPiArfQ0KPiArDQo+ICtzdHJ1 Y3QgcnRlX2szMnY2NF9oYXNoX3RhYmxlICoNCj4gK3J0ZV9rMzJ2NjRfaGFzaF9jcmVhdGUoY29u c3Qgc3RydWN0IHJ0ZV9rMzJ2NjRfaGFzaF9wYXJhbXMgKnBhcmFtcykgew0KPiArCWNoYXIgaGFz aF9uYW1lW1JURV9LMzJWNjRfSEFTSF9OQU1FU0laRV07DQo+ICsJc3RydWN0IHJ0ZV9rMzJ2NjRf aGFzaF90YWJsZSAqaHQgPSBOVUxMOw0KPiArCXN0cnVjdCBydGVfdGFpbHFfZW50cnkgKnRlOw0K PiArCXN0cnVjdCBydGVfazMydjY0X2hhc2hfbGlzdCAqazMydjY0X2hhc2hfbGlzdDsNCj4gKwl1 aW50MzJfdCBtZW1fc2l6ZSwgbmJfYnVja2V0cywgbWF4X2VudDsNCj4gKwlpbnQgcmV0Ow0KPiAr CXN0cnVjdCBydGVfbWVtcG9vbCAqbXA7DQo+ICsNCj4gKwlpZiAoKHBhcmFtcyA9PSBOVUxMKSB8 fCAocGFyYW1zLT5uYW1lID09IE5VTEwpIHx8DQo+ICsJCQkocGFyYW1zLT5lbnRyaWVzID09IDAp KSB7DQo+ICsJCXJ0ZV9lcnJubyA9IEVJTlZBTDsNCj4gKwkJcmV0dXJuIE5VTEw7DQo+ICsJfQ0K PiArDQo+ICsJazMydjY0X2hhc2hfbGlzdCA9IFJURV9UQUlMUV9DQVNUKHJ0ZV9rMzJ2NjRfaGFz aF90YWlscS5oZWFkLA0KPiArCQlydGVfazMydjY0X2hhc2hfbGlzdCk7DQo+ICsNCj4gKwlyZXQg PSBzbnByaW50ZihoYXNoX25hbWUsIHNpemVvZihoYXNoX25hbWUpLCAiSzMyVjY0XyVzIiwgcGFy YW1zLT5uYW1lKTsNCj4gKwlpZiAocmV0IDwgMCB8fCByZXQgPj0gUlRFX0szMlY2NF9IQVNIX05B TUVTSVpFKSB7DQo+ICsJCXJ0ZV9lcnJubyA9IEVOQU1FVE9PTE9ORzsNCj4gKwkJcmV0dXJuIE5V TEw7DQo+ICsJfQ0KPiArDQo+ICsJbWF4X2VudCA9IHJ0ZV9hbGlnbjMycG93MihwYXJhbXMtPmVu dHJpZXMpOw0KPiArCW5iX2J1Y2tldHMgPSBtYXhfZW50IC8gUlRFX0szMlY2NF9LRVlTX1BFUl9C VUNLRVQ7DQo+ICsJbWVtX3NpemUgPSBzaXplb2Yoc3RydWN0IHJ0ZV9rMzJ2NjRfaGFzaF90YWJs ZSkgKw0KPiArCQlzaXplb2Yoc3RydWN0IHJ0ZV9rMzJ2NjRfaGFzaF9idWNrZXQpICogbmJfYnVj a2V0czsNCj4gKw0KPiArCW1wID0gcnRlX21lbXBvb2xfY3JlYXRlKGhhc2hfbmFtZSwgbWF4X2Vu dCwNCj4gKwkJc2l6ZW9mKHN0cnVjdCBydGVfazMydjY0X2V4dF9lbnQpLCAwLCAwLCBOVUxMLCBO VUxMLCBOVUxMLCBOVUxMLA0KPiArCQlwYXJhbXMtPnNvY2tldF9pZCwgMCk7DQo+ICsNCj4gKwlp ZiAobXAgPT0gTlVMTCkNCj4gKwkJcmV0dXJuIE5VTEw7DQo+ICsNCj4gKwlydGVfbWNmZ190YWls cV93cml0ZV9sb2NrKCk7DQo+ICsJVEFJTFFfRk9SRUFDSCh0ZSwgazMydjY0X2hhc2hfbGlzdCwg bmV4dCkgew0KPiArCQlodCA9IChzdHJ1Y3QgcnRlX2szMnY2NF9oYXNoX3RhYmxlICopIHRlLT5k YXRhOw0KPiArCQlpZiAoc3RybmNtcChwYXJhbXMtPm5hbWUsIGh0LT5uYW1lLA0KPiArCQkJCVJU RV9LMzJWNjRfSEFTSF9OQU1FU0laRSkgPT0gMCkNCj4gKwkJCWJyZWFrOw0KPiArCX0NCj4gKwlo dCA9IE5VTEw7DQo+ICsJaWYgKHRlICE9IE5VTEwpIHsNCj4gKwkJcnRlX2Vycm5vID0gRUVYSVNU Ow0KPiArCQlydGVfbWVtcG9vbF9mcmVlKG1wKTsNCj4gKwkJZ290byBleGl0Ow0KPiArCX0NCj4g Kw0KPiArCXRlID0gcnRlX3ptYWxsb2MoIkszMlY2NF9IQVNIX1RBSUxRX0VOVFJZIiwgc2l6ZW9m KCp0ZSksIDApOw0KPiArCWlmICh0ZSA9PSBOVUxMKSB7DQo+ICsJCVJURV9MT0coRVJSLCBIQVNI LCAiRmFpbGVkIHRvIGFsbG9jYXRlIHRhaWxxIGVudHJ5XG4iKTsNCj4gKwkJcnRlX21lbXBvb2xf ZnJlZShtcCk7DQo+ICsJCWdvdG8gZXhpdDsNCj4gKwl9DQo+ICsNCj4gKwlodCA9IHJ0ZV96bWFs bG9jX3NvY2tldChoYXNoX25hbWUsIG1lbV9zaXplLA0KPiArCQlSVEVfQ0FDSEVfTElORV9TSVpF LCBwYXJhbXMtPnNvY2tldF9pZCk7DQo+ICsJaWYgKGh0ID09IE5VTEwpIHsNCj4gKwkJUlRFX0xP RyhFUlIsIEhBU0gsICJGYWlsZWQgdG8gYWxsb2NhdGUgZmJrIGhhc2ggdGFibGVcbiIpOw0KPiAr CQlydGVfZnJlZSh0ZSk7DQo+ICsJCXJ0ZV9tZW1wb29sX2ZyZWUobXApOw0KPiArCQlnb3RvIGV4 aXQ7DQo+ICsJfQ0KPiArDQo+ICsJbWVtY3B5KGh0LT5uYW1lLCBoYXNoX25hbWUsIHNpemVvZiho dC0+bmFtZSkpOw0KPiArCWh0LT5tYXhfZW50ID0gbWF4X2VudDsNCj4gKwlodC0+YnVja2V0X21z ayA9IG5iX2J1Y2tldHMgLSAxOw0KPiArCWh0LT5leHRfZW50X3Bvb2wgPSBtcDsNCj4gKwlodC0+ bG9va3VwID0gZ2V0X2xvb2t1cF9idWxrX2ZuKCk7DQo+ICsNCj4gKwl0ZS0+ZGF0YSA9ICh2b2lk ICopaHQ7DQo+ICsJVEFJTFFfSU5TRVJUX1RBSUwoazMydjY0X2hhc2hfbGlzdCwgdGUsIG5leHQp Ow0KPiArDQo+ICtleGl0Og0KPiArCXJ0ZV9tY2ZnX3RhaWxxX3dyaXRlX3VubG9jaygpOw0KPiAr DQo+ICsJcmV0dXJuIGh0Ow0KPiArfQ0KPiArDQo+ICt2b2lkDQo+ICtydGVfazMydjY0X2hhc2hf ZnJlZShzdHJ1Y3QgcnRlX2szMnY2NF9oYXNoX3RhYmxlICpodCkgew0KPiArCXN0cnVjdCBydGVf dGFpbHFfZW50cnkgKnRlOw0KPiArCXN0cnVjdCBydGVfazMydjY0X2hhc2hfbGlzdCAqazMydjY0 X2hhc2hfbGlzdDsNCj4gKw0KPiArCWlmIChodCA9PSBOVUxMKQ0KPiArCQlyZXR1cm47DQo+ICsN Cj4gKwlrMzJ2NjRfaGFzaF9saXN0ID0gUlRFX1RBSUxRX0NBU1QocnRlX2szMnY2NF9oYXNoX3Rh aWxxLmhlYWQsDQo+ICsJCQkJcnRlX2szMnY2NF9oYXNoX2xpc3QpOw0KPiArDQo+ICsJcnRlX21j ZmdfdGFpbHFfd3JpdGVfbG9jaygpOw0KPiArDQo+ICsJLyogZmluZCBvdXQgdGFpbHEgZW50cnkg Ki8NCj4gKwlUQUlMUV9GT1JFQUNIKHRlLCBrMzJ2NjRfaGFzaF9saXN0LCBuZXh0KSB7DQo+ICsJ CWlmICh0ZS0+ZGF0YSA9PSAodm9pZCAqKSBodCkNCj4gKwkJCWJyZWFrOw0KPiArCX0NCj4gKw0K PiArDQo+ICsJaWYgKHRlID09IE5VTEwpIHsNCj4gKwkJcnRlX21jZmdfdGFpbHFfd3JpdGVfdW5s b2NrKCk7DQo+ICsJCXJldHVybjsNCj4gKwl9DQo+ICsNCj4gKwlUQUlMUV9SRU1PVkUoazMydjY0 X2hhc2hfbGlzdCwgdGUsIG5leHQpOw0KPiArDQo+ICsJcnRlX21jZmdfdGFpbHFfd3JpdGVfdW5s b2NrKCk7DQo+ICsNCj4gKwlydGVfbWVtcG9vbF9mcmVlKGh0LT5leHRfZW50X3Bvb2wpOw0KPiAr CXJ0ZV9mcmVlKGh0KTsNCj4gKwlydGVfZnJlZSh0ZSk7DQo+ICt9DQo+IGRpZmYgLS1naXQgYS9s aWIvbGlicnRlX2hhc2gvcnRlX2szMnY2NF9oYXNoLmggDQo+IGIvbGliL2xpYnJ0ZV9oYXNoL3J0 ZV9rMzJ2NjRfaGFzaC5oDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAu LmIyYzUyZTkNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9saWIvbGlicnRlX2hhc2gvcnRlX2sz MnY2NF9oYXNoLmgNCj4gQEAgLTAsMCArMSwyMTEgQEANCj4gKy8qIFNQRFgtTGljZW5zZS1JZGVu dGlmaWVyOiBCU0QtMy1DbGF1c2UNCj4gKyAqIENvcHlyaWdodChjKSAyMDIwIEludGVsIENvcnBv cmF0aW9uICAqLw0KPiArDQo+ICsjaWZuZGVmIF9SVEVfSzMyVjY0X0hBU0hfSF8NCj4gKyNkZWZp bmUgX1JURV9LMzJWNjRfSEFTSF9IXw0KPiArDQo+ICsjaWZkZWYgX19jcGx1c3BsdXMNCj4gK2V4 dGVybiAiQyIgew0KPiArI2VuZGlmDQo+ICsNCj4gKyNpbmNsdWRlIDxydGVfY29tcGF0Lmg+DQo+ ICsjaW5jbHVkZSA8cnRlX2F0b21pYy5oPg0KPiArI2luY2x1ZGUgPHJ0ZV9tZW1wb29sLmg+DQo+ ICsNCj4gKyNkZWZpbmUgUlRFX0szMlY2NF9IQVNIX05BTUVTSVpFCQkzMg0KPiArI2RlZmluZSBS VEVfSzMyVjY0X0tFWVNfUEVSX0JVQ0tFVAkJNA0KPiArI2RlZmluZSBSVEVfSzMyVjY0X1dSSVRF X0lOX1BST0dSRVNTCQkxDQo+ICsNCj4gK3N0cnVjdCBydGVfazMydjY0X2hhc2hfcGFyYW1zIHsN Cj4gKwljb25zdCBjaGFyICpuYW1lOw0KPiArCXVpbnQzMl90IGVudHJpZXM7DQo+ICsJaW50IHNv Y2tldF9pZDsNCj4gK307DQo+ICsNCj4gK3N0cnVjdCBydGVfazMydjY0X2V4dF9lbnQgew0KPiAr CVNMSVNUX0VOVFJZKHJ0ZV9rMzJ2NjRfZXh0X2VudCkgbmV4dDsNCj4gKwl1aW50MzJfdAlrZXk7 DQo+ICsJdWludDY0X3QJdmFsOw0KPiArfTsNCj4gKw0KPiArc3RydWN0IHJ0ZV9rMzJ2NjRfaGFz aF9idWNrZXQgew0KPiArCXVpbnQzMl90CWtleVtSVEVfSzMyVjY0X0tFWVNfUEVSX0JVQ0tFVF07 DQo+ICsJdWludDY0X3QJdmFsW1JURV9LMzJWNjRfS0VZU19QRVJfQlVDS0VUXTsNCj4gKwl1aW50 OF90CQlrZXlfbWFzazsNCj4gKwlydGVfYXRvbWljMzJfdAljbnQ7DQo+ICsJU0xJU1RfSEVBRChy dGVfazMydjY0X2xpc3RfaGVhZCwgcnRlX2szMnY2NF9leHRfZW50KSBoZWFkOyB9IA0KPiArX19y dGVfY2FjaGVfYWxpZ25lZDsNCj4gKw0KPiArc3RydWN0IHJ0ZV9rMzJ2NjRfaGFzaF90YWJsZTsN Cj4gKw0KPiArdHlwZWRlZiBpbnQgKCpydGVfazMydjY0X2hhc2hfYnVsa19sb29rdXBfdCkgKHN0 cnVjdCANCj4gK3J0ZV9rMzJ2NjRfaGFzaF90YWJsZSAqdGFibGUsIHVpbnQzMl90ICprZXlzLCB1 aW50MzJfdCAqaGFzaGVzLA0KPiArCXVpbnQ2NF90ICp2YWx1ZXMsIHVuc2lnbmVkIGludCBuKTsN Cj4gKw0KPiArc3RydWN0IHJ0ZV9rMzJ2NjRfaGFzaF90YWJsZSB7DQo+ICsJY2hhciBuYW1lW1JU RV9LMzJWNjRfSEFTSF9OQU1FU0laRV07CS8qKjwgTmFtZSBvZiB0aGUgaGFzaC4gKi8NCj4gKwl1 aW50MzJfdAluYl9lbnQ7CQkvKio8IE51bWJlciBvZiBlbnRpdGllcyBpbiB0aGUgdGFibGUqLw0K PiArCXVpbnQzMl90CW5iX2V4dF9lbnQ7CS8qKjwgTnVtYmVyIG9mIGV4dGVuZGVkIGVudGl0aWVz ICovDQo+ICsJdWludDMyX3QJbWF4X2VudDsJLyoqPCBNYXhpbXVtIG51bWJlciBvZiBlbnRpdGll cyAqLw0KPiArCXVpbnQzMl90CWJ1Y2tldF9tc2s7DQo+ICsJc3RydWN0IHJ0ZV9tZW1wb29sCSpl eHRfZW50X3Bvb2w7DQo+ICsJcnRlX2szMnY2NF9oYXNoX2J1bGtfbG9va3VwX3QJbG9va3VwOw0K PiArCV9fZXh0ZW5zaW9uX18gc3RydWN0IHJ0ZV9rMzJ2NjRfaGFzaF9idWNrZXQJdFswXTsNCj4g K307DQo+ICsNCj4gK3R5cGVkZWYgaW50ICgqcnRlX2szMnY2NF9jbXBfZm5fdCkNCj4gKyhzdHJ1 Y3QgcnRlX2szMnY2NF9oYXNoX2J1Y2tldCAqYnVja2V0LCB1aW50MzJfdCBrZXksIHVpbnQ2NF90 ICp2YWwpOw0KPiArDQo+ICtzdGF0aWMgaW5saW5lIGludA0KPiArX19rMzJ2NjRfY21wX2tleXMo c3RydWN0IHJ0ZV9rMzJ2NjRfaGFzaF9idWNrZXQgKmJ1Y2tldCwgdWludDMyX3Qga2V5LA0KPiAr CXVpbnQ2NF90ICp2YWwpDQo+ICt7DQo+ICsJaW50IGk7DQo+ICsNCj4gKwlmb3IgKGkgPSAwOyBp IDwgUlRFX0szMlY2NF9LRVlTX1BFUl9CVUNLRVQ7IGkrKykgew0KPiArCQlpZiAoKGtleSA9PSBi dWNrZXQtPmtleVtpXSkgJiYNCj4gKwkJCQkoYnVja2V0LT5rZXlfbWFzayAmICgxIDw8IGkpKSkg ew0KPiArCQkJKnZhbCA9IGJ1Y2tldC0+dmFsW2ldOw0KPiArCQkJcmV0dXJuIDE7DQo+ICsJCX0N Cj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGlubGluZSBp bnQNCj4gK19fazMydjY0X2hhc2hfbG9va3VwKHN0cnVjdCBydGVfazMydjY0X2hhc2hfdGFibGUg KnRhYmxlLCB1aW50MzJfdCBrZXksDQo+ICsJdWludDMyX3QgaGFzaCwgdWludDY0X3QgKnZhbHVl LCBydGVfazMydjY0X2NtcF9mbl90IGNtcF9mKSB7DQo+ICsJdWludDY0X3QJdmFsID0gMDsNCj4g KwlzdHJ1Y3QgcnRlX2szMnY2NF9leHRfZW50ICplbnQ7DQo+ICsJaW50MzJfdAljbnQ7DQo+ICsJ aW50IGZvdW5kID0gMDsNCj4gKwl1aW50MzJfdCBidWNrZXQgPSBoYXNoICYgdGFibGUtPmJ1Y2tl dF9tc2s7DQo+ICsNCj4gKwlkbyB7DQo+ICsJCWRvDQo+ICsJCQljbnQgPSBydGVfYXRvbWljMzJf cmVhZCgmdGFibGUtPnRbYnVja2V0XS5jbnQpOw0KPiArCQl3aGlsZSAodW5saWtlbHkoY250ICYg UlRFX0szMlY2NF9XUklURV9JTl9QUk9HUkVTUykpOw0KPiArDQo+ICsJCWZvdW5kID0gY21wX2Yo JnRhYmxlLT50W2J1Y2tldF0sIGtleSwgJnZhbCk7DQo+ICsJCWlmICh1bmxpa2VseSgoZm91bmQg PT0gMCkgJiYNCj4gKwkJCQkoIVNMSVNUX0VNUFRZKCZ0YWJsZS0+dFtidWNrZXRdLmhlYWQpKSkp IHsNCj4gKwkJCVNMSVNUX0ZPUkVBQ0goZW50LCAmdGFibGUtPnRbYnVja2V0XS5oZWFkLCBuZXh0 KSB7DQo+ICsJCQkJaWYgKGVudC0+a2V5ID09IGtleSkgew0KPiArCQkJCQl2YWwgPSBlbnQtPnZh bDsNCj4gKwkJCQkJZm91bmQgPSAxOw0KPiArCQkJCQlicmVhazsNCj4gKwkJCQl9DQo+ICsJCQl9 DQo+ICsJCX0NCj4gKw0KPiArCX0gd2hpbGUgKHVubGlrZWx5KGNudCAhPSBydGVfYXRvbWljMzJf cmVhZCgmdGFibGUtPnRbYnVja2V0XS5jbnQpKSk7DQo+ICsNCj4gKwlpZiAoZm91bmQgPT0gMSkg ew0KPiArCQkqdmFsdWUgPSB2YWw7DQo+ICsJCXJldHVybiAwOw0KPiArCX0gZWxzZQ0KPiArCQly ZXR1cm4gLUVOT0VOVDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGlubGluZSBpbnQNCj4gK3J0ZV9r MzJ2NjRfaGFzaF9sb29rdXAoc3RydWN0IHJ0ZV9rMzJ2NjRfaGFzaF90YWJsZSAqdGFibGUsIHVp bnQzMl90IGtleSwNCj4gKwl1aW50MzJfdCBoYXNoLCB1aW50NjRfdCAqdmFsdWUpDQo+ICt7DQo+ ICsJcmV0dXJuIF9fazMydjY0X2hhc2hfbG9va3VwKHRhYmxlLCBrZXksIGhhc2gsIHZhbHVlLCAN Cj4gK19fazMydjY0X2NtcF9rZXlzKTsgfQ0KPiArDQo+ICtzdGF0aWMgaW5saW5lIGludA0KPiAr cnRlX2szMnY2NF9oYXNoX2J1bGtfbG9va3VwKHN0cnVjdCBydGVfazMydjY0X2hhc2hfdGFibGUg KnRhYmxlLA0KPiArCXVpbnQzMl90ICprZXlzLCB1aW50MzJfdCAqaGFzaGVzLCB1aW50NjRfdCAq dmFsdWVzLCB1bnNpZ25lZCBpbnQgbikgDQo+ICt7DQo+ICsJcmV0dXJuIHRhYmxlLT5sb29rdXAo dGFibGUsIGtleXMsIGhhc2hlcywgdmFsdWVzLCBuKTsgfQ0KPiArDQo+ICsvKioNCj4gKyAqIEFk ZCBhIGtleSB0byBhbiBleGlzdGluZyBoYXNoIHRhYmxlIHdpdGggaGFzaCB2YWx1ZS4NCj4gKyAq IFRoaXMgb3BlcmF0aW9uIGlzIG5vdCBtdWx0aS10aHJlYWQgc2FmZQ0KPiArICogYW5kIHNob3Vs ZCBvbmx5IGJlIGNhbGxlZCBmcm9tIG9uZSB0aHJlYWQuDQo+ICsgKg0KDQoNCkRvZXMgdGhpcyBo YXNoIGFsbG93IG11bHRpcGxlIHJlYWRlcnMsIGFuZCBhdCBtb3N0IG9uZSB3cml0ZXIsIGZvciBh IHBhcnRpY3VsYXIgaW5zdGFuY2U/IElmIHRoYXQncyB0aGUgY2FzZSwgaXQgc2hvdWxkIHByb2Jh Ymx5IGJlIG1lbnRpb25lZCBzb21ld2hlcmUuDQoNCg0KSnVzdCBzcGVjaWZ5aW5nIHRoYXQgYSBw YXJ0aWN1bGFyIGZ1bmN0aW9uIGlzIG5vdCBNVCBzYWZlIGRvZXNuJ3Qgc2F5IGFueXRoaW5nIGlm IGl0J3Mgc2FmZSB0byBjYWxsIGl0IGluIHBhcmFsbGVsIHdpdGggb3RoZXIsIG5vbi1NVCBzYWZl IGZ1bmN0aW9ucy4gSSBhc3N1bWUgeW91IGNhbid0IGFkZCBhbmQgZGVsZXRlIGluIHBhcmFsbGVs Pw0KDQoNClllcywgdGhpcyBoYXNoIGFsbG93cyBtdWx0aXBsZSByZWFkZXJzIGFuZCBvbiB3cml0 ZXIuIFdyaXRlcnMgbXVzdCBiZSBzZXJpYWxpemVkLiBJIHdpbGwgYWRkIHRoaXMgaW5mb3JtYXRp b24uIFRoYW5rcyENCg0KDQo+ICsgKiBAcGFyYW0gaHQNCj4gKyAqICAgSGFzaCB0YWJsZSB0byBh ZGQgdGhlIGtleSB0by4NCj4gKyAqIEBwYXJhbSBrZXkNCj4gKyAqICAgS2V5IHRvIGFkZCB0byB0 aGUgaGFzaCB0YWJsZS4NCj4gKyAqIEBwYXJhbSB2YWx1ZQ0KPiArICogICBWYWx1ZSB0byBhc3Nv Y2lhdGUgd2l0aCBrZXkuDQo+ICsgKiBAcGFyYW0gaGFzaA0KPiArICogICBIYXNoIHZhbHVlIGFz c29jaWF0ZWQgd2l0aCBrZXkuDQo+ICsgKiBAcmV0dXJuDQo+ICsgKiAgIDAgaWYgb2ssIG9yIG5l Z2F0aXZlIHZhbHVlIG9uIGVycm9yLg0KPiArICovDQo+ICtfX3J0ZV9leHBlcmltZW50YWwNCj4g K2ludA0KPiArcnRlX2szMnY2NF9oYXNoX2FkZChzdHJ1Y3QgcnRlX2szMnY2NF9oYXNoX3RhYmxl ICp0YWJsZSwgdWludDMyX3Qga2V5LA0KPiArCXVpbnQzMl90IGhhc2gsIHVpbnQ2NF90IHZhbHVl KTsNCj4gKw0KPiArLyoqDQo+ICsgKiBSZW1vdmUgYSBrZXkgd2l0aCBhIGdpdmVuIGhhc2ggdmFs dWUgZnJvbSBhbiBleGlzdGluZyBoYXNoIHRhYmxlLg0KPiArICogVGhpcyBvcGVyYXRpb24gaXMg bm90IG11bHRpLXRocmVhZA0KPiArICogc2FmZSBhbmQgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGZy b20gb25lIHRocmVhZC4NCj4gKyAqDQo+ICsgKiBAcGFyYW0gaHQNCj4gKyAqICAgSGFzaCB0YWJs ZSB0byByZW1vdmUgdGhlIGtleSBmcm9tLg0KPiArICogQHBhcmFtIGtleQ0KPiArICogICBLZXkg dG8gcmVtb3ZlIGZyb20gdGhlIGhhc2ggdGFibGUuDQo+ICsgKiBAcGFyYW0gaGFzaA0KPiArICog ICBoYXNoIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCBrZXkuDQo+ICsgKiBAcmV0dXJuDQo+ICsgKiAg IDAgaWYgb2ssIG9yIG5lZ2F0aXZlIHZhbHVlIG9uIGVycm9yLg0KPiArICovDQo+ICtfX3J0ZV9l eHBlcmltZW50YWwNCj4gK2ludA0KPiArcnRlX2szMnY2NF9oYXNoX2RlbGV0ZShzdHJ1Y3QgcnRl X2szMnY2NF9oYXNoX3RhYmxlICp0YWJsZSwgdWludDMyX3Qga2V5LA0KPiArCXVpbnQzMl90IGhh c2gpOw0KPiArDQo+ICsNCj4gKy8qKg0KPiArICogUGVyZm9ybXMgYSBsb29rdXAgZm9yIGFuIGV4 aXN0aW5nIGhhc2ggdGFibGUsIGFuZCByZXR1cm5zIGEgDQo+ICtwb2ludGVyIHRvDQo+ICsgKiB0 aGUgdGFibGUgaWYgZm91bmQuDQo+ICsgKg0KPiArICogQHBhcmFtIG5hbWUNCj4gKyAqICAgTmFt ZSBvZiB0aGUgaGFzaCB0YWJsZSB0byBmaW5kDQo+ICsgKg0KPiArICogQHJldHVybg0KPiArICog ICBwb2ludGVyIHRvIGhhc2ggdGFibGUgc3RydWN0dXJlIG9yIE5VTEwgb24gZXJyb3Igd2l0aCBy dGVfZXJybm8NCj4gKyAqICAgc2V0IGFwcHJvcHJpYXRlbHkuDQo+ICsgKi8NCj4gK19fcnRlX2V4 cGVyaW1lbnRhbA0KPiArc3RydWN0IHJ0ZV9rMzJ2NjRfaGFzaF90YWJsZSAqDQo+ICtydGVfazMy djY0X2hhc2hfZmluZF9leGlzdGluZyhjb25zdCBjaGFyICpuYW1lKTsNCj4gKw0KPiArLyoqDQo+ ICsgKiBDcmVhdGUgYSBuZXcgaGFzaCB0YWJsZSBmb3IgdXNlIHdpdGggZm91ciBieXRlIGtleXMu DQo+ICsgKg0KPiArICogQHBhcmFtIHBhcmFtcw0KPiArICogICBQYXJhbWV0ZXJzIHVzZWQgaW4g Y3JlYXRpb24gb2YgaGFzaCB0YWJsZS4NCj4gKyAqDQo+ICsgKiBAcmV0dXJuDQo+ICsgKiAgIFBv aW50ZXIgdG8gaGFzaCB0YWJsZSBzdHJ1Y3R1cmUgdGhhdCBpcyB1c2VkIGluIGZ1dHVyZSBoYXNo IHRhYmxlDQo+ICsgKiAgIG9wZXJhdGlvbnMsIG9yIE5VTEwgb24gZXJyb3Igd2l0aCBydGVfZXJy bm8gc2V0IGFwcHJvcHJpYXRlbHkuDQo+ICsgKi8NCj4gK19fcnRlX2V4cGVyaW1lbnRhbA0KPiAr c3RydWN0IHJ0ZV9rMzJ2NjRfaGFzaF90YWJsZSAqDQo+ICtydGVfazMydjY0X2hhc2hfY3JlYXRl KGNvbnN0IHN0cnVjdCBydGVfazMydjY0X2hhc2hfcGFyYW1zICpwYXJhbXMpOw0KPiArDQo+ICsv KioNCj4gKyAqIEZyZWUgYWxsIG1lbW9yeSB1c2VkIGJ5IGEgaGFzaCB0YWJsZS4NCj4gKyAqDQo+ ICsgKiBAcGFyYW0gdGFibGUNCj4gKyAqICAgSGFzaCB0YWJsZSB0byBkZWFsbG9jYXRlLg0KPiAr ICovDQo+ICtfX3J0ZV9leHBlcmltZW50YWwNCj4gK3ZvaWQNCj4gK3J0ZV9rMzJ2NjRfaGFzaF9m cmVlKHN0cnVjdCBydGVfazMydjY0X2hhc2hfdGFibGUgKnRhYmxlKTsNCj4gKw0KPiArI2lmZGVm IF9fY3BsdXNwbHVzDQo+ICt9DQo+ICsjZW5kaWYNCj4gKw0KPiArI2VuZGlmIC8qIF9SVEVfSzMy VjY0X0hBU0hfSF8gKi8NCg0KDQo=