[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH] [1/3] Xenoprof: Enabling performance profiling in Xen



Is the nmi_sanity_check() needed? We shouldn't lose NMIs: even if we
take one while doing NMI processing, we sholuld retake the NMI as soon
as the first one IRETs.

There used to be a problem whereby the Xen NMI handler would bail if
it detected it had interrupted Xen at an unfortunate time. I guess the
code in xenoprof was probably added to deal with this situation. If
so then it is no longer needed -- I fix up in a more generic way now
(reschedule the NMI automatically). 

Apart from that I guess this is mostly just oprofile source files
pulled out of Linux? Is there much/any other Xen-specific code in the
patch? 

 -- Keir

> 
>   Here is part 1 of the patches for Xenoprof
> 
> >>   1) xenoprof-1.0-xen-2.0.5.patch:
> >>       - Patch for Xen
> 
>   Jose Renato Santos
>   HP Labs
>    xenoprof-1.0-xen-2.0.5.patch
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxxxxxxxx
> http://lists.xensource.com/xen-devel
 -=- MIME -=- 
This is a multi-part message in MIME format.

------_=_NextPart_001_01C53CB2.59CE8456
Content-Type: text/plain;
        charset="us-ascii"
Content-Transfer-Encoding: quoted-printable


  Here is part 1 of the patches for Xenoprof

>>   1) xenoprof-1.0-xen-2.0.5.patch:
>>       - Patch for Xen

  Jose Renato Santos
  HP Labs

------_=_NextPart_001_01C53CB2.59CE8456
Content-Type: application/octet-stream;
        name="xenoprof-1.0-xen-2.0.5.patch"
Content-Transfer-Encoding: base64
Content-Description: xenoprof-1.0-xen-2.0.5.patch
Content-Disposition: attachment;
        filename="xenoprof-1.0-xen-2.0.5.patch"

ZGlmZiAtUE5hdXIgeGVuLTIuMC41L3hlbi9hcmNoL3g4Ni9hcGljLmMgeGVuLTIuMC41LXByb2Yv
eGVuL2FyY2gveDg2L2FwaWMuYwotLS0geGVuLTIuMC41L3hlbi9hcmNoL3g4Ni9hcGljLmMJMjAw
NS0wMy0xMCAxMTo1MjoxNS4wMDAwMDAwMDAgLTA4MDAKKysrIHhlbi0yLjAuNS1wcm9mL3hlbi9h
cmNoL3g4Ni9hcGljLmMJMjAwNS0wNC0wNiAwOToyNzoxMy4wMDAwMDAwMDAgLTA3MDAKQEAgLTcy
NCw2ICs3MjQsOSBAQAogCiB1bnNpZ25lZCBpbnQgYXBpY190aW1lcl9pcnFzIFtOUl9DUFVTXTsK
IAorZXh0ZXJuIGludCBubWlfcHJvZmlsaW5nX3N0YXJ0ZWQ7CitleHRlcm4gaW50IG5taV9zYW5p
dHlfY2hlY2soc3RydWN0IHhlbl9yZWdzICogcmVncywgaW50IGNwdSk7CisKIHZvaWQgc21wX2Fw
aWNfdGltZXJfaW50ZXJydXB0KHN0cnVjdCB4ZW5fcmVncyAqIHJlZ3MpCiB7CiAgICAgYWNrX0FQ
SUNfaXJxKCk7CkBAIC03MzEsNiArNzM0LDEyIEBACiAgICAgYXBpY190aW1lcl9pcnFzW3NtcF9w
cm9jZXNzb3JfaWQoKV0rKzsKICAgICBwZXJmY19pbmNyYyhhcGljX3RpbWVyKTsKIAorICAgIC8q
ICB3ZSBtYXkgbG9zZSBOTUkgc2FtcGxlcyBmb3Igc2V2ZXJhbCByZWFzb25zLgorCUhlcmUsIHdl
IHByb3RlY3QgYWdhaW5zdCB0aGF0IGJ5IGRvaW5nIGFuIG5taSBzYW5pdHkKKwljaGVjayBldmVy
eSB0aW1lciBpbnRlcnJ1cHQgb24gZXZlcnkgcHJvY2Vzc29yICovCisgICAgaWYgKG5taV9wcm9m
aWxpbmdfc3RhcnRlZCkKKwlubWlfc2FuaXR5X2NoZWNrKHJlZ3MsIHNtcF9wcm9jZXNzb3JfaWQo
KSk7CisKICAgICByYWlzZV9zb2Z0aXJxKEFDX1RJTUVSX1NPRlRJUlEpOwogfQogCmRpZmYgLVBO
YXVyIHhlbi0yLjAuNS94ZW4vYXJjaC94ODYvTWFrZWZpbGUgeGVuLTIuMC41LXByb2YveGVuL2Fy
Y2gveDg2L01ha2VmaWxlCi0tLSB4ZW4tMi4wLjUveGVuL2FyY2gveDg2L01ha2VmaWxlCTIwMDUt
MDMtMTAgMTE6NTI6MTMuMDAwMDAwMDAwIC0wODAwCisrKyB4ZW4tMi4wLjUtcHJvZi94ZW4vYXJj
aC94ODYvTWFrZWZpbGUJMjAwNS0wNC0wNyAwOTowNDoxMy4wMDAwMDAwMDAgLTA3MDAKQEAgLTEy
LDcgKzEyLDEwIEBACiAKIE9CSlMgOj0gJChzdWJzdCAkKFRBUkdFVF9TVUJBUkNIKS9hc20tb2Zm
c2V0cy5vLCwkKE9CSlMpKQogCitPQkpTICs9IG9wcm9maWxlL29wcm9maWxlLm8KKwogZGVmYXVs
dDogJChUQVJHRVQpCisJbWFrZSAtQyBvcHJvZmlsZQogCiAkKFRBUkdFVCk6ICQoVEFSR0VUKS1z
eW1zIGJvb3QvbWtlbGYzMgogCS4vYm9vdC9ta2VsZjMyICQoVEFSR0VUKS1zeW1zICQoVEFSR0VU
KSAweDEwMDAwMApAQCAtMzAsMTEgKzMzLDE1IEBACiBib290L21rZWxmMzI6IGJvb3QvbWtlbGYz
Mi5jCiAJJChIT1NUQ0MpICQoSE9TVENGTEFHUykgLW8gJEAgJDwKIAorb3Byb2ZpbGUvb3Byb2Zp
bGUubzoKKwkkKE1BS0UpIC1DIG9wcm9maWxlCisKIGNsZWFuOgogCXJtIC1mICoubyAqLnMgKn4g
Y29yZSBib290LyoubyBib290Lyp+IGJvb3QvY29yZSBib290L21rZWxmMzIKIAlybSAtZiB4ODZf
MzIvKi5vIHg4Nl8zMi8qfiB4ODZfMzIvY29yZQogCXJtIC1mIHg4Nl82NC8qLm8geDg2XzY0Lyp+
IHg4Nl82NC9jb3JlCiAJcm0gLWYgbXRyci8qLm8gbXRyci8qfiBtdHJyL2NvcmUKKwlybSAtZiBv
cHJvZmlsZS8qLm8KIAogZGVsZXRlLXVuZnJlc2gtZmlsZXM6CiAJIyBub3RoaW5nCmRpZmYgLVBO
YXVyIHhlbi0yLjAuNS94ZW4vYXJjaC94ODYvbWljcm9jb2RlLmMgeGVuLTIuMC41LXByb2YveGVu
L2FyY2gveDg2L21pY3JvY29kZS5jCi0tLSB4ZW4tMi4wLjUveGVuL2FyY2gveDg2L21pY3JvY29k
ZS5jCTIwMDUtMDMtMTAgMTE6NTI6MTMuMDAwMDAwMDAwIC0wODAwCisrKyB4ZW4tMi4wLjUtcHJv
Zi94ZW4vYXJjaC94ODYvbWljcm9jb2RlLmMJMjAwNS0wNC0wNiAwOToyNzoxMy4wMDAwMDAwMDAg
LTA3MDAKQEAgLTg3LDEzICs4Nyw2IEBACiAjZGVmaW5lIHZtYWxsb2MoX3MpIHhtYWxsb2MoX3Mp
CiAjZGVmaW5lIHZmcmVlKF9wKSB4ZnJlZShfcCkKICNkZWZpbmUgbnVtX29ubGluZV9jcHVzKCkg
c21wX251bV9jcHVzCi1zdGF0aWMgaW5saW5lIGludCBvbl9lYWNoX2NwdSgKLSAgICB2b2lkICgq
ZnVuYykgKHZvaWQgKmluZm8pLCB2b2lkICppbmZvLCBpbnQgcmV0cnksIGludCB3YWl0KQotewot
ICAgIGludCByZXQgPSBzbXBfY2FsbF9mdW5jdGlvbihmdW5jLCBpbmZvLCByZXRyeSwgd2FpdCk7
Ci0gICAgZnVuYyhpbmZvKTsKLSAgICByZXR1cm4gcmV0OwotfQogCiAjaWYgMAogTU9EVUxFX0RF
U0NSSVBUSU9OKCJJbnRlbCBDUFUgKElBLTMyKSBNaWNyb2NvZGUgVXBkYXRlIERyaXZlciIpOwpk
aWZmIC1QTmF1ciB4ZW4tMi4wLjUveGVuL2FyY2gveDg2L25taS5jIHhlbi0yLjAuNS1wcm9mL3hl
bi9hcmNoL3g4Ni9ubWkuYwotLS0geGVuLTIuMC41L3hlbi9hcmNoL3g4Ni9ubWkuYwkyMDA1LTAz
LTEwIDExOjUyOjEzLjAwMDAwMDAwMCAtMDgwMAorKysgeGVuLTIuMC41LXByb2YveGVuL2FyY2gv
eDg2L25taS5jCTIwMDUtMDQtMDYgMDk6Mjc6MTMuMDAwMDAwMDAwIC0wNzAwCkBAIC01LDYgKzUs
MTAgQEAKICAqCiAgKiAgU3RhcnRlZCBieSBJbmdvIE1vbG5hciA8bWluZ29AcmVkaGF0LmNvbT4K
ICAqCisgKiBNb2RpZmllZCBieSBBcmF2aW5kIE1lbm9uIGZvciBzdXBwb3J0aW5nIG9wcm9maWxl
CisgKiBUaGVzZSBtb2RpZmljYXRpb25zIGFyZToKKyAqIENvcHlyaWdodCAoQykgMjAwNSBIZXds
ZXR0LVBhY2thcmQgQ28uCisgKgogICogIEZpeGVzOgogICogIE1pa2FlbCBQZXR0ZXJzc29uCTog
QU1EIEs3IHN1cHBvcnQgZm9yIGxvY2FsIEFQSUMgTk1JIHdhdGNoZG9nLgogICogIE1pa2FlbCBQ
ZXR0ZXJzc29uCTogUG93ZXIgTWFuYWdlbWVudCBmb3IgbG9jYWwgQVBJQyBOTUkgd2F0Y2hkb2cu
CkBAIC0zNCw2ICszOCwyOCBAQAogCiBleHRlcm4gaW50IGxvZ2ljYWxfcHJvY19pZFtdOwogCisv
KgorICogbGFwaWNfbm1pX293bmVyIHRyYWNrcyB0aGUgb3duZXJzaGlwIG9mIHRoZSBsYXBpYyBO
TUkgaGFyZHdhcmU6CisgKiAtIGl0IG1heSBiZSByZXNlcnZlZCBieSBzb21lIG90aGVyIGRyaXZl
ciwgb3Igbm90CisgKiAtIHdoZW4gbm90IHJlc2VydmVkIGJ5IHNvbWUgb3RoZXIgZHJpdmVyLCBp
dCBtYXkgYmUgdXNlZCBmb3IKKyAqICAgdGhlIE5NSSB3YXRjaGRvZywgb3Igbm90CisgKgorICog
VGhpcyBpcyBtYWludGFpbmVkIHNlcGFyYXRlbHkgZnJvbSBubWlfYWN0aXZlIGJlY2F1c2UgdGhl
IE5NSQorICogd2F0Y2hkb2cgbWF5IGFsc28gYmUgZHJpdmVuIGZyb20gdGhlIEkvTyBBUElDIHRp
bWVyLgorICovCitzdGF0aWMgc3BpbmxvY2tfdCBsYXBpY19ubWlfb3duZXJfbG9jayA9IFNQSU5f
TE9DS19VTkxPQ0tFRDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbGFwaWNfbm1pX293bmVyOworI2Rl
ZmluZSBMQVBJQ19OTUlfV0FUQ0hET0cgICAgICAoMTw8MCkKKyNkZWZpbmUgTEFQSUNfTk1JX1JF
U0VSVkVEICAgICAgKDE8PDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgCisvKiBubWlfYWN0aXZlOgorICogKzE6IHRoZSBsYXBpYyBOTUkgd2F0
Y2hkb2cgaXMgYWN0aXZlLCBidXQgY2FuIGJlIGRpc2FibGVkCisgKiAgMDogdGhlIGxhcGljIE5N
SSB3YXRjaGRvZyBoYXMgbm90IGJlZW4gc2V0IHVwLCBhbmQgY2Fubm90CisgKiAgICAgYmUgZW5h
YmxlZAorICogLTE6IHRoZSBsYXBpYyBOTUkgd2F0Y2hkb2cgaXMgZGlzYWJsZWQsIGJ1dCBjYW4g
YmUgZW5hYmxlZAorICovCitpbnQgbm1pX2FjdGl2ZTsKKwogI2RlZmluZSBLN19FVk5UU0VMX0VO
QUJMRQkoMSA8PCAyMikKICNkZWZpbmUgSzdfRVZOVFNFTF9JTlQJCSgxIDw8IDIwKQogI2RlZmlu
ZSBLN19FVk5UU0VMX09TCQkoMSA8PCAxNykKQEAgLTczLDkgKzk5LDkgQEAKICAqLwogI2RlZmlu
ZSBNU1JfUDRfSVFfQ09VTlRFUjAJMHgzMEMKICNkZWZpbmUgTVNSX1A0X0lRX0NPVU5URVIxCTB4
MzBECi0jZGVmaW5lIE1TUl9QNF9JUV9DQ0NSMAkJMHgzNkMKLSNkZWZpbmUgTVNSX1A0X0lRX0ND
Q1IxCQkweDM2RAotI2RlZmluZSBNU1JfUDRfQ1JVX0VTQ1IwCTB4M0I4IC8qIEVTQ1Igbm8uIDQg
Ki8KKy8vI2RlZmluZSBNU1JfUDRfSVFfQ0NDUjAJCTB4MzZDCisvLyNkZWZpbmUgTVNSX1A0X0lR
X0NDQ1IxCQkweDM2RAorLy8jZGVmaW5lIE1TUl9QNF9DUlVfRVNDUjAJMHgzQjggLyogRVNDUiBu
by4gNCAqLwogI2RlZmluZSBQNF9OTUlfQ1JVX0VTQ1IwIFwKICAgICAoUDRfRVNDUl9FVkVOVF9T
RUxFQ1QoMHgzRil8UDRfRVNDUl9PUzB8UDRfRVNDUl9VU1IwfCBcCiAgICAgIFA0X0VTQ1JfT1Mx
fFA0X0VTQ1JfVVNSMSkKQEAgLTEzMSw2ICsxNTcsNjkgQEAKICAqIE9yaWdpbmFsIGNvZGUgd3Jp
dHRlbiBieSBLZWl0aCBPd2Vucy4KICAqLwogCitzdGF0aWMgdm9pZCBkaXNhYmxlX2xhcGljX25t
aV93YXRjaGRvZyh2b2lkKQoreworICAgICAgICBpZiAobm1pX2FjdGl2ZSA8PSAwKQorICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgc3dpdGNoIChib290X2NwdV9kYXRhLng4Nl92ZW5k
b3IpIHsKKyAgICAgICAgY2FzZSBYODZfVkVORE9SX0FNRDoKKyAgICAgICAgICAgICAgICB3cm1z
cihNU1JfSzdfRVZOVFNFTDAsIDAsIDApOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIFg4Nl9WRU5ET1JfSU5URUw6CisgICAgICAgICAgICAgICAgc3dpdGNoIChib290X2Nw
dV9kYXRhLng4NikgeworICAgICAgICAgICAgICAgIGNhc2UgNjoKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHdybXNyKE1TUl9QNl9FVk5UU0VMMCwgMCwgMCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDE1OgorCQkJaWYgKGxvZ2ljYWxfcHJv
Y19pZFtzbXBfcHJvY2Vzc29yX2lkKCldID09IDApCisJCQl7CisgICAgICAgICAgICAgICAgICAg
ICAgICAJd3Jtc3IoTVNSX1A0X0lRX0NDQ1IwLCAwLCAwKTsKKwkgICAgICAgICAgICAgICAgICAg
ICAgICB3cm1zcihNU1JfUDRfQ1JVX0VTQ1IwLCAwLCAwKTsKKwkJCX0gZWxzZSB7CisJCQkJd3Jt
c3IoTVNSX1A0X0lRX0NDQ1IxLCAwLCAwKTsJCisJCQl9CisgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgbm1pX2FjdGl2ZSA9IC0xOworICAgICAgICAvKiB0ZWxsIGRvX25taSgp
IGFuZCBvdGhlcnMgdGhhdCB3ZSdyZSBub3QgYWN0aXZlIGFueSBtb3JlICovCisgICAgICAgIG5t
aV93YXRjaGRvZyA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIGVuYWJsZV9sYXBpY19ubWlfd2F0Y2hk
b2codm9pZCkKK3sKKyAgICAgICAgaWYgKG5taV9hY3RpdmUgPCAwKSB7CisgICAgICAgICAgICAg
ICAgbm1pX3dhdGNoZG9nID0gTk1JX0xPQ0FMX0FQSUM7CisgICAgICAgICAgICAgICAgc2V0dXBf
YXBpY19ubWlfd2F0Y2hkb2coKTsKKyAgICAgICAgfQorfQorCitpbnQgcmVzZXJ2ZV9sYXBpY19u
bWkodm9pZCkKK3sKKyAgICAgICAgdW5zaWduZWQgaW50IG9sZF9vd25lcjsKKyAgICAgICAgc3Bp
bl9sb2NrKCZsYXBpY19ubWlfb3duZXJfbG9jayk7CisgICAgICAgIG9sZF9vd25lciA9IGxhcGlj
X25taV9vd25lcjsKKyAgICAgICAgbGFwaWNfbm1pX293bmVyIHw9IExBUElDX05NSV9SRVNFUlZF
RDsKKyAgICAgICAgc3Bpbl91bmxvY2soJmxhcGljX25taV9vd25lcl9sb2NrKTsKKyAgICAgICAg
aWYgKG9sZF9vd25lciAmIExBUElDX05NSV9SRVNFUlZFRCkKKyAgICAgICAgICAgICAgICByZXR1
cm4gLUVCVVNZOworICAgICAgICBpZiAob2xkX293bmVyICYgTEFQSUNfTk1JX1dBVENIRE9HKQor
ICAgICAgICAgICAgICAgIGRpc2FibGVfbGFwaWNfbm1pX3dhdGNoZG9nKCk7CisgICAgICAgIHJl
dHVybiAwOworfQorCit2b2lkIHJlbGVhc2VfbGFwaWNfbm1pKHZvaWQpCit7CisgICAgICAgIHVu
c2lnbmVkIGludCBuZXdfb3duZXI7CisgICAgICAgIHNwaW5fbG9jaygmbGFwaWNfbm1pX293bmVy
X2xvY2spOworICAgICAgICBuZXdfb3duZXIgPSBsYXBpY19ubWlfb3duZXIgJiB+TEFQSUNfTk1J
X1JFU0VSVkVEOworICAgICAgICBsYXBpY19ubWlfb3duZXIgPSBuZXdfb3duZXI7CisgICAgICAg
IHNwaW5fdW5sb2NrKCZsYXBpY19ubWlfb3duZXJfbG9jayk7CisgICAgICAgIGlmIChuZXdfb3du
ZXIgJiBMQVBJQ19OTUlfV0FUQ0hET0cpCisgICAgICAgICAgICAgICAgZW5hYmxlX2xhcGljX25t
aV93YXRjaGRvZygpOworfQorCiBzdGF0aWMgdm9pZCBfX3BtaW5pdCBjbGVhcl9tc3JfcmFuZ2Uo
dW5zaWduZWQgaW50IGJhc2UsIHVuc2lnbmVkIGludCBuKQogewogICAgIHVuc2lnbmVkIGludCBp
OwpAQCAtMjU1LDYgKzM0NCw4IEBACiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuOwogICAg
IH0KKyAgICBsYXBpY19ubWlfb3duZXIgPSBMQVBJQ19OTUlfV0FUQ0hET0c7CisgICAgbm1pX2Fj
dGl2ZSA9IDE7CiAgICAgbm1pX3BtX2luaXQoKTsKIH0KIApAQCAtMzE5LDMgKzQxMCw3IEBACiAg
ICAgICAgIH0KICAgICB9CiB9CisKK0VYUE9SVF9TWU1CT0wocmVzZXJ2ZV9sYXBpY19ubWkpOwor
RVhQT1JUX1NZTUJPTChyZWxlYXNlX2xhcGljX25taSk7CisKZGlmZiAtUE5hdXIgeGVuLTIuMC41
L3hlbi9hcmNoL3g4Ni9vcHJvZmlsZS9NYWtlZmlsZSB4ZW4tMi4wLjUtcHJvZi94ZW4vYXJjaC94
ODYvb3Byb2ZpbGUvTWFrZWZpbGUKLS0tIHhlbi0yLjAuNS94ZW4vYXJjaC94ODYvb3Byb2ZpbGUv
TWFrZWZpbGUJMTk2OS0xMi0zMSAxNjowMDowMC4wMDAwMDAwMDAgLTA4MDAKKysrIHhlbi0yLjAu
NS1wcm9mL3hlbi9hcmNoL3g4Ni9vcHJvZmlsZS9NYWtlZmlsZQkyMDA1LTA0LTA2IDA5OjI3OjEz
LjAwMDAwMDAwMCAtMDcwMApAQCAtMCwwICsxLDM0IEBACisKK2luY2x1ZGUgJChCQVNFRElSKS9S
dWxlcy5taworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCisjIEZMQUdT
IGlzIGlkZW50aWNhbCB0byBDRkxBR1MgZXhjZXB0IGZvciAtV2Vycm9yICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIAorRkxBR1MgIDo9IC1ub3N0ZGluYyAtZm5vLWJ1aWx0aW4gLWZuby1jb21t
b24gLWZuby1zdHJpY3QtYWxpYXNpbmcKK0ZMQUdTICArPSAtaXdpdGhwcmVmaXggaW5jbHVkZSAt
V2FsbCAtcGlwZQorRkxBR1MgICs9IC1JJChCQVNFRElSKS9pbmNsdWRlIC1Xbm8tcG9pbnRlci1h
cml0aCAtV3JlZHVuZGFudC1kZWNscworCitpZmVxICgkKG9wdGltaXplKSx5KQorRkxBR1MgICs9
IC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlcgorZWxzZQoreDg2XzMyL3VzZXJjb3B5Lm86IENGTEFH
UyArPSAtTzEKK2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIyBQcmV2
ZW50IGZsb2F0aW5nLXBvaW50IHZhcmlhYmxlcyBmcm9tIGNyZWVwaW5nIGludG8gWGVuLgorRkxB
R1MgICs9IC1tc29mdC1mbG9hdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK2lm
ZXEgKCQoVEFSR0VUX1NVQkFSQ0gpLHg4Nl8zMikKK0ZMQUdTICArPSAtbTMyIC1tYXJjaD1pNjg2
CitMREZMQUdTIDo9IC0tb2Zvcm1hdCBlbGYzMi1pMzg2CitlbmRpZgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAKK2lmZXEgKCQoVEFSR0VUX1NVQkFSQ0gpLHg4Nl82NCkKK0ZMQUdT
ICArPSAtbTY0IC1tbm8tcmVkLXpvbmUgLWZwaWMgLWZuby1yZW9yZGVyLWJsb2NrcworRkxBR1Mg
ICs9IC1mbm8tYXN5bmNocm9ub3VzLXVud2luZC10YWJsZXMKK2VuZGlmCisKK2RlZmF1bHQ6ICQo
T0JKUykgCisJJChMRCkgJChMREZMQUdTKSAtciAtbyBvcHJvZmlsZS5vICQoT0JKUykKKwkKKyUu
bzogJS5jICQoSERSUykgTWFrZWZpbGUKKwkkKENDKSAkKEZMQUdTKSAtYyAkPCAtbyAkQAorCmRp
ZmYgLVBOYXVyIHhlbi0yLjAuNS94ZW4vYXJjaC94ODYvb3Byb2ZpbGUvI01ha2VmaWxlIyB4ZW4t
Mi4wLjUtcHJvZi94ZW4vYXJjaC94ODYvb3Byb2ZpbGUvI01ha2VmaWxlIwotLS0geGVuLTIuMC41
L3hlbi9hcmNoL3g4Ni9vcHJvZmlsZS8jTWFrZWZpbGUjCTE5NjktMTItMzEgMTY6MDA6MDAuMDAw
MDAwMDAwIC0wODAwCisrKyB4ZW4tMi4wLjUtcHJvZi94ZW4vYXJjaC94ODYvb3Byb2ZpbGUvI01h
a2VmaWxlIwkyMDA1LTA0LTA2IDA5OjUzOjUzLjAwMDAwMDAwMCAtMDcwMApAQCAtMCwwICsxLDM0
IEBACisKK2luY2x1ZGUgJChCQVNFRElSKS9SdWxlcy5taworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIAorCisjIEZMQUdTIGlzIGlkZW50aWNhbCB0byBDRkxBR1MgZXhjZXB0
IGZvciAtV2Vycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorRkxBR1MgIDo9IC1ub3N0
ZGluYyAtZm5vLWJ1aWx0aW4gLWZuby1jb21tb24gLWZuby1zdHJpY3QtYWxpYXNpbmcKK0ZMQUdT
ICArPSAtaXdpdGhwcmVmaXggaW5jbHVkZSAtV2FsbCAtcGlwZQorRkxBR1MgICs9IC1JJChCQVNF
RElSKS9pbmNsdWRlIC1Xbm8tcG9pbnRlci1hcml0aCAtV3JlZHVuZGFudC1kZWNscworCitpZmVx
ICgkKG9wdGltaXplKSx5KQorRkxBR1MgICs9IC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlcgorZWxz
ZQoreDg2XzMyL3VzZXJjb3B5Lm86IENGTEFHUyArPSAtTzEKK2VuZGlmCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIAorIyBQcmV2ZW50IGZsb2F0aW5nLXBvaW50IHZhcmlhYmxlcyBm
cm9tIGNyZWVwaW5nIGludG8gWGVuLgorRkxBR1MgICs9IC1tc29mdC1mbG9hdAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAKK2lmZXEgKCQoVEFSR0VUX1NVQkFSQ0gpLHg4Nl8zMikK
K0ZMQUdTICArPSAtbTMyIC1tYXJjaD1pNjg2CitMREZMQUdTIDo9IC0tb2Zvcm1hdCBlbGYzMi1p
Mzg2CitlbmRpZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK2lmZXEgKCQoVEFS
R0VUX1NVQkFSQ0gpLHg4Nl82NCkKK0ZMQUdTICArPSAtbTY0IC1tbm8tcmVkLXpvbmUgLWZwaWMg
LWZuby1yZW9yZGVyLWJsb2NrcworRkxBR1MgICs9IC1mbm8tYXN5bmNocm9ub3VzLXVud2luZC10
YWJsZXMKK2VuZGlmCisKK2RlZmF1bHQ6ICQoT0JKUykgCisJJChMRCkgJChMREZMQUdTKSAtciAt
byBvcHJvZmlsZS5vICQoT0JKUykKKwkKKyUubzogJS5jICQoSERSUykgTWFrZWZpbGUKKwkkKEND
KSAkKEZMQUdTKSAtYyAkPCAtbyAkQAorCmRpZmYgLVBOYXVyIHhlbi0yLjAuNS94ZW4vYXJjaC94
ODYvb3Byb2ZpbGUvbm1pX2ludC5jIHhlbi0yLjAuNS1wcm9mL3hlbi9hcmNoL3g4Ni9vcHJvZmls
ZS9ubWlfaW50LmMKLS0tIHhlbi0yLjAuNS94ZW4vYXJjaC94ODYvb3Byb2ZpbGUvbm1pX2ludC5j
CTE5NjktMTItMzEgMTY6MDA6MDAuMDAwMDAwMDAwIC0wODAwCisrKyB4ZW4tMi4wLjUtcHJvZi94
ZW4vYXJjaC94ODYvb3Byb2ZpbGUvbm1pX2ludC5jCTIwMDUtMDQtMDcgMTY6NDA6MjAuMDAwMDAw
MDAwIC0wNzAwCkBAIC0wLDAgKzEsNDMxIEBACisvKioKKyAqIEBmaWxlIG5taV9pbnQuYworICoK
KyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBS
ZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIEpvaG4gTGV2b24gPGxldm9uQG1v
dmVtZW50YXJpYW4ub3JnPgorICoKKyAqIE1vZGlmaWVkIGJ5IEFyYXZpbmQgTWVub24gZm9yIFhl
bgorICogVGhlc2UgbW9kaWZpY2F0aW9ucyBhcmU6CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgSGV3
bGV0dC1QYWNrYXJkIENvLgorICovCisKKyNpbmNsdWRlIDx4ZW4vZXZlbnQuaD4KKyNpbmNsdWRl
IDx4ZW4vdHlwZXMuaD4KKyNpbmNsdWRlIDx4ZW4vZXJybm8uaD4KKyNpbmNsdWRlIDx4ZW4vaW5p
dC5oPgorI2luY2x1ZGUgPHB1YmxpYy94ZW4uaD4KKyNpbmNsdWRlIDxhc20vbm1pLmg+CisjaW5j
bHVkZSA8YXNtL21zci5oPgorI2luY2x1ZGUgPGFzbS9hcGljLmg+CisgCisjaW5jbHVkZSAib3Bf
Y291bnRlci5oIgorI2luY2x1ZGUgIm9wX3g4Nl9tb2RlbC5oIgorIAorc3RhdGljIHN0cnVjdCBv
cF94ODZfbW9kZWxfc3BlYyBjb25zdCAqIG1vZGVsOworc3RhdGljIHN0cnVjdCBvcF9tc3JzIGNw
dV9tc3JzW05SX0NQVVNdOworc3RhdGljIHVuc2lnbmVkIGxvbmcgc2F2ZWRfbHZ0cGNbTlJfQ1BV
U107CisKKyNkZWZpbmUgVklSUV9CSVRNQVNLX1NJWkUJKE1BWF9PUFJPRl9ET01BSU5TLzMyICsg
MSkKKworZXh0ZXJuIGludCBhY3RpdmVfZG9tYWluc1tNQVhfT1BST0ZfRE9NQUlOU107CitleHRl
cm4gdW5zaWduZWQgaW50IGFkb21haW5zOworCitleHRlcm4gc3RydWN0IGRvbWFpbiAqIHByaW1h
cnlfcHJvZmlsZXI7CitleHRlcm4gc3RydWN0IGRvbWFpbiAqIGFkb21haW5fcHRyc1tNQVhfT1BS
T0ZfRE9NQUlOU107CitleHRlcm4gdW5zaWduZWQgbG9uZyB2aXJxX292Zl9wZW5kaW5nW1ZJUlFf
QklUTUFTS19TSVpFXTsKKworZXh0ZXJuIGludCBpc19hY3RpdmUoc3RydWN0IGRvbWFpbiAqZCk7
CitleHRlcm4gaW50IGFjdGl2ZV9pZChzdHJ1Y3QgZG9tYWluICpkKTsKK2V4dGVybiBpbnQgaXNf
cGFzc2l2ZShzdHJ1Y3QgZG9tYWluICpkKTsKK2V4dGVybiBpbnQgaXNfcHJvZmlsZWQoc3RydWN0
IGRvbWFpbiAqZCk7CisKKworaW50IG5taV9wcm9maWxpbmdfc3RhcnRlZCA9IDA7CisKK2ludCBh
Y3RpdmVfdmlycV9jb3VudCA9IDA7CitpbnQgcGFzc2l2ZV92aXJxX2NvdW50ID0gMDsKK2ludCBv
dGhlcl92aXJxX2NvdW50ID0gMDsKK2ludCBvdGhlcl9pZCA9IC0xOworaW50IHhlbl9jb3VudCA9
IDA7CitpbnQgZG9tX2NvdW50ID0gMDsgCitpbnQgb3ZmID0gMDsKKworaW50IG5taV9jYWxsYmFj
ayhzdHJ1Y3QgeGVuX3JlZ3MgKiByZWdzLCBpbnQgY3B1KQoreworCWludCB4ZW5fbW9kZSA9IDA7
CisKKwlvdmYgPSBtb2RlbC0+Y2hlY2tfY3RycyhjcHUsICZjcHVfbXNyc1tjcHVdLCByZWdzKTsK
Kwl4ZW5fbW9kZSA9IFJJTkdfMChyZWdzKTsKKwlpZiAob3ZmKSB7CisJCWlmICh4ZW5fbW9kZSkK
KwkJCXhlbl9jb3VudCsrOworCQllbHNlCisJCQlkb21fY291bnQrKzsKKworCQlpZiAoaXNfYWN0
aXZlKGN1cnJlbnQpKSB7CisJCS8qIFRoaXMgaXMgbGlnaHRseSBpbmNvcnJlY3QuIElmIHdlIGRv
IG5vdCBkZWxpdmVyIAorCQkJT1ZGIHZpcnR1YWwgaW50ZXJydXB0cyBpbiBhIHN5bmNocm9ub3Vz
IAorCQkJbWFubmVyLCBhIHByb2Nlc3Mgc3dpdGNoIG1heSBoYXBwZW4gaW4gdGhlIGRvbWFpbiAK
KwkJCWJldHdlZW4gdGhlIHBvaW50IHRoZSBzYW1wbGUgd2FzIGNvbGxlY3RlZCBhbmQgCisJCQl0
aGUgcG9pbnQgYXQgd2hpY2ggYSBWSVJRIHdhcyBkZWxpdmVyZWQuIEhvd2V2ZXIsIAorCQkJaXQg
aXMgbm90IHNhZmUgdG8gY2FsbCBzZW5kX2d1ZXN0X3ZpcnEgZnJvbSB0aGlzIAorCQkJTk1JIGNv
bnRleHQsIGl0IG1heSBsZWFkIHRvIGEgZGVhZGxvY2sgc2luY2UgTk1JcyBhcmUgCisJCQl1bm1h
c2thYmxlLiBPbmUgb3B0aW1pemF0aW9uIHRoYXQgd2UgY2FuIGRvIGlzIAorCQkJdGhhdCBpZiB0
aGUgc2FtcGxlIG9jY3VycyB3aGlsZSBkb21haW4gY29kZSBpcyAKKwkJCXJ1bm5uZywgd2Uga25v
dyB0aGF0IGl0IGlzIHNhZmUgdG8gY2FsbCAKKwkJCXNlbmRfZ3Vlc3RfdmlycSwgc2luY2Ugd2Ug
a25vdyBubyBYZW4gY29kZSAKKwkJCWlzIHJ1bm5pbmcgYXQgdGhhdCB0aW1lLgorCQkJSG93ZXZl
ciwgdGhpcyBtYXkgZGlzdG9ydCB0aGUgc2FtcGxlIGRpc3RyaWJ1dGlvbiwKKwkJCWJlY2F1c2Ug
d2UgbWF5IGxvc2UgbW9yZSBYZW4gbW9kZSBzYW1wbGVzLiovCisJCQlhY3RpdmVfdmlycV9jb3Vu
dCsrOworCQkJaWYgKCF4ZW5fbW9kZSkgeworCQkJCXNlbmRfZ3Vlc3RfdmlycShjdXJyZW50LCBW
SVJRX1BNQ19PVkYpOworCQkJCWNsZWFyX2JpdChhY3RpdmVfaWQoY3VycmVudCksICZ2aXJxX292
Zl9wZW5kaW5nWzBdKTsKKwkJCX0gZWxzZSAKKwkJCQlzZXRfYml0KGFjdGl2ZV9pZChjdXJyZW50
KSwgJnZpcnFfb3ZmX3BlbmRpbmdbMF0pOworCQkJcHJpbWFyeV9wcm9maWxlci0+c2hhcmVkX2lu
Zm8tPmFjdGl2ZV9zYW1wbGVzKys7CisJCX0KKwkJZWxzZSBpZiAoaXNfcGFzc2l2ZShjdXJyZW50
KSkgeworCQkJc2V0X2JpdChhY3RpdmVfaWQocHJpbWFyeV9wcm9maWxlciksICZ2aXJxX292Zl9w
ZW5kaW5nWzBdKTsKKwkJCXBhc3NpdmVfdmlycV9jb3VudCsrOworCQkJcHJpbWFyeV9wcm9maWxl
ci0+c2hhcmVkX2luZm8tPnBhc3NpdmVfc2FtcGxlcysrOworCQl9CisJCWVsc2UgeworCQkJb3Ro
ZXJfdmlycV9jb3VudCsrOworCQkJb3RoZXJfaWQgPSBjdXJyZW50LT5pZDsKKwkJCXByaW1hcnlf
cHJvZmlsZXItPnNoYXJlZF9pbmZvLT5vdGhlcl9zYW1wbGVzKys7CisJCX0KKwl9CisJcmV0dXJu
IDE7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfbXNycyh2b2lkKQoreworCWludCBpOworCWZvciAo
aSA9IDA7IGkgPCBOUl9DUFVTOyArK2kpIHsKKwkJeGZyZWUoY3B1X21zcnNbaV0uY291bnRlcnMp
OworCQljcHVfbXNyc1tpXS5jb3VudGVycyA9IE5VTEw7CisJCXhmcmVlKGNwdV9tc3JzW2ldLmNv
bnRyb2xzKTsKKwkJY3B1X21zcnNbaV0uY29udHJvbHMgPSBOVUxMOworCX0KK30KKyAKK3N0YXRp
YyBpbnQgYWxsb2NhdGVfbXNycyh2b2lkKQoreworCWludCBzdWNjZXNzID0gMTsKKwlzaXplX3Qg
Y29udHJvbHNfc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgb3BfbXNyKSAqIG1vZGVsLT5udW1fY29udHJv
bHM7CisJc2l6ZV90IGNvdW50ZXJzX3NpemUgPSBzaXplb2Yoc3RydWN0IG9wX21zcikgKiBtb2Rl
bC0+bnVtX2NvdW50ZXJzOworCisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IE5SX0NQVVM7ICsr
aSkgeworCQkvL2lmICghY3B1X29ubGluZShpKSkKKwkJaWYgKCF0ZXN0X2JpdChpLCAmY3B1X29u
bGluZV9tYXApKQorCQkJY29udGludWU7CisKKwkJY3B1X21zcnNbaV0uY291bnRlcnMgPSB4bWFs
bG9jKGNvdW50ZXJzX3NpemUpOworCQlpZiAoIWNwdV9tc3JzW2ldLmNvdW50ZXJzKSB7CisJCQlz
dWNjZXNzID0gMDsKKwkJCWJyZWFrOworCQl9CisJCWNwdV9tc3JzW2ldLmNvbnRyb2xzID0geG1h
bGxvYyhjb250cm9sc19zaXplKTsKKwkJaWYgKCFjcHVfbXNyc1tpXS5jb250cm9scykgeworCQkJ
c3VjY2VzcyA9IDA7CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAoIXN1Y2Nlc3MpCisJCWZyZWVf
bXNycygpOworCisJcmV0dXJuIHN1Y2Nlc3M7Cit9CisKK3N0YXRpYyB2b2lkIG5taV9jcHVfc2F2
ZV9yZWdpc3RlcnMoc3RydWN0IG9wX21zcnMgKiBtc3JzKQoreworCXVuc2lnbmVkIGludCBjb25z
dCBucl9jdHJzID0gbW9kZWwtPm51bV9jb3VudGVyczsKKwl1bnNpZ25lZCBpbnQgY29uc3QgbnJf
Y3RybHMgPSBtb2RlbC0+bnVtX2NvbnRyb2xzOyAKKwlzdHJ1Y3Qgb3BfbXNyICogY291bnRlcnMg
PSBtc3JzLT5jb3VudGVyczsKKwlzdHJ1Y3Qgb3BfbXNyICogY29udHJvbHMgPSBtc3JzLT5jb250
cm9sczsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBucl9jdHJzOyArK2kp
IHsKKwkJcmRtc3IoY291bnRlcnNbaV0uYWRkciwKKwkJCWNvdW50ZXJzW2ldLnNhdmVkLmxvdywK
KwkJCWNvdW50ZXJzW2ldLnNhdmVkLmhpZ2gpOworCX0KKyAKKwlmb3IgKGkgPSAwOyBpIDwgbnJf
Y3RybHM7ICsraSkgeworCQlyZG1zcihjb250cm9sc1tpXS5hZGRyLAorCQkJY29udHJvbHNbaV0u
c2F2ZWQubG93LAorCQkJY29udHJvbHNbaV0uc2F2ZWQuaGlnaCk7CisJfQorfQorCitzdGF0aWMg
dm9pZCBubWlfc2F2ZV9yZWdpc3RlcnModm9pZCAqIGR1bW15KQoreworCWludCBjcHUgPSBzbXBf
cHJvY2Vzc29yX2lkKCk7CisJc3RydWN0IG9wX21zcnMgKiBtc3JzID0gJmNwdV9tc3JzW2NwdV07
CisJbW9kZWwtPmZpbGxfaW5fYWRkcmVzc2VzKG1zcnMpOworCW5taV9jcHVfc2F2ZV9yZWdpc3Rl
cnMobXNycyk7Cit9CisKK2ludCBubWlfcmVzZXJ2ZV9jb3VudGVycyh2b2lkKQoreworCWlmICgh
YWxsb2NhdGVfbXNycygpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qIFdlIHdhbGsgYSB0aGlu
IGxpbmUgYmV0d2VlbiBsYXcgYW5kIHJhcGUgaGVyZS4KKwkgKiBXZSBuZWVkIHRvIGJlIGNhcmVm
dWwgdG8gaW5zdGFsbCBvdXIgTk1JIGhhbmRsZXIKKwkgKiB3aXRob3V0IGFjdHVhbGx5IHRyaWdn
ZXJpbmcgYW55IE5NSXMgYXMgdGhpcyB3aWxsCisJICogYnJlYWsgdGhlIGNvcmUgY29kZSBob3Jy
aWZpY2FsbHkuCisJICovCisJLyogRG9uJ3Qgd2UgbmVlZCB0byBkbyB0aGlzIG9uIGFsbCBDUFVz
PyovCisJaWYgKHJlc2VydmVfbGFwaWNfbm1pKCkgPCAwKSB7CisJCWZyZWVfbXNycygpOworCQly
ZXR1cm4gLUVCVVNZOworCX0KKwkvKiBXZSBuZWVkIHRvIHNlcmlhbGl6ZSBzYXZlIGFuZCBzZXR1
cCBmb3IgSFQgYmVjYXVzZSB0aGUgc3Vic2V0CisJICogb2YgbXNycyBhcmUgZGlzdGluY3QgZm9y
IHNhdmUgYW5kIHNldHVwIG9wZXJhdGlvbnMKKwkgKi8KKwlvbl9lYWNoX2NwdShubWlfc2F2ZV9y
ZWdpc3RlcnMsIE5VTEwsIDAsIDEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBubWlf
Y3B1X3NldHVwKHZvaWQgKiBkdW1teSkKK3sKKwlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgp
OworCXN0cnVjdCBvcF9tc3JzICogbXNycyA9ICZjcHVfbXNyc1tjcHVdOworCW1vZGVsLT5zZXR1
cF9jdHJzKG1zcnMpOworfQorCitpbnQgbm1pX3NldHVwX2V2ZW50cyh2b2lkKQoreworCW9uX2Vh
Y2hfY3B1KG5taV9jcHVfc2V0dXAsIE5VTEwsIDAsIDEpOworCXJldHVybiAwOworfQorCitpbnQg
bm1pX2VuYWJsZV92aXJxKCkKK3sKKwlzZXRfbm1pX2NhbGxiYWNrKG5taV9jYWxsYmFjayk7CisJ
cmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG5taV9jcHVfc3RhcnQodm9pZCAqIGR1bW15KQor
eworCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJc3RydWN0IG9wX21zcnMgY29uc3Qg
KiBtc3JzID0gJmNwdV9tc3JzW2NwdV07CisJc2F2ZWRfbHZ0cGNbY3B1XSA9IGFwaWNfcmVhZChB
UElDX0xWVFBDKTsKKwlhcGljX3dyaXRlKEFQSUNfTFZUUEMsIEFQSUNfRE1fTk1JKTsKKwltb2Rl
bC0+c3RhcnQobXNycyk7Cit9CisKK2ludCBubWlfc3RhcnQodm9pZCkKK3sKKwlvbl9lYWNoX2Nw
dShubWlfY3B1X3N0YXJ0LCBOVUxMLCAwLCAxKTsKKwlubWlfcHJvZmlsaW5nX3N0YXJ0ZWQgPSAx
OworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBubWlfY3B1X3N0b3Aodm9pZCAqIGR1bW15
KQoreworCXVuc2lnbmVkIGludCB2OworCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJ
c3RydWN0IG9wX21zcnMgY29uc3QgKiBtc3JzID0gJmNwdV9tc3JzW2NwdV07CisJbW9kZWwtPnN0
b3AobXNycyk7CisKKwkvKiByZXN0b3JpbmcgQVBJQ19MVlRQQyBjYW4gdHJpZ2dlciBhbiBhcGlj
IGVycm9yIGJlY2F1c2UgdGhlIGRlbGl2ZXJ5CisJICogbW9kZSBhbmQgdmVjdG9yIG5yIGNvbWJp
bmF0aW9uIGNhbiBiZSBpbGxlZ2FsLiBUaGF0J3MgYnkgZGVzaWduOiBvbgorCSAqIHBvd2VyIG9u
IGFwaWMgbHZ0IGNvbnRhaW4gYSB6ZXJvIHZlY3RvciBuciB3aGljaCBhcmUgbGVnYWwgb25seSBm
b3IKKwkgKiBOTUkgZGVsaXZlcnkgbW9kZS4gU28gaW5oaWJpdCBhcGljIGVyciBiZWZvcmUgcmVz
dG9yaW5nIGx2dHBjCisJICovCisJaWYgKCEoYXBpY19yZWFkKEFQSUNfTFZUUEMpICYgQVBJQ19E
TV9OTUkpCisJCXx8IChhcGljX3JlYWQoQVBJQ19MVlRQQykgJiBBUElDX0xWVF9NQVNLRUQpKSB7
CisJCXByaW50aygibm1pX3N0b3A6IEFQSUMgbm90IGdvb2QgJXBcbiIsIGFwaWNfcmVhZChBUElD
X0xWVFBDKSk7CisJCW1kZWxheSg1MDAwKTsKKwl9CisJdiA9IGFwaWNfcmVhZChBUElDX0xWVEVS
Uik7CisJYXBpY193cml0ZShBUElDX0xWVEVSUiwgdiB8IEFQSUNfTFZUX01BU0tFRCk7CisJYXBp
Y193cml0ZShBUElDX0xWVFBDLCBzYXZlZF9sdnRwY1tjcHVdKTsKKwlhcGljX3dyaXRlKEFQSUNf
TFZURVJSLCB2KTsKK30KKyAKK3ZvaWQgbm1pX3N0b3Aodm9pZCkKK3sKKwlubWlfcHJvZmlsaW5n
X3N0YXJ0ZWQgPSAwOworCW9uX2VhY2hfY3B1KG5taV9jcHVfc3RvcCwgTlVMTCwgMCwgMSk7CisJ
YWN0aXZlX3ZpcnFfY291bnQgPSAwOworCXBhc3NpdmVfdmlycV9jb3VudCA9IDA7CisJb3RoZXJf
dmlycV9jb3VudCA9IDA7CisJeGVuX2NvdW50ID0gMDsKKwlkb21fY291bnQgPSAwOworfQorCitl
eHRlcm4gdW5zaWduZWQgaW50IHJlYWRfY3RyKHN0cnVjdCBvcF9tc3JzIGNvbnN0ICogY29uc3Qg
bXNycywgaW50IGN0cik7CisKK3ZvaWQgbm1pX3Nhbml0eV9jaGVjayhzdHJ1Y3QgeGVuX3JlZ3Mg
KnJlZ3MsIGludCBjcHUpCit7CisJaW50IGk7CisJaW50IG1hc2tlZCA9IDA7CisKKwkvKiBXZSBt
YXkgaGF2ZSBtaXNzZWQgc29tZSBOTUkgaW50ZXJydXB0cyBpZiB3ZSB3ZXJlIGFscmVhZHkgCisJ
CWluIGFuIE5NSSBjb250ZXh0IGF0IHRoYXQgdGltZS4gSWYgdGhpcyBoYXBwZW5zLCB0aGVuIAor
CQl0aGUgY291bnRlcnMgYXJlIG5vdCByZXNldCBhbmQgaW4gdGhlIGNhc2Ugb2YgUDQsIHRoZSAK
KwkJQVBJQyBMVlQgZGlzYWJsZSBtYXNrIGlzIHNldC4gSW4gYm90aCBjYXNlcyB3ZSBlbmQgdXAg
CisJCWxvc2luZyBzYW1wbGVzLiBPbiBQNCwgdGhpcyBjb25kaXRpb24gY2FuIGJlIGRldGVjdGVk
IAorCQlieSBjaGVja2luZyB0aGUgQVBJQyBMVlQgbWFzay4gQnV0IGluIFA2LCB3ZSBuZWVkIHRv
IAorCQlleGFtaW5lIHRoZSBjb3VudGVycyBmb3Igb3ZlcmZsb3cuIFNvLCBldmVyeSB0aW1lciAK
KwkJaW50ZXJydXB0LCB3ZSBjaGVjayB0aGF0IGV2ZXJ5dGhpbmcgaXMgT0sgKi8KKworCWlmIChh
cGljX3JlYWQoQVBJQ19MVlRQQykgJiBBUElDX0xWVF9NQVNLRUQpCisJCW1hc2tlZCA9IDE7CisK
KwlubWlfY2FsbGJhY2socmVncywgY3B1KTsKKworCWlmIChvdmYgJiYgbWFza2VkKSB7CisJCWlm
IChpc19hY3RpdmUoY3VycmVudCkpCisJCQljdXJyZW50LT5zaGFyZWRfaW5mby0+bm1pX3Jlc3Rh
cnRzKys7CisJCWVsc2UgaWYgKGlzX3Bhc3NpdmUoY3VycmVudCkpCisJCQlwcmltYXJ5X3Byb2Zp
bGVyLT5zaGFyZWRfaW5mby0+bm1pX3Jlc3RhcnRzKys7CisJfQorCisJLyppZiAoamlmZmllcyAl
MTAwMCA9PSAwKSB7CQorCQlwcmludGsoImNwdSAlZDogc2FtcGxlIGNvdW50ICVkICVkICVkIGF0
ICV1XG4iLCBjcHUsIGFjdGl2ZV92aXJxX2NvdW50LCBwYXNzaXZlX3ZpcnFfY291bnQsIG90aGVy
X3ZpcnFfY291bnQsIGppZmZpZXMpOworCQlwcmludGsoIm90aGVyIHRhc2sgaWQgJWRcbiIsIG90
aGVyX2lkKTsKKwkJcHJpbnRrKCIlZCBpbiB4ZW4sICVkIGluIGRvbWFpblxuIiwgeGVuX2NvdW50
LCBkb21fY291bnQpOworCQlwcmludGsoImNvdW50ZXJzICVwICVwXG4iLCByZWFkX2N0cigmY3B1
X21zcnNbY3B1XSwgMCksIHJlYWRfY3RyKCZjcHVfbXNyc1tjcHVdLCAxKSk7CisJfSovCisJCisK
Kwlmb3IgKGkgPSAwOyBpIDwgYWRvbWFpbnM7IGkrKykKKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2Jp
dChpLCAmdmlycV9vdmZfcGVuZGluZ1swXSkpIHsKKwkJCXNlbmRfZ3Vlc3RfdmlycShhZG9tYWlu
X3B0cnNbaV0sIFZJUlFfUE1DX09WRik7CisJCX0KK30KKwordm9pZCBubWlfZGlzYWJsZV92aXJx
KHZvaWQpCit7CisJdW5zZXRfbm1pX2NhbGxiYWNrKCk7Cit9IAorCitzdGF0aWMgdm9pZCBubWlf
cmVzdG9yZV9yZWdpc3RlcnMoc3RydWN0IG9wX21zcnMgKiBtc3JzKQoreworCXVuc2lnbmVkIGlu
dCBjb25zdCBucl9jdHJzID0gbW9kZWwtPm51bV9jb3VudGVyczsKKwl1bnNpZ25lZCBpbnQgY29u
c3QgbnJfY3RybHMgPSBtb2RlbC0+bnVtX2NvbnRyb2xzOyAKKwlzdHJ1Y3Qgb3BfbXNyICogY291
bnRlcnMgPSBtc3JzLT5jb3VudGVyczsKKwlzdHJ1Y3Qgb3BfbXNyICogY29udHJvbHMgPSBtc3Jz
LT5jb250cm9sczsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBucl9jdHJs
czsgKytpKSB7CisJCXdybXNyKGNvbnRyb2xzW2ldLmFkZHIsCisJCQljb250cm9sc1tpXS5zYXZl
ZC5sb3csCisJCQljb250cm9sc1tpXS5zYXZlZC5oaWdoKTsKKwl9CisgCisJZm9yIChpID0gMDsg
aSA8IG5yX2N0cnM7ICsraSkgeworCQl3cm1zcihjb3VudGVyc1tpXS5hZGRyLAorCQkJY291bnRl
cnNbaV0uc2F2ZWQubG93LAorCQkJY291bnRlcnNbaV0uc2F2ZWQuaGlnaCk7CisJfQorfQorIAor
c3RhdGljIHZvaWQgbm1pX2NwdV9zaHV0ZG93bih2b2lkICogZHVtbXkpCit7CisJaW50IGNwdSA9
IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwlzdHJ1Y3Qgb3BfbXNycyAqIG1zcnMgPSAmY3B1X21zcnNb
Y3B1XTsKKwlubWlfcmVzdG9yZV9yZWdpc3RlcnMobXNycyk7Cit9CisgCit2b2lkIG5taV9yZWxl
YXNlX2NvdW50ZXJzKHZvaWQpCit7CisJb25fZWFjaF9jcHUobm1pX2NwdV9zaHV0ZG93biwgTlVM
TCwgMCwgMSk7CisJcmVsZWFzZV9sYXBpY19ubWkoKTsKKwlmcmVlX21zcnMoKTsKK30KKworc3Ry
dWN0IG9wX2NvdW50ZXJfY29uZmlnIGNvdW50ZXJfY29uZmlnW09QX01BWF9DT1VOVEVSXTsKKwor
c3RhdGljIGludCBfX2luaXQgcDRfaW5pdCh2b2lkKQoreworCV9fdTggY3B1X21vZGVsID0gY3Vy
cmVudF9jcHVfZGF0YS54ODZfbW9kZWw7CisKKwlpZiAoY3B1X21vZGVsID4gMykKKwkJcmV0dXJu
IDA7CisKKyNpZm5kZWYgQ09ORklHX1NNUAorCW1vZGVsID0gJm9wX3A0X3NwZWM7CisJcmV0dXJu
IDE7CisjZWxzZQorCS8vc3dpdGNoIChzbXBfbnVtX3NpYmxpbmdzKSB7CisJaWYgKGNwdV9oYXNf
aHQpIAorCXsKKwkgIG1vZGVsID0gJm9wX3A0X2h0Ml9zcGVjOworCSAgcmV0dXJuIDE7CisJfQor
CWVsc2UKKwl7CisJICBtb2RlbCA9ICZvcF9wNF9zcGVjOworCSAgcmV0dXJuIDE7CisJfQorI2Vu
ZGlmCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCBfX2luaXQgcHByb19pbml0KHZvaWQp
Cit7CisJX191OCBjcHVfbW9kZWwgPSBjdXJyZW50X2NwdV9kYXRhLng4Nl9tb2RlbDsKKworCWlm
IChjcHVfbW9kZWwgPiAweGQpCisJCXJldHVybiAwOworCisJbW9kZWwgPSAmb3BfcHByb19zcGVj
OworCXJldHVybiAxOworfQorCitpbnQgbm1pX2luaXQoaW50ICpudW1fZXZlbnRzLCBpbnQgKmlz
X3ByaW1hcnkpCit7CisJX191OCB2ZW5kb3IgPSBjdXJyZW50X2NwdV9kYXRhLng4Nl92ZW5kb3I7
CisJX191OCBmYW1pbHkgPSBjdXJyZW50X2NwdV9kYXRhLng4NjsKKwlpbnQgcHJpbSA9IDA7Cisg
CisJaWYgKCFjcHVfaGFzX2FwaWMpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKHByaW1hcnlf
cHJvZmlsZXIgPT0gTlVMTCkgeworCQlwcmltYXJ5X3Byb2ZpbGVyID0gY3VycmVudDsKKwkJcHJp
bSA9IDE7CisJfQorCisJaWYgKHByaW1hcnlfcHJvZmlsZXIgIT0gY3VycmVudCkKKwkJZ290byBv
dXQ7CisKKwlzd2l0Y2ggKHZlbmRvcikgeworCQljYXNlIFg4Nl9WRU5ET1JfSU5URUw6CisJCQlz
d2l0Y2ggKGZhbWlseSkgeworCQkJCS8qIFBlbnRpdW0gSVYgKi8KKwkJCQljYXNlIDB4ZjoKKwkJ
CQkJaWYgKCFwNF9pbml0KCkpCisJCQkJCQlyZXR1cm4gLUVOT0RFVjsKKwkJCQkJYnJlYWs7CisJ
CQkJLyogQSBQNi1jbGFzcyBwcm9jZXNzb3IgKi8KKwkJCQljYXNlIDY6CisJCQkJCWlmICghcHBy
b19pbml0KCkpCisJCQkJCQlyZXR1cm4gLUVOT0RFVjsKKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVs
dDoKKwkJCQkJcmV0dXJuIC1FTk9ERVY7CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJ
CXJldHVybiAtRU5PREVWOworCX0KK291dDoKKwlpZiAoY29weV90b191c2VyKCh2b2lkICopbnVt
X2V2ZW50cywgKHZvaWQgKikmbW9kZWwtPm51bV9jb3VudGVycywgc2l6ZW9mKGludCkpKQorCQly
ZXR1cm4gLUVGQVVMVDsKKwlpZiAoY29weV90b191c2VyKCh2b2lkICopaXNfcHJpbWFyeSwgKHZv
aWQgKikmcHJpbSwgc2l6ZW9mKGludCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldHVybiAw
OworfQorCmRpZmYgLVBOYXVyIHhlbi0yLjAuNS94ZW4vYXJjaC94ODYvb3Byb2ZpbGUvb3BfY291
bnRlci5oIHhlbi0yLjAuNS1wcm9mL3hlbi9hcmNoL3g4Ni9vcHJvZmlsZS9vcF9jb3VudGVyLmgK
LS0tIHhlbi0yLjAuNS94ZW4vYXJjaC94ODYvb3Byb2ZpbGUvb3BfY291bnRlci5oCTE5NjktMTIt
MzEgMTY6MDA6MDAuMDAwMDAwMDAwIC0wODAwCisrKyB4ZW4tMi4wLjUtcHJvZi94ZW4vYXJjaC94
ODYvb3Byb2ZpbGUvb3BfY291bnRlci5oCTIwMDUtMDQtMDYgMDk6Mjc6MTMuMDAwMDAwMDAwIC0w
NzAwCkBAIC0wLDAgKzEsMzMgQEAKKy8qKgorICogQGZpbGUgb3BfY291bnRlci5oCisgKgorICog
QHJlbWFyayBDb3B5cmlnaHQgMjAwMiBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQg
dGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgSm9obiBMZXZvbgorICoKKyAqIE1vZGlm
aWVkIGJ5IEFyYXZpbmQgTWVub24gZm9yIFhlbgorICogVGhlc2UgbW9kaWZpY2F0aW9ucyBhcmU6
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgSGV3bGV0dC1QYWNrYXJkIENvLgorICovCisgCisjaWZu
ZGVmIE9QX0NPVU5URVJfSAorI2RlZmluZSBPUF9DT1VOVEVSX0gKKyAKKyNkZWZpbmUgT1BfTUFY
X0NPVU5URVIgOAorIAorLyogUGVyLXBlcmZjdHIgY29uZmlndXJhdGlvbiBhcyBzZXQgdmlhCisg
KiBvcHJvZmlsZWZzLgorICovCitzdHJ1Y3Qgb3BfY291bnRlcl9jb25maWcgeworICAgICAgICB1
bnNpZ25lZCBsb25nIGNvdW50OworICAgICAgICB1bnNpZ25lZCBsb25nIGVuYWJsZWQ7CisgICAg
ICAgIHVuc2lnbmVkIGxvbmcgZXZlbnQ7CisgICAgICAgIHVuc2lnbmVkIGxvbmcga2VybmVsOwor
ICAgICAgICB1bnNpZ25lZCBsb25nIHVzZXI7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgdW5pdF9t
YXNrOworfTsKKworZXh0ZXJuIHN0cnVjdCBvcF9jb3VudGVyX2NvbmZpZyBjb3VudGVyX2NvbmZp
Z1tdOworCisjZW5kaWYgLyogT1BfQ09VTlRFUl9IICovCmRpZmYgLVBOYXVyIHhlbi0yLjAuNS94
ZW4vYXJjaC94ODYvb3Byb2ZpbGUvb3BfbW9kZWxfcDQuYyB4ZW4tMi4wLjUtcHJvZi94ZW4vYXJj
aC94ODYvb3Byb2ZpbGUvb3BfbW9kZWxfcDQuYwotLS0geGVuLTIuMC41L3hlbi9hcmNoL3g4Ni9v
cHJvZmlsZS9vcF9tb2RlbF9wNC5jCTE5NjktMTItMzEgMTY6MDA6MDAuMDAwMDAwMDAwIC0wODAw
CisrKyB4ZW4tMi4wLjUtcHJvZi94ZW4vYXJjaC94ODYvb3Byb2ZpbGUvb3BfbW9kZWxfcDQuYwky
MDA1LTA0LTA3IDA5OjA4OjIwLjAwMDAwMDAwMCAtMDcwMApAQCAtMCwwICsxLDc0NCBAQAorLyoq
CisgKiBAZmlsZSBvcF9tb2RlbF9wNC5jCisgKiBQNCBtb2RlbC1zcGVjaWZpYyBNU1Igb3BlcmF0
aW9ucworICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycworICog
QHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIEdyYXlkb24gSG9h
cmUKKyAqCisgKiBNb2RpZmllZCBieSBBcmF2aW5kIE1lbm9uIGZvciBYZW4KKyAqIFRoZXNlIG1v
ZGlmaWNhdGlvbnMgYXJlOgorICogQ29weXJpZ2h0IChDKSAyMDA1IEhld2xldHQtUGFja2FyZCBD
by4KKyAqLworCisjaW5jbHVkZSA8eGVuL3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21zci5oPgor
I2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9hcGljLmg+CisjaW5jbHVkZSA8YXNt
L3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPHhlbi9zY2hlZC5oPgorCisjaW5jbHVkZSAib3BfeDg2
X21vZGVsLmgiCisjaW5jbHVkZSAib3BfY291bnRlci5oIgorCisjZGVmaW5lIE5VTV9FVkVOVFMg
MzkKKworI2RlZmluZSBOVU1fQ09VTlRFUlNfTk9OX0hUIDgKKyNkZWZpbmUgTlVNX0VTQ1JTX05P
Tl9IVCA0NQorI2RlZmluZSBOVU1fQ0NDUlNfTk9OX0hUIDE4CisjZGVmaW5lIE5VTV9DT05UUk9M
U19OT05fSFQgKE5VTV9FU0NSU19OT05fSFQgKyBOVU1fQ0NDUlNfTk9OX0hUKQorCisjZGVmaW5l
IE5VTV9DT1VOVEVSU19IVDIgNAorI2RlZmluZSBOVU1fRVNDUlNfSFQyIDIzCisjZGVmaW5lIE5V
TV9DQ0NSU19IVDIgOQorI2RlZmluZSBOVU1fQ09OVFJPTFNfSFQyIChOVU1fRVNDUlNfSFQyICsg
TlVNX0NDQ1JTX0hUMikKKworc3RhdGljIHVuc2lnbmVkIGludCBudW1fY291bnRlcnMgPSBOVU1f
Q09VTlRFUlNfTk9OX0hUOworCisKKy8qIHRoaXMgaGFzIHRvIGJlIGNoZWNrZWQgZHluYW1pY2Fs
bHkgc2luY2UgdGhlCisgICBoeXBlci10aHJlYWRlZG5lc3Mgb2YgYSBjaGlwIGlzIGRpc2NvdmVy
ZWQgYXQKKyAgIGtlcm5lbCBib290LXRpbWUuICovCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0dXBf
bnVtX2NvdW50ZXJzKHZvaWQpCit7CisjaWZkZWYgQ09ORklHX1NNUAorCWlmIChjcHVfaGFzX2h0
KQorCQludW1fY291bnRlcnMgPSBOVU1fQ09VTlRFUlNfSFQyOworI2VuZGlmCit9CisKK3N0YXRp
YyBpbnQgaW5saW5lIGFkZHJfaW5jcmVtZW50KHZvaWQpCit7CisjaWZkZWYgQ09ORklHX1NNUAor
CXJldHVybiBjcHVfaGFzX2h0ID8gMiA6IDE7CisjZWxzZQorCXJldHVybiAxOworI2VuZGlmCit9
CisKKworLyogdGFibGVzIHRvIHNpbXVsYXRlIHNpbXBsaWZpZWQgaGFyZHdhcmUgdmlldyBvZiBw
NCByZWdpc3RlcnMgKi8KK3N0cnVjdCBwNF9jb3VudGVyX2JpbmRpbmcgeworCWludCB2aXJ0X2Nv
dW50ZXI7CisJaW50IGNvdW50ZXJfYWRkcmVzczsKKwlpbnQgY2Njcl9hZGRyZXNzOworfTsKKwor
c3RydWN0IHA0X2V2ZW50X2JpbmRpbmcgeworCWludCBlc2NyX3NlbGVjdDsgIC8qIHZhbHVlIHRv
IHB1dCBpbiBDQ0NSICovCisJaW50IGV2ZW50X3NlbGVjdDsgLyogdmFsdWUgdG8gcHV0IGluIEVT
Q1IgKi8KKwlzdHJ1Y3QgeworCQlpbnQgdmlydF9jb3VudGVyOyAvKiBmb3IgdGhpcyBjb3VudGVy
Li4uICovCisJCWludCBlc2NyX2FkZHJlc3M7IC8qIHVzZSB0aGlzIEVTQ1IgICAgICAgKi8KKwl9
IGJpbmRpbmdzWzJdOworfTsKKworLyogbmI6IHRoZXNlIENUUl8qIGRlZmluZXMgYXJlIGEgZHVw
bGljYXRlIG9mIGRlZmluZXMgaW4KKyAgIGV2ZW50L2kzODYucDQqZXZlbnRzLiAqLworCisKKyNk
ZWZpbmUgQ1RSX0JQVV8wICAgICAgKDEgPDwgMCkKKyNkZWZpbmUgQ1RSX01TXzAgICAgICAgKDEg
PDwgMSkKKyNkZWZpbmUgQ1RSX0ZMQU1FXzAgICAgKDEgPDwgMikKKyNkZWZpbmUgQ1RSX0lRXzQg
ICAgICAgKDEgPDwgMykKKyNkZWZpbmUgQ1RSX0JQVV8yICAgICAgKDEgPDwgNCkKKyNkZWZpbmUg
Q1RSX01TXzIgICAgICAgKDEgPDwgNSkKKyNkZWZpbmUgQ1RSX0ZMQU1FXzIgICAgKDEgPDwgNikK
KyNkZWZpbmUgQ1RSX0lRXzUgICAgICAgKDEgPDwgNykKKworc3RhdGljIHN0cnVjdCBwNF9jb3Vu
dGVyX2JpbmRpbmcgcDRfY291bnRlcnMgW05VTV9DT1VOVEVSU19OT05fSFRdID0geworCXsgQ1RS
X0JQVV8wLCAgIE1TUl9QNF9CUFVfUEVSRkNUUjAsICAgTVNSX1A0X0JQVV9DQ0NSMCB9LAorCXsg
Q1RSX01TXzAsICAgIE1TUl9QNF9NU19QRVJGQ1RSMCwgICAgTVNSX1A0X01TX0NDQ1IwIH0sCisJ
eyBDVFJfRkxBTUVfMCwgTVNSX1A0X0ZMQU1FX1BFUkZDVFIwLCBNU1JfUDRfRkxBTUVfQ0NDUjAg
fSwKKwl7IENUUl9JUV80LCAgICBNU1JfUDRfSVFfUEVSRkNUUjQsICAgIE1TUl9QNF9JUV9DQ0NS
NCB9LAorCXsgQ1RSX0JQVV8yLCAgIE1TUl9QNF9CUFVfUEVSRkNUUjIsICAgTVNSX1A0X0JQVV9D
Q0NSMiB9LAorCXsgQ1RSX01TXzIsICAgIE1TUl9QNF9NU19QRVJGQ1RSMiwgICAgTVNSX1A0X01T
X0NDQ1IyIH0sCisJeyBDVFJfRkxBTUVfMiwgTVNSX1A0X0ZMQU1FX1BFUkZDVFIyLCBNU1JfUDRf
RkxBTUVfQ0NDUjIgfSwKKwl7IENUUl9JUV81LCAgICBNU1JfUDRfSVFfUEVSRkNUUjUsICAgIE1T
Ul9QNF9JUV9DQ0NSNSB9Cit9OworCisjZGVmaW5lIE5VTV9VTlVTRURfQ0NDUlMJTlVNX0NDQ1JT
X05PTl9IVCAtIE5VTV9DT1VOVEVSU19OT05fSFQKKworLyogQWxsIGNjY3Igd2UgZG9uJ3QgdXNl
LiAqLworc3RhdGljIGludCBwNF91bnVzZWRfY2NjcltOVU1fVU5VU0VEX0NDQ1JTXSA9IHsKKwlN
U1JfUDRfQlBVX0NDQ1IxLAlNU1JfUDRfQlBVX0NDQ1IzLAorCU1TUl9QNF9NU19DQ0NSMSwJTVNS
X1A0X01TX0NDQ1IzLAorCU1TUl9QNF9GTEFNRV9DQ0NSMSwJTVNSX1A0X0ZMQU1FX0NDQ1IzLAor
CU1TUl9QNF9JUV9DQ0NSMCwJTVNSX1A0X0lRX0NDQ1IxLAorCU1TUl9QNF9JUV9DQ0NSMiwJTVNS
X1A0X0lRX0NDQ1IzCit9OworCisvKiBwNCBldmVudCBjb2RlcyBpbiBsaWJvcC9vcF9ldmVudC5o
IGFyZSBpbmRpY2VzIGludG8gdGhpcyB0YWJsZS4gKi8KKworc3RhdGljIHN0cnVjdCBwNF9ldmVu
dF9iaW5kaW5nIHA0X2V2ZW50c1tOVU1fRVZFTlRTXSA9IHsKKwkKKwl7IC8qIEJSQU5DSF9SRVRJ
UkVEICovCisJCTB4MDUsIDB4MDYsIAorCQl7IHtDVFJfSVFfNCwgTVNSX1A0X0NSVV9FU0NSMn0s
CisJCSAge0NUUl9JUV81LCBNU1JfUDRfQ1JVX0VTQ1IzfSB9CisJfSwKKwkKKwl7IC8qIE1JU1BS
RURfQlJBTkNIX1JFVElSRUQgKi8KKwkJMHgwNCwgMHgwMywgCisJCXsgeyBDVFJfSVFfNCwgTVNS
X1A0X0NSVV9FU0NSMH0sCisJCSAgeyBDVFJfSVFfNSwgTVNSX1A0X0NSVV9FU0NSMX0gfQorCX0s
CisJCisJeyAvKiBUQ19ERUxJVkVSX01PREUgKi8KKwkJMHgwMSwgMHgwMSwKKwkJeyB7IENUUl9N
U18wLCBNU1JfUDRfVENfRVNDUjB9LCAgCisJCSAgeyBDVFJfTVNfMiwgTVNSX1A0X1RDX0VTQ1Ix
fSB9CisJfSwKKwkKKwl7IC8qIEJQVV9GRVRDSF9SRVFVRVNUICovCisJCTB4MDAsIDB4MDMsIAor
CQl7IHsgQ1RSX0JQVV8wLCBNU1JfUDRfQlBVX0VTQ1IwfSwKKwkJICB7IENUUl9CUFVfMiwgTVNS
X1A0X0JQVV9FU0NSMX0gfQorCX0sCisKKwl7IC8qIElUTEJfUkVGRVJFTkNFICovCisJCTB4MDMs
IDB4MTgsCisJCXsgeyBDVFJfQlBVXzAsIE1TUl9QNF9JVExCX0VTQ1IwfSwKKwkJICB7IENUUl9C
UFVfMiwgTVNSX1A0X0lUTEJfRVNDUjF9IH0KKwl9LAorCisJeyAvKiBNRU1PUllfQ0FOQ0VMICov
CisJCTB4MDUsIDB4MDIsCisJCXsgeyBDVFJfRkxBTUVfMCwgTVNSX1A0X0RBQ19FU0NSMH0sCisJ
CSAgeyBDVFJfRkxBTUVfMiwgTVNSX1A0X0RBQ19FU0NSMX0gfQorCX0sCisKKwl7IC8qIE1FTU9S
WV9DT01QTEVURSAqLworCQkweDAyLCAweDA4LAorCQl7IHsgQ1RSX0ZMQU1FXzAsIE1TUl9QNF9T
QUFUX0VTQ1IwfSwKKwkJICB7IENUUl9GTEFNRV8yLCBNU1JfUDRfU0FBVF9FU0NSMX0gfQorCX0s
CisKKwl7IC8qIExPQURfUE9SVF9SRVBMQVkgKi8KKwkJMHgwMiwgMHgwNCwgCisJCXsgeyBDVFJf
RkxBTUVfMCwgTVNSX1A0X1NBQVRfRVNDUjB9LAorCQkgIHsgQ1RSX0ZMQU1FXzIsIE1TUl9QNF9T
QUFUX0VTQ1IxfSB9CisJfSwKKworCXsgLyogU1RPUkVfUE9SVF9SRVBMQVkgKi8KKwkJMHgwMiwg
MHgwNSwKKwkJeyB7IENUUl9GTEFNRV8wLCBNU1JfUDRfU0FBVF9FU0NSMH0sCisJCSAgeyBDVFJf
RkxBTUVfMiwgTVNSX1A0X1NBQVRfRVNDUjF9IH0KKwl9LAorCisJeyAvKiBNT0JfTE9BRF9SRVBM
QVkgKi8KKwkJMHgwMiwgMHgwMywKKwkJeyB7IENUUl9CUFVfMCwgTVNSX1A0X01PQl9FU0NSMH0s
CisJCSAgeyBDVFJfQlBVXzIsIE1TUl9QNF9NT0JfRVNDUjF9IH0KKwl9LAorCisJeyAvKiBQQUdF
X1dBTEtfVFlQRSAqLworCQkweDA0LCAweDAxLAorCQl7IHsgQ1RSX0JQVV8wLCBNU1JfUDRfUE1I
X0VTQ1IwfSwKKwkJICB7IENUUl9CUFVfMiwgTVNSX1A0X1BNSF9FU0NSMX0gfQorCX0sCisKKwl7
IC8qIEJTUV9DQUNIRV9SRUZFUkVOQ0UgKi8KKwkJMHgwNywgMHgwYywgCisJCXsgeyBDVFJfQlBV
XzAsIE1TUl9QNF9CU1VfRVNDUjB9LAorCQkgIHsgQ1RSX0JQVV8yLCBNU1JfUDRfQlNVX0VTQ1Ix
fSB9CisJfSwKKworCXsgLyogSU9RX0FMTE9DQVRJT04gKi8KKwkJMHgwNiwgMHgwMywgCisJCXsg
eyBDVFJfQlBVXzAsIE1TUl9QNF9GU0JfRVNDUjB9LAorCQkgIHsgMCwgMCB9IH0KKwl9LAorCisJ
eyAvKiBJT1FfQUNUSVZFX0VOVFJJRVMgKi8KKwkJMHgwNiwgMHgxYSwgCisJCXsgeyBDVFJfQlBV
XzIsIE1TUl9QNF9GU0JfRVNDUjF9LAorCQkgIHsgMCwgMCB9IH0KKwl9LAorCisJeyAvKiBGU0Jf
REFUQV9BQ1RJVklUWSAqLworCQkweDA2LCAweDE3LCAKKwkJeyB7IENUUl9CUFVfMCwgTVNSX1A0
X0ZTQl9FU0NSMH0sCisJCSAgeyBDVFJfQlBVXzIsIE1TUl9QNF9GU0JfRVNDUjF9IH0KKwl9LAor
CisJeyAvKiBCU1FfQUxMT0NBVElPTiAqLworCQkweDA3LCAweDA1LCAKKwkJeyB7IENUUl9CUFVf
MCwgTVNSX1A0X0JTVV9FU0NSMH0sCisJCSAgeyAwLCAwIH0gfQorCX0sCisKKwl7IC8qIEJTUV9B
Q1RJVkVfRU5UUklFUyAqLworCQkweDA3LCAweDA2LAorCQl7IHsgQ1RSX0JQVV8yLCBNU1JfUDRf
QlNVX0VTQ1IxIC8qIGd1ZXNzICovfSwgIAorCQkgIHsgMCwgMCB9IH0KKwl9LAorCisJeyAvKiBY
ODdfQVNTSVNUICovCisJCTB4MDUsIDB4MDMsIAorCQl7IHsgQ1RSX0lRXzQsIE1TUl9QNF9DUlVf
RVNDUjJ9LAorCQkgIHsgQ1RSX0lRXzUsIE1TUl9QNF9DUlVfRVNDUjN9IH0KKwl9LAorCisJeyAv
KiBTU0VfSU5QVVRfQVNTSVNUICovCisJCTB4MDEsIDB4MzQsCisJCXsgeyBDVFJfRkxBTUVfMCwg
TVNSX1A0X0ZJUk1fRVNDUjB9LAorCQkgIHsgQ1RSX0ZMQU1FXzIsIE1TUl9QNF9GSVJNX0VTQ1Ix
fSB9CisJfSwKKyAgCisJeyAvKiBQQUNLRURfU1BfVU9QICovCisJCTB4MDEsIDB4MDgsIAorCQl7
IHsgQ1RSX0ZMQU1FXzAsIE1TUl9QNF9GSVJNX0VTQ1IwfSwKKwkJICB7IENUUl9GTEFNRV8yLCBN
U1JfUDRfRklSTV9FU0NSMX0gfQorCX0sCisgIAorCXsgLyogUEFDS0VEX0RQX1VPUCAqLworCQkw
eDAxLCAweDBjLCAKKwkJeyB7IENUUl9GTEFNRV8wLCBNU1JfUDRfRklSTV9FU0NSMH0sCisJCSAg
eyBDVFJfRkxBTUVfMiwgTVNSX1A0X0ZJUk1fRVNDUjF9IH0KKwl9LAorCisJeyAvKiBTQ0FMQVJf
U1BfVU9QICovCisJCTB4MDEsIDB4MGEsIAorCQl7IHsgQ1RSX0ZMQU1FXzAsIE1TUl9QNF9GSVJN
X0VTQ1IwfSwKKwkJICB7IENUUl9GTEFNRV8yLCBNU1JfUDRfRklSTV9FU0NSMX0gfQorCX0sCisK
Kwl7IC8qIFNDQUxBUl9EUF9VT1AgKi8KKwkJMHgwMSwgMHgwZSwKKwkJeyB7IENUUl9GTEFNRV8w
LCBNU1JfUDRfRklSTV9FU0NSMH0sCisJCSAgeyBDVFJfRkxBTUVfMiwgTVNSX1A0X0ZJUk1fRVND
UjF9IH0KKwl9LAorCisJeyAvKiA2NEJJVF9NTVhfVU9QICovCisJCTB4MDEsIDB4MDIsIAorCQl7
IHsgQ1RSX0ZMQU1FXzAsIE1TUl9QNF9GSVJNX0VTQ1IwfSwKKwkJICB7IENUUl9GTEFNRV8yLCBN
U1JfUDRfRklSTV9FU0NSMX0gfQorCX0sCisgIAorCXsgLyogMTI4QklUX01NWF9VT1AgKi8KKwkJ
MHgwMSwgMHgxYSwgCisJCXsgeyBDVFJfRkxBTUVfMCwgTVNSX1A0X0ZJUk1fRVNDUjB9LAorCQkg
IHsgQ1RSX0ZMQU1FXzIsIE1TUl9QNF9GSVJNX0VTQ1IxfSB9CisJfSwKKworCXsgLyogWDg3X0ZQ
X1VPUCAqLworCQkweDAxLCAweDA0LCAKKwkJeyB7IENUUl9GTEFNRV8wLCBNU1JfUDRfRklSTV9F
U0NSMH0sCisJCSAgeyBDVFJfRkxBTUVfMiwgTVNSX1A0X0ZJUk1fRVNDUjF9IH0KKwl9LAorICAK
Kwl7IC8qIFg4N19TSU1EX01PVkVTX1VPUCAqLworCQkweDAxLCAweDJlLCAKKwkJeyB7IENUUl9G
TEFNRV8wLCBNU1JfUDRfRklSTV9FU0NSMH0sCisJCSAgeyBDVFJfRkxBTUVfMiwgTVNSX1A0X0ZJ
Uk1fRVNDUjF9IH0KKwl9LAorICAKKwl7IC8qIE1BQ0hJTkVfQ0xFQVIgKi8KKwkJMHgwNSwgMHgw
MiwgCisJCXsgeyBDVFJfSVFfNCwgTVNSX1A0X0NSVV9FU0NSMn0sCisJCSAgeyBDVFJfSVFfNSwg
TVNSX1A0X0NSVV9FU0NSM30gfQorCX0sCisKKwl7IC8qIEdMT0JBTF9QT1dFUl9FVkVOVFMgKi8K
KwkJMHgwNiwgMHgxMyAvKiBvbGRlciBtYW51YWwgc2F5cyAweDA1LCBuZXdlciAweDEzICovLAor
CQl7IHsgQ1RSX0JQVV8wLCBNU1JfUDRfRlNCX0VTQ1IwfSwKKwkJICB7IENUUl9CUFVfMiwgTVNS
X1A0X0ZTQl9FU0NSMX0gfQorCX0sCisgIAorCXsgLyogVENfTVNfWEZFUiAqLworCQkweDAwLCAw
eDA1LCAKKwkJeyB7IENUUl9NU18wLCBNU1JfUDRfTVNfRVNDUjB9LAorCQkgIHsgQ1RSX01TXzIs
IE1TUl9QNF9NU19FU0NSMX0gfQorCX0sCisKKwl7IC8qIFVPUF9RVUVVRV9XUklURVMgKi8KKwkJ
MHgwMCwgMHgwOSwKKwkJeyB7IENUUl9NU18wLCBNU1JfUDRfTVNfRVNDUjB9LAorCQkgIHsgQ1RS
X01TXzIsIE1TUl9QNF9NU19FU0NSMX0gfQorCX0sCisKKwl7IC8qIEZST05UX0VORF9FVkVOVCAq
LworCQkweDA1LCAweDA4LAorCQl7IHsgQ1RSX0lRXzQsIE1TUl9QNF9DUlVfRVNDUjJ9LAorCQkg
IHsgQ1RSX0lRXzUsIE1TUl9QNF9DUlVfRVNDUjN9IH0KKwl9LAorCisJeyAvKiBFWEVDVVRJT05f
RVZFTlQgKi8KKwkJMHgwNSwgMHgwYywKKwkJeyB7IENUUl9JUV80LCBNU1JfUDRfQ1JVX0VTQ1Iy
fSwKKwkJICB7IENUUl9JUV81LCBNU1JfUDRfQ1JVX0VTQ1IzfSB9CisJfSwKKworCXsgLyogUkVQ
TEFZX0VWRU5UICovCisJCTB4MDUsIDB4MDksCisJCXsgeyBDVFJfSVFfNCwgTVNSX1A0X0NSVV9F
U0NSMn0sCisJCSAgeyBDVFJfSVFfNSwgTVNSX1A0X0NSVV9FU0NSM30gfQorCX0sCisKKwl7IC8q
IElOU1RSX1JFVElSRUQgKi8KKwkJMHgwNCwgMHgwMiwgCisJCXsgeyBDVFJfSVFfNCwgTVNSX1A0
X0NSVV9FU0NSMH0sCisJCSAgeyBDVFJfSVFfNSwgTVNSX1A0X0NSVV9FU0NSMX0gfQorCX0sCisK
Kwl7IC8qIFVPUFNfUkVUSVJFRCAqLworCQkweDA0LCAweDAxLAorCQl7IHsgQ1RSX0lRXzQsIE1T
Ul9QNF9DUlVfRVNDUjB9LAorCQkgIHsgQ1RSX0lRXzUsIE1TUl9QNF9DUlVfRVNDUjF9IH0KKwl9
LAorCisJeyAvKiBVT1BfVFlQRSAqLyAgICAKKwkJMHgwMiwgMHgwMiwgCisJCXsgeyBDVFJfSVFf
NCwgTVNSX1A0X1JBVF9FU0NSMH0sCisJCSAgeyBDVFJfSVFfNSwgTVNSX1A0X1JBVF9FU0NSMX0g
fQorCX0sCisKKwl7IC8qIFJFVElSRURfTUlTUFJFRF9CUkFOQ0hfVFlQRSAqLworCQkweDAyLCAw
eDA1LCAKKwkJeyB7IENUUl9NU18wLCBNU1JfUDRfVEJQVV9FU0NSMH0sCisJCSAgeyBDVFJfTVNf
MiwgTVNSX1A0X1RCUFVfRVNDUjF9IH0KKwl9LAorCisJeyAvKiBSRVRJUkVEX0JSQU5DSF9UWVBF
ICovCisJCTB4MDIsIDB4MDQsCisJCXsgeyBDVFJfTVNfMCwgTVNSX1A0X1RCUFVfRVNDUjB9LAor
CQkgIHsgQ1RSX01TXzIsIE1TUl9QNF9UQlBVX0VTQ1IxfSB9CisJfQorfTsKKworCisjZGVmaW5l
IE1JU0NfUE1DX0VOQUJMRURfUCh4KSAoKHgpICYgMSA8PCA3KQorCisjZGVmaW5lIEVTQ1JfUkVT
RVJWRURfQklUUyAweDgwMDAwMDAzCisjZGVmaW5lIEVTQ1JfQ0xFQVIoZXNjcikgKChlc2NyKSAm
PSBFU0NSX1JFU0VSVkVEX0JJVFMpCisjZGVmaW5lIEVTQ1JfU0VUX1VTUl8wKGVzY3IsIHVzcikg
KChlc2NyKSB8PSAoKCh1c3IpICYgMSkgPDwgMikpCisjZGVmaW5lIEVTQ1JfU0VUX09TXzAoZXNj
ciwgb3MpICgoZXNjcikgfD0gKCgob3MpICYgMSkgPDwgMykpCisjZGVmaW5lIEVTQ1JfU0VUX1VT
Ul8xKGVzY3IsIHVzcikgKChlc2NyKSB8PSAoKCh1c3IpICYgMSkpKQorI2RlZmluZSBFU0NSX1NF
VF9PU18xKGVzY3IsIG9zKSAoKGVzY3IpIHw9ICgoKG9zKSAmIDEpIDw8IDEpKQorI2RlZmluZSBF
U0NSX1NFVF9FVkVOVF9TRUxFQ1QoZXNjciwgc2VsKSAoKGVzY3IpIHw9ICgoKHNlbCkgJiAweDNm
KSA8PCAyNSkpCisjZGVmaW5lIEVTQ1JfU0VUX0VWRU5UX01BU0soZXNjciwgbWFzaykgKChlc2Ny
KSB8PSAoKChtYXNrKSAmIDB4ZmZmZikgPDwgOSkpCisjZGVmaW5lIEVTQ1JfUkVBRChlc2NyLGhp
Z2gsZXYsaSkgZG8ge3JkbXNyKGV2LT5iaW5kaW5nc1soaSldLmVzY3JfYWRkcmVzcywgKGVzY3Ip
LCAoaGlnaCkpO30gd2hpbGUgKDApCisjZGVmaW5lIEVTQ1JfV1JJVEUoZXNjcixoaWdoLGV2LGkp
IGRvIHt3cm1zcihldi0+YmluZGluZ3NbKGkpXS5lc2NyX2FkZHJlc3MsIChlc2NyKSwgKGhpZ2gp
KTt9IHdoaWxlICgwKQorCisjZGVmaW5lIENDQ1JfUkVTRVJWRURfQklUUyAweDM4MDMwRkZGCisj
ZGVmaW5lIENDQ1JfQ0xFQVIoY2NjcikgKChjY2NyKSAmPSBDQ0NSX1JFU0VSVkVEX0JJVFMpCisj
ZGVmaW5lIENDQ1JfU0VUX1JFUVVJUkVEX0JJVFMoY2NjcikgKChjY2NyKSB8PSAweDAwMDMwMDAw
KQorI2RlZmluZSBDQ0NSX1NFVF9FU0NSX1NFTEVDVChjY2NyLCBzZWwpICgoY2NjcikgfD0gKCgo
c2VsKSAmIDB4MDcpIDw8IDEzKSkKKyNkZWZpbmUgQ0NDUl9TRVRfUE1JX09WRl8wKGNjY3IpICgo
Y2NjcikgfD0gKDE8PDI2KSkKKyNkZWZpbmUgQ0NDUl9TRVRfUE1JX09WRl8xKGNjY3IpICgoY2Nj
cikgfD0gKDE8PDI3KSkKKyNkZWZpbmUgQ0NDUl9TRVRfRU5BQkxFKGNjY3IpICgoY2NjcikgfD0g
KDE8PDEyKSkKKyNkZWZpbmUgQ0NDUl9TRVRfRElTQUJMRShjY2NyKSAoKGNjY3IpICY9IH4oMTw8
MTIpKQorI2RlZmluZSBDQ0NSX1JFQUQobG93LCBoaWdoLCBpKSBkbyB7cmRtc3IocDRfY291bnRl
cnNbKGkpXS5jY2NyX2FkZHJlc3MsIChsb3cpLCAoaGlnaCkpO30gd2hpbGUgKDApCisjZGVmaW5l
IENDQ1JfV1JJVEUobG93LCBoaWdoLCBpKSBkbyB7d3Jtc3IocDRfY291bnRlcnNbKGkpXS5jY2Ny
X2FkZHJlc3MsIChsb3cpLCAoaGlnaCkpO30gd2hpbGUgKDApCisjZGVmaW5lIENDQ1JfT1ZGX1Ao
Y2NjcikgKChjY2NyKSAmICgxVTw8MzEpKQorI2RlZmluZSBDQ0NSX0NMRUFSX09WRihjY2NyKSAo
KGNjY3IpICY9ICh+KDFVPDwzMSkpKQorCisjZGVmaW5lIENUUl9SRUFEKGwsaCxpKSBkbyB7cmRt
c3IocDRfY291bnRlcnNbKGkpXS5jb3VudGVyX2FkZHJlc3MsIChsKSwgKGgpKTt9IHdoaWxlICgw
KQorI2RlZmluZSBDVFJfV1JJVEUobCxpKSBkbyB7d3Jtc3IocDRfY291bnRlcnNbKGkpXS5jb3Vu
dGVyX2FkZHJlc3MsIC0odTMyKShsKSwgLTEpO30gd2hpbGUgKDApCisjZGVmaW5lIENUUl9PVkVS
RkxPV19QKGN0cikgKCEoKGN0cikgJiAweDgwMDAwMDAwKSkKKworCisvKiB0aGlzIGFzc2lnbnMg
YSAic3RhZ2dlciIgdG8gdGhlIGN1cnJlbnQgQ1BVLCB3aGljaCBpcyB1c2VkIHRocm91Z2hvdXQK
KyAgIHRoZSBjb2RlIGluIHRoaXMgbW9kdWxlIGFzIGFuIGV4dHJhIGFycmF5IG9mZnNldCwgdG8g
c2VsZWN0IHRoZSAiZXZlbiIKKyAgIG9yICJvZGQiIHBhcnQgb2YgYWxsIHRoZSBkaXZpZGVkIHJl
c291cmNlcy4gKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X3N0YWdnZXIodm9pZCkKK3sKKyNp
ZmRlZiBDT05GSUdfU01QCisJLyppbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCXJldHVy
biAoY3B1ICE9IGZpcnN0X2NwdShjcHVfc2libGluZ19tYXBbY3B1XSkpOyovCisJLyogV2Ugd2Fu
dCB0aGUgdHdvIGxvZ2ljYWwgY3B1cyBvZiBhIHBoeXNpY2FsIGNwdSB0byB1c2UKKwlkaXNqb2lu
dCBzZXQgb2YgY291bnRlcnMuIFRoZSBmb2xsb3dpbmcgY29kZSBpcyB3cm9uZy4gKi8KKwlyZXR1
cm4gMDsKKyNlbmRpZgkKKwlyZXR1cm4gMDsKK30KKworCisvKiBmaW5hbGx5LCBtZWRpYXRlIGFj
Y2VzcyB0byBhIHJlYWwgaGFyZHdhcmUgY291bnRlcgorICAgYnkgcGFzc2luZyBhICJ2aXJ0dWFs
IiBjb3VudGVyIG51bWVyIHRvIHRoaXMgbWFjcm8sCisgICBhbG9uZyB3aXRoIHlvdXIgc3RhZ2dl
ciBzZXR0aW5nLiAqLworI2RlZmluZSBWSVJUX0NUUihzdGFnZ2VyLCBpKSAoKGkpICsgKChudW1f
Y291bnRlcnMpICogKHN0YWdnZXIpKSkKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgcmVzZXRfdmFs
dWVbTlVNX0NPVU5URVJTX05PTl9IVF07CisKKworc3RhdGljIHZvaWQgcDRfZmlsbF9pbl9hZGRy
ZXNzZXMoc3RydWN0IG9wX21zcnMgKiBjb25zdCBtc3JzKQoreworCXVuc2lnbmVkIGludCBpOyAK
Kwl1bnNpZ25lZCBpbnQgYWRkciwgc3RhZzsKKworCXNldHVwX251bV9jb3VudGVycygpOworCXN0
YWcgPSBnZXRfc3RhZ2dlcigpOworCisJLyogdGhlIGNvdW50ZXIgcmVnaXN0ZXJzIHdlIHBheSBh
dHRlbnRpb24gdG8gKi8KKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2NvdW50ZXJzOyArK2kpIHsKKwkJ
bXNycy0+Y291bnRlcnNbaV0uYWRkciA9IAorCQkJcDRfY291bnRlcnNbVklSVF9DVFIoc3RhZywg
aSldLmNvdW50ZXJfYWRkcmVzczsKKwl9CisKKwkvKiBGSVhNRTogYmFkIGZlZWxpbmcsIHdlIGRv
bid0IHNhdmUgdGhlIDEwIGNvdW50ZXJzIHdlIGRvbid0IHVzZS4gKi8KKworCS8qIDE4IENDQ1Ig
cmVnaXN0ZXJzICovCisJZm9yIChpID0gMCwgYWRkciA9IE1TUl9QNF9CUFVfQ0NDUjAgKyBzdGFn
OworCSAgICAgYWRkciA8PSBNU1JfUDRfSVFfQ0NDUjU7ICsraSwgYWRkciArPSBhZGRyX2luY3Jl
bWVudCgpKSB7CisJCW1zcnMtPmNvbnRyb2xzW2ldLmFkZHIgPSBhZGRyOworCX0KKwkKKwkvKiA0
MyBFU0NSIHJlZ2lzdGVycyBpbiB0aHJlZSBvciBmb3VyIGRpc2NvbnRpZ3VvdXMgZ3JvdXAgKi8K
Kwlmb3IgKGFkZHIgPSBNU1JfUDRfQlNVX0VTQ1IwICsgc3RhZzsKKwkgICAgIGFkZHIgPCBNU1Jf
UDRfSVFfRVNDUjA7ICsraSwgYWRkciArPSBhZGRyX2luY3JlbWVudCgpKSB7CisJCW1zcnMtPmNv
bnRyb2xzW2ldLmFkZHIgPSBhZGRyOworCX0KKworCS8qIG5vIElRX0VTQ1IwLzEgb24gc29tZSBt
b2RlbHMsIHdlIHNhdmUgYSBzZWNvbmRlIHRpbWUgQlNVX0VTQ1IwLzEKKwkgKiB0byBhdm9pZCBz
cGVjaWFsIGNhc2UgaW4gbm1pX3tzYXZlfHJlc3RvcmV9X3JlZ2lzdGVycygpICovCisJaWYgKGJv
b3RfY3B1X2RhdGEueDg2X21vZGVsID49IDB4MykgeworCQlmb3IgKGFkZHIgPSBNU1JfUDRfQlNV
X0VTQ1IwICsgc3RhZzsKKwkJICAgICBhZGRyIDw9IE1TUl9QNF9CU1VfRVNDUjE7ICsraSwgYWRk
ciArPSBhZGRyX2luY3JlbWVudCgpKSB7CisJCQltc3JzLT5jb250cm9sc1tpXS5hZGRyID0gYWRk
cjsKKwkJfQorCX0gZWxzZSB7CisJCWZvciAoYWRkciA9IE1TUl9QNF9JUV9FU0NSMCArIHN0YWc7
CisJCSAgICAgYWRkciA8PSBNU1JfUDRfSVFfRVNDUjE7ICsraSwgYWRkciArPSBhZGRyX2luY3Jl
bWVudCgpKSB7CisJCQltc3JzLT5jb250cm9sc1tpXS5hZGRyID0gYWRkcjsKKwkJfQorCX0KKwor
CWZvciAoYWRkciA9IE1TUl9QNF9SQVRfRVNDUjAgKyBzdGFnOworCSAgICAgYWRkciA8PSBNU1Jf
UDRfU1NVX0VTQ1IwOyArK2ksIGFkZHIgKz0gYWRkcl9pbmNyZW1lbnQoKSkgeworCQltc3JzLT5j
b250cm9sc1tpXS5hZGRyID0gYWRkcjsKKwl9CisJCisJZm9yIChhZGRyID0gTVNSX1A0X01TX0VT
Q1IwICsgc3RhZzsKKwkgICAgIGFkZHIgPD0gTVNSX1A0X1RDX0VTQ1IxOyArK2ksIGFkZHIgKz0g
YWRkcl9pbmNyZW1lbnQoKSkgeyAKKwkJbXNycy0+Y29udHJvbHNbaV0uYWRkciA9IGFkZHI7CisJ
fQorCQorCWZvciAoYWRkciA9IE1TUl9QNF9JWF9FU0NSMCArIHN0YWc7CisJICAgICBhZGRyIDw9
IE1TUl9QNF9DUlVfRVNDUjM7ICsraSwgYWRkciArPSBhZGRyX2luY3JlbWVudCgpKSB7IAorCQlt
c3JzLT5jb250cm9sc1tpXS5hZGRyID0gYWRkcjsKKwl9CisKKwkvKiB0aGVyZSBhcmUgMiByZW1h
aW5pbmcgbm9uLWNvbnRpZ3VvdXNseSBsb2NhdGVkIEVTQ1JzICovCisKKwlpZiAobnVtX2NvdW50
ZXJzID09IE5VTV9DT1VOVEVSU19OT05fSFQpIHsJCQorCQkvKiBzdGFuZGFyZCBub24tSFQgQ1BV
cyBoYW5kbGUgYm90aCByZW1haW5pbmcgRVNDUnMqLworCQltc3JzLT5jb250cm9sc1tpKytdLmFk
ZHIgPSBNU1JfUDRfQ1JVX0VTQ1I1OworCQltc3JzLT5jb250cm9sc1tpKytdLmFkZHIgPSBNU1Jf
UDRfQ1JVX0VTQ1I0OworCisJfSBlbHNlIGlmIChzdGFnID09IDApIHsKKwkJLyogSFQgQ1BVcyBn
aXZlIHRoZSBmaXJzdCByZW1haW5kZXIgdG8gdGhlIGV2ZW4gdGhyZWFkLCBhcworCQkgICB0aGUg
MzJuZCBjb250cm9sIHJlZ2lzdGVyICovCisJCW1zcnMtPmNvbnRyb2xzW2krK10uYWRkciA9IE1T
Ul9QNF9DUlVfRVNDUjQ7CisKKwl9IGVsc2UgeworCQkvKiBhbmQgdHdvIGNvcGllcyBvZiB0aGUg
c2Vjb25kIHRvIHRoZSBvZGQgdGhyZWFkLAorCQkgICBmb3IgdGhlIDIyc3QgYW5kIDIzbmQgY29u
dHJvbCByZWdpc3RlcnMgKi8KKwkJbXNycy0+Y29udHJvbHNbaSsrXS5hZGRyID0gTVNSX1A0X0NS
VV9FU0NSNTsKKwkJbXNycy0+Y29udHJvbHNbaSsrXS5hZGRyID0gTVNSX1A0X0NSVV9FU0NSNTsK
Kwl9Cit9CisKKworc3RhdGljIHZvaWQgcG1jX3NldHVwX29uZV9wNF9jb3VudGVyKHVuc2lnbmVk
IGludCBjdHIpCit7CisJaW50IGk7CisJaW50IGNvbnN0IG1heGJpbmQgPSAyOworCXVuc2lnbmVk
IGludCBjY2NyID0gMDsKKwl1bnNpZ25lZCBpbnQgZXNjciA9IDA7CisJdW5zaWduZWQgaW50IGhp
Z2ggPSAwOworCXVuc2lnbmVkIGludCBjb3VudGVyX2JpdDsKKwlzdHJ1Y3QgcDRfZXZlbnRfYmlu
ZGluZyAqZXYgPSBOVUxMOworCXVuc2lnbmVkIGludCBzdGFnOworCisJc3RhZyA9IGdldF9zdGFn
Z2VyKCk7CisJCisJLyogY29udmVydCBmcm9tIGNvdW50ZXIgKm51bWJlciogdG8gY291bnRlciAq
Yml0KiAqLworCWNvdW50ZXJfYml0ID0gMSA8PCBWSVJUX0NUUihzdGFnLCBjdHIpOworCQorCS8q
IGZpbmQgb3VyIGV2ZW50IGJpbmRpbmcgc3RydWN0dXJlLiAqLworCWlmIChjb3VudGVyX2NvbmZp
Z1tjdHJdLmV2ZW50IDw9IDAgfHwgY291bnRlcl9jb25maWdbY3RyXS5ldmVudCA+IE5VTV9FVkVO
VFMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIAorCQkgICAgICAgIm9wcm9maWxlOiBQNCBldmVudCBj
b2RlIDB4JWx4IG91dCBvZiByYW5nZVxuIiwgCisJCSAgICAgICBjb3VudGVyX2NvbmZpZ1tjdHJd
LmV2ZW50KTsKKwkJcmV0dXJuOworCX0KKwkKKwlldiA9ICYocDRfZXZlbnRzW2NvdW50ZXJfY29u
ZmlnW2N0cl0uZXZlbnQgLSAxXSk7CisJCisJZm9yIChpID0gMDsgaSA8IG1heGJpbmQ7IGkrKykg
eworCQlpZiAoZXYtPmJpbmRpbmdzW2ldLnZpcnRfY291bnRlciAmIGNvdW50ZXJfYml0KSB7CisK
KwkJCS8qIG1vZGlmeSBFU0NSICovCisJCQlFU0NSX1JFQUQoZXNjciwgaGlnaCwgZXYsIGkpOwor
CQkJRVNDUl9DTEVBUihlc2NyKTsKKwkJCWlmIChzdGFnID09IDApIHsKKwkJCQlFU0NSX1NFVF9V
U1JfMChlc2NyLCBjb3VudGVyX2NvbmZpZ1tjdHJdLnVzZXIpOworCQkJCUVTQ1JfU0VUX09TXzAo
ZXNjciwgY291bnRlcl9jb25maWdbY3RyXS5rZXJuZWwpOworCQkJfSBlbHNlIHsKKwkJCQlFU0NS
X1NFVF9VU1JfMShlc2NyLCBjb3VudGVyX2NvbmZpZ1tjdHJdLnVzZXIpOworCQkJCUVTQ1JfU0VU
X09TXzEoZXNjciwgY291bnRlcl9jb25maWdbY3RyXS5rZXJuZWwpOworCQkJfQorCQkJRVNDUl9T
RVRfRVZFTlRfU0VMRUNUKGVzY3IsIGV2LT5ldmVudF9zZWxlY3QpOworCQkJRVNDUl9TRVRfRVZF
TlRfTUFTSyhlc2NyLCBjb3VudGVyX2NvbmZpZ1tjdHJdLnVuaXRfbWFzayk7CQkJCisJCQlFU0NS
X1dSSVRFKGVzY3IsIGhpZ2gsIGV2LCBpKTsKKwkJICAgICAgIAorCQkJLyogbW9kaWZ5IENDQ1Ig
Ki8KKwkJCUNDQ1JfUkVBRChjY2NyLCBoaWdoLCBWSVJUX0NUUihzdGFnLCBjdHIpKTsKKwkJCUND
Q1JfQ0xFQVIoY2Njcik7CisJCQlDQ0NSX1NFVF9SRVFVSVJFRF9CSVRTKGNjY3IpOworCQkJQ0ND
Ul9TRVRfRVNDUl9TRUxFQ1QoY2NjciwgZXYtPmVzY3Jfc2VsZWN0KTsKKwkJCWlmIChzdGFnID09
IDApIHsKKwkJCQlDQ0NSX1NFVF9QTUlfT1ZGXzAoY2Njcik7CisJCQl9IGVsc2UgeworCQkJCUND
Q1JfU0VUX1BNSV9PVkZfMShjY2NyKTsKKwkJCX0KKwkJCUNDQ1JfV1JJVEUoY2NjciwgaGlnaCwg
VklSVF9DVFIoc3RhZywgY3RyKSk7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwlwcmludGsoS0VS
Tl9FUlIgCisJICAgICAgICJvcHJvZmlsZTogUDQgZXZlbnQgY29kZSAweCVseCBubyBiaW5kaW5n
LCBzdGFnICVkIGN0ciAlZFxuIiwKKwkgICAgICAgY291bnRlcl9jb25maWdbY3RyXS5ldmVudCwg
c3RhZywgY3RyKTsKK30KKworCitzdGF0aWMgdm9pZCBwNF9zZXR1cF9jdHJzKHN0cnVjdCBvcF9t
c3JzIGNvbnN0ICogY29uc3QgbXNycykKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwl1bnNpZ25lZCBp
bnQgbG93LCBoaWdoOworCXVuc2lnbmVkIGludCBhZGRyOworCXVuc2lnbmVkIGludCBzdGFnOwor
CisJc3RhZyA9IGdldF9zdGFnZ2VyKCk7CisKKwlyZG1zcihNU1JfSUEzMl9NSVNDX0VOQUJMRSwg
bG93LCBoaWdoKTsKKwlpZiAoISBNSVNDX1BNQ19FTkFCTEVEX1AobG93KSkgeworCQlwcmludGso
S0VSTl9FUlIgIm9wcm9maWxlOiBQNCBQTUMgbm90IGF2YWlsYWJsZVxuIik7CisJCXJldHVybjsK
Kwl9CisKKwkvKiBjbGVhciB0aGUgY2NjcnMgd2Ugd2lsbCB1c2UgKi8KKwlmb3IgKGkgPSAwIDsg
aSA8IG51bV9jb3VudGVycyA7IGkrKykgeworCQlyZG1zcihwNF9jb3VudGVyc1tWSVJUX0NUUihz
dGFnLCBpKV0uY2Njcl9hZGRyZXNzLCBsb3csIGhpZ2gpOworCQlDQ0NSX0NMRUFSKGxvdyk7CisJ
CUNDQ1JfU0VUX1JFUVVJUkVEX0JJVFMobG93KTsKKwkJd3Jtc3IocDRfY291bnRlcnNbVklSVF9D
VFIoc3RhZywgaSldLmNjY3JfYWRkcmVzcywgbG93LCBoaWdoKTsKKwl9CisKKwkvKiBjbGVhciBj
Y2NycyBvdXRzaWRlIG91ciBjb25jZXJuICovCisJZm9yIChpID0gc3RhZyA7IGkgPCBOVU1fVU5V
U0VEX0NDQ1JTIDsgaSArPSBhZGRyX2luY3JlbWVudCgpKSB7CisJCXJkbXNyKHA0X3VudXNlZF9j
Y2NyW2ldLCBsb3csIGhpZ2gpOworCQlDQ0NSX0NMRUFSKGxvdyk7CisJCUNDQ1JfU0VUX1JFUVVJ
UkVEX0JJVFMobG93KTsKKwkJd3Jtc3IocDRfdW51c2VkX2NjY3JbaV0sIGxvdywgaGlnaCk7CisJ
fQorCisJLyogY2xlYXIgYWxsIGVzY3JzIChpbmNsdWRpbmcgdGhvc2Ugb3V0c2lkZSBvdXIgY29u
Y2VybikgKi8KKwlmb3IgKGFkZHIgPSBNU1JfUDRfQlNVX0VTQ1IwICsgc3RhZzsKKwkgICAgIGFk
ZHIgPCAgTVNSX1A0X0lRX0VTQ1IwOyBhZGRyICs9IGFkZHJfaW5jcmVtZW50KCkpIHsKKwkJd3Jt
c3IoYWRkciwgMCwgMCk7CisJfQorCisJLyogT24gb2xkZXIgbW9kZWxzIGNsZWFyIGFsc28gTVNS
X1A0X0lRX0VTQ1IwLzEgKi8KKwlpZiAoYm9vdF9jcHVfZGF0YS54ODZfbW9kZWwgPCAweDMpIHsK
KwkJd3Jtc3IoTVNSX1A0X0lRX0VTQ1IwLCAwLCAwKTsKKwkJd3Jtc3IoTVNSX1A0X0lRX0VTQ1Ix
LCAwLCAwKTsKKwl9CisKKwlmb3IgKGFkZHIgPSBNU1JfUDRfUkFUX0VTQ1IwICsgc3RhZzsKKwkg
ICAgIGFkZHIgPD0gTVNSX1A0X1NTVV9FU0NSMDsgKytpLCBhZGRyICs9IGFkZHJfaW5jcmVtZW50
KCkpIHsKKwkJd3Jtc3IoYWRkciwgMCwgMCk7CisJfQorCQorCWZvciAoYWRkciA9IE1TUl9QNF9N
U19FU0NSMCArIHN0YWc7CisJICAgICBhZGRyIDw9IE1TUl9QNF9UQ19FU0NSMTsgYWRkciArPSBh
ZGRyX2luY3JlbWVudCgpKXsgCisJCXdybXNyKGFkZHIsIDAsIDApOworCX0KKwkKKwlmb3IgKGFk
ZHIgPSBNU1JfUDRfSVhfRVNDUjAgKyBzdGFnOworCSAgICAgYWRkciA8PSBNU1JfUDRfQ1JVX0VT
Q1IzOyBhZGRyICs9IGFkZHJfaW5jcmVtZW50KCkpeyAKKwkJd3Jtc3IoYWRkciwgMCwgMCk7CisJ
fQorCisJaWYgKG51bV9jb3VudGVycyA9PSBOVU1fQ09VTlRFUlNfTk9OX0hUKSB7CQkKKwkJd3Jt
c3IoTVNSX1A0X0NSVV9FU0NSNCwgMCwgMCk7CisJCXdybXNyKE1TUl9QNF9DUlVfRVNDUjUsIDAs
IDApOworCX0gZWxzZSBpZiAoc3RhZyA9PSAwKSB7CisJCXdybXNyKE1TUl9QNF9DUlVfRVNDUjQs
IDAsIDApOworCX0gZWxzZSB7CisJCXdybXNyKE1TUl9QNF9DUlVfRVNDUjUsIDAsIDApOworCX0J
CQorCQorCS8qIHNldHVwIGFsbCBjb3VudGVycyAqLworCWZvciAoaSA9IDAgOyBpIDwgbnVtX2Nv
dW50ZXJzIDsgKytpKSB7CisJCWlmIChjb3VudGVyX2NvbmZpZ1tpXS5lbmFibGVkKSB7CisJCQly
ZXNldF92YWx1ZVtpXSA9IGNvdW50ZXJfY29uZmlnW2ldLmNvdW50OworCQkJcG1jX3NldHVwX29u
ZV9wNF9jb3VudGVyKGkpOworCQkJQ1RSX1dSSVRFKGNvdW50ZXJfY29uZmlnW2ldLmNvdW50LCBW
SVJUX0NUUihzdGFnLCBpKSk7CisJCX0gZWxzZSB7CisJCQlyZXNldF92YWx1ZVtpXSA9IDA7CisJ
CX0KKwl9Cit9CisKKworZXh0ZXJuIHZvaWQgcG1jX2xvZ19ldmVudChzdHJ1Y3QgZG9tYWluICpk
LCB1bnNpZ25lZCBpbnQgZWlwLCBpbnQgbW9kZSwgaW50IGV2ZW50KTsKK2V4dGVybiBpbnQgaXNf
cHJvZmlsZWQoc3RydWN0IGRvbWFpbiAqIGQpOworZXh0ZXJuIHN0cnVjdCBkb21haW4gKiBwcmlt
YXJ5X3Byb2ZpbGVyOworCitzdGF0aWMgaW50IHA0X2NoZWNrX2N0cnModW5zaWduZWQgaW50IGNv
bnN0IGNwdSwgCisJCQkgIHN0cnVjdCBvcF9tc3JzIGNvbnN0ICogY29uc3QgbXNycywKKwkJCSAg
c3RydWN0IHhlbl9yZWdzICogY29uc3QgcmVncykKK3sKKwl1bnNpZ25lZCBsb25nIGN0ciwgbG93
LCBoaWdoLCBzdGFnLCByZWFsOworCWludCBpLCBvdmYgPSAwOworCXVuc2lnbmVkIGxvbmcgZWlw
ID0gcmVncy0+ZWlwOworCWludCBtb2RlID0gMDsKKworCWlmIChSSU5HXzEocmVncykpCisJCW1v
ZGUgPSAxOworCWVsc2UgaWYgKFJJTkdfMChyZWdzKSkKKwkJbW9kZSA9IDI7CisKKwlzdGFnID0g
Z2V0X3N0YWdnZXIoKTsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fY291bnRlcnM7ICsraSkgewor
CQlpZiAoIXJlc2V0X3ZhbHVlW2ldKSAKKwkJCWNvbnRpbnVlOworCisJCS8qIAorCQkgKiB0aGVy
ZSBpcyBzb21lIGVjY2VudHJpY2l0eSBpbiB0aGUgaGFyZHdhcmUgd2hpY2gKKwkJICogcmVxdWly
ZXMgdGhhdCB3ZSBwZXJmb3JtIDIgZXh0cmEgY29ycmVjdGlvbnM6CisJCSAqCisJCSAqIC0gY2hl
Y2sgYm90aCB0aGUgQ0NDUjpPVkYgZmxhZyBmb3Igb3ZlcmZsb3cgYW5kIHRoZQorCQkgKiAgIGNv
dW50ZXIgaGlnaCBiaXQgZm9yIHVuLWZsYWdnZWQgb3ZlcmZsb3dzLgorCQkgKgorCQkgKiAtIHdy
aXRlIHRoZSBjb3VudGVyIGJhY2sgdHdpY2UgdG8gZW5zdXJlIGl0IGdldHMKKwkJICogICB1cGRh
dGVkIHByb3Blcmx5LgorCQkgKiAKKwkJICogdGhlIGZvcm1lciBzZWVtcyB0byBiZSByZWxhdGVk
IHRvIGV4dHJhIE5NSXMgaGFwcGVuaW5nCisJCSAqIGR1cmluZyB0aGUgY3VycmVudCBOTUk7IHRo
ZSBsYXR0ZXIgaXMgcmVwb3J0ZWQgYXMgZXJyYXRhCisJCSAqIE4xNSBpbiBpbnRlbCBkb2MgMjQ5
MTk5LTAyOSwgcGVudGl1bSA0IHNwZWNpZmljYXRpb24KKwkJICogdXBkYXRlLCB0aG91Z2ggdGhl
aXIgc3VnZ2VzdGVkIHdvcmstYXJvdW5kIGRvZXMgbm90CisJCSAqIGFwcGVhciB0byBzb2x2ZSB0
aGUgcHJvYmxlbS4KKwkJICovCisJCQorCQlyZWFsID0gVklSVF9DVFIoc3RhZywgaSk7CisKKwkJ
Q0NDUl9SRUFEKGxvdywgaGlnaCwgcmVhbCk7CisgCQlDVFJfUkVBRChjdHIsIGhpZ2gsIHJlYWwp
OworCQlpZiAoQ0NDUl9PVkZfUChsb3cpIHx8IENUUl9PVkVSRkxPV19QKGN0cikpIHsKKwkJCXBt
Y19sb2dfZXZlbnQoY3VycmVudCwgZWlwLCBtb2RlLCBpKTsKKyAJCQlDVFJfV1JJVEUocmVzZXRf
dmFsdWVbaV0sIHJlYWwpOworCQkJQ0NDUl9DTEVBUl9PVkYobG93KTsKKwkJCUNDQ1JfV1JJVEUo
bG93LCBoaWdoLCByZWFsKTsKKyAJCQlDVFJfV1JJVEUocmVzZXRfdmFsdWVbaV0sIHJlYWwpOwor
CQkJb3ZmID0gMTsKKwkJfQorCX0KKworCS8qIFA0IHF1aXJrOiB5b3UgaGF2ZSB0byByZS11bm1h
c2sgdGhlIGFwaWMgdmVjdG9yICovCisJYXBpY193cml0ZShBUElDX0xWVFBDLCBhcGljX3JlYWQo
QVBJQ19MVlRQQykgJiB+QVBJQ19MVlRfTUFTS0VEKTsKKworCS8qIFNlZSBvcF9tb2RlbF9wcHJv
LmMgKi8KKwlyZXR1cm4gb3ZmOworfQorCisKK3N0YXRpYyB2b2lkIHA0X3N0YXJ0KHN0cnVjdCBv
cF9tc3JzIGNvbnN0ICogY29uc3QgbXNycykKK3sKKwl1bnNpZ25lZCBpbnQgbG93LCBoaWdoLCBz
dGFnOworCWludCBpOworCisJc3RhZyA9IGdldF9zdGFnZ2VyKCk7CisKKwlmb3IgKGkgPSAwOyBp
IDwgbnVtX2NvdW50ZXJzOyArK2kpIHsKKwkJaWYgKCFyZXNldF92YWx1ZVtpXSkKKwkJCWNvbnRp
bnVlOworCQlDQ0NSX1JFQUQobG93LCBoaWdoLCBWSVJUX0NUUihzdGFnLCBpKSk7CisJCUNDQ1Jf
U0VUX0VOQUJMRShsb3cpOworCQlDQ0NSX1dSSVRFKGxvdywgaGlnaCwgVklSVF9DVFIoc3RhZywg
aSkpOworCX0KK30KKworCitzdGF0aWMgdm9pZCBwNF9zdG9wKHN0cnVjdCBvcF9tc3JzIGNvbnN0
ICogY29uc3QgbXNycykKK3sKKwl1bnNpZ25lZCBpbnQgbG93LCBoaWdoLCBzdGFnOworCWludCBp
OworCisJc3RhZyA9IGdldF9zdGFnZ2VyKCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2NvdW50
ZXJzOyArK2kpIHsKKwkJQ0NDUl9SRUFEKGxvdywgaGlnaCwgVklSVF9DVFIoc3RhZywgaSkpOwor
CQlDQ0NSX1NFVF9ESVNBQkxFKGxvdyk7CisJCUNDQ1JfV1JJVEUobG93LCBoaWdoLCBWSVJUX0NU
UihzdGFnLCBpKSk7CisJfQorfQorCisKKyNpZmRlZiBDT05GSUdfU01QCitzdHJ1Y3Qgb3BfeDg2
X21vZGVsX3NwZWMgY29uc3Qgb3BfcDRfaHQyX3NwZWMgPSB7CisJLm51bV9jb3VudGVycyA9IE5V
TV9DT1VOVEVSU19IVDIsCisJLm51bV9jb250cm9scyA9IE5VTV9DT05UUk9MU19IVDIsCisJLmZp
bGxfaW5fYWRkcmVzc2VzID0gJnA0X2ZpbGxfaW5fYWRkcmVzc2VzLAorCS5zZXR1cF9jdHJzID0g
JnA0X3NldHVwX2N0cnMsCisJLmNoZWNrX2N0cnMgPSAmcDRfY2hlY2tfY3RycywKKwkuc3RhcnQg
PSAmcDRfc3RhcnQsCisJLnN0b3AgPSAmcDRfc3RvcAorfTsKKyNlbmRpZgorCitzdHJ1Y3Qgb3Bf
eDg2X21vZGVsX3NwZWMgY29uc3Qgb3BfcDRfc3BlYyA9IHsKKwkubnVtX2NvdW50ZXJzID0gTlVN
X0NPVU5URVJTX05PTl9IVCwKKwkubnVtX2NvbnRyb2xzID0gTlVNX0NPTlRST0xTX05PTl9IVCwK
KwkuZmlsbF9pbl9hZGRyZXNzZXMgPSAmcDRfZmlsbF9pbl9hZGRyZXNzZXMsCisJLnNldHVwX2N0
cnMgPSAmcDRfc2V0dXBfY3RycywKKwkuY2hlY2tfY3RycyA9ICZwNF9jaGVja19jdHJzLAorCS5z
dGFydCA9ICZwNF9zdGFydCwKKwkuc3RvcCA9ICZwNF9zdG9wCit9OwpkaWZmIC1QTmF1ciB4ZW4t
Mi4wLjUveGVuL2FyY2gveDg2L29wcm9maWxlL29wX21vZGVsX3Bwcm8uYyB4ZW4tMi4wLjUtcHJv
Zi94ZW4vYXJjaC94ODYvb3Byb2ZpbGUvb3BfbW9kZWxfcHByby5jCi0tLSB4ZW4tMi4wLjUveGVu
L2FyY2gveDg2L29wcm9maWxlL29wX21vZGVsX3Bwcm8uYwkxOTY5LTEyLTMxIDE2OjAwOjAwLjAw
MDAwMDAwMCAtMDgwMAorKysgeGVuLTIuMC41LXByb2YveGVuL2FyY2gveDg2L29wcm9maWxlL29w
X21vZGVsX3Bwcm8uYwkyMDA1LTA0LTA2IDA5OjI3OjEzLjAwMDAwMDAwMCAtMDcwMApAQCAtMCww
ICsxLDE2NiBAQAorLyoqCisgKiBAZmlsZSBvcF9tb2RlbF9wcHJvLmgKKyAqIHBlbnRpdW0gcHJv
IC8gUDYgbW9kZWwtc3BlY2lmaWMgTVNSIG9wZXJhdGlvbnMKKyAqCisgKiBAcmVtYXJrIENvcHly
aWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZ
SU5HCisgKgorICogQGF1dGhvciBKb2huIExldm9uCisgKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUK
KyAqIEBhdXRob3IgR3JheWRvbiBIb2FyZQorICoKKyAqIE1vZGlmaWVkIGJ5IEFyYXZpbmQgTWVu
b24gZm9yIFhlbgorICogVGhlc2UgbW9kaWZpY2F0aW9ucyBhcmU6CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDUgSGV3bGV0dC1QYWNrYXJkIENvLgorICovCisKKyNpbmNsdWRlIDx4ZW4vdHlwZXMuaD4K
KyNpbmNsdWRlIDxhc20vbXNyLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNt
L2FwaWMuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8eGVuL3NjaGVk
Lmg+CisgCisjaW5jbHVkZSAib3BfeDg2X21vZGVsLmgiCisjaW5jbHVkZSAib3BfY291bnRlci5o
IgorCisjZGVmaW5lIE5VTV9DT1VOVEVSUyAyCisjZGVmaW5lIE5VTV9DT05UUk9MUyAyCisKKyNk
ZWZpbmUgQ1RSX1JFQUQobCxoLG1zcnMsYykgZG8ge3JkbXNyKG1zcnMtPmNvdW50ZXJzWyhjKV0u
YWRkciwgKGwpLCAoaCkpO30gd2hpbGUgKDApCisjZGVmaW5lIENUUl9XUklURShsLG1zcnMsYykg
ZG8ge3dybXNyKG1zcnMtPmNvdW50ZXJzWyhjKV0uYWRkciwgLSh1MzIpKGwpLCAtMSk7fSB3aGls
ZSAoMCkKKyNkZWZpbmUgQ1RSX09WRVJGTE9XRUQobikgKCEoKG4pICYgKDFVPDwzMSkpKQorCisj
ZGVmaW5lIENUUkxfUkVBRChsLGgsbXNycyxjKSBkbyB7cmRtc3IoKG1zcnMtPmNvbnRyb2xzWyhj
KV0uYWRkciksIChsKSwgKGgpKTt9IHdoaWxlICgwKQorI2RlZmluZSBDVFJMX1dSSVRFKGwsaCxt
c3JzLGMpIGRvIHt3cm1zcigobXNycy0+Y29udHJvbHNbKGMpXS5hZGRyKSwgKGwpLCAoaCkpO30g
d2hpbGUgKDApCisjZGVmaW5lIENUUkxfU0VUX0FDVElWRShuKSAobiB8PSAoMTw8MjIpKQorI2Rl
ZmluZSBDVFJMX1NFVF9JTkFDVElWRShuKSAobiAmPSB+KDE8PDIyKSkKKyNkZWZpbmUgQ1RSTF9D
TEVBUih4KSAoeCAmPSAoMTw8MjEpKQorI2RlZmluZSBDVFJMX1NFVF9FTkFCTEUodmFsKSAodmFs
IHw9IDE8PDIwKQorI2RlZmluZSBDVFJMX1NFVF9VU1IodmFsLHUpICh2YWwgfD0gKCh1ICYgMSkg
PDwgMTYpKQorI2RlZmluZSBDVFJMX1NFVF9LRVJOKHZhbCxrKSAodmFsIHw9ICgoayAmIDEpIDw8
IDE3KSkKKyNkZWZpbmUgQ1RSTF9TRVRfVU0odmFsLCBtKSAodmFsIHw9IChtIDw8IDgpKQorI2Rl
ZmluZSBDVFJMX1NFVF9FVkVOVCh2YWwsIGUpICh2YWwgfD0gZSkKKworc3RhdGljIHVuc2lnbmVk
IGxvbmcgcmVzZXRfdmFsdWVbTlVNX0NPVU5URVJTXTsKKyAKK3N0YXRpYyB2b2lkIHBwcm9fZmls
bF9pbl9hZGRyZXNzZXMoc3RydWN0IG9wX21zcnMgKiBjb25zdCBtc3JzKQoreworCW1zcnMtPmNv
dW50ZXJzWzBdLmFkZHIgPSBNU1JfUDZfUEVSRkNUUjA7CisJbXNycy0+Y291bnRlcnNbMV0uYWRk
ciA9IE1TUl9QNl9QRVJGQ1RSMTsKKwkKKwltc3JzLT5jb250cm9sc1swXS5hZGRyID0gTVNSX1A2
X0VWTlRTRUwwOworCW1zcnMtPmNvbnRyb2xzWzFdLmFkZHIgPSBNU1JfUDZfRVZOVFNFTDE7Cit9
CisKKworc3RhdGljIHZvaWQgcHByb19zZXR1cF9jdHJzKHN0cnVjdCBvcF9tc3JzIGNvbnN0ICog
Y29uc3QgbXNycykKK3sKKwl1bnNpZ25lZCBpbnQgbG93LCBoaWdoOworCWludCBpOworCisJLyog
Y2xlYXIgYWxsIGNvdW50ZXJzICovCisJZm9yIChpID0gMCA7IGkgPCBOVU1fQ09OVFJPTFM7ICsr
aSkgeworCQlDVFJMX1JFQUQobG93LCBoaWdoLCBtc3JzLCBpKTsKKwkJQ1RSTF9DTEVBUihsb3cp
OworCQlDVFJMX1dSSVRFKGxvdywgaGlnaCwgbXNycywgaSk7CisJfQorCQorCS8qIGF2b2lkIGEg
ZmFsc2UgZGV0ZWN0aW9uIG9mIGN0ciBvdmVyZmxvd3MgaW4gTk1JIGhhbmRsZXIgKi8KKwlmb3Ig
KGkgPSAwOyBpIDwgTlVNX0NPVU5URVJTOyArK2kpIHsKKwkJQ1RSX1dSSVRFKDEsIG1zcnMsIGkp
OworCX0KKworCS8qIGVuYWJsZSBhY3RpdmUgY291bnRlcnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwg
TlVNX0NPVU5URVJTOyArK2kpIHsKKwkJaWYgKGNvdW50ZXJfY29uZmlnW2ldLmVuYWJsZWQpIHsK
KwkJCXJlc2V0X3ZhbHVlW2ldID0gY291bnRlcl9jb25maWdbaV0uY291bnQ7CisKKwkJCUNUUl9X
UklURShjb3VudGVyX2NvbmZpZ1tpXS5jb3VudCwgbXNycywgaSk7CisKKwkJCUNUUkxfUkVBRChs
b3csIGhpZ2gsIG1zcnMsIGkpOworCQkJQ1RSTF9DTEVBUihsb3cpOworCQkJQ1RSTF9TRVRfRU5B
QkxFKGxvdyk7CisJCQlDVFJMX1NFVF9VU1IobG93LCBjb3VudGVyX2NvbmZpZ1tpXS51c2VyKTsK
KwkJCUNUUkxfU0VUX0tFUk4obG93LCBjb3VudGVyX2NvbmZpZ1tpXS5rZXJuZWwpOworCQkJQ1RS
TF9TRVRfVU0obG93LCBjb3VudGVyX2NvbmZpZ1tpXS51bml0X21hc2spOworCQkJQ1RSTF9TRVRf
RVZFTlQobG93LCBjb3VudGVyX2NvbmZpZ1tpXS5ldmVudCk7CisJCQlDVFJMX1dSSVRFKGxvdywg
aGlnaCwgbXNycywgaSk7CisJCX0KKwl9Cit9CisKK2V4dGVybiB2b2lkIHBtY19sb2dfZXZlbnQo
c3RydWN0IGRvbWFpbiAqZCwgdW5zaWduZWQgaW50IGVpcCwgaW50IG1vZGUsIGludCBldmVudCk7
CitleHRlcm4gaW50IGlzX3Byb2ZpbGVkKHN0cnVjdCBkb21haW4gKiBkKTsKK2V4dGVybiBzdHJ1
Y3QgZG9tYWluICogcHJpbWFyeV9wcm9maWxlcjsKKworc3RhdGljIGludCBwcHJvX2NoZWNrX2N0
cnModW5zaWduZWQgaW50IGNvbnN0IGNwdSwgCisJCQkgICAgc3RydWN0IG9wX21zcnMgY29uc3Qg
KiBjb25zdCBtc3JzLAorCQkJICAgIHN0cnVjdCB4ZW5fcmVncyAqIGNvbnN0IHJlZ3MpCit7CisJ
dW5zaWduZWQgaW50IGxvdywgaGlnaDsKKwlpbnQgaSwgb3ZmID0gMDsKKwl1bnNpZ25lZCBsb25n
IGVpcCA9IHJlZ3MtPmVpcDsKKwlpbnQgbW9kZSA9IDA7CisKKwlpZiAoUklOR18xKHJlZ3MpKSAK
KwkJbW9kZSA9IDE7CisJZWxzZSBpZiAoUklOR18wKHJlZ3MpKQorCQltb2RlID0gMjsKKworCWZv
ciAoaSA9IDAgOyBpIDwgTlVNX0NPVU5URVJTOyArK2kpIHsKKwkJQ1RSX1JFQUQobG93LCBoaWdo
LCBtc3JzLCBpKTsKKwkJaWYgKENUUl9PVkVSRkxPV0VEKGxvdykpIHsKKwkJCXBtY19sb2dfZXZl
bnQoY3VycmVudCwgZWlwLCBtb2RlLCBpKTsKKwkJCUNUUl9XUklURShyZXNldF92YWx1ZVtpXSwg
bXNycywgaSk7CisJCQlvdmYgPSAxOworCQl9CisJfQorCisJLyogT25seSBQNiBiYXNlZCBQZW50
aXVtIE0gbmVlZCB0byByZS11bm1hc2sgdGhlIGFwaWMgdmVjdG9yIGJ1dCBpdAorCSAqIGRvZXNu
J3QgaHVydCBvdGhlciBQNiB2YXJpYW50ICovCisJYXBpY193cml0ZShBUElDX0xWVFBDLCBhcGlj
X3JlYWQoQVBJQ19MVlRQQykgJiB+QVBJQ19MVlRfTUFTS0VEKTsKKworCS8qIFdlIGNhbid0IHdv
cmsgb3V0IGlmIHdlIHJlYWxseSBoYW5kbGVkIGFuIGludGVycnVwdC4gV2UKKwkgKiBtaWdodCBo
YXZlIGNhdWdodCBhICpzZWNvbmQqIGNvdW50ZXIganVzdCBhZnRlciBvdmVyZmxvd2luZworCSAq
IHRoZSBpbnRlcnJ1cHQgZm9yIHRoaXMgY291bnRlciB0aGVuIGFycml2ZXMKKwkgKiBhbmQgd2Ug
ZG9uJ3QgZmluZCBhIGNvdW50ZXIgdGhhdCdzIG92ZXJmbG93ZWQsIHNvIHdlCisJICogd291bGQg
cmV0dXJuIDAgYW5kIGdldCBkYXplZCArIGNvbmZ1c2VkLiBJbnN0ZWFkIHdlIGFsd2F5cworCSAq
IGFzc3VtZSB3ZSBmb3VuZCBhbiBvdmVyZmxvdy4gVGhpcyBzdWNrcy4KKwkgKi8KKwlyZXR1cm4g
b3ZmOworfQorCisgCitzdGF0aWMgdm9pZCBwcHJvX3N0YXJ0KHN0cnVjdCBvcF9tc3JzIGNvbnN0
ICogY29uc3QgbXNycykKK3sKKwl1bnNpZ25lZCBpbnQgbG93LGhpZ2g7CisJQ1RSTF9SRUFEKGxv
dywgaGlnaCwgbXNycywgMCk7CisJQ1RSTF9TRVRfQUNUSVZFKGxvdyk7CisJQ1RSTF9XUklURShs
b3csIGhpZ2gsIG1zcnMsIDApOworfQorCitzdGF0aWMgdm9pZCBwcHJvX3N0b3Aoc3RydWN0IG9w
X21zcnMgY29uc3QgKiBjb25zdCBtc3JzKQoreworCXVuc2lnbmVkIGludCBsb3csaGlnaDsKKwlD
VFJMX1JFQUQobG93LCBoaWdoLCBtc3JzLCAwKTsKKwlDVFJMX1NFVF9JTkFDVElWRShsb3cpOwor
CUNUUkxfV1JJVEUobG93LCBoaWdoLCBtc3JzLCAwKTsKK30KKwordW5zaWduZWQgaW50IHJlYWRf
Y3RyKHN0cnVjdCBvcF9tc3JzIGNvbnN0ICogY29uc3QgbXNycywgaW50IGkpCit7CisJdW5zaWdu
ZWQgaW50IGxvdywgaGlnaDsKKwlDVFJfUkVBRChsb3csIGhpZ2gsIG1zcnMsIGkpOworCXJldHVy
biBsb3c7Cit9CisKK3N0cnVjdCBvcF94ODZfbW9kZWxfc3BlYyBjb25zdCBvcF9wcHJvX3NwZWMg
PSB7CisJLm51bV9jb3VudGVycyA9IE5VTV9DT1VOVEVSUywKKwkubnVtX2NvbnRyb2xzID0gTlVN
X0NPTlRST0xTLAorCS5maWxsX2luX2FkZHJlc3NlcyA9ICZwcHJvX2ZpbGxfaW5fYWRkcmVzc2Vz
LAorCS5zZXR1cF9jdHJzID0gJnBwcm9fc2V0dXBfY3RycywKKwkuY2hlY2tfY3RycyA9ICZwcHJv
X2NoZWNrX2N0cnMsCisJLnN0YXJ0ID0gJnBwcm9fc3RhcnQsCisJLnN0b3AgPSAmcHByb19zdG9w
Cit9OwpkaWZmIC1QTmF1ciB4ZW4tMi4wLjUveGVuL2FyY2gveDg2L29wcm9maWxlL29wX3g4Nl9t
b2RlbC5oIHhlbi0yLjAuNS1wcm9mL3hlbi9hcmNoL3g4Ni9vcHJvZmlsZS9vcF94ODZfbW9kZWwu
aAotLS0geGVuLTIuMC41L3hlbi9hcmNoL3g4Ni9vcHJvZmlsZS9vcF94ODZfbW9kZWwuaAkxOTY5
LTEyLTMxIDE2OjAwOjAwLjAwMDAwMDAwMCAtMDgwMAorKysgeGVuLTIuMC41LXByb2YveGVuL2Fy
Y2gveDg2L29wcm9maWxlL29wX3g4Nl9tb2RlbC5oCTIwMDUtMDQtMDYgMDk6Mjc6MTMuMDAwMDAw
MDAwIC0wNzAwCkBAIC0wLDAgKzEsNTUgQEAKKy8qKgorICogQGZpbGUgb3BfeDg2X21vZGVsLmgK
KyAqIGludGVyZmFjZSB0byB4ODYgbW9kZWwtc3BlY2lmaWMgTVNSIG9wZXJhdGlvbnMKKyAqCisg
KiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVh
ZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBHcmF5ZG9uIEhvYXJlCisgKgorICog
TW9kaWZpZWQgYnkgQXJhdmluZCBNZW5vbiBmb3IgWGVuCisgKiBUaGVzZSBtb2RpZmljYXRpb25z
IGFyZToKKyAqIENvcHlyaWdodCAoQykgMjAwNSBIZXdsZXR0LVBhY2thcmQgQ28uCisgKi8KKwor
I2lmbmRlZiBPUF9YODZfTU9ERUxfSAorI2RlZmluZSBPUF9YODZfTU9ERUxfSAorCitzdHJ1Y3Qg
b3Bfc2F2ZWRfbXNyIHsKKwl1bnNpZ25lZCBpbnQgaGlnaDsKKwl1bnNpZ25lZCBpbnQgbG93Owor
fTsKKworc3RydWN0IG9wX21zciB7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCXN0cnVjdCBvcF9z
YXZlZF9tc3Igc2F2ZWQ7Cit9OworCitzdHJ1Y3Qgb3BfbXNycyB7CisJc3RydWN0IG9wX21zciAq
IGNvdW50ZXJzOworCXN0cnVjdCBvcF9tc3IgKiBjb250cm9sczsKK307CisKK3N0cnVjdCBwdF9y
ZWdzOworCisvKiBUaGUgbW9kZWwgdnRhYmxlIGFic3RyYWN0cyB0aGUgZGlmZmVyZW5jZXMgYmV0
d2VlbgorICogdmFyaW91cyB4ODYgQ1BVIG1vZGVsJ3MgcGVyZmN0ciBzdXBwb3J0LgorICovCitz
dHJ1Y3Qgb3BfeDg2X21vZGVsX3NwZWMgeworCXVuc2lnbmVkIGludCBjb25zdCBudW1fY291bnRl
cnM7CisJdW5zaWduZWQgaW50IGNvbnN0IG51bV9jb250cm9sczsKKwl2b2lkICgqZmlsbF9pbl9h
ZGRyZXNzZXMpKHN0cnVjdCBvcF9tc3JzICogY29uc3QgbXNycyk7CisJdm9pZCAoKnNldHVwX2N0
cnMpKHN0cnVjdCBvcF9tc3JzIGNvbnN0ICogY29uc3QgbXNycyk7CisJaW50ICgqY2hlY2tfY3Ry
cykodW5zaWduZWQgaW50IGNvbnN0IGNwdSwgCisJCXN0cnVjdCBvcF9tc3JzIGNvbnN0ICogY29u
c3QgbXNycywKKwkJc3RydWN0IHhlbl9yZWdzICogY29uc3QgcmVncyk7CisJdm9pZCAoKnN0YXJ0
KShzdHJ1Y3Qgb3BfbXNycyBjb25zdCAqIGNvbnN0IG1zcnMpOworCXZvaWQgKCpzdG9wKShzdHJ1
Y3Qgb3BfbXNycyBjb25zdCAqIGNvbnN0IG1zcnMpOworfTsKKworZXh0ZXJuIHN0cnVjdCBvcF94
ODZfbW9kZWxfc3BlYyBjb25zdCBvcF9wcHJvX3NwZWM7CitleHRlcm4gc3RydWN0IG9wX3g4Nl9t
b2RlbF9zcGVjIGNvbnN0IG9wX3A0X3NwZWM7CitleHRlcm4gc3RydWN0IG9wX3g4Nl9tb2RlbF9z
cGVjIGNvbnN0IG9wX3A0X2h0Ml9zcGVjOworZXh0ZXJuIHN0cnVjdCBvcF94ODZfbW9kZWxfc3Bl
YyBjb25zdCBvcF9hdGhsb25fc3BlYzsKKworI2VuZGlmIC8qIE9QX1g4Nl9NT0RFTF9IICovCmRp
ZmYgLVBOYXVyIHhlbi0yLjAuNS94ZW4vYXJjaC94ODYvb3Byb2ZpbGUvcG1jLmMgeGVuLTIuMC41
LXByb2YveGVuL2FyY2gveDg2L29wcm9maWxlL3BtYy5jCi0tLSB4ZW4tMi4wLjUveGVuL2FyY2gv
eDg2L29wcm9maWxlL3BtYy5jCTE5NjktMTItMzEgMTY6MDA6MDAuMDAwMDAwMDAwIC0wODAwCisr
KyB4ZW4tMi4wLjUtcHJvZi94ZW4vYXJjaC94ODYvb3Byb2ZpbGUvcG1jLmMJMjAwNS0wNC0wNiAw
OToyNzoxMy4wMDAwMDAwMDAgLTA3MDAKQEAgLTAsMCArMSwyODEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDUgSGV3bGV0dC1QYWNrYXJkIENvLgorICogd3JpdHRlbiBieSBBcmF2aW5kIE1l
bm9uLCBlbWFpbDogeGVub3Byb2ZAZ3JvdXBzLmhwLmNvbQorICovCisKKyNpbmNsdWRlIDx4ZW4v
c2NoZWQuaD4KKworI2luY2x1ZGUgIm9wX2NvdW50ZXIuaCIKKworaW50IGFjdGl2ZV9kb21haW5z
W01BWF9PUFJPRl9ET01BSU5TXTsKK2ludCBwYXNzaXZlX2RvbWFpbnNbTUFYX09QUk9GX0RPTUFJ
TlNdOwordW5zaWduZWQgaW50IGFkb21haW5zID0gMDsKK3Vuc2lnbmVkIGludCBwZG9tYWlucyA9
IDA7Cit1bnNpZ25lZCBpbnQgYWN0aXZhdGVkID0gMDsKKworI2RlZmluZSBWSVJRX0JJVE1BU0tf
U0laRQkoTUFYX09QUk9GX0RPTUFJTlMvMzIgKyAxKQorCitzdHJ1Y3QgZG9tYWluICogcHJpbWFy
eV9wcm9maWxlciA9IE5VTEw7CitzdHJ1Y3QgZG9tYWluICogYWRvbWFpbl9wdHJzW01BWF9PUFJP
Rl9ET01BSU5TXTsKK3Vuc2lnbmVkIGludCB2aXJxX292Zl9wZW5kaW5nW1ZJUlFfQklUTUFTS19T
SVpFXTsKKworaW50IGlzX2FjdGl2ZShzdHJ1Y3QgZG9tYWluICpkKSAKK3sKKwlpbnQgaTsKKwlm
b3IgKGkgPSAwOyBpIDwgYWRvbWFpbnM7IGkrKykKKwkJaWYgKGQtPmlkID09IGFjdGl2ZV9kb21h
aW5zW2ldKQorCQkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKK2ludCBhY3RpdmVfaWQoc3Ry
dWN0IGRvbWFpbiAqZCkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgYWRvbWFpbnM7IGkr
KykKKwkJaWYgKGQgPT0gYWRvbWFpbl9wdHJzW2ldKQorCQkJcmV0dXJuIGk7CisJcmV0dXJuIC0x
OworfQorCit2b2lkIGZyZWVfYWRvbWFpbl9wdHJzKCkgCit7CisJaW50IGk7CisJaW50IG51bSA9
IGFkb21haW5zOworCisJYWRvbWFpbnMgPSAwOworCWZvciAoaSA9IDA7IGkgPCBWSVJRX0JJVE1B
U0tfU0laRTsgaSsrKQorCQl2aXJxX292Zl9wZW5kaW5nW2ldID0gMDsKKworCWZvciAoaSA9IDA7
IGkgPCBudW07IGkrKykgeworCQlwdXRfZG9tYWluKGFkb21haW5fcHRyc1tpXSk7CisJCWFkb21h
aW5fcHRyc1tpXSA9IE5VTEw7CisJfQorfQorCitpbnQgc2V0X2Fkb21haW5fcHRycyhpbnQgbnVt
KQoreworCWludCBpOworCXN0cnVjdCBkb21haW4gKmQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgVklS
UV9CSVRNQVNLX1NJWkU7IGkrKykKKwkJdmlycV9vdmZfcGVuZGluZ1tpXSA9IDA7CisKKwlmb3Ig
KGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKKwkJZCA9IGZpbmRfZG9tYWluX2J5X2lkKGFjdGl2ZV9k
b21haW5zW2ldKTsKKwkJaWYgKCFkKSB7CisJCQlmcmVlX2Fkb21haW5fcHRycygpOworCQkJcmV0
dXJuIC1FRkFVTFQ7CisJCX0KKwkJYWRvbWFpbl9wdHJzW2ldID0gZDsKKwkJYWRvbWFpbnMrKzsK
Kwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCBzZXRfYWN0aXZlKHN0cnVjdCBkb21haW4gKmQpCit7
CisJaWYgKGlzX2FjdGl2ZShkKSkKKwkJcmV0dXJuIDA7CisJLyogaGFjayBpZiB3ZSBydW4gb3V0
IG9mIHNwYWNlICovCisJaWYgKGFkb21haW5zID49IE1BWF9PUFJPRl9ET01BSU5TKSB7CisJCWFk
b21haW5zLS07CisJCXB1dF9kb21haW4oYWRvbWFpbl9wdHJzW2Fkb21haW5zXSk7CisJfQorCWFj
dGl2ZV9kb21haW5zW2Fkb21haW5zXSA9IGQtPmlkOworCWlmIChnZXRfZG9tYWluKGQpKQorCQlh
ZG9tYWluX3B0cnNbYWRvbWFpbnMrK10gPSBkOworCWVsc2UgeworCQlmcmVlX2Fkb21haW5fcHRy
cygpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCBpc19wYXNz
aXZlKHN0cnVjdCBkb21haW4gKmQpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IHBkb21h
aW5zOyBpKyspCisJCWlmIChkLT5pZCA9PSBwYXNzaXZlX2RvbWFpbnNbaV0pCisJCQlyZXR1cm4g
MTsKKwlyZXR1cm4gMDsKK30KKworaW50IGlzX3Byb2ZpbGVkKHN0cnVjdCBkb21haW4gKmQpCit7
CisJaWYgKGlzX2FjdGl2ZShkKSB8fCBpc19wYXNzaXZlKGQpKQorCQlyZXR1cm4gMTsKKwlyZXR1
cm4gMDsKK30KKwordm9pZCBwbWNfbG9nX2V2ZW50KHN0cnVjdCBkb21haW4gKmQsIHVuc2lnbmVk
IGludCBlaXAsIGludCBtb2RlLCBpbnQgZXZlbnQpIAoreworCXNoYXJlZF9pbmZvX3QgKnMgPSBO
VUxMOworCXN0cnVjdCBkb21haW4gKmRlc3QgPSBkOworCWludCBoZWFkID0gMDsKKworCWlmICgh
aXNfcHJvZmlsZWQoZCkpCisJCXJldHVybjsKKworCWlmIChpc19wYXNzaXZlKGQpKSB7CisJCWRl
c3QgPSBwcmltYXJ5X3Byb2ZpbGVyOworCQlnb3RvIGxvZ19wYXNzaXZlOworCX0KKwkJCitsb2df
YWN0aXZlOgorCXMgPSBkZXN0LT5zaGFyZWRfaW5mbzsKKworCWhlYWQgPSBzLT5ldmVudF9oZWFk
OworCWlmIChoZWFkID49IE1BWF9PUFJPRl9FVkVOVFMpCisJCWhlYWQgPSAwOworCisJaWYgKHMt
Pmxvc2luZ19zYW1wbGVzKQorCQlzLT5zYW1wbGVzX2xvc3QrKzsKKwlpZiAoaGVhZCA9PSBzLT5l
dmVudF90YWlsIC0gMSB8fCAoaGVhZCA9PSBNQVhfT1BST0ZfRVZFTlRTIC0gMSAmJiBzLT5ldmVu
dF90YWlsID09IDApKQorCQlzLT5sb3Npbmdfc2FtcGxlcyA9IDE7CisKKwlzLT5ldmVudF9sb2db
aGVhZF0uZWlwID0gZWlwOworCXMtPmV2ZW50X2xvZ1toZWFkXS5tb2RlID0gbW9kZTsKKwlzLT5l
dmVudF9sb2dbaGVhZF0uZXZlbnQgPSBldmVudDsKKwloZWFkKys7CisJcy0+ZXZlbnRfaGVhZCA9
IGhlYWQ7CisJcmV0dXJuOworCitsb2dfcGFzc2l2ZToKKwkvKiBXZSB1c2UgdGhlIGZvbGxvd2lu
ZyBpbmVmZmljaWVudCBmb3JtYXQgZm9yIGxvZ2dpbmcgZXZlbnRzIGZyb20gb3RoZXIKKwkJZG9t
YWlucy4gV2UgcHV0IGEgc3BlY2lhbCByZWNvcmQgaW5kaWNhdGluZyB0aGF0IHRoZSBuZXh0IHJl
Y29yZCBpcworCQlmb3IgYW5vdGhlciBkb21haW4uIFRoaXMgaXMgZG9uZSBmb3IgZWFjaCBzYW1w
bGUgZnJvbSBhbm90aGVyCisJCWRvbWFpbiAqLyAKKwlzID0gZGVzdC0+c2hhcmVkX2luZm87CisK
KwloZWFkID0gcy0+ZXZlbnRfaGVhZDsKKwlpZiAoaGVhZCA+PSBNQVhfT1BST0ZfRVZFTlRTKQor
CQloZWFkID0gMDsKKworCWlmIChzLT5sb3Npbmdfc2FtcGxlcykKKwkJcy0+c2FtcGxlc19sb3N0
Kys7CisJaWYgKGhlYWQgPT0gcy0+ZXZlbnRfdGFpbCAtIDEgfHwgKGhlYWQgPT0gTUFYX09QUk9G
X0VWRU5UUyAtIDEgJiYgcy0+ZXZlbnRfdGFpbCA9PSAwKSkKKwkJcy0+bG9zaW5nX3NhbXBsZXMg
PSAxOworCisJcy0+ZXZlbnRfbG9nW2hlYWRdLmVpcCA9IH4xVUw7CisJcy0+ZXZlbnRfbG9nW2hl
YWRdLm1vZGUgPSB+MDsKKwlzLT5ldmVudF9sb2dbaGVhZF0uZXZlbnQgPSBkLT5pZDsKKwloZWFk
Kys7CisJcy0+ZXZlbnRfaGVhZCA9IGhlYWQ7CisJZ290byBsb2dfYWN0aXZlOworfQorCitzdGF0
aWMgdm9pZCBwbWNfZXZlbnRfaW5pdChzdHJ1Y3QgZG9tYWluICpkKQoreworCXNoYXJlZF9pbmZv
X3QgKnMgPSBkLT5zaGFyZWRfaW5mbzsKKwlzLT5ldmVudF9oZWFkID0gMDsKKwlzLT5ldmVudF90
YWlsID0gMDsKKwlzLT5sb3Npbmdfc2FtcGxlcyA9IDA7CisJcy0+c2FtcGxlc19sb3N0ID0gMDsK
KwlzLT5ubWlfcmVzdGFydHMgPSAwOworCXMtPmFjdGl2ZV9zYW1wbGVzID0gMDsKKwlzLT5wYXNz
aXZlX3NhbXBsZXMgPSAwOworCXMtPm90aGVyX3NhbXBsZXMgPSAwOworfQorCitleHRlcm4gaW50
IG5taV9pbml0KGludCAqbnVtX2V2ZW50cywgaW50ICppc19wcmltYXJ5KTsKK2V4dGVybiBpbnQg
bm1pX3Jlc2VydmVfY291bnRlcnModm9pZCk7CitleHRlcm4gaW50IG5taV9zZXR1cF9ldmVudHMo
dm9pZCk7CitleHRlcm4gaW50IG5taV9lbmFibGVfdmlycSh2b2lkKTsKK2V4dGVybiBpbnQgbm1p
X3N0YXJ0KHZvaWQpOworZXh0ZXJuIHZvaWQgbm1pX3N0b3Aodm9pZCk7CitleHRlcm4gdm9pZCBu
bWlfZGlzYWJsZV92aXJxKHZvaWQpOworZXh0ZXJuIHZvaWQgbm1pX3JlbGVhc2VfY291bnRlcnMo
dm9pZCk7CisKKyNkZWZpbmUgUFJJVl9PUChvcCkJKChvcCA9PSBQTUNfU0VUX0FDVElWRSkgfHwg
KG9wID09IFBNQ19TRVRfUEFTU0lWRSkgfHwgKG9wID09IFBNQ19SRVNFUlZFX0NPVU5URVJTKSBc
CisJCQl8fCAob3AgPT0gUE1DX1NFVFVQX0VWRU5UUykgfHwgKG9wID09IFBNQ19TVEFSVCkgfHwg
KG9wID09IFBNQ19TVE9QKSBcCisJCQl8fCAob3AgPT0gUE1DX1JFTEVBU0VfQ09VTlRFUlMpIHx8
IChvcCA9PSBQTUNfU0hVVERPV04pKQorCitpbnQgZG9fcG1jX29wKGludCBvcCwgdW5zaWduZWQg
aW50IGFyZzEsIHVuc2lnbmVkIGludCBhcmcyKQoreworCWludCByZXQgPSAwOworCisJaWYgKFBS
SVZfT1Aob3ApICYmIGN1cnJlbnQgIT0gcHJpbWFyeV9wcm9maWxlcikKKwkJcmV0dXJuIC1FUEVS
TTsKKworCXN3aXRjaCAob3ApIHsKKwkJY2FzZSBQTUNfSU5JVDoKKwkJCXJldCA9IG5taV9pbml0
KChpbnQgKilhcmcxLCAoaW50ICopYXJnMik7CisJCQlicmVhazsKKworCQljYXNlIFBNQ19TRVRf
QUNUSVZFOgorCQkJaWYgKGFkb21haW5zICE9IDApCisJCQkJcmV0dXJuIC1FUEVSTTsKKwkJCWlm
IChjb3B5X2Zyb21fdXNlcigodm9pZCAqKSZhY3RpdmVfZG9tYWlucywKKwkJCQkodm9pZCAqKWFy
ZzEsIGFyZzIqc2l6ZW9mKGludCkpKQorCQkJCXJldHVybiAtRUZBVUxUOworCQkJaWYgKHNldF9h
ZG9tYWluX3B0cnMoYXJnMikpCisJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQlpZiAoc2V0X2FjdGl2
ZShjdXJyZW50KSkKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCWJyZWFrOworCisJCWNhc2UgUE1D
X1NFVF9QQVNTSVZFOgorCQkJaWYgKHBkb21haW5zICE9IDApCisJCQkJcmV0dXJuIC1FUEVSTTsK
KwkJCWlmIChjb3B5X2Zyb21fdXNlcigodm9pZCAqKSZwYXNzaXZlX2RvbWFpbnMsCisJCQkJKHZv
aWQgKilhcmcxLCBhcmcyKnNpemVvZihpbnQpKSkKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCXBk
b21haW5zID0gYXJnMjsKKwkJCWJyZWFrOworCisJCWNhc2UgUE1DX1JFU0VSVkVfQ09VTlRFUlM6
CisJCQlyZXQgPSBubWlfcmVzZXJ2ZV9jb3VudGVycygpOworCQkJYnJlYWs7CisKKwkJY2FzZSBQ
TUNfU0VUVVBfRVZFTlRTOgorCQkJaWYgKGNvcHlfZnJvbV91c2VyKCh2b2lkICopJmNvdW50ZXJf
Y29uZmlnLCAKKwkJCQkodm9pZCAqKWFyZzEsIGFyZzIqc2l6ZW9mKHN0cnVjdCBvcF9jb3VudGVy
X2NvbmZpZykpKQorCQkJCXJldHVybiAtRUZBVUxUOworCQkJcmV0ID0gbm1pX3NldHVwX2V2ZW50
cygpOworCQkJYnJlYWs7CisKKwkJY2FzZSBQTUNfRU5BQkxFX1ZJUlE6CisJCQlpZiAoIWlzX2Fj
dGl2ZShjdXJyZW50KSkgeworCQkJCWlmIChjdXJyZW50ICE9IHByaW1hcnlfcHJvZmlsZXIpCisJ
CQkJCXJldHVybiAtRVBFUk07CisJCQkJZWxzZQorCQkJCQlzZXRfYWN0aXZlKGN1cnJlbnQpOwor
CQkJfQorCQkJcmV0ID0gbm1pX2VuYWJsZV92aXJxKCk7CisJCQlwbWNfZXZlbnRfaW5pdChjdXJy
ZW50KTsKKwkJCWFjdGl2YXRlZCsrOworCQkJYnJlYWs7CisKKwkJY2FzZSBQTUNfU1RBUlQ6CisJ
CQlpZiAoYWN0aXZhdGVkIDwgYWRvbWFpbnMpCisJCQkJcmV0dXJuIC1FUEVSTTsKKwkJCXJldCA9
IG5taV9zdGFydCgpOworCQkJYnJlYWs7CisKKwkJY2FzZSBQTUNfU1RPUDoKKwkJCW5taV9zdG9w
KCk7CisJCQlicmVhazsKKworCQljYXNlIFBNQ19ESVNBQkxFX1ZJUlE6CisJCQlpZiAoIWlzX2Fj
dGl2ZShjdXJyZW50KSkKKwkJCQlyZXR1cm4gLUVQRVJNOworCQkJbm1pX2Rpc2FibGVfdmlycSgp
OworCQkJYWN0aXZhdGVkLS07CisJCQlicmVhazsKKworCQljYXNlIFBNQ19SRUxFQVNFX0NPVU5U
RVJTOgorCQkJbm1pX3JlbGVhc2VfY291bnRlcnMoKTsKKwkJCWJyZWFrOworCisJCWNhc2UgUE1D
X1NIVVRET1dOOgorCQkJZnJlZV9hZG9tYWluX3B0cnMoKTsKKwkJCXBkb21haW5zID0gMDsKKwkJ
CWFjdGl2YXRlZCA9IDA7CisJCQlwcmltYXJ5X3Byb2ZpbGVyID0gTlVMTDsKKwkJCWJyZWFrOwor
CisJCWRlZmF1bHQ6CisJCQlyZXQgPSAtRUlOVkFMOworCX0KKwlyZXR1cm4gcmV0OworfQpkaWZm
IC1QTmF1ciB4ZW4tMi4wLjUveGVuL2FyY2gveDg2L3RyYXBzLmMgeGVuLTIuMC41LXByb2YveGVu
L2FyY2gveDg2L3RyYXBzLmMKLS0tIHhlbi0yLjAuNS94ZW4vYXJjaC94ODYvdHJhcHMuYwkyMDA1
LTAzLTEwIDExOjUyOjE1LjAwMDAwMDAwMCAtMDgwMAorKysgeGVuLTIuMC41LXByb2YveGVuL2Fy
Y2gveDg2L3RyYXBzLmMJMjAwNS0wNC0wNiAxMDoyOTowNC4wMDAwMDAwMDAgLTA3MDAKQEAgLTIs
NiArMiwxMCBAQAogICogYXJjaC9pMzg2L3RyYXBzLmMKICAqIAogICogTW9kaWZpY2F0aW9ucyB0
byBMaW51eCBvcmlnaW5hbCBhcmUgY29weXJpZ2h0IChjKSAyMDAyLTIwMDQsIEsgQSBGcmFzZXIK
KyAqCisgKiBNb2RpZmllZCBieSBBcmF2aW5kIE1lbm9uIGZvciBzdXBwb3J0aW5nIG9wcm9maWxl
CisgKiBUaGVzZSBtb2RpZmljYXRpb25zIGFyZToKKyAqIENvcHlyaWdodCAoQykgMjAwNSBIZXds
ZXR0LVBhY2thcmQgQ28uCiAgKiAKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAt
NTEsNiArNTUsNyBAQAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2kz
ODcuaD4KICNpbmNsdWRlIDxhc20vZGVidWdnZXIuaD4KKyNpbmNsdWRlIDxhc20vbm1pLmg+CiAK
IC8qCiAgKiBvcHRfbm1pOiBvbmUgb2YgJ2lnbm9yZScsICdkb20wJywgb3IgJ2ZhdGFsJy4KQEAg
LTU5OCw3ICs2MDMsNyBAQAogICAgIHByaW50aygiRG8geW91IGhhdmUgYSBzdHJhbmdlIHBvd2Vy
IHNhdmluZyBtb2RlIGVuYWJsZWQ/XG4iKTsKIH0KIAotYXNtbGlua2FnZSB2b2lkIGRvX25taShz
dHJ1Y3QgeGVuX3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgcmVhc29uKQorc3RhdGljIHZvaWQg
ZGVmYXVsdF9kb19ubWkoc3RydWN0IHhlbl9yZWdzICogcmVncywgdW5zaWduZWQgbG9uZyByZWFz
b24pCiB7CiAgICAgKytubWlfY291bnQoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIApAQCAtNjEwLDYg
KzYxNSwzNSBAQAogICAgICAgICB1bmtub3duX25taV9lcnJvcigodW5zaWduZWQgY2hhcikocmVh
c29uJjB4ZmYpKTsKIH0KIAorc3RhdGljIGludCBkdW1teV9ubWlfY2FsbGJhY2soc3RydWN0IHhl
bl9yZWdzICogcmVncywgaW50IGNwdSkKK3sKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRp
YyBubWlfY2FsbGJhY2tfdCBubWlfY2FsbGJhY2sgPSBkdW1teV9ubWlfY2FsbGJhY2s7CisKK2Fz
bWxpbmthZ2Ugdm9pZCBkb19ubWkoc3RydWN0IHhlbl9yZWdzICogcmVncywgdW5zaWduZWQgbG9u
ZyByZWFzb24pCit7CisJaW50IGNwdTsKKyAgICAgICAgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgp
OworCisgICAgICAgIGlmICghbm1pX2NhbGxiYWNrKHJlZ3MsIGNwdSkpIAorICAgICAgICAgICAg
ICAgIGRlZmF1bHRfZG9fbm1pKHJlZ3MsIHJlYXNvbik7Cit9CisKK3ZvaWQgc2V0X25taV9jYWxs
YmFjayhubWlfY2FsbGJhY2tfdCBjYWxsYmFjaykKK3sKKyAgICAgICAgbm1pX2NhbGxiYWNrID0g
Y2FsbGJhY2s7Cit9CisKK3ZvaWQgdW5zZXRfbm1pX2NhbGxiYWNrKHZvaWQpCit7CisgICAgICAg
IG5taV9jYWxsYmFjayA9IGR1bW15X25taV9jYWxsYmFjazsKK30KKworRVhQT1JUX1NZTUJPTChz
ZXRfbm1pX2NhbGxiYWNrKTsKK0VYUE9SVF9TWU1CT0wodW5zZXRfbm1pX2NhbGxiYWNrKTsKKwog
dW5zaWduZWQgbG9uZyBubWlfc29mdGlycV9yZWFzb247CiBzdGF0aWMgdm9pZCBubWlfc29mdGly
cSh2b2lkKQogewpkaWZmIC1QTmF1ciB4ZW4tMi4wLjUveGVuL2FyY2gveDg2L3g4Nl8zMi9lbnRy
eS5TIHhlbi0yLjAuNS1wcm9mL3hlbi9hcmNoL3g4Ni94ODZfMzIvZW50cnkuUwotLS0geGVuLTIu
MC41L3hlbi9hcmNoL3g4Ni94ODZfMzIvZW50cnkuUwkyMDA1LTAzLTEwIDExOjUyOjE2LjAwMDAw
MDAwMCAtMDgwMAorKysgeGVuLTIuMC41LXByb2YveGVuL2FyY2gveDg2L3g4Nl8zMi9lbnRyeS5T
CTIwMDUtMDQtMDYgMTA6MjM6NDYuMDAwMDAwMDAwIC0wNzAwCkBAIC0zLDYgKzMsMTAgQEAKICAq
CiAgKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNCwgSyBBIEZyYXNlcgogICogQ29weXJpZ2h0IChj
KSAxOTkxLCAxOTkyIExpbnVzIFRvcnZhbGRzCisgKgorICogTW9kaWZpZWQgYnkgQXJhdmluZCBN
ZW5vbiBmb3Igc3VwcG9ydGluZyBvcHJvZmlsZQorICogVGhlc2UgbW9kaWZpY2F0aW9ucyBhcmU6
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgSGV3bGV0dC1QYWNrYXJkIENvLgogICogCiAgKiBDYWxs
aW5nIGJhY2sgdG8gYSBndWVzdCBPUzoKICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PQpA
QCAtNDk4LDEwICs1MDIsMTAgQEAKICAgICAgICAgam56ICAgZG9fd2F0Y2hkb2dfdGljawogICAg
ICAgICBtb3ZsICAlZHMsJWVheAogICAgICAgICBjbXB3ICAkKF9fSFlQRVJWSVNPUl9EUyksJWF4
Ci0gICAgICAgIGpuZSAgIGRlZmVyX25taQorICAgICAgICBqbmUgICBmb3JjZV9ubWkKICAgICAg
ICAgbW92bCAgJWVzLCVlYXgKICAgICAgICAgY21wdyAgJChfX0hZUEVSVklTT1JfRFMpLCVheAot
ICAgICAgICBqbmUgICBkZWZlcl9ubWkKKyAgICAgICAgam5lICAgZm9yY2Vfbm1pCiAKIGRvX3dh
dGNoZG9nX3RpY2s6CiAgICAgICAgIG1vdmwgICQoX19IWVBFUlZJU09SX0RTKSwlZWR4CkBAIC01
MTIsMTIgKzUxNiw0NCBAQAogCXB1c2hsICVlZHggICAjIHJlZ3MKICAgICAgICAgY2FsbCAgU1lN
Qk9MX05BTUUoZG9fbm1pKQogCWFkZGwgICQ4LCVlc3AKKworCS8qIHhlbm9wcm9mOiBXZSBuZWVk
IHRvIGNoZWNrIGlmIHZpcnR1YWwgaW50ZXJydXB0IG11c3QgYmUgZ2VuZXJhdGVkICovCisJam1w
IHJldF9mcm9tX2ludHIKKworCS8qCiAgICAgICAgIG1vdmwgIFhSRUdTX2VmbGFncyglZXNwKSwl
ZWF4CiAgICAgICAgIG1vdmIgIFhSRUdTX2NzKCVlc3ApLCVhbAogICAgICAgICB0ZXN0bCAkKDN8
WDg2X0VGTEFHU19WTSksJWVheAogCWp6ICAgIHJlc3RvcmVfYWxsX3hlbgogICAgICAgICBHRVRf
Q1VSUkVOVCglZWJ4KQogICAgICAgICBqbXAgICByZXN0b3JlX2FsbF9ndWVzdAorCSovCisKK2Zv
cmNlX25taToKKwltb3ZsICVkcywtNCglZXNwKQorCW1vdmwgJWVzLC04KCVlc3ApCisJbW92bCAl
ZnMsLTEyKCVlc3ApCisJbW92bCAlZ3MsLTE2KCVlc3ApCisJc3VibCAkMTYsJWVzcAorCisJbW92
bCAkKF9fSFlQRVJWSVNPUl9EUyksJWVkeAorCW1vdmwgJWVkeCwlZHMKKwltb3ZsICVlZHgsJWVz
CisJCisJbW92bCAlZXNwLCVlZHgKKwlhZGRsICQxNiwlZWR4CisJcHVzaGwgJWVieAorCXB1c2hs
ICVlZHgKKwljYWxsIFNZTUJPTF9OQU1FKGRvX25taSkKKwlhZGRsICQ4LCVlc3AKKworCWFkZGwg
JDE2LCVlc3AKKwltb3ZsIC00KCVlc3ApLCVkcworCW1vdmwgLTgoJWVzcCksJWVzCisJbW92bCAt
MTIoJWVzcCksJWZzCisJbW92bCAtMTYoJWVzcCksJWdzCisKKwlqbXAgcmVzdG9yZV9hbGxfeGVu
CiAKIGRlZmVyX25taToKICAgICAgICAgbW92bCAgJEZJWE1BUF9hcGljX2Jhc2UsJWVheApAQCAt
Njc0LDYgKzcxMCw3IEBACiAgICAgICAgIC5sb25nIFNZTUJPTF9OQU1FKGRvX3ZtX2Fzc2lzdCkK
ICAgICAgICAgLmxvbmcgU1lNQk9MX05BTUUoZG9fdXBkYXRlX3ZhX21hcHBpbmdfb3RoZXJkb21h
aW4pCiAgICAgICAgIC5sb25nIFNZTUJPTF9OQU1FKGRvX3N3aXRjaF92bTg2KQorICAgICAgICAu
bG9uZyBTWU1CT0xfTkFNRShkb19wbWNfb3ApCiAgICAgICAgIC5yZXB0IE5SX2h5cGVyY2FsbHMt
KCguLWh5cGVyY2FsbF90YWJsZSkvNCkKICAgICAgICAgLmxvbmcgU1lNQk9MX05BTUUoZG9fbmlf
aHlwZXJjYWxsKQogICAgICAgICAuZW5kcgpkaWZmIC1QTmF1ciB4ZW4tMi4wLjUveGVuL2luY2x1
ZGUvYXNtLXg4Ni9hcGljLmggeGVuLTIuMC41LXByb2YveGVuL2luY2x1ZGUvYXNtLXg4Ni9hcGlj
LmgKLS0tIHhlbi0yLjAuNS94ZW4vaW5jbHVkZS9hc20teDg2L2FwaWMuaAkyMDA1LTAzLTEwIDEx
OjUyOjEyLjAwMDAwMDAwMCAtMDgwMAorKysgeGVuLTIuMC41LXByb2YveGVuL2luY2x1ZGUvYXNt
LXg4Ni9hcGljLmgJMjAwNS0wNC0wNiAwOToyNzoxMy4wMDAwMDAwMDAgLTA3MDAKQEAgLTc3LDYg
Kzc3LDggQEAKIGV4dGVybiB2b2lkIHNtcF9sb2NhbF90aW1lcl9pbnRlcnJ1cHQgKHN0cnVjdCB4
ZW5fcmVncyAqIHJlZ3MpOwogZXh0ZXJuIHZvaWQgc2V0dXBfQVBJQ19jbG9ja3MgKHZvaWQpOwog
ZXh0ZXJuIHZvaWQgc2V0dXBfYXBpY19ubWlfd2F0Y2hkb2cgKHZvaWQpOworZXh0ZXJuIGludCBy
ZXNlcnZlX2xhcGljX25taSh2b2lkKTsKK2V4dGVybiB2b2lkIHJlbGVhc2VfbGFwaWNfbm1pKHZv
aWQpOwogZXh0ZXJuIHZvaWQgbm1pX3dhdGNoZG9nX3RpY2sgKHN0cnVjdCB4ZW5fcmVncyAqIHJl
Z3MpOwogZXh0ZXJuIHZvaWQgdG91Y2hfbm1pX3dhdGNoZG9nKHZvaWQpOwogZXh0ZXJuIGludCBB
UElDX2luaXRfdW5pcHJvY2Vzc29yICh2b2lkKTsKZGlmZiAtUE5hdXIgeGVuLTIuMC41L3hlbi9p
bmNsdWRlL2FzbS14ODYvbXNyLmggeGVuLTIuMC41LXByb2YveGVuL2luY2x1ZGUvYXNtLXg4Ni9t
c3IuaAotLS0geGVuLTIuMC41L3hlbi9pbmNsdWRlL2FzbS14ODYvbXNyLmgJMjAwNS0wMy0xMCAx
MTo1MjoxNS4wMDAwMDAwMDAgLTA4MDAKKysrIHhlbi0yLjAuNS1wcm9mL3hlbi9pbmNsdWRlL2Fz
bS14ODYvbXNyLmgJMjAwNS0wNC0wNiAwOToyNzoxMy4wMDAwMDAwMDAgLTA3MDAKQEAgLTgsMzgg
KzgsMzggQEAKICAqLwogCiAjZGVmaW5lIHJkbXNyKG1zcix2YWwxLHZhbDIpIFwKLSAgICAgX19h
c21fXyBfX3ZvbGF0aWxlX18oInJkbXNyIiBcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oInJkbXNy
IiBcCiAJCQkgIDogIj1hIiAodmFsMSksICI9ZCIgKHZhbDIpIFwKIAkJCSAgOiAiYyIgKG1zcikp
CiAKLSNkZWZpbmUgcmRtc3JsKG1zcix2YWwpIGRvIHsgdW5zaWduZWQgbG9uZyBhX18sYl9fOyBc
Ci0gICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oInJkbXNyIiBcCi0JCQkgICAgOiAiPWEiIChh
X18pLCAiPWQiIChiX18pIFwKLQkJCSAgICA6ICJjIiAobXNyKSk7IFwKLSAgICAgICB2YWwgPSBh
X18gfCAoYl9fPDwzMik7IFwKLX0gd2hpbGUoMCk7IAotCiAjZGVmaW5lIHdybXNyKG1zcix2YWwx
LHZhbDIpIFwKLSAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oIndybXNyIiBcCisJX19hc21fXyBf
X3ZvbGF0aWxlX18oIndybXNyIiBcCiAJCQkgIDogLyogbm8gb3V0cHV0cyAqLyBcCiAJCQkgIDog
ImMiIChtc3IpLCAiYSIgKHZhbDEpLCAiZCIgKHZhbDIpKQogCisjZGVmaW5lIHJkbXNybChtc3Is
dmFsKSBkbyB7IFwKKwl1bnNpZ25lZCBsb25nIGxfXyxoX187IFwKKwlyZG1zciAobXNyLCBsX18s
IGhfXyk7ICBcCisJdmFsID0gbF9fOyAgXAorCXZhbCB8PSAoKHU2NCloX188PDMyKTsgIFwKK30g
d2hpbGUoMCkKKworc3RhdGljIGlubGluZSB2b2lkIHdybXNybCAodW5zaWduZWQgbG9uZyBtc3Is
IHVuc2lnbmVkIGxvbmcgbG9uZyB2YWwpCit7CisJdW5zaWduZWQgbG9uZyBsbywgaGk7CisJbG8g
PSAodW5zaWduZWQgbG9uZykgdmFsOworCWhpID0gdmFsID4+IDMyOworCXdybXNyIChtc3IsIGxv
LCBoaSk7Cit9CisKICNkZWZpbmUgcmR0c2MobG93LGhpZ2gpIFwKICAgICAgX19hc21fXyBfX3Zv
bGF0aWxlX18oInJkdHNjIiA6ICI9YSIgKGxvdyksICI9ZCIgKGhpZ2gpKQogCiAjZGVmaW5lIHJk
dHNjbChsb3cpIFwKICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oInJkdHNjIiA6ICI9YSIgKGxv
dykgOiA6ICJlZHgiKQogCi0jaWYgZGVmaW5lZChfX2kzODZfXykKICNkZWZpbmUgcmR0c2NsbCh2
YWwpIFwKICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oInJkdHNjIiA6ICI9QSIgKHZhbCkpCi0j
ZWxpZiBkZWZpbmVkKF9feDg2XzY0X18pCi0jZGVmaW5lIHJkdHNjbGwodmFsKSBkbyB7IFwKLSAg
ICAgdW5zaWduZWQgaW50IGEsZDsgXAotICAgICBhc20gdm9sYXRpbGUoInJkdHNjIiA6ICI9YSIg
KGEpLCAiPWQiIChkKSk7IFwKLSAgICAgKHZhbCkgPSAoKHVuc2lnbmVkIGxvbmcpYSkgfCAoKCh1
bnNpZ25lZCBsb25nKWQpPDwzMik7IFwKLX0gd2hpbGUoMCkKLSNlbmRpZgogCiAjZGVmaW5lIHdy
aXRlX3RzYyh2YWwxLHZhbDIpIHdybXNyKDB4MTAsIHZhbDEsIHZhbDIpCiAKQEAgLTU1LDY2ICs1
NSw2IEBACiAjZGVmaW5lIE1TUl9JQTMyX1BMQVRGT1JNX0lECQkweDE3CiAjZGVmaW5lIE1TUl9J
QTMyX0VCTF9DUl9QT1dFUk9OCQkweDJhCiAKLS8qIEFNRC9LOCBzcGVjaWZpYyBNU1JzICovIAot
I2RlZmluZSBNU1JfRUZFUiAweGMwMDAwMDgwCQkvKiBleHRlbmRlZCBmZWF0dXJlIHJlZ2lzdGVy
ICovCi0jZGVmaW5lIE1TUl9TVEFSIDB4YzAwMDAwODEJCS8qIGxlZ2FjeSBtb2RlIFNZU0NBTEwg
dGFyZ2V0ICovCi0jZGVmaW5lIE1TUl9MU1RBUiAweGMwMDAwMDgyIAkJLyogbG9uZyBtb2RlIFNZ
U0NBTEwgdGFyZ2V0ICovCi0jZGVmaW5lIE1TUl9DU1RBUiAweGMwMDAwMDgzCQkvKiBjb21wYXRp
YmlsaXR5IG1vZGUgU1lTQ0FMTCB0YXJnZXQgKi8KLSNkZWZpbmUgTVNSX1NZU0NBTExfTUFTSyAw
eGMwMDAwMDg0CS8qIEVGTEFHUyBtYXNrIGZvciBzeXNjYWxsICovCi0jZGVmaW5lIE1TUl9GU19C
QVNFIDB4YzAwMDAxMDAJCS8qIDY0Yml0IEdTIGJhc2UgKi8KLSNkZWZpbmUgTVNSX0dTX0JBU0Ug
MHhjMDAwMDEwMQkJLyogNjRiaXQgRlMgYmFzZSAqLwotI2RlZmluZSBNU1JfS0VSTkVMX0dTX0JB
U0UgIDB4YzAwMDAxMDIJLyogU3dhcEdTIEdTIHNoYWRvdyAob3IgVVNFUl9HUyBmcm9tIGtlcm5l
bCkgKi8gCi0vKiBFRkVSIGJpdHM6ICovIAotI2RlZmluZSBfRUZFUl9TQ0UgMCAgLyogU1lTQ0FM
TC9TWVNSRVQgKi8KLSNkZWZpbmUgX0VGRVJfTE1FIDggIC8qIExvbmcgbW9kZSBlbmFibGUgKi8K
LSNkZWZpbmUgX0VGRVJfTE1BIDEwIC8qIExvbmcgbW9kZSBhY3RpdmUgKHJlYWQtb25seSkgKi8K
LSNkZWZpbmUgX0VGRVJfTlggMTEgIC8qIE5vIGV4ZWN1dGUgZW5hYmxlICovCi0KLSNkZWZpbmUg
RUZFUl9TQ0UgKDE8PF9FRkVSX1NDRSkKLSNkZWZpbmUgRUZFUl9MTUUgKDE8PF9FRkVSX0xNRSkK
LSNkZWZpbmUgRUZFUl9MTUEgKDE8PF9FRkVSX0xNQSkKLSNkZWZpbmUgRUZFUl9OWCAoMTw8X0VG
RVJfTlgpCi0KLS8qIEludGVsIE1TUnMuIFNvbWUgYWxzbyBhdmFpbGFibGUgb24gb3RoZXIgQ1BV
cyAqLwotI2RlZmluZSBNU1JfSUEzMl9QTEFURk9STV9JRAkweDE3Ci0KLSNkZWZpbmUgTVNSX0lB
MzJfUEVSRkNUUjAgICAgICAweGMxCi0jZGVmaW5lIE1TUl9JQTMyX1BFUkZDVFIxICAgICAgMHhj
MgotCi0jZGVmaW5lIE1TUl9NVFJSY2FwCQkweDBmZQotI2RlZmluZSBNU1JfSUEzMl9CQkxfQ1Jf
Q1RMICAgICAgICAweDExOQotCi0jZGVmaW5lIE1TUl9JQTMyX01DR19DQVAgICAgICAgMHgxNzkK
LSNkZWZpbmUgTVNSX0lBMzJfTUNHX1NUQVRVUyAgICAgICAgMHgxN2EKLSNkZWZpbmUgTVNSX0lB
MzJfTUNHX0NUTCAgICAgICAweDE3YgotCi0jZGVmaW5lIE1TUl9JQTMyX0VWTlRTRUwwICAgICAg
MHgxODYKLSNkZWZpbmUgTVNSX0lBMzJfRVZOVFNFTDEgICAgICAweDE4NwotCi0jZGVmaW5lIE1T
Ul9JQTMyX0RFQlVHQ1RMTVNSICAgICAgIDB4MWQ5Ci0jZGVmaW5lIE1TUl9JQTMyX0xBU1RCUkFO
Q0hGUk9NSVAgIDB4MWRiCi0jZGVmaW5lIE1TUl9JQTMyX0xBU1RCUkFOQ0hUT0lQICAgICAgICAw
eDFkYwotI2RlZmluZSBNU1JfSUEzMl9MQVNUSU5URlJPTUlQICAgICAweDFkZAotI2RlZmluZSBN
U1JfSUEzMl9MQVNUSU5UVE9JUCAgICAgICAweDFkZQotCi0jZGVmaW5lIE1TUl9NVFJSZml4NjRL
XzAwMDAwCTB4MjUwCi0jZGVmaW5lIE1TUl9NVFJSZml4MTZLXzgwMDAwCTB4MjU4Ci0jZGVmaW5l
IE1TUl9NVFJSZml4MTZLX0EwMDAwCTB4MjU5Ci0jZGVmaW5lIE1TUl9NVFJSZml4NEtfQzAwMDAJ
MHgyNjgKLSNkZWZpbmUgTVNSX01UUlJmaXg0S19DODAwMAkweDI2OQotI2RlZmluZSBNU1JfTVRS
UmZpeDRLX0QwMDAwCTB4MjZhCi0jZGVmaW5lIE1TUl9NVFJSZml4NEtfRDgwMDAJMHgyNmIKLSNk
ZWZpbmUgTVNSX01UUlJmaXg0S19FMDAwMAkweDI2YwotI2RlZmluZSBNU1JfTVRSUmZpeDRLX0U4
MDAwCTB4MjZkCi0jZGVmaW5lIE1TUl9NVFJSZml4NEtfRjAwMDAJMHgyNmUKLSNkZWZpbmUgTVNS
X01UUlJmaXg0S19GODAwMAkweDI2ZgotI2RlZmluZSBNU1JfTVRSUmRlZlR5cGUJCTB4MmZmCi0K
LSNkZWZpbmUgTVNSX0lBMzJfTUMwX0NUTCAgICAgICAweDQwMAotI2RlZmluZSBNU1JfSUEzMl9N
QzBfU1RBVFVTICAgICAgICAweDQwMQotI2RlZmluZSBNU1JfSUEzMl9NQzBfQUREUiAgICAgIDB4
NDAyCi0jZGVmaW5lIE1TUl9JQTMyX01DMF9NSVNDICAgICAgMHg0MDMKLQogI2RlZmluZSBNU1Jf
SUEzMl9BUElDQkFTRQkJMHgxYgogI2RlZmluZSBNU1JfSUEzMl9BUElDQkFTRV9CU1AJCSgxPDw4
KQogI2RlZmluZSBNU1JfSUEzMl9BUElDQkFTRV9FTkFCTEUJKDE8PDExKQpAQCAtMTIzLDEyICs2
MywzOCBAQAogI2RlZmluZSBNU1JfSUEzMl9VQ09ERV9XUklURQkJMHg3OQogI2RlZmluZSBNU1Jf
SUEzMl9VQ09ERV9SRVYJCTB4OGIKIAorI2RlZmluZSBNU1JfUDZfUEVSRkNUUjAJCTB4YzEKKyNk
ZWZpbmUgTVNSX1A2X1BFUkZDVFIxCQkweGMyCisKICNkZWZpbmUgTVNSX0lBMzJfQkJMX0NSX0NU
TAkJMHgxMTkKIAorI2RlZmluZSBNU1JfSUEzMl9TWVNFTlRFUl9DUwkJMHgxNzQKKyNkZWZpbmUg
TVNSX0lBMzJfU1lTRU5URVJfRVNQCQkweDE3NQorI2RlZmluZSBNU1JfSUEzMl9TWVNFTlRFUl9F
SVAJCTB4MTc2CisKICNkZWZpbmUgTVNSX0lBMzJfTUNHX0NBUAkJMHgxNzkKICNkZWZpbmUgTVNS
X0lBMzJfTUNHX1NUQVRVUwkJMHgxN2EKICNkZWZpbmUgTVNSX0lBMzJfTUNHX0NUTAkJMHgxN2IK
IAorLyogUDQvWGVvbisgc3BlY2lmaWMgKi8KKyNkZWZpbmUgTVNSX0lBMzJfTUNHX0VBWAkJMHgx
ODAKKyNkZWZpbmUgTVNSX0lBMzJfTUNHX0VCWAkJMHgxODEKKyNkZWZpbmUgTVNSX0lBMzJfTUNH
X0VDWAkJMHgxODIKKyNkZWZpbmUgTVNSX0lBMzJfTUNHX0VEWAkJMHgxODMKKyNkZWZpbmUgTVNS
X0lBMzJfTUNHX0VTSQkJMHgxODQKKyNkZWZpbmUgTVNSX0lBMzJfTUNHX0VESQkJMHgxODUKKyNk
ZWZpbmUgTVNSX0lBMzJfTUNHX0VCUAkJMHgxODYKKyNkZWZpbmUgTVNSX0lBMzJfTUNHX0VTUAkJ
MHgxODcKKyNkZWZpbmUgTVNSX0lBMzJfTUNHX0VGTEFHUwkJMHgxODgKKyNkZWZpbmUgTVNSX0lB
MzJfTUNHX0VJUAkJMHgxODkKKyNkZWZpbmUgTVNSX0lBMzJfTUNHX1JFU0VSVkVECQkweDE4QQor
CisjZGVmaW5lIE1TUl9QNl9FVk5UU0VMMAkJCTB4MTg2CisjZGVmaW5lIE1TUl9QNl9FVk5UU0VM
MQkJCTB4MTg3CisKKyNkZWZpbmUgTVNSX0lBMzJfUEVSRl9TVEFUVVMJCTB4MTk4CisjZGVmaW5l
IE1TUl9JQTMyX1BFUkZfQ1RMCQkweDE5OQorCiAjZGVmaW5lIE1TUl9JQTMyX1RIRVJNX0NPTlRS
T0wJCTB4MTlhCiAjZGVmaW5lIE1TUl9JQTMyX1RIRVJNX0lOVEVSUlVQVAkweDE5YgogI2RlZmlu
ZSBNU1JfSUEzMl9USEVSTV9TVEFUVVMJCTB4MTljCkBAIC0xNDUsMjkgKzExMSw5MSBAQAogI2Rl
ZmluZSBNU1JfSUEzMl9NQzBfQUREUgkJMHg0MDIKICNkZWZpbmUgTVNSX0lBMzJfTUMwX01JU0MJ
CTB4NDAzCiAKLSNkZWZpbmUgTVNSX1A2X1BFUkZDVFIwCQkJMHhjMQotI2RlZmluZSBNU1JfUDZf
UEVSRkNUUjEJCQkweGMyCi0jZGVmaW5lIE1TUl9QNl9FVk5UU0VMMAkJCTB4MTg2Ci0jZGVmaW5l
IE1TUl9QNl9FVk5UU0VMMQkJCTB4MTg3CisvKiBQZW50aXVtIElWIHBlcmZvcm1hbmNlIGNvdW50
ZXIgTVNScyAqLworI2RlZmluZSBNU1JfUDRfQlBVX1BFUkZDVFIwIAkJMHgzMDAKKyNkZWZpbmUg
TVNSX1A0X0JQVV9QRVJGQ1RSMSAJCTB4MzAxCisjZGVmaW5lIE1TUl9QNF9CUFVfUEVSRkNUUjIg
CQkweDMwMgorI2RlZmluZSBNU1JfUDRfQlBVX1BFUkZDVFIzIAkJMHgzMDMKKyNkZWZpbmUgTVNS
X1A0X01TX1BFUkZDVFIwIAkJMHgzMDQKKyNkZWZpbmUgTVNSX1A0X01TX1BFUkZDVFIxIAkJMHgz
MDUKKyNkZWZpbmUgTVNSX1A0X01TX1BFUkZDVFIyIAkJMHgzMDYKKyNkZWZpbmUgTVNSX1A0X01T
X1BFUkZDVFIzIAkJMHgzMDcKKyNkZWZpbmUgTVNSX1A0X0ZMQU1FX1BFUkZDVFIwIAkJMHgzMDgK
KyNkZWZpbmUgTVNSX1A0X0ZMQU1FX1BFUkZDVFIxIAkJMHgzMDkKKyNkZWZpbmUgTVNSX1A0X0ZM
QU1FX1BFUkZDVFIyIAkJMHgzMGEKKyNkZWZpbmUgTVNSX1A0X0ZMQU1FX1BFUkZDVFIzIAkJMHgz
MGIKKyNkZWZpbmUgTVNSX1A0X0lRX1BFUkZDVFIwIAkJMHgzMGMKKyNkZWZpbmUgTVNSX1A0X0lR
X1BFUkZDVFIxIAkJMHgzMGQKKyNkZWZpbmUgTVNSX1A0X0lRX1BFUkZDVFIyIAkJMHgzMGUKKyNk
ZWZpbmUgTVNSX1A0X0lRX1BFUkZDVFIzIAkJMHgzMGYKKyNkZWZpbmUgTVNSX1A0X0lRX1BFUkZD
VFI0IAkJMHgzMTAKKyNkZWZpbmUgTVNSX1A0X0lRX1BFUkZDVFI1IAkJMHgzMTEKKyNkZWZpbmUg
TVNSX1A0X0JQVV9DQ0NSMCAJCTB4MzYwCisjZGVmaW5lIE1TUl9QNF9CUFVfQ0NDUjEgCQkweDM2
MQorI2RlZmluZSBNU1JfUDRfQlBVX0NDQ1IyIAkJMHgzNjIKKyNkZWZpbmUgTVNSX1A0X0JQVV9D
Q0NSMyAJCTB4MzYzCisjZGVmaW5lIE1TUl9QNF9NU19DQ0NSMCAJCTB4MzY0CisjZGVmaW5lIE1T
Ul9QNF9NU19DQ0NSMSAJCTB4MzY1CisjZGVmaW5lIE1TUl9QNF9NU19DQ0NSMiAJCTB4MzY2Cisj
ZGVmaW5lIE1TUl9QNF9NU19DQ0NSMyAJCTB4MzY3CisjZGVmaW5lIE1TUl9QNF9GTEFNRV9DQ0NS
MCAJCTB4MzY4CisjZGVmaW5lIE1TUl9QNF9GTEFNRV9DQ0NSMSAJCTB4MzY5CisjZGVmaW5lIE1T
Ul9QNF9GTEFNRV9DQ0NSMiAJCTB4MzZhCisjZGVmaW5lIE1TUl9QNF9GTEFNRV9DQ0NSMyAJCTB4
MzZiCisjZGVmaW5lIE1TUl9QNF9JUV9DQ0NSMCAJCTB4MzZjCisjZGVmaW5lIE1TUl9QNF9JUV9D
Q0NSMSAJCTB4MzZkCisjZGVmaW5lIE1TUl9QNF9JUV9DQ0NSMiAJCTB4MzZlCisjZGVmaW5lIE1T
Ul9QNF9JUV9DQ0NSMyAJCTB4MzZmCisjZGVmaW5lIE1TUl9QNF9JUV9DQ0NSNCAJCTB4MzcwCisj
ZGVmaW5lIE1TUl9QNF9JUV9DQ0NSNSAJCTB4MzcxCisjZGVmaW5lIE1TUl9QNF9BTEZfRVNDUjAg
CQkweDNjYQorI2RlZmluZSBNU1JfUDRfQUxGX0VTQ1IxIAkJMHgzY2IKKyNkZWZpbmUgTVNSX1A0
X0JQVV9FU0NSMCAJCTB4M2IyCisjZGVmaW5lIE1TUl9QNF9CUFVfRVNDUjEgCQkweDNiMworI2Rl
ZmluZSBNU1JfUDRfQlNVX0VTQ1IwIAkJMHgzYTAKKyNkZWZpbmUgTVNSX1A0X0JTVV9FU0NSMSAJ
CTB4M2ExCisjZGVmaW5lIE1TUl9QNF9DUlVfRVNDUjAgCQkweDNiOAorI2RlZmluZSBNU1JfUDRf
Q1JVX0VTQ1IxIAkJMHgzYjkKKyNkZWZpbmUgTVNSX1A0X0NSVV9FU0NSMiAJCTB4M2NjCisjZGVm
aW5lIE1TUl9QNF9DUlVfRVNDUjMgCQkweDNjZAorI2RlZmluZSBNU1JfUDRfQ1JVX0VTQ1I0IAkJ
MHgzZTAKKyNkZWZpbmUgTVNSX1A0X0NSVV9FU0NSNSAJCTB4M2UxCisjZGVmaW5lIE1TUl9QNF9E
QUNfRVNDUjAgCQkweDNhOAorI2RlZmluZSBNU1JfUDRfREFDX0VTQ1IxIAkJMHgzYTkKKyNkZWZp
bmUgTVNSX1A0X0ZJUk1fRVNDUjAgCQkweDNhNAorI2RlZmluZSBNU1JfUDRfRklSTV9FU0NSMSAJ
CTB4M2E1CisjZGVmaW5lIE1TUl9QNF9GTEFNRV9FU0NSMCAJCTB4M2E2CisjZGVmaW5lIE1TUl9Q
NF9GTEFNRV9FU0NSMSAJCTB4M2E3CisjZGVmaW5lIE1TUl9QNF9GU0JfRVNDUjAgCQkweDNhMgor
I2RlZmluZSBNU1JfUDRfRlNCX0VTQ1IxIAkJMHgzYTMKKyNkZWZpbmUgTVNSX1A0X0lRX0VTQ1Iw
IAkJMHgzYmEKKyNkZWZpbmUgTVNSX1A0X0lRX0VTQ1IxIAkJMHgzYmIKKyNkZWZpbmUgTVNSX1A0
X0lTX0VTQ1IwIAkJMHgzYjQKKyNkZWZpbmUgTVNSX1A0X0lTX0VTQ1IxIAkJMHgzYjUKKyNkZWZp
bmUgTVNSX1A0X0lUTEJfRVNDUjAgCQkweDNiNgorI2RlZmluZSBNU1JfUDRfSVRMQl9FU0NSMSAJ
CTB4M2I3CisjZGVmaW5lIE1TUl9QNF9JWF9FU0NSMCAJCTB4M2M4CisjZGVmaW5lIE1TUl9QNF9J
WF9FU0NSMSAJCTB4M2M5CisjZGVmaW5lIE1TUl9QNF9NT0JfRVNDUjAgCQkweDNhYQorI2RlZmlu
ZSBNU1JfUDRfTU9CX0VTQ1IxIAkJMHgzYWIKKyNkZWZpbmUgTVNSX1A0X01TX0VTQ1IwIAkJMHgz
YzAKKyNkZWZpbmUgTVNSX1A0X01TX0VTQ1IxIAkJMHgzYzEKKyNkZWZpbmUgTVNSX1A0X1BNSF9F
U0NSMCAJCTB4M2FjCisjZGVmaW5lIE1TUl9QNF9QTUhfRVNDUjEgCQkweDNhZAorI2RlZmluZSBN
U1JfUDRfUkFUX0VTQ1IwIAkJMHgzYmMKKyNkZWZpbmUgTVNSX1A0X1JBVF9FU0NSMSAJCTB4M2Jk
CisjZGVmaW5lIE1TUl9QNF9TQUFUX0VTQ1IwIAkJMHgzYWUKKyNkZWZpbmUgTVNSX1A0X1NBQVRf
RVNDUjEgCQkweDNhZgorI2RlZmluZSBNU1JfUDRfU1NVX0VTQ1IwIAkJMHgzYmUKKyNkZWZpbmUg
TVNSX1A0X1NTVV9FU0NSMSAJCTB4M2JmICAgIC8qIGd1ZXNzOiBub3QgZGVmaW5lZCBpbiBtYW51
YWwgKi8KKyNkZWZpbmUgTVNSX1A0X1RCUFVfRVNDUjAgCQkweDNjMgorI2RlZmluZSBNU1JfUDRf
VEJQVV9FU0NSMSAJCTB4M2MzCisjZGVmaW5lIE1TUl9QNF9UQ19FU0NSMCAJCTB4M2M0CisjZGVm
aW5lIE1TUl9QNF9UQ19FU0NSMSAJCTB4M2M1CisjZGVmaW5lIE1TUl9QNF9VMkxfRVNDUjAgCQkw
eDNiMAorI2RlZmluZSBNU1JfUDRfVTJMX0VTQ1IxIAkJMHgzYjEKIAotLyogSzcvSzggTVNScy4g
Tm90IGNvbXBsZXRlLiBTZWUgdGhlIGFyY2hpdGVjdHVyZSBtYW51YWwgZm9yIGEgbW9yZSBjb21w
bGV0ZSBsaXN0LiAqLwotI2RlZmluZSBNU1JfSzdfRVZOVFNFTDAgICAgICAgICAgICAweEMwMDEw
MDAwCi0jZGVmaW5lIE1TUl9LN19QRVJGQ1RSMCAgICAgICAgICAgIDB4QzAwMTAwMDQKLSNkZWZp
bmUgTVNSX0s3X0VWTlRTRUwxICAgICAgICAgICAgMHhDMDAxMDAwMQotI2RlZmluZSBNU1JfSzdf
UEVSRkNUUjEgICAgICAgICAgICAweEMwMDEwMDA1Ci0jZGVmaW5lIE1TUl9LN19FVk5UU0VMMiAg
ICAgICAgICAgIDB4QzAwMTAwMDIKLSNkZWZpbmUgTVNSX0s3X1BFUkZDVFIyICAgICAgICAgICAg
MHhDMDAxMDAwNgotI2RlZmluZSBNU1JfSzdfRVZOVFNFTDMgICAgICAgICAgICAweEMwMDEwMDAz
Ci0jZGVmaW5lIE1TUl9LN19QRVJGQ1RSMyAgICAgICAgICAgIDB4QzAwMTAwMDcKLSNkZWZpbmUg
TVNSX0s4X1RPUF9NRU0xCQkgICAweEMwMDEwMDFBCi0jZGVmaW5lIE1TUl9LOF9UT1BfTUVNMgkJ
ICAgMHhDMDAxMDAxRAotI2RlZmluZSBNU1JfSzhfU1lTQ0ZHCQkgICAweEMwMDAwMDEwCQotI2Rl
ZmluZSBNU1JfSzdfSFdDUgkJCTB4QzAwMTAwMTUKLSNkZWZpbmUgTVNSX0s3X0NMS19DVEwJCQkw
eEMwMDEwMDFiCi0jZGVmaW5lIE1TUl9LN19GSURfVklEX0NUTAkJMHhDMDAxMDA0MQotI2RlZmlu
ZSBNU1JfSzdfVklEX1NUQVRVUwkJMHhDMDAxMDA0MgotCi0vKiBLNiBNU1JzICovCisvKiBBTUQg
RGVmaW5lZCBNU1JzICovCiAjZGVmaW5lIE1TUl9LNl9FRkVSCQkJMHhDMDAwMDA4MAogI2RlZmlu
ZSBNU1JfSzZfU1RBUgkJCTB4QzAwMDAwODEKICNkZWZpbmUgTVNSX0s2X1dIQ1IJCQkweEMwMDAw
MDgyCkBAIC0xNzYsNiArMjA0LDI4IEBACiAjZGVmaW5lIE1TUl9LNl9QU09SCQkJMHhDMDAwMDA4
NwogI2RlZmluZSBNU1JfSzZfUEZJUgkJCTB4QzAwMDAwODgKIAorI2RlZmluZSBNU1JfSzdfRVZO
VFNFTDAJCQkweEMwMDEwMDAwCisjZGVmaW5lIE1TUl9LN19FVk5UU0VMMQkJCTB4QzAwMTAwMDEK
KyNkZWZpbmUgTVNSX0s3X0VWTlRTRUwyCQkJMHhDMDAxMDAwMgorI2RlZmluZSBNU1JfSzdfRVZO
VFNFTDMJCQkweEMwMDEwMDAzCisjZGVmaW5lIE1TUl9LN19QRVJGQ1RSMAkJCTB4QzAwMTAwMDQK
KyNkZWZpbmUgTVNSX0s3X1BFUkZDVFIxCQkJMHhDMDAxMDAwNQorI2RlZmluZSBNU1JfSzdfUEVS
RkNUUjIJCQkweEMwMDEwMDA2CisjZGVmaW5lIE1TUl9LN19QRVJGQ1RSMwkJCTB4QzAwMTAwMDcK
KyNkZWZpbmUgTVNSX0s3X0hXQ1IJCQkweEMwMDEwMDE1CisjZGVmaW5lIE1TUl9LN19DTEtfQ1RM
CQkJMHhDMDAxMDAxYgorI2RlZmluZSBNU1JfSzdfRklEX1ZJRF9DVEwJCTB4QzAwMTAwNDEKKyNk
ZWZpbmUgTVNSX0s3X0ZJRF9WSURfU1RBVFVTCQkweEMwMDEwMDQyCisKKy8qIGV4dGVuZGVkIGZl
YXR1cmUgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgTVNSX0VGRVIgCQkJMHhjMDAwMDA4MAorCisvKiBF
RkVSIGJpdHM6ICovCisKKy8qIEV4ZWN1dGUgRGlzYWJsZSBlbmFibGUgKi8KKyNkZWZpbmUgX0VG
RVJfTlgJCQkxMQorI2RlZmluZSBFRkVSX05YCQkJCSgxPDxfRUZFUl9OWCkKKwogLyogQ2VudGF1
ci1IYXVscy9JRFQgZGVmaW5lZCBNU1JzLiAqLwogI2RlZmluZSBNU1JfSURUX0ZDUjEJCQkweDEw
NwogI2RlZmluZSBNU1JfSURUX0ZDUjIJCQkweDEwOApAQCAtMTk1LDYgKzI0NSw3IEBACiAvKiBW
SUEgQ3lyaXggZGVmaW5lZCBNU1JzKi8KICNkZWZpbmUgTVNSX1ZJQV9GQ1IJCQkweDExMDcKICNk
ZWZpbmUgTVNSX1ZJQV9MT05HSEFVTAkJMHgxMTBhCisjZGVmaW5lIE1TUl9WSUFfUk5HCQkJMHgx
MTBiCiAjZGVmaW5lIE1TUl9WSUFfQkNSMgkJCTB4MTE0NwogCiAvKiBUcmFuc21ldGEgZGVmaW5l
ZCBNU1JzICovCmRpZmYgLVBOYXVyIHhlbi0yLjAuNS94ZW4vaW5jbHVkZS9hc20teDg2L25taS5o
IHhlbi0yLjAuNS1wcm9mL3hlbi9pbmNsdWRlL2FzbS14ODYvbm1pLmgKLS0tIHhlbi0yLjAuNS94
ZW4vaW5jbHVkZS9hc20teDg2L25taS5oCTE5NjktMTItMzEgMTY6MDA6MDAuMDAwMDAwMDAwIC0w
ODAwCisrKyB4ZW4tMi4wLjUtcHJvZi94ZW4vaW5jbHVkZS9hc20teDg2L25taS5oCTIwMDUtMDQt
MDYgMDk6Mjc6MTMuMDAwMDAwMDAwIC0wNzAwCkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgKiAgbGlu
dXgvaW5jbHVkZS9hc20taTM4Ni9ubWkuaAorICovCisjaWZuZGVmIEFTTV9OTUlfSAorI2RlZmlu
ZSBBU01fTk1JX0gKKworc3RydWN0IHhlbl9yZWdzOworIAordHlwZWRlZiBpbnQgKCpubWlfY2Fs
bGJhY2tfdCkoc3RydWN0IHhlbl9yZWdzICogcmVncywgaW50IGNwdSk7CisgCisvKiogCisgKiBz
ZXRfbm1pX2NhbGxiYWNrCisgKgorICogU2V0IGEgaGFuZGxlciBmb3IgYW4gTk1JLiBPbmx5IG9u
ZSBoYW5kbGVyIG1heSBiZQorICogc2V0LiBSZXR1cm4gMSBpZiB0aGUgTk1JIHdhcyBoYW5kbGVk
LgorICovCit2b2lkIHNldF9ubWlfY2FsbGJhY2sobm1pX2NhbGxiYWNrX3QgY2FsbGJhY2spOwor
IAorLyoqIAorICogdW5zZXRfbm1pX2NhbGxiYWNrCisgKgorICogUmVtb3ZlIHRoZSBoYW5kbGVy
IHByZXZpb3VzbHkgc2V0LgorICovCit2b2lkIHVuc2V0X25taV9jYWxsYmFjayh2b2lkKTsKKyAK
KyNlbmRpZiAvKiBBU01fTk1JX0ggKi8KZGlmZiAtUE5hdXIgeGVuLTIuMC41L3hlbi9pbmNsdWRl
L3B1YmxpYy94ZW4uaCB4ZW4tMi4wLjUtcHJvZi94ZW4vaW5jbHVkZS9wdWJsaWMveGVuLmgKLS0t
IHhlbi0yLjAuNS94ZW4vaW5jbHVkZS9wdWJsaWMveGVuLmgJMjAwNS0wMy0xMCAxMTo1MjoxMy4w
MDAwMDAwMDAgLTA4MDAKKysrIHhlbi0yLjAuNS1wcm9mL3hlbi9pbmNsdWRlL3B1YmxpYy94ZW4u
aAkyMDA1LTA0LTA2IDA5OjI3OjEzLjAwMDAwMDAwMCAtMDcwMApAQCAtNCw2ICs0LDEwIEBACiAg
KiBHdWVzdCBPUyBpbnRlcmZhY2UgdG8gWGVuLgogICogCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDQs
IEsgQSBGcmFzZXIKKyAqCisgKiBNb2RpZmllZCBieSBBcmF2aW5kIE1lbm9uIGZvciBzdXBwb3J0
aW5nIG9wcm9maWxlCisgKiBUaGVzZSBtb2RpZmljYXRpb25zIGFyZToKKyAqIENvcHlyaWdodCAo
QykgMjAwNSBIZXdsZXR0LVBhY2thcmQgQ28uCiAgKi8KIAogI2lmbmRlZiBfX1hFTl9QVUJMSUNf
WEVOX0hfXwpAQCAtNDgsNiArNTIsNyBAQAogI2RlZmluZSBfX0hZUEVSVklTT1Jfdm1fYXNzaXN0
ICAgICAgICAgICAgMjEKICNkZWZpbmUgX19IWVBFUlZJU09SX3VwZGF0ZV92YV9tYXBwaW5nX290
aGVyZG9tYWluIDIyCiAjZGVmaW5lIF9fSFlQRVJWSVNPUl9zd2l0Y2hfdm04NiAgICAgICAgICAy
MworI2RlZmluZSBfX0hZUEVSVklTT1JfcG1jX29wICAgICAgICAgICAgICAgMjQKIAogLyoKICAq
IE1VTFRJQ0FMTFMKQEAgLTcxLDcgKzc2LDggQEAKICNkZWZpbmUgVklSUV9ET01fRVhDICAgIDQg
IC8qIChET00wKSBFeGNlcHRpb25hbCBldmVudCBmb3Igc29tZSBkb21haW4uICAgKi8KICNkZWZp
bmUgVklSUV9QQVJJVFlfRVJSIDUgIC8qIChET00wKSBOTUkgcGFyaXR5IGVycm9yLiAgICAgICAg
ICAgICAgICAgICAgKi8KICNkZWZpbmUgVklSUV9JT19FUlIgICAgIDYgIC8qIChET00wKSBOTUkg
SS9PIGVycm9yLiAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgTlJfVklSUVMgICAg
ICAgIDcKKyNkZWZpbmUgVklSUV9QTUNfT1ZGCTcgIC8qIFBNQyBPdmVyZmxvdyAqLworI2RlZmlu
ZSBOUl9WSVJRUyAgICAgICAgOAogCiAvKgogICogTU1VLVVQREFURSBSRVFVRVNUUwpAQCAtMTk4
LDYgKzIwNCwyMSBAQAogI2RlZmluZSBWTUFTU1RfVFlQRV93cml0YWJsZV9wYWdldGFibGVzICAy
CiAjZGVmaW5lIE1BWF9WTUFTU1RfVFlQRSAyCiAKKy8qCisgKiBDb21tYW5kcyB0byBIWVBFUlZJ
U09SX3BtY19vcCgpLgorICovCisjZGVmaW5lIFBNQ19JTklUCQkwCisjZGVmaW5lIFBNQ19TRVRf
QUNUSVZFCQkxCisjZGVmaW5lIFBNQ19TRVRfUEFTU0lWRQkJMgorI2RlZmluZSBQTUNfUkVTRVJW
RV9DT1VOVEVSUwkzCisjZGVmaW5lIFBNQ19TRVRVUF9FVkVOVFMJNAorI2RlZmluZSBQTUNfRU5B
QkxFX1ZJUlEJCTUKKyNkZWZpbmUgUE1DX1NUQVJUCQk2CisjZGVmaW5lIFBNQ19TVE9QCQk3Cisj
ZGVmaW5lIFBNQ19ESVNBQkxFX1ZJUlEJOAorI2RlZmluZSBQTUNfUkVMRUFTRV9DT1VOVEVSUwk5
CisjZGVmaW5lIFBNQ19TSFVURE9XTgkJMTAKKwogI2lmbmRlZiBfX0FTU0VNQkxZX18KIAogdHlw
ZWRlZiB1MTYgZG9taWRfdDsKQEAgLTI1Myw2ICsyNzQsOCBAQAogLyogTm8gc3VwcG9ydCBmb3Ig
bXVsdGktcHJvY2Vzc29yIGd1ZXN0cy4gKi8KICNkZWZpbmUgTUFYX1ZJUlRfQ1BVUyAxCiAKKyNk
ZWZpbmUgTUFYX09QUk9GX0VWRU5UUwkzMgorI2RlZmluZSBNQVhfT1BST0ZfRE9NQUlOUwkyNQkK
IC8qCiAgKiBYZW4vZ3Vlc3RvcyBzaGFyZWQgZGF0YSAtLSBwb2ludGVyIHByb3ZpZGVkIGluIHN0
YXJ0X2luZm8uCiAgKiBOQi4gV2UgZXhwZWN0IHRoYXQgdGhpcyBzdHJ1Y3QgaXMgc21hbGxlciB0
aGFuIGEgcGFnZS4KQEAgLTM2MCw2ICszODMsMjAgQEAKIAogICAgIGFyY2hfc2hhcmVkX2luZm9f
dCBhcmNoOwogCisgICAgLyogT3Byb2ZpbGUgc3RydWN0dXJlcyAqLworICAgIHU4IGV2ZW50X2hl
YWQ7CisgICAgdTggZXZlbnRfdGFpbDsKKyAgICBzdHJ1Y3QgeworCXUzMiBlaXA7CisJdTggbW9k
ZTsKKwl1OCBldmVudDsKKyAgICB9IFBBQ0tFRCBldmVudF9sb2dbTUFYX09QUk9GX0VWRU5UU107
CisgICAgdTggbG9zaW5nX3NhbXBsZXM7CisgICAgdTY0IHNhbXBsZXNfbG9zdDsKKyAgICB1MzIg
bm1pX3Jlc3RhcnRzOworICAgIHU2NCBhY3RpdmVfc2FtcGxlczsKKyAgICB1NjQgcGFzc2l2ZV9z
YW1wbGVzOworICAgIHU2NCBvdGhlcl9zYW1wbGVzOwogfSBQQUNLRUQgc2hhcmVkX2luZm9fdDsK
IAogLyoKZGlmZiAtUE5hdXIgeGVuLTIuMC41L3hlbi9pbmNsdWRlL3hlbi9zbXAuaCB4ZW4tMi4w
LjUtcHJvZi94ZW4vaW5jbHVkZS94ZW4vc21wLmgKLS0tIHhlbi0yLjAuNS94ZW4vaW5jbHVkZS94
ZW4vc21wLmgJMjAwNS0wMy0xMCAxMTo1MjoxNi4wMDAwMDAwMDAgLTA4MDAKKysrIHhlbi0yLjAu
NS1wcm9mL3hlbi9pbmNsdWRlL3hlbi9zbXAuaAkyMDA1LTA0LTA2IDA5OjI3OjEzLjAwMDAwMDAw
MCAtMDcwMApAQCAtNDcsNiArNDcsMTggQEAKIAkJCSAgICAgIGludCByZXRyeSwgaW50IHdhaXQp
OwogCiAvKgorICogQ2FsbCBhIGZ1bmN0aW9uIG9uIGFsbCBwcm9jZXNzb3JzCisgKi8KK3N0YXRp
YyBpbmxpbmUgaW50IG9uX2VhY2hfY3B1KHZvaWQgKCpmdW5jKSAodm9pZCAqaW5mbyksIHZvaWQg
KmluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmV0cnksIGludCB3YWl0
KQoreworICAgICAgICBpbnQgcmV0ID0gMDsKKyAgICAgICAgcmV0ID0gc21wX2NhbGxfZnVuY3Rp
b24oZnVuYywgaW5mbywgcmV0cnksIHdhaXQpOworICAgICAgICBmdW5jKGluZm8pOworICAgICAg
ICByZXR1cm4gcmV0OworfQorCisvKgogICogVHJ1ZSBvbmNlIHRoZSBwZXIgcHJvY2VzcyBpZGxl
IGlzIGZvcmtlZAogICovCiBleHRlcm4gaW50IHNtcF90aHJlYWRzX3JlYWR5OwpAQCAtODUsNiAr
OTcsNyBAQAogI2RlZmluZSBjcHVfbG9naWNhbF9tYXAoY3B1KQkJCTAKICNkZWZpbmUgY3B1X251
bWJlcl9tYXAoY3B1KQkJCTAKICNkZWZpbmUgc21wX2NhbGxfZnVuY3Rpb24oZnVuYyxpbmZvLHJl
dHJ5LHdhaXQpCSh7IDA7IH0pCisjZGVmaW5lIG9uX2VhY2hfY3B1KGZ1bmMsaW5mbyxyZXRyeSx3
YWl0KSAgICAgICAoeyBmdW5jKGluZm8pOyAwOyB9KQogI2RlZmluZSBjcHVfb25saW5lX21hcAkJ
CQkxCiAKICNlbmRpZgo=

------_=_NextPart_001_01C53CB2.59CE8456
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel

------_=_NextPart_001_01C53CB2.59CE8456--




_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.