Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 15 Apr 2020 11:56:02 +0000
From:      "whu (Wei Hu)" <phabric-noreply@FreeBSD.org>
To:        freebsd-net@freebsd.org
Subject:   [Differential] D24061: Hyper-V socket implementation for FreeBSD guest
Message-ID:  <79d16d788f9a405bf42820916438b2a4@localhost.localdomain>
In-Reply-To: <differential-rev-PHID-DREV-jw7sxemgfjxsdvkov4cn-req@reviews.freebsd.org>
References:  <differential-rev-PHID-DREV-jw7sxemgfjxsdvkov4cn-req@reviews.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help

--b1_79d16d788f9a405bf42820916438b2a4
Content-Type: text/plain; charset = "utf-8"
Content-Transfer-Encoding: base64

d2h1IHVwZGF0ZWQgdGhpcyByZXZpc2lvbiB0byBEaWZmIDcwNTk1Lgp3aHUgZWRpdGVkIHRoZSBz
dW1tYXJ5IG9mIHRoaXMgcmV2aXNpb24uCndodSBhZGRlZCByZXZpZXdlcnM6IGRlY3VpX21pY3Jv
c29mdC5jb20sIGZyZWVic2QtbmV0LWxpc3QuCndodSBhZGRlZCBhIGNvbW1lbnQuCgoKICBPdXQg
Zm9yIGJyb2FkZXIgcmV2aWV3CgpSRVBPU0lUT1JZCiAgclMgRnJlZUJTRCBzcmMgcmVwb3NpdG9y
eQoKQ0hBTkdFUyBTSU5DRSBMQVNUIFVQREFURQogIGh0dHBzOi8vcmV2aWV3cy5mcmVlYnNkLm9y
Zy9EMjQwNjE/dnM9Njk0NzgmaWQ9NzA1OTUKCkNIQU5HRVMgU0lOQ0UgTEFTVCBBQ1RJT04KICBo
dHRwczovL3Jldmlld3MuZnJlZWJzZC5vcmcvRDI0MDYxL25ldy8KClJFVklTSU9OIERFVEFJTAog
IGh0dHBzOi8vcmV2aWV3cy5mcmVlYnNkLm9yZy9EMjQwNjEKCkFGRkVDVEVEIEZJTEVTCiAgc3lz
L2NvbmYvZmlsZXMueDg2CiAgc3lzL2Rldi9oeXBlcnYvaHZzb2NrL2h2X3NvY2suYwogIHN5cy9k
ZXYvaHlwZXJ2L2h2c29jay9odl9zb2NrLmgKICBzeXMvZGV2L2h5cGVydi9pbmNsdWRlL3ZtYnVz
LmgKICBzeXMvZGV2L2h5cGVydi92bWJ1cy92bWJ1cy5jCiAgc3lzL2Rldi9oeXBlcnYvdm1idXMv
dm1idXNfYnIuYwogIHN5cy9kZXYvaHlwZXJ2L3ZtYnVzL3ZtYnVzX2JydmFyLmgKICBzeXMvZGV2
L2h5cGVydi92bWJ1cy92bWJ1c19jaGFuLmMKICBzeXMvZGV2L2h5cGVydi92bWJ1cy92bWJ1c19j
aGFudmFyLmgKICBzeXMvZGV2L2h5cGVydi92bWJ1cy92bWJ1c19yZWcuaAogIHN5cy9tb2R1bGVz
L2h5cGVydi9NYWtlZmlsZQogIHN5cy9tb2R1bGVzL2h5cGVydi9odnNvY2svTWFrZWZpbGUKICBz
eXMvc3lzL3NvY2tldC5oCgpFTUFJTCBQUkVGRVJFTkNFUwogIGh0dHBzOi8vcmV2aWV3cy5mcmVl
YnNkLm9yZy9zZXR0aW5ncy9wYW5lbC9lbWFpbHByZWZlcmVuY2VzLwoKVG86IHdodSwgZGVjdWlf
bWljcm9zb2Z0LmNvbSwgZnJlZWJzZC1uZXQtbGlzdApDYzogZ3JlZ191bnJlbGVudGluZy50ZWNo
bm9sb2d5LCBpbXAK

--b1_79d16d788f9a405bf42820916438b2a4
Content-Type: text/x-patch; charset=utf-8; name="D24061.70595.patch"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="D24061.70595.patch"

ZGlmZiAtLWdpdCBhL3N5cy9zeXMvc29ja2V0LmggYi9zeXMvc3lzL3NvY2tldC5oCi0tLSBhL3N5
cy9zeXMvc29ja2V0LmgKKysrIGIvc3lzL3N5cy9zb2NrZXQuaApAQCAtMjY1LDcgKzI2NSw4IEBA
CiAjZGVmaW5lCUFGX0lFRUU4MDIxMQkzNwkJLyogSUVFRSA4MDIuMTEgcHJvdG9jb2wgKi8KICNk
ZWZpbmUJQUZfSU5FVF9TRFAJNDAJCS8qIE9GRUQgU29ja2V0IERpcmVjdCBQcm90b2NvbCBpcHY0
ICovCiAjZGVmaW5lCUFGX0lORVQ2X1NEUAk0MgkJLyogT0ZFRCBTb2NrZXQgRGlyZWN0IFByb3Rv
Y29sIGlwdjYgKi8KLSNkZWZpbmUJQUZfTUFYCQk0MgorI2RlZmluZQlBRl9IWVBFUlYJNDMJCS8q
IEh5cGVyViBzb2NrZXRzICovCisjZGVmaW5lCUFGX01BWAkJNDMKIC8qCiAgKiBXaGVuIGFsbG9j
YXRpbmcgYSBuZXcgQUZfIGNvbnN0YW50LCBwbGVhc2Ugb25seSBhbGxvY2F0ZQogICogZXZlbiBu
dW1iZXJlZCBjb25zdGFudHMgZm9yIEZyZWVCU0QgdW50aWwgMTM0IGFzIG9kZCBudW1iZXJlZCBB
Rl8KQEAgLTI3Myw3ICsyNzQsNiBAQAogICovCiAjZGVmaW5lIEFGX1ZFTkRPUjAwIDM5CiAjZGVm
aW5lIEFGX1ZFTkRPUjAxIDQxCi0jZGVmaW5lIEFGX1ZFTkRPUjAyIDQzCiAjZGVmaW5lIEFGX1ZF
TkRPUjAzIDQ1CiAjZGVmaW5lIEFGX1ZFTkRPUjA0IDQ3CiAjZGVmaW5lIEFGX1ZFTkRPUjA1IDQ5
CmRpZmYgLS1naXQgYS9zeXMvbW9kdWxlcy9oeXBlcnYvaHZzb2NrL01ha2VmaWxlIGIvc3lzL21v
ZHVsZXMvaHlwZXJ2L2h2c29jay9NYWtlZmlsZQotLS0gYS9zeXMvbW9kdWxlcy9oeXBlcnYvaHZz
b2NrL01ha2VmaWxlCisrKyBiL3N5cy9tb2R1bGVzL2h5cGVydi9odnNvY2svTWFrZWZpbGUKQEAg
LTAsMCArMSwxMyBAQAorIyAkRnJlZUJTRCQKKworLlBBVEg6ICAke1NSQ1RPUH0vc3lzL2Rldi9o
eXBlcnYvaHZzb2NrCisKK0tNT0Q9CWh2X3NvY2sKK1NSQ1M9CWh2X3NvY2suYworU1JDUys9CWh2
X3NvY2suaAorCitDRkxBR1MrPSAtSSR7U1JDVE9QfS9zeXMvZGV2L2h5cGVydi9pbmNsdWRlCVwK
KwkgLUkke1NSQ1RPUH0vc3lzL2Rldi9oeXBlcnYvdm1idXMJXAorCSAtSSR7U1JDVE9QfS9zeXMv
ZGV2L2h5cGVydi9odnNvY2sKKworLmluY2x1ZGUgPGJzZC5rbW9kLm1rPgpkaWZmIC0tZ2l0IGEv
c3lzL21vZHVsZXMvaHlwZXJ2L01ha2VmaWxlIGIvc3lzL21vZHVsZXMvaHlwZXJ2L01ha2VmaWxl
Ci0tLSBhL3N5cy9tb2R1bGVzL2h5cGVydi9NYWtlZmlsZQorKysgYi9zeXMvbW9kdWxlcy9oeXBl
cnYvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjICRGcmVlQlNEJAogCi1TVUJESVIgPSB2bWJ1
cyBuZXR2c2Mgc3RvcnZzYyB1dGlsaXRpZXMKK1NVQkRJUiA9IHZtYnVzIG5ldHZzYyBzdG9ydnNj
IHV0aWxpdGllcyBodnNvY2sKIAogLmluY2x1ZGUgPGJzZC5zdWJkaXIubWs+CmRpZmYgLS1naXQg
YS9zeXMvZGV2L2h5cGVydi92bWJ1cy92bWJ1c19yZWcuaCBiL3N5cy9kZXYvaHlwZXJ2L3ZtYnVz
L3ZtYnVzX3JlZy5oCi0tLSBhL3N5cy9kZXYvaHlwZXJ2L3ZtYnVzL3ZtYnVzX3JlZy5oCisrKyBi
L3N5cy9kZXYvaHlwZXJ2L3ZtYnVzL3ZtYnVzX3JlZy5oCkBAIC0xMjcsNyArMTI3LDU0IEBACiAJ
ICovCiAJdm9sYXRpbGUgdWludDMyX3QJYnJfaW1hc2s7CiAKLQl1aW50OF90CQkJYnJfcnN2ZFs0
MDg0XTsKKwkvKgorCSAqIFdTMjAxMi9XaW44IGFuZCBsYXRlciB2ZXJzaW9ucyBvZiBIeXBlci1W
IGltcGxlbWVudCBpbnRlcnJ1cHQKKwkgKiBkcml2ZW4gZmxvdyBtYW5hZ2VtZW50LiBUaGUgZmVh
dHVyZSBiaXQgZmVhdF9wZW5kaW5nX3NuZF9zegorCSAqIGlzIHNldCBieSB0aGUgaG9zdCBvbiB0
aGUgaG9zdC0+Z3Vlc3QgYnVmZmVyIHJpbmcsIGFuZCBieSB0aGUKKwkgKiBndWVzdCBvbiB0aGUg
Z3Vlc3QtPmhvc3QgYnVmZmVyIHJpbmcuCisJICoKKwkgKiBUaGUgbWVhbmluZyBvZiB0aGUgZmVh
dHVyZSBiaXQgaXMgYSBiaXQgY29tcGxleCBpbiB0aGF0IGl0IGhhcworCSAqIHNlbWFudGljcyB0
aGF0IGFwcGx5IHRvIGJvdGggYnVmZmVyIHJpbmdzLiAgSWYgdGhlIGd1ZXN0IHNldHMKKwkgKiB0
aGUgZmVhdHVyZSBiaXQgaW4gdGhlIGd1ZXN0LT5ob3N0IGJ1ZmZlciByaW5nLCB0aGUgZ3Vlc3Qg
aXMKKwkgKiB0ZWxsaW5nIHRoZSBob3N0IHRoYXQ6CisJICogMSkgSXQgd2lsbCBzZXQgdGhlIGJy
X3BlbmRpbmdfc25kX3N6IGZpZWxkIGluIHRoZSBndWVzdC0+aG9zdCBidWZmZXIKKwkgKiAgICBy
aW5nIHdoZW4gaXQgaXMgd2FpdGluZyBmb3Igc3BhY2UgdG8gYmVjb21lIGF2YWlsYWJsZSwgYW5k
CisJICogMikgSXQgd2lsbCByZWFkIHRoZSBwZW5kaW5nX3NlbmRfc3ogZmllbGQgaW4gdGhlIGhv
c3QtPmd1ZXN0CisJICogICAgcmluZyBidWZmZXIgYW5kIGludGVycnVwdCB0aGUgaG9zdCB3aGVu
IGl0IGZyZWVzIGVub3VnaCBzcGFjZQorCSAqCisJICogU2ltaWxhcmx5LCBpZiB0aGUgaG9zdCBz
ZXRzIHRoZSBmZWF0dXJlIGJpdCBpbiB0aGUgaG9zdC0+Z3Vlc3QKKwkgKiByaW5nIGJ1ZmZlciwg
dGhlIGhvc3QgaXMgdGVsbGluZyB0aGUgZ3Vlc3QgdGhhdDoKKwkgKiAxKSBJdCB3aWxsIHNldCB0
aGUgcGVuZGluZ19zZW5kX3N6IGZpZWxkIGluIHRoZSBob3N0LT5ndWVzdCByaW5nCisJICogICAg
YnVmZmVyIHdoZW4gaXQgaXMgd2FpdGluZyBmb3Igc3BhY2UgdG8gYmVjb21lIGF2YWlsYWJsZSwg
YW5kCisJICogMikgSXQgd2lsbCByZWFkIHRoZSBwZW5kaW5nX3NlbmRfc3ogZmllbGQgaW4gdGhl
IGd1ZXN0LT5ob3N0CisJICogICAgcmluZyBidWZmZXIgYW5kIGludGVycnVwdCB0aGUgZ3Vlc3Qg
d2hlbiBpdCBmcmVlcyBlbm91Z2ggc3BhY2UKKwkgKgorCSAqIElmIGVpdGhlciB0aGUgZ3Vlc3Qg
b3IgaG9zdCBkb2VzIG5vdCBzZXQgdGhlIGZlYXR1cmUgYml0IHRoYXQgaXQKKwkgKiBvd25zLCB0
aGF0IGd1ZXN0IG9yIGhvc3QgbXVzdCBkbyBwb2xsaW5nIGlmIGl0IGVuY291bnRlcnMgYSBmdWxs
CisJICogcmluZyBidWZmZXIsIGFuZCBub3Qgc2lnbmFsIHRoZSBvdGhlciBlbmQgd2l0aCBhbiBp
bnRlcnJ1cHQuCisJICovCisJdm9sYXRpbGUgdWludDMyX3QJYnJfcGVuZGluZ19zbmRfc3o7CisJ
dWludDMyX3QJCWJyX3JzdmQxWzEyXTsKKwl1bmlvbgl7CisJCXN0cnVjdCB7CisJCQl1aW50MzJf
dCBmZWF0X3BlbmRpbmdfc25kX3N6OjE7CisJCX07CisJCXVpbnQzMl90IHZhbHVlOworCX0gYnJf
ZmVhdHVyZV9iaXRzOworCisJLyogUGFkZGluZyB0byBQQUdFX1NJWkUgKi8KKwl1aW50OF90CQkJ
YnJfcnN2ZDJbNDAyMF07CisKKwkvKgorCSAqIFRvdGFsIGd1ZXN0IHRvIGhvc3QgaW50ZXJydXB0
IGNvdW50CisJICogLSBGb3IgcnggcmluZywgdGhpcyBjb3VudHMgdGhlIGd1ZXN0IHNpZ25hbGlu
ZyBob3N0IHdoZW4gdGhpcyByeAorCSAqIHJpbmcgY2hhbmdpbmcgZnJvbSBmdWxsIHRvIG5vdCBm
dWxsLgorCSAqCisJICogLSBGb3IgdHggcmluZywgdGhpcyBjb3VudHMgdGhlIGd1ZXN0IHNpZ25h
bGluZyBob3N0IHdoZW4gdGhpcyB0eAorCSAqIHJpbmcgY2hhbmdpbmcgZnJvbSBlbXB0eSB0byBu
b24gZW1wdHkuCisJICovCisJdWludDY0X3QJCWJyX2cyaF9pbnRyX2NudDsKKwogCXVpbnQ4X3QJ
CQlicl9kYXRhW107CiB9IF9fcGFja2VkOwogQ1RBU1NFUlQoc2l6ZW9mKHN0cnVjdCB2bWJ1c19i
dWZyaW5nKSA9PSBQQUdFX1NJWkUpOwpAQCAtMTk2LDcgKzI0MywxNCBAQAogI2RlZmluZSBWTUJV
U19DSEFOTVNHX1RZUEVfQ09OTkVDVAkJMTQJLyogUkVRICovCiAjZGVmaW5lIFZNQlVTX0NIQU5N
U0dfVFlQRV9DT05ORUNUX1JFU1AJCTE1CS8qIFJFU1AgKi8KICNkZWZpbmUgVk1CVVNfQ0hBTk1T
R19UWVBFX0RJU0NPTk5FQ1QJCTE2CS8qIFJFUSAqLwotI2RlZmluZSBWTUJVU19DSEFOTVNHX1RZ
UEVfTUFYCQkJMjIKKyNkZWZpbmUgVk1CVVNfQ0hBTk1TR19UWVBFXzE3CQkJMTcKKyNkZWZpbmUg
Vk1CVVNfQ0hBTk1TR19UWVBFXzE4CQkJMTgKKyNkZWZpbmUgVk1CVVNfQ0hBTk1TR19UWVBFXzE5
CQkJMTkKKyNkZWZpbmUgVk1CVVNfQ0hBTk1TR19UWVBFXzIwCQkJMjAKKyNkZWZpbmUgVk1CVVNf
Q0hBTk1TR19UWVBFX1RMX0NPTk4JCTIxCS8qIFJFUSAqLworI2RlZmluZSBWTUJVU19DSEFOTVNH
X1RZUEVfMjIJCQkyMgorI2RlZmluZSBWTUJVU19DSEFOTVNHX1RZUEVfVExfUkVTVUxUCQkyMwkv
KiBSRVNQICovCisjZGVmaW5lIFZNQlVTX0NIQU5NU0dfVFlQRV9NQVgJCQkyNAogCiBzdHJ1Y3Qg
dm1idXNfY2hhbm1zZ19oZHIgewogCXVpbnQzMl90CWNobV90eXBlOwkvKiBWTUJVU19DSEFOTVNH
X1RZUEVfICovCkBAIC0yMjksNiArMjgzLDE1IEBACiAJc3RydWN0IHZtYnVzX2NoYW5tc2dfaGRy
IGNobV9oZHI7CiB9IF9fcGFja2VkOwogCisvKiBWTUJVU19DSEFOTVNHX1RZUEVfVExfQ09OTiAq
LworLyogSHlwZXItViBzb2NrZXQgZ3Vlc3QgY29ubmVjdCByZXF1ZXN0ICovCitzdHJ1Y3Qgdm1i
dXNfY2hhbm1zZ190bF9jb25uZWN0IHsKKwlzdHJ1Y3Qgdm1idXNfY2hhbm1zZ19oZHIgY2htX2hk
cjsKKwlzdHJ1Y3QgaHlwZXJ2X2d1aWQgZ3Vlc3RfZW5kcG9pbnRfaWQ7CisJc3RydWN0IGh5cGVy
dl9ndWlkIGhvc3Rfc2VydmljZV9pZDsKK30gX19wYWNrZWQ7CisKKwogLyogVk1CVVNfQ0hBTk1T
R19UWVBFX0NIT1BFTiAqLwogc3RydWN0IHZtYnVzX2NoYW5tc2dfY2hvcGVuIHsKIAlzdHJ1Y3Qg
dm1idXNfY2hhbm1zZ19oZHIgY2htX2hkcjsKQEAgLTMxMCw2ICszNzMsMTIgQEAKIAl1aW50MzJf
dAljaG1fY2hhbmlkOwogfSBfX3BhY2tlZDsKIAorLyogU2l6ZSBvZiB0aGUgdXNlciBkZWZpbmVk
IGRhdGEgYnVmZmVyIGZvciBub24tcGlwZSBvZmZlcnMgKi8KKyNkZWZpbmUgVk1CVVNfQ0hBTk1T
R19DSE9GRkVSX1VEQVRBX1NJWkUJCTEyMAorCisvKiBTaXplIG9mIHRoZSB1c2VyIGRlZmluZWQg
ZGF0YSBidWZmZXIgZm9yIHBpcGUgb2ZmZXJzLiAqLworI2RlZmluZSBWTUJVU19DSEFOTVNHX0NI
T0ZGRVJfVURBVEFfUElQRV9TSVpFCQkxMTYKKwogLyogVk1CVVNfQ0hBTk1TR19UWVBFX0NIT0ZG
RVIgKi8KIHN0cnVjdCB2bWJ1c19jaGFubXNnX2Nob2ZmZXIgewogCXN0cnVjdCB2bWJ1c19jaGFu
bXNnX2hkciBjaG1faGRyOwpAQCAtMzIwLDcgKzM4OSwyNiBAQAogCXVpbnQzMl90CWNobV9zdnJj
dHhfc3o7CiAJdWludDE2X3QJY2htX2NoZmxhZ3M7CiAJdWludDE2X3QJY2htX21taW9fc3o7CS8q
IHVuaXQ6IE1CICovCi0JdWludDhfdAkJY2htX3VkYXRhWzEyMF07CisKKwl1bmlvbiB7CisJCS8q
IE5vbi1waXBlcyAqLworCQlzdHJ1Y3QgeworCQkJdWludDhfdAl1c2VyX2RlZltWTUJVU19DSEFO
TVNHX0NIT0ZGRVJfVURBVEFfU0laRV07CisJCX0gc3RkOworCQkvKgorCQkgKiBQaXBlczoKKwkJ
ICogRm9yIGludGVncmF0ZWQgcGlwZSBwcm90b2NvbCwgd2hpY2ggaXMgaW1wbGVtZW50ZWQgb24K
KwkJICogdG9wIG9mIHN0YW5kYXJkIHVzZXItZGVmaW5lZCBkYXRhLiBQaXBlIGNsaWVudHMgaGF2
ZQorCQkgKiBWTUJVU19DSEFOTVNHX0NIT0ZGRVJfVURBVEFfUElQRV9TSVpFIGJ5dGVzIGxlZnQg
Zm9yCisJCSAqIHRoZWlyIG93biB1c2VyLgorCQkgKi8KKwkJc3RydWN0IHsKKwkJCXVpbnQzMl90
IHBpcGVfbW9kZTsKKwkJCXVpbnQ4X3QKKwkJCSAgICB1c2VyX2RlZltWTUJVU19DSEFOTVNHX0NI
T0ZGRVJfVURBVEFfUElQRV9TSVpFXTsKKwkJfSBwaXBlOworCX0gY2htX3VkYXRhOworCiAJdWlu
dDE2X3QJY2htX3N1YmlkeDsKIAl1aW50MTZfdAljaG1fcnN2ZDsKIAl1aW50MzJfdAljaG1fY2hh
bmlkOwpAQCAtMzMxLDYgKzQxOSw5IEBACiB9IF9fcGFja2VkOwogQ1RBU1NFUlQoc2l6ZW9mKHN0
cnVjdCB2bWJ1c19jaGFubXNnX2Nob2ZmZXIpIDw9IFZNQlVTX01TR19EU0laRV9NQVgpOwogCisv
KiBTZXJ2ZXIgRmxhZyAqLworI2RlZmluZSBWTUJVU19DSEFOX1RMTlBJX1BST1ZJREVSX09GRkVS
CQkJMHgyMDAwCisKICNkZWZpbmUgVk1CVVNfQ0hPRkZFUl9GTEFHMV9IQVNNTkYJMHgwMQogCiAj
ZW5kaWYJLyogIV9WTUJVU19SRUdfSF8gKi8KZGlmZiAtLWdpdCBhL3N5cy9kZXYvaHlwZXJ2L3Zt
YnVzL3ZtYnVzX2NoYW52YXIuaCBiL3N5cy9kZXYvaHlwZXJ2L3ZtYnVzL3ZtYnVzX2NoYW52YXIu
aAotLS0gYS9zeXMvZGV2L2h5cGVydi92bWJ1cy92bWJ1c19jaGFudmFyLmgKKysrIGIvc3lzL2Rl
di9oeXBlcnYvdm1idXMvdm1idXNfY2hhbnZhci5oCkBAIC0xNDksNiArMTQ5LDEyIEBACiAKIAlp
bnQJCQkJY2hfcmVmczsKIAorCS8qCisJICogVGhlc2UgYXJlIGZvciBIeXBlclYgc29ja2V0IGNo
YW5uZWwgb25seQorCSAqLworCWJvb2wJCQkJY2hfaXNfaHZzOworCXVpbnQ4X3QJCQkJY2hfaHZz
X2Nvbm5fZnJvbV9ob3N0OworCiAJc3RydWN0IHN5c2N0bF9jdHhfbGlzdAkJY2hfc3lzY3RsX2N0
eDsKIH0gX19hbGlnbmVkKENBQ0hFX0xJTkVfU0laRSk7CiAKZGlmZiAtLWdpdCBhL3N5cy9kZXYv
aHlwZXJ2L3ZtYnVzL3ZtYnVzX2NoYW4uYyBiL3N5cy9kZXYvaHlwZXJ2L3ZtYnVzL3ZtYnVzX2No
YW4uYwotLS0gYS9zeXMvZGV2L2h5cGVydi92bWJ1cy92bWJ1c19jaGFuLmMKKysrIGIvc3lzL2Rl
di9oeXBlcnYvdm1idXMvdm1idXNfY2hhbi5jCkBAIC0xMjcsMTAgKzEyNywxMSBAQAogfTsKIAog
LyoKLSAqIE5vdGlmeSBob3N0IHRoYXQgdGhlcmUgYXJlIGRhdGEgcGVuZGluZyBvbiBvdXIgVFgg
YnVmcmluZy4KKyAqIE5vdGlmeSBob3N0IHRoYXQgdGhlcmUgYXJlIGRhdGEgcGVuZGluZyBvbiBv
dXIgVFggYnVmcmluZyBvcgorICogd2UgaGF2ZSBwdXQgc29tZSBkYXRhIG9uIHRoZSBUWCBidWZy
aW5nLgogICovCiBzdGF0aWMgX19pbmxpbmUgdm9pZAotdm1idXNfY2hhbl9zaWduYWxfdHgoY29u
c3Qgc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW4pCit2bWJ1c19jaGFuX3NpZ25hbChjb25zdCBz
dHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbikKIHsKIAlhdG9taWNfc2V0X2xvbmcoY2hhbi0+Y2hf
ZXZ0ZmxhZywgY2hhbi0+Y2hfZXZ0ZmxhZ19tYXNrKTsKIAlpZiAoY2hhbi0+Y2hfdHhmbGFncyAm
IFZNQlVTX0NIQU5fVFhGX0hBU01ORikKQEAgLTEzOSw2ICsxNDAsMjIgQEAKIAkJaHlwZXJjYWxs
X3NpZ25hbF9ldmVudChjaGFuLT5jaF9tb25wcm1fZG1hLmh2X3BhZGRyKTsKIH0KIAorc3RhdGlj
IF9faW5saW5lIHZvaWQKK3ZtYnVzX2NoYW5fc2lnbmFsX3R4KHN0cnVjdCB2bWJ1c19jaGFubmVs
ICpjaGFuKQoreworCWNoYW4tPmNoX3R4YnIudHhicl9pbnRyY250ICsrOworCisJdm1idXNfY2hh
bl9zaWduYWwoY2hhbik7Cit9CisKK3N0YXRpYyBfX2lubGluZSB2b2lkCit2bWJ1c19jaGFuX3Np
Z25hbF9yeChzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbikKK3sKKwljaGFuLT5jaF9yeGJyLnJ4
YnJfaW50cmNudCArKzsKKworCXZtYnVzX2NoYW5fc2lnbmFsKGNoYW4pOworfQorCiBzdGF0aWMg
dm9pZAogdm1idXNfY2hhbl9pbnNfcHJpbGlzdChzdHJ1Y3Qgdm1idXNfc29mdGMgKnNjLCBzdHJ1
Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbikKIHsKQEAgLTEwMTIsNyArMTAyOSw2MCBAQAogCXRhc2tx
dWV1ZV9kcmFpbihjaGFuLT5jaF90cSwgJmNoYW4tPmNoX3Rhc2spOwogfQogCit1aW50MzJfdAor
dm1idXNfY2hhbl93cml0ZV9hdmFpbGFibGUoc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW4pCit7
CisJcmV0dXJuICh2bWJ1c190eGJyX2F2YWlsYWJsZSgmY2hhbi0+Y2hfdHhicikpOworfQorCiti
b29sCit2bWJ1c19jaGFuX3dyaXRlX3NpZ25hbChzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbiwK
KyAgICBpbnQzMl90IG1pbl9zaWduYWxfc2l6ZSkKK3sKKwlpZiAobWluX3NpZ25hbF9zaXplID49
IDAgJiYKKwkgICAgdm1idXNfY2hhbl93cml0ZV9hdmFpbGFibGUoY2hhbikgPiBtaW5fc2lnbmFs
X3NpemUpIHsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCWlmICghdm1idXNfdHhicl9nZXRfaW1h
c2soJmNoYW4tPmNoX3R4YnIpKSB7CisJCS8qIHR4YnIgaW1hc2sgaXMgbm90IHNldCwgc2lnbmFs
IHRoZSByZWFkZXIgKi8KKwkJdm1idXNfY2hhbl9zaWduYWxfdHgoY2hhbik7CisJCXJldHVybiB0
cnVlOworCX0KKworCXJldHVybiBmYWxzZTsKK30KKwordm9pZAordm1idXNfY2hhbl9zZXRfcGVu
ZGluZ19zZW5kX3NpemUoc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW4sCisgICAgdWludDMyX3Qg
c2l6ZSkKK3sKKwlpZiAoY2hhbikKKwkJdm1idXNfdHhicl9zZXRfcGVuZGluZ19zbmRfc3ooJmNo
YW4tPmNoX3R4YnIsIHNpemUpOworfQorCiBpbnQKK3ZtYnVzX2NoYW5faW92X3NlbmQoc3RydWN0
IHZtYnVzX2NoYW5uZWwgKmNoYW4sCisgICAgY29uc3Qgc3RydWN0IGlvdmVjIGlvdltdLCBpbnQg
aW92bGVuLAorICAgIHZtYnVzX2JyX2NvcHlfY2FsbGJhY2tfdCBjYiwgdm9pZCAqY2JhcmcpCit7
CisJaW50IGVycm9yOworCWJvb2xlYW5fdCBzZW5kX2V2dDsKKworCWlmIChpb3ZsZW4gPT0gMCkK
KwkJcmV0dXJuICgwKTsKKworCWVycm9yID0gdm1idXNfdHhicl93cml0ZV9jYWxsKCZjaGFuLT5j
aF90eGJyLCBpb3YsIGlvdmxlbiwKKwkgICAgY2IsIGNiYXJnLCAmc2VuZF9ldnQpOworCisJaWYg
KCFlcnJvciAmJiBzZW5kX2V2dCkgeworCQl2bWJ1c19jaGFuX3NpZ25hbF90eChjaGFuKTsKKwl9
CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKK2ludAogdm1idXNfY2hhbl9zZW5kKHN0cnVjdCB2bWJ1
c19jaGFubmVsICpjaGFuLCB1aW50MTZfdCB0eXBlLCB1aW50MTZfdCBmbGFncywKICAgICB2b2lk
ICpkYXRhLCBpbnQgZGxlbiwgdWludDY0X3QgeGFjdGlkKQogewpAQCAtMTIxMSw2ICsxMjgxLDc4
IEBACiAJcmV0dXJuICgwKTsKIH0KIAordWludDMyX3QKK3ZtYnVzX2NoYW5fcmVhZF9hdmFpbGFi
bGUoc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW4pCit7CisJcmV0dXJuICh2bWJ1c19yeGJyX2F2
YWlsYWJsZSgmY2hhbi0+Y2hfcnhicikpOworfQorCisvKgorICogVGhpcyByb3V0aW5lIGRvZXM6
CisgKiAgICAgLSBBZHZhbmNlIHRoZSBjaGFubmVsIHJlYWQgaW5kZXggZm9yICdhZHZhbmNlJyBi
eXRlcworICogICAgIC0gQ29weSBkYXRhX2xlbiBieXRlcyBpbiB0byB0aGUgYnVmZmVyIHBvaW50
ZWQgYnkgJ2RhdGEnCisgKiBSZXR1cm4gMCBpZiBvcGVyYXRpb24gc3VjY2VlZC4gRUFHQUlOIGlm
IG9wZXJhdGlvbnMgaWYgZmFpbGVkLgorICogSWYgZmFpbGVkLCB0aGUgYnVmZmVyIHBvaW50ZWQg
YnkgJ2RhdGEnIGlzIGludGFjdCwgYW5kIHRoZQorICogY2hhbm5lbCByZWFkIGluZGV4IGlzIG5v
dCBhZHZhbmNlZCBhdCBhbGwuCisgKi8KK2ludAordm1idXNfY2hhbl9yZWN2X3BlZWsoc3RydWN0
IHZtYnVzX2NoYW5uZWwgKmNoYW4sCisgICAgdm9pZCAqZGF0YSwgaW50IGRhdGFfbGVuLCB1aW50
MzJfdCBhZHZhbmNlKQoreworCWludCBlcnJvcjsKKwlib29sZWFuX3Qgc2lnX2V2ZW50OworCisJ
aWYgKGRhdGEgPT0gTlVMTCB8fCBkYXRhX2xlbiA8PSAwKQorCQlyZXR1cm4gKEVJTlZBTCk7CisK
KwllcnJvciA9IHZtYnVzX3J4YnJfaWR4YWR2X3BlZWsoJmNoYW4tPmNoX3J4YnIsCisJICAgIGRh
dGEsIGRhdGFfbGVuLCBhZHZhbmNlLCAmc2lnX2V2ZW50KTsKKworCWlmICghZXJyb3IgJiYgc2ln
X2V2ZW50KSB7CisJCXZtYnVzX2NoYW5fc2lnbmFsX3J4KGNoYW4pOworCX0KKworCXJldHVybiAo
ZXJyb3IpOworfQorCisvKgorICogVGhpcyByb3V0aW5lIGRvZXM6CisgKiAgICAgLSBBZHZhbmNl
IHRoZSBjaGFubmVsIHJlYWQgaW5kZXggZm9yICdhZHZhbmNlJyBieXRlcworICovCitpbnQKK3Zt
YnVzX2NoYW5fcmVjdl9pZHhhZHYoc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW4sIHVpbnQzMl90
IGFkdmFuY2UpCit7CisJaW50IGVycm9yOworCWJvb2xlYW5fdCBzaWdfZXZlbnQ7CisKKwlpZiAo
YWR2YW5jZSA9PSAwKQorCQlyZXR1cm4gKEVJTlZBTCk7CisKKwllcnJvciA9IHZtYnVzX3J4YnJf
aWR4YWR2KCZjaGFuLT5jaF9yeGJyLCBhZHZhbmNlLCAmc2lnX2V2ZW50KTsKKworCWlmICghZXJy
b3IgJiYgc2lnX2V2ZW50KSB7CisJCXZtYnVzX2NoYW5fc2lnbmFsX3J4KGNoYW4pOworCX0KKwor
CXJldHVybiAoZXJyb3IpOworfQorCisKKy8qCisgKiBDYWxsZXIgc2hvdWxkIGhvbGQgaXRzIG93
biBsb2NrIHRvIHNlcmlhbGl6ZSB0aGUgcmluZyBidWZmZXIKKyAqIGNvcHkuCisgKi8KK2ludAor
dm1idXNfY2hhbl9yZWN2X3BlZWtfY2FsbChzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbiwgaW50
IGRhdGFfbGVuLAorICAgIHVpbnQzMl90IHNraXAsIHZtYnVzX2JyX2NvcHlfY2FsbGJhY2tfdCBj
Yiwgdm9pZCAqY2JhcmcpCit7CisJaWYgKCFjaGFuIHx8IGRhdGFfbGVuIDw9IDAgfHwgY2IgPT0g
TlVMTCkKKwkJcmV0dXJuIChFSU5WQUwpOworCisJcmV0dXJuICh2bWJ1c19yeGJyX3BlZWtfY2Fs
bCgmY2hhbi0+Y2hfcnhiciwgZGF0YV9sZW4sIHNraXAsCisJICAgIGNiLCBjYmFyZykpOworfQor
CiBzdGF0aWMgdm9pZAogdm1idXNfY2hhbl90YXNrKHZvaWQgKnhjaGFuLCBpbnQgcGVuZGluZyBf
X3VudXNlZCkKIHsKQEAgLTE3MzIsNiArMTg3NCwyNSBAQAogCQkgICAgMSA8PCAob2ZmZXItPmNo
bV9tb250cmlnICUgVk1CVVNfTU9OVFJJR19MRU4pOwogCX0KIAorCWlmIChvZmZlci0+Y2htX2No
ZmxhZ3MgJiBWTUJVU19DSEFOX1RMTlBJX1BST1ZJREVSX09GRkVSKSB7CisJCS8qIFRoaXMgaXMg
SHlwZXJWIHNvY2tldCBjaGFubmVsICovCisJCWNoYW4tPmNoX2lzX2h2cyA9IHRydWU7CisJCS8q
IFRoZSBmaXJzdCBieXRlICE9IDAgbWVhbnMgdGhlIGhvc3QgaW5pdGlhdGVkIGNvbm5lY3Rpb24u
ICovCisJCWNoYW4tPmNoX2h2c19jb25uX2Zyb21faG9zdCA9CisJCSAgICBvZmZlci0+Y2htX3Vk
YXRhLnBpcGUudXNlcl9kZWZbMF07CisKKwkJaWYgKGJvb3R2ZXJib3NlKSB7CisJCQlkZXZpY2Vf
cHJpbnRmKHNjLT52bWJ1c19kZXYsCisJCQkgICAgImNoYW4ldSBpcyBoeXBlcnYgc29ja2V0IGNo
YW5uZWwgIgorCQkJICAgICJjb25uZWN0ZWQgJXMgaG9zdFxuIiwKKwkJCSAgICBjaGFuLT5jaF9p
ZCwKKwkJCSAgICAoY2hhbi0+Y2hfaHZzX2Nvbm5fZnJvbV9ob3N0ICE9IDApID8KKwkJCSAgICAi
ZnJvbSIgOiAidG8iKTsKKwkJfQorCX0gZWxzZSB7CisJCWNoYW4tPmNoX2lzX2h2cyA9IGZhbHNl
OworCX0KKwogCS8qCiAJICogU2V0dXAgZXZlbnQgZmxhZy4KIAkgKi8KQEAgLTIwNDcsOSArMjIw
OCwzMiBAQAogCQlyZXR1cm4gZmFsc2U7CiB9CiAKLWNvbnN0IHN0cnVjdCBoeXBlcnZfZ3VpZCAq
Ci12bWJ1c19jaGFuX2d1aWRfaW5zdChjb25zdCBzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbikK
K2Jvb2wKK3ZtYnVzX2NoYW5faXNfaHZzKGNvbnN0IHN0cnVjdCB2bWJ1c19jaGFubmVsICpjaGFu
KQogeworCXJldHVybiBjaGFuLT5jaF9pc19odnM7Cit9CisKK2Jvb2wKK3ZtYnVzX2NoYW5faXNf
aHZzX2Nvbm5fZnJvbV9ob3N0KGNvbnN0IHN0cnVjdCB2bWJ1c19jaGFubmVsICpjaGFuKQorewor
CUtBU1NFUlQodm1idXNfY2hhbl9pc19odnMoY2hhbikgPT0gdHJ1ZSwKKwkgICAgKCJOb3QgYSBI
eXBlclYgU29ja2V0IGNoYW5uZWwgJXUiLCBjaGFuLT5jaF9pZCkpOworCWlmIChjaGFuLT5jaF9o
dnNfY29ubl9mcm9tX2hvc3QgIT0gMCkKKwkJcmV0dXJuIHRydWU7CisJZWxzZQorCQlyZXR1cm4g
ZmFsc2U7Cit9CisKK3N0cnVjdCBoeXBlcnZfZ3VpZCAqCit2bWJ1c19jaGFuX2d1aWRfdHlwZShz
dHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbikKK3sKKwlyZXR1cm4gJmNoYW4tPmNoX2d1aWRfdHlw
ZTsKK30KKworc3RydWN0IGh5cGVydl9ndWlkICoKK3ZtYnVzX2NoYW5fZ3VpZF9pbnN0KHN0cnVj
dCB2bWJ1c19jaGFubmVsICpjaGFuKQorewogCXJldHVybiAmY2hhbi0+Y2hfZ3VpZF9pbnN0Owog
fQogCmRpZmYgLS1naXQgYS9zeXMvZGV2L2h5cGVydi92bWJ1cy92bWJ1c19icnZhci5oIGIvc3lz
L2Rldi9oeXBlcnYvdm1idXMvdm1idXNfYnJ2YXIuaAotLS0gYS9zeXMvZGV2L2h5cGVydi92bWJ1
cy92bWJ1c19icnZhci5oCisrKyBiL3N5cy9kZXYvaHlwZXJ2L3ZtYnVzL3ZtYnVzX2JydmFyLmgK
QEAgLTQ0LDYgKzQ0LDEwIEBACiAjZGVmaW5lIHZicl93aW5kZXgJCXZici0+YnJfd2luZGV4CiAj
ZGVmaW5lIHZicl9yaW5kZXgJCXZici0+YnJfcmluZGV4CiAjZGVmaW5lIHZicl9pbWFzawkJdmJy
LT5icl9pbWFzaworI2RlZmluZSB2YnJfcHNuZHN6CQl2YnItPmJyX3BlbmRpbmdfc25kX3N6Cisj
ZGVmaW5lIHZicl9mcHNuZHN6CQl2YnItPmJyX2ZlYXR1cmVfYml0cy5mZWF0X3BlbmRpbmdfc25k
X3N6CisjZGVmaW5lIHZicl9mdmFsdWUJCXZici0+YnJfZmVhdHVyZV9iaXRzLnZhbHVlCisjZGVm
aW5lIHZicl9pbnRyY250CQl2YnItPmJyX2cyaF9pbnRyX2NudAogI2RlZmluZSB2YnJfZGF0YQkJ
dmJyLT5icl9kYXRhCiAKIHN0cnVjdCB2bWJ1c19yeGJyIHsKQEAgLTU0LDYgKzU4LDEwIEBACiAj
ZGVmaW5lIHJ4YnJfd2luZGV4CQlyeGJyLnZicl93aW5kZXgKICNkZWZpbmUgcnhicl9yaW5kZXgJ
CXJ4YnIudmJyX3JpbmRleAogI2RlZmluZSByeGJyX2ltYXNrCQlyeGJyLnZicl9pbWFzaworI2Rl
ZmluZSByeGJyX3BzbmRzegkJcnhici52YnJfcHNuZHN6CisjZGVmaW5lIHJ4YnJfZnBzbmRzegkJ
cnhici52YnJfZnBzbmRzegorI2RlZmluZSByeGJyX2Z2YWx1ZQkJcnhici52YnJfZnZhbHVlCisj
ZGVmaW5lIHJ4YnJfaW50cmNudAkJcnhici52YnJfaW50cmNudAogI2RlZmluZSByeGJyX2RhdGEJ
CXJ4YnIudmJyX2RhdGEKICNkZWZpbmUgcnhicl9kc2l6ZQkJcnhici52YnJfZHNpemUKIApAQCAt
NjUsNiArNzMsMTAgQEAKICNkZWZpbmUgdHhicl93aW5kZXgJCXR4YnIudmJyX3dpbmRleAogI2Rl
ZmluZSB0eGJyX3JpbmRleAkJdHhici52YnJfcmluZGV4CiAjZGVmaW5lIHR4YnJfaW1hc2sJCXR4
YnIudmJyX2ltYXNrCisjZGVmaW5lIHR4YnJfcHNuZHN6CQl0eGJyLnZicl9wc25kc3oKKyNkZWZp
bmUgdHhicl9mcHNuZHN6CQl0eGJyLnZicl9mcHNuZHN6CisjZGVmaW5lIHR4YnJfZnZhbHVlCQl0
eGJyLnZicl9mdmFsdWUKKyNkZWZpbmUgdHhicl9pbnRyY250CQl0eGJyLnZicl9pbnRyY250CiAj
ZGVmaW5lIHR4YnJfZGF0YQkJdHhici52YnJfZGF0YQogI2RlZmluZSB0eGJyX2RzaXplCQl0eGJy
LnZicl9kc2l6ZQogCkBAIC0xMTgsOCArMTMwLDE1IEBACiBpbnQJCXZtYnVzX3J4YnJfcGVlayhz
dHJ1Y3Qgdm1idXNfcnhiciAqcmJyLCB2b2lkICpkYXRhLCBpbnQgZGxlbik7CiBpbnQJCXZtYnVz
X3J4YnJfcmVhZChzdHJ1Y3Qgdm1idXNfcnhiciAqcmJyLCB2b2lkICpkYXRhLCBpbnQgZGxlbiwK
IAkJICAgIHVpbnQzMl90IHNraXApOworaW50CQl2bWJ1c19yeGJyX2lkeGFkdihzdHJ1Y3Qgdm1i
dXNfcnhiciAqcmJyLCB1aW50MzJfdCBpZHhfYWR2LAorCQkgICAgYm9vbGVhbl90ICpuZWVkX3Np
Zyk7CitpbnQJCXZtYnVzX3J4YnJfaWR4YWR2X3BlZWsoc3RydWN0IHZtYnVzX3J4YnIgKnJiciwg
dm9pZCAqZGF0YSwKKwkJICAgIGludCBkbGVuLCB1aW50MzJfdCBpZHhfYWR2LCBib29sZWFuX3Qg
Km5lZWRfc2lnKTsKK2ludAkJdm1idXNfcnhicl9wZWVrX2NhbGwoc3RydWN0IHZtYnVzX3J4YnIg
KnJiciwgaW50IGRsZW4sCisJCSAgICB1aW50MzJfdCBza2lwLCB2bWJ1c19icl9jb3B5X2NhbGxi
YWNrX3QgY2IsIHZvaWQgKmNiYXJnKTsKIHZvaWQJCXZtYnVzX3J4YnJfaW50cl9tYXNrKHN0cnVj
dCB2bWJ1c19yeGJyICpyYnIpOwogdWludDMyX3QJdm1idXNfcnhicl9pbnRyX3VubWFzayhzdHJ1
Y3Qgdm1idXNfcnhiciAqcmJyKTsKK3VpbnQzMl90CXZtYnVzX3J4YnJfYXZhaWxhYmxlKGNvbnN0
IHN0cnVjdCB2bWJ1c19yeGJyICpyYnIpOwogCiB2b2lkCQl2bWJ1c190eGJyX2luaXQoc3RydWN0
IHZtYnVzX3R4YnIgKnRicik7CiB2b2lkCQl2bWJ1c190eGJyX2RlaW5pdChzdHJ1Y3Qgdm1idXNf
dHhiciAqdGJyKTsKQEAgLTEyNiw1ICsxNDUsMTMgQEAKIHZvaWQJCXZtYnVzX3R4YnJfc2V0dXAo
c3RydWN0IHZtYnVzX3R4YnIgKnRiciwgdm9pZCAqYnVmLCBpbnQgYmxlbik7CiBpbnQJCXZtYnVz
X3R4YnJfd3JpdGUoc3RydWN0IHZtYnVzX3R4YnIgKnRiciwKIAkJICAgIGNvbnN0IHN0cnVjdCBp
b3ZlYyBpb3ZbXSwgaW50IGlvdmxlbiwgYm9vbGVhbl90ICpuZWVkX3NpZyk7CitpbnQJCXZtYnVz
X3R4YnJfd3JpdGVfY2FsbChzdHJ1Y3Qgdm1idXNfdHhiciAqdGJyLAorCQkgICAgY29uc3Qgc3Ry
dWN0IGlvdmVjIGlvdltdLCBpbnQgaW92bGVuLAorCQkgICAgdm1idXNfYnJfY29weV9jYWxsYmFj
a190IGNiLCB2b2lkICpjYmFyZywKKwkJICAgIGJvb2xlYW5fdCAqbmVlZF9zaWcpOwordWludDMy
X3QJdm1idXNfdHhicl9hdmFpbGFibGUoY29uc3Qgc3RydWN0IHZtYnVzX3R4YnIgKnRicik7Cit1
aW50MzJfdAl2bWJ1c190eGJyX2dldF9pbWFzayhjb25zdCBzdHJ1Y3Qgdm1idXNfdHhiciAqdGJy
KTsKK3ZvaWQJCXZtYnVzX3R4YnJfc2V0X3BlbmRpbmdfc25kX3N6KHN0cnVjdCB2bWJ1c190eGJy
ICp0YnIsCisJCSAgICB1aW50MzJfdCBzaXplKTsKIAogI2VuZGlmICAvKiBfVk1CVVNfQlJWQVJf
SF8gKi8KZGlmZiAtLWdpdCBhL3N5cy9kZXYvaHlwZXJ2L3ZtYnVzL3ZtYnVzX2JyLmMgYi9zeXMv
ZGV2L2h5cGVydi92bWJ1cy92bWJ1c19ici5jCi0tLSBhL3N5cy9kZXYvaHlwZXJ2L3ZtYnVzL3Zt
YnVzX2JyLmMKKysrIGIvc3lzL2Rldi9oeXBlcnYvdm1idXMvdm1idXNfYnIuYwpAQCAtNTIsMTgg
KzUyLDIzIEBACiB2bWJ1c19icl9zeXNjdGxfc3RhdGUoU1lTQ1RMX0hBTkRMRVJfQVJHUykKIHsK
IAljb25zdCBzdHJ1Y3Qgdm1idXNfYnIgKmJyID0gYXJnMTsKLQl1aW50MzJfdCByaW5kZXgsIHdp
bmRleCwgaW1hc2ssIHJhdmFpbCwgd2F2YWlsOworCXVpbnQzMl90IHJpbmRleCwgd2luZGV4LCBp
bWFzaywgcHNuZHN6LCBmdmFsdWUsIHJhdmFpbCwgd2F2YWlsOworCXVpbnQ2NF90IGludHJjbnQ7
CiAJY2hhciBzdGF0ZVsyNTZdOwogCisJaW50cmNudCA9IGJyLT52YnJfaW50cmNudDsKIAlyaW5k
ZXggPSBici0+dmJyX3JpbmRleDsKIAl3aW5kZXggPSBici0+dmJyX3dpbmRleDsKIAlpbWFzayA9
IGJyLT52YnJfaW1hc2s7CisJcHNuZHN6ID0gYnItPnZicl9wc25kc3o7CisJZnZhbHVlID0gYnIt
PnZicl9mdmFsdWU7CiAJd2F2YWlsID0gVk1CVVNfQlJfV0FWQUlMKHJpbmRleCwgd2luZGV4LCBi
ci0+dmJyX2RzaXplKTsKIAlyYXZhaWwgPSBici0+dmJyX2RzaXplIC0gd2F2YWlsOwogCiAJc25w
cmludGYoc3RhdGUsIHNpemVvZihzdGF0ZSksCi0JICAgICJyaW5kZXg6JXUgd2luZGV4OiV1IGlt
YXNrOiV1IHJhdmFpbDoldSB3YXZhaWw6JXUiLAotCSAgICByaW5kZXgsIHdpbmRleCwgaW1hc2ss
IHJhdmFpbCwgd2F2YWlsKTsKKwkgICAgImludHJjbnQ6JWx1IHJpbmRleDoldSB3aW5kZXg6JXUg
aW1hc2s6JXUgcHNuZHN6OiV1IGZ2YWx1ZToldSAiCisJICAgICJyYXZhaWw6JXUgd2F2YWlsOiV1
IiwKKwkgICAgaW50cmNudCwgcmluZGV4LCB3aW5kZXgsIGltYXNrLCBwc25kc3osIGZ2YWx1ZSwg
cmF2YWlsLCB3YXZhaWwpOwogCXJldHVybiBzeXNjdGxfaGFuZGxlX3N0cmluZyhvaWRwLCBzdGF0
ZSwgc2l6ZW9mKHN0YXRlKSwgcmVxKTsKIH0KIApAQCAtNzYsOSArODEsMTEgQEAKICNkZWZpbmUg
QlJfU1RBVEVfUklEWAkwCiAjZGVmaW5lIEJSX1NUQVRFX1dJRFgJMQogI2RlZmluZSBCUl9TVEFU
RV9JTVNLCTIKLSNkZWZpbmUgQlJfU1RBVEVfUlNQQwkzCi0jZGVmaW5lIEJSX1NUQVRFX1dTUEMJ
NAotI2RlZmluZSBCUl9TVEFURV9NQVgJNQorI2RlZmluZSBCUl9TVEFURV9QU1NaCTMKKyNkZWZp
bmUgQlJfU1RBVEVfRlZBTAk0CisjZGVmaW5lIEJSX1NUQVRFX1JTUEMJNQorI2RlZmluZSBCUl9T
VEFURV9XU1BDCTYKKyNkZWZpbmUgQlJfU1RBVEVfTUFYCTcKIAogCWNvbnN0IHN0cnVjdCB2bWJ1
c19iciAqYnIgPSBhcmcxOwogCXVpbnQzMl90IHJpbmRleCwgd2luZGV4LCB3YXZhaWwsIHN0YXRl
W0JSX1NUQVRFX01BWF07CkBAIC05MCw2ICs5Nyw4IEBACiAJc3RhdGVbQlJfU1RBVEVfUklEWF0g
PSByaW5kZXg7CiAJc3RhdGVbQlJfU1RBVEVfV0lEWF0gPSB3aW5kZXg7CiAJc3RhdGVbQlJfU1RB
VEVfSU1TS10gPSBici0+dmJyX2ltYXNrOworCXN0YXRlW0JSX1NUQVRFX1BTU1pdID0gYnItPnZi
cl9wc25kc3o7CisJc3RhdGVbQlJfU1RBVEVfRlZBTF0gPSBici0+dmJyX2Z2YWx1ZTsKIAlzdGF0
ZVtCUl9TVEFURV9XU1BDXSA9IHdhdmFpbDsKIAlzdGF0ZVtCUl9TVEFURV9SU1BDXSA9IGJyLT52
YnJfZHNpemUgLSB3YXZhaWw7CiAKQEAgLTE0MCw2ICsxNDksMTIgQEAKIH0KIAogdWludDMyX3QK
K3ZtYnVzX3J4YnJfYXZhaWxhYmxlKGNvbnN0IHN0cnVjdCB2bWJ1c19yeGJyICpyYnIpCit7CisJ
cmV0dXJuICh2bWJ1c19yeGJyX2F2YWlsKHJicikpOworfQorCit1aW50MzJfdAogdm1idXNfcnhi
cl9pbnRyX3VubWFzayhzdHJ1Y3Qgdm1idXNfcnhiciAqcmJyKQogewogCXJici0+cnhicl9pbWFz
ayA9IDA7CkBAIC0xNzgsNiArMTkzLDQwIEBACiAJdm1idXNfYnJfc2V0dXAoJnJici0+cnhiciwg
YnVmLCBibGVuKTsKIH0KIAorc3RhdGljIF9faW5saW5lIGJvb2xlYW5fdAordm1idXNfcnhicl9u
ZWVkX3NpZ25hbChjb25zdCBzdHJ1Y3Qgdm1idXNfcnhiciAqcmJyLCB1aW50MzJfdCBieXRlc19y
ZWFkKQoreworCXVpbnQzMl90IHBlbmRpbmdfc25kX3N6LCBjYW53cml0ZV9zaXplOworCisJLyog
Tm8gbmVlZCB0byBzaWduYWwgaWYgaG9zdCBkb2Vzbid0IHdhbnQgdXMgdG8gKi8KKwlpZiAoIXJi
ci0+cnhicl9mcHNuZHN6KQorCQlyZXR1cm4gZmFsc2U7CisKKwltYigpOworCisJcGVuZGluZ19z
bmRfc3ogPSByYnItPnJ4YnJfcHNuZHN6OworCS8qIE5vIG5lZWQgdG8gc2lnbmFsIGlmIGhvc3Qg
c2V0cyBwZW5kaW5nX3NuZF9zeiB0byAwICovCisJaWYgKCFwZW5kaW5nX3NuZF9zeikKKwkJcmV0
dXJuIGZhbHNlOworCisJbWIoKTsKKworCWNhbndyaXRlX3NpemUgPSByYnItPnJ4YnJfZHNpemUg
LSB2bWJ1c19yeGJyX2F2YWlsKHJicik7CisKKwkvKiBObyBuZWVkIHRvIHNpZ25hbCBpZiBiciBh
bHJlYWR5IGhhcyBlbm91Z2ggc3BhY2UgYmVmb3JlIHJlYWQgKi8KKwlpZiAoY2Fud3JpdGVfc2l6
ZSAtIGJ5dGVzX3JlYWQgPiBwZW5kaW5nX3NuZF9zeikKKwkJcmV0dXJuIGZhbHNlOworCisJLyoK
KwkgKiBObyBuZWVkIHRvIHNpZ25hbCBpZiBzdGlsbCBkb2Vzbid0IGhhdmUgZW5vdWdoIHNwYWNl
CisJICogYXNrZWQgYnkgaG9zdAorCSAqLworCWlmIChjYW53cml0ZV9zaXplIDw9IHBlbmRpbmdf
c25kX3N6KQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKwogdm9pZAogdm1i
dXNfdHhicl9pbml0KHN0cnVjdCB2bWJ1c190eGJyICp0YnIpCiB7CkBAIC0xOTQsOCArMjQzLDI1
IEBACiB2bWJ1c190eGJyX3NldHVwKHN0cnVjdCB2bWJ1c190eGJyICp0YnIsIHZvaWQgKmJ1Ziwg
aW50IGJsZW4pCiB7CiAJdm1idXNfYnJfc2V0dXAoJnRici0+dHhiciwgYnVmLCBibGVuKTsKKwor
CS8qIFNldCBmZWF0dXJlIGJpdCBlbmFibGluZyBmbG93IGNvbnRyb2wgKi8KKwl0YnItPnR4YnJf
ZnBzbmRzeiA9IDE7CiB9CiAKK3VpbnQzMl90Cit2bWJ1c190eGJyX2dldF9pbWFzayhjb25zdCBz
dHJ1Y3Qgdm1idXNfdHhiciAqdGJyKQoreworCW1iKCk7CisKKwlyZXR1cm4odGJyLT50eGJyX2lt
YXNrKTsKK30KKwordm9pZAordm1idXNfdHhicl9zZXRfcGVuZGluZ19zbmRfc3ooc3RydWN0IHZt
YnVzX3R4YnIgKnRiciwgdWludDMyX3Qgc2l6ZSkKK3sKKwl0YnItPnR4YnJfcHNuZHN6ID0gc2l6
ZTsKK30KKwogLyoKICAqIFdoZW4gd2Ugd3JpdGUgdG8gdGhlIHJpbmcgYnVmZmVyLCBjaGVjayBp
ZiB0aGUgaG9zdCBuZWVkcyB0byBiZQogICogc2lnbmFsZWQuCkBAIC0yNjAsNyArMzI2LDExNyBA
QAogCXJldHVybiBWTUJVU19CUl9JRFhJTkMod2luZGV4LCBjcGxlbiwgYnJfZHNpemUpOwogfQog
CitzdGF0aWMgX19pbmxpbmUgdWludDMyX3QKK3ZtYnVzX3R4YnJfY29weXRvX2NhbGwoY29uc3Qg
c3RydWN0IHZtYnVzX3R4YnIgKnRiciwgdWludDMyX3Qgd2luZGV4LAorICAgIHVpbnQzMl90IGNw
bGVuLCB2bWJ1c19icl9jb3B5X2NhbGxiYWNrX3QgY2IsIHZvaWQgKmNiYXJnLCBpbnQgKnJldCkK
K3sKKwl1aW50OF90ICpicl9kYXRhID0gdGJyLT50eGJyX2RhdGE7CisJdWludDMyX3QgYnJfZHNp
emUgPSB0YnItPnR4YnJfZHNpemU7CisJaW50IGVyciA9IDA7CisKKwlpZiAoY3BsZW4gPiBicl9k
c2l6ZSAtIHdpbmRleCkgeworCQl1aW50MzJfdCBmcmFnbGVuID0gYnJfZHNpemUgLSB3aW5kZXg7
CisKKwkJLyogV3JhcC1hcm91bmQgZGV0ZWN0ZWQgKi8KKwkJZXJyID0gY2IoKHZvaWQgKikoYnJf
ZGF0YSArIHdpbmRleCksIGZyYWdsZW4sIGNiYXJnKTsKKwkJaWYgKCFlcnIpCisJCQllcnIgPSBj
Yigodm9pZCAqKWJyX2RhdGEsIGNwbGVuIC0gZnJhZ2xlbiwgY2JhcmcpOworCX0gZWxzZSB7CisJ
CWVyciA9IGNiKCh2b2lkICopKGJyX2RhdGEgKyB3aW5kZXgpLCBjcGxlbiwgY2JhcmcpOworCX0K
KworCSpyZXQgPSBlcnI7CisKKwlyZXR1cm4gVk1CVVNfQlJfSURYSU5DKHdpbmRleCwgY3BsZW4s
IGJyX2RzaXplKTsKK30KKwordWludDMyX3QKK3ZtYnVzX3R4YnJfYXZhaWxhYmxlKGNvbnN0IHN0
cnVjdCB2bWJ1c190eGJyICp0YnIpCit7CisJcmV0dXJuICh2bWJ1c190eGJyX2F2YWlsKHRicikp
OworfQorCiAvKgorICogTk9URToKKyAqIE5vdCBob2xkaW5nIGxvY2sgd2hlbiBjYWxsaW5nIHVz
ZXIgcHJvdmlkZWQgY2FsbGJhY2sgcm91dGluZS4KKyAqIENhbGxlciBzaG91bGQgaG9sZCBsb2Nr
IHRvIHNlcmlhbGl6ZSByaW5nIGJ1ZmZlciBhY2Nlc3Nlcy4KKyAqLworaW50Cit2bWJ1c190eGJy
X3dyaXRlX2NhbGwoc3RydWN0IHZtYnVzX3R4YnIgKnRiciwKKyAgICBjb25zdCBzdHJ1Y3QgaW92
ZWMgaW92W10sIGludCBpb3ZsZW4sCisgICAgdm1idXNfYnJfY29weV9jYWxsYmFja190IGNiLCB2
b2lkICpjYmFyZywKKyAgICBib29sZWFuX3QgKm5lZWRfc2lnKQoreworCXVpbnQzMl90IG9sZF93
aW5kZXgsIHdpbmRleCwgdG90YWw7CisJdWludDY0X3Qgc2F2ZV93aW5kZXg7CisJaW50IGk7CisJ
aW50IGNiX3JldCA9IDA7CisKKwl0b3RhbCA9IDA7CisJZm9yIChpID0gMDsgaSA8IGlvdmxlbjsg
aSsrKQorCQl0b3RhbCArPSBpb3ZbaV0uaW92X2xlbjsKKwl0b3RhbCArPSBzaXplb2Yoc2F2ZV93
aW5kZXgpOworCisKKwkvKgorCSAqIE5PVEU6CisJICogSWYgdGhpcyB3cml0ZSBpcyBnb2luZyB0
byBtYWtlIGJyX3dpbmRleCBzYW1lIGFzIGJyX3JpbmRleCwKKwkgKiBpLmUuIHRoZSBhdmFpbGFi
bGUgc3BhY2UgZm9yIHdyaXRlIGlzIHNhbWUgYXMgdGhlIHdyaXRlIHNpemUsCisJICogd2UgY2Fu
J3QgZG8gaXQgdGhlbiwgc2luY2UgYnJfd2luZGV4ID09IGJyX3JpbmRleCBtZWFucyB0aGF0CisJ
ICogdGhlIGJ1ZnJpbmcgaXMgZW1wdHkuCisJICovCisJaWYgKHZtYnVzX3R4YnJfYXZhaWwodGJy
KSA8PSB0b3RhbCkgeworCQlyZXR1cm4gKEVBR0FJTik7CisJfQorCisJLyogU2F2ZSBicl93aW5k
ZXggZm9yIGxhdGVyIHVzZSAqLworCW9sZF93aW5kZXggPSB0YnItPnR4YnJfd2luZGV4OworCisJ
LyoKKwkgKiBDb3B5IHRoZSBzY2F0dGVyZWQgY2hhbm5lbCBwYWNrZXQgdG8gdGhlIFRYIGJ1ZnJp
bmcuCisJICovCisJd2luZGV4ID0gb2xkX3dpbmRleDsKKwlmb3IgKGkgPSAwOyBpIDwgaW92bGVu
OyBpKyspIHsKKwkJaWYgKGlvdltpXS5pb3ZfYmFzZSAhPSBOVUxMKSB7CisJCQl3aW5kZXggPSB2
bWJ1c190eGJyX2NvcHl0byh0YnIsIHdpbmRleCwKKwkJCSAgICBpb3ZbaV0uaW92X2Jhc2UsIGlv
dltpXS5pb3ZfbGVuKTsKKwkJfSBlbHNlIGlmIChjYiAhPSBOVUxMKSB7CisJCQl3aW5kZXggPSB2
bWJ1c190eGJyX2NvcHl0b19jYWxsKHRiciwgd2luZGV4LAorCQkJICAgIGlvdltpXS5pb3ZfbGVu
LCBjYiwgY2JhcmcsICZjYl9yZXQpOworCQkJLyoKKwkJCSAqIElmIGNhbGxiYWNrIGZhaWxzLCBy
ZXR1cm4gd2l0aG91dCB1cGRhdGluZworCQkJICogd3JpdGUgaW5kZXguCisJCQkgKi8KKwkJCWlm
IChjYl9yZXQpCisJCQkJcmV0dXJuIChjYl9yZXQpOworCQl9CisJfQorCisJbXR4X2xvY2tfc3Bp
bigmdGJyLT50eGJyX2xvY2spOworCisJLyoKKwkgKiBTZXQgdGhlIG9mZnNldCBvZiB0aGUgY3Vy
cmVudCBjaGFubmVsIHBhY2tldC4KKwkgKi8KKwlzYXZlX3dpbmRleCA9ICgodWludDY0X3Qpb2xk
X3dpbmRleCkgPDwgMzI7CisJd2luZGV4ID0gdm1idXNfdHhicl9jb3B5dG8odGJyLCB3aW5kZXgs
ICZzYXZlX3dpbmRleCwKKwkgICAgc2l6ZW9mKHNhdmVfd2luZGV4KSk7CisKKwkvKgorCSAqIFVw
ZGF0ZSB0aGUgd3JpdGUgaW5kZXggX2FmdGVyXyB0aGUgY2hhbm5lbCBwYWNrZXQKKwkgKiBpcyBj
b3BpZWQuCisJICovCisJX19jb21waWxlcl9tZW1iYXIoKTsKKwl0YnItPnR4YnJfd2luZGV4ID0g
d2luZGV4OworCisJbXR4X3VubG9ja19zcGluKCZ0YnItPnR4YnJfbG9jayk7CisKKwlpZiAobmVl
ZF9zaWcpCisJCSpuZWVkX3NpZyA9IHZtYnVzX3R4YnJfbmVlZF9zaWduYWwodGJyLCBvbGRfd2lu
ZGV4KTsKKworCXJldHVybiAoMCk7Cit9CisKKy8qCiAgKiBXcml0ZSBzY2F0dGVyZWQgY2hhbm5l
bCBwYWNrZXQgdG8gVFggYnVmcmluZy4KICAqCiAgKiBUaGUgb2Zmc2V0IG9mIHRoaXMgY2hhbm5l
bCBwYWNrZXQgaXMgd3JpdHRlbiBhcyBhIDY0Yml0cyB2YWx1ZQpAQCAtMzQ2LDYgKzUyMiwyNyBA
QAogCXJldHVybiBWTUJVU19CUl9JRFhJTkMocmluZGV4LCBjcGxlbiwgYnJfZHNpemUpOwogfQog
CitzdGF0aWMgX19pbmxpbmUgdWludDMyX3QKK3ZtYnVzX3J4YnJfY29weWZyb21fY2FsbChjb25z
dCBzdHJ1Y3Qgdm1idXNfcnhiciAqcmJyLCB1aW50MzJfdCByaW5kZXgsCisgICAgaW50IGNwbGVu
LCB2bWJ1c19icl9jb3B5X2NhbGxiYWNrX3QgY2IsIHZvaWQgKmNiYXJnKQoreworCXVpbnQ4X3Qg
KmJyX2RhdGEgPSByYnItPnJ4YnJfZGF0YTsKKwl1aW50MzJfdCBicl9kc2l6ZSA9IHJici0+cnhi
cl9kc2l6ZTsKKwlpbnQgZXJyb3IgPSAwOworCisJaWYgKGNwbGVuID4gYnJfZHNpemUgLSByaW5k
ZXgpIHsKKwkJdWludDMyX3QgZnJhZ2xlbiA9IGJyX2RzaXplIC0gcmluZGV4OworCisJCS8qIFdy
YXAtYXJvdW5kIGRldGVjdGVkLiAqLworCQllcnJvciA9IGNiKCh2b2lkICopKGJyX2RhdGEgKyBy
aW5kZXgpLCBmcmFnbGVuLCBjYmFyZyk7CisJCWlmICghZXJyb3IpCisJCQllcnJvciA9IGNiKCh2
b2lkICopYnJfZGF0YSwgY3BsZW4gLSBmcmFnbGVuLCBjYmFyZyk7CisJfSBlbHNlIHsKKwkJZXJy
b3IgPSBjYigodm9pZCAqKShicl9kYXRhICsgcmluZGV4KSwgY3BsZW4sIGNiYXJnKTsKKwl9CisJ
cmV0dXJuIChlcnJvcik7Cit9CisKIGludAogdm1idXNfcnhicl9wZWVrKHN0cnVjdCB2bWJ1c19y
eGJyICpyYnIsIHZvaWQgKmRhdGEsIGludCBkbGVuKQogewpAQCAtMzY4LDYgKzU2NSwxMjEgQEAK
IAogLyoKICAqIE5PVEU6CisgKiBXZSBvbmx5IGhvbGQgc3BpbiBsb2NrIHRvIGNoZWNrIHRoZSBy
aW5nIGJ1ZmZlciBzcGFjZS4gSXQgaXMKKyAqIHJlbGVhc2VkIGJlZm9yZSBjYWxsaW5nIHVzZXIg
cHJvdmlkZWQgY2FsbGJhY2sgcm91dGluZS4KKyAqIENhbGxlciBzaG91bGQgaG9sZCBsb2NrIHRv
IHNlcmlhbGl6ZSByaW5nIGJ1ZmZlciBhY2Nlc3Nlcy4KKyAqLworaW50Cit2bWJ1c19yeGJyX3Bl
ZWtfY2FsbChzdHJ1Y3Qgdm1idXNfcnhiciAqcmJyLCBpbnQgZGxlbiwgdWludDMyX3Qgc2tpcCwK
KyAgICB2bWJ1c19icl9jb3B5X2NhbGxiYWNrX3QgY2IsIHZvaWQgKmNiYXJnKQoreworCXVpbnQz
Ml90IHJpbmRleCwgYnJfZHNpemUwID0gcmJyLT5yeGJyX2RzaXplOworCWludCByZXQ7CisKKwlt
dHhfbG9ja19zcGluKCZyYnItPnJ4YnJfbG9jayk7CisJLyoKKwkgKiBUaGUgcmVxdWVzdGVkIGRh
dGEgKyBza2lwIGFuZCB0aGUgNjRiaXRzIGNoYW5uZWwgcGFja2V0CisJICogb2Zmc2V0IHNob3Vs
ZCBiZSB0aGVyZSBhdCBsZWFzdC4KKwkgKi8KKwlpZiAodm1idXNfcnhicl9hdmFpbChyYnIpIDwg
c2tpcCArIGRsZW4gKyBzaXplb2YodWludDY0X3QpKSB7CisJCW10eF91bmxvY2tfc3BpbigmcmJy
LT5yeGJyX2xvY2spOworCQlyZXR1cm4gKEVBR0FJTik7CisJfQorCisJcmluZGV4ID0gVk1CVVNf
QlJfSURYSU5DKHJici0+cnhicl9yaW5kZXgsIHNraXAsIGJyX2RzaXplMCk7CisJbXR4X3VubG9j
a19zcGluKCZyYnItPnJ4YnJfbG9jayk7CisKKwlyZXQgPSB2bWJ1c19yeGJyX2NvcHlmcm9tX2Nh
bGwocmJyLCByaW5kZXgsIGRsZW4sIGNiLCBjYmFyZyk7CisKKwlyZXR1cm4gKHJldCk7Cit9CisK
Ky8qCisgKiBOT1RFOgorICogV2UgYXNzdW1lIGlkeF9hZHYgPT0gc2l6ZW9mKGNoYW5uZWwgcGFj
a2V0KS4KKyAqLworaW50Cit2bWJ1c19yeGJyX2lkeGFkdl9wZWVrKHN0cnVjdCB2bWJ1c19yeGJy
ICpyYnIsIHZvaWQgKmRhdGEsIGludCBkbGVuLAorICAgIHVpbnQzMl90IGlkeF9hZHYsIGJvb2xl
YW5fdCAqbmVlZF9zaWcpCit7CisJdWludDMyX3QgcmluZGV4LCBicl9kc2l6ZSA9IHJici0+cnhi
cl9kc2l6ZTsKKworCW10eF9sb2NrX3NwaW4oJnJici0+cnhicl9sb2NrKTsKKwkvKgorCSAqIE1h
a2Ugc3VyZSBpdCBoYXMgZW5vdWdoIGRhdGEgdG8gcmVhZC4KKwkgKi8KKwlpZiAodm1idXNfcnhi
cl9hdmFpbChyYnIpIDwgaWR4X2FkdiArIHNpemVvZih1aW50NjRfdCkgKyBkbGVuKSB7CisJCW10
eF91bmxvY2tfc3BpbigmcmJyLT5yeGJyX2xvY2spOworCQlyZXR1cm4gKEVBR0FJTik7CisJfQor
CisJaWYgKGlkeF9hZHYgPiAwKSB7CisJCS8qCisJCSAqIEFkdmFuY2UgdGhlIHJlYWQgaW5kZXgg
Zmlyc3QsIGluY2x1ZGluZyB0aGUgY2hhbm5lbCdzIDY0Yml0CisJCSAqIHByZXZpb3VzIHdyaXRl
IG9mZnNldC4KKwkJICovCisJCXJpbmRleCA9IFZNQlVTX0JSX0lEWElOQyhyYnItPnJ4YnJfcmlu
ZGV4LAorCQkgICAgaWR4X2FkdiArIHNpemVvZih1aW50NjRfdCksIGJyX2RzaXplKTsKKwkJX19j
b21waWxlcl9tZW1iYXIoKTsKKwkJcmJyLT5yeGJyX3JpbmRleCA9IHJpbmRleDsKKwl9CisKKwl2
bWJ1c19yeGJyX2NvcHlmcm9tKHJiciwgcmJyLT5yeGJyX3JpbmRleCwgZGF0YSwgZGxlbik7CisK
KwltdHhfdW5sb2NrX3NwaW4oJnJici0+cnhicl9sb2NrKTsKKworCWlmIChuZWVkX3NpZykgewor
CQlpZiAoaWR4X2FkdiA+IDApCisJCQkqbmVlZF9zaWcgPQorCQkJICAgIHZtYnVzX3J4YnJfbmVl
ZF9zaWduYWwocmJyLCBpZHhfYWR2ICsKKwkJCSAgICBzaXplb2YodWludDY0X3QpKTsKKwkJZWxz
ZQorCQkJKm5lZWRfc2lnID0gZmFsc2U7CisJfQorCisJcmV0dXJuICgwKTsKK30KKworLyoKKyAq
IE5PVEU6CisgKiBKdXN0IHVwZGF0ZSB0aGUgUlggcmIgaW5kZXguCisgKi8KK2ludAordm1idXNf
cnhicl9pZHhhZHYoc3RydWN0IHZtYnVzX3J4YnIgKnJiciwgdWludDMyX3QgaWR4X2FkdiwKKyAg
ICBib29sZWFuX3QgKm5lZWRfc2lnKQoreworCXVpbnQzMl90IHJpbmRleCwgYnJfZHNpemUgPSBy
YnItPnJ4YnJfZHNpemU7CisKKwltdHhfbG9ja19zcGluKCZyYnItPnJ4YnJfbG9jayk7CisJLyoK
KwkgKiBNYWtlIHN1cmUgaXQgaGFzIGVub3VnaCBzcGFjZSB0byBhZHZhbmNlLgorCSAqLworCWlm
ICh2bWJ1c19yeGJyX2F2YWlsKHJicikgPCBpZHhfYWR2ICsgc2l6ZW9mKHVpbnQ2NF90KSkgewor
CQltdHhfdW5sb2NrX3NwaW4oJnJici0+cnhicl9sb2NrKTsKKwkJcmV0dXJuIChFQUdBSU4pOwor
CX0KKworCS8qCisJICogQWR2YW5jZSB0aGUgcmVhZCBpbmRleCwgaW5jbHVkaW5nIHRoZSBjaGFu
bmVsJ3MgNjRiaXQKKwkgKiBwcmV2aW91cyB3cml0ZSBvZmZzZXQuCisJICovCisJcmluZGV4ID0g
Vk1CVVNfQlJfSURYSU5DKHJici0+cnhicl9yaW5kZXgsCisJICAgIGlkeF9hZHYgKyBzaXplb2Yo
dWludDY0X3QpLCBicl9kc2l6ZSk7CisJX19jb21waWxlcl9tZW1iYXIoKTsKKwlyYnItPnJ4YnJf
cmluZGV4ID0gcmluZGV4OworCisJbXR4X3VubG9ja19zcGluKCZyYnItPnJ4YnJfbG9jayk7CisK
KwlpZiAobmVlZF9zaWcpIHsKKwkJKm5lZWRfc2lnID0KKwkJICAgIHZtYnVzX3J4YnJfbmVlZF9z
aWduYWwocmJyLCBpZHhfYWR2ICsgc2l6ZW9mKHVpbnQ2NF90KSk7CisJfQorCisJcmV0dXJuICgw
KTsKK30KKworLyoKKyAqIE5PVEU6CiAgKiBXZSBhc3N1bWUgKGRsZW4gKyBza2lwKSA9PSBzaXpl
b2YoY2hhbm5lbCBwYWNrZXQpLgogICovCiBpbnQKZGlmZiAtLWdpdCBhL3N5cy9kZXYvaHlwZXJ2
L3ZtYnVzL3ZtYnVzLmMgYi9zeXMvZGV2L2h5cGVydi92bWJ1cy92bWJ1cy5jCi0tLSBhL3N5cy9k
ZXYvaHlwZXJ2L3ZtYnVzL3ZtYnVzLmMKKysrIGIvc3lzL2Rldi9oeXBlcnYvdm1idXMvdm1idXMu
YwpAQCAtMzY1LDEyICszNjUsNDggQEAKIAl1aW50MzJfdCBncGFkbDsKIAogYWdhaW46Ci0JZ3Bh
ZGwgPSBhdG9taWNfZmV0Y2hhZGRfaW50KCZzYy0+dm1idXNfZ3BhZGwsIDEpOyAKKwlncGFkbCA9
IGF0b21pY19mZXRjaGFkZF9pbnQoJnNjLT52bWJ1c19ncGFkbCwgMSk7CiAJaWYgKGdwYWRsID09
IDApCiAJCWdvdG8gYWdhaW47CiAJcmV0dXJuIChncGFkbCk7CiB9CiAKKy8qIFVzZWQgZm9yIEh5
cGVyLVYgc29ja2V0IHdoZW4gZ3Vlc3QgY2xpZW50IGNvbm5lY3RzIHRvIGhvc3QgKi8KK2ludAor
dm1idXNfcmVxX3RsX2Nvbm5lY3Qoc3RydWN0IGh5cGVydl9ndWlkICpndWVzdF9zcnZfaWQsCisg
ICAgc3RydWN0IGh5cGVydl9ndWlkICpob3N0X3Nydl9pZCkKK3sKKwlzdHJ1Y3Qgdm1idXNfc29m
dGMgKnNjID0gdm1idXNfZ2V0X3NvZnRjKCk7CisJc3RydWN0IHZtYnVzX2NoYW5tc2dfdGxfY29u
bmVjdCAqcmVxOworCXN0cnVjdCB2bWJ1c19tc2doYyAqbWg7CisJaW50IGVycm9yOworCisJaWYg
KCFzYykKKwkJcmV0dXJuIEVOWElPOworCisJbWggPSB2bWJ1c19tc2doY19nZXQoc2MsIHNpemVv
ZigqcmVxKSk7CisJaWYgKG1oID09IE5VTEwpIHsKKwkJZGV2aWNlX3ByaW50ZihzYy0+dm1idXNf
ZGV2LAorCQkgICAgImNhbiBub3QgZ2V0IG1zZyBoeXBlcmNhbGwgZm9yIHRsIGNvbm5lY3RcbiIp
OworCQlyZXR1cm4gRU5YSU87CisJfQorCisJcmVxID0gdm1idXNfbXNnaGNfZGF0YXB0cihtaCk7
CisJcmVxLT5jaG1faGRyLmNobV90eXBlID0gVk1CVVNfQ0hBTk1TR19UWVBFX1RMX0NPTk47CisJ
cmVxLT5ndWVzdF9lbmRwb2ludF9pZCA9ICpndWVzdF9zcnZfaWQ7CisJcmVxLT5ob3N0X3NlcnZp
Y2VfaWQgPSAqaG9zdF9zcnZfaWQ7CisKKwllcnJvciA9IHZtYnVzX21zZ2hjX2V4ZWNfbm9yZXN1
bHQobWgpOworCXZtYnVzX21zZ2hjX3B1dChzYywgbWgpOworCisJaWYgKGVycm9yKSB7CisJCWRl
dmljZV9wcmludGYoc2MtPnZtYnVzX2RldiwKKwkJICAgICJ0bCBjb25uZWN0IG1zZyBoeXBlcmNh
bGwgZmFpbGVkXG4iKTsKKwl9CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKIHN0YXRpYyBpbnQKIHZt
YnVzX2Nvbm5lY3Qoc3RydWN0IHZtYnVzX3NvZnRjICpzYywgdWludDMyX3QgdmVyc2lvbikKIHsK
ZGlmZiAtLWdpdCBhL3N5cy9kZXYvaHlwZXJ2L2luY2x1ZGUvdm1idXMuaCBiL3N5cy9kZXYvaHlw
ZXJ2L2luY2x1ZGUvdm1idXMuaAotLS0gYS9zeXMvZGV2L2h5cGVydi9pbmNsdWRlL3ZtYnVzLmgK
KysrIGIvc3lzL2Rldi9oeXBlcnYvaW5jbHVkZS92bWJ1cy5oCkBAIC0zMSw2ICszMSw3IEBACiAK
ICNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KICNpbmNsdWRlIDxzeXMvYnVzLmg+CisjaW5jbHVkZSA8
c3lzL19pb3ZlYy5oPgogCiAvKgogICogVk1CVVMgdmVyc2lvbiBpcyAzMiBiaXQsIHVwcGVyIDE2
IGJpdCBmb3IgbWFqb3JfbnVtYmVyIGFuZCBsb3dlcgpAQCAtMTMwLDYgKzEzMSw3IEBACiBzdHJ1
Y3QgdGFza3F1ZXVlOwogCiB0eXBlZGVmIHZvaWQJKCp2bWJ1c19jaGFuX2NhbGxiYWNrX3QpKHN0
cnVjdCB2bWJ1c19jaGFubmVsICosIHZvaWQgKik7Cit0eXBlZGVmIGludAkoKnZtYnVzX2JyX2Nv
cHlfY2FsbGJhY2tfdCkodm9pZCAqLCBpbnQsIHZvaWQgKik7CiAKIHN0YXRpYyBfX2lubGluZSBz
dHJ1Y3Qgdm1idXNfY2hhbm5lbCAqCiB2bWJ1c19nZXRfY2hhbm5lbChkZXZpY2VfdCBkZXYpCkBA
IC0yMDUsNiArMjA3LDE0IEBACiBpbnQJCXZtYnVzX2NoYW5fcmVjdl9wa3Qoc3RydWN0IHZtYnVz
X2NoYW5uZWwgKmNoYW4sCiAJCSAgICBzdHJ1Y3Qgdm1idXNfY2hhbnBrdF9oZHIgKnBrdCwgaW50
ICpwa3RsZW4pOwogCitpbnQJCXZtYnVzX2NoYW5fcmVjdl9pZHhhZHYoc3RydWN0IHZtYnVzX2No
YW5uZWwgKmNoYW4sCisJCSAgICB1aW50MzJfdCBhZHZhbmNlKTsKK2ludAkJdm1idXNfY2hhbl9y
ZWN2X3BlZWsoc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW4sCisJCSAgICB2b2lkICpkYXRhLCBp
bnQgZGF0YV9sZW4sIHVpbnQzMl90IGFkdmFuY2UpOworaW50CQl2bWJ1c19jaGFuX3JlY3ZfcGVl
a19jYWxsKHN0cnVjdCB2bWJ1c19jaGFubmVsICpjaGFuLAorCQkgICAgaW50IGRhdGFfbGVuLCB1
aW50MzJfdCBza2lwLAorCQkgICAgdm1idXNfYnJfY29weV9jYWxsYmFja190IGNiLCB2b2lkICpj
YmFyZyk7CisKIGludAkJdm1idXNfY2hhbl9zZW5kKHN0cnVjdCB2bWJ1c19jaGFubmVsICpjaGFu
LCB1aW50MTZfdCB0eXBlLAogCQkgICAgdWludDE2X3QgZmxhZ3MsIHZvaWQgKmRhdGEsIGludCBk
bGVuLCB1aW50NjRfdCB4YWN0aWQpOwogaW50CQl2bWJ1c19jaGFuX3NlbmRfc2dsaXN0KHN0cnVj
dCB2bWJ1c19jaGFubmVsICpjaGFuLApAQCAtMjEzLDEzICsyMjMsMzAgQEAKIGludAkJdm1idXNf
Y2hhbl9zZW5kX3BycGxpc3Qoc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW4sCiAJCSAgICBzdHJ1
Y3Qgdm1idXNfZ3BhX3JhbmdlICpwcnAsIGludCBwcnBfY250LCB2b2lkICpkYXRhLAogCQkgICAg
aW50IGRsZW4sIHVpbnQ2NF90IHhhY3RpZCk7CitpbnQJCXZtYnVzX2NoYW5faW92X3NlbmQoc3Ry
dWN0IHZtYnVzX2NoYW5uZWwgKmNoYW4sCisJCSAgICBjb25zdCBzdHJ1Y3QgaW92ZWMgaW92W10s
IGludCBpb3ZsZW4sCisJCSAgICB2bWJ1c19icl9jb3B5X2NhbGxiYWNrX3QgY2IsIHZvaWQgKmNi
YXJnKTsKK3VpbnQzMl90CXZtYnVzX2NoYW5fd3JpdGVfYXZhaWxhYmxlKHN0cnVjdCB2bWJ1c19j
aGFubmVsICpjaGFuKTsKK3VpbnQzMl90CXZtYnVzX2NoYW5fcmVhZF9hdmFpbGFibGUoc3RydWN0
IHZtYnVzX2NoYW5uZWwgKmNoYW4pOworYm9vbAkJdm1idXNfY2hhbl93cml0ZV9zaWduYWwoc3Ry
dWN0IHZtYnVzX2NoYW5uZWwgKmNoYW4sCisJCSAgICBpbnQzMl90IG1pbl9zaWduYWxfc2l6ZSk7
Cit2b2lkCQl2bWJ1c19jaGFuX3NldF9wZW5kaW5nX3NlbmRfc2l6ZShzdHJ1Y3Qgdm1idXNfY2hh
bm5lbCAqY2hhbiwKKwkJICAgIHVpbnQzMl90IHNpemUpOwogCiB1aW50MzJfdAl2bWJ1c19jaGFu
X2lkKGNvbnN0IHN0cnVjdCB2bWJ1c19jaGFubmVsICpjaGFuKTsKIHVpbnQzMl90CXZtYnVzX2No
YW5fc3ViaWR4KGNvbnN0IHN0cnVjdCB2bWJ1c19jaGFubmVsICpjaGFuKTsKIGJvb2wJCXZtYnVz
X2NoYW5faXNfcHJpbWFyeShjb25zdCBzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbik7CiBib29s
CQl2bWJ1c19jaGFuX2lzX3Jldm9rZWQoY29uc3Qgc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW4p
OwotY29uc3Qgc3RydWN0IGh5cGVydl9ndWlkICoKLQkJdm1idXNfY2hhbl9ndWlkX2luc3QoY29u
c3Qgc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW4pOworYm9vbAkJdm1idXNfY2hhbl9pc19odnMo
Y29uc3Qgc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW4pOworYm9vbAkJdm1idXNfY2hhbl9pc19o
dnNfY29ubl9mcm9tX2hvc3QoCisJCSAgICBjb25zdCBzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hh
bik7CitpbnQJCXZtYnVzX3JlcV90bF9jb25uZWN0KHN0cnVjdCBoeXBlcnZfZ3VpZCAqLAorCQkg
ICAgc3RydWN0IGh5cGVydl9ndWlkICopOworCitzdHJ1Y3QgaHlwZXJ2X2d1aWQgKgorCQl2bWJ1
c19jaGFuX2d1aWRfdHlwZShzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbik7CitzdHJ1Y3QgaHlw
ZXJ2X2d1aWQgKgorCQl2bWJ1c19jaGFuX2d1aWRfaW5zdChzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAq
Y2hhbik7CiBpbnQJCXZtYnVzX2NoYW5fcHJwbGlzdF9uZWxlbShpbnQgYnJfc2l6ZSwgaW50IHBy
cGNudF9tYXgsCiAJCSAgICBpbnQgZGxlbl9tYXgpOwogYm9vbAkJdm1idXNfY2hhbl9yeF9lbXB0
eShjb25zdCBzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbik7CmRpZmYgLS1naXQgYS9zeXMvZGV2
L2h5cGVydi9odnNvY2svaHZfc29jay5oIGIvc3lzL2Rldi9oeXBlcnYvaHZzb2NrL2h2X3NvY2su
aAotLS0gYS9zeXMvZGV2L2h5cGVydi9odnNvY2svaHZfc29jay5oCisrKyBiL3N5cy9kZXYvaHlw
ZXJ2L2h2c29jay9odl9zb2NrLmgKQEAgLTAsMCArMSwxMjIgQEAKKy8qLQorICogU1BEWC1MaWNl
bnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1GcmVlQlNECisgKgorICogQ29weXJpZ2h0IChj
KSAyMDIwIE1pY3Jvc29mdCBDb3JwLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UgdW5tb2RpZmllZCwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGFuZCB0aGUgZm9sbG93
aW5nCisgKiAgICBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAq
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNEJAorICovCisKKyNpZm5k
ZWYgX0hWU09DS19ICisjZGVmaW5lIF9IVlNPQ0tfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4K
KyNpbmNsdWRlIDxzeXMvc29ja2V0dmFyLmg+CisjaW5jbHVkZSA8c3lzL3F1ZXVlLmg+CisKKyNp
bmNsdWRlIDxkZXYvaHlwZXJ2L2luY2x1ZGUvaHlwZXJ2Lmg+CisjaW5jbHVkZSA8ZGV2L2h5cGVy
di9pbmNsdWRlL3ZtYnVzLmg+CisKKy8qCisgKiBIeXBlclYgU29ja2V0IFByb3RvY29scworICov
CisjZGVmaW5lCUhZUEVSVl9TT0NLX1BST1RPX1RSQU5TCQkxCS8qIFRyYW5zcG9ydCBwcm90b2Nv
bCAqLworCisjZGVmaW5lCUhWQUREUl9QT1JUX0FOWQkJCS0xVQorI2RlZmluZQlIVkFERFJfUE9S
VF9VTktOT1dOCQktMVUKKworI2RlZmluZSBIVlNfTElTVF9CT1VORAkJCTB4MDEKKyNkZWZpbmUg
SFZTX0xJU1RfQ09OTkVDVEVECQkweDAyCisjZGVmaW5lIEhWU19MSVNUX0FMTAkJCShIVlNfTElT
VF9CT1VORCB8IEhWU19MSVNUX0NPTk5FQ1RFRCkKKworc3RydWN0IHNvY2thZGRyX2h2cyB7CisJ
dW5zaWduZWQgY2hhcglzYV9sZW47CisJc2FfZmFtaWx5X3QJc2FfZmFtaWx5OworCXVuc2lnbmVk
IGludAlodnNfcG9ydDsKKwl1bnNpZ25lZCBjaGFyCWh2c196ZXJvW3NpemVvZihzdHJ1Y3Qgc29j
a2FkZHIpIC0KKwkJCQkgc2l6ZW9mKHNhX2ZhbWlseV90KSAtCisJCQkJIHNpemVvZih1bnNpZ25l
ZCBjaGFyKSAtCisJCQkJIHNpemVvZih1bnNpZ25lZCBpbnQpXTsKK307CisKK3N0cnVjdCB2bXBp
cGVfcHJvdG9faGVhZGVyIHsKKwl1aW50MzJfdAkJCXZtcGlwZV9wa3RfdHlwZTsKKwl1aW50MzJf
dAkJCXZtcGlwZV9kYXRhX3NpemU7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgaHZzX3BrdF9oZWFk
ZXIgeworCXN0cnVjdCB2bWJ1c19jaGFucGt0X2hkcgljaGFuX3BrdF9oZHI7CisJc3RydWN0IHZt
cGlwZV9wcm90b19oZWFkZXIJdm1waXBlX3BrdF9oZHI7Cit9IF9fcGFja2VkOworCitzdHJ1Y3Qg
aHZzX3BjYiB7CisJc3RydWN0IHNvY2tldAkJCSpzbzsJCS8qIFBvaW50ZXIgdG8gc29ja2V0ICov
CisJc3RydWN0IHNvY2thZGRyX2h2cwkJbG9jYWxfYWRkcjsKKwlzdHJ1Y3Qgc29ja2FkZHJfaHZz
CQlyZW1vdGVfYWRkcjsKKworCXN0cnVjdCBoeXBlcnZfZ3VpZAkJdm1fc3J2X2lkOworCXN0cnVj
dCBoeXBlcnZfZ3VpZAkJaG9zdF9zcnZfaWQ7CisKKwlzdHJ1Y3Qgdm1idXNfY2hhbm5lbAkJKmNo
YW47CisJLyogQ3VycmVudCBwYWNrZXQgaGVhZGVyIG9uIHJ4IHJpbmcgKi8KKwlzdHJ1Y3QgaHZz
X3BrdF9oZWFkZXIJCWh2c19wa3Q7CisJLyogQXZhaWxhYmxlIGRhdGEgaW4gcmVjZWl2ZSBiciBp
biBjdXJyZW50IHBhY2tldCAqLworCXVpbnQzMl90CQkJcmVjdl9kYXRhX2xlbjsKKwkvKiBvZmZz
ZXQgaW4gdGhlIHBhY2tldCAqLworCXVpbnQzMl90CQkJcmVjdl9kYXRhX29mZjsKKwlib29sCQkJ
CXJiX2luaXQ7CisJLyogTGluayBsaXN0cyBmb3IgZ2xvYmFsIGJvdW5kIGFuZCBjb25uZWN0ZWQg
c29ja2V0cyAqLworCUxJU1RfRU5UUlkoaHZzX3BjYikJCWJvdW5kX25leHQ7CisJTElTVF9FTlRS
WShodnNfcGNiKQkJY29ubmVjdGVkX25leHQ7Cit9OworCisjZGVmaW5lIHNvMmh2c3BjYihzbykg
XAorCSgoc3RydWN0IGh2c19wY2IgKikoKHNvKS0+c29fcGNiKSkKKyNkZWZpbmUgaHN2cGNiMnNv
KGh2c3BjYikgXAorCSgoc3RydWN0IHNvY2tldCAqKSgoaHZzcGNiKS0+c28pKQorCit2b2lkCWh2
c19hZGRyX2luaXQoc3RydWN0IHNvY2thZGRyX2h2cyAqLCBjb25zdCBzdHJ1Y3QgaHlwZXJ2X2d1
aWQgKik7Cit2b2lkCWh2c190cmFuc19pbml0KHZvaWQpOwordm9pZAlodnNfdHJhbnNfY2xvc2Uo
c3RydWN0IHNvY2tldCAqKTsKK3ZvaWQJaHZzX3RyYW5zX2RldGFjaChzdHJ1Y3Qgc29ja2V0ICop
Owordm9pZAlodnNfdHJhbnNfYWJvcnQoc3RydWN0IHNvY2tldCAqKTsKK2ludAlodnNfdHJhbnNf
YXR0YWNoKHN0cnVjdCBzb2NrZXQgKiwgaW50LCBzdHJ1Y3QgdGhyZWFkICopOworaW50CWh2c190
cmFuc19iaW5kKHN0cnVjdCBzb2NrZXQgKiwgc3RydWN0IHNvY2thZGRyICosIHN0cnVjdCB0aHJl
YWQgKik7CitpbnQJaHZzX3RyYW5zX2xpc3RlbihzdHJ1Y3Qgc29ja2V0ICosIGludCwgc3RydWN0
IHRocmVhZCAqKTsKK2ludAlodnNfdHJhbnNfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKiwgc3RydWN0
IHNvY2thZGRyICoqKTsKK2ludAlodnNfdHJhbnNfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICosCisJ
ICAgIHN0cnVjdCBzb2NrYWRkciAqLCBzdHJ1Y3QgdGhyZWFkICopOworaW50CWh2c190cmFuc19w
ZWVyYWRkcihzdHJ1Y3Qgc29ja2V0ICosIHN0cnVjdCBzb2NrYWRkciAqKik7CitpbnQJaHZzX3Ry
YW5zX3NvY2thZGRyKHN0cnVjdCBzb2NrZXQgKiwgc3RydWN0IHNvY2thZGRyICoqKTsKK2ludAlo
dnNfdHJhbnNfc29yZWNlaXZlKHN0cnVjdCBzb2NrZXQgKiwgc3RydWN0IHNvY2thZGRyICoqLAor
CSAgICBzdHJ1Y3QgdWlvICosIHN0cnVjdCBtYnVmICoqLCBzdHJ1Y3QgbWJ1ZiAqKiwgaW50ICop
OworaW50CWh2c190cmFuc19zb3NlbmQoc3RydWN0IHNvY2tldCAqLCBzdHJ1Y3Qgc29ja2FkZHIg
Kiwgc3RydWN0IHVpbyAqLAorCSAgICAgc3RydWN0IG1idWYgKiwgc3RydWN0IG1idWYgKiwgaW50
LCBzdHJ1Y3QgdGhyZWFkICopOworaW50CWh2c190cmFuc19kaXNjb25uZWN0KHN0cnVjdCBzb2Nr
ZXQgKik7CitpbnQJaHZzX3RyYW5zX3NodXRkb3duKHN0cnVjdCBzb2NrZXQgKik7CisKK2ludAlo
dnNfdHJhbnNfbG9jayh2b2lkKTsKK3ZvaWQJaHZzX3RyYW5zX3VubG9jayh2b2lkKTsKKwordm9p
ZAlodnNfcmVtb3ZlX3NvY2tldF9mcm9tX2xpc3Qoc3RydWN0IHNvY2tldCAqLCB1bnNpZ25lZCBj
aGFyKTsKKyNlbmRpZiAvKiBfSFZTT0NLX0ggKi8KZGlmZiAtLWdpdCBhL3N5cy9kZXYvaHlwZXJ2
L2h2c29jay9odl9zb2NrLmMgYi9zeXMvZGV2L2h5cGVydi9odnNvY2svaHZfc29jay5jCi0tLSBh
L3N5cy9kZXYvaHlwZXJ2L2h2c29jay9odl9zb2NrLmMKKysrIGIvc3lzL2Rldi9oeXBlcnYvaHZz
b2NrL2h2X3NvY2suYwpAQCAtMCwwICsxLDE3NDggQEAKKy8qLQorICogU1BEWC1MaWNlbnNlLUlk
ZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1GcmVlQlNECisgKgorICogQ29weXJpZ2h0IChjKSAyMDIw
IE1pY3Jvc29mdCBDb3JwLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Ug
dW5tb2RpZmllZCwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGFuZCB0aGUgZm9sbG93aW5nCisg
KiAgICBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVU
SE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAq
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJT
RElEKCIkRnJlZUJTRCQiKTsKKworI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5
cy9idXMuaD4KKyNpbmNsdWRlIDxzeXMvZG9tYWluLmg+CisjaW5jbHVkZSA8c3lzL2xvY2suaD4K
KyNpbmNsdWRlIDxzeXMva2VybmVsLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVk
ZSA8c3lzL21hbGxvYy5oPgorI2luY2x1ZGUgPHN5cy9tb2R1bGUuaD4KKyNpbmNsdWRlIDxzeXMv
bXV0ZXguaD4KKyNpbmNsdWRlIDxzeXMvcHJvYy5oPgorI2luY2x1ZGUgPHN5cy9wcm90b3N3Lmg+
CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPHN5cy9zeXNjdGwuaD4KKyNpbmNs
dWRlIDxzeXMvc3lzcHJvdG8uaD4KKyNpbmNsdWRlIDxzeXMvc3lzdG0uaD4KKyNpbmNsdWRlIDxz
eXMvc29ja2J1Zi5oPgorI2luY2x1ZGUgPHN5cy9zeC5oPgorI2luY2x1ZGUgPHN5cy91aW8uaD4K
KworI2luY2x1ZGUgPG5ldC92bmV0Lmg+CisKKyNpbmNsdWRlIDxkZXYvaHlwZXJ2L3ZtYnVzL3Zt
YnVzX3JlZy5oPgorCisjaW5jbHVkZSAiaHZfc29jay5oIgorCisjZGVmaW5lIEhWU09DS19EQkdf
Tk9ORQkJCTB4MAorI2RlZmluZSBIVlNPQ0tfREJHX0lORk8JCQkweDEKKyNkZWZpbmUgSFZTT0NL
X0RCR19FUlIJCQkweDIKKyNkZWZpbmUgSFZTT0NLX0RCR19WRVJCT1NFCQkweDMKKworCitTWVND
VExfTk9ERShfbmV0LCBPSURfQVVUTywgaHZzb2NrLCBDVExGTEFHX1JELCAwLCAiSHlwZXJWIHNv
Y2tldCIpOworCitzdGF0aWMgaW50IGh2c19kYmdfbGV2ZWw7CitTWVNDVExfSU5UKF9uZXRfaHZz
b2NrLCBPSURfQVVUTywgaHZzX2RiZ19sZXZlbCwgQ1RMRkxBR19SV1RVTiwgJmh2c19kYmdfbGV2
ZWwsCisgICAgMCwgImh5cGVydiBzb2NrZXQgZGVidWcgbGV2ZWw6IDAgPSBub25lLCAxID0gaW5m
bywgMiA9IGVycm9yLCAzID0gdmVyYm9zZSIpOworCisKKyNkZWZpbmUgSFZTT0NLX0RCRyhsZXZl
bCwgLi4uKSBkbyB7CQkJCQlcCisJaWYgKGh2c19kYmdfbGV2ZWwgPj0gKGxldmVsKSkJCQkJCVwK
KwkJcHJpbnRmKF9fVkFfQVJHU19fKTsJCQkJCVwKKwl9IHdoaWxlICgwKQorCitNQUxMT0NfREVG
SU5FKE1fSFZTT0NLLCAiaHlwZXJ2X3NvY2tldCIsICJoeXBlcnYgc29ja2V0IGNvbnRyb2wgc3Ry
dWN0dXJlcyIpOworCisvKiBUaGUgTVRVIGlzIDE2S0IgcGVyIGhvc3Qgc2lkZSdzIGRlc2lnbiAq
LworI2RlZmluZSBIVlNPQ0tfTVRVX1NJWkUJCSgxMDI0ICogMTYpCisjZGVmaW5lIEhWU09DS19T
RU5EX0JVRl9TWgkoUEFHRV9TSVpFIC0gc2l6ZW9mKHN0cnVjdCB2bXBpcGVfcHJvdG9faGVhZGVy
KSkKKworI2RlZmluZSBIVlNPQ0tfSEVBREVSX0xFTgkoc2l6ZW9mKHN0cnVjdCBodnNfcGt0X2hl
YWRlcikpCisKKyNkZWZpbmUgSFZTT0NLX1BLVF9MRU4ocGF5bG9hZF9sZW4pCShIVlNPQ0tfSEVB
REVSX0xFTiArIFwKKwkJCQkJIHJvdW5kdXAyKHBheWxvYWRfbGVuLCA4KSArIFwKKwkJCQkJIHNp
emVvZih1aW50NjRfdCkpCisKKworc3RhdGljIHN0cnVjdCBkb21haW4JCWh2X3NvY2tldF9kb21h
aW47CisKKy8qCisgKiBIeXBlclYgVHJhbnNwb3J0IHNvY2tldHMKKyAqLworc3RhdGljIHN0cnVj
dCBwcl91c3JyZXFzCWh2c190cmFuc191c3JyZXFzID0geworCS5wcnVfYXR0YWNoID0JCWh2c190
cmFuc19hdHRhY2gsCisJLnBydV9iaW5kID0JCWh2c190cmFuc19iaW5kLAorCS5wcnVfbGlzdGVu
ID0JCWh2c190cmFuc19saXN0ZW4sCisJLnBydV9hY2NlcHQgPQkJaHZzX3RyYW5zX2FjY2VwdCwK
KwkucHJ1X2Nvbm5lY3QgPQkJaHZzX3RyYW5zX2Nvbm5lY3QsCisJLnBydV9wZWVyYWRkciA9CQlo
dnNfdHJhbnNfcGVlcmFkZHIsCisJLnBydV9zb2NrYWRkciA9CQlodnNfdHJhbnNfc29ja2FkZHIs
CisJLnBydV9zb3JlY2VpdmUgPQlodnNfdHJhbnNfc29yZWNlaXZlLAorCS5wcnVfc29zZW5kID0J
CWh2c190cmFuc19zb3NlbmQsCisJLnBydV9kaXNjb25uZWN0ID0JaHZzX3RyYW5zX2Rpc2Nvbm5l
Y3QsCisJLnBydV9jbG9zZSA9CQlodnNfdHJhbnNfY2xvc2UsCisJLnBydV9kZXRhY2ggPQkJaHZz
X3RyYW5zX2RldGFjaCwKKwkucHJ1X3NodXRkb3duID0JCWh2c190cmFuc19zaHV0ZG93biwKKwku
cHJ1X2Fib3J0ID0JCWh2c190cmFuc19hYm9ydCwKK307CisKKy8qCisgKiBEZWZpbml0aW9ucyBv
ZiBwcm90b2NvbHMgc3VwcG9ydGVkIGluIEh5cGVyViBzb2NrZXQgZG9tYWluCisgKi8KK3N0YXRp
YyBzdHJ1Y3QgcHJvdG9zdwkJaHZfc29ja2V0X3Byb3Rvc3dbXSA9IHsKK3sKKwkucHJfdHlwZSA9
CQlTT0NLX1NUUkVBTSwKKwkucHJfZG9tYWluID0JCSZodl9zb2NrZXRfZG9tYWluLAorCS5wcl9w
cm90b2NvbCA9CQlIWVBFUlZfU09DS19QUk9UT19UUkFOUywKKwkucHJfZmxhZ3MgPQkJUFJfQ09O
TlJFUVVJUkVELAorCS5wcl9pbml0ID0JCWh2c190cmFuc19pbml0LAorCS5wcl91c3JyZXFzID0J
CSZodnNfdHJhbnNfdXNycmVxcywKK30sCit9OworCitzdGF0aWMgc3RydWN0IGRvbWFpbgkJaHZf
c29ja2V0X2RvbWFpbiA9IHsKKwkuZG9tX2ZhbWlseSA9CQlBRl9IWVBFUlYsCisJLmRvbV9uYW1l
ID0JCSJoeXBlcnYiLAorCS5kb21fcHJvdG9zdyA9CQlodl9zb2NrZXRfcHJvdG9zdywKKwkuZG9t
X3Byb3Rvc3dOUFJPVE9TVyA9CSZodl9zb2NrZXRfcHJvdG9zd1tuaXRlbXMoaHZfc29ja2V0X3By
b3Rvc3cpXQorfTsKKworVk5FVF9ET01BSU5fU0VUKGh2X3NvY2tldF8pOworCisjZGVmaW5lIE1B
WF9QT1JUCQkJKCh1aW50MzJfdCkweEZGRkZGRkZGKQorI2RlZmluZSBNSU5fUE9SVAkJCSgodWlu
dDMyX3QpMHgwKQorCisvKiAwMDAwMDAwMC1mYWNiLTExZTYtYmQ1OC02NDAwNmE3OTg2ZDMgKi8K
K3N0YXRpYyBjb25zdCBzdHJ1Y3QgaHlwZXJ2X2d1aWQgc3J2X2lkX3RlbXBsYXRlID0geworCS5o
dl9ndWlkID0geworCSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNiLCAweGZhLCAweGU2
LCAweDExLAorCSAgICAweGJkLCAweDU4LCAweDY0LCAweDAwLCAweDZhLCAweDc5LCAweDg2LCAw
eGQzIH0KK307CisKK3N0YXRpYyBpbnQJCWh2c29ja19icl9jYWxsYmFjayh2b2lkICosIGludCwg
dm9pZCAqKTsKK3N0YXRpYyB1aW50MzJfdAkJaHZzb2NrX2NhbnJlYWRfY2hlY2soc3RydWN0IGh2
c19wY2IgKik7CitzdGF0aWMgdWludDMyX3QJCWh2c29ja19jYW53cml0ZV9jaGVjayhzdHJ1Y3Qg
aHZzX3BjYiAqKTsKK3N0YXRpYyBpbnQJCWh2c29ja19zZW5kX2RhdGEoc3RydWN0IHZtYnVzX2No
YW5uZWwgKmNoYW4sCisgICAgc3RydWN0IHVpbyAqdWlvLCB1aW50MzJfdCB0b193cml0ZSwgc3Ry
dWN0IHNvY2tidWYgKnNiKTsKKworCisKKy8qIEdsb2JhbHMgKi8KK3N0YXRpYyBzdHJ1Y3Qgc3gJ
CWh2c190cmFuc19zb2Nrc19zeDsKK3N0YXRpYyBzdHJ1Y3QgbXR4CQlodnNfdHJhbnNfc29ja3Nf
bXR4Oworc3RhdGljIExJU1RfSEVBRCgsIGh2c19wY2IpCWh2c190cmFuc19ib3VuZF9zb2NrczsK
K3N0YXRpYyBMSVNUX0hFQUQoLCBodnNfcGNiKQlodnNfdHJhbnNfY29ubmVjdGVkX3NvY2tzOwor
c3RhdGljIHVpbnQzMl90CQkJcHJldmlvdXNfYXV0b19ib3VuZF9wb3J0OworCitzdGF0aWMgdm9p
ZAoraHZzb2NrX3ByaW50X2d1aWQoc3RydWN0IGh5cGVydl9ndWlkICpndWlkKQoreworCXVuc2ln
bmVkIGNoYXIgKnAgPSAodW5zaWduZWQgY2hhciAqKWd1aWQ7CisKKwlIVlNPQ0tfREJHKEhWU09D
S19EQkdfSU5GTywKKwkgICAgIjB4JXgtMHgleC0weCV4LTB4JXgtMHgleC0weCV4LTB4JXgtMHgl
eC0weCV4LTB4JXgtMHgleFxuIiwKKwkgICAgKih1bnNpZ25lZCBpbnQgKilwLAorCSAgICAqKCh1
bnNpZ25lZCBzaG9ydCAqKSAmcFs0XSksCisJICAgICooKHVuc2lnbmVkIHNob3J0ICopICZwWzZd
KSwKKwkgICAgcFs4XSwgcFs5XSwgcFsxMF0sIHBbMTFdLCBwWzEyXSwgcFsxM10sIHBbMTRdLCBw
WzE1XSk7Cit9CisKK3N0YXRpYyBib29sCitpc192YWxpZF9zcnZfaWQoY29uc3Qgc3RydWN0IGh5
cGVydl9ndWlkICppZCkKK3sKKwlyZXR1cm4gIW1lbWNtcCgmaWQtPmh2X2d1aWRbNF0sCisJICAg
ICZzcnZfaWRfdGVtcGxhdGUuaHZfZ3VpZFs0XSwgc2l6ZW9mKHN0cnVjdCBoeXBlcnZfZ3VpZCkg
LSA0KTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludAorZ2V0X3BvcnRfYnlfc3J2X2lkKGNvbnN0
IHN0cnVjdCBoeXBlcnZfZ3VpZCAqc3J2X2lkKQoreworCXJldHVybiAqKChjb25zdCB1bnNpZ25l
ZCBpbnQgKilzcnZfaWQpOworfQorCitzdGF0aWMgdm9pZAorc2V0X3BvcnRfYnlfc3J2X2lkKHN0
cnVjdCBoeXBlcnZfZ3VpZCAqc3J2X2lkLCB1bnNpZ25lZCBpbnQgcG9ydCkKK3sKKwkqKCh1bnNp
Z25lZCBpbnQgKilzcnZfaWQpID0gcG9ydDsKK30KKworCitzdGF0aWMgdm9pZAorX19odnNfcmVt
b3ZlX3BjYl9mcm9tX2xpc3Qoc3RydWN0IGh2c19wY2IgKnBjYiwgdW5zaWduZWQgY2hhciBsaXN0
KQoreworCXN0cnVjdCBodnNfcGNiICpwID0gTlVMTDsKKworCUhWU09DS19EQkcoSFZTT0NLX0RC
R19WRVJCT1NFLCAiJXM6IHBjYiBpcyAlcFxuIiwgX19mdW5jX18sIHBjYik7CisKKwlpZiAoIXBj
YikKKwkJcmV0dXJuOworCisJaWYgKGxpc3QgJiBIVlNfTElTVF9CT1VORCkgeworCQlMSVNUX0ZP
UkVBQ0gocCwgJmh2c190cmFuc19ib3VuZF9zb2NrcywgYm91bmRfbmV4dCkKKwkJCWlmICAocCA9
PSBwY2IpCisJCQkJTElTVF9SRU1PVkUocCwgYm91bmRfbmV4dCk7CisJfQorCisJaWYgKGxpc3Qg
JiBIVlNfTElTVF9DT05ORUNURUQpIHsKKwkJTElTVF9GT1JFQUNIKHAsICZodnNfdHJhbnNfY29u
bmVjdGVkX3NvY2tzLCBjb25uZWN0ZWRfbmV4dCkKKwkJCWlmIChwID09IHBjYikKKwkJCQlMSVNU
X1JFTU9WRShwY2IsIGNvbm5lY3RlZF9uZXh0KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitfX2h2
c19yZW1vdmVfc29ja2V0X2Zyb21fbGlzdChzdHJ1Y3Qgc29ja2V0ICpzbywgdW5zaWduZWQgY2hh
ciBsaXN0KQoreworCXN0cnVjdCBodnNfcGNiICpwY2IgPSBzbzJodnNwY2Ioc28pOworCisJSFZT
T0NLX0RCRyhIVlNPQ0tfREJHX1ZFUkJPU0UsICIlczogcGNiIGlzICVwXG4iLCBfX2Z1bmNfXywg
cGNiKTsKKworCV9faHZzX3JlbW92ZV9wY2JfZnJvbV9saXN0KHBjYiwgbGlzdCk7Cit9CisKK3N0
YXRpYyB2b2lkCitfX2h2c19pbnNlcnRfc29ja2V0X29uX2xpc3Qoc3RydWN0IHNvY2tldCAqc28s
IHVuc2lnbmVkIGNoYXIgbGlzdCkKK3sKKwlzdHJ1Y3QgaHZzX3BjYiAqcGNiID0gc28yaHZzcGNi
KHNvKTsKKworCWlmIChsaXN0ICYgSFZTX0xJU1RfQk9VTkQpCisJCUxJU1RfSU5TRVJUX0hFQUQo
Jmh2c190cmFuc19ib3VuZF9zb2NrcywKKwkJICAgcGNiLCBib3VuZF9uZXh0KTsKKworCWlmIChs
aXN0ICYgSFZTX0xJU1RfQ09OTkVDVEVEKQorCQlMSVNUX0lOU0VSVF9IRUFEKCZodnNfdHJhbnNf
Y29ubmVjdGVkX3NvY2tzLAorCQkgICBwY2IsIGNvbm5lY3RlZF9uZXh0KTsKK30KKwordm9pZAor
aHZzX3JlbW92ZV9zb2NrZXRfZnJvbV9saXN0KHN0cnVjdCBzb2NrZXQgKnNvLCB1bnNpZ25lZCBj
aGFyIGxpc3QpCit7CisJaWYgKCFzbyB8fCAhc28tPnNvX3BjYikgeworCQlIVlNPQ0tfREJHKEhW
U09DS19EQkdfVkVSQk9TRSwKKwkJICAgICIlczogc29ja2V0IG9yIHNvX3BjYiBpcyBudWxsXG4i
LCBfX2Z1bmNfXyk7CisJCXJldHVybjsKKwl9CisKKwltdHhfbG9jaygmaHZzX3RyYW5zX3NvY2tz
X210eCk7CisJX19odnNfcmVtb3ZlX3NvY2tldF9mcm9tX2xpc3Qoc28sIGxpc3QpOworCW10eF91
bmxvY2soJmh2c190cmFuc19zb2Nrc19tdHgpOworfQorCitzdGF0aWMgdm9pZAoraHZzX2luc2Vy
dF9zb2NrZXRfb25fbGlzdChzdHJ1Y3Qgc29ja2V0ICpzbywgdW5zaWduZWQgY2hhciBsaXN0KQor
eworCWlmICghc28gfHwgIXNvLT5zb19wY2IpIHsKKwkJSFZTT0NLX0RCRyhIVlNPQ0tfREJHX1ZF
UkJPU0UsCisJCSAgICAiJXM6IHNvY2tldCBvciBzb19wY2IgaXMgbnVsbFxuIiwgX19mdW5jX18p
OworCQlyZXR1cm47CisJfQorCisJbXR4X2xvY2soJmh2c190cmFuc19zb2Nrc19tdHgpOworCV9f
aHZzX2luc2VydF9zb2NrZXRfb25fbGlzdChzbywgbGlzdCk7CisJbXR4X3VubG9jaygmaHZzX3Ry
YW5zX3NvY2tzX210eCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc29ja2V0ICoKK19faHZzX2ZpbmRf
c29ja2V0X29uX2xpc3Qoc3RydWN0IHNvY2thZGRyX2h2cyAqYWRkciwgdW5zaWduZWQgY2hhciBs
aXN0KQoreworCXN0cnVjdCBodnNfcGNiICpwID0gTlVMTDsKKworCWlmIChsaXN0ICYgSFZTX0xJ
U1RfQk9VTkQpCisJCUxJU1RfRk9SRUFDSChwLCAmaHZzX3RyYW5zX2JvdW5kX3NvY2tzLCBib3Vu
ZF9uZXh0KQorCQkJaWYgKHAtPnNvICE9IE5VTEwgJiYKKwkJCSAgICBhZGRyLT5odnNfcG9ydCA9
PSBwLT5sb2NhbF9hZGRyLmh2c19wb3J0KQorCQkJCXJldHVybiBwLT5zbzsKKworCWlmIChsaXN0
ICYgSFZTX0xJU1RfQ09OTkVDVEVEKQorCQlMSVNUX0ZPUkVBQ0gocCwgJmh2c190cmFuc19jb25u
ZWN0ZWRfc29ja3MsIGNvbm5lY3RlZF9uZXh0KQorCQkJaWYgKHAtPnNvICE9IE5VTEwgJiYKKwkJ
CSAgICBhZGRyLT5odnNfcG9ydCA9PSBwLT5sb2NhbF9hZGRyLmh2c19wb3J0KQorCQkJCXJldHVy
biBwLT5zbzsKKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IHNvY2tldCAqCito
dnNfZmluZF9zb2NrZXRfb25fbGlzdChzdHJ1Y3Qgc29ja2FkZHJfaHZzICphZGRyLCB1bnNpZ25l
ZCBjaGFyIGxpc3QpCit7CisJc3RydWN0IHNvY2tldCAqcyA9IE5VTEw7CisKKwltdHhfbG9jaygm
aHZzX3RyYW5zX3NvY2tzX210eCk7CisJcyA9IF9faHZzX2ZpbmRfc29ja2V0X29uX2xpc3QoYWRk
ciwgbGlzdCk7CisJbXR4X3VubG9jaygmaHZzX3RyYW5zX3NvY2tzX210eCk7CisKKwlyZXR1cm4g
czsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitodnNfYWRkcl9zZXQoc3RydWN0IHNvY2thZGRy
X2h2cyAqYWRkciwgdW5zaWduZWQgaW50IHBvcnQpCit7CisJbWVtc2V0KGFkZHIsIDAsIHNpemVv
ZigqYWRkcikpOworCWFkZHItPnNhX2ZhbWlseSA9IEFGX0hZUEVSVjsKKwlhZGRyLT5odnNfcG9y
dCA9IHBvcnQ7Cit9CisKK3ZvaWQKK2h2c19hZGRyX2luaXQoc3RydWN0IHNvY2thZGRyX2h2cyAq
YWRkciwgY29uc3Qgc3RydWN0IGh5cGVydl9ndWlkICpzdnJfaWQpCit7CisJaHZzX2FkZHJfc2V0
KGFkZHIsIGdldF9wb3J0X2J5X3Nydl9pZChzdnJfaWQpKTsKK30KKworaW50CitodnNfdHJhbnNf
bG9jayh2b2lkKQoreworCXN4X3hsb2NrKCZodnNfdHJhbnNfc29ja3Nfc3gpOworCXJldHVybiAo
MCk7Cit9CisKK3ZvaWQKK2h2c190cmFuc191bmxvY2sodm9pZCkKK3sKKwlzeF94dW5sb2NrKCZo
dnNfdHJhbnNfc29ja3Nfc3gpOworfQorCit2b2lkCitodnNfdHJhbnNfaW5pdCh2b2lkKQorewor
CS8qIFNraXAgaW5pdGlhbGl6YXRpb24gb2YgZ2xvYmFscyBmb3Igbm9uLWRlZmF1bHQgaW5zdGFu
Y2VzLiAqLworCWlmICghSVNfREVGQVVMVF9WTkVUKGN1cnZuZXQpKQorCQlyZXR1cm47CisKKwlp
ZiAodm1fZ3Vlc3QgIT0gVk1fR1VFU1RfSFYpCisJCXJldHVybjsKKworCUhWU09DS19EQkcoSFZT
T0NLX0RCR19WRVJCT1NFLAorCSAgICAiJXM6IEh5cGVyViBTb2NrZXQgaHZzX3RyYW5zX2luaXQg
Y2FsbGVkXG4iLCBfX2Z1bmNfXyk7CisKKwkvKiBJbml0aWFsaXplIEdsb2JhbHMgKi8KKwlwcmV2
aW91c19hdXRvX2JvdW5kX3BvcnQgPSBNQVhfUE9SVDsKKwlzeF9pbml0KCZodnNfdHJhbnNfc29j
a3Nfc3gsICJodnNfdHJhbnNfc29ja19zeCIpOworCW10eF9pbml0KCZodnNfdHJhbnNfc29ja3Nf
bXR4LAorCSAgICAiaHZzX3RyYW5zX3NvY2tzX210eCIsIE5VTEwsIE1UWF9ERUYpOworCUxJU1Rf
SU5JVCgmaHZzX3RyYW5zX2JvdW5kX3NvY2tzKTsKKwlMSVNUX0lOSVQoJmh2c190cmFuc19jb25u
ZWN0ZWRfc29ja3MpOworfQorCisvKgorICogQ2FsbGVkIGluIHR3byBjYXNlczoKKyAqIDEpIFdo
ZW4gdXNlciBjYWxscyBzb2NrZXQoKTsKKyAqIDIpIFdoZW4gd2UgYWNjZXB0IG5ldyBpbmNvbWlu
ZyBjb25uZWNpdG9uIGFuZCBjYWxsIHNvbmV3Y29ubigpLgorICovCitpbnQKK2h2c190cmFuc19h
dHRhY2goc3RydWN0IHNvY2tldCAqc28sIGludCBwcm90bywgc3RydWN0IHRocmVhZCAqdGQpCit7
CisJc3RydWN0IGh2c19wY2IgKnBjYiA9IHNvMmh2c3BjYihzbyk7CisKKwlIVlNPQ0tfREJHKEhW
U09DS19EQkdfVkVSQk9TRSwKKwkgICAgIiVzOiBIeXBlclYgU29ja2V0IGh2c190cmFuc19hdHRh
Y2ggY2FsbGVkXG4iLCBfX2Z1bmNfXyk7CisKKwlpZiAoc28tPnNvX3R5cGUgIT0gU09DS19TVFJF
QU0pCisJCXJldHVybiAoRVNPQ0tUTk9TVVBQT1JUKTsKKworCWlmIChwcm90byAhPSAwICYmIHBy
b3RvICE9IEhZUEVSVl9TT0NLX1BST1RPX1RSQU5TKQorCQlyZXR1cm4gKEVQUk9UT05PU1VQUE9S
VCk7CisKKwlpZiAocGNiICE9IE5VTEwpCisJCXJldHVybiAoRUlTQ09OTik7CisJcGNiID0gbWFs
bG9jKHNpemVvZihzdHJ1Y3QgaHZzX3BjYiksIE1fSFZTT0NLLCBNX05PV0FJVCB8IE1fWkVSTyk7
CisJaWYgKHBjYiA9PSBOVUxMKQorCQlyZXR1cm4gKEVOT01FTSk7CisKKwlwY2ItPnNvID0gc287
CisJc28tPnNvX3BjYiA9ICh2b2lkICopcGNiOworCisJcmV0dXJuICgwKTsKK30KKwordm9pZAor
aHZzX3RyYW5zX2RldGFjaChzdHJ1Y3Qgc29ja2V0ICpzbykKK3sKKwlzdHJ1Y3QgaHZzX3BjYiAq
cGNiOworCisJSFZTT0NLX0RCRyhIVlNPQ0tfREJHX1ZFUkJPU0UsCisJICAgICIlczogSHlwZXJW
IFNvY2tldCBodnNfdHJhbnNfZGV0YWNoIGNhbGxlZFxuIiwgX19mdW5jX18pOworCisJKHZvaWQp
IGh2c190cmFuc19sb2NrKCk7CisJcGNiID0gc28yaHZzcGNiKHNvKTsKKwlpZiAocGNiID09IE5V
TEwpIHsKKwkJaHZzX3RyYW5zX3VubG9jaygpOworCQlyZXR1cm47CisJfQorCisJaWYgKFNPTElT
VEVOSU5HKHNvKSkgeworCQliemVybyhwY2IsIHNpemVvZigqcGNiKSk7CisJCWZyZWUocGNiLCBN
X0hWU09DSyk7CisJfQorCisJc28tPnNvX3BjYiA9IE5VTEw7CisKKwlodnNfdHJhbnNfdW5sb2Nr
KCk7Cit9CisKK2ludAoraHZzX3RyYW5zX2JpbmQoc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBz
b2NrYWRkciAqYWRkciwgc3RydWN0IHRocmVhZCAqdGQpCit7CisJc3RydWN0IGh2c19wY2IgKnBj
YiA9IHNvMmh2c3BjYihzbyk7CisJc3RydWN0IHNvY2thZGRyX2h2cyAqc2EgPSAoc3RydWN0IHNv
Y2thZGRyX2h2cyAqKSBhZGRyOworCWludCBlcnJvciA9IDA7CisKKwlIVlNPQ0tfREJHKEhWU09D
S19EQkdfVkVSQk9TRSwKKwkgICAgIiVzOiBIeXBlclYgU29ja2V0IGh2c190cmFuc19iaW5kIGNh
bGxlZFxuIiwgX19mdW5jX18pOworCisJaWYgKHNhID09IE5VTEwpIHsKKwkJcmV0dXJuIChFSU5W
QUwpOworCX0KKworCWlmIChwY2IgPT0gTlVMTCkgeworCQlyZXR1cm4gKEVJTlZBTCk7CisJfQor
CisJaWYgKHNhLT5zYV9mYW1pbHkgIT0gQUZfSFlQRVJWKSB7CisJCUhWU09DS19EQkcoSFZTT0NL
X0RCR19FUlIsCisJCSAgICAiJXM6IE5vdCBzdXBwb3J0ZWQsIHNhX2ZhbWlseSBpcyAldVxuIiwK
KwkJICAgIF9fZnVuY19fLCBzYS0+c2FfZmFtaWx5KTsKKwkJcmV0dXJuIChFQUZOT1NVUFBPUlQp
OworCX0KKworCUhWU09DS19EQkcoSFZTT0NLX0RCR19WRVJCT1NFLAorCSAgICAiJXM6IGJpbmRp
bmcgcG9ydCA9IDB4JXhcbiIsIF9fZnVuY19fLCBzYS0+aHZzX3BvcnQpOworCisJbXR4X2xvY2so
Jmh2c190cmFuc19zb2Nrc19tdHgpOworCWlmIChfX2h2c19maW5kX3NvY2tldF9vbl9saXN0KHNh
LAorCSAgICBIVlNfTElTVF9CT1VORCB8IEhWU19MSVNUX0NPTk5FQ1RFRCkpIHsKKwkJZXJyb3Ig
PSBFQUREUklOVVNFOworCX0gZWxzZSB7CisJCS8qCisJCSAqIFRoZSBhZGRyZXNzIGlzIGF2YWls
YWJsZSBmb3IgdXMgdG8gYmluZC4KKwkJICogQWRkIHNvY2tldCB0byB0aGUgYm91bmQgbGlzdC4K
KwkJICovCisJCWh2c19hZGRyX3NldCgmcGNiLT5sb2NhbF9hZGRyLCBzYS0+aHZzX3BvcnQpOwor
CQlodnNfYWRkcl9zZXQoJnBjYi0+cmVtb3RlX2FkZHIsIEhWQUREUl9QT1JUX0FOWSk7CisJCV9f
aHZzX2luc2VydF9zb2NrZXRfb25fbGlzdChzbywgSFZTX0xJU1RfQk9VTkQpOworCX0KKwltdHhf
dW5sb2NrKCZodnNfdHJhbnNfc29ja3NfbXR4KTsKKworCXJldHVybiAoZXJyb3IpOworfQorCitp
bnQKK2h2c190cmFuc19saXN0ZW4oc3RydWN0IHNvY2tldCAqc28sIGludCBiYWNrbG9nLCBzdHJ1
Y3QgdGhyZWFkICp0ZCkKK3sKKwlzdHJ1Y3QgaHZzX3BjYiAqcGNiID0gc28yaHZzcGNiKHNvKTsK
KwlzdHJ1Y3Qgc29ja2V0ICpib3VuZF9zbzsKKwlpbnQgZXJyb3I7CisKKwlIVlNPQ0tfREJHKEhW
U09DS19EQkdfVkVSQk9TRSwKKwkgICAgIiVzOiBIeXBlclYgU29ja2V0IGh2c190cmFuc19saXN0
ZW4gY2FsbGVkXG4iLCBfX2Z1bmNfXyk7CisKKwlpZiAocGNiID09IE5VTEwpCisJCXJldHVybiAo
RUlOVkFMKTsKKworCS8qIENoZWNrIGlmIHRoZSBhZGRyZXNzIGlzIGFscmVhZHkgYm91bmQgYW5k
IGl0IHdhcyBieSB1cy4gKi8KKwlib3VuZF9zbyA9IGh2c19maW5kX3NvY2tldF9vbl9saXN0KCZw
Y2ItPmxvY2FsX2FkZHIsIEhWU19MSVNUX0JPVU5EKTsKKwlpZiAoYm91bmRfc28gPT0gTlVMTCB8
fCBib3VuZF9zbyAhPSBzbykgeworCQlIVlNPQ0tfREJHKEhWU09DS19EQkdfRVJSLAorCQkgICAg
IiVzOiBBZGRyZXNzIG5vdCBib3VuZCBvciBub3QgYnkgdXMuXG4iLCBfX2Z1bmNfXyk7CisJCXJl
dHVybiAoRUFERFJOT1RBVkFJTCk7CisJfQorCisJU09DS19MT0NLKHNvKTsKKwllcnJvciA9IHNv
bGlzdGVuX3Byb3RvX2NoZWNrKHNvKTsKKwlpZiAoZXJyb3IgPT0gMCkKKwkJc29saXN0ZW5fcHJv
dG8oc28sIGJhY2tsb2cpOworCVNPQ0tfVU5MT0NLKHNvKTsKKworCUhWU09DS19EQkcoSFZTT0NL
X0RCR19WRVJCT1NFLAorCSAgICAiJXM6IEh5cGVyViBTb2NrZXQgbGlzdGVuIGVycm9yID0gJWRc
biIsIF9fZnVuY19fLCBlcnJvcik7CisJcmV0dXJuIChlcnJvcik7Cit9CisKK2ludAoraHZzX3Ry
YW5zX2FjY2VwdChzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNvY2thZGRyICoqbmFtKQorewor
CXN0cnVjdCBodnNfcGNiICpwY2IgPSBzbzJodnNwY2Ioc28pOworCisJSFZTT0NLX0RCRyhIVlNP
Q0tfREJHX1ZFUkJPU0UsCisJICAgICIlczogSHlwZXJWIFNvY2tldCBodnNfdHJhbnNfYWNjZXB0
IGNhbGxlZFxuIiwgX19mdW5jX18pOworCisJaWYgKHBjYiA9PSBOVUxMKQorCQlyZXR1cm4gKEVJ
TlZBTCk7CisKKwkqbmFtID0gc29kdXBzb2NrYWRkcigoc3RydWN0IHNvY2thZGRyICopICZwY2It
PnJlbW90ZV9hZGRyLAorCSAgICBNX05PV0FJVCk7CisKKwlyZXR1cm4gKCgqbmFtID09IE5VTEwp
ID8gRU5PTUVNIDogMCk7Cit9CisKK2ludAoraHZzX3RyYW5zX2Nvbm5lY3Qoc3RydWN0IHNvY2tl
dCAqc28sIHN0cnVjdCBzb2NrYWRkciAqbmFtLCBzdHJ1Y3QgdGhyZWFkICp0ZCkKK3sKKwlzdHJ1
Y3QgaHZzX3BjYiAqcGNiID0gc28yaHZzcGNiKHNvKTsKKwlzdHJ1Y3Qgc29ja2FkZHJfaHZzICpy
YWRkciA9IChzdHJ1Y3Qgc29ja2FkZHJfaHZzICopbmFtOworCWJvb2wgZm91bmRfYXV0b19ib3Vu
ZF9wb3J0ID0gZmFsc2U7CisJaW50IGksIGVycm9yID0gMDsKKworCUhWU09DS19EQkcoSFZTT0NL
X0RCR19WRVJCT1NFLAorCSAgICAiJXM6IEh5cGVyViBTb2NrZXQgaHZzX3RyYW5zX2Nvbm5lY3Qg
Y2FsbGVkLCByZW1vdGUgcG9ydCBpcyAleFxuIiwKKwkgICAgX19mdW5jX18sIHJhZGRyLT5odnNf
cG9ydCk7CisKKwlpZiAocGNiID09IE5VTEwpCisJCXJldHVybiAoRUlOVkFMKTsKKworCS8qIFZl
cmlmeSB0aGUgcmVtb3RlIGFkZHJlc3MgKi8KKwlpZiAocmFkZHIgPT0gTlVMTCkKKwkJcmV0dXJu
IChFSU5WQUwpOworCWlmIChyYWRkci0+c2FfZmFtaWx5ICE9IEFGX0hZUEVSVikKKwkJcmV0dXJu
IChFQUZOT1NVUFBPUlQpOworCisJbXR4X2xvY2soJmh2c190cmFuc19zb2Nrc19tdHgpOworCWlm
IChzby0+c29fc3RhdGUgJgorCSAgICAoU1NfSVNDT05ORUNURUR8U1NfSVNESVNDT05ORUNUSU5H
fFNTX0lTQ09OTkVDVElORykpIHsKKwkJCUhWU09DS19EQkcoSFZTT0NLX0RCR19FUlIsCisJCQkg
ICAgIiVzOiBzb2NrZXQgY29ubmVjdCBpbiBwcm9ncmVzc1xuIiwKKwkJCSAgICBfX2Z1bmNfXyk7
CisJCQllcnJvciA9IEVJTlBST0dSRVNTOworCQkJZ290byBvdXQ7CisJfQorCisJLyoKKwkgKiBG
aW5kIGFuIGF2YWlsYWJsZSBwb3J0IGZvciB1cyB0byBhdXRvIGJpbmQgdGhlIGxvY2FsCisJICog
YWRkcmVzcy4KKwkgKi8KKwlodnNfYWRkcl9zZXQoJnBjYi0+bG9jYWxfYWRkciwgMCk7CisKKwlm
b3IgKGkgPSBwcmV2aW91c19hdXRvX2JvdW5kX3BvcnQgLSAxOworCSAgICBpICE9IHByZXZpb3Vz
X2F1dG9fYm91bmRfcG9ydDsgaSAtLSkgeworCQlpZiAoaSA9PSBNSU5fUE9SVCkKKwkJCWkgPSBN
QVhfUE9SVDsKKworCQlwY2ItPmxvY2FsX2FkZHIuaHZzX3BvcnQgPSBpOworCisJCWlmIChfX2h2
c19maW5kX3NvY2tldF9vbl9saXN0KCZwY2ItPmxvY2FsX2FkZHIsCisJCSAgICBIVlNfTElTVF9C
T1VORCB8IEhWU19MSVNUX0NPTk5FQ1RFRCkgPT0gTlVMTCkgeworCQkJZm91bmRfYXV0b19ib3Vu
ZF9wb3J0ID0gdHJ1ZTsKKwkJCXByZXZpb3VzX2F1dG9fYm91bmRfcG9ydCA9IGk7CisJCQlIVlNP
Q0tfREJHKEhWU09DS19EQkdfVkVSQk9TRSwKKwkJCSAgICAiJXM6IGZvdW5kIGxvY2FsIGJvdW5k
IHBvcnQgaXMgJXhcbiIsCisJCQkgICAgX19mdW5jX18sIHBjYi0+bG9jYWxfYWRkci5odnNfcG9y
dCk7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChmb3VuZF9hdXRvX2JvdW5kX3BvcnQgPT0g
dHJ1ZSkgeworCQkvKiBGb3VuZCBhdmFpbGFibGUgcG9ydCBmb3IgYXV0byBib3VuZCwgcHV0IG9u
IGxpc3QgKi8KKwkJX19odnNfaW5zZXJ0X3NvY2tldF9vbl9saXN0KHNvLCBIVlNfTElTVF9CT1VO
RCk7CisJCS8qIFNldCBWTSBzZXJ2aWNlIElEICovCisJCXBjYi0+dm1fc3J2X2lkID0gc3J2X2lk
X3RlbXBsYXRlOworCQlzZXRfcG9ydF9ieV9zcnZfaWQoJnBjYi0+dm1fc3J2X2lkLCBwY2ItPmxv
Y2FsX2FkZHIuaHZzX3BvcnQpOworCQkvKiBTZXQgaG9zdCBzZXJ2aWNlIElEIGFuZCByZW1vdGUg
cG9ydCAqLworCQlwY2ItPmhvc3Rfc3J2X2lkID0gc3J2X2lkX3RlbXBsYXRlOworCQlzZXRfcG9y
dF9ieV9zcnZfaWQoJnBjYi0+aG9zdF9zcnZfaWQsIHJhZGRyLT5odnNfcG9ydCk7CisJCWh2c19h
ZGRyX3NldCgmcGNiLT5yZW1vdGVfYWRkciwgcmFkZHItPmh2c19wb3J0KTsKKworCQkvKiBDaGFu
Z2UgdGhlIHNvY2tldCBzdGF0ZSB0byBTU19JU0NPTk5FQ1RJTkcgKi8KKwkJc29pc2Nvbm5lY3Rp
bmcoc28pOworCX0gZWxzZSB7CisJCUhWU09DS19EQkcoSFZTT0NLX0RCR19FUlIsCisJCSAgICAi
JXM6IE5vIGxvY2FsIHBvcnQgYXZhaWxhYmxlIGZvciBhdXRvIGJvdW5kXG4iLAorCQkgICAgX19m
dW5jX18pOworCQllcnJvciA9IEVBRERSSU5VU0U7CisJfQorCisJSFZTT0NLX0RCRyhIVlNPQ0tf
REJHX0lORk8sICJDb25uZWN0IHZtX3Nydl9pZCBpcyAiKTsKKwlodnNvY2tfcHJpbnRfZ3VpZCgm
cGNiLT52bV9zcnZfaWQpOworCUhWU09DS19EQkcoSFZTT0NLX0RCR19JTkZPLCAiQ29ubmVjdCBo
b3N0X3Nydl9pZCBpcyAiKTsKKwlodnNvY2tfcHJpbnRfZ3VpZCgmcGNiLT5ob3N0X3Nydl9pZCk7
CisKK291dDoKKwltdHhfdW5sb2NrKCZodnNfdHJhbnNfc29ja3NfbXR4KTsKKworCWlmIChmb3Vu
ZF9hdXRvX2JvdW5kX3BvcnQgPT0gdHJ1ZSkKKwkJIHZtYnVzX3JlcV90bF9jb25uZWN0KCZwY2It
PnZtX3Nydl9pZCwgJnBjYi0+aG9zdF9zcnZfaWQpOworCisJcmV0dXJuIChlcnJvcik7Cit9CisK
K2ludAoraHZzX3RyYW5zX2Rpc2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc28pCit7CisJc3RydWN0
IGh2c19wY2IgKnBjYjsKKworCUhWU09DS19EQkcoSFZTT0NLX0RCR19WRVJCT1NFLAorCSAgICAi
JXM6IEh5cGVyViBTb2NrZXQgaHZzX3RyYW5zX2Rpc2Nvbm5lY3QgY2FsbGVkXG4iLCBfX2Z1bmNf
Xyk7CisKKwkodm9pZCkgaHZzX3RyYW5zX2xvY2soKTsKKwlwY2IgPSBzbzJodnNwY2Ioc28pOwor
CWlmIChwY2IgPT0gTlVMTCkgeworCQlodnNfdHJhbnNfdW5sb2NrKCk7CisJCXJldHVybiAoRUlO
VkFMKTsKKwl9CisKKwkvKiBJZiBzb2NrZXQgaXMgYWxyZWFkeSBkaXNjb25uZWN0ZWQsIHNraXAg
dGhpcyAqLworCWlmICgoc28tPnNvX3N0YXRlICYgU1NfSVNESVNDT05ORUNURUQpID09IDApCisJ
CXNvaXNkaXNjb25uZWN0aW5nKHNvKTsKKworCWh2c190cmFuc191bmxvY2soKTsKKworCXJldHVy
biAoMCk7Cit9CisKKyNkZWZpbmUgU0JMT0NLV0FJVChmKQkoKChmKSAmIE1TR19ET05UV0FJVCkg
PyAwIDogU0JMX1dBSVQpCitzdHJ1Y3QgaHZzX2NhbGxiYWNrX2FyZyB7CisJc3RydWN0IHVpbyAq
dWlvOworCXN0cnVjdCBzb2NrYnVmICpzYjsKK307CisKK2ludAoraHZzX3RyYW5zX3NvcmVjZWl2
ZShzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNvY2thZGRyICoqcGFkZHIsCisgICAgc3RydWN0
IHVpbyAqdWlvLCBzdHJ1Y3QgbWJ1ZiAqKm1wMCwgc3RydWN0IG1idWYgKipjb250cm9scCwgaW50
ICpmbGFnc3ApCit7CisJc3RydWN0IGh2c19wY2IgKnBjYiA9IHNvMmh2c3BjYihzbyk7CisJc3Ry
dWN0IHNvY2tidWYgKnNiOworCXNzaXplX3Qgb3JpZ19yZXNpZDsKKwl1aW50MzJfdCBjYW5yZWFk
LCB0b19yZWFkOworCWludCBmbGFncywgZXJyb3IgPSAwOworCXN0cnVjdCBodnNfY2FsbGJhY2tf
YXJnIGNiYXJnOworCisJSFZTT0NLX0RCRyhIVlNPQ0tfREJHX1ZFUkJPU0UsCisJICAgICIlczog
SHlwZXJWIFNvY2tldCBodnNfdHJhbnNfc29yZWNlaXZlIGNhbGxlZFxuIiwgX19mdW5jX18pOwor
CisJaWYgKHNvLT5zb190eXBlICE9IFNPQ0tfU1RSRUFNKQorCQlyZXR1cm4gKEVJTlZBTCk7CisJ
aWYgKHBjYiA9PSBOVUxMKQorCQlyZXR1cm4gKEVJTlZBTCk7CisKKwlpZiAoZmxhZ3NwICE9IE5V
TEwpCisJCWZsYWdzID0gKmZsYWdzcCAmfiBNU0dfRU9SOworCWVsc2UKKwkJZmxhZ3MgPSAwOwor
CisJaWYgKGZsYWdzICYgTVNHX1BFRUspCisJCXJldHVybiAoRU9QTk9UU1VQUCk7CisKKwkvKiBJ
ZiBubyBzcGFjZSB0byBjb3B5IG91dCBhbnl0aGluZyAqLworCWlmICh1aW8tPnVpb19yZXNpZCA9
PSAwIHx8IHVpby0+dWlvX3J3ICE9IFVJT19SRUFEKQorCQlyZXR1cm4gKEVJTlZBTCk7CisKKwlz
YiA9ICZzby0+c29fcmN2OworCisJb3JpZ19yZXNpZCA9IHVpby0+dWlvX3Jlc2lkOworCisJLyog
UHJldmVudCBvdGhlciByZWFkZXJzIGZyb20gZW50ZXJpbmcgdGhlIHNvY2tldC4gKi8KKwllcnJv
ciA9IHNibG9jayhzYiwgU0JMT0NLV0FJVChmbGFncykpOworCWlmIChlcnJvcikgeworCQlIVlNP
Q0tfREJHKEhWU09DS19EQkdfRVJSLAorCQkgICAgIiVzOiBzYmxvY2sgcmV0dXJuZWQgZXJyb3Ig
PSAlZFxuIiwgX19mdW5jX18sIGVycm9yKTsKKwkJcmV0dXJuIChlcnJvcik7CisJfQorCisJU09D
S0JVRl9MT0NLKHNiKTsKKworCWNiYXJnLnVpbyA9IHVpbzsKKwljYmFyZy5zYiA9IHNiOworCS8q
CisJICogSWYgdGhlIHNvY2tldCBpcyBjbG9zaW5nLCB0aGVyZSBtaWdodCBzdGlsbCBiZSBzb21l
IGRhdGEKKwkgKiBpbiByeCBiciB0byByZWFkLiBIb3dldmVyIHdlIG5lZWQgdG8gbWFrZSBzdXJl
CisJICogdGhlIGNoYW5uZWwgaXMgc3RpbGwgb3Blbi4KKwkgKi8KKwlpZiAoKHNiLT5zYl9zdGF0
ZSAmIFNCU19DQU5UUkNWTU9SRSkgJiYKKwkgICAgKHNvLT5zb19zdGF0ZSAmIFNTX0lTRElTQ09O
TkVDVEVEKSkgeworCQkvKiBPdGhlciB0aHJlYWQgYWxyZWFkeSBjbG9zZWQgdGhlIGNoYW5uZWwg
Ki8KKwkJZXJyb3IgPSBFUElQRTsKKwkJZ290byBvdXQ7CisJfQorCisJd2hpbGUgKHRydWUpIHsK
KwkJd2hpbGUgKHVpby0+dWlvX3Jlc2lkID4gMCAmJgorCQkgICAgKGNhbnJlYWQgPSBodnNvY2tf
Y2FucmVhZF9jaGVjayhwY2IpKSA+IDApIHsKKwkJCXRvX3JlYWQgPSBNSU4oY2FucmVhZCwgdWlv
LT51aW9fcmVzaWQpOworCQkJSFZTT0NLX0RCRyhIVlNPQ0tfREJHX1ZFUkJPU0UsCisJCQkgICAg
IiVzOiB0b19yZWFkID0gJXUsIHNraXAgPSAldVxuIiwgX19mdW5jX18sIHRvX3JlYWQsCisJCQkg
ICAgKHVuc2lnbmVkIGludCkoc2l6ZW9mKHN0cnVjdCBodnNfcGt0X2hlYWRlcikgKworCQkJICAg
IHBjYi0+cmVjdl9kYXRhX29mZikpOworCisJCQllcnJvciA9IHZtYnVzX2NoYW5fcmVjdl9wZWVr
X2NhbGwocGNiLT5jaGFuLCB0b19yZWFkLAorCQkJICAgIHNpemVvZihzdHJ1Y3QgaHZzX3BrdF9o
ZWFkZXIpICsgcGNiLT5yZWN2X2RhdGFfb2ZmLAorCQkJICAgIGh2c29ja19icl9jYWxsYmFjaywg
KHZvaWQgKikmY2JhcmcpOworCQkJLyoKKwkJCSAqIEl0IGlzIHBvc3NpYmxlIHNvY2tldCBpcyBk
aXNjb25uZWN0ZWQgYmVjYXN1ZQorCQkJICogd2UgcmVsZWFzZWQgbG9jayBpbiBodnNvY2tfYnJf
Y2FsbGJhY2suIFNvIHdlCisJCQkgKiBuZWVkIHRvIGNoZWNrIHRoZSBzdGF0ZSB0byBtYWtlIHN1
cmUgaXQgaXMgbm90CisJCQkgKiBkaXNjb25uZWN0ZWQuCisJCQkgKi8KKwkJCWlmIChlcnJvciB8
fCBzby0+c29fc3RhdGUgJiBTU19JU0RJU0NPTk5FQ1RFRCkgeworCQkJCWJyZWFrOworCQkJfQor
CisJCQlwY2ItPnJlY3ZfZGF0YV9sZW4gLT0gdG9fcmVhZDsKKwkJCXBjYi0+cmVjdl9kYXRhX29m
ZiArPSB0b19yZWFkOworCQl9CisKKwkJaWYgKGVycm9yKQorCQkJYnJlYWs7CisKKwkJLyogQWJv
cnQgaWYgc29ja2V0IGhhcyByZXBvcnRlZCBwcm9ibGVtcy4gKi8KKwkJaWYgKHNvLT5zb19lcnJv
cikgeworCQkJaWYgKHNvLT5zb19lcnJvciA9PSBFU0hVVERPV04gJiYKKwkJCSAgICBvcmlnX3Jl
c2lkID4gdWlvLT51aW9fcmVzaWQpIHsKKwkJCQkvKgorCQkJCSAqIEFsdGhvdWdoIHdlIGdvdCBh
IEZJTiwgd2UgYWxzbyByZWNlaXZlZAorCQkJCSAqIHNvbWUgZGF0YSBpbiB0aGlzIHJvdW5kLiBE
ZWxpdmVyeSBpdAorCQkJCSAqIHRvIHVzZXIuCisJCQkJICovCisJCQkJZXJyb3IgPSAwOworCQkJ
fSBlbHNlIHsKKwkJCQlpZiAoc28tPnNvX2Vycm9yICE9IEVTSFVURE9XTikKKwkJCQkJZXJyb3Ig
PSBzby0+c29fZXJyb3I7CisJCQl9CisKKwkJCWJyZWFrOworCQl9CisKKwkJLyogQ2Fubm90IHJl
Y2VpdmVkIG1vcmUuICovCisJCWlmIChzYi0+c2Jfc3RhdGUgJiBTQlNfQ0FOVFJDVk1PUkUpCisJ
CQlicmVhazsKKworCQkvKiBXZSBhcmUgZG9uZSBpZiBidWZmZXIgaGFzIGJlZW4gZmlsbGVkICov
CisJCWlmICh1aW8tPnVpb19yZXNpZCA9PSAwKQorCQkJYnJlYWs7CisKKwkJaWYgKCEoZmxhZ3Mg
JiBNU0dfV0FJVEFMTCkgJiYgb3JpZ19yZXNpZCA+IHVpby0+dWlvX3Jlc2lkKQorCQkJYnJlYWs7
CisKKwkJLyogQnVmZmVyIHJpbmcgaXMgZW1wdHkgYW5kIHdlIHNoYWxsIG5vdCBibG9jayAqLwor
CQlpZiAoKHNvLT5zb19zdGF0ZSAmIFNTX05CSU8pIHx8CisJCSAgICAoZmxhZ3MgJiAoTVNHX0RP
TlRXQUlUfE1TR19OQklPKSkpIHsKKwkJCWlmIChvcmlnX3Jlc2lkID09IHVpby0+dWlvX3Jlc2lk
KSB7CisJCQkJLyogV2UgaGF2ZSBub3QgcmVhZCBhbnl0aGluZyAqLworCQkJCWVycm9yID0gRUFH
QUlOOworCQkJfQorCQkJSFZTT0NLX0RCRyhIVlNPQ0tfREJHX1ZFUkJPU0UsCisJCQkgICAgIiVz
OiBub24gYmxvY2tlZCByZWFkIHJldHVybiwgZXJyb3IgJWQuXG4iLAorCQkJICAgIF9fZnVuY19f
LCBlcnJvcik7CisJCQlicmVhazsKKwkJfQorCisJCS8qCisJCSAqIFdhaXQgYW5kIGJsb2NrIHVu
dGlsIChtb3JlKSBkYXRhIGNvbWVzIGluLgorCQkgKiBOb3RlOiBEcm9wcyB0aGUgc29ja2J1ZiBs
b2NrIGR1cmluZyB3YWl0LgorCQkgKi8KKwkJZXJyb3IgPSBzYndhaXQoc2IpOworCisJCWlmIChl
cnJvcikKKwkJCWJyZWFrOworCisJCUhWU09DS19EQkcoSFZTT0NLX0RCR19WRVJCT1NFLAorCQkg
ICAgIiVzOiB3YWtlIHVwIGZyb20gc2J3YWl0LCByZWFkIGF2YWlsYWJsZSBpcyAldVxuIiwKKwkJ
ICAgIF9fZnVuY19fLCB2bWJ1c19jaGFuX3JlYWRfYXZhaWxhYmxlKHBjYi0+Y2hhbikpOworCX0K
Kworb3V0OgorCVNPQ0tCVUZfVU5MT0NLKHNiKTsKKworCXNidW5sb2NrKHNiKTsKKworCS8qIFdl
IHJlY2lldmVkIGEgRklOIGluIHRoaXMgY2FsbCAqLworCWlmIChzby0+c29fZXJyb3IgPT0gRVNI
VVRET1dOKSB7CisJCWlmIChzby0+c29fc25kLnNiX3N0YXRlICYgU0JTX0NBTlRTRU5ETU9SRSkg
eworCQkJLyogU2VuZCBoYXMgYWxyZWFkeSBjbG9zZWQgKi8KKwkJCXNvaXNkaXNjb25uZWN0aW5n
KHNvKTsKKwkJfSBlbHNlIHsKKwkJCS8qIEp1c3QgY2xvc2UgdGhlIHJlY2VpdmUgc2lkZSAqLwor
CQkJc29jYW50cmN2bW9yZShzbyk7CisJCX0KKwl9CisKKwlIVlNPQ0tfREJHKEhWU09DS19EQkdf
VkVSQk9TRSwKKwkgICAgIiVzOiByZXR1cm5pbmcgZXJyb3IgPSAlZCwgc29fZXJyb3IgPSAlZFxu
IiwKKwkgICAgX19mdW5jX18sIGVycm9yLCBzby0+c29fZXJyb3IpOworCisJcmV0dXJuIChlcnJv
cik7Cit9CisKK2ludAoraHZzX3RyYW5zX3Nvc2VuZChzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0
IHNvY2thZGRyICphZGRyLCBzdHJ1Y3QgdWlvICp1aW8sCisgICAgc3RydWN0IG1idWYgKnRvcCwg
c3RydWN0IG1idWYgKmNvbnRyb2xwLCBpbnQgZmxhZ3MsIHN0cnVjdCB0aHJlYWQgKnRkKQorewor
CXN0cnVjdCBodnNfcGNiICpwY2IgPSBzbzJodnNwY2Ioc28pOworCXN0cnVjdCBzb2NrYnVmICpz
YjsKKwlzc2l6ZV90IG9yaWdfcmVzaWQ7CisJdWludDMyX3QgY2Fud3JpdGUsIHRvX3dyaXRlOwor
CWludCBlcnJvciA9IDA7CisKKwlIVlNPQ0tfREJHKEhWU09DS19EQkdfVkVSQk9TRSwKKwkgICAg
IiVzOiBIeXBlclYgU29ja2V0IGh2c190cmFuc19zb3NlbmQgY2FsbGVkLCB1aW9fcmVzaWQgPSAl
bHVcbiIsCisJICAgIF9fZnVuY19fLCB1aW8tPnVpb19yZXNpZCk7CisKKwlpZiAoc28tPnNvX3R5
cGUgIT0gU09DS19TVFJFQU0pCisJCXJldHVybiAoRUlOVkFMKTsKKwlpZiAocGNiID09IE5VTEwp
CisJCXJldHVybiAoRUlOVkFMKTsKKworCS8qIElmIG5vdGhpbmcgdG8gc2VuZCAqLworCWlmICh1
aW8tPnVpb19yZXNpZCA9PSAwIHx8IHVpby0+dWlvX3J3ICE9IFVJT19XUklURSkKKwkJcmV0dXJu
IChFSU5WQUwpOworCisJc2IgPSAmc28tPnNvX3NuZDsKKworCW9yaWdfcmVzaWQgPSB1aW8tPnVp
b19yZXNpZDsKKworCS8qIFByZXZlbnQgb3RoZXIgd3JpdGVycyBmcm9tIGVudGVyaW5nIHRoZSBz
b2NrZXQuICovCisJZXJyb3IgPSBzYmxvY2soc2IsIFNCTE9DS1dBSVQoZmxhZ3MpKTsKKwlpZiAo
ZXJyb3IpIHsKKwkJSFZTT0NLX0RCRyhIVlNPQ0tfREJHX0VSUiwKKwkJICAgICIlczogc2Jsb2Nr
IHJldHVybmVkIGVycm9yID0gJWRcbiIsIF9fZnVuY19fLCBlcnJvcik7CisJCXJldHVybiAoZXJy
b3IpOworCX0KKworCVNPQ0tCVUZfTE9DSyhzYik7CisKKwlpZiAoKHNiLT5zYl9zdGF0ZSAmIFNC
U19DQU5UU0VORE1PUkUpIHx8CisJICAgIHNvLT5zb19lcnJvciA9PSBFU0hVVERPV04pIHsKKwkJ
ZXJyb3IgPSBFUElQRTsKKwkJZ290byBvdXQ7CisJfQorCisJd2hpbGUgKHVpby0+dWlvX3Jlc2lk
ID4gMCkgeworCQljYW53cml0ZSA9IGh2c29ja19jYW53cml0ZV9jaGVjayhwY2IpOworCQlpZiAo
Y2Fud3JpdGUgPT0gMCkgeworCQkJLyogV2UgaGF2ZSBzZW50IHNvbWUgZGF0YSAqLworCQkJaWYg
KG9yaWdfcmVzaWQgPiB1aW8tPnVpb19yZXNpZCkKKwkJCQlicmVhazsKKwkJCS8qCisJCQkgKiBX
ZSBoYXZlIG5vdCBzZW50IGFueSBkYXRhIGFuZCBpdCBpcworCQkJICogbm9uLWJsb2NrZWQgaW8K
KwkJCSAqLworCQkJaWYgKHNvLT5zb19zdGF0ZSAmIFNTX05CSU8gfHwKKwkJCSAgICAoZmxhZ3Mg
JiAoTVNHX05CSU8gfCBNU0dfRE9OVFdBSVQpKSAhPSAwKSB7CisJCQkJZXJyb3IgPSBFV09VTERC
TE9DSzsKKwkJCQlicmVhazsKKwkJCX0gZWxzZSB7CisJCQkJLyoKKwkJCQkgKiBXZSBhcmUgaGVy
ZSBiZWNhdXNlIHRoZXJlIGlzIG5vIHNwYWNlIG9uCisJCQkJICogc2VuZCBidWZmZXIgcmluZy4g
U2lnbmFsIHRoZSBvdGhlciBzaWRlCisJCQkJICogdG8gcmVhZCBhbmQgZnJlZSBtb3JlIHNwYWNl
LgorCQkJCSAqIFNsZWVwIHdhaXQgdW50aWwgc3BhY2UgYXZhaWFibGUgdG8gc2VuZAorCQkJCSAq
IE5vdGU6IERyb3BzIHRoZSBzb2NrYnVmIGxvY2sgZHVyaW5nIHdhaXQuCisJCQkJICovCisJCQkJ
ZXJyb3IgPSBzYndhaXQoc2IpOworCisJCQkJaWYgKGVycm9yKQorCQkJCQlicmVhazsKKworCQkJ
CUhWU09DS19EQkcoSFZTT0NLX0RCR19WRVJCT1NFLAorCQkJCSAgICAiJXM6IHdha2UgdXAgZnJv
bSBzYndhaXQsIHNwYWNlIGF2YWlsIG9uICIKKwkJCQkgICAgInR4IHJpbmcgaXMgJXVcbiIsCisJ
CQkJICAgIF9fZnVuY19fLAorCQkJCSAgICB2bWJ1c19jaGFuX3dyaXRlX2F2YWlsYWJsZShwY2It
PmNoYW4pKTsKKworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9CisJCXRvX3dyaXRlID0gTUlOKGNh
bndyaXRlLCB1aW8tPnVpb19yZXNpZCk7CisJCXRvX3dyaXRlID0gTUlOKHRvX3dyaXRlLCBIVlNP
Q0tfU0VORF9CVUZfU1opOworCisJCUhWU09DS19EQkcoSFZTT0NLX0RCR19WRVJCT1NFLAorCQkg
ICAgIiVzOiBjYW53cml0ZSBpcyAldSwgdG9fd3JpdGUgPSAldVxuIiwgX19mdW5jX18sCisJCSAg
ICBjYW53cml0ZSwgdG9fd3JpdGUpOworCQllcnJvciA9IGh2c29ja19zZW5kX2RhdGEocGNiLT5j
aGFuLCB1aW8sIHRvX3dyaXRlLCBzYik7CisKKwkJaWYgKGVycm9yKQorCQkJYnJlYWs7CisJfQor
CitvdXQ6CisJU09DS0JVRl9VTkxPQ0soc2IpOworCXNidW5sb2NrKHNiKTsKKworCXJldHVybiAo
ZXJyb3IpOworfQorCitpbnQKK2h2c190cmFuc19wZWVyYWRkcihzdHJ1Y3Qgc29ja2V0ICpzbywg
c3RydWN0IHNvY2thZGRyICoqbmFtKQoreworCXN0cnVjdCBodnNfcGNiICpwY2IgPSBzbzJodnNw
Y2Ioc28pOworCisJSFZTT0NLX0RCRyhIVlNPQ0tfREJHX1ZFUkJPU0UsCisJICAgICIlczogSHlw
ZXJWIFNvY2tldCBodnNfdHJhbnNfcGVlcmFkZHIgY2FsbGVkXG4iLCBfX2Z1bmNfXyk7CisKKwlp
ZiAocGNiID09IE5VTEwpCisJCXJldHVybiAoRUlOVkFMKTsKKworCSpuYW0gPSBzb2R1cHNvY2th
ZGRyKChzdHJ1Y3Qgc29ja2FkZHIgKikgJnBjYi0+cmVtb3RlX2FkZHIsIE1fTk9XQUlUKTsKKwor
CXJldHVybiAoKCpuYW0gPT0gTlVMTCk/IEVOT01FTSA6IDApOworfQorCitpbnQKK2h2c190cmFu
c19zb2NrYWRkcihzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNvY2thZGRyICoqbmFtKQorewor
CXN0cnVjdCBodnNfcGNiICpwY2IgPSBzbzJodnNwY2Ioc28pOworCisJSFZTT0NLX0RCRyhIVlNP
Q0tfREJHX1ZFUkJPU0UsCisJICAgICIlczogSHlwZXJWIFNvY2tldCBodnNfdHJhbnNfc29ja2Fk
ZHIgY2FsbGVkXG4iLCBfX2Z1bmNfXyk7CisKKwlpZiAocGNiID09IE5VTEwpCisJCXJldHVybiAo
RUlOVkFMKTsKKworCSpuYW0gPSBzb2R1cHNvY2thZGRyKChzdHJ1Y3Qgc29ja2FkZHIgKikgJnBj
Yi0+bG9jYWxfYWRkciwgTV9OT1dBSVQpOworCisJcmV0dXJuICgoKm5hbSA9PSBOVUxMKT8gRU5P
TUVNIDogMCk7Cit9CisKK3ZvaWQKK2h2c190cmFuc19jbG9zZShzdHJ1Y3Qgc29ja2V0ICpzbykK
K3sKKwlzdHJ1Y3QgaHZzX3BjYiAqcGNiOworCisJSFZTT0NLX0RCRyhIVlNPQ0tfREJHX1ZFUkJP
U0UsCisJICAgICIlczogSHlwZXJWIFNvY2tldCBodnNfdHJhbnNfY2xvc2UgY2FsbGVkXG4iLCBf
X2Z1bmNfXyk7CisKKwkodm9pZCkgaHZzX3RyYW5zX2xvY2soKTsKKwlwY2IgPSBzbzJodnNwY2Io
c28pOworCWlmICghcGNiKSB7CisJCWh2c190cmFuc191bmxvY2soKTsKKwkJcmV0dXJuOworCX0K
KworCWlmIChzby0+c29fc3RhdGUgJiBTU19JU0NPTk5FQ1RFRCkgeworCQkvKiBTZW5kIGEgRklO
IHRvIHBlZXIgKi8KKwkJSFZTT0NLX0RCRyhIVlNPQ0tfREJHX1ZFUkJPU0UsCisJCSAgICAiJXM6
IGh2c190cmFuc19jbG9zZSBzZW5kaW5nIGEgRklOIHRvIGhvc3RcbiIsIF9fZnVuY19fKTsKKwkJ
KHZvaWQpIGh2c29ja19zZW5kX2RhdGEocGNiLT5jaGFuLCBOVUxMLCAwLCBOVUxMKTsKKwl9CisK
KwlpZiAoc28tPnNvX3N0YXRlICYKKwkgICAgKFNTX0lTQ09OTkVDVEVEfFNTX0lTQ09OTkVDVElO
R3xTU19JU0RJU0NPTk5FQ1RJTkcpKQorCQlzb2lzZGlzY29ubmVjdGVkKHNvKTsKKworCXBjYi0+
Y2hhbiA9IE5VTEw7CisJcGNiLT5zbyA9IE5VTEw7CisKKwlpZiAoU09MSVNURU5JTkcoc28pKSB7
CisJCW10eF9sb2NrKCZodnNfdHJhbnNfc29ja3NfbXR4KTsKKwkJLyogUmVtb3ZlIGZyb20gYm91
bmQgbGlzdCAqLworCQlfX2h2c19yZW1vdmVfc29ja2V0X2Zyb21fbGlzdChzbywgSFZTX0xJU1Rf
Qk9VTkQpOworCQltdHhfdW5sb2NrKCZodnNfdHJhbnNfc29ja3NfbXR4KTsKKwl9CisKKwlodnNf
dHJhbnNfdW5sb2NrKCk7CisKKwlyZXR1cm47Cit9CisKK3ZvaWQKK2h2c190cmFuc19hYm9ydChz
dHJ1Y3Qgc29ja2V0ICpzbykKK3sKKwlzdHJ1Y3QgaHZzX3BjYiAqcGNiID0gc28yaHZzcGNiKHNv
KTsKKworCUhWU09DS19EQkcoSFZTT0NLX0RCR19WRVJCT1NFLAorCSAgICAiJXM6IEh5cGVyViBT
b2NrZXQgaHZzX3RyYW5zX2Fib3J0IGNhbGxlZFxuIiwgX19mdW5jX18pOworCisJKHZvaWQpIGh2
c190cmFuc19sb2NrKCk7CisJaWYgKHBjYiA9PSBOVUxMKSB7CisJCWh2c190cmFuc191bmxvY2so
KTsKKwkJcmV0dXJuOworCX0KKworCWlmIChTT0xJU1RFTklORyhzbykpIHsKKwkJbXR4X2xvY2so
Jmh2c190cmFuc19zb2Nrc19tdHgpOworCQkvKiBSZW1vdmUgZnJvbSBib3VuZCBsaXN0ICovCisJ
CV9faHZzX3JlbW92ZV9zb2NrZXRfZnJvbV9saXN0KHNvLCBIVlNfTElTVF9CT1VORCk7CisJCW10
eF91bmxvY2soJmh2c190cmFuc19zb2Nrc19tdHgpOworCX0KKworCWlmIChzby0+c29fc3RhdGUg
JiBTU19JU0NPTk5FQ1RFRCkgeworCQkodm9pZCkgc29kaXNjb25uZWN0KHNvKTsKKwl9CisJaHZz
X3RyYW5zX3VubG9jaygpOworCisJcmV0dXJuOworfQorCitpbnQKK2h2c190cmFuc19zaHV0ZG93
bihzdHJ1Y3Qgc29ja2V0ICpzbykKK3sKKwlzdHJ1Y3QgaHZzX3BjYiAqcGNiID0gc28yaHZzcGNi
KHNvKTsKKwlzdHJ1Y3Qgc29ja2J1ZiAqc2I7CisKKwlIVlNPQ0tfREJHKEhWU09DS19EQkdfVkVS
Qk9TRSwKKwkgICAgIiVzOiBIeXBlclYgU29ja2V0IGh2c190cmFuc19zaHV0ZG93biBjYWxsZWRc
biIsIF9fZnVuY19fKTsKKworCWlmIChwY2IgPT0gTlVMTCkKKwkJcmV0dXJuIChFSU5WQUwpOwor
CisJLyoKKwkgKiBPbmx5IGdldCBjYWxsZWQgd2l0aCB0aGUgc2h1dGRvd24gbWV0aG9kIGlzIFNI
VVRfV1Igb3IKKwkgKiBTSFVUX1JEV1IuCisJICogV2hlbiB0aGUgbWV0aG9kIGlzIFNIVVRfUkQg
b3IgU0hVVF9SRFdSLCB0aGUgY2FsbGVyCisJICogYWxyZWFkeSBzZXQgdGhlIFNCU19DQU5UUkNW
TU9SRSBvbiByZWNlaXZlIHNpZGUgc29ja2V0CisJICogYnVmZmVyLgorCSAqLworCWlmICgoc28t
PnNvX3Jjdi5zYl9zdGF0ZSAmIFNCU19DQU5UUkNWTU9SRSkgPT0gMCkgeworCQkvKgorCQkgKiBT
SFVUX1dSIG9ubHkgY2FzZS4KKwkJICogUmVjZWl2ZSBzaWRlIGlzIHN0aWxsIG9wZW4uIEp1c3Qg
Y2xvc2UKKwkJICogdGhlIHNlbmQgc2lkZS4KKwkJICovCisJCXNvY2FudHNlbmRtb3JlKHNvKTsK
Kwl9IGVsc2UgeworCQkvKiBTSFVUX1JEV1IgY2FzZSAqLworCQlpZiAoc28tPnNvX3N0YXRlICYg
U1NfSVNDT05ORUNURUQpIHsKKwkJCS8qIFNlbmQgYSBGSU4gdG8gcGVlciAqLworCQkJc2IgPSAm
c28tPnNvX3NuZDsKKwkJCVNPQ0tCVUZfTE9DSyhzYik7CisJCQkodm9pZCkgaHZzb2NrX3NlbmRf
ZGF0YShwY2ItPmNoYW4sIE5VTEwsIDAsIHNiKTsKKwkJCVNPQ0tCVUZfVU5MT0NLKHNiKTsKKwor
CQkJc29pc2Rpc2Nvbm5lY3Rpbmcoc28pOworCQl9CisJfQorCisJcmV0dXJuICgwKTsKK30KKwor
LyogSW4gdGhlIFZNLCB3ZSBzdXBwb3J0IEh5cGVyLVYgU29ja2V0cyB3aXRoIEFGX0hZUEVSViwg
YW5kIHRoZSBlbmRwb2ludCBpcworICogPHBvcnQ+IChzZWUgc3RydWN0IHNvY2thZGRyX2h2cyku
CisgKgorICogT24gdGhlIGhvc3QsIEh5cGVyLVYgU29ja2V0cyBhcmUgc3VwcG9ydGVkIGJ5IFdp
bnNvY2sgQUZfSFlQRVJWOgorICogaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvdmly
dHVhbGl6YXRpb24vaHlwZXItdi1vbi13aW5kb3dzL3VzZXItCisgKiBndWlkZS9tYWtlLWludGVn
cmF0aW9uLXNlcnZpY2UsIGFuZCB0aGUgZW5kcG9pbnQgaXMgPFZtSUQsIFNlcnZpY2VJZD4gd2l0
aAorICogdGhlIGJlbG93IHNvY2thZGRyOgorICoKKyAqIHN0cnVjdCBTT0NLQUREUl9IVgorICog
eworICogICAgQUREUkVTU19GQU1JTFkgRmFtaWx5OworICogICAgVVNIT1JUIFJlc2VydmVkOwor
ICogICAgR1VJRCBWbUlkOworICogICAgR1VJRCBTZXJ2aWNlSWQ7CisgKiB9OworICogTm90ZTog
Vm1JRCBpcyBub3QgdXNlZCBieSBGcmVlQlNEIFZNIGFuZCBhY3R1YWxseSBpdCBpc24ndCB0cmFu
c21pdHRlZCB2aWEKKyAqIFZNQnVzLCBiZWNhdXNlIGhlcmUgaXQncyBvYnZpb3VzIHRoZSBob3N0
IGFuZCB0aGUgVk0gY2FuIGVhc2lseSBpZGVudGlmeQorICogZWFjaCBvdGhlci4gVGhvdWdoIHRo
ZSBWbUlEIGlzIHVzZWZ1bCBvbiB0aGUgaG9zdCwgZXNwZWNpYWxseSBpbiB0aGUgY2FzZQorICog
b2YgV2luZG93cyBjb250YWluZXIsIEZyZWVCU0QgVk0gZG9lc24ndCBuZWVkIGl0IGF0IGFsbC4K
KyAqCisgKiBUbyBiZSBjb21wYXRpYmxlIHdpdGggc2ltaWxhciBpbmZyYXN0cnVjdHVyZSBpbiBM
aW51eCBWTXMsIHdlIGhhdmUKKyAqIHRvIGxpbWl0IHRoZSBhdmFpbGFibGUgR1VJRCBzcGFjZSBv
ZiBTT0NLQUREUl9IViBzbyB0aGF0IHdlIGNhbiBjcmVhdGUKKyAqIGEgbWFwcGluZyBiZXR3ZWVu
IEZyZWVCU0QgQUZfSFlQRVJWIHBvcnQgYW5kIFNPQ0tBRERSX0hWIFNlcnZpY2UgR1VJRC4KKyAq
IFRoZSBydWxlIG9mIHdyaXRpbmcgSHlwZXItViBTb2NrZXRzIGFwcHMgb24gdGhlIGhvc3QgYW5k
IGluIEZyZWVCU0QgVk0gaXM6CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRoZSBvbmx5
IHZhbGlkIFNlcnZpY2UgR1VJRHMsIGZyb20gdGhlIHBlcnNwZWN0aXZlcyBvZiBib3RoIHRoZSBo
b3N0IGFuZCAqCisgKiBGcmVlQlNEIFZNLCB0aGF0IGNhbiBiZSBjb25uZWN0ZWQgYnkgdGhlIG90
aGVyIGVuZCwgbXVzdCBjb25mb3JtIHRvIHRoaXMgKgorICogZm9ybWF0OiA8cG9ydD4tZmFjYi0x
MWU2LWJkNTgtNjQwMDZhNzk4NmQzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqCisgKgorICogV2hlbiB3ZSB3cml0ZSBhcHBzIG9uIHRoZSBob3N0
IHRvIGNvbm5lY3QoKSwgdGhlIEdVSUQgU2VydmljZUlEIGlzIHVzZWQuCisgKiBXaGVuIHdlIHdy
aXRlIGFwcHMgaW4gRnJlZUJTRCBWTSB0byBjb25uZWN0KCksIHdlIG9ubHkgbmVlZCB0byBzcGVj
aWZ5IHRoZQorICogcG9ydCBhbmQgdGhlIGRyaXZlciB3aWxsIGZvcm0gdGhlIEdVSUQgYW5kIHVz
ZSB0aGF0IHRvIHJlcXVlc3QgdGhlIGhvc3QuCisgKgorICogRnJvbSB0aGUgcGVyc3BlY3RpdmUg
b2YgRnJlZUJTRCBWTSwgdGhlIHJlbW90ZSBlcGhlbWVyYWwgcG9ydCAoaS5lLiB0aGUKKyAqIGF1
dG8tZ2VuZXJhdGVkIHJlbW90ZSBwb3J0IGZvciBhIGNvbm5lY3QgcmVxdWVzdCBpbml0aWF0ZWQg
YnkgdGhlIGhvc3QncworICogY29ubmVjdCgpKSBpcyBzZXQgdG8gSFZBRERSX1BPUlRfVU5LTk9X
Tiwgd2hpY2ggaXMgbm90IHJlYWx5IHVzZWQgb24gdGhlCisgKiBGcmVlQlNEIGd1ZXN0LgorICov
CisKKy8qCisgKiBPbGRlciBIeXBlclYgaG9zdHMgKHZtYnVzIHZlcnNpb24gJ1ZNQlVTX1ZFUlNJ
T05fV0lOMTAnIG9yIGJlZm9yZSkKKyAqIHJlc3RyaWN0cyBIeXBlclYgc29ja2V0IHJpbmcgYnVm
ZmVyIHNpemUgdG8gc2l4IDRLIHBhZ2VzLiBOZXdlcgorICogSHlwZXJWIGhvc3RzIGRvZW4ndCBo
YXZlIHRoaXMgbGltaXQuCisgKi8KKyNkZWZpbmUgSFZTX1JJTkdCVUZfUkNWX1NJWkUJKFBBR0Vf
U0laRSAqIDYpCisjZGVmaW5lIEhWU19SSU5HQlVGX1NORF9TSVpFCShQQUdFX1NJWkUgKiA2KQor
I2RlZmluZSBIVlNfUklOR0JVRl9NQVhfU0laRQkoUEFHRV9TSVpFICogNjQpCisKK3N0cnVjdCBo
dnNvY2tfc2MgeworCWRldmljZV90CQlkZXY7CisJc3RydWN0IGh2c19wY2IJCSpwY2I7CisJc3Ry
dWN0IHZtYnVzX2NoYW5uZWwJKmNoYW5uZWw7Cit9OworCitzdGF0aWMgYm9vbAoraHZzb2NrX2No
YW5fcmVhZGFibGUoc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW4pCit7CisJdWludDMyX3QgcmVh
ZGFibGUgPSB2bWJ1c19jaGFuX3JlYWRfYXZhaWxhYmxlKGNoYW4pOworCisJcmV0dXJuIChyZWFk
YWJsZSA+PSBIVlNPQ0tfUEtUX0xFTigwKSk7Cit9CisKK3N0YXRpYyB2b2lkCitodnNvY2tfY2hh
bl9jYihzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbiwgdm9pZCAqY29udGV4dCkKK3sKKwlzdHJ1
Y3QgaHZzX3BjYiAqcGNiID0gKHN0cnVjdCBodnNfcGNiICopIGNvbnRleHQ7CisJc3RydWN0IHNv
Y2tldCAqc287CisJdWludDMyX3QgY2Fud3JpdGU7CisKKwlIVlNPQ0tfREJHKEhWU09DS19EQkdf
VkVSQk9TRSwKKwkgICAgIiVzOiBob3N0IHNlbmQgdXMgYSB3YWtldXAgb24gcmIgZGF0YSwgcGNi
ID0gJXBcbiIsCisJICAgIF9fZnVuY19fLCBwY2IpOworCisJLyoKKwkgKiBDaGVjayBpZiB0aGUg
c29ja2V0IGlzIHN0aWxsIGF0dGFjaGVkIGFuZCB2YWxpZC4KKwkgKiBIZXJlIHdlIGtub3cgY2hh
bm5lbCBpcyBzdGlsbCBvcGVuLiBOZWVkIHRvIG1ha2UKKwkgKiBzdXJlIHRoZSBzb2NrZXQgaGFz
IG5vdCBiZWVuIGNsb3NlZCBvciBmcmVlZC4KKwkgKi8KKwkodm9pZCkgaHZzX3RyYW5zX2xvY2so
KTsKKwlzbyA9IGhzdnBjYjJzbyhwY2IpOworCisJaWYgKHBjYi0+Y2hhbiAhPSBOVUxMICYmIHNv
ICE9IE5VTEwpIHsKKwkJLyoKKwkJICogV2FrZSB1cCByZWFkZXIgaWYgdGhlcmUgYXJlIGRhdGEg
dG8gcmVhZC4KKwkJICovCisJCVNPQ0tCVUZfTE9DSygmKHNvKS0+c29fcmN2KTsKKworCQlIVlNP
Q0tfREJHKEhWU09DS19EQkdfVkVSQk9TRSwKKwkJICAgICIlczogcmVhZCBhdmFpbGFibGUgPSAl
dVxuIiwgX19mdW5jX18sCisJCSAgICB2bWJ1c19jaGFuX3JlYWRfYXZhaWxhYmxlKHBjYi0+Y2hh
bikpOworCisJCWlmIChodnNvY2tfY2hhbl9yZWFkYWJsZShwY2ItPmNoYW4pKQorCQkJc29yd2Fr
ZXVwX2xvY2tlZChzbyk7CisJCWVsc2UKKwkJCVNPQ0tCVUZfVU5MT0NLKCYoc28pLT5zb19yY3Yp
OworCisJCS8qCisJCSAqIFdha2UgdXAgc2VuZGVyIGlmIHNwYWNlIGJlY29tZXMgYXZhaWxhYmxl
IHRvIHdyaXRlLgorCQkgKi8KKwkJU09DS0JVRl9MT0NLKCYoc28pLT5zb19zbmQpOworCQljYW53
cml0ZSA9IGh2c29ja19jYW53cml0ZV9jaGVjayhwY2IpOworCisJCUhWU09DS19EQkcoSFZTT0NL
X0RCR19WRVJCT1NFLAorCQkgICAgIiVzOiBjYW53cml0ZSA9ICV1XG4iLCBfX2Z1bmNfXywgY2Fu
d3JpdGUpOworCisJCWlmIChjYW53cml0ZSA+IDApIHsKKwkJCXNvd3dha2V1cF9sb2NrZWQoc28p
OworCQl9IGVsc2UgeworCQkJU09DS0JVRl9VTkxPQ0soJihzbyktPnNvX3NuZCk7CisJCX0KKwl9
CisKKwlodnNfdHJhbnNfdW5sb2NrKCk7CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbnQKK2h2
c29ja19icl9jYWxsYmFjayh2b2lkICpkYXRhcCwgaW50IGNwbGVuLCB2b2lkICpjYmFyZykKK3sK
KwlzdHJ1Y3QgaHZzX2NhbGxiYWNrX2FyZyAqYXJnID0gKHN0cnVjdCBodnNfY2FsbGJhY2tfYXJn
ICopY2Jhcmc7CisJc3RydWN0IHVpbyAqdWlvID0gYXJnLT51aW87CisJc3RydWN0IHNvY2tidWYg
KnNiID0gYXJnLT5zYjsKKwlpbnQgZXJyb3IgPSAwOworCisJaWYgKGNiYXJnID09IE5VTEwgfHwg
ZGF0YXAgPT0gTlVMTCkKKwkJcmV0dXJuIChFSU5WQUwpOworCisJSFZTT0NLX0RCRyhIVlNPQ0tf
REJHX1ZFUkJPU0UsCisJICAgICIlczogY2FsbGVkLCB1aW9fcncgPSAlcywgdWlvX3Jlc2lkID0g
JWx1LCBjcGxlbiA9ICV1LCAiCisJICAgICJkYXRhcCA9ICVwXG4iLAorCSAgICBfX2Z1bmNfXywg
KHVpby0+dWlvX3J3ID09IFVJT19SRUFEKSA/ICJyZWFkIGZyb20gYnIiOiJ3cml0ZSB0byBiciIs
CisJICAgIHVpby0+dWlvX3Jlc2lkLCBjcGxlbiwgZGF0YXApOworCisJaWYgKHNiKQorCQlTT0NL
QlVGX1VOTE9DSyhzYik7CisKKwllcnJvciA9IHVpb21vdmUoZGF0YXAsIGNwbGVuLCB1aW8pOwor
CisJaWYgKHNiKQorCQlTT0NLQlVGX0xPQ0soc2IpOworCisJSFZTT0NLX0RCRyhIVlNPQ0tfREJH
X1ZFUkJPU0UsCisJICAgICIlczogYWZ0ZXIgdWlvbW92ZSwgdWlvX3Jlc2lkID0gJWx1LCBlcnJv
ciA9ICVkXG4iLAorCSAgICBfX2Z1bmNfXywgdWlvLT51aW9fcmVzaWQsIGVycm9yKTsKKworCXJl
dHVybiAoZXJyb3IpOworfQorCitzdGF0aWMgaW50CitodnNvY2tfc2VuZF9kYXRhKHN0cnVjdCB2
bWJ1c19jaGFubmVsICpjaGFuLCBzdHJ1Y3QgdWlvICp1aW8sCisgICAgdWludDMyX3QgdG9fd3Jp
dGUsIHN0cnVjdCBzb2NrYnVmICpzYikKK3sKKwlzdHJ1Y3QgaHZzX3BrdF9oZWFkZXIgaHZzX3Br
dDsKKwlpbnQgaHZzX3BrdGhsZW4sIGh2c19wa3RsZW4sIHBhZF9wa3RsZW4sIGhsZW4sIGVycm9y
ID0gMDsKKwl1aW50NjRfdCBwYWQgPSAwOworCXN0cnVjdCBpb3ZlYyBpb3ZbM107CisJc3RydWN0
IGh2c19jYWxsYmFja19hcmcgY2Jhcmc7CisKKwlpZiAoY2hhbiA9PSBOVUxMKQorCQlyZXR1cm4g
KEVOT1RDT05OKTsKKworCWhsZW4gPSBzaXplb2Yoc3RydWN0IHZtYnVzX2NoYW5wa3RfaGRyKTsK
KwlodnNfcGt0aGxlbiA9IHNpemVvZihzdHJ1Y3QgaHZzX3BrdF9oZWFkZXIpOworCWh2c19wa3Rs
ZW4gPSBodnNfcGt0aGxlbiArIHRvX3dyaXRlOworCXBhZF9wa3RsZW4gPSBWTUJVU19DSEFOUEtU
X1RPVExFTihodnNfcGt0bGVuKTsKKworCUhWU09DS19EQkcoSFZTT0NLX0RCR19WRVJCT1NFLAor
CSAgICAiJXM6IGhsZW4gPSAldSwgaHZzX3BrdGhsZW4gPSAldSwgaHZzX3BrdGxlbiA9ICV1LCAi
CisJICAgICJwYWRfcGt0bGVuID0gJXUsIGRhdGFfbGVuID0gJXVcbiIsCisJICAgIF9fZnVuY19f
LCBobGVuLCBodnNfcGt0aGxlbiwgaHZzX3BrdGxlbiwgcGFkX3BrdGxlbiwgdG9fd3JpdGUpOwor
CisJaHZzX3BrdC5jaGFuX3BrdF9oZHIuY3BoX3R5cGUgPSBWTUJVU19DSEFOUEtUX1RZUEVfSU5C
QU5EOworCWh2c19wa3QuY2hhbl9wa3RfaGRyLmNwaF9mbGFncyA9IDA7CisJVk1CVVNfQ0hBTlBL
VF9TRVRMRU4oaHZzX3BrdC5jaGFuX3BrdF9oZHIuY3BoX2hsZW4sIGhsZW4pOworCVZNQlVTX0NI
QU5QS1RfU0VUTEVOKGh2c19wa3QuY2hhbl9wa3RfaGRyLmNwaF90bGVuLCBwYWRfcGt0bGVuKTsK
KwlodnNfcGt0LmNoYW5fcGt0X2hkci5jcGhfeGFjdGlkID0gMDsKKworCWh2c19wa3Qudm1waXBl
X3BrdF9oZHIudm1waXBlX3BrdF90eXBlID0gMTsKKwlodnNfcGt0LnZtcGlwZV9wa3RfaGRyLnZt
cGlwZV9kYXRhX3NpemUgPSB0b193cml0ZTsKKworCWNiYXJnLnVpbyA9IHVpbzsKKwljYmFyZy5z
YiA9IHNiOworCisJaWYgKHVpbyAmJiB0b193cml0ZSA+IDApIHsKKwkJaW92WzBdLmlvdl9iYXNl
ID0gJmh2c19wa3Q7CisJCWlvdlswXS5pb3ZfbGVuID0gaHZzX3BrdGhsZW47CisJCWlvdlsxXS5p
b3ZfYmFzZSA9IE5VTEw7CisJCWlvdlsxXS5pb3ZfbGVuID0gdG9fd3JpdGU7CisJCWlvdlsyXS5p
b3ZfYmFzZSA9ICZwYWQ7CisJCWlvdlsyXS5pb3ZfbGVuID0gcGFkX3BrdGxlbiAtIGh2c19wa3Rs
ZW47CisKKwkJZXJyb3IgPSB2bWJ1c19jaGFuX2lvdl9zZW5kKGNoYW4sIGlvdiwgMywKKwkJICAg
IGh2c29ja19icl9jYWxsYmFjaywgJmNiYXJnKTsKKwl9IGVsc2UgeworCQlpZiAodG9fd3JpdGUg
PT0gMCkgeworCQkJaW92WzBdLmlvdl9iYXNlID0gJmh2c19wa3Q7CisJCQlpb3ZbMF0uaW92X2xl
biA9IGh2c19wa3RobGVuOworCQkJaW92WzFdLmlvdl9iYXNlID0gJnBhZDsKKwkJCWlvdlsxXS5p
b3ZfbGVuID0gcGFkX3BrdGxlbiAtIGh2c19wa3RsZW47CisJCQllcnJvciA9IHZtYnVzX2NoYW5f
aW92X3NlbmQoY2hhbiwgaW92LCAyLCBOVUxMLCBOVUxMKTsKKwkJfQorCX0KKworCWlmIChlcnJv
cikgeworCQlIVlNPQ0tfREJHKEhWU09DS19EQkdfVkVSQk9TRSwKKwkJICAgICIlczogZXJyb3Ig
PSAlZFxuIiwgX19mdW5jX18sIGVycm9yKTsKKwl9CisKKwlyZXR1cm4gKGVycm9yKTsKK30KKwor
LyoKKyAqIENoZWNrIGlmIHdlIGhhdmUgZGF0YSBvbiBjdXJyZW50IHJpbmcgYnVmZmVyIHRvIHJl
YWQKKyAqIG9yIG5vdC4gSWYgbm90LCBhZHZhbmNlIHRoZSByaW5nIGJ1ZmZlciByZWFkIGluZGV4
IHRvCisgKiBuZXh0IHBhY2tldC4gVXBkYXRlIHRoZSByZWNldl9kYXRhX2xlbiBhbmQgcmVjZXZf
ZGF0YV9vZmYKKyAqIHRvIG5ldyB2YWx1ZS4KKyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVz
IGNhbiByZWFkLgorICovCitzdGF0aWMgdWludDMyX3QKK2h2c29ja19jYW5yZWFkX2NoZWNrKHN0
cnVjdCBodnNfcGNiICpwY2IpCit7CisJdWludDMyX3QgYWR2YW5jZTsKKwl1aW50MzJfdCB0bGVu
LCBobGVuLCBkbGVuOworCXVpbnQzMl90IGJ5dGVzX2NhbnJlYWQgPSAwOworCWludCBlcnJvcjsK
KworCWlmIChwY2IgPT0gTlVMTCB8fCBwY2ItPmNoYW4gPT0gTlVMTCkgeworCQlwY2ItPnNvLT5z
b19lcnJvciA9IEVJTzsKKwkJcmV0dXJuICgwKTsKKwl9CisKKwkvKiBTdGlsbCBoYXZlIGRhdGEg
bm90IHJlYWQgeWV0IG9uIGN1cnJlbnQgcGFja2V0ICovCisJaWYgKHBjYi0+cmVjdl9kYXRhX2xl
biA+IDApCisJCXJldHVybiAocGNiLT5yZWN2X2RhdGFfbGVuKTsKKworCWlmIChwY2ItPnJiX2lu
aXQpCisJCWFkdmFuY2UgPQorCQkgICAgVk1CVVNfQ0hBTlBLVF9HRVRMRU4ocGNiLT5odnNfcGt0
LmNoYW5fcGt0X2hkci5jcGhfdGxlbik7CisJZWxzZQorCQlhZHZhbmNlID0gMDsKKworCWJ5dGVz
X2NhbnJlYWQgPSB2bWJ1c19jaGFuX3JlYWRfYXZhaWxhYmxlKHBjYi0+Y2hhbik7CisKKwlIVlNP
Q0tfREJHKEhWU09DS19EQkdfVkVSQk9TRSwKKwkgICAgIiVzOiBieXRlc19jYW5yZWFkIG9uIGJy
ID0gJXUsIGFkdmFuY2UgPSAldVxuIiwKKwkgICAgX19mdW5jX18sIGJ5dGVzX2NhbnJlYWQsIGFk
dmFuY2UpOworCisJaWYgKHBjYi0+cmJfaW5pdCAmJiBieXRlc19jYW5yZWFkID09IChhZHZhbmNl
ICsgc2l6ZW9mKHVpbnQ2NF90KSkpIHsKKwkJLyoKKwkJICogTm90aGluZyB0byByZWFkLiBOZWVk
IHRvIGFkdmFuY2UgdGhlIHJpbmRleCBiZWZvcmUKKwkJICogY2FsbGluZyBzYndhaXQsIHNvIGhv
c3Qga25vd3MgdG8gd2FrZSB1cyB1cCB3aGVuIGRhdGEKKwkJICogaXMgYXZhaWxhYmxlIHRvIHJl
YWQgb24gcmIuCisJCSAqLworCQllcnJvciA9IHZtYnVzX2NoYW5fcmVjdl9pZHhhZHYocGNiLT5j
aGFuLCBhZHZhbmNlKTsKKwkJaWYgKGVycm9yKSB7CisJCQlIVlNPQ0tfREJHKEhWU09DS19EQkdf
RVJSLAorCQkJICAgICIlczogYWZ0ZXIgY2FsbGluZyB2bWJ1c19jaGFuX3JlY3ZfaWR4YWR2LCAi
CisJCQkgICAgImdvdCBlcnJvciA9ICVkXG4iLCAgX19mdW5jX18sIGVycm9yKTsKKwkJCXJldHVy
biAoMCk7CisJCX0gZWxzZSB7CisJCQlwY2ItPnJiX2luaXQgPSBmYWxzZTsKKwkJCXBjYi0+cmVj
dl9kYXRhX2xlbiA9IDA7CisJCQlwY2ItPnJlY3ZfZGF0YV9vZmYgPSAwOworCQkJYnl0ZXNfY2Fu
cmVhZCA9IHZtYnVzX2NoYW5fcmVhZF9hdmFpbGFibGUocGNiLT5jaGFuKTsKKworCQkJSFZTT0NL
X0RCRyhIVlNPQ0tfREJHX1ZFUkJPU0UsCisJCQkgICAgIiVzOiBhZHZhbmNlZCAldSBieXRlcywg
IgorCQkJICAgICIgYnl0ZXNfY2FucmVhZCBvbiBiciBub3cgPSAldVxuIiwKKwkJCSAgICBfX2Z1
bmNfXywgYWR2YW5jZSwgYnl0ZXNfY2FucmVhZCk7CisKKwkJCWlmIChieXRlc19jYW5yZWFkID09
IDApCisJCQkJcmV0dXJuICgwKTsKKwkJCWVsc2UKKwkJCQlhZHZhbmNlID0gMDsKKwkJfQorCX0K
KworCWlmIChieXRlc19jYW5yZWFkIDwKKwkgICAgYWR2YW5jZSArIChzaXplb2Yoc3RydWN0IGh2
c19wa3RfaGVhZGVyKSArIHNpemVvZih1aW50NjRfdCkpKQorCQlyZXR1cm4gKDApOworCisJZXJy
b3IgPSB2bWJ1c19jaGFuX3JlY3ZfcGVlayhwY2ItPmNoYW4sICZwY2ItPmh2c19wa3QsCisJICAg
IHNpemVvZihzdHJ1Y3QgaHZzX3BrdF9oZWFkZXIpLCBhZHZhbmNlKTsKKworCS8qIERvbid0IGhh
dmUgYW55dGhpbmcgdG8gcmVhZCAqLworCWlmIChlcnJvcikgeworCQlIVlNPQ0tfREJHKEhWU09D
S19EQkdfVkVSQk9TRSwKKwkJICAgICIlczogYWZ0ZXIgY2FsbGluZyB2bWJ1c19jaGFuX3JlY3Zf
cGVlaywgZ290IGVycm9yID0gJWRcbiIsCisJCSAgICBfX2Z1bmNfXywgZXJyb3IpOworCQlyZXR1
cm4gKDApOworCX0KKworCS8qCisJICogV2UganVzdCByZWFkIGluIGEgbmV3IHBhY2tldCBoZWFk
ZXIuIERvIHNvbWUgc2FuaXR5IGNoZWNrcy4KKwkgKi8KKwl0bGVuID0gVk1CVVNfQ0hBTlBLVF9H
RVRMRU4ocGNiLT5odnNfcGt0LmNoYW5fcGt0X2hkci5jcGhfdGxlbik7CisJaGxlbiA9IFZNQlVT
X0NIQU5QS1RfR0VUTEVOKHBjYi0+aHZzX3BrdC5jaGFuX3BrdF9oZHIuY3BoX2hsZW4pOworCWRs
ZW4gPSBwY2ItPmh2c19wa3Qudm1waXBlX3BrdF9oZHIudm1waXBlX2RhdGFfc2l6ZTsKKwlpZiAo
X19wcmVkaWN0X2ZhbHNlKGhsZW4gPCBzaXplb2Yoc3RydWN0IHZtYnVzX2NoYW5wa3RfaGRyKSkg
fHwKKwkgICAgX19wcmVkaWN0X2ZhbHNlKGhsZW4gPiB0bGVuKSB8fAorCSAgICBfX3ByZWRpY3Rf
ZmFsc2UodGxlbiA8IGRsZW4gKyBzaXplb2Yoc3RydWN0IGh2c19wa3RfaGVhZGVyKSkpIHsKKwkJ
SFZTT0NLX0RCRyhIVlNPQ0tfREJHX1ZFUkJPU0UsCisJCSAgICAiaW52YWxpZCB0bGVuKCV1KSwg
aGxlbigldSkgb3IgZGxlbigldSlcbiIsCisJCSAgICB0bGVuLCBobGVuLCBkbGVuKTsKKwkJcGNi
LT5zby0+c29fZXJyb3IgPSBFSU87CisJCXJldHVybiAoMCk7CisJfQorCWlmIChwY2ItPnJiX2lu
aXQgPT0gZmFsc2UpCisJCXBjYi0+cmJfaW5pdCA9IHRydWU7CisKKwlIVlNPQ0tfREJHKEhWU09D
S19EQkdfVkVSQk9TRSwKKwkgICAgIkdvdCBuZXcgcGt0IHRsZW4oJXUpLCBobGVuKCV1KSBvciBk
bGVuKCV1KVxuIiwKKwkgICAgdGxlbiwgaGxlbiwgZGxlbik7CisKKwkvKiBUaGUgb3RoZXIgc2lk
ZSBoYXMgc2VudCBhIGNsb3NlIEZJTiAqLworCWlmIChkbGVuID09IDApIHsKKwkJSFZTT0NLX0RC
RyhIVlNPQ0tfREJHX1ZFUkJPU0UsCisJCSAgICAiJXM6IFJlY2VpdmVkIEZJTiBmcm9tIG90aGVy
IHNpZGVcbiIsIF9fZnVuY19fKTsKKwkJLyogaW5mb3JtIHRoZSBjYWxsZXIgYnkgc2V0aW5nIHNv
X2Vycm9yIHRvIEVTSFVURE9XTiAqLworCQlwY2ItPnNvLT5zb19lcnJvciA9IEVTSFVURE9XTjsK
Kwl9CisKKwlIVlNPQ0tfREJHKEhWU09DS19EQkdfVkVSQk9TRSwKKwkgICAgIiVzOiBjYW5yZWFk
IG9uIHJlY2VpdmUgcmluZyBpcyAldSBcbiIsIF9fZnVuY19fLCBkbGVuKTsKKworCXBjYi0+cmVj
dl9kYXRhX2xlbiA9IGRsZW47CisJcGNiLT5yZWN2X2RhdGFfb2ZmID0gMDsKKworCXJldHVybiAo
cGNiLT5yZWN2X2RhdGFfbGVuKTsKK30KKworc3RhdGljIHVpbnQzMl90CitodnNvY2tfY2Fud3Jp
dGVfY2hlY2soc3RydWN0IGh2c19wY2IgKnBjYikKK3sKKwl1aW50MzJfdCB3cml0ZWFibGU7CisJ
dWludDMyX3QgcmV0OworCisJaWYgKHBjYiA9PSBOVUxMIHx8IHBjYi0+Y2hhbiA9PSBOVUxMKQor
CQlyZXR1cm4gKDApOworCisJd3JpdGVhYmxlID0gdm1idXNfY2hhbl93cml0ZV9hdmFpbGFibGUo
cGNiLT5jaGFuKTsKKworCS8qCisJICogV2UgbXVzdCBhbHdheXMgcmVzZXJ2ZSBhIDAtbGVuZ3Ro
LXBheWxvYWQgcGFja2V0IGZvciB0aGUgRklOLgorCSAqLworCUhWU09DS19EQkcoSFZTT0NLX0RC
R19WRVJCT1NFLAorCSAgICAiJXM6IHdyaXRlYWJsZSBpcyAldSwgc2hvdWxkIGJlIGdyZWF0ZXIg
dGhhbiAlbHVcbiIsCisJICAgIF9fZnVuY19fLCB3cml0ZWFibGUsIEhWU09DS19QS1RfTEVOKDEp
ICsgSFZTT0NLX1BLVF9MRU4oMCkpOworCisJaWYgKHdyaXRlYWJsZSA8IEhWU09DS19QS1RfTEVO
KDEpICsgSFZTT0NLX1BLVF9MRU4oMCkpIHsKKwkJLyoKKwkJICogVGhlIFR4IHJpbmcgc2VlbXMg
ZnVsbC4KKwkJICovCisJCXJldHVybiAoMCk7CisJfQorCisJcmV0ID0gd3JpdGVhYmxlIC0gSFZT
T0NLX1BLVF9MRU4oMCkgLSBIVlNPQ0tfUEtUX0xFTigwKTsKKworCUhWU09DS19EQkcoSFZTT0NL
X0RCR19WRVJCT1NFLAorCSAgICAiJXM6IGF2YWlsYWJsZSBzaXplIGlzICV1XG4iLCBfX2Z1bmNf
Xywgcm91bmRkb3duMihyZXQsIDgpKTsKKworCXJldHVybiAocm91bmRkb3duMihyZXQsIDgpKTsK
K30KKworc3RhdGljIHZvaWQKK2h2c29ja19zZXRfY2hhbl9wZW5kaW5nX3NlbmRfc2l6ZShzdHJ1
Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbikKK3sKKwl2bWJ1c19jaGFuX3NldF9wZW5kaW5nX3NlbmRf
c2l6ZShjaGFuLAorCSAgICBIVlNPQ0tfUEtUX0xFTihIVlNPQ0tfU0VORF9CVUZfU1opKTsKK30K
Kworc3RhdGljIGludAoraHZzb2NrX29wZW5fY2hhbm5lbChzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAq
Y2hhbiwgc3RydWN0IHNvY2tldCAqc28pCit7CisJdW5zaWduZWQgaW50IHJjdmJ1Ziwgc25kYnVm
OworCXN0cnVjdCBodnNfcGNiICpwY2IgPSBzbzJodnNwY2Ioc28pOworCWludCByZXQ7CisKKwlp
ZiAodm1idXNfY3VycmVudF92ZXJzaW9uIDwgVk1CVVNfVkVSU0lPTl9XSU4xMF9WNSkgeworCQlz
bmRidWYgPSBIVlNfUklOR0JVRl9TTkRfU0laRTsKKwkJcmN2YnVmID0gSFZTX1JJTkdCVUZfUkNW
X1NJWkU7CisJfSBlbHNlIHsKKwkJc25kYnVmID0gTUFYKHNvLT5zb19zbmQuc2JfaGl3YXQsIEhW
U19SSU5HQlVGX1NORF9TSVpFKTsKKwkJc25kYnVmID0gTUlOKHNuZGJ1ZiwgSFZTX1JJTkdCVUZf
TUFYX1NJWkUpOworCQlzbmRidWYgPSByb3VuZGRvd24yKHNuZGJ1ZiwgUEFHRV9TSVpFKTsKKwkJ
cmN2YnVmID0gTUFYKHNvLT5zb19yY3Yuc2JfaGl3YXQsIEhWU19SSU5HQlVGX1JDVl9TSVpFKTsK
KwkJcmN2YnVmID0gTUlOKHJjdmJ1ZiwgSFZTX1JJTkdCVUZfTUFYX1NJWkUpOworCQlyY3ZidWYg
PSByb3VuZGRvd24yKHJjdmJ1ZiwgUEFHRV9TSVpFKTsKKwl9CisKKwkvKgorCSAqIENhbiBvbmx5
IHJlYWQgd2hhdGV2ZXIgdXNlciBwcm92aWRlZCBzaXplIG9mIGRhdGEKKwkgKiBmcm9tIHJpbmcg
YnVmZmVyLiBUdXJuIG9mZiBiYXRjaGVkIHJlYWRpbmcuCisJICovCisJdm1idXNfY2hhbl9zZXRf
cmVhZGJhdGNoKGNoYW4sIGZhbHNlKTsKKworCXJldCA9IHZtYnVzX2NoYW5fb3BlbihjaGFuLCBz
bmRidWYsIHJjdmJ1ZiwgTlVMTCwgMCwKKwkgICAgaHZzb2NrX2NoYW5fY2IsIHBjYik7CisKKwlp
ZiAocmV0ICE9IDApIHsKKwkJSFZTT0NLX0RCRyhIVlNPQ0tfREJHX0VSUiwKKwkJICAgICIlczog
ZmFpbGVkIHRvIG9wZW4gaHZzb2NrIGNoYW5uZWwsIHNuZGJ1ZiA9ICV1LCAiCisJCSAgICAicmN2
YnVmID0gJXVcbiIsIF9fZnVuY19fLCBzbmRidWYsIHJjdmJ1Zik7CisJfSBlbHNlIHsKKwkJSFZT
T0NLX0RCRyhIVlNPQ0tfREJHX0lORk8sCisJCSAgICAiJXM6IGh2c29jayBjaGFubmVsIG9wZW5l
ZCwgc25kYnVmID0gJXUsIGkiCisJCSAgICAicmN2YnVmID0gJXVcbiIsIF9fZnVuY19fLCBzbmRi
dWYsIHJjdmJ1Zik7CisJCS8qCisJCSAqIFNlIHRoZSBwZW5kaW5nIHNlbmQgc2l6ZSBzbyB0byBy
ZWNlaXZlIHdha2V1cAorCQkgKiBzaWduYWxzIGZyb20gaG9zdCB3aGVuIHRoZXJlIGlzIGVub3Vn
aCBzcGFjZSBvbgorCQkgKiByeCBidWZmZXIgcmluZyB0byB3cml0ZS4KKwkJICovCisJCWh2c29j
a19zZXRfY2hhbl9wZW5kaW5nX3NlbmRfc2l6ZShjaGFuKTsKKwl9CisKKwlyZXR1cm4gcmV0Owor
fQorCisvKgorICogR3Vlc3QgaXMgbGlzdGVuaW5nIHBhc3NpdmVseSBvbiB0aGUgc29ja2V0LiBP
cGVuIGNoYW5uZWwgYW5kCisgKiBjcmVhdGUgYSBuZXcgc29ja2V0IGZvciB0aGUgY29ubmVjaXRv
bi4KKyAqLworc3RhdGljIHZvaWQKK2h2c29ja19vcGVuX2Nvbm5fcGFzc2l2ZShzdHJ1Y3Qgdm1i
dXNfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNvY2tldCAqc28sCisgICAgc3RydWN0IGh2c29ja19z
YyAqc2MpCit7CisJc3RydWN0IHNvY2tldCAqbmV3X3NvOworCXN0cnVjdCBodnNfcGNiICpuZXdf
cGNiLCAqcGNiOworCWludCBlcnJvcjsKKworCS8qIERvIG5vdGhpbmcgaWYgc29ja2V0IGlzIG5v
dCBsaXN0ZW5pbmcgKi8KKwlpZiAoKHNvLT5zb19vcHRpb25zICYgU09fQUNDRVBUQ09OTikgPT0g
MCkgeworCQlIVlNPQ0tfREJHKEhWU09DS19EQkdfRVJSLAorCQkgICAgIiVzOiBzb2NrZXQgaXMg
bm90IGEgbGlzdGVuaW5nIG9uZVxuIiwgX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCisJLyoK
KwkgKiBDcmVhdGUgYSBuZXcgc29ja2V0LiBUaGlzIHdpbGwgY2FsbCBwcnVfYXR0YWNoIHRvIGNv
bXBsZXRlCisJICogdGhlIHNvY2tldCBpbml0aWFsaXphdGlvbiBhbmQgcHV0IHRoZSBuZXcgc29j
a2V0IG9udG8KKwkgKiBsaXN0ZW5pbmcgc29ja2V0J3Mgc29sX2luY29tcCBsaXN0LCB3YWl0aW5n
IHRvIGJlIHByb21vdGVkCisJICogdG8gc29sX2NvbXAgbGlzdC4KKwkgKiBUaGUgbmV3IHNvY2tl
dCBjcmVhdGVkIGhhcyByZWYgY291bnQgMC4gVGhlcmUgaXMgbm8gb3RoZXIKKwkgKiB0aHJlYWQg
dGhhdCBjaGFuZ2VzIHRoZSBzdGF0ZSBvZiB0aGlzIG5ldyBvbmUgYXQgdGhlCisJICogbW9tZW50
LCBzbyB3ZSBkb24ndCBuZWVkIHRvIGhvbGQgaXRzIGxvY2sgd2hpbGUgb3BlbmluZworCSAqIGNo
YW5uZWwgYW5kIGZpbGxpbmcgb3V0IGl0cyBwY2IgaW5mb3JtYXRpb24uCisJICovCisJbmV3X3Nv
ID0gc29uZXdjb25uKHNvLCAwKTsKKwlpZiAoIW5ld19zbykKKwkJSFZTT0NLX0RCRyhIVlNPQ0tf
REJHX0VSUiwKKwkJICAgICIlczogY3JlYXRpbmcgbmV3IHNvY2tldCBmYWlsZWRcbiIsIF9fZnVu
Y19fKTsKKworCS8qCisJICogTm93IG9wZW4gdGhlIHZtYnVzIGNoYW5uZWwuIElmIGl0IGZhaWxz
LCB0aGUgc29ja2V0IHdpbGwgYmUKKwkgKiBvbiB0aGUgbGlzdGVuaW5nIHNvY2tldCdzIHNvbF9p
bmNvbXAgcXVldWUgdW50aWwgaXQgaXMKKwkgKiByZXBsYWNlZCBhbmQgYWJvcnRlZC4KKwkgKi8K
KwllcnJvciA9IGh2c29ja19vcGVuX2NoYW5uZWwoY2hhbiwgbmV3X3NvKTsKKwlpZiAoZXJyb3Ip
IHsKKwkJbmV3X3NvLT5zb19lcnJvciA9IGVycm9yOworCQlyZXR1cm47CisJfQorCisJcGNiID0g
c28tPnNvX3BjYjsKKwluZXdfcGNiID0gbmV3X3NvLT5zb19wY2I7CisKKwlodnNfYWRkcl9zZXQo
JihuZXdfcGNiLT5sb2NhbF9hZGRyKSwgcGNiLT5sb2NhbF9hZGRyLmh2c19wb3J0KTsKKwkvKiBS
ZW1vdGUgcG9ydCBpcyB1bmtub3duIHRvIGd1ZXN0IGluIHRoaXMgdHlwZSBvZiBjb25uZWNpdG9u
ICovCisJaHZzX2FkZHJfc2V0KCYobmV3X3BjYi0+cmVtb3RlX2FkZHIpLCBIVkFERFJfUE9SVF9V
TktOT1dOKTsKKwluZXdfcGNiLT5jaGFuID0gY2hhbjsKKwluZXdfcGNiLT5yZWN2X2RhdGFfbGVu
ID0gMDsKKwluZXdfcGNiLT5yZWN2X2RhdGFfb2ZmID0gMDsKKwluZXdfcGNiLT5yYl9pbml0ID0g
ZmFsc2U7CisKKwluZXdfcGNiLT52bV9zcnZfaWQgPSAqdm1idXNfY2hhbl9ndWlkX3R5cGUoY2hh
bik7CisJbmV3X3BjYi0+aG9zdF9zcnZfaWQgPSAqdm1idXNfY2hhbl9ndWlkX2luc3QoY2hhbik7
CisKKwlodnNfaW5zZXJ0X3NvY2tldF9vbl9saXN0KG5ld19zbywgSFZTX0xJU1RfQ09OTkVDVEVE
KTsKKworCXNjLT5wY2IgPSBuZXdfcGNiOworCisJLyoKKwkgKiBDaGFuZ2UgdGhlIHNvY2tldCBz
dGF0ZSB0byBTU19JU0NPTk5FQ1RFRC4gVGhpcyB3aWxsIHByb21vdGUKKwkgKiB0aGUgc29ja2V0
IHRvIHNvbF9jb21wIHF1ZXVlIGFuZCB3YWtlIHVwIHRoZSB0aHJlYWQgd2hpY2gKKwkgKiBpcyBh
Y2NlcHRpbmcgY29ubmVjdGlvbi4KKwkgKi8KKwlzb2lzY29ubmVjdGVkKG5ld19zbyk7Cit9CisK
KworLyoKKyAqIEd1ZXN0IGlzIGFjdGl2ZWx5IGNvbm5lY3RpbmcgdG8gaG9zdC4KKyAqLworc3Rh
dGljIHZvaWQKK2h2c29ja19vcGVuX2Nvbm5fYWN0aXZlKHN0cnVjdCB2bWJ1c19jaGFubmVsICpj
aGFuLCBzdHJ1Y3Qgc29ja2V0ICpzbykKK3sKKwlzdHJ1Y3QgaHZzX3BjYiAqcGNiOworCWludCBl
cnJvcjsKKworCWVycm9yID0gaHZzb2NrX29wZW5fY2hhbm5lbChjaGFuLCBzbyk7CisJaWYgKGVy
cm9yKSB7CisJCXNvLT5zb19lcnJvciA9IGVycm9yOworCQlyZXR1cm47CisJfQorCisJcGNiID0g
c28tPnNvX3BjYjsKKwlwY2ItPmNoYW4gPSBjaGFuOworCXBjYi0+cmVjdl9kYXRhX2xlbiA9IDA7
CisJcGNiLT5yZWN2X2RhdGFfb2ZmID0gMDsKKwlwY2ItPnJiX2luaXQgPSBmYWxzZTsKKworCW10
eF9sb2NrKCZodnNfdHJhbnNfc29ja3NfbXR4KTsKKwlfX2h2c19yZW1vdmVfc29ja2V0X2Zyb21f
bGlzdChzbywgSFZTX0xJU1RfQk9VTkQpOworCV9faHZzX2luc2VydF9zb2NrZXRfb25fbGlzdChz
bywgSFZTX0xJU1RfQ09OTkVDVEVEKTsKKwltdHhfdW5sb2NrKCZodnNfdHJhbnNfc29ja3NfbXR4
KTsKKworCS8qCisJICogQ2hhbmdlIHRoZSBzb2NrZXQgc3RhdGUgdG8gU1NfSVNDT05ORUNURUQu
IFRoaXMgd2lsbCB3YWtlIHVwCisJICogdGhlIHRocmVhZCBzbGVlcGluZyBpbiBjb25uZWN0IGNh
bGwuCisJICovCisJc29pc2Nvbm5lY3RlZChzbyk7Cit9CisKK3N0YXRpYyB2b2lkCitodnNvY2tf
b3Blbl9jb25uZWN0aW9uKHN0cnVjdCB2bWJ1c19jaGFubmVsICpjaGFuLCBzdHJ1Y3QgaHZzb2Nr
X3NjICpzYykKK3sKKwlzdHJ1Y3QgaHlwZXJ2X2d1aWQgKmluc3RfZ3VpZCwgKnR5cGVfZ3VpZDsK
Kwlib29sIGNvbm5fZnJvbV9ob3N0OworCXN0cnVjdCBzb2NrYWRkcl9odnMgYWRkcjsKKwlzdHJ1
Y3Qgc29ja2V0ICpzbzsKKwlzdHJ1Y3QgaHZzX3BjYiAqcGNiOworCisJdHlwZV9ndWlkID0gKHN0
cnVjdCBoeXBlcnZfZ3VpZCAqKSB2bWJ1c19jaGFuX2d1aWRfdHlwZShjaGFuKTsKKwlpbnN0X2d1
aWQgPSAoc3RydWN0IGh5cGVydl9ndWlkICopIHZtYnVzX2NoYW5fZ3VpZF9pbnN0KGNoYW4pOwor
CWNvbm5fZnJvbV9ob3N0ID0gdm1idXNfY2hhbl9pc19odnNfY29ubl9mcm9tX2hvc3QoY2hhbik7
CisKKwlIVlNPQ0tfREJHKEhWU09DS19EQkdfSU5GTywgInR5cGVfZ3VpZCBpcyAiKTsKKwlodnNv
Y2tfcHJpbnRfZ3VpZCh0eXBlX2d1aWQpOworCUhWU09DS19EQkcoSFZTT0NLX0RCR19JTkZPLCAi
aW5zdF9ndWlkIGlzICIpOworCWh2c29ja19wcmludF9ndWlkKGluc3RfZ3VpZCk7CisJSFZTT0NL
X0RCRyhIVlNPQ0tfREJHX0lORk8sICJjb25uZWN0aW9uICVzIGhvc3RcbiIsCisJICAgIChjb25u
X2Zyb21faG9zdCA9PSB0cnVlICkgPyAiZnJvbSIgOiAidG8iKTsKKworCS8qCisJICogVGhlIGxp
c3RlbmluZyBwb3J0IHNob3VsZCBiZSBpbiBbMCwgTUFYX0xJU1RFTl9QT1JUXQorCSAqLworCWlm
ICghaXNfdmFsaWRfc3J2X2lkKHR5cGVfZ3VpZCkpCisJCXJldHVybjsKKworCS8qCisJICogVGhl
cmUgc2hvdWxkIGJlIGEgYm91bmQgc29ja2V0IGFscmVhZHkgY3JlYXRlZCBubyBtYXR0ZXIKKwkg
KiBpdCBpcyBhIHBhc3NpdmUgb3IgYWN0aXZlIGNvbm5lY3Rpb24uCisJICogRm9yIGhvc3QgaW5p
dGlhdGVkIGNvbm5lY3Rpb24gKHBhc3NpdmUgb24gZ3Vlc3Qgc2lkZSksCisJICogdGhlICB0eXBl
X2d1aWQgY29udGFpbnMgdGhlIHBvcnQgd2hpY2ggZ3Vlc3QgaXMgYm91bmQgYW5kCisJICogbGlz
dGVuaW5nLgorCSAqIEZvciB0aGUgZ3Vlc3QgaW5pdGlhdGVkIGNvbm5lY3Rpb24gKGFjdGl2ZSBv
biBndWVzdCBzaWRlKSwKKwkgKiB0aGUgaW5zdF9ndWlkIGNvbnRhaW5zIHRoZSBwb3J0IHRoYXQg
Z3Vlc3QgaGFzIGF1dG8gYm91bmQKKwkgKiB0by4KKwkgKi8KKwlodnNfYWRkcl9pbml0KCZhZGRy
LCBjb25uX2Zyb21faG9zdCA/IHR5cGVfZ3VpZCA6IGluc3RfZ3VpZCk7CisJc28gPSBodnNfZmlu
ZF9zb2NrZXRfb25fbGlzdCgmYWRkciwgSFZTX0xJU1RfQk9VTkQpOworCWlmICghc28pIHsKKwkJ
SFZTT0NLX0RCRyhIVlNPQ0tfREJHX0VSUiwKKwkJICAgICIlczogbm8gYm91bmQgc29ja2V0IGZv
dW5kIGZvciBwb3J0ICV1XG4iLAorCQkgICAgX19mdW5jX18sIGFkZHIuaHZzX3BvcnQpOworCQly
ZXR1cm47CisJfQorCisJaWYgKGNvbm5fZnJvbV9ob3N0KSB7CisJCWh2c29ja19vcGVuX2Nvbm5f
cGFzc2l2ZShjaGFuLCBzbywgc2MpOworCX0gZWxzZSB7CisJCSh2b2lkKSBodnNfdHJhbnNfbG9j
aygpOworCQlwY2IgPSBzby0+c29fcGNiOworCQlpZiAocGNiICYmIHBjYi0+c28pIHsKKwkJCXNj
LT5wY2IgPSBzbzJodnNwY2Ioc28pOworCQkJaHZzb2NrX29wZW5fY29ubl9hY3RpdmUoY2hhbiwg
c28pOworCQl9IGVsc2UgeworCQkJSFZTT0NLX0RCRyhIVlNPQ0tfREJHX1ZFUkJPU0UsCisJCQkg
ICAgIiVzOiBjaGFubmVsIGRldGFjaGVkIGJlZm9yZSBvcGVuXG4iLCBfX2Z1bmNfXyk7CisJCX0K
KwkJaHZzX3RyYW5zX3VubG9jaygpOworCX0KKworfQorCitzdGF0aWMgaW50CitodnNvY2tfcHJv
YmUoZGV2aWNlX3QgZGV2KQoreworCXN0cnVjdCB2bWJ1c19jaGFubmVsICpjaGFubmVsID0gdm1i
dXNfZ2V0X2NoYW5uZWwoZGV2KTsKKworCWlmICghY2hhbm5lbCB8fCAhdm1idXNfY2hhbl9pc19o
dnMoY2hhbm5lbCkpIHsKKwkJSFZTT0NLX0RCRyhIVlNPQ0tfREJHX1ZFUkJPU0UsCisJCSAgICAi
aHZzb2NrX3Byb2JlIGNhbGxlZCBidXQgbm90IGEgaHZzb2NrIGNoYW5uZWwgaWQgJXVcbiIsCisJ
CSAgICB2bWJ1c19jaGFuX2lkKGNoYW5uZWwpKTsKKworCQlyZXR1cm4gRU5YSU87CisJfSBlbHNl
IHsKKwkJSFZTT0NLX0RCRyhIVlNPQ0tfREJHX1ZFUkJPU0UsCisJCSAgICAiaHZzb2NrX3Byb2Jl
IGdvdCBhIGh2c29jayBjaGFubmVsIGlkICV1XG4iLAorCQkgICAgdm1idXNfY2hhbl9pZChjaGFu
bmVsKSk7CisKKwkJcmV0dXJuIEJVU19QUk9CRV9ERUZBVUxUOworCX0KK30KKworc3RhdGljIGlu
dAoraHZzb2NrX2F0dGFjaChkZXZpY2VfdCBkZXYpCit7CisJc3RydWN0IHZtYnVzX2NoYW5uZWwg
KmNoYW5uZWwgPSB2bWJ1c19nZXRfY2hhbm5lbChkZXYpOworCXN0cnVjdCBodnNvY2tfc2MgKnNj
ID0gKHN0cnVjdCBodnNvY2tfc2MgKilkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisKKwlIVlNPQ0tf
REJHKEhWU09DS19EQkdfVkVSQk9TRSwgImh2c29ja19hdHRhY2ggY2FsbGVkLlxuIik7CisKKwlo
dnNvY2tfb3Blbl9jb25uZWN0aW9uKGNoYW5uZWwsIHNjKTsKKworCS8qCisJICogQWx3YXlzIHJl
dHVybiBzdWNjZXNzLiBPbiBlcnJvciB0aGUgaG9zdCB3aWxsIHJlc2NpbmQgdGhlIGRldmljZQor
CSAqIGluIDMwIHNlY29uZHMgYW5kIHdlIGNhbiBkbyBjbGVhbnVwIGF0IHRoYXQgdGltZSBpbgor
CSAqIHZtYnVzX2NoYW5fbXNncHJvY19jaHJlc2NpbmQoKS4KKwkgKi8KKwlyZXR1cm4gKDApOwor
fQorCitzdGF0aWMgaW50CitodnNvY2tfZGV0YWNoKGRldmljZV90IGRldikKK3sKKwlzdHJ1Y3Qg
aHZzb2NrX3NjICpzYyA9IChzdHJ1Y3QgaHZzb2NrX3NjICopZGV2aWNlX2dldF9zb2Z0YyhkZXYp
OworCXN0cnVjdCBzb2NrZXQgKnNvOworCWludCBlcnJvciwgcmV0cnk7CisKKwlpZiAoYm9vdHZl
cmJvc2UpCisJCWRldmljZV9wcmludGYoZGV2LCAiaHZzb2NrX2RldGFjaCBjYWxsZWQuXG4iKTsK
KworCUhWU09DS19EQkcoSFZTT0NLX0RCR19WRVJCT1NFLCAiaHZzb2NrX2RldGFjaCBjYWxsZWQu
XG4iKTsKKworCWlmIChzYy0+cGNiICE9IE5VTEwpIHsKKwkJKHZvaWQpIGh2c190cmFuc19sb2Nr
KCk7CisKKwkJc28gPSBoc3ZwY2Iyc28oc2MtPnBjYik7CisJCWlmIChzbykgeworCQkJLyogQ2xv
c2UgdGhlIGNvbm5lY3Rpb24gKi8KKwkJCWlmIChzby0+c29fc3RhdGUgJgorCQkJICAgIChTU19J
U0NPTk5FQ1RFRHxTU19JU0NPTk5FQ1RJTkd8U1NfSVNESVNDT05ORUNUSU5HKSkKKwkJCQlzb2lz
ZGlzY29ubmVjdGVkKHNvKTsKKwkJfQorCisJCW10eF9sb2NrKCZodnNfdHJhbnNfc29ja3NfbXR4
KTsKKwkJX19odnNfcmVtb3ZlX3BjYl9mcm9tX2xpc3Qoc2MtPnBjYiwKKwkJICAgIEhWU19MSVNU
X0JPVU5EIHwgSFZTX0xJU1RfQ09OTkVDVEVEKTsKKwkJbXR4X3VubG9jaygmaHZzX3RyYW5zX3Nv
Y2tzX210eCk7CisKKwkJLyoKKwkJICogQ2xvc2UgY2hhbm5lbCB3aGlsZSBubyByZWFkZXIgYW5k
IHNlbmRlciBhcmUgd29ya2luZworCQkgKiBvbiB0aGUgYnVmZmVyIHJpbmdzLgorCQkgKi8KKwkJ
aWYgKHNvKSB7CisJCQlyZXRyeSA9IDA7CisJCQl3aGlsZSAoKGVycm9yID0gc2Jsb2NrKCZzby0+
c29fcmN2LCAwKSkgPT0KKwkJCSAgICBFV09VTERCTE9DSykgeworCQkJCS8qCisJCQkJICogU29t
ZW9uZSBpcyByZWFkaW5nLCByeCBiciBpcyBidXN5CisJCQkJICovCisJCQkJc29pc2Rpc2Nvbm5l
Y3RlZChzbyk7CisJCQkJREVMQVkoNTAwKTsKKwkJCQlIVlNPQ0tfREJHKEhWU09DS19EQkdfVkVS
Qk9TRSwKKwkJCQkgICAgIndhaXRpbmcgZm9yIHJ4IHJlYWRlciB0byBleGl0LCAiCisJCQkJICAg
ICJyZXRyeSA9ICVkXG4iLCByZXRyeSsrKTsKKwkJCX0KKwkJCXJldHJ5ID0gMDsKKwkJCXdoaWxl
ICgoZXJyb3IgPSBzYmxvY2soJnNvLT5zb19zbmQsIDApKSA9PQorCQkJICAgIEVXT1VMREJMT0NL
KSB7CisJCQkJLyoKKwkJCQkgKiBTb21lb25lIGlzIHNlbmRpbmcsIHR4IGJyIGlzIGJ1c3kKKwkJ
CQkgKi8KKwkJCQlzb2lzZGlzY29ubmVjdGVkKHNvKTsKKwkJCQlERUxBWSg1MDApOworCQkJCUhW
U09DS19EQkcoSFZTT0NLX0RCR19WRVJCT1NFLAorCQkJCSAgICAid2FpdGluZyBmb3IgdHggc2Vu
ZGVyIHRvIGV4aXQsICIKKwkJCQkgICAgInJldHJ5ID0gJWRcbiIsIHJldHJ5KyspOworCQkJfQor
CQl9CisKKworCQliemVybyhzYy0+cGNiLCBzaXplb2Yoc3RydWN0IGh2c19wY2IpKTsKKwkJZnJl
ZShzYy0+cGNiLCBNX0hWU09DSyk7CisJCXNjLT5wY2IgPSBOVUxMOworCisJCWlmIChzbykgewor
CQkJc2J1bmxvY2soJnNvLT5zb19yY3YpOworCQkJc2J1bmxvY2soJnNvLT5zb19zbmQpOworCQkJ
c28tPnNvX3BjYiA9IE5VTEw7CisJCX0KKworCQlodnNfdHJhbnNfdW5sb2NrKCk7CisJfQorCisJ
dm1idXNfY2hhbl9jbG9zZSh2bWJ1c19nZXRfY2hhbm5lbChkZXYpKTsKKworCXJldHVybiAoMCk7
Cit9CisKK3N0YXRpYyBkZXZpY2VfbWV0aG9kX3QgaHZzb2NrX21ldGhvZHNbXSA9IHsKKwkvKiBE
ZXZpY2UgaW50ZXJmYWNlICovCisJREVWTUVUSE9EKGRldmljZV9wcm9iZSwgaHZzb2NrX3Byb2Jl
KSwKKwlERVZNRVRIT0QoZGV2aWNlX2F0dGFjaCwgaHZzb2NrX2F0dGFjaCksCisJREVWTUVUSE9E
KGRldmljZV9kZXRhY2gsIGh2c29ja19kZXRhY2gpLAorCURFVk1FVEhPRF9FTkQKK307CisKK3N0
YXRpYyBkcml2ZXJfdCBodnNvY2tfZHJpdmVyID0geworCSJodl9zb2NrIiwKKwlodnNvY2tfbWV0
aG9kcywKKwlzaXplb2Yoc3RydWN0IGh2c29ja19zYykKK307CisKK3N0YXRpYyBkZXZjbGFzc190
IGh2c29ja19kZXZjbGFzczsKKworRFJJVkVSX01PRFVMRShodnNvY2ssIHZtYnVzLCBodnNvY2tf
ZHJpdmVyLCBodnNvY2tfZGV2Y2xhc3MsIE5VTEwsIE5VTEwpOworTU9EVUxFX1ZFUlNJT04oaHZz
b2NrLCAxKTsKK01PRFVMRV9ERVBFTkQoaHZzb2NrLCB2bWJ1cywgMSwgMSwgMSk7CmRpZmYgLS1n
aXQgYS9zeXMvY29uZi9maWxlcy54ODYgYi9zeXMvY29uZi9maWxlcy54ODYKLS0tIGEvc3lzL2Nv
bmYvZmlsZXMueDg2CisrKyBiL3N5cy9jb25mL2ZpbGVzLng4NgpAQCAtMTEzLDYgKzExMyw3IEBA
CiBkZXYvaHdwbWMvaHdwbWNfdW5jb3JlLmMJb3B0aW9uYWwJaHdwbWMKIGRldi9od3BtYy9od3Bt
Y190c2MuYwkJb3B0aW9uYWwJaHdwbWMKIGRldi9od3BtYy9od3BtY194ODYuYwkJb3B0aW9uYWwJ
aHdwbWMKK2Rldi9oeXBlcnYvaHZzb2NrL2h2X3NvY2suYwkJCQlvcHRpb25hbAloeXBlcnYKIGRl
di9oeXBlcnYvcGNpYi92bWJ1c19wY2liLmMJCQkJb3B0aW9uYWwJaHlwZXJ2IHBjaQogZGV2L2h5
cGVydi9uZXR2c2MvaG5fbnZzLmMJCQkJb3B0aW9uYWwJaHlwZXJ2CiBkZXYvaHlwZXJ2L25ldHZz
Yy9obl9ybmRpcy5jCQkJCW9wdGlvbmFsCWh5cGVydgoK


--b1_79d16d788f9a405bf42820916438b2a4--



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