Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 13 Jun 2013 11:41:10 -0300
From:      Luiz Otavio O Souza <lists.br@gmail.com>
To:        freebsd-embedded@freebsd.org, ray@freebsd.org,  Adrian Chadd <adrian@freebsd.org>
Subject:   arswitch vlan support
Message-ID:  <CAB=2f8y1tmCKZR=WoBkvdgVeWDaQqRAU9AOrJ5qfb5M189LCPA@mail.gmail.com>

next in thread | raw e-mail | index | archive | help
--001a11c25f8c14fa0604df0a1f5c
Content-Type: text/plain; charset=ISO-8859-1

Hello,

I've been working for a while to support vlans management on arswitch and
the result seems to work quite well.

I'd to change etherswitchcfg(8) again to better support port based vlans
setups.

There was a bug in arswitch_writereg() where the lsb/msb parts were written
in the wrong order and that was causing all kinds of instability. Fixing
that allows me to bring back the page code (which only change the switch
register page when needed) and also remove some previous workarounds.

Here are the patches (and urls if the list eat them):

http://loos.no-ip.org/switch/001-etherswitch-vid-valid.diff

Adds a flag to tell to etherswitch consumers when a vlangroup is valid (in
use, even when there are no members on the vlangroup).

http://loos.no-ip.org/switch/002-ip17x-vid-valid.diff

Add the support to report valid vlans and fix a few bugs (don't allow
change the vlan when working in port based vlan mode, don't allow setup the
same vlan id on different vlangroups).

Tested on RB433U (IP175D) and an old RB450 (IP1757C).

http://loos.no-ip.org/switch/003-rtl8366rb-vid-valid.diff

Report valid vlans for rtl8366 based switches (just a mechanical change,
i'll test the changes now that i have the hardware).

http://loos.no-ip.org/switch/004-arswitch-vlans.diff

Implement port and 802.1q vlan support for ar8x16 (and ar724x) based
switches. Fix the instability bug.

Tested on RSPRO (standalone ar8316), RB450G (standalone ar8316) and on
TPLink MR-3220 (ar7240 integrated switch).

Do you guys have suggestions, comments ?

Thanks,
Luiz

--001a11c25f8c14fa0604df0a1f5c
Content-Type: application/octet-stream; 
	name="001-etherswitch-vid-valid.diff"
Content-Disposition: attachment; filename="001-etherswitch-vid-valid.diff"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_hhw0zcks0

SW5kZXg6IHNiaW4vZXRoZXJzd2l0Y2hjZmcvZXRoZXJzd2l0Y2hjZmcuYwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBzYmluL2V0aGVyc3dpdGNoY2ZnL2V0aGVyc3dpdGNoY2ZnLmMJKHJldmlzaW9uIDI1MDkwOCkK
KysrIHNiaW4vZXRoZXJzd2l0Y2hjZmcvZXRoZXJzd2l0Y2hjZmcuYwkod29ya2luZyBjb3B5KQpA
QCAtNDcxLDggKzQ3MSw5IEBACiAJdmcuZXNfdmxhbmdyb3VwID0gdmxhbmdyb3VwOwogCWlmIChp
b2N0bChjZmctPmZkLCBJT0VUSEVSU1dJVENIR0VUVkxBTkdST1VQLCAmdmcpICE9IDApCiAJCWVy
cihFWF9PU0VSUiwgImlvY3RsKElPRVRIRVJTV0lUQ0hHRVRWTEFOR1JPVVApIik7Ci0JaWYgKHZn
LmVzX3ZpZCA9PSAwICYmIHZnLmVzX21lbWJlcl9wb3J0cyA9PSAwKQorCWlmICgodmcuZXNfdmlk
ICYgRVRIRVJTV0lUQ0hfVklEX1ZBTElEKSA9PSAwKQogCQlyZXR1cm47CisJdmcuZXNfdmlkICY9
IEVUSEVSU1dJVENIX1ZJRF9NQVNLOwogCXByaW50Zigidmxhbmdyb3VwJWQ6XG4iLCB2bGFuZ3Jv
dXApOwogCWlmIChjZmctPmNvbmYudmxhbl9tb2RlID09IEVUSEVSU1dJVENIX1ZMQU5fUE9SVCkK
IAkJcHJpbnRmKCJcdHBvcnQ6ICVkXG4iLCB2Zy5lc192aWQpOwpAQCAtNjI2LDcgKzYyNyw5IEBA
CiAJCQkJbmV3bW9kZSgmY2ZnLCBNT0RFX1BPUlQpOwogCQkJfSBlbHNlIGlmIChzc2NhbmYoYXJn
dlswXSwgInZsYW5ncm91cCVkIiwgJmNmZy51bml0KSA9PSAxKSB7CiAJCQkJaWYgKGNmZy51bml0
IDwgMCB8fCBjZmcudW5pdCA+PSBjZmcuaW5mby5lc19udmxhbmdyb3VwcykKLQkJCQkJZXJyeChF
WF9VU0FHRSwgInBvcnQgdW5pdCBtdXN0IGJlIGJldHdlZW4gMCBhbmQgJWQiLCBjZmcuaW5mby5l
c19udmxhbmdyb3Vwcyk7CisJCQkJCWVycngoRVhfVVNBR0UsCisJCQkJCSAgICAidmxhbmdyb3Vw
IHVuaXQgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kICVkIiwKKwkJCQkJICAgIGNmZy5pbmZvLmVzX252
bGFuZ3JvdXBzIC0gMSk7CiAJCQkJbmV3bW9kZSgmY2ZnLCBNT0RFX1ZMQU5HUk9VUCk7CiAJCQl9
IGVsc2UgaWYgKHN0cmNtcChhcmd2WzBdLCAiY29uZmlnIikgPT0gMCkgewogCQkJCW5ld21vZGUo
JmNmZywgTU9ERV9DT05GSUcpOwpJbmRleDogc3lzL2Rldi9ldGhlcnN3aXRjaC9ldGhlcnN3aXRj
aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIHN5cy9kZXYvZXRoZXJzd2l0Y2gvZXRoZXJzd2l0Y2guaAkocmV2
aXNpb24gMjUwOTA4KQorKysgc3lzL2Rldi9ldGhlcnN3aXRjaC9ldGhlcnN3aXRjaC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw4IEBACiB0eXBlZGVmIHN0cnVjdCBldGhlcnN3aXRjaF9w
aHlyZWcgZXRoZXJzd2l0Y2hfcGh5cmVnX3Q7CiAKICNkZWZpbmUJRVRIRVJTV0lUQ0hfTkFNRU1B
WAkJNjQKKyNkZWZpbmUJRVRIRVJTV0lUQ0hfVklEX01BU0sJCTB4ZmZmCisjZGVmaW5lCUVUSEVS
U1dJVENIX1ZJRF9WQUxJRAkJKDEgPDwgMTIpCiAjZGVmaW5lCUVUSEVSU1dJVENIX1ZMQU5fSVNM
CQkoMSA8PCAwKQkvKiBJU0wgKi8KICNkZWZpbmUJRVRIRVJTV0lUQ0hfVkxBTl9QT1JUCQkoMSA8
PCAxKQkvKiBQb3J0IGJhc2VkIHZsYW4gKi8KICNkZWZpbmUJRVRIRVJTV0lUQ0hfVkxBTl9ET1Qx
UQkJKDEgPDwgMikJLyogODAyLjFxICovCg==
--001a11c25f8c14fa0604df0a1f5c
Content-Type: application/octet-stream; name="002-ip17x-vid-valid.diff"
Content-Disposition: attachment; filename="002-ip17x-vid-valid.diff"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_hhw0zcms1

SW5kZXg6IGRldi9ldGhlcnN3aXRjaC9pcDE3eC9pcDE3NWMuYwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBkZXYv
ZXRoZXJzd2l0Y2gvaXAxN3gvaXAxNzVjLmMJKHJldmlzaW9uIDI1MDkwMSkKKysrIGRldi9ldGhl
cnN3aXRjaC9pcDE3eC9pcDE3NWMuYwkod29ya2luZyBjb3B5KQpAQCAtMTQ3LDkgKzE0Nyw5IEBA
CiAJbWVtc2V0KHZsYW5zLCAwLCBzaXplb2YodmxhbnMpKTsKIAlmb3IgKGkgPSAwOyBpIDwgSVAx
N1hfTUFYX1ZMQU5TOyBpKyspIHsKIAkJdiA9ICZzYy0+dmxhbltpXTsKLQkJaWYgKHYtPnZsYW5p
ZCA9PSAwKQorCQlpZiAoKHYtPnZsYW5pZCAmIEVUSEVSU1dJVENIX1ZJRF9WQUxJRCkgPT0gMCkK
IAkJCWNvbnRpbnVlOwotCQl2bGFuc1t2LT52bGFuaWRdID0gdi0+cG9ydHM7CisJCXZsYW5zW3Yt
PnZsYW5pZCAmIEVUSEVSU1dJVENIX1ZJRF9NQVNLXSA9IHYtPnBvcnRzOwogCX0KIAogCWZvciAo
aiA9IDAsIGkgPSAxOyBpIDw9IElQMTdYX01BWF9WTEFOUyAvIDI7IGkrKykgewpJbmRleDogZGV2
L2V0aGVyc3dpdGNoL2lwMTd4L2lwMTc1ZC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRldi9ldGhlcnN3aXRj
aC9pcDE3eC9pcDE3NWQuYwkocmV2aXNpb24gMjUwOTAxKQorKysgZGV2L2V0aGVyc3dpdGNoL2lw
MTd4L2lwMTc1ZC5jCSh3b3JraW5nIGNvcHkpCkBAIC05NCw3ICs5NCw4IEBACiAJCXN0cmlwdGFn
W2ldID0gMDsKIAogCQl2ID0gJnNjLT52bGFuW2ldOwotCQlpZiAodi0+dmxhbmlkID09IDAgfHwg
c2MtPnZsYW5fbW9kZSA9PSAwKSB7CisJCWlmICgodi0+dmxhbmlkICYgRVRIRVJTV0lUQ0hfVklE
X1ZBTElEKSA9PSAwIHx8CisJCSAgICBzYy0+dmxhbl9tb2RlID09IDApIHsKIAkJCS8qIFZsYW5n
cm91cCBkaXNhYmxlZC4gIFJlc2V0IHRoZSBmaWx0ZXIuICovCiAJCQlpcDE3eF93cml0ZXBoeShz
Yy0+c2NfZGV2LCAyMiwgMTQgKyBpLCBpICsgMSk7CiAJCQlwb3J0c1tpXSA9IDB4M2Y7CkBAIC0x
MDUsNyArMTA2LDggQEAKIAkJcG9ydHNbaV0gPSB2LT5wb3J0czsKIAogCQkvKiBTZXR1cCB0aGUg
ZmlsdGVyLCB3cml0ZSB0aGUgVkxBTiBpZC4gKi8KLQkJaXAxN3hfd3JpdGVwaHkoc2MtPnNjX2Rl
diwgMjIsIDE0ICsgaSwgdi0+dmxhbmlkKTsKKwkJaXAxN3hfd3JpdGVwaHkoc2MtPnNjX2Rldiwg
MjIsIDE0ICsgaSwKKwkJICAgIHYtPnZsYW5pZCAmIEVUSEVSU1dJVENIX1ZJRF9NQVNLKTsKIAog
CQlmb3IgKGogPSAwOyBqIDwgTUlJX05QSFk7IGorKykgewogCQkJaWYgKChwb3J0c1tpXSAmICgx
IDw8IGopKSA9PSAwKQpJbmRleDogZGV2L2V0aGVyc3dpdGNoL2lwMTd4L2lwMTd4X3ZsYW5zLmMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gZGV2L2V0aGVyc3dpdGNoL2lwMTd4L2lwMTd4X3ZsYW5zLmMJKHJldmlz
aW9uIDI1MDkwMSkKKysrIGRldi9ldGhlcnN3aXRjaC9pcDE3eC9pcDE3eF92bGFucy5jCSh3b3Jr
aW5nIGNvcHkpCkBAIC03NCw3ICs3NCw3IEBACiAJCQlpZiAoKCgxIDw8IHBoeSkgJiBzYy0+cGh5
bWFzaykgPT0gMCkKIAkJCQljb250aW51ZTsKIAkJCXYgPSAmc2MtPnZsYW5baV07Ci0JCQl2LT52
bGFuaWQgPSBpKys7CisJCQl2LT52bGFuaWQgPSBpKysgfCBFVEhFUlNXSVRDSF9WSURfVkFMSUQ7
CiAJCQl2LT5wb3J0cyA9ICgxIDw8IHNjLT5jcHVwb3J0KTsKIAkJCWZvciAoaiA9IDA7IGogPCBN
SUlfTlBIWTsgaisrKSB7CiAJCQkJaWYgKCgoMSA8PCBqKSAmIHNjLT5waHltYXNrKSA9PSAwKQpA
QCAtOTAsMTAgKzkwLDEwIEBACiAJCSAqIG1lbWJlcnMgb2YgdmxhbiAxLgogCQkgKi8KIAkJdiA9
ICZzYy0+dmxhblswXTsKLQkJdi0+dmxhbmlkID0gMTsKLQkJLyogU2V0IFBWSUQgZm9yIGV2ZXJ5
b25lLiAqLworCQl2LT52bGFuaWQgPSAxIHwgRVRIRVJTV0lUQ0hfVklEX1ZBTElEOworCQkvKiBT
ZXQgUFZJRCB0byAxIGZvciBldmVyeW9uZS4gKi8KIAkJZm9yIChpID0gMDsgaSA8IHNjLT5udW1w
b3J0czsgaSsrKQotCQkJc2MtPnB2aWRbaV0gPSB2LT52bGFuaWQ7CisJCQlzYy0+cHZpZFtpXSA9
IDE7CiAJCWZvciAoaSA9IDA7IGkgPCBNSUlfTlBIWTsgaSsrKSB7CiAJCQlpZiAoKHNjLT5waHlt
YXNrICYgKDEgPDwgaSkpID09IDApCiAJCQkJY29udGludWU7CkBAIC0xNDgsMTEgKzE0OCwyOSBA
QAogCQlyZXR1cm4gKEVJTlZBTCk7CiAKIAkvKiBJUDE3NUMgZG9uJ3Qgc3VwcG9ydCBWTEFOIElE
cyA+IDE1LiAqLwotCWlmIChJUDE3WF9JU19TV0lUQ0goc2MsIElQMTc1QykgJiYgdmctPmVzX3Zp
ZCA+IElQMTc1Q19MQVNUX1ZMQU4pCisJaWYgKElQMTdYX0lTX1NXSVRDSChzYywgSVAxNzVDKSAm
JgorCSAgICAodmctPmVzX3ZpZCAmIEVUSEVSU1dJVENIX1ZJRF9NQVNLKSA+IElQMTc1Q19MQVNU
X1ZMQU4pCiAJCXJldHVybiAoRUlOVkFMKTsKIAogCS8qIFZsYW4gSUQuICovCi0Jc2MtPnZsYW5b
dmctPmVzX3ZsYW5ncm91cF0udmxhbmlkID0gdmctPmVzX3ZpZDsKKwlpZiAoc2MtPnZsYW5fbW9k
ZSA9PSBFVEhFUlNXSVRDSF9WTEFOX0RPVDFRKSB7CisJCWZvciAoaSA9IDA7IGkgPCBzYy0+aW5m
by5lc19udmxhbmdyb3VwczsgaSsrKSB7CisJCQkvKiBJcyB0aGlzIFZsYW4gSUQgYWxyZWFkeSBz
ZXQgaW4gYW5vdGhlciB2bGFuZ3JvdXAgPyAqLworCQkJaWYgKGkgIT0gdmctPmVzX3ZsYW5ncm91
cCAmJgorCQkJICAgIHNjLT52bGFuW2ldLnZsYW5pZCAmIEVUSEVSU1dJVENIX1ZJRF9WQUxJRCAm
JgorCQkJICAgIChzYy0+dmxhbltpXS52bGFuaWQgJiBFVEhFUlNXSVRDSF9WSURfTUFTSykgPT0K
KwkJCSAgICAodmctPmVzX3ZpZCAmIEVUSEVSU1dJVENIX1ZJRF9NQVNLKSkKKwkJCQlyZXR1cm4g
KEVJTlZBTCk7CisJCX0KKwkJc2MtPnZsYW5bdmctPmVzX3ZsYW5ncm91cF0udmxhbmlkID0gdmct
PmVzX3ZpZCAmCisJCSAgICBFVEhFUlNXSVRDSF9WSURfTUFTSzsKKwkJLyogU2V0dGluZyB0aGUg
dmxhbmlkIHRvIHplcm8gZGlzYWJsZXMgdGhlIHZsYW5ncm91cC4gKi8KKwkJaWYgKHNjLT52bGFu
W3ZnLT5lc192bGFuZ3JvdXBdLnZsYW5pZCA9PSAwKSB7CisJCQlzYy0+dmxhblt2Zy0+ZXNfdmxh
bmdyb3VwXS5wb3J0cyA9IDA7CisJCQlyZXR1cm4gKHNjLT5oYWwuaXAxN3hfaHdfc2V0dXAoc2Mp
KTsKKwkJfQorCQlzYy0+dmxhblt2Zy0+ZXNfdmxhbmdyb3VwXS52bGFuaWQgfD0gRVRIRVJTV0lU
Q0hfVklEX1ZBTElEOworCX0KIAogCS8qIE1lbWJlciBQb3J0cy4gKi8KIAlzYy0+dmxhblt2Zy0+
ZXNfdmxhbmdyb3VwXS5wb3J0cyA9IDA7Cg==
--001a11c25f8c14fa0604df0a1f5c
Content-Type: application/octet-stream; name="003-rtl8366rb-vid-valid.diff"
Content-Disposition: attachment; filename="003-rtl8366rb-vid-valid.diff"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_hhw0zcnr2

SW5kZXg6IGRldi9ldGhlcnN3aXRjaC9ydGw4MzY2L3J0bDgzNjZyYi5jCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IGRldi9ldGhlcnN3aXRjaC9ydGw4MzY2L3J0bDgzNjZyYi5jCShyZXZpc2lvbiAyNTA5MDEpCisr
KyBkZXYvZXRoZXJzd2l0Y2gvcnRsODM2Ni9ydGw4MzY2cmIuYwkod29ya2luZyBjb3B5KQpAQCAt
NjE5LDcgKzYxOSw3IEBACiAJZm9yIChpPTA7IGk8MzsgaSsrKQogCQl2bWNyW2ldID0gcnRsX3Jl
YWRyZWcoZGV2LCBSVEw4MzY2UkJfVk1DUihpLCB2Zy0+ZXNfdmxhbmdyb3VwKSk7CiAJCQotCXZn
LT5lc192aWQgPSBSVEw4MzY2UkJfVk1DUl9WSUQodm1jcik7CisJdmctPmVzX3ZpZCA9IFJUTDgz
NjZSQl9WTUNSX1ZJRCh2bWNyKSB8IEVUSEVSU1dJVENIX1ZJRF9WQUxJRDsKIAl2Zy0+ZXNfbWVt
YmVyX3BvcnRzID0gUlRMODM2NlJCX1ZNQ1JfTUVNQkVSKHZtY3IpOwogCXZnLT5lc191bnRhZ2dl
ZF9wb3J0cyA9IFJUTDgzNjZSQl9WTUNSX1VOVEFHKHZtY3IpOwogCXZnLT5lc19maWQgPSBSVEw4
MzY2UkJfVk1DUl9GSUQodm1jcik7Cg==
--001a11c25f8c14fa0604df0a1f5c
Content-Type: application/octet-stream; name="004-arswitch-vlans.diff"
Content-Disposition: attachment; filename="004-arswitch-vlans.diff"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_hhw0zcop3

LS0tIGRldi9ldGhlcnN3aXRjaC9hcnN3aXRjaC9hcnN3aXRjaF92bGFucy5oLm9yaWcJMjAxMy0w
Ni0xMiAxMDozNjozMC4wMDAwMDAwMDAgLTAzMDAKKysrIGRldi9ldGhlcnN3aXRjaC9hcnN3aXRj
aC9hcnN3aXRjaF92bGFucy5oCTIwMTMtMDUtMjUgMTc6MzQ6NTAuMDAwMDAwMDAwIC0wMzAwCkBA
IC0wLDAgKzEsMzggQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDEzIEx1aXogT3RhdmlvIE8g
U291emEuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEtMjAxMiBTdGVmYW4gQmV0aGtlLgorICogQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisg
KiBTVUNIIERBTUFHRS4KKyAqCisgKiAkRnJlZUJTRCQKKyAqLworI2lmbmRlZglfX0FSU1dJVENI
X1ZMQU5TX0hfXworI2RlZmluZQlfX0FSU1dJVENIX1ZMQU5TX0hfXworCit2b2lkIGFyc3dpdGNo
X3Jlc2V0X3ZsYW5zKHN0cnVjdCBhcnN3aXRjaF9zb2Z0YyAqKTsKK2ludCBhcnN3aXRjaF9nZXR2
Z3JvdXAoZGV2aWNlX3QsIGV0aGVyc3dpdGNoX3ZsYW5ncm91cF90ICopOworaW50IGFyc3dpdGNo
X3NldHZncm91cChkZXZpY2VfdCwgZXRoZXJzd2l0Y2hfdmxhbmdyb3VwX3QgKik7CitpbnQgYXJz
d2l0Y2hfZ2V0X3B2aWQoc3RydWN0IGFyc3dpdGNoX3NvZnRjICosIGludCwgaW50ICopOworaW50
IGFyc3dpdGNoX3NldF9wdmlkKHN0cnVjdCBhcnN3aXRjaF9zb2Z0YyAqLCBpbnQsIGludCk7CisK
KyNlbmRpZgkvKiBfX0FSU1dJVENIX1ZMQU5TX0hfXyAqLwotLS0gZGV2L2V0aGVyc3dpdGNoL2Fy
c3dpdGNoL2Fyc3dpdGNoX3ZsYW5zLmMub3JpZwkyMDEzLTA2LTEyIDEwOjM2OjMwLjAwMDAwMDAw
MCAtMDMwMAorKysgZGV2L2V0aGVyc3dpdGNoL2Fyc3dpdGNoL2Fyc3dpdGNoX3ZsYW5zLmMJMjAx
My0wNi0xMCAxMjoxNjoyMy44MjMxMDMzOTggLTAzMDAKQEAgLTAsMCArMSwzNzUgQEAKKy8qLQor
ICogQ29weXJpZ2h0IChjKSAyMDEzIEx1aXogT3RhdmlvIE8gU291emEuCisgKiBDb3B5cmlnaHQg
KGMpIDIwMTEtMjAxMiBTdGVmYW4gQmV0aGtlLgorICogQ29weXJpZ2h0IChjKSAyMDEyIEFkcmlh
biBDaGFkZC4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJ
UycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICog
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICogJEZyZWVCU0QkCisgKi8KKwor
I2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy9idXMuaD4KKyNpbmNsdWRlIDxz
eXMvZXJybm8uaD4KKyNpbmNsdWRlIDxzeXMva2VybmVsLmg+CisjaW5jbHVkZSA8c3lzL3N5c3Rt
Lmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorCisjaW5jbHVkZSA8bmV0L2lmLmg+CisKKyNp
bmNsdWRlIDxkZXYvbWlpL21paS5oPgorCisjaW5jbHVkZSA8ZGV2L2V0aGVyc3dpdGNoL2V0aGVy
c3dpdGNoLmg+CisjaW5jbHVkZSA8ZGV2L2V0aGVyc3dpdGNoL2Fyc3dpdGNoL2Fyc3dpdGNocmVn
Lmg+CisjaW5jbHVkZSA8ZGV2L2V0aGVyc3dpdGNoL2Fyc3dpdGNoL2Fyc3dpdGNodmFyLmg+Cisj
aW5jbHVkZSA8ZGV2L2V0aGVyc3dpdGNoL2Fyc3dpdGNoL2Fyc3dpdGNoX3JlZy5oPgorI2luY2x1
ZGUgPGRldi9ldGhlcnN3aXRjaC9hcnN3aXRjaC9hcnN3aXRjaF92bGFucy5oPgorCisjaW5jbHVk
ZSAibWRpb19pZi5oIgorI2luY2x1ZGUgIm1paWJ1c19pZi5oIgorI2luY2x1ZGUgImV0aGVyc3dp
dGNoX2lmLmgiCisKK3N0YXRpYyBpbnQKK2Fyc3dpdGNoX3ZsYW5fb3Aoc3RydWN0IGFyc3dpdGNo
X3NvZnRjICpzYywgdWludDMyX3Qgb3AsIHVpbnQzMl90IHZpZCwKKwl1aW50MzJfdCBkYXRhKQor
eworCWludCBlcnI7CisKKwlpZiAoYXJzd2l0Y2hfd2FpdHJlZyhzYy0+c2NfZGV2LCBBUjhYMTZf
UkVHX1ZMQU5fQ1RSTCwKKwkgICAgQVI4WDE2X1ZMQU5fQUNUSVZFLCAwLCA1KSkKKwkJcmV0dXJu
IChFQlVTWSk7CisKKwkvKiBMb2FkIHRoZSB2bGFuIGRhdGEgaWYgbmVlZGVkLiAqLworCWlmIChv
cCA9PSBBUjhYMTZfVkxBTl9PUF9MT0FEKSB7CisJCWVyciA9IGFyc3dpdGNoX3dyaXRlcmVnKHNj
LT5zY19kZXYsIEFSOFgxNl9SRUdfVkxBTl9EQVRBLAorCQkgICAgKGRhdGEgJiBBUjhYMTZfVkxB
Tl9NRU1CRVIpIHwgQVI4WDE2X1ZMQU5fVkFMSUQpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIChl
cnIpOworCX0KKworCWlmICh2aWQgIT0gMCkKKwkJb3AgfD0gKCh2aWQgJiBFVEhFUlNXSVRDSF9W
SURfTUFTSykgPDwgQVI4WDE2X1ZMQU5fVklEX1NISUZUKTsKKwlvcCB8PSBBUjhYMTZfVkxBTl9B
Q1RJVkU7CisJYXJzd2l0Y2hfd3JpdGVyZWcoc2MtPnNjX2RldiwgQVI4WDE2X1JFR19WTEFOX0NU
UkwsIG9wKTsKKworCS8qIFdhaXQgZm9yIGNvbW1hbmQgcHJvY2Vzc2luZy4gKi8KKwlpZiAoYXJz
d2l0Y2hfd2FpdHJlZyhzYy0+c2NfZGV2LCBBUjhYMTZfUkVHX1ZMQU5fQ1RSTCwKKwkgICAgQVI4
WDE2X1ZMQU5fQUNUSVZFLCAwLCA1KSkKKwkJcmV0dXJuIChFQlVTWSk7CisKKwlyZXR1cm4gKDAp
OworfQorCitzdGF0aWMgaW50CithcnN3aXRjaF9mbHVzaF9kb3QxcV92bGFuKHN0cnVjdCBhcnN3
aXRjaF9zb2Z0YyAqc2MpCit7CisKKwlBUlNXSVRDSF9MT0NLX0FTU0VSVChzYywgTUFfT1dORUQp
OworCXJldHVybiAoYXJzd2l0Y2hfdmxhbl9vcChzYywgQVI4WDE2X1ZMQU5fT1BfRkxVU0gsIDAs
IDApKTsKK30KKworc3RhdGljIGludAorYXJzd2l0Y2hfcHVyZ2VfZG90MXFfdmxhbihzdHJ1Y3Qg
YXJzd2l0Y2hfc29mdGMgKnNjLCBpbnQgdmlkKQoreworCisJQVJTV0lUQ0hfTE9DS19BU1NFUlQo
c2MsIE1BX09XTkVEKTsKKwlyZXR1cm4gKGFyc3dpdGNoX3ZsYW5fb3Aoc2MsIEFSOFgxNl9WTEFO
X09QX1BVUkdFLCB2aWQsIDApKTsKK30KKworc3RhdGljIGludAorYXJzd2l0Y2hfZ2V0X2RvdDFx
X3ZsYW4oc3RydWN0IGFyc3dpdGNoX3NvZnRjICpzYywgdWludDMyX3QgKnBvcnRzLCBpbnQgdmlk
KQoreworCXVpbnQzMl90IHJlZzsKKwlpbnQgZXJyOworCisJQVJTV0lUQ0hfTE9DS19BU1NFUlQo
c2MsIE1BX09XTkVEKTsKKwllcnIgPSBhcnN3aXRjaF92bGFuX29wKHNjLCBBUjhYMTZfVkxBTl9P
UF9HRVQsIHZpZCwgMCk7CisJaWYgKGVycikKKwkJcmV0dXJuIChlcnIpOworCisJcmVnID0gYXJz
d2l0Y2hfcmVhZHJlZyhzYy0+c2NfZGV2LCBBUjhYMTZfUkVHX1ZMQU5fREFUQSk7CisJaWYgKChy
ZWcgJiBBUjhYMTZfVkxBTl9WQUxJRCkgPT0gMCkgeworCQkqcG9ydHMgPSAwOworCQlyZXR1cm4g
KEVJTlZBTCk7CisJfQorCXJlZyAmPSAoKDEgPDwgKHNjLT5udW1waHlzICsgMSkpIC0gMSk7CisJ
KnBvcnRzID0gcmVnOworCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyBpbnQKK2Fyc3dpdGNoX3Nl
dF9kb3QxcV92bGFuKHN0cnVjdCBhcnN3aXRjaF9zb2Z0YyAqc2MsIHVpbnQzMl90IHBvcnRzLCBp
bnQgdmlkKQoreworCWludCBlcnI7CisKKwlBUlNXSVRDSF9MT0NLX0FTU0VSVChzYywgTUFfT1dO
RUQpOworCWVyciA9IGFyc3dpdGNoX3ZsYW5fb3Aoc2MsIEFSOFgxNl9WTEFOX09QX0xPQUQsIHZp
ZCwgcG9ydHMpOworCWlmIChlcnIpCisJCXJldHVybiAoZXJyKTsKKwlyZXR1cm4gKDApOworfQor
CitzdGF0aWMgaW50CithcnN3aXRjaF9nZXRfcG9ydF92bGFuKHN0cnVjdCBhcnN3aXRjaF9zb2Z0
YyAqc2MsIHVpbnQzMl90ICpwb3J0cywgaW50IHZpZCkKK3sKKwlpbnQgcG9ydDsKKwl1aW50MzJf
dCByZWc7CisKKwlBUlNXSVRDSF9MT0NLX0FTU0VSVChzYywgTUFfT1dORUQpOworCS8qIEZvciBw
b3J0IGJhc2VkIHZsYW5zIHRoZSB2bGFuaWQgaXMgdGhlIHNhbWUgYXMgdGhlIHBvcnQgaW5kZXgu
ICovCisJcG9ydCA9IHZpZCAmIEVUSEVSU1dJVENIX1ZJRF9NQVNLOworCXJlZyA9IGFyc3dpdGNo
X3JlYWRyZWcoc2MtPnNjX2RldiwgQVI4WDE2X1JFR19QT1JUX1ZMQU4ocG9ydCkpOworCSpwb3J0
cyA9IChyZWcgPj4gQVI4WDE2X1BPUlRfVkxBTl9ERVNUX1BPUlRTX1NISUZUKTsKKwkqcG9ydHMg
Jj0gQVI4WDE2X1ZMQU5fTUVNQkVSOworCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyBpbnQKK2Fy
c3dpdGNoX3NldF9wb3J0X3ZsYW4oc3RydWN0IGFyc3dpdGNoX3NvZnRjICpzYywgdWludDMyX3Qg
cG9ydHMsIGludCB2aWQpCit7CisJaW50IGVyciwgcG9ydDsKKworCUFSU1dJVENIX0xPQ0tfQVNT
RVJUKHNjLCBNQV9PV05FRCk7CisJLyogRm9yIHBvcnQgYmFzZWQgdmxhbnMgdGhlIHZsYW5pZCBp
cyB0aGUgc2FtZSBhcyB0aGUgcG9ydCBpbmRleC4gKi8KKwlwb3J0ID0gdmlkICYgRVRIRVJTV0lU
Q0hfVklEX01BU0s7CisJZXJyID0gYXJzd2l0Y2hfbW9kaWZ5cmVnKHNjLT5zY19kZXYsIEFSOFgx
Nl9SRUdfUE9SVF9WTEFOKHBvcnQpLAorCSAgICBBUjhYMTZfVkxBTl9NRU1CRVIgPDwgQVI4WDE2
X1BPUlRfVkxBTl9ERVNUX1BPUlRTX1NISUZULAorCSAgICAocG9ydHMgJiBBUjhYMTZfVkxBTl9N
RU1CRVIpIDw8IEFSOFgxNl9QT1JUX1ZMQU5fREVTVF9QT1JUU19TSElGVCk7CisJaWYgKGVycikK
KwkJcmV0dXJuIChlcnIpOworCXJldHVybiAoMCk7Cit9CisKKy8qCisgKiBSZXNldCB2bGFucyB0
byBkZWZhdWx0IHN0YXRlLgorICovCit2b2lkCithcnN3aXRjaF9yZXNldF92bGFucyhzdHJ1Y3Qg
YXJzd2l0Y2hfc29mdGMgKnNjKQoreworCXVpbnQzMl90IHBvcnRzOworCWludCBpLCBqOworCisJ
QVJTV0lUQ0hfTE9DS19BU1NFUlQoc2MsIE1BX05PVE9XTkVEKTsKKworCUFSU1dJVENIX0xPQ0so
c2MpOworCisJLyogUmVzZXQgYWxsIHZsYW4gZGF0YS4gKi8KKwltZW1zZXQoc2MtPnZpZCwgMCwg
c2l6ZW9mKHNjLT52aWQpKTsKKworCS8qIERpc2FibGUgdGhlIFFpblEgYW5kIGVncmVzcyBmaWx0
ZXJzIGZvciBhbGwgcG9ydHMuICovCisJZm9yIChpID0gMDsgaSA8PSBzYy0+bnVtcGh5czsgaSsr
KSB7CisJCWlmIChhcnN3aXRjaF9tb2RpZnlyZWcoc2MtPnNjX2RldiwgQVI4WDE2X1JFR19QT1JU
X0NUUkwoaSksCisJCSAgICAweDMgPDwgQVI4WDE2X1BPUlRfQ1RSTF9FR1JFU1NfVkxBTl9NT0RF
X1NISUZUIHwKKwkJICAgIEFSOFgxNl9QT1JUX0NUUkxfRE9VQkxFX1RBRywgMCkpIHsKKwkJCUFS
U1dJVENIX1VOTE9DSyhzYyk7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwlpZiAoYXJzd2l0Y2hf
Zmx1c2hfZG90MXFfdmxhbihzYykpIHsKKwkJQVJTV0lUQ0hfVU5MT0NLKHNjKTsKKwkJcmV0dXJu
OworCX0KKworCWlmIChzYy0+dmxhbl9tb2RlID09IEVUSEVSU1dJVENIX1ZMQU5fRE9UMVEpIHsK
KwkJLyoKKwkJICogUmVzZXQgdGhlIHBvcnQgYmFzZWQgdmxhbiBzZXR0aW5ncyBhbmQgdHVybiBv
biB0aGUKKwkJICogaW5ncmVzcyBmaWx0ZXIgZm9yIGFsbCBwb3J0cy4KKwkJICovCisJCXBvcnRz
ID0gMDsKKwkJZm9yIChpID0gMDsgaSA8PSBzYy0+bnVtcGh5czsgaSsrKQorCQkJYXJzd2l0Y2hf
bW9kaWZ5cmVnKHNjLT5zY19kZXYsCisJCQkgICAgQVI4WDE2X1JFR19QT1JUX1ZMQU4oaSksCisJ
CQkgICAgQVI4WDE2X1BPUlRfVkxBTl9NT0RFX01BU0sgfAorCQkJICAgIEFSOFgxNl9WTEFOX01F
TUJFUiA8PAorCQkJICAgIEFSOFgxNl9QT1JUX1ZMQU5fREVTVF9QT1JUU19TSElGVCwKKwkJCSAg
ICBBUjhYMTZfUE9SVF9WTEFOX01PREVfU0VDVVJFIDw8CisJCQkgICAgQVI4WDE2X1BPUlRfVkxB
Tl9NT0RFX1NISUZUKTsKKworCQkvKgorCQkgKiBTZXR1cCB2bGFuIDEgYXMgUFZJRCBmb3IgYWxs
IHN3aXRjaCBwb3J0cy4gIEFkZCBhbGwgcG9ydHMKKwkJICogYXMgbWVtYmVycyBvZiB2bGFuIDEu
CisJCSAqLworCQlzYy0+dmlkWzBdID0gMTsKKwkJLyogU2V0IFBWSUQgZm9yIGV2ZXJ5b25lLiAq
LworCQlmb3IgKGkgPSAwOyBpIDw9IHNjLT5udW1waHlzOyBpKyspCisJCQlhcnN3aXRjaF9zZXRf
cHZpZChzYywgaSwgc2MtPnZpZFswXSk7CisJCXBvcnRzID0gMDsKKwkJZm9yIChpID0gMDsgaSA8
PSBzYy0+bnVtcGh5czsgaSsrKQorCQkJcG9ydHMgfD0gKDEgPDwgaSk7CisJCWFyc3dpdGNoX3Nl
dF9kb3QxcV92bGFuKHNjLCBwb3J0cywgc2MtPnZpZFswXSk7CisJCXNjLT52aWRbMF0gfD0gRVRI
RVJTV0lUQ0hfVklEX1ZBTElEOworCX0gZWxzZSBpZiAoc2MtPnZsYW5fbW9kZSA9PSBFVEhFUlNX
SVRDSF9WTEFOX1BPUlQpIHsKKwkJLyogSW5pdGlhbGl6ZSB0aGUgcG9ydCBiYXNlZCB2bGFucy4g
Ki8KKwkJZm9yIChpID0gMDsgaSA8PSBzYy0+bnVtcGh5czsgaSsrKSB7CisJCQlzYy0+dmlkW2ld
ID0gaSB8IEVUSEVSU1dJVENIX1ZJRF9WQUxJRDsKKwkJCXBvcnRzID0gMDsKKwkJCWZvciAoaiA9
IDA7IGogPD0gc2MtPm51bXBoeXM7IGorKykKKwkJCQlwb3J0cyB8PSAoMSA8PCBqKTsKKwkJCWFy
c3dpdGNoX21vZGlmeXJlZyhzYy0+c2NfZGV2LAorCQkJICAgIEFSOFgxNl9SRUdfUE9SVF9WTEFO
KGkpLAorCQkJICAgIEFSOFgxNl9QT1JUX1ZMQU5fTU9ERV9NQVNLIHwKKwkJCSAgICBBUjhYMTZf
VkxBTl9NRU1CRVIgPDwKKwkJCSAgICBBUjhYMTZfUE9SVF9WTEFOX0RFU1RfUE9SVFNfU0hJRlQs
CisJCQkgICAgcG9ydHMgPDwgQVI4WDE2X1BPUlRfVkxBTl9ERVNUX1BPUlRTX1NISUZUIHwKKwkJ
CSAgICBBUjhYMTZfUE9SVF9WTEFOX01PREVfU0VDVVJFIDw8CisJCQkgICAgQVI4WDE2X1BPUlRf
VkxBTl9NT0RFX1BPUlRfT05MWSk7CisJCX0KKwl9IGVsc2UgeworCQkvKiBEaXNhYmxlIHRoZSBp
bmdyZXNzIGZpbHRlciBhbmQgZ2V0IGV2ZXJ5b25lIG9uIGFsbCB2bGFucy4gKi8KKwkJZm9yIChp
ID0gMDsgaSA8PSBzYy0+bnVtcGh5czsgaSsrKQorCQkJYXJzd2l0Y2hfbW9kaWZ5cmVnKHNjLT5z
Y19kZXYsCisJCQkgICAgQVI4WDE2X1JFR19QT1JUX1ZMQU4oaSksCisJCQkgICAgQVI4WDE2X1BP
UlRfVkxBTl9NT0RFX01BU0sgfAorCQkJICAgIEFSOFgxNl9WTEFOX01FTUJFUiA8PAorCQkJICAg
IEFSOFgxNl9QT1JUX1ZMQU5fREVTVF9QT1JUU19TSElGVCwKKwkJCSAgICBBUjhYMTZfVkxBTl9N
RU1CRVIgPDwKKwkJCSAgICBBUjhYMTZfUE9SVF9WTEFOX0RFU1RfUE9SVFNfU0hJRlQgfAorCQkJ
ICAgIEFSOFgxNl9QT1JUX1ZMQU5fTU9ERV9TRUNVUkUgPDwKKwkJCSAgICBBUjhYMTZfUE9SVF9W
TEFOX01PREVfUE9SVF9PTkxZKTsKKwl9CisJQVJTV0lUQ0hfVU5MT0NLKHNjKTsKK30KKworaW50
CithcnN3aXRjaF9nZXR2Z3JvdXAoZGV2aWNlX3QgZGV2LCBldGhlcnN3aXRjaF92bGFuZ3JvdXBf
dCAqdmcpCit7CisJc3RydWN0IGFyc3dpdGNoX3NvZnRjICpzYzsKKwlpbnQgZXJyOworCisJc2Mg
PSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisJQVJTV0lUQ0hfTE9DS19BU1NFUlQoc2MsIE1BX05P
VE9XTkVEKTsKKworCWlmICh2Zy0+ZXNfdmxhbmdyb3VwID4gc2MtPmluZm8uZXNfbnZsYW5ncm91
cHMpCisJCXJldHVybiAoRUlOVkFMKTsKKworCS8qIFJlc2V0IHRoZSBtZW1iZXJzIHBvcnRzLiAq
LworCXZnLT5lc191bnRhZ2dlZF9wb3J0cyA9IDA7CisJdmctPmVzX21lbWJlcl9wb3J0cyA9IDA7
CisKKwkvKiBOb3Qgc3VwcG9ydGVkLiAqLworCXZnLT5lc19maWQgPSAwOworCisJLyogVmxhbiBJ
RC4gKi8KKwlBUlNXSVRDSF9MT0NLKHNjKTsKKwl2Zy0+ZXNfdmlkID0gc2MtPnZpZFt2Zy0+ZXNf
dmxhbmdyb3VwXTsKKwlpZiAoKHZnLT5lc192aWQgJiBFVEhFUlNXSVRDSF9WSURfVkFMSUQpID09
IDApIHsKKwkJQVJTV0lUQ0hfVU5MT0NLKHNjKTsKKwkJcmV0dXJuICgwKTsKKwl9CisKKwkvKiBN
ZW1iZXIgUG9ydHMuICovCisJc3dpdGNoIChzYy0+dmxhbl9tb2RlKSB7CisJY2FzZSBFVEhFUlNX
SVRDSF9WTEFOX0RPVDFROgorCQllcnIgPSBhcnN3aXRjaF9nZXRfZG90MXFfdmxhbihzYywgJnZn
LT5lc19tZW1iZXJfcG9ydHMsCisJCSAgICB2Zy0+ZXNfdmlkKTsKKwkJYnJlYWs7CisJY2FzZSBF
VEhFUlNXSVRDSF9WTEFOX1BPUlQ6CisJCWVyciA9IGFyc3dpdGNoX2dldF9wb3J0X3ZsYW4oc2Ms
ICZ2Zy0+ZXNfbWVtYmVyX3BvcnRzLAorCQkgICAgdmctPmVzX3ZpZCk7CisJCWJyZWFrOworCWRl
ZmF1bHQ6CisJCXZnLT5lc19tZW1iZXJfcG9ydHMgPSAwOworCQllcnIgPSAtMTsKKwl9CisJQVJT
V0lUQ0hfVU5MT0NLKHNjKTsKKwl2Zy0+ZXNfdW50YWdnZWRfcG9ydHMgPSB2Zy0+ZXNfbWVtYmVy
X3BvcnRzOworCXJldHVybiAoZXJyKTsKK30KKworaW50CithcnN3aXRjaF9zZXR2Z3JvdXAoZGV2
aWNlX3QgZGV2LCBldGhlcnN3aXRjaF92bGFuZ3JvdXBfdCAqdmcpCit7CisJc3RydWN0IGFyc3dp
dGNoX3NvZnRjICpzYzsKKwlpbnQgZXJyLCB2aWQ7CisKKwlzYyA9IGRldmljZV9nZXRfc29mdGMo
ZGV2KTsKKwlBUlNXSVRDSF9MT0NLX0FTU0VSVChzYywgTUFfTk9UT1dORUQpOworCisJLyogQ2hl
Y2sgVkxBTiBtb2RlLiAqLworCWlmIChzYy0+dmxhbl9tb2RlID09IDApCisJCXJldHVybiAoRUlO
VkFMKTsKKworCS8qCisJICogQ2hlY2sgaWYgd2UgYXJlIGNoYW5naW5nIHRoZSB2bGFuaWQgZm9y
IGFuIGFscmVhZHkgdXNlZCB2dHUgZW50cnkuCisJICogVGhlbiBwdXJnZSB0aGUgZW50cnkgZmly
c3QuCisJICovCisJQVJTV0lUQ0hfTE9DSyhzYyk7CisJdmlkID0gc2MtPnZpZFt2Zy0+ZXNfdmxh
bmdyb3VwXTsKKwlpZiAoc2MtPnZsYW5fbW9kZSA9PSBFVEhFUlNXSVRDSF9WTEFOX0RPVDFRICYm
CisJICAgICh2aWQgJiBFVEhFUlNXSVRDSF9WSURfVkFMSUQpICE9IDAgJiYKKwkgICAgKHZpZCAm
IEVUSEVSU1dJVENIX1ZJRF9NQVNLKSAhPQorCSAgICAodmctPmVzX3ZpZCAmIEVUSEVSU1dJVENI
X1ZJRF9NQVNLKSkgeworCQllcnIgPSBhcnN3aXRjaF9wdXJnZV9kb3QxcV92bGFuKHNjLCB2aWQp
OworCQlpZiAoZXJyKSB7CisJCQlBUlNXSVRDSF9VTkxPQ0soc2MpOworCQkJcmV0dXJuIChlcnIp
OworCQl9CisJfQorCisJLyogVmxhbiBJRC4gKi8KKwlpZiAoc2MtPnZsYW5fbW9kZSA9PSBFVEhF
UlNXSVRDSF9WTEFOX0RPVDFRKSB7CisJCXNjLT52aWRbdmctPmVzX3ZsYW5ncm91cF0gPSB2Zy0+
ZXNfdmlkICYgRVRIRVJTV0lUQ0hfVklEX01BU0s7CisJCS8qIFNldHRpbmcgdGhlIHZsYW5pZCB0
byB6ZXJvIGRpc2FibGVzIHRoZSB2bGFuZ3JvdXAuICovCisJCWlmIChzYy0+dmlkW3ZnLT5lc192
bGFuZ3JvdXBdID09IDApIHsKKwkJCUFSU1dJVENIX1VOTE9DSyhzYyk7CisJCQlyZXR1cm4gKDAp
OworCQl9CisJCXNjLT52aWRbdmctPmVzX3ZsYW5ncm91cF0gfD0gRVRIRVJTV0lUQ0hfVklEX1ZB
TElEOworCQl2aWQgPSBzYy0+dmlkW3ZnLT5lc192bGFuZ3JvdXBdOworCX0KKworCS8qIE1lbWJl
ciBQb3J0cy4gKi8KKwlzd2l0Y2ggKHNjLT52bGFuX21vZGUpIHsKKwljYXNlIEVUSEVSU1dJVENI
X1ZMQU5fRE9UMVE6CisJCWVyciA9IGFyc3dpdGNoX3NldF9kb3QxcV92bGFuKHNjLCB2Zy0+ZXNf
bWVtYmVyX3BvcnRzLCB2aWQpOworCQlicmVhazsKKwljYXNlIEVUSEVSU1dJVENIX1ZMQU5fUE9S
VDoKKwkJZXJyID0gYXJzd2l0Y2hfc2V0X3BvcnRfdmxhbihzYywgdmctPmVzX21lbWJlcl9wb3J0
cywgdmlkKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZXJyID0gLTE7CisJfQorCUFSU1dJVENI
X1VOTE9DSyhzYyk7CisJcmV0dXJuIChlcnIpOworfQorCitpbnQKK2Fyc3dpdGNoX2dldF9wdmlk
KHN0cnVjdCBhcnN3aXRjaF9zb2Z0YyAqc2MsIGludCBwb3J0LCBpbnQgKnB2aWQpCit7CisJdWlu
dDMyX3QgcmVnOworCisJQVJTV0lUQ0hfTE9DS19BU1NFUlQoc2MsIE1BX09XTkVEKTsKKwlyZWcg
PSBhcnN3aXRjaF9yZWFkcmVnKHNjLT5zY19kZXYsIEFSOFgxNl9SRUdfUE9SVF9WTEFOKHBvcnQp
KTsKKwkqcHZpZCA9IHJlZyAmIDB4ZmZmOworCXJldHVybiAoMCk7Cit9CisKK2ludAorYXJzd2l0
Y2hfc2V0X3B2aWQoc3RydWN0IGFyc3dpdGNoX3NvZnRjICpzYywgaW50IHBvcnQsIGludCBwdmlk
KQoreworCisJQVJTV0lUQ0hfTE9DS19BU1NFUlQoc2MsIE1BX09XTkVEKTsKKwlyZXR1cm4gKGFy
c3dpdGNoX21vZGlmeXJlZyhzYy0+c2NfZGV2LAorCSAgICBBUjhYMTZfUkVHX1BPUlRfVkxBTihw
b3J0KSwgMHhmZmYsIHB2aWQpKTsKK30KSW5kZXg6IGRldi9ldGhlcnN3aXRjaC9hcnN3aXRjaC9h
cnN3aXRjaC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGRldi9ldGhlcnN3aXRjaC9hcnN3aXRjaC9hcnN3aXRj
aC5jCShyZXZpc2lvbiAyNTA5MDEpCisrKyBkZXYvZXRoZXJzd2l0Y2gvYXJzd2l0Y2gvYXJzd2l0
Y2guYwkod29ya2luZyBjb3B5KQpAQCAtNTgsNiArNTgsNyBAQAogI2luY2x1ZGUgPGRldi9ldGhl
cnN3aXRjaC9hcnN3aXRjaC9hcnN3aXRjaHZhci5oPgogI2luY2x1ZGUgPGRldi9ldGhlcnN3aXRj
aC9hcnN3aXRjaC9hcnN3aXRjaF9yZWcuaD4KICNpbmNsdWRlIDxkZXYvZXRoZXJzd2l0Y2gvYXJz
d2l0Y2gvYXJzd2l0Y2hfcGh5Lmg+CisjaW5jbHVkZSA8ZGV2L2V0aGVyc3dpdGNoL2Fyc3dpdGNo
L2Fyc3dpdGNoX3ZsYW5zLmg+CiAKICNpbmNsdWRlIDxkZXYvZXRoZXJzd2l0Y2gvYXJzd2l0Y2gv
YXJzd2l0Y2hfNzI0MC5oPgogI2luY2x1ZGUgPGRldi9ldGhlcnN3aXRjaC9hcnN3aXRjaC9hcnN3
aXRjaF84MjE2Lmg+CkBAIC0xNjIsNiArMTYzLDc0IEBACiB9CiAKIHN0YXRpYyBpbnQKK2Fyc3dp
dGNoX3Jlc2V0KGRldmljZV90IGRldikKK3sKKworCWFyc3dpdGNoX3dyaXRlcmVnKGRldiwgQVI4
WDE2X1JFR19NQVNLX0NUUkwsCisJICAgIEFSOFgxNl9NQVNLX0NUUkxfU09GVF9SRVNFVCk7CisJ
REVMQVkoMTAwMCk7CisJaWYgKGFyc3dpdGNoX3JlYWRyZWcoZGV2LCBBUjhYMTZfUkVHX01BU0tf
Q1RSTCkgJgorCSAgICBBUjhYMTZfTUFTS19DVFJMX1NPRlRfUkVTRVQpIHsKKwkJZGV2aWNlX3By
aW50ZihkZXYsICJ1bmFibGUgdG8gcmVzZXQgc3dpdGNoXG4iKTsKKwkJcmV0dXJuICgtMSk7CisJ
fQorCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyBpbnQKK2Fyc3dpdGNoX3NldF92bGFuX21vZGUo
c3RydWN0IGFyc3dpdGNoX3NvZnRjICpzYywgdWludDMyX3QgbW9kZSkKK3sKKworCS8qIENoZWNr
IGZvciBpbnZhbGlkIG1vZGVzLiAqLworCWlmICgobW9kZSAmIHNjLT5pbmZvLmVzX3ZsYW5fY2Fw
cykgIT0gbW9kZSkKKwkJcmV0dXJuIChFSU5WQUwpOworCisJc3dpdGNoIChtb2RlKSB7CisJY2Fz
ZSBFVEhFUlNXSVRDSF9WTEFOX0RPVDFROgorCQlzYy0+dmxhbl9tb2RlID0gRVRIRVJTV0lUQ0hf
VkxBTl9ET1QxUTsKKwkJYnJlYWs7CisJY2FzZSBFVEhFUlNXSVRDSF9WTEFOX1BPUlQ6CisJCXNj
LT52bGFuX21vZGUgPSBFVEhFUlNXSVRDSF9WTEFOX1BPUlQ7CisJCWJyZWFrOworCWRlZmF1bHQ6
CisJCXNjLT52bGFuX21vZGUgPSAwOworCX07CisKKwkvKiBSZXNldCBWTEFOcy4gKi8KKwlhcnN3
aXRjaF9yZXNldF92bGFucyhzYyk7CisKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgdm9pZAor
YXJzd2l0Y2hfcG9ydHNfaW5pdChzdHJ1Y3QgYXJzd2l0Y2hfc29mdGMgKnNjKQoreworCWludCBw
b3J0OworCisJLyogUG9ydDAgLSBDUFUgKi8KKwlhcnN3aXRjaF93cml0ZXJlZyhzYy0+c2NfZGV2
LCBBUjhYMTZfUkVHX1BPUlRfU1RTKDApLAorCSAgICAoQVI4WDE2X0lTX1NXSVRDSChzYywgQVI4
MjE2KSA/CisJICAgIEFSOFgxNl9QT1JUX1NUU19TUEVFRF8xMDAgOiBBUjhYMTZfUE9SVF9TVFNf
U1BFRURfMTAwMCkgfAorCSAgICAoQVI4WDE2X0lTX1NXSVRDSChzYywgQVI4MjE2KSA/IDAgOiBB
UjhYMTZfUE9SVF9TVFNfUlhGTE9XKSB8CisJICAgIChBUjhYMTZfSVNfU1dJVENIKHNjLCBBUjgy
MTYpID8gMCA6IEFSOFgxNl9QT1JUX1NUU19UWEZMT1cpIHwKKwkgICAgQVI4WDE2X1BPUlRfU1RT
X1JYTUFDIHwKKwkgICAgQVI4WDE2X1BPUlRfU1RTX1RYTUFDIHwKKwkgICAgQVI4WDE2X1BPUlRf
U1RTX0RVUExFWCk7CisJYXJzd2l0Y2hfd3JpdGVyZWcoc2MtPnNjX2RldiwgQVI4WDE2X1JFR19Q
T1JUX0NUUkwoMCksCisJICAgIGFyc3dpdGNoX3JlYWRyZWcoc2MtPnNjX2RldiwgQVI4WDE2X1JF
R19QT1JUX0NUUkwoMCkpICYKKwkgICAgfkFSOFgxNl9QT1JUX0NUUkxfSEVBREVSKTsKKworCWZv
ciAocG9ydCA9IDE7IHBvcnQgPD0gc2MtPm51bXBoeXM7IHBvcnQrKykgeyAKKwkJLyogU2V0IHBv
cnRzIHRvIGF1dG8gbmVnb3RpYXRpb24uICovCisJCWFyc3dpdGNoX3dyaXRlcmVnKHNjLT5zY19k
ZXYsIEFSOFgxNl9SRUdfUE9SVF9TVFMocG9ydCksCisJCSAgICBBUjhYMTZfUE9SVF9TVFNfTElO
S19BVVRPKTsKKwkJYXJzd2l0Y2hfd3JpdGVyZWcoc2MtPnNjX2RldiwgQVI4WDE2X1JFR19QT1JU
X0NUUkwocG9ydCksCisJCSAgICBhcnN3aXRjaF9yZWFkcmVnKHNjLT5zY19kZXYsIEFSOFgxNl9S
RUdfUE9SVF9DVFJMKHBvcnQpKSAmCisJCSAgICB+QVI4WDE2X1BPUlRfQ1RSTF9IRUFERVIpOwor
CX0KK30KKworc3RhdGljIGludAogYXJzd2l0Y2hfYXR0YWNoKGRldmljZV90IGRldikKIHsKIAlz
dHJ1Y3QgYXJzd2l0Y2hfc29mdGMgKnNjOwpAQCAtMTkwLDExICsyNTksOCBAQAogCWVsc2UKIAkJ
cmV0dXJuIChFTlhJTyk7CiAKLQkvKgotCSAqIFhYWCB0aGVzZSB0d28gc2hvdWxkIGJlIHBhcnQg
b2YgdGhlIHN3aXRjaCBhdHRhY2ggZnVuY3Rpb24KLQkgKi8KKwkvKiBDb21tb24gZGVmYXVsdHMu
ICovCiAJc2MtPmluZm8uZXNfbnBvcnRzID0gNTsgLyogWFhYIHRlY2huaWNhbGx5IDYsIGJ1dCA2
dGggbm90IHVzZWQgKi8KLQlzYy0+aW5mby5lc19udmxhbmdyb3VwcyA9IDE2OwogCiAJLyogWFhY
IERlZmF1bHRzIGZvciBleHRlcm5hbGx5IGNvbm5lY3RlZCBBUjgzMTYgKi8KIAlzYy0+bnVtcGh5
cyA9IDQ7CkBAIC0yMTEsMzQgKzI3NywyMCBAQAogCSh2b2lkKSByZXNvdXJjZV9pbnRfdmFsdWUo
ZGV2aWNlX2dldF9uYW1lKGRldiksIGRldmljZV9nZXRfdW5pdChkZXYpLAogCSAgICAiaXNfZ21p
aSIsICZzYy0+aXNfZ21paSk7CiAKLQkvKgotCSAqIFRoaXMgcmVxdWlyZXMgbXVjaCBtb3JlIHNl
dHVwIGRlcGVuZGluZyB1cG9uIGVhY2ggY2hpcCwgaW5jbHVkaW5nOgotCSAqCi0JICogKyBQcm9w
ZXIgcmVpbml0aWFsaXNhdGlvbiBvZiB0aGUgUEhZczsKLQkgKiArIEluaXRpYWxpc2luZyB0aGUg
VkxBTiB0YWJsZTsKLQkgKiArIEluaXRpYWxpc2luZyB0aGUgcG9ydCBhY2Nlc3MgdGFibGUgYW5k
IENQVSBmbG9vZC9icm9hZGNhc3QKLQkgKiAgIGNvbmZpZ3VyYXRpb247Ci0JICogKyBPdGhlciB0
aGluZ3MgSSBoYXZlbid0IHlldCB0aG91Z2h0IG9mLgotCSAqLwotI2lmZGVmIE5PVFlFVAotCWFy
c3dpdGNoX3dyaXRlcmVnKGRldiwgQVI4WDE2X1JFR19NQVNLX0NUUkwsCi0JICAgIEFSOFgxNl9N
QVNLX0NUUkxfU09GVF9SRVNFVCk7Ci0JREVMQVkoMTAwMCk7Ci0JaWYgKGFyc3dpdGNoX3JlYWRy
ZWcoZGV2LCBBUjhYMTZfUkVHX01BU0tfQ1RSTCkgJgotCSAgICBBUjhYMTZfTUFTS19DVFJMX1NP
RlRfUkVTRVQpIHsKLQkJZGV2aWNlX3ByaW50ZihkZXYsICJ1bmFibGUgdG8gcmVzZXQgc3dpdGNo
XG4iKTsKKwlpZiAoc2MtPm51bXBoeXMgPiBBUjhYMTZfTlVNX1BIWVMpCisJCXNjLT5udW1waHlz
ID0gQVI4WDE2X05VTV9QSFlTOworCisJLyogUmVzZXQgdGhlIHN3aXRjaC4gKi8KKwlpZiAoYXJz
d2l0Y2hfcmVzZXQoZGV2KSkKIAkJcmV0dXJuIChFTlhJTyk7Ci0JfQotI2VuZGlmCiAKLQllcnIg
PSBzYy0+aGFsLmFyc3dpdGNoX2h3X3NldHVwKHNjKTsKLQlpZiAoZXJyICE9IDApCi0JCXJldHVy
biAoZXJyKTsKLQogCWVyciA9IHNjLT5oYWwuYXJzd2l0Y2hfaHdfZ2xvYmFsX3NldHVwKHNjKTsK
IAlpZiAoZXJyICE9IDApCiAJCXJldHVybiAoZXJyKTsKIAorCS8qIEluaXRpYWxpemUgdGhlIHN3
aXRjaCBwb3J0cy4gKi8KKwlhcnN3aXRjaF9wb3J0c19pbml0KHNjKTsKKwogCS8qCiAJICogQXR0
YWNoIHRoZSBQSFlzIGFuZCBjb21wbGV0ZSB0aGUgYnVzIGVudW1lcmF0aW9uLgogCSAqLwpAQCAt
MjQ2LDYgKzI5OCwxNSBAQAogCWlmIChlcnIgIT0gMCkKIAkJcmV0dXJuIChlcnIpOwogCisJLyog
RGVmYXVsdCB0byBpbmdyZXNzIGZpbHRlcnMgb2ZmLiAqLworCWVyciA9IGFyc3dpdGNoX3NldF92
bGFuX21vZGUoc2MsIDApOworCWlmIChlcnIgIT0gMCkKKwkJcmV0dXJuIChlcnIpOworCisJZXJy
ID0gc2MtPmhhbC5hcnN3aXRjaF9od19zZXR1cChzYyk7CisJaWYgKGVyciAhPSAwKQorCQlyZXR1
cm4gKGVycik7CisKIAlidXNfZ2VuZXJpY19wcm9iZShkZXYpOwogCWJ1c19lbnVtZXJhdGVfaGlu
dGVkX2NoaWxkcmVuKGRldik7CiAJZXJyID0gYnVzX2dlbmVyaWNfYXR0YWNoKGRldik7CkBAIC00
MjgsMTkgKzQ4OSwzNyBAQAogc3RhdGljIGludAogYXJzd2l0Y2hfZ2V0cG9ydChkZXZpY2VfdCBk
ZXYsIGV0aGVyc3dpdGNoX3BvcnRfdCAqcCkKIHsKLQlzdHJ1Y3QgYXJzd2l0Y2hfc29mdGMgKnNj
ID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworCXN0cnVjdCBhcnN3aXRjaF9zb2Z0YyAqc2M7CisJ
c3RydWN0IGlmbWVkaWFyZXEgKmlmbXI7CiAJc3RydWN0IG1paV9kYXRhICptaWk7Ci0Jc3RydWN0
IGlmbWVkaWFyZXEgKmlmbXIgPSAmcC0+ZXNfaWZtcjsKKwl1aW50MzJfdCByZWc7CiAJaW50IGVy
cjsKLQkKLQlpZiAocC0+ZXNfcG9ydCA8IDAgfHwgcC0+ZXNfcG9ydCA+PSBBUjhYMTZfTlVNX1BP
UlRTKQorCisJc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisJaWYgKHAtPmVzX3BvcnQgPCAw
IHx8IHAtPmVzX3BvcnQgPiBzYy0+bnVtcGh5cykKIAkJcmV0dXJuIChFTlhJTyk7Ci0JcC0+ZXNf
cHZpZCA9IDA7CiAKKwlBUlNXSVRDSF9MT0NLKHNjKTsKKworCS8qIFJldHJpZXZlIHRoZSBQVklE
LiAqLworCWFyc3dpdGNoX2dldF9wdmlkKHNjLCBwLT5lc19wb3J0LCAmcC0+ZXNfcHZpZCk7CisK
KwkvKiBQb3J0IGZsYWdzLiAqLworCXJlZyA9IGFyc3dpdGNoX3JlYWRyZWcoc2MtPnNjX2Rldiwg
QVI4WDE2X1JFR19QT1JUX0NUUkwocC0+ZXNfcG9ydCkpOworCWlmIChyZWcgJiBBUjhYMTZfUE9S
VF9DVFJMX0RPVUJMRV9UQUcpCisJCXAtPmVzX2ZsYWdzIHw9IEVUSEVSU1dJVENIX1BPUlRfRE9V
QkxFX1RBRzsKKwlyZWcgPj49IEFSOFgxNl9QT1JUX0NUUkxfRUdSRVNTX1ZMQU5fTU9ERV9TSElG
VDsKKwlpZiAoKHJlZyAmIDB4MykgPT0gQVI4WDE2X1BPUlRfQ1RSTF9FR1JFU1NfVkxBTl9NT0RF
X0FERCkKKwkJcC0+ZXNfZmxhZ3MgfD0gRVRIRVJTV0lUQ0hfUE9SVF9BRERUQUc7CisJaWYgKChy
ZWcgJiAweDMpID09IEFSOFgxNl9QT1JUX0NUUkxfRUdSRVNTX1ZMQU5fTU9ERV9TVFJJUCkKKwkJ
cC0+ZXNfZmxhZ3MgfD0gRVRIRVJTV0lUQ0hfUE9SVF9TVFJJUFRBRzsKKwlBUlNXSVRDSF9VTkxP
Q0soc2MpOworCiAJbWlpID0gYXJzd2l0Y2hfbWlpZm9ycG9ydChzYywgcC0+ZXNfcG9ydCk7CiAJ
aWYgKHAtPmVzX3BvcnQgPT0gMCkgewogCQkvKiBmaWxsIGluIGZpeGVkIHZhbHVlcyBmb3IgQ1BV
IHBvcnQgKi8KIAkJcC0+ZXNfZmxhZ3MgfD0gRVRIRVJTV0lUQ0hfUE9SVF9DUFU7CisJCWlmbXIg
PSAmcC0+ZXNfaWZtcjsKIAkJaWZtci0+aWZtX2NvdW50ID0gMDsKIAkJaWZtci0+aWZtX2N1cnJl
bnQgPSBpZm1yLT5pZm1fYWN0aXZlID0KIAkJICAgIElGTV9FVEhFUiB8IElGTV8xMDAwX1QgfCBJ
Rk1fRkRYOwpAQCAtNDU3LDMwICs1MzYsNTkgQEAKIAlyZXR1cm4gKDApOwogfQogCi0vKgotICog
WFhYIGRvZXNuJ3QgeWV0IHdvcms/Ci0gKi8KIHN0YXRpYyBpbnQKIGFyc3dpdGNoX3NldHBvcnQo
ZGV2aWNlX3QgZGV2LCBldGhlcnN3aXRjaF9wb3J0X3QgKnApCiB7CiAJaW50IGVycjsKKwl1aW50
MzJfdCByZWc7CiAJc3RydWN0IGFyc3dpdGNoX3NvZnRjICpzYzsKIAlzdHJ1Y3QgaWZtZWRpYSAq
aWZtOwogCXN0cnVjdCBtaWlfZGF0YSAqbWlpOwogCXN0cnVjdCBpZm5ldCAqaWZwOwogCi0JLyoK
LQkgKiBYWFggY2hlY2sgdGhlIHNjIG51bXBoeXMsIG9yIHRoZSAjZGVmaW5lID8KLQkgKi8KLQlp
ZiAocC0+ZXNfcG9ydCA8IDAgfHwgcC0+ZXNfcG9ydCA+PSBBUjhYMTZfTlVNX1BIWVMpCisJc2Mg
PSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisJaWYgKHAtPmVzX3BvcnQgPCAwIHx8IHAtPmVzX3Bv
cnQgPiBzYy0+bnVtcGh5cykKIAkJcmV0dXJuIChFTlhJTyk7CiAKLQlzYyA9IGRldmljZV9nZXRf
c29mdGMoZGV2KTsKKwkvKiBQb3J0IGZsYWdzLiAqLworCWlmIChzYy0+dmxhbl9tb2RlID09IEVU
SEVSU1dJVENIX1ZMQU5fRE9UMVEpIHsKIAotCS8qCi0JICogWFhYIFRPRE86IGRvbid0IHNldCB0
aGUgQ1BVIHBvcnQ/Ci0JICovCisJCUFSU1dJVENIX0xPQ0soc2MpOworCQkvKiBTZXQgdGhlIFBW
SUQuICovCisJCWlmIChwLT5lc19wdmlkICE9IDApCisJCQlhcnN3aXRjaF9zZXRfcHZpZChzYywg
cC0+ZXNfcG9ydCwgcC0+ZXNfcHZpZCk7CiAKKwkJLyogTXV0dWFsbHkgZXhjbHVzaXZlLiAqLwor
CQlpZiAocC0+ZXNfZmxhZ3MgJiBFVEhFUlNXSVRDSF9QT1JUX0FERFRBRyAmJgorCQkgICAgcC0+
ZXNfZmxhZ3MgJiBFVEhFUlNXSVRDSF9QT1JUX1NUUklQVEFHKSB7CisJCQlBUlNXSVRDSF9VTkxP
Q0soc2MpOworCQkJcmV0dXJuIChFSU5WQUwpOworCQl9CisKKwkJcmVnID0gMDsKKwkJaWYgKHAt
PmVzX2ZsYWdzICYgRVRIRVJTV0lUQ0hfUE9SVF9ET1VCTEVfVEFHKQorCQkJcmVnIHw9IEFSOFgx
Nl9QT1JUX0NUUkxfRE9VQkxFX1RBRzsKKwkJaWYgKHAtPmVzX2ZsYWdzICYgRVRIRVJTV0lUQ0hf
UE9SVF9BRERUQUcpCisJCQlyZWcgfD0gQVI4WDE2X1BPUlRfQ1RSTF9FR1JFU1NfVkxBTl9NT0RF
X0FERCA8PAorCQkJICAgIEFSOFgxNl9QT1JUX0NUUkxfRUdSRVNTX1ZMQU5fTU9ERV9TSElGVDsK
KwkJaWYgKHAtPmVzX2ZsYWdzICYgRVRIRVJTV0lUQ0hfUE9SVF9TVFJJUFRBRykKKwkJCXJlZyB8
PSBBUjhYMTZfUE9SVF9DVFJMX0VHUkVTU19WTEFOX01PREVfU1RSSVAgPDwKKwkJCSAgICBBUjhY
MTZfUE9SVF9DVFJMX0VHUkVTU19WTEFOX01PREVfU0hJRlQ7CisKKwkJZXJyID0gYXJzd2l0Y2hf
bW9kaWZ5cmVnKHNjLT5zY19kZXYsCisJCSAgICBBUjhYMTZfUkVHX1BPUlRfQ1RSTChwLT5lc19w
b3J0KSwKKwkJICAgIDB4MyA8PCBBUjhYMTZfUE9SVF9DVFJMX0VHUkVTU19WTEFOX01PREVfU0hJ
RlQgfAorCQkgICAgQVI4WDE2X1BPUlRfQ1RSTF9ET1VCTEVfVEFHLCByZWcpOworCisJCUFSU1dJ
VENIX1VOTE9DSyhzYyk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gKGVycik7CisgICAgICAgIH0K
KworCS8qIERvIG5vdCBhbGxvdyBtZWRpYSBjaGFuZ2VzIG9uIENQVSBwb3J0LiAqLworCWlmIChw
LT5lc19wb3J0ID09IEFSOFgxNl9QT1JUX0NQVSkKKwkJcmV0dXJuICgwKTsKKwogCW1paSA9IGFy
c3dpdGNoX21paWZvcnBvcnQoc2MsIHAtPmVzX3BvcnQpOwogCWlmIChtaWkgPT0gTlVMTCkKIAkJ
cmV0dXJuIChFTlhJTyk7CkBAIC00ODgsMzAgKzU5Niw5IEBACiAJaWZwID0gYXJzd2l0Y2hfaWZw
Zm9ycG9ydChzYywgcC0+ZXNfcG9ydCk7CiAKIAlpZm0gPSAmbWlpLT5taWlfbWVkaWE7Ci0JZXJy
ID0gaWZtZWRpYV9pb2N0bChpZnAsICZwLT5lc19pZnIsIGlmbSwgU0lPQ1NJRk1FRElBKTsKLQly
ZXR1cm4gKGVycik7CisJcmV0dXJuIChpZm1lZGlhX2lvY3RsKGlmcCwgJnAtPmVzX2lmciwgaWZt
LCBTSU9DU0lGTUVESUEpKTsKIH0KIAotc3RhdGljIGludAotYXJzd2l0Y2hfZ2V0dmdyb3VwKGRl
dmljZV90IGRldiwgZXRoZXJzd2l0Y2hfdmxhbmdyb3VwX3QgKnZnKQotewotCi0JLyogWFhYIG5v
dCBpbXBsZW1lbnRlZCB5ZXQgKi8KLQl2Zy0+ZXNfdmlkID0gMDsKLQl2Zy0+ZXNfbWVtYmVyX3Bv
cnRzID0gMDsKLQl2Zy0+ZXNfdW50YWdnZWRfcG9ydHMgPSAwOwotCXZnLT5lc19maWQgPSAwOwot
CXJldHVybiAoMCk7Ci19Ci0KLXN0YXRpYyBpbnQKLWFyc3dpdGNoX3NldHZncm91cChkZXZpY2Vf
dCBkZXYsIGV0aGVyc3dpdGNoX3ZsYW5ncm91cF90ICp2ZykKLXsKLQotCS8qIFhYWCBub3QgaW1w
bGVtZW50ZWQgeWV0ICovCi0JcmV0dXJuICgwKTsKLX0KLQogc3RhdGljIHZvaWQKIGFyc3dpdGNo
X3N0YXRjaGcoZGV2aWNlX3QgZGV2KQogewpAQCAtNTQ2LDYgKzYzMywzOCBAQAogCWlmbXItPmlm
bV9zdGF0dXMgPSBtaWktPm1paV9tZWRpYV9zdGF0dXM7CiB9CiAKK3N0YXRpYyBpbnQKK2Fyc3dp
dGNoX2dldGNvbmYoZGV2aWNlX3QgZGV2LCBldGhlcnN3aXRjaF9jb25mX3QgKmNvbmYpCit7CisJ
c3RydWN0IGFyc3dpdGNoX3NvZnRjICpzYzsKKworCXNjID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYp
OworCisJLyogUmV0dXJuIHRoZSBWTEFOIG1vZGUuICovCisJY29uZi0+Y21kID0gRVRIRVJTV0lU
Q0hfQ09ORl9WTEFOX01PREU7CisJY29uZi0+dmxhbl9tb2RlID0gc2MtPnZsYW5fbW9kZTsKKwor
CXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyBpbnQKK2Fyc3dpdGNoX3NldGNvbmYoZGV2aWNlX3Qg
ZGV2LCBldGhlcnN3aXRjaF9jb25mX3QgKmNvbmYpCit7CisJc3RydWN0IGFyc3dpdGNoX3NvZnRj
ICpzYzsKKwlpbnQgZXJyOworCisJc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisKKwkvKiBT
ZXQgdGhlIFZMQU4gbW9kZS4gKi8KKwlpZiAoY29uZi0+Y21kICYgRVRIRVJTV0lUQ0hfQ09ORl9W
TEFOX01PREUpIHsKKwkJZXJyID0gYXJzd2l0Y2hfc2V0X3ZsYW5fbW9kZShzYywgY29uZi0+dmxh
bl9tb2RlKTsKKwkJaWYgKGVyciAhPSAwKQorCQkJcmV0dXJuIChlcnIpOworCX0KKworCXJldHVy
biAoMCk7Cit9CisKIHN0YXRpYyBkZXZpY2VfbWV0aG9kX3QgYXJzd2l0Y2hfbWV0aG9kc1tdID0g
ewogCS8qIERldmljZSBpbnRlcmZhY2UgKi8KIAlERVZNRVRIT0QoZGV2aWNlX3Byb2JlLAkJYXJz
d2l0Y2hfcHJvYmUpLApAQCAtNTc2LDYgKzY5NSw4IEBACiAJREVWTUVUSE9EKGV0aGVyc3dpdGNo
X3NldHBvcnQsCWFyc3dpdGNoX3NldHBvcnQpLAogCURFVk1FVEhPRChldGhlcnN3aXRjaF9nZXR2
Z3JvdXAsCWFyc3dpdGNoX2dldHZncm91cCksCiAJREVWTUVUSE9EKGV0aGVyc3dpdGNoX3NldHZn
cm91cCwJYXJzd2l0Y2hfc2V0dmdyb3VwKSwKKwlERVZNRVRIT0QoZXRoZXJzd2l0Y2hfZ2V0Y29u
ZiwJYXJzd2l0Y2hfZ2V0Y29uZiksCisJREVWTUVUSE9EKGV0aGVyc3dpdGNoX3NldGNvbmYsCWFy
c3dpdGNoX3NldGNvbmYpLAogCiAJREVWTUVUSE9EX0VORAogfTsKSW5kZXg6IGRldi9ldGhlcnN3
aXRjaC9hcnN3aXRjaC9hcnN3aXRjaF83MjQwLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZGV2L2V0aGVyc3dp
dGNoL2Fyc3dpdGNoL2Fyc3dpdGNoXzcyNDAuYwkocmV2aXNpb24gMjUwOTAxKQorKysgZGV2L2V0
aGVyc3dpdGNoL2Fyc3dpdGNoL2Fyc3dpdGNoXzcyNDAuYwkod29ya2luZyBjb3B5KQpAQCAtNzEs
MTYgKzcxLDYgQEAKIGFyNzI0MF9od19zZXR1cChzdHJ1Y3QgYXJzd2l0Y2hfc29mdGMgKnNjKQog
ewogCi0JLyogRW5hYmxlIENQVSBwb3J0OyBkaXNhYmxlIG1pcnJvciBwb3J0ICovCi0JYXJzd2l0
Y2hfd3JpdGVyZWcoc2MtPnNjX2RldiwgQVI4WDE2X1JFR19DUFVfUE9SVCwKLQkgICAgQVI4WDE2
X0NQVV9QT1JUX0VOIHwgQVI4WDE2X0NQVV9NSVJST1JfRElTKTsKLQotCS8qCi0JICogTGV0IHRo
aW5ncyBzZXR0bGU7IHByb2JpbmcgUEhZNCBkb2Vzbid0IHNlZW0gcmVsaWFibGUKLQkgKiB3aXRo
b3V0IGEgbGl0bGUgZGVsYXkuCi0JICovCi0JREVMQVkoMTAwMCk7Ci0KIAlyZXR1cm4gKDApOwog
fQogCkBAIC05MSw2ICs4MSwxMCBAQAogYXI3MjQwX2h3X2dsb2JhbF9zZXR1cChzdHJ1Y3QgYXJz
d2l0Y2hfc29mdGMgKnNjKQogewogCisJLyogRW5hYmxlIENQVSBwb3J0OyBkaXNhYmxlIG1pcnJv
ciBwb3J0ICovCisJYXJzd2l0Y2hfd3JpdGVyZWcoc2MtPnNjX2RldiwgQVI4WDE2X1JFR19DUFVf
UE9SVCwKKwkgICAgQVI4WDE2X0NQVV9QT1JUX0VOIHwgQVI4WDE2X0NQVV9NSVJST1JfRElTKTsK
KwogCS8qIFNldHVwIFRBRyBwcmlvcml0eSBtYXBwaW5nICovCiAJYXJzd2l0Y2hfd3JpdGVyZWco
c2MtPnNjX2RldiwgQVI4WDE2X1JFR19UQUdfUFJJTywgMHhmYTUwKTsKIApAQCAtMTM5LDQgKzEz
Myw5IEBACiAKIAlzYy0+aGFsLmFyc3dpdGNoX2h3X3NldHVwID0gYXI3MjQwX2h3X3NldHVwOwog
CXNjLT5oYWwuYXJzd2l0Y2hfaHdfZ2xvYmFsX3NldHVwID0gYXI3MjQwX2h3X2dsb2JhbF9zZXR1
cDsKKworCS8qIFNldCB0aGUgc3dpdGNoIHZsYW4gY2FwYWJpbGl0aWVzLiAqLworCXNjLT5pbmZv
LmVzX3ZsYW5fY2FwcyA9IEVUSEVSU1dJVENIX1ZMQU5fRE9UMVEgfAorCSAgICBFVEhFUlNXSVRD
SF9WTEFOX1BPUlQgfCBFVEhFUlNXSVRDSF9WTEFOX0RPVUJMRV9UQUc7CisJc2MtPmluZm8uZXNf
bnZsYW5ncm91cHMgPSBBUjhYMTZfTUFYX1ZMQU5TOwogfQpJbmRleDogZGV2L2V0aGVyc3dpdGNo
L2Fyc3dpdGNoL2Fyc3dpdGNoXzgyMTYuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBkZXYvZXRoZXJzd2l0Y2gv
YXJzd2l0Y2gvYXJzd2l0Y2hfODIxNi5jCShyZXZpc2lvbiAyNTA5MDEpCisrKyBkZXYvZXRoZXJz
d2l0Y2gvYXJzd2l0Y2gvYXJzd2l0Y2hfODIxNi5jCSh3b3JraW5nIGNvcHkpCkBAIC04OSw0ICs4
OSw2IEBACiAKIAlzYy0+aGFsLmFyc3dpdGNoX2h3X3NldHVwID0gYXI4MjE2X2h3X3NldHVwOwog
CXNjLT5oYWwuYXJzd2l0Y2hfaHdfZ2xvYmFsX3NldHVwID0gYXI4MjE2X2h3X2dsb2JhbF9zZXR1
cDsKKworCXNjLT5pbmZvLmVzX252bGFuZ3JvdXBzID0gMDsKIH0KSW5kZXg6IGRldi9ldGhlcnN3
aXRjaC9hcnN3aXRjaC9hcnN3aXRjaF84MjI2LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZGV2L2V0aGVyc3dp
dGNoL2Fyc3dpdGNoL2Fyc3dpdGNoXzgyMjYuYwkocmV2aXNpb24gMjUwOTAxKQorKysgZGV2L2V0
aGVyc3dpdGNoL2Fyc3dpdGNoL2Fyc3dpdGNoXzgyMjYuYwkod29ya2luZyBjb3B5KQpAQCAtODks
NCArODksNiBAQAogCiAJc2MtPmhhbC5hcnN3aXRjaF9od19zZXR1cCA9IGFyODIyNl9od19zZXR1
cDsKIAlzYy0+aGFsLmFyc3dpdGNoX2h3X2dsb2JhbF9zZXR1cCA9IGFyODIyNl9od19nbG9iYWxf
c2V0dXA7CisKKwlzYy0+aW5mby5lc19udmxhbmdyb3VwcyA9IDA7CiB9CkluZGV4OiBkZXYvZXRo
ZXJzd2l0Y2gvYXJzd2l0Y2gvYXJzd2l0Y2hfODMxNi5jCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRldi9ldGhl
cnN3aXRjaC9hcnN3aXRjaC9hcnN3aXRjaF84MzE2LmMJKHJldmlzaW9uIDI1MDkwMSkKKysrIGRl
di9ldGhlcnN3aXRjaC9hcnN3aXRjaC9hcnN3aXRjaF84MzE2LmMJKHdvcmtpbmcgY29weSkKQEAg
LTEyNyw4ICsxMjcsMTkgQEAKIGFyODMxNl9od19nbG9iYWxfc2V0dXAoc3RydWN0IGFyc3dpdGNo
X3NvZnRjICpzYykKIHsKIAotCWFyc3dpdGNoX3dyaXRlcmVnKHNjLT5zY19kZXYsIDB4MzgsIDB4
YzAwMDA1MGUpOworCWFyc3dpdGNoX3dyaXRlcmVnKHNjLT5zY19kZXYsIDB4MzgsIEFSOFgxNl9N
QUdJQyk7CiAKKwkvKiBFbmFibGUgQ1BVIHBvcnQgYW5kIGRpc2FibGUgbWlycm9yIHBvcnQuICov
CisJYXJzd2l0Y2hfd3JpdGVyZWcoc2MtPnNjX2RldiwgQVI4WDE2X1JFR19DUFVfUE9SVCwKKwkg
ICAgQVI4WDE2X0NQVV9QT1JUX0VOIHwgQVI4WDE2X0NQVV9NSVJST1JfRElTKTsKKworCS8qIFNl
dHVwIFRBRyBwcmlvcml0eSBtYXBwaW5nLiAqLworCWFyc3dpdGNoX3dyaXRlcmVnKHNjLT5zY19k
ZXYsIEFSOFgxNl9SRUdfVEFHX1BSSU8sIDB4ZmE1MCk7CisKKwkvKiBFbmFibGUgQVJQIGZyYW1l
IGFja25vd2xlZGdlLiAqLworCWFyc3dpdGNoX21vZGlmeXJlZyhzYy0+c2NfZGV2LCBBUjhYMTZf
UkVHX0FUX0NUUkwsIDAsCisJICAgIEFSOFgxNl9BVF9DVFJMX0FSUF9FTik7CisKIAkvKgogCSAq
IEZsb29kIGFkZHJlc3MgdGFibGUgbWlzc2VzIHRvIGFsbCBwb3J0cywgYW5kIGVuYWJsZSBmb3J3
YXJkaW5nIG9mCiAJICogYnJvYWRjYXN0cyB0byB0aGUgY3B1IHBvcnQuCkBAIC0xMzYsOSArMTQ3
LDE0IEBACiAJYXJzd2l0Y2hfd3JpdGVyZWcoc2MtPnNjX2RldiwgQVI4WDE2X1JFR19GTE9PRF9N
QVNLLAogCSAgICBBUjhYMTZfRkxPT0RfTUFTS19CQ0FTVF9UT19DUFUgfCAweDAwM2YwMDNmKTsK
IAorCS8qIEVuYWJsZSBqdW1ibyBmcmFtZXMuICovCiAJYXJzd2l0Y2hfbW9kaWZ5cmVnKHNjLT5z
Y19kZXYsIEFSOFgxNl9SRUdfR0xPQkFMX0NUUkwsCiAJICAgIEFSODMxNl9HTE9CQUxfQ1RSTF9N
VFVfTUFTSywgOTAxOCArIDggKyAyKTsKIAorCS8qIFNldHVwIHNlcnZpY2UgVEFHLiAqLworCWFy
c3dpdGNoX21vZGlmeXJlZyhzYy0+c2NfZGV2LCBBUjhYMTZfUkVHX1NFUlZJQ0VfVEFHLAorCSAg
ICBBUjhYMTZfU0VSVklDRV9UQUdfTUFTSywgMCk7CisKIAlyZXR1cm4gKDApOwogfQogCkBAIC0x
NDgsNCArMTY0LDkgQEAKIAogCXNjLT5oYWwuYXJzd2l0Y2hfaHdfc2V0dXAgPSBhcjgzMTZfaHdf
c2V0dXA7CiAJc2MtPmhhbC5hcnN3aXRjaF9od19nbG9iYWxfc2V0dXAgPSBhcjgzMTZfaHdfZ2xv
YmFsX3NldHVwOworCisJLyogU2V0IHRoZSBzd2l0Y2ggdmxhbiBjYXBhYmlsaXRpZXMuICovCisJ
c2MtPmluZm8uZXNfdmxhbl9jYXBzID0gRVRIRVJTV0lUQ0hfVkxBTl9ET1QxUSB8CisJICAgIEVU
SEVSU1dJVENIX1ZMQU5fUE9SVCB8IEVUSEVSU1dJVENIX1ZMQU5fRE9VQkxFX1RBRzsKKwlzYy0+
aW5mby5lc19udmxhbmdyb3VwcyA9IEFSOFgxNl9NQVhfVkxBTlM7CiB9CkluZGV4OiBkZXYvZXRo
ZXJzd2l0Y2gvYXJzd2l0Y2gvYXJzd2l0Y2hfcGh5LmMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZGV2L2V0aGVy
c3dpdGNoL2Fyc3dpdGNoL2Fyc3dpdGNoX3BoeS5jCShyZXZpc2lvbiAyNTA5MDEpCisrKyBkZXYv
ZXRoZXJzd2l0Y2gvYXJzd2l0Y2gvYXJzd2l0Y2hfcGh5LmMJKHdvcmtpbmcgY29weSkKQEAgLTEy
NywxNiArMTI3LDEzIEBACiAJCXJldHVybiAoRU5YSU8pOwogCiAJQVJTV0lUQ0hfTE9DSyhzYyk7
Ci0JZXJyID0gYXJzd2l0Y2hfd3JpdGVyZWdfbHNiKGRldiwgQVI4WDE2X1JFR19NRElPX0NUUkws
Ci0JICAgIChkYXRhICYgQVI4WDE2X01ESU9fQ1RSTF9EQVRBX01BU0spKTsKLQlpZiAoZXJyICE9
IDApCi0JCWdvdG8gb3V0OwotCWVyciA9IGFyc3dpdGNoX3dyaXRlcmVnX21zYihkZXYsIEFSOFgx
Nl9SRUdfTURJT19DVFJMLAorCWVyciA9IGFyc3dpdGNoX3dyaXRlcmVnKGRldiwgQVI4WDE2X1JF
R19NRElPX0NUUkwsCiAJICAgIEFSOFgxNl9NRElPX0NUUkxfQlVTWSB8CiAJICAgIEFSOFgxNl9N
RElPX0NUUkxfTUFTVEVSX0VOIHwKIAkgICAgQVI4WDE2X01ESU9fQ1RSTF9DTURfV1JJVEUgfAog
CSAgICAocGh5IDw8IEFSOFgxNl9NRElPX0NUUkxfUEhZX0FERFJfU0hJRlQpIHwKLQkgICAgKHJl
ZyA8PCBBUjhYMTZfTURJT19DVFJMX1JFR19BRERSX1NISUZUKSk7CisJICAgIChyZWcgPDwgQVI4
WDE2X01ESU9fQ1RSTF9SRUdfQUREUl9TSElGVCkgfAorCSAgICAoZGF0YSAmIEFSOFgxNl9NRElP
X0NUUkxfREFUQV9NQVNLKSk7CiAJaWYgKGVyciAhPSAwKQogCQlnb3RvIG91dDsKIAlmb3IgKHRp
bWVvdXQgPSAxMDA7IHRpbWVvdXQtLTsgKSB7CkluZGV4OiBkZXYvZXRoZXJzd2l0Y2gvYXJzd2l0
Y2gvYXJzd2l0Y2hfcmVnLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZGV2L2V0aGVyc3dpdGNoL2Fyc3dpdGNo
L2Fyc3dpdGNoX3JlZy5jCShyZXZpc2lvbiAyNTA5MDEpCisrKyBkZXYvZXRoZXJzd2l0Y2gvYXJz
d2l0Y2gvYXJzd2l0Y2hfcmVnLmMJKHdvcmtpbmcgY29weSkKQEAgLTcyLDE3ICs3MiwxMCBAQAog
CSpwaHkgPSAoKChhZGRyKSA+PiA2KSAmIDB4MDcpIHwgMHgxMDsKIAkqcmVnID0gKChhZGRyKSA+
PiAxKSAmIDB4MWY7CiAKLQkvKgotCSAqIFRoZSBlYXJsaWVyIGNvZGUgd291bGQgb25seSBzd2l0
Y2ggdGhlIHBhZ2UKLQkgKiBvdmVyIGlmIHRoZSBwYWdlIHdlcmUgZGlmZmVyZW50LiAgRXhwZXJp
bWVudHMgaGF2ZQotCSAqIHNob3duIHRoYXQgdGhpcyBpcyB1bnN0YWJsZS4KLQkgKgotCSAqIEhl
bmNlLCB0aGUgcGFnZSBpcyBhbHdheXMgc2V0IGhlcmUuCi0JICoKLQkgKiBTZWUgUFIga2Vybi8x
NzI5NjgKLQkgKi8KLQlNRElPX1dSSVRFUkVHKGRldmljZV9nZXRfcGFyZW50KGRldiksIDB4MTgs
IDAsIHBhZ2UpOwotCXNjLT5wYWdlID0gcGFnZTsKKwlpZiAoc2MtPnBhZ2UgIT0gcGFnZSkgewor
CQlNRElPX1dSSVRFUkVHKGRldmljZV9nZXRfcGFyZW50KGRldiksIDB4MTgsIDAsIHBhZ2UpOwor
CQlzYy0+cGFnZSA9IHBhZ2U7CisJfQogfQogCiAvKgpAQCAtMTcxLDggKzE2NCw4IEBACiB7CiAK
IAkvKiBYWFggQ2hlY2sgdGhlIGZpcnN0IHdyaXRlIHRvbz8gKi8KLQlhcnN3aXRjaF93cml0ZXJl
Z19sc2IoZGV2LCBhZGRyLCB2YWx1ZSk7Ci0JcmV0dXJuIChhcnN3aXRjaF93cml0ZXJlZ19tc2Io
ZGV2LCBhZGRyLCB2YWx1ZSkpOworCWFyc3dpdGNoX3dyaXRlcmVnX21zYihkZXYsIGFkZHIsIHZh
bHVlKTsKKwlyZXR1cm4gKGFyc3dpdGNoX3dyaXRlcmVnX2xzYihkZXYsIGFkZHIsIHZhbHVlKSk7
CiB9CiAKIGludApAQCAtMTg1LDMgKzE3OCwyNCBAQAogCXZhbHVlIHw9IHNldDsKIAlyZXR1cm4g
KGFyc3dpdGNoX3dyaXRlcmVnKGRldiwgYWRkciwgdmFsdWUpKTsKIH0KKworaW50CithcnN3aXRj
aF93YWl0cmVnKGRldmljZV90IGRldiwgaW50IGFkZHIsIGludCBtYXNrLCBpbnQgdmFsLCBpbnQg
dGltZW91dCkKK3sKKwlpbnQgZXJyLCB2OworCisJZXJyID0gLTE7CisJd2hpbGUgKDEpIHsKKwkJ
diA9IGFyc3dpdGNoX3JlYWRyZWcoZGV2LCBhZGRyKTsKKwkJdiAmPSBtYXNrOworCQlpZiAodiA9
PSB2YWwpIHsKKwkJCWVyciA9IDA7CisJCQlicmVhazsKKwkJfQorCQlpZiAoIXRpbWVvdXQpCisJ
CQlicmVhazsKKwkJREVMQVkoMSk7CisJCXRpbWVvdXQtLTsKKwl9CisJcmV0dXJuIChlcnIpOwor
fQpJbmRleDogZGV2L2V0aGVyc3dpdGNoL2Fyc3dpdGNoL2Fyc3dpdGNoX3JlZy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIGRldi9ldGhlcnN3aXRjaC9hcnN3aXRjaC9hcnN3aXRjaF9yZWcuaAkocmV2aXNpb24g
MjUwOTAxKQorKysgZGV2L2V0aGVyc3dpdGNoL2Fyc3dpdGNoL2Fyc3dpdGNoX3JlZy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiBleHRlcm4JaW50IGFyc3dpdGNoX3JlYWRyZWco
ZGV2aWNlX3QgZGV2LCBpbnQgYWRkcik7CiBleHRlcm4JaW50IGFyc3dpdGNoX3dyaXRlcmVnKGRl
dmljZV90IGRldiwgaW50IGFkZHIsIGludCB2YWx1ZSk7CiBleHRlcm4JaW50IGFyc3dpdGNoX21v
ZGlmeXJlZyhkZXZpY2VfdCBkZXYsIGludCBhZGRyLCBpbnQgbWFzaywgaW50IHNldCk7CitleHRl
cm4JaW50IGFyc3dpdGNoX3dhaXRyZWcoZGV2aWNlX3QsIGludCwgaW50LCBpbnQsIGludCk7CiAK
IGV4dGVybglpbnQgYXJzd2l0Y2hfcmVhZHJlZ19sc2IoZGV2aWNlX3QgZGV2LCBpbnQgYWRkcik7
CiBleHRlcm4JaW50IGFyc3dpdGNoX3JlYWRyZWdfbXNiKGRldmljZV90IGRldiwgaW50IGFkZHIp
OwpJbmRleDogZGV2L2V0aGVyc3dpdGNoL2Fyc3dpdGNoL2Fyc3dpdGNocmVnLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gZGV2L2V0aGVyc3dpdGNoL2Fyc3dpdGNoL2Fyc3dpdGNocmVnLmgJKHJldmlzaW9uIDI1
MDkwMSkKKysrIGRldi9ldGhlcnN3aXRjaC9hcnN3aXRjaC9hcnN3aXRjaHJlZy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTQsNyArMTE0LDcgQEAKICNkZWZpbmUJCUFSOFgxNl9WTEFOX1BSSU9fRU4J
CSgxIDw8IDMxKQogCiAjZGVmaW5lCUFSOFgxNl9SRUdfVkxBTl9EQVRBCQkweDAwNDQKLSNkZWZp
bmUJCUFSOFgxNl9WTEFOX01FTUJFUgkJMHgwMDAwMDNmZgorI2RlZmluZQkJQVI4WDE2X1ZMQU5f
TUVNQkVSCQkweDAwMDAwMDNmCiAjZGVmaW5lCQlBUjhYMTZfVkxBTl9WQUxJRAkJKDEgPDwgMTEp
CiAKICNkZWZpbmUJQVI4WDE2X1JFR19BUkxfQ1RSTDAJCTB4MDA1MApJbmRleDogZGV2L2V0aGVy
c3dpdGNoL2Fyc3dpdGNoL2Fyc3dpdGNodmFyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZGV2L2V0aGVyc3dp
dGNoL2Fyc3dpdGNoL2Fyc3dpdGNodmFyLmgJKHJldmlzaW9uIDI1MDkwMSkKKysrIGRldi9ldGhl
cnN3aXRjaC9hcnN3aXRjaC9hcnN3aXRjaHZhci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw4ICs0
Miw2IEBACiAjZGVmaW5lCUFSOFgxNl9JU19TV0lUQ0goX3NjLCBfdHlwZSkgXAogCSAgICAoISEo
KF9zYyktPnNjX3N3aXRjaHR5cGUgPT0gQVI4WDE2X1NXSVRDSF8gIyMgX3R5cGUpKQogCi1zdHJ1
Y3QgYXJzd2l0Y2hfc29mdGM7Ci0KIHN0cnVjdCBhcnN3aXRjaF9zb2Z0YyB7CiAJc3RydWN0IG10
eAlzY19tdHg7CQkvKiBzZXJpYWxpemUgYWNjZXNzIHRvIHNvZnRjICovCiAJZGV2aWNlX3QJc2Nf
ZGV2OwpAQCAtNTksNiArNTcsMTAgQEAKIAlzdHJ1Y3QgY2FsbG91dAljYWxsb3V0X3RpY2s7CiAJ
ZXRoZXJzd2l0Y2hfaW5mb190IGluZm87CiAKKwkvKiBWTEFOcyBzdXBwb3J0ICovCisJaW50CQl2
aWRbQVI4WDE2X01BWF9WTEFOU107CisJdWludDMyX3QJdmxhbl9tb2RlOworCiAJc3RydWN0IHsK
IAkJaW50ICgqIGFyc3dpdGNoX2h3X3NldHVwKSAoc3RydWN0IGFyc3dpdGNoX3NvZnRjICopOwog
CQlpbnQgKCogYXJzd2l0Y2hfaHdfZ2xvYmFsX3NldHVwKSAoc3RydWN0IGFyc3dpdGNoX3NvZnRj
ICopOwo=
--001a11c25f8c14fa0604df0a1f5c--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAB=2f8y1tmCKZR=WoBkvdgVeWDaQqRAU9AOrJ5qfb5M189LCPA>