[PATCH v6 08/17] spi: cadence-quadspi: add PHY tuning support

Santhosh Kumar K <[email protected]> Thu, 23 Jul 2026 16:32:10 +0530
Newsgroups org.infradead.lists.linux-mtd,org.kernel.vger.linux-devicetree,org.kernel.vger.linux-kernel,org.kernel.vger.linux-spi
Message-ID <[email protected]>
VGhlIENhZGVuY2UgUVNQSSBjb250cm9sbGVyIHN1cHBvcnRzIGEgZGVsYXktbGluZSBQSFkgZm9y
IGhpZ2gtc3BlZWQKb3BlcmF0aW9uLiBXaXRob3V0IGNhbGlicmF0aW9uIHRoZSBQSFkgaXMgdW51
c2VkIGFuZCByZWFkIGNhcHR1cmUgcmVsaWVzCm9uIGEgZml4ZWQgZGVsYXksIGxpbWl0aW5nIHRo
cm91Z2hwdXQgYXQgZnJlcXVlbmNpZXMgYWJvdmUgdGhlIGJhc2UKb3BlcmF0aW5nIHNwZWVkLgoK
QWRkIGFuIGV4ZWN1dGVfdHVuaW5nIGNhbGxiYWNrIHRoYXQgcGVyZm9ybXMgZGVsYXktbGluZSBj
YWxpYnJhdGlvbiB1c2luZwphIGtub3duIGRhdGEgcGF0dGVybiB3cml0dGVuIHRvIGEgZGVkaWNh
dGVkIGZsYXNoIHJlZ2lvbi4gVGhlIHBhdHRlcm4gaXMKZWl0aGVyIHJlYWQgZnJvbSBhIE5PUiBw
YXJ0aXRpb24gaWRlbnRpZmllZCBieSB0aGUgRFQgcHJvcGVydHkKc3BpLXBoeS1wYXR0ZXJuLXBh
cnRpdGlvbiwgb3Igd3JpdHRlbiB0byB0aGUgTkFORCBwYWdlIGNhY2hlIGJlZm9yZQplYWNoIGNh
bGlicmF0aW9uIHJlYWQuCgpGb3IgRERSIHByb3RvY29scyAoOEQtOEQtOEQpIGEgMkQgc3dlZXAg
b2YgKHJ4X2RlbGF5LCB0eF9kZWxheSkgcGFpcnMKaXMgcGVyZm9ybWVkIHRvIGZpbmQgdGhlIHdp
ZGVzdCBwYXNzaW5nIHJlZ2lvbiBpbiB0aGUgY29tYmluZWQgUlgvVFgKc3BhY2UuIEJpbmFyeSBz
ZWFyY2ggbG9jYXRlcyB0aGUgZ2FwIGJvdW5kYXJ5IGJldHdlZW4gcGFzc2luZyByZWdpb25zCndo
ZW4gdHdvIHNlcGFyYXRlIHdpbmRvd3MgZXhpc3Q7IHRoZSBmaW5hbCBvcGVyYXRpbmcgcG9pbnQg
aXMgcGxhY2VkIGF0CnRoZSBjZW50cmUgb2YgdGhlIGxhcmdlciByZWdpb24gd2l0aCBhIHNtYWxs
IHRlbXBlcmF0dXJlLWRlcGVuZGVudApvZmZzZXQuCgpGb3IgU0RSIHByb3RvY29scyBhIDFEIHN3
ZWVwIG9mIHRoZSBSWCBkZWxheSBpcyBzdWZmaWNpZW50LiBUd28gd2luZG93cwphdCBhZGphY2Vu
dCByZWFkX2RlbGF5IHZhbHVlcyBhcmUgbWVhc3VyZWQ7IHRoZSB3aWRlciBvbmUncyBtaWRwb2lu
dCBpcwpzZWxlY3RlZC4KClRoZSB0dW5pbmcgaW5mcmFzdHJ1Y3R1cmUgaXMgcGxhdGZvcm0tc3Bl
Y2lmaWM6IG9ubHkgYW02NTQtYmFzZWQgT1NQSQpjb250cm9sbGVycyBwb3B1bGF0ZSB0aGUgZXhl
Y3V0ZV90dW5pbmcgaG9vay4gQWxsIG90aGVyIHBsYXRmb3JtIGRhdGEKZW50cmllcyByZXR1cm4g
LUVPUE5PVFNVUFAgYW5kIGFyZSB1bmFmZmVjdGVkLgoKVGhlIGNhbGlicmF0aW9uIHRhcmdldCBp
cyBzb3VyY2VkIGZyb20gc3BpLT5wb3N0X2NvbmZpZ19tYXhfc3BlZWRfaHosCnBvcHVsYXRlZCBi
eSB0aGUgU1BJIGNvcmUgZnJvbSB0aGUgc3BpLW1heC1wb3N0LWNvbmZpZy1mcmVxdWVuY3ktaHog
RFQKcHJvcGVydHkuIFR1bmluZyBpcyBza2lwcGVkIHdoZW4gcG9zdF9jb25maWdfbWF4X3NwZWVk
X2h6IGlzIHplcm8uCgpTaWduZWQtb2ZmLWJ5OiBTYW50aG9zaCBLdW1hciBLIDxzLWs2QHRpLmNv
bT4KLS0tCiBkcml2ZXJzL3NwaS9zcGktY2FkZW5jZS1xdWFkc3BpLmMgfCAxNzQ1ICsrKysrKysr
KysrKysrKysrKysrKysrKysrKystCiAxIGZpbGUgY2hhbmdlZCwgMTczNCBpbnNlcnRpb25zKCsp
LCAxMSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGktY2FkZW5jZS1x
dWFkc3BpLmMgYi9kcml2ZXJzL3NwaS9zcGktY2FkZW5jZS1xdWFkc3BpLmMKaW5kZXggMDQ2ZmE1
ZDY5YjBmLi4yMmE1Yzg4YmJkOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaS1jYWRlbmNl
LXF1YWRzcGkuYworKysgYi9kcml2ZXJzL3NwaS9zcGktY2FkZW5jZS1xdWFkc3BpLmMKQEAgLTYs
NiArNiw3IEBACiAvLyBDb3B5cmlnaHQgSW50ZWwgQ29ycG9yYXRpb24gKEMpIDIwMTktMjAyMC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIENvcHlyaWdodCAoQykgMjAyMCBUZXhhcyBJbnN0cnVt
ZW50cyBJbmNvcnBvcmF0ZWQgLSBodHRwOi8vd3d3LnRpLmNvbQogCisjaW5jbHVkZSA8bGludXgv
Yml0ZmllbGQuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9jb21w
bGV0aW9uLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KQEAgLTY1LDE1ICs2NiwyNiBAQCBl
bnVtIHsKIAogc3RydWN0IGNxc3BpX3N0OwogCitzdHJ1Y3QgcGh5X3NldHRpbmcgeworCXU4CQkJ
cng7CisJdTgJCQl0eDsKKwl1OAkJCXJlYWRfZGVsYXk7Cit9OworCiBzdHJ1Y3QgY3FzcGlfZmxh
c2hfcGRhdGEgewotCXN0cnVjdCBjcXNwaV9zdAkqY3FzcGk7Ci0JdTMyCQljbGtfcmF0ZTsKLQl1
MzIJCXJlYWRfZGVsYXk7Ci0JdTMyCQl0c2hzbF9uczsKLQl1MzIJCXRzZDJkX25zOwotCXUzMgkJ
dGNoc2hfbnM7Ci0JdTMyCQl0c2xjaF9uczsKLQl1OAkJY3M7CisJc3RydWN0IGNxc3BpX3N0CQkq
Y3FzcGk7CisJdTMyCQkJcmVhZF9kZWxheTsKKwl1MzIJCQl0c2hzbF9uczsKKwl1MzIJCQl0c2Qy
ZF9uczsKKwl1MzIJCQl0Y2hzaF9uczsKKwl1MzIJCQl0c2xjaF9uczsKKwlib29sCQkJdXNlX2Rx
czsKKwlib29sCQkJdXNlX3R1bmVkX3BoeTsKKwl1OAkJCWNzOworCXN0cnVjdCBwaHlfc2V0dGlu
ZwlwaHlfc2V0dGluZzsKKwlzdHJ1Y3Qgc3BpX21lbV9vcAlwaHlfcmVhZF9vcDsKKwlzdHJ1Y3Qg
c3BpX21lbV9vcAlwaHlfd3JpdGVfb3A7CisJdTMyCQkJcGh5X3BhdHRlcm5fcGFydGl0aW9uX29m
ZnNldDsKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrX2J1bGtfZGF0YSBjcXNwaV9jbGtz
W0NMS19RU1BJX05VTV0gPSB7CkBAIC0xMjksMTIgKzE0MSwxNSBAQCBzdHJ1Y3QgY3FzcGlfZHJp
dmVyX3BsYXRkYXRhIHsKIAlpbnQgKCppbmRpcmVjdF9yZWFkX2RtYSkoc3RydWN0IGNxc3BpX2Zs
YXNoX3BkYXRhICpmX3BkYXRhLAogCQkJCSB1X2NoYXIgKnJ4YnVmLCBsb2ZmX3QgZnJvbV9hZGRy
LCBzaXplX3Qgbl9yeCk7CiAJdTMyICgqZ2V0X2RtYV9zdGF0dXMpKHN0cnVjdCBjcXNwaV9zdCAq
Y3FzcGkpOworCWludCAoKmV4ZWN1dGVfdHVuaW5nKShzdHJ1Y3Qgc3BpX21lbSAqbWVtLCBzdHJ1
Y3Qgc3BpX21lbV9vcCAqcmVhZF9vcCwKKwkJCSAgICAgIHN0cnVjdCBzcGlfbWVtX29wICp3cml0
ZV9vcCk7CiB9OwogCiAvKiBPcGVyYXRpb24gdGltZW91dCB2YWx1ZSAqLwogI2RlZmluZSBDUVNQ
SV9USU1FT1VUX01TCQkJNTAwCiAjZGVmaW5lIENRU1BJX1JFQURfVElNRU9VVF9NUwkJCTEwCiAj
ZGVmaW5lIENRU1BJX0JVU1lXQUlUX1RJTUVPVVRfVVMJCTUwMAorI2RlZmluZSBDUVNQSV9ETExf
VElNRU9VVF9VUwkJCTMwMAogCiAvKiBSdW50aW1lX3BtIGF1dG9zdXNwZW5kIGRlbGF5ICovCiAj
ZGVmaW5lIENRU1BJX0FVVE9TVVNQRU5EX1RJTUVPVVQJCTIwMDAKQEAgLTE0OCwxMiArMTYzLDE0
IEBAIHN0cnVjdCBjcXNwaV9kcml2ZXJfcGxhdGRhdGEgewogLyogUmVnaXN0ZXIgbWFwICovCiAj
ZGVmaW5lIENRU1BJX1JFR19DT05GSUcJCQkweDAwCiAjZGVmaW5lIENRU1BJX1JFR19DT05GSUdf
RU5BQkxFX01BU0sJCUJJVCgwKQorI2RlZmluZSBDUVNQSV9SRUdfQ09ORklHX1BIWV9FTgkJCUJJ
VCgzKQogI2RlZmluZSBDUVNQSV9SRUdfQ09ORklHX0VOQl9ESVJfQUNDX0NUUkwJQklUKDcpCiAj
ZGVmaW5lIENRU1BJX1JFR19DT05GSUdfREVDT0RFX01BU0sJCUJJVCg5KQogI2RlZmluZSBDUVNQ
SV9SRUdfQ09ORklHX0NISVBTRUxFQ1RfTFNCCQkxMAogI2RlZmluZSBDUVNQSV9SRUdfQ09ORklH
X0RNQV9NQVNLCQlCSVQoMTUpCiAjZGVmaW5lIENRU1BJX1JFR19DT05GSUdfQkFVRF9MU0IJCTE5
CiAjZGVmaW5lIENRU1BJX1JFR19DT05GSUdfRFRSX1BST1RPCQlCSVQoMjQpCisjZGVmaW5lIENR
U1BJX1JFR19DT05GSUdfUEhZX1BJUEVMSU5FCQlCSVQoMjUpCiAjZGVmaW5lIENRU1BJX1JFR19D
T05GSUdfRFVBTF9PUENPREUJCUJJVCgzMCkKICNkZWZpbmUgQ1FTUElfUkVHX0NPTkZJR19JRExF
X0xTQgkJMzEKICNkZWZpbmUgQ1FTUElfUkVHX0NPTkZJR19DSElQU0VMRUNUX01BU0sJMHhGCkBA
IC0xOTIsNiArMjA5LDcgQEAgc3RydWN0IGNxc3BpX2RyaXZlcl9wbGF0ZGF0YSB7CiAjZGVmaW5l
IENRU1BJX1JFR19SRUFEQ0FQVFVSRV9CWVBBU1NfTFNCCTAKICNkZWZpbmUgQ1FTUElfUkVHX1JF
QURDQVBUVVJFX0RFTEFZX0xTQgkJMQogI2RlZmluZSBDUVNQSV9SRUdfUkVBRENBUFRVUkVfREVM
QVlfTUFTSwkweEYKKyNkZWZpbmUgQ1FTUElfUkVHX1JFQURDQVBUVVJFX0VER0VfTFNCCQk1CiAj
ZGVmaW5lIENRU1BJX1JFR19SRUFEQ0FQVFVSRV9EUVNfTFNCCQk4CiAKICNkZWZpbmUgQ1FTUElf
UkVHX1NJWkUJCQkJMHgxNApAQCAtMjczLDYgKzI5MSwyNyBAQCBzdHJ1Y3QgY3FzcGlfZHJpdmVy
X3BsYXRkYXRhIHsKICNkZWZpbmUgQ1FTUElfUkVHX1BPTExJTkdfU1RBVFVTCQkweEIwCiAjZGVm
aW5lIENRU1BJX1JFR19QT0xMSU5HX1NUQVRVU19EVU1NWV9MU0IJMTYKIAorI2RlZmluZSBDUVNQ
SV9SRUdfUEhZX0NPTkZJRwkJCTB4QjQKKyNkZWZpbmUgQ1FTUElfUkVHX1BIWV9DT05GSUdfUlhf
REVMX0xTQgkJMAorI2RlZmluZSBDUVNQSV9SRUdfUEhZX0NPTkZJR19SWF9ERUxfTUFTSwkweDdG
CisjZGVmaW5lIENRU1BJX1JFR19QSFlfQ09ORklHX1RYX0RFTF9MU0IJCTE2CisjZGVmaW5lIENR
U1BJX1JFR19QSFlfQ09ORklHX1RYX0RFTF9NQVNLCTB4N0YKKyNkZWZpbmUgQ1FTUElfUkVHX1BI
WV9DT05GSUdfRExMX1JFU0VUCQlCSVQoMzApCisjZGVmaW5lIENRU1BJX1JFR19QSFlfQ09ORklH
X1JFU1lOQwkJQklUKDMxKQorCisjZGVmaW5lIENRU1BJX1JFR19QSFlfRExMX01BU1RFUgkJMHhC
OAorI2RlZmluZSBDUVNQSV9SRUdfUEhZX0RMTF9NQVNURVJfSU5JVF9ERUxBWV9MU0IJMAorI2Rl
ZmluZSBDUVNQSV9SRUdfUEhZX0RMTF9NQVNURVJfSU5JVF9ERUxBWV9WQUwJMTYKKyNkZWZpbmUg
Q1FTUElfUkVHX1BIWV9ETExfTUFTVEVSX0RMWV9FTE1UU19MRU4JMHg3CisjZGVmaW5lIENRU1BJ
X1JFR19QSFlfRExMX01BU1RFUl9ETFlfRUxNVFNfTFNCCTIwCisjZGVmaW5lIENRU1BJX1JFR19Q
SFlfRExMX01BU1RFUl9ETFlfRUxNVFNfMwkweDIKKyNkZWZpbmUgQ1FTUElfUkVHX1BIWV9ETExf
TUFTVEVSX0JZUEFTUwkJQklUKDIzKQorI2RlZmluZSBDUVNQSV9SRUdfUEhZX0RMTF9NQVNURVJf
Q1lDTEUJCUJJVCgyNCkKKworI2RlZmluZSBDUVNQSV9SRUdfRExMX09CU19MT1cJCQkweEJDCisj
ZGVmaW5lIENRU1BJX1JFR19ETExfT0JTX0xPV19ETExfTE9DSwkJQklUKDApCisjZGVmaW5lIENR
U1BJX1JFR19ETExfT0JTX0xPV19MT09QQkFDS19MT0NLCUJJVCgxNSkKKwogI2RlZmluZSBDUVNQ
SV9SRUdfT1BfRVhUX0xPV0VSCQkJMHhFMAogI2RlZmluZSBDUVNQSV9SRUdfT1BfRVhUX1JFQURf
TFNCCQkyNAogI2RlZmluZSBDUVNQSV9SRUdfT1BfRVhUX1dSSVRFX0xTQgkJMTYKQEAgLTMyMSw2
ICszNjAsNTAgQEAgc3RydWN0IGNxc3BpX2RyaXZlcl9wbGF0ZGF0YSB7CiAKICNkZWZpbmUgQ1FT
UElfUkVHX1ZFUlNBTF9ETUFfVkFMCQkweDYwMgogCisjZGVmaW5lIENRU1BJX1BIWV9JTklUX1JE
CQkJMQorI2RlZmluZSBDUVNQSV9QSFlfTUFYX1JECQkJNAorI2RlZmluZSBDUVNQSV9QSFlfTUFY
X0RFTEFZCQkJMTI3CisjZGVmaW5lIENRU1BJX1BIWV9ERFJfU0VBUkNIX1NURVAJCTQKKyNkZWZp
bmUgQ1FTUElfUEhZX1RYX0xPT0tVUF9MT1dfU1RBUlQJCTI4CisjZGVmaW5lIENRU1BJX1BIWV9U
WF9MT09LVVBfTE9XX0VORAkJNDgKKyNkZWZpbmUgQ1FTUElfUEhZX1RYX0xPT0tVUF9ISUdIX1NU
QVJUCQk2MAorI2RlZmluZSBDUVNQSV9QSFlfVFhfTE9PS1VQX0hJR0hfRU5ECQk5NgorI2RlZmlu
ZSBDUVNQSV9QSFlfUlhfTE9XX1NFQVJDSF9TVEFSVAkJMAorI2RlZmluZSBDUVNQSV9QSFlfUlhf
TE9XX1NFQVJDSF9FTkQJCTQwCisjZGVmaW5lIENRU1BJX1BIWV9SWF9ISUdIX1NFQVJDSF9TVEFS
VAkJMjQKKyNkZWZpbmUgQ1FTUElfUEhZX1JYX0hJR0hfU0VBUkNIX0VORAkJMTI3CisjZGVmaW5l
IENRU1BJX1BIWV9UWF9MT1dfU0VBUkNIX1NUQVJUCQkwCisjZGVmaW5lIENRU1BJX1BIWV9UWF9M
T1dfU0VBUkNIX0VORAkJNjQKKyNkZWZpbmUgQ1FTUElfUEhZX1RYX0hJR0hfU0VBUkNIX1NUQVJU
CQk3OAorI2RlZmluZSBDUVNQSV9QSFlfVFhfSElHSF9TRUFSQ0hfRU5ECQkxMjcKKyNkZWZpbmUg
Q1FTUElfUEhZX1NFQVJDSF9PRkZTRVQJCQk4CisKKyNkZWZpbmUgQ1FTUElfUEhZX0RFRkFVTFRf
VEVNUAkJCTQ1CisjZGVmaW5lIENRU1BJX1BIWV9NSU5fVEVNUAkJCS00NQorI2RlZmluZSBDUVNQ
SV9QSFlfTUFYX1RFTVAJCQkxMzAKKyNkZWZpbmUgQ1FTUElfUEhZX01JRF9URU1QCQkJKENRU1BJ
X1BIWV9NSU5fVEVNUCArCVwKKwkJCQkJCSAoKENRU1BJX1BIWV9NQVhfVEVNUCAtCVwKKwkJCQkJ
CSAgIENRU1BJX1BIWV9NSU5fVEVNUCkgLyAyKSkKKworLyoKKyAqIFBIWSB0dW5pbmcgcGF0dGVy
biBmb3IgY2FsaWJyYXRpbmcgcmVhZCBkYXRhIGNhcHR1cmUgZGVsYXkuIFRoaXMgMTI4LWJ5dGUK
KyAqIHBhdHRlcm4gcHJvdmlkZXMgc3VmZmljaWVudCBiaXQgdHJhbnNpdGlvbnMgYWNyb3NzIGFs
bCBieXRlIGxhbmVzIHRvCisgKiByZWxpYWJseSBkZXRlY3QgdGltaW5nIHdpbmRvd3MgYXQgaGln
aCBmcmVxdWVuY2llcy4KKyAqLworc3RhdGljIGNvbnN0IHU4IHBoeV90dW5pbmdfcGF0dGVybltd
IF9fYWxpZ25lZCg2NCkgPSB7CisJMHhGRSwgMHhGRiwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwg
MHgwMSwgMHgwMCwgMHgwMCwgMHhGRSwgMHhGRSwgMHgwMSwKKwkweDAxLCAweDAxLCAweDAxLCAw
eDAwLCAweDAwLCAweEZFLCAweEZFLCAweDAxLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAorCTB4
RkYsIDB4MDAsIDB4MDAsIDB4RkUsIDB4RkUsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDAs
IDB4MDAsIDB4RkUsCisJMHhGRSwgMHhGRiwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwg
MHhGRSwgMHgwMCwgMHhGRSwgMHhGRSwgMHgwMSwKKwkweDAxLCAweDAxLCAweDAxLCAweEZFLCAw
eDAwLCAweEZFLCAweEZFLCAweDAxLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAorCTB4RkYsIDB4
RkUsIDB4MDAsIDB4RkUsIDB4RkUsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkUsIDB4MDAs
IDB4RkUsCisJMHhGRSwgMHhGRiwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMCwg
MHhGRSwgMHhGRSwgMHhGRSwgMHgwMSwKKwkweDAxLCAweDAxLCAweDAxLCAweDAwLCAweEZFLCAw
eEZFLCAweEZFLCAweDAxLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAorCTB4RkYsIDB4MDAsIDB4
RkUsIDB4RkUsIDB4RkUsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDAsIDB4RkUsIDB4RkUs
CisJMHhGRSwgMHhGRiwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHhGRSwgMHhGRSwg
MHhGRSwgMHhGRSwgMHgwMSwKKwkweDAxLCAweDAxLCAweDAxLCAweEZFLCAweEZFLCAweEZFLCAw
eEZFLCAweDAxLAorfTsKKwogc3RhdGljIGludCBjcXNwaV93YWl0X2Zvcl9iaXQoY29uc3Qgc3Ry
dWN0IGNxc3BpX2RyaXZlcl9wbGF0ZGF0YSAqZGRhdGEsCiAJCQkgICAgICB2b2lkIF9faW9tZW0g
KnJlZywgY29uc3QgdTMyIG1hc2ssIGJvb2wgY2xyLAogCQkJICAgICAgYm9vbCBidXN5d2FpdCkK
QEAgLTkxMyw2ICs5OTYsNzQgQEAgc3RhdGljIHZvaWQgY3FzcGlfY29udHJvbGxlcl9lbmFibGUo
c3RydWN0IGNxc3BpX3N0ICpjcXNwaSwgYm9vbCBlbmFibGUpCiAJd3JpdGVsKHJlZywgcmVnX2Jh
c2UgKyBDUVNQSV9SRUdfQ09ORklHKTsKIH0KIAorc3RhdGljIHZvaWQgY3FzcGlfc2V0X2RsbCh2
b2lkIF9faW9tZW0gKnJlZ19iYXNlLCB1OCByeF9kbGwsIHU4IHR4X2RsbCkKK3sKKwl1bnNpZ25l
ZCBpbnQgcmVnOworCisJcmVnID0gcmVhZGwocmVnX2Jhc2UgKyBDUVNQSV9SRUdfUEhZX0NPTkZJ
Ryk7CisJcmVnICY9IH4oKENRU1BJX1JFR19QSFlfQ09ORklHX1JYX0RFTF9NQVNLCisJCSAgPDwg
Q1FTUElfUkVHX1BIWV9DT05GSUdfUlhfREVMX0xTQikgfAorCQkgKENRU1BJX1JFR19QSFlfQ09O
RklHX1RYX0RFTF9NQVNLCisJCSAgPDwgQ1FTUElfUkVHX1BIWV9DT05GSUdfVFhfREVMX0xTQikp
OworCXJlZyB8PSAoKHJ4X2RsbCAmIENRU1BJX1JFR19QSFlfQ09ORklHX1JYX0RFTF9NQVNLKQor
CQk8PCBDUVNQSV9SRUdfUEhZX0NPTkZJR19SWF9ERUxfTFNCKSB8CisJICAgICAgICgodHhfZGxs
ICYgQ1FTUElfUkVHX1BIWV9DT05GSUdfVFhfREVMX01BU0spCisJCTw8IENRU1BJX1JFR19QSFlf
Q09ORklHX1RYX0RFTF9MU0IpIHwKKwkgICAgICAgQ1FTUElfUkVHX1BIWV9DT05GSUdfUkVTWU5D
OworCXdyaXRlbChyZWcsIHJlZ19iYXNlICsgQ1FTUElfUkVHX1BIWV9DT05GSUcpOworfQorCitz
dGF0aWMgaW50IGNxc3BpX3Jlc3luY19kbGwoc3RydWN0IGNxc3BpX3N0ICpjcXNwaSkKK3sKKwl2
b2lkIF9faW9tZW0gKnJlZ19iYXNlID0gY3FzcGktPmlvYmFzZTsKKwl1bnNpZ25lZCBpbnQgcmVn
OworCWludCByZXQ7CisKKwlyZXQgPSBjcXNwaV93YWl0X2lkbGUoY3FzcGkpOworCWlmIChyZXQp
CisJCXJldHVybiByZXQ7CisKKwlyZWcgPSByZWFkbChyZWdfYmFzZSArIENRU1BJX1JFR19DT05G
SUcpOworCXJlZyAmPSB+Q1FTUElfUkVHX0NPTkZJR19FTkFCTEVfTUFTSzsKKwl3cml0ZWwocmVn
LCByZWdfYmFzZSArIENRU1BJX1JFR19DT05GSUcpOworCisJcmVnID0gcmVhZGwocmVnX2Jhc2Ug
KyBDUVNQSV9SRUdfUEhZX0NPTkZJRyk7CisJcmVnICY9IH4oQ1FTUElfUkVHX1BIWV9DT05GSUdf
RExMX1JFU0VUIHwgQ1FTUElfUkVHX1BIWV9DT05GSUdfUkVTWU5DKTsKKwl3cml0ZWwocmVnLCBy
ZWdfYmFzZSArIENRU1BJX1JFR19QSFlfQ09ORklHKTsKKworCXJlZyA9IHJlYWRsKHJlZ19iYXNl
ICsgQ1FTUElfUkVHX1BIWV9ETExfTUFTVEVSKTsKKwlyZWcgfD0gKENRU1BJX1JFR19QSFlfRExM
X01BU1RFUl9JTklUX0RFTEFZX1ZBTAorCQk8PCBDUVNQSV9SRUdfUEhZX0RMTF9NQVNURVJfSU5J
VF9ERUxBWV9MU0IpOworCXdyaXRlbChyZWcsIHJlZ19iYXNlICsgQ1FTUElfUkVHX1BIWV9ETExf
TUFTVEVSKTsKKworCXJlZyA9IHJlYWRsKHJlZ19iYXNlICsgQ1FTUElfUkVHX1BIWV9DT05GSUcp
OworCXJlZyB8PSBDUVNQSV9SRUdfUEhZX0NPTkZJR19ETExfUkVTRVQ7CisJd3JpdGVsKHJlZywg
cmVnX2Jhc2UgKyBDUVNQSV9SRUdfUEhZX0NPTkZJRyk7CisKKwlyZXQgPSByZWFkbF9wb2xsX3Rp
bWVvdXQocmVnX2Jhc2UgKyBDUVNQSV9SRUdfRExMX09CU19MT1csIHJlZywKKwkJCQkgKHJlZyAm
IENRU1BJX1JFR19ETExfT0JTX0xPV19ETExfTE9DSyksIDAsCisJCQkJIENRU1BJX0RMTF9USU1F
T1VUX1VTKTsKKwlpZiAocmV0KQorCQlnb3RvIHJlX2VuYWJsZTsKKworCXJldCA9IHJlYWRsX3Bv
bGxfdGltZW91dChyZWdfYmFzZSArIENRU1BJX1JFR19ETExfT0JTX0xPVywgcmVnLAorCQkJCSAo
cmVnICYgQ1FTUElfUkVHX0RMTF9PQlNfTE9XX0xPT1BCQUNLX0xPQ0spLCAwLAorCQkJCSBDUVNQ
SV9ETExfVElNRU9VVF9VUyk7CisJaWYgKHJldCkKKwkJZ290byByZV9lbmFibGU7CisKKwlyZWcg
PSByZWFkbChyZWdfYmFzZSArIENRU1BJX1JFR19QSFlfQ09ORklHKTsKKwlyZWcgfD0gQ1FTUElf
UkVHX1BIWV9DT05GSUdfUkVTWU5DOworCXdyaXRlbChyZWcsIHJlZ19iYXNlICsgQ1FTUElfUkVH
X1BIWV9DT05GSUcpOworCityZV9lbmFibGU6CisJcmVnID0gcmVhZGwocmVnX2Jhc2UgKyBDUVNQ
SV9SRUdfQ09ORklHKTsKKwlyZWcgfD0gQ1FTUElfUkVHX0NPTkZJR19FTkFCTEVfTUFTSzsKKwl3
cml0ZWwocmVnLCByZWdfYmFzZSArIENRU1BJX1JFR19DT05GSUcpOworCisJcmV0dXJuIHJldDsK
K30KKwogc3RhdGljIGludCBjcXNwaV92ZXJzYWxfaW5kaXJlY3RfcmVhZF9kbWEoc3RydWN0IGNx
c3BpX2ZsYXNoX3BkYXRhICpmX3BkYXRhLAogCQkJCQkgIHVfY2hhciAqcnhidWYsIGxvZmZfdCBm
cm9tX2FkZHIsCiAJCQkJCSAgc2l6ZV90IG5fcngpCkBAIC0xNTU5LDEwICsxNzEwLDE1NzggQEAg
c3RhdGljIGJvb2wgY3FzcGlfc3VwcG9ydHNfbWVtX29wKHN0cnVjdCBzcGlfbWVtICptZW0sCiAJ
cmV0dXJuIHNwaV9tZW1fZGVmYXVsdF9zdXBwb3J0c19vcChtZW0sIG9wKTsKIH0KIAorc3RhdGlj
IGludCBjcXNwaV93cml0ZV9wYXR0ZXJuX3RvX2NhY2hlKHN0cnVjdCBjcXNwaV9mbGFzaF9wZGF0
YSAqZl9wZGF0YSwKKwkJCQkJc3RydWN0IHNwaV9tZW0gKm1lbSwKKwkJCQkJc3RydWN0IHNwaV9t
ZW1fb3AgKndyaXRlX29wKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZmX3BkYXRhLT5jcXNw
aS0+cGRldi0+ZGV2OworCWludCByZXQ7CisKKwl3cml0ZV9vcC0+ZGF0YS5uYnl0ZXMgPSBzaXpl
b2YocGh5X3R1bmluZ19wYXR0ZXJuKTsKKwl3cml0ZV9vcC0+ZGF0YS5idWYub3V0ID0gcGh5X3R1
bmluZ19wYXR0ZXJuOworCisJcmV0ID0gc3BpX21lbV9leGVjX29wKG1lbSwgd3JpdGVfb3ApOwor
CWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gd3JpdGUgUEhZIHBhdHRlcm4g
dG8gY2FjaGU6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwlkZXZfZGJnKGRldiwg
IlBIWSBwYXR0ZXJuICglenUgYnl0ZXMpIHdyaXR0ZW4gdG8gY2FjaGVcbiIsCisJCXNpemVvZihw
aHlfdHVuaW5nX3BhdHRlcm4pKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNxc3Bp
X3BoeV9jaGVja19wYXR0ZXJuKHN0cnVjdCBjcXNwaV9mbGFzaF9wZGF0YSAqZl9wZGF0YSwKKwkJ
CQkgICBzdHJ1Y3Qgc3BpX21lbSAqbWVtKQoreworCXN0cnVjdCBzcGlfbWVtX29wIG9wOworCXU4
ICpyZWFkX2RhdGE7CisJaW50IHJldDsKKworCXJlYWRfZGF0YSA9IGttYWxsb2NfYXJyYXkoQVJS
QVlfU0laRShwaHlfdHVuaW5nX3BhdHRlcm4pLAorCQkJCSAgc2l6ZW9mKHBoeV90dW5pbmdfcGF0
dGVyblswXSksIEdGUF9LRVJORUwpOworCWlmICghcmVhZF9kYXRhKQorCQlyZXR1cm4gLUVOT01F
TTsKKworCW9wID0gZl9wZGF0YS0+cGh5X3JlYWRfb3A7CisJb3AuZGF0YS5idWYuaW4gPSByZWFk
X2RhdGE7CisJb3AuZGF0YS5uYnl0ZXMgPSBzaXplb2YocGh5X3R1bmluZ19wYXR0ZXJuKTsKKwor
CXJldCA9IHNwaV9tZW1fZXhlY19vcChtZW0sICZvcCk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7
CisKKwlpZiAobWVtY21wKHJlYWRfZGF0YSwgcGh5X3R1bmluZ19wYXR0ZXJuLCBzaXplb2YocGh5
X3R1bmluZ19wYXR0ZXJuKSkpCisJCXJldCA9IC1FQUdBSU47CisKK291dDoKKwlrZnJlZShyZWFk
X2RhdGEpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGNxc3BpX3BoeV9zZXRfZGxs
X21hc3RlcihzdHJ1Y3QgY3FzcGlfc3QgKmNxc3BpKQoreworCXZvaWQgX19pb21lbSAqcmVnX2Jh
c2UgPSBjcXNwaS0+aW9iYXNlOworCXVuc2lnbmVkIGludCByZWc7CisKKwlyZWcgPSByZWFkbChy
ZWdfYmFzZSArIENRU1BJX1JFR19QSFlfRExMX01BU1RFUik7CisJcmVnICY9IH4oKENRU1BJX1JF
R19QSFlfRExMX01BU1RFUl9ETFlfRUxNVFNfTEVOCisJCSAgPDwgQ1FTUElfUkVHX1BIWV9ETExf
TUFTVEVSX0RMWV9FTE1UU19MU0IpIHwKKwkJIENRU1BJX1JFR19QSFlfRExMX01BU1RFUl9CWVBB
U1MgfAorCQkgQ1FTUElfUkVHX1BIWV9ETExfTUFTVEVSX0NZQ0xFKTsKKwlyZWcgfD0gKChDUVNQ
SV9SRUdfUEhZX0RMTF9NQVNURVJfRExZX0VMTVRTXzMKKwkJIDw8IENRU1BJX1JFR19QSFlfRExM
X01BU1RFUl9ETFlfRUxNVFNfTFNCKSB8CisJCUNRU1BJX1JFR19QSFlfRExMX01BU1RFUl9DWUNM
RSk7CisKKwl3cml0ZWwocmVnLCByZWdfYmFzZSArIENRU1BJX1JFR19QSFlfRExMX01BU1RFUik7
Cit9CisKK3N0YXRpYyB2b2lkIGNxc3BpX3BoeV9wcmVfY29uZmlnKHN0cnVjdCBjcXNwaV9zdCAq
Y3FzcGksCisJCQkJIHN0cnVjdCBjcXNwaV9mbGFzaF9wZGF0YSAqZl9wZGF0YSwKKwkJCQkgY29u
c3QgYm9vbCBieXBhc3MpCit7CisJdm9pZCBfX2lvbWVtICpyZWdfYmFzZSA9IGNxc3BpLT5pb2Jh
c2U7CisJdW5zaWduZWQgaW50IHJlZzsKKwl1OCBkdW1teTsKKworCWNxc3BpX3JlYWRkYXRhX2Nh
cHR1cmUoY3FzcGksIGJ5cGFzcywgZl9wZGF0YS0+dXNlX2RxcywKKwkJCSAgICAgICBmX3BkYXRh
LT5waHlfc2V0dGluZy5yZWFkX2RlbGF5KTsKKworCXJlZyA9IHJlYWRsKHJlZ19iYXNlICsgQ1FT
UElfUkVHX0NPTkZJRyk7CisJcmVnICY9IH4oQ1FTUElfUkVHX0NPTkZJR19QSFlfRU4gfCBDUVNQ
SV9SRUdfQ09ORklHX1BIWV9QSVBFTElORSk7CisJcmVnIHw9IENRU1BJX1JFR19DT05GSUdfUEhZ
X0VOOworCXdyaXRlbChyZWcsIHJlZ19iYXNlICsgQ1FTUElfUkVHX0NPTkZJRyk7CisKKwlyZWcg
PSByZWFkbChyZWdfYmFzZSArIENRU1BJX1JFR19SRF9JTlNUUik7CisJZHVtbXkgPSBGSUVMRF9H
RVQoQ1FTUElfUkVHX1JEX0lOU1RSX0RVTU1ZX01BU0sKKwkJCQkgIDw8IENRU1BJX1JFR19SRF9J
TlNUUl9EVU1NWV9MU0IsCisJCQkgIHJlZyk7CisJZHVtbXktLTsKKwlyZWcgJj0gfihDUVNQSV9S
RUdfUkRfSU5TVFJfRFVNTVlfTUFTSyA8PCBDUVNQSV9SRUdfUkRfSU5TVFJfRFVNTVlfTFNCKTsK
KwlyZWcgfD0gRklFTERfUFJFUChDUVNQSV9SRUdfUkRfSU5TVFJfRFVNTVlfTUFTSworCQkJCSAg
PDwgQ1FTUElfUkVHX1JEX0lOU1RSX0RVTU1ZX0xTQiwKKwkJCSAgZHVtbXkpOworCXdyaXRlbChy
ZWcsIHJlZ19iYXNlICsgQ1FTUElfUkVHX1JEX0lOU1RSKTsKKworCWNxc3BpX3BoeV9zZXRfZGxs
X21hc3RlcihjcXNwaSk7Cit9CisKK3N0YXRpYyB2b2lkIGNxc3BpX3BoeV9wb3N0X2NvbmZpZyhz
dHJ1Y3QgY3FzcGlfc3QgKmNxc3BpLAorCQkJCSAgY29uc3QgdW5zaWduZWQgaW50IGRlbGF5KQor
eworCXZvaWQgX19pb21lbSAqcmVnX2Jhc2UgPSBjcXNwaS0+aW9iYXNlOworCXVuc2lnbmVkIGlu
dCByZWc7CisJdTggZHVtbXk7CisKKwlyZWcgPSByZWFkbChyZWdfYmFzZSArIENRU1BJX1JFR19S
RUFEQ0FQVFVSRSk7CisJcmVnICY9IH4oQ1FTUElfUkVHX1JFQURDQVBUVVJFX0RFTEFZX01BU0sK
KwkJIDw8IENRU1BJX1JFR19SRUFEQ0FQVFVSRV9ERUxBWV9MU0IpOworCisJcmVnIHw9IChkZWxh
eSAmIENRU1BJX1JFR19SRUFEQ0FQVFVSRV9ERUxBWV9NQVNLKQorCSAgICAgICA8PCBDUVNQSV9S
RUdfUkVBRENBUFRVUkVfREVMQVlfTFNCOworCXdyaXRlbChyZWcsIHJlZ19iYXNlICsgQ1FTUElf
UkVHX1JFQURDQVBUVVJFKTsKKworCXJlZyA9IHJlYWRsKHJlZ19iYXNlICsgQ1FTUElfUkVHX0NP
TkZJRyk7CisJcmVnICY9IH4oQ1FTUElfUkVHX0NPTkZJR19QSFlfRU4gfCBDUVNQSV9SRUdfQ09O
RklHX1BIWV9QSVBFTElORSk7CisJd3JpdGVsKHJlZywgcmVnX2Jhc2UgKyBDUVNQSV9SRUdfQ09O
RklHKTsKKworCXJlZyA9IHJlYWRsKHJlZ19iYXNlICsgQ1FTUElfUkVHX1JEX0lOU1RSKTsKKwlk
dW1teSA9IEZJRUxEX0dFVChDUVNQSV9SRUdfUkRfSU5TVFJfRFVNTVlfTUFTSworCQkJCSAgPDwg
Q1FTUElfUkVHX1JEX0lOU1RSX0RVTU1ZX0xTQiwKKwkJCSAgcmVnKTsKKwlkdW1teSsrOworCXJl
ZyAmPSB+KENRU1BJX1JFR19SRF9JTlNUUl9EVU1NWV9NQVNLIDw8IENRU1BJX1JFR19SRF9JTlNU
Ul9EVU1NWV9MU0IpOworCXJlZyB8PSBGSUVMRF9QUkVQKENRU1BJX1JFR19SRF9JTlNUUl9EVU1N
WV9NQVNLCisJCQkJICA8PCBDUVNQSV9SRUdfUkRfSU5TVFJfRFVNTVlfTFNCLAorCQkJICBkdW1t
eSk7CisJd3JpdGVsKHJlZywgcmVnX2Jhc2UgKyBDUVNQSV9SRUdfUkRfSU5TVFIpOworfQorCitz
dGF0aWMgaW50IGNxc3BpX3BoeV9hcHBseV9zZXR0aW5nKHN0cnVjdCBjcXNwaV9mbGFzaF9wZGF0
YSAqZl9wZGF0YSwKKwkJCQkgICBzdHJ1Y3QgcGh5X3NldHRpbmcgKnBoeSkKK3sKKwlzdHJ1Y3Qg
Y3FzcGlfc3QgKmNxc3BpID0gZl9wZGF0YS0+Y3FzcGk7CisJdW5zaWduZWQgaW50IHJlZzsKKwlp
bnQgcmV0OworCisJcmVnID0gcmVhZGwoY3FzcGktPmlvYmFzZSArIENRU1BJX1JFR19SRUFEQ0FQ
VFVSRSk7CisJcmVnIHw9IEJJVChDUVNQSV9SRUdfUkVBRENBUFRVUkVfRURHRV9MU0IpOworCXdy
aXRlbChyZWcsIGNxc3BpLT5pb2Jhc2UgKyBDUVNQSV9SRUdfUkVBRENBUFRVUkUpOworCisJY3Fz
cGlfc2V0X2RsbChjcXNwaS0+aW9iYXNlLCBwaHktPnJ4LCBwaHktPnR4KTsKKworCXJldCA9IGNx
c3BpX3Jlc3luY19kbGwoY3FzcGkpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlmX3Bk
YXRhLT5waHlfc2V0dGluZy5yeCA9IHBoeS0+cng7CisJZl9wZGF0YS0+cGh5X3NldHRpbmcudHgg
PSBwaHktPnR4OworCWZfcGRhdGEtPnBoeV9zZXR0aW5nLnJlYWRfZGVsYXkgPSBwaHktPnJlYWRf
ZGVsYXk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3FzcGlfZmluZF9yeF9sb3dfZGRy
KHN0cnVjdCBjcXNwaV9mbGFzaF9wZGF0YSAqZl9wZGF0YSwKKwkJCQkgc3RydWN0IHNwaV9tZW0g
Km1lbSwgc3RydWN0IHBoeV9zZXR0aW5nICpwaHkpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0g
JmZfcGRhdGEtPmNxc3BpLT5wZGV2LT5kZXY7CisJaW50IHJldDsKKworCWRvIHsKKwkJcGh5LT5y
eCA9IENRU1BJX1BIWV9SWF9MT1dfU0VBUkNIX1NUQVJUOworCQlkbyB7CisJCQlyZXQgPSBjcXNw
aV9waHlfYXBwbHlfc2V0dGluZyhmX3BkYXRhLCBwaHkpOworCQkJaWYgKCFyZXQpIHsKKwkJCQly
ZXQgPSBjcXNwaV9waHlfY2hlY2tfcGF0dGVybihmX3BkYXRhLCBtZW0pOworCQkJCWlmICghcmV0
KQorCQkJCQlyZXR1cm4gMDsKKwkJCX0KKworCQkJcGh5LT5yeCArPSBDUVNQSV9QSFlfRERSX1NF
QVJDSF9TVEVQOworCQl9IHdoaWxlIChwaHktPnJ4IDw9IENRU1BJX1BIWV9SWF9MT1dfU0VBUkNI
X0VORCk7CisKKwkJcGh5LT5yZWFkX2RlbGF5Kys7CisJfSB3aGlsZSAocGh5LT5yZWFkX2RlbGF5
IDw9IENRU1BJX1BIWV9NQVhfUkQpOworCisJZGV2X2RiZyhkZXYsICJVbmFibGUgdG8gZmluZCBS
WCBsb3dcbiIpOworCXJldHVybiAtRU5PRU5UOworfQorCitzdGF0aWMgaW50IGNxc3BpX2ZpbmRf
cnhfbG93X3NkcihzdHJ1Y3QgY3FzcGlfZmxhc2hfcGRhdGEgKmZfcGRhdGEsCisJCQkJIHN0cnVj
dCBzcGlfbWVtICptZW0sIHN0cnVjdCBwaHlfc2V0dGluZyAqcGh5KQoreworCXN0cnVjdCBkZXZp
Y2UgKmRldiA9ICZmX3BkYXRhLT5jcXNwaS0+cGRldi0+ZGV2OworCWludCByZXQ7CisKKwlwaHkt
PnJ4ID0gMDsKKwlkbyB7CisJCXJldCA9IGNxc3BpX3BoeV9hcHBseV9zZXR0aW5nKGZfcGRhdGEs
IHBoeSk7CisJCWlmICghcmV0KSB7CisJCQlyZXQgPSBjcXNwaV9waHlfY2hlY2tfcGF0dGVybihm
X3BkYXRhLCBtZW0pOworCQkJaWYgKCFyZXQpCisJCQkJcmV0dXJuIDA7CisJCX0KKwkJcGh5LT5y
eCsrOworCX0gd2hpbGUgKHBoeS0+cnggPD0gQ1FTUElfUEhZX01BWF9ERUxBWSk7CisKKwlkZXZf
ZGJnKGRldiwgIlVuYWJsZSB0byBmaW5kIFJYIGxvd1xuIik7CisJcmV0dXJuIC1FTk9FTlQ7Cit9
CisKK3N0YXRpYyBpbnQgY3FzcGlfZmluZF9yeF9oaWdoX2RkcihzdHJ1Y3QgY3FzcGlfZmxhc2hf
cGRhdGEgKmZfcGRhdGEsCisJCQkJICBzdHJ1Y3Qgc3BpX21lbSAqbWVtLCBzdHJ1Y3QgcGh5X3Nl
dHRpbmcgKnBoeSkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmZl9wZGF0YS0+Y3FzcGktPnBk
ZXYtPmRldjsKKwlpbnQgcmV0OworCisJZG8geworCQlwaHktPnJ4ID0gQ1FTUElfUEhZX1JYX0hJ
R0hfU0VBUkNIX0VORDsKKwkJZG8geworCQkJcmV0ID0gY3FzcGlfcGh5X2FwcGx5X3NldHRpbmco
Zl9wZGF0YSwgcGh5KTsKKwkJCWlmICghcmV0KSB7CisJCQkJcmV0ID0gY3FzcGlfcGh5X2NoZWNr
X3BhdHRlcm4oZl9wZGF0YSwgbWVtKTsKKwkJCQlpZiAoIXJldCkKKwkJCQkJcmV0dXJuIDA7CisJ
CQl9CisKKwkJCXBoeS0+cnggLT0gQ1FTUElfUEhZX0REUl9TRUFSQ0hfU1RFUDsKKwkJfSB3aGls
ZSAocGh5LT5yeCA+PSBDUVNQSV9QSFlfUlhfSElHSF9TRUFSQ0hfU1RBUlQpOworCisJCXBoeS0+
cmVhZF9kZWxheS0tOworCX0gd2hpbGUgKHBoeS0+cmVhZF9kZWxheSA+PSBDUVNQSV9QSFlfSU5J
VF9SRCk7CisKKwlkZXZfZGJnKGRldiwgIlVuYWJsZSB0byBmaW5kIFJYIGhpZ2hcbiIpOworCXJl
dHVybiAtRU5PRU5UOworfQorCitzdGF0aWMgaW50IGNxc3BpX2ZpbmRfcnhfaGlnaF9zZHIoc3Ry
dWN0IGNxc3BpX2ZsYXNoX3BkYXRhICpmX3BkYXRhLAorCQkJCSAgc3RydWN0IHNwaV9tZW0gKm1l
bSwgc3RydWN0IHBoeV9zZXR0aW5nICpwaHksCisJCQkJICB1OCBsb3dlcmJvdW5kKQoreworCXN0
cnVjdCBkZXZpY2UgKmRldiA9ICZmX3BkYXRhLT5jcXNwaS0+cGRldi0+ZGV2OworCWludCByZXQ7
CisKKwlwaHktPnJ4ID0gQ1FTUElfUEhZX01BWF9ERUxBWTsKKwlkbyB7CisJCXJldCA9IGNxc3Bp
X3BoeV9hcHBseV9zZXR0aW5nKGZfcGRhdGEsIHBoeSk7CisJCWlmICghcmV0KSB7CisJCQlyZXQg
PSBjcXNwaV9waHlfY2hlY2tfcGF0dGVybihmX3BkYXRhLCBtZW0pOworCQkJaWYgKCFyZXQpCisJ
CQkJcmV0dXJuIDA7CisJCX0KKwkJcGh5LT5yeC0tOworCX0gd2hpbGUgKHBoeS0+cnggPiBsb3dl
cmJvdW5kKTsKKworCWRldl9kYmcoZGV2LCAiVW5hYmxlIHRvIGZpbmQgUlggaGlnaFxuIik7CisJ
cmV0dXJuIC1FTk9FTlQ7Cit9CisKK3N0YXRpYyBpbnQgY3FzcGlfZmluZF90eF9sb3dfZGRyKHN0
cnVjdCBjcXNwaV9mbGFzaF9wZGF0YSAqZl9wZGF0YSwKKwkJCQkgc3RydWN0IHNwaV9tZW0gKm1l
bSwgc3RydWN0IHBoeV9zZXR0aW5nICpwaHkpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmZf
cGRhdGEtPmNxc3BpLT5wZGV2LT5kZXY7CisJaW50IHJldDsKKworCWRvIHsKKwkJcGh5LT50eCA9
IENRU1BJX1BIWV9UWF9MT1dfU0VBUkNIX1NUQVJUOworCQlkbyB7CisJCQlyZXQgPSBjcXNwaV9w
aHlfYXBwbHlfc2V0dGluZyhmX3BkYXRhLCBwaHkpOworCQkJaWYgKCFyZXQpIHsKKwkJCQlyZXQg
PSBjcXNwaV9waHlfY2hlY2tfcGF0dGVybihmX3BkYXRhLCBtZW0pOworCQkJCWlmICghcmV0KQor
CQkJCQlyZXR1cm4gMDsKKwkJCX0KKworCQkJcGh5LT50eCArPSBDUVNQSV9QSFlfRERSX1NFQVJD
SF9TVEVQOworCQl9IHdoaWxlIChwaHktPnR4IDw9IENRU1BJX1BIWV9UWF9MT1dfU0VBUkNIX0VO
RCk7CisKKwkJcGh5LT5yZWFkX2RlbGF5Kys7CisJfSB3aGlsZSAocGh5LT5yZWFkX2RlbGF5IDw9
IENRU1BJX1BIWV9NQVhfUkQpOworCisJZGV2X2RiZyhkZXYsICJVbmFibGUgdG8gZmluZCBUWCBs
b3dcbiIpOworCXJldHVybiAtRU5PRU5UOworfQorCitzdGF0aWMgaW50IGNxc3BpX2ZpbmRfdHhf
aGlnaF9kZHIoc3RydWN0IGNxc3BpX2ZsYXNoX3BkYXRhICpmX3BkYXRhLAorCQkJCSAgc3RydWN0
IHNwaV9tZW0gKm1lbSwgc3RydWN0IHBoeV9zZXR0aW5nICpwaHkpCit7CisJc3RydWN0IGRldmlj
ZSAqZGV2ID0gJmZfcGRhdGEtPmNxc3BpLT5wZGV2LT5kZXY7CisJaW50IHJldDsKKworCWRvIHsK
KwkJcGh5LT50eCA9IENRU1BJX1BIWV9UWF9ISUdIX1NFQVJDSF9FTkQ7CisJCWRvIHsKKwkJCXJl
dCA9IGNxc3BpX3BoeV9hcHBseV9zZXR0aW5nKGZfcGRhdGEsIHBoeSk7CisJCQlpZiAoIXJldCkg
eworCQkJCXJldCA9IGNxc3BpX3BoeV9jaGVja19wYXR0ZXJuKGZfcGRhdGEsIG1lbSk7CisJCQkJ
aWYgKCFyZXQpCisJCQkJCXJldHVybiAwOworCQkJfQorCisJCQlwaHktPnR4IC09IENRU1BJX1BI
WV9ERFJfU0VBUkNIX1NURVA7CisJCX0gd2hpbGUgKHBoeS0+dHggPj0gQ1FTUElfUEhZX1RYX0hJ
R0hfU0VBUkNIX1NUQVJUKTsKKworCQlwaHktPnJlYWRfZGVsYXktLTsKKwl9IHdoaWxlIChwaHkt
PnJlYWRfZGVsYXkgPj0gQ1FTUElfUEhZX0lOSVRfUkQpOworCisJZGV2X2RiZyhkZXYsICJVbmFi
bGUgdG8gZmluZCBUWCBoaWdoXG4iKTsKKwlyZXR1cm4gLUVOT0VOVDsKK30KKworc3RhdGljIHZv
aWQgY3FzcGlfcGh5X2ZpbmRfZ2FwbG93X2RkcihzdHJ1Y3QgY3FzcGlfZmxhc2hfcGRhdGEgKmZf
cGRhdGEsCisJCQkJICAgICAgc3RydWN0IHNwaV9tZW0gKm1lbSwKKwkJCQkgICAgICBzdHJ1Y3Qg
cGh5X3NldHRpbmcgKmJvdHRvbWxlZnQsCisJCQkJICAgICAgc3RydWN0IHBoeV9zZXR0aW5nICp0
b3ByaWdodCwKKwkJCQkgICAgICBzdHJ1Y3QgcGh5X3NldHRpbmcgKmdhcGxvdykKK3sKKwlzdHJ1
Y3QgcGh5X3NldHRpbmcgbGVmdCwgcmlnaHQsIG1pZDsKKwlpbnQgcmV0OworCisJbGVmdCA9ICpi
b3R0b21sZWZ0OworCXJpZ2h0ID0gKnRvcHJpZ2h0OworCisJbWlkLnR4ID0gbGVmdC50eCArICgo
cmlnaHQudHggLSBsZWZ0LnR4KSAvIDIpOworCW1pZC5yeCA9IGxlZnQucnggKyAoKHJpZ2h0LnJ4
IC0gbGVmdC5yeCkgLyAyKTsKKwltaWQucmVhZF9kZWxheSA9IGxlZnQucmVhZF9kZWxheTsKKwor
CWRvIHsKKwkJcmV0ID0gY3FzcGlfcGh5X2FwcGx5X3NldHRpbmcoZl9wZGF0YSwgJm1pZCk7CisJ
CWlmICghcmV0KQorCQkJcmV0ID0gY3FzcGlfcGh5X2NoZWNrX3BhdHRlcm4oZl9wZGF0YSwgbWVt
KTsKKworCQlpZiAocmV0KSB7CisJCQkvKiBUaGUgcGF0dGVybiB3YXMgbm90IGZvdW5kLiBHbyB0
byB0aGUgbG93ZXIgaGFsZi4gKi8KKwkJCXJpZ2h0LnR4ID0gbWlkLnR4OworCQkJcmlnaHQucngg
PSBtaWQucng7CisKKwkJCW1pZC50eCA9IGxlZnQudHggKyAoKG1pZC50eCAtIGxlZnQudHgpIC8g
Mik7CisJCQltaWQucnggPSBsZWZ0LnJ4ICsgKChtaWQucnggLSBsZWZ0LnJ4KSAvIDIpOworCQl9
IGVsc2UgeworCQkJLyogVGhlIHBhdHRlcm4gd2FzIGZvdW5kLiBHbyB0byB0aGUgdXBwZXIgaGFs
Zi4gKi8KKwkJCWxlZnQudHggPSBtaWQudHg7CisJCQlsZWZ0LnJ4ID0gbWlkLnJ4OworCisJCQlt
aWQudHggPSBtaWQudHggKyAoKHJpZ2h0LnR4IC0gbWlkLnR4KSAvIDIpOworCQkJbWlkLnJ4ID0g
bWlkLnJ4ICsgKChyaWdodC5yeCAtIG1pZC5yeCkgLyAyKTsKKwkJfQorCisJCS8qIEJyZWFrIHRo
ZSBsb29wIGlmIHRoZSB3aW5kb3cgaGFzIGNsb3NlZC4gKi8KKwl9IHdoaWxlICgocmlnaHQudHgg
LSBsZWZ0LnR4ID49IDIpICYmIChyaWdodC5yeCAtIGxlZnQucnggPj0gMikpOworCisJKmdhcGxv
dyA9IG1pZDsKK30KKworc3RhdGljIHZvaWQgY3FzcGlfcGh5X2ZpbmRfZ2FwaGlnaF9kZHIoc3Ry
dWN0IGNxc3BpX2ZsYXNoX3BkYXRhICpmX3BkYXRhLAorCQkJCSAgICAgICBzdHJ1Y3Qgc3BpX21l
bSAqbWVtLAorCQkJCSAgICAgICBzdHJ1Y3QgcGh5X3NldHRpbmcgKmJvdHRvbWxlZnQsCisJCQkJ
ICAgICAgIHN0cnVjdCBwaHlfc2V0dGluZyAqdG9wcmlnaHQsCisJCQkJICAgICAgIHN0cnVjdCBw
aHlfc2V0dGluZyAqZ2FwaGlnaCkKK3sKKwlzdHJ1Y3QgcGh5X3NldHRpbmcgbGVmdCwgcmlnaHQs
IG1pZDsKKwlpbnQgcmV0OworCisJbGVmdCA9ICpib3R0b21sZWZ0OworCXJpZ2h0ID0gKnRvcHJp
Z2h0OworCisJbWlkLnR4ID0gbGVmdC50eCArICgocmlnaHQudHggLSBsZWZ0LnR4KSAvIDIpOwor
CW1pZC5yeCA9IGxlZnQucnggKyAoKHJpZ2h0LnJ4IC0gbGVmdC5yeCkgLyAyKTsKKwltaWQucmVh
ZF9kZWxheSA9IHJpZ2h0LnJlYWRfZGVsYXk7CisKKwlkbyB7CisJCXJldCA9IGNxc3BpX3BoeV9h
cHBseV9zZXR0aW5nKGZfcGRhdGEsICZtaWQpOworCQlpZiAoIXJldCkKKwkJCXJldCA9IGNxc3Bp
X3BoeV9jaGVja19wYXR0ZXJuKGZfcGRhdGEsIG1lbSk7CisKKwkJaWYgKHJldCkgeworCQkJLyog
VGhlIHBhdHRlcm4gd2FzIG5vdCBmb3VuZC4gR28gdG8gdGhlIHVwcGVyIGhhbGYuICovCisJCQls
ZWZ0LnR4ID0gbWlkLnR4OworCQkJbGVmdC5yeCA9IG1pZC5yeDsKKworCQkJbWlkLnR4ID0gbWlk
LnR4ICsgKChyaWdodC50eCAtIG1pZC50eCkgLyAyKTsKKwkJCW1pZC5yeCA9IG1pZC5yeCArICgo
cmlnaHQucnggLSBtaWQucngpIC8gMik7CisJCX0gZWxzZSB7CisJCQkvKiBUaGUgcGF0dGVybiB3
YXMgZm91bmQuIEdvIHRvIHRoZSBsb3dlciBoYWxmLiAqLworCQkJcmlnaHQudHggPSBtaWQudHg7
CisJCQlyaWdodC5yeCA9IG1pZC5yeDsKKworCQkJbWlkLnR4ID0gbGVmdC50eCArICgobWlkLnR4
IC0gbGVmdC50eCkgLyAyKTsKKwkJCW1pZC5yeCA9IGxlZnQucnggKyAoKG1pZC5yeCAtIGxlZnQu
cngpIC8gMik7CisJCX0KKworCQkvKiBCcmVhayB0aGUgbG9vcCBpZiB0aGUgd2luZG93IGhhcyBj
bG9zZWQuICovCisJfSB3aGlsZSAoKHJpZ2h0LnR4IC0gbGVmdC50eCA+PSAyKSAmJiAocmlnaHQu
cnggLSBsZWZ0LnJ4ID49IDIpKTsKKworCSpnYXBoaWdoID0gbWlkOworfQorCitzdGF0aWMgaW50
IGNxc3BpX2dldF90ZW1wKGludCAqdGVtcCkKK3sKKwkvKiBUT0RPOiByZWFkIFNvQyB0aGVybWFs
IHNlbnNvcjsgY2FsbGVyIGZhbGxzIGJhY2sgdG8gcm9vbSB0ZW1wZXJhdHVyZSAqLworCXJldHVy
biAtRU9QTk9UU1VQUDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNxc3BpX3BoeV9yZXNldF9z
ZXR0aW5nKHN0cnVjdCBwaHlfc2V0dGluZyAqcGh5KQoreworCSpwaHkgPSAoc3RydWN0IHBoeV9z
ZXR0aW5nKXsgLnJ4ID0gMCwgLnR4ID0gMTI3LCAucmVhZF9kZWxheSA9IDAgfTsKK30KKworc3Rh
dGljIGludCBjcXNwaV9waHlfdHVuaW5nX2RkcihzdHJ1Y3QgY3FzcGlfZmxhc2hfcGRhdGEgKmZf
cGRhdGEsCisJCQkJc3RydWN0IHNwaV9tZW0gKm1lbSkKK3sKKwlzdHJ1Y3QgY3FzcGlfc3QgKmNx
c3BpID0gZl9wZGF0YS0+Y3FzcGk7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmNxc3BpLT5wZGV2
LT5kZXY7CisJc3RydWN0IHBoeV9zZXR0aW5nIHJ4bG93LCByeGhpZ2gsIHR4bG93LCB0eGhpZ2g7
CisJc3RydWN0IHBoeV9zZXR0aW5nIHNyeGxvdywgc3J4aGlnaDsKKwlzdHJ1Y3QgcGh5X3NldHRp
bmcgYm90dG9tbGVmdCwgdG9wcmlnaHQsIHNlYXJjaHBvaW50OworCXN0cnVjdCBwaHlfc2V0dGlu
ZyBnYXBsb3csIGdhcGhpZ2g7CisJc3RydWN0IHBoeV9zZXR0aW5nIGJhY2t1cHBvaW50LCBiYWNr
dXBjb3JuZXJwb2ludDsKKwlpbnQgcmV0LCByeF93aW5kb3csIHRlbXA7CisJYm9vbCBwcmltYXJ5
ID0gdHJ1ZSwgc2Vjb25kYXJ5ID0gdHJ1ZTsKKworCS8qCisJICogRERSIHR1bmluZzogMkQgc2Vh
cmNoIGFjcm9zcyBSWCBhbmQgVFggZGVsYXlzIGZvciBvcHRpbWFsIHRpbWluZy4KKwkgKgorCSAq
IEFsZ29yaXRobTogRmluZCBSWCBib3VuZGFyaWVzIChyeGxvdy9yeGhpZ2gpIHVzaW5nIFRYIHdp
bmRvdyBzZWFyY2gsCisJICogZmluZCBUWCBib3VuZGFyaWVzICh0eGxvdy90eGhpZ2gpIGF0IGZp
eGVkIFJYLCBkZWZpbmUgdmFsaWQgcmVnaW9uLAorCSAqIGxvY2F0ZSBnYXBzIHZpYSBiaW5hcnkg
c2VhcmNoLCBzZWxlY3QgZmluYWwgcG9pbnQgd2l0aCB0ZW1wZXJhdHVyZQorCSAqIGNvbXBlbnNh
dGlvbi4KKwkgKgorCSAqICAgICAgICAgICAgICByeAorCSAqICAgICAgICAgIDEyNyBeCisJICog
ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3ByaWdodAor
CSAqICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgor
CSAqICAgICAgICAgICAgICB8ICAgICAgIHh4eHh4ICAgICArKysrKysrKysrKysrKysrKysrKwor
CSAqICAgICAgICAgICAgICB8ICAgICAgIHh4eHh4eCAgICAgKysrKysrKysrKysrKysrKysrKwor
CSAqICAgICAgICAgICAgICB8ICAgICAgIHh4eHh4eHggICAgICsrKysrKysrKysrKysrKysrKwor
CSAqICAgICAgICAgICAgICB8ICAgICAgIHh4eHh4eHh4ICAgICArKysrKysrKysrKysrKysrKwor
CSAqICAgICAgICAgICAgICB8ICAgICAgIHh4eHh4eHh4eCAgICAgKysrKysrKysrKysrKysrKwor
CSAqICAgICAgICAgICAgICB8ICAgICAgIHh4eHh4eHh4eHggICAgICsrKysrKysrKysrKysrKwor
CSAqICAgICAgICAgICAgICB8ICAgICAgIHh4eHh4eHh4eHh4ICAgICArKysrKysrKysrKysrKwor
CSAqICAgICAgICAgICAgICB8ICAgICAgIHh4eHh4eHh4eHh4eCAgICAgKysrKysrKysrKysrKwor
CSAqICAgICAgICAgICAgICB8ICAgICAgIHh4eHh4eHh4eHh4eHggICAgICsrKysrKysrKysrKwor
CSAqICAgICAgICAgICAgICB8ICAgICAgIHh4eHh4eHh4eHh4eHh4ICAgICArKysrKysrKysrKwor
CSAqICAgICAgICAgICAgICB8ICAgICAgIHh4eHh4eHh4eHh4eHh4eCAgICAgKysrKysrKysrKwor
CSAqICAgICAgICAgICAgICB8ICAgICAgIHh4eHh4eHh4eHh4eHh4eHggICAgICsrKysrKysrKwor
CSAqICAgICAgICAgICAgICB8ICAgICAgIHh4eHh4eHh4eHh4eHh4eHh4ICAgICArKysrKysrKwor
CSAqICAgICAgICAgICAgICB8ICAgICAgIHh4eHh4eHh4eHh4eHh4eHh4eCAgICAgKysrKysrKwor
CSAqICAgICAgICAgICAgICB8ICAgICAgICoKKwkgKiAgICAgICAgICAgICAgfCAgYm90dG9tbGVm
dAorCSAqICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLT4gdHgKKwkgKiAgICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMTI3CisJICovCisKKwlmX3BkYXRhLT51c2VfdHVuZWRfcGh5ID0gdHJ1ZTsKKwor
CS8qIEdvbGRlbiByeGxvdyBzZWFyY2g6IEZpbmQgbG93ZXIgUlggYm91bmRhcnkgdXNpbmcgVFgg
d2luZG93IHN3ZWVwICovCisKKwkvKgorCSAqICAgICAgICAgICAgICByeAorCSAqICAgICAgICAg
IDEyNyBeCisJICogICAgICAgICAgICAgIHwgICAgICAgeHh4eHggICAgICsrKysrKysrKysrKysr
KysrKysrCisJICogICAgICAgICAgICAgIHwgICAgICAgeHh4eHh4ICAgICArKysrKysrKysrKysr
KysrKysrCisJICogICAgICAgICAgICAgIHwgICAgICAgeHh4eHh4eCAgICAgKysrKysrKysrKysr
KysrKysrCisJICogICAgICAgICAgICAgIHwgICAgICAgeHh4eHh4eHggICAgICsrKysrKysrKysr
KysrKysrCisJICogICAgICAgICAgICAgIHwgICAgICAgeHh4eHh4eHh4ICAgICArKysrKysrKysr
KysrKysrCisJICogICAgICAgICAgICAgIHwgICAgICAgeHh4eHh4eHh4eCAgICAgKysrKysrKysr
KysrKysrCisJICogICAgICAgICAgICAgIHwgICAgICAgeHh4eHh4eHh4eHggICAgICsrKysrKysr
KysrKysrCisJICogICAgICAgICAgICAgIHwgICAgICAgfHh4eHh4fHh4eHh4ICAgICArKysrKysr
KysrKysrCisJICogICAgICAgICAgICAgIHwgICAgICAgfHh4eHh4fHh4eHh4eCAgICAgKysrKysr
KysrKysrCisJICogICAgICBzZWFyY2ggIHwgICAgICAgfHh4eHh4fHh4eHh4eHggICAgICsrKysr
KysrKysrCisJICogICAgICByeGxvdyAtLS0tLS0tLS0+fHh4eHh4fHh4eHh4eHh4ICAgICArKysr
KysrKysrCisJICogICAgICAgICAgICAgIHwgICAgICAgfHh4eHh4fHh4eHh4eHh4eCAgICAgKysr
KysrKysrCisJICogICAgICAgICAgICAgIHwgICAgICAgfHh4eHh4fHh4eHh4eHh4eHggICAgICsr
KysrKysrCisJICogICAgICAgICAgICAgIHwgICAgICAgfHh4eHh4fHh4eHh4eHh4eHh4ICAgICAr
KysrKysrCisJICogICAgICAgICAgICAgIHwgICAgICAgfCAgICAgfAorCSAqICAgICAgICAgICAg
ICAtLS0tLS0tLXwtLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPiB0eAorCSAqICAg
ICAgICAgICAgICAwICAgICAgIHwgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgIDEyNwor
CSAqICAgICAgICAgICAgICAgICAgdHhsb3cgICAgIHR4bG93CisJICogICAgICAgICAgICAgICAg
ICBzdGFydCAgICAgZW5kCisJICoKKwkgKiAgICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAorCSAqICAgICAgfCBQcmltYXJ5IHwg
U2Vjb25kYXJ5IHwgRmluYWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisJICogICAg
ICB8IFNlYXJjaCAgfCBTZWFyY2ggICAgfCBQb2ludCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHwKKwkgKiAgICAgIHwtLS0tLS0tLS18LS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tfAorCSAqICAgICAgfCBGYWlsICAgIHwgRmFpbCAgICAgIHwgUmV0
dXJuIEZhaWwgICAgICAgICAgICAgICAgICAgICAgICB8CisJICogICAgICB8LS0tLS0tLS0tfC0t
LS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKKwkgKiAgICAg
IHwgRmFpbCAgICB8IFBhc3MgICAgICB8IFJldHVybiBGYWlsICAgICAgICAgICAgICAgICAgICAg
ICAgfAorCSAqICAgICAgfC0tLS0tLS0tLXwtLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS18CisJICogICAgICB8IFBhc3MgICAgfCBGYWlsICAgICAgfCBSZXR1
cm4gRmFpbCAgICAgICAgICAgICAgICAgICAgICAgIHwKKwkgKiAgICAgIHwtLS0tLS0tLS18LS0t
LS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAorCSAqICAgICAg
fCBQYXNzICAgIHwgUGFzcyAgICAgIHwgcnggPSBtaW4ocHJpbWFyeS5yeCwgc2Vjb25kYXJ5LnJ4
KSB8CisJICogICAgICB8ICAgICAgICAgfCAgICAgICAgICAgfCB0eCA9IHByaW1hcnkudHggICAg
ICAgICAgICAgICAgICAgIHwKKwkgKiAgICAgIHwgICAgICAgICB8ICAgICAgICAgICB8IHJlYWRf
ZGVsYXkgPSAgICAgICAgICAgICAgICAgICAgICAgfAorCSAqICAgICAgfCAgICAgICAgIHwgICAg
ICAgICAgIHwgICAgICAgICBtaW4ocHJpbWFyeS5yZWFkX2RlbGF5LCAgICB8CisJICogICAgICB8
ICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICBzZWNvbmRhcnkucmVhZF9kZWxheSkg
IHwKKwkgKiAgICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tfAorCSAqLworCisJLyogUHJpbWFyeSByeGxvdzogU3dlZXAgVFggd2lu
ZG93IHRvIGZpbmQgdmFsaWQgUlggbG93ZXIgYm91bmQgKi8KKworCXJ4bG93LnR4ID0gQ1FTUElf
UEhZX1RYX0xPT0tVUF9MT1dfU1RBUlQ7CisJZG8geworCQlkZXZfZGJnKGRldiwgIlNlYXJjaGlu
ZyBmb3IgR29sZGVuIFByaW1hcnkgcnhsb3cgb24gVFggPSAlZFxuIiwKKwkJCXJ4bG93LnR4KTsK
KwkJcnhsb3cucmVhZF9kZWxheSA9IENRU1BJX1BIWV9JTklUX1JEOworCQlyZXQgPSBjcXNwaV9m
aW5kX3J4X2xvd19kZHIoZl9wZGF0YSwgbWVtLCAmcnhsb3cpOworCQlyeGxvdy50eCArPSBDUVNQ
SV9QSFlfRERSX1NFQVJDSF9TVEVQOworCX0gd2hpbGUgKHJldCAmJiByeGxvdy50eCA8PSBDUVNQ
SV9QSFlfVFhfTE9PS1VQX0xPV19FTkQpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCWRldl9k
YmcoZGV2LCAiR29sZGVuIFByaW1hcnkgcnhsb3c6IFJYOiAlZCBUWDogJWQgUkQ6ICVkXG4iLCBy
eGxvdy5yeCwKKwkJcnhsb3cudHgsIHJ4bG93LnJlYWRfZGVsYXkpOworCisJLyogU2Vjb25kYXJ5
IHJ4bG93OiBWZXJpZnkgYXQgb2Zmc2V0IFRYIGZvciByb2J1c3RuZXNzICovCisKKwlpZiAocnhs
b3cudHggPD0gKENRU1BJX1BIWV9UWF9MT09LVVBfTE9XX0VORCAtIENRU1BJX1BIWV9TRUFSQ0hf
T0ZGU0VUKSkKKwkJc3J4bG93LnR4ID0gcnhsb3cudHggKyBDUVNQSV9QSFlfU0VBUkNIX09GRlNF
VDsKKwllbHNlCisJCXNyeGxvdy50eCA9IENRU1BJX1BIWV9UWF9MT09LVVBfTE9XX0VORDsKKwlk
ZXZfZGJnKGRldiwgIlNlYXJjaGluZyBmb3IgR29sZGVuIFNlY29uZGFyeSByeGxvdyBvbiBUWCA9
ICVkXG4iLAorCQlzcnhsb3cudHgpOworCXNyeGxvdy5yZWFkX2RlbGF5ID0gQ1FTUElfUEhZX0lO
SVRfUkQ7CisJcmV0ID0gY3FzcGlfZmluZF9yeF9sb3dfZGRyKGZfcGRhdGEsIG1lbSwgJnNyeGxv
dyk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisJZGV2X2RiZyhkZXYsICJHb2xkZW4gU2Vjb25k
YXJ5IHJ4bG93OiBSWDogJWQgVFg6ICVkIFJEOiAlZFxuIiwKKwkJc3J4bG93LnJ4LCBzcnhsb3cu
dHgsIHNyeGxvdy5yZWFkX2RlbGF5KTsKKworCXJ4bG93LnJ4ID0gbWluKHJ4bG93LnJ4LCBzcnhs
b3cucngpOworCXJ4bG93LnJlYWRfZGVsYXkgPSBtaW4ocnhsb3cucmVhZF9kZWxheSwgc3J4bG93
LnJlYWRfZGVsYXkpOworCWRldl9kYmcoZGV2LCAiR29sZGVuIEZpbmFsIHJ4bG93OiBSWDogJWQg
VFg6ICVkIFJEOiAlZFxuIiwgcnhsb3cucngsCisJCXJ4bG93LnR4LCByeGxvdy5yZWFkX2RlbGF5
KTsKKworCS8qIEdvbGRlbiByeGhpZ2ggc2VhcmNoOiBGaW5kIHVwcGVyIFJYIGJvdW5kYXJ5IGF0
IGZpeGVkIFRYICovCisKKwkvKgorCSAqICAgICAgICAgICAgICByeAorCSAqICAgICAgICAgIDEy
NyBeCisJICogICAgICAgICAgICAgIHwgICAgICAgfHh4eHggICAgICsrKysrKysrKysrKysrKysr
KysrCisJICogICAgICAgICAgICAgIHwgICAgICAgfHh4eHh4ICAgICArKysrKysrKysrKysrKysr
KysrCisJICogICAgc2VhcmNoICAgIHwgICAgICAgfHh4eHh4eCAgICAgKysrKysrKysrKysrKysr
KysrCisJICogICAgcnhoaWdoICAtLS0tLS0tLS0+fHh4eHh4eHggICAgICsrKysrKysrKysrKysr
KysrCisJICogICAgb24gZml4ZWQgIHwgICAgICAgfHh4eHh4eHh4ICAgICArKysrKysrKysrKysr
KysrCisJICogICAgdHggICAgICAgIHwgICAgICAgfHh4eHh4eHh4eCAgICAgKysrKysrKysrKysr
KysrCisJICogICAgICAgICAgICAgIHwgICAgICAgfHh4eHh4eHh4eHggICAgICsrKysrKysrKysr
KysrCisJICogICAgICAgICAgICAgIHwgICAgICAgeHh4eHh4eHh4eHh4ICAgICArKysrKysrKysr
KysrCisJICogICAgICAgICAgICAgIHwgICAgICAgeHh4eHh4eHh4eHh4eCAgICAgKysrKysrKysr
KysrCisJICogICAgICAgICAgICAgIHwgICAgICAgeHh4eHh4eHh4eHh4eHggICAgICsrKysrKysr
KysrCisJICogICAgICAgICAgICAgIHwgICAgICAgeHh4eHh4eHh4eHh4eHh4ICAgICArKysrKysr
KysrCisJICogICAgICAgICAgICAgIHwgICAgICAgeHh4eHh4eHh4eHh4eHh4eCAgICAgKysrKysr
KysrCisJICogICAgICAgICAgICAgIHwgICAgICAgeHh4eHh4eHh4eHh4eHh4eHggICAgICsrKysr
KysrCisJICogICAgICAgICAgICAgIHwgICAgICAgeHh4eHh4eHh4eHh4eHh4eHh4ICAgICArKysr
KysrCisJICogICAgICAgICAgICAgIHwKKwkgKiAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT4gdHgKKwkgKiAgICAgICAgICAgICAgMCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMjcKKwkgKgorCSAqICAgICAgfC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18
CisJICogICAgICB8IFByaW1hcnkgfCBTZWNvbmRhcnkgfCBGaW5hbCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHwKKwkgKiAgICAgIHwgU2VhcmNoICB8IFNlYXJjaCAgICB8IFBvaW50ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorCSAqICAgICAgfC0tLS0tLS0tLXwtLS0tLS0t
LS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CisJICogICAgICB8IEZh
aWwgICAgfCBGYWlsICAgICAgfCBSZXR1cm4gRmFpbCAgICAgICAgICAgICAgICAgICAgICAgIHwK
KwkgKiAgICAgIHwtLS0tLS0tLS18LS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tfAorCSAqICAgICAgfCBGYWlsICAgIHwgUGFzcyAgICAgIHwgQ2hvb3NlIFNl
Y29uZGFyeSAgICAgICAgICAgICAgICAgICB8CisJICogICAgICB8LS0tLS0tLS0tfC0tLS0tLS0t
LS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKKwkgKiAgICAgIHwgUGFz
cyAgICB8IEZhaWwgICAgICB8IENob29zZSBQcmltYXJ5ICAgICAgICAgICAgICAgICAgICAgfAor
CSAqICAgICAgfC0tLS0tLS0tLXwtLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS18CisJICogICAgICB8IFBhc3MgICAgfCBQYXNzICAgICAgfCBpZiAoc2Vjb25k
YXJ5LnJ4ID4gcHJpbWFyeS5yeCkgICAgIHwKKwkgKiAgICAgIHwgICAgICAgICB8ICAgICAgICAg
ICB8ICAgICAgICAgQ2hvb3NlIFNlY29uZGFyeSAgICAgICAgICAgfAorCSAqICAgICAgfCAgICAg
ICAgIHwgICAgICAgICAgIHwgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisJ
ICogICAgICB8ICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgIENob29zZSBQcmltYXJ5ICAg
ICAgICAgICAgIHwKKwkgKiAgICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAorCSAqLworCisJLyogUHJpbWFyeSByeGhpZ2g6IFNl
YXJjaCBhdCByeGxvdydzIFRYLCBkZWNyZW1lbnQgZnJvbSBtYXggcmVhZF9kZWxheSAqLworCisJ
cnhoaWdoLnR4ID0gcnhsb3cudHg7CisJZGV2X2RiZyhkZXYsICJTZWFyY2hpbmcgZm9yIEdvbGRl
biBQcmltYXJ5IHJ4aGlnaCBvbiBUWCA9ICVkXG4iLAorCQlyeGhpZ2gudHgpOworCXJ4aGlnaC5y
ZWFkX2RlbGF5ID0gQ1FTUElfUEhZX01BWF9SRDsKKwlyZXQgPSBjcXNwaV9maW5kX3J4X2hpZ2hf
ZGRyKGZfcGRhdGEsIG1lbSwgJnJ4aGlnaCk7CisJaWYgKHJldCkKKwkJcHJpbWFyeSA9IGZhbHNl
OworCWRldl9kYmcoZGV2LCAiR29sZGVuIFByaW1hcnkgcnhoaWdoOiBSWDogJWQgVFg6ICVkIFJE
OiAlZFxuIiwgcnhoaWdoLnJ4LAorCQlyeGhpZ2gudHgsIHJ4aGlnaC5yZWFkX2RlbGF5KTsKKwor
CS8qIFNlY29uZGFyeSByeGhpZ2g6IFZlcmlmeSBhdCBvZmZzZXQgVFggKi8KKworCWlmIChyeGhp
Z2gudHggPD0KKwkgICAgKENRU1BJX1BIWV9UWF9MT09LVVBfTE9XX0VORCAtIENRU1BJX1BIWV9T
RUFSQ0hfT0ZGU0VUKSkKKwkJc3J4aGlnaC50eCA9IHJ4aGlnaC50eCArIENRU1BJX1BIWV9TRUFS
Q0hfT0ZGU0VUOworCWVsc2UKKwkJc3J4aGlnaC50eCA9IENRU1BJX1BIWV9UWF9MT09LVVBfTE9X
X0VORDsKKwlkZXZfZGJnKGRldiwgIlNlYXJjaGluZyBmb3IgR29sZGVuIFNlY29uZGFyeSByeGhp
Z2ggb24gVFggPSAlZFxuIiwKKwkJc3J4aGlnaC50eCk7CisJc3J4aGlnaC5yZWFkX2RlbGF5ID0g
Q1FTUElfUEhZX01BWF9SRDsKKwlyZXQgPSBjcXNwaV9maW5kX3J4X2hpZ2hfZGRyKGZfcGRhdGEs
IG1lbSwgJnNyeGhpZ2gpOworCWlmIChyZXQpCisJCXNlY29uZGFyeSA9IGZhbHNlOworCWRldl9k
YmcoZGV2LCAiR29sZGVuIFNlY29uZGFyeSByeGhpZ2g6IFJYOiAlZCBUWDogJWQgUkQ6ICVkXG4i
LAorCQlzcnhoaWdoLnJ4LCBzcnhoaWdoLnR4LCBzcnhoaWdoLnJlYWRfZGVsYXkpOworCisJaWYg
KCFwcmltYXJ5ICYmICFzZWNvbmRhcnkpCisJCWdvdG8gb3V0OworCWVsc2UgaWYgKCFwcmltYXJ5
KQorCQlyeGhpZ2ggPSBzcnhoaWdoOworCWVsc2UgaWYgKHNlY29uZGFyeSAmJiBzcnhoaWdoLnJ4
ID4gcnhoaWdoLnJ4KQorCQlyeGhpZ2ggPSBzcnhoaWdoOworCWRldl9kYmcoZGV2LCAiR29sZGVu
IEZpbmFsIHJ4aGlnaDogUlg6ICVkIFRYOiAlZCBSRDogJWRcbiIsIHJ4aGlnaC5yeCwKKwkJcnho
aWdoLnR4LCByeGhpZ2gucmVhZF9kZWxheSk7CisKKwlwcmltYXJ5ID0gdHJ1ZTsKKwlzZWNvbmRh
cnkgPSB0cnVlOworCisJLyogSWYgcnhsb3cvcnhoaWdoIGF0IHNhbWUgcmVhZF9kZWxheSwgc2Vh
cmNoIGJhY2t1cCBhdCB1cHBlciBUWCByYW5nZSAqLworCisJaWYgKHJ4bG93LnJlYWRfZGVsYXkg
PT0gcnhoaWdoLnJlYWRfZGVsYXkpIHsKKwkJZGV2X2RiZyhkZXYsICJyeGxvdyBhbmQgcnhoaWdo
IGF0IHRoZSBzYW1lIHJlYWQgZGVsYXkuXG4iKTsKKworCQkvKiBCYWNrdXAgcnhsb3c6IFNlYXJj
aCBhdCBoaWdoIFRYIHdpbmRvdyAqLworCisJCS8qCisJCSAqICAgICAgICAgICAgICByeAorCQkg
KiAgICAgICAgICAxMjcgXgorCQkgKiAgICAgICAgICAgICAgfCAgICAgICB4eHh4eCAgICAgKysr
KysrKysrKysrKysrKysrKysKKwkJICogICAgICAgICAgICAgIHwgICAgICAgeHh4eHh4ICAgICAr
KysrKysrKysrKysrKysrKysrCisJCSAqICAgICAgICAgICAgICB8ICAgICAgIHh4eHh4eHggICAg
ICsrKysrKysrKysrKysrKysrKworCQkgKiAgICAgICAgICAgICAgfCAgICAgICB4eHh4eHh4eCAg
ICAgKysrKysrKysrKysrKysrKysKKwkJICogICAgICAgICAgICAgIHwgICAgICAgeHh4eHh4eHh4
ICAgICArKysrKysrKysrKysrKysrCisJCSAqICAgICAgICAgICAgICB8ICAgICAgIHh4eHh4eHh4
eHggICAgICsrKysrKysrKysrKysrKworCQkgKiAgICAgICAgICAgICAgfCAgICAgICB4eHh4eHh4
eHh4eCAgICAgKysrKysrKysrKysrKysKKwkJICogICAgICAgICAgICAgIHwgICAgICAgeHh4eHh4
eHh4eHh4ICAgICArKysrKysrfCsrKyt8CisJCSAqICAgICAgICAgICAgICB8ICAgICAgIHh4eHh4
eHh4eHh4eHggICAgICsrKysrK3wrKysrfAorCQkgKiAgICAgIHNlYXJjaCAgfCAgICAgICB4eHh4
eHh4eHh4eHh4eCAgICAgKysrKyt8KysrK3wKKwkJICogICAgICByeGxvdyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0+fCsrKyt8CisJCSAqICAgICAgICAgICAgICB8ICAgICAgIHh4
eHh4eHh4eHh4eHh4eHggICAgICsrK3wrKysrfAorCQkgKiAgICAgICAgICAgICAgfCAgICAgICB4
eHh4eHh4eHh4eHh4eHh4eCAgICAgKyt8KysrK3wKKwkJICogICAgICAgICAgICAgIHwgICAgICAg
eHh4eHh4eHh4eHh4eHh4eHh4ICAgICArfCsrKyt8CisJCSAqICAgICAgICAgICAgICB8ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgfAorCQkgKiAgICAgICAgICAgICAgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLXwtLS0tLT4gdHgKKwkJICogICAgICAgICAg
ICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICB8ICAgMTI3CisJCSAqICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eGhpZ2ggICAgdHhoaWdoCisJ
CSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgICAgZW5k
CisJCSAqCisJCSAqICAgICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tfAorCQkgKiAgICAgIHwgUHJpbWFyeSB8IFNlY29uZGFyeSB8IEZpbmFs
ICAgICAgICAgICAgICAgICAgICAgICAgIHwKKwkJICogICAgICB8IFNlYXJjaCAgfCBTZWFyY2gg
ICAgfCBQb2ludCAgICAgICAgICAgICAgICAgICAgICAgICB8CisJCSAqICAgICAgfC0tLS0tLS0t
LXwtLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAorCQkgKiAgICAg
IHwgRmFpbCAgICB8IEZhaWwgICAgICB8IFJldHVybiBGYWlsICAgICAgICAgICAgICAgICAgIHwK
KwkJICogICAgICB8LS0tLS0tLS0tfC0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS18CisJCSAqICAgICAgfCBGYWlsICAgIHwgUGFzcyAgICAgIHwgUmV0dXJuIEZhaWwg
ICAgICAgICAgICAgICAgICAgfAorCQkgKiAgICAgIHwtLS0tLS0tLS18LS0tLS0tLS0tLS18LS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKKwkJICogICAgICB8IFBhc3MgICAgfCBGYWls
ICAgICAgfCBSZXR1cm4gRmFpbCAgICAgICAgICAgICAgICAgICB8CisJCSAqICAgICAgfC0tLS0t
LS0tLXwtLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAorCQkgKiAg
ICAgIHwgUGFzcyAgICB8IFBhc3MgICAgICB8IHJ4ID0gICAgICAgICAgICAgICAgICAgICAgICAg
IHwKKwkJICogICAgICB8ICAgICAgICAgfCAgICAgICAgICAgfCAgbWluKHByaW1hcnkucngsIHNl
Y29uZGFyeS5yeCl8CisJCSAqICAgICAgfCAgICAgICAgIHwgICAgICAgICAgIHwgdHggPSBwcmlt
YXJ5LnR4ICAgICAgICAgICAgICAgfAorCQkgKiAgICAgIHwgICAgICAgICB8ICAgICAgICAgICB8
IHJlYWRfZGVsYXkgPSAgICAgICAgICAgICAgICAgIHwKKwkJICogICAgICB8ICAgICAgICAgfCAg
ICAgICAgICAgfCAgbWluKHByaW1hcnkucmVhZF9kZWxheSwgICAgICB8CisJCSAqICAgICAgfCAg
ICAgICAgIHwgICAgICAgICAgIHwgICAgICBzZWNvbmRhcnkucmVhZF9kZWxheSkgICAgfAorCQkg
KiAgICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLXwKKwkJICovCisKKwkJLyogUHJpbWFyeSBiYWNrdXA6IERlY3JlbWVudCBUWCBmcm9tIGhp
Z2ggd2luZG93IGVuZCAqLworCisJCWJhY2t1cHBvaW50LnR4ID0gQ1FTUElfUEhZX1RYX0xPT0tV
UF9ISUdIX0VORDsKKwkJZG8geworCQkJZGV2X2RiZyhkZXYsCisJCQkJIlNlYXJjaGluZyBmb3Ig
QmFja3VwIFByaW1hcnkgcnhsb3cgb24gVFggPSAlZFxuIiwKKwkJCQliYWNrdXBwb2ludC50eCk7
CisJCQliYWNrdXBwb2ludC5yZWFkX2RlbGF5ID0gQ1FTUElfUEhZX0lOSVRfUkQ7CisJCQlyZXQg
PSBjcXNwaV9maW5kX3J4X2xvd19kZHIoZl9wZGF0YSwgbWVtLCAmYmFja3VwcG9pbnQpOworCQkJ
YmFja3VwcG9pbnQudHggLT0gQ1FTUElfUEhZX0REUl9TRUFSQ0hfU1RFUDsKKwkJfSB3aGlsZSAo
cmV0ICYmCisJCQkgYmFja3VwcG9pbnQudHggPj0gQ1FTUElfUEhZX1RYX0xPT0tVUF9ISUdIX1NU
QVJUKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gb3V0OworCQlkZXZfZGJnKGRldiwgIkJhY2t1cCBQ
cmltYXJ5IHJ4bG93OiBSWDogJWQgVFg6ICVkIFJEOiAlZFxuIiwKKwkJCWJhY2t1cHBvaW50LnJ4
LCBiYWNrdXBwb2ludC50eCwgYmFja3VwcG9pbnQucmVhZF9kZWxheSk7CisKKwkJLyogU2Vjb25k
YXJ5IGJhY2t1cDogVmVyaWZ5IGF0IG9mZnNldCBUWCAqLworCisJCWlmIChiYWNrdXBwb2ludC50
eCA+PQorCQkgICAgKENRU1BJX1BIWV9UWF9MT09LVVBfSElHSF9TVEFSVCArIENRU1BJX1BIWV9T
RUFSQ0hfT0ZGU0VUKSkKKwkJCXNyeGxvdy50eCA9IGJhY2t1cHBvaW50LnR4IC0gQ1FTUElfUEhZ
X1NFQVJDSF9PRkZTRVQ7CisJCWVsc2UKKwkJCXNyeGxvdy50eCA9IENRU1BJX1BIWV9UWF9MT09L
VVBfSElHSF9TVEFSVDsKKwkJZGV2X2RiZyhkZXYsCisJCQkiU2VhcmNoaW5nIGZvciBCYWNrdXAg
U2Vjb25kYXJ5IHJ4bG93IG9uIFRYID0gJWRcbiIsCisJCQlzcnhsb3cudHgpOworCQlzcnhsb3cu
cmVhZF9kZWxheSA9IENRU1BJX1BIWV9JTklUX1JEOworCQlyZXQgPSBjcXNwaV9maW5kX3J4X2xv
d19kZHIoZl9wZGF0YSwgbWVtLCAmc3J4bG93KTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gb3V0Owor
CQlkZXZfZGJnKGRldiwgIkJhY2t1cCBTZWNvbmRhcnkgcnhsb3c6IFJYOiAlZCBUWDogJWQgUkQ6
ICVkXG4iLAorCQkJc3J4bG93LnJ4LCBzcnhsb3cudHgsIHNyeGxvdy5yZWFkX2RlbGF5KTsKKwor
CQliYWNrdXBwb2ludC5yeCA9IG1pbihiYWNrdXBwb2ludC5yeCwgc3J4bG93LnJ4KTsKKwkJYmFj
a3VwcG9pbnQucmVhZF9kZWxheSA9CisJCQltaW4oYmFja3VwcG9pbnQucmVhZF9kZWxheSwgc3J4
bG93LnJlYWRfZGVsYXkpOworCQlkZXZfZGJnKGRldiwgIkJhY2t1cCBGaW5hbCByeGxvdzogUlg6
ICVkIFRYOiAlZCBSRDogJWRcbiIsCisJCQliYWNrdXBwb2ludC5yeCwgYmFja3VwcG9pbnQudHgs
IGJhY2t1cHBvaW50LnJlYWRfZGVsYXkpOworCisJCWlmIChiYWNrdXBwb2ludC5yeCA8IHJ4bG93
LnJ4KSB7CisJCQlyeGxvdyA9IGJhY2t1cHBvaW50OworCQkJZGV2X2RiZyhkZXYsICJVcGRhdGlu
ZyByeGxvdyB0byB0aGUgb25lIGF0IFRYID0gJWRcbiIsCisJCQkJYmFja3VwcG9pbnQudHgpOwor
CQl9CisJCWRldl9kYmcoZGV2LCAiRmluYWwgcnhsb3c6IFJYOiAlZCBUWDogJWQgUkQ6ICVkXG4i
LCByeGxvdy5yeCwKKwkJCXJ4bG93LnR4LCByeGxvdy5yZWFkX2RlbGF5KTsKKworCQkvKiBCYWNr
dXAgcnhoaWdoOiBTZWFyY2ggYXQgZml4ZWQgYmFja3VwIFRYICovCisKKwkJLyoKKwkJICogICAg
ICAgICAgICAgIHJ4CisJCSAqICAgICAgICAgIDEyNyBeCisJCSAqICAgICAgICAgICAgICB8ICAg
ICAgIHh4eHh4ICAgICArKysrKysrKysrKysrKysrKysrfAorCQkgKiAgICAgICAgICAgICAgfCAg
ICAgICB4eHh4eHggICAgICsrKysrKysrKysrKysrKysrK3wKKwkJICogICAgc2VhcmNoICAgIHwg
ICAgICAgeHh4eHh4eCAgICAgKysrKysrKysrKysrKysrKyt8CisJCSAqICAgIHJ4aGlnaCAgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+fAorCQkgKiAgICBvbiBmaXhlZCAg
fCAgICAgICB4eHh4eHh4eHggICAgICsrKysrKysrKysrKysrK3wKKwkJICogICAgdHggICAgICAg
IHwgICAgICAgeHh4eHh4eHh4eCAgICAgKysrKysrKysrKysrKyt8CisJCSAqICAgICAgICAgICAg
ICB8ICAgICAgIHh4eHh4eHh4eHh4ICAgICArKysrKysrKysrKysrfAorCQkgKiAgICAgICAgICAg
ICAgfCAgICAgICB4eHh4eHh4eHh4eHggICAgICsrKysrKysrKysrKysKKwkJICogICAgICAgICAg
ICAgIHwgICAgICAgeHh4eHh4eHh4eHh4eCAgICAgKysrKysrKysrKysrCisJCSAqICAgICAgICAg
ICAgICB8ICAgICAgIHh4eHh4eHh4eHh4eHh4ICAgICArKysrKysrKysrKworCQkgKiAgICAgICAg
ICAgICAgfCAgICAgICB4eHh4eHh4eHh4eHh4eHggICAgICsrKysrKysrKysKKwkJICogICAgICAg
ICAgICAgIHwgICAgICAgeHh4eHh4eHh4eHh4eHh4eCAgICAgKysrKysrKysrCisJCSAqICAgICAg
ICAgICAgICB8ICAgICAgIHh4eHh4eHh4eHh4eHh4eHh4ICAgICArKysrKysrKworCQkgKiAgICAg
ICAgICAgICAgfCAgICAgICB4eHh4eHh4eHh4eHh4eHh4eHggICAgICsrKysrKysKKwkJICogICAg
ICAgICAgICAgIHwKKwkJICogICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0+IHR4CisJCSAqICAgICAgICAgICAgICAgMCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAxMjcKKwkJICoKKwkJICogICAgICB8LS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CisJCSAqICAgICAg
fCBQcmltYXJ5IHwgU2Vjb25kYXJ5IHwgRmluYWwgICAgICAgICAgICAgICAgICAgICAgICAgfAor
CQkgKiAgICAgIHwgU2VhcmNoICB8IFNlYXJjaCAgICB8IFBvaW50ICAgICAgICAgICAgICAgICAg
ICAgICAgIHwKKwkJICogICAgICB8LS0tLS0tLS0tfC0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS18CisJCSAqICAgICAgfCBGYWlsICAgIHwgRmFpbCAgICAgIHwgUmV0
dXJuIEZhaWwgICAgICAgICAgICAgICAgICAgfAorCQkgKiAgICAgIHwtLS0tLS0tLS18LS0tLS0t
LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKKwkJICogICAgICB8IEZhaWwg
ICAgfCBQYXNzICAgICAgfCBDaG9vc2UgU2Vjb25kYXJ5ICAgICAgICAgICAgICB8CisJCSAqICAg
ICAgfC0tLS0tLS0tLXwtLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
fAorCQkgKiAgICAgIHwgUGFzcyAgICB8IEZhaWwgICAgICB8IENob29zZSBQcmltYXJ5ICAgICAg
ICAgICAgICAgIHwKKwkJICogICAgICB8LS0tLS0tLS0tfC0tLS0tLS0tLS0tfC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS18CisJCSAqICAgICAgfCBQYXNzICAgIHwgUGFzcyAgICAgIHwg
aWYgKHNlY29uZGFyeS5yeCA+IHByaW1hcnkucngpfAorCQkgKiAgICAgIHwgICAgICAgICB8ICAg
ICAgICAgICB8ICAgICAgICAgQ2hvb3NlIFNlY29uZGFyeSAgICAgIHwKKwkJICogICAgICB8ICAg
ICAgICAgfCAgICAgICAgICAgfCBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICB8CisJCSAq
ICAgICAgfCAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICBDaG9vc2UgUHJpbWFyeSAgICAg
ICAgfAorCQkgKiAgICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLXwKKwkJICovCisKKwkJLyogUHJpbWFyeSBiYWNrdXAgcnhoaWdoOiBVc2Ug
YmFja3VwIFRYLCBkZWNyZW1lbnQgZnJvbSBtYXggcmVhZF9kZWxheSAqLworCisJCWRldl9kYmco
ZGV2LCAiU2VhcmNoaW5nIGZvciBCYWNrdXAgUHJpbWFyeSByeGhpZ2ggb24gVFggPSAlZFxuIiwK
KwkJCWJhY2t1cHBvaW50LnR4KTsKKwkJYmFja3VwcG9pbnQucmVhZF9kZWxheSA9IENRU1BJX1BI
WV9NQVhfUkQ7CisJCXJldCA9IGNxc3BpX2ZpbmRfcnhfaGlnaF9kZHIoZl9wZGF0YSwgbWVtLCAm
YmFja3VwcG9pbnQpOworCQlpZiAocmV0KQorCQkJcHJpbWFyeSA9IGZhbHNlOworCQlkZXZfZGJn
KGRldiwgIkJhY2t1cCBQcmltYXJ5IHJ4aGlnaDogUlg6ICVkIFRYOiAlZCBSRDogJWRcbiIsCisJ
CQliYWNrdXBwb2ludC5yeCwgYmFja3VwcG9pbnQudHgsIGJhY2t1cHBvaW50LnJlYWRfZGVsYXkp
OworCisJCS8qIFNlY29uZGFyeSBiYWNrdXAgcnhoaWdoOiBWZXJpZnkgYXQgb2Zmc2V0IFRYICov
CisKKwkJaWYgKGJhY2t1cHBvaW50LnR4ID49CisJCSAgICAoQ1FTUElfUEhZX1RYX0xPT0tVUF9I
SUdIX1NUQVJUICsgQ1FTUElfUEhZX1NFQVJDSF9PRkZTRVQpKQorCQkJc3J4aGlnaC50eCA9IGJh
Y2t1cHBvaW50LnR4IC0gQ1FTUElfUEhZX1NFQVJDSF9PRkZTRVQ7CisJCWVsc2UKKwkJCXNyeGhp
Z2gudHggPSBDUVNQSV9QSFlfVFhfTE9PS1VQX0hJR0hfU1RBUlQ7CisJCWRldl9kYmcoZGV2LAor
CQkJIlNlYXJjaGluZyBmb3IgQmFja3VwIFNlY29uZGFyeSByeGhpZ2ggb24gVFggPSAlZFxuIiwK
KwkJCXNyeGhpZ2gudHgpOworCQlzcnhoaWdoLnJlYWRfZGVsYXkgPSBDUVNQSV9QSFlfTUFYX1JE
OworCQlyZXQgPSBjcXNwaV9maW5kX3J4X2hpZ2hfZGRyKGZfcGRhdGEsIG1lbSwgJnNyeGhpZ2gp
OworCQlpZiAocmV0KQorCQkJc2Vjb25kYXJ5ID0gZmFsc2U7CisJCWRldl9kYmcoZGV2LCAiQmFj
a3VwIFNlY29uZGFyeSByeGhpZ2g6IFJYOiAlZCBUWDogJWQgUkQ6ICVkXG4iLAorCQkJc3J4aGln
aC5yeCwgc3J4aGlnaC50eCwgc3J4aGlnaC5yZWFkX2RlbGF5KTsKKworCQlpZiAoIXByaW1hcnkg
JiYgIXNlY29uZGFyeSkKKwkJCWdvdG8gb3V0OworCQllbHNlIGlmICghcHJpbWFyeSkKKwkJCWJh
Y2t1cHBvaW50ID0gc3J4aGlnaDsKKwkJZWxzZSBpZiAoc2Vjb25kYXJ5ICYmIHNyeGhpZ2gucngg
PiBiYWNrdXBwb2ludC5yeCkKKwkJCWJhY2t1cHBvaW50ID0gc3J4aGlnaDsKKwkJZGV2X2RiZyhk
ZXYsICJCYWNrdXAgRmluYWwgcnhoaWdoOiBSWDogJWQgVFg6ICVkIFJEOiAlZFxuIiwKKwkJCWJh
Y2t1cHBvaW50LnJ4LCBiYWNrdXBwb2ludC50eCwgYmFja3VwcG9pbnQucmVhZF9kZWxheSk7CisK
KwkJaWYgKGJhY2t1cHBvaW50LnJ4ID4gcnhoaWdoLnJ4KSB7CisJCQlyeGhpZ2ggPSBiYWNrdXBw
b2ludDsKKwkJCWRldl9kYmcoZGV2LCAiVXBkYXRpbmcgcnhoaWdoIHRvIHRoZSBvbmUgYXQgVFgg
PSAlZFxuIiwKKwkJCQliYWNrdXBwb2ludC50eCk7CisJCX0KKwkJZGV2X2RiZyhkZXYsICJGaW5h
bCByeGhpZ2g6IFJYOiAlZCBUWDogJWQgUkQ6ICVkXG4iLCByeGhpZ2gucngsCisJCQlyeGhpZ2gu
dHgsIHJ4aGlnaC5yZWFkX2RlbGF5KTsKKwl9CisKKwkvKiBHb2xkZW4gdHhsb3c6IEZpeCBSWCBh
dCAxLzQgb2YgUlggd2luZG93LCBzZWFyY2ggVFggbG93ZXIgYm91bmQgKi8KKworCS8qCisJICog
ICAgICAgICAgICAgIHJ4CisJICogICAgICAgICAgMTI3IF4KKwkgKiAgICAgICAgICAgICAgfAor
CSAqICAgICByeGhpZ2ggLS0tLS0tLS0tPnh4eHh4ICAgICArKysrKysrKysrKysrKysrKysrKwor
CSAqICAgICAgICAgICAgICB8ICAgICAgIHh4eHh4eCAgICAgKysrKysrKysrKysrKysrKysrKwor
CSAqICAgICAgICAgICAgICB8ICAgICAgIHh4eHh4eHggICAgICsrKysrKysrKysrKysrKysrKwor
CSAqICAgICAgICAgICAgICB8ICAgICAgIHh4eHh4eHh4ICAgICArKysrKysrKysrKysrKysrKwor
CSAqICAgICAgICAgICAgICB8ICAgICAgIHh4eHh4eHh4eCAgICAgKysrKysrKysrKysrKysrKwor
CSAqICAgICAgICAgICAgICB8ICAgICAgIHh4eHh4eHh4eHggICAgICsrKysrKysrKysrKysrKwor
CSAqICAgICAgICAgICAgICB8ICAgICAgIHh4eHh4eHh4eHh4ICAgICArKysrKysrKysrKysrKwor
CSAqICAgICAgICAgICAgICB8ICAgICAgIHh4eHh4eHh4eHh4eCAgICAgKysrKysrKysrKysrKwor
CSAqICAgIGZpeCByeCAgICB8ICAgICAgIHh4eHh4eHh4eHh4eHggICAgICsrKysrKysrKysrKwor
CSAqICAgIDEvNCBiL3cgLS0tLS0tLS0tPjwtLS0tLS0tPnh4eHh4ICAgICArKysrKysrKysrKwor
CSAqICAgIHJ4bG93IGFuZCB8ICAgICAgIHh4eHh8eHh4eHh4eHh4eCAgICAgKysrKysrKysrKwor
CSAqICAgIHJ4aGlnaCAgICB8ICAgICAgIHh4eHh8eHh4eHh4eHh4eHggICAgICsrKysrKysrKwor
CSAqICAgICAgICAgICAgICB8ICAgICAgIHh4eHh8eHh4eHh4eHh4eHh4ICAgICArKysrKysrKwor
CSAqICAgICAgcnhsb3cgLS0tLS0tLS0tPnh4eHh8eHh4eHh4eHh4eHh4eCAgICAgKysrKysrKwor
CSAqICAgICAgICAgICAgICB8ICAgICAgICAgICB8CisJICogICAgICAgICAgICAgIC0tLS0tLS0t
LS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+IHR4CisJICogICAgICAgICAgICAg
IDAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTI3CisJICogICAgICAg
ICAgICAgICAgICAgICBzZWFyY2gKKwkgKiAgICAgICAgICAgICAgICAgICAgICB0eGxvdworCSAq
LworCisJcnhfd2luZG93ID0gcnhoaWdoLnJ4IC0gcnhsb3cucng7CisJdHhsb3cucnggPSByeGxv
dy5yeCArIChyeF93aW5kb3cgLyA0KTsKKwlkZXZfZGJnKGRldiwgIlNlYXJjaGluZyBmb3IgR29s
ZGVuIHR4bG93IG9uIFJYID0gJWRcbiIsIHR4bG93LnJ4KTsKKwl0eGxvdy5yZWFkX2RlbGF5ID0g
Q1FTUElfUEhZX0lOSVRfUkQ7CisJcmV0ID0gY3FzcGlfZmluZF90eF9sb3dfZGRyKGZfcGRhdGEs
IG1lbSwgJnR4bG93KTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKwlkZXZfZGJnKGRldiwgIkdv
bGRlbiB0eGxvdzogUlg6ICVkIFRYOiAlZCBSRDogJWRcbiIsIHR4bG93LnJ4LCB0eGxvdy50eCwK
KwkJdHhsb3cucmVhZF9kZWxheSk7CisKKwkvKiBHb2xkZW4gdHhoaWdoOiBTYW1lIFJYIGFzIHR4
bG93LCBkZWNyZW1lbnQgZnJvbSBtYXggcmVhZF9kZWxheSAqLworCisJLyoKKwkgKiAgICAgICAg
ICAgICAgcngKKwkgKiAgICAgICAgICAxMjcgXgorCSAqICAgICAgICAgICAgICB8CisJICogICAg
IHJ4aGlnaCAtLS0tLS0tLS0+eHh4eHggICAgICsrKysrKysrKysrKysrKysrKysrCisJICogICAg
ICAgICAgICAgIHwgICAgICAgeHh4eHh4ICAgICArKysrKysrKysrKysrKysrKysrCisJICogICAg
ICAgICAgICAgIHwgICAgICAgeHh4eHh4eCAgICAgKysrKysrKysrKysrKysrKysrCisJICogICAg
ICAgICAgICAgIHwgICAgICAgeHh4eHh4eHggICAgICsrKysrKysrKysrKysrKysrCisJICogICAg
ICAgICAgICAgIHwgICAgICAgeHh4eHh4eHh4ICAgICArKysrKysrKysrKysrKysrCisJICogICAg
ICAgICAgICAgIHwgICAgICAgeHh4eHh4eHh4eCAgICAgKysrKysrKysrKysrKysrCisJICogICAg
ICAgICAgICAgIHwgICAgICAgeHh4eHh4eHh4eHggICAgICsrKysrKysrKysrKysrCisJICogICAg
ICAgICAgICAgIHwgICAgICAgeHh4eHh4eHh4eHh4ICAgICArKysrKysrKysrKysrCisJICogICAg
Zml4IHJ4ICAgIHwgICAgICAgeHh4eHh4eHh4eHh4eCAgICAgKysrKysrKysrKysrCisJICogICAg
MS80IGIvdyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT48LS0tLS0+CisJICogICAg
cnhsb3cgYW5kIHwgICAgICAgeHh4eHh4eHh4eHh4eHh4ICAgICArKysrKyt8KysrCisJICogICAg
cnhoaWdoICAgIHwgICAgICAgeHh4eHh4eHh4eHh4eHh4eCAgICAgKysrKyt8KysrCisJICogICAg
ICAgICAgICAgIHwgICAgICAgeHh4eHh4eHh4eHh4eHh4eHggICAgICsrKyt8KysrCisJICogICAg
ICByeGxvdyAtLS0tLS0tLS0+eHh4eHh4eHh4eHh4eHh4eHh4ICAgICArKyt8KysrCisJICogICAg
ICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisJICogICAgICAg
ICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0+IHR4CisJ
ICogICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAg
MTI3CisJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNo
CisJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHhoaWdoCisJ
ICovCisKKwl0eGhpZ2gucnggPSB0eGxvdy5yeDsKKwlkZXZfZGJnKGRldiwgIlNlYXJjaGluZyBm
b3IgR29sZGVuIHR4aGlnaCBvbiBSWCA9ICVkXG4iLCB0eGhpZ2gucngpOworCXR4aGlnaC5yZWFk
X2RlbGF5ID0gQ1FTUElfUEhZX01BWF9SRDsKKwlyZXQgPSBjcXNwaV9maW5kX3R4X2hpZ2hfZGRy
KGZfcGRhdGEsIG1lbSwgJnR4aGlnaCk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisJZGV2X2Ri
ZyhkZXYsICJHb2xkZW4gdHhoaWdoOiBSWDogJWQgVFg6ICVkIFJEOiAlZFxuIiwgdHhoaWdoLnJ4
LAorCQl0eGhpZ2gudHgsIHR4aGlnaC5yZWFkX2RlbGF5KTsKKworCS8qIElmIHR4bG93L3R4aGln
aCBhdCBzYW1lIHJlYWRfZGVsYXksIHNlYXJjaCBiYWNrdXAgYXQgMy80IFJYIHdpbmRvdyAqLwor
CisJaWYgKHR4bG93LnJlYWRfZGVsYXkgPT0gdHhoaWdoLnJlYWRfZGVsYXkpIHsKKwkJLyogQmFj
a3VwIHR4bG93OiBGaXggUlggYXQgMy80IG9mIFJYIHdpbmRvdyAqLworCisJCS8qCisJCSAqICAg
ICAgICAgICAgICByeAorCQkgKiAgICAgICAgICAxMjcgXgorCQkgKiAgICAgICAgICAgICAgfAor
CQkgKiAgICAgcnhoaWdoIC0tLS0tLS0tLT54eHh4eCAgICAgKysrKysrKysrKysrKysrKysrKysK
KwkJICogICAgICAgICAgICAgIHwgICAgICAgeHh4eHh4ICAgICArKysrKysrKysrKysrKysrKysr
CisJCSAqICAgIGZpeCByeCAgICB8ICAgICAgIHh4eHh4eHggICAgICsrKysrKysrKysrKysrKysr
KworCQkgKiAgICAzLzQgYi93IC0tLS0tLS0tLT48LS0tLS0+eCAgICAgKysrKysrKysrKysrKysr
KysKKwkJICogICAgcnhsb3cgYW5kIHwgICAgICAgeHh4eHx4eHh4ICAgICArKysrKysrKysrKysr
KysrCisJCSAqICAgIHJ4aGlnaCAgICB8ICAgICAgIHh4eHh8eHh4eHggICAgICsrKysrKysrKysr
KysrKworCQkgKiAgICAgICAgICAgICAgfCAgICAgICB4eHh4fHh4eHh4eCAgICAgKysrKysrKysr
KysrKysKKwkJICogICAgICAgICAgICAgIHwgICAgICAgeHh4eHx4eHh4eHh4ICAgICArKysrKysr
KysrKysrCisJCSAqICAgICAgICAgICAgICB8ICAgICAgIHh4eHh8eHh4eHh4eHggICAgICsrKysr
KysrKysrKworCQkgKiAgICAgICAgICAgICAgfCAgICAgICB4eHh4fHh4eHh4eHh4eCAgICAgKysr
KysrKysrKysKKwkJICogICAgICAgICAgICAgIHwgICAgICAgeHh4eHx4eHh4eHh4eHh4ICAgICAr
KysrKysrKysrCisJCSAqICAgICAgICAgICAgICB8ICAgICAgIHh4eHh8eHh4eHh4eHh4eHggICAg
ICsrKysrKysrKworCQkgKiAgICAgICAgICAgICAgfCAgICAgICB4eHh4fHh4eHh4eHh4eHh4eCAg
ICAgKysrKysrKysKKwkJICogICAgICByeGxvdyAtLS0tLS0tLS0+eHh4eHx4eHh4eHh4eHh4eHh4
ICAgICArKysrKysrCisJCSAqICAgICAgICAgICAgICB8ICAgICAgICAgICB8CisJCSAqICAgICAg
ICAgICAgICAtLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPiB0eAor
CQkgKiAgICAgICAgICAgICAgMCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAxMjcKKwkJICogICAgICAgICAgICAgICAgICAgICBzZWFyY2gKKwkJICogICAgICAgICAgICAg
ICAgICAgICAgdHhsb3cKKwkJICovCisKKwkJZGV2X2RiZyhkZXYsICJ0eGxvdyBhbmQgdHhoaWdo
IGF0IHRoZSBzYW1lIHJlYWQgZGVsYXkuXG4iKTsKKwkJYmFja3VwcG9pbnQucnggPSByeGxvdy5y
eCArICgocnhfd2luZG93ICogMykgLyA0KTsKKwkJZGV2X2RiZyhkZXYsICJTZWFyY2hpbmcgZm9y
IEJhY2t1cCB0eGxvdyBvbiBSWCA9ICVkXG4iLAorCQkJYmFja3VwcG9pbnQucngpOworCQliYWNr
dXBwb2ludC5yZWFkX2RlbGF5ID0gQ1FTUElfUEhZX0lOSVRfUkQ7CisJCXJldCA9IGNxc3BpX2Zp
bmRfdHhfbG93X2RkcihmX3BkYXRhLCBtZW0sICZiYWNrdXBwb2ludCk7CisJCWlmIChyZXQpCisJ
CQlnb3RvIG91dDsKKwkJZGV2X2RiZyhkZXYsICJCYWNrdXAgdHhsb3c6IFJYOiAlZCBUWDogJWQg
UkQ6ICVkXG4iLAorCQkJYmFja3VwcG9pbnQucngsIGJhY2t1cHBvaW50LnR4LCBiYWNrdXBwb2lu
dC5yZWFkX2RlbGF5KTsKKworCQlpZiAoYmFja3VwcG9pbnQudHggPCB0eGxvdy50eCkgeworCQkJ
dHhsb3cgPSBiYWNrdXBwb2ludDsKKwkJCWRldl9kYmcoZGV2LCAiVXBkYXRpbmcgdHhsb3cgd2l0
aCB0aGUgb25lIGF0IFJYID0gJWRcbiIsCisJCQkJYmFja3VwcG9pbnQucngpOworCQl9CisJCWRl
dl9kYmcoZGV2LCAiRmluYWwgdHhsb3c6IFJYOiAlZCBUWDogJWQgUkQ6ICVkXG4iLCB0eGxvdy5y
eCwKKwkJCXR4bG93LnR4LCB0eGxvdy5yZWFkX2RlbGF5KTsKKworCQkvKiBCYWNrdXAgdHhoaWdo
OiBTYW1lIFJYIGFzIGJhY2t1cCB0eGxvdywgZGVjcmVtZW50IGZyb20gbWF4ICovCisKKwkJLyoK
KwkJICogICAgICAgICAgICAgIHJ4CisJCSAqICAgICAgICAgIDEyNyBeCisJCSAqICAgICAgICAg
ICAgICB8CisJCSAqICAgICByeGhpZ2ggLS0tLS0tLS0tPnh4eHh4ICAgICArKysrKysrKysrKysr
KysrKysrKworCQkgKiAgICAgICAgICAgICAgfCAgICAgICB4eHh4eHggICAgICsrKysrKysrKysr
KysrKysrKysKKwkJICogICAgZml4IHJ4ICAgIHwgICAgICAgeHh4eHh4eCAgICAgKysrKysrKysr
KysrKysrKysrCisJCSAqICAgIDMvNCBiL3cgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
PjwtLS0tLS0tPgorCQkgKiAgICByeGxvdyBhbmQgfCAgICAgICB4eHh4eHh4eHggICAgICsrKysr
KysrKysrfCsrKysKKwkJICogICAgcnhoaWdoICAgIHwgICAgICAgeHh4eHh4eHh4eCAgICAgKysr
KysrKysrK3wrKysrCisJCSAqICAgICAgICAgICAgICB8ICAgICAgIHh4eHh4eHh4eHh4ICAgICAr
KysrKysrKyt8KysrKworCQkgKiAgICAgICAgICAgICAgfCAgICAgICB4eHh4eHh4eHh4eHggICAg
ICsrKysrKysrfCsrKysKKwkJICogICAgICAgICAgICAgIHwgICAgICAgeHh4eHh4eHh4eHh4eCAg
ICAgKysrKysrK3wrKysrCisJCSAqICAgICAgICAgICAgICB8ICAgICAgIHh4eHh4eHh4eHh4eHh4
ICAgICArKysrKyt8KysrKworCQkgKiAgICAgICAgICAgICAgfCAgICAgICB4eHh4eHh4eHh4eHh4
eHggICAgICsrKysrfCsrKysKKwkJICogICAgICAgICAgICAgIHwgICAgICAgeHh4eHh4eHh4eHh4
eHh4eCAgICAgKysrK3wrKysrCisJCSAqICAgICAgICAgICAgICB8ICAgICAgIHh4eHh4eHh4eHh4
eHh4eHh4ICAgICArKyt8KysrKworCQkgKiAgICAgIHJ4bG93IC0tLS0tLS0tLT54eHh4eHh4eHh4
eHh4eHh4eHggICAgICsrfCsrKysKKwkJICogICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHwKKwkJICogICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0+IHR4CisJCSAqICAgICAgICAgICAgICAwICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIDEyNworCQkgKiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoCisJCSAqICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eGhpZ2gKKwkJICovCisKKwkJZGV2X2Ri
ZyhkZXYsICJTZWFyY2hpbmcgZm9yIEJhY2t1cCB0eGhpZ2ggb24gUlggPSAlZFxuIiwKKwkJCWJh
Y2t1cHBvaW50LnJ4KTsKKwkJYmFja3VwcG9pbnQucmVhZF9kZWxheSA9IENRU1BJX1BIWV9NQVhf
UkQ7CisJCXJldCA9IGNxc3BpX2ZpbmRfdHhfaGlnaF9kZHIoZl9wZGF0YSwgbWVtLCAmYmFja3Vw
cG9pbnQpOworCQlpZiAocmV0KQorCQkJZ290byBvdXQ7CisJCWRldl9kYmcoZGV2LCAiQmFja3Vw
IHR4aGlnaDogUlg6ICVkIFRYOiAlZCBSRDogJWRcbiIsCisJCQliYWNrdXBwb2ludC5yeCwgYmFj
a3VwcG9pbnQudHgsIGJhY2t1cHBvaW50LnJlYWRfZGVsYXkpOworCisJCWlmIChiYWNrdXBwb2lu
dC50eCA+IHR4aGlnaC50eCkgeworCQkJdHhoaWdoID0gYmFja3VwcG9pbnQ7CisJCQlkZXZfZGJn
KGRldiwKKwkJCQkiVXBkYXRpbmcgdHhoaWdoIHdpdGggdGhlIG9uZSBhdCBSWCA9ICVkXG4iLAor
CQkJCWJhY2t1cHBvaW50LnJ4KTsKKwkJfQorCQlkZXZfZGJnKGRldiwgIkZpbmFsIHR4aGlnaDog
Ulg6ICVkIFRYOiAlZCBSRDogJWRcbiIsIHR4aGlnaC5yeCwKKwkJCXR4aGlnaC50eCwgdHhoaWdo
LnJlYWRfZGVsYXkpOworCX0KKworCS8qIENvcm5lciBwb2ludHM6IERlZmluZSBhbmQgdmVyaWZ5
IGJvdHRvbWxlZnQgYW5kIHRvcHJpZ2h0IGJvdW5kYXJpZXMgKi8KKworCS8qCisJICogICAgICAg
ICAgICAgIHJ4CisJICogICAgICAgICAgMTI3IF4KKwkgKiAgICAgICAgICAgICAgfCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRvcHJpZ2h0CisJICogICAgICAgICAgICAgIHwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisJICogICAgcnhoaWdoIC0tLS0tLS0t
LS0teHh4eHggICAgICsrKysrKysrKysrKysrKysrKysrCisJICogICAgICAgICAgICAgIHwgICAg
ICAgeHh4eHh4ICAgICArKysrKysrKysrKysrKysrKysrCisJICogICAgICAgICAgICAgIHwgICAg
ICAgeHh4eHh4eCAgICAgKysrKysrKysrKysrKysrKysrCisJICogICAgICAgICAgICAgIHwgICAg
ICAgeHh4eHh4eHggICAgICsrKysrKysrKysrKysrKysrCisJICogICAgICAgICAgICAgIHwgICAg
ICAgeHh4eHh4eHh4ICAgICArKysrKysrKysrKysrKysrCisJICogICAgICAgICAgICAgIHwgICAg
ICAgeHh4eHh4eHh4eCAgICAgKysrKysrKysrKysrKysrCisJICogICAgICAgICAgICAgIHwgICAg
ICAgeHh4eHh4eHh4eHggICAgICsrKysrKysrKysrKysrCisJICogICAgICAgICAgICAgIHwgICAg
ICAgeHh4eHh4eHh4eHh4ICAgICArKysrKysrKysrKysrCisJICogICAgICAgICAgICAgIHwgICAg
ICAgeHh4eHh4eHh4eHh4eCAgICAgKysrKysrKysrKysrCisJICogICAgICAgICAgICAgIHwgICAg
ICAgeHh4eHh4eHh4eHh4eHggICAgICsrKysrKysrKysrCisJICogICAgICAgICAgICAgIHwgICAg
ICAgeHh4eHh4eHh4eHh4eHh4ICAgICArKysrKysrKysrCisJICogICAgICAgICAgICAgIHwgICAg
ICAgeHh4eHh4eHh4eHh4eHh4eCAgICAgKysrKysrKysrCisJICogICAgICAgICAgICAgIHwgICAg
ICAgeHh4eHh4eHh4eHh4eHh4eHggICAgICsrKysrKysrCisJICogICAgIHJ4bG93IC0tLS0tLS0t
LS0teHh4eHh4eHh4eHh4eHh4eHh4ICAgICArKysrKysrCisJICogICAgICAgICAgICAgIHwgICAg
ICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisJICogICAgICAgICAgICAgIHwgYm90
dG9tfGxlZnQgICAgICAgICAgICAgICAgICAgICAgICB8CisJICogICAgICAgICAgICAgIC0tLS0t
LS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tPiB0eAorCSAqICAgICAgICAgICAg
ICAwICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMjcKKwkgKiAgICAgICAg
ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKwkgKiAgICAgICAg
ICAgICAgICAgICAgICB0eGxvdyAgICAgICAgICAgICAgICAgICB0eGhpZ2gKKwkgKgorCSAqIFZl
cmlmaWNhdGlvbjogVGVzdCBwb2ludCA0IHRhcHMgaW5zaWRlIGVhY2ggY29ybmVyLCBhZGp1c3QK
KwkgKiByZWFkX2RlbGF5IMKxMSBpZiBuZWVkZWQgdG8gZW5zdXJlIHZhbGlkIGNvcm5lcnMgZm9y
IGdhcCBzZWFyY2guCisJICovCisKKwlib3R0b21sZWZ0LnR4ID0gdHhsb3cudHg7CisJYm90dG9t
bGVmdC5yeCA9IHJ4bG93LnJ4OworCWlmICh0eGxvdy5yZWFkX2RlbGF5IDw9IHJ4bG93LnJlYWRf
ZGVsYXkpCisJCWJvdHRvbWxlZnQucmVhZF9kZWxheSA9IHR4bG93LnJlYWRfZGVsYXk7CisJZWxz
ZQorCQlib3R0b21sZWZ0LnJlYWRfZGVsYXkgPSByeGxvdy5yZWFkX2RlbGF5OworCisJLyogVmVy
aWZ5IGJvdHRvbWxlZnQ6IFRlc3QgNCB0YXBzIGluc2lkZSwgYWRqdXN0IHJlYWRfZGVsYXkgaWYg
bmVlZGVkICovCisJYmFja3VwY29ybmVycG9pbnQgPSBib3R0b21sZWZ0OworCWJhY2t1cGNvcm5l
cnBvaW50LnR4ICs9IDQ7CisJYmFja3VwY29ybmVycG9pbnQucnggKz0gNDsKKwlyZXQgPSBjcXNw
aV9waHlfYXBwbHlfc2V0dGluZyhmX3BkYXRhLCAmYmFja3VwY29ybmVycG9pbnQpOworCWlmICgh
cmV0KQorCQlyZXQgPSBjcXNwaV9waHlfY2hlY2tfcGF0dGVybihmX3BkYXRhLCBtZW0pOworCisJ
aWYgKHJldCkgeworCQliYWNrdXBjb3JuZXJwb2ludC5yZWFkX2RlbGF5LS07CisJCXJldCA9IGNx
c3BpX3BoeV9hcHBseV9zZXR0aW5nKGZfcGRhdGEsICZiYWNrdXBjb3JuZXJwb2ludCk7CisJCWlm
ICghcmV0KQorCQkJcmV0ID0gY3FzcGlfcGh5X2NoZWNrX3BhdHRlcm4oZl9wZGF0YSwgbWVtKTsK
Kwl9CisKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCWJvdHRvbWxlZnQucmVhZF9kZWxheSA9
IGJhY2t1cGNvcm5lcnBvaW50LnJlYWRfZGVsYXk7CisKKwl0b3ByaWdodC50eCA9IHR4aGlnaC50
eDsKKwl0b3ByaWdodC5yeCA9IHJ4aGlnaC5yeDsKKwlpZiAodHhoaWdoLnJlYWRfZGVsYXkgPj0g
cnhoaWdoLnJlYWRfZGVsYXkpCisJCXRvcHJpZ2h0LnJlYWRfZGVsYXkgPSB0eGhpZ2gucmVhZF9k
ZWxheTsKKwllbHNlCisJCXRvcHJpZ2h0LnJlYWRfZGVsYXkgPSByeGhpZ2gucmVhZF9kZWxheTsK
KworCS8qIFZlcmlmeSB0b3ByaWdodDogVGVzdCA0IHRhcHMgaW5zaWRlLCBhZGp1c3QgcmVhZF9k
ZWxheSBpZiBuZWVkZWQgKi8KKwliYWNrdXBjb3JuZXJwb2ludCA9IHRvcHJpZ2h0OworCWJhY2t1
cGNvcm5lcnBvaW50LnR4IC09IDQ7CisJYmFja3VwY29ybmVycG9pbnQucnggLT0gNDsKKwlyZXQg
PSBjcXNwaV9waHlfYXBwbHlfc2V0dGluZyhmX3BkYXRhLCAmYmFja3VwY29ybmVycG9pbnQpOwor
CWlmICghcmV0KQorCQlyZXQgPSBjcXNwaV9waHlfY2hlY2tfcGF0dGVybihmX3BkYXRhLCBtZW0p
OworCisJaWYgKHJldCkgeworCQliYWNrdXBjb3JuZXJwb2ludC5yZWFkX2RlbGF5Kys7CisJCXJl
dCA9IGNxc3BpX3BoeV9hcHBseV9zZXR0aW5nKGZfcGRhdGEsICZiYWNrdXBjb3JuZXJwb2ludCk7
CisJCWlmICghcmV0KQorCQkJcmV0ID0gY3FzcGlfcGh5X2NoZWNrX3BhdHRlcm4oZl9wZGF0YSwg
bWVtKTsKKwl9CisKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCXRvcHJpZ2h0LnJlYWRfZGVs
YXkgPSBiYWNrdXBjb3JuZXJwb2ludC5yZWFkX2RlbGF5OworCisJZGV2X2RiZyhkZXYsICJ0b3By
aWdodDogUlg6ICVkIFRYOiAlZCBSRDogJWRcbiIsIHRvcHJpZ2h0LnJ4LAorCQl0b3ByaWdodC50
eCwgdG9wcmlnaHQucmVhZF9kZWxheSk7CisJZGV2X2RiZyhkZXYsICJib3R0b21sZWZ0OiBSWDog
JWQgVFg6ICVkIFJEOiAlZFxuIiwgYm90dG9tbGVmdC5yeCwKKwkJYm90dG9tbGVmdC50eCwgYm90
dG9tbGVmdC5yZWFkX2RlbGF5KTsKKwljcXNwaV9waHlfZmluZF9nYXBsb3dfZGRyKGZfcGRhdGEs
IG1lbSwgJmJvdHRvbWxlZnQsICZ0b3ByaWdodCwgJmdhcGxvdyk7CisJZGV2X2RiZyhkZXYsICJn
YXBsb3c6IFJYOiAlZCBUWDogJWQgUkQ6ICVkXG4iLCBnYXBsb3cucngsIGdhcGxvdy50eCwKKwkJ
Z2FwbG93LnJlYWRfZGVsYXkpOworCisJLyogRmluYWwgcG9pbnQgc2VsZWN0aW9uOiBIYW5kbGUg
c2luZ2xlIHZzIGR1YWwgcGFzc2luZyByZWdpb25zICovCisKKwlpZiAoYm90dG9tbGVmdC5yZWFk
X2RlbGF5ID09IHRvcHJpZ2h0LnJlYWRfZGVsYXkpIHsKKwkJLyoKKwkJICogU2luZ2xlIHJlZ2lv
bjogVXNlIG1pZHBvaW50IHdpdGggdGVtcGVyYXR1cmUgY29tcGVuc2F0aW9uLgorCQkgKiBHYXBs
b3cgYXBwcm94aW1hdGVzIHVwcGVyIGJvdW5kYXJ5IG9mIHZhbGlkIHJlZ2lvbi4KKwkJICoKKwkJ
ICogICAgICAgICAgICAgIHJ4CisJCSAqICAgICAgICAgIDEyNyBeCisJCSAqICAgICAgICAgICAg
ICB8ICAgICAgICAgICAgICBnYXBsb3cgKGFwcHJveC4gdG9wcmlnaHQpCisJCSAqICAgICAgICAg
ICAgICB8ICAgICAgICAgICAgICB8CisJCSAqICAgIHJ4aGlnaCAtLS0tLS0tLS0tLXh4eHh4eHh8
ICAgICAgICAgIGZhaWxpbmcKKwkJICogICAgICAgICAgICAgIHwgICAgICAgeHh4eHh4eHwgICAg
ICAgICAgIHJlZ2lvbgorCQkgKiAgICAgICAgICAgICAgfCAgICAgICB4eHh4eHh4fCAgICAgPC0t
LS0tLS0tLS0tLS0tLT4KKwkJICogICAgICAgICAgICAgIHwgICAgICAgeHh4eHh4eHwgICAgICsr
KysrKysrKysrKysrKysrCisJCSAqICAgICAgICAgICAgICB8ICAgICAgIHh4eHh4eHh4eCAgICAg
KysrKysrKysrKysrKysrKworCQkgKiAgICAgICAgICAgICAgfCAgICAgICB4eHh4eHh4eHh4ICAg
ICArKysrKysrKysrKysrKysKKwkJICogICAgICAgICAgICAgIHwgICAgICAgeHh4eHh4eHh4eHgg
ICAgICsrKysrKysrKysrKysrCisJCSAqICAgICAgICAgICAgICB8ICAgICAgIHh4eHh4eHh4eHh4
eCAgICAgKysrKysrKysrKysrKworCQkgKiAgICAgICAgICAgICAgfCAgICAgICB4eHh4eHh4eHh4
eHh4ICAgICArKysrKysrKysrKysKKwkJICogICAgICAgICAgICAgIHwgICAgICAgeHh4eHh4eHh4
eHh4eHggICAgICsrKysrKysrKysrCisJCSAqICAgICAgICAgICAgICB8ICAgICAgIHh4eHh4eHh4
eHh4eHh4eCAgICAgKysrKysrKysrKworCQkgKiAgICAgICAgICAgICAgfCAgICAgICB4eHh4eHh4
eHh4eHh4eHh4ICAgICArKysrKysrKysKKwkJICogICAgICAgICAgICAgIHwgICAgICAgeHh4eHh4
eHh4eHh4eHh4eHggICAgICsrKysrKysrCisJCSAqICAgICByeGxvdyAtLS0tLS0tLS0tLXh4eHh4
eHh4eHh4eHh4eHh4eCAgICAgKysrKysrKworCQkgKiAgICAgICAgICAgICAgfCAgICAgICAqICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwKKwkJICogICAgICAgICAgICAgIHwgYm90dG9tfGxl
ZnQgICAgICAgICAgICAgICAgICAgICAgICB8CisJCSAqICAgICAgICAgICAgICAtLS0tLS0tLXwt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLT4gdHgKKwkJICogICAgICAgICAgICAgIDAg
ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEyNworCQkgKiAgICAgICAgICAg
ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKwkJICogICAgICAgICAg
ICAgICAgICAgICAgdHhsb3cgICAgICAgICAgICAgICAgICAgdHhoaWdoCisJCSAqICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAoc2FtZSByZWFkX2RlbGF5KQorCQkgKgorCQkgKiBUZW1wZXJh
dHVyZSBjb21wZW5zYXRpb246IFZhbGlkIHJlZ2lvbiBzaGlmdHMgd2l0aCB0ZW1wLgorCQkgKiBP
ZmZzZXQgPSByZWdpb25fc2l6ZSAvICgzMzAgLyAodGVtcCAtIDQywrBDKSkKKwkJICogRmFjdG9y
IDMzMCBpcyBlbXBpcmljYWxseSBkZXRlcm1pbmVkIGZvciB0aGlzIGhhcmR3YXJlLgorCQkgKi8K
KworCQlkZXZfZGJnKGRldiwKKwkJCSJib3R0b21sZWZ0IGFuZCB0b3ByaWdodCBhdCB0aGUgc2Ft
ZSByZWFkIGRlbGF5LlxuIik7CisKKwkJdG9wcmlnaHQgPSBnYXBsb3c7CisJCXNlYXJjaHBvaW50
LnJlYWRfZGVsYXkgPSBib3R0b21sZWZ0LnJlYWRfZGVsYXk7CisJCXNlYXJjaHBvaW50LnR4ID0K
KwkJCWJvdHRvbWxlZnQudHggKyAoKHRvcHJpZ2h0LnR4IC0gYm90dG9tbGVmdC50eCkgLyAyKTsK
KwkJc2VhcmNocG9pbnQucnggPQorCQkJYm90dG9tbGVmdC5yeCArICgodG9wcmlnaHQucnggLSBi
b3R0b21sZWZ0LnJ4KSAvIDIpOworCisJCXJldCA9IGNxc3BpX2dldF90ZW1wKCZ0ZW1wKTsKKwkJ
aWYgKHJldCkgeworCQkJLyogQXNzdW1lIHJvb20gdGVtcGVyYXR1cmUgaWYgc2Vuc29yIHVuYXZh
aWxhYmxlICovCisJCQlkZXZfZGJnKGRldiwKKwkJCQkiVW5hYmxlIHRvIGdldCB0ZW1wZXJhdHVy
ZS4gQXNzdW1pbmcgcm9vbSB0ZW1wZXJhdHVyZVxuIik7CisJCQl0ZW1wID0gQ1FTUElfUEhZX0RF
RkFVTFRfVEVNUDsKKwkJfQorCisJCWlmICh0ZW1wIDwgQ1FTUElfUEhZX01JTl9URU1QIHx8IHRl
bXAgPiBDUVNQSV9QSFlfTUFYX1RFTVApIHsKKwkJCWRldl9lcnIoZGV2LAorCQkJCSJUZW1wZXJh
dHVyZSBvdXRzaWRlIG9wZXJhdGluZyByYW5nZTogJWRDXG4iLAorCQkJCXRlbXApOworCQkJcmV0
ID0gLUVJTlZBTDsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJaWYgKHRlbXAgPT0gQ1FTUElfUEhZ
X01JRF9URU1QKQorCQkJdGVtcCsrOyAvKiBBdm9pZCBkaXZpZGUtYnktemVybyAqLworCQlkZXZf
ZGJnKGRldiwgIlRlbXBlcmF0dXJlOiAlZENcbiIsIHRlbXApOworCisJCS8qCisJCSAqIEFwcGx5
IHRlbXBlcmF0dXJlIG9mZnNldDogcG9zaXRpdmUgYXQgaGlnaCB0ZW1wLCBuZWdhdGl2ZSBhdCBs
b3cuCisJCSAqIENvbXB1dGUgdGhlIGRpdmlzb3Igb25jZSBhbmQgYXBwbHkgdG8gYm90aCBUWCBh
bmQgUlguIFVzZSBpbnQKKwkJICogYXJpdGhtZXRpYyB0aHJvdWdob3V0IHRvIGF2b2lkIHU4IHdy
YXBwaW5nIG9uIG5lZ2F0aXZlIG9mZnNldHMuCisJCSAqLworCQl0ZW1wID0gMzMwIC8gKHRlbXAg
LSBDUVNQSV9QSFlfTUlEX1RFTVApOworCQlzZWFyY2hwb2ludC50eCA9IGNsYW1wKChpbnQpc2Vh
cmNocG9pbnQudHggKworCQkJCSAgICAgICAodG9wcmlnaHQudHggLSBib3R0b21sZWZ0LnR4KSAv
IHRlbXAsCisJCQkJICAgICAgIDAsIENRU1BJX1BIWV9NQVhfREVMQVkpOworCQlzZWFyY2hwb2lu
dC5yeCA9IGNsYW1wKChpbnQpc2VhcmNocG9pbnQucnggKworCQkJCSAgICAgICAodG9wcmlnaHQu
cnggLSBib3R0b21sZWZ0LnJ4KSAvIHRlbXAsCisJCQkJICAgICAgIDAsIENRU1BJX1BIWV9NQVhf
REVMQVkpOworCX0gZWxzZSB7CisJCS8qCisJCSAqIER1YWwgcmVnaW9uczogR2FwIHNlcGFyYXRl
cyB0d28gdmFsaWQgcmVnaW9ucywgY2hvb3NlIGxhcmdlci4KKwkJICoKKwkJICogICAgICAgICAg
ICAgIHJ4CisJCSAqICAgICAgICAgIDEyNyBeCisJCSAqICAgICAgICAgICAgICB8ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdG9wcmlnaHQKKwkJICogICAgICAgICAgICAgIHwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisJCSAqICAgIHJ4aGlnaCAtLS0tLS0t
LS0tLXh4eHh4ICAgICArKysrKysrKysrKysrKysrKysrfAorCQkgKiAgICAgICAgICAgICAgfCAg
ICAgICB4eHh4eHggICAgPHJlZ2lvbiAyPiArKysrKysrK3wKKwkJICogICAgICAgICAgICAgIHwg
ICAgICAgeHh4eHh4eCAgICAgKysrKysrKysrKysrKysrKyt8CisJCSAqICAgICAgICAgICAgICB8
ICAgICAgIHh4eHh4eHh4ICAgICArKysrKysrKysrKysrKysrfAorCQkgKiAgICAgICAgICAgICAg
fCAgICAgICB4eHh4eHh4eHggICAgICsrKysrKysrKysrKysrK3wKKwkJICogICAgICAgICAgICAg
IHwgICAgICAgeHh4eHh4eHh4eCAgICAgKysrKysrKysrKysrKyt8CisJCSAqICAgICAgICAgICAg
ICB8ICAgICAgICAgICAgICAgICAgZmFpbGluZyAgICAgICAgICAgfAorCQkgKiAgICAgICAgICAg
ICAgfCAgICAgICAgICAgICAgICAgIHJlZ2lvbiAgICAgICAgICAgIHwKKwkJICogICAgICAgICAg
ICAgIHwgICAgICAgeHh4eHh4eHh4eHh4eCAgICAgKysrKysrKysrKyt8CisJCSAqICAgICAgICAg
ICAgICB8ICAgICAgIHh4eHh4eHh4eHh4eHh4ICAgICArKysrKysrKysrfAorCQkgKiAgICAgICAg
ICAgICAgfCAgICAgICB4eHh4eHh4eHh4eHh4eHggICAgICsrKysrKysrK3wKKwkJICogICAgICAg
ICAgICAgIHwgICAgICAgeHh4eHh4eHh4eHh4eHh4eCAgICAgKysrKysrKyt8CisJCSAqICAgICAg
ICAgICAgICB8ICAgICAgIHh4eHh4eHh4eCA8cmVnaW9uIDE+ICArKysrKysrfAorCQkgKiAgICAg
cnhsb3cgLS0tLS0tLS0tLS14eHh4eHh4eHh4eHh4eHh4eHggICAgICsrKysrK3wKKwkJICogICAg
ICAgICAgICAgIHwgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisJCSAqICAg
ICAgICAgICAgICB8IGJvdHRvbXxsZWZ0ICAgICAgICAgICAgICAgICAgICAgICAgfAorCQkgKiAg
ICAgICAgICAgICAgLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0+IHR4
CisJCSAqICAgICAgICAgICAgICAwICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fCAxMjcKKwkJICogICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8CisJCSAqICAgICAgICAgICAgICAgICAgICAgIHR4bG93ICAgICAgICAgICAgICAgICAg
IHR4aGlnaAorCQkgKgorCQkgKiBTdHJhdGVneTogQ29tcGFyZSBNYW5oYXR0YW4gZGlzdGFuY2Vz
IGZyb20gZ2FwIGJvdW5kYXJpZXMgdG8KKwkJICogY29ybmVycy4gQ2hvb3NlIGNvcm5lciBmdXJ0
aGVzdCBmcm9tIGdhcCAobGFyZ2VyIHJlZ2lvbikuCisJCSAqIEFwcGx5IDE2LXRhcCBtYXJnaW4g
aW53YXJkLCBzY2FsZSBSWCBwcm9wb3J0aW9uYWxseS4KKwkJICovCisKKwkJY3FzcGlfcGh5X2Zp
bmRfZ2FwaGlnaF9kZHIoZl9wZGF0YSwgbWVtLCAmYm90dG9tbGVmdCwKKwkJCQkJICAgJnRvcHJp
Z2h0LCAmZ2FwaGlnaCk7CisJCWRldl9kYmcoZGV2LCAiZ2FwaGlnaDogUlg6ICVkIFRYOiAlZCBS
RDogJWRcbiIsIGdhcGhpZ2gucngsCisJCQlnYXBoaWdoLnR4LCBnYXBoaWdoLnJlYWRfZGVsYXkp
OworCisJCWlmICh0b3ByaWdodC50eCA9PSBib3R0b21sZWZ0LnR4KSB7CisJCQlkZXZfZXJyKGRl
diwgInplcm8gVFggc3BhbiBpbiBkdWFsLXJlZ2lvbjogY2Fubm90IGNvbXB1dGUgc2VhcmNoIHBv
aW50XG4iKTsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCS8qIENv
bXBhcmUgTWFuaGF0dGFuIGRpc3RhbmNlczogY2hvb3NlIGNvcm5lciBmdXJ0aGVzdCBmcm9tIGdh
cCAqLworCQlpZiAoKGFicyhnYXBsb3cudHggLSBib3R0b21sZWZ0LnR4KSArCisJCSAgICAgYWJz
KGdhcGxvdy5yeCAtIGJvdHRvbWxlZnQucngpKSA8CisJCSAgICAoYWJzKGdhcGhpZ2gudHggLSB0
b3ByaWdodC50eCkgKworCQkgICAgIGFicyhnYXBoaWdoLnJ4IC0gdG9wcmlnaHQucngpKSkgewor
CQkJLyogVG9wcmlnaHQgZnVydGhlcjogVXNlIFJlZ2lvbiAyLCAxNiB0YXBzIGlud2FyZCAqLwor
CQkJc2VhcmNocG9pbnQgPSB0b3ByaWdodDsKKwkJCXNlYXJjaHBvaW50LnR4IC09IDE2OworCQkJ
c2VhcmNocG9pbnQucnggLT0gKDE2ICogKHRvcHJpZ2h0LnJ4IC0gYm90dG9tbGVmdC5yeCkpIC8K
KwkJCQkJICAodG9wcmlnaHQudHggLSBib3R0b21sZWZ0LnR4KTsKKwkJfSBlbHNlIHsKKwkJCS8q
IEJvdHRvbWxlZnQgZnVydGhlcjogVXNlIFJlZ2lvbiAxLCAxNiB0YXBzIGlud2FyZCAqLworCQkJ
c2VhcmNocG9pbnQgPSBib3R0b21sZWZ0OworCQkJc2VhcmNocG9pbnQudHggKz0gMTY7CisJCQlz
ZWFyY2hwb2ludC5yeCArPSAoMTYgKiAodG9wcmlnaHQucnggLSBib3R0b21sZWZ0LnJ4KSkgLwor
CQkJCQkgICh0b3ByaWdodC50eCAtIGJvdHRvbWxlZnQudHgpOworCQl9CisJfQorCisJLyogQXBw
bHkgYW5kIHZlcmlmeSBmaW5hbCB0dW5pbmcgcG9pbnQgKi8KKwlkZXZfZGJnKGRldiwgIkZpbmFs
IHR1bmluZyBwb2ludDogUlg6ICVkIFRYOiAlZCBSRDogJWRcbiIsCisJCXNlYXJjaHBvaW50LnJ4
LCBzZWFyY2hwb2ludC50eCwgc2VhcmNocG9pbnQucmVhZF9kZWxheSk7CisJcmV0ID0gY3FzcGlf
cGh5X2FwcGx5X3NldHRpbmcoZl9wZGF0YSwgJnNlYXJjaHBvaW50KTsKKwlpZiAoIXJldCkKKwkJ
cmV0ID0gY3FzcGlfcGh5X2NoZWNrX3BhdHRlcm4oZl9wZGF0YSwgbWVtKTsKKworCWlmIChyZXQp
IHsKKwkJZGV2X2VycihkZXYsCisJCQkiRmFpbGVkIHRvIGZpbmQgcGF0dGVybiBhdCBmaW5hbCBj
YWxpYnJhdGlvbiBwb2ludFxuIik7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0K
KworCWZfcGRhdGEtPnBoeV9zZXR0aW5nLnJlYWRfZGVsYXkgPSBzZWFyY2hwb2ludC5yZWFkX2Rl
bGF5OworCWZfcGRhdGEtPnBoeV9zZXR0aW5nLnJ4ID0gc2VhcmNocG9pbnQucng7CisJZl9wZGF0
YS0+cGh5X3NldHRpbmcudHggPSBzZWFyY2hwb2ludC50eDsKK291dDoKKwlpZiAocmV0KQorCQlm
X3BkYXRhLT51c2VfdHVuZWRfcGh5ID0gZmFsc2U7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0
aWMgaW50IGNxc3BpX3BoeV90dW5pbmdfc2RyKHN0cnVjdCBjcXNwaV9mbGFzaF9wZGF0YSAqZl9w
ZGF0YSwKKwkJCQlzdHJ1Y3Qgc3BpX21lbSAqbWVtKQoreworCXN0cnVjdCBjcXNwaV9zdCAqY3Fz
cGkgPSBmX3BkYXRhLT5jcXNwaTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmY3FzcGktPnBkZXYt
PmRldjsKKwlzdHJ1Y3QgcGh5X3NldHRpbmcgcnhsb3csIHJ4aGlnaCwgZmlyc3QsIHNlY29uZCwg
ZmluYWw7CisJdTggd2luZG93MSA9IDA7CisJdTggd2luZG93MiA9IDA7CisJaW50IHJldDsKKwor
CS8qCisJICogU0RSIHR1bmluZzogMUQgc2VhcmNoIGZvciBvcHRpbWFsIFJYIGRlbGF5IChUWCBs
ZXNzIGNyaXRpY2FsKS4KKwkgKiBGaW5kIHR3byBjb25zZWN1dGl2ZSB3aW5kb3dzLCBjaG9vc2Ug
bGFyZ2VyLCB1c2UgbWlkcG9pbnQuCisJICoKKwkgKiAgICAgICAgICAgICAgcngKKwkgKiAgICAg
ICAgICAxMjcgXgorCSAqICAgICAgICAgICAgICB8ICAgICAgICB8LS0tLS13aW5kb3cgYXQtLS0t
LS0tLS0tfAorCSAqICAgICAgICAgICAgICB8ICAgICAgICB8LS0tLS1yZWFkX2RlbGF5ID0gbisx
LS0tfAorCSAqICAgICAgICAgICAgICB8ICAgICAgICB8eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4
fAorCSAqICAgICAgICAgICAgICB8ICAgICAgICB8eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4fAor
CSAqICAgICAgICAgICAgICB8ICAgICAgICB8eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4fAorCSAq
ICAgICAgICAgICAgICB8ICAgICAgICB8eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4fAorCSAqICAg
ICAgICAgICAgICB8ICAgICAgICB8eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4fAorCSAqICAgICAg
ICAgICAgICB8ICAgICAgICByeGxvdyhuKzEpICAgbWlkcG9pbnQgICAgcnhoaWdoKG4rMSkKKwkg
KiAgICAgICAgICAgICAgfAorCSAqICAgICAgICAgICAgICB8ICAgfC0tLXdpbmRvdyBhdC0tLS0t
LS0tfAorCSAqICAgICAgICAgICAgICB8ICAgfC0tLXJlYWRfZGVsYXkgPSBuLS0tfAorCSAqICAg
ICAgICAgICAgICB8ICAgfHh4eHh4eHh4eHh4eHh4eHh4eHh4fAorCSAqICAgICAgICAgICAgICB8
ICAgfHh4eHh4eHh4eHh4eHh4eHh4eHh4fAorCSAqICAgICAgICAgICAgICB8ICAgfHh4eHh4eHh4
eHh4eHh4eHh4eHh4fAorCSAqICAgICAgICAgICAgICB8ICAgfHh4eHh4eHh4eHh4eHh4eHh4eHh4
fAorCSAqICAgICAgICAgICAgICB8ICAgfHh4eHh4eHh4eHh4eHh4eHh4eHh4fAorCSAqICAgICAg
ICAgICAgICB8ICAgcnhsb3cobikgICBtaWRwb2ludCAgcnhoaWdoKG4pCisJICogICAgICAgICAg
ICAgIHwKKwkgKiAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0+IHR4CisJICogICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDEyNworCSAqICAgICAgICAgICAgICAgICAgcmVhZF9kZWxheT1uICAgICAg
ICAgICAgICAgICAgcmVhZF9kZWxheT1uKzEKKwkgKi8KKworCWZfcGRhdGEtPnVzZV90dW5lZF9w
aHkgPSB0cnVlOworCWNxc3BpX3BoeV9yZXNldF9zZXR0aW5nKCZyeGxvdyk7CisJY3FzcGlfcGh5
X3Jlc2V0X3NldHRpbmcoJnJ4aGlnaCk7CisJY3FzcGlfcGh5X3Jlc2V0X3NldHRpbmcoJmZpcnN0
KTsKKworCS8qIEZpcnN0IHdpbmRvdzogRmluZCByeGxvdyBieSBpbmNyZW1lbnRpbmcgcmVhZF9k
ZWxheSBmcm9tIDAgKi8KKworCS8qCisJICogICAgICAgICAgICAgIHJ4CisJICogICAgICAgICAg
MTI3IF4KKwkgKiAgICAgICAgICAgICAgfCAgIHx4eHh4eHh4eHh4eHh4eHh4eHh4eHwKKwkgKiAg
c2VhcmNoICAgICAgfCAgIHx4eHh4eHh4eHh4eHh4eHh4eHh4eHwKKwkgKiAgcnhsb3cgICAgICAg
fCAgIHx4eHh4eHh4eHh4eHh4eHh4eHh4eHwKKwkgKiAgaW5jcmVhc2luZyAgfCAgIHx4eHh4eHh4
eHh4eHh4eHh4eHh4eHwKKwkgKiAgICAgICAgICAgLS0tLS0tLS0tPnx4eHh4eHh4eHh4eHh4eHh4
eHh4eHwKKwkgKiAgcmVhZF9kZWxheSAgfCAgICAgICAgfHh4eHh4eHh4eHh4eHh4eHh4eHh8CisJ
ICogIHVudGlsIGZvdW5kIHwgICAgICAgIHx4eHh4eHh4eHh4eHh4eHh4eHh4fAorCSAqICAgICAg
ICAgICAgICB8ICAgICAgICByeGxvdworCSAqICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT4gdHgKKwkgKiAgICAgICAgICAgICAgMCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0eCBmaXhlZCBhdCAxMjcKKwkgKi8KKworCWRvIHsKKwkJcmV0
ID0gY3FzcGlfZmluZF9yeF9sb3dfc2RyKGZfcGRhdGEsIG1lbSwgJnJ4bG93KTsKKworCQlpZiAo
cmV0KQorCQkJcnhsb3cucmVhZF9kZWxheSsrOworCX0gd2hpbGUgKHJldCAmJiByeGxvdy5yZWFk
X2RlbGF5IDw9IENRU1BJX1BIWV9NQVhfUkQpOworCisJLyogRmluZCByeGhpZ2g6IERlY3JlbWVu
dCBmcm9tIFJYPTEyNyBhdCBzYW1lIHJlYWRfZGVsYXkgKi8KKworCS8qCisJICogICAgICAgICAg
ICAgIHJ4CisJICogICAgICAgICAgMTI3IF4gICAgICAgIHNlYXJjaCByeGhpZ2gKKwkgKiAgICAg
ICAgICAgICAgfCAgICAgICAgKGRlY3JlbWVudCBmcm9tCisJICogICAgICAgICAgICAgIHwgICAg
ICAgIDEyNyB1bnRpbCBmb3VuZCkKKwkgKiAgICAgICAgICAgICAgfCAgICAgICAgICB8CisJICog
ICAgICAgICAgICAgIHwgICAgICAgICAgfAorCSAqICAgICAgICAgICAgICB8ICAgICAgICAgIHYK
KwkgKiAgICAgICAgICAgICAgfCAgICAgICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKKwkg
KiAgICAgICAgICAgICAgfCAgICAgICAgfHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHwKKwkgKiAg
ICAgICAgICAgICAgfCAgICAgICAgfHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHwKKwkgKiAgICAg
ICAgICAgICAgfCAgICAgICAgfHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHwKKwkgKiAgICAgICAg
ICAgICAgfCAgICAgICAgfHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHwKKwkgKiAgICAgICAgICAg
ICAgfCAgICAgICAgfHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHwKKwkgKiAgICAgICAgICAgICAg
fCAgICAgICAgcnhsb3cgICAgICAgICAgICAgICAgICAgIHJ4aGlnaAorCSAqICAgICAgICAgICAg
ICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT4gdHgKKwkgKiAgICAg
ICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eCBmaXhlZCBhdCAxMjcKKwkg
Ki8KKworCXJ4aGlnaC5yZWFkX2RlbGF5ID0gcnhsb3cucmVhZF9kZWxheTsKKwlyZXQgPSBjcXNw
aV9maW5kX3J4X2hpZ2hfc2RyKGZfcGRhdGEsIG1lbSwgJnJ4aGlnaCwgcnhsb3cucngpOworCWlm
IChyZXQpCisJCWdvdG8gb3V0OworCisJLyogQ2FsY3VsYXRlIGZpcnN0IHdpbmRvdyBtaWRwb2lu
dCBmb3IgbWF4IG1hcmdpbiAqLworCisJLyoKKwkgKiAgICAgICAgICAgICAgcngKKwkgKiAgICAg
ICAgICAxMjcgXgorCSAqICAgICAgICAgICAgICB8ICAgICAgICB8LS0tLS0tLS13aW5kb3cxLS0t
LS0tLS0tfAorCSAqICAgICAgICAgICAgICB8ICAgICAgICB8eHh4eHh4eHh4eHh4eHh4eHh4eHh4
eHh4fAorCSAqICAgICAgICAgICAgICB8ICAgICAgICB8eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4
fAorCSAqICAgICAgICAgICAgICB8ICAgICAgICB8eHh4eHh4eHh4eHggKiB4eHh4eHh4eHh4fAor
CSAqICAgICAgICAgICAgICB8ICAgICAgICB8eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4fAorCSAq
ICAgICAgICAgICAgICB8ICAgICAgICB8eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4fAorCSAqICAg
ICAgICAgICAgICB8ICAgICAgICByeGxvdyAgICAgICAgXiAgICAgICAgICAgcnhoaWdoCisJICog
ICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tPiB0
eAorCSAqICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgfCAgICAgIHR4IGZpeGVk
IGF0IDEyNworCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdzEvMgorCSAqLwor
CisJZmlyc3QucmVhZF9kZWxheSA9IHJ4bG93LnJlYWRfZGVsYXk7CisJd2luZG93MSA9IHJ4aGln
aC5yeCAtIHJ4bG93LnJ4OworCWZpcnN0LnJ4ID0gcnhsb3cucnggKyAod2luZG93MSAvIDIpOwor
CisJZGV2X2RiZyhkZXYsICJGaXJzdCB0dW5pbmcgcG9pbnQ6IFJYOiAlZCBUWDogJWQgUkQ6ICVk
XG4iLCBmaXJzdC5yeCwKKwkJZmlyc3QudHgsIGZpcnN0LnJlYWRfZGVsYXkpOworCXJldCA9IGNx
c3BpX3BoeV9hcHBseV9zZXR0aW5nKGZfcGRhdGEsICZmaXJzdCk7CisJaWYgKCFyZXQpCisJCXJl
dCA9IGNxc3BpX3BoeV9jaGVja19wYXR0ZXJuKGZfcGRhdGEsIG1lbSk7CisKKwlpZiAocmV0IHx8
IGZpcnN0LnJlYWRfZGVsYXkgPiBDUVNQSV9QSFlfTUFYX1JEKQorCQlnb3RvIG91dDsKKworCS8q
IFNlY29uZCB3aW5kb3c6IFNlYXJjaCBhdCByZWFkX2RlbGF5KzEsIG1heSBkaWZmZXIgaW4gc2l6
ZSAqLworCisJLyoKKwkgKiAgICAgICAgICAgICAgcngKKwkgKiAgICAgICAgICAxMjcgXgorCSAq
ICAgICAgICAgICAgICB8ICAgICAgICB8LS0tLS0tLXwKKwkgKiAgICAgICAgICAgICAgfCAgICAg
ICAgfHh4eHh4eHh8CisJICogICAgICAgICAgICAgIHwgICAgICAgIHx4eHh4eHh4fAorCSAqICAg
ICAgICAgICAgICB8ICAgICAgICB8eHh4eHh4eHwKKwkgKiAgICAgICAgICAgICAgfCAgICAgICAg
fHh4eHh4eHh8CisJICogICAgICAgICAgICAgIHwgICAgICAgIHx4eHh4eHh4fAorCSAqICAgICAg
ICAgICAgICB8ICAgICAgICByeGxvdyAgIHJ4aGlnaAorCSAqICAgICAgICAgICAgICAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT4gdHgKKwkgKiAgICAgICAgICAgICAg
MAorCSAqICAgICAgICAgICAgICByZWFkX2RlbGF5ID0gbiAoc21hbGxlciB3aW5kb3cpCisJICoK
KwkgKiAgICAgICAgICAgICAgcngKKwkgKiAgICAgICAgICAxMjcgXgorCSAqICAgICAgICAgICAg
ICB8ICAgICAgICB8LS0tLS0tLS0tLS0tLS0tLS18CisJICogICAgICAgICAgICAgIHwgICAgICAg
IHx4eHh4eHh4eHh4eHh4eHh4eHwKKwkgKiAgICAgICAgICAgICAgfCAgICAgICAgfHh4eHh4eHh4
eHh4eHh4eHh4fAorCSAqICAgICAgICAgICAgICB8ICAgICAgICB8eHh4eHh4eHh4eHh4eHh4eHh8
CisJICogICAgICAgICAgICAgIHwgICAgICAgIHx4eHh4eHh4eHh4eHh4eHh4eHwKKwkgKiAgICAg
ICAgICAgICAgfCAgICAgICAgfHh4eHh4eHh4eHh4eHh4eHh4fAorCSAqICAgICAgICAgICAgICB8
ICAgICAgICByeGxvdyAgICAgICAgICAgICByeGhpZ2gKKwkgKiAgICAgICAgICAgICAgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+IHR4CisJICogICAgICAgICAgICAg
IDAKKwkgKiAgICAgICAgICAgICAgcmVhZF9kZWxheSA9IG4rMSAobGFyZ2VyIHdpbmRvdyAtIGJl
dHRlcikKKwkgKi8KKworCWNxc3BpX3BoeV9yZXNldF9zZXR0aW5nKCZyeGxvdyk7CisJY3FzcGlf
cGh5X3Jlc2V0X3NldHRpbmcoJnJ4aGlnaCk7CisJY3FzcGlfcGh5X3Jlc2V0X3NldHRpbmcoJnNl
Y29uZCk7CisKKwlyeGxvdy5yZWFkX2RlbGF5ID0gZmlyc3QucmVhZF9kZWxheSArIDE7CisJaWYg
KHJ4bG93LnJlYWRfZGVsYXkgPiBDUVNQSV9QSFlfTUFYX1JEKQorCQlnb3RvIGNvbXBhcmU7CisK
KwlyZXQgPSBjcXNwaV9maW5kX3J4X2xvd19zZHIoZl9wZGF0YSwgbWVtLCAmcnhsb3cpOworCWlm
IChyZXQpCisJCWdvdG8gY29tcGFyZTsKKworCXJ4aGlnaC5yZWFkX2RlbGF5ID0gcnhsb3cucmVh
ZF9kZWxheTsKKwlyZXQgPSBjcXNwaV9maW5kX3J4X2hpZ2hfc2RyKGZfcGRhdGEsIG1lbSwgJnJ4
aGlnaCwgcnhsb3cucngpOworCWlmIChyZXQpCisJCWdvdG8gY29tcGFyZTsKKworCS8qIENhbGN1
bGF0ZSBzZWNvbmQgd2luZG93IG1pZHBvaW50ICovCisKKwkvKgorCSAqICAgICAgICAgICAgICBy
eAorCSAqICAgICAgICAgIDEyNyBeCisJICogICAgICAgICAgICAgIHwgICAgICAgIHwtLS0tLS0t
LXdpbmRvdzItLS0tLS0tLS18CisJICogICAgICAgICAgICAgIHwgICAgICAgIHx4eHh4eHh4eHh4
eHh4eHh4eHh4eHh4eHh8CisJICogICAgICAgICAgICAgIHwgICAgICAgIHx4eHh4eHh4eHh4eHh4
eHh4eHh4eHh4eHh8CisJICogICAgICAgICAgICAgIHwgICAgICAgIHx4eHh4eHh4eHh4eCAqIHh4
eHh4eHh4eHh8CisJICogICAgICAgICAgICAgIHwgICAgICAgIHx4eHh4eHh4eHh4eHh4eHh4eHh4
eHh4eHh8CisJICogICAgICAgICAgICAgIHwgICAgICAgIHx4eHh4eHh4eHh4eHh4eHh4eHh4eHh4
eHh8CisJICogICAgICAgICAgICAgIHwgICAgICAgIHJ4bG93ICAgICAgICBeICAgICAgICAgICBy
eGhpZ2gKKwkgKiAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0t
LS0tLS0tLS0+IHR4CisJICogICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICB8ICAg
ICAgdHggZml4ZWQgYXQgMTI3CisJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93
Mi8yCisJICogICAgICAgICAgICAgIHJlYWRfZGVsYXkgPSBuKzEKKwkgKi8KKworCXdpbmRvdzIg
PSByeGhpZ2gucnggLSByeGxvdy5yeDsKKwlzZWNvbmQucnggPSByeGxvdy5yeCArICh3aW5kb3cy
IC8gMik7CisJc2Vjb25kLnJlYWRfZGVsYXkgPSByeGxvdy5yZWFkX2RlbGF5OworCisJZGV2X2Ri
ZyhkZXYsICJTZWNvbmQgdHVuaW5nIHBvaW50OiBSWDogJWQgVFg6ICVkIFJEOiAlZFxuIiwgc2Vj
b25kLnJ4LAorCQlzZWNvbmQudHgsIHNlY29uZC5yZWFkX2RlbGF5KTsKKwlyZXQgPSBjcXNwaV9w
aHlfYXBwbHlfc2V0dGluZyhmX3BkYXRhLCAmc2Vjb25kKTsKKwlpZiAoIXJldCkKKwkJcmV0ID0g
Y3FzcGlfcGh5X2NoZWNrX3BhdHRlcm4oZl9wZGF0YSwgbWVtKTsKKworCWlmIChyZXQgfHwgc2Vj
b25kLnJlYWRfZGVsYXkgPiBDUVNQSV9QSFlfTUFYX1JEKQorCQl3aW5kb3cyID0gMDsKKworCS8q
IFdpbmRvdyBjb21wYXJpc29uOiBDaG9vc2UgbGFyZ2VyIHdpbmRvdyBmb3IgYmV0dGVyIG1hcmdp
biAqLworCitjb21wYXJlOgorCWNxc3BpX3BoeV9yZXNldF9zZXR0aW5nKCZmaW5hbCk7CisJaWYg
KHdpbmRvdzIgPiB3aW5kb3cxKSB7CisJCWZpbmFsLnJ4ID0gc2Vjb25kLnJ4OworCQlmaW5hbC5y
ZWFkX2RlbGF5ID0gc2Vjb25kLnJlYWRfZGVsYXk7CisJfSBlbHNlIHsKKwkJZmluYWwucnggPSBm
aXJzdC5yeDsKKwkJZmluYWwucmVhZF9kZWxheSA9IGZpcnN0LnJlYWRfZGVsYXk7CisJfQorCisJ
LyogQXBwbHkgYW5kIHZlcmlmeSBmaW5hbCB0dW5pbmcgcG9pbnQgKi8KKworCWRldl9kYmcoZGV2
LCAiRmluYWwgdHVuaW5nIHBvaW50OiBSWDogJWQgVFg6ICVkIFJEOiAlZFxuIiwgZmluYWwucngs
CisJCWZpbmFsLnR4LCBmaW5hbC5yZWFkX2RlbGF5KTsKKwlyZXQgPSBjcXNwaV9waHlfYXBwbHlf
c2V0dGluZyhmX3BkYXRhLCAmZmluYWwpOworCWlmICghcmV0KQorCQlyZXQgPSBjcXNwaV9waHlf
Y2hlY2tfcGF0dGVybihmX3BkYXRhLCBtZW0pOworCisJaWYgKHJldCkgeworCQlyZXQgPSAtRUlO
VkFMOworCQlnb3RvIG91dDsKKwl9CisKKwlmX3BkYXRhLT5waHlfc2V0dGluZy5yZWFkX2RlbGF5
ID0gZmluYWwucmVhZF9kZWxheTsKKwlmX3BkYXRhLT5waHlfc2V0dGluZy5yeCA9IGZpbmFsLnJ4
OworCWZfcGRhdGEtPnBoeV9zZXR0aW5nLnR4ID0gZmluYWwudHg7CisKK291dDoKKwlpZiAocmV0
KQorCQlmX3BkYXRhLT51c2VfdHVuZWRfcGh5ID0gZmFsc2U7CisKKwlyZXR1cm4gcmV0OworfQor
CitzdGF0aWMgaW50IGNxc3BpX2FtNjU0X29zcGlfZXhlY3V0ZV90dW5pbmcoc3RydWN0IHNwaV9t
ZW0gKm1lbSwKKwkJCQkJICAgc3RydWN0IHNwaV9tZW1fb3AgKnJlYWRfb3AsCisJCQkJCSAgIHN0
cnVjdCBzcGlfbWVtX29wICp3cml0ZV9vcCkKK3sKKwlzdHJ1Y3QgY3FzcGlfc3QgKmNxc3BpID0K
KwkJc3BpX2NvbnRyb2xsZXJfZ2V0X2RldmRhdGEobWVtLT5zcGktPmNvbnRyb2xsZXIpOworCXN0
cnVjdCBjcXNwaV9mbGFzaF9wZGF0YSAqZl9wZGF0YTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAm
Y3FzcGktPnBkZXYtPmRldjsKKwlpbnQgcmV0OworCisJZl9wZGF0YSA9ICZjcXNwaS0+Zl9wZGF0
YVtzcGlfZ2V0X2NoaXBzZWxlY3QobWVtLT5zcGksIDApXTsKKworCS8qCisJICogc3BpLW1heC1w
b3N0LWNvbmZpZy1mcmVxdWVuY3ktaHogbXVzdCBiZSBwcmVzZW50IGZvciBQSFkgdHVuaW5nLgor
CSAqIElmIGFic2VudCwgcG9zdF9jb25maWdfbWF4X3NwZWVkX2h6IGlzIHplcm8gYW5kIHRoZXJl
IGlzIG5vCisJICogY2FsaWJyYXRpb24gdGFyZ2V0LCBzbyBza2lwIHR1bmluZyBncmFjZWZ1bGx5
LgorCSAqLworCWlmICghbWVtLT5zcGktPnBvc3RfY29uZmlnX21heF9zcGVlZF9oeikgeworCQlk
ZXZfZGJnKGRldiwKKwkJCSJObyBwb3N0LWNvbmZpZyBmcmVxdWVuY3kgY29uZmlndXJlZCwgc2tp
cHBpbmcgdHVuaW5nXG4iKTsKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCX0KKworCWlmICh3cml0
ZV9vcCkgeworCQkvKgorCQkgKiBGb3IgTkFORDogd3JpdGUgdGhlIGNhbGlicmF0aW9uIHBhdHRl
cm4gdG8gdGhlIHBhZ2UgY2FjaGUuCisJCSAqIFRoZSB3cml0ZSBvcCBydW5zIGF0IHRoZSBjb25z
ZXJ2YXRpdmUgYmFzZSBzcGVlZCAoc3BpLT5tYXhfc3BlZWRfaHopCisJCSAqIHNvIHRoZSB3cml0
ZSBpdHNlbGYgaXMgcmVsaWFibGUgYmVmb3JlIFBIWSBjYWxpYnJhdGlvbi4KKwkJICovCisJCXJl
dCA9IGNxc3BpX3dyaXRlX3BhdHRlcm5fdG9fY2FjaGUoZl9wZGF0YSwgbWVtLCB3cml0ZV9vcCk7
CisJCWlmIChyZXQpIHsKKwkJCWRldl93YXJuKGRldiwKKwkJCQkgImZhaWxlZCB0byB3cml0ZSBw
YXR0ZXJuIHRvIGNhY2hlOiAlZCwgc2tpcHBpbmcgdHVuaW5nXG4iLAorCQkJCSByZXQpOworCQkJ
Z290byBvdXQ7CisJCX0KKworCQlmX3BkYXRhLT5waHlfd3JpdGVfb3AgPSAqd3JpdGVfb3A7CisJ
fSBlbHNlIHsKKwkJaWYgKCFmX3BkYXRhLT5waHlfcGF0dGVybl9wYXJ0aXRpb25fb2Zmc2V0KSB7
CisJCQlkZXZfd2FybihkZXYsICJwYXR0ZXJuIHBhcnRpdGlvbiBub3QgZm91bmQsIHNraXBwaW5n
IHR1bmluZ1xuIik7CisJCQlnb3RvIG91dDsKKwkJfQorCQlyZWFkX29wLT5hZGRyLnZhbCA9IGZf
cGRhdGEtPnBoeV9wYXR0ZXJuX3BhcnRpdGlvbl9vZmZzZXQ7CisJfQorCisJLyoKKwkgKiBWZXJp
ZnkgdGhlIGNhbGlicmF0aW9uIHBhdHRlcm4gZXhpc3RzIHVzaW5nIHRoZSBjb25zZXJ2YXRpdmUg
YmFzZQorCSAqIHNwZWVkLiAgQXQgaGlnaCBjbG9jayByYXRlcyB0aGUgRExMIGlzIG5vdCB5ZXQg
dHJhaW5lZCwgc28gRFRSCisJICogZGF0YSBjYXB0dXJlIGlzIHVucmVsaWFibGUgYW5kIHRoZSBy
ZWFkIHdvdWxkIHJldHVybiBnYXJiYWdlLgorCSAqIFNldHRpbmcgbWF4X2ZyZXEgdG8gMCBjYXVz
ZXMgc3BpX21lbV9hZGp1c3Rfb3BfZnJlcSgpIHRvIGNhcCB0aGUKKwkgKiByZWFkIHRvIG1heF9z
cGVlZF9oeiAodGhlIGJhc2UgcmF0ZSksIHdlbGwgd2l0aGluIHJlbGlhYmxlIERUUgorCSAqIG1h
cmdpbnMuICBtYXhfZnJlcSBpcyBzZXQgdG8gcG9zdF9jb25maWdfbWF4X3NwZWVkX2h6IGJlbG93
IGFmdGVyCisJICogdGhlIHBhdHRlcm4gaXMgY29uZmlybWVkLCBzbyB0aGUgdHVuaW5nLWxvb3Ag
cmVhZHMgcnVuIGF0IGZ1bGwgcmF0ZS4KKwkgKi8KKwlmX3BkYXRhLT5waHlfcmVhZF9vcCA9ICpy
ZWFkX29wOworCWZfcGRhdGEtPnBoeV9yZWFkX29wLm1heF9mcmVxID0gMDsKKworCXJldCA9IGNx
c3BpX3BoeV9jaGVja19wYXR0ZXJuKGZfcGRhdGEsIG1lbSk7CisJaWYgKHJldCkgeworCQlkZXZf
ZXJyKGRldiwgInBhdHRlcm4gbm90IGZvdW5kOiAlZCwgc2tpcHBpbmcgdHVuaW5nXG4iLCByZXQp
OworCQlnb3RvIG91dDsKKwl9CisKKwkvKgorCSAqIFBhdHRlcm4gY29uZmlybWVkLiAgU2V0IHBo
eV9yZWFkX29wLm1heF9mcmVxIHRvCisJICogcG9zdF9jb25maWdfbWF4X3NwZWVkX2h6IHNvIHRo
YXQgdHVuaW5nLWxvb3AgcmVhZHMgYnlwYXNzIHRoZSBiYXNlCisJICogZnJlcXVlbmN5IGNhcCBp
biBzcGlfbWVtX2FkanVzdF9vcF9mcmVxKCkgYW5kIHJ1biBhdCB0aGUgZnVsbAorCSAqIGNhbGli
cmF0aW9uIHJhdGUuCisJICovCisJZl9wZGF0YS0+cGh5X3JlYWRfb3AubWF4X2ZyZXEgPSBtZW0t
PnNwaS0+cG9zdF9jb25maWdfbWF4X3NwZWVkX2h6OworCisJaWYgKHJlYWRfb3AtPmNtZC5kdHIg
fHwgcmVhZF9vcC0+YWRkci5kdHIgfHwgcmVhZF9vcC0+ZHVtbXkuZHRyIHx8CisJICAgIHJlYWRf
b3AtPmRhdGEuZHRyKSB7CisJCWZfcGRhdGEtPnVzZV9kcXMgPSB0cnVlOworCQljcXNwaV9waHlf
cHJlX2NvbmZpZyhjcXNwaSwgZl9wZGF0YSwgZmFsc2UpOworCQlyZXQgPSBjcXNwaV9waHlfdHVu
aW5nX2RkcihmX3BkYXRhLCBtZW0pOworCX0gZWxzZSB7CisJCWZfcGRhdGEtPnVzZV9kcXMgPSBm
YWxzZTsKKwkJY3FzcGlfcGh5X3ByZV9jb25maWcoY3FzcGksIGZfcGRhdGEsIHRydWUpOworCQly
ZXQgPSBjcXNwaV9waHlfdHVuaW5nX3NkcihmX3BkYXRhLCBtZW0pOworCX0KKworCWlmIChyZXQp
CisJCWRldl93YXJuKGRldiwgInR1bmluZyBmYWlsZWQ6ICVkXG4iLCByZXQpOworCisJY3FzcGlf
cGh5X3Bvc3RfY29uZmlnKGNxc3BpLCBmX3BkYXRhLT5yZWFkX2RlbGF5KTsKKworb3V0OgorCS8q
CisJICogT24gc3VjY2Vzcywgd3JpdGUgYmFjayB0aGUgdmFsaWRhdGVkIG1heGltdW0gc3BlZWQg
aW50byB0aGUgY2FsbGVyJ3MKKwkgKiBvcCB0ZW1wbGF0ZXMgc28gdGhhdCB0aG9zZSBzcGVjaWZp
YyBvcHMgYnlwYXNzIHRoZSBjYXAgaW4gc3Vic2VxdWVudAorCSAqIGV4ZWNfb3AgY2FsbHMuCisJ
ICovCisJaWYgKCFyZXQpIHsKKwkJcmVhZF9vcC0+bWF4X2ZyZXEgPSBtZW0tPnNwaS0+cG9zdF9j
b25maWdfbWF4X3NwZWVkX2h6OworCQlpZiAod3JpdGVfb3ApCisJCQl3cml0ZV9vcC0+bWF4X2Zy
ZXEgPSBtZW0tPnNwaS0+cG9zdF9jb25maWdfbWF4X3NwZWVkX2h6OworCX0KKworCXJldHVybiBy
ZXQ7Cit9CisKK3N0YXRpYyBpbnQgY3FzcGlfbWVtX29wX2V4ZWN1dGVfdHVuaW5nKHN0cnVjdCBz
cGlfbWVtICptZW0sCisJCQkJICAgICAgIHN0cnVjdCBzcGlfbWVtX29wICpyZWFkX29wLAorCQkJ
CSAgICAgICBzdHJ1Y3Qgc3BpX21lbV9vcCAqd3JpdGVfb3ApCit7CisJc3RydWN0IGNxc3BpX3N0
ICpjcXNwaSA9CisJCXNwaV9jb250cm9sbGVyX2dldF9kZXZkYXRhKG1lbS0+c3BpLT5jb250cm9s
bGVyKTsKKworCWlmICghY3FzcGktPmRkYXRhLT5leGVjdXRlX3R1bmluZykKKwkJcmV0dXJuIC1F
T1BOT1RTVVBQOworCisJcmV0dXJuIGNxc3BpLT5kZGF0YS0+ZXhlY3V0ZV90dW5pbmcobWVtLCBy
ZWFkX29wLCB3cml0ZV9vcCk7Cit9CisKIHN0YXRpYyBpbnQgY3FzcGlfb2ZfZ2V0X2ZsYXNoX3Bk
YXRhKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCiAJCQkJICAgIHN0cnVjdCBjcXNwaV9m
bGFzaF9wZGF0YSAqZl9wZGF0YSwKIAkJCQkgICAgc3RydWN0IGRldmljZV9ub2RlICpucCkKIHsK
KwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhcnRfbnA7CisKIAlpZiAob2ZfcHJvcGVydHlfcmVhZF91
MzIobnAsICJjZG5zLHJlYWQtZGVsYXkiLCAmZl9wZGF0YS0+cmVhZF9kZWxheSkpIHsKIAkJZGV2
X2VycigmcGRldi0+ZGV2LCAiY291bGRuJ3QgZGV0ZXJtaW5lIHJlYWQtZGVsYXlcbiIpOwogCQly
ZXR1cm4gLUVOWElPOwpAQCAtMTU4OCw5ICszMzA3LDExIEBAIHN0YXRpYyBpbnQgY3FzcGlfb2Zf
Z2V0X2ZsYXNoX3BkYXRhKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCiAJCXJldHVybiAt
RU5YSU87CiAJfQogCi0JaWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAic3BpLW1heC1mcmVx
dWVuY3kiLCAmZl9wZGF0YS0+Y2xrX3JhdGUpKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImNv
dWxkbid0IGRldGVybWluZSBzcGktbWF4LWZyZXF1ZW5jeVxuIik7Ci0JCXJldHVybiAtRU5YSU87
CisJcGFydF9ucCA9IG9mX3BhcnNlX3BoYW5kbGUobnAsICJzcGktcGh5LXBhdHRlcm4tcGFydGl0
aW9uIiwgMCk7CisJaWYgKHBhcnRfbnApIHsKKwkJb2ZfcHJvcGVydHlfcmVhZF91MzJfaW5kZXgo
cGFydF9ucCwgInJlZyIsIDAsCisJCQkJCSAgICZmX3BkYXRhLT5waHlfcGF0dGVybl9wYXJ0aXRp
b25fb2Zmc2V0KTsKKwkJb2Zfbm9kZV9wdXQocGFydF9ucCk7CiAJfQogCiAJcmV0dXJuIDA7CkBA
IC0xNzQwLDYgKzM0NjEsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHNwaV9jb250cm9sbGVyX21l
bV9vcHMgY3FzcGlfbWVtX29wcyA9IHsKIAkuZXhlY19vcCA9IGNxc3BpX2V4ZWNfbWVtX29wLAog
CS5nZXRfbmFtZSA9IGNxc3BpX2dldF9uYW1lLAogCS5zdXBwb3J0c19vcCA9IGNxc3BpX3N1cHBv
cnRzX21lbV9vcCwKKwkuZXhlY3V0ZV90dW5pbmcgPSBjcXNwaV9tZW1fb3BfZXhlY3V0ZV90dW5p
bmcsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNwaV9jb250cm9sbGVyX21lbV9jYXBzIGNx
c3BpX21lbV9jYXBzID0gewpAQCAtMjEwOCw2ICszODMwLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVj
dCBjcXNwaV9kcml2ZXJfcGxhdGRhdGEgazJnX3FzcGkgPSB7CiBzdGF0aWMgY29uc3Qgc3RydWN0
IGNxc3BpX2RyaXZlcl9wbGF0ZGF0YSBhbTY1NF9vc3BpID0gewogCS5od2NhcHNfbWFzayA9IENR
U1BJX1NVUFBPUlRTX09DVEFMIHwgQ1FTUElfU1VQUE9SVFNfUVVBRCwKIAkucXVpcmtzID0gQ1FT
UElfTkVFRFNfV1JfREVMQVksCisJLmV4ZWN1dGVfdHVuaW5nID0gY3FzcGlfYW02NTRfb3NwaV9l
eGVjdXRlX3R1bmluZywKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY3FzcGlfZHJpdmVyX3Bs
YXRkYXRhIGludGVsX2xnbV9xc3BpID0gewotLSAKMi4zNC4xCgoKX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkxpbnV4IE1URCBkaXNjdXNzaW9u
IG1haWxpbmcgbGlzdApodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZv
L2xpbnV4LW10ZC8K