From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <yipeng1.wang@intel.com>
Received: from mga05.intel.com (mga05.intel.com [192.55.52.43])
 by dpdk.org (Postfix) with ESMTP id 1ED4F1B277
 for <dev@dpdk.org>; Tue,  3 Oct 2017 03:18:55 +0200 (CEST)
Received: from fmsmga001.fm.intel.com ([10.253.24.23])
 by fmsmga105.fm.intel.com with ESMTP; 02 Oct 2017 18:18:54 -0700
X-ExtLoop1: 1
X-IronPort-AV: E=Sophos;i="5.42,471,1500966000"; d="scan'208";a="1201479495"
Received: from orsmsx110.amr.corp.intel.com ([10.22.240.8])
 by fmsmga001.fm.intel.com with ESMTP; 02 Oct 2017 18:18:54 -0700
Received: from orsmsx161.amr.corp.intel.com (10.22.240.84) by
 ORSMSX110.amr.corp.intel.com (10.22.240.8) with Microsoft SMTP Server (TLS)
 id 14.3.319.2; Mon, 2 Oct 2017 18:18:54 -0700
Received: from orsmsx105.amr.corp.intel.com ([169.254.2.169]) by
 ORSMSX161.amr.corp.intel.com ([169.254.4.13]) with mapi id 14.03.0319.002;
 Mon, 2 Oct 2017 18:18:54 -0700
From: "Wang, Yipeng1" <yipeng1.wang@intel.com>
To: "De Lara Guarch, Pablo" <pablo.de.lara.guarch@intel.com>, "dev@dpdk.org"
 <dev@dpdk.org>
CC: "thomas@monjalon.net" <thomas@monjalon.net>, "Tai, Charlie"
 <charlie.tai@intel.com>, "Gobriel, Sameh" <sameh.gobriel@intel.com>,
 "Mcnamara, John" <john.mcnamara@intel.com>
Thread-Topic: [PATCH v4 2/7] member: implement HT mode
Thread-Index: AQHTN7hHgW2fDrK1RkWW6H3lHPSQGKLQQNfQgAESKXA=
Date: Tue, 3 Oct 2017 01:18:53 +0000
Message-ID: <D2C4A16CA39F7F4E8E384D204491D7A644576A20@ORSMSX105.amr.corp.intel.com>
References: <1504655989-1518-1-git-send-email-yipeng1.wang@intel.com>
 <1506534034-39433-1-git-send-email-yipeng1.wang@intel.com>
 <1506534034-39433-3-git-send-email-yipeng1.wang@intel.com>
 <E115CCD9D858EF4F90C690B0DCB4D8976CC28AF0@IRSMSX108.ger.corp.intel.com>
In-Reply-To: <E115CCD9D858EF4F90C690B0DCB4D8976CC28AF0@IRSMSX108.ger.corp.intel.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.0.116
dlp-reaction: no-action
x-ctpclassification: CTP_IC
x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiY2YxNTI3NmYtMWE4My00NWJjLWEwYTEtMTA1NDhlNzEyOWVjIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX0lDIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE2LjUuOS4zIiwiVHJ1c3RlZExhYmVsSGFzaCI6IlhYdEE1Z25QZnhUSEVvdjcxQXNcL3Zkdm5lWWdXNTB3RUtvRU1RY2ZhaDRZPSJ9
x-originating-ip: [10.22.254.138]
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
MIME-Version: 1.0
Subject: Re: [dpdk-dev] [PATCH v4 2/7] member: implement HT mode
X-BeenThere: dev@dpdk.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: DPDK patches and discussions <dev.dpdk.org>
List-Unsubscribe: <http://dpdk.org/ml/options/dev>,
 <mailto:dev-request@dpdk.org?subject=unsubscribe>
List-Archive: <http://dpdk.org/ml/archives/dev/>
List-Post: <mailto:dev@dpdk.org>
List-Help: <mailto:dev-request@dpdk.org?subject=help>
List-Subscribe: <http://dpdk.org/ml/listinfo/dev>,
 <mailto:dev-request@dpdk.org?subject=subscribe>
X-List-Received-Date: Tue, 03 Oct 2017 01:18:57 -0000

VGhhbmsgeW91IHZlcnkgbXVjaCBQYWJsby4NCg0KIEkgYWdyZWUgd2l0aCB5b3Ugb24gbW9zdCBv
ZiB5b3VyIGNvbW1lbnRzIGFuZCBJIHdpbGwgYWRkcmVzcyB0aGVtIHNvb24uDQpCdXQgcGxlYXNl
IGZpbmQgc29tZSBleHBsYW5hdGlvbnMgaW5saW5lZCBmb3IgY2VydGFpbiBxdWVzdGlvbnMgeW91
IHJhaXNlZC4NCg0KPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBEZSBMYXJh
IEd1YXJjaCwgUGFibG8NCj4gU2VudDogTW9uZGF5LCBPY3RvYmVyIDIsIDIwMTcgNjozMSBBTQ0K
PiBUbzogV2FuZywgWWlwZW5nMSA8eWlwZW5nMS53YW5nQGludGVsLmNvbT47IGRldkBkcGRrLm9y
Zw0KPiBDYzogdGhvbWFzQG1vbmphbG9uLm5ldDsgVGFpLCBDaGFybGllIDxjaGFybGllLnRhaUBp
bnRlbC5jb20+OyBHb2JyaWVsLA0KPiBTYW1laCA8c2FtZWguZ29icmllbEBpbnRlbC5jb20+OyBN
Y25hbWFyYSwgSm9obg0KPiA8am9obi5tY25hbWFyYUBpbnRlbC5jb20+DQo+IFN1YmplY3Q6IFJF
OiBbUEFUQ0ggdjQgMi83XSBtZW1iZXI6IGltcGxlbWVudCBIVCBtb2RlDQo+IA0KPiANCj4gDQo+
ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gPiBGcm9tOiBXYW5nLCBZaXBlbmcxDQo+
ID4gU2VudDogV2VkbmVzZGF5LCBTZXB0ZW1iZXIgMjcsIDIwMTcgNjo0MCBQTQ0KPiA+IFRvOiBk
ZXZAZHBkay5vcmcNCj4gPiBDYzogdGhvbWFzQG1vbmphbG9uLm5ldDsgVGFpLCBDaGFybGllIDxj
aGFybGllLnRhaUBpbnRlbC5jb20+OyBHb2JyaWVsLA0KPiA+IFNhbWVoIDxzYW1laC5nb2JyaWVs
QGludGVsLmNvbT47IERlIExhcmEgR3VhcmNoLCBQYWJsbw0KPiA+IDxwYWJsby5kZS5sYXJhLmd1
YXJjaEBpbnRlbC5jb20+OyBNY25hbWFyYSwgSm9obg0KPiA+IDxqb2huLm1jbmFtYXJhQGludGVs
LmNvbT47IFdhbmcsIFlpcGVuZzEgPHlpcGVuZzEud2FuZ0BpbnRlbC5jb20+DQo+ID4gU3ViamVj
dDogW1BBVENIIHY0IDIvN10gbWVtYmVyOiBpbXBsZW1lbnQgSFQgbW9kZQ0KPiA+DQo+IA0KPiAu
Li4NCj4gDQo+ID4gZGlmZiAtLWdpdCBhL2xpYi9saWJydGVfbWVtYmVyL01ha2VmaWxlIGIvbGli
L2xpYnJ0ZV9tZW1iZXIvTWFrZWZpbGUNCj4gaW5kZXgNCj4gPiAxYTc5ZWFhLi5hZDI2NTQ4IDEw
MDY0NA0KPiA+IC0tLSBhL2xpYi9saWJydGVfbWVtYmVyL01ha2VmaWxlDQo+ID4gKysrIGIvbGli
L2xpYnJ0ZV9tZW1iZXIvTWFrZWZpbGUNCj4gPiBAQCAtNDIsNyArNDIsNyBAQCBFWFBPUlRfTUFQ
IDo9IHJ0ZV9tZW1iZXJfdmVyc2lvbi5tYXANCj4gPiBMSUJBQklWRVIgOj0gMQ0KPiA+DQo+ID4g
ICMgYWxsIHNvdXJjZSBhcmUgc3RvcmVkIGluIFNSQ1MteQ0KPiA+IC1TUkNTLSQoQ09ORklHX1JU
RV9MSUJSVEVfTUVNQkVSKSArPSAgcnRlX21lbWJlci5jDQo+ID4gK1NSQ1MtJChDT05GSUdfUlRF
X0xJQlJURV9NRU1CRVIpICs9ICBydGVfbWVtYmVyLmMNCj4gPiBydGVfbWVtYmVyX2h0LmMNCj4g
PiAgIyBpbnN0YWxsIGluY2x1ZGVzDQo+ID4gIFNZTUxJTkstJChDT05GSUdfUlRFX0xJQlJURV9N
RU1CRVIpLWluY2x1ZGUgOj0gcnRlX21lbWJlci5oDQo+ID4NCj4gPiBkaWZmIC0tZ2l0IGEvbGli
L2xpYnJ0ZV9tZW1iZXIvcnRlX21lbWJlcl9odC5jDQo+ID4gYi9saWIvbGlicnRlX21lbWJlci9y
dGVfbWVtYmVyX2h0LmMNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAw
MDAuLjU1NjcyYTQNCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvbGliL2xpYnJ0ZV9tZW1i
ZXIvcnRlX21lbWJlcl9odC5jDQo+IA0KPiAuLi4NCj4gDQo+ID4gKw0KPiA+ICtzdGF0aWMgaW5s
aW5lIGludA0KPiA+ICtpbnNlcnRfb3ZlcndyaXRlX3NlYXJjaCh1aW50MzJfdCBidWNrZXQsIG1l
bWJlcl9zaWdfdCB0bXBfc2lnLA0KPiA+ICsJCXN0cnVjdCBtZW1iZXJfaHRfYnVja2V0ICpidWNr
ZXRzLA0KPiA+ICsJCW1lbWJlcl9zZXRfdCBzZXRfaWQpDQo+IA0KPiBJIHdvdWxkIGNhbGwgImJ1
Y2tldCIsICJidWNrZXRfaWQiLCBmb3IgYmV0dGVyIHVuZGVyc3RhbmRpbmcuDQo+IFRoaXMgY29t
bWVudCBhbHNvIGFwcGxpZXMgdG8gb3RoZXIgcGFydHMgb2YgdGhlIGNvZGUgKGUuZy4gcHJpbV9i
dWNrZXRzKS4NCj4gDQo+ID4gK3sNCj4gPiArCWludCBpOw0KPiA+ICsJZm9yIChpID0gMDsgaSA8
IFJURV9NRU1CRVJfQlVDS0VUX0VOVFJJRVM7IGkrKykgew0KPiA+ICsJCWlmIChidWNrZXRzW2J1
Y2tldF0uc2lnc1tpXSA9PSB0bXBfc2lnKSB7DQo+ID4gKwkJCWJ1Y2tldHNbYnVja2V0XS5zZXRz
W2ldID0gc2V0X2lkOw0KPiA+ICsJCQlyZXR1cm4gMTsNCj4gPiArCQl9DQo+IA0KPiBJcyB0aGlz
IGZ1bmN0aW9uIHVzZWQgdG8gdXBkYXRlIGFuIGV4aXN0aW5nIGVudHJ5Pw0KPiBBdCBmaXJzdCwg
SSB0aG91Z2h0IHRoYXQgdGhpcyB3YXMgZXZpY3RpbmcgYW5vdGhlciBlbnRyeSwgd2hlbiB0aGUg
YnVja2V0IHdhcw0KPiBmdWxsLA0KPiBidXQgaXQgbG9va3MgbGlrZSBpdCBpcyB1cGRhdGluZyB0
aGUgc2V0X2lkIG9mIGFuIGV4aXN0aW5nIGVudHJ5Lg0KPiBJZiB0aGlzIGlzIHRoZSBjYXNlLCBJ
IHdvdWxkIGNoYW5nZSB0aGUgZnVuY3Rpb24gbmFtZSBhbmQgYWRkIGEgY29tbWVudA0KPiBleHBs
YWluaW5nIHRoaXMuDQo+IA0KPiA+ICsJfQ0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiAr
DQo+ID4gK3N0YXRpYyBpbmxpbmUgaW50DQo+ID4gK3NlYXJjaF9idWNrZXRfc2luZ2xlKHVpbnQz
Ml90IGJ1Y2tldCwgbWVtYmVyX3NpZ190IHRtcF9zaWcsDQo+ID4gKwkJc3RydWN0IG1lbWJlcl9o
dF9idWNrZXQgKmJ1Y2tldHMsDQo+ID4gKwkJbWVtYmVyX3NldF90ICpzZXRfaWQpDQo+ID4gK3sN
Cj4gPiArCWludCBpdGVyOw0KPiANCj4gSXRlciBzaG91bGQgYmUgInVuc2lnbmVkIGludCIgKG9y
IHNpbWlsYXIsIG1heWJlICJ1aW50OF90IikNCj4gDQo+ID4gKwlmb3IgKGl0ZXIgPSAwOyBpdGVy
IDwgUlRFX01FTUJFUl9CVUNLRVRfRU5UUklFUzsgaXRlcisrKSB7DQo+ID4gKwkJaWYgKHRtcF9z
aWcgPT0gYnVja2V0c1tidWNrZXRdLnNpZ3NbaXRlcl0gJiYNCj4gPiArCQkJCWJ1Y2tldHNbYnVj
a2V0XS5zZXRzW2l0ZXJdICE9DQo+ID4gKwkJCQlSVEVfTUVNQkVSX05PX01BVENIKSB7DQo+ID4g
KwkJCSpzZXRfaWQgPSBidWNrZXRzW2J1Y2tldF0uc2V0c1tpdGVyXTsNCj4gPiArCQkJcmV0dXJu
IDE7DQo+ID4gKwkJfQ0KPiA+ICsJfQ0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+
ID4gK3N0YXRpYyBpbmxpbmUgdm9pZA0KPiA+ICtzZWFyY2hfYnVja2V0X211bHRpKHVpbnQzMl90
IGJ1Y2tldCwgbWVtYmVyX3NpZ190IHRtcF9zaWcsDQo+ID4gKwkJc3RydWN0IG1lbWJlcl9odF9i
dWNrZXQgKmJ1Y2tldHMsDQo+ID4gKwkJdWludDMyX3QgKmNvdW50ZXIsDQo+ID4gKwkJdWludDMy
X3QgbWF0Y2hfcGVyX2tleSwNCj4gDQo+IEJldHRlciBjaGFuZ2UgdG8gIm1hdGNoZXNfcGVyX2tl
eSIuDQo+IA0KPiA+ICsJCW1lbWJlcl9zZXRfdCAqc2V0X2lkKQ0KPiA+ICt7DQo+ID4gKwlpbnQg
aXRlcjsNCj4gPiArCWZvciAoaXRlciA9IDA7IGl0ZXIgPCBSVEVfTUVNQkVSX0JVQ0tFVF9FTlRS
SUVTOyBpdGVyKyspIHsNCj4gPiArCQlpZiAodG1wX3NpZyA9PSBidWNrZXRzW2J1Y2tldF0uc2ln
c1tpdGVyXSAmJg0KPiA+ICsJCQkJYnVja2V0c1tidWNrZXRdLnNldHNbaXRlcl0gIT0NCj4gPiAr
CQkJCVJURV9NRU1CRVJfTk9fTUFUQ0gpIHsNCj4gPiArCQkJc2V0X2lkWypjb3VudGVyXSA9IGJ1
Y2tldHNbYnVja2V0XS5zZXRzW2l0ZXJdOw0KPiA+ICsJCQkoKmNvdW50ZXIpKys7DQo+ID4gKwkJ
CWlmICgqY291bnRlciA+PSBtYXRjaF9wZXJfa2V5KQ0KPiA+ICsJCQkJcmV0dXJuOw0KPiA+ICsJ
CX0NCj4gPiArCX0NCj4gPiArfQ0KPiA+ICsNCj4gPiAraW50DQo+ID4gK3J0ZV9tZW1iZXJfY3Jl
YXRlX2h0KHN0cnVjdCBydGVfbWVtYmVyX3NldHN1bSAqc3MsDQo+ID4gKwkJY29uc3Qgc3RydWN0
IHJ0ZV9tZW1iZXJfcGFyYW1ldGVycyAqcGFyYW1zKSB7DQo+IA0KPiAuLi4NCj4gDQo+ID4gKw0K
PiA+ICsJUlRFX01FTUJFUl9MT0coREVCVUcsICJIYXNoIHRhYmxlIGJhc2VkIGZpbHRlciBjcmVh
dGVkLCAiDQo+ID4gKwkJCSJ0aGUgdGFibGUgaGFzICV1IGVudHJpZXMsICV1IGJ1Y2tldHNcbiIs
DQo+ID4gKwkJbnVtX2J1Y2tldHMsDQo+ID4gKwkJbnVtX2J1Y2tldHMgLyBSVEVfTUVNQkVSX0JV
Q0tFVF9FTlRSSUVTKTsNCj4gDQo+IFNob3VsZG4ndCB0aGlzIGJlICJudW1fYnVja2V0cyAqIFJU
RV9NRU1CRVJfQlVDS0VUX0VOVFJJRVMiIGFuZA0KPiAibnVtX2J1Y2tldHMiPw0KPiANCj4gPiAr
CXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW5saW5lDQo+ID4gK3ZvaWQg
Z2V0X2J1Y2tldHNfaW5kZXgoY29uc3Qgc3RydWN0IHJ0ZV9tZW1iZXJfc2V0c3VtICpzcywgY29u
c3Qgdm9pZA0KPiA+ICprZXksDQo+ID4gKwkJdWludDMyX3QgKnByaW1fYmt0LCB1aW50MzJfdCAq
c2VjX2JrdCwgbWVtYmVyX3NpZ190DQo+ID4gKnNpZykgew0KPiANCj4gInN0YXRpYyBpbmxpbmUg
dm9pZCIgc2hvdWxkIGJlIGluIHRoZSBzYW1lIGxpbmUuDQo+IA0KPiA+ICsJdWludDMyX3QgZmly
c3RfaGFzaCA9IE1FTUJFUl9IQVNIX0ZVTkMoa2V5LCBzcy0+a2V5X2xlbiwNCj4gPiArCQkJCQkJ
c3MtPnByaW1faGFzaF9zZWVkKTsNCj4gPiArCXVpbnQzMl90IHNlY19oYXNoID0gTUVNQkVSX0hB
U0hfRlVOQygmZmlyc3RfaGFzaCwNCj4gPiBzaXplb2YodWludDMyX3QpLA0KPiA+ICsJCQkJCQlz
cy0+c2VjX2hhc2hfc2VlZCk7DQo+ID4gKwkqc2lnID0gZmlyc3RfaGFzaDsNCj4gPiArCWlmIChz
cy0+Y2FjaGUpIHsNCj4gPiArCQkqcHJpbV9ia3QgPSBzZWNfaGFzaCAmIHNzLT5idWNrZXRfbWFz
azsNCj4gDQo+IElzIHRoaXMgY29ycmVjdD8gVXNpbmcgdGhlIHNlY29uZGFyeSBoYXNoIHRvIGFj
Y2VzIHRoZSBwcmltYXJ5IGJ1Y2tldD8NCj4gV2h5IGlzIHRoZSBjYWNoZSBjYXNlIGRpZmZlcmVu
dCBmcm9tIHRoZSBub24tY2FjaGUgY2FzZT8NCj4gSSB0aGluayB0aGlzIGZ1bmN0aW9uIGRlc2Vy
dmVzIHNvbWUgY29tbWVudHMgdG8gZXhwbGFpbiBhbGwgdGhpcyBjYWxjdWxhdGlvbnMuDQo+IA0K
W1dhbmcsIFlpcGVuZ10gDQpXZSB1c2UgdGhlIGZpcnN0IGhhc2ggdmFsdWUgZm9yIHRoZSBzaWdu
YXR1cmUsIGFuZCB0aGUgc2Vjb25kIGhhc2gNCnZhbHVlIHRvIGRlcml2ZSB0aGUgcHJpbWFyeSBh
bmQgc2Vjb25kYXJ5IGJ1Y2tldCBsb2NhdGlvbnMuIA0KDQpGb3IgdGhlIG5vbi1jYWNoZSBtb2Rl
LCB3ZSB1c2UgeG9yIGhhc2hpbmcgd2hpY2ggaXMgY2FsbGVkIHBhcnRpYWwta2V5IGN1Y2tvbyBo
YXNoaW5nDQpwcm9wb3NlZCBieSBCLiBGYW4sIGV0IGFsJ3MgcGFwZXINCiJDdWNrb28gRmlsdGVy
OiBQcmFjdGljYWxseSBCZXR0ZXIgVGhhbiBCbG9vbSIuIFNpbmNlIHRoZSBub24tY2FjaGUgbW9k
ZQ0KaXMgc2ltaWxhciB0byBjdWNrb28gZmlsdGVyLCB0aGUgcGFydGlhbCBrZXkgaGFzaCBlbmFi
bGVzIHRoZSBkZXJpdmF0aW9uIG9mIGFsdGVybmF0aXZlDQpidWNrZXQgbG9jYXRpb24gYnkgb25s
eSB1c2luZyBzaWduYXR1cmVzIHdpdGhvdXQgZnVsbCBrZXkgb3Igc3RvcmluZyBhbHRlcm5hdGl2
ZSBzaWduYXR1cmUuDQoNCkZvciBjYWNoZSBtb2RlLCB3ZSBkbyBub3QgbmVlZCB0byBnZXQgYWx0
ZXJuYXRpdmUgYnVja2V0IChqdXN0IG92ZXJ3cml0dGVuKSwgc28gDQp3ZSB1c2UgaGlnaGVyL2xv
d2VyIGJpdHMgZm9yIG1vcmUgaW5kZXBlbmRlbnQgaGFzaCB2YWx1ZXMuDQoNCkkgd2lsbCBhZGQg
YSBjb21tZW50IHRvIGV4cGxhaW4gaW4gbmV4dCB2ZXJzaW9uLg0KDQoNCj4gPiArCQkqc2VjX2Jr
dCA9ICAoc2VjX2hhc2ggPj4gMTYpICYgc3MtPmJ1Y2tldF9tYXNrOw0KPiA+ICsJfSBlbHNlIHsN
Cj4gPiArCQkqcHJpbV9ia3QgPSBzZWNfaGFzaCAmIHNzLT5idWNrZXRfbWFzazsNCj4gPiArCQkq
c2VjX2JrdCA9ICAoKnByaW1fYmt0IF4gKnNpZykgJiBzcy0+YnVja2V0X21hc2s7DQo+ID4gKwl9
DQo+ID4gK30NCj4gPiArDQo+ID4gK2ludA0KPiA+ICtydGVfbWVtYmVyX2xvb2t1cF9odChjb25z
dCBzdHJ1Y3QgcnRlX21lbWJlcl9zZXRzdW0gKnNzLA0KPiA+ICsJCWNvbnN0IHZvaWQgKmtleSwg
bWVtYmVyX3NldF90ICpzZXRfaWQpIHsNCj4gPiArCXVpbnQzMl90IHByaW1fYnVja2V0LCBzZWNf
YnVja2V0Ow0KPiA+ICsJbWVtYmVyX3NpZ190IHRtcF9zaWc7DQo+ID4gKwlzdHJ1Y3QgbWVtYmVy
X2h0X2J1Y2tldCAqYnVja2V0cyA9IHNzLT50YWJsZTsNCj4gPiArDQo+ID4gKw0KPiANCj4gUmVt
b3ZlIGV4dHJhIGJsYW5rIGxpbmUuDQo+IA0KPiA+ICsJKnNldF9pZCA9IFJURV9NRU1CRVJfTk9f
TUFUQ0g7DQo+ID4gKwlnZXRfYnVja2V0c19pbmRleChzcywga2V5LCAmcHJpbV9idWNrZXQsICZz
ZWNfYnVja2V0LA0KPiA+ICZ0bXBfc2lnKTsNCj4gPiArDQo+ID4gKwlpZiAoc2VhcmNoX2J1Y2tl
dF9zaW5nbGUocHJpbV9idWNrZXQsIHRtcF9zaWcsIGJ1Y2tldHMsDQo+ID4gKwkJCXNldF9pZCkg
fHwNCj4gPiArCQkJc2VhcmNoX2J1Y2tldF9zaW5nbGUoc2VjX2J1Y2tldCwgdG1wX3NpZywNCj4g
PiArCQkJCWJ1Y2tldHMsIHNldF9pZCkpDQo+ID4gKwkJcmV0dXJuIDE7DQo+ID4gKw0KPiA+ICsJ
cmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3VpbnQzMl90DQo+ID4gK3J0ZV9tZW1iZXJf
bG9va3VwX2J1bGtfaHQoY29uc3Qgc3RydWN0IHJ0ZV9tZW1iZXJfc2V0c3VtICpzcywNCj4gPiAr
CQljb25zdCB2b2lkICoqa2V5cywgdWludDMyX3QgbnVtX2tleXMsIG1lbWJlcl9zZXRfdA0KPiA+
ICpzZXRfaWQpIHsNCj4gPiArCXVpbnQzMl90IGk7DQo+ID4gKwl1aW50MzJfdCByZXQgPSAwOw0K
PiANCj4gQmV0dGVyIGNoYW5nZSB0byBzb21ldGhpbmcgbW9yZSBtZWFuaW5nZnVsLCBsaWtlICJu
cl9tYXRjaGVzIi4NCj4gDQo+ID4gKwlzdHJ1Y3QgbWVtYmVyX2h0X2J1Y2tldCAqYnVja2V0cyA9
IHNzLT50YWJsZTsNCj4gPiArCW1lbWJlcl9zaWdfdCB0bXBfc2lnW1JURV9NRU1CRVJfTE9PS1VQ
X0JVTEtfTUFYXTsNCj4gPiArCXVpbnQzMl90IHByaW1fYnVja2V0c1tSVEVfTUVNQkVSX0xPT0tV
UF9CVUxLX01BWF07DQo+ID4gKwl1aW50MzJfdCBzZWNfYnVja2V0c1tSVEVfTUVNQkVSX0xPT0tV
UF9CVUxLX01BWF07DQo+ID4gKw0KPiA+ICsJZm9yIChpID0gMDsgaSA8IG51bV9rZXlzOyBpKysp
IHsNCj4gPiArCQlnZXRfYnVja2V0c19pbmRleChzcywga2V5c1tpXSwgJnByaW1fYnVja2V0c1tp
XSwNCj4gPiArCQkJCSZzZWNfYnVja2V0c1tpXSwgJnRtcF9zaWdbaV0pOw0KPiA+ICsJCXJ0ZV9w
cmVmZXRjaDAoJmJ1Y2tldHNbcHJpbV9idWNrZXRzW2ldXSk7DQo+ID4gKwkJcnRlX3ByZWZldGNo
MCgmYnVja2V0c1tzZWNfYnVja2V0c1tpXV0pOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWZvciAo
aSA9IDA7IGkgPCBudW1fa2V5czsgaSsrKSB7DQo+ID4gKwkJaWYgKHNlYXJjaF9idWNrZXRfc2lu
Z2xlKHByaW1fYnVja2V0c1tpXSwgdG1wX3NpZ1tpXSwNCj4gPiArCQkJCWJ1Y2tldHMsICZzZXRf
aWRbaV0pIHx8DQo+ID4gKwkJCQlzZWFyY2hfYnVja2V0X3NpbmdsZShzZWNfYnVja2V0c1tpXSwN
Cj4gPiArCQkJCXRtcF9zaWdbaV0sIGJ1Y2tldHMsICZzZXRfaWRbaV0pKQ0KPiA+ICsJCQlyZXQr
KzsNCj4gPiArCQllbHNlDQo+ID4gKwkJCXNldF9pZFtpXSA9IFJURV9NRU1CRVJfTk9fTUFUQ0g7
DQo+ID4gKwl9DQo+ID4gKwlyZXR1cm4gcmV0Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICt1aW50MzJf
dA0KPiA+ICtydGVfbWVtYmVyX2xvb2t1cF9tdWx0aV9odChjb25zdCBzdHJ1Y3QgcnRlX21lbWJl
cl9zZXRzdW0gKnNzLA0KPiA+ICsJCWNvbnN0IHZvaWQgKmtleSwgdWludDMyX3QgbWF0Y2hfcGVy
X2tleSwNCj4gPiArCQltZW1iZXJfc2V0X3QgKnNldF9pZCkNCj4gPiArew0KPiA+ICsJdWludDMy
X3QgcmV0ID0gMDsNCj4gDQo+IEJldHRlciBjaGFuZ2UgdG8gc29tZXRoaW5nIG1vcmUgbWVhbmlu
Z2Z1bCwgbGlrZSAibnJfbWF0Y2hlcyIuDQo+IFRoaXMgYXBwbGllcyB0byB0aGUgZm9sbG93aW5n
IGZ1bmN0aW9ucy4NCj4gDQo+ID4gKwl1aW50MzJfdCBwcmltX2J1Y2tldCwgc2VjX2J1Y2tldDsN
Cj4gPiArCW1lbWJlcl9zaWdfdCB0bXBfc2lnOw0KPiA+ICsJc3RydWN0IG1lbWJlcl9odF9idWNr
ZXQgKmJ1Y2tldHMgPSBzcy0+dGFibGU7DQo+ID4gKw0KPiA+ICsJZ2V0X2J1Y2tldHNfaW5kZXgo
c3MsIGtleSwgJnByaW1fYnVja2V0LCAmc2VjX2J1Y2tldCwNCj4gPiAmdG1wX3NpZyk7DQo+ID4g
Kw0KPiA+ICsJc2VhcmNoX2J1Y2tldF9tdWx0aShwcmltX2J1Y2tldCwgdG1wX3NpZywgYnVja2V0
cywgJnJldCwNCj4gPiArCQkJIG1hdGNoX3Blcl9rZXksIHNldF9pZCk7DQo+ID4gKwlpZiAocmV0
IDwgbWF0Y2hfcGVyX2tleSkNCj4gPiArCQlzZWFyY2hfYnVja2V0X211bHRpKHNlY19idWNrZXQs
IHRtcF9zaWcsDQo+ID4gKwkJCWJ1Y2tldHMsICZyZXQsIG1hdGNoX3Blcl9rZXksIHNldF9pZCk7
DQo+ID4gKwlyZXR1cm4gcmV0Ow0KPiA+ICt9DQo+ID4gKw0KPiANCj4gLi4uDQo+IA0KPiA+ICtz
dGF0aWMgaW5saW5lIGludA0KPiA+ICt0cnlfaW5zZXJ0KHN0cnVjdCBtZW1iZXJfaHRfYnVja2V0
ICpidWNrZXRzLCB1aW50MzJfdCBwcmltLCB1aW50MzJfdA0KPiA+IHNlYywNCj4gPiArCQltZW1i
ZXJfc2lnX3Qgc2lnLCBtZW1iZXJfc2V0X3Qgc2V0X2lkKSB7DQo+ID4gKwlpbnQgaTsNCj4gPiAr
CS8qIElmIG5vdCBmdWxsIHRoZW4gaW5zZXJ0IGludG8gb25lIHNsb3QqLw0KPiANCj4gRXh0cmEg
c3BhY2UgYXQgdGhlIGVuZCBvZiB0aGUgY29tbWVudCwgYmVmb3JlICovDQo+ID4gKwlmb3IgKGkg
PSAwOyBpIDwgUlRFX01FTUJFUl9CVUNLRVRfRU5UUklFUzsgaSsrKSB7DQo+ID4gKwkJaWYgKGJ1
Y2tldHNbcHJpbV0uc2V0c1tpXSA9PSBSVEVfTUVNQkVSX05PX01BVENIKSB7DQo+ID4gKwkJCWJ1
Y2tldHNbcHJpbV0uc2lnc1tpXSA9IHNpZzsNCj4gPiArCQkJYnVja2V0c1twcmltXS5zZXRzW2ld
ID0gc2V0X2lkOw0KPiA+ICsJCQlyZXR1cm4gMDsNCj4gPiArCQl9DQo+ID4gKwl9DQo+ID4gKwkv
KiBpZiBwcmltIGZhaWxlZCwgd2UgbmVlZCB0byBhY2Nlc3Mgc2Vjb25kIGNhY2hlIGxpbmUgKi8N
Cj4gDQo+IFNlY29uZCBidWNrZXQsIGluc3RlYWQgb2Ygc2Vjb25kIGNhY2hlIGxpbmU/IEFsc28s
IGNoZWNrIHRoYXQgYWxsIGNvbW1lbnRzDQo+IHN0YXJ0IHdpdGggY2FwaXRhbCBsZXR0ZXJzLg0K
PiANCj4gPiArCWZvciAoaSA9IDA7IGkgPCBSVEVfTUVNQkVSX0JVQ0tFVF9FTlRSSUVTOyBpKysp
IHsNCj4gPiArCQlpZiAoYnVja2V0c1tzZWNdLnNldHNbaV0gPT0gUlRFX01FTUJFUl9OT19NQVRD
SCkgew0KPiA+ICsJCQlidWNrZXRzW3NlY10uc2lnc1tpXSA9IHNpZzsNCj4gPiArCQkJYnVja2V0
c1tzZWNdLnNldHNbaV0gPSBzZXRfaWQ7DQo+ID4gKwkJCXJldHVybiAwOw0KPiA+ICsJCX0NCj4g
PiArCX0NCj4gPiArCXJldHVybiAtMTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGlubGlu
ZSBpbnQNCj4gPiArdHJ5X292ZXJ3cml0ZShzdHJ1Y3QgbWVtYmVyX2h0X2J1Y2tldCAqYnVja2V0
cywgdWludDMyX3QgcHJpbSwNCj4gPiB1aW50MzJfdCBzZWMsDQo+ID4gKwkJbWVtYmVyX3NpZ190
IHNpZywgbWVtYmVyX3NldF90IHNldF9pZCkgew0KPiA+ICsJaWYgKGluc2VydF9vdmVyd3JpdGVf
c2VhcmNoKHByaW0sIHNpZywgYnVja2V0cywgc2V0X2lkKSB8fA0KPiA+ICsJCQlpbnNlcnRfb3Zl
cndyaXRlX3NlYXJjaChzZWMsIHNpZywgYnVja2V0cywNCj4gPiArCQkJCXNldF9pZCkpDQo+ID4g
KwkJcmV0dXJuIDA7DQo+ID4gKwlyZXR1cm4gLTE7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRp
YyBpbmxpbmUgaW50DQo+ID4gK2V2aWN0X2Zyb21fYnVja2V0KHZvaWQpDQo+ID4gK3sNCj4gPiAr
CS8qIGZvciBub3csIHdlIHJhbmRvbWx5IHBpY2sgb25lIGVudHJ5IHRvIGV2aWN0ICovDQo+ID4g
KwlyZXR1cm4gcnRlX3JhbmQoKSAmIChSVEVfTUVNQkVSX0JVQ0tFVF9FTlRSSUVTIC0gMSk7IH0N
Cj4gPiArDQo+ID4gKy8qDQo+ID4gKyAqIFRoaXMgZnVuY3Rpb24gaXMgc2ltaWxhciB0byB0aGUg
Y3Vja29vIGhhc2ggbWFrZV9zcGFjZSBmdW5jdGlvbiBpbg0KPiA+ICtoYXNoDQo+ID4gKyAqIGxp
YnJhcnkNCj4gPiArICovDQo+ID4gK3N0YXRpYyBpbmxpbmUgaW50DQo+ID4gK21ha2Vfc3BhY2Vf
YnVja2V0KGNvbnN0IHN0cnVjdCBydGVfbWVtYmVyX3NldHN1bSAqc3MsIHVpbnQzMl90DQo+ID4g
Ymt0X251bSkNCj4gPiArew0KPiA+ICsJc3RhdGljIHVuc2lnbmVkIGludCBucl9wdXNoZXM7DQo+
IA0KPiBBIHBhdGNoIGhhcyBiZWVuIHNlbnQgdG8gY2hhbmdlIHRoaXMgc3RhdGljIHZhcmlhYmxl
IHRvIGJlIG5vbi1zdGF0aWMsDQo+IGluIHRoZSBoYXNoIGxpYnJhcnkuIFNpbmNlIHRoaXMgaXMg
Zm9sbG93aW5nIGEgc2ltaWxhciBpbXBsZW1lbnRhdGlvbiwNCj4gaXQgd2lsbCBuZWVkIHRoZSBz
YW1lIGNoYW5nZToNCj4gaHR0cDovL2RwZGsub3JnL2Rldi9wYXRjaHdvcmsvcGF0Y2gvMjkxMDQv
DQo+IA0KPiA+ICsJdW5zaWduZWQgaW50IGksIGo7DQo+ID4gKwlpbnQgcmV0Ow0KPiA+ICsJc3Ry
dWN0IG1lbWJlcl9odF9idWNrZXQgKmJ1Y2tldHMgPSBzcy0+dGFibGU7DQo+ID4gKwl1aW50MzJf
dCBuZXh0X2J1Y2tldF9pZHg7DQo+ID4gKwlzdHJ1Y3QgbWVtYmVyX2h0X2J1Y2tldA0KPiA+ICpu
ZXh0X2JrdFtSVEVfTUVNQkVSX0JVQ0tFVF9FTlRSSUVTXTsNCj4gPiArCXN0cnVjdCBtZW1iZXJf
aHRfYnVja2V0ICpia3QgPSAmYnVja2V0c1tia3RfbnVtXTsNCj4gPiArCW1lbWJlcl9zZXRfdCBm
bGFnX21hc2sgPSAxVSA8PCAoc2l6ZW9mKG1lbWJlcl9zZXRfdCkgKiA4IC0gMSk7DQo+IA0KPiBJ
bmNsdWRlIGEgY29tbWVudCBhYm91dCB0aGlzIGZsYWdfbWFzaw0KPiAoTVNCIGlzIHNldCB0byBp
bmRpY2F0ZSBpZiBhbiBlbnRyeSBoYXMgYmVlbiBhbHJlYWR5IHB1c2hlZCkuDQo+IA0KPiA+ICsJ
LyoNCj4gPiArCSAqIFB1c2ggZXhpc3RpbmcgaXRlbSAoc2VhcmNoIGZvciBidWNrZXQgd2l0aCBz
cGFjZSBpbg0KPiA+ICsJICogYWx0ZXJuYXRpdmUgbG9jYXRpb25zKSB0byBpdHMgYWx0ZXJuYXRp
dmUgbG9jYXRpb24NCj4gPiArCSAqLw0KPiA+ICsJZm9yIChpID0gMDsgaSA8IFJURV9NRU1CRVJf
QlVDS0VUX0VOVFJJRVM7IGkrKykgew0KPiA+ICsJCS8qIFNlYXJjaCBmb3Igc3BhY2UgaW4gYWx0
ZXJuYXRpdmUgbG9jYXRpb25zICovDQo+ID4gKwkJbmV4dF9idWNrZXRfaWR4ID0gKGJrdC0+c2ln
c1tpXSBeIGJrdF9udW0pICYgc3MtDQo+ID4gPmJ1Y2tldF9tYXNrOw0KPiA+ICsJCW5leHRfYmt0
W2ldID0gJmJ1Y2tldHNbbmV4dF9idWNrZXRfaWR4XTsNCj4gPiArCQlmb3IgKGogPSAwOyBqIDwg
UlRFX01FTUJFUl9CVUNLRVRfRU5UUklFUzsgaisrKSB7DQo+ID4gKwkJCWlmIChuZXh0X2JrdFtp
XS0+c2V0c1tqXSA9PQ0KPiA+IFJURV9NRU1CRVJfTk9fTUFUQ0gpDQo+ID4gKwkJCQlicmVhazsN
Cj4gPiArCQl9DQo+ID4gKw0KPiA+ICsJCWlmIChqICE9IFJURV9NRU1CRVJfQlVDS0VUX0VOVFJJ
RVMpDQo+ID4gKwkJCWJyZWFrOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCS8qIEFsdGVybmF0aXZl
IGxvY2F0aW9uIGhhcyBzcGFyZSByb29tIChlbmQgb2YgcmVjdXJzaXZlIGZ1bmN0aW9uKQ0KPiA+
ICovDQo+ID4gKwlpZiAoaSAhPSBSVEVfTUVNQkVSX0JVQ0tFVF9FTlRSSUVTKSB7DQo+ID4gKwkJ
bmV4dF9ia3RbaV0tPnNpZ3Nbal0gPSBia3QtPnNpZ3NbaV07DQo+ID4gKwkJbmV4dF9ia3RbaV0t
PnNldHNbal0gPSBia3QtPnNldHNbaV07DQo+ID4gKwkJcmV0dXJuIGk7DQo+IA0KPiBTaW5jZSB5
b3Ugd2FudCB0byByZXR1cm4gMSB3aGVuIHRoZXJlIGlzIGFuIGV2aWN0aW9uLCBJIHRoaW5rIHlv
dSBjYW4gcmV0dXJuIDENCj4gaGVyZSwNCj4gbm8gbmVlZCB0byByZXR1cm4gdGhlIGluZGV4IGlu
IHRoZSBidWNrZXQuDQpbV2FuZywgWWlwZW5nXSANCldlIHJldHVybiB0aGUgaW5kZXggaW4gdGhl
IGJ1Y2tldCB0byBrZWVwIHRoZSByZWN1cnNpdmUgZnVuY3Rpb24gZ29pbmcgcmlnaHQ/DQpJLmUu
IHRoZSBtYWtlX3NwYWNlIG5lZWRzIHRoZSByZXR1cm5lZCBpbmRleCB0byBkaXNwbGFjZSB0aGUg
ZW50cnkuDQoNCj4gDQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJLyogUGljayBlbnRyeSB0aGF0IGhh
cyBub3QgYmVlbiBwdXNoZWQgeWV0ICovDQo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgUlRFX01FTUJF
Ul9CVUNLRVRfRU5UUklFUzsgaSsrKQ0KPiA+ICsJCWlmICgoYmt0LT5zZXRzW2ldICYgZmxhZ19t
YXNrKSA9PSAwKQ0KPiA+ICsJCQlicmVhazsNCj4gPiArDQo+ID4gKwkvKiBBbGwgZW50cmllcyBo
YXZlIGJlZW4gcHVzaGVkLCBzbyBlbnRyeSBjYW5ub3QgYmUgYWRkZWQgKi8NCj4gPiArCWlmIChp
ID09IFJURV9NRU1CRVJfQlVDS0VUX0VOVFJJRVMgfHwNCj4gPiArCQkJbnJfcHVzaGVzID4gUlRF
X01FTUJFUl9NQVhfUFVTSEVTKQ0KPiA+ICsJCXJldHVybiAtRU5PU1BDOw0KPiA+ICsNCj4gPiAr
CW5leHRfYnVja2V0X2lkeCA9IChia3QtPnNpZ3NbaV0gXiBia3RfbnVtKSAmIHNzLT5idWNrZXRf
bWFzazsNCj4gPiArCS8qIFNldCBmbGFnIHRvIGluZGljYXRlIHRoYXQgdGhpcyBlbnRyeSBpcyBn
b2luZyB0byBiZSBwdXNoZWQgKi8NCj4gPiArCWJrdC0+c2V0c1tpXSB8PSBmbGFnX21hc2s7DQo+
ID4gKw0KPiA+ICsJbnJfcHVzaGVzKys7DQo+ID4gKwkvKiBOZWVkIHJvb20gaW4gYWx0ZXJuYXRp
dmUgYnVja2V0IHRvIGluc2VydCB0aGUgcHVzaGVkIGVudHJ5ICovDQo+ID4gKwlyZXQgPSBtYWtl
X3NwYWNlX2J1Y2tldChzcywgbmV4dF9idWNrZXRfaWR4KTsNCj4gPiArCS8qDQo+ID4gKwkgKiBB
ZnRlciByZWN1cnNpdmUgZnVuY3Rpb24uDQo+ID4gKwkgKiBDbGVhciBmbGFncyBhbmQgaW5zZXJ0
IHRoZSBwdXNoZWQgZW50cnkNCj4gPiArCSAqIGluIGl0cyBhbHRlcm5hdGl2ZSBsb2NhdGlvbiBp
ZiBzdWNjZXNzZnVsLA0KPiA+ICsJICogb3IgcmV0dXJuIGVycm9yDQo+ID4gKwkgKi8NCj4gPiAr
CWJrdC0+c2V0c1tpXSAmPSB+ZmxhZ19tYXNrOw0KPiA+ICsJbnJfcHVzaGVzID0gMDsNCj4gPiAr
CWlmIChyZXQgPj0gMCkgew0KPiA+ICsJCW5leHRfYmt0W2ldLT5zaWdzW3JldF0gPSBia3QtPnNp
Z3NbaV07DQo+ID4gKwkJbmV4dF9ia3RbaV0tPnNldHNbcmV0XSA9IGJrdC0+c2V0c1tpXTsNCj4g
PiArCQlyZXR1cm4gaTsNCj4gDQo+IFNhbWUgYWJvdXQgcmV0dXJuIDEgaGVyZS4NCj4gDQo+ID4g
Kwl9IGVsc2UNCj4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtpbnQNCj4g
PiArcnRlX21lbWJlcl9hZGRfaHQoY29uc3Qgc3RydWN0IHJ0ZV9tZW1iZXJfc2V0c3VtICpzcywN
Cj4gPiArCQljb25zdCB2b2lkICprZXksIG1lbWJlcl9zZXRfdCBzZXRfaWQpIHsNCj4gPiArCWlu
dCByZXQ7DQo+ID4gKwl1aW50MzJfdCBwcmltX2J1Y2tldCwgc2VjX2J1Y2tldDsNCj4gPiArCW1l
bWJlcl9zaWdfdCB0bXBfc2lnOw0KPiA+ICsJc3RydWN0IG1lbWJlcl9odF9idWNrZXQgKmJ1Y2tl
dHMgPSBzcy0+dGFibGU7DQo+ID4gKwltZW1iZXJfc2V0X3QgZmxhZ19tYXNrID0gMVUgPDwgKHNp
emVvZihtZW1iZXJfc2V0X3QpICogOCAtIDEpOw0KPiA+ICsNCj4gPiArCWlmIChzZXRfaWQgPT0g
UlRFX01FTUJFUl9OT19NQVRDSCB8fCAoc2V0X2lkICYgZmxhZ19tYXNrKSAhPQ0KPiA+IDApDQo+
ID4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gKw0KPiA+ICsJZ2V0X2J1Y2tldHNfaW5kZXgoc3Ms
IGtleSwgJnByaW1fYnVja2V0LCAmc2VjX2J1Y2tldCwNCj4gPiAmdG1wX3NpZyk7DQo+ID4gKw0K
PiA+ICsJLyogaWYgaXQgaXMgY2FjaGUgYmFzZWQgZmlsdGVyLCB3ZSB0cnkgb3ZlcndyaXRpbmcg
ZXhpc3RpbmcgZW50cnkgKi8NCj4gPiArCWlmIChzcy0+Y2FjaGUpIHsNCj4gPiArCQlyZXQgPSB0
cnlfb3ZlcndyaXRlKGJ1Y2tldHMsIHByaW1fYnVja2V0LCBzZWNfYnVja2V0LA0KPiA+IHRtcF9z
aWcsDQo+ID4gKwkJCQkJc2V0X2lkKTsNCj4gDQo+IElmIHRoZSBjb21tZW50IHRoYXQgSSBtYWRl
IGFib3ZlIChpbiB0aGUgaW5zZXJ0X292ZXJ3cml0ZV9zZWFyY2ggZnVuY3Rpb24pDQo+IGlzIHRy
dWUgYW5kIHRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byB1cGRhdGUgdGhlIHNldF9pZCBvZiBhbiBl
bnRyeSwNCj4gY2FuIHRoaXMgYmUgdXNlZCBhbHNvIGluIG5vbi1jYWNoZSBtb2RlPw0KPiANCltX
YW5nLCBZaXBlbmddIA0KSSBjaGFuZ2VkIHRoZSBuYW1lIHRvIHVwZGF0ZV9lbnRyeV9zZWFyY2gu
IEZvciBub24tY2FjaGUgbW9kZSwgd2UgZG8gbm90IGRvDQp1cGRhdGUgZXZlbiBpZiB0aGUga2V5
IGZpbmRzIGFuIGVudHJ5IHdpdGggdGhlIHNhbWUgc2lnbmF0dXJlIGR1cmluZyBhZGQuDQpUaGlz
IGlzIGJlY2F1c2UgZm9yIG5vbi1jYWNoZSBtb2RlLCB3ZSBkbyBub3QgYWxsb3cgZmFsc2UgbmVn
YXRpdmUsICBrZXlzDQpPdmVyd3JpdGluZyBlYWNoIG90aGVyIG1heSBpbmN1ciBmYWxzZSBuZWdh
dGl2ZS4NCg0KSSB3aWxsIGFkZCBtb3JlIGV4cGxhbmF0aW9uIGluIGNvbW1lbnRzLg0KDQo+ID4g
KwkJaWYgKHJldCAhPSAtMSkNCj4gPiArCQkJcmV0dXJuIHJldDsNCj4gPiArCX0NCj4gPiArCS8q
IElmIG5vdCBmdWxsIHRoZW4gaW5zZXJ0IGludG8gb25lIHNsb3QqLw0KPiANCj4gRXh0cmEgc3Bh
Y2UgYmVmb3JlICovLg0KPiANCj4gPiArCXJldCA9IHRyeV9pbnNlcnQoYnVja2V0cywgcHJpbV9i
dWNrZXQsIHNlY19idWNrZXQsIHRtcF9zaWcsIHNldF9pZCk7DQo+ID4gKwlpZiAocmV0ICE9IC0x
KQ0KPiA+ICsJCXJldHVybiByZXQ7DQo+ID4gKw0KPiA+ICsJLyogcmFuZG9tIHBpY2sgcHJpbSBv
ciBzZWMgZm9yIHJlY3Vyc2l2ZSBkaXNwbGFjZW1lbnQgKi8NCj4gPiArDQo+ID4gKwl1aW50MzJf
dCBzZWxlY3RfYnVja2V0ID0gKHRtcF9zaWcgJiYgMVUpID8gcHJpbV9idWNrZXQgOg0KPiA+IHNl
Y19idWNrZXQ7DQo+ID4gKwlpZiAoc3MtPmNhY2hlKSB7DQo+ID4gKwkJcmV0ID0gZXZpY3RfZnJv
bV9idWNrZXQoKTsNCj4gPiArCQlidWNrZXRzW3NlbGVjdF9idWNrZXRdLnNpZ3NbcmV0XSA9IHRt
cF9zaWc7DQo+ID4gKwkJYnVja2V0c1tzZWxlY3RfYnVja2V0XS5zZXRzW3JldF0gPSBzZXRfaWQ7
DQo+ID4gKwkJcmV0dXJuIDE7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmV0ID0gbWFrZV9zcGFj
ZV9idWNrZXQoc3MsIHNlbGVjdF9idWNrZXQpOw0KPiANCj4gSWYgdGhpcyBvbmx5IHJldHVybiBh
IG5lZ2F0aXZlIHZhbHVlIHdoZW4gZmFpbHVyZSBvciAxIHdoZW4gc3VjY2VzcywNCj4geW91IGNh
biBjaGVjayBmb3IgcmV0ID09IDEgYW5kIG5vdCBzZXQgcmV0ID0gMS4NCj4gDQpbV2FuZywgWWlw
ZW5nXSANClBsZWFzZSBzZWUgbXkgY29tbWVudHMgYWJvdmUsIGlmIHdlIHJldHVybiAxIGZvciBt
YWtlX3NwYWNlLCB3aWxsIHRoZQ0KcmVjdXJzaXZlIHByb2Nlc3MgYmUgYnJva2VuPw0KDQo+ID4g
KwlpZiAocmV0ID49IDApIHsNCj4gPiArCQlidWNrZXRzW3NlbGVjdF9idWNrZXRdLnNpZ3NbcmV0
XSA9IHRtcF9zaWc7DQo+ID4gKwkJYnVja2V0c1tzZWxlY3RfYnVja2V0XS5zZXRzW3JldF0gPSBz
ZXRfaWQ7DQo+ID4gKwkJcmV0ID0gMTsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXR1cm4gcmV0
Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICt2b2lkDQo+ID4gK3J0ZV9tZW1iZXJfZnJlZV9odChzdHJ1
Y3QgcnRlX21lbWJlcl9zZXRzdW0gKnNzKSB7DQo+ID4gKwlydGVfZnJlZShzcy0+dGFibGUpOw0K
PiA+ICt9DQo+ID4gKw0KPiANCj4gLi4uDQo+IA0KPiA+ICsNCj4gPiArdm9pZA0KPiA+ICtydGVf
bWVtYmVyX3Jlc2V0X2h0KGNvbnN0IHN0cnVjdCBydGVfbWVtYmVyX3NldHN1bSAqc3MpIHsNCj4g
PiArCXVpbnQzMl90IGksIGo7DQo+ID4gKwlzdHJ1Y3QgbWVtYmVyX2h0X2J1Y2tldCAqYnVja2V0
cyA9IHNzLT50YWJsZTsNCj4gDQo+IFRvIGtlZXAgdG8gY29uc2lzdGVuY3ksIEkgd291bGQgbGVh
dmUgYSBibGFuayBsaW5lIGJldHdlZW4gdGhlIHZhcmlhYmxlcw0KPiBkZWNsYXJhdGlvbnMNCj4g
YW5kIHRoZSByZXN0IG9mIHRoZSBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbi4NCj4gDQo+ID4gKwlm
b3IgKGkgPSAwOyBpIDwgc3MtPmJ1Y2tldF9jbnQ7IGkrKykgew0KPiA+ICsJCWZvciAoaiA9IDA7
IGogPCBSVEVfTUVNQkVSX0JVQ0tFVF9FTlRSSUVTOyBqKyspDQo+ID4gKwkJCWJ1Y2tldHNbaV0u
c2V0c1tqXSA9IFJURV9NRU1CRVJfTk9fTUFUQ0g7DQo+ID4gKwl9DQo+ID4gK30NCg0K