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>
Subject: RE: bin/30756: gdb not usable for live debugging of threaded programs
Date: Mon, 19 Apr 2010 15:02:03 -0400
This is a multi-part message in MIME format.
------_=_NextPart_001_01CADFF2.CC0C5CAC
Content-Type: text/plain;
charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
The fix for kern/43128 adds the missing kernel bits for GDB to support
threaded program debugging. The other part needed is changes to GDB
itself.
Attached is a patch that does this, tested on i386 against the GDB 6.5
sources that are in NetBSD 5.0. I intend to submit this to the GDB
project as well but was asked to provide a patch against the GDB rev
that is currently in NetBSD.
There is a patched mipsnbsd-nat.c as well as common and i386 specific
files, but I did not make the build file changes for that so that file
is untested. I also did not look at any other platforms. The changes
should be straightforward using the mips and i386 examples as the
starting point, but since I have no way to test them I did not want to
attempt changes for any other targets.
Comments appreciated.
paul
------_=_NextPart_001_01CADFF2.CC0C5CAC
Content-Type: application/octet-stream;
name="gdbthreads-650.diff"
Content-Transfer-Encoding: base64
Content-Description: gdbthreads-650.diff
Content-Disposition: attachment;
filename="gdbthreads-650.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
MjAxMC0wNC0xOSAxNDo1MDowMi4wMDAwMDAwMDAgLTA0MDAKQEAgLTAsMCArMSw3MTEgQEAKKy8q
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
KSwKKwkJCSAgICAgIHNhZmVfc3RyZXJyb3IgKHNhdmVfZXJybm8pKTsKKworCSAgLyogQ2xhaW0g
aXQgZXhpdGVkIHdpdGggdW5rbm93biBzaWduYWwuICAqLworCSAgb3Vyc3RhdHVzLT5raW5kID0g
VEFSR0VUX1dBSVRLSU5EX1NJR05BTExFRDsKKwkgIG91cnN0YXR1cy0+dmFsdWUuc2lnID0gVEFS
R0VUX1NJR05BTF9VTktOT1dOOworCSAgcmV0dXJuIGluZmVyaW9yX3B0aWQ7CisJfQorCisgICAg
ICAvKiBJZ25vcmUgdGVybWluYXRlZCBkZXRhY2hlZCBjaGlsZCBwcm9jZXNzZXMuICAqLworICAg
ICAgaWYgKCFXSUZTVE9QUEVEIChzdGF0dXMpICYmIHBpZCAhPSBwdGlkX2dldF9waWQgKGluZmVy
aW9yX3B0aWQpKQorCXBpZCA9IC0xOworICAgIH0KKyAgd2hpbGUgKHBpZCA9PSAtMSk7CisKKyAg
c3RvcmVfd2FpdHN0YXR1cyAob3Vyc3RhdHVzLCBzdGF0dXMpOworICByZXR1cm4gcGlkX3RvX3B0
aWQgKHBpZCk7Cit9CisKK3N0YXRpYyBpbnQKK25ic2RfdGhyZWFkX2NhbmNlbF9icmVha3BvaW50
IChzdHJ1Y3QgbHdwX2luZm8gKmxwKQoreworICAvKiBBcnJhbmdlIGZvciBhIGJyZWFrcG9pbnQg
dG8gYmUgaGl0IGFnYWluIGxhdGVyLiAgV2UgZG9uJ3Qga2VlcAorICAgICB0aGUgU0lHVFJBUCBz
dGF0dXMgYW5kIGRvbid0IGZvcndhcmQgdGhlIFNJR1RSQVAgc2lnbmFsIHRvIHRoZQorICAgICBM
V1AuICBXZSB3aWxsIGhhbmRsZSB0aGUgY3VycmVudCBldmVudCwgZXZlbnR1YWxseSB3ZSB3aWxs
IHJlc3VtZQorICAgICB0aGlzIExXUCwgYW5kIHRoaXMgYnJlYWtwb2ludCB3aWxsIHRyYXAgYWdh
aW4uCisKKyAgICAgSWYgd2UgZG8gbm90IGRvIHRoaXMsIHRoZW4gd2UgcnVuIHRoZSByaXNrIHRo
YXQgdGhlIHVzZXIgd2lsbAorICAgICBkZWxldGUgb3IgZGlzYWJsZSB0aGUgYnJlYWtwb2ludCwg
YnV0IHRoZSBMV1Agd2lsbCBoYXZlIGFscmVhZHkKKyAgICAgdHJpcHBlZCBvbiBpdC4gICovCisK
KyAgaWYgKGxwLT53YWl0c3RhdHVzLmtpbmQgID09IFRBUkdFVF9XQUlUS0lORF9TVE9QUEVECisg
ICAgICAmJiBscC0+d2FpdHN0YXR1cy52YWx1ZS5zaWcgPT0gU0lHVFJBUAorICAgICAgJiYgYnJl
YWtwb2ludF9pbnNlcnRlZF9oZXJlX3AgKHJlYWRfcGNfcGlkIChscC0+cHRpZCkgLQorCQkJCSAg
ICAgREVDUl9QQ19BRlRFUl9CUkVBSykpCisgICAgeworICAgICAgaWYgKGRlYnVnX25ic2RfdGhy
ZWFkKQorCWZwcmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywKKwkJCSAgICAiTlRDQjogUHVz
aCBiYWNrIGJyZWFrcG9pbnQgZm9yIHB0aWQgJWQsJWxkXG4iLAorCQkJICAgIFBJREdFVCAobHAt
PnB0aWQpLCBUSURHRVQgKGxwLT5wdGlkKSk7CisKKyAgICAgIC8qIEJhY2sgdXAgdGhlIFBDIGlm
IG5lY2Vzc2FyeS4gICovCisgICAgICBpZiAoREVDUl9QQ19BRlRFUl9CUkVBSykKKwl3cml0ZV9w
Y19waWQgKHJlYWRfcGNfcGlkIChscC0+cHRpZCkgLSBERUNSX1BDX0FGVEVSX0JSRUFLLCBscC0+
cHRpZCk7CisKKyAgICAgIC8qIFdlIG5vIGxvbmdlciBoYXZlIGEgcGVuZGluZyBzaWduYWwgZm9y
IHRoaXMgdGhyZWFkLiAgKi8KKyAgICAgIGxwLT5zaWduYWxsZWQgPSAwOworCisgICAgICAvKiBO
b3QgYSBwZW5kaW5nIHNpZ25hbCBhbnltb3JlLiAgKi8KKyAgICAgIHJldHVybiAxOworICAgIH0K
KyAgcmV0dXJuIDA7Cit9CisKKy8qIFRoZSAidG9fd2FpdCIgbWV0aG9kIG9mIHRoZSBuYnNkX3Ro
cmVhZF9vcHMuICAqLworCitzdGF0aWMgcHRpZF90CituYnNkX3RocmVhZF93YWl0IChwdGlkX3Qg
cHRpZCwgc3RydWN0IHRhcmdldF93YWl0c3RhdHVzICpzdGF0dXMpCit7CisgIHB0aWRfdCBhY3Rp
dmVfcHRpZDsKKyAgc3RydWN0IGx3cF9pbmZvICpzZWxfdGhyZWFkOworICBpbnQgc2lnX3RocmVh
ZHMsIGk7CisgIHN0cnVjdCB0YXJnZXRfd2FpdHN0YXR1cyB0c3RhdHVzOworCisgIC8qIElmIHRo
ZXJlIHdlcmUgcGVuZGluZyBzaWduYWxzIGFuZCBhIHJlc3VtZSBhbGwgdGhyZWFkcyB3YXMgZG9u
ZSwKKyAgICAgdGhlIHByb2Nlc3Mgd2Fzbid0IGFjdHVhbGx5IHJlc3VtZWQgc28gZG9uJ3Qgd2Fp
dCBvbiBpdC4gIEp1c3QKKyAgICAgZ28gb24gdG8gcGljayBhIHRocmVhZCB0byByZXBvcnQgb24u
ICAqLworICBpZiAoIShwZW5kaW5nX3NpZ3MgPiAwICYmIHJlc3VtZV9hbGwpKQorICAgIHsKKyAg
ICAgIHB0aWQgPSBuYnNkX3RocmVhZF93YWl0MiAocHRpZCwgJnRzdGF0dXMsIDApOworCisgICAg
ICAvKiBEZWZhdWx0IHN0YXR1cyByZXR1cm5lZCBpcyB0aGUgb25lIHdlIGp1c3QgZ290LiAgKi8K
KyAgICAgICpzdGF0dXMgPSB0c3RhdHVzOworICAgICAgCisgICAgICAvKiBUaGUgcHRpZCByZXR1
cm5lZCBieSB0aGUgdGFyZ2V0IGJlbmVhdGggdXMgaXMgdGhlIHB0aWQgb2YgdGhlIHByb2Nlc3Mu
CisJIFdlIG5lZWQgdG8gZmluZCB3aGljaCB0aHJlYWQgaXMgY3VycmVudGx5IGFjdGl2ZSBhbmQg
cmV0dXJuIAorCSBpdHMgcHRpZC4gICovCisgICAgICB1cGRhdGVfbHdwYnVmICgmdHN0YXR1cyk7
CisgIAorICAgICAgLyogTG9vcCBjaGVja2luZyBmb3IgYWRkaXRpb25hbCB0aHJlYWRzIHRoYXQg
YXJlIHdhaXRpbmcsIGFuZCBnYXRoZXIKKwkgdXAgdGhlaXIgc3RhdHVzLiAgKi8KKyAgICAgIHdo
aWxlICgxKQorCXsKKwkgIHB0aWQgPSBuYnNkX3RocmVhZF93YWl0MiAocHRpZCwgJnRzdGF0dXMs
IFdOT0hBTkcpOworCSAgaWYgKFBJREdFVCAocHRpZCkgPT0gLTEpCisJICAgIGJyZWFrOworCSAg
dXBkYXRlX2x3cGJ1ZiAoJnRzdGF0dXMpOworCX0KKyAgICB9CisgIAorICAvKiBGaW5kIGEgc3Vp
dGFibGUgc2lnbmFsbGVkIHRocmVhZC4gIFBpY2sgdGhlIHN0ZXBwZWQgb25lLCBpZiB0aGVyZQor
ICAgICBpcyBvbmU7IG90aGVyd2lzZSBwaWNrIGEgcmFuZG9tIG9uZS4gICovCisgIHNlbF90aHJl
YWQgPSBOVUxMOworICBzaWdfdGhyZWFkcyA9IDA7CisgIAorICBmb3IgKGkgPSAwOyBpIDwgbHdw
X2NvdW50OyBpKyspCisgICAgeworICAgICAgaWYgKGx3cF9idWZmZXJbaV0uc2lnbmFsbGVkKQor
CXsKKwkgIHNpZ190aHJlYWRzKys7CisJICBpZiAoVElER0VUIChsd3BfYnVmZmVyW2ldLnB0aWQp
ID09IHN0ZXBfbHdwaWQpCisJICAgIHsKKwkgICAgICAvKiBJZiB0aGVyZSBpcyBhIHN0ZXBwZWQg
dGhyZWFkLCBwaWNrIHRoYXQgb25lLiAgKi8KKwkgICAgICBzZWxfdGhyZWFkID0gJmx3cF9idWZm
ZXJbaV07CisJICAgICAgaWYgKGRlYnVnX25ic2RfdGhyZWFkKQorCQlmcHJpbnRmX3VuZmlsdGVy
ZWQgKGdkYl9zdGRsb2csCisJCQkJICAgICJOVFc6IFBpY2tpbmcgcHRpZCAlZCwlbGQgYmVjYXVz
ZSBpdCBpcyBzdGVwcGVkXG4iLAorCQkJCSAgICBQSURHRVQgKHNlbF90aHJlYWQtPnB0aWQpLAor
CQkJCSAgICBUSURHRVQgKHNlbF90aHJlYWQtPnB0aWQpKTsKKwkgICAgICBicmVhazsKKwkgICAg
fQorCSAgLyogUmFuZG9tbHkgcGljayB0aGlzIG9uZSBvciBrZWVwIHRoZSBwcmV2aW91cyBjaG9p
Y2UsCisJICAgICBzdWNoIHRoYXQgYWxsIG9mIHRoZSBzaWduYWxsZWQgdGhyZWFkcyBoYXZlIGFu
IGVxdWFsCisJICAgICBwcm9iYWJpbGl0eSBvZiBiZWluZyBwaWNrZWQuICAqLworCSAgaWYgKHNl
bF90aHJlYWQgPT0gTlVMTCB8fCAKKwkgICAgICAoKChkb3VibGUpIHJhbmQgKCkpIC8gKFJBTkRf
TUFYICsgMS4wKSkgPCAoMS4wIC8gc2lnX3RocmVhZHMpKQorCSAgICB7CisJICAgICAgc2VsX3Ro
cmVhZCA9ICZsd3BfYnVmZmVyW2ldOworCSAgICAgIGlmIChkZWJ1Z19uYnNkX3RocmVhZCkKKwkJ
ZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLAorCQkJCSAgICAiTlRXOiBQaWNraW5nIHB0
aWQgJWQsJWxkIG91dCBvZiAlZFxuIiwKKwkJCQkgICAgUElER0VUIChzZWxfdGhyZWFkLT5wdGlk
KSwKKwkJCQkgICAgVElER0VUIChzZWxfdGhyZWFkLT5wdGlkKSwgc2lnX3RocmVhZHMpOworCSAg
ICB9CisJfQorICAgIH0KKyAgCisgIC8qIFNjYW4gdGhlIExXUCB0YWJsZSBhZ2Fpbi4gIEZvciBl
YWNoIHNpZ25hbGxlZCBMV1Agb3RoZXIgdGhhbiB0aGUKKyAgICAgY2hvc2VuIG9uZSwgYmFjayBp
dCB1cCB0byB0aGUgYnJlYWtwb2ludCBpZiBpdCB3YXMgc3RvcHBlZCBieSBhCisgICAgIGJyZWFr
cG9pbnQgYW5kIG1hcmsgaXQgYXMgbm90IHNpZ25hbGxlZCAoaXQgd2lsbCByZS1icmVhayBuZXh0
CisgICAgIHRpbWUgd2UgcnVuIHRoZSB3aG9sZSBwcm9jZXNzKS4gIE90aGVyIExXUHMgKHRob3Nl
IHdpdGggc2lnbmFscworICAgICBvdGhlciB0aGFuIGJyZWFrcG9pbnQgc3RvcCkgYXJlIGNvdW50
ZWQgYnV0IG5vdCBiYWNrZWQgdXA7IGlmIHdlCisgICAgIGZpbmQgYW55IG9mIHRob3NlIHRoZW4g
dGhvc2Ugd2lsbCBiZSBkZWxpdmVyZWQgbmV4dC4gICovCisgIHBlbmRpbmdfc2lncyA9IDA7Cisg
IGlmIChzaWdfdGhyZWFkcyA+IDEpCisgICAgeworICAgICAgZm9yIChpID0gMDsgaSA8IGx3cF9j
b3VudDsgaSsrKQorCXsKKwkgIC8qIFNraXAgdGhlIHNlbGVjdGVkIExXUC4gICovCisJICBpZiAo
Jmx3cF9idWZmZXJbaV0gPT0gc2VsX3RocmVhZCkKKwkgICAgY29udGludWU7CisJICAKKwkgIGlm
IChsd3BfYnVmZmVyW2ldLnNpZ25hbGxlZCkKKwkgICAgeworCSAgICAgIGlmIChXSUZTVE9QUEVE
IChsd3BfYnVmZmVyW2ldLndhaXRzdGF0dXMpKQorCQl7CisJCSAgaWYgKCFuYnNkX3RocmVhZF9j
YW5jZWxfYnJlYWtwb2ludCAoJmx3cF9idWZmZXJbaV0pKQorCQkgICAgcGVuZGluZ19zaWdzKys7
CisJCX0KKwkgICAgICBlbHNlCisJCXBlbmRpbmdfc2lncysrOworCSAgICB9CisJfQorICAgIH0K
KyAgCisgIHB0aWQgPSBpbmZlcmlvcl9wdGlkOworICBpZiAoc2VsX3RocmVhZCAhPSBOVUxMKQor
ICAgIHsKKyAgICAgIHB0aWQgPSAgTUVSR0VQSUQgKFBJREdFVCAocHRpZCksIFRJREdFVCAoc2Vs
X3RocmVhZC0+cHRpZCkpOworICAgICAgKnN0YXR1cyA9IHRzdGF0dXM7CisgICAgICAKKyAgICAg
IC8qIFRoZSBzaWduYWwgZm9yIHRoaXMgdGhyZWFkIGlzIG5vdyBiZWluZyByZXBvcnRlZCwgc28g
Y2xlYXIKKwkgdGhlIGZsYWcgdGhhdCBzYXlzIGl0IGhhc24ndCBiZWVuIHJlcG9ydGVkIHlldC4g
ICovCisgICAgICBzZWxfdGhyZWFkLT5zaWduYWxsZWQgPSAwOworICAgIH0KKyAgZWxzZSBpZiAo
ZGVidWdfbmJzZF90aHJlYWQpCisgICAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLAor
CQkJIk5UVzogbm8gc2lnbmFsbGVkIHRocmVhZFxuIik7CisKKyAgaWYgKGRlYnVnX25ic2RfdGhy
ZWFkKQorICAgIGZwcmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywKKwkJCSJOVFc6IHJldHVy
bmluZyBwdGlkICVkLCVsZFxuIiwKKwkJCVBJREdFVCAocHRpZCksIFRJREdFVCAocHRpZCkpOwor
CisgIHJldHVybiBwdGlkOworfQorCisvKiBUaGUgInRvX21vdXJuX2luZmVyaW9yIiBtZXRob2Qg
b2YgdGhlIG5ic2RfdGhyZWFkX29wcy4gICovCisKK3N0YXRpYyB2b2lkCituYnNkX3RocmVhZF9t
b3Vybl9pbmZlcmlvciAodm9pZCkKK3sKKyAgaW50IHN0YXR1czsKKworICAvKiBXYWl0IGp1c3Qg
b25lIG1vcmUgdGltZSB0byBjb2xsZWN0IHRoZSBpbmZlcmlvcidzIGV4aXQgc3RhdHVzLgorICAg
ICBEbyBub3QgY2hlY2sgd2hldGhlciB0aGlzIHN1Y2NlZWRzIHRob3VnaCwgc2luY2Ugd2UgbWF5
IGJlCisgICAgIGRlYWxpbmcgd2l0aCBhIHByb2Nlc3MgdGhhdCB3ZSBhdHRhY2hlZCB0by4gIFN1
Y2ggYSBwcm9jZXNzIHdpbGwKKyAgICAgb25seSByZXBvcnQgaXRzIGV4aXQgc3RhdHVzIHRvIGl0
cyBvcmlnaW5hbCBwYXJlbnQuICAqLworICB3YWl0cGlkIChwdGlkX2dldF9waWQgKGluZmVyaW9y
X3B0aWQpLCAmc3RhdHVzLCBXTk9IQU5HKTsKKworICBnZW5lcmljX21vdXJuX2luZmVyaW9yICgp
OworCisgIC8qIGlmICghaGF2ZV9pbmZlcmlvcnMgKCkpICovCisgICAgdW5wdXNoX3RhcmdldCAo
Jm5ic2RfdGhyZWFkX29wcyk7Cit9CisKKworLyogVGhlICJ0b190aHJlYWRfYWxpdmUiIG1ldGhv
ZCBvZiB0aGUgbmJzZF90aHJlYWRfb3BzLiAgKi8KK3N0YXRpYyBpbnQKK25ic2RfdGhyZWFkX3Ro
cmVhZF9hbGl2ZSAocHRpZF90IHB0aWQpCit7CisgIC8qIFRoZSB0aHJlYWQgbGlzdCBtYWludGFp
bmVkIGJ5IEdEQiBpcyB1cCB0byBkYXRlLCBzaW5jZSB3ZSB1cGRhdGUKKyAgICAgaXQgZXZlcnl0
aW1lIHdlIHN0b3AuICAgU28gY2hlY2sgdGhpcyBsaXN0LiAgKi8KKyAgcmV0dXJuIGluX3RocmVh
ZF9saXN0IChwdGlkKTsKK30KKworLyogVGhlICJ0b19waWRfdG9fc3RyIiBtZXRob2Qgb2YgdGhl
IG5ic2RfdGhyZWFkX29wcy4gICovCisKK3N0YXRpYyBjaGFyICoKK25ic2RfdGhyZWFkX3BpZF90
b19zdHIgKHB0aWRfdCBwdGlkKQoreworICBpZiAoVElER0VUIChwdGlkKSA9PSAwKQorICAgIHsK
KyAgICAgIHJldHVybiBub3JtYWxfcGlkX3RvX3N0ciAocHRpZCk7CisgICAgfQorICByZXR1cm4g
eHN0cnByaW50ZiAoXygiVGhyZWFkICVsZCIpLCBUSURHRVQgKHB0aWQpKTsKK30KKworLyogVXBk
YXRlIHRoZSB0YXJnZXRfb3BzIHdpdGggb3VyIHRocmVhZCBtYWNoaW5lcnkuICAqLworCit2b2lk
Citpbml0X25ic2RfdGhyZWFkX29wcyAoc3RydWN0IHRhcmdldF9vcHMgKnQpCit7CisgIC8qIHQt
PnRvX2RldGFjaCAgICAgICAgICAgICA9IG5ic2RfdGhyZWFkX2RldGFjaDsgKi8KKyAgdC0+dG9f
cmVzdW1lICAgICAgICAgICAgID0gbmJzZF90aHJlYWRfcmVzdW1lOworICB0LT50b193YWl0ICAg
ICAgICAgICAgICAgPSBuYnNkX3RocmVhZF93YWl0OworICB0LT50b19tb3Vybl9pbmZlcmlvciAg
ICAgPSBuYnNkX3RocmVhZF9tb3Vybl9pbmZlcmlvcjsKKyAgdC0+dG9fdGhyZWFkX2FsaXZlICAg
ICAgID0gbmJzZF90aHJlYWRfdGhyZWFkX2FsaXZlOworICB0LT50b19waWRfdG9fc3RyICAgICAg
ICAgPSBuYnNkX3RocmVhZF9waWRfdG9fc3RyOworCisgIGVuYWJsZV9uYnNkX3RocmVhZCAoKTsK
K30KKwordm9pZAorX2luaXRpYWxpemVfbmJzZF90aHJlYWQgKHZvaWQpCit7CisjaWYgMAorICBp
bml0X25ic2RfdGhyZWFkX29wcyAoKTsKKyAgYWRkX3RhcmdldCAoJm5ic2RfdGhyZWFkX29wcyk7
CisjZW5kaWYKKworICBhZGRfc2V0c2hvd196aW50ZWdlcl9jbWQgKCJuYnNkLXRocmVhZCIsIGNs
YXNzX21haW50ZW5hbmNlLAorCQkJICAgICZkZWJ1Z19uYnNkX3RocmVhZCwgXygiXAorU2V0IGRl
YnVnZ2luZyBvZiBOZXRCU0QgdGhyZWFkIG1vZHVsZS4iKSwgXygiXAorU2hvdyBkZWJ1Z2dpbmcg
b2YgTmV0QlNEIHRocmVhZCBtb2R1bGUuIiksIF8oIlwKK0VuYWJsZXMgcHJpbnRmIGRlYnVnZ2lu
ZyBvdXRwdXQuIiksCisJCQkgICAgTlVMTCwKKwkJCSAgICBzaG93X2RlYnVnX25ic2RfdGhyZWFk
LAorCQkJICAgICZzZXRkZWJ1Z2xpc3QsICZzaG93ZGVidWdsaXN0KTsKK30KLS0tIC4vZ251L2Rp
c3QvZ2RiNi9nZGIvbmJzZC10aHJlYWQuaC5vcmlnCTIwMTAtMDQtMTkgMTE6NDM6MDUuMDAwMDAw
MDAwIC0wNDAwCisrKyAuL2dudS9kaXN0L2dkYjYvZ2RiL25ic2QtdGhyZWFkLmgJMjAxMC0wNC0x
OSAxMTo0MzowNS4wMDAwMDAwMDAgLTA0MDAKQEAgLTAsMCArMSwyNSBAQAorLyogVGhyZWFkcyBz
dXBwb3J0IGZvciBOZXRCU0QgNS4wLgorCisgICBDb3B5cmlnaHQgKEMpIDIwMTAgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIENvbnRyaWJ1dGVkIGJ5IFBhdWwgS29uaW5nLCBE
ZWxsLCBpbmMuCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdEQi4KKworICAgVGhpcyBwcm9n
cmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp
ZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAg
IGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3
YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworCitleHRlcm4gdm9pZCBpbml0
X25ic2RfdGhyZWFkX29wcyAoc3RydWN0IHRhcmdldF9vcHMgKnQpOworCi0tLSAuL2dudS9kaXN0
L2dkYjYvZ2RiL2kzODZic2QtbmF0LmMub3JpZwkyMDA3LTAyLTI0IDA4OjA1OjE4LjAwMDAwMDAw
MCAtMDUwMAorKysgLi9nbnUvZGlzdC9nZGI2L2dkYi9pMzg2YnNkLW5hdC5jCTIwMTAtMDQtMTkg
MTI6NDU6MDEuMDAwMDAwMDAwIC0wNDAwCkBAIC05MCw3ICs5MCw3IEBACiAKIC8qIFN1cHBseSB0
aGUgZ2VuZXJhbC1wdXJwb3NlIHJlZ2lzdGVycyBpbiBHUkVHUywgdG8gUkVHQ0FDSEUuICAqLwog
Ci1zdGF0aWMgdm9pZAordm9pZAogaTM4NmJzZF9zdXBwbHlfZ3JlZ3NldCAoc3RydWN0IHJlZ2Nh
Y2hlICpyZWdjYWNoZSwgY29uc3Qgdm9pZCAqZ3JlZ3MpCiB7CiAgIGNvbnN0IGNoYXIgKnJlZ3Mg
PSBncmVnczsKQEAgLTEwOSw3ICsxMDksNyBAQAogICAgR1JFR1MuICBJZiBSRUdOVU0gaXMgLTEs
IGNvbGxlY3QgYW5kIHN0b3JlIGFsbCBhcHByb3ByaWF0ZQogICAgcmVnaXN0ZXJzLiAgKi8KIAot
c3RhdGljIHZvaWQKK3ZvaWQKIGkzODZic2RfY29sbGVjdF9ncmVnc2V0IChjb25zdCBzdHJ1Y3Qg
cmVnY2FjaGUgKnJlZ2NhY2hlLAogCQkJIHZvaWQgKmdyZWdzLCBpbnQgcmVnbnVtKQogewotLS0g
Li9nbnUvZGlzdC9nZGI2L2dkYi9pMzg2YnNkLW5hdC5oLm9yaWcJMjAwNi0wNy0wMiAxNjoxNDox
NS4wMDAwMDAwMDAgLTA0MDAKKysrIC4vZ251L2Rpc3QvZ2RiNi9nZGIvaTM4NmJzZC1uYXQuaAky
MDEwLTA0LTE5IDExOjQzOjA1LjAwMDAwMDAwMCAtMDQwMApAQCAtMjcsNCArMjcsMTEgQEAKIAog
ZXh0ZXJuIHN0cnVjdCB0YXJnZXRfb3BzICppMzg2YnNkX3RhcmdldCAodm9pZCk7CiAKK2V4dGVy
biB2b2lkIGkzODZic2Rfc3VwcGx5X2dyZWdzZXQgKHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUs
IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqZ3JlZ3Mp
OworCitleHRlcm4gdm9pZCBpMzg2YnNkX2NvbGxlY3RfZ3JlZ3NldCAoY29uc3Qgc3RydWN0IHJl
Z2NhY2hlICpyZWdjYWNoZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
b2lkICpncmVncywgaW50IHJlZ251bSk7CisKKwogI2VuZGlmIC8qIGkzODZic2QtbmF0LmggKi8K
LS0tIC4vZ251L2Rpc3QvZ2RiNi9nZGIvaTM4Nm5ic2QtbmF0LmMub3JpZwkyMDA4LTAxLTI1IDA3
OjM1OjQ4LjAwMDAwMDAwMCAtMDUwMAorKysgLi9nbnUvZGlzdC9nZGI2L2dkYi9pMzg2bmJzZC1u
YXQuYwkyMDEwLTA0LTE5IDE0OjM1OjE2LjAwMDAwMDAwMCAtMDQwMApAQCAtMjAsMjIgKzIwLDI5
IEBACiAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCiAKICNpbmNsdWRlICJkZWZz
LmgiCisjaW5jbHVkZSAiaW5mZXJpb3IuaCIKICNpbmNsdWRlICJnZGJjb3JlLmgiCiAjaW5jbHVk
ZSAicmVnY2FjaGUuaCIKICNpbmNsdWRlICJ0YXJnZXQuaCIKIAogI2luY2x1ZGUgImkzODYtdGRl
cC5oIgorI2luY2x1ZGUgImkzODctdGRlcC5oIgogI2luY2x1ZGUgImkzODZic2QtbmF0LmgiCisj
aW5jbHVkZSAibmJzZC10aHJlYWQuaCIKIAogLyogU3VwcG9ydCBmb3IgZGVidWdnaW5nIGtlcm5l
bCB2aXJ0dWFsIG1lbW9yeSBpbWFnZXMuICAqLwogCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Cisj
aW5jbHVkZSA8c3lzL3B0cmFjZS5oPgorI2luY2x1ZGUgPG1hY2hpbmUvcmVnLmg+CiAjaW5jbHVk
ZSA8bWFjaGluZS9mcmFtZS5oPgogI2luY2x1ZGUgPG1hY2hpbmUvcGNiLmg+CiAKICNpbmNsdWRl
ICJuYnNkLW5hdC5oIgogI2luY2x1ZGUgImJzZC1rdm0uaCIKIAorZXh0ZXJuIGludCBkZWJ1Z19u
YnNkX3RocmVhZDsKKwogc3RhdGljIGludAogaTM4Nm5ic2Rfc3VwcGx5X3BjYiAoc3RydWN0IHJl
Z2NhY2hlICpyZWdjYWNoZSwgc3RydWN0IHBjYiAqcGNiKQogewpAQCAtOTksNiArMTA2LDE1OSBA
QAogfQogDAogCisKKy8qIE1hY3JvIHRvIGRldGVybWluZSBpZiBhIHJlZ2lzdGVyIGlzIGZldGNo
ZWQgd2l0aCBQVF9HRVRSRUdTLiAgKi8KKyNkZWZpbmUgR0VUUkVHU19TVVBQTElFUyhyZWdudW0p
IFwKKyAgKCgwIDw9IChyZWdudW0pICYmIChyZWdudW0pIDw9IDE1KSkKKworI2lmZGVmIEhBVkVf
UFRfR0VUWE1NUkVHUworLyogU2V0IHRvIDEgaWYgdGhlIGtlcm5lbCBzdXBwb3J0cyBQVF9HRVRY
TU1SRUdTLiAgSW5pdGlhbGl6ZWQgdG8gLTEKKyAgIHNvIHRoYXQgd2UgdHJ5IFBUX0dFVFhNTVJF
R1MgdGhlIGZpcnN0IHRpbWUgYXJvdW5kLiAgKi8KK3N0YXRpYyBpbnQgaGF2ZV9wdHJhY2VfeG1t
cmVncyA9IC0xOworI2VuZGlmCisgDAorIAorLyogRmV0Y2ggcmVnaXN0ZXIgUkVHTlVNIGZyb20g
dGhlIGluZmVyaW9yLiAgSWYgUkVHTlVNIGlzIC0xLCBkbyB0aGlzCisgICBmb3IgYWxsIHJlZ2lz
dGVycyAoaW5jbHVkaW5nIHRoZSBmbG9hdGluZyBwb2ludCByZWdpc3RlcnMpLiAgKi8KKworc3Rh
dGljIHZvaWQKK2kzODZuYnNkX2ZldGNoX2luZmVyaW9yX3JlZ2lzdGVycyAoaW50IHJlZ251bSkK
K3sKKyAgaWYgKHJlZ251bSA9PSAtMSB8fCBHRVRSRUdTX1NVUFBMSUVTIChyZWdudW0pKQorICAg
IHsKKyAgICAgIHN0cnVjdCByZWcgcmVnczsKKworICAgICAgaWYgKHB0cmFjZSAoUFRfR0VUUkVH
UywgUElER0VUIChpbmZlcmlvcl9wdGlkKSwKKwkJICAoUFRSQUNFX1RZUEVfQVJHMykgJnJlZ3Ms
IFRJREdFVCAoaW5mZXJpb3JfcHRpZCkpID09IC0xKQorCXBlcnJvcl93aXRoX25hbWUgKF8oIkNv
dWxkbid0IGdldCByZWdpc3RlcnMiKSk7CisKKyAgICAgIGlmIChkZWJ1Z19uYnNkX3RocmVhZCkK
Kwl7CisJICBpZiAocmVnbnVtID09IC0xKQorCSAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9z
dGRsb2csCisJCQkJIk5GSVI6IHB0aWQgJWQsJWxkLCByZWdudW0gJWRcbiIsCisJCQkJUElER0VU
IChpbmZlcmlvcl9wdGlkKSwgVElER0VUIChpbmZlcmlvcl9wdGlkKSwKKwkJCQlyZWdudW0pOwor
CSAgZWxzZQorCSAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJCQkJIk5GSVI6
IHB0aWQgJWQsJWxkLCByZWdudW0gJWQ6ICV4XG4iLAorCQkJCVBJREdFVCAoaW5mZXJpb3JfcHRp
ZCksIFRJREdFVCAoaW5mZXJpb3JfcHRpZCksCisJCQkJcmVnbnVtLCAoKGludCAqKSAmcmVncylb
cmVnbnVtXSk7CisJfQorCisgICAgICBpMzg2YnNkX3N1cHBseV9ncmVnc2V0IChjdXJyZW50X3Jl
Z2NhY2hlLCAmcmVncyk7CisgICAgICBpZiAocmVnbnVtICE9IC0xKQorCXJldHVybjsKKyAgICB9
CisKKyAgaWYgKHJlZ251bSA9PSAtMSB8fCByZWdudW0gPj0gSTM4Nl9TVDBfUkVHTlVNKQorICAg
IHsKKyAgICAgIHN0cnVjdCBmcHJlZyBmcHJlZ3M7CisjaWZkZWYgSEFWRV9QVF9HRVRYTU1SRUdT
CisgICAgICBjaGFyIHhtbXJlZ3NbNTEyXTsKKworICAgICAgaWYgKGhhdmVfcHRyYWNlX3htbXJl
Z3MgIT0gMAorCSAgJiYgcHRyYWNlKFBUX0dFVFhNTVJFR1MsIFBJREdFVCAoaW5mZXJpb3JfcHRp
ZCksCisJCSAgICAoUFRSQUNFX1RZUEVfQVJHMykgeG1tcmVncywgVElER0VUIChpbmZlcmlvcl9w
dGlkKSkgPT0gMCkKKwl7CisJICBoYXZlX3B0cmFjZV94bW1yZWdzID0gMTsKKwkgIGkzODdfc3Vw
cGx5X2Z4c2F2ZSAoY3VycmVudF9yZWdjYWNoZSwgLTEsIHhtbXJlZ3MpOworCX0KKyAgICAgIGVs
c2UKKwl7CisgICAgICAgICAgaWYgKHB0cmFjZSAoUFRfR0VURlBSRUdTLCBQSURHRVQgKGluZmVy
aW9yX3B0aWQpLAorCQkgICAgICAoUFRSQUNFX1RZUEVfQVJHMykgJmZwcmVncywgVElER0VUIChp
bmZlcmlvcl9wdGlkKSkgPT0gLTEpCisJICAgIHBlcnJvcl93aXRoX25hbWUgKF8oIkNvdWxkbid0
IGdldCBmbG9hdGluZyBwb2ludCBzdGF0dXMiKSk7CisKKwkgIGkzODdfc3VwcGx5X2ZzYXZlIChj
dXJyZW50X3JlZ2NhY2hlLCAtMSwgJmZwcmVncyk7CisJfQorI2Vsc2UKKyAgICAgIGlmIChwdHJh
Y2UgKFBUX0dFVEZQUkVHUywgUElER0VUIChpbmZlcmlvcl9wdGlkKSwKKwkJICAoUFRSQUNFX1RZ
UEVfQVJHMykgJmZwcmVncywgVElER0VUIChpbmZlcmlvcl9wdGlkKSkgPT0gLTEpCisJcGVycm9y
X3dpdGhfbmFtZSAoXygiQ291bGRuJ3QgZ2V0IGZsb2F0aW5nIHBvaW50IHN0YXR1cyIpKTsKKwor
ICAgICAgaTM4N19zdXBwbHlfZnNhdmUgKGN1cnJlbnRfcmVnY2FjaGUsIC0xLCAmZnByZWdzKTsK
KyNlbmRpZgorICAgIH0KK30KKworLyogU3RvcmUgcmVnaXN0ZXIgUkVHTlVNIGJhY2sgaW50byB0
aGUgaW5mZXJpb3IuICBJZiBSRUdOVU0gaXMgLTEsIGRvCisgICB0aGlzIGZvciBhbGwgcmVnaXN0
ZXJzIChpbmNsdWRpbmcgdGhlIGZsb2F0aW5nIHBvaW50IHJlZ2lzdGVycykuICAqLworCitzdGF0
aWMgdm9pZAoraTM4Nm5ic2Rfc3RvcmVfaW5mZXJpb3JfcmVnaXN0ZXJzIChpbnQgcmVnbnVtKQor
eworICBpZiAocmVnbnVtID09IC0xIHx8IEdFVFJFR1NfU1VQUExJRVMgKHJlZ251bSkpCisgICAg
eworICAgICAgc3RydWN0IHJlZyByZWdzOworCisgICAgICBpZiAocHRyYWNlIChQVF9HRVRSRUdT
LCBQSURHRVQgKGluZmVyaW9yX3B0aWQpLAorICAgICAgICAgICAgICAgICAgKFBUUkFDRV9UWVBF
X0FSRzMpICZyZWdzLCBUSURHRVQgKGluZmVyaW9yX3B0aWQpKSA9PSAtMSkKKyAgICAgICAgcGVy
cm9yX3dpdGhfbmFtZSAoXygiQ291bGRuJ3QgZ2V0IHJlZ2lzdGVycyIpKTsKKworICAgICAgaTM4
NmJzZF9jb2xsZWN0X2dyZWdzZXQgKGN1cnJlbnRfcmVnY2FjaGUsICZyZWdzLCByZWdudW0pOwor
CisgICAgICBpZiAoZGVidWdfbmJzZF90aHJlYWQpCisJeworCSAgaWYgKHJlZ251bSA9PSAtMSkK
KwkgICAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLAorCQkJCSJOU0lSOiBwdGlkICVk
LCVsZCwgcmVnbnVtICVkXG4iLAorCQkJCVBJREdFVCAoaW5mZXJpb3JfcHRpZCksIFRJREdFVCAo
aW5mZXJpb3JfcHRpZCksCisJCQkJcmVnbnVtKTsKKwkgIGVsc2UKKwkgICAgZnByaW50Zl91bmZp
bHRlcmVkIChnZGJfc3RkbG9nLAorCQkJCSJOU0lSOiBwdGlkICVkLCVsZCwgcmVnbnVtICVkOiAl
eFxuIiwKKwkJCQlQSURHRVQgKGluZmVyaW9yX3B0aWQpLCBUSURHRVQgKGluZmVyaW9yX3B0aWQp
LAorCQkJCXJlZ251bSwgKChpbnQgKikgJnJlZ3MpW3JlZ251bV0pOworCX0KKyAgICAgIAorICAg
ICAgaWYgKHB0cmFjZSAoUFRfU0VUUkVHUywgUElER0VUIChpbmZlcmlvcl9wdGlkKSwKKwkgICAg
ICAgICAgKFBUUkFDRV9UWVBFX0FSRzMpICZyZWdzLCBUSURHRVQgKGluZmVyaW9yX3B0aWQpKSA9
PSAtMSkKKyAgICAgICAgcGVycm9yX3dpdGhfbmFtZSAoXygiQ291bGRuJ3Qgd3JpdGUgcmVnaXN0
ZXJzIikpOworCisgICAgICBpZiAocmVnbnVtICE9IC0xKQorCXJldHVybjsKKyAgICB9CisKKyAg
aWYgKHJlZ251bSA9PSAtMSB8fCByZWdudW0gPj0gSTM4Nl9TVDBfUkVHTlVNKQorICAgIHsKKyAg
ICAgIHN0cnVjdCBmcHJlZyBmcHJlZ3M7CisjaWZkZWYgSEFWRV9QVF9HRVRYTU1SRUdTCisgICAg
ICBjaGFyIHhtbXJlZ3NbNTEyXTsKKworICAgICAgaWYgKGhhdmVfcHRyYWNlX3htbXJlZ3MgIT0g
MAorCSAgJiYgcHRyYWNlKFBUX0dFVFhNTVJFR1MsIFBJREdFVCAoaW5mZXJpb3JfcHRpZCksCisJ
CSAgICAoUFRSQUNFX1RZUEVfQVJHMykgeG1tcmVncywgVElER0VUIChpbmZlcmlvcl9wdGlkKSkg
PT0gMCkKKwl7CisJICBoYXZlX3B0cmFjZV94bW1yZWdzID0gMTsKKworCSAgaTM4N19jb2xsZWN0
X2Z4c2F2ZSAoY3VycmVudF9yZWdjYWNoZSwgcmVnbnVtLCB4bW1yZWdzKTsKKworCSAgaWYgKHB0
cmFjZSAoUFRfU0VUWE1NUkVHUywgUElER0VUIChpbmZlcmlvcl9wdGlkKSwKKwkJICAgICAgKFBU
UkFDRV9UWVBFX0FSRzMpIHhtbXJlZ3MsIFRJREdFVCAoaW5mZXJpb3JfcHRpZCkpID09IC0xKQor
ICAgICAgICAgICAgcGVycm9yX3dpdGhfbmFtZSAoXygiQ291bGRuJ3Qgd3JpdGUgWE1NIHJlZ2lz
dGVycyIpKTsKKwl9CisgICAgICBlbHNlCisJeworCSAgaGF2ZV9wdHJhY2VfeG1tcmVncyA9IDA7
CisjZW5kaWYKKyAgICAgICAgICBpZiAocHRyYWNlIChQVF9HRVRGUFJFR1MsIFBJREdFVCAoaW5m
ZXJpb3JfcHRpZCksCisJCSAgICAgIChQVFJBQ0VfVFlQRV9BUkczKSAmZnByZWdzLCBUSURHRVQg
KGluZmVyaW9yX3B0aWQpKSA9PSAtMSkKKwkgICAgcGVycm9yX3dpdGhfbmFtZSAoXygiQ291bGRu
J3QgZ2V0IGZsb2F0aW5nIHBvaW50IHN0YXR1cyIpKTsKKworICAgICAgICAgIGkzODdfY29sbGVj
dF9mc2F2ZSAoY3VycmVudF9yZWdjYWNoZSwgcmVnbnVtLCAmZnByZWdzKTsKKworICAgICAgICAg
IGlmIChwdHJhY2UgKFBUX1NFVEZQUkVHUywgUElER0VUIChpbmZlcmlvcl9wdGlkKSwKKwkJICAg
ICAgKFBUUkFDRV9UWVBFX0FSRzMpICZmcHJlZ3MsIFRJREdFVCAoaW5mZXJpb3JfcHRpZCkpID09
IC0xKQorCSAgICBwZXJyb3Jfd2l0aF9uYW1lIChfKCJDb3VsZG4ndCB3cml0ZSBmbG9hdGluZyBw
b2ludCBzdGF0dXMiKSk7CisjaWZkZWYgSEFWRV9QVF9HRVRYTU1SRUdTCisgICAgICAgIH0KKyNl
bmRpZgorICAgIH0KK30KKworDAorCiAvKiBQcm92aWRlIGEgcHJvdG90eXBlIHRvIHNpbGVuY2Ug
LVdtaXNzaW5nLXByb3RvdHlwZXMuICAqLwogdm9pZCBfaW5pdGlhbGl6ZV9pMzg2bmJzZF9uYXQg
KHZvaWQpOwogCkBAIC0xMDksNyArMjY5LDEwIEBACiAKICAgLyogQWRkIHNvbWUgZXh0cmEgZmVh
dHVyZXMgdG8gdGhlIGNvbW1vbiAqQlNEL2kzODYgdGFyZ2V0LiAgKi8KICAgdCA9IGkzODZic2Rf
dGFyZ2V0ICgpOworICBpbml0X25ic2RfdGhyZWFkX29wcyAodCk7CiAgIHQtPnRvX3BpZF90b19l
eGVjX2ZpbGUgPSBuYnNkX3BpZF90b19leGVjX2ZpbGU7CisgIHQtPnRvX2ZldGNoX3JlZ2lzdGVy
cyA9IGkzODZuYnNkX2ZldGNoX2luZmVyaW9yX3JlZ2lzdGVyczsKKyAgdC0+dG9fc3RvcmVfcmVn
aXN0ZXJzID0gaTM4Nm5ic2Rfc3RvcmVfaW5mZXJpb3JfcmVnaXN0ZXJzOyAgCiAgIGFkZF90YXJn
ZXQgKHQpOwogCiAgIC8qIFN1cHBvcnQgZGVidWdnaW5nIGtlcm5lbCB2aXJ0dWFsIG1lbW9yeSBp
bWFnZXMuICAqLwotLS0gLi9nbnUvdXNyLmJpbi9nZGI2L2FyY2gvaTM4Ni9kZWZzLm1rLm9yaWcJ
MjAwNi0xMS0yNSAxMTozODo1MS4wMDAwMDAwMDAgLTA1MDAKKysrIC4vZ251L3Vzci5iaW4vZ2Ri
Ni9hcmNoL2kzODYvZGVmcy5tawkyMDEwLTA0LTE5IDEzOjQ1OjExLjAwMDAwMDAwMCAtMDQwMApA
QCAtMyw1ICszLDUgQEAKICMgR2VuZXJhdGVkIGZyb206IE5ldEJTRDogbWtuYXRpdmUuY29tbW9u
LHYgMS44IDIwMDYvMDUvMjYgMTk6MTc6MjEgbXJnIEV4cCAKICMKIEdfSU5URVJOQUxfQ0ZMQUdT
PSAgICAgLUkuIC1JJHtHTlVIT1NURElTVH0vZ2RiIC1JJHtHTlVIT1NURElTVH0vZ2RiL2NvbmZp
ZyAtRExPQ0FMRURJUj0iXCIvdXNyL3NoYXJlL2xvY2FsZVwiIiAtREhBVkVfQ09ORklHX0ggLUkk
e0dOVUhPU1RESVNUfS9nZGIvLi4vaW5jbHVkZS9vcGNvZGUgLUkke0dOVUhPU1RESVNUfS9nZGIv
Li4vcmVhZGxpbmUvLi4gIC1JLi4vYmZkIC1JJHtHTlVIT1NURElTVH0vZ2RiLy4uL2JmZCAtSSR7
R05VSE9TVERJU1R9L2dkYi8uLi9pbmNsdWRlICAtSS4uL2ludGwgLUkke0dOVUhPU1RESVNUfS9n
ZGIvLi4vaW50bCAgLURNSV9PVVQ9MSAtRFRVST0xIC1XaW1wbGljaXQgLVdyZXR1cm4tdHlwZSAt
V2NvbW1lbnQgLVd0cmlncmFwaHMgLVdmb3JtYXQgLVdwYXJlbnRoZXNlcyAtV3BvaW50ZXItYXJp
dGggLVdmb3JtYXQtbm9ubGl0ZXJhbCAtV3VudXNlZC1sYWJlbCAtV3VudXNlZC1mdW5jdGlvbiAt
V25vLXBvaW50ZXItc2lnbiAKLUdfTElCR0RCX09CUz1pMzg2LXRkZXAubyBpMzg3LXRkZXAubyBp
Mzg2YnNkLXRkZXAubyBpMzg2bmJzZC10ZGVwLm8gbmJzZC10ZGVwLm8gIGNvcmVsb3cubyBzb2xp
Yi5vIHNvbGliLXN2cjQubyBzZXItYmFzZS5vIHNlci11bml4Lm8gc2VyLXBpcGUubyBzZXItdGNw
Lm8gZm9yay1jaGlsZC5vIGluZi1wdHJhY2UubyAgbmJzZC1uYXQubyBpMzg2YnNkLW5hdC5vIGkz
ODZuYnNkLW5hdC5vIGJzZC1rdm0ubyAgcmVtb3RlLm8gZGNhY2hlLm8gcmVtb3RlLXV0aWxzLm8g
dHJhY2Vwb2ludC5vIGF4LWdlbmVyYWwubyBheC1nZGIubyByZW1vdGUtZmlsZWlvLm8gIGNsaS1k
dW1wLm8gIGNsaS1kZWNvZGUubyBjbGktc2NyaXB0Lm8gY2xpLWNtZHMubyBjbGktc2V0c2hvdy5v
IGNsaS11dGlscy5vICBjbGktbG9nZ2luZy5vICBjbGktaW50ZXJwLm8gbWktb3V0Lm8gbWktY29u
c29sZS5vICBtaS1jbWRzLm8gbWktY21kLWVudi5vIG1pLWNtZC12YXIubyBtaS1jbWQtYnJlYWsu
byBtaS1jbWQtc3RhY2subyAgbWktY21kLWZpbGUubyBtaS1jbWQtZGlzYXMubyBtaS1zeW1ib2wt
Y21kcy5vICBtaS1pbnRlcnAubyAgbWktbWFpbi5vIG1pLXBhcnNlLm8gbWktZ2V0b3B0Lm8gbWkt
Y29tbW9uLm8gcG9zaXgtaGRlcC5vIHR1aS1jb21tYW5kLm8gIHR1aS1kYXRhLm8gIHR1aS1kaXNh
c20ubyAgdHVpLWZpbGUubyB0dWkubyAgdHVpLWhvb2tzLm8gIHR1aS1pbnRlcnAubyAgdHVpLWlv
Lm8gIHR1aS1sYXlvdXQubyAgdHVpLW91dC5vICB0dWktcmVncy5vICB0dWktc291cmNlLm8gIHR1
aS1zdGFjay5vICB0dWktd2luLm8gIHR1aS13aW5kYXRhLm8gIHR1aS13aW5nZW5lcmFsLm8gIHR1
aS13aW5zb3VyY2UubyBjLWV4cC5vICBjcC1uYW1lLXBhcnNlci5vICBvYmpjLWV4cC5vICBhZGEt
ZXhwLm8gIGp2LWV4cC5vICBmLWV4cC5vIG0yLWV4cC5vIHAtZXhwLm8gIHZlcnNpb24ubyAgYW5u
b3RhdGUubyAgYXV4di5vICBiZmQtdGFyZ2V0Lm8gIGJsb2NrZnJhbWUubyBicmVha3BvaW50Lm8g
ZmluZHZhci5vIHJlZ2NhY2hlLm8gIGNoYXJzZXQubyBkaXNhc20ubyBkdW1teS1mcmFtZS5vICBz
b3VyY2UubyB2YWx1ZS5vIGV2YWwubyB2YWxvcHMubyB2YWxhcml0aC5vIHZhbHByaW50Lm8gcHJp
bnRjbWQubyAgYmxvY2subyBzeW10YWIubyBzeW1maWxlLm8gc3ltbWlzYy5vIGxpbmVzcGVjLm8g
ZGljdGlvbmFyeS5vICBpbmZjYWxsLm8gIGluZmNtZC5vIGluZnJ1bi5vICBleHBwcmludC5vIGVu
dmlyb24ubyBzdGFjay5vIHRocmVhZC5vICBleGNlcHRpb25zLm8gIGluZi1jaGlsZC5vICBpbnRl
cnBzLm8gIG1haW4ubyAgbWFjcm90YWIubyBtYWNyb2NtZC5vIG1hY3JvZXhwLm8gbWFjcm9zY29w
ZS5vICBldmVudC1sb29wLm8gZXZlbnQtdG9wLm8gaW5mLWxvb3AubyBjb21wbGV0ZXIubyAgZ2Ri
YXJjaC5vIGFyY2gtdXRpbHMubyBnZGJ0eXBlcy5vIG9zYWJpLm8gY29weWluZy5vICBtZW1hdHRy
Lm8gbWVtLWJyZWFrLm8gdGFyZ2V0Lm8gcGFyc2UubyBsYW5ndWFnZS5vIGJ1aWxkc3ltLm8gIHN0
ZC1yZWdzLm8gIHNpZ25hbHMubyAga29kLm8ga29kLWNpc2NvLm8gIGdkYi1ldmVudHMubyAgZXhl
Yy5vIGJjYWNoZS5vIG9iamZpbGVzLm8gb2JzZXJ2ZXIubyBtaW5zeW1zLm8gbWFpbnQubyBkZW1h
bmdsZS5vICBkYnhyZWFkLm8gY29mZnJlYWQubyBjb2ZmLXBlLXJlYWQubyBlbGZyZWFkLm8gIGR3
YXJmcmVhZC5vIGR3YXJmMnJlYWQubyBtaXBzcmVhZC5vIHN0YWJzcmVhZC5vIGNvcmVmaWxlLm8g
IGR3YXJmMmV4cHIubyBkd2FyZjJsb2MubyBkd2FyZjItZnJhbWUubyAgYWRhLWxhbmcubyBjLWxh
bmcubyBmLWxhbmcubyBvYmpjLWxhbmcubyAgdWktb3V0Lm8gY2xpLW91dC5vICB2YXJvYmoubyB3
cmFwcGVyLm8gIGp2LWxhbmcubyBqdi12YWxwcmludC5vIGp2LXR5cGVwcmludC5vICBtMi1sYW5n
Lm8gcC1sYW5nLm8gcC10eXBlcHJpbnQubyBwLXZhbHByaW50Lm8gIHNjbS1leHAubyBzY20tbGFu
Zy5vIHNjbS12YWxwcmludC5vICBzZW50aW5lbC1mcmFtZS5vICBjb21wbGFpbnRzLm8gdHlwZXBy
aW50Lm8gIGFkYS10eXBlcHJpbnQubyBjLXR5cGVwcmludC5vIGYtdHlwZXByaW50Lm8gbTItdHlw
ZXByaW50Lm8gIGFkYS12YWxwcmludC5vIGMtdmFscHJpbnQubyBjcC12YWxwcmludC5vIGYtdmFs
cHJpbnQubyBtMi12YWxwcmludC5vICBubG1yZWFkLm8gc2VyaWFsLm8gbWRlYnVncmVhZC5vIHRv
cC5vIHV0aWxzLm8gIHVpLWZpbGUubyAgdXNlci1yZWdzLm8gIGZyYW1lLm8gZnJhbWUtdW53aW5k
Lm8gZG91Ymxlc3QubyAgZnJhbWUtYmFzZS5vICBnbnUtdjItYWJpLm8gZ251LXYzLWFiaS5vIGhw
YWNjLWFiaS5vIGNwLWFiaS5vIGNwLXN1cHBvcnQubyAgY3AtbmFtZXNwYWNlLm8gIHJlZ2dyb3Vw
cy5vIHJlZ3NldC5vICB0cmFkLWZyYW1lLm8gIHRyYW1wLWZyYW1lLm8gIHNvbGliLm8gc29saWIt
bnVsbC5vICBwcm9sb2d1ZS12YWx1ZS5vIGluZmxvdy5vICAgIGluaXQubworR19MSUJHREJfT0JT
PWkzODYtdGRlcC5vIGkzODctdGRlcC5vIGkzODZic2QtdGRlcC5vIGkzODZuYnNkLXRkZXAubyBu
YnNkLXRkZXAubyAgY29yZWxvdy5vIHNvbGliLm8gc29saWItc3ZyNC5vIHNlci1iYXNlLm8gc2Vy
LXVuaXgubyBzZXItcGlwZS5vIHNlci10Y3AubyBmb3JrLWNoaWxkLm8gaW5mLXB0cmFjZS5vICBu
YnNkLW5hdC5vIG5ic2QtdGhyZWFkLm8gaTM4NmJzZC1uYXQubyBpMzg2bmJzZC1uYXQubyBic2Qt
a3ZtLm8gIHJlbW90ZS5vIGRjYWNoZS5vIHJlbW90ZS11dGlscy5vIHRyYWNlcG9pbnQubyBheC1n
ZW5lcmFsLm8gYXgtZ2RiLm8gcmVtb3RlLWZpbGVpby5vICBjbGktZHVtcC5vICBjbGktZGVjb2Rl
Lm8gY2xpLXNjcmlwdC5vIGNsaS1jbWRzLm8gY2xpLXNldHNob3cubyBjbGktdXRpbHMubyAgY2xp
LWxvZ2dpbmcubyAgY2xpLWludGVycC5vIG1pLW91dC5vIG1pLWNvbnNvbGUubyAgbWktY21kcy5v
IG1pLWNtZC1lbnYubyBtaS1jbWQtdmFyLm8gbWktY21kLWJyZWFrLm8gbWktY21kLXN0YWNrLm8g
IG1pLWNtZC1maWxlLm8gbWktY21kLWRpc2FzLm8gbWktc3ltYm9sLWNtZHMubyAgbWktaW50ZXJw
Lm8gIG1pLW1haW4ubyBtaS1wYXJzZS5vIG1pLWdldG9wdC5vIG1pLWNvbW1vbi5vIHBvc2l4LWhk
ZXAubyB0dWktY29tbWFuZC5vICB0dWktZGF0YS5vICB0dWktZGlzYXNtLm8gIHR1aS1maWxlLm8g
dHVpLm8gIHR1aS1ob29rcy5vICB0dWktaW50ZXJwLm8gIHR1aS1pby5vICB0dWktbGF5b3V0Lm8g
IHR1aS1vdXQubyAgdHVpLXJlZ3MubyAgdHVpLXNvdXJjZS5vICB0dWktc3RhY2subyAgdHVpLXdp
bi5vICB0dWktd2luZGF0YS5vICB0dWktd2luZ2VuZXJhbC5vICB0dWktd2luc291cmNlLm8gYy1l
eHAubyAgY3AtbmFtZS1wYXJzZXIubyAgb2JqYy1leHAubyAgYWRhLWV4cC5vICBqdi1leHAubyAg
Zi1leHAubyBtMi1leHAubyBwLWV4cC5vICB2ZXJzaW9uLm8gIGFubm90YXRlLm8gIGF1eHYubyAg
YmZkLXRhcmdldC5vICBibG9ja2ZyYW1lLm8gYnJlYWtwb2ludC5vIGZpbmR2YXIubyByZWdjYWNo
ZS5vICBjaGFyc2V0Lm8gZGlzYXNtLm8gZHVtbXktZnJhbWUubyAgc291cmNlLm8gdmFsdWUubyBl
dmFsLm8gdmFsb3BzLm8gdmFsYXJpdGgubyB2YWxwcmludC5vIHByaW50Y21kLm8gIGJsb2NrLm8g
c3ltdGFiLm8gc3ltZmlsZS5vIHN5bW1pc2MubyBsaW5lc3BlYy5vIGRpY3Rpb25hcnkubyAgaW5m
Y2FsbC5vICBpbmZjbWQubyBpbmZydW4ubyAgZXhwcHJpbnQubyBlbnZpcm9uLm8gc3RhY2subyB0
aHJlYWQubyAgZXhjZXB0aW9ucy5vICBpbmYtY2hpbGQubyAgaW50ZXJwcy5vICBtYWluLm8gIG1h
Y3JvdGFiLm8gbWFjcm9jbWQubyBtYWNyb2V4cC5vIG1hY3Jvc2NvcGUubyAgZXZlbnQtbG9vcC5v
IGV2ZW50LXRvcC5vIGluZi1sb29wLm8gY29tcGxldGVyLm8gIGdkYmFyY2gubyBhcmNoLXV0aWxz
Lm8gZ2RidHlwZXMubyBvc2FiaS5vIGNvcHlpbmcubyAgbWVtYXR0ci5vIG1lbS1icmVhay5vIHRh
cmdldC5vIHBhcnNlLm8gbGFuZ3VhZ2UubyBidWlsZHN5bS5vICBzdGQtcmVncy5vICBzaWduYWxz
Lm8gIGtvZC5vIGtvZC1jaXNjby5vICBnZGItZXZlbnRzLm8gIGV4ZWMubyBiY2FjaGUubyBvYmpm
aWxlcy5vIG9ic2VydmVyLm8gbWluc3ltcy5vIG1haW50Lm8gZGVtYW5nbGUubyAgZGJ4cmVhZC5v
IGNvZmZyZWFkLm8gY29mZi1wZS1yZWFkLm8gZWxmcmVhZC5vICBkd2FyZnJlYWQubyBkd2FyZjJy
ZWFkLm8gbWlwc3JlYWQubyBzdGFic3JlYWQubyBjb3JlZmlsZS5vICBkd2FyZjJleHByLm8gZHdh
cmYybG9jLm8gZHdhcmYyLWZyYW1lLm8gIGFkYS1sYW5nLm8gYy1sYW5nLm8gZi1sYW5nLm8gb2Jq
Yy1sYW5nLm8gIHVpLW91dC5vIGNsaS1vdXQubyAgdmFyb2JqLm8gd3JhcHBlci5vICBqdi1sYW5n
Lm8ganYtdmFscHJpbnQubyBqdi10eXBlcHJpbnQubyAgbTItbGFuZy5vIHAtbGFuZy5vIHAtdHlw
ZXByaW50Lm8gcC12YWxwcmludC5vICBzY20tZXhwLm8gc2NtLWxhbmcubyBzY20tdmFscHJpbnQu
byAgc2VudGluZWwtZnJhbWUubyAgY29tcGxhaW50cy5vIHR5cGVwcmludC5vICBhZGEtdHlwZXBy
aW50Lm8gYy10eXBlcHJpbnQubyBmLXR5cGVwcmludC5vIG0yLXR5cGVwcmludC5vICBhZGEtdmFs
cHJpbnQubyBjLXZhbHByaW50Lm8gY3AtdmFscHJpbnQubyBmLXZhbHByaW50Lm8gbTItdmFscHJp
bnQubyAgbmxtcmVhZC5vIHNlcmlhbC5vIG1kZWJ1Z3JlYWQubyB0b3AubyB1dGlscy5vICB1aS1m
aWxlLm8gIHVzZXItcmVncy5vICBmcmFtZS5vIGZyYW1lLXVud2luZC5vIGRvdWJsZXN0Lm8gIGZy
YW1lLWJhc2UubyAgZ251LXYyLWFiaS5vIGdudS12My1hYmkubyBocGFjYy1hYmkubyBjcC1hYmku
byBjcC1zdXBwb3J0Lm8gIGNwLW5hbWVzcGFjZS5vICByZWdncm91cHMubyByZWdzZXQubyAgdHJh
ZC1mcmFtZS5vICB0cmFtcC1mcmFtZS5vICBzb2xpYi5vIHNvbGliLW51bGwubyAgcHJvbG9ndWUt
dmFsdWUubyBpbmZsb3cubyAgICBpbml0Lm8KIEdfU0lNX09CUz0K
------_=_NextPart_001_01CADFF2.CC0C5CAC--
Home |
Main Index |
Thread Index |
Old Index