pec

Fabrizio Gennari <[email protected]> Sat, 18 Dec 2021 12:13:09 +0100
Newsgroups gmane.linux.drivers.gnokii
Message-ID <[email protected]>
This is a multi-part message in MIME format.
--------------Yqr0mpG3jWAt1LeK400iiCgv
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit


--------------Yqr0mpG3jWAt1LeK400iiCgv
Content-Type: text/x-patch; charset=UTF-8; name="sdlunif.patch"
Content-Disposition: attachment; filename="sdlunif.patch"
Content-Transfer-Encoding: base64

SW5kZXg6IGRldi92aWNlL3RydW5rL3NyYy9hcmNoL3NkbC9qb3kuYwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBkZXYvdmljZS90cnVuay9zcmMvYXJjaC9zZGwvam95LmMJKHJldmlzaW9uZSA0MTAx
MCkKKysrIGRldi92aWNlL3RydW5rL3NyYy9hcmNoL3NkbC9qb3kuYwkoY29waWEgZGkgbGF2
b3JvKQpAQCAtNDgsOCArNDgsNiBAQAogI2luY2x1ZGUgImxvZy5oIgogI2luY2x1ZGUgIm1v
dXNlLmgiCiAjaW5jbHVkZSAicmVzb3VyY2VzLmgiCi0jaW5jbHVkZSAic3lzZmlsZS5oIgot
I2luY2x1ZGUgInV0aWwuaCIKICNpbmNsdWRlICJ1aWhvdGtleS5oIgogI2luY2x1ZGUgInVp
bWVudS5oIgogI2luY2x1ZGUgInZrYmQuaCIKQEAgLTY0LDkgKzYyLDYgQEAKIHN0YXRpYyB1
aV9tZW51X2FjdGlvbl90IGF1dG9yZXBlYXQ7CiBzdGF0aWMgaW50IGF1dG9yZXBlYXRfZGVs
YXk7CiAKLS8qIEpveXN0aWNrIG1hcHBpbmcgZmlsZW5hbWUgKi8KLXN0YXRpYyBjaGFyICpq
b3ltYXBfZmlsZSA9IE5VTEw7Ci0KIC8qIFRvdGFsIG51bWJlciBvZiBqb3lzdGlja3MgKi8K
IHN0YXRpYyBpbnQgbnVtX2pveXN0aWNrczsKIApAQCAtNzYsODYgKzcxLDcgQEAKIC8qIEpv
eXN0aWNrIGZ1enogKDAuLjMyNzY3KSAqLwogc3RhdGljIGludCBqb3lzdGlja19mdXp6Owog
Ci0vKiBEaWZmZXJlbnQgdHlwZXMgb2Ygam95c3RpY2sgaW5wdXQgKi8KLXR5cGVkZWYgZW51
bSB7Ci0gICAgQVhJUyA9IDAsCi0gICAgQlVUVE9OID0gMSwKLSAgICBIQVQgPSAyLAotICAg
IEJBTEwgPSAzLAotICAgIE5VTV9JTlBVVF9UWVBFUwotfSBzZGxqb3lzdGlja19pbnB1dF90
OwogCi0vKiBOdW1iZXIgb2YgYWN0aW9ucyBwZXIgaW5wdXQgc291cmNlICovCi1zdGF0aWMg
Y29uc3QgaW50IGlucHV0X211bHRbTlVNX0lOUFVUX1RZUEVTXSA9IHsKLSAgICAyLCAvKiBB
eGlzOiBhY3Rpb25zIGZvciBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgKi8KLSAgICAxLCAvKiBC
dXR0b24gKi8KLSAgICA0LCAvKiBIYXQ6IGFjdGlvbnMgZm9yIGFsbCA0IGRpcmVjdGlvbnMg
Ki8KLSAgICAxICAvKiBCYWxsICovCi19OwotCi0vKiBBY3Rpb25zIHRvIHBlcmZvcm0gb24g
am95c3RpY2sgaW5wdXQgKi8KLXR5cGVkZWYgZW51bSB7Ci0gICAgTk9ORSA9IDAsCi0KLSAg
ICAvKiBKb3lzdGljayBtb3ZlbWVudCBvciBidXR0b24gcHJlc3MgKi8KLSAgICBKT1lTVElD
SyA9IDEsCi0KLSAgICAvKiBLZXlib2FyZCBrZXkgcHJlc3MgKi8KLSAgICBLRVlCT0FSRCA9
IDIsCi0KLSAgICAvKiBNYXAgYnV0dG9uICovCi0gICAgTUFQID0gMywKLQotICAgIC8qIChE
ZSlBY3RpdmF0ZSBVSSAqLwotICAgIFVJX0FDVElWQVRFID0gNCwKLQotICAgIC8qIENhbGwg
VUkgZnVuY3Rpb24gKi8KLSAgICBVSV9GVU5DVElPTiA9IDUsCi0KLSAgICAvKiBKb3lzdGlj
ayBheGlzIHVzZWQgZm9yIHBvdGVudGlvbWV0ZXJzICovCi0gICAgUE9UX0FYSVMgPSA2Ci19
IHNkbGpveXN0aWNrX2FjdGlvbl90OwotCi0vKiBJbnB1dCBtYXBwaW5nIGZvciBlYWNoIGRp
cmVjdGlvbi9idXR0b24vZXRjICovCi1zdHJ1Y3Qgc2Rsam95c3RpY2tfbWFwcGluZ19zIHsK
LSAgICAvKiBBY3Rpb24gdG8gcGVyZm9ybSAqLwotICAgIHNkbGpveXN0aWNrX2FjdGlvbl90
IGFjdGlvbjsKLQotICAgIC8qIFByZXZpb3VzIHN0YXRlIG9mIGlucHV0ICovCi0gICAgdWlu
dDhfdCBwcmV2OwotCi0gICAgdW5pb24gewotICAgICAgICAvKiBqb3lbMF0gPSBwb3J0IG51
bWJlciAoMCwxKSwgam95WzFdID0gcGluIG51bWJlciAqLwotICAgICAgICB1aW50MTZfdCBq
b3lbMl07Ci0KLSAgICAgICAgLyogYXhpc1swXSA9IHBvcnQgbnVtYmVyICgwLDEpLCBheGlz
WzFdID0gcG90IG51bWJlciAoeD0wL3k9MSkgKi8KLSAgICAgICAgdWludDE2X3QgYXhpc1sy
XTsKLQotICAgICAgICAvKiBrZXlbMF0gPSByb3csIGtleVsxXSA9IGNvbHVtbiAqLwotICAg
ICAgICBpbnQga2V5WzJdOwotCi0gICAgICAgIC8qIHBvaW50ZXIgdG8gdGhlIG1lbnUgaXRl
bSAqLwotICAgICAgICB1aV9tZW51X2VudHJ5X3QgKnVpX2Z1bmN0aW9uOwotICAgIH0gdmFs
dWU7Ci19OwotdHlwZWRlZiBzdHJ1Y3Qgc2Rsam95c3RpY2tfbWFwcGluZ19zIHNkbGpveXN0
aWNrX21hcHBpbmdfdDsKLQotc3RydWN0IHNkbGpveXN0aWNrX3MgewotICAgIFNETF9Kb3lz
dGljayAqam95cHRyOwotICAgIGNoYXIgKm5hbWU7Ci0gICAgaW50IGlucHV0X21heFtOVU1f
SU5QVVRfVFlQRVNdOwotICAgIHNkbGpveXN0aWNrX21hcHBpbmdfdCAqaW5wdXRbTlVNX0lO
UFVUX1RZUEVTXTsKLX07Ci10eXBlZGVmIHN0cnVjdCBzZGxqb3lzdGlja19zIHNkbGpveXN0
aWNrX3Q7Ci0KLXN0YXRpYyBzZGxqb3lzdGlja190ICpzZGxqb3lzdGljayA9IE5VTEw7Ci0K
LS8qKiBcYnJpZWYgIFRlbXBvcmFyeSBjb3B5IG9mIHRoZSBkZWZhdWx0IGpveW1hcCBmaWxl
IG5hbWUKLSAqCi0gKiBBdm9pZHMgc2lsbHkgY2FzdGluZyBhd2F5IG9mIGNvbnN0Ci0gKi8K
LXN0YXRpYyBjaGFyICpqb3ltYXBfZmFjdG9yeSA9IE5VTEw7Ci0KIC8qIGpveXN0aWNrIGF4
aXMgbWFwcGluZyBmb3IgcG90LXgveSwKICAgIGhpZ2ggYnl0ZSBpcyB0aGUgam95c3RpY2sg
bnIsCiAgICBsb3cgYnl0ZSBpcyB0aGUgYXhpcyBuciwKQEAgLTE5NCwyMSArMTEwLDYgQEAK
ICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBqb3ltYXBfZmlsZV9zZXQoY29uc3Qg
Y2hhciAqdmFsLCB2b2lkICpwYXJhbSkKLXsKLSAgICBpZiAodXRpbF9zdHJpbmdfc2V0KCZq
b3ltYXBfZmlsZSwgdmFsKSkgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gam95X2FyY2hfbWFwcGluZ19sb2FkKGpveW1hcF9maWxlKTsKLX0KLQotc3RhdGlj
IHJlc291cmNlX3N0cmluZ190IHJlc291cmNlc19zdHJpbmdbXSA9IHsKLSAgICB7ICJKb3lN
YXBGaWxlIiwgTlVMTCwgUkVTX0VWRU5UX05PLCBOVUxMLAotICAgICAgJmpveW1hcF9maWxl
LCBqb3ltYXBfZmlsZV9zZXQsICh2b2lkICopMCB9LAotICAgIFJFU09VUkNFX1NUUklOR19M
SVNUX0VORAotfTsKLQogc3RhdGljIGNvbnN0IHJlc291cmNlX2ludF90IHJlc291cmNlc19p
bnRbXSA9IHsKICAgICB7ICJKb3lUaHJlc2hvbGQiLCBERUZBVUxUX0pPWVNUSUNLX1RIUkVT
SE9MRCwgUkVTX0VWRU5UX05PLCBOVUxMLAogICAgICAgJmpveXN0aWNrX3RocmVzaG9sZCwg
c2V0X2pveXN0aWNrX3RocmVzaG9sZCwgTlVMTCB9LApAQCAtMjg3LDEyICsxODgsNiBAQAog
ICAgIH0KIAogI2lmZGVmIEhBVkVfU0RMX05VTUpPWVNUSUNLUwotICAgIGpveW1hcF9mYWN0
b3J5ID0gYXJjaGRlcF9kZWZhdWx0X2pveW1hcF9maWxlX25hbWUoKTsKLSAgICByZXNvdXJj
ZXNfc3RyaW5nWzBdLmZhY3RvcnlfdmFsdWUgPSBqb3ltYXBfZmFjdG9yeTsKLQotICAgIGlm
IChyZXNvdXJjZXNfcmVnaXN0ZXJfc3RyaW5nKHJlc291cmNlc19zdHJpbmcpIDwgMCkgewot
ICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQogICAgIGlmIChyZXNvdXJjZXNfcmVnaXN0ZXJf
aW50KHJlc291cmNlc19pbnQpIDwgMCkgewogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQpA
QCAtMzAxLDIwICsxOTYsNiBAQAogICAgIHJldHVybiAwOwogfQogCi12b2lkIGpveV9hcmNo
X3Jlc291cmNlc19zaHV0ZG93bih2b2lkKQotewotI2lmZGVmIEhBVkVfU0RMX05VTUpPWVNU
SUNLUwotICAgIGlmIChqb3ltYXBfZmFjdG9yeSkgewotICAgICAgICBsaWJfZnJlZShqb3lt
YXBfZmFjdG9yeSk7Ci0gICAgICAgIGpveW1hcF9mYWN0b3J5ID0gTlVMTDsKLSAgICB9Ci0g
ICAgaWYgKGpveW1hcF9maWxlKSB7Ci0gICAgICAgIGxpYl9mcmVlKGpveW1hcF9maWxlKTsK
LSAgICAgICAgam95bWFwX2ZpbGUgPSBOVUxMOwotICAgIH0KLSNlbmRpZgotfQotCiBpbnQg
am95X3NkbF9jbWRsaW5lX29wdGlvbnNfaW5pdCh2b2lkKQogewogI2lmZGVmIEhBVkVfU0RM
X05VTUpPWVNUSUNLUwpAQCAtMzU4LDYgKzIzOSwxNyBAQAogCiAvKiAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tICovCiAKK3N0YXRpYyB2b2lkIHNkbF9qb3lzdGlja19wb2xsKGludCBqb3lwb3J0
LCB2b2lkKiBqb3lzdGljaykge30KK3N0YXRpYyB2b2lkIHNkbF9qb3lzdGlja19jbG9zZSh2
b2lkKiBqb3lzdGljaykKK3sKKyAgICBTRExfSm95c3RpY2tDbG9zZShqb3lzdGljayk7Cit9
CisKK3N0YXRpYyBqb3lzdGlja19kcml2ZXJfdCBzZGxfam95c3RpY2tfZHJpdmVyID0gewor
ICAgIC5wb2xsID0gc2RsX2pveXN0aWNrX3BvbGwsCisgICAgLmNsb3NlID0gc2RsX2pveXN0
aWNrX2Nsb3NlCit9OworCiAjaWZkZWYgSEFWRV9TRExfTlVNSk9ZU1RJQ0tTCiAKIC8qKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
CkBAIC0zNjYsMTEgKzI1OCw5IEBACiBpbnQgam95X3NkbF9pbml0KHZvaWQpCiB7CiAgICAg
aW50IGksIGF4aXMsIGJ1dHRvbiwgaGF0LCBiYWxsOwotICAgIHNkbGpveXN0aWNrX2lucHV0
X3QgajsKICAgICBTRExfSm95c3RpY2sgKmpveTsKKyAgICBjaGFyICpuYW1lOwogCi0gICAg
c2Rsam95c3RpY2sgPSBOVUxMOwotCiAgICAgc2Rsam95X2xvZyA9IGxvZ19vcGVuKCJTRExK
b3lzdGljayIpOwogCiAgICAgaWYgKFNETF9Jbml0U3ViU3lzdGVtKFNETF9JTklUX0pPWVNU
SUNLKSkgewpAQCAtMzg3LDU2OCArMjc3LDQzIEBACiAKICAgICBsb2dfbWVzc2FnZShzZGxq
b3lfbG9nLCAiJWkgam95c3RpY2tzIGZvdW5kIiwgbnVtX2pveXN0aWNrcyk7CiAKLSAgICBz
ZGxqb3lzdGljayA9IGxpYl9tYWxsb2Moc2l6ZW9mKHNkbGpveXN0aWNrX3QpICogbnVtX2pv
eXN0aWNrcyk7Ci0KICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX2pveXN0aWNrczsgKytpKSB7
Ci0gICAgICAgIGpveSA9IHNkbGpveXN0aWNrW2ldLmpveXB0ciA9IFNETF9Kb3lzdGlja09w
ZW4oaSk7CisgICAgICAgIGpveSA9IFNETF9Kb3lzdGlja09wZW4oaSk7CiAgICAgICAgIGlm
IChqb3kpIHsKICNpZm5kZWYgVVNFX1NETFVJMgotICAgICAgICAgICAgc2Rsam95c3RpY2tb
aV0ubmFtZSA9IGxpYl9zdHJkdXAoU0RMX0pveXN0aWNrTmFtZShpKSk7CisgICAgICAgICAg
ICBuYW1lID0gbGliX3N0cmR1cChTRExfSm95c3RpY2tOYW1lKGkpKTsKICNlbHNlCi0gICAg
ICAgICAgICBzZGxqb3lzdGlja1tpXS5uYW1lID0gbGliX3N0cmR1cChTRExfSm95c3RpY2tO
YW1lKHNkbGpveXN0aWNrW2ldLmpveXB0cikpOworICAgICAgICAgICAgbmFtZSA9IGxpYl9z
dHJkdXAoU0RMX0pveXN0aWNrTmFtZShqb3kpKTsKICNlbmRpZgotICAgICAgICAgICAgYXhp
cyA9IHNkbGpveXN0aWNrW2ldLmlucHV0X21heFtBWElTXSA9IFNETF9Kb3lzdGlja051bUF4
ZXMoam95KTsKLSAgICAgICAgICAgIGJ1dHRvbiA9IHNkbGpveXN0aWNrW2ldLmlucHV0X21h
eFtCVVRUT05dID0gU0RMX0pveXN0aWNrTnVtQnV0dG9ucyhqb3kpOwotICAgICAgICAgICAg
aGF0ID0gc2Rsam95c3RpY2tbaV0uaW5wdXRfbWF4W0hBVF0gPSBTRExfSm95c3RpY2tOdW1I
YXRzKGpveSk7Ci0gICAgICAgICAgICBiYWxsID0gc2Rsam95c3RpY2tbaV0uaW5wdXRfbWF4
W0JBTExdID0gU0RMX0pveXN0aWNrTnVtQmFsbHMoam95KTsKKyAgICAgICAgICAgIGF4aXMg
PSBTRExfSm95c3RpY2tOdW1BeGVzKGpveSk7CisgICAgICAgICAgICBidXR0b24gPSBTRExf
Sm95c3RpY2tOdW1CdXR0b25zKGpveSk7CisgICAgICAgICAgICBoYXQgPSBTRExfSm95c3Rp
Y2tOdW1IYXRzKGpveSk7CisgICAgICAgICAgICBiYWxsID0gU0RMX0pveXN0aWNrTnVtQmFs
bHMoam95KTsKIAotICAgICAgICAgICAgZm9yIChqID0gQVhJUzsgaiA8IE5VTV9JTlBVVF9U
WVBFUzsgKytqKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHNkbGpveXN0aWNrW2ldLmlucHV0
X21heFtqXSA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgc2Rsam95c3RpY2tbaV0uaW5w
dXRbal0gPSBsaWJfbWFsbG9jKHNpemVvZihzZGxqb3lzdGlja19tYXBwaW5nX3QpICogc2Rs
am95c3RpY2tbaV0uaW5wdXRfbWF4W2pdICogaW5wdXRfbXVsdFtqXSk7Ci0gICAgICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgc2Rsam95c3RpY2tbaV0uaW5w
dXRbal0gPSBOVUxMOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgbG9nX21lc3NhZ2Uoc2Rsam95X2xvZywgIkRldmljZSAlaSBcIiVzXCIgKCVp
IGF4ZXMsICVpIGJ1dHRvbnMsICVpIGhhdHMsICVpIGJhbGxzKSIsIGksIHNkbGpveXN0aWNr
W2ldLm5hbWUsIGF4aXMsIGJ1dHRvbiwgaGF0LCBiYWxsKTsKLQotICAgICAgICAgICAgam95
X2FyY2hfaW5pdF9kZWZhdWx0X21hcHBpbmcoaSk7CisgICAgICAgICAgICBsb2dfbWVzc2Fn
ZShzZGxqb3lfbG9nLCAiRGV2aWNlICVpIFwiJXNcIiAoJWkgYXhlcywgJWkgYnV0dG9ucywg
JWkgaGF0cywgJWkgYmFsbHMpIiwgaSwgbmFtZSwgYXhpcywgYnV0dG9uLCBoYXQsIGJhbGwp
OworICAgICAgICAgICAgcmVnaXN0ZXJfam95c3RpY2tfZHJpdmVyKCZzZGxfam95c3RpY2tf
ZHJpdmVyLAorICAgICAgICAgICAgICAgIG5hbWUsCisgICAgICAgICAgICAgICAgam95LAor
ICAgICAgICAgICAgICAgIGF4aXMsCisgICAgICAgICAgICAgICAgYnV0dG9uLAorICAgICAg
ICAgICAgICAgIGhhdCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBsb2dfd2Fy
bmluZyhzZGxqb3lfbG9nLCAiQ291bGRuJ3Qgb3BlbiBqb3lzdGljayAlaSIsIGkpOwogICAg
ICAgICB9CiAgICAgfQogCi0gICAgam95X2FyY2hfbWFwcGluZ19sb2FkKGpveW1hcF9maWxl
KTsKLQogICAgIFNETF9Kb3lzdGlja0V2ZW50U3RhdGUoU0RMX0VOQUJMRSk7CiAgICAgcmV0
dXJuIDA7CiB9CiAKLXZvaWQgam95c3RpY2sodm9pZCkKLXsKLSAgICAvKiBQcm92aWRlZCBv
bmx5IGZvciBhcmNoZGVwIGpveS5oLiBUT0RPOiBNaWdyYXRlIGpveXN0aWNrIHBvbGxpbmcg
aW4gaGVyZSBpZiBhbnkgbmVlZGVkPyAqLwotfQogCi12b2lkIGpveXN0aWNrX2Nsb3NlKHZv
aWQpCi17Ci0gICAgaW50IGk7Ci0gICAgc2Rsam95c3RpY2tfaW5wdXRfdCBqOwotCi0jaWZk
ZWYgU0RMX0RFQlVHCi0gICAgZnByaW50ZihzdGRlcnIsICIlc1xuIiwgX19mdW5jX18pOwot
I2VuZGlmCi0KLSAgICBpZiAoc2Rsam95c3RpY2sgPT0gTlVMTCkgewotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgZm9yIChpID0gMDsgaSA8IG51bV9qb3lzdGlja3M7ICsraSkg
ewotICAgICAgICBsaWJfZnJlZShzZGxqb3lzdGlja1tpXS5uYW1lKTsKLSAgICAgICAgc2Rs
am95c3RpY2tbaV0ubmFtZSA9IE5VTEw7Ci0KLSAgICAgICAgaWYgKHNkbGpveXN0aWNrW2ld
LmpveXB0cikgewotICAgICAgICAgICAgU0RMX0pveXN0aWNrQ2xvc2Uoc2Rsam95c3RpY2tb
aV0uam95cHRyKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZvciAoaiA9IEFYSVM7IGogPCBO
VU1fSU5QVVRfVFlQRVM7ICsraikgewotICAgICAgICAgICAgbGliX2ZyZWUoc2Rsam95c3Rp
Y2tbaV0uaW5wdXRbal0pOwotICAgICAgICAgICAgc2Rsam95c3RpY2tbaV0uaW5wdXRbal0g
PSBOVUxMOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgbGliX2ZyZWUoc2Rsam95c3RpY2sp
OwotICAgIHNkbGpveXN0aWNrID0gTlVMTDsKLX0KLQogLyogLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSAqLwogCi12b2lkIGpveV9hcmNoX2luaXRfZGVmYXVsdF9tYXBwaW5nKGludCBqb3ludW0p
CitzdGF0aWMgaW5saW5lIGpveXN0aWNrX2F4aXNfdmFsdWVfdCBzZGxqb3lfYXhpc19kaXJl
Y3Rpb24oU2ludDE2IHZhbHVlLCBqb3lzdGlja19heGlzX3ZhbHVlX3QgcHJldikKIHsKLSAg
ICBpbnQgaSwgaiwgam95cG9ydCwgcGluLCBzdGF0ZSA9IDA7Ci0KLSAgICBTRExfSm95c3Rp
Y2tVcGRhdGUoKTsKLQotICAgIC8qIEZJWE1FIHNvbWUgam95c3RpY2tzIHNlZW0gdG8gbmVl
ZCBzb21lIHRpbWUgdG8gc2VsZi1jYWxpYnJhdGUgYWZ0ZXIgdGhlCi0gICAgICAgZmlyc3Qg
dGltZSBpdCdzIG9wZW5lZC9wb2xsZWQvcmVhZCwgb3RoZXJ3aXNlIHRoZSByZXBvcnRlZCBh
eGlzIHZhbHVlcwotICAgICAgIGFyZSBpbmNvcnJlY3QgYW5kIGdldCBtYXBwZWQgdG8gTk9O
RS4gUXVpdHRpbmcgYW5kIHJlc3RhcnRpbmcgc2VlbXMgdG8KLSAgICAgICBmaXggdGhpcy4g
TG9hZGluZyB0aGUgam95bWFwIGxhdGVyIGluIHRoZSBpbml0IGdldHMgYXJvdW5kIHRoaXMg
aXNzdWUuICovCi0KLSAgICBmb3IgKGkgPSAwOyBpIDwgc2Rsam95c3RpY2tbam95bnVtXS5p
bnB1dF9tYXhbQVhJU10gKiBpbnB1dF9tdWx0W0FYSVNdOyArK2kpIHsKLSAgICAgICAgam95
cG9ydCA9ICgoMSArIGpveW51bSArICgoaSAmIDQpID4+IDIpKSAmIDEpOwotICAgICAgICBw
aW4gPSA4ID4+IChpICYgMyk7Ci0KLSAgICAgICAgLyogUG9sbCBlYWNoIGpveXN0aWNrIGF4
aXMgb25jZSAqLwotICAgICAgICBpZiAoKGkgJSBpbnB1dF9tdWx0W0FYSVNdKSA9PSAwKSB7
Ci0gICAgICAgICAgICBzdGF0ZSA9IFNETF9Kb3lzdGlja0dldEF4aXMoc2Rsam95c3RpY2tb
am95bnVtXS5qb3lwdHIsIGkgLyBpbnB1dF9tdWx0W0FYSVNdKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIC8qIENoZWNrIHRoYXQgdGhlIGRlZmF1bHQgam95c3RpY2sgdmFsdWUgaXMgd2l0
aGluIHRoZSB0aHJlc2hvbGQuCi0gICAgICAgICAgIFNvbWUgZGV2aWNlcyBoYXZlIGF4ZXMg
dGhhdCBhcmUgKy8tMzI3Njcgd2hlbiBpZGxlOyBtYXBwaW5nCi0gICAgICAgICAgIHRob3Nl
IHRvIE5PTkUgKGJ5IGRlZmF1bHQpIGF2b2lkcyBzb21lIHByb2JsZW1zLiAqLwotICAgICAg
ICBpZiAoKHN0YXRlID4gam95c3RpY2tfdGhyZXNob2xkKSB8fCAoc3RhdGUgPCAtam95c3Rp
Y2tfdGhyZXNob2xkKSkgewotICAgICAgICAgICAgbG9nX3dhcm5pbmcoc2Rsam95X2xvZywg
IkF4aXMgJWkgZXhjZWVkcyB0aHJlc2hvbGQsIG1hcHBpbmcgdG8gTk9ORSIsIGkgLyBpbnB1
dF9tdWx0W0FYSVNdKTsKLSAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBpbnB1dF9tdWx0
W0FYSVNdOyArK2opIHsKLSAgICAgICAgICAgICAgICBzZGxqb3lzdGlja1tqb3ludW1dLmlu
cHV0W0FYSVNdW2kgKyBqXS5hY3Rpb24gPSBOT05FOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgaSArPSAoaiAtIDEpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc2Rs
am95c3RpY2tbam95bnVtXS5pbnB1dFtBWElTXVtpXS5hY3Rpb24gPSBKT1lTVElDSzsKLSAg
ICAgICAgICAgIHNkbGpveXN0aWNrW2pveW51bV0uaW5wdXRbQVhJU11baV0udmFsdWUuam95
WzBdID0gam95cG9ydDsKLSAgICAgICAgICAgIHNkbGpveXN0aWNrW2pveW51bV0uaW5wdXRb
QVhJU11baV0udmFsdWUuam95WzFdID0gcGluOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
Zm9yIChpID0gMDsgaSA8IHNkbGpveXN0aWNrW2pveW51bV0uaW5wdXRfbWF4W0JVVFRPTl0g
KiBpbnB1dF9tdWx0W0JVVFRPTl07ICsraSkgewotICAgICAgICBzd2l0Y2ggKGkgJiAzKSB7
Ci0gICAgICAgICAgICBjYXNlIDA6Ci0gICAgICAgICAgICBjYXNlIDM6Ci0gICAgICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGpveXBvcnQgPSAoKDEgKyBqb3ludW0gKyAo
aSAmIDEpKSAmIDEpOwotICAgICAgICAgICAgICAgIHBpbiA9IDEgPDwgNDsKLSAgICAgICAg
ICAgICAgICBzZGxqb3lzdGlja1tqb3ludW1dLmlucHV0W0JVVFRPTl1baV0uYWN0aW9uID0g
Sk9ZU1RJQ0s7Ci0gICAgICAgICAgICAgICAgc2Rsam95c3RpY2tbam95bnVtXS5pbnB1dFtC
VVRUT05dW2ldLnZhbHVlLmpveVswXSA9IGpveXBvcnQ7Ci0gICAgICAgICAgICAgICAgc2Rs
am95c3RpY2tbam95bnVtXS5pbnB1dFtCVVRUT05dW2ldLnZhbHVlLmpveVsxXSA9IHBpbjsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgMToKLSAgICAgICAg
ICAgICAgICBzZGxqb3lzdGlja1tqb3ludW1dLmlucHV0W0JVVFRPTl1baV0uYWN0aW9uID0g
VUlfQUNUSVZBVEU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNl
IDI6Ci0gICAgICAgICAgICAgICAgc2Rsam95c3RpY2tbam95bnVtXS5pbnB1dFtCVVRUT05d
W2ldLmFjdGlvbiA9IE1BUDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIGZvciAoaSA9IDA7IGkgPCBzZGxqb3lzdGlja1tqb3ludW1dLmlucHV0
X21heFtIQVRdICogaW5wdXRfbXVsdFtIQVRdOyArK2kpIHsKLSAgICAgICAgam95cG9ydCA9
ICgoMSArIGpveW51bSArICgoaSAmIDQpID4+IDIpKSAmIDEpOwotICAgICAgICBwaW4gPSAx
IDw8IChpICYgMyk7Ci0KLSAgICAgICAgc2Rsam95c3RpY2tbam95bnVtXS5pbnB1dFtIQVRd
W2ldLmFjdGlvbiA9IEpPWVNUSUNLOwotICAgICAgICBzZGxqb3lzdGlja1tqb3ludW1dLmlu
cHV0W0hBVF1baV0udmFsdWUuam95WzBdID0gam95cG9ydDsKLSAgICAgICAgc2Rsam95c3Rp
Y2tbam95bnVtXS5pbnB1dFtIQVRdW2ldLnZhbHVlLmpveVsxXSA9IHBpbjsKLSAgICB9Ci0K
LSAgICBmb3IgKGkgPSAwOyBpIDwgc2Rsam95c3RpY2tbam95bnVtXS5pbnB1dF9tYXhbQkFM
TF0gKiBpbnB1dF9tdWx0W0JBTExdOyArK2kpIHsKLSAgICAgICAgc2Rsam95c3RpY2tbam95
bnVtXS5pbnB1dFtCQUxMXVtpXS5hY3Rpb24gPSBOT05FOwotICAgIH0KLX0KLQotc3RhdGlj
IGNoYXIgbWFwcGluZ19yZXR2YWxbNTBdOwotCi1jaGFyICpnZXRfam95X3BvdF9tYXBwaW5n
X3N0cmluZyhpbnQgam95bnIsIGludCBwb3QpCi17Ci0gICAgdWludDE2X3QgcG9ydGF4aXMg
PSAweGZmZmY7Ci0gICAgdWludDhfdCBwb3J0ID0gcG9ydGF4aXMgPj4gODsKLSAgICB1aW50
OF90IGF4aXMgPSBwb3J0YXhpcyAmIDB4ZmY7Ci0gICAgY2hhciAqcmV0dmFsID0gTlVMTDsK
LQotICAgIGlmIChqb3luciA8PSAxICYmIHBvdCA8PSAxKSB7Ci0gICAgICAgIHBvcnRheGlz
ID0gc2Rsam95c3RpY2tfYXhpc19tYXBwaW5nWyhqb3luciA8PCAxKSB8IHBvdF07Ci0gICAg
fQotCi0gICAgaWYgKHBvcnQgIT0gMjU1ICYmIGF4aXMgIT0gMjU1KSB7Ci0gICAgICAgIHNu
cHJpbnRmKG1hcHBpbmdfcmV0dmFsLCA1MCwgIkolZCwgQXglZCIsIHBvcnQsIGF4aXMpOwot
ICAgICAgICByZXR2YWwgPSBtYXBwaW5nX3JldHZhbDsKLSAgICB9Ci0gICAgcmV0dXJuIHJl
dHZhbDsKLX0KLQotY2hhciAqZ2V0X2pveV9waW5fbWFwcGluZ19zdHJpbmcoaW50IGpveW5y
LCBpbnQgcGluKQotewotICAgIGludCBpLCBrOwotICAgIHNkbGpveXN0aWNrX2lucHV0X3Qg
ajsKLSAgICBzZGxqb3lzdGlja19hY3Rpb25fdCB0OwotICAgIGludCB2YWxpZCA9IDA7Ci0g
ICAgaW50IGpveSA9IDA7Ci0gICAgaW50IHR5cGUgPSAwOwotICAgIGludCBpbmRleCA9IDA7
Ci0gICAgaW50IHN1Yl9pbmRleCA9IDA7Ci0gICAgY2hhciAqcmV0dmFsID0gTlVMTDsKLSAg
ICBjaGFyICp0eXBlX3N0cmluZyA9IE5VTEw7Ci0gICAgY2hhciAqaW5kZXhfc3RyaW5nID0g
TlVMTDsKLQotICAgIGZvciAoaSA9IDA7IGkgPCBudW1fam95c3RpY2tzOyArK2kpIHsKLSAg
ICAgICAgZm9yIChqID0gQVhJUzsgaiA8IE5VTV9JTlBVVF9UWVBFUzsgKytqKSB7Ci0gICAg
ICAgICAgICBmb3IgKGsgPSAwOyBrIDwgc2Rsam95c3RpY2tbaV0uaW5wdXRfbWF4W2pdICog
aW5wdXRfbXVsdFtqXTsgKytrKSB7Ci0gICAgICAgICAgICAgICAgdCA9IHNkbGpveXN0aWNr
W2ldLmlucHV0W2pdW2tdLmFjdGlvbjsKLSAgICAgICAgICAgICAgICBpZiAodCA9PSBKT1lT
VElDSykgewotICAgICAgICAgICAgICAgICAgICBpZiAoc2Rsam95c3RpY2tbaV0uaW5wdXRb
al1ba10udmFsdWUuam95WzBdID09IGpveW5yICYmIHNkbGpveXN0aWNrW2ldLmlucHV0W2pd
W2tdLnZhbHVlLmpveVsxXSA9PSBwaW4pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZh
bGlkKys7Ci0gICAgICAgICAgICAgICAgICAgICAgICBqb3kgPSBpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgdHlwZSA9IGo7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2gg
KHR5cGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEFYSVM6Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVfc3RyaW5nID0gIkF4IjsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhfc3RyaW5nID0gIkkiOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCA9IGsgLyAyOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdWJfaW5kZXggPSBrICUgMjsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSBCVVRUT046Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVfc3Ry
aW5nID0gIkJ0IjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhfc3Ry
aW5nID0gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBr
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJfaW5kZXggPSAwOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjYXNlIEhBVDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dHlwZV9zdHJpbmcgPSAiSHQiOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bmRleF9zdHJpbmcgPSAiSSI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
ZGV4ID0gayAvIDQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Yl9pbmRl
eCA9IGsgJSA0OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEJBTEw6Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHR5cGVfc3RyaW5nID0gIkJsIjsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW5kZXhfc3RyaW5nID0gTlVMTDsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW5kZXggPSBrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdWJfaW5kZXggPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0K
LSAgICBpZiAodmFsaWQgPiAxKSB7Ci0gICAgICAgIHJldHZhbCA9ICJNdWx0aXBsZSI7Ci0g
ICAgfQotICAgIGlmICh2YWxpZCA9PSAxKSB7Ci0gICAgICAgIGlmIChpbmRleF9zdHJpbmcg
IT0gTlVMTCApIHsKLSAgICAgICAgICAgIHNucHJpbnRmKG1hcHBpbmdfcmV0dmFsLCA1MCwg
IkolZCwgJXMlZCwgJXMlZCIsIGpveSwgdHlwZV9zdHJpbmcsIGluZGV4LCBpbmRleF9zdHJp
bmcsIHN1Yl9pbmRleCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzbnByaW50
ZihtYXBwaW5nX3JldHZhbCwgNTAsICJKJWQsICVzJWQiLCBqb3ksIHR5cGVfc3RyaW5nLCBp
bmRleCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dmFsID0gbWFwcGluZ19yZXR2YWw7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIHJldHZhbDsKLX0KLQotdm9pZCBzZGxqb3lfZGVsZXRlX3Bv
dF9tYXBwaW5nKGludCBwb3J0LCBpbnQgcG90KQotewotICAgIGludCBpLCBrOwotICAgIHNk
bGpveXN0aWNrX2lucHV0X3QgajsKLSAgICBzZGxqb3lzdGlja19hY3Rpb25fdCB0OwotCi0g
ICAgZm9yIChpID0gMDsgaSA8IG51bV9qb3lzdGlja3M7ICsraSkgewotICAgICAgICBmb3Ig
KGogPSBBWElTOyBqIDwgTlVNX0lOUFVUX1RZUEVTOyArK2opIHsKLSAgICAgICAgICAgIGZv
ciAoayA9IDA7IGsgPCBzZGxqb3lzdGlja1tpXS5pbnB1dF9tYXhbal0gKiBpbnB1dF9tdWx0
W2pdOyArK2spIHsKLSAgICAgICAgICAgICAgICB0ID0gc2Rsam95c3RpY2tbaV0uaW5wdXRb
al1ba10uYWN0aW9uOwotICAgICAgICAgICAgICAgIGlmICh0ID09IFBPVF9BWElTKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChzZGxqb3lzdGlja1tpXS5pbnB1dFtqXVtrXS52YWx1
ZS5heGlzWzBdID09IHBvcnQgJiYgc2Rsam95c3RpY2tbaV0uaW5wdXRbal1ba10udmFsdWUu
YXhpc1sxXSA9PSBwb3QpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNkbGpveXN0aWNr
W2ldLmlucHV0W2pdW2tdLmFjdGlvbiA9IE5PTkU7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBzZGxqb3lzdGlja1tpXS5pbnB1dFtqXVtrXS52YWx1ZS5heGlzWzBdID0gMDsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHNkbGpveXN0aWNrW2ldLmlucHV0W2pdW2tdLnZhbHVlLmF4
aXNbMV0gPSAwOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChwb3J0IDw9IDEgJiYgcG90IDw9IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHNkbGpveXN0aWNrX2F4aXNfbWFwcGluZ1socG9ydCA8PCAxKSB8IHBvdF0gPSAweGZmZmY7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgc2Rsam95X2RlbGV0ZV9waW5fbWFw
cGluZyhpbnQgcG9ydCwgaW50IHBpbikKLXsKLSAgICBpbnQgaSwgazsKLSAgICBzZGxqb3lz
dGlja19pbnB1dF90IGo7Ci0gICAgc2Rsam95c3RpY2tfYWN0aW9uX3QgdDsKLQotICAgIGZv
ciAoaSA9IDA7IGkgPCBudW1fam95c3RpY2tzOyArK2kpIHsKLSAgICAgICAgZm9yIChqID0g
QVhJUzsgaiA8IE5VTV9JTlBVVF9UWVBFUzsgKytqKSB7Ci0gICAgICAgICAgICBmb3IgKGsg
PSAwOyBrIDwgc2Rsam95c3RpY2tbaV0uaW5wdXRfbWF4W2pdICogaW5wdXRfbXVsdFtqXTsg
KytrKSB7Ci0gICAgICAgICAgICAgICAgdCA9IHNkbGpveXN0aWNrW2ldLmlucHV0W2pdW2td
LmFjdGlvbjsKLSAgICAgICAgICAgICAgICBpZiAodCA9PSBKT1lTVElDSykgewotICAgICAg
ICAgICAgICAgICAgICBpZiAoc2Rsam95c3RpY2tbaV0uaW5wdXRbal1ba10udmFsdWUuam95
WzBdID09IHBvcnQgJiYgc2Rsam95c3RpY2tbaV0uaW5wdXRbal1ba10udmFsdWUuam95WzFd
ID09IHBpbikgewotICAgICAgICAgICAgICAgICAgICAgICAgc2Rsam95c3RpY2tbaV0uaW5w
dXRbal1ba10uYWN0aW9uID0gTk9ORTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNkbGpv
eXN0aWNrW2ldLmlucHV0W2pdW2tdLnZhbHVlLmpveVswXSA9IDA7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBzZGxqb3lzdGlja1tpXS5pbnB1dFtqXVtrXS52YWx1ZS5qb3lbMV0gPSAw
OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCi1pbnQgam95X2FyY2hfbWFwcGluZ19kdW1w
KGNvbnN0IGNoYXIgKmZpbGVuYW1lKQotewotICAgIEZJTEUgKmZwOwotICAgIGludCBpLCBr
OwotICAgIHNkbGpveXN0aWNrX2lucHV0X3QgajsKLSAgICBzZGxqb3lzdGlja19hY3Rpb25f
dCB0OwotICAgIGNoYXIgKmhvdGtleV9wYXRoID0gTlVMTDsKLQotI2lmZGVmIFNETF9ERUJV
RwotICAgIGZwcmludGYoc3RkZXJyLCAiJXNcbiIsIF9fZnVuY19fKTsKLSNlbmRpZgotCi0g
ICAgaWYgKGZpbGVuYW1lID09IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0K
LQotICAgIGZwID0gZm9wZW4oZmlsZW5hbWUsIE1PREVfV1JJVEVfVEVYVCk7Ci0KLSAgICBp
ZiAoZnAgPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotCi0gICAgZnBy
aW50ZihmcCwgIiMgVklDRSBqb3lzdGljayBtYXBwaW5nIGZpbGVcbiIKLSAgICAgICAgICAg
ICIjXG4iCi0gICAgICAgICAgICAiIyBBIGpveXN0aWNrIG1hcCBpcyByZWFkIGluIGFzIHBh
dGNoIHRvIHRoZSBjdXJyZW50IG1hcC5cbiIKLSAgICAgICAgICAgICIjXG4iCi0gICAgICAg
ICAgICAiIyBGaWxlIGZvcm1hdDpcbiIKLSAgICAgICAgICAgICIjIC0gY29tbWVudCBsaW5l
cyBzdGFydCB3aXRoICcjJ1xuIgotICAgICAgICAgICAgIiMgLSBrZXl3b3JkIGxpbmVzIHN0
YXJ0IHdpdGggJyFrZXl3b3JkJ1xuIgotICAgICAgICAgICAgIiMgLSBub3JtYWwgbGluZSBo
YXMgJ2pveW51bSBpbnB1dHR5cGUgaW5wdXRpbmRleCBhY3Rpb24nXG4iCi0gICAgICAgICAg
ICAiI1xuIgotICAgICAgICAgICAgIiMgS2V5d29yZHMgYW5kIHRoZWlyIGxpbmVzIGFyZTpc
biIKLSAgICAgICAgICAgICIjICchQ0xFQVInICAgIGNsZWFyIGFsbCBtYXBwaW5nc1xuIgot
ICAgICAgICAgICAgIiNcbiIKLSAgICAgICAgICAgICk7Ci0KLSAgICBmcHJpbnRmKGZwLCAi
IyBpbnB1dHR5cGU6XG4iCi0gICAgICAgICAgICAiIyAwICAgICAgYXhpc1xuIgotICAgICAg
ICAgICAgIiMgMSAgICAgIGJ1dHRvblxuIgotICAgICAgICAgICAgIiMgMiAgICAgIGhhdFxu
IgotICAgICAgICAgICAgIiMgMyAgICAgIGJhbGxcbiIKLSAgICAgICAgICAgICIjXG4iCi0g
ICAgICAgICAgICAiIyBOb3RlIHRoYXQgZWFjaCBheGlzIGhhcyAyIGlucHV0aW5kZXggZW50
cmllcyBhbmQgZWFjaCBoYXQgaGFzIDQuXG4iCi0gICAgICAgICAgICAiI1xuIgotICAgICAg
ICAgICAgIiMgYWN0aW9uIFthY3Rpb25fcGFyYW1ldGVyc106XG4iCi0gICAgICAgICAgICAi
IyAwICAgICAgICAgICAgICAgbm9uZVxuIgotICAgICAgICAgICAgIiMgMSBwb3J0IHBpbiAg
ICAgIGpveXN0aWNrIChwaW46IDEvMi80LzgvMTYvMzIvNjQvMTI4LzI1Ni81MTIvMTAyNC8y
MDQ4ID0gdS9kL2wvci9maXJlKEEpL2ZpcmUyKEIpL2ZpcmUzKFgpL1kvTEIvUkIvc2VsZWN0
L3N0YXJ0KVxuIgotICAgICAgICAgICAgIiMgMiByb3cgY29sICAgICAgIGtleWJvYXJkXG4i
Ci0gICAgICAgICAgICAiIyAzICAgICAgICAgICAgICAgbWFwXG4iCi0gICAgICAgICAgICAi
IyA0ICAgICAgICAgICAgICAgVUkgYWN0aXZhdGVcbiIKLSAgICAgICAgICAgICIjIDUgcGF0
aCZ0byZpdGVtICBVSSBmdW5jdGlvblxuIgotICAgICAgICAgICAgIiMgNiBwb3QgYXhpcyAg
ICAgIGpveXN0aWNrIChwb3Q6IDEvMi8zLzQgPSB4MS95MS94Mi95MilcbiIKLSAgICAgICAg
ICAgICIjXG5cbiIKLSAgICAgICAgICAgICk7Ci0KLSAgICBmcHJpbnRmKGZwLCAiIUNMRUFS
XG5cbiIpOwotCi0gICAgZm9yIChpID0gMDsgaSA8IG51bV9qb3lzdGlja3M7ICsraSkgewot
ICAgICAgICBmcHJpbnRmKGZwLCAiIyAlc1xuIiwgc2Rsam95c3RpY2tbaV0ubmFtZSk7Ci0g
ICAgICAgIGZvciAoaiA9IEFYSVM7IGogPCBOVU1fSU5QVVRfVFlQRVM7ICsraikgewotICAg
ICAgICAgICAgZm9yIChrID0gMDsgayA8IHNkbGpveXN0aWNrW2ldLmlucHV0X21heFtqXSAq
IGlucHV0X211bHRbal07ICsraykgewotICAgICAgICAgICAgICAgIHQgPSBzZGxqb3lzdGlj
a1tpXS5pbnB1dFtqXVtrXS5hY3Rpb247Ci0gICAgICAgICAgICAgICAgZnByaW50ZihmcCwg
IiVpICV1ICVpICV1IiwgaSwgaiwgaywgdCk7Ci0gICAgICAgICAgICAgICAgc3dpdGNoICh0
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSk9ZU1RJQ0s6Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBmcHJpbnRmKGZwLCAiICVpICVpIiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2Rsam95c3RpY2tbaV0uaW5wdXRbal1ba10udmFsdWUuam95WzBdLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZGxqb3lzdGlja1tpXS5pbnB1dFtq
XVtrXS52YWx1ZS5qb3lbMV0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBj
YXNlIEtFWUJPQVJEOgotICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihmcCwgIiAl
aSAlaSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNkbGpveXN0aWNrW2ld
LmlucHV0W2pdW2tdLnZhbHVlLmtleVswXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2Rsam95c3RpY2tbaV0uaW5wdXRbal1ba10udmFsdWUua2V5WzFdCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBVSV9GVU5DVElPTjoKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGhvdGtleV9wYXRoID0gc2RsX3VpX2hvdGtleV9wYXRoKHNkbGpv
eXN0aWNrW2ldLmlucHV0W2pdW2tdLnZhbHVlLnVpX2Z1bmN0aW9uKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGZwcmludGYoZnAsICIgJXMiLCBob3RrZXlfcGF0aCk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBsaWJfZnJlZShob3RrZXlfcGF0aCk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBQT1RfQVhJUzoK
LSAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoZnAsICIgJWkgJWkiLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzZGxqb3lzdGlja1tpXS5pbnB1dFtqXVtrXS52
YWx1ZS5heGlzWzBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZGxqb3lz
dGlja1tpXS5pbnB1dFtqXVtrXS52YWx1ZS5heGlzWzFdCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBmcHJpbnRmKGZwLCAiXG4i
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZwcmludGYoZnAsICJcbiIpOwotICAg
ICAgICB9Ci0gICAgICAgIGZwcmludGYoZnAsICJcblxuIik7Ci0gICAgfQotCi0gICAgZmNs
b3NlKGZwKTsKLQotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBqb3lfYXJjaF9r
ZXl3b3JkX2NsZWFyKHZvaWQpCi17Ci0gICAgaW50IGksIGs7Ci0gICAgc2Rsam95c3RpY2tf
aW5wdXRfdCBqOwotCi0gICAgZm9yIChpID0gMDsgaSA8IG51bV9qb3lzdGlja3M7ICsraSkg
ewotICAgICAgICBmb3IgKGogPSBBWElTOyBqIDwgTlVNX0lOUFVUX1RZUEVTOyArK2opIHsK
LSAgICAgICAgICAgIGZvciAoayA9IDA7IGsgPCBzZGxqb3lzdGlja1tpXS5pbnB1dF9tYXhb
al0gKiBpbnB1dF9tdWx0W2pdOyArK2spIHsKLSAgICAgICAgICAgICAgICBzZGxqb3lzdGlj
a1tpXS5pbnB1dFtqXVtrXS5hY3Rpb24gPSBOT05FOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBqb3lfYXJjaF9wYXJzZV9rZXl3b3JkKGNo
YXIgKmJ1ZmZlcikKLXsKLSAgICBjaGFyICprZXk7Ci0KLSAgICBrZXkgPSBzdHJ0b2soYnVm
ZmVyICsgMSwgIiBcdDoiKTsKLQotICAgIGlmICghc3RyY21wKGtleSwgIkNMRUFSIikpIHsK
LSAgICAgICAgam95X2FyY2hfa2V5d29yZF9jbGVhcigpOwotICAgIH0KLX0KLQotc3RhdGlj
IHZvaWQgam95X2FyY2hfcGFyc2VfZW50cnkoY2hhciAqYnVmZmVyKQotewotICAgIGNoYXIg
KnA7Ci0gICAgaW50IGpveW51bSwgaW5wdXRpbmRleCwgZGF0YTEgPSAwLCBkYXRhMiA9IDA7
Ci0gICAgc2Rsam95c3RpY2tfaW5wdXRfdCBpbnB1dHR5cGU7Ci0gICAgc2Rsam95c3RpY2tf
YWN0aW9uX3QgYWN0aW9uOwotCi0gICAgcCA9IHN0cnRvayhidWZmZXIsICIgXHQ6Iik7Ci0K
LSAgICBqb3ludW0gPSBhdG9pKHApOwotCi0gICAgaWYgKGpveW51bSA+PSBudW1fam95c3Rp
Y2tzKSB7Ci0gICAgICAgIGxvZ19lcnJvcihzZGxqb3lfbG9nLCAiQ291bGQgbm90IGZpbmQg
am95c3RpY2sgJWkhIiwgam95bnVtKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IHAgPSBzdHJ0b2soTlVMTCwgIiBcdCwiKTsKLSAgICBpZiAocCAhPSBOVUxMKSB7Ci0gICAg
ICAgIGlucHV0dHlwZSA9IChzZGxqb3lzdGlja19pbnB1dF90KWF0b2kocCk7Ci0gICAgICAg
IHAgPSBzdHJ0b2soTlVMTCwgIiBcdCwiKTsKLSAgICAgICAgaWYgKHAgIT0gTlVMTCkgewot
ICAgICAgICAgICAgaW5wdXRpbmRleCA9IGF0b2kocCk7Ci0gICAgICAgICAgICBwID0gc3Ry
dG9rKE5VTEwsICIgXHQiKTsKLSAgICAgICAgICAgIGlmIChwICE9IE5VTEwpIHsKLSAgICAg
ICAgICAgICAgICBhY3Rpb24gPSAoc2Rsam95c3RpY2tfYWN0aW9uX3QpYXRvaShwKTsKLQot
ICAgICAgICAgICAgICAgIHN3aXRjaCAoYWN0aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGNhc2UgVUlfRlVOQ1RJT046Ci0gICAgICAgICAgICAgICAgICAgICAgICBwID0gc3RydG9r
KE5VTEwsICJcdFxyXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICBjYXNlIEpPWVNUSUNLOgotICAgICAgICAgICAgICAgICAgICBj
YXNlIFBPVF9BWElTOgotICAgICAgICAgICAgICAgICAgICBjYXNlIEtFWUJPQVJEOgotICAg
ICAgICAgICAgICAgICAgICAgICAgcCA9IHN0cnRvayhOVUxMLCAiIFx0Iik7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBkYXRhMSA9IGF0b2kocCk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBwID0gc3RydG9rKE5VTEwsICIgXHQiKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGRhdGEyID0gYXRvaShwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKGlucHV0aW5k
ZXggPCBzZGxqb3lzdGlja1tqb3ludW1dLmlucHV0X21heFtpbnB1dHR5cGVdICogaW5wdXRf
bXVsdFtpbnB1dHR5cGVdKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNkbGpveXN0aWNrW2pv
eW51bV0uaW5wdXRbaW5wdXR0eXBlXVtpbnB1dGluZGV4XS5hY3Rpb24gPSBhY3Rpb247Ci0K
LSAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChhY3Rpb24pIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGNhc2UgSk9ZU1RJQ0s6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2Rsam95c3RpY2tbam95bnVtXS5pbnB1dFtpbnB1dHR5cGVdW2lucHV0aW5kZXhdLnZhbHVl
LmpveVswXSA9IGRhdGExOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNkbGpveXN0
aWNrW2pveW51bV0uaW5wdXRbaW5wdXR0eXBlXVtpbnB1dGluZGV4XS52YWx1ZS5qb3lbMV0g
PSBkYXRhMjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgUE9UX0FYSVM6Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2Rsam95c3RpY2tbam95bnVtXS5pbnB1dFtpbnB1dHR5cGVdW2lucHV0aW5kZXhd
LnZhbHVlLmF4aXNbMF0gPSBkYXRhMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
ZGxqb3lzdGlja1tqb3ludW1dLmlucHV0W2lucHV0dHlwZV1baW5wdXRpbmRleF0udmFsdWUu
YXhpc1sxXSA9IGRhdGEyOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRh
MSA8PSAxICYmIGRhdGEyIDw9IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2Rsam95c3RpY2tfYXhpc19tYXBwaW5nWyhkYXRhMSA8PCAxKSB8IGRhdGEyXSA9IChq
b3ludW0gPDwgOCkgfCAoaW5wdXRpbmRleCAvIDIpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXNvdXJjZXNfc2V0X2ludF9zcHJpbnRmKCJQYWRkbGVzSW5wdXQlZCIs
IFBBRERMRVNfSU5QVVRfSk9ZX0FYSVMsIGRhdGExICsgMSk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICAgICAgY2FzZSBLRVlCT0FSRDoKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzZGxqb3lzdGlja1tqb3ludW1dLmlucHV0W2lucHV0dHlwZV1baW5wdXRp
bmRleF0udmFsdWUua2V5WzBdID0gZGF0YTE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2Rsam95c3RpY2tbam95bnVtXS5pbnB1dFtpbnB1dHR5cGVdW2lucHV0aW5kZXhdLnZh
bHVlLmtleVsxXSA9IGRhdGEyOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBVSV9GVU5DVElPTjoKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzZGxqb3lzdGlja1tqb3ludW1dLmlucHV0W2lucHV0dHlw
ZV1baW5wdXRpbmRleF0udmFsdWUudWlfZnVuY3Rpb24gPSBzZGxfdWlfaG90a2V5X2FjdGlv
bihwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgICAgICBsb2dfd2FybmluZyhzZGxqb3lfbG9nLCAiaW5wdXRpbmRl
eCAlaSB0b28gbGFyZ2UgZm9yIGlucHV0dHlwZSAldSwgam95bnVtICVpISIsIGlucHV0aW5k
ZXgsIGlucHV0dHlwZSwgam95bnVtKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLWludCBqb3lfYXJjaF9tYXBwaW5nX2xvYWQo
Y29uc3QgY2hhciAqZmlsZW5hbWUpCi17Ci0gICAgRklMRSAqZnA7Ci0gICAgY2hhciAqY29t
cGxldGVfcGF0aDsKLSAgICBjaGFyIGJ1ZmZlclsxMDAwXTsKLQotI2lmZGVmIFNETF9ERUJV
RwotICAgIGZwcmludGYoc3RkZXJyLCAiJXMsICVzXG4iLCBfX2Z1bmNfXywgZmlsZW5hbWUp
OwotI2VuZGlmCi0KLSAgICAvKiBTaWxlbnRseSBpZ25vcmUga2V5bWFwIGxvYWQgb24gcmVz
b3VyY2UgJiBjbWRsaW5lIGluaXQgKi8KLSAgICBpZiAoc2Rsam95c3RpY2sgPT0gTlVMTCkg
ewotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBpZiAoZmlsZW5hbWUgPT0gTlVM
TCkgewotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotCi0gICAgZnAgPSBzeXNmaWxlX29w
ZW4oZmlsZW5hbWUsIE5VTEwsICZjb21wbGV0ZV9wYXRoLCBNT0RFX1JFQURfVEVYVCk7Ci0K
LSAgICBpZiAoZnAgPT0gTlVMTCkgewotICAgICAgICBsb2dfd2FybmluZyhzZGxqb3lfbG9n
LCAiRmFpbGVkIHRvIG9wZW4gYCVzJy4iLCBmaWxlbmFtZSk7Ci0gICAgICAgIHJldHVybiAt
MTsKLSAgICB9Ci0KLSAgICBsb2dfbWVzc2FnZShzZGxqb3lfbG9nLCAiTG9hZGluZyBqb3lz
dGljayBtYXAgYCVzJy4iLCBjb21wbGV0ZV9wYXRoKTsKLQotICAgIGxpYl9mcmVlKGNvbXBs
ZXRlX3BhdGgpOwotCi0gICAgZG8gewotICAgICAgICBidWZmZXJbMF0gPSAwOwotICAgICAg
ICBpZiAoZmdldHMoYnVmZmVyLCA5OTksIGZwKSkgewotICAgICAgICAgICAgY2hhciAqcDsK
LQotICAgICAgICAgICAgaWYgKHN0cmxlbihidWZmZXIpID09IDApIHsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgYnVmZmVyW3N0cmxl
bihidWZmZXIpIC0gMV0gPSAwOyAvKiByZW1vdmUgbmV3bGluZSAqLwotCi0gICAgICAgICAg
ICAvKiByZW1vdmUgY29tbWVudHMgKi8KLSAgICAgICAgICAgIGlmICgocCA9IHN0cmNocihi
dWZmZXIsICcjJykpKSB7Ci0gICAgICAgICAgICAgICAgKnAgPSAwOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAvKiByZW1vdmUgd2hpdGVzcGFjZSBhdCB0aGUgYmVnaW5uaW5n
IG9mIHRoZSBsaW5lICovCi0gICAgICAgICAgICBwID0gYnVmZmVyOwotICAgICAgICAgICAg
d2hpbGUgKCgoKnAgPT0gJyAnKSB8fCAoKnAgPT0gJ1x0JykpICYmICgqcCAhPSAwKSkgewot
ICAgICAgICAgICAgICAgICsrcDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc3dp
dGNoICgqcCkgewotICAgICAgICAgICAgICAgIGNhc2UgMDoKLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSAnISc6Ci0gICAgICAgICAgICAgICAg
ICAgIC8qIGtleXdvcmQgaGFuZGxpbmcgKi8KLSAgICAgICAgICAgICAgICAgICAgam95X2Fy
Y2hfcGFyc2Vfa2V5d29yZChwKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgLyogdGFibGUgZW50
cnkgaGFuZGxpbmcgKi8KLSAgICAgICAgICAgICAgICAgICAgam95X2FyY2hfcGFyc2VfZW50
cnkocCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgfSB3aGlsZSAoIWZlb2YoZnApKTsKLSAgICBmY2xvc2UoZnApOwotCi0g
ICAgcmV0dXJuIDA7Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotc3RhdGlj
IGlubGluZSB1aW50OF90IHNkbGpveV9heGlzX2RpcmVjdGlvbihTaW50MTYgdmFsdWUsIHVp
bnQ4X3QgcHJldikKLXsKICAgICBpbnQgdGhyZXMgPSBqb3lzdGlja190aHJlc2hvbGQ7CiAK
LSAgICBpZiAocHJldiA9PSAwKSB7CisgICAgaWYgKHByZXYgPT0gSk9ZX0FYSVNfTUlERExF
KSB7CiAgICAgICAgIHRocmVzICs9IGpveXN0aWNrX2Z1eno7CiAgICAgfSBlbHNlIHsKICAg
ICAgICAgdGhyZXMgLT0gam95c3RpY2tfZnV6ejsKQEAgLTk1NSwxMSArMzIwLDExIEBACiAg
ICAgfQogCiAgICAgaWYgKHZhbHVlIDwgLXRocmVzKSB7Ci0gICAgICAgIHJldHVybiAyOwor
ICAgICAgICByZXR1cm4gSk9ZX0FYSVNfTkVHQVRJVkU7CiAgICAgfSBlbHNlIGlmICh2YWx1
ZSA+IHRocmVzKSB7Ci0gICAgICAgIHJldHVybiAxOworICAgICAgICByZXR1cm4gSk9ZX0FY
SVNfUE9TSVRJVkU7CiAgICAgfSBlbHNlIGlmICgodmFsdWUgPCB0aHJlcykgJiYgKHZhbHVl
ID4gLXRocmVzKSkgewotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIEpPWV9B
WElTX01JRERMRTsKICAgICB9CiAKICAgICByZXR1cm4gcHJldjsKQEAgLTk4OSwyOCArMzU0
LDI2IEBACiAgICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzZGxqb3lzdGlja19tYXBwaW5n
X3QgKnNkbGpveV9nZXRfbWFwcGluZyhTRExfRXZlbnQgZSkKK3N0YXRpYyBqb3lzdGlja19t
YXBwaW5nX3QgKnNkbGpveV9nZXRfbWFwcGluZyhTRExfRXZlbnQgZSkKIHsKLSAgICBzZGxq
b3lzdGlja19tYXBwaW5nX3QgKnJldHZhbCA9IE5VTEw7CisgICAgam95c3RpY2tfbWFwcGlu
Z190ICpyZXR2YWwgPSBOVUxMOwogICAgIHVpbnQ4X3QgY3VyOwogCiAgICAgc3dpdGNoIChl
LnR5cGUpIHsKICAgICAgICAgY2FzZSBTRExfSk9ZQVhJU01PVElPTjoKICAgICAgICAgICAg
IGN1ciA9IHNkbGpveV9heGlzX2RpcmVjdGlvbihlLmpheGlzLnZhbHVlLCAwKTsKLSAgICAg
ICAgICAgIGlmIChjdXIgPiAwKSB7Ci0gICAgICAgICAgICAgICAgLS1jdXI7Ci0gICAgICAg
ICAgICAgICAgcmV0dmFsID0gJihzZGxqb3lzdGlja1tlLmpheGlzLndoaWNoXS5pbnB1dFtB
WElTXVtlLmpheGlzLmF4aXMgKiBpbnB1dF9tdWx0W0FYSVNdICsgY3VyXSk7CisgICAgICAg
ICAgICBpZiAoY3VyICE9IEpPWV9BWElTX01JRERMRSkgeworICAgICAgICAgICAgICAgIHJl
dHZhbCA9IGpveV9nZXRfYXhpc19tYXBwaW5nKGUuamF4aXMud2hpY2gsIGUuamF4aXMudmFs
dWUsIGN1cik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBTRExfSk9ZSEFUTU9USU9OOgogICAgICAgICAgICAgY3VyID0gc2Rsam95X2hhdF9k
aXJlY3Rpb24oZS5qaGF0LnZhbHVlLCAwKTsKICAgICAgICAgICAgIGlmIChjdXIgPiAwKSB7
Ci0gICAgICAgICAgICAgICAgLS1jdXI7Ci0gICAgICAgICAgICAgICAgcmV0dmFsID0gJihz
ZGxqb3lzdGlja1tlLmpoYXQud2hpY2hdLmlucHV0W0hBVF1bZS5qaGF0LmhhdCAqIGlucHV0
X211bHRbSEFUXSArIGN1cl0pOworICAgICAgICAgICAgICAgIHJldHZhbCA9IGpveV9nZXRf
aGF0X21hcHBpbmcoZS5qaGF0LndoaWNoLCBlLmpoYXQuaGF0LCBjdXIpOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgU0RMX0pPWUJVVFRPTkRP
V046Ci0gICAgICAgICAgICByZXR2YWwgPSAmKHNkbGpveXN0aWNrW2UuamJ1dHRvbi53aGlj
aF0uaW5wdXRbQlVUVE9OXVtlLmpidXR0b24uYnV0dG9uXSk7CisgICAgICAgICAgICByZXR2
YWwgPSBqb3lfZ2V0X2J1dHRvbl9tYXBwaW5nKGUuamJ1dHRvbi53aGljaCwgZS5qYnV0dG9u
LmJ1dHRvbik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAg
ICAgICAgIGJyZWFrOwpAQCAtMTAxOCw3ICszODEsNyBAQAogICAgIHJldHVybiByZXR2YWw7
CiB9CiAKLXN0YXRpYyB1aV9tZW51X2FjdGlvbl90IHNkbGpveV9wZXJmb3JtX2V2ZW50KHNk
bGpveXN0aWNrX21hcHBpbmdfdCAqZXZlbnQsIGludCB2YWx1ZSkKK3N0YXRpYyBqb3lzdGlj
a19hY3Rpb25fdCBzZGxqb3lfcGVyZm9ybV9ldmVudChqb3lzdGlja19tYXBwaW5nX3QgKmV2
ZW50LCBpbnQgdmFsdWUpCiB7CiAgICAgdWludDhfdCB0OwogICAgIHVpX21lbnVfYWN0aW9u
X3QgcmV0dmFsID0gTUVOVV9BQ1RJT05fTk9ORTsKQEAgLTEwMjUsOSArMzg4LDggQEAKIAog
ICAgIGF1dG9yZXBlYXQgPSBNRU5VX0FDVElPTl9OT05FOwogCi0gICAgaWYgKHNkbF9tZW51
X3N0YXRlIHx8IChzZGxfdmtiZF9zdGF0ZSAmIFNETF9WS0JEX0FDVElWRSkpIHsKICAgICAg
ICAgaWYgKGV2ZW50LT5hY3Rpb24gPT0gSk9ZU1RJQ0spIHsKLSAgICAgICAgICAgIHN3aXRj
aCAoZXZlbnQtPnZhbHVlLmpveVsxXSkgeworICAgICAgICAgICAgc3dpdGNoIChldmVudC0+
dmFsdWUuam95X3BpbikgewogICAgICAgICAgICAgICAgIGNhc2UgMHgwMToKICAgICAgICAg
ICAgICAgICAgICAgcmV0dmFsID0gYXV0b3JlcGVhdCA9IE1FTlVfQUNUSU9OX1VQOwogICAg
ICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTEwNTcsNDAgKzQxOSw2IEBACiAgICAgICAg
ICAgICByZXR2YWwgKz0gTUVOVV9BQ1RJT05fTk9ORV9SRUxFQVNFOwogICAgICAgICB9CiAg
ICAgICAgIHJldHVybiByZXR2YWw7Ci0gICAgfQotCi0gICAgYXV0b3JlcGVhdF9kZWxheSA9
IDMwOwotCi0gICAgc3dpdGNoIChldmVudC0+YWN0aW9uKSB7Ci0gICAgICAgIGNhc2UgSk9Z
U1RJQ0s6Ci0gICAgICAgICAgICB0ID0gZXZlbnQtPnZhbHVlLmpveVswXTsKLSAgICAgICAg
ICAgIGlmIChqb3lzdGlja19wb3J0X21hcFt0XSA9PSBKT1lERVZfSk9ZU1RJQ0spIHsKLSAg
ICAgICAgICAgICAgICBpZiAodmFsdWUpIHsKLSAgICAgICAgICAgICAgICAgICAgam95c3Rp
Y2tfc2V0X3ZhbHVlX29yKHQsICh1aW50MTZfdClldmVudC0+dmFsdWUuam95WzFdKTsKLSAg
ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBqb3lzdGlja19z
ZXRfdmFsdWVfYW5kKHQsICh1aW50MTZfdCkgfihldmVudC0+dmFsdWUuam95WzFdKSk7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgS0VZQk9BUkQ6Ci0gICAgICAgICAgICBrZXlib2FyZF9zZXRfa2V5YXJy
X2FueShldmVudC0+dmFsdWUua2V5WzBdLCBldmVudC0+dmFsdWUua2V5WzFdLCB2YWx1ZSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBVSV9BQ1RJVkFURToKLSAgICAg
ICAgICAgIGlmICh2YWx1ZSkgewotICAgICAgICAgICAgICAgIHNkbF91aV9hY3RpdmF0ZSgp
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVUlf
RlVOQ1RJT046Ci0gICAgICAgICAgICBpZiAodmFsdWUgJiYgZXZlbnQtPnZhbHVlLnVpX2Z1
bmN0aW9uKSB7Ci0gICAgICAgICAgICAgICAgc2RsX3VpX2hvdGtleShldmVudC0+dmFsdWUu
dWlfZnVuY3Rpb24pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgTk9ORToKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgIH0KLQotICAgIHJldHVybiByZXR2YWw7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0gKi8KQEAgLTExMTAsMTU2ICs0MzgsNTggQEAKIAogdWludDhfdCBzZGxqb3lfY2hlY2tf
YXhpc19tb3ZlbWVudChTRExfRXZlbnQgZSkKIHsKLSAgICB1aW50OF90IGN1ciwgcHJldjsK
LSAgICBpbnQgaW5kZXg7Ci0gICAgVWludDggam95bnVtOwotICAgIFVpbnQ4IGF4aXM7Ci0g
ICAgU2ludDE2IHZhbHVlOwotCi0gICAgam95bnVtID0gZS5qYXhpcy53aGljaDsKLSAgICBh
eGlzID0gZS5qYXhpcy5heGlzOwotICAgIHZhbHVlID0gZS5qYXhpcy52YWx1ZTsKLQotICAg
IGluZGV4ID0gYXhpcyAqIGlucHV0X211bHRbQVhJU107Ci0gICAgcHJldiA9IHNkbGpveXN0
aWNrW2pveW51bV0uaW5wdXRbQVhJU11baW5kZXhdLnByZXY7Ci0KLSAgICBjdXIgPSBzZGxq
b3lfYXhpc19kaXJlY3Rpb24odmFsdWUsIHByZXYpOwotCi0gICAgaWYgKGN1ciA9PSBwcmV2
KSB7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIHNkbGpveXN0aWNrW2pveW51
bV0uaW5wdXRbQVhJU11baW5kZXhdLnByZXYgPSBjdXI7Ci0gICAgcmV0dXJuIGN1cjsKKyAg
ICBqb3lfYXhpc19ldmVudChlLmpheGlzLndoaWNoLCBlLmpheGlzLmF4aXMsIGUuamF4aXMu
dmFsdWUpOworICAgIHJldHVybiBlLmpheGlzLnZhbHVlOwogfQogCiB1aW50OF90IHNkbGpv
eV9jaGVja19oYXRfbW92ZW1lbnQoU0RMX0V2ZW50IGUpCiB7Ci0gICAgdWludDhfdCBjdXIs
IHByZXY7Ci0gICAgaW50IGluZGV4OwotICAgIFVpbnQ4IGpveW51bTsKLSAgICBVaW50OCBo
YXQ7Ci0gICAgVWludDggdmFsdWU7Ci0KLSAgICBqb3ludW0gPSBlLmpoYXQud2hpY2g7Ci0g
ICAgaGF0ID0gZS5qaGF0LmhhdDsKLSAgICB2YWx1ZSA9IGUuamhhdC52YWx1ZTsKLQotICAg
IGluZGV4ID0gaGF0ICogaW5wdXRfbXVsdFtIQVRdOwotICAgIHByZXYgPSBzZGxqb3lzdGlj
a1tqb3ludW1dLmlucHV0W0hBVF1baW5kZXhdLnByZXY7Ci0KLSAgICBpZiAodmFsdWUgPT0g
cHJldikgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBjdXIgPSBzZGxqb3lf
aGF0X2RpcmVjdGlvbih2YWx1ZSwgcHJldik7Ci0KLSAgICBzZGxqb3lzdGlja1tqb3ludW1d
LmlucHV0W0hBVF1baW5kZXhdLnByZXYgPSB2YWx1ZTsKLSAgICByZXR1cm4gY3VyOworICAg
IGpveV9oYXRfZXZlbnQoZS5qaGF0LndoaWNoLCBlLmpoYXQuaGF0LCBlLmpoYXQudmFsdWUp
OworICAgIHJldHVybiBlLmpoYXQudmFsdWU7CiB9CiAKLXVpX21lbnVfYWN0aW9uX3Qgc2Rs
am95X2F4aXNfZXZlbnQoVWludDggam95bnVtLCBVaW50OCBheGlzLCBTaW50MTYgdmFsdWUp
Cit2b2lkIHNkbGpveV9heGlzX2V2ZW50KFVpbnQ4IGpveW51bSwgVWludDggYXhpcywgU2lu
dDE2IHZhbHVlKQogewogICAgIGludCBpOwotICAgIHVpbnQ4X3QgY3VyLCBwcmV2OworICAg
IGpveXN0aWNrX2F4aXNfdmFsdWVfdCBjdXIsIHByZXY7CiAgICAgaW50IGluZGV4OwogICAg
IHVpX21lbnVfYWN0aW9uX3QgcmV0dmFsID0gTUVOVV9BQ1RJT05fTk9ORTsKICAgICBTaW50
MTYgdmFsID0gfnZhbHVlOwogCi0gICAgZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewotICAg
ICAgICBpZiAoc2Rsam95c3RpY2tfYXhpc19tYXBwaW5nW2ldID09ICgoam95bnVtIDw8IDgp
IHwgYXhpcykpIHsKLSAgICAgICAgICAgIGpveXN0aWNrX3NldF9heGlzX3ZhbHVlKGksICh1
aW50OF90KSgodmFsICsgMzI3NjgpID4+IDgpKTsKLSAgICAgICAgfQotICAgIH0KKyAgICBw
cmV2ID0gam95X2F4aXNfcHJldihqb3ludW0sIGluZGV4KTsKIAotICAgIGluZGV4ID0gYXhp
cyAqIGlucHV0X211bHRbQVhJU107Ci0gICAgcHJldiA9IHNkbGpveXN0aWNrW2pveW51bV0u
aW5wdXRbQVhJU11baW5kZXhdLnByZXY7Ci0KICAgICBjdXIgPSBzZGxqb3lfYXhpc19kaXJl
Y3Rpb24odmFsdWUsIHByZXYpOworICAgIAorICAgIGpveV9heGlzX2V2ZW50KGpveW51bSwg
YXhpcywgY3VyKTsKK30KIAotICAgIGlmIChjdXIgPT0gcHJldikgewotICAgICAgICByZXR1
cm4gcmV0dmFsOwotICAgIH0KK2pveXN0aWNrX2FjdGlvbl90IHNkbGpveV9heGlzX2V2ZW50
X2Zvcl9tZW51X2FjdGlvbihVaW50OCBqb3ludW0sIFVpbnQ4IGF4aXMsIFNpbnQxNiB2YWx1
ZSkKK3sKKyAgICBpbnQgaTsKKyAgICBqb3lzdGlja19heGlzX3ZhbHVlX3QgY3VyLCBwcmV2
OworICAgIGludCBpbmRleDsKKyAgICBqb3lzdGlja19hY3Rpb25fdCByZXR2YWwgPSBNRU5V
X0FDVElPTl9OT05FOworICAgIFNpbnQxNiB2YWwgPSB+dmFsdWU7CisgICAgam95c3RpY2tf
bWFwcGluZ190KiBtYXBwaW5nOwogCi0gICAgaWYgKGN1ciA9PSAxKSB7Ci0gICAgICAgIGlm
IChwcmV2ID09IDIpIHsKLSAgICAgICAgICAgIHNkbGpveV9wZXJmb3JtX2V2ZW50KCYoc2Rs
am95c3RpY2tbam95bnVtXS5pbnB1dFtBWElTXVtpbmRleCArIDFdKSwgMCk7Ci0gICAgICAg
IH0KLSAgICAgICAgcmV0dmFsID0gc2Rsam95X3BlcmZvcm1fZXZlbnQoJihzZGxqb3lzdGlj
a1tqb3ludW1dLmlucHV0W0FYSVNdW2luZGV4XSksIDEpOwotICAgIH0gZWxzZSBpZiAoY3Vy
ID09IDIpIHsKLSAgICAgICAgaWYgKHByZXYgPT0gMSkgewotICAgICAgICAgICAgc2Rsam95
X3BlcmZvcm1fZXZlbnQoJihzZGxqb3lzdGlja1tqb3ludW1dLmlucHV0W0FYSVNdW2luZGV4
XSksIDApOwotICAgICAgICB9Ci0gICAgICAgIHJldHZhbCA9IHNkbGpveV9wZXJmb3JtX2V2
ZW50KCYoc2Rsam95c3RpY2tbam95bnVtXS5pbnB1dFtBWElTXVtpbmRleCArIDFdKSwgMSk7
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKHByZXYgPT0gMSkgewotICAgICAgICAgICAg
c2Rsam95X3BlcmZvcm1fZXZlbnQoJihzZGxqb3lzdGlja1tqb3ludW1dLmlucHV0W0FYSVNd
W2luZGV4XSksIDApOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc2Rsam95X3Bl
cmZvcm1fZXZlbnQoJihzZGxqb3lzdGlja1tqb3ludW1dLmlucHV0W0FYSVNdW2luZGV4ICsg
MV0pLCAwKTsKLSAgICAgICAgfQotICAgIH0KKyAgICBwcmV2ID0gam95X2F4aXNfcHJldihq
b3ludW0sIGluZGV4KTsKIAotICAgIHNkbGpveXN0aWNrW2pveW51bV0uaW5wdXRbQVhJU11b
aW5kZXhdLnByZXYgPSBjdXI7Ci0gICAgcmV0dXJuIHJldHZhbDsKKyAgICBjdXIgPSBzZGxq
b3lfYXhpc19kaXJlY3Rpb24odmFsdWUsIHByZXYpOworICAgIAorICAgIG1hcHBpbmcgPSBq
b3lfZ2V0X2F4aXNfbWFwcGluZyhqb3ludW0sIGF4aXMsIGN1cik7CisgICAgcmV0dXJuIHNk
bGpveV9wZXJmb3JtX2V2ZW50KG1hcHBpbmcsIGN1cik7CiB9CiAKLXVpX21lbnVfYWN0aW9u
X3Qgc2Rsam95X2J1dHRvbl9ldmVudChVaW50OCBqb3ludW0sIFVpbnQ4IGJ1dHRvbiwgVWlu
dDggdmFsdWUpCitqb3lzdGlja19hY3Rpb25fdCBzZGxqb3lfYnV0dG9uX2V2ZW50KFVpbnQ4
IGpveW51bSwgVWludDggYnV0dG9uLCBVaW50OCB2YWx1ZSkKIHsKLSAgICByZXR1cm4gc2Rs
am95X3BlcmZvcm1fZXZlbnQoJihzZGxqb3lzdGlja1tqb3ludW1dLmlucHV0W0JVVFRPTl1b
YnV0dG9uXSksIHZhbHVlKTsKKyAgICBqb3lzdGlja19tYXBwaW5nX3QqIG1hcHBpbmcgPSBq
b3lfZ2V0X2J1dHRvbl9tYXBwaW5nKGpveW51bSwgYnV0dG9uKTsKKyAgICByZXR1cm4gc2Rs
am95X3BlcmZvcm1fZXZlbnQobWFwcGluZywgdmFsdWUpOwogfQogCi11aV9tZW51X2FjdGlv
bl90IHNkbGpveV9oYXRfZXZlbnQoVWludDggam95bnVtLCBVaW50OCBoYXQsIFVpbnQ4IHZh
bHVlKQoram95c3RpY2tfYWN0aW9uX3Qgc2Rsam95X2hhdF9ldmVudChVaW50OCBqb3ludW0s
IFVpbnQ4IGhhdCwgVWludDggdmFsdWUpCiB7Ci0gICAgdWludDhfdCBwcmV2OwotICAgIGlu
dCBpbmRleDsKLSAgICB1aV9tZW51X2FjdGlvbl90IHJldHZhbCA9IE1FTlVfQUNUSU9OX05P
TkU7Ci0KLSAgICBpbmRleCA9IGhhdCAqIGlucHV0X211bHRbSEFUXTsKLSAgICBwcmV2ID0g
c2Rsam95c3RpY2tbam95bnVtXS5pbnB1dFtIQVRdW2luZGV4XS5wcmV2OwotCi0gICAgaWYg
KHZhbHVlID09IHByZXYpIHsKLSAgICAgICAgcmV0dXJuIHJldHZhbDsKLSAgICB9Ci0KLSAg
ICBpZiAoKHZhbHVlICYgU0RMX0hBVF9VUCkgJiYgKCEocHJldiAmIFNETF9IQVRfVVApKSkg
ewotICAgICAgICBpZiAocHJldiAmIFNETF9IQVRfRE9XTikgewotICAgICAgICAgICAgc2Rs
am95X3BlcmZvcm1fZXZlbnQoJihzZGxqb3lzdGlja1tqb3ludW1dLmlucHV0W0hBVF1baW5k
ZXggKyAxXSksIDApOwotICAgICAgICB9Ci0gICAgICAgIHJldHZhbCA9IHNkbGpveV9wZXJm
b3JtX2V2ZW50KCYoc2Rsam95c3RpY2tbam95bnVtXS5pbnB1dFtIQVRdW2luZGV4XSksIDEp
OwotICAgIH0gZWxzZSBpZiAoKHZhbHVlICYgU0RMX0hBVF9ET1dOKSAmJiAoIShwcmV2ICYg
U0RMX0hBVF9ET1dOKSkpIHsKLSAgICAgICAgaWYgKHByZXYgJiBTRExfSEFUX1VQKSB7Ci0g
ICAgICAgICAgICBzZGxqb3lfcGVyZm9ybV9ldmVudCgmKHNkbGpveXN0aWNrW2pveW51bV0u
aW5wdXRbSEFUXVtpbmRleF0pLCAwKTsKLSAgICAgICAgfQotICAgICAgICByZXR2YWwgPSBz
ZGxqb3lfcGVyZm9ybV9ldmVudCgmKHNkbGpveXN0aWNrW2pveW51bV0uaW5wdXRbSEFUXVtp
bmRleCArIDFdKSwgMSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKCghKHZhbHVlICYg
U0RMX0hBVF9VUCkpICYmIChwcmV2ICYgU0RMX0hBVF9VUCkpIHsKLSAgICAgICAgICAgIHNk
bGpveV9wZXJmb3JtX2V2ZW50KCYoc2Rsam95c3RpY2tbam95bnVtXS5pbnB1dFtIQVRdW2lu
ZGV4XSksIDApOwotICAgICAgICB9IGVsc2UgaWYgKCghKHZhbHVlICYgU0RMX0hBVF9ET1dO
KSkgJiYgKHByZXYgJiBTRExfSEFUX0RPV04pKSB7Ci0gICAgICAgICAgICBzZGxqb3lfcGVy
Zm9ybV9ldmVudCgmKHNkbGpveXN0aWNrW2pveW51bV0uaW5wdXRbSEFUXVtpbmRleCArIDFd
KSwgMCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiBUT0RPIGEgcmV0dmFsIGlzIG1p
c3NlZCBvbiBzaW11bHRhbmVvdXMgWC9ZIGV2ZW50cyAqLwotICAgIGlmICgodmFsdWUgJiBT
RExfSEFUX0xFRlQpICYmICghKHByZXYgJiBTRExfSEFUX0xFRlQpKSkgewotICAgICAgICBp
ZiAocHJldiAmIFNETF9IQVRfUklHSFQpIHsKLSAgICAgICAgICAgIHNkbGpveV9wZXJmb3Jt
X2V2ZW50KCYoc2Rsam95c3RpY2tbam95bnVtXS5pbnB1dFtIQVRdW2luZGV4ICsgM10pLCAw
KTsKLSAgICAgICAgfQotICAgICAgICByZXR2YWwgPSBzZGxqb3lfcGVyZm9ybV9ldmVudCgm
KHNkbGpveXN0aWNrW2pveW51bV0uaW5wdXRbSEFUXVtpbmRleCArIDJdKSwgMSk7Ci0gICAg
fSBlbHNlIGlmICgodmFsdWUgJiBTRExfSEFUX1JJR0hUKSAmJiAoIShwcmV2ICYgU0RMX0hB
VF9SSUdIVCkpKSB7Ci0gICAgICAgIGlmIChwcmV2ICYgU0RMX0hBVF9MRUZUKSB7Ci0gICAg
ICAgICAgICBzZGxqb3lfcGVyZm9ybV9ldmVudCgmKHNkbGpveXN0aWNrW2pveW51bV0uaW5w
dXRbSEFUXVtpbmRleCArIDJdKSwgMCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dmFsID0g
c2Rsam95X3BlcmZvcm1fZXZlbnQoJihzZGxqb3lzdGlja1tqb3ludW1dLmlucHV0W0hBVF1b
aW5kZXggKyAzXSksIDEpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICgoISh2YWx1ZSAm
IFNETF9IQVRfTEVGVCkpICYmIChwcmV2ICYgU0RMX0hBVF9MRUZUKSkgewotICAgICAgICAg
ICAgc2Rsam95X3BlcmZvcm1fZXZlbnQoJihzZGxqb3lzdGlja1tqb3ludW1dLmlucHV0W0hB
VF1baW5kZXggKyAyXSksIDApOwotICAgICAgICB9IGVsc2UgaWYgKCghKHZhbHVlICYgU0RM
X0hBVF9SSUdIVCkpICYmIChwcmV2ICYgU0RMX0hBVF9SSUdIVCkpIHsKLSAgICAgICAgICAg
IHNkbGpveV9wZXJmb3JtX2V2ZW50KCYoc2Rsam95c3RpY2tbam95bnVtXS5pbnB1dFtIQVRd
W2luZGV4ICsgM10pLCAwKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHNkbGpveXN0aWNr
W2pveW51bV0uaW5wdXRbSEFUXVtpbmRleF0ucHJldiA9IHZhbHVlOwotICAgIHJldHVybiBy
ZXR2YWw7CisgICAgam95c3RpY2tfbWFwcGluZ190KiBtYXBwaW5nID0gam95X2dldF9oYXRf
bWFwcGluZyhqb3ludW0sIGhhdCwgdmFsdWUpOworICAgIHJldHVybiBzZGxqb3lfcGVyZm9y
bV9ldmVudChtYXBwaW5nLCAxKTsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpA
QCAtMTI3OSwzOCArNTA5LDExIEBACiB9CiAjZW5kaWYKIAotdm9pZCBzZGxqb3lfc2V0X2pv
eXN0aWNrKFNETF9FdmVudCBlLCBpbnQgcG9ydCwgaW50IGJpdHMpCi17Ci0gICAgc2Rsam95
c3RpY2tfbWFwcGluZ190ICpqb3lldmVudCA9IHNkbGpveV9nZXRfbWFwcGluZyhlKTsKKy8q
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotICAgIGlmIChqb3lldmVudCAhPSBOVUxMKSB7
Ci0gICAgICAgIGpveWV2ZW50LT5hY3Rpb24gPSBKT1lTVElDSzsKLSAgICAgICAgam95ZXZl
bnQtPnZhbHVlLmpveVswXSA9ICh1aW50MTZfdClwb3J0OwotICAgICAgICBqb3lldmVudC0+
dmFsdWUuam95WzFdID0gKHVpbnQxNl90KWJpdHM7Ci0gICAgfQotfQotCi12b2lkIHNkbGpv
eV9zZXRfam95c3RpY2tfYXhpcyhTRExfRXZlbnQgZSwgaW50IHBvcnQsIGludCBwb3QpCi17
Ci0gICAgaW50IGluZGV4ID0gKHBvcnQgPDwgMSkgfCBwb3Q7Ci0gICAgdWludDhfdCBzdGlj
ayA9IGUuamF4aXMud2hpY2g7Ci0gICAgdWludDhfdCBheGlzID0gZS5qYXhpcy5heGlzOwot
ICAgIHNkbGpveXN0aWNrX21hcHBpbmdfdCAqam95ZXZlbnQgPSBzZGxqb3lfZ2V0X21hcHBp
bmcoZSk7Ci0KLSAgICBpZiAoam95ZXZlbnQgIT0gTlVMTCkgewotICAgICAgICBqb3lldmVu
dC0+YWN0aW9uID0gUE9UX0FYSVM7Ci0gICAgICAgIGpveWV2ZW50LT52YWx1ZS5heGlzWzBd
ID0gKHVpbnQxNl90KXBvcnQ7Ci0gICAgICAgIGpveWV2ZW50LT52YWx1ZS5heGlzWzFdID0g
KHVpbnQxNl90KXBvdDsKLSAgICB9Ci0KLSAgICBpZiAoaW5kZXggPD0gMykgewotICAgICAg
ICBzZGxqb3lzdGlja19heGlzX21hcHBpbmdbaW5kZXhdID0gKHN0aWNrIDw8IDgpIHwgYXhp
czsKLSAgICB9Ci19Ci0KIHZvaWQgc2Rsam95X3NldF9ob3RrZXkoU0RMX0V2ZW50IGUsIHVp
X21lbnVfZW50cnlfdCAqdmFsdWUpCiB7Ci0gICAgc2Rsam95c3RpY2tfbWFwcGluZ190ICpq
b3lldmVudCA9IHNkbGpveV9nZXRfbWFwcGluZyhlKTsKKyAgICBqb3lzdGlja19tYXBwaW5n
X3QgKmpveWV2ZW50ID0gc2Rsam95X2dldF9tYXBwaW5nKGUpOwogCiAgICAgaWYgKGpveWV2
ZW50ICE9IE5VTEwpIHsKICAgICAgICAgam95ZXZlbnQtPmFjdGlvbiA9IFVJX0ZVTkNUSU9O
OwpAQCAtMTMyMCw3ICs1MjMsNyBAQAogCiB2b2lkIHNkbGpveV9zZXRfa2V5cHJlc3MoU0RM
X0V2ZW50IGUsIGludCByb3csIGludCBjb2wpCiB7Ci0gICAgc2Rsam95c3RpY2tfbWFwcGlu
Z190ICpqb3lldmVudCA9IHNkbGpveV9nZXRfbWFwcGluZyhlKTsKKyAgICBqb3lzdGlja19t
YXBwaW5nX3QgKmpveWV2ZW50ID0gc2Rsam95X2dldF9tYXBwaW5nKGUpOwogCiAgICAgaWYg
KGpveWV2ZW50ICE9IE5VTEwpIHsKICAgICAgICAgam95ZXZlbnQtPmFjdGlvbiA9IEtFWUJP
QVJEOwpAQCAtMTMyOSwxOCArNTMyLDkgQEAKICAgICB9CiB9CiAKLXZvaWQgc2Rsam95X3Nl
dF9leHRyYShTRExfRXZlbnQgZSwgaW50IHR5cGUpCi17Ci0gICAgc2Rsam95c3RpY2tfbWFw
cGluZ190ICpqb3lldmVudCA9IHNkbGpveV9nZXRfbWFwcGluZyhlKTsKLQotICAgIGlmIChq
b3lldmVudCAhPSBOVUxMKSB7Ci0gICAgICAgIGpveWV2ZW50LT5hY3Rpb24gPSB0eXBlID8g
TUFQIDogVUlfQUNUSVZBVEU7Ci0gICAgfQotfQotCiB2b2lkIHNkbGpveV91bnNldChTRExf
RXZlbnQgZSkKIHsKLSAgICBzZGxqb3lzdGlja19tYXBwaW5nX3QgKmpveWV2ZW50ID0gc2Rs
am95X2dldF9tYXBwaW5nKGUpOworICAgIGpveXN0aWNrX21hcHBpbmdfdCAqam95ZXZlbnQg
PSBzZGxqb3lfZ2V0X21hcHBpbmcoZSk7CiAKICAgICBpZiAoam95ZXZlbnQgIT0gTlVMTCkg
ewogICAgICAgICBqb3lldmVudC0+YWN0aW9uID0gTk9ORTsKQEAgLTEzNDcsMzkgKzU0MSw2
IEBACiAgICAgfQogfQogCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyBp
bnQgX3NkbGpveV9zd2FwX3BvcnRzID0gMDsKLQotdm9pZCBzZGxqb3lfc3dhcF9wb3J0cyh2
b2lkKQotewotICAgIGludCBpLCBrOwotICAgIHNkbGpveXN0aWNrX2lucHV0X3QgajsKLQot
ICAgIHJlc291cmNlc19nZXRfaW50KCJKb3lEZXZpY2UxIiwgJmkpOwotICAgIHJlc291cmNl
c19nZXRfaW50KCJKb3lEZXZpY2UyIiwgJmspOwotICAgIHJlc291cmNlc19zZXRfaW50KCJK
b3lEZXZpY2UxIiwgayk7Ci0gICAgcmVzb3VyY2VzX3NldF9pbnQoIkpveURldmljZTIiLCBp
KTsKLSAgICBfc2Rsam95X3N3YXBfcG9ydHMgXj0gMTsKLQotICAgIGZvciAoaSA9IDA7IGkg
PCBudW1fam95c3RpY2tzOyArK2kpIHsKLSAgICAgICAgZm9yIChqID0gQVhJUzsgaiA8IE5V
TV9JTlBVVF9UWVBFUzsgKytqKSB7Ci0gICAgICAgICAgICBmb3IgKGsgPSAwOyBrIDwgc2Rs
am95c3RpY2tbaV0uaW5wdXRfbWF4W2pdICogaW5wdXRfbXVsdFtqXTsgKytrKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKHNkbGpveXN0aWNrW2ldLmlucHV0W2pdW2tdLmFjdGlvbiA9PSBK
T1lTVElDSykgewotICAgICAgICAgICAgICAgICAgICBzZGxqb3lzdGlja1tpXS5pbnB1dFtq
XVtrXS52YWx1ZS5qb3lbMF0gXj0gMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLWludCBzZGxqb3lfZ2V0X3N3YXBfcG9ydHMo
dm9pZCkgCi17Ci0gICAgcmV0dXJuIF9zZGxqb3lfc3dhcF9wb3J0czsKLX0KLQotLyogLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSAqLwotCiAjZWxzZQogLyogIUhBVkVfU0RMX05VTUpPWVNUSUNL
UyAqLwogCkluZGV4OiBkZXYvdmljZS90cnVuay9zcmMvYXJjaC9zZGwvam95LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gZGV2L3ZpY2UvdHJ1bmsvc3JjL2FyY2gvc2RsL2pveS5oCShyZXZpc2lv
bmUgNDEwMTApCisrKyBkZXYvdmljZS90cnVuay9zcmMvYXJjaC9zZGwvam95LmgJKGNvcGlh
IGRpIGxhdm9ybykKQEAgLTQwLDE1ICs0MCwxNyBAQAogZXh0ZXJuIHZvaWQgam95c3RpY2tf
Y2xvc2Uodm9pZCk7CiBleHRlcm4gdm9pZCBqb3lzdGljayh2b2lkKTsKIAotZXh0ZXJuIHZv
aWQgam95X2FyY2hfcmVzb3VyY2VzX3NodXRkb3duKHZvaWQpOworI2lmZGVmIEhBVkVfU0RM
X05VTUpPWVNUSUNLUworc3RydWN0IGpveXN0aWNrX21hcHBpbmdfczsKK2VudW0gam95c3Rp
Y2tfYWN0aW9uX2U7CiAKLSNpZmRlZiBIQVZFX1NETF9OVU1KT1lTVElDS1MKIGV4dGVybiB2
b2lkIGpveV9hcmNoX2luaXRfZGVmYXVsdF9tYXBwaW5nKGludCBqb3ludW0pOwogZXh0ZXJu
IGludCBqb3lfYXJjaF9tYXBwaW5nX2xvYWQoY29uc3QgY2hhciAqZmlsZW5hbWUpOwogZXh0
ZXJuIGludCBqb3lfYXJjaF9tYXBwaW5nX2R1bXAoY29uc3QgY2hhciAqZmlsZW5hbWUpOwot
ZXh0ZXJuIHVpX21lbnVfYWN0aW9uX3Qgc2Rsam95X2F4aXNfZXZlbnQoVWludDggam95bnVt
LCBVaW50OCBheGlzLCBTaW50MTYgdmFsdWUpOwotZXh0ZXJuIHVpX21lbnVfYWN0aW9uX3Qg
c2Rsam95X2J1dHRvbl9ldmVudChVaW50OCBqb3ludW0sIFVpbnQ4IGJ1dHRvbiwgVWludDgg
dmFsdWUpOwotZXh0ZXJuIHVpX21lbnVfYWN0aW9uX3Qgc2Rsam95X2hhdF9ldmVudChVaW50
OCBqb3ludW0sIFVpbnQ4IGhhdCwgVWludDggdmFsdWUpOworZXh0ZXJuIHZvaWQgc2Rsam95
X2F4aXNfZXZlbnQoVWludDggam95bnVtLCBVaW50OCBheGlzLCBTaW50MTYgdmFsdWUpOwor
ZXh0ZXJuIGVudW0gam95c3RpY2tfYWN0aW9uX2Ugc2Rsam95X2J1dHRvbl9ldmVudChVaW50
OCBqb3ludW0sIFVpbnQ4IGJ1dHRvbiwgVWludDggdmFsdWUpOworZXh0ZXJuIGVudW0gam95
c3RpY2tfYWN0aW9uX2Ugc2Rsam95X2hhdF9ldmVudChVaW50OCBqb3ludW0sIFVpbnQ4IGhh
dCwgVWludDggdmFsdWUpOworZXh0ZXJuIGVudW0gam95c3RpY2tfYWN0aW9uX2Ugc2Rsam95
X2F4aXNfZXZlbnRfZm9yX21lbnVfYWN0aW9uKFVpbnQ4IGpveW51bSwgVWludDggYXhpcywg
U2ludDE2IHZhbHVlKTsKIGV4dGVybiB1aV9tZW51X2FjdGlvbl90IHNkbGpveV9hdXRvcmVw
ZWF0KHZvaWQpOwogZXh0ZXJuIHVpbnQ4X3Qgc2Rsam95X2NoZWNrX2F4aXNfbW92ZW1lbnQo
U0RMX0V2ZW50IGUpOwogZXh0ZXJuIHVpbnQ4X3Qgc2Rsam95X2NoZWNrX2hhdF9tb3ZlbWVu
dChTRExfRXZlbnQgZSk7CkluZGV4OiBkZXYvdmljZS90cnVuay9zcmMvYXJjaC9zZGwva2Jk
LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gZGV2L3ZpY2UvdHJ1bmsvc3JjL2FyY2gvc2RsL2tiZC5j
CShyZXZpc2lvbmUgNDEwMTApCisrKyBkZXYvdmljZS90cnVuay9zcmMvYXJjaC9zZGwva2Jk
LmMJKGNvcGlhIGRpIGxhdm9ybykKQEAgLTQ3NCw3ICs0NzQsNyBAQAogICAgIHJldHVybiBy
ZXQ7CiB9CiAKLXVpX21lbnVfYWN0aW9uX3Qgc2Rsa2JkX3ByZXNzKFNETEtleSBrZXksIFNE
TE1vZCBtb2QpCit2b2lkIHNkbGtiZF9wcmVzcyhTRExLZXkga2V5LCBTRExNb2QgbW9kKQog
ewogICAgIHVpX21lbnVfYWN0aW9uX3QgaSwgcmV0dmFsID0gTUVOVV9BQ1RJT05fTk9ORTsK
ICAgICB1aV9tZW51X2VudHJ5X3QgKmhvdGtleV9hY3Rpb24gPSBOVUxMOwpAQCAtNTAwLDM2
ICs1MDAsMjAgQEAKICAgICB9CiAjZW5kaWYKIAotICAgIGlmIChzZGxfbWVudV9zdGF0ZSB8
fCAoc2RsX3ZrYmRfc3RhdGUgJiBTRExfVktCRF9BQ1RJVkUpKSB7Ci0gICAgICAgIGlmIChr
ZXkgIT0gU0RMS19VTktOT1dOKSB7Ci0gICAgICAgICAgICBmb3IgKGkgPSBNRU5VX0FDVElP
Tl9VUDsgaSA8IE1FTlVfQUNUSU9OX05VTTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KHNkbF91aV9tZW51a2V5c1tpXSA9PSAoaW50KWtleSkgewotICAgICAgICAgICAgICAgICAg
ICByZXR2YWwgPSBpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoKGludCkoa2V5KSA9PSBz
ZGxfdWlfbWVudWtleXNbMF0pIHsKLSAgICAgICAgICAgICAgICByZXR2YWwgPSBNRU5VX0FD
VElPTl9FWElUOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBy
ZXR2YWw7Ci0gICAgfQotCiAgICAgaWYgKChpbnQpKGtleSkgPT0gc2RsX3VpX21lbnVrZXlz
WzBdKSB7CiAgICAgICAgIHNkbF91aV9hY3RpdmF0ZSgpOwotICAgICAgICByZXR1cm4gcmV0
dmFsOworICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKChob3RrZXlfYWN0aW9u
ID0gc2Rsa2JkX2dldF9ob3RrZXkoa2V5LCBtb2QpKSAhPSBOVUxMKSB7CiAgICAgICAgIHNk
bF91aV9ob3RrZXkoaG90a2V5X2FjdGlvbik7Ci0gICAgICAgIHJldHVybiByZXR2YWw7Cisg
ICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBrZXlib2FyZF9rZXlfcHJlc3NlZCgodW5z
aWduZWQgbG9uZylrZXksIHNkbGtiZF9nZXRfbW9kaWZpZXIobW9kKSk7Ci0gICAgcmV0dXJu
IHJldHZhbDsKIH0KIAotdWlfbWVudV9hY3Rpb25fdCBzZGxrYmRfcmVsZWFzZShTRExLZXkg
a2V5LCBTRExNb2QgbW9kKQordm9pZCBzZGxrYmRfcmVsZWFzZShTRExLZXkga2V5LCBTRExN
b2QgbW9kKQogewogICAgIHVpX21lbnVfYWN0aW9uX3QgaSwgcmV0dmFsID0gTUVOVV9BQ1RJ
T05fTk9ORV9SRUxFQVNFOwogCkBAIC01NDksNyArNTMzLDE4IEBACiAgICAgfQogI2VuZGlm
CiAKLSAgICBpZiAoc2RsX3ZrYmRfc3RhdGUgJiBTRExfVktCRF9BQ1RJVkUpIHsKKyAgICBr
ZXlib2FyZF9rZXlfcmVsZWFzZWQoKHVuc2lnbmVkIGxvbmcpa2V5LCBzZGxrYmRfZ2V0X21v
ZGlmaWVyKG1vZCkpOworfQorCit1aV9tZW51X2FjdGlvbl90IHNkbGtiZF9wcmVzc19mb3Jf
bWVudV9hY3Rpb24oU0RMS2V5IGtleSwgU0RMTW9kIG1vZCkKK3sKKyAgICB1aV9tZW51X2Fj
dGlvbl90IGksIHJldHZhbCA9IE1FTlVfQUNUSU9OX05PTkU7CisgICAgdWlfbWVudV9lbnRy
eV90ICpob3RrZXlfYWN0aW9uID0gTlVMTDsKKworI2lmZGVmIFNETF9ERUJVRworICAgIGxv
Z19kZWJ1ZygiJXM6ICVpICglcyksJTA0eCIsIF9fZnVuY19fLCBrZXksIFNETF9HZXRLZXlO
YW1lKGtleSksIG1vZCk7CisjZW5kaWYKKwogICAgICAgICBpZiAoa2V5ICE9IFNETEtfVU5L
Tk9XTikgewogICAgICAgICAgICAgZm9yIChpID0gTUVOVV9BQ1RJT05fVVA7IGkgPCBNRU5V
X0FDVElPTl9OVU07ICsraSkgewogICAgICAgICAgICAgICAgIGlmIChzZGxfdWlfbWVudWtl
eXNbaV0gPT0gKGludClrZXkpIHsKQEAgLTU1NywxMiArNTUyLDMwIEBACiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmICgoaW50KShrZXkpID09IHNkbF91aV9tZW51a2V5c1swXSkgeworICAg
ICAgICAgICAgICAgIHJldHZhbCA9IE1FTlVfQUNUSU9OX0VYSVQ7CisgICAgICAgICAgICB9
CiAgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJldHZhbDsKK30KKwordWlfbWVudV9hY3Rp
b25fdCBzZGxrYmRfcmVsZWFzZV9mb3JfbWVudV9hY3Rpb24oU0RMS2V5IGtleSwgU0RMTW9k
IG1vZCkKK3sKKyAgICB1aV9tZW51X2FjdGlvbl90IGksIHJldHZhbCA9IE1FTlVfQUNUSU9O
X05PTkVfUkVMRUFTRTsKKworI2lmZGVmIFNETF9ERUJVRworICAgIGxvZ19kZWJ1ZygiJXM6
ICVpICglcyksJTA0eCIsIF9fZnVuY19fLCBrZXksIFNETF9HZXRLZXlOYW1lKGtleSksIG1v
ZCk7CisjZW5kaWYKKworICAgICAgICBpZiAoa2V5ICE9IFNETEtfVU5LTk9XTikgeworICAg
ICAgICAgICAgZm9yIChpID0gTUVOVV9BQ1RJT05fVVA7IGkgPCBNRU5VX0FDVElPTl9OVU07
ICsraSkgeworICAgICAgICAgICAgICAgIGlmIChzZGxfdWlfbWVudWtleXNbaV0gPT0gKGlu
dClrZXkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dmFsID0gaTsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9CiAgICAgICAgIHJldHVybiByZXR2YWwgKyBNRU5VX0FDVElPTl9OT05FX1JFTEVB
U0U7Ci0gICAgfQotCi0gICAga2V5Ym9hcmRfa2V5X3JlbGVhc2VkKCh1bnNpZ25lZCBsb25n
KWtleSwgc2Rsa2JkX2dldF9tb2RpZmllcihtb2QpKTsKLSAgICByZXR1cm4gcmV0dmFsOwog
fQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KSW5kZXg6IGRldi92aWNlL3RydW5rL3Ny
Yy9hcmNoL3NkbC9rYmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBkZXYvdmljZS90cnVuay9zcmMv
YXJjaC9zZGwva2JkLmgJKHJldmlzaW9uZSA0MTAxMCkKKysrIGRldi92aWNlL3RydW5rL3Ny
Yy9hcmNoL3NkbC9rYmQuaAkoY29waWEgZGkgbGF2b3JvKQpAQCAtNzYsOCArNzYsMTAgQEAK
IGV4dGVybiBTRExLZXkgU0RMMnhfdG9fU0RMMXhfS2V5cyhTRExLZXkga2V5KTsKIGV4dGVy
biBTRExLZXkgU0RMMXhfdG9fU0RMMnhfS2V5cyhTRExLZXkga2V5KTsKIAotZXh0ZXJuIHVp
X21lbnVfYWN0aW9uX3Qgc2Rsa2JkX3ByZXNzKFNETEtleSBrZXksIFNETE1vZCBtb2QpOwot
ZXh0ZXJuIHVpX21lbnVfYWN0aW9uX3Qgc2Rsa2JkX3JlbGVhc2UoU0RMS2V5IGtleSwgU0RM
TW9kIG1vZCk7CitleHRlcm4gdm9pZCBzZGxrYmRfcHJlc3MoU0RMS2V5IGtleSwgU0RMTW9k
IG1vZCk7CitleHRlcm4gdm9pZCBzZGxrYmRfcmVsZWFzZShTRExLZXkga2V5LCBTRExNb2Qg
bW9kKTsKK3VpX21lbnVfYWN0aW9uX3Qgc2Rsa2JkX3ByZXNzX2Zvcl9tZW51X2FjdGlvbihT
RExLZXkga2V5LCBTRExNb2QgbW9kKTsKK3VpX21lbnVfYWN0aW9uX3Qgc2Rsa2JkX3JlbGVh
c2VfZm9yX21lbnVfYWN0aW9uKFNETEtleSBrZXksIFNETE1vZCBtb2QpOwogCiBleHRlcm4g
dm9pZCBzZGxrYmRfc2V0X2hvdGtleShTRExLZXkga2V5LCBTRExNb2QgbW9kLCB1aV9tZW51
X2VudHJ5X3QgKnZhbHVlKTsKIApJbmRleDogZGV2L3ZpY2UvdHJ1bmsvc3JjL2FyY2gvc2Rs
L21lbnVfc2V0dGluZ3MuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBkZXYvdmljZS90cnVuay9zcmMv
YXJjaC9zZGwvbWVudV9zZXR0aW5ncy5jCShyZXZpc2lvbmUgNDEwMTApCisrKyBkZXYvdmlj
ZS90cnVuay9zcmMvYXJjaC9zZGwvbWVudV9zZXR0aW5ncy5jCShjb3BpYSBkaSBsYXZvcm8p
CkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSAidmljZV9zZGwuaCIKICNpbmNsdWRlIDxz
dGRsaWIuaD4KIAotI2luY2x1ZGUgImpveS5oIgorI2luY2x1ZGUgImpveXN0aWNrLmgiCiAj
aW5jbHVkZSAia2JkLmgiCiAjaW5jbHVkZSAia2V5Ym9hcmQuaCIKICNpbmNsdWRlICJsaWIu
aCIKSW5kZXg6IGRldi92aWNlL3RydW5rL3NyYy9hcmNoL3NkbC91aS5jCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIGRldi92aWNlL3RydW5rL3NyYy9hcmNoL3NkbC91aS5jCShyZXZpc2lvbmUgNDEw
MTApCisrKyBkZXYvdmljZS90cnVuay9zcmMvYXJjaC9zZGwvdWkuYwkoY29waWEgZGkgbGF2
b3JvKQpAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1ZGUgImNvbG9yLmgiCiAjaW5jbHVkZSAi
ZnVsbHNjcmVlbmFyY2guaCIKICNpbmNsdWRlICJqb3kuaCIKKyNpbmNsdWRlICJqb3lzdGlj
ay5oIgogI2luY2x1ZGUgImtiZC5oIgogI2luY2x1ZGUgImtleWJvYXJkLmgiCiAjaW5jbHVk
ZSAibGliLmgiCkBAIC0yMDYsMjY4ICsyMDcsNzIgQEAKICNlbmRpZgogCiAvKiBNYWluIGV2
ZW50IGhhbmRsZXIgKi8KLXVpX21lbnVfYWN0aW9uX3QgdWlfZGlzcGF0Y2hfZXZlbnRzKHZv
aWQpCit2b2lkIHVpX2Rpc3BhdGNoX2V2ZW50cyh2b2lkKQogewogICAgIFNETF9FdmVudCBl
OwotICAgIHVpX21lbnVfYWN0aW9uX3QgcmV0dmFsID0gTUVOVV9BQ1RJT05fTk9ORTsKLQot
I2lmZGVmIEFORFJPSURfQ09NUElMRQotICAgIHN0cnVjdCBsb2NuZXRfYWxfZXZlbnQgZXZl
bnQxOwotCi0gICAgaWYgKGxvYWRlcl9zaG93aW5mbykgewotICAgICAgICBpbnQgdmFsdWUg
PSBsb2FkZXJfc2hvd2luZm87Ci0KLSAgICAgICAgbG9hZGVyX3Nob3dpbmZvID0gMDsKLSAg
ICAgICAgbG9hZGVyX3NldF9zdGF0dXNiYXIoKHZhbHVlID09IDEpID8gMSA6IDApOwotICAg
IH0KLSAgICBpZiAobG9hZGVyX3RydWVfZHJpdmUpIHsKLSAgICAgICAgaW50IHZhbHVlID0g
bG9hZGVyX3RydWVfZHJpdmU7Ci0KLSAgICAgICAgbG9hZGVyX3RydWVfZHJpdmUgPSAwOwot
ICAgICAgICBsb2FkZXJfc2V0X2RyaXZlX3RydWVfZW11bGF0aW9uKCh2YWx1ZSA9PSAxKSA/
IDEgOiAwKTsKLSAgICB9Ci0gICAgaWYgKGxvYWRlcl90dXJibykgewotICAgICAgICBpbnQg
dmFsdWUgPSBsb2FkZXJfdHVyYm87Ci0KLSAgICAgICAgbG9hZGVyX3R1cmJvID0gMDsKLSAg
ICAgICAgbG9hZGVyX3NldF93YXJwbW9kZSgodmFsdWUgPT0gMSkgPyAxIDogMCk7Ci0gICAg
fQotICAgIGlmIChsb2FkZi0+YWJvcnQpIHsKLSAgICAgICAgbG9hZGYtPmFib3J0ID0gMDsK
LSAgICAgICAgdWlfcGF1c2VfZW5hYmxlKCk7Ci0gICAgICAgIHVpX3NkbF9xdWl0KCk7Ci0g
ICAgICAgIHVpX3BhdXNlX2Rpc2FibGUoKTsgLyogZG9lcyB0aGlzIGV2ZW4gZ2V0IGNhbGxl
ZCBhZnRlciB1aV9zZGxfcXVpdCgpPyAqLwotICAgICAgICByZXR1cm4gTUVOVV9BQ1RJT05f
Tk9ORTsKLSAgICB9IGVsc2UgaWYgKGxvYWRlcl9sb2Fkc3RhdGUpIHsKLSAgICAgICAgbG9h
ZGVyX2xvYWRzdGF0ZSA9IDA7Ci0gICAgICAgIGxvYWRlcl9sb2FkX3NuYXBzaG90KHNhdmVz
dGF0ZV9maWxlbmFtZSk7Ci0gICAgICAgIHVpX3BhdXNlX2Rpc2FibGUoKTsKLSAgICAgICAg
cmV0dXJuIE1FTlVfQUNUSU9OX05PTkU7Ci0gICAgfSBlbHNlIGlmIChsb2FkZXJfc2F2ZXN0
YXRlKSB7Ci0gICAgICAgIGxvYWRlcl9zYXZlc3RhdGUgPSAwOwotICAgICAgICBsb2FkZXJf
c2F2ZV9zbmFwc2hvdChzYXZlc3RhdGVfZmlsZW5hbWUpOwotICAgICAgICB1aV9wYXVzZV9k
aXNhYmxlKCk7Ci0gICAgICAgIHJldHVybiBNRU5VX0FDVElPTl9OT05FOwotICAgIH0KLQot
ICAgIGludCBzdG9wUG9sbCA9IDA7Ci0KLSAgICB3aGlsZSAoKCFzdG9wUG9sbCkgJiYgQW5k
cm9pZF9Qb2xsRXZlbnQoJmV2ZW50MSkpIHsKLSAgICAgICAgc3RydWN0IGxvY25ldF9hbF9l
dmVudCAqZXZlbnQgPSAmZXZlbnQxOwotCi0gICAgICAgIHN3aXRjaCAoZXZlbnQtPmV2ZW50
VHlwZSkgewotICAgICAgICAgICAgY2FzZSBTRExfTU9VU0VNT1RJT046Ci0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICAvKiBkZXRlY3QgYXV0byBjYWxpYnJhdGUg
Ki8KLSAgICAgICAgICAgICAgICAgICAgaWYgKChldmVudC0+eCA9PSAtMjA0OCkgJiYgKGV2
ZW50LT55ID09IC0yMDQ4KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZG93bl94ID0g
LTE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkb3duX3kgPSAtMTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIG9sZHggPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgb2xkeSA9
IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdG9wUG9sbCA9IDE7Ci0gICAgICAgICAg
ICAgICAgICAgIC8qIGRldGVjdCBwdXJlIHJlbGF0aXZlIG1vdmUgKi8KLSAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIGlmICgoZXZlbnQtPmRvd25feCA9PSAtMTAyNCkgJiYgKGV2ZW50
LT5kb3duX3kgPT0gLTEwMjQpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkb3duX3gg
PSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgZG93bl95ID0gMDsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIG9sZHggPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgb2xkeSA9
IDA7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKGRvd25feCAhPSBldmVudC0+
ZG93bl94KSB8fCAoZG93bl95ICE9IGV2ZW50LT5kb3duX3kpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBkb3duX3ggPSBldmVudC0+ZG93bl94OwotICAgICAgICAgICAgICAgICAg
ICAgICAgZG93bl95ID0gZXZlbnQtPmRvd25feTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IG9sZHggPSBkb3duX3g7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvbGR5ID0gZG93bl95
OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIG1vdXNlX21v
dmUoKGludCkoZXZlbnQtPnggLSBvbGR4KSwgKGludCkoZXZlbnQtPnkgLSBvbGR5KSk7Ci0g
ICAgICAgICAgICAgICAgICAgIG9sZHggPSBldmVudC0+eDsKLSAgICAgICAgICAgICAgICAg
ICAgb2xkeSA9IGV2ZW50LT55OwotICAgICAgICAgICAgICAgIH0KKyAgICB3aGlsZSAoU0RM
X1BvbGxFdmVudCgmZSkpIHsKKyAgICAgICAgc3dpdGNoIChlLnR5cGUpIHsKKyAgICAgICAg
ICAgIGNhc2UgU0RMX0tFWURPV046CisgICAgICAgICAgICAgICAgdWlfZGlzcGxheV9rYmRf
c3RhdHVzKCZlKTsKKyAgICAgICAgICAgICAgICBzZGxrYmRfcHJlc3MoU0RMMnhfdG9fU0RM
MXhfS2V5cyhlLmtleS5rZXlzeW0uc3ltKSwgZS5rZXkua2V5c3ltLm1vZCk7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFNETF9NT1VTRUJVVFRPTkRPV046
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAoKGV2ZW50LT5k
b3duX3ggPj0gMCkgJiYgKGV2ZW50LT5kb3duX3kgPj0gMCkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIG1vdXNlX3ggPSA2NDAgKiBldmVudC0+ZG93bl94IC8gMTAwMC4wZiAtIDY0
OwotICAgICAgICAgICAgICAgICAgICAgICAgbW91c2VfeSA9IDQwMCAqICgxMDAwIC0gZXZl
bnQtPmRvd25feSkgLyAxMDAwLjBmIC0gMjAwOwotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChldmVudC0+a2V5Y29kZSA+PSAwKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBtb3VzZV9idXR0b24oKGludCkoZXZlbnQtPmtleWNvZGUpID8g
U0RMX0JVVFRPTl9SSUdIVCA6IFNETF9CVVRUT05fTEVGVCwgMSk7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgc3RvcFBvbGwgPSAxOwotICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgU0RMX0tFWVVQOgorICAgICAgICAgICAgICAg
IHVpX2Rpc3BsYXlfa2JkX3N0YXR1cygmZSk7CisgICAgICAgICAgICAgICAgc2Rsa2JkX3Jl
bGVhc2UoU0RMMnhfdG9fU0RMMXhfS2V5cyhlLmtleS5rZXlzeW0uc3ltKSwgZS5rZXkua2V5
c3ltLm1vZCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFNE
TF9NT1VTRUJVVFRPTlVQOgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKGV2ZW50LT5rZXljb2RlID49IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IG1vdXNlX2J1dHRvbigoaW50KShldmVudC0+a2V5Y29kZSkgPyBTRExfQlVUVE9OX1JJR0hU
IDogU0RMX0JVVFRPTl9MRUZULCAwKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICBzdG9wUG9sbCA9IDE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGJyZWFrOworI2lmZGVmIEhBVkVfU0RMX05VTUpPWVNUSUNLUwogICAgICAg
ICAgICAgY2FzZSBTRExfSk9ZQVhJU01PVElPTjoKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIGZsb2F0IHggPSBldmVudC0+eCAvIDI1Ni4wZjsKLSAgICAgICAg
ICAgICAgICAgICAgZmxvYXQgeSA9IGV2ZW50LT55IC8gMjU2LjBmOwotICAgICAgICAgICAg
ICAgICAgICBpbnQgbGVmdCA9IDAsIHRvcCA9IDAsIHJpZ2h0ID0gMCwgYm90ID0gMDsKLSAg
ICAgICAgICAgICAgICAgICAgaW50IHZhbHVlOwotCi0gICAgICAgICAgICAgICAgICAgIGlm
ICh5IDwgLURFQURfWk9ORSkgewotICAgICAgICAgICAgICAgICAgICAgICAgdG9wID0gMTsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoeSA+IERF
QURfWk9ORSkgewotICAgICAgICAgICAgICAgICAgICAgICAgYm90ID0gMTsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoeCA8IC1ERUFEX1pPTkUp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQgPSAxOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmICh4ID4gREVBRF9aT05FKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICByaWdodCA9IDE7Ci0gICAgICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IDA7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgaWYgKGxlZnQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIHw9IDQ7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHJpZ2h0KSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSB8PSA4OwotICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0b3ApIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHZhbHVlIHw9IDE7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgaWYgKGJvdCkgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUg
fD0gMjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICByZXR2
YWwgPSBzZGxqb3lfYXhpc19ldmVudCgwLCAwLCBldmVudC0+eCAvIDI1Ni4wZiAqIDMyNzY3
KTsKLSAgICAgICAgICAgICAgICAgICAgdWlfbWVudV9hY3Rpb25fdCByZXR2YWwyID0gc2Rs
am95X2F4aXNfZXZlbnQoMCwgMSwgZXZlbnQtPnkgLyAyNTYuMGYgKiAzMjc2Nyk7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChyZXR2YWwgPT0gTUVOVV9BQ1RJT05fTk9ORSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dmFsID0gcmV0dmFsMjsKLSAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICBvbGRfam95X2RpcmVjdGlvbiA9IHZhbHVl
OwotICAgICAgICAgICAgICAgICAgICBzdG9wUG9sbCA9IDE7Ci0gICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIHNkbGpveV9heGlzX2V2ZW50KGUuamF4aXMud2hpY2gsIGUu
amF4aXMuYXhpcywgZS5qYXhpcy52YWx1ZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICBjYXNlIFNETF9KT1lCVVRUT05ET1dOOgotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgcmV0dmFsID0gc2Rsam95X2J1dHRvbl9ldmVudCgwLCBl
dmVudC0+a2V5Y29kZSwgMSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgLyogYnVmZmVyIG92
ZXJmbG93IHdoZW4gYXV0b2ZpcmUgaWYgc3RvcFBvbGwgKi8KLSAgICAgICAgICAgICAgICAg
ICAgaWYgKCFBbmRyb2lkX0hhc1JlcGVhdEV2ZW50KFNETF9KT1lCVVRUT05ET1dOLCBldmVu
dC0+a2V5Y29kZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0b3BQb2xsID0gMTsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBqb3lfYnV0dG9uX2V2ZW50KGUuamJ1dHRvbi53aGljaCwgZS5qYnV0dG9uLmJ1dHRv
biwgMSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFNETF9K
T1lCVVRUT05VUDoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHZhbCA9IHNkbGpveV9idXR0b25fZXZlbnQoMCwgZXZlbnQtPmtleWNvZGUsIDApOwotCi0g
ICAgICAgICAgICAgICAgICAgIC8qIGJ1ZmZlciBvdmVyZmxvdyB3aGVuIGF1dG9maXJlIGlm
IHN0b3BQb2xsICovCi0gICAgICAgICAgICAgICAgICAgIGlmICghQW5kcm9pZF9IYXNSZXBl
YXRFdmVudChTRExfSk9ZQlVUVE9OVVAsIGV2ZW50LT5rZXljb2RlKSkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgc3RvcFBvbGwgPSAxOwotICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgam95X2J1dHRvbl9ldmVudChlLmpidXR0b24ud2hpY2gsIGUuamJ1
dHRvbi5idXR0b24sIDApOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Y2FzZSBTRExfSk9ZSEFUTU9USU9OOgorICAgICAgICAgICAgICAgIGpveV9oYXRfZXZlbnQo
ZS5qaGF0LndoaWNoLCBlLmpoYXQuaGF0LCBlLmpoYXQudmFsdWUpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworI2VuZGlmCisgICAgICAgICAgICBjYXNlIFNETF9NT1VTRU1PVElPTjoK
KyAgICAgICAgICAgICAgICBzZGxfdWlfY29uc3VtZV9tb3VzZV9ldmVudCgmZSk7CisgICAg
ICAgICAgICAgICAgaWYgKF9tb3VzZV9lbmFibGVkKSB7CisgICAgICAgICAgICAgICAgICAg
IG1vdXNlX21vdmUoZS5tb3Rpb24ueHJlbCwgZS5tb3Rpb24ueXJlbCk7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBTRExf
S0VZVVA6Ci0gICAgICAgICAgICBjYXNlIFNETF9LRVlET1dOOgotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgc3RhdGljIGludCBjdHJsX2Rvd24gPSAwOwotICAg
ICAgICAgICAgICAgICAgICBzdGF0aWMgaW50IGFsdF9kb3duID0gMDsKLSAgICAgICAgICAg
ICAgICAgICAgc3RhdGljIGludCBzaGlmdF9kb3duID0gMDsKLQotICAgICAgICAgICAgICAg
ICAgICBpbnQgZG93biA9IChldmVudC0+ZXZlbnRUeXBlID09IFNETF9LRVlET1dOKTsKLSAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBtb2RpZmllciA9IGV2ZW50LT5tb2Rp
ZmllcjsKLSAgICAgICAgICAgICAgICAgICAgaW50IGN0cmwgPSAoKG1vZGlmaWVyICYgS0VZ
Qk9BUkRfQ1RSTF9GTEFHKSAhPSAwKTsKLSAgICAgICAgICAgICAgICAgICAgaW50IGFsdCA9
ICgobW9kaWZpZXIgJiBLRVlCT0FSRF9BTFRfRkxBRykgIT0gMCk7Ci0gICAgICAgICAgICAg
ICAgICAgIGludCBzaGlmdCA9ICgobW9kaWZpZXIgJiBLRVlCT0FSRF9TSElGVF9GTEFHKSAh
PSAwKTsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBrY29kZSA9ICh1bnNp
Z25lZCBsb25nKWV2ZW50LT5rZXljb2RlOwotCi0gICAgICAgICAgICAgICAgICAgIGludCBr
bW9kID0gMDsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoY3RybCkgewotICAgICAgICAg
ICAgICAgICAgICAgICAga21vZCB8PSBLTU9EX0xDVFJMOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhbHQpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGttb2QgfD0gS01PRF9MQUxUOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChzaGlmdCkgewotICAgICAgICAgICAgICAgICAgICAgICAg
a21vZCB8PSBLTU9EX0xTSElGVDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICBpZiAoZG93bikgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN0
cmwgfHwgKGtjb2RlID09IFNETEtfVEFCKSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICghY3RybF9kb3duKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGtleWJvYXJkX2tleV9wcmVzc2VkKCh1bnNpZ25lZCBsb25nKVNETEtfVEFCKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y3RybF9kb3duKys7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoYWx0IHx8IChrY29kZSA9PSBTRExLX0xDVFJMKSkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICghYWx0X2Rvd24pIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAga2V5Ym9hcmRfa2V5X3ByZXNzZWQoKHVuc2lnbmVkIGxvbmcp
U0RMS19MQ1RSTCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGFsdF9kb3duKys7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hpZnQgfHwgKGtjb2RlID09IFNE
TEtfTFNISUZUKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2hpZnRf
ZG93bikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlib2FyZF9rZXlf
cHJlc3NlZCgodW5zaWduZWQgbG9uZylTRExLX0xTSElGVCk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoaWZ0X2Rvd24r
KzsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAg
IHVpX2Rpc3BsYXlfa2JkX3N0YXR1cyhldmVudCk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICByZXR2YWwgPSBzZGxrYmRfcHJlc3Moa2NvZGUsIDApOwotICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgdWlfZGlzcGxheV9rYmRfc3Rh
dHVzKGV2ZW50KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHZhbCA9IHNkbGtiZF9y
ZWxlYXNlKGtjb2RlLCAwKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN0cmwg
fHwgKGtjb2RlID09IFNETEtfVEFCKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChrY29kZSA9PSBTRExLX1RBQikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjdHJsX2Rvd24gPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3RybF9kb3duKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGN0cmxfZG93bi0tOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWN0cmxfZG93
bikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlib2FyZF9rZXlfcmVs
ZWFzZWQoKHVuc2lnbmVkIGxvbmcpU0RMS19UQUIpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChhbHQgfHwgKGtjb2RlID09IFNETEtfTENUUkwpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGtjb2RlID09IFNETEtfTENUUkwpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYWx0X2Rvd24gPSAwOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWx0X2Rv
d24pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0X2Rvd24tLTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCFhbHRfZG93bikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBr
ZXlib2FyZF9rZXlfcmVsZWFzZWQoKHVuc2lnbmVkIGxvbmcpU0RMS19MQ1RSTCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNoaWZ0IHx8IChrY29kZSA9PSBTRExLX0xT
SElGVCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoa2NvZGUgPT0gU0RM
S19MU0hJRlQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hpZnRfZG93
biA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChzaGlmdF9kb3duKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNoaWZ0X2Rvd24tLTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzaGlmdF9kb3duKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleWJvYXJkX2tleV9yZWxlYXNlZCgodW5z
aWduZWQgbG9uZylTRExLX0xTSElGVCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgIHN0b3BQb2xsID0gMTsKKyAgICAgICAgICAgIGNhc2UgU0RM
X01PVVNFQlVUVE9ORE9XTjoKKyAgICAgICAgICAgIGNhc2UgU0RMX01PVVNFQlVUVE9OVVA6
CisgICAgICAgICAgICAgICAgaWYgKF9tb3VzZV9lbmFibGVkKSB7CisgICAgICAgICAgICAg
ICAgICAgIG1vdXNlX2J1dHRvbigoaW50KShlLmJ1dHRvbi5idXR0b24pLCAoZS5idXR0b24u
c3RhdGUgPT0gU0RMX1BSRVNTRUQpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIC8q
IFNETF9FdmVudFN0YXRlKFNETF9WSURFT1JFU0laRSwgU0RMX0lHTk9SRSk7ICovCisgICAg
ICAgICAgICAgICAgdWlfaGFuZGxlX21pc2Nfc2RsX2V2ZW50KGUpOworICAgICAgICAgICAg
ICAgIC8qIFNETF9FdmVudFN0YXRlKFNETF9WSURFT1JFU0laRSwgU0RMX0VOQUJMRSk7ICov
CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9Ci0jZWxzZQorfQor
Citqb3lzdGlja19hY3Rpb25fdCB1aV9kaXNwYXRjaF9ldmVudHNfZm9yX21lbnVfYWN0aW9u
KHZvaWQpCit7CisgICAgU0RMX0V2ZW50IGU7CisgICAgdWlfbWVudV9hY3Rpb25fdCByZXR2
YWwgPSBNRU5VX0FDVElPTl9OT05FOworCiAgICAgd2hpbGUgKFNETF9Qb2xsRXZlbnQoJmUp
KSB7CiAgICAgICAgIHN3aXRjaCAoZS50eXBlKSB7CiAgICAgICAgICAgICBjYXNlIFNETF9L
RVlET1dOOgogICAgICAgICAgICAgICAgIHVpX2Rpc3BsYXlfa2JkX3N0YXR1cygmZSk7Ci0g
ICAgICAgICAgICAgICAgcmV0dmFsID0gc2Rsa2JkX3ByZXNzKFNETDJ4X3RvX1NETDF4X0tl
eXMoZS5rZXkua2V5c3ltLnN5bSksIGUua2V5LmtleXN5bS5tb2QpOworICAgICAgICAgICAg
ICAgIHJldHZhbCA9IHNkbGtiZF9wcmVzc19mb3JfbWVudV9hY3Rpb24oU0RMMnhfdG9fU0RM
MXhfS2V5cyhlLmtleS5rZXlzeW0uc3ltKSwgZS5rZXkua2V5c3ltLm1vZCk7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFNETF9LRVlVUDoKICAgICAgICAg
ICAgICAgICB1aV9kaXNwbGF5X2tiZF9zdGF0dXMoJmUpOwotICAgICAgICAgICAgICAgIHJl
dHZhbCA9IHNkbGtiZF9yZWxlYXNlKFNETDJ4X3RvX1NETDF4X0tleXMoZS5rZXkua2V5c3lt
LnN5bSksIGUua2V5LmtleXN5bS5tb2QpOworICAgICAgICAgICAgICAgIHJldHZhbCA9IHNk
bGtiZF9yZWxlYXNlX2Zvcl9tZW51X2FjdGlvbihTREwyeF90b19TREwxeF9LZXlzKGUua2V5
LmtleXN5bS5zeW0pLCBlLmtleS5rZXlzeW0ubW9kKTsKICAgICAgICAgICAgICAgICBicmVh
azsKICNpZmRlZiBIQVZFX1NETF9OVU1KT1lTVElDS1MKICAgICAgICAgICAgIGNhc2UgU0RM
X0pPWUFYSVNNT1RJT046Ci0gICAgICAgICAgICAgICAgcmV0dmFsID0gc2Rsam95X2F4aXNf
ZXZlbnQoZS5qYXhpcy53aGljaCwgZS5qYXhpcy5heGlzLCBlLmpheGlzLnZhbHVlKTsKKyAg
ICAgICAgICAgICAgICByZXR2YWwgPSBzZGxqb3lfYXhpc19ldmVudF9mb3JfbWVudV9hY3Rp
b24oZS5qYXhpcy53aGljaCwgZS5qYXhpcy5heGlzLCBlLmpheGlzLnZhbHVlKTsKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgU0RMX0pPWUJVVFRPTkRPV046
CiAgICAgICAgICAgICAgICAgcmV0dmFsID0gc2Rsam95X2J1dHRvbl9ldmVudChlLmpidXR0
b24ud2hpY2gsIGUuamJ1dHRvbi5idXR0b24sIDEpOwpAQCAtNTAzLDcgKzMwOCw2IEBACiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KLSNlbmRpZgogICAgIHJldHVy
biByZXR2YWw7CiB9CiAKQEAgLTc4Miw3ICs1ODYsNiBAQAogdm9pZCB1aV9yZXNvdXJjZXNf
c2h1dGRvd24odm9pZCkKIHsKICAgICBEQkcoKCIlcyIsIF9fZnVuY19fKSk7Ci0gICAgam95
X2FyY2hfcmVzb3VyY2VzX3NodXRkb3duKCk7CiAgICAgc2Rsa2JkX3Jlc291cmNlc19zaHV0
ZG93bigpOwogfQogCkluZGV4OiBkZXYvdmljZS90cnVuay9zcmMvYXJjaC9zZGwvdWkuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBkZXYvdmljZS90cnVuay9zcmMvYXJjaC9zZGwvdWkuaAkocmV2
aXNpb25lIDQxMDEwKQorKysgZGV2L3ZpY2UvdHJ1bmsvc3JjL2FyY2gvc2RsL3VpLmgJKGNv
cGlhIGRpIGxhdm9ybykKQEAgLTUwLDkgKzUwLDExIEBACiAKIHN0cnVjdCB2aWRlb19jYW52
YXNfczsKIHN0cnVjdCBwYWxldHRlX3M7CitlbnVtIGpveXN0aWNrX2FjdGlvbl9lOwogCiBl
eHRlcm4gdm9pZCB1aV9oYW5kbGVfbWlzY19zZGxfZXZlbnQoU0RMX0V2ZW50IGUpOwotZXh0
ZXJuIHVpX21lbnVfYWN0aW9uX3QgdWlfZGlzcGF0Y2hfZXZlbnRzKHZvaWQpOworZXh0ZXJu
IHZvaWQgdWlfZGlzcGF0Y2hfZXZlbnRzKHZvaWQpOworZXh0ZXJuIGVudW0gam95c3RpY2tf
YWN0aW9uX2UgdWlfZGlzcGF0Y2hfZXZlbnRzX2Zvcl9tZW51X2FjdGlvbih2b2lkKTsKIGV4
dGVybiB2b2lkIHVpX2V4aXQodm9pZCk7CiBleHRlcm4gdm9pZCB1aV9tZXNzYWdlKGNvbnN0
IGNoYXIgKmZvcm1hdCwgLi4uKTsKIGV4dGVybiBjaGFyICp1aV9zZWxlY3RfZmlsZShjb25z
dCBjaGFyICp0aXRsZSwgY2hhciAqKCpyZWFkX2NvbnRlbnRzX2Z1bmMpKGNvbnN0IGNoYXIg
KiwgdW5zaWduZWQgaW50IHVuaXQpLCB1bnNpZ25lZCBpbnQgdW5pdCwKSW5kZXg6IGRldi92
aWNlL3RydW5rL3NyYy9hcmNoL3NkbC91aW1lbnUuYwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBkZXYv
dmljZS90cnVuay9zcmMvYXJjaC9zZGwvdWltZW51LmMJKHJldmlzaW9uZSA0MTAxMCkKKysr
IGRldi92aWNlL3RydW5rL3NyYy9hcmNoL3NkbC91aW1lbnUuYwkoY29waWEgZGkgbGF2b3Jv
KQpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgImludGVycnVwdC5oIgogI2luY2x1ZGUg
ImlvdXRpbC5oIgogI2luY2x1ZGUgImpveS5oIgorI2luY2x1ZGUgImpveXN0aWNrLmgiCiAj
aW5jbHVkZSAia2JkLmgiCiAjaW5jbHVkZSAibGliLmgiCiAjaW5jbHVkZSAibWFjaGluZS5o
IgpAQCAtOTUyLDcgKzk1Myw3IEBACiB7CiAgICAgU0RMX0V2ZW50IGU7CiAgICAgaW50IGdv
dF9rZXkgPSAwOwotICAgIHVpX21lbnVfYWN0aW9uX3QgYWN0aW9uID0gTUVOVV9BQ1RJT05f
Tk9ORTsKKyAgICBqb3lzdGlja19hY3Rpb25fdCBhY3Rpb24gPSBOT05FOwogI2lmZGVmIFVT
RV9TRExVSTIKICAgICBpbnQgaTsKICNlbmRpZgpAQCAtMTA1OSw3ICsxMDYwLDcgQEAKIAog
I2lmZGVmIEhBVkVfU0RMX05VTUpPWVNUSUNLUwogICAgICAgICAgICAgY2FzZSBTRExfSk9Z
QVhJU01PVElPTjoKLSAgICAgICAgICAgICAgICBhY3Rpb24gPSBzZGxqb3lfYXhpc19ldmVu
dChlLmpheGlzLndoaWNoLCBlLmpheGlzLmF4aXMsIGUuamF4aXMudmFsdWUpOworICAgICAg
ICAgICAgICAgIGFjdGlvbiA9IHNkbGpveV9heGlzX2V2ZW50X2Zvcl9tZW51X2FjdGlvbihl
LmpheGlzLndoaWNoLCBlLmpheGlzLmF4aXMsIGUuamF4aXMudmFsdWUpOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBTRExfSk9ZQlVUVE9ORE9XTjoKICAg
ICAgICAgICAgICAgICBhY3Rpb24gPSBzZGxqb3lfYnV0dG9uX2V2ZW50KGUuamJ1dHRvbi53
aGljaCwgZS5qYnV0dG9uLmJ1dHRvbiwgMSk7CkBAIC0xMzc0LDcgKzEzNzUsNyBAQAogCiAg
ICAgZG8gewogICAgICAgICBTRExfRGVsYXkoMjApOwotICAgICAgICByZXR2YWwgPSB1aV9k
aXNwYXRjaF9ldmVudHMoKTsKKyAgICAgICAgcmV0dmFsID0gdWlfZGlzcGF0Y2hfZXZlbnRz
X2Zvcl9tZW51X2FjdGlvbigpOwogI2lmZGVmIEhBVkVfU0RMX05VTUpPWVNUSUNLUwogICAg
ICAgICBpZiAocmV0dmFsID09IE1FTlVfQUNUSU9OX05PTkUgfHwgcmV0dmFsID09IE1FTlVf
QUNUSU9OX05PTkVfUkVMRUFTRSkgewogICAgICAgICAgICAgcmV0dmFsID0gc2Rsam95X2F1
dG9yZXBlYXQoKTsKSW5kZXg6IGRldi92aWNlL3RydW5rL3NyYy9hcmNoL3NkbC92aWRlb19z
ZGwxLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gZGV2L3ZpY2UvdHJ1bmsvc3JjL2FyY2gvc2RsL3Zp
ZGVvX3NkbDEuYwkocmV2aXNpb25lIDQxMDEwKQorKysgZGV2L3ZpY2UvdHJ1bmsvc3JjL2Fy
Y2gvc2RsL3ZpZGVvX3NkbDEuYwkoY29waWEgZGkgbGF2b3JvKQpAQCAtNDAyLDEwICs0MDIs
NiBAQAogewogICAgIERCRygoIiVzIiwgX19mdW5jX18pKTsKIAotICAgIGlmIChtYWNoaW5l
X2NsYXNzID09IFZJQ0VfTUFDSElORV9WU0lEKSB7Ci0gICAgICAgIGpveV9hcmNoX3Jlc291
cmNlc19zaHV0ZG93bigpOwotICAgIH0KLQogI2lmIGRlZmluZWQoSEFWRV9IV1NDQUxFKQog
ICAgIGxpYl9mcmVlKGFzcGVjdF9yYXRpb19zKTsKICNlbmRpZgpJbmRleDogZGV2L3ZpY2Uv
dHJ1bmsvc3JjL2FyY2gvc2RsL3ZpZGVvX3NkbDIuYwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBkZXYv
dmljZS90cnVuay9zcmMvYXJjaC9zZGwvdmlkZW9fc2RsMi5jCShyZXZpc2lvbmUgNDEwMTAp
CisrKyBkZXYvdmljZS90cnVuay9zcmMvYXJjaC9zZGwvdmlkZW9fc2RsMi5jCShjb3BpYSBk
aSBsYXZvcm8pCkBAIC00NDAsMTAgKzQ0MCw2IEBACiB7CiAgICAgREJHKCgiJXMiLCBfX2Z1
bmNfXykpOwogCi0gICAgaWYgKG1hY2hpbmVfY2xhc3MgPT0gVklDRV9NQUNISU5FX1ZTSUQp
IHsKLSAgICAgICAgam95X2FyY2hfcmVzb3VyY2VzX3NodXRkb3duKCk7Ci0gICAgfQotCiAg
ICAgbGliX2ZyZWUoYXNwZWN0X3JhdGlvX3MpOwogICAgIGxpYl9mcmVlKHNkbDJfcmVuZGVy
ZXJfbmFtZSk7CiAgICAgbGliX2ZyZWUoYXNwZWN0X3JhdGlvX2ZhY3RvcnlfdmFsdWVfcyk7
CkluZGV4OiBkZXYvdmljZS90cnVuay9zcmMvYXJjaC9zZGwvdnN5bmNhcmNoLmMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gZGV2L3ZpY2UvdHJ1bmsvc3JjL2FyY2gvc2RsL3ZzeW5jYXJjaC5jCShy
ZXZpc2lvbmUgNDEwMTApCisrKyBkZXYvdmljZS90cnVuay9zcmMvYXJjaC9zZGwvdnN5bmNh
cmNoLmMJKGNvcGlhIGRpIGxhdm9ybykKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJ2
aWNlLmgiCiAKICNpbmNsdWRlICJqb3kuaCIKKyNpbmNsdWRlICJqb3lzdGljay5oIgogI2lu
Y2x1ZGUgImtiZGJ1Zi5oIgogI2luY2x1ZGUgImxpZ2h0cGVuZHJ2LmgiCiAjaW5jbHVkZSAi
bWFjaGluZS5oIgpAQCAtODgsNyArODksNyBAQAogdm9pZCB2c3luY2FyY2hfcHJlc3luYyh2
b2lkKQogewogICAgIGlmIChzZGxfdmtiZF9zdGF0ZSAmIFNETF9WS0JEX0FDVElWRSkgewot
ICAgICAgICB3aGlsZSAoc2RsX3ZrYmRfcHJvY2Vzcyh1aV9kaXNwYXRjaF9ldmVudHMoKSkp
IHsKKyAgICAgICAgd2hpbGUgKHNkbF92a2JkX3Byb2Nlc3ModWlfZGlzcGF0Y2hfZXZlbnRz
X2Zvcl9tZW51X2FjdGlvbigpKSkgewogICAgICAgICB9CiAjaWZkZWYgSEFWRV9TRExfTlVN
Sk9ZU1RJQ0tTCiAgICAgICAgIHNkbF92a2JkX3Byb2Nlc3Moc2Rsam95X2F1dG9yZXBlYXQo
KSk7CkluZGV4OiBkZXYvdmljZS90cnVuay9zcmMvam95cG9ydC9qb3lzdGljay5jCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGRldi92aWNlL3RydW5rL3NyYy9qb3lwb3J0L2pveXN0aWNrLmMJKHJl
dmlzaW9uZSA0MTAxMCkKKysrIGRldi92aWNlL3RydW5rL3NyYy9qb3lwb3J0L2pveXN0aWNr
LmMJKGNvcGlhIGRpIGxhdm9ybykKQEAgLTQ0LDE0ICs0NCwxNyBAQAogI2luY2x1ZGUgImpv
eXN0aWNrLmgiCiAjaW5jbHVkZSAia2JkLmgiCiAjaW5jbHVkZSAibGliLmgiCisjaW5jbHVk
ZSAibG9nLmgiCiAjaW5jbHVkZSAibWFjaGluZS5oIgogI2luY2x1ZGUgIm1haW5jcHUuaCIK
ICNpbmNsdWRlICJuZXR3b3JrLmgiCiAjaW5jbHVkZSAicmVzb3VyY2VzLmgiCiAjaW5jbHVk
ZSAic25hcHNob3QuaCIKKyNpbmNsdWRlICJzeXNmaWxlLmgiCiAjaW5jbHVkZSAidHlwZXMu
aCIKICNpbmNsdWRlICJ1aWFwaS5oIgogI2luY2x1ZGUgInVzZXJwb3J0X2pveXN0aWNrLmgi
CisjaW5jbHVkZSAidXRpbC5oIgogI2luY2x1ZGUgInZpY2UtZXZlbnQuaCIKIAogLyogQ29u
dHJvbCBwb3J0IDwtLT4gSm95c3RpY2sgY29ubmVjdGlvbnM6CkBAIC0xNzEsNiArMTc0LDE4
IEBACiAKIC8qISBcdG9kbyBTUlQ6IG9mZnNldCBpcyB1bnVzZWQhICovCiAKKy8qIEpveXN0
aWNrIG1hcHBpbmcgZmlsZW5hbWUgKi8KK3N0YXRpYyBjaGFyICpqb3ltYXBfZmlsZSA9IE5V
TEw7CisKKy8qKiBcYnJpZWYgIFRlbXBvcmFyeSBjb3B5IG9mIHRoZSBkZWZhdWx0IGpveW1h
cCBmaWxlIG5hbWUKKyAqCisgKiBBdm9pZHMgc2lsbHkgY2FzdGluZyBhd2F5IG9mIGNvbnN0
CisgKi8KK3N0YXRpYyBjaGFyICpqb3ltYXBfZmFjdG9yeSA9IE5VTEw7CisKKworc3RhdGlj
IGxvZ190IGpveV9sb2cgPSBMT0dfRVJSOworCiBzdGF0aWMgdm9pZCBqb3lzdGlja19sYXRj
aF9tYXRyaXgoQ0xPQ0sgb2Zmc2V0KQogewogICAgIHVpbnQ4X3QgaWR4OwpAQCAtODIzLDMx
ICs4MzgsNyBAQAogICAgIHJldHVybiAwOwogfQogCi0vKiBBY3Rpb25zIHRvIHBlcmZvcm0g
b24gam95c3RpY2sgaW5wdXQgKi8KLXR5cGVkZWYgZW51bSB7Ci0gICAgTk9ORSA9IDAsCiAK
LSAgICAvKiBKb3lzdGljayBtb3ZlbWVudCBvciBidXR0b24gcHJlc3MgKi8KLSAgICBKT1lT
VElDSyA9IDEsCi0KLSAgICAvKiBLZXlib2FyZCBrZXkgcHJlc3MgKi8KLSAgICBLRVlCT0FS
RCA9IDIsCi19IGpveXN0aWNrX2FjdGlvbl90OwotCi0KLS8qIElucHV0IG1hcHBpbmcgZm9y
IGVhY2ggZGlyZWN0aW9uL2J1dHRvbi9ldGMgKi8KLXR5cGVkZWYgc3RydWN0IGpveXN0aWNr
X21hcHBpbmdfcyB7Ci0gICAgLyogQWN0aW9uIHRvIHBlcmZvcm0gKi8KLSAgICBqb3lzdGlj
a19hY3Rpb25fdCBhY3Rpb247Ci0KLSAgICB1bmlvbiB7Ci0gICAgICAgIHVpbnQxNl90IGpv
eV9waW47Ci0KLSAgICAgICAgLyoga2V5WzBdID0gcm93LCBrZXlbMV0gPSBjb2x1bW4gKi8K
LSAgICAgICAgaW50IGtleVsyXTsKLSAgICB9IHZhbHVlOwotfSBqb3lzdGlja19tYXBwaW5n
X3Q7Ci0KIHR5cGVkZWYgc3RydWN0IGpveXN0aWNrX2F4aXNfbWFwcGluZ19zIHsKICAgICAv
KiBQcmV2aW91cyBzdGF0ZSBvZiBpbnB1dCAqLwogICAgIHVpbnQ4X3QgcHJldjsKQEAgLTg2
NCw5ICs4NTUsNyBAQAogICAgIHN0cnVjdCBqb3lzdGlja19tYXBwaW5nX3MgcmlnaHQ7CiB9
IGpveXN0aWNrX2hhdF9tYXBwaW5nX3Q7CiAKLSNpZm5kZWYgSEFWRV9TRExfTlVNSk9ZU1RJ
Q0tTCiBzdGF0aWMgaW50IG51bV9qb3lzdGlja19kZXZpY2VzID0gMDsKLSNlbmRpZgogCiAv
KiogXGJyaWVmICBKb3lzdGljayBkZXZpY2UgbmFtZSBsZW5ndGggKGluY2x1ZGluZyAwKQog
ICovCkBAIC04ODEsMTIgKzg3MCwxMyBAQAogICAgIGpveXN0aWNrX2F4aXNfbWFwcGluZ190
ICpheGlzX21hcHBpbmc7CiAgICAgam95c3RpY2tfbWFwcGluZ190ICpidXR0b25fbWFwcGlu
ZzsKICAgICBqb3lzdGlja19oYXRfbWFwcGluZ190ICpoYXRfbWFwcGluZzsKKyAgICBpbnQg
bnVtX2F4ZXM7CisgICAgaW50IG51bV9idXR0b25zOworICAgIGludCBudW1faGF0czsKIH0g
am95c3RpY2tfZGV2aWNlX3Q7CiAKIAotI2lmbmRlZiBIQVZFX1NETF9OVU1KT1lTVElDS1MK
IHN0YXRpYyBzdHJ1Y3Qgam95c3RpY2tfZGV2aWNlX3MgKmpveXN0aWNrX2RldmljZXMgPSBO
VUxMOwotI2VuZGlmCiAKIHN0YXRpYyBpbnQgc2V0X2pveXN0aWNrX2RldmljZShpbnQgdmFs
LCB2b2lkICpwYXJhbSkKIHsKQEAgLTkyMSw2ICs5MTEsMzA5IEBACiAgICAgcmV0dXJuIDA7
CiB9CiAKK2ludCBqb3lfYXJjaF9tYXBwaW5nX2R1bXAoY29uc3QgY2hhciAqZmlsZW5hbWUp
Cit7CisgICAgRklMRSAqZnA7CisgICAgaW50IGksIGs7CisgICAgaW50IGo7CisgICAgam95
c3RpY2tfYWN0aW9uX3QgdDsKKyAgICBjaGFyICpob3RrZXlfcGF0aCA9IE5VTEw7CisKKyNp
ZmRlZiBTRExfREVCVUcKKyAgICBmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLCBfX2Z1bmNfXyk7
CisjZW5kaWYKKworICAgIGlmIChmaWxlbmFtZSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVy
biAtMTsKKyAgICB9CisKKyAgICBmcCA9IGZvcGVuKGZpbGVuYW1lLCBNT0RFX1dSSVRFX1RF
WFQpOworCisgICAgaWYgKGZwID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAg
IH0KKworICAgIGZwcmludGYoZnAsICIjIFZJQ0Ugam95c3RpY2sgbWFwcGluZyBmaWxlXG4i
CisgICAgICAgICAgICAiI1xuIgorICAgICAgICAgICAgIiMgQSBqb3lzdGljayBtYXAgaXMg
cmVhZCBpbiBhcyBwYXRjaCB0byB0aGUgY3VycmVudCBtYXAuXG4iCisgICAgICAgICAgICAi
I1xuIgorICAgICAgICAgICAgIiMgRmlsZSBmb3JtYXQ6XG4iCisgICAgICAgICAgICAiIyAt
IGNvbW1lbnQgbGluZXMgc3RhcnQgd2l0aCAnIydcbiIKKyAgICAgICAgICAgICIjIC0ga2V5
d29yZCBsaW5lcyBzdGFydCB3aXRoICcha2V5d29yZCdcbiIKKyAgICAgICAgICAgICIjIC0g
bm9ybWFsIGxpbmUgaGFzICdqb3ludW0gaW5wdXR0eXBlIGlucHV0aW5kZXggYWN0aW9uJ1xu
IgorICAgICAgICAgICAgIiNcbiIKKyAgICAgICAgICAgICIjIEtleXdvcmRzIGFuZCB0aGVp
ciBsaW5lcyBhcmU6XG4iCisgICAgICAgICAgICAiIyAnIUNMRUFSJyAgICBjbGVhciBhbGwg
bWFwcGluZ3NcbiIKKyAgICAgICAgICAgICIjXG4iCisgICAgICAgICAgICApOworCisgICAg
ZnByaW50ZihmcCwgIiMgaW5wdXR0eXBlOlxuIgorICAgICAgICAgICAgIiMgMCAgICAgIGF4
aXNcbiIKKyAgICAgICAgICAgICIjIDEgICAgICBidXR0b25cbiIKKyAgICAgICAgICAgICIj
IDIgICAgICBoYXRcbiIKKyAgICAgICAgICAgICIjXG4iCisgICAgICAgICAgICAiIyBOb3Rl
IHRoYXQgZWFjaCBheGlzIGhhcyAyIGlucHV0aW5kZXggZW50cmllcyBhbmQgZWFjaCBoYXQg
aGFzIDQuXG4iCisgICAgICAgICAgICAiI1xuIgorICAgICAgICAgICAgIiMgYWN0aW9uIFth
Y3Rpb25fcGFyYW1ldGVyc106XG4iCisgICAgICAgICAgICAiIyAwICAgICAgICAgICAgICAg
bm9uZVxuIgorICAgICAgICAgICAgIiMgMSBwb3J0IHBpbiAgICAgIGpveXN0aWNrIChwaW46
IDEvMi80LzgvMTYvMzIvNjQgPSB1L2QvbC9yL2ZpcmUvZmlyZTIvZmlyZTMpXG4iCisgICAg
ICAgICAgICAiIyAyIHJvdyBjb2wgICAgICAga2V5Ym9hcmRcbiIKKyAgICAgICAgICAgICIj
IDMgICAgICAgICAgICAgICBtYXBcbiIKKyAgICAgICAgICAgICIjIDQgICAgICAgICAgICAg
ICBVSSBhY3RpdmF0ZVxuIgorICAgICAgICAgICAgIiMgNSBwYXRoJnRvJml0ZW0gIFVJIGZ1
bmN0aW9uXG4iCisgICAgICAgICAgICAiI1xuXG4iCisgICAgICAgICAgICApOworCisgICAg
ZnByaW50ZihmcCwgIiFDTEVBUlxuXG4iKTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBudW1f
am95c3RpY2tfZGV2aWNlczsgKytpKSB7CisgICAgICAgIGsgPSAwOworICAgICAgICBmcHJp
bnRmKGZwLCAiIyAlc1xuIiwgam95c3RpY2tfZGV2aWNlc1tpXS5qbmFtZSk7CisgICAgICAg
IGZvciAoaiA9IDA7IGogPCBqb3lzdGlja19kZXZpY2VzW2ldLm51bV9heGVzOyBqKyspIHsK
KyAgICAgICAgICAgIHQgPSBqb3lzdGlja19kZXZpY2VzW2ldLmF4aXNfbWFwcGluZ1tqXS5w
b3NpdGl2ZV9kaXJlY3Rpb24uYWN0aW9uOworICAgICAgICAgICAgZnByaW50ZihmcCwgIiVp
ICV1ICVpICV1IiwgaSwgMCwgaysrLCB0KTsKKyAgICAgICAgICAgIHN3aXRjaCAodCkgewor
ICAgICAgICAgICAgICAgIGNhc2UgSk9ZU1RJQ0s6CisgICAgICAgICAgICAgICAgICAgIGZw
cmludGYoZnAsICIgJWkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpveXN0aWNr
X2RldmljZXNbaV0uYXhpc19tYXBwaW5nW2pdLnBvc2l0aXZlX2RpcmVjdGlvbi52YWx1ZS5q
b3lfcGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBLRVlCT0FSRDoKKyAgICAgICAg
ICAgICAgICAgICAgZnByaW50ZihmcCwgIiAlaSAlaSIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgam95c3RpY2tfZGV2aWNlc1tpXS5heGlzX21hcHBpbmdbal0ucG9zaXRpdmVf
ZGlyZWN0aW9uLnZhbHVlLmtleVswXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBq
b3lzdGlja19kZXZpY2VzW2ldLmF4aXNfbWFwcGluZ1tqXS5wb3NpdGl2ZV9kaXJlY3Rpb24u
dmFsdWUua2V5WzFdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgLypjYXNlIFVJX0ZVTkNUSU9O
OgorICAgICAgICAgICAgICAgICAgICBob3RrZXlfcGF0aCA9IHNkbF91aV9ob3RrZXlfcGF0
aChzZGxqb3lzdGlja1tpXS5pbnB1dFtqXVtrXS52YWx1ZS51aV9mdW5jdGlvbik7CisgICAg
ICAgICAgICAgICAgICAgIGZwcmludGYoZnAsICIgJXMiLCBob3RrZXlfcGF0aCk7CisgICAg
ICAgICAgICAgICAgICAgIGxpYl9mcmVlKGhvdGtleV9wYXRoKTsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ki8KKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZwcmludGYoZnAs
ICJcbiIpOworICAgICAgICAgICAgdCA9IGpveXN0aWNrX2RldmljZXNbaV0uYXhpc19tYXBw
aW5nW2pdLm5lZ2F0aXZlX2RpcmVjdGlvbi5hY3Rpb247CisgICAgICAgICAgICBmcHJpbnRm
KGZwLCAiJWkgJXUgJWkgJXUiLCBpLCAwLCBrKyssIHQpOworICAgICAgICAgICAgc3dpdGNo
ICh0KSB7CisgICAgICAgICAgICAgICAgY2FzZSBKT1lTVElDSzoKKyAgICAgICAgICAgICAg
ICAgICAgZnByaW50ZihmcCwgIiAlaSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
am95c3RpY2tfZGV2aWNlc1tpXS5heGlzX21hcHBpbmdbal0ubmVnYXRpdmVfZGlyZWN0aW9u
LnZhbHVlLmpveV9waW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEtFWUJPQVJEOgor
ICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKGZwLCAiICVpICVpIiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBqb3lzdGlja19kZXZpY2VzW2ldLmF4aXNfbWFwcGluZ1tqXS5u
ZWdhdGl2ZV9kaXJlY3Rpb24udmFsdWUua2V5WzBdLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGpveXN0aWNrX2RldmljZXNbaV0uYXhpc19tYXBwaW5nW2pdLm5lZ2F0aXZlX2Rp
cmVjdGlvbi52YWx1ZS5rZXlbMV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAvKmNhc2UgVUlf
RlVOQ1RJT046CisgICAgICAgICAgICAgICAgICAgIGhvdGtleV9wYXRoID0gc2RsX3VpX2hv
dGtleV9wYXRoKHNkbGpveXN0aWNrW2ldLmlucHV0W2pdW2tdLnZhbHVlLnVpX2Z1bmN0aW9u
KTsKKyAgICAgICAgICAgICAgICAgICAgZnByaW50ZihmcCwgIiAlcyIsIGhvdGtleV9wYXRo
KTsKKyAgICAgICAgICAgICAgICAgICAgbGliX2ZyZWUoaG90a2V5X3BhdGgpOworICAgICAg
ICAgICAgICAgICAgICBicmVhazsqLworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZnBy
aW50ZihmcCwgIlxuIik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZwcmludGYoZnAs
ICJcbiIpOworICAgICAgICB9CisgICAgICAgIGZwcmludGYoZnAsICJcblxuIik7CisgICAg
fQorCisgICAgZmNsb3NlKGZwKTsKKworICAgIHJldHVybiAwOworfQorCisKK3N0YXRpYyB2
b2lkIGpveV9hcmNoX2tleXdvcmRfY2xlYXIodm9pZCkKK3sKKyAgICBpbnQgaSwgazsKKwor
ICAgIGZvciAoaSA9IDA7IGkgPCBudW1fam95c3RpY2tfZGV2aWNlczsgKytpKSB7CisgICAg
ICAgIGZvciAoayA9IDA7IGsgPCBqb3lzdGlja19kZXZpY2VzW2ldLm51bV9heGVzOyArK2sp
IHsKKyAgICAgICAgICAgIGpveXN0aWNrX2RldmljZXNbaV0uYXhpc19tYXBwaW5nW2tdLnBv
c2l0aXZlX2RpcmVjdGlvbi5hY3Rpb24gPSBOT05FOworICAgICAgICAgICAgam95c3RpY2tf
ZGV2aWNlc1tpXS5heGlzX21hcHBpbmdba10ubmVnYXRpdmVfZGlyZWN0aW9uLmFjdGlvbiA9
IE5PTkU7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChrID0gMDsgayA8IGpveXN0aWNrX2Rl
dmljZXNbaV0ubnVtX2J1dHRvbnM7ICsraykgeworICAgICAgICAgICAgam95c3RpY2tfZGV2
aWNlc1tpXS5idXR0b25fbWFwcGluZ1trXS5hY3Rpb24gPSBOT05FOworICAgICAgICB9Cisg
ICAgICAgIGZvciAoayA9IDA7IGsgPCBqb3lzdGlja19kZXZpY2VzW2ldLm51bV9oYXRzOyAr
K2spIHsKKyAgICAgICAgICAgIGpveXN0aWNrX2RldmljZXNbaV0uaGF0X21hcHBpbmdba10u
dXAuYWN0aW9uID0gTk9ORTsKKyAgICAgICAgICAgIGpveXN0aWNrX2RldmljZXNbaV0uaGF0
X21hcHBpbmdba10uZG93bi5hY3Rpb24gPSBOT05FOworICAgICAgICAgICAgam95c3RpY2tf
ZGV2aWNlc1tpXS5oYXRfbWFwcGluZ1trXS5sZWZ0LmFjdGlvbiA9IE5PTkU7CisgICAgICAg
ICAgICBqb3lzdGlja19kZXZpY2VzW2ldLmhhdF9tYXBwaW5nW2tdLnJpZ2h0LmFjdGlvbiA9
IE5PTkU7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGpveV9hcmNoX3Bh
cnNlX2tleXdvcmQoY2hhciAqYnVmZmVyKQoreworICAgIGNoYXIgKmtleTsKKworICAgIGtl
eSA9IHN0cnRvayhidWZmZXIgKyAxLCAiIFx0OiIpOworCisgICAgaWYgKCFzdHJjbXAoa2V5
LCAiQ0xFQVIiKSkgeworICAgICAgICBqb3lfYXJjaF9rZXl3b3JkX2NsZWFyKCk7CisgICAg
fQorfQorCitzdGF0aWMgdm9pZCBqb3lfYXJjaF9wYXJzZV9lbnRyeShjaGFyICpidWZmZXIp
Cit7CisgICAgY2hhciAqcDsKKyAgICBpbnQgam95bnVtLCBpbnB1dGluZGV4LCBkYXRhMSA9
IDAsIGRhdGEyID0gMDsKKyAgICBpbnQgaW5wdXR0eXBlOworICAgIGpveXN0aWNrX2FjdGlv
bl90IGFjdGlvbjsKKyAgICBpbnQgYXhpc19vcl9oYXRfaW5kZXgsIGRpcmVjdGlvbjsKKwor
ICAgIHAgPSBzdHJ0b2soYnVmZmVyLCAiIFx0OiIpOworCisgICAgam95bnVtID0gYXRvaShw
KTsKKworICAgIGlmIChqb3ludW0gPj0gbnVtX2pveXN0aWNrX2RldmljZXMpIHsKKyAgICAg
ICAgbG9nX2Vycm9yKGpveV9sb2csICJDb3VsZCBub3QgZmluZCBqb3lzdGljayAlaSEiLCBq
b3ludW0pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgcCA9IHN0cnRvayhOVUxM
LCAiIFx0LCIpOworICAgIGlmIChwICE9IE5VTEwpIHsKKyAgICAgICAgaW5wdXR0eXBlID0g
YXRvaShwKTsKKyAgICAgICAgcCA9IHN0cnRvayhOVUxMLCAiIFx0LCIpOworICAgICAgICBp
ZiAocCAhPSBOVUxMKSB7CisgICAgICAgICAgICBpbnB1dGluZGV4ID0gYXRvaShwKTsKKyAg
ICAgICAgICAgIHAgPSBzdHJ0b2soTlVMTCwgIiBcdCIpOworICAgICAgICAgICAgaWYgKHAg
IT0gTlVMTCkgeworICAgICAgICAgICAgICAgIGFjdGlvbiA9IChqb3lzdGlja19hY3Rpb25f
dClhdG9pKHApOworCisgICAgICAgICAgICAgICAgc3dpdGNoIChhY3Rpb24pIHsKKyAgICAg
ICAgICAgICAgICAgICAgY2FzZSBKT1lTVElDSzoKKyAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBQT1RfQVhJUzoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBLRVlCT0FSRDoKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHAgPSBzdHJ0b2soTlVMTCwgIiBcdCIpOworICAgICAgICAg
ICAgICAgICAgICAgICAgZGF0YTEgPSBhdG9pKHApOworICAgICAgICAgICAgICAgICAgICAg
ICAgcCA9IHN0cnRvayhOVUxMLCAiIFx0Iik7CisgICAgICAgICAgICAgICAgICAgICAgICBk
YXRhMiA9IGF0b2kocCk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHN3aXRjaCAoaW5wdXR0
eXBlKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGF4aXNfb3JfaGF0X2luZGV4ID0gaW5wdXRpbmRleCAvIDI7CisgICAgICAgICAg
ICAgICAgICAgICAgICBkaXJlY3Rpb24gPSBpbnB1dGluZGV4ICUgMjsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChheGlzX29yX2hhdF9pbmRleCA8IGpveXN0aWNrX2RldmljZXNb
am95bnVtXS5udW1fYXhlcykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChk
aXJlY3Rpb24gPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqb3lz
dGlja19kZXZpY2VzW2pveW51bV0uYXhpc19tYXBwaW5nW2F4aXNfb3JfaGF0X2luZGV4XS5w
b3NpdGl2ZV9kaXJlY3Rpb24uYWN0aW9uID0gYWN0aW9uOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzd2l0Y2ggKGFjdGlvbikgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2FzZSBKT1lTVElDSzoKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBqb3lzdGlja19kZXZpY2VzW2pveW51bV0uYXhpc19tYXBwaW5n
W2F4aXNfb3JfaGF0X2luZGV4XS5wb3NpdGl2ZV9kaXJlY3Rpb24udmFsdWUuam95X3BpbiA9
IGRhdGExOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBQT1RfQVhJUzoK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqb3lzdGlja19kZXZp
Y2VzW2pveW51bV0uYXhpc19tYXBwaW5nW2F4aXNfb3JfaGF0X2luZGV4XS5wb3NpdGl2ZV9k
aXJlY3Rpb24udmFsdWUuam95X3BpbiA9IGRhdGExOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2FzZSBLRVlCT0FSRDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBqb3lzdGlja19kZXZpY2VzW2pveW51bV0uYXhpc19tYXBwaW5nW2F4aXNf
b3JfaGF0X2luZGV4XS5wb3NpdGl2ZV9kaXJlY3Rpb24udmFsdWUua2V5WzBdID0gZGF0YTE7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgam95c3RpY2tfZGV2
aWNlc1tqb3ludW1dLmF4aXNfbWFwcGluZ1theGlzX29yX2hhdF9pbmRleF0ucG9zaXRpdmVf
ZGlyZWN0aW9uLnZhbHVlLmtleVsxXSA9IGRhdGEyOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGpveXN0aWNrX2RldmljZXNbam95bnVtXS5heGlzX21hcHBpbmdbYXhpc19v
cl9oYXRfaW5kZXhdLm5lZ2F0aXZlX2RpcmVjdGlvbi5hY3Rpb24gPSBhY3Rpb247CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoYWN0aW9uKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEpPWVNUSUNLOgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpveXN0aWNrX2RldmljZXNbam95bnVt
XS5heGlzX21hcHBpbmdbYXhpc19vcl9oYXRfaW5kZXhdLm5lZ2F0aXZlX2RpcmVjdGlvbi52
YWx1ZS5qb3lfcGluID0gZGF0YTE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
YXNlIFBPVF9BWElTOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGpveXN0aWNrX2RldmljZXNbam95bnVtXS5heGlzX21hcHBpbmdbYXhpc19vcl9oYXRfaW5k
ZXhdLm5lZ2F0aXZlX2RpcmVjdGlvbi52YWx1ZS5qb3lfcGluID0gZGF0YTE7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEtFWUJPQVJEOgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGpveXN0aWNrX2RldmljZXNbam95bnVtXS5heGlz
X21hcHBpbmdbYXhpc19vcl9oYXRfaW5kZXhdLm5lZ2F0aXZlX2RpcmVjdGlvbi52YWx1ZS5r
ZXlbMF0gPSBkYXRhMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBqb3lzdGlja19kZXZpY2VzW2pveW51bV0uYXhpc19tYXBwaW5nW2F4aXNfb3JfaGF0X2lu
ZGV4XS5uZWdhdGl2ZV9kaXJlY3Rpb24udmFsdWUua2V5WzFdID0gZGF0YTI7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dfd2Fy
bmluZyhqb3lfbG9nLCAiaW5wdXRpbmRleCAlaSB0b28gbGFyZ2UgZm9yIGlucHV0dHlwZSAl
dSwgam95bnVtICVpISIsIGlucHV0aW5kZXgsIGlucHV0dHlwZSwgam95bnVtKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9Cit9CisKK2ludCBqb3lfYXJjaF9tYXBwaW5nX2xvYWQoY29u
c3QgY2hhciAqZmlsZW5hbWUpCit7CisgICAgRklMRSAqZnA7CisgICAgY2hhciAqY29tcGxl
dGVfcGF0aDsKKyAgICBjaGFyIGJ1ZmZlclsxMDAwXTsKKworICAgIC8qIFNpbGVudGx5IGln
bm9yZSBrZXltYXAgbG9hZCBvbiByZXNvdXJjZSAmIGNtZGxpbmUgaW5pdCAqLworICAgIGlm
IChqb3lzdGlja19kZXZpY2VzID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQorCisgICAgaWYgKGZpbGVuYW1lID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIC0xOwor
ICAgIH0KKworICAgIGZwID0gc3lzZmlsZV9vcGVuKGZpbGVuYW1lLCBOVUxMLCAmY29tcGxl
dGVfcGF0aCwgTU9ERV9SRUFEX1RFWFQpOworCisgICAgaWYgKGZwID09IE5VTEwpIHsKKyAg
ICAgICAgbG9nX3dhcm5pbmcoam95X2xvZywgIkZhaWxlZCB0byBvcGVuIGAlcycuIiwgZmls
ZW5hbWUpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgbG9nX21lc3NhZ2Uo
am95X2xvZywgIkxvYWRpbmcgam95c3RpY2sgbWFwIGAlcycuIiwgY29tcGxldGVfcGF0aCk7
CisKKyAgICBsaWJfZnJlZShjb21wbGV0ZV9wYXRoKTsKKworICAgIGRvIHsKKyAgICAgICAg
YnVmZmVyWzBdID0gMDsKKyAgICAgICAgaWYgKGZnZXRzKGJ1ZmZlciwgOTk5LCBmcCkpIHsK
KyAgICAgICAgICAgIGNoYXIgKnA7CisKKyAgICAgICAgICAgIGlmIChzdHJsZW4oYnVmZmVy
KSA9PSAwKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGJ1ZmZlcltzdHJsZW4oYnVmZmVyKSAtIDFdID0gMDsgLyogcmVtb3ZlIG5l
d2xpbmUgKi8KKworICAgICAgICAgICAgLyogcmVtb3ZlIGNvbW1lbnRzICovCisgICAgICAg
ICAgICBpZiAoKHAgPSBzdHJjaHIoYnVmZmVyLCAnIycpKSkgeworICAgICAgICAgICAgICAg
ICpwID0gMDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogcmVtb3ZlIHdoaXRl
c3BhY2UgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgbGluZSAqLworICAgICAgICAgICAgcCA9
IGJ1ZmZlcjsKKyAgICAgICAgICAgIHdoaWxlICgoKCpwID09ICcgJykgfHwgKCpwID09ICdc
dCcpKSAmJiAoKnAgIT0gMCkpIHsKKyAgICAgICAgICAgICAgICArK3A7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAoKnApIHsKKyAgICAgICAgICAgICAgICBjYXNl
IDA6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2Ug
JyEnOgorICAgICAgICAgICAgICAgICAgICAvKiBrZXl3b3JkIGhhbmRsaW5nICovCisgICAg
ICAgICAgICAgICAgICAgIGpveV9hcmNoX3BhcnNlX2tleXdvcmQocCk7CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgICAgIC8qIHRhYmxlIGVudHJ5IGhhbmRsaW5nICovCisgICAgICAgICAgICAgICAg
ICAgIGpveV9hcmNoX3BhcnNlX2VudHJ5KHApOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gd2hpbGUgKCFmZW9mKGZwKSk7
CisgICAgZmNsb3NlKGZwKTsKKworICAgIHJldHVybiAwOworfQorCiBzdGF0aWMgaW50IHNl
dF9qb3lzdGlja19hdXRvZmlyZShpbnQgdmFsLCB2b2lkICpwYXJhbSkKIHsKICAgICBpbnQg
cG9ydF9pZHggPSB2aWNlX3B0cl90b19pbnQocGFyYW0pOwpAQCAtOTUyLDYgKzEyNDUsMTUg
QEAKICAgICByZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBqb3ltYXBfZmlsZV9zZXQoY29u
c3QgY2hhciAqdmFsLCB2b2lkICpwYXJhbSkKK3sKKyAgICBpZiAodXRpbF9zdHJpbmdfc2V0
KCZqb3ltYXBfZmlsZSwgdmFsKSkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAg
ICByZXR1cm4gam95X2FyY2hfbWFwcGluZ19sb2FkKGpveW1hcF9maWxlKTsKK30KKwogc3Rh
dGljIGNvbnN0IHJlc291cmNlX2ludF90IGpveW9wcG9zaXRlX3Jlc291cmNlc19pbnRbXSA9
IHsKICAgICB7ICJKb3lPcHBvc2l0ZSIsIDAsIFJFU19FVkVOVF9OTywgTlVMTCwKICAgICAg
ICZqb3lzdGlja19vcHBvc2l0ZV9lbmFibGUsIHNldF9qb3lzdGlja19vcHBvc2l0ZV9lbmFi
bGUsIE5VTEwgfSwKQEAgLTEwNzgsNiArMTM4MCwxMyBAQAogICAgIFJFU09VUkNFX0lOVF9M
SVNUX0VORAogfTsKIAorc3RhdGljIHJlc291cmNlX3N0cmluZ190IHJlc291cmNlc19zdHJp
bmdbXSA9IHsKKyAgICB7ICJKb3lNYXBGaWxlIiwgTlVMTCwgUkVTX0VWRU5UX05PLCBOVUxM
LAorICAgICAgJmpveW1hcF9maWxlLCBqb3ltYXBfZmlsZV9zZXQsICh2b2lkICopMCB9LAor
ICAgIFJFU09VUkNFX1NUUklOR19MSVNUX0VORAorfTsKKworCiAvKiogXGJyaWVmICBJbml0
aWFsaXplIGpveXN0aWNrIHJlc291cmNlcwogICoKICAqIFxyZXR1cm4gIDAgb24gc3VjY2Vz
cywgLTEgb24gZmFpbHVyZQpAQCAtMTE3Niw3ICsxNDg1LDEzIEBACiAgICAgICAgICAgICBy
ZXR1cm4gLTE7CiAgICAgICAgIH0KICAgICB9CisgICAgam95bWFwX2ZhY3RvcnkgPSBhcmNo
ZGVwX2RlZmF1bHRfam95bWFwX2ZpbGVfbmFtZSgpOworICAgIHJlc291cmNlc19zdHJpbmdb
MF0uZmFjdG9yeV92YWx1ZSA9IGpveW1hcF9mYWN0b3J5OwogCisgICAgaWYgKHJlc291cmNl
c19yZWdpc3Rlcl9zdHJpbmcocmVzb3VyY2VzX3N0cmluZykgPCAwKSB7CisgICAgICAgIHJl
dHVybiAtMTsKKyAgICB9CisKICNpZmRlZiBIQVZFX1NETF9OVU1KT1lTVElDS1MKICAgICBy
ZXR1cm4gam95X3NkbF9yZXNvdXJjZXNfaW5pdCgpOwogI2Vsc2UKQEAgLTE1OTksNiArMTkx
NCw4IEBACiAgICAgfQogI2VuZGlmCiAKKyAgICBqb3lfYXJjaF9tYXBwaW5nX2xvYWQoam95
bWFwX2ZpbGUpOworCiAgICAgcmV0dXJuIDE7CiB9CiAKQEAgLTE2NTUsNyArMTk3Miw2IEBA
CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotI2lmbmRlZiBIQVZFX1NETF9OVU1K
T1lTVElDS1MKIHZvaWQgcmVnaXN0ZXJfam95c3RpY2tfZHJpdmVyKAogICAgIHN0cnVjdCBq
b3lzdGlja19kcml2ZXJfcyAqZHJpdmVyLAogICAgIGNvbnN0IGNoYXIgKmpuYW1lLApAQCAt
MTY5OSw2ICsyMDE1LDkgQEAKICAgICBuZXdfam95c3RpY2tfZGV2aWNlLT5oYXRfbWFwcGlu
ZyA9IChqb3lzdGlja19oYXRfbWFwcGluZ190ICopbGliX2NhbGxvYyhudW1faGF0cywgc2l6
ZW9mKGpveXN0aWNrX2hhdF9tYXBwaW5nX3QpKTsKICAgICBuZXdfam95c3RpY2tfZGV2aWNl
LT5qb3lwb3J0ID0gLTE7CiAgICAgbmV3X2pveXN0aWNrX2RldmljZS0+cHJpdiA9IHByaXY7
CisgICAgbmV3X2pveXN0aWNrX2RldmljZS0+bnVtX2F4ZXMgPSBudW1fYXhlczsKKyAgICBu
ZXdfam95c3RpY2tfZGV2aWNlLT5udW1fYnV0dG9ucyA9IG51bV9idXR0b25zOworICAgIG5l
d19qb3lzdGlja19kZXZpY2UtPm51bV9oYXRzID0gbnVtX2hhdHM7CiB9CiAKIHN0YXRpYyB2
b2lkIGpveV9wZXJmb3JtX2V2ZW50KGpveXN0aWNrX21hcHBpbmdfdCAqZXZlbnQsIGludCBq
b3lwb3J0LCBpbnQgdmFsdWUpCkBAIC0xODA0LDYgKzIxMjMsNDkgQEAKICAgICBqb3lzdGlj
a19kZXZpY2VzW2pveW51bV0uaGF0X21hcHBpbmdbaGF0XS5wcmV2ID0gdmFsdWU7CiB9CiAK
KyNpZmRlZiBIQVZFX1NETF9OVU1KT1lTVElDS1MKK2pveXN0aWNrX2F4aXNfdmFsdWVfdCBq
b3lfYXhpc19wcmV2KHVpbnQ4X3Qgam95bnVtLCB1aW50OF90IGF4aXMpIHsKKyAgICByZXR1
cm4gam95c3RpY2tfZGV2aWNlc1tqb3ludW1dLmF4aXNfbWFwcGluZ1theGlzXS5wcmV2Owor
fQorCitqb3lzdGlja19tYXBwaW5nX3QqIGpveV9nZXRfYXhpc19tYXBwaW5nKHVpbnQ4X3Qg
am95bnVtLCB1aW50OF90IGF4aXMsIGpveXN0aWNrX2F4aXNfdmFsdWVfdCB2YWx1ZSkgewor
ICAgIGpveXN0aWNrX2RldmljZXNbam95bnVtXS5heGlzX21hcHBpbmdbYXhpc10ucHJldiA9
IHZhbHVlOworICAgIGlmICh2YWx1ZSA9PSBKT1lfQVhJU19QT1NJVElWRSkgeworICAgICAg
ICByZXR1cm4gJmpveXN0aWNrX2RldmljZXNbam95bnVtXS5heGlzX21hcHBpbmdbYXhpc10u
cG9zaXRpdmVfZGlyZWN0aW9uOworICAgIH0KKyAgICBpZiAodmFsdWUgPT0gSk9ZX0FYSVNf
TkVHQVRJVkUpIHsKKyAgICAgICAgcmV0dXJuICZqb3lzdGlja19kZXZpY2VzW2pveW51bV0u
YXhpc19tYXBwaW5nW2F4aXNdLm5lZ2F0aXZlX2RpcmVjdGlvbjsKKyAgICB9CisgICAgcmV0
dXJuIE5VTEw7Cit9CisKK2pveXN0aWNrX21hcHBpbmdfdCogam95X2dldF9idXR0b25fbWFw
cGluZyh1aW50OF90IGpveW51bSwgdWludDhfdCBidXR0b24pIHsKKyAgICByZXR1cm4gJmpv
eXN0aWNrX2RldmljZXNbam95bnVtXS5idXR0b25fbWFwcGluZ1tidXR0b25dOworfQorCitq
b3lzdGlja19heGlzX3ZhbHVlX3Qgam95X2hhdF9wcmV2KHVpbnQ4X3Qgam95bnVtLCB1aW50
OF90IGhhdCkgeworICAgIHJldHVybiBqb3lzdGlja19kZXZpY2VzW2pveW51bV0uaGF0X21h
cHBpbmdbaGF0XS5wcmV2OworfQorCitqb3lzdGlja19tYXBwaW5nX3QqIGpveV9nZXRfaGF0
X21hcHBpbmcodWludDhfdCBqb3ludW0sIHVpbnQ4X3QgaGF0LCB1aW50OF90IHZhbHVlKSB7
CisgICAgdWludDhfdCBwcmV2ID0gam95c3RpY2tfZGV2aWNlc1tqb3ludW1dLmhhdF9tYXBw
aW5nW2hhdF0ucHJldjsKKyAgICBqb3lzdGlja19tYXBwaW5nX3QqIG1hcHBpbmcgPSBOVUxM
OworICAgIGlmICgodmFsdWUgJiBKT1lTVElDS19ESVJFQ1RJT05fVVApICYmICEocHJldiAm
IEpPWVNUSUNLX0RJUkVDVElPTl9VUCkpIHsKKyAgICAgICAgbWFwcGluZyA9ICZqb3lzdGlj
a19kZXZpY2VzW2pveW51bV0uaGF0X21hcHBpbmdbaGF0XS51cDsKKyAgICB9IGVsc2UgaWYg
KCh2YWx1ZSAmIEpPWVNUSUNLX0RJUkVDVElPTl9ET1dOKSAmJiAhKHByZXYgJiBKT1lTVElD
S19ESVJFQ1RJT05fRE9XTikpIHsKKyAgICAgICAgbWFwcGluZyA9ICZqb3lzdGlja19kZXZp
Y2VzW2pveW51bV0uaGF0X21hcHBpbmdbaGF0XS5kb3duOworICAgIH0KKyAgICBpZiAoKHZh
bHVlICYgSk9ZU1RJQ0tfRElSRUNUSU9OX0xFRlQpICYmICEocHJldiAmIEpPWVNUSUNLX0RJ
UkVDVElPTl9MRUZUKSkgeworICAgICAgICBtYXBwaW5nID0gJmpveXN0aWNrX2RldmljZXNb
am95bnVtXS5oYXRfbWFwcGluZ1toYXRdLmxlZnQ7CisgICAgfSBlbHNlIGlmICgodmFsdWUg
JiBKT1lTVElDS19ESVJFQ1RJT05fUklHSFQpICYmICEocHJldiAmIEpPWVNUSUNLX0RJUkVD
VElPTl9SSUdIVCkpIHsKKyAgICAgICAgbWFwcGluZyA9ICZqb3lzdGlja19kZXZpY2VzW2pv
eW51bV0uaGF0X21hcHBpbmdbaGF0XS5yaWdodDsKKyAgICB9CisKKyAgICBqb3lzdGlja19k
ZXZpY2VzW2pveW51bV0uaGF0X21hcHBpbmdbaGF0XS5wcmV2ID0gdmFsdWU7CisgICAgcmV0
dXJuIG1hcHBpbmc7Cit9CisjZW5kaWYKKwogc3RhdGljIGludCBqb3lzdGlja2RldmljZWlk
eCA9IDA7CiAKIHZvaWQgam95c3RpY2tfdWlfcmVzZXRfZGV2aWNlX2xpc3Qodm9pZCkKQEAg
LTE4NDAsNiArMjIwMiwxMyBAQAogICAgIH0KIAogICAgIGxpYl9mcmVlKGpveXN0aWNrX2Rl
dmljZXMpOworICAgIGlmIChqb3ltYXBfZmFjdG9yeSkgeworICAgICAgICBsaWJfZnJlZShq
b3ltYXBfZmFjdG9yeSk7CisgICAgICAgIGpveW1hcF9mYWN0b3J5ID0gTlVMTDsKKyAgICB9
CisgICAgaWYgKGpveW1hcF9maWxlKSB7CisgICAgICAgIGxpYl9mcmVlKGpveW1hcF9maWxl
KTsKKyAgICAgICAgam95bWFwX2ZpbGUgPSBOVUxMOworICAgIH0KIH0KLSNlbmRpZgogCklu
ZGV4OiBkZXYvdmljZS90cnVuay9zcmMvam95cG9ydC9qb3lzdGljay5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIGRldi92aWNlL3RydW5rL3NyYy9qb3lwb3J0L2pveXN0aWNrLmgJKHJldmlzaW9u
ZSA0MTAxMCkKKysrIGRldi92aWNlL3RydW5rL3NyYy9qb3lwb3J0L2pveXN0aWNrLmgJKGNv
cGlhIGRpIGxhdm9ybykKQEAgLTMwLDYgKzMwLDkgQEAKIAogI2luY2x1ZGUgInR5cGVzLmgi
CiAjaW5jbHVkZSAiam95cG9ydC5oIiAvKiBmb3IgSk9ZUE9SVF9NQVhfUE9SVFMgKi8KKyNp
ZiAoZGVmaW5lZCBVU0VfU0RMVUkgfHxkZWZpbmVkIFVTRV9TRExVSTIpCisjaW5jbHVkZSAi
dWltZW51LmgiCisjZW5kaWYKIAogZXh0ZXJuIGludCBqb3lzdGlja19pbml0KHZvaWQpOwog
ZXh0ZXJuIGludCBqb3lzdGlja19yZXNvdXJjZXNfaW5pdCh2b2lkKTsKQEAgLTE0Miw2ICsx
NDUsNDYgQEAKICAgIEpPWV9BWElTX05FR0FUSVZFCiB9IGpveXN0aWNrX2F4aXNfdmFsdWVf
dDsKIAorLyogQWN0aW9ucyB0byBwZXJmb3JtIG9uIGpveXN0aWNrIGlucHV0ICovCit0eXBl
ZGVmIGVudW0gam95c3RpY2tfYWN0aW9uX2UgeworICAgIE5PTkUgPSAwLAorCisgICAgLyog
Sm95c3RpY2sgbW92ZW1lbnQgb3IgYnV0dG9uIHByZXNzICovCisgICAgSk9ZU1RJQ0sgPSAx
LAorCisgICAgLyogS2V5Ym9hcmQga2V5IHByZXNzICovCisgICAgS0VZQk9BUkQgPSAyLAor
CisgICAgLyogTWFwIGJ1dHRvbiAqLworICAgIE1BUCA9IDMsCisKKyAgICAvKiAoRGUpQWN0
aXZhdGUgVUkgKi8KKyAgICBVSV9BQ1RJVkFURSA9IDQsCisKKyAgICAvKiBDYWxsIFVJIGZ1
bmN0aW9uICovCisgICAgVUlfRlVOQ1RJT04gPSA1LAorCisgICAgLyogSm95c3RpY2sgYXhp
cyB1c2VkIGZvciBwb3RlbnRpb21ldGVycyAqLworICAgIFBPVF9BWElTID0gNgorfSBqb3lz
dGlja19hY3Rpb25fdDsKKworLyogSW5wdXQgbWFwcGluZyBmb3IgZWFjaCBkaXJlY3Rpb24v
YnV0dG9uL2V0YyAqLwordHlwZWRlZiBzdHJ1Y3Qgam95c3RpY2tfbWFwcGluZ19zIHsKKyAg
ICAvKiBBY3Rpb24gdG8gcGVyZm9ybSAqLworICAgIGpveXN0aWNrX2FjdGlvbl90IGFjdGlv
bjsKKworICAgIHVuaW9uIHsKKyAgICAgICAgdWludDE2X3Qgam95X3BpbjsKKworICAgICAg
ICAvKiBrZXlbMF0gPSByb3csIGtleVsxXSA9IGNvbHVtbiAqLworICAgICAgICBpbnQga2V5
WzJdOworI2lmIChkZWZpbmVkIFVTRV9TRExVSSB8fGRlZmluZWQgVVNFX1NETFVJMikKKyAg
ICAgICAgLyogcG9pbnRlciB0byB0aGUgbWVudSBpdGVtICovCisgICAgICAgIHVpX21lbnVf
ZW50cnlfdCAqdWlfZnVuY3Rpb247CisjZW5kaWYKKyAgICB9IHZhbHVlOworfSBqb3lzdGlj
a19tYXBwaW5nX3Q7CisKIGV4dGVybiB2b2lkIGpveV9heGlzX2V2ZW50KHVpbnQ4X3Qgam95
bnVtLCB1aW50OF90IGF4aXMsIGpveXN0aWNrX2F4aXNfdmFsdWVfdCB2YWx1ZSk7CiBleHRl
cm4gdm9pZCBqb3lfYnV0dG9uX2V2ZW50KHVpbnQ4X3Qgam95bnVtLCB1aW50OF90IGJ1dHRv
biwgdWludDhfdCB2YWx1ZSk7CiBleHRlcm4gdm9pZCBqb3lfaGF0X2V2ZW50KHVpbnQ4X3Qg
am95bnVtLCB1aW50OF90IGJ1dHRvbiwgdWludDhfdCB2YWx1ZSk7CkBAIC0xNDksNiArMTky
LDEzIEBACiBleHRlcm4gdm9pZCBqb3lzdGlja19jbG9zZSh2b2lkKTsKIGV4dGVybiB2b2lk
IGpveXN0aWNrX3VpX3Jlc2V0X2RldmljZV9saXN0KHZvaWQpOwogZXh0ZXJuIGNvbnN0IGNo
YXIgKmpveXN0aWNrX3VpX2dldF9uZXh0X2RldmljZV9uYW1lKGludCAqaWQpOworZXh0ZXJu
IGludCBqb3lfYXJjaF9tYXBwaW5nX2R1bXAoY29uc3QgY2hhciAqZmlsZW5hbWUpOworZXh0
ZXJuIGludCBqb3lfYXJjaF9tYXBwaW5nX2xvYWQoY29uc3QgY2hhciAqZmlsZW5hbWUpOwor
ZXh0ZXJuIGpveXN0aWNrX2F4aXNfdmFsdWVfdCBqb3lfYXhpc19wcmV2KHVpbnQ4X3Qgam95
bnVtLCB1aW50OF90IGF4aXMpOworZXh0ZXJuIGpveXN0aWNrX21hcHBpbmdfdCogam95X2dl
dF9heGlzX21hcHBpbmcodWludDhfdCBqb3ludW0sIHVpbnQ4X3QgYXhpcywgam95c3RpY2tf
YXhpc192YWx1ZV90IHZhbHVlKTsKK2V4dGVybiBqb3lzdGlja19tYXBwaW5nX3QqIGpveV9n
ZXRfYnV0dG9uX21hcHBpbmcodWludDhfdCBqb3ludW0sIHVpbnQ4X3QgYnV0dG9uKTsKK2V4
dGVybiBqb3lzdGlja19heGlzX3ZhbHVlX3Qgam95X2hhdF9wcmV2KHVpbnQ4X3Qgam95bnVt
LCB1aW50OF90IGhhdCk7CitleHRlcm4gam95c3RpY2tfbWFwcGluZ190KiBqb3lfZ2V0X2hh
dF9tYXBwaW5nKHVpbnQ4X3Qgam95bnVtLCB1aW50OF90IGhhdCwgdWludDhfdCB2YWx1ZSk7
CiAKICNkZWZpbmUgSk9ZU1RJQ0tfRElSRUNUSU9OX0RPV04gIDEKICNkZWZpbmUgSk9ZU1RJ
Q0tfRElSRUNUSU9OX1VQICAgIDIK
--------------Yqr0mpG3jWAt1LeK400iiCgv
Content-Type: text/x-patch; charset=UTF-8; name="sdlunif2.patch"
Content-Disposition: attachment; filename="sdlunif2.patch"
Content-Transfer-Encoding: base64

SW5kZXg6IGRldi92aWNlL3RydW5rL3NyYy9hcmNoL3NkbC9qb3kuYwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBkZXYvdmljZS90cnVuay9zcmMvYXJjaC9zZGwvam95LmMJKHJldmlzaW9uZSA0MTM0
OCkKKysrIGRldi92aWNlL3RydW5rL3NyYy9hcmNoL3NkbC9qb3kuYwkoY29waWEgZGkgbGF2
b3JvKQpAQCAtNjQsMTEgKzY0LDggQEAKIHN0YXRpYyB1aV9tZW51X2FjdGlvbl90IGF1dG9y
ZXBlYXQ7CiBzdGF0aWMgaW50IGF1dG9yZXBlYXRfZGVsYXk7CiAKLS8qIEpveXN0aWNrIG1h
cHBpbmcgZmlsZW5hbWUgKi8KLXN0YXRpYyBjaGFyICpqb3ltYXBfZmlsZSA9IE5VTEw7Ci0K
IC8qIFRvdGFsIG51bWJlciBvZiBqb3lzdGlja3MgKi8KLXN0YXRpYyBpbnQgbnVtX2pveXN0
aWNrcyA9IDA7CitzdGF0aWMgaW50IG51bV9qb3lzdGlja3M7CiAKIC8qIEpveXN0aWNrIHRo
cmVzaG9sZCAoMC4uMzI3NjcpICovCiBzdGF0aWMgaW50IGpveXN0aWNrX3RocmVzaG9sZDsK
QEAgLTc2LDkxICs3Myw3IEBACiAvKiBKb3lzdGljayBmdXp6ICgwLi4zMjc2NykgKi8KIHN0
YXRpYyBpbnQgam95c3RpY2tfZnV6ejsKIAotLyogRGlmZmVyZW50IHR5cGVzIG9mIGpveXN0
aWNrIGlucHV0ICovCi10eXBlZGVmIGVudW0gewotICAgIEFYSVMgPSAwLAotICAgIEJVVFRP
TiA9IDEsCi0gICAgSEFUID0gMiwKLSAgICBCQUxMID0gMywKLSAgICBOVU1fSU5QVVRfVFlQ
RVMKLX0gc2Rsam95c3RpY2tfaW5wdXRfdDsKIAotLyogTnVtYmVyIG9mIGFjdGlvbnMgcGVy
IGlucHV0IHNvdXJjZSAqLwotc3RhdGljIGNvbnN0IGludCBpbnB1dF9tdWx0W05VTV9JTlBV
VF9UWVBFU10gPSB7Ci0gICAgMiwgLyogQXhpczogYWN0aW9ucyBmb3IgcG9zaXRpdmUgYW5k
IG5lZ2F0aXZlICovCi0gICAgMSwgLyogQnV0dG9uICovCi0gICAgNCwgLyogSGF0OiBhY3Rp
b25zIGZvciBhbGwgNCBkaXJlY3Rpb25zICovCi0gICAgMSAgLyogQmFsbCAqLwotfTsKLQot
LyogQWN0aW9ucyB0byBwZXJmb3JtIG9uIGpveXN0aWNrIGlucHV0ICovCi10eXBlZGVmIGVu
dW0gewotICAgIE5PTkUgPSAwLAotCi0gICAgLyogSm95c3RpY2sgbW92ZW1lbnQgb3IgYnV0
dG9uIHByZXNzICovCi0gICAgSk9ZU1RJQ0sgPSAxLAotCi0gICAgLyogS2V5Ym9hcmQga2V5
IHByZXNzICovCi0gICAgS0VZQk9BUkQgPSAyLAotCi0gICAgLyogTWFwIGJ1dHRvbiAqLwot
ICAgIE1BUCA9IDMsCi0KLSAgICAvKiAoRGUpQWN0aXZhdGUgVUkgKi8KLSAgICBVSV9BQ1RJ
VkFURSA9IDQsCi0KLSAgICAvKiBDYWxsIFVJIGZ1bmN0aW9uICovCi0gICAgVUlfRlVOQ1RJ
T04gPSA1LAotCi0gICAgLyogSm95c3RpY2sgYXhpcyB1c2VkIGZvciBwb3RlbnRpb21ldGVy
cyAqLwotICAgIFBPVF9BWElTID0gNgotfSBzZGxqb3lzdGlja19hY3Rpb25fdDsKLQotLyog
SW5wdXQgbWFwcGluZyBmb3IgZWFjaCBkaXJlY3Rpb24vYnV0dG9uL2V0YyAqLwotc3RydWN0
IHNkbGpveXN0aWNrX21hcHBpbmdfcyB7Ci0gICAgLyogQWN0aW9uIHRvIHBlcmZvcm0gKi8K
LSAgICBzZGxqb3lzdGlja19hY3Rpb25fdCBhY3Rpb247Ci0KLSAgICAvKiBQcmV2aW91cyBz
dGF0ZSBvZiBpbnB1dCAqLwotICAgIHVpbnQ4X3QgcHJldjsKLQotICAgIHVuaW9uIHsKLSAg
ICAgICAgLyogam95WzBdID0gcG9ydCBudW1iZXIgKDAsMSksIGpveVsxXSA9IHBpbiBudW1i
ZXIgKi8KLSAgICAgICAgdWludDE2X3Qgam95WzJdOwotCi0gICAgICAgIC8qIGF4aXNbMF0g
PSBwb3J0IG51bWJlciAoMCwxKSwgYXhpc1sxXSA9IHBvdCBudW1iZXIgKHg9MC95PTEpICov
Ci0gICAgICAgIHVpbnQxNl90IGF4aXNbMl07Ci0KLSAgICAgICAgLyoga2V5WzBdID0gcm93
LCBrZXlbMV0gPSBjb2x1bW4gKi8KLSAgICAgICAgaW50IGtleVsyXTsKLQotICAgICAgICAv
KiBwb2ludGVyIHRvIHRoZSBtZW51IGl0ZW0gKi8KLSAgICAgICAgdWlfbWVudV9lbnRyeV90
ICp1aV9mdW5jdGlvbjsKLSAgICB9IHZhbHVlOwotfTsKLXR5cGVkZWYgc3RydWN0IHNkbGpv
eXN0aWNrX21hcHBpbmdfcyBzZGxqb3lzdGlja19tYXBwaW5nX3Q7Ci0KLSNpZm5kZWYgVVNF
X1NETFVJMgotdHlwZWRlZiBpbnQgU0RMX0pveXN0aWNrSUQ7Ci0jZW5kaWYKLQotc3RydWN0
IHNkbGpveXN0aWNrX3MgewotICAgIFNETF9Kb3lzdGljayAqam95cHRyOwotICAgIGNoYXIg
Km5hbWU7Ci0gICAgaW50IGlucHV0X21heFtOVU1fSU5QVVRfVFlQRVNdOwotICAgIHNkbGpv
eXN0aWNrX21hcHBpbmdfdCAqaW5wdXRbTlVNX0lOUFVUX1RZUEVTXTsKLSAgICBTRExfSm95
c3RpY2tJRCBqb3lzdGlja2lkOwotfTsKLXR5cGVkZWYgc3RydWN0IHNkbGpveXN0aWNrX3Mg
c2Rsam95c3RpY2tfdDsKLQotc3RhdGljIHNkbGpveXN0aWNrX3QgKnNkbGpveXN0aWNrID0g
TlVMTDsKLQotLyoqIFxicmllZiAgVGVtcG9yYXJ5IGNvcHkgb2YgdGhlIGRlZmF1bHQgam95
bWFwIGZpbGUgbmFtZQotICoKLSAqIEF2b2lkcyBzaWxseSBjYXN0aW5nIGF3YXkgb2YgY29u
c3QKLSAqLwotc3RhdGljIGNoYXIgKmpveW1hcF9mYWN0b3J5ID0gTlVMTDsKLQogLyogam95
c3RpY2sgYXhpcyBtYXBwaW5nIGZvciBwb3QteC95LAogICAgaGlnaCBieXRlIGlzIHRoZSBq
b3lzdGljayBuciwKICAgIGxvdyBieXRlIGlzIHRoZSBheGlzIG5yLApAQCAtMTk5LDIxICsx
MTIsNiBAQAogICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGpveW1hcF9maWxlX3Nl
dChjb25zdCBjaGFyICp2YWwsIHZvaWQgKnBhcmFtKQotewotICAgIGlmICh1dGlsX3N0cmlu
Z19zZXQoJmpveW1hcF9maWxlLCB2YWwpKSB7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0K
LQotICAgIHJldHVybiBqb3lfYXJjaF9tYXBwaW5nX2xvYWQoam95bWFwX2ZpbGUpOwotfQot
Ci1zdGF0aWMgcmVzb3VyY2Vfc3RyaW5nX3QgcmVzb3VyY2VzX3N0cmluZ1tdID0gewotICAg
IHsgIkpveU1hcEZpbGUiLCBOVUxMLCBSRVNfRVZFTlRfTk8sIE5VTEwsCi0gICAgICAmam95
bWFwX2ZpbGUsIGpveW1hcF9maWxlX3NldCwgKHZvaWQgKikwIH0sCi0gICAgUkVTT1VSQ0Vf
U1RSSU5HX0xJU1RfRU5ECi19OwotCiBzdGF0aWMgY29uc3QgcmVzb3VyY2VfaW50X3QgcmVz
b3VyY2VzX2ludFtdID0gewogICAgIHsgIkpveVRocmVzaG9sZCIsIERFRkFVTFRfSk9ZU1RJ
Q0tfVEhSRVNIT0xELCBSRVNfRVZFTlRfTk8sIE5VTEwsCiAgICAgICAmam95c3RpY2tfdGhy
ZXNob2xkLCBzZXRfam95c3RpY2tfdGhyZXNob2xkLCBOVUxMIH0sCkBAIC0yOTIsMTIgKzE5
MCw2IEBACiAgICAgfQogCiAjaWZkZWYgSEFWRV9TRExfTlVNSk9ZU1RJQ0tTCi0gICAgam95
bWFwX2ZhY3RvcnkgPSBhcmNoZGVwX2RlZmF1bHRfam95bWFwX2ZpbGVfbmFtZSgpOwotICAg
IHJlc291cmNlc19zdHJpbmdbMF0uZmFjdG9yeV92YWx1ZSA9IGpveW1hcF9mYWN0b3J5Owot
Ci0gICAgaWYgKHJlc291cmNlc19yZWdpc3Rlcl9zdHJpbmcocmVzb3VyY2VzX3N0cmluZykg
PCAwKSB7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9CiAgICAgaWYgKHJlc291cmNlc19y
ZWdpc3Rlcl9pbnQocmVzb3VyY2VzX2ludCkgPCAwKSB7CiAgICAgICAgIHJldHVybiAtMTsK
ICAgICB9CkBAIC0zMDYsMjAgKzE5OCw2IEBACiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQg
am95X2FyY2hfcmVzb3VyY2VzX3NodXRkb3duKHZvaWQpCi17Ci0jaWZkZWYgSEFWRV9TRExf
TlVNSk9ZU1RJQ0tTCi0gICAgaWYgKGpveW1hcF9mYWN0b3J5KSB7Ci0gICAgICAgIGxpYl9m
cmVlKGpveW1hcF9mYWN0b3J5KTsKLSAgICAgICAgam95bWFwX2ZhY3RvcnkgPSBOVUxMOwot
ICAgIH0KLSAgICBpZiAoam95bWFwX2ZpbGUpIHsKLSAgICAgICAgbGliX2ZyZWUoam95bWFw
X2ZpbGUpOwotICAgICAgICBqb3ltYXBfZmlsZSA9IE5VTEw7Ci0gICAgfQotI2VuZGlmCi19
Ci0KIGludCBqb3lfc2RsX2NtZGxpbmVfb3B0aW9uc19pbml0KHZvaWQpCiB7CiAjaWZkZWYg
SEFWRV9TRExfTlVNSk9ZU1RJQ0tTCkBAIC0zNjMsNiArMjQxLDE3IEBACiAKIC8qIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0gKi8KIAorc3RhdGljIHZvaWQgc2RsX2pveXN0aWNrX3BvbGwoaW50
IGpveXBvcnQsIHZvaWQqIGpveXN0aWNrKSB7fQorc3RhdGljIHZvaWQgc2RsX2pveXN0aWNr
X2Nsb3NlKHZvaWQqIGpveXN0aWNrKQoreworICAgIFNETF9Kb3lzdGlja0Nsb3NlKGpveXN0
aWNrKTsKK30KKworc3RhdGljIGpveXN0aWNrX2RyaXZlcl90IHNkbF9qb3lzdGlja19kcml2
ZXIgPSB7CisgICAgLnBvbGwgPSBzZGxfam95c3RpY2tfcG9sbCwKKyAgICAuY2xvc2UgPSBz
ZGxfam95c3RpY2tfY2xvc2UKK307CisKICNpZmRlZiBIQVZFX1NETF9OVU1KT1lTVElDS1MK
IAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioKQEAgLTM3MCw2ICsyNTksMTAgQEAKICAqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogaW50IGpveV9zZGxfaW5p
dCh2b2lkKQogeworICAgIGludCBpLCBheGlzLCBidXR0b24sIGhhdCwgYmFsbDsKKyAgICBT
RExfSm95c3RpY2sgKmpveTsKKyAgICBjaGFyICpuYW1lOworCiAgICAgc2Rsam95X2xvZyA9
IGxvZ19vcGVuKCJTRExKb3lzdGljayIpOwogCiAgICAgaWYgKFNETF9Jbml0U3ViU3lzdGVt
KFNETF9JTklUX0pPWVNUSUNLKSkgewpAQCAtMzc2LDY1NiArMjY5LDUzIEBACiAgICAgICAg
IGxvZ19lcnJvcihzZGxqb3lfbG9nLCAiU3Vic3lzdGVtIGluaXQgZmFpbGVkISIpOwogICAg
ICAgICByZXR1cm4gLTE7CiAgICAgfQotICAgIAotICAgIHNkbGpveV9yZXNjYW4oKTsKIAot
ICAgIHJldHVybiAwOwotfQotCi1pbnQgc2Rsam95X3Jlc2Nhbih2b2lkKQotewotICAgIGlu
dCBpLCBrLCBheGlzLCBidXR0b24sIGhhdCwgYmFsbDsKLSAgICBzZGxqb3lzdGlja19pbnB1
dF90IGo7Ci0gICAgU0RMX0pveXN0aWNrICpqb3k7Ci0gICAgc2Rsam95c3RpY2tfdCAqc2Rs
am95c3RpY2tfb2xkID0gc2Rsam95c3RpY2s7Ci0gICAgaW50IG51bV9qb3lzdGlja3Nfb2xk
ID0gbnVtX2pveXN0aWNrczsKLQotICAgIFNETF9Kb3lzdGlja0V2ZW50U3RhdGUoU0RMX0RJ
U0FCTEUpOwotCi0gICAgLyogY2xvc2UgYWxsIGpveXN0aWNrcyAqLwotICAgIGZvciAoaSA9
IDA7IGkgPCBudW1fam95c3RpY2tzOyArK2kpIHsKLSAgICAgICAgaWYgKHNkbGpveXN0aWNr
W2ldLmpveXB0cikgewotI2lmZGVmIFVTRV9TRExVSTIKLSAgICAgICAgICAgIGlmIChTRExf
Sm95c3RpY2tHZXRBdHRhY2hlZChzZGxqb3lzdGlja1tpXS5qb3lwdHIpKSB7Ci0gICAgICAg
ICAgICAgICAgU0RMX0pveXN0aWNrQ2xvc2Uoc2Rsam95c3RpY2tbaV0uam95cHRyKTsKLSAg
ICAgICAgICAgIH0KLSNlbHNlCi0gICAgICAgICAgICBTRExfSm95c3RpY2tDbG9zZShzZGxq
b3lzdGlja1tpXS5qb3lwdHIpOwotI2VuZGlmCi0gICAgICAgIH0KLSAgICB9Ci0KICAgICBu
dW1fam95c3RpY2tzID0gU0RMX051bUpveXN0aWNrcygpOwogCiAgICAgaWYgKG51bV9qb3lz
dGlja3MgPT0gMCkgewogICAgICAgICBsb2dfbWVzc2FnZShzZGxqb3lfbG9nLCAiTm8gam95
c3RpY2tzIGZvdW5kIik7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBudW1fam95c3RpY2tz
X29sZDsgKytpKSB7Ci0gICAgICAgICAgICBsaWJfZnJlZShzZGxqb3lzdGlja1tpXS5uYW1l
KTsKLSAgICAgICAgICAgIHNkbGpveXN0aWNrW2ldLm5hbWUgPSBOVUxMOwotCi0gICAgICAg
ICAgICBmb3IgKGogPSBBWElTOyBqIDwgTlVNX0lOUFVUX1RZUEVTOyArK2opIHsKLSAgICAg
ICAgICAgICAgICBsaWJfZnJlZShzZGxqb3lzdGlja1tpXS5pbnB1dFtqXSk7Ci0gICAgICAg
ICAgICAgICAgc2Rsam95c3RpY2tbaV0uaW5wdXRbal0gPSBOVUxMOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgICAgIGxpYl9mcmVlKHNkbGpveXN0aWNrKTsKLSAgICAgICAg
c2Rsam95c3RpY2sgPSBOVUxMOwotICAgICAgICBTRExfSm95c3RpY2tFdmVudFN0YXRlKFNE
TF9FTkFCTEUpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAgICAgIAorCiAgICAg
bG9nX21lc3NhZ2Uoc2Rsam95X2xvZywgIiVpIGpveXN0aWNrcyBmb3VuZCIsIG51bV9qb3lz
dGlja3MpOwogCi0gICAgc2Rsam95c3RpY2sgPSBsaWJfbWFsbG9jKHNpemVvZihzZGxqb3lz
dGlja190KSAqIG51bV9qb3lzdGlja3MpOwotCiAgICAgZm9yIChpID0gMDsgaSA8IG51bV9q
b3lzdGlja3M7ICsraSkgewotICAgICAgICBqb3kgPSBzZGxqb3lzdGlja1tpXS5qb3lwdHIg
PSBTRExfSm95c3RpY2tPcGVuKGkpOworICAgICAgICBqb3kgPSBTRExfSm95c3RpY2tPcGVu
KGkpOwogICAgICAgICBpZiAoam95KSB7Ci0jaWZkZWYgVVNFX1NETFVJMgotICAgICAgICAg
ICAgc2Rsam95c3RpY2tbaV0ubmFtZSA9IGxpYl9zdHJkdXAoU0RMX0pveXN0aWNrTmFtZShz
ZGxqb3lzdGlja1tpXS5qb3lwdHIpKTsKLSAgICAgICAgICAgIHNkbGpveXN0aWNrW2ldLmpv
eXN0aWNraWQgPSBTRExfSm95c3RpY2tJbnN0YW5jZUlEKGpveSk7CisjaWZuZGVmIFVTRV9T
RExVSTIKKyAgICAgICAgICAgIG5hbWUgPSBsaWJfc3RyZHVwKFNETF9Kb3lzdGlja05hbWUo
aSkpOwogI2Vsc2UKLSAgICAgICAgICAgIHNkbGpveXN0aWNrW2ldLm5hbWUgPSBsaWJfc3Ry
ZHVwKFNETF9Kb3lzdGlja05hbWUoaSkpOwotICAgICAgICAgICAgc2Rsam95c3RpY2tbaV0u
am95c3RpY2tpZCA9IFNETF9Kb3lzdGlja0luZGV4KGpveSk7CisgICAgICAgICAgICBuYW1l
ID0gbGliX3N0cmR1cChTRExfSm95c3RpY2tOYW1lKGpveSkpOwogI2VuZGlmCi0gICAgICAg
ICAgICBheGlzID0gc2Rsam95c3RpY2tbaV0uaW5wdXRfbWF4W0FYSVNdID0gU0RMX0pveXN0
aWNrTnVtQXhlcyhqb3kpOwotICAgICAgICAgICAgYnV0dG9uID0gc2Rsam95c3RpY2tbaV0u
aW5wdXRfbWF4W0JVVFRPTl0gPSBTRExfSm95c3RpY2tOdW1CdXR0b25zKGpveSk7Ci0gICAg
ICAgICAgICBoYXQgPSBzZGxqb3lzdGlja1tpXS5pbnB1dF9tYXhbSEFUXSA9IFNETF9Kb3lz
dGlja051bUhhdHMoam95KTsKLSAgICAgICAgICAgIGJhbGwgPSBzZGxqb3lzdGlja1tpXS5p
bnB1dF9tYXhbQkFMTF0gPSBTRExfSm95c3RpY2tOdW1CYWxscyhqb3kpOworICAgICAgICAg
ICAgYXhpcyA9IFNETF9Kb3lzdGlja051bUF4ZXMoam95KTsKKyAgICAgICAgICAgIGJ1dHRv
biA9IFNETF9Kb3lzdGlja051bUJ1dHRvbnMoam95KTsKKyAgICAgICAgICAgIGhhdCA9IFNE
TF9Kb3lzdGlja051bUhhdHMoam95KTsKKyAgICAgICAgICAgIGJhbGwgPSBTRExfSm95c3Rp
Y2tOdW1CYWxscyhqb3kpOwogCi0gICAgICAgICAgICBmb3IgKGogPSBBWElTOyBqIDwgTlVN
X0lOUFVUX1RZUEVTOyArK2opIHsKLSAgICAgICAgICAgICAgICBpZiAoc2Rsam95c3RpY2tb
aV0uaW5wdXRfbWF4W2pdID4gMCkgewotICAgICAgICAgICAgICAgICAgICBzZGxqb3lzdGlj
a1tpXS5pbnB1dFtqXSA9IGxpYl9tYWxsb2Moc2l6ZW9mKHNkbGpveXN0aWNrX21hcHBpbmdf
dCkgKiBzZGxqb3lzdGlja1tpXS5pbnB1dF9tYXhbal0gKiBpbnB1dF9tdWx0W2pdKTsKLSAg
ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzZGxqb3lzdGlj
a1tpXS5pbnB1dFtqXSA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAvKiBvbmx5IHVzZSBkZWZhdWx0IG1hcHBpbmcgaWYgcHJldmlv
dXNseSB0aGVyZSB3ZXJlIG5vIGpveXN0aWNrcyBmb3VuZCAqLwotICAgICAgICAgICAgaWYg
KG51bV9qb3lzdGlja3Nfb2xkID09IDApIHsKLSAgICAgICAgICAgICAgICBqb3lfYXJjaF9p
bml0X2RlZmF1bHRfbWFwcGluZyhpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
bG9nX21lc3NhZ2Uoc2Rsam95X2xvZywgIkRldmljZSAlaSBcIiVzXCIgKCVpIGF4ZXMsICVp
IGJ1dHRvbnMsICVpIGhhdHMsICVpIGJhbGxzKSIsIGksIHNkbGpveXN0aWNrW2ldLm5hbWUs
IGF4aXMsIGJ1dHRvbiwgaGF0LCBiYWxsKTsKKyAgICAgICAgICAgIGxvZ19tZXNzYWdlKHNk
bGpveV9sb2csICJEZXZpY2UgJWkgXCIlc1wiICglaSBheGVzLCAlaSBidXR0b25zLCAlaSBo
YXRzLCAlaSBiYWxscykiLCBpLCBuYW1lLCBheGlzLCBidXR0b24sIGhhdCwgYmFsbCk7Cisg
ICAgICAgICAgICByZWdpc3Rlcl9qb3lzdGlja19kcml2ZXIoJnNkbF9qb3lzdGlja19kcml2
ZXIsCisgICAgICAgICAgICAgICAgbmFtZSwKKyAgICAgICAgICAgICAgICBqb3ksCisgICAg
ICAgICAgICAgICAgYXhpcywKKyAgICAgICAgICAgICAgICBidXR0b24sCisgICAgICAgICAg
ICAgICAgaGF0KTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGxvZ193YXJuaW5n
KHNkbGpveV9sb2csICJDb3VsZG4ndCBvcGVuIGpveXN0aWNrICVpIiwgaSk7CiAgICAgICAg
IH0KICAgICB9CiAKLSAgICAvKiBvbmx5IGxvYWQgam95IG1hcCBmaWxlIGlmIHByZXZpb3Vz
bHkgdGhlcmUgd2VyZSBubyBqb3lzdGlja3MgZm91bmQgKi8KLSAgICBpZiAobnVtX2pveXN0
aWNrc19vbGQgPT0gMCkgewotICAgICAgICBqb3lfYXJjaF9tYXBwaW5nX2xvYWQoam95bWFw
X2ZpbGUpOwotICAgIH0KLQotICAgIC8qIGNvcHkgb3ZlciBpbnB1dCBtYXBwaW5nIGN1c3Rv
bWlzYXRpb25zIGZyb20gdGhpcyBzZXNzaW9uICovCi0gICAgZm9yIChpID0gMDsgaSA8IG51
bV9qb3lzdGlja3M7ICsraSkgewotICAgICAgICBmb3IgKGsgPSAwOyBrIDwgbnVtX2pveXN0
aWNrc19vbGQ7ICsraykgewotICAgICAgICAgICAgaWYgKHNkbGpveXN0aWNrW2ldLmpveXN0
aWNraWQgPT0gc2Rsam95c3RpY2tfb2xkW2tdLmpveXN0aWNraWQpIHsKLSAgICAgICAgICAg
ICAgICBmb3IgKGogPSBBWElTOyBqIDwgTlVNX0lOUFVUX1RZUEVTOyArK2opIHsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKHNkbGpveXN0aWNrW2ldLmlucHV0W2pdICE9IE5VTEwpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGxpYl9mcmVlKHNkbGpveXN0aWNrW2ldLmlucHV0
W2pdKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBzZGxq
b3lzdGlja1tpXS5pbnB1dFtqXSA9IHNkbGpveXN0aWNrX29sZFtrXS5pbnB1dFtqXTsKLSAg
ICAgICAgICAgICAgICAgICAgc2Rsam95c3RpY2tfb2xkW2tdLmlucHV0W2pdID0gTlVMTDsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX2pveXN0aWNrc19vbGQ7ICsraSkgewotICAgICAg
ICBsaWJfZnJlZShzZGxqb3lzdGlja19vbGRbaV0ubmFtZSk7Ci0gICAgICAgIHNkbGpveXN0
aWNrX29sZFtpXS5uYW1lID0gTlVMTDsKLQotICAgICAgICBmb3IgKGogPSBBWElTOyBqIDwg
TlVNX0lOUFVUX1RZUEVTOyArK2opIHsKLSAgICAgICAgICAgIGlmIChzZGxqb3lzdGlja19v
bGRbaV0uaW5wdXRbal0gIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIGxpYl9mcmVlKHNk
bGpveXN0aWNrX29sZFtpXS5pbnB1dFtqXSk7Ci0gICAgICAgICAgICAgICAgc2Rsam95c3Rp
Y2tfb2xkW2ldLmlucHV0W2pdID0gTlVMTDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgIH0KLQotICAgIGxpYl9mcmVlKHNkbGpveXN0aWNrX29sZCk7Ci0gICAgc2Rsam95c3Rp
Y2tfb2xkID0gTlVMTDsKLQogICAgIFNETF9Kb3lzdGlja0V2ZW50U3RhdGUoU0RMX0VOQUJM
RSk7CiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgam95c3RpY2sodm9pZCkKLXsKLSAgICAv
KiBQcm92aWRlZCBvbmx5IGZvciBhcmNoZGVwIGpveS5oLiBUT0RPOiBNaWdyYXRlIGpveXN0
aWNrIHBvbGxpbmcgaW4gaGVyZSBpZiBhbnkgbmVlZGVkPyAqLwotfQogCi12b2lkIGpveXN0
aWNrX2Nsb3NlKHZvaWQpCi17Ci0gICAgaW50IGk7Ci0gICAgc2Rsam95c3RpY2tfaW5wdXRf
dCBqOwotCi0jaWZkZWYgU0RMX0RFQlVHCi0gICAgZnByaW50ZihzdGRlcnIsICIlc1xuIiwg
X19mdW5jX18pOwotI2VuZGlmCi0KLSAgICBpZiAoc2Rsam95c3RpY2sgPT0gTlVMTCkgewot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZm9yIChpID0gMDsgaSA8IG51bV9qb3lz
dGlja3M7ICsraSkgewotICAgICAgICBsaWJfZnJlZShzZGxqb3lzdGlja1tpXS5uYW1lKTsK
LSAgICAgICAgc2Rsam95c3RpY2tbaV0ubmFtZSA9IE5VTEw7Ci0KLSAgICAgICAgaWYgKHNk
bGpveXN0aWNrW2ldLmpveXB0cikgewotICAgICAgICAgICAgU0RMX0pveXN0aWNrQ2xvc2Uo
c2Rsam95c3RpY2tbaV0uam95cHRyKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZvciAoaiA9
IEFYSVM7IGogPCBOVU1fSU5QVVRfVFlQRVM7ICsraikgewotICAgICAgICAgICAgbGliX2Zy
ZWUoc2Rsam95c3RpY2tbaV0uaW5wdXRbal0pOwotICAgICAgICAgICAgc2Rsam95c3RpY2tb
aV0uaW5wdXRbal0gPSBOVUxMOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgbGliX2ZyZWUo
c2Rsam95c3RpY2spOwotICAgIHNkbGpveXN0aWNrID0gTlVMTDsKLX0KLQogLyogLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSAqLwogCi12b2lkIGpveV9hcmNoX2luaXRfZGVmYXVsdF9tYXBwaW5n
KGludCBqb3ludW0pCitzdGF0aWMgaW5saW5lIGpveXN0aWNrX2F4aXNfdmFsdWVfdCBzZGxq
b3lfYXhpc19kaXJlY3Rpb24oU2ludDE2IHZhbHVlLCBqb3lzdGlja19heGlzX3ZhbHVlX3Qg
cHJldikKIHsKLSAgICBpbnQgaSwgaiwgam95cG9ydCwgcGluLCBzdGF0ZSA9IDA7Ci0KLSAg
ICBTRExfSm95c3RpY2tVcGRhdGUoKTsKLQotICAgIC8qIEZJWE1FIHNvbWUgam95c3RpY2tz
IHNlZW0gdG8gbmVlZCBzb21lIHRpbWUgdG8gc2VsZi1jYWxpYnJhdGUgYWZ0ZXIgdGhlCi0g
ICAgICAgZmlyc3QgdGltZSBpdCdzIG9wZW5lZC9wb2xsZWQvcmVhZCwgb3RoZXJ3aXNlIHRo
ZSByZXBvcnRlZCBheGlzIHZhbHVlcwotICAgICAgIGFyZSBpbmNvcnJlY3QgYW5kIGdldCBt
YXBwZWQgdG8gTk9ORS4gUXVpdHRpbmcgYW5kIHJlc3RhcnRpbmcgc2VlbXMgdG8KLSAgICAg
ICBmaXggdGhpcy4gTG9hZGluZyB0aGUgam95bWFwIGxhdGVyIGluIHRoZSBpbml0IGdldHMg
YXJvdW5kIHRoaXMgaXNzdWUuICovCi0KLSAgICBmb3IgKGkgPSAwOyBpIDwgc2Rsam95c3Rp
Y2tbam95bnVtXS5pbnB1dF9tYXhbQVhJU10gKiBpbnB1dF9tdWx0W0FYSVNdOyArK2kpIHsK
LSAgICAgICAgam95cG9ydCA9ICgoMSArIGpveW51bSArICgoaSAmIDQpID4+IDIpKSAmIDEp
OwotICAgICAgICBwaW4gPSA4ID4+IChpICYgMyk7Ci0KLSAgICAgICAgLyogUG9sbCBlYWNo
IGpveXN0aWNrIGF4aXMgb25jZSAqLwotICAgICAgICBpZiAoKGkgJSBpbnB1dF9tdWx0W0FY
SVNdKSA9PSAwKSB7Ci0gICAgICAgICAgICBzdGF0ZSA9IFNETF9Kb3lzdGlja0dldEF4aXMo
c2Rsam95c3RpY2tbam95bnVtXS5qb3lwdHIsIGkgLyBpbnB1dF9tdWx0W0FYSVNdKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIC8qIENoZWNrIHRoYXQgdGhlIGRlZmF1bHQgam95c3RpY2sg
dmFsdWUgaXMgd2l0aGluIHRoZSB0aHJlc2hvbGQuCi0gICAgICAgICAgIFNvbWUgZGV2aWNl
cyBoYXZlIGF4ZXMgdGhhdCBhcmUgKy8tMzI3Njcgd2hlbiBpZGxlOyBtYXBwaW5nCi0gICAg
ICAgICAgIHRob3NlIHRvIE5PTkUgKGJ5IGRlZmF1bHQpIGF2b2lkcyBzb21lIHByb2JsZW1z
LiAqLwotICAgICAgICBpZiAoKHN0YXRlID4gam95c3RpY2tfdGhyZXNob2xkKSB8fCAoc3Rh
dGUgPCAtam95c3RpY2tfdGhyZXNob2xkKSkgewotICAgICAgICAgICAgbG9nX3dhcm5pbmco
c2Rsam95X2xvZywgIkF4aXMgJWkgZXhjZWVkcyB0aHJlc2hvbGQsIG1hcHBpbmcgdG8gTk9O
RSIsIGkgLyBpbnB1dF9tdWx0W0FYSVNdKTsKLSAgICAgICAgICAgIGZvciAoaiA9IDA7IGog
PCBpbnB1dF9tdWx0W0FYSVNdOyArK2opIHsKLSAgICAgICAgICAgICAgICBzZGxqb3lzdGlj
a1tqb3ludW1dLmlucHV0W0FYSVNdW2kgKyBqXS5hY3Rpb24gPSBOT05FOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgaSArPSAoaiAtIDEpOwotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgc2Rsam95c3RpY2tbam95bnVtXS5pbnB1dFtBWElTXVtpXS5hY3Rpb24gPSBK
T1lTVElDSzsKLSAgICAgICAgICAgIHNkbGpveXN0aWNrW2pveW51bV0uaW5wdXRbQVhJU11b
aV0udmFsdWUuam95WzBdID0gam95cG9ydDsKLSAgICAgICAgICAgIHNkbGpveXN0aWNrW2pv
eW51bV0uaW5wdXRbQVhJU11baV0udmFsdWUuam95WzFdID0gcGluOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgZm9yIChpID0gMDsgaSA8IHNkbGpveXN0aWNrW2pveW51bV0uaW5wdXRf
bWF4W0JVVFRPTl0gKiBpbnB1dF9tdWx0W0JVVFRPTl07ICsraSkgewotICAgICAgICBzd2l0
Y2ggKGkgJiAzKSB7Ci0gICAgICAgICAgICBjYXNlIDA6Ci0gICAgICAgICAgICBjYXNlIDM6
Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGpveXBvcnQgPSAoKDEg
KyBqb3ludW0gKyAoaSAmIDEpKSAmIDEpOwotICAgICAgICAgICAgICAgIHBpbiA9IDEgPDwg
NDsKLSAgICAgICAgICAgICAgICBzZGxqb3lzdGlja1tqb3ludW1dLmlucHV0W0JVVFRPTl1b
aV0uYWN0aW9uID0gSk9ZU1RJQ0s7Ci0gICAgICAgICAgICAgICAgc2Rsam95c3RpY2tbam95
bnVtXS5pbnB1dFtCVVRUT05dW2ldLnZhbHVlLmpveVswXSA9IGpveXBvcnQ7Ci0gICAgICAg
ICAgICAgICAgc2Rsam95c3RpY2tbam95bnVtXS5pbnB1dFtCVVRUT05dW2ldLnZhbHVlLmpv
eVsxXSA9IHBpbjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2Ug
MToKLSAgICAgICAgICAgICAgICBzZGxqb3lzdGlja1tqb3ludW1dLmlucHV0W0JVVFRPTl1b
aV0uYWN0aW9uID0gVUlfQUNUSVZBVEU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICAgICAgc2Rsam95c3RpY2tbam95bnVtXS5p
bnB1dFtCVVRUT05dW2ldLmFjdGlvbiA9IE1BUDsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIGZvciAoaSA9IDA7IGkgPCBzZGxqb3lzdGlja1tq
b3ludW1dLmlucHV0X21heFtIQVRdICogaW5wdXRfbXVsdFtIQVRdOyArK2kpIHsKLSAgICAg
ICAgam95cG9ydCA9ICgoMSArIGpveW51bSArICgoaSAmIDQpID4+IDIpKSAmIDEpOwotICAg
ICAgICBwaW4gPSAxIDw8IChpICYgMyk7Ci0KLSAgICAgICAgc2Rsam95c3RpY2tbam95bnVt
XS5pbnB1dFtIQVRdW2ldLmFjdGlvbiA9IEpPWVNUSUNLOwotICAgICAgICBzZGxqb3lzdGlj
a1tqb3ludW1dLmlucHV0W0hBVF1baV0udmFsdWUuam95WzBdID0gam95cG9ydDsKLSAgICAg
ICAgc2Rsam95c3RpY2tbam95bnVtXS5pbnB1dFtIQVRdW2ldLnZhbHVlLmpveVsxXSA9IHBp
bjsKLSAgICB9Ci0KLSAgICBmb3IgKGkgPSAwOyBpIDwgc2Rsam95c3RpY2tbam95bnVtXS5p
bnB1dF9tYXhbQkFMTF0gKiBpbnB1dF9tdWx0W0JBTExdOyArK2kpIHsKLSAgICAgICAgc2Rs
am95c3RpY2tbam95bnVtXS5pbnB1dFtCQUxMXVtpXS5hY3Rpb24gPSBOT05FOwotICAgIH0K
LX0KLQotc3RhdGljIGNoYXIgbWFwcGluZ19yZXR2YWxbNTBdOwotCi1jaGFyICpnZXRfam95
X3BvdF9tYXBwaW5nX3N0cmluZyhpbnQgam95bnIsIGludCBwb3QpCi17Ci0gICAgdWludDE2
X3QgcG9ydGF4aXMgPSAweGZmZmY7Ci0gICAgdWludDhfdCBwb3J0ID0gcG9ydGF4aXMgPj4g
ODsKLSAgICB1aW50OF90IGF4aXMgPSBwb3J0YXhpcyAmIDB4ZmY7Ci0gICAgY2hhciAqcmV0
dmFsID0gTlVMTDsKLQotICAgIGlmIChqb3luciA8PSAxICYmIHBvdCA8PSAxKSB7Ci0gICAg
ICAgIHBvcnRheGlzID0gc2Rsam95c3RpY2tfYXhpc19tYXBwaW5nWyhqb3luciA8PCAxKSB8
IHBvdF07Ci0gICAgfQotCi0gICAgaWYgKHBvcnQgIT0gMjU1ICYmIGF4aXMgIT0gMjU1KSB7
Ci0gICAgICAgIHNucHJpbnRmKG1hcHBpbmdfcmV0dmFsLCA1MCwgIkolZCwgQXglZCIsIHBv
cnQsIGF4aXMpOwotICAgICAgICByZXR2YWwgPSBtYXBwaW5nX3JldHZhbDsKLSAgICB9Ci0g
ICAgcmV0dXJuIHJldHZhbDsKLX0KLQotY2hhciAqZ2V0X2pveV9waW5fbWFwcGluZ19zdHJp
bmcoaW50IGpveW5yLCBpbnQgcGluKQotewotICAgIGludCBpLCBrOwotICAgIHNkbGpveXN0
aWNrX2lucHV0X3QgajsKLSAgICBzZGxqb3lzdGlja19hY3Rpb25fdCB0OwotICAgIGludCB2
YWxpZCA9IDA7Ci0gICAgaW50IGpveSA9IDA7Ci0gICAgaW50IHR5cGUgPSAwOwotICAgIGlu
dCBpbmRleCA9IDA7Ci0gICAgaW50IHN1Yl9pbmRleCA9IDA7Ci0gICAgY2hhciAqcmV0dmFs
ID0gTlVMTDsKLSAgICBjaGFyICp0eXBlX3N0cmluZyA9IE5VTEw7Ci0gICAgY2hhciAqaW5k
ZXhfc3RyaW5nID0gTlVMTDsKLQotICAgIGZvciAoaSA9IDA7IGkgPCBudW1fam95c3RpY2tz
OyArK2kpIHsKLSAgICAgICAgZm9yIChqID0gQVhJUzsgaiA8IE5VTV9JTlBVVF9UWVBFUzsg
KytqKSB7Ci0gICAgICAgICAgICBmb3IgKGsgPSAwOyBrIDwgc2Rsam95c3RpY2tbaV0uaW5w
dXRfbWF4W2pdICogaW5wdXRfbXVsdFtqXTsgKytrKSB7Ci0gICAgICAgICAgICAgICAgdCA9
IHNkbGpveXN0aWNrW2ldLmlucHV0W2pdW2tdLmFjdGlvbjsKLSAgICAgICAgICAgICAgICBp
ZiAodCA9PSBKT1lTVElDSykgewotICAgICAgICAgICAgICAgICAgICBpZiAoc2Rsam95c3Rp
Y2tbaV0uaW5wdXRbal1ba10udmFsdWUuam95WzBdID09IGpveW5yICYmIHNkbGpveXN0aWNr
W2ldLmlucHV0W2pdW2tdLnZhbHVlLmpveVsxXSA9PSBwaW4pIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHZhbGlkKys7Ci0gICAgICAgICAgICAgICAgICAgICAgICBqb3kgPSBpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9IGo7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNl
IEFYSVM6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVfc3RyaW5nID0g
IkF4IjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhfc3RyaW5nID0g
IkkiOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCA9IGsgLyAyOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJfaW5kZXggPSBrICUgMjsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2FzZSBCVVRUT046Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHR5cGVfc3RyaW5nID0gIkJ0IjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW5kZXhfc3RyaW5nID0gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW5kZXggPSBrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJfaW5k
ZXggPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEhBVDoKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdHlwZV9zdHJpbmcgPSAiSHQiOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbmRleF9zdHJpbmcgPSAiSSI7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGluZGV4ID0gayAvIDQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN1Yl9pbmRleCA9IGsgJSA0OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEJBTEw6Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVfc3RyaW5nID0gIkJsIjsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhfc3RyaW5nID0gTlVMTDsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBrOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdWJfaW5kZXggPSAwOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgIH0KLSAgICBpZiAodmFsaWQgPiAxKSB7Ci0gICAgICAgIHJldHZhbCA9ICJN
dWx0aXBsZSI7Ci0gICAgfQotICAgIGlmICh2YWxpZCA9PSAxKSB7Ci0gICAgICAgIGlmIChp
bmRleF9zdHJpbmcgIT0gTlVMTCApIHsKLSAgICAgICAgICAgIHNucHJpbnRmKG1hcHBpbmdf
cmV0dmFsLCA1MCwgIkolZCwgJXMlZCwgJXMlZCIsIGpveSwgdHlwZV9zdHJpbmcsIGluZGV4
LCBpbmRleF9zdHJpbmcsIHN1Yl9pbmRleCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICBzbnByaW50ZihtYXBwaW5nX3JldHZhbCwgNTAsICJKJWQsICVzJWQiLCBqb3ksIHR5
cGVfc3RyaW5nLCBpbmRleCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dmFsID0gbWFwcGlu
Z19yZXR2YWw7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJldHZhbDsKLX0KLQotdm9pZCBzZGxq
b3lfZGVsZXRlX3BvdF9tYXBwaW5nKGludCBwb3J0LCBpbnQgcG90KQotewotICAgIGludCBp
LCBrOwotICAgIHNkbGpveXN0aWNrX2lucHV0X3QgajsKLSAgICBzZGxqb3lzdGlja19hY3Rp
b25fdCB0OwotCi0gICAgZm9yIChpID0gMDsgaSA8IG51bV9qb3lzdGlja3M7ICsraSkgewot
ICAgICAgICBmb3IgKGogPSBBWElTOyBqIDwgTlVNX0lOUFVUX1RZUEVTOyArK2opIHsKLSAg
ICAgICAgICAgIGZvciAoayA9IDA7IGsgPCBzZGxqb3lzdGlja1tpXS5pbnB1dF9tYXhbal0g
KiBpbnB1dF9tdWx0W2pdOyArK2spIHsKLSAgICAgICAgICAgICAgICB0ID0gc2Rsam95c3Rp
Y2tbaV0uaW5wdXRbal1ba10uYWN0aW9uOwotICAgICAgICAgICAgICAgIGlmICh0ID09IFBP
VF9BWElTKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzZGxqb3lzdGlja1tpXS5pbnB1
dFtqXVtrXS52YWx1ZS5heGlzWzBdID09IHBvcnQgJiYgc2Rsam95c3RpY2tbaV0uaW5wdXRb
al1ba10udmFsdWUuYXhpc1sxXSA9PSBwb3QpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHNkbGpveXN0aWNrW2ldLmlucHV0W2pdW2tdLmFjdGlvbiA9IE5PTkU7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBzZGxqb3lzdGlja1tpXS5pbnB1dFtqXVtrXS52YWx1ZS5heGlzWzBd
ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNkbGpveXN0aWNrW2ldLmlucHV0W2pd
W2tdLnZhbHVlLmF4aXNbMV0gPSAwOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChwb3J0IDw9IDEgJiYgcG90IDw9IDEpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHNkbGpveXN0aWNrX2F4aXNfbWFwcGluZ1socG9ydCA8PCAxKSB8IHBv
dF0gPSAweGZmZmY7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgc2Rsam95X2Rl
bGV0ZV9waW5fbWFwcGluZyhpbnQgcG9ydCwgaW50IHBpbikKLXsKLSAgICBpbnQgaSwgazsK
LSAgICBzZGxqb3lzdGlja19pbnB1dF90IGo7Ci0gICAgc2Rsam95c3RpY2tfYWN0aW9uX3Qg
dDsKLQotICAgIGZvciAoaSA9IDA7IGkgPCBudW1fam95c3RpY2tzOyArK2kpIHsKLSAgICAg
ICAgZm9yIChqID0gQVhJUzsgaiA8IE5VTV9JTlBVVF9UWVBFUzsgKytqKSB7Ci0gICAgICAg
ICAgICBmb3IgKGsgPSAwOyBrIDwgc2Rsam95c3RpY2tbaV0uaW5wdXRfbWF4W2pdICogaW5w
dXRfbXVsdFtqXTsgKytrKSB7Ci0gICAgICAgICAgICAgICAgdCA9IHNkbGpveXN0aWNrW2ld
LmlucHV0W2pdW2tdLmFjdGlvbjsKLSAgICAgICAgICAgICAgICBpZiAodCA9PSBKT1lTVElD
SykgewotICAgICAgICAgICAgICAgICAgICBpZiAoc2Rsam95c3RpY2tbaV0uaW5wdXRbal1b
a10udmFsdWUuam95WzBdID09IHBvcnQgJiYgc2Rsam95c3RpY2tbaV0uaW5wdXRbal1ba10u
dmFsdWUuam95WzFdID09IHBpbikgewotICAgICAgICAgICAgICAgICAgICAgICAgc2Rsam95
c3RpY2tbaV0uaW5wdXRbal1ba10uYWN0aW9uID0gTk9ORTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHNkbGpveXN0aWNrW2ldLmlucHV0W2pdW2tdLnZhbHVlLmpveVswXSA9IDA7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBzZGxqb3lzdGlja1tpXS5pbnB1dFtqXVtrXS52YWx1
ZS5qb3lbMV0gPSAwOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCi1pbnQgam95X2FyY2hf
bWFwcGluZ19kdW1wKGNvbnN0IGNoYXIgKmZpbGVuYW1lKQotewotICAgIEZJTEUgKmZwOwot
ICAgIGludCBpLCBrOwotICAgIHNkbGpveXN0aWNrX2lucHV0X3QgajsKLSAgICBzZGxqb3lz
dGlja19hY3Rpb25fdCB0OwotICAgIGNoYXIgKmhvdGtleV9wYXRoID0gTlVMTDsKLQotI2lm
ZGVmIFNETF9ERUJVRwotICAgIGZwcmludGYoc3RkZXJyLCAiJXNcbiIsIF9fZnVuY19fKTsK
LSNlbmRpZgotCi0gICAgaWYgKGZpbGVuYW1lID09IE5VTEwpIHsKLSAgICAgICAgcmV0dXJu
IC0xOwotICAgIH0KLQotICAgIGZwID0gZm9wZW4oZmlsZW5hbWUsIE1PREVfV1JJVEVfVEVY
VCk7Ci0KLSAgICBpZiAoZnAgPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gLTE7Ci0gICAg
fQotCi0gICAgZnByaW50ZihmcCwgIiMgVklDRSBqb3lzdGljayBtYXBwaW5nIGZpbGVcbiIK
LSAgICAgICAgICAgICIjXG4iCi0gICAgICAgICAgICAiIyBBIGpveXN0aWNrIG1hcCBpcyBy
ZWFkIGluIGFzIHBhdGNoIHRvIHRoZSBjdXJyZW50IG1hcC5cbiIKLSAgICAgICAgICAgICIj
XG4iCi0gICAgICAgICAgICAiIyBGaWxlIGZvcm1hdDpcbiIKLSAgICAgICAgICAgICIjIC0g
Y29tbWVudCBsaW5lcyBzdGFydCB3aXRoICcjJ1xuIgotICAgICAgICAgICAgIiMgLSBrZXl3
b3JkIGxpbmVzIHN0YXJ0IHdpdGggJyFrZXl3b3JkJ1xuIgotICAgICAgICAgICAgIiMgLSBu
b3JtYWwgbGluZSBoYXMgJ2pveW51bSBpbnB1dHR5cGUgaW5wdXRpbmRleCBhY3Rpb24nXG4i
Ci0gICAgICAgICAgICAiI1xuIgotICAgICAgICAgICAgIiMgS2V5d29yZHMgYW5kIHRoZWly
IGxpbmVzIGFyZTpcbiIKLSAgICAgICAgICAgICIjICchQ0xFQVInICAgIGNsZWFyIGFsbCBt
YXBwaW5nc1xuIgotICAgICAgICAgICAgIiNcbiIKLSAgICAgICAgICAgICk7Ci0KLSAgICBm
cHJpbnRmKGZwLCAiIyBpbnB1dHR5cGU6XG4iCi0gICAgICAgICAgICAiIyAwICAgICAgYXhp
c1xuIgotICAgICAgICAgICAgIiMgMSAgICAgIGJ1dHRvblxuIgotICAgICAgICAgICAgIiMg
MiAgICAgIGhhdFxuIgotICAgICAgICAgICAgIiMgMyAgICAgIGJhbGxcbiIKLSAgICAgICAg
ICAgICIjXG4iCi0gICAgICAgICAgICAiIyBOb3RlIHRoYXQgZWFjaCBheGlzIGhhcyAyIGlu
cHV0aW5kZXggZW50cmllcyBhbmQgZWFjaCBoYXQgaGFzIDQuXG4iCi0gICAgICAgICAgICAi
I1xuIgotICAgICAgICAgICAgIiMgYWN0aW9uIFthY3Rpb25fcGFyYW1ldGVyc106XG4iCi0g
ICAgICAgICAgICAiIyAwICAgICAgICAgICAgICAgbm9uZVxuIgotICAgICAgICAgICAgIiMg
MSBwb3J0IHBpbiAgICAgIGpveXN0aWNrIChwaW46IDEvMi80LzgvMTYvMzIvNjQvMTI4LzI1
Ni81MTIvMTAyNC8yMDQ4ID0gdS9kL2wvci9maXJlKEEpL2ZpcmUyKEIpL2ZpcmUzKFgpL1kv
TEIvUkIvc2VsZWN0L3N0YXJ0KVxuIgotICAgICAgICAgICAgIiMgMiByb3cgY29sICAgICAg
IGtleWJvYXJkXG4iCi0gICAgICAgICAgICAiIyAzICAgICAgICAgICAgICAgbWFwXG4iCi0g
ICAgICAgICAgICAiIyA0ICAgICAgICAgICAgICAgVUkgYWN0aXZhdGVcbiIKLSAgICAgICAg
ICAgICIjIDUgcGF0aCZ0byZpdGVtICBVSSBmdW5jdGlvblxuIgotICAgICAgICAgICAgIiMg
NiBwb3QgYXhpcyAgICAgIGpveXN0aWNrIChwb3Q6IDEvMi8zLzQgPSB4MS95MS94Mi95Milc
biIKLSAgICAgICAgICAgICIjXG5cbiIKLSAgICAgICAgICAgICk7Ci0KLSAgICBmcHJpbnRm
KGZwLCAiIUNMRUFSXG5cbiIpOwotCi0gICAgZm9yIChpID0gMDsgaSA8IG51bV9qb3lzdGlj
a3M7ICsraSkgewotICAgICAgICBmcHJpbnRmKGZwLCAiIyAlc1xuIiwgc2Rsam95c3RpY2tb
aV0ubmFtZSk7Ci0gICAgICAgIGZvciAoaiA9IEFYSVM7IGogPCBOVU1fSU5QVVRfVFlQRVM7
ICsraikgewotICAgICAgICAgICAgZm9yIChrID0gMDsgayA8IHNkbGpveXN0aWNrW2ldLmlu
cHV0X21heFtqXSAqIGlucHV0X211bHRbal07ICsraykgewotICAgICAgICAgICAgICAgIHQg
PSBzZGxqb3lzdGlja1tpXS5pbnB1dFtqXVtrXS5hY3Rpb247Ci0gICAgICAgICAgICAgICAg
ZnByaW50ZihmcCwgIiVpICV1ICVpICV1IiwgaSwgaiwgaywgdCk7Ci0gICAgICAgICAgICAg
ICAgc3dpdGNoICh0KSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSk9ZU1RJQ0s6Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKGZwLCAiICVpICVpIiwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2Rsam95c3RpY2tbaV0uaW5wdXRbal1ba10udmFs
dWUuam95WzBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZGxqb3lzdGlj
a1tpXS5pbnB1dFtqXVtrXS52YWx1ZS5qb3lbMV0KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgICAgICBjYXNlIEtFWUJPQVJEOgotICAgICAgICAgICAgICAgICAgICAgICAgZnBy
aW50ZihmcCwgIiAlaSAlaSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNk
bGpveXN0aWNrW2ldLmlucHV0W2pdW2tdLnZhbHVlLmtleVswXSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2Rsam95c3RpY2tbaV0uaW5wdXRbal1ba10udmFsdWUua2V5
WzFdCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBVSV9GVU5DVElP
TjoKLSAgICAgICAgICAgICAgICAgICAgICAgIGhvdGtleV9wYXRoID0gc2RsX3VpX2hvdGtl
eV9wYXRoKHNkbGpveXN0aWNrW2ldLmlucHV0W2pdW2tdLnZhbHVlLnVpX2Z1bmN0aW9uKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoZnAsICIgJXMiLCBob3RrZXlfcGF0
aCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsaWJfZnJlZShob3RrZXlfcGF0aCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBQT1RfQVhJUzoKLSAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoZnAsICIgJWkg
JWkiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZGxqb3lzdGlja1tpXS5p
bnB1dFtqXVtrXS52YWx1ZS5heGlzWzBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzZGxqb3lzdGlja1tpXS5pbnB1dFtqXVtrXS52YWx1ZS5heGlzWzFdCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBmcHJp
bnRmKGZwLCAiXG4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZwcmludGYoZnAs
ICJcbiIpOwotICAgICAgICB9Ci0gICAgICAgIGZwcmludGYoZnAsICJcblxuIik7Ci0gICAg
fQotCi0gICAgZmNsb3NlKGZwKTsKLQotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgdm9p
ZCBqb3lfYXJjaF9rZXl3b3JkX2NsZWFyKHZvaWQpCi17Ci0gICAgaW50IGksIGs7Ci0gICAg
c2Rsam95c3RpY2tfaW5wdXRfdCBqOwotCi0gICAgZm9yIChpID0gMDsgaSA8IG51bV9qb3lz
dGlja3M7ICsraSkgewotICAgICAgICBmb3IgKGogPSBBWElTOyBqIDwgTlVNX0lOUFVUX1RZ
UEVTOyArK2opIHsKLSAgICAgICAgICAgIGZvciAoayA9IDA7IGsgPCBzZGxqb3lzdGlja1tp
XS5pbnB1dF9tYXhbal0gKiBpbnB1dF9tdWx0W2pdOyArK2spIHsKLSAgICAgICAgICAgICAg
ICBzZGxqb3lzdGlja1tpXS5pbnB1dFtqXVtrXS5hY3Rpb24gPSBOT05FOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBqb3lfYXJjaF9wYXJz
ZV9rZXl3b3JkKGNoYXIgKmJ1ZmZlcikKLXsKLSAgICBjaGFyICprZXk7Ci0KLSAgICBrZXkg
PSBzdHJ0b2soYnVmZmVyICsgMSwgIiBcdDoiKTsKLQotICAgIGlmICghc3RyY21wKGtleSwg
IkNMRUFSIikpIHsKLSAgICAgICAgam95X2FyY2hfa2V5d29yZF9jbGVhcigpOwotICAgIH0K
LX0KLQotc3RhdGljIHZvaWQgam95X2FyY2hfcGFyc2VfZW50cnkoY2hhciAqYnVmZmVyKQot
ewotICAgIGNoYXIgKnA7Ci0gICAgaW50IGpveW51bSwgaW5wdXRpbmRleCwgZGF0YTEgPSAw
LCBkYXRhMiA9IDA7Ci0gICAgc2Rsam95c3RpY2tfaW5wdXRfdCBpbnB1dHR5cGU7Ci0gICAg
c2Rsam95c3RpY2tfYWN0aW9uX3QgYWN0aW9uOwotCi0gICAgcCA9IHN0cnRvayhidWZmZXIs
ICIgXHQ6Iik7Ci0KLSAgICBqb3ludW0gPSBhdG9pKHApOwotCi0gICAgaWYgKGpveW51bSA+
PSBudW1fam95c3RpY2tzKSB7Ci0gICAgICAgIGxvZ19lcnJvcihzZGxqb3lfbG9nLCAiQ291
bGQgbm90IGZpbmQgam95c3RpY2sgJWkhIiwgam95bnVtKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIHAgPSBzdHJ0b2soTlVMTCwgIiBcdCwiKTsKLSAgICBpZiAocCAhPSBO
VUxMKSB7Ci0gICAgICAgIGlucHV0dHlwZSA9IChzZGxqb3lzdGlja19pbnB1dF90KWF0b2ko
cCk7Ci0gICAgICAgIHAgPSBzdHJ0b2soTlVMTCwgIiBcdCwiKTsKLSAgICAgICAgaWYgKHAg
IT0gTlVMTCkgewotICAgICAgICAgICAgaW5wdXRpbmRleCA9IGF0b2kocCk7Ci0gICAgICAg
ICAgICBwID0gc3RydG9rKE5VTEwsICIgXHQiKTsKLSAgICAgICAgICAgIGlmIChwICE9IE5V
TEwpIHsKLSAgICAgICAgICAgICAgICBhY3Rpb24gPSAoc2Rsam95c3RpY2tfYWN0aW9uX3Qp
YXRvaShwKTsKLQotICAgICAgICAgICAgICAgIHN3aXRjaCAoYWN0aW9uKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGNhc2UgVUlfRlVOQ1RJT046Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBwID0gc3RydG9rKE5VTEwsICJcdFxyXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIEpPWVNUSUNLOgotICAgICAgICAg
ICAgICAgICAgICBjYXNlIFBPVF9BWElTOgotICAgICAgICAgICAgICAgICAgICBjYXNlIEtF
WUJPQVJEOgotICAgICAgICAgICAgICAgICAgICAgICAgcCA9IHN0cnRvayhOVUxMLCAiIFx0
Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhMSA9IGF0b2kocCk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBwID0gc3RydG9rKE5VTEwsICIgXHQiKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGRhdGEyID0gYXRvaShwKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
aWYgKGlucHV0aW5kZXggPCBzZGxqb3lzdGlja1tqb3ludW1dLmlucHV0X21heFtpbnB1dHR5
cGVdICogaW5wdXRfbXVsdFtpbnB1dHR5cGVdKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNk
bGpveXN0aWNrW2pveW51bV0uaW5wdXRbaW5wdXR0eXBlXVtpbnB1dGluZGV4XS5hY3Rpb24g
PSBhY3Rpb247Ci0KLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChhY3Rpb24pIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSk9ZU1RJQ0s6Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2Rsam95c3RpY2tbam95bnVtXS5pbnB1dFtpbnB1dHR5cGVdW2lucHV0
aW5kZXhdLnZhbHVlLmpveVswXSA9IGRhdGExOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNkbGpveXN0aWNrW2pveW51bV0uaW5wdXRbaW5wdXR0eXBlXVtpbnB1dGluZGV4XS52
YWx1ZS5qb3lbMV0gPSBkYXRhMjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgUE9UX0FYSVM6Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2Rsam95c3RpY2tbam95bnVtXS5pbnB1dFtpbnB1dHR5cGVd
W2lucHV0aW5kZXhdLnZhbHVlLmF4aXNbMF0gPSBkYXRhMTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzZGxqb3lzdGlja1tqb3ludW1dLmlucHV0W2lucHV0dHlwZV1baW5wdXRp
bmRleF0udmFsdWUuYXhpc1sxXSA9IGRhdGEyOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChkYXRhMSA8PSAxICYmIGRhdGEyIDw9IDEpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2Rsam95c3RpY2tfYXhpc19tYXBwaW5nWyhkYXRhMSA8PCAxKSB8
IGRhdGEyXSA9IChqb3ludW0gPDwgOCkgfCAoaW5wdXRpbmRleCAvIDIpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZXNfc2V0X2ludF9zcHJpbnRmKCJQYWRk
bGVzSW5wdXQlZCIsIFBBRERMRVNfSU5QVVRfSk9ZX0FYSVMsIGRhdGExICsgMSk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBLRVlCT0FSRDoKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzZGxqb3lzdGlja1tqb3ludW1dLmlucHV0W2lucHV0
dHlwZV1baW5wdXRpbmRleF0udmFsdWUua2V5WzBdID0gZGF0YTE7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2Rsam95c3RpY2tbam95bnVtXS5pbnB1dFtpbnB1dHR5cGVdW2lu
cHV0aW5kZXhdLnZhbHVlLmtleVsxXSA9IGRhdGEyOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBVSV9GVU5DVElP
TjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZGxqb3lzdGlja1tqb3ludW1dLmlu
cHV0W2lucHV0dHlwZV1baW5wdXRpbmRleF0udmFsdWUudWlfZnVuY3Rpb24gPSBzZGxfdWlf
aG90a2V5X2FjdGlvbihwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBsb2dfd2FybmluZyhzZGxqb3lfbG9n
LCAiaW5wdXRpbmRleCAlaSB0b28gbGFyZ2UgZm9yIGlucHV0dHlwZSAldSwgam95bnVtICVp
ISIsIGlucHV0aW5kZXgsIGlucHV0dHlwZSwgam95bnVtKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLWludCBqb3lfYXJjaF9t
YXBwaW5nX2xvYWQoY29uc3QgY2hhciAqZmlsZW5hbWUpCi17Ci0gICAgRklMRSAqZnA7Ci0g
ICAgY2hhciAqY29tcGxldGVfcGF0aDsKLSAgICBjaGFyIGJ1ZmZlclsxMDAwXTsKLQotI2lm
ZGVmIFNETF9ERUJVRwotICAgIGZwcmludGYoc3RkZXJyLCAiJXMsICVzXG4iLCBfX2Z1bmNf
XywgZmlsZW5hbWUpOwotI2VuZGlmCi0KLSAgICAvKiBTaWxlbnRseSBpZ25vcmUga2V5bWFw
IGxvYWQgb24gcmVzb3VyY2UgJiBjbWRsaW5lIGluaXQgKi8KLSAgICBpZiAoc2Rsam95c3Rp
Y2sgPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBpZiAoZmls
ZW5hbWUgPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotCi0gICAgZnAg
PSBzeXNmaWxlX29wZW4oZmlsZW5hbWUsIE5VTEwsICZjb21wbGV0ZV9wYXRoLCBNT0RFX1JF
QURfVEVYVCk7Ci0KLSAgICBpZiAoZnAgPT0gTlVMTCkgewotICAgICAgICBsb2dfd2Fybmlu
ZyhzZGxqb3lfbG9nLCAiRmFpbGVkIHRvIG9wZW4gYCVzJy4iLCBmaWxlbmFtZSk7Ci0gICAg
ICAgIHJldHVybiAtMTsKLSAgICB9Ci0KLSAgICBsb2dfbWVzc2FnZShzZGxqb3lfbG9nLCAi
TG9hZGluZyBqb3lzdGljayBtYXAgYCVzJy4iLCBjb21wbGV0ZV9wYXRoKTsKLQotICAgIGxp
Yl9mcmVlKGNvbXBsZXRlX3BhdGgpOwotCi0gICAgZG8gewotICAgICAgICBidWZmZXJbMF0g
PSAwOwotICAgICAgICBpZiAoZmdldHMoYnVmZmVyLCA5OTksIGZwKSkgewotICAgICAgICAg
ICAgY2hhciAqcDsKLQotICAgICAgICAgICAgaWYgKHN0cmxlbihidWZmZXIpID09IDApIHsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
YnVmZmVyW3N0cmxlbihidWZmZXIpIC0gMV0gPSAwOyAvKiByZW1vdmUgbmV3bGluZSAqLwot
Ci0gICAgICAgICAgICAvKiByZW1vdmUgY29tbWVudHMgKi8KLSAgICAgICAgICAgIGlmICgo
cCA9IHN0cmNocihidWZmZXIsICcjJykpKSB7Ci0gICAgICAgICAgICAgICAgKnAgPSAwOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvKiByZW1vdmUgd2hpdGVzcGFjZSBhdCB0
aGUgYmVnaW5uaW5nIG9mIHRoZSBsaW5lICovCi0gICAgICAgICAgICBwID0gYnVmZmVyOwot
ICAgICAgICAgICAgd2hpbGUgKCgoKnAgPT0gJyAnKSB8fCAoKnAgPT0gJ1x0JykpICYmICgq
cCAhPSAwKSkgewotICAgICAgICAgICAgICAgICsrcDsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgc3dpdGNoICgqcCkgewotICAgICAgICAgICAgICAgIGNhc2UgMDoKLSAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSAnISc6Ci0gICAg
ICAgICAgICAgICAgICAgIC8qIGtleXdvcmQgaGFuZGxpbmcgKi8KLSAgICAgICAgICAgICAg
ICAgICAgam95X2FyY2hfcGFyc2Vfa2V5d29yZChwKTsKLSAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAg
LyogdGFibGUgZW50cnkgaGFuZGxpbmcgKi8KLSAgICAgICAgICAgICAgICAgICAgam95X2Fy
Y2hfcGFyc2VfZW50cnkocCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgfSB3aGlsZSAoIWZlb2YoZnApKTsKLSAgICBmY2xv
c2UoZnApOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g
Ki8KLQotc3RhdGljIGlubGluZSB1aW50OF90IHNkbGpveV9heGlzX2RpcmVjdGlvbihTaW50
MTYgdmFsdWUsIHVpbnQ4X3QgcHJldikKLXsKICAgICBpbnQgdGhyZXMgPSBqb3lzdGlja190
aHJlc2hvbGQ7CiAKLSAgICBpZiAocHJldiA9PSAwKSB7CisgICAgaWYgKHByZXYgPT0gSk9Z
X0FYSVNfTUlERExFKSB7CiAgICAgICAgIHRocmVzICs9IGpveXN0aWNrX2Z1eno7CiAgICAg
fSBlbHNlIHsKICAgICAgICAgdGhyZXMgLT0gam95c3RpY2tfZnV6ejsKQEAgLTEwMzIsMTEg
KzMyMiwxMSBAQAogICAgIH0KIAogICAgIGlmICh2YWx1ZSA8IC10aHJlcykgewotICAgICAg
ICByZXR1cm4gMjsKKyAgICAgICAgcmV0dXJuIEpPWV9BWElTX05FR0FUSVZFOwogICAgIH0g
ZWxzZSBpZiAodmFsdWUgPiB0aHJlcykgewotICAgICAgICByZXR1cm4gMTsKKyAgICAgICAg
cmV0dXJuIEpPWV9BWElTX1BPU0lUSVZFOwogICAgIH0gZWxzZSBpZiAoKHZhbHVlIDwgdGhy
ZXMpICYmICh2YWx1ZSA+IC10aHJlcykpIHsKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
IHJldHVybiBKT1lfQVhJU19NSURETEU7CiAgICAgfQogCiAgICAgcmV0dXJuIHByZXY7CkBA
IC0xMDY2LDM4ICszNTYsMjYgQEAKICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIHNkbGpv
eXN0aWNrX21hcHBpbmdfdCAqc2Rsam95X2dldF9tYXBwaW5nKFNETF9FdmVudCBlKQorc3Rh
dGljIGpveXN0aWNrX21hcHBpbmdfdCAqc2Rsam95X2dldF9tYXBwaW5nKFNETF9FdmVudCBl
KQogewotICAgIHNkbGpveXN0aWNrX21hcHBpbmdfdCAqcmV0dmFsID0gTlVMTDsKKyAgICBq
b3lzdGlja19tYXBwaW5nX3QgKnJldHZhbCA9IE5VTEw7CiAgICAgdWludDhfdCBjdXI7Ci0g
ICAgaW50IGpveW51bTsKIAogICAgIHN3aXRjaCAoZS50eXBlKSB7CiAgICAgICAgIGNhc2Ug
U0RMX0pPWUFYSVNNT1RJT046CiAgICAgICAgICAgICBjdXIgPSBzZGxqb3lfYXhpc19kaXJl
Y3Rpb24oZS5qYXhpcy52YWx1ZSwgMCk7Ci0gICAgICAgICAgICBpZiAoY3VyID4gMCkgewot
ICAgICAgICAgICAgICAgIC0tY3VyOwotICAgICAgICAgICAgICAgIGpveW51bSA9IHNkbGpv
eV9nZXRfam95bnVtX2Zvcl9ldmVudChlLmpheGlzLndoaWNoKTsKLSAgICAgICAgICAgICAg
ICBpZiAoam95bnVtICE9IC0xKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHZhbCA9ICYo
c2Rsam95c3RpY2tbam95bnVtXS5pbnB1dFtBWElTXVtlLmpheGlzLmF4aXMgKiBpbnB1dF9t
dWx0W0FYSVNdICsgY3VyXSk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KGN1ciAhPSBKT1lfQVhJU19NSURETEUpIHsKKyAgICAgICAgICAgICAgICByZXR2YWwgPSBq
b3lfZ2V0X2F4aXNfbWFwcGluZyhlLmpheGlzLndoaWNoLCBlLmpheGlzLnZhbHVlLCBjdXIp
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgU0RM
X0pPWUhBVE1PVElPTjoKICAgICAgICAgICAgIGN1ciA9IHNkbGpveV9oYXRfZGlyZWN0aW9u
KGUuamhhdC52YWx1ZSwgMCk7CiAgICAgICAgICAgICBpZiAoY3VyID4gMCkgewotICAgICAg
ICAgICAgICAgIC0tY3VyOwotICAgICAgICAgICAgICAgIGpveW51bSA9IHNkbGpveV9nZXRf
am95bnVtX2Zvcl9ldmVudChlLmpoYXQud2hpY2gpOwotICAgICAgICAgICAgICAgIGlmIChq
b3ludW0gIT0gLTEpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dmFsID0gJihzZGxqb3lz
dGlja1tqb3ludW1dLmlucHV0W0hBVF1bZS5qaGF0LmhhdCAqIGlucHV0X211bHRbSEFUXSAr
IGN1cl0pOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR2YWwgPSBq
b3lfZ2V0X2hhdF9tYXBwaW5nKGUuamhhdC53aGljaCwgZS5qaGF0LmhhdCwgY3VyKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFNETF9KT1lC
VVRUT05ET1dOOgotICAgICAgICAgICAgam95bnVtID0gc2Rsam95X2dldF9qb3ludW1fZm9y
X2V2ZW50KGUuamJ1dHRvbi53aGljaCk7Ci0gICAgICAgICAgICBpZiAoam95bnVtICE9IC0x
KSB7Ci0gICAgICAgICAgICAgICAgcmV0dmFsID0gJihzZGxqb3lzdGlja1tqb3ludW1dLmlu
cHV0W0JVVFRPTl1bZS5qYnV0dG9uLmJ1dHRvbl0pOwotICAgICAgICAgICAgfQorICAgICAg
ICAgICAgcmV0dmFsID0gam95X2dldF9idXR0b25fbWFwcGluZyhlLmpidXR0b24ud2hpY2gs
IGUuamJ1dHRvbi5idXR0b24pOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1
bHQ6CiAgICAgICAgICAgICBicmVhazsKQEAgLTExMDUsNyArMzgzLDcgQEAKICAgICByZXR1
cm4gcmV0dmFsOwogfQogCi1zdGF0aWMgdWlfbWVudV9hY3Rpb25fdCBzZGxqb3lfcGVyZm9y
bV9ldmVudChzZGxqb3lzdGlja19tYXBwaW5nX3QgKmV2ZW50LCBpbnQgdmFsdWUpCitzdGF0
aWMgam95c3RpY2tfYWN0aW9uX3Qgc2Rsam95X3BlcmZvcm1fZXZlbnQoam95c3RpY2tfbWFw
cGluZ190ICpldmVudCwgaW50IHZhbHVlKQogewogICAgIHVpbnQ4X3QgdDsKICAgICB1aV9t
ZW51X2FjdGlvbl90IHJldHZhbCA9IE1FTlVfQUNUSU9OX05PTkU7CkBAIC0xMTEyLDkgKzM5
MCw4IEBACiAKICAgICBhdXRvcmVwZWF0ID0gTUVOVV9BQ1RJT05fTk9ORTsKIAotICAgIGlm
IChzZGxfbWVudV9zdGF0ZSB8fCAoc2RsX3ZrYmRfc3RhdGUgJiBTRExfVktCRF9BQ1RJVkUp
KSB7CiAgICAgICAgIGlmIChldmVudC0+YWN0aW9uID09IEpPWVNUSUNLKSB7Ci0gICAgICAg
ICAgICBzd2l0Y2ggKGV2ZW50LT52YWx1ZS5qb3lbMV0pIHsKKyAgICAgICAgICAgIHN3aXRj
aCAoZXZlbnQtPnZhbHVlLmpveV9waW4pIHsKICAgICAgICAgICAgICAgICBjYXNlIDB4MDE6
CiAgICAgICAgICAgICAgICAgICAgIHJldHZhbCA9IGF1dG9yZXBlYXQgPSBNRU5VX0FDVElP
Tl9VUDsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xMTQ0LDQwICs0MjEsNiBA
QAogICAgICAgICAgICAgcmV0dmFsICs9IE1FTlVfQUNUSU9OX05PTkVfUkVMRUFTRTsKICAg
ICAgICAgfQogICAgICAgICByZXR1cm4gcmV0dmFsOwotICAgIH0KLQotICAgIGF1dG9yZXBl
YXRfZGVsYXkgPSAzMDsKLQotICAgIHN3aXRjaCAoZXZlbnQtPmFjdGlvbikgewotICAgICAg
ICBjYXNlIEpPWVNUSUNLOgotICAgICAgICAgICAgdCA9IGV2ZW50LT52YWx1ZS5qb3lbMF07
Ci0gICAgICAgICAgICBpZiAoam95c3RpY2tfcG9ydF9tYXBbdF0gPT0gSk9ZREVWX0pPWVNU
SUNLKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHZhbHVlKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGpveXN0aWNrX3NldF92YWx1ZV9vcih0LCAodWludDE2X3QpZXZlbnQtPnZhbHVlLmpv
eVsxXSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
am95c3RpY2tfc2V0X3ZhbHVlX2FuZCh0LCAodWludDE2X3QpIH4oZXZlbnQtPnZhbHVlLmpv
eVsxXSkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIEtFWUJPQVJEOgotICAgICAgICAgICAga2V5Ym9hcmRf
c2V0X2tleWFycl9hbnkoZXZlbnQtPnZhbHVlLmtleVswXSwgZXZlbnQtPnZhbHVlLmtleVsx
XSwgdmFsdWUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVUlfQUNUSVZB
VEU6Ci0gICAgICAgICAgICBpZiAodmFsdWUpIHsKLSAgICAgICAgICAgICAgICBzZGxfdWlf
YWN0aXZhdGUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIFVJX0ZVTkNUSU9OOgotICAgICAgICAgICAgaWYgKHZhbHVlICYmIGV2ZW50LT52
YWx1ZS51aV9mdW5jdGlvbikgewotICAgICAgICAgICAgICAgIHNkbF91aV9ob3RrZXkoZXZl
bnQtPnZhbHVlLnVpX2Z1bmN0aW9uKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIE5PTkU6Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmV0dmFsOwogfQogCiAvKiAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tICovCkBAIC0xMTk3LDE2OSArNDQwLDU4IEBACiAKIHVpbnQ4X3Qgc2Rs
am95X2NoZWNrX2F4aXNfbW92ZW1lbnQoU0RMX0V2ZW50IGUpCiB7Ci0gICAgdWludDhfdCBj
dXIsIHByZXY7Ci0gICAgaW50IGluZGV4OwotICAgIFVpbnQ4IGpveW51bTsKLSAgICBVaW50
OCBheGlzOwotICAgIFNpbnQxNiB2YWx1ZTsKLQotICAgIGpveW51bSA9IHNkbGpveV9nZXRf
am95bnVtX2Zvcl9ldmVudChlLmpheGlzLndoaWNoKTsgICAgCi0gICAgYXhpcyA9IGUuamF4
aXMuYXhpczsKLSAgICB2YWx1ZSA9IGUuamF4aXMudmFsdWU7Ci0KLSAgICBpbmRleCA9IGF4
aXMgKiBpbnB1dF9tdWx0W0FYSVNdOwotICAgIHByZXYgPSBzZGxqb3lzdGlja1tqb3ludW1d
LmlucHV0W0FYSVNdW2luZGV4XS5wcmV2OwotCi0gICAgY3VyID0gc2Rsam95X2F4aXNfZGly
ZWN0aW9uKHZhbHVlLCBwcmV2KTsKLQotICAgIGlmIChjdXIgPT0gcHJldikgewotICAgICAg
ICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBzZGxqb3lzdGlja1tqb3ludW1dLmlucHV0W0FY
SVNdW2luZGV4XS5wcmV2ID0gY3VyOwotICAgIHJldHVybiBjdXI7CisgICAgam95X2F4aXNf
ZXZlbnQoZS5qYXhpcy53aGljaCwgZS5qYXhpcy5heGlzLCBlLmpheGlzLnZhbHVlKTsKKyAg
ICByZXR1cm4gZS5qYXhpcy52YWx1ZTsKIH0KIAogdWludDhfdCBzZGxqb3lfY2hlY2tfaGF0
X21vdmVtZW50KFNETF9FdmVudCBlKQogewotICAgIHVpbnQ4X3QgY3VyLCBwcmV2OwotICAg
IGludCBpbmRleDsKLSAgICBVaW50OCBqb3ludW07Ci0gICAgVWludDggaGF0OwotICAgIFVp
bnQ4IHZhbHVlOwotCi0gICAgam95bnVtID0gc2Rsam95X2dldF9qb3ludW1fZm9yX2V2ZW50
KGUuamhhdC53aGljaCk7Ci0gICAgaGF0ID0gZS5qaGF0LmhhdDsKLSAgICB2YWx1ZSA9IGUu
amhhdC52YWx1ZTsKLQotICAgIGluZGV4ID0gaGF0ICogaW5wdXRfbXVsdFtIQVRdOwotICAg
IHByZXYgPSBzZGxqb3lzdGlja1tqb3ludW1dLmlucHV0W0hBVF1baW5kZXhdLnByZXY7Ci0K
LSAgICBpZiAodmFsdWUgPT0gcHJldikgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0K
LSAgICBjdXIgPSBzZGxqb3lfaGF0X2RpcmVjdGlvbih2YWx1ZSwgcHJldik7Ci0KLSAgICBz
ZGxqb3lzdGlja1tqb3ludW1dLmlucHV0W0hBVF1baW5kZXhdLnByZXYgPSB2YWx1ZTsKLSAg
ICByZXR1cm4gY3VyOworICAgIGpveV9oYXRfZXZlbnQoZS5qaGF0LndoaWNoLCBlLmpoYXQu
aGF0LCBlLmpoYXQudmFsdWUpOworICAgIHJldHVybiBlLmpoYXQudmFsdWU7CiB9CiAKLWlu
dCBzZGxqb3lfZ2V0X2pveW51bV9mb3JfZXZlbnQoVWludDggZXZlbnRfZGV2aWNlX2lkKQor
dm9pZCBzZGxqb3lfYXhpc19ldmVudChVaW50OCBqb3ludW0sIFVpbnQ4IGF4aXMsIFNpbnQx
NiB2YWx1ZSkKIHsKICAgICBpbnQgaTsKKyAgICBqb3lzdGlja19heGlzX3ZhbHVlX3QgY3Vy
LCBwcmV2OworICAgIGludCBpbmRleDsKKyAgICB1aV9tZW51X2FjdGlvbl90IHJldHZhbCA9
IE1FTlVfQUNUSU9OX05PTkU7CisgICAgU2ludDE2IHZhbCA9IH52YWx1ZTsKKworICAgIHBy
ZXYgPSBqb3lfYXhpc19wcmV2KGpveW51bSwgaW5kZXgpOworCisgICAgY3VyID0gc2Rsam95
X2F4aXNfZGlyZWN0aW9uKHZhbHVlLCBwcmV2KTsKICAgICAKLSAgICBmb3IgKGkgPSAwOyBp
IDwgbnVtX2pveXN0aWNrczsgaSsrKSB7Ci0gICAgICAgIGlmIChzZGxqb3lzdGlja1tpXS5q
b3lzdGlja2lkID09IGV2ZW50X2RldmljZV9pZCkgewotICAgICAgICAgICAgcmV0dXJuIGk7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIC0xOworICAgIGpveV9heGlz
X2V2ZW50KGpveW51bSwgYXhpcywgY3VyKTsKIH0KIAotdWlfbWVudV9hY3Rpb25fdCBzZGxq
b3lfYXhpc19ldmVudChVaW50OCBqb3ludW0sIFVpbnQ4IGF4aXMsIFNpbnQxNiB2YWx1ZSkK
K2pveXN0aWNrX2FjdGlvbl90IHNkbGpveV9heGlzX2V2ZW50X2Zvcl9tZW51X2FjdGlvbihV
aW50OCBqb3ludW0sIFVpbnQ4IGF4aXMsIFNpbnQxNiB2YWx1ZSkKIHsKICAgICBpbnQgaTsK
LSAgICB1aW50OF90IGN1ciwgcHJldjsKKyAgICBqb3lzdGlja19heGlzX3ZhbHVlX3QgY3Vy
LCBwcmV2OwogICAgIGludCBpbmRleDsKLSAgICB1aV9tZW51X2FjdGlvbl90IHJldHZhbCA9
IE1FTlVfQUNUSU9OX05PTkU7CisgICAgam95c3RpY2tfYWN0aW9uX3QgcmV0dmFsID0gTUVO
VV9BQ1RJT05fTk9ORTsKICAgICBTaW50MTYgdmFsID0gfnZhbHVlOworICAgIGpveXN0aWNr
X21hcHBpbmdfdCogbWFwcGluZzsKIAotICAgIGZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsK
LSAgICAgICAgaWYgKHNkbGpveXN0aWNrX2F4aXNfbWFwcGluZ1tpXSA9PSAoKGpveW51bSA8
PCA4KSB8IGF4aXMpKSB7Ci0gICAgICAgICAgICBqb3lzdGlja19zZXRfYXhpc192YWx1ZShp
LCAodWludDhfdCkoKHZhbCArIDMyNzY4KSA+PiA4KSk7Ci0gICAgICAgIH0KLSAgICB9Cisg
ICAgcHJldiA9IGpveV9heGlzX3ByZXYoam95bnVtLCBpbmRleCk7CiAKLSAgICBpbmRleCA9
IGF4aXMgKiBpbnB1dF9tdWx0W0FYSVNdOwotICAgIHByZXYgPSBzZGxqb3lzdGlja1tqb3lu
dW1dLmlucHV0W0FYSVNdW2luZGV4XS5wcmV2OwotCiAgICAgY3VyID0gc2Rsam95X2F4aXNf
ZGlyZWN0aW9uKHZhbHVlLCBwcmV2KTsKLQotICAgIGlmIChjdXIgPT0gcHJldikgewotICAg
ICAgICByZXR1cm4gcmV0dmFsOwotICAgIH0KLQotICAgIGlmIChjdXIgPT0gMSkgewotICAg
ICAgICBpZiAocHJldiA9PSAyKSB7Ci0gICAgICAgICAgICBzZGxqb3lfcGVyZm9ybV9ldmVu
dCgmKHNkbGpveXN0aWNrW2pveW51bV0uaW5wdXRbQVhJU11baW5kZXggKyAxXSksIDApOwot
ICAgICAgICB9Ci0gICAgICAgIHJldHZhbCA9IHNkbGpveV9wZXJmb3JtX2V2ZW50KCYoc2Rs
am95c3RpY2tbam95bnVtXS5pbnB1dFtBWElTXVtpbmRleF0pLCAxKTsKLSAgICB9IGVsc2Ug
aWYgKGN1ciA9PSAyKSB7Ci0gICAgICAgIGlmIChwcmV2ID09IDEpIHsKLSAgICAgICAgICAg
IHNkbGpveV9wZXJmb3JtX2V2ZW50KCYoc2Rsam95c3RpY2tbam95bnVtXS5pbnB1dFtBWElT
XVtpbmRleF0pLCAwKTsKLSAgICAgICAgfQotICAgICAgICByZXR2YWwgPSBzZGxqb3lfcGVy
Zm9ybV9ldmVudCgmKHNkbGpveXN0aWNrW2pveW51bV0uaW5wdXRbQVhJU11baW5kZXggKyAx
XSksIDEpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChwcmV2ID09IDEpIHsKLSAgICAg
ICAgICAgIHNkbGpveV9wZXJmb3JtX2V2ZW50KCYoc2Rsam95c3RpY2tbam95bnVtXS5pbnB1
dFtBWElTXVtpbmRleF0pLCAwKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHNk
bGpveV9wZXJmb3JtX2V2ZW50KCYoc2Rsam95c3RpY2tbam95bnVtXS5pbnB1dFtBWElTXVtp
bmRleCArIDFdKSwgMCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzZGxqb3lzdGlja1tq
b3ludW1dLmlucHV0W0FYSVNdW2luZGV4XS5wcmV2ID0gY3VyOwotICAgIHJldHVybiByZXR2
YWw7CisgICAgCisgICAgbWFwcGluZyA9IGpveV9nZXRfYXhpc19tYXBwaW5nKGpveW51bSwg
YXhpcywgY3VyKTsKKyAgICByZXR1cm4gc2Rsam95X3BlcmZvcm1fZXZlbnQobWFwcGluZywg
Y3VyKTsKIH0KIAotdWlfbWVudV9hY3Rpb25fdCBzZGxqb3lfYnV0dG9uX2V2ZW50KFVpbnQ4
IGpveW51bSwgVWludDggYnV0dG9uLCBVaW50OCB2YWx1ZSkKK2pveXN0aWNrX2FjdGlvbl90
IHNkbGpveV9idXR0b25fZXZlbnQoVWludDggam95bnVtLCBVaW50OCBidXR0b24sIFVpbnQ4
IHZhbHVlKQogewotICAgIHJldHVybiBzZGxqb3lfcGVyZm9ybV9ldmVudCgmKHNkbGpveXN0
aWNrW2pveW51bV0uaW5wdXRbQlVUVE9OXVtidXR0b25dKSwgdmFsdWUpOworICAgIGpveXN0
aWNrX21hcHBpbmdfdCogbWFwcGluZyA9IGpveV9nZXRfYnV0dG9uX21hcHBpbmcoam95bnVt
LCBidXR0b24pOworICAgIHJldHVybiBzZGxqb3lfcGVyZm9ybV9ldmVudChtYXBwaW5nLCB2
YWx1ZSk7CiB9CiAKLXVpX21lbnVfYWN0aW9uX3Qgc2Rsam95X2hhdF9ldmVudChVaW50OCBq
b3ludW0sIFVpbnQ4IGhhdCwgVWludDggdmFsdWUpCitqb3lzdGlja19hY3Rpb25fdCBzZGxq
b3lfaGF0X2V2ZW50KFVpbnQ4IGpveW51bSwgVWludDggaGF0LCBVaW50OCB2YWx1ZSkKIHsK
LSAgICB1aW50OF90IHByZXY7Ci0gICAgaW50IGluZGV4OwotICAgIHVpX21lbnVfYWN0aW9u
X3QgcmV0dmFsID0gTUVOVV9BQ1RJT05fTk9ORTsKLQotICAgIGluZGV4ID0gaGF0ICogaW5w
dXRfbXVsdFtIQVRdOwotICAgIHByZXYgPSBzZGxqb3lzdGlja1tqb3ludW1dLmlucHV0W0hB
VF1baW5kZXhdLnByZXY7Ci0KLSAgICBpZiAodmFsdWUgPT0gcHJldikgewotICAgICAgICBy
ZXR1cm4gcmV0dmFsOwotICAgIH0KLQotICAgIGlmICgodmFsdWUgJiBTRExfSEFUX1VQKSAm
JiAoIShwcmV2ICYgU0RMX0hBVF9VUCkpKSB7Ci0gICAgICAgIGlmIChwcmV2ICYgU0RMX0hB
VF9ET1dOKSB7Ci0gICAgICAgICAgICBzZGxqb3lfcGVyZm9ybV9ldmVudCgmKHNkbGpveXN0
aWNrW2pveW51bV0uaW5wdXRbSEFUXVtpbmRleCArIDFdKSwgMCk7Ci0gICAgICAgIH0KLSAg
ICAgICAgcmV0dmFsID0gc2Rsam95X3BlcmZvcm1fZXZlbnQoJihzZGxqb3lzdGlja1tqb3lu
dW1dLmlucHV0W0hBVF1baW5kZXhdKSwgMSk7Ci0gICAgfSBlbHNlIGlmICgodmFsdWUgJiBT
RExfSEFUX0RPV04pICYmICghKHByZXYgJiBTRExfSEFUX0RPV04pKSkgewotICAgICAgICBp
ZiAocHJldiAmIFNETF9IQVRfVVApIHsKLSAgICAgICAgICAgIHNkbGpveV9wZXJmb3JtX2V2
ZW50KCYoc2Rsam95c3RpY2tbam95bnVtXS5pbnB1dFtIQVRdW2luZGV4XSksIDApOwotICAg
ICAgICB9Ci0gICAgICAgIHJldHZhbCA9IHNkbGpveV9wZXJmb3JtX2V2ZW50KCYoc2Rsam95
c3RpY2tbam95bnVtXS5pbnB1dFtIQVRdW2luZGV4ICsgMV0pLCAxKTsKLSAgICB9IGVsc2Ug
ewotICAgICAgICBpZiAoKCEodmFsdWUgJiBTRExfSEFUX1VQKSkgJiYgKHByZXYgJiBTRExf
SEFUX1VQKSkgewotICAgICAgICAgICAgc2Rsam95X3BlcmZvcm1fZXZlbnQoJihzZGxqb3lz
dGlja1tqb3ludW1dLmlucHV0W0hBVF1baW5kZXhdKSwgMCk7Ci0gICAgICAgIH0gZWxzZSBp
ZiAoKCEodmFsdWUgJiBTRExfSEFUX0RPV04pKSAmJiAocHJldiAmIFNETF9IQVRfRE9XTikp
IHsKLSAgICAgICAgICAgIHNkbGpveV9wZXJmb3JtX2V2ZW50KCYoc2Rsam95c3RpY2tbam95
bnVtXS5pbnB1dFtIQVRdW2luZGV4ICsgMV0pLCAwKTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIC8qIFRPRE8gYSByZXR2YWwgaXMgbWlzc2VkIG9uIHNpbXVsdGFuZW91cyBYL1kgZXZl
bnRzICovCi0gICAgaWYgKCh2YWx1ZSAmIFNETF9IQVRfTEVGVCkgJiYgKCEocHJldiAmIFNE
TF9IQVRfTEVGVCkpKSB7Ci0gICAgICAgIGlmIChwcmV2ICYgU0RMX0hBVF9SSUdIVCkgewot
ICAgICAgICAgICAgc2Rsam95X3BlcmZvcm1fZXZlbnQoJihzZGxqb3lzdGlja1tqb3ludW1d
LmlucHV0W0hBVF1baW5kZXggKyAzXSksIDApOwotICAgICAgICB9Ci0gICAgICAgIHJldHZh
bCA9IHNkbGpveV9wZXJmb3JtX2V2ZW50KCYoc2Rsam95c3RpY2tbam95bnVtXS5pbnB1dFtI
QVRdW2luZGV4ICsgMl0pLCAxKTsKLSAgICB9IGVsc2UgaWYgKCh2YWx1ZSAmIFNETF9IQVRf
UklHSFQpICYmICghKHByZXYgJiBTRExfSEFUX1JJR0hUKSkpIHsKLSAgICAgICAgaWYgKHBy
ZXYgJiBTRExfSEFUX0xFRlQpIHsKLSAgICAgICAgICAgIHNkbGpveV9wZXJmb3JtX2V2ZW50
KCYoc2Rsam95c3RpY2tbam95bnVtXS5pbnB1dFtIQVRdW2luZGV4ICsgMl0pLCAwKTsKLSAg
ICAgICAgfQotICAgICAgICByZXR2YWwgPSBzZGxqb3lfcGVyZm9ybV9ldmVudCgmKHNkbGpv
eXN0aWNrW2pveW51bV0uaW5wdXRbSEFUXVtpbmRleCArIDNdKSwgMSk7Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgaWYgKCghKHZhbHVlICYgU0RMX0hBVF9MRUZUKSkgJiYgKHByZXYgJiBT
RExfSEFUX0xFRlQpKSB7Ci0gICAgICAgICAgICBzZGxqb3lfcGVyZm9ybV9ldmVudCgmKHNk
bGpveXN0aWNrW2pveW51bV0uaW5wdXRbSEFUXVtpbmRleCArIDJdKSwgMCk7Ci0gICAgICAg
IH0gZWxzZSBpZiAoKCEodmFsdWUgJiBTRExfSEFUX1JJR0hUKSkgJiYgKHByZXYgJiBTRExf
SEFUX1JJR0hUKSkgewotICAgICAgICAgICAgc2Rsam95X3BlcmZvcm1fZXZlbnQoJihzZGxq
b3lzdGlja1tqb3ludW1dLmlucHV0W0hBVF1baW5kZXggKyAzXSksIDApOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgc2Rsam95c3RpY2tbam95bnVtXS5pbnB1dFtIQVRdW2luZGV4XS5w
cmV2ID0gdmFsdWU7Ci0gICAgcmV0dXJuIHJldHZhbDsKKyAgICBqb3lzdGlja19tYXBwaW5n
X3QqIG1hcHBpbmcgPSBqb3lfZ2V0X2hhdF9tYXBwaW5nKGpveW51bSwgaGF0LCB2YWx1ZSk7
CisgICAgcmV0dXJuIHNkbGpveV9wZXJmb3JtX2V2ZW50KG1hcHBpbmcsIDEpOwogfQogCiAv
KiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC0xMzc5LDE0ICs1MTEsMTMgQEAKIH0KICNl
bmRpZgogCi12b2lkIHNkbGpveV9zZXRfam95c3RpY2soU0RMX0V2ZW50IGUsIGludCBwb3J0
LCBpbnQgYml0cykKK3ZvaWQgc2Rsam95X3NldF9qb3lzdGljayhTRExfRXZlbnQgZSwgaW50
IGJpdHMpCiB7Ci0gICAgc2Rsam95c3RpY2tfbWFwcGluZ190ICpqb3lldmVudCA9IHNkbGpv
eV9nZXRfbWFwcGluZyhlKTsKLQorICAgIGpveXN0aWNrX21hcHBpbmdfdCAqam95ZXZlbnQg
PSBzZGxqb3lfZ2V0X21hcHBpbmcoZSk7CisgCiAgICAgaWYgKGpveWV2ZW50ICE9IE5VTEwp
IHsKICAgICAgICAgam95ZXZlbnQtPmFjdGlvbiA9IEpPWVNUSUNLOwotICAgICAgICBqb3ll
dmVudC0+dmFsdWUuam95WzBdID0gKHVpbnQxNl90KXBvcnQ7Ci0gICAgICAgIGpveWV2ZW50
LT52YWx1ZS5qb3lbMV0gPSAodWludDE2X3QpYml0czsKKyAgICAgICAgam95ZXZlbnQtPnZh
bHVlLmpveV9waW4gPSAodWludDE2X3QpYml0czsKICAgICB9CiB9CiAKQEAgLTEzOTMsMjgg
KzUyNCwyNSBAQAogdm9pZCBzZGxqb3lfc2V0X2pveXN0aWNrX2F4aXMoU0RMX0V2ZW50IGUs
IGludCBwb3J0LCBpbnQgcG90KQogewogICAgIGludCBpbmRleCA9IChwb3J0IDw8IDEpIHwg
cG90OworICAgIHVpbnQ4X3Qgc3RpY2sgPSBlLmpheGlzLndoaWNoOwogICAgIHVpbnQ4X3Qg
YXhpcyA9IGUuamF4aXMuYXhpczsKLSAgICBzZGxqb3lzdGlja19tYXBwaW5nX3QgKmpveWV2
ZW50ID0gc2Rsam95X2dldF9tYXBwaW5nKGUpOwotICAgIGludCBqb3ludW0gPSBzZGxqb3lf
Z2V0X2pveW51bV9mb3JfZXZlbnQoZS5qYXhpcy53aGljaCk7Ci0gICAgCi0gICAgaWYgKGpv
eW51bSA9PSAtMSkgewotICAgICAgICByZXR1cm47Ci0gICAgfQotCisgICAgam95c3RpY2tf
bWFwcGluZ190ICpqb3lldmVudCA9IHNkbGpveV9nZXRfbWFwcGluZyhlKTsKKyAKICAgICBp
ZiAoam95ZXZlbnQgIT0gTlVMTCkgewogICAgICAgICBqb3lldmVudC0+YWN0aW9uID0gUE9U
X0FYSVM7Ci0gICAgICAgIGpveWV2ZW50LT52YWx1ZS5heGlzWzBdID0gKHVpbnQxNl90KXBv
cnQ7CiAgICAgICAgIGpveWV2ZW50LT52YWx1ZS5heGlzWzFdID0gKHVpbnQxNl90KXBvdDsK
ICAgICB9CiAKICAgICBpZiAoaW5kZXggPD0gMykgewotICAgICAgICBzZGxqb3lzdGlja19h
eGlzX21hcHBpbmdbaW5kZXhdID0gKGpveW51bSA8PCA4KSB8IGF4aXM7CisgICAgICAgIHNk
bGpveXN0aWNrX2F4aXNfbWFwcGluZ1tpbmRleF0gPSAoc3RpY2sgPDwgOCkgfCBheGlzOwog
ICAgIH0KIH0KIAorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKIHZvaWQgc2Rsam95X3Nl
dF9ob3RrZXkoU0RMX0V2ZW50IGUsIHVpX21lbnVfZW50cnlfdCAqdmFsdWUpCiB7Ci0gICAg
c2Rsam95c3RpY2tfbWFwcGluZ190ICpqb3lldmVudCA9IHNkbGpveV9nZXRfbWFwcGluZyhl
KTsKKyAgICBqb3lzdGlja19tYXBwaW5nX3QgKmpveWV2ZW50ID0gc2Rsam95X2dldF9tYXBw
aW5nKGUpOwogCiAgICAgaWYgKGpveWV2ZW50ICE9IE5VTEwpIHsKICAgICAgICAgam95ZXZl
bnQtPmFjdGlvbiA9IFVJX0ZVTkNUSU9OOwpAQCAtMTQyNCw3ICs1NTIsNyBAQAogCiB2b2lk
IHNkbGpveV9zZXRfa2V5cHJlc3MoU0RMX0V2ZW50IGUsIGludCByb3csIGludCBjb2wpCiB7
Ci0gICAgc2Rsam95c3RpY2tfbWFwcGluZ190ICpqb3lldmVudCA9IHNkbGpveV9nZXRfbWFw
cGluZyhlKTsKKyAgICBqb3lzdGlja19tYXBwaW5nX3QgKmpveWV2ZW50ID0gc2Rsam95X2dl
dF9tYXBwaW5nKGUpOwogCiAgICAgaWYgKGpveWV2ZW50ICE9IE5VTEwpIHsKICAgICAgICAg
am95ZXZlbnQtPmFjdGlvbiA9IEtFWUJPQVJEOwpAQCAtMTQzMywxOCArNTYxLDkgQEAKICAg
ICB9CiB9CiAKLXZvaWQgc2Rsam95X3NldF9leHRyYShTRExfRXZlbnQgZSwgaW50IHR5cGUp
Ci17Ci0gICAgc2Rsam95c3RpY2tfbWFwcGluZ190ICpqb3lldmVudCA9IHNkbGpveV9nZXRf
bWFwcGluZyhlKTsKLQotICAgIGlmIChqb3lldmVudCAhPSBOVUxMKSB7Ci0gICAgICAgIGpv
eWV2ZW50LT5hY3Rpb24gPSB0eXBlID8gTUFQIDogVUlfQUNUSVZBVEU7Ci0gICAgfQotfQot
CiB2b2lkIHNkbGpveV91bnNldChTRExfRXZlbnQgZSkKIHsKLSAgICBzZGxqb3lzdGlja19t
YXBwaW5nX3QgKmpveWV2ZW50ID0gc2Rsam95X2dldF9tYXBwaW5nKGUpOworICAgIGpveXN0
aWNrX21hcHBpbmdfdCAqam95ZXZlbnQgPSBzZGxqb3lfZ2V0X21hcHBpbmcoZSk7CiAKICAg
ICBpZiAoam95ZXZlbnQgIT0gTlVMTCkgewogICAgICAgICBqb3lldmVudC0+YWN0aW9uID0g
Tk9ORTsKQEAgLTE0NTMsMzcgKzU3MiwxNiBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
ICovCiAKLXN0YXRpYyBpbnQgX3NkbGpveV9zd2FwX3BvcnRzID0gMDsKLQogdm9pZCBzZGxq
b3lfc3dhcF9wb3J0cyh2b2lkKQogewogICAgIGludCBpLCBrOwotICAgIHNkbGpveXN0aWNr
X2lucHV0X3QgajsKIAogICAgIHJlc291cmNlc19nZXRfaW50KCJKb3lEZXZpY2UxIiwgJmkp
OwogICAgIHJlc291cmNlc19nZXRfaW50KCJKb3lEZXZpY2UyIiwgJmspOwogICAgIHJlc291
cmNlc19zZXRfaW50KCJKb3lEZXZpY2UxIiwgayk7CiAgICAgcmVzb3VyY2VzX3NldF9pbnQo
IkpveURldmljZTIiLCBpKTsKLSAgICBfc2Rsam95X3N3YXBfcG9ydHMgXj0gMTsKLQotICAg
IGZvciAoaSA9IDA7IGkgPCBudW1fam95c3RpY2tzOyArK2kpIHsKLSAgICAgICAgZm9yIChq
ID0gQVhJUzsgaiA8IE5VTV9JTlBVVF9UWVBFUzsgKytqKSB7Ci0gICAgICAgICAgICBmb3Ig
KGsgPSAwOyBrIDwgc2Rsam95c3RpY2tbaV0uaW5wdXRfbWF4W2pdICogaW5wdXRfbXVsdFtq
XTsgKytrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHNkbGpveXN0aWNrW2ldLmlucHV0W2pd
W2tdLmFjdGlvbiA9PSBKT1lTVElDSykgewotICAgICAgICAgICAgICAgICAgICBzZGxqb3lz
dGlja1tpXS5pbnB1dFtqXVtrXS52YWx1ZS5qb3lbMF0gXj0gMTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9CiB9CiAKLWludCBzZGxqb3lf
Z2V0X3N3YXBfcG9ydHModm9pZCkgCi17Ci0gICAgcmV0dXJuIF9zZGxqb3lfc3dhcF9wb3J0
czsKLX0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCiAjZWxzZQogLyogIUhBVkVf
U0RMX05VTUpPWVNUSUNLUyAqLwogCkluZGV4OiBkZXYvdmljZS90cnVuay9zcmMvYXJjaC9z
ZGwvam95LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gZGV2L3ZpY2UvdHJ1bmsvc3JjL2FyY2gvc2Rs
L2pveS5oCShyZXZpc2lvbmUgNDEzNDgpCisrKyBkZXYvdmljZS90cnVuay9zcmMvYXJjaC9z
ZGwvam95LmgJKGNvcGlhIGRpIGxhdm9ybykKQEAgLTQwLDE5ICs0MCwyMSBAQAogZXh0ZXJu
IHZvaWQgam95c3RpY2tfY2xvc2Uodm9pZCk7CiBleHRlcm4gdm9pZCBqb3lzdGljayh2b2lk
KTsKIAotZXh0ZXJuIHZvaWQgam95X2FyY2hfcmVzb3VyY2VzX3NodXRkb3duKHZvaWQpOwor
I2lmZGVmIEhBVkVfU0RMX05VTUpPWVNUSUNLUworc3RydWN0IGpveXN0aWNrX21hcHBpbmdf
czsKK2VudW0gam95c3RpY2tfYWN0aW9uX2U7CiAKLSNpZmRlZiBIQVZFX1NETF9OVU1KT1lT
VElDS1MKIGV4dGVybiB2b2lkIGpveV9hcmNoX2luaXRfZGVmYXVsdF9tYXBwaW5nKGludCBq
b3ludW0pOwogZXh0ZXJuIGludCBqb3lfYXJjaF9tYXBwaW5nX2xvYWQoY29uc3QgY2hhciAq
ZmlsZW5hbWUpOwogZXh0ZXJuIGludCBqb3lfYXJjaF9tYXBwaW5nX2R1bXAoY29uc3QgY2hh
ciAqZmlsZW5hbWUpOwotZXh0ZXJuIHVpX21lbnVfYWN0aW9uX3Qgc2Rsam95X2F4aXNfZXZl
bnQoVWludDggam95bnVtLCBVaW50OCBheGlzLCBTaW50MTYgdmFsdWUpOwotZXh0ZXJuIHVp
X21lbnVfYWN0aW9uX3Qgc2Rsam95X2J1dHRvbl9ldmVudChVaW50OCBqb3ludW0sIFVpbnQ4
IGJ1dHRvbiwgVWludDggdmFsdWUpOwotZXh0ZXJuIHVpX21lbnVfYWN0aW9uX3Qgc2Rsam95
X2hhdF9ldmVudChVaW50OCBqb3ludW0sIFVpbnQ4IGhhdCwgVWludDggdmFsdWUpOworZXh0
ZXJuIHZvaWQgc2Rsam95X2F4aXNfZXZlbnQoVWludDggam95bnVtLCBVaW50OCBheGlzLCBT
aW50MTYgdmFsdWUpOworZXh0ZXJuIGVudW0gam95c3RpY2tfYWN0aW9uX2Ugc2Rsam95X2J1
dHRvbl9ldmVudChVaW50OCBqb3ludW0sIFVpbnQ4IGJ1dHRvbiwgVWludDggdmFsdWUpOwor
ZXh0ZXJuIGVudW0gam95c3RpY2tfYWN0aW9uX2Ugc2Rsam95X2hhdF9ldmVudChVaW50OCBq
b3ludW0sIFVpbnQ4IGhhdCwgVWludDggdmFsdWUpOworZXh0ZXJuIGVudW0gam95c3RpY2tf
YWN0aW9uX2Ugc2Rsam95X2F4aXNfZXZlbnRfZm9yX21lbnVfYWN0aW9uKFVpbnQ4IGpveW51
bSwgVWludDggYXhpcywgU2ludDE2IHZhbHVlKTsKIGV4dGVybiB1aV9tZW51X2FjdGlvbl90
IHNkbGpveV9hdXRvcmVwZWF0KHZvaWQpOwogZXh0ZXJuIHVpbnQ4X3Qgc2Rsam95X2NoZWNr
X2F4aXNfbW92ZW1lbnQoU0RMX0V2ZW50IGUpOwogZXh0ZXJuIHVpbnQ4X3Qgc2Rsam95X2No
ZWNrX2hhdF9tb3ZlbWVudChTRExfRXZlbnQgZSk7Ci1leHRlcm4gdm9pZCBzZGxqb3lfc2V0
X2pveXN0aWNrKFNETF9FdmVudCBlLCBpbnQgcG9ydCwgaW50IGJpdHMpOworZXh0ZXJuIHZv
aWQgc2Rsam95X3NldF9qb3lzdGljayhTRExfRXZlbnQgZSwgaW50IGJpdHMpOwogZXh0ZXJu
IHZvaWQgc2Rsam95X3NldF9ob3RrZXkoU0RMX0V2ZW50IGUsIHVpX21lbnVfZW50cnlfdCAq
dmFsdWUpOwogZXh0ZXJuIHZvaWQgc2Rsam95X3NldF9rZXlwcmVzcyhTRExfRXZlbnQgZSwg
aW50IHJvdywgaW50IGNvbCk7CiBleHRlcm4gdm9pZCBzZGxqb3lfc2V0X2V4dHJhKFNETF9F
dmVudCBlLCBpbnQgdHlwZSk7CkBAIC02MCw4ICs2Miw4IEBACiBleHRlcm4gdm9pZCBzZGxq
b3lfc2V0X2pveXN0aWNrX2F4aXMoU0RMX0V2ZW50IGUsIGludCBwb3J0LCBpbnQgcG90KTsK
IGV4dGVybiBjaGFyICpnZXRfam95X3Bpbl9tYXBwaW5nX3N0cmluZyhpbnQgam95LCBpbnQg
cGluKTsKIGV4dGVybiBjaGFyICpnZXRfam95X3BvdF9tYXBwaW5nX3N0cmluZyhpbnQgam95
bnIsIGludCBwb3QpOwotZXh0ZXJuIHZvaWQgc2Rsam95X2RlbGV0ZV9waW5fbWFwcGluZyhp
bnQgcG9ydCwgaW50IHBpbik7Ci1leHRlcm4gdm9pZCBzZGxqb3lfZGVsZXRlX3BvdF9tYXBw
aW5nKGludCBwb3J0LCBpbnQgcG90KTsKK2V4dGVybiB2b2lkIHNkbGpveV9kZWxldGVfcGlu
X21hcHBpbmcoaW50IHBpbik7CitleHRlcm4gdm9pZCBzZGxqb3lfZGVsZXRlX3BvdF9tYXBw
aW5nKGludCBwb3QpOwogZXh0ZXJuIGludCBzZGxqb3lfZ2V0X2pveW51bV9mb3JfZXZlbnQo
VWludDggZXZlbnRfZGV2aWNlX2lkKTsKIGV4dGVybiBpbnQgc2Rsam95X3Jlc2Nhbih2b2lk
KTsKIApJbmRleDogZGV2L3ZpY2UvdHJ1bmsvc3JjL2FyY2gvc2RsL2tiZC5jCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIGRldi92aWNlL3RydW5rL3NyYy9hcmNoL3NkbC9rYmQuYwkocmV2aXNpb25l
IDQxMzQ4KQorKysgZGV2L3ZpY2UvdHJ1bmsvc3JjL2FyY2gvc2RsL2tiZC5jCShjb3BpYSBk
aSBsYXZvcm8pCkBAIC00NzQsNyArNDc0LDcgQEAKICAgICByZXR1cm4gcmV0OwogfQogCi11
aV9tZW51X2FjdGlvbl90IHNkbGtiZF9wcmVzcyhTRExLZXkga2V5LCBTRExNb2QgbW9kKQor
dm9pZCBzZGxrYmRfcHJlc3MoU0RMS2V5IGtleSwgU0RMTW9kIG1vZCkKIHsKICAgICB1aV9t
ZW51X2FjdGlvbl90IGksIHJldHZhbCA9IE1FTlVfQUNUSU9OX05PTkU7CiAgICAgdWlfbWVu
dV9lbnRyeV90ICpob3RrZXlfYWN0aW9uID0gTlVMTDsKQEAgLTUwMCwzNiArNTAwLDIwIEBA
CiAgICAgfQogI2VuZGlmCiAKLSAgICBpZiAoc2RsX21lbnVfc3RhdGUgfHwgKHNkbF92a2Jk
X3N0YXRlICYgU0RMX1ZLQkRfQUNUSVZFKSkgewotICAgICAgICBpZiAoa2V5ICE9IFNETEtf
VU5LTk9XTikgewotICAgICAgICAgICAgZm9yIChpID0gTUVOVV9BQ1RJT05fVVA7IGkgPCBN
RU5VX0FDVElPTl9OVU07ICsraSkgewotICAgICAgICAgICAgICAgIGlmIChzZGxfdWlfbWVu
dWtleXNbaV0gPT0gKGludClrZXkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dmFsID0g
aTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgaWYgKChpbnQpKGtleSkgPT0gc2RsX3VpX21lbnVr
ZXlzWzBdKSB7Ci0gICAgICAgICAgICAgICAgcmV0dmFsID0gTUVOVV9BQ1RJT05fRVhJVDsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcmV0dmFsOwotICAg
IH0KLQogICAgIGlmICgoaW50KShrZXkpID09IHNkbF91aV9tZW51a2V5c1swXSkgewogICAg
ICAgICBzZGxfdWlfYWN0aXZhdGUoKTsKLSAgICAgICAgcmV0dXJuIHJldHZhbDsKKyAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmICgoaG90a2V5X2FjdGlvbiA9IHNkbGtiZF9n
ZXRfaG90a2V5KGtleSwgbW9kKSkgIT0gTlVMTCkgewogICAgICAgICBzZGxfdWlfaG90a2V5
KGhvdGtleV9hY3Rpb24pOwotICAgICAgICByZXR1cm4gcmV0dmFsOworICAgICAgICByZXR1
cm47CiAgICAgfQogCiAgICAga2V5Ym9hcmRfa2V5X3ByZXNzZWQoKHVuc2lnbmVkIGxvbmcp
a2V5LCBzZGxrYmRfZ2V0X21vZGlmaWVyKG1vZCkpOwotICAgIHJldHVybiByZXR2YWw7CiB9
CiAKLXVpX21lbnVfYWN0aW9uX3Qgc2Rsa2JkX3JlbGVhc2UoU0RMS2V5IGtleSwgU0RMTW9k
IG1vZCkKK3ZvaWQgc2Rsa2JkX3JlbGVhc2UoU0RMS2V5IGtleSwgU0RMTW9kIG1vZCkKIHsK
ICAgICB1aV9tZW51X2FjdGlvbl90IGksIHJldHZhbCA9IE1FTlVfQUNUSU9OX05PTkVfUkVM
RUFTRTsKIApAQCAtNTQ5LDcgKzUzMywxOCBAQAogICAgIH0KICNlbmRpZgogCi0gICAgaWYg
KHNkbF92a2JkX3N0YXRlICYgU0RMX1ZLQkRfQUNUSVZFKSB7CisgICAga2V5Ym9hcmRfa2V5
X3JlbGVhc2VkKCh1bnNpZ25lZCBsb25nKWtleSwgc2Rsa2JkX2dldF9tb2RpZmllcihtb2Qp
KTsKK30KKwordWlfbWVudV9hY3Rpb25fdCBzZGxrYmRfcHJlc3NfZm9yX21lbnVfYWN0aW9u
KFNETEtleSBrZXksIFNETE1vZCBtb2QpCit7CisgICAgdWlfbWVudV9hY3Rpb25fdCBpLCBy
ZXR2YWwgPSBNRU5VX0FDVElPTl9OT05FOworICAgIHVpX21lbnVfZW50cnlfdCAqaG90a2V5
X2FjdGlvbiA9IE5VTEw7CisKKyNpZmRlZiBTRExfREVCVUcKKyAgICBsb2dfZGVidWcoIiVz
OiAlaSAoJXMpLCUwNHgiLCBfX2Z1bmNfXywga2V5LCBTRExfR2V0S2V5TmFtZShrZXkpLCBt
b2QpOworI2VuZGlmCisKICAgICAgICAgaWYgKGtleSAhPSBTRExLX1VOS05PV04pIHsKICAg
ICAgICAgICAgIGZvciAoaSA9IE1FTlVfQUNUSU9OX1VQOyBpIDwgTUVOVV9BQ1RJT05fTlVN
OyArK2kpIHsKICAgICAgICAgICAgICAgICBpZiAoc2RsX3VpX21lbnVrZXlzW2ldID09IChp
bnQpa2V5KSB7CkBAIC01NTcsMTIgKzU1MiwzMCBAQAogICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBp
ZiAoKGludCkoa2V5KSA9PSBzZGxfdWlfbWVudWtleXNbMF0pIHsKKyAgICAgICAgICAgICAg
ICByZXR2YWwgPSBNRU5VX0FDVElPTl9FWElUOworICAgICAgICAgICAgfQogICAgICAgICB9
CisgICAgICAgIHJldHVybiByZXR2YWw7Cit9CisKK3VpX21lbnVfYWN0aW9uX3Qgc2Rsa2Jk
X3JlbGVhc2VfZm9yX21lbnVfYWN0aW9uKFNETEtleSBrZXksIFNETE1vZCBtb2QpCit7Cisg
ICAgdWlfbWVudV9hY3Rpb25fdCBpLCByZXR2YWwgPSBNRU5VX0FDVElPTl9OT05FX1JFTEVB
U0U7CisKKyNpZmRlZiBTRExfREVCVUcKKyAgICBsb2dfZGVidWcoIiVzOiAlaSAoJXMpLCUw
NHgiLCBfX2Z1bmNfXywga2V5LCBTRExfR2V0S2V5TmFtZShrZXkpLCBtb2QpOworI2VuZGlm
CisKKyAgICAgICAgaWYgKGtleSAhPSBTRExLX1VOS05PV04pIHsKKyAgICAgICAgICAgIGZv
ciAoaSA9IE1FTlVfQUNUSU9OX1VQOyBpIDwgTUVOVV9BQ1RJT05fTlVNOyArK2kpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoc2RsX3VpX21lbnVrZXlzW2ldID09IChpbnQpa2V5KSB7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHZhbCA9IGk7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAg
ICAgICByZXR1cm4gcmV0dmFsICsgTUVOVV9BQ1RJT05fTk9ORV9SRUxFQVNFOwotICAgIH0K
LQotICAgIGtleWJvYXJkX2tleV9yZWxlYXNlZCgodW5zaWduZWQgbG9uZylrZXksIHNkbGti
ZF9nZXRfbW9kaWZpZXIobW9kKSk7Ci0gICAgcmV0dXJuIHJldHZhbDsKIH0KIAogLyogLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tICovCkluZGV4OiBkZXYvdmljZS90cnVuay9zcmMvYXJjaC9zZGwv
a2JkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gZGV2L3ZpY2UvdHJ1bmsvc3JjL2FyY2gvc2RsL2ti
ZC5oCShyZXZpc2lvbmUgNDEzNDgpCisrKyBkZXYvdmljZS90cnVuay9zcmMvYXJjaC9zZGwv
a2JkLmgJKGNvcGlhIGRpIGxhdm9ybykKQEAgLTc2LDggKzc2LDEwIEBACiBleHRlcm4gU0RM
S2V5IFNETDJ4X3RvX1NETDF4X0tleXMoU0RMS2V5IGtleSk7CiBleHRlcm4gU0RMS2V5IFNE
TDF4X3RvX1NETDJ4X0tleXMoU0RMS2V5IGtleSk7CiAKLWV4dGVybiB1aV9tZW51X2FjdGlv
bl90IHNkbGtiZF9wcmVzcyhTRExLZXkga2V5LCBTRExNb2QgbW9kKTsKLWV4dGVybiB1aV9t
ZW51X2FjdGlvbl90IHNkbGtiZF9yZWxlYXNlKFNETEtleSBrZXksIFNETE1vZCBtb2QpOwor
ZXh0ZXJuIHZvaWQgc2Rsa2JkX3ByZXNzKFNETEtleSBrZXksIFNETE1vZCBtb2QpOworZXh0
ZXJuIHZvaWQgc2Rsa2JkX3JlbGVhc2UoU0RMS2V5IGtleSwgU0RMTW9kIG1vZCk7Cit1aV9t
ZW51X2FjdGlvbl90IHNkbGtiZF9wcmVzc19mb3JfbWVudV9hY3Rpb24oU0RMS2V5IGtleSwg
U0RMTW9kIG1vZCk7Cit1aV9tZW51X2FjdGlvbl90IHNkbGtiZF9yZWxlYXNlX2Zvcl9tZW51
X2FjdGlvbihTRExLZXkga2V5LCBTRExNb2QgbW9kKTsKIAogZXh0ZXJuIHZvaWQgc2Rsa2Jk
X3NldF9ob3RrZXkoU0RMS2V5IGtleSwgU0RMTW9kIG1vZCwgdWlfbWVudV9lbnRyeV90ICp2
YWx1ZSk7CiAKSW5kZXg6IGRldi92aWNlL3RydW5rL3NyYy9hcmNoL3NkbC9tZW51X2pveXN0
aWNrLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gZGV2L3ZpY2UvdHJ1bmsvc3JjL2FyY2gvc2RsL21l
bnVfam95c3RpY2suYwkocmV2aXNpb25lIDQxMzQ4KQorKysgZGV2L3ZpY2UvdHJ1bmsvc3Jj
L2FyY2gvc2RsL21lbnVfam95c3RpY2suYwkoY29waWEgZGkgbGF2b3JvKQpAQCAtMzQ1LDE5
ICszNDUsOSBAQAogICAgIGlmIChhY3RpdmF0ZWQpIHsKICAgICAgICAgc2Rsam95X3N3YXBf
cG9ydHMoKTsKICAgICB9Ci0gICAgcmV0dXJuIHNkbGpveV9nZXRfc3dhcF9wb3J0cygpID8g
TUVOVV9DSEVDS01BUktfQ0hFQ0tFRF9TVFJJTkcgOiBOVUxMOworICAgIHJldHVybiAwOwog
fQogCi0jaWZkZWYgVVNFX1NETFVJMgotc3RhdGljIFVJX01FTlVfQ0FMTEJBQ0soY3VzdG9t
X3Jlc2Nhbl9qb3lfY2FsbGJhY2spCi17Ci0gICAgaWYgKGFjdGl2YXRlZCkgewotICAgICAg
ICBzZGxqb3lfcmVzY2FuKCk7Ci0gICAgfQotICAgIHJldHVybiBOVUxMOwotfQotI2VuZGlm
Ci0KIHN0YXRpYyBVSV9NRU5VX0NBTExCQUNLKGN1c3RvbV9rZXlzZXRfY2FsbGJhY2spCiB7
CiAgICAgU0RMX0V2ZW50IGU7CkBAIC00ODEsNyArNDcxLDIwIEBACiB9OwogCiAjaWZkZWYg
SEFWRV9TRExfTlVNSk9ZU1RJQ0tTCi1zdGF0aWMgY29uc3QgY2hhciAqam95X3BpbltKT1lQ
T1JUX01BWF9QT1JUU11bSk9ZUE9SVF9NQVhfUElOU107CitzdGF0aWMgY29uc3QgY2hhciAq
am95X3BpbltdID0geworICAgICJVcCIsCisgICAgIkRvd24iLAorICAgICJMZWZ0IiwKKyAg
ICAiUmlnaHQiLAorICAgICJGaXJlIChvciBTTkVTLUEpIiwKKyAgICAiRmlyZSAyIChvciBT
TkVTLUIpIiwKKyAgICAiRmlyZSAzIChvciBTTkVTLVgpIiwKKyAgICAiRmlyZSA0IChTTkVT
LVkpIiwKKyAgICAiRmlyZSA1IChTTkVTLUxCKSIsCisgICAgIkZpcmUgNiAoU05FUy1SQiki
LAorICAgICJGaXJlIDcgKFNORVMtU0VMRUNUKSIsCisgICAgIkZpcmUgOCAoU05FUy1TVEFS
VCkiCit9OwogCiBzdGF0aWMgY29uc3QgY2hhciAqam95X3BvdFtdID0gewogICAgICJQb3Qt
WCIsCkBAIC00OTgsNyArNTAxLDcgQEAKICAgICBwb3J0ID0gKHZpY2VfcHRyX3RvX2ludChw
YXJhbSkpID4+IDU7CiAKICAgICBpZiAoYWN0aXZhdGVkKSB7Ci0gICAgICAgIHRhcmdldCA9
IGxpYl9tc3ByaW50ZigiUG9ydCAlaSAlcyAocHJlc3MgZGVsIHRvIGNsZWFyKSIsIHBvcnQg
KyAxLCBqb3lfcGluW3BvcnRdW3Bpbl0pOworICAgICAgICB0YXJnZXQgPSBsaWJfbXNwcmlu
dGYoIlBvcnQgJWkgJXMiLCBwb3J0ICsgMSwgam95X3BpbltwaW5dKTsKICAgICAgICAgZSA9
IHNkbF91aV9wb2xsX2V2ZW50KCJqb3lzdGljayIsIHRhcmdldCwgU0RMX1BPTExfSk9ZU1RJ
Q0sgfCBTRExfUE9MTF9LRVlCT0FSRCwgNSk7CiAgICAgICAgIGxpYl9mcmVlKHRhcmdldCk7
CiAKQEAgLTUwNiwxMSArNTA5LDExIEBACiAgICAgICAgICAgICBjYXNlIFNETF9KT1lBWElT
TU9USU9OOgogICAgICAgICAgICAgY2FzZSBTRExfSk9ZQlVUVE9ORE9XTjoKICAgICAgICAg
ICAgIGNhc2UgU0RMX0pPWUhBVE1PVElPTjoKLSAgICAgICAgICAgICAgICBzZGxqb3lfc2V0
X2pveXN0aWNrKGUsIHBvcnQsIDEgPDwgcGluKTsKKyAgICAgICAgICAgICAgICBzZGxqb3lf
c2V0X2pveXN0aWNrKGUsIDEgPDwgcGluKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIGNhc2UgU0RMX0tFWURPV046CiAgICAgICAgICAgICAgICAgaWYgKGUua2V5
LmtleXN5bS5zeW0gPT0gU0RMS19ERUxFVEUgfHwgZS5rZXkua2V5c3ltLnN5bSA9PSBTRExL
X0JBQ0tTUEFDRSkgewotICAgICAgICAgICAgICAgICAgICBzZGxqb3lfZGVsZXRlX3Bpbl9t
YXBwaW5nKHBvcnQsIDEgPDwgcGluKTsKKyAgICAgICAgICAgICAgICAgICAgc2Rsam95X2Rl
bGV0ZV9waW5fbWFwcGluZygxIDw8IHBpbik7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVmYXVsdDoKQEAgLTUyNywyOCArNTMw
LDI3IEBACiB7CiAgICAgY2hhciAqdGFyZ2V0ID0gTlVMTDsKICAgICBTRExfRXZlbnQgZTsK
LSAgICBpbnQgcG90LCBwb3J0OworICAgIGludCBwb3Q7CiAKICAgICBwb3QgPSAodmljZV9w
dHJfdG9faW50KHBhcmFtKSkgJiAxNTsKLSAgICBwb3J0ID0gKHZpY2VfcHRyX3RvX2ludChw
YXJhbSkpID4+IDU7CiAKICAgICBpZiAoYWN0aXZhdGVkKSB7Ci0gICAgICAgIHRhcmdldCA9
IGxpYl9tc3ByaW50ZigiUG9ydCAlaSAlcyAoZGVsIGNsZWFycyBtYXBwaW5ncykiLCBwb3J0
ICsgMSwgam95X3BvdFtwb3RdKTsKKyAgICAgICAgdGFyZ2V0ID0gbGliX21zcHJpbnRmKCJQ
b3J0ICVpICVzIiwgam95X3BvdFtwb3RdKTsKICAgICAgICAgZSA9IHNkbF91aV9wb2xsX2V2
ZW50KCJqb3lzdGljayIsIHRhcmdldCwgU0RMX1BPTExfSk9ZU1RJQ0sgfCBTRExfUE9MTF9L
RVlCT0FSRCwgNSk7CiAgICAgICAgIGxpYl9mcmVlKHRhcmdldCk7CiAKICAgICAgICAgc3dp
dGNoIChlLnR5cGUpIHsKICAgICAgICAgICAgIGNhc2UgU0RMX0pPWUFYSVNNT1RJT046Ci0g
ICAgICAgICAgICAgICAgc2Rsam95X3NldF9qb3lzdGlja19heGlzKGUsIHBvcnQsIHBvdCk7
Ci0gICAgICAgICAgICAgICAgcmVzb3VyY2VzX3NldF9pbnRfc3ByaW50ZigiUGFkZGxlc0lu
cHV0JWQiLCBQQURETEVTX0lOUFVUX0pPWV9BWElTLCBwb3J0ICsgMSk7CisgICAgICAgICAg
ICAgICAgc2Rsam95X3NldF9qb3lzdGlja19heGlzKGUsIHBvdCk7CisgICAgICAgICAgICAg
ICAgLy9yZXNvdXJjZXNfc2V0X2ludF9zcHJpbnRmKCJQYWRkbGVzSW5wdXQlZCIsIFBBRERM
RVNfSU5QVVRfSk9ZX0FYSVMsIHBvcnQgKyAxKTsKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIGNhc2UgU0RMX01PVVNFTU9USU9OOgogICAgICAgICAgICAgICAgIHNk
bGpveV9kZWxldGVfcG90X21hcHBpbmcocG9ydCwgcG90KTsKLSAgICAgICAgICAgICAgICBy
ZXNvdXJjZXNfc2V0X2ludF9zcHJpbnRmKCJQYWRkbGVzSW5wdXQlZCIsIFBBRERMRVNfSU5Q
VVRfTU9VU0UsIHBvcnQgKyAxKTsKKyAgICAgICAgICAgICAgICAvL3Jlc291cmNlc19zZXRf
aW50X3NwcmludGYoIlBhZGRsZXNJbnB1dCVkIiwgUEFERExFU19JTlBVVF9NT1VTRSwgcG9y
dCArIDEpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBTRExf
S0VZRE9XTjoKICAgICAgICAgICAgICAgICBpZiAoZS5rZXkua2V5c3ltLnN5bSA9PSBTRExL
X0RFTEVURSB8fCBlLmtleS5rZXlzeW0uc3ltID09IFNETEtfQkFDS1NQQUNFKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHNkbGpveV9kZWxldGVfcG90X21hcHBpbmcocG9ydCwgcG90KTsK
KyAgICAgICAgICAgICAgICAgICAgc2Rsam95X2RlbGV0ZV9wb3RfbWFwcGluZyhwb3QpOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IGRlZmF1bHQ6CkBAIC02MjksNyArNjMxLDYgQEAKICAgICB1aV9tZW51X2VudHJ5X3QgKmVu
dHJ5ID0gam95c3RpY2tfbWFwcGluZ19keW5fbWVudVtwb3J0XTsKICAgICBpbnQgaTsKICAg
ICBpbnQgaiA9IDA7Ci0gICAgY2hhciAqbWFwbmFtZTsKIAogICAgIC8qIHJlYnVpbGQgbWVu
dSBpZiBpdCBhbHJlYWR5IGV4aXN0cy4gKi8KICAgICBpZiAoam95c3RpY2tfbWFwcGluZ19k
eW5fbWVudV9pbml0W3BvcnRdICE9IDApIHsKQEAgLTY0MywxMiArNjQ0LDEwIEBACiAgICAg
ICAgIGlmIChtYXBwaW5ncyAhPSBOVUxMKSB7CiAgICAgICAgICAgICBpZiAobWFwcGluZ3Mt
PnBpbm1hcCAhPSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgbWFwcGlu
Z3MtPnBpbm1hcFtpXS5uYW1lOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgbWFwbmFt
ZSA9IChjaGFyICopbGliX3N0cmR1cChtYXBwaW5ncy0+cGlubWFwW2ldLm5hbWUpOwotICAg
ICAgICAgICAgICAgICAgICBlbnRyeVtqXS5zdHJpbmcgPSBtYXBuYW1lOworICAgICAgICAg
ICAgICAgICAgICBlbnRyeVtqXS5zdHJpbmcgPSAoY2hhciAqKWxpYl9zdHJkdXAobWFwcGlu
Z3MtPnBpbm1hcFtpXS5uYW1lKTsKICAgICAgICAgICAgICAgICAgICAgZW50cnlbal0udHlw
ZSA9IE1FTlVfRU5UUllfRElBTE9HOwogICAgICAgICAgICAgICAgICAgICBlbnRyeVtqXS5j
YWxsYmFjayA9IGN1c3RvbV9qb3ltYXBfY2FsbGJhY2s7CiAgICAgICAgICAgICAgICAgICAg
IGVudHJ5W2pdLmRhdGEgPSAodWlfY2FsbGJhY2tfZGF0YV90KWludF90b192b2lkX3B0cigo
bWFwcGluZ3MtPnBpbm1hcFtpXS5waW4gfCAocG9ydCA8PCA1KSkpOwotICAgICAgICAgICAg
ICAgICAgICBqb3lfcGluW3BvcnRdW21hcHBpbmdzLT5waW5tYXBbaV0ucGluXSA9IG1hcG5h
bWU7CiAgICAgICAgICAgICAgICAgICAgIGorKzsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9CkBAIC04NTcsMTIgKzg1Niw2IEBACiAgICAgICBNRU5VX0VOVFJZX1NVQk1F
TlUsCiAgICAgICBqb3lzdGlja19ob3N0X21hcHBpbmdfZHlubWVudV9jYWxsYmFjaywKICAg
ICAgICh1aV9jYWxsYmFja19kYXRhX3Qpam95c3RpY2tfaG9zdF9tYXBwaW5nX2R5bl9tZW51
IH0sCi0jaWZkZWYgVVNFX1NETFVJMgotICAgIHsgIlJlc2NhbiBob3N0IGpveXN0aWNrcyIs
Ci0gICAgICBNRU5VX0VOVFJZX09USEVSLAotICAgICAgY3VzdG9tX3Jlc2Nhbl9qb3lfY2Fs
bGJhY2ssCi0gICAgICBOVUxMIH0sCi0jZW5kaWYKICAgICB7ICJFeHRyYSBqb3lzdGljayBv
cHRpb25zIiwKICAgICAgIE1FTlVfRU5UUllfU1VCTUVOVSwKICAgICAgIHN1Ym1lbnVfY2Fs
bGJhY2ssCkBAIC05MzksMTIgKzkzMiw2IEBACiAgICAgICBNRU5VX0VOVFJZX1NVQk1FTlUs
CiAgICAgICBqb3lzdGlja19ob3N0X21hcHBpbmdfZHlubWVudV9jYWxsYmFjaywKICAgICAg
ICh1aV9jYWxsYmFja19kYXRhX3Qpam95c3RpY2tfaG9zdF9tYXBwaW5nX2R5bl9tZW51IH0s
Ci0jaWZkZWYgVVNFX1NETFVJMgotICAgIHsgIlJlc2NhbiBob3N0IGpveXN0aWNrcyIsCi0g
ICAgICBNRU5VX0VOVFJZX09USEVSLAotICAgICAgY3VzdG9tX3Jlc2Nhbl9qb3lfY2FsbGJh
Y2ssCi0gICAgICBOVUxMIH0sCi0jZW5kaWYKICAgICB7ICJFeHRyYSBqb3lzdGljayBvcHRp
b25zIiwKICAgICAgIE1FTlVfRU5UUllfU1VCTUVOVSwKICAgICAgIHN1Ym1lbnVfY2FsbGJh
Y2ssCkBAIC0xMDIxLDEyICsxMDA4LDYgQEAKICAgICAgIE1FTlVfRU5UUllfU1VCTUVOVSwK
ICAgICAgIGpveXN0aWNrX2hvc3RfbWFwcGluZ19keW5tZW51X2NhbGxiYWNrLAogICAgICAg
KHVpX2NhbGxiYWNrX2RhdGFfdClqb3lzdGlja19ob3N0X21hcHBpbmdfZHluX21lbnUgfSwK
LSNpZmRlZiBVU0VfU0RMVUkyCi0gICAgeyAiUmVzY2FuIGhvc3Qgam95c3RpY2tzIiwKLSAg
ICAgIE1FTlVfRU5UUllfT1RIRVIsCi0gICAgICBjdXN0b21fcmVzY2FuX2pveV9jYWxsYmFj
aywKLSAgICAgIE5VTEwgfSwKLSNlbmRpZgogICAgIHsgIkV4dHJhIGpveXN0aWNrIG9wdGlv
bnMiLAogICAgICAgTUVOVV9FTlRSWV9TVUJNRU5VLAogICAgICAgc3VibWVudV9jYWxsYmFj
aywKQEAgLTEwOTQsMTIgKzEwNzUsNiBAQAogICAgICAgTUVOVV9FTlRSWV9TVUJNRU5VLAog
ICAgICAgam95c3RpY2tfaG9zdF9tYXBwaW5nX2R5bm1lbnVfY2FsbGJhY2ssCiAgICAgICAo
dWlfY2FsbGJhY2tfZGF0YV90KWpveXN0aWNrX2hvc3RfbWFwcGluZ19keW5fbWVudSB9LAot
I2lmZGVmIFVTRV9TRExVSTIKLSAgICB7ICJSZXNjYW4gaG9zdCBqb3lzdGlja3MiLAotICAg
ICAgTUVOVV9FTlRSWV9PVEhFUiwKLSAgICAgIGN1c3RvbV9yZXNjYW5fam95X2NhbGxiYWNr
LAotICAgICAgTlVMTCB9LAotI2VuZGlmCiAgICAgeyAiRXh0cmEgam95c3RpY2sgb3B0aW9u
cyIsCiAgICAgICBNRU5VX0VOVFJZX1NVQk1FTlUsCiAgICAgICBzdWJtZW51X2NhbGxiYWNr
LApAQCAtMTE2OCwxMiArMTE0Myw2IEBACiAgICAgICBNRU5VX0VOVFJZX1NVQk1FTlUsCiAg
ICAgICBqb3lzdGlja19ob3N0X21hcHBpbmdfZHlubWVudV9jYWxsYmFjaywKICAgICAgICh1
aV9jYWxsYmFja19kYXRhX3Qpam95c3RpY2tfaG9zdF9tYXBwaW5nX2R5bl9tZW51IH0sCi0j
aWZkZWYgVVNFX1NETFVJMgotICAgIHsgIlJlc2NhbiBob3N0IGpveXN0aWNrcyIsCi0gICAg
ICBNRU5VX0VOVFJZX09USEVSLAotICAgICAgY3VzdG9tX3Jlc2Nhbl9qb3lfY2FsbGJhY2ss
Ci0gICAgICBOVUxMIH0sCi0jZW5kaWYKICAgICB7ICJFeHRyYSBqb3lzdGljayBvcHRpb25z
IiwKICAgICAgIE1FTlVfRU5UUllfU1VCTUVOVSwKICAgICAgIHN1Ym1lbnVfY2FsbGJhY2ss
CkBAIC0xMjE0LDEyICsxMTgzLDYgQEAKICAgICAgIE1FTlVfRU5UUllfU1VCTUVOVSwKICAg
ICAgIGpveXN0aWNrX2hvc3RfbWFwcGluZ19keW5tZW51X2NhbGxiYWNrLAogICAgICAgKHVp
X2NhbGxiYWNrX2RhdGFfdClqb3lzdGlja19ob3N0X21hcHBpbmdfZHluX21lbnUgfSwKLSNp
ZmRlZiBVU0VfU0RMVUkyCi0gICAgeyAiUmVzY2FuIGhvc3Qgam95c3RpY2tzIiwKLSAgICAg
IE1FTlVfRU5UUllfT1RIRVIsCi0gICAgICBjdXN0b21fcmVzY2FuX2pveV9jYWxsYmFjaywK
LSAgICAgIE5VTEwgfSwKLSNlbmRpZgogICAgIHsgIkV4dHJhIGpveXN0aWNrIG9wdGlvbnMi
LAogICAgICAgTUVOVV9FTlRSWV9TVUJNRU5VLAogICAgICAgc3VibWVudV9jYWxsYmFjaywK
QEAgLTEyODQsMTIgKzEyNDcsNiBAQAogICAgICAgTUVOVV9FTlRSWV9TVUJNRU5VLAogICAg
ICAgam95c3RpY2tfaG9zdF9tYXBwaW5nX2R5bm1lbnVfY2FsbGJhY2ssCiAgICAgICAodWlf
Y2FsbGJhY2tfZGF0YV90KWpveXN0aWNrX2hvc3RfbWFwcGluZ19keW5fbWVudSB9LAotI2lm
ZGVmIFVTRV9TRExVSTIKLSAgICB7ICJSZXNjYW4gaG9zdCBqb3lzdGlja3MiLAotICAgICAg
TUVOVV9FTlRSWV9PVEhFUiwKLSAgICAgIGN1c3RvbV9yZXNjYW5fam95X2NhbGxiYWNrLAot
ICAgICAgTlVMTCB9LAotI2VuZGlmCiAgICAgeyAiRXh0cmEgam95c3RpY2sgb3B0aW9ucyIs
CiAgICAgICBNRU5VX0VOVFJZX1NVQk1FTlUsCiAgICAgICBzdWJtZW51X2NhbGxiYWNrLApJ
bmRleDogZGV2L3ZpY2UvdHJ1bmsvc3JjL2FyY2gvc2RsL21lbnVfc2V0dGluZ3MuYwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBkZXYvdmljZS90cnVuay9zcmMvYXJjaC9zZGwvbWVudV9zZXR0aW5n
cy5jCShyZXZpc2lvbmUgNDEzNDgpCisrKyBkZXYvdmljZS90cnVuay9zcmMvYXJjaC9zZGwv
bWVudV9zZXR0aW5ncy5jCShjb3BpYSBkaSBsYXZvcm8pCkBAIC0zMCw3ICszMCw3IEBACiAj
aW5jbHVkZSAidmljZV9zZGwuaCIKICNpbmNsdWRlIDxzdGRsaWIuaD4KIAotI2luY2x1ZGUg
ImpveS5oIgorI2luY2x1ZGUgImpveXN0aWNrLmgiCiAjaW5jbHVkZSAia2JkLmgiCiAjaW5j
bHVkZSAia2V5Ym9hcmQuaCIKICNpbmNsdWRlICJsaWIuaCIKSW5kZXg6IGRldi92aWNlL3Ry
dW5rL3NyYy9hcmNoL3NkbC91aS5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRldi92aWNlL3RydW5r
L3NyYy9hcmNoL3NkbC91aS5jCShyZXZpc2lvbmUgNDEzNDgpCisrKyBkZXYvdmljZS90cnVu
ay9zcmMvYXJjaC9zZGwvdWkuYwkoY29waWEgZGkgbGF2b3JvKQpAQCAtNDEsNiArNDEsNyBA
QAogI2luY2x1ZGUgImNvbG9yLmgiCiAjaW5jbHVkZSAiZnVsbHNjcmVlbmFyY2guaCIKICNp
bmNsdWRlICJqb3kuaCIKKyNpbmNsdWRlICJqb3lzdGljay5oIgogI2luY2x1ZGUgImtiZC5o
IgogI2luY2x1ZGUgImtleWJvYXJkLmgiCiAjaW5jbHVkZSAibGliLmgiCkBAIC0yMDYsMjk4
ICsyMDcsODMgQEAKICNlbmRpZgogCiAvKiBNYWluIGV2ZW50IGhhbmRsZXIgKi8KLXVpX21l
bnVfYWN0aW9uX3QgdWlfZGlzcGF0Y2hfZXZlbnRzKHZvaWQpCit2b2lkIHVpX2Rpc3BhdGNo
X2V2ZW50cyh2b2lkKQogewogICAgIFNETF9FdmVudCBlOwotICAgIHVpX21lbnVfYWN0aW9u
X3QgcmV0dmFsID0gTUVOVV9BQ1RJT05fTk9ORTsKLSAgICBpbnQgam95bnVtOwotCi0jaWZk
ZWYgQU5EUk9JRF9DT01QSUxFCi0gICAgc3RydWN0IGxvY25ldF9hbF9ldmVudCBldmVudDE7
Ci0KLSAgICBpZiAobG9hZGVyX3Nob3dpbmZvKSB7Ci0gICAgICAgIGludCB2YWx1ZSA9IGxv
YWRlcl9zaG93aW5mbzsKLQotICAgICAgICBsb2FkZXJfc2hvd2luZm8gPSAwOwotICAgICAg
ICBsb2FkZXJfc2V0X3N0YXR1c2JhcigodmFsdWUgPT0gMSkgPyAxIDogMCk7Ci0gICAgfQot
ICAgIGlmIChsb2FkZXJfdHJ1ZV9kcml2ZSkgewotICAgICAgICBpbnQgdmFsdWUgPSBsb2Fk
ZXJfdHJ1ZV9kcml2ZTsKLQotICAgICAgICBsb2FkZXJfdHJ1ZV9kcml2ZSA9IDA7Ci0gICAg
ICAgIGxvYWRlcl9zZXRfZHJpdmVfdHJ1ZV9lbXVsYXRpb24oKHZhbHVlID09IDEpID8gMSA6
IDApOwotICAgIH0KLSAgICBpZiAobG9hZGVyX3R1cmJvKSB7Ci0gICAgICAgIGludCB2YWx1
ZSA9IGxvYWRlcl90dXJibzsKLQotICAgICAgICBsb2FkZXJfdHVyYm8gPSAwOwotICAgICAg
ICBsb2FkZXJfc2V0X3dhcnBtb2RlKCh2YWx1ZSA9PSAxKSA/IDEgOiAwKTsKLSAgICB9Ci0g
ICAgaWYgKGxvYWRmLT5hYm9ydCkgewotICAgICAgICBsb2FkZi0+YWJvcnQgPSAwOwotICAg
ICAgICB1aV9wYXVzZV9lbmFibGUoKTsKLSAgICAgICAgdWlfc2RsX3F1aXQoKTsKLSAgICAg
ICAgdWlfcGF1c2VfZGlzYWJsZSgpOyAvKiBkb2VzIHRoaXMgZXZlbiBnZXQgY2FsbGVkIGFm
dGVyIHVpX3NkbF9xdWl0KCk/ICovCi0gICAgICAgIHJldHVybiBNRU5VX0FDVElPTl9OT05F
OwotICAgIH0gZWxzZSBpZiAobG9hZGVyX2xvYWRzdGF0ZSkgewotICAgICAgICBsb2FkZXJf
bG9hZHN0YXRlID0gMDsKLSAgICAgICAgbG9hZGVyX2xvYWRfc25hcHNob3Qoc2F2ZXN0YXRl
X2ZpbGVuYW1lKTsKLSAgICAgICAgdWlfcGF1c2VfZGlzYWJsZSgpOwotICAgICAgICByZXR1
cm4gTUVOVV9BQ1RJT05fTk9ORTsKLSAgICB9IGVsc2UgaWYgKGxvYWRlcl9zYXZlc3RhdGUp
IHsKLSAgICAgICAgbG9hZGVyX3NhdmVzdGF0ZSA9IDA7Ci0gICAgICAgIGxvYWRlcl9zYXZl
X3NuYXBzaG90KHNhdmVzdGF0ZV9maWxlbmFtZSk7Ci0gICAgICAgIHVpX3BhdXNlX2Rpc2Fi
bGUoKTsKLSAgICAgICAgcmV0dXJuIE1FTlVfQUNUSU9OX05PTkU7Ci0gICAgfQotCi0gICAg
aW50IHN0b3BQb2xsID0gMDsKLQotICAgIHdoaWxlICgoIXN0b3BQb2xsKSAmJiBBbmRyb2lk
X1BvbGxFdmVudCgmZXZlbnQxKSkgewotICAgICAgICBzdHJ1Y3QgbG9jbmV0X2FsX2V2ZW50
ICpldmVudCA9ICZldmVudDE7Ci0KLSAgICAgICAgc3dpdGNoIChldmVudC0+ZXZlbnRUeXBl
KSB7Ci0gICAgICAgICAgICBjYXNlIFNETF9NT1VTRU1PVElPTjoKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIC8qIGRldGVjdCBhdXRvIGNhbGlicmF0ZSAqLwot
ICAgICAgICAgICAgICAgICAgICBpZiAoKGV2ZW50LT54ID09IC0yMDQ4KSAmJiAoZXZlbnQt
PnkgPT0gLTIwNDgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkb3duX3ggPSAtMTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGRvd25feSA9IC0xOwotICAgICAgICAgICAgICAg
ICAgICAgICAgb2xkeCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvbGR5ID0gMDsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHN0b3BQb2xsID0gMTsKLSAgICAgICAgICAgICAg
ICAgICAgLyogZGV0ZWN0IHB1cmUgcmVsYXRpdmUgbW92ZSAqLwotICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKChldmVudC0+ZG93bl94ID09IC0xMDI0KSAmJiAoZXZlbnQtPmRv
d25feSA9PSAtMTAyNCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRvd25feCA9IDA7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBkb3duX3kgPSAwOwotICAgICAgICAgICAgICAg
ICAgICAgICAgb2xkeCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvbGR5ID0gMDsK
LSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgoZG93bl94ICE9IGV2ZW50LT5kb3du
X3gpIHx8IChkb3duX3kgIT0gZXZlbnQtPmRvd25feSkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGRvd25feCA9IGV2ZW50LT5kb3duX3g7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBkb3duX3kgPSBldmVudC0+ZG93bl95OwotICAgICAgICAgICAgICAgICAgICAgICAgb2xk
eCA9IGRvd25feDsKLSAgICAgICAgICAgICAgICAgICAgICAgIG9sZHkgPSBkb3duX3k7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgbW91c2VfbW92ZSgo
aW50KShldmVudC0+eCAtIG9sZHgpLCAoaW50KShldmVudC0+eSAtIG9sZHkpKTsKLSAgICAg
ICAgICAgICAgICAgICAgb2xkeCA9IGV2ZW50LT54OwotICAgICAgICAgICAgICAgICAgICBv
bGR5ID0gZXZlbnQtPnk7Ci0gICAgICAgICAgICAgICAgfQorICAgIHdoaWxlIChTRExfUG9s
bEV2ZW50KCZlKSkgeworICAgICAgICBzd2l0Y2ggKGUudHlwZSkgeworICAgICAgICAgICAg
Y2FzZSBTRExfS0VZRE9XTjoKKyAgICAgICAgICAgICAgICB1aV9kaXNwbGF5X2tiZF9zdGF0
dXMoJmUpOworICAgICAgICAgICAgICAgIHNkbGtiZF9wcmVzcyhTREwyeF90b19TREwxeF9L
ZXlzKGUua2V5LmtleXN5bS5zeW0pLCBlLmtleS5rZXlzeW0ubW9kKTsKICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgU0RMX01PVVNFQlVUVE9ORE9XTjoKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgoZXZlbnQtPmRvd25f
eCA+PSAwKSAmJiAoZXZlbnQtPmRvd25feSA+PSAwKSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgbW91c2VfeCA9IDY0MCAqIGV2ZW50LT5kb3duX3ggLyAxMDAwLjBmIC0gNjQ7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBtb3VzZV95ID0gNDAwICogKDEwMDAgLSBldmVudC0+
ZG93bl95KSAvIDEwMDAuMGYgLSAyMDA7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgaWYgKGV2ZW50LT5rZXljb2RlID49IDApIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIG1vdXNlX2J1dHRvbigoaW50KShldmVudC0+a2V5Y29kZSkgPyBTRExf
QlVUVE9OX1JJR0hUIDogU0RMX0JVVFRPTl9MRUZULCAxKTsKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICBzdG9wUG9sbCA9IDE7Ci0gICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgY2FzZSBTRExfS0VZVVA6CisgICAgICAgICAgICAgICAgdWlf
ZGlzcGxheV9rYmRfc3RhdHVzKCZlKTsKKyAgICAgICAgICAgICAgICBzZGxrYmRfcmVsZWFz
ZShTREwyeF90b19TREwxeF9LZXlzKGUua2V5LmtleXN5bS5zeW0pLCBlLmtleS5rZXlzeW0u
bW9kKTsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgU0RMX01P
VVNFQlVUVE9OVVA6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBp
ZiAoZXZlbnQtPmtleWNvZGUgPj0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbW91
c2VfYnV0dG9uKChpbnQpKGV2ZW50LT5rZXljb2RlKSA/IFNETF9CVVRUT05fUklHSFQgOiBT
RExfQlVUVE9OX0xFRlQsIDApOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgIHN0b3BQb2xsID0gMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7CisjaWZkZWYgSEFWRV9TRExfTlVNSk9ZU1RJQ0tTCiAgICAgICAgICAg
ICBjYXNlIFNETF9KT1lBWElTTU9USU9OOgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgZmxvYXQgeCA9IGV2ZW50LT54IC8gMjU2LjBmOwotICAgICAgICAgICAg
ICAgICAgICBmbG9hdCB5ID0gZXZlbnQtPnkgLyAyNTYuMGY7Ci0gICAgICAgICAgICAgICAg
ICAgIGludCBsZWZ0ID0gMCwgdG9wID0gMCwgcmlnaHQgPSAwLCBib3QgPSAwOwotICAgICAg
ICAgICAgICAgICAgICBpbnQgdmFsdWU7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHkg
PCAtREVBRF9aT05FKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0b3AgPSAxOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmICh5ID4gREVBRF9a
T05FKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBib3QgPSAxOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmICh4IDwgLURFQURfWk9ORSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCA9IDE7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHggPiBERUFEX1pPTkUpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJpZ2h0ID0gMTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgICAgIHZhbHVlID0gMDsKLQotICAgICAgICAgICAgICAgICAgICBp
ZiAobGVmdCkgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgfD0gNDsKLSAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAocmlnaHQpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIHw9IDg7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHRvcCkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgdmFsdWUgfD0gMTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICBpZiAoYm90KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSB8PSAy
OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHJldHZhbCA9
IHNkbGpveV9heGlzX2V2ZW50KDAsIDAsIGV2ZW50LT54IC8gMjU2LjBmICogMzI3NjcpOwot
ICAgICAgICAgICAgICAgICAgICB1aV9tZW51X2FjdGlvbl90IHJldHZhbDIgPSBzZGxqb3lf
YXhpc19ldmVudCgwLCAxLCBldmVudC0+eSAvIDI1Ni4wZiAqIDMyNzY3KTsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKHJldHZhbCA9PSBNRU5VX0FDVElPTl9OT05FKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICByZXR2YWwgPSByZXR2YWwyOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIG9sZF9qb3lfZGlyZWN0aW9uID0gdmFsdWU7Ci0g
ICAgICAgICAgICAgICAgICAgIHN0b3BQb2xsID0gMTsKLSAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgc2Rsam95X2F4aXNfZXZlbnQoZS5qYXhpcy53aGljaCwgZS5qYXhp
cy5heGlzLCBlLmpheGlzLnZhbHVlKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIGNhc2UgU0RMX0pPWUJVVFRPTkRPV046Ci0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICByZXR2YWwgPSBzZGxqb3lfYnV0dG9uX2V2ZW50KDAsIGV2ZW50
LT5rZXljb2RlLCAxKTsKLQotICAgICAgICAgICAgICAgICAgICAvKiBidWZmZXIgb3ZlcmZs
b3cgd2hlbiBhdXRvZmlyZSBpZiBzdG9wUG9sbCAqLwotICAgICAgICAgICAgICAgICAgICBp
ZiAoIUFuZHJvaWRfSGFzUmVwZWF0RXZlbnQoU0RMX0pPWUJVVFRPTkRPV04sIGV2ZW50LT5r
ZXljb2RlKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgc3RvcFBvbGwgPSAxOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGpveV9idXR0b25fZXZlbnQoZS5qYnV0dG9uLndoaWNoLCBlLmpidXR0b24uYnV0dG9uLCAx
KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgU0RMX0pPWUJV
VFRPTlVQOgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dmFs
ID0gc2Rsam95X2J1dHRvbl9ldmVudCgwLCBldmVudC0+a2V5Y29kZSwgMCk7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgLyogYnVmZmVyIG92ZXJmbG93IHdoZW4gYXV0b2ZpcmUgaWYgc3Rv
cFBvbGwgKi8KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFBbmRyb2lkX0hhc1JlcGVhdEV2
ZW50KFNETF9KT1lCVVRUT05VUCwgZXZlbnQtPmtleWNvZGUpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBzdG9wUG9sbCA9IDE7Ci0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBqb3lfYnV0dG9uX2V2ZW50KGUuamJ1dHRvbi53aGljaCwgZS5qYnV0dG9u
LmJ1dHRvbiwgMCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl
IFNETF9KT1lIQVRNT1RJT046CisgICAgICAgICAgICAgICAgam95X2hhdF9ldmVudChlLmpo
YXQud2hpY2gsIGUuamhhdC5oYXQsIGUuamhhdC52YWx1ZSk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisjZW5kaWYKKyAgICAgICAgICAgIGNhc2UgU0RMX01PVVNFTU9USU9OOgorICAg
ICAgICAgICAgICAgIHNkbF91aV9jb25zdW1lX21vdXNlX2V2ZW50KCZlKTsKKyAgICAgICAg
ICAgICAgICBpZiAoX21vdXNlX2VuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgbW91
c2VfbW92ZShlLm1vdGlvbi54cmVsLCBlLm1vdGlvbi55cmVsKTsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFNETF9LRVlV
UDoKLSAgICAgICAgICAgIGNhc2UgU0RMX0tFWURPV046Ci0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICBzdGF0aWMgaW50IGN0cmxfZG93biA9IDA7Ci0gICAgICAg
ICAgICAgICAgICAgIHN0YXRpYyBpbnQgYWx0X2Rvd24gPSAwOwotICAgICAgICAgICAgICAg
ICAgICBzdGF0aWMgaW50IHNoaWZ0X2Rvd24gPSAwOwotCi0gICAgICAgICAgICAgICAgICAg
IGludCBkb3duID0gKGV2ZW50LT5ldmVudFR5cGUgPT0gU0RMX0tFWURPV04pOwotICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIG1vZGlmaWVyID0gZXZlbnQtPm1vZGlmaWVy
OwotICAgICAgICAgICAgICAgICAgICBpbnQgY3RybCA9ICgobW9kaWZpZXIgJiBLRVlCT0FS
RF9DVFJMX0ZMQUcpICE9IDApOwotICAgICAgICAgICAgICAgICAgICBpbnQgYWx0ID0gKCht
b2RpZmllciAmIEtFWUJPQVJEX0FMVF9GTEFHKSAhPSAwKTsKLSAgICAgICAgICAgICAgICAg
ICAgaW50IHNoaWZ0ID0gKChtb2RpZmllciAmIEtFWUJPQVJEX1NISUZUX0ZMQUcpICE9IDAp
OwotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGtjb2RlID0gKHVuc2lnbmVk
IGxvbmcpZXZlbnQtPmtleWNvZGU7Ci0KLSAgICAgICAgICAgICAgICAgICAgaW50IGttb2Qg
PSAwOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChjdHJsKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBrbW9kIHw9IEtNT0RfTENUUkw7Ci0gICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgaWYgKGFsdCkgewotICAgICAgICAgICAgICAgICAgICAg
ICAga21vZCB8PSBLTU9EX0xBTFQ7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgaWYgKHNoaWZ0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBrbW9k
IHw9IEtNT0RfTFNISUZUOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChkb3duKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3RybCB8
fCAoa2NvZGUgPT0gU0RMS19UQUIpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCFjdHJsX2Rvd24pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5
Ym9hcmRfa2V5X3ByZXNzZWQoKHVuc2lnbmVkIGxvbmcpU0RMS19UQUIpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHJs
X2Rvd24rKzsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChhbHQgfHwgKGtjb2RlID09IFNETEtfTENUUkwpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCFhbHRfZG93bikgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBrZXlib2FyZF9rZXlfcHJlc3NlZCgodW5zaWduZWQgbG9uZylTRExL
X0xDVFJMKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYWx0X2Rvd24rKzsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzaGlmdCB8fCAoa2NvZGUgPT0gU0RMS19M
U0hJRlQpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzaGlmdF9kb3du
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleWJvYXJkX2tleV9wcmVz
c2VkKCh1bnNpZ25lZCBsb25nKVNETEtfTFNISUZUKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hpZnRfZG93bisrOwot
ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgdWlf
ZGlzcGxheV9rYmRfc3RhdHVzKGV2ZW50KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHZhbCA9IHNkbGtiZF9wcmVzcyhrY29kZSwgMCk7Ci0gICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB1aV9kaXNwbGF5X2tiZF9zdGF0dXMo
ZXZlbnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dmFsID0gc2Rsa2JkX3JlbGVh
c2Uoa2NvZGUsIDApOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3RybCB8fCAo
a2NvZGUgPT0gU0RMS19UQUIpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGtjb2RlID09IFNETEtfVEFCKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGN0cmxfZG93biA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChjdHJsX2Rvd24pIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY3RybF9kb3duLS07Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY3RybF9kb3duKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleWJvYXJkX2tleV9yZWxlYXNl
ZCgodW5zaWduZWQgbG9uZylTRExLX1RBQik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGFsdCB8fCAoa2NvZGUgPT0gU0RMS19MQ1RSTCkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoa2NvZGUgPT0gU0RMS19MQ1RSTCkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBhbHRfZG93biA9IDA7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbHRfZG93bikg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHRfZG93bi0tOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIWFsdF9kb3duKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleWJv
YXJkX2tleV9yZWxlYXNlZCgodW5zaWduZWQgbG9uZylTRExLX0xDVFJMKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoc2hpZnQgfHwgKGtjb2RlID09IFNETEtfTFNISUZU
KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrY29kZSA9PSBTRExLX0xT
SElGVCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGlmdF9kb3duID0g
MDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHNoaWZ0X2Rvd24pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2hpZnRfZG93bi0tOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNoaWZ0X2Rvd24pIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAga2V5Ym9hcmRfa2V5X3JlbGVhc2VkKCh1bnNpZ25l
ZCBsb25nKVNETEtfTFNISUZUKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgc3RvcFBvbGwgPSAxOworICAgICAgICAgICAgY2FzZSBTRExfTU9V
U0VCVVRUT05ET1dOOgorICAgICAgICAgICAgY2FzZSBTRExfTU9VU0VCVVRUT05VUDoKKyAg
ICAgICAgICAgICAgICBpZiAoX21vdXNlX2VuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICAg
ICAgbW91c2VfYnV0dG9uKChpbnQpKGUuYnV0dG9uLmJ1dHRvbiksIChlLmJ1dHRvbi5zdGF0
ZSA9PSBTRExfUFJFU1NFRCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgLyogU0RM
X0V2ZW50U3RhdGUoU0RMX1ZJREVPUkVTSVpFLCBTRExfSUdOT1JFKTsgKi8KKyAgICAgICAg
ICAgICAgICB1aV9oYW5kbGVfbWlzY19zZGxfZXZlbnQoZSk7CisgICAgICAgICAgICAgICAg
LyogU0RMX0V2ZW50U3RhdGUoU0RMX1ZJREVPUkVTSVpFLCBTRExfRU5BQkxFKTsgKi8KKyAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KLSNlbHNlCit9CisKK2pv
eXN0aWNrX2FjdGlvbl90IHVpX2Rpc3BhdGNoX2V2ZW50c19mb3JfbWVudV9hY3Rpb24odm9p
ZCkKK3sKKyAgICBTRExfRXZlbnQgZTsKKyAgICB1aV9tZW51X2FjdGlvbl90IHJldHZhbCA9
IE1FTlVfQUNUSU9OX05PTkU7CisKICAgICB3aGlsZSAoU0RMX1BvbGxFdmVudCgmZSkpIHsK
ICAgICAgICAgc3dpdGNoIChlLnR5cGUpIHsKICAgICAgICAgICAgIGNhc2UgU0RMX0tFWURP
V046CiAgICAgICAgICAgICAgICAgdWlfZGlzcGxheV9rYmRfc3RhdHVzKCZlKTsKLSAgICAg
ICAgICAgICAgICByZXR2YWwgPSBzZGxrYmRfcHJlc3MoU0RMMnhfdG9fU0RMMXhfS2V5cyhl
LmtleS5rZXlzeW0uc3ltKSwgZS5rZXkua2V5c3ltLm1vZCk7CisgICAgICAgICAgICAgICAg
cmV0dmFsID0gc2Rsa2JkX3ByZXNzX2Zvcl9tZW51X2FjdGlvbihTREwyeF90b19TREwxeF9L
ZXlzKGUua2V5LmtleXN5bS5zeW0pLCBlLmtleS5rZXlzeW0ubW9kKTsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgU0RMX0tFWVVQOgogICAgICAgICAgICAg
ICAgIHVpX2Rpc3BsYXlfa2JkX3N0YXR1cygmZSk7Ci0gICAgICAgICAgICAgICAgcmV0dmFs
ID0gc2Rsa2JkX3JlbGVhc2UoU0RMMnhfdG9fU0RMMXhfS2V5cyhlLmtleS5rZXlzeW0uc3lt
KSwgZS5rZXkua2V5c3ltLm1vZCk7CisgICAgICAgICAgICAgICAgcmV0dmFsID0gc2Rsa2Jk
X3JlbGVhc2VfZm9yX21lbnVfYWN0aW9uKFNETDJ4X3RvX1NETDF4X0tleXMoZS5rZXkua2V5
c3ltLnN5bSksIGUua2V5LmtleXN5bS5tb2QpOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
I2lmZGVmIEhBVkVfU0RMX05VTUpPWVNUSUNLUwogICAgICAgICAgICAgY2FzZSBTRExfSk9Z
QVhJU01PVElPTjoKLSAgICAgICAgICAgICAgICBqb3ludW0gPSBzZGxqb3lfZ2V0X2pveW51
bV9mb3JfZXZlbnQoZS5qYXhpcy53aGljaCk7Ci0gICAgICAgICAgICAgICAgaWYgKGpveW51
bSAhPSAtMSkgewotICAgICAgICAgICAgICAgICAgICByZXR2YWwgPSBzZGxqb3lfYXhpc19l
dmVudChqb3ludW0sIGUuamF4aXMuYXhpcywgZS5qYXhpcy52YWx1ZSk7Ci0gICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIHJldHZhbCA9IHNkbGpveV9heGlzX2V2ZW50X2Zv
cl9tZW51X2FjdGlvbihlLmpheGlzLndoaWNoLCBlLmpheGlzLmF4aXMsIGUuamF4aXMudmFs
dWUpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBTRExfSk9Z
QlVUVE9ORE9XTjoKLSAgICAgICAgICAgICAgICBqb3ludW0gPSBzZGxqb3lfZ2V0X2pveW51
bV9mb3JfZXZlbnQoZS5qYnV0dG9uLndoaWNoKTsKLSAgICAgICAgICAgICAgICBpZiAoam95
bnVtICE9IC0xKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHZhbCA9IHNkbGpveV9idXR0
b25fZXZlbnQoam95bnVtLCBlLmpidXR0b24uYnV0dG9uLCAxKTsKLSAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgcmV0dmFsID0gc2Rsam95X2J1dHRvbl9ldmVudChlLmpi
dXR0b24ud2hpY2gsIGUuamJ1dHRvbi5idXR0b24sIDEpOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgY2FzZSBTRExfSk9ZQlVUVE9OVVA6Ci0gICAgICAgICAgICAg
ICAgam95bnVtID0gc2Rsam95X2dldF9qb3ludW1fZm9yX2V2ZW50KGUuamJ1dHRvbi53aGlj
aCk7Ci0gICAgICAgICAgICAgICAgaWYgKGpveW51bSAhPSAtMSkgewotICAgICAgICAgICAg
ICAgICAgICByZXR2YWwgPSBzZGxqb3lfYnV0dG9uX2V2ZW50KGpveW51bSwgZS5qYnV0dG9u
LmJ1dHRvbiwgMCk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHZh
bCA9IHNkbGpveV9idXR0b25fZXZlbnQoZS5qYnV0dG9uLndoaWNoLCBlLmpidXR0b24uYnV0
dG9uLCAwKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgU0RM
X0pPWUhBVE1PVElPTjoKLSAgICAgICAgICAgICAgICBqb3ludW0gPSBzZGxqb3lfZ2V0X2pv
eW51bV9mb3JfZXZlbnQoZS5qaGF0LndoaWNoKTsKLSAgICAgICAgICAgICAgICBpZiAoam95
bnVtICE9IC0xKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHZhbCA9IHNkbGpveV9oYXRf
ZXZlbnQoam95bnVtLCBlLmpoYXQuaGF0LCBlLmpoYXQudmFsdWUpOwotICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICByZXR2YWwgPSBzZGxqb3lfaGF0X2V2ZW50KGUuamhh
dC53aGljaCwgZS5qaGF0LmhhdCwgZS5qaGF0LnZhbHVlKTsKICAgICAgICAgICAgICAgICBi
cmVhazsKLSNpZmRlZiBVU0VfU0RMVUkyCi0gICAgICAgICAgICBjYXNlIFNETF9KT1lERVZJ
Q0VBRERFRDoKLSAgICAgICAgICAgIGNhc2UgU0RMX0pPWURFVklDRVJFTU9WRUQ6Ci0gICAg
ICAgICAgICAgICAgcmV0dmFsID0gc2Rsam95X3Jlc2NhbigpOwotICAgICAgICAgICAgICAg
IGJyZWFrOwogI2VuZGlmCi0jZW5kaWYKICAgICAgICAgICAgIGNhc2UgU0RMX01PVVNFTU9U
SU9OOgogICAgICAgICAgICAgICAgIHNkbF91aV9jb25zdW1lX21vdXNlX2V2ZW50KCZlKTsK
ICAgICAgICAgICAgICAgICBpZiAoX21vdXNlX2VuYWJsZWQpIHsKQEAgLTUyMiw3ICszMDgs
NiBAQAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9Ci0jZW5kaWYKICAg
ICByZXR1cm4gcmV0dmFsOwogfQogCkBAIC04MDEsNyArNTg2LDYgQEAKIHZvaWQgdWlfcmVz
b3VyY2VzX3NodXRkb3duKHZvaWQpCiB7CiAgICAgREJHKCgiJXMiLCBfX2Z1bmNfXykpOwot
ICAgIGpveV9hcmNoX3Jlc291cmNlc19zaHV0ZG93bigpOwogICAgIHNkbGtiZF9yZXNvdXJj
ZXNfc2h1dGRvd24oKTsKIH0KIApJbmRleDogZGV2L3ZpY2UvdHJ1bmsvc3JjL2FyY2gvc2Rs
L3VpLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gZGV2L3ZpY2UvdHJ1bmsvc3JjL2FyY2gvc2RsL3Vp
LmgJKHJldmlzaW9uZSA0MTM0OCkKKysrIGRldi92aWNlL3RydW5rL3NyYy9hcmNoL3NkbC91
aS5oCShjb3BpYSBkaSBsYXZvcm8pCkBAIC01MCw5ICs1MCwxMSBAQAogCiBzdHJ1Y3Qgdmlk
ZW9fY2FudmFzX3M7CiBzdHJ1Y3QgcGFsZXR0ZV9zOworZW51bSBqb3lzdGlja19hY3Rpb25f
ZTsKIAogZXh0ZXJuIHZvaWQgdWlfaGFuZGxlX21pc2Nfc2RsX2V2ZW50KFNETF9FdmVudCBl
KTsKLWV4dGVybiB1aV9tZW51X2FjdGlvbl90IHVpX2Rpc3BhdGNoX2V2ZW50cyh2b2lkKTsK
K2V4dGVybiB2b2lkIHVpX2Rpc3BhdGNoX2V2ZW50cyh2b2lkKTsKK2V4dGVybiBlbnVtIGpv
eXN0aWNrX2FjdGlvbl9lIHVpX2Rpc3BhdGNoX2V2ZW50c19mb3JfbWVudV9hY3Rpb24odm9p
ZCk7CiBleHRlcm4gdm9pZCB1aV9leGl0KHZvaWQpOwogZXh0ZXJuIHZvaWQgdWlfbWVzc2Fn
ZShjb25zdCBjaGFyICpmb3JtYXQsIC4uLik7CiBleHRlcm4gY2hhciAqdWlfc2VsZWN0X2Zp
bGUoY29uc3QgY2hhciAqdGl0bGUsIGNoYXIgKigqcmVhZF9jb250ZW50c19mdW5jKShjb25z
dCBjaGFyICosIHVuc2lnbmVkIGludCB1bml0KSwgdW5zaWduZWQgaW50IHVuaXQsCkluZGV4
OiBkZXYvdmljZS90cnVuay9zcmMvYXJjaC9zZGwvdWltZW51LmMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gZGV2L3ZpY2UvdHJ1bmsvc3JjL2FyY2gvc2RsL3VpbWVudS5jCShyZXZpc2lvbmUgNDEz
NDgpCisrKyBkZXYvdmljZS90cnVuay9zcmMvYXJjaC9zZGwvdWltZW51LmMJKGNvcGlhIGRp
IGxhdm9ybykKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJpbnRlcnJ1cHQuaCIKICNp
bmNsdWRlICJpb3V0aWwuaCIKICNpbmNsdWRlICJqb3kuaCIKKyNpbmNsdWRlICJqb3lzdGlj
ay5oIgogI2luY2x1ZGUgImtiZC5oIgogI2luY2x1ZGUgImxpYi5oIgogI2luY2x1ZGUgIm1h
Y2hpbmUuaCIKQEAgLTk1Miw4ICs5NTMsNyBAQAogewogICAgIFNETF9FdmVudCBlOwogICAg
IGludCBnb3Rfa2V5ID0gMDsKLSAgICB1aV9tZW51X2FjdGlvbl90IGFjdGlvbiA9IE1FTlVf
QUNUSU9OX05PTkU7Ci0gICAgaW50IGpveW51bTsKKyAgICBqb3lzdGlja19hY3Rpb25fdCBh
Y3Rpb24gPSBOT05FOwogI2lmZGVmIFVTRV9TRExVSTIKICAgICBpbnQgaTsKICNlbmRpZgpA
QCAtMTA2MCwyMiArMTA2MCwxMyBAQAogCiAjaWZkZWYgSEFWRV9TRExfTlVNSk9ZU1RJQ0tT
CiAgICAgICAgICAgICBjYXNlIFNETF9KT1lBWElTTU9USU9OOgotICAgICAgICAgICAgICAg
IGpveW51bSA9IHNkbGpveV9nZXRfam95bnVtX2Zvcl9ldmVudChlLmpheGlzLndoaWNoKTsK
LSAgICAgICAgICAgICAgICBpZiAoam95bnVtICE9IC0xKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGFjdGlvbiA9IHNkbGpveV9heGlzX2V2ZW50KGpveW51bSwgZS5qYXhpcy5heGlzLCBl
LmpheGlzLnZhbHVlKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYWN0
aW9uID0gc2Rsam95X2F4aXNfZXZlbnRfZm9yX21lbnVfYWN0aW9uKGUuamF4aXMud2hpY2gs
IGUuamF4aXMuYXhpcywgZS5qYXhpcy52YWx1ZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICBjYXNlIFNETF9KT1lCVVRUT05ET1dOOgotICAgICAgICAgICAgICAg
IGpveW51bSA9IHNkbGpveV9nZXRfam95bnVtX2Zvcl9ldmVudChlLmpidXR0b24ud2hpY2gp
OwotICAgICAgICAgICAgICAgIGlmIChqb3ludW0gIT0gLTEpIHsKLSAgICAgICAgICAgICAg
ICAgICAgYWN0aW9uID0gc2Rsam95X2J1dHRvbl9ldmVudChqb3ludW0sIGUuamJ1dHRvbi5i
dXR0b24sIDEpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBhY3Rpb24g
PSBzZGxqb3lfYnV0dG9uX2V2ZW50KGUuamJ1dHRvbi53aGljaCwgZS5qYnV0dG9uLmJ1dHRv
biwgMSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFNETF9K
T1lIQVRNT1RJT046Ci0gICAgICAgICAgICAgICAgam95bnVtID0gc2Rsam95X2dldF9qb3lu
dW1fZm9yX2V2ZW50KGUuamhhdC53aGljaCk7Ci0gICAgICAgICAgICAgICAgaWYgKGpveW51
bSAhPSAtMSkgewotICAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSBzZGxqb3lfaGF0X2V2
ZW50KGpveW51bSwgZS5qaGF0LmhhdCwgZS5qaGF0LnZhbHVlKTsKLSAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgYWN0aW9uID0gc2Rsam95X2hhdF9ldmVudChlLmpoYXQu
d2hpY2gsIGUuamhhdC5oYXQsIGUuamhhdC52YWx1ZSk7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAjZW5kaWYKICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC0xMzg0LDcgKzEzNzUsNyBA
QAogCiAgICAgZG8gewogICAgICAgICBTRExfRGVsYXkoMjApOwotICAgICAgICByZXR2YWwg
PSB1aV9kaXNwYXRjaF9ldmVudHMoKTsKKyAgICAgICAgcmV0dmFsID0gdWlfZGlzcGF0Y2hf
ZXZlbnRzX2Zvcl9tZW51X2FjdGlvbigpOwogI2lmZGVmIEhBVkVfU0RMX05VTUpPWVNUSUNL
UwogICAgICAgICBpZiAocmV0dmFsID09IE1FTlVfQUNUSU9OX05PTkUgfHwgcmV0dmFsID09
IE1FTlVfQUNUSU9OX05PTkVfUkVMRUFTRSkgewogICAgICAgICAgICAgcmV0dmFsID0gc2Rs
am95X2F1dG9yZXBlYXQoKTsKSW5kZXg6IGRldi92aWNlL3RydW5rL3NyYy9hcmNoL3NkbC92
aWRlb19zZGwxLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZGV2L3ZpY2UvdHJ1bmsvc3JjL2FyY2gv
c2RsL3ZpZGVvX3NkbDEuYwkocmV2aXNpb25lIDQxMzQ4KQorKysgZGV2L3ZpY2UvdHJ1bmsv
c3JjL2FyY2gvc2RsL3ZpZGVvX3NkbDEuYwkoY29waWEgZGkgbGF2b3JvKQpAQCAtNDAyLDEw
ICs0MDIsNiBAQAogewogICAgIERCRygoIiVzIiwgX19mdW5jX18pKTsKIAotICAgIGlmICht
YWNoaW5lX2NsYXNzID09IFZJQ0VfTUFDSElORV9WU0lEKSB7Ci0gICAgICAgIGpveV9hcmNo
X3Jlc291cmNlc19zaHV0ZG93bigpOwotICAgIH0KLQogI2lmIGRlZmluZWQoSEFWRV9IV1ND
QUxFKQogICAgIGxpYl9mcmVlKGFzcGVjdF9yYXRpb19zKTsKICNlbmRpZgpJbmRleDogZGV2
L3ZpY2UvdHJ1bmsvc3JjL2FyY2gvc2RsL3ZpZGVvX3NkbDIuYwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBkZXYvdmljZS90cnVuay9zcmMvYXJjaC9zZGwvdmlkZW9fc2RsMi5jCShyZXZpc2lvbmUg
NDEzNDgpCisrKyBkZXYvdmljZS90cnVuay9zcmMvYXJjaC9zZGwvdmlkZW9fc2RsMi5jCShj
b3BpYSBkaSBsYXZvcm8pCkBAIC00NDAsMTAgKzQ0MCw2IEBACiB7CiAgICAgREJHKCgiJXMi
LCBfX2Z1bmNfXykpOwogCi0gICAgaWYgKG1hY2hpbmVfY2xhc3MgPT0gVklDRV9NQUNISU5F
X1ZTSUQpIHsKLSAgICAgICAgam95X2FyY2hfcmVzb3VyY2VzX3NodXRkb3duKCk7Ci0gICAg
fQotCiAgICAgbGliX2ZyZWUoYXNwZWN0X3JhdGlvX3MpOwogICAgIGxpYl9mcmVlKHNkbDJf
cmVuZGVyZXJfbmFtZSk7CiAgICAgbGliX2ZyZWUoYXNwZWN0X3JhdGlvX2ZhY3RvcnlfdmFs
dWVfcyk7CkluZGV4OiBkZXYvdmljZS90cnVuay9zcmMvYXJjaC9zZGwvdnN5bmNhcmNoLmMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gZGV2L3ZpY2UvdHJ1bmsvc3JjL2FyY2gvc2RsL3ZzeW5jYXJj
aC5jCShyZXZpc2lvbmUgNDEzNDgpCisrKyBkZXYvdmljZS90cnVuay9zcmMvYXJjaC9zZGwv
dnN5bmNhcmNoLmMJKGNvcGlhIGRpIGxhdm9ybykKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNs
dWRlICJ2aWNlLmgiCiAKICNpbmNsdWRlICJqb3kuaCIKKyNpbmNsdWRlICJqb3lzdGljay5o
IgogI2luY2x1ZGUgImtiZGJ1Zi5oIgogI2luY2x1ZGUgImxpZ2h0cGVuZHJ2LmgiCiAjaW5j
bHVkZSAibWFjaGluZS5oIgpAQCAtODgsNyArODksNyBAQAogdm9pZCB2c3luY2FyY2hfcHJl
c3luYyh2b2lkKQogewogICAgIGlmIChzZGxfdmtiZF9zdGF0ZSAmIFNETF9WS0JEX0FDVElW
RSkgewotICAgICAgICB3aGlsZSAoc2RsX3ZrYmRfcHJvY2Vzcyh1aV9kaXNwYXRjaF9ldmVu
dHMoKSkpIHsKKyAgICAgICAgd2hpbGUgKHNkbF92a2JkX3Byb2Nlc3ModWlfZGlzcGF0Y2hf
ZXZlbnRzX2Zvcl9tZW51X2FjdGlvbigpKSkgewogICAgICAgICB9CiAjaWZkZWYgSEFWRV9T
RExfTlVNSk9ZU1RJQ0tTCiAgICAgICAgIHNkbF92a2JkX3Byb2Nlc3Moc2Rsam95X2F1dG9y
ZXBlYXQoKSk7CkluZGV4OiBkZXYvdmljZS90cnVuay9zcmMvam95cG9ydC9qb3lzdGljay5j
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIGRldi92aWNlL3RydW5rL3NyYy9qb3lwb3J0L2pveXN0aWNr
LmMJKHJldmlzaW9uZSA0MTM0OCkKKysrIGRldi92aWNlL3RydW5rL3NyYy9qb3lwb3J0L2pv
eXN0aWNrLmMJKGNvcGlhIGRpIGxhdm9ybykKQEAgLTQ0LDE0ICs0NCwxNyBAQAogI2luY2x1
ZGUgImpveXN0aWNrLmgiCiAjaW5jbHVkZSAia2JkLmgiCiAjaW5jbHVkZSAibGliLmgiCisj
aW5jbHVkZSAibG9nLmgiCiAjaW5jbHVkZSAibWFjaGluZS5oIgogI2luY2x1ZGUgIm1haW5j
cHUuaCIKICNpbmNsdWRlICJuZXR3b3JrLmgiCiAjaW5jbHVkZSAicmVzb3VyY2VzLmgiCiAj
aW5jbHVkZSAic25hcHNob3QuaCIKKyNpbmNsdWRlICJzeXNmaWxlLmgiCiAjaW5jbHVkZSAi
dHlwZXMuaCIKICNpbmNsdWRlICJ1aWFwaS5oIgogI2luY2x1ZGUgInVzZXJwb3J0X2pveXN0
aWNrLmgiCisjaW5jbHVkZSAidXRpbC5oIgogI2luY2x1ZGUgInZpY2UtZXZlbnQuaCIKIAog
LyogQ29udHJvbCBwb3J0IDwtLT4gSm95c3RpY2sgY29ubmVjdGlvbnM6CkBAIC0xNzEsNiAr
MTc0LDE4IEBACiAKIC8qISBcdG9kbyBTUlQ6IG9mZnNldCBpcyB1bnVzZWQhICovCiAKKy8q
IEpveXN0aWNrIG1hcHBpbmcgZmlsZW5hbWUgKi8KK3N0YXRpYyBjaGFyICpqb3ltYXBfZmls
ZSA9IE5VTEw7CisKKy8qKiBcYnJpZWYgIFRlbXBvcmFyeSBjb3B5IG9mIHRoZSBkZWZhdWx0
IGpveW1hcCBmaWxlIG5hbWUKKyAqCisgKiBBdm9pZHMgc2lsbHkgY2FzdGluZyBhd2F5IG9m
IGNvbnN0CisgKi8KK3N0YXRpYyBjaGFyICpqb3ltYXBfZmFjdG9yeSA9IE5VTEw7CisKKwor
c3RhdGljIGxvZ190IGpveV9sb2cgPSBMT0dfRVJSOworCiBzdGF0aWMgdm9pZCBqb3lzdGlj
a19sYXRjaF9tYXRyaXgoQ0xPQ0sgb2Zmc2V0KQogewogICAgIHVpbnQ4X3QgaWR4OwpAQCAt
ODI0LDMxICs4MzksNyBAQAogICAgIHJldHVybiAwOwogfQogCi0vKiBBY3Rpb25zIHRvIHBl
cmZvcm0gb24gam95c3RpY2sgaW5wdXQgKi8KLXR5cGVkZWYgZW51bSB7Ci0gICAgTk9ORSA9
IDAsCiAKLSAgICAvKiBKb3lzdGljayBtb3ZlbWVudCBvciBidXR0b24gcHJlc3MgKi8KLSAg
ICBKT1lTVElDSyA9IDEsCi0KLSAgICAvKiBLZXlib2FyZCBrZXkgcHJlc3MgKi8KLSAgICBL
RVlCT0FSRCA9IDIsCi19IGpveXN0aWNrX2FjdGlvbl90OwotCi0KLS8qIElucHV0IG1hcHBp
bmcgZm9yIGVhY2ggZGlyZWN0aW9uL2J1dHRvbi9ldGMgKi8KLXR5cGVkZWYgc3RydWN0IGpv
eXN0aWNrX21hcHBpbmdfcyB7Ci0gICAgLyogQWN0aW9uIHRvIHBlcmZvcm0gKi8KLSAgICBq
b3lzdGlja19hY3Rpb25fdCBhY3Rpb247Ci0KLSAgICB1bmlvbiB7Ci0gICAgICAgIHVpbnQx
Nl90IGpveV9waW47Ci0KLSAgICAgICAgLyoga2V5WzBdID0gcm93LCBrZXlbMV0gPSBjb2x1
bW4gKi8KLSAgICAgICAgaW50IGtleVsyXTsKLSAgICB9IHZhbHVlOwotfSBqb3lzdGlja19t
YXBwaW5nX3Q7Ci0KIHR5cGVkZWYgc3RydWN0IGpveXN0aWNrX2F4aXNfbWFwcGluZ19zIHsK
ICAgICAvKiBQcmV2aW91cyBzdGF0ZSBvZiBpbnB1dCAqLwogICAgIHVpbnQ4X3QgcHJldjsK
QEAgLTg2NSw5ICs4NTYsNyBAQAogICAgIHN0cnVjdCBqb3lzdGlja19tYXBwaW5nX3Mgcmln
aHQ7CiB9IGpveXN0aWNrX2hhdF9tYXBwaW5nX3Q7CiAKLSNpZm5kZWYgSEFWRV9TRExfTlVN
Sk9ZU1RJQ0tTCiBzdGF0aWMgaW50IG51bV9qb3lzdGlja19kZXZpY2VzID0gMDsKLSNlbmRp
ZgogCiAvKiogXGJyaWVmICBKb3lzdGljayBkZXZpY2UgbmFtZSBsZW5ndGggKGluY2x1ZGlu
ZyAwKQogICovCkBAIC04ODIsMTIgKzg3MSwxMyBAQAogICAgIGpveXN0aWNrX2F4aXNfbWFw
cGluZ190ICpheGlzX21hcHBpbmc7CiAgICAgam95c3RpY2tfbWFwcGluZ190ICpidXR0b25f
bWFwcGluZzsKICAgICBqb3lzdGlja19oYXRfbWFwcGluZ190ICpoYXRfbWFwcGluZzsKKyAg
ICBpbnQgbnVtX2F4ZXM7CisgICAgaW50IG51bV9idXR0b25zOworICAgIGludCBudW1faGF0
czsKIH0gam95c3RpY2tfZGV2aWNlX3Q7CiAKIAotI2lmbmRlZiBIQVZFX1NETF9OVU1KT1lT
VElDS1MKIHN0YXRpYyBzdHJ1Y3Qgam95c3RpY2tfZGV2aWNlX3MgKmpveXN0aWNrX2Rldmlj
ZXMgPSBOVUxMOwotI2VuZGlmCiAKIHN0YXRpYyBpbnQgc2V0X2pveXN0aWNrX2RldmljZShp
bnQgdmFsLCB2b2lkICpwYXJhbSkKIHsKQEAgLTkyMiw2ICs5MTIsMzc5IEBACiAgICAgcmV0
dXJuIDA7CiB9CiAKK2NoYXIgKmdldF9qb3lfcGluX21hcHBpbmdfc3RyaW5nKGludCBqb3lu
ciwgaW50IHBpbikKK3sKKyAgICBpbnQgaSwgazsKKyAgICBzZGxqb3lzdGlja19pbnB1dF90
IGo7CisgICAgc2Rsam95c3RpY2tfYWN0aW9uX3QgdDsKKyAgICBpbnQgdmFsaWQgPSAwOwor
ICAgIGludCBqb3kgPSAwOworICAgIGludCB0eXBlID0gMDsKKyAgICBpbnQgaW5kZXggPSAw
OworICAgIGludCBzdWJfaW5kZXggPSAwOworICAgIGNoYXIgKnJldHZhbCA9IE5VTEw7Cisg
ICAgY2hhciAqdHlwZV9zdHJpbmcgPSBOVUxMOworICAgIGNoYXIgKmluZGV4X3N0cmluZyA9
IE5VTEw7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX2pveXN0aWNrX2RldmljZXM7ICsr
aSkgeworLy8gICAgICBmb3IgKGogPSBBWElTOyBqIDwgTlVNX0lOUFVUX1RZUEVTOyArK2op
IHsKKyAgICAgICAgZm9yIChqID0gMDsgaiA8IGpveXN0aWNrX2RldmljZXNbaV0ubnVtX2F4
ZXM7IGorKykgeworICAgICAgICAgICAgdCA9IGpveXN0aWNrX2RldmljZXNbaV0uYXhpc19t
YXBwaW5nW2pdLnBvc2l0aXZlX2RpcmVjdGlvbi5hY3Rpb247CisKKyAgICAgICAgICAgICAg
ICBpZiAodCA9PSBKT1lTVElDSykgeworICAgICAgICAgICAgICAgICAgICBpZiAoc2Rsam95
c3RpY2tbaV0uaW5wdXRbal1ba10udmFsdWUuam95WzBdID09IGpveW5yICYmIHNkbGpveXN0
aWNrW2ldLmlucHV0W2pdW2tdLnZhbHVlLmpveVsxXSA9PSBwaW4pIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHZhbGlkKys7CisgICAgICAgICAgICAgICAgICAgICAgICBqb3kgPSBp
OworICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9IGo7CisgICAgICAgICAgICAgICAg
ICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
YXNlIEFYSVM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVfc3RyaW5n
ID0gIkF4IjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhfc3RyaW5n
ID0gIkkiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCA9IGsgLyAy
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJfaW5kZXggPSBrICUgMjsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2FzZSBCVVRUT046CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHR5cGVfc3RyaW5nID0gIkJ0IjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW5kZXhfc3RyaW5nID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW5kZXggPSBrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJf
aW5kZXggPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEhBVDoKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdHlwZV9zdHJpbmcgPSAiSHQiOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbmRleF9zdHJpbmcgPSAiSSI7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGluZGV4ID0gayAvIDQ7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN1Yl9pbmRleCA9IGsgJSA0OworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEJBTEw6Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVfc3RyaW5nID0gIkJsIjsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhfc3RyaW5nID0gTlVMTDsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBrOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdWJfaW5kZXggPSAwOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKyAgICBpZiAodmFsaWQgPiAxKSB7CisgICAgICAgIHJldHZhbCA9
ICJNdWx0aXBsZSI7CisgICAgfQorICAgIGlmICh2YWxpZCA9PSAxKSB7CisgICAgICAgIGlm
IChpbmRleF9zdHJpbmcgIT0gTlVMTCApIHsKKyAgICAgICAgICAgIHNucHJpbnRmKG1hcHBp
bmdfcmV0dmFsLCA1MCwgIkolZCwgJXMlZCwgJXMlZCIsIGpveSwgdHlwZV9zdHJpbmcsIGlu
ZGV4LCBpbmRleF9zdHJpbmcsIHN1Yl9pbmRleCk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBzbnByaW50ZihtYXBwaW5nX3JldHZhbCwgNTAsICJKJWQsICVzJWQiLCBqb3ks
IHR5cGVfc3RyaW5nLCBpbmRleCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dmFsID0gbWFw
cGluZ19yZXR2YWw7CisgICAgfQorCisgICAgcmV0dXJuIHJldHZhbDsKK30KKworaW50IGpv
eV9hcmNoX21hcHBpbmdfZHVtcChjb25zdCBjaGFyICpmaWxlbmFtZSkKK3sKKyAgICBGSUxF
ICpmcDsKKyAgICBpbnQgaSwgazsKKyAgICBpbnQgajsKKyAgICBqb3lzdGlja19hY3Rpb25f
dCB0OworICAgIGNoYXIgKmhvdGtleV9wYXRoID0gTlVMTDsKKworI2lmZGVmIFNETF9ERUJV
RworICAgIGZwcmludGYoc3RkZXJyLCAiJXNcbiIsIF9fZnVuY19fKTsKKyNlbmRpZgorCisg
ICAgaWYgKGZpbGVuYW1lID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0K
KworICAgIGZwID0gZm9wZW4oZmlsZW5hbWUsIE1PREVfV1JJVEVfVEVYVCk7CisKKyAgICBp
ZiAoZnAgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgZnBy
aW50ZihmcCwgIiMgVklDRSBqb3lzdGljayBtYXBwaW5nIGZpbGVcbiIKKyAgICAgICAgICAg
ICIjXG4iCisgICAgICAgICAgICAiIyBBIGpveXN0aWNrIG1hcCBpcyByZWFkIGluIGFzIHBh
dGNoIHRvIHRoZSBjdXJyZW50IG1hcC5cbiIKKyAgICAgICAgICAgICIjXG4iCisgICAgICAg
ICAgICAiIyBGaWxlIGZvcm1hdDpcbiIKKyAgICAgICAgICAgICIjIC0gY29tbWVudCBsaW5l
cyBzdGFydCB3aXRoICcjJ1xuIgorICAgICAgICAgICAgIiMgLSBrZXl3b3JkIGxpbmVzIHN0
YXJ0IHdpdGggJyFrZXl3b3JkJ1xuIgorICAgICAgICAgICAgIiMgLSBub3JtYWwgbGluZSBo
YXMgJ2pveW51bSBpbnB1dHR5cGUgaW5wdXRpbmRleCBhY3Rpb24nXG4iCisgICAgICAgICAg
ICAiI1xuIgorICAgICAgICAgICAgIiMgS2V5d29yZHMgYW5kIHRoZWlyIGxpbmVzIGFyZTpc
biIKKyAgICAgICAgICAgICIjICchQ0xFQVInICAgIGNsZWFyIGFsbCBtYXBwaW5nc1xuIgor
ICAgICAgICAgICAgIiNcbiIKKyAgICAgICAgICAgICk7CisKKyAgICBmcHJpbnRmKGZwLCAi
IyBpbnB1dHR5cGU6XG4iCisgICAgICAgICAgICAiIyAwICAgICAgYXhpc1xuIgorICAgICAg
ICAgICAgIiMgMSAgICAgIGJ1dHRvblxuIgorICAgICAgICAgICAgIiMgMiAgICAgIGhhdFxu
IgorICAgICAgICAgICAgIiNcbiIKKyAgICAgICAgICAgICIjIE5vdGUgdGhhdCBlYWNoIGF4
aXMgaGFzIDIgaW5wdXRpbmRleCBlbnRyaWVzIGFuZCBlYWNoIGhhdCBoYXMgNC5cbiIKKyAg
ICAgICAgICAgICIjXG4iCisgICAgICAgICAgICAiIyBhY3Rpb24gW2FjdGlvbl9wYXJhbWV0
ZXJzXTpcbiIKKyAgICAgICAgICAgICIjIDAgICAgICAgICAgICAgICBub25lXG4iCisgICAg
ICAgICAgICAiIyAxIHBvcnQgcGluICAgICAgam95c3RpY2sgKHBpbjogMS8yLzQvOC8xNi8z
Mi82NCA9IHUvZC9sL3IvZmlyZS9maXJlMi9maXJlMylcbiIKKyAgICAgICAgICAgICIjIDIg
cm93IGNvbCAgICAgICBrZXlib2FyZFxuIgorICAgICAgICAgICAgIiMgMyAgICAgICAgICAg
ICAgIG1hcFxuIgorICAgICAgICAgICAgIiMgNCAgICAgICAgICAgICAgIFVJIGFjdGl2YXRl
XG4iCisgICAgICAgICAgICAiIyA1IHBhdGgmdG8maXRlbSAgVUkgZnVuY3Rpb25cbiIKKyAg
ICAgICAgICAgICIjXG5cbiIKKyAgICAgICAgICAgICk7CisKKyAgICBmcHJpbnRmKGZwLCAi
IUNMRUFSXG5cbiIpOworCisgICAgZm9yIChpID0gMDsgaSA8IG51bV9qb3lzdGlja19kZXZp
Y2VzOyArK2kpIHsKKyAgICAgICAgayA9IDA7CisgICAgICAgIGZwcmludGYoZnAsICIjICVz
XG4iLCBqb3lzdGlja19kZXZpY2VzW2ldLmpuYW1lKTsKKyAgICAgICAgZm9yIChqID0gMDsg
aiA8IGpveXN0aWNrX2RldmljZXNbaV0ubnVtX2F4ZXM7IGorKykgeworICAgICAgICAgICAg
dCA9IGpveXN0aWNrX2RldmljZXNbaV0uYXhpc19tYXBwaW5nW2pdLnBvc2l0aXZlX2RpcmVj
dGlvbi5hY3Rpb247CisgICAgICAgICAgICBmcHJpbnRmKGZwLCAiJWkgJXUgJWkgJXUiLCBp
LCAwLCBrKyssIHQpOworICAgICAgICAgICAgc3dpdGNoICh0KSB7CisgICAgICAgICAgICAg
ICAgY2FzZSBKT1lTVElDSzoKKyAgICAgICAgICAgICAgICAgICAgZnByaW50ZihmcCwgIiAl
aSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgam95c3RpY2tfZGV2aWNlc1tpXS5h
eGlzX21hcHBpbmdbal0ucG9zaXRpdmVfZGlyZWN0aW9uLnZhbHVlLmpveV9waW4KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICBjYXNlIEtFWUJPQVJEOgorICAgICAgICAgICAgICAgICAgICBm
cHJpbnRmKGZwLCAiICVpICVpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqb3lz
dGlja19kZXZpY2VzW2ldLmF4aXNfbWFwcGluZ1tqXS5wb3NpdGl2ZV9kaXJlY3Rpb24udmFs
dWUua2V5WzBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpveXN0aWNrX2Rldmlj
ZXNbaV0uYXhpc19tYXBwaW5nW2pdLnBvc2l0aXZlX2RpcmVjdGlvbi52YWx1ZS5rZXlbMV0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAvKmNhc2UgVUlfRlVOQ1RJT046CisgICAgICAgICAg
ICAgICAgICAgIGhvdGtleV9wYXRoID0gc2RsX3VpX2hvdGtleV9wYXRoKHNkbGpveXN0aWNr
W2ldLmlucHV0W2pdW2tdLnZhbHVlLnVpX2Z1bmN0aW9uKTsKKyAgICAgICAgICAgICAgICAg
ICAgZnByaW50ZihmcCwgIiAlcyIsIGhvdGtleV9wYXRoKTsKKyAgICAgICAgICAgICAgICAg
ICAgbGliX2ZyZWUoaG90a2V5X3BhdGgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsq
LworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZnByaW50ZihmcCwgIlxuIik7CisgICAg
ICAgICAgICB0ID0gam95c3RpY2tfZGV2aWNlc1tpXS5heGlzX21hcHBpbmdbal0ubmVnYXRp
dmVfZGlyZWN0aW9uLmFjdGlvbjsKKyAgICAgICAgICAgIGZwcmludGYoZnAsICIlaSAldSAl
aSAldSIsIGksIDAsIGsrKywgdCk7CisgICAgICAgICAgICBzd2l0Y2ggKHQpIHsKKyAgICAg
ICAgICAgICAgICBjYXNlIEpPWVNUSUNLOgorICAgICAgICAgICAgICAgICAgICBmcHJpbnRm
KGZwLCAiICVpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqb3lzdGlja19kZXZp
Y2VzW2ldLmF4aXNfbWFwcGluZ1tqXS5uZWdhdGl2ZV9kaXJlY3Rpb24udmFsdWUuam95X3Bp
bgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgS0VZQk9BUkQ6CisgICAgICAgICAgICAg
ICAgICAgIGZwcmludGYoZnAsICIgJWkgJWkiLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGpveXN0aWNrX2RldmljZXNbaV0uYXhpc19tYXBwaW5nW2pdLm5lZ2F0aXZlX2RpcmVj
dGlvbi52YWx1ZS5rZXlbMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgam95c3Rp
Y2tfZGV2aWNlc1tpXS5heGlzX21hcHBpbmdbal0ubmVnYXRpdmVfZGlyZWN0aW9uLnZhbHVl
LmtleVsxXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIC8qY2FzZSBVSV9GVU5DVElPTjoKKyAg
ICAgICAgICAgICAgICAgICAgaG90a2V5X3BhdGggPSBzZGxfdWlfaG90a2V5X3BhdGgoc2Rs
am95c3RpY2tbaV0uaW5wdXRbal1ba10udmFsdWUudWlfZnVuY3Rpb24pOworICAgICAgICAg
ICAgICAgICAgICBmcHJpbnRmKGZwLCAiICVzIiwgaG90a2V5X3BhdGgpOworICAgICAgICAg
ICAgICAgICAgICBsaWJfZnJlZShob3RrZXlfcGF0aCk7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOyovCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmcHJpbnRmKGZwLCAiXG4i
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZnByaW50ZihmcCwgIlxuIik7CisgICAg
ICAgIH0KKyAgICAgICAgZnByaW50ZihmcCwgIlxuXG4iKTsKKyAgICB9CisKKyAgICBmY2xv
c2UoZnApOworCisgICAgcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHZvaWQgam95X2FyY2hf
a2V5d29yZF9jbGVhcih2b2lkKQoreworICAgIGludCBpLCBrOworCisgICAgZm9yIChpID0g
MDsgaSA8IG51bV9qb3lzdGlja19kZXZpY2VzOyArK2kpIHsKKyAgICAgICAgZm9yIChrID0g
MDsgayA8IGpveXN0aWNrX2RldmljZXNbaV0ubnVtX2F4ZXM7ICsraykgeworICAgICAgICAg
ICAgam95c3RpY2tfZGV2aWNlc1tpXS5heGlzX21hcHBpbmdba10ucG9zaXRpdmVfZGlyZWN0
aW9uLmFjdGlvbiA9IE5PTkU7CisgICAgICAgICAgICBqb3lzdGlja19kZXZpY2VzW2ldLmF4
aXNfbWFwcGluZ1trXS5uZWdhdGl2ZV9kaXJlY3Rpb24uYWN0aW9uID0gTk9ORTsKKyAgICAg
ICAgfQorICAgICAgICBmb3IgKGsgPSAwOyBrIDwgam95c3RpY2tfZGV2aWNlc1tpXS5udW1f
YnV0dG9uczsgKytrKSB7CisgICAgICAgICAgICBqb3lzdGlja19kZXZpY2VzW2ldLmJ1dHRv
bl9tYXBwaW5nW2tdLmFjdGlvbiA9IE5PTkU7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChr
ID0gMDsgayA8IGpveXN0aWNrX2RldmljZXNbaV0ubnVtX2hhdHM7ICsraykgeworICAgICAg
ICAgICAgam95c3RpY2tfZGV2aWNlc1tpXS5oYXRfbWFwcGluZ1trXS51cC5hY3Rpb24gPSBO
T05FOworICAgICAgICAgICAgam95c3RpY2tfZGV2aWNlc1tpXS5oYXRfbWFwcGluZ1trXS5k
b3duLmFjdGlvbiA9IE5PTkU7CisgICAgICAgICAgICBqb3lzdGlja19kZXZpY2VzW2ldLmhh
dF9tYXBwaW5nW2tdLmxlZnQuYWN0aW9uID0gTk9ORTsKKyAgICAgICAgICAgIGpveXN0aWNr
X2RldmljZXNbaV0uaGF0X21hcHBpbmdba10ucmlnaHQuYWN0aW9uID0gTk9ORTsKKyAgICAg
ICAgfQorICAgIH0KK30KKworc3RhdGljIHZvaWQgam95X2FyY2hfcGFyc2Vfa2V5d29yZChj
aGFyICpidWZmZXIpCit7CisgICAgY2hhciAqa2V5OworCisgICAga2V5ID0gc3RydG9rKGJ1
ZmZlciArIDEsICIgXHQ6Iik7CisKKyAgICBpZiAoIXN0cmNtcChrZXksICJDTEVBUiIpKSB7
CisgICAgICAgIGpveV9hcmNoX2tleXdvcmRfY2xlYXIoKTsKKyAgICB9Cit9CisKK3N0YXRp
YyB2b2lkIGpveV9hcmNoX3BhcnNlX2VudHJ5KGNoYXIgKmJ1ZmZlcikKK3sKKyAgICBjaGFy
ICpwOworICAgIGludCBqb3ludW0sIGlucHV0aW5kZXgsIGRhdGExID0gMCwgZGF0YTIgPSAw
OworICAgIGludCBpbnB1dHR5cGU7CisgICAgam95c3RpY2tfYWN0aW9uX3QgYWN0aW9uOwor
ICAgIGludCBheGlzX29yX2hhdF9pbmRleCwgZGlyZWN0aW9uOworCisgICAgcCA9IHN0cnRv
ayhidWZmZXIsICIgXHQ6Iik7CisKKyAgICBqb3ludW0gPSBhdG9pKHApOworCisgICAgaWYg
KGpveW51bSA+PSBudW1fam95c3RpY2tfZGV2aWNlcykgeworICAgICAgICBsb2dfZXJyb3Io
am95X2xvZywgIkNvdWxkIG5vdCBmaW5kIGpveXN0aWNrICVpISIsIGpveW51bSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBwID0gc3RydG9rKE5VTEwsICIgXHQsIik7Cisg
ICAgaWYgKHAgIT0gTlVMTCkgeworICAgICAgICBpbnB1dHR5cGUgPSBhdG9pKHApOworICAg
ICAgICBwID0gc3RydG9rKE5VTEwsICIgXHQsIik7CisgICAgICAgIGlmIChwICE9IE5VTEwp
IHsKKyAgICAgICAgICAgIGlucHV0aW5kZXggPSBhdG9pKHApOworICAgICAgICAgICAgcCA9
IHN0cnRvayhOVUxMLCAiIFx0Iik7CisgICAgICAgICAgICBpZiAocCAhPSBOVUxMKSB7Cisg
ICAgICAgICAgICAgICAgYWN0aW9uID0gKGpveXN0aWNrX2FjdGlvbl90KWF0b2kocCk7CisK
KyAgICAgICAgICAgICAgICBzd2l0Y2ggKGFjdGlvbikgeworICAgICAgICAgICAgICAgICAg
ICBjYXNlIEpPWVNUSUNLOgorICAgICAgICAgICAgICAgICAgICBjYXNlIFBPVF9BWElTOgor
ICAgICAgICAgICAgICAgICAgICBjYXNlIEtFWUJPQVJEOgorICAgICAgICAgICAgICAgICAg
ICAgICAgcCA9IHN0cnRvayhOVUxMLCAiIFx0Iik7CisgICAgICAgICAgICAgICAgICAgICAg
ICBkYXRhMSA9IGF0b2kocCk7CisgICAgICAgICAgICAgICAgICAgICAgICBwID0gc3RydG9r
KE5VTEwsICIgXHQiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEyID0gYXRvaShw
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgc3dpdGNoIChpbnB1dHR5cGUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgICAgICAgICAgICAgYXhpc19v
cl9oYXRfaW5kZXggPSBpbnB1dGluZGV4IC8gMjsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGRpcmVjdGlvbiA9IGlucHV0aW5kZXggJSAyOworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGF4aXNfb3JfaGF0X2luZGV4IDwgam95c3RpY2tfZGV2aWNlc1tqb3ludW1dLm51bV9h
eGVzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRpcmVjdGlvbiA9PSAw
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpveXN0aWNrX2RldmljZXNb
am95bnVtXS5heGlzX21hcHBpbmdbYXhpc19vcl9oYXRfaW5kZXhdLnBvc2l0aXZlX2RpcmVj
dGlvbi5hY3Rpb24gPSBhY3Rpb247CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN3aXRjaCAoYWN0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjYXNlIEpPWVNUSUNLOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGpveXN0aWNrX2RldmljZXNbam95bnVtXS5heGlzX21hcHBpbmdbYXhpc19vcl9oYXRf
aW5kZXhdLnBvc2l0aXZlX2RpcmVjdGlvbi52YWx1ZS5qb3lfcGluID0gZGF0YTE7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFBPVF9BWElTOgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpveXN0aWNrX2RldmljZXNbam95bnVtXS5h
eGlzX21hcHBpbmdbYXhpc19vcl9oYXRfaW5kZXhdLnBvc2l0aXZlX2RpcmVjdGlvbi52YWx1
ZS5qb3lfcGluID0gZGF0YTE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNl
IEtFWUJPQVJEOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpv
eXN0aWNrX2RldmljZXNbam95bnVtXS5heGlzX21hcHBpbmdbYXhpc19vcl9oYXRfaW5kZXhd
LnBvc2l0aXZlX2RpcmVjdGlvbi52YWx1ZS5rZXlbMF0gPSBkYXRhMTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqb3lzdGlja19kZXZpY2VzW2pveW51bV0u
YXhpc19tYXBwaW5nW2F4aXNfb3JfaGF0X2luZGV4XS5wb3NpdGl2ZV9kaXJlY3Rpb24udmFs
dWUua2V5WzFdID0gZGF0YTI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgam95
c3RpY2tfZGV2aWNlc1tqb3ludW1dLmF4aXNfbWFwcGluZ1theGlzX29yX2hhdF9pbmRleF0u
bmVnYXRpdmVfZGlyZWN0aW9uLmFjdGlvbiA9IGFjdGlvbjsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3dpdGNoIChhY3Rpb24pIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgSk9ZU1RJQ0s6CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgam95c3RpY2tfZGV2aWNlc1tqb3ludW1dLmF4aXNfbWFwcGlu
Z1theGlzX29yX2hhdF9pbmRleF0ubmVnYXRpdmVfZGlyZWN0aW9uLnZhbHVlLmpveV9waW4g
PSBkYXRhMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgUE9UX0FYSVM6
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgam95c3RpY2tfZGV2
aWNlc1tqb3ludW1dLmF4aXNfbWFwcGluZ1theGlzX29yX2hhdF9pbmRleF0ubmVnYXRpdmVf
ZGlyZWN0aW9uLnZhbHVlLmpveV9waW4gPSBkYXRhMTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNhc2UgS0VZQk9BUkQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgam95c3RpY2tfZGV2aWNlc1tqb3ludW1dLmF4aXNfbWFwcGluZ1theGlz
X29yX2hhdF9pbmRleF0ubmVnYXRpdmVfZGlyZWN0aW9uLnZhbHVlLmtleVswXSA9IGRhdGEx
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpveXN0aWNrX2Rl
dmljZXNbam95bnVtXS5heGlzX21hcHBpbmdbYXhpc19vcl9oYXRfaW5kZXhdLm5lZ2F0aXZl
X2RpcmVjdGlvbi52YWx1ZS5rZXlbMV0gPSBkYXRhMjsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ193YXJuaW5nKGpveV9sb2cs
ICJpbnB1dGluZGV4ICVpIHRvbyBsYXJnZSBmb3IgaW5wdXR0eXBlICV1LCBqb3ludW0gJWkh
IiwgaW5wdXRpbmRleCwgaW5wdXR0eXBlLCBqb3ludW0pOworICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KK30KKworaW50IGpveV9hcmNoX21hcHBpbmdfbG9hZChjb25zdCBjaGFyICpmaWxl
bmFtZSkKK3sKKyAgICBGSUxFICpmcDsKKyAgICBjaGFyICpjb21wbGV0ZV9wYXRoOworICAg
IGNoYXIgYnVmZmVyWzEwMDBdOworCisgICAgLyogU2lsZW50bHkgaWdub3JlIGtleW1hcCBs
b2FkIG9uIHJlc291cmNlICYgY21kbGluZSBpbml0ICovCisgICAgaWYgKGpveXN0aWNrX2Rl
dmljZXMgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAo
ZmlsZW5hbWUgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAg
ZnAgPSBzeXNmaWxlX29wZW4oZmlsZW5hbWUsIE5VTEwsICZjb21wbGV0ZV9wYXRoLCBNT0RF
X1JFQURfVEVYVCk7CisKKyAgICBpZiAoZnAgPT0gTlVMTCkgeworICAgICAgICBsb2dfd2Fy
bmluZyhqb3lfbG9nLCAiRmFpbGVkIHRvIG9wZW4gYCVzJy4iLCBmaWxlbmFtZSk7CisgICAg
ICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBsb2dfbWVzc2FnZShqb3lfbG9nLCAiTG9h
ZGluZyBqb3lzdGljayBtYXAgYCVzJy4iLCBjb21wbGV0ZV9wYXRoKTsKKworICAgIGxpYl9m
cmVlKGNvbXBsZXRlX3BhdGgpOworCisgICAgZG8geworICAgICAgICBidWZmZXJbMF0gPSAw
OworICAgICAgICBpZiAoZmdldHMoYnVmZmVyLCA5OTksIGZwKSkgeworICAgICAgICAgICAg
Y2hhciAqcDsKKworICAgICAgICAgICAgaWYgKHN0cmxlbihidWZmZXIpID09IDApIHsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYnVm
ZmVyW3N0cmxlbihidWZmZXIpIC0gMV0gPSAwOyAvKiByZW1vdmUgbmV3bGluZSAqLworCisg
ICAgICAgICAgICAvKiByZW1vdmUgY29tbWVudHMgKi8KKyAgICAgICAgICAgIGlmICgocCA9
IHN0cmNocihidWZmZXIsICcjJykpKSB7CisgICAgICAgICAgICAgICAgKnAgPSAwOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAvKiByZW1vdmUgd2hpdGVzcGFjZSBhdCB0aGUg
YmVnaW5uaW5nIG9mIHRoZSBsaW5lICovCisgICAgICAgICAgICBwID0gYnVmZmVyOworICAg
ICAgICAgICAgd2hpbGUgKCgoKnAgPT0gJyAnKSB8fCAoKnAgPT0gJ1x0JykpICYmICgqcCAh
PSAwKSkgeworICAgICAgICAgICAgICAgICsrcDsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgc3dpdGNoICgqcCkgeworICAgICAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAnISc6CisgICAgICAg
ICAgICAgICAgICAgIC8qIGtleXdvcmQgaGFuZGxpbmcgKi8KKyAgICAgICAgICAgICAgICAg
ICAgam95X2FyY2hfcGFyc2Vfa2V5d29yZChwKTsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgLyog
dGFibGUgZW50cnkgaGFuZGxpbmcgKi8KKyAgICAgICAgICAgICAgICAgICAgam95X2FyY2hf
cGFyc2VfZW50cnkocCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfSB3aGlsZSAoIWZlb2YoZnApKTsKKyAgICBmY2xvc2Uo
ZnApOworCisgICAgcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgc2V0X2pveXN0aWNrX2F1
dG9maXJlKGludCB2YWwsIHZvaWQgKnBhcmFtKQogewogICAgIGludCBwb3J0X2lkeCA9IHZp
Y2VfcHRyX3RvX2ludChwYXJhbSk7CkBAIC05NTMsNiArMTMxNiwxNSBAQAogICAgIHJldHVy
biAwOwogfQogCitzdGF0aWMgaW50IGpveW1hcF9maWxlX3NldChjb25zdCBjaGFyICp2YWws
IHZvaWQgKnBhcmFtKQoreworICAgIGlmICh1dGlsX3N0cmluZ19zZXQoJmpveW1hcF9maWxl
LCB2YWwpKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHJldHVybiBqb3lf
YXJjaF9tYXBwaW5nX2xvYWQoam95bWFwX2ZpbGUpOworfQorCiBzdGF0aWMgY29uc3QgcmVz
b3VyY2VfaW50X3Qgam95b3Bwb3NpdGVfcmVzb3VyY2VzX2ludFtdID0gewogICAgIHsgIkpv
eU9wcG9zaXRlIiwgMCwgUkVTX0VWRU5UX05PLCBOVUxMLAogICAgICAgJmpveXN0aWNrX29w
cG9zaXRlX2VuYWJsZSwgc2V0X2pveXN0aWNrX29wcG9zaXRlX2VuYWJsZSwgTlVMTCB9LApA
QCAtMTA3OSw2ICsxNDUxLDEzIEBACiAgICAgUkVTT1VSQ0VfSU5UX0xJU1RfRU5ECiB9Owog
CitzdGF0aWMgcmVzb3VyY2Vfc3RyaW5nX3QgcmVzb3VyY2VzX3N0cmluZ1tdID0geworICAg
IHsgIkpveU1hcEZpbGUiLCBOVUxMLCBSRVNfRVZFTlRfTk8sIE5VTEwsCisgICAgICAmam95
bWFwX2ZpbGUsIGpveW1hcF9maWxlX3NldCwgKHZvaWQgKikwIH0sCisgICAgUkVTT1VSQ0Vf
U1RSSU5HX0xJU1RfRU5ECit9OworCisKIC8qKiBcYnJpZWYgIEluaXRpYWxpemUgam95c3Rp
Y2sgcmVzb3VyY2VzCiAgKgogICogXHJldHVybiAgMCBvbiBzdWNjZXNzLCAtMSBvbiBmYWls
dXJlCkBAIC0xMTc3LDcgKzE1NTYsMTMgQEAKICAgICAgICAgICAgIHJldHVybiAtMTsKICAg
ICAgICAgfQogICAgIH0KKyAgICBqb3ltYXBfZmFjdG9yeSA9IGFyY2hkZXBfZGVmYXVsdF9q
b3ltYXBfZmlsZV9uYW1lKCk7CisgICAgcmVzb3VyY2VzX3N0cmluZ1swXS5mYWN0b3J5X3Zh
bHVlID0gam95bWFwX2ZhY3Rvcnk7CiAKKyAgICBpZiAocmVzb3VyY2VzX3JlZ2lzdGVyX3N0
cmluZyhyZXNvdXJjZXNfc3RyaW5nKSA8IDApIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAg
IH0KKwogI2lmZGVmIEhBVkVfU0RMX05VTUpPWVNUSUNLUwogICAgIHJldHVybiBqb3lfc2Rs
X3Jlc291cmNlc19pbml0KCk7CiAjZWxzZQpAQCAtMTYwMCw2ICsxOTg1LDggQEAKICAgICB9
CiAjZW5kaWYKIAorICAgIGpveV9hcmNoX21hcHBpbmdfbG9hZChqb3ltYXBfZmlsZSk7CisK
ICAgICByZXR1cm4gMTsKIH0KIApAQCAtMTY1Niw3ICsyMDQzLDYgQEAKIAogLyogLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSAqLwogCi0jaWZuZGVmIEhBVkVfU0RMX05VTUpPWVNUSUNLUwogdm9p
ZCByZWdpc3Rlcl9qb3lzdGlja19kcml2ZXIoCiAgICAgc3RydWN0IGpveXN0aWNrX2RyaXZl
cl9zICpkcml2ZXIsCiAgICAgY29uc3QgY2hhciAqam5hbWUsCkBAIC0xNzAwLDYgKzIwODYs
OSBAQAogICAgIG5ld19qb3lzdGlja19kZXZpY2UtPmhhdF9tYXBwaW5nID0gKGpveXN0aWNr
X2hhdF9tYXBwaW5nX3QgKilsaWJfY2FsbG9jKG51bV9oYXRzLCBzaXplb2Yoam95c3RpY2tf
aGF0X21hcHBpbmdfdCkpOwogICAgIG5ld19qb3lzdGlja19kZXZpY2UtPmpveXBvcnQgPSAt
MTsKICAgICBuZXdfam95c3RpY2tfZGV2aWNlLT5wcml2ID0gcHJpdjsKKyAgICBuZXdfam95
c3RpY2tfZGV2aWNlLT5udW1fYXhlcyA9IG51bV9heGVzOworICAgIG5ld19qb3lzdGlja19k
ZXZpY2UtPm51bV9idXR0b25zID0gbnVtX2J1dHRvbnM7CisgICAgbmV3X2pveXN0aWNrX2Rl
dmljZS0+bnVtX2hhdHMgPSBudW1faGF0czsKIH0KIAogc3RhdGljIHZvaWQgam95X3BlcmZv
cm1fZXZlbnQoam95c3RpY2tfbWFwcGluZ190ICpldmVudCwgaW50IGpveXBvcnQsIGludCB2
YWx1ZSkKQEAgLTE4MDUsNiArMjE5NCw0OSBAQAogICAgIGpveXN0aWNrX2RldmljZXNbam95
bnVtXS5oYXRfbWFwcGluZ1toYXRdLnByZXYgPSB2YWx1ZTsKIH0KIAorI2lmZGVmIEhBVkVf
U0RMX05VTUpPWVNUSUNLUworam95c3RpY2tfYXhpc192YWx1ZV90IGpveV9heGlzX3ByZXYo
dWludDhfdCBqb3ludW0sIHVpbnQ4X3QgYXhpcykgeworICAgIHJldHVybiBqb3lzdGlja19k
ZXZpY2VzW2pveW51bV0uYXhpc19tYXBwaW5nW2F4aXNdLnByZXY7Cit9CisKK2pveXN0aWNr
X21hcHBpbmdfdCogam95X2dldF9heGlzX21hcHBpbmcodWludDhfdCBqb3ludW0sIHVpbnQ4
X3QgYXhpcywgam95c3RpY2tfYXhpc192YWx1ZV90IHZhbHVlKSB7CisgICAgam95c3RpY2tf
ZGV2aWNlc1tqb3ludW1dLmF4aXNfbWFwcGluZ1theGlzXS5wcmV2ID0gdmFsdWU7CisgICAg
aWYgKHZhbHVlID09IEpPWV9BWElTX1BPU0lUSVZFKSB7CisgICAgICAgIHJldHVybiAmam95
c3RpY2tfZGV2aWNlc1tqb3ludW1dLmF4aXNfbWFwcGluZ1theGlzXS5wb3NpdGl2ZV9kaXJl
Y3Rpb247CisgICAgfQorICAgIGlmICh2YWx1ZSA9PSBKT1lfQVhJU19ORUdBVElWRSkgewor
ICAgICAgICByZXR1cm4gJmpveXN0aWNrX2RldmljZXNbam95bnVtXS5heGlzX21hcHBpbmdb
YXhpc10ubmVnYXRpdmVfZGlyZWN0aW9uOworICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK30K
Kworam95c3RpY2tfbWFwcGluZ190KiBqb3lfZ2V0X2J1dHRvbl9tYXBwaW5nKHVpbnQ4X3Qg
am95bnVtLCB1aW50OF90IGJ1dHRvbikgeworICAgIHJldHVybiAmam95c3RpY2tfZGV2aWNl
c1tqb3ludW1dLmJ1dHRvbl9tYXBwaW5nW2J1dHRvbl07Cit9CisKK2pveXN0aWNrX2F4aXNf
dmFsdWVfdCBqb3lfaGF0X3ByZXYodWludDhfdCBqb3ludW0sIHVpbnQ4X3QgaGF0KSB7Cisg
ICAgcmV0dXJuIGpveXN0aWNrX2RldmljZXNbam95bnVtXS5oYXRfbWFwcGluZ1toYXRdLnBy
ZXY7Cit9CisKK2pveXN0aWNrX21hcHBpbmdfdCogam95X2dldF9oYXRfbWFwcGluZyh1aW50
OF90IGpveW51bSwgdWludDhfdCBoYXQsIHVpbnQ4X3QgdmFsdWUpIHsKKyAgICB1aW50OF90
IHByZXYgPSBqb3lzdGlja19kZXZpY2VzW2pveW51bV0uaGF0X21hcHBpbmdbaGF0XS5wcmV2
OworICAgIGpveXN0aWNrX21hcHBpbmdfdCogbWFwcGluZyA9IE5VTEw7CisgICAgaWYgKCh2
YWx1ZSAmIEpPWVNUSUNLX0RJUkVDVElPTl9VUCkgJiYgIShwcmV2ICYgSk9ZU1RJQ0tfRElS
RUNUSU9OX1VQKSkgeworICAgICAgICBtYXBwaW5nID0gJmpveXN0aWNrX2RldmljZXNbam95
bnVtXS5oYXRfbWFwcGluZ1toYXRdLnVwOworICAgIH0gZWxzZSBpZiAoKHZhbHVlICYgSk9Z
U1RJQ0tfRElSRUNUSU9OX0RPV04pICYmICEocHJldiAmIEpPWVNUSUNLX0RJUkVDVElPTl9E
T1dOKSkgeworICAgICAgICBtYXBwaW5nID0gJmpveXN0aWNrX2RldmljZXNbam95bnVtXS5o
YXRfbWFwcGluZ1toYXRdLmRvd247CisgICAgfQorICAgIGlmICgodmFsdWUgJiBKT1lTVElD
S19ESVJFQ1RJT05fTEVGVCkgJiYgIShwcmV2ICYgSk9ZU1RJQ0tfRElSRUNUSU9OX0xFRlQp
KSB7CisgICAgICAgIG1hcHBpbmcgPSAmam95c3RpY2tfZGV2aWNlc1tqb3ludW1dLmhhdF9t
YXBwaW5nW2hhdF0ubGVmdDsKKyAgICB9IGVsc2UgaWYgKCh2YWx1ZSAmIEpPWVNUSUNLX0RJ
UkVDVElPTl9SSUdIVCkgJiYgIShwcmV2ICYgSk9ZU1RJQ0tfRElSRUNUSU9OX1JJR0hUKSkg
eworICAgICAgICBtYXBwaW5nID0gJmpveXN0aWNrX2RldmljZXNbam95bnVtXS5oYXRfbWFw
cGluZ1toYXRdLnJpZ2h0OworICAgIH0KKworICAgIGpveXN0aWNrX2RldmljZXNbam95bnVt
XS5oYXRfbWFwcGluZ1toYXRdLnByZXYgPSB2YWx1ZTsKKyAgICByZXR1cm4gbWFwcGluZzsK
K30KKyNlbmRpZgorCiBzdGF0aWMgaW50IGpveXN0aWNrZGV2aWNlaWR4ID0gMDsKIAogdm9p
ZCBqb3lzdGlja191aV9yZXNldF9kZXZpY2VfbGlzdCh2b2lkKQpAQCAtMTg0MSw2ICsyMjcz
LDEzIEBACiAgICAgfQogCiAgICAgbGliX2ZyZWUoam95c3RpY2tfZGV2aWNlcyk7CisgICAg
aWYgKGpveW1hcF9mYWN0b3J5KSB7CisgICAgICAgIGxpYl9mcmVlKGpveW1hcF9mYWN0b3J5
KTsKKyAgICAgICAgam95bWFwX2ZhY3RvcnkgPSBOVUxMOworICAgIH0KKyAgICBpZiAoam95
bWFwX2ZpbGUpIHsKKyAgICAgICAgbGliX2ZyZWUoam95bWFwX2ZpbGUpOworICAgICAgICBq
b3ltYXBfZmlsZSA9IE5VTEw7CisgICAgfQogfQotI2VuZGlmCiAKSW5kZXg6IGRldi92aWNl
L3RydW5rL3NyYy9qb3lwb3J0L2pveXN0aWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZGV2L3Zp
Y2UvdHJ1bmsvc3JjL2pveXBvcnQvam95c3RpY2suaAkocmV2aXNpb25lIDQxMzQ4KQorKysg
ZGV2L3ZpY2UvdHJ1bmsvc3JjL2pveXBvcnQvam95c3RpY2suaAkoY29waWEgZGkgbGF2b3Jv
KQpAQCAtMzAsNiArMzAsOSBAQAogCiAjaW5jbHVkZSAidHlwZXMuaCIKICNpbmNsdWRlICJq
b3lwb3J0LmgiIC8qIGZvciBKT1lQT1JUX01BWF9QT1JUUyAqLworI2lmIChkZWZpbmVkIFVT
RV9TRExVSSB8fGRlZmluZWQgVVNFX1NETFVJMikKKyNpbmNsdWRlICJ1aW1lbnUuaCIKKyNl
bmRpZgogCiBleHRlcm4gaW50IGpveXN0aWNrX2luaXQodm9pZCk7CiBleHRlcm4gaW50IGpv
eXN0aWNrX3Jlc291cmNlc19pbml0KHZvaWQpOwpAQCAtMTQyLDYgKzE0NSw0NiBAQAogICAg
Sk9ZX0FYSVNfTkVHQVRJVkUKIH0gam95c3RpY2tfYXhpc192YWx1ZV90OwogCisvKiBBY3Rp
b25zIHRvIHBlcmZvcm0gb24gam95c3RpY2sgaW5wdXQgKi8KK3R5cGVkZWYgZW51bSBqb3lz
dGlja19hY3Rpb25fZSB7CisgICAgTk9ORSA9IDAsCisKKyAgICAvKiBKb3lzdGljayBtb3Zl
bWVudCBvciBidXR0b24gcHJlc3MgKi8KKyAgICBKT1lTVElDSyA9IDEsCisKKyAgICAvKiBL
ZXlib2FyZCBrZXkgcHJlc3MgKi8KKyAgICBLRVlCT0FSRCA9IDIsCisKKyAgICAvKiBNYXAg
YnV0dG9uICovCisgICAgTUFQID0gMywKKworICAgIC8qIChEZSlBY3RpdmF0ZSBVSSAqLwor
ICAgIFVJX0FDVElWQVRFID0gNCwKKworICAgIC8qIENhbGwgVUkgZnVuY3Rpb24gKi8KKyAg
ICBVSV9GVU5DVElPTiA9IDUsCisKKyAgICAvKiBKb3lzdGljayBheGlzIHVzZWQgZm9yIHBv
dGVudGlvbWV0ZXJzICovCisgICAgUE9UX0FYSVMgPSA2Cit9IGpveXN0aWNrX2FjdGlvbl90
OworCisvKiBJbnB1dCBtYXBwaW5nIGZvciBlYWNoIGRpcmVjdGlvbi9idXR0b24vZXRjICov
Cit0eXBlZGVmIHN0cnVjdCBqb3lzdGlja19tYXBwaW5nX3MgeworICAgIC8qIEFjdGlvbiB0
byBwZXJmb3JtICovCisgICAgam95c3RpY2tfYWN0aW9uX3QgYWN0aW9uOworCisgICAgdW5p
b24geworICAgICAgICB1aW50MTZfdCBqb3lfcGluOworCisgICAgICAgIC8qIGtleVswXSA9
IHJvdywga2V5WzFdID0gY29sdW1uICovCisgICAgICAgIGludCBrZXlbMl07CisjaWYgKGRl
ZmluZWQgVVNFX1NETFVJIHx8ZGVmaW5lZCBVU0VfU0RMVUkyKQorICAgICAgICAvKiBwb2lu
dGVyIHRvIHRoZSBtZW51IGl0ZW0gKi8KKyAgICAgICAgdWlfbWVudV9lbnRyeV90ICp1aV9m
dW5jdGlvbjsKKyNlbmRpZgorICAgIH0gdmFsdWU7Cit9IGpveXN0aWNrX21hcHBpbmdfdDsK
KwogZXh0ZXJuIHZvaWQgam95X2F4aXNfZXZlbnQodWludDhfdCBqb3ludW0sIHVpbnQ4X3Qg
YXhpcywgam95c3RpY2tfYXhpc192YWx1ZV90IHZhbHVlKTsKIGV4dGVybiB2b2lkIGpveV9i
dXR0b25fZXZlbnQodWludDhfdCBqb3ludW0sIHVpbnQ4X3QgYnV0dG9uLCB1aW50OF90IHZh
bHVlKTsKIGV4dGVybiB2b2lkIGpveV9oYXRfZXZlbnQodWludDhfdCBqb3ludW0sIHVpbnQ4
X3QgYnV0dG9uLCB1aW50OF90IHZhbHVlKTsKQEAgLTE0OSw2ICsxOTIsMTMgQEAKIGV4dGVy
biB2b2lkIGpveXN0aWNrX2Nsb3NlKHZvaWQpOwogZXh0ZXJuIHZvaWQgam95c3RpY2tfdWlf
cmVzZXRfZGV2aWNlX2xpc3Qodm9pZCk7CiBleHRlcm4gY29uc3QgY2hhciAqam95c3RpY2tf
dWlfZ2V0X25leHRfZGV2aWNlX25hbWUoaW50ICppZCk7CitleHRlcm4gaW50IGpveV9hcmNo
X21hcHBpbmdfZHVtcChjb25zdCBjaGFyICpmaWxlbmFtZSk7CitleHRlcm4gaW50IGpveV9h
cmNoX21hcHBpbmdfbG9hZChjb25zdCBjaGFyICpmaWxlbmFtZSk7CitleHRlcm4gam95c3Rp
Y2tfYXhpc192YWx1ZV90IGpveV9heGlzX3ByZXYodWludDhfdCBqb3ludW0sIHVpbnQ4X3Qg
YXhpcyk7CitleHRlcm4gam95c3RpY2tfbWFwcGluZ190KiBqb3lfZ2V0X2F4aXNfbWFwcGlu
Zyh1aW50OF90IGpveW51bSwgdWludDhfdCBheGlzLCBqb3lzdGlja19heGlzX3ZhbHVlX3Qg
dmFsdWUpOworZXh0ZXJuIGpveXN0aWNrX21hcHBpbmdfdCogam95X2dldF9idXR0b25fbWFw
cGluZyh1aW50OF90IGpveW51bSwgdWludDhfdCBidXR0b24pOworZXh0ZXJuIGpveXN0aWNr
X2F4aXNfdmFsdWVfdCBqb3lfaGF0X3ByZXYodWludDhfdCBqb3ludW0sIHVpbnQ4X3QgaGF0
KTsKK2V4dGVybiBqb3lzdGlja19tYXBwaW5nX3QqIGpveV9nZXRfaGF0X21hcHBpbmcodWlu
dDhfdCBqb3ludW0sIHVpbnQ4X3QgaGF0LCB1aW50OF90IHZhbHVlKTsKIAogI2RlZmluZSBK
T1lTVElDS19ESVJFQ1RJT05fRE9XTiAgMQogI2RlZmluZSBKT1lTVElDS19ESVJFQ1RJT05f
VVAgICAgMgo=
--------------Yqr0mpG3jWAt1LeK400iiCgv
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
gnokii-users mailing list
[email protected]
https://lists.nongnu.org/mailman/listinfo/gnokii-users

--------------Yqr0mpG3jWAt1LeK400iiCgv--