Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 15 Nov 2015 17:41:25 -0500 (EST)
From:      Rick Macklem <rmacklem@uoguelph.ca>
To:        FreeBSD FS <freebsd-fs@freebsd.org>
Cc:        Josh Paetzel <jpaetzel@freebsd.org>
Subject:   adding "-manage-gids" option to the NFS server
Message-ID:  <615448118.87814648.1447627285484.JavaMail.zimbra@uoguelph.ca>
In-Reply-To: <955813846.87814328.1447627236926.JavaMail.zimbra@uoguelph.ca>

next in thread | previous in thread | raw e-mail | index | archive | help
------=_Part_87814644_309663547.1447627285467
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit

Hi,

The attached 3 patches add the "-manage-gids" option to the NFS server.
When enabled, for AUTH_SYS RPC requests, the server will use the list of
groups that are assigned to the uid on the server instead of the list of
gids in the RPC request.

This can be used to avoid the limit of 16 groups in the RPC header.

It does require that the NFS server be configured with the same passwd and
group databases as the NFS client(s). It uses getgrouplist(3) on the server
to get the group list, so that must work correctly on the server.
It uses the same cache as the name<->id cache used for NFSv4. As such,
the option is on the nfsuserd command line and it must be running for this
to work for NFSv3 and/or NFSv4.

Josh Paetzel already asked if this option was reasonable and got a positive
response.

Please review and/or test these patches, rick
ps: I tried to put them in reviews.freebsd.org, but failed miserably, so
    I've attached them here.

------=_Part_87814644_309663547.1447627285467
Content-Type: text/x-patch; name=mapgrp-rc.patch
Content-Disposition: attachment; filename=mapgrp-rc.patch
Content-Transfer-Encoding: base64

LS0tIGV0Yy9yYy5kL25mc2Qub3JpZwkyMDE1LTExLTE1IDE3OjM4OjExLjMxNjU2NDAwMCAtMDUw
MAorKysgZXRjL3JjLmQvbmZzZAkyMDE1LTExLTE1IDE3OjQyOjA5LjcyMTk5MTAwMCAtMDUwMApA
QCAtMzIsMTAgKzMyLDEzIEBAIG5mc2RfcHJlY21kKCkKIAkJc3lzY3RsIHZmcy5uZnNkLm5mc19w
cml2cG9ydD0wID4gL2Rldi9udWxsCiAJZmkKIAotCWlmIGNoZWNreWVzbm8gbmZzdjRfc2VydmVy
X2VuYWJsZTsgdGhlbgorCWlmIGNoZWNreWVzbm8gbmZzdjRfc2VydmVyX2VuYWJsZSB8fCBcCisJ
ICAgIGNoZWNreWVzbm8gbmZzX3NlcnZlcl9tYW5hZ2VnaWRzOyB0aGVuCiAJCXN5c2N0bCB2ZnMu
bmZzZC5zZXJ2ZXJfbWF4X25mc3ZlcnM9NCA+IC9kZXYvbnVsbAogCQlmb3JjZV9kZXBlbmQgbmZz
dXNlcmQgfHwgZXJyIDEgIkNhbm5vdCBydW4gbmZzdXNlcmQiCi0JZWxzZQorCWZpCisKKwlpZiAh
IGNoZWNreWVzbm8gbmZzdjRfc2VydmVyX2VuYWJsZTsgdGhlbgogCQllY2hvICdORlN2NCBpcyBk
aXNhYmxlZCcKIAkJc3lzY3RsIHZmcy5uZnNkLnNlcnZlcl9tYXhfbmZzdmVycz0zID4gL2Rldi9u
dWxsCiAJZmkKLS0tIGV0Yy9yYy5kL25mc3VzZXJkLm9yaWcJMjAxNS0xMS0xNSAxNzozODoxMS4z
MTgxNzgwMDAgLTA1MDAKKysrIGV0Yy9yYy5kL25mc3VzZXJkCTIwMTUtMTEtMTUgMTc6Mzk6MDMu
NTY5NTU1MDAwIC0wNTAwCkBAIC0xNSw1ICsxNSwxNCBAQCBjb21tYW5kPSIvdXNyL3NiaW4vJHtu
YW1lfSIKIHNpZ19zdG9wPSJVU1IxIgogCiBsb2FkX3JjX2NvbmZpZyAkbmFtZQorc3RhcnRfcHJl
Y21kPSJuZnN1c2VyZF9wcmVjbWQiCisKK25mc3VzZXJkX3ByZWNtZCgpCit7CisJaWYgY2hlY2t5
ZXNubyBuZnNfc2VydmVyX21hbmFnZWdpZHM7IHRoZW4KKwkJcmNfZmxhZ3M9Ii1tYW5hZ2UtZ2lk
cyAke25mc3VzZXJkX2ZsYWdzfSIKKwlmaQorCXJldHVybiAwCit9CiAKIHJ1bl9yY19jb21tYW5k
ICIkMSIKLS0tIGV0Yy9kZWZhdWx0cy9yYy5jb25mLm9yaWcJMjAxNS0xMS0xNSAxNzozODozMC42
NTMzNjQwMDAgLTA1MDAKKysrIGV0Yy9kZWZhdWx0cy9yYy5jb25mCTIwMTUtMTEtMTUgMTc6NDM6
NDUuNDgwMjE0MDAwIC0wNTAwCkBAIC0zMjUsNiArMzI1LDcgQEAgbmZzX2NsaWVudF9lbmFibGU9
Ik5PIgkJIyBUaGlzIGhvc3QgaXMgYQogbmZzX2FjY2Vzc19jYWNoZT0iNjAiCQkjIENsaWVudCBj
YWNoZSB0aW1lb3V0IGluIHNlY29uZHMKIG5mc19zZXJ2ZXJfZW5hYmxlPSJOTyIJCSMgVGhpcyBo
b3N0IGlzIGFuIE5GUyBzZXJ2ZXIgKG9yIE5PKS4KIG5mc19zZXJ2ZXJfZmxhZ3M9Ii11IC10Igkj
IEZsYWdzIHRvIG5mc2QgKGlmIGVuYWJsZWQpLgorbmZzX3NlcnZlcl9tYW5hZ2VnaWRzPSJOTyIJ
IyBUaGUgTkZTIHNlcnZlciBtYXBzIGdpZHMgZm9yIEFVVEhfU1lTIChvciBOTykuCiBtb3VudGRf
ZW5hYmxlPSJOTyIJCSMgUnVuIG1vdW50ZCAob3IgTk8pLgogbW91bnRkX2ZsYWdzPSItciIJCSMg
RmxhZ3MgdG8gbW91bnRkIChpZiBORlMgc2VydmVyIGVuYWJsZWQpLgogd2Vha19tb3VudGRfYXV0
aGVudGljYXRpb249Ik5PIgkjIEFsbG93IG5vbi1yb290IG1vdW50IHJlcXVlc3RzIHRvIGJlIHNl
cnZlZC4K
------=_Part_87814644_309663547.1447627285467
Content-Type: text/x-patch; name=mapgrp-nfsuserd.patch
Content-Disposition: attachment; filename=mapgrp-nfsuserd.patch
Content-Transfer-Encoding: base64

LS0tIHVzci5zYmluL25mc3VzZXJkL25mc3VzZXJkLmMub3JpZwkyMDE1LTExLTEzIDIwOjM5OjEz
LjY4OTU3NDAwMCAtMDUwMAorKysgdXNyLnNiaW4vbmZzdXNlcmQvbmZzdXNlcmQuYwkyMDE1LTEx
LTEzIDIwOjQwOjM2LjUzMDg3NTAwMCAtMDUwMApAQCAtOTIsNyArOTIsNyBAQCB1aWRfdCBkZWZh
dWx0dWlkID0gKHVpZF90KTMyNzY3OwogdV9jaGFyICpkZWZhdWx0Z3JvdXAgPSAibm9ncm91cCI7
CiBnaWRfdCBkZWZhdWx0Z2lkID0gKGdpZF90KTMyNzY3OwogaW50IHZlcmJvc2UgPSAwLCBpbV9h
X3NsYXZlID0gMCwgbmZzdXNlcmRjbnQgPSAtMSwgZm9yY2VzdGFydCA9IDA7Ci1pbnQgZGVmdXNl
cnRpbWVvdXQgPSBERUZVU0VSVElNRU9VVDsKK2ludCBkZWZ1c2VydGltZW91dCA9IERFRlVTRVJU
SU1FT1VULCBtYW5hZ2VfZ2lkcyA9IDA7CiBwaWRfdCBzbGF2ZXNbTUFYTkZTVVNFUkRdOwogCiBp
bnQKQEAgLTExMCw2ICsxMTAsOCBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJY2hh
ciBob3N0bmFtZVtNQVhIT1NUTkFNRUxFTiArIDFdLCAqY3A7CiAJc3RydWN0IGFkZHJpbmZvICph
aXAsIGhpbnRzOwogCXN0YXRpYyB1aWRfdCBjaGVja19kdXBzW01BWFVTRVJNQVhdOworCWdpZF90
IGdycHNbTkdST1VQU107CisJaW50IG5ncm91cDsKIAogCWlmIChtb2RmaW5kKCJuZnNjb21tb24i
KSA8IDApIHsKIAkJLyogTm90IHByZXNlbnQgaW4ga2VybmVsLCB0cnkgbG9hZGluZyBpdCAqLwpA
QCAtMTYwLDYgKzE2Miw4IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJCXZlcmJv
c2UgPSAxOwogCQl9IGVsc2UgaWYgKCFzdHJjbXAoKmFyZ3YsICItZm9yY2UiKSkgewogCQkJZm9y
Y2VzdGFydCA9IDE7CisJCX0gZWxzZSBpZiAoIXN0cmNtcCgqYXJndiwgIi1tYW5hZ2UtZ2lkcyIp
KSB7CisJCQltYW5hZ2VfZ2lkcyA9IDE7CiAJCX0gZWxzZSBpZiAoIXN0cmNtcCgqYXJndiwgIi11
c2VybWF4IikpIHsKIAkJCWlmIChhcmdjID09IDEpCiAJCQkJdXNhZ2UoKTsKQEAgLTI5NywxMiAr
MzAxLDE0IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJbmlkLm5pZF9naWQgPSBk
ZWZhdWx0Z2lkOwogCW5pZC5uaWRfbmFtZSA9IGRuc25hbWU7CiAJbmlkLm5pZF9uYW1lbGVuID0g
c3RybGVuKG5pZC5uaWRfbmFtZSk7CisJbmlkLm5pZF9uZ3JvdXAgPSAwOworCW5pZC5uaWRfZ3Jw
cyA9IE5VTEw7CiAJbmlkLm5pZF9mbGFnID0gTkZTSURfSU5JVElBTElaRTsKICNpZmRlZiBERUJV
RwogCXByaW50ZigiSW5pdGlhbGl6ZSB1aWQ9JWQgZ2lkPSVkIGRucz0lc1xuIiwgbmlkLm5pZF91
aWQsIG5pZC5uaWRfZ2lkLCAKIAkgICAgbmlkLm5pZF9uYW1lKTsKICNlbHNlCi0JZXJyb3IgPSBu
ZnNzdmMoTkZTU1ZDX0lETkFNRSwgJm5pZCk7CisJZXJyb3IgPSBuZnNzdmMoTkZTU1ZDX0lETkFN
RSB8IE5GU1NWQ19ORVdTVFJVQ1QsICZuaWQpOwogCWlmIChlcnJvcikKIAkJZXJyeCgxLCAiQ2Fu
J3QgaW5pdGlhbGl6ZSBuZnMgdXNlci9ncm91cHMiKTsKICNlbmRpZgpAQCAtMzE2LDExICszMjIs
MTMgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCQluaWQubmlkX2dpZCA9IGdycC0+
Z3JfZ2lkOwogCQluaWQubmlkX25hbWUgPSBncnAtPmdyX25hbWU7CiAJCW5pZC5uaWRfbmFtZWxl
biA9IHN0cmxlbihncnAtPmdyX25hbWUpOworCQluaWQubmlkX25ncm91cCA9IDA7CisJCW5pZC5u
aWRfZ3JwcyA9IE5VTEw7CiAJCW5pZC5uaWRfZmxhZyA9IE5GU0lEX0FEREdJRDsKICNpZmRlZiBE
RUJVRwogCQlwcmludGYoImFkZCBnaWQ9JWQgbmFtZT0lc1xuIiwgbmlkLm5pZF9naWQsIG5pZC5u
aWRfbmFtZSk7CiAjZWxzZQotCQllcnJvciA9IG5mc3N2YyhORlNTVkNfSUROQU1FLCAmbmlkKTsK
KwkJZXJyb3IgPSBuZnNzdmMoTkZTU1ZDX0lETkFNRSB8IE5GU1NWQ19ORVdTVFJVQ1QsICZuaWQp
OwogCQlpZiAoZXJyb3IpCiAJCQllcnJ4KDEsICJDYW4ndCBhZGQgZ3JvdXAgJXMiLCBncnAtPmdy
X25hbWUpOwogI2VuZGlmCkBAIC0zNTIsMTEgKzM2MCwyMyBAQCBtYWluKGludCBhcmdjLCBjaGFy
ICphcmd2W10pCiAJCW5pZC5uaWRfdWlkID0gcHdkLT5wd191aWQ7CiAJCW5pZC5uaWRfbmFtZSA9
IHB3ZC0+cHdfbmFtZTsKIAkJbmlkLm5pZF9uYW1lbGVuID0gc3RybGVuKHB3ZC0+cHdfbmFtZSk7
CisJCWlmIChtYW5hZ2VfZ2lkcyAhPSAwKSB7CisJCQkvKiBHZXQgdGhlIGdyb3VwIGxpc3QgZm9y
IHRoaXMgdXNlci4gKi8KKwkJCW5ncm91cCA9IE5HUk9VUFM7CisJCQlpZiAoZ2V0Z3JvdXBsaXN0
KHB3ZC0+cHdfbmFtZSwgcHdkLT5wd19naWQsIGdycHMsCisJCQkgICAgJm5ncm91cCkgPCAwKQor
CQkJCXN5c2xvZyhMT0dfRVJSLCAiR3JvdXAgbGlzdCB0b28gc21hbGwiKTsKKwkJCW5pZC5uaWRf
bmdyb3VwID0gbmdyb3VwOworCQkJbmlkLm5pZF9ncnBzID0gZ3JwczsKKwkJfSBlbHNlIHsKKwkJ
CW5pZC5uaWRfbmdyb3VwID0gMDsKKwkJCW5pZC5uaWRfZ3JwcyA9IE5VTEw7CisJCX0KIAkJbmlk
Lm5pZF9mbGFnID0gTkZTSURfQUREVUlEOwogI2lmZGVmIERFQlVHCiAJCXByaW50ZigiYWRkIHVp
ZD0lZCBuYW1lPSVzXG4iLCBuaWQubmlkX3VpZCwgbmlkLm5pZF9uYW1lKTsKICNlbHNlCi0JCWVy
cm9yID0gbmZzc3ZjKE5GU1NWQ19JRE5BTUUsICZuaWQpOworCQllcnJvciA9IG5mc3N2YyhORlNT
VkNfSUROQU1FIHwgTkZTU1ZDX05FV1NUUlVDVCwgJm5pZCk7CiAJCWlmIChlcnJvcikKIAkJCWVy
cngoMSwgIkNhbid0IGFkZCB1c2VyICVzIiwgcHdkLT5wd19uYW1lKTsKICNlbmRpZgpAQCAtNDM5
LDYgKzQ1OSw4IEBAIG5mc3VzZXJkc3J2KHN0cnVjdCBzdmNfcmVxICpycXN0cCwgU1ZDWFAKIAlz
dHJ1Y3QgaW5mbyBpbmZvOwogCXN0cnVjdCBuZnNkX2lkYXJncyBuaWQ7CiAJdV9pbnQzMl90IHNh
ZGRyOworCWdpZF90IGdycHNbTkdST1VQU107CisJaW50IG5ncm91cDsKIAogCS8qCiAJICogT25s
eSBoYW5kbGUgcmVxdWVzdHMgZnJvbSAxMjcuMC4wLjEgb24gYSByZXNlcnZlZCBwb3J0IG51bWJl
ci4KQEAgLTQ3MiwxNCArNDk0LDI4IEBAIG5mc3VzZXJkc3J2KHN0cnVjdCBzdmNfcmVxICpycXN0
cCwgU1ZDWFAKIAkJCW5pZC5uaWRfdXNlcnRpbWVvdXQgPSBkZWZ1c2VydGltZW91dDsKIAkJCW5p
ZC5uaWRfdWlkID0gcHdkLT5wd191aWQ7CiAJCQluaWQubmlkX25hbWUgPSBwd2QtPnB3X25hbWU7
CisJCQlpZiAobWFuYWdlX2dpZHMgIT0gMCkgeworCQkJCS8qIEdldCB0aGUgZ3JvdXAgbGlzdCBm
b3IgdGhpcyB1c2VyLiAqLworCQkJCW5ncm91cCA9IE5HUk9VUFM7CisJCQkJaWYgKGdldGdyb3Vw
bGlzdChwd2QtPnB3X25hbWUsIHB3ZC0+cHdfZ2lkLAorCQkJCSAgICBncnBzLCAmbmdyb3VwKSA8
IDApCisJCQkJCXN5c2xvZyhMT0dfRVJSLCAiR3JvdXAgbGlzdCB0b28gc21hbGwiKTsKKwkJCQlu
aWQubmlkX25ncm91cCA9IG5ncm91cDsKKwkJCQluaWQubmlkX2dycHMgPSBncnBzOworCQkJfSBl
bHNlIHsKKwkJCQluaWQubmlkX25ncm91cCA9IDA7CisJCQkJbmlkLm5pZF9ncnBzID0gTlVMTDsK
KwkJCX0KIAkJfSBlbHNlIHsKIAkJCW5pZC5uaWRfdXNlcnRpbWVvdXQgPSA1OwogCQkJbmlkLm5p
ZF91aWQgPSAodWlkX3QpaW5mby5pZDsKIAkJCW5pZC5uaWRfbmFtZSA9IGRlZmF1bHR1c2VyOwor
CQkJbmlkLm5pZF9uZ3JvdXAgPSAwOworCQkJbmlkLm5pZF9ncnBzID0gTlVMTDsKIAkJfQogCQlu
aWQubmlkX25hbWVsZW4gPSBzdHJsZW4obmlkLm5pZF9uYW1lKTsKIAkJbmlkLm5pZF9mbGFnID0g
TkZTSURfQUREVUlEOwotCQllcnJvciA9IG5mc3N2YyhORlNTVkNfSUROQU1FLCAmbmlkKTsKKwkJ
ZXJyb3IgPSBuZnNzdmMoTkZTU1ZDX0lETkFNRSB8IE5GU1NWQ19ORVdTVFJVQ1QsICZuaWQpOwog
CQlpZiAoZXJyb3IpIHsKIAkJCWluZm8ucmV0dmFsID0gZXJyb3I7CiAJCQlzeXNsb2coTE9HX0VS
UiwgIkNhbid0IGFkZCB1c2VyICVzXG4iLCBwd2QtPnB3X25hbWUpOwpAQCAtNTA5LDggKzU0NSwx
MCBAQCBuZnN1c2VyZHNydihzdHJ1Y3Qgc3ZjX3JlcSAqcnFzdHAsIFNWQ1hQCiAJCQluaWQubmlk
X25hbWUgPSBkZWZhdWx0Z3JvdXA7CiAJCX0KIAkJbmlkLm5pZF9uYW1lbGVuID0gc3RybGVuKG5p
ZC5uaWRfbmFtZSk7CisJCW5pZC5uaWRfbmdyb3VwID0gMDsKKwkJbmlkLm5pZF9ncnBzID0gTlVM
TDsKIAkJbmlkLm5pZF9mbGFnID0gTkZTSURfQURER0lEOwotCQllcnJvciA9IG5mc3N2YyhORlNT
VkNfSUROQU1FLCAmbmlkKTsKKwkJZXJyb3IgPSBuZnNzdmMoTkZTU1ZDX0lETkFNRSB8IE5GU1NW
Q19ORVdTVFJVQ1QsICZuaWQpOwogCQlpZiAoZXJyb3IpIHsKIAkJCWluZm8ucmV0dmFsID0gZXJy
b3I7CiAJCQlzeXNsb2coTE9HX0VSUiwgIkNhbid0IGFkZCBncm91cCAlc1xuIiwKQEAgLTU0MSw4
ICs1NzksMTAgQEAgbmZzdXNlcmRzcnYoc3RydWN0IHN2Y19yZXEgKnJxc3RwLCBTVkNYUAogCQkJ
bmlkLm5pZF9uYW1lID0gaW5mby5uYW1lOwogCQl9CiAJCW5pZC5uaWRfbmFtZWxlbiA9IHN0cmxl
bihuaWQubmlkX25hbWUpOworCQluaWQubmlkX25ncm91cCA9IDA7CisJCW5pZC5uaWRfZ3JwcyA9
IE5VTEw7CiAJCW5pZC5uaWRfZmxhZyA9IE5GU0lEX0FERFVTRVJOQU1FOwotCQllcnJvciA9IG5m
c3N2YyhORlNTVkNfSUROQU1FLCAmbmlkKTsKKwkJZXJyb3IgPSBuZnNzdmMoTkZTU1ZDX0lETkFN
RSB8IE5GU1NWQ19ORVdTVFJVQ1QsICZuaWQpOwogCQlpZiAoZXJyb3IpIHsKIAkJCWluZm8ucmV0
dmFsID0gZXJyb3I7CiAJCQlzeXNsb2coTE9HX0VSUiwgIkNhbid0IGFkZCB1c2VyICVzXG4iLCBw
d2QtPnB3X25hbWUpOwpAQCAtNTcyLDggKzYxMiwxMCBAQCBuZnN1c2VyZHNydihzdHJ1Y3Qgc3Zj
X3JlcSAqcnFzdHAsIFNWQ1hQCiAJCQluaWQubmlkX25hbWUgPSBpbmZvLm5hbWU7CiAJCX0KIAkJ
bmlkLm5pZF9uYW1lbGVuID0gc3RybGVuKG5pZC5uaWRfbmFtZSk7CisJCW5pZC5uaWRfbmdyb3Vw
ID0gMDsKKwkJbmlkLm5pZF9ncnBzID0gTlVMTDsKIAkJbmlkLm5pZF9mbGFnID0gTkZTSURfQURE
R1JPVVBOQU1FOwotCQllcnJvciA9IG5mc3N2YyhORlNTVkNfSUROQU1FLCAmbmlkKTsKKwkJZXJy
b3IgPSBuZnNzdmMoTkZTU1ZDX0lETkFNRSB8IE5GU1NWQ19ORVdTVFJVQ1QsICZuaWQpOwogCQlp
ZiAoZXJyb3IpIHsKIAkJCWluZm8ucmV0dmFsID0gZXJyb3I7CiAJCQlzeXNsb2coTE9HX0VSUiwg
IkNhbid0IGFkZCBncm91cCAlc1xuIiwKQEAgLTY3OSw1ICs3MjEsNSBAQCB1c2FnZSh2b2lkKQog
ewogCiAJZXJyeCgxLAotCSAgICAidXNhZ2U6IG5mc3VzZXJkIFstdXNlcm1heCBjYWNoZV9zaXpl
XSBbLXVzZXJ0aW1lb3V0IG1pbnV0ZXNdIFstdmVyYm9zZV0gWy1kb21haW4gZG9tYWluX25hbWVd
IFtuXSIpOworCSAgICAidXNhZ2U6IG5mc3VzZXJkIFstdXNlcm1heCBjYWNoZV9zaXplXSBbLXVz
ZXJ0aW1lb3V0IG1pbnV0ZXNdIFstdmVyYm9zZV0gWy1tYW5hZ2UtZ2lkc10gWy1kb21haW4gZG9t
YWluX25hbWVdIFtuXSIpOwogfQotLS0gdXNyLnNiaW4vbmZzdXNlcmQvbmZzdXNlcmQuOC5vcmln
CTIwMTUtMTEtMTMgMjA6Mzk6MTIuNDAzOTUwMDAwIC0wNTAwCisrKyB1c3Iuc2Jpbi9uZnN1c2Vy
ZC9uZnN1c2VyZC44CTIwMTUtMTEtMTMgMjA6NDI6MDYuNzAyNTM5MDAwIC0wNTAwCkBAIC0yNCwx
NCArMjQsMTQgQEAKIC5cIgogLlwiICRGcmVlQlNEOiBoZWFkL3Vzci5zYmluL25mc3VzZXJkL25m
c3VzZXJkLjggMjc2MjU4IDIwMTQtMTItMjYgMjE6NTY6MjNaIGpvZWwgJAogLlwiCi0uRGQgQXBy
aWwgMjUsIDIwMDkKKy5EZCBOb3ZlbWJlciAxLCAyMDE1CiAuRHQgTkZTVVNFUkQgOAogLk9zCiAu
U2ggTkFNRQogLk5tIG5mc3VzZXJkCiAuTmQgbG9hZCB1c2VyIGFuZCBncm91cCBpbmZvcm1hdGlv
biBpbnRvIHRoZSBrZXJuZWwgZm9yCiAuVG4gTkZTdjQKLXNlcnZpY2VzCitzZXJ2aWNlcyBwbHVz
IHN1cHBvcnQgbWFuYWdlLWdpZHMgZm9yIGFsbCBORlMgdmVyc2lvbnMKIC5TaCBTWU5PUFNJUwog
Lk5tIG5mc3VzZXJkCiAuT3AgRmwgZG9tYWluIEFyIGRvbWFpbl9uYW1lCkBAIC0zOSwxMSArMzks
MTQgQEAgc2VydmljZXMKIC5PcCBGbCB1c2VybWF4IEFyIG1heF9jYWNoZV9zaXplCiAuT3AgRmwg
dmVyYm9zZQogLk9wIEZsIGZvcmNlCisuT3AgRmwgbWFuYWdlLWdpZHMKIC5PcCBBciBudW1fc2Vy
dmVycwogLlNoIERFU0NSSVBUSU9OCiAuTm0KIGxvYWRzIHVzZXIgYW5kIGdyb3VwIGluZm9ybWF0
aW9uIGludG8gdGhlIGtlcm5lbCBmb3IgTkZTdjQuCiBJdCBtdXN0IGJlIHJ1bm5pbmcgZm9yIE5G
U3Y0IHRvIGZ1bmN0aW9uIGNvcnJlY3RseSwgZWl0aGVyIGNsaWVudCBvciBzZXJ2ZXIuCitJdCBh
bHNvIHByb3ZpZGVzIHN1cHBvcnQgZm9yIG1hbmFnZS1naWRzIGFuZCBtdXN0IGJlIHJ1bm5pbmcg
b24gdGhlIHNlcnZlciBpZgordGhpcyBpcyBiZWluZyB1c2VkIGZvciBhbnkgdmVyc2lvbiBvZiBO
RlMuCiAuUHAKIFVwb24gc3RhcnR1cCwgaXQgbG9hZHMgdGhlIG1hY2hpbmVzIEROUyBkb21haW4g
bmFtZSwgcGx1cyB0aW1lb3V0IGFuZAogY2FjaGUgc2l6ZSBsaW1pdCBpbnRvIHRoZSBrZXJuZWwu
IEl0IHRoZW4gcHJlbG9hZHMgdGhlIGNhY2hlIHdpdGggZ3JvdXAKQEAgLTc5LDYgKzgyLDE1IEBA
IFdoZW4gc2V0LCB0aGUgc2VydmVyIGxvZ3MgYSBidW5jaCBvZiBpbmYKIFRoaXMgZmxhZyBvcHRp
b24gbXVzdCBiZSBzZXQgdG8gcmVzdGFydCB0aGUgZGFlbW9uIGFmdGVyIGl0IGhhcyBnb25lIGF3
YXkKIGFibm9ybWFsbHkgYW5kIHJlZnVzZXMgdG8gc3RhcnQsIGJlY2F1c2UgaXQgdGhpbmtzIG5m
c3VzZXJkIGlzIGFscmVhZHkKIHJ1bm5pbmcuCisuSXQgRmwgbWFuYWdlLWdpZHMKK1RoaXMgZmxh
ZyBlbmFibGVzIG1hbmFnZS1naWRzIGZvciB0aGUgTkZTIHNlcnZlcgorLlhyIG5mc2QgOCAuCitX
aGVuIHRoaXMgaXMgZW5hYmxlZCwgYWxsIE5GUyByZXF1ZXN0cyB1c2luZworQVVUSF9TWVMgYXV0
aGVudGljYXRpb24gdGFrZSB0aGUgdWlkIGZyb20gdGhlIFJQQyByZXF1ZXN0CithbmQgdXNlcyB0
aGUgZ3JvdXAgbGlzdCBmb3IgdGhhdCB1aWQgcHJvdmlkZWQgYnkKKy5YciBnZXRncm91cGxpc3Qg
Mworb24gdGhlIHNlcnZlciBpbnN0ZWFkIG9mIHRoZSBsaXN0IG9mIGdyb3VwcyBwcm92aWRlZCBp
biB0aGUgUlBDIGF1dGhlbnRpY2F0b3IuCitUaGlzIGNhbiBiZSB1c2VkIHRvIGF2b2lkIHRoZSAx
NiBncm91cCBsaW1pdCBmb3IgQVVUSF9TWVMuCiAuSXQgQXIgbnVtX3NlcnZlcnMKIFNwZWNpZmll
cyBob3cgbWFueSBzZXJ2ZXJzIHRvIGNyZWF0ZSAobWF4IDIwKS4KIFRoZSBkZWZhdWx0IG9mIDQg
bWF5IGJlIHN1ZmZpY2llbnQuIFlvdSBzaG91bGQgcnVuIGVub3VnaCBzZXJ2ZXJzLCBzbyB0aGF0
CkBAIC05MCw2ICsxMDIsNyBAQCBzdWNoIGFzIGEgcHJvY2VzcyB0YWJsZSBlbnRyeSBhbmQgc3dh
cCBzCiAuRWwKIC5TaCBTRUUgQUxTTwogLlhyIGdldGdyZW50IDMgLAorLlhyIGdldGdyb3VwbGlz
dCAzICwKIC5YciBnZXRwd2VudCAzICwKIC5YciBuZnN2NCA0ICwKIC5YciBncm91cCA1ICwKQEAg
LTEwMyw3ICsxMTYsOCBAQCB1dGlsaXR5IHdhcyBpbnRyb2R1Y2VkIHdpdGggdGhlIE5GU3Y0IGV4
CiBUaGUKIC5ObQogdXNlCi0uWHIgZ2V0Z3JlbnQgMworLlhyIGdldGdyZW50IDMgLAorLlhyIGdl
dGdyb3VwbGlzdCAzCiBhbmQKIC5YciBnZXRwd2VudCAzCiBsaWJyYXJ5IGNhbGxzIHRvIHJlc29s
dmUgcmVxdWVzdHMgYW5kIHdpbGwgaGFuZyBpZiB0aGUgc2VydmVycyBoYW5kbGluZwo=
------=_Part_87814644_309663547.1447627285467
Content-Type: text/x-patch; name=mapgrp-kernel.patch
Content-Disposition: attachment; filename=mapgrp-kernel.patch
Content-Transfer-Encoding: base64

LS0tIG5mcy9uZnNzdmMuaC5zYXYJMjAxNS0wOS0yOCAxODo0ODoyNi4wMDAwMDAwMDAgLTA0MDAK
KysrIG5mcy9uZnNzdmMuaAkyMDE1LTExLTEzIDE5OjM1OjM2LjY3NTYzMDAwMCAtMDUwMApAQCAt
NjksNiArNjksNyBAQAogI2RlZmluZQlORlNTVkNfU1VTUEVORE5GU0QJMHgwNDAwMDAwMAogI2Rl
ZmluZQlORlNTVkNfUkVTVU1FTkZTRAkweDA4MDAwMDAwCiAjZGVmaW5lCU5GU1NWQ19EVU1QTU5U
T1BUUwkweDEwMDAwMDAwCisjZGVmaW5lCU5GU1NWQ19ORVdTVFJVQ1QJMHgyMDAwMDAwMAogCiAv
KiBBcmd1bWVudCBzdHJ1Y3R1cmUgZm9yIE5GU1NWQ19EVU1QTU5UT1BUUy4gKi8KIHN0cnVjdCBu
ZnNjbF9kdW1wbW50b3B0cyB7Ci0tLSBmcy9uZnNzZXJ2ZXIvbmZzX25mc2Rwb3J0LmMuc2F2CTIw
MTUtMDktMjggMTg6NDk6MzMuMDAwMDAwMDAwIC0wNDAwCisrKyBmcy9uZnNzZXJ2ZXIvbmZzX25m
c2Rwb3J0LmMJMjAxNS0xMS0xMyAxOTozNTozNi41Mjg0NTYwMDAgLTA1MDAKQEAgLTI2NDksMTQg
KzI2NDksMjQgQEAgbmZzZF9leGNyZWQoc3RydWN0IG5mc3J2X2Rlc2NyaXB0ICpuZCwgcwogCSAq
ICBGc2luZm8gUlBDLiBJZiBzZXQgZm9yIGFueXRoaW5nIGVsc2UsIHRoaXMgY29kZSBtaWdodCBu
ZWVkCiAJICogIHRvIGNoYW5nZS4pCiAJICovCi0JaWYgKE5GU1ZOT19FWFBPUlRFRChleHApICYm
Ci0JICAgICgoIShuZC0+bmRfZmxhZyAmIE5EX0dTUykgJiYgbmQtPm5kX2NyZWQtPmNyX3VpZCA9
PSAwKSB8fAotCSAgICAgTkZTVk5PX0VYUE9SVEFOT04oZXhwKSB8fAotCSAgICAgKG5kLT5uZF9m
bGFnICYgTkRfQVVUSE5PTkUpKSkgewotCQluZC0+bmRfY3JlZC0+Y3JfdWlkID0gY3JlZGFub24t
PmNyX3VpZDsKLQkJbmQtPm5kX2NyZWQtPmNyX2dpZCA9IGNyZWRhbm9uLT5jcl9naWQ7Ci0JCWNy
c2V0Z3JvdXBzKG5kLT5uZF9jcmVkLCBjcmVkYW5vbi0+Y3Jfbmdyb3VwcywKLQkJICAgIGNyZWRh
bm9uLT5jcl9ncm91cHMpOworCWlmIChORlNWTk9fRVhQT1JURUQoZXhwKSkgeworCQlpZiAoKChu
ZC0+bmRfZmxhZyAmIE5EX0dTUykgPT0gMCAmJiBuZC0+bmRfY3JlZC0+Y3JfdWlkID09IDApIHx8
CisJCSAgICAgTkZTVk5PX0VYUE9SVEFOT04oZXhwKSB8fAorCQkgICAgIChuZC0+bmRfZmxhZyAm
IE5EX0FVVEhOT05FKSAhPSAwKSB7CisJCQluZC0+bmRfY3JlZC0+Y3JfdWlkID0gY3JlZGFub24t
PmNyX3VpZDsKKwkJCW5kLT5uZF9jcmVkLT5jcl9naWQgPSBjcmVkYW5vbi0+Y3JfZ2lkOworCQkJ
Y3JzZXRncm91cHMobmQtPm5kX2NyZWQsIGNyZWRhbm9uLT5jcl9uZ3JvdXBzLAorCQkJICAgIGNy
ZWRhbm9uLT5jcl9ncm91cHMpOworCQl9IGVsc2UgaWYgKChuZC0+bmRfZmxhZyAmIE5EX0dTUykg
PT0gMCkgeworCQkJLyoKKwkJCSAqIElmIHVzaW5nIEFVVEhfU1lTLCBjYWxsIG5mc3J2X2dldGdy
cHNjcmVkKCkgdG8gc2VlCisJCQkgKiBpZiB0aGVyZSBpcyBhIHJlcGxhY2VtZW50IGNyZWRlbnRp
YWwgd2l0aCBhIGdyb3VwCisJCQkgKiBsaXN0IHNldCB1cCBieSAibmZzdXNlcmQgLW1hbmFnZS1n
aWRzIi4KKwkJCSAqIElmIHRoZXJlIGlzIG5vIHJlcGxhY2VtZW50LCBuZnNydl9nZXRncnBzY3Jl
ZCgpCisJCQkgKiBzaW1wbHkgcmV0dXJucyBpdHMgYXJndW1lbnQuCisJCQkgKi8KKwkJCW5kLT5u
ZF9jcmVkID0gbmZzcnZfZ2V0Z3Jwc2NyZWQobmQtPm5kX2NyZWQpOworCQl9CiAJfQogCiBvdXQ6
Ci0tLSBmcy9uZnMvbmZzcnZzdGF0ZS5oLnNhdgkyMDE1LTA5LTI4IDE4OjQ5OjM1LjAwMDAwMDAw
MCAtMDQwMAorKysgZnMvbmZzL25mc3J2c3RhdGUuaAkyMDE1LTExLTEzIDE5OjQ4OjU4LjcxMDE2
ODAwMCAtMDUwMApAQCAtNDgsMjMgKzQ4LDIyIEBAIExJU1RfSEVBRChuZnNzZXNzaW9uaGFzaGhl
YWQsIG5mc2RzZXNzaW8KIC8qCiAgKiBMaXN0IGhlYWQgZm9yIG5mc3VzcmdycC4KICAqLwotTElT
VF9IRUFEKG5mc3VzZXJoYXNoaGVhZCwgbmZzdXNyZ3JwKTsKLVRBSUxRX0hFQUQobmZzdXNlcmxy
dWhlYWQsIG5mc3VzcmdycCk7CitUQUlMUV9IRUFEKG5mc3VzZXJoYXNoaGVhZCwgbmZzdXNyZ3Jw
KTsKIAogI2RlZmluZQlORlNDTElFTlRIQVNIKGlkKQkJCQkJCVwKIAkoJm5mc2NsaWVudGhhc2hb
KGlkKS5sdmFsWzFdICUgbmZzcnZfY2xpZW50aGFzaHNpemVdKQogI2RlZmluZQlORlNTVEFURUhB
U0goY2xwLCBpZCkJCQkJCQlcCiAJKCYoKGNscCktPmxjX3N0YXRlaWRbKGlkKS5vdGhlclsyXSAl
IG5mc3J2X3N0YXRlaGFzaHNpemVdKSkKICNkZWZpbmUJTkZTVVNFUkhBU0goaWQpCQkJCQkJCVwK
LQkoJm5mc3VzZXJoYXNoWyhpZCkgJSBORlNVU0VSSEFTSFNJWkVdKQorCSgmbmZzdXNlcmhhc2hb
KGlkKSAlIG5mc3J2X2x1Z2hhc2hzaXplXSkKICNkZWZpbmUJTkZTVVNFUk5BTUVIQVNIKHAsIGwp
CQkJCQkJXAogCSgmbmZzdXNlcm5hbWVoYXNoWygobCk+PTQ/KCoocCkrKigocCkrMSkrKigocCkr
MikrKigocCkrMykpOioocCkpIFwKLQkJJSBORlNVU0VSSEFTSFNJWkVdKQorCQklIG5mc3J2X2x1
Z2hhc2hzaXplXSkKICNkZWZpbmUJTkZTR1JPVVBIQVNIKGlkKQkJCQkJCVwKLQkoJm5mc2dyb3Vw
aGFzaFsoaWQpICUgTkZTR1JPVVBIQVNIU0laRV0pCisJKCZuZnNncm91cGhhc2hbKGlkKSAlIG5m
c3J2X2x1Z2hhc2hzaXplXSkKICNkZWZpbmUJTkZTR1JPVVBOQU1FSEFTSChwLCBsKQkJCQkJCVwK
IAkoJm5mc2dyb3VwbmFtZWhhc2hbKChsKT49ND8oKihwKSsqKChwKSsxKSsqKChwKSsyKSsqKChw
KSszKSk6KihwKSkgXAotCQklIE5GU0dST1VQSEFTSFNJWkVdKQorCQklIG5mc3J2X2x1Z2hhc2hz
aXplXSkKIAogc3RydWN0IG5mc3Nlc3Npb25oYXNoIHsKIAlzdHJ1Y3QgbXR4CQkJbXR4OwpAQCAt
MjY0LDE0ICsyNjMsMTQgQEAgc3RydWN0IG5mc2xvY2tmaWxlIHsKICAqIG5hbWVzLgogICovCiBz
dHJ1Y3QgbmZzdXNyZ3JwIHsKLQlUQUlMUV9FTlRSWShuZnN1c3JncnApCWx1Z19scnU7CS8qIExS
VSBsaXN0ICovCi0JTElTVF9FTlRSWShuZnN1c3JncnApCWx1Z19udW1oYXNoOwkvKiBIYXNoIGJ5
IGlkIyAqLwotCUxJU1RfRU5UUlkobmZzdXNyZ3JwKQlsdWdfbmFtZWhhc2g7CS8qIGFuZCBieSBu
YW1lICovCisJVEFJTFFfRU5UUlkobmZzdXNyZ3JwKQlsdWdfbnVtaGFzaDsJLyogSGFzaCBieSBp
ZCMgKi8KKwlUQUlMUV9FTlRSWShuZnN1c3JncnApCWx1Z19uYW1laGFzaDsJLyogYW5kIGJ5IG5h
bWUgKi8KIAl0aW1lX3QJCQlsdWdfZXhwaXJ5OwkvKiBFeHBpcnkgdGltZSBpbiBzZWMgKi8KIAl1
bmlvbiB7CiAJCXVpZF90CQl1bl91aWQ7CQkvKiBpZCMgKi8KIAkJZ2lkX3QJCXVuX2dpZDsKIAl9
IGx1Z191bjsKKwlzdHJ1Y3QgdWNyZWQJCSpsdWdfY3JlZDsJLyogQ3JlZC4gd2l0aCBncm91cHMg
bGlzdCAqLwogCWludAkJCWx1Z19uYW1lbGVuOwkvKiBOYW1lIGxlbmd0aCAqLwogCXVfY2hhcgkJ
CWx1Z19uYW1lWzFdOwkvKiBtYWxsb2MnZCBjb3JyZWN0IGxlbmd0aCAqLwogfTsKLS0tIGZzL25m
cy9uZnMuaC5zYXYJMjAxNS0wOS0yOCAxODo0OTozNS4wMDAwMDAwMDAgLTA0MDAKKysrIGZzL25m
cy9uZnMuaAkyMDE1LTExLTEzIDE5OjUwOjMwLjA4MzE2OTAwMCAtMDUwMApAQCAtOTYsMTIgKzk2
LDYgQEAKICNkZWZpbmUJTkZTU0VTU0lPTkhBU0hTSVpFCTIwCS8qIFNpemUgb2Ygc2VydmVyIHNl
c3Npb24gaGFzaCB0YWJsZSAqLwogI2VuZGlmCiAjZGVmaW5lCU5GU1NUQVRFSEFTSFNJWkUJMTAJ
LyogU2l6ZSBvZiBzZXJ2ZXIgc3RhdGVpZCBoYXNoIHRhYmxlICovCi0jaWZuZGVmIE5GU1VTRVJI
QVNIU0laRQotI2RlZmluZQlORlNVU0VSSEFTSFNJWkUJCTMwCS8qIFNpemUgb2YgdXNlciBpZCBo
YXNoIHRhYmxlICovCi0jZW5kaWYKLSNpZm5kZWYgTkZTR1JPVVBIQVNIU0laRQotI2RlZmluZQlO
RlNHUk9VUEhBU0hTSVpFCTUJLyogU2l6ZSBvZiBncm91cCBpZCBoYXNoIHRhYmxlICovCi0jZW5k
aWYKICNpZm5kZWYJTkZTQ0xERUxFR0hJR0hXQVRFUgogI2RlZmluZQlORlNDTERFTEVHSElHSFdB
VEVSCTEwMDAwCS8qIGxpbWl0IGZvciBjbGllbnQgZGVsZWdhdGlvbnMgKi8KICNlbmRpZgpAQCAt
MjA0LDYgKzE5OCwxOCBAQCBzdHJ1Y3QgbmZzZF9pZGFyZ3MgewogCWludAkJbmlkX3VzZXJ0aW1l
b3V0Oy8qIFVzZXIgbmFtZSB0aW1lb3V0IChtaW51dGVzKSAqLwogCXVfY2hhcgkJKm5pZF9uYW1l
OwkvKiBOYW1lICovCiAJaW50CQluaWRfbmFtZWxlbjsJLyogYW5kIGl0cyBsZW5ndGggKi8KKwln
aWRfdAkJKm5pZF9ncnBzOwkvKiBhbmQgdGhlIGxpc3QgKi8KKwlpbnQJCW5pZF9uZ3JvdXA7CS8q
IFNpemUgb2YgZ3JvdXBzIGxpc3QgKi8KK307CisKK3N0cnVjdCBuZnNkX29pZGFyZ3MgeworCWlu
dAkJbmlkX2ZsYWc7CS8qIEZsYWdzIChzZWUgYmVsb3cpICovCisJdWlkX3QJCW5pZF91aWQ7CS8q
IHVzZXIvZ3JvdXAgaWQgKi8KKwlnaWRfdAkJbmlkX2dpZDsKKwlpbnQJCW5pZF91c2VybWF4Owkv
KiBVcHBlciBib3VuZCBvbiB1c2VyIG5hbWUgY2FjaGUgKi8KKwlpbnQJCW5pZF91c2VydGltZW91
dDsvKiBVc2VyIG5hbWUgdGltZW91dCAobWludXRlcykgKi8KKwl1X2NoYXIJCSpuaWRfbmFtZTsJ
LyogTmFtZSAqLworCWludAkJbmlkX25hbWVsZW47CS8qIGFuZCBpdHMgbGVuZ3RoICovCiB9Owog
CiBzdHJ1Y3QgbmZzZF9jbGlkIHsKLS0tIGZzL25mcy9uZnNfdmFyLmguc2F2CTIwMTUtMDktMjgg
MTg6NDk6MzUuMDAwMDAwMDAwIC0wNDAwCisrKyBmcy9uZnMvbmZzX3Zhci5oCTIwMTUtMTEtMTMg
MTk6MzU6MzYuNjA3ODM3MDAwIC0wNTAwCkBAIC0yOTUsNiArMjk1LDcgQEAgdm9pZCBuZnN2NF9z
ZXRzZXF1ZW5jZShzdHJ1Y3QgbmZzbW91bnQgKgogaW50IG5mc3Y0X3NlcXVlbmNlbG9va3VwKHN0
cnVjdCBuZnNtb3VudCAqLCBzdHJ1Y3QgbmZzY2xzZXNzaW9uICosIGludCAqLAogICAgIGludCAq
LCB1aW50MzJfdCAqLCB1aW50OF90ICopOwogdm9pZCBuZnN2NF9mcmVlc2xvdChzdHJ1Y3QgbmZz
Y2xzZXNzaW9uICosIGludCk7CitzdHJ1Y3QgdWNyZWQgKm5mc3J2X2dldGdycHNjcmVkKHN0cnVj
dCB1Y3JlZCAqKTsKIAogLyogbmZzX2NsY29tc3Vicy5jICovCiB2b2lkIG5mc21fdWlvbWJ1Zihz
dHJ1Y3QgbmZzcnZfZGVzY3JpcHQgKiwgc3RydWN0IHVpbyAqLCBpbnQpOwotLS0gZnMvbmZzL25m
c19jb21tb25zdWJzLmMuc2F2CTIwMTUtMDktMjggMTg6NDk6MzUuMDAwMDAwMDAwIC0wNDAwCisr
KyBmcy9uZnMvbmZzX2NvbW1vbnN1YnMuYwkyMDE1LTExLTEzIDIwOjEyOjExLjA5MDg3MzAwMCAt
MDUwMApAQCAtNDQsNiArNDQsOCBAQCBfX0ZCU0RJRCgiJEZyZWVCU0Q6IGhlYWQvc3lzL2ZzL25m
cy9uZnNfCiAKICNpbmNsdWRlIDxmcy9uZnMvbmZzcG9ydC5oPgogCisjaW5jbHVkZSA8c2VjdXJp
dHkvbWFjL21hY19mcmFtZXdvcmsuaD4KKwogLyoKICAqIERhdGEgaXRlbXMgY29udmVydGVkIHRv
IHhkciBhdCBzdGFydHVwLCBzaW5jZSB0aGV5IGFyZSBjb25zdGFudAogICogVGhpcyBpcyBraW5k
YSBob2tleSwgYnV0IG1heSBzYXZlIGEgbGl0dGxlIHRpbWUgZG9pbmcgYnl0ZSBzd2FwcwpAQCAt
NjgsNiArNzAsNyBAQCBpbnQgbmNsX21idWZfbWxlbiA9IE1MRU47CiBpbnQgbmZzZF9lbmFibGVf
c3RyaW5ndG91aWQgPSAwOwogTkZTTkFNRUlETVVURVg7CiBORlNTT0NLTVVURVg7CitleHRlcm4g
aW50IG5mc3J2X2x1Z2hhc2hzaXplOwogCiAvKgogICogVGhpcyBhcnJheSBvZiBzdHJ1Y3R1cmVz
IGluZGljYXRlcywgZm9yIFY0OgpAQCAtMTU0LDExICsxNTcsMTQgQEAgc3RhdGljIGludCBuZnNy
dl91c2VyY250ID0gMDsKIHN0YXRpYyBpbnQgbmZzcnZfZG5zbmFtZWxlbjsKIHN0YXRpYyB1X2No
YXIgKm5mc3J2X2Ruc25hbWUgPSBOVUxMOwogc3RhdGljIGludCBuZnNydl91c2VybWF4ID0gOTk5
OTk5OTk5Owotc3RhdGljIHN0cnVjdCBuZnN1c2VyaGFzaGhlYWQgbmZzdXNlcmhhc2hbTkZTVVNF
UkhBU0hTSVpFXTsKLXN0YXRpYyBzdHJ1Y3QgbmZzdXNlcmhhc2hoZWFkIG5mc3VzZXJuYW1laGFz
aFtORlNVU0VSSEFTSFNJWkVdOwotc3RhdGljIHN0cnVjdCBuZnN1c2VyaGFzaGhlYWQgbmZzZ3Jv
dXBoYXNoW05GU0dST1VQSEFTSFNJWkVdOwotc3RhdGljIHN0cnVjdCBuZnN1c2VyaGFzaGhlYWQg
bmZzZ3JvdXBuYW1laGFzaFtORlNHUk9VUEhBU0hTSVpFXTsKLXN0YXRpYyBzdHJ1Y3QgbmZzdXNl
cmxydWhlYWQgbmZzdXNlcmxydWhlYWQ7CitzdHJ1Y3QgbmZzcnZfbHVnaGFzaCB7CisJc3RydWN0
IG10eAkJbXR4OworCXN0cnVjdCBuZnN1c2VyaGFzaGhlYWQJbHVnaGVhZDsKK307CitzdGF0aWMg
c3RydWN0IG5mc3J2X2x1Z2hhc2gJKm5mc3VzZXJoYXNoOworc3RhdGljIHN0cnVjdCBuZnNydl9s
dWdoYXNoCSpuZnN1c2VybmFtZWhhc2g7CitzdGF0aWMgc3RydWN0IG5mc3J2X2x1Z2hhc2gJKm5m
c2dyb3VwaGFzaDsKK3N0YXRpYyBzdHJ1Y3QgbmZzcnZfbHVnaGFzaAkqbmZzZ3JvdXBuYW1laGFz
aDsKIAogLyoKICAqIFRoaXMgc3RhdGljIGFycmF5IGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0
aGUgUlBDIGdlbmVyYXRlcyBhIGxhcmdlCkBAIC0xNzcsNyArMTgzLDcgQEAgc3RhdGljIHZvaWQg
bmZzdjRfd2FudGVkKHN0cnVjdCBuZnN2NGxvYwogc3RhdGljIGludCBuZnNydl9jbXBtaXhlZGNh
c2UodV9jaGFyICpjcCwgdV9jaGFyICpjcDIsIGludCBsZW4pOwogc3RhdGljIGludCBuZnNydl9n
ZXR1c2VyKGludCBwcm9jbnVtLCB1aWRfdCB1aWQsIGdpZF90IGdpZCwgY2hhciAqbmFtZSwKICAg
ICBORlNQUk9DX1QgKnApOwotc3RhdGljIHZvaWQgbmZzcnZfcmVtb3ZldXNlcihzdHJ1Y3QgbmZz
dXNyZ3JwICp1c3JwKTsKK3N0YXRpYyB2b2lkIG5mc3J2X3JlbW92ZXVzZXIoc3RydWN0IG5mc3Vz
cmdycCAqdXNycCwgaW50IGlzdXNlcik7CiBzdGF0aWMgaW50IG5mc3J2X2dldHJlZnN0cihzdHJ1
Y3QgbmZzcnZfZGVzY3JpcHQgKiwgdV9jaGFyICoqLCB1X2NoYXIgKiosCiAgICAgaW50ICosIGlu
dCAqKTsKIHN0YXRpYyB2b2lkIG5mc3J2X3JlZnN0cmJpZ2Vub3VnaChpbnQsIHVfY2hhciAqKiwg
dV9jaGFyICoqLCBpbnQgKik7CkBAIC0yNTQ4LDE4ICsyNTU0LDE3IEBAIG5mc3Y0X3VpZHRvc3Ry
KHVpZF90IHVpZCwgdV9jaGFyICoqY3BwLCAKIAl1X2NoYXIgKmNwID0gKmNwcDsKIAl1aWRfdCB0
bXA7CiAJaW50IGNudCwgaGFzYW1wZXJzYW5kLCBsZW4gPSBORlNWNF9TTUFMTFNUUiwgcmV0Owor
CXN0cnVjdCBuZnNydl9sdWdoYXNoICpocDsKIAogCWNudCA9IDA7CiB0cnlhZ2FpbjoKLQlORlNM
T0NLTkFNRUlEKCk7Ci0JaWYgKG5mc3J2X2Ruc25hbWUpIHsKKwlpZiAobmZzcnZfZG5zbmFtZWxl
biA+IDApIHsKIAkJLyoKIAkJICogQWx3YXlzIG1hcCBuZnNydl9kZWZhdWx0dWlkIHRvICJub2Jv
ZHkiLgogCQkgKi8KIAkJaWYgKHVpZCA9PSBuZnNydl9kZWZhdWx0dWlkKSB7CiAJCQlpID0gbmZz
cnZfZG5zbmFtZWxlbiArIDc7CiAJCQlpZiAoaSA+IGxlbikgewotCQkJCU5GU1VOTE9DS05BTUVJ
RCgpOwogCQkJCWlmIChsZW4gPiBORlNWNF9TTUFMTFNUUikKIAkJCQkJZnJlZShjcCwgTV9ORlNT
VFJJTkcpOwogCQkJCWNwID0gbWFsbG9jKGksIE1fTkZTU1RSSU5HLCBNX1dBSVRPSyk7CkBAIC0y
NTcxLDExICsyNTc2LDEyIEBAIHRyeWFnYWluOgogCQkJTkZTQkNPUFkoIm5vYm9keUAiLCBjcCwg
Nyk7CiAJCQljcCArPSA3OwogCQkJTkZTQkNPUFkobmZzcnZfZG5zbmFtZSwgY3AsIG5mc3J2X2Ru
c25hbWVsZW4pOwotCQkJTkZTVU5MT0NLTkFNRUlEKCk7CiAJCQlyZXR1cm47CiAJCX0KIAkJaGFz
YW1wZXJzYW5kID0gMDsKLQkJTElTVF9GT1JFQUNIKHVzcnAsIE5GU1VTRVJIQVNIKHVpZCksIGx1
Z19udW1oYXNoKSB7CisJCWhwID0gTkZTVVNFUkhBU0godWlkKTsKKwkJbXR4X2xvY2soJmhwLT5t
dHgpOworCQlUQUlMUV9GT1JFQUNIKHVzcnAsICZocC0+bHVnaGVhZCwgbHVnX251bWhhc2gpIHsK
IAkJCWlmICh1c3JwLT5sdWdfdWlkID09IHVpZCkgewogCQkJCWlmICh1c3JwLT5sdWdfZXhwaXJ5
IDwgTkZTRF9NT05PU0VDKQogCQkJCQlicmVhazsKQEAgLTI1OTUsNyArMjYwMSw3IEBAIHRyeWFn
YWluOgogCQkJCQlpID0gdXNycC0+bHVnX25hbWVsZW4gKwogCQkJCQkgICAgbmZzcnZfZG5zbmFt
ZWxlbiArIDE7CiAJCQkJaWYgKGkgPiBsZW4pIHsKLQkJCQkJTkZTVU5MT0NLTkFNRUlEKCk7CisJ
CQkJCW10eF91bmxvY2soJmhwLT5tdHgpOwogCQkJCQlpZiAobGVuID4gTkZTVjRfU01BTExTVFIp
CiAJCQkJCQlmcmVlKGNwLCBNX05GU1NUUklORyk7CiAJCQkJCWNwID0gbWFsbG9jKGksIE1fTkZT
U1RSSU5HLCBNX1dBSVRPSyk7CkBAIC0yNjEwLDIwICsyNjE2LDE5IEBAIHRyeWFnYWluOgogCQkJ
CQkqY3ArKyA9ICdAJzsKIAkJCQkJTkZTQkNPUFkobmZzcnZfZG5zbmFtZSwgY3AsIG5mc3J2X2Ru
c25hbWVsZW4pOwogCQkJCX0KLQkJCQlUQUlMUV9SRU1PVkUoJm5mc3VzZXJscnVoZWFkLCB1c3Jw
LCBsdWdfbHJ1KTsKLQkJCQlUQUlMUV9JTlNFUlRfVEFJTCgmbmZzdXNlcmxydWhlYWQsIHVzcnAs
IGx1Z19scnUpOwotCQkJCU5GU1VOTE9DS05BTUVJRCgpOworCQkJCVRBSUxRX1JFTU9WRSgmaHAt
Pmx1Z2hlYWQsIHVzcnAsIGx1Z19udW1oYXNoKTsKKwkJCQlUQUlMUV9JTlNFUlRfVEFJTCgmaHAt
Pmx1Z2hlYWQsIHVzcnAsCisJCQkJICAgIGx1Z19udW1oYXNoKTsKKwkJCQltdHhfdW5sb2NrKCZo
cC0+bXR4KTsKIAkJCQlyZXR1cm47CiAJCQl9CiAJCX0KLQkJTkZTVU5MT0NLTkFNRUlEKCk7CisJ
CW10eF91bmxvY2soJmhwLT5tdHgpOwogCQljbnQrKzsKIAkJcmV0ID0gbmZzcnZfZ2V0dXNlcihS
UENORlNVU0VSRF9HRVRVSUQsIHVpZCwgKGdpZF90KTAsCiAJCSAgICBOVUxMLCBwKTsKIAkJaWYg
KHJldCA9PSAwICYmIGNudCA8IDIpCiAJCQlnb3RvIHRyeWFnYWluOwotCX0gZWxzZSB7Ci0JCU5G
U1VOTE9DS05BTUVJRCgpOwogCX0KIAogCS8qCkBAIC0yNjQ3LDYgKzI2NTIsNTIgQEAgdHJ5YWdh
aW46CiB9CiAKIC8qCisgKiBHZXQgYSBjcmVkZW50aWFsIGZvciB0aGUgdWlkIHdpdGggdGhlIHNl
cnZlcidzIGdyb3VwIGxpc3QuCisgKiBJZiBub25lIGlzIGZvdW5kLCBqdXN0IHJldHVybiB0aGUg
Y3JlZGVudGlhbCBwYXNzZWQgaW4gYWZ0ZXIKKyAqIGxvZ2dpbmcgYSB3YXJuaW5nIG1lc3NhZ2Uu
CisgKi8KK3N0cnVjdCB1Y3JlZCAqCituZnNydl9nZXRncnBzY3JlZChzdHJ1Y3QgdWNyZWQgKm9s
ZGNyZWQpCit7CisJc3RydWN0IG5mc3VzcmdycCAqdXNycDsKKwlzdHJ1Y3QgdWNyZWQgKm5ld2Ny
ZWQ7CisJaW50IGNudCwgcmV0OworCXVpZF90IHVpZDsKKwlzdHJ1Y3QgbmZzcnZfbHVnaGFzaCAq
aHA7CisKKwljbnQgPSAwOworCXVpZCA9IG9sZGNyZWQtPmNyX3VpZDsKK3RyeWFnYWluOgorCWlm
IChuZnNydl9kbnNuYW1lbGVuID4gMCkgeworCQlocCA9IE5GU1VTRVJIQVNIKHVpZCk7CisJCW10
eF9sb2NrKCZocC0+bXR4KTsKKwkJVEFJTFFfRk9SRUFDSCh1c3JwLCAmaHAtPmx1Z2hlYWQsIGx1
Z19udW1oYXNoKSB7CisJCQlpZiAodXNycC0+bHVnX3VpZCA9PSB1aWQpIHsKKwkJCQlpZiAodXNy
cC0+bHVnX2V4cGlyeSA8IE5GU0RfTU9OT1NFQykKKwkJCQkJYnJlYWs7CisJCQkJaWYgKHVzcnAt
Pmx1Z19jcmVkICE9IE5VTEwpIHsKKwkJCQkJbmV3Y3JlZCA9IGNyaG9sZCh1c3JwLT5sdWdfY3Jl
ZCk7CisJCQkJCWNyZnJlZShvbGRjcmVkKTsKKwkJCQl9IGVsc2UKKwkJCQkJbmV3Y3JlZCA9IG9s
ZGNyZWQ7CisJCQkJVEFJTFFfUkVNT1ZFKCZocC0+bHVnaGVhZCwgdXNycCwgbHVnX251bWhhc2gp
OworCQkJCVRBSUxRX0lOU0VSVF9UQUlMKCZocC0+bHVnaGVhZCwgdXNycCwKKwkJCQkgICAgbHVn
X251bWhhc2gpOworCQkJCW10eF91bmxvY2soJmhwLT5tdHgpOworCQkJCXJldHVybiAobmV3Y3Jl
ZCk7CisJCQl9CisJCX0KKwkJbXR4X3VubG9jaygmaHAtPm10eCk7CisJCWNudCsrOworCQlyZXQg
PSBuZnNydl9nZXR1c2VyKFJQQ05GU1VTRVJEX0dFVFVJRCwgdWlkLCAoZ2lkX3QpMCwKKwkJICAg
IE5VTEwsIGN1cnRocmVhZCk7CisJCWlmIChyZXQgPT0gMCAmJiBjbnQgPCAyKQorCQkJZ290byB0
cnlhZ2FpbjsKKwl9CisJcmV0dXJuIChvbGRjcmVkKTsKK30KKworLyoKICAqIENvbnZlcnQgYSBz
dHJpbmcgdG8gYSB1aWQuCiAgKiBJZiBubyBjb252ZXJzaW9uIGlzIHBvc3NpYmxlIHJldHVybiBO
RlNFUlJfQkFET1dORVIsIG90aGVyd2lzZQogICogcmV0dXJuIDAuCkBAIC0yNjY0LDYgKzI3MTUs
NyBAQCBuZnN2NF9zdHJ0b3VpZChzdHJ1Y3QgbmZzcnZfZGVzY3JpcHQgKm5kCiAJaW50IGNudCwg
cmV0OwogCWludCBlcnJvciA9IDA7CiAJdWlkX3QgdHVpZDsKKwlzdHJ1Y3QgbmZzcnZfbHVnaGFz
aCAqaHAsICpocDI7CiAKIAlpZiAobGVuID09IDApIHsKIAkJZXJyb3IgPSBORlNFUlJfQkFET1dO
RVI7CkBAIC0yNjkzLDQ5ICsyNzQ1LDU1IEBAIG5mc3Y0X3N0cnRvdWlkKHN0cnVjdCBuZnNydl9k
ZXNjcmlwdCAqbmQKIAogCWNudCA9IDA7CiB0cnlhZ2FpbjoKLQlORlNMT0NLTkFNRUlEKCk7Ci0J
LyoKLQkgKiBJZiBhbiAnQCcgaXMgZm91bmQgYW5kIHRoZSBkb21haW4gbmFtZSBtYXRjaGVzLCBz
ZWFyY2ggZm9yIHRoZSBuYW1lCi0JICogd2l0aCBkbnMgc3RyaXBwZWQgb2ZmLgotCSAqIE1peGVk
IGNhc2UgYWxwYWhiZXRpY3Mgd2lsbCBtYXRjaCBmb3IgdGhlIGRvbWFpbiBuYW1lLCBidXQgYWxs
Ci0JICogdXBwZXIgY2FzZSB3aWxsIG5vdC4KLQkgKi8KLQlpZiAoY250ID09IDAgJiYgaSA8IGxl
biAmJiBpID4gMCAmJiBuZnNydl9kbnNuYW1lICYmCi0JICAgIChsZW4gLSAxIC0gaSkgPT0gbmZz
cnZfZG5zbmFtZWxlbiAmJgotCSAgICAhbmZzcnZfY21wbWl4ZWRjYXNlKGNwLCBuZnNydl9kbnNu
YW1lLCBuZnNydl9kbnNuYW1lbGVuKSkgewotCQlsZW4gLT0gKG5mc3J2X2Ruc25hbWVsZW4gKyAx
KTsKLQkJKihjcCAtIDEpID0gJ1wwJzsKLQl9Ci0KLQkvKgotCSAqIENoZWNrIGZvciB0aGUgc3Bl
Y2lhbCBjYXNlIG9mICJub2JvZHkiLgotCSAqLwotCWlmIChsZW4gPT0gNiAmJiAhTkZTQkNNUChz
dHIsICJub2JvZHkiLCA2KSkgewotCQkqdWlkcCA9IG5mc3J2X2RlZmF1bHR1aWQ7Ci0JCU5GU1VO
TE9DS05BTUVJRCgpOwotCQllcnJvciA9IDA7Ci0JCWdvdG8gb3V0OwotCX0KLQotCUxJU1RfRk9S
RUFDSCh1c3JwLCBORlNVU0VSTkFNRUhBU0goc3RyLCBsZW4pLCBsdWdfbmFtZWhhc2gpIHsKLQkJ
aWYgKHVzcnAtPmx1Z19uYW1lbGVuID09IGxlbiAmJgotCQkgICAgIU5GU0JDTVAodXNycC0+bHVn
X25hbWUsIHN0ciwgbGVuKSkgewotCQkJaWYgKHVzcnAtPmx1Z19leHBpcnkgPCBORlNEX01PTk9T
RUMpCi0JCQkJYnJlYWs7Ci0JCQkqdWlkcCA9IHVzcnAtPmx1Z191aWQ7Ci0JCQlUQUlMUV9SRU1P
VkUoJm5mc3VzZXJscnVoZWFkLCB1c3JwLCBsdWdfbHJ1KTsKLQkJCVRBSUxRX0lOU0VSVF9UQUlM
KCZuZnN1c2VybHJ1aGVhZCwgdXNycCwgbHVnX2xydSk7Ci0JCQlORlNVTkxPQ0tOQU1FSUQoKTsK
KwlpZiAobmZzcnZfZG5zbmFtZWxlbiA+IDApIHsKKwkJLyoKKwkJICogSWYgYW4gJ0AnIGlzIGZv
dW5kIGFuZCB0aGUgZG9tYWluIG5hbWUgbWF0Y2hlcywgc2VhcmNoIGZvcgorCQkgKiB0aGUgbmFt
ZSB3aXRoIGRucyBzdHJpcHBlZCBvZmYuCisJCSAqIE1peGVkIGNhc2UgYWxwYWhiZXRpY3Mgd2ls
bCBtYXRjaCBmb3IgdGhlIGRvbWFpbiBuYW1lLCBidXQKKwkJICogYWxsIHVwcGVyIGNhc2Ugd2ls
bCBub3QuCisJCSAqLworCQlpZiAoY250ID09IDAgJiYgaSA8IGxlbiAmJiBpID4gMCAmJgorCQkg
ICAgKGxlbiAtIDEgLSBpKSA9PSBuZnNydl9kbnNuYW1lbGVuICYmCisJCSAgICAhbmZzcnZfY21w
bWl4ZWRjYXNlKGNwLCBuZnNydl9kbnNuYW1lLCBuZnNydl9kbnNuYW1lbGVuKSkgeworCQkJbGVu
IC09IChuZnNydl9kbnNuYW1lbGVuICsgMSk7CisJCQkqKGNwIC0gMSkgPSAnXDAnOworCQl9CisJ
CisJCS8qCisJCSAqIENoZWNrIGZvciB0aGUgc3BlY2lhbCBjYXNlIG9mICJub2JvZHkiLgorCQkg
Ki8KKwkJaWYgKGxlbiA9PSA2ICYmICFORlNCQ01QKHN0ciwgIm5vYm9keSIsIDYpKSB7CisJCQkq
dWlkcCA9IG5mc3J2X2RlZmF1bHR1aWQ7CiAJCQllcnJvciA9IDA7CiAJCQlnb3RvIG91dDsKIAkJ
fQorCQorCQlocCA9IE5GU1VTRVJOQU1FSEFTSChzdHIsIGxlbik7CisJCW10eF9sb2NrKCZocC0+
bXR4KTsKKwkJVEFJTFFfRk9SRUFDSCh1c3JwLCAmaHAtPmx1Z2hlYWQsIGx1Z19uYW1laGFzaCkg
eworCQkJaWYgKHVzcnAtPmx1Z19uYW1lbGVuID09IGxlbiAmJgorCQkJICAgICFORlNCQ01QKHVz
cnAtPmx1Z19uYW1lLCBzdHIsIGxlbikpIHsKKwkJCQlpZiAodXNycC0+bHVnX2V4cGlyeSA8IE5G
U0RfTU9OT1NFQykKKwkJCQkJYnJlYWs7CisJCQkJaHAyID0gTkZTVVNFUkhBU0godXNycC0+bHVn
X3VpZCk7CisJCQkJbXR4X2xvY2soJmhwMi0+bXR4KTsKKwkJCQlUQUlMUV9SRU1PVkUoJmhwMi0+
bHVnaGVhZCwgdXNycCwgbHVnX251bWhhc2gpOworCQkJCVRBSUxRX0lOU0VSVF9UQUlMKCZocDIt
Pmx1Z2hlYWQsIHVzcnAsCisJCQkJICAgIGx1Z19udW1oYXNoKTsKKwkJCQkqdWlkcCA9IHVzcnAt
Pmx1Z191aWQ7CisJCQkJbXR4X3VubG9jaygmaHAyLT5tdHgpOworCQkJCW10eF91bmxvY2soJmhw
LT5tdHgpOworCQkJCWVycm9yID0gMDsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJfQorCQltdHhf
dW5sb2NrKCZocC0+bXR4KTsKKwkJY250Kys7CisJCXJldCA9IG5mc3J2X2dldHVzZXIoUlBDTkZT
VVNFUkRfR0VUVVNFUiwgKHVpZF90KTAsIChnaWRfdCkwLAorCQkgICAgc3RyLCBwKTsKKwkJaWYg
KHJldCA9PSAwICYmIGNudCA8IDIpCisJCQlnb3RvIHRyeWFnYWluOwogCX0KLQlORlNVTkxPQ0tO
QU1FSUQoKTsKLQljbnQrKzsKLQlyZXQgPSBuZnNydl9nZXR1c2VyKFJQQ05GU1VTRVJEX0dFVFVT
RVIsICh1aWRfdCkwLCAoZ2lkX3QpMCwKLQkgICAgc3RyLCBwKTsKLQlpZiAocmV0ID09IDAgJiYg
Y250IDwgMikKLQkJZ290byB0cnlhZ2FpbjsKIAllcnJvciA9IE5GU0VSUl9CQURPV05FUjsKIAog
b3V0OgpAQCAtMjc1OCwxOCArMjgxNiwxNyBAQCBuZnN2NF9naWR0b3N0cihnaWRfdCBnaWQsIHVf
Y2hhciAqKmNwcCwgCiAJdV9jaGFyICpjcCA9ICpjcHA7CiAJZ2lkX3QgdG1wOwogCWludCBjbnQs
IGhhc2FtcGVyc2FuZCwgbGVuID0gTkZTVjRfU01BTExTVFIsIHJldDsKKwlzdHJ1Y3QgbmZzcnZf
bHVnaGFzaCAqaHA7CiAKIAljbnQgPSAwOwogdHJ5YWdhaW46Ci0JTkZTTE9DS05BTUVJRCgpOwot
CWlmIChuZnNydl9kbnNuYW1lKSB7CisJaWYgKG5mc3J2X2Ruc25hbWVsZW4gPiAwKSB7CiAJCS8q
CiAJCSAqIEFsd2F5cyBtYXAgbmZzcnZfZGVmYXVsdGdpZCB0byAibm9ncm91cCIuCiAJCSAqLwog
CQlpZiAoZ2lkID09IG5mc3J2X2RlZmF1bHRnaWQpIHsKIAkJCWkgPSBuZnNydl9kbnNuYW1lbGVu
ICsgODsKIAkJCWlmIChpID4gbGVuKSB7Ci0JCQkJTkZTVU5MT0NLTkFNRUlEKCk7CiAJCQkJaWYg
KGxlbiA+IE5GU1Y0X1NNQUxMU1RSKQogCQkJCQlmcmVlKGNwLCBNX05GU1NUUklORyk7CiAJCQkJ
Y3AgPSBtYWxsb2MoaSwgTV9ORlNTVFJJTkcsIE1fV0FJVE9LKTsKQEAgLTI3ODEsMTEgKzI4Mzgs
MTIgQEAgdHJ5YWdhaW46CiAJCQlORlNCQ09QWSgibm9ncm91cEAiLCBjcCwgOCk7CiAJCQljcCAr
PSA4OwogCQkJTkZTQkNPUFkobmZzcnZfZG5zbmFtZSwgY3AsIG5mc3J2X2Ruc25hbWVsZW4pOwot
CQkJTkZTVU5MT0NLTkFNRUlEKCk7CiAJCQlyZXR1cm47CiAJCX0KIAkJaGFzYW1wZXJzYW5kID0g
MDsKLQkJTElTVF9GT1JFQUNIKHVzcnAsIE5GU0dST1VQSEFTSChnaWQpLCBsdWdfbnVtaGFzaCkg
eworCQlocCA9IE5GU0dST1VQSEFTSChnaWQpOworCQltdHhfbG9jaygmaHAtPm10eCk7CisJCVRB
SUxRX0ZPUkVBQ0godXNycCwgJmhwLT5sdWdoZWFkLCBsdWdfbnVtaGFzaCkgewogCQkJaWYgKHVz
cnAtPmx1Z19naWQgPT0gZ2lkKSB7CiAJCQkJaWYgKHVzcnAtPmx1Z19leHBpcnkgPCBORlNEX01P
Tk9TRUMpCiAJCQkJCWJyZWFrOwpAQCAtMjgwNSw3ICsyODYzLDcgQEAgdHJ5YWdhaW46CiAJCQkJ
CWkgPSB1c3JwLT5sdWdfbmFtZWxlbiArCiAJCQkJCSAgICBuZnNydl9kbnNuYW1lbGVuICsgMTsK
IAkJCQlpZiAoaSA+IGxlbikgewotCQkJCQlORlNVTkxPQ0tOQU1FSUQoKTsKKwkJCQkJbXR4X3Vu
bG9jaygmaHAtPm10eCk7CiAJCQkJCWlmIChsZW4gPiBORlNWNF9TTUFMTFNUUikKIAkJCQkJCWZy
ZWUoY3AsIE1fTkZTU1RSSU5HKTsKIAkJCQkJY3AgPSBtYWxsb2MoaSwgTV9ORlNTVFJJTkcsIE1f
V0FJVE9LKTsKQEAgLTI4MjAsMjAgKzI4NzgsMTkgQEAgdHJ5YWdhaW46CiAJCQkJCSpjcCsrID0g
J0AnOwogCQkJCQlORlNCQ09QWShuZnNydl9kbnNuYW1lLCBjcCwgbmZzcnZfZG5zbmFtZWxlbik7
CiAJCQkJfQotCQkJCVRBSUxRX1JFTU9WRSgmbmZzdXNlcmxydWhlYWQsIHVzcnAsIGx1Z19scnUp
OwotCQkJCVRBSUxRX0lOU0VSVF9UQUlMKCZuZnN1c2VybHJ1aGVhZCwgdXNycCwgbHVnX2xydSk7
Ci0JCQkJTkZTVU5MT0NLTkFNRUlEKCk7CisJCQkJVEFJTFFfUkVNT1ZFKCZocC0+bHVnaGVhZCwg
dXNycCwgbHVnX251bWhhc2gpOworCQkJCVRBSUxRX0lOU0VSVF9UQUlMKCZocC0+bHVnaGVhZCwg
dXNycCwKKwkJCQkgICAgbHVnX251bWhhc2gpOworCQkJCW10eF91bmxvY2soJmhwLT5tdHgpOwog
CQkJCXJldHVybjsKIAkJCX0KIAkJfQotCQlORlNVTkxPQ0tOQU1FSUQoKTsKKwkJbXR4X3VubG9j
aygmaHAtPm10eCk7CiAJCWNudCsrOwogCQlyZXQgPSBuZnNydl9nZXR1c2VyKFJQQ05GU1VTRVJE
X0dFVEdJRCwgKHVpZF90KTAsIGdpZCwKIAkJICAgIE5VTEwsIHApOwogCQlpZiAocmV0ID09IDAg
JiYgY250IDwgMikKIAkJCWdvdG8gdHJ5YWdhaW47Ci0JfSBlbHNlIHsKLQkJTkZTVU5MT0NLTkFN
RUlEKCk7CiAJfQogCiAJLyoKQEAgLTI4NzQsNiArMjkzMSw3IEBAIG5mc3Y0X3N0cnRvZ2lkKHN0
cnVjdCBuZnNydl9kZXNjcmlwdCAqbmQKIAlpbnQgY250LCByZXQ7CiAJaW50IGVycm9yID0gMDsK
IAlnaWRfdCB0Z2lkOworCXN0cnVjdCBuZnNydl9sdWdoYXNoICpocCwgKmhwMjsKIAogCWlmIChs
ZW4gPT0gMCkgewogCQllcnJvciA9ICBORlNFUlJfQkFET1dORVI7CkBAIC0yOTAzLDQ3ICsyOTYx
LDUzIEBAIG5mc3Y0X3N0cnRvZ2lkKHN0cnVjdCBuZnNydl9kZXNjcmlwdCAqbmQKIAogCWNudCA9
IDA7CiB0cnlhZ2FpbjoKLQlORlNMT0NLTkFNRUlEKCk7Ci0JLyoKLQkgKiBJZiBhbiAnQCcgaXMg
Zm91bmQgYW5kIHRoZSBkbnMgbmFtZSBtYXRjaGVzLCBzZWFyY2ggZm9yIHRoZSBuYW1lCi0JICog
d2l0aCB0aGUgZG5zIHN0cmlwcGVkIG9mZi4KLQkgKi8KLQlpZiAoY250ID09IDAgJiYgaSA8IGxl
biAmJiBpID4gMCAmJiBuZnNydl9kbnNuYW1lICYmCi0JICAgIChsZW4gLSAxIC0gaSkgPT0gbmZz
cnZfZG5zbmFtZWxlbiAmJgotCSAgICAhbmZzcnZfY21wbWl4ZWRjYXNlKGNwLCBuZnNydl9kbnNu
YW1lLCBuZnNydl9kbnNuYW1lbGVuKSkgewotCQlsZW4gLT0gKG5mc3J2X2Ruc25hbWVsZW4gKyAx
KTsKLQkJKihjcCAtIDEpID0gJ1wwJzsKLQl9Ci0KLQkvKgotCSAqIENoZWNrIGZvciB0aGUgc3Bl
Y2lhbCBjYXNlIG9mICJub2dyb3VwIi4KLQkgKi8KLQlpZiAobGVuID09IDcgJiYgIU5GU0JDTVAo
c3RyLCAibm9ncm91cCIsIDcpKSB7Ci0JCSpnaWRwID0gbmZzcnZfZGVmYXVsdGdpZDsKLQkJTkZT
VU5MT0NLTkFNRUlEKCk7Ci0JCWVycm9yID0gMDsKLQkJZ290byBvdXQ7Ci0JfQotCi0JTElTVF9G
T1JFQUNIKHVzcnAsIE5GU0dST1VQTkFNRUhBU0goc3RyLCBsZW4pLCBsdWdfbmFtZWhhc2gpIHsK
LQkJaWYgKHVzcnAtPmx1Z19uYW1lbGVuID09IGxlbiAmJgotCQkgICAgIU5GU0JDTVAodXNycC0+
bHVnX25hbWUsIHN0ciwgbGVuKSkgewotCQkJaWYgKHVzcnAtPmx1Z19leHBpcnkgPCBORlNEX01P
Tk9TRUMpCi0JCQkJYnJlYWs7Ci0JCQkqZ2lkcCA9IHVzcnAtPmx1Z19naWQ7Ci0JCQlUQUlMUV9S
RU1PVkUoJm5mc3VzZXJscnVoZWFkLCB1c3JwLCBsdWdfbHJ1KTsKLQkJCVRBSUxRX0lOU0VSVF9U
QUlMKCZuZnN1c2VybHJ1aGVhZCwgdXNycCwgbHVnX2xydSk7Ci0JCQlORlNVTkxPQ0tOQU1FSUQo
KTsKKwlpZiAobmZzcnZfZG5zbmFtZWxlbiA+IDApIHsKKwkJLyoKKwkJICogSWYgYW4gJ0AnIGlz
IGZvdW5kIGFuZCB0aGUgZG5zIG5hbWUgbWF0Y2hlcywgc2VhcmNoIGZvciB0aGUKKwkJICogbmFt
ZSB3aXRoIHRoZSBkbnMgc3RyaXBwZWQgb2ZmLgorCQkgKi8KKwkJaWYgKGNudCA9PSAwICYmIGkg
PCBsZW4gJiYgaSA+IDAgJiYKKwkJICAgIChsZW4gLSAxIC0gaSkgPT0gbmZzcnZfZG5zbmFtZWxl
biAmJgorCQkgICAgIW5mc3J2X2NtcG1peGVkY2FzZShjcCwgbmZzcnZfZG5zbmFtZSwgbmZzcnZf
ZG5zbmFtZWxlbikpIHsKKwkJCWxlbiAtPSAobmZzcnZfZG5zbmFtZWxlbiArIDEpOworCQkJKihj
cCAtIDEpID0gJ1wwJzsKKwkJfQorCQorCQkvKgorCQkgKiBDaGVjayBmb3IgdGhlIHNwZWNpYWwg
Y2FzZSBvZiAibm9ncm91cCIuCisJCSAqLworCQlpZiAobGVuID09IDcgJiYgIU5GU0JDTVAoc3Ry
LCAibm9ncm91cCIsIDcpKSB7CisJCQkqZ2lkcCA9IG5mc3J2X2RlZmF1bHRnaWQ7CiAJCQllcnJv
ciA9IDA7CiAJCQlnb3RvIG91dDsKIAkJfQorCQorCQlocCA9IE5GU0dST1VQTkFNRUhBU0goc3Ry
LCBsZW4pOworCQltdHhfbG9jaygmaHAtPm10eCk7CisJCVRBSUxRX0ZPUkVBQ0godXNycCwgJmhw
LT5sdWdoZWFkLCBsdWdfbmFtZWhhc2gpIHsKKwkJCWlmICh1c3JwLT5sdWdfbmFtZWxlbiA9PSBs
ZW4gJiYKKwkJCSAgICAhTkZTQkNNUCh1c3JwLT5sdWdfbmFtZSwgc3RyLCBsZW4pKSB7CisJCQkJ
aWYgKHVzcnAtPmx1Z19leHBpcnkgPCBORlNEX01PTk9TRUMpCisJCQkJCWJyZWFrOworCQkJCWhw
MiA9IE5GU0dST1VQSEFTSCh1c3JwLT5sdWdfZ2lkKTsKKwkJCQltdHhfbG9jaygmaHAyLT5tdHgp
OworCQkJCVRBSUxRX1JFTU9WRSgmaHAyLT5sdWdoZWFkLCB1c3JwLCBsdWdfbnVtaGFzaCk7CisJ
CQkJVEFJTFFfSU5TRVJUX1RBSUwoJmhwMi0+bHVnaGVhZCwgdXNycCwKKwkJCQkgICAgbHVnX251
bWhhc2gpOworCQkJCSpnaWRwID0gdXNycC0+bHVnX2dpZDsKKwkJCQltdHhfdW5sb2NrKCZocDIt
Pm10eCk7CisJCQkJbXR4X3VubG9jaygmaHAtPm10eCk7CisJCQkJZXJyb3IgPSAwOworCQkJCWdv
dG8gb3V0OworCQkJfQorCQl9CisJCW10eF91bmxvY2soJmhwLT5tdHgpOworCQljbnQrKzsKKwkJ
cmV0ID0gbmZzcnZfZ2V0dXNlcihSUENORlNVU0VSRF9HRVRHUk9VUCwgKHVpZF90KTAsIChnaWRf
dCkwLAorCQkgICAgc3RyLCBwKTsKKwkJaWYgKHJldCA9PSAwICYmIGNudCA8IDIpCisJCQlnb3Rv
IHRyeWFnYWluOwogCX0KLQlORlNVTkxPQ0tOQU1FSUQoKTsKLQljbnQrKzsKLQlyZXQgPSBuZnNy
dl9nZXR1c2VyKFJQQ05GU1VTRVJEX0dFVEdST1VQLCAodWlkX3QpMCwgKGdpZF90KTAsCi0JICAg
IHN0ciwgcCk7Ci0JaWYgKHJldCA9PSAwICYmIGNudCA8IDIpCi0JCWdvdG8gdHJ5YWdhaW47CiAJ
ZXJyb3IgPSBORlNFUlJfQkFET1dORVI7CiAKIG91dDoKQEAgLTMxMDEsMTExICszMTY1LDIxOSBA
QCBBUFBMRVNUQVRJQyBpbnQKIG5mc3N2Y19pZG5hbWUoc3RydWN0IG5mc2RfaWRhcmdzICpuaWRw
KQogewogCXN0cnVjdCBuZnN1c3JncnAgKm51c3JwLCAqdXNycCwgKm5ld3VzcnA7Ci0Jc3RydWN0
IG5mc3VzZXJoYXNoaGVhZCAqaHA7Ci0JaW50IGk7CisJc3RydWN0IG5mc3J2X2x1Z2hhc2ggKmhw
X25hbWUsICpocF9pZG51bSwgKnRocDsKKwlpbnQgaSwgZ3JvdXBfbG9ja2VkLCBncm91cG5hbWVf
bG9ja2VkLCB1c2VyX2xvY2tlZCwgdXNlcm5hbWVfbG9ja2VkOwogCWludCBlcnJvciA9IDA7CiAJ
dV9jaGFyICpjcDsKKwlnaWRfdCAqZ3JwczsKKwlzdHJ1Y3QgdWNyZWQgKmNyOworCXN0YXRpYyBp
bnQgb25ldGhyZWFkID0gMDsKKwlzdGF0aWMgdGltZV90IGxhc3R0aW1lID0gMDsKIAogCWlmIChu
aWRwLT5uaWRfZmxhZyAmIE5GU0lEX0lOSVRJQUxJWkUpIHsKLQkgICAgY3AgPSAodV9jaGFyICop
bWFsbG9jKG5pZHAtPm5pZF9uYW1lbGVuICsgMSwKLQkJTV9ORlNTVFJJTkcsIE1fV0FJVE9LKTsK
LQkgICAgZXJyb3IgPSBjb3B5aW4oQ0FTVF9VU0VSX0FERFJfVChuaWRwLT5uaWRfbmFtZSksIGNw
LAotCQluaWRwLT5uaWRfbmFtZWxlbik7Ci0JICAgIE5GU0xPQ0tOQU1FSUQoKTsKLQkgICAgaWYg
KG5mc3J2X2Ruc25hbWUpIHsKKwkJY3AgPSAodV9jaGFyICopbWFsbG9jKG5pZHAtPm5pZF9uYW1l
bGVuICsgMSwgTV9ORlNTVFJJTkcsCisJCSAgICBNX1dBSVRPSyk7CisJCWVycm9yID0gY29weWlu
KENBU1RfVVNFUl9BRERSX1QobmlkcC0+bmlkX25hbWUpLCBjcCwKKwkJICAgIG5pZHAtPm5pZF9u
YW1lbGVuKTsKKwkJaWYgKGVycm9yICE9IDApIHsKKwkJCWZyZWUoY3AsIE1fTkZTU1RSSU5HKTsK
KwkJCWdvdG8gb3V0OworCQl9CisJCWlmIChhdG9taWNfY21wc2V0X2FjcV9pbnQoJm5mc3J2X2Ru
c25hbWVsZW4sIDAsIDApID09IDApIHsKKwkJCS8qCisJCQkgKiBGcmVlIHVwIGFsbCB0aGUgb2xk
IHN0dWZmIGFuZCByZWluaXRpYWxpemUgaGFzaAorCQkJICogbGlzdHMuICBBbGwgbXV0ZXhlcyBm
b3IgYm90aCBsaXN0cyBtdXN0IGJlIGxvY2tlZCwKKwkJCSAqIHdpdGggdGhlIHVzZXIvZ3JvdXAg
bmFtZSBvbmVzIGJlZm9yZSB0aGUgdWlkL2dpZAorCQkJICogb25lcywgdG8gYXZvaWQgYSBMT1Iu
CisJCQkgKi8KKwkJCWZvciAoaSA9IDA7IGkgPCBuZnNydl9sdWdoYXNoc2l6ZTsgaSsrKQorCQkJ
CW10eF9sb2NrKCZuZnN1c2VybmFtZWhhc2hbaV0ubXR4KTsKKwkJCWZvciAoaSA9IDA7IGkgPCBu
ZnNydl9sdWdoYXNoc2l6ZTsgaSsrKQorCQkJCW10eF9sb2NrKCZuZnN1c2VyaGFzaFtpXS5tdHgp
OworCQkJZm9yIChpID0gMDsgaSA8IG5mc3J2X2x1Z2hhc2hzaXplOyBpKyspCisJCQkJVEFJTFFf
Rk9SRUFDSF9TQUZFKHVzcnAsCisJCQkJICAgICZuZnN1c2VyaGFzaFtpXS5sdWdoZWFkLCBsdWdf
bnVtaGFzaCwgbnVzcnApCisJCQkJCW5mc3J2X3JlbW92ZXVzZXIodXNycCwgMSk7CisJCQlmb3Ig
KGkgPSAwOyBpIDwgbmZzcnZfbHVnaGFzaHNpemU7IGkrKykKKwkJCQltdHhfdW5sb2NrKCZuZnN1
c2VyaGFzaFtpXS5tdHgpOworCQkJZm9yIChpID0gMDsgaSA8IG5mc3J2X2x1Z2hhc2hzaXplOyBp
KyspCisJCQkJbXR4X3VubG9jaygmbmZzdXNlcm5hbWVoYXNoW2ldLm10eCk7CisJCQlmb3IgKGkg
PSAwOyBpIDwgbmZzcnZfbHVnaGFzaHNpemU7IGkrKykKKwkJCQltdHhfbG9jaygmbmZzZ3JvdXBu
YW1laGFzaFtpXS5tdHgpOworCQkJZm9yIChpID0gMDsgaSA8IG5mc3J2X2x1Z2hhc2hzaXplOyBp
KyspCisJCQkJbXR4X2xvY2soJm5mc2dyb3VwaGFzaFtpXS5tdHgpOworCQkJZm9yIChpID0gMDsg
aSA8IG5mc3J2X2x1Z2hhc2hzaXplOyBpKyspCisJCQkJVEFJTFFfRk9SRUFDSF9TQUZFKHVzcnAs
CisJCQkJICAgICZuZnNncm91cGhhc2hbaV0ubHVnaGVhZCwgbHVnX251bWhhc2gsCisJCQkJICAg
IG51c3JwKQorCQkJCQluZnNydl9yZW1vdmV1c2VyKHVzcnAsIDApOworCQkJZm9yIChpID0gMDsg
aSA8IG5mc3J2X2x1Z2hhc2hzaXplOyBpKyspCisJCQkJbXR4X3VubG9jaygmbmZzZ3JvdXBoYXNo
W2ldLm10eCk7CisJCQlmb3IgKGkgPSAwOyBpIDwgbmZzcnZfbHVnaGFzaHNpemU7IGkrKykKKwkJ
CQltdHhfdW5sb2NrKCZuZnNncm91cG5hbWVoYXNoW2ldLm10eCk7CisJCQlmcmVlKG5mc3J2X2Ru
c25hbWUsIE1fTkZTU1RSSU5HKTsKKwkJCW5mc3J2X2Ruc25hbWUgPSBOVUxMOworCQl9CisJCWlm
IChuZnN1c2VyaGFzaCA9PSBOVUxMKSB7CisJCQkvKiBBbGxvY2F0ZSB0aGUgaGFzaCB0YWJsZXMu
ICovCisJCQluZnN1c2VyaGFzaCA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IG5mc3J2X2x1Z2hhc2gp
ICoKKwkJCSAgICBuZnNydl9sdWdoYXNoc2l6ZSwgTV9ORlNVU0VSR1JPVVAsIE1fV0FJVE9LIHwK
KwkJCSAgICBNX1pFUk8pOworCQkJZm9yIChpID0gMDsgaSA8IG5mc3J2X2x1Z2hhc2hzaXplOyBp
KyspCisJCQkJbXR4X2luaXQoJm5mc3VzZXJoYXNoW2ldLm10eCwgIm5mc3VzZXJoYXNoIiwKKwkJ
CQkgICAgTlVMTCwgTVRYX0RFRiB8IE1UWF9EVVBPSyk7CisJCQluZnN1c2VybmFtZWhhc2ggPSBt
YWxsb2Moc2l6ZW9mKHN0cnVjdCBuZnNydl9sdWdoYXNoKSAqCisJCQkgICAgbmZzcnZfbHVnaGFz
aHNpemUsIE1fTkZTVVNFUkdST1VQLCBNX1dBSVRPSyB8CisJCQkgICAgTV9aRVJPKTsKKwkJCWZv
ciAoaSA9IDA7IGkgPCBuZnNydl9sdWdoYXNoc2l6ZTsgaSsrKQorCQkJCW10eF9pbml0KCZuZnN1
c2VybmFtZWhhc2hbaV0ubXR4LAorCQkJCSAgICAibmZzdXNlcm5hbWVoYXNoIiwgTlVMTCwgTVRY
X0RFRiB8CisJCQkJICAgIE1UWF9EVVBPSyk7CisJCQluZnNncm91cGhhc2ggPSBtYWxsb2Moc2l6
ZW9mKHN0cnVjdCBuZnNydl9sdWdoYXNoKSAqCisJCQkgICAgbmZzcnZfbHVnaGFzaHNpemUsIE1f
TkZTVVNFUkdST1VQLCBNX1dBSVRPSyB8CisJCQkgICAgTV9aRVJPKTsKKwkJCWZvciAoaSA9IDA7
IGkgPCBuZnNydl9sdWdoYXNoc2l6ZTsgaSsrKQorCQkJCW10eF9pbml0KCZuZnNncm91cGhhc2hb
aV0ubXR4LCAibmZzZ3JvdXBoYXNoIiwKKwkJCQkgICAgTlVMTCwgTVRYX0RFRiB8IE1UWF9EVVBP
Syk7CisJCQluZnNncm91cG5hbWVoYXNoID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgbmZzcnZfbHVn
aGFzaCkgKgorCQkJICAgIG5mc3J2X2x1Z2hhc2hzaXplLCBNX05GU1VTRVJHUk9VUCwgTV9XQUlU
T0sgfAorCQkJICAgIE1fWkVSTyk7CisJCQlmb3IgKGkgPSAwOyBpIDwgbmZzcnZfbHVnaGFzaHNp
emU7IGkrKykKKwkJCSAgICBtdHhfaW5pdCgmbmZzZ3JvdXBuYW1laGFzaFtpXS5tdHgsCisJCQkg
ICAgIm5mc2dyb3VwbmFtZWhhc2giLCBOVUxMLCBNVFhfREVGIHwgTVRYX0RVUE9LKTsKKwkJfQor
CQkvKiAoUmUpaW5pdGlhbGl6ZSB0aGUgbGlzdCBoZWFkcy4gKi8KKwkJZm9yIChpID0gMDsgaSA8
IG5mc3J2X2x1Z2hhc2hzaXplOyBpKyspCisJCQlUQUlMUV9JTklUKCZuZnN1c2VyaGFzaFtpXS5s
dWdoZWFkKTsKKwkJZm9yIChpID0gMDsgaSA8IG5mc3J2X2x1Z2hhc2hzaXplOyBpKyspCisJCQlU
QUlMUV9JTklUKCZuZnN1c2VybmFtZWhhc2hbaV0ubHVnaGVhZCk7CisJCWZvciAoaSA9IDA7IGkg
PCBuZnNydl9sdWdoYXNoc2l6ZTsgaSsrKQorCQkJVEFJTFFfSU5JVCgmbmZzZ3JvdXBoYXNoW2ld
Lmx1Z2hlYWQpOworCQlmb3IgKGkgPSAwOyBpIDwgbmZzcnZfbHVnaGFzaHNpemU7IGkrKykKKwkJ
CVRBSUxRX0lOSVQoJm5mc2dyb3VwbmFtZWhhc2hbaV0ubHVnaGVhZCk7CisKIAkJLyoKLQkJICog
RnJlZSB1cCBhbGwgdGhlIG9sZCBzdHVmZiBhbmQgcmVpbml0aWFsaXplIGhhc2ggbGlzdHMuCisJ
CSAqIFB1dCBuYW1lIGluICJETlMiIHN0cmluZy4KIAkJICovCi0JCVRBSUxRX0ZPUkVBQ0hfU0FG
RSh1c3JwLCAmbmZzdXNlcmxydWhlYWQsIGx1Z19scnUsIG51c3JwKSB7Ci0JCQluZnNydl9yZW1v
dmV1c2VyKHVzcnApOwotCQl9Ci0JCWZyZWUobmZzcnZfZG5zbmFtZSwgTV9ORlNTVFJJTkcpOwot
CQluZnNydl9kbnNuYW1lID0gTlVMTDsKLQkgICAgfQotCSAgICBUQUlMUV9JTklUKCZuZnN1c2Vy
bHJ1aGVhZCk7Ci0JICAgIGZvciAoaSA9IDA7IGkgPCBORlNVU0VSSEFTSFNJWkU7IGkrKykKLQkJ
TElTVF9JTklUKCZuZnN1c2VyaGFzaFtpXSk7Ci0JICAgIGZvciAoaSA9IDA7IGkgPCBORlNHUk9V
UEhBU0hTSVpFOyBpKyspCi0JCUxJU1RfSU5JVCgmbmZzZ3JvdXBoYXNoW2ldKTsKLQkgICAgZm9y
IChpID0gMDsgaSA8IE5GU1VTRVJIQVNIU0laRTsgaSsrKQotCQlMSVNUX0lOSVQoJm5mc3VzZXJu
YW1laGFzaFtpXSk7Ci0JICAgIGZvciAoaSA9IDA7IGkgPCBORlNHUk9VUEhBU0hTSVpFOyBpKysp
Ci0JCUxJU1RfSU5JVCgmbmZzZ3JvdXBuYW1laGFzaFtpXSk7Ci0KLQkgICAgLyoKLQkgICAgICog
UHV0IG5hbWUgaW4gIkROUyIgc3RyaW5nLgotCSAgICAgKi8KLQkgICAgaWYgKCFlcnJvcikgewog
CQluZnNydl9kbnNuYW1lID0gY3A7Ci0JCW5mc3J2X2Ruc25hbWVsZW4gPSBuaWRwLT5uaWRfbmFt
ZWxlbjsKIAkJbmZzcnZfZGVmYXVsdHVpZCA9IG5pZHAtPm5pZF91aWQ7CiAJCW5mc3J2X2RlZmF1
bHRnaWQgPSBuaWRwLT5uaWRfZ2lkOwogCQluZnNydl91c2VyY250ID0gMDsKIAkJbmZzcnZfdXNl
cm1heCA9IG5pZHAtPm5pZF91c2VybWF4OwotCSAgICB9Ci0JICAgIE5GU1VOTE9DS05BTUVJRCgp
OwotCSAgICBpZiAoZXJyb3IpCi0JCWZyZWUoY3AsIE1fTkZTU1RSSU5HKTsKLQkgICAgZ290byBv
dXQ7CisJCWF0b21pY19zdG9yZV9yZWxfaW50KCZuZnNydl9kbnNuYW1lbGVuLCBuaWRwLT5uaWRf
bmFtZWxlbik7CisJCWdvdG8gb3V0OwogCX0KIAogCS8qCiAJICogbWFsbG9jIHRoZSBuZXcgb25l
IG5vdywgc28gYW55IHBvdGVudGlhbCBzbGVlcCBvY2N1cnMgYmVmb3JlCiAJICogbWFuaXB1bGF0
aW9uIG9mIHRoZSBsaXN0cy4KIAkgKi8KLQlNQUxMT0MobmV3dXNycCwgc3RydWN0IG5mc3Vzcmdy
cCAqLCBzaXplb2YgKHN0cnVjdCBuZnN1c3JncnApICsKLQkgICAgbmlkcC0+bmlkX25hbWVsZW4s
IE1fTkZTVVNFUkdST1VQLCBNX1dBSVRPSyk7CisJbmV3dXNycCA9IG1hbGxvYyhzaXplb2Yoc3Ry
dWN0IG5mc3VzcmdycCkgKyBuaWRwLT5uaWRfbmFtZWxlbiwKKwkgICAgTV9ORlNVU0VSR1JPVVAs
IE1fV0FJVE9LIHwgTV9aRVJPKTsKIAllcnJvciA9IGNvcHlpbihDQVNUX1VTRVJfQUREUl9UKG5p
ZHAtPm5pZF9uYW1lKSwgbmV3dXNycC0+bHVnX25hbWUsCiAJICAgIG5pZHAtPm5pZF9uYW1lbGVu
KTsKKwlpZiAoZXJyb3IgPT0gMCAmJiBuaWRwLT5uaWRfbmdyb3VwID4gMCAmJgorCSAgICAobmlk
cC0+bmlkX2ZsYWcgJiBORlNJRF9BRERVSUQpICE9IDApIHsKKwkJZ3JwcyA9IG1hbGxvYyhzaXpl
b2YoZ2lkX3QpICogbmlkcC0+bmlkX25ncm91cCwgTV9URU1QLAorCQkgICAgTV9XQUlUT0spOwor
CQllcnJvciA9IGNvcHlpbihDQVNUX1VTRVJfQUREUl9UKG5pZHAtPm5pZF9ncnBzKSwgZ3JwcywK
KwkJICAgIHNpemVvZihnaWRfdCkgKiBuaWRwLT5uaWRfbmdyb3VwKTsKKwkJaWYgKGVycm9yID09
IDApIHsKKwkJCS8qCisJCQkgKiBDcmVhdGUgYSBjcmVkZW50aWFsIGp1c3QgbGlrZSBzdmNfZ2V0
Y3JlZCgpLAorCQkJICogYnV0IHVzaW5nIHRoZSBncm91cCBsaXN0IHByb3ZpZGVkLgorCQkJICov
CisJCQljciA9IGNyZ2V0KCk7CisJCQljci0+Y3JfdWlkID0gY3ItPmNyX3J1aWQgPSBjci0+Y3Jf
c3Z1aWQgPSBuaWRwLT5uaWRfdWlkOworCQkJY3JzZXRncm91cHMoY3IsIG5pZHAtPm5pZF9uZ3Jv
dXAsIGdycHMpOworCQkJY3ItPmNyX3JnaWQgPSBjci0+Y3Jfc3ZnaWQgPSBjci0+Y3JfZ3JvdXBz
WzBdOworCQkJY3ItPmNyX3ByaXNvbiA9ICZwcmlzb24wOworCQkJcHJpc29uX2hvbGQoY3ItPmNy
X3ByaXNvbik7CisjaWZkZWYgTUFDCisJCQltYWNfY3JlZF9hc3NvY2lhdGVfbmZzZChjcik7Cisj
ZW5kaWYKKwkJCW5ld3VzcnAtPmx1Z19jcmVkID0gY3I7CisJCX0KKwkJZnJlZShncnBzLCBNX1RF
TVApOworCX0KIAlpZiAoZXJyb3IpIHsKLQkJZnJlZSgoY2FkZHJfdCluZXd1c3JwLCBNX05GU1VT
RVJHUk9VUCk7CisJCWZyZWUobmV3dXNycCwgTV9ORlNVU0VSR1JPVVApOwogCQlnb3RvIG91dDsK
IAl9CiAJbmV3dXNycC0+bHVnX25hbWVsZW4gPSBuaWRwLT5uaWRfbmFtZWxlbjsKIAotCU5GU0xP
Q0tOQU1FSUQoKTsKKwkvKgorCSAqIFRoZSBsb2NrIG9yZGVyIGlzIHVzZXJuYW1lWzBdLT5bbmZz
cnZfbHVnaGFzaHNpemUgLSAxXSBmb2xsb3dlZAorCSAqIGJ5IHVpZFswXS0+W25mc3J2X2x1Z2hh
c2hzaXplIC0gMV0sIHdpdGggdGhlIHNhbWUgZm9yIGdyb3VwLgorCSAqIFRoZSBmbGFncyB1c2Vy
X2xvY2tlZCwgdXNlcm5hbWVfbG9ja2VkLCBncm91cF9sb2NrZWQgYW5kCisJICogZ3JvdXBuYW1l
X2xvY2tlZCBhcmUgc2V0IHRvIGluZGljYXRlIGFsbCBvZiB0aG9zZSBoYXNoIGxpc3RzIGFyZQor
CSAqIGxvY2tlZC4gaHBfbmFtZSAhPSBOVUxMICBhbmQgaHBfaWRudW0gIT0gTlVMTCBpbmRpY2F0
ZXMgdGhhdAorCSAqIHRoZSByZXNwZWN0aXZlIG9uZSBtdXRleCBpcyBsb2NrZWQuCisJICovCisJ
dXNlcl9sb2NrZWQgPSB1c2VybmFtZV9sb2NrZWQgPSBncm91cF9sb2NrZWQgPSBncm91cG5hbWVf
bG9ja2VkID0gMDsKKwlocF9uYW1lID0gaHBfaWRudW0gPSBOVUxMOworCiAJLyoKIAkgKiBEZWxl
dGUgb2xkIGVudHJpZXMsIGFzIHJlcXVpcmVkLgogCSAqLwogCWlmIChuaWRwLT5uaWRfZmxhZyAm
IChORlNJRF9ERUxVSUQgfCBORlNJRF9BRERVSUQpKSB7Ci0JCWhwID0gTkZTVVNFUkhBU0gobmlk
cC0+bmlkX3VpZCk7Ci0JCUxJU1RfRk9SRUFDSF9TQUZFKHVzcnAsIGhwLCBsdWdfbnVtaGFzaCwg
bnVzcnApIHsKKwkJLyogTXVzdCBsb2NrIGFsbCB1c2VybmFtZSBoYXNoIGxpc3RzIGZpcnN0LCB0
byBhdm9pZCBhIExPUi4gKi8KKwkJZm9yIChpID0gMDsgaSA8IG5mc3J2X2x1Z2hhc2hzaXplOyBp
KyspCisJCQltdHhfbG9jaygmbmZzdXNlcm5hbWVoYXNoW2ldLm10eCk7CisJCXVzZXJuYW1lX2xv
Y2tlZCA9IDE7CisJCWhwX2lkbnVtID0gTkZTVVNFUkhBU0gobmlkcC0+bmlkX3VpZCk7CisJCW10
eF9sb2NrKCZocF9pZG51bS0+bXR4KTsKKwkJVEFJTFFfRk9SRUFDSF9TQUZFKHVzcnAsICZocF9p
ZG51bS0+bHVnaGVhZCwgbHVnX251bWhhc2gsCisJCSAgICBudXNycCkgewogCQkJaWYgKHVzcnAt
Pmx1Z191aWQgPT0gbmlkcC0+bmlkX3VpZCkKLQkJCQluZnNydl9yZW1vdmV1c2VyKHVzcnApOwor
CQkJCW5mc3J2X3JlbW92ZXVzZXIodXNycCwgMSk7CiAJCX0KLQl9Ci0JaWYgKG5pZHAtPm5pZF9m
bGFnICYgKE5GU0lEX0RFTFVTRVJOQU1FIHwgTkZTSURfQUREVVNFUk5BTUUpKSB7Ci0JCWhwID0g
TkZTVVNFUk5BTUVIQVNIKG5ld3VzcnAtPmx1Z19uYW1lLCBuZXd1c3JwLT5sdWdfbmFtZWxlbik7
Ci0JCUxJU1RfRk9SRUFDSF9TQUZFKHVzcnAsIGhwLCBsdWdfbmFtZWhhc2gsIG51c3JwKSB7CisJ
fSBlbHNlIGlmIChuaWRwLT5uaWRfZmxhZyAmIChORlNJRF9ERUxVU0VSTkFNRSB8IE5GU0lEX0FE
RFVTRVJOQU1FKSkgeworCQlocF9uYW1lID0gTkZTVVNFUk5BTUVIQVNIKG5ld3VzcnAtPmx1Z19u
YW1lLAorCQkgICAgbmV3dXNycC0+bHVnX25hbWVsZW4pOworCQltdHhfbG9jaygmaHBfbmFtZS0+
bXR4KTsKKwkJVEFJTFFfRk9SRUFDSF9TQUZFKHVzcnAsICZocF9uYW1lLT5sdWdoZWFkLCBsdWdf
bmFtZWhhc2gsCisJCSAgICBudXNycCkgewogCQkJaWYgKHVzcnAtPmx1Z19uYW1lbGVuID09IG5l
d3VzcnAtPmx1Z19uYW1lbGVuICYmCiAJCQkgICAgIU5GU0JDTVAodXNycC0+bHVnX25hbWUsIG5l
d3VzcnAtPmx1Z19uYW1lLAotCQkJICAgIHVzcnAtPmx1Z19uYW1lbGVuKSkKLQkJCQluZnNydl9y
ZW1vdmV1c2VyKHVzcnApOwotCQl9Ci0JfQotCWlmIChuaWRwLT5uaWRfZmxhZyAmIChORlNJRF9E
RUxHSUQgfCBORlNJRF9BRERHSUQpKSB7Ci0JCWhwID0gTkZTR1JPVVBIQVNIKG5pZHAtPm5pZF9n
aWQpOwotCQlMSVNUX0ZPUkVBQ0hfU0FGRSh1c3JwLCBocCwgbHVnX251bWhhc2gsIG51c3JwKSB7
CisJCQkgICAgdXNycC0+bHVnX25hbWVsZW4pKSB7CisJCQkJdGhwID0gTkZTVVNFUkhBU0godXNy
cC0+bHVnX3VpZCk7CisJCQkJbXR4X2xvY2soJnRocC0+bXR4KTsKKwkJCQluZnNydl9yZW1vdmV1
c2VyKHVzcnAsIDEpOworCQkJCW10eF91bmxvY2soJnRocC0+bXR4KTsKKwkJCX0KKwkJfQorCQlo
cF9pZG51bSA9IE5GU1VTRVJIQVNIKG5pZHAtPm5pZF91aWQpOworCQltdHhfbG9jaygmaHBfaWRu
dW0tPm10eCk7CisJfSBlbHNlIGlmIChuaWRwLT5uaWRfZmxhZyAmIChORlNJRF9ERUxHSUQgfCBO
RlNJRF9BRERHSUQpKSB7CisJCS8qIE11c3QgbG9jayBhbGwgZ3JvdXBuYW1lIGhhc2ggbGlzdHMg
Zmlyc3QsIHRvIGF2b2lkIGEgTE9SLiAqLworCQlmb3IgKGkgPSAwOyBpIDwgbmZzcnZfbHVnaGFz
aHNpemU7IGkrKykKKwkJCW10eF9sb2NrKCZuZnNncm91cG5hbWVoYXNoW2ldLm10eCk7CisJCWdy
b3VwbmFtZV9sb2NrZWQgPSAxOworCQlocF9pZG51bSA9IE5GU0dST1VQSEFTSChuaWRwLT5uaWRf
Z2lkKTsKKwkJbXR4X2xvY2soJmhwX2lkbnVtLT5tdHgpOworCQlUQUlMUV9GT1JFQUNIX1NBRkUo
dXNycCwgJmhwX2lkbnVtLT5sdWdoZWFkLCBsdWdfbnVtaGFzaCwKKwkJICAgIG51c3JwKSB7CiAJ
CQlpZiAodXNycC0+bHVnX2dpZCA9PSBuaWRwLT5uaWRfZ2lkKQotCQkJCW5mc3J2X3JlbW92ZXVz
ZXIodXNycCk7CisJCQkJbmZzcnZfcmVtb3ZldXNlcih1c3JwLCAwKTsKIAkJfQotCX0KLQlpZiAo
bmlkcC0+bmlkX2ZsYWcgJiAoTkZTSURfREVMR1JPVVBOQU1FIHwgTkZTSURfQURER1JPVVBOQU1F
KSkgewotCQlocCA9IE5GU0dST1VQTkFNRUhBU0gobmV3dXNycC0+bHVnX25hbWUsIG5ld3VzcnAt
Pmx1Z19uYW1lbGVuKTsKLQkJTElTVF9GT1JFQUNIX1NBRkUodXNycCwgaHAsIGx1Z19uYW1laGFz
aCwgbnVzcnApIHsKKwl9IGVsc2UgaWYgKG5pZHAtPm5pZF9mbGFnICYgKE5GU0lEX0RFTEdST1VQ
TkFNRSB8IE5GU0lEX0FEREdST1VQTkFNRSkpIHsKKwkJaHBfbmFtZSA9IE5GU0dST1VQTkFNRUhB
U0gobmV3dXNycC0+bHVnX25hbWUsCisJCSAgICBuZXd1c3JwLT5sdWdfbmFtZWxlbik7CisJCW10
eF9sb2NrKCZocF9uYW1lLT5tdHgpOworCQlUQUlMUV9GT1JFQUNIX1NBRkUodXNycCwgJmhwX25h
bWUtPmx1Z2hlYWQsIGx1Z19uYW1laGFzaCwKKwkJICAgIG51c3JwKSB7CiAJCQlpZiAodXNycC0+
bHVnX25hbWVsZW4gPT0gbmV3dXNycC0+bHVnX25hbWVsZW4gJiYKIAkJCSAgICAhTkZTQkNNUCh1
c3JwLT5sdWdfbmFtZSwgbmV3dXNycC0+bHVnX25hbWUsCi0JCQkgICAgdXNycC0+bHVnX25hbWVs
ZW4pKQotCQkJCW5mc3J2X3JlbW92ZXVzZXIodXNycCk7CisJCQkgICAgdXNycC0+bHVnX25hbWVs
ZW4pKSB7CisJCQkJdGhwID0gTkZTR1JPVVBIQVNIKHVzcnAtPmx1Z19naWQpOworCQkJCW10eF9s
b2NrKCZ0aHAtPm10eCk7CisJCQkJbmZzcnZfcmVtb3ZldXNlcih1c3JwLCAwKTsKKwkJCQltdHhf
dW5sb2NrKCZ0aHAtPm10eCk7CisJCQl9CiAJCX0KLQl9Ci0JVEFJTFFfRk9SRUFDSF9TQUZFKHVz
cnAsICZuZnN1c2VybHJ1aGVhZCwgbHVnX2xydSwgbnVzcnApIHsKLQkJaWYgKHVzcnAtPmx1Z19l
eHBpcnkgPCBORlNEX01PTk9TRUMpCi0JCQluZnNydl9yZW1vdmV1c2VyKHVzcnApOwotCX0KLQl3
aGlsZSAobmZzcnZfdXNlcmNudCA+PSBuZnNydl91c2VybWF4KSB7Ci0JCXVzcnAgPSBUQUlMUV9G
SVJTVCgmbmZzdXNlcmxydWhlYWQpOwotCQluZnNydl9yZW1vdmV1c2VyKHVzcnApOworCQlocF9p
ZG51bSA9IE5GU0dST1VQSEFTSChuaWRwLT5uaWRfZ2lkKTsKKwkJbXR4X2xvY2soJmhwX2lkbnVt
LT5tdHgpOwogCX0KIAogCS8qCkBAIC0zMjE3LDIzICszMzg5LDEyOSBAQCBuZnNzdmNfaWRuYW1l
KHN0cnVjdCBuZnNkX2lkYXJncyAqbmlkcCkKIAkJbmV3dXNycC0+bHVnX2V4cGlyeSA9IE5GU0Rf
TU9OT1NFQyArIDU7CiAJaWYgKG5pZHAtPm5pZF9mbGFnICYgKE5GU0lEX0FERFVJRCB8IE5GU0lE
X0FERFVTRVJOQU1FKSkgewogCQluZXd1c3JwLT5sdWdfdWlkID0gbmlkcC0+bmlkX3VpZDsKLQkJ
TElTVF9JTlNFUlRfSEVBRChORlNVU0VSSEFTSChuZXd1c3JwLT5sdWdfdWlkKSwgbmV3dXNycCwK
LQkJICAgIGx1Z19udW1oYXNoKTsKLQkJTElTVF9JTlNFUlRfSEVBRChORlNVU0VSTkFNRUhBU0go
bmV3dXNycC0+bHVnX25hbWUsCi0JCSAgICBuZXd1c3JwLT5sdWdfbmFtZWxlbiksIG5ld3VzcnAs
IGx1Z19uYW1laGFzaCk7Ci0JCVRBSUxRX0lOU0VSVF9UQUlMKCZuZnN1c2VybHJ1aGVhZCwgbmV3
dXNycCwgbHVnX2xydSk7Ci0JCW5mc3J2X3VzZXJjbnQrKzsKKwkJdGhwID0gTkZTVVNFUkhBU0go
bmV3dXNycC0+bHVnX3VpZCk7CisJCW10eF9hc3NlcnQoJnRocC0+bXR4LCBNQV9PV05FRCk7CisJ
CVRBSUxRX0lOU0VSVF9UQUlMKCZ0aHAtPmx1Z2hlYWQsIG5ld3VzcnAsIGx1Z19udW1oYXNoKTsK
KwkJdGhwID0gTkZTVVNFUk5BTUVIQVNIKG5ld3VzcnAtPmx1Z19uYW1lLCBuZXd1c3JwLT5sdWdf
bmFtZWxlbik7CisJCW10eF9hc3NlcnQoJnRocC0+bXR4LCBNQV9PV05FRCk7CisJCVRBSUxRX0lO
U0VSVF9UQUlMKCZ0aHAtPmx1Z2hlYWQsIG5ld3VzcnAsIGx1Z19uYW1laGFzaCk7CisJCWF0b21p
Y19hZGRfaW50KCZuZnNydl91c2VyY250LCAxKTsKIAl9IGVsc2UgaWYgKG5pZHAtPm5pZF9mbGFn
ICYgKE5GU0lEX0FEREdJRCB8IE5GU0lEX0FEREdST1VQTkFNRSkpIHsKIAkJbmV3dXNycC0+bHVn
X2dpZCA9IG5pZHAtPm5pZF9naWQ7Ci0JCUxJU1RfSU5TRVJUX0hFQUQoTkZTR1JPVVBIQVNIKG5l
d3VzcnAtPmx1Z19naWQpLCBuZXd1c3JwLAotCQkgICAgbHVnX251bWhhc2gpOwotCQlMSVNUX0lO
U0VSVF9IRUFEKE5GU0dST1VQTkFNRUhBU0gobmV3dXNycC0+bHVnX25hbWUsCi0JCSAgICBuZXd1
c3JwLT5sdWdfbmFtZWxlbiksIG5ld3VzcnAsIGx1Z19uYW1laGFzaCk7Ci0JCVRBSUxRX0lOU0VS
VF9UQUlMKCZuZnN1c2VybHJ1aGVhZCwgbmV3dXNycCwgbHVnX2xydSk7Ci0JCW5mc3J2X3VzZXJj
bnQrKzsKLQl9IGVsc2UKLQkJRlJFRSgoY2FkZHJfdCluZXd1c3JwLCBNX05GU1VTRVJHUk9VUCk7
Ci0JTkZTVU5MT0NLTkFNRUlEKCk7CisJCXRocCA9IE5GU0dST1VQSEFTSChuZXd1c3JwLT5sdWdf
Z2lkKTsKKwkJbXR4X2Fzc2VydCgmdGhwLT5tdHgsIE1BX09XTkVEKTsKKwkJVEFJTFFfSU5TRVJU
X1RBSUwoJnRocC0+bHVnaGVhZCwgbmV3dXNycCwgbHVnX251bWhhc2gpOworCQl0aHAgPSBORlNH
Uk9VUE5BTUVIQVNIKG5ld3VzcnAtPmx1Z19uYW1lLCBuZXd1c3JwLT5sdWdfbmFtZWxlbik7CisJ
CW10eF9hc3NlcnQoJnRocC0+bXR4LCBNQV9PV05FRCk7CisJCVRBSUxRX0lOU0VSVF9UQUlMKCZ0
aHAtPmx1Z2hlYWQsIG5ld3VzcnAsIGx1Z19uYW1laGFzaCk7CisJCWF0b21pY19hZGRfaW50KCZu
ZnNydl91c2VyY250LCAxKTsKKwl9IGVsc2UgeworCQlpZiAobmV3dXNycC0+bHVnX2NyZWQgIT0g
TlVMTCkKKwkJCWNyZnJlZShuZXd1c3JwLT5sdWdfY3JlZCk7CisJCWZyZWUobmV3dXNycCwgTV9O
RlNVU0VSR1JPVVApOworCX0KKworCS8qCisJICogT25jZSBwZXIgc2Vjb25kLCBhbGxvdyBvbmUg
dGhyZWFkIHRvIHRyaW0gdGhlIGNhY2hlLgorCSAqLworCWlmIChsYXN0dGltZSA8IE5GU0RfTU9O
T1NFQyAmJgorCSAgICBhdG9taWNfY21wc2V0X2FjcV9pbnQoJm9uZXRocmVhZCwgMCwgMSkgIT0g
MCkgeworCQkvKgorCQkgKiBGaXJzdCwgdW5sb2NrIHRoZSBzaW5nbGUgbXV0ZXhlcywgc28gdGhh
dCBhbGwgZW50cmllcworCQkgKiBjYW4gYmUgbG9ja2VkIGFuZCBhbnkgTE9SIGlzIGF2b2lkZWQu
CisJCSAqLworCQlpZiAoaHBfbmFtZSAhPSBOVUxMKSB7CisJCQltdHhfdW5sb2NrKCZocF9uYW1l
LT5tdHgpOworCQkJaHBfbmFtZSA9IE5VTEw7CisJCX0KKwkJaWYgKGhwX2lkbnVtICE9IE5VTEwp
IHsKKwkJCW10eF91bmxvY2soJmhwX2lkbnVtLT5tdHgpOworCQkJaHBfaWRudW0gPSBOVUxMOwor
CQl9CisKKwkJaWYgKChuaWRwLT5uaWRfZmxhZyAmIChORlNJRF9ERUxVSUQgfCBORlNJRF9BRERV
SUQgfAorCQkgICAgTkZTSURfREVMVVNFUk5BTUUgfCBORlNJRF9BRERVU0VSTkFNRSkpICE9IDAp
IHsKKwkJCWlmICh1c2VybmFtZV9sb2NrZWQgPT0gMCkgeworCQkJCWZvciAoaSA9IDA7IGkgPCBu
ZnNydl9sdWdoYXNoc2l6ZTsgaSsrKQorCQkJCQltdHhfbG9jaygmbmZzdXNlcm5hbWVoYXNoW2ld
Lm10eCk7CisJCQkJdXNlcm5hbWVfbG9ja2VkID0gMTsKKwkJCX0KKwkJCUtBU1NFUlQodXNlcl9s
b2NrZWQgPT0gMCwKKwkJCSAgICAoIm5mc3N2Y19pZG5hbWU6IHVzZXJfbG9ja2VkIikpOworCQkJ
Zm9yIChpID0gMDsgaSA8IG5mc3J2X2x1Z2hhc2hzaXplOyBpKyspCisJCQkJbXR4X2xvY2soJm5m
c3VzZXJoYXNoW2ldLm10eCk7CisJCQl1c2VyX2xvY2tlZCA9IDE7CisJCQlmb3IgKGkgPSAwOyBp
IDwgbmZzcnZfbHVnaGFzaHNpemU7IGkrKykgeworCQkJCVRBSUxRX0ZPUkVBQ0hfU0FGRSh1c3Jw
LAorCQkJCSAgICAmbmZzdXNlcmhhc2hbaV0ubHVnaGVhZCwgbHVnX251bWhhc2gsCisJCQkJICAg
IG51c3JwKQorCQkJCQlpZiAodXNycC0+bHVnX2V4cGlyeSA8IE5GU0RfTU9OT1NFQykKKwkJCQkJ
CW5mc3J2X3JlbW92ZXVzZXIodXNycCwgMSk7CisJCQl9CisJCQlmb3IgKGkgPSAwOyBpIDwgbmZz
cnZfbHVnaGFzaHNpemU7IGkrKykgeworCQkJCS8qCisJCQkJICogVHJpbSB0aGUgY2FjaGUgdXNp
bmcgYW4gYXBwcm94aW1hdGUgTFJVCisJCQkJICogYWxnb3JpdGhtLiAgVGhpcyBjb2RlIGRlbGV0
ZXMgdGhlIGxlYXN0CisJCQkJICogcmVjZW50bHkgdXNlZCBlbnRyeSBvbiBlYWNoIGhhc2ggbGlz
dC4KKwkJCQkgKi8KKwkJCQlpZiAobmZzcnZfdXNlcmNudCA8PSBuZnNydl91c2VybWF4KQorCQkJ
CQlicmVhazsKKwkJCQl1c3JwID0gVEFJTFFfRklSU1QoJm5mc3VzZXJoYXNoW2ldLmx1Z2hlYWQp
OworCQkJCWlmICh1c3JwICE9IE5VTEwpCisJCQkJCW5mc3J2X3JlbW92ZXVzZXIodXNycCwgMSk7
CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAoZ3JvdXBuYW1lX2xvY2tlZCA9PSAwKSB7CisJCQkJ
Zm9yIChpID0gMDsgaSA8IG5mc3J2X2x1Z2hhc2hzaXplOyBpKyspCisJCQkJCW10eF9sb2NrKCZu
ZnNncm91cG5hbWVoYXNoW2ldLm10eCk7CisJCQkJZ3JvdXBuYW1lX2xvY2tlZCA9IDE7CisJCQl9
CisJCQlLQVNTRVJUKGdyb3VwX2xvY2tlZCA9PSAwLAorCQkJICAgICgibmZzc3ZjX2lkbmFtZTog
Z3JvdXBfbG9ja2VkIikpOworCQkJZm9yIChpID0gMDsgaSA8IG5mc3J2X2x1Z2hhc2hzaXplOyBp
KyspCisJCQkJbXR4X2xvY2soJm5mc2dyb3VwaGFzaFtpXS5tdHgpOworCQkJZ3JvdXBfbG9ja2Vk
ID0gMTsKKwkJCWZvciAoaSA9IDA7IGkgPCBuZnNydl9sdWdoYXNoc2l6ZTsgaSsrKSB7CisJCQkJ
VEFJTFFfRk9SRUFDSF9TQUZFKHVzcnAsCisJCQkJICAgICZuZnNncm91cGhhc2hbaV0ubHVnaGVh
ZCwgbHVnX251bWhhc2gsCisJCQkJICAgIG51c3JwKQorCQkJCQlpZiAodXNycC0+bHVnX2V4cGly
eSA8IE5GU0RfTU9OT1NFQykKKwkJCQkJCW5mc3J2X3JlbW92ZXVzZXIodXNycCwgMCk7CisJCQl9
CisJCQlmb3IgKGkgPSAwOyBpIDwgbmZzcnZfbHVnaGFzaHNpemU7IGkrKykgeworCQkJCS8qCisJ
CQkJICogVHJpbSB0aGUgY2FjaGUgdXNpbmcgYW4gYXBwcm94aW1hdGUgTFJVCisJCQkJICogYWxn
b3JpdGhtLiAgVGhpcyBjb2RlIGRlbGV0ZXMgdGhlIGxlYXN0CisJCQkJICogcmVjZW50bHkgdXNl
ciBlbnRyeSBvbiBlYWNoIGhhc2ggbGlzdC4KKwkJCQkgKi8KKwkJCQlpZiAobmZzcnZfdXNlcmNu
dCA8PSBuZnNydl91c2VybWF4KQorCQkJCQlicmVhazsKKwkJCQl1c3JwID0gVEFJTFFfRklSU1Qo
Jm5mc2dyb3VwaGFzaFtpXS5sdWdoZWFkKTsKKwkJCQlpZiAodXNycCAhPSBOVUxMKQorCQkJCQlu
ZnNydl9yZW1vdmV1c2VyKHVzcnAsIDApOworCQkJfQorCQl9CisJCWxhc3R0aW1lID0gTkZTRF9N
T05PU0VDOworCQlhdG9taWNfc3RvcmVfcmVsX2ludCgmb25ldGhyZWFkLCAwKTsKKwl9CisKKwkv
KiBOb3csIHVubG9jayBhbGwgbG9ja2VkIG11dGV4ZXMuICovCisJaWYgKGhwX2lkbnVtICE9IE5V
TEwpCisJCW10eF91bmxvY2soJmhwX2lkbnVtLT5tdHgpOworCWlmIChocF9uYW1lICE9IE5VTEwp
CisJCW10eF91bmxvY2soJmhwX25hbWUtPm10eCk7CisJaWYgKHVzZXJfbG9ja2VkICE9IDApCisJ
CWZvciAoaSA9IDA7IGkgPCBuZnNydl9sdWdoYXNoc2l6ZTsgaSsrKQorCQkJbXR4X3VubG9jaygm
bmZzdXNlcmhhc2hbaV0ubXR4KTsKKwlpZiAodXNlcm5hbWVfbG9ja2VkICE9IDApCisJCWZvciAo
aSA9IDA7IGkgPCBuZnNydl9sdWdoYXNoc2l6ZTsgaSsrKQorCQkJbXR4X3VubG9jaygmbmZzdXNl
cm5hbWVoYXNoW2ldLm10eCk7CisJaWYgKGdyb3VwX2xvY2tlZCAhPSAwKQorCQlmb3IgKGkgPSAw
OyBpIDwgbmZzcnZfbHVnaGFzaHNpemU7IGkrKykKKwkJCW10eF91bmxvY2soJm5mc2dyb3VwaGFz
aFtpXS5tdHgpOworCWlmIChncm91cG5hbWVfbG9ja2VkICE9IDApCisJCWZvciAoaSA9IDA7IGkg
PCBuZnNydl9sdWdoYXNoc2l6ZTsgaSsrKQorCQkJbXR4X3VubG9jaygmbmZzZ3JvdXBuYW1laGFz
aFtpXS5tdHgpOwogb3V0OgogCU5GU0VYSVRDT0RFKGVycm9yKTsKIAlyZXR1cm4gKGVycm9yKTsK
QEAgLTMyNDMsMTUgKzM1MjEsMjUgQEAgb3V0OgogICogUmVtb3ZlIGEgdXNlci9ncm91cCBuYW1l
IGVsZW1lbnQuCiAgKi8KIHN0YXRpYyB2b2lkCi1uZnNydl9yZW1vdmV1c2VyKHN0cnVjdCBuZnN1
c3JncnAgKnVzcnApCituZnNydl9yZW1vdmV1c2VyKHN0cnVjdCBuZnN1c3JncnAgKnVzcnAsIGlu
dCBpc3VzZXIpCiB7CisJc3RydWN0IG5mc3J2X2x1Z2hhc2ggKmhwOwogCi0JTkZTTkFNRUlEUkVR
VUlSRUQoKTsKLQlMSVNUX1JFTU9WRSh1c3JwLCBsdWdfbnVtaGFzaCk7Ci0JTElTVF9SRU1PVkUo
dXNycCwgbHVnX25hbWVoYXNoKTsKLQlUQUlMUV9SRU1PVkUoJm5mc3VzZXJscnVoZWFkLCB1c3Jw
LCBsdWdfbHJ1KTsKLQluZnNydl91c2VyY250LS07Ci0JRlJFRSgoY2FkZHJfdCl1c3JwLCBNX05G
U1VTRVJHUk9VUCk7CisJaWYgKGlzdXNlciAhPSAwKSB7CisJCWhwID0gTkZTVVNFUkhBU0godXNy
cC0+bHVnX3VpZCk7CisJCVRBSUxRX1JFTU9WRSgmaHAtPmx1Z2hlYWQsIHVzcnAsIGx1Z19udW1o
YXNoKTsKKwkJaHAgPSBORlNVU0VSTkFNRUhBU0godXNycC0+bHVnX25hbWUsIHVzcnAtPmx1Z19u
YW1lbGVuKTsKKwkJVEFJTFFfUkVNT1ZFKCZocC0+bHVnaGVhZCwgdXNycCwgbHVnX25hbWVoYXNo
KTsKKwl9IGVsc2UgeworCQlocCA9IE5GU0dST1VQSEFTSCh1c3JwLT5sdWdfZ2lkKTsKKwkJVEFJ
TFFfUkVNT1ZFKCZocC0+bHVnaGVhZCwgdXNycCwgbHVnX251bWhhc2gpOworCQlocCA9IE5GU0dS
T1VQTkFNRUhBU0godXNycC0+bHVnX25hbWUsIHVzcnAtPmx1Z19uYW1lbGVuKTsKKwkJVEFJTFFf
UkVNT1ZFKCZocC0+bHVnaGVhZCwgdXNycCwgbHVnX25hbWVoYXNoKTsKKwl9CisJYXRvbWljX2Fk
ZF9pbnQoJm5mc3J2X3VzZXJjbnQsIC0xKTsKKwlpZiAodXNycC0+bHVnX2NyZWQgIT0gTlVMTCkK
KwkJY3JmcmVlKHVzcnAtPmx1Z19jcmVkKTsKKwlmcmVlKHVzcnAsIE1fTkZTVVNFUkdST1VQKTsK
IH0KIAogLyoKLS0tIGZzL25mcy9uZnNfY29tbW9ucG9ydC5jLnNhdgkyMDE1LTA5LTI4IDE4OjQ5
OjM1LjAwMDAwMDAwMCAtMDQwMAorKysgZnMvbmZzL25mc19jb21tb25wb3J0LmMJMjAxNS0xMS0x
MyAxOTo1Mjo1OC4yODYwNTEwMDAgLTA1MDAKQEAgLTYzLDYgKzYzLDcgQEAgaW50IG5mc19udW1u
ZnNjYmQgPSAwOwogaW50IG5mc2NsX2RlYnVnbGV2ZWwgPSAwOwogY2hhciBuZnN2NF9jYWxsYmFj
a2FkZHJbSU5FVDZfQUREUlNUUkxFTl07CiBzdHJ1Y3QgY2FsbG91dCBuZXduZnNkX2NhbGxvdXQ7
CitpbnQgbmZzcnZfbHVnaGFzaHNpemUgPSAxMDAwOwogdm9pZCAoKm5mc2RfY2FsbF9zZXJ2ZXJ0
aW1lcikodm9pZCkgPSBOVUxMOwogdm9pZCAoKm5jbF9jYWxsX2ludmFsY2FjaGVzKShzdHJ1Y3Qg
dm5vZGUgKikgPSBOVUxMOwogCkBAIC03OSw2ICs4MCw5IEBAIFNZU0NUTF9TVFJJTkcoX3Zmc19u
ZnMsIE9JRF9BVVRPLCBjYWxsYmEKICAgICAiTkZTdjQgY2FsbGJhY2sgYWRkciBmb3Igc2VydmVy
IHRvIHVzZSIpOwogU1lTQ1RMX0lOVChfdmZzX25mcywgT0lEX0FVVE8sIGRlYnVnbGV2ZWwsIENU
TEZMQUdfUlcsICZuZnNjbF9kZWJ1Z2xldmVsLAogICAgIDAsICJEZWJ1ZyBsZXZlbCBmb3IgTkZT
IGNsaWVudCIpOworVFVOQUJMRV9JTlQoInZmcy5uZnMudXNlcmhhc2hzaXplIiwgJm5mc3J2X2x1
Z2hhc2hzaXplKTsKK1NZU0NUTF9JTlQoX3Zmc19uZnMsIE9JRF9BVVRPLCB1c2VyaGFzaHNpemUs
IENUTEZMQUdfUkRUVU4sICZuZnNydl9sdWdoYXNoc2l6ZSwKKyAgICAwLCAiU2l6ZSBvZiBoYXNo
IHRhYmxlcyBmb3IgdWlkL25hbWUgbWFwcGluZyIpOwogCiAvKgogICogRGVmaW5lcyBmb3IgbWFs
bG9jCkBAIC00NDUsOSArNDQ5LDI1IEBAIG5mc3N2Y19jYWxsKHN0cnVjdCB0aHJlYWQgKnAsIHN0
cnVjdCBuZnMKIHsKIAlpbnQgZXJyb3IgPSBFSU5WQUw7CiAJc3RydWN0IG5mc2RfaWRhcmdzIG5p
ZDsKKwlzdHJ1Y3QgbmZzZF9vaWRhcmdzIG9uaWQ7CiAKIAlpZiAodWFwLT5mbGFnICYgTkZTU1ZD
X0lETkFNRSkgewotCQllcnJvciA9IGNvcHlpbih1YXAtPmFyZ3AsIChjYWRkcl90KSZuaWQsIHNp
emVvZiAobmlkKSk7CisJCWlmICgodWFwLT5mbGFnICYgTkZTU1ZDX05FV1NUUlVDVCkgIT0gMCkK
KwkJCWVycm9yID0gY29weWluKHVhcC0+YXJncCwgKGNhZGRyX3QpJm5pZCwgc2l6ZW9mKG5pZCkp
OworCQllbHNlIHsKKwkJCWVycm9yID0gY29weWluKHVhcC0+YXJncCwgKGNhZGRyX3QpJm9uaWQs
IHNpemVvZihvbmlkKSk7CisJCQlpZiAoZXJyb3IgPT0gMCkgeworCQkJCW5pZC5uaWRfZmxhZyA9
IG9uaWQubmlkX2ZsYWc7CisJCQkJbmlkLm5pZF91aWQgPSBvbmlkLm5pZF91aWQ7CisJCQkJbmlk
Lm5pZF9naWQgPSBvbmlkLm5pZF9naWQ7CisJCQkJbmlkLm5pZF91c2VybWF4ID0gb25pZC5uaWRf
dXNlcm1heDsKKwkJCQluaWQubmlkX3VzZXJ0aW1lb3V0ID0gb25pZC5uaWRfdXNlcnRpbWVvdXQ7
CisJCQkJbmlkLm5pZF9uYW1lID0gb25pZC5uaWRfbmFtZTsKKwkJCQluaWQubmlkX25hbWVsZW4g
PSBvbmlkLm5pZF9uYW1lbGVuOworCQkJCW5pZC5uaWRfbmdyb3VwID0gMDsKKwkJCQluaWQubmlk
X2dycHMgPSBOVUxMOworCQkJfQorCQl9CiAJCWlmIChlcnJvcikKIAkJCWdvdG8gb3V0OwogCQll
cnJvciA9IG5mc3N2Y19pZG5hbWUoJm5pZCk7Cg==
------=_Part_87814644_309663547.1447627285467--



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