From: "Gix, Brian" <brian.gix@intel.com>
To: "marcel@holtmann.org" <marcel@holtmann.org>
Cc: "johan.hedberg@gmail.com" <johan.hedberg@gmail.com>,
"linux-bluetooth@vger.kernel.org"
<linux-bluetooth@vger.kernel.org>,
"Stotland, Inga" <inga.stotland@intel.com>
Subject: Re: [PATCH BlueZ v5 02/14] mesh: Mesh crypto support
Date: Sun, 8 Jul 2018 15:07:00 +0000 [thread overview]
Message-ID: <1531062419.7346.19.camel@intel.com> (raw)
In-Reply-To: <26C9EEB7-AC2B-4880-9C01-C287F45BB6CA@holtmann.org>
SGkgTWFyY2VsLA0KDQpBbGwgb2YgeW91ciBiZWxvdyBjb21tZW50cyB3aWxsIGJlIGluY29ycG9y
YXRlZCBpbnRvIHBhdGNoc2V0IHY2DQoNCk9uIEZyaSwgMjAxOC0wNy0wNiBhdCAyMDoxMCArMDIw
MCwgTWFyY2VsIEhvbHRtYW5uIHdyb3RlOg0KPiBIaSBCcmlhbiwNCj4gDQo+ID4gLS0tDQo+ID4g
bWVzaC9jcnlwdG8uYyB8IDE2MDcgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrDQo+ID4gMSBmaWxlIGNoYW5nZWQsIDE2MDcgaW5zZXJ0aW9u
cygrKQ0KPiA+IGNyZWF0ZSBtb2RlIDEwMDY0NCBtZXNoL2NyeXB0by5jDQo+IA0KPiB3aGF0IEkg
YW0gbWlzc2luZyBpcyBhIHVuaXQvdGVzdC1tZXNoLWNyeXB0byB3aXRoIHRoZSBNZXNoIHRlc3Qg
dmVjdG9ycy4NCj4gDQo+ID4gDQo+ID4gZGlmZiAtLWdpdCBhL21lc2gvY3J5cHRvLmMgYi9tZXNo
L2NyeXB0by5jDQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAwMDAu
LmM0MjRjZjYyMg0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9tZXNoL2NyeXB0by5jDQo+
ID4gQEAgLTAsMCArMSwxNjA3IEBADQo+ID4gKy8qDQo+ID4gKyAqDQo+ID4gKyAqICBCbHVlWiAt
IEJsdWV0b290aCBwcm90b2NvbCBzdGFjayBmb3IgTGludXgNCj4gPiArICoNCj4gPiArICogIENv
cHlyaWdodCAoQykgMjAxOCAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
DQo+ID4gKyAqDQo+ID4gKyAqDQo+ID4gKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yDQo+ID4gKyAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljDQo+ID4gKyAqICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXINCj4gPiArICogIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLg0KPiA+ICsgKg0KPiA+ICsgKiAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsDQo+ID4gKyAq
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZg0KPiA+ICsgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUNCj4gPiArICogIExlc3NlciBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQo+ID4gKyAqDQo+ID4gKyAqLw0KPiA+ICsNCj4g
PiArI2lmZGVmIEhBVkVfQ09ORklHX0gNCj4gPiArI2luY2x1ZGUgPGNvbmZpZy5oPg0KPiA+ICsj
ZW5kaWYNCj4gPiArDQo+ID4gKyNpbmNsdWRlIDxmY250bC5oPg0KPiA+ICsjaW5jbHVkZSA8dW5p
c3RkLmg+DQo+ID4gKyNpbmNsdWRlIDxzdHJpbmcuaD4NCj4gPiArI2luY2x1ZGUgPHN5cy9zb2Nr
ZXQuaD4NCj4gPiArI2luY2x1ZGUgPGVsbC9lbGwuaD4NCj4gPiArDQo+ID4gKyNpbmNsdWRlIDxs
aW51eC9pZl9hbGcuaD4NCj4gPiArDQo+ID4gKyNpZm5kZWYgU09MX0FMRw0KPiA+ICsjZGVmaW5l
IFNPTF9BTEcJCTI3OQ0KPiA+ICsjZW5kaWYNCj4gPiArDQo+ID4gKyNpZm5kZWYgQUxHX1NFVF9B
RUFEX0FVVEhTSVpFDQo+ID4gKyNkZWZpbmUgQUxHX1NFVF9BRUFEX0FVVEhTSVpFCTUNCj4gPiAr
I2VuZGlmDQo+ID4gKw0KPiA+ICsjaW5jbHVkZSAibWVzaC9tZXNoLmgiDQo+ID4gKyNpbmNsdWRl
ICJtZXNoL25vZGUuaCINCj4gPiArI2luY2x1ZGUgIm1lc2gvbmV0LmgiDQo+ID4gKyNpbmNsdWRl
ICJtZXNoL2NyeXB0by5oIg0KPiA+ICsjaW5jbHVkZSAibWVzaC9kaXNwbGF5LmgiDQo+IA0KPiBO
byBpZGVhIHdoeSB5b3Ugd291bGQgbmVlZCBtZXNoL2Rpc3BsYXkuaCBoZXJlLg0KPiANCj4gPiAr
DQo+ID4gK3N0YXRpYyBpbnQgYWxnX25ldyhpbnQgZmQsIGNvbnN0IHZvaWQgKmtleXZhbCwgc29j
a2xlbl90IGtleWxlbiwNCj4gPiArCQkJCQkJCXNpemVfdCBtaWNfc2l6ZSkNCj4gPiArew0KPiA+
ICsJaWYgKHNldHNvY2tvcHQoZmQsIFNPTF9BTEcsIEFMR19TRVRfS0VZLCBrZXl2YWwsIGtleWxl
bikgPCAwKSB7DQo+ID4gKwkJbF9lcnJvcigia2V5Iik7DQo+ID4gKwkJcmV0dXJuIC0xOw0KPiA+
ICsJfQ0KPiA+ICsNCj4gPiArCWlmIChtaWNfc2l6ZSAmJg0KPiA+ICsJCXNldHNvY2tvcHQoZmQs
IFNPTF9BTEcsIEFMR19TRVRfQUVBRF9BVVRIU0laRSwNCj4gPiArCQkJCQkJCU5VTEwsIG1pY19z
aXplKSA8IDApIHsNCj4gPiArCQlsX2Vycm9yKCJ0YWdsZW4iKTsNCj4gDQo+IEkgYW0gbm90IHN1
cmUgd2Ugc2hvdWxkIHByaW50IGVycm9ycyBoZXJlLg0KPiANCj4gPiArCQlyZXR1cm4gLTE7DQo+
ID4gKwl9DQo+ID4gKw0KPiA+ICsJLyogRklYTUU6IFRoaXMgc2hvdWxkIHVzZSBhY2NlcHQ0KCkg
d2l0aCBTT0NLX0NMT0VYRUMgKi8NCj4gPiArCXJldHVybiBhY2NlcHQoZmQsIE5VTEwsIDApOw0K
PiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgYm9vbCBhbGdfZW5jcnlwdChpbnQgZmQsIGNvbnN0
IHZvaWQgKmluYnVmLCBzaXplX3QgaW5sZW4sDQo+ID4gKwkJCQkJCXZvaWQgKm91dGJ1Ziwgc2l6
ZV90IG91dGxlbikNCj4gPiArew0KPiA+ICsJX191MzIgYWxnX29wID0gQUxHX09QX0VOQ1JZUFQ7
DQo+ID4gKwljaGFyIGNidWZbQ01TR19TUEFDRShzaXplb2YoYWxnX29wKSldOw0KPiA+ICsJc3Ry
dWN0IGNtc2doZHIgKmNtc2c7DQo+ID4gKwlzdHJ1Y3QgbXNnaGRyIG1zZzsNCj4gPiArCXN0cnVj
dCBpb3ZlYyBpb3Y7DQo+ID4gKwlzc2l6ZV90IGxlbjsNCj4gPiArDQo+ID4gKwltZW1zZXQoY2J1
ZiwgMCwgc2l6ZW9mKGNidWYpKTsNCj4gPiArCW1lbXNldCgmbXNnLCAwLCBzaXplb2YobXNnKSk7
DQo+ID4gKw0KPiA+ICsJbXNnLm1zZ19jb250cm9sID0gY2J1ZjsNCj4gPiArCW1zZy5tc2dfY29u
dHJvbGxlbiA9IHNpemVvZihjYnVmKTsNCj4gPiArDQo+ID4gKwljbXNnID0gQ01TR19GSVJTVEhE
UigmbXNnKTsNCj4gPiArCWNtc2ctPmNtc2dfbGV2ZWwgPSBTT0xfQUxHOw0KPiA+ICsJY21zZy0+
Y21zZ190eXBlID0gQUxHX1NFVF9PUDsNCj4gPiArCWNtc2ctPmNtc2dfbGVuID0gQ01TR19MRU4o
c2l6ZW9mKGFsZ19vcCkpOw0KPiA+ICsJbWVtY3B5KENNU0dfREFUQShjbXNnKSwgJmFsZ19vcCwg
c2l6ZW9mKGFsZ19vcCkpOw0KPiA+ICsNCj4gPiArCWlvdi5pb3ZfYmFzZSA9ICh2b2lkICopIGlu
YnVmOw0KPiA+ICsJaW92Lmlvdl9sZW4gPSBpbmxlbjsNCj4gPiArDQo+ID4gKwltc2cubXNnX2lv
diA9ICZpb3Y7DQo+ID4gKwltc2cubXNnX2lvdmxlbiA9IDE7DQo+ID4gKw0KPiA+ICsJbGVuID0g
c2VuZG1zZyhmZCwgJm1zZywgMCk7DQo+ID4gKwlpZiAobGVuIDwgMCkNCj4gPiArCQlyZXR1cm4g
ZmFsc2U7DQo+ID4gKw0KPiA+ICsJbGVuID0gcmVhZChmZCwgb3V0YnVmLCBvdXRsZW4pOw0KPiA+
ICsJaWYgKGxlbiA8IDApDQo+ID4gKwkJcmV0dXJuIGZhbHNlOw0KPiA+ICsNCj4gPiArCXJldHVy
biB0cnVlOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IGFlc19lY2Jfc2V0dXAoY29u
c3QgdWludDhfdCBrZXlbMTZdKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3Qgc29ja2FkZHJfYWxnIHNh
bGc7DQo+ID4gKwlpbnQgZmQsIG5mZDsNCj4gPiArDQo+ID4gKwlmZCA9IHNvY2tldChQRl9BTEcs
IFNPQ0tfU0VRUEFDS0VUIHwgU09DS19DTE9FWEVDLCAwKTsNCj4gPiArCWlmIChmZCA8IDApDQo+
ID4gKwkJcmV0dXJuIC0xOw0KPiA+ICsNCj4gPiArCW1lbXNldCgmc2FsZywgMCwgc2l6ZW9mKHNh
bGcpKTsNCj4gPiArCXNhbGcuc2FsZ19mYW1pbHkgPSBBRl9BTEc7DQo+ID4gKwlzdHJjcHkoKGNo
YXIgKikgc2FsZy5zYWxnX3R5cGUsICJza2NpcGhlciIpOw0KPiA+ICsJc3RyY3B5KChjaGFyICop
IHNhbGcuc2FsZ19uYW1lLCAiZWNiKGFlcykiKTsNCj4gPiArDQo+ID4gKwlpZiAoYmluZChmZCwg
KHN0cnVjdCBzb2NrYWRkciAqKSAmc2FsZywgc2l6ZW9mKHNhbGcpKSA8IDApIHsNCj4gPiArCQlj
bG9zZShmZCk7DQo+ID4gKwkJcmV0dXJuIC0xOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCW5mZCA9
IGFsZ19uZXcoZmQsIGtleSwgMTYsIDApOw0KPiA+ICsNCj4gPiArCWNsb3NlKGZkKTsNCj4gPiAr
DQo+ID4gKwlyZXR1cm4gbmZkOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgYm9vbCBhZXNf
ZWNiKGludCBmZCwgY29uc3QgdWludDhfdCBwbGFpbnRleHRbMTZdLCB1aW50OF90IGVuY3J5cHRl
ZFsxNl0pDQo+ID4gK3sNCj4gPiArCXJldHVybiBhbGdfZW5jcnlwdChmZCwgcGxhaW50ZXh0LCAx
NiwgZW5jcnlwdGVkLCAxNik7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIGFlc19l
Y2JfZGVzdHJveShpbnQgZmQpDQo+ID4gK3sNCj4gPiArCWNsb3NlKGZkKTsNCj4gPiArfQ0KPiA+
ICsNCj4gPiArc3RhdGljIGJvb2wgYWVzX2VjYl9vbmUoY29uc3QgdWludDhfdCBrZXlbMTZdLA0K
PiA+ICsJCQljb25zdCB1aW50OF90IHBsYWludGV4dFsxNl0sIHVpbnQ4X3QgZW5jcnlwdGVkWzE2
XSkNCj4gPiArew0KPiA+ICsJYm9vbCByZXN1bHQ7DQo+ID4gKwlpbnQgZmQ7DQo+ID4gKw0KPiA+
ICsJZmQgPSBhZXNfZWNiX3NldHVwKGtleSk7DQo+ID4gKwlpZiAoZmQgPCAwKQ0KPiA+ICsJCXJl
dHVybiBmYWxzZTsNCj4gPiArDQo+ID4gKwlyZXN1bHQgPSBhZXNfZWNiKGZkLCBwbGFpbnRleHQs
IGVuY3J5cHRlZCk7DQo+ID4gKw0KPiA+ICsJYWVzX2VjYl9kZXN0cm95KGZkKTsNCj4gPiArDQo+
ID4gKwlyZXR1cm4gcmVzdWx0Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtib29sIG1lc2hfYWVzX2Vj
Yl9vbmUoY29uc3QgdWludDhfdCBrZXlbMTZdLA0KPiA+ICsJCQljb25zdCB1aW50OF90IHBsYWlu
dGV4dFsxNl0sIHVpbnQ4X3QgZW5jcnlwdGVkWzE2XSkNCj4gPiArew0KPiA+ICsJcmV0dXJuIGFl
c19lY2Jfb25lKGtleSwgcGxhaW50ZXh0LCBlbmNyeXB0ZWQpOw0KPiA+ICt9DQo+ID4gKw0KPiA+
ICsvKiBNYXhpbXVtIG1lc3NhZ2UgbGVuZ3RoIHRoYXQgY2FuIGJlIHBhc3NlZCB0byBhZXNfY21h
YyAqLw0KPiA+ICsjZGVmaW5lIENNQUNfTVNHX01BWAkoNjQgKyA2NCArIDE3KQ0KPiA+ICsNCj4g
PiArc3RhdGljIGludCBhZXNfY21hY19zZXR1cChjb25zdCB1aW50OF90IGtleVsxNl0pDQo+ID4g
K3sNCj4gPiArCXN0cnVjdCBzb2NrYWRkcl9hbGcgc2FsZzsNCj4gPiArCWludCBmZCwgbmZkOw0K
PiA+ICsNCj4gPiArCWZkID0gc29ja2V0KFBGX0FMRywgU09DS19TRVFQQUNLRVQgfCBTT0NLX0NM
T0VYRUMsIDApOw0KPiA+ICsJaWYgKGZkIDwgMCkNCj4gPiArCQlyZXR1cm4gLTE7DQo+ID4gKw0K
PiA+ICsJbWVtc2V0KCZzYWxnLCAwLCBzaXplb2Yoc2FsZykpOw0KPiA+ICsJc2FsZy5zYWxnX2Zh
bWlseSA9IEFGX0FMRzsNCj4gPiArCXN0cmNweSgoY2hhciAqKSBzYWxnLnNhbGdfdHlwZSwgImhh
c2giKTsNCj4gPiArCXN0cmNweSgoY2hhciAqKSBzYWxnLnNhbGdfbmFtZSwgImNtYWMoYWVzKSIp
Ow0KPiA+ICsNCj4gPiArCWlmIChiaW5kKGZkLCAoc3RydWN0IHNvY2thZGRyICopICZzYWxnLCBz
aXplb2Yoc2FsZykpIDwgMCkgew0KPiA+ICsJCWNsb3NlKGZkKTsNCj4gPiArCQlyZXR1cm4gLTE7
DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJbmZkID0gYWxnX25ldyhmZCwga2V5LCAxNiwgMCk7DQo+
ID4gKw0KPiA+ICsJY2xvc2UoZmQpOw0KPiA+ICsNCj4gPiArCXJldHVybiBuZmQ7DQo+ID4gK30N
Cj4gPiArDQo+ID4gK3N0YXRpYyBib29sIGFlc19jbWFjKGludCBmZCwgY29uc3QgdWludDhfdCAq
bXNnLA0KPiA+ICsJCQkJCXNpemVfdCBtc2dfbGVuLCB1aW50OF90IHJlc1sxNl0pDQo+ID4gK3sN
Cj4gPiArCXNzaXplX3QgbGVuOw0KPiA+ICsNCj4gPiArCWlmIChtc2dfbGVuID4gQ01BQ19NU0df
TUFYKQ0KPiA+ICsJCXJldHVybiBmYWxzZTsNCj4gPiArDQo+ID4gKwlsZW4gPSBzZW5kKGZkLCBt
c2csIG1zZ19sZW4sIDApOw0KPiA+ICsJaWYgKGxlbiA8IDApDQo+ID4gKwkJcmV0dXJuIGZhbHNl
Ow0KPiA+ICsNCj4gPiArCWxlbiA9IHJlYWQoZmQsIHJlcywgMTYpOw0KPiA+ICsJaWYgKGxlbiA8
IDApDQo+ID4gKwkJcmV0dXJuIGZhbHNlOw0KPiA+ICsNCj4gPiArCXJldHVybiB0cnVlOw0KPiA+
ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBhZXNfY21hY19kZXN0cm95KGludCBmZCkNCj4g
PiArew0KPiA+ICsJY2xvc2UoZmQpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IGFl
c19jbWFjX05fc3RhcnQoY29uc3QgdWludDhfdCBOWzE2XSkNCj4gPiArew0KPiA+ICsJaW50IGZk
Ow0KPiA+ICsNCj4gPiArCWZkID0gYWVzX2NtYWNfc2V0dXAoTik7DQo+ID4gKwlyZXR1cm4gZmQ7
DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBib29sIGFlc19jbWFjX29uZShjb25zdCB1aW50
OF90IGtleVsxNl0sIGNvbnN0IHZvaWQgKm1zZywNCj4gPiArCQkJCQlzaXplX3QgbXNnX2xlbiwg
dWludDhfdCByZXNbMTZdKQ0KPiA+ICt7DQo+ID4gKwlib29sIHJlc3VsdDsNCj4gPiArCWludCBm
ZDsNCj4gPiArDQo+ID4gKwlmZCA9IGFlc19jbWFjX3NldHVwKGtleSk7DQo+ID4gKwlpZiAoZmQg
PCAwKQ0KPiA+ICsJCXJldHVybiBmYWxzZTsNCj4gPiArDQo+ID4gKwlyZXN1bHQgPSBhZXNfY21h
YyhmZCwgbXNnLCBtc2dfbGVuLCByZXMpOw0KPiA+ICsNCj4gPiArCWFlc19jbWFjX2Rlc3Ryb3ko
ZmQpOw0KPiA+ICsNCj4gPiArCXJldHVybiByZXN1bHQ7DQo+ID4gK30NCj4gPiArDQo+ID4gK2Jv
b2wgbWVzaF9jcnlwdG9fYWVzX2NtYWMoY29uc3QgdWludDhfdCBrZXlbMTZdLCBjb25zdCB1aW50
OF90ICptc2csDQo+ID4gKwkJCQkJc2l6ZV90IG1zZ19sZW4sIHVpbnQ4X3QgcmVzWzE2XSkNCj4g
PiArew0KPiA+ICsJcmV0dXJuIGFlc19jbWFjX29uZShrZXksIG1zZywgbXNnX2xlbiwgcmVzKTsN
Cj4gPiArfQ0KPiA+ICsNCj4gPiArYm9vbCBtZXNoX2NyeXB0b19hZXNfY2NtX2VuY3J5cHQoY29u
c3QgdWludDhfdCBub25jZVsxM10sIGNvbnN0IHVpbnQ4X3Qga2V5WzE2XSwNCj4gPiArCQkJCQlj
b25zdCB1aW50OF90ICphYWQsIHVpbnQxNl90IGFhZF9sZW4sDQo+ID4gKwkJCQkJY29uc3QgdWlu
dDhfdCAqbXNnLCB1aW50MTZfdCBtc2dfbGVuLA0KPiA+ICsJCQkJCXVpbnQ4X3QgKm91dF9tc2cs
DQo+ID4gKwkJCQkJdm9pZCAqb3V0X21pYywgc2l6ZV90IG1pY19zaXplKQ0KPiA+ICt7DQo+ID4g
Kwl1aW50OF90IHBtc2dbMTZdLCBjbWljWzE2XSwgY21zZ1sxNl07DQo+ID4gKwl1aW50OF90IG1p
Y1sxNl0sIFhuWzE2XTsNCj4gPiArCXVpbnQxNl90IGJsa19jbnQsIGxhc3RfYmxrOw0KPiA+ICsJ
Ym9vbCByZXN1bHQ7DQo+ID4gKwlzaXplX3QgaSwgajsNCj4gPiArCWludCBmZDsNCj4gPiArDQo+
ID4gKwlpZiAoYWFkX2xlbiA+PSAweGZmMDApIHsNCj4gPiArCQlsX2Vycm9yKCJVbnN1cHBvcnRl
ZCBBQUQgc2l6ZSIpOw0KPiA+ICsJCXJldHVybiBmYWxzZTsNCj4gPiArCX0NCj4gDQo+IFNhbWUg
Y29tbWVudCBmb3IgdGhlIGVycm9ycy4NCj4gDQo+IEluIGEgZm9sbG93IHVwIHBhdGNoLCBJIHdv
dWxkIHByZWZlciB0aGF0IHdlIG1vdmUgb3ZlciB0byB1c2UgdGhlIGtlcm5lbCBBRVMtQ01BQyBz
dXBwb3J0Lg0KPiANCj4gPiArDQo+ID4gKwlmZCA9IGFlc19lY2Jfc2V0dXAoa2V5KTsNCj4gPiAr
CWlmIChmZCA8IDApDQo+ID4gKwkJcmV0dXJuIGZhbHNlOw0KPiA+ICsNCj4gPiArCS8qIENfbWlj
ID0gZShBcHBLZXksIDB4MDEgfHwgbm9uY2UgfHwgMHgwMDAwKSAqLw0KPiA+ICsJcG1zZ1swXSA9
IDB4MDE7DQo+ID4gKwltZW1jcHkocG1zZyArIDEsIG5vbmNlLCAxMyk7DQo+ID4gKwlsX3B1dF9i
ZTE2KDB4MDAwMCwgcG1zZyArIDE0KTsNCj4gPiArDQo+ID4gKwlyZXN1bHQgPSBhZXNfZWNiKGZk
LCBwbXNnLCBjbWljKTsNCj4gPiArCWlmICghcmVzdWx0KQ0KPiA+ICsJCWdvdG8gZG9uZTsNCj4g
PiArDQo+ID4gKwkvKiBYXzAgPSBlKEFwcEtleSwgMHgwOSB8fCBub25jZSB8fCBsZW5ndGgpICov
DQo+ID4gKwlpZiAobWljX3NpemUgPT0gc2l6ZW9mKHVpbnQ2NF90KSkNCj4gPiArCQlwbXNnWzBd
ID0gMHgxOSB8IChhYWRfbGVuID8gMHg0MCA6IDB4MDApOw0KPiA+ICsJZWxzZQ0KPiA+ICsJCXBt
c2dbMF0gPSAweDA5IHwgKGFhZF9sZW4gPyAweDQwIDogMHgwMCk7DQo+ID4gKw0KPiA+ICsJbWVt
Y3B5KHBtc2cgKyAxLCBub25jZSwgMTMpOw0KPiA+ICsJbF9wdXRfYmUxNihtc2dfbGVuLCBwbXNn
ICsgMTQpOw0KPiA+ICsNCj4gPiArCXJlc3VsdCA9IGFlc19lY2IoZmQsIHBtc2csIFhuKTsNCj4g
PiArCWlmICghcmVzdWx0KQ0KPiA+ICsJCWdvdG8gZG9uZTsNCj4gPiArDQo+ID4gKwkvKiBJZiBB
QUQgaXMgYmVpbmcgdXNlZCB0byBhdXRoZW50aWNhdGUsIGluY2x1ZGUgaXQgaGVyZSAqLw0KPiA+
ICsJaWYgKGFhZF9sZW4pIHsNCj4gPiArCQlsX3B1dF9iZTE2KGFhZF9sZW4sIHBtc2cpOw0KPiA+
ICsNCj4gPiArCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHVpbnQxNl90KTsgaSsrKQ0KPiA+ICsJ
CQlwbXNnW2ldID0gWG5baV0gXiBwbXNnW2ldOw0KPiA+ICsNCj4gPiArCQlqID0gMDsNCj4gPiAr
CQlhYWRfbGVuICs9IHNpemVvZih1aW50MTZfdCk7DQo+ID4gKwkJd2hpbGUgKGFhZF9sZW4gPiAx
Nikgew0KPiA+ICsJCQlkbyB7DQo+ID4gKwkJCQlwbXNnW2ldID0gWG5baV0gXiBhYWRbal07DQo+
ID4gKwkJCQlpKyssIGorKzsNCj4gPiArCQkJfSB3aGlsZSAoaSA8IDE2KTsNCj4gPiArDQo+ID4g
KwkJCWFhZF9sZW4gLT0gMTY7DQo+ID4gKwkJCWkgPSAwOw0KPiA+ICsNCj4gPiArCQkJcmVzdWx0
ID0gYWVzX2VjYihmZCwgcG1zZywgWG4pOw0KPiA+ICsJCQlpZiAoIXJlc3VsdCkNCj4gPiArCQkJ
CWdvdG8gZG9uZTsNCj4gPiArCQl9DQo+ID4gKw0KPiA+ICsJCWZvciAoaSA9IDA7IGkgPCBhYWRf
bGVuOyBpKyssIGorKykNCj4gPiArCQkJcG1zZ1tpXSA9IFhuW2ldIF4gYWFkW2pdOw0KPiA+ICsN
Cj4gPiArCQlmb3IgKGkgPSBhYWRfbGVuOyBpIDwgMTY7IGkrKykNCj4gPiArCQkJcG1zZ1tpXSA9
IFhuW2ldOw0KPiA+ICsNCj4gPiArCQlyZXN1bHQgPSBhZXNfZWNiKGZkLCBwbXNnLCBYbik7DQo+
ID4gKwkJaWYgKCFyZXN1bHQpDQo+ID4gKwkJCWdvdG8gZG9uZTsNCj4gPiArCX0NCj4gPiArDQo+
ID4gKwlsYXN0X2JsayA9IG1zZ19sZW4gJSAxNjsNCj4gPiArCWJsa19jbnQgPSAobXNnX2xlbiAr
IDE1KSAvIDE2Ow0KPiA+ICsJaWYgKCFsYXN0X2JsaykNCj4gPiArCQlsYXN0X2JsayA9IDE2Ow0K
PiA+ICsNCj4gPiArCWZvciAoaiA9IDA7IGogPCBibGtfY250OyBqKyspIHsNCj4gPiArCQlpZiAo
aiArIDEgPT0gYmxrX2NudCkgew0KPiA+ICsJCQkvKiBYXzEgPSBlKEFwcEtleSwgWF8wIF4gUGF5
bG9hZFswLTE1XSkgKi8NCj4gPiArCQkJZm9yIChpID0gMDsgaSA8IGxhc3RfYmxrOyBpKyspDQo+
ID4gKwkJCQlwbXNnW2ldID0gWG5baV0gXiBtc2dbKGogKiAxNikgKyBpXTsNCj4gPiArCQkJZm9y
IChpID0gbGFzdF9ibGs7IGkgPCAxNjsgaSsrKQ0KPiA+ICsJCQkJcG1zZ1tpXSA9IFhuW2ldIF4g
MHgwMDsNCj4gPiArDQo+ID4gKwkJCXJlc3VsdCA9IGFlc19lY2IoZmQsIHBtc2csIFhuKTsNCj4g
PiArCQkJaWYgKCFyZXN1bHQpDQo+ID4gKwkJCQlnb3RvIGRvbmU7DQo+ID4gKw0KPiA+ICsJCQkv
KiBNSUMgPSBDX21pYyBeIFhfMSAqLw0KPiA+ICsJCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKG1p
Yyk7IGkrKykNCj4gPiArCQkJCW1pY1tpXSA9IGNtaWNbaV0gXiBYbltpXTsNCj4gPiArDQo+ID4g
KwkJCS8qIENfMSA9IGUoQXBwS2V5LCAweDAxIHx8IG5vbmNlIHx8IDB4MDAwMSkgKi8NCj4gPiAr
CQkJcG1zZ1swXSA9IDB4MDE7DQo+ID4gKwkJCW1lbWNweShwbXNnICsgMSwgbm9uY2UsIDEzKTsN
Cj4gPiArCQkJbF9wdXRfYmUxNihqICsgMSwgcG1zZyArIDE0KTsNCj4gPiArDQo+ID4gKwkJCXJl
c3VsdCA9IGFlc19lY2IoZmQsIHBtc2csIGNtc2cpOw0KPiA+ICsJCQlpZiAoIXJlc3VsdCkNCj4g
PiArCQkJCWdvdG8gZG9uZTsNCj4gPiArDQo+ID4gKwkJCWlmIChvdXRfbXNnKSB7DQo+ID4gKwkJ
CQkvKiBFbmNyeXB0ZWQgPSBQYXlsb2FkWzAtMTVdIF4gQ18xICovDQo+ID4gKwkJCQlmb3IgKGkg
PSAwOyBpIDwgbGFzdF9ibGs7IGkrKykNCj4gPiArCQkJCQlvdXRfbXNnWyhqICogMTYpICsgaV0g
PQ0KPiA+ICsJCQkJCQltc2dbKGogKiAxNikgKyBpXSBeIGNtc2dbaV07DQo+ID4gKw0KPiA+ICsJ
CQl9DQo+ID4gKwkJfSBlbHNlIHsNCj4gPiArCQkJLyogWF8xID0gZShBcHBLZXksIFhfMCBeIFBh
eWxvYWRbMC0xNV0pICovDQo+ID4gKwkJCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQ0KPiA+ICsJ
CQkJcG1zZ1tpXSA9IFhuW2ldIF4gbXNnWyhqICogMTYpICsgaV07DQo+ID4gKw0KPiA+ICsJCQly
ZXN1bHQgPSBhZXNfZWNiKGZkLCBwbXNnLCBYbik7DQo+ID4gKwkJCWlmICghcmVzdWx0KQ0KPiA+
ICsJCQkJZ290byBkb25lOw0KPiA+ICsNCj4gPiArCQkJLyogQ18xID0gZShBcHBLZXksIDB4MDEg
fHwgbm9uY2UgfHwgMHgwMDAxKSAqLw0KPiA+ICsJCQlwbXNnWzBdID0gMHgwMTsNCj4gPiArCQkJ
bWVtY3B5KHBtc2cgKyAxLCBub25jZSwgMTMpOw0KPiA+ICsJCQlsX3B1dF9iZTE2KGogKyAxLCBw
bXNnICsgMTQpOw0KPiA+ICsNCj4gPiArCQkJcmVzdWx0ID0gYWVzX2VjYihmZCwgcG1zZywgY21z
Zyk7DQo+ID4gKwkJCWlmICghcmVzdWx0KQ0KPiA+ICsJCQkJZ290byBkb25lOw0KPiA+ICsNCj4g
PiArCQkJaWYgKG91dF9tc2cpIHsNCj4gPiArCQkJCS8qIEVuY3J5cHRlZCA9IFBheWxvYWRbMC0x
NV0gXiBDX04gKi8NCj4gPiArCQkJCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQ0KPiA+ICsJCQkJ
CW91dF9tc2dbKGogKiAxNikgKyBpXSA9DQo+ID4gKwkJCQkJCW1zZ1soaiAqIDE2KSArIGldIF4g
Y21zZ1tpXTsNCj4gPiArCQkJfQ0KPiA+ICsNCj4gPiArCQl9DQo+ID4gKwl9DQo+ID4gKw0KPiA+
ICsJaWYgKG91dF9tc2cpDQo+ID4gKwkJbWVtY3B5KG91dF9tc2cgKyBtc2dfbGVuLCBtaWMsIG1p
Y19zaXplKTsNCj4gPiArDQo+ID4gKwlpZiAob3V0X21pYykgew0KPiA+ICsJCXN3aXRjaCAobWlj
X3NpemUpIHsNCj4gPiArCQljYXNlIHNpemVvZih1aW50MzJfdCk6DQo+ID4gKwkJCSoodWludDMy
X3QgKilvdXRfbWljID0gbF9nZXRfYmUzMihtaWMpOw0KPiA+ICsJCQlicmVhazsNCj4gPiArCQlj
YXNlIHNpemVvZih1aW50NjRfdCk6DQo+ID4gKwkJCSoodWludDY0X3QgKilvdXRfbWljID0gbF9n
ZXRfYmU2NChtaWMpOw0KPiA+ICsJCQlicmVhazsNCj4gPiArCQlkZWZhdWx0Og0KPiA+ICsJCQls
X2Vycm9yKCJVbnN1cHBvcnRlZCBNSUMgc2l6ZSIpOw0KPiA+ICsJCX0NCj4gPiArCX0NCj4gPiAr
DQo+ID4gK2RvbmU6DQo+ID4gKwlhZXNfZWNiX2Rlc3Ryb3koZmQpOw0KPiA+ICsNCj4gPiArCXJl
dHVybiByZXN1bHQ7DQo+ID4gK30NCj4gPiArDQo+ID4gK2Jvb2wgbWVzaF9jcnlwdG9fYWVzX2Nj
bV9kZWNyeXB0KGNvbnN0IHVpbnQ4X3Qgbm9uY2VbMTNdLCBjb25zdCB1aW50OF90IGtleVsxNl0s
DQo+ID4gKwkJCQljb25zdCB1aW50OF90ICphYWQsIHVpbnQxNl90IGFhZF9sZW4sDQo+ID4gKwkJ
CQljb25zdCB1aW50OF90ICplbmNfbXNnLCB1aW50MTZfdCBlbmNfbXNnX2xlbiwNCj4gPiArCQkJ
CXVpbnQ4X3QgKm91dF9tc2csDQo+ID4gKwkJCQl2b2lkICpvdXRfbWljLCBzaXplX3QgbWljX3Np
emUpDQo+ID4gK3sNCj4gPiArCXVpbnQ4X3QgbXNnWzE2XSwgcG1zZ1sxNl0sIGNtaWNbMTZdLCBj
bXNnWzE2XSwgWG5bMTZdOw0KPiA+ICsJdWludDhfdCBtaWNbMTZdOw0KPiA+ICsJdWludDE2X3Qg
bXNnX2xlbiA9IGVuY19tc2dfbGVuIC0gbWljX3NpemU7DQo+ID4gKwl1aW50MTZfdCBsYXN0X2Js
aywgYmxrX2NudDsNCj4gPiArCWJvb2wgcmVzdWx0Ow0KPiA+ICsJc2l6ZV90IGksIGo7DQo+ID4g
KwlpbnQgZmQ7DQo+ID4gKw0KPiA+ICsJaWYgKGVuY19tc2dfbGVuIDwgNSB8fCBhYWRfbGVuID49
IDB4ZmYwMCkNCj4gPiArCQlyZXR1cm4gZmFsc2U7DQo+ID4gKw0KPiA+ICsJZmQgPSBhZXNfZWNi
X3NldHVwKGtleSk7DQo+ID4gKwlpZiAoZmQgPCAwKQ0KPiA+ICsJCXJldHVybiBmYWxzZTsNCj4g
PiArDQo+ID4gKwkvKiBDX21pYyA9IGUoQXBwS2V5LCAweDAxIHx8IG5vbmNlIHx8IDB4MDAwMCkg
Ki8NCj4gPiArCXBtc2dbMF0gPSAweDAxOw0KPiA+ICsJbWVtY3B5KHBtc2cgKyAxLCBub25jZSwg
MTMpOw0KPiA+ICsJbF9wdXRfYmUxNigweDAwMDAsIHBtc2cgKyAxNCk7DQo+ID4gKw0KPiA+ICsJ
cmVzdWx0ID0gYWVzX2VjYihmZCwgcG1zZywgY21pYyk7DQo+ID4gKwlpZiAoIXJlc3VsdCkNCj4g
PiArCQlnb3RvIGRvbmU7DQo+ID4gKw0KPiA+ICsJLyogWF8wID0gZShBcHBLZXksIDB4MDkgfHwg
bm9uY2UgfHwgbGVuZ3RoKSAqLw0KPiA+ICsJaWYgKG1pY19zaXplID09IHNpemVvZih1aW50NjRf
dCkpDQo+ID4gKwkJcG1zZ1swXSA9IDB4MTkgfCAoYWFkX2xlbiA/IDB4NDAgOiAweDAwKTsNCj4g
PiArCWVsc2UNCj4gPiArCQlwbXNnWzBdID0gMHgwOSB8IChhYWRfbGVuID8gMHg0MCA6IDB4MDAp
Ow0KPiA+ICsNCj4gPiArCW1lbWNweShwbXNnICsgMSwgbm9uY2UsIDEzKTsNCj4gPiArCWxfcHV0
X2JlMTYobXNnX2xlbiwgcG1zZyArIDE0KTsNCj4gPiArDQo+ID4gKwlyZXN1bHQgPSBhZXNfZWNi
KGZkLCBwbXNnLCBYbik7DQo+ID4gKwlpZiAoIXJlc3VsdCkNCj4gPiArCQlnb3RvIGRvbmU7DQo+
ID4gKw0KPiA+ICsJLyogSWYgQUFEIGlzIGJlaW5nIHVzZWQgdG8gYXV0aGVudGljYXRlLCBpbmNs
dWRlIGl0IGhlcmUgKi8NCj4gPiArCWlmIChhYWRfbGVuKSB7DQo+ID4gKwkJbF9wdXRfYmUxNihh
YWRfbGVuLCBwbXNnKTsNCj4gPiArDQo+ID4gKwkJZm9yIChpID0gMDsgaSA8IHNpemVvZih1aW50
MTZfdCk7IGkrKykNCj4gPiArCQkJcG1zZ1tpXSA9IFhuW2ldIF4gcG1zZ1tpXTsNCj4gPiArDQo+
ID4gKwkJaiA9IDA7DQo+ID4gKwkJYWFkX2xlbiArPSBzaXplb2YodWludDE2X3QpOw0KPiA+ICsJ
CXdoaWxlIChhYWRfbGVuID4gMTYpIHsNCj4gPiArCQkJZG8gew0KPiA+ICsJCQkJcG1zZ1tpXSA9
IFhuW2ldIF4gYWFkW2pdOw0KPiA+ICsJCQkJaSsrLCBqKys7DQo+ID4gKwkJCX0gd2hpbGUgKGkg
PCAxNik7DQo+ID4gKw0KPiA+ICsJCQlhYWRfbGVuIC09IDE2Ow0KPiA+ICsJCQlpID0gMDsNCj4g
PiArDQo+ID4gKwkJCXJlc3VsdCA9IGFlc19lY2IoZmQsIHBtc2csIFhuKTsNCj4gPiArCQkJaWYg
KCFyZXN1bHQpDQo+ID4gKwkJCQlnb3RvIGRvbmU7DQo+ID4gKwkJfQ0KPiA+ICsNCj4gPiArCQlm
b3IgKGkgPSAwOyBpIDwgYWFkX2xlbjsgaSsrLCBqKyspDQo+ID4gKwkJCXBtc2dbaV0gPSBYbltp
XSBeIGFhZFtqXTsNCj4gPiArDQo+ID4gKwkJZm9yIChpID0gYWFkX2xlbjsgaSA8IDE2OyBpKysp
DQo+ID4gKwkJCXBtc2dbaV0gPSBYbltpXTsNCj4gPiArDQo+ID4gKwkJcmVzdWx0ID0gYWVzX2Vj
YihmZCwgcG1zZywgWG4pOw0KPiA+ICsJCWlmICghcmVzdWx0KQ0KPiA+ICsJCQlnb3RvIGRvbmU7
DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJbGFzdF9ibGsgPSBtc2dfbGVuICUgMTY7DQo+ID4gKwli
bGtfY250ID0gKG1zZ19sZW4gKyAxNSkgLyAxNjsNCj4gPiArCWlmICghbGFzdF9ibGspDQo+ID4g
KwkJbGFzdF9ibGsgPSAxNjsNCj4gPiArDQo+ID4gKwlmb3IgKGogPSAwOyBqIDwgYmxrX2NudDsg
aisrKSB7DQo+ID4gKwkJaWYgKGogKyAxID09IGJsa19jbnQpIHsNCj4gPiArCQkJLyogQ18xID0g
ZShBcHBLZXksIDB4MDEgfHwgbm9uY2UgfHwgMHgwMDAxKSAqLw0KPiA+ICsJCQlwbXNnWzBdID0g
MHgwMTsNCj4gPiArCQkJbWVtY3B5KHBtc2cgKyAxLCBub25jZSwgMTMpOw0KPiA+ICsJCQlsX3B1
dF9iZTE2KGogKyAxLCBwbXNnICsgMTQpOw0KPiA+ICsNCj4gPiArCQkJcmVzdWx0ID0gYWVzX2Vj
YihmZCwgcG1zZywgY21zZyk7DQo+ID4gKwkJCWlmICghcmVzdWx0KQ0KPiA+ICsJCQkJZ290byBk
b25lOw0KPiA+ICsNCj4gPiArCQkJLyogRW5jcnlwdGVkID0gUGF5bG9hZFswLTE1XSBeIENfMSAq
Lw0KPiA+ICsJCQlmb3IgKGkgPSAwOyBpIDwgbGFzdF9ibGs7IGkrKykNCj4gPiArCQkJCW1zZ1tp
XSA9IGVuY19tc2dbKGogKiAxNikgKyBpXSBeIGNtc2dbaV07DQo+ID4gKw0KPiA+ICsJCQlpZiAo
b3V0X21zZykNCj4gPiArCQkJCW1lbWNweShvdXRfbXNnICsgKGogKiAxNiksIG1zZywgbGFzdF9i
bGspOw0KPiA+ICsNCj4gPiArCQkJLyogWF8xID0gZShBcHBLZXksIFhfMCBeIFBheWxvYWRbMC0x
NV0pICovDQo+ID4gKwkJCWZvciAoaSA9IDA7IGkgPCBsYXN0X2JsazsgaSsrKQ0KPiA+ICsJCQkJ
cG1zZ1tpXSA9IFhuW2ldIF4gbXNnW2ldOw0KPiA+ICsJCQlmb3IgKGkgPSBsYXN0X2JsazsgaSA8
IDE2OyBpKyspDQo+ID4gKwkJCQlwbXNnW2ldID0gWG5baV0gXiAweDAwOw0KPiA+ICsNCj4gPiAr
CQkJcmVzdWx0ID0gYWVzX2VjYihmZCwgcG1zZywgWG4pOw0KPiA+ICsJCQlpZiAoIXJlc3VsdCkN
Cj4gPiArCQkJCWdvdG8gZG9uZTsNCj4gPiArDQo+ID4gKwkJCS8qIE1JQyA9IENfbWljIF4gWF8x
ICovDQo+ID4gKwkJCWZvciAoaSA9IDA7IGkgPCBzaXplb2YobWljKTsgaSsrKQ0KPiA+ICsJCQkJ
bWljW2ldID0gY21pY1tpXSBeIFhuW2ldOw0KPiA+ICsJCX0gZWxzZSB7DQo+ID4gKwkJCS8qIENf
MSA9IGUoQXBwS2V5LCAweDAxIHx8IG5vbmNlIHx8IDB4MDAwMSkgKi8NCj4gPiArCQkJcG1zZ1sw
XSA9IDB4MDE7DQo+ID4gKwkJCW1lbWNweShwbXNnICsgMSwgbm9uY2UsIDEzKTsNCj4gPiArCQkJ
bF9wdXRfYmUxNihqICsgMSwgcG1zZyArIDE0KTsNCj4gPiArDQo+ID4gKwkJCXJlc3VsdCA9IGFl
c19lY2IoZmQsIHBtc2csIGNtc2cpOw0KPiA+ICsJCQlpZiAoIXJlc3VsdCkNCj4gPiArCQkJCWdv
dG8gZG9uZTsNCj4gPiArDQo+ID4gKwkJCS8qIEVuY3J5cHRlZCA9IFBheWxvYWRbMC0xNV0gXiBD
XzEgKi8NCj4gPiArCQkJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspDQo+ID4gKwkJCQltc2dbaV0g
PSBlbmNfbXNnWyhqICogMTYpICsgaV0gXiBjbXNnW2ldOw0KPiA+ICsNCj4gPiArCQkJaWYgKG91
dF9tc2cpDQo+ID4gKwkJCQltZW1jcHkob3V0X21zZyArIChqICogMTYpLCBtc2csIDE2KTsNCj4g
PiArDQo+ID4gKwkJCS8qIFhfMSA9IGUoQXBwS2V5LCBYXzAgXiBQYXlsb2FkWzAtMTVdKSAqLw0K
PiA+ICsJCQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykNCj4gPiArCQkJCXBtc2dbaV0gPSBYbltp
XSBeIG1zZ1tpXTsNCj4gPiArDQo+ID4gKwkJCXJlc3VsdCA9IGFlc19lY2IoZmQsIHBtc2csIFhu
KTsNCj4gPiArCQkJaWYgKCFyZXN1bHQpDQo+ID4gKwkJCQlnb3RvIGRvbmU7DQo+ID4gKwkJfQ0K
PiA+ICsJfQ0KPiA+ICsNCj4gPiArCWlmIChvdXRfbWljKSB7DQo+ID4gKwkJc3dpdGNoIChtaWNf
c2l6ZSkgew0KPiA+ICsJCWNhc2Ugc2l6ZW9mKHVpbnQzMl90KToNCj4gPiArCQkJKih1aW50MzJf
dCAqKW91dF9taWMgPSBsX2dldF9iZTMyKG1pYyk7DQo+ID4gKwkJCWJyZWFrOw0KPiA+ICsJCWNh
c2Ugc2l6ZW9mKHVpbnQ2NF90KToNCj4gPiArCQkJKih1aW50NjRfdCAqKW91dF9taWMgPSBsX2dl
dF9iZTY0KG1pYyk7DQo+ID4gKwkJCWJyZWFrOw0KPiA+ICsJCWRlZmF1bHQ6DQo+ID4gKwkJCWxf
ZXJyb3IoIlVuc3VwcG9ydGVkIE1JQyBzaXplIik7DQo+ID4gKwkJfQ0KPiA+ICsJfQ0KPiA+ICsN
Cj4gPiArZG9uZToNCj4gPiArCWFlc19lY2JfZGVzdHJveShmZCk7DQo+ID4gKw0KPiA+ICsJcmV0
dXJuIHJlc3VsdDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArYm9vbCBtZXNoX2NyeXB0b19rMShjb25z
dCB1aW50OF90IGlrbVsxNl0sIGNvbnN0IHVpbnQ4X3Qgc2FsdFsxNl0sDQo+ID4gKwkJY29uc3Qg
dm9pZCAqaW5mbywgc2l6ZV90IGluZm9fbGVuLCB1aW50OF90IG9rbVsxNl0pDQo+ID4gK3sNCj4g
PiArCXVpbnQ4X3QgcmVzWzE2XTsNCj4gPiArDQo+ID4gKwlpZiAoIWFlc19jbWFjX29uZShzYWx0
LCBpa20sIDE2LCByZXMpKQ0KPiA+ICsJCXJldHVybiBmYWxzZTsNCj4gPiArDQo+ID4gKwlyZXR1
cm4gYWVzX2NtYWNfb25lKHJlcywgaW5mbywgaW5mb19sZW4sIG9rbSk7DQo+ID4gK30NCj4gPiAr
DQo+ID4gK2Jvb2wgbWVzaF9jcnlwdG9fazIoY29uc3QgdWludDhfdCBuWzE2XSwgY29uc3QgdWlu
dDhfdCAqcCwgc2l6ZV90IHBfbGVuLA0KPiA+ICsJCQkJCQkJdWludDhfdCBuZXRfaWRbMV0sDQo+
ID4gKwkJCQkJCQl1aW50OF90IGVuY19rZXlbMTZdLA0KPiA+ICsJCQkJCQkJdWludDhfdCBwcml2
X2tleVsxNl0pDQo+ID4gK3sNCj4gPiArCWludCBmZDsNCj4gPiArCXVpbnQ4X3Qgb3V0cHV0WzE2
XTsNCj4gPiArCXVpbnQ4X3QgdFsxNl07DQo+ID4gKwl1aW50OF90ICpzdGFnZTsNCj4gPiArCWJv
b2wgc3VjY2VzcyA9IGZhbHNlOw0KPiA+ICsNCj4gPiArCXByaW50X3BhY2tldCgiSzItTiIsIG4s
IDE2KTsNCj4gPiArCXN0YWdlID0gbF9tYWxsb2Moc2l6ZW9mKG91dHB1dCkgKyBwX2xlbiArIDEp
Ow0KPiA+ICsJaWYgKHN0YWdlID09IE5VTEwpDQo+ID4gKwkJcmV0dXJuIGZhbHNlOw0KPiANCj4g
SSBwcmVmZXIgaWYgKCFzdGFnZSkgY29uc3RydWN0cy4NCj4gDQo+ID4gKw0KPiA+ICsJaWYgKCFt
ZXNoX2NyeXB0b19zMSgic21rMiIsIDQsIHN0YWdlKSkNCj4gPiArCQlnb3RvIGZhaWw7DQo+ID4g
KwlwcmludF9wYWNrZXQoIksyLVMxKHNtazIpIiwgc3RhZ2UsIDE2KTsNCj4gPiArCXByaW50X3Bh
Y2tldCgiSzItUCIsIHAsIHBfbGVuKTsNCj4gDQo+IFRoaXMgcHJpbnRfcGFja2V0IGlzIHJlYWxs
eSBub3QgYWNjZXB0YWJsZS4NCj4gDQo+ID4gKw0KPiA+ICsJaWYgKCFhZXNfY21hY19vbmUoc3Rh
Z2UsIG4sIDE2LCB0KSkNCj4gPiArCQlnb3RvIGZhaWw7DQo+ID4gKw0KPiA+ICsJcHJpbnRfcGFj
a2V0KCJLMi1UIiwgdCwgMTYpOw0KPiA+ICsNCj4gPiArCWZkID0gYWVzX2NtYWNfTl9zdGFydCh0
KTsNCj4gPiArCWlmIChmZCA8IDApDQo+ID4gKwkJZ290byBmYWlsOw0KPiA+ICsNCj4gPiArCW1l
bWNweShzdGFnZSwgcCwgcF9sZW4pOw0KPiA+ICsJc3RhZ2VbcF9sZW5dID0gMTsNCj4gPiArDQo+
ID4gKwlpZiAoIWFlc19jbWFjKGZkLCBzdGFnZSwgcF9sZW4gKyAxLCBvdXRwdXQpKQ0KPiA+ICsJ
CWdvdG8gZG9uZTsNCj4gPiArDQo+ID4gKwlwcmludF9wYWNrZXQoIksyLVQxIiwgb3V0cHV0LCAx
Nik7DQo+ID4gKw0KPiA+ICsJbmV0X2lkWzBdID0gb3V0cHV0WzE1XSAmIDB4N2Y7DQo+ID4gKw0K
PiA+ICsJbWVtY3B5KHN0YWdlLCBvdXRwdXQsIDE2KTsNCj4gPiArCW1lbWNweShzdGFnZSArIDE2
LCBwLCBwX2xlbik7DQo+ID4gKwlzdGFnZVtwX2xlbiArIDE2XSA9IDI7DQo+ID4gKw0KPiA+ICsJ
aWYgKCFhZXNfY21hYyhmZCwgc3RhZ2UsIHBfbGVuICsgMTYgKyAxLCBvdXRwdXQpKQ0KPiA+ICsJ
CWdvdG8gZG9uZTsNCj4gPiArCXByaW50X3BhY2tldCgiSzItVDIiLCBvdXRwdXQsIDE2KTsNCj4g
PiArDQo+ID4gKwltZW1jcHkoZW5jX2tleSwgb3V0cHV0LCAxNik7DQo+ID4gKw0KPiA+ICsJbWVt
Y3B5KHN0YWdlLCBvdXRwdXQsIDE2KTsNCj4gPiArCW1lbWNweShzdGFnZSArIDE2LCBwLCBwX2xl
bik7DQo+ID4gKwlzdGFnZVtwX2xlbiArIDE2XSA9IDM7DQo+ID4gKw0KPiA+ICsJaWYgKCFhZXNf
Y21hYyhmZCwgc3RhZ2UsIHBfbGVuICsgMTYgKyAxLCBvdXRwdXQpKQ0KPiA+ICsJCWdvdG8gZG9u
ZTsNCj4gPiArCXByaW50X3BhY2tldCgiSzItVDMiLCBvdXRwdXQsIDE2KTsNCj4gPiArDQo+ID4g
KwltZW1jcHkocHJpdl9rZXksIG91dHB1dCwgMTYpOw0KPiA+ICsJc3VjY2VzcyA9IHRydWU7DQo+
ID4gKw0KPiA+ICtkb25lOg0KPiA+ICsJYWVzX2NtYWNfZGVzdHJveShmZCk7DQo+ID4gK2ZhaWw6
DQo+ID4gKwlsX2ZyZWUoc3RhZ2UpOw0KPiA+ICsNCj4gPiArCXJldHVybiBzdWNjZXNzOw0KPiA+
ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgYm9vbCBjcnlwdG9fMTI4KGNvbnN0IHVpbnQ4X3Qgblsx
Nl0sIGNvbnN0IGNoYXIgKnMsIHVpbnQ4X3Qgb3V0MTI4WzE2XSkNCj4gPiArew0KPiA+ICsJdWlu
dDhfdCBpZDEyOFtdID0geyAnaScsICdkJywgJzEnLCAnMicsICc4JywgMHgwMSB9Ow0KPiA+ICsJ
dWludDhfdCBzYWx0WzE2XTsNCj4gPiArDQo+ID4gKwlpZiAoIW1lc2hfY3J5cHRvX3MxKHMsIDQs
IHNhbHQpKQ0KPiA+ICsJCXJldHVybiBmYWxzZTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gbWVzaF9j
cnlwdG9fazEobiwgc2FsdCwgaWQxMjgsIHNpemVvZihpZDEyOCksIG91dDEyOCk7DQo+ID4gK30N
Cj4gPiArDQo+ID4gK2Jvb2wgbWVzaF9jcnlwdG9fbmtpayhjb25zdCB1aW50OF90IG5bMTZdLCB1
aW50OF90IGlkZW50aXR5X2tleVsxNl0pDQo+ID4gK3sNCj4gPiArCXJldHVybiBjcnlwdG9fMTI4
KG4sICJua2lrIiwgaWRlbnRpdHlfa2V5KTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArYm9vbCBtZXNo
X2NyeXB0b19pZGVudGl0eShjb25zdCB1aW50OF90IG5ldF9rZXlbMTZdLCB1aW50MTZfdCBhZGRy
LA0KPiA+ICsJCQkJCQkJdWludDhfdCBpZFsxNl0pDQo+ID4gK3sNCj4gPiArCXVpbnQ4X3QgaWRf
a2V5WzE2XTsNCj4gPiArCXVpbnQ4X3QgdG1wWzE2XTsNCj4gPiArDQo+ID4gKwlwcmludF9wYWNr
ZXQoIk5ldF9LZXkiLCBuZXRfa2V5LCAxNik7DQo+ID4gKw0KPiA+ICsJaWYgKCFtZXNoX2NyeXB0
b19ua2lrKG5ldF9rZXksIGlkX2tleSkpDQo+ID4gKwkJcmV0dXJuIGZhbHNlOw0KPiA+ICsNCj4g
PiArCXByaW50X3BhY2tldCgiSURfS2V5IiwgaWRfa2V5LCAxNik7DQo+ID4gKw0KPiA+ICsJaWYg
KCFsX2dldF9iZTY0KGlkICsgOCkpDQo+ID4gKwkJbF9nZXRyYW5kb20oaWQgKyA4LCA4KTsNCj4g
PiArDQo+ID4gKwltZW1zZXQodG1wLCAwLCBzaXplb2YodG1wKSk7DQo+ID4gKwltZW1jcHkodG1w
ICsgNiwgaWQgKyA4LCA4KTsNCj4gPiArCWxfcHV0X2JlMTYoYWRkciwgdG1wICsgMTQpOw0KPiA+
ICsNCj4gPiArCXByaW50X3BhY2tldCgiTm9uY2UiLCB0bXAsIDE2KTsNCj4gPiArCWlmICghYWVz
X2VjYl9vbmUoaWRfa2V5LCB0bXAsIHRtcCkpDQo+ID4gKwkJcmV0dXJuIGZhbHNlOw0KPiA+ICsN
Cj4gPiArCXByaW50X3BhY2tldCgicmVzdWx0IiwgdG1wLCAxNik7DQo+ID4gKw0KPiA+ICsJbWVt
Y3B5KGlkLCB0bXAgKyA4LCA4KTsNCj4gPiArCXJldHVybiB0cnVlOw0KPiA+ICt9DQo+ID4gKw0K
PiA+ICtib29sIG1lc2hfY3J5cHRvX25rYmsoY29uc3QgdWludDhfdCBuWzE2XSwgdWludDhfdCBi
ZWFjb25fa2V5WzE2XSkNCj4gPiArew0KPiA+ICsJcmV0dXJuIGNyeXB0b18xMjgobiwgIm5rYmsi
LCBiZWFjb25fa2V5KTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArYm9vbCBtZXNoX2NyeXB0b19ua3Br
KGNvbnN0IHVpbnQ4X3QgblsxNl0sIHVpbnQ4X3QgcHJveHlfa2V5WzE2XSkNCj4gPiArew0KPiA+
ICsJcmV0dXJuIGNyeXB0b18xMjgobiwgIm5rcGsiLCBwcm94eV9rZXkpOw0KPiA+ICt9DQo+ID4g
Kw0KPiA+ICtib29sIG1lc2hfY3J5cHRvX2szKGNvbnN0IHVpbnQ4X3QgblsxNl0sIHVpbnQ4X3Qg
b3V0NjRbOF0pDQo+ID4gK3sNCj4gPiArCXVpbnQ4X3QgdG1wWzE2XTsNCj4gPiArCXVpbnQ4X3Qg
dFsxNl07DQo+ID4gKwl1aW50OF90IGlkNjRbXSA9IHsgJ2knLCAnZCcsICc2JywgJzQnLCAweDAx
IH07DQo+ID4gKw0KPiA+ICsJaWYgKCFtZXNoX2NyeXB0b19zMSgic21rMyIsIDQsIHRtcCkpDQo+
ID4gKwkJcmV0dXJuIGZhbHNlOw0KPiA+ICsNCj4gPiArCWlmICghYWVzX2NtYWNfb25lKHRtcCwg
biwgMTYsIHQpKQ0KPiA+ICsJCXJldHVybiBmYWxzZTsNCj4gPiArDQo+ID4gKwlpZiAoIWFlc19j
bWFjX29uZSh0LCBpZDY0LCBzaXplb2YoaWQ2NCksIHRtcCkpDQo+ID4gKwkJcmV0dXJuIGZhbHNl
Ow0KPiA+ICsNCj4gPiArCW1lbWNweShvdXQ2NCwgdG1wICsgOCwgOCk7DQo+ID4gKw0KPiA+ICsJ
cmV0dXJuIHRydWU7DQo+ID4gK30NCj4gPiArDQo+ID4gK2Jvb2wgbWVzaF9jcnlwdG9fazQoY29u
c3QgdWludDhfdCBhWzE2XSwgdWludDhfdCBvdXQ2WzFdKQ0KPiA+ICt7DQo+ID4gKwl1aW50OF90
IHRtcFsxNl07DQo+ID4gKwl1aW50OF90IHRbMTZdOw0KPiA+ICsJdWludDhfdCBpZDZbXSA9IHsg
J2knLCAnZCcsICc2JywgMHgwMSB9Ow0KPiANCj4gVGhlc2Ugc2hvdWxkIGNvbWUgZmlyc3QgYW5k
IG1vc3QgbGlrZWx5IGJlIGRlY2xhcmVkIGNvbnN0Lg0KPiANCj4gPiArDQo+ID4gKwlpZiAoIW1l
c2hfY3J5cHRvX3MxKCJzbWs0IiwgNCwgdG1wKSkNCj4gPiArCQlyZXR1cm4gZmFsc2U7DQo+ID4g
Kw0KPiA+ICsJaWYgKCFhZXNfY21hY19vbmUodG1wLCBhLCAxNiwgdCkpDQo+ID4gKwkJcmV0dXJu
IGZhbHNlOw0KPiA+ICsNCj4gPiArCWlmICghYWVzX2NtYWNfb25lKHQsIGlkNiwgc2l6ZW9mKGlk
NiksIHRtcCkpDQo+ID4gKwkJcmV0dXJuIGZhbHNlOw0KPiA+ICsNCj4gPiArCW91dDZbMF0gPSB0
bXBbMTVdICYgMHgzZjsNCj4gPiArCXJldHVybiB0cnVlOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICti
b29sIG1lc2hfY3J5cHRvX2JlYWNvbl9jbWFjKGNvbnN0IHVpbnQ4X3QgZW5jcnlwdGlvbl9rZXlb
MTZdLA0KPiA+ICsJCQkJY29uc3QgdWludDhfdCBuZXR3b3JrX2lkWzhdLA0KPiA+ICsJCQkJdWlu
dDMyX3QgaXZfaW5kZXgsIGJvb2wga3IsIGJvb2wgaXUsDQo+ID4gKwkJCQl1aW50NjRfdCAqY21h
YykNCj4gPiArew0KPiA+ICsJdWludDhfdCBtc2dbMTNdLCB0bXBbMTZdOw0KPiA+ICsNCj4gPiAr
CWlmICghY21hYykNCj4gPiArCQlyZXR1cm4gZmFsc2U7DQo+ID4gKw0KPiA+ICsJbXNnWzBdID0g
a3IgPyAweDAxIDogMHgwMDsNCj4gPiArCW1zZ1swXSB8PSBpdSA/IDB4MDIgOiAweDAwOw0KPiA+
ICsJbWVtY3B5KG1zZyArIDEsIG5ldHdvcmtfaWQsIDgpOw0KPiA+ICsJbF9wdXRfYmUzMihpdl9p
bmRleCwgbXNnICsgOSk7DQo+ID4gKw0KPiA+ICsJaWYgKCFhZXNfY21hY19vbmUoZW5jcnlwdGlv
bl9rZXksIG1zZywgMTMsIHRtcCkpDQo+ID4gKwkJcmV0dXJuIGZhbHNlOw0KPiA+ICsNCj4gPiAr
CSpjbWFjID0gbF9nZXRfYmU2NCh0bXApOw0KPiA+ICsNCj4gPiArCXJldHVybiB0cnVlOw0KPiA+
ICt9DQo+ID4gKw0KPiA+ICtib29sIG1lc2hfY3J5cHRvX25ldHdvcmtfbm9uY2UoYm9vbCBjdGws
IHVpbnQ4X3QgdHRsLCB1aW50MzJfdCBzZXEsDQo+ID4gKwkJCQl1aW50MTZfdCBzcmMsIHVpbnQz
Ml90IGl2X2luZGV4LA0KPiA+ICsJCQkJdWludDhfdCBub25jZVsxM10pDQo+ID4gK3sNCj4gPiAr
CW5vbmNlWzBdID0gMDsNCj4gPiArCW5vbmNlWzFdID0gKHR0bCAmIFRUTF9NQVNLKSB8IChjdGwg
PyBDVEwgOiAweDAwKTsNCj4gPiArCW5vbmNlWzJdID0gKHNlcSA+PiAxNikgJiAweGZmOw0KPiA+
ICsJbm9uY2VbM10gPSAoc2VxID4+IDgpICYgMHhmZjsNCj4gPiArCW5vbmNlWzRdID0gc2VxICYg
MHhmZjsNCj4gPiArDQo+ID4gKwkvKiBTUkMgKi8NCj4gPiArCWxfcHV0X2JlMTYoc3JjLCBub25j
ZSArIDUpOw0KPiA+ICsNCj4gPiArCWxfcHV0X2JlMTYoMCwgbm9uY2UgKyA3KTsNCj4gPiArDQo+
ID4gKwkvKiBJViBJbmRleCAqLw0KPiA+ICsJbF9wdXRfYmUzMihpdl9pbmRleCwgbm9uY2UgKyA5
KTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gdHJ1ZTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArYm9vbCBt
ZXNoX2NyeXB0b19uZXR3b3JrX2VuY3J5cHQoYm9vbCBjdGwsIHVpbnQ4X3QgdHRsLA0KPiA+ICsJ
CQkJdWludDMyX3Qgc2VxLCB1aW50MTZfdCBzcmMsDQo+ID4gKwkJCQl1aW50MzJfdCBpdl9pbmRl
eCwNCj4gPiArCQkJCWNvbnN0IHVpbnQ4X3QgbmV0X2tleVsxNl0sDQo+ID4gKwkJCQljb25zdCB1
aW50OF90ICplbmNfbXNnLCB1aW50OF90IGVuY19tc2dfbGVuLA0KPiA+ICsJCQkJdWludDhfdCAq
b3V0LCB2b2lkICpuZXRfbWljKQ0KPiA+ICt7DQo+ID4gKwl1aW50OF90IG5vbmNlWzEzXTsNCj4g
PiArDQo+ID4gKwlpZiAoIW1lc2hfY3J5cHRvX25ldHdvcmtfbm9uY2UoY3RsLCB0dGwsIHNlcSwg
c3JjLCBpdl9pbmRleCwgbm9uY2UpKQ0KPiA+ICsJCXJldHVybiBmYWxzZTsNCj4gPiArDQo+ID4g
KwlyZXR1cm4gbWVzaF9jcnlwdG9fYWVzX2NjbV9lbmNyeXB0KG5vbmNlLCBuZXRfa2V5LCBOVUxM
LCAwLCBlbmNfbXNnLA0KPiA+ICsJCQkJZW5jX21zZ19sZW4sIG91dCwgbmV0X21pYywNCj4gPiAr
CQkJCWN0bCA/IHNpemVvZih1aW50NjRfdCkgOiBzaXplb2YodWludDMyX3QpKTsNCj4gPiArfQ0K
PiA+ICsNCj4gPiArYm9vbCBtZXNoX2NyeXB0b19uZXR3b3JrX2RlY3J5cHQoYm9vbCBjdGwsIHVp
bnQ4X3QgdHRsLA0KPiA+ICsJCQkJdWludDMyX3Qgc2VxLCB1aW50MTZfdCBzcmMsDQo+ID4gKwkJ
CQl1aW50MzJfdCBpdl9pbmRleCwNCj4gPiArCQkJCWNvbnN0IHVpbnQ4X3QgbmV0X2tleVsxNl0s
DQo+ID4gKwkJCQljb25zdCB1aW50OF90ICplbmNfbXNnLCB1aW50OF90IGVuY19tc2dfbGVuLA0K
PiA+ICsJCQkJdWludDhfdCAqb3V0LCB2b2lkICpuZXRfbWljLCBzaXplX3QgbWljX3NpemUpDQo+
ID4gK3sNCj4gPiArCXVpbnQ4X3Qgbm9uY2VbMTNdOw0KPiA+ICsNCj4gPiArCWlmICghbWVzaF9j
cnlwdG9fbmV0d29ya19ub25jZShjdGwsIHR0bCwgc2VxLCBzcmMsIGl2X2luZGV4LCBub25jZSkp
DQo+ID4gKwkJcmV0dXJuIGZhbHNlOw0KPiA+ICsNCj4gPiArCXJldHVybiBtZXNoX2NyeXB0b19h
ZXNfY2NtX2RlY3J5cHQobm9uY2UsIG5ldF9rZXksIE5VTEwsIDAsDQo+ID4gKwkJCQkJCWVuY19t
c2csIGVuY19tc2dfbGVuLCBvdXQsDQo+ID4gKwkJCQkJCW5ldF9taWMsIG1pY19zaXplKTsNCj4g
PiArfQ0KPiA+ICsNCj4gPiArYm9vbCBtZXNoX2NyeXB0b19hcHBsaWNhdGlvbl9ub25jZSh1aW50
MzJfdCBzZXEsIHVpbnQxNl90IHNyYywNCj4gPiArCQkJCQl1aW50MTZfdCBkc3QsIHVpbnQzMl90
IGl2X2luZGV4LA0KPiA+ICsJCQkJCWJvb2wgYXN6bWljLCB1aW50OF90IG5vbmNlWzEzXSkNCj4g
PiArew0KPiA+ICsJbm9uY2VbMF0gPSAweDAxOw0KPiA+ICsJbm9uY2VbMV0gPSBhc3ptaWMgPyAw
eDgwIDogMHgwMDsNCj4gPiArCW5vbmNlWzJdID0gKHNlcSAmIDB4MDBmZjAwMDApID4+IDE2Ow0K
PiA+ICsJbm9uY2VbM10gPSAoc2VxICYgMHgwMDAwZmYwMCkgPj4gODsNCj4gPiArCW5vbmNlWzRd
ID0gKHNlcSAmIDB4MDAwMDAwZmYpOw0KPiA+ICsJbm9uY2VbNV0gPSAoc3JjICYgMHhmZjAwKSA+
PiA4Ow0KPiA+ICsJbm9uY2VbNl0gPSAoc3JjICYgMHgwMGZmKTsNCj4gPiArCW5vbmNlWzddID0g
KGRzdCAmIDB4ZmYwMCkgPj4gODsNCj4gPiArCW5vbmNlWzhdID0gKGRzdCAmIDB4MDBmZik7DQo+
ID4gKwlsX3B1dF9iZTMyKGl2X2luZGV4LCBub25jZSArIDkpOw0KPiA+ICsNCj4gPiArCXJldHVy
biB0cnVlOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtib29sIG1lc2hfY3J5cHRvX2RldmljZV9ub25j
ZSh1aW50MzJfdCBzZXEsIHVpbnQxNl90IHNyYywNCj4gPiArCQkJCQl1aW50MTZfdCBkc3QsIHVp
bnQzMl90IGl2X2luZGV4LA0KPiA+ICsJCQkJCWJvb2wgYXN6bWljLCB1aW50OF90IG5vbmNlWzEz
XSkNCj4gPiArew0KPiA+ICsJbm9uY2VbMF0gPSAweDAyOw0KPiA+ICsJbm9uY2VbMV0gPSBhc3pt
aWMgPyAweDgwIDogMHgwMDsNCj4gPiArCW5vbmNlWzJdID0gKHNlcSAmIDB4MDBmZjAwMDApID4+
IDE2Ow0KPiA+ICsJbm9uY2VbM10gPSAoc2VxICYgMHgwMDAwZmYwMCkgPj4gODsNCj4gPiArCW5v
bmNlWzRdID0gKHNlcSAmIDB4MDAwMDAwZmYpOw0KPiA+ICsJbm9uY2VbNV0gPSAoc3JjICYgMHhm
ZjAwKSA+PiA4Ow0KPiA+ICsJbm9uY2VbNl0gPSAoc3JjICYgMHgwMGZmKTsNCj4gPiArCW5vbmNl
WzddID0gKGRzdCAmIDB4ZmYwMCkgPj4gODsNCj4gPiArCW5vbmNlWzhdID0gKGRzdCAmIDB4MDBm
Zik7DQo+ID4gKwlsX3B1dF9iZTMyKGl2X2luZGV4LCBub25jZSArIDkpOw0KPiA+ICsNCj4gPiAr
CXJldHVybiB0cnVlOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtib29sIG1lc2hfY3J5cHRvX2FwcGxp
Y2F0aW9uX2VuY3J5cHQodWludDhfdCBrZXlfaWQsIHVpbnQzMl90IHNlcSwgdWludDE2X3Qgc3Jj
LA0KPiA+ICsJCQkJCXVpbnQxNl90IGRzdCwgdWludDMyX3QgaXZfaW5kZXgsDQo+ID4gKwkJCQkJ
Y29uc3QgdWludDhfdCBhcHBfa2V5WzE2XSwNCj4gPiArCQkJCQljb25zdCB1aW50OF90ICphYWQs
IHVpbnQ4X3QgYWFkX2xlbiwNCj4gPiArCQkJCQljb25zdCB1aW50OF90ICptc2csIHVpbnQ4X3Qg
bXNnX2xlbiwNCj4gPiArCQkJCQl1aW50OF90ICpvdXQsDQo+ID4gKwkJCQkJdm9pZCAqYXBwX21p
Yywgc2l6ZV90IG1pY19zaXplKQ0KPiA+ICt7DQo+ID4gKwl1aW50OF90IG5vbmNlWzEzXTsNCj4g
PiArCWJvb2wgYXN6bWljID0gKG1pY19zaXplID09IHNpemVvZih1aW50NjRfdCkpID8gdHJ1ZSA6
IGZhbHNlOw0KPiANCj4gSXMgdGhpcyBzaXplb2YodWludDY0X3QpIGNvbnN0cnVjdCByZWFsbHkg
YSBnb29kIGlkZWE/DQo+IA0KPiA+ICsNCj4gPiArCWlmICgha2V5X2lkICYmICFtZXNoX2NyeXB0
b19kZXZpY2Vfbm9uY2Uoc2VxLCBzcmMsIGRzdCwNCj4gPiArCQkJCQkJaXZfaW5kZXgsIGFzem1p
Yywgbm9uY2UpKQ0KPiA+ICsJCXJldHVybiBmYWxzZTsNCj4gPiArDQo+ID4gKwlpZiAoa2V5X2lk
ICYmICFtZXNoX2NyeXB0b19hcHBsaWNhdGlvbl9ub25jZShzZXEsIHNyYywgZHN0LA0KPiA+ICsJ
CQkJCQlpdl9pbmRleCwgYXN6bWljLCBub25jZSkpDQo+ID4gKwkJcmV0dXJuIGZhbHNlOw0KPiA+
ICsNCj4gPiArCXJldHVybiBtZXNoX2NyeXB0b19hZXNfY2NtX2VuY3J5cHQobm9uY2UsIGFwcF9r
ZXksIGFhZCwgYWFkX2xlbiwNCj4gPiArCQkJCQkJbXNnLCBtc2dfbGVuLA0KPiA+ICsJCQkJCQlv
dXQsIGFwcF9taWMsIG1pY19zaXplKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArYm9vbCBtZXNoX2Ny
eXB0b19hcHBsaWNhdGlvbl9kZWNyeXB0KHVpbnQ4X3Qga2V5X2lkLCB1aW50MzJfdCBzZXEsIHVp
bnQxNl90IHNyYywNCj4gPiArCQkJCXVpbnQxNl90IGRzdCwgdWludDMyX3QgaXZfaW5kZXgsDQo+
ID4gKwkJCQljb25zdCB1aW50OF90IGFwcF9rZXlbMTZdLA0KPiA+ICsJCQkJY29uc3QgdWludDhf
dCAqYWFkLCB1aW50OF90IGFhZF9sZW4sDQo+ID4gKwkJCQljb25zdCB1aW50OF90ICplbmNfbXNn
LCB1aW50OF90IGVuY19tc2dfbGVuLA0KPiA+ICsJCQkJdWludDhfdCAqb3V0LCB2b2lkICphcHBf
bWljLCBzaXplX3QgbWljX3NpemUpDQo+ID4gK3sNCj4gPiArCXVpbnQ4X3Qgbm9uY2VbMTNdOw0K
PiA+ICsJYm9vbCBhc3ptaWMgPSAobWljX3NpemUgPT0gc2l6ZW9mKHVpbnQ2NF90KSkgPyB0cnVl
IDogZmFsc2U7DQo+ID4gKw0KPiA+ICsJaWYgKCFrZXlfaWQgJiYgIW1lc2hfY3J5cHRvX2Rldmlj
ZV9ub25jZShzZXEsIHNyYywgZHN0LA0KPiA+ICsJCQkJCQlpdl9pbmRleCwgYXN6bWljLCBub25j
ZSkpDQo+ID4gKwkJcmV0dXJuIGZhbHNlOw0KPiA+ICsNCj4gPiArCWlmIChrZXlfaWQgJiYgIW1l
c2hfY3J5cHRvX2FwcGxpY2F0aW9uX25vbmNlKHNlcSwgc3JjLCBkc3QsDQo+ID4gKwkJCQkJCWl2
X2luZGV4LCBhc3ptaWMsIG5vbmNlKSkNCj4gPiArCQlyZXR1cm4gZmFsc2U7DQo+ID4gKw0KPiA+
ICsJcmV0dXJuIG1lc2hfY3J5cHRvX2Flc19jY21fZGVjcnlwdChub25jZSwgYXBwX2tleSwNCj4g
PiArCQkJCQkJYWFkLCBhYWRfbGVuLCBlbmNfbXNnLA0KPiA+ICsJCQkJCQllbmNfbXNnX2xlbiwg
b3V0LA0KPiA+ICsJCQkJCQlhcHBfbWljLCBtaWNfc2l6ZSk7DQo+ID4gK30NCj4gPiArDQo+ID4g
K2Jvb2wgbWVzaF9jcnlwdG9fc2Vzc2lvbl9rZXkoY29uc3QgdWludDhfdCBzZWNyZXRbMzJdLA0K
PiA+ICsJCQkJCWNvbnN0IHVpbnQ4X3Qgc2FsdFsxNl0sDQo+ID4gKwkJCQkJdWludDhfdCBzZXNz
aW9uX2tleVsxNl0pDQo+ID4gK3sNCj4gPiArCWNvbnN0IHVpbnQ4X3QgcHJza1s0XSA9ICJwcnNr
IjsNCj4gPiArDQo+ID4gKwlpZiAoIWFlc19jbWFjX29uZShzYWx0LCBzZWNyZXQsIDMyLCBzZXNz
aW9uX2tleSkpDQo+ID4gKwkJcmV0dXJuIGZhbHNlOw0KPiA+ICsNCj4gPiArCXJldHVybiBhZXNf
Y21hY19vbmUoc2Vzc2lvbl9rZXksIHByc2ssIDQsIHNlc3Npb25fa2V5KTsNCj4gPiArfQ0KPiA+
ICsNCj4gPiArYm9vbCBtZXNoX2NyeXB0b19ub25jZShjb25zdCB1aW50OF90IHNlY3JldFszMl0s
DQo+ID4gKwkJCQkJY29uc3QgdWludDhfdCBzYWx0WzE2XSwNCj4gPiArCQkJCQl1aW50OF90IG5v
bmNlWzEzXSkNCj4gPiArew0KPiA+ICsJY29uc3QgdWludDhfdCBwcnNuWzRdID0gInByc24iOw0K
PiA+ICsJdWludDhfdCB0bXBbMTZdOw0KPiA+ICsJYm9vbCByZXN1bHQ7DQo+ID4gKw0KPiA+ICsJ
aWYgKCFhZXNfY21hY19vbmUoc2FsdCwgc2VjcmV0LCAzMiwgdG1wKSkNCj4gPiArCQlyZXR1cm4g
ZmFsc2U7DQo+ID4gKw0KPiA+ICsJcmVzdWx0ID0gIGFlc19jbWFjX29uZSh0bXAsIHByc24sIDQs
IHRtcCk7DQo+IA0KPiBEb3VibGUgc3BhY2VzLg0KPiANCj4gPiArDQo+ID4gKwlpZiAocmVzdWx0
KQ0KPiA+ICsJCW1lbWNweShub25jZSwgdG1wICsgMywgMTMpOw0KPiA+ICsNCj4gPiArCXJldHVy
biByZXN1bHQ7DQo+ID4gK30NCj4gPiArDQo+ID4gK2Jvb2wgbWVzaF9jcnlwdG9fczEoY29uc3Qg
dm9pZCAqaW5mbywgc2l6ZV90IGxlbiwgdWludDhfdCBzYWx0WzE2XSkNCj4gPiArew0KPiA+ICsJ
Y29uc3QgdWludDhfdCB6ZXJvWzE2XSA9IHswfTsNCj4gDQo+ICA9IHsgMCwgfTsNCj4gDQo+ID4g
Kw0KPiA+ICsJcmV0dXJuIGFlc19jbWFjX29uZSh6ZXJvLCBpbmZvLCBsZW4sIHNhbHQpOw0KPiA+
ICt9DQo+ID4gKw0KPiA+ICtib29sIG1lc2hfY3J5cHRvX3Byb3ZfcHJvdl9zYWx0KGNvbnN0IHVp
bnQ4X3QgY29uZl9zYWx0WzE2XSwNCj4gPiArCQkJCQljb25zdCB1aW50OF90IHByb3ZfcmFuZFsx
Nl0sDQo+ID4gKwkJCQkJY29uc3QgdWludDhfdCBkZXZfcmFuZFsxNl0sDQo+ID4gKwkJCQkJdWlu
dDhfdCBwcm92X3NhbHRbMTZdKQ0KPiA+ICt7DQo+ID4gKwljb25zdCB1aW50OF90IHplcm9bMTZd
ID0gezB9Ow0KPiA+ICsJdWludDhfdCB0bXBbMTYgKiAzXTsNCj4gPiArDQo+ID4gKwltZW1jcHko
dG1wLCBjb25mX3NhbHQsIDE2KTsNCj4gPiArCW1lbWNweSh0bXAgKyAxNiwgcHJvdl9yYW5kLCAx
Nik7DQo+ID4gKwltZW1jcHkodG1wICsgMzIsIGRldl9yYW5kLCAxNik7DQo+ID4gKw0KPiA+ICsJ
cmV0dXJuIGFlc19jbWFjX29uZSh6ZXJvLCB0bXAsIHNpemVvZih0bXApLCBwcm92X3NhbHQpOw0K
PiA+ICt9DQo+ID4gKw0KPiA+ICtib29sIG1lc2hfY3J5cHRvX3Byb3ZfY29uZl9rZXkoY29uc3Qg
dWludDhfdCBzZWNyZXRbMzJdLA0KPiA+ICsJCQkJCWNvbnN0IHVpbnQ4X3Qgc2FsdFsxNl0sDQo+
ID4gKwkJCQkJdWludDhfdCBjb25mX2tleVsxNl0pDQo+ID4gK3sNCj4gPiArCWNvbnN0IHVpbnQ4
X3QgcHJja1s0XSA9ICJwcmNrIjsNCj4gPiArDQo+ID4gKwlpZiAoIWFlc19jbWFjX29uZShzYWx0
LCBzZWNyZXQsIDMyLCBjb25mX2tleSkpDQo+ID4gKwkJcmV0dXJuIGZhbHNlOw0KPiA+ICsNCj4g
PiArCXJldHVybiBhZXNfY21hY19vbmUoY29uZl9rZXksIHByY2ssIDQsIGNvbmZfa2V5KTsNCj4g
PiArfQ0KPiA+ICsNCj4gPiArYm9vbCBtZXNoX2NyeXB0b19kZXZpY2Vfa2V5KGNvbnN0IHVpbnQ4
X3Qgc2VjcmV0WzMyXSwNCj4gPiArCQkJCQkJY29uc3QgdWludDhfdCBzYWx0WzE2XSwNCj4gPiAr
CQkJCQkJdWludDhfdCBkZXZpY2Vfa2V5WzE2XSkNCj4gPiArew0KPiA+ICsJY29uc3QgdWludDhf
dCBwcmRrWzRdID0gInByZGsiOw0KPiA+ICsNCj4gPiArCWlmICghYWVzX2NtYWNfb25lKHNhbHQs
IHNlY3JldCwgMzIsIGRldmljZV9rZXkpKQ0KPiA+ICsJCXJldHVybiBmYWxzZTsNCj4gPiArDQo+
ID4gKwlyZXR1cm4gYWVzX2NtYWNfb25lKGRldmljZV9rZXksIHByZGssIDQsIGRldmljZV9rZXkp
Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtib29sIG1lc2hfY3J5cHRvX3ZpcnR1YWxfYWRkcihjb25z
dCB1aW50OF90IHZpcnR1YWxfbGFiZWxbMTZdLA0KPiA+ICsJCQkJCQl1aW50MTZfdCAqYWRkcikN
Cj4gPiArew0KPiA+ICsJdWludDhfdCB0bXBbMTZdOw0KPiA+ICsNCj4gPiArCWlmICghbWVzaF9j
cnlwdG9fczEoInZ0YWQiLCA0LCB0bXApKQ0KPiA+ICsJCXJldHVybiBmYWxzZTsNCj4gPiArDQo+
ID4gKwlpZiAoIWFkZHIgfHwgIWFlc19jbWFjX29uZSh0bXAsIHZpcnR1YWxfbGFiZWwsIDE2LCB0
bXApKQ0KPiA+ICsJCXJldHVybiBmYWxzZTsNCj4gPiArDQo+ID4gKwkqYWRkciA9IChsX2dldF9i
ZTE2KHRtcCArIDE0KSAmIDB4M2ZmZikgfCAweDgwMDA7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIHRy
dWU7DQo+ID4gK30NCj4gPiArDQo+ID4gK2Jvb2wgbWVzaF9jcnlwdG9fcHJpdmFjeV9jb3VudGVy
KHVpbnQzMl90IGl2X2luZGV4LA0KPiA+ICsJCQkJCQljb25zdCB1aW50OF90ICpwYXlsb2FkLA0K
PiA+ICsJCQkJCQl1aW50OF90IHByaXZhY3lfY291bnRlclsxNl0pDQo+ID4gK3sNCj4gPiArCW1l
bXNldChwcml2YWN5X2NvdW50ZXIsIDAsIDUpOw0KPiA+ICsJbF9wdXRfYmUzMihpdl9pbmRleCwg
cHJpdmFjeV9jb3VudGVyICsgNSk7DQo+ID4gKwltZW1jcHkocHJpdmFjeV9jb3VudGVyICsgOSwg
cGF5bG9hZCwgNyk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIHRydWU7DQo+ID4gK30NCj4gPiArDQo+
ID4gK2Jvb2wgbWVzaF9jcnlwdG9fbmV0d29ya19vYmZ1c2NhdGUoY29uc3QgdWludDhfdCBwcml2
YWN5X2tleVsxNl0sDQo+ID4gKwkJCQkJY29uc3QgdWludDhfdCBwcml2YWN5X2NvdW50ZXJbMTZd
LA0KPiA+ICsJCQkJCWJvb2wgY3RsLCB1aW50OF90IHR0bCwgdWludDMyX3Qgc2VxLA0KPiA+ICsJ
CQkJCXVpbnQxNl90IHNyYywgdWludDhfdCAqb3V0KQ0KPiA+ICt7DQo+ID4gKwl1aW50OF90IGVj
YlsxNl0sIHRtcFsxNl07DQo+ID4gKwlpbnQgaTsNCj4gPiArDQo+ID4gKwlpZiAoIWFlc19lY2Jf
b25lKHByaXZhY3lfa2V5LCBwcml2YWN5X2NvdW50ZXIsIGVjYikpDQo+ID4gKwkJcmV0dXJuIGZh
bHNlOw0KPiA+ICsNCj4gPiArCXRtcFswXSA9ICgoISFjdGwpIDw8IDcpIHwgKHR0bCAmIFRUTF9N
QVNLKTsNCj4gPiArCXRtcFsxXSA9IChzZXEgJiAweGZmMDAwMCkgPj4gMTY7DQo+ID4gKwl0bXBb
Ml0gPSAoc2VxICYgMHgwMGZmMDApID4+IDg7DQo+ID4gKwl0bXBbM10gPSAoc2VxICYgMHgwMDAw
ZmYpOw0KPiA+ICsJdG1wWzRdID0gKHNyYyAmIDB4ZmYwMCkgPj4gODsNCj4gPiArCXRtcFs1XSA9
IChzcmMgJiAweDAwZmYpOw0KPiA+ICsNCj4gPiArCWlmIChvdXQpIHsNCj4gPiArCQlmb3IgKGkg
PSAwOyBpIDwgNjsgaSsrKQ0KPiA+ICsJCQlvdXRbaV0gPSBlY2JbaV0gXiB0bXBbaV07DQo+ID4g
Kwl9DQo+ID4gKw0KPiA+ICsJcmV0dXJuIHRydWU7DQo+ID4gK30NCj4gPiArDQo+ID4gK2Jvb2wg
bWVzaF9jcnlwdG9fbmV0d29ya19jbGFyaWZ5KGNvbnN0IHVpbnQ4X3QgcHJpdmFjeV9rZXlbMTZd
LA0KPiA+ICsJCQkJY29uc3QgdWludDhfdCBwcml2YWN5X2NvdW50ZXJbMTZdLA0KPiA+ICsJCQkJ
Y29uc3QgdWludDhfdCBuZXRfaGRyWzZdLA0KPiA+ICsJCQkJYm9vbCAqY3RsLCB1aW50OF90ICp0
dGwsDQo+ID4gKwkJCQl1aW50MzJfdCAqc2VxLCB1aW50MTZfdCAqc3JjKQ0KPiA+ICt7DQo+ID4g
Kwl1aW50OF90IGVjYlsxNl0sIHRtcFs2XTsNCj4gPiArCWludCBpOw0KPiA+ICsNCj4gPiArCWlm
ICghYWVzX2VjYl9vbmUocHJpdmFjeV9rZXksIHByaXZhY3lfY291bnRlciwgZWNiKSkNCj4gPiAr
CQlyZXR1cm4gZmFsc2U7DQo+ID4gKw0KPiA+ICsJZm9yIChpID0gMDsgaSA8IDY7IGkrKykNCj4g
PiArCQl0bXBbaV0gPSBlY2JbaV0gXiBuZXRfaGRyW2ldOw0KPiA+ICsNCj4gPiArCWlmIChjdGwp
DQo+ID4gKwkJKmN0bCA9ICEhKHRtcFswXSAmIENUTCk7DQo+ID4gKw0KPiA+ICsJaWYgKHR0bCkN
Cj4gPiArCQkqdHRsID0gdG1wWzBdICYgVFRMX01BU0s7DQo+ID4gKw0KPiA+ICsJaWYgKHNlcSkN
Cj4gPiArCQkqc2VxID0gbF9nZXRfYmUzMih0bXApICYgU0VRX01BU0s7DQo+ID4gKw0KPiA+ICsJ
aWYgKHNyYykNCj4gPiArCQkqc3JjID0gbF9nZXRfYmUxNih0bXAgKyA0KTsNCj4gPiArDQo+ID4g
KwlyZXR1cm4gdHJ1ZTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArYm9vbCBtZXNoX2NyeXB0b19wYWNr
ZXRfYnVpbGQoYm9vbCBjdGwsIHVpbnQ4X3QgdHRsLA0KPiA+ICsJCQkJdWludDMyX3Qgc2VxLA0K
PiA+ICsJCQkJdWludDE2X3Qgc3JjLCB1aW50MTZfdCBkc3QsDQo+ID4gKwkJCQl1aW50OF90IG9w
Y29kZSwNCj4gPiArCQkJCWJvb2wgc2VnbWVudGVkLCB1aW50OF90IGtleV9pZCwNCj4gPiArCQkJ
CWJvb2wgc3ptaWMsIGJvb2wgcmVsYXksIHVpbnQxNl90IHNlcVplcm8sDQo+ID4gKwkJCQl1aW50
OF90IHNlZ08sIHVpbnQ4X3Qgc2VnTiwNCj4gPiArCQkJCWNvbnN0IHVpbnQ4X3QgKnBheWxvYWQs
IHVpbnQ4X3QgcGF5bG9hZF9sZW4sDQo+ID4gKwkJCQl1aW50OF90ICpwYWNrZXQsIHVpbnQ4X3Qg
KnBhY2tldF9sZW4pDQo+ID4gK3sNCj4gPiArCXVpbnQzMl90IGhkcjsNCj4gPiArCXNpemVfdCBu
Ow0KPiA+ICsNCj4gPiArCWxfcHV0X2JlMzIoc2VxLCBwYWNrZXQgKyAxKTsNCj4gPiArCXBhY2tl
dFsxXSA9IChjdGwgPyBDVEwgOiAwKSB8ICh0dGwgJiBUVExfTUFTSyk7DQo+ID4gKw0KPiA+ICsJ
bF9wdXRfYmUxNihzcmMsIHBhY2tldCArIDUpOw0KPiA+ICsJbF9wdXRfYmUxNihkc3QsIHBhY2tl
dCArIDcpOw0KPiA+ICsJbiA9IDk7DQo+ID4gKw0KPiA+ICsJaWYgKCFjdGwpIHsNCj4gPiArCQlo
ZHIgPSBzZWdtZW50ZWQgPDwgU0VHX0hEUl9TSElGVDsNCj4gPiArCQloZHIgfD0gKGtleV9pZCAm
IEtFWV9JRF9NQVNLKSA8PCBLRVlfSERSX1NISUZUOw0KPiA+ICsJCWlmIChzZWdtZW50ZWQpIHsN
Cj4gPiArCQkJaGRyIHw9IHN6bWljIDw8IFNaTUlDX0hEUl9TSElGVDsNCj4gPiArCQkJaGRyIHw9
IChzZXFaZXJvICYgU0VRX1pFUk9fTUFTSykgPDwgU0VRX1pFUk9fSERSX1NISUZUOw0KPiA+ICsJ
CQloZHIgfD0gKHNlZ08gJiBTRUdfTUFTSykgPDwgU0VHT19IRFJfU0hJRlQ7DQo+ID4gKwkJCWhk
ciB8PSAoc2VnTiAmIFNFR19NQVNLKSA8PCBTRUdOX0hEUl9TSElGVDsNCj4gPiArCQl9DQo+ID4g
KwkJbF9wdXRfYmUzMihoZHIsIHBhY2tldCArIG4pOw0KPiA+ICsNCj4gPiArCQkvKiBPbmx5IGZp
cnN0IG9jdGV0IGlzIHZhbGlkIGZvciB1bnNlZ21lbnRlZCBtZXNzYWdlcyAqLw0KPiA+ICsJCWlm
IChzZWdtZW50ZWQpDQo+ID4gKwkJCW4gKz0gNDsNCj4gPiArCQllbHNlDQo+ID4gKwkJCW4gKz0g
MTsNCj4gPiArDQo+ID4gKwkJbWVtY3B5KHBhY2tldCArIG4sIHBheWxvYWQsIHBheWxvYWRfbGVu
KTsNCj4gPiArDQo+ID4gKwkJbF9wdXRfYmUzMigweDAwMDAwMDAwLCBwYWNrZXQgKyBwYXlsb2Fk
X2xlbiArIG4pOw0KPiA+ICsJCWlmIChwYWNrZXRfbGVuKQ0KPiA+ICsJCQkqcGFja2V0X2xlbiA9
IHBheWxvYWRfbGVuICsgbiArIDQ7DQo+ID4gKwl9IGVsc2Ugew0KPiA+ICsJCWlmICgob3Bjb2Rl
ICYgT1BDT0RFX01BU0spICE9IG9wY29kZSkNCj4gPiArCQkJcmV0dXJuIGZhbHNlOw0KPiA+ICsN
Cj4gPiArCQloZHIgPSBvcGNvZGUgPDwgS0VZX0hEUl9TSElGVDsNCj4gPiArCQlsX3B1dF9iZTMy
KGhkciwgcGFja2V0ICsgbik7DQo+ID4gKwkJbiArPSAxOw0KPiA+ICsNCj4gPiArCQltZW1jcHko
cGFja2V0ICsgbiwgcGF5bG9hZCwgcGF5bG9hZF9sZW4pOw0KPiA+ICsJCW4gKz0gcGF5bG9hZF9s
ZW47DQo+ID4gKw0KPiA+ICsJCWxfcHV0X2JlNjQoMHgwMDAwMDAwMDAwMDAwMDAwLCBwYWNrZXQg
KyBuKTsNCj4gPiArCQlpZiAocGFja2V0X2xlbikNCj4gPiArCQkJKnBhY2tldF9sZW4gPSBuICsg
ODsNCj4gPiArCX0NCj4gPiArDQo+ID4gKw0KPiA+ICsJcmV0dXJuIHRydWU7DQo+ID4gK30NCj4g
PiArDQo+ID4gK2Jvb2wgbWVzaF9jcnlwdG9fcGFja2V0X3BhcnNlKGNvbnN0IHVpbnQ4X3QgKnBh
Y2tldCwgdWludDhfdCBwYWNrZXRfbGVuLA0KPiA+ICsJCQkJYm9vbCAqY3RsLCB1aW50OF90ICp0
dGwsIHVpbnQzMl90ICpzZXEsDQo+ID4gKwkJCQl1aW50MTZfdCAqc3JjLCB1aW50MTZfdCAqZHN0
LA0KPiA+ICsJCQkJdWludDMyX3QgKmNvb2tpZSwgdWludDhfdCAqb3Bjb2RlLA0KPiA+ICsJCQkJ
Ym9vbCAqc2VnbWVudGVkLCB1aW50OF90ICprZXlfaWQsDQo+ID4gKwkJCQlib29sICpzem1pYywg
Ym9vbCAqcmVsYXksIHVpbnQxNl90ICpzZXFaZXJvLA0KPiA+ICsJCQkJdWludDhfdCAqc2VnTywg
dWludDhfdCAqc2VnTiwNCj4gPiArCQkJCWNvbnN0IHVpbnQ4X3QgKipwYXlsb2FkLCB1aW50OF90
ICpwYXlsb2FkX2xlbikNCj4gPiArew0KPiA+ICsJdWludDMyX3QgaGRyOw0KPiA+ICsJdWludDE2
X3QgdGhpc19kc3Q7DQo+ID4gKwlib29sIGlzX3NlZ21lbnRlZDsNCj4gPiArDQo+ID4gKwlpZiAo
cGFja2V0X2xlbiA8IDE0KQ0KPiA+ICsJCXJldHVybiBmYWxzZTsNCj4gPiArDQo+ID4gKwl0aGlz
X2RzdCA9IGxfZ2V0X2JlMTYocGFja2V0ICsgNyk7DQo+ID4gKw0KPiA+ICsJLyogVHJ5IHRvIGtl
ZXAgYml0cyBpbiB0aGUgb3JkZXIgdGhleSBleGlzdCB3aXRoaW4gdGhlIHBhY2tldCAqLw0KPiA+
ICsJaWYgKGN0bCkNCj4gPiArCQkqY3RsID0gISEocGFja2V0WzFdICYgQ1RMKTsNCj4gPiArDQo+
ID4gKwlpZiAodHRsKQ0KPiA+ICsJCSp0dGwgPSBwYWNrZXRbMV0gJiBUVExfTUFTSzsNCj4gPiAr
DQo+ID4gKwlpZiAoc2VxKQ0KPiA+ICsJCSpzZXEgPSBsX2dldF9iZTMyKHBhY2tldCArIDEpICYg
U0VRX01BU0s7DQo+ID4gKw0KPiA+ICsJaWYgKHNyYykNCj4gPiArCQkqc3JjID0gbF9nZXRfYmUx
NihwYWNrZXQgKyA1KTsNCj4gPiArDQo+ID4gKwlpZiAoZHN0KQ0KPiA+ICsJCSpkc3QgPSB0aGlz
X2RzdDsNCj4gPiArDQo+ID4gKwloZHIgPSBsX2dldF9iZTMyKHBhY2tldCArIDkpOw0KPiA+ICsN
Cj4gPiArCWlzX3NlZ21lbnRlZCA9ICEhKChoZHIgPj4gU0VHX0hEUl9TSElGVCkgJiB0cnVlKTsN
Cj4gPiArCWlmIChzZWdtZW50ZWQpDQo+ID4gKwkJKnNlZ21lbnRlZCA9IGlzX3NlZ21lbnRlZDsN
Cj4gPiArDQo+ID4gKwlpZiAocGFja2V0WzFdICYgQ1RMKSB7DQo+ID4gKwkJdWludDhfdCB0aGlz
X29wY29kZSA9IHBhY2tldFs5XSAmIE9QQ09ERV9NQVNLOw0KPiA+ICsNCj4gPiArCQlpZiAoY29v
a2llKQ0KPiA+ICsJCQkqY29va2llID0gbF9nZXRfYmUzMihwYWNrZXQgKyA5KTsNCj4gPiArDQo+
ID4gKwkJaWYgKG9wY29kZSkNCj4gPiArCQkJKm9wY29kZSA9IHRoaXNfb3Bjb2RlOw0KPiA+ICsN
Cj4gPiArCQlpZiAodGhpc19kc3QgJiYgdGhpc19vcGNvZGUgPT0gTkVUX09QX1NFR19BQ0tOT1dM
RURHRSkgew0KPiA+ICsJCQlpZiAocmVsYXkpDQo+ID4gKwkJCQkqcmVsYXkgPSAhISgoaGRyID4+
IFJFTEFZX0hEUl9TSElGVCkgJiB0cnVlKTsNCj4gPiArDQo+ID4gKwkJCWlmIChzZXFaZXJvKQ0K
PiA+ICsJCQkJKnNlcVplcm8gPSAoaGRyID4+IFNFUV9aRVJPX0hEUl9TSElGVCkgJg0KPiA+ICsJ
CQkJCQkJCVNFUV9aRVJPX01BU0s7DQo+ID4gKw0KPiA+ICsJCQlpZiAocGF5bG9hZCkNCj4gPiAr
CQkJCSpwYXlsb2FkID0gcGFja2V0ICsgOTsNCj4gPiArDQo+ID4gKwkJCWlmIChwYXlsb2FkX2xl
bikNCj4gPiArCQkJCSpwYXlsb2FkX2xlbiA9IHBhY2tldF9sZW4gLSA5IC0gODsNCj4gPiArCQl9
IGVsc2Ugew0KPiA+ICsJCQlpZiAocGF5bG9hZCkNCj4gPiArCQkJCSpwYXlsb2FkID0gcGFja2V0
ICsgMTA7DQo+ID4gKw0KPiA+ICsJCQlpZiAocGF5bG9hZF9sZW4pDQo+ID4gKwkJCQkqcGF5bG9h
ZF9sZW4gPSBwYWNrZXRfbGVuIC0gMTAgLSA4Ow0KPiA+ICsJCX0NCj4gPiArCX0gZWxzZSB7DQo+
ID4gKwkJaWYgKGNvb2tpZSkNCj4gPiArCQkJKmNvb2tpZSA9IGxfZ2V0X2JlMzIocGFja2V0ICsg
cGFja2V0X2xlbiAtIDgpOw0KPiA+ICsNCj4gPiArCQlpZiAoa2V5X2lkKQ0KPiA+ICsJCQkqa2V5
X2lkID0gKGhkciA+PiBLRVlfSERSX1NISUZUKSAmIEtFWV9JRF9NQVNLOw0KPiA+ICsNCj4gPiAr
CQlpZiAoaXNfc2VnbWVudGVkKSB7DQo+ID4gKwkJCWlmIChzem1pYykNCj4gPiArCQkJCSpzem1p
YyA9ICEhKChoZHIgPj4gU1pNSUNfSERSX1NISUZUKSAmIHRydWUpOw0KPiA+ICsNCj4gPiArCQkJ
aWYgKHNlcVplcm8pDQo+ID4gKwkJCQkqc2VxWmVybyA9IChoZHIgPj4gU0VRX1pFUk9fSERSX1NI
SUZUKSAmDQo+ID4gKwkJCQkJCQkJU0VRX1pFUk9fTUFTSzsNCj4gPiArDQo+ID4gKwkJCWlmIChz
ZWdPKQ0KPiA+ICsJCQkJKnNlZ08gPSAoaGRyID4+IFNFR09fSERSX1NISUZUKSAmIFNFR19NQVNL
Ow0KPiA+ICsNCj4gPiArCQkJaWYgKHNlZ04pDQo+ID4gKwkJCQkqc2VnTiA9IChoZHIgPj4gU0VH
Tl9IRFJfU0hJRlQpICYgU0VHX01BU0s7DQo+ID4gKw0KPiA+ICsJCQlpZiAocGF5bG9hZCkNCj4g
PiArCQkJCSpwYXlsb2FkID0gcGFja2V0ICsgMTM7DQo+ID4gKw0KPiA+ICsJCQlpZiAocGF5bG9h
ZF9sZW4pDQo+ID4gKwkJCQkqcGF5bG9hZF9sZW4gPSBwYWNrZXRfbGVuIC0gMTMgLSA0Ow0KPiA+
ICsJCX0gZWxzZSB7DQo+ID4gKwkJCWlmIChwYXlsb2FkKQ0KPiA+ICsJCQkJKnBheWxvYWQgPSBw
YWNrZXQgKyAxMDsNCj4gPiArDQo+ID4gKwkJCWlmIChwYXlsb2FkX2xlbikNCj4gPiArCQkJCSpw
YXlsb2FkX2xlbiA9IHBhY2tldF9sZW4gLSAxMCAtIDQ7DQo+ID4gKwkJfQ0KPiA+ICsJfQ0KPiA+
ICsNCj4gPiArCXJldHVybiB0cnVlOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtib29sIG1lc2hfY3J5
cHRvX3BheWxvYWRfZW5jcnlwdCh1aW50OF90ICphYWQsIGNvbnN0IHVpbnQ4X3QgKnBheWxvYWQs
DQo+ID4gKwkJCQl1aW50OF90ICpvdXQsIHVpbnQxNl90IHBheWxvYWRfbGVuLA0KPiA+ICsJCQkJ
dWludDE2X3Qgc3JjLCB1aW50MTZfdCBkc3QsIHVpbnQ4X3Qga2V5X2lkLA0KPiA+ICsJCQkJdWlu
dDMyX3Qgc2VxX251bSwgdWludDMyX3QgaXZfaW5kZXgsDQo+ID4gKwkJCQlib29sIGFzem1pYywN
Cj4gPiArCQkJCWNvbnN0IHVpbnQ4X3QgYXBwbGljYXRpb25fa2V5WzE2XSkNCj4gPiArew0KPiA+
ICsJdWludDhfdCBhcHBsaWNhdGlvbl9ub25jZVsxM10gPSB7IDB4MDEsIH07DQo+ID4gKw0KPiA+
ICsJaWYgKHBheWxvYWRfbGVuIDwgMSkNCj4gPiArCQlyZXR1cm4gZmFsc2U7DQo+ID4gKw0KPiA+
ICsJLyogS2V5X0lEID09IDAgbWVhbnMgdGhlIERldmljZSBLZXkgaXMgYmVpbmcgdXNlZCAqLw0K
PiA+ICsJaWYgKCFrZXlfaWQpDQo+ID4gKwkJYXBwbGljYXRpb25fbm9uY2VbMF0gPSAweDAyOw0K
PiA+ICsNCj4gPiArCS8qIFNlcSBOdW0gKi8NCj4gPiArCWxfcHV0X2JlMzIoc2VxX251bSwgYXBw
bGljYXRpb25fbm9uY2UgKyAxKTsNCj4gPiArDQo+ID4gKwkvKiBBU1pNSUMgKi8NCj4gPiArCWFw
cGxpY2F0aW9uX25vbmNlWzFdIHw9IGFzem1pYyA/IDB4ODAgOiAweDAwOw0KPiA+ICsNCj4gPiAr
CS8qIFNSQyAqLw0KPiA+ICsJbF9wdXRfYmUxNihzcmMsIGFwcGxpY2F0aW9uX25vbmNlICsgNSk7
DQo+ID4gKw0KPiA+ICsJLyogRFNUICovDQo+ID4gKwlsX3B1dF9iZTE2KGRzdCwgYXBwbGljYXRp
b25fbm9uY2UgKyA3KTsNCj4gPiArDQo+ID4gKwkvKiBJViBJbmRleCAqLw0KPiA+ICsJbF9wdXRf
YmUzMihpdl9pbmRleCwgYXBwbGljYXRpb25fbm9uY2UgKyA5KTsNCj4gPiArDQo+ID4gKwkvKiBw
cmludF9wYWNrZXQoIkFBRCIsIGFhZCwgYWFkID8gMTYgOiAwKTsgKi8NCj4gPiArCS8qIHByaW50
X3BhY2tldCgiTm9uY2UiLCBhcHBsaWNhdGlvbl9ub25jZSwgMTMpOyAqLw0KPiA+ICsJLyogcHJp
bnRfcGFja2V0KCJLZXkiLCBhcHBsaWNhdGlvbl9rZXksIDE2KTsgKi8NCj4gPiArCS8qIHByaW50
X3BhY2tldCgiUGF5bG9hZFtjbHJdIiwgcGF5bG9hZCwgcGF5bG9hZF9sZW4pOyAqLw0KPiA+ICsN
Cj4gPiArCWlmICghbWVzaF9jcnlwdG9fYWVzX2NjbV9lbmNyeXB0KGFwcGxpY2F0aW9uX25vbmNl
LCBhcHBsaWNhdGlvbl9rZXksDQo+ID4gKwkJCQkJYWFkLCBhYWQgPyAxNiA6IDAsDQo+ID4gKwkJ
CQkJcGF5bG9hZCwgcGF5bG9hZF9sZW4sDQo+ID4gKwkJCQkJb3V0LCBOVUxMLA0KPiA+ICsJCQkJ
CWFzem1pYyA/IDggOiA0KSkNCj4gPiArCQlyZXR1cm4gZmFsc2U7DQo+ID4gKw0KPiA+ICsJLyog
cHJpbnRfcGFja2V0KCJQYXlsb2FkW2VuY10iLCBvdXQsIHBheWxvYWRfbGVuICsgKGFzem1pYyA/
IDggOiA0KSk7ICovDQo+ID4gKw0KPiA+ICsJcmV0dXJuIHRydWU7DQo+ID4gK30NCj4gPiArDQo+
ID4gK2Jvb2wgbWVzaF9jcnlwdG9fcGF5bG9hZF9kZWNyeXB0KHVpbnQ4X3QgKmFhZCwgdWludDE2
X3QgYWFkX2xlbiwNCj4gPiArCQkJCWNvbnN0IHVpbnQ4X3QgKnBheWxvYWQsIHVpbnQxNl90IHBh
eWxvYWRfbGVuLA0KPiA+ICsJCQkJYm9vbCBzem1pY3QsDQo+ID4gKwkJCQl1aW50MTZfdCBzcmMs
IHVpbnQxNl90IGRzdCwNCj4gPiArCQkJCXVpbnQ4X3Qga2V5X2lkLCB1aW50MzJfdCBzZXFfbnVt
LA0KPiA+ICsJCQkJdWludDMyX3QgaXZfaW5kZXgsIHVpbnQ4X3QgKm91dCwNCj4gPiArCQkJCWNv
bnN0IHVpbnQ4X3QgYXBwX2tleVsxNl0pDQo+ID4gK3sNCj4gPiArCXVpbnQ4X3QgYXBwX25vbmNl
WzEzXSA9IHsgMHgwMSwgfTsNCj4gPiArCXVpbnQzMl90IG1pYzMyOw0KPiA+ICsJdWludDY0X3Qg
bWljNjQ7DQo+ID4gKw0KPiA+ICsJaWYgKHBheWxvYWRfbGVuIDwgNSB8fCAhb3V0KQ0KPiA+ICsJ
CXJldHVybiBmYWxzZTsNCj4gPiArDQo+ID4gKwkvKiBLZXlfSUQgPT0gMCBtZWFucyB0aGUgRGV2
aWNlIEtleSBpcyBiZWluZyB1c2VkICovDQo+ID4gKwlpZiAoIWtleV9pZCkNCj4gPiArCQlhcHBf
bm9uY2VbMF0gPSAweDAyOw0KPiA+ICsNCj4gPiArCS8qIFNlcSBOdW0gKi8NCj4gPiArCWxfcHV0
X2JlMzIoc2VxX251bSwgYXBwX25vbmNlICsgMSk7DQo+ID4gKw0KPiA+ICsJLyogQVNaTUlDICov
DQo+ID4gKwlhcHBfbm9uY2VbMV0gfD0gc3ptaWN0ID8gMHg4MCA6IDB4MDA7DQo+ID4gKw0KPiA+
ICsJLyogU1JDICovDQo+ID4gKwlsX3B1dF9iZTE2KHNyYywgYXBwX25vbmNlICsgNSk7DQo+ID4g
Kw0KPiA+ICsJLyogRFNUICovDQo+ID4gKwlsX3B1dF9iZTE2KGRzdCwgYXBwX25vbmNlICsgNyk7
DQo+ID4gKw0KPiA+ICsJLyogSVYgSW5kZXggKi8NCj4gPiArCWxfcHV0X2JlMzIoaXZfaW5kZXgs
IGFwcF9ub25jZSArIDkpOw0KPiA+ICsNCj4gPiArCW1lbWNweShvdXQsIHBheWxvYWQsIHBheWxv
YWRfbGVuKTsNCj4gPiArDQo+ID4gKwkvKiBwcmludF9wYWNrZXQoIkFBRCIsIGFhZCwgYWFkX2xl
bik7ICovDQo+ID4gKwkvKiBwcmludF9wYWNrZXQoIk5vbmNlIiwgYXBwX25vbmNlLCAxMyk7ICov
DQo+ID4gKwkvKiBwcmludF9wYWNrZXQoIktleSIsIGFwcF9rZXksIDE2KTsgKi8NCj4gPiArCS8q
IHByaW50X3BhY2tldCgiUGF5bG9hZFtlbmNdIiwgcGF5bG9hZCwgcGF5bG9hZF9sZW4pOyAqLw0K
PiA+ICsNCj4gPiArCWlmIChzem1pY3QpIHsNCj4gPiArCQlpZiAoIW1lc2hfY3J5cHRvX2Flc19j
Y21fZGVjcnlwdChhcHBfbm9uY2UsIGFwcF9rZXksDQo+ID4gKwkJCQkJYWFkLCBhYWRfbGVuLA0K
PiA+ICsJCQkJCXBheWxvYWQsIHBheWxvYWRfbGVuLA0KPiA+ICsJCQkJCW91dCwgJm1pYzY0LCBz
aXplb2YobWljNjQpKSkNCj4gPiArCQkJcmV0dXJuIGZhbHNlOw0KPiA+ICsNCj4gPiArCQltaWM2
NCBePSBsX2dldF9iZTY0KG91dCArIHBheWxvYWRfbGVuIC0gOCk7DQo+ID4gKwkJbF9wdXRfYmU2
NChtaWM2NCwgb3V0ICsgcGF5bG9hZF9sZW4gLSA4KTsNCj4gPiArDQo+ID4gKwkJLyogcHJpbnRf
cGFja2V0KCJQYXlsb2FkW2Nscl0iLCBvdXQsIHBheWxvYWRfbGVuIC0gOCk7ICovDQo+ID4gKw0K
PiA+ICsJCWlmIChtaWM2NCkNCj4gPiArCQkJcmV0dXJuIGZhbHNlOw0KPiA+ICsJfSBlbHNlIHsN
Cj4gPiArCQlpZiAoIW1lc2hfY3J5cHRvX2Flc19jY21fZGVjcnlwdChhcHBfbm9uY2UsIGFwcF9r
ZXksDQo+ID4gKwkJCQkJYWFkLCBhYWRfbGVuLA0KPiA+ICsJCQkJCXBheWxvYWQsIHBheWxvYWRf
bGVuLA0KPiA+ICsJCQkJCW91dCwgJm1pYzMyLCBzaXplb2YobWljMzIpKSkNCj4gPiArCQkJcmV0
dXJuIGZhbHNlOw0KPiA+ICsNCj4gPiArCQltaWMzMiBePSBsX2dldF9iZTMyKG91dCArIHBheWxv
YWRfbGVuIC0gNCk7DQo+ID4gKwkJbF9wdXRfYmUzMihtaWMzMiwgb3V0ICsgcGF5bG9hZF9sZW4g
LSA0KTsNCj4gPiArDQo+ID4gKwkJLyogcHJpbnRfcGFja2V0KCJQYXlsb2FkW2Nscl0iLCBvdXQs
IHBheWxvYWRfbGVuIC0gNCk7ICovDQo+ID4gKw0KPiA+ICsJCWlmIChtaWMzMikNCj4gPiArCQkJ
cmV0dXJuIGZhbHNlOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXJldHVybiB0cnVlOw0KPiA+ICt9
DQo+ID4gKw0KPiA+ICtib29sIG1lc2hfY3J5cHRvX3BhY2tldF9lbmNvZGUodWludDhfdCAqcGFj
a2V0LCB1aW50OF90IHBhY2tldF9sZW4sDQo+ID4gKwkJCQljb25zdCB1aW50OF90IG5ldHdvcmtf
a2V5WzE2XSwNCj4gPiArCQkJCXVpbnQzMl90IGl2X2luZGV4LA0KPiA+ICsJCQkJY29uc3QgdWlu
dDhfdCBwcml2YWN5X2tleVsxNl0pDQo+ID4gK3sNCj4gPiArCXVpbnQ4X3QgbmV0d29ya19ub25j
ZVsxM10gPSB7IDB4MDAsIDB4MDAgfTsNCj4gPiArCXVpbnQ4X3QgcHJpdmFjeV9jb3VudGVyWzE2
XSA9IHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgfTsNCj4gPiArCXVpbnQ4X3QgdG1w
WzE2XTsNCj4gPiArCWludCBpOw0KPiA+ICsNCj4gPiArCWlmIChwYWNrZXRfbGVuIDwgMTQpDQo+
ID4gKwkJcmV0dXJuIGZhbHNlOw0KPiA+ICsNCj4gPiArCS8qIERldGVjdCBQcm94eSBwYWNrZXQg
YnkgQ1RMID09IHRydWUgJiYgRFNUID09IDB4MDAwMCAqLw0KPiA+ICsJaWYgKChwYWNrZXRbMV0g
JiBDVEwpICYmIGxfZ2V0X2JlMTYocGFja2V0ICsgNykgPT0gMCkNCj4gPiArCQluZXR3b3JrX25v
bmNlWzBdID0gMHgwMzsgLyogIFByb3h5IE5vbmNlICovDQo+ID4gKwllbHNlDQo+ID4gKwkJLyog
Q1RMICsgVFRMICovDQo+ID4gKwkJbmV0d29ya19ub25jZVsxXSA9IHBhY2tldFsxXTsNCj4gPiAr
DQo+ID4gKwkvKiBTZXEgTnVtICovDQo+ID4gKwluZXR3b3JrX25vbmNlWzJdID0gcGFja2V0WzJd
Ow0KPiA+ICsJbmV0d29ya19ub25jZVszXSA9IHBhY2tldFszXTsNCj4gPiArCW5ldHdvcmtfbm9u
Y2VbNF0gPSBwYWNrZXRbNF07DQo+ID4gKw0KPiA+ICsJLyogU1JDICovDQo+ID4gKwluZXR3b3Jr
X25vbmNlWzVdID0gcGFja2V0WzVdOw0KPiA+ICsJbmV0d29ya19ub25jZVs2XSA9IHBhY2tldFs2
XTsNCj4gPiArDQo+ID4gKwkvKiBEU1Qgbm90IGF2YWlsYWJsZSAqLw0KPiA+ICsJbmV0d29ya19u
b25jZVs3XSA9IDA7DQo+ID4gKwluZXR3b3JrX25vbmNlWzhdID0gMDsNCj4gPiArDQo+ID4gKwkv
KiBJViBJbmRleCAqLw0KPiA+ICsJbF9wdXRfYmUzMihpdl9pbmRleCwgbmV0d29ya19ub25jZSAr
IDkpOw0KPiA+ICsNCj4gPiArCS8qIHByaW50X3BhY2tldCgiTmV0LU5vbmNlIiwgbmV0d29ya19u
b25jZSwgMTMpOyAqLw0KPiA+ICsJLyogcHJpbnRfcGFja2V0KCJOZXQtS2V5IiwgbmV0d29ya19r
ZXksIDE2KTsgKi8NCj4gPiArCS8qIHByaW50X3BhY2tldCgiTmV0LVBheWxvYWRbY2xyXSIsIHBh
Y2tldCwgcGFja2V0X2xlbik7ICovDQo+ID4gKw0KPiA+ICsJLyogQ2hlY2sgZm9yIExvbmcgbmV0
LU1JQyAqLw0KPiA+ICsJaWYgKHBhY2tldFsxXSAmIENUTCkgew0KPiA+ICsJCWlmICghbWVzaF9j
cnlwdG9fYWVzX2NjbV9lbmNyeXB0KG5ldHdvcmtfbm9uY2UsIG5ldHdvcmtfa2V5LA0KPiA+ICsJ
CQkJCU5VTEwsIDAsDQo+ID4gKwkJCQkJcGFja2V0ICsgNywgcGFja2V0X2xlbiAtIDcgLSA4LA0K
PiA+ICsJCQkJCXBhY2tldCArIDcsIE5VTEwsIHNpemVvZih1aW50NjRfdCkpKQ0KPiA+ICsJCQly
ZXR1cm4gZmFsc2U7DQo+ID4gKwl9IGVsc2Ugew0KPiA+ICsJCWlmICghbWVzaF9jcnlwdG9fYWVz
X2NjbV9lbmNyeXB0KG5ldHdvcmtfbm9uY2UsIG5ldHdvcmtfa2V5LA0KPiA+ICsJCQkJCU5VTEws
IDAsDQo+ID4gKwkJCQkJcGFja2V0ICsgNywgcGFja2V0X2xlbiAtIDcgLSA0LA0KPiA+ICsJCQkJ
CXBhY2tldCArIDcsIE5VTEwsIHNpemVvZih1aW50MzJfdCkpKQ0KPiA+ICsJCQlyZXR1cm4gZmFs
c2U7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJLyogcHJpbnRfcGFja2V0KCJOZXQtUGF5bG9hZFtl
bmNdIiwgcGFja2V0LCBwYWNrZXRfbGVuKTsgKi8NCj4gPiArDQo+ID4gKwlsX3B1dF9iZTMyKGl2
X2luZGV4LCBwcml2YWN5X2NvdW50ZXIgKyA1KTsNCj4gPiArCW1lbWNweShwcml2YWN5X2NvdW50
ZXIgKyA5LCBwYWNrZXQgKyA3LCA3KTsNCj4gPiArDQo+ID4gKwkvKiBwcmludF9wYWNrZXQoIlBy
aXYtUmFuZG9tIiwgcHJpdmFjeV9jb3VudGVyLCAxNik7ICovDQo+ID4gKw0KPiA+ICsJLyogcHJp
bnRfcGFja2V0KCJQcml2LUtleSIsIHByaXZhY3lfa2V5LCAxNik7ICovDQo+ID4gKw0KPiA+ICsN
Cj4gPiArCWlmICghYWVzX2VjYl9vbmUocHJpdmFjeV9rZXksIHByaXZhY3lfY291bnRlciwgdG1w
KSkNCj4gPiArCQlyZXR1cm4gZmFsc2U7DQo+ID4gKw0KPiA+ICsJZm9yIChpID0gMDsgaSA8IDY7
IGkrKykNCj4gPiArCQlwYWNrZXRbMSArIGldIF49IHRtcFtpXTsNCj4gPiArDQo+ID4gKwkvKiBw
cmludF9wYWNrZXQoIk5ldC1Qcml2YXRlIiwgcGFja2V0LCBwYWNrZXRfbGVuKTsgKi8NCj4gPiAr
DQo+ID4gKwlyZXR1cm4gdHJ1ZTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArYm9vbCBtZXNoX2NyeXB0
b19wYWNrZXRfZGVjb2RlKGNvbnN0IHVpbnQ4X3QgKnBhY2tldCwgdWludDhfdCBwYWNrZXRfbGVu
LA0KPiA+ICsJCQkJYm9vbCBwcm94eSwgdWludDhfdCAqb3V0LCB1aW50MzJfdCBpdl9pbmRleCwN
Cj4gPiArCQkJCWNvbnN0IHVpbnQ4X3QgbmV0d29ya19rZXlbMTZdLA0KPiA+ICsJCQkJY29uc3Qg
dWludDhfdCBwcml2YWN5X2tleVsxNl0pDQo+ID4gK3sNCj4gPiArCXVpbnQ4X3QgcHJpdmFjeV9j
b3VudGVyWzE2XSA9IHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgfTsNCj4gPiArCXVp
bnQ4X3QgbmV0d29ya19ub25jZVsxM10gPSB7IDB4MDAsIDB4MDAsIH07DQo+ID4gKwl1aW50OF90
IHRtcFsxNl07DQo+ID4gKwl1aW50MTZfdCBzcmM7DQo+ID4gKwlpbnQgaTsNCj4gPiArDQo+ID4g
KwlpZiAocGFja2V0X2xlbiA8IDE0KQ0KPiA+ICsJCXJldHVybiBmYWxzZTsNCj4gPiArDQo+ID4g
KwkvKiBwcmludF9wYWNrZXQoIlByaXYtS2V5IiwgcHJpdmFjeV9rZXksIDE2KTsgKi8NCj4gPiAr
DQo+ID4gKwlsX3B1dF9iZTMyKGl2X2luZGV4LCBwcml2YWN5X2NvdW50ZXIgKyA1KTsNCj4gPiAr
CW1lbWNweShwcml2YWN5X2NvdW50ZXIgKyA5LCBwYWNrZXQgKyA3LCA3KTsNCj4gPiArDQo+ID4g
KwkvKiBwcmludF9wYWNrZXQoIlByaXYtUmFuZG9tIiwgcHJpdmFjeV9jb3VudGVyLCAxNik7ICov
DQo+ID4gKw0KPiA+ICsJaWYgKCFhZXNfZWNiX29uZShwcml2YWN5X2tleSwgcHJpdmFjeV9jb3Vu
dGVyLCB0bXApKQ0KPiA+ICsJCXJldHVybiBmYWxzZTsNCj4gPiArDQo+ID4gKwltZW1jcHkob3V0
LCBwYWNrZXQsIHBhY2tldF9sZW4pOw0KPiA+ICsJZm9yIChpID0gMDsgaSA8IDY7IGkrKykNCj4g
PiArCQlvdXRbMSArIGldIF49IHRtcFtpXTsNCj4gPiArDQo+ID4gKwlzcmMgID0gbF9nZXRfYmUx
NihvdXQgKyA1KTsNCj4gPiArDQo+ID4gKwkvKiBQcmUtY2hlY2sgU1JDIGFkZHJlc3MgZm9yIGls
bGVnYWwgdmFsdWVzICovDQo+ID4gKwlpZiAoIXNyYyB8fCBzcmMgPj0gMHg4MDAwKQ0KPiA+ICsJ
CXJldHVybiBmYWxzZTsNCj4gPiArDQo+ID4gKwkvKiBEZXRlY3QgUHJveHkgcGFja2V0IGJ5IENU
TCA9PSB0cnVlICYmIHByb3h5ID09IHRydWUgKi8NCj4gPiArCWlmICgob3V0WzFdICYgQ1RMKSAm
JiBwcm94eSkNCj4gPiArCQluZXR3b3JrX25vbmNlWzBdID0gMHgwMzsgLyogIFByb3h5IE5vbmNl
ICovDQo+ID4gKwllbHNlDQo+ID4gKwkJLyogQ1RMICsgVFRMICovDQo+ID4gKwkJbmV0d29ya19u
b25jZVsxXSA9IG91dFsxXTsNCj4gPiArDQo+ID4gKwkvKiBTZXEgTnVtICovDQo+ID4gKwluZXR3
b3JrX25vbmNlWzJdID0gb3V0WzJdOw0KPiA+ICsJbmV0d29ya19ub25jZVszXSA9IG91dFszXTsN
Cj4gPiArCW5ldHdvcmtfbm9uY2VbNF0gPSBvdXRbNF07DQo+ID4gKw0KPiA+ICsJLyogU1JDICov
DQo+ID4gKwluZXR3b3JrX25vbmNlWzVdID0gb3V0WzVdOw0KPiA+ICsJbmV0d29ya19ub25jZVs2
XSA9IG91dFs2XTsNCj4gPiArDQo+ID4gKwkvKiBEU1Qgbm90IGF2YWlsYWJsZSAqLw0KPiA+ICsJ
bmV0d29ya19ub25jZVs3XSA9IDA7DQo+ID4gKwluZXR3b3JrX25vbmNlWzhdID0gMDsNCj4gPiAr
DQo+ID4gKwkvKiBJViBJbmRleCAqLw0KPiA+ICsJbF9wdXRfYmUzMihpdl9pbmRleCwgbmV0d29y
a19ub25jZSArIDkpOw0KPiA+ICsNCj4gPiArCS8qIHByaW50X3BhY2tldCgiTmV0LU5vbmNlIiwg
bmV0d29ya19ub25jZSwgMTMpOyAqLw0KPiA+ICsJLyogcHJpbnRfcGFja2V0KCJOZXQtS2V5Iiwg
bmV0d29ya19rZXksIDE2KTsgKi8NCj4gPiArCS8qIHByaW50X3BhY2tldCgiTmV0LVBrdFtlbmNd
Iiwgb3V0LCBwYWNrZXRfbGVuKTsgKi8NCj4gPiArDQo+ID4gKwkvKiBDaGVjayBmb3IgTG9uZyBN
SUMgKi8NCj4gPiArCWlmIChvdXRbMV0gJiBDVEwpIHsNCj4gPiArCQl1aW50NjRfdCBtaWM7DQo+
ID4gKw0KPiA+ICsJCWlmICghbWVzaF9jcnlwdG9fYWVzX2NjbV9kZWNyeXB0KG5ldHdvcmtfbm9u
Y2UsIG5ldHdvcmtfa2V5LA0KPiA+ICsJCQkJCU5VTEwsIDAsIHBhY2tldCArIDcsIHBhY2tldF9s
ZW4gLSA3LA0KPiA+ICsJCQkJCW91dCArIDcsICZtaWMsIHNpemVvZihtaWMpKSkNCj4gPiArCQkJ
cmV0dXJuIGZhbHNlOw0KPiA+ICsNCj4gPiArCQltaWMgXj0gbF9nZXRfYmU2NChvdXQgKyBwYWNr
ZXRfbGVuIC0gOCk7DQo+ID4gKwkJbF9wdXRfYmU2NChtaWMsIG91dCArIHBhY2tldF9sZW4gLSA4
KTsNCj4gPiArDQo+ID4gKwkJaWYgKG1pYykNCj4gPiArCQkJcmV0dXJuIGZhbHNlOw0KPiA+ICsJ
fSBlbHNlIHsNCj4gPiArCQl1aW50MzJfdCBtaWM7DQo+ID4gKw0KPiA+ICsJCWlmICghbWVzaF9j
cnlwdG9fYWVzX2NjbV9kZWNyeXB0KG5ldHdvcmtfbm9uY2UsIG5ldHdvcmtfa2V5LA0KPiA+ICsJ
CQkJCU5VTEwsIDAsIHBhY2tldCArIDcsIHBhY2tldF9sZW4gLSA3LA0KPiA+ICsJCQkJCW91dCAr
IDcsICZtaWMsIHNpemVvZihtaWMpKSkNCj4gPiArCQkJcmV0dXJuIGZhbHNlOw0KPiA+ICsNCj4g
PiArCQltaWMgXj0gbF9nZXRfYmUzMihvdXQgKyBwYWNrZXRfbGVuIC0gNCk7DQo+ID4gKwkJbF9w
dXRfYmUzMihtaWMsIG91dCArIHBhY2tldF9sZW4gLSA0KTsNCj4gPiArDQo+ID4gKwkJaWYgKG1p
YykNCj4gPiArCQkJcmV0dXJuIGZhbHNlOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCS8qIHByaW50
X3BhY2tldCgiTmV0LVBrdFtjbHJdIiwgb3V0LCBwYWNrZXRfbGVuKTsgKi8NCj4gPiArDQo+ID4g
KwlyZXR1cm4gdHJ1ZTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArYm9vbCBtZXNoX2NyeXB0b19wYWNr
ZXRfbGFiZWwodWludDhfdCAqcGFja2V0LCB1aW50OF90IHBhY2tldF9sZW4sDQo+ID4gKwkJCQl1
aW50MTZfdCBpdl9pbmRleCwgdWludDhfdCBuZXR3b3JrX2lkKQ0KPiA+ICt7DQo+ID4gKwlwYWNr
ZXRbMF0gPSAoaXZfaW5kZXggJiAweDAwMDEpIDw8IDcgfCAobmV0d29ya19pZCAmIDB4N2YpOw0K
PiA+ICsNCj4gPiArCXJldHVybiB0cnVlOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKiByZXZlcnNl
ZCwgOC1iaXQsIHBvbHk9MHgwNyAqLw0KPiA+ICtzdGF0aWMgY29uc3QgdWludDhfdCBjcmNfdGFi
bGVbMjU2XSA9IHsNCj4gPiArCTB4MDAsIDB4OTEsIDB4ZTMsIDB4NzIsIDB4MDcsIDB4OTYsIDB4
ZTQsIDB4NzUsDQo+ID4gKwkweDBlLCAweDlmLCAweGVkLCAweDdjLCAweDA5LCAweDk4LCAweGVh
LCAweDdiLA0KPiA+ICsJMHgxYywgMHg4ZCwgMHhmZiwgMHg2ZSwgMHgxYiwgMHg4YSwgMHhmOCwg
MHg2OSwNCj4gPiArCTB4MTIsIDB4ODMsIDB4ZjEsIDB4NjAsIDB4MTUsIDB4ODQsIDB4ZjYsIDB4
NjcsDQo+ID4gKw0KPiA+ICsJMHgzOCwgMHhhOSwgMHhkYiwgMHg0YSwgMHgzZiwgMHhhZSwgMHhk
YywgMHg0ZCwNCj4gPiArCTB4MzYsIDB4YTcsIDB4ZDUsIDB4NDQsIDB4MzEsIDB4YTAsIDB4ZDIs
IDB4NDMsDQo+ID4gKwkweDI0LCAweGI1LCAweGM3LCAweDU2LCAweDIzLCAweGIyLCAweGMwLCAw
eDUxLA0KPiA+ICsJMHgyYSwgMHhiYiwgMHhjOSwgMHg1OCwgMHgyZCwgMHhiYywgMHhjZSwgMHg1
ZiwNCj4gPiArDQo+ID4gKwkweDcwLCAweGUxLCAweDkzLCAweDAyLCAweDc3LCAweGU2LCAweDk0
LCAweDA1LA0KPiA+ICsJMHg3ZSwgMHhlZiwgMHg5ZCwgMHgwYywgMHg3OSwgMHhlOCwgMHg5YSwg
MHgwYiwNCj4gPiArCTB4NmMsIDB4ZmQsIDB4OGYsIDB4MWUsIDB4NmIsIDB4ZmEsIDB4ODgsIDB4
MTksDQo+ID4gKwkweDYyLCAweGYzLCAweDgxLCAweDEwLCAweDY1LCAweGY0LCAweDg2LCAweDE3
LA0KPiA+ICsNCj4gPiArCTB4NDgsIDB4ZDksIDB4YWIsIDB4M2EsIDB4NGYsIDB4ZGUsIDB4YWMs
IDB4M2QsDQo+ID4gKwkweDQ2LCAweGQ3LCAweGE1LCAweDM0LCAweDQxLCAweGQwLCAweGEyLCAw
eDMzLA0KPiA+ICsJMHg1NCwgMHhjNSwgMHhiNywgMHgyNiwgMHg1MywgMHhjMiwgMHhiMCwgMHgy
MSwNCj4gPiArCTB4NWEsIDB4Y2IsIDB4YjksIDB4MjgsIDB4NWQsIDB4Y2MsIDB4YmUsIDB4MmYs
DQo+ID4gKw0KPiA+ICsJMHhlMCwgMHg3MSwgMHgwMywgMHg5MiwgMHhlNywgMHg3NiwgMHgwNCwg
MHg5NSwNCj4gPiArCTB4ZWUsIDB4N2YsIDB4MGQsIDB4OWMsIDB4ZTksIDB4NzgsIDB4MGEsIDB4
OWIsDQo+ID4gKwkweGZjLCAweDZkLCAweDFmLCAweDhlLCAweGZiLCAweDZhLCAweDE4LCAweDg5
LA0KPiA+ICsJMHhmMiwgMHg2MywgMHgxMSwgMHg4MCwgMHhmNSwgMHg2NCwgMHgxNiwgMHg4NywN
Cj4gPiArDQo+ID4gKwkweGQ4LCAweDQ5LCAweDNiLCAweGFhLCAweGRmLCAweDRlLCAweDNjLCAw
eGFkLA0KPiA+ICsJMHhkNiwgMHg0NywgMHgzNSwgMHhhNCwgMHhkMSwgMHg0MCwgMHgzMiwgMHhh
MywNCj4gPiArCTB4YzQsIDB4NTUsIDB4MjcsIDB4YjYsIDB4YzMsIDB4NTIsIDB4MjAsIDB4YjEs
DQo+ID4gKwkweGNhLCAweDViLCAweDI5LCAweGI4LCAweGNkLCAweDVjLCAweDJlLCAweGJmLA0K
PiA+ICsNCj4gPiArCTB4OTAsIDB4MDEsIDB4NzMsIDB4ZTIsIDB4OTcsIDB4MDYsIDB4NzQsIDB4
ZTUsDQo+ID4gKwkweDllLCAweDBmLCAweDdkLCAweGVjLCAweDk5LCAweDA4LCAweDdhLCAweGVi
LA0KPiA+ICsJMHg4YywgMHgxZCwgMHg2ZiwgMHhmZSwgMHg4YiwgMHgxYSwgMHg2OCwgMHhmOSwN
Cj4gPiArCTB4ODIsIDB4MTMsIDB4NjEsIDB4ZjAsIDB4ODUsIDB4MTQsIDB4NjYsIDB4ZjcsDQo+
ID4gKw0KPiA+ICsJMHhhOCwgMHgzOSwgMHg0YiwgMHhkYSwgMHhhZiwgMHgzZSwgMHg0YywgMHhk
ZCwNCj4gPiArCTB4YTYsIDB4MzcsIDB4NDUsIDB4ZDQsIDB4YTEsIDB4MzAsIDB4NDIsIDB4ZDMs
DQo+ID4gKwkweGI0LCAweDI1LCAweDU3LCAweGM2LCAweGIzLCAweDIyLCAweDUwLCAweGMxLA0K
PiA+ICsJMHhiYSwgMHgyYiwgMHg1OSwgMHhjOCwgMHhiZCwgMHgyYywgMHg1ZSwgMHhjZg0KPiA+
ICt9Ow0KPiA+ICsNCj4gPiArdWludDhfdCBtZXNoX2NyeXB0b19jb21wdXRlX2Zjcyhjb25zdCB1
aW50OF90ICpwYWNrZXQsIHVpbnQ4X3QgcGFja2V0X2xlbikNCj4gPiArew0KPiA+ICsJdWludDhf
dCBmY3MgPSAweGZmOw0KPiA+ICsJaW50IGk7DQo+ID4gKw0KPiA+ICsJZm9yIChpID0gMDsgaSA8
IHBhY2tldF9sZW47IGkrKykNCj4gPiArCQlmY3MgPSBjcmNfdGFibGVbZmNzIF4gcGFja2V0W2ld
XTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gMHhmZiAtIGZjczsNCj4gPiArfQ0KPiA+ICsNCj4gPiAr
Ym9vbCBtZXNoX2NyeXB0b19jaGVja19mY3MoY29uc3QgdWludDhfdCAqcGFja2V0LCB1aW50OF90
IHBhY2tldF9sZW4sDQo+ID4gKwkJCQkJCQl1aW50OF90IHJlY2VpdmVkX2ZjcykNCj4gPiArew0K
PiA+ICsJdWludDhfdCBmY3MgPSAweGZmOw0KPiA+ICsJaW50IGk7DQo+ID4gKw0KPiA+ICsJZm9y
IChpID0gMDsgaSA8IHBhY2tldF9sZW47IGkrKykNCj4gPiArCQlmY3MgPSBjcmNfdGFibGVbZmNz
IF4gcGFja2V0W2ldXTsNCj4gPiArDQo+ID4gKwlmY3MgPSBjcmNfdGFibGVbZmNzIF4gcmVjZWl2
ZWRfZmNzXTsNCj4gPiArDQo+ID4gKwlpZiAoZmNzICE9IDB4Y2YpDQo+ID4gKwkJbF9lcnJvcigi
SU9UIFdhcm5pbmchIENSQyAlMi4yeCAhPSAweGNmIiwgZmNzKTsNCj4gDQo+IFRoaXMgb25lIGlz
IGJhZCBhcyB3ZWxsLiBUaGUgY2FsbGVyIGNhbiBwcmludCBhbiBlcnJvciBpZiBjaG9zZW4uDQo+
IA0KPiBSZWdhcmRzDQo+IA0KPiBNYXJjZWwNCj4g
next prev parent reply other threads:[~2018-07-08 15:07 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-07-06 17:12 [PATCH BlueZ v5 00/14] Bluetooth Mesh Daemon Brian Gix
2018-07-06 17:12 ` [PATCH BlueZ v5 01/14] mesh: Shared private meshd interfaces Brian Gix
2018-07-06 17:12 ` [PATCH BlueZ v5 02/14] mesh: Mesh crypto support Brian Gix
2018-07-06 18:10 ` Marcel Holtmann
2018-07-08 15:07 ` Gix, Brian [this message]
2018-07-06 17:12 ` [PATCH BlueZ v5 03/14] mesh: Infrastructure for Mesh daemon Brian Gix
2018-07-06 18:20 ` Marcel Holtmann
2018-07-08 15:05 ` Gix, Brian
2018-07-14 16:23 ` Marcel Holtmann
2018-07-06 17:12 ` [PATCH BlueZ v5 04/14] mesh: Initial Mesh Friendship support Brian Gix
2018-07-06 17:12 ` [PATCH BlueZ v5 05/14] mesh: Provisioning logic for mesh Brian Gix
2018-07-06 17:12 ` [PATCH BlueZ v5 06/14] mesh: Upper and Lower mesh transport Brian Gix
2018-07-06 17:12 ` [PATCH BlueZ v5 07/14] mesh: Add Accessors to Transport layer data Brian Gix
2018-07-06 17:13 ` [PATCH BlueZ v5 08/14] mesh: Header files for mesh access layer and utilities Brian Gix
2018-07-06 17:13 ` [PATCH BlueZ v5 09/14] mesh: Source " Brian Gix
2018-07-06 17:13 ` [PATCH BlueZ v5 10/14] mesh: Source code for handling access layer mux/demux Brian Gix
2018-07-06 17:13 ` [PATCH BlueZ v5 11/14] mesh: Mesh config server model Brian Gix
2018-07-06 17:13 ` [PATCH BlueZ v5 12/14] mesh: Read and write mesh configuration in JSON format Brian Gix
2018-07-06 17:13 ` [PATCH BlueZ v5 13/14] mesh: Sample device composition " Brian Gix
2018-07-06 17:13 ` [PATCH BlueZ v5 14/14] Makefile for meshd Brian Gix
2018-07-06 17:23 ` Marcel Holtmann
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1531062419.7346.19.camel@intel.com \
--to=brian.gix@intel.com \
--cc=inga.stotland@intel.com \
--cc=johan.hedberg@gmail.com \
--cc=linux-bluetooth@vger.kernel.org \
--cc=marcel@holtmann.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.