Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 04 Oct 2008 19:38:09 +0400
From:      "Andrey V. Elsukov" <bu7cher@yandex.ru>
To:        freebsd-stable@freebsd.org
Cc:        kib@freebsd.org, sos@freebsd.org
Subject:   Request for testing: ata(4) MFC
Message-ID:  <676151223134689@webmail38.yandex.ru>

next in thread | raw e-mail | index | archive | help

------==--bound.67616.webmail38.yandex.ru
Content-Transfer-Encoding: 7bit
Content-Type: text/plain

Hi, All.

I prepared patch to make MFC of ata(4) driver into RELENG_7 
before 7.1-RELEASE. Depending on results of the testing patch
will be commited or not (if some regressions will be detected).
So if you want or just can test it, please try and report here.

-- 
WBR, Andrey V. Elsukov
------==--bound.67616.webmail38.yandex.ru
Content-Disposition: attachment;
	filename="ata.diff"
Content-Transfer-Encoding: base64
Content-Type: application/octet-stream;
	name="ata.diff"

LS0tIHNyYy9zeXMvZGV2L2F0YS9hdGEtYWxsLmMJMjAwOC0wOS0yOSAyMzo1NDozOC4wMDAwMDAw
MDAgKzA0MDAKKysrIHNyYy9zeXMvZGV2L2F0YS9hdGEtYWxsLmMJMjAwOC0wOC0xNSAxNDo1NTox
MS4wMDAwMDAwMDAgKzA0MDAKQEAgLTEsNSArMSw1IEBACiAvKi0KLSAqIENvcHlyaWdodCAoYykg
MTk5OCAtIDIwMDcgU/hyZW4gU2NobWlkdCA8c29zQEZyZWVCU0Qub3JnPgorICogQ29weXJpZ2h0
IChjKSAxOTk4IC0gMjAwOCBT+HJlbiBTY2htaWR0IDxzb3NARnJlZUJTRC5vcmc+CiAgKiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNjIsNyArNjIsNiBAQCBzdGF0
aWMgc3RydWN0IGNkZXZzdyBhdGFfY2RldnN3ID0gewogLyogcHJvdG90eXBlcyAqLwogc3RhdGlj
IHZvaWQgYXRhX2Jvb3RfYXR0YWNoKHZvaWQpOwogc3RhdGljIGRldmljZV90IGF0YV9hZGRfY2hp
bGQoZGV2aWNlX3QsIHN0cnVjdCBhdGFfZGV2aWNlICosIGludCk7Ci1zdGF0aWMgaW50IGF0YV9n
ZXRwYXJhbShzdHJ1Y3QgYXRhX2RldmljZSAqLCBpbnQpOwogc3RhdGljIHZvaWQgYnN3YXAoaW50
OF90ICosIGludCk7CiBzdGF0aWMgdm9pZCBidHJpbShpbnQ4X3QgKiwgaW50KTsKIHN0YXRpYyB2
b2lkIGJwYWNrKGludDhfdCAqLCBpbnQ4X3QgKiwgaW50KTsKQEAgLTc1LDYgKzc0LDcgQEAgZGV2
Y2xhc3NfdCBhdGFfZGV2Y2xhc3M7CiB1bWFfem9uZV90IGF0YV9yZXF1ZXN0X3pvbmU7CiB1bWFf
em9uZV90IGF0YV9jb21wb3NpdGVfem9uZTsKIGludCBhdGFfd2MgPSAxOworaW50IGF0YV9zZXRt
YXggPSAwOwogaW50IGF0YV9kbWFfY2hlY2tfODBwaW4gPSAxOwogCiAvKiBsb2NhbCB2YXJzICov
CkBAIC05Niw2ICs5Niw5IEBAIFNZU0NUTF9JTlQoX2h3X2F0YSwgT0lEX0FVVE8sIGF0YXBpX2Rt
YSwKIFRVTkFCTEVfSU5UKCJody5hdGEud2MiLCAmYXRhX3djKTsKIFNZU0NUTF9JTlQoX2h3X2F0
YSwgT0lEX0FVVE8sIHdjLCBDVExGTEFHX1JEVFVOLCAmYXRhX3djLCAwLAogCSAgICJBVEEgZGlz
ayB3cml0ZSBjYWNoaW5nIik7CitUVU5BQkxFX0lOVCgiaHcuYXRhLnNldG1heCIsICZhdGFfc2V0
bWF4KTsKK1NZU0NUTF9JTlQoX2h3X2F0YSwgT0lEX0FVVE8sIHNldG1heCwgQ1RMRkxBR19SRFRV
TiwgJmF0YV9zZXRtYXgsIDAsCisJICAgIkFUQSBkaXNrIHNldCBtYXggbmF0aXZlIGFkZHJlc3Mi
KTsKIAogLyoKICAqIG5ld2J1cyBkZXZpY2UgaW50ZXJmYWNlIHJlbGF0ZWQgZnVuY3Rpb25zCkBA
IC0xMzEsNiArMTM0LDEwIEBAIGF0YV9hdHRhY2goZGV2aWNlX3QgZGV2KQogICAgIEFUQV9SRVNF
VChkZXYpOwogICAgIEFUQV9MT0NLSU5HKGRldiwgQVRBX0xGX1VOTE9DSyk7CiAKKyAgICAvKiBh
bGxvY2F0ZSBETUEgcmVzb3VyY2VzIGlmIERNQSBIVyBwcmVzZW50Ki8KKyAgICBpZiAoY2gtPmRt
YS5hbGxvYykKKwljaC0+ZG1hLmFsbG9jKGRldik7CisKICAgICAvKiBzZXR1cCBpbnRlcnJ1cHQg
ZGVsaXZlcnkgKi8KICAgICByaWQgPSBBVEFfSVJRX1JJRDsKICAgICBjaC0+cl9pcnEgPSBidXNf
YWxsb2NfcmVzb3VyY2VfYW55KGRldiwgU1lTX1JFU19JUlEsICZyaWQsCkBAIC00MDksMTMgKzQx
NiwxMyBAQCBhdGFfaW9jdGwoc3RydWN0IGNkZXYgKmRldiwgdV9sb25nIGNtZCwgCiAJCWlmIChj
aGlsZHJlbltpXSAmJiBkZXZpY2VfaXNfYXR0YWNoZWQoY2hpbGRyZW5baV0pKSB7CiAJCSAgICBz
dHJ1Y3QgYXRhX2RldmljZSAqYXRhZGV2ID0gZGV2aWNlX2dldF9zb2Z0YyhjaGlsZHJlbltpXSk7
CiAKLQkJICAgIGlmIChhdGFkZXYtPnVuaXQgPT0gQVRBX01BU1RFUikgeworCQkgICAgaWYgKGF0
YWRldi0+dW5pdCA9PSBBVEFfTUFTVEVSKSB7IC8qIFhYWCBTT1MgUE0gKi8KIAkJCXN0cm5jcHko
ZGV2aWNlcy0+bmFtZVswXSwKIAkJCQlkZXZpY2VfZ2V0X25hbWV1bml0KGNoaWxkcmVuW2ldKSwg
MzIpOwogCQkJYmNvcHkoJmF0YWRldi0+cGFyYW0sICZkZXZpY2VzLT5wYXJhbXNbMF0sCiAJCQkg
ICAgICBzaXplb2Yoc3RydWN0IGF0YV9wYXJhbXMpKTsKIAkJICAgIH0KLQkJICAgIGlmIChhdGFk
ZXYtPnVuaXQgPT0gQVRBX1NMQVZFKSB7CisJCSAgICBpZiAoYXRhZGV2LT51bml0ID09IEFUQV9T
TEFWRSkgeyAvKiBYWFggU09TIFBNICovCiAJCQlzdHJuY3B5KGRldmljZXMtPm5hbWVbMV0sCiAJ
CQkJZGV2aWNlX2dldF9uYW1ldW5pdChjaGlsZHJlbltpXSksIDMyKTsKIAkJCWJjb3B5KCZhdGFk
ZXYtPnBhcmFtLCAmZGV2aWNlcy0+cGFyYW1zWzFdLApAQCAtNDU3LDYgKzQ2NCw3IEBAIGF0YV9k
ZXZpY2VfaW9jdGwoZGV2aWNlX3QgZGV2LCB1X2xvbmcgY20KIAkgICAgZnJlZShidWYsIE1fQVRB
KTsKIAkgICAgcmV0dXJuICBFTk9NRU07CiAJfQorCXJlcXVlc3QtPmRldiA9IGF0YWRldi0+ZGV2
OwogCWlmIChpb2NfcmVxdWVzdC0+ZmxhZ3MgJiBBVEFfQ01EX1dSSVRFKSB7CiAJICAgIGVycm9y
ID0gY29weWluKGlvY19yZXF1ZXN0LT5kYXRhLCBidWYsIGlvY19yZXF1ZXN0LT5jb3VudCk7CiAJ
ICAgIGlmIChlcnJvcikgewpAQCAtNDY1LDcgKzQ3Myw2IEBAIGF0YV9kZXZpY2VfaW9jdGwoZGV2
aWNlX3QgZGV2LCB1X2xvbmcgY20KIAkJcmV0dXJuIGVycm9yOwogCSAgICB9CiAJfQotCXJlcXVl
c3QtPmRldiA9IGRldjsKIAlpZiAoaW9jX3JlcXVlc3QtPmZsYWdzICYgQVRBX0NNRF9BVEFQSSkg
ewogCSAgICByZXF1ZXN0LT5mbGFncyA9IEFUQV9SX0FUQVBJOwogCSAgICBiY29weShpb2NfcmVx
dWVzdC0+dS5hdGFwaS5jY2IsIHJlcXVlc3QtPnUuYXRhcGkuY2NiLCAxNik7CkBAIC01NzQsNyAr
NTgxLDcgQEAgYXRhX2FkZF9jaGlsZChkZXZpY2VfdCBwYXJlbnQsIHN0cnVjdCBhdAogICAgIHJl
dHVybiBjaGlsZDsKIH0KIAotc3RhdGljIGludAoraW50CiBhdGFfZ2V0cGFyYW0oc3RydWN0IGF0
YV9kZXZpY2UgKmF0YWRldiwgaW50IGluaXQpCiB7CiAgICAgc3RydWN0IGF0YV9jaGFubmVsICpj
aCA9IGRldmljZV9nZXRfc29mdGMoZGV2aWNlX2dldF9wYXJlbnQoYXRhZGV2LT5kZXYpKTsKQEAg
LTU4MiwxMSArNTg5LDkgQEAgYXRhX2dldHBhcmFtKHN0cnVjdCBhdGFfZGV2aWNlICphdGFkZXYs
IAogICAgIHVfaW50OF90IGNvbW1hbmQgPSAwOwogICAgIGludCBlcnJvciA9IEVOT01FTSwgcmV0
cmllcyA9IDI7CiAKLSAgICBpZiAoY2gtPmRldmljZXMgJgotCShhdGFkZXYtPnVuaXQgPT0gQVRB
X01BU1RFUiA/IEFUQV9BVEFfTUFTVEVSIDogQVRBX0FUQV9TTEFWRSkpCisgICAgaWYgKGNoLT5k
ZXZpY2VzICYgKEFUQV9BVEFfTUFTVEVSIDw8IGF0YWRldi0+dW5pdCkpCiAJY29tbWFuZCA9IEFU
QV9BVEFfSURFTlRJRlk7Ci0gICAgaWYgKGNoLT5kZXZpY2VzICYKLQkoYXRhZGV2LT51bml0ID09
IEFUQV9NQVNURVIgPyBBVEFfQVRBUElfTUFTVEVSIDogQVRBX0FUQVBJX1NMQVZFKSkKKyAgICBp
ZiAoY2gtPmRldmljZXMgJiAoQVRBX0FUQVBJX01BU1RFUiA8PCBhdGFkZXYtPnVuaXQpKQogCWNv
bW1hbmQgPSBBVEFfQVRBUElfSURFTlRJRlk7CiAgICAgaWYgKCFjb21tYW5kKQogCXJldHVybiBF
TlhJTzsKQEAgLTYzNiw3ICs2NDEsNyBAQCBhdGFfZ2V0cGFyYW0oc3RydWN0IGF0YV9kZXZpY2Ug
KmF0YWRldiwgCiAJaWYgKGJvb3R2ZXJib3NlKQogCSAgICBwcmludGYoImF0YSVkLSVzOiBwaW89
JXMgd2RtYT0lcyB1ZG1hPSVzIGNhYmxlPSVzIHdpcmVcbiIsCiAJCSAgIGRldmljZV9nZXRfdW5p
dChjaC0+ZGV2KSwKLQkJICAgYXRhZGV2LT51bml0ID09IEFUQV9NQVNURVIgPyAibWFzdGVyIiA6
ICJzbGF2ZSIsCisJCSAgIGF0YV91bml0MnN0cihhdGFkZXYpLAogCQkgICBhdGFfbW9kZTJzdHIo
YXRhX3Btb2RlKGF0YWNhcCkpLAogCQkgICBhdGFfbW9kZTJzdHIoYXRhX3dtb2RlKGF0YWNhcCkp
LAogCQkgICBhdGFfbW9kZTJzdHIoYXRhX3Vtb2RlKGF0YWNhcCkpLApAQCAtNjQ4LDEzICs2NTMs
MTMgQEAgYXRhX2dldHBhcmFtKHN0cnVjdCBhdGFfZGV2aWNlICphdGFkZXYsIAogCSAgICBpZiAo
KGF0YWRldi0+cGFyYW0uY29uZmlnICYgQVRBX1BST1RPX0FUQVBJKSAmJgogCQkoYXRhZGV2LT5w
YXJhbS5jb25maWcgIT0gQVRBX0NGQV9NQUdJQzEpICYmCiAJCShhdGFkZXYtPnBhcmFtLmNvbmZp
ZyAhPSBBVEFfQ0ZBX01BR0lDMikpIHsKLQkJaWYgKGF0YXBpX2RtYSAmJiBjaC0+ZG1hICYmCisJ
CWlmIChhdGFwaV9kbWEgJiYKIAkJICAgIChhdGFkZXYtPnBhcmFtLmNvbmZpZyAmIEFUQV9EUlFf
TUFTSykgIT0gQVRBX0RSUV9JTlRSICYmCiAJCSAgICBhdGFfdW1vZGUoJmF0YWRldi0+cGFyYW0p
ID49IEFUQV9VRE1BMikKIAkJICAgIGF0YWRldi0+bW9kZSA9IEFUQV9ETUFfTUFYOwogCSAgICB9
CiAJICAgIGVsc2UgewotCQlpZiAoYXRhX2RtYSAmJiBjaC0+ZG1hICYmCisJCWlmIChhdGFfZG1h
ICYmCiAJCSAgICAoYXRhX3Vtb2RlKCZhdGFkZXYtPnBhcmFtKSA+IDAgfHwKIAkJICAgICBhdGFf
d21vZGUoJmF0YWRldi0+cGFyYW0pID4gMCkpCiAJCSAgICBhdGFkZXYtPm1vZGUgPSBBVEFfRE1B
X01BWDsKQEAgLTY3Miw1MiArNjc3LDQyIEBAIGludAogYXRhX2lkZW50aWZ5KGRldmljZV90IGRl
dikKIHsKICAgICBzdHJ1Y3QgYXRhX2NoYW5uZWwgKmNoID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYp
OwotICAgIHN0cnVjdCBhdGFfZGV2aWNlICptYXN0ZXIgPSBOVUxMLCAqc2xhdmUgPSBOVUxMOwot
ICAgIGRldmljZV90IG1hc3Rlcl9jaGlsZCA9IE5VTEwsIHNsYXZlX2NoaWxkID0gTlVMTDsKLSAg
ICBpbnQgbWFzdGVyX3VuaXQgPSAtMSwgc2xhdmVfdW5pdCA9IC0xOwotCi0gICAgaWYgKGNoLT5k
ZXZpY2VzICYgKEFUQV9BVEFfTUFTVEVSIHwgQVRBX0FUQVBJX01BU1RFUikpIHsKLQlpZiAoISht
YXN0ZXIgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBhdGFfZGV2aWNlKSwKLQkJCSAgICAgIE1fQVRB
LCBNX05PV0FJVCB8IE1fWkVSTykpKSB7Ci0JICAgIGRldmljZV9wcmludGYoZGV2LCAib3V0IG9m
IG1lbW9yeVxuIik7Ci0JICAgIHJldHVybiBFTk9NRU07Ci0JfQotCW1hc3Rlci0+dW5pdCA9IEFU
QV9NQVNURVI7Ci0gICAgfQotICAgIGlmIChjaC0+ZGV2aWNlcyAmIChBVEFfQVRBX1NMQVZFIHwg
QVRBX0FUQVBJX1NMQVZFKSkgewotCWlmICghKHNsYXZlID0gbWFsbG9jKHNpemVvZihzdHJ1Y3Qg
YXRhX2RldmljZSksCi0JCQkgICAgIE1fQVRBLCBNX05PV0FJVCB8IE1fWkVSTykpKSB7Ci0JICAg
IGZyZWUobWFzdGVyLCBNX0FUQSk7Ci0JICAgIGRldmljZV9wcmludGYoZGV2LCAib3V0IG9mIG1l
bW9yeVxuIik7Ci0JICAgIHJldHVybiBFTk9NRU07Ci0JfQotCXNsYXZlLT51bml0ID0gQVRBX1NM
QVZFOwotICAgIH0KKyAgICBzdHJ1Y3QgYXRhX2RldmljZSAqZGV2aWNlc1tBVEFfUE1dOworICAg
IGRldmljZV90IGNoaWxkZGV2c1tBVEFfUE1dOworICAgIGludCBpOwogCisgICAgaWYgKGJvb3R2
ZXJib3NlKQorCWRldmljZV9wcmludGYoZGV2LCAiaWRlbnRpZnkgY2gtPmRldmljZXM9JTA4eFxu
IiwgY2gtPmRldmljZXMpOworCisgICAgZm9yIChpID0gMDsgaSA8IEFUQV9QTTsgKytpKSB7CisJ
aWYgKGNoLT5kZXZpY2VzICYgKCgoQVRBX0FUQV9NQVNURVIgfCBBVEFfQVRBUElfTUFTVEVSKSA8
PCBpKSkpIHsKKwkgICAgaW50IHVuaXQgPSAtMTsKKworCSAgICBpZiAoIShkZXZpY2VzW2ldID0g
bWFsbG9jKHNpemVvZihzdHJ1Y3QgYXRhX2RldmljZSksCisJCQkJICAgICAgTV9BVEEsIE1fTk9X
QUlUIHwgTV9aRVJPKSkpIHsKKwkJZGV2aWNlX3ByaW50ZihkZXYsICJvdXQgb2YgbWVtb3J5XG4i
KTsKKwkJcmV0dXJuIEVOT01FTTsKKwkgICAgfQorCSAgICBkZXZpY2VzW2ldLT51bml0ID0gaTsK
ICNpZmRlZiBBVEFfU1RBVElDX0lECi0gICAgaWYgKGNoLT5kZXZpY2VzICYgQVRBX0FUQV9NQVNU
RVIpCi0JbWFzdGVyX3VuaXQgPSAoZGV2aWNlX2dldF91bml0KGRldikgPDwgMSk7Ci0jZW5kaWYK
LSAgICBpZiAobWFzdGVyICYmICEobWFzdGVyX2NoaWxkID0gYXRhX2FkZF9jaGlsZChkZXYsIG1h
c3RlciwgbWFzdGVyX3VuaXQpKSkgewotCWZyZWUobWFzdGVyLCBNX0FUQSk7Ci0JbWFzdGVyID0g
TlVMTDsKLSAgICB9Ci0jaWZkZWYgQVRBX1NUQVRJQ19JRAotICAgIGlmIChjaC0+ZGV2aWNlcyAm
IEFUQV9BVEFfU0xBVkUpCi0Jc2xhdmVfdW5pdCA9IChkZXZpY2VfZ2V0X3VuaXQoZGV2KSA8PCAx
KSArIDE7CisJICAgIGlmIChjaC0+ZGV2aWNlcyAmICgoQVRBX0FUQV9NQVNURVIgPDwgaSkpKQor
CQl1bml0ID0gKGRldmljZV9nZXRfdW5pdChkZXYpIDw8IDEpICsgaTsKICNlbmRpZgotICAgIGlm
IChzbGF2ZSAmJiAhKHNsYXZlX2NoaWxkID0gYXRhX2FkZF9jaGlsZChkZXYsIHNsYXZlLCBzbGF2
ZV91bml0KSkpIHsKLQlmcmVlKHNsYXZlLCBNX0FUQSk7Ci0Jc2xhdmUgPSBOVUxMOwotICAgIH0K
LQotICAgIGlmIChzbGF2ZSAmJiBhdGFfZ2V0cGFyYW0oc2xhdmUsIDEpKSB7Ci0JZGV2aWNlX2Rl
bGV0ZV9jaGlsZChkZXYsIHNsYXZlX2NoaWxkKTsKLQlmcmVlKHNsYXZlLCBNX0FUQSk7Ci0gICAg
fQotICAgIGlmIChtYXN0ZXIgJiYgYXRhX2dldHBhcmFtKG1hc3RlciwgMSkpIHsKLQlkZXZpY2Vf
ZGVsZXRlX2NoaWxkKGRldiwgbWFzdGVyX2NoaWxkKTsKLQlmcmVlKG1hc3RlciwgTV9BVEEpOwor
CSAgICBpZiAoIShjaGlsZGRldnNbaV0gPSBhdGFfYWRkX2NoaWxkKGRldiwgZGV2aWNlc1tpXSwg
dW5pdCkpKSB7CisJCWZyZWUoZGV2aWNlc1tpXSwgTV9BVEEpOworCQlkZXZpY2VzW2ldPU5VTEw7
CisJICAgIH0KKwkgICAgZWxzZSB7CisJCWlmIChhdGFfZ2V0cGFyYW0oZGV2aWNlc1tpXSwgMSkp
IHsKKwkJICAgIGRldmljZV9kZWxldGVfY2hpbGQoZGV2LCBjaGlsZGRldnNbaV0pOworCQkgICAg
ZnJlZShkZXZpY2VzW2ldLCBNX0FUQSk7CisJCSAgICBjaGlsZGRldnNbaV0gPSBOVUxMOworCQkg
ICAgZGV2aWNlc1tpXSA9IE5VTEw7CisJCX0KKwkgICAgfQorCX0KKwlkZXZpY2VzW2ldID0gTlVM
TDsKKwljaGlsZGRldnNbaV0gPSBOVUxMOwogICAgIH0KIAogICAgIGJ1c19nZW5lcmljX3Byb2Jl
KGRldik7CkBAIC04MTUsOCArODEwLDIzIEBAIGF0YV9tb2RpZnlfaWZfNDhiaXQoc3RydWN0IGF0
YV9yZXF1ZXN0ICoKIAljYXNlIEFUQV9GTFVTSENBQ0hFOgogCSAgICByZXF1ZXN0LT51LmF0YS5j
b21tYW5kID0gQVRBX0ZMVVNIQ0FDSEU0ODsKIAkgICAgYnJlYWs7Ci0JY2FzZSBBVEFfUkVBRF9O
QVRJVkVfTUFYX0FERERSRVNTOgotCSAgICByZXF1ZXN0LT51LmF0YS5jb21tYW5kID0gQVRBX1JF
QURfTkFUSVZFX01BWF9BREREUkVTUzQ4OworCWNhc2UgQVRBX1NFVF9NQVhfQUREUkVTUzoKKwkg
ICAgcmVxdWVzdC0+dS5hdGEuY29tbWFuZCA9IEFUQV9TRVRfTUFYX0FERFJFU1M0ODsKKwkgICAg
YnJlYWs7CisJZGVmYXVsdDoKKwkgICAgcmV0dXJuOworCX0KKwlhdGFkZXYtPmZsYWdzIHw9IEFU
QV9EXzQ4QklUX0FDVElWRTsKKyAgICB9CisgICAgZWxzZSBpZiAoYXRhZGV2LT5wYXJhbS5zdXBw
b3J0LmNvbW1hbmQyICYgQVRBX1NVUFBPUlRfQUREUkVTUzQ4KSB7CisKKwkvKiB0cmFuc2xhdGUg
Y29tbWFuZCBpbnRvIDQ4Yml0IHZlcnNpb24gKi8KKwlzd2l0Y2ggKHJlcXVlc3QtPnUuYXRhLmNv
bW1hbmQpIHsKKwljYXNlIEFUQV9GTFVTSENBQ0hFOgorCSAgICByZXF1ZXN0LT51LmF0YS5jb21t
YW5kID0gQVRBX0ZMVVNIQ0FDSEU0ODsKKwkgICAgYnJlYWs7CisJY2FzZSBBVEFfUkVBRF9OQVRJ
VkVfTUFYX0FERFJFU1M6CisJICAgIHJlcXVlc3QtPnUuYXRhLmNvbW1hbmQgPSBBVEFfUkVBRF9O
QVRJVkVfTUFYX0FERFJFU1M0ODsKIAkgICAgYnJlYWs7CiAJY2FzZSBBVEFfU0VUX01BWF9BRERS
RVNTOgogCSAgICByZXF1ZXN0LT51LmF0YS5jb21tYW5kID0gQVRBX1NFVF9NQVhfQUREUkVTUzQ4
OwpAQCAtODM5LDYgKzg0OSwxOSBAQCBhdGFfdWRlbGF5KGludCBpbnRlcnZhbCkKIH0KIAogY2hh
ciAqCithdGFfdW5pdDJzdHIoc3RydWN0IGF0YV9kZXZpY2UgKmF0YWRldikKK3sKKyAgICBzdHJ1
Y3QgYXRhX2NoYW5uZWwgKmNoID0gZGV2aWNlX2dldF9zb2Z0YyhkZXZpY2VfZ2V0X3BhcmVudChh
dGFkZXYtPmRldikpOworICAgIHN0YXRpYyBjaGFyIHN0cls4XTsKKworICAgIGlmIChjaC0+ZGV2
aWNlcyAmIEFUQV9QT1JUTVVMVElQTElFUikKKwlzcHJpbnRmKHN0ciwgInBvcnQlZCIsIGF0YWRl
di0+dW5pdCk7CisgICAgZWxzZQorCXNwcmludGYoc3RyLCAiJXMiLCBhdGFkZXYtPnVuaXQgPT0g
QVRBX01BU1RFUiA/ICJtYXN0ZXIiIDogInNsYXZlIik7CisgICAgcmV0dXJuIHN0cjsKK30KKwor
Y2hhciAqCiBhdGFfbW9kZTJzdHIoaW50IG1vZGUpCiB7CiAgICAgc3dpdGNoIChtb2RlKSB7Ci0t
LSBzcmMvc3lzL2Rldi9hdGEvYXRhLWFsbC5oCTIwMDgtMDgtMjIgMTI6MDk6MTMuMDAwMDAwMDAw
ICswNDAwCisrKyBzcmMvc3lzL2Rldi9hdGEvYXRhLWFsbC5oCTIwMDgtMDgtMTUgMTQ6NTU6MTEu
MDAwMDAwMDAwICswNDAwCkBAIC0xLDUgKzEsNSBAQAogLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5
OTggLSAyMDA3IFP4cmVuIFNjaG1pZHQgPHNvc0BGcmVlQlNELm9yZz4KKyAqIENvcHlyaWdodCAo
YykgMTk5OCAtIDIwMDggU/hyZW4gU2NobWlkdCA8c29zQEZyZWVCU0Qub3JnPgogICogQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTE0OSw2ICsxNDksNyBAQAogLyog
U0FUQSBBSENJIHYxLjAgcmVnaXN0ZXIgZGVmaW5lcyAqLwogI2RlZmluZSBBVEFfQUhDSV9DQVAg
ICAgICAgICAgICAgICAgICAgIDB4MDAKICNkZWZpbmUgICAgICAgICBBVEFfQUhDSV9OUE1BU0sg
ICAgICAgICAweDFmCisjZGVmaW5lCQlBVEFfQUhDSV9DQVBfU1BNCTB4MDAwMjAwMDAKICNkZWZp
bmUJCUFUQV9BSENJX0NBUF9DTE8JMHgwMTAwMDAwMAogI2RlZmluZQkJQVRBX0FIQ0lfQ0FQXzY0
QklUCTB4ODAwMDAwMDAKIApAQCAtMjIwLDEzICsyMjEsMTQgQEAKICNkZWZpbmUgQVRBX0FIQ0lf
UF9TRVJSICAgICAgICAgICAgICAgICAweDEzMAogI2RlZmluZSBBVEFfQUhDSV9QX1NBQ1QgICAg
ICAgICAgICAgICAgIDB4MTM0CiAjZGVmaW5lIEFUQV9BSENJX1BfQ0kgICAgICAgICAgICAgICAg
ICAgMHgxMzgKKyNkZWZpbmUgQVRBX0FIQ0lfUF9TTlRGICAgICAgICAgICAgICAgICAweDEzQwor
I2RlZmluZSBBVEFfQUhDSV9QX0ZCUyAgICAgICAgICAgICAgICAgIDB4MTQwCiAKICNkZWZpbmUg
QVRBX0FIQ0lfQ0xfU0laRSAgICAgICAgICAgICAgICAzMgogI2RlZmluZSBBVEFfQUhDSV9DTF9P
RkZTRVQgICAgICAgICAgICAgIDAKLSNkZWZpbmUgQVRBX0FIQ0lfRkJfT0ZGU0VUICAgICAgICAg
ICAgICAxMDI0Ci0jZGVmaW5lIEFUQV9BSENJX0NUX09GRlNFVCAgICAgICAgICAgICAgMTAyNCsy
NTYKLSNkZWZpbmUgQVRBX0FIQ0lfQ1RfU0dfT0ZGU0VUICAgICAgICAgICAxMjgKLSNkZWZpbmUg
QVRBX0FIQ0lfQ1RfU0laRSAgICAgICAgICAgICAgICAyNTYKKyNkZWZpbmUgQVRBX0FIQ0lfRkJf
T0ZGU0VUICAgICAgICAgICAgICAoQVRBX0FIQ0lfQ0xfU0laRSAqIDMyKQorI2RlZmluZSBBVEFf
QUhDSV9DVF9PRkZTRVQgICAgICAgICAgICAgIChBVEFfQUhDSV9GQl9PRkZTRVQgKyA0MDk2KQor
I2RlZmluZSBBVEFfQUhDSV9DVF9TSVpFICAgICAgICAgICAgICAgICgxMDI0ICsgMTI4KQogCiBz
dHJ1Y3QgYXRhX2FoY2lfZG1hX3ByZCB7CiAgICAgdV9pbnQ2NF90ICAgICAgICAgICAgICAgICAg
IGRiYTsKQEAgLTI0MCwxMSArMjQyLDE5IEBAIHN0cnVjdCBhdGFfYWhjaV9jbWRfdGFiIHsKICAg
ICB1X2ludDhfdCAgICAgICAgICAgICAgICAgICAgY2Zpc1s2NF07CiAgICAgdV9pbnQ4X3QgICAg
ICAgICAgICAgICAgICAgIGFjbWRbMzJdOwogICAgIHVfaW50OF90ICAgICAgICAgICAgICAgICAg
ICByZXNlcnZlZFszMl07Ci0gICAgc3RydWN0IGF0YV9haGNpX2RtYV9wcmQgICAgIHByZF90YWJb
MTZdOworI2RlZmluZSBBVEFfQUhDSV9ETUFfRU5UUklFUyAgICAgICAgICAgIDY0CisgICAgc3Ry
dWN0IGF0YV9haGNpX2RtYV9wcmQgICAgIHByZF90YWJbQVRBX0FIQ0lfRE1BX0VOVFJJRVNdOwog
fSBfX3BhY2tlZDsKIAogc3RydWN0IGF0YV9haGNpX2NtZF9saXN0IHsKICAgICB1X2ludDE2X3Qg
ICAgICAgICAgICAgICAgICAgY21kX2ZsYWdzOworI2RlZmluZSBBVEFfQUhDSV9DTURfQVRBUEkJ
CTB4MDAyMAorI2RlZmluZSBBVEFfQUhDSV9DTURfV1JJVEUJCTB4MDA0MAorI2RlZmluZSBBVEFf
QUhDSV9DTURfUFJFRkVUQ0gJCTB4MDA4MAorI2RlZmluZSBBVEFfQUhDSV9DTURfUkVTRVQJCTB4
MDEwMAorI2RlZmluZSBBVEFfQUhDSV9DTURfQklTVAkJMHgwMjAwCisjZGVmaW5lIEFUQV9BSENJ
X0NNRF9DTFJfQlVTWQkJMHgwNDAwCisKICAgICB1X2ludDE2X3QgICAgICAgICAgICAgICAgICAg
cHJkX2xlbmd0aDsgICAgIC8qIFBSRCBlbnRyaWVzICovCiAgICAgdV9pbnQzMl90ICAgICAgICAg
ICAgICAgICAgIGJ5dGVjb3VudDsKICAgICB1X2ludDY0X3QgICAgICAgICAgICAgICAgICAgY21k
X3RhYmxlX3BoeXM7IC8qIDEyOGJ5dGUgYWxpZ25lZCAqLwpAQCAtMjkxLDcgKzMwMSw3IEBAIHN0
cnVjdCBhdGFfYWhjaV9jbWRfbGlzdCB7CiAjZGVmaW5lIEFUQV9QQzk4X0NUTEFERFJfUklEICAg
ICAgICAgICAgOAogI2RlZmluZSBBVEFfUEM5OF9CQU5LQUREUl9SSUQgICAgICAgICAgIDkKICNk
ZWZpbmUgQVRBX0lSUV9SSUQgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIEFUQV9ERVYo
ZGV2aWNlKSAgICAgICAgICAgICAgICAgKChkZXZpY2UgPT0gQVRBX01BU1RFUikgPyAwIDogMSkK
KyNkZWZpbmUgQVRBX0RFVih1bml0KSAgICAgICAgICAgICAgICAgICAoKHVuaXQgPiAwKSA/IDB4
MTAgOiAwKQogI2RlZmluZSBBVEFfQ0ZBX01BR0lDMSAgICAgICAgICAgICAgICAgIDB4ODQ0QQog
I2RlZmluZSBBVEFfQ0ZBX01BR0lDMiAgICAgICAgICAgICAgICAgIDB4ODQ4QQogI2RlZmluZSBB
VEFfQ0ZBX01BR0lDMyAgICAgICAgICAgICAgICAgIDB4ODQwMApAQCAtMzQzLDYgKzM1Myw3IEBA
IHN0cnVjdCBhdGFfcmVxdWVzdCB7CiAgICAgdV9pbnQzMl90ICAgICAgICAgICAgICAgICAgIGJ5
dGVjb3VudDsgICAgICAvKiBieXRlcyB0byB0cmFuc2ZlciAqLwogICAgIHVfaW50MzJfdCAgICAg
ICAgICAgICAgICAgICB0cmFuc2ZlcnNpemU7ICAgLyogYnl0ZXMgcHIgdHJhbnNmZXIgKi8KICAg
ICBjYWRkcl90ICAgICAgICAgICAgICAgICAgICAgZGF0YTsgICAgICAgICAgIC8qIHBvaW50ZXIg
dG8gZGF0YSBidWYgKi8KKyAgICB1X2ludDMyX3QgICAgICAgICAgICAgICAgICAgdGFnOyAgICAg
ICAgICAgIC8qIEhXIHRhZyBvZiB0aGlzIHJlcXVlc3QgKi8KICAgICBpbnQgICAgICAgICAgICAg
ICAgICAgICAgICAgZmxhZ3M7CiAjZGVmaW5lICAgICAgICAgQVRBX1JfQ09OVFJPTCAgICAgICAg
ICAgMHgwMDAwMDAwMQogI2RlZmluZSAgICAgICAgIEFUQV9SX1JFQUQgICAgICAgICAgICAgIDB4
MDAwMDAwMDIKQEAgLTM2Miw5ICszNzMsOSBAQCBzdHJ1Y3QgYXRhX3JlcXVlc3QgewogI2RlZmlu
ZSAgICAgICAgIEFUQV9SX0RBTkdFUjEgICAgICAgICAgIDB4MjAwMDAwMDAKICNkZWZpbmUgICAg
ICAgICBBVEFfUl9EQU5HRVIyICAgICAgICAgICAweDQwMDAwMDAwCiAKKyAgICBzdHJ1Y3QgYXRh
X2RtYXNsb3QgICAgICAgICAgKmRtYTsgICAgICAgICAgIC8qIERNQSBzbG90IG9mIHRoaXMgcmVx
dWVzdCAqLwogICAgIHVfaW50OF90ICAgICAgICAgICAgICAgICAgICBzdGF0dXM7ICAgICAgICAg
LyogQVRBIHN0YXR1cyAqLwogICAgIHVfaW50OF90ICAgICAgICAgICAgICAgICAgICBlcnJvcjsg
ICAgICAgICAgLyogQVRBIGVycm9yICovCi0gICAgdV9pbnQ4X3QgICAgICAgICAgICAgICAgICAg
IGRtYXN0YXQ7ICAgICAgICAvKiBETUEgc3RhdHVzICovCiAgICAgdV9pbnQzMl90ICAgICAgICAg
ICAgICAgICAgIGRvbmVjb3VudDsgICAgICAvKiBieXRlcyB0cmFuc2ZlcnJlZCAqLwogICAgIGlu
dCAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQ7ICAgICAgICAgLyogcmVzdWx0IGVycm9y
IGNvZGUgKi8KICAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgKCpjYWxsYmFjaykoc3Ry
dWN0IGF0YV9yZXF1ZXN0ICpyZXF1ZXN0KTsKQEAgLTM5OCw3ICs0MDksOCBAQCBzdHJ1Y3QgYXRh
X2RldmljZSB7CiAgICAgZGV2aWNlX3QgICAgICAgICAgICAgICAgICAgIGRldjsgICAgICAgICAg
ICAvKiBkZXZpY2UgaGFuZGxlICovCiAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgIHVu
aXQ7ICAgICAgICAgICAvKiBwaHlzaWNhbCB1bml0ICovCiAjZGVmaW5lICAgICAgICAgQVRBX01B
U1RFUiAgICAgICAgICAgICAgMHgwMAotI2RlZmluZSAgICAgICAgIEFUQV9TTEFWRSAgICAgICAg
ICAgICAgIDB4MTAKKyNkZWZpbmUgICAgICAgICBBVEFfU0xBVkUgICAgICAgICAgICAgICAweDAx
CisjZGVmaW5lICAgICAgICAgQVRBX1BNICAgICAgICAgICAgICAgICAgMHgwZgogCiAgICAgc3Ry
dWN0IGF0YV9wYXJhbXMgICAgICAgICAgIHBhcmFtOyAgICAgICAgICAvKiBhdGEgcGFyYW0gc3Ry
dWN0dXJlICovCiAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGU7ICAgICAgICAg
ICAvKiBjdXJyZW50IHRyYW5zZmVybW9kZSAqLwpAQCAtNDI2LDQzICs0MzgsNTAgQEAgc3RydWN0
IGF0YV9kbWFzZXRwcmRfYXJncyB7CiAgICAgaW50IGVycm9yOwogfTsKIAotLyogc3RydWN0dXJl
IGhvbGRpbmcgRE1BIHJlbGF0ZWQgaW5mb3JtYXRpb24gKi8KLXN0cnVjdCBhdGFfZG1hIHsKLSAg
ICBidXNfZG1hX3RhZ190ICAgICAgICAgICAgICAgZG1hdGFnOyAgICAgICAgIC8qIHBhcmVudCBE
TUEgdGFnICovCitzdHJ1Y3QgYXRhX2RtYXNsb3QgeworICAgIHVfaW50OF90ICAgICAgICAgICAg
ICAgICAgICBzdGF0dXM7ICAgICAgICAgLyogRE1BIHN0YXR1cyAqLwogICAgIGJ1c19kbWFfdGFn
X3QgICAgICAgICAgICAgICBzZ190YWc7ICAgICAgICAgLyogU0cgbGlzdCBETUEgdGFnICovCiAg
ICAgYnVzX2RtYW1hcF90ICAgICAgICAgICAgICAgIHNnX21hcDsgICAgICAgICAvKiBTRyBsaXN0
IERNQSBtYXAgKi8KICAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgKnNnOyAgICAgICAg
ICAgIC8qIERNQSB0cmFuc2ZlciB0YWJsZSAqLwogICAgIGJ1c19hZGRyX3QgICAgICAgICAgICAg
ICAgICBzZ19idXM7ICAgICAgICAgLyogYnVzIGFkZHJlc3Mgb2YgZG1hdGFiICovCiAgICAgYnVz
X2RtYV90YWdfdCAgICAgICAgICAgICAgIGRhdGFfdGFnOyAgICAgICAvKiBkYXRhIERNQSB0YWcg
Ki8KICAgICBidXNfZG1hbWFwX3QgICAgICAgICAgICAgICAgZGF0YV9tYXA7ICAgICAgIC8qIGRh
dGEgRE1BIG1hcCAqLworfTsKKworLyogc3RydWN0dXJlIGhvbGRpbmcgRE1BIHJlbGF0ZWQgaW5m
b3JtYXRpb24gKi8KK3N0cnVjdCBhdGFfZG1hIHsKKyAgICBidXNfZG1hX3RhZ190ICAgICAgICAg
ICAgICAgZG1hdGFnOyAgICAgICAgIC8qIHBhcmVudCBETUEgdGFnICovCiAgICAgYnVzX2RtYV90
YWdfdCAgICAgICAgICAgICAgIHdvcmtfdGFnOyAgICAgICAvKiB3b3Jrc3BhY2UgRE1BIHRhZyAq
LwogICAgIGJ1c19kbWFtYXBfdCAgICAgICAgICAgICAgICB3b3JrX21hcDsgICAgICAgLyogd29y
a3NwYWNlIERNQSBtYXAgKi8KICAgICB1X2ludDhfdCAgICAgICAgICAgICAgICAgICAgKndvcms7
ICAgICAgICAgIC8qIHdvcmtzcGFjZSAqLwogICAgIGJ1c19hZGRyX3QgICAgICAgICAgICAgICAg
ICB3b3JrX2J1czsgICAgICAgLyogYnVzIGFkZHJlc3Mgb2YgZG1hdGFiICovCiAKKyNkZWZpbmUg
QVRBX0RNQV9TTE9UUwkJCTMyCisgICAgaW50CQkJCWRtYV9zbG90czsJLyogRE1BIHNsb3RzIGFs
bG9jYXRlZCAqLworICAgIHN0cnVjdCBhdGFfZG1hc2xvdAkJc2xvdFtBVEFfRE1BX1NMT1RTXTsK
ICAgICB1X2ludDMyX3QgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50OyAgICAgIC8qIERNQSBT
RyBsaXN0IGFsaWdubWVudCAqLwogICAgIHVfaW50MzJfdCAgICAgICAgICAgICAgICAgICBib3Vu
ZGFyeTsgICAgICAgLyogRE1BIFNHIGxpc3QgYm91bmRhcnkgKi8KICAgICB1X2ludDMyX3QgICAg
ICAgICAgICAgICAgICAgc2Vnc2l6ZTsgICAgICAgIC8qIERNQSBTRyBsaXN0IHNlZ21lbnQgc2l6
ZSAqLwogICAgIHVfaW50MzJfdCAgICAgICAgICAgICAgICAgICBtYXhfaW9zaXplOyAgICAgLyog
RE1BIGRhdGEgbWF4IElPIHNpemUgKi8KLSAgICB1X2ludDMyX3QgICAgICAgICAgICAgICAgICAg
Y3VyX2lvc2l6ZTsgICAgIC8qIERNQSBkYXRhIGN1cnJlbnQgSU8gc2l6ZSAqLwogICAgIHVfaW50
NjRfdCAgICAgICAgICAgICAgICAgICBtYXhfYWRkcmVzczsgICAgLyogaGlnaGVzdCBETUEnYWJs
ZSBhZGRyZXNzICovCiAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzOwotI2Rl
ZmluZSBBVEFfRE1BX1JFQUQgICAgICAgICAgICAgICAgICAgIDB4MDEgICAgLyogdHJhbnNhY3Rp
b24gaXMgYSByZWFkICovCi0jZGVmaW5lIEFUQV9ETUFfTE9BREVEICAgICAgICAgICAgICAgICAg
MHgwMiAgICAvKiBETUEgdGFibGVzIGV0YyBsb2FkZWQgKi8KLSNkZWZpbmUgQVRBX0RNQV9BQ1RJ
VkUgICAgICAgICAgICAgICAgICAweDA0ICAgIC8qIERNQSB0cmFuc2ZlciBpbiBwcm9ncmVzcyAq
LworI2RlZmluZSBBVEFfRE1BX0FDVElWRSAgICAgICAgICAgICAgICAgIDB4MDEgICAgLyogRE1B
IHRyYW5zZmVyIGluIHByb2dyZXNzICovCiAKICAgICB2b2lkICgqYWxsb2MpKGRldmljZV90IGRl
dik7CiAgICAgdm9pZCAoKmZyZWUpKGRldmljZV90IGRldik7CiAgICAgdm9pZCAoKnNldHByZCko
dm9pZCAqeHNjLCBidXNfZG1hX3NlZ21lbnRfdCAqc2VncywgaW50IG5zZWdzLCBpbnQgZXJyb3Ip
OwotICAgIGludCAoKmxvYWQpKGRldmljZV90IGRldiwgY2FkZHJfdCBkYXRhLCBpbnQzMl90IGNv
dW50LCBpbnQgZGlyLCB2b2lkICphZGRyLCBpbnQgKm5zZWdzKTsKLSAgICBpbnQgKCp1bmxvYWQp
KGRldmljZV90IGRldik7Ci0gICAgaW50ICgqc3RhcnQpKGRldmljZV90IGRldik7Ci0gICAgaW50
ICgqc3RvcCkoZGV2aWNlX3QgZGV2KTsKKyAgICBpbnQgKCpsb2FkKShzdHJ1Y3QgYXRhX3JlcXVl
c3QgKnJlcXVlc3QsIHZvaWQgKmFkZHIsIGludCAqbnNlZ3MpOworICAgIGludCAoKnVubG9hZCko
c3RydWN0IGF0YV9yZXF1ZXN0ICpyZXF1ZXN0KTsKKyAgICBpbnQgKCpzdGFydCkoc3RydWN0IGF0
YV9yZXF1ZXN0ICpyZXF1ZXN0KTsKKyAgICBpbnQgKCpzdG9wKShzdHJ1Y3QgYXRhX3JlcXVlc3Qg
KnJlcXVlc3QpOwogICAgIHZvaWQgKCpyZXNldCkoZGV2aWNlX3QgZGV2KTsKIH07CiAKIC8qIHN0
cnVjdHVyZSBob2xkaW5nIGxvd2xldmVsIGZ1bmN0aW9ucyAqLwogc3RydWN0IGF0YV9sb3dsZXZl
bCB7CisgICAgdV9pbnQzMl90ICgqc29mdHJlc2V0KShkZXZpY2VfdCBkZXYsIGludCBwbXBvcnQp
OworICAgIGludCAoKnBtX3JlYWQpKGRldmljZV90IGRldiwgaW50IHBvcnQsIGludCByZWcsIHVf
aW50MzJfdCAqcmVzdWx0KTsKKyAgICBpbnQgKCpwbV93cml0ZSkoZGV2aWNlX3QgZGV2LCBpbnQg
cG9ydCwgaW50IHJlZywgdV9pbnQzMl90IHZhbHVlKTsKICAgICBpbnQgKCpzdGF0dXMpKGRldmlj
ZV90IGRldik7CiAgICAgaW50ICgqYmVnaW5fdHJhbnNhY3Rpb24pKHN0cnVjdCBhdGFfcmVxdWVz
dCAqcmVxdWVzdCk7CiAgICAgaW50ICgqZW5kX3RyYW5zYWN0aW9uKShzdHJ1Y3QgYXRhX3JlcXVl
c3QgKnJlcXVlc3QpOwpAQCAtNDg1LDcgKzUwNCw3IEBAIHN0cnVjdCBhdGFfY2hhbm5lbCB7CiAg
ICAgc3RydWN0IHJlc291cmNlICAgICAgICAgICAgICpyX2lycTsgICAgICAgICAvKiBpbnRlcnJ1
cHQgb2YgdGhpcyBjaGFubmVsICovCiAgICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICpp
aDsgICAgICAgICAgICAvKiBpbnRlcnJ1cHQgaGFuZGxlICovCiAgICAgc3RydWN0IGF0YV9sb3ds
ZXZlbCAgICAgICAgIGh3OyAgICAgICAgICAgICAvKiBsb3dsZXZlbCBIVyBmdW5jdGlvbnMgKi8K
LSAgICBzdHJ1Y3QgYXRhX2RtYSAgICAgICAgICAgICAgKmRtYTsgICAgICAgICAgIC8qIERNQSBk
YXRhIC8gZnVuY3Rpb25zICovCisgICAgc3RydWN0IGF0YV9kbWEgICAgICAgICAgICAgIGRtYTsg
ICAgICAgICAgICAvKiBETUEgZGF0YSAvIGZ1bmN0aW9ucyAqLwogICAgIGludCAgICAgICAgICAg
ICAgICAgICAgICAgICBmbGFnczsgICAgICAgICAgLyogY2hhbm5lbCBmbGFncyAqLwogI2RlZmlu
ZSAgICAgICAgIEFUQV9OT19TTEFWRSAgICAgICAgICAgIDB4MDEKICNkZWZpbmUgICAgICAgICBB
VEFfVVNFXzE2QklUICAgICAgICAgICAweDAyCkBAIC00OTQsMTEgKzUxMywxMSBAQCBzdHJ1Y3Qg
YXRhX2NoYW5uZWwgewogI2RlZmluZSAgICAgICAgIEFUQV9BTFdBWVNfRE1BU1RBVCAgICAgIDB4
MTAKIAogICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2VzOyAgICAgICAgLyog
d2hhdCBpcyBwcmVzZW50ICovCi0jZGVmaW5lICAgICAgICAgQVRBX0FUQV9NQVNURVIgICAgICAg
ICAgMHgwMQotI2RlZmluZSAgICAgICAgIEFUQV9BVEFfU0xBVkUgICAgICAgICAgIDB4MDIKLSNk
ZWZpbmUgICAgICAgICBBVEFfQVRBUElfTUFTVEVSICAgICAgICAweDA0Ci0jZGVmaW5lICAgICAg
ICAgQVRBX0FUQVBJX1NMQVZFICAgICAgICAgMHgwOAotI2RlZmluZSAgICAgICAgIEFUQV9QT1JU
TVVMVElQTElFUiAgICAgIDB4MTAKKyNkZWZpbmUgICAgICAgICBBVEFfQVRBX01BU1RFUiAgICAg
ICAgICAweDAwMDAwMDAxCisjZGVmaW5lICAgICAgICAgQVRBX0FUQV9TTEFWRSAgICAgICAgICAg
MHgwMDAwMDAwMgorI2RlZmluZSAgICAgICAgIEFUQV9QT1JUTVVMVElQTElFUiAgICAgIDB4MDAw
MDgwMDAKKyNkZWZpbmUgICAgICAgICBBVEFfQVRBUElfTUFTVEVSICAgICAgICAweDAwMDEwMDAw
CisjZGVmaW5lICAgICAgICAgQVRBX0FUQVBJX1NMQVZFICAgICAgICAgMHgwMDAyMDAwMAogCiAg
ICAgc3RydWN0IG10eCAgICAgICAgICAgICAgICAgIHN0YXRlX210eDsgICAgICAvKiBzdGF0ZSBs
b2NrICovCiAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlOyAgICAgICAgICAv
KiBBVEEgY2hhbm5lbCBzdGF0ZSAqLwpAQCAtNTI0LDYgKzU0Myw3IEBAIGV4dGVybiBpbnQgKCph
dGFfcmFpZF9pb2N0bF9mdW5jKSh1X2xvbmcKIGV4dGVybiBzdHJ1Y3QgaW50cl9jb25maWdfaG9v
ayAqYXRhX2RlbGF5ZWRfYXR0YWNoOwogZXh0ZXJuIGRldmNsYXNzX3QgYXRhX2RldmNsYXNzOwog
ZXh0ZXJuIGludCBhdGFfd2M7CitleHRlcm4gaW50IGF0YV9zZXRtYXg7CiBleHRlcm4gaW50IGF0
YV9kbWFfY2hlY2tfODBwaW47CiAKIC8qIHB1YmxpYyBwcm90b3R5cGVzICovCkBAIC01MzYsMTAg
KzU1NiwxMiBAQCBpbnQgYXRhX3N1c3BlbmQoZGV2aWNlX3QgZGV2KTsKIGludCBhdGFfcmVzdW1l
KGRldmljZV90IGRldik7CiBpbnQgYXRhX2ludGVycnVwdCh2b2lkICpkYXRhKTsKIGludCBhdGFf
ZGV2aWNlX2lvY3RsKGRldmljZV90IGRldiwgdV9sb25nIGNtZCwgY2FkZHJfdCBkYXRhKTsKK2lu
dCBhdGFfZ2V0cGFyYW0oc3RydWN0IGF0YV9kZXZpY2UgKmF0YWRldiwgaW50IGluaXQpOwogaW50
IGF0YV9pZGVudGlmeShkZXZpY2VfdCBkZXYpOwogdm9pZCBhdGFfZGVmYXVsdF9yZWdpc3RlcnMo
ZGV2aWNlX3QgZGV2KTsKIHZvaWQgYXRhX21vZGlmeV9pZl80OGJpdChzdHJ1Y3QgYXRhX3JlcXVl
c3QgKnJlcXVlc3QpOwogdm9pZCBhdGFfdWRlbGF5KGludCBpbnRlcnZhbCk7CitjaGFyICphdGFf
dW5pdDJzdHIoc3RydWN0IGF0YV9kZXZpY2UgKmF0YWRldik7CiBjaGFyICphdGFfbW9kZTJzdHIo
aW50IG1vZGUpOwogaW50IGF0YV9wbW9kZShzdHJ1Y3QgYXRhX3BhcmFtcyAqYXApOwogaW50IGF0
YV93bW9kZShzdHJ1Y3QgYXRhX3BhcmFtcyAqYXApOwpAQCAtNTcxLDYgKzU5Myw3IEBAIGV4dGVy
biB1bWFfem9uZV90IGF0YV9yZXF1ZXN0X3pvbmU7CiAJaWYgKCEocmVxdWVzdC0+ZmxhZ3MgJiBB
VEFfUl9EQU5HRVIyKSkgXAogCSAgICB1bWFfemZyZWUoYXRhX3JlcXVlc3Rfem9uZSwgcmVxdWVz
dCk7IFwKIAl9CisKIC8qIG1hY3JvcyBmb3IgYWxsb2MvZnJlZSBvZiBzdHJ1Y3QgYXRhX2NvbXBv
c2l0ZSAqLwogZXh0ZXJuIHVtYV96b25lX3QgYXRhX2NvbXBvc2l0ZV96b25lOwogI2RlZmluZSBh
dGFfYWxsb2NfY29tcG9zaXRlKCkgdW1hX3phbGxvYyhhdGFfY29tcG9zaXRlX3pvbmUsIE1fTk9X
QUlUIHwgTV9aRVJPKQotLS0gc3JjL3N5cy9kZXYvYXRhL2F0YS1jYXJkLmMJMjAwNy0wMi0yMSAy
MjowNzoxOC4wMDAwMDAwMDAgKzAzMDAKKysrIHNyYy9zeXMvZGV2L2F0YS9hdGEtY2FyZC5jCTIw
MDgtMDQtMTAgMTc6MDU6MDQuMDAwMDAwMDAwICswNDAwCkBAIC0xLDUgKzEsNSBAQAogLyotCi0g
KiBDb3B5cmlnaHQgKGMpIDE5OTggLSAyMDA3IFP4cmVuIFNjaG1pZHQgPHNvc0BGcmVlQlNELm9y
Zz4KKyAqIENvcHlyaWdodCAoYykgMTk5OCAtIDIwMDggU/hyZW4gU2NobWlkdCA8c29zQEZyZWVC
U0Qub3JnPgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS0tIHNy
Yy9zeXMvZGV2L2F0YS9hdGEtY2J1cy5jCTIwMDctMDItMjMgMTU6MTg6MzIuMDAwMDAwMDAwICsw
MzAwCisrKyBzcmMvc3lzL2Rldi9hdGEvYXRhLWNidXMuYwkyMDA4LTA0LTEwIDE3OjA1OjA1LjAw
MDAwMDAwMCArMDQwMApAQCAtMSw1ICsxLDUgQEAKIC8qLQotICogQ29weXJpZ2h0IChjKSAyMDAy
IC0gMjAwNyBT+HJlbiBTY2htaWR0IDxzb3NARnJlZUJTRC5vcmc+CisgKiBDb3B5cmlnaHQgKGMp
IDIwMDIgLSAyMDA4IFP4cmVuIFNjaG1pZHQgPHNvc0BGcmVlQlNELm9yZz4KICAqIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0tLSBzcmMvc3lzL2Rldi9hdGEvYXRhLWNo
aXBzZXQuYwkyMDA4LTA5LTEzIDExOjM2OjE2LjAwMDAwMDAwMCArMDQwMAorKysgc3JjL3N5cy9k
ZXYvYXRhL2F0YS1jaGlwc2V0LmMJMjAwOC0wOS0yNiAxMToyOTo0OC4wMDAwMDAwMDAgKzA0MDAK
QEAgLTEsNSArMSw1IEBACiAvKi0KLSAqIENvcHlyaWdodCAoYykgMTk5OCAtIDIwMDcgU/hyZW4g
U2NobWlkdCA8c29zQEZyZWVCU0Qub3JnPgorICogQ29weXJpZ2h0IChjKSAxOTk4IC0gMjAwOCBT
+HJlbiBTY2htaWR0IDxzb3NARnJlZUJTRC5vcmc+CiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dApAQCAtNjIsMTAgKzYyLDE1IEBAIHN0YXRpYyBpbnQgYXRhX3NhdGFf
Y29ubmVjdChzdHJ1Y3QgYXRhX2MKIHN0YXRpYyB2b2lkIGF0YV9zYXRhX3NldG1vZGUoZGV2aWNl
X3QgZGV2LCBpbnQgbW9kZSk7CiBzdGF0aWMgaW50IGF0YV9yZXF1ZXN0MmZpc19oMmQoc3RydWN0
IGF0YV9yZXF1ZXN0ICpyZXF1ZXN0LCB1X2ludDhfdCAqZmlzKTsKIHN0YXRpYyBpbnQgYXRhX2Fo
Y2lfY2hpcGluaXQoZGV2aWNlX3QgZGV2KTsKK3N0YXRpYyBpbnQgYXRhX2FoY2lfY3Rscl9yZXNl
dChkZXZpY2VfdCBkZXYpOworc3RhdGljIGludCBhdGFfYWhjaV9zdXNwZW5kKGRldmljZV90IGRl
dik7CiBzdGF0aWMgaW50IGF0YV9haGNpX2FsbG9jYXRlKGRldmljZV90IGRldik7CiBzdGF0aWMg
aW50IGF0YV9haGNpX3N0YXR1cyhkZXZpY2VfdCBkZXYpOwogc3RhdGljIGludCBhdGFfYWhjaV9i
ZWdpbl90cmFuc2FjdGlvbihzdHJ1Y3QgYXRhX3JlcXVlc3QgKnJlcXVlc3QpOwogc3RhdGljIGlu
dCBhdGFfYWhjaV9lbmRfdHJhbnNhY3Rpb24oc3RydWN0IGF0YV9yZXF1ZXN0ICpyZXF1ZXN0KTsK
K3N0YXRpYyBpbnQgYXRhX2FoY2lfcG1fcmVhZChkZXZpY2VfdCBkZXYsIGludCBwb3J0LCBpbnQg
cmVnLCB1X2ludDMyX3QgKnJlc3VsdCk7CitzdGF0aWMgaW50IGF0YV9haGNpX3BtX3dyaXRlKGRl
dmljZV90IGRldiwgaW50IHBvcnQsIGludCByZWcsIHVfaW50MzJfdCByZXN1bHQpOworc3RhdGlj
IHVfaW50MzJfdCBhdGFfYWhjaV9zb2Z0cmVzZXQoZGV2aWNlX3QgZGV2LCBpbnQgcG9ydCk7CiBz
dGF0aWMgdm9pZCBhdGFfYWhjaV9yZXNldChkZXZpY2VfdCBkZXYpOwogc3RhdGljIHZvaWQgYXRh
X2FoY2lfZG1hc2V0cHJkKHZvaWQgKnhzYywgYnVzX2RtYV9zZWdtZW50X3QgKnNlZ3MsIGludCBu
c2VncywgaW50IGVycm9yKTsKIHN0YXRpYyB2b2lkIGF0YV9haGNpX2RtYWluaXQoZGV2aWNlX3Qg
ZGV2KTsKQEAgLTEwMiw3ICsxMDcsOCBAQCBzdGF0aWMgaW50IGF0YV9pbnRlbF8zMTI0NF9zdGF0
dXMoZGV2aWNlCiBzdGF0aWMgdm9pZCBhdGFfaW50ZWxfMzEyNDRfdGZfd3JpdGUoc3RydWN0IGF0
YV9yZXF1ZXN0ICpyZXF1ZXN0KTsKIHN0YXRpYyB2b2lkIGF0YV9pbnRlbF8zMTI0NF9yZXNldChk
ZXZpY2VfdCBkZXYpOwogc3RhdGljIGludCBhdGFfaXRlX2NoaXBpbml0KGRldmljZV90IGRldik7
Ci1zdGF0aWMgdm9pZCBhdGFfaXRlX3NldG1vZGUoZGV2aWNlX3QgZGV2LCBpbnQgbW9kZSk7Citz
dGF0aWMgdm9pZCBhdGFfaXRlXzgyMTNfc2V0bW9kZShkZXZpY2VfdCBkZXYsIGludCBtb2RlKTsK
K3N0YXRpYyB2b2lkIGF0YV9pdGVfODIxeF9zZXRtb2RlKGRldmljZV90IGRldiwgaW50IG1vZGUp
Owogc3RhdGljIGludCBhdGFfam1pY3Jvbl9jaGlwaW5pdChkZXZpY2VfdCBkZXYpOwogc3RhdGlj
IGludCBhdGFfam1pY3Jvbl9hbGxvY2F0ZShkZXZpY2VfdCBkZXYpOwogc3RhdGljIHZvaWQgYXRh
X2ptaWNyb25fcmVzZXQoZGV2aWNlX3QgZGV2KTsKQEAgLTEzMCw4ICsxMzYsOCBAQCBzdGF0aWMg
dm9pZCBhdGFfbnZpZGlhX3Jlc2V0KGRldmljZV90IGRlCiBzdGF0aWMgaW50IGF0YV9wcm9taXNl
X2NoaXBpbml0KGRldmljZV90IGRldik7CiBzdGF0aWMgaW50IGF0YV9wcm9taXNlX2FsbG9jYXRl
KGRldmljZV90IGRldik7CiBzdGF0aWMgaW50IGF0YV9wcm9taXNlX3N0YXR1cyhkZXZpY2VfdCBk
ZXYpOwotc3RhdGljIGludCBhdGFfcHJvbWlzZV9kbWFzdGFydChkZXZpY2VfdCBkZXYpOwotc3Rh
dGljIGludCBhdGFfcHJvbWlzZV9kbWFzdG9wKGRldmljZV90IGRldik7CitzdGF0aWMgaW50IGF0
YV9wcm9taXNlX2RtYXN0YXJ0KHN0cnVjdCBhdGFfcmVxdWVzdCAqcmVxdWVzdCk7CitzdGF0aWMg
aW50IGF0YV9wcm9taXNlX2RtYXN0b3Aoc3RydWN0IGF0YV9yZXF1ZXN0ICpyZXF1ZXN0KTsKIHN0
YXRpYyB2b2lkIGF0YV9wcm9taXNlX2RtYXJlc2V0KGRldmljZV90IGRldik7CiBzdGF0aWMgdm9p
ZCBhdGFfcHJvbWlzZV9kbWFpbml0KGRldmljZV90IGRldik7CiBzdGF0aWMgdm9pZCBhdGFfcHJv
bWlzZV9zZXRtb2RlKGRldmljZV90IGRldiwgaW50IG1vZGUpOwpAQCAtMTQyLDYgKzE0OCw5IEBA
IHN0YXRpYyB2b2lkIGF0YV9wcm9taXNlX21pb19pbnRyKHZvaWQgKmQKIHN0YXRpYyBpbnQgYXRh
X3Byb21pc2VfbWlvX3N0YXR1cyhkZXZpY2VfdCBkZXYpOwogc3RhdGljIGludCBhdGFfcHJvbWlz
ZV9taW9fY29tbWFuZChzdHJ1Y3QgYXRhX3JlcXVlc3QgKnJlcXVlc3QpOwogc3RhdGljIHZvaWQg
YXRhX3Byb21pc2VfbWlvX3Jlc2V0KGRldmljZV90IGRldik7CitzdGF0aWMgaW50IGF0YV9wcm9t
aXNlX21pb19wbV9yZWFkKGRldmljZV90IGRldiwgaW50IHBvcnQsIGludCByZWcsIHVfaW50MzJf
dCAqcmVzdWx0KTsKK3N0YXRpYyBpbnQgYXRhX3Byb21pc2VfbWlvX3BtX3dyaXRlKGRldmljZV90
IGRldiwgaW50IHBvcnQsIGludCByZWcsIHVfaW50MzJfdCByZXN1bHQpOworc3RhdGljIHVfaW50
MzJfdCBhdGFfcHJvbWlzZV9taW9fc29mdHJlc2V0KGRldmljZV90IGRldiwgaW50IHBvcnQpOwog
c3RhdGljIHZvaWQgYXRhX3Byb21pc2VfbWlvX2RtYWluaXQoZGV2aWNlX3QgZGV2KTsKIHN0YXRp
YyB2b2lkIGF0YV9wcm9taXNlX21pb19zZXRwcmQodm9pZCAqeHNjLCBidXNfZG1hX3NlZ21lbnRf
dCAqc2VncywgaW50IG5zZWdzLCBpbnQgZXJyb3IpOwogc3RhdGljIHZvaWQgYXRhX3Byb21pc2Vf
bWlvX3NldG1vZGUoZGV2aWNlX3QgZGV2LCBpbnQgbW9kZSk7CkBAIC0xNjcsNiArMTc2LDkgQEAg
c3RhdGljIGludCBhdGFfc2lpcHJiX2FsbG9jYXRlKGRldmljZV90IAogc3RhdGljIGludCBhdGFf
c2lpcHJiX3N0YXR1cyhkZXZpY2VfdCBkZXYpOwogc3RhdGljIGludCBhdGFfc2lpcHJiX2JlZ2lu
X3RyYW5zYWN0aW9uKHN0cnVjdCBhdGFfcmVxdWVzdCAqcmVxdWVzdCk7CiBzdGF0aWMgaW50IGF0
YV9zaWlwcmJfZW5kX3RyYW5zYWN0aW9uKHN0cnVjdCBhdGFfcmVxdWVzdCAqcmVxdWVzdCk7Citz
dGF0aWMgaW50IGF0YV9zaWlwcmJfcG1fcmVhZChkZXZpY2VfdCBkZXYsIGludCBwb3J0LCBpbnQg
cmVnLCB1X2ludDMyX3QgKnJlc3VsdCk7CitzdGF0aWMgaW50IGF0YV9zaWlwcmJfcG1fd3JpdGUo
ZGV2aWNlX3QgZGV2LCBpbnQgcG9ydCwgaW50IHJlZywgdV9pbnQzMl90IHJlc3VsdCk7CitzdGF0
aWMgdV9pbnQzMl90IGF0YV9zaWlwcmJfc29mdHJlc2V0KGRldmljZV90IGRldiwgaW50IHBvcnQp
Owogc3RhdGljIHZvaWQgYXRhX3NpaXByYl9yZXNldChkZXZpY2VfdCBkZXYpOwogc3RhdGljIHZv
aWQgYXRhX3NpaXByYl9kbWFzZXRwcmQodm9pZCAqeHNjLCBidXNfZG1hX3NlZ21lbnRfdCAqc2Vn
cywgaW50IG5zZWdzLCBpbnQgZXJyb3IpOwogc3RhdGljIHZvaWQgYXRhX3NpaXByYl9kbWFpbml0
KGRldmljZV90IGRldik7CkBAIC0yNjgsMTUgKzI4MCwxNSBAQCBhdGFfc2F0YV9waHlfY2hlY2tf
ZXZlbnRzKGRldmljZV90IGRldikKIAkgICAgaWYgKCgoc3RhdHVzICYgQVRBX1NTX0NPTldFTExf
TUFTSykgPT0gQVRBX1NTX0NPTldFTExfR0VOMSkgfHwKIAkJKChzdGF0dXMgJiBBVEFfU1NfQ09O
V0VMTF9NQVNLKSA9PSBBVEFfU1NfQ09OV0VMTF9HRU4yKSkgewogCQlpZiAoYm9vdHZlcmJvc2Up
Ci0JCSAgICBkZXZpY2VfcHJpbnRmKGNoLT5kZXYsICJDT05ORUNUIHJlcXVlc3RlZFxuIik7CisJ
CSAgICBkZXZpY2VfcHJpbnRmKGRldiwgIkNPTk5FQ1QgcmVxdWVzdGVkXG4iKTsKIAkJdHAtPmFj
dGlvbiA9IEFUQV9DX0FUVEFDSDsKIAkgICAgfQogCSAgICBlbHNlIHsKIAkJaWYgKGJvb3R2ZXJi
b3NlKQotCQkgICAgZGV2aWNlX3ByaW50ZihjaC0+ZGV2LCAiRElTQ09OTkVDVCByZXF1ZXN0ZWRc
biIpOworCQkgICAgZGV2aWNlX3ByaW50ZihkZXYsICJESVNDT05ORUNUIHJlcXVlc3RlZFxuIik7
CiAJCXRwLT5hY3Rpb24gPSBBVEFfQ19ERVRBQ0g7CiAJICAgIH0KLQkgICAgdHAtPmRldiA9IGNo
LT5kZXY7CisJICAgIHRwLT5kZXYgPSBkZXY7CiAJICAgIFRBU0tfSU5JVCgmdHAtPnRhc2ssIDAs
IGF0YV9zYXRhX3BoeV9ldmVudCwgdHApOwogCSAgICB0YXNrcXVldWVfZW5xdWV1ZSh0YXNrcXVl
dWVfdGhyZWFkLCAmdHAtPnRhc2spOwogCX0KQEAgLTQwNywxNCArNDE5LDExMiBAQCBhdGFfc2F0
YV9zZXRtb2RlKGRldmljZV90IGRldiwgaW50IG1vZGUpCiAgICAgfQogfQogCitzdGF0aWMgdm9p
ZAorYXRhX3BtX2lkZW50aWZ5KGRldmljZV90IGRldikKK3sKKyAgICBzdHJ1Y3QgYXRhX2NoYW5u
ZWwgKmNoID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworICAgIHVfaW50MzJfdCBwbV9jaGlwaWQs
IHBtX3JldmlzaW9uLCBwbV9wb3J0czsKKyAgICBpbnQgcG9ydDsKKworICAgIC8qIGdldCBQTSB2
ZW5kb3IgJiBwcm9kdWN0IGRhdGEgKi8KKyAgICBpZiAoY2gtPmh3LnBtX3JlYWQoZGV2LCBBVEFf
UE0sIDAsICZwbV9jaGlwaWQpKSB7CisJZGV2aWNlX3ByaW50ZihkZXYsICJlcnJvciBnZXR0aW5n
IFBNIHZlbmRvciBkYXRhXG4iKTsKKwlyZXR1cm47CisgICAgfQorCisgICAgLyogZ2V0IFBNIHJl
dmlzaW9uIGRhdGEgKi8KKyAgICBpZiAoY2gtPmh3LnBtX3JlYWQoZGV2LCBBVEFfUE0sIDEsICZw
bV9yZXZpc2lvbikpIHsKKwlkZXZpY2VfcHJpbnRmKGRldiwgImVycm9yIGdldHRpbmcgUE0gcmV2
aXNvbiBkYXRhXG4iKTsKKwlyZXR1cm47CisgICAgfQorCisgICAgLyogZ2V0IG51bWJlciBvZiBI
VyBwb3J0cyBvbiB0aGUgUE0gKi8KKyAgICBpZiAoY2gtPmh3LnBtX3JlYWQoZGV2LCBBVEFfUE0s
IDIsICZwbV9wb3J0cykpIHsKKwlkZXZpY2VfcHJpbnRmKGRldiwgImVycm9yIGdldHRpbmcgUE0g
cG9ydCBpbmZvXG4iKTsKKwlyZXR1cm47CisgICAgfQorICAgIHBtX3BvcnRzICY9IDB4MDAwMDAw
MGY7CisKKyAgICAvKiBjaGlwIHNwZWNpZmljIHF1aXJrcyAqLworICAgIHN3aXRjaCAocG1fY2hp
cGlkKSB7CisgICAgY2FzZSAweDM3MjYxMDk1OgorCS8qIFNvbWUgb2YgdGhlc2UgYm9ndXNseSBy
ZXBvcnRzIDYgcG9ydHMgKi8KKwlwbV9wb3J0cyA9IDU7CisJZGV2aWNlX3ByaW50ZihkZXYsICJT
aUkgMzcyNiByJXggUG9ydG11bHRpcGxpZXIgd2l0aCAlZCBwb3J0c1xuIiwKKwkJICAgICAgcG1f
cmV2aXNpb24sIHBtX3BvcnRzKTsKKwlicmVhazsKKworICAgIGRlZmF1bHQ6CisJZGV2aWNlX3By
aW50ZihkZXYsICJQb3J0bXVsdGlwbGllciAoaWQ9JTA4eCByZXY9JXgpIHdpdGggJWQgcG9ydHNc
biIsCisJCSAgICAgIHBtX2NoaXBpZCwgcG1fcmV2aXNpb24sIHBtX3BvcnRzKTsKKyAgICB9CisK
KyAgICAvKiBpbmZvcm0gZG1hLmFsbG9jKCkgYWJvdXQgbmVlZGVkIERNQSBzbG90cyAqLworICAg
IGNoLT5kbWEuZG1hX3Nsb3RzID0gcG1fcG9ydHM7CisKKyAgICAvKiByZXNldCBhbGwgcG9ydHMg
YW5kIHJlZ2lzdGVyIGlmIGFueXRoaW5nIGNvbm5lY3RlZCAqLworICAgIGZvciAocG9ydD0wOyBw
b3J0IDwgcG1fcG9ydHM7IHBvcnQrKykgeworCXVfaW50MzJfdCBzaWduYXR1cmUsIHN0YXR1czsK
KwlpbnQgdGltZW91dDsKKworCWlmIChjaC0+aHcucG1fd3JpdGUoZGV2LCBwb3J0LCAyLCBBVEFf
U0NfREVUX1JFU0VUKSkgeworCSAgICBkZXZpY2VfcHJpbnRmKGRldiwgInAlZDogd3JpdGluZyBB
VEFfU0NfREVUX1JFU0VUIGZhaWxlZFxuIiwgcG9ydCk7CisJICAgIGNvbnRpbnVlOworCX0KKwor
CWF0YV91ZGVsYXkoNTAwMCk7CisKKwlpZiAoY2gtPmh3LnBtX3dyaXRlKGRldiwgcG9ydCwgMiwg
QVRBX1NDX0RFVF9JRExFKSkgeworCSAgICBkZXZpY2VfcHJpbnRmKGRldiwgInAlZDogd3JpdGlu
ZyBBVEFfU0NfREVUX2lkbGUgZmFpbGVkXG4iLCBwb3J0KTsKKwkgICAgY29udGludWU7CisJfQor
CisJYXRhX3VkZWxheSg1MDAwKTsKKworCS8qIHdhaXQgdXAgdG8gMSBzZWNvbmQgZm9yICJjb25u
ZWN0IHdlbGwiICovCisJZm9yICh0aW1lb3V0ID0gMDsgdGltZW91dCA8IDEwMCA7IHRpbWVvdXQr
KykgeworCSAgICBjaC0+aHcucG1fcmVhZChkZXYsIHBvcnQsIDAsICZzdGF0dXMpOworCSAgICBp
ZiAoKHN0YXR1cyAmIEFUQV9TU19DT05XRUxMX01BU0spID09IEFUQV9TU19DT05XRUxMX0dFTjEg
fHwKKwkJKHN0YXR1cyAmIEFUQV9TU19DT05XRUxMX01BU0spID09IEFUQV9TU19DT05XRUxMX0dF
TjIpCisJCWJyZWFrOworCSAgICBhdGFfdWRlbGF5KDEwMDAwKTsKKwl9CisJaWYgKHRpbWVvdXQg
Pj0gMTAwKSB7CisJICAgIGlmIChib290dmVyYm9zZSkKKwkJZGV2aWNlX3ByaW50ZihkZXYsICJw
JWQ6IGNvbm5lY3Qgc3RhdHVzPSUwOHhcbiIsIHBvcnQsIHN0YXR1cyk7CisJICAgIGNvbnRpbnVl
OworCX0KKwlpZiAoYm9vdHZlcmJvc2UpCisJICAgIGRldmljZV9wcmludGYoZGV2LCAicCVkOiBj
b25uZWN0IHRpbWUgJWRtc1xuIiwgcG9ydCwgdGltZW91dCAqIDEwKTsKKworCS8qIGNsZWFyIFNF
UlJPUiByZWdpc3RlciAqLworCWNoLT5ody5wbV93cml0ZShkZXYsIHBvcnQsIDEsIDB4ZmZmZmZm
ZmYpOworCisJc2lnbmF0dXJlID0gY2gtPmh3LnNvZnRyZXNldChkZXYsIHBvcnQpOworCisJaWYg
KGJvb3R2ZXJib3NlKQorCSAgICBkZXZpY2VfcHJpbnRmKGRldiwgInAlZDogU0lHTkFUVVJFPSUw
OHhcbiIsIHBvcnQsIHNpZ25hdHVyZSk7CisKKwkvKiBmaWd1cmUgb3V0IHdoYXRzIHRoZXJlICov
CisJc3dpdGNoIChzaWduYXR1cmUpIHsKKwljYXNlIDB4MDAwMDAxMDE6CisJICAgIGNoLT5kZXZp
Y2VzIHw9IChBVEFfQVRBX01BU1RFUiA8PCBwb3J0KTsKKwkgICAgY29udGludWU7CisJY2FzZSAw
eGViMTQwMTAxOgorCSAgICBjaC0+ZGV2aWNlcyB8PSAoQVRBX0FUQVBJX01BU1RFUiA8PCBwb3J0
KTsKKwkgICAgY29udGludWU7CisJfQorICAgIH0KK30KKwogc3RhdGljIGludAogYXRhX3JlcXVl
c3QyZmlzX2gyZChzdHJ1Y3QgYXRhX3JlcXVlc3QgKnJlcXVlc3QsIHVfaW50OF90ICpmaXMpCiB7
CiAgICAgc3RydWN0IGF0YV9kZXZpY2UgKmF0YWRldiA9IGRldmljZV9nZXRfc29mdGMocmVxdWVz
dC0+ZGV2KTsKIAogICAgIGlmIChyZXF1ZXN0LT5mbGFncyAmIEFUQV9SX0FUQVBJKSB7Ci0JZmlz
WzBdID0gMHgyNzsgIC8qIGhvc3QgdG8gZGV2aWNlICovCi0JZmlzWzFdID0gMHg4MDsgIC8qIGNv
bW1hbmQgRklTIChub3RlIFBNIGdvZXMgaGVyZSkgKi8KKwlmaXNbMF0gPSAweDI3OyAgCQkvKiBo
b3N0IHRvIGRldmljZSAqLworCWZpc1sxXSA9IDB4ODAgfCAoYXRhZGV2LT51bml0ICYgMHgwZik7
CiAJZmlzWzJdID0gQVRBX1BBQ0tFVF9DTUQ7CiAJaWYgKHJlcXVlc3QtPmZsYWdzICYgKEFUQV9S
X1JFQUQgfCBBVEFfUl9XUklURSkpCiAJICAgIGZpc1szXSA9IEFUQV9GX0RNQTsKQEAgLTQyMiwy
MiArNTMyLDIyIEBAIGF0YV9yZXF1ZXN0MmZpc19oMmQoc3RydWN0IGF0YV9yZXF1ZXN0ICoKIAkg
ICAgZmlzWzVdID0gcmVxdWVzdC0+dHJhbnNmZXJzaXplOwogCSAgICBmaXNbNl0gPSByZXF1ZXN0
LT50cmFuc2ZlcnNpemUgPj4gODsKIAl9Ci0JZmlzWzddID0gQVRBX0RfTEJBIHwgYXRhZGV2LT51
bml0OworCWZpc1s3XSA9IEFUQV9EX0xCQTsKIAlmaXNbMTVdID0gQVRBX0FfNEJJVDsKIAlyZXR1
cm4gMjA7CiAgICAgfQogICAgIGVsc2UgewogCWF0YV9tb2RpZnlfaWZfNDhiaXQocmVxdWVzdCk7
Ci0JZmlzWzBdID0gMHgyNzsgIC8qIGhvc3QgdG8gZGV2aWNlICovCi0JZmlzWzFdID0gMHg4MDsg
IC8qIGNvbW1hbmQgRklTIChub3RlIFBNIGdvZXMgaGVyZSkgKi8KKwlmaXNbMF0gPSAweDI3OwkJ
CS8qIGhvc3QgdG8gZGV2aWNlICovCisJZmlzWzFdID0gMHg4MCB8IChhdGFkZXYtPnVuaXQgJiAw
eDBmKTsKIAlmaXNbMl0gPSByZXF1ZXN0LT51LmF0YS5jb21tYW5kOwogCWZpc1szXSA9IHJlcXVl
c3QtPnUuYXRhLmZlYXR1cmU7CiAJZmlzWzRdID0gcmVxdWVzdC0+dS5hdGEubGJhOwogCWZpc1s1
XSA9IHJlcXVlc3QtPnUuYXRhLmxiYSA+PiA4OwogCWZpc1s2XSA9IHJlcXVlc3QtPnUuYXRhLmxi
YSA+PiAxNjsKLQlmaXNbN10gPSBBVEFfRF9MQkEgfCBhdGFkZXYtPnVuaXQ7CisJZmlzWzddID0g
QVRBX0RfTEJBOwogCWlmICghKGF0YWRldi0+ZmxhZ3MgJiBBVEFfRF80OEJJVF9BQ1RJVkUpKQot
CSAgICBmaXNbN10gfD0gKHJlcXVlc3QtPnUuYXRhLmxiYSA+PiAyNCAmIDB4MGYpOworCSAgICBm
aXNbN10gfD0gKEFUQV9EX0lCTSB8IChyZXF1ZXN0LT51LmF0YS5sYmEgPj4gMjQgJiAweDBmKSk7
CiAJZmlzWzhdID0gcmVxdWVzdC0+dS5hdGEubGJhID4+IDI0OwogCWZpc1s5XSA9IHJlcXVlc3Qt
PnUuYXRhLmxiYSA+PiAzMjsgCiAJZmlzWzEwXSA9IHJlcXVlc3QtPnUuYXRhLmxiYSA+PiA0MDsg
CkBAIC00OTUsNiArNjA1LDQyIEBAIGF0YV9haGNpX2NoaXBpbml0KGRldmljZV90IGRldikKICAg
ICBlbHNlCiAJZGV2aWNlX3ByaW50ZihkZXYsICJBSENJIGNhbGxlZCBmcm9tIHZlbmRvciBzcGVj
aWZpYyBkcml2ZXJcbiIpOwogCisgICAgLyogcmVzZXQgY29udHJvbGxlciAqLworICAgIGF0YV9h
aGNpX2N0bHJfcmVzZXQoZGV2KTsKKworICAgIC8qIGdldCB0aGUgbnVtYmVyIG9mIEhXIGNoYW5u
ZWxzICovCisgICAgY3Rsci0+Y2hhbm5lbHMgPQorCU1BWChmbHNsKEFUQV9JTkwoY3Rsci0+cl9y
ZXMyLCBBVEFfQUhDSV9QSSkpLCAKKwkgICAgKEFUQV9JTkwoY3Rsci0+cl9yZXMyLCBBVEFfQUhD
SV9DQVApICYgQVRBX0FIQ0lfTlBNQVNLKSArIDEpOworCisgICAgY3Rsci0+cmVzZXQgPSBhdGFf
YWhjaV9yZXNldDsKKyAgICBjdGxyLT5kbWFpbml0ID0gYXRhX2FoY2lfZG1haW5pdDsKKyAgICBj
dGxyLT5hbGxvY2F0ZSA9IGF0YV9haGNpX2FsbG9jYXRlOworICAgIGN0bHItPnNldG1vZGUgPSBh
dGFfc2F0YV9zZXRtb2RlOworICAgIGN0bHItPnN1c3BlbmQgPSBhdGFfYWhjaV9zdXNwZW5kOwor
ICAgIGN0bHItPnJlc3VtZSA9IGF0YV9haGNpX2N0bHJfcmVzZXQ7CisKKyAgICAvKiBlbmFibGUg
UENJIGludGVycnVwdCAqLworICAgIHBjaV93cml0ZV9jb25maWcoZGV2LCBQQ0lSX0NPTU1BTkQs
CisJCSAgICAgcGNpX3JlYWRfY29uZmlnKGRldiwgUENJUl9DT01NQU5ELCAyKSAmIH4weDA0MDAs
IDIpOworCisgICAgLyogYW5ub3VuY2Ugd2Ugc3VwcG9ydCB0aGUgSFcgKi8KKyAgICB2ZXJzaW9u
ID0gQVRBX0lOTChjdGxyLT5yX3JlczIsIEFUQV9BSENJX1ZTKTsKKyAgICBkZXZpY2VfcHJpbnRm
KGRldiwKKwkJICAiQUhDSSBWZXJzaW9uICV4JXguJXgleCBjb250cm9sbGVyIHdpdGggJWQgcG9y
dHMgUE0gJXNcbiIsCisJCSAgKHZlcnNpb24gPj4gMjQpICYgMHhmZiwgKHZlcnNpb24gPj4gMTYp
ICYgMHhmZiwKKwkJICAodmVyc2lvbiA+PiA4KSAmIDB4ZmYsIHZlcnNpb24gJiAweGZmLAorCQkg
IChBVEFfSU5MKGN0bHItPnJfcmVzMiwgQVRBX0FIQ0lfQ0FQKSAmIEFUQV9BSENJX05QTUFTSykg
KyAxLAorCQkgIChBVEFfSU5MKGN0bHItPnJfcmVzMiwgQVRBX0FIQ0lfQ0FQKSAmIEFUQV9BSENJ
X0NBUF9TUE0pID8KKwkJICAic3VwcG9ydGVkIiA6ICJub3Qgc3VwcG9ydGVkIik7CisgICAgcmV0
dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2F0YV9haGNpX2N0bHJfcmVzZXQoZGV2aWNlX3QgZGV2
KQoreworICAgIHN0cnVjdCBhdGFfcGNpX2NvbnRyb2xsZXIgKmN0bHIgPSBkZXZpY2VfZ2V0X3Nv
ZnRjKGRldik7CisKICAgICAvKiBlbmFibGUgQUhDSSBtb2RlICovCiAgICAgQVRBX09VVEwoY3Rs
ci0+cl9yZXMyLCBBVEFfQUhDSV9HSEMsIEFUQV9BSENJX0dIQ19BRSk7CiAKQEAgLTUxMCwxMSAr
NjU2LDYgQEAgYXRhX2FoY2lfY2hpcGluaXQoZGV2aWNlX3QgZGV2KQogICAgIC8qIHJlZW5hYmxl
IEFIQ0kgbW9kZSAqLwogICAgIEFUQV9PVVRMKGN0bHItPnJfcmVzMiwgQVRBX0FIQ0lfR0hDLCBB
VEFfQUhDSV9HSENfQUUpOwogCi0gICAgLyogZ2V0IHRoZSBudW1iZXIgb2YgSFcgY2hhbm5lbHMg
Ki8KLSAgICBjdGxyLT5jaGFubmVscyA9Ci0JTUFYKGZsc2woQVRBX0lOTChjdGxyLT5yX3JlczIs
IEFUQV9BSENJX1BJKSksIAotCSAgICAoQVRBX0lOTChjdGxyLT5yX3JlczIsIEFUQV9BSENJX0NB
UCkgJiBBVEFfQUhDSV9OUE1BU0spICsgMSk7Ci0KICAgICAvKiBjbGVhciBpbnRlcnJ1cHRzICov
CiAgICAgQVRBX09VVEwoY3Rsci0+cl9yZXMyLCBBVEFfQUhDSV9JUywgQVRBX0lOTChjdGxyLT5y
X3JlczIsIEFUQV9BSENJX0lTKSk7CiAKQEAgLTUyMiwzMSArNjYzLDI2IEBAIGF0YV9haGNpX2No
aXBpbml0KGRldmljZV90IGRldikKICAgICBBVEFfT1VUTChjdGxyLT5yX3JlczIsIEFUQV9BSENJ
X0dIQywKIAkgICAgIEFUQV9JTkwoY3Rsci0+cl9yZXMyLCBBVEFfQUhDSV9HSEMpIHwgQVRBX0FI
Q0lfR0hDX0lFKTsKIAotICAgIGN0bHItPnJlc2V0ID0gYXRhX2FoY2lfcmVzZXQ7Ci0gICAgY3Rs
ci0+ZG1haW5pdCA9IGF0YV9haGNpX2RtYWluaXQ7Ci0gICAgY3Rsci0+YWxsb2NhdGUgPSBhdGFf
YWhjaV9hbGxvY2F0ZTsKLSAgICBjdGxyLT5zZXRtb2RlID0gYXRhX3NhdGFfc2V0bW9kZTsKKyAg
ICByZXR1cm4gMDsKK30KIAotICAgIC8qIGVuYWJsZSBQQ0kgaW50ZXJydXB0ICovCi0gICAgcGNp
X3dyaXRlX2NvbmZpZyhkZXYsIFBDSVJfQ09NTUFORCwKLQkJICAgICBwY2lfcmVhZF9jb25maWco
ZGV2LCBQQ0lSX0NPTU1BTkQsIDIpICYgfjB4MDQwMCwgMik7CitzdGF0aWMgaW50CithdGFfYWhj
aV9zdXNwZW5kKGRldmljZV90IGRldikKK3sKKyAgICBzdHJ1Y3QgYXRhX3BjaV9jb250cm9sbGVy
ICpjdGxyID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOwogCi0gICAgLyogYW5ub3VuY2Ugd2Ugc3Vw
cG9ydCB0aGUgSFcgKi8KLSAgICB2ZXJzaW9uID0gQVRBX0lOTChjdGxyLT5yX3JlczIsIEFUQV9B
SENJX1ZTKTsKLSAgICBkZXZpY2VfcHJpbnRmKGRldiwKLQkJICAiQUhDSSBWZXJzaW9uICV4JXgu
JXgleCBjb250cm9sbGVyIHdpdGggJWQgcG9ydHMgZGV0ZWN0ZWRcbiIsCi0JCSAgKHZlcnNpb24g
Pj4gMjQpICYgMHhmZiwgKHZlcnNpb24gPj4gMTYpICYgMHhmZiwKLQkJICAodmVyc2lvbiA+PiA4
KSAmIDB4ZmYsIHZlcnNpb24gJiAweGZmLAotCQkgIChBVEFfSU5MKGN0bHItPnJfcmVzMiwgQVRB
X0FIQ0lfQ0FQKSAmIEFUQV9BSENJX05QTUFTSykgKyAxKTsKKyAgICAvKiBkaXNhYmxlIGludGVy
dXB0cyBzbyB0aGUgc3RhdGUgY2hhbmdlKHMpIGRvZXNuJ3QgdHJpZ2dlciAqLworICAgIEFUQV9P
VVRMKGN0bHItPnJfcmVzMiwgQVRBX0FIQ0lfR0hDLAorICAgICAgICAgICAgIEFUQV9JTkwoY3Rs
ci0+cl9yZXMyLCBBVEFfQUhDSV9HSEMpICYgKH5BVEFfQUhDSV9HSENfSUUpKTsKICAgICByZXR1
cm4gMDsKIH0KIAorCiBzdGF0aWMgaW50CiBhdGFfYWhjaV9hbGxvY2F0ZShkZXZpY2VfdCBkZXYp
CiB7CiAgICAgc3RydWN0IGF0YV9wY2lfY29udHJvbGxlciAqY3RsciA9IGRldmljZV9nZXRfc29m
dGMoZGV2aWNlX2dldF9wYXJlbnQoZGV2KSk7CiAgICAgc3RydWN0IGF0YV9jaGFubmVsICpjaCA9
IGRldmljZV9nZXRfc29mdGMoZGV2KTsKLSAgICB1X2ludDY0X3Qgd29yazsKICAgICBpbnQgb2Zm
c2V0ID0gY2gtPnVuaXQgPDwgNzsKIAogICAgIC8qIHNldCB0aGUgU0FUQSByZXNvdXJjZXMgKi8K
QEAgLTU2MywyOCArNjk5LDEwIEBAIGF0YV9haGNpX2FsbG9jYXRlKGRldmljZV90IGRldikKICAg
ICBjaC0+aHcuYmVnaW5fdHJhbnNhY3Rpb24gPSBhdGFfYWhjaV9iZWdpbl90cmFuc2FjdGlvbjsK
ICAgICBjaC0+aHcuZW5kX3RyYW5zYWN0aW9uID0gYXRhX2FoY2lfZW5kX3RyYW5zYWN0aW9uOwog
ICAgIGNoLT5ody5jb21tYW5kID0gTlVMTDsgICAgICAvKiBub3QgdXNlZCBoZXJlICovCisgICAg
Y2gtPmh3LnNvZnRyZXNldCA9IGF0YV9haGNpX3NvZnRyZXNldDsKKyAgICBjaC0+aHcucG1fcmVh
ZCA9IGF0YV9haGNpX3BtX3JlYWQ7CisgICAgY2gtPmh3LnBtX3dyaXRlID0gYXRhX2FoY2lfcG1f
d3JpdGU7CiAKLSAgICAvKiBzZXR1cCB3b3JrIGFyZWFzICovCi0gICAgd29yayA9IGNoLT5kbWEt
PndvcmtfYnVzICsgQVRBX0FIQ0lfQ0xfT0ZGU0VUOwotICAgIEFUQV9PVVRMKGN0bHItPnJfcmVz
MiwgQVRBX0FIQ0lfUF9DTEIgKyBvZmZzZXQsIHdvcmsgJiAweGZmZmZmZmZmKTsKLSAgICBBVEFf
T1VUTChjdGxyLT5yX3JlczIsIEFUQV9BSENJX1BfQ0xCVSArIG9mZnNldCwgd29yayA+PiAzMik7
Ci0KLSAgICB3b3JrID0gY2gtPmRtYS0+d29ya19idXMgKyBBVEFfQUhDSV9GQl9PRkZTRVQ7Ci0g
ICAgQVRBX09VVEwoY3Rsci0+cl9yZXMyLCBBVEFfQUhDSV9QX0ZCICsgb2Zmc2V0LCB3b3JrICYg
MHhmZmZmZmZmZik7IAotICAgIEFUQV9PVVRMKGN0bHItPnJfcmVzMiwgQVRBX0FIQ0lfUF9GQlUg
KyBvZmZzZXQsIHdvcmsgPj4gMzIpOwotCi0gICAgLyogZW5hYmxlIHdhbnRlZCBwb3J0IGludGVy
cnVwdHMgKi8KLSAgICBBVEFfT1VUTChjdGxyLT5yX3JlczIsIEFUQV9BSENJX1BfSUUgKyBvZmZz
ZXQsCi0JICAgICAoQVRBX0FIQ0lfUF9JWF9DUEQgfCBBVEFfQUhDSV9QX0lYX1RGRSB8IEFUQV9B
SENJX1BfSVhfSEJGIHwKLQkgICAgICBBVEFfQUhDSV9QX0lYX0hCRCB8IEFUQV9BSENJX1BfSVhf
SUYgfCBBVEFfQUhDSV9QX0lYX09GIHwKLQkgICAgICBBVEFfQUhDSV9QX0lYX1BSQyB8IEFUQV9B
SENJX1BfSVhfUEMgfCBBVEFfQUhDSV9QX0lYX0RQIHwKLQkgICAgICBBVEFfQUhDSV9QX0lYX1VG
IHwgQVRBX0FIQ0lfUF9JWF9TREIgfCBBVEFfQUhDSV9QX0lYX0RTIHwKLQkgICAgICBBVEFfQUhD
SV9QX0lYX1BTIHwgQVRBX0FIQ0lfUF9JWF9ESFIpKTsKLQotICAgIC8qIHN0YXJ0IG9wZXJhdGlv
bnMgb24gdGhpcyBjaGFubmVsICovCi0gICAgQVRBX09VVEwoY3Rsci0+cl9yZXMyLCBBVEFfQUhD
SV9QX0NNRCArIG9mZnNldCwKLQkgICAgIChBVEFfQUhDSV9QX0NNRF9BQ1RJVkUgfCBBVEFfQUhD
SV9QX0NNRF9GUkUgfAotCSAgICAgIEFUQV9BSENJX1BfQ01EX1BPRCB8IEFUQV9BSENJX1BfQ01E
X1NVRCB8IEFUQV9BSENJX1BfQ01EX1NUKSk7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTU5NSwy
MiArNzEzLDI1IEBAIGF0YV9haGNpX3N0YXR1cyhkZXZpY2VfdCBkZXYpCiAgICAgc3RydWN0IGF0
YV9jaGFubmVsICpjaCA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKICAgICB1X2ludDMyX3QgYWN0
aW9uID0gQVRBX0lOTChjdGxyLT5yX3JlczIsIEFUQV9BSENJX0lTKTsKICAgICBpbnQgb2Zmc2V0
ID0gY2gtPnVuaXQgPDwgNzsKLSAgICBpbnQgdGFnID0gMDsKKworI2RlZmluZSBBVEFfQUhDSV9T
VEFUQklUUyBcCisJKEFUQV9BSENJX1BfSVhfSUZ8QVRBX0FIQ0lfUF9JWF9IQkR8QVRBX0FIQ0lf
UF9JWF9IQkZ8QVRBX0FIQ0lfUF9JWF9URkUpCiAKICAgICBpZiAoYWN0aW9uICYgKDEgPDwgY2gt
PnVuaXQpKSB7CiAJdV9pbnQzMl90IGlzdGF0dXMgPSBBVEFfSU5MKGN0bHItPnJfcmVzMiwgQVRB
X0FIQ0lfUF9JUyArIG9mZnNldCk7CiAJdV9pbnQzMl90IGNzdGF0dXMgPSBBVEFfSU5MKGN0bHIt
PnJfcmVzMiwgQVRBX0FIQ0lfUF9DSSArIG9mZnNldCk7CiAKIAkvKiBjbGVhciBpbnRlcnJ1cHQo
cykgKi8KLQlBVEFfT1VUTChjdGxyLT5yX3JlczIsIEFUQV9BSENJX0lTLCBhY3Rpb24gJiAoMSA8
PCBjaC0+dW5pdCkpOwogCUFUQV9PVVRMKGN0bHItPnJfcmVzMiwgQVRBX0FIQ0lfUF9JUyArIG9m
ZnNldCwgaXN0YXR1cyk7CisJQVRBX09VVEwoY3Rsci0+cl9yZXMyLCBBVEFfQUhDSV9JUywgYWN0
aW9uICYgKDEgPDwgY2gtPnVuaXQpKTsKIAogCS8qIGRvIHdlIGhhdmUgYW55IFBIWSBldmVudHMg
PyAqLwotCS8qIFhYWCBTT1MgY2hlY2sgaXN0YXR1cyBwaHkgYml0cyAqLwotCWF0YV9zYXRhX3Bo
eV9jaGVja19ldmVudHMoZGV2KTsKKwlpZiAoaXN0YXR1cyAmIChBVEFfQUhDSV9QX0lYX1BSQyB8
IEFUQV9BSENJX1BfSVhfUEMpKQorCSAgICBhdGFfc2F0YV9waHlfY2hlY2tfZXZlbnRzKGRldik7
CiAKIAkvKiBkbyB3ZSBoYXZlIGEgcG90ZW50aWFsbHkgaGFuZ2luZyBlbmdpbmUgdG8gdGFrZSBj
YXJlIG9mPyAqLwotCWlmICgoaXN0YXR1cyAmIDB4Nzg0MDAwNTApICYmIChjc3RhdHVzICYgKDEg
PDwgdGFnKSkpIHsKKwkvKiBYWFggU09TIHdoYXQgdG9kbyBvbiBOQ1EgKi8KKwlpZiAoKGlzdGF0
dXMgJiBBVEFfQUhDSV9TVEFUQklUUykgJiYgKGNzdGF0dXMgJiAxKSkgewogCiAJICAgIHVfaW50
MzJfdCBjbWQgPSBBVEFfSU5MKGN0bHItPnJfcmVzMiwgQVRBX0FIQ0lfUF9DTUQgKyBvZmZzZXQp
OwogCSAgICBpbnQgdGltZW91dCA9IDA7CkBAIC02MjIsNyArNzQzLDcgQEAgYXRhX2FoY2lfc3Rh
dHVzKGRldmljZV90IGRldikKIAkgICAgLyogWFhYIFNPUyB0aGlzIGlzIG5vdCBlbnRpcmVseSB3
cm9uZyAqLwogCSAgICBkbyB7CiAJCURFTEFZKDEwMDApOwotCQlpZiAodGltZW91dCsrID4gNTAw
KSB7CisJCWlmICh0aW1lb3V0KysgPiAxMDAwKSB7CiAJCSAgICBkZXZpY2VfcHJpbnRmKGRldiwg
InN0b3BwaW5nIEFIQ0kgZW5naW5lIGZhaWxlZFxuIik7CiAJCSAgICBicmVhazsKIAkJfQpAQCAt
NjM2LDcgKzc1Nyw4IEBAIGF0YV9haGNpX3N0YXR1cyhkZXZpY2VfdCBkZXYpCiAJICAgIHJldHVy
biAxOwogCX0KIAllbHNlCi0JICAgIHJldHVybiAoIShjc3RhdHVzICYgKDEgPDwgdGFnKSkpOwor
CSAgICAvKiBYWFggU09TIHdoYXQgdG9kbyBvbiBOQ1EgKi8KKwkgICAgcmV0dXJuICghKGNzdGF0
dXMgJiAxKSk7CiAgICAgfQogICAgIHJldHVybiAwOwogfQpAQCAtNjQ2LDE2ICs3NjgsMTggQEAg
c3RhdGljIGludAogYXRhX2FoY2lfYmVnaW5fdHJhbnNhY3Rpb24oc3RydWN0IGF0YV9yZXF1ZXN0
ICpyZXF1ZXN0KQogewogICAgIHN0cnVjdCBhdGFfcGNpX2NvbnRyb2xsZXIgKmN0bHI9ZGV2aWNl
X2dldF9zb2Z0YyhHUkFORFBBUkVOVChyZXF1ZXN0LT5kZXYpKTsKLSAgICBzdHJ1Y3QgYXRhX2No
YW5uZWwgKmNoID0gZGV2aWNlX2dldF9zb2Z0YyhkZXZpY2VfZ2V0X3BhcmVudChyZXF1ZXN0LT5k
ZXYpKTsKKyAgICBzdHJ1Y3QgYXRhX2NoYW5uZWwgKmNoID0gZGV2aWNlX2dldF9zb2Z0YyhyZXF1
ZXN0LT5wYXJlbnQpOworICAgIHN0cnVjdCBhdGFfZGV2aWNlICphdGFkZXYgPSBkZXZpY2VfZ2V0
X3NvZnRjKHJlcXVlc3QtPmRldik7CiAgICAgc3RydWN0IGF0YV9haGNpX2NtZF90YWIgKmN0cDsK
ICAgICBzdHJ1Y3QgYXRhX2FoY2lfY21kX2xpc3QgKmNscDsKICAgICBpbnQgb2Zmc2V0ID0gY2gt
PnVuaXQgPDwgNzsKLSAgICBpbnQgdGFnID0gMCwgZW50cmllcyA9IDA7CisgICAgaW50IHBvcnQg
PSBhdGFkZXYtPnVuaXQgJiAweDBmOworICAgIGludCBlbnRyaWVzID0gMDsKICAgICBpbnQgZmlz
X3NpemU7CiAJCiAgICAgLyogZ2V0IGEgcGllY2Ugb2YgdGhlIHdvcmtzcGFjZSBmb3IgdGhpcyBy
ZXF1ZXN0ICovCiAgICAgY3RwID0gKHN0cnVjdCBhdGFfYWhjaV9jbWRfdGFiICopCi0JICAoY2gt
PmRtYS0+d29yayArIEFUQV9BSENJX0NUX09GRlNFVCArIChBVEFfQUhDSV9DVF9TSVpFICogdGFn
KSk7CisJICAoY2gtPmRtYS53b3JrICsgQVRBX0FIQ0lfQ1RfT0ZGU0VUICsgKEFUQV9BSENJX0NU
X1NJWkUqcmVxdWVzdC0+dGFnKSk7CiAKICAgICAvKiBzZXR1cCB0aGUgRklTIGZvciB0aGlzIHJl
cXVlc3QgKi8KICAgICBpZiAoIShmaXNfc2l6ZSA9IGF0YV9haGNpX3NldHVwX2ZpcyhjdHAsIHJl
cXVlc3QpKSkgewpAQCAtNjY2LDkgKzc5MCw3IEBAIGF0YV9haGNpX2JlZ2luX3RyYW5zYWN0aW9u
KHN0cnVjdCBhdGFfcmUKIAogICAgIC8qIGlmIHJlcXVlc3QgbW92ZXMgZGF0YSBzZXR1cCBhbmQg
bG9hZCBTRyBsaXN0ICovCiAgICAgaWYgKHJlcXVlc3QtPmZsYWdzICYgKEFUQV9SX1JFQUQgfCBB
VEFfUl9XUklURSkpIHsKLQlpZiAoY2gtPmRtYS0+bG9hZChjaC0+ZGV2LCByZXF1ZXN0LT5kYXRh
LCByZXF1ZXN0LT5ieXRlY291bnQsCi0JCQkgIHJlcXVlc3QtPmZsYWdzICYgQVRBX1JfUkVBRCwK
LQkJCSAgY3RwLT5wcmRfdGFiLCAmZW50cmllcykpIHsKKwlpZiAoY2gtPmRtYS5sb2FkKHJlcXVl
c3QsIGN0cC0+cHJkX3RhYiwgJmVudHJpZXMpKSB7CiAJICAgIGRldmljZV9wcmludGYocmVxdWVz
dC0+ZGV2LCAic2V0dGluZyB1cCBETUEgZmFpbGVkXG4iKTsKIAkgICAgcmVxdWVzdC0+cmVzdWx0
ID0gRUlPOwogCSAgICByZXR1cm4gQVRBX09QX0ZJTklTSEVEOwpAQCAtNjc3LDE4ICs3OTksMjEg
QEAgYXRhX2FoY2lfYmVnaW5fdHJhbnNhY3Rpb24oc3RydWN0IGF0YV9yZQogCiAgICAgLyogc2V0
dXAgdGhlIGNvbW1hbmQgbGlzdCBlbnRyeSAqLwogICAgIGNscCA9IChzdHJ1Y3QgYXRhX2FoY2lf
Y21kX2xpc3QgKikKLQkgIChjaC0+ZG1hLT53b3JrICsgQVRBX0FIQ0lfQ0xfT0ZGU0VUICsgKEFU
QV9BSENJX0NMX1NJWkUgKiB0YWcpKTsKKwkgIChjaC0+ZG1hLndvcmsgKyBBVEFfQUhDSV9DTF9P
RkZTRVQgKyAoQVRBX0FIQ0lfQ0xfU0laRSpyZXF1ZXN0LT50YWcpKTsKIAogICAgIGNscC0+cHJk
X2xlbmd0aCA9IGVudHJpZXM7Ci0gICAgY2xwLT5jbWRfZmxhZ3MgPSAocmVxdWVzdC0+ZmxhZ3Mg
JiBBVEFfUl9XUklURSA/ICgxPDw2KSA6IDApIHwKLQkJICAgICAocmVxdWVzdC0+ZmxhZ3MgJiBB
VEFfUl9BVEFQSSA/ICgoMTw8NSkgfCAoMTw8NykpIDogMCkgfAotCQkgICAgIChmaXNfc2l6ZSAv
IHNpemVvZih1X2ludDMyX3QpKTsKKyAgICBjbHAtPmNtZF9mbGFncyA9IChyZXF1ZXN0LT5mbGFn
cyAmIEFUQV9SX1dSSVRFID8gQVRBX0FIQ0lfQ01EX1dSSVRFIDogMCkgfAorCQkgICAgIChyZXF1
ZXN0LT5mbGFncyAmIEFUQV9SX0FUQVBJID8KKwkJICAgICAgKEFUQV9BSENJX0NNRF9BVEFQSSB8
IEFUQV9BSENJX0NNRF9QUkVGRVRDSCkgOiAwKSB8CisJCSAgICAgKGZpc19zaXplIC8gc2l6ZW9m
KHVfaW50MzJfdCkpIHwKKyAgICAJCSAgICAgKHBvcnQgPDwgMTIpOwogICAgIGNscC0+Ynl0ZWNv
dW50ID0gMDsKLSAgICBjbHAtPmNtZF90YWJsZV9waHlzID0gaHRvbGU2NChjaC0+ZG1hLT53b3Jr
X2J1cyArIEFUQV9BSENJX0NUX09GRlNFVCArCi0JCQkJICAoQVRBX0FIQ0lfQ1RfU0laRSAqIHRh
ZykpOworICAgIGNscC0+Y21kX3RhYmxlX3BoeXMgPSBodG9sZTY0KGNoLT5kbWEud29ya19idXMg
KyBBVEFfQUhDSV9DVF9PRkZTRVQgKworCQkJCSAgKEFUQV9BSENJX0NUX1NJWkUgKiByZXF1ZXN0
LT50YWcpKTsKIAogICAgIC8qIGNsZWFyIGV2ZW50dWFsIEFDVElWRSBiaXQgKi8KLSAgICBBVEFf
SURYX09VVEwoY2gsIEFUQV9TQUNUSVZFLCBBVEFfSURYX0lOTChjaCwgQVRBX1NBQ1RJVkUpICYg
KDEgPDwgdGFnKSk7CisgICAgQVRBX0lEWF9PVVRMKGNoLCBBVEFfU0FDVElWRSwKKwkJIEFUQV9J
RFhfSU5MKGNoLCBBVEFfU0FDVElWRSkgJiAoMSA8PCByZXF1ZXN0LT50YWcpKTsKIAogICAgIC8q
IHNldCBjb21tYW5kIHR5cGUgYml0ICovCiAgICAgaWYgKHJlcXVlc3QtPmZsYWdzICYgQVRBX1Jf
QVRBUEkpCkBAIC03MDAsOCArODI1LDExIEBAIGF0YV9haGNpX2JlZ2luX3RyYW5zYWN0aW9uKHN0
cnVjdCBhdGFfcmUKIAkJIEFUQV9JTkwoY3Rsci0+cl9yZXMyLCBBVEFfQUhDSV9QX0NNRCArIG9m
ZnNldCkgJgogCQkgfkFUQV9BSENJX1BfQ01EX0FUQVBJKTsKIAorICAgIC8qIHNldCBQTSBwb3J0
IHRvIGFkZHJlc3MgKi8KKyAgICAvL0FUQV9PVVRMKGN0bHItPnJfcmVzMiwgQVRBX0FIQ0lfUF9G
QlMgKyBvZmZzZXQsIChwb3J0IDw8IDgpIHwgMHgwMDAwMDAwMSk7CisKICAgICAvKiBpc3N1ZSBj
b21tYW5kIHRvIGNvbnRyb2xsZXIgKi8KLSAgICBBVEFfT1VUTChjdGxyLT5yX3JlczIsIEFUQV9B
SENJX1BfQ0kgKyBvZmZzZXQsICgxIDw8IHRhZykpOworICAgIEFUQV9PVVRMKGN0bHItPnJfcmVz
MiwgQVRBX0FIQ0lfUF9DSSArIG9mZnNldCwgKDEgPDwgcmVxdWVzdC0+dGFnKSk7CiAgICAgCiAg
ICAgaWYgKCEocmVxdWVzdC0+ZmxhZ3MgJiBBVEFfUl9BVEFQSSkpIHsKIAkvKiBkZXZpY2UgcmVz
ZXQgZG9lc24ndCBpbnRlcnJ1cHQgKi8KQEAgLTczNCwxMSArODYyLDEwIEBAIHN0YXRpYyBpbnQK
IGF0YV9haGNpX2VuZF90cmFuc2FjdGlvbihzdHJ1Y3QgYXRhX3JlcXVlc3QgKnJlcXVlc3QpCiB7
CiAgICAgc3RydWN0IGF0YV9wY2lfY29udHJvbGxlciAqY3Rscj1kZXZpY2VfZ2V0X3NvZnRjKEdS
QU5EUEFSRU5UKHJlcXVlc3QtPmRldikpOwotICAgIHN0cnVjdCBhdGFfY2hhbm5lbCAqY2ggPSBk
ZXZpY2VfZ2V0X3NvZnRjKGRldmljZV9nZXRfcGFyZW50KHJlcXVlc3QtPmRldikpOworICAgIHN0
cnVjdCBhdGFfY2hhbm5lbCAqY2ggPSBkZXZpY2VfZ2V0X3NvZnRjKHJlcXVlc3QtPnBhcmVudCk7
CiAgICAgc3RydWN0IGF0YV9haGNpX2NtZF9saXN0ICpjbHA7CiAgICAgdV9pbnQzMl90IHRmX2Rh
dGE7CiAgICAgaW50IG9mZnNldCA9IGNoLT51bml0IDw8IDc7Ci0gICAgaW50IHRhZyA9IDA7CiAK
ICAgICAvKiBraWxsIHRoZSB0aW1lb3V0ICovCiAgICAgY2FsbG91dF9zdG9wKCZyZXF1ZXN0LT5j
YWxsb3V0KTsKQEAgLTc1MSwzMSArODc4LDE0MCBAQCBhdGFfYWhjaV9lbmRfdHJhbnNhY3Rpb24o
c3RydWN0IGF0YV9yZXF1CiAgICAgaWYgKHJlcXVlc3QtPnN0YXR1cyAmIEFUQV9TX0VSUk9SKSAg
CiAJcmVxdWVzdC0+ZXJyb3IgPSB0Zl9kYXRhID4+IDg7CiAKKyAgICAvKiBvbiBjb250cm9sIGNv
bW1hbmRzIHJlYWQgYmFjayByZWdpc3RlcnMgdG8gdGhlIHJlcXVlc3Qgc3RydWN0ICovCisgICAg
aWYgKHJlcXVlc3QtPmZsYWdzICYgQVRBX1JfQ09OVFJPTCkgeworCXN0cnVjdCBhdGFfZGV2aWNl
ICphdGFkZXYgPSBkZXZpY2VfZ2V0X3NvZnRjKHJlcXVlc3QtPmRldik7CisJdV9pbnQ4X3QgKmZp
cyA9IGNoLT5kbWEud29yayArIEFUQV9BSENJX0ZCX09GRlNFVCArIDB4NDA7CisKKwlyZXF1ZXN0
LT51LmF0YS5jb3VudCA9IGZpc1sxMl0gfCAoKHVfaW50MTZfdClmaXNbMTNdIDw8IDgpOworCXJl
cXVlc3QtPnUuYXRhLmxiYSA9IGZpc1s0XSB8ICgodV9pbnQ2NF90KWZpc1s1XSA8PCA4KSB8CisJ
CQkgICAgICgodV9pbnQ2NF90KWZpc1s2XSA8PCAxNik7CisJaWYgKGF0YWRldi0+ZmxhZ3MgJiBB
VEFfRF80OEJJVF9BQ1RJVkUpCisJICAgIHJlcXVlc3QtPnUuYXRhLmxiYSB8PSAoKHVfaW50NjRf
dClmaXNbOF0gPDwgMjQpIHwKKwkJCQkgICgodV9pbnQ2NF90KWZpc1s5XSA8PCAzMikgfAorCQkJ
CSAgKCh1X2ludDY0X3QpZmlzWzEwXSA8PCA0MCk7CisJZWxzZQorCSAgICByZXF1ZXN0LT51LmF0
YS5sYmEgfD0gKCh1X2ludDY0X3QpKGZpc1s3XSAmIDB4MGYpIDw8IDI0KTsKKyAgICB9CisKICAg
ICAvKiByZWNvcmQgaG93IG11Y2ggZGF0YSB3ZSBhY3R1YWxseSBtb3ZlZCAqLwogICAgIGNscCA9
IChzdHJ1Y3QgYXRhX2FoY2lfY21kX2xpc3QgKikKLQkgIChjaC0+ZG1hLT53b3JrICsgQVRBX0FI
Q0lfQ0xfT0ZGU0VUICsgKEFUQV9BSENJX0NMX1NJWkUgKiB0YWcpKTsKKwkgIChjaC0+ZG1hLndv
cmsgKyBBVEFfQUhDSV9DTF9PRkZTRVQgKyAoQVRBX0FIQ0lfQ0xfU0laRSpyZXF1ZXN0LT50YWcp
KTsKICAgICByZXF1ZXN0LT5kb25lY291bnQgPSBjbHAtPmJ5dGVjb3VudDsKIAogICAgIC8qIHJl
bGVhc2UgU0cgbGlzdCBldGMgKi8KLSAgICBjaC0+ZG1hLT51bmxvYWQoY2gtPmRldik7CisgICAg
Y2gtPmRtYS51bmxvYWQocmVxdWVzdCk7CiAKICAgICByZXR1cm4gQVRBX09QX0ZJTklTSEVEOwog
fQogCi1zdGF0aWMgdm9pZAotYXRhX2FoY2lfcmVzZXQoZGV2aWNlX3QgZGV2KQorc3RhdGljIGlu
dAorYXRhX2FoY2lfaXNzdWVfY21kKGRldmljZV90IGRldiwgdV9pbnQxNl90IGZsYWdzLCBpbnQg
dGltZW91dCkKIHsKICAgICBzdHJ1Y3QgYXRhX3BjaV9jb250cm9sbGVyICpjdGxyID0gZGV2aWNl
X2dldF9zb2Z0YyhkZXZpY2VfZ2V0X3BhcmVudChkZXYpKTsKICAgICBzdHJ1Y3QgYXRhX2NoYW5u
ZWwgKmNoID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOwotICAgIHVfaW50MzJfdCBjbWQsIHNpZ25h
dHVyZTsKKyAgICBzdHJ1Y3QgYXRhX2FoY2lfY21kX2xpc3QgKmNscCA9CisJKHN0cnVjdCBhdGFf
YWhjaV9jbWRfbGlzdCAqKShjaC0+ZG1hLndvcmsgKyBBVEFfQUhDSV9DTF9PRkZTRVQpOworICAg
IHN0cnVjdCBhdGFfYWhjaV9jbWRfdGFiICpjdHAgPQorCShzdHJ1Y3QgYXRhX2FoY2lfY21kX3Rh
YiAqKShjaC0+ZG1hLndvcmsgKyBBVEFfQUhDSV9DVF9PRkZTRVQpOworICAgIHVfaW50MzJfdCBz
dGF0dXMgPSAwOwogICAgIGludCBvZmZzZXQgPSBjaC0+dW5pdCA8PCA3OwotICAgIGludCB0aW1l
b3V0OworICAgIGludCBwb3J0ID0gKGN0cC0+Y2Zpc1sxXSAmIDB4MGYpOworICAgIGludCBjb3Vu
dDsKIAotICAgIGlmICghKEFUQV9JTkwoY3Rsci0+cl9yZXMyLCBBVEFfQUhDSV9QSSkgJiAoMSA8
PCBjaC0+dW5pdCkpKSB7Ci0JZGV2aWNlX3ByaW50ZihkZXYsICJwb3J0IG5vdCBpbXBsZW1lbnRl
ZFxuIik7Ci0JcmV0dXJuOworICAgIGNscC0+cHJkX2xlbmd0aCA9IDA7CisgICAgY2xwLT5jbWRf
ZmxhZ3MgPSAoMjAgLyBzaXplb2YodV9pbnQzMl90KSkgfCBmbGFncyB8IChwb3J0IDw8IDEyKTsK
KyAgICBjbHAtPmJ5dGVjb3VudCA9IDA7CisgICAgY2xwLT5jbWRfdGFibGVfcGh5cyA9IGh0b2xl
NjQoY2gtPmRtYS53b3JrX2J1cyArIEFUQV9BSENJX0NUX09GRlNFVCk7CisKKyAgICAvKiBzZXQg
UE0gcG9ydCAqLworICAgIEFUQV9PVVRMKGN0bHItPnJfcmVzMiwgQVRBX0FIQ0lfUF9GQlMgKyBv
ZmZzZXQsIChwb3J0IDw8IDgpIHwgMHgwMDAwMDAwMSk7CisKKyAgICAvKiBpc3N1ZSBjb21tYW5k
IHRvIGNvbnRyb2xsZXIgKi8KKyAgICBBVEFfT1VUTChjdGxyLT5yX3JlczIsIEFUQV9BSENJX1Bf
Q0kgKyBvZmZzZXQsIDEpOworCisgICAgLyogcG9sbCBmb3IgY29tbWFuZCBmaW5pc2hlZCAqLwor
ICAgIGZvciAoY291bnQgPSAwOyBjb3VudCA8IHRpbWVvdXQ7IGNvdW50KyspIHsKKyAgICAgICAg
REVMQVkoMTAwMCk7CisgICAgICAgIGlmICghKChzdGF0dXMgPSBBVEFfSU5MKGN0bHItPnJfcmVz
MiwgQVRBX0FIQ0lfUF9DSSArIG9mZnNldCkpICYgMSkpCisgICAgICAgICAgICBicmVhazsKKyAg
ICB9CisKKyAgICAvKiBjbGVhciBpbnRlcnJ1cHRzICovCisgICAgQVRBX09VVEwoY3Rsci0+cl9y
ZXMyLCBBVEFfQUhDSV9QX0lTICsgb2Zmc2V0LAorCSAgICAgQVRBX0lOTChjdGxyLT5yX3JlczIs
IEFUQV9BSENJX1BfSVMgKyBvZmZzZXQpKTsKKworICAgIGlmIChib290dmVyYm9zZSkKKwlkZXZp
Y2VfcHJpbnRmKGRldiwgImFoY2lfaXNzdWVfY21kIHRpbWU9JWRtcyBjbnQ9JWRtcyBzdGF0dXM9
JTA4eFxuIiwKKwkJICAgICAgdGltZW91dCwgY291bnQsIHN0YXR1cyk7CisgICAgaWYgKHRpbWVv
dXQgJiYgKGNvdW50ID49IHRpbWVvdXQpKQorCXJldHVybiBFSU87CisKKyAgICByZXR1cm4gMDsK
K30KKworc3RhdGljIGludAorYXRhX2FoY2lfcG1fcmVhZChkZXZpY2VfdCBkZXYsIGludCBwb3J0
LCBpbnQgcmVnLCB1X2ludDMyX3QgKnJlc3VsdCkKK3sKKyAgICBzdHJ1Y3QgYXRhX2NoYW5uZWwg
KmNoID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworICAgIHN0cnVjdCBhdGFfYWhjaV9jbWRfdGFi
ICpjdHAgPQorCShzdHJ1Y3QgYXRhX2FoY2lfY21kX3RhYiAqKShjaC0+ZG1hLndvcmsgKyBBVEFf
QUhDSV9DVF9PRkZTRVQpOworICAgIHVfaW50OF90ICpmaXMgPSBjaC0+ZG1hLndvcmsgKyBBVEFf
QUhDSV9GQl9PRkZTRVQgKyAweDQwOworCisgICAgYnplcm8oY3RwLT5jZmlzLCA2NCk7CisgICAg
Y3RwLT5jZmlzWzBdID0gMHgyNzsJLyogaG9zdCB0byBkZXZpY2UgKi8KKyAgICBjdHAtPmNmaXNb
MV0gPSAweDhmOwkvKiBjb21tYW5kIEZJUyB0byBQTSBwb3J0ICovCisgICAgY3RwLT5jZmlzWzJd
ID0gQVRBX1JFQURfUE07CisgICAgY3RwLT5jZmlzWzNdID0gcmVnOworICAgIGN0cC0+Y2Zpc1s3
XSA9IHBvcnQgfCBBVEFfRF9MQkE7CisgICAgY3RwLT5jZmlzWzE1XSA9IEFUQV9BXzRCSVQ7CisK
KyAgICBpZiAoYXRhX2FoY2lfaXNzdWVfY21kKGRldiwgMCwgMTApKSB7CisJZGV2aWNlX3ByaW50
ZihkZXYsICJlcnJvciByZWFkaW5nIFBNIHBvcnRcbiIpOworCXJldHVybiBFSU87CiAgICAgfQot
ICAgIGNoLT5kZXZpY2VzID0gMDsKKworICAgICpyZXN1bHQgPSBmaXNbMTJdIHwgKGZpc1s0XSA8
PCA4KSB8IChmaXNbNV0gPDwgMTYpIHwgKGZpc1s2XSA8PCAyNCk7CisgICAgcmV0dXJuIDA7Cit9
CisKK3N0YXRpYyBpbnQKK2F0YV9haGNpX3BtX3dyaXRlKGRldmljZV90IGRldiwgaW50IHBvcnQs
IGludCByZWcsIHVfaW50MzJfdCB2YWx1ZSkKK3sKKyAgICBzdHJ1Y3QgYXRhX3BjaV9jb250cm9s
bGVyICpjdGxyID0gZGV2aWNlX2dldF9zb2Z0YyhkZXZpY2VfZ2V0X3BhcmVudChkZXYpKTsKKyAg
ICBzdHJ1Y3QgYXRhX2NoYW5uZWwgKmNoID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworICAgIHN0
cnVjdCBhdGFfYWhjaV9jbWRfdGFiICpjdHAgPQorCShzdHJ1Y3QgYXRhX2FoY2lfY21kX3RhYiAq
KShjaC0+ZG1hLndvcmsgKyBBVEFfQUhDSV9DVF9PRkZTRVQpOworICAgIGludCBvZmZzZXQgPSBj
aC0+dW5pdCA8PCA3OworCisgICAgYnplcm8oY3RwLT5jZmlzLCA2NCk7CisgICAgY3RwLT5jZmlz
WzBdID0gMHgyNzsJLyogaG9zdCB0byBkZXZpY2UgKi8KKyAgICBjdHAtPmNmaXNbMV0gPSAweDhm
OwkvKiBjb21tYW5kIEZJUyB0byBQTSBwb3J0ICovCisgICAgY3RwLT5jZmlzWzJdID0gQVRBX1dS
SVRFX1BNOworICAgIGN0cC0+Y2Zpc1szXSA9IHJlZzsKKyAgICBjdHAtPmNmaXNbN10gPSBwb3J0
IHwgQVRBX0RfTEJBOworICAgIGN0cC0+Y2Zpc1sxMl0gPSB2YWx1ZSAmIDB4ZmY7CisgICAgY3Rw
LT5jZmlzWzRdID0gKHZhbHVlID4+IDgpICYgMHhmZjs7CisgICAgY3RwLT5jZmlzWzVdID0gKHZh
bHVlID4+IDE2KSAmIDB4ZmY7OworICAgIGN0cC0+Y2Zpc1s2XSA9ICh2YWx1ZSA+PiAyNCkgJiAw
eGZmOzsKKyAgICBjdHAtPmNmaXNbMTVdID0gQVRBX0FfNEJJVDsKKworICAgIGlmIChhdGFfYWhj
aV9pc3N1ZV9jbWQoZGV2LCAwLCAxMDApKSB7CisJZGV2aWNlX3ByaW50ZihkZXYsICJlcnJvciB3
cml0aW5nIFBNIHBvcnRcbiIpOworCXJldHVybiBBVEFfRV9BQk9SVDsKKyAgICB9CisKKyAgICBy
ZXR1cm4gKEFUQV9JTkwoY3Rsci0+cl9yZXMyLCBBVEFfQUhDSV9QX1RGRCArIG9mZnNldCkgPj4g
OCkgJiAweGZmOworfQorCitzdGF0aWMgdm9pZAorYXRhX2FoY2lfcmVzdGFydChkZXZpY2VfdCBk
ZXYpCit7CisgICAgc3RydWN0IGF0YV9wY2lfY29udHJvbGxlciAqY3RsciA9IGRldmljZV9nZXRf
c29mdGMoZGV2aWNlX2dldF9wYXJlbnQoZGV2KSk7CisgICAgc3RydWN0IGF0YV9jaGFubmVsICpj
aCA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKKyAgICB1X2ludDMyX3QgY21kOworICAgIGludCBv
ZmZzZXQgPSBjaC0+dW5pdCA8PCA3OworICAgIGludCB0aW1lb3V0OwogCiAgICAgLyoga2lsbCBv
ZmYgYWxsIGFjdGl2aXR5IG9uIHRoaXMgY2hhbm5lbCAqLwogICAgIGNtZCA9IEFUQV9JTkwoY3Rs
ci0+cl9yZXMyLCBBVEFfQUhDSV9QX0NNRCArIG9mZnNldCk7CkBAIC03ODYsNyArMTAyMiw3IEBA
IGF0YV9haGNpX3Jlc2V0KGRldmljZV90IGRldikKICAgICB0aW1lb3V0ID0gMDsKICAgICBkbyB7
CiAJREVMQVkoMTAwMCk7Ci0JaWYgKHRpbWVvdXQrKyA+IDUwMCkgeworCWlmICh0aW1lb3V0Kysg
PiAxMDAwKSB7CiAJICAgIGRldmljZV9wcmludGYoZGV2LCAic3RvcHBpbmcgQUhDSSBlbmdpbmUg
ZmFpbGVkXG4iKTsKIAkgICAgYnJlYWs7CiAJfQpAQCAtODAxLDcgKzEwMzcsNyBAQCBhdGFfYWhj
aV9yZXNldChkZXZpY2VfdCBkZXYpCiAJdGltZW91dCA9IDA7CiAJZG8gewogCSAgICBERUxBWSgx
MDAwKTsKLQkgICAgaWYgKHRpbWVvdXQrKyA+IDUwMCkgeworCSAgICBpZiAodGltZW91dCsrID4g
MTAwMCkgewogCQlkZXZpY2VfcHJpbnRmKGRldiwgImV4ZWN1dGluZyBDTE8gZmFpbGVkXG4iKTsK
IAkJYnJlYWs7CiAJICAgIH0KQEAgLTgwOSw0NSArMTA0NSwxNTEgQEAgYXRhX2FoY2lfcmVzZXQo
ZGV2aWNlX3QgZGV2KQogCXdoaWxlIChBVEFfSU5MKGN0bHItPnJfcmVzMiwgQVRBX0FIQ0lfUF9D
TUQrb2Zmc2V0KSZBVEFfQUhDSV9QX0NNRF9DTE8pOwogICAgIH0KIAotICAgIC8qIHJlc2V0IFBI
WSBhbmQgZGVjaWRlIHdoYXQgaXMgcHJlc2VudCAqLwotICAgIGlmIChhdGFfc2F0YV9waHlfcmVz
ZXQoZGV2KSkgeworICAgIC8qIGNsZWFyIFNBVEEgZXJyb3IgcmVnaXN0ZXIgKi8KKyAgICBBVEFf
SURYX09VVEwoY2gsIEFUQV9TRVJST1IsIEFUQV9JRFhfSU5MKGNoLCBBVEFfU0VSUk9SKSk7CisK
KyAgICAvKiBjbGVhciBhbnkgaW50ZXJydXB0cyBwZW5kaW5nIG9uIHRoaXMgY2hhbm5lbCAqLwor
ICAgIEFUQV9PVVRMKGN0bHItPnJfcmVzMiwgQVRBX0FIQ0lfUF9JUyArIG9mZnNldCwKKwkgICAg
IEFUQV9JTkwoY3Rsci0+cl9yZXMyLCBBVEFfQUhDSV9QX0lTICsgb2Zmc2V0KSk7CisKKyAgICAv
KiBzdGFydCBvcGVyYXRpb25zIG9uIHRoaXMgY2hhbm5lbCAqLworICAgIGNtZCA9IEFUQV9JTkwo
Y3Rsci0+cl9yZXMyLCBBVEFfQUhDSV9QX0NNRCArIG9mZnNldCk7CisgICAgQVRBX09VVEwoY3Rs
ci0+cl9yZXMyLCBBVEFfQUhDSV9QX0NNRCArIG9mZnNldCwKKwkgICAgIGNtZCB8IChBVEFfQUhD
SV9QX0NNRF9GUkUgfCBBVEFfQUhDSV9QX0NNRF9TVCkgfAorCSAgICAgKGNoLT5kZXZpY2VzICYg
QVRBX1BPUlRNVUxUSVBMSUVSID8gQVRBX0FIQ0lfUF9DTURfUE1BIDogMCkpOworfQorCitzdGF0
aWMgdV9pbnQzMl90CithdGFfYWhjaV9zb2Z0cmVzZXQoZGV2aWNlX3QgZGV2LCBpbnQgcG9ydCkK
K3sKKyAgICBzdHJ1Y3QgYXRhX3BjaV9jb250cm9sbGVyICpjdGxyID0gZGV2aWNlX2dldF9zb2Z0
YyhkZXZpY2VfZ2V0X3BhcmVudChkZXYpKTsKKyAgICBzdHJ1Y3QgYXRhX2NoYW5uZWwgKmNoID0g
ZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworICAgIGludCBvZmZzZXQgPSBjaC0+dW5pdCA8PCA3Owor
ICAgIGludCB0aW1lb3V0ID0gMDsKKyNpZmRlZiBBSENJX1BNCisgICAgc3RydWN0IGF0YV9haGNp
X2NtZF90YWIgKmN0cCA9CisJKHN0cnVjdCBhdGFfYWhjaV9jbWRfdGFiICopKGNoLT5kbWEud29y
ayArIEFUQV9BSENJX0NUX09GRlNFVCk7CisKKyAgICAvKiBraWNrIGNvbnRyb2xsZXIgaW50byBz
YW5lIHN0YXRlIGlmIG5lZWRlZCAqLworICAgIGF0YV9haGNpX3Jlc3RhcnQoZGV2KTsKKworICAg
IC8qIHB1bGwgcmVzZXQgYWN0aXZlICovCisgICAgYnplcm8oY3RwLT5jZmlzLCA2NCk7CisgICAg
Y3RwLT5jZmlzWzBdID0gMHgyNzsKKyAgICBjdHAtPmNmaXNbMV0gPSBwb3J0ICYgMHgwZjsKKyAg
ICAvL2N0cC0+Y2Zpc1s3XSA9IEFUQV9EX0xCQSB8IEFUQV9EX0lCTTsKKyAgICBjdHAtPmNmaXNb
MTVdID0gKEFUQV9BXzRCSVQgfCBBVEFfQV9SRVNFVCk7CisKKyAgICBpZiAoYXRhX2FoY2lfaXNz
dWVfY21kKGRldiwgQVRBX0FIQ0lfQ01EX1JFU0VUIHwgQVRBX0FIQ0lfQ01EX0NMUl9CVVNZLDEw
MCkpCisJZGV2aWNlX3ByaW50ZihkZXYsICJzZXR0aW5nIFNSU1QgZmFpbGVkID8/XG4iKTsKKwkv
L3JldHVybiAtMTsKIAotCS8qIGNsZWFyIGFueSBpbnRlcnJ1cHRzIHBlbmRpbmcgb24gdGhpcyBj
aGFubmVsICovCi0JQVRBX09VVEwoY3Rsci0+cl9yZXMyLCBBVEFfQUhDSV9QX0lTICsgb2Zmc2V0
LAotCQkgQVRBX0lOTChjdGxyLT5yX3JlczIsIEFUQV9BSENJX1BfSVMgKyBvZmZzZXQpKTsKKyAg
ICBhdGFfdWRlbGF5KDUwMDApOwogCi0JLyogY2xlYXIgU0FUQSBlcnJvciByZWdpc3RlciAqLwot
CUFUQV9JRFhfT1VUTChjaCwgQVRBX1NFUlJPUiwgQVRBX0lEWF9JTkwoY2gsIEFUQV9TRVJST1Ip
KTsKKyAgICAvKiBwdWxsIHJlc2V0IGluYWN0aXZlIC0+IGRldmljZSBzb2Z0cmVzZXQgKi8KKyAg
ICBiemVybyhjdHAtPmNmaXMsIDY0KTsKKyAgICBjdHAtPmNmaXNbMF0gPSAweDI3OworICAgIGN0
cC0+Y2Zpc1sxXSA9IHBvcnQgJiAweDBmOworICAgIC8vY3RwLT5jZmlzWzddID0gQVRBX0RfTEJB
IHwgQVRBX0RfSUJNOworICAgIGN0cC0+Y2Zpc1sxNV0gPSBBVEFfQV80QklUOworICAgIGlmIChh
dGFfYWhjaV9pc3N1ZV9jbWQoZGV2LCAwLCAwKSkKKwlyZXR1cm4gLTE7CisKKyAgICBhdGFfdWRl
bGF5KDE1MDAwMCk7CisKKyNlbmRpZgorICAgIGRvIHsKKwkgICAgREVMQVkoMTAwMCk7CisJICAg
IGlmICh0aW1lb3V0KysgPiAxMDAwKSB7CisJCWRldmljZV9wcmludGYoZGV2LCAic3RpbGwgQlVT
WSBhZnRlciBzb2Z0cmVzZXRcbiIpOworCQlicmVhazsKKwkgICAgfQorICAgIH0gd2hpbGUgKEFU
QV9JTkwoY3Rsci0+cl9yZXMyLCBBVEFfQUhDSV9QX1RGRCArIG9mZnNldCkgJiBBVEFfU19CVVNZ
KTsKKyAgICBpZiAoYm9vdHZlcmJvc2UpCisJZGV2aWNlX3ByaW50ZihkZXYsICJCVVNZIHdhaXQg
dGltZT0lZG1zXG4iLCB0aW1lb3V0KTsKIAotCS8qIHN0YXJ0IG9wZXJhdGlvbnMgb24gdGhpcyBj
aGFubmVsICovCisgICAgcmV0dXJuIEFUQV9JTkwoY3Rsci0+cl9yZXMyLCBBVEFfQUhDSV9QX1NJ
RyArIG9mZnNldCk7Cit9CisKK3N0YXRpYyB2b2lkCithdGFfYWhjaV9yZXNldChkZXZpY2VfdCBk
ZXYpCit7CisgICAgc3RydWN0IGF0YV9wY2lfY29udHJvbGxlciAqY3RsciA9IGRldmljZV9nZXRf
c29mdGMoZGV2aWNlX2dldF9wYXJlbnQoZGV2KSk7CisgICAgc3RydWN0IGF0YV9jaGFubmVsICpj
aCA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKKyAgICB1X2ludDY0X3Qgd29yazsKKyAgICB1X2lu
dDMyX3QgY21kLCBzaWduYXR1cmU7CisgICAgaW50IG9mZnNldCA9IGNoLT51bml0IDw8IDc7CisK
KyAgICBpZiAoIShBVEFfSU5MKGN0bHItPnJfcmVzMiwgQVRBX0FIQ0lfUEkpICYgKDEgPDwgY2gt
PnVuaXQpKSkgeworCWRldmljZV9wcmludGYoZGV2LCAicG9ydCBub3QgaW1wbGVtZW50ZWRcbiIp
OworCXJldHVybjsKKyAgICB9CisKKyAgICAvKiBzZXR1cCB3b3JrIGFyZWFzICovCisgICAgd29y
ayA9IGNoLT5kbWEud29ya19idXMgKyBBVEFfQUhDSV9DTF9PRkZTRVQ7CisgICAgQVRBX09VVEwo
Y3Rsci0+cl9yZXMyLCBBVEFfQUhDSV9QX0NMQiArIG9mZnNldCwgd29yayAmIDB4ZmZmZmZmZmYp
OworICAgIEFUQV9PVVRMKGN0bHItPnJfcmVzMiwgQVRBX0FIQ0lfUF9DTEJVICsgb2Zmc2V0LCB3
b3JrID4+IDMyKTsKKworICAgIHdvcmsgPSBjaC0+ZG1hLndvcmtfYnVzICsgQVRBX0FIQ0lfRkJf
T0ZGU0VUOworICAgIEFUQV9PVVRMKGN0bHItPnJfcmVzMiwgQVRBX0FIQ0lfUF9GQiArIG9mZnNl
dCwgd29yayAmIDB4ZmZmZmZmZmYpOyAKKyAgICBBVEFfT1VUTChjdGxyLT5yX3JlczIsIEFUQV9B
SENJX1BfRkJVICsgb2Zmc2V0LCB3b3JrID4+IDMyKTsKKworICAgIC8qIGVuYWJsZSB3YW50ZWQg
cG9ydCBpbnRlcnJ1cHRzICovCisgICAgQVRBX09VVEwoY3Rsci0+cl9yZXMyLCBBVEFfQUhDSV9Q
X0lFICsgb2Zmc2V0LAorCSAgICAgKEFUQV9BSENJX1BfSVhfQ1BEIHwgQVRBX0FIQ0lfUF9JWF9U
RkUgfCBBVEFfQUhDSV9QX0lYX0hCRiB8CisJICAgICAgQVRBX0FIQ0lfUF9JWF9IQkQgfCBBVEFf
QUhDSV9QX0lYX0lGIHwgQVRBX0FIQ0lfUF9JWF9PRiB8CisJICAgICAgQVRBX0FIQ0lfUF9JWF9Q
UkMgfCBBVEFfQUhDSV9QX0lYX1BDIHwgQVRBX0FIQ0lfUF9JWF9EUCB8CisJICAgICAgQVRBX0FI
Q0lfUF9JWF9VRiB8IEFUQV9BSENJX1BfSVhfU0RCIHwgQVRBX0FIQ0lfUF9JWF9EUyB8CisJICAg
ICAgQVRBX0FIQ0lfUF9JWF9QUyB8IEFUQV9BSENJX1BfSVhfREhSKSk7CisKKyAgICAvKiBhY3Rp
dmF0ZSB0aGUgY2hhbm5lbCBhbmQgcG93ZXIvc3BpbiB1cCBkZXZpY2UgKi8KKyAgICBBVEFfT1VU
TChjdGxyLT5yX3JlczIsIEFUQV9BSENJX1BfQ01EICsgb2Zmc2V0LAorCSAgICAgKEFUQV9BSENJ
X1BfQ01EX0FDVElWRSB8IEFUQV9BSENJX1BfQ01EX1BPRCB8IEFUQV9BSENJX1BfQ01EX1NVRCkp
OworCisgICAgYXRhX2FoY2lfcmVzdGFydChkZXYpOworCisgICAgLyogZW5hYmxlIEZJUyBiYXNl
ZCBzd2l0Y2hpbmcgKi8KKyAgICAvL0FUQV9PVVRMKGN0bHItPnJfcmVzMiwgQVRBX0FIQ0lfUF9G
QlMgKyBvZmZzZXQsIDB4MDAwMDAwMDMpOworCisgICAgaWYgKCFhdGFfc2F0YV9waHlfcmVzZXQo
ZGV2KSkgeworCWlmIChib290dmVyYm9zZSkKKwkgICAgZGV2aWNlX3ByaW50ZihkZXYsICJwaHkg
cmVzZXQgZm91bmQgbm8gZGV2aWNlXG4iKTsKKwljaC0+ZGV2aWNlcyA9IDA7CisKKwkvKiBraWxs
IG9mZiBhbGwgYWN0aXZpdHkgb24gdGhpcyBjaGFubmVsICovCisJY21kID0gQVRBX0lOTChjdGxy
LT5yX3JlczIsIEFUQV9BSENJX1BfQ01EICsgb2Zmc2V0KTsKIAlBVEFfT1VUTChjdGxyLT5yX3Jl
czIsIEFUQV9BSENJX1BfQ01EICsgb2Zmc2V0LAotCQkgKEFUQV9BSENJX1BfQ01EX0FDVElWRSB8
IEFUQV9BSENJX1BfQ01EX0ZSRSB8Ci0JCSAgQVRBX0FIQ0lfUF9DTURfUE9EIHwgQVRBX0FIQ0lf
UF9DTURfU1VEIHwgQVRBX0FIQ0lfUF9DTURfU1QpKTsKKwkJIGNtZCAmIH4oQVRBX0FIQ0lfUF9D
TURfRlJFIHwgQVRBX0FIQ0lfUF9DTURfU1QpKTsKKwlyZXR1cm47CisgICAgfQorCisgICAgLyog
b25seSBwcm9iZSBmb3IgUG9ydE11bHRpcGxpZXIgaWYgSFcgaGFzIHN1cHBvcnQgKi8KKyAgICBp
ZiAoQVRBX0lOTChjdGxyLT5yX3JlczIsIEFUQV9BSENJX0NBUCkgJiBBVEFfQUhDSV9DQVBfU1BN
KQorCXNpZ25hdHVyZSA9IGF0YV9haGNpX3NvZnRyZXNldChkZXYsIEFUQV9QTSk7CisgICAgZWxz
ZSB7CisJc2lnbmF0dXJlID0gYXRhX2FoY2lfc29mdHJlc2V0KGRldiwgMCk7CisgICAgfQorICAg
IGlmIChib290dmVyYm9zZSkKKwlkZXZpY2VfcHJpbnRmKGRldiwgIlNJR05BVFVSRTogJTA4eFxu
Iiwgc2lnbmF0dXJlKTsKIAotCXNpZ25hdHVyZSA9IEFUQV9JTkwoY3Rsci0+cl9yZXMyLCBBVEFf
QUhDSV9QX1NJRyArIG9mZnNldCk7CisgICAgc3dpdGNoIChzaWduYXR1cmUpIHsKKyAgICBjYXNl
IDB4MDAwMDAxMDE6CisJY2gtPmRldmljZXMgPSBBVEFfQVRBX01BU1RFUjsKKwlicmVhazsKKyAg
ICBjYXNlIDB4OTY2OTAxMDE6CisJY2gtPmRldmljZXMgPSBBVEFfUE9SVE1VTFRJUExJRVI7CisJ
YXRhX3BtX2lkZW50aWZ5KGRldik7CisJYnJlYWs7CisgICAgY2FzZSAweGViMTQwMTAxOgorCWNo
LT5kZXZpY2VzID0gQVRBX0FUQVBJX01BU1RFUjsKKwlicmVhazsKKyAgICBkZWZhdWx0OiAvKiBT
T1MgWFhYICovCiAJaWYgKGJvb3R2ZXJib3NlKQotCSAgICBkZXZpY2VfcHJpbnRmKGRldiwgIlNJ
R05BVFVSRTogJTA4eFxuIiwgc2lnbmF0dXJlKTsKLQlzd2l0Y2ggKHNpZ25hdHVyZSkgewotCWNh
c2UgMHgwMDAwMDEwMToKLQkgICAgY2gtPmRldmljZXMgPSBBVEFfQVRBX01BU1RFUjsKLQkgICAg
YnJlYWs7Ci0JY2FzZSAweDk2NjkwMTAxOgotCSAgICBjaC0+ZGV2aWNlcyA9IEFUQV9QT1JUTVVM
VElQTElFUjsKLQkgICAgZGV2aWNlX3ByaW50ZihjaC0+ZGV2LCAiUG9ydG11bHRpcGxpZXJzIG5v
dCBzdXBwb3J0ZWQgeWV0XG4iKTsKLQkgICAgY2gtPmRldmljZXMgPSAwOwotCSAgICBicmVhazsK
LQljYXNlIDB4ZWIxNDAxMDE6Ci0JICAgIGNoLT5kZXZpY2VzID0gQVRBX0FUQVBJX01BU1RFUjsK
LQkgICAgYnJlYWs7Ci0JZGVmYXVsdDogLyogU09TIFhYWCAqLwotCSAgICBpZiAoYm9vdHZlcmJv
c2UpCi0JCWRldmljZV9wcmludGYoY2gtPmRldiwgIk5vIHNpZ25hdHVyZSwgYXN1bWluZyBkaXNr
IGRldmljZVxuIik7Ci0JICAgIGNoLT5kZXZpY2VzID0gQVRBX0FUQV9NQVNURVI7Ci0JfQorCSAg
ICBkZXZpY2VfcHJpbnRmKGRldiwgIk5vIHNpZ25hdHVyZSwgYXN1bWluZyBkaXNrIGRldmljZVxu
Iik7CisJY2gtPmRldmljZXMgPSBBVEFfQVRBX01BU1RFUjsKICAgICB9CiAgICAgaWYgKGJvb3R2
ZXJib3NlKQotICAgICAgICBkZXZpY2VfcHJpbnRmKGRldiwgImFoY2lfcmVzZXQgZGV2aWNlcz0w
eCViXG4iLCBjaC0+ZGV2aWNlcywKLSAgICAgICAgICAgICAgICAgICAgICAiXDIwXDRBVEFQSV9T
TEFWRVwzQVRBUElfTUFTVEVSXDJBVEFfU0xBVkVcMUFUQV9NQVNURVIiKTsKKyAgICAgICAgZGV2
aWNlX3ByaW50ZihkZXYsICJhaGNpX3Jlc2V0IGRldmljZXM9JTA4eFxuIiwgY2gtPmRldmljZXMp
OwogfQogCiBzdGF0aWMgdm9pZApAQCAtODYzLDcgKzEyMDUsOCBAQCBhdGFfYWhjaV9kbWFzZXRw
cmQodm9pZCAqeHNjLCBidXNfZG1hX3NlCiAJICAgIHByZFtpXS5kYmMgPSBodG9sZTMyKChzZWdz
W2ldLmRzX2xlbiAtIDEpICYgQVRBX0FIQ0lfUFJEX01BU0spOwogCX0KICAgICB9Ci0gICAgS0FT
U0VSVChuc2VncyA8PSBBVEFfRE1BX0VOVFJJRVMsICgidG9vIG1hbnkgRE1BIHNlZ21lbnQgZW50
cmllc1xuIikpOworCisgICAgS0FTU0VSVChuc2VncyA8PSBBVEFfQUhDSV9ETUFfRU5UUklFUywg
KCJ0b28gbWFueSBETUEgc2VnbWVudCBlbnRyaWVzXG4iKSk7CiAgICAgYXJncy0+bnNlZ3MgPSBu
c2VnczsKIH0KIApAQCAtODc0LDEzICsxMjE3LDExIEBAIGF0YV9haGNpX2RtYWluaXQoZGV2aWNl
X3QgZGV2KQogICAgIHN0cnVjdCBhdGFfY2hhbm5lbCAqY2ggPSBkZXZpY2VfZ2V0X3NvZnRjKGRl
dik7CiAKICAgICBhdGFfZG1haW5pdChkZXYpOwotICAgIGlmIChjaC0+ZG1hKSB7Ci0JLyogbm90
ZSBzdGFydCBhbmQgc3RvcCBhcmUgbm90IHVzZWQgaGVyZSAqLwotCWNoLT5kbWEtPnNldHByZCA9
IGF0YV9haGNpX2RtYXNldHByZDsKLQljaC0+ZG1hLT5tYXhfaW9zaXplID0gODE5MiAqIERFVl9C
U0laRTsKLQlpZiAoQVRBX0lOTChjdGxyLT5yX3JlczIsIEFUQV9BSENJX0NBUCkgJiBBVEFfQUhD
SV9DQVBfNjRCSVQpCi0JICAgIGNoLT5kbWEtPm1heF9hZGRyZXNzID0gQlVTX1NQQUNFX01BWEFE
RFI7Ci0gICAgfQorICAgIC8qIG5vdGUgc3RhcnQgYW5kIHN0b3AgYXJlIG5vdCB1c2VkIGhlcmUg
Ki8KKyAgICBjaC0+ZG1hLnNldHByZCA9IGF0YV9haGNpX2RtYXNldHByZDsKKyAgICBjaC0+ZG1h
Lm1heF9pb3NpemUgPSA4MTkyICogREVWX0JTSVpFOworICAgIGlmIChBVEFfSU5MKGN0bHItPnJf
cmVzMiwgQVRBX0FIQ0lfQ0FQKSAmIEFUQV9BSENJX0NBUF82NEJJVCkKKwljaC0+ZG1hLm1heF9h
ZGRyZXNzID0gQlVTX1NQQUNFX01BWEFERFI7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTk1Niw5ICsx
Mjk3LDkgQEAgYXRhX2FjYXJkX3N0YXR1cyhkZXZpY2VfdCBkZXYpCiAgICAgc3RydWN0IGF0YV9j
aGFubmVsICpjaCA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKIAogICAgIGlmIChjdGxyLT5jaGlw
LT5jZmcxID09IEFUUE9MRCAmJgotCUFUQV9MT0NLSU5HKGNoLT5kZXYsIEFUQV9MRl9XSElDSCkg
IT0gY2gtPnVuaXQpCisJQVRBX0xPQ0tJTkcoZGV2LCBBVEFfTEZfV0hJQ0gpICE9IGNoLT51bml0
KQogCSAgICByZXR1cm4gMDsKLSAgICBpZiAoY2gtPmRtYSAmJiAoY2gtPmRtYS0+ZmxhZ3MgJiBB
VEFfRE1BX0FDVElWRSkpIHsKKyAgICBpZiAoY2gtPmRtYS5mbGFncyAmIEFUQV9ETUFfQUNUSVZF
KSB7CiAJaW50IGJtc3RhdCA9IEFUQV9JRFhfSU5CKGNoLCBBVEFfQk1TVEFUX1BPUlQpICYgQVRB
X0JNU1RBVF9NQVNLOwogCiAJaWYgKChibXN0YXQgJiAoQVRBX0JNU1RBVF9BQ1RJVkUgfCBBVEFf
Qk1TVEFUX0lOVEVSUlVQVCkpICE9CkBAIC05ODUsNyArMTMyNiw3IEBAIGF0YV9hY2FyZF84NTBf
c2V0bW9kZShkZXZpY2VfdCBkZXYsIGludCAKICAgICBzdHJ1Y3QgYXRhX3BjaV9jb250cm9sbGVy
ICpjdGxyID0gZGV2aWNlX2dldF9zb2Z0YyhncGFyZW50KTsKICAgICBzdHJ1Y3QgYXRhX2NoYW5u
ZWwgKmNoID0gZGV2aWNlX2dldF9zb2Z0YyhkZXZpY2VfZ2V0X3BhcmVudChkZXYpKTsKICAgICBz
dHJ1Y3QgYXRhX2RldmljZSAqYXRhZGV2ID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOwotICAgIGlu
dCBkZXZubyA9IChjaC0+dW5pdCA8PCAxKSArIEFUQV9ERVYoYXRhZGV2LT51bml0KTsKKyAgICBp
bnQgZGV2bm8gPSAoY2gtPnVuaXQgPDwgMSkgKyBhdGFkZXYtPnVuaXQ7CiAgICAgaW50IGVycm9y
OwogCiAgICAgbW9kZSA9IGF0YV9saW1pdF9tb2RlKGRldiwgbW9kZSwKQEAgLTEwMjEsNyArMTM2
Miw3IEBAIGF0YV9hY2FyZF84Nlhfc2V0bW9kZShkZXZpY2VfdCBkZXYsIGludCAKICAgICBzdHJ1
Y3QgYXRhX3BjaV9jb250cm9sbGVyICpjdGxyID0gZGV2aWNlX2dldF9zb2Z0YyhncGFyZW50KTsK
ICAgICBzdHJ1Y3QgYXRhX2NoYW5uZWwgKmNoID0gZGV2aWNlX2dldF9zb2Z0YyhkZXZpY2VfZ2V0
X3BhcmVudChkZXYpKTsKICAgICBzdHJ1Y3QgYXRhX2RldmljZSAqYXRhZGV2ID0gZGV2aWNlX2dl
dF9zb2Z0YyhkZXYpOwotICAgIGludCBkZXZubyA9IChjaC0+dW5pdCA8PCAxKSArIEFUQV9ERVYo
YXRhZGV2LT51bml0KTsKKyAgICBpbnQgZGV2bm8gPSAoY2gtPnVuaXQgPDwgMSkgKyBhdGFkZXYt
PnVuaXQ7CiAgICAgaW50IGVycm9yOwogCiAKQEAgLTEyMzQsNyArMTU3NSw3IEBAIGF0YV9hbGlf
c2V0bW9kZShkZXZpY2VfdCBkZXYsIGludCBtb2RlKQogICAgIHN0cnVjdCBhdGFfcGNpX2NvbnRy
b2xsZXIgKmN0bHIgPSBkZXZpY2VfZ2V0X3NvZnRjKGdwYXJlbnQpOwogICAgIHN0cnVjdCBhdGFf
Y2hhbm5lbCAqY2ggPSBkZXZpY2VfZ2V0X3NvZnRjKGRldmljZV9nZXRfcGFyZW50KGRldikpOwog
ICAgIHN0cnVjdCBhdGFfZGV2aWNlICphdGFkZXYgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7Ci0g
ICAgaW50IGRldm5vID0gKGNoLT51bml0IDw8IDEpICsgQVRBX0RFVihhdGFkZXYtPnVuaXQpOwor
ICAgIGludCBkZXZubyA9IChjaC0+dW5pdCA8PCAxKSArIGF0YWRldi0+dW5pdDsKICAgICBpbnQg
ZXJyb3I7CiAKICAgICBtb2RlID0gYXRhX2xpbWl0X21vZGUoZGV2LCBtb2RlLCBjdGxyLT5jaGlw
LT5tYXhfZG1hKTsKQEAgLTEzMjIsMTMgKzE2NjMsMzQgQEAgYXRhX2FtZF9jaGlwaW5pdChkZXZp
Y2VfdCBkZXYpCiAgICAgaWYgKGF0YV9zZXR1cF9pbnRlcnJ1cHQoZGV2KSkKIAlyZXR1cm4gRU5Y
SU87CiAKLSAgICAvKiBkaXNhYmxlL3NldCBwcmVmZXRjaCwgcG9zdHdyaXRlICovCi0gICAgaWYg
KGN0bHItPmNoaXAtPmNmZzIgJiBBTURCVUcpCi0JcGNpX3dyaXRlX2NvbmZpZyhkZXYsIDB4NDEs
IHBjaV9yZWFkX2NvbmZpZyhkZXYsIDB4NDEsIDEpICYgMHgwZiwgMSk7Ci0gICAgZWxzZQotCXBj
aV93cml0ZV9jb25maWcoZGV2LCAweDQxLCBwY2lfcmVhZF9jb25maWcoZGV2LCAweDQxLCAxKSB8
IDB4ZjAsIDEpOworICAgIC8qIGRpc2FibGUvc2V0IHByZWZldGNoLCBwb3N0d3JpdGUgKi8KKyAg
ICBpZiAoY3Rsci0+Y2hpcC0+Y2ZnMiAmIEFNREJVRykKKwlwY2lfd3JpdGVfY29uZmlnKGRldiwg
MHg0MSwgcGNpX3JlYWRfY29uZmlnKGRldiwgMHg0MSwgMSkgJiAweDBmLCAxKTsKKyAgICBlbHNl
CisJcGNpX3dyaXRlX2NvbmZpZyhkZXYsIDB4NDEsIHBjaV9yZWFkX2NvbmZpZyhkZXYsIDB4NDEs
IDEpIHwgMHhmMCwgMSk7CisKKyAgICBjdGxyLT5zZXRtb2RlID0gYXRhX3ZpYV9mYW1pbHlfc2V0
bW9kZTsKKyAgICByZXR1cm4gMDsKK30KKworCisvKgorICogQWRhcHRlYyBjaGlwc2V0IHN1cHBv
cnQgZnVuY3Rpb25zCisgKi8KK2ludAorYXRhX2FkYXB0ZWNfaWRlbnQoZGV2aWNlX3QgZGV2KQor
eworICAgIHN0cnVjdCBhdGFfcGNpX2NvbnRyb2xsZXIgKmN0bHIgPSBkZXZpY2VfZ2V0X3NvZnRj
KGRldik7CisgICAgc3RhdGljIHN0cnVjdCBhdGFfY2hpcF9pZCBpZHNbXSA9CisgICAge3sgQVRB
X0FEQVBURUNfMTQyMCwgMCwgNCwgTVY2MFhYLCBBVEFfU0EzMDAsICIxNDIwU0EiIH0sCisgICAg
IHsgMCwgMCwgMCwgMCwgMCwgMH19OworCisgICAgaWYgKCEoY3Rsci0+Y2hpcCA9IGF0YV9tYXRj
aF9jaGlwKGRldiwgaWRzKSkpCisJcmV0dXJuIEVOWElPOworCisgICAgYXRhX3NldF9kZXNjKGRl
dik7CisgICAgY3Rsci0+Y2hpcGluaXQgPSBhdGFfbWFydmVsbF9lZG1hX2NoaXBpbml0OwogCi0g
ICAgY3Rsci0+c2V0bW9kZSA9IGF0YV92aWFfZmFtaWx5X3NldG1vZGU7CiAgICAgcmV0dXJuIDA7
CiB9CiAKQEAgLTEzOTgsNyArMTc2MCw3IEBAIGF0YV9hdGlfc2V0bW9kZShkZXZpY2VfdCBkZXYs
IGludCBtb2RlKQogICAgIHN0cnVjdCBhdGFfcGNpX2NvbnRyb2xsZXIgKmN0bHIgPSBkZXZpY2Vf
Z2V0X3NvZnRjKGdwYXJlbnQpOwogICAgIHN0cnVjdCBhdGFfY2hhbm5lbCAqY2ggPSBkZXZpY2Vf
Z2V0X3NvZnRjKGRldmljZV9nZXRfcGFyZW50KGRldikpOwogICAgIHN0cnVjdCBhdGFfZGV2aWNl
ICphdGFkZXYgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7Ci0gICAgaW50IGRldm5vID0gKGNoLT51
bml0IDw8IDEpICsgQVRBX0RFVihhdGFkZXYtPnVuaXQpOworICAgIGludCBkZXZubyA9IChjaC0+
dW5pdCA8PCAxKSArIGF0YWRldi0+dW5pdDsKICAgICBpbnQgb2Zmc2V0ID0gKGRldm5vIF4gMHgw
MSkgPDwgMzsKICAgICBpbnQgZXJyb3I7CiAgICAgdV9pbnQ4X3QgcGlvdGltaW5nc1tdID0geyAw
eDVkLCAweDQ3LCAweDM0LCAweDIyLCAweDIwLCAweDM0LCAweDIyLCAweDIwLApAQCAtMTQ5Miwx
NSArMTg1NCwxNSBAQCBhdGFfY3lyaXhfc2V0bW9kZShkZXZpY2VfdCBkZXYsIGludCBtb2RlCiB7
CiAgICAgc3RydWN0IGF0YV9jaGFubmVsICpjaCA9IGRldmljZV9nZXRfc29mdGMoZGV2aWNlX2dl
dF9wYXJlbnQoZGV2KSk7CiAgICAgc3RydWN0IGF0YV9kZXZpY2UgKmF0YWRldiA9IGRldmljZV9n
ZXRfc29mdGMoZGV2KTsKLSAgICBpbnQgZGV2bm8gPSAoY2gtPnVuaXQgPDwgMSkgKyBBVEFfREVW
KGF0YWRldi0+dW5pdCk7CisgICAgaW50IGRldm5vID0gKGNoLT51bml0IDw8IDEpICsgYXRhZGV2
LT51bml0OwogICAgIHVfaW50MzJfdCBwaW90aW1pbmdbXSA9IAogCXsgMHgwMDAwOTE3MiwgMHgw
MDAxMjE3MSwgMHgwMDAyMDA4MCwgMHgwMDAzMjAxMCwgMHgwMDA0MDAxMCB9OwogICAgIHVfaW50
MzJfdCBkbWF0aW1pbmdbXSA9IHsgMHgwMDA3Nzc3MSwgMHgwMDAxMjEyMSwgMHgwMDAwMjAyMCB9
OwogICAgIHVfaW50MzJfdCB1ZG1hdGltaW5nW10gPSB7IDB4MDA5MjEyNTAsIDB4MDA5MTExNDAs
IDB4MDA5MTEwMzAgfTsKICAgICBpbnQgZXJyb3I7CiAKLSAgICBjaC0+ZG1hLT5hbGlnbm1lbnQg
PSAxNjsKLSAgICBjaC0+ZG1hLT5tYXhfaW9zaXplID0gMTI2ICogREVWX0JTSVpFOworICAgIGNo
LT5kbWEuYWxpZ25tZW50ID0gMTY7CisgICAgY2gtPmRtYS5tYXhfaW9zaXplID0gMTI2ICogREVW
X0JTSVpFOwogCiAgICAgbW9kZSA9IGF0YV9saW1pdF9tb2RlKGRldiwgbW9kZSwgQVRBX1VETUEy
KTsKIApAQCAtMTY4MSw3ICsyMDQzLDcgQEAgYXRhX2hpZ2hwb2ludF9zZXRtb2RlKGRldmljZV90
IGRldiwgaW50IAogICAgIHN0cnVjdCBhdGFfcGNpX2NvbnRyb2xsZXIgKmN0bHIgPSBkZXZpY2Vf
Z2V0X3NvZnRjKGdwYXJlbnQpOwogICAgIHN0cnVjdCBhdGFfY2hhbm5lbCAqY2ggPSBkZXZpY2Vf
Z2V0X3NvZnRjKGRldmljZV9nZXRfcGFyZW50KGRldikpOwogICAgIHN0cnVjdCBhdGFfZGV2aWNl
ICphdGFkZXYgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7Ci0gICAgaW50IGRldm5vID0gKGNoLT51
bml0IDw8IDEpICsgQVRBX0RFVihhdGFkZXYtPnVuaXQpOworICAgIGludCBkZXZubyA9IChjaC0+
dW5pdCA8PCAxKSArIGF0YWRldi0+dW5pdDsKICAgICBpbnQgZXJyb3I7CiAgICAgdV9pbnQzMl90
IHRpbWluZ3MzM1tdWzRdID0gewogICAgIC8qICAgIEhQVDM2NiAgICAgIEhQVDM3MCAgICAgIEhQ
VDM3MiAgICAgIEhQVDM3NCAgICAgICAgICAgICAgIG1vZGUgKi8KQEAgLTE4MDAsNiArMjE2Miw3
IEBAIGF0YV9pbnRlbF9pZGVudChkZXZpY2VfdCBkZXYpCiAgICAgIHsgQVRBX0k2M1hYRVNCMl9S
MiwgMCwgQUhDSSwgMHgwMCwgQVRBX1NBMzAwLCAiNjNYWEVTQjIiIH0sCiAgICAgIHsgQVRBX0k4
MjgwMUhCX1MxLCAgMCwgQUhDSSwgMHgwMCwgQVRBX1NBMzAwLCAiSUNIOCIgfSwKICAgICAgeyBB
VEFfSTgyODAxSEJfUzIsICAwLCBBSENJLCAweDAwLCBBVEFfU0EzMDAsICJJQ0g4IiB9LAorICAg
ICB7IEFUQV9JODI4MDFIQl9SMSwgIDIsIEFIQ0ksIDB4MDAsIEFUQV9TQTMwMCwgIklDSDlSIiB9
LAogICAgICB7IEFUQV9JODI4MDFIQl9SMSwgIDAsIEFIQ0ksIDB4MDAsIEFUQV9TQTMwMCwgIklD
SDgiIH0sCiAgICAgIHsgQVRBX0k4MjgwMUhCX0FINCwgMCwgQUhDSSwgMHgwMCwgQVRBX1NBMzAw
LCAiSUNIOCIgfSwKICAgICAgeyBBVEFfSTgyODAxSEJfQUg2LCAwLCBBSENJLCAweDAwLCBBVEFf
U0EzMDAsICJJQ0g4IiB9LApAQCAtMTk2Myw3ICsyMzI2LDcgQEAgYXRhX2ludGVsX25ld19zZXRt
b2RlKGRldmljZV90IGRldiwgaW50IAogICAgIHN0cnVjdCBhdGFfcGNpX2NvbnRyb2xsZXIgKmN0
bHIgPSBkZXZpY2VfZ2V0X3NvZnRjKGdwYXJlbnQpOwogICAgIHN0cnVjdCBhdGFfY2hhbm5lbCAq
Y2ggPSBkZXZpY2VfZ2V0X3NvZnRjKGRldmljZV9nZXRfcGFyZW50KGRldikpOwogICAgIHN0cnVj
dCBhdGFfZGV2aWNlICphdGFkZXYgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7Ci0gICAgaW50IGRl
dm5vID0gKGNoLT51bml0IDw8IDEpICsgQVRBX0RFVihhdGFkZXYtPnVuaXQpOworICAgIGludCBk
ZXZubyA9IChjaC0+dW5pdCA8PCAxKSArIGF0YWRldi0+dW5pdDsKICAgICB1X2ludDMyX3QgcmVn
NDAgPSBwY2lfcmVhZF9jb25maWcoZ3BhcmVudCwgMHg0MCwgNCk7CiAgICAgdV9pbnQ4X3QgcmVn
NDQgPSBwY2lfcmVhZF9jb25maWcoZ3BhcmVudCwgMHg0NCwgMSk7CiAgICAgdV9pbnQ4X3QgcmVn
NDggPSBwY2lfcmVhZF9jb25maWcoZ3BhcmVudCwgMHg0OCwgMSk7CkBAIC0xOTg4LDUyICsyMzUx
LDU0IEBAIGF0YV9pbnRlbF9uZXdfc2V0bW9kZShkZXZpY2VfdCBkZXYsIGludCAKIAlkZXZpY2Vf
cHJpbnRmKGRldiwgIiVzc2V0dGluZyAlcyBvbiAlcyBjaGlwXG4iLAogCQkgICAgICAoZXJyb3Ip
ID8gIkZBSUxVUkUgIiA6ICIiLAogCQkgICAgICBhdGFfbW9kZTJzdHIobW9kZSksIGN0bHItPmNo
aXAtPnRleHQpOwotICAgIGlmIChlcnJvcikKLQlyZXR1cm47CisgICAgaWYgKCFlcnJvcikgewor
CWlmIChtb2RlID49IEFUQV9VRE1BMCkgeworCSAgICB1X2ludDhfdCB1dGltaW5nc1tdID0geyAw
eDAwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLCAweDEwIH07CiAKLSAgICBpZiAobW9k
ZSA+PSBBVEFfVURNQTApIHsKLQlwY2lfd3JpdGVfY29uZmlnKGdwYXJlbnQsIDB4NDgsIHJlZzQ4
IHwgKDB4MDAwMSA8PCBkZXZubyksIDIpOwotCXBjaV93cml0ZV9jb25maWcoZ3BhcmVudCwgMHg0
YSwKLQkJCSAocmVnNGEgJiB+KDB4MyA8PCAoZGV2bm8gPDwgMikpKSB8Ci0JCQkgKCgweDAxICsg
IShtb2RlICYgMHgwMSkpIDw8IChkZXZubyA8PCAyKSksIDIpOwotICAgIH0KLSAgICBlbHNlIHsK
LQlwY2lfd3JpdGVfY29uZmlnKGdwYXJlbnQsIDB4NDgsIHJlZzQ4ICYgfigweDAwMDEgPDwgZGV2
bm8pLCAyKTsKLQlwY2lfd3JpdGVfY29uZmlnKGdwYXJlbnQsIDB4NGEsIChyZWc0YSAmIH4oMHgz
IDw8IChkZXZubyA8PCAyKSkpLCAyKTsKLSAgICB9Ci0gICAgcmVnNTQgfD0gMHgwNDAwOwotICAg
IGlmIChtb2RlID49IEFUQV9VRE1BMikKLQlwY2lfd3JpdGVfY29uZmlnKGdwYXJlbnQsIDB4NTQs
IHJlZzU0IHwgKDB4MSA8PCBkZXZubyksIDIpOwotICAgIGVsc2UKLQlwY2lfd3JpdGVfY29uZmln
KGdwYXJlbnQsIDB4NTQsIHJlZzU0ICYgfigweDEgPDwgZGV2bm8pLCAyKTsKKwkgICAgcGNpX3dy
aXRlX2NvbmZpZyhncGFyZW50LCAweDQ4LCByZWc0OCB8ICgweDAwMDEgPDwgZGV2bm8pLCAyKTsK
KwkgICAgcGNpX3dyaXRlX2NvbmZpZyhncGFyZW50LCAweDRhLAorCQkJICAgICAocmVnNGEgJiB+
KDB4MyA8PCAoZGV2bm8gPDwgMikpKSB8CisJCQkgICAgICh1dGltaW5nc1ttb2RlICYgQVRBX01P
REVfTUFTS10gPDwgKGRldm5vPDwyKSksIDIpOworCX0KKwllbHNlIHsKKwkgICAgcGNpX3dyaXRl
X2NvbmZpZyhncGFyZW50LCAweDQ4LCByZWc0OCAmIH4oMHgwMDAxIDw8IGRldm5vKSwgMik7CisJ
ICAgIHBjaV93cml0ZV9jb25maWcoZ3BhcmVudCwgMHg0YSwgKHJlZzRhICYgfigweDMgPDwgKGRl
dm5vIDw8IDIpKSksMik7CisJfQorCXJlZzU0IHw9IDB4MDQwMDsKKwlpZiAobW9kZSA+PSBBVEFf
VURNQTIpCisJICAgIHJlZzU0IHw9ICgweDEgPDwgZGV2bm8pOworCWVsc2UKKwkgICAgcmVnNTQg
Jj0gfigweDEgPDwgZGV2bm8pOworCWlmIChtb2RlID49IEFUQV9VRE1BNSkKKwkgICAgcmVnNTQg
fD0gKDB4MTAwMCA8PCBkZXZubyk7CisJZWxzZSAKKwkgICAgcmVnNTQgJj0gfigweDEwMDAgPDwg
ZGV2bm8pOwogCi0gICAgaWYgKG1vZGUgPj0gQVRBX1VETUE1KQotCXBjaV93cml0ZV9jb25maWco
Z3BhcmVudCwgMHg1NCwgcmVnNTQgfCAoMHgxMDAwIDw8IGRldm5vKSwgMik7Ci0gICAgZWxzZSAK
LQlwY2lfd3JpdGVfY29uZmlnKGdwYXJlbnQsIDB4NTQsIHJlZzU0ICYgfigweDEwMDAgPDwgZGV2
bm8pLCAyKTsKKwlwY2lfd3JpdGVfY29uZmlnKGdwYXJlbnQsIDB4NTQsIHJlZzU0LCAyKTsKIAot
ICAgIHJlZzQwICY9IH4weDAwZmYwMGZmOwotICAgIHJlZzQwIHw9IDB4NDA3NzQwNzc7CisJcmVn
NDAgJj0gfjB4MDBmZjAwZmY7CisJcmVnNDAgfD0gMHg0MDc3NDA3NzsKIAotICAgIGlmIChhdGFk
ZXYtPnVuaXQgPT0gQVRBX01BU1RFUikgewotCW1hc2s0MCA9IDB4MzMwMDsKLQluZXc0MCA9IHRp
bWluZ3NbYXRhX21vZGUyaWR4KG1vZGUpXSA8PCA4OwotICAgIH0KLSAgICBlbHNlIHsKLQltYXNr
NDQgPSAweDBmOwotCW5ldzQ0ID0gKCh0aW1pbmdzW2F0YV9tb2RlMmlkeChtb2RlKV0gJiAweDMw
KSA+PiAyKSB8Ci0JCSh0aW1pbmdzW2F0YV9tb2RlMmlkeChtb2RlKV0gJiAweDAzKTsKLSAgICB9
Ci0gICAgaWYgKGNoLT51bml0KSB7Ci0JbWFzazQwIDw8PSAxNjsKLQluZXc0MCA8PD0gMTY7Ci0J
bWFzazQ0IDw8PSA0OwotCW5ldzQ0IDw8PSA0OwotICAgIH0KLSAgICBwY2lfd3JpdGVfY29uZmln
KGdwYXJlbnQsIDB4NDAsIChyZWc0MCAmIH5tYXNrNDApIHwgbmV3NDAsIDQpOwotICAgIHBjaV93
cml0ZV9jb25maWcoZ3BhcmVudCwgMHg0NCwgKHJlZzQ0ICYgfm1hc2s0NCkgfCBuZXc0NCwgMSk7
CisJaWYgKGF0YWRldi0+dW5pdCA9PSBBVEFfTUFTVEVSKSB7CisJICAgIG1hc2s0MCA9IDB4MzMw
MDsKKwkgICAgbmV3NDAgPSB0aW1pbmdzW2F0YV9tb2RlMmlkeChtb2RlKV0gPDwgODsKKwl9CisJ
ZWxzZSB7CisJICAgIG1hc2s0NCA9IDB4MGY7CisJICAgIG5ldzQ0ID0gKCh0aW1pbmdzW2F0YV9t
b2RlMmlkeChtb2RlKV0gJiAweDMwKSA+PiAyKSB8CisJCSAgICAodGltaW5nc1thdGFfbW9kZTJp
ZHgobW9kZSldICYgMHgwMyk7CisJfQorCWlmIChjaC0+dW5pdCkgeworCSAgICBtYXNrNDAgPDw9
IDE2OworCSAgICBuZXc0MCA8PD0gMTY7CisJICAgIG1hc2s0NCA8PD0gNDsKKwkgICAgbmV3NDQg
PDw9IDQ7CisJfQorCXBjaV93cml0ZV9jb25maWcoZ3BhcmVudCwgMHg0MCwgKHJlZzQwICYgfm1h
c2s0MCkgfCBuZXc0MCwgNCk7CisJcGNpX3dyaXRlX2NvbmZpZyhncGFyZW50LCAweDQ0LCAocmVn
NDQgJiB+bWFzazQ0KSB8IG5ldzQ0LCAxKTsKIAotICAgIGF0YWRldi0+bW9kZSA9IG1vZGU7CisJ
YXRhZGV2LT5tb2RlID0gbW9kZTsKKyAgICB9CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0yMDQ1LDcg
KzI0MTAsNyBAQCBhdGFfaW50ZWxfc2F0YV9zZXRtb2RlKGRldmljZV90IGRldiwgaW50CiAJYXRh
ZGV2LT5wYXJhbS5zYXRhY2FwYWJpbGl0aWVzICE9IDB4ZmZmZikgewogCiAJc3RydWN0IGF0YV9j
aGFubmVsICpjaCA9IGRldmljZV9nZXRfc29mdGMoZGV2aWNlX2dldF9wYXJlbnQoZGV2KSk7Ci0J
aW50IGRldm5vID0gKGNoLT51bml0IDw8IDEpICsgQVRBX0RFVihhdGFkZXYtPnVuaXQpOworCWlu
dCBkZXZubyA9IChjaC0+dW5pdCA8PCAxKSArIGF0YWRldi0+dW5pdDsKIAogCS8qIG9uIHNvbWUg
ZHJpdmVzIHdlIG5lZWQgdG8gc2V0IHRoZSB0cmFuc2ZlciBtb2RlICovCiAJYXRhX2NvbnRyb2xj
bWQoZGV2LCBBVEFfU0VURkVBVFVSRVMsIEFUQV9TRl9TRVRYRkVSLCAwLApAQCAtMjE0MSw3ICsy
NTA2LDcgQEAgYXRhX2ludGVsXzMxMjQ0X3RmX3dyaXRlKHN0cnVjdCBhdGFfcmVxdQogCQkJCSAg
ICAgICAoKHJlcXVlc3QtPnUuYXRhLmxiYSA+PiA4KSAmIDB4MDBmZikpOwogCUFUQV9JRFhfT1VU
VyhjaCwgQVRBX0NZTF9NU0IsICgocmVxdWVzdC0+dS5hdGEubGJhID4+IDMyKSAmIDB4ZmYwMCkg
fCAKIAkJCQkgICAgICAgKChyZXF1ZXN0LT51LmF0YS5sYmEgPj4gMTYpICYgMHgwMGZmKSk7Ci0J
QVRBX0lEWF9PVVRXKGNoLCBBVEFfRFJJVkUsIEFUQV9EX0xCQSB8IGF0YWRldi0+dW5pdCk7CisJ
QVRBX0lEWF9PVVRXKGNoLCBBVEFfRFJJVkUsIEFUQV9EX0xCQSB8IEFUQV9ERVYoYXRhZGV2LT51
bml0KSk7CiAgICAgfQogICAgIGVsc2UgewogCUFUQV9JRFhfT1VUQihjaCwgQVRBX0ZFQVRVUkUs
IHJlcXVlc3QtPnUuYXRhLmZlYXR1cmUpOwpAQCAtMjE2Miw3ICsyNTI3LDcgQEAgYXRhX2ludGVs
XzMxMjQ0X3RmX3dyaXRlKHN0cnVjdCBhdGFfcmVxdQogCQkJIChyZXF1ZXN0LT51LmF0YS5sYmEg
LyAoc2VjdG9ycyAqIGhlYWRzKSkpOwogCSAgICBBVEFfSURYX09VVEIoY2gsIEFUQV9DWUxfTVNC
LAogCQkJIChyZXF1ZXN0LT51LmF0YS5sYmEgLyAoc2VjdG9ycyAqIGhlYWRzKSkgPj4gOCk7Ci0J
ICAgIEFUQV9JRFhfT1VUQihjaCwgQVRBX0RSSVZFLCBBVEFfRF9JQk0gfCBhdGFkZXYtPnVuaXQg
fCAKKwkgICAgQVRBX0lEWF9PVVRCKGNoLCBBVEFfRFJJVkUsIEFUQV9EX0lCTSB8IEFUQV9ERVYo
YXRhZGV2LT51bml0KSB8IAogCQkJICgoKHJlcXVlc3QtPnUuYXRhLmxiYSUgKHNlY3RvcnMgKiBo
ZWFkcykpIC8KIAkJCSAgIHNlY3RvcnMpICYgMHhmKSk7CiAJfQpAQCAtMjE3MSw3ICsyNTM2LDcg
QEAgYXRhX2ludGVsXzMxMjQ0X3RmX3dyaXRlKHN0cnVjdCBhdGFfcmVxdQogCSAgICBBVEFfSURY
X09VVEIoY2gsIEFUQV9DWUxfTFNCLCByZXF1ZXN0LT51LmF0YS5sYmEgPj4gOCk7CiAJICAgIEFU
QV9JRFhfT1VUQihjaCwgQVRBX0NZTF9NU0IsIHJlcXVlc3QtPnUuYXRhLmxiYSA+PiAxNik7CiAJ
ICAgIEFUQV9JRFhfT1VUQihjaCwgQVRBX0RSSVZFLAotCQkJIEFUQV9EX0lCTSB8IEFUQV9EX0xC
QSB8IGF0YWRldi0+dW5pdCB8CisJCQkgQVRBX0RfSUJNIHwgQVRBX0RfTEJBIHwgQVRBX0RFVihh
dGFkZXYtPnVuaXQpIHwKIAkJCSAoKHJlcXVlc3QtPnUuYXRhLmxiYSA+PiAyNCkgJiAweDBmKSk7
CiAJfQogICAgIH0KQEAgLTIxOTMsNyArMjU1OCw4IEBAIGF0YV9pdGVfaWRlbnQoZGV2aWNlX3Qg
ZGV2KQogewogICAgIHN0cnVjdCBhdGFfcGNpX2NvbnRyb2xsZXIgKmN0bHIgPSBkZXZpY2VfZ2V0
X3NvZnRjKGRldik7CiAgICAgc3RhdGljIHN0cnVjdCBhdGFfY2hpcF9pZCBpZHNbXSA9Ci0gICAg
e3sgQVRBX0lUODIxMkYsIDB4MDAsIDB4MDAsIDB4MDAsIEFUQV9VRE1BNiwgIklUODIxMkYiIH0s
CisgICAge3sgQVRBX0lUODIxM0YsIDB4MDAsIDB4MDAsIDB4MDAsIEFUQV9VRE1BNiwgIklUODIx
M0YiIH0sCisgICAgIHsgQVRBX0lUODIxMkYsIDB4MDAsIDB4MDAsIDB4MDAsIEFUQV9VRE1BNiwg
IklUODIxMkYiIH0sCiAgICAgIHsgQVRBX0lUODIxMUYsIDB4MDAsIDB4MDAsIDB4MDAsIEFUQV9V
RE1BNiwgIklUODIxMUYiIH0sCiAgICAgIHsgMCwgMCwgMCwgMCwgMCwgMH19OwogCkBAIC0yMjEz
LDI0ICsyNTc5LDMzIEBAIGF0YV9pdGVfY2hpcGluaXQoZGV2aWNlX3QgZGV2KQogICAgIGlmIChh
dGFfc2V0dXBfaW50ZXJydXB0KGRldikpCiAJcmV0dXJuIEVOWElPOwogCi0gICAgY3Rsci0+c2V0
bW9kZSA9IGF0YV9pdGVfc2V0bW9kZTsKKyAgICBpZiAoY3Rsci0+Y2hpcC0+Y2hpcGlkID09IEFU
QV9JVDgyMTNGKSB7CisJLyogdGhlIElURSA4MjEzRiBvbmx5IGhhcyBvbmUgY2hhbm5lbCAqLwor
CWN0bHItPmNoYW5uZWxzID0gMTsKKworCWN0bHItPnNldG1vZGUgPSBhdGFfaXRlXzgyMTNfc2V0
bW9kZTsKKyAgICB9CisgICAgZWxzZSB7CisJLyogc2V0IFBDSSBtb2RlIGFuZCA2Nk1oeiByZWZl
cmVuY2UgY2xvY2sgKi8KKwlwY2lfd3JpdGVfY29uZmlnKGRldiwgMHg1MCwgcGNpX3JlYWRfY29u
ZmlnKGRldiwgMHg1MCwgMSkgJiB+MHg4MywgMSk7CiAKLSAgICAvKiBzZXQgUENJIG1vZGUgYW5k
IDY2TWh6IHJlZmVyZW5jZSBjbG9jayAqLwotICAgIHBjaV93cml0ZV9jb25maWcoZGV2LCAweDUw
LCBwY2lfcmVhZF9jb25maWcoZGV2LCAweDUwLCAxKSAmIH4weDgzLCAxKTsKKwkvKiBzZXQgZGVm
YXVsdCBhY3RpdmUgJiByZWNvdmVyIHRpbWluZ3MgKi8KKwlwY2lfd3JpdGVfY29uZmlnKGRldiwg
MHg1NCwgMHgzMSwgMSk7CisJcGNpX3dyaXRlX2NvbmZpZyhkZXYsIDB4NTYsIDB4MzEsIDEpOwor
CisJY3Rsci0+c2V0bW9kZSA9IGF0YV9pdGVfODIxeF9zZXRtb2RlOworICAgIH0KIAotICAgIC8q
IHNldCBkZWZhdWx0IGFjdGl2ZSAmIHJlY292ZXIgdGltaW5ncyAqLwotICAgIHBjaV93cml0ZV9j
b25maWcoZGV2LCAweDU0LCAweDMxLCAxKTsKLSAgICBwY2lfd3JpdGVfY29uZmlnKGRldiwgMHg1
NiwgMHgzMSwgMSk7CiAgICAgcmV0dXJuIDA7CiB9CiAgCiBzdGF0aWMgdm9pZAotYXRhX2l0ZV9z
ZXRtb2RlKGRldmljZV90IGRldiwgaW50IG1vZGUpCithdGFfaXRlXzgyMXhfc2V0bW9kZShkZXZp
Y2VfdCBkZXYsIGludCBtb2RlKQogewogICAgIGRldmljZV90IGdwYXJlbnQgPSBHUkFORFBBUkVO
VChkZXYpOwogICAgIHN0cnVjdCBhdGFfY2hhbm5lbCAqY2ggPSBkZXZpY2VfZ2V0X3NvZnRjKGRl
dmljZV9nZXRfcGFyZW50KGRldikpOwogICAgIHN0cnVjdCBhdGFfZGV2aWNlICphdGFkZXYgPSBk
ZXZpY2VfZ2V0X3NvZnRjKGRldik7Ci0gICAgaW50IGRldm5vID0gKGNoLT51bml0IDw8IDEpICsg
QVRBX0RFVihhdGFkZXYtPnVuaXQpOworICAgIGludCBkZXZubyA9IChjaC0+dW5pdCA8PCAxKSAr
IGF0YWRldi0+dW5pdDsKICAgICBpbnQgZXJyb3I7CiAKICAgICAvKiBjb3JyZWN0IHRoZSBtb2Rl
IGZvciB3aGF0IHRoZSBIVyBzdXBwb3J0cyAqLwpAQCAtMjI2Myw3ICsyNjM4LDcgQEAgYXRhX2l0
ZV9zZXRtb2RlKGRldmljZV90IGRldiwgaW50IG1vZGUpCiAKIAkgICAgLyogc2V0IFVETUEgdGlt
aW5nICovCiAJICAgIHBjaV93cml0ZV9jb25maWcoZ3BhcmVudCwKLQkJCSAgICAgMHg1NiArIChj
aC0+dW5pdCA8PCAyKSArIEFUQV9ERVYoYXRhZGV2LT51bml0KSwKKwkJCSAgICAgMHg1NiArIChj
aC0+dW5pdCA8PCAyKSArIGF0YWRldi0+dW5pdCwKIAkJCSAgICAgdWRtYXRpbWluZ1ttb2RlICYg
QVRBX01PREVfTUFTS10sIDEpOwogCX0KIAllbHNlIHsKQEAgLTIyODUsNiArMjY2MCw4MCBAQCBh
dGFfaXRlX3NldG1vZGUoZGV2aWNlX3QgZGV2LCBpbnQgbW9kZSkKICAgICB9CiB9CiAKK3N0YXRp
YyB2b2lkCithdGFfaXRlXzgyMTNfc2V0bW9kZShkZXZpY2VfdCBkZXYsIGludCBtb2RlKQorewor
ICAgIGRldmljZV90IGdwYXJlbnQgPSBHUkFORFBBUkVOVChkZXYpOworICAgIHN0cnVjdCBhdGFf
cGNpX2NvbnRyb2xsZXIgKmN0bHIgPSBkZXZpY2VfZ2V0X3NvZnRjKGdwYXJlbnQpOworICAgIHN0
cnVjdCBhdGFfZGV2aWNlICphdGFkZXYgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisgICAgdV9p
bnQxNl90IHJlZzQwID0gcGNpX3JlYWRfY29uZmlnKGdwYXJlbnQsIDB4NDAsIDIpOworICAgIHVf
aW50OF90IHJlZzQ0ID0gcGNpX3JlYWRfY29uZmlnKGdwYXJlbnQsIDB4NDQsIDEpOworICAgIHVf
aW50OF90IHJlZzQ4ID0gcGNpX3JlYWRfY29uZmlnKGdwYXJlbnQsIDB4NDgsIDEpOworICAgIHVf
aW50MTZfdCByZWc0YSA9IHBjaV9yZWFkX2NvbmZpZyhncGFyZW50LCAweDRhLCAyKTsKKyAgICB1
X2ludDE2X3QgcmVnNTQgPSBwY2lfcmVhZF9jb25maWcoZ3BhcmVudCwgMHg1NCwgMik7CisgICAg
dV9pbnQxNl90IG1hc2s0MCA9IDAsIG5ldzQwID0gMDsKKyAgICB1X2ludDhfdCBtYXNrNDQgPSAw
LCBuZXc0NCA9IDA7CisgICAgaW50IGRldm5vID0gYXRhZGV2LT51bml0OworICAgIGludCBlcnJv
cjsKKyAgICB1X2ludDhfdCB0aW1pbmdzW10gPSB7IDB4MDAsIDB4MDAsIDB4MTAsIDB4MjEsIDB4
MjMsIDB4MTAsIDB4MjEsIDB4MjMsCisJCQkgICAweDIzLCAweDIzLCAweDIzLCAweDIzLCAweDIz
LCAweDIzIH07CisKKyAgICBtb2RlID0gYXRhX2xpbWl0X21vZGUoZGV2LCBtb2RlLCBjdGxyLT5j
aGlwLT5tYXhfZG1hKTsKKworICAgIGlmIChtb2RlID4gQVRBX1VETUEyICYmICEocmVnNTQgJiAo
MHgxMCA8PCBkZXZubykpKSB7CisJYXRhX3ByaW50X2NhYmxlKGRldiwgImNvbnRyb2xsZXIiKTsK
Kwltb2RlID0gQVRBX1VETUEyOworICAgIH0KKworICAgIGVycm9yID0gYXRhX2NvbnRyb2xjbWQo
ZGV2LCBBVEFfU0VURkVBVFVSRVMsIEFUQV9TRl9TRVRYRkVSLCAwLCBtb2RlKTsKKworICAgIGlm
IChib290dmVyYm9zZSkKKwlkZXZpY2VfcHJpbnRmKGRldiwgIiVzc2V0dGluZyAlcyBvbiAlcyBj
aGlwXG4iLAorCQkgICAgICAoZXJyb3IpID8gIkZBSUxVUkUgIiA6ICIiLAorCQkgICAgICBhdGFf
bW9kZTJzdHIobW9kZSksIGN0bHItPmNoaXAtPnRleHQpOworICAgIGlmICghZXJyb3IpIHsKKwlp
ZiAobW9kZSA+PSBBVEFfVURNQTApIHsKKwkgICAgdV9pbnQ4X3QgdXRpbWluZ3NbXSA9IHsgMHgw
MCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCB9OworCisJICAgIHBjaV93cml0
ZV9jb25maWcoZ3BhcmVudCwgMHg0OCwgcmVnNDggfCAoMHgwMDAxIDw8IGRldm5vKSwgMik7CisJ
ICAgIHBjaV93cml0ZV9jb25maWcoZ3BhcmVudCwgMHg0YSwKKwkJCSAgICAgKHJlZzRhICYgfigw
eDMgPDwgKGRldm5vIDw8IDIpKSkgfAorCQkJICAgICAodXRpbWluZ3NbbW9kZSAmIEFUQV9NT0RF
X01BU0tdIDw8IChkZXZubzw8MikpLCAyKTsKKwl9CisJZWxzZSB7CisJICAgIHBjaV93cml0ZV9j
b25maWcoZ3BhcmVudCwgMHg0OCwgcmVnNDggJiB+KDB4MDAwMSA8PCBkZXZubyksIDIpOworCSAg
ICBwY2lfd3JpdGVfY29uZmlnKGdwYXJlbnQsIDB4NGEsIChyZWc0YSAmIH4oMHgzIDw8IChkZXZu
byA8PCAyKSkpLDIpOworCX0KKwlpZiAobW9kZSA+PSBBVEFfVURNQTIpCisJICAgIHJlZzU0IHw9
ICgweDEgPDwgZGV2bm8pOworCWVsc2UKKwkgICAgcmVnNTQgJj0gfigweDEgPDwgZGV2bm8pOwor
CWlmIChtb2RlID49IEFUQV9VRE1BNSkKKwkgICAgcmVnNTQgfD0gKDB4MTAwMCA8PCBkZXZubyk7
CisJZWxzZSAKKwkgICAgcmVnNTQgJj0gfigweDEwMDAgPDwgZGV2bm8pOworCXBjaV93cml0ZV9j
b25maWcoZ3BhcmVudCwgMHg1NCwgcmVnNTQsIDIpOworCisJcmVnNDAgJj0gMHhmZjAwOworCXJl
ZzQwIHw9IDB4NDAzMzsKKwlpZiAoYXRhZGV2LT51bml0ID09IEFUQV9NQVNURVIpIHsKKwkgICAg
cmVnNDAgfD0gKGF0YV9hdGFwaShkZXYpID8gMHgwNCA6IDB4MDApOworCSAgICBtYXNrNDAgPSAw
eDMzMDA7CisJICAgIG5ldzQwID0gdGltaW5nc1thdGFfbW9kZTJpZHgobW9kZSldIDw8IDg7CisJ
fQorCWVsc2UgeworCSAgICByZWc0MCB8PSAoYXRhX2F0YXBpKGRldikgPyAweDQwIDogMHgwMCk7
CisJICAgIG1hc2s0NCA9IDB4MGY7CisJICAgIG5ldzQ0ID0gKCh0aW1pbmdzW2F0YV9tb2RlMmlk
eChtb2RlKV0gJiAweDMwKSA+PiAyKSB8CisJCSAgICAodGltaW5nc1thdGFfbW9kZTJpZHgobW9k
ZSldICYgMHgwMyk7CisJfQorCXBjaV93cml0ZV9jb25maWcoZ3BhcmVudCwgMHg0MCwgKHJlZzQw
ICYgfm1hc2s0MCkgfCBuZXc0MCwgNCk7CisJcGNpX3dyaXRlX2NvbmZpZyhncGFyZW50LCAweDQ0
LCAocmVnNDQgJiB+bWFzazQ0KSB8IG5ldzQ0LCAxKTsKKworCWF0YWRldi0+bW9kZSA9IG1vZGU7
CisgICAgfQorfQorCiAKIC8qCiAgKiBKTWljcm9uIGNoaXBzZXQgc3VwcG9ydCBmdW5jdGlvbnMK
QEAgLTI1NzMsMTEgKzMwMjIsMTEgQEAgYXRhX21hcnZlbGxfZWRtYV9hbGxvY2F0ZShkZXZpY2Vf
dCBkZXYpCiB7CiAgICAgc3RydWN0IGF0YV9wY2lfY29udHJvbGxlciAqY3RsciA9IGRldmljZV9n
ZXRfc29mdGMoZGV2aWNlX2dldF9wYXJlbnQoZGV2KSk7CiAgICAgc3RydWN0IGF0YV9jaGFubmVs
ICpjaCA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKLSAgICB1X2ludDY0X3Qgd29yayA9IGNoLT5k
bWEtPndvcmtfYnVzOworICAgIHVfaW50NjRfdCB3b3JrID0gY2gtPmRtYS53b3JrX2J1czsKICAg
ICBpbnQgaTsKIAogICAgIC8qIGNsZWFyIHdvcmsgYXJlYSAqLwotICAgIGJ6ZXJvKGNoLT5kbWEt
PndvcmssIDEwMjQrMjU2KTsKKyAgICBiemVybyhjaC0+ZG1hLndvcmssIDEwMjQrMjU2KTsKIAog
ICAgIC8qIHNldCBsZWdhY3kgQVRBIHJlc291cmNlcyAqLwogICAgIGZvciAoaSA9IEFUQV9EQVRB
OyBpIDw9IEFUQV9DT01NQU5EOyBpKyspIHsKQEAgLTI2ODQsMTMgKzMxMzMsMTMgQEAgc3RhdGlj
IGludAogYXRhX21hcnZlbGxfZWRtYV9iZWdpbl90cmFuc2FjdGlvbihzdHJ1Y3QgYXRhX3JlcXVl
c3QgKnJlcXVlc3QpCiB7CiAgICAgc3RydWN0IGF0YV9wY2lfY29udHJvbGxlciAqY3Rscj1kZXZp
Y2VfZ2V0X3NvZnRjKEdSQU5EUEFSRU5UKHJlcXVlc3QtPmRldikpOwotICAgIHN0cnVjdCBhdGFf
Y2hhbm5lbCAqY2ggPSBkZXZpY2VfZ2V0X3NvZnRjKGRldmljZV9nZXRfcGFyZW50KHJlcXVlc3Qt
PmRldikpOworICAgIHN0cnVjdCBhdGFfY2hhbm5lbCAqY2ggPSBkZXZpY2VfZ2V0X3NvZnRjKHJl
cXVlc3QtPnBhcmVudCk7CiAgICAgdV9pbnQzMl90IHJlcV9pbjsKICAgICB1X2ludDhfdCAqYnl0
ZXA7CiAgICAgdV9pbnQxNl90ICp3b3JkcDsKICAgICB1X2ludDMyX3QgKnF1YWRwOwotICAgIGlu
dCBpLCB0YWcgPSAweDA3OwotICAgIGludCBkdW1teSwgZXJyb3IsIHNsb3Q7CisgICAgaW50IGk7
CisgICAgaW50IGVycm9yLCBzbG90OwogCiAgICAgLyogb25seSBETUEgUi9XIGdvZXMgdGhyb3Vn
aCB0aGUgRU1EQSBtYWNoaW5lICovCiAgICAgaWYgKHJlcXVlc3QtPnUuYXRhLmNvbW1hbmQgIT0g
QVRBX1JFQURfRE1BICYmCkBAIC0yNzA2LDkgKzMxNTUsNyBAQCBhdGFfbWFydmVsbF9lZG1hX2Jl
Z2luX3RyYW5zYWN0aW9uKHN0cnVjCiAgICAgYXRhX21vZGlmeV9pZl80OGJpdChyZXF1ZXN0KTsK
IAogICAgIC8qIGNoZWNrIHNhbml0eSwgc2V0dXAgU0cgbGlzdCBhbmQgRE1BIGVuZ2luZSAqLwot
ICAgIGlmICgoZXJyb3IgPSBjaC0+ZG1hLT5sb2FkKGNoLT5kZXYsIHJlcXVlc3QtPmRhdGEsIHJl
cXVlc3QtPmJ5dGVjb3VudCwKLQkJCSAgICAgICByZXF1ZXN0LT5mbGFncyAmIEFUQV9SX1JFQUQs
IGNoLT5kbWEtPnNnLAotCQkJICAgICAgICZkdW1teSkpKSB7CisgICAgaWYgKChlcnJvciA9IGNo
LT5kbWEubG9hZChyZXF1ZXN0LCBOVUxMLCBOVUxMKSkpIHsKIAlkZXZpY2VfcHJpbnRmKHJlcXVl
c3QtPmRldiwgInNldHRpbmcgdXAgRE1BIGZhaWxlZFxuIik7CiAJcmVxdWVzdC0+cmVzdWx0ID0g
ZXJyb3I7CiAJcmV0dXJuIEFUQV9PUF9GSU5JU0hFRDsKQEAgLTI3MTcsMTUgKzMxNjQsMTUgQEAg
YXRhX21hcnZlbGxfZWRtYV9iZWdpbl90cmFuc2FjdGlvbihzdHJ1YwogICAgIC8qIGdldCBuZXh0
IGZyZWUgcmVxdWVzdCBxdWV1ZSBzbG90ICovCiAgICAgcmVxX2luID0gQVRBX0lOTChjdGxyLT5y
X3JlczEsIDB4MDIwMTQgKyBBVEFfTVZfRURNQV9CQVNFKGNoKSk7CiAgICAgc2xvdCA9ICgoKHJl
cV9pbiAmIH4weGZmZmZmYzAwKSA+PiA1KSArIDApICYgMHgxZjsKLSAgICBieXRlcCA9ICh1X2lu
dDhfdCAqKShjaC0+ZG1hLT53b3JrKTsKKyAgICBieXRlcCA9ICh1X2ludDhfdCAqKShjaC0+ZG1h
LndvcmspOwogICAgIGJ5dGVwICs9IChzbG90IDw8IDUpOwogICAgIHdvcmRwID0gKHVfaW50MTZf
dCAqKWJ5dGVwOwogICAgIHF1YWRwID0gKHVfaW50MzJfdCAqKWJ5dGVwOwogCiAgICAgLyogZmls
bCBpbiB0aGlzIHJlcXVlc3QgKi8KLSAgICBxdWFkcFswXSA9IChsb25nKWNoLT5kbWEtPnNnX2J1
cyAmIDB4ZmZmZmZmZmY7Ci0gICAgcXVhZHBbMV0gPSAodV9pbnQ2NF90KWNoLT5kbWEtPnNnX2J1
cyA+PiAzMjsKLSAgICB3b3JkcFs0XSA9IChyZXF1ZXN0LT5mbGFncyAmIEFUQV9SX1JFQUQgPyAw
eDAxIDogMHgwMCkgfCAodGFnPDwxKTsKKyAgICBxdWFkcFswXSA9IChsb25nKXJlcXVlc3QtPmRt
YS0+c2dfYnVzICYgMHhmZmZmZmZmZjsKKyAgICBxdWFkcFsxXSA9ICh1X2ludDY0X3QpcmVxdWVz
dC0+ZG1hLT5zZ19idXMgPj4gMzI7CisgICAgd29yZHBbNF0gPSAocmVxdWVzdC0+ZmxhZ3MgJiBB
VEFfUl9SRUFEID8gMHgwMSA6IDB4MDApIHwgKHJlcXVlc3QtPnRhZzw8MSk7CiAKICAgICBpID0g
MTA7CiAgICAgYnl0ZXBbaSsrXSA9IChyZXF1ZXN0LT51LmF0YS5jb3VudCA+PiA4KSAmIDB4ZmY7
CkBAIC0yNzc2LDcgKzMyMjMsNyBAQCBzdGF0aWMgaW50CiBhdGFfbWFydmVsbF9lZG1hX2VuZF90
cmFuc2FjdGlvbihzdHJ1Y3QgYXRhX3JlcXVlc3QgKnJlcXVlc3QpCiB7CiAgICAgc3RydWN0IGF0
YV9wY2lfY29udHJvbGxlciAqY3Rscj1kZXZpY2VfZ2V0X3NvZnRjKEdSQU5EUEFSRU5UKHJlcXVl
c3QtPmRldikpOwotICAgIHN0cnVjdCBhdGFfY2hhbm5lbCAqY2ggPSBkZXZpY2VfZ2V0X3NvZnRj
KGRldmljZV9nZXRfcGFyZW50KHJlcXVlc3QtPmRldikpOworICAgIHN0cnVjdCBhdGFfY2hhbm5l
bCAqY2ggPSBkZXZpY2VfZ2V0X3NvZnRjKHJlcXVlc3QtPnBhcmVudCk7CiAgICAgaW50IG9mZnNl
dCA9IChjaC0+dW5pdCA+IDMgPyAweDMwMDE0IDogMHgyMDAxNCk7CiAgICAgdV9pbnQzMl90IGlj
ciA9IEFUQV9JTkwoY3Rsci0+cl9yZXMxLCBvZmZzZXQpOwogICAgIGludCByZXM7CkBAIC0yNzk3
LDcgKzMyNDQsNyBAQCBhdGFfbWFydmVsbF9lZG1hX2VuZF90cmFuc2FjdGlvbihzdHJ1Y3QgCiAJ
cnNwX291dCAmPSAweGZmZmZmZjAwOwogCXJzcF9vdXQgKz0gKHNsb3QgPDwgMyk7CiAJcmVzcG9u
c2UgPSAoc3RydWN0IGF0YV9tYXJ2ZWxsX3Jlc3BvbnNlICopCi0JCSAgIChjaC0+ZG1hLT53b3Jr
ICsgMTAyNCArIChzbG90IDw8IDMpKTsKKwkJICAgKGNoLT5kbWEud29yayArIDEwMjQgKyAoc2xv
dCA8PCAzKSk7CiAKIAkvKiByZWNvcmQgc3RhdHVzIGZvciB0aGlzIHJlcXVlc3QgKi8KIAlyZXF1
ZXN0LT5zdGF0dXMgPSByZXNwb25zZS0+ZGV2X3N0YXR1czsKQEAgLTI4MTIsNyArMzI1OSw3IEBA
IGF0YV9tYXJ2ZWxsX2VkbWFfZW5kX3RyYW5zYWN0aW9uKHN0cnVjdCAKIAkgICAgcmVxdWVzdC0+
ZG9uZWNvdW50ID0gcmVxdWVzdC0+Ynl0ZWNvdW50OwogCiAJLyogdW5sb2FkIFNHIGxpc3QgKi8K
LQljaC0+ZG1hLT51bmxvYWQoY2gtPmRldik7CisJY2gtPmRtYS51bmxvYWQocmVxdWVzdCk7CiAK
IAlyZXMgPSBBVEFfT1BfRklOSVNIRUQ7CiAgICAgfQpAQCAtMjg4MywxNyArMzMzMCwxNSBAQCBh
dGFfbWFydmVsbF9lZG1hX2RtYWluaXQoZGV2aWNlX3QgZGV2KQogICAgIHN0cnVjdCBhdGFfY2hh
bm5lbCAqY2ggPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CiAKICAgICBhdGFfZG1haW5pdChkZXYp
OwotICAgIGlmIChjaC0+ZG1hKSB7Ci0JLyogbm90ZSBzdGFydCBhbmQgc3RvcCBhcmUgbm90IHVz
ZWQgaGVyZSAqLwotCWNoLT5kbWEtPnNldHByZCA9IGF0YV9tYXJ2ZWxsX2VkbWFfZG1hc2V0cHJk
OworICAgIC8qIG5vdGUgc3RhcnQgYW5kIHN0b3AgYXJlIG5vdCB1c2VkIGhlcmUgKi8KKyAgICBj
aC0+ZG1hLnNldHByZCA9IGF0YV9tYXJ2ZWxsX2VkbWFfZG1hc2V0cHJkOwogCQotCS8qIGlmIDY0
Yml0IHN1cHBvcnQgcHJlc2VudCBhZGp1c3QgbWF4IGFkZHJlc3MgdXNlZCAqLwotCWlmIChBVEFf
SU5MKGN0bHItPnJfcmVzMSwgMHgwMGQwMCkgJiAweDAwMDAwMDA0KQotCSAgICBjaC0+ZG1hLT5t
YXhfYWRkcmVzcyA9IEJVU19TUEFDRV9NQVhBRERSOworICAgIC8qIGlmIDY0Yml0IHN1cHBvcnQg
cHJlc2VudCBhZGp1c3QgbWF4IGFkZHJlc3MgdXNlZCAqLworICAgIGlmIChBVEFfSU5MKGN0bHIt
PnJfcmVzMSwgMHgwMGQwMCkgJiAweDAwMDAwMDA0KQorCWNoLT5kbWEubWF4X2FkZHJlc3MgPSBC
VVNfU1BBQ0VfTUFYQUREUjsKIAotCS8qIGNoaXAgZG9lcyBub3QgcmVsaWFibHkgZG8gNjRLIERN
QSB0cmFuc2ZlcnMgKi8KLQljaC0+ZG1hLT5tYXhfaW9zaXplID0gMTI2ICogREVWX0JTSVpFOyAK
LSAgICB9CisgICAgLyogY2hpcCBkb2VzIG5vdCByZWxpYWJseSBkbyA2NEsgRE1BIHRyYW5zZmVy
cyAqLworICAgIGNoLT5kbWEubWF4X2lvc2l6ZSA9IDEyNiAqIERFVl9CU0laRTsgCiB9CiAKIApA
QCAtMjkzMiw3ICszMzc3LDcgQEAgYXRhX25hdGlvbmFsX3NldG1vZGUoZGV2aWNlX3QgZGV2LCBp
bnQgbQogICAgIGRldmljZV90IGdwYXJlbnQgPSBHUkFORFBBUkVOVChkZXYpOwogICAgIHN0cnVj
dCBhdGFfY2hhbm5lbCAqY2ggPSBkZXZpY2VfZ2V0X3NvZnRjKGRldmljZV9nZXRfcGFyZW50KGRl
dikpOwogICAgIHN0cnVjdCBhdGFfZGV2aWNlICphdGFkZXYgPSBkZXZpY2VfZ2V0X3NvZnRjKGRl
dik7Ci0gICAgaW50IGRldm5vID0gKGNoLT51bml0IDw8IDEpICsgQVRBX0RFVihhdGFkZXYtPnVu
aXQpOworICAgIGludCBkZXZubyA9IChjaC0+dW5pdCA8PCAxKSArIGF0YWRldi0+dW5pdDsKICAg
ICB1X2ludDMyX3QgcGlvdGltaW5nW10gPQogCXsgMHg5MTcyZDEzMiwgMHgyMTcxNzEyMSwgMHgw
MDgwMzAyMCwgMHgyMDEwMjAxMCwgMHgwMDEwMDAxMCwKIAkgIDB4MDA4MDMwMjAsIDB4MjAxMDIw
MTAsIDB4MDAxMDAwMTAsCkBAIC0yOTQxLDggKzMzODYsOCBAQCBhdGFfbmF0aW9uYWxfc2V0bW9k
ZShkZXZpY2VfdCBkZXYsIGludCBtCiAgICAgdV9pbnQzMl90IHVkbWF0aW1pbmdbXSA9IHsgMHg4
MDkyMTI1MCwgMHg4MDkxMTE0MCwgMHg4MDkxMTAzMCB9OwogICAgIGludCBlcnJvcjsKIAotICAg
IGNoLT5kbWEtPmFsaWdubWVudCA9IDE2OwotICAgIGNoLT5kbWEtPm1heF9pb3NpemUgPSAxMjYg
KiBERVZfQlNJWkU7CisgICAgY2gtPmRtYS5hbGlnbm1lbnQgPSAxNjsKKyAgICBjaC0+ZG1hLm1h
eF9pb3NpemUgPSAxMjYgKiBERVZfQlNJWkU7CiAKICAgICBtb2RlID0gYXRhX2xpbWl0X21vZGUo
ZGV2LCBtb2RlLCBBVEFfVURNQTIpOwogCkBAIC0zMTUwLDE1ICszNTk1LDIzIEBAIGF0YV9udmlk
aWFfc3RhdHVzKGRldmljZV90IGRldikKICAgICBzdHJ1Y3QgYXRhX2NoYW5uZWwgKmNoID0gZGV2
aWNlX2dldF9zb2Z0YyhkZXYpOwogICAgIGludCBvZmZzZXQgPSBjdGxyLT5jaGlwLT5jZmcyICYg
TlY0ID8gMHgwNDQwIDogMHgwMDEwOwogICAgIGludCBzaGlmdCA9IGNoLT51bml0IDw8IChjdGxy
LT5jaGlwLT5jZmcyICYgTlZRID8gNCA6IDIpOwotICAgIHVfaW50MzJfdCBpc3RhdHVzID0gQVRB
X0lOTChjdGxyLT5yX3JlczIsIG9mZnNldCk7CisgICAgdV9pbnQzMl90IGlzdGF0dXM7CisKKyAg
ICAvKiBnZXQgaW50ZXJydXB0IHN0YXR1cyAqLworICAgIGlmIChjdGxyLT5jaGlwLT5jZmcyICYg
TlZRKQorCWlzdGF0dXMgPSBBVEFfSU5MKGN0bHItPnJfcmVzMiwgb2Zmc2V0KTsKKyAgICBlbHNl
CisJaXN0YXR1cyA9IEFUQV9JTkIoY3Rsci0+cl9yZXMyLCBvZmZzZXQpOwogCiAgICAgLyogZG8g
d2UgaGF2ZSBhbnkgUEhZIGV2ZW50cyA/ICovCiAgICAgaWYgKGlzdGF0dXMgJiAoMHgwYyA8PCBz
aGlmdCkpCiAJYXRhX3NhdGFfcGh5X2NoZWNrX2V2ZW50cyhkZXYpOwogCiAgICAgLyogY2xlYXIg
aW50ZXJydXB0KHMpICovCi0gICAgQVRBX09VVEIoY3Rsci0+cl9yZXMyLCBvZmZzZXQsCi0JICAg
ICAoMHgwZiA8PCBzaGlmdCkgfCAoY3Rsci0+Y2hpcC0+Y2ZnMiAmIE5WUSA/IDB4MDBmMDAwZjAg
OiAwKSk7CisgICAgaWYgKGN0bHItPmNoaXAtPmNmZzIgJiBOVlEpCisJQVRBX09VVEwoY3Rsci0+
cl9yZXMyLCBvZmZzZXQsICgweDBmIDw8IHNoaWZ0KSB8IDB4MDBmMDAwZjApOworICAgIGVsc2UK
KwlBVEFfT1VUQihjdGxyLT5yX3JlczIsIG9mZnNldCwgKDB4MGYgPDwgc2hpZnQpKTsKIAogICAg
IC8qIGRvIHdlIGhhdmUgYW55IGRldmljZSBhY3Rpb24gPyAqLwogICAgIHJldHVybiAoaXN0YXR1
cyAmICgweDAxIDw8IHNoaWZ0KSk7CkBAIC0zNDA4LDcgKzM4NjEsNyBAQCBzYXRhaWk6CiAJLyog
Y2xlYXIgU0FUQSBzdGF0dXMgYW5kIHVubWFzayBpbnRlcnJ1cHRzICovCiAJQVRBX09VVEwoY3Rs
ci0+cl9yZXMyLCBzdGF0X3JlZywgMHgwMDAwMDBmZik7CiAKLQkvKiBlbmFibGUgImxvbmcgYnVy
c3QgbGVuZ2h0IiBvbiBnZW4yIGNoaXBzICovCisJLyogZW5hYmxlICJsb25nIGJ1cnN0IGxlbmd0
aCIgb24gZ2VuMiBjaGlwcyAqLwogCWlmICgoY3Rsci0+Y2hpcC0+Y2ZnMiA9PSBQUlNBVEEyKSB8
fCAoY3Rsci0+Y2hpcC0+Y2ZnMiA9PSBQUkNNQk8yKSkKIAkgICAgQVRBX09VVEwoY3Rsci0+cl9y
ZXMyLCAweDQ0LCBBVEFfSU5MKGN0bHItPnJfcmVzMiwgMHg0NCkgfCAweDIwMDApOwogCkBAIC0z
NDUzLDM1ICszOTA2LDM1IEBAIGF0YV9wcm9taXNlX3N0YXR1cyhkZXZpY2VfdCBkZXYpCiB9CiAK
IHN0YXRpYyBpbnQKLWF0YV9wcm9taXNlX2RtYXN0YXJ0KGRldmljZV90IGRldikKK2F0YV9wcm9t
aXNlX2RtYXN0YXJ0KHN0cnVjdCBhdGFfcmVxdWVzdCAqcmVxdWVzdCkKIHsKLSAgICBzdHJ1Y3Qg
YXRhX3BjaV9jb250cm9sbGVyICpjdGxyID0gZGV2aWNlX2dldF9zb2Z0YyhHUkFORFBBUkVOVChk
ZXYpKTsKLSAgICBzdHJ1Y3QgYXRhX2NoYW5uZWwgKmNoID0gZGV2aWNlX2dldF9zb2Z0YyhkZXZp
Y2VfZ2V0X3BhcmVudChkZXYpKTsKLSAgICBzdHJ1Y3QgYXRhX2RldmljZSAqYXRhZGV2ICA9IGRl
dmljZV9nZXRfc29mdGMoZGV2KTsKKyAgICBzdHJ1Y3QgYXRhX3BjaV9jb250cm9sbGVyICpjdGxy
PWRldmljZV9nZXRfc29mdGMoR1JBTkRQQVJFTlQocmVxdWVzdC0+ZGV2KSk7CisgICAgc3RydWN0
IGF0YV9jaGFubmVsICpjaCA9IGRldmljZV9nZXRfc29mdGMocmVxdWVzdC0+cGFyZW50KTsKKyAg
ICBzdHJ1Y3QgYXRhX2RldmljZSAqYXRhZGV2ICA9IGRldmljZV9nZXRfc29mdGMocmVxdWVzdC0+
ZGV2KTsKIAogICAgIGlmIChhdGFkZXYtPmZsYWdzICYgQVRBX0RfNDhCSVRfQUNUSVZFKSB7CiAJ
QVRBX09VVEIoY3Rsci0+cl9yZXMxLCAweDExLAogCQkgQVRBX0lOQihjdGxyLT5yX3JlczEsIDB4
MTEpIHwgKGNoLT51bml0ID8gMHgwOCA6IDB4MDIpKTsKIAlBVEFfT1VUTChjdGxyLT5yX3JlczEs
IGNoLT51bml0ID8gMHgyNCA6IDB4MjAsCi0JCSAoKGNoLT5kbWEtPmZsYWdzICYgQVRBX0RNQV9S
RUFEKSA/IDB4MDUwMDAwMDAgOiAweDA2MDAwMDAwKSB8Ci0JCSAoY2gtPmRtYS0+Y3VyX2lvc2l6
ZSA+PiAxKSk7CisJCSAoKHJlcXVlc3QtPmZsYWdzICYgQVRBX1JfUkVBRCkgPyAweDA1MDAwMDAw
IDogMHgwNjAwMDAwMCkgfAorCQkgKHJlcXVlc3QtPmJ5dGVjb3VudCA+PiAxKSk7CiAgICAgfQog
ICAgIEFUQV9JRFhfT1VUQihjaCwgQVRBX0JNU1RBVF9QT1JULCAoQVRBX0lEWF9JTkIoY2gsIEFU
QV9CTVNUQVRfUE9SVCkgfAogCQkgKEFUQV9CTVNUQVRfSU5URVJSVVBUIHwgQVRBX0JNU1RBVF9F
UlJPUikpKTsKLSAgICBBVEFfSURYX09VVEwoY2gsIEFUQV9CTURUUF9QT1JULCBjaC0+ZG1hLT5z
Z19idXMpOworICAgIEFUQV9JRFhfT1VUTChjaCwgQVRBX0JNRFRQX1BPUlQsIHJlcXVlc3QtPmRt
YS0+c2dfYnVzKTsKICAgICBBVEFfSURYX09VVEIoY2gsIEFUQV9CTUNNRF9QT1JULAotCQkgKChj
aC0+ZG1hLT5mbGFncyAmIEFUQV9ETUFfUkVBRCkgPyBBVEFfQk1DTURfV1JJVEVfUkVBRCA6IDAp
IHwKKwkJICgocmVxdWVzdC0+ZmxhZ3MgJiBBVEFfUl9SRUFEKSA/IEFUQV9CTUNNRF9XUklURV9S
RUFEIDogMCkgfAogCQkgQVRBX0JNQ01EX1NUQVJUX1NUT1ApOwotICAgIGNoLT5mbGFncyB8PSBB
VEFfRE1BX0FDVElWRTsKKyAgICBjaC0+ZG1hLmZsYWdzIHw9IEFUQV9ETUFfQUNUSVZFOwogICAg
IHJldHVybiAwOwogfQogCiBzdGF0aWMgaW50Ci1hdGFfcHJvbWlzZV9kbWFzdG9wKGRldmljZV90
IGRldikKK2F0YV9wcm9taXNlX2RtYXN0b3Aoc3RydWN0IGF0YV9yZXF1ZXN0ICpyZXF1ZXN0KQog
ewotICAgIHN0cnVjdCBhdGFfcGNpX2NvbnRyb2xsZXIgKmN0bHIgPSBkZXZpY2VfZ2V0X3NvZnRj
KEdSQU5EUEFSRU5UKGRldikpOwotICAgIHN0cnVjdCBhdGFfY2hhbm5lbCAqY2ggPSBkZXZpY2Vf
Z2V0X3NvZnRjKGRldmljZV9nZXRfcGFyZW50KGRldikpOwotICAgIHN0cnVjdCBhdGFfZGV2aWNl
ICphdGFkZXYgID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworICAgIHN0cnVjdCBhdGFfcGNpX2Nv
bnRyb2xsZXIgKmN0bHI9ZGV2aWNlX2dldF9zb2Z0YyhHUkFORFBBUkVOVChyZXF1ZXN0LT5kZXYp
KTsKKyAgICBzdHJ1Y3QgYXRhX2NoYW5uZWwgKmNoID0gZGV2aWNlX2dldF9zb2Z0YyhyZXF1ZXN0
LT5wYXJlbnQpOworICAgIHN0cnVjdCBhdGFfZGV2aWNlICphdGFkZXYgID0gZGV2aWNlX2dldF9z
b2Z0YyhyZXF1ZXN0LT5kZXYpOwogICAgIGludCBlcnJvcjsKIAogICAgIGlmIChhdGFkZXYtPmZs
YWdzICYgQVRBX0RfNDhCSVRfQUNUSVZFKSB7CkBAIC0zNDkzLDcgKzM5NDYsNyBAQCBhdGFfcHJv
bWlzZV9kbWFzdG9wKGRldmljZV90IGRldikKICAgICBBVEFfSURYX09VVEIoY2gsIEFUQV9CTUNN
RF9QT1JULAogCQkgQVRBX0lEWF9JTkIoY2gsIEFUQV9CTUNNRF9QT1JUKSAmIH5BVEFfQk1DTURf
U1RBUlRfU1RPUCk7CiAgICAgQVRBX0lEWF9PVVRCKGNoLCBBVEFfQk1TVEFUX1BPUlQsIEFUQV9C
TVNUQVRfSU5URVJSVVBUIHwgQVRBX0JNU1RBVF9FUlJPUik7IAotICAgIGNoLT5mbGFncyAmPSB+
QVRBX0RNQV9BQ1RJVkU7CisgICAgY2gtPmRtYS5mbGFncyAmPSB+QVRBX0RNQV9BQ1RJVkU7CiAg
ICAgcmV0dXJuIGVycm9yOwogfQogCkBAIC0zNTE0LDExICszOTY3LDkgQEAgYXRhX3Byb21pc2Vf
ZG1haW5pdChkZXZpY2VfdCBkZXYpCiAgICAgc3RydWN0IGF0YV9jaGFubmVsICpjaCA9IGRldmlj
ZV9nZXRfc29mdGMoZGV2KTsKIAogICAgIGF0YV9kbWFpbml0KGRldik7Ci0gICAgaWYgKGNoLT5k
bWEpIHsKLQljaC0+ZG1hLT5zdGFydCA9IGF0YV9wcm9taXNlX2RtYXN0YXJ0OwotCWNoLT5kbWEt
PnN0b3AgPSBhdGFfcHJvbWlzZV9kbWFzdG9wOwotCWNoLT5kbWEtPnJlc2V0ID0gYXRhX3Byb21p
c2VfZG1hcmVzZXQ7Ci0gICAgfQorICAgIGNoLT5kbWEuc3RhcnQgPSBhdGFfcHJvbWlzZV9kbWFz
dGFydDsKKyAgICBjaC0+ZG1hLnN0b3AgPSBhdGFfcHJvbWlzZV9kbWFzdG9wOworICAgIGNoLT5k
bWEucmVzZXQgPSBhdGFfcHJvbWlzZV9kbWFyZXNldDsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTM1
MjgsNyArMzk3OSw3IEBAIGF0YV9wcm9taXNlX3NldG1vZGUoZGV2aWNlX3QgZGV2LCBpbnQgbW8K
ICAgICBzdHJ1Y3QgYXRhX3BjaV9jb250cm9sbGVyICpjdGxyID0gZGV2aWNlX2dldF9zb2Z0Yyhn
cGFyZW50KTsKICAgICBzdHJ1Y3QgYXRhX2NoYW5uZWwgKmNoID0gZGV2aWNlX2dldF9zb2Z0Yyhk
ZXZpY2VfZ2V0X3BhcmVudChkZXYpKTsKICAgICBzdHJ1Y3QgYXRhX2RldmljZSAqYXRhZGV2ID0g
ZGV2aWNlX2dldF9zb2Z0YyhkZXYpOwotICAgIGludCBkZXZubyA9IChjaC0+dW5pdCA8PCAxKSAr
IEFUQV9ERVYoYXRhZGV2LT51bml0KTsKKyAgICBpbnQgZGV2bm8gPSAoY2gtPnVuaXQgPDwgMSkg
KyBhdGFkZXYtPnVuaXQ7CiAgICAgaW50IGVycm9yOwogICAgIHVfaW50MzJfdCB0aW1pbmdzW11b
Ml0gPSB7CiAgICAgLyogICAgUFJPTEQgICAgICAgUFJORVcgICAgICAgICAgICAgICAgbW9kZSAq
LwpAQCAtMzY1Niw2ICs0MTA3LDkgQEAgYXRhX3Byb21pc2VfbWlvX2FsbG9jYXRlKGRldmljZV90
IGRldikKICAgICBlbHNlIHsKIAljaC0+aHcuY29tbWFuZCA9IGF0YV9wcm9taXNlX21pb19jb21t
YW5kOwogCWNoLT5ody5zdGF0dXMgPSBhdGFfcHJvbWlzZV9taW9fc3RhdHVzOworCWNoLT5ody5z
b2Z0cmVzZXQgPSBhdGFfcHJvbWlzZV9taW9fc29mdHJlc2V0OworCWNoLT5ody5wbV9yZWFkID0g
YXRhX3Byb21pc2VfbWlvX3BtX3JlYWQ7CisJY2gtPmh3LnBtX3dyaXRlID0gYXRhX3Byb21pc2Vf
bWlvX3BtX3dyaXRlOwogICAgICB9CiAgICAgcmV0dXJuIDA7CiB9CkBAIC0zNzM3LDkgKzQxOTEs
OSBAQCBhdGFfcHJvbWlzZV9taW9fc3RhdHVzKGRldmljZV90IGRldikKIAkJICAgICBNX0FUQSwg
TV9OT1dBSVQgfCBNX1pFUk8pKSkgewogCiAJaWYgKGJvb3R2ZXJib3NlKQotCSAgICBkZXZpY2Vf
cHJpbnRmKGNoLT5kZXYsICJESVNDT05ORUNUIHJlcXVlc3RlZFxuIik7CisJICAgIGRldmljZV9w
cmludGYoZGV2LCAiRElTQ09OTkVDVCByZXF1ZXN0ZWRcbiIpOwogCXRwLT5hY3Rpb24gPSBBVEFf
Q19ERVRBQ0g7Ci0JdHAtPmRldiA9IGNoLT5kZXY7CisJdHAtPmRldiA9IGRldjsKIAlUQVNLX0lO
SVQoJnRwLT50YXNrLCAwLCBhdGFfc2F0YV9waHlfZXZlbnQsIHRwKTsKIAl0YXNrcXVldWVfZW5x
dWV1ZSh0YXNrcXVldWVfdGhyZWFkLCAmdHAtPnRhc2spOwogICAgIH0KQEAgLTM3NTEsOSArNDIw
NSw5IEBAIGF0YV9wcm9taXNlX21pb19zdGF0dXMoZGV2aWNlX3QgZGV2KQogCQkgICAgIE1fQVRB
LCBNX05PV0FJVCB8IE1fWkVSTykpKSB7CiAKIAlpZiAoYm9vdHZlcmJvc2UpCi0JICAgIGRldmlj
ZV9wcmludGYoY2gtPmRldiwgIkNPTk5FQ1QgcmVxdWVzdGVkXG4iKTsKKwkgICAgZGV2aWNlX3By
aW50ZihkZXYsICJDT05ORUNUIHJlcXVlc3RlZFxuIik7CiAJdHAtPmFjdGlvbiA9IEFUQV9DX0FU
VEFDSDsKLQl0cC0+ZGV2ID0gY2gtPmRldjsKKwl0cC0+ZGV2ID0gZGV2OwogCVRBU0tfSU5JVCgm
dHAtPnRhc2ssIDAsIGF0YV9zYXRhX3BoeV9ldmVudCwgdHApOwogCXRhc2txdWV1ZV9lbnF1ZXVl
KHRhc2txdWV1ZV90aHJlYWQsICZ0cC0+dGFzayk7CiAgICAgfQpAQCAtMzc2NiwxMSArNDIyMCwx
NiBAQCBzdGF0aWMgaW50CiBhdGFfcHJvbWlzZV9taW9fY29tbWFuZChzdHJ1Y3QgYXRhX3JlcXVl
c3QgKnJlcXVlc3QpCiB7CiAgICAgc3RydWN0IGF0YV9wY2lfY29udHJvbGxlciAqY3Rscj1kZXZp
Y2VfZ2V0X3NvZnRjKEdSQU5EUEFSRU5UKHJlcXVlc3QtPmRldikpOwotICAgIHN0cnVjdCBhdGFf
Y2hhbm5lbCAqY2ggPSBkZXZpY2VfZ2V0X3NvZnRjKGRldmljZV9nZXRfcGFyZW50KHJlcXVlc3Qt
PmRldikpOwotICAgIHVfaW50MzJfdCAqd29yZHAgPSAodV9pbnQzMl90ICopY2gtPmRtYS0+d29y
azsKKyAgICBzdHJ1Y3QgYXRhX2NoYW5uZWwgKmNoID0gZGV2aWNlX2dldF9zb2Z0YyhyZXF1ZXN0
LT5wYXJlbnQpOworICAgIHN0cnVjdCBhdGFfZGV2aWNlICphdGFkZXYgPSBkZXZpY2VfZ2V0X3Nv
ZnRjKHJlcXVlc3QtPmRldik7CisKKyAgICB1X2ludDMyX3QgKndvcmRwID0gKHVfaW50MzJfdCAq
KWNoLT5kbWEud29yazsKIAogICAgIEFUQV9PVVRMKGN0bHItPnJfcmVzMiwgKGNoLT51bml0ICsg
MSkgPDwgMiwgMHgwMDAwMDAwMSk7CiAKKyAgICAvKiBzZXQgcG9ydG11bHRpcGxpZXIgcG9ydCAq
LworICAgIEFUQV9PVVRCKGN0bHItPnJfcmVzMiwgMHg0ZTggKyAoY2gtPnVuaXQgPDwgOCksIGF0
YWRldi0+dW5pdCAmIDB4MGYpOworCiAgICAgLyogWFhYIFNPUyBhZGQgQVRBUEkgY29tbWFuZHMg
c3VwcG9ydCBsYXRlciAqLwogICAgIHN3aXRjaCAocmVxdWVzdC0+dS5hdGEuY29tbWFuZCkgewog
ICAgIGRlZmF1bHQ6CkBAIC0zNzg2LDExICs0MjQ1LDExIEBAIGF0YV9wcm9taXNlX21pb19jb21t
YW5kKHN0cnVjdCBhdGFfcmVxdWUKIAl3b3JkcFswXSA9IGh0b2xlMzIoMHgwMCB8ICgoY2gtPnVu
aXQgKyAxKSA8PCAxNikgfCAoMHgwMCA8PCAyNCkpOwogCWJyZWFrOwogICAgIH0KLSAgICB3b3Jk
cFsxXSA9IGh0b2xlMzIoY2gtPmRtYS0+c2dfYnVzKTsKKyAgICB3b3JkcFsxXSA9IGh0b2xlMzIo
cmVxdWVzdC0+ZG1hLT5zZ19idXMpOwogICAgIHdvcmRwWzJdID0gMDsKICAgICBhdGFfcHJvbWlz
ZV9hcGt0KCh1X2ludDhfdCopd29yZHAsIHJlcXVlc3QpOwogCi0gICAgQVRBX09VVEwoY3Rsci0+
cl9yZXMyLCAweDAyNDAgKyAoY2gtPnVuaXQgPDwgNyksIGNoLT5kbWEtPndvcmtfYnVzKTsKKyAg
ICBBVEFfT1VUTChjdGxyLT5yX3JlczIsIDB4MDI0MCArIChjaC0+dW5pdCA8PCA3KSwgY2gtPmRt
YS53b3JrX2J1cyk7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTM4NTksNyArNDMxOCw3IEBAIGF0
YV9wcm9taXNlX21pb19yZXNldChkZXZpY2VfdCBkZXYpCiAJaWYgKChjdGxyLT5jaGlwLT5jZmcy
ID09IFBSU0FUQTIpIHx8CiAJICAgICgoY3Rsci0+Y2hpcC0+Y2ZnMiA9PSBQUkNNQk8yKSAmJiAo
Y2gtPnVuaXQgPCAyKSkpIHsKIAkgICAgLyogc2V0IHBvcnRtdWx0aXBsaWVyIHBvcnQgKi8KLQkg
ICAgQVRBX09VVEwoY3Rsci0+cl9yZXMyLCAweDRlOCArIChjaC0+dW5pdCA8PCA4KSwgMHgwZik7
CisJICAgIC8vQVRBX09VVEwoY3Rsci0+cl9yZXMyLCAweDRlOCArIChjaC0+dW5pdCA8PCA4KSwg
MHgwZik7CiAKIAkgICAgLyogbWFzayBwbHVnL3VucGx1ZyBpbnRyICovCiAJICAgIEFUQV9PVVRM
KGN0bHItPnJfcmVzMiwgMHgwNjAsICgweDAwMTEwMDAwIDw8IGNoLT51bml0KSk7CkBAIC0zODgw
LDEzICs0MzM5LDM5IEBAIGF0YV9wcm9taXNlX21pb19yZXNldChkZXZpY2VfdCBkZXYpCiAJCSAg
ICAgKEFUQV9JTkwoY3Rsci0+cl9yZXMyLCAweDQxNCArIChjaC0+dW5pdCA8PCA4KSkgJgogCQkg
ICAgIH4weDAwMDAwMDAzKSB8IDB4MDAwMDAwMDEpOwogCi0JICAgIGlmIChhdGFfc2F0YV9waHlf
cmVzZXQoZGV2KSkKLQkJYXRhX2dlbmVyaWNfcmVzZXQoZGV2KTsKKwkgICAgaWYgKGF0YV9zYXRh
X3BoeV9yZXNldChkZXYpKSB7CisJCXVfaW50MzJfdCBzaWduYXR1cmUgPSBjaC0+aHcuc29mdHJl
c2V0KGRldiwgQVRBX1BNKTsKKworCQlpZiAoMSB8IGJvb3R2ZXJib3NlKQorICAgICAgICAJICAg
IGRldmljZV9wcmludGYoZGV2LCAiU0lHTkFUVVJFOiAlMDh4XG4iLCBzaWduYXR1cmUpOworCisJ
CXN3aXRjaCAoc2lnbmF0dXJlKSB7CisJCWNhc2UgMHgwMDAwMDEwMToKKwkJICAgIGNoLT5kZXZp
Y2VzID0gQVRBX0FUQV9NQVNURVI7CisJCSAgICBicmVhazsKKwkJY2FzZSAweDk2NjkwMTAxOgor
CQkgICAgY2gtPmRldmljZXMgPSBBVEFfUE9SVE1VTFRJUExJRVI7CisJCSAgICBhdGFfcG1faWRl
bnRpZnkoZGV2KTsKKwkJICAgIGJyZWFrOworCQljYXNlIDB4ZWIxNDAxMDE6CisJCSAgICBjaC0+
ZGV2aWNlcyA9IEFUQV9BVEFQSV9NQVNURVI7CisJCSAgICBicmVhazsKKwkJZGVmYXVsdDogLyog
U09TIFhYWCAqLworCQkgICAgaWYgKGJvb3R2ZXJib3NlKQorCQkJZGV2aWNlX3ByaW50ZihkZXYs
CisJCQkJICAgICAgIk5vIHNpZ25hdHVyZSwgYXN1bWluZyBkaXNrIGRldmljZVxuIik7CisJCSAg
ICBjaC0+ZGV2aWNlcyA9IEFUQV9BVEFfTUFTVEVSOworCQl9CisJCWlmIChib290dmVyYm9zZSkK
KwkJICAgIGRldmljZV9wcmludGYoZGV2LCAicHJvbWlzZV9taW9fcmVzZXQgZGV2aWNlcz0lMDh4
XG4iLAorCQkgICAgCQkgIGNoLT5kZXZpY2VzKTsKKworCSAgICB9CiAKIAkgICAgLyogcmVzZXQg
YW5kIGVuYWJsZSBwbHVnL3VucGx1ZyBpbnRyICovCiAJICAgIEFUQV9PVVRMKGN0bHItPnJfcmVz
MiwgMHgwNjAsICgweDAwMDAwMDExIDw8IGNoLT51bml0KSk7CiAKLQkgICAgLyogc2V0IHBvcnRt
dWx0aXBsaWVyIHBvcnQgKi8KKwkgICAgLy8vKiBzZXQgcG9ydG11bHRpcGxpZXIgcG9ydCAqLwog
CSAgICBBVEFfT1VUTChjdGxyLT5yX3JlczIsIDB4NGU4ICsgKGNoLT51bml0IDw8IDgpLCAweDAw
KTsKIAl9CiAJZWxzZQpAQCAtMzg5NiwxNSArNDM4MSwxMjcgQEAgYXRhX3Byb21pc2VfbWlvX3Jl
c2V0KGRldmljZV90IGRldikKICAgICB9CiB9CiAKK3N0YXRpYyBpbnQKK2F0YV9wcm9taXNlX21p
b19wbV9yZWFkKGRldmljZV90IGRldiwgaW50IHBvcnQsIGludCByZWcsIHVfaW50MzJfdCAqcmVz
dWx0KQoreworICAgIHN0cnVjdCBhdGFfcGNpX2NvbnRyb2xsZXIgKmN0bHIgPSBkZXZpY2VfZ2V0
X3NvZnRjKGRldmljZV9nZXRfcGFyZW50KGRldikpOworICAgIHN0cnVjdCBhdGFfY2hhbm5lbCAq
Y2ggPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisgICAgaW50IHRpbWVvdXQgPSAwOworCisgICAg
Lyogc2V0IHBvcnRtdWx0aXBsaWVyIHBvcnQgKi8KKyAgICBBVEFfT1VUQihjdGxyLT5yX3JlczIs
IDB4NGU4ICsgKGNoLT51bml0IDw8IDgpLCAweDBmKTsKKworICAgIEFUQV9JRFhfT1VUQihjaCwg
QVRBX0ZFQVRVUkUsIHJlZyk7CisgICAgQVRBX0lEWF9PVVRCKGNoLCBBVEFfRFJJVkUsIHBvcnQp
OworCisgICAgQVRBX0lEWF9PVVRCKGNoLCBBVEFfQ09NTUFORCwgQVRBX1JFQURfUE0pOworCisg
ICAgd2hpbGUgKHRpbWVvdXQgPCAxMDAwMDAwKSB7CisJdV9pbnQ4X3Qgc3RhdHVzID0gQVRBX0lE
WF9JTkIoY2gsIEFUQV9TVEFUVVMpOworCWlmICghKHN0YXR1cyAmIEFUQV9TX0JVU1kpKQorCSAg
ICBicmVhazsKKwl0aW1lb3V0ICs9IDEwMDA7CisJREVMQVkoMTAwMCk7CisgICAgfQorICAgIGlm
ICh0aW1lb3V0ID49IDEwMDAwMDApCisJcmV0dXJuIEFUQV9FX0FCT1JUOworCisgICAgKnJlc3Vs
dCA9IEFUQV9JRFhfSU5CKGNoLCBBVEFfQ09VTlQpIHwKKwkgICAgICAoQVRBX0lEWF9JTkIoY2gs
IEFUQV9TRUNUT1IpIDw8IDgpIHwKKwkgICAgICAoQVRBX0lEWF9JTkIoY2gsIEFUQV9DWUxfTFNC
KSA8PCAxNikgfAorCSAgICAgIChBVEFfSURYX0lOQihjaCwgQVRBX0NZTF9NU0IpIDw8IDI0KTsK
KyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorYXRhX3Byb21pc2VfbWlvX3BtX3dyaXRl
KGRldmljZV90IGRldiwgaW50IHBvcnQsIGludCByZWcsIHVfaW50MzJfdCB2YWx1ZSkKK3sKKyAg
ICBzdHJ1Y3QgYXRhX3BjaV9jb250cm9sbGVyICpjdGxyID0gZGV2aWNlX2dldF9zb2Z0YyhkZXZp
Y2VfZ2V0X3BhcmVudChkZXYpKTsKKyAgICBzdHJ1Y3QgYXRhX2NoYW5uZWwgKmNoID0gZGV2aWNl
X2dldF9zb2Z0YyhkZXYpOworICAgIGludCB0aW1lb3V0ID0gMDsKKworICAgIC8qIHNldCBwb3J0
bXVsdGlwbGllciBwb3J0ICovCisgICAgQVRBX09VVEIoY3Rsci0+cl9yZXMyLCAweDRlOCArIChj
aC0+dW5pdCA8PCA4KSwgMHgwZik7CisKKyAgICBBVEFfSURYX09VVEIoY2gsIEFUQV9GRUFUVVJF
LCByZWcpOworICAgIEFUQV9JRFhfT1VUQihjaCwgQVRBX0RSSVZFLCBwb3J0KTsKKyAgICBBVEFf
SURYX09VVEIoY2gsIEFUQV9DT1VOVCwgdmFsdWUgJiAweGZmKTsKKyAgICBBVEFfSURYX09VVEIo
Y2gsIEFUQV9TRUNUT1IsICh2YWx1ZSA+PiA4KSAmIDB4ZmYpOworICAgIEFUQV9JRFhfT1VUQihj
aCwgQVRBX0NZTF9MU0IsICh2YWx1ZSA+PiAxNikgJiAweGZmKTsKKyAgICBBVEFfSURYX09VVEIo
Y2gsIEFUQV9DWUxfTVNCLCAodmFsdWUgPj4gMjQpICYgMHhmZik7CisKKyAgICBBVEFfSURYX09V
VEIoY2gsIEFUQV9DT01NQU5ELCBBVEFfV1JJVEVfUE0pOworCisgICAgd2hpbGUgKHRpbWVvdXQg
PCAxMDAwMDAwKSB7CisJdV9pbnQ4X3Qgc3RhdHVzID0gQVRBX0lEWF9JTkIoY2gsIEFUQV9TVEFU
VVMpOworCWlmICghKHN0YXR1cyAmIEFUQV9TX0JVU1kpKQorCSAgICBicmVhazsKKwl0aW1lb3V0
ICs9IDEwMDA7CisJREVMQVkoMTAwMCk7CisgICAgfQorICAgIGlmICh0aW1lb3V0ID49IDEwMDAw
MDApCisJcmV0dXJuIEFUQV9FX0FCT1JUOworCisgICAgcmV0dXJuIEFUQV9JRFhfSU5CKGNoLCBB
VEFfRVJST1IpOworfQorCisvKiBtdXN0IGJlIGNhbGxlZCB3aXRoIEFUQSBjaGFubmVsIGxvY2tl
ZCBhbmQgc3RhdGVfbXR4IGhlbGQgKi8KK3N0YXRpYyB1X2ludDMyX3QKK2F0YV9wcm9taXNlX21p
b19zb2Z0cmVzZXQoZGV2aWNlX3QgZGV2LCBpbnQgcG9ydCkKK3sKKyAgICBzdHJ1Y3QgYXRhX3Bj
aV9jb250cm9sbGVyICpjdGxyID0gZGV2aWNlX2dldF9zb2Z0YyhkZXZpY2VfZ2V0X3BhcmVudChk
ZXYpKTsKKyAgICBzdHJ1Y3QgYXRhX2NoYW5uZWwgKmNoID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYp
OworICAgIGludCB0aW1lb3V0OworCisgICAgLyogc2V0IHBvcnRtdWx0aXBsaWVyIHBvcnQgKi8K
KyAgICBBVEFfT1VUQihjdGxyLT5yX3JlczIsIDB4NGU4ICsgKGNoLT51bml0IDw8IDgpLCBwb3J0
ICYgMHgwZik7CisKKyAgICAvKiBzb2Z0cmVzZXQgZGV2aWNlIG9uIHRoaXMgY2hhbm5lbCAqLwor
ICAgIEFUQV9JRFhfT1VUQihjaCwgQVRBX0RSSVZFLCBBVEFfRF9JQk0gfCBBVEFfRF9MQkEgfCBB
VEFfREVWKEFUQV9NQVNURVIpKTsKKyAgICBERUxBWSgxMCk7CisgICAgQVRBX0lEWF9PVVRCKGNo
LCBBVEFfQ09OVFJPTCwgQVRBX0FfSURTIHwgQVRBX0FfUkVTRVQpOworICAgIGF0YV91ZGVsYXko
MTAwMDApOyAKKyAgICBBVEFfSURYX09VVEIoY2gsIEFUQV9DT05UUk9MLCBBVEFfQV9JRFMpOwor
ICAgIGF0YV91ZGVsYXkoMTUwMDAwKTsKKyAgICBBVEFfSURYX0lOQihjaCwgQVRBX0VSUk9SKTsK
KworICAgIC8qIHdhaXQgZm9yIEJVU1kgdG8gZ28gaW5hY3RpdmUgKi8KKyAgICBmb3IgKHRpbWVv
dXQgPSAwOyB0aW1lb3V0IDwgMTAwOyB0aW1lb3V0KyspIHsKKwl1X2ludDhfdCBlcnIsIHN0YXQ7
CisKKwllcnIgPSBBVEFfSURYX0lOQihjaCwgQVRBX0VSUk9SKTsKKwlzdGF0ID0gQVRBX0lEWF9J
TkIoY2gsIEFUQV9TVEFUVVMpOworCisJLy9pZiAoc3RhdCA9PSBlcnIgJiYgdGltZW91dCA+IChz
dGF0ICYgQVRBX1NfQlVTWSA/IDEwMCA6IDEwKSkKKwkgICAgLy9icmVhazsKKworCWlmICghKHN0
YXQgJiBBVEFfU19CVVNZKSkgeworCSAgICAvL2lmICgoZXJyICYgMHg3ZikgPT0gQVRBX0VfSUxJ
KSB7CisJCXJldHVybiBBVEFfSURYX0lOQihjaCwgQVRBX0NPVU5UKSB8CisJCSAgICAgICAoQVRB
X0lEWF9JTkIoY2gsIEFUQV9TRUNUT1IpIDw8IDgpIHwKKwkJICAgICAgIChBVEFfSURYX0lOQihj
aCwgQVRBX0NZTF9MU0IpIDw8IDE2KSB8CisJCSAgICAgICAoQVRBX0lEWF9JTkIoY2gsIEFUQV9D
WUxfTVNCKSA8PCAyNCk7CisJICAgIC8vfQorCSAgICAvL2Vsc2UgaWYgKHN0YXQgJiAweDBmKSB7
CisJCS8vc3RhdCB8PSBBVEFfU19CVVNZOworCSAgICAvL30KKwl9CisKKwlpZiAoIShzdGF0ICYg
QVRBX1NfQlVTWSkgfHwgKHN0YXQgPT0gMHhmZiAmJiB0aW1lb3V0ID4gMTApKQorCSAgICBicmVh
azsKKwlhdGFfdWRlbGF5KDEwMDAwMCk7CisgICAgfQorICAgIHJldHVybiAtMTsKK30KKwogc3Rh
dGljIHZvaWQKIGF0YV9wcm9taXNlX21pb19kbWFpbml0KGRldmljZV90IGRldikKIHsKICAgICBz
dHJ1Y3QgYXRhX2NoYW5uZWwgKmNoID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOwogCi0gICAgLyog
bm90ZSBzdGFydCBhbmQgc3RvcCBhcmUgbm90IHVzZWQgaGVyZSAqLwogICAgIGF0YV9kbWFpbml0
KGRldik7Ci0gICAgaWYgKGNoLT5kbWEpIAotCWNoLT5kbWEtPnNldHByZCA9IGF0YV9wcm9taXNl
X21pb19zZXRwcmQ7CisgICAgLyogbm90ZSBzdGFydCBhbmQgc3RvcCBhcmUgbm90IHVzZWQgaGVy
ZSAqLworICAgIGNoLT5kbWEuc2V0cHJkID0gYXRhX3Byb21pc2VfbWlvX3NldHByZDsKIH0KIAog
CkBAIC0zOTkwLDggKzQ1ODcsOCBAQCBhdGFfcHJvbWlzZV9zeDRfY29tbWFuZChzdHJ1Y3QgYXRh
X3JlcXVlCiB7CiAgICAgZGV2aWNlX3QgZ3BhcmVudCA9IEdSQU5EUEFSRU5UKHJlcXVlc3QtPmRl
dik7CiAgICAgc3RydWN0IGF0YV9wY2lfY29udHJvbGxlciAqY3RsciA9IGRldmljZV9nZXRfc29m
dGMoZ3BhcmVudCk7Ci0gICAgc3RydWN0IGF0YV9jaGFubmVsICpjaCA9IGRldmljZV9nZXRfc29m
dGMoZGV2aWNlX2dldF9wYXJlbnQocmVxdWVzdC0+ZGV2KSk7Ci0gICAgc3RydWN0IGF0YV9kbWFf
cHJkZW50cnkgKnByZCA9IGNoLT5kbWEtPnNnOworICAgIHN0cnVjdCBhdGFfY2hhbm5lbCAqY2gg
PSBkZXZpY2VfZ2V0X3NvZnRjKHJlcXVlc3QtPnBhcmVudCk7CisgICAgc3RydWN0IGF0YV9kbWFf
cHJkZW50cnkgKnByZCA9IHJlcXVlc3QtPmRtYS0+c2c7CiAgICAgY2FkZHJfdCB3aW5kb3cgPSBy
bWFuX2dldF92aXJ0dWFsKGN0bHItPnJfcmVzMSk7CiAgICAgdV9pbnQzMl90ICp3b3JkcDsKICAg
ICBpbnQgaSwgaWR4LCBsZW5ndGggPSAwOwpAQCAtNDA5OCw3ICs0Njk1LDcgQEAgYXRhX3Byb21p
c2VfYXBrdCh1X2ludDhfdCAqYnl0ZXAsIHN0cnVjdAogICAgIGludCBpID0gMTI7CiAKICAgICBi
eXRlcFtpKytdID0gQVRBX1BEQ18xQiB8IEFUQV9QRENfV1JJVEVfUkVHIHwgQVRBX1BEQ19XQUlU
X05CVVNZfEFUQV9EUklWRTsKLSAgICBieXRlcFtpKytdID0gQVRBX0RfSUJNIHwgQVRBX0RfTEJB
IHwgYXRhZGV2LT51bml0OworICAgIGJ5dGVwW2krK10gPSBBVEFfRF9JQk0gfCBBVEFfRF9MQkEg
fCBBVEFfREVWKGF0YWRldi0+dW5pdCk7CiAgICAgYnl0ZXBbaSsrXSA9IEFUQV9QRENfMUIgfCBB
VEFfUERDX1dSSVRFX0NUTDsKICAgICBieXRlcFtpKytdID0gQVRBX0FfNEJJVDsKIApAQCAtNDEx
OSw3ICs0NzE2LDcgQEAgYXRhX3Byb21pc2VfYXBrdCh1X2ludDhfdCAqYnl0ZXAsIHN0cnVjdAog
CWJ5dGVwW2krK10gPSByZXF1ZXN0LT51LmF0YS5sYmEgPj4gNDA7CiAJYnl0ZXBbaSsrXSA9IHJl
cXVlc3QtPnUuYXRhLmxiYSA+PiAxNjsKIAlieXRlcFtpKytdID0gQVRBX1BEQ18xQiB8IEFUQV9Q
RENfV1JJVEVfUkVHIHwgQVRBX0RSSVZFOwotCWJ5dGVwW2krK10gPSBBVEFfRF9MQkEgfCBhdGFk
ZXYtPnVuaXQ7CisJYnl0ZXBbaSsrXSA9IEFUQV9EX0xCQSB8IEFUQV9ERVYoYXRhZGV2LT51bml0
KTsKICAgICB9CiAgICAgZWxzZSB7CiAJYnl0ZXBbaSsrXSA9IEFUQV9QRENfMUIgfCBBVEFfUERD
X1dSSVRFX1JFRyB8IEFUQV9GRUFUVVJFOwpAQCAtNDEzNCw3ICs0NzMxLDggQEAgYXRhX3Byb21p
c2VfYXBrdCh1X2ludDhfdCAqYnl0ZXAsIHN0cnVjdAogCWJ5dGVwW2krK10gPSByZXF1ZXN0LT51
LmF0YS5sYmEgPj4gMTY7CiAJYnl0ZXBbaSsrXSA9IEFUQV9QRENfMUIgfCBBVEFfUERDX1dSSVRF
X1JFRyB8IEFUQV9EUklWRTsKIAlieXRlcFtpKytdID0gKGF0YWRldi0+ZmxhZ3MgJiBBVEFfRF9V
U0VfQ0hTID8gMCA6IEFUQV9EX0xCQSkgfAotCQkgICBBVEFfRF9JQk0gfCBhdGFkZXYtPnVuaXQg
fCAoKHJlcXVlc3QtPnUuYXRhLmxiYSA+PiAyNCkmMHhmKTsKKwkJICAgICBBVEFfRF9JQk0gfCBB
VEFfREVWKGF0YWRldi0+dW5pdCkgfAorCQkgICAgICgocmVxdWVzdC0+dS5hdGEubGJhID4+IDI0
KSYweGYpOwogICAgIH0KICAgICBieXRlcFtpKytdID0gQVRBX1BEQ18xQiB8IEFUQV9QRENfV1JJ
VEVfRU5EIHwgQVRBX0NPTU1BTkQ7CiAgICAgYnl0ZXBbaSsrXSA9IHJlcXVlc3QtPnUuYXRhLmNv
bW1hbmQ7CkBAIC00Mjk0LDggKzQ4OTIsNyBAQCBhdGFfc2VydmVyd29ya3NfYWxsb2NhdGUoZGV2
aWNlX3QgZGV2KQogICAgIGNoLT5ody50Zl93cml0ZSA9IGF0YV9zZXJ2ZXJ3b3Jrc190Zl93cml0
ZTsKIAogICAgIC8qIGNoaXAgZG9lcyBub3QgcmVsaWFibHkgZG8gNjRLIERNQSB0cmFuc2ZlcnMg
Ki8KLSAgICBpZiAoY2gtPmRtYSkKLQljaC0+ZG1hLT5tYXhfaW9zaXplID0gMTI2ICogREVWX0JT
SVpFOworICAgIGNoLT5kbWEubWF4X2lvc2l6ZSA9IDEyNiAqIERFVl9CU0laRTsKIAogICAgIHJl
dHVybiAwOwogfQpAQCAtNDMwMyw3ICs0OTAwLDcgQEAgYXRhX3NlcnZlcndvcmtzX2FsbG9jYXRl
KGRldmljZV90IGRldikKIHN0YXRpYyB2b2lkCiBhdGFfc2VydmVyd29ya3NfdGZfcmVhZChzdHJ1
Y3QgYXRhX3JlcXVlc3QgKnJlcXVlc3QpCiB7Ci0gICAgc3RydWN0IGF0YV9jaGFubmVsICpjaCA9
IGRldmljZV9nZXRfc29mdGMoZGV2aWNlX2dldF9wYXJlbnQocmVxdWVzdC0+ZGV2KSk7CisgICAg
c3RydWN0IGF0YV9jaGFubmVsICpjaCA9IGRldmljZV9nZXRfc29mdGMocmVxdWVzdC0+cGFyZW50
KTsKICAgICBzdHJ1Y3QgYXRhX2RldmljZSAqYXRhZGV2ID0gZGV2aWNlX2dldF9zb2Z0YyhyZXF1
ZXN0LT5kZXYpOwogCiAgICAgaWYgKGF0YWRldi0+ZmxhZ3MgJiBBVEFfRF80OEJJVF9BQ1RJVkUp
IHsKQEAgLTQzMzIsNyArNDkyOSw3IEBAIGF0YV9zZXJ2ZXJ3b3Jrc190Zl9yZWFkKHN0cnVjdCBh
dGFfcmVxdWUKIHN0YXRpYyB2b2lkCiBhdGFfc2VydmVyd29ya3NfdGZfd3JpdGUoc3RydWN0IGF0
YV9yZXF1ZXN0ICpyZXF1ZXN0KQogewotICAgIHN0cnVjdCBhdGFfY2hhbm5lbCAqY2ggPSBkZXZp
Y2VfZ2V0X3NvZnRjKGRldmljZV9nZXRfcGFyZW50KHJlcXVlc3QtPmRldikpOworICAgIHN0cnVj
dCBhdGFfY2hhbm5lbCAqY2ggPSBkZXZpY2VfZ2V0X3NvZnRjKHJlcXVlc3QtPnBhcmVudCk7CiAg
ICAgc3RydWN0IGF0YV9kZXZpY2UgKmF0YWRldiA9IGRldmljZV9nZXRfc29mdGMocmVxdWVzdC0+
ZGV2KTsKIAogICAgIGlmIChhdGFkZXYtPmZsYWdzICYgQVRBX0RfNDhCSVRfQUNUSVZFKSB7CkBA
IC00MzQ0LDcgKzQ5NDEsNyBAQCBhdGFfc2VydmVyd29ya3NfdGZfd3JpdGUoc3RydWN0IGF0YV9y
ZXF1CiAJCQkJICAgICAgICgocmVxdWVzdC0+dS5hdGEubGJhID4+IDgpICYgMHgwMGZmKSk7CiAJ
QVRBX0lEWF9PVVRXKGNoLCBBVEFfQ1lMX01TQiwgKChyZXF1ZXN0LT51LmF0YS5sYmEgPj4gMzIp
ICYgMHhmZjAwKSB8IAogCQkJCSAgICAgICAoKHJlcXVlc3QtPnUuYXRhLmxiYSA+PiAxNikgJiAw
eDAwZmYpKTsKLQlBVEFfSURYX09VVFcoY2gsIEFUQV9EUklWRSwgQVRBX0RfTEJBIHwgYXRhZGV2
LT51bml0KTsKKwlBVEFfSURYX09VVFcoY2gsIEFUQV9EUklWRSwgQVRBX0RfTEJBIHwgQVRBX0RF
VihhdGFkZXYtPnVuaXQpKTsKICAgICB9CiAgICAgZWxzZSB7CiAJQVRBX0lEWF9PVVRXKGNoLCBB
VEFfRkVBVFVSRSwgcmVxdWVzdC0+dS5hdGEuZmVhdHVyZSk7CkBAIC00MzY1LDcgKzQ5NjIsNyBA
QCBhdGFfc2VydmVyd29ya3NfdGZfd3JpdGUoc3RydWN0IGF0YV9yZXF1CiAJCQkgKHJlcXVlc3Qt
PnUuYXRhLmxiYSAvIChzZWN0b3JzICogaGVhZHMpKSk7CiAJICAgIEFUQV9JRFhfT1VUVyhjaCwg
QVRBX0NZTF9NU0IsCiAJCQkgKHJlcXVlc3QtPnUuYXRhLmxiYSAvIChzZWN0b3JzICogaGVhZHMp
KSA+PiA4KTsKLQkgICAgQVRBX0lEWF9PVVRXKGNoLCBBVEFfRFJJVkUsIEFUQV9EX0lCTSB8IGF0
YWRldi0+dW5pdCB8IAorCSAgICBBVEFfSURYX09VVFcoY2gsIEFUQV9EUklWRSwgQVRBX0RfSUJN
IHwgQVRBX0RFVihhdGFkZXYtPnVuaXQpIHwgCiAJCQkgKCgocmVxdWVzdC0+dS5hdGEubGJhJSAo
c2VjdG9ycyAqIGhlYWRzKSkgLwogCQkJICAgc2VjdG9ycykgJiAweGYpKTsKIAl9CkBAIC00Mzc0
LDcgKzQ5NzEsNyBAQCBhdGFfc2VydmVyd29ya3NfdGZfd3JpdGUoc3RydWN0IGF0YV9yZXF1CiAJ
ICAgIEFUQV9JRFhfT1VUVyhjaCwgQVRBX0NZTF9MU0IsIHJlcXVlc3QtPnUuYXRhLmxiYSA+PiA4
KTsKIAkgICAgQVRBX0lEWF9PVVRXKGNoLCBBVEFfQ1lMX01TQiwgcmVxdWVzdC0+dS5hdGEubGJh
ID4+IDE2KTsKIAkgICAgQVRBX0lEWF9PVVRXKGNoLCBBVEFfRFJJVkUsCi0JCQkgQVRBX0RfSUJN
IHwgQVRBX0RfTEJBIHwgYXRhZGV2LT51bml0IHwKKwkJCSBBVEFfRF9JQk0gfCBBVEFfRF9MQkEg
fCBBVEFfREVWKGF0YWRldi0+dW5pdCkgfAogCQkJICgocmVxdWVzdC0+dS5hdGEubGJhID4+IDI0
KSAmIDB4MGYpKTsKIAl9CiAgICAgfQpAQCAtNDM4Nyw3ICs0OTg0LDcgQEAgYXRhX3NlcnZlcndv
cmtzX3NldG1vZGUoZGV2aWNlX3QgZGV2LCBpbgogICAgIHN0cnVjdCBhdGFfcGNpX2NvbnRyb2xs
ZXIgKmN0bHIgPSBkZXZpY2VfZ2V0X3NvZnRjKGdwYXJlbnQpOwogICAgIHN0cnVjdCBhdGFfY2hh
bm5lbCAqY2ggPSBkZXZpY2VfZ2V0X3NvZnRjKGRldmljZV9nZXRfcGFyZW50KGRldikpOwogICAg
IHN0cnVjdCBhdGFfZGV2aWNlICphdGFkZXYgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7Ci0gICAg
aW50IGRldm5vID0gKGNoLT51bml0IDw8IDEpICsgQVRBX0RFVihhdGFkZXYtPnVuaXQpOworICAg
IGludCBkZXZubyA9IChjaC0+dW5pdCA8PCAxKSArIGF0YWRldi0+dW5pdDsKICAgICBpbnQgb2Zm
c2V0ID0gKGRldm5vIF4gMHgwMSkgPDwgMzsKICAgICBpbnQgZXJyb3I7CiAgICAgdV9pbnQ4X3Qg
cGlvdGltaW5nc1tdID0geyAweDVkLCAweDQ3LCAweDM0LCAweDIyLCAweDIwLCAweDM0LCAweDIy
LCAweDIwLApAQCAtNDQ0OSwyMSArNTA0NiwyMSBAQCBhdGFfc2lpX2lkZW50KGRldmljZV90IGRl
dikKIHsKICAgICBzdHJ1Y3QgYXRhX3BjaV9jb250cm9sbGVyICpjdGxyID0gZGV2aWNlX2dldF9z
b2Z0YyhkZXYpOwogICAgIHN0YXRpYyBzdHJ1Y3QgYXRhX2NoaXBfaWQgaWRzW10gPQotICAgIHt7
IEFUQV9TSUkzMTE0LCAgIDB4MDAsIFNJSU1FTUlPLCBTSUk0Q0gsICAgIEFUQV9TQTE1MCwgIlNp
SSAzMTE0IiB9LAotICAgICB7IEFUQV9TSUkzNTEyLCAgIDB4MDIsIFNJSU1FTUlPLCAwLCAgICAg
ICAgIEFUQV9TQTE1MCwgIlNpSSAzNTEyIiB9LAotICAgICB7IEFUQV9TSUkzMTEyLCAgIDB4MDIs
IFNJSU1FTUlPLCAwLCAgICAgICAgIEFUQV9TQTE1MCwgIlNpSSAzMTEyIiB9LAotICAgICB7IEFU
QV9TSUkzMTEyXzEsIDB4MDIsIFNJSU1FTUlPLCAwLCAgICAgICAgIEFUQV9TQTE1MCwgIlNpSSAz
MTEyIiB9LAotICAgICB7IEFUQV9TSUkzNTEyLCAgIDB4MDAsIFNJSU1FTUlPLCBTSUlCVUcsICAg
IEFUQV9TQTE1MCwgIlNpSSAzNTEyIiB9LAotICAgICB7IEFUQV9TSUkzMTEyLCAgIDB4MDAsIFNJ
SU1FTUlPLCBTSUlCVUcsICAgIEFUQV9TQTE1MCwgIlNpSSAzMTEyIiB9LAotICAgICB7IEFUQV9T
SUkzMTEyXzEsIDB4MDAsIFNJSU1FTUlPLCBTSUlCVUcsICAgIEFUQV9TQTE1MCwgIlNpSSAzMTEy
IiB9LAotICAgICB7IEFUQV9TSUkzMTI0LCAgIDB4MDAsIFNJSVBSQklPLCBTSUk0Q0gsICAgIEFU
QV9TQTMwMCwgIlNpSSAzMTI0IiB9LAotICAgICB7IEFUQV9TSUkzMTMyLCAgIDB4MDAsIFNJSVBS
QklPLCAwLCAgICAgICAgIEFUQV9TQTMwMCwgIlNpSSAzMTMyIiB9LAotICAgICB7IEFUQV9TSUkz
MTMyXzEsIDB4MDAsIFNJSVBSQklPLCAwLCAgICAgICAgIEFUQV9TQTMwMCwgIlNpSSAzMTMyIiB9
LAotICAgICB7IEFUQV9TSUkwNjgwLCAgIDB4MDAsIFNJSU1FTUlPLCBTSUlTRVRDTEssIEFUQV9V
RE1BNiwgIlNpSSAwNjgwIiB9LAotICAgICB7IEFUQV9DTUQ2NDksICAgIDB4MDAsIDAsICAgICAg
ICBTSUlJTlRSLCAgIEFUQV9VRE1BNSwgIkNNRCA2NDkiIH0sCi0gICAgIHsgQVRBX0NNRDY0OCwg
ICAgMHgwMCwgMCwgICAgICAgIFNJSUlOVFIsICAgQVRBX1VETUE0LCAiQ01EIDY0OCIgfSwKLSAg
ICAgeyBBVEFfQ01ENjQ2LCAgICAweDA3LCAwLCAgICAgICAgMCwgICAgICAgICBBVEFfVURNQTIs
ICJDTUQgNjQ2VTIiIH0sCi0gICAgIHsgQVRBX0NNRDY0NiwgICAgMHgwMCwgMCwgICAgICAgIDAs
ICAgICAgICAgQVRBX1dETUEyLCAiQ01EIDY0NiIgfSwKKyAgICB7eyBBVEFfU0lJMzExNCwgICAw
eDAwLCBTSUlNRU1JTywgU0lJNENILCAgICBBVEFfU0ExNTAsICIzMTE0IiB9LAorICAgICB7IEFU
QV9TSUkzNTEyLCAgIDB4MDIsIFNJSU1FTUlPLCAwLCAgICAgICAgIEFUQV9TQTE1MCwgIjM1MTIi
IH0sCisgICAgIHsgQVRBX1NJSTMxMTIsICAgMHgwMiwgU0lJTUVNSU8sIDAsICAgICAgICAgQVRB
X1NBMTUwLCAiMzExMiIgfSwKKyAgICAgeyBBVEFfU0lJMzExMl8xLCAweDAyLCBTSUlNRU1JTywg
MCwgICAgICAgICBBVEFfU0ExNTAsICIzMTEyIiB9LAorICAgICB7IEFUQV9TSUkzNTEyLCAgIDB4
MDAsIFNJSU1FTUlPLCBTSUlCVUcsICAgIEFUQV9TQTE1MCwgIjM1MTIiIH0sCisgICAgIHsgQVRB
X1NJSTMxMTIsICAgMHgwMCwgU0lJTUVNSU8sIFNJSUJVRywgICAgQVRBX1NBMTUwLCAiMzExMiIg
fSwKKyAgICAgeyBBVEFfU0lJMzExMl8xLCAweDAwLCBTSUlNRU1JTywgU0lJQlVHLCAgICBBVEFf
U0ExNTAsICIzMTEyIiB9LAorICAgICB7IEFUQV9TSUkzMTI0LCAgIDB4MDAsIFNJSVBSQklPLCBT
SUk0Q0gsICAgIEFUQV9TQTMwMCwgIjMxMjQiIH0sCisgICAgIHsgQVRBX1NJSTMxMzIsICAgMHgw
MCwgU0lJUFJCSU8sIDAsICAgICAgICAgQVRBX1NBMzAwLCAiMzEzMiIgfSwKKyAgICAgeyBBVEFf
U0lJMzEzMl8xLCAweDAwLCBTSUlQUkJJTywgMCwgICAgICAgICBBVEFfU0EzMDAsICIzMTMyIiB9
LAorICAgICB7IEFUQV9TSUkwNjgwLCAgIDB4MDAsIFNJSU1FTUlPLCBTSUlTRVRDTEssIEFUQV9V
RE1BNiwgIjY4MCIgfSwKKyAgICAgeyBBVEFfQ01ENjQ5LCAgICAweDAwLCAwLCAgICAgICAgU0lJ
SU5UUiwgICBBVEFfVURNQTUsICIoQ01EKSA2NDkiIH0sCisgICAgIHsgQVRBX0NNRDY0OCwgICAg
MHgwMCwgMCwgICAgICAgIFNJSUlOVFIsICAgQVRBX1VETUE0LCAiKENNRCkgNjQ4IiB9LAorICAg
ICB7IEFUQV9DTUQ2NDYsICAgIDB4MDcsIDAsICAgICAgICAwLCAgICAgICAgIEFUQV9VRE1BMiwg
IihDTUQpIDY0NlUyIiB9LAorICAgICB7IEFUQV9DTUQ2NDYsICAgIDB4MDAsIDAsICAgICAgICAw
LCAgICAgICAgIEFUQV9XRE1BMiwgIihDTUQpIDY0NiIgfSwKICAgICAgeyAwLCAwLCAwLCAwLCAw
LCAwfX07CiAKICAgICBpZiAoIShjdGxyLT5jaGlwID0gYXRhX21hdGNoX2NoaXAoZGV2LCBpZHMp
KSkKQEAgLTQ1MTcsNyArNTExNCw3IEBAIGF0YV9zaWlfY2hpcGluaXQoZGV2aWNlX3QgZGV2KQog
CWN0bHItPnJfdHlwZTIgPSBTWVNfUkVTX01FTU9SWTsKIAljdGxyLT5yX3JpZDIgPSBQQ0lSX0JB
Uig1KTsKIAlpZiAoIShjdGxyLT5yX3JlczIgPSBidXNfYWxsb2NfcmVzb3VyY2VfYW55KGRldiwg
Y3Rsci0+cl90eXBlMiwKLQkJCQkJCSAgICAmY3Rsci0+cl9yaWQyLCBSRl9BQ1RJVkUpKSkgewor
CQkJCQkJICAgICZjdGxyLT5yX3JpZDIsIFJGX0FDVElWRSkpKXsKIAkgICAgaWYgKGN0bHItPmNo
aXAtPmNoaXBpZCAhPSBBVEFfU0lJMDY4MCB8fAogCQkJICAgIChwY2lfcmVhZF9jb25maWcoZGV2
LCAweDhhLCAxKSAmIDEpKQogCQlyZXR1cm4gRU5YSU87CkBAIC00NTk0LDkgKzUxOTEsOSBAQCBh
dGFfY21kX3N0YXR1cyhkZXZpY2VfdCBkZXYpCiAgICAgc3RydWN0IGF0YV9jaGFubmVsICpjaCA9
IGRldmljZV9nZXRfc29mdGMoZGV2KTsKICAgICB1X2ludDhfdCByZWc3MTsKIAotICAgIGlmICgo
KHJlZzcxID0gcGNpX3JlYWRfY29uZmlnKGRldmljZV9nZXRfcGFyZW50KGNoLT5kZXYpLCAweDcx
LCAxKSkgJgorICAgIGlmICgoKHJlZzcxID0gcGNpX3JlYWRfY29uZmlnKGRldmljZV9nZXRfcGFy
ZW50KGRldiksIDB4NzEsIDEpKSAmCiAJIChjaC0+dW5pdCA/IDB4MDggOiAweDA0KSkpIHsKLQlw
Y2lfd3JpdGVfY29uZmlnKGRldmljZV9nZXRfcGFyZW50KGNoLT5kZXYpLCAweDcxLAorCXBjaV93
cml0ZV9jb25maWcoZGV2aWNlX2dldF9wYXJlbnQoZGV2KSwgMHg3MSwKIAkJCSByZWc3MSAmIH4o
Y2gtPnVuaXQgPyAweDA0IDogMHgwOCksIDEpOwogCXJldHVybiBhdGFfcGNpX3N0YXR1cyhkZXYp
OwogICAgIH0KQEAgLTQ2MTAsNyArNTIwNyw3IEBAIGF0YV9jbWRfc2V0bW9kZShkZXZpY2VfdCBk
ZXYsIGludCBtb2RlKQogICAgIHN0cnVjdCBhdGFfcGNpX2NvbnRyb2xsZXIgKmN0bHIgPSBkZXZp
Y2VfZ2V0X3NvZnRjKGdwYXJlbnQpOwogICAgIHN0cnVjdCBhdGFfY2hhbm5lbCAqY2ggPSBkZXZp
Y2VfZ2V0X3NvZnRjKGRldmljZV9nZXRfcGFyZW50KGRldikpOwogICAgIHN0cnVjdCBhdGFfZGV2
aWNlICphdGFkZXYgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7Ci0gICAgaW50IGRldm5vID0gKGNo
LT51bml0IDw8IDEpICsgQVRBX0RFVihhdGFkZXYtPnVuaXQpOworICAgIGludCBkZXZubyA9IChj
aC0+dW5pdCA8PCAxKSArIGF0YWRldi0+dW5pdDsKICAgICBpbnQgZXJyb3I7CiAKICAgICBtb2Rl
ID0gYXRhX2xpbWl0X21vZGUoZGV2LCBtb2RlLCBjdGxyLT5jaGlwLT5tYXhfZG1hKTsKQEAgLTQ2
MzUsNyArNTIzMiw3IEBAIGF0YV9jbWRfc2V0bW9kZShkZXZpY2VfdCBkZXYsIGludCBtb2RlKQog
CSAgICB1X2ludDhfdCB1bW9kZSA9IHBjaV9yZWFkX2NvbmZpZyhncGFyZW50LCB1cmVnLCAxKTsK
IAogCSAgICB1bW9kZSAmPSB+KGF0YWRldi0+dW5pdCA9PSBBVEFfTUFTVEVSID8gMHgzNSA6IDB4
Y2EpOwotCSAgICB1bW9kZSB8PSB1ZG1hdGltaW5nc1ttb2RlICYgQVRBX01PREVfTUFTS11bQVRB
X0RFVihhdGFkZXYtPnVuaXQpXTsKKwkgICAgdW1vZGUgfD0gdWRtYXRpbWluZ3NbbW9kZSAmIEFU
QV9NT0RFX01BU0tdW2F0YWRldi0+dW5pdF07CiAJICAgIHBjaV93cml0ZV9jb25maWcoZ3BhcmVu
dCwgdXJlZywgdW1vZGUsIDEpOwogCX0KIAllbHNlIGlmIChtb2RlID49IEFUQV9XRE1BMCkgeyAK
QEAgLTQ2OTUsMTAgKzUyOTIsMTAgQEAgYXRhX3NpaV9hbGxvY2F0ZShkZXZpY2VfdCBkZXYpCiAJ
QVRBX09VVEwoY3Rsci0+cl9yZXMyLCAweDE0OCArICh1bml0MDEgPDwgNykgKyAodW5pdDEwIDw8
IDgpLCgxIDw8IDE2KSk7CiAgICAgfQogCi0gICAgaWYgKChjdGxyLT5jaGlwLT5jZmcyICYgU0lJ
QlVHKSAmJiBjaC0+ZG1hKSB7CisgICAgaWYgKGN0bHItPmNoaXAtPmNmZzIgJiBTSUlCVUcpIHsK
IAkvKiB3b3JrIGFyb3VuZCBlcnJhdGEgaW4gZWFybHkgY2hpcHMgKi8KLQljaC0+ZG1hLT5ib3Vu
ZGFyeSA9IDgxOTI7Ci0JY2gtPmRtYS0+c2Vnc2l6ZSA9IDE1ICogREVWX0JTSVpFOworCWNoLT5k
bWEuYm91bmRhcnkgPSA4MTkyOworCWNoLT5kbWEuc2Vnc2l6ZSA9IDE1ICogREVWX0JTSVpFOwog
ICAgIH0KIAogICAgIGF0YV9wY2lfaHcoZGV2KTsKQEAgLTQ3MzksOSArNTMzNiw5IEBAIGF0YV9z
aWlfc2V0bW9kZShkZXZpY2VfdCBkZXYsIGludCBtb2RlKQogICAgIHN0cnVjdCBhdGFfcGNpX2Nv
bnRyb2xsZXIgKmN0bHIgPSBkZXZpY2VfZ2V0X3NvZnRjKGdwYXJlbnQpOwogICAgIHN0cnVjdCBh
dGFfY2hhbm5lbCAqY2ggPSBkZXZpY2VfZ2V0X3NvZnRjKGRldmljZV9nZXRfcGFyZW50KGRldikp
OwogICAgIHN0cnVjdCBhdGFfZGV2aWNlICphdGFkZXYgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7
Ci0gICAgaW50IHJlZ28gPSAoY2gtPnVuaXQgPDwgNCkgKyAoQVRBX0RFVihhdGFkZXYtPnVuaXQp
IDw8IDEpOworICAgIGludCByZWdvID0gKGNoLT51bml0IDw8IDQpICsgKGF0YWRldi0+dW5pdCA8
PCAxKTsKICAgICBpbnQgbXJlZyA9IGNoLT51bml0ID8gMHg4NCA6IDB4ODA7Ci0gICAgaW50IG1h
c2sgPSAweDAzIDw8IChBVEFfREVWKGF0YWRldi0+dW5pdCkgPDwgMik7CisgICAgaW50IG1hc2sg
PSAweDAzIDw8IChhdGFkZXYtPnVuaXQgPDwgMik7CiAgICAgaW50IG12YWwgPSBwY2lfcmVhZF9j
b25maWcoZ3BhcmVudCwgbXJlZywgMSkgJiB+bWFzazsKICAgICBpbnQgZXJyb3I7CiAKQEAgLTQ3
NzEsNyArNTM2OCw3IEBAIGF0YV9zaWlfc2V0bW9kZShkZXZpY2VfdCBkZXYsIGludCBtb2RlKQog
CXVfaW50OF90IHVyZWcgPSAweGFjICsgcmVnbzsKIAogCXBjaV93cml0ZV9jb25maWcoZ3BhcmVu
dCwgbXJlZywKLQkJCSBtdmFsIHwgKDB4MDMgPDwgKEFUQV9ERVYoYXRhZGV2LT51bml0KSA8PCAy
KSksIDEpOworCQkJIG12YWwgfCAoMHgwMyA8PCAoYXRhZGV2LT51bml0IDw8IDIpKSwgMSk7CiAJ
cGNpX3dyaXRlX2NvbmZpZyhncGFyZW50LCB1cmVnLCAKIAkJCSAocGNpX3JlYWRfY29uZmlnKGdw
YXJlbnQsIHVyZWcsIDEpICYgfjB4M2YpIHwKIAkJCSB1ZG1hdGltaW5nc1ttb2RlICYgQVRBX01P
REVfTUFTS10sIDEpOwpAQCAtNDc4Miw3ICs1Mzc5LDcgQEAgYXRhX3NpaV9zZXRtb2RlKGRldmlj
ZV90IGRldiwgaW50IG1vZGUpCiAJdV9pbnQxNl90IGRtYXRpbWluZ3NbXSA9IHsgMHgyMjA4LCAw
eDEwYzIsIDB4MTBjMSB9OwogCiAJcGNpX3dyaXRlX2NvbmZpZyhncGFyZW50LCBtcmVnLAotCQkJ
IG12YWwgfCAoMHgwMiA8PCAoQVRBX0RFVihhdGFkZXYtPnVuaXQpIDw8IDIpKSwgMSk7CisJCQkg
bXZhbCB8ICgweDAyIDw8IChhdGFkZXYtPnVuaXQgPDwgMikpLCAxKTsKIAlwY2lfd3JpdGVfY29u
ZmlnKGdwYXJlbnQsIGRyZWcsIGRtYXRpbWluZ3NbbW9kZSAmIEFUQV9NT0RFX01BU0tdLCAyKTsK
IAogICAgIH0KQEAgLTQ3OTEsNyArNTM4OCw3IEBAIGF0YV9zaWlfc2V0bW9kZShkZXZpY2VfdCBk
ZXYsIGludCBtb2RlKQogCXVfaW50MTZfdCBwaW90aW1pbmdzW10gPSB7IDB4MzI4YSwgMHgyMjgz
LCAweDExMDQsIDB4MTBjMywgMHgxMGMxIH07CiAKIAlwY2lfd3JpdGVfY29uZmlnKGdwYXJlbnQs
IG1yZWcsCi0JCQkgbXZhbCB8ICgweDAxIDw8IChBVEFfREVWKGF0YWRldi0+dW5pdCkgPDwgMikp
LCAxKTsKKwkJCSBtdmFsIHwgKDB4MDEgPDwgKGF0YWRldi0+dW5pdCA8PCAyKSksIDEpOwogCXBj
aV93cml0ZV9jb25maWcoZ3BhcmVudCwgcHJlZywgcGlvdGltaW5nc1ttb2RlICYgQVRBX01PREVf
TUFTS10sIDIpOwogICAgIH0KICAgICBhdGFkZXYtPm1vZGUgPSBtb2RlOwpAQCAtNDgwNCwxMyAr
NTQwMSwxNCBAQCBzdHJ1Y3QgYXRhX3NpaXByYl9kbWFfcHJkZW50cnkgewogICAgIHVfaW50MzJf
dCBjb250cm9sOwogfSBfX3BhY2tlZDsKIAorI2RlZmluZSBBVEFfU0lJUFJCX0RNQV9FTlRSSUVT
CQkxMjUKIHN0cnVjdCBhdGFfc2lpcHJiX2F0YV9jb21tYW5kIHsKLSAgICBzdHJ1Y3QgYXRhX3Np
aXByYl9kbWFfcHJkZW50cnkgcHJkWzEyNl07CisgICAgc3RydWN0IGF0YV9zaWlwcmJfZG1hX3By
ZGVudHJ5IHByZFtBVEFfU0lJUFJCX0RNQV9FTlRSSUVTXTsKIH0gX19wYWNrZWQ7CiAKIHN0cnVj
dCBhdGFfc2lpcHJiX2F0YXBpX2NvbW1hbmQgewogICAgIHVfaW50OF90IGNjYlsxNl07Ci0gICAg
c3RydWN0IGF0YV9zaWlwcmJfZG1hX3ByZGVudHJ5IHByZFsxMjVdOworICAgIHN0cnVjdCBhdGFf
c2lpcHJiX2RtYV9wcmRlbnRyeSBwcmRbQVRBX1NJSVBSQl9ETUFfRU5UUklFU107CiB9IF9fcGFj
a2VkOwogCiBzdHJ1Y3QgYXRhX3NpaXByYl9jb21tYW5kIHsKQEAgLTQ4NDEsMTAgKzU0MzksMTQg
QEAgYXRhX3NpaXByYl9hbGxvY2F0ZShkZXZpY2VfdCBkZXYpCiAgICAgY2gtPnJfaW9bQVRBX1NB
Q1RJVkVdLnJlcyA9IGN0bHItPnJfcmVzMjsKICAgICBjaC0+cl9pb1tBVEFfU0FDVElWRV0ub2Zm
c2V0ID0gMHgxZjBjICsgb2Zmc2V0OwogICAgCisgICAgY2gtPmh3LnN0YXR1cyA9IGF0YV9zaWlw
cmJfc3RhdHVzOwogICAgIGNoLT5ody5iZWdpbl90cmFuc2FjdGlvbiA9IGF0YV9zaWlwcmJfYmVn
aW5fdHJhbnNhY3Rpb247CiAgICAgY2gtPmh3LmVuZF90cmFuc2FjdGlvbiA9IGF0YV9zaWlwcmJf
ZW5kX3RyYW5zYWN0aW9uOwotICAgIGNoLT5ody5zdGF0dXMgPSBhdGFfc2lpcHJiX3N0YXR1czsK
ICAgICBjaC0+aHcuY29tbWFuZCA9IE5VTEw7CS8qIG5vdCB1c2VkIGhlcmUgKi8KKyAgICBjaC0+
aHcuc29mdHJlc2V0ID0gYXRhX3NpaXByYl9zb2Z0cmVzZXQ7CisgICAgY2gtPmh3LnBtX3JlYWQg
PSBhdGFfc2lpcHJiX3BtX3JlYWQ7CisgICAgY2gtPmh3LnBtX3dyaXRlID0gYXRhX3NpaXByYl9w
bV93cml0ZTsKKyAgICAgCiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTQ4NzUsMTIgKzU0NzcsMTEg
QEAgc3RhdGljIGludAogYXRhX3NpaXByYl9iZWdpbl90cmFuc2FjdGlvbihzdHJ1Y3QgYXRhX3Jl
cXVlc3QgKnJlcXVlc3QpCiB7CiAgICAgc3RydWN0IGF0YV9wY2lfY29udHJvbGxlciAqY3Rscj1k
ZXZpY2VfZ2V0X3NvZnRjKEdSQU5EUEFSRU5UKHJlcXVlc3QtPmRldikpOwotICAgIHN0cnVjdCBh
dGFfY2hhbm5lbCAqY2ggPSBkZXZpY2VfZ2V0X3NvZnRjKGRldmljZV9nZXRfcGFyZW50KHJlcXVl
c3QtPmRldikpOworICAgIHN0cnVjdCBhdGFfY2hhbm5lbCAqY2ggPSBkZXZpY2VfZ2V0X3NvZnRj
KHJlcXVlc3QtPnBhcmVudCk7CiAgICAgc3RydWN0IGF0YV9zaWlwcmJfY29tbWFuZCAqcHJiOwog
ICAgIHN0cnVjdCBhdGFfc2lpcHJiX2RtYV9wcmRlbnRyeSAqcHJkOwogICAgIGludCBvZmZzZXQg
PSBjaC0+dW5pdCAqIDB4MjAwMDsKICAgICB1X2ludDY0X3QgcHJiX2J1czsKLSAgICBpbnQgdGFn
ID0gMCwgZHVtbXk7CiAKICAgICAvKiBTT1MgWFhYICovCiAgICAgaWYgKHJlcXVlc3QtPnUuYXRh
LmNvbW1hbmQgPT0gQVRBX0RFVklDRV9SRVNFVCkgewpAQCAtNDg4OCwxMiArNTQ4OSw5IEBAIGF0
YV9zaWlwcmJfYmVnaW5fdHJhbnNhY3Rpb24oc3RydWN0IGF0YV8KICAgICAgICAgcmV0dXJuIEFU
QV9PUF9GSU5JU0hFRDsKICAgICB9CiAKLSAgICAvKiBjaGVjayBmb3IgNDggYml0IGFjY2VzcyBh
bmQgY29udmVydCBpZiBuZWVkZWQgKi8KLSAgICBhdGFfbW9kaWZ5X2lmXzQ4Yml0KHJlcXVlc3Qp
OwotCiAgICAgLyogZ2V0IGEgcGllY2Ugb2YgdGhlIHdvcmtzcGFjZSBmb3IgdGhpcyByZXF1ZXN0
ICovCiAgICAgcHJiID0gKHN0cnVjdCBhdGFfc2lpcHJiX2NvbW1hbmQgKikKLQkoY2gtPmRtYS0+
d29yayArIChzaXplb2Yoc3RydWN0IGF0YV9zaWlwcmJfY29tbWFuZCkgKiB0YWcpKTsKKwkoY2gt
PmRtYS53b3JrICsgKHNpemVvZihzdHJ1Y3QgYXRhX3NpaXByYl9jb21tYW5kKSAqIHJlcXVlc3Qt
PnRhZykpOwogCiAgICAgLyogc2V0IGJhc2ljIHByZCBvcHRpb25zIGF0YS9hdGFwaSBldGMgZXRj
ICovCiAgICAgYnplcm8ocHJiLCBzaXplb2Yoc3RydWN0IGF0YV9zaWlwcmJfY29tbWFuZCkpOwpA
QCAtNDkyNSw4ICs1NTIzLDcgQEAgYXRhX3NpaXByYl9iZWdpbl90cmFuc2FjdGlvbihzdHJ1Y3Qg
YXRhXwogCiAgICAgLyogaWYgcmVxdWVzdCBtb3ZlcyBkYXRhIHNldHVwIGFuZCBsb2FkIFNHIGxp
c3QgKi8KICAgICBpZiAocmVxdWVzdC0+ZmxhZ3MgJiAoQVRBX1JfUkVBRCB8IEFUQV9SX1dSSVRF
KSkgewotCWlmIChjaC0+ZG1hLT5sb2FkKGNoLT5kZXYsIHJlcXVlc3QtPmRhdGEsIHJlcXVlc3Qt
PmJ5dGVjb3VudCwKLQkJCSAgcmVxdWVzdC0+ZmxhZ3MgJiBBVEFfUl9SRUFELCBwcmQsICZkdW1t
eSkpIHsKKwlpZiAoY2gtPmRtYS5sb2FkKHJlcXVlc3QsIHByZCwgTlVMTCkpIHsKIAkgICAgZGV2
aWNlX3ByaW50ZihyZXF1ZXN0LT5kZXYsICJzZXR0aW5nIHVwIERNQSBmYWlsZWRcbiIpOwogCSAg
ICByZXF1ZXN0LT5yZXN1bHQgPSBFSU87CiAJICAgIHJldHVybiBBVEFfT1BfRklOSVNIRUQ7CkBA
IC00OTM0LDExICs1NTMxLDEyIEBAIGF0YV9zaWlwcmJfYmVnaW5fdHJhbnNhY3Rpb24oc3RydWN0
IGF0YV8KICAgICB9CiAKICAgICAvKiBhY3RpdmF0ZSB0aGUgcHJiICovCi0gICAgcHJiX2J1cyA9
IGNoLT5kbWEtPndvcmtfYnVzICsgKHNpemVvZihzdHJ1Y3QgYXRhX3NpaXByYl9jb21tYW5kKSAq
IHRhZyk7CisgICAgcHJiX2J1cyA9IGNoLT5kbWEud29ya19idXMgKworCSAgICAgIChzaXplb2Yo
c3RydWN0IGF0YV9zaWlwcmJfY29tbWFuZCkgKiByZXF1ZXN0LT50YWcpOwogICAgIEFUQV9PVVRM
KGN0bHItPnJfcmVzMiwKLQkgICAgIDB4MWMwMCArIG9mZnNldCArICh0YWcgKiBzaXplb2YodV9p
bnQ2NF90KSksIHByYl9idXMpOworCSAgICAgMHgxYzAwICsgb2Zmc2V0ICsgKHJlcXVlc3QtPnRh
ZyAqIHNpemVvZih1X2ludDY0X3QpKSwgcHJiX2J1cyk7CiAgICAgQVRBX09VVEwoY3Rsci0+cl9y
ZXMyLAotCSAgICAgMHgxYzA0ICsgb2Zmc2V0ICsgKHRhZyAqIHNpemVvZih1X2ludDY0X3QpKSwg
cHJiX2J1cz4+MzIpOworCSAgICAgMHgxYzA0ICsgb2Zmc2V0ICsgKHJlcXVlc3QtPnRhZyAqIHNp
emVvZih1X2ludDY0X3QpKSwgcHJiX2J1cz4+MzIpOwogCiAgICAgLyogc3RhcnQgdGhlIHRpbWVv
dXQgKi8KICAgICBjYWxsb3V0X3Jlc2V0KCZyZXF1ZXN0LT5jYWxsb3V0LCByZXF1ZXN0LT50aW1l
b3V0ICogaHosCkBAIC00OTUwLDE2ICs1NTQ4LDE2IEBAIHN0YXRpYyBpbnQKIGF0YV9zaWlwcmJf
ZW5kX3RyYW5zYWN0aW9uKHN0cnVjdCBhdGFfcmVxdWVzdCAqcmVxdWVzdCkKIHsKICAgICBzdHJ1
Y3QgYXRhX3BjaV9jb250cm9sbGVyICpjdGxyPWRldmljZV9nZXRfc29mdGMoR1JBTkRQQVJFTlQo
cmVxdWVzdC0+ZGV2KSk7Ci0gICAgc3RydWN0IGF0YV9jaGFubmVsICpjaCA9IGRldmljZV9nZXRf
c29mdGMoZGV2aWNlX2dldF9wYXJlbnQocmVxdWVzdC0+ZGV2KSk7CisgICAgc3RydWN0IGF0YV9j
aGFubmVsICpjaCA9IGRldmljZV9nZXRfc29mdGMocmVxdWVzdC0+cGFyZW50KTsKICAgICBzdHJ1
Y3QgYXRhX3NpaXByYl9jb21tYW5kICpwcmI7CiAgICAgaW50IG9mZnNldCA9IGNoLT51bml0ICog
MHgyMDAwOwotICAgIGludCBlcnJvciwgdGltZW91dCwgdGFnID0gMDsKKyAgICBpbnQgZXJyb3Is
IHRpbWVvdXQ7CiAKICAgICAvKiBraWxsIHRoZSB0aW1lb3V0ICovCiAgICAgY2FsbG91dF9zdG9w
KCZyZXF1ZXN0LT5jYWxsb3V0KTsKICAgICAKICAgICBwcmIgPSAoc3RydWN0IGF0YV9zaWlwcmJf
Y29tbWFuZCAqKQotCSgodV9pbnQ4X3QgKilybWFuX2dldF92aXJ0dWFsKGN0bHItPnJfcmVzMikg
KyAodGFnIDw8IDcpICsgb2Zmc2V0KTsKKwkoKHVfaW50OF90ICopcm1hbl9nZXRfdmlydHVhbChj
dGxyLT5yX3JlczIpKyhyZXF1ZXN0LT50YWcgPDwgNykrb2Zmc2V0KTsKIAogICAgIC8qIGFueSBj
b250cm9sbGVyIGVycm9ycyBmbGFnZ2VkID8gKi8KICAgICBpZiAoKGVycm9yID0gQVRBX0lOTChj
dGxyLT5yX3JlczIsIDB4MTAyNCArIG9mZnNldCkpKSB7CkBAIC00OTkzLDYgKzU1OTEsMjEgQEAg
YXRhX3NpaXByYl9lbmRfdHJhbnNhY3Rpb24oc3RydWN0IGF0YV9yZQogCX0KICAgICB9CiAKKyAg
ICAvKiBvbiBjb250cm9sIGNvbW1hbmRzIHJlYWQgYmFjayByZWdpc3RlcnMgdG8gdGhlIHJlcXVl
c3Qgc3RydWN0ICovCisgICAgaWYgKHJlcXVlc3QtPmZsYWdzICYgQVRBX1JfQ09OVFJPTCkgewor
ICAgICAgICBzdHJ1Y3QgYXRhX2RldmljZSAqYXRhZGV2ID0gZGV2aWNlX2dldF9zb2Z0YyhyZXF1
ZXN0LT5kZXYpOworCisJcmVxdWVzdC0+dS5hdGEuY291bnQgPSBwcmItPmZpc1sxMl0gfCAoKHVf
aW50MTZfdClwcmItPmZpc1sxM10gPDwgOCk7CisJcmVxdWVzdC0+dS5hdGEubGJhID0gcHJiLT5m
aXNbNF0gfCAoKHVfaW50NjRfdClwcmItPmZpc1s1XSA8PCA4KSB8CisJCQkgICAgICgodV9pbnQ2
NF90KXByYi0+ZmlzWzZdIDw8IDE2KTsKKwlpZiAoYXRhZGV2LT5mbGFncyAmIEFUQV9EXzQ4QklU
X0FDVElWRSkKKwkgICAgcmVxdWVzdC0+dS5hdGEubGJhIHw9ICgodV9pbnQ2NF90KXByYi0+Zmlz
WzhdIDw8IDI0KSB8CisJCQkJICAoKHVfaW50NjRfdClwcmItPmZpc1s5XSA8PCAzMikgfAorCQkJ
CSAgKCh1X2ludDY0X3QpcHJiLT5maXNbMTBdIDw8IDQwKTsKKwllbHNlCisJICAgIHJlcXVlc3Qt
PnUuYXRhLmxiYSB8PSAoKHVfaW50NjRfdCkocHJiLT5maXNbN10gJiAweDBmKSA8PCAyNCk7Cisg
ICAgfQorCiAgICAgLyogdXBkYXRlIHByb2dyZXNzICovCiAgICAgaWYgKCEocmVxdWVzdC0+c3Rh
dHVzICYgQVRBX1NfRVJST1IpICYmICEocmVxdWVzdC0+ZmxhZ3MgJiBBVEFfUl9USU1FT1VUKSkg
ewogCWlmIChyZXF1ZXN0LT5mbGFncyAmIEFUQV9SX1JFQUQpCkBAIC01MDAyLDIxICs1NjE1LDEy
NiBAQCBhdGFfc2lpcHJiX2VuZF90cmFuc2FjdGlvbihzdHJ1Y3QgYXRhX3JlCiAgICAgfQogCiAg
ICAgLyogcmVsZWFzZSBTRyBsaXN0IGV0YyAqLwotICAgIGNoLT5kbWEtPnVubG9hZChjaC0+ZGV2
KTsKKyAgICBjaC0+ZG1hLnVubG9hZChyZXF1ZXN0KTsKIAogICAgIHJldHVybiBBVEFfT1BfRklO
SVNIRUQ7CiB9CiAKK3N0YXRpYyBpbnQKK2F0YV9zaWlwcmJfaXNzdWVfY21kKGRldmljZV90IGRl
dikKK3sKKyAgICBzdHJ1Y3QgYXRhX3BjaV9jb250cm9sbGVyICpjdGxyID0gZGV2aWNlX2dldF9z
b2Z0YyhkZXZpY2VfZ2V0X3BhcmVudChkZXYpKTsKKyAgICBzdHJ1Y3QgYXRhX2NoYW5uZWwgKmNo
ID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworICAgIHVfaW50NjRfdCBwcmJfYnVzID0gY2gtPmRt
YS53b3JrX2J1czsKKyAgICB1X2ludDMyX3Qgc3RhdHVzOworICAgIGludCBvZmZzZXQgPSBjaC0+
dW5pdCAqIDB4MjAwMDsKKyAgICBpbnQgdGltZW91dDsKKworICAgIC8qIGlzc3VlIGNvbW1hbmQg
dG8gY2hpcCAqLworICAgIEFUQV9PVVRMKGN0bHItPnJfcmVzMiwgMHgxYzAwICsgb2Zmc2V0LCBw
cmJfYnVzKTsKKyAgICBBVEFfT1VUTChjdGxyLT5yX3JlczIsIDB4MWMwNCArIG9mZnNldCwgcHJi
X2J1cyA+PiAzMik7CisKKyAgICAvKiBwb2xsIGZvciBjb21tYW5kIGZpbmlzaGVkICovCisgICAg
Zm9yICh0aW1lb3V0ID0gMDsgdGltZW91dCA8IDEwMDAwOyB0aW1lb3V0KyspIHsKKyAgICAgICAg
REVMQVkoMTAwMCk7CisgICAgICAgIGlmICgoc3RhdHVzID0gQVRBX0lOTChjdGxyLT5yX3JlczIs
IDB4MTAwOCArIG9mZnNldCkpICYgMHgwMDAxMDAwMCkKKyAgICAgICAgICAgIGJyZWFrOworICAg
IH0KKyAgICBBVEFfT1VUTChjdGxyLT5yX3JlczIsIDB4MTAwOCArIG9mZnNldCwgMHgwMDAxMDAw
MCk7CisKKyAgICBpZiAodGltZW91dCA+PSAxMDAwKQorCXJldHVybiBFSU87CisKKyAgICBpZiAo
Ym9vdHZlcmJvc2UpCisJZGV2aWNlX3ByaW50ZihkZXYsICJzaWlwcmJfaXNzdWVfY21kIHRpbWU9
JWRtcyBzdGF0dXM9JTA4eFxuIiwKKwkJICAgICAgdGltZW91dCwgc3RhdHVzKTsKKyAgICByZXR1
cm4gMDsKK30KKworc3RhdGljIGludAorYXRhX3NpaXByYl9wbV9yZWFkKGRldmljZV90IGRldiwg
aW50IHBvcnQsIGludCByZWcsIHVfaW50MzJfdCAqcmVzdWx0KQoreworICAgIHN0cnVjdCBhdGFf
cGNpX2NvbnRyb2xsZXIgKmN0bHIgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldmljZV9nZXRfcGFyZW50
KGRldikpOworICAgIHN0cnVjdCBhdGFfY2hhbm5lbCAqY2ggPSBkZXZpY2VfZ2V0X3NvZnRjKGRl
dik7CisgICAgc3RydWN0IGF0YV9zaWlwcmJfY29tbWFuZCAqcHJiID0gKHN0cnVjdCBhdGFfc2lp
cHJiX2NvbW1hbmQgKiljaC0+ZG1hLndvcms7CisgICAgaW50IG9mZnNldCA9IGNoLT51bml0ICog
MHgyMDAwOworCisgICAgYnplcm8ocHJiLCBzaXplb2Yoc3RydWN0IGF0YV9zaWlwcmJfY29tbWFu
ZCkpOworICAgIHByYi0+ZmlzWzBdID0gMHgyNzsJLyogaG9zdCB0byBkZXZpY2UgKi8KKyAgICBw
cmItPmZpc1sxXSA9IDB4OGY7CS8qIGNvbW1hbmQgRklTIHRvIFBNIHBvcnQgKi8KKyAgICBwcmIt
PmZpc1syXSA9IEFUQV9SRUFEX1BNOworICAgIHByYi0+ZmlzWzNdID0gcmVnOworICAgIHByYi0+
ZmlzWzddID0gcG9ydDsKKyAgICBpZiAoYXRhX3NpaXByYl9pc3N1ZV9jbWQoZGV2KSkgeworCWRl
dmljZV9wcmludGYoZGV2LCAiZXJyb3IgcmVhZGluZyBQTSBwb3J0XG4iKTsKKwlyZXR1cm4gRUlP
OworICAgIH0KKyAgICBwcmIgPSAoc3RydWN0IGF0YV9zaWlwcmJfY29tbWFuZCAqKQorCSgodV9p
bnQ4X3QgKilybWFuX2dldF92aXJ0dWFsKGN0bHItPnJfcmVzMikgKyBvZmZzZXQpOworICAgICpy
ZXN1bHQgPSBwcmItPmZpc1sxMl18KHByYi0+ZmlzWzRdPDw4KXwocHJiLT5maXNbNV08PDE2KXwo
cHJiLT5maXNbNl08PDI0KTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorYXRhX3Np
aXByYl9wbV93cml0ZShkZXZpY2VfdCBkZXYsIGludCBwb3J0LCBpbnQgcmVnLCB1X2ludDMyX3Qg
dmFsdWUpCit7CisgICAgc3RydWN0IGF0YV9wY2lfY29udHJvbGxlciAqY3RsciA9IGRldmljZV9n
ZXRfc29mdGMoZGV2aWNlX2dldF9wYXJlbnQoZGV2KSk7CisgICAgc3RydWN0IGF0YV9jaGFubmVs
ICpjaCA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKKyAgICBzdHJ1Y3QgYXRhX3NpaXByYl9jb21t
YW5kICpwcmIgPSAoc3RydWN0IGF0YV9zaWlwcmJfY29tbWFuZCAqKWNoLT5kbWEud29yazsKKyAg
ICBpbnQgb2Zmc2V0ID0gY2gtPnVuaXQgKiAweDIwMDA7CisKKyAgICBiemVybyhwcmIsIHNpemVv
ZihzdHJ1Y3QgYXRhX3NpaXByYl9jb21tYW5kKSk7CisgICAgcHJiLT5maXNbMF0gPSAweDI3Owkv
KiBob3N0IHRvIGRldmljZSAqLworICAgIHByYi0+ZmlzWzFdID0gMHg4ZjsJLyogY29tbWFuZCBG
SVMgdG8gUE0gcG9ydCAqLworICAgIHByYi0+ZmlzWzJdID0gQVRBX1dSSVRFX1BNOworICAgIHBy
Yi0+ZmlzWzNdID0gcmVnOworICAgIHByYi0+ZmlzWzddID0gcG9ydDsKKyAgICBwcmItPmZpc1sx
Ml0gPSB2YWx1ZSAmIDB4ZmY7CisgICAgcHJiLT5maXNbNF0gPSAodmFsdWUgPj4gOCkgJiAweGZm
OzsKKyAgICBwcmItPmZpc1s1XSA9ICh2YWx1ZSA+PiAxNikgJiAweGZmOzsKKyAgICBwcmItPmZp
c1s2XSA9ICh2YWx1ZSA+PiAyNCkgJiAweGZmOzsKKyAgICBpZiAoYXRhX3NpaXByYl9pc3N1ZV9j
bWQoZGV2KSkgeworCWRldmljZV9wcmludGYoZGV2LCAiZXJyb3Igd3JpdGluZyBQTSBwb3J0XG4i
KTsKKwlyZXR1cm4gQVRBX0VfQUJPUlQ7CisgICAgfQorICAgIHByYiA9IChzdHJ1Y3QgYXRhX3Np
aXByYl9jb21tYW5kICopCisJKCh1X2ludDhfdCAqKXJtYW5fZ2V0X3ZpcnR1YWwoY3Rsci0+cl9y
ZXMyKSArIG9mZnNldCk7CisgICAgcmV0dXJuIHByYi0+ZmlzWzNdOworfQorCitzdGF0aWMgdV9p
bnQzMl90CithdGFfc2lpcHJiX3NvZnRyZXNldChkZXZpY2VfdCBkZXYsIGludCBwb3J0KQorewor
ICAgIHN0cnVjdCBhdGFfcGNpX2NvbnRyb2xsZXIgKmN0bHIgPSBkZXZpY2VfZ2V0X3NvZnRjKGRl
dmljZV9nZXRfcGFyZW50KGRldikpOworICAgIHN0cnVjdCBhdGFfY2hhbm5lbCAqY2ggPSBkZXZp
Y2VfZ2V0X3NvZnRjKGRldik7CisgICAgc3RydWN0IGF0YV9zaWlwcmJfY29tbWFuZCAqcHJiID0g
KHN0cnVjdCBhdGFfc2lpcHJiX2NvbW1hbmQgKiljaC0+ZG1hLndvcms7CisgICAgaW50IG9mZnNl
dCA9IGNoLT51bml0ICogMHgyMDAwOworCisgICAgLyogc2V0dXAgdGhlIHdvcmtzcGFjZSBmb3Ig
YSBzb2Z0IHJlc2V0IGNvbW1hbmQgKi8KKyAgICBiemVybyhwcmIsIHNpemVvZihzdHJ1Y3QgYXRh
X3NpaXByYl9jb21tYW5kKSk7CisgICAgcHJiLT5jb250cm9sID0gaHRvbGUxNigweDAwODApOwor
ICAgIHByYi0+ZmlzWzFdID0gcG9ydCAmIDB4MGY7CisKKyAgICAvKiBpc3N1ZSBzb2Z0IHJlc2V0
ICovCisgICAgaWYgKGF0YV9zaWlwcmJfaXNzdWVfY21kKGRldikpCisJcmV0dXJuIC0xOworCisg
ICAgYXRhX3VkZWxheSgxNTAwMDApOworCisgICAgLyogcmV0dXJuIHBvc3NpYmxlIHNpZ25hdHVy
ZSAqLworICAgIHByYiA9IChzdHJ1Y3QgYXRhX3NpaXByYl9jb21tYW5kICopCisJKCh1X2ludDhf
dCAqKXJtYW5fZ2V0X3ZpcnR1YWwoY3Rsci0+cl9yZXMyKSArIG9mZnNldCk7CisgICAgcmV0dXJu
IHByYi0+ZmlzWzEyXXwocHJiLT5maXNbNF08PDgpfChwcmItPmZpc1s1XTw8MTYpfChwcmItPmZp
c1s2XTw8MjQpOworfQorCiBzdGF0aWMgdm9pZAogYXRhX3NpaXByYl9yZXNldChkZXZpY2VfdCBk
ZXYpCiB7CiAgICAgc3RydWN0IGF0YV9wY2lfY29udHJvbGxlciAqY3RsciA9IGRldmljZV9nZXRf
c29mdGMoZGV2aWNlX2dldF9wYXJlbnQoZGV2KSk7CiAgICAgc3RydWN0IGF0YV9jaGFubmVsICpj
aCA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKICAgICBpbnQgb2Zmc2V0ID0gY2gtPnVuaXQgKiAw
eDIwMDA7Ci0gICAgc3RydWN0IGF0YV9zaWlwcmJfY29tbWFuZCAqcHJiOwotICAgIHVfaW50NjRf
dCBwcmJfYnVzOwogICAgIHVfaW50MzJfdCBzdGF0dXMsIHNpZ25hdHVyZTsKLSAgICBpbnQgdGlt
ZW91dCwgdGFnID0gMDsKKyAgICBpbnQgdGltZW91dDsKIAogICAgIC8qIHJlc2V0IGNoYW5uZWwg
SFcgKi8KICAgICBBVEFfT1VUTChjdGxyLT5yX3JlczIsIDB4MTAwMCArIG9mZnNldCwgMHgwMDAw
MDAwMSk7CkBAIC01MDMzLDYyICs1NzUxLDMzIEBAIGF0YV9zaWlwcmJfcmVzZXQoZGV2aWNlX3Qg
ZGV2KQogCiAgICAgaWYgKGJvb3R2ZXJib3NlKSB7CiAJaWYgKHRpbWVvdXQgPj0gMTAwMCkKLQkg
ICAgZGV2aWNlX3ByaW50ZihjaC0+ZGV2LCAiY2hhbm5lbCBIVyByZXNldCB0aW1lb3V0XG4iKTsK
KwkgICAgZGV2aWNlX3ByaW50ZihkZXYsICJjaGFubmVsIEhXIHJlc2V0IHRpbWVvdXRcbiIpOwog
CWVsc2UKLQkgICAgZGV2aWNlX3ByaW50ZihjaC0+ZGV2LCAiY2hhbm5lbCBIVyByZXNldCB0aW1l
PSVkbXNcbiIsIHRpbWVvdXQpOworCSAgICBkZXZpY2VfcHJpbnRmKGRldiwgImNoYW5uZWwgSFcg
cmVzZXQgdGltZT0lZG1zXG4iLCB0aW1lb3V0KTsKICAgICB9CiAKICAgICAvKiByZXNldCBwaHkg
Ki8KICAgICBpZiAoIWF0YV9zYXRhX3BoeV9yZXNldChkZXYpKSB7CiAJaWYgKGJvb3R2ZXJib3Nl
KQotCSAgICBkZXZpY2VfcHJpbnRmKGNoLT5kZXYsICJwaHkgcmVzZXQgZm91bmQgbm8gZGV2aWNl
XG4iKTsKKwkgICAgZGV2aWNlX3ByaW50ZihkZXYsICJwaHkgcmVzZXQgZm91bmQgbm8gZGV2aWNl
XG4iKTsKIAljaC0+ZGV2aWNlcyA9IDA7CiAJZ290byBmaW5pc2g7CiAgICAgfQogCi0gICAgLyog
Z2V0IGEgcGllY2Ugb2YgdGhlIHdvcmtzcGFjZSBmb3IgYSBzb2Z0IHJlc2V0IHJlcXVlc3QgKi8K
LSAgICBwcmIgPSAoc3RydWN0IGF0YV9zaWlwcmJfY29tbWFuZCAqKQotCShjaC0+ZG1hLT53b3Jr
ICsgKHNpemVvZihzdHJ1Y3QgYXRhX3NpaXByYl9jb21tYW5kKSAqIHRhZykpOwotICAgIGJ6ZXJv
KHByYiwgc2l6ZW9mKHN0cnVjdCBhdGFfc2lpcHJiX2NvbW1hbmQpKTsKLSAgICBwcmItPmNvbnRy
b2wgPSBodG9sZTE2KDB4MDA4MCk7Ci0KLSAgICAvKiBhY3RpdmF0ZSB0aGUgc29mdCByZXNldCBw
cmIgKi8KLSAgICBwcmJfYnVzID0gY2gtPmRtYS0+d29ya19idXMgKyAoc2l6ZW9mKHN0cnVjdCBh
dGFfc2lpcHJiX2NvbW1hbmQpICogdGFnKTsKLSAgICBBVEFfT1VUTChjdGxyLT5yX3JlczIsCi0J
ICAgICAweDFjMDAgKyBvZmZzZXQgKyAodGFnICogc2l6ZW9mKHVfaW50NjRfdCkpLCBwcmJfYnVz
KTsKLSAgICBBVEFfT1VUTChjdGxyLT5yX3JlczIsCi0JICAgICAweDFjMDQgKyBvZmZzZXQgKyAo
dGFnICogc2l6ZW9mKHVfaW50NjRfdCkpLCBwcmJfYnVzPj4zMik7Ci0KLSAgICAvKiBwb2xsIGZv
ciBjb21tYW5kIGZpbmlzaGVkICovCi0gICAgZm9yICh0aW1lb3V0ID0gMDsgdGltZW91dCA8IDEw
MDAwOyB0aW1lb3V0KyspIHsKLSAgICAgICAgREVMQVkoMTAwMCk7Ci0gICAgICAgIGlmICgoc3Rh
dHVzID0gQVRBX0lOTChjdGxyLT5yX3JlczIsIDB4MTAwOCArIG9mZnNldCkpICYgMHgwMDAxMDAw
MCkKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBpZiAodGltZW91dCA+PSAxMDAwKSB7
Ci0JZGV2aWNlX3ByaW50ZihjaC0+ZGV2LCAicmVzZXQgdGltZW91dCAtIG5vIGRldmljZSBmb3Vu
ZFxuIik7Ci0JY2gtPmRldmljZXMgPSAwOwotCWdvdG8gZmluaXNoOwotICAgIH0KKyAgICAvKiBp
c3N1ZSBzb2Z0IHJlc2V0ICovCisgICAgc2lnbmF0dXJlID0gYXRhX3NpaXByYl9zb2Z0cmVzZXQo
ZGV2LCBBVEFfUE0pOwogICAgIGlmIChib290dmVyYm9zZSkKLQlkZXZpY2VfcHJpbnRmKGNoLT5k
ZXYsICJzb2Z0IHJlc2V0IGV4ZWMgdGltZT0lZG1zIHN0YXR1cz0lMDh4XG4iLAotCQkJdGltZW91
dCwgc3RhdHVzKTsKKwlkZXZpY2VfcHJpbnRmKGRldiwgIlNJR05BVFVSRT0lMDh4XG4iLCBzaWdu
YXR1cmUpOwogCi0gICAgLyogZmluZCBvdXQgd2hhdHMgdGhlcmUgKi8KLSAgICBwcmIgPSAoc3Ry
dWN0IGF0YV9zaWlwcmJfY29tbWFuZCAqKQotCSgodV9pbnQ4X3QgKilybWFuX2dldF92aXJ0dWFs
KGN0bHItPnJfcmVzMikgKyAodGFnIDw8IDcpICsgb2Zmc2V0KTsKLSAgICBzaWduYXR1cmUgPQot
CXByYi0+ZmlzWzEyXXwocHJiLT5maXNbNF08PDgpfChwcmItPmZpc1s1XTw8MTYpfChwcmItPmZp
c1s2XTw8MjQpOwotICAgIGlmIChib290dmVyYm9zZSkKLQlkZXZpY2VfcHJpbnRmKGNoLT5kZXYs
ICJTSUdOQVRVUkU9JTA4eFxuIiwgc2lnbmF0dXJlKTsKKyAgICAvKiBmaWd1cmUgb3V0IHdoYXRz
IHRoZXJlICovCiAgICAgc3dpdGNoIChzaWduYXR1cmUpIHsKICAgICBjYXNlIDB4MDAwMDAxMDE6
CiAJY2gtPmRldmljZXMgPSBBVEFfQVRBX01BU1RFUjsKIAlicmVhazsKICAgICBjYXNlIDB4OTY2
OTAxMDE6CiAJY2gtPmRldmljZXMgPSBBVEFfUE9SVE1VTFRJUExJRVI7Ci0JZGV2aWNlX3ByaW50
ZihjaC0+ZGV2LCAiUG9ydG11bHRpcGxpZXJzIG5vdCBzdXBwb3J0ZWQgeWV0XG4iKTsKLQljaC0+
ZGV2aWNlcyA9IDA7CisJQVRBX09VVEwoY3Rsci0+cl9yZXMyLCAweDEwMDAgKyBvZmZzZXQsIDB4
MjAwMCk7IC8qIGVuYWJsZSBQTSBzdXBwb3J0ICovCisJYXRhX3BtX2lkZW50aWZ5KGRldik7CiAJ
YnJlYWs7CiAgICAgY2FzZSAweGViMTQwMTAxOgogCWNoLT5kZXZpY2VzID0gQVRBX0FUQVBJX01B
U1RFUjsKQEAgLTUwOTcsOCArNTc4Niw3IEBAIGF0YV9zaWlwcmJfcmVzZXQoZGV2aWNlX3QgZGV2
KQogCWNoLT5kZXZpY2VzID0gMDsKICAgICB9CiAgICAgaWYgKGJvb3R2ZXJib3NlKQotICAgICAg
ICBkZXZpY2VfcHJpbnRmKGRldiwgInNpaXByYl9yZXNldCBkZXZpY2VzPTB4JWJcbiIsIGNoLT5k
ZXZpY2VzLAotICAgICAgICAgICAgICAgICAgICAgICJcMjBcNEFUQVBJX1NMQVZFXDNBVEFQSV9N
QVNURVJcMkFUQV9TTEFWRVwxQVRBX01BU1RFUiIpOworICAgICAgICBkZXZpY2VfcHJpbnRmKGRl
diwgInNpaXByYl9yZXNldCBkZXZpY2VzPSUwOHhcbiIsIGNoLT5kZXZpY2VzKTsKIAogZmluaXNo
OgogICAgIC8qIGNsZWFyIGludGVycnVwdChzKSAqLwpAQCAtNTEyOSw3ICs1ODE3LDcgQEAgYXRh
X3NpaXByYl9kbWFzZXRwcmQodm9pZCAqeHNjLCBidXNfZG1hXwogCXByZFtpXS5jb3VudCA9IGh0
b2xlMzIoc2Vnc1tpXS5kc19sZW4pOwogICAgIH0KICAgICBwcmRbaSAtIDFdLmNvbnRyb2wgPSBo
dG9sZTMyKEFUQV9ETUFfRU9UKTsKLSAgICBLQVNTRVJUKG5zZWdzIDw9IEFUQV9ETUFfRU5UUklF
UywgKCJ0b28gbWFueSBETUEgc2VnbWVudCBlbnRyaWVzXG4iKSk7CisgICAgS0FTU0VSVChuc2Vn
cyA8PSBBVEFfU0lJUFJCX0RNQV9FTlRSSUVTLCgidG9vIG1hbnkgRE1BIHNlZ21lbnQgZW50cmll
c1xuIikpOwogICAgIGFyZ3MtPm5zZWdzID0gbnNlZ3M7CiB9CiAKQEAgLTUxMzksMTEgKzU4Mjcs
OSBAQCBhdGFfc2lpcHJiX2RtYWluaXQoZGV2aWNlX3QgZGV2KQogICAgIHN0cnVjdCBhdGFfY2hh
bm5lbCAqY2ggPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CiAKICAgICBhdGFfZG1haW5pdChkZXYp
OwotICAgIGlmIChjaC0+ZG1hKSB7Ci0JLyogbm90ZSBzdGFydCBhbmQgc3RvcCBhcmUgbm90IHVz
ZWQgaGVyZSAqLwotCWNoLT5kbWEtPnNldHByZCA9IGF0YV9zaWlwcmJfZG1hc2V0cHJkOwotCWNo
LT5kbWEtPm1heF9hZGRyZXNzID0gQlVTX1NQQUNFX01BWEFERFI7Ci0gICAgfQorICAgIC8qIG5v
dGUgc3RhcnQgYW5kIHN0b3AgYXJlIG5vdCB1c2VkIGhlcmUgKi8KKyAgICBjaC0+ZG1hLnNldHBy
ZCA9IGF0YV9zaWlwcmJfZG1hc2V0cHJkOworICAgIGNoLT5kbWEubWF4X2FkZHJlc3MgPSBCVVNf
U1BBQ0VfTUFYQUREUjsKIH0KIAogCkBAIC01MzE0LDcgKzYwMDAsNyBAQCBhdGFfc2lzX3NldG1v
ZGUoZGV2aWNlX3QgZGV2LCBpbnQgbW9kZSkKICAgICBzdHJ1Y3QgYXRhX3BjaV9jb250cm9sbGVy
ICpjdGxyID0gZGV2aWNlX2dldF9zb2Z0YyhncGFyZW50KTsKICAgICBzdHJ1Y3QgYXRhX2NoYW5u
ZWwgKmNoID0gZGV2aWNlX2dldF9zb2Z0YyhkZXZpY2VfZ2V0X3BhcmVudChkZXYpKTsKICAgICBz
dHJ1Y3QgYXRhX2RldmljZSAqYXRhZGV2ID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOwotICAgIGlu
dCBkZXZubyA9IChjaC0+dW5pdCA8PCAxKSArIEFUQV9ERVYoYXRhZGV2LT51bml0KTsKKyAgICBp
bnQgZGV2bm8gPSAoY2gtPnVuaXQgPDwgMSkgKyBhdGFkZXYtPnVuaXQ7CiAgICAgaW50IGVycm9y
OwogCiAgICAgbW9kZSA9IGF0YV9saW1pdF9tb2RlKGRldiwgbW9kZSwgY3Rsci0+Y2hpcC0+bWF4
X2RtYSk7CkBAIC01NjM5LDcgKzYzMjUsNyBAQCBhdGFfdmlhX2ZhbWlseV9zZXRtb2RlKGRldmlj
ZV90IGRldiwgaW50CiAJeyAweGY3LCAweGY2LCAweGY0LCAweGYyLCAweGYxLCAweGYwLCAweDAw
IH0sICAgLyogVklBIEFUQTEwMCAqLwogCXsgMHhmNywgMHhmNywgMHhmNiwgMHhmNCwgMHhmMiwg
MHhmMSwgMHhmMCB9LCAgIC8qIFZJQSBBVEExMzMgKi8KIAl7IDB4YzIsIDB4YzEsIDB4YzAsIDB4
YzQsIDB4YzUsIDB4YzYsIDB4YzcgfX07ICAvKiBBTUQvblZJRElBICovCi0gICAgaW50IGRldm5v
ID0gKGNoLT51bml0IDw8IDEpICsgQVRBX0RFVihhdGFkZXYtPnVuaXQpOworICAgIGludCBkZXZu
byA9IChjaC0+dW5pdCA8PCAxKSArIGF0YWRldi0+dW5pdDsKICAgICBpbnQgcmVnID0gMHg1MyAt
IGRldm5vOwogICAgIGludCBlcnJvcjsKIApAQCAtNTc5Myw3ICs2NDc5LDcgQEAgYXRhX3Nlcmlh
bGl6ZShkZXZpY2VfdCBkZXYsIGludCBmbGFncykKIAkJaWYgKChjaCA9IGN0bHItPmludGVycnVw
dFtzZXJpYWwtPnJlc3RhcnRfY2hdLmFyZ3VtZW50KSkgewogCQkgICAgc2VyaWFsLT5yZXN0YXJ0
X2NoID0gLTE7CiAJCSAgICBtdHhfdW5sb2NrKCZzZXJpYWwtPmxvY2tlZF9tdHgpOwotCQkgICAg
YXRhX3N0YXJ0KGNoLT5kZXYpOworCQkgICAgYXRhX3N0YXJ0KGRldik7CiAJCSAgICByZXR1cm4g
LTE7CiAJCX0KIAkgICAgfQotLS0gc3JjL3N5cy9kZXYvYXRhL2F0YS1kaXNrLmMJMjAwOC0wNC0w
OCAxNDo0ODoyMS4wMDAwMDAwMDAgKzA0MDAKKysrIHNyYy9zeXMvZGV2L2F0YS9hdGEtZGlzay5j
CTIwMDgtMDUtMDggMjE6NTU6NDQuMDAwMDAwMDAwICswNDAwCkBAIC0xLDUgKzEsNSBAQAogLyot
Ci0gKiBDb3B5cmlnaHQgKGMpIDE5OTggLSAyMDA3IFP4cmVuIFNjaG1pZHQgPHNvc0BGcmVlQlNE
Lm9yZz4KKyAqIENvcHlyaWdodCAoYykgMTk5OCAtIDIwMDggU/hyZW4gU2NobWlkdCA8c29zQEZy
ZWVCU0Qub3JnPgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAg
LTM5LDcgKzM5LDYgQEAgX19GQlNESUQoIiRGcmVlQlNEOiBzcmMvc3lzL2Rldi9hdGEvYXRhLQog
I2luY2x1ZGUgPHN5cy9jb25mLmg+CiAjaW5jbHVkZSA8c3lzL2Rpc2suaD4KICNpbmNsdWRlIDxz
eXMvY29ucy5oPgotI2luY2x1ZGUgPHN5cy9zeXNjdGwuaD4KICNpbmNsdWRlIDxzeXMvc2VtYS5o
PgogI2luY2x1ZGUgPHN5cy90YXNrcXVldWUuaD4KICNpbmNsdWRlIDx2bS91bWEuaD4KQEAgLTU0
LDEwICs1MywxMiBAQCBfX0ZCU0RJRCgiJEZyZWVCU0Q6IHNyYy9zeXMvZGV2L2F0YS9hdGEtCiAj
aW5jbHVkZSA8YXRhX2lmLmg+CiAKIC8qIHByb3RvdHlwZXMgKi8KLXN0YXRpYyB2b2lkIGFkX2lu
aXQoZGV2aWNlX3QpOwotc3RhdGljIHZvaWQgYWRfZG9uZShzdHJ1Y3QgYXRhX3JlcXVlc3QgKik7
CitzdGF0aWMgdm9pZCBhZF9pbml0KGRldmljZV90IGRldik7CitzdGF0aWMgdm9pZCBhZF9nZXRf
Z2VvbWV0cnkoZGV2aWNlX3QgZGV2KTsKK3N0YXRpYyB2b2lkIGFkX3NldF9nZW9tZXRyeShkZXZp
Y2VfdCBkZXYpOworc3RhdGljIHZvaWQgYWRfZG9uZShzdHJ1Y3QgYXRhX3JlcXVlc3QgKnJlcXVl
c3QpOwogc3RhdGljIHZvaWQgYWRfZGVzY3JpYmUoZGV2aWNlX3QgZGV2KTsKLXN0YXRpYyBpbnQg
YWRfdmVyc2lvbih1X2ludDE2X3QpOworc3RhdGljIGludCBhZF92ZXJzaW9uKHVfaW50MTZfdCB2
ZXJzaW9uKTsKIHN0YXRpYyBkaXNrX3N0cmF0ZWd5X3QgYWRfc3RyYXRlZ3k7CiBzdGF0aWMgZGlz
a19pb2N0bF90IGFkX2lvY3RsOwogc3RhdGljIGR1bXBlcl90IGFkX2R1bXA7CkBAIC05Myw4ICs5
NCw2IEBAIGFkX2F0dGFjaChkZXZpY2VfdCBkZXYpCiAgICAgc3RydWN0IGF0YV9jaGFubmVsICpj
aCA9IGRldmljZV9nZXRfc29mdGMoZGV2aWNlX2dldF9wYXJlbnQoZGV2KSk7CiAgICAgc3RydWN0
IGF0YV9kZXZpY2UgKmF0YWRldiA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKICAgICBzdHJ1Y3Qg
YWRfc29mdGMgKmFkcDsKLSAgICB1X2ludDMyX3QgbGJhc2l6ZTsKLSAgICB1X2ludDY0X3QgbGJh
c2l6ZTQ4OwogCiAgICAgLyogY2hlY2sgdGhhdCB3ZSBoYXZlIGEgdmlyZ2luIGRpc2sgdG8gYXR0
YWNoICovCiAgICAgaWYgKGRldmljZV9nZXRfaXZhcnMoZGV2KSkKQEAgLTEwNiwzNyArMTA1LDEy
IEBAIGFkX2F0dGFjaChkZXZpY2VfdCBkZXYpCiAgICAgfQogICAgIGRldmljZV9zZXRfaXZhcnMo
ZGV2LCBhZHApOwogCi0gICAgaWYgKChhdGFkZXYtPnBhcmFtLmF0YXZhbGlkICYgQVRBX0ZMQUdf
NTRfNTgpICYmCi0JYXRhZGV2LT5wYXJhbS5jdXJyZW50X2hlYWRzICYmIGF0YWRldi0+cGFyYW0u
Y3VycmVudF9zZWN0b3JzKSB7Ci0JYWRwLT5oZWFkcyA9IGF0YWRldi0+cGFyYW0uY3VycmVudF9o
ZWFkczsKLQlhZHAtPnNlY3RvcnMgPSBhdGFkZXYtPnBhcmFtLmN1cnJlbnRfc2VjdG9yczsKLQlh
ZHAtPnRvdGFsX3NlY3MgPSAodV9pbnQzMl90KWF0YWRldi0+cGFyYW0uY3VycmVudF9zaXplXzEg
fAotCQkJICAoKHVfaW50MzJfdClhdGFkZXYtPnBhcmFtLmN1cnJlbnRfc2l6ZV8yIDw8IDE2KTsK
LSAgICB9Ci0gICAgZWxzZSB7Ci0JYWRwLT5oZWFkcyA9IGF0YWRldi0+cGFyYW0uaGVhZHM7Ci0J
YWRwLT5zZWN0b3JzID0gYXRhZGV2LT5wYXJhbS5zZWN0b3JzOwotCWFkcC0+dG90YWxfc2VjcyA9
IGF0YWRldi0+cGFyYW0uY3lsaW5kZXJzICogYWRwLT5oZWFkcyAqIGFkcC0+c2VjdG9yczsgIAot
ICAgIH0KLSAgICBsYmFzaXplID0gKHVfaW50MzJfdClhdGFkZXYtPnBhcmFtLmxiYV9zaXplXzEg
fAotCSAgICAgICgodV9pbnQzMl90KWF0YWRldi0+cGFyYW0ubGJhX3NpemVfMiA8PCAxNik7Ci0K
LSAgICAvKiBkb2VzIHRoaXMgZGV2aWNlIG5lZWQgb2xkc3R5bGUgQ0hTIGFkZHJlc3NpbmcgKi8K
LSAgICBpZiAoIWFkX3ZlcnNpb24oYXRhZGV2LT5wYXJhbS52ZXJzaW9uX21ham9yKSB8fCAhbGJh
c2l6ZSkKLQlhdGFkZXYtPmZsYWdzIHw9IEFUQV9EX1VTRV9DSFM7CisgICAgLyogZ2V0IGRldmlj
ZSBnZW9tZXRyeSBpbnRvIGludGVybmFsIHN0cnVjdHMgKi8KKyAgICBhZF9nZXRfZ2VvbWV0cnko
ZGV2KTsKIAotICAgIC8qIHVzZSB0aGUgMjhiaXQgTEJBIHNpemUgaWYgdmFsaWQgb3IgYmlnZ2Vy
IHRoYW4gdGhlIENIUyBtYXBwaW5nICovCi0gICAgaWYgKGF0YWRldi0+cGFyYW0uY3lsaW5kZXJz
ID09IDE2MzgzIHx8IGFkcC0+dG90YWxfc2VjcyA8IGxiYXNpemUpCi0JYWRwLT50b3RhbF9zZWNz
ID0gbGJhc2l6ZTsKLQotICAgIC8qIHVzZSB0aGUgNDhiaXQgTEJBIHNpemUgaWYgdmFsaWQgKi8K
LSAgICBsYmFzaXplNDggPSAoKHVfaW50NjRfdClhdGFkZXYtPnBhcmFtLmxiYV9zaXplNDhfMSkg
fAotCQkoKHVfaW50NjRfdClhdGFkZXYtPnBhcmFtLmxiYV9zaXplNDhfMiA8PCAxNikgfAotCQko
KHVfaW50NjRfdClhdGFkZXYtPnBhcmFtLmxiYV9zaXplNDhfMyA8PCAzMikgfAotCQkoKHVfaW50
NjRfdClhdGFkZXYtPnBhcmFtLmxiYV9zaXplNDhfNCA8PCA0OCk7Ci0gICAgaWYgKChhdGFkZXYt
PnBhcmFtLnN1cHBvcnQuY29tbWFuZDIgJiBBVEFfU1VQUE9SVF9BRERSRVNTNDgpICYmCi0JbGJh
c2l6ZTQ4ID4gQVRBX01BWF8yOEJJVF9MQkEpCi0JYWRwLT50b3RhbF9zZWNzID0gbGJhc2l6ZTQ4
OworICAgIC8qIHNldCB0aGUgbWF4IHNpemUgaWYgY29uZmlndXJlZCAqLworICAgIGlmIChhdGFf
c2V0bWF4KQorCWFkX3NldF9nZW9tZXRyeShkZXYpOwogCiAgICAgLyogaW5pdCBkZXZpY2UgcGFy
YW1ldGVycyAqLwogICAgIGFkX2luaXQoZGV2KTsKQEAgLTE1MSwxMCArMTI1LDcgQEAgYWRfYXR0
YWNoKGRldmljZV90IGRldikKICAgICBhZHAtPmRpc2stPmRfZHVtcCA9IGFkX2R1bXA7CiAgICAg
YWRwLT5kaXNrLT5kX25hbWUgPSAiYWQiOwogICAgIGFkcC0+ZGlzay0+ZF9kcnYxID0gZGV2Owot
ICAgIGlmIChjaC0+ZG1hKQotCWFkcC0+ZGlzay0+ZF9tYXhzaXplID0gY2gtPmRtYS0+bWF4X2lv
c2l6ZTsKLSAgICBlbHNlCi0JYWRwLT5kaXNrLT5kX21heHNpemUgPSBERkxUUEhZUzsKKyAgICBh
ZHAtPmRpc2stPmRfbWF4c2l6ZSA9IGNoLT5kbWEubWF4X2lvc2l6ZSA/IGNoLT5kbWEubWF4X2lv
c2l6ZSA6IERGTFRQSFlTOwogICAgIGFkcC0+ZGlzay0+ZF9zZWN0b3JzaXplID0gREVWX0JTSVpF
OwogICAgIGFkcC0+ZGlzay0+ZF9tZWRpYXNpemUgPSBERVZfQlNJWkUgKiAob2ZmX3QpYWRwLT50
b3RhbF9zZWNzOwogICAgIGFkcC0+ZGlzay0+ZF9md3NlY3RvcnMgPSBhZHAtPnNlY3RvcnM7CkBA
IC0yNDksNyArMjIwLDcgQEAgYWRfc3BpbmRvd24odm9pZCAqcHJpdikKICAgICBzdHJ1Y3QgYXRh
X2RldmljZSAqYXRhZGV2ID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOwogICAgIHN0cnVjdCBhdGFf
cmVxdWVzdCAqcmVxdWVzdDsKIAotICAgIGlmKGF0YWRldi0+c3BpbmRvd24gPT0gMCkKKyAgICBp
ZiAoIWF0YWRldi0+c3BpbmRvd24pCiAJcmV0dXJuOwogICAgIGRldmljZV9wcmludGYoZGV2LCAi
SWRsZSwgc3BpbiBkb3duXG4iKTsKICAgICBhdGFkZXYtPnNwaW5kb3duX3N0YXRlID0gMTsKQEAg
LTI1Nyw4ICsyMjgsOCBAQCBhZF9zcGluZG93bih2b2lkICpwcml2KQogCWRldmljZV9wcmludGYo
ZGV2LCAiRkFJTFVSRSAtIG91dCBvZiBtZW1vcnkgaW4gYWRfc3BpbmRvd25cbiIpOwogCXJldHVy
bjsKICAgICB9Ci0gICAgcmVxdWVzdC0+ZmxhZ3MgPSBBVEFfUl9DT05UUk9MOwogICAgIHJlcXVl
c3QtPmRldiA9IGRldjsKKyAgICByZXF1ZXN0LT5mbGFncyA9IEFUQV9SX0NPTlRST0w7CiAgICAg
cmVxdWVzdC0+dGltZW91dCA9IDU7CiAgICAgcmVxdWVzdC0+cmV0cmllcyA9IDE7CiAgICAgcmVx
dWVzdC0+Y2FsbGJhY2sgPSBhZF9wb3dlcl9jYWxsYmFjazsKQEAgLTI3NCw5ICsyNDUsOSBAQCBh
ZF9zdHJhdGVneShzdHJ1Y3QgYmlvICpicCkKICAgICBzdHJ1Y3QgYXRhX2RldmljZSAqYXRhZGV2
ID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOwogICAgIHN0cnVjdCBhdGFfcmVxdWVzdCAqcmVxdWVz
dDsKIAotICAgIGlmIChhdGFkZXYtPnNwaW5kb3duICE9IDApCisgICAgaWYgKGF0YWRldi0+c3Bp
bmRvd24pCiAJY2FsbG91dF9yZXNldCgmYXRhZGV2LT5zcGluZG93bl90aW1lciwgaHogKiBhdGFk
ZXYtPnNwaW5kb3duLAotCSAgICBhZF9zcGluZG93biwgZGV2KTsKKwkJICAgICAgYWRfc3BpbmRv
d24sIGRldik7CiAKICAgICBpZiAoIShyZXF1ZXN0ID0gYXRhX2FsbG9jX3JlcXVlc3QoKSkpIHsK
IAlkZXZpY2VfcHJpbnRmKGRldiwgIkZBSUxVUkUgLSBvdXQgb2YgbWVtb3J5IGluIHN0YXJ0XG4i
KTsKQEAgLTI5Miw3ICsyNjMsOCBAQCBhZF9zdHJhdGVneShzdHJ1Y3QgYmlvICpicCkKIAlkZXZp
Y2VfcHJpbnRmKGRldiwgInJlcXVlc3Qgd2hpbGUgc3B1biBkb3duLCBzdGFydGluZy5cbiIpOwog
CWF0YWRldi0+c3BpbmRvd25fc3RhdGUgPSAwOwogCXJlcXVlc3QtPnRpbWVvdXQgPSAzMTsKLSAg
ICB9IGVsc2UgeworICAgIH0KKyAgICBlbHNlIHsKIAlyZXF1ZXN0LT50aW1lb3V0ID0gNTsKICAg
ICB9CiAgICAgcmVxdWVzdC0+cmV0cmllcyA9IDI7CkBAIC00MjYsNyArMzk4LDEwNSBAQCBhZF9p
bml0KGRldmljZV90IGRldikKIAlhdGFkZXYtPm1heF9pb3NpemUgPSBERVZfQlNJWkU7CiB9CiAK
LXZvaWQKK3N0YXRpYyB2b2lkCithZF9nZXRfZ2VvbWV0cnkoZGV2aWNlX3QgZGV2KQoreworICAg
IHN0cnVjdCBhdGFfZGV2aWNlICphdGFkZXYgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisgICAg
c3RydWN0IGFkX3NvZnRjICphZHAgPSBkZXZpY2VfZ2V0X2l2YXJzKGRldik7CisgICAgdV9pbnQ2
NF90IGxiYXNpemU0ODsKKyAgICB1X2ludDMyX3QgbGJhc2l6ZTsKKworICAgIGlmICgoYXRhZGV2
LT5wYXJhbS5hdGF2YWxpZCAmIEFUQV9GTEFHXzU0XzU4KSAmJgorCWF0YWRldi0+cGFyYW0uY3Vy
cmVudF9oZWFkcyAmJiBhdGFkZXYtPnBhcmFtLmN1cnJlbnRfc2VjdG9ycykgeworCWFkcC0+aGVh
ZHMgPSBhdGFkZXYtPnBhcmFtLmN1cnJlbnRfaGVhZHM7CisJYWRwLT5zZWN0b3JzID0gYXRhZGV2
LT5wYXJhbS5jdXJyZW50X3NlY3RvcnM7CisJYWRwLT50b3RhbF9zZWNzID0gKHVfaW50MzJfdClh
dGFkZXYtPnBhcmFtLmN1cnJlbnRfc2l6ZV8xIHwKKwkJCSAgKCh1X2ludDMyX3QpYXRhZGV2LT5w
YXJhbS5jdXJyZW50X3NpemVfMiA8PCAxNik7CisgICAgfQorICAgIGVsc2UgeworCWFkcC0+aGVh
ZHMgPSBhdGFkZXYtPnBhcmFtLmhlYWRzOworCWFkcC0+c2VjdG9ycyA9IGF0YWRldi0+cGFyYW0u
c2VjdG9yczsKKwlhZHAtPnRvdGFsX3NlY3MgPSBhdGFkZXYtPnBhcmFtLmN5bGluZGVycyAqIGFk
cC0+aGVhZHMgKiBhZHAtPnNlY3RvcnM7ICAKKyAgICB9CisgICAgbGJhc2l6ZSA9ICh1X2ludDMy
X3QpYXRhZGV2LT5wYXJhbS5sYmFfc2l6ZV8xIHwKKwkgICAgICAoKHVfaW50MzJfdClhdGFkZXYt
PnBhcmFtLmxiYV9zaXplXzIgPDwgMTYpOworCisgICAgLyogZG9lcyB0aGlzIGRldmljZSBuZWVk
IG9sZHN0eWxlIENIUyBhZGRyZXNzaW5nICovCisgICAgaWYgKCFhZF92ZXJzaW9uKGF0YWRldi0+
cGFyYW0udmVyc2lvbl9tYWpvcikgfHwgIWxiYXNpemUpCisJYXRhZGV2LT5mbGFncyB8PSBBVEFf
RF9VU0VfQ0hTOworCisgICAgLyogdXNlIHRoZSAyOGJpdCBMQkEgc2l6ZSBpZiB2YWxpZCBvciBi
aWdnZXIgdGhhbiB0aGUgQ0hTIG1hcHBpbmcgKi8KKyAgICBpZiAoYXRhZGV2LT5wYXJhbS5jeWxp
bmRlcnMgPT0gMTYzODMgfHwgYWRwLT50b3RhbF9zZWNzIDwgbGJhc2l6ZSkKKwlhZHAtPnRvdGFs
X3NlY3MgPSBsYmFzaXplOworCisgICAgLyogdXNlIHRoZSA0OGJpdCBMQkEgc2l6ZSBpZiB2YWxp
ZCAqLworICAgIGxiYXNpemU0OCA9ICgodV9pbnQ2NF90KWF0YWRldi0+cGFyYW0ubGJhX3NpemU0
OF8xKSB8CisJCSgodV9pbnQ2NF90KWF0YWRldi0+cGFyYW0ubGJhX3NpemU0OF8yIDw8IDE2KSB8
CisJCSgodV9pbnQ2NF90KWF0YWRldi0+cGFyYW0ubGJhX3NpemU0OF8zIDw8IDMyKSB8CisJCSgo
dV9pbnQ2NF90KWF0YWRldi0+cGFyYW0ubGJhX3NpemU0OF80IDw8IDQ4KTsKKyAgICBpZiAoKGF0
YWRldi0+cGFyYW0uc3VwcG9ydC5jb21tYW5kMiAmIEFUQV9TVVBQT1JUX0FERFJFU1M0OCkgJiYK
KwlsYmFzaXplNDggPiBBVEFfTUFYXzI4QklUX0xCQSkKKwlhZHAtPnRvdGFsX3NlY3MgPSBsYmFz
aXplNDg7Cit9CisKK3N0YXRpYyB2b2lkCithZF9zZXRfZ2VvbWV0cnkoZGV2aWNlX3QgZGV2KQor
eworICAgIHN0cnVjdCBhZF9zb2Z0YyAqYWRwID0gZGV2aWNlX2dldF9pdmFycyhkZXYpOworICAg
IHN0cnVjdCBhdGFfcmVxdWVzdCAqcmVxdWVzdDsKKworICAgIGlmICgxIHwgYm9vdHZlcmJvc2Up
CisJZGV2aWNlX3ByaW50ZihkZXYsICJPUkcgJWp1IHNlY3RvcnMgWyVqdUMvJWRILyVkU11cbiIs
IGFkcC0+dG90YWxfc2VjcywKKwkJICAgICAgYWRwLT50b3RhbF9zZWNzIC8gKGFkcC0+aGVhZHMg
KiBhZHAtPnNlY3RvcnMpLAorCQkgICAgICBhZHAtPmhlYWRzLCBhZHAtPnNlY3RvcnMpOworCisg
ICAgaWYgKCEocmVxdWVzdCA9IGF0YV9hbGxvY19yZXF1ZXN0KCkpKQorCXJldHVybjsKKworICAg
IC8qIGdldCB0aGUgbWF4IG5hdGl2ZSBzaXplIHRoZSBkZXZpY2Ugc3VwcG9ydHMgKi8KKyAgICBy
ZXF1ZXN0LT5kZXYgPSBkZXY7CisgICAgcmVxdWVzdC0+dS5hdGEuY29tbWFuZCA9IEFUQV9SRUFE
X05BVElWRV9NQVhfQUREUkVTUzsKKyAgICByZXF1ZXN0LT51LmF0YS5sYmEgPSAwOworICAgIHJl
cXVlc3QtPnUuYXRhLmNvdW50ID0gMDsKKyAgICByZXF1ZXN0LT51LmF0YS5mZWF0dXJlID0gMDsK
KyAgICByZXF1ZXN0LT5mbGFncyA9IEFUQV9SX0NPTlRST0wgfCBBVEFfUl9RVUlFVDsKKyAgICBy
ZXF1ZXN0LT50aW1lb3V0ID0gNTsKKyAgICByZXF1ZXN0LT5yZXRyaWVzID0gMDsKKyAgICBhdGFf
cXVldWVfcmVxdWVzdChyZXF1ZXN0KTsKKyAgICBpZiAocmVxdWVzdC0+c3RhdHVzICYgQVRBX1Nf
RVJST1IpCisJZ290byBvdXQ7CisKKyAgICBpZiAoMSB8IGJvb3R2ZXJib3NlKQorCWRldmljZV9w
cmludGYoZGV2LCAiTUFYICVqdSBzZWN0b3JzXG4iLCByZXF1ZXN0LT51LmF0YS5sYmEgKyAxKTsK
KworICAgIC8qIGlmIG9yaWdpbmFsIHNpemUgZXF1YWxzIG1heCBzaXplIG5vdGhpbmcgbW9yZSB0
b2RvICovCisgICAgaWYgKGFkcC0+dG90YWxfc2VjcyA+PSByZXF1ZXN0LT51LmF0YS5sYmEpCisJ
Z290byBvdXQ7CisKKyAgICAvKiBzZXQgdGhlIG1heCBuYXRpdmUgc2l6ZSB0byBpdHMgbWF4ICov
CisgICAgcmVxdWVzdC0+ZGV2ID0gZGV2OworICAgIHJlcXVlc3QtPnUuYXRhLmNvbW1hbmQgPSBB
VEFfU0VUX01BWF9BRERSRVNTOworICAgIHJlcXVlc3QtPnUuYXRhLmNvdW50ID0gMTsKKyAgICBy
ZXF1ZXN0LT51LmF0YS5mZWF0dXJlID0gMDsKKyAgICByZXF1ZXN0LT5mbGFncyA9IEFUQV9SX0NP
TlRST0w7CisgICAgcmVxdWVzdC0+dGltZW91dCA9IDU7CisgICAgcmVxdWVzdC0+cmV0cmllcyA9
IDA7CisgICAgYXRhX3F1ZXVlX3JlcXVlc3QocmVxdWVzdCk7CisgICAgaWYgKHJlcXVlc3QtPnN0
YXR1cyAmIEFUQV9TX0VSUk9SKQorCWdvdG8gb3V0OworCisgICAgLyogcmVmcmVzaCBnZW9tZXRy
eSBmcm9tIGRyaXZlICovCisgICAgYXRhX2dldHBhcmFtKGRldmljZV9nZXRfc29mdGMoZGV2KSwg
MCk7CisgICAgYWRfZ2V0X2dlb21ldHJ5KGRldik7CisgICAgaWYgKDEgfCBib290dmVyYm9zZSkK
KwlkZXZpY2VfcHJpbnRmKGRldiwgIk5FVyAlanUgc2VjdG9ycyBbJWp1Qy8lZEgvJWRTXVxuIiwg
YWRwLT50b3RhbF9zZWNzLAorCQkgICAgICBhZHAtPnRvdGFsX3NlY3MgLyAoYWRwLT5oZWFkcyAq
IGFkcC0+c2VjdG9ycyksCisJCSAgICAgIGFkcC0+aGVhZHMsIGFkcC0+c2VjdG9ycyk7CitvdXQ6
CisgICAgYXRhX2ZyZWVfcmVxdWVzdChyZXF1ZXN0KTsKK30KKworc3RhdGljIHZvaWQKIGFkX2Rl
c2NyaWJlKGRldmljZV90IGRldikKIHsKICAgICBzdHJ1Y3QgYXRhX2NoYW5uZWwgKmNoID0gZGV2
aWNlX2dldF9zb2Z0YyhkZXZpY2VfZ2V0X3BhcmVudChkZXYpKTsKQEAgLTQ1OCw4ICs1MjgsNyBA
QCBhZF9kZXNjcmliZShkZXZpY2VfdCBkZXYpCiAgICAgZGV2aWNlX3ByaW50ZihkZXYsICIlanVN
QiA8JXMlcyAlLjhzPiBhdCBhdGElZC0lcyAlcyVzXG4iLAogCQkgIGFkcC0+dG90YWxfc2VjcyAv
ICgxMDQ4NTc2IC8gREVWX0JTSVpFKSwKIAkJICB2ZW5kb3IsIHByb2R1Y3QsIGF0YWRldi0+cGFy
YW0ucmV2aXNpb24sCi0JCSAgZGV2aWNlX2dldF91bml0KGNoLT5kZXYpLAotCQkgIChhdGFkZXYt
PnVuaXQgPT0gQVRBX01BU1RFUikgPyAibWFzdGVyIiA6ICJzbGF2ZSIsCisJCSAgZGV2aWNlX2dl
dF91bml0KGNoLT5kZXYpLCBhdGFfdW5pdDJzdHIoYXRhZGV2KSwKIAkJICAoYWRwLT5mbGFncyAm
IEFEX0ZfVEFHX0VOQUJMRUQpID8gInRhZ2dlZCAiIDogIiIsCiAJCSAgYXRhX21vZGUyc3RyKGF0
YWRldi0+bW9kZSkpOwogICAgIGlmIChib290dmVyYm9zZSkgewotLS0gc3JjL3N5cy9kZXYvYXRh
L2F0YS1kaXNrLmgJMjAwNy0wMi0yMSAyMjowNzoxOC4wMDAwMDAwMDAgKzAzMDAKKysrIHNyYy9z
eXMvZGV2L2F0YS9hdGEtZGlzay5oCTIwMDgtMDQtMTAgMTc6MDU6MDUuMDAwMDAwMDAwICswNDAw
CkBAIC0xLDUgKzEsNSBAQAogLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTggLSAyMDA3IFP4cmVu
IFNjaG1pZHQgPHNvc0BGcmVlQlNELm9yZz4KKyAqIENvcHlyaWdodCAoYykgMTk5OCAtIDIwMDgg
U/hyZW4gU2NobWlkdCA8c29zQEZyZWVCU0Qub3JnPgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKQEAgLTM0LDcgKzM0LDcgQEAgc3RydWN0IGFkX3NvZnRjIHsgIAog
ICAgIHVfaW50MzJfdCAgICAgICAgICAgICAgICAgICB0cmFuc2ZlcnNpemU7ICAgLyogc2l6ZSBv
ZiBlYWNoIHRyYW5zZmVyICovCiAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgIG51bV90
YWdzOyAgICAgICAvKiBudW1iZXIgb2YgdGFncyBzdXBwb3J0ZWQgKi8KICAgICBpbnQgICAgICAg
ICAgICAgICAgICAgICAgICAgZmxhZ3M7ICAgICAgICAgIC8qIGRyaXZlIGZsYWdzICovCi0jZGVm
aW5lICAgICAgICAgQURfRl9MQUJFTExJTkcgICAgICAgICAgMHgwMDAxICAgICAgICAgIAorI2Rl
ZmluZSAgICAgICAgIEFEX0ZfTEFCRUxMSU5HICAgICAgICAgIDB4MDAwMQogI2RlZmluZSAgICAg
ICAgIEFEX0ZfQ0hTX1VTRUQgICAgICAgICAgIDB4MDAwMgogI2RlZmluZSAgICAgICAgIEFEX0Zf
MzJCX0VOQUJMRUQgICAgICAgIDB4MDAwNAogI2RlZmluZSAgICAgICAgIEFEX0ZfVEFHX0VOQUJM
RUQgICAgICAgIDB4MDAwOAotLS0gc3JjL3N5cy9kZXYvYXRhL2F0YS1kbWEuYwkyMDA4LTAxLTA5
IDExOjU0OjQ3LjAwMDAwMDAwMCArMDMwMAorKysgc3JjL3N5cy9kZXYvYXRhL2F0YS1kbWEuYwky
MDA4LTA0LTE4IDE5OjE1OjA0LjAwMDAwMDAwMCArMDQwMApAQCAtMSw1ICsxLDUgQEAKIC8qLQot
ICogQ29weXJpZ2h0IChjKSAxOTk4IC0gMjAwNyBT+HJlbiBTY2htaWR0IDxzb3NARnJlZUJTRC5v
cmc+CisgKiBDb3B5cmlnaHQgKGMpIDE5OTggLSAyMDA4IFP4cmVuIFNjaG1pZHQgPHNvc0BGcmVl
QlNELm9yZz4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC00
NSwxMSArNDUsMTMgQEAgX19GQlNESUQoIiRGcmVlQlNEOiBzcmMvc3lzL2Rldi9hdGEvYXRhLQog
I2luY2x1ZGUgPGRldi9hdGEvYXRhLXBjaS5oPgogCiAvKiBwcm90b3R5cGVzICovCi1zdGF0aWMg
dm9pZCBhdGFfZG1hYWxsb2MoZGV2aWNlX3QpOwotc3RhdGljIHZvaWQgYXRhX2RtYWZyZWUoZGV2
aWNlX3QpOwotc3RhdGljIHZvaWQgYXRhX2RtYXNldHByZCh2b2lkICosIGJ1c19kbWFfc2VnbWVu
dF90ICosIGludCwgaW50KTsKLXN0YXRpYyBpbnQgYXRhX2RtYWxvYWQoZGV2aWNlX3QsIGNhZGRy
X3QsIGludDMyX3QsIGludCwgdm9pZCAqLCBpbnQgKik7Ci1zdGF0aWMgaW50IGF0YV9kbWF1bmxv
YWQoZGV2aWNlX3QpOworc3RhdGljIHZvaWQgYXRhX2RtYWZpbmkoZGV2aWNlX3QgZGV2KTsKK3N0
YXRpYyB2b2lkIGF0YV9kbWFzZXR1cGNfY2Iodm9pZCAqeHNjLCBidXNfZG1hX3NlZ21lbnRfdCAq
c2VncywgaW50IG5zZWdzLCBpbnQgZXJyb3IpOworc3RhdGljIHZvaWQgYXRhX2RtYWFsbG9jKGRl
dmljZV90IGRldik7CitzdGF0aWMgdm9pZCBhdGFfZG1hZnJlZShkZXZpY2VfdCBkZXYpOworc3Rh
dGljIHZvaWQgYXRhX2RtYXNldHByZCh2b2lkICp4c2MsIGJ1c19kbWFfc2VnbWVudF90ICpzZWdz
LCBpbnQgbnNlZ3MsIGludCBlcnJvcik7CitzdGF0aWMgaW50IGF0YV9kbWFsb2FkKHN0cnVjdCBh
dGFfcmVxdWVzdCAqcmVxdWVzdCwgdm9pZCAqYWRkciwgaW50ICpuc2Vncyk7CitzdGF0aWMgaW50
IGF0YV9kbWF1bmxvYWQoc3RydWN0IGF0YV9yZXF1ZXN0ICpyZXF1ZXN0KTsKIAogLyogbG9jYWwg
dmFycyAqLwogc3RhdGljIE1BTExPQ19ERUZJTkUoTV9BVEFETUEsICJhdGFfZG1hIiwgIkFUQSBk
cml2ZXIgRE1BIik7CkBAIC02NywxMzQgKzY5LDE3MCBAQCB2b2lkIAogYXRhX2RtYWluaXQoZGV2
aWNlX3QgZGV2KQogewogICAgIHN0cnVjdCBhdGFfY2hhbm5lbCAqY2ggPSBkZXZpY2VfZ2V0X3Nv
ZnRjKGRldik7CisgICAgc3RydWN0IGF0YV9kY19jYl9hcmdzIGRjYmE7CiAKLSAgICBpZiAoKGNo
LT5kbWEgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBhdGFfZG1hKSwgTV9BVEFETUEsIE1fTk9XQUlU
fE1fWkVSTykpKSB7Ci0JY2gtPmRtYS0+YWxsb2MgPSBhdGFfZG1hYWxsb2M7Ci0JY2gtPmRtYS0+
ZnJlZSA9IGF0YV9kbWFmcmVlOwotCWNoLT5kbWEtPnNldHByZCA9IGF0YV9kbWFzZXRwcmQ7Ci0J
Y2gtPmRtYS0+bG9hZCA9IGF0YV9kbWFsb2FkOwotCWNoLT5kbWEtPnVubG9hZCA9IGF0YV9kbWF1
bmxvYWQ7Ci0JY2gtPmRtYS0+YWxpZ25tZW50ID0gMjsKLQljaC0+ZG1hLT5ib3VuZGFyeSA9IDY1
NTM2OwotCWNoLT5kbWEtPnNlZ3NpemUgPSAxMjggKiBERVZfQlNJWkU7Ci0JY2gtPmRtYS0+bWF4
X2lvc2l6ZSA9IDEyOCAqIERFVl9CU0laRTsKLQljaC0+ZG1hLT5tYXhfYWRkcmVzcyA9IEJVU19T
UEFDRV9NQVhBRERSXzMyQklUOworICAgIGNoLT5kbWEuYWxsb2MgPSBhdGFfZG1hYWxsb2M7Cisg
ICAgY2gtPmRtYS5mcmVlID0gYXRhX2RtYWZyZWU7CisgICAgY2gtPmRtYS5zZXRwcmQgPSBhdGFf
ZG1hc2V0cHJkOworICAgIGNoLT5kbWEubG9hZCA9IGF0YV9kbWFsb2FkOworICAgIGNoLT5kbWEu
dW5sb2FkID0gYXRhX2RtYXVubG9hZDsKKyAgICBjaC0+ZG1hLmFsaWdubWVudCA9IDI7CisgICAg
Y2gtPmRtYS5ib3VuZGFyeSA9IDY1NTM2OworICAgIGNoLT5kbWEuc2Vnc2l6ZSA9IDYzNTM2Owor
ICAgIGNoLT5kbWEubWF4X2lvc2l6ZSA9IDEyOCAqIERFVl9CU0laRTsKKyAgICBjaC0+ZG1hLm1h
eF9hZGRyZXNzID0gQlVTX1NQQUNFX01BWEFERFJfMzJCSVQ7CisgICAgY2gtPmRtYS5kbWFfc2xv
dHMgPSAyOworCisgICAgaWYgKGJ1c19kbWFfdGFnX2NyZWF0ZShidXNfZ2V0X2RtYV90YWcoZGV2
KSwgY2gtPmRtYS5hbGlnbm1lbnQsIDAsCisJCQkgICBjaC0+ZG1hLm1heF9hZGRyZXNzLCBCVVNf
U1BBQ0VfTUFYQUREUiwKKwkJCSAgIE5VTEwsIE5VTEwsIGNoLT5kbWEubWF4X2lvc2l6ZSwKKwkJ
CSAgIEFUQV9ETUFfRU5UUklFUywgY2gtPmRtYS5zZWdzaXplLAorCQkJICAgMCwgTlVMTCwgTlVM
TCwgJmNoLT5kbWEuZG1hdGFnKSkKKwlnb3RvIGVycm9yOworCisgICAgaWYgKGJ1c19kbWFfdGFn
X2NyZWF0ZShjaC0+ZG1hLmRtYXRhZywgUEFHRV9TSVpFLCA2NCAqIDEwMjQsCisJCQkgICBjaC0+
ZG1hLm1heF9hZGRyZXNzLCBCVVNfU1BBQ0VfTUFYQUREUiwKKwkJCSAgIE5VTEwsIE5VTEwsIE1B
WFdTUENTWiwgMSwgTUFYV1NQQ1NaLAorCQkJICAgMCwgTlVMTCwgTlVMTCwgJmNoLT5kbWEud29y
a190YWcpKQorCWdvdG8gZXJyb3I7CisKKyAgICBpZiAoYnVzX2RtYW1lbV9hbGxvYyhjaC0+ZG1h
LndvcmtfdGFnLCAodm9pZCAqKikmY2gtPmRtYS53b3JrLCAwLAorCQkJICZjaC0+ZG1hLndvcmtf
bWFwKSkKKwlnb3RvIGVycm9yOworCisgICAgaWYgKGJ1c19kbWFtYXBfbG9hZChjaC0+ZG1hLndv
cmtfdGFnLCBjaC0+ZG1hLndvcmtfbWFwLCBjaC0+ZG1hLndvcmssCisJCQlNQVhXU1BDU1osIGF0
YV9kbWFzZXR1cGNfY2IsICZkY2JhLCAwKSB8fAorCQkJZGNiYS5lcnJvcikgeworCWJ1c19kbWFt
ZW1fZnJlZShjaC0+ZG1hLndvcmtfdGFnLCBjaC0+ZG1hLndvcmssIGNoLT5kbWEud29ya19tYXAp
OworCWdvdG8gZXJyb3I7CisgICAgfQorICAgIGNoLT5kbWEud29ya19idXMgPSBkY2JhLm1hZGRy
OworICAgIHJldHVybjsKKworZXJyb3I6CisgICAgZGV2aWNlX3ByaW50ZihkZXYsICJXQVJOSU5H
IC0gRE1BIGluaXRpYWxpemF0aW9uIGZhaWxlZCwgZGlzYWJsaW5nIERNQVxuIik7CisgICAgYXRh
X2RtYWZpbmkoZGV2KTsKK30KKwordm9pZCAKK2F0YV9kbWFmaW5pKGRldmljZV90IGRldikKK3sK
KyAgICBzdHJ1Y3QgYXRhX2NoYW5uZWwgKmNoID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworCisg
ICAgaWYgKGNoLT5kbWEud29ya19idXMpIHsKKwlidXNfZG1hbWFwX3VubG9hZChjaC0+ZG1hLndv
cmtfdGFnLCBjaC0+ZG1hLndvcmtfbWFwKTsKKwlidXNfZG1hbWVtX2ZyZWUoY2gtPmRtYS53b3Jr
X3RhZywgY2gtPmRtYS53b3JrLCBjaC0+ZG1hLndvcmtfbWFwKTsKKwljaC0+ZG1hLndvcmtfYnVz
ID0gMDsKKwljaC0+ZG1hLndvcmtfbWFwID0gTlVMTDsKKwljaC0+ZG1hLndvcmsgPSBOVUxMOwor
ICAgIH0KKyAgICBpZiAoY2gtPmRtYS53b3JrX3RhZykgeworCWJ1c19kbWFfdGFnX2Rlc3Ryb3ko
Y2gtPmRtYS53b3JrX3RhZyk7CisJY2gtPmRtYS53b3JrX3RhZyA9IE5VTEw7CisgICAgfQorICAg
IGlmIChjaC0+ZG1hLmRtYXRhZykgeworCWJ1c19kbWFfdGFnX2Rlc3Ryb3koY2gtPmRtYS5kbWF0
YWcpOworCWNoLT5kbWEuZG1hdGFnID0gTlVMTDsKICAgICB9CiB9CiAKIHN0YXRpYyB2b2lkCiBh
dGFfZG1hc2V0dXBjX2NiKHZvaWQgKnhzYywgYnVzX2RtYV9zZWdtZW50X3QgKnNlZ3MsIGludCBu
c2VncywgaW50IGVycm9yKQogewotICAgIHN0cnVjdCBhdGFfZGNfY2JfYXJncyAqY2JhID0gKHN0
cnVjdCBhdGFfZGNfY2JfYXJncyAqKXhzYzsKKyAgICBzdHJ1Y3QgYXRhX2RjX2NiX2FyZ3MgKmRj
YmEgPSAoc3RydWN0IGF0YV9kY19jYl9hcmdzICopeHNjOwogCi0gICAgaWYgKCEoY2JhLT5lcnJv
ciA9IGVycm9yKSkKLQljYmEtPm1hZGRyID0gc2Vnc1swXS5kc19hZGRyOworICAgIGlmICghKGRj
YmEtPmVycm9yID0gZXJyb3IpKQorCWRjYmEtPm1hZGRyID0gc2Vnc1swXS5kc19hZGRyOwogfQog
CiBzdGF0aWMgdm9pZAogYXRhX2RtYWFsbG9jKGRldmljZV90IGRldikKIHsKICAgICBzdHJ1Y3Qg
YXRhX2NoYW5uZWwgKmNoID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOwotICAgIHN0cnVjdCBhdGFf
ZGNfY2JfYXJncyBjY2JhOwotCi0gICAgaWYgKGJ1c19kbWFfdGFnX2NyZWF0ZShidXNfZ2V0X2Rt
YV90YWcoZGV2KSwgY2gtPmRtYS0+YWxpZ25tZW50LCAwLAotCQkJICAgY2gtPmRtYS0+bWF4X2Fk
ZHJlc3MsIEJVU19TUEFDRV9NQVhBRERSLAotCQkJICAgTlVMTCwgTlVMTCwgY2gtPmRtYS0+bWF4
X2lvc2l6ZSwKLQkJCSAgIEFUQV9ETUFfRU5UUklFUywgY2gtPmRtYS0+c2Vnc2l6ZSwKLQkJCSAg
IDAsIE5VTEwsIE5VTEwsICZjaC0+ZG1hLT5kbWF0YWcpKQotCWdvdG8gZXJyb3I7Ci0KLSAgICBp
ZiAoYnVzX2RtYV90YWdfY3JlYXRlKGNoLT5kbWEtPmRtYXRhZywgUEFHRV9TSVpFLCBQQUdFX1NJ
WkUsCi0JCQkgICBjaC0+ZG1hLT5tYXhfYWRkcmVzcywgQlVTX1NQQUNFX01BWEFERFIsCi0JCQkg
ICBOVUxMLCBOVUxMLCBNQVhUQUJTWiwgMSwgTUFYVEFCU1osCi0JCQkgICAwLCBOVUxMLCBOVUxM
LCAmY2gtPmRtYS0+c2dfdGFnKSkKLQlnb3RvIGVycm9yOwotCi0gICAgaWYgKGJ1c19kbWFfdGFn
X2NyZWF0ZShjaC0+ZG1hLT5kbWF0YWcsY2gtPmRtYS0+YWxpZ25tZW50LGNoLT5kbWEtPmJvdW5k
YXJ5LAotCQkJICAgY2gtPmRtYS0+bWF4X2FkZHJlc3MsIEJVU19TUEFDRV9NQVhBRERSLAotCQkJ
ICAgTlVMTCwgTlVMTCwgY2gtPmRtYS0+bWF4X2lvc2l6ZSwKLQkJCSAgIEFUQV9ETUFfRU5UUklF
UywgY2gtPmRtYS0+c2Vnc2l6ZSwKLQkJCSAgIDAsIE5VTEwsIE5VTEwsICZjaC0+ZG1hLT5kYXRh
X3RhZykpCi0JZ290byBlcnJvcjsKLQotICAgIGlmIChidXNfZG1hbWVtX2FsbG9jKGNoLT5kbWEt
PnNnX3RhZywgKHZvaWQgKiopJmNoLT5kbWEtPnNnLCAwLAotCQkJICZjaC0+ZG1hLT5zZ19tYXAp
KQotCWdvdG8gZXJyb3I7Ci0KLSAgICBpZiAoYnVzX2RtYW1hcF9sb2FkKGNoLT5kbWEtPnNnX3Rh
ZywgY2gtPmRtYS0+c2dfbWFwLCBjaC0+ZG1hLT5zZywKLQkJCU1BWFRBQlNaLCBhdGFfZG1hc2V0
dXBjX2NiLCAmY2NiYSwgMCkgfHwgY2NiYS5lcnJvcikgewotCWJ1c19kbWFtZW1fZnJlZShjaC0+
ZG1hLT5zZ190YWcsIGNoLT5kbWEtPnNnLCBjaC0+ZG1hLT5zZ19tYXApOwotCWdvdG8gZXJyb3I7
Ci0gICAgfQotICAgIGNoLT5kbWEtPnNnX2J1cyA9IGNjYmEubWFkZHI7Ci0KLSAgICBpZiAoYnVz
X2RtYW1hcF9jcmVhdGUoY2gtPmRtYS0+ZGF0YV90YWcsIDAsICZjaC0+ZG1hLT5kYXRhX21hcCkp
Ci0JZ290byBlcnJvcjsKLQotICAgIGlmIChidXNfZG1hX3RhZ19jcmVhdGUoY2gtPmRtYS0+ZG1h
dGFnLCBQQUdFX1NJWkUsIDY0ICogMTAyNCwKLQkJCSAgIGNoLT5kbWEtPm1heF9hZGRyZXNzLCBC
VVNfU1BBQ0VfTUFYQUREUiwKLQkJCSAgIE5VTEwsIE5VTEwsIE1BWFdTUENTWiwgMSwgTUFYV1NQ
Q1NaLAotCQkJICAgMCwgTlVMTCwgTlVMTCwgJmNoLT5kbWEtPndvcmtfdGFnKSkKLQlnb3RvIGVy
cm9yOwotCi0gICAgaWYgKGJ1c19kbWFtZW1fYWxsb2MoY2gtPmRtYS0+d29ya190YWcsICh2b2lk
ICoqKSZjaC0+ZG1hLT53b3JrLCAwLAotCQkJICZjaC0+ZG1hLT53b3JrX21hcCkpCi0JZ290byBl
cnJvcjsKKyAgICBzdHJ1Y3QgYXRhX2RjX2NiX2FyZ3MgZGNiYTsKKyAgICBpbnQgaTsKIAotICAg
IGlmIChidXNfZG1hbWFwX2xvYWQoY2gtPmRtYS0+d29ya190YWcsIGNoLT5kbWEtPndvcmtfbWFw
LGNoLT5kbWEtPndvcmssCi0JCQlNQVhXU1BDU1osIGF0YV9kbWFzZXR1cGNfY2IsICZjY2JhLCAw
KSB8fCBjY2JhLmVycm9yKSB7Ci0JYnVzX2RtYW1lbV9mcmVlKGNoLT5kbWEtPndvcmtfdGFnLGNo
LT5kbWEtPndvcmssIGNoLT5kbWEtPndvcmtfbWFwKTsKLQlnb3RvIGVycm9yOworICAgIC8qIGFs
bG9jIGFuZCBzZXR1cCBuZWVkZWQgZG1hIHNsb3RzICovCisgICAgYnplcm8oY2gtPmRtYS5zbG90
LCBzaXplb2Yoc3RydWN0IGF0YV9kbWFzbG90KSAqIEFUQV9ETUFfU0xPVFMpOworICAgIGZvciAo
aSA9IDA7IGkgPCBjaC0+ZG1hLmRtYV9zbG90czsgaSsrKSB7CisJc3RydWN0IGF0YV9kbWFzbG90
ICpzbG90ID0gJmNoLT5kbWEuc2xvdFtpXTsKKworCWlmIChidXNfZG1hX3RhZ19jcmVhdGUoY2gt
PmRtYS5kbWF0YWcsIFBBR0VfU0laRSwgUEFHRV9TSVpFLAorCQkJICAgICAgIGNoLT5kbWEubWF4
X2FkZHJlc3MsIEJVU19TUEFDRV9NQVhBRERSLAorCQkJICAgICAgIE5VTEwsIE5VTEwsIFBBR0Vf
U0laRSwgMSwgUEFHRV9TSVpFLAorCQkJICAgICAgIDAsIE5VTEwsIE5VTEwsICZzbG90LT5zZ190
YWcpKSB7CisgICAgICAgICAgICBkZXZpY2VfcHJpbnRmKGNoLT5kZXYsICJGQUlMVVJFIC0gY3Jl
YXRlIHNnX3RhZ1xuIik7CisgICAgICAgICAgICBnb3RvIGVycm9yOworCX0KKworCWlmIChidXNf
ZG1hbWVtX2FsbG9jKHNsb3QtPnNnX3RhZywgKHZvaWQgKiopJnNsb3QtPnNnLAorCQkJICAgICAw
LCAmc2xvdC0+c2dfbWFwKSkgeworCSAgICBkZXZpY2VfcHJpbnRmKGNoLT5kZXYsICJGQUlMVVJF
IC0gYWxsb2Mgc2dfbWFwXG4iKTsKKwkgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQorCisJaWYg
KGJ1c19kbWFtYXBfbG9hZChzbG90LT5zZ190YWcsIHNsb3QtPnNnX21hcCwgc2xvdC0+c2csIE1B
WFRBQlNaLAorCQkJICAgIGF0YV9kbWFzZXR1cGNfY2IsICZkY2JhLCAwKSB8fCBkY2JhLmVycm9y
KSB7CisJICAgIGRldmljZV9wcmludGYoY2gtPmRldiwgIkZBSUxVUkUgLSBsb2FkIHNnXG4iKTsK
KwkgICAgZ290byBlcnJvcjsKKwl9CisJc2xvdC0+c2dfYnVzID0gZGNiYS5tYWRkcjsKKworCWlm
IChidXNfZG1hX3RhZ19jcmVhdGUoY2gtPmRtYS5kbWF0YWcsCisJCQkgICAgICAgY2gtPmRtYS5h
bGlnbm1lbnQsIGNoLT5kbWEuYm91bmRhcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2gtPmRtYS5tYXhfYWRkcmVzcywgQlVTX1NQQUNFX01BWEFERFIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCwgY2gtPmRtYS5tYXhfaW9zaXplLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEFUQV9ETUFfRU5UUklFUywgY2gtPmRtYS5zZWdzaXpl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJVU19ETUFfQUxMT0NOT1csIE5VTEws
IE5VTEwsICZzbG90LT5kYXRhX3RhZykpIHsKKwkgICAgZGV2aWNlX3ByaW50ZihjaC0+ZGV2LCAi
RkFJTFVSRSAtIGNyZWF0ZSBkYXRhX3RhZ1xuIik7CisJICAgIGdvdG8gZXJyb3I7CisJfQorCisJ
aWYgKGJ1c19kbWFtYXBfY3JlYXRlKHNsb3QtPmRhdGFfdGFnLCAwLCAmc2xvdC0+ZGF0YV9tYXAp
KSB7CisJICAgIGRldmljZV9wcmludGYoY2gtPmRldiwgIkZBSUxVUkUgLSBjcmVhdGUgZGF0YV9t
YXBcbiIpOworCSAgICBnb3RvIGVycm9yOworICAgICAgICB9CiAgICAgfQotICAgIGNoLT5kbWEt
PndvcmtfYnVzID0gY2NiYS5tYWRkcjsKIAogICAgIHJldHVybjsKIAogZXJyb3I6CiAgICAgZGV2
aWNlX3ByaW50ZihkZXYsICJXQVJOSU5HIC0gRE1BIGFsbG9jYXRpb24gZmFpbGVkLCBkaXNhYmxp
bmcgRE1BXG4iKTsKICAgICBhdGFfZG1hZnJlZShkZXYpOwotICAgIGZyZWUoY2gtPmRtYSwgTV9B
VEFETUEpOwotICAgIGNoLT5kbWEgPSBOVUxMOwogfQogCiBzdGF0aWMgdm9pZAogYXRhX2RtYWZy
ZWUoZGV2aWNlX3QgZGV2KQogewogICAgIHN0cnVjdCBhdGFfY2hhbm5lbCAqY2ggPSBkZXZpY2Vf
Z2V0X3NvZnRjKGRldik7CisgICAgaW50IGk7CiAKLSAgICBpZiAoY2gtPmRtYS0+d29ya19idXMp
IHsKLQlidXNfZG1hbWFwX3VubG9hZChjaC0+ZG1hLT53b3JrX3RhZywgY2gtPmRtYS0+d29ya19t
YXApOwotCWJ1c19kbWFtZW1fZnJlZShjaC0+ZG1hLT53b3JrX3RhZywgY2gtPmRtYS0+d29yaywg
Y2gtPmRtYS0+d29ya19tYXApOwotCWNoLT5kbWEtPndvcmtfYnVzID0gMDsKLQljaC0+ZG1hLT53
b3JrX21hcCA9IE5VTEw7Ci0JY2gtPmRtYS0+d29yayA9IE5VTEw7Ci0gICAgfQotICAgIGlmIChj
aC0+ZG1hLT53b3JrX3RhZykgewotCWJ1c19kbWFfdGFnX2Rlc3Ryb3koY2gtPmRtYS0+d29ya190
YWcpOwotCWNoLT5kbWEtPndvcmtfdGFnID0gTlVMTDsKLSAgICB9Ci0gICAgaWYgKGNoLT5kbWEt
PnNnX2J1cykgewotCWJ1c19kbWFtYXBfdW5sb2FkKGNoLT5kbWEtPnNnX3RhZywgY2gtPmRtYS0+
c2dfbWFwKTsKLQlidXNfZG1hbWVtX2ZyZWUoY2gtPmRtYS0+c2dfdGFnLCBjaC0+ZG1hLT5zZywg
Y2gtPmRtYS0+c2dfbWFwKTsKLQljaC0+ZG1hLT5zZ19idXMgPSAwOwotCWNoLT5kbWEtPnNnX21h
cCA9IE5VTEw7Ci0JY2gtPmRtYS0+c2cgPSBOVUxMOwotICAgIH0KLSAgICBpZiAoY2gtPmRtYS0+
ZGF0YV9tYXApIHsKLQlidXNfZG1hbWFwX2Rlc3Ryb3koY2gtPmRtYS0+ZGF0YV90YWcsIGNoLT5k
bWEtPmRhdGFfbWFwKTsKLQljaC0+ZG1hLT5kYXRhX21hcCA9IE5VTEw7Ci0gICAgfQotICAgIGlm
IChjaC0+ZG1hLT5zZ190YWcpIHsKLQlidXNfZG1hX3RhZ19kZXN0cm95KGNoLT5kbWEtPnNnX3Rh
Zyk7Ci0JY2gtPmRtYS0+c2dfdGFnID0gTlVMTDsKLSAgICB9Ci0gICAgaWYgKGNoLT5kbWEtPmRh
dGFfdGFnKSB7Ci0JYnVzX2RtYV90YWdfZGVzdHJveShjaC0+ZG1hLT5kYXRhX3RhZyk7Ci0JY2gt
PmRtYS0+ZGF0YV90YWcgPSBOVUxMOwotICAgIH0KLSAgICBpZiAoY2gtPmRtYS0+ZG1hdGFnKSB7
Ci0JYnVzX2RtYV90YWdfZGVzdHJveShjaC0+ZG1hLT5kbWF0YWcpOwotCWNoLT5kbWEtPmRtYXRh
ZyA9IE5VTEw7CisgICAgLyogZnJlZSBhbGwgZG1hIHNsb3RzICovCisgICAgZm9yIChpID0gMDsg
aSA8IEFUQV9ETUFfU0xPVFM7IGkrKykgeworCXN0cnVjdCBhdGFfZG1hc2xvdCAqc2xvdCA9ICZj
aC0+ZG1hLnNsb3RbaV07CisKKwlpZiAoc2xvdC0+c2dfYnVzKSB7CisgICAgICAgICAgICBidXNf
ZG1hbWFwX3VubG9hZChzbG90LT5zZ190YWcsIHNsb3QtPnNnX21hcCk7CisgICAgICAgICAgICBz
bG90LT5zZ19idXMgPSAwOworCX0KKwlpZiAoc2xvdC0+c2dfbWFwKSB7CisgICAgICAgICAgICBi
dXNfZG1hbWVtX2ZyZWUoc2xvdC0+c2dfdGFnLCBzbG90LT5zZywgc2xvdC0+c2dfbWFwKTsKKyAg
ICAgICAgICAgIGJ1c19kbWFtYXBfZGVzdHJveShzbG90LT5zZ190YWcsIHNsb3QtPnNnX21hcCk7
CisgICAgICAgICAgICBzbG90LT5zZyA9IE5VTEw7CisgICAgICAgICAgICBzbG90LT5zZ19tYXAg
PSBOVUxMOworCX0KKwlpZiAoc2xvdC0+ZGF0YV9tYXApIHsKKyAgICAgICAgICAgIGJ1c19kbWFt
YXBfZGVzdHJveShzbG90LT5kYXRhX3RhZywgc2xvdC0+ZGF0YV9tYXApOworICAgICAgICAgICAg
c2xvdC0+ZGF0YV9tYXAgPSBOVUxMOworCX0KKwlpZiAoc2xvdC0+c2dfdGFnKSB7CisgICAgICAg
ICAgICBidXNfZG1hX3RhZ19kZXN0cm95KHNsb3QtPnNnX3RhZyk7CisgICAgICAgICAgICBzbG90
LT5zZ190YWcgPSBOVUxMOworCX0KKwlpZiAoc2xvdC0+ZGF0YV90YWcpIHsKKyAgICAgICAgICAg
IGJ1c19kbWFfdGFnX2Rlc3Ryb3koc2xvdC0+ZGF0YV90YWcpOworICAgICAgICAgICAgc2xvdC0+
ZGF0YV90YWcgPSBOVUxMOworCX0KICAgICB9CiB9CiAKQEAgLTIxOCw2NyArMjU2LDgzIEBAIGF0
YV9kbWFzZXRwcmQodm9pZCAqeHNjLCBidXNfZG1hX3NlZ21lbnQKIH0KIAogc3RhdGljIGludAot
YXRhX2RtYWxvYWQoZGV2aWNlX3QgZGV2LCBjYWRkcl90IGRhdGEsIGludDMyX3QgY291bnQsIGlu
dCBkaXIsCi0JICAgIHZvaWQgKmFkZHIsIGludCAqZW50cmllcykKK2F0YV9kbWFsb2FkKHN0cnVj
dCBhdGFfcmVxdWVzdCAqcmVxdWVzdCwgdm9pZCAqYWRkciwgaW50ICplbnRyaWVzKQogewotICAg
IHN0cnVjdCBhdGFfY2hhbm5lbCAqY2ggPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7Ci0gICAgc3Ry
dWN0IGF0YV9kbWFzZXRwcmRfYXJncyBjYmE7CisgICAgc3RydWN0IGF0YV9jaGFubmVsICpjaCA9
IGRldmljZV9nZXRfc29mdGMocmVxdWVzdC0+cGFyZW50KTsKKyAgICBzdHJ1Y3QgYXRhX2Rldmlj
ZSAqYXRhZGV2ID0gZGV2aWNlX2dldF9zb2Z0YyhyZXF1ZXN0LT5kZXYpOworICAgIHN0cnVjdCBh
dGFfZG1hc2V0cHJkX2FyZ3MgZHNwYTsKICAgICBpbnQgZXJyb3I7CiAKLSAgICBpZiAoY2gtPmRt
YS0+ZmxhZ3MgJiBBVEFfRE1BX0xPQURFRCkgewotCWRldmljZV9wcmludGYoZGV2LCAiRkFJTFVS
RSAtIGFscmVhZHkgYWN0aXZlIERNQSBvbiB0aGlzIGRldmljZVxuIik7CisgICAgQVRBX0RFQlVH
X1JRKHJlcXVlc3QsICJkbWFsb2FkIik7CisKKyAgICBpZiAocmVxdWVzdC0+ZG1hKSB7CisJZGV2
aWNlX3ByaW50ZihyZXF1ZXN0LT5kZXYsCisJCSAgICAgICJGQUlMVVJFIC0gYWxyZWFkeSBhY3Rp
dmUgRE1BIG9uIHRoaXMgZGV2aWNlXG4iKTsKIAlyZXR1cm4gRUlPOwogICAgIH0KLSAgICBpZiAo
IWNvdW50KSB7Ci0JZGV2aWNlX3ByaW50ZihkZXYsICJGQUlMVVJFIC0gemVybyBsZW5ndGggRE1B
IHRyYW5zZmVyIGF0dGVtcHRlZFxuIik7CisgICAgaWYgKCFyZXF1ZXN0LT5ieXRlY291bnQpIHsK
KwlkZXZpY2VfcHJpbnRmKHJlcXVlc3QtPmRldiwKKwkJICAgICAgIkZBSUxVUkUgLSB6ZXJvIGxl
bmd0aCBETUEgdHJhbnNmZXIgYXR0ZW1wdGVkXG4iKTsKIAlyZXR1cm4gRUlPOwogICAgIH0KLSAg
ICBpZiAoKCh1aW50cHRyX3QpZGF0YSAmIChjaC0+ZG1hLT5hbGlnbm1lbnQgLSAxKSkgfHwKLQko
Y291bnQgJiAoY2gtPmRtYS0+YWxpZ25tZW50IC0gMSkpKSB7Ci0JZGV2aWNlX3ByaW50ZihkZXYs
ICJGQUlMVVJFIC0gbm9uIGFsaWduZWQgRE1BIHRyYW5zZmVyIGF0dGVtcHRlZFxuIik7CisgICAg
aWYgKCgodWludHB0cl90KShyZXF1ZXN0LT5kYXRhKSAmIChjaC0+ZG1hLmFsaWdubWVudCAtIDEp
KSB8fAorCShyZXF1ZXN0LT5ieXRlY291bnQgJiAoY2gtPmRtYS5hbGlnbm1lbnQgLSAxKSkpIHsK
KwlkZXZpY2VfcHJpbnRmKHJlcXVlc3QtPmRldiwKKwkJICAgICAgIkZBSUxVUkUgLSBub24gYWxp
Z25lZCBETUEgdHJhbnNmZXIgYXR0ZW1wdGVkXG4iKTsKIAlyZXR1cm4gRUlPOwogICAgIH0KLSAg
ICBpZiAoY291bnQgPiBjaC0+ZG1hLT5tYXhfaW9zaXplKSB7Ci0JZGV2aWNlX3ByaW50ZihkZXYs
ICJGQUlMVVJFIC0gb3ZlcnNpemVkIERNQSB0cmFuc2ZlciBhdHRlbXB0ICVkID4gJWRcbiIsCi0J
CSAgICAgIGNvdW50LCBjaC0+ZG1hLT5tYXhfaW9zaXplKTsKKyAgICBpZiAocmVxdWVzdC0+Ynl0
ZWNvdW50ID4gY2gtPmRtYS5tYXhfaW9zaXplKSB7CisJZGV2aWNlX3ByaW50ZihyZXF1ZXN0LT5k
ZXYsCisJCSAgICAgICJGQUlMVVJFIC0gb3ZlcnNpemVkIERNQSB0cmFuc2ZlciBhdHRlbXB0ICVk
ID4gJWRcbiIsCisJCSAgICAgIHJlcXVlc3QtPmJ5dGVjb3VudCwgY2gtPmRtYS5tYXhfaW9zaXpl
KTsKIAlyZXR1cm4gRUlPOwogICAgIH0KIAotICAgIGNiYS5kbWF0YWIgPSBhZGRyOwotCi0gICAg
aWYgKChlcnJvciA9IGJ1c19kbWFtYXBfbG9hZChjaC0+ZG1hLT5kYXRhX3RhZywgY2gtPmRtYS0+
ZGF0YV9tYXAsCi0JCQkJIGRhdGEsIGNvdW50LCBjaC0+ZG1hLT5zZXRwcmQsICZjYmEsCi0JCQkJ
IEJVU19ETUFfTk9XQUlUKSkgfHwgKGVycm9yID0gY2JhLmVycm9yKSkKLQlyZXR1cm4gZXJyb3I7
Ci0KLSAgICAqZW50cmllcyA9IGNiYS5uc2VnczsKKyAgICAvKiBzZXQgb3VyIHNsb3QsIHVuaXQg
Zm9yIHNpbXBsaWNpdHkgWFhYIFNPUyBOQ1Egd2lsbCBjaGFuZ2UgdGhhdCAqLworICAgIHJlcXVl
c3QtPmRtYSA9ICZjaC0+ZG1hLnNsb3RbYXRhZGV2LT51bml0XTsKIAotICAgIGJ1c19kbWFtYXBf
c3luYyhjaC0+ZG1hLT5zZ190YWcsIGNoLT5kbWEtPnNnX21hcCwgQlVTX0RNQVNZTkNfUFJFV1JJ
VEUpOworICAgIGlmIChhZGRyKQorCWRzcGEuZG1hdGFiID0gYWRkcjsKKyAgICBlbHNlCisJZHNw
YS5kbWF0YWIgPSByZXF1ZXN0LT5kbWEtPnNnOworCisgICAgaWYgKChlcnJvciA9IGJ1c19kbWFt
YXBfbG9hZChyZXF1ZXN0LT5kbWEtPmRhdGFfdGFnLCByZXF1ZXN0LT5kbWEtPmRhdGFfbWFwLAor
CQkJCSByZXF1ZXN0LT5kYXRhLCByZXF1ZXN0LT5ieXRlY291bnQsCisJCQkJIGNoLT5kbWEuc2V0
cHJkLCAmZHNwYSwgQlVTX0RNQV9OT1dBSVQpKSB8fAorCQkJCSAoZXJyb3IgPSBkc3BhLmVycm9y
KSkgeworCWRldmljZV9wcmludGYocmVxdWVzdC0+ZGV2LCAiRkFJTFVSRSAtIGxvYWQgZGF0YVxu
Iik7CisJZ290byBlcnJvcjsKKyAgICB9CiAKLSAgICBidXNfZG1hbWFwX3N5bmMoY2gtPmRtYS0+
ZGF0YV90YWcsIGNoLT5kbWEtPmRhdGFfbWFwLAotCQkgICAgZGlyID8gQlVTX0RNQVNZTkNfUFJF
UkVBRCA6IEJVU19ETUFTWU5DX1BSRVdSSVRFKTsKKyAgICBpZiAoZW50cmllcykKKwkqZW50cmll
cyA9IGRzcGEubnNlZ3M7CiAKLSAgICBjaC0+ZG1hLT5jdXJfaW9zaXplID0gY291bnQ7Ci0gICAg
Y2gtPmRtYS0+ZmxhZ3MgPSBkaXIgPyAoQVRBX0RNQV9MT0FERUQgfCBBVEFfRE1BX1JFQUQpIDog
QVRBX0RNQV9MT0FERUQ7CisgICAgYnVzX2RtYW1hcF9zeW5jKHJlcXVlc3QtPmRtYS0+c2dfdGFn
LCByZXF1ZXN0LT5kbWEtPnNnX21hcCwKKwkJICAgIEJVU19ETUFTWU5DX1BSRVdSSVRFKTsKKyAg
ICBidXNfZG1hbWFwX3N5bmMocmVxdWVzdC0+ZG1hLT5kYXRhX3RhZywgcmVxdWVzdC0+ZG1hLT5k
YXRhX21hcCwKKwkJICAgIChyZXF1ZXN0LT5mbGFncyAmIEFUQV9SX1JFQUQpID8KKwkJICAgIEJV
U19ETUFTWU5DX1BSRVJFQUQgOiBCVVNfRE1BU1lOQ19QUkVXUklURSk7CiAgICAgcmV0dXJuIDA7
CisKK2Vycm9yOgorICAgIGF0YV9kbWF1bmxvYWQocmVxdWVzdCk7CisgICAgcmV0dXJuIEVJTzsK
IH0KIAogaW50Ci1hdGFfZG1hdW5sb2FkKGRldmljZV90IGRldikKK2F0YV9kbWF1bmxvYWQoc3Ry
dWN0IGF0YV9yZXF1ZXN0ICpyZXF1ZXN0KQogewotICAgIHN0cnVjdCBhdGFfY2hhbm5lbCAqY2gg
PSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisgICAgQVRBX0RFQlVHX1JRKHJlcXVlc3QsICJkbWF1
bmxvYWQiKTsKIAotICAgIGlmIChjaC0+ZG1hLT5mbGFncyAmIEFUQV9ETUFfTE9BREVEKSB7Ci0J
YnVzX2RtYW1hcF9zeW5jKGNoLT5kbWEtPnNnX3RhZywgY2gtPmRtYS0+c2dfbWFwLAorICAgIGlm
IChyZXF1ZXN0LT5kbWEpIHsKKwlidXNfZG1hbWFwX3N5bmMocmVxdWVzdC0+ZG1hLT5zZ190YWcs
IHJlcXVlc3QtPmRtYS0+c2dfbWFwLAogCQkJQlVTX0RNQVNZTkNfUE9TVFdSSVRFKTsKLQotCWJ1
c19kbWFtYXBfc3luYyhjaC0+ZG1hLT5kYXRhX3RhZywgY2gtPmRtYS0+ZGF0YV9tYXAsCi0JCQko
Y2gtPmRtYS0+ZmxhZ3MgJiBBVEFfRE1BX1JFQUQpID8KKwlidXNfZG1hbWFwX3N5bmMocmVxdWVz
dC0+ZG1hLT5kYXRhX3RhZywgcmVxdWVzdC0+ZG1hLT5kYXRhX21hcCwKKwkJCShyZXF1ZXN0LT5m
bGFncyAmIEFUQV9SX1JFQUQpID8KIAkJCUJVU19ETUFTWU5DX1BPU1RSRUFEIDogQlVTX0RNQVNZ
TkNfUE9TVFdSSVRFKTsKLQlidXNfZG1hbWFwX3VubG9hZChjaC0+ZG1hLT5kYXRhX3RhZywgY2gt
PmRtYS0+ZGF0YV9tYXApOwogCi0JY2gtPmRtYS0+Y3VyX2lvc2l6ZSA9IDA7Ci0JY2gtPmRtYS0+
ZmxhZ3MgJj0gfkFUQV9ETUFfTE9BREVEOworCWJ1c19kbWFtYXBfdW5sb2FkKHJlcXVlc3QtPmRt
YS0+ZGF0YV90YWcsIHJlcXVlc3QtPmRtYS0+ZGF0YV9tYXApOworICAgICAgICByZXF1ZXN0LT5k
bWEgPSBOVUxMOwogICAgIH0KICAgICByZXR1cm4gMDsKIH0KLS0tIHNyYy9zeXMvZGV2L2F0YS9h
dGEtaXNhLmMJMjAwNy0wMi0yMSAyMjowNzoxOC4wMDAwMDAwMDAgKzAzMDAKKysrIHNyYy9zeXMv
ZGV2L2F0YS9hdGEtaXNhLmMJMjAwOC0wNC0xMCAxNzowNTowNS4wMDAwMDAwMDAgKzA0MDAKQEAg
LTEsNSArMSw1IEBACiAvKi0KLSAqIENvcHlyaWdodCAoYykgMTk5OCAtIDIwMDcgU/hyZW4gU2No
bWlkdCA8c29zQEZyZWVCU0Qub3JnPgorICogQ29weXJpZ2h0IChjKSAxOTk4IC0gMjAwOCBT+HJl
biBTY2htaWR0IDxzb3NARnJlZUJTRC5vcmc+CiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotLS0gc3JjL3N5cy9kZXYvYXRhL2F0YS1sb3dsZXZlbC5jCTIwMDgtMDEt
MDkgMTE6NTQ6NDguMDAwMDAwMDAwICswMzAwCisrKyBzcmMvc3lzL2Rldi9hdGEvYXRhLWxvd2xl
dmVsLmMJMjAwOC0wNS0wOCAyMTo1NTo0NC4wMDAwMDAwMDAgKzA0MDAKQEAgLTEsNSArMSw1IEBA
CiAvKi0KLSAqIENvcHlyaWdodCAoYykgMTk5OCAtIDIwMDcgU/hyZW4gU2NobWlkdCA8c29zQEZy
ZWVCU0Qub3JnPgorICogQ29weXJpZ2h0IChjKSAxOTk4IC0gMjAwOCBT+HJlbiBTY2htaWR0IDxz
b3NARnJlZUJTRC5vcmc+CiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dApAQCAtNjQsMTYgKzY0LDE5IEBAIGF0YV9nZW5lcmljX2h3KGRldmljZV90IGRldikKICAgICBj
aC0+aHcuYmVnaW5fdHJhbnNhY3Rpb24gPSBhdGFfYmVnaW5fdHJhbnNhY3Rpb247CiAgICAgY2gt
Pmh3LmVuZF90cmFuc2FjdGlvbiA9IGF0YV9lbmRfdHJhbnNhY3Rpb247CiAgICAgY2gtPmh3LnN0
YXR1cyA9IGF0YV9nZW5lcmljX3N0YXR1czsKKyAgICBjaC0+aHcuc29mdHJlc2V0ID0gTlVMTDsK
ICAgICBjaC0+aHcuY29tbWFuZCA9IGF0YV9nZW5lcmljX2NvbW1hbmQ7CiAgICAgY2gtPmh3LnRm
X3JlYWQgPSBhdGFfdGZfcmVhZDsKICAgICBjaC0+aHcudGZfd3JpdGUgPSBhdGFfdGZfd3JpdGU7
CisgICAgY2gtPmh3LnBtX3JlYWQgPSBOVUxMOworICAgIGNoLT5ody5wbV93cml0ZSA9IE5VTEw7
CiB9CiAKIC8qIG11c3QgYmUgY2FsbGVkIHdpdGggQVRBIGNoYW5uZWwgbG9ja2VkIGFuZCBzdGF0
ZV9tdHggaGVsZCAqLwogaW50CiBhdGFfYmVnaW5fdHJhbnNhY3Rpb24oc3RydWN0IGF0YV9yZXF1
ZXN0ICpyZXF1ZXN0KQogewotICAgIHN0cnVjdCBhdGFfY2hhbm5lbCAqY2ggPSBkZXZpY2VfZ2V0
X3NvZnRjKGRldmljZV9nZXRfcGFyZW50KHJlcXVlc3QtPmRldikpOworICAgIHN0cnVjdCBhdGFf
Y2hhbm5lbCAqY2ggPSBkZXZpY2VfZ2V0X3NvZnRjKHJlcXVlc3QtPnBhcmVudCk7CiAgICAgc3Ry
dWN0IGF0YV9kZXZpY2UgKmF0YWRldiA9IGRldmljZV9nZXRfc29mdGMocmVxdWVzdC0+ZGV2KTsK
ICAgICBpbnQgZHVtbXksIGVycm9yOwogCkBAIC0xMzMsOSArMTM2LDcgQEAgYXRhX2JlZ2luX3Ry
YW5zYWN0aW9uKHN0cnVjdCBhdGFfcmVxdWVzdAogICAgIC8qIEFUQSBETUEgZGF0YSB0cmFuc2Zl
ciBjb21tYW5kcyAqLwogICAgIGNhc2UgQVRBX1JfRE1BOgogCS8qIGNoZWNrIHNhbml0eSwgc2V0
dXAgU0cgbGlzdCBhbmQgRE1BIGVuZ2luZSAqLwotCWlmICgoZXJyb3IgPSBjaC0+ZG1hLT5sb2Fk
KGNoLT5kZXYsIHJlcXVlc3QtPmRhdGEsIHJlcXVlc3QtPmJ5dGVjb3VudCwKLQkJCQkgICByZXF1
ZXN0LT5mbGFncyAmIEFUQV9SX1JFQUQsIGNoLT5kbWEtPnNnLCAKLQkJCQkgICAmZHVtbXkpKSkg
eworCWlmICgoZXJyb3IgPSBjaC0+ZG1hLmxvYWQocmVxdWVzdCwgTlVMTCwgJmR1bW15KSkpIHsK
IAkgICAgZGV2aWNlX3ByaW50ZihyZXF1ZXN0LT5kZXYsICJzZXR0aW5nIHVwIERNQSBmYWlsZWRc
biIpOwogCSAgICByZXF1ZXN0LT5yZXN1bHQgPSBlcnJvcjsKIAkgICAgZ290byBiZWdpbl9maW5p
c2hlZDsKQEAgLTE1MCw3ICsxNTEsNyBAQCBhdGFfYmVnaW5fdHJhbnNhY3Rpb24oc3RydWN0IGF0
YV9yZXF1ZXN0CiAJfQogCiAJLyogc3RhcnQgRE1BIGVuZ2luZSAqLwotCWlmIChjaC0+ZG1hLT5z
dGFydCAmJiBjaC0+ZG1hLT5zdGFydChyZXF1ZXN0LT5kZXYpKSB7CisJaWYgKGNoLT5kbWEuc3Rh
cnQgJiYgY2gtPmRtYS5zdGFydChyZXF1ZXN0KSkgewogCSAgICBkZXZpY2VfcHJpbnRmKHJlcXVl
c3QtPmRldiwgImVycm9yIHN0YXJ0aW5nIERNQVxuIik7CiAJICAgIHJlcXVlc3QtPnJlc3VsdCA9
IEVJTzsKIAkgICAgZ290byBiZWdpbl9maW5pc2hlZDsKQEAgLTE2MSw3ICsxNjIsNyBAQCBhdGFf
YmVnaW5fdHJhbnNhY3Rpb24oc3RydWN0IGF0YV9yZXF1ZXN0CiAgICAgY2FzZSBBVEFfUl9BVEFQ
SToKIAkvKiBpcyB0aGlzIGp1c3QgYSBQT0xMIERTQyBjb21tYW5kID8gKi8KIAlpZiAocmVxdWVz
dC0+dS5hdGFwaS5jY2JbMF0gPT0gQVRBUElfUE9MTF9EU0MpIHsKLQkgICAgQVRBX0lEWF9PVVRC
KGNoLCBBVEFfRFJJVkUsIEFUQV9EX0lCTSB8IGF0YWRldi0+dW5pdCk7CisJICAgIEFUQV9JRFhf
T1VUQihjaCwgQVRBX0RSSVZFLCBBVEFfRF9JQk0gfCBBVEFfREVWKGF0YWRldi0+dW5pdCkpOwog
CSAgICBERUxBWSgxMCk7CiAJICAgIGlmICghKEFUQV9JRFhfSU5CKGNoLCBBVEFfQUxUU1RBVCkg
JiBBVEFfU19EU0MpKQogCQlyZXF1ZXN0LT5yZXN1bHQgPSBFQlVTWTsKQEAgLTE4MCw3ICsxODEs
NyBAQCBhdGFfYmVnaW5fdHJhbnNhY3Rpb24oc3RydWN0IGF0YV9yZXF1ZXN0CiAgICAgY2FzZSBB
VEFfUl9BVEFQSXxBVEFfUl9ETUE6CiAJLyogaXMgdGhpcyBqdXN0IGEgUE9MTCBEU0MgY29tbWFu
ZCA/ICovCiAJaWYgKHJlcXVlc3QtPnUuYXRhcGkuY2NiWzBdID09IEFUQVBJX1BPTExfRFNDKSB7
Ci0JICAgIEFUQV9JRFhfT1VUQihjaCwgQVRBX0RSSVZFLCBBVEFfRF9JQk0gfCBhdGFkZXYtPnVu
aXQpOworCSAgICBBVEFfSURYX09VVEIoY2gsIEFUQV9EUklWRSwgQVRBX0RfSUJNIHwgQVRBX0RF
VihhdGFkZXYtPnVuaXQpKTsKIAkgICAgREVMQVkoMTApOwogCSAgICBpZiAoIShBVEFfSURYX0lO
QihjaCwgQVRBX0FMVFNUQVQpICYgQVRBX1NfRFNDKSkKIAkJcmVxdWVzdC0+cmVzdWx0ID0gRUJV
U1k7CkBAIC0xODgsOSArMTg5LDcgQEAgYXRhX2JlZ2luX3RyYW5zYWN0aW9uKHN0cnVjdCBhdGFf
cmVxdWVzdAogCX0KIAogCS8qIGNoZWNrIHNhbml0eSwgc2V0dXAgU0cgbGlzdCBhbmQgRE1BIGVu
Z2luZSAqLwotCWlmICgoZXJyb3IgPSBjaC0+ZG1hLT5sb2FkKGNoLT5kZXYsIHJlcXVlc3QtPmRh
dGEsIHJlcXVlc3QtPmJ5dGVjb3VudCwKLQkJCQkgICByZXF1ZXN0LT5mbGFncyAmIEFUQV9SX1JF
QUQsIGNoLT5kbWEtPnNnLAotCQkJCSAgICZkdW1teSkpKSB7CisJaWYgKChlcnJvciA9IGNoLT5k
bWEubG9hZChyZXF1ZXN0LCBOVUxMLCAmZHVtbXkpKSkgewogCSAgICBkZXZpY2VfcHJpbnRmKHJl
cXVlc3QtPmRldiwgInNldHRpbmcgdXAgRE1BIGZhaWxlZFxuIik7CiAJICAgIHJlcXVlc3QtPnJl
c3VsdCA9IGVycm9yOwogCSAgICBnb3RvIGJlZ2luX2ZpbmlzaGVkOwpAQCAtMjA0LDcgKzIwMyw3
IEBAIGF0YV9iZWdpbl90cmFuc2FjdGlvbihzdHJ1Y3QgYXRhX3JlcXVlc3QKIAl9CiAKIAkvKiBz
dGFydCBETUEgZW5naW5lICovCi0JaWYgKGNoLT5kbWEtPnN0YXJ0ICYmIGNoLT5kbWEtPnN0YXJ0
KHJlcXVlc3QtPmRldikpIHsKKwlpZiAoY2gtPmRtYS5zdGFydCAmJiBjaC0+ZG1hLnN0YXJ0KHJl
cXVlc3QpKSB7CiAJICAgIHJlcXVlc3QtPnJlc3VsdCA9IEVJTzsKIAkgICAgZ290byBiZWdpbl9m
aW5pc2hlZDsKIAl9CkBAIC0yMTQsOCArMjEzLDkgQEAgYXRhX2JlZ2luX3RyYW5zYWN0aW9uKHN0
cnVjdCBhdGFfcmVxdWVzdAogICAgIHByaW50ZigiYXRhX2JlZ2luX3RyYW5zYWN0aW9uIE9PUFMh
ISFcbiIpOwogCiBiZWdpbl9maW5pc2hlZDoKLSAgICBpZiAoY2gtPmRtYSAmJiBjaC0+ZG1hLT5m
bGFncyAmIEFUQV9ETUFfTE9BREVEKQotCWNoLT5kbWEtPnVubG9hZChjaC0+ZGV2KTsKKyAgICBp
ZiAoY2gtPmRtYS51bmxvYWQpIHsKKyAgICAgICAgY2gtPmRtYS51bmxvYWQocmVxdWVzdCk7Cisg
ICAgfQogICAgIHJldHVybiBBVEFfT1BfRklOSVNIRUQ7CiAKIGJlZ2luX2NvbnRpbnVlOgpAQCAt
MjI4LDcgKzIyOCw3IEBAIGJlZ2luX2NvbnRpbnVlOgogaW50CiBhdGFfZW5kX3RyYW5zYWN0aW9u
KHN0cnVjdCBhdGFfcmVxdWVzdCAqcmVxdWVzdCkKIHsKLSAgICBzdHJ1Y3QgYXRhX2NoYW5uZWwg
KmNoID0gZGV2aWNlX2dldF9zb2Z0YyhkZXZpY2VfZ2V0X3BhcmVudChyZXF1ZXN0LT5kZXYpKTsK
KyAgICBzdHJ1Y3QgYXRhX2NoYW5uZWwgKmNoID0gZGV2aWNlX2dldF9zb2Z0YyhyZXF1ZXN0LT5w
YXJlbnQpOwogICAgIHN0cnVjdCBhdGFfZGV2aWNlICphdGFkZXYgPSBkZXZpY2VfZ2V0X3NvZnRj
KHJlcXVlc3QtPmRldik7CiAgICAgaW50IGxlbmd0aDsKIApAQCAtMzE0LDE5ICszMTQsMTkgQEAg
YXRhX2VuZF90cmFuc2FjdGlvbihzdHJ1Y3QgYXRhX3JlcXVlc3QgKgogICAgIGNhc2UgQVRBX1Jf
RE1BOgogCiAJLyogc3RvcCBETUEgZW5naW5lIGFuZCBnZXQgc3RhdHVzICovCi0JaWYgKGNoLT5k
bWEtPnN0b3ApCi0JICAgIHJlcXVlc3QtPmRtYXN0YXQgPSBjaC0+ZG1hLT5zdG9wKHJlcXVlc3Qt
PmRldik7CisJaWYgKGNoLT5kbWEuc3RvcCkKKwkgICAgcmVxdWVzdC0+ZG1hLT5zdGF0dXMgPSBj
aC0+ZG1hLnN0b3AocmVxdWVzdCk7CiAKIAkvKiBkaWQgd2UgZ2V0IGVycm9yIG9yIGRhdGEgKi8K
IAlpZiAocmVxdWVzdC0+c3RhdHVzICYgQVRBX1NfRVJST1IpCiAJICAgIHJlcXVlc3QtPmVycm9y
ID0gQVRBX0lEWF9JTkIoY2gsIEFUQV9FUlJPUik7Ci0JZWxzZSBpZiAocmVxdWVzdC0+ZG1hc3Rh
dCAmIEFUQV9CTVNUQVRfRVJST1IpCisJZWxzZSBpZiAocmVxdWVzdC0+ZG1hLT5zdGF0dXMgJiBB
VEFfQk1TVEFUX0VSUk9SKQogCSAgICByZXF1ZXN0LT5zdGF0dXMgfD0gQVRBX1NfRVJST1I7CiAJ
ZWxzZSBpZiAoIShyZXF1ZXN0LT5mbGFncyAmIEFUQV9SX1RJTUVPVVQpKQogCSAgICByZXF1ZXN0
LT5kb25lY291bnQgPSByZXF1ZXN0LT5ieXRlY291bnQ7CiAKIAkvKiByZWxlYXNlIFNHIGxpc3Qg
ZXRjICovCi0JY2gtPmRtYS0+dW5sb2FkKGNoLT5kZXYpOworCWNoLT5kbWEudW5sb2FkKHJlcXVl
c3QpOwogCiAJLyogZG9uZSB3aXRoIEhXICovCiAJZ290byBlbmRfZmluaXNoZWQ7CkBAIC00MjYs
MTkgKzQyNiwxOSBAQCBhdGFfZW5kX3RyYW5zYWN0aW9uKHN0cnVjdCBhdGFfcmVxdWVzdCAqCiAg
ICAgY2FzZSBBVEFfUl9BVEFQSXxBVEFfUl9ETUE6CiAKIAkvKiBzdG9wIERNQSBlbmdpbmUgYW5k
IGdldCBzdGF0dXMgKi8KLQlpZiAoY2gtPmRtYS0+c3RvcCkKLQkgICAgcmVxdWVzdC0+ZG1hc3Rh
dCA9IGNoLT5kbWEtPnN0b3AocmVxdWVzdC0+ZGV2KTsKKwlpZiAoY2gtPmRtYS5zdG9wKQorCSAg
ICByZXF1ZXN0LT5kbWEtPnN0YXR1cyA9IGNoLT5kbWEuc3RvcChyZXF1ZXN0KTsKIAogCS8qIGRp
ZCB3ZSBnZXQgZXJyb3Igb3IgZGF0YSAqLwogCWlmIChyZXF1ZXN0LT5zdGF0dXMgJiAoQVRBX1Nf
RVJST1IgfCBBVEFfU19EV0YpKQogCSAgICByZXF1ZXN0LT5lcnJvciA9IEFUQV9JRFhfSU5CKGNo
LCBBVEFfRVJST1IpOwotCWVsc2UgaWYgKHJlcXVlc3QtPmRtYXN0YXQgJiBBVEFfQk1TVEFUX0VS
Uk9SKQorCWVsc2UgaWYgKHJlcXVlc3QtPmRtYS0+c3RhdHVzICYgQVRBX0JNU1RBVF9FUlJPUikK
IAkgICAgcmVxdWVzdC0+c3RhdHVzIHw9IEFUQV9TX0VSUk9SOwogCWVsc2UgaWYgKCEocmVxdWVz
dC0+ZmxhZ3MgJiBBVEFfUl9USU1FT1VUKSkKIAkgICAgcmVxdWVzdC0+ZG9uZWNvdW50ID0gcmVx
dWVzdC0+Ynl0ZWNvdW50OwogIAogCS8qIHJlbGVhc2UgU0cgbGlzdCBldGMgKi8KLQljaC0+ZG1h
LT51bmxvYWQoY2gtPmRldik7CisJY2gtPmRtYS51bmxvYWQocmVxdWVzdCk7CiAKIAkvKiBkb25l
IHdpdGggSFcgKi8KIAlnb3RvIGVuZF9maW5pc2hlZDsKQEAgLTQ2NSw3ICs0NjUsNyBAQCBhdGFf
Z2VuZXJpY19yZXNldChkZXZpY2VfdCBkZXYpCiAgICAgaW50IG1hc2sgPSAwLCB0aW1lb3V0Owog
CiAgICAgLyogZG8gd2UgaGF2ZSBhbnkgc2lnbnMgb2YgQVRBL0FUQVBJIEhXIGJlaW5nIHByZXNl
bnQgPyAqLwotICAgIEFUQV9JRFhfT1VUQihjaCwgQVRBX0RSSVZFLCBBVEFfRF9JQk0gfCBBVEFf
RF9MQkEgfCBBVEFfTUFTVEVSKTsKKyAgICBBVEFfSURYX09VVEIoY2gsIEFUQV9EUklWRSwgQVRB
X0RfSUJNIHwgQVRBX0RfTEJBIHwgQVRBX0RFVihBVEFfTUFTVEVSKSk7CiAgICAgREVMQVkoMTAp
OwogICAgIG9zdGF0MCA9IEFUQV9JRFhfSU5CKGNoLCBBVEFfU1RBVFVTKTsKICAgICBpZiAoKG9z
dGF0MCAmIDB4ZjgpICE9IDB4ZjggJiYgb3N0YXQwICE9IDB4YTUpIHsKQEAgLTQ3NSw3ICs0NzUs
NyBAQCBhdGFfZ2VuZXJpY19yZXNldChkZXZpY2VfdCBkZXYpCiAKICAgICAvKiBpbiBzb21lIHNl
dHVwcyB3ZSBkb250IHdhbnQgdG8gdGVzdCBmb3IgYSBzbGF2ZSAqLwogICAgIGlmICghKGNoLT5m
bGFncyAmIEFUQV9OT19TTEFWRSkpIHsKLQlBVEFfSURYX09VVEIoY2gsIEFUQV9EUklWRSwgQVRB
X0RfSUJNIHwgQVRBX0RfTEJBIHwgQVRBX1NMQVZFKTsKKwlBVEFfSURYX09VVEIoY2gsIEFUQV9E
UklWRSwgQVRBX0RfSUJNIHwgQVRBX0RfTEJBIHwgQVRBX0RFVihBVEFfU0xBVkUpKTsKIAlERUxB
WSgxMCk7ICAgICAgCiAJb3N0YXQxID0gQVRBX0lEWF9JTkIoY2gsIEFUQV9TVEFUVVMpOwogCWlm
ICgob3N0YXQxICYgMHhmOCkgIT0gMHhmOCAmJiBvc3RhdDEgIT0gMHhhNSkgewpAQCAtNDk1LDcg
KzQ5NSw3IEBAIGF0YV9nZW5lcmljX3Jlc2V0KGRldmljZV90IGRldikKIAlyZXR1cm47CiAKICAg
ICAvKiByZXNldCAoYm90aCkgZGV2aWNlcyBvbiB0aGlzIGNoYW5uZWwgKi8KLSAgICBBVEFfSURY
X09VVEIoY2gsIEFUQV9EUklWRSwgQVRBX0RfSUJNIHwgQVRBX0RfTEJBIHwgQVRBX01BU1RFUik7
CisgICAgQVRBX0lEWF9PVVRCKGNoLCBBVEFfRFJJVkUsIEFUQV9EX0lCTSB8IEFUQV9EX0xCQSB8
IEFUQV9ERVYoQVRBX01BU1RFUikpOwogICAgIERFTEFZKDEwKTsKICAgICBBVEFfSURYX09VVEIo
Y2gsIEFUQV9DT05UUk9MLCBBVEFfQV9JRFMgfCBBVEFfQV9SRVNFVCk7CiAgICAgYXRhX3VkZWxh
eSgxMDAwMCk7IApAQCAtNTA2LDcgKzUwNiw3IEBAIGF0YV9nZW5lcmljX3Jlc2V0KGRldmljZV90
IGRldikKICAgICAvKiB3YWl0IGZvciBCVVNZIHRvIGdvIGluYWN0aXZlICovCiAgICAgZm9yICh0
aW1lb3V0ID0gMDsgdGltZW91dCA8IDMxMDsgdGltZW91dCsrKSB7CiAJaWYgKChtYXNrICYgMHgw
MSkgJiYgKHN0YXQwICYgQVRBX1NfQlVTWSkpIHsKLQkgICAgQVRBX0lEWF9PVVRCKGNoLCBBVEFf
RFJJVkUsIEFUQV9EX0lCTSB8IEFUQV9NQVNURVIpOworCSAgICBBVEFfSURYX09VVEIoY2gsIEFU
QV9EUklWRSwgQVRBX0RfSUJNIHwgQVRBX0RFVihBVEFfTUFTVEVSKSk7CiAJICAgIERFTEFZKDEw
KTsKIAkgICAgZXJyID0gQVRBX0lEWF9JTkIoY2gsIEFUQV9FUlJPUik7CiAJICAgIGxzYiA9IEFU
QV9JRFhfSU5CKGNoLCBBVEFfQ1lMX0xTQik7CkBAIC01MzYsNyArNTM2LDcgQEAgYXRhX2dlbmVy
aWNfcmVzZXQoZGV2aWNlX3QgZGV2KQogCiAJaWYgKChtYXNrICYgMHgwMikgJiYgKHN0YXQxICYg
QVRBX1NfQlVTWSkgJiYKIAkgICAgISgobWFzayAmIDB4MDEpICYmIChzdGF0MCAmIEFUQV9TX0JV
U1kpKSkgewotCSAgICBBVEFfSURYX09VVEIoY2gsIEFUQV9EUklWRSwgQVRBX0RfSUJNIHwgQVRB
X1NMQVZFKTsKKwkgICAgQVRBX0lEWF9PVVRCKGNoLCBBVEFfRFJJVkUsIEFUQV9EX0lCTSB8IEFU
QV9ERVYoQVRBX1NMQVZFKSk7CiAJICAgIERFTEFZKDEwKTsKIAkgICAgZXJyID0gQVRBX0lEWF9J
TkIoY2gsIEFUQV9FUlJPUik7CiAJICAgIGxzYiA9IEFUQV9JRFhfSU5CKGNoLCBBVEFfQ1lMX0xT
Qik7CkBAIC01ODQsOSArNTg0LDggQEAgYXRhX2dlbmVyaWNfcmVzZXQoZGV2aWNlX3QgZGV2KQog
ICAgIH0KIAogICAgIGlmIChib290dmVyYm9zZSkKLQlkZXZpY2VfcHJpbnRmKGRldiwgInJlc2V0
IHRwMiBzdGF0MD0lMDJ4IHN0YXQxPSUwMnggZGV2aWNlcz0weCViXG4iLAotCQkgICAgICBzdGF0
MCwgc3RhdDEsIGNoLT5kZXZpY2VzLAotCQkgICAgICAiXDIwXDRBVEFQSV9TTEFWRVwzQVRBUElf
TUFTVEVSXDJBVEFfU0xBVkVcMUFUQV9NQVNURVIiKTsKKwlkZXZpY2VfcHJpbnRmKGRldiwgInJl
c2V0IHRwMiBzdGF0MD0lMDJ4IHN0YXQxPSUwMnggZGV2aWNlcz0weCV4XG4iLAorCQkgICAgICBz
dGF0MCwgc3RhdDEsIGNoLT5kZXZpY2VzKTsKIH0KIAogLyogbXVzdCBiZSBjYWxsZWQgd2l0aCBB
VEEgY2hhbm5lbCBsb2NrZWQgYW5kIHN0YXRlX210eCBoZWxkICovCkBAIC02MTcsNyArNjE2LDcg
QEAgYXRhX3dhaXQoc3RydWN0IGF0YV9jaGFubmVsICpjaCwgc3RydWN0IAogCiAJLyogaWYgZHJp
dmUgZmFpbHMgc3RhdHVzLCByZXNlbGVjdCB0aGUgZHJpdmUgYW5kIHRyeSBhZ2FpbiAqLwogCWlm
IChzdGF0dXMgPT0gMHhmZikgewotCSAgICBBVEFfSURYX09VVEIoY2gsIEFUQV9EUklWRSwgQVRB
X0RfSUJNIHwgYXRhZGV2LT51bml0KTsKKwkgICAgQVRBX0lEWF9PVVRCKGNoLCBBVEFfRFJJVkUs
IEFUQV9EX0lCTSB8IEFUQV9ERVYoYXRhZGV2LT51bml0KSk7CiAJICAgIHRpbWVvdXQgKz0gMTAw
MDsKIAkgICAgREVMQVkoMTAwMCk7CiAJICAgIGNvbnRpbnVlOwpAQCAtNjU3LDExICs2NTYsMTEg
QEAgYXRhX3dhaXQoc3RydWN0IGF0YV9jaGFubmVsICpjaCwgc3RydWN0IAogaW50CiBhdGFfZ2Vu
ZXJpY19jb21tYW5kKHN0cnVjdCBhdGFfcmVxdWVzdCAqcmVxdWVzdCkKIHsKLSAgICBzdHJ1Y3Qg
YXRhX2NoYW5uZWwgKmNoID0gZGV2aWNlX2dldF9zb2Z0YyhkZXZpY2VfZ2V0X3BhcmVudChyZXF1
ZXN0LT5kZXYpKTsKKyAgICBzdHJ1Y3QgYXRhX2NoYW5uZWwgKmNoID0gZGV2aWNlX2dldF9zb2Z0
YyhyZXF1ZXN0LT5wYXJlbnQpOwogICAgIHN0cnVjdCBhdGFfZGV2aWNlICphdGFkZXYgPSBkZXZp
Y2VfZ2V0X3NvZnRjKHJlcXVlc3QtPmRldik7CiAKICAgICAvKiBzZWxlY3QgZGV2aWNlICovCi0g
ICAgQVRBX0lEWF9PVVRCKGNoLCBBVEFfRFJJVkUsIEFUQV9EX0lCTSB8IEFUQV9EX0xCQSB8IGF0
YWRldi0+dW5pdCk7CisgICAgQVRBX0lEWF9PVVRCKGNoLCBBVEFfRFJJVkUsIEFUQV9EX0lCTSB8
IEFUQV9EX0xCQSB8IEFUQV9ERVYoYXRhZGV2LT51bml0KSk7CiAKICAgICAvKiByZWFkeSB0byBp
c3N1ZSBjb21tYW5kID8gKi8KICAgICBpZiAoYXRhX3dhaXQoY2gsIGF0YWRldiwgMCkgPCAwKSB7
IApAQCAtNzI4LDcgKzcyNyw3IEBAIGF0YV9nZW5lcmljX2NvbW1hbmQoc3RydWN0IGF0YV9yZXF1
ZXN0ICoKIHN0YXRpYyB2b2lkCiBhdGFfdGZfcmVhZChzdHJ1Y3QgYXRhX3JlcXVlc3QgKnJlcXVl
c3QpCiB7Ci0gICAgc3RydWN0IGF0YV9jaGFubmVsICpjaCA9IGRldmljZV9nZXRfc29mdGMoZGV2
aWNlX2dldF9wYXJlbnQocmVxdWVzdC0+ZGV2KSk7CisgICAgc3RydWN0IGF0YV9jaGFubmVsICpj
aCA9IGRldmljZV9nZXRfc29mdGMocmVxdWVzdC0+cGFyZW50KTsKICAgICBzdHJ1Y3QgYXRhX2Rl
dmljZSAqYXRhZGV2ID0gZGV2aWNlX2dldF9zb2Z0YyhyZXF1ZXN0LT5kZXYpOwogCiAgICAgaWYg
KGF0YWRldi0+ZmxhZ3MgJiBBVEFfRF80OEJJVF9BQ1RJVkUpIHsKQEAgLTc1OCw3ICs3NTcsNyBA
QCBhdGFfdGZfcmVhZChzdHJ1Y3QgYXRhX3JlcXVlc3QgKnJlcXVlc3QpCiBzdGF0aWMgdm9pZAog
YXRhX3RmX3dyaXRlKHN0cnVjdCBhdGFfcmVxdWVzdCAqcmVxdWVzdCkKIHsKLSAgICBzdHJ1Y3Qg
YXRhX2NoYW5uZWwgKmNoID0gZGV2aWNlX2dldF9zb2Z0YyhkZXZpY2VfZ2V0X3BhcmVudChyZXF1
ZXN0LT5kZXYpKTsKKyAgICBzdHJ1Y3QgYXRhX2NoYW5uZWwgKmNoID0gZGV2aWNlX2dldF9zb2Z0
YyhyZXF1ZXN0LT5wYXJlbnQpOwogICAgIHN0cnVjdCBhdGFfZGV2aWNlICphdGFkZXYgPSBkZXZp
Y2VfZ2V0X3NvZnRjKHJlcXVlc3QtPmRldik7CiAKICAgICBpZiAoYXRhZGV2LT5mbGFncyAmIEFU
QV9EXzQ4QklUX0FDVElWRSkgewpAQCAtNzcyLDcgKzc3MSw3IEBAIGF0YV90Zl93cml0ZShzdHJ1
Y3QgYXRhX3JlcXVlc3QgKnJlcXVlc3QKIAlBVEFfSURYX09VVEIoY2gsIEFUQV9DWUxfTFNCLCBy
ZXF1ZXN0LT51LmF0YS5sYmEgPj4gOCk7CiAJQVRBX0lEWF9PVVRCKGNoLCBBVEFfQ1lMX01TQiwg
cmVxdWVzdC0+dS5hdGEubGJhID4+IDQwKTsKIAlBVEFfSURYX09VVEIoY2gsIEFUQV9DWUxfTVNC
LCByZXF1ZXN0LT51LmF0YS5sYmEgPj4gMTYpOwotCUFUQV9JRFhfT1VUQihjaCwgQVRBX0RSSVZF
LCBBVEFfRF9MQkEgfCBhdGFkZXYtPnVuaXQpOworCUFUQV9JRFhfT1VUQihjaCwgQVRBX0RSSVZF
LCBBVEFfRF9MQkEgfCBBVEFfREVWKGF0YWRldi0+dW5pdCkpOwogICAgIH0KICAgICBlbHNlIHsK
IAlBVEFfSURYX09VVEIoY2gsIEFUQV9GRUFUVVJFLCByZXF1ZXN0LT51LmF0YS5mZWF0dXJlKTsK
QEAgLTc5NCw3ICs3OTMsNyBAQCBhdGFfdGZfd3JpdGUoc3RydWN0IGF0YV9yZXF1ZXN0ICpyZXF1
ZXN0CiAJCQkgKHJlcXVlc3QtPnUuYXRhLmxiYSAvIChzZWN0b3JzICogaGVhZHMpKSk7CiAJICAg
IEFUQV9JRFhfT1VUQihjaCwgQVRBX0NZTF9NU0IsCiAJCQkgKHJlcXVlc3QtPnUuYXRhLmxiYSAv
IChzZWN0b3JzICogaGVhZHMpKSA+PiA4KTsKLQkgICAgQVRBX0lEWF9PVVRCKGNoLCBBVEFfRFJJ
VkUsIEFUQV9EX0lCTSB8IGF0YWRldi0+dW5pdCB8IAorCSAgICBBVEFfSURYX09VVEIoY2gsIEFU
QV9EUklWRSwgQVRBX0RfSUJNIHwgQVRBX0RFVihhdGFkZXYtPnVuaXQpIHwgCiAJCQkgKCgocmVx
dWVzdC0+dS5hdGEubGJhJSAoc2VjdG9ycyAqIGhlYWRzKSkgLwogCQkJICAgc2VjdG9ycykgJiAw
eGYpKTsKIAl9CkBAIC04MDMsNyArODAyLDcgQEAgYXRhX3RmX3dyaXRlKHN0cnVjdCBhdGFfcmVx
dWVzdCAqcmVxdWVzdAogCSAgICBBVEFfSURYX09VVEIoY2gsIEFUQV9DWUxfTFNCLCByZXF1ZXN0
LT51LmF0YS5sYmEgPj4gOCk7CiAJICAgIEFUQV9JRFhfT1VUQihjaCwgQVRBX0NZTF9NU0IsIHJl
cXVlc3QtPnUuYXRhLmxiYSA+PiAxNik7CiAJICAgIEFUQV9JRFhfT1VUQihjaCwgQVRBX0RSSVZF
LAotCQkJIEFUQV9EX0lCTSB8IEFUQV9EX0xCQSB8IGF0YWRldi0+dW5pdCB8CisJCQkgQVRBX0Rf
SUJNIHwgQVRBX0RfTEJBIHwgQVRBX0RFVihhdGFkZXYtPnVuaXQpIHwKIAkJCSAoKHJlcXVlc3Qt
PnUuYXRhLmxiYSA+PiAyNCkgJiAweDBmKSk7CiAJfQogICAgIH0KQEAgLTgxMiw3ICs4MTEsNyBA
QCBhdGFfdGZfd3JpdGUoc3RydWN0IGF0YV9yZXF1ZXN0ICpyZXF1ZXN0CiBzdGF0aWMgdm9pZAog
YXRhX3Bpb19yZWFkKHN0cnVjdCBhdGFfcmVxdWVzdCAqcmVxdWVzdCwgaW50IGxlbmd0aCkKIHsK
LSAgICBzdHJ1Y3QgYXRhX2NoYW5uZWwgKmNoID0gZGV2aWNlX2dldF9zb2Z0YyhkZXZpY2VfZ2V0
X3BhcmVudChyZXF1ZXN0LT5kZXYpKTsKKyAgICBzdHJ1Y3QgYXRhX2NoYW5uZWwgKmNoID0gZGV2
aWNlX2dldF9zb2Z0YyhyZXF1ZXN0LT5wYXJlbnQpOwogICAgIGludCBzaXplID0gbWluKHJlcXVl
c3QtPnRyYW5zZmVyc2l6ZSwgbGVuZ3RoKTsKICAgICBpbnQgcmVzaWQ7CiAKQEAgLTgzNyw3ICs4
MzYsNyBAQCBhdGFfcGlvX3JlYWQoc3RydWN0IGF0YV9yZXF1ZXN0ICpyZXF1ZXN0CiBzdGF0aWMg
dm9pZAogYXRhX3Bpb193cml0ZShzdHJ1Y3QgYXRhX3JlcXVlc3QgKnJlcXVlc3QsIGludCBsZW5n
dGgpCiB7Ci0gICAgc3RydWN0IGF0YV9jaGFubmVsICpjaCA9IGRldmljZV9nZXRfc29mdGMoZGV2
aWNlX2dldF9wYXJlbnQocmVxdWVzdC0+ZGV2KSk7CisgICAgc3RydWN0IGF0YV9jaGFubmVsICpj
aCA9IGRldmljZV9nZXRfc29mdGMocmVxdWVzdC0+cGFyZW50KTsKICAgICBpbnQgc2l6ZSA9IG1p
bihyZXF1ZXN0LT50cmFuc2ZlcnNpemUsIGxlbmd0aCk7CiAgICAgaW50IHJlc2lkOwogCi0tLSBz
cmMvc3lzL2Rldi9hdGEvYXRhLXBjaS5jCTIwMDctMTEtMjIgMDA6MTU6MDAuMDAwMDAwMDAwICsw
MzAwCisrKyBzcmMvc3lzL2Rldi9hdGEvYXRhLXBjaS5jCTIwMDgtMDktMTggMTY6MTI6MzQuMDAw
MDAwMDAwICswNDAwCkBAIC0xLDUgKzEsNSBAQAogLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTgg
LSAyMDA3IFP4cmVuIFNjaG1pZHQgPHNvc0BGcmVlQlNELm9yZz4KKyAqIENvcHlyaWdodCAoYykg
MTk5OCAtIDIwMDggU/hyZW4gU2NobWlkdCA8c29zQEZyZWVCU0Qub3JnPgogICogQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTk2LDYgKzk2LDEwIEBAIGF0YV9wY2lf
cHJvYmUoZGV2aWNlX3QgZGV2KQogCWlmICghYXRhX2FtZF9pZGVudChkZXYpKQogCSAgICByZXR1
cm4gQVRBX1BST0JFX09LOwogCWJyZWFrOworICAgIGNhc2UgQVRBX0FEQVBURUNfSUQ6CisJaWYg
KCFhdGFfYWRhcHRlY19pZGVudChkZXYpKQorCSAgICByZXR1cm4gQVRBX1BST0JFX09LOworCWJy
ZWFrOwogICAgIGNhc2UgQVRBX0FUSV9JRDoKIAlpZiAoIWF0YV9hdGlfaWRlbnQoZGV2KSkKIAkg
ICAgcmV0dXJuIEFUQV9QUk9CRV9PSzsKQEAgLTI1OCw2ICsyNjIsMzEgQEAgYXRhX3BjaV9kZXRh
Y2goZGV2aWNlX3QgZGV2KQogICAgIHJldHVybiAwOwogfQogCitpbnQKK2F0YV9wY2lfc3VzcGVu
ZChkZXZpY2VfdCBkZXYpCit7CisgICAgc3RydWN0IGF0YV9wY2lfY29udHJvbGxlciAqY3RsciA9
IGRldmljZV9nZXRfc29mdGMoZGV2KTsKKyAgICBpbnQgZXJyb3IgPSAwOworIAorICAgIGJ1c19n
ZW5lcmljX3N1c3BlbmQoZGV2KTsKKyAgICBpZiAoY3Rsci0+c3VzcGVuZCkKKwllcnJvciA9IGN0
bHItPnN1c3BlbmQoZGV2KTsKKyAgICByZXR1cm4gZXJyb3I7Cit9CisgIAoraW50CithdGFfcGNp
X3Jlc3VtZShkZXZpY2VfdCBkZXYpCit7CisgICAgc3RydWN0IGF0YV9wY2lfY29udHJvbGxlciAq
Y3RsciA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKKyAgICBpbnQgZXJyb3IgPSAwOworIAorICAg
IGlmIChjdGxyLT5yZXN1bWUpCisJZXJyb3IgPSBjdGxyLT5yZXN1bWUoZGV2KTsKKyAgICBidXNf
Z2VuZXJpY19yZXN1bWUoZGV2KTsKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKKwogc3RydWN0IHJl
c291cmNlICoKIGF0YV9wY2lfYWxsb2NfcmVzb3VyY2UoZGV2aWNlX3QgZGV2LCBkZXZpY2VfdCBj
aGlsZCwgaW50IHR5cGUsIGludCAqcmlkLAogCQkgICAgICAgdV9sb25nIHN0YXJ0LCB1X2xvbmcg
ZW5kLCB1X2xvbmcgY291bnQsIHVfaW50IGZsYWdzKQpAQCAtNDIyLDIzICs0NTEsMTQgQEAgYXRh
X3BjaV9hbGxvY2F0ZShkZXZpY2VfdCBkZXYpCiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQKLWF0
YV9wY2lfaHcoZGV2aWNlX3QgZGV2KQotewotICAgIHN0cnVjdCBhdGFfY2hhbm5lbCAqY2ggPSBk
ZXZpY2VfZ2V0X3NvZnRjKGRldik7Ci0KLSAgICBhdGFfZ2VuZXJpY19odyhkZXYpOwotICAgIGNo
LT5ody5zdGF0dXMgPSBhdGFfcGNpX3N0YXR1czsKLX0KLQogaW50CiBhdGFfcGNpX3N0YXR1cyhk
ZXZpY2VfdCBkZXYpCiB7CiAgICAgc3RydWN0IGF0YV9jaGFubmVsICpjaCA9IGRldmljZV9nZXRf
c29mdGMoZGV2KTsKIAogICAgIGlmICgoZHVtcGluZyB8fCAhYXRhX2xlZ2FjeShkZXZpY2VfZ2V0
X3BhcmVudChkZXYpKSkgJiYKLQljaC0+ZG1hICYmICgoY2gtPmZsYWdzICYgQVRBX0FMV0FZU19E
TUFTVEFUKSB8fAotCQkgICAgKGNoLT5kbWEtPmZsYWdzICYgQVRBX0RNQV9BQ1RJVkUpKSkgewor
CSgoY2gtPmZsYWdzICYgQVRBX0FMV0FZU19ETUFTVEFUKSB8fAorCSAoY2gtPmRtYS5mbGFncyAm
IEFUQV9ETUFfQUNUSVZFKSkpIHsKIAlpbnQgYm1zdGF0ID0gQVRBX0lEWF9JTkIoY2gsIEFUQV9C
TVNUQVRfUE9SVCkgJiBBVEFfQk1TVEFUX01BU0s7CiAKIAlpZiAoKGJtc3RhdCAmIChBVEFfQk1T
VEFUX0FDVElWRSB8IEFUQV9CTVNUQVRfSU5URVJSVVBUKSkgIT0KQEAgLTQ1NSwzMSArNDc1LDQ0
IEBAIGF0YV9wY2lfc3RhdHVzKGRldmljZV90IGRldikKICAgICByZXR1cm4gMTsKIH0KIAordm9p
ZAorYXRhX3BjaV9odyhkZXZpY2VfdCBkZXYpCit7CisgICAgc3RydWN0IGF0YV9jaGFubmVsICpj
aCA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKKworICAgIGF0YV9nZW5lcmljX2h3KGRldik7Cisg
ICAgY2gtPmh3LnN0YXR1cyA9IGF0YV9wY2lfc3RhdHVzOworfQorCiBzdGF0aWMgaW50Ci1hdGFf
cGNpX2RtYXN0YXJ0KGRldmljZV90IGRldikKK2F0YV9wY2lfZG1hc3RhcnQoc3RydWN0IGF0YV9y
ZXF1ZXN0ICpyZXF1ZXN0KQogewotICAgIHN0cnVjdCBhdGFfY2hhbm5lbCAqY2ggPSBkZXZpY2Vf
Z2V0X3NvZnRjKGRldmljZV9nZXRfcGFyZW50KGRldikpOworICAgIHN0cnVjdCBhdGFfY2hhbm5l
bCAqY2ggPSBkZXZpY2VfZ2V0X3NvZnRjKHJlcXVlc3QtPnBhcmVudCk7CisKKyAgICBBVEFfREVC
VUdfUlEocmVxdWVzdCwgImRtYXN0YXJ0Iik7CiAKICAgICBBVEFfSURYX09VVEIoY2gsIEFUQV9C
TVNUQVRfUE9SVCwgKEFUQV9JRFhfSU5CKGNoLCBBVEFfQk1TVEFUX1BPUlQpIHwgCiAJCSAoQVRB
X0JNU1RBVF9JTlRFUlJVUFQgfCBBVEFfQk1TVEFUX0VSUk9SKSkpOwotICAgIEFUQV9JRFhfT1VU
TChjaCwgQVRBX0JNRFRQX1BPUlQsIGNoLT5kbWEtPnNnX2J1cyk7Ci0gICAgY2gtPmRtYS0+Zmxh
Z3MgfD0gQVRBX0RNQV9BQ1RJVkU7CisgICAgQVRBX0lEWF9PVVRMKGNoLCBBVEFfQk1EVFBfUE9S
VCwgcmVxdWVzdC0+ZG1hLT5zZ19idXMpOworICAgIGNoLT5kbWEuZmxhZ3MgfD0gQVRBX0RNQV9B
Q1RJVkU7CiAgICAgQVRBX0lEWF9PVVRCKGNoLCBBVEFfQk1DTURfUE9SVCwKIAkJIChBVEFfSURY
X0lOQihjaCwgQVRBX0JNQ01EX1BPUlQpICYgfkFUQV9CTUNNRF9XUklURV9SRUFEKSB8Ci0JCSAo
KGNoLT5kbWEtPmZsYWdzICYgQVRBX0RNQV9SRUFEKSA/IEFUQV9CTUNNRF9XUklURV9SRUFEIDog
MCkgfAorCQkgKChyZXF1ZXN0LT5mbGFncyAmIEFUQV9SX1JFQUQpID8gQVRBX0JNQ01EX1dSSVRF
X1JFQUQgOiAwKXwKIAkJIEFUQV9CTUNNRF9TVEFSVF9TVE9QKTsKICAgICByZXR1cm4gMDsKIH0K
IAogc3RhdGljIGludAotYXRhX3BjaV9kbWFzdG9wKGRldmljZV90IGRldikKK2F0YV9wY2lfZG1h
c3RvcChzdHJ1Y3QgYXRhX3JlcXVlc3QgKnJlcXVlc3QpCiB7Ci0gICAgc3RydWN0IGF0YV9jaGFu
bmVsICpjaCA9IGRldmljZV9nZXRfc29mdGMoZGV2aWNlX2dldF9wYXJlbnQoZGV2KSk7CisgICAg
c3RydWN0IGF0YV9jaGFubmVsICpjaCA9IGRldmljZV9nZXRfc29mdGMocmVxdWVzdC0+cGFyZW50
KTsKICAgICBpbnQgZXJyb3I7CiAKKyAgICBBVEFfREVCVUdfUlEocmVxdWVzdCwgImRtYXN0b3Ai
KTsKKwogICAgIEFUQV9JRFhfT1VUQihjaCwgQVRBX0JNQ01EX1BPUlQsIAogCQkgQVRBX0lEWF9J
TkIoY2gsIEFUQV9CTUNNRF9QT1JUKSAmIH5BVEFfQk1DTURfU1RBUlRfU1RPUCk7Ci0gICAgY2gt
PmRtYS0+ZmxhZ3MgJj0gfkFUQV9ETUFfQUNUSVZFOworICAgIGNoLT5kbWEuZmxhZ3MgJj0gfkFU
QV9ETUFfQUNUSVZFOwogICAgIGVycm9yID0gQVRBX0lEWF9JTkIoY2gsIEFUQV9CTVNUQVRfUE9S
VCkgJiBBVEFfQk1TVEFUX01BU0s7CiAgICAgQVRBX0lEWF9PVVRCKGNoLCBBVEFfQk1TVEFUX1BP
UlQsIEFUQV9CTVNUQVRfSU5URVJSVVBUIHwgQVRBX0JNU1RBVF9FUlJPUik7CiAgICAgcmV0dXJu
IGVycm9yOwpAQCAtNDg5LDEyICs1MjIsMTYgQEAgc3RhdGljIHZvaWQKIGF0YV9wY2lfZG1hcmVz
ZXQoZGV2aWNlX3QgZGV2KQogewogICAgIHN0cnVjdCBhdGFfY2hhbm5lbCAqY2ggPSBkZXZpY2Vf
Z2V0X3NvZnRjKGRldik7CisgICAgc3RydWN0IGF0YV9yZXF1ZXN0ICpyZXF1ZXN0OwogCiAgICAg
QVRBX0lEWF9PVVRCKGNoLCBBVEFfQk1DTURfUE9SVCwgCiAJCSBBVEFfSURYX0lOQihjaCwgQVRB
X0JNQ01EX1BPUlQpICYgfkFUQV9CTUNNRF9TVEFSVF9TVE9QKTsKLSAgICBjaC0+ZG1hLT5mbGFn
cyAmPSB+QVRBX0RNQV9BQ1RJVkU7CisgICAgY2gtPmRtYS5mbGFncyAmPSB+QVRBX0RNQV9BQ1RJ
VkU7CiAgICAgQVRBX0lEWF9PVVRCKGNoLCBBVEFfQk1TVEFUX1BPUlQsIEFUQV9CTVNUQVRfSU5U
RVJSVVBUIHwgQVRBX0JNU1RBVF9FUlJPUik7Ci0gICAgY2gtPmRtYS0+dW5sb2FkKGRldik7Cisg
ICAgaWYgKChyZXF1ZXN0ID0gY2gtPnJ1bm5pbmcpKSB7CisJZGV2aWNlX3ByaW50ZihyZXF1ZXN0
LT5kZXYsICJETUEgcmVzZXQgY2FsbGluZyB1bmxvYWRcbiIpOworCWNoLT5kbWEudW5sb2FkKHJl
cXVlc3QpOworICAgIH0KIH0KIAogdm9pZApAQCAtNTAzLDExICs1NDAsOSBAQCBhdGFfcGNpX2Rt
YWluaXQoZGV2aWNlX3QgZGV2KQogICAgIHN0cnVjdCBhdGFfY2hhbm5lbCAqY2ggPSBkZXZpY2Vf
Z2V0X3NvZnRjKGRldik7CiAKICAgICBhdGFfZG1haW5pdChkZXYpOwotICAgIGlmIChjaC0+ZG1h
KSB7Ci0JY2gtPmRtYS0+c3RhcnQgPSBhdGFfcGNpX2RtYXN0YXJ0OwotCWNoLT5kbWEtPnN0b3Ag
PSBhdGFfcGNpX2RtYXN0b3A7Ci0JY2gtPmRtYS0+cmVzZXQgPSBhdGFfcGNpX2RtYXJlc2V0Owot
ICAgIH0KKyAgICBjaC0+ZG1hLnN0YXJ0ID0gYXRhX3BjaV9kbWFzdGFydDsKKyAgICBjaC0+ZG1h
LnN0b3AgPSBhdGFfcGNpX2RtYXN0b3A7CisgICAgY2gtPmRtYS5yZXNldCA9IGF0YV9wY2lfZG1h
cmVzZXQ7CiB9CiAKIGNoYXIgKgpAQCAtNTE3LDYgKzU1Miw3IEBAIGF0YV9wY2l2ZW5kb3Iyc3Ry
KGRldmljZV90IGRldikKICAgICBjYXNlIEFUQV9BQ0FSRF9JRDogICAgICAgICAgcmV0dXJuICJB
Y2FyZCI7CiAgICAgY2FzZSBBVEFfQUNFUl9MQUJTX0lEOiAgICAgIHJldHVybiAiQWNlckxhYnMi
OwogICAgIGNhc2UgQVRBX0FNRF9JRDogICAgICAgICAgICByZXR1cm4gIkFNRCI7CisgICAgY2Fz
ZSBBVEFfQURBUFRFQ19JRDogICAgICAgIHJldHVybiAiQWRhcHRlYyI7CiAgICAgY2FzZSBBVEFf
QVRJX0lEOiAgICAgICAgICAgIHJldHVybiAiQVRJIjsKICAgICBjYXNlIEFUQV9DWVJJWF9JRDog
ICAgICAgICAgcmV0dXJuICJDeXJpeCI7CiAgICAgY2FzZSBBVEFfQ1lQUkVTU19JRDogICAgICAg
IHJldHVybiAiQ3lwcmVzcyI7CkBAIC01NDQsOSArNTgwLDkgQEAgc3RhdGljIGRldmljZV9tZXRo
b2RfdCBhdGFfcGNpX21ldGhvZHNbXQogICAgIERFVk1FVEhPRChkZXZpY2VfcHJvYmUsICAgICAg
ICAgICAgIGF0YV9wY2lfcHJvYmUpLAogICAgIERFVk1FVEhPRChkZXZpY2VfYXR0YWNoLCAgICAg
ICAgICAgIGF0YV9wY2lfYXR0YWNoKSwKICAgICBERVZNRVRIT0QoZGV2aWNlX2RldGFjaCwgICAg
ICAgICAgICBhdGFfcGNpX2RldGFjaCksCisgICAgREVWTUVUSE9EKGRldmljZV9zdXNwZW5kLCAg
ICAgICAgICAgYXRhX3BjaV9zdXNwZW5kKSwKKyAgICBERVZNRVRIT0QoZGV2aWNlX3Jlc3VtZSwg
ICAgICAgICAgICBhdGFfcGNpX3Jlc3VtZSksCiAgICAgREVWTUVUSE9EKGRldmljZV9zaHV0ZG93
biwgICAgICAgICAgYnVzX2dlbmVyaWNfc2h1dGRvd24pLAotICAgIERFVk1FVEhPRChkZXZpY2Vf
c3VzcGVuZCwgICAgICAgICAgIGJ1c19nZW5lcmljX3N1c3BlbmQpLAotICAgIERFVk1FVEhPRChk
ZXZpY2VfcmVzdW1lLCAgICAgICAgICAgIGJ1c19nZW5lcmljX3Jlc3VtZSksCiAKICAgICAvKiBi
dXMgbWV0aG9kcyAqLwogICAgIERFVk1FVEhPRChidXNfYWxsb2NfcmVzb3VyY2UsICAgICAgIGF0
YV9wY2lfYWxsb2NfcmVzb3VyY2UpLApAQCAtNjAwLDE5ICs2MzYsMTMgQEAgc3RhdGljIGludAog
YXRhX3BjaWNoYW5uZWxfYXR0YWNoKGRldmljZV90IGRldikKIHsKICAgICBzdHJ1Y3QgYXRhX3Bj
aV9jb250cm9sbGVyICpjdGxyID0gZGV2aWNlX2dldF9zb2Z0YyhkZXZpY2VfZ2V0X3BhcmVudChk
ZXYpKTsKLSAgICBzdHJ1Y3QgYXRhX2NoYW5uZWwgKmNoID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYp
OwogICAgIGludCBlcnJvcjsKIAogICAgIGlmIChjdGxyLT5kbWFpbml0KQogCWN0bHItPmRtYWlu
aXQoZGV2KTsKLSAgICBpZiAoY2gtPmRtYSkKLQljaC0+ZG1hLT5hbGxvYyhkZXYpOwogCi0gICAg
aWYgKChlcnJvciA9IGN0bHItPmFsbG9jYXRlKGRldikpKSB7Ci0JaWYgKGNoLT5kbWEpCi0JICAg
IGNoLT5kbWEtPmZyZWUoZGV2KTsKKyAgICBpZiAoKGVycm9yID0gY3Rsci0+YWxsb2NhdGUoZGV2
KSkpCiAJcmV0dXJuIGVycm9yOwotICAgIH0KIAogICAgIHJldHVybiBhdGFfYXR0YWNoKGRldik7
CiB9CkBAIC02MjYsOCArNjU2LDcgQEAgYXRhX3BjaWNoYW5uZWxfZGV0YWNoKGRldmljZV90IGRl
dikKICAgICBpZiAoKGVycm9yID0gYXRhX2RldGFjaChkZXYpKSkKIAlyZXR1cm4gZXJyb3I7CiAK
LSAgICBpZiAoY2gtPmRtYSkKLQljaC0+ZG1hLT5mcmVlKGRldik7CisgICAgY2gtPmRtYS5mcmVl
KGRldik7CiAKICAgICAvKiBYWFggU09TIGZyZWUgcmVzb3VyY2VzIGZvciBpbyBhbmQgY3RsaW8g
Pz8gKi8KIApAQCAtNjUzLDExICs2ODIsOCBAQCBhdGFfcGNpY2hhbm5lbF9yZXNldChkZXZpY2Vf
dCBkZXYpCiAgICAgc3RydWN0IGF0YV9jaGFubmVsICpjaCA9IGRldmljZV9nZXRfc29mdGMoZGV2
KTsKIAogICAgIC8qIGlmIERNQSBlbmdpbmUgcHJlc2VudCByZXNldCBpdCAgKi8KLSAgICBpZiAo
Y2gtPmRtYSkgewotCWlmIChjaC0+ZG1hLT5yZXNldCkKLQkgICAgY2gtPmRtYS0+cmVzZXQoZGV2
KTsKLQljaC0+ZG1hLT51bmxvYWQoZGV2KTsKLSAgICB9CisgICAgaWYgKGNoLT5kbWEucmVzZXQp
CisJY2gtPmRtYS5yZXNldChkZXYpOwogCiAgICAgLyogcmVzZXQgdGhlIGNvbnRyb2xsZXIgSFcg
Ki8KICAgICBpZiAoY3Rsci0+cmVzZXQpCi0tLSBzcmMvc3lzL2Rldi9hdGEvYXRhLXBjaS5oCTIw
MDgtMDktMTMgMTE6MzY6MTYuMDAwMDAwMDAwICswNDAwCisrKyBzcmMvc3lzL2Rldi9hdGEvYXRh
LXBjaS5oCTIwMDgtMDktMjYgMTE6Mjk6NDguMDAwMDAwMDAwICswNDAwCkBAIC0xLDUgKzEsNSBA
QAogLyotCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMgLSAyMDA3IFP4cmVuIFNjaG1pZHQgPHNvc0BG
cmVlQlNELm9yZz4KKyAqIENvcHlyaWdodCAoYykgMjAwMyAtIDIwMDggU/hyZW4gU2NobWlkdCA8
c29zQEZyZWVCU0Qub3JnPgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKQEAgLTUwLDYgKzUwLDggQEAgc3RydWN0IGF0YV9wY2lfY29udHJvbGxlciB7CiAgICAgc3Ry
dWN0IGF0YV9jaGlwX2lkICAqY2hpcDsKICAgICBpbnQgICAgICAgICAgICAgICAgIGNoYW5uZWxz
OwogICAgIGludCAgICAgICAgICAgICAgICAgKCpjaGlwaW5pdCkoZGV2aWNlX3QpOworICAgIGlu
dCAgICAgICAgICAgICAgICAgKCpzdXNwZW5kKShkZXZpY2VfdCk7CisgICAgaW50ICAgICAgICAg
ICAgICAgICAoKnJlc3VtZSkoZGV2aWNlX3QpOwogICAgIGludCAgICAgICAgICAgICAgICAgKCph
bGxvY2F0ZSkoZGV2aWNlX3QpOwogICAgIGludCAgICAgICAgICAgICAgICAgKCpsb2NraW5nKShk
ZXZpY2VfdCwgaW50KTsKICAgICB2b2lkICAgICAgICAgICAgICAgICgqcmVzZXQpKGRldmljZV90
KTsKQEAgLTgwLDYgKzgyLDE0IEBAIHN0cnVjdCBhdGFfY29ubmVjdF90YXNrIHsKICNkZWZpbmUg
QVRBX0FUUDg2NUEgICAgICAgICAgICAgMHgwMDA4MTE5MQogI2RlZmluZSBBVEFfQVRQODY1UiAg
ICAgICAgICAgICAweDAwMDkxMTkxCiAKKyNkZWZpbmUgQVRBX0FDRVJfTEFCU19JRCAgICAgICAg
MHgxMGI5CisjZGVmaW5lIEFUQV9BTElfMTUzMyAgICAgICAgICAgIDB4MTUzMzEwYjkKKyNkZWZp
bmUgQVRBX0FMSV81MjI5ICAgICAgICAgICAgMHg1MjI5MTBiOQorI2RlZmluZSBBVEFfQUxJXzUy
ODEgICAgICAgICAgICAweDUyODExMGI5CisjZGVmaW5lIEFUQV9BTElfNTI4NyAgICAgICAgICAg
IDB4NTI4NzEwYjkKKyNkZWZpbmUgQVRBX0FMSV81Mjg4ICAgICAgICAgICAgMHg1Mjg4MTBiOQor
I2RlZmluZSBBVEFfQUxJXzUyODkgICAgICAgICAgICAweDUyODkxMGI5CisKICNkZWZpbmUgQVRB
X0FNRF9JRCAgICAgICAgICAgICAgMHgxMDIyCiAjZGVmaW5lIEFUQV9BTUQ3NTUgICAgICAgICAg
ICAgIDB4NzQwMTEwMjIKICNkZWZpbmUgQVRBX0FNRDc1NiAgICAgICAgICAgICAgMHg3NDA5MTAy
MgpAQCAtODgsMTMgKzk4LDggQEAgc3RydWN0IGF0YV9jb25uZWN0X3Rhc2sgewogI2RlZmluZSBB
VEFfQU1EODExMSAgICAgICAgICAgICAweDc0NjkxMDIyCiAjZGVmaW5lIEFUQV9BTUQ1NTM2ICAg
ICAgICAgICAgIDB4MjA5YTEwMjIKIAotI2RlZmluZSBBVEFfQUNFUl9MQUJTX0lEICAgICAgICAw
eDEwYjkKLSNkZWZpbmUgQVRBX0FMSV8xNTMzICAgICAgICAgICAgMHgxNTMzMTBiOQotI2RlZmlu
ZSBBVEFfQUxJXzUyMjkgICAgICAgICAgICAweDUyMjkxMGI5Ci0jZGVmaW5lIEFUQV9BTElfNTI4
MSAgICAgICAgICAgIDB4NTI4MTEwYjkKLSNkZWZpbmUgQVRBX0FMSV81Mjg3ICAgICAgICAgICAg
MHg1Mjg3MTBiOQotI2RlZmluZSBBVEFfQUxJXzUyODggICAgICAgICAgICAweDUyODgxMGI5Ci0j
ZGVmaW5lIEFUQV9BTElfNTI4OSAgICAgICAgICAgIDB4NTI4OTEwYjkKKyNkZWZpbmUgQVRBX0FE
QVBURUNfSUQgICAgICAgICAgMHg5MDA1CisjZGVmaW5lIEFUQV9BREFQVEVDXzE0MjAgICAgICAg
IDB4MDI0MTkwMDUKIAogI2RlZmluZSBBVEFfQVRJX0lEICAgICAgICAgICAgICAweDEwMDIKICNk
ZWZpbmUgQVRBX0FUSV9JWFAyMDAgICAgICAgICAgMHg0MzQ5MTAwMgpAQCAtMTg1LDYgKzE5MCw3
IEBAIHN0cnVjdCBhdGFfY29ubmVjdF90YXNrIHsKICNkZWZpbmUgQVRBX0lURV9JRCAgICAgICAg
ICAgICAgMHgxMjgzCiAjZGVmaW5lIEFUQV9JVDgyMTFGICAgICAgICAgICAgIDB4ODIxMTEyODMK
ICNkZWZpbmUgQVRBX0lUODIxMkYgICAgICAgICAgICAgMHg4MjEyMTI4MworI2RlZmluZSBBVEFf
SVQ4MjEzRiAgICAgICAgICAgICAweDgyMTMxMjgzCiAKICNkZWZpbmUgQVRBX0pNSUNST05fSUQg
ICAgICAgICAgMHgxOTdiCiAjZGVmaW5lIEFUQV9KTUIzNjAgICAgICAgICAgICAgIDB4MjM2MDE5
N2IKQEAgLTQ1OCwxMyArNDY0LDE1IEBAIHN0cnVjdCBhdGFfY29ubmVjdF90YXNrIHsKIGludCBh
dGFfcGNpX3Byb2JlKGRldmljZV90IGRldik7CiBpbnQgYXRhX3BjaV9hdHRhY2goZGV2aWNlX3Qg
ZGV2KTsKIGludCBhdGFfcGNpX2RldGFjaChkZXZpY2VfdCBkZXYpOworaW50IGF0YV9wY2lfc3Vz
cGVuZChkZXZpY2VfdCBkZXYpOworaW50IGF0YV9wY2lfcmVzdW1lKGRldmljZV90IGRldik7CiBz
dHJ1Y3QgcmVzb3VyY2UgKiBhdGFfcGNpX2FsbG9jX3Jlc291cmNlKGRldmljZV90IGRldiwgZGV2
aWNlX3QgY2hpbGQsIGludCB0eXBlLCBpbnQgKnJpZCwgdV9sb25nIHN0YXJ0LCB1X2xvbmcgZW5k
LCB1X2xvbmcgY291bnQsIHVfaW50IGZsYWdzKTsKIGludCBhdGFfcGNpX3JlbGVhc2VfcmVzb3Vy
Y2UoZGV2aWNlX3QgZGV2LCBkZXZpY2VfdCBjaGlsZCwgaW50IHR5cGUsIGludCByaWQsIHN0cnVj
dCByZXNvdXJjZSAqcik7CiBpbnQgYXRhX3BjaV9zZXR1cF9pbnRyKGRldmljZV90IGRldiwgZGV2
aWNlX3QgY2hpbGQsIHN0cnVjdCByZXNvdXJjZSAqaXJxLCBpbnQgZmxhZ3MsIGRyaXZlcl9maWx0
ZXJfdCAqZmlsdGVyLCBkcml2ZXJfaW50cl90ICpmdW5jdGlvbiwgdm9pZCAqYXJndW1lbnQsIHZv
aWQgKipjb29raWVwKTsKICBpbnQgYXRhX3BjaV90ZWFyZG93bl9pbnRyKGRldmljZV90IGRldiwg
ZGV2aWNlX3QgY2hpbGQsIHN0cnVjdCByZXNvdXJjZSAqaXJxLCB2b2lkICpjb29raWUpOwogaW50
IGF0YV9wY2lfYWxsb2NhdGUoZGV2aWNlX3QgZGV2KTsKLXZvaWQgYXRhX3BjaV9odyhkZXZpY2Vf
dCBkZXYpOwogaW50IGF0YV9wY2lfc3RhdHVzKGRldmljZV90IGRldik7Cit2b2lkIGF0YV9wY2lf
aHcoZGV2aWNlX3QgZGV2KTsKIHZvaWQgYXRhX3BjaV9kbWFpbml0KGRldmljZV90IGRldik7CiBj
aGFyICphdGFfcGNpdmVuZG9yMnN0cihkZXZpY2VfdCBkZXYpOwogCkBAIC00NzUsNiArNDgzLDcg
QEAgaW50IGF0YV9haGNpX2lkZW50KGRldmljZV90KTsKIGludCBhdGFfYWNhcmRfaWRlbnQoZGV2
aWNlX3QpOwogaW50IGF0YV9hbGlfaWRlbnQoZGV2aWNlX3QpOwogaW50IGF0YV9hbWRfaWRlbnQo
ZGV2aWNlX3QpOworaW50IGF0YV9hZGFwdGVjX2lkZW50KGRldmljZV90KTsKIGludCBhdGFfYXRp
X2lkZW50KGRldmljZV90KTsKIGludCBhdGFfY3lyaXhfaWRlbnQoZGV2aWNlX3QpOwogaW50IGF0
YV9jeXByZXNzX2lkZW50KGRldmljZV90KTsKLS0tIHNyYy9zeXMvZGV2L2F0YS9hdGEtcXVldWUu
YwkyMDA3LTAzLTEzIDIzOjMxOjU2LjAwMDAwMDAwMCArMDMwMAorKysgc3JjL3N5cy9kZXYvYXRh
L2F0YS1xdWV1ZS5jCTIwMDgtMDQtMjEgMTQ6MzU6MTkuMDAwMDAwMDAwICswNDAwCkBAIC0xLDUg
KzEsNSBAQAogLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTggLSAyMDA3IFP4cmVuIFNjaG1pZHQg
PHNvc0BGcmVlQlNELm9yZz4KKyAqIENvcHlyaWdodCAoYykgMTk5OCAtIDIwMDggU/hyZW4gU2No
bWlkdCA8c29zQEZyZWVCU0Qub3JnPgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKQEAgLTU2LDcgKzU2LDcgQEAgYXRhX3F1ZXVlX3JlcXVlc3Qoc3RydWN0IGF0YV9y
ZXF1ZXN0ICpyZQogICAgIC8qIHRyZWF0IHJlcXVlc3QgYXMgdmlyZ2luICh0aGlzIG1pZ2h0IGJl
IGFuIEFUQV9SX1JFUVVFVUUpICovCiAgICAgcmVxdWVzdC0+cmVzdWx0ID0gcmVxdWVzdC0+c3Rh
dHVzID0gcmVxdWVzdC0+ZXJyb3IgPSAwOwogCi0gICAgLyogY2hlY2sgdGhhdCB0aGF0IHRoZSBk
ZXZpY2UgaXMgc3RpbGwgdmFsaWQgKi8KKyAgICAvKiBjaGVjayB0aGF0IHRoZSBkZXZpY2UgaXMg
c3RpbGwgdmFsaWQgKi8KICAgICBpZiAoIShyZXF1ZXN0LT5wYXJlbnQgPSBkZXZpY2VfZ2V0X3Bh
cmVudChyZXF1ZXN0LT5kZXYpKSkgewogCXJlcXVlc3QtPnJlc3VsdCA9IEVOWElPOwogCWlmIChy
ZXF1ZXN0LT5jYWxsYmFjaykKQEAgLTM1OCw4ICszNTgsOCBAQCBhdGFfY29tcGxldGVkKHZvaWQg
KmNvbnRleHQsIGludCBkdW1teSkKIAkJCSAgICAgICJcNE1FRElBX0NIQU5HRV9SRVFFU1QiCiAJ
CQkgICAgICAiXDNBQk9SVEVEXDJOT19NRURJQVwxSUxMRUdBTF9MRU5HVEgiKTsKIAkJaWYgKChy
ZXF1ZXN0LT5mbGFncyAmIEFUQV9SX0RNQSkgJiYKLQkJICAgIChyZXF1ZXN0LT5kbWFzdGF0ICYg
QVRBX0JNU1RBVF9FUlJPUikpCi0JCSAgICBwcmludGYoIiBkbWE9MHglMDJ4IiwgcmVxdWVzdC0+
ZG1hc3RhdCk7CisJCSAgICAocmVxdWVzdC0+ZG1hLT5zdGF0dXMgJiBBVEFfQk1TVEFUX0VSUk9S
KSkKKwkJICAgIHByaW50ZigiIGRtYT0weCUwMngiLCByZXF1ZXN0LT5kbWEtPnN0YXR1cyk7CiAJ
CWlmICghKHJlcXVlc3QtPmZsYWdzICYgKEFUQV9SX0FUQVBJIHwgQVRBX1JfQ09OVFJPTCkpKQog
CQkgICAgcHJpbnRmKCIgTEJBPSVqdSIsIHJlcXVlc3QtPnUuYXRhLmxiYSk7CiAJCXByaW50Zigi
XG4iKTsKQEAgLTUwMyw2ICs1MDMsNyBAQCBhdGFfdGltZW91dChzdHJ1Y3QgYXRhX3JlcXVlc3Qg
KnJlcXVlc3QpCiAJcmVxdWVzdC0+ZmxhZ3MgfD0gQVRBX1JfVElNRU9VVDsKIAltdHhfdW5sb2Nr
KCZjaC0+c3RhdGVfbXR4KTsKIAlBVEFfTE9DS0lORyhjaC0+ZGV2LCBBVEFfTEZfVU5MT0NLKTsK
KwljaC0+ZG1hLnVubG9hZChyZXF1ZXN0KTsKIAlhdGFfZmluaXNoKHJlcXVlc3QpOwogICAgIH0K
ICAgICBlbHNlIHsKQEAgLTY5NCwxMSArNjk1LDEzIEBAIGF0YV9jbWQyc3RyKHN0cnVjdCBhdGFf
cmVxdWVzdCAqcmVxdWVzdCkKIAljYXNlIDB4MjQ6IHJldHVybiAoIlJFQUQ0OCIpOwogCWNhc2Ug
MHgyNTogcmV0dXJuICgiUkVBRF9ETUE0OCIpOwogCWNhc2UgMHgyNjogcmV0dXJuICgiUkVBRF9E
TUFfUVVFVUVENDgiKTsKKwljYXNlIDB4Mjc6IHJldHVybiAoIlJFQURfTkFUSVZFX01BWF9BRERS
RVNTNDgiKTsKIAljYXNlIDB4Mjk6IHJldHVybiAoIlJFQURfTVVMNDgiKTsKIAljYXNlIDB4MzA6
IHJldHVybiAoIldSSVRFIik7CiAJY2FzZSAweDM0OiByZXR1cm4gKCJXUklURTQ4Iik7CiAJY2Fz
ZSAweDM1OiByZXR1cm4gKCJXUklURV9ETUE0OCIpOwogCWNhc2UgMHgzNjogcmV0dXJuICgiV1JJ
VEVfRE1BX1FVRVVFRDQ4Iik7CisJY2FzZSAweDM3OiByZXR1cm4gKCJTRVRfTUFYX0FERFJFU1M0
OCIpOwogCWNhc2UgMHgzOTogcmV0dXJuICgiV1JJVEVfTVVMNDgiKTsKIAljYXNlIDB4NzA6IHJl
dHVybiAoIlNFRUsiKTsKIAljYXNlIDB4YTA6IHJldHVybiAoIlBBQ0tFVF9DTUQiKTsKQEAgLTcy
Nyw2ICs3MzAsOSBAQCBhdGFfY21kMnN0cihzdHJ1Y3QgYXRhX3JlcXVlc3QgKnJlcXVlc3QpCiAJ
ICAgIH0KIAkgICAgc3ByaW50ZihidWZmZXIsICJTRVRGRUFUVVJFUyAweCUwMngiLCByZXF1ZXN0
LT51LmF0YS5mZWF0dXJlKTsKIAkgICAgcmV0dXJuIGJ1ZmZlcjsKKwljYXNlIDB4ZjU6IHJldHVy
biAoIlNFQ1VSSVRZX0ZSRUVfTE9DSyIpOworCWNhc2UgMHhmODogcmV0dXJuICgiUkVBRF9OQVRJ
VkVfTUFYX0FERFJFU1MiKTsKKwljYXNlIDB4Zjk6IHJldHVybiAoIlNFVF9NQVhfQUREUkVTUyIp
OwogCX0KICAgICB9CiAgICAgc3ByaW50ZihidWZmZXIsICJ1bmtub3duIENNRCAoMHglMDJ4KSIs
IHJlcXVlc3QtPnUuYXRhLmNvbW1hbmQpOwotLS0gc3JjL3N5cy9kZXYvYXRhL2F0YS1yYWlkLmMJ
MjAwNy0wOC0xMyAyMjo0NjozMS4wMDAwMDAwMDAgKzA0MDAKKysrIHNyYy9zeXMvZGV2L2F0YS9h
dGEtcmFpZC5jCTIwMDgtMDQtMTcgMTY6Mjk6MzUuMDAwMDAwMDAwICswNDAwCkBAIC0xLDUgKzEs
NSBAQAogLyotCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAgLSAyMDA3IFP4cmVuIFNjaG1pZHQgPHNv
c0BGcmVlQlNELm9yZz4KKyAqIENvcHlyaWdodCAoYykgMjAwMCAtIDIwMDggU/hyZW4gU2NobWlk
dCA8c29zQEZyZWVCU0Qub3JnPgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKQEAgLTgzLDcgKzgzLDcgQEAgc3RhdGljIGludCBhdGFfcmFpZF9zaXNfcmVhZF9tZXRh
KGRldmljZQogc3RhdGljIGludCBhdGFfcmFpZF9zaXNfd3JpdGVfbWV0YShzdHJ1Y3QgYXJfc29m
dGMgKnJkcCk7CiBzdGF0aWMgaW50IGF0YV9yYWlkX3ZpYV9yZWFkX21ldGEoZGV2aWNlX3QgZGV2
LCBzdHJ1Y3QgYXJfc29mdGMgKipyYWlkcCk7CiBzdGF0aWMgaW50IGF0YV9yYWlkX3ZpYV93cml0
ZV9tZXRhKHN0cnVjdCBhcl9zb2Z0YyAqcmRwKTsKLXN0YXRpYyBzdHJ1Y3QgYXRhX3JlcXVlc3Qg
KmF0YV9yYWlkX2luaXRfcmVxdWVzdChzdHJ1Y3QgYXJfc29mdGMgKnJkcCwgc3RydWN0IGJpbyAq
YmlvKTsKK3N0YXRpYyBzdHJ1Y3QgYXRhX3JlcXVlc3QgKmF0YV9yYWlkX2luaXRfcmVxdWVzdChk
ZXZpY2VfdCBkZXYsIHN0cnVjdCBhcl9zb2Z0YyAqcmRwLCBzdHJ1Y3QgYmlvICpiaW8pOwogc3Rh
dGljIGludCBhdGFfcmFpZF9zZW5kX3JlcXVlc3Qoc3RydWN0IGF0YV9yZXF1ZXN0ICpyZXF1ZXN0
KTsKIHN0YXRpYyBpbnQgYXRhX3JhaWRfcncoZGV2aWNlX3QgZGV2LCB1X2ludDY0X3QgbGJhLCB2
b2lkICpkYXRhLCB1X2ludCBiY291bnQsIGludCBmbGFncyk7CiBzdGF0aWMgY2hhciAqIGF0YV9y
YWlkX2Zvcm1hdChzdHJ1Y3QgYXJfc29mdGMgKnJkcCk7CkBAIC0yNjMsNyArMjYzLDcgQEAgYXRh
X3JhaWRfZmx1c2goc3RydWN0IGJpbyAqYnApCiAgICAgZm9yIChkaXNrID0gMDsgZGlzayA8IHJk
cC0+dG90YWxfZGlza3M7IGRpc2srKykgewogCWlmICgoZGV2ID0gcmRwLT5kaXNrc1tkaXNrXS5k
ZXYpID09IE5VTEwpCiAJICAgIGNvbnRpbnVlOwotCWlmICghKHJlcXVlc3QgPSBhdGFfcmFpZF9p
bml0X3JlcXVlc3QocmRwLCBicCkpKQorCWlmICghKHJlcXVlc3QgPSBhdGFfcmFpZF9pbml0X3Jl
cXVlc3QoZGV2LCByZHAsIGJwKSkpCiAJICAgIHJldHVybiBFTk9NRU07CiAJcmVxdWVzdC0+ZGV2
ID0gZGV2OwogCXJlcXVlc3QtPnUuYXRhLmNvbW1hbmQgPSBBVEFfRkxVU0hDQUNIRTsKQEAgLTM1
Myw3ICszNTMsNyBAQCBhdGFfcmFpZF9zdHJhdGVneShzdHJ1Y3QgYmlvICpicCkKIAlpZiAoIShk
cnYgPT0gMCAmJiByZHAtPmZvcm1hdCA9PSBBUl9GX0hQVFYyX1JBSUQpKQogCSAgICBsYmEgKz0g
cmRwLT5vZmZzZXRfc2VjdG9yczsKIAotCWlmICghKHJlcXVlc3QgPSBhdGFfcmFpZF9pbml0X3Jl
cXVlc3QocmRwLCBicCkpKSB7CisJaWYgKCEocmVxdWVzdCA9IGF0YV9yYWlkX2luaXRfcmVxdWVz
dChyZHAtPmRpc2tzW2Rydl0uZGV2LCByZHAsIGJwKSkpIHsKIAkgICAgYmlvZmluaXNoKGJwLCBO
VUxMLCBFSU8pOwogCSAgICByZXR1cm47CiAJfQpAQCAtMzc1LDcgKzM3NSw3IEBAIGF0YV9yYWlk
X3N0cmF0ZWd5KHN0cnVjdCBiaW8gKmJwKQogCQlyZXR1cm47CiAJICAgIH0KIAkgICAgcmVxdWVz
dC0+dGhpcyA9IGRydjsKLQkgICAgcmVxdWVzdC0+ZGV2ID0gcmRwLT5kaXNrc1tyZXF1ZXN0LT50
aGlzXS5kZXY7CisJICAgIHJlcXVlc3QtPmRldiA9IHJkcC0+ZGlza3NbZHJ2XS5kZXY7CiAJICAg
IGF0YV9yYWlkX3NlbmRfcmVxdWVzdChyZXF1ZXN0KTsKIAkgICAgYnJlYWs7CiAKQEAgLTQ1Nywx
MiArNDU3LDE0IEBAIGF0YV9yYWlkX3N0cmF0ZWd5KHN0cnVjdCBiaW8gKmJwKQogCQkgICAgLyog
ZG8gd2UgaGF2ZSBhIHNwYXJlIHRvIHJlYnVpbGQgb24gPyAqLwogCQkgICAgaWYgKHJkcC0+ZGlz
a3NbdGhpc10uZmxhZ3MgJiBBUl9ERl9TUEFSRSkgewogCQkJaWYgKChjb21wb3NpdGUgPSBhdGFf
YWxsb2NfY29tcG9zaXRlKCkpKSB7Ci0JCQkgICAgaWYgKChyZWJ1aWxkID0gYXRhX2FsbG9jX3Jl
cXVlc3QoKSkpIHsKKwkJCSAgICBpZiAoKHJlYnVpbGQgPSBhdGFfcmFpZF9pbml0X3JlcXVlc3Qo
CisJCQkJICAgIAkgICByZHAtPmRpc2tzW3RoaXNdLmRldiwgcmRwLCBicCkpKSB7CiAJCQkJcmRw
LT5yZWJ1aWxkX2xiYSA9IGJsayArIGNodW5rOwotCQkJCWJjb3B5KHJlcXVlc3QsIHJlYnVpbGQs
Ci0JCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBhdGFfcmVxdWVzdCkpOworCQkJCXJlYnVpbGQtPmRh
dGEgPSByZXF1ZXN0LT5kYXRhOworCQkJCXJlYnVpbGQtPmJ5dGVjb3VudCA9IHJlcXVlc3QtPmJ5
dGVjb3VudDsKKwkJCQlyZWJ1aWxkLT51LmF0YS5sYmEgPSByZXF1ZXN0LT51LmF0YS5sYmE7CisJ
CQkJcmVidWlsZC0+dS5hdGEuY291bnQgPSByZXF1ZXN0LT51LmF0YS5jb3VudDsKIAkJCQlyZWJ1
aWxkLT50aGlzID0gdGhpczsKLQkJCQlyZWJ1aWxkLT5kZXYgPSByZHAtPmRpc2tzW3RoaXNdLmRl
djsKIAkJCQlyZWJ1aWxkLT5mbGFncyAmPSB+QVRBX1JfUkVBRDsKIAkJCQlyZWJ1aWxkLT5mbGFn
cyB8PSBBVEFfUl9XUklURTsKIAkJCQltdHhfaW5pdCgmY29tcG9zaXRlLT5sb2NrLApAQCAtNTE4
LDE0ICs1MjAsMTYgQEAgYXRhX3JhaWRfc3RyYXRlZ3koc3RydWN0IGJpbyAqYnApCiAJCQlpbnQg
dGhpcyA9IGRydiArIHJkcC0+d2lkdGg7CiAKIAkJCWlmICgoY29tcG9zaXRlID0gYXRhX2FsbG9j
X2NvbXBvc2l0ZSgpKSkgewotCQkJICAgIGlmICgobWlycm9yID0gYXRhX2FsbG9jX3JlcXVlc3Qo
KSkpIHsKKwkJCSAgICBpZiAoKG1pcnJvciA9IGF0YV9yYWlkX2luaXRfcmVxdWVzdCgKKwkJCQkg
ICAgCSAgcmRwLT5kaXNrc1t0aGlzXS5kZXYsIHJkcCwgYnApKSkgewogCQkJCWlmICgoYmxrIDw9
IHJkcC0+cmVidWlsZF9sYmEpICYmCiAJCQkJICAgICgoYmxrICsgY2h1bmspID4gcmRwLT5yZWJ1
aWxkX2xiYSkpCiAJCQkJICAgIHJkcC0+cmVidWlsZF9sYmEgPSBibGsgKyBjaHVuazsKLQkJCQli
Y29weShyZXF1ZXN0LCBtaXJyb3IsCi0JCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBhdGFfcmVxdWVz
dCkpOworCQkJCW1pcnJvci0+ZGF0YSA9IHJlcXVlc3QtPmRhdGE7CisJCQkJbWlycm9yLT5ieXRl
Y291bnQgPSByZXF1ZXN0LT5ieXRlY291bnQ7CisJCQkJbWlycm9yLT51LmF0YS5sYmEgPSByZXF1
ZXN0LT51LmF0YS5sYmE7CisJCQkJbWlycm9yLT51LmF0YS5jb3VudCA9IHJlcXVlc3QtPnUuYXRh
LmNvdW50OwogCQkJCW1pcnJvci0+dGhpcyA9IHRoaXM7Ci0JCQkJbWlycm9yLT5kZXYgPSByZHAt
PmRpc2tzW3RoaXNdLmRldjsKIAkJCQltdHhfaW5pdCgmY29tcG9zaXRlLT5sb2NrLAogCQkJCQkg
IkFUQSBQc2V1ZG9SQUlEIG1pcnJvciBsb2NrIiwKIAkJCQkJIE5VTEwsIE1UWF9ERUYpOwpAQCAt
ODU2LDYgKzg2MCw3IEBAIGF0YV9yYWlkX2NvbmZpZ19jaGFuZ2VkKHN0cnVjdCBhcl9zb2Z0YyAK
ICAgICBpbnQgZGlzaywgY291bnQsIHN0YXR1czsKIAogICAgIG10eF9sb2NrKCZyZHAtPmxvY2sp
OworCiAgICAgLyogc2V0IGRlZmF1bHQgYWxsIHdvcmtpbmcgbW9kZSAqLwogICAgIHN0YXR1cyA9
IHJkcC0+c3RhdHVzOwogICAgIHJkcC0+c3RhdHVzICY9IH5BUl9TX0RFR1JBREVEOwpAQCAtOTEw
LDYgKzkxNSwxMSBAQCBhdGFfcmFpZF9jb25maWdfY2hhbmdlZChzdHJ1Y3QgYXJfc29mdGMgCiAg
ICAgfQogCiAgICAgaWYgKHJkcC0+c3RhdHVzICE9IHN0YXR1cykgeworCQorCS8qIHJhaWQgc3Rh
dHVzIGhhcyBjaGFuZ2VkLCB1cGRhdGUgbWV0YWRhdGEgKi8KKwl3cml0ZWJhY2sgPSAxOworCisJ
LyogYW5ub3VuY2Ugd2UgaGF2ZSB0cm91YmxlIGFoZWFkICovCiAJaWYgKCEocmRwLT5zdGF0dXMg
JiBBUl9TX1JFQURZKSkgewogCSAgICBwcmludGYoImFyJWQ6IEZBSUxVUkUgLSAlcyBhcnJheSBi
cm9rZW5cbiIsCiAJCSAgIHJkcC0+bHVuLCBhdGFfcmFpZF90eXBlKHJkcCkpOwpAQCAtMTY1OSw5
ICsxNjY5LDggQEAgYXRhX3JhaWRfYWRhcHRlY19yZWFkX21ldGEoZGV2aWNlX3QgZGV2LAogCWlm
IChiZTMydG9oKG1ldGEtPmdlbmVyYXRpb24pID49IHJhaWQtPmdlbmVyYXRpb24pIHsKIAkgICAg
c3RydWN0IGF0YV9kZXZpY2UgKmF0YWRldiA9IGRldmljZV9nZXRfc29mdGMocGFyZW50KTsKIAkg
ICAgc3RydWN0IGF0YV9jaGFubmVsICpjaCA9IGRldmljZV9nZXRfc29mdGMoR1JBTkRQQVJFTlQo
ZGV2KSk7Ci0JICAgIGludCBkaXNrX251bWJlciA9IChjaC0+dW5pdCA8PCAhKGNoLT5mbGFncyAm
IEFUQV9OT19TTEFWRSkpICsKLQkJCSAgICAgIEFUQV9ERVYoYXRhZGV2LT51bml0KTsKLQorCSAg
ICBpbnQgZGlza19udW1iZXIgPQorCQkoY2gtPnVuaXQgPDwgIShjaC0+ZmxhZ3MgJiBBVEFfTk9f
U0xBVkUpKSArIGF0YWRldi0+dW5pdDsKIAkgICAgcmFpZC0+ZGlza3NbZGlza19udW1iZXJdLmRl
diA9IHBhcmVudDsKIAkgICAgcmFpZC0+ZGlza3NbZGlza19udW1iZXJdLnNlY3RvcnMgPSAKIAkJ
YmUzMnRvaChtZXRhLT5jb25maWdzW2Rpc2tfbnVtYmVyICsgMV0uc2VjdG9ycyk7CkBAIC0yMjcy
LDExICsyMjgxLDE0IEBAIGF0YV9yYWlkX2ludGVsX3dyaXRlX21ldGEoc3RydWN0IGFyX3NvZnQK
ICAgICB9CiAKICAgICByZHAtPmdlbmVyYXRpb24rKzsKLSAgICBtaWNyb3RpbWUoJnRpbWVzdGFt
cCk7CisgICAgaWYgKCFyZHAtPm1hZ2ljXzApIHsKKwltaWNyb3RpbWUoJnRpbWVzdGFtcCk7CisJ
cmRwLT5tYWdpY18wID0gdGltZXN0YW1wLnR2X3NlYyBeIHRpbWVzdGFtcC50dl91c2VjOworICAg
IH0KIAogICAgIGJjb3B5KElOVEVMX01BR0lDLCBtZXRhLT5pbnRlbF9pZCwgc2l6ZW9mKG1ldGEt
PmludGVsX2lkKSk7CiAgICAgYmNvcHkoSU5URUxfVkVSU0lPTl8xMTAwLCBtZXRhLT52ZXJzaW9u
LCBzaXplb2YobWV0YS0+dmVyc2lvbikpOwotICAgIG1ldGEtPmNvbmZpZ19pZCA9IHRpbWVzdGFt
cC50dl9zZWM7CisgICAgbWV0YS0+Y29uZmlnX2lkID0gcmRwLT5tYWdpY18wOwogICAgIG1ldGEt
PmdlbmVyYXRpb24gPSByZHAtPmdlbmVyYXRpb247CiAgICAgbWV0YS0+dG90YWxfZGlza3MgPSBy
ZHAtPnRvdGFsX2Rpc2tzOwogICAgIG1ldGEtPnRvdGFsX3ZvbHVtZXMgPSAxOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFhYWCBTT1MgKi8KQEAgLTIyOTAsNyArMjMwMiw3
IEBAIGF0YV9yYWlkX2ludGVsX3dyaXRlX21ldGEoc3RydWN0IGFyX3NvZnQKIAkgICAgYmNvcHko
YXRhZGV2LT5wYXJhbS5zZXJpYWwsIG1ldGEtPmRpc2tbZGlza10uc2VyaWFsLAogCQkgIHNpemVv
ZihyZHAtPmRpc2tzW2Rpc2tdLnNlcmlhbCkpOwogCSAgICBtZXRhLT5kaXNrW2Rpc2tdLnNlY3Rv
cnMgPSByZHAtPmRpc2tzW2Rpc2tdLnNlY3RvcnM7Ci0JICAgIG1ldGEtPmRpc2tbZGlza10uaWQg
PSAoY2gtPnVuaXQgPDwgMTYpIHwgQVRBX0RFVihhdGFkZXYtPnVuaXQpOworCSAgICBtZXRhLT5k
aXNrW2Rpc2tdLmlkID0gKGNoLT51bml0IDw8IDE2KSB8IGF0YWRldi0+dW5pdDsKIAl9CiAJZWxz
ZQogCSAgICBtZXRhLT5kaXNrW2Rpc2tdLnNlY3RvcnMgPSByZHAtPnRvdGFsX3NlY3RvcnMgLyBy
ZHAtPndpZHRoOwpAQCAtMzMxNSw3ICszMzI3LDcgQEAgYXRhX3JhaWRfcHJvbWlzZV93cml0ZV9t
ZXRhKHN0cnVjdCBhcl9zbwogCQlkZXZpY2VfZ2V0X3NvZnRjKGRldmljZV9nZXRfcGFyZW50KHJk
cC0+ZGlza3NbZGlza10uZGV2KSk7CiAKIAkgICAgbWV0YS0+cmFpZC5jaGFubmVsID0gY2gtPnVu
aXQ7Ci0JICAgIG1ldGEtPnJhaWQuZGV2aWNlID0gQVRBX0RFVihhdGFkZXYtPnVuaXQpOworCSAg
ICBtZXRhLT5yYWlkLmRldmljZSA9IGF0YWRldi0+dW5pdDsKIAkgICAgbWV0YS0+cmFpZC5kaXNr
X3NlY3RvcnMgPSByZHAtPmRpc2tzW2Rpc2tdLnNlY3RvcnM7CiAJICAgIG1ldGEtPnJhaWQuZGlz
a19vZmZzZXQgPSByZHAtPm9mZnNldF9zZWN0b3JzOwogCX0KQEAgLTM0MDMsNyArMzQxNSw3IEBA
IGF0YV9yYWlkX3Byb21pc2Vfd3JpdGVfbWV0YShzdHJ1Y3QgYXJfc28KIAkJICAgIGRldmljZV9n
ZXRfc29mdGMocmRwLT5kaXNrc1tkcml2ZV0uZGV2KTsKIAogCQltZXRhLT5yYWlkLmRpc2tbZHJp
dmVdLmNoYW5uZWwgPSBjaC0+dW5pdDsKLQkJbWV0YS0+cmFpZC5kaXNrW2RyaXZlXS5kZXZpY2Ug
PSBBVEFfREVWKGF0YWRldi0+dW5pdCk7CisJCW1ldGEtPnJhaWQuZGlza1tkcml2ZV0uZGV2aWNl
ID0gYXRhZGV2LT51bml0OwogCSAgICB9CiAJICAgIG1ldGEtPnJhaWQuZGlza1tkcml2ZV0ubWFn
aWNfMCA9CiAJCVBSX01BR0lDMChtZXRhLT5yYWlkLmRpc2tbZHJpdmVdKSB8IHRpbWVzdGFtcC50
dl9zZWM7CkBAIC0zNzI5LDcgKzM3NDEsNyBAQCBhdGFfcmFpZF9zaXNfd3JpdGVfbWV0YShzdHJ1
Y3QgYXJfc29mdGMgCiAJICAgIHN0cnVjdCBhdGFfY2hhbm5lbCAqY2ggPSAKIAkJZGV2aWNlX2dl
dF9zb2Z0YyhkZXZpY2VfZ2V0X3BhcmVudChyZHAtPmRpc2tzW2Rpc2tdLmRldikpOwogCSAgICBz
dHJ1Y3QgYXRhX2RldmljZSAqYXRhZGV2ID0gZGV2aWNlX2dldF9zb2Z0YyhyZHAtPmRpc2tzW2Rp
c2tdLmRldik7Ci0JICAgIGludCBkaXNrX251bWJlciA9IDEgKyBBVEFfREVWKGF0YWRldi0+dW5p
dCkgKyAoY2gtPnVuaXQgPDwgMSk7CisJICAgIGludCBkaXNrX251bWJlciA9IDEgKyBhdGFkZXYt
PnVuaXQgKyAoY2gtPnVuaXQgPDwgMSk7CiAKIAkgICAgbWV0YS0+ZGlza3MgfD0gZGlza19udW1i
ZXIgPDwgKCgxIC0gZGlzaykgPDwgMik7CiAJfQpAQCAtMzc2Nyw3ICszNzc5LDcgQEAgYXRhX3Jh
aWRfc2lzX3dyaXRlX21ldGEoc3RydWN0IGFyX3NvZnRjIAogCSAgICBiY29weShhdGFkZXYtPnBh
cmFtLm1vZGVsLCBtZXRhLT5tb2RlbCwgc2l6ZW9mKG1ldGEtPm1vZGVsKSk7CiAKIAkgICAgLyog
WFhYIFNPUyBpZiB0b3RhbF9kaXNrcyA+IDIgdGhpcyBtYXkgbm90IGZsb2F0ICovCi0JICAgIG1l
dGEtPmRpc2tfbnVtYmVyID0gMSArIEFUQV9ERVYoYXRhZGV2LT51bml0KSArIChjaC0+dW5pdCA8
PCAxKTsKKwkgICAgbWV0YS0+ZGlza19udW1iZXIgPSAxICsgYXRhZGV2LT51bml0ICsgKGNoLT51
bml0IDw8IDEpOwogCiAJICAgIGlmICh0ZXN0aW5nIHx8IGJvb3R2ZXJib3NlKQogCQlhdGFfcmFp
ZF9zaXNfcHJpbnRfbWV0YShtZXRhKTsKQEAgLTQwMTEsNyArNDAyMyw3IEBAIGF0YV9yYWlkX3Zp
YV93cml0ZV9tZXRhKHN0cnVjdCBhcl9zb2Z0YyAKIH0KIAogc3RhdGljIHN0cnVjdCBhdGFfcmVx
dWVzdCAqCi1hdGFfcmFpZF9pbml0X3JlcXVlc3Qoc3RydWN0IGFyX3NvZnRjICpyZHAsIHN0cnVj
dCBiaW8gKmJpbykKK2F0YV9yYWlkX2luaXRfcmVxdWVzdChkZXZpY2VfdCBkZXYsIHN0cnVjdCBh
cl9zb2Z0YyAqcmRwLCBzdHJ1Y3QgYmlvICpiaW8pCiB7CiAgICAgc3RydWN0IGF0YV9yZXF1ZXN0
ICpyZXF1ZXN0OwogCkBAIC00MDE5LDYgKzQwMzEsNyBAQCBhdGFfcmFpZF9pbml0X3JlcXVlc3Qo
c3RydWN0IGFyX3NvZnRjICpyCiAJcHJpbnRmKCJGQUlMVVJFIC0gb3V0IG9mIG1lbW9yeSBpbiBh
dGFfcmFpZF9pbml0X3JlcXVlc3RcbiIpOwogCXJldHVybiBOVUxMOwogICAgIH0KKyAgICByZXF1
ZXN0LT5kZXYgPSBkZXY7CiAgICAgcmVxdWVzdC0+dGltZW91dCA9IDU7CiAgICAgcmVxdWVzdC0+
cmV0cmllcyA9IDI7CiAgICAgcmVxdWVzdC0+Y2FsbGJhY2sgPSBhdGFfcmFpZF9kb25lOwotLS0g
c3JjL3N5cy9kZXYvYXRhL2F0YS1yYWlkLmgJMjAwNy0wMi0yMSAyMjowNzoxOC4wMDAwMDAwMDAg
KzAzMDAKKysrIHNyYy9zeXMvZGV2L2F0YS9hdGEtcmFpZC5oCTIwMDgtMDQtMTAgMTc6MDU6MDUu
MDAwMDAwMDAwICswNDAwCkBAIC0xLDUgKzEsNSBAQAogLyotCi0gKiBDb3B5cmlnaHQgKGMpIDIw
MDAgLSAyMDA3IFP4cmVuIFNjaG1pZHQgPHNvc0BGcmVlQlNELm9yZz4KKyAqIENvcHlyaWdodCAo
YykgMjAwMCAtIDIwMDggU/hyZW4gU2NobWlkdCA8c29zQEZyZWVCU0Qub3JnPgogICogQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS0tIHNyYy9zeXMvZGV2L2F0YS9hdGEt
dXNiLmMJMjAwNy0wNi0yNCAwMTo1MjowNS4wMDAwMDAwMDAgKzA0MDAKKysrIHNyYy9zeXMvZGV2
L2F0YS9hdGEtdXNiLmMJMjAwOC0wNC0xMCAxNzowNTowNS4wMDAwMDAwMDAgKzA0MDAKQEAgLTEs
NSArMSw1IEBACiAvKi0KLSAqIENvcHlyaWdodCAoYykgMjAwNiAtIDIwMDcgU/hyZW4gU2NobWlk
dCA8c29zQEZyZWVCU0Qub3JnPgorICogQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAwOCBT+HJlbiBT
Y2htaWR0IDxzb3NARnJlZUJTRC5vcmc+CiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dApAQCAtMzYsNyArMzYsNiBAQCBfX0ZCU0RJRCgiJEZyZWVCU0Q6IHNyYy9zeXMv
ZGV2L2F0YS9hdGEtCiAjaW5jbHVkZSA8c3lzL2F0YS5oPgogI2luY2x1ZGUgPHN5cy9idXMuaD4K
ICNpbmNsdWRlIDxzeXMvZW5kaWFuLmg+Ci0jaW5jbHVkZSA8c3lzL3N5c2N0bC5oPgogI2luY2x1
ZGUgPHN5cy9tYWxsb2MuaD4KICNpbmNsdWRlIDxzeXMvbW9kdWxlLmg+CiAjaW5jbHVkZSA8c3lz
L3NlbWEuaD4KLS0tIHNyYy9zeXMvZGV2L2F0YS9hdGFfaWYubQkyMDA3LTA0LTA2IDIwOjE4OjU5
LjAwMDAwMDAwMCArMDQwMAorKysgc3JjL3N5cy9kZXYvYXRhL2F0YV9pZi5tCTIwMDgtMDQtMTAg
MTc6MDU6MDUuMDAwMDAwMDAwICswNDAwCkBAIC0xLDQgKzEsNCBAQAotIyBDb3B5cmlnaHQgKGMp
IDIwMDQgLSAyMDA3IFP4cmVuIFNjaG1pZHQgPHNvc0BGcmVlQlNELm9yZz4KKyMgQ29weXJpZ2h0
IChjKSAyMDA0IC0gMjAwOCBT+HJlbiBTY2htaWR0IDxzb3NARnJlZUJTRC5vcmc+CiAjIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLS0gc3JjL3N5cy9kZXYvYXRhL2F0YXBp
LWNkLmMJMjAwNy0xMS0yMiAwMDoxNTowMC4wMDAwMDAwMDAgKzAzMDAKKysrIHNyYy9zeXMvZGV2
L2F0YS9hdGFwaS1jZC5jCTIwMDgtMDUtMDggMjE6NTU6NDQuMDAwMDAwMDAwICswNDAwCkBAIC0x
LDUgKzEsNSBAQAogLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTggLSAyMDA3IFP4cmVuIFNjaG1p
ZHQgPHNvc0BGcmVlQlNELm9yZz4KKyAqIENvcHlyaWdodCAoYykgMTk5OCAtIDIwMDggU/hyZW4g
U2NobWlkdCA8c29zQEZyZWVCU0Qub3JnPgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKQEAgLTY5Niw3ICs2OTYsNiBAQCBhY2RfZ2VvbV9hY2Nlc3Moc3RydWN0IGdf
cHJvdmlkZXIgKnBwLCBpCiAKICAgICAvKiB3YWl0IGlmIGRyaXZlIGlzIG5vdCBmaW5pc2hlZCBs
b2FkaW5nIHRoZSBtZWRpdW0gKi8KICAgICB3aGlsZSAodGltZW91dC0tKSB7Ci0JYnplcm8ocmVx
dWVzdCwgc2l6ZW9mKHN0cnVjdCBhdGFfcmVxdWVzdCkpOwogCXJlcXVlc3QtPmRldiA9IGRldjsK
IAliY29weShjY2IsIHJlcXVlc3QtPnUuYXRhcGkuY2NiLCAxNik7CiAJcmVxdWVzdC0+ZmxhZ3Mg
PSBBVEFfUl9BVEFQSTsKQEAgLTkwNywxMSArOTA2LDExIEBAIGFjZF9zZXRfaW9wYXJtKGRldmlj
ZV90IGRldikKIHsKICAgICBzdHJ1Y3QgYXRhX2NoYW5uZWwgKmNoID0gZGV2aWNlX2dldF9zb2Z0
YyhkZXZpY2VfZ2V0X3BhcmVudChkZXYpKTsKICAgICBzdHJ1Y3QgYWNkX3NvZnRjICpjZHAgPSBk
ZXZpY2VfZ2V0X2l2YXJzKGRldik7CisgICAgdWludDMyX3QgbWF4X2lvc2l6ZTsKIAotICAgIGlm
IChjaC0+ZG1hKQotCWNkcC0+aW9tYXggPSBtaW4oY2gtPmRtYS0+bWF4X2lvc2l6ZSwgNjU1MzQp
OwotICAgIGVsc2UKLQljZHAtPmlvbWF4ID0gbWluKERGTFRQSFlTLCA2NTUzNCk7CisgICAgbWF4
X2lvc2l6ZSA9IGNoLT5kbWEubWF4X2lvc2l6ZSA/IGNoLT5kbWEubWF4X2lvc2l6ZSA6IERGTFRQ
SFlTOworCisgICAgY2RwLT5pb21heCA9IG1pbihtYXhfaW9zaXplLCA2NTUzNCk7CiB9CiAKIHN0
YXRpYyB2b2lkIApAQCAtMTcwNiw4ICsxNzA1LDcgQEAgYWNkX2Rlc2NyaWJlKGRldmljZV90IGRl
dikKIAkJCShjZHAtPmNhcC5tZWRpYSAmIE1TVF9XUklURV9DRFJXKSA/ICJDRFJXIiA6CiAJCQkg
KGNkcC0+Y2FwLm1lZGlhICYgTVNUX1dSSVRFX0NEUikgPyAiQ0RSIiA6IAogCQkJICAoY2RwLT5j
YXAubWVkaWEgJiBNU1RfUkVBRF9EVkRST00pID8gIkRWRFJPTSI6IkNEUk9NIiwKLQkJICAgICAg
ZGV2aWNlX2dldF91bml0KGNoLT5kZXYpLAotCQkgICAgICAoYXRhZGV2LT51bml0ID09IEFUQV9N
QVNURVIpID8gIm1hc3RlciIgOiAic2xhdmUiKTsKKwkJICAgICAgZGV2aWNlX2dldF91bml0KGNo
LT5kZXYpLCBhdGFfdW5pdDJzdHIoYXRhZGV2KSk7CiAKIAlkZXZpY2VfcHJpbnRmKGRldiwgIiVz
IiwgIiIpOwogCWlmIChjZHAtPmNhcC5jdXJfcmVhZF9zcGVlZCkgewpAQCAtMTg3OSw4ICsxODc3
LDcgQEAgYWNkX2Rlc2NyaWJlKGRldmljZV90IGRldikKIAkgICAgcHJpbnRmKCJ3aXRoICVkIENE
IGNoYW5nZXIgIiwgY2RwLT5jaGFuZ2VyX2luZm8tPnNsb3RzKTsKIAlwcmludGYoIjwlLjQwcy8l
LjhzPiBhdCBhdGElZC0lcyAlc1xuIiwKIAkgICAgICAgYXRhZGV2LT5wYXJhbS5tb2RlbCwgYXRh
ZGV2LT5wYXJhbS5yZXZpc2lvbiwKLQkgICAgICAgZGV2aWNlX2dldF91bml0KGNoLT5kZXYpLAot
CSAgICAgICAoYXRhZGV2LT51bml0ID09IEFUQV9NQVNURVIpID8gIm1hc3RlciIgOiAic2xhdmUi
LAorCSAgICAgICBkZXZpY2VfZ2V0X3VuaXQoY2gtPmRldiksIGF0YV91bml0MnN0cihhdGFkZXYp
LAogCSAgICAgICBhdGFfbW9kZTJzdHIoYXRhZGV2LT5tb2RlKSApOwogICAgIH0KIH0KLS0tIHNy
Yy9zeXMvZGV2L2F0YS9hdGFwaS1jZC5oCTIwMDctMTAtMzEgMjI6NTk6NTMuMDAwMDAwMDAwICsw
MzAwCisrKyBzcmMvc3lzL2Rldi9hdGEvYXRhcGktY2QuaAkyMDA4LTA0LTEwIDE3OjA1OjA1LjAw
MDAwMDAwMCArMDQwMApAQCAtMSw1ICsxLDUgQEAKIC8qLQotICogQ29weXJpZ2h0IChjKSAxOTk4
IC0gMjAwNyBT+HJlbiBTY2htaWR0IDxzb3NARnJlZUJTRC5vcmc+CisgKiBDb3B5cmlnaHQgKGMp
IDE5OTggLSAyMDA4IFP4cmVuIFNjaG1pZHQgPHNvc0BGcmVlQlNELm9yZz4KICAqIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0tLSBzcmMvc3lzL2Rldi9hdGEvYXRhcGkt
ZmQuYwkyMDA3LTExLTIyIDAwOjE1OjAwLjAwMDAwMDAwMCArMDMwMAorKysgc3JjL3N5cy9kZXYv
YXRhL2F0YXBpLWZkLmMJMjAwOC0wNS0wOCAyMTo1NTo0NC4wMDAwMDAwMDAgKzA0MDAKQEAgLTEs
NSArMSw1IEBACiAvKi0KLSAqIENvcHlyaWdodCAoYykgMTk5OCAtIDIwMDcgU/hyZW4gU2NobWlk
dCA8c29zQEZyZWVCU0Qub3JnPgorICogQ29weXJpZ2h0IChjKSAxOTk4IC0gMjAwOCBT+HJlbiBT
Y2htaWR0IDxzb3NARnJlZUJTRC5vcmc+CiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dApAQCAtMTA1LDEwICsxMDUsNyBAQCBhZmRfYXR0YWNoKGRldmljZV90IGRldikK
ICAgICBmZHAtPmRpc2stPmRfaW9jdGwgPSBhZmRfaW9jdGw7CiAgICAgZmRwLT5kaXNrLT5kX25h
bWUgPSAiYWZkIjsKICAgICBmZHAtPmRpc2stPmRfZHJ2MSA9IGRldjsKLSAgICBpZiAoY2gtPmRt
YSkKLQlmZHAtPmRpc2stPmRfbWF4c2l6ZSA9IGNoLT5kbWEtPm1heF9pb3NpemU7Ci0gICAgZWxz
ZQotCWZkcC0+ZGlzay0+ZF9tYXhzaXplID0gREZMVFBIWVM7CisgICAgZmRwLT5kaXNrLT5kX21h
eHNpemUgPSBjaC0+ZG1hLm1heF9pb3NpemUgPyBjaC0+ZG1hLm1heF9pb3NpemUgOiBERkxUUEhZ
UzsKICAgICBmZHAtPmRpc2stPmRfdW5pdCA9IGRldmljZV9nZXRfdW5pdChkZXYpOwogICAgIGRp
c2tfY3JlYXRlKGZkcC0+ZGlzaywgRElTS19WRVJTSU9OKTsKICAgICByZXR1cm4gMDsKQEAgLTQw
Niw4ICs0MDMsNyBAQCBhZmRfZGVzY3JpYmUoZGV2aWNlX3QgZGV2KQogIAogICAgIGRldmljZV9w
cmludGYoZGV2LCAiJXMgPCUuNDBzICUuOHM+IGF0IGF0YSVkLSVzICVzXG4iLAogCQkgIHNpemVz
dHJpbmcsIGF0YWRldi0+cGFyYW0ubW9kZWwsIGF0YWRldi0+cGFyYW0ucmV2aXNpb24sCi0JCSAg
ZGV2aWNlX2dldF91bml0KGNoLT5kZXYpLAotCQkgIChhdGFkZXYtPnVuaXQgPT0gQVRBX01BU1RF
UikgPyAibWFzdGVyIiA6ICJzbGF2ZSIsCisJCSAgZGV2aWNlX2dldF91bml0KGNoLT5kZXYpLCBh
dGFfdW5pdDJzdHIoYXRhZGV2KSwKIAkJICBhdGFfbW9kZTJzdHIoYXRhZGV2LT5tb2RlKSk7CiAg
ICAgaWYgKGJvb3R2ZXJib3NlKSB7CiAJZGV2aWNlX3ByaW50ZihkZXYsICIlanUgc2VjdG9ycyBb
JWp1Qy8lZEgvJWRTXVxuIiwKLS0tIHNyYy9zeXMvZGV2L2F0YS9hdGFwaS1mZC5oCTIwMDctMDIt
MjEgMjI6MDc6MTkuMDAwMDAwMDAwICswMzAwCisrKyBzcmMvc3lzL2Rldi9hdGEvYXRhcGktZmQu
aAkyMDA4LTA0LTEwIDE3OjA1OjA1LjAwMDAwMDAwMCArMDQwMApAQCAtMSw1ICsxLDUgQEAKIC8q
LQotICogQ29weXJpZ2h0IChjKSAxOTk4IC0gMjAwNyBT+HJlbiBTY2htaWR0IDxzb3NARnJlZUJT
RC5vcmc+CisgKiBDb3B5cmlnaHQgKGMpIDE5OTggLSAyMDA4IFP4cmVuIFNjaG1pZHQgPHNvc0BG
cmVlQlNELm9yZz4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0t
LSBzcmMvc3lzL2Rldi9hdGEvYXRhcGktdGFwZS5jCTIwMDctMTEtMjIgMDA6MTU6MDAuMDAwMDAw
MDAwICswMzAwCisrKyBzcmMvc3lzL2Rldi9hdGEvYXRhcGktdGFwZS5jCTIwMDgtMDktMjcgMTI6
NTE6MTguMDAwMDAwMDAwICswNDAwCkBAIC0xLDUgKzEsNSBAQAogLyotCi0gKiBDb3B5cmlnaHQg
KGMpIDE5OTggLSAyMDA3IFP4cmVuIFNjaG1pZHQgPHNvc0BGcmVlQlNELm9yZz4KKyAqIENvcHly
aWdodCAoYykgMTk5OCAtIDIwMDggU/hyZW4gU2NobWlkdCA8c29zQEZyZWVCU0Qub3JnPgogICog
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTE0MiwxOSArMTQyLDEz
IEBAIGFzdF9hdHRhY2goZGV2aWNlX3QgZGV2KQogCQkgICAgICBVSURfUk9PVCwgR0lEX09QRVJB
VE9SLCAwNjQwLCAiYXN0JWQiLAogCQkgICAgICBkZXZpY2VfZ2V0X3VuaXQoZGV2KSk7CiAgICAg
ZGV2aWNlLT5zaV9kcnYxID0gZGV2OwotICAgIGlmIChjaC0+ZG1hKQotCWRldmljZS0+c2lfaW9z
aXplX21heCA9IGNoLT5kbWEtPm1heF9pb3NpemU7Ci0gICAgZWxzZQotCWRldmljZS0+c2lfaW9z
aXplX21heCA9IERGTFRQSFlTOworICAgIGRldmljZS0+c2lfaW9zaXplX21heCA9IGNoLT5kbWEu
bWF4X2lvc2l6ZSA/IGNoLT5kbWEubWF4X2lvc2l6ZSA6IERGTFRQSFlTOwogICAgIHN0cC0+ZGV2
MSA9IGRldmljZTsKICAgICBkZXZpY2UgPSBtYWtlX2RldigmYXN0X2NkZXZzdywgMiAqIGRldmlj
ZV9nZXRfdW5pdChkZXYpICsgMSwKIAkJICAgICAgVUlEX1JPT1QsIEdJRF9PUEVSQVRPUiwgMDY0
MCwgIm5hc3QlZCIsCiAJCSAgICAgIGRldmljZV9nZXRfdW5pdChkZXYpKTsKICAgICBkZXZpY2Ut
PnNpX2RydjEgPSBkZXY7Ci0gICAgaWYgKGNoLT5kbWEpCi0JZGV2aWNlLT5zaV9pb3NpemVfbWF4
ID0gY2gtPmRtYS0+bWF4X2lvc2l6ZTsKLSAgICBlbHNlCi0JZGV2aWNlLT5zaV9pb3NpemVfbWF4
ID0gREZMVFBIWVM7CisgICAgZGV2aWNlLT5zaV9pb3NpemVfbWF4ID0gY2gtPmRtYS5tYXhfaW9z
aXplOwogICAgIHN0cC0+ZGV2MiA9IGRldmljZTsKIAogICAgIC8qIGFubm91bmNlIHdlIGFyZSBo
ZXJlIGFuZCByZWFkeSAqLwpAQCAtMjQ0LDcgKzIzOCw3IEBAIGFzdF9jbG9zZShzdHJ1Y3QgY2Rl
diAqY2RldiwgaW50IGZsYWdzLCAKIAlhc3Rfd3JpdGVfZmlsZW1hcmsoZGV2LCBBVEFQSV9XRl9X
UklURSk7CiAKICAgICAvKiBpZiBtaW5vciBpcyBldmVuIHJld2luZCBvbiBjbG9zZSAqLwotICAg
IGlmICghKG1pbm9yKGNkZXYpICYgMHgwMSkpCisgICAgaWYgKCEoZGV2MnVuaXQoY2RldikgJiAw
eDAxKSkKIAlhc3RfcmV3aW5kKGRldik7CiAKICAgICBpZiAoc3RwLT5jYXAubG9jayAmJiBjb3Vu
dF9kZXYoY2RldikgPT0gMSkKQEAgLTY3OCw4ICs2NzIsNyBAQCBhc3RfZGVzY3JpYmUoZGV2aWNl
X3QgZGV2KQogICAgIGlmIChib290dmVyYm9zZSkgewogCWRldmljZV9wcmludGYoZGV2LCAiPCUu
NDBzLyUuOHM+IHRhcGUgZHJpdmUgYXQgYXRhJWQgYXMgJXNcbiIsCiAJCSAgICAgIGF0YWRldi0+
cGFyYW0ubW9kZWwsIGF0YWRldi0+cGFyYW0ucmV2aXNpb24sCi0JCSAgICAgIGRldmljZV9nZXRf
dW5pdChjaC0+ZGV2KSwKLQkJICAgICAgKGF0YWRldi0+dW5pdCA9PSBBVEFfTUFTVEVSKSA/ICJt
YXN0ZXIiIDogInNsYXZlIik7CisJCSAgICAgIGRldmljZV9nZXRfdW5pdChjaC0+ZGV2KSwgYXRh
X3VuaXQyc3RyKGF0YWRldikpOwogCWRldmljZV9wcmludGYoZGV2LCAiJWRLQi9zLCAiLCBzdHAt
PmNhcC5tYXhfc3BlZWQpOwogCXByaW50ZigidHJhbnNmZXIgbGltaXQgJWQgYmxrJXMsICIsCiAJ
ICAgICAgIHN0cC0+Y2FwLmN0bCwgKHN0cC0+Y2FwLmN0bCA+IDEpID8gInMiIDogIiIpOwpAQCAt
NzE3LDggKzcxMCw3IEBAIGFzdF9kZXNjcmliZShkZXZpY2VfdCBkZXYpCiAgICAgZWxzZSB7CiAJ
ZGV2aWNlX3ByaW50ZihkZXYsICJUQVBFIDwlLjQwcy8lLjhzPiBhdCBhdGElZC0lcyAlc1xuIiwK
IAkJICAgICAgYXRhZGV2LT5wYXJhbS5tb2RlbCwgYXRhZGV2LT5wYXJhbS5yZXZpc2lvbiwKLQkJ
ICAgICAgZGV2aWNlX2dldF91bml0KGNoLT5kZXYpLAotCQkgICAgICAoYXRhZGV2LT51bml0ID09
IEFUQV9NQVNURVIpID8gIm1hc3RlciIgOiAic2xhdmUiLAorCQkgICAgICBkZXZpY2VfZ2V0X3Vu
aXQoY2gtPmRldiksIGF0YV91bml0MnN0cihhdGFkZXYpLAogCQkgICAgICBhdGFfbW9kZTJzdHIo
YXRhZGV2LT5tb2RlKSk7CiAgICAgfQogfQotLS0gc3JjL3N5cy9kZXYvYXRhL2F0YXBpLXRhcGUu
aAkyMDA3LTAyLTIxIDIyOjA3OjE5LjAwMDAwMDAwMCArMDMwMAorKysgc3JjL3N5cy9kZXYvYXRh
L2F0YXBpLXRhcGUuaAkyMDA4LTA0LTEwIDE3OjA1OjA1LjAwMDAwMDAwMCArMDQwMApAQCAtMSw1
ICsxLDUgQEAKIC8qLQotICogQ29weXJpZ2h0IChjKSAxOTk4IC0gMjAwNyBT+HJlbiBTY2htaWR0
IDxzb3NARnJlZUJTRC5vcmc+CisgKiBDb3B5cmlnaHQgKGMpIDE5OTggLSAyMDA4IFP4cmVuIFNj
aG1pZHQgPHNvc0BGcmVlQlNELm9yZz4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0tLSBzcmMvc3lzL3N5cy9hdGEuaAkyMDA4LTA0LTA4IDEwOjQ4OjIxLjAwMDAw
MDAwMCArMDAwMAorKysgc3JjL3N5cy9zeXMvYXRhLmgJMjAwOC0wNC0xMCAxMzowMToxNy4wMDAw
MDAwMDAgKzAwMDAKQEAgLTEsNSArMSw1IEBACiAvKi0KLSAqIENvcHlyaWdodCAoYykgMjAwMCAt
IDIwMDYgU/hyZW4gU2NobWlkdCA8c29zQEZyZWVCU0Qub3JnPgorICogQ29weXJpZ2h0IChjKSAy
MDAwIC0gMjAwOCBT+HJlbiBTY2htaWR0IDxzb3NARnJlZUJTRC5vcmc+CiAgKiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjM5LDcgKzIzOSw3IEBAIHN0cnVjdCBh
dGFfcGFyYW1zIHsKICNkZWZpbmUgQVRBX1JFQUQ0OCAgICAgICAgICAgICAgICAgICAgICAweDI0
ICAgIC8qIHJlYWQgNDhiaXQgTEJBICovCiAjZGVmaW5lIEFUQV9SRUFEX0RNQTQ4ICAgICAgICAg
ICAgICAgICAgMHgyNSAgICAvKiByZWFkIERNQSA0OGJpdCBMQkEgKi8KICNkZWZpbmUgQVRBX1JF
QURfRE1BX1FVRVVFRDQ4ICAgICAgICAgICAweDI2ICAgIC8qIHJlYWQgRE1BIFFVRVVFRCA0OGJp
dCBMQkEgKi8KLSNkZWZpbmUgQVRBX1JFQURfTkFUSVZFX01BWF9BREREUkVTUzQ4ICAweDI3ICAg
IC8qIHJlYWQgbmF0aXZlIG1heCBhZGRyIDQ4Yml0ICovCisjZGVmaW5lIEFUQV9SRUFEX05BVElW
RV9NQVhfQUREUkVTUzQ4ICAgMHgyNyAgICAvKiByZWFkIG5hdGl2ZSBtYXggYWRkciA0OGJpdCAq
LwogI2RlZmluZSBBVEFfUkVBRF9NVUw0OCAgICAgICAgICAgICAgICAgIDB4MjkgICAgLyogcmVh
ZCBtdWx0aSA0OGJpdCBMQkEgKi8KICNkZWZpbmUgQVRBX1dSSVRFICAgICAgICAgICAgICAgICAg
ICAgICAweDMwICAgIC8qIHdyaXRlICovCiAjZGVmaW5lIEFUQV9XUklURTQ4ICAgICAgICAgICAg
ICAgICAgICAgMHgzNCAgICAvKiB3cml0ZSA0OGJpdCBMQkEgKi8KQEAgLTI2Nyw4ICsyNjcsMTAg
QEAgc3RydWN0IGF0YV9wYXJhbXMgewogI2RlZmluZSBBVEFfU1RBTkRCWV9DTUQgICAgICAgICAg
ICAgICAgIDB4ZTIgICAgLyogc3RhbmRieSAqLwogI2RlZmluZSBBVEFfSURMRV9DTUQgICAgICAg
ICAgICAgICAgICAgIDB4ZTMgICAgLyogaWRsZSAqLwogI2RlZmluZSBBVEFfUkVBRF9CVUZGRVIg
ICAgICAgICAgICAgICAgIDB4ZTQgICAgLyogcmVhZCBidWZmZXIgKi8KKyNkZWZpbmUgQVRBX1JF
QURfUE0gICAgICAgICAgICAgICAgICAgICAweGU0ICAgIC8qIHJlYWQgcG9ydG11bHRpcGxpZXIg
Ki8KICNkZWZpbmUgQVRBX1NMRUVQICAgICAgICAgICAgICAgICAgICAgICAweGU2ICAgIC8qIHNs
ZWVwICovCiAjZGVmaW5lIEFUQV9GTFVTSENBQ0hFICAgICAgICAgICAgICAgICAgMHhlNyAgICAv
KiBmbHVzaCBjYWNoZSB0byBkaXNrICovCisjZGVmaW5lIEFUQV9XUklURV9QTSAgICAgICAgICAg
ICAgICAgICAgMHhlOCAgICAvKiB3cml0ZSBwb3J0bXVsdGlwbGllciAqLwogI2RlZmluZSBBVEFf
RkxVU0hDQUNIRTQ4ICAgICAgICAgICAgICAgIDB4ZWEgICAgLyogZmx1c2ggY2FjaGUgdG8gZGlz
ayAqLwogI2RlZmluZSBBVEFfQVRBX0lERU5USUZZICAgICAgICAgICAgICAgIDB4ZWMgICAgLyog
Z2V0IEFUQSBwYXJhbXMgKi8KICNkZWZpbmUgQVRBX1NFVEZFQVRVUkVTICAgICAgICAgICAgICAg
ICAweGVmICAgIC8qIGZlYXR1cmVzIGNvbW1hbmQgKi8KQEAgLTI4Miw3ICsyODQsNyBAQCBzdHJ1
Y3QgYXRhX3BhcmFtcyB7CiAjZGVmaW5lICAgICAgICAgQVRBX1NGX0VOQUJfU1JWSVJRICAgICAg
MHg1ZSAgICAvKiBlbmFibGUgc2VydmljZSBpbnRlcnJ1cHQgKi8KICNkZWZpbmUgICAgICAgICBB
VEFfU0ZfRElTX1NSVklSUSAgICAgICAweGRlICAgIC8qIGRpc2FibGUgc2VydmljZSBpbnRlcnJ1
cHQgKi8KICNkZWZpbmUgQVRBX1NFQ1VSSVRZX0ZSRUVFX0xPQ0sgICAgICAgICAweGY1ICAgIC8q
IGZyZWV6ZSBzZWN1cml0eSBjb25maWcgKi8KLSNkZWZpbmUgQVRBX1JFQURfTkFUSVZFX01BWF9B
REREUkVTUyAgICAweGY4ICAgIC8qIHJlYWQgbmF0aXZlIG1heCBhZGRyZXNzICovCisjZGVmaW5l
IEFUQV9SRUFEX05BVElWRV9NQVhfQUREUkVTUyAgICAgMHhmOCAgICAvKiByZWFkIG5hdGl2ZSBt
YXggYWRkcmVzcyAqLwogI2RlZmluZSBBVEFfU0VUX01BWF9BRERSRVNTICAgICAgICAgICAgIDB4
ZjkgICAgLyogc2V0IG1heCBhZGRyZXNzICovCiAKIAo=
------==--bound.67616.webmail38.yandex.ru--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?676151223134689>