NetBSD-Bugs archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
RE: bin/30756: gdb not usable for live debugging of threaded programs
The following reply was made to PR bin/30756; it has been noted by GNATS.
From: "Paul Koning" <Paul_Koning%Dell.com@localhost>
To: <gnats-bugs%NetBSD.org@localhost>
Cc: <tech-kern%NetBSD.org@localhost>,
"Antti Kantee" <pooka%cs.hut.fi@localhost>
Subject: RE: bin/30756: gdb not usable for live debugging of threaded programs
Date: Thu, 22 Apr 2010 11:18:14 -0400
This is a multi-part message in MIME format.
------_=_NextPart_001_01CAE22F.094CA314
Content-Type: text/plain;
charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
Antti pointed out a problem in the patch I originally submitted which
causes gdb to go into a loop if the child process exits. The attached
updated patch corrects that problem.
paul
------_=_NextPart_001_01CAE22F.094CA314
Content-Type: application/octet-stream;
name="gdbthreads-650a.diff"
Content-Transfer-Encoding: base64
Content-Description: gdbthreads-650a.diff
Content-Disposition: attachment;
filename="gdbthreads-650a.diff"
LS0tIC4vZ251L2Rpc3QvZ2RiNi9nZGIvY29uZmlnL2kzODYvbmJzZGVsZi5taC5vcmlnCTIwMDYt
MTEtMjUgMTE6Mzg6NTEuMDAwMDAwMDAwIC0wNTAwCisrKyAuL2dudS9kaXN0L2dkYjYvZ2RiL2Nv
bmZpZy9pMzg2L25ic2RlbGYubWgJMjAxMC0wNC0xOSAxMjowNzoyMC4wMDAwMDAwMDAgLTA0MDAK
QEAgLTEsNiArMSw2IEBACiAjIEhvc3Q6IE5ldEJTRC9pMzg2IEVMRgogTkFUREVQRklMRVM9IGZv
cmstY2hpbGQubyBpbmYtcHRyYWNlLm8gXAotCW5ic2QtbmF0Lm8gaTM4NmJzZC1uYXQubyBpMzg2
bmJzZC1uYXQubyBic2Qta3ZtLm8KKwluYnNkLW5hdC5vIGkzODZic2QtbmF0Lm8gaTM4Nm5ic2Qt
bmF0Lm8gYnNkLWt2bS5vIG5ic2QtdGhyZWFkLm8KIE5BVF9GSUxFPSBzb2xpYi5oCiAKIExPQURM
SUJFUz0gLWxrdm0KLS0tIC4vZ251L2Rpc3QvZ2RiNi9nZGIvY29uZmlnL21pcHMvbmJzZC5taC5v
cmlnCTIwMDYtMTItMDYgMTM6MjU6MjkuMDAwMDAwMDAwIC0wNTAwCisrKyAuL2dudS9kaXN0L2dk
YjYvZ2RiL2NvbmZpZy9taXBzL25ic2QubWgJMjAxMC0wNC0xOSAxMzo1NTozOC4wMDAwMDAwMDAg
LTA0MDAKQEAgLTEsMiArMSwyIEBACiAjIEhvc3Q6IE5ldEJTRC9taXBzCi1OQVRERVBGSUxFUz0g
Zm9yay1jaGlsZC5vIGluZi1wdHJhY2UubyBuYnNkLW5hdC5vIG1pcHNuYnNkLW5hdC5vCitOQVRE
RVBGSUxFUz0gZm9yay1jaGlsZC5vIGluZi1wdHJhY2UubyBuYnNkLW5hdC5vIG1pcHNuYnNkLW5h
dC5vIG5ic2QtdGhyZWFkLm8KLS0tIC4vZ251L2Rpc3QvZ2RiNi9nZGIvbWlwc25ic2QtbmF0LmMu
b3JpZwkyMDA2LTEyLTA2IDEzOjI1OjI5LjAwMDAwMDAwMCAtMDUwMAorKysgLi9nbnUvZGlzdC9n
ZGI2L2dkYi9taXBzbmJzZC1uYXQuYwkyMDEwLTA0LTE5IDEzOjU4OjI1LjAwMDAwMDAwMCAtMDQw
MApAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgImluZmVyaW9yLmgiCiAjaW5jbHVkZSAicmVn
Y2FjaGUuaCIKICNpbmNsdWRlICJ0YXJnZXQuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKIAogI2lu
Y2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1ZGUgPHN5cy9wdHJhY2UuaD4KQEAgLTMyLDYgKzMz
LDcgQEAKICNpbmNsdWRlICJtaXBzLXRkZXAuaCIKICNpbmNsdWRlICJtaXBzbmJzZC10ZGVwLmgi
CiAjaW5jbHVkZSAiaW5mLXB0cmFjZS5oIgorI2luY2x1ZGUgIm5ic2QtdGhyZWFkLmgiCiAKIC8q
IERldGVybWluZSBpZiBQVF9HRVRSRUdTIGZldGNoZXMgdGhpcyByZWdpc3Rlci4gICovCiBzdGF0
aWMgaW50CkBAIC00OCw3ICs1MCw3IEBACiAgICAgICBzdHJ1Y3QgcmVnIHJlZ3M7CiAKICAgICAg
IGlmIChwdHJhY2UgKFBUX0dFVFJFR1MsIFBJREdFVCAoaW5mZXJpb3JfcHRpZCksCi0JCSAgKFBU
UkFDRV9UWVBFX0FSRzMpICZyZWdzLCAwKSA9PSAtMSkKKwkJICAoUFRSQUNFX1RZUEVfQVJHMykg
JnJlZ3MsIFRJREdFVCAoaW5mZXJpb3JfcHRpZCkpID09IC0xKQogCXBlcnJvcl93aXRoX25hbWUg
KF8oIkNvdWxkbid0IGdldCByZWdpc3RlcnMiKSk7CiAgICAgICAKICAgICAgIG1pcHNuYnNkX3N1
cHBseV9yZWcgKChjaGFyICopICZyZWdzLCByZWdubyk7CkBAIC02MSw3ICs2Myw3IEBACiAgICAg
ICBzdHJ1Y3QgZnByZWcgZnByZWdzOwogCiAgICAgICBpZiAocHRyYWNlIChQVF9HRVRGUFJFR1Ms
IFBJREdFVCAoaW5mZXJpb3JfcHRpZCksCi0JCSAgKFBUUkFDRV9UWVBFX0FSRzMpICZmcHJlZ3Ms
IDApID09IC0xKQorCQkgIChQVFJBQ0VfVFlQRV9BUkczKSAmZnByZWdzLCBUSURHRVQgKGluZmVy
aW9yX3B0aWQpKSA9PSAtMSkKIAlwZXJyb3Jfd2l0aF9uYW1lIChfKCJDb3VsZG4ndCBnZXQgZmxv
YXRpbmcgcG9pbnQgc3RhdHVzIikpOwogCiAgICAgICBtaXBzbmJzZF9zdXBwbHlfZnByZWcgKChj
aGFyICopICZmcHJlZ3MsIHJlZ25vKTsKQEAgLTc2LDEzICs3OCwxMyBAQAogICAgICAgc3RydWN0
IHJlZyByZWdzOwogCiAgICAgICBpZiAocHRyYWNlIChQVF9HRVRSRUdTLCBQSURHRVQgKGluZmVy
aW9yX3B0aWQpLAotCQkgIChQVFJBQ0VfVFlQRV9BUkczKSAmcmVncywgMCkgPT0gLTEpCisJCSAg
KFBUUkFDRV9UWVBFX0FSRzMpICZyZWdzLCBUSURHRVQgKGluZmVyaW9yX3B0aWQpKSA9PSAtMSkK
IAlwZXJyb3Jfd2l0aF9uYW1lIChfKCJDb3VsZG4ndCBnZXQgcmVnaXN0ZXJzIikpOwogCiAgICAg
ICBtaXBzbmJzZF9maWxsX3JlZyAoKGNoYXIgKikgJnJlZ3MsIHJlZ25vKTsKIAogICAgICAgaWYg
KHB0cmFjZSAoUFRfU0VUUkVHUywgUElER0VUIChpbmZlcmlvcl9wdGlkKSwgCi0JCSAgKFBUUkFD
RV9UWVBFX0FSRzMpICZyZWdzLCAwKSA9PSAtMSkKKwkJICAoUFRSQUNFX1RZUEVfQVJHMykgJnJl
Z3MsIFRJREdFVCAoaW5mZXJpb3JfcHRpZCkpID09IC0xKQogCXBlcnJvcl93aXRoX25hbWUgKF8o
IkNvdWxkbid0IHdyaXRlIHJlZ2lzdGVycyIpKTsKIAogICAgICAgaWYgKHJlZ25vICE9IC0xKQpA
QCAtOTQsMTMgKzk2LDEzIEBACiAgICAgICBzdHJ1Y3QgZnByZWcgZnByZWdzOyAKIAogICAgICAg
aWYgKHB0cmFjZSAoUFRfR0VURlBSRUdTLCBQSURHRVQgKGluZmVyaW9yX3B0aWQpLAotCQkgIChQ
VFJBQ0VfVFlQRV9BUkczKSAmZnByZWdzLCAwKSA9PSAtMSkKKwkJICAoUFRSQUNFX1RZUEVfQVJH
MykgJmZwcmVncywgVElER0VUIChpbmZlcmlvcl9wdGlkKSkgPT0gLTEpCiAJcGVycm9yX3dpdGhf
bmFtZSAoXygiQ291bGRuJ3QgZ2V0IGZsb2F0aW5nIHBvaW50IHN0YXR1cyIpKTsKIAogICAgICAg
bWlwc25ic2RfZmlsbF9mcHJlZyAoKGNoYXIgKikgJmZwcmVncywgcmVnbm8pOwogCiAgICAgICBp
ZiAocHRyYWNlIChQVF9TRVRGUFJFR1MsIFBJREdFVCAoaW5mZXJpb3JfcHRpZCksCi0JCSAgKFBU
UkFDRV9UWVBFX0FSRzMpICZmcHJlZ3MsIDApID09IC0xKQorCQkgIChQVFJBQ0VfVFlQRV9BUkcz
KSAmZnByZWdzLCBUSURHRVQgKGluZmVyaW9yX3B0aWQpKSA9PSAtMSkKIAlwZXJyb3Jfd2l0aF9u
YW1lIChfKCJDb3VsZG4ndCB3cml0ZSBmbG9hdGluZyBwb2ludCBzdGF0dXMiKSk7CiAgICAgfQog
fQpAQCAtMTE1LDYgKzExNyw3IEBACiAgIHN0cnVjdCB0YXJnZXRfb3BzICp0OwogCiAgIHQgPSBp
bmZfcHRyYWNlX3RhcmdldCAoKTsKKyAgaW5pdF9uYnNkX3RocmVhZF9vcHMgKHQpOwogICB0LT50
b19mZXRjaF9yZWdpc3RlcnMgPSBtaXBzbmJzZF9mZXRjaF9pbmZlcmlvcl9yZWdpc3RlcnM7CiAg
IHQtPnRvX3N0b3JlX3JlZ2lzdGVycyA9IG1pcHNuYnNkX3N0b3JlX2luZmVyaW9yX3JlZ2lzdGVy
czsKICAgdC0+dG9fcGlkX3RvX2V4ZWNfZmlsZSA9IG5ic2RfcGlkX3RvX2V4ZWNfZmlsZTsKLS0t
IC4vZ251L2Rpc3QvZ2RiNi9nZGIvbmJzZC10aHJlYWQuYy5vcmlnCTIwMTAtMDQtMTkgMTE6NDM6
MDUuMDAwMDAwMDAwIC0wNDAwCisrKyAuL2dudS9kaXN0L2dkYjYvZ2RiL25ic2QtdGhyZWFkLmMJ
MjAxMC0wNC0yMiAxMDo1Nzo1My4wMDAwMDAwMDAgLTA0MDAKQEAgLTAsMCArMSw3MTQgQEAKKy8q
IFRocmVhZHMgc3VwcG9ydCBmb3IgTmV0QlNEIDUuMC4KKworICAgQ29weXJpZ2h0IChDKSAyMDEw
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBDb250cmlidXRlZCBieSBQYXVs
IEtvbmluZywgRGVsbCwgaW5jLgorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHREIuCisKKyAg
IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUK
KyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUg
RnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKworI2luY2x1
ZGUgImRlZnMuaCIKKyNpbmNsdWRlICJjb21tYW5kLmgiCisjaW5jbHVkZSAiZ2RiY21kLmgiCisj
aW5jbHVkZSAidGFyZ2V0LmgiCisjaW5jbHVkZSAiaW5mZXJpb3IuaCIKKyNpbmNsdWRlICJnZGJ0
aHJlYWQuaCIKKyNpbmNsdWRlICJyZWdjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIm5ic2QtdGhyZWFkLmgiCisKKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDxz
eXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvcHRyYWNlLmg+CisjaW5jbHVkZSA8c3lzL3dhaXQu
aD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworLyogRGF0YSBz
dHJ1Y3R1cmUgdXNlZCB0byB0cmFjayBOZXRCU0QgdGhyZWFkIHN0YXRlLiAgVGhlcmUgaXMgYSAK
KyAgIHZlY3RvciBvZiB0aGVzZSwgaW4gYXNjZW5kaW5nIG9yZGVyIG9mIExXUCBJRC4gICovCisK
K3N0cnVjdCBsd3BfaW5mbworeworICAvKiBUaGUgcHJvY2VzcyBJRCBvZiB0aGUgTFdQLiAgVGhp
cyBpcyBhIGNvbWJpbmF0aW9uIG9mIHRoZSBwcm9jZXNzCisgICAgIElEIGFuZCB0aGUgTFdQIElE
LiAgKi8KKyAgcHRpZF90IHB0aWQ7CisgIAorICAvKiBOb24temVybyBpZiB3ZSB0aGlzIExXUCB3
YXMgcmVwb3J0ZWQgYXMgaGF2aW5nIGJlZW4gc2lnbmFsbGVkCisgICAgIGJ5IHRoZSBQVF9MV1BJ
TkZPIHB0cmFjZSgpIGNhbGwuICAqLworICBpbnQgc2lnbmFsbGVkOworICAKKyAgLyogVGhlIHdh
aXRzdGF0dXMgZm9yIHRoaXMgTFdQJ3MgbGFzdCBldmVudC4gICovCisgIHN0cnVjdCB0YXJnZXRf
d2FpdHN0YXR1cyB3YWl0c3RhdHVzOworfTsKKworLyogVGhlIGx3cF9pbmZvIGJ1ZmZlciBhbmQg
aXRzIGNvbnRyb2wgdmFyaWFibGVzLiAgKi8KK3N0YXRpYyBzdHJ1Y3QgbHdwX2luZm8gKmx3cF9i
dWZmZXI7CitzdGF0aWMgaW50IGx3cF9jb3VudDsKK3N0YXRpYyBpbnQgbHdwX2J1ZnNpemU7CisK
Ky8qIENvdW50IG9mIHNpZ25hbHMgc3RpbGwgcGVuZGluZyBkZWxpdmVyeSB0byBHREIuICBUaGVz
ZSBhcmUgdGhyZWFkcworICAgdGhhdCB3ZXJlIGZvdW5kIHRvIGJlIHN0b3BwZWQgYW5kIG5vdCBi
cmVha3BvaW50cy4gIEZvciB0aHJlYWRzIHRoYXQKKyAgIGhpdCBhIGJyZWFrcG9pbnQsIHdlIHNp
bXBseSBwdXNoIGJhY2sgdGhlIHRocmVhZCBzbyBpdCB3aWxsIGhpdCB0aGUKKyAgIGJyZWFrIGFn
YWluIChpZiBpdCBpc24ndCByZW1vdmVkIGJlZm9yZSB0aGVuKSBidXQgZm9yIG90aGVyIHNpZ25h
bHMsCisgICBmb3IgZXhhbXBsZSBmYXVsdHMsIHRoZSBzaWduYWwgcmVtYWlucyBwZW5kaW5nLCB0
aGUgInRvX3Jlc3VtZSIgdGhhdAorICAgcmVzdW1lcyB0aGUgd2hvbGUgcHJvY2VzcyBpcyBza2lw
cGVkLCBhbmQgdGhlbiB0aGUgInRvX3dhaXQiIHJldHVybnMKKyAgIHRoZSBpbmZvcm1hdGlvbiBh
Ym91dCBvbmUgb2YgdGhlIHBlbmRpbmcgc2lnbmFscyBpbnN0ZWFkLiAgKi8KK3N0YXRpYyBpbnQg
cGVuZGluZ19zaWdzOworCisvKiBUaGUgTFdQIElEIG9mIHRoZSB0aHJlYWQgYmVpbmcgc3RlcHBl
ZCwgb3IgMCBpZiBub25lLiAgKi8KK3N0YXRpYyBpbnQgc3RlcF9sd3BpZDsKKworLyogRmxhZyB0
byBpbmRpY2F0ZSB3aGV0aGVyIGxhc3QgcmVzdW1lIHdhcyBhIHJlc3VtZSBhbGwgdGhyZWFkcyBv
cgorICAgYSByZXN1bWUgc2luZ2xlIHRocmVhZC4gICovCitzdGF0aWMgaW50IHJlc3VtZV9hbGw7
CisKKy8qIE5vbi16ZXJvIGlmIHRoZSBuZXRic2QtdGhyZWFkIGxheWVyIGlzIGFjdGl2ZS4gICov
CitzdGF0aWMgaW50IG5ic2RfdGhyZWFkX2FjdGl2ZSA9IDA7CisKKy8qIFRoZSBuZXRic2QtdGhy
ZWFkIHRhcmdldF9vcHMgc3RydWN0dXJlLiAgKi8KK3N0YXRpYyBzdHJ1Y3QgdGFyZ2V0X29wcyBu
YnNkX3RocmVhZF9vcHM7CisKK2ludCBkZWJ1Z19uYnNkX3RocmVhZDsKK3N0YXRpYyB2b2lkCitz
aG93X2RlYnVnX25ic2RfdGhyZWFkIChzdHJ1Y3QgdWlfZmlsZSAqZmlsZSwgaW50IGZyb21fdHR5
LAorCQkgICAgICBzdHJ1Y3QgY21kX2xpc3RfZWxlbWVudCAqYywgY29uc3QgY2hhciAqdmFsdWUp
Cit7CisgIGZwcmludGZfZmlsdGVyZWQgKGZpbGUsIF8oIkRlYnVnZ2luZyBvZiBOZXRCU0QgdGhy
ZWFkIG1vZHVsZSBpcyAlcy5cbiIpLAorCQkgICAgdmFsdWUpOworfQorCisKKy8qIEFjdGl2YXRl
IHRocmVhZCBzdXBwb3J0IGlmIGFwcHJvcHJpYXRlLiAgRG8gbm90aGluZyBpZiB0aHJlYWQKKyAg
IHN1cHBvcnQgaXMgYWxyZWFkeSBhY3RpdmUuICAqLworCitzdGF0aWMgdm9pZAorZW5hYmxlX25i
c2RfdGhyZWFkICh2b2lkKQoreworICBzdHJ1Y3QgbWluaW1hbF9zeW1ib2wgKm1zeW07CisgIHZv
aWQqIGNhbGxlcl9jb250ZXh0OworICBpbnQgc3RhdHVzOworCisgIC8qIElmIGFscmVhZHkgYWN0
aXZlLCBub3RoaW5nIG1vcmUgdG8gZG8uICAqLworICBpZiAobmJzZF90aHJlYWRfYWN0aXZlKQor
ICAgIHJldHVybjsKKworICBpZiAobHdwX2J1ZmZlciAhPSBOVUxMKQorICAgIHsKKyAgICAgIHhm
cmVlIChsd3BfYnVmZmVyKTsKKyAgICAgIGx3cF9idWZmZXIgPSBOVUxMOworICAgICAgbHdwX2Nv
dW50ID0gbHdwX2J1ZnNpemUgPSAwOworICAgIH0KKyAgCisgIC8qIHB1c2hfdGFyZ2V0ICgmbmJz
ZF90aHJlYWRfb3BzKTsgKi8KKyAgbmJzZF90aHJlYWRfYWN0aXZlID0gMTsKK30KKworLyogRGVh
Y3RpdmF0ZSB0aHJlYWQgc3VwcG9ydC4gIERvIG5vdGhpbmcgaXMgdGhyZWFkIHN1cHBvcnQgaXMK
KyAgIGFscmVhZHkgaW5hY3RpdmUuICAqLworCisjaWYgMAorc3RhdGljIHZvaWQKK2Rpc2FibGVf
bmJzZF90aHJlYWQgKHZvaWQpCit7CisgIGlmICghbmJzZF90aHJlYWRfYWN0aXZlKQorICAgIHJl
dHVybjsKKworICB1bnB1c2hfdGFyZ2V0ICgmbmJzZF90aHJlYWRfb3BzKTsKKyAgbmJzZF90aHJl
YWRfYWN0aXZlID0gMDsKK30KKyNlbmRpZgorCisvKiBVcGRhdGUgb3VyIGx3cF9pbmZvIGJ1ZmZl
ciwgYW5kIHRlbGwgR0RCIGFib3V0IGFkZHMgb3IgZGVsZXRlcy4KKworICAgQnkgZG9pbmcgdGhl
IHRocmVhZCBhZGQgYW5kIHRocmVhZCBkZWxldGUgb3BlcmF0aW9ucyBoZXJlIGFzIHdlCisgICBs
ZWFybiBhYm91dCB0aHJlYWRzLCB3ZSBhbGxvdyB1c2VycyB0byBydW4gdGhyZWFkLXNwZWNpZmlj
IGNvbW1hbmRzCisgICB3aXRob3V0IG5lZWRpbmcgdG8gcnVuICJpbmZvIHRocmVhZHMiIGZpcnN0
LiAKKworICAgVGhlIGFyZ3VtZW50IGlzIGEgcG9pbnRlciB0byB0aGUgd2FpdHN0YXR1cyBzdHJ1
Y3QsIHdoaWNoCisgICBpcyBjb3BpZWQgaW50byB0aGUgd2FpdHN0YXR1cyBmb3IgdGhlIHRocmVh
ZCB3ZSBmaW5kIGFzIHRoZSBzaWduYWxsZWQKKyAgIHRocmVhZC4gICovCisKK3N0YXRpYyB2b2lk
Cit1cGRhdGVfbHdwYnVmIChzdHJ1Y3QgdGFyZ2V0X3dhaXRzdGF0dXMgKnN0YXR1cykKK3sKKyAg
aW50IHBpOworICBsd3BpZF90IGx3cF9pZCwgc2lnX2x3cGlkOworICBzdHJ1Y3QgcHRyYWNlX2x3
cGluZm8gcHRfaW5mbzsKKyAgcHRpZF90IHB0aWQ7CisgIAorICAvKiBBY2N1bXVsYXRlIGFuIGFy
cmF5IG9mIE5ldEJTRCB0aHJlYWRzLCBpbiBkZXNjZW5kaW5nIG9yZGVyIG9mIExXUCBpZC4KKwor
ICAgICBUaGUgcmVhc29uIGZvciB1c2luZyBkZXNjZW5kaW5nIG9yZGVyIGlzIHRoYXQgdGhpcyBp
cyB0aGUgb3JkZXIKKyAgICAgaW4gd2hpY2ggTFdQcyBhcmUgcmV0dXJuZWQgYnkgdGhlIHB0cmFj
ZSgpIFBUX0xXUElORk8gZnVuY3Rpb24sCisgICAgIGJlY2F1c2UgaXQgcmV0dXJucyB0aGVtIGlu
IHRoZSBvcmRlciBpbiB3aGljaCB0aGV5IGV4aXN0IGluIHRoZQorICAgICBwX2x3cHMgbGlzdCBm
b3IgdGhlIHByb2Nlc3MsIGFuZCBuZXcgZW50cmllcyBhcmUgYXNzaWduZWQgYXNjZW5kaW5nCisg
ICAgIExXUCBJRHMgYW5kIGFyZSBhZGRlZCB0byB0aGUgaGVhZCBvZiB0aGF0IGxpc3QuICAqLwor
CisgIGx3cF9pZCA9IHNpZ19sd3BpZCA9IDA7CisgIHBpID0gMDsKKyAgCisgIHdoaWxlICgxKQor
ICAgIHsKKyAgICAgIHB0X2luZm8ucGxfbHdwaWQgPSBsd3BfaWQ7CisgICAgICBlcnJubyA9IDA7
CisgICAgICBpZiAocHRyYWNlIChQVF9MV1BJTkZPLCBQSURHRVQgKGluZmVyaW9yX3B0aWQpLAor
CQkgICZwdF9pbmZvLCBzaXplb2YgKHB0X2luZm8pKSA9PSAtMSkKKwl7CisJICBpZiAoZXJybm8g
PT0gRVNSQ0gpCisJICAgIGJyZWFrOworCSAgZWxzZSBpZiAoZXJybm8gIT0gMCkKKwkgICAgcGVy
cm9yX3dpdGhfbmFtZSAoXygiQ291bGRuJ3QgZ2V0IHRocmVhZCBpbmZvcm1hdGlvbiIpKTsKKwl9
CisKKyAgICAgIGlmIChkZWJ1Z19uYnNkX3RocmVhZCkKKwlmcHJpbnRmX3VuZmlsdGVyZWQgKGdk
Yl9zdGRsb2csCisJCQkgICAgIk5UVVA6IGx3cGluZm8gb24gJWQgcmV0dXJucyBsd3AgJWQsIHBs
X2V2ZW50ICVkXG4iLAorCQkJICAgIGx3cF9pZCwgcHRfaW5mby5wbF9sd3BpZCwgcHRfaW5mby5w
bF9ldmVudCk7CisJICAKKyAgICAgIC8qIFJldHJpZXZlIHRoZSBMV1AgSUQgdGhhdCB3YXMgZm91
bmQuICBUaGlzIGFsc28gc2V0cyB0aGUgSUQgdG8KKwkgc3RhcnQgZnJvbSB0aGUgbmV4dCB0aW1l
IGFyb3VuZCB0aGUgbG9vcC4gICovCisgICAgICBsd3BfaWQgPSBwdF9pbmZvLnBsX2x3cGlkOwor
CisgICAgICAvKiBMV1AgaWQgMCBpcyBlbmQgb2YgbGlzdC4gICovCisgICAgICBpZiAobHdwX2lk
ID09IDApCisJYnJlYWs7CisgICAgICAKKyAgICAgIC8qIElmIHRoZSBMV1Agd2UgZm91bmQgaGFz
IGFuIElEIGxlc3MgdGhhbiB0aGUgSUQgb2YgdGhlIGN1cnJlbnQKKwkgYnVmZmVyIGVudHJ5LCB0
aGVuIHRoZSBjdXJyZW50IGJ1ZmZlciBlbnRyeSBpcyBhIGRlbGV0ZWQgdGhyZWFkLgorCSBUZWxs
IEdEQiBhYm91dCBpdHMgZGVtaXNlLCB0aGVuIHJlbW92ZSBpdCBmcm9tIHRoZSBidWZmZXIuIAor
CSAgCisJIFdlIGhhdmUgdG8gZG8gdGhpcyBpbiBhIGxvb3AgdW50aWwgd2UgcnVuIG91dCBvZiB0
aHJlYWRzCisJIHRvIGJlIHJlbW92ZWQuICAqLworICAgICAgd2hpbGUgKHBpIDwgbHdwX2NvdW50
ICYmIGx3cF9pZCA8IFRJREdFVCAobHdwX2J1ZmZlcltwaV0ucHRpZCkpCisJeworCSAgaWYgKGRl
YnVnX25ic2RfdGhyZWFkKQorCSAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJ
CQkJIk5UVVA6IHRocmVhZCBwdGlkICVkLCVsZCBoYXMgZGlzYXBwZWFyZWRcbiIsCisJCQkJUElE
R0VUIChsd3BfYnVmZmVyW3BpXS5wdGlkKSwKKwkJCQlUSURHRVQgKGx3cF9idWZmZXJbcGldLnB0
aWQpKTsKKworCSAgLyogVGVsbCBHREIuICAqLworCSAgZGVsZXRlX3RocmVhZCAobHdwX2J1ZmZl
cltwaV0ucHRpZCk7CisKKwkgIC8qIFJlbW92ZSB0aGUgZGVsZXRlZCBlbnRyeS4gICovCisJICBp
ZiAocGkgPCBsd3BfY291bnQpCisJICAgIG1lbW1vdmUgKGx3cF9idWZmZXIgKyBwaSArIDEsIGx3
cF9idWZmZXIgKyBwaSwgCisJCSAgICAgKGx3cF9jb3VudCAtIHBpKSAqIHNpemVvZiAoc3RydWN0
IGx3cF9pbmZvKSk7CisJICBsd3BfY291bnQtLTsKKwl9CisKKyAgICAgIC8qIElmIHdlJ3JlIG5v
dyBhdCB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IGJ1ZmZlciwgb3IgdGhlIExXUCBmb3VuZAorCSBo
YXMgYW4gTFdQIElEIGdyZWF0ZXIgdGhhbiB0aGUgY3VycmVudCBlbnRyeSBpbiB0aGUgYnVmZmVy
LCB0aGlzCisJIGlzIGEgbmV3IHRocmVhZC4gIEFsbG9jYXRlIG1vcmUgYnVmZmVyIHNwYWNlIGlm
IG5lZWQgYmUsCisJIG1ha2Ugcm9vbSBmb3IgdGhpcyBlbnRyeSwgYW5kIHN0b3JlIGl0LiAgVGhl
biB0ZWxsIEdEQiBhYm91dAorCSB0aGUgbmV3IHRocmVhZC4gICovCisgICAgICBpZiAocGkgPj0g
bHdwX2NvdW50IHx8IGx3cF9pZCA+IFRJREdFVCAobHdwX2J1ZmZlcltwaV0ucHRpZCkpCisJewor
CSAgLyogQWxsb2NhdGUgbW9yZSBzcGFjZSwgaWYgd2UgbmVlZCBpdC4gICovCisJICBpZiAobHdw
X2NvdW50ID09IGx3cF9idWZzaXplKQorCSAgICB7CisJICAgICAgaWYgKGx3cF9idWZzaXplKQor
CQlsd3BfYnVmc2l6ZSAqPSAyOworCSAgICAgIGVsc2UKKwkJbHdwX2J1ZnNpemUgPSAxOworCSAg
ICAgIGx3cF9idWZmZXIgPSAoc3RydWN0IGx3cF9pbmZvICopIHhyZWFsbG9jIChsd3BfYnVmZmVy
LCAKKwkJCQkJCQkgbHdwX2J1ZnNpemUgKiBzaXplb2YgKHN0cnVjdCBsd3BfaW5mbykpOworCSAg
ICB9CisKKwkgIC8qIFB1c2ggY3VycmVudCBhbmQgbGF0ZXIgZW50cmllcywgaWYgYW55LCBvdmVy
LiAgKi8KKwkgIGlmIChwaSA8IGx3cF9jb3VudCkKKwkgICAgbWVtbW92ZSAobHdwX2J1ZmZlciAr
IHBpICsgMSwgbHdwX2J1ZmZlciArIHBpLCAKKwkJICAgICAobHdwX2NvdW50IC0gcGkpICogc2l6
ZW9mIChzdHJ1Y3QgbHdwX2luZm8pKTsKKworCSAgLyogVXBkYXRlIHRoZSBjb3VudCBvZiBMV1Bz
LiAgKi8KKwkgIGx3cF9jb3VudCsrOworCisJICAvKiBJbml0aWFsaXplIHRoZSBuZXcgZW50cnku
ICAqLworCSAgbHdwX2J1ZmZlcltwaV0ucHRpZCA9IE1FUkdFUElEIChQSURHRVQgKGluZmVyaW9y
X3B0aWQpLCBsd3BfaWQpOworCSAgaWYgKHB0X2luZm8ucGxfZXZlbnQgPT0gUExfRVZFTlRfU0lH
TkFMKQorCSAgICB7CisJICAgICAgbHdwX2J1ZmZlcltwaV0uc2lnbmFsbGVkID0gMTsKKwkgICAg
ICBsd3BfYnVmZmVyW3BpXS53YWl0c3RhdHVzID0gKnN0YXR1czsKKwkgICAgICBzaWdfbHdwaWQg
PSBsd3BfaWQ7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgbHdwX2J1ZmZlcltwaV0uc2lnbmFsbGVk
ID0gMDsKKworCSAgLyogQWR2YW5jZSB0aGUgTFdQIGJ1ZmZlciBwb2ludGVyLiAgKi8KKwkgIHBp
Kys7CisJICAKKwkgIC8qIFRlbGwgR0RCIGFib3V0IHRoZSBuZXcgdGhyZWFkLiAgKi8KKwkgIGlm
IChsd3BfY291bnQgPT0gMSkKKwkgICAgeworCSAgICAgIC8qIFNlZSBpZiBHREIgc3RpbGwgaGFz
IFRJRCB6ZXJvLCBpZiBzbyBzZXQgdGhlIFRJRC4gICovCisJICAgICAgaWYgKFRJREdFVCAoaW5m
ZXJpb3JfcHRpZCkgPT0gMCkKKwkJeworCQkgIHN0cnVjdCB0aHJlYWRfaW5mbyAqdHA7CisJCSAg
CisJCSAgcHRpZCA9IE1FUkdFUElEIChQSURHRVQgKGluZmVyaW9yX3B0aWQpLCBsd3BfaWQpOwor
CQkgIC8qIHRocmVhZF9jaGFuZ2VfcHRpZCAoaW5mZXJpb3JfcHRpZCwgcHRpZCk7ICovCisJCSAg
dHAgPSBmaW5kX3RocmVhZF9waWQgKGluZmVyaW9yX3B0aWQpOworCQkgIGlmICh0cCAhPSBOVUxM
KQorCQkgICAgeworCQkgICAgICB0cC0+cHRpZCA9IHB0aWQ7CisJCSAgICAgIGluZmVyaW9yX3B0
aWQgPSBwdGlkOworCQkgIAorCQkgICAgICBpZiAoZGVidWdfbmJzZF90aHJlYWQpCisJCQlmcHJp
bnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJCQkJCSAgICAiTlRVUDogc2V0dGluZyBtYWlu
IHRocmVhZCBwdGlkIHRvICVkLCVsZFxuIiwKKwkJCQkJICAgIFBJREdFVCAocHRpZCksIFRJREdF
VCAocHRpZCkpOworCQkgICAgfQorCQkgIGVsc2UKKwkJICAgIHsKKwkJICAgICAgLyogTmV3IHRo
cmVhZCAoZmlyc3QgdGhyZWFkKSwgYWRkIGl0IHRvIEdEQi4gICovCisJCSAgICAgIGluZmVyaW9y
X3B0aWQgPSBwdGlkOworCQkgICAgICBpZiAoZGVidWdfbmJzZF90aHJlYWQpCisJCQlmcHJpbnRm
X3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJCQkJCSAgICAiTlRVUDogYWRkaW5nIGZpcnN0IHRo
cmVhZCBwdGlkICVkLCVkXG4iLAorCQkJCQkgICAgUElER0VUIChpbmZlcmlvcl9wdGlkKSwgbHdw
X2lkKTsKKwkJICAgICAgYWRkX3RocmVhZCAocHRpZCk7CisJCSAgICB9CisJCX0KKwkgICAgfQor
CSAgZWxzZQorCSAgICB7CisJICAgICAgLyogTmV3IHRocmVhZCBidXQgbm90IHRoZSBmaXJzdCwg
YWRkIGl0IHRvIEdEQi4gICovCisJICAgICAgaWYgKGRlYnVnX25ic2RfdGhyZWFkKQorCQlmcHJp
bnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJCQkJICAgICJOVFVQOiBhZGRpbmcgbmV3IHRo
cmVhZCBwdGlkICVkLCVkXG4iLAorCQkJCSAgICBQSURHRVQgKGluZmVyaW9yX3B0aWQpLCBsd3Bf
aWQpOworCSAgICAgIGFkZF90aHJlYWQgKE1FUkdFUElEIChQSURHRVQgKGluZmVyaW9yX3B0aWQp
LCBsd3BfaWQpKTsKKwkgICAgfQorCX0KKyAgICAgIGVsc2UKKwl7CisJICAvKiBGb3VuZCBhbiBl
eGlzdGluZyB0aHJlYWQuICBVcGRhdGUgaXRzIHN0YXR1cyBpbiB0aGUgYnVmZmVyLgorCSAgICAg
Tm90ZSB0aGF0IHdlIGNsZWFyIHRoZSBzaWduYWxsZWQgZmxhZyBpZiB0aGlzIGlzIHRoZSBmaXJz
dAorCSAgICAgY2FsbCBhbmQgdGhpcyB0aHJlYWQgd2Fzbid0IHRoZSBzaWduYWxsZWQgdGhyZWFk
LCBidXQgd2UgCisJICAgICBsZWF2ZSBpdCBhbG9uZSBvbiBzdWJzZXF1ZW50IGNhbGxzLiAgVGhh
dCB3YXkgdGhlIHN1YnNlcXVlbnQKKwkgICAgIGNhbGxzIHdpbGwgYWNjdW11bGF0ZSB0aGUgc2V0
IG9mIHNpZ25hbGxlZCB0aHJlYWRzLiAgKi8KKwkgIGlmIChwdF9pbmZvLnBsX2V2ZW50ID09IFBM
X0VWRU5UX1NJR05BTCkKKwkgICAgeworCSAgICAgIGx3cF9idWZmZXJbcGldLnNpZ25hbGxlZCA9
IDE7CisJICAgICAgbHdwX2J1ZmZlcltwaV0ud2FpdHN0YXR1cyA9ICpzdGF0dXM7CisJICAgICAg
c2lnX2x3cGlkID0gbHdwX2lkOworCSAgICB9CisJICAKKwkgIC8qIEFkdmFuY2UgdGhlIExXUCBi
dWZmZXIgcG9pbnRlci4gICovCisJICBwaSsrOworCX0KKyAgICB9CisgIGlmIChkZWJ1Z19uYnNk
X3RocmVhZCkKKyAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJCQkiTlRVUDog
c2lnbmFsbGVkIHRocmVhZCBsd3BpZCBpcyAlZFxuIiwgc2lnX2x3cGlkKTsKKworfQorCisjaWYg
MAorLyogVGhlICJ0b19kZXRhY2giIG1ldGhvZCBvZiB0aGUgbmJzZF90aHJlYWRfb3BzLiAgKi8K
Kworc3RhdGljIHZvaWQKK25ic2RfdGhyZWFkX2RldGFjaCAoY2hhciAqYXJncywgaW50IGZyb21f
dHR5KQoreyAgIAorICBzdHJ1Y3QgdGFyZ2V0X29wcyAqYmVuZWF0aCA9IGZpbmRfdGFyZ2V0X2Jl
bmVhdGggKCZuYnNkX3RocmVhZF9vcHMpOworCisgIGRpc2FibGVfbmJzZF90aHJlYWQgKCk7Cisg
IGJlbmVhdGgtPnRvX2RldGFjaCAoYXJncywgZnJvbV90dHkpOworfQorI2VuZGlmCisKKy8qIFJl
c3VtZSBleGVjdXRpb24gb2YgdGhyZWFkIFBUSUQsIG9yIGFsbCB0aHJlYWRzIGlmIFBUSUQgaXMg
LTEuICBJZgorICAgU1RFUCBpcyBub256ZXJvLCBzaW5nbGUtc3RlcCBpdC4gIElmIFNJR05BTCBp
cyBub256ZXJvLCBnaXZlIGl0CisgICB0aGF0IHNpZ25hbC4gICovCisKK3N0YXRpYyB2b2lkCitu
YnNkX3RocmVhZF9yZXN1bWUgKHB0aWRfdCBwdGlkLCBpbnQgc3RlcCwgZW51bSB0YXJnZXRfc2ln
bmFsIHNpZ25hbCkKK3sKKyAgcGlkX3QgcGlkOworICBpbnQgcmVxdWVzdDsKKyAgCisgIC8qIEEg
c3BlY2lmaWMgUFRJRCBtZWFucyBgc3RlcCBvbmx5IHRoaXMgcHJvY2VzcyBpZCcuICAqLworICBp
ZiAocHRpZF9lcXVhbCAobWludXNfb25lX3B0aWQsIHB0aWQpIHx8IFRJREdFVCAocHRpZCkgPD0g
MCkKKyAgICB7CisgICAgICByZXN1bWVfYWxsID0gMTsKKyAgICAgIHB0aWQgPSBpbmZlcmlvcl9w
dGlkOworICAgIH0KKyAgZWxzZQorICAgIHJlc3VtZV9hbGwgPSAwOworICAKKyAgcGlkID0gcHRp
ZF9nZXRfcGlkIChwdGlkKTsKKworI2lmIDAKKyAgaWYgKGNhdGNoX3N5c2NhbGxfZW5hYmxlZCAo
KSA+IDApCisgICAgcmVxdWVzdCA9IFBUX1NZU0NBTEw7CisgIGVsc2UKKyNlbmRpZgorICAgIHJl
cXVlc3QgPSBQVF9DT05USU5VRTsKKworI2lmZGVmIFBUX1NURVAKKyAgaWYgKHN0ZXApCisgICAg
eworICAgICAgLyogSWYgdGhpcyBzeXN0ZW0gZG9lcyBub3Qgc3VwcG9ydCBQVF9TVEVQLCBhIGhp
Z2hlciBsZXZlbAorICAgICAgICAgZnVuY3Rpb24gd2lsbCBoYXZlIGNhbGxlZCBzaW5nbGVfc3Rl
cCgpIHRvIHRyYW5zbXV0ZSB0aGUgc3RlcAorICAgICAgICAgcmVxdWVzdCBpbnRvIGEgY29udGlu
dWUgcmVxdWVzdCAoYnkgc2V0dGluZyBicmVha3BvaW50cyBvbgorICAgICAgICAgYWxsIHBvc3Np
YmxlIHN1Y2Nlc3NvciBpbnN0cnVjdGlvbnMpLCBzbyB3ZSBkb24ndCBoYXZlIHRvCisgICAgICAg
ICB3b3JyeSBhYm91dCB0aGF0IGhlcmUuICAqLworICAgICAgcmVxdWVzdCA9IFBUX1NURVA7Cisg
ICAgfQorI2VuZGlmCisKKyAgLyogQW4gYWRkcmVzcyBvZiAoUFRSQUNFX1RZUEVfQVJHMykxIHRl
bGxzIHB0cmFjZSB0byBjb250aW51ZSBmcm9tCisgICAgIHdoZXJlIGl0IHdhcy4gIElmIEdEQiB3
YW50ZWQgaXQgdG8gc3RhcnQgc29tZSBvdGhlciB3YXksIHdlIGhhdmUKKyAgICAgYWxyZWFkeSB3
cml0dGVuIGEgbmV3IHByb2dyYW0gY291bnRlciB2YWx1ZSB0byB0aGUgY2hpbGQuICAqLworICBl
cnJubyA9IDA7CisgIGlmIChkZWJ1Z19uYnNkX3RocmVhZCkKKyAgICBmcHJpbnRmX3VuZmlsdGVy
ZWQgKGdkYl9zdGRsb2csCisJCQkiTlRSOiAlcyBwdGlkICVkLCVsZCwgJXMsIHNpZ25hbCAlZFxu
IiwKKwkJCShzdGVwID8gInN0ZXBwaW5nIiA6ICJyZXN1bWluZyIpLAorCQkJUElER0VUIChwdGlk
KSwgVElER0VUIChwdGlkKSwKKwkJCShyZXN1bWVfYWxsID8gImFsbCB0aHJlYWRzIiA6ICJzaW5n
bGUgdGhyZWFkIiksCisJCQlzaWduYWwpOworCisgIC8qIEFzc3VtZSBub3Qgc3RlcHBpbmcgc29t
ZSBMV1AgSUQuICAqLworICBzdGVwX2x3cGlkID0gMDsKKyAgaWYgKHN0ZXApCisgICAgeworICAg
ICAgc3RlcF9sd3BpZCA9IFRJREdFVCAocHRpZCk7CisgICAgICBpZiAoc3RlcF9sd3BpZCA8IDAp
CisJc3RlcF9sd3BpZCA9IC1zdGVwX2x3cGlkOworICAgIH0JCisgIAorICBpZiAocmVzdW1lX2Fs
bCkKKyAgICB7CisgICAgICBpZiAocGVuZGluZ19zaWdzID4gMCkKKwl7CisJICAvKiBXZSBoYXZl
IHBlbmRpbmcgc2lnbmFscyBmcm9tIHRoZSBwcmV2aW91cyB3YWl0IHN0aWxsIAorCSAgICAgbmVl
ZGluZyB0byBiZSBkZWxpdmVyZWQuICBTbyBkb24ndCByZXN1bWUgdGhlIHByb2Nlc3MsCisJICAg
ICBpbnN0ZWFkIHRha2Ugbm8gYWN0aW9uIGFuZCB3ZSdsbCBkZWxpdmVyIG9uZSBvZiB0aG9zZQor
CSAgICAgcGVuZGluZyBzaWduYWxzIGF0IHRoZSBuZXh0IHdhaXQuICAqLworCSAgaWYgKGRlYnVn
X25ic2RfdGhyZWFkKQorCSAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJCQkJ
Ik5UUjogcHRpZCAlZCwlbGQgaGFzICVkIHBlbmRpbmcgc2lnbmFscywgc2tpcHBpbmcgcmVzdW1l
XG4iLAorCQkJCVBJREdFVCAocHRpZCksIFRJREdFVCAocHRpZCksIHBlbmRpbmdfc2lncyk7CisJ
ICByZXR1cm47CisJfQorICAgICAgaWYgKHN0ZXApCisJcHRyYWNlIChyZXF1ZXN0LCBwaWQsICh2
b2lkICopIDEsIFRJREdFVCAocHRpZCkpOworICAgICAgZWxzZQorCXB0cmFjZSAocmVxdWVzdCwg
cGlkLCAodm9pZCAqKSAxLAorCQl0YXJnZXRfc2lnbmFsX3RvX2hvc3QgKHNpZ25hbCkpOworICAg
IH0KKyAgZWxzZQorICAgIHB0cmFjZSAocmVxdWVzdCwgcGlkLCAodm9pZCAqKSAxLCAtVElER0VU
IChwdGlkKSk7CisgIAorICBpZiAoZXJybm8gIT0gMCkKKyAgICBwZXJyb3Jfd2l0aF9uYW1lICgo
InB0cmFjZSIpKTsKK30KKworLyogV2FpdCBmb3IgdGhlIGNoaWxkIHNwZWNpZmllZCBieSBQVElE
IHRvIGRvIHNvbWV0aGluZy4gIFJldHVybiB0aGUKKyAgIHByb2Nlc3MgSUQgb2YgdGhlIGNoaWxk
LCBvciBNSU5VU19PTkVfUFRJRCBpbiBjYXNlIG9mIGVycm9yOyBzdG9yZQorICAgdGhlIHN0YXR1
cyBpbiAqT1VSU1RBVFVTLiAgKi8KKworc3RhdGljIHB0aWRfdAorbmJzZF90aHJlYWRfd2FpdDIg
KHB0aWRfdCBwdGlkLAorCQkgICBzdHJ1Y3QgdGFyZ2V0X3dhaXRzdGF0dXMgKm91cnN0YXR1cywg
aW50IG9wdGlvbnMpCit7CisgIHBpZF90IHBpZDsKKyAgaW50IHN0YXR1cywgc2F2ZV9lcnJubzsK
KworICBkbworICAgIHsKKyAgICAgIHNldF9zaWdpbnRfdHJhcCAoKTsKKworICAgICAgZG8KKwl7
CisJICBpZiAoZGVidWdfbmJzZF90aHJlYWQpCisJICAgIGZwcmludGZfdW5maWx0ZXJlZCAoZ2Ri
X3N0ZGxvZywKKwkJCQkiTlRXMjogd2FpdGluZyBmb3IgcHRpZCAlZCwlbGQsIG9wdCAlZFxuIiwK
KwkJCQlQSURHRVQgKHB0aWQpLCBUSURHRVQgKHB0aWQpLCBvcHRpb25zKTsKKworCSAgcGlkID0g
d2FpdHBpZCAocHRpZF9nZXRfcGlkIChwdGlkKSwgJnN0YXR1cywgb3B0aW9ucyk7CisJICBzYXZl
X2Vycm5vID0gZXJybm87CisJICBpZiAoZGVidWdfbmJzZF90aHJlYWQpCisJICAgIGZwcmludGZf
dW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywKKwkJCQkiTlRXMjogd2FpdHBpZCBlcnJubyBpcyAlZCwg
cGlkICVkLCBzdGF0dXMgJXhcbiIsCisJCQkJc2F2ZV9lcnJubywgcGlkLCBzdGF0dXMpOworCX0K
KyAgICAgIHdoaWxlIChwaWQgPT0gLTEgJiYgc2F2ZV9lcnJubyA9PSBFSU5UUik7CisKKyAgICAg
IGNsZWFyX3NpZ2ludF90cmFwICgpOworCisgICAgICAvKiBJZiBub3RoaW5nIGZvdW5kIGluIHRo
ZSBubyB3YWl0IGNhc2UsIHJlcG9ydCB0aGF0LiAgKi8KKyAgICAgIGlmIChvcHRpb25zID09IFdO
T0hBTkcgJiYgcGlkID09IDApCisJcmV0dXJuIHBpZF90b19wdGlkICgtMSk7CisgICAgICAKKyAg
ICAgIGlmIChwaWQgPT0gLTEpCisJeworCSAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkZXJy
LAorCQkJICAgICAgXygiQ2hpbGQgcHJvY2VzcyB1bmV4cGVjdGVkbHkgbWlzc2luZzogJXMuXG4i
KSwKKwkJCSAgICAgIHNhZmVfc3RyZXJyb3IgKHNhdmVfZXJybm8pKTsKKworCSAgLyogSWYgZmly
c3Qgd2FpdCwgY2xhaW0gaXQgZXhpdGVkIHdpdGggdW5rbm93biBzaWduYWw7IAorCSAgICAgZWxz
ZSBjbGFpbSB0aGVyZSBpcyBub3RoaW5nIGxlZnQgdG8gd2FpdCBmb3IuICAqLworCSAgaWYgKG9w
dGlvbnMgPT0gV05PSEFORykKKwkgICAgcmV0dXJuIHBpZF90b19wdGlkICgtMSk7CisJICBvdXJz
dGF0dXMtPmtpbmQgPSBUQVJHRVRfV0FJVEtJTkRfU0lHTkFMTEVEOworCSAgb3Vyc3RhdHVzLT52
YWx1ZS5zaWcgPSBUQVJHRVRfU0lHTkFMX1VOS05PV047CisJICByZXR1cm4gaW5mZXJpb3JfcHRp
ZDsKKwl9CisKKyAgICAgIC8qIElnbm9yZSB0ZXJtaW5hdGVkIGRldGFjaGVkIGNoaWxkIHByb2Nl
c3Nlcy4gICovCisgICAgICBpZiAoIVdJRlNUT1BQRUQgKHN0YXR1cykgJiYgcGlkICE9IHB0aWRf
Z2V0X3BpZCAoaW5mZXJpb3JfcHRpZCkpCisJcGlkID0gLTE7CisgICAgfQorICB3aGlsZSAocGlk
ID09IC0xKTsKKworICBzdG9yZV93YWl0c3RhdHVzIChvdXJzdGF0dXMsIHN0YXR1cyk7CisgIHJl
dHVybiBwaWRfdG9fcHRpZCAocGlkKTsKK30KKworc3RhdGljIGludAorbmJzZF90aHJlYWRfY2Fu
Y2VsX2JyZWFrcG9pbnQgKHN0cnVjdCBsd3BfaW5mbyAqbHApCit7CisgIC8qIEFycmFuZ2UgZm9y
IGEgYnJlYWtwb2ludCB0byBiZSBoaXQgYWdhaW4gbGF0ZXIuICBXZSBkb24ndCBrZWVwCisgICAg
IHRoZSBTSUdUUkFQIHN0YXR1cyBhbmQgZG9uJ3QgZm9yd2FyZCB0aGUgU0lHVFJBUCBzaWduYWwg
dG8gdGhlCisgICAgIExXUC4gIFdlIHdpbGwgaGFuZGxlIHRoZSBjdXJyZW50IGV2ZW50LCBldmVu
dHVhbGx5IHdlIHdpbGwgcmVzdW1lCisgICAgIHRoaXMgTFdQLCBhbmQgdGhpcyBicmVha3BvaW50
IHdpbGwgdHJhcCBhZ2Fpbi4KKworICAgICBJZiB3ZSBkbyBub3QgZG8gdGhpcywgdGhlbiB3ZSBy
dW4gdGhlIHJpc2sgdGhhdCB0aGUgdXNlciB3aWxsCisgICAgIGRlbGV0ZSBvciBkaXNhYmxlIHRo
ZSBicmVha3BvaW50LCBidXQgdGhlIExXUCB3aWxsIGhhdmUgYWxyZWFkeQorICAgICB0cmlwcGVk
IG9uIGl0LiAgKi8KKworICBpZiAobHAtPndhaXRzdGF0dXMua2luZCAgPT0gVEFSR0VUX1dBSVRL
SU5EX1NUT1BQRUQKKyAgICAgICYmIGxwLT53YWl0c3RhdHVzLnZhbHVlLnNpZyA9PSBTSUdUUkFQ
CisgICAgICAmJiBicmVha3BvaW50X2luc2VydGVkX2hlcmVfcCAocmVhZF9wY19waWQgKGxwLT5w
dGlkKSAtCisJCQkJICAgICBERUNSX1BDX0FGVEVSX0JSRUFLKSkKKyAgICB7CisgICAgICBpZiAo
ZGVidWdfbmJzZF90aHJlYWQpCisJZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLAorCQkJ
ICAgICJOVENCOiBQdXNoIGJhY2sgYnJlYWtwb2ludCBmb3IgcHRpZCAlZCwlbGRcbiIsCisJCQkg
ICAgUElER0VUIChscC0+cHRpZCksIFRJREdFVCAobHAtPnB0aWQpKTsKKworICAgICAgLyogQmFj
ayB1cCB0aGUgUEMgaWYgbmVjZXNzYXJ5LiAgKi8KKyAgICAgIGlmIChERUNSX1BDX0FGVEVSX0JS
RUFLKQorCXdyaXRlX3BjX3BpZCAocmVhZF9wY19waWQgKGxwLT5wdGlkKSAtIERFQ1JfUENfQUZU
RVJfQlJFQUssIGxwLT5wdGlkKTsKKworICAgICAgLyogV2Ugbm8gbG9uZ2VyIGhhdmUgYSBwZW5k
aW5nIHNpZ25hbCBmb3IgdGhpcyB0aHJlYWQuICAqLworICAgICAgbHAtPnNpZ25hbGxlZCA9IDA7
CisKKyAgICAgIC8qIE5vdCBhIHBlbmRpbmcgc2lnbmFsIGFueW1vcmUuICAqLworICAgICAgcmV0
dXJuIDE7CisgICAgfQorICByZXR1cm4gMDsKK30KKworLyogVGhlICJ0b193YWl0IiBtZXRob2Qg
b2YgdGhlIG5ic2RfdGhyZWFkX29wcy4gICovCisKK3N0YXRpYyBwdGlkX3QKK25ic2RfdGhyZWFk
X3dhaXQgKHB0aWRfdCBwdGlkLCBzdHJ1Y3QgdGFyZ2V0X3dhaXRzdGF0dXMgKnN0YXR1cykKK3sK
KyAgcHRpZF90IGFjdGl2ZV9wdGlkOworICBzdHJ1Y3QgbHdwX2luZm8gKnNlbF90aHJlYWQ7Cisg
IGludCBzaWdfdGhyZWFkcywgaTsKKyAgc3RydWN0IHRhcmdldF93YWl0c3RhdHVzIHRzdGF0dXM7
CisKKyAgLyogSWYgdGhlcmUgd2VyZSBwZW5kaW5nIHNpZ25hbHMgYW5kIGEgcmVzdW1lIGFsbCB0
aHJlYWRzIHdhcyBkb25lLAorICAgICB0aGUgcHJvY2VzcyB3YXNuJ3QgYWN0dWFsbHkgcmVzdW1l
ZCBzbyBkb24ndCB3YWl0IG9uIGl0LiAgSnVzdAorICAgICBnbyBvbiB0byBwaWNrIGEgdGhyZWFk
IHRvIHJlcG9ydCBvbi4gICovCisgIGlmICghKHBlbmRpbmdfc2lncyA+IDAgJiYgcmVzdW1lX2Fs
bCkpCisgICAgeworICAgICAgcHRpZCA9IG5ic2RfdGhyZWFkX3dhaXQyIChwdGlkLCAmdHN0YXR1
cywgMCk7CisKKyAgICAgIC8qIERlZmF1bHQgc3RhdHVzIHJldHVybmVkIGlzIHRoZSBvbmUgd2Ug
anVzdCBnb3QuICAqLworICAgICAgKnN0YXR1cyA9IHRzdGF0dXM7CisgICAgICAKKyAgICAgIC8q
IFRoZSBwdGlkIHJldHVybmVkIGJ5IHRoZSB0YXJnZXQgYmVuZWF0aCB1cyBpcyB0aGUgcHRpZCBv
ZiB0aGUgcHJvY2Vzcy4KKwkgV2UgbmVlZCB0byBmaW5kIHdoaWNoIHRocmVhZCBpcyBjdXJyZW50
bHkgYWN0aXZlIGFuZCByZXR1cm4gCisJIGl0cyBwdGlkLiAgKi8KKyAgICAgIHVwZGF0ZV9sd3Bi
dWYgKCZ0c3RhdHVzKTsKKyAgCisgICAgICAvKiBMb29wIGNoZWNraW5nIGZvciBhZGRpdGlvbmFs
IHRocmVhZHMgdGhhdCBhcmUgd2FpdGluZywgYW5kIGdhdGhlcgorCSB1cCB0aGVpciBzdGF0dXMu
ICAqLworICAgICAgd2hpbGUgKDEpCisJeworCSAgcHRpZCA9IG5ic2RfdGhyZWFkX3dhaXQyIChw
dGlkLCAmdHN0YXR1cywgV05PSEFORyk7CisJICBpZiAoUElER0VUIChwdGlkKSA9PSAtMSkKKwkg
ICAgYnJlYWs7CisJICB1cGRhdGVfbHdwYnVmICgmdHN0YXR1cyk7CisJfQorICAgIH0KKyAgCisg
IC8qIEZpbmQgYSBzdWl0YWJsZSBzaWduYWxsZWQgdGhyZWFkLiAgUGljayB0aGUgc3RlcHBlZCBv
bmUsIGlmIHRoZXJlCisgICAgIGlzIG9uZTsgb3RoZXJ3aXNlIHBpY2sgYSByYW5kb20gb25lLiAg
Ki8KKyAgc2VsX3RocmVhZCA9IE5VTEw7CisgIHNpZ190aHJlYWRzID0gMDsKKyAgCisgIGZvciAo
aSA9IDA7IGkgPCBsd3BfY291bnQ7IGkrKykKKyAgICB7CisgICAgICBpZiAobHdwX2J1ZmZlcltp
XS5zaWduYWxsZWQpCisJeworCSAgc2lnX3RocmVhZHMrKzsKKwkgIGlmIChUSURHRVQgKGx3cF9i
dWZmZXJbaV0ucHRpZCkgPT0gc3RlcF9sd3BpZCkKKwkgICAgeworCSAgICAgIC8qIElmIHRoZXJl
IGlzIGEgc3RlcHBlZCB0aHJlYWQsIHBpY2sgdGhhdCBvbmUuICAqLworCSAgICAgIHNlbF90aHJl
YWQgPSAmbHdwX2J1ZmZlcltpXTsKKwkgICAgICBpZiAoZGVidWdfbmJzZF90aHJlYWQpCisJCWZw
cmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywKKwkJCQkgICAgIk5UVzogUGlja2luZyBwdGlk
ICVkLCVsZCBiZWNhdXNlIGl0IGlzIHN0ZXBwZWRcbiIsCisJCQkJICAgIFBJREdFVCAoc2VsX3Ro
cmVhZC0+cHRpZCksCisJCQkJICAgIFRJREdFVCAoc2VsX3RocmVhZC0+cHRpZCkpOworCSAgICAg
IGJyZWFrOworCSAgICB9CisJICAvKiBSYW5kb21seSBwaWNrIHRoaXMgb25lIG9yIGtlZXAgdGhl
IHByZXZpb3VzIGNob2ljZSwKKwkgICAgIHN1Y2ggdGhhdCBhbGwgb2YgdGhlIHNpZ25hbGxlZCB0
aHJlYWRzIGhhdmUgYW4gZXF1YWwKKwkgICAgIHByb2JhYmlsaXR5IG9mIGJlaW5nIHBpY2tlZC4g
ICovCisJICBpZiAoc2VsX3RocmVhZCA9PSBOVUxMIHx8IAorCSAgICAgICgoKGRvdWJsZSkgcmFu
ZCAoKSkgLyAoUkFORF9NQVggKyAxLjApKSA8ICgxLjAgLyBzaWdfdGhyZWFkcykpCisJICAgIHsK
KwkgICAgICBzZWxfdGhyZWFkID0gJmx3cF9idWZmZXJbaV07CisJICAgICAgaWYgKGRlYnVnX25i
c2RfdGhyZWFkKQorCQlmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJCQkJICAgICJO
VFc6IFBpY2tpbmcgcHRpZCAlZCwlbGQgb3V0IG9mICVkXG4iLAorCQkJCSAgICBQSURHRVQgKHNl
bF90aHJlYWQtPnB0aWQpLAorCQkJCSAgICBUSURHRVQgKHNlbF90aHJlYWQtPnB0aWQpLCBzaWdf
dGhyZWFkcyk7CisJICAgIH0KKwl9CisgICAgfQorICAKKyAgLyogU2NhbiB0aGUgTFdQIHRhYmxl
IGFnYWluLiAgRm9yIGVhY2ggc2lnbmFsbGVkIExXUCBvdGhlciB0aGFuIHRoZQorICAgICBjaG9z
ZW4gb25lLCBiYWNrIGl0IHVwIHRvIHRoZSBicmVha3BvaW50IGlmIGl0IHdhcyBzdG9wcGVkIGJ5
IGEKKyAgICAgYnJlYWtwb2ludCBhbmQgbWFyayBpdCBhcyBub3Qgc2lnbmFsbGVkIChpdCB3aWxs
IHJlLWJyZWFrIG5leHQKKyAgICAgdGltZSB3ZSBydW4gdGhlIHdob2xlIHByb2Nlc3MpLiAgT3Ro
ZXIgTFdQcyAodGhvc2Ugd2l0aCBzaWduYWxzCisgICAgIG90aGVyIHRoYW4gYnJlYWtwb2ludCBz
dG9wKSBhcmUgY291bnRlZCBidXQgbm90IGJhY2tlZCB1cDsgaWYgd2UKKyAgICAgZmluZCBhbnkg
b2YgdGhvc2UgdGhlbiB0aG9zZSB3aWxsIGJlIGRlbGl2ZXJlZCBuZXh0LiAgKi8KKyAgcGVuZGlu
Z19zaWdzID0gMDsKKyAgaWYgKHNpZ190aHJlYWRzID4gMSkKKyAgICB7CisgICAgICBmb3IgKGkg
PSAwOyBpIDwgbHdwX2NvdW50OyBpKyspCisJeworCSAgLyogU2tpcCB0aGUgc2VsZWN0ZWQgTFdQ
LiAgKi8KKwkgIGlmICgmbHdwX2J1ZmZlcltpXSA9PSBzZWxfdGhyZWFkKQorCSAgICBjb250aW51
ZTsKKwkgIAorCSAgaWYgKGx3cF9idWZmZXJbaV0uc2lnbmFsbGVkKQorCSAgICB7CisJICAgICAg
aWYgKFdJRlNUT1BQRUQgKGx3cF9idWZmZXJbaV0ud2FpdHN0YXR1cykpCisJCXsKKwkJICBpZiAo
IW5ic2RfdGhyZWFkX2NhbmNlbF9icmVha3BvaW50ICgmbHdwX2J1ZmZlcltpXSkpCisJCSAgICBw
ZW5kaW5nX3NpZ3MrKzsKKwkJfQorCSAgICAgIGVsc2UKKwkJcGVuZGluZ19zaWdzKys7CisJICAg
IH0KKwl9CisgICAgfQorICAKKyAgcHRpZCA9IGluZmVyaW9yX3B0aWQ7CisgIGlmIChzZWxfdGhy
ZWFkICE9IE5VTEwpCisgICAgeworICAgICAgcHRpZCA9ICBNRVJHRVBJRCAoUElER0VUIChwdGlk
KSwgVElER0VUIChzZWxfdGhyZWFkLT5wdGlkKSk7CisgICAgICAqc3RhdHVzID0gdHN0YXR1czsK
KyAgICAgIAorICAgICAgLyogVGhlIHNpZ25hbCBmb3IgdGhpcyB0aHJlYWQgaXMgbm93IGJlaW5n
IHJlcG9ydGVkLCBzbyBjbGVhcgorCSB0aGUgZmxhZyB0aGF0IHNheXMgaXQgaGFzbid0IGJlZW4g
cmVwb3J0ZWQgeWV0LiAgKi8KKyAgICAgIHNlbF90aHJlYWQtPnNpZ25hbGxlZCA9IDA7CisgICAg
fQorICBlbHNlIGlmIChkZWJ1Z19uYnNkX3RocmVhZCkKKyAgICBmcHJpbnRmX3VuZmlsdGVyZWQg
KGdkYl9zdGRsb2csCisJCQkiTlRXOiBubyBzaWduYWxsZWQgdGhyZWFkXG4iKTsKKworICBpZiAo
ZGVidWdfbmJzZF90aHJlYWQpCisgICAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLAor
CQkJIk5UVzogcmV0dXJuaW5nIHB0aWQgJWQsJWxkXG4iLAorCQkJUElER0VUIChwdGlkKSwgVElE
R0VUIChwdGlkKSk7CisKKyAgcmV0dXJuIHB0aWQ7Cit9CisKKy8qIFRoZSAidG9fbW91cm5faW5m
ZXJpb3IiIG1ldGhvZCBvZiB0aGUgbmJzZF90aHJlYWRfb3BzLiAgKi8KKworc3RhdGljIHZvaWQK
K25ic2RfdGhyZWFkX21vdXJuX2luZmVyaW9yICh2b2lkKQoreworICBpbnQgc3RhdHVzOworCisg
IC8qIFdhaXQganVzdCBvbmUgbW9yZSB0aW1lIHRvIGNvbGxlY3QgdGhlIGluZmVyaW9yJ3MgZXhp
dCBzdGF0dXMuCisgICAgIERvIG5vdCBjaGVjayB3aGV0aGVyIHRoaXMgc3VjY2VlZHMgdGhvdWdo
LCBzaW5jZSB3ZSBtYXkgYmUKKyAgICAgZGVhbGluZyB3aXRoIGEgcHJvY2VzcyB0aGF0IHdlIGF0
dGFjaGVkIHRvLiAgU3VjaCBhIHByb2Nlc3Mgd2lsbAorICAgICBvbmx5IHJlcG9ydCBpdHMgZXhp
dCBzdGF0dXMgdG8gaXRzIG9yaWdpbmFsIHBhcmVudC4gICovCisgIHdhaXRwaWQgKHB0aWRfZ2V0
X3BpZCAoaW5mZXJpb3JfcHRpZCksICZzdGF0dXMsIFdOT0hBTkcpOworCisgIGdlbmVyaWNfbW91
cm5faW5mZXJpb3IgKCk7CisKKyAgLyogaWYgKCFoYXZlX2luZmVyaW9ycyAoKSkgKi8KKyAgICB1
bnB1c2hfdGFyZ2V0ICgmbmJzZF90aHJlYWRfb3BzKTsKK30KKworCisvKiBUaGUgInRvX3RocmVh
ZF9hbGl2ZSIgbWV0aG9kIG9mIHRoZSBuYnNkX3RocmVhZF9vcHMuICAqLworc3RhdGljIGludAor
bmJzZF90aHJlYWRfdGhyZWFkX2FsaXZlIChwdGlkX3QgcHRpZCkKK3sKKyAgLyogVGhlIHRocmVh
ZCBsaXN0IG1haW50YWluZWQgYnkgR0RCIGlzIHVwIHRvIGRhdGUsIHNpbmNlIHdlIHVwZGF0ZQor
ICAgICBpdCBldmVyeXRpbWUgd2Ugc3RvcC4gICBTbyBjaGVjayB0aGlzIGxpc3QuICAqLworICBy
ZXR1cm4gaW5fdGhyZWFkX2xpc3QgKHB0aWQpOworfQorCisvKiBUaGUgInRvX3BpZF90b19zdHIi
IG1ldGhvZCBvZiB0aGUgbmJzZF90aHJlYWRfb3BzLiAgKi8KKworc3RhdGljIGNoYXIgKgorbmJz
ZF90aHJlYWRfcGlkX3RvX3N0ciAocHRpZF90IHB0aWQpCit7CisgIGlmIChUSURHRVQgKHB0aWQp
ID09IDApCisgICAgeworICAgICAgcmV0dXJuIG5vcm1hbF9waWRfdG9fc3RyIChwdGlkKTsKKyAg
ICB9CisgIHJldHVybiB4c3RycHJpbnRmIChfKCJUaHJlYWQgJWxkIiksIFRJREdFVCAocHRpZCkp
OworfQorCisvKiBVcGRhdGUgdGhlIHRhcmdldF9vcHMgd2l0aCBvdXIgdGhyZWFkIG1hY2hpbmVy
eS4gICovCisKK3ZvaWQKK2luaXRfbmJzZF90aHJlYWRfb3BzIChzdHJ1Y3QgdGFyZ2V0X29wcyAq
dCkKK3sKKyAgLyogdC0+dG9fZGV0YWNoICAgICAgICAgICAgID0gbmJzZF90aHJlYWRfZGV0YWNo
OyAqLworICB0LT50b19yZXN1bWUgICAgICAgICAgICAgPSBuYnNkX3RocmVhZF9yZXN1bWU7Cisg
IHQtPnRvX3dhaXQgICAgICAgICAgICAgICA9IG5ic2RfdGhyZWFkX3dhaXQ7CisgIHQtPnRvX21v
dXJuX2luZmVyaW9yICAgICA9IG5ic2RfdGhyZWFkX21vdXJuX2luZmVyaW9yOworICB0LT50b190
aHJlYWRfYWxpdmUgICAgICAgPSBuYnNkX3RocmVhZF90aHJlYWRfYWxpdmU7CisgIHQtPnRvX3Bp
ZF90b19zdHIgICAgICAgICA9IG5ic2RfdGhyZWFkX3BpZF90b19zdHI7CisKKyAgZW5hYmxlX25i
c2RfdGhyZWFkICgpOworfQorCit2b2lkCitfaW5pdGlhbGl6ZV9uYnNkX3RocmVhZCAodm9pZCkK
K3sKKyNpZiAwCisgIGluaXRfbmJzZF90aHJlYWRfb3BzICgpOworICBhZGRfdGFyZ2V0ICgmbmJz
ZF90aHJlYWRfb3BzKTsKKyNlbmRpZgorCisgIGFkZF9zZXRzaG93X3ppbnRlZ2VyX2NtZCAoIm5i
c2QtdGhyZWFkIiwgY2xhc3NfbWFpbnRlbmFuY2UsCisJCQkgICAgJmRlYnVnX25ic2RfdGhyZWFk
LCBfKCJcCitTZXQgZGVidWdnaW5nIG9mIE5ldEJTRCB0aHJlYWQgbW9kdWxlLiIpLCBfKCJcCitT
aG93IGRlYnVnZ2luZyBvZiBOZXRCU0QgdGhyZWFkIG1vZHVsZS4iKSwgXygiXAorRW5hYmxlcyBw
cmludGYgZGVidWdnaW5nIG91dHB1dC4iKSwKKwkJCSAgICBOVUxMLAorCQkJICAgIHNob3dfZGVi
dWdfbmJzZF90aHJlYWQsCisJCQkgICAgJnNldGRlYnVnbGlzdCwgJnNob3dkZWJ1Z2xpc3QpOwor
fQotLS0gLi9nbnUvZGlzdC9nZGI2L2dkYi9uYnNkLXRocmVhZC5oLm9yaWcJMjAxMC0wNC0xOSAx
MTo0MzowNS4wMDAwMDAwMDAgLTA0MDAKKysrIC4vZ251L2Rpc3QvZ2RiNi9nZGIvbmJzZC10aHJl
YWQuaAkyMDEwLTA0LTE5IDExOjQzOjA1LjAwMDAwMDAwMCAtMDQwMApAQCAtMCwwICsxLDI1IEBA
CisvKiBUaHJlYWRzIHN1cHBvcnQgZm9yIE5ldEJTRCA1LjAuCisKKyAgIENvcHlyaWdodCAoQykg
MjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgQ29udHJpYnV0ZWQgYnkg
UGF1bCBLb25pbmcsIERlbGwsIGluYy4KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0RCLgor
CisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisg
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8g
dGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisKK2V4
dGVybiB2b2lkIGluaXRfbmJzZF90aHJlYWRfb3BzIChzdHJ1Y3QgdGFyZ2V0X29wcyAqdCk7CisK
LS0tIC4vZ251L2Rpc3QvZ2RiNi9nZGIvaTM4NmJzZC1uYXQuYy5vcmlnCTIwMDctMDItMjQgMDg6
MDU6MTguMDAwMDAwMDAwIC0wNTAwCisrKyAuL2dudS9kaXN0L2dkYjYvZ2RiL2kzODZic2QtbmF0
LmMJMjAxMC0wNC0xOSAxMjo0NTowMS4wMDAwMDAwMDAgLTA0MDAKQEAgLTkwLDcgKzkwLDcgQEAK
IAogLyogU3VwcGx5IHRoZSBnZW5lcmFsLXB1cnBvc2UgcmVnaXN0ZXJzIGluIEdSRUdTLCB0byBS
RUdDQUNIRS4gICovCiAKLXN0YXRpYyB2b2lkCit2b2lkCiBpMzg2YnNkX3N1cHBseV9ncmVnc2V0
IChzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLCBjb25zdCB2b2lkICpncmVncykKIHsKICAgY29u
c3QgY2hhciAqcmVncyA9IGdyZWdzOwpAQCAtMTA5LDcgKzEwOSw3IEBACiAgICBHUkVHUy4gIElm
IFJFR05VTSBpcyAtMSwgY29sbGVjdCBhbmQgc3RvcmUgYWxsIGFwcHJvcHJpYXRlCiAgICByZWdp
c3RlcnMuICAqLwogCi1zdGF0aWMgdm9pZAordm9pZAogaTM4NmJzZF9jb2xsZWN0X2dyZWdzZXQg
KGNvbnN0IHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUsCiAJCQkgdm9pZCAqZ3JlZ3MsIGludCBy
ZWdudW0pCiB7Ci0tLSAuL2dudS9kaXN0L2dkYjYvZ2RiL2kzODZic2QtbmF0Lmgub3JpZwkyMDA2
LTA3LTAyIDE2OjE0OjE1LjAwMDAwMDAwMCAtMDQwMAorKysgLi9nbnUvZGlzdC9nZGI2L2dkYi9p
Mzg2YnNkLW5hdC5oCTIwMTAtMDQtMTkgMTE6NDM6MDUuMDAwMDAwMDAwIC0wNDAwCkBAIC0yNyw0
ICsyNywxMSBAQAogCiBleHRlcm4gc3RydWN0IHRhcmdldF9vcHMgKmkzODZic2RfdGFyZ2V0ICh2
b2lkKTsKIAorZXh0ZXJuIHZvaWQgaTM4NmJzZF9zdXBwbHlfZ3JlZ3NldCAoc3RydWN0IHJlZ2Nh
Y2hlICpyZWdjYWNoZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCB2b2lkICpncmVncyk7CisKK2V4dGVybiB2b2lkIGkzODZic2RfY29sbGVjdF9ncmVnc2V0IChj
b25zdCBzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZvaWQgKmdyZWdzLCBpbnQgcmVnbnVtKTsKKworCiAjZW5kaWYgLyogaTM4
NmJzZC1uYXQuaCAqLwotLS0gLi9nbnUvZGlzdC9nZGI2L2dkYi9pMzg2bmJzZC1uYXQuYy5vcmln
CTIwMDgtMDEtMjUgMDc6MzU6NDguMDAwMDAwMDAwIC0wNTAwCisrKyAuL2dudS9kaXN0L2dkYjYv
Z2RiL2kzODZuYnNkLW5hdC5jCTIwMTAtMDQtMTkgMTQ6MzU6MTYuMDAwMDAwMDAwIC0wNDAwCkBA
IC0yMCwyMiArMjAsMjkgQEAKICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KIAog
I2luY2x1ZGUgImRlZnMuaCIKKyNpbmNsdWRlICJpbmZlcmlvci5oIgogI2luY2x1ZGUgImdkYmNv
cmUuaCIKICNpbmNsdWRlICJyZWdjYWNoZS5oIgogI2luY2x1ZGUgInRhcmdldC5oIgogCiAjaW5j
bHVkZSAiaTM4Ni10ZGVwLmgiCisjaW5jbHVkZSAiaTM4Ny10ZGVwLmgiCiAjaW5jbHVkZSAiaTM4
NmJzZC1uYXQuaCIKKyNpbmNsdWRlICJuYnNkLXRocmVhZC5oIgogCiAvKiBTdXBwb3J0IGZvciBk
ZWJ1Z2dpbmcga2VybmVsIHZpcnR1YWwgbWVtb3J5IGltYWdlcy4gICovCiAKICNpbmNsdWRlIDxz
eXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvcHRyYWNlLmg+CisjaW5jbHVkZSA8bWFjaGluZS9y
ZWcuaD4KICNpbmNsdWRlIDxtYWNoaW5lL2ZyYW1lLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9wY2Iu
aD4KIAogI2luY2x1ZGUgIm5ic2QtbmF0LmgiCiAjaW5jbHVkZSAiYnNkLWt2bS5oIgogCitleHRl
cm4gaW50IGRlYnVnX25ic2RfdGhyZWFkOworCiBzdGF0aWMgaW50CiBpMzg2bmJzZF9zdXBwbHlf
cGNiIChzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLCBzdHJ1Y3QgcGNiICpwY2IpCiB7CkBAIC05
OSw2ICsxMDYsMTU5IEBACiB9CiAMCiAKKworLyogTWFjcm8gdG8gZGV0ZXJtaW5lIGlmIGEgcmVn
aXN0ZXIgaXMgZmV0Y2hlZCB3aXRoIFBUX0dFVFJFR1MuICAqLworI2RlZmluZSBHRVRSRUdTX1NV
UFBMSUVTKHJlZ251bSkgXAorICAoKDAgPD0gKHJlZ251bSkgJiYgKHJlZ251bSkgPD0gMTUpKQor
CisjaWZkZWYgSEFWRV9QVF9HRVRYTU1SRUdTCisvKiBTZXQgdG8gMSBpZiB0aGUga2VybmVsIHN1
cHBvcnRzIFBUX0dFVFhNTVJFR1MuICBJbml0aWFsaXplZCB0byAtMQorICAgc28gdGhhdCB3ZSB0
cnkgUFRfR0VUWE1NUkVHUyB0aGUgZmlyc3QgdGltZSBhcm91bmQuICAqLworc3RhdGljIGludCBo
YXZlX3B0cmFjZV94bW1yZWdzID0gLTE7CisjZW5kaWYKKyAMCisgCisvKiBGZXRjaCByZWdpc3Rl
ciBSRUdOVU0gZnJvbSB0aGUgaW5mZXJpb3IuICBJZiBSRUdOVU0gaXMgLTEsIGRvIHRoaXMKKyAg
IGZvciBhbGwgcmVnaXN0ZXJzIChpbmNsdWRpbmcgdGhlIGZsb2F0aW5nIHBvaW50IHJlZ2lzdGVy
cykuICAqLworCitzdGF0aWMgdm9pZAoraTM4Nm5ic2RfZmV0Y2hfaW5mZXJpb3JfcmVnaXN0ZXJz
IChpbnQgcmVnbnVtKQoreworICBpZiAocmVnbnVtID09IC0xIHx8IEdFVFJFR1NfU1VQUExJRVMg
KHJlZ251bSkpCisgICAgeworICAgICAgc3RydWN0IHJlZyByZWdzOworCisgICAgICBpZiAocHRy
YWNlIChQVF9HRVRSRUdTLCBQSURHRVQgKGluZmVyaW9yX3B0aWQpLAorCQkgIChQVFJBQ0VfVFlQ
RV9BUkczKSAmcmVncywgVElER0VUIChpbmZlcmlvcl9wdGlkKSkgPT0gLTEpCisJcGVycm9yX3dp
dGhfbmFtZSAoXygiQ291bGRuJ3QgZ2V0IHJlZ2lzdGVycyIpKTsKKworICAgICAgaWYgKGRlYnVn
X25ic2RfdGhyZWFkKQorCXsKKwkgIGlmIChyZWdudW0gPT0gLTEpCisJICAgIGZwcmludGZfdW5m
aWx0ZXJlZCAoZ2RiX3N0ZGxvZywKKwkJCQkiTkZJUjogcHRpZCAlZCwlbGQsIHJlZ251bSAlZFxu
IiwKKwkJCQlQSURHRVQgKGluZmVyaW9yX3B0aWQpLCBUSURHRVQgKGluZmVyaW9yX3B0aWQpLAor
CQkJCXJlZ251bSk7CisJICBlbHNlCisJICAgIGZwcmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxv
ZywKKwkJCQkiTkZJUjogcHRpZCAlZCwlbGQsIHJlZ251bSAlZDogJXhcbiIsCisJCQkJUElER0VU
IChpbmZlcmlvcl9wdGlkKSwgVElER0VUIChpbmZlcmlvcl9wdGlkKSwKKwkJCQlyZWdudW0sICgo
aW50ICopICZyZWdzKVtyZWdudW1dKTsKKwl9CisKKyAgICAgIGkzODZic2Rfc3VwcGx5X2dyZWdz
ZXQgKGN1cnJlbnRfcmVnY2FjaGUsICZyZWdzKTsKKyAgICAgIGlmIChyZWdudW0gIT0gLTEpCisJ
cmV0dXJuOworICAgIH0KKworICBpZiAocmVnbnVtID09IC0xIHx8IHJlZ251bSA+PSBJMzg2X1NU
MF9SRUdOVU0pCisgICAgeworICAgICAgc3RydWN0IGZwcmVnIGZwcmVnczsKKyNpZmRlZiBIQVZF
X1BUX0dFVFhNTVJFR1MKKyAgICAgIGNoYXIgeG1tcmVnc1s1MTJdOworCisgICAgICBpZiAoaGF2
ZV9wdHJhY2VfeG1tcmVncyAhPSAwCisJICAmJiBwdHJhY2UoUFRfR0VUWE1NUkVHUywgUElER0VU
IChpbmZlcmlvcl9wdGlkKSwKKwkJICAgIChQVFJBQ0VfVFlQRV9BUkczKSB4bW1yZWdzLCBUSURH
RVQgKGluZmVyaW9yX3B0aWQpKSA9PSAwKQorCXsKKwkgIGhhdmVfcHRyYWNlX3htbXJlZ3MgPSAx
OworCSAgaTM4N19zdXBwbHlfZnhzYXZlIChjdXJyZW50X3JlZ2NhY2hlLCAtMSwgeG1tcmVncyk7
CisJfQorICAgICAgZWxzZQorCXsKKyAgICAgICAgICBpZiAocHRyYWNlIChQVF9HRVRGUFJFR1Ms
IFBJREdFVCAoaW5mZXJpb3JfcHRpZCksCisJCSAgICAgIChQVFJBQ0VfVFlQRV9BUkczKSAmZnBy
ZWdzLCBUSURHRVQgKGluZmVyaW9yX3B0aWQpKSA9PSAtMSkKKwkgICAgcGVycm9yX3dpdGhfbmFt
ZSAoXygiQ291bGRuJ3QgZ2V0IGZsb2F0aW5nIHBvaW50IHN0YXR1cyIpKTsKKworCSAgaTM4N19z
dXBwbHlfZnNhdmUgKGN1cnJlbnRfcmVnY2FjaGUsIC0xLCAmZnByZWdzKTsKKwl9CisjZWxzZQor
ICAgICAgaWYgKHB0cmFjZSAoUFRfR0VURlBSRUdTLCBQSURHRVQgKGluZmVyaW9yX3B0aWQpLAor
CQkgIChQVFJBQ0VfVFlQRV9BUkczKSAmZnByZWdzLCBUSURHRVQgKGluZmVyaW9yX3B0aWQpKSA9
PSAtMSkKKwlwZXJyb3Jfd2l0aF9uYW1lIChfKCJDb3VsZG4ndCBnZXQgZmxvYXRpbmcgcG9pbnQg
c3RhdHVzIikpOworCisgICAgICBpMzg3X3N1cHBseV9mc2F2ZSAoY3VycmVudF9yZWdjYWNoZSwg
LTEsICZmcHJlZ3MpOworI2VuZGlmCisgICAgfQorfQorCisvKiBTdG9yZSByZWdpc3RlciBSRUdO
VU0gYmFjayBpbnRvIHRoZSBpbmZlcmlvci4gIElmIFJFR05VTSBpcyAtMSwgZG8KKyAgIHRoaXMg
Zm9yIGFsbCByZWdpc3RlcnMgKGluY2x1ZGluZyB0aGUgZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJz
KS4gICovCisKK3N0YXRpYyB2b2lkCitpMzg2bmJzZF9zdG9yZV9pbmZlcmlvcl9yZWdpc3RlcnMg
KGludCByZWdudW0pCit7CisgIGlmIChyZWdudW0gPT0gLTEgfHwgR0VUUkVHU19TVVBQTElFUyAo
cmVnbnVtKSkKKyAgICB7CisgICAgICBzdHJ1Y3QgcmVnIHJlZ3M7CisKKyAgICAgIGlmIChwdHJh
Y2UgKFBUX0dFVFJFR1MsIFBJREdFVCAoaW5mZXJpb3JfcHRpZCksCisgICAgICAgICAgICAgICAg
ICAoUFRSQUNFX1RZUEVfQVJHMykgJnJlZ3MsIFRJREdFVCAoaW5mZXJpb3JfcHRpZCkpID09IC0x
KQorICAgICAgICBwZXJyb3Jfd2l0aF9uYW1lIChfKCJDb3VsZG4ndCBnZXQgcmVnaXN0ZXJzIikp
OworCisgICAgICBpMzg2YnNkX2NvbGxlY3RfZ3JlZ3NldCAoY3VycmVudF9yZWdjYWNoZSwgJnJl
Z3MsIHJlZ251bSk7CisKKyAgICAgIGlmIChkZWJ1Z19uYnNkX3RocmVhZCkKKwl7CisJICBpZiAo
cmVnbnVtID09IC0xKQorCSAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJCQkJ
Ik5TSVI6IHB0aWQgJWQsJWxkLCByZWdudW0gJWRcbiIsCisJCQkJUElER0VUIChpbmZlcmlvcl9w
dGlkKSwgVElER0VUIChpbmZlcmlvcl9wdGlkKSwKKwkJCQlyZWdudW0pOworCSAgZWxzZQorCSAg
ICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJCQkJIk5TSVI6IHB0aWQgJWQsJWxk
LCByZWdudW0gJWQ6ICV4XG4iLAorCQkJCVBJREdFVCAoaW5mZXJpb3JfcHRpZCksIFRJREdFVCAo
aW5mZXJpb3JfcHRpZCksCisJCQkJcmVnbnVtLCAoKGludCAqKSAmcmVncylbcmVnbnVtXSk7CisJ
fQorICAgICAgCisgICAgICBpZiAocHRyYWNlIChQVF9TRVRSRUdTLCBQSURHRVQgKGluZmVyaW9y
X3B0aWQpLAorCSAgICAgICAgICAoUFRSQUNFX1RZUEVfQVJHMykgJnJlZ3MsIFRJREdFVCAoaW5m
ZXJpb3JfcHRpZCkpID09IC0xKQorICAgICAgICBwZXJyb3Jfd2l0aF9uYW1lIChfKCJDb3VsZG4n
dCB3cml0ZSByZWdpc3RlcnMiKSk7CisKKyAgICAgIGlmIChyZWdudW0gIT0gLTEpCisJcmV0dXJu
OworICAgIH0KKworICBpZiAocmVnbnVtID09IC0xIHx8IHJlZ251bSA+PSBJMzg2X1NUMF9SRUdO
VU0pCisgICAgeworICAgICAgc3RydWN0IGZwcmVnIGZwcmVnczsKKyNpZmRlZiBIQVZFX1BUX0dF
VFhNTVJFR1MKKyAgICAgIGNoYXIgeG1tcmVnc1s1MTJdOworCisgICAgICBpZiAoaGF2ZV9wdHJh
Y2VfeG1tcmVncyAhPSAwCisJICAmJiBwdHJhY2UoUFRfR0VUWE1NUkVHUywgUElER0VUIChpbmZl
cmlvcl9wdGlkKSwKKwkJICAgIChQVFJBQ0VfVFlQRV9BUkczKSB4bW1yZWdzLCBUSURHRVQgKGlu
ZmVyaW9yX3B0aWQpKSA9PSAwKQorCXsKKwkgIGhhdmVfcHRyYWNlX3htbXJlZ3MgPSAxOworCisJ
ICBpMzg3X2NvbGxlY3RfZnhzYXZlIChjdXJyZW50X3JlZ2NhY2hlLCByZWdudW0sIHhtbXJlZ3Mp
OworCisJICBpZiAocHRyYWNlIChQVF9TRVRYTU1SRUdTLCBQSURHRVQgKGluZmVyaW9yX3B0aWQp
LAorCQkgICAgICAoUFRSQUNFX1RZUEVfQVJHMykgeG1tcmVncywgVElER0VUIChpbmZlcmlvcl9w
dGlkKSkgPT0gLTEpCisgICAgICAgICAgICBwZXJyb3Jfd2l0aF9uYW1lIChfKCJDb3VsZG4ndCB3
cml0ZSBYTU0gcmVnaXN0ZXJzIikpOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBoYXZlX3B0cmFj
ZV94bW1yZWdzID0gMDsKKyNlbmRpZgorICAgICAgICAgIGlmIChwdHJhY2UgKFBUX0dFVEZQUkVH
UywgUElER0VUIChpbmZlcmlvcl9wdGlkKSwKKwkJICAgICAgKFBUUkFDRV9UWVBFX0FSRzMpICZm
cHJlZ3MsIFRJREdFVCAoaW5mZXJpb3JfcHRpZCkpID09IC0xKQorCSAgICBwZXJyb3Jfd2l0aF9u
YW1lIChfKCJDb3VsZG4ndCBnZXQgZmxvYXRpbmcgcG9pbnQgc3RhdHVzIikpOworCisgICAgICAg
ICAgaTM4N19jb2xsZWN0X2ZzYXZlIChjdXJyZW50X3JlZ2NhY2hlLCByZWdudW0sICZmcHJlZ3Mp
OworCisgICAgICAgICAgaWYgKHB0cmFjZSAoUFRfU0VURlBSRUdTLCBQSURHRVQgKGluZmVyaW9y
X3B0aWQpLAorCQkgICAgICAoUFRSQUNFX1RZUEVfQVJHMykgJmZwcmVncywgVElER0VUIChpbmZl
cmlvcl9wdGlkKSkgPT0gLTEpCisJICAgIHBlcnJvcl93aXRoX25hbWUgKF8oIkNvdWxkbid0IHdy
aXRlIGZsb2F0aW5nIHBvaW50IHN0YXR1cyIpKTsKKyNpZmRlZiBIQVZFX1BUX0dFVFhNTVJFR1MK
KyAgICAgICAgfQorI2VuZGlmCisgICAgfQorfQorCisMCisKIC8qIFByb3ZpZGUgYSBwcm90b3R5
cGUgdG8gc2lsZW5jZSAtV21pc3NpbmctcHJvdG90eXBlcy4gICovCiB2b2lkIF9pbml0aWFsaXpl
X2kzODZuYnNkX25hdCAodm9pZCk7CiAKQEAgLTEwOSw3ICsyNjksMTAgQEAKIAogICAvKiBBZGQg
c29tZSBleHRyYSBmZWF0dXJlcyB0byB0aGUgY29tbW9uICpCU0QvaTM4NiB0YXJnZXQuICAqLwog
ICB0ID0gaTM4NmJzZF90YXJnZXQgKCk7CisgIGluaXRfbmJzZF90aHJlYWRfb3BzICh0KTsKICAg
dC0+dG9fcGlkX3RvX2V4ZWNfZmlsZSA9IG5ic2RfcGlkX3RvX2V4ZWNfZmlsZTsKKyAgdC0+dG9f
ZmV0Y2hfcmVnaXN0ZXJzID0gaTM4Nm5ic2RfZmV0Y2hfaW5mZXJpb3JfcmVnaXN0ZXJzOworICB0
LT50b19zdG9yZV9yZWdpc3RlcnMgPSBpMzg2bmJzZF9zdG9yZV9pbmZlcmlvcl9yZWdpc3RlcnM7
ICAKICAgYWRkX3RhcmdldCAodCk7CiAKICAgLyogU3VwcG9ydCBkZWJ1Z2dpbmcga2VybmVsIHZp
cnR1YWwgbWVtb3J5IGltYWdlcy4gICovCi0tLSAuL2dudS91c3IuYmluL2dkYjYvYXJjaC9pMzg2
L2RlZnMubWsub3JpZwkyMDA2LTExLTI1IDExOjM4OjUxLjAwMDAwMDAwMCAtMDUwMAorKysgLi9n
bnUvdXNyLmJpbi9nZGI2L2FyY2gvaTM4Ni9kZWZzLm1rCTIwMTAtMDQtMTkgMTM6NDU6MTEuMDAw
MDAwMDAwIC0wNDAwCkBAIC0zLDUgKzMsNSBAQAogIyBHZW5lcmF0ZWQgZnJvbTogTmV0QlNEOiBt
a25hdGl2ZS5jb21tb24sdiAxLjggMjAwNi8wNS8yNiAxOToxNzoyMSBtcmcgRXhwIAogIwogR19J
TlRFUk5BTF9DRkxBR1M9ICAgICAtSS4gLUkke0dOVUhPU1RESVNUfS9nZGIgLUkke0dOVUhPU1RE
SVNUfS9nZGIvY29uZmlnIC1ETE9DQUxFRElSPSJcIi91c3Ivc2hhcmUvbG9jYWxlXCIiIC1ESEFW
RV9DT05GSUdfSCAtSSR7R05VSE9TVERJU1R9L2dkYi8uLi9pbmNsdWRlL29wY29kZSAtSSR7R05V
SE9TVERJU1R9L2dkYi8uLi9yZWFkbGluZS8uLiAgLUkuLi9iZmQgLUkke0dOVUhPU1RESVNUfS9n
ZGIvLi4vYmZkIC1JJHtHTlVIT1NURElTVH0vZ2RiLy4uL2luY2x1ZGUgIC1JLi4vaW50bCAtSSR7
R05VSE9TVERJU1R9L2dkYi8uLi9pbnRsICAtRE1JX09VVD0xIC1EVFVJPTEgLVdpbXBsaWNpdCAt
V3JldHVybi10eXBlIC1XY29tbWVudCAtV3RyaWdyYXBocyAtV2Zvcm1hdCAtV3BhcmVudGhlc2Vz
IC1XcG9pbnRlci1hcml0aCAtV2Zvcm1hdC1ub25saXRlcmFsIC1XdW51c2VkLWxhYmVsIC1XdW51
c2VkLWZ1bmN0aW9uIC1Xbm8tcG9pbnRlci1zaWduIAotR19MSUJHREJfT0JTPWkzODYtdGRlcC5v
IGkzODctdGRlcC5vIGkzODZic2QtdGRlcC5vIGkzODZuYnNkLXRkZXAubyBuYnNkLXRkZXAubyAg
Y29yZWxvdy5vIHNvbGliLm8gc29saWItc3ZyNC5vIHNlci1iYXNlLm8gc2VyLXVuaXgubyBzZXIt
cGlwZS5vIHNlci10Y3AubyBmb3JrLWNoaWxkLm8gaW5mLXB0cmFjZS5vICBuYnNkLW5hdC5vIGkz
ODZic2QtbmF0Lm8gaTM4Nm5ic2QtbmF0Lm8gYnNkLWt2bS5vICByZW1vdGUubyBkY2FjaGUubyBy
ZW1vdGUtdXRpbHMubyB0cmFjZXBvaW50Lm8gYXgtZ2VuZXJhbC5vIGF4LWdkYi5vIHJlbW90ZS1m
aWxlaW8ubyAgY2xpLWR1bXAubyAgY2xpLWRlY29kZS5vIGNsaS1zY3JpcHQubyBjbGktY21kcy5v
IGNsaS1zZXRzaG93Lm8gY2xpLXV0aWxzLm8gIGNsaS1sb2dnaW5nLm8gIGNsaS1pbnRlcnAubyBt
aS1vdXQubyBtaS1jb25zb2xlLm8gIG1pLWNtZHMubyBtaS1jbWQtZW52Lm8gbWktY21kLXZhci5v
IG1pLWNtZC1icmVhay5vIG1pLWNtZC1zdGFjay5vICBtaS1jbWQtZmlsZS5vIG1pLWNtZC1kaXNh
cy5vIG1pLXN5bWJvbC1jbWRzLm8gIG1pLWludGVycC5vICBtaS1tYWluLm8gbWktcGFyc2UubyBt
aS1nZXRvcHQubyBtaS1jb21tb24ubyBwb3NpeC1oZGVwLm8gdHVpLWNvbW1hbmQubyAgdHVpLWRh
dGEubyAgdHVpLWRpc2FzbS5vICB0dWktZmlsZS5vIHR1aS5vICB0dWktaG9va3MubyAgdHVpLWlu
dGVycC5vICB0dWktaW8ubyAgdHVpLWxheW91dC5vICB0dWktb3V0Lm8gIHR1aS1yZWdzLm8gIHR1
aS1zb3VyY2UubyAgdHVpLXN0YWNrLm8gIHR1aS13aW4ubyAgdHVpLXdpbmRhdGEubyAgdHVpLXdp
bmdlbmVyYWwubyAgdHVpLXdpbnNvdXJjZS5vIGMtZXhwLm8gIGNwLW5hbWUtcGFyc2VyLm8gIG9i
amMtZXhwLm8gIGFkYS1leHAubyAganYtZXhwLm8gIGYtZXhwLm8gbTItZXhwLm8gcC1leHAubyAg
dmVyc2lvbi5vICBhbm5vdGF0ZS5vICBhdXh2Lm8gIGJmZC10YXJnZXQubyAgYmxvY2tmcmFtZS5v
IGJyZWFrcG9pbnQubyBmaW5kdmFyLm8gcmVnY2FjaGUubyAgY2hhcnNldC5vIGRpc2FzbS5vIGR1
bW15LWZyYW1lLm8gIHNvdXJjZS5vIHZhbHVlLm8gZXZhbC5vIHZhbG9wcy5vIHZhbGFyaXRoLm8g
dmFscHJpbnQubyBwcmludGNtZC5vICBibG9jay5vIHN5bXRhYi5vIHN5bWZpbGUubyBzeW1taXNj
Lm8gbGluZXNwZWMubyBkaWN0aW9uYXJ5Lm8gIGluZmNhbGwubyAgaW5mY21kLm8gaW5mcnVuLm8g
IGV4cHByaW50Lm8gZW52aXJvbi5vIHN0YWNrLm8gdGhyZWFkLm8gIGV4Y2VwdGlvbnMubyAgaW5m
LWNoaWxkLm8gIGludGVycHMubyAgbWFpbi5vICBtYWNyb3RhYi5vIG1hY3JvY21kLm8gbWFjcm9l
eHAubyBtYWNyb3Njb3BlLm8gIGV2ZW50LWxvb3AubyBldmVudC10b3AubyBpbmYtbG9vcC5vIGNv
bXBsZXRlci5vICBnZGJhcmNoLm8gYXJjaC11dGlscy5vIGdkYnR5cGVzLm8gb3NhYmkubyBjb3B5
aW5nLm8gIG1lbWF0dHIubyBtZW0tYnJlYWsubyB0YXJnZXQubyBwYXJzZS5vIGxhbmd1YWdlLm8g
YnVpbGRzeW0ubyAgc3RkLXJlZ3MubyAgc2lnbmFscy5vICBrb2QubyBrb2QtY2lzY28ubyAgZ2Ri
LWV2ZW50cy5vICBleGVjLm8gYmNhY2hlLm8gb2JqZmlsZXMubyBvYnNlcnZlci5vIG1pbnN5bXMu
byBtYWludC5vIGRlbWFuZ2xlLm8gIGRieHJlYWQubyBjb2ZmcmVhZC5vIGNvZmYtcGUtcmVhZC5v
IGVsZnJlYWQubyAgZHdhcmZyZWFkLm8gZHdhcmYycmVhZC5vIG1pcHNyZWFkLm8gc3RhYnNyZWFk
Lm8gY29yZWZpbGUubyAgZHdhcmYyZXhwci5vIGR3YXJmMmxvYy5vIGR3YXJmMi1mcmFtZS5vICBh
ZGEtbGFuZy5vIGMtbGFuZy5vIGYtbGFuZy5vIG9iamMtbGFuZy5vICB1aS1vdXQubyBjbGktb3V0
Lm8gIHZhcm9iai5vIHdyYXBwZXIubyAganYtbGFuZy5vIGp2LXZhbHByaW50Lm8ganYtdHlwZXBy
aW50Lm8gIG0yLWxhbmcubyBwLWxhbmcubyBwLXR5cGVwcmludC5vIHAtdmFscHJpbnQubyAgc2Nt
LWV4cC5vIHNjbS1sYW5nLm8gc2NtLXZhbHByaW50Lm8gIHNlbnRpbmVsLWZyYW1lLm8gIGNvbXBs
YWludHMubyB0eXBlcHJpbnQubyAgYWRhLXR5cGVwcmludC5vIGMtdHlwZXByaW50Lm8gZi10eXBl
cHJpbnQubyBtMi10eXBlcHJpbnQubyAgYWRhLXZhbHByaW50Lm8gYy12YWxwcmludC5vIGNwLXZh
bHByaW50Lm8gZi12YWxwcmludC5vIG0yLXZhbHByaW50Lm8gIG5sbXJlYWQubyBzZXJpYWwubyBt
ZGVidWdyZWFkLm8gdG9wLm8gdXRpbHMubyAgdWktZmlsZS5vICB1c2VyLXJlZ3MubyAgZnJhbWUu
byBmcmFtZS11bndpbmQubyBkb3VibGVzdC5vICBmcmFtZS1iYXNlLm8gIGdudS12Mi1hYmkubyBn
bnUtdjMtYWJpLm8gaHBhY2MtYWJpLm8gY3AtYWJpLm8gY3Atc3VwcG9ydC5vICBjcC1uYW1lc3Bh
Y2UubyAgcmVnZ3JvdXBzLm8gcmVnc2V0Lm8gIHRyYWQtZnJhbWUubyAgdHJhbXAtZnJhbWUubyAg
c29saWIubyBzb2xpYi1udWxsLm8gIHByb2xvZ3VlLXZhbHVlLm8gaW5mbG93Lm8gICAgaW5pdC5v
CitHX0xJQkdEQl9PQlM9aTM4Ni10ZGVwLm8gaTM4Ny10ZGVwLm8gaTM4NmJzZC10ZGVwLm8gaTM4
Nm5ic2QtdGRlcC5vIG5ic2QtdGRlcC5vICBjb3JlbG93Lm8gc29saWIubyBzb2xpYi1zdnI0Lm8g
c2VyLWJhc2UubyBzZXItdW5peC5vIHNlci1waXBlLm8gc2VyLXRjcC5vIGZvcmstY2hpbGQubyBp
bmYtcHRyYWNlLm8gIG5ic2QtbmF0Lm8gbmJzZC10aHJlYWQubyBpMzg2YnNkLW5hdC5vIGkzODZu
YnNkLW5hdC5vIGJzZC1rdm0ubyAgcmVtb3RlLm8gZGNhY2hlLm8gcmVtb3RlLXV0aWxzLm8gdHJh
Y2Vwb2ludC5vIGF4LWdlbmVyYWwubyBheC1nZGIubyByZW1vdGUtZmlsZWlvLm8gIGNsaS1kdW1w
Lm8gIGNsaS1kZWNvZGUubyBjbGktc2NyaXB0Lm8gY2xpLWNtZHMubyBjbGktc2V0c2hvdy5vIGNs
aS11dGlscy5vICBjbGktbG9nZ2luZy5vICBjbGktaW50ZXJwLm8gbWktb3V0Lm8gbWktY29uc29s
ZS5vICBtaS1jbWRzLm8gbWktY21kLWVudi5vIG1pLWNtZC12YXIubyBtaS1jbWQtYnJlYWsubyBt
aS1jbWQtc3RhY2subyAgbWktY21kLWZpbGUubyBtaS1jbWQtZGlzYXMubyBtaS1zeW1ib2wtY21k
cy5vICBtaS1pbnRlcnAubyAgbWktbWFpbi5vIG1pLXBhcnNlLm8gbWktZ2V0b3B0Lm8gbWktY29t
bW9uLm8gcG9zaXgtaGRlcC5vIHR1aS1jb21tYW5kLm8gIHR1aS1kYXRhLm8gIHR1aS1kaXNhc20u
byAgdHVpLWZpbGUubyB0dWkubyAgdHVpLWhvb2tzLm8gIHR1aS1pbnRlcnAubyAgdHVpLWlvLm8g
IHR1aS1sYXlvdXQubyAgdHVpLW91dC5vICB0dWktcmVncy5vICB0dWktc291cmNlLm8gIHR1aS1z
dGFjay5vICB0dWktd2luLm8gIHR1aS13aW5kYXRhLm8gIHR1aS13aW5nZW5lcmFsLm8gIHR1aS13
aW5zb3VyY2UubyBjLWV4cC5vICBjcC1uYW1lLXBhcnNlci5vICBvYmpjLWV4cC5vICBhZGEtZXhw
Lm8gIGp2LWV4cC5vICBmLWV4cC5vIG0yLWV4cC5vIHAtZXhwLm8gIHZlcnNpb24ubyAgYW5ub3Rh
dGUubyAgYXV4di5vICBiZmQtdGFyZ2V0Lm8gIGJsb2NrZnJhbWUubyBicmVha3BvaW50Lm8gZmlu
ZHZhci5vIHJlZ2NhY2hlLm8gIGNoYXJzZXQubyBkaXNhc20ubyBkdW1teS1mcmFtZS5vICBzb3Vy
Y2UubyB2YWx1ZS5vIGV2YWwubyB2YWxvcHMubyB2YWxhcml0aC5vIHZhbHByaW50Lm8gcHJpbnRj
bWQubyAgYmxvY2subyBzeW10YWIubyBzeW1maWxlLm8gc3ltbWlzYy5vIGxpbmVzcGVjLm8gZGlj
dGlvbmFyeS5vICBpbmZjYWxsLm8gIGluZmNtZC5vIGluZnJ1bi5vICBleHBwcmludC5vIGVudmly
b24ubyBzdGFjay5vIHRocmVhZC5vICBleGNlcHRpb25zLm8gIGluZi1jaGlsZC5vICBpbnRlcnBz
Lm8gIG1haW4ubyAgbWFjcm90YWIubyBtYWNyb2NtZC5vIG1hY3JvZXhwLm8gbWFjcm9zY29wZS5v
ICBldmVudC1sb29wLm8gZXZlbnQtdG9wLm8gaW5mLWxvb3AubyBjb21wbGV0ZXIubyAgZ2RiYXJj
aC5vIGFyY2gtdXRpbHMubyBnZGJ0eXBlcy5vIG9zYWJpLm8gY29weWluZy5vICBtZW1hdHRyLm8g
bWVtLWJyZWFrLm8gdGFyZ2V0Lm8gcGFyc2UubyBsYW5ndWFnZS5vIGJ1aWxkc3ltLm8gIHN0ZC1y
ZWdzLm8gIHNpZ25hbHMubyAga29kLm8ga29kLWNpc2NvLm8gIGdkYi1ldmVudHMubyAgZXhlYy5v
IGJjYWNoZS5vIG9iamZpbGVzLm8gb2JzZXJ2ZXIubyBtaW5zeW1zLm8gbWFpbnQubyBkZW1hbmds
ZS5vICBkYnhyZWFkLm8gY29mZnJlYWQubyBjb2ZmLXBlLXJlYWQubyBlbGZyZWFkLm8gIGR3YXJm
cmVhZC5vIGR3YXJmMnJlYWQubyBtaXBzcmVhZC5vIHN0YWJzcmVhZC5vIGNvcmVmaWxlLm8gIGR3
YXJmMmV4cHIubyBkd2FyZjJsb2MubyBkd2FyZjItZnJhbWUubyAgYWRhLWxhbmcubyBjLWxhbmcu
byBmLWxhbmcubyBvYmpjLWxhbmcubyAgdWktb3V0Lm8gY2xpLW91dC5vICB2YXJvYmoubyB3cmFw
cGVyLm8gIGp2LWxhbmcubyBqdi12YWxwcmludC5vIGp2LXR5cGVwcmludC5vICBtMi1sYW5nLm8g
cC1sYW5nLm8gcC10eXBlcHJpbnQubyBwLXZhbHByaW50Lm8gIHNjbS1leHAubyBzY20tbGFuZy5v
IHNjbS12YWxwcmludC5vICBzZW50aW5lbC1mcmFtZS5vICBjb21wbGFpbnRzLm8gdHlwZXByaW50
Lm8gIGFkYS10eXBlcHJpbnQubyBjLXR5cGVwcmludC5vIGYtdHlwZXByaW50Lm8gbTItdHlwZXBy
aW50Lm8gIGFkYS12YWxwcmludC5vIGMtdmFscHJpbnQubyBjcC12YWxwcmludC5vIGYtdmFscHJp
bnQubyBtMi12YWxwcmludC5vICBubG1yZWFkLm8gc2VyaWFsLm8gbWRlYnVncmVhZC5vIHRvcC5v
IHV0aWxzLm8gIHVpLWZpbGUubyAgdXNlci1yZWdzLm8gIGZyYW1lLm8gZnJhbWUtdW53aW5kLm8g
ZG91Ymxlc3QubyAgZnJhbWUtYmFzZS5vICBnbnUtdjItYWJpLm8gZ251LXYzLWFiaS5vIGhwYWNj
LWFiaS5vIGNwLWFiaS5vIGNwLXN1cHBvcnQubyAgY3AtbmFtZXNwYWNlLm8gIHJlZ2dyb3Vwcy5v
IHJlZ3NldC5vICB0cmFkLWZyYW1lLm8gIHRyYW1wLWZyYW1lLm8gIHNvbGliLm8gc29saWItbnVs
bC5vICBwcm9sb2d1ZS12YWx1ZS5vIGluZmxvdy5vICAgIGluaXQubwogR19TSU1fT0JTPQo=
------_=_NextPart_001_01CAE22F.094CA314--
Home |
Main Index |
Thread Index |
Old Index