Re: [f2fs-dev] [PATCH v5] f2fs: support dynamic reserve/release for device aliasing

Chao Yu via Linux-f2fs-devel <[email protected]> Thu, 30 Jul 2026 14:32:23 +0800
Newsgroups net.sourceforge.lists.linux-f2fs-devel,org.kernel.vger.linux-kernel
Message-ID <[email protected]>
T24gNy8zMC8yNiAwMDo0MywgRGFlaG8gSmVvbmcgd3JvdGU6Cj4gT24gV2VkLCBKdWwgMjksIDIw
MjYgYXQgMjowOeKAr0FNIENoYW8gWXUgPGNoYW9Aa2VybmVsLm9yZz4gd3JvdGU6Cj4+Cj4+IE9u
IDcvMjQvMjYgMDQ6MjAsIERhZWhvIEplb25nIHdyb3RlOgo+Pj4gRnJvbTogRGFlaG8gSmVvbmcg
PGRhZWhvamVvbmdAZ29vZ2xlLmNvbT4KPj4+Cj4+PiBUaGlzIHBhdGNoIGFkZHMgYSBkeW5hbWlj
IG1hbmFnZW1lbnQgZmVhdHVyZSB0byB0aGUgZXhpc3RpbmcgZGV2aWNlCj4+PiBhbGlhc2luZyBm
dW5jdGlvbmFsaXR5LiBJdCBhbGxvd3MgdXNlcnMgdG8gZHluYW1pY2FsbHkgcmVzZXJ2ZSBvcgo+
Pj4gcmVsZWFzZSBzcGVjaWZpYyBkZXZpY2VzIGZyb20gdGhlIGZpbGVzeXN0ZW0ncyBmcmVlIHBv
b2wgYXQgcnVudGltZQo+Pj4gdGhyb3VnaCBuZXcgaW9jdGxzLgo+Pj4KPj4+IFRvIHN1cHBvcnQg
dGhpcywgdGhyZWUgbmV3IGlvY3RscyBhcmUgaW50cm9kdWNlZDoKPj4+IC0gRjJGU19JT0NfUkVT
RVJWRV9ERVZfQUxJQVM6IFRoaXMgcmVjbGFpbXMgdGhlIHNwYWNlIG9jY3VwaWVkIGJ5IGEKPj4+
ICAgZGV2aWNlIGFsaWFzaW5nIGZpbGUuIEl0IGZpcnN0IHBlcmZvcm1zIGEgY2FwYWNpdHkgY2hl
Y2ssIHJlc2V0cyBHQwo+Pj4gICB2aWN0aW0gaW5mb3JtYXRpb24gZm9yIHRoZSB0YXJnZXQgcmFu
Z2UsIG1hcmtzIHRoZSBzZWdtZW50cyBhcyBpbi11c2UKPj4+ICAgdG8gcHJldmVudCBuZXcgYWxs
b2NhdGlvbnMsIGFuZCB0aGVuIHRyaWdnZXJzIEdDIHRvIG1pZ3JhdGUgZXhpc3RpbmcKPj4+ICAg
dmFsaWQgZGF0YSBvdXQgb2YgdGhlIHJhbmdlLiBGaW5hbGx5LCBpdCByZXNlcnZlcyB0aGVzZSBi
bG9ja3MgaW4gdGhlCj4+PiAgIFNJVCB0byBlZmZlY3RpdmVseSBleGNsdWRlIHRoZSBkZXZpY2Ug
ZnJvbSB0aGUgdXNhYmxlIGNhcGFjaXR5Lgo+Pj4KPj4+IC0gRjJGU19JT0NfUkVMRUFTRV9ERVZf
QUxJQVM6IFRoaXMgcmVsZWFzZXMgdGhlIHJlc2VydmVkIHNwYWNlIG9mIGEKPj4+ICAgcHJldmlv
dXNseSByZXNlcnZlZCBkZXZpY2UgYWxpYXNpbmcgZmlsZS4gSXQgdHJ1bmNhdGVzIHRoZSBibG9j
a3MKPj4+ICAgYXNzb2NpYXRlZCB3aXRoIHRoZSBmaWxlLCB3aGljaCBtYWtlcyB0aGVtIGF2YWls
YWJsZSBmb3IgZ2VuZXJhbAo+Pj4gICBmaWxlc3lzdGVtIGFsbG9jYXRpb24gYWdhaW4uCj4+Pgo+
Pj4gLSBGMkZTX0lPQ19HRVRfREVWX0FMSUFTX1NUQVRVUzogVGhpcyByZXRyaWV2ZXMgdGhlIGN1
cnJlbnQgYWxpYXNpbmcKPj4+ICAgc3RhdHVzIG9mIGEgZGV2aWNlIGFsaWFzaW5nIGZpbGUsIHJl
dHVybmluZyB3aGV0aGVyIHRoZSBmaWxlIGlzCj4+PiAgIHJlbGVhc2VkIChpbmFjdGl2ZSBhbGlh
cykgb3IgcmVzZXJ2ZWQgKGFjdGl2ZSBhbGlhcywgd2l0aCBibG9ja3MKPj4+ICAgZnVsbHkgYWxs
b2NhdGVkIG9uIHRoZSBkZXZpY2UpLgo+Pj4KPj4+IFNpZ25lZC1vZmYtYnk6IERhZWhvIEplb25n
IDxkYWVob2plb25nQGdvb2dsZS5jb20+Cj4+PiAtLS0KPj4+IHY1OiBwcmV2ZW50ZWQgbmV3IHNl
Z21lbnQgYWxsb2NhdGlvbiBvbiBkZXZpY2VzIHVuZGVyZ29pbmcgcmVzZXJ2YXRpb24KPj4+ICAg
ICBvciB3aXRoIGFjdGl2ZSBhbGlhc2VzLgo+Pj4gICAgIHVzZWQgaW4tbWVtb3J5IHN0cnVjdCB0
byByZXNlcnZlIGJsb2NrcyBmb3IgZGV2aWNlIGFsaWFzaW5nLgo+Pj4gICAgIGNsZWFyZWQgcHJl
ZnJlZSAoUFJFKSBkaXJ0eSBzZWdtZW50IGJpdG1hcC4KPj4+IHY0OiByZW5hbWVkIGludGVyZmFj
ZXMuCj4+PiAgICAgZml4ZWQgcmFjZSBjb25kaXRpb25zIGJldHdlZW4gY2hlY2twb2ludD1kaXNh
YmxlIG1vdW50IGFuZCBpb2N0bHMuCj4+PiAgICAgcmVmYWN0b3JlZCBzZWdtZW50IHJlc2VydmF0
aW9uIHBhcnQuCj4+PiAgICAgbW9kaWZpZWQgbG9jayB1c2FnZS4KPj4+IHYzOiBhZGQgQ0FQX1NZ
U19BRE1JTiBhbmQgY2hlY2twb2ludD1kaXNhYmxlZCBjaGVjay4KPj4+ICAgICByZW1vdmUgYSBm
MmZzIHNwZWNpZmljIGZsYWcgZXhwb3NlZCB3aXRoIGdldGZsYWdzLgo+Pj4gdjI6IHByZXZlbnQg
b3BlcmF0aW9ucyBkdXJpbmcgY2hlY2twb2ludD1kaXNhYmxlZC4KPj4+IC0tLQo+Pj4gLS0tCj4+
PiAgRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9mMmZzLnJzdCB8ICAzNSArKysrCj4+PiAgZnMv
ZjJmcy9mMmZzLmggICAgICAgICAgICAgICAgICAgICB8ICAxMCArLQo+Pj4gIGZzL2YyZnMvZmls
ZS5jICAgICAgICAgICAgICAgICAgICAgfCAyNzggKysrKysrKysrKysrKysrKysrKysrKysrKysr
Ky0KPj4+ICBmcy9mMmZzL2djLmMgICAgICAgICAgICAgICAgICAgICAgIHwgIDMwICsrLS0KPj4+
ICBmcy9mMmZzL25hbWVpLmMgICAgICAgICAgICAgICAgICAgIHwgIDE0ICsrCj4+PiAgZnMvZjJm
cy9zZWdtZW50LmMgICAgICAgICAgICAgICAgICB8IDE3NCArKysrKysrKysrKysrLS0tLS0KPj4+
ICBmcy9mMmZzL3NlZ21lbnQuaCAgICAgICAgICAgICAgICAgIHwgIDIyICsrKwo+Pj4gIGZzL2Yy
ZnMvc3VwZXIuYyAgICAgICAgICAgICAgICAgICAgfCAgMzUgKysrKwo+Pj4gIGluY2x1ZGUvdWFw
aS9saW51eC9mMmZzLmggICAgICAgICAgfCAgIDcgKwo+Pj4gIDkgZmlsZXMgY2hhbmdlZCwgNTQy
IGluc2VydGlvbnMoKyksIDYzIGRlbGV0aW9ucygtKQo+Pj4KPj4+IGRpZmYgLS1naXQgYS9Eb2N1
bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2YyZnMucnN0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVt
cy9mMmZzLnJzdAo+Pj4gaW5kZXggOGM0YTE0YWU0NDRmLi4xYTVmZDRhZmU2MDkgMTAwNjQ0Cj4+
PiAtLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2YyZnMucnN0Cj4+PiArKysgYi9Eb2N1
bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2YyZnMucnN0Cj4+PiBAQCAtMTA0NSw2ICsxMDQ1LDQxIEBA
IFNvLCB0aGUga2V5IGlkZWEgaXMsIHVzZXIgY2FuIGRvIGFueSBmaWxlIG9wZXJhdGlvbnMgb24g
L2Rldi92ZGMsIGFuZAo+Pj4gIHJlY2xhaW0gdGhlIHNwYWNlIGFmdGVyIHRoZSB1c2UsIHdoaWxl
IHRoZSBzcGFjZSBpcyBjb3VudGVkIGFzIC9kYXRhLgo+Pj4gIFRoYXQgZG9lc24ndCByZXF1aXJl
IG1vZGlmeWluZyBwYXJ0aXRpb24gc2l6ZSBhbmQgZmlsZXN5c3RlbSBmb3JtYXQuCj4+Pgo+Pj4g
K0R5bmFtaWMgRGV2aWNlIEFsaWFzaW5nIE1hbmFnZW1lbnQKPj4+ICstLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCj4+PiArCj4+PiArSW4gYWRkaXRpb24gdG8gc3RhdGljIGRldmlj
ZSBhbGlhc2luZyBieSBkZWxldGluZyB0aGUgYWxpYXNpbmcgZmlsZSwgRjJGUwo+Pj4gK3N1cHBv
cnRzIGR5bmFtaWMgbWFuYWdlbWVudCBvZiBkZXZpY2UgYWxpYXNpbmcuIFRoaXMgbWVjaGFuaXNt
IGFsbG93cyB0aGUgc3lzdGVtCj4+PiArdG8gZHluYW1pY2FsbHkgdHJhbnNpdGlvbiBwYXJ0aXRp
b24gb3duZXJzaGlwIGJldHdlZW4gRjJGUyB1c2VyZGF0YSBhbmQgZXh0ZXJuYWwKPj4+ICtlbnRp
dGllcyAoZS5nLiwgelJBTSwgcmF3IHBhcnRpdGlvbikgYmFzZWQgb24gc3lzdGVtIHJlcXVpcmVt
ZW50cyB3aXRob3V0Cj4+PiArZGVsZXRpbmcgdGhlIG1hc3RlciBhbGlhc2luZyBmaWxlIG9yIHJl
cXVpcmluZyB1bm1vdW50L3JlbW91bnQuCj4+PiArCj4+PiArVGhlIG1hc3RlciBhbGlhc2luZyBm
aWxlIGlzIGNyZWF0ZWQgZHVyaW5nIHRoZSBpbml0aWFsIGZvcm1hdCBvZiB0aGUgZmlsZSBzeXN0
ZW0KPj4+ICthbmQgcmVtYWlucyBhcyBhIHBlcnNpc3RlbnQgY29udHJvbCBlbnRpdHkgKGlvY3Rs
IGdhdGV3YXkpIGluIHRoZSByb290IGRpcmVjdG9yeS4KPj4+ICsKPj4+ICstIFBhcnRpdGlvbiBS
ZXNlcnZhdGlvbiAoSW4tc2VydmljZSB0byBBbGlhc2VkKQo+Pj4gKyAgV2hlbiBhIHNwZWNpZmlj
IHBhcnRpdGlvbiBuZWVkcyB0byBiZSBkZWRpY2F0ZWQgdG8gZXh0ZXJuYWwgc2VydmljZXMgKGUu
Zy4sIHpSQU0pLAo+Pj4gKyAgYSB1c2VyIGNhbiByZXNlcnZlIHRoZSBkZXZpY2UgYWxpYXMgcmFu
Z2UgdmlhIGlvY3RsLiBUaGUga2VybmVsIHJlc2V0cyBHQyB2aWN0aW0KPj4+ICsgIGluZm9ybWF0
aW9uIGZvciB0aGUgdGFyZ2V0IHJhbmdlLCBtYXJrcyBzZWdtZW50cyBhcyBpbi11c2UgdG8gcHJl
dmVudCBuZXcKPj4+ICsgIGFsbG9jYXRpb25zLCBhbmQgdHJpZ2dlcnMgZm9yY2VkIEdDIHRvIG1p
Z3JhdGUgZXhpc3RpbmcgdmFsaWQgZGF0YSBvdXQgb2YgdGhlCj4+PiArICByYW5nZS4gRmluYWxs
eSwgaXQgcmVzZXJ2ZXMgdGhlc2UgYmxvY2tzIGluIHRoZSBTSVQgdG8gZWZmZWN0aXZlbHkgZXhj
bHVkZSB0aGUKPj4+ICsgIGRldmljZSBmcm9tIHRoZSB1c2FibGUgY2FwYWNpdHkuCj4+PiArCj4+
PiArLSBQYXJ0aXRpb24gUmVsZWFzZSAoQWxpYXNlZCB0byBJbi1zZXJ2aWNlKQo+Pj4gKyAgV2hl
biBleHRlcm5hbCB1c2FnZSBjb25jbHVkZXMsIHRoZSBzcGFjZSBpcyByZWNsYWltZWQgbm90IGJ5
IGRlbGV0aW5nIHRoZSBmaWxlLAo+Pj4gKyAgYnV0IHRocm91Z2ggdGhlIHJlbGVhc2UgaW9jdGwu
IFRoZSBrZXJuZWwgdHJ1bmNhdGVzIGJsb2NrcyBhc3NvY2lhdGVkIHdpdGgKPj4+ICsgIHRoZSBm
aWxlLCByZWxlYXNpbmcgdGhlbSBiYWNrIHRvIGdlbmVyYWwgZmlsZXN5c3RlbSBhbGxvY2F0aW9u
Lgo+Pj4gKwo+Pj4gKy4uIGNvZGUtYmxvY2s6Ogo+Pj4gKwo+Pj4gKyAgICMgZjJmc19pbyBkZXZf
YWxpYXMgcmVsZWFzZSAvbW50L2YyZnMvdmRjLmZpbGUKPj4+ICsgICAjIGRmIC1oCj4+PiArICAg
L2Rldi92ZGIgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjRHICA3NTNNICAgNjRHICAgMiUg
L21udC9mMmZzCj4+PiArCj4+PiArICAgIyBmMmZzX2lvIGRldl9hbGlhcyByZXNlcnZlIC9tbnQv
ZjJmcy92ZGMuZmlsZQo+Pj4gKyAgICMgZGYgLWgKPj4+ICsgICAvZGV2L3ZkYiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA2NEcgICAzM0cgICAzMkcgIDUyJSAvbW50L2YyZnMKPj4+ICsKPj4+
ICBQZXItZmlsZSBSZWFkLU9ubHkgTGFyZ2UgRm9saW8gU3VwcG9ydAo+Pj4gIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4+Pgo+Pj4gZGlmZiAtLWdpdCBhL2ZzL2YyZnMv
ZjJmcy5oIGIvZnMvZjJmcy9mMmZzLmgKPj4+IGluZGV4IGYxNzc0ZDRlMThkMi4uNzRjMmQ1OGNl
MjcxIDEwMDY0NAo+Pj4gLS0tIGEvZnMvZjJmcy9mMmZzLmgKPj4+ICsrKyBiL2ZzL2YyZnMvZjJm
cy5oCj4+PiBAQCAtMTQwNCw2ICsxNDA0LDggQEAgc3RydWN0IGYyZnNfZGV2X2luZm8gewo+Pj4g
ICAgICAgdW5zaWduZWQgaW50IHRvdGFsX3NlZ21lbnRzOwo+Pj4gICAgICAgYmxvY2tfdCBzdGFy
dF9ibGs7Cj4+PiAgICAgICBibG9ja190IGVuZF9ibGs7Cj4+PiArICAgICBib29sIGhhc19hbGlh
czsKPj4+ICsgICAgIGJvb2wgaXNfcmVzZXJ2aW5nOwo+Pj4gICNpZmRlZiBDT05GSUdfQkxLX0RF
Vl9aT05FRAo+Pj4gICAgICAgdW5zaWduZWQgaW50IG5yX2Jsa3o7ICAgICAgICAgICAvKiBUb3Rh
bCBudW1iZXIgb2Ygem9uZXMgKi8KPj4+ICAgICAgIHVuc2lnbmVkIGxvbmcgKmJsa3pfc2VxOyAg
ICAgICAgLyogQml0bWFwIGluZGljYXRpbmcgc2VxdWVudGlhbCB6b25lcyAqLwo+Pj4gQEAgLTE4
NTcsNiArMTg1OSw3IEBAIHN0cnVjdCBmMmZzX3NiX2luZm8gewo+Pj4gICAgICAgYmxvY2tfdCBs
YXN0X3ZhbGlkX2Jsb2NrX2NvdW50OyAgICAgICAgIC8qIGZvciByZWNvdmVyeSAqLwo+Pj4gICAg
ICAgYmxvY2tfdCByZXNlcnZlZF9ibG9ja3M7ICAgICAgICAgICAgICAgIC8qIGNvbmZpZ3VyYWJs
ZSByZXNlcnZlZCBibG9ja3MgKi8KPj4+ICAgICAgIGJsb2NrX3QgY3VycmVudF9yZXNlcnZlZF9i
bG9ja3M7ICAgICAgICAvKiBjdXJyZW50IHJlc2VydmVkIGJsb2NrcyAqLwo+Pj4gKyAgICAgYmxv
Y2tfdCBhbGlhc19yZXNlcnZlZF9ibG9ja3M7ICAgICAgICAgIC8qIHJlc2VydmVkIGJsb2NrcyBm
b3IgZGV2aWNlIGFsaWFzICovCj4+Pgo+Pj4gICAgICAgLyogQWRkaXRpb25hbCB0cmFja2luZyBm
b3Igbm8gY2hlY2twb2ludCBtb2RlICovCj4+PiAgICAgICBibG9ja190IHVudXNhYmxlX2Jsb2Nr
X2NvdW50OyAgICAgICAgICAgLyogIyBvZiBibG9ja3Mgc2F2ZWQgYnkgbGFzdCBjcCAqLwo+Pj4g
QEAgLTI1NTksNyArMjU2Miw4IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdldF9hdmFp
bGFibGVfYmxvY2tfY291bnQoc3RydWN0IGYyZnNfc2JfaW5mbyAqc2JpLAo+Pj4gICAgICAgYmxv
Y2tfdCBhdmFpbF91c2VyX2Jsb2NrX2NvdW50Owo+Pj4KPj4+ICAgICAgIGF2YWlsX3VzZXJfYmxv
Y2tfY291bnQgPSBzYmktPnVzZXJfYmxvY2tfY291bnQgLQo+Pj4gLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzYmktPmN1cnJlbnRfcmVzZXJ2ZWRfYmxvY2tzOwo+Pj4gKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYmktPmN1cnJlbnRfcmVzZXJ2ZWRf
YmxvY2tzIC0KPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2JpLT5h
bGlhc19yZXNlcnZlZF9ibG9ja3M7Cj4+Pgo+Pj4gICAgICAgaWYgKHRlc3Rfb3B0KHNiaSwgUkVT
RVJWRV9ST09UKSAmJiAhX19hbGxvd19yZXNlcnZlZF9yb290KHNiaSwgaW5vZGUsIGNhcCkpCj4+
PiAgICAgICAgICAgICAgIGF2YWlsX3VzZXJfYmxvY2tfY291bnQgLT0gRjJGU19PUFRJT04oc2Jp
KS5yb290X3Jlc2VydmVkX2Jsb2NrczsKPj4+IEBAIC00MDEwLDYgKzQwMTQsOCBAQCBpbnQgZjJm
c19mbHVzaF9kZXZpY2VfY2FjaGUoc3RydWN0IGYyZnNfc2JfaW5mbyAqc2JpKTsKPj4+ICB2b2lk
IGYyZnNfZGVzdHJveV9mbHVzaF9jbWRfY29udHJvbChzdHJ1Y3QgZjJmc19zYl9pbmZvICpzYmks
IGJvb2wgZnJlZSk7Cj4+PiAgdm9pZCBmMmZzX2ludmFsaWRhdGVfYmxvY2tzKHN0cnVjdCBmMmZz
X3NiX2luZm8gKnNiaSwgYmxvY2tfdCBhZGRyLAo+Pj4gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBsZW4pOwo+Pj4gK3ZvaWQgZjJmc19y
ZXNlcnZlX2RldmljZV9hbGlhcyhzdHJ1Y3QgZjJmc19zYl9pbmZvICpzYmksIGJsb2NrX3QgYWRk
ciwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBpbnQgbGVuKTsKPj4+ICBib29sIGYyZnNfaXNfY2hlY2twb2ludGVkX2RhdGEoc3RydWN0
IGYyZnNfc2JfaW5mbyAqc2JpLCBibG9ja190IGJsa2FkZHIpOwo+Pj4gIGludCBmMmZzX3N0YXJ0
X2Rpc2NhcmRfdGhyZWFkKHN0cnVjdCBmMmZzX3NiX2luZm8gKnNiaSk7Cj4+PiAgdm9pZCBmMmZz
X2Ryb3BfZGlzY2FyZF9jbWQoc3RydWN0IGYyZnNfc2JfaW5mbyAqc2JpKTsKPj4+IEBAIC00MjMx
LDYgKzQyMzcsOCBAQCB2b2lkIGYyZnNfYnVpbGRfZ2NfbWFuYWdlcihzdHJ1Y3QgZjJmc19zYl9p
bmZvICpzYmkpOwo+Pj4gIGludCBmMmZzX2djX3JhbmdlKHN0cnVjdCBmMmZzX3NiX2luZm8gKnNi
aSwKPj4+ICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHN0YXJ0X3NlZywgdW5zaWduZWQgaW50
IGVuZF9zZWcsCj4+PiAgICAgICAgICAgICAgIGJvb2wgZHJ5X3J1biwgdW5zaWduZWQgaW50IGRy
eV9ydW5fc2VjdGlvbnMpOwo+Pj4gK3ZvaWQgZjJmc19yZXNldF9nY192aWN0aW1fcmVzb3VyY2Uo
c3RydWN0IGYyZnNfc2JfaW5mbyAqc2JpLAo+Pj4gKyAgICAgICAgICAgICB1bnNpZ25lZCBpbnQg
c3RhcnQsIHVuc2lnbmVkIGludCBlbmQpOwo+Pj4gIGludCBmMmZzX3Jlc2l6ZV9mcyhzdHJ1Y3Qg
ZmlsZSAqZmlscCwgX191NjQgYmxvY2tfY291bnQpOwo+Pj4gIGludCBfX2luaXQgZjJmc19jcmVh
dGVfZ2FyYmFnZV9jb2xsZWN0aW9uX2NhY2hlKHZvaWQpOwo+Pj4gIHZvaWQgZjJmc19kZXN0cm95
X2dhcmJhZ2VfY29sbGVjdGlvbl9jYWNoZSh2b2lkKTsKPj4+IGRpZmYgLS1naXQgYS9mcy9mMmZz
L2ZpbGUuYyBiL2ZzL2YyZnMvZmlsZS5jCj4+PiBpbmRleCA0YjUyYzU2ZDcxZjAuLjY0MmYwNmYy
ZmFlYSAxMDA2NDQKPj4+IC0tLSBhL2ZzL2YyZnMvZmlsZS5jCj4+PiArKysgYi9mcy9mMmZzL2Zp
bGUuYwo+Pj4gQEAgLTgxMywxMyArODEzLDE5IEBAIGludCBmMmZzX2RvX3RydW5jYXRlX2Jsb2Nr
cyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1NjQgZnJvbSwgYm9vbCBsb2NrKQo+Pj4KPj4+ICAgICAg
IGlmIChJU19ERVZJQ0VfQUxJQVNJTkcoaW5vZGUpKSB7Cj4+PiAgICAgICAgICAgICAgIHN0cnVj
dCBleHRlbnRfdHJlZSAqZXQgPSBGMkZTX0koaW5vZGUpLT5leHRlbnRfdHJlZVtFWF9SRUFEXTsK
Pj4+IC0gICAgICAgICAgICAgc3RydWN0IGV4dGVudF9pbmZvIGVpID0gZXQtPmxhcmdlc3Q7Cj4+
PiArICAgICAgICAgICAgIHN0cnVjdCBleHRlbnRfaW5mbyBlaTsKPj4+ICsKPj4+ICsgICAgICAg
ICAgICAgcmVhZF9sb2NrKCZldC0+bG9jayk7Cj4+PiArICAgICAgICAgICAgIGVpID0gZXQtPmxh
cmdlc3Q7Cj4+PiArICAgICAgICAgICAgIHJlYWRfdW5sb2NrKCZldC0+bG9jayk7Cj4+Pgo+Pj4g
ICAgICAgICAgICAgICBmMmZzX2ludmFsaWRhdGVfYmxvY2tzKHNiaSwgZWkuYmxrLCBlaS5sZW4p
Owo+Pj4KPj4+ICAgICAgICAgICAgICAgZGVjX3ZhbGlkX2Jsb2NrX2NvdW50KHNiaSwgaW5vZGUs
IGVpLmxlbik7Cj4+PiAgICAgICAgICAgICAgIGYyZnNfdXBkYXRlX3RpbWUoc2JpLCBSRVFfVElN
RSk7Cj4+Pgo+Pj4gKyAgICAgICAgICAgICBmMmZzX2Ryb3BfZXh0ZW50X3RyZWUoaW5vZGUpOwo+
Pj4gKwo+Pj4gICAgICAgICAgICAgICBmMmZzX2ZvbGlvX3B1dChpZm9saW8sIHRydWUpOwo+Pj4g
ICAgICAgICAgICAgICBnb3RvIG91dDsKPj4+ICAgICAgIH0KPj4+IEBAIC0xMTAwLDggKzExMDYs
OSBAQCBpbnQgZjJmc19zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVu
dHJ5ICpkZW50cnksCj4+PiAgICAgICBpZiAoKGF0dHItPmlhX3ZhbGlkICYgQVRUUl9TSVpFKSkg
ewo+Pj4gICAgICAgICAgICAgICBpZiAobWFwcGluZ19sYXJnZV9mb2xpb19zdXBwb3J0KGlub2Rl
LT5pX21hcHBpbmcpKQo+Pj4gICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRU9QTk9UU1VQ
UDsKPj4+IC0gICAgICAgICAgICAgaWYgKCFmMmZzX2lzX2NvbXByZXNzX2JhY2tlbmRfcmVhZHko
aW5vZGUpIHx8Cj4+PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJU19ERVZJQ0VfQUxJ
QVNJTkcoaW5vZGUpKQo+Pj4gKyAgICAgICAgICAgICBpZiAoSVNfREVWSUNFX0FMSUFTSU5HKGlu
b2RlKSkKPj4+ICsgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVQRVJNOwo+Pj4gKyAgICAg
ICAgICAgICBpZiAoIWYyZnNfaXNfY29tcHJlc3NfYmFja2VuZF9yZWFkeShpbm9kZSkpCj4+PiAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FT1BOT1RTVVBQOwo+Pj4gICAgICAgICAgICAg
ICBpZiAoaXNfaW5vZGVfZmxhZ19zZXQoaW5vZGUsIEZJX0NPTVBSRVNTX1JFTEVBU0VEKSAmJgo+
Pj4gICAgICAgICAgICAgICAgICAgICAgICFJU19BTElHTkVEKGF0dHItPmlhX3NpemUsCj4+PiBA
QCAtMjEzMCw2ICsyMTM3LDkgQEAgc3RhdGljIGludCBmMmZzX3NldGZsYWdzX2NvbW1vbihzdHJ1
Y3QgaW5vZGUgKmlub2RlLCB1MzIgaWZsYWdzLCB1MzIgbWFzaykKPj4+ICAgICAgIGlmIChJU19O
T1FVT1RBKGlub2RlKSkKPj4+ICAgICAgICAgICAgICAgcmV0dXJuIC1FUEVSTTsKPj4+Cj4+PiAr
ICAgICBpZiAoSVNfREVWSUNFX0FMSUFTSU5HKGlub2RlKSkKPj4+ICsgICAgICAgICAgICAgcmV0
dXJuIC1FUEVSTTsKPj4+ICsKPj4+ICAgICAgIGlmICgoaWZsYWdzIF4gbWFza2VkX2ZsYWdzKSAm
IEYyRlNfQ0FTRUZPTERfRkwpIHsKPj4+ICAgICAgICAgICAgICAgaWYgKCFmMmZzX3NiX2hhc19j
YXNlZm9sZChGMkZTX0lfU0IoaW5vZGUpKSkKPj4+ICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gLUVPUE5PVFNVUFA7Cj4+PiBAQCAtMjY3OCw2ICsyNjg4LDE3IEBAIHN0YXRpYyBpbnQgZjJm
c19pb2NfZ2V0X2VuY3J5cHRpb25fcG9saWN5KHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBs
b25nIGFyZykKPj4+ICAgICAgIHJldHVybiBmc2NyeXB0X2lvY3RsX2dldF9wb2xpY3koZmlscCwg
KHZvaWQgX191c2VyICopYXJnKTsKPj4+ICB9Cj4+Pgo+Pj4gK3N0YXRpYyBpbnQgZjJmc19pb2Nf
Z2V0X2Rldl9hbGlhc19zdGF0dXMoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYXJn
KQo+Pj4gK3sKPj4+ICsgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGZpbHAp
Owo+Pj4gKwo+Pj4gKyAgICAgaWYgKCFJU19ERVZJQ0VfQUxJQVNJTkcoaW5vZGUpKQo+Pj4gKyAg
ICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKPj4+ICsKPj4+ICsgICAgIHJldHVybiBwdXRfdXNl
cihGMkZTX0hBU19CTE9DS1MoaW5vZGUpID8gRjJGU19ERVZfQUxJQVNfU1RBVFVTX1JFU0VSVkVE
IDoKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEYyRlNfREVWX0FMSUFTX1NUQVRV
U19SRUxFQVNFRCwgKHUzMiBfX3VzZXIgKilhcmcpOwo+Pj4gK30KPj4+ICsKPj4+ICBzdGF0aWMg
aW50IGYyZnNfaW9jX2dldF9lbmNyeXB0aW9uX3B3c2FsdChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5z
aWduZWQgbG9uZyBhcmcpCj4+PiAgewo+Pj4gICAgICAgc3RydWN0IGlub2RlICppbm9kZSA9IGZp
bGVfaW5vZGUoZmlscCk7Cj4+PiBAQCAtMzYxNiw2ICszNjM3LDI0OCBAQCBzdGF0aWMgaW50IGYy
ZnNfaW9jX2dldF9kZXZfYWxpYXNfZmlsZShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9u
ZyBhcmcpCj4+PiAgICAgICAgICAgICAgICAgICAgICAgKHUzMiBfX3VzZXIgKilhcmcpOwo+Pj4g
IH0KPj4+Cj4+PiArc3RhdGljIGJvb2wgZjJmc19nZXRfZGV2X2FsaWFzX2V4dGVudChzdHJ1Y3Qg
ZjJmc19zYl9pbmZvICpzYmksCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0cnVjdCBleHRlbnRfaW5mbyAqZWkpCj4+PiArewo+Pj4gKyAgICAgaW50IGk7
Cj4+PiArCj4+PiArICAgICBmb3IgKGkgPSAxOyBpIDwgc2JpLT5zX25kZXZzOyBpKyspIHsKPj4+
ICsgICAgICAgICAgICAgY2hhciAqbmFtZSA9IHN0cnJjaHIoRkRFVihpKS5wYXRoLCAnLycpOwo+
Pj4gKwo+Pj4gKyAgICAgICAgICAgICBuYW1lID0gbmFtZSA/IG5hbWUgKyAxIDogRkRFVihpKS5w
YXRoOwo+Pj4gKyAgICAgICAgICAgICBpZiAoIXN0cmNtcChuYW1lLCBkZW50cnktPmRfbmFtZS5u
YW1lKSkgewo+Pj4gKyAgICAgICAgICAgICAgICAgICAgIGVpLT5ibGsgPSBGREVWKGkpLnN0YXJ0
X2JsazsKPj4+ICsgICAgICAgICAgICAgICAgICAgICBlaS0+bGVuID0gRkRFVihpKS50b3RhbF9z
ZWdtZW50cyA8PCBzYmktPmxvZ19ibG9ja3NfcGVyX3NlZzsKPj4+ICsgICAgICAgICAgICAgICAg
ICAgICBlaS0+Zm9mcyA9IDA7Cj4+PiArICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
Cj4+PiArICAgICAgICAgICAgIH0KPj4KPj4gVHJpdmlhbCBjbGVhbnVwIHRvIGF2b2lkIGxvbmcg
bGluZToKPj4KPj4gICAgICAgICAgICAgICAgIGlmIChzdHJjbXAobmFtZSwgZGVudHJ5LT5kX25h
bWUubmFtZSkpCj4+ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwo+Pgo+PiAgICAg
ICAgICAgICAgICAgZWktPmJsayA9IEZERVYoaSkuc3RhcnRfYmxrOwo+PiAgICAgICAgICAgICAg
ICAgZWktPmxlbiA9IEZERVYoaSkudG90YWxfc2VnbWVudHMgPDwgc2JpLT5sb2dfYmxvY2tzX3Bl
cl9zZWc7Cj4+ICAgICAgICAgICAgICAgICBlaS0+Zm9mcyA9IDA7Cj4+ICAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKPj4KPj4+ICsgICAgIH0KPj4+ICsgICAgIHJldHVybiBmYWxzZTsKPj4+
ICt9Cj4+PiArCj4+PiArc3RhdGljIGludCBmMmZzX2lvY19yZXNlcnZlX2Rldl9hbGlhcyhzdHJ1
Y3QgZmlsZSAqZmlscCkKPj4+ICt7Cj4+PiArICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmls
ZV9pbm9kZShmaWxwKTsKPj4+ICsgICAgIHN0cnVjdCBmMmZzX3NiX2luZm8gKnNiaSA9IEYyRlNf
SV9TQihpbm9kZSk7Cj4+PiArICAgICBzdHJ1Y3QgZXh0ZW50X3RyZWUgKmV0ID0gRjJGU19JKGlu
b2RlKS0+ZXh0ZW50X3RyZWVbRVhfUkVBRF07Cj4+PiArICAgICBzdHJ1Y3QgZXh0ZW50X2luZm8g
ZWk7Cj4+PiArICAgICBzdHJ1Y3QgY3BfY29udHJvbCBjcGMgPSB7IENQX1NZTkMsIDAsIDAsIDAg
fTsKPj4+ICsgICAgIHN0cnVjdCBmMmZzX2xvY2tfY29udGV4dCBsYywgZ2xjOwo+Pj4gKyAgICAg
YmxrY250X3QgY291bnQ7Cj4+PiArICAgICB1bnNpZ25lZCBpbnQgc3RhcnQsIGVuZDsKPj4+ICsg
ICAgIGludCB0eXBlLCBlcnI7Cj4+PiArCj4+PiArICAgICBpZiAoIWNhcGFibGUoQ0FQX1NZU19B
RE1JTikpCj4+PiArICAgICAgICAgICAgIHJldHVybiAtRVBFUk07Cj4+PiArCj4+PiArICAgICBp
ZiAodW5saWtlbHkoaXNfc2JpX2ZsYWdfc2V0KHNiaSwgU0JJX0NQX0RJU0FCTEVEKSkpCj4+PiAr
ICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwo+Pj4gKwo+Pj4gKyAgICAgZXJyID0gbW50X3dh
bnRfd3JpdGVfZmlsZShmaWxwKTsKPj4+ICsgICAgIGlmIChlcnIpCj4+PiArICAgICAgICAgICAg
IHJldHVybiBlcnI7Cj4+PiArCj4+PiArICAgICBpbm9kZV9sb2NrKGlub2RlKTsKPj4+ICsKPj4+
ICsgICAgIGlmICghSVNfREVWSUNFX0FMSUFTSU5HKGlub2RlKSkgewo+Pj4gKyAgICAgICAgICAg
ICBlcnIgPSAtRUlOVkFMOwo+Pj4gKyAgICAgICAgICAgICBnb3RvIG91dF9pbm9kZV91bmxvY2s7
Cj4+PiArICAgICB9Cj4+PiArCj4+PiArICAgICBpZiAoRjJGU19IQVNfQkxPQ0tTKGlub2RlKSkg
ewo+Pj4gKyAgICAgICAgICAgICBlcnIgPSAwOwo+Pj4gKyAgICAgICAgICAgICBnb3RvIG91dF9p
bm9kZV91bmxvY2s7Cj4+PiArICAgICB9Cj4+PiArCj4+PiArICAgICBpZiAoIWYyZnNfZ2V0X2Rl
dl9hbGlhc19leHRlbnQoc2JpLCBmaWxwLT5mX3BhdGguZGVudHJ5LCAmZWkpKSB7Cj4+PiArICAg
ICAgICAgICAgIGYyZnNfd2FybihzYmksICJkZXZpY2UgYWxpYXMgZmlsZSAoJXMsIGlubz0lbGx1
KSBoYXMgbm8gbWF0Y2hpbmcgZGV2aWNlIiwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgIGZp
bHAtPmZfcGF0aC5kZW50cnktPmRfbmFtZS5uYW1lLAo+Pj4gKyAgICAgICAgICAgICAgICAgICAg
ICAgKHVuc2lnbmVkIGxvbmcgbG9uZylpbm9kZS0+aV9pbm8pOwo+Pj4gKyAgICAgICAgICAgICBz
ZXRfc2JpX2ZsYWcoc2JpLCBTQklfTkVFRF9GU0NLKTsKPj4+ICsgICAgICAgICAgICAgZjJmc19o
YW5kbGVfZXJyb3Ioc2JpLCBFUlJPUl9DT1JSVVBURURfSU5PREUpOwo+Pj4gKyAgICAgICAgICAg
ICBlcnIgPSAtRUZTQ09SUlVQVEVEOwo+Pj4gKyAgICAgICAgICAgICBnb3RvIG91dF9pbm9kZV91
bmxvY2s7Cj4+PiArICAgICB9Cj4+PiArCj4+PiArICAgICBzcGluX2xvY2soJnNiaS0+c3RhdF9s
b2NrKTsKPj4+ICsgICAgIGlmIChzYmktPnRvdGFsX3ZhbGlkX2Jsb2NrX2NvdW50ICsgZWkubGVu
ID4KPj4+ICsgICAgICAgICAgICAgICAgICAgICBnZXRfYXZhaWxhYmxlX2Jsb2NrX2NvdW50KHNi
aSwgaW5vZGUsIHRydWUpKSB7Cj4+PiArICAgICAgICAgICAgIHNwaW5fdW5sb2NrKCZzYmktPnN0
YXRfbG9jayk7Cj4+PiArICAgICAgICAgICAgIGVyciA9IC1FTk9TUEM7Cj4+PiArICAgICAgICAg
ICAgIGdvdG8gb3V0X2lub2RlX3VubG9jazsKPj4+ICsgICAgIH0KPj4+ICsgICAgIHNiaS0+YWxp
YXNfcmVzZXJ2ZWRfYmxvY2tzICs9IGVpLmxlbjsKPj4+ICsgICAgIHNwaW5fdW5sb2NrKCZzYmkt
PnN0YXRfbG9jayk7Cj4+PiArCj4+PiArICAgICBzcGluX2xvY2soJkZSRUVfSShzYmkpLT5zZWdt
YXBfbG9jayk7Cj4+PiArICAgICBGREVWKGYyZnNfdGFyZ2V0X2RldmljZV9pbmRleChzYmksIGVp
LmJsaykpLmlzX3Jlc2VydmluZyA9IHRydWU7Cj4+PiArICAgICBzcGluX3VubG9jaygmRlJFRV9J
KHNiaSktPnNlZ21hcF9sb2NrKTsKPj4+ICsKPj4+ICsgICAgIHN0YXJ0ID0gR0VUX1NFR05PKHNi
aSwgZWkuYmxrKTsKPj4+ICsgICAgIGVuZCA9IEdFVF9TRUdOTyhzYmksIGVpLmJsayArIGVpLmxl
biAtIDEpOwo+Pj4gKwo+Pj4gKyAgICAgLyogQWNxdWlyZSBnY19sb2NrIGZvciB2aWN0aW0gcmVz
ZXQsIGN1cnNlZyByZXNpemUsIGFuZCByYW5nZSBHQyAqLwo+Pj4gKyAgICAgZjJmc19kb3duX3dy
aXRlX3RyYWNlKCZzYmktPmdjX2xvY2ssICZnbGMpOwo+Pj4gKwo+Pj4gKyAgICAgLyogUmVzZXQg
dGhlIHZpY3RpbSBpbmZvcm1hdGlvbiB0byBwcmV2ZW50IEdDIGZyb20gdGFyZ2V0aW5nIHRoZSBy
YW5nZSAqLwo+Pj4gKyAgICAgZjJmc19yZXNldF9nY192aWN0aW1fcmVzb3VyY2Uoc2JpLCBzdGFy
dCwgZW5kKTsKPj4+ICsKPj4+ICsgICAgIC8qIE1vdmUgb3V0IGN1cnNlZ3MgZnJvbSB0aGUgdGFy
Z2V0IHJhbmdlICovCj4+PiArICAgICBmb3IgKHR5cGUgPSBDVVJTRUdfSE9UX0RBVEE7IHR5cGUg
PCBOUl9DVVJTRUdfUEVSU0lTVF9UWVBFOyB0eXBlKyspIHsKPj4+ICsgICAgICAgICAgICAgZXJy
ID0gZjJmc19hbGxvY2F0ZV9zZWdtZW50X2Zvcl9yZXNpemUoc2JpLCB0eXBlLCBzdGFydCwgZW5k
KTsKPj4+ICsgICAgICAgICAgICAgaWYgKGVycikKPj4+ICsgICAgICAgICAgICAgICAgICAgICBn
b3RvIG91dF9nY191bmxvY2s7Cj4+PiArICAgICB9Cj4+PiArCj4+PiArICAgICBmMmZzX2xvY2tf
b3Aoc2JpLCAmbGMpOwo+Pj4gKwo+Pj4gKyAgICAgaWYgKHVubGlrZWx5KGlzX3NiaV9mbGFnX3Nl
dChzYmksIFNCSV9DUF9ESVNBQkxFRCkpKSB7Cj4+PiArICAgICAgICAgICAgIGVyciA9IC1FSU5W
QUw7Cj4+PiArICAgICAgICAgICAgIGYyZnNfdW5sb2NrX29wKHNiaSwgJmxjKTsKPj4+ICsgICAg
ICAgICAgICAgZ290byBvdXRfZ2NfdW5sb2NrOwo+Pj4gKyAgICAgfQo+Pj4gKwo+Pj4gKyAgICAg
LyogZG8gR0MgdG8gbW92ZSBvdXQgdmFsaWQgYmxvY2tzIGluIHRoZSByYW5nZSBhbGwgYXQgb25j
ZSEgKi8KPj4+ICsgICAgIGVyciA9IGYyZnNfZ2NfcmFuZ2Uoc2JpLCBzdGFydCwgZW5kLCBmYWxz
ZSwgMCk7Cj4+PiArICAgICBpZiAoZXJyKSB7Cj4+PiArICAgICAgICAgICAgIGYyZnNfdW5sb2Nr
X29wKHNiaSwgJmxjKTsKPj4+ICsgICAgICAgICAgICAgZ290byBvdXRfZ2NfdW5sb2NrOwo+Pj4g
KyAgICAgfQo+Pj4gKwo+Pj4gKyAgICAgY291bnQgPSBlaS5sZW47Cj4+PiArICAgICBlcnIgPSBp
bmNfdmFsaWRfYmxvY2tfY291bnQoc2JpLCBpbm9kZSwgJmNvdW50LCBmYWxzZSk7Cj4+Cj4+IEht
bS4uIHNlZW1zIGlmIGRldmljZSBhbGlhcyBmaWxlIGlzIDRHQiwgd2UgaGF2ZSByZXNlcnZlZCA0
R0IgYnkgc2V0Cj4+IGFsaWFzX3Jlc2VydmVkX2Jsb2NrcyB0byA0R0IsIGhlcmUgd2Ugd2FudCB0
byBhbGxvY2F0ZSBhbm90aGVyIDRHQj8KPj4gSXQgd2lsbCBmYWlsIGlmIHRoZSBsZWZ0IHNwYWNl
IGlzIGxlc3MgdGhhbiA0R0IsIHNlZW1zIG5vdCBtYWtlIHNlbnNlLgo+Pgo+PiBNYXliZSB3ZSBj
YW4gYWRkIGFub3RoZXIgcGFyYW1ldGVyIHRvIGxldCBpbmNfdmFsaWRfYmxvY2tfY291bnQgdG8g
MSkKPj4gaW5jcmVhc2UgdG90YWxfdmFsaWRfYmxvY2tfY291bnQgYW5kIDIpIGRlY3JlYXNlIGFs
aWFzX3Jlc2VydmVkX2Jsb2Nrcwo+PiBhdG9taWNhbGx5IHVuZGVyIHByb3RldGlvbiBvZiBzdGF0
X2xvY2s/IFRob3VnaHRzPwo+Pgo+Pgo+Pj4gKyAgICAgaWYgKGVycikgewo+Pj4gKyAgICAgICAg
ICAgICBmMmZzX3VubG9ja19vcChzYmksICZsYyk7Cj4+PiArICAgICAgICAgICAgIGdvdG8gb3V0
X2djX3VubG9jazsKPj4+ICsgICAgIH0KPj4+ICsKPj4+ICsgICAgIHNwaW5fbG9jaygmc2JpLT5z
dGF0X2xvY2spOwo+Pj4gKyAgICAgc2JpLT5hbGlhc19yZXNlcnZlZF9ibG9ja3MgLT0gZWkubGVu
Owo+Pj4gKyAgICAgc3Bpbl91bmxvY2soJnNiaS0+c3RhdF9sb2NrKTsKPj4+ICsKPj4+ICsgICAg
IGlmIChldCkgewo+Pgo+PiBBbnkgY2FzZSB0aGF0IGV0IGlzIE5VTEw/Cj4+Cj4+PiArICAgICAg
ICAgICAgIHdyaXRlX2xvY2soJmV0LT5sb2NrKTsKPj4+ICsgICAgICAgICAgICAgZXQtPmxhcmdl
c3QgPSBlaTsKPj4+ICsgICAgICAgICAgICAgd3JpdGVfdW5sb2NrKCZldC0+bG9jayk7Cj4+PiAr
ICAgICB9Cj4+PiArICAgICBjbGVhcl9pbm9kZV9mbGFnKGlub2RlLCBGSV9OT19FWFRFTlQpOwo+
Pj4gKwo+Pj4gKyAgICAgZjJmc19yZXNlcnZlX2RldmljZV9hbGlhcyhzYmksIGVpLmJsaywgZWku
bGVuKTsKPj4+ICsKPj4+ICsgICAgIGlfc2l6ZV93cml0ZShpbm9kZSwgKGxvZmZfdCllaS5sZW4g
PDwgUEFHRV9TSElGVCk7Cj4+Cj4+IDw8IHNiaS0+YmxvY2tzaXplPyBpbiBjYXNlIHBhZ2Vfc2l6
ZSBpcyBub3QgZXF1YWxzIHRvIGJsb2Nrc2l6ZS4KPj4KPj4+ICsgICAgIGYyZnNfdXBkYXRlX2lu
b2RlX3BhZ2UoaW5vZGUpOwo+Pj4gKwo+Pj4gKyAgICAgc3Bpbl9sb2NrKCZGUkVFX0koc2JpKS0+
c2VnbWFwX2xvY2spOwo+Pj4gKyAgICAgRkRFVihmMmZzX3RhcmdldF9kZXZpY2VfaW5kZXgoc2Jp
LCBlaS5ibGspKS5pc19yZXNlcnZpbmcgPSBmYWxzZTsKPj4+ICsgICAgIHNwaW5fdW5sb2NrKCZG
UkVFX0koc2JpKS0+c2VnbWFwX2xvY2spOwo+Pj4gKwo+Pj4gKyAgICAgZjJmc191bmxvY2tfb3Ao
c2JpLCAmbGMpOwo+Pj4gKyAgICAgZjJmc191cF93cml0ZV90cmFjZSgmc2JpLT5nY19sb2NrLCAm
Z2xjKTsKPj4+ICsKPj4+ICsgICAgIGlub2RlX3VubG9jayhpbm9kZSk7Cj4+PiArICAgICBtbnRf
ZHJvcF93cml0ZV9maWxlKGZpbHApOwo+Pj4gKwo+Pj4gKyAgICAgZXJyID0gZjJmc193cml0ZV9j
aGVja3BvaW50KHNiaSwgJmNwYyk7Cj4+PiArICAgICByZXR1cm4gZXJyOwo+Pj4gKwo+Pj4gK291
dF9nY191bmxvY2s6Cj4+PiArICAgICBzcGluX2xvY2soJnNiaS0+c3RhdF9sb2NrKTsKPj4+ICsg
ICAgIHNiaS0+YWxpYXNfcmVzZXJ2ZWRfYmxvY2tzIC09IGVpLmxlbjsKPj4+ICsgICAgIHNwaW5f
dW5sb2NrKCZzYmktPnN0YXRfbG9jayk7Cj4+PiArCj4+PiArICAgICBzcGluX2xvY2soJkZSRUVf
SShzYmkpLT5zZWdtYXBfbG9jayk7Cj4+PiArICAgICBGREVWKGYyZnNfdGFyZ2V0X2RldmljZV9p
bmRleChzYmksIGVpLmJsaykpLmlzX3Jlc2VydmluZyA9IGZhbHNlOwo+Pj4gKyAgICAgc3Bpbl91
bmxvY2soJkZSRUVfSShzYmkpLT5zZWdtYXBfbG9jayk7Cj4+PiArICAgICBmMmZzX3VwX3dyaXRl
X3RyYWNlKCZzYmktPmdjX2xvY2ssICZnbGMpOwo+Pj4gKwo+Pgo+PiBvdXRfaW5vZGVfdW5sb2Nr
Ogo+Pgo+Pj4gKyAgICAgaW5vZGVfdW5sb2NrKGlub2RlKTsKPj4+ICsgICAgIG1udF9kcm9wX3dy
aXRlX2ZpbGUoZmlscCk7Cj4+PiArICAgICByZXR1cm4gZXJyOwo+Pj4gKwo+Pj4gK291dF9pbm9k
ZV91bmxvY2s6Cj4+PiArICAgICBpbm9kZV91bmxvY2soaW5vZGUpOwo+Pj4gKyAgICAgbW50X2Ry
b3Bfd3JpdGVfZmlsZShmaWxwKTsKPj4+ICsgICAgIHJldHVybiBlcnI7Cj4+Cj4+IENhbiBiZSBy
ZW1vdmVkLgo+Pgo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgaW50IGYyZnNfaW9jX3JlbGVhc2Vf
ZGV2X2FsaWFzKHN0cnVjdCBmaWxlICpmaWxwKQo+Pj4gK3sKPj4+ICsgICAgIHN0cnVjdCBpbm9k
ZSAqaW5vZGUgPSBmaWxlX2lub2RlKGZpbHApOwo+Pj4gKyAgICAgc3RydWN0IGYyZnNfc2JfaW5m
byAqc2JpID0gRjJGU19JX1NCKGlub2RlKTsKPj4+ICsgICAgIHN0cnVjdCBleHRlbnRfdHJlZSAq
ZXQgPSBGMkZTX0koaW5vZGUpLT5leHRlbnRfdHJlZVtFWF9SRUFEXTsKPj4+ICsgICAgIHN0cnVj
dCBleHRlbnRfaW5mbyBlaSA9IHswLCB9Owo+Pj4gKyAgICAgc3RydWN0IGNwX2NvbnRyb2wgY3Bj
ID0geyBDUF9TWU5DLCAwLCAwLCAwIH07Cj4+PiArICAgICBzdHJ1Y3QgZjJmc19sb2NrX2NvbnRl
eHQgbGMsIGdsYzsKPj4+ICsgICAgIGludCBlcnI7Cj4+PiArCj4+PiArICAgICBpZiAoIWNhcGFi
bGUoQ0FQX1NZU19BRE1JTikpCj4+PiArICAgICAgICAgICAgIHJldHVybiAtRVBFUk07Cj4+PiAr
Cj4+PiArICAgICBpZiAodW5saWtlbHkoaXNfc2JpX2ZsYWdfc2V0KHNiaSwgU0JJX0NQX0RJU0FC
TEVEKSkpCj4+PiArICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwo+Pj4gKwo+Pj4gKyAgICAg
ZXJyID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxwKTsKPj4+ICsgICAgIGlmIChlcnIpCj4+PiAr
ICAgICAgICAgICAgIHJldHVybiBlcnI7Cj4+PiArCj4+PiArICAgICBpbm9kZV9sb2NrKGlub2Rl
KTsKPj4+ICsKPj4+ICsgICAgIGlmICghSVNfREVWSUNFX0FMSUFTSU5HKGlub2RlKSkgewo+Pj4g
KyAgICAgICAgICAgICBlcnIgPSAtRUlOVkFMOwo+Pj4gKyAgICAgICAgICAgICBnb3RvIG91dF9p
bm9kZV91bmxvY2s7Cj4+PiArICAgICB9Cj4+PiArCj4+PiArICAgICBpZiAoIUYyRlNfSEFTX0JM
T0NLUyhpbm9kZSkpIHsKPj4+ICsgICAgICAgICAgICAgZXJyID0gMDsKPj4+ICsgICAgICAgICAg
ICAgZ290byBvdXRfaW5vZGVfdW5sb2NrOwo+Pj4gKyAgICAgfQo+Pj4gKwo+Pj4gKyAgICAgZXJy
ID0gZmlsZW1hcF93cml0ZV9hbmRfd2FpdChpbm9kZS0+aV9tYXBwaW5nKTsKPj4+ICsgICAgIGlm
IChlcnIpCj4+PiArICAgICAgICAgICAgIGdvdG8gb3V0X2lub2RlX3VubG9jazsKPj4+ICsKPj4+
ICsgICAgIHJlYWRfbG9jaygmZXQtPmxvY2spOwo+Pj4gKyAgICAgZWkgPSBldC0+bGFyZ2VzdDsK
Pj4+ICsgICAgIHJlYWRfdW5sb2NrKCZldC0+bG9jayk7Cj4+Cj4+IERvIHdlIG5lZWQgdG8gZG8g
c2FuaXR5IGNoZWNrIG9uIHdoZXRoZXIgc3RhcnQvZW5kIG9mIGRldmljZSBhbGlhcyBmaWxlCj4+
IGFyZSBhbGlnbmVkIHRvIHNlY3Rpb24tc2l6ZT8gbWF5IGJlIGluIHNhbml0eV9jaGVja19leHRl
bnRfY2FjaGUoKT8KPiAKPiBUaGFua3MgZm9yIGFsbCB0aGUgY29tbWVudHMuIEkgYWNjZXB0ZWQg
YWxsIG90aGVyIGNvbW1lbnRzLgo+IAo+IEluIHNhbml0eV9jaGVja19leHRlbnRfY2FjaGUoKSwg
d2UgYWxyZWFkeSB2ZXJpZnkgdGhhdCB0aGUgZXh0ZW50Cj4gcmFuZ2Ugb2YgYSBkZXZpY2UgYWxp
YXMgaW5vZGUgKGVpLmJsayBhbmQgZWkubGVuKSBtYXRjaGVzIHRoZSBleGFjdAo+IHN0YXJ0IGFu
ZCBlbmQgYmxvY2sgb2YgYSBzZWNvbmRhcnkgZGV2aWNlIChGREVWKGRldmkpLnN0YXJ0X2JsayBh
bmQKPiBGREVWKGRldmkpLmVuZF9ibGspOgo+IFNpbmNlIGV2ZXJ5IHNlY29uZGFyeSBibG9jayBk
ZXZpY2UgaW4gRjJGUyBpcyBhbHJlYWR5IGd1YXJhbnRlZWQgdG8gYmUKPiBhbGlnbmVkIHRvIHNl
Y3Rpb24gYm91bmRhcmllcywgbWF0Y2hpbmcgdGhlIGV4dGVudCBhZ2FpbnN0IEZERVYoZGV2aSkK
PiBpbmhlcmVudGx5IGd1YXJhbnRlZXMgc2VjdGlvbiBhbGlnbm1lbnQgZm9yIHRoZSBkZXZpY2Ug
YWxpYXMgZmlsZSBhcwo+IHdlbGwuCgpJSVVDLCBmb3IgdGhlIHdvcnN0IGNhc2UsIHdlIG1heSBz
dWZmZXIgaXNzdWUgKHBvdGVudGlhbGx5IEdDIG9uIHVuYWxpZ25lZApwaW5maWxlcykgd2hlbiBt
b3VudGluZyBhbiBpbWFnZSBjb250YWluaW5nIHVuYWxpZ25lZCBkZXZpY2UgYWxpYXMgZmlsZSB3
aGljaAppcyBmdXp6ZWQgYnkgc3l6a2FsbGVyPwoKQWxzbywgSSdtIHdvcnJ5IGFib3V0IHdoZXRo
ZXIgdGhlcmUgaXMgYW55IGNvZGUgZmxhdyBjYW4gY2F1c2UgdG8gbWlzcyB0byBrZWVwCnRoZSBh
bGlnbm1lbnQsIHNpbmNlIHJlY2VudGx5IEkgZm91bmQgYSBidWcgdGhhdCBwaW5maWxlIG1heSBu
b3QgYmUgYWxpbmdlZAp0byBzZWN0aW9uLCBzZWUgZGV0YWlscyBpbiBjb21taXQgZDBhNDgxZmFk
NWM3ICgiZjJmczogZml4IHRvIGF2b2lkIHBvdGVudGlhbApzZWN0aW9uLXVuYWxpZ25lZCBwaW5m
aWxlIiksIHNvIEkgcHJvcG9zZWQgdG8gYWRkIHN1Y2ggc2FuaXR5IGNoZWNrIHRvIGRldGVjdApp
dC4gOikKClRob3VnaHRzPwoKVGhhbmtzLAoKPiAKPiBUaGVyZWZvcmUsIGFkZGluZyBhbiBleHBs
aWNpdCBzZWN0aW9uIGFsaWdubWVudCBjaGVjayBpbgo+IHNhbml0eV9jaGVja19leHRlbnRfY2Fj
aGUoKSBzZWVtcyByZWR1bmRhbnQuCj4gCj4+Cj4+PiArCj4+PiArICAgICBmMmZzX2Rvd25fd3Jp
dGVfdHJhY2UoJnNiaS0+Z2NfbG9jaywgJmdsYyk7Cj4+PiArICAgICBmMmZzX2xvY2tfb3Aoc2Jp
LCAmbGMpOwo+Pj4gKwo+Pj4gKyAgICAgaWYgKHVubGlrZWx5KGlzX3NiaV9mbGFnX3NldChzYmks
IFNCSV9DUF9ESVNBQkxFRCkpKSB7Cj4+PiArICAgICAgICAgICAgIGVyciA9IC1FSU5WQUw7Cj4+
PiArICAgICAgICAgICAgIGYyZnNfdW5sb2NrX29wKHNiaSwgJmxjKTsKPj4+ICsgICAgICAgICAg
ICAgZjJmc191cF93cml0ZV90cmFjZSgmc2JpLT5nY19sb2NrLCAmZ2xjKTsKPj4+ICsgICAgICAg
ICAgICAgZ290byBvdXRfaW5vZGVfdW5sb2NrOwo+Pj4gKyAgICAgfQo+Pj4gKwo+Pj4gKyAgICAg
dHJ1bmNhdGVfc2V0c2l6ZShpbm9kZSwgMCk7Cj4+PiArCj4+Cj4+IFRvIGF2b2lkIHJhY2luZyB3
LyBtbWFwPwo+Pgo+PiBmaWxlbWFwX2ludmFsaWRhdGVfbG9jayhpbm9kZS0+aV9tYXBwaW5nKTsK
Pj4KPj4+ICsgICAgIGVyciA9IGYyZnNfdHJ1bmNhdGVfYmxvY2tzKGlub2RlLCAwLCBmYWxzZSk7
Cj4+Cj4+IGZpbGVtYXBfaW52YWxpZGF0ZV91bmxvY2soaW5vZGUtPmlfbWFwcGluZyk7Cj4+Cj4+
PiArICAgICBpZiAoZXJyKSB7Cj4+PiArICAgICAgICAgICAgIGlfc2l6ZV93cml0ZShpbm9kZSwg
KGxvZmZfdCllaS5sZW4gPDwgUEFHRV9TSElGVCk7Cj4+Cj4+IDw8IHNiaS0+YmxvY2tzaXplPyBp
biBjYXNlIHBhZ2Vfc2l6ZSBpcyBub3QgZXF1YWxzIHRvIGJsb2Nrc2l6ZS4KPj4KPj4+ICsgICAg
ICAgICAgICAgZjJmc191bmxvY2tfb3Aoc2JpLCAmbGMpOwo+Pj4gKyAgICAgICAgICAgICBmMmZz
X3VwX3dyaXRlX3RyYWNlKCZzYmktPmdjX2xvY2ssICZnbGMpOwo+Pj4gKyAgICAgICAgICAgICBn
b3RvIG91dF9pbm9kZV91bmxvY2s7Cj4+PiArICAgICB9Cj4+PiArCj4+PiArICAgICBmMmZzX3Vw
ZGF0ZV9pbm9kZV9wYWdlKGlub2RlKTsKPj4+ICsKPj4+ICsgICAgIGYyZnNfdW5sb2NrX29wKHNi
aSwgJmxjKTsKPj4+ICsgICAgIGYyZnNfdXBfd3JpdGVfdHJhY2UoJnNiaS0+Z2NfbG9jaywgJmds
Yyk7Cj4+PiArCj4+PiArICAgICBpbm9kZV91bmxvY2soaW5vZGUpOwo+Pj4gKyAgICAgbW50X2Ry
b3Bfd3JpdGVfZmlsZShmaWxwKTsKPj4+ICsKPj4+ICsgICAgIGVyciA9IGYyZnNfd3JpdGVfY2hl
Y2twb2ludChzYmksICZjcGMpOwo+Pgo+PiByZXR1cm4gZjJmc193cml0ZV9jaGVja3BvaW50KHNi
aSwgJmNwYyk7Cj4+Cj4+PiArICAgICByZXR1cm4gZXJyOwo+Pj4gKwo+Pj4gK291dF9pbm9kZV91
bmxvY2s6Cj4+PiArICAgICBpbm9kZV91bmxvY2soaW5vZGUpOwo+Pj4gKyAgICAgbW50X2Ryb3Bf
d3JpdGVfZmlsZShmaWxwKTsKPj4+ICsgICAgIHJldHVybiBlcnI7Cj4+PiArfQo+Pj4gKwo+Pj4g
IHN0YXRpYyBpbnQgZjJmc19pb2NfaW9fcHJpbyhzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQg
bG9uZyBhcmcpCj4+PiAgewo+Pj4gICAgICAgc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5v
ZGUoZmlscCk7Cj4+PiBAQCAtNDc0Miw4ICs1MDA1LDE0IEBAIHN0YXRpYyBsb25nIF9fZjJmc19p
b2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBh
cmcpCj4+PiAgICAgICAgICAgICAgIHJldHVybiBmMmZzX2lvY19jb21wcmVzc19maWxlKGZpbHAp
Owo+Pj4gICAgICAgY2FzZSBGMkZTX0lPQ19HRVRfREVWX0FMSUFTX0ZJTEU6Cj4+PiAgICAgICAg
ICAgICAgIHJldHVybiBmMmZzX2lvY19nZXRfZGV2X2FsaWFzX2ZpbGUoZmlscCwgYXJnKTsKPj4+
ICsgICAgIGNhc2UgRjJGU19JT0NfR0VUX0RFVl9BTElBU19TVEFUVVM6Cj4+PiArICAgICAgICAg
ICAgIHJldHVybiBmMmZzX2lvY19nZXRfZGV2X2FsaWFzX3N0YXR1cyhmaWxwLCBhcmcpOwo+Pj4g
ICAgICAgY2FzZSBGMkZTX0lPQ19JT19QUklPOgo+Pj4gICAgICAgICAgICAgICByZXR1cm4gZjJm
c19pb2NfaW9fcHJpbyhmaWxwLCBhcmcpOwo+Pj4gKyAgICAgY2FzZSBGMkZTX0lPQ19SRVNFUlZF
X0RFVl9BTElBUzoKPj4+ICsgICAgICAgICAgICAgcmV0dXJuIGYyZnNfaW9jX3Jlc2VydmVfZGV2
X2FsaWFzKGZpbHApOwo+Pj4gKyAgICAgY2FzZSBGMkZTX0lPQ19SRUxFQVNFX0RFVl9BTElBUzoK
Pj4+ICsgICAgICAgICAgICAgcmV0dXJuIGYyZnNfaW9jX3JlbGVhc2VfZGV2X2FsaWFzKGZpbHAp
Owo+Pj4gICAgICAgZGVmYXVsdDoKPj4+ICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9UVFk7Cj4+
PiAgICAgICB9Cj4+PiBAQCAtNTUzMCw3ICs1Nzk5LDEwIEBAIGxvbmcgZjJmc19jb21wYXRfaW9j
dGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJn
KQo+Pj4gICAgICAgY2FzZSBGMkZTX0lPQ19ERUNPTVBSRVNTX0ZJTEU6Cj4+PiAgICAgICBjYXNl
IEYyRlNfSU9DX0NPTVBSRVNTX0ZJTEU6Cj4+PiAgICAgICBjYXNlIEYyRlNfSU9DX0dFVF9ERVZf
QUxJQVNfRklMRToKPj4+ICsgICAgIGNhc2UgRjJGU19JT0NfR0VUX0RFVl9BTElBU19TVEFUVVM6
Cj4+PiAgICAgICBjYXNlIEYyRlNfSU9DX0lPX1BSSU86Cj4+PiArICAgICBjYXNlIEYyRlNfSU9D
X1JFU0VSVkVfREVWX0FMSUFTOgo+Pj4gKyAgICAgY2FzZSBGMkZTX0lPQ19SRUxFQVNFX0RFVl9B
TElBUzoKPj4+ICAgICAgICAgICAgICAgYnJlYWs7Cj4+PiAgICAgICBkZWZhdWx0Ogo+Pj4gICAg
ICAgICAgICAgICByZXR1cm4gLUVOT0lPQ1RMQ01EOwo+Pj4gZGlmZiAtLWdpdCBhL2ZzL2YyZnMv
Z2MuYyBiL2ZzL2YyZnMvZ2MuYwo+Pj4gaW5kZXggZmZhYTdiYTc2YTFiLi45M2JjYjM1YTViNWQg
MTAwNjQ0Cj4+PiAtLS0gYS9mcy9mMmZzL2djLmMKPj4+ICsrKyBiL2ZzL2YyZnMvZ2MuYwo+Pj4g
QEAgLTIxOTcsMjkgKzIxOTcsMzcgQEAgaW50IGYyZnNfZ2NfcmFuZ2Uoc3RydWN0IGYyZnNfc2Jf
aW5mbyAqc2JpLAo+Pj4gICAgICAgcmV0dXJuIDA7Cj4+PiAgfQo+Pj4KPj4+ICt2b2lkIGYyZnNf
cmVzZXRfZ2NfdmljdGltX3Jlc291cmNlKHN0cnVjdCBmMmZzX3NiX2luZm8gKnNiaSwKPj4+ICsg
ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc3RhcnQsIHVuc2lnbmVkIGludCBlbmQp
Cj4+PiArewo+Pj4gKyAgICAgaW50IGk7Cj4+PiArCj4+PiArICAgICBtdXRleF9sb2NrKCZESVJU
WV9JKHNiaSktPnNlZ2xpc3RfbG9jayk7Cj4+PiArICAgICBmb3IgKGkgPSAwOyBpIDwgTUFYX0dD
X1BPTElDWTsgaSsrKQo+Pj4gKyAgICAgICAgICAgICBpZiAoU0lUX0koc2JpKS0+bGFzdF92aWN0
aW1baV0gPj0gc3RhcnQgJiYKPj4+ICsgICAgICAgICAgICAgICAgICAgICBTSVRfSShzYmkpLT5s
YXN0X3ZpY3RpbVtpXSA8PSBlbmQpCj4+PiArICAgICAgICAgICAgICAgICAgICAgU0lUX0koc2Jp
KS0+bGFzdF92aWN0aW1baV0gPSAwOwo+Pj4gKwo+Pj4gKyAgICAgZm9yIChpID0gQkdfR0M7IGkg
PD0gRkdfR0M7IGkrKykKPj4+ICsgICAgICAgICAgICAgaWYgKHNiaS0+bmV4dF92aWN0aW1fc2Vn
W2ldID49IHN0YXJ0ICYmCj4+PiArICAgICAgICAgICAgICAgICAgICAgc2JpLT5uZXh0X3ZpY3Rp
bV9zZWdbaV0gPD0gZW5kKQo+Pj4gKyAgICAgICAgICAgICAgICAgICAgIHNiaS0+bmV4dF92aWN0
aW1fc2VnW2ldID0gTlVMTF9TRUdOTzsKPj4+ICsgICAgIG11dGV4X3VubG9jaygmRElSVFlfSShz
YmkpLT5zZWdsaXN0X2xvY2spOwo+Pj4gK30KPj4+ICsKPj4+ICBzdGF0aWMgaW50IGZyZWVfc2Vn
bWVudF9yYW5nZShzdHJ1Y3QgZjJmc19zYl9pbmZvICpzYmksCj4+PiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2VjcywgYm9vbCBkcnlfcnVuKQo+Pj4gIHsKPj4+
ICAgICAgIHVuc2lnbmVkIGludCBuZXh0X2ludXNlLCBzdGFydCwgZW5kOwo+Pj4gICAgICAgc3Ry
dWN0IGNwX2NvbnRyb2wgY3BjID0geyBDUF9SRVNJWkUsIDAsIDAsIDAgfTsKPj4+IC0gICAgIGlu
dCBnY19tb2RlLCBnY190eXBlOwo+Pj4gICAgICAgaW50IGVyciA9IDA7Cj4+PiAgICAgICBpbnQg
dHlwZTsKPj4+Cj4+PiAtICAgICAvKiBGb3JjZSBibG9jayBhbGxvY2F0aW9uIGZvciBHQyAqLwo+
Pj4gICAgICAgTUFJTl9TRUNTKHNiaSkgLT0gc2VjczsKPj4+ICAgICAgIHN0YXJ0ID0gTUFJTl9T
RUNTKHNiaSkgKiBTRUdTX1BFUl9TRUMoc2JpKTsKPj4+ICAgICAgIGVuZCA9IE1BSU5fU0VHUyhz
YmkpIC0gMTsKPj4+Cj4+PiAtICAgICBtdXRleF9sb2NrKCZESVJUWV9JKHNiaSktPnNlZ2xpc3Rf
bG9jayk7Cj4+PiAtICAgICBmb3IgKGdjX21vZGUgPSAwOyBnY19tb2RlIDwgTUFYX0dDX1BPTElD
WTsgZ2NfbW9kZSsrKQo+Pj4gLSAgICAgICAgICAgICBpZiAoU0lUX0koc2JpKS0+bGFzdF92aWN0
aW1bZ2NfbW9kZV0gPj0gc3RhcnQpCj4+PiAtICAgICAgICAgICAgICAgICAgICAgU0lUX0koc2Jp
KS0+bGFzdF92aWN0aW1bZ2NfbW9kZV0gPSAwOwo+Pj4gLQo+Pj4gLSAgICAgZm9yIChnY190eXBl
ID0gQkdfR0M7IGdjX3R5cGUgPD0gRkdfR0M7IGdjX3R5cGUrKykKPj4+IC0gICAgICAgICAgICAg
aWYgKHNiaS0+bmV4dF92aWN0aW1fc2VnW2djX3R5cGVdID49IHN0YXJ0KQo+Pj4gLSAgICAgICAg
ICAgICAgICAgICAgIHNiaS0+bmV4dF92aWN0aW1fc2VnW2djX3R5cGVdID0gTlVMTF9TRUdOTzsK
Pj4+IC0gICAgIG11dGV4X3VubG9jaygmRElSVFlfSShzYmkpLT5zZWdsaXN0X2xvY2spOwo+Pj4g
KyAgICAgZjJmc19yZXNldF9nY192aWN0aW1fcmVzb3VyY2Uoc2JpLCBzdGFydCwgZW5kKTsKPj4+
Cj4+PiAgICAgICAvKiBNb3ZlIG91dCBjdXJzZWdzIGZyb20gdGhlIHRhcmdldCByYW5nZSAqLwo+
Pj4gICAgICAgZm9yICh0eXBlID0gQ1VSU0VHX0hPVF9EQVRBOyB0eXBlIDwgTlJfQ1VSU0VHX1BF
UlNJU1RfVFlQRTsgdHlwZSsrKSB7Cj4+PiBkaWZmIC0tZ2l0IGEvZnMvZjJmcy9uYW1laS5jIGIv
ZnMvZjJmcy9uYW1laS5jCj4+PiBpbmRleCBjYWMwM2I4ZTkxYTEuLjhjM2I1Nzk4N2Y2YyAxMDA2
NDQKPj4+IC0tLSBhL2ZzL2YyZnMvbmFtZWkuYwo+Pj4gKysrIGIvZnMvZjJmcy9uYW1laS5jCj4+
PiBAQCAtNDI1LDYgKzQyNSw5IEBAIHN0YXRpYyBpbnQgZjJmc19saW5rKHN0cnVjdCBkZW50cnkg
Km9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLAo+Pj4gICAgICAgaWYgKCFmMmZzX2lzX2No
ZWNrcG9pbnRfcmVhZHkoc2JpKSkKPj4+ICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9TUEM7Cj4+
Pgo+Pj4gKyAgICAgaWYgKElTX0RFVklDRV9BTElBU0lORyhpbm9kZSkpCj4+PiArICAgICAgICAg
ICAgIHJldHVybiAtRVBFUk07Cj4+PiArCj4+PiAgICAgICBlcnIgPSBmc2NyeXB0X3ByZXBhcmVf
bGluayhvbGRfZGVudHJ5LCBkaXIsIGRlbnRyeSk7Cj4+PiAgICAgICBpZiAoZXJyKQo+Pj4gICAg
ICAgICAgICAgICByZXR1cm4gZXJyOwo+Pj4gQEAgLTU2OCw2ICs1NzEsOSBAQCBzdGF0aWMgaW50
IGYyZnNfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCj4+
Pgo+Pj4gICAgICAgdHJhY2VfZjJmc191bmxpbmtfZW50ZXIoZGlyLCBkZW50cnkpOwo+Pj4KPj4+
ICsgICAgIGlmIChJU19ERVZJQ0VfQUxJQVNJTkcoaW5vZGUpKQo+Pj4gKyAgICAgICAgICAgICBy
ZXR1cm4gLUVQRVJNOwo+Pj4gKwo+Pj4gICAgICAgaWYgKHVubGlrZWx5KGYyZnNfY3BfZXJyb3Io
c2JpKSkpIHsKPj4+ICAgICAgICAgICAgICAgZXJyID0gLUVJTzsKPj4+ICAgICAgICAgICAgICAg
Z290byBvdXQ7Cj4+PiBAQCAtOTQ2LDYgKzk1Miw5IEBAIHN0YXRpYyBpbnQgZjJmc19yZW5hbWUo
c3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqb2xkX2RpciwKPj4+ICAgICAg
IGJvb2wgb2xkX2lzX2RpciA9IFNfSVNESVIob2xkX2lub2RlLT5pX21vZGUpOwo+Pj4gICAgICAg
aW50IGVycjsKPj4+Cj4+PiArICAgICBpZiAoSVNfREVWSUNFX0FMSUFTSU5HKG9sZF9pbm9kZSkp
Cj4+PiArICAgICAgICAgICAgIHJldHVybiAtRVBFUk07Cj4+PiArCj4+PiAgICAgICBpZiAodW5s
aWtlbHkoZjJmc19jcF9lcnJvcihzYmkpKSkKPj4+ICAgICAgICAgICAgICAgcmV0dXJuIC1FSU87
Cj4+PiAgICAgICBpZiAoIWYyZnNfaXNfY2hlY2twb2ludF9yZWFkeShzYmkpKQo+Pj4gQEAgLTEw
MTYsNiArMTAyNSw4IEBAIHN0YXRpYyBpbnQgZjJmc19yZW5hbWUoc3RydWN0IG1udF9pZG1hcCAq
aWRtYXAsIHN0cnVjdCBpbm9kZSAqb2xkX2RpciwKPj4+ICAgICAgIH0KPj4+Cj4+PiAgICAgICBp
ZiAobmV3X2lub2RlKSB7Cj4+PiArICAgICAgICAgICAgIGlmIChJU19ERVZJQ0VfQUxJQVNJTkco
bmV3X2lub2RlKSkKPj4+ICsgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVQRVJNOwo+Pj4K
Pj4+ICAgICAgICAgICAgICAgZXJyID0gLUVOT1RFTVBUWTsKPj4+ICAgICAgICAgICAgICAgaWYg
KG9sZF9pc19kaXIgJiYgIWYyZnNfZW1wdHlfZGlyKG5ld19pbm9kZSkpCj4+PiBAQCAtMTE0Myw2
ICsxMTU0LDkgQEAgc3RhdGljIGludCBmMmZzX2Nyb3NzX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9s
ZF9kaXIsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksCj4+PiAgICAgICBpbnQgb2xkX25saW5r
ID0gMCwgbmV3X25saW5rID0gMDsKPj4+ICAgICAgIGludCBlcnI7Cj4+Pgo+Pj4gKyAgICAgaWYg
KElTX0RFVklDRV9BTElBU0lORyhvbGRfaW5vZGUpIHx8IElTX0RFVklDRV9BTElBU0lORyhuZXdf
aW5vZGUpKQo+Pj4gKyAgICAgICAgICAgICByZXR1cm4gLUVQRVJNOwo+Pj4gKwo+Pj4gICAgICAg
aWYgKHVubGlrZWx5KGYyZnNfY3BfZXJyb3Ioc2JpKSkpCj4+PiAgICAgICAgICAgICAgIHJldHVy
biAtRUlPOwo+Pj4gICAgICAgaWYgKCFmMmZzX2lzX2NoZWNrcG9pbnRfcmVhZHkoc2JpKSkKPj4+
IGRpZmYgLS1naXQgYS9mcy9mMmZzL3NlZ21lbnQuYyBiL2ZzL2YyZnMvc2VnbWVudC5jCj4+PiBp
bmRleCBkNzFkZGIzZWU5MTguLjEyMDJiZGUzMzkwYSAxMDA2NDQKPj4+IC0tLSBhL2ZzL2YyZnMv
c2VnbWVudC5jCj4+PiArKysgYi9mcy9mMmZzL3NlZ21lbnQuYwo+Pj4gQEAgLTI1MDIsMzUgKzI1
MDIsNDIgQEAgc3RhdGljIGludCB1cGRhdGVfc2l0X2VudHJ5X2Zvcl9hbGxvYyhzdHJ1Y3QgZjJm
c19zYl9pbmZvICpzYmksIHN0cnVjdCBzZWdfZW50cnkKPj4+ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGludCBzZWdubywgYmxvY2tfdCBibGthZGRyLCB1bnNpZ25lZCBp
bnQgb2Zmc2V0LCBpbnQgZGVsKQo+Pj4gIHsKPj4+ICAgICAgIGJvb2wgZXhpc3Q7Cj4+PiArICAg
ICBpbnQgZGVsX2NvdW50ID0gZGVsOwo+Pj4gKyAgICAgaW50IGk7Cj4+Pgo+Pj4gLSAgICAgZXhp
c3QgPSBmMmZzX3Rlc3RfYW5kX3NldF9iaXQob2Zmc2V0LCBzZS0+Y3VyX3ZhbGlkX21hcCk7Cj4+
PiAtICAgICBpZiAodW5saWtlbHkoZXhpc3QpKSB7Cj4+PiAtICAgICAgICAgICAgIGYyZnNfZXJy
KHNiaSwgIkJpdG1hcCB3YXMgd3JvbmdseSBzZXQsIGJsazoldSIsIGJsa2FkZHIpOwo+Pj4gLSAg
ICAgICAgICAgICBmMmZzX2J1Z19vbihzYmksIDEpOwo+Pj4gLSAgICAgICAgICAgICBzZS0+dmFs
aWRfYmxvY2tzLS07Cj4+PiAtICAgICAgICAgICAgIGRlbCA9IDA7Cj4+PiAtICAgICB9Cj4+PiAr
ICAgICBmMmZzX2J1Z19vbihzYmksIEdFVF9TRUdOTyhzYmksIGJsa2FkZHIpICE9IEdFVF9TRUdO
TyhzYmksIGJsa2FkZHIgKyBkZWxfY291bnQgLSAxKSk7Cj4+Pgo+Pj4gLSAgICAgaWYgKGYyZnNf
YmxvY2tfdW5pdF9kaXNjYXJkKHNiaSkgJiYKPj4+IC0gICAgICAgICAgICAgICAgICAgICAhZjJm
c190ZXN0X2FuZF9zZXRfYml0KG9mZnNldCwgc2UtPmRpc2NhcmRfbWFwKSkKPj4+IC0gICAgICAg
ICAgICAgc2JpLT5kaXNjYXJkX2Jsa3MtLTsKPj4+ICsgICAgIGZvciAoaSA9IDA7IGkgPCBkZWxf
Y291bnQ7IGkrKykgewo+Pj4gKyAgICAgICAgICAgICBleGlzdCA9IGYyZnNfdGVzdF9hbmRfc2V0
X2JpdChvZmZzZXQgKyBpLCBzZS0+Y3VyX3ZhbGlkX21hcCk7Cj4+PiArICAgICAgICAgICAgIGlm
ICh1bmxpa2VseShleGlzdCkpIHsKPj4+ICsgICAgICAgICAgICAgICAgICAgICBmMmZzX2Vycihz
YmksICJCaXRtYXAgd2FzIHdyb25nbHkgc2V0LCBibGs6JXUiLCBibGthZGRyICsgaSk7Cj4+PiAr
ICAgICAgICAgICAgICAgICAgICAgZjJmc19idWdfb24oc2JpLCAxKTsKPj4+ICsgICAgICAgICAg
ICAgICAgICAgICBzZS0+dmFsaWRfYmxvY2tzLS07Cj4+PiArICAgICAgICAgICAgICAgICAgICAg
ZGVsIC09IDE7Cj4+PiArICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cj4+PiArICAgICAg
ICAgICAgIH0KPj4+Cj4+PiAtICAgICAvKgo+Pj4gLSAgICAgICogU1NSIHNob3VsZCBuZXZlciBy
ZXVzZSBibG9jayB3aGljaCBpcyBjaGVja3BvaW50ZWQKPj4+IC0gICAgICAqIG9yIG5ld2x5IGlu
dmFsaWRhdGVkLgo+Pj4gLSAgICAgICovCj4+PiAtICAgICBpZiAoIWlzX3NiaV9mbGFnX3NldChz
YmksIFNCSV9DUF9ESVNBQkxFRCkpIHsKPj4+IC0gICAgICAgICAgICAgaWYgKCFmMmZzX3Rlc3Rf
YW5kX3NldF9iaXQob2Zmc2V0LCBzZS0+Y2twdF92YWxpZF9tYXApKSB7Cj4+PiAtICAgICAgICAg
ICAgICAgICAgICAgc2UtPmNrcHRfdmFsaWRfYmxvY2tzKys7Cj4+PiAtICAgICAgICAgICAgICAg
ICAgICAgaWYgKF9faXNfbGFyZ2Vfc2VjdGlvbihzYmkpKQo+Pj4gLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ2V0X3NlY19lbnRyeShzYmksIHNlZ25vKS0+Y2twdF92YWxpZF9ibG9ja3Mr
KzsKPj4+ICsgICAgICAgICAgICAgaWYgKGYyZnNfYmxvY2tfdW5pdF9kaXNjYXJkKHNiaSkgJiYK
Pj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFmMmZzX3Rlc3RfYW5kX3NldF9iaXQo
b2Zmc2V0ICsgaSwgc2UtPmRpc2NhcmRfbWFwKSkKPj4+ICsgICAgICAgICAgICAgICAgICAgICBz
YmktPmRpc2NhcmRfYmxrcy0tOwo+Pj4gKwo+Pj4gKyAgICAgICAgICAgICAvKgo+Pj4gKyAgICAg
ICAgICAgICAgKiBTU1Igc2hvdWxkIG5ldmVyIHJldXNlIGJsb2NrIHdoaWNoIGlzIGNoZWNrcG9p
bnRlZAo+Pj4gKyAgICAgICAgICAgICAgKiBvciBuZXdseSBpbnZhbGlkYXRlZC4KPj4+ICsgICAg
ICAgICAgICAgICovCj4+PiArICAgICAgICAgICAgIGlmICghaXNfc2JpX2ZsYWdfc2V0KHNiaSwg
U0JJX0NQX0RJU0FCTEVEKSkgewo+Pj4gKyAgICAgICAgICAgICAgICAgICAgIGlmICghZjJmc190
ZXN0X2FuZF9zZXRfYml0KG9mZnNldCArIGksIHNlLT5ja3B0X3ZhbGlkX21hcCkpIHsKPj4+ICsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlLT5ja3B0X3ZhbGlkX2Jsb2NrcysrOwo+Pj4g
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9faXNfbGFyZ2Vfc2VjdGlvbihzYmkp
KQo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRfc2VjX2VudHJ5
KHNiaSwgc2Vnbm8pLT5ja3B0X3ZhbGlkX2Jsb2NrcysrOwo+Pj4gKyAgICAgICAgICAgICAgICAg
ICAgIH0KPj4+ICAgICAgICAgICAgICAgfQo+Pj4gLSAgICAgfQo+Pj4KPj4+IC0gICAgIGlmICgh
ZjJmc190ZXN0X2JpdChvZmZzZXQsIHNlLT5ja3B0X3ZhbGlkX21hcCkpIHsKPj4+IC0gICAgICAg
ICAgICAgc2UtPmNrcHRfdmFsaWRfYmxvY2tzICs9IGRlbDsKPj4+IC0gICAgICAgICAgICAgaWYg
KF9faXNfbGFyZ2Vfc2VjdGlvbihzYmkpKQo+Pj4gLSAgICAgICAgICAgICAgICAgICAgIGdldF9z
ZWNfZW50cnkoc2JpLCBzZWdubyktPmNrcHRfdmFsaWRfYmxvY2tzICs9IGRlbDsKPj4+ICsgICAg
ICAgICAgICAgaWYgKCFmMmZzX3Rlc3RfYml0KG9mZnNldCArIGksIHNlLT5ja3B0X3ZhbGlkX21h
cCkpIHsKPj4+ICsgICAgICAgICAgICAgICAgICAgICBzZS0+Y2twdF92YWxpZF9ibG9ja3MgKz0g
MTsKPj4+ICsgICAgICAgICAgICAgICAgICAgICBpZiAoX19pc19sYXJnZV9zZWN0aW9uKHNiaSkp
Cj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRfc2VjX2VudHJ5KHNiaSwgc2Vn
bm8pLT5ja3B0X3ZhbGlkX2Jsb2NrcyArPSAxOwo+Pj4gKyAgICAgICAgICAgICB9Cj4+PiAgICAg
ICB9Cj4+Pgo+Pj4gICAgICAgaWYgKF9faXNfbGFyZ2Vfc2VjdGlvbihzYmkpKQo+Pj4gQEAgLTI1
ODUsOSArMjU5MiwxNCBAQCB2b2lkIGYyZnNfaW52YWxpZGF0ZV9ibG9ja3Moc3RydWN0IGYyZnNf
c2JfaW5mbyAqc2JpLCBibG9ja190IGFkZHIsCj4+PiAgICAgICB1bnNpZ25lZCBpbnQgc2Vnbm8g
PSBHRVRfU0VHTk8oc2JpLCBhZGRyKTsKPj4+ICAgICAgIHN0cnVjdCBzaXRfaW5mbyAqc2l0X2kg
PSBTSVRfSShzYmkpOwo+Pj4gICAgICAgYmxvY2tfdCBhZGRyX3N0YXJ0ID0gYWRkciwgYWRkcl9l
bmQgPSBhZGRyICsgbGVuIC0gMTsKPj4+IC0gICAgIHVuc2lnbmVkIGludCBzZWdfbnVtID0gR0VU
X1NFR05PKHNiaSwgYWRkcl9lbmQpIC0gc2Vnbm8gKyAxOwo+Pj4gKyAgICAgdW5zaWduZWQgaW50
IHNlZ19udW07Cj4+PiAgICAgICB1bnNpZ25lZCBpbnQgaSA9IDEsIG1heF9ibG9ja3MgPSBzYmkt
PmJsb2Nrc19wZXJfc2VnLCBjbnQ7Cj4+Pgo+Pj4gKyAgICAgaWYgKGxlbiA9PSAwKQo+Pj4gKyAg
ICAgICAgICAgICByZXR1cm47Cj4+PiArCj4+PiArICAgICBzZWdfbnVtID0gR0VUX1NFR05PKHNi
aSwgYWRkcl9lbmQpIC0gc2Vnbm8gKyAxOwo+Pj4gKwo+Pj4gICAgICAgZjJmc19idWdfb24oc2Jp
LCBhZGRyID09IE5VTExfQUREUik7Cj4+PiAgICAgICBpZiAoYWRkciA9PSBORVdfQUREUiB8fCBh
ZGRyID09IENPTVBSRVNTX0FERFIpCj4+PiAgICAgICAgICAgICAgIHJldHVybjsKPj4+IEBAIC0y
NjIwLDYgKzI2MzIsNTIgQEAgdm9pZCBmMmZzX2ludmFsaWRhdGVfYmxvY2tzKHN0cnVjdCBmMmZz
X3NiX2luZm8gKnNiaSwgYmxvY2tfdCBhZGRyLAo+Pj4gICAgICAgdXBfd3JpdGUoJnNpdF9pLT5z
ZW50cnlfbG9jayk7Cj4+PiAgfQo+Pj4KPj4+ICt2b2lkIGYyZnNfcmVzZXJ2ZV9kZXZpY2VfYWxp
YXMoc3RydWN0IGYyZnNfc2JfaW5mbyAqc2JpLCBibG9ja190IGFkZHIsCj4+PiArICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbGVuKQo+Pj4gK3sKPj4+ICsgICAgIHVu
c2lnbmVkIGludCBzZWdubyA9IEdFVF9TRUdOTyhzYmksIGFkZHIpOwo+Pj4gKyAgICAgc3RydWN0
IHNpdF9pbmZvICpzaXRfaSA9IFNJVF9JKHNiaSk7Cj4+PiArICAgICBibG9ja190IGFkZHJfc3Rh
cnQgPSBhZGRyLCBhZGRyX2VuZCA9IGFkZHIgKyBsZW4gLSAxOwo+Pj4gKyAgICAgdW5zaWduZWQg
aW50IHNlZ19udW07Cj4+PiArICAgICB1bnNpZ25lZCBpbnQgaSA9IDEsIG1heF9ibG9ja3MgPSBz
YmktPmJsb2Nrc19wZXJfc2VnLCBjbnQ7Cj4+PiArCj4+PiArICAgICBpZiAobGVuID09IDApCj4+
PiArICAgICAgICAgICAgIHJldHVybjsKPj4+ICsKPj4+ICsgICAgIHNlZ19udW0gPSBHRVRfU0VH
Tk8oc2JpLCBhZGRyX2VuZCkgLSBzZWdubyArIDE7Cj4+PiArCj4+PiArICAgICBkb3duX3dyaXRl
KCZzaXRfaS0+c2VudHJ5X2xvY2spOwo+Pj4gKwo+Pj4gKyAgICAgaWYgKHNlZ19udW0gPT0gMSkK
Pj4+ICsgICAgICAgICAgICAgY250ID0gbGVuOwo+Pj4gKyAgICAgZWxzZQo+Pj4gKyAgICAgICAg
ICAgICBjbnQgPSBtYXhfYmxvY2tzIC0gR0VUX0JMS09GRl9GUk9NX1NFRzAoc2JpLCBhZGRyKTsK
Pj4+ICsKPj4+ICsgICAgIGRvIHsKPj4+ICsgICAgICAgICAgICAgdXBkYXRlX3NlZ21lbnRfbXRp
bWUoc2JpLCBhZGRyX3N0YXJ0LCAwKTsKPj4+ICsgICAgICAgICAgICAgdXBkYXRlX3NpdF9lbnRy
eShzYmksIGFkZHJfc3RhcnQsIGNudCk7Cj4+PiArICAgICAgICAgICAgIF9fc2V0X3Rlc3RfYW5k
X2ludXNlKHNiaSwgc2Vnbm8pOwo+Pj4gKwo+Pj4gKyAgICAgICAgICAgICAvKiBSZW1vdmUgdGhl
IHNlZ21lbnQgZnJvbSBQUkUgKHByZWZyZWUpIHRvIHByZXZlbnQgY2hlY2twb2ludCBmcm9tIGZy
ZWVpbmcgaXQhICovCj4+PiArICAgICAgICAgICAgIG11dGV4X2xvY2soJkRJUlRZX0koc2JpKS0+
c2VnbGlzdF9sb2NrKTsKPj4+ICsgICAgICAgICAgICAgaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChz
ZWdubywgRElSVFlfSShzYmkpLT5kaXJ0eV9zZWdtYXBbUFJFXSkpCj4+PiArICAgICAgICAgICAg
ICAgICAgICAgRElSVFlfSShzYmkpLT5ucl9kaXJ0eVtQUkVdLS07Cj4+PiArICAgICAgICAgICAg
IG11dGV4X3VubG9jaygmRElSVFlfSShzYmkpLT5zZWdsaXN0X2xvY2spOwo+Pj4gKwo+Pj4gKyAg
ICAgICAgICAgICAvKiBhZGQgaXQgaW50byBkaXJ0eSBzZWdsaXN0ICovCj4+PiArICAgICAgICAg
ICAgIGxvY2F0ZV9kaXJ0eV9zZWdtZW50KHNiaSwgc2Vnbm8pOwo+Pj4gKwo+Pj4gKyAgICAgICAg
ICAgICAvKiB1cGRhdGUgQGFkZHJfc3RhcnQgYW5kIEBjbnQgYW5kIEBzZWdubyAqLwo+Pj4gKyAg
ICAgICAgICAgICBhZGRyX3N0YXJ0ID0gU1RBUlRfQkxPQ0soc2JpLCArK3NlZ25vKTsKPj4+ICsg
ICAgICAgICAgICAgaWYgKCsraSA9PSBzZWdfbnVtKQo+Pj4gKyAgICAgICAgICAgICAgICAgICAg
IGNudCA9IEdFVF9CTEtPRkZfRlJPTV9TRUcwKHNiaSwgYWRkcl9lbmQpICsgMTsKPj4+ICsgICAg
ICAgICAgICAgZWxzZQo+Pj4gKyAgICAgICAgICAgICAgICAgICAgIGNudCA9IG1heF9ibG9ja3M7
Cj4+PiArICAgICB9IHdoaWxlIChpIDw9IHNlZ19udW0pOwo+Pj4gKwo+Pj4gKyAgICAgdXBfd3Jp
dGUoJnNpdF9pLT5zZW50cnlfbG9jayk7Cj4+PiArfQo+Pj4gKwo+Pj4gIGJvb2wgZjJmc19pc19j
aGVja3BvaW50ZWRfZGF0YShzdHJ1Y3QgZjJmc19zYl9pbmZvICpzYmksIGJsb2NrX3QgYmxrYWRk
cikKPj4+ICB7Cj4+PiAgICAgICBzdHJ1Y3Qgc2l0X2luZm8gKnNpdF9pID0gU0lUX0koc2JpKTsK
Pj4+IEBAIC0yNzU4LDggKzI4MTYsMTMgQEAgc3RhdGljIGludCBpc19uZXh0X3NlZ21lbnRfZnJl
ZShzdHJ1Y3QgZjJmc19zYl9pbmZvICpzYmksCj4+PiAgICAgICB1bnNpZ25lZCBpbnQgc2Vnbm8g
PSBjdXJzZWctPnNlZ25vICsgMTsKPj4+ICAgICAgIHN0cnVjdCBmcmVlX3NlZ21hcF9pbmZvICpm
cmVlX2kgPSBGUkVFX0koc2JpKTsKPj4+Cj4+PiAtICAgICBpZiAoc2Vnbm8gPCBNQUlOX1NFR1Mo
c2JpKSAmJiBzZWdubyAlIFNFR1NfUEVSX1NFQyhzYmkpKQo+Pj4gKyAgICAgaWYgKHNlZ25vIDwg
TUFJTl9TRUdTKHNiaSkgJiYgc2Vnbm8gJSBTRUdTX1BFUl9TRUMoc2JpKSkgewo+Pj4gKyAgICAg
ICAgICAgICBpbnQgZGV2aSA9IGYyZnNfdGFyZ2V0X2RldmljZV9pbmRleChzYmksIFNUQVJUX0JM
T0NLKHNiaSwgc2Vnbm8pKTsKPj4+ICsKPj4+ICsgICAgICAgICAgICAgaWYgKGYyZnNfZGV2X2lz
X3Jlc2VydmluZyhzYmksIGRldmkpKQo+Pj4gKyAgICAgICAgICAgICAgICAgICAgIHJldHVybiAw
Owo+Pj4gICAgICAgICAgICAgICByZXR1cm4gIXRlc3RfYml0KHNlZ25vLCBmcmVlX2ktPmZyZWVf
c2VnbWFwKTsKPj4+ICsgICAgIH0KPj4+ICAgICAgIHJldHVybiAwOwo+Pj4gIH0KPj4+Cj4+PiBA
QCAtMjc3OCw3ICsyODQxLDggQEAgc3RhdGljIGludCBnZXRfbmV3X3NlZ21lbnQoc3RydWN0IGYy
ZnNfc2JfaW5mbyAqc2JpLAo+Pj4gICAgICAgdW5zaWduZWQgaW50IGFsbG9jX3BvbGljeSA9IHNi
aS0+YWxsb2NhdGVfc2VjdGlvbl9wb2xpY3k7Cj4+PiAgICAgICB1bnNpZ25lZCBpbnQgYWxsb2Nf
aGludCA9IHNiaS0+YWxsb2NhdGVfc2VjdGlvbl9oaW50Owo+Pj4gICAgICAgYm9vbCBpbml0ID0g
dHJ1ZTsKPj4+IC0gICAgIGludCBpOwo+Pj4gKyAgICAgYm9vbCBsb29wZWQgPSBmYWxzZTsKPj4+
ICsgICAgIGludCBpLCBkZXZpOwo+Pj4gICAgICAgaW50IHJldCA9IDA7Cj4+Pgo+Pj4gICAgICAg
c3Bpbl9sb2NrKCZmcmVlX2ktPnNlZ21hcF9sb2NrKTsKPj4+IEBAIC0yNzkxLDggKzI4NTUsMTMg
QEAgc3RhdGljIGludCBnZXRfbmV3X3NlZ21lbnQoc3RydWN0IGYyZnNfc2JfaW5mbyAqc2JpLAo+
Pj4gICAgICAgaWYgKCFuZXdfc2VjICYmICgoKm5ld3NlZyArIDEpICUgU0VHU19QRVJfU0VDKHNi
aSkpKSB7Cj4+PiAgICAgICAgICAgICAgIHNlZ25vID0gZmluZF9uZXh0X3plcm9fYml0KGZyZWVf
aS0+ZnJlZV9zZWdtYXAsCj4+PiAgICAgICAgICAgICAgICAgICAgICAgR0VUX1NFR19GUk9NX1NF
QyhzYmksIGhpbnQgKyAxKSwgKm5ld3NlZyArIDEpOwo+Pj4gLSAgICAgICAgICAgICBpZiAoc2Vn
bm8gPCBHRVRfU0VHX0ZST01fU0VDKHNiaSwgaGludCArIDEpKQo+Pj4gKyAgICAgICAgICAgICBp
ZiAoc2Vnbm8gPCBHRVRfU0VHX0ZST01fU0VDKHNiaSwgaGludCArIDEpKSB7Cj4+PiArICAgICAg
ICAgICAgICAgICAgICAgZGV2aSA9IGYyZnNfdGFyZ2V0X2RldmljZV9pbmRleChzYmksIFNUQVJU
X0JMT0NLKHNiaSwgc2Vnbm8pKTsKPj4+ICsKPj4+ICsgICAgICAgICAgICAgICAgICAgICBpZiAo
ZjJmc19kZXZfaXNfYWxsb2NfYmxvY2tlZChzYmksIGRldmksIHBpbm5pbmcpKQo+Pj4gKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ290byBmaW5kX290aGVyX3pvbmU7Cj4+PiAgICAgICAg
ICAgICAgICAgICAgICAgZ290byBnb3RfaXQ7Cj4+PiArICAgICAgICAgICAgIH0KPj4+ICAgICAg
IH0KPj4+Cj4+PiAgI2lmZGVmIENPTkZJR19CTEtfREVWX1pPTkVECj4+PiBAQCAtMjgyOCwzMyAr
Mjg5Nyw0MiBAQCBzdGF0aWMgaW50IGdldF9uZXdfc2VnbWVudChzdHJ1Y3QgZjJmc19zYl9pbmZv
ICpzYmksCj4+PiAgZmluZF9vdGhlcl96b25lOgo+Pj4gICAgICAgc2Vjbm8gPSBmaW5kX25leHRf
emVyb19iaXQoZnJlZV9pLT5mcmVlX3NlY21hcCwgTUFJTl9TRUNTKHNiaSksIGhpbnQpOwo+Pj4K
Pj4+IC0jaWZkZWYgQ09ORklHX0JMS19ERVZfWk9ORUQKPj4+IC0gICAgIGlmIChzZWNubyA+PSBN
QUlOX1NFQ1Moc2JpKSAmJiBmMmZzX3NiX2hhc19ibGt6b25lZChzYmkpKSB7Cj4+PiAtICAgICAg
ICAgICAgIC8qIFdyaXRlIG9ubHkgdG8gc2VxdWVudGlhbCB6b25lcyAqLwo+Pj4gLSAgICAgICAg
ICAgICBpZiAoc2JpLT5ibGt6b25lX2FsbG9jX3BvbGljeSA9PSBCTEtaT05FX0FMTE9DX09OTFlf
U0VRKSB7Cj4+PiAtICAgICAgICAgICAgICAgICAgICAgaGludCA9IEdFVF9TRUNfRlJPTV9TRUco
c2JpLCBzYmktPmZpcnN0X3NlcV96b25lX3NlZ25vKTsKPj4+IC0gICAgICAgICAgICAgICAgICAg
ICBzZWNubyA9IGZpbmRfbmV4dF96ZXJvX2JpdChmcmVlX2ktPmZyZWVfc2VjbWFwLCBNQUlOX1NF
Q1Moc2JpKSwgaGludCk7Cj4+PiAtICAgICAgICAgICAgIH0gZWxzZQo+Pj4gLSAgICAgICAgICAg
ICAgICAgICAgIHNlY25vID0gZmluZF9maXJzdF96ZXJvX2JpdChmcmVlX2ktPmZyZWVfc2VjbWFw
LAo+Pj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBNQUlOX1NFQ1Moc2JpKSk7Cj4+PiAtICAgICAgICAgICAgIGlmIChzZWNubyA+
PSBNQUlOX1NFQ1Moc2JpKSkgewo+Pj4gLSAgICAgICAgICAgICAgICAgICAgIHJldCA9IC1FTk9T
UEM7Cj4+PiAtICAgICAgICAgICAgICAgICAgICAgZjJmc19idWdfb24oc2JpLCAxKTsKPj4+IC0g
ICAgICAgICAgICAgICAgICAgICBnb3RvIG91dF91bmxvY2s7Cj4+PiAtICAgICAgICAgICAgIH0K
Pj4+IC0gICAgIH0KPj4+IC0jZW5kaWYKPj4+IC0KPj4+ICAgICAgIGlmIChzZWNubyA+PSBNQUlO
X1NFQ1Moc2JpKSkgewo+Pj4gLSAgICAgICAgICAgICBzZWNubyA9IGZpbmRfZmlyc3RfemVyb19i
aXQoZnJlZV9pLT5mcmVlX3NlY21hcCwKPj4+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIE1BSU5fU0VDUyhzYmkpKTsKPj4+IC0gICAgICAgICAg
ICAgaWYgKHNlY25vID49IE1BSU5fU0VDUyhzYmkpKSB7Cj4+PiArICAgICAgICAgICAgIGlmIChs
b29wZWQpIHsKPj4+ICAgICAgICAgICAgICAgICAgICAgICByZXQgPSAtRU5PU1BDOwo+Pj4gICAg
ICAgICAgICAgICAgICAgICAgIGYyZnNfYnVnX29uKHNiaSwgIXBpbm5pbmcpOwo+Pj4gICAgICAg
ICAgICAgICAgICAgICAgIGdvdG8gb3V0X3VubG9jazsKPj4+ICAgICAgICAgICAgICAgfQo+Pj4g
KyAgICAgICAgICAgICBoaW50ID0gMDsKPj4+ICsjaWZkZWYgQ09ORklHX0JMS19ERVZfWk9ORUQK
Pj4+ICsgICAgICAgICAgICAgLyogV3JpdGUgb25seSB0byBzZXF1ZW50aWFsIHpvbmVzICovCj4+
PiArICAgICAgICAgICAgIGlmIChmMmZzX3NiX2hhc19ibGt6b25lZChzYmkpICYmCj4+PiArICAg
ICAgICAgICAgICAgICAgICAgc2JpLT5ibGt6b25lX2FsbG9jX3BvbGljeSA9PSBCTEtaT05FX0FM
TE9DX09OTFlfU0VRKQo+Pj4gKyAgICAgICAgICAgICAgICAgICAgIGhpbnQgPSBHRVRfU0VDX0ZS
T01fU0VHKHNiaSwgc2JpLT5maXJzdF9zZXFfem9uZV9zZWdubyk7Cj4+PiArI2VuZGlmCj4+PiAr
ICAgICAgICAgICAgIGxvb3BlZCA9IHRydWU7Cj4+PiArICAgICAgICAgICAgIGdvdG8gZmluZF9v
dGhlcl96b25lOwo+Pj4gICAgICAgfQo+Pj4gKwo+Pj4gICAgICAgc2Vnbm8gPSBHRVRfU0VHX0ZS
T01fU0VDKHNiaSwgc2Vjbm8pOwo+Pj4gKwo+Pj4gKyAgICAgZGV2aSA9IGYyZnNfdGFyZ2V0X2Rl
dmljZV9pbmRleChzYmksIFNUQVJUX0JMT0NLKHNiaSwgc2Vnbm8pKTsKPj4+ICsKPj4+ICsgICAg
IGlmIChmMmZzX2Rldl9pc19hbGxvY19ibG9ja2VkKHNiaSwgZGV2aSwgcGlubmluZykpIHsKPj4+
ICsgICAgICAgICAgICAgd2hpbGUgKGRldmkgPCBzYmktPnNfbmRldnMgJiYKPj4+ICsgICAgICAg
ICAgICAgICAgICAgICBmMmZzX2Rldl9pc19hbGxvY19ibG9ja2VkKHNiaSwgZGV2aSwgcGlubmlu
ZykpIHsKPj4+ICsgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZW5kX3NlZ25vID0g
R0VUX1NFR05PKHNiaSwgRkRFVihkZXZpKS5lbmRfYmxrKTsKPj4+ICsKPj4+ICsgICAgICAgICAg
ICAgICAgICAgICBoaW50ID0gR0VUX1NFQ19GUk9NX1NFRyhzYmksIGVuZF9zZWdubykgKyAxOwo+
Pj4gKyAgICAgICAgICAgICAgICAgICAgIGRldmkrKzsKPj4+ICsgICAgICAgICAgICAgfQo+Pj4g
KyAgICAgICAgICAgICBnb3RvIGZpbmRfb3RoZXJfem9uZTsKPj4+ICsgICAgIH0KPj4+ICsKPj4+
ICsgICAgIGlmIChzZWNfdXNhZ2VfY2hlY2soc2JpLCBzZWNubykpIHsKPj4+ICsgICAgICAgICAg
ICAgaGludCA9IHNlY25vICsgMTsKPj4+ICsgICAgICAgICAgICAgZ290byBmaW5kX290aGVyX3pv
bmU7Cj4+PiArICAgICB9Cj4+PiAgICAgICB6b25lbm8gPSBHRVRfWk9ORV9GUk9NX1NFQyhzYmks
IHNlY25vKTsKPj4+Cj4+PiAgICAgICAvKiBnaXZlIHVwIG9uIGZpbmRpbmcgYW5vdGhlciB6b25l
ICovCj4+PiBkaWZmIC0tZ2l0IGEvZnMvZjJmcy9zZWdtZW50LmggYi9mcy9mMmZzL3NlZ21lbnQu
aAo+Pj4gaW5kZXggYjBjMDZiMzU4MGI0Li4xMDc1MDhhZTdlYjMgMTAwNjQ0Cj4+PiAtLS0gYS9m
cy9mMmZzL3NlZ21lbnQuaAo+Pj4gKysrIGIvZnMvZjJmcy9zZWdtZW50LmgKPj4+IEBAIC05NTQs
MTAgKzk1NCwzMiBAQCBzdGF0aWMgaW5saW5lIGJsb2NrX3Qgc3VtX2Jsa19hZGRyKHN0cnVjdCBm
MmZzX3NiX2luZm8gKnNiaSwgaW50IGJhc2UsIGludCB0eXBlKQo+Pj4gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLSAoYmFzZSArIDEpICsgdHlwZTsKPj4+ICB9Cj4+Pgo+Pj4gK3N0YXRp
YyBpbmxpbmUgYm9vbCBmMmZzX2Rldl9pc19yZXNlcnZpbmcoc3RydWN0IGYyZnNfc2JfaW5mbyAq
c2JpLCBpbnQgZGV2aSkKPj4+ICt7Cj4+PiArICAgICBpZiAoIWYyZnNfc2JfaGFzX2RldmljZV9h
bGlhcyhzYmkpKQo+Pj4gKyAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cj4+PiArICAgICByZXR1
cm4gRkRFVihkZXZpKS5pc19yZXNlcnZpbmc7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBpbmxp
bmUgYm9vbCBmMmZzX2Rldl9pc19hbGxvY19ibG9ja2VkKHN0cnVjdCBmMmZzX3NiX2luZm8gKnNi
aSwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRldmksIGJv
b2wgcGlubmluZykKPj4+ICt7Cj4+PiArICAgICBpZiAoIWYyZnNfc2JfaGFzX2RldmljZV9hbGlh
cyhzYmkpKQo+Pj4gKyAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cj4+PiArICAgICByZXR1cm4g
KHBpbm5pbmcgJiYgRkRFVihkZXZpKS5oYXNfYWxpYXMpIHx8IEZERVYoZGV2aSkuaXNfcmVzZXJ2
aW5nOwo+Pj4gK30KPj4+ICsKPj4+ICBzdGF0aWMgaW5saW5lIGJvb2wgc2VjX3VzYWdlX2NoZWNr
KHN0cnVjdCBmMmZzX3NiX2luZm8gKnNiaSwgdW5zaWduZWQgaW50IHNlY25vKQo+Pj4gIHsKPj4+
ICAgICAgIGlmIChpc19jdXJzZWMoc2JpLCBzZWNubykgfHwgKHNiaS0+Y3VyX3ZpY3RpbV9zZWMg
PT0gc2Vjbm8pKQo+Pj4gICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKPj4+ICsgICAgIGlmIChm
MmZzX3NiX2hhc19kZXZpY2VfYWxpYXMoc2JpKSkgewo+Pj4gKyAgICAgICAgICAgICBibG9ja190
IHN0YXJ0X2JsayA9IFNUQVJUX0JMT0NLKHNiaSwgR0VUX1NFR19GUk9NX1NFQyhzYmksIHNlY25v
KSk7Cj4+PiArICAgICAgICAgICAgIGludCBkZXZpID0gZjJmc190YXJnZXRfZGV2aWNlX2luZGV4
KHNiaSwgc3RhcnRfYmxrKTsKPj4+ICsKPj4+ICsgICAgICAgICAgICAgaWYgKGYyZnNfZGV2X2lz
X3Jlc2VydmluZyhzYmksIGRldmkpKQo+Pj4gKyAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOwo+Pj4gKyAgICAgfQo+Pj4gICAgICAgcmV0dXJuIGZhbHNlOwo+Pj4gIH0KPj4+Cj4+PiBk
aWZmIC0tZ2l0IGEvZnMvZjJmcy9zdXBlci5jIGIvZnMvZjJmcy9zdXBlci5jCj4+PiBpbmRleCBj
NDQ4ZDk5MmZmMmEuLmJjYTE0NzVjYjU3MyAxMDA2NDQKPj4+IC0tLSBhL2ZzL2YyZnMvc3VwZXIu
Ywo+Pj4gKysrIGIvZnMvZjJmcy9zdXBlci5jCj4+PiBAQCAtNTAwMSw2ICs1MDAxLDM4IEBAIHN0
YXRpYyB2b2lkIGYyZnNfdHVuaW5nX3BhcmFtZXRlcnMoc3RydWN0IGYyZnNfc2JfaW5mbyAqc2Jp
KQo+Pj4gICAgICAgc2JpLT5yZWFkZGlyX3JhID0gdHJ1ZTsKPj4+ICB9Cj4+Pgo+Pj4gK3N0YXRp
YyB2b2lkIGYyZnNfcmVzdG9yZV9kZXZpY2VfYWxpYXMoc3RydWN0IGYyZnNfc2JfaW5mbyAqc2Jp
KQo+Pj4gK3sKPj4+ICsgICAgIHN0cnVjdCBpbm9kZSAqcm9vdCA9IGRfaW5vZGUoc2JpLT5zYi0+
c19yb290KTsKPj4+ICsgICAgIHN0cnVjdCBmMmZzX2Rpcl9lbnRyeSAqZGU7Cj4+PiArICAgICBz
dHJ1Y3QgZm9saW8gKmZvbGlvOwo+Pj4gKyAgICAgaW50IGk7Cj4+PiArCj4+PiArICAgICBpZiAo
IWYyZnNfc2JfaGFzX2RldmljZV9hbGlhcyhzYmkpKQo+Pj4gKyAgICAgICAgICAgICByZXR1cm47
Cj4+PiArCj4+PiArICAgICBmb3IgKGkgPSAxOyBpIDwgc2JpLT5zX25kZXZzOyBpKyspIHsKPj4+
ICsgICAgICAgICAgICAgY2hhciAqbmFtZSA9IHN0cnJjaHIoRkRFVihpKS5wYXRoLCAnLycpOwo+
Pj4gKyAgICAgICAgICAgICBzdHJ1Y3QgcXN0ciBxc3RyOwo+Pj4gKwo+Pj4gKyAgICAgICAgICAg
ICBuYW1lID0gbmFtZSA/IG5hbWUgKyAxIDogRkRFVihpKS5wYXRoOwo+Pj4gKyAgICAgICAgICAg
ICBxc3RyLm5hbWUgPSBuYW1lOwo+Pj4gKyAgICAgICAgICAgICBxc3RyLmxlbiA9IHN0cmxlbihu
YW1lKTsKPj4+ICsKPj4+ICsgICAgICAgICAgICAgZGUgPSBmMmZzX2ZpbmRfZW50cnkocm9vdCwg
JnFzdHIsICZmb2xpbyk7Cj4+PiArICAgICAgICAgICAgIGlmIChkZSkgewo+Pgo+PiBUcml2aWFs
IGNsZWF1cCB0byBhdm9pZCBsb25nIGxpbmUuCj4+Cj4+IGlmICghZGUpCj4+ICAgICAgICAgY29u
dGludWU7Cj4+Cj4+IFRoYW5rcywKPj4KPj4+ICsgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg
aW5vZGUgKmlub2RlID0gZjJmc19pZ2V0KHNiaS0+c2IsIGxlMzJfdG9fY3B1KGRlLT5pbm8pKTsK
Pj4+ICsKPj4+ICsgICAgICAgICAgICAgICAgICAgICBpZiAoIUlTX0VSUihpbm9kZSkpIHsKPj4+
ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJU19ERVZJQ0VfQUxJQVNJTkcoaW5v
ZGUpKQo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGREVWKGkpLmhh
c19hbGlhcyA9IHRydWU7Cj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcHV0KGlu
b2RlKTsKPj4+ICsgICAgICAgICAgICAgICAgICAgICB9Cj4+PiArICAgICAgICAgICAgICAgICAg
ICAgZjJmc19mb2xpb19wdXQoZm9saW8sIDApOwo+Pj4gKyAgICAgICAgICAgICB9Cj4+PiArICAg
ICB9Cj4+PiArfQo+Pj4gKwo+Pj4gIHN0YXRpYyBpbnQgZjJmc19maWxsX3N1cGVyKHN0cnVjdCBz
dXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYykKPj4+ICB7Cj4+PiAgICAgICBz
dHJ1Y3QgZjJmc19mc19jb250ZXh0ICpjdHggPSBmYy0+ZnNfcHJpdmF0ZTsKPj4+IEBAIC01MjA5
LDYgKzUyNDEsNyBAQCBzdGF0aWMgaW50IGYyZnNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxv
Y2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpCj4+PiAgICAgICBzYmktPmxhc3RfdmFsaWRf
YmxvY2tfY291bnQgPSBzYmktPnRvdGFsX3ZhbGlkX2Jsb2NrX2NvdW50Owo+Pj4gICAgICAgc2Jp
LT5yZXNlcnZlZF9ibG9ja3MgPSAwOwo+Pj4gICAgICAgc2JpLT5jdXJyZW50X3Jlc2VydmVkX2Js
b2NrcyA9IDA7Cj4+PiArICAgICBzYmktPmFsaWFzX3Jlc2VydmVkX2Jsb2NrcyA9IDA7Cj4+PiAg
ICAgICBsaW1pdF9yZXNlcnZlX3Jvb3Qoc2JpKTsKPj4+ICAgICAgIGFkanVzdF91bnVzYWJsZV9j
YXBfcGVyYyhzYmkpOwo+Pj4KPj4+IEBAIC01NDM2LDYgKzU0NjksOCBAQCBzdGF0aWMgaW50IGYy
ZnNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAq
ZmMpCj4+PiAgICAgICBmMmZzX3VwZGF0ZV90aW1lKHNiaSwgUkVRX1RJTUUpOwo+Pj4gICAgICAg
Y2xlYXJfc2JpX2ZsYWcoc2JpLCBTQklfQ1BfRElTQUJMRURfUVVJQ0spOwo+Pj4KPj4+ICsgICAg
IGYyZnNfcmVzdG9yZV9kZXZpY2VfYWxpYXMoc2JpKTsKPj4+ICsKPj4+ICAgICAgIHNiaS0+dW1v
dW50X2xvY2tfaG9sZGVyID0gTlVMTDsKPj4+ICAgICAgIHJldHVybiAwOwo+Pj4KPj4+IGRpZmYg
LS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvZjJmcy5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2Yy
ZnMuaAo+Pj4gaW5kZXggNzk1ZTI2MjU4MzU1Li40NDA5YWRhMmZlY2IgMTAwNjQ0Cj4+PiAtLS0g
YS9pbmNsdWRlL3VhcGkvbGludXgvZjJmcy5oCj4+PiArKysgYi9pbmNsdWRlL3VhcGkvbGludXgv
ZjJmcy5oCj4+PiBAQCAtNDUsNiArNDUsOSBAQAo+Pj4gICNkZWZpbmUgRjJGU19JT0NfU1RBUlRf
QVRPTUlDX1JFUExBQ0UgICAgICAgIF9JTyhGMkZTX0lPQ1RMX01BR0lDLCAyNSkKPj4+ICAjZGVm
aW5lIEYyRlNfSU9DX0dFVF9ERVZfQUxJQVNfRklMRSAgX0lPUihGMkZTX0lPQ1RMX01BR0lDLCAy
NiwgX191MzIpCj4+PiAgI2RlZmluZSBGMkZTX0lPQ19JT19QUklPICAgICAgICAgICAgIF9JT1co
RjJGU19JT0NUTF9NQUdJQywgMjcsIF9fdTMyKQo+Pj4gKyNkZWZpbmUgRjJGU19JT0NfUkVTRVJW
RV9ERVZfQUxJQVMgICBfSU8oRjJGU19JT0NUTF9NQUdJQywgMjgpCj4+PiArI2RlZmluZSBGMkZT
X0lPQ19SRUxFQVNFX0RFVl9BTElBUyAgIF9JTyhGMkZTX0lPQ1RMX01BR0lDLCAyOSkKPj4+ICsj
ZGVmaW5lIEYyRlNfSU9DX0dFVF9ERVZfQUxJQVNfU1RBVFVTICAgICAgICBfSU9SKEYyRlNfSU9D
VExfTUFHSUMsIDMwLCBfX3UzMikKPj4+Cj4+PiAgLyoKPj4+ICAgKiBzaG91bGQgYmUgc2FtZSBh
cyBYRlNfSU9DX0dPSU5HRE9XTi4KPj4+IEBAIC03MCw2ICs3MywxMCBAQCBlbnVtIHsKPj4+ICAg
ICAgIEYyRlNfSU9QUklPX01BWCwKPj4+ICB9Owo+Pj4KPj4+ICsvKiBmb3IgRjJGU19JT0NfR0VU
X0RFVl9BTElBU19TVEFUVVMgKi8KPj4+ICsjZGVmaW5lIEYyRlNfREVWX0FMSUFTX1NUQVRVU19S
RUxFQVNFRCAgICAgICAwCj4+PiArI2RlZmluZSBGMkZTX0RFVl9BTElBU19TVEFUVVNfUkVTRVJW
RUQgICAgICAgMQo+Pj4gKwo+Pj4gIHN0cnVjdCBmMmZzX2djX3JhbmdlIHsKPj4+ICAgICAgIF9f
dTMyIHN5bmM7Cj4+PiAgICAgICBfX3U2NCBzdGFydDsKPj4KCgoKX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTGludXgtZjJmcy1kZXZlbCBtYWlsaW5nIGxp
c3QKTGludXgtZjJmcy1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKaHR0cHM6Ly9saXN0cy5z
b3VyY2Vmb3JnZS5uZXQvbGlzdHMvbGlzdGluZm8vbGludXgtZjJmcy1kZXZlbAo=