Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 24 Oct 2006 13:31:37 +0400
From:      "Stepan A. Baranov" <rosmir@gmail.com>
To:        davidxu@freebsd.org, freebsd-hackers@freebsd.org
Subject:   scheduler CORE for RELENG_6
Message-ID:  <9c6e52b10610240231h72fdb7a9xec1078e0937ed24b@mail.gmail.com>

next in thread | raw e-mail | index | archive | help
------=_Part_3894_21344688.1161682297840
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

Hello,

I prepared patch to port scheduler from HEAD to RELENG_6. I applied
this patch for my workstation and scheduler CORE works fine.

After applying patch you can say:
options         SCHED_CORE              # CORE scheduler
in your KERN CONF file and rebuild your kernel.

Please, test it and fix it.

Stepan Baranov.

------=_Part_3894_21344688.1161682297840
Content-Type: application/octet-stream; name=patch-add-CORE
Content-Transfer-Encoding: base64
X-Attachment-Id: f_etnv1i65
Content-Disposition: attachment; filename="patch-add-CORE"

SW5kZXg6IC4vc3lzL3N5cy9zY2hlZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9ob21lL25jdnMv
c3JjL3N5cy9zeXMvc2NoZWQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yNApkaWZmIC11IC1y
MS4yNCBzY2hlZC5oCi0tLSAuL3N5cy9zeXMvc2NoZWQuaAkxOSBBcHIgMjAwNSAwNDowMToyNSAt
MDAwMAkxLjI0CisrKyAuL3N5cy9zeXMvc2NoZWQuaAkyNCBPY3QgMjAwNiAwOToxMDowNyAtMDAw
MApAQCAtNzgsNiArNzgsOCBAQAogdm9pZAlzY2hlZF9hZGQoc3RydWN0IHRocmVhZCAqdGQsIGlu
dCBmbGFncyk7CiB2b2lkCXNjaGVkX2Nsb2NrKHN0cnVjdCB0aHJlYWQgKnRkKTsKIHZvaWQJc2No
ZWRfcmVtKHN0cnVjdCB0aHJlYWQgKnRkKTsKK3ZvaWQJc2NoZWRfdGljayh2b2lkKTsKK3ZvaWQJ
c2NoZWRfcmVsaW5xdWlzaChzdHJ1Y3QgdGhyZWFkICp0ZCk7CiAKIC8qCiAgKiBCaW5kaW5nIG1h
a2VzIGNwdSBhZmZpbml0eSBwZXJtYW5lbnQgd2hpbGUgcGlubmluZyBpcyB1c2VkIHRvIHRlbXBv
cmFyaWx5CkluZGV4OiAuL3N5cy9zeXMvc3lzdG0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvaG9t
ZS9uY3ZzL3NyYy9zeXMvc3lzL3N5c3RtLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjM0LjIu
NQpkaWZmIC11IC1yMS4yMzQuMi41IHN5c3RtLmgKLS0tIC4vc3lzL3N5cy9zeXN0bS5oCTYgSnVs
IDIwMDYgMDg6MzI6NTAgLTAwMDAJMS4yMzQuMi41CisrKyAuL3N5cy9zeXMvc3lzdG0uaAkyNCBP
Y3QgMjAwNiAwOToxMDoxMCAtMDAwMApAQCAtMjM5LDYgKzIzOSwxMiBAQAogaW50CXVuc2V0ZW52
KGNvbnN0IGNoYXIgKm5hbWUpOwogaW50CXRlc3RlbnYoY29uc3QgY2hhciAqbmFtZSk7CiAKK3R5
cGVkZWYgdWludDY0X3QgKGNwdV90aWNrX2YpKHZvaWQpOwordm9pZCBzZXRfY3B1dGlja2VyKGNw
dV90aWNrX2YgKmZ1bmMsIHVpbnQ2NF90IGZyZXEsIHVuc2lnbmVkIHZhcik7CitleHRlcm4gY3B1
X3RpY2tfZiAqY3B1X3RpY2tzOwordWludDY0X3QgY3B1X3RpY2tyYXRlKHZvaWQpOwordWludDY0
X3QgY3B1dGljazJ1c2VjKHVpbnQ2NF90IHRpY2spOworCiAjaWZkZWYgQVBNX0ZJWFVQX0NBTExU
T0RPCiBzdHJ1Y3QgdGltZXZhbDsKIHZvaWQJYWRqdXN0X3RpbWVvdXRfY2FsbHRvZG8oc3RydWN0
IHRpbWV2YWwgKnRpbWVfY2hhbmdlKTsKSW5kZXg6IC4vc3lzL2tlcm4vc2NoZWRfdWxlLmMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2hvbWUvbmN2cy9zcmMvc3lzL2tlcm4vc2NoZWRfdWxlLmMsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuMTUzLjIuMwpkaWZmIC11IC1yMS4xNTMuMi4zIHNjaGVkX3Vs
ZS5jCi0tLSAuL3N5cy9rZXJuL3NjaGVkX3VsZS5jCTI3IFNlcCAyMDA1IDEyOjAwOjMxIC0wMDAw
CTEuMTUzLjIuMworKysgLi9zeXMva2Vybi9zY2hlZF91bGUuYwkyNCBPY3QgMjAwNiAwOToxMDo0
MSAtMDAwMApAQCAtMTk2Miw2ICsxOTYyLDE5IEBACiAJcmV0dXJuICh0ZC0+dGRfa3NlLT5rZV9m
bGFncyAmIEtFRl9CT1VORCk7CiB9CiAKK3ZvaWQKK3NjaGVkX3JlbGlucXVpc2goc3RydWN0IHRo
cmVhZCAqdGQpCit7CisJc3RydWN0IGtzZWdycCAqa2c7CisgCisJa2cgPSB0ZC0+dGRfa3NlZ3Jw
OworCW10eF9sb2NrX3NwaW4oJnNjaGVkX2xvY2spOworCWlmIChrZy0+a2dfcHJpX2NsYXNzID09
IFBSSV9USU1FU0hBUkUpCisJCXNjaGVkX3ByaW8odGQsIFBSSV9NQVhfVElNRVNIQVJFKTsKKwlt
aV9zd2l0Y2goU1dfVk9MLCBOVUxMKTsKKwltdHhfdW5sb2NrX3NwaW4oJnNjaGVkX2xvY2spOwor
fQorCiBpbnQKIHNjaGVkX2xvYWQodm9pZCkKIHsKQEAgLTE5OTUsNSArMjAwOCwxMCBAQAogewog
CXJldHVybiAoc2l6ZW9mKHN0cnVjdCB0aHJlYWQpICsgc2l6ZW9mKHN0cnVjdCB0ZF9zY2hlZCkp
OwogfQorCit2b2lkCitzY2hlZF90aWNrKHZvaWQpCit7Cit9CiAjZGVmaW5lIEtFUk5fU1dJVENI
X0lOQ0xVREUgMQogI2luY2x1ZGUgImtlcm4va2Vybl9zd2l0Y2guYyIKSW5kZXg6IC4vc3lzL2tl
cm4vc2NoZWRfY29yZS5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC4vc3lzL2tlcm4vc2NoZWRfY29y
ZS5jCmRpZmYgLU4gLi9zeXMva2Vybi9zY2hlZF9jb3JlLmMKLS0tIC9kZXYvbnVsbAkxIEphbiAx
OTcwIDAwOjAwOjAwIC0wMDAwCisrKyAuL3N5cy9rZXJuL3NjaGVkX2NvcmUuYwkyNCBPY3QgMjAw
NiAwOToxMTowOCAtMDAwMApAQCAtMCwwICsxLDE3NDEgQEAKKy8qLQorICogQ29weXJpZ2h0IChj
KSAyMDA1LTIwMDYsIERhdmlkIFh1IDx5Znh1QGNvcnAubmV0ZWFzZS5jb20+CisgKiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSB1bm1vZGlmaWVkLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucywgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVT
UyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwK
KyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEOiAvcmVwb21hbi9yL25j
dnMvc3JjL3N5cy9rZXJuL3NjaGVkX2NvcmUuYyx2IDEuOSAyMDA2LzA2LzI5IDEyOjI5OjIwIGRh
dmlkeHUgRXhwICQiKTsKKworI2luY2x1ZGUgIm9wdF9od3BtY19ob29rcy5oIgorI2luY2x1ZGUg
Im9wdF9zY2hlZC5oIgorCisjZGVmaW5lIGtzZSB0ZF9zY2hlZAorCisjaW5jbHVkZSA8c3lzL3Bh
cmFtLmg+CisjaW5jbHVkZSA8c3lzL3N5c3RtLmg+CisjaW5jbHVkZSA8c3lzL2tkYi5oPgorI2lu
Y2x1ZGUgPHN5cy9rZXJuZWwuaD4KKyNpbmNsdWRlIDxzeXMva3RocmVhZC5oPgorI2luY2x1ZGUg
PHN5cy9rdHIuaD4KKyNpbmNsdWRlIDxzeXMvbG9jay5oPgorI2luY2x1ZGUgPHN5cy9tdXRleC5o
PgorI2luY2x1ZGUgPHN5cy9wcm9jLmg+CisjaW5jbHVkZSA8c3lzL3Jlc291cmNlLmg+CisjaW5j
bHVkZSA8c3lzL3Jlc291cmNldmFyLmg+CisjaW5jbHVkZSA8c3lzL3NjaGVkLmg+CisjaW5jbHVk
ZSA8c3lzL3NtcC5oPgorI2luY2x1ZGUgPHN5cy9zeC5oPgorI2luY2x1ZGUgPHN5cy9zeXNjdGwu
aD4KKyNpbmNsdWRlIDxzeXMvc3lzcHJvdG8uaD4KKyNpbmNsdWRlIDxzeXMvdHVybnN0aWxlLmg+
CisjaW5jbHVkZSA8c3lzL3VuaXN0ZC5oPgorI2luY2x1ZGUgPHN5cy92bW1ldGVyLmg+CisjaWZk
ZWYgS1RSQUNFCisjaW5jbHVkZSA8c3lzL3Vpby5oPgorI2luY2x1ZGUgPHN5cy9rdHJhY2UuaD4K
KyNlbmRpZgorCisjaWZkZWYgSFdQTUNfSE9PS1MKKyNpbmNsdWRlIDxzeXMvcG1ja2Vybi5oPgor
I2VuZGlmCisKKyNpbmNsdWRlIDxtYWNoaW5lL2NwdS5oPgorI2luY2x1ZGUgPG1hY2hpbmUvc21w
Lmg+CisKKy8qIGdldCBwcm9jZXNzJ3MgbmljZSB2YWx1ZSwgc2tpcCB2YWx1ZSAyMCB3aGljaCBp
cyBub3Qgc3VwcG9ydGVkICovCisjZGVmaW5lCVBST0NfTklDRShwKQkJTUlOKChwKS0+cF9uaWNl
LCAxOSkKKworLyogY29udmVydCBuaWNlIHRvIGtlcm5lbCB0aHJlYWQgcHJpb3JpdHkgKi8KKyNk
ZWZpbmUJTklDRV9UT19QUkkobmljZSkJKFBVU0VSICsgMjAgKyAobmljZSkpCisKKy8qIGdldCBw
cm9jZXNzJ3Mgc3RhdGljIHByaW9yaXR5ICovCisjZGVmaW5lCVBST0NfUFJJKHApCQlOSUNFX1RP
X1BSSShQUk9DX05JQ0UocCkpCisKKy8qIGNvbnZlcnQga2VybmVsIHRocmVhZCBwcmlvcml0eSB0
byB1c2VyIHByaW9yaXR5ICovCisjZGVmaW5lCVVTRVJfUFJJKHByaSkJCU1JTigocHJpKSAtIFBV
U0VSLCAzOSkKKworLyogY29udmVydCBuaWNlIHZhbHVlIHRvIHVzZXIgcHJpb3JpdHkgKi8KKyNk
ZWZpbmUJUFJPQ19VU0VSX1BSSShwKQkoUFJPQ19OSUNFKHApICsgMjApCisKKy8qIG1heGltdW0g
dXNlciBwcmlvcml0eSwgaGlnaGVzdCBwcmlvICsgMSAqLworI2RlZmluZQlNQVhfVVNFUl9QUkkJ
CTQwCisKKy8qIG1heGltdW0ga2VybmVsIHByaW9yaXR5IGl0cyBuaWNlIGlzIDE5ICovCisjZGVm
aW5lIFBVU0VSX01BWAkJKFBVU0VSICsgMzkpCisKKy8qIHRpY2tzIGFuZCBuYW5vc2Vjb25kIGNv
bnZlcnRlcnMgKi8KKyNkZWZpbmUJTlNfVE9fSFoobikJCSgobikgLyAoMTAwMDAwMDAwMCAvIGh6
KSkKKyNkZWZpbmUJSFpfVE9fTlMoaCkJCSgoaCkgKiAoMTAwMDAwMDAwMCAvIGh6KSkKKworLyog
dGlja3MgYW5kIG1pY3Jvc2Vjb25kIGNvbnZlcnRlcnMgKi8KKyNkZWZpbmUgTVNfVE9fSFoobSkJ
CSgobSkgLyAoMTAwMDAwMCAvIGh6KSkKKworI2RlZmluZQlQUklfU0NPUkVfUkFUSU8JCTI1Cisj
ZGVmaW5lCU1BWF9TQ09SRQkJKE1BWF9VU0VSX1BSSSAqIFBSSV9TQ09SRV9SQVRJTyAvIDEwMCkK
KyNkZWZpbmUJTUFYX1NMRUVQX1RJTUUJCShkZWZfdGltZXNsaWNlICogTUFYX1NDT1JFKQorI2Rl
ZmluZQlOU19NQVhfU0xFRVBfVElNRQkoSFpfVE9fTlMoTUFYX1NMRUVQX1RJTUUpKQorI2RlZmlu
ZQlTVEFSVkFUSU9OX1RJTUUJCShNQVhfU0xFRVBfVElNRSkKKworI2RlZmluZQlDVVJSRU5UX1ND
T1JFKGtnKQlcCisgICAoTUFYX1NDT1JFICogTlNfVE9fSFooKGtnKS0+a2dfc2xwdGltZSkgLyBN
QVhfU0xFRVBfVElNRSkKKworI2RlZmluZQlTQ0FMRV9VU0VSX1BSSSh4LCB1cHJpKQlcCisgICAg
TUFYKHggKiAodXByaSArIDEpIC8gKE1BWF9VU0VSX1BSSS8yKSwgbWluX3RpbWVzbGljZSkKKwor
LyoKKyAqIEZvciBhIHRocmVhZCB3aG9zZSBuaWNlIGlzIHplcm8sIHRoZSBzY29yZSBpcyB1c2Vk
IHRvIGRldGVybWluZQorICogaWYgaXQgaXMgYW4gaW50ZXJhY3RpdmUgdGhyZWFkLgorICovCisj
ZGVmaW5lCUlOVEVSQUNUSVZFX0JBU0VfU0NPUkUJKE1BWF9TQ09SRSAqIDIwKS8xMDAKKworLyoK
KyAqIENhbGN1bGF0ZSBhIHNjb3JlIHdoaWNoIGEgdGhyZWFkIG11c3QgaGF2ZSB0byBwcm92ZSBp
dHNlbGYgaXMKKyAqIGFuIGludGVyYWN0aXZlIHRocmVhZC4KKyAqLworI2RlZmluZQlJTlRFUkFD
VElWRV9TQ09SRShrZSkJCVwKKyAgICAoUFJPQ19OSUNFKChrZSktPmtlX3Byb2MpICogTUFYX1ND
T1JFIC8gNDAgKyBJTlRFUkFDVElWRV9CQVNFX1NDT1JFKQorCisvKiBUZXN0IGlmIGEgdGhyZWFk
IGlzIGFuIGludGVyYWN0aXZlIHRocmVhZCAqLworI2RlZmluZQlUSFJFQURfSVNfSU5URVJBQ1RJ
VkUoa2UpCVwKKyAgICAoKGtlKS0+a2Vfa3NlZ3JwLT5rZ191c2VyX3ByaSA8PQlcCisJUFJPQ19Q
UkkoKGtlKS0+a2VfcHJvYykgLSBJTlRFUkFDVElWRV9TQ09SRShrZSkpCisKKy8qCisgKiBDYWxj
dWxhdGUgaG93IGxvbmcgYSB0aHJlYWQgbXVzdCBzbGVlcCB0byBwcm92ZSBpdHNlbGYgaXMgYW4K
KyAqIGludGVyYWN0aXZlIHNsZWVwLgorICovCisjZGVmaW5lCUlOVEVSQUNUSVZFX1NMRUVQX1RJ
TUUoa2UpCVwKKyAgICAoSFpfVE9fTlMoTUFYX1NMRUVQX1RJTUUgKgkJXAorCShNQVhfU0NPUkUg
LyAyICsgSU5URVJBQ1RJVkVfU0NPUkUoKGtlKSkgKyAxKSAvIE1BWF9TQ09SRSAtIDEpKQorCisj
ZGVmaW5lCUNISUxEX1dFSUdIVAk5MAorI2RlZmluZQlQQVJFTlRfV0VJR0hUCTkwCisjZGVmaW5l
CUVYSVRfV0VJR0hUCTMKKworI2RlZmluZQlTQ0hFRF9MT0FEX1NDQUxFCTEyOFVMCisKKyNkZWZp
bmUJSURMRQkJMAorI2RlZmluZSBJRExFX0lETEUJMQorI2RlZmluZSBOT1RfSURMRQkyCisKKyNk
ZWZpbmUgS1FCX0xFTgkJKDgpCQkvKiBOdW1iZXIgb2YgcHJpb3JpdHkgc3RhdHVzIHdvcmRzLiAq
LworI2RlZmluZSBLUUJfTDJCUFcJKDUpCQkvKiBMb2cyKHNpemVvZihycWJfd29yZF90KSAqIE5C
QlkpKS4gKi8KKyNkZWZpbmUgS1FCX0JQVwkJKDE8PEtRQl9MMkJQVykJLyogQml0cyBpbiBhbiBy
cWJfd29yZF90LiAqLworCisjZGVmaW5lIEtRQl9CSVQocHJpKQkoMSA8PCAoKHByaSkgJiAoS1FC
X0JQVyAtIDEpKSkKKyNkZWZpbmUgS1FCX1dPUkQocHJpKQkoKHByaSkgPj4gS1FCX0wyQlBXKQor
I2RlZmluZSBLUUJfRkZTKHdvcmQpCShmZnMod29yZCkgLSAxKQorCisjZGVmaW5lCUtRX05RUwkJ
MjU2CisKKy8qCisgKiBUeXBlIG9mIHJ1biBxdWV1ZSBzdGF0dXMgd29yZC4KKyAqLwordHlwZWRl
ZiB1X2ludDMyX3QJa3FiX3dvcmRfdDsKKworLyoKKyAqIEhlYWQgb2YgcnVuIHF1ZXVlcy4KKyAq
LworVEFJTFFfSEVBRChrcnFoZWFkLCBrc2UpOworCisvKgorICogQml0IGFycmF5IHdoaWNoIG1h
aW50YWlucyB0aGUgc3RhdHVzIG9mIGEgcnVuIHF1ZXVlLiAgV2hlbiBhIHF1ZXVlIGlzCisgKiBu
b24tZW1wdHkgdGhlIGJpdCBjb3JyZXNwb25kaW5nIHRvIHRoZSBxdWV1ZSBudW1iZXIgd2lsbCBi
ZSBzZXQuCisgKi8KK3N0cnVjdCBrcnFiaXRzIHsKKwlrcWJfd29yZF90CXJxYl9iaXRzW0tRQl9M
RU5dOworfTsKKworLyoKKyAqIFJ1biBxdWV1ZSBzdHJ1Y3R1cmUuIENvbnRhaW5zIGFuIGFycmF5
IG9mIHJ1biBxdWV1ZXMgb24gd2hpY2ggcHJvY2Vzc2VzCisgKiBhcmUgcGxhY2VkLCBhbmQgYSBz
dHJ1Y3R1cmUgdG8gbWFpbnRhaW4gdGhlIHN0YXR1cyBvZiBlYWNoIHF1ZXVlLgorICovCitzdHJ1
Y3Qga3J1bnEgeworCXN0cnVjdCBrcnFiaXRzCXJxX3N0YXR1czsKKwlzdHJ1Y3Qga3JxaGVhZAly
cV9xdWV1ZXNbS1FfTlFTXTsKK307CisKKy8qCisgKiBUaGUgZm9sbG93aW5nIGRhdGFzdHJ1Y3R1
cmVzIGFyZSBhbGxvY2F0ZWQgd2l0aGluIHRoZWlyIHBhcmVudCBzdHJ1Y3R1cmUKKyAqIGJ1dCBh
cmUgc2NoZWR1bGVyIHNwZWNpZmljLgorICovCisvKgorICogVGhlIHNjaGVkdWxhYmxlIGVudGl0
eSB0aGF0IGNhbiBiZSBnaXZlbiBhIGNvbnRleHQgdG8gcnVuLiAgQSBwcm9jZXNzIG1heQorICog
aGF2ZSBzZXZlcmFsIG9mIHRoZXNlLgorICovCitzdHJ1Y3Qga3NlIHsKKwlzdHJ1Y3QgdGhyZWFk
CSprZV90aHJlYWQ7CS8qICgqKSBBY3RpdmUgYXNzb2NpYXRlZCB0aHJlYWQuICovCisJVEFJTFFf
RU5UUlkoa3NlKSBrZV9wcm9jcTsJLyogKGoveikgUnVuIHF1ZXVlLiAqLworCWludAkJa2VfZmxh
Z3M7CS8qIChqKSBLRUZfKiBmbGFncy4gKi8KKwlmaXhwdF90CQlrZV9wY3RjcHU7CS8qIChqKSAl
Y3B1IGR1cmluZyBwX3N3dGltZS4gKi8KKwl1X2NoYXIJCWtlX3JxaW5kZXg7CS8qIChqKSBSdW4g
cXVldWUgaW5kZXguICovCisJZW51bSB7CisJCUtFU19USFJFQUQgPSAweDAsCS8qIHNsYXZlZCB0
byB0aHJlYWQgc3RhdGUgKi8KKwkJS0VTX09OUlVOUQorCX0ga2Vfc3RhdGU7CQkJLyogKGopIHRo
cmVhZCBzY2hlZCBzcGVjaWZpYyBzdGF0dXMuICovCisJaW50CQlrZV9zbGljZTsJLyogVGltZSBz
bGljZSBpbiB0aWNrcyAqLworCXN0cnVjdCBrc2VxCSprZV9rc2VxOwkvKiBLc2VxIHRoZSB0aHJl
YWQgYmVsb25ncyB0byAqLworCXN0cnVjdCBrcnVucQkqa2VfcnVucTsJLyogQXNzaW9jaWF0ZWQg
cnVucXVldWUgKi8KKyNpZmRlZiBTTVAKKwlpbnQJCWtlX2NwdTsJCS8qIENQVSB0aGF0IHdlIGhh
dmUgYWZmaW5pdHkgZm9yLiAqLworCWludAkJa2Vfd2FrZXVwX2NwdTsJLyogQ1BVIHRoYXQgaGFz
IGFjdGl2YXRlZCB1cy4gKi8KKyNlbmRpZgorCWludAkJa2VfYWN0aXZhdGVkOwkvKiBIb3cgaXMg
dGhlIHRocmVhZCBhY3RpdmF0ZWQuICovCisJdWludDY0X3QJa2VfdGltZXN0YW1wOwkvKiBMYXN0
IHRpbWVzdGFtcCBkZXBlbmRlbnQgb24gc3RhdGUuKi8KKwl1bnNpZ25lZAlrZV9sYXN0cmFuOwkv
KiBMYXN0IHRpbWVzdGFtcCB0aGUgdGhyZWFkIHJhbi4gKi8KKworCS8qIFRoZSBmb2xsb3dpbmcg
dmFyaWFibGVzIGFyZSBvbmx5IHVzZWQgZm9yIHBjdGNwdSBjYWxjdWxhdGlvbiAqLworCWludAkJ
a2VfbHRpY2s7CS8qIExhc3QgdGljayB0aGF0IHdlIHdlcmUgcnVubmluZyBvbiAqLworCWludAkJ
a2VfZnRpY2s7CS8qIEZpcnN0IHRpY2sgdGhhdCB3ZSB3ZXJlIHJ1bm5pbmcgb24gKi8KKwlpbnQJ
CWtlX3RpY2tzOwkvKiBUaWNrIGNvdW50ICovCit9OworCisjZGVmaW5lCXRkX2tzZQkJCXRkX3Nj
aGVkCisjZGVmaW5lIGtlX3Byb2MJCQlrZV90aHJlYWQtPnRkX3Byb2MKKyNkZWZpbmUga2Vfa3Nl
Z3JwCQlrZV90aHJlYWQtPnRkX2tzZWdycAorCisvKiBmbGFncyBrZXB0IGluIGtlX2ZsYWdzICov
CisjZGVmaW5lCUtFRl9CT1VORAkweDAwMDEJCS8qIFRocmVhZCBjYW4gbm90IG1pZ3JhdGUuICov
CisjZGVmaW5lCUtFRl9QUkVFTVBURUQJMHgwMDAyCQkvKiBUaHJlYWQgd2FzIHByZWVtcHRlZC4g
Ki8KKyNkZWZpbmUgS0VGX01JR1JBVElORwkweDAwMDQJCS8qIFRocmVhZCBpcyBtaWdyYXRpbmcu
ICovCisjZGVmaW5lCUtFRl9TTEVFUAkweDAwMDgJCS8qIFRocmVhZCBkaWQgc2xlZXAuICovCisj
ZGVmaW5lCUtFRl9ESURSVU4JMHgwMDEwCQkvKiBUaHJlYWQgYWN0dWFsbHkgcmFuLiAqLworI2Rl
ZmluZQlLRUZfRVhJVAkweDAwMjAJCS8qIFRocmVhZCBpcyBiZWluZyBraWxsZWQuICovCisjZGVm
aW5lIEtFRl9ORVhUUlEJMHgwNDAwCQkvKiBUaHJlYWQgc2hvdWxkIGJlIGluIG5leHQgcXVldWUu
ICovCisjZGVmaW5lIEtFRl9GSVJTVF9TTElDRQkweDA4MDAJCS8qIFRocmVhZCBoYXMgZmlyc3Qg
dGltZSBzbGljZSBsZWZ0LiAqLworCitzdHJ1Y3Qga2dfc2NoZWQgeworCXN0cnVjdCB0aHJlYWQJ
KnNrZ19sYXN0X2Fzc2lnbmVkOyAvKiAoaikgTGFzdCB0aHJlYWQgYXNzaWduZWQgdG8gKi8KKwkJ
CQkJICAgIC8qIHRoZSBzeXN0ZW0gc2NoZWR1bGVyICovCisJdV9sb25nCXNrZ19zbHB0aW1lOwkJ
LyogKGopIE51bWJlciBvZiB0aWNrcyB3ZSB2b2wuIHNsZXB0ICovCisJdV9sb25nCXNrZ19ydW50
aW1lOwkJLyogKGopIFRlbXAgdG90YWwgcnVuIHRpbWUuICovCisJaW50CXNrZ19hdmFpbF9vcGVu
bmluZ3M7CS8qIChqKSBOdW0gdW5maWxsZWQgc2xvdHMgaW4gZ3JvdXAuKi8KKwlpbnQJc2tnX2Nv
bmN1cnJlbmN5OwkvKiAoaikgTnVtIHRocmVhZHMgcmVxdWVzdGVkIGluIGdyb3VwLiovCit9Owor
I2RlZmluZSBrZ19sYXN0X2Fzc2lnbmVkCWtnX3NjaGVkLT5za2dfbGFzdF9hc3NpZ25lZAorI2Rl
ZmluZSBrZ19hdmFpbF9vcGVubmluZ3MJa2dfc2NoZWQtPnNrZ19hdmFpbF9vcGVubmluZ3MKKyNk
ZWZpbmUga2dfY29uY3VycmVuY3kJCWtnX3NjaGVkLT5za2dfY29uY3VycmVuY3kKKyNkZWZpbmUg
a2dfc2xwdGltZQkJa2dfc2NoZWQtPnNrZ19zbHB0aW1lCisjZGVmaW5lIGtnX3J1bnRpbWUJCWtn
X3NjaGVkLT5za2dfcnVudGltZQorCisjZGVmaW5lIFNMT1RfUkVMRUFTRShrZykJKGtnKS0+a2df
YXZhaWxfb3Blbm5pbmdzKysKKyNkZWZpbmUJU0xPVF9VU0Uoa2cpCQkoa2cpLT5rZ19hdmFpbF9v
cGVubmluZ3MtLQorCisvKgorICogQ3B1IHBlcmNlbnRhZ2UgY29tcHV0YXRpb24gbWFjcm9zIGFu
ZCBkZWZpbmVzLgorICoKKyAqIFNDSEVEX0NQVV9USU1FOglOdW1iZXIgb2Ygc2Vjb25kcyB0byBh
dmVyYWdlIHRoZSBjcHUgdXNhZ2UgYWNyb3NzLgorICogU0NIRURfQ1BVX1RJQ0tTOglOdW1iZXIg
b2YgaHogdGlja3MgdG8gYXZlcmFnZSB0aGUgY3B1IHVzYWdlIGFjcm9zcy4KKyAqLworCisjZGVm
aW5lCVNDSEVEX0NQVV9USU1FCQkxMAorI2RlZmluZQlTQ0hFRF9DUFVfVElDS1MJCShoeiAqIFND
SEVEX0NQVV9USU1FKQorCisvKgorICoga3NlcSAtIHBlciBwcm9jZXNzb3IgcnVucXMgYW5kIHN0
YXRpc3RpY3MuCisgKi8KK3N0cnVjdCBrc2VxIHsKKwlzdHJ1Y3Qga3J1bnEJKmtzcV9jdXJyOwkJ
LyogQ3VycmVudCBxdWV1ZS4gKi8KKwlzdHJ1Y3Qga3J1bnEJKmtzcV9uZXh0OwkJLyogTmV4dCB0
aW1lc2hhcmUgcXVldWUuICovCisJc3RydWN0IGtydW5xCWtzcV90aW1lc2hhcmVbMl07CS8qIFJ1
biBxdWV1ZXMgZm9yICFJRExFLiAqLworCXN0cnVjdCBrcnVucQlrc3FfaWRsZTsJCS8qIFF1ZXVl
IG9mIElETEUgdGhyZWFkcy4gKi8KKwlpbnQJCWtzcV9sb2FkOworCXVpbnQ2NF90CWtzcV9sYXN0
X3RpbWVzdGFtcDsJLyogUGVyLWNwdSBsYXN0IGNsb2NrIHRpY2sgKi8KKwl1bnNpZ25lZAlrc3Ff
ZXhwaXJlZF90aWNrOwkvKiBGaXJzdCBleHBpcmVkIHRpY2sgKi8KKwlzaWduZWQgY2hhcglrc3Ff
ZXhwaXJlZF9uaWNlOwkvKiBMb3dlc3QgbmljZSBpbiBuZXh0cSAqLworfTsKKworc3RhdGljIHN0
cnVjdCBrc2Uga3NlMDsKK3N0YXRpYyBzdHJ1Y3Qga2dfc2NoZWQga2dfc2NoZWQwOworCitzdGF0
aWMgaW50IG1pbl90aW1lc2xpY2UgPSA1Oworc3RhdGljIGludCBkZWZfdGltZXNsaWNlID0gMTAw
Oworc3RhdGljIGludCBncmFudWxhcml0eSA9IDEwOworc3RhdGljIGludCByZWFsc3RhdGh6Owor
c3RhdGljIGludCBzY2hlZF90ZGNudDsKK3N0YXRpYyBzdHJ1Y3Qga3NlcSBrc2VxX2dsb2JhbDsK
KworLyoKKyAqIE9uZSBrc2UgcXVldWUgcGVyIHByb2Nlc3Nvci4KKyAqLworI2lmZGVmIFNNUAor
c3RhdGljIHN0cnVjdCBrc2VxCWtzZXFfY3B1W01BWENQVV07CisKKyNkZWZpbmUJS1NFUV9TRUxG
KCkJKCZrc2VxX2NwdVtQQ1BVX0dFVChjcHVpZCldKQorI2RlZmluZQlLU0VRX0NQVSh4KQkoJmtz
ZXFfY3B1Wyh4KV0pCisjZGVmaW5lCUtTRVFfSUQoeCkJKCh4KSAtIGtzZXFfY3B1KQorCitzdGF0
aWMgY3B1bWFza190CWNwdV9zaWJsaW5nW01BWENQVV07CisKKyNlbHNlCS8qICFTTVAgKi8KKwor
I2RlZmluZQlLU0VRX1NFTEYoKQkoJmtzZXFfZ2xvYmFsKQorI2RlZmluZQlLU0VRX0NQVSh4KQko
JmtzZXFfZ2xvYmFsKQorI2VuZGlmCisKKy8qIGRlY2F5IDk1JSBvZiBgcF9wY3RjcHUnIGluIDYw
IHNlY29uZHM7IHNlZSBDQ1BVX1NISUZUIGJlZm9yZSBjaGFuZ2luZyAqLworc3RhdGljIGZpeHB0
X3QgIGNjcHUgPSAwLjk1MTIyOTQyNDUwMDcxNDAwOTA5ICogRlNDQUxFOyAvKiBleHAoLTEvMjAp
ICovCitTWVNDVExfSU5UKF9rZXJuLCBPSURfQVVUTywgY2NwdSwgQ1RMRkxBR19SRCwgJmNjcHUs
IDAsICIiKTsKKworc3RhdGljIHZvaWQgc2NoZWRfc2V0dXAodm9pZCAqZHVtbXkpOworU1lTSU5J
VChzY2hlZF9zZXR1cCwgU0lfU1VCX1JVTl9RVUVVRSwgU0lfT1JERVJfRklSU1QsIHNjaGVkX3Nl
dHVwLCBOVUxMKTsKKworc3RhdGljIHZvaWQgc2NoZWRfaW5pdHRpY2tzKHZvaWQgKmR1bW15KTsK
K1NZU0lOSVQoc2NoZWRfaW5pdHRpY2tzLCBTSV9TVUJfQ0xPQ0tTLCBTSV9PUkRFUl9USElSRCwg
c2NoZWRfaW5pdHRpY2tzLCBOVUxMKQorCitzdGF0aWMgU1lTQ1RMX05PREUoX2tlcm4sIE9JRF9B
VVRPLCBzY2hlZCwgQ1RMRkxBR19SVywgMCwgIlNjaGVkdWxlciIpOworCitTWVNDVExfU1RSSU5H
KF9rZXJuX3NjaGVkLCBPSURfQVVUTywgbmFtZSwgQ1RMRkxBR19SRCwgIkNPUkUiLCAwLAorICAg
ICJTY2hlZHVsZXIgbmFtZSIpOworCisjaWZkZWYgU01QCisvKiBFbmFibGUgZm9yd2FyZGluZyBv
ZiB3YWtldXBzIHRvIGFsbCBvdGhlciBjcHVzICovCitTWVNDVExfTk9ERShfa2Vybl9zY2hlZCwg
T0lEX0FVVE8sIGlwaXdha2V1cCwgQ1RMRkxBR19SRCwgTlVMTCwgIktlcm5lbCBTTVAiKTsKKwor
c3RhdGljIGludCBydW5xX2Z1enogPSAwOworU1lTQ1RMX0lOVChfa2Vybl9zY2hlZCwgT0lEX0FV
VE8sIHJ1bnFfZnV6eiwgQ1RMRkxBR19SVywgJnJ1bnFfZnV6eiwgMCwgIiIpOworCitzdGF0aWMg
aW50IGZvcndhcmRfd2FrZXVwX2VuYWJsZWQgPSAxOworU1lTQ1RMX0lOVChfa2Vybl9zY2hlZF9p
cGl3YWtldXAsIE9JRF9BVVRPLCBlbmFibGVkLCBDVExGTEFHX1JXLAorCSAgICZmb3J3YXJkX3dh
a2V1cF9lbmFibGVkLCAwLAorCSAgICJGb3J3YXJkaW5nIG9mIHdha2V1cCB0byBpZGxlIENQVXMi
KTsKKworc3RhdGljIGludCBmb3J3YXJkX3dha2V1cHNfcmVxdWVzdGVkID0gMDsKK1NZU0NUTF9J
TlQoX2tlcm5fc2NoZWRfaXBpd2FrZXVwLCBPSURfQVVUTywgcmVxdWVzdGVkLCBDVExGTEFHX1JE
LAorCSAgICZmb3J3YXJkX3dha2V1cHNfcmVxdWVzdGVkLCAwLAorCSAgICJSZXF1ZXN0cyBmb3Ig
Rm9yd2FyZGluZyBvZiB3YWtldXAgdG8gaWRsZSBDUFVzIik7CisKK3N0YXRpYyBpbnQgZm9yd2Fy
ZF93YWtldXBzX2RlbGl2ZXJlZCA9IDA7CitTWVNDVExfSU5UKF9rZXJuX3NjaGVkX2lwaXdha2V1
cCwgT0lEX0FVVE8sIGRlbGl2ZXJlZCwgQ1RMRkxBR19SRCwKKwkgICAmZm9yd2FyZF93YWtldXBz
X2RlbGl2ZXJlZCwgMCwKKwkgICAiQ29tcGxldGVkIEZvcndhcmRpbmcgb2Ygd2FrZXVwIHRvIGlk
bGUgQ1BVcyIpOworCitzdGF0aWMgaW50IGZvcndhcmRfd2FrZXVwX3VzZV9tYXNrID0gMTsKK1NZ
U0NUTF9JTlQoX2tlcm5fc2NoZWRfaXBpd2FrZXVwLCBPSURfQVVUTywgdXNlbWFzaywgQ1RMRkxB
R19SVywKKwkgICAmZm9yd2FyZF93YWtldXBfdXNlX21hc2ssIDAsCisJICAgIlVzZSB0aGUgbWFz
ayBvZiBpZGxlIGNwdXMiKTsKKworc3RhdGljIGludCBmb3J3YXJkX3dha2V1cF91c2VfbG9vcCA9
IDA7CitTWVNDVExfSU5UKF9rZXJuX3NjaGVkX2lwaXdha2V1cCwgT0lEX0FVVE8sIHVzZWxvb3As
IENUTEZMQUdfUlcsCisJICAgJmZvcndhcmRfd2FrZXVwX3VzZV9sb29wLCAwLAorCSAgICJVc2Ug
YSBsb29wIHRvIGZpbmQgaWRsZSBjcHVzIik7CisKK3N0YXRpYyBpbnQgZm9yd2FyZF93YWtldXBf
dXNlX3NpbmdsZSA9IDA7CitTWVNDVExfSU5UKF9rZXJuX3NjaGVkX2lwaXdha2V1cCwgT0lEX0FV
VE8sIG9uZWNwdSwgQ1RMRkxBR19SVywKKwkgICAmZm9yd2FyZF93YWtldXBfdXNlX3NpbmdsZSwg
MCwKKwkgICAiT25seSBzaWduYWwgb25lIGlkbGUgY3B1Iik7CisKK3N0YXRpYyBpbnQgZm9yd2Fy
ZF93YWtldXBfdXNlX2h0dCA9IDA7CitTWVNDVExfSU5UKF9rZXJuX3NjaGVkX2lwaXdha2V1cCwg
T0lEX0FVVE8sIGh0dDIsIENUTEZMQUdfUlcsCisJICAgJmZvcndhcmRfd2FrZXVwX3VzZV9odHQs
IDAsCisJICAgImFjY291bnQgZm9yIGh0dCIpOworI2VuZGlmCisKK3N0YXRpYyB2b2lkIHNsb3Rf
ZmlsbChzdHJ1Y3Qga3NlZ3JwICopOworCitzdGF0aWMgdm9pZCBrcnVucV9hZGQoc3RydWN0IGty
dW5xICosIHN0cnVjdCBrc2UgKik7CitzdGF0aWMgc3RydWN0IGtzZSAqa3J1bnFfY2hvb3NlKHN0
cnVjdCBrcnVucSAqKTsKK3N0YXRpYyB2b2lkIGtydW5xX2NscmJpdChzdHJ1Y3Qga3J1bnEgKnJx
LCBpbnQgcHJpKTsKK3N0YXRpYyBpbnQga3J1bnFfZmluZGJpdChzdHJ1Y3Qga3J1bnEgKnJxKTsK
K3N0YXRpYyB2b2lkIGtydW5xX2luaXQoc3RydWN0IGtydW5xICopOworc3RhdGljIHZvaWQga3J1
bnFfcmVtb3ZlKHN0cnVjdCBrcnVucSAqLCBzdHJ1Y3Qga3NlICopOworCitzdGF0aWMgc3RydWN0
IGtzZSAqIGtzZXFfY2hvb3NlKHN0cnVjdCBrc2VxICopOworc3RhdGljIHZvaWQga3NlcV9sb2Fk
X2FkZChzdHJ1Y3Qga3NlcSAqLCBzdHJ1Y3Qga3NlICopOworc3RhdGljIHZvaWQga3NlcV9sb2Fk
X3JlbShzdHJ1Y3Qga3NlcSAqLCBzdHJ1Y3Qga3NlICopOworc3RhdGljIHZvaWQga3NlcV9ydW5x
X2FkZChzdHJ1Y3Qga3NlcSAqLCBzdHJ1Y3Qga3NlICopOworc3RhdGljIHZvaWQga3NlcV9ydW5x
X3JlbShzdHJ1Y3Qga3NlcSAqLCBzdHJ1Y3Qga3NlICopOworc3RhdGljIHZvaWQga3NlcV9zZXR1
cChzdHJ1Y3Qga3NlcSAqKTsKKworc3RhdGljIGludCBzY2hlZF9pc190aW1lc2hhcmUoc3RydWN0
IGtzZWdycCAqa2cpOworc3RhdGljIHN0cnVjdCBrc2UgKnNjaGVkX2Nob29zZSh2b2lkKTsKK3N0
YXRpYyBpbnQgc2NoZWRfY2FsY19wcmkoc3RydWN0IGtzZWdycCAqa2cpOworc3RhdGljIGludCBz
Y2hlZF9zdGFydmluZyhzdHJ1Y3Qga3NlcSAqLCB1bnNpZ25lZCwgc3RydWN0IGtzZSAqKTsKK3N0
YXRpYyB2b2lkIHNjaGVkX3BjdGNwdV91cGRhdGUoc3RydWN0IGtzZSAqKTsKK3N0YXRpYyB2b2lk
IHNjaGVkX3RocmVhZF9wcmlvcml0eShzdHJ1Y3QgdGhyZWFkICosIHVfY2hhcik7CitzdGF0aWMg
dWludDY0X3QJc2NoZWRfdGltZXN0YW1wKHZvaWQpOworc3RhdGljIGludCBzY2hlZF9yZWNhbGNf
cHJpKHN0cnVjdCBrc2UgKmtlLCB1aW50NjRfdCBub3cpOworc3RhdGljIGludCBzY2hlZF90aW1l
c2xpY2Uoc3RydWN0IGtzZSAqa2UpOworc3RhdGljIHZvaWQgc2NoZWRfdXBkYXRlX3J1bnRpbWUo
c3RydWN0IGtzZSAqa2UsIHVpbnQ2NF90IG5vdyk7CitzdGF0aWMgdm9pZCBzY2hlZF9jb21taXRf
cnVudGltZShzdHJ1Y3Qga3NlICprZSk7CisKKy8qCisgKiBJbml0aWFsaXplIGEgcnVuIHN0cnVj
dHVyZS4KKyAqLworc3RhdGljIHZvaWQKK2tydW5xX2luaXQoc3RydWN0IGtydW5xICpycSkKK3sK
KwlpbnQgaTsKKworCWJ6ZXJvKHJxLCBzaXplb2YgKnJxKTsKKwlmb3IgKGkgPSAwOyBpIDwgS1Ff
TlFTOyBpKyspCisJCVRBSUxRX0lOSVQoJnJxLT5ycV9xdWV1ZXNbaV0pOworfQorCisvKgorICog
Q2xlYXIgdGhlIHN0YXR1cyBiaXQgb2YgdGhlIHF1ZXVlIGNvcnJlc3BvbmRpbmcgdG8gcHJpb3Jp
dHkgbGV2ZWwgcHJpLAorICogaW5kaWNhdGluZyB0aGF0IGl0IGlzIGVtcHR5LgorICovCitzdGF0
aWMgaW5saW5lIHZvaWQKK2tydW5xX2NscmJpdChzdHJ1Y3Qga3J1bnEgKnJxLCBpbnQgcHJpKQor
eworCXN0cnVjdCBrcnFiaXRzICpycWI7CisKKwlycWIgPSAmcnEtPnJxX3N0YXR1czsKKwlycWIt
PnJxYl9iaXRzW0tRQl9XT1JEKHByaSldICY9IH5LUUJfQklUKHByaSk7Cit9CisKKy8qCisgKiBG
aW5kIHRoZSBpbmRleCBvZiB0aGUgZmlyc3Qgbm9uLWVtcHR5IHJ1biBxdWV1ZS4gIFRoaXMgaXMg
ZG9uZSBieQorICogc2Nhbm5pbmcgdGhlIHN0YXR1cyBiaXRzLCBhIHNldCBiaXQgaW5kaWNhdGVz
IGEgbm9uLWVtcHR5IHF1ZXVlLgorICovCitzdGF0aWMgaW50CitrcnVucV9maW5kYml0KHN0cnVj
dCBrcnVucSAqcnEpCit7CisJc3RydWN0IGtycWJpdHMgKnJxYjsKKwlpbnQgcHJpOworCWludCBp
OworCisJcnFiID0gJnJxLT5ycV9zdGF0dXM7CisJZm9yIChpID0gMDsgaSA8IEtRQl9MRU47IGkr
KykgeworCQlpZiAocnFiLT5ycWJfYml0c1tpXSkgeworCQkJcHJpID0gS1FCX0ZGUyhycWItPnJx
Yl9iaXRzW2ldKSArIChpIDw8IEtRQl9MMkJQVyk7CisJCQlyZXR1cm4gKHByaSk7CisJCX0KKwl9
CisJcmV0dXJuICgtMSk7Cit9CisKK3N0YXRpYyBpbnQKK2tydW5xX2NoZWNrKHN0cnVjdCBrcnVu
cSAqcnEpCit7CisJc3RydWN0IGtycWJpdHMgKnJxYjsKKwlpbnQgaTsKKworCXJxYiA9ICZycS0+
cnFfc3RhdHVzOworCWZvciAoaSA9IDA7IGkgPCBLUUJfTEVOOyBpKyspIHsKKwkJaWYgKHJxYi0+
cnFiX2JpdHNbaV0pCisJCQlyZXR1cm4gKDEpOworCX0KKwlyZXR1cm4gKDApOworfQorCisvKgor
ICogU2V0IHRoZSBzdGF0dXMgYml0IG9mIHRoZSBxdWV1ZSBjb3JyZXNwb25kaW5nIHRvIHByaW9y
aXR5IGxldmVsIHByaSwKKyAqIGluZGljYXRpbmcgdGhhdCBpdCBpcyBub24tZW1wdHkuCisgKi8K
K3N0YXRpYyBpbmxpbmUgdm9pZAora3J1bnFfc2V0Yml0KHN0cnVjdCBrcnVucSAqcnEsIGludCBw
cmkpCit7CisJc3RydWN0IGtycWJpdHMgKnJxYjsKKworCXJxYiA9ICZycS0+cnFfc3RhdHVzOwor
CXJxYi0+cnFiX2JpdHNbS1FCX1dPUkQocHJpKV0gfD0gS1FCX0JJVChwcmkpOworfQorCisvKgor
ICogQWRkIHRoZSBLU0UgdG8gdGhlIHF1ZXVlIHNwZWNpZmllZCBieSBpdHMgcHJpb3JpdHksIGFu
ZCBzZXQgdGhlCisgKiBjb3JyZXNwb25kaW5nIHN0YXR1cyBiaXQuCisgKi8KK3N0YXRpYyB2b2lk
CitrcnVucV9hZGQoc3RydWN0IGtydW5xICpycSwgc3RydWN0IGtzZSAqa2UpCit7CisJc3RydWN0
IGtycWhlYWQgKnJxaDsKKwlpbnQgcHJpOworCisJcHJpID0ga2UtPmtlX3RocmVhZC0+dGRfcHJp
b3JpdHk7CisJa2UtPmtlX3JxaW5kZXggPSBwcmk7CisJa3J1bnFfc2V0Yml0KHJxLCBwcmkpOwor
CXJxaCA9ICZycS0+cnFfcXVldWVzW3ByaV07CisJaWYgKGtlLT5rZV9mbGFncyAmIEtFRl9QUkVF
TVBURUQpCisJCVRBSUxRX0lOU0VSVF9IRUFEKHJxaCwga2UsIGtlX3Byb2NxKTsKKwllbHNlCisJ
CVRBSUxRX0lOU0VSVF9UQUlMKHJxaCwga2UsIGtlX3Byb2NxKTsKK30KKworLyoKKyAqIEZpbmQg
dGhlIGhpZ2hlc3QgcHJpb3JpdHkgcHJvY2VzcyBvbiB0aGUgcnVuIHF1ZXVlLgorICovCitzdGF0
aWMgc3RydWN0IGtzZSAqCitrcnVucV9jaG9vc2Uoc3RydWN0IGtydW5xICpycSkKK3sKKwlzdHJ1
Y3Qga3JxaGVhZCAqcnFoOworCXN0cnVjdCBrc2UgKmtlOworCWludCBwcmk7CisKKwltdHhfYXNz
ZXJ0KCZzY2hlZF9sb2NrLCBNQV9PV05FRCk7CisJaWYgKChwcmkgPSBrcnVucV9maW5kYml0KHJx
KSkgIT0gLTEpIHsKKwkJcnFoID0gJnJxLT5ycV9xdWV1ZXNbcHJpXTsKKwkJa2UgPSBUQUlMUV9G
SVJTVChycWgpOworCQlLQVNTRVJUKGtlICE9IE5VTEwsICgia3J1bnFfY2hvb3NlOiBubyB0aHJl
YWQgb24gYnVzeSBxdWV1ZSIpKTsKKyNpZmRlZiBTTVAKKwkJaWYgKHByaSA8PSBQUklfTUFYX0lU
SEQgfHwgcnVucV9mdXp6IDw9IDApCisJCQlyZXR1cm4gKGtlKTsKKworCQkvKgorCQkgKiBJbiB0
aGUgZmlyc3QgY291cGxlIG9mIGVudHJpZXMsIGNoZWNrIGlmCisJCSAqIHRoZXJlIGlzIG9uZSBm
b3Igb3VyIENQVSBhcyBhIHByZWZlcmVuY2UuCisJCSAqLworCQlzdHJ1Y3Qga3NlICprZTIgPSBr
ZTsKKwkJY29uc3QgaW50IG15Y3B1ID0gUENQVV9HRVQoY3B1aWQpOworCQljb25zdCBpbnQgbXlt
YXNrID0gMSA8PCBteWNwdTsKKwkJaW50IGNvdW50ID0gcnVucV9mdXp6OworCisJCXdoaWxlIChj
b3VudC0tICYmIGtlMikgeworCQkJY29uc3QgaW50IGNwdSA9IGtlMi0+a2Vfd2FrZXVwX2NwdTsK
KwkJCWlmIChjcHVfc2libGluZ1tjcHVdICYgbXltYXNrKSB7CisJCQkJa2UgPSBrZTI7CisJCQkJ
YnJlYWs7CisJCQl9CisJCQlrZTIgPSBUQUlMUV9ORVhUKGtlMiwga2VfcHJvY3EpOworCQl9Cisj
ZW5kaWYKKwkJcmV0dXJuIChrZSk7CisJfQorCisJcmV0dXJuIChOVUxMKTsKK30KKworLyoKKyAq
IFJlbW92ZSB0aGUgS1NFIGZyb20gdGhlIHF1ZXVlIHNwZWNpZmllZCBieSBpdHMgcHJpb3JpdHks
IGFuZCBjbGVhciB0aGUKKyAqIGNvcnJlc3BvbmRpbmcgc3RhdHVzIGJpdCBpZiB0aGUgcXVldWUg
YmVjb21lcyBlbXB0eS4KKyAqIENhbGxlciBtdXN0IHNldCBrZS0+a2Vfc3RhdGUgYWZ0ZXJ3YXJk
cy4KKyAqLworc3RhdGljIHZvaWQKK2tydW5xX3JlbW92ZShzdHJ1Y3Qga3J1bnEgKnJxLCBzdHJ1
Y3Qga3NlICprZSkKK3sKKwlzdHJ1Y3Qga3JxaGVhZCAqcnFoOworCWludCBwcmk7CisKKwlLQVNT
RVJUKGtlLT5rZV9wcm9jLT5wX3NmbGFnICYgUFNfSU5NRU0sCisJCSgicnVucV9yZW1vdmU6IHBy
b2Nlc3Mgc3dhcHBlZCBvdXQiKSk7CisJcHJpID0ga2UtPmtlX3JxaW5kZXg7CisJcnFoID0gJnJx
LT5ycV9xdWV1ZXNbcHJpXTsKKwlLQVNTRVJUKGtlICE9IE5VTEwsICgia3J1bnFfcmVtb3ZlOiBu
byBwcm9jIG9uIGJ1c3kgcXVldWUiKSk7CisJVEFJTFFfUkVNT1ZFKHJxaCwga2UsIGtlX3Byb2Nx
KTsKKwlpZiAoVEFJTFFfRU1QVFkocnFoKSkKKwkJa3J1bnFfY2xyYml0KHJxLCBwcmkpOworfQor
CitzdGF0aWMgaW5saW5lIHZvaWQKK2tzZXFfcnVucV9hZGQoc3RydWN0IGtzZXEgKmtzZXEsIHN0
cnVjdCBrc2UgKmtlKQoreworCWtydW5xX2FkZChrZS0+a2VfcnVucSwga2UpOworCWtlLT5rZV9r
c2VxID0ga3NlcTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitrc2VxX3J1bnFfcmVtKHN0cnVj
dCBrc2VxICprc2VxLCBzdHJ1Y3Qga3NlICprZSkKK3sKKwlrcnVucV9yZW1vdmUoa2UtPmtlX3J1
bnEsIGtlKTsKKwlrZS0+a2Vfa3NlcSA9IE5VTEw7CisJa2UtPmtlX3J1bnEgPSBOVUxMOworfQor
CitzdGF0aWMgaW5saW5lIHZvaWQKK2tzZXFfbG9hZF9hZGQoc3RydWN0IGtzZXEgKmtzZXEsIHN0
cnVjdCBrc2UgKmtlKQoreworCWtzZXEtPmtzcV9sb2FkKys7CisJaWYgKChrZS0+a2VfcHJvYy0+
cF9mbGFnICYgUF9OT0xPQUQpID09IDApCisJCXNjaGVkX3RkY250Kys7Cit9CisKK3N0YXRpYyBp
bmxpbmUgdm9pZAora3NlcV9sb2FkX3JlbShzdHJ1Y3Qga3NlcSAqa3NlcSwgc3RydWN0IGtzZSAq
a2UpCit7CisJa3NlcS0+a3NxX2xvYWQtLTsKKwlpZiAoKGtlLT5rZV9wcm9jLT5wX2ZsYWcgJiBQ
X05PTE9BRCkgPT0gMCkKKwkJc2NoZWRfdGRjbnQtLTsKK30KKworLyoKKyAqIFBpY2sgdGhlIGhp
Z2hlc3QgcHJpb3JpdHkgdGFzayB3ZSBoYXZlIGFuZCByZXR1cm4gaXQuCisgKi8KK3N0YXRpYyBz
dHJ1Y3Qga3NlICoKK2tzZXFfY2hvb3NlKHN0cnVjdCBrc2VxICprc2VxKQoreworCXN0cnVjdCBr
cnVucSAqc3dhcDsKKwlzdHJ1Y3Qga3NlICprZTsKKworCW10eF9hc3NlcnQoJnNjaGVkX2xvY2ss
IE1BX09XTkVEKTsKKwlrZSA9IGtydW5xX2Nob29zZShrc2VxLT5rc3FfY3Vycik7CisJaWYgKGtl
ICE9IE5VTEwpCisJCXJldHVybiAoa2UpOworCisJa3NlcS0+a3NxX2V4cGlyZWRfbmljZSA9IFBS
SU9fTUFYICsgMTsKKwlrc2VxLT5rc3FfZXhwaXJlZF90aWNrID0gMDsKKwlzd2FwID0ga3NlcS0+
a3NxX2N1cnI7CisJa3NlcS0+a3NxX2N1cnIgPSBrc2VxLT5rc3FfbmV4dDsKKwlrc2VxLT5rc3Ff
bmV4dCA9IHN3YXA7CisJa2UgPSBrcnVucV9jaG9vc2Uoa3NlcS0+a3NxX2N1cnIpOworCWlmIChr
ZSAhPSBOVUxMKQorCQlyZXR1cm4gKGtlKTsKKworCXJldHVybiBrcnVucV9jaG9vc2UoJmtzZXEt
PmtzcV9pZGxlKTsKK30KKworc3RhdGljIGlubGluZSB1aW50NjRfdAorc2NoZWRfdGltZXN0YW1w
KHZvaWQpCit7CisJdWludDY0X3Qgbm93ID0gY3B1dGljazJ1c2VjKGNwdV90aWNrcygpKSAqIDEw
MDA7CisJcmV0dXJuIChub3cpOworfQorCitzdGF0aWMgaW5saW5lIGludAorc2NoZWRfdGltZXNs
aWNlKHN0cnVjdCBrc2UgKmtlKQoreworCXN0cnVjdCBwcm9jICpwID0ga2UtPmtlX3Byb2M7CisK
KwlpZiAoa2UtPmtlX3Byb2MtPnBfbmljZSA8IDApCisJCXJldHVybiBTQ0FMRV9VU0VSX1BSSShk
ZWZfdGltZXNsaWNlKjQsIFBST0NfVVNFUl9QUkkocCkpOworICAgICAgICBlbHNlCisJCXJldHVy
biBTQ0FMRV9VU0VSX1BSSShkZWZfdGltZXNsaWNlLCBQUk9DX1VTRVJfUFJJKHApKTsKK30KKwor
c3RhdGljIGlubGluZSBpbnQKK3NjaGVkX2lzX3RpbWVzaGFyZShzdHJ1Y3Qga3NlZ3JwICprZykK
K3sKKwlyZXR1cm4gKGtnLT5rZ19wcmlfY2xhc3MgPT0gUFJJX1RJTUVTSEFSRSk7Cit9CisKK3N0
YXRpYyBpbnQKK3NjaGVkX2NhbGNfcHJpKHN0cnVjdCBrc2VncnAgKmtnKQoreworCWludCBzY29y
ZSwgcHJpOworCisJaWYgKHNjaGVkX2lzX3RpbWVzaGFyZShrZykpIHsKKwkJc2NvcmUgPSBDVVJS
RU5UX1NDT1JFKGtnKSAtIE1BWF9TQ09SRSAvIDI7CisJCXByaSA9IFBST0NfUFJJKGtnLT5rZ19w
cm9jKSAtIHNjb3JlOworCQlpZiAocHJpIDwgUFVTRVIpCisJCQlwcmkgPSBQVVNFUjsKKwkJZWxz
ZSBpZiAocHJpID4gUFVTRVJfTUFYKQorCQkJcHJpID0gUFVTRVJfTUFYOworCQlyZXR1cm4gKHBy
aSk7CisJfQorCXJldHVybiAoa2ctPmtnX3VzZXJfcHJpKTsKK30KKworc3RhdGljIGludAorc2No
ZWRfcmVjYWxjX3ByaShzdHJ1Y3Qga3NlICprZSwgdWludDY0X3Qgbm93KQoreworCXVpbnQ2NF90
CWRlbHRhOworCXVuc2lnbmVkIGludAlzbGVlcF90aW1lOworCXN0cnVjdCBrc2VncnAJKmtnOwor
CisJa2cgPSBrZS0+a2Vfa3NlZ3JwOworCWRlbHRhID0gbm93IC0ga2UtPmtlX3RpbWVzdGFtcDsK
KwlpZiAoX19wcmVkaWN0X2ZhbHNlKCFzY2hlZF9pc190aW1lc2hhcmUoa2cpKSkKKwkJcmV0dXJu
IChrZy0+a2dfdXNlcl9wcmkpOworCisJaWYgKGRlbHRhID4gTlNfTUFYX1NMRUVQX1RJTUUpCisJ
CXNsZWVwX3RpbWUgPSBOU19NQVhfU0xFRVBfVElNRTsKKwllbHNlCisJCXNsZWVwX3RpbWUgPSAo
dW5zaWduZWQgaW50KWRlbHRhOworCWlmIChfX3ByZWRpY3RfZmFsc2Uoc2xlZXBfdGltZSA9PSAw
KSkKKwkJZ290byBvdXQ7CisKKwlpZiAoa2UtPmtlX2FjdGl2YXRlZCAhPSAtMSAmJgorCSAgICBz
bGVlcF90aW1lID4gSU5URVJBQ1RJVkVfU0xFRVBfVElNRShrZSkpIHsKKwkJa2ctPmtnX3NscHRp
bWUgPSBIWl9UT19OUyhNQVhfU0xFRVBfVElNRSAtIGRlZl90aW1lc2xpY2UpOworCX0gZWxzZSB7
CisJCXNsZWVwX3RpbWUgKj0gKE1BWF9TQ09SRSAtIENVUlJFTlRfU0NPUkUoa2cpKSA/IDogMTsK
KworCQkvKgorCQkgKiBJZiB0aHJlYWQgaXMgd2FraW5nIGZyb20gdW5pbnRlcnJ1cHRpYmxlIHNs
ZWVwLCBpdCBpcworCQkgKiB1bmxpa2VseSBhbiBpbnRlcmFjdGl2ZSBzbGVlcCwgbGltaXQgaXRz
IHNsZWVwIHRpbWUgdG8KKwkJICogcHJldmVudCBpdCBmcm9tIGJlaW5nIGFuIGludGVyYWN0aXZl
IHRocmVhZC4KKwkJICovCisJCWlmIChrZS0+a2VfYWN0aXZhdGVkID09IC0xKSB7CisJCQlpZiAo
a2ctPmtnX3NscHRpbWUgPj0gSU5URVJBQ1RJVkVfU0xFRVBfVElNRShrZSkpCisJCQkJc2xlZXBf
dGltZSA9IDA7CisJCQllbHNlIGlmIChrZy0+a2dfc2xwdGltZSArIHNsZWVwX3RpbWUgPj0KKwkJ
CQlJTlRFUkFDVElWRV9TTEVFUF9USU1FKGtlKSkgeworCQkJCWtnLT5rZ19zbHB0aW1lID0gSU5U
RVJBQ1RJVkVfU0xFRVBfVElNRShrZSk7CisJCQkJc2xlZXBfdGltZSA9IDA7CisJCQl9CisJCX0K
KworCQkvKgorCQkgKiBUaHJlYWQgZ2V0cyBwcmlvcml0eSBib29zdCBoZXJlLgorICAgICAgICAg
ICAgICAgICAqLworCQlrZy0+a2dfc2xwdGltZSArPSBzbGVlcF90aW1lOworCisJCS8qIFNsZWVw
IHRpbWUgc2hvdWxkIG5ldmVyIGJlIGxhcmdlciB0aGFuIG1heGltdW0gKi8KKwkJaWYgKGtnLT5r
Z19zbHB0aW1lID4gTlNfTUFYX1NMRUVQX1RJTUUpCisJCQlrZy0+a2dfc2xwdGltZSA9IE5TX01B
WF9TTEVFUF9USU1FOworCX0KKworb3V0OgorCXJldHVybiAoc2NoZWRfY2FsY19wcmkoa2cpKTsK
K30KKworc3RhdGljIHZvaWQKK3NjaGVkX3VwZGF0ZV9ydW50aW1lKHN0cnVjdCBrc2UgKmtlLCB1
aW50NjRfdCBub3cpCit7CisJdWludDY0X3QgcnVudGltZTsKKwlzdHJ1Y3Qga3NlZ3JwICprZyA9
IGtlLT5rZV9rc2VncnA7CisKKwlpZiAoc2NoZWRfaXNfdGltZXNoYXJlKGtnKSkgeworCQlpZiAo
KGludDY0X3QpKG5vdyAtIGtlLT5rZV90aW1lc3RhbXApIDwgTlNfTUFYX1NMRUVQX1RJTUUpIHsK
KwkJCXJ1bnRpbWUgPSBub3cgLSBrZS0+a2VfdGltZXN0YW1wOworCQkJaWYgKChpbnQ2NF90KShu
b3cgLSBrZS0+a2VfdGltZXN0YW1wKSA8IDApCisJCQkJcnVudGltZSA9IDA7CisJCX0gZWxzZSB7
CisJCQlydW50aW1lID0gTlNfTUFYX1NMRUVQX1RJTUU7CisJCX0KKwkJcnVudGltZSAvPSAoQ1VS
UkVOVF9TQ09SRShrZykgPyA6IDEpOworCQlrZy0+a2dfcnVudGltZSArPSBydW50aW1lOworCQlr
ZS0+a2VfdGltZXN0YW1wID0gbm93OworCX0KK30KKworc3RhdGljIHZvaWQKK3NjaGVkX2NvbW1p
dF9ydW50aW1lKHN0cnVjdCBrc2UgKmtlKQoreworCXN0cnVjdCBrc2VncnAgKmtnID0ga2UtPmtl
X2tzZWdycDsKKworCWlmIChrZy0+a2dfcnVudGltZSA+IGtnLT5rZ19zbHB0aW1lKQorCQlrZy0+
a2dfc2xwdGltZSA9IDA7CisJZWxzZQorCQlrZy0+a2dfc2xwdGltZSAtPSBrZy0+a2dfcnVudGlt
ZTsKKwlrZy0+a2dfcnVudGltZSA9IDA7Cit9CisKK3N0YXRpYyB2b2lkCitrc2VxX3NldHVwKHN0
cnVjdCBrc2VxICprc2VxKQoreworCWtydW5xX2luaXQoJmtzZXEtPmtzcV90aW1lc2hhcmVbMF0p
OworCWtydW5xX2luaXQoJmtzZXEtPmtzcV90aW1lc2hhcmVbMV0pOworCWtydW5xX2luaXQoJmtz
ZXEtPmtzcV9pZGxlKTsKKwlrc2VxLT5rc3FfY3VyciA9ICZrc2VxLT5rc3FfdGltZXNoYXJlWzBd
OworCWtzZXEtPmtzcV9uZXh0ID0gJmtzZXEtPmtzcV90aW1lc2hhcmVbMV07CisJa3NlcS0+a3Nx
X2V4cGlyZWRfbmljZSA9IFBSSU9fTUFYICsgMTsKKwlrc2VxLT5rc3FfZXhwaXJlZF90aWNrID0g
MDsKK30KKworc3RhdGljIHZvaWQKK3NjaGVkX3NldHVwKHZvaWQgKmR1bW15KQoreworI2lmZGVm
IFNNUAorCWludCBpOworI2VuZGlmCisKKwkvKgorCSAqIFRvIGF2b2lkIGRpdmlkZS1ieS16ZXJv
LCB3ZSBzZXQgcmVhbHN0YXRoeiBhIGR1bW15IHZhbHVlCisJICogaW4gY2FzZSB3aGljaCBzY2hl
ZF9jbG9jaygpIGNhbGxlZCBiZWZvcmUgc2NoZWRfaW5pdHRpY2tzKCkuCisJICovCisJcmVhbHN0
YXRoegk9IGh6OworCW1pbl90aW1lc2xpY2UJPSBNQVgoNSAqIGh6IC8gMTAwMCwgMSk7CisJZGVm
X3RpbWVzbGljZQk9IE1BWCgxMDAgKiBoeiAvIDEwMDAsIDEpOworCWdyYW51bGFyaXR5CT0gTUFY
KDEwICogaHogLyAxMDAwLCAxKTsKKworCWtzZXFfc2V0dXAoJmtzZXFfZ2xvYmFsKTsKKyNpZmRl
ZiBTTVAKKwlydW5xX2Z1enogPSBNSU4obXBfbmNwdXMgKiAyLCA4KTsKKwkvKgorCSAqIEluaXRp
YWxpemUgdGhlIGtzZXFzLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBNQVhDUFU7IGkrKykgewor
CQlzdHJ1Y3Qga3NlcSAqa3NxOworCisJCWtzcSA9ICZrc2VxX2NwdVtpXTsKKwkJa3NlcV9zZXR1
cCgma3NlcV9jcHVbaV0pOworCQljcHVfc2libGluZ1tpXSA9IDEgPDwgaTsKKwl9CisJaWYgKHNt
cF90b3BvbG9neSAhPSBOVUxMKSB7CisJCWludCBpLCBqOworCQljcHVtYXNrX3QgdmlzaXRlZDsK
KwkJc3RydWN0IGNwdV9ncm91cCAqY2c7CisKKwkJdmlzaXRlZCA9IDA7CisJCWZvciAoaSA9IDA7
IGkgPCBzbXBfdG9wb2xvZ3ktPmN0X2NvdW50OyBpKyspIHsKKwkJCWNnID0gJnNtcF90b3BvbG9n
eS0+Y3RfZ3JvdXBbaV07CisJCQlpZiAoY2ctPmNnX21hc2sgJiB2aXNpdGVkKQorCQkJCXBhbmlj
KCJkdXBsaWNhdGVkIGNwdW1hc2sgaW4gY3RfZ3JvdXAuIik7CisJCQlpZiAoY2ctPmNnX21hc2sg
PT0gMCkKKwkJCQljb250aW51ZTsKKwkJCXZpc2l0ZWQgfD0gY2ctPmNnX21hc2s7CisJCQlmb3Ig
KGogPSAwOyBqIDwgTUFYQ1BVOyBqKyspIHsKKwkJCQlpZiAoKGNnLT5jZ19tYXNrICYgKDEgPDwg
aikpICE9IDApCisJCQkJCWNwdV9zaWJsaW5nW2pdIHw9IGNnLT5jZ19tYXNrOworCQkJfQorCQl9
CisJfQorI2VuZGlmCisKKwltdHhfbG9ja19zcGluKCZzY2hlZF9sb2NrKTsKKwlrc2VxX2xvYWRf
YWRkKEtTRVFfU0VMRigpLCAma3NlMCk7CisJbXR4X3VubG9ja19zcGluKCZzY2hlZF9sb2NrKTsK
K30KKworLyogQVJHU1VTRUQgKi8KK3N0YXRpYyB2b2lkCitzY2hlZF9pbml0dGlja3Modm9pZCAq
ZHVtbXkpCit7CisJbXR4X2xvY2tfc3Bpbigmc2NoZWRfbG9jayk7CisJcmVhbHN0YXRoeiA9IHN0
YXRoeiA/IHN0YXRoeiA6IGh6OworCW10eF91bmxvY2tfc3Bpbigmc2NoZWRfbG9jayk7Cit9CisK
Ky8qCisgKiBWZXJ5IGVhcmx5IGluIHRoZSBib290IHNvbWUgc2V0dXAgb2Ygc2NoZWR1bGVyLXNw
ZWNpZmljCisgKiBwYXJ0cyBvZiBwcm9jMCBhbmQgb2Ygc29lbSBzY2hlZHVsZXIgcmVzb3VyY2Vz
IG5lZWRzIHRvIGJlIGRvbmUuCisgKiBDYWxsZWQgZnJvbToKKyAqICBwcm9jMF9pbml0KCkKKyAq
Lwordm9pZAorc2NoZWRpbml0KHZvaWQpCit7CisJLyoKKwkgKiBTZXQgdXAgdGhlIHNjaGVkdWxl
ciBzcGVjaWZpYyBwYXJ0cyBvZiBwcm9jMC4KKwkgKi8KKwlwcm9jMC5wX3NjaGVkID0gTlVMTDsg
LyogWFhYICovCisJa3NlZ3JwMC5rZ19zY2hlZCA9ICZrZ19zY2hlZDA7CisJdGhyZWFkMC50ZF9z
Y2hlZCA9ICZrc2UwOworCWtzZTAua2VfdGhyZWFkID0gJnRocmVhZDA7CisJa3NlMC5rZV9zdGF0
ZSA9IEtFU19USFJFQUQ7CisJa3NlMC5rZV9zbGljZSA9IDEwMDsKKwlrZ19zY2hlZDAuc2tnX2Nv
bmN1cnJlbmN5ID0gMTsKKwlrZ19zY2hlZDAuc2tnX2F2YWlsX29wZW5uaW5ncyA9IDA7IC8qIHdl
IGFyZSBhbHJlYWR5IHJ1bm5pbmcgKi8KK30KKworLyoKKyAqIFRoaXMgaXMgb25seSBzb21ld2hh
dCBhY2N1cmF0ZSBzaW5jZSBnaXZlbiBtYW55IHByb2Nlc3NlcyBvZiB0aGUgc2FtZQorICogcHJp
b3JpdHkgdGhleSB3aWxsIHN3aXRjaCB3aGVuIHRoZWlyIHNsaWNlcyBydW4gb3V0LCB3aGljaCB3
aWxsIGJlCisgKiBhdCBtb3N0IFNDSEVEX1NMSUNFX01BWC4KKyAqLworaW50CitzY2hlZF9ycl9p
bnRlcnZhbCh2b2lkKQoreworCXJldHVybiAoZGVmX3RpbWVzbGljZSk7Cit9CisKK3N0YXRpYyB2
b2lkCitzY2hlZF9wY3RjcHVfdXBkYXRlKHN0cnVjdCBrc2UgKmtlKQoreworCS8qCisJICogQWRq
dXN0IGNvdW50ZXJzIGFuZCB3YXRlcm1hcmsgZm9yIHBjdGNwdSBjYWxjLgorCSAqLworCWlmIChr
ZS0+a2VfbHRpY2sgPiB0aWNrcyAtIFNDSEVEX0NQVV9USUNLUykgeworCQkvKgorCQkgKiBTaGlm
dCB0aGUgdGljayBjb3VudCBvdXQgc28gdGhhdCB0aGUgZGl2aWRlIGRvZXNuJ3QKKwkJICogcm91
bmQgYXdheSBvdXIgcmVzdWx0cy4KKwkJICovCisJCWtlLT5rZV90aWNrcyA8PD0gMTA7CisJCWtl
LT5rZV90aWNrcyA9IChrZS0+a2VfdGlja3MgLyAodGlja3MgLSBrZS0+a2VfZnRpY2spKSAqCisJ
CSAgICBTQ0hFRF9DUFVfVElDS1M7CisJCWtlLT5rZV90aWNrcyA+Pj0gMTA7CisJfSBlbHNlCisJ
CWtlLT5rZV90aWNrcyA9IDA7CisJa2UtPmtlX2x0aWNrID0gdGlja3M7CisJa2UtPmtlX2Z0aWNr
ID0ga2UtPmtlX2x0aWNrIC0gU0NIRURfQ1BVX1RJQ0tTOworfQorCitzdGF0aWMgdm9pZAorc2No
ZWRfdGhyZWFkX3ByaW9yaXR5KHN0cnVjdCB0aHJlYWQgKnRkLCB1X2NoYXIgcHJpbykKK3sKKwlz
dHJ1Y3Qga3NlICprZTsKKworCWtlID0gdGQtPnRkX2tzZTsKKwltdHhfYXNzZXJ0KCZzY2hlZF9s
b2NrLCBNQV9PV05FRCk7CisJaWYgKF9fcHJlZGljdF9mYWxzZSh0ZC0+dGRfcHJpb3JpdHkgPT0g
cHJpbykpCisJCXJldHVybjsKKworCWlmIChURF9PTl9SVU5RKHRkKSkgeworCQkvKgorCQkgKiBJ
ZiB0aGUgcHJpb3JpdHkgaGFzIGJlZW4gZWxldmF0ZWQgZHVlIHRvIHByaW9yaXR5CisJCSAqIHBy
b3BhZ2F0aW9uLCB3ZSBtYXkgaGF2ZSB0byBtb3ZlIG91cnNlbHZlcyB0byBhIG5ldworCQkgKiBx
dWV1ZS4gIFdlIHN0aWxsIGNhbGwgYWRqdXN0cnVucXVldWUgYmVsb3cgaW4gY2FzZSBrc2UKKwkJ
ICogbmVlZHMgdG8gZml4IHRoaW5ncyB1cC4KKwkJICovCisJCWlmIChwcmlvIDwgdGQtPnRkX3By
aW9yaXR5ICYmIGtlLT5rZV9ydW5xICE9IE5VTEwgJiYKKwkJICAgIGtlLT5rZV9ydW5xICE9IGtl
LT5rZV9rc2VxLT5rc3FfY3VycikgeworCQkJa3J1bnFfcmVtb3ZlKGtlLT5rZV9ydW5xLCBrZSk7
CisJCQlrZS0+a2VfcnVucSA9IGtlLT5rZV9rc2VxLT5rc3FfY3VycjsKKwkJCWtydW5xX2FkZChr
ZS0+a2VfcnVucSwga2UpOworCQl9CisJCWFkanVzdHJ1bnF1ZXVlKHRkLCBwcmlvKTsKKwl9IGVs
c2UKKwkJdGQtPnRkX3ByaW9yaXR5ID0gcHJpbzsKK30KKworLyoKKyAqIFVwZGF0ZSBhIHRocmVh
ZCdzIHByaW9yaXR5IHdoZW4gaXQgaXMgbGVudCBhbm90aGVyIHRocmVhZCdzCisgKiBwcmlvcml0
eS4KKyAqLwordm9pZAorc2NoZWRfbGVuZF9wcmlvKHN0cnVjdCB0aHJlYWQgKnRkLCB1X2NoYXIg
cHJpbykKK3sKKworCXRkLT50ZF9mbGFncyB8PSBUREZfQk9SUk9XSU5HOworCXNjaGVkX3RocmVh
ZF9wcmlvcml0eSh0ZCwgcHJpbyk7Cit9CisKKy8qCisgKiBSZXN0b3JlIGEgdGhyZWFkJ3MgcHJp
b3JpdHkgd2hlbiBwcmlvcml0eSBwcm9wYWdhdGlvbiBpcworICogb3Zlci4gIFRoZSBwcmlvIGFy
Z3VtZW50IGlzIHRoZSBtaW5pbXVtIHByaW9yaXR5IHRoZSB0aHJlYWQKKyAqIG5lZWRzIHRvIGhh
dmUgdG8gc2F0aXNmeSBvdGhlciBwb3NzaWJsZSBwcmlvcml0eSBsZW5kaW5nCisgKiByZXF1ZXN0
cy4gIElmIHRoZSB0aHJlYWQncyByZWd1bGFyIHByaW9yaXR5IGlzIGxlc3MKKyAqIGltcG9ydGFu
dCB0aGFuIHByaW8sIHRoZSB0aHJlYWQgd2lsbCBrZWVwIGEgcHJpb3JpdHkgYm9vc3QKKyAqIG9m
IHByaW8uCisgKi8KK3ZvaWQKK3NjaGVkX3VubGVuZF9wcmlvKHN0cnVjdCB0aHJlYWQgKnRkLCB1
X2NoYXIgcHJpbykKK3sKKwl1X2NoYXIgYmFzZV9wcmk7CisKKwlpZiAodGQtPnRkX2Jhc2VfcHJp
ID49IFBSSV9NSU5fVElNRVNIQVJFICYmCisJICAgIHRkLT50ZF9iYXNlX3ByaSA8PSBQUklfTUFY
X1RJTUVTSEFSRSkKKwkJYmFzZV9wcmkgPSB0ZC0+dGRfa3NlZ3JwLT5rZ191c2VyX3ByaTsKKwll
bHNlCisJCWJhc2VfcHJpID0gdGQtPnRkX2Jhc2VfcHJpOworCWlmIChwcmlvID49IGJhc2VfcHJp
KSB7CisJCXRkLT50ZF9mbGFncyAmPSB+VERGX0JPUlJPV0lORzsKKwkJc2NoZWRfdGhyZWFkX3By
aW9yaXR5KHRkLCBiYXNlX3ByaSk7CisJfSBlbHNlCisJCXNjaGVkX2xlbmRfcHJpbyh0ZCwgcHJp
byk7Cit9CisKK3ZvaWQKK3NjaGVkX3ByaW8oc3RydWN0IHRocmVhZCAqdGQsIHVfY2hhciBwcmlv
KQoreworCXVfY2hhciBvbGRwcmlvOworCisJaWYgKHRkLT50ZF9rc2VncnAtPmtnX3ByaV9jbGFz
cyA9PSBQUklfVElNRVNIQVJFKQorCQlwcmlvID0gTUlOKHByaW8sIFBVU0VSX01BWCk7CisKKwkv
KiBGaXJzdCwgdXBkYXRlIHRoZSBiYXNlIHByaW9yaXR5LiAqLworCXRkLT50ZF9iYXNlX3ByaSA9
IHByaW87CisKKwkvKgorCSAqIElmIHRoZSB0aHJlYWQgaXMgYm9ycm93aW5nIGFub3RoZXIgdGhy
ZWFkJ3MgcHJpb3JpdHksIGRvbid0CisJICogZXZlciBsb3dlciB0aGUgcHJpb3JpdHkuCisJICov
CisJaWYgKHRkLT50ZF9mbGFncyAmIFRERl9CT1JST1dJTkcgJiYgdGQtPnRkX3ByaW9yaXR5IDwg
cHJpbykKKwkJcmV0dXJuOworCisJLyogQ2hhbmdlIHRoZSByZWFsIHByaW9yaXR5LiAqLworCW9s
ZHByaW8gPSB0ZC0+dGRfcHJpb3JpdHk7CisJc2NoZWRfdGhyZWFkX3ByaW9yaXR5KHRkLCBwcmlv
KTsKKworCS8qCisJICogSWYgdGhlIHRocmVhZCBpcyBvbiBhIHR1cm5zdGlsZSwgdGhlbiBsZXQg
dGhlIHR1cm5zdGlsZSB1cGRhdGUKKwkgKiBpdHMgc3RhdGUuCisJICovCisJaWYgKFREX09OX0xP
Q0sodGQpICYmIG9sZHByaW8gIT0gcHJpbykKKwkJdHVybnN0aWxlX2FkanVzdCh0ZCwgb2xkcHJp
byk7Cit9CisKK3ZvaWQKK3NjaGVkX3N3aXRjaChzdHJ1Y3QgdGhyZWFkICp0ZCwgc3RydWN0IHRo
cmVhZCAqbmV3dGQsIGludCBmbGFncykKK3sKKwlzdHJ1Y3Qga3NlcSAqa3NxOworCXN0cnVjdCBr
c2UgKmtlOworCXN0cnVjdCBrc2VncnAgKmtnOworCXVpbnQ2NF90IG5vdzsKKworCW10eF9hc3Nl
cnQoJnNjaGVkX2xvY2ssIE1BX09XTkVEKTsKKworCW5vdyA9IHNjaGVkX3RpbWVzdGFtcCgpOwor
CWtlID0gdGQtPnRkX2tzZTsKKwlrZyA9IHRkLT50ZF9rc2VncnA7CisJa3NxID0gS1NFUV9TRUxG
KCk7CisKKwl0ZC0+dGRfbGFzdGNwdSA9IHRkLT50ZF9vbmNwdTsKKwl0ZC0+dGRfb25jcHUgPSBO
T0NQVTsKKwl0ZC0+dGRfZmxhZ3MgJj0gflRERl9ORUVEUkVTQ0hFRDsKKwl0ZC0+dGRfb3dlcHJl
ZW1wdCA9IDA7CisKKwlpZiAodGQgPT0gUENQVV9HRVQoaWRsZXRocmVhZCkpIHsKKwkJVERfU0VU
X0NBTl9SVU4odGQpOworCX0gZWxzZSB7CisJCXNjaGVkX3VwZGF0ZV9ydW50aW1lKGtlLCBub3cp
OworCQkvKiBXZSBhcmUgZW5kaW5nIG91ciBydW4gc28gbWFrZSBvdXIgc2xvdCBhdmFpbGFibGUg
YWdhaW4gKi8KKwkJU0xPVF9SRUxFQVNFKHRkLT50ZF9rc2VncnApOworCQlrc2VxX2xvYWRfcmVt
KGtzcSwga2UpOworCQlpZiAoVERfSVNfUlVOTklORyh0ZCkpIHsKKwkJCXNldHJ1bnF1ZXVlKHRk
LCAoZmxhZ3MgJiBTV19QUkVFTVBUKSA/CisJCQkgICAgU1JRX09VUlNFTEZ8U1JRX1lJRUxESU5H
fFNSUV9QUkVFTVBURUQgOgorCQkJICAgIFNSUV9PVVJTRUxGfFNSUV9ZSUVMRElORyk7CisJCX0g
ZWxzZSB7CisJCQlpZiAoKHRkLT50ZF9wcm9jLT5wX2ZsYWcgJiBQX0hBRFRIUkVBRFMpICYmCisJ
CQkgICAgKG5ld3RkID09IE5VTEwgfHwKKwkJCSAgICAgbmV3dGQtPnRkX2tzZWdycCAhPSB0ZC0+
dGRfa3NlZ3JwKSkgeworCQkJCS8qCisJCQkJICogV2Ugd2lsbCBub3QgYmUgb24gdGhlIHJ1biBx
dWV1ZS4KKwkJCQkgKiBTbyB3ZSBtdXN0IGJlIHNsZWVwaW5nIG9yIHNpbWlsYXIuCisJCQkJICog
RG9uJ3QgdXNlIHRoZSBzbG90IGlmIHdlIHdpbGwgbmVlZCBpdCAKKwkJCQkgKiBmb3IgbmV3dGQu
CisJCQkJICovCisJCQkJc2xvdF9maWxsKHRkLT50ZF9rc2VncnApOworCQkJfQorCQkJa2UtPmtl
X2ZsYWdzICY9IH5LRUZfTkVYVFJROworCQl9CisJfQorCisJaWYgKG5ld3RkICE9IE5VTEwpIHsK
KwkJLyoKKwkJICogSWYgd2UgYnJpbmcgaW4gYSB0aHJlYWQgYWNjb3VudCBmb3IgaXQgYXMgaWYg
aXQgaGFkIGJlZW4KKwkJICogYWRkZWQgdG8gdGhlIHJ1biBxdWV1ZSBhbmQgdGhlbiBjaG9zZW4u
CisJCSAqLworCQlTTE9UX1VTRShuZXd0ZC0+dGRfa3NlZ3JwKTsKKwkJbmV3dGQtPnRkX2tzZS0+
a2VfZmxhZ3MgfD0gS0VGX0RJRFJVTjsKKwkJbmV3dGQtPnRkX2tzZS0+a2VfdGltZXN0YW1wID0g
bm93OworCQlURF9TRVRfUlVOTklORyhuZXd0ZCk7CisJCWtzZXFfbG9hZF9hZGQoa3NxLCBuZXd0
ZC0+dGRfa3NlKTsKKwl9IGVsc2UgeworCQluZXd0ZCA9IGNob29zZXRocmVhZCgpOworCQkvKiBz
Y2hlZF9jaG9vc2Ugc2V0cyBrZV90aW1lc3RhbXAsIGp1c3QgcmV1c2UgaXQgKi8KKwl9CisJaWYg
KHRkICE9IG5ld3RkKSB7CisJCWtlLT5rZV9sYXN0cmFuID0gdGljazsKKworI2lmZGVmCUhXUE1D
X0hPT0tTCisJCWlmIChQTUNfUFJPQ19JU19VU0lOR19QTUNTKHRkLT50ZF9wcm9jKSkKKwkJCVBN
Q19TV0lUQ0hfQ09OVEVYVCh0ZCwgUE1DX0ZOX0NTV19PVVQpOworI2VuZGlmCisJCWNwdV9zd2l0
Y2godGQsIG5ld3RkKTsKKyNpZmRlZglIV1BNQ19IT09LUworCQlpZiAoUE1DX1BST0NfSVNfVVNJ
TkdfUE1DUyh0ZC0+dGRfcHJvYykpCisJCQlQTUNfU1dJVENIX0NPTlRFWFQodGQsIFBNQ19GTl9D
U1dfSU4pOworI2VuZGlmCisJfQorCisJc2NoZWRfbG9jay5tdHhfbG9jayA9ICh1aW50cHRyX3Qp
dGQ7CisKKwl0ZC0+dGRfb25jcHUgPSBQQ1BVX0dFVChjcHVpZCk7Cit9CisKK3ZvaWQKK3NjaGVk
X25pY2Uoc3RydWN0IHByb2MgKnAsIGludCBuaWNlKQoreworCXN0cnVjdCBrc2VncnAgKmtnOwor
CXN0cnVjdCB0aHJlYWQgKnRkOworCisJUFJPQ19MT0NLX0FTU0VSVChwLCBNQV9PV05FRCk7CisJ
bXR4X2Fzc2VydCgmc2NoZWRfbG9jaywgTUFfT1dORUQpOworCXAtPnBfbmljZSA9IG5pY2U7CisJ
Rk9SRUFDSF9LU0VHUlBfSU5fUFJPQyhwLCBrZykgeworCQlpZiAoa2ctPmtnX3ByaV9jbGFzcyA9
PSBQUklfVElNRVNIQVJFKSB7CisJCQlrZy0+a2dfdXNlcl9wcmkgPSBzY2hlZF9jYWxjX3ByaShr
Zyk7CisJCQlGT1JFQUNIX1RIUkVBRF9JTl9HUk9VUChrZywgdGQpCisJCQkJdGQtPnRkX2ZsYWdz
IHw9IFRERl9ORUVEUkVTQ0hFRDsKKwkJfQorCX0KK30KKwordm9pZAorc2NoZWRfc2xlZXAoc3Ry
dWN0IHRocmVhZCAqdGQpCit7CisJc3RydWN0IGtzZSAqa2U7CisKKwltdHhfYXNzZXJ0KCZzY2hl
ZF9sb2NrLCBNQV9PV05FRCk7CisJa2UgPSB0ZC0+dGRfa3NlOworCWlmICh0ZC0+dGRfZmxhZ3Mg
JiBUREZfU0lOVFIpCisJCWtlLT5rZV9hY3RpdmF0ZWQgPSAwOworCWVsc2UKKwkJa2UtPmtlX2Fj
dGl2YXRlZCA9IC0xOworCWtlLT5rZV9mbGFncyB8PSBLRUZfU0xFRVA7Cit9CisKK3ZvaWQKK3Nj
aGVkX3dha2V1cChzdHJ1Y3QgdGhyZWFkICp0ZCkKK3sKKwlzdHJ1Y3Qga3NlICprZTsKKwlzdHJ1
Y3Qga3NlZ3JwICprZzsKKwlzdHJ1Y3Qga3NlcSAqa3NlcSwgKm15a3NlcTsKKwl1aW50NjRfdCBu
b3c7CisKKwltdHhfYXNzZXJ0KCZzY2hlZF9sb2NrLCBNQV9PV05FRCk7CisJa2UgPSB0ZC0+dGRf
a3NlOworCWtnID0gdGQtPnRkX2tzZWdycDsKKwlteWtzZXEgPSBLU0VRX1NFTEYoKTsKKwlpZiAo
a2UtPmtlX2ZsYWdzICYgS0VGX1NMRUVQKSB7CisJCWtlLT5rZV9mbGFncyAmPSB+S0VGX1NMRUVQ
OworCQlpZiAoc2NoZWRfaXNfdGltZXNoYXJlKGtnKSkgeworCQkJc2NoZWRfY29tbWl0X3J1bnRp
bWUoa2UpOworCQkJbm93ID0gc2NoZWRfdGltZXN0YW1wKCk7CisJCQlrc2VxID0gS1NFUV9DUFUo
dGQtPnRkX2xhc3RjcHUpOworI2lmZGVmIFNNUAorCQkJaWYgKGtzZXEgIT0gbXlrc2VxKQorCQkJ
CW5vdyA9IG5vdyAtIG15a3NlcS0+a3NxX2xhc3RfdGltZXN0YW1wICsKKwkJCQkgICAga3NlcS0+
a3NxX2xhc3RfdGltZXN0YW1wOworI2VuZGlmCisJCQlrZy0+a2dfdXNlcl9wcmkgPSBzY2hlZF9y
ZWNhbGNfcHJpKGtlLCBub3cpOworCQl9CisJfQorCXNldHJ1bnF1ZXVlKHRkLCBTUlFfQk9SSU5H
KTsKK30KKworLyoKKyAqIFBlbmFsaXplIHRoZSBwYXJlbnQgZm9yIGNyZWF0aW5nIGEgbmV3IGNo
aWxkIGFuZCBpbml0aWFsaXplIHRoZSBjaGlsZCdzCisgKiBwcmlvcml0eS4KKyAqLwordm9pZAor
c2NoZWRfZm9yayhzdHJ1Y3QgdGhyZWFkICp0ZCwgc3RydWN0IHRocmVhZCAqY2hpbGR0ZCkKK3sK
KworCW10eF9hc3NlcnQoJnNjaGVkX2xvY2ssIE1BX09XTkVEKTsKKwlzY2hlZF9mb3JrX2tzZWdy
cCh0ZCwgY2hpbGR0ZC0+dGRfa3NlZ3JwKTsKKwlzY2hlZF9mb3JrX3RocmVhZCh0ZCwgY2hpbGR0
ZCk7Cit9CisKK3ZvaWQKK3NjaGVkX2Zvcmtfa3NlZ3JwKHN0cnVjdCB0aHJlYWQgKnRkLCBzdHJ1
Y3Qga3NlZ3JwICpjaGlsZCkKK3sKKwlzdHJ1Y3Qga3NlZ3JwICprZyA9IHRkLT50ZF9rc2VncnA7
CisKKwltdHhfYXNzZXJ0KCZzY2hlZF9sb2NrLCBNQV9PV05FRCk7CisJY2hpbGQtPmtnX3NscHRp
bWUgPSBrZy0+a2dfc2xwdGltZSAqIENISUxEX1dFSUdIVCAvIDEwMDsKKwlpZiAoY2hpbGQtPmtn
X3ByaV9jbGFzcyA9PSBQUklfVElNRVNIQVJFKQorCQljaGlsZC0+a2dfdXNlcl9wcmkgPSBzY2hl
ZF9jYWxjX3ByaShjaGlsZCk7CisJa2ctPmtnX3NscHRpbWUgPSBrZy0+a2dfc2xwdGltZSAqIFBB
UkVOVF9XRUlHSFQgLyAxMDA7Cit9CisKK3ZvaWQKK3NjaGVkX2ZvcmtfdGhyZWFkKHN0cnVjdCB0
aHJlYWQgKnRkLCBzdHJ1Y3QgdGhyZWFkICpjaGlsZCkKK3sKKwlzdHJ1Y3Qga3NlICprZTsKKwlz
dHJ1Y3Qga3NlICprZTI7CisKKwlzY2hlZF9uZXd0aHJlYWQoY2hpbGQpOworCisJa2UgPSB0ZC0+
dGRfa3NlOworCWtlMiA9IGNoaWxkLT50ZF9rc2U7CisJa2UyLT5rZV9zbGljZSA9IChrZS0+a2Vf
c2xpY2UgKyAxKSA+PiAxOworCWtlMi0+a2VfZmxhZ3MgfD0gS0VGX0ZJUlNUX1NMSUNFIHwgKGtl
LT5rZV9mbGFncyAmIEtFRl9ORVhUUlEpOworCWtlMi0+a2VfYWN0aXZhdGVkID0gMDsKKwlrZS0+
a2Vfc2xpY2UgPj49IDE7CisgICAgICAgIGlmIChrZS0+a2Vfc2xpY2UgPT0gMCkgeworCQlrZS0+
a2Vfc2xpY2UgPSAxOworCQlzY2hlZF90aWNrKCk7CisJfQorCisJLyogR3JhYiBvdXIgcGFyZW50
cyBjcHUgZXN0aW1hdGlvbiBpbmZvcm1hdGlvbi4gKi8KKwlrZTItPmtlX3RpY2tzID0ga2UtPmtl
X3RpY2tzOworCWtlMi0+a2VfbHRpY2sgPSBrZS0+a2VfbHRpY2s7CisJa2UyLT5rZV9mdGljayA9
IGtlLT5rZV9mdGljazsKK30KKwordm9pZAorc2NoZWRfY2xhc3Moc3RydWN0IGtzZWdycCAqa2cs
IGludCBjbGFzcykKK3sKKwltdHhfYXNzZXJ0KCZzY2hlZF9sb2NrLCBNQV9PV05FRCk7CisJa2ct
PmtnX3ByaV9jbGFzcyA9IGNsYXNzOworfQorCisvKgorICogUmV0dXJuIHNvbWUgb2YgdGhlIGNo
aWxkJ3MgcHJpb3JpdHkgYW5kIGludGVyYWN0aXZpdHkgdG8gdGhlIHBhcmVudC4KKyAqLwordm9p
ZAorc2NoZWRfZXhpdChzdHJ1Y3QgcHJvYyAqcCwgc3RydWN0IHRocmVhZCAqY2hpbGR0ZCkKK3sK
KwltdHhfYXNzZXJ0KCZzY2hlZF9sb2NrLCBNQV9PV05FRCk7CisJc2NoZWRfZXhpdF90aHJlYWQo
RklSU1RfVEhSRUFEX0lOX1BST0MocCksIGNoaWxkdGQpOworCXNjaGVkX2V4aXRfa3NlZ3JwKEZJ
UlNUX0tTRUdSUF9JTl9QUk9DKHApLCBjaGlsZHRkKTsKK30KKwordm9pZAorc2NoZWRfZXhpdF9r
c2VncnAoc3RydWN0IGtzZWdycCAqcGFyZW50a2csIHN0cnVjdCB0aHJlYWQgKnRkKQoreworCWlm
ICh0ZC0+dGRfa3NlZ3JwLT5rZ19zbHB0aW1lIDwgcGFyZW50a2ctPmtnX3NscHRpbWUpIHsKKwkJ
cGFyZW50a2ctPmtnX3NscHRpbWUgPSBwYXJlbnRrZy0+a2dfc2xwdGltZSAvCisJCQkoRVhJVF9X
RUlHSFQpICogKEVYSVRfV0VJR0hUIC0gMSkgKworCQkJdGQtPnRkX2tzZWdycC0+a2dfc2xwdGlt
ZSAvIEVYSVRfV0VJR0hUOworCX0KK30KKwordm9pZAorc2NoZWRfZXhpdF90aHJlYWQoc3RydWN0
IHRocmVhZCAqdGQsIHN0cnVjdCB0aHJlYWQgKmNoaWxkdGQpCit7CisJc3RydWN0IGtzZSAqY2hp
bGRrZSAgPSBjaGlsZHRkLT50ZF9rc2U7CisJc3RydWN0IGtzZSAqcGFyZW50a2UgPSB0ZC0+dGRf
a3NlOworCisJa3NlcV9sb2FkX3JlbShLU0VRX1NFTEYoKSwgY2hpbGRrZSk7CisJc2NoZWRfdXBk
YXRlX3J1bnRpbWUoY2hpbGRrZSwgc2NoZWRfdGltZXN0YW1wKCkpOworCXNjaGVkX2NvbW1pdF9y
dW50aW1lKGNoaWxka2UpOworCWlmICgoY2hpbGRrZS0+a2VfZmxhZ3MgJiBLRUZfRklSU1RfU0xJ
Q0UpICYmCisJICAgIHRkLT50ZF9wcm9jID09IGNoaWxkdGQtPnRkX3Byb2MtPnBfcHB0cikgewor
CQlwYXJlbnRrZS0+a2Vfc2xpY2UgKz0gY2hpbGRrZS0+a2Vfc2xpY2U7CisJCWlmIChwYXJlbnRr
ZS0+a2Vfc2xpY2UgPiBzY2hlZF90aW1lc2xpY2UocGFyZW50a2UpKQorCQkJcGFyZW50a2UtPmtl
X3NsaWNlID0gc2NoZWRfdGltZXNsaWNlKHBhcmVudGtlKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQK
K3NjaGVkX3N0YXJ2aW5nKHN0cnVjdCBrc2VxICprc3EsIHVuc2lnbmVkIG5vdywgc3RydWN0IGtz
ZSAqa2UpCit7CisJdWludDY0X3QgZGVsdGE7CisKKwlpZiAoa2UtPmtlX3Byb2MtPnBfbmljZSA+
IGtzcS0+a3NxX2V4cGlyZWRfbmljZSkKKwkJcmV0dXJuICgxKTsKKwlpZiAoa3NxLT5rc3FfZXhw
aXJlZF90aWNrID09IDApCisJCXJldHVybiAoMCk7CisJZGVsdGEgPSBIWl9UT19OUygodWludDY0
X3Qpbm93IC0ga3NxLT5rc3FfZXhwaXJlZF90aWNrKTsKKwlpZiAoZGVsdGEgPiBTVEFSVkFUSU9O
X1RJTUUgKiBrc3EtPmtzcV9sb2FkKQorCQlyZXR1cm4gKDEpOworCXJldHVybiAoMCk7Cit9CisK
Ky8qCisgKiBBbiBpbnRlcmFjdGl2ZSB0aHJlYWQgaGFzIHNtYWxsZXIgdGltZSBzbGljZSBncmFu
dWxhcml0eSwKKyAqIGEgY3B1IGhvZyBjYW4gaGF2ZSBsYXJnZXIgZ3JhbnVsYXJpdHkuCisgKi8K
K3N0YXRpYyBpbmxpbmUgaW50CitzY2hlZF90aW1lc2xpY2Vfc3BsaXQoc3RydWN0IGtzZSAqa2Up
Cit7CisJaW50IHNjb3JlLCBnOworCisJc2NvcmUgPSAoaW50KShNQVhfU0NPUkUgLSBDVVJSRU5U
X1NDT1JFKGtlLT5rZV9rc2VncnApKTsKKwlpZiAoc2NvcmUgPT0gMCkKKwkJc2NvcmUgPSAxOwor
I2lmZGVmIFNNUAorCWcgPSBncmFudWxhcml0eSAqICgoMSA8PCBzY29yZSkgLSAxKSAqIHNtcF9j
cHVzOworI2Vsc2UKKwlnID0gZ3JhbnVsYXJpdHkgKiAoKDEgPDwgc2NvcmUpIC0gMSk7CisjZW5k
aWYKKwlyZXR1cm4gKGtlLT5rZV9zbGljZSA+PSBnICYmIGtlLT5rZV9zbGljZSAlIGcgPT0gMCk7
Cit9CisKK3ZvaWQKK3NjaGVkX3RpY2sodm9pZCkKK3sKKwlzdHJ1Y3QgdGhyZWFkCSp0ZDsKKwlz
dHJ1Y3QgcHJvYwkqcDsKKwlzdHJ1Y3Qga3NlCSprZTsKKwlzdHJ1Y3Qga3NlZ3JwCSprZzsKKwlz
dHJ1Y3Qga3NlcQkqa3NlcTsKKwl1aW50NjRfdAlub3c7CisJaW50CQljcHVpZDsKKwlpbnQJCWNs
YXNzOworCQorCW10eF9hc3NlcnQoJnNjaGVkX2xvY2ssIE1BX09XTkVEKTsKKworCXRkID0gY3Vy
dGhyZWFkOworCWtlID0gdGQtPnRkX2tzZTsKKwlrZyA9IHRkLT50ZF9rc2VncnA7CisJcCA9IHRk
LT50ZF9wcm9jOworCWNsYXNzID0gUFJJX0JBU0Uoa2ctPmtnX3ByaV9jbGFzcyk7CisJbm93ID0g
c2NoZWRfdGltZXN0YW1wKCk7CisJY3B1aWQgPSBQQ1BVX0dFVChjcHVpZCk7CisJa3NlcSA9IEtT
RVFfQ1BVKGNwdWlkKTsKKwlrc2VxLT5rc3FfbGFzdF90aW1lc3RhbXAgPSBub3c7CisKKwlpZiAo
Y2xhc3MgPT0gUFJJX0lETEUpIHsKKwkJLyoKKwkJICogUHJvY2Vzc2VzIG9mIGVxdWFsIGlkbGUg
cHJpb3JpdHkgYXJlIHJ1biByb3VuZC1yb2Jpbi4KKwkJICovCisJCWlmICh0ZCAhPSBQQ1BVX0dF
VChpZGxldGhyZWFkKSAmJiAtLWtlLT5rZV9zbGljZSA8PSAwKSB7CisJCQlrZS0+a2Vfc2xpY2Ug
PSBkZWZfdGltZXNsaWNlOworCQkJdGQtPnRkX2ZsYWdzIHw9IFRERl9ORUVEUkVTQ0hFRDsKKwkJ
fQorCQlyZXR1cm47CisJfQorCisJaWYgKGNsYXNzID09IFBSSV9SRUFMVElNRSkgeworCQkvKgor
CQkgKiBSZWFsdGltZSBzY2hlZHVsaW5nLCBkbyByb3VuZCByb2JpbiBmb3IgUlIgY2xhc3MsIEZJ
Rk8KKwkJICogaXMgbm90IGFmZmVjdGVkLgorCQkgKi8KKwkJaWYgKFBSSV9ORUVEX1JSKGtnLT5r
Z19wcmlfY2xhc3MpICYmIC0ta2UtPmtlX3NsaWNlIDw9IDApIHsKKwkJCWtlLT5rZV9zbGljZSA9
IGRlZl90aW1lc2xpY2U7CisJCQl0ZC0+dGRfZmxhZ3MgfD0gVERGX05FRURSRVNDSEVEOworCQl9
CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIFdlIHNraXAga2VybmVsIHRocmVhZCwgdGhvdWdo
IGl0IG1heSBiZSBjbGFzc2lmaWVkIGFzIFRJTUVTSEFSRS4KKwkgKi8KKwlpZiAoY2xhc3MgIT0g
UFJJX1RJTUVTSEFSRSB8fCAocC0+cF9mbGFnICYgUF9LVEhSRUFEKSAhPSAwKQorCQlyZXR1cm47
CisKKwlpZiAoLS1rZS0+a2Vfc2xpY2UgPD0gMCkgeworCQl0ZC0+dGRfZmxhZ3MgfD0gVERGX05F
RURSRVNDSEVEOworCQlzY2hlZF91cGRhdGVfcnVudGltZShrZSwgbm93KTsKKwkJc2NoZWRfY29t
bWl0X3J1bnRpbWUoa2UpOworCQlrZy0+a2dfdXNlcl9wcmkgPSBzY2hlZF9jYWxjX3ByaShrZyk7
CisJCWtlLT5rZV9zbGljZSA9IHNjaGVkX3RpbWVzbGljZShrZSk7CisJCWtlLT5rZV9mbGFncyAm
PSB+S0VGX0ZJUlNUX1NMSUNFOworCQlpZiAoa2UtPmtlX2ZsYWdzICYgS0VGX0JPVU5EIHx8IHRk
LT50ZF9waW5uZWQpIHsKKwkJCWlmIChrc2VxLT5rc3FfZXhwaXJlZF90aWNrID09IDApCisJCQkJ
a3NlcS0+a3NxX2V4cGlyZWRfdGljayA9IHRpY2s7CisJCX0gZWxzZSB7CisJCQlpZiAoa3NlcV9n
bG9iYWwua3NxX2V4cGlyZWRfdGljayA9PSAwKQorCQkJCWtzZXFfZ2xvYmFsLmtzcV9leHBpcmVk
X3RpY2sgPSB0aWNrOworCQl9CisJCWlmICghVEhSRUFEX0lTX0lOVEVSQUNUSVZFKGtlKSB8fAor
CQkgICAgc2NoZWRfc3RhcnZpbmcoa3NlcSwgdGljaywga2UpIHx8CisJCSAgICBzY2hlZF9zdGFy
dmluZygma3NlcV9nbG9iYWwsIHRpY2ssIGtlKSkgeworCQkJLyogVGhlIHRoZWFkIGJlY29tZXMg
Y3B1IGhvZywgc2NoZWR1bGUgaXQgb2ZmLiAqLworCQkJa2UtPmtlX2ZsYWdzIHw9IEtFRl9ORVhU
UlE7CisJCQlpZiAoa2UtPmtlX2ZsYWdzICYgS0VGX0JPVU5EIHx8IHRkLT50ZF9waW5uZWQpIHsK
KwkJCQlpZiAocC0+cF9uaWNlIDwga3NlcS0+a3NxX2V4cGlyZWRfbmljZSkKKwkJCQkJa3NlcS0+
a3NxX2V4cGlyZWRfbmljZSA9IHAtPnBfbmljZTsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKHAtPnBf
bmljZSA8IGtzZXFfZ2xvYmFsLmtzcV9leHBpcmVkX25pY2UpCisJCQkJCWtzZXFfZ2xvYmFsLmtz
cV9leHBpcmVkX25pY2UgPQorCQkJCQkJcC0+cF9uaWNlOworCQkJfQorCQl9CisJfSBlbHNlIHsK
KwkJLyoKKwkJICogRG9uJ3QgYWxsb3cgYW4gaW50ZXJhY3RpdmUgdGhyZWFkIHdoaWNoIGhhcyBs
b25nIHRpbWVzbGljZQorCQkgKiB0byBtb25vcG9saXplIENQVSwgc3BsaXQgdGhlIGxvbmcgdGlt
ZXNsaWNlIGludG8gc21hbGwKKwkJICogY2h1bmtzLiBUaGlzIGVzc2VudGlhbGx5IGRvZXMgcm91
bmQtcm9iaW4gYmV0d2VlbgorCQkgKiBpbnRlcmFjdGl2ZSB0aHJlYWRzLgorCQkgKi8KKwkJaWYg
KFRIUkVBRF9JU19JTlRFUkFDVElWRShrZSkgJiYgc2NoZWRfdGltZXNsaWNlX3NwbGl0KGtlKSkK
KwkJCXRkLT50ZF9mbGFncyB8PSBUREZfTkVFRFJFU0NIRUQ7CisJfQorfQorCit2b2lkCitzY2hl
ZF9jbG9jayhzdHJ1Y3QgdGhyZWFkICp0ZCkKK3sKKwlzdHJ1Y3Qga3NlZ3JwICprZzsKKwlzdHJ1
Y3Qga3NlICprZTsKKworCW10eF9hc3NlcnQoJnNjaGVkX2xvY2ssIE1BX09XTkVEKTsKKwlrZSA9
IHRkLT50ZF9rc2U7CisJa2cgPSBrZS0+a2Vfa3NlZ3JwOworCisJLyogQWRqdXN0IHRpY2tzIGZv
ciBwY3RjcHUgKi8KKwlrZS0+a2VfdGlja3MrKzsKKwlrZS0+a2VfbHRpY2sgPSB0aWNrczsKKwor
CS8qIEdvIHVwIHRvIG9uZSBzZWNvbmQgYmV5b25kIG91ciBtYXggYW5kIHRoZW4gdHJpbSBiYWNr
IGRvd24gKi8KKwlpZiAoa2UtPmtlX2Z0aWNrICsgU0NIRURfQ1BVX1RJQ0tTICsgaHogPCBrZS0+
a2VfbHRpY2spCisJCXNjaGVkX3BjdGNwdV91cGRhdGUoa2UpOworfQorCitzdGF0aWMgaW50Citr
c2VxX3J1bm5hYmxlKHN0cnVjdCBrc2VxICprc2VxKQoreworCXJldHVybiAoa3J1bnFfY2hlY2so
a3NlcS0+a3NxX2N1cnIpIHx8CisJICAgICAgICBrcnVucV9jaGVjayhrc2VxLT5rc3FfbmV4dCkg
fHwKKwkJa3J1bnFfY2hlY2soJmtzZXEtPmtzcV9pZGxlKSk7Cit9CisKK2ludAorc2NoZWRfcnVu
bmFibGUodm9pZCkKK3sKKyNpZmRlZiBTTVAKKwlyZXR1cm4gKGtzZXFfcnVubmFibGUoJmtzZXFf
Z2xvYmFsKSB8fCBrc2VxX3J1bm5hYmxlKEtTRVFfU0VMRigpKSk7CisjZWxzZQorCXJldHVybiAo
a3NlcV9ydW5uYWJsZSgma3NlcV9nbG9iYWwpKTsKKyNlbmRpZgorfQorCit2b2lkCitzY2hlZF91
c2VycmV0KHN0cnVjdCB0aHJlYWQgKnRkKQoreworCXN0cnVjdCBrc2VncnAgKmtnOworCisJS0FT
U0VSVCgodGQtPnRkX2ZsYWdzICYgVERGX0JPUlJPV0lORykgPT0gMCwKKwkgICAgKCJ0aHJlYWQg
d2l0aCBib3Jyb3dlZCBwcmlvcml0eSByZXR1cm5pbmcgdG8gdXNlcmxhbmQiKSk7CisJa2cgPSB0
ZC0+dGRfa3NlZ3JwOworCWlmICh0ZC0+dGRfcHJpb3JpdHkgIT0ga2ctPmtnX3VzZXJfcHJpKSB7
CisJCW10eF9sb2NrX3NwaW4oJnNjaGVkX2xvY2spOworCQl0ZC0+dGRfcHJpb3JpdHkgPSBrZy0+
a2dfdXNlcl9wcmk7CisJCXRkLT50ZF9iYXNlX3ByaSA9IGtnLT5rZ191c2VyX3ByaTsKKwkJbXR4
X3VubG9ja19zcGluKCZzY2hlZF9sb2NrKTsKKwl9Cit9CisKK3N0cnVjdCBrc2UgKgorc2NoZWRf
Y2hvb3NlKHZvaWQpCit7CisJc3RydWN0IGtzZSAgKmtlOworCXN0cnVjdCBrc2VxICprc2VxOwor
CisjaWZkZWYgU01QCisJc3RydWN0IGtzZSAqa2VjcHU7CisKKwltdHhfYXNzZXJ0KCZzY2hlZF9s
b2NrLCBNQV9PV05FRCk7CisJa3NlcSA9ICZrc2VxX2dsb2JhbDsKKwlrZSA9IGtzZXFfY2hvb3Nl
KCZrc2VxX2dsb2JhbCk7CisJa2VjcHUgPSBrc2VxX2Nob29zZShLU0VRX1NFTEYoKSk7CisKKwlp
ZiAoa2UgPT0gTlVMTCB8fCAKKwkgICAgKGtlY3B1ICE9IE5VTEwgJiYgCisJICAgICBrZWNwdS0+
a2VfdGhyZWFkLT50ZF9wcmlvcml0eSA8IGtlLT5rZV90aHJlYWQtPnRkX3ByaW9yaXR5KSkgewor
CQlrZSA9IGtlY3B1OworCQlrc2VxID0gS1NFUV9TRUxGKCk7CisJfQorI2Vsc2UKKwlrc2VxID0g
JmtzZXFfZ2xvYmFsOworCWtlID0ga3NlcV9jaG9vc2Uoa3NlcSk7CisjZW5kaWYKKworCWlmIChr
ZSAhPSBOVUxMKSB7CisJCWtzZXFfcnVucV9yZW0oa3NlcSwga2UpOworCQlrZS0+a2Vfc3RhdGUg
PSBLRVNfVEhSRUFEOworCQlrZS0+a2VfZmxhZ3MgJj0gfktFRl9QUkVFTVBURUQ7CisJCWtlLT5r
ZV90aW1lc3RhbXAgPSBzY2hlZF90aW1lc3RhbXAoKTsKKwl9CisKKwlyZXR1cm4gKGtlKTsKK30K
KworI2lmZGVmIFNNUAorc3RhdGljIGludAorZm9yd2FyZF93YWtldXAoaW50IGNwdW51bSwgY3B1
bWFza190IG1lKQoreworCWNwdW1hc2tfdCBtYXAsIGRvbnR1c2U7CisJY3B1bWFza190IG1hcDI7
CisJc3RydWN0IHBjcHUgKnBjOworCWNwdW1hc2tfdCBpZCwgbWFwMzsKKworCW10eF9hc3NlcnQo
JnNjaGVkX2xvY2ssIE1BX09XTkVEKTsKKworCUNUUjAoS1RSX1JVTlEsICJmb3J3YXJkX3dha2V1
cCgpIik7CisKKwlpZiAoKCFmb3J3YXJkX3dha2V1cF9lbmFibGVkKSB8fAorCSAgICAgKGZvcndh
cmRfd2FrZXVwX3VzZV9tYXNrID09IDAgJiYgZm9yd2FyZF93YWtldXBfdXNlX2xvb3AgPT0gMCkp
CisJCXJldHVybiAoMCk7CisJaWYgKCFzbXBfc3RhcnRlZCB8fCBjb2xkIHx8IHBhbmljc3RyKQor
CQlyZXR1cm4gKDApOworCisJZm9yd2FyZF93YWtldXBzX3JlcXVlc3RlZCsrOworCisJLyoKKwkg
KiBjaGVjayB0aGUgaWRsZSBtYXNrIHdlIHJlY2VpdmVkIGFnYWluc3Qgd2hhdCB3ZSBjYWxjdWxh
dGVkIGJlZm9yZQorCSAqIGluIHRoZSBvbGQgdmVyc2lvbi4KKwkgKi8KKwkvKiAKKwkgKiBkb24n
dCBib3RoZXIgaWYgd2Ugc2hvdWxkIGJlIGRvaW5nIGl0IG91cnNlbGYuLgorCSAqLworCWlmICgo
bWUgJiBpZGxlX2NwdXNfbWFzaykgJiYgKGNwdW51bSA9PSBOT0NQVSB8fCBtZSA9PSAoMSA8PCBj
cHVudW0pKSkKKwkJcmV0dXJuICgwKTsKKworCWRvbnR1c2UgPSBtZSB8IHN0b3BwZWRfY3B1cyB8
IGhsdF9jcHVzX21hc2s7CisJbWFwMyA9IDA7CisJaWYgKGZvcndhcmRfd2FrZXVwX3VzZV9sb29w
KSB7CisJCVNMSVNUX0ZPUkVBQ0gocGMsICZjcHVoZWFkLCBwY19hbGxjcHUpIHsKKwkJCWlkID0g
cGMtPnBjX2NwdW1hc2s7CisJCQlpZiAoIChpZCAmIGRvbnR1c2UpID09IDAgJiYKKwkJCSAgICBw
Yy0+cGNfY3VydGhyZWFkID09IHBjLT5wY19pZGxldGhyZWFkKSB7CisJCQkJbWFwMyB8PSBpZDsK
KwkJCX0KKwkJfQorCX0KKworCWlmIChmb3J3YXJkX3dha2V1cF91c2VfbWFzaykgeworCQltYXAg
PSAwOworCQltYXAgPSBpZGxlX2NwdXNfbWFzayAmIH5kb250dXNlOworCisJCS8qIElmIHRoZXkg
YXJlIGJvdGggb24sIGNvbXBhcmUgYW5kIHVzZSBsb29wIGlmIGRpZmZlcmVudCAqLworCQlpZiAo
Zm9yd2FyZF93YWtldXBfdXNlX2xvb3ApIHsKKwkJCWlmIChtYXAgIT0gbWFwMykgeworCQkJCXBy
aW50ZigibWFwICglMDJYKSAhPSBtYXAzICglMDJYKVxuIiwKKwkJCQkJCW1hcCwgbWFwMyk7CisJ
CQkJbWFwID0gbWFwMzsKKwkJCX0KKwkJfQorCX0gZWxzZSB7CisJCW1hcCA9IG1hcDM7CisJfQor
CS8qIElmIHdlIG9ubHkgYWxsb3cgYSBzcGVjaWZpYyBDUFUsIHRoZW4gbWFzayBvZmYgYWxsIHRo
ZSBvdGhlcnMgKi8KKwlpZiAoY3B1bnVtICE9IE5PQ1BVKSB7CisJCUtBU1NFUlQoKGNwdW51bSA8
PSBtcF9tYXhjcHVzKSwoImZvcndhcmRfd2FrZXVwOiBiYWQgY3B1bnVtLiIpKTsKKwkJbWFwICY9
ICgxIDw8IGNwdW51bSk7CisJfSBlbHNlIHsKKwkJLyogVHJ5IGNob29zZSBhbiBpZGxlIGRpZS4g
Ki8KKwkJaWYgKGZvcndhcmRfd2FrZXVwX3VzZV9odHQpIHsKKwkJCW1hcDIgPSAgKG1hcCAmICht
YXAgPj4gMSkpICYgMHg1NTU1OworCQkJaWYgKG1hcDIpIHsKKwkJCQltYXAgPSBtYXAyOworCQkJ
fQorCQl9CisKKwkJLyogc2V0IG9ubHkgb25lIGJpdCAqLyAKKwkJaWYgKGZvcndhcmRfd2FrZXVw
X3VzZV9zaW5nbGUpIHsKKwkJCW1hcCA9IG1hcCAmICgofm1hcCkgKyAxKTsKKwkJfQorCX0KKwlp
ZiAobWFwKSB7CisJCWZvcndhcmRfd2FrZXVwc19kZWxpdmVyZWQrKzsKKwkJaXBpX3NlbGVjdGVk
KG1hcCwgSVBJX0FTVCk7CisJCXJldHVybiAoMSk7CisJfQorCXJldHVybiAoMCk7Cit9CisjZW5k
aWYKKwordm9pZAorc2NoZWRfYWRkKHN0cnVjdCB0aHJlYWQgKnRkLCBpbnQgZmxhZ3MpCit7CisJ
c3RydWN0IGtzZXEgKmtzcTsKKwlzdHJ1Y3Qga3NlZ3JwICprZzsKKwlzdHJ1Y3Qga3NlICprZTsK
KwlzdHJ1Y3QgdGhyZWFkICpteXRkOworCWludCBjbGFzczsKKwlpbnQgbmV4dHJxOworCWludCBu
ZWVkX3Jlc2NoZWQgPSAwOworI2lmZGVmIFNNUAorCWludCBjcHU7CisJaW50IG15Y3B1OworCWlu
dCBwaW5uZWQ7CisJc3RydWN0IGtzZXEgKm15a3NxOworI2VuZGlmCisKKwltdHhfYXNzZXJ0KCZz
Y2hlZF9sb2NrLCBNQV9PV05FRCk7CisJbXl0ZCA9IGN1cnRocmVhZDsKKwlrZSA9IHRkLT50ZF9r
c2U7CisJa2cgPSB0ZC0+dGRfa3NlZ3JwOworCUtBU1NFUlQoa2UtPmtlX3N0YXRlICE9IEtFU19P
TlJVTlEsCisJICAgICgic2NoZWRfYWRkOiBrc2UgJXAgKCVzKSBhbHJlYWR5IGluIHJ1biBxdWV1
ZSIsIGtlLAorCSAgICBrZS0+a2VfcHJvYy0+cF9jb21tKSk7CisJS0FTU0VSVChrZS0+a2VfcHJv
Yy0+cF9zZmxhZyAmIFBTX0lOTUVNLAorCSAgICAoInNjaGVkX2FkZDogcHJvY2VzcyBzd2FwcGVk
IG91dCIpKTsKKwlLQVNTRVJUKGtlLT5rZV9ydW5xID09IE5VTEwsCisJICAgICgic2NoZWRfYWRk
OiBLU0UgJXAgaXMgc3RpbGwgYXNzaWduZWQgdG8gYSBydW4gcXVldWUiLCBrZSkpOworCisJY2xh
c3MgPSBQUklfQkFTRShrZy0+a2dfcHJpX2NsYXNzKTsKKyNpZmRlZiBTTVAKKwlteWNwdSA9IFBD
UFVfR0VUKGNwdWlkKTsKKwlteWtzcSA9IEtTRVFfQ1BVKG15Y3B1KTsKKwlrZS0+a2Vfd2FrZXVw
X2NwdSA9IG15Y3B1OworI2VuZGlmCisJbmV4dHJxID0gKGtlLT5rZV9mbGFncyAmIEtFRl9ORVhU
UlEpOworCWtlLT5rZV9mbGFncyAmPSB+S0VGX05FWFRSUTsKKwlpZiAoZmxhZ3MgJiBTUlFfUFJF
RU1QVEVEKQorCQlrZS0+a2VfZmxhZ3MgfD0gS0VGX1BSRUVNUFRFRDsKKwlrc3EgPSAma3NlcV9n
bG9iYWw7CisjaWZkZWYgU01QCisJaWYgKHRkLT50ZF9waW5uZWQgIT0gMCkgeworCQljcHUgPSB0
ZC0+dGRfbGFzdGNwdTsKKwkJa3NxID0gS1NFUV9DUFUoY3B1KTsKKwkJcGlubmVkID0gMTsKKwl9
IGVsc2UgaWYgKChrZSktPmtlX2ZsYWdzICYgS0VGX0JPVU5EKSB7CisJCWNwdSA9IGtlLT5rZV9j
cHU7CisJCWtzcSA9IEtTRVFfQ1BVKGNwdSk7CisJCXBpbm5lZCA9IDE7CisJfSBlbHNlIHsKKwkJ
cGlubmVkID0gMDsKKwkJY3B1ID0gTk9DUFU7CisJfQorI2VuZGlmCisJc3dpdGNoIChjbGFzcykg
eworCWNhc2UgUFJJX0lUSEQ6CisJY2FzZSBQUklfUkVBTFRJTUU6CisJCWtlLT5rZV9ydW5xID0g
a3NxLT5rc3FfY3VycjsKKwkJYnJlYWs7CisJY2FzZSBQUklfVElNRVNIQVJFOgorCQlpZiAoKHRk
LT50ZF9mbGFncyAmIFRERl9CT1JST1dJTkcpID09IDAgJiYgbmV4dHJxKQorCQkJa2UtPmtlX3J1
bnEgPSBrc3EtPmtzcV9uZXh0OworCQllbHNlCisJCQlrZS0+a2VfcnVucSA9IGtzcS0+a3NxX2N1
cnI7CisJCWJyZWFrOworCWNhc2UgUFJJX0lETEU6CisJCS8qCisJCSAqIFRoaXMgaXMgZm9yIHBy
aW9yaXR5IHByb3AuCisJCSAqLworCQlpZiAodGQtPnRkX3ByaW9yaXR5IDwgUFJJX01JTl9JRExF
KQorCQkJa2UtPmtlX3J1bnEgPSBrc3EtPmtzcV9jdXJyOworCQllbHNlCisJCQlrZS0+a2VfcnVu
cSA9ICZrc3EtPmtzcV9pZGxlOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwYW5pYygiVW5rbm93
biBwcmkgY2xhc3MuIik7CisJCWJyZWFrOworCX0KKworI2lmZGVmIFNNUAorCWlmICgoa2UtPmtl
X3J1bnEgPT0ga3NlcV9nbG9iYWwua3NxX2N1cnIgfHwKKwkgICAgIGtlLT5rZV9ydW5xID09IG15
a3NxLT5rc3FfY3VycikgJiYKKwkgICAgIHRkLT50ZF9wcmlvcml0eSA8IG15dGQtPnRkX3ByaW9y
aXR5KSB7CisjZWxzZQorCWlmIChrZS0+a2VfcnVucSA9PSBrc2VxX2dsb2JhbC5rc3FfY3VyciAm
JgorCSAgICB0ZC0+dGRfcHJpb3JpdHkgPCBteXRkLT50ZF9wcmlvcml0eSkgeworI2VuZGlmCisJ
CXN0cnVjdCBrcnVucSAqcnE7CisKKwkJcnEgPSBrZS0+a2VfcnVucTsKKwkJa2UtPmtlX3J1bnEg
PSBOVUxMOworCQlpZiAoKGZsYWdzICYgU1JRX1lJRUxESU5HKSA9PSAwICYmIG1heWJlX3ByZWVt
cHQodGQpKQorCQkJcmV0dXJuOworCQlrZS0+a2VfcnVucSA9IHJxOworCQluZWVkX3Jlc2NoZWQg
PSBUREZfTkVFRFJFU0NIRUQ7CisJfQorCisJU0xPVF9VU0Uoa2cpOworCWtlLT5rZV9zdGF0ZSA9
IEtFU19PTlJVTlE7CisJa3NlcV9ydW5xX2FkZChrc3EsIGtlKTsKKwlrc2VxX2xvYWRfYWRkKGtz
cSwga2UpOworCisjaWZkZWYgU01QCisJaWYgKHBpbm5lZCkgeworCQlpZiAoY3B1ICE9IG15Y3B1
KSB7CisJCQlzdHJ1Y3QgdGhyZWFkICpydW5uaW5nID0gcGNwdV9maW5kKGNwdSktPnBjX2N1cnRo
cmVhZDsKKwkJCWlmIChrc3EtPmtzcV9jdXJyID09IGtlLT5rZV9ydW5xICYmCisJCQkgICAgcnVu
bmluZy0+dGRfcHJpb3JpdHkgPCB0ZC0+dGRfcHJpb3JpdHkpIHsKKwkJCQlpZiAodGQtPnRkX3By
aW9yaXR5IDw9IFBSSV9NQVhfSVRIRCkKKwkJCQkJaXBpX3NlbGVjdGVkKDEgPDwgY3B1LCBJUElf
UFJFRU1QVCk7CisJCQkJZWxzZSB7CisJCQkJCXJ1bm5pbmctPnRkX2ZsYWdzIHw9IFRERl9ORUVE
UkVTQ0hFRDsKKwkJCQkJaXBpX3NlbGVjdGVkKDEgPDwgY3B1LCBJUElfQVNUKTsKKwkJCQl9CisJ
CQl9CisJCX0gZWxzZQorCQkJY3VydGhyZWFkLT50ZF9mbGFncyB8PSBuZWVkX3Jlc2NoZWQ7CisJ
fSBlbHNlIHsKKwkJY3B1bWFza190IG1lID0gMSA8PCBteWNwdTsKKwkJY3B1bWFza190IGlkbGUg
PSBpZGxlX2NwdXNfbWFzayAmIG1lOworCQlpbnQgZm9yd2FyZGVkID0gMDsKKworCQlpZiAoIWlk
bGUgJiYgKChmbGFncyAmIFNSUV9JTlRSKSA9PSAwKSAmJgorCQkgICAgKGlkbGVfY3B1c19tYXNr
ICYgfihobHRfY3B1c19tYXNrIHwgbWUpKSkKKwkJCWZvcndhcmRlZCA9IGZvcndhcmRfd2FrZXVw
KGNwdSwgbWUpOworCQlpZiAoZm9yd2FyZGVkID09IDApCisJCQljdXJ0aHJlYWQtPnRkX2ZsYWdz
IHw9IG5lZWRfcmVzY2hlZDsKKwl9CisjZWxzZQorCW15dGQtPnRkX2ZsYWdzIHw9IG5lZWRfcmVz
Y2hlZDsKKyNlbmRpZgorfQorCit2b2lkCitzY2hlZF9yZW0oc3RydWN0IHRocmVhZCAqdGQpCit7
CisJc3RydWN0IGtzZXEgKmtzZXE7CisJc3RydWN0IGtzZSAqa2U7CisKKwltdHhfYXNzZXJ0KCZz
Y2hlZF9sb2NrLCBNQV9PV05FRCk7CisJa2UgPSB0ZC0+dGRfa3NlOworCUtBU1NFUlQoKGtlLT5r
ZV9zdGF0ZSA9PSBLRVNfT05SVU5RKSwKKwkgICAgKCJzY2hlZF9yZW06IEtTRSBub3Qgb24gcnVu
IHF1ZXVlIikpOworCisJa3NlcSA9IGtlLT5rZV9rc2VxOworCVNMT1RfUkVMRUFTRSh0ZC0+dGRf
a3NlZ3JwKTsKKwlrc2VxX3J1bnFfcmVtKGtzZXEsIGtlKTsKKwlrc2VxX2xvYWRfcmVtKGtzZXEs
IGtlKTsKKwlrZS0+a2Vfc3RhdGUgPSBLRVNfVEhSRUFEOworfQorCitmaXhwdF90CitzY2hlZF9w
Y3RjcHUoc3RydWN0IHRocmVhZCAqdGQpCit7CisJZml4cHRfdCBwY3RjcHU7CisJc3RydWN0IGtz
ZSAqa2U7CisKKwlwY3RjcHUgPSAwOworCWtlID0gdGQtPnRkX2tzZTsKKwlpZiAoa2UgPT0gTlVM
TCkKKwkJcmV0dXJuICgwKTsKKworCW10eF9sb2NrX3NwaW4oJnNjaGVkX2xvY2spOworCWlmIChr
ZS0+a2VfdGlja3MpIHsKKwkJaW50IHJ0aWNrOworCisJCS8qCisJCSAqIERvbid0IHVwZGF0ZSBt
b3JlIGZyZXF1ZW50bHkgdGhhbiB0d2ljZSBhIHNlY29uZC4gIEFsbG93aW5nCisJCSAqIHRoaXMg
Y2F1c2VzIHRoZSBjcHUgdXNhZ2UgdG8gZGVjYXkgYXdheSB0b28gcXVpY2tseSBkdWUgdG8KKwkJ
ICogcm91bmRpbmcgZXJyb3JzLgorCQkgKi8KKwkJaWYgKGtlLT5rZV9mdGljayArIFNDSEVEX0NQ
VV9USUNLUyA8IGtlLT5rZV9sdGljayB8fAorCQkgICAga2UtPmtlX2x0aWNrIDwgKHRpY2tzIC0g
KGh6IC8gMikpKQorCQkJc2NoZWRfcGN0Y3B1X3VwZGF0ZShrZSk7CisJCS8qIEhvdyBtYW55IHJ0
aWNrIHBlciBzZWNvbmQgPyAqLworCQlydGljayA9IE1JTihrZS0+a2VfdGlja3MgLyBTQ0hFRF9D
UFVfVElNRSwgU0NIRURfQ1BVX1RJQ0tTKTsKKwkJcGN0Y3B1ID0gKEZTQ0FMRSAqICgoRlNDQUxF
ICogcnRpY2spL3JlYWxzdGF0aHopKSA+PiBGU0hJRlQ7CisJfQorCisJa2UtPmtlX3Byb2MtPnBf
c3d0aW1lID0ga2UtPmtlX2x0aWNrIC0ga2UtPmtlX2Z0aWNrOworCW10eF91bmxvY2tfc3Bpbigm
c2NoZWRfbG9jayk7CisKKwlyZXR1cm4gKHBjdGNwdSk7Cit9CisKK3ZvaWQKK3NjaGVkX2JpbmQo
c3RydWN0IHRocmVhZCAqdGQsIGludCBjcHUpCit7CisJc3RydWN0IGtzZSAqa2U7CisKKwltdHhf
YXNzZXJ0KCZzY2hlZF9sb2NrLCBNQV9PV05FRCk7CisJa2UgPSB0ZC0+dGRfa3NlOworCWtlLT5r
ZV9mbGFncyB8PSBLRUZfQk9VTkQ7CisjaWZkZWYgU01QCisJa2UtPmtlX2NwdSA9IGNwdTsKKwlp
ZiAoUENQVV9HRVQoY3B1aWQpID09IGNwdSkKKwkJcmV0dXJuOworCW1pX3N3aXRjaChTV19WT0ws
IE5VTEwpOworI2VuZGlmCit9CisKK3ZvaWQKK3NjaGVkX3VuYmluZChzdHJ1Y3QgdGhyZWFkICp0
ZCkKK3sKKwltdHhfYXNzZXJ0KCZzY2hlZF9sb2NrLCBNQV9PV05FRCk7CisJdGQtPnRkX2tzZS0+
a2VfZmxhZ3MgJj0gfktFRl9CT1VORDsKK30KKworaW50CitzY2hlZF9pc19ib3VuZChzdHJ1Y3Qg
dGhyZWFkICp0ZCkKK3sKKwltdHhfYXNzZXJ0KCZzY2hlZF9sb2NrLCBNQV9PV05FRCk7CisJcmV0
dXJuICh0ZC0+dGRfa3NlLT5rZV9mbGFncyAmIEtFRl9CT1VORCk7Cit9CisKK2ludAorc2NoZWRf
bG9hZCh2b2lkKQoreworCXJldHVybiAoc2NoZWRfdGRjbnQpOworfQorCit2b2lkCitzY2hlZF9y
ZWxpbnF1aXNoKHN0cnVjdCB0aHJlYWQgKnRkKQoreworCXN0cnVjdCBrc2VncnAgKmtnOworCisJ
a2cgPSB0ZC0+dGRfa3NlZ3JwOworCW10eF9sb2NrX3NwaW4oJnNjaGVkX2xvY2spOworCWlmIChz
Y2hlZF9pc190aW1lc2hhcmUoa2cpKSB7CisJCXNjaGVkX3ByaW8odGQsIFBSSV9NQVhfVElNRVNI
QVJFKTsKKwkJdGQtPnRkX2tzZS0+a2VfZmxhZ3MgfD0gS0VGX05FWFRSUTsKKwl9CisJbWlfc3dp
dGNoKFNXX1ZPTCwgTlVMTCk7CisJbXR4X3VubG9ja19zcGluKCZzY2hlZF9sb2NrKTsKK30KKwor
aW50CitzY2hlZF9zaXplb2Zfa3NlZ3JwKHZvaWQpCit7CisJcmV0dXJuIChzaXplb2Yoc3RydWN0
IGtzZWdycCkgKyBzaXplb2Yoc3RydWN0IGtnX3NjaGVkKSk7Cit9CisKK2ludAorc2NoZWRfc2l6
ZW9mX3Byb2Modm9pZCkKK3sKKwlyZXR1cm4gKHNpemVvZihzdHJ1Y3QgcHJvYykpOworfQorCitp
bnQKK3NjaGVkX3NpemVvZl90aHJlYWQodm9pZCkKK3sKKwlyZXR1cm4gKHNpemVvZihzdHJ1Y3Qg
dGhyZWFkKSArIHNpemVvZihzdHJ1Y3QgdGRfc2NoZWQpKTsKK30KKyNkZWZpbmUgS0VSTl9TV0lU
Q0hfSU5DTFVERSAxCisjaW5jbHVkZSAia2Vybi9rZXJuX3N3aXRjaC5jIgpJbmRleDogLi9zeXMv
a2Vybi9zY2hlZF80YnNkLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2hvbWUvbmN2cy9zcmMvc3lz
L2tlcm4vc2NoZWRfNGJzZC5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjc3LjIuMQpkaWZmIC11
IC1yMS43Ny4yLjEgc2NoZWRfNGJzZC5jCi0tLSAuL3N5cy9rZXJuL3NjaGVkXzRic2QuYwkxNiBK
dW4gMjAwNiAyMjoxMTo1NSAtMDAwMAkxLjc3LjIuMQorKysgLi9zeXMva2Vybi9zY2hlZF80YnNk
LmMJMjQgT2N0IDIwMDYgMDk6MTE6MjYgLTAwMDAKQEAgLTEzNTQsNiArMTM1NCwxOSBAQAogCXJl
dHVybiAodGQtPnRkX2tzZS0+a2VfZmxhZ3MgJiBLRUZfQk9VTkQpOwogfQogCit2b2lkCitzY2hl
ZF9yZWxpbnF1aXNoKHN0cnVjdCB0aHJlYWQgKnRkKQoreyAKKwlzdHJ1Y3Qga3NlZ3JwICprZzsK
KyAKKwlrZyA9IHRkLT50ZF9rc2VncnA7CisJbXR4X2xvY2tfc3Bpbigmc2NoZWRfbG9jayk7CisJ
aWYgKGtnLT5rZ19wcmlfY2xhc3MgPT0gUFJJX1RJTUVTSEFSRSkKKwkJc2NoZWRfcHJpbyh0ZCwg
UFJJX01BWF9USU1FU0hBUkUpOworCW1pX3N3aXRjaChTV19WT0wsIE5VTEwpOworCW10eF91bmxv
Y2tfc3Bpbigmc2NoZWRfbG9jayk7Cit9CisKIGludAogc2NoZWRfbG9hZCh2b2lkKQogewpAQCAt
MTM4Niw1ICsxMzk5LDEwIEBACiAKIAlyZXR1cm4gKDApOwogfQorCit2b2lkCitzY2hlZF90aWNr
KHZvaWQpCit7Cit9CiAjZGVmaW5lIEtFUk5fU1dJVENIX0lOQ0xVREUgMQogI2luY2x1ZGUgImtl
cm4va2Vybl9zd2l0Y2guYyIKSW5kZXg6IC4vc3lzL2tlcm4va2Vybl9zd2l0Y2guYwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvaG9tZS9uY3ZzL3NyYy9zeXMva2Vybi9rZXJuX3N3aXRjaC5jLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjExNi4yLjEKZGlmZiAtdSAtcjEuMTE2LjIuMSBrZXJuX3N3aXRj
aC5jCi0tLSAuL3N5cy9rZXJuL2tlcm5fc3dpdGNoLmMJNiBBdWcgMjAwNSAwMzowNjoyNSAtMDAw
MAkxLjExNi4yLjEKKysrIC4vc3lzL2tlcm4va2Vybl9zd2l0Y2guYwkyNCBPY3QgMjAwNiAwOTox
MTo1MiAtMDAwMApAQCAtMzAzLDcgKzMwMywxMiBAQAogCWlmICgodGQtPnRkX3Byb2MtPnBfZmxh
ZyAmIFBfSEFEVEhSRUFEUykgPT0gMCkgewogCQkvKiBXZSBvbmx5IGNhcmUgYWJvdXQgdGhlIGtz
ZSBpbiB0aGUgcnVuIHF1ZXVlLiAqLwogCQl0ZC0+dGRfcHJpb3JpdHkgPSBuZXdwcmk7Ci0JCWlm
IChrZS0+a2VfcnFpbmRleCAhPSAobmV3cHJpIC8gUlFfUFBRKSkgeworI2lmbmRlZiBTQ0hFRF9D
T1JFCisJCWlmIChrZS0+a2VfcnFpbmRleCAhPSAobmV3cHJpIC8gUlFfUFBRKSkKKyNlbHNlCisJ
CWlmIChrZS0+a2VfcnFpbmRleCAhPSBuZXdwcmkpCisjZW5kaWYKKwkJewogCQkJc2NoZWRfcmVt
KHRkKTsKIAkJCXNjaGVkX2FkZCh0ZCwgU1JRX0JPUklORyk7CiAJCX0KSW5kZXg6IC4vc3lzL2tl
cm4va2Vybl9jbG9jay5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9ob21lL25jdnMvc3JjL3N5cy9r
ZXJuL2tlcm5fY2xvY2suYyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNzguMi4zCmRpZmYgLXUg
LXIxLjE3OC4yLjMga2Vybl9jbG9jay5jCi0tLSAuL3N5cy9rZXJuL2tlcm5fY2xvY2suYwkxMCBN
YXIgMjAwNiAxOTozNzozMyAtMDAwMAkxLjE3OC4yLjMKKysrIC4vc3lzL2tlcm4va2Vybl9jbG9j
ay5jCTI0IE9jdCAyMDA2IDA5OjEyOjA1IC0wMDAwCkBAIC0yMDQsNiArMjA0LDcgQEAKIAkgKiBS
dW4gY3VycmVudCBwcm9jZXNzJ3MgdmlydHVhbCBhbmQgcHJvZmlsZSB0aW1lLCBhcyBuZWVkZWQu
CiAJICovCiAJbXR4X2xvY2tfc3Bpbl9mbGFncygmc2NoZWRfbG9jaywgTVRYX1FVSUVUKTsKKwlz
Y2hlZF90aWNrKCk7CiAJaWYgKHAtPnBfZmxhZyAmIFBfU0EpIHsKIAkJLyogWFhYS1NFIFdoYXQg
dG8gZG8/ICovCiAJfSBlbHNlIHsKSW5kZXg6IC4vc3lzL2tlcm4va2Vybl90Yy5jCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9ob21lL25jdnMvc3JjL3N5cy9rZXJuL2tlcm5fdGMuYyx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS4xNjQKZGlmZiAtdSAtcjEuMTY0IGtlcm5fdGMuYwotLS0gLi9zeXMva2Vy
bi9rZXJuX3RjLmMJMjYgTWFyIDIwMDUgMjA6MDQ6MjggLTAwMDAJMS4xNjQKKysrIC4vc3lzL2tl
cm4va2Vybl90Yy5jCTI0IE9jdCAyMDA2IDA5OjEyOjM3IC0wMDAwCkBAIC04LDcgKzgsNyBAQAog
ICovCiAKICNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLV9fRkJTRElEKCIkRnJlZUJTRDogc3JjL3N5
cy9rZXJuL2tlcm5fdGMuYyx2IDEuMTY0IDIwMDUvMDMvMjYgMjA6MDQ6MjggcGhrIEV4cCAkIik7
CitfX0ZCU0RJRCgiJEZyZWVCU0Q6IC9yZXBvbWFuL3IvbmN2cy9zcmMvc3lzL2tlcm4va2Vybl90
Yy5jLHYgMS4xNzcgMjAwNi8wOC8wNCAwNzo1NjozNSB5YXIgRXhwICQiKTsKIAogI2luY2x1ZGUg
Im9wdF9udHAuaCIKIApAQCAtNjEsNyArNjEsNyBAQAogCXN0cnVjdCB0aW1laGFuZHMJKnRoX25l
eHQ7CiB9OwogCi1leHRlcm4gc3RydWN0IHRpbWVoYW5kcyB0aDA7CitzdGF0aWMgc3RydWN0IHRp
bWVoYW5kcyB0aDA7CiBzdGF0aWMgc3RydWN0IHRpbWVoYW5kcyB0aDkgPSB7IE5VTEwsIDAsIDAs
IDAsIHswLCAwfSwgezAsIDB9LCB7MCwgMH0sIDAsICZ0aDB9Owogc3RhdGljIHN0cnVjdCB0aW1l
aGFuZHMgdGg4ID0geyBOVUxMLCAwLCAwLCAwLCB7MCwgMH0sIHswLCAwfSwgezAsIDB9LCAwLCAm
dGg5fTsKIHN0YXRpYyBzdHJ1Y3QgdGltZWhhbmRzIHRoNyA9IHsgTlVMTCwgMCwgMCwgMCwgezAs
IDB9LCB7MCwgMH0sIHswLCAwfSwgMCwgJnRoOH07CkBAIC04OCw3ICs4OCw3IEBACiBzdGF0aWMg
c3RydWN0IHRpbWVjb3VudGVyICp0aW1lY291bnRlcnMgPSAmZHVtbXlfdGltZWNvdW50ZXI7CiAK
IHRpbWVfdCB0aW1lX3NlY29uZCA9IDE7Ci10aW1lX3QgdGltZV91cHRpbWUgPSAwOwordGltZV90
IHRpbWVfdXB0aW1lID0gMTsKIAogc3RhdGljIHN0cnVjdCBiaW50aW1lIGJvb3R0aW1lYmluOwog
c3RydWN0IHRpbWV2YWwgYm9vdHRpbWU7CkBAIC05Nyw2ICs5Nyw3IEBACiAgICAgTlVMTCwgMCwg
c3lzY3RsX2tlcm5fYm9vdHRpbWUsICJTLHRpbWV2YWwiLCAiU3lzdGVtIGJvb3R0aW1lIik7CiAK
IFNZU0NUTF9OT0RFKF9rZXJuLCBPSURfQVVUTywgdGltZWNvdW50ZXIsIENUTEZMQUdfUlcsIDAs
ICIiKTsKK1NZU0NUTF9OT0RFKF9rZXJuX3RpbWVjb3VudGVyLCBPSURfQVVUTywgdGMsIENUTEZM
QUdfUlcsIDAsICIiKTsKIAogc3RhdGljIGludCB0aW1lc3RlcHdhcm5pbmdzOwogU1lTQ1RMX0lO
VChfa2Vybl90aW1lY291bnRlciwgT0lEX0FVVE8sIHN0ZXB3YXJuaW5ncywgQ1RMRkxBR19SVywK
QEAgLTExNiw2ICsxMTcsNyBAQAogI3VuZGVmIFRDX1NUQVRTCiAKIHN0YXRpYyB2b2lkIHRjX3dp
bmR1cCh2b2lkKTsKK3N0YXRpYyB2b2lkIGNwdV90aWNrX2NhbGlicmF0ZShpbnQpOwogCiBzdGF0
aWMgaW50CiBzeXNjdGxfa2Vybl9ib290dGltZShTWVNDVExfSEFORExFUl9BUkdTKQpAQCAtMTMx
LDYgKzEzMywyNyBAQAogI2VuZGlmCiAJCXJldHVybiBTWVNDVExfT1VUKHJlcSwgJmJvb3R0aW1l
LCBzaXplb2YoYm9vdHRpbWUpKTsKIH0KKworc3RhdGljIGludAorc3lzY3RsX2tlcm5fdGltZWNv
dW50ZXJfZ2V0KFNZU0NUTF9IQU5ETEVSX0FSR1MpCit7CisJdV9pbnQgbmNvdW50OworCXN0cnVj
dCB0aW1lY291bnRlciAqdGMgPSBhcmcxOworCisJbmNvdW50ID0gdGMtPnRjX2dldF90aW1lY291
bnQodGMpOworCXJldHVybiBzeXNjdGxfaGFuZGxlX2ludChvaWRwLCAmbmNvdW50LCBzaXplb2Yo
bmNvdW50KSwgcmVxKTsKK30KKworc3RhdGljIGludAorc3lzY3RsX2tlcm5fdGltZWNvdW50ZXJf
ZnJlcShTWVNDVExfSEFORExFUl9BUkdTKQoreworCXVfaW50NjRfdCBmcmVxOworCXN0cnVjdCB0
aW1lY291bnRlciAqdGMgPSBhcmcxOworCisJZnJlcSA9IHRjLT50Y19mcmVxdWVuY3k7CisJcmV0
dXJuIHN5c2N0bF9oYW5kbGVfaW50KG9pZHAsICZmcmVxLCBzaXplb2YoZnJlcSksIHJlcSk7Cit9
CisKIC8qCiAgKiBSZXR1cm4gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgdGltZWhhbmRzJyBj
b3VudGVyIHZhbHVlIG5vdyBhbmQgd2hhdAogICogd2FzIHdoZW4gd2UgY29waWVkIGl0IHRvIHRo
ZSB0aW1laGFuZHMnIG9mZnNldF9jb3VudC4KQEAgLTMwNyw2ICszMzAsNyBAQAogdGNfaW5pdChz
dHJ1Y3QgdGltZWNvdW50ZXIgKnRjKQogewogCXVfaW50IHU7CisJc3RydWN0IHN5c2N0bF9vaWQg
KnRjX3Jvb3Q7CiAKIAl1ID0gdGMtPnRjX2ZyZXF1ZW5jeSAvIHRjLT50Y19jb3VudGVyX21hc2s7
CiAJLyogWFhYOiBXZSBuZWVkIHNvbWUgbWFyZ2luIGhlcmUsIDEwJSBpcyBhIGd1ZXNzICovCkBA
IC0zMjgsNiArMzUyLDI0IEBACiAJdGMtPnRjX25leHQgPSB0aW1lY291bnRlcnM7CiAJdGltZWNv
dW50ZXJzID0gdGM7CiAJLyoKKwkgKiBTZXQgdXAgc3lzY3RsIHRyZWUgZm9yIHRoaXMgY291bnRl
ci4KKwkgKi8KKwl0Y19yb290ID0gU1lTQ1RMX0FERF9OT0RFKE5VTEwsCisJICAgIFNZU0NUTF9T
VEFUSUNfQ0hJTERSRU4oX2tlcm5fdGltZWNvdW50ZXJfdGMpLCBPSURfQVVUTywgdGMtPnRjX25h
bWUsCisJICAgIENUTEZMQUdfUlcsIDAsICJ0aW1lY291bnRlciBkZXNjcmlwdGlvbiIpOworCVNZ
U0NUTF9BRERfVUlOVChOVUxMLCBTWVNDVExfQ0hJTERSRU4odGNfcm9vdCksIE9JRF9BVVRPLAor
CSAgICAibWFzayIsIENUTEZMQUdfUkQsICYodGMtPnRjX2NvdW50ZXJfbWFzayksIDAsCisJICAg
ICJtYXNrIGZvciBpbXBsZW1lbnRlZCBiaXRzIik7CisJU1lTQ1RMX0FERF9QUk9DKE5VTEwsIFNZ
U0NUTF9DSElMRFJFTih0Y19yb290KSwgT0lEX0FVVE8sCisJICAgICJjb3VudGVyIiwgQ1RMVFlQ
RV9VSU5UIHwgQ1RMRkxBR19SRCwgdGMsIHNpemVvZigqdGMpLAorCSAgICBzeXNjdGxfa2Vybl90
aW1lY291bnRlcl9nZXQsICJJVSIsICJjdXJyZW50IHRpbWVjb3VudGVyIHZhbHVlIik7CisJU1lT
Q1RMX0FERF9QUk9DKE5VTEwsIFNZU0NUTF9DSElMRFJFTih0Y19yb290KSwgT0lEX0FVVE8sCisJ
ICAgICJmcmVxdWVuY3kiLCBDVExUWVBFX1FVQUQgfCBDVExGTEFHX1JELCB0Yywgc2l6ZW9mKCp0
YyksCisJICAgICBzeXNjdGxfa2Vybl90aW1lY291bnRlcl9mcmVxLCAiSVUiLCAidGltZWNvdW50
ZXIgZnJlcXVlbmN5Iik7CisJU1lTQ1RMX0FERF9JTlQoTlVMTCwgU1lTQ1RMX0NISUxEUkVOKHRj
X3Jvb3QpLCBPSURfQVVUTywKKwkgICAgInF1YWxpdHkiLCBDVExGTEFHX1JELCAmKHRjLT50Y19x
dWFsaXR5KSwgMCwKKwkgICAgImdvb2RuZXNzIG9mIHRpbWUgY291bnRlciIpOworCS8qCiAJICog
TmV2ZXIgYXV0b21hdGljYWxseSB1c2UgYSB0aW1lY291bnRlciB3aXRoIG5lZ2F0aXZlIHF1YWxp
dHkuCiAJICogRXZlbiB0aG91Z2ggd2UgcnVuIG9uIHRoZSBkdW1teSBjb3VudGVyLCBzd2l0Y2hp
bmcgaGVyZSBtYXkgYmUKIAkgKiB3b3JzZSBzaW5jZSB0aGlzIHRpbWVjb3VudGVyIG1heSBub3Qg
YmUgbW9ub3Rvbm91cy4KQEAgLTM2MCwxMiArNDAyLDE0IEBACiB2b2lkCiB0Y19zZXRjbG9jayhz
dHJ1Y3QgdGltZXNwZWMgKnRzKQogewotCXN0cnVjdCB0aW1lc3BlYyB0czI7CisJc3RydWN0IHRp
bWVzcGVjIHRiZWYsIHRhZnQ7CiAJc3RydWN0IGJpbnRpbWUgYnQsIGJ0MjsKIAorCWNwdV90aWNr
X2NhbGlicmF0ZSgxKTsKIAluc2V0Y2xvY2srKzsKLQliaW51cHRpbWUoJmJ0Mik7CisJbmFub3Rp
bWUoJnRiZWYpOwogCXRpbWVzcGVjMmJpbnRpbWUodHMsICZidCk7CisJYmludXB0aW1lKCZidDIp
OwogCWJpbnRpbWVfc3ViKCZidCwgJmJ0Mik7CiAJYmludGltZV9hZGQoJmJ0MiwgJmJvb3R0aW1l
YmluKTsKIAlib290dGltZWJpbiA9IGJ0OwpAQCAtMzczLDEyICs0MTcsMTUgQEAKIAogCS8qIFhY
WCBmaWRkbGUgYWxsIHRoZSBsaXR0bGUgY3JpbmtseSBiaXRzIGFyb3VuZCB0aGUgZmlvcmRzLi4u
ICovCiAJdGNfd2luZHVwKCk7CisJbmFub3RpbWUoJnRhZnQpOwogCWlmICh0aW1lc3RlcHdhcm5p
bmdzKSB7Ci0JCWJpbnRpbWUydGltZXNwZWMoJmJ0MiwgJnRzMik7Ci0JCWxvZyhMT0dfSU5GTywg
IlRpbWUgc3RlcHBlZCBmcm9tICVqZC4lMDlsZCB0byAlamQuJTA5bGRcbiIsCi0JCSAgICAoaW50
bWF4X3QpdHMyLnR2X3NlYywgdHMyLnR2X25zZWMsCisJCWxvZyhMT0dfSU5GTywKKwkJICAgICJU
aW1lIHN0ZXBwZWQgZnJvbSAlamQuJTA5bGQgdG8gJWpkLiUwOWxkICglamQuJTA5bGQpXG4iLAor
CQkgICAgKGludG1heF90KXRiZWYudHZfc2VjLCB0YmVmLnR2X25zZWMsCisJCSAgICAoaW50bWF4
X3QpdGFmdC50dl9zZWMsIHRhZnQudHZfbnNlYywKIAkJICAgIChpbnRtYXhfdCl0cy0+dHZfc2Vj
LCB0cy0+dHZfbnNlYyk7CiAJfQorCWNwdV90aWNrX2NhbGlicmF0ZSgxKTsKIH0KIAogLyoKQEAg
LTQ3NSw4ICs1MjIsOCBAQAogCSAqCSB4ID0gYSAqIDJeMzIgLyAxMF45ID0gYSAqIDQuMjk0OTY3
Mjk2CiAJICoKIAkgKiBUaGUgcmFuZ2Ugb2YgdGhfYWRqdXN0bWVudCBpcyArLy0gNTAwMFBQTSBz
byBpbnNpZGUgYSA2NGJpdCBpbnQKLQkgKiB3ZSBjYW4gb25seSBtdWx0aXBseSBieSBhYm91dCA4
NTAgd2l0aG91dCBvdmVyZmxvd2luZywgYnV0IHRoYXQKLQkgKiBsZWF2ZXMgc3VpdGFibHkgcHJl
Y2lzZSBmcmFjdGlvbnMgZm9yIG11bHRpcGx5IGJlZm9yZSBkaXZpZGUuCisJICogd2UgY2FuIG9u
bHkgbXVsdGlwbHkgYnkgYWJvdXQgODUwIHdpdGhvdXQgb3ZlcmZsb3dpbmcsIHRoYXQKKwkgKiBs
ZWF2ZXMgbm8gc3VpdGFibHkgcHJlY2lzZSBmcmFjdGlvbnMgZm9yIG11bHRpcGx5IGJlZm9yZSBk
aXZpZGUuCiAJICoKIAkgKiBEaXZpZGUgYmVmb3JlIG11bHRpcGx5IHdpdGggYSBmcmFjdGlvbiBv
ZiAyMTk5LzUxMiByZXN1bHRzIGluIGEKIAkgKiBzeXN0ZW1hdGljIHVuZGVyY29tcGVuc2F0aW9u
IG9mIDEwUFBNIG9mIHRoX2FkanVzdG1lbnQuICBPbiBhCkBAIC03NDksMTEgKzc5NiwxNiBAQAog
dGNfdGlja3RvY2sodm9pZCkKIHsKIAlzdGF0aWMgaW50IGNvdW50OworCXN0YXRpYyB0aW1lX3Qg
bGFzdF9jYWxpYjsKIAogCWlmICgrK2NvdW50IDwgdGNfdGljaykKIAkJcmV0dXJuOwogCWNvdW50
ID0gMDsKIAl0Y193aW5kdXAoKTsKKwlpZiAodGltZV91cHRpbWUgIT0gbGFzdF9jYWxpYiAmJiAh
KHRpbWVfdXB0aW1lICYgMHhmKSkgeworCQljcHVfdGlja19jYWxpYnJhdGUoMCk7CisJCWxhc3Rf
Y2FsaWIgPSB0aW1lX3VwdGltZTsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC03ODIsMyArODM0
LDE0NyBAQAogfQogCiBTWVNJTklUKHRpbWVjb3VudGVyLCBTSV9TVUJfQ0xPQ0tTLCBTSV9PUkRF
Ul9TRUNPTkQsIGluaXR0aW1lY291bnRlciwgTlVMTCkKKworLyogQ3B1IHRpY2sgaGFuZGxpbmcg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0
YXRpYyBpbnQgY3B1X3RpY2tfdmFyaWFibGU7CitzdGF0aWMgdWludDY0X3QJY3B1X3RpY2tfZnJl
cXVlbmN5OworCitzdGF0aWMgdWludDY0X3QKK3RjX2NwdV90aWNrcyh2b2lkKQoreworCXN0YXRp
YyB1aW50NjRfdCBiYXNlOworCXN0YXRpYyB1bnNpZ25lZCBsYXN0OworCXVuc2lnbmVkIHU7CisJ
c3RydWN0IHRpbWVjb3VudGVyICp0YzsKKworCXRjID0gdGltZWhhbmRzLT50aF9jb3VudGVyOwor
CXUgPSB0Yy0+dGNfZ2V0X3RpbWVjb3VudCh0YykgJiB0Yy0+dGNfY291bnRlcl9tYXNrOworCWlm
ICh1IDwgbGFzdCkKKwkJYmFzZSArPSAodWludDY0X3QpdGMtPnRjX2NvdW50ZXJfbWFzayArIDE7
CisJbGFzdCA9IHU7CisJcmV0dXJuICh1ICsgYmFzZSk7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0
aW9uIGdldHMgY2FsbGVkIGV2ZXIgMTYgc2Vjb25kcyBvbiBvbmx5IG9uZSBkZXNpZ25hdGVkCisg
KiBDUFUgaW4gdGhlIHN5c3RlbSBmcm9tIGhhcmRjbG9jaygpIHZpYSB0Y190aWNrdG9jaygpLgor
ICoKKyAqIFdoZW5ldmVyIHRoZSByZWFsIHRpbWUgY2xvY2sgaXMgc3RlcHBlZCB3ZSBnZXQgY2Fs
bGVkIHdpdGggcmVzZXQ9MQorICogdG8gbWFrZSBzdXJlIHdlIGhhbmRsZSBzdXNwZW5kL3Jlc3Vt
ZSBhbmQgc2ltaWxhciBldmVudHMgY29ycmVjdGx5LgorICovCisKK3N0YXRpYyB2b2lkCitjcHVf
dGlja19jYWxpYnJhdGUoaW50IHJlc2V0KQoreworCXN0YXRpYyB1aW50NjRfdCBjX2xhc3Q7CisJ
dWludDY0X3QgY190aGlzLCBjX2RlbHRhOworCXN0YXRpYyBzdHJ1Y3QgYmludGltZSAgdF9sYXN0
OworCXN0cnVjdCBiaW50aW1lIHRfdGhpcywgdF9kZWx0YTsKKwl1aW50MzJfdCBkaXZpOworCisJ
aWYgKHJlc2V0KSB7CisJCS8qIFRoZSBjbG9jayB3YXMgc3RlcHBlZCwgYWJvcnQgJiByZXNldCAq
LworCQl0X2xhc3Quc2VjID0gMDsKKwkJcmV0dXJuOworCX0KKworCS8qIHdlIGRvbid0IGNhbGli
cmF0ZSBmaXhlZCByYXRlIGNwdXRpY2tzICovCisJaWYgKCFjcHVfdGlja192YXJpYWJsZSkKKwkJ
cmV0dXJuOworCisJZ2V0YmludXB0aW1lKCZ0X3RoaXMpOworCWNfdGhpcyA9IGNwdV90aWNrcygp
OworCWlmICh0X2xhc3Quc2VjICE9IDApIHsKKwkJY19kZWx0YSA9IGNfdGhpcyAtIGNfbGFzdDsK
KwkJdF9kZWx0YSA9IHRfdGhpczsKKwkJYmludGltZV9zdWIoJnRfZGVsdGEsICZ0X2xhc3QpOwor
CQkvKgorCQkgKiBWYWxpZGF0ZSB0aGF0IDE2ICsvLSAxLzI1NiBzZWNvbmRzIHBhc3NlZC4gCisJ
CSAqIEFmdGVyIGRpdmlzaW9uIGJ5IDE2IHRoaXMgZ2l2ZXMgdXMgYSBwcmVjaXNpb24gb2YKKwkJ
ICogcm91Z2hseSAyNTBQUE0gd2hpY2ggaXMgc3VmZmljaWVudAorCQkgKi8KKwkJaWYgKHRfZGVs
dGEuc2VjID4gMTYgfHwgKAorCQkgICAgdF9kZWx0YS5zZWMgPT0gMTYgJiYgdF9kZWx0YS5mcmFj
ID49ICgweDAxTEwgPDwgNTYpKSkgeworCQkJLyogdG9vIGxvbmcgKi8KKwkJCWlmIChib290dmVy
Ym9zZSkKKwkJCQlwcmludGYoIiVqdS4lMDE2anggdG9vIGxvbmdcbiIsCisJCQkJICAgICh1aW50
bWF4X3QpdF9kZWx0YS5zZWMsCisJCQkJICAgICh1aW50bWF4X3QpdF9kZWx0YS5mcmFjKTsKKwkJ
fSBlbHNlIGlmICh0X2RlbHRhLnNlYyA8IDE1IHx8CisJCSAgICAodF9kZWx0YS5zZWMgPT0gMTUg
JiYgdF9kZWx0YS5mcmFjIDw9ICgweGZmTEwgPDwgNTYpKSkgeworCQkJLyogdG9vIHNob3J0ICov
CisJCQlpZiAoYm9vdHZlcmJvc2UpCisJCQkJcHJpbnRmKCIlanUuJTAxNmp4IHRvbyBzaG9ydFxu
IiwKKwkJCQkgICAgKHVpbnRtYXhfdCl0X2RlbHRhLnNlYywKKwkJCQkgICAgKHVpbnRtYXhfdCl0
X2RlbHRhLmZyYWMpOworCQl9IGVsc2UgeworCQkJLyoganVzdCByaWdodCAqLworCQkJLyoKKwkJ
CSAqIEhlYWRyb29tOgorCQkJICogCTJeKDY0LTIwKSAvIDE2W3NdID0KKwkJCSAqIAkyXig0NCkg
LyAxNltzXSA9CisJCQkgKiAJMTcuNTkyLjE4Ni4wNDQuNDE2IC8gMTYgPQorCQkJICogCTEuMDk5
LjUxMS42MjcuNzc2IFtIel0KKwkJCSAqLworCQkJZGl2aSA9IHRfZGVsdGEuc2VjIDw8IDIwOwor
CQkJZGl2aSB8PSB0X2RlbHRhLmZyYWMgPj4gKDY0IC0gMjApOworCQkJY19kZWx0YSA8PD0gMjA7
CisJCQljX2RlbHRhIC89IGRpdmk7CisJCQlpZiAoY19kZWx0YSAgPiBjcHVfdGlja19mcmVxdWVu
Y3kpIHsKKwkJCQlpZiAoMCAmJiBib290dmVyYm9zZSkKKwkJCQkJcHJpbnRmKCJjcHVfdGljayBp
bmNyZWFzZWQgdG8gJWp1IEh6XG4iLAorCQkJCQkgICAgY19kZWx0YSk7CisJCQkJY3B1X3RpY2tf
ZnJlcXVlbmN5ID0gY19kZWx0YTsKKwkJCX0KKwkJfQorCX0KKwljX2xhc3QgPSBjX3RoaXM7CisJ
dF9sYXN0ID0gdF90aGlzOworfQorCit2b2lkCitzZXRfY3B1dGlja2VyKGNwdV90aWNrX2YgKmZ1
bmMsIHVpbnQ2NF90IGZyZXEsIHVuc2lnbmVkIHZhcikKK3sKKworCWlmIChmdW5jID09IE5VTEwp
IHsKKwkJY3B1X3RpY2tzID0gdGNfY3B1X3RpY2tzOworCX0gZWxzZSB7CisJCWNwdV90aWNrX2Zy
ZXF1ZW5jeSA9IGZyZXE7CisJCWNwdV90aWNrX3ZhcmlhYmxlID0gdmFyOworCQljcHVfdGlja3Mg
PSBmdW5jOworCX0KK30KKwordWludDY0X3QKK2NwdV90aWNrcmF0ZSh2b2lkKQoreworCisJaWYg
KGNwdV90aWNrcyA9PSB0Y19jcHVfdGlja3MpIAorCQlyZXR1cm4gKHRjX2dldGZyZXF1ZW5jeSgp
KTsKKwlyZXR1cm4gKGNwdV90aWNrX2ZyZXF1ZW5jeSk7Cit9CisKKy8qCisgKiBXZSBuZWVkIHRv
IGJlIHNsaWdodGx5IGNhcmVmdWwgY29udmVydGluZyBjcHV0aWNrcyB0byBtaWNyb3NlY29uZHMu
CisgKiBUaGVyZSBpcyBwbGVudHkgb2YgbWFyZ2luIGluIDY0IGJpdHMgb2YgbWljcm9zZWNvbmRz
IChoYWxmIGEgbWlsbGlvbgorICogeWVhcnMpIGFuZCBpbiA2NCBiaXRzIGF0IDQgR0h6ICgxNDYg
eWVhcnMpLCBidXQgaWYgd2UgZG8gYSBtdWx0aXBseQorICogYmVmb3JlIGRpdmlkZSBjb252ZXJz
aW9uICh0byByZXRhaW4gcHJlY2lzaW9uKSB3ZSBmaW5kIHRoYXQgdGhlCisgKiBtYXJnaW4gc2hy
aW5rcyB0byAxLjUgaG91cnMgKG9uZSBtaWxsaW9udGggb2YgMTQ2eSkuCisgKiBXaXRoIGEgdGhy
ZWUgcHJvbmcgYXBwcm9hY2ggd2UgbmV2ZXIgbG9zZSBzaWduaWZpY2FudCBiaXRzLCBubworICog
bWF0dGVyIHdoYXQgdGhlIGNwdXRpY2sgcmF0ZSBhbmQgbGVuZ3RoIG9mIHRpbWVpbnRlcnZhbCBp
cy4KKyAqLworCit1aW50NjRfdAorY3B1dGljazJ1c2VjKHVpbnQ2NF90IHRpY2spCit7CisKKwlp
ZiAodGljayA+IDE4NDQ2NzQ0MDczNzA5NTUxTEwpCQkvKiBmbG9vcigyXjY0IC8gMTAwMCkgKi8K
KwkJcmV0dXJuICh0aWNrIC8gKGNwdV90aWNrcmF0ZSgpIC8gMTAwMDAwMExMKSk7CisJZWxzZSBp
ZiAodGljayA+IDE4NDQ2NzQ0MDczNzA5TEwpCS8qIGZsb29yKDJeNjQgLyAxMDAwMDAwKSAqLwor
CQlyZXR1cm4gKCh0aWNrICogMTAwMExMKSAvIChjcHVfdGlja3JhdGUoKSAvIDEwMDBMTCkpOwor
CWVsc2UKKwkJcmV0dXJuICgodGljayAqIDEwMDAwMDBMTCkgLyBjcHVfdGlja3JhdGUoKSk7Cit9
CisKK2NwdV90aWNrX2YJKmNwdV90aWNrcyA9IHRjX2NwdV90aWNrczsKSW5kZXg6IC4vc3lzL2tl
cm4va2Vybl9zeW5jaC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9ob21lL25jdnMvc3JjL3N5cy9r
ZXJuL2tlcm5fc3luY2guYyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yNzAuMi42CmRpZmYgLXUg
LXIxLjI3MC4yLjYga2Vybl9zeW5jaC5jCi0tLSAuL3N5cy9rZXJuL2tlcm5fc3luY2guYwk2IEp1
bCAyMDA2IDA4OjMyOjUwIC0wMDAwCTEuMjcwLjIuNgorKysgLi9zeXMva2Vybi9rZXJuX3N5bmNo
LmMJMjQgT2N0IDIwMDYgMDk6MTM6MDUgLTAwMDAKQEAgLTUzNywxNCArNTM3LDcgQEAKIGludAog
eWllbGQoc3RydWN0IHRocmVhZCAqdGQsIHN0cnVjdCB5aWVsZF9hcmdzICp1YXApCiB7Ci0Jc3Ry
dWN0IGtzZWdycCAqa2c7Ci0KLQlrZyA9IHRkLT50ZF9rc2VncnA7CiAJbXR4X2Fzc2VydCgmR2lh
bnQsIE1BX05PVE9XTkVEKTsKLQltdHhfbG9ja19zcGluKCZzY2hlZF9sb2NrKTsKLQlzY2hlZF9w
cmlvKHRkLCBQUklfTUFYX1RJTUVTSEFSRSk7Ci0JbWlfc3dpdGNoKFNXX1ZPTCwgTlVMTCk7Ci0J
bXR4X3VubG9ja19zcGluKCZzY2hlZF9sb2NrKTsKLQl0ZC0+dGRfcmV0dmFsWzBdID0gMDsKKwlz
Y2hlZF9yZWxpbnF1aXNoKHRkKTsKIAlyZXR1cm4gKDApOwogfQpJbmRleDogLi9zeXMvY29uZi9v
cHRpb25zCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9ob21lL25jdnMvc3JjL3N5cy9jb25mL29wdGlv
bnMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNTEwLjIuMTkKZGlmZiAtdSAtcjEuNTEwLjIuMTkg
b3B0aW9ucwotLS0gLi9zeXMvY29uZi9vcHRpb25zCTIgU2VwIDIwMDYgMTM6MTI6MDggLTAwMDAJ
MS41MTAuMi4xOQorKysgLi9zeXMvY29uZi9vcHRpb25zCTI0IE9jdCAyMDA2IDA5OjEzOjE5IC0w
MDAwCkBAIC0xMjcsNiArMTI3LDcgQEAKIFBVQ19GQVNUSU5UUglvcHRfcHVjLmgKIFFVT1RBCiBT
Q0hFRF80QlNECW9wdF9zY2hlZC5oCitTQ0hFRF9DT1JFCW9wdF9zY2hlZC5oCiBTQ0hFRF9VTEUJ
b3B0X3NjaGVkLmgKIFNIT1dfQlVTWUJVRlMKIFNMRUVQUVVFVUVfUFJPRklMSU5HCkluZGV4OiAu
L3N5cy9jb25mL2ZpbGVzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9ob21lL25jdnMvc3JjL3N5cy9j
b25mL2ZpbGVzLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEwMzEuMi40NQpkaWZmIC11IC1yMS4x
MDMxLjIuNDUgZmlsZXMKLS0tIC4vc3lzL2NvbmYvZmlsZXMJMjEgT2N0IDIwMDYgMDU6Mjg6NTAg
LTAwMDAJMS4xMDMxLjIuNDUKKysrIC4vc3lzL2NvbmYvZmlsZXMJMjQgT2N0IDIwMDYgMDk6MTM6
NTIgLTAwMDAKQEAgLTEsNCArMSw0IEBACi0jICRGcmVlQlNEOiBzcmMvc3lzL2NvbmYvZmlsZXMs
diAxLjEwMzEuMi40NSAyMDA2LzEwLzIxIDA1OjI4OjUwIHNjb3R0bCBFeHAgJAorIyAkRnJlZUJT
RDogc3JjL3N5cy9jb25mL2ZpbGVzLHYgMS4xMDMxLjIuNDQgMjAwNi8xMC8xNiAwNTozNjoxOSBk
ZWxwaGlqIEV4cCAkCiAjCiAjIFRoZSBsb25nIGNvbXBpbGUtd2l0aCBhbmQgZGVwZW5kZW5jeSBs
aW5lcyBhcmUgcmVxdWlyZWQgYmVjYXVzZSBvZgogIyBsaW1pdGF0aW9ucyBpbiBjb25maWc6IGJh
Y2tzbGFzaC1uZXdsaW5lIGRvZXNuJ3Qgd29yayBpbiBzdHJpbmdzLCBhbmQKQEAgLTY3MCw3ICs2
NzAsNiBAQAogZGV2L21kL21kLmMJCQlvcHRpb25hbCBtZAogZGV2L21lbS9tZW1kZXYuYwkJb3B0
aW9uYWwgbWVtCiBkZXYvbWZpL21maS5jCQkJb3B0aW9uYWwgbWZpCi1kZXYvbWZpL21maV9kZWJ1
Zy5jCQlvcHRpb25hbCBtZmkKIGRldi9tZmkvbWZpX3BjaS5jCQlvcHRpb25hbCBtZmkgcGNpCiBk
ZXYvbWZpL21maV9kaXNrLmMJCW9wdGlvbmFsIG1maQogZGV2L21maS9tZmlfbGludXguYwkJb3B0
aW9uYWwgbWZpIGNvbXBhdF9saW51eApAQCAtMTMwMiw2ICsxMzAxLDcgQEAKIGtlcm4vbWQ0Yy5j
CQkJb3B0aW9uYWwgbmV0c21iCiBrZXJuL21kNWMuYwkJCXN0YW5kYXJkCiBrZXJuL3NjaGVkXzRi
c2QuYwkJb3B0aW9uYWwgc2NoZWRfNGJzZAora2Vybi9zY2hlZF9jb3JlLmMJCW9wdGlvbmFsIHNj
aGVkX2NvcmUKIGtlcm4vc2NoZWRfdWxlLmMJCW9wdGlvbmFsIHNjaGVkX3VsZQoga2Vybi9zdWJy
X2F1dG9jb25mLmMJCXN0YW5kYXJkCiBrZXJuL3N1YnJfYmxpc3QuYwkJc3RhbmRhcmQKSW5kZXg6
IC4vc3lzL3Bvc2l4NC9rc2NoZWQuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvaG9tZS9uY3ZzL3Ny
Yy9zeXMvcG9zaXg0L2tzY2hlZC5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjI2CmRpZmYgLXUg
LXIxLjI2IGtzY2hlZC5jCi0tLSAuL3N5cy9wb3NpeDQva3NjaGVkLmMJNyBKYW4gMjAwNSAwMjoy
OToxOSAtMDAwMAkxLjI2CisrKyAuL3N5cy9wb3NpeDQva3NjaGVkLmMJMjQgT2N0IDIwMDYgMDk6
MTM6NTkgLTAwMDAKQEAgLTI0Niw5ICsyNDYsNyBAQAogICovCiBpbnQga3NjaGVkX3lpZWxkKHJl
Z2lzdGVyX3QgKnJldCwgc3RydWN0IGtzY2hlZCAqa3NjaGVkKQogewotCW10eF9sb2NrX3NwaW4o
JnNjaGVkX2xvY2spOwotCWN1cnRocmVhZC0+dGRfZmxhZ3MgfD0gVERGX05FRURSRVNDSEVEOwot
CW10eF91bmxvY2tfc3Bpbigmc2NoZWRfbG9jayk7CisJc2NoZWRfcmVsaW5xdWlzaChjdXJ0aHJl
YWQpOwogCXJldHVybiAwOwogfQogCg==
------=_Part_3894_21344688.1161682297840--



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