From mboxrd@z Thu Jan 1 00:00:00 1970
From: Philipp Zabel
Subject: [PATCH v15 2/8] drm/mediatek: Add DRM Driver for Mediatek SoC MT8173.
Date: Wed, 27 Apr 2016 17:05:46 +0200
Message-ID: <1461769552-2752-3-git-send-email-p.zabel@pengutronix.de>
References: <1461769552-2752-1-git-send-email-p.zabel@pengutronix.de>
Mime-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Return-path:
In-Reply-To: <1461769552-2752-1-git-send-email-p.zabel@pengutronix.de>
List-Unsubscribe: ,
List-Archive:
List-Post:
List-Help:
List-Subscribe: ,
Errors-To: dri-devel-bounces@lists.freedesktop.org
Sender: "dri-devel"
To: dri-devel@lists.freedesktop.org
Cc: Mark Rutland , Stephen Boyd , Michael Turquette , Jie Qiu , Cawa Cheng , Mao Huang , YT Shen , Yingjoe Chen , devicetree@vger.kernel.org, Jitao Shi , kernel@pengutronix.de, Pawel Moll , Ian Campbell , Rob Herring , linux-mediatek@lists.infradead.org, Matthias Brugger , Paul Bolle , Emil Velikov , Tomasz Figa , Kumar Gala
List-Id: devicetree@vger.kernel.org
RnJvbTogQ0sgSHUgPGNrLmh1QG1lZGlhdGVrLmNvbT4KClRoaXMgcGF0Y2ggYWRkcyBhbiBpbml0
aWFsIERSTSBkcml2ZXIgZm9yIHRoZSBNZWRpYXRlayBNVDgxNzMgRElTUApzdWJzeXN0ZW0uIEl0
IGN1cnJlbnRseSBzdXBwb3J0cyB0d28gZml4ZWQgb3V0cHV0IHN0cmVhbXMgZnJvbSB0aGUKT1ZM
MC9PVkwxIHNvdXJjZXMgdG8gdGhlIERTSTAvRFBJMCBzaW5rcywgcmVzcGVjdGl2ZWx5LgoKU2ln
bmVkLW9mZi1ieTogQ0sgSHUgPGNrLmh1QG1lZGlhdGVrLmNvbT4KU2lnbmVkLW9mZi1ieTogWVQg
U2hlbiA8eXQuc2hlbkBtZWRpYXRlay5jb20+ClNpZ25lZC1vZmYtYnk6IERhbmllbCBLdXJ0eiA8
ZGprdXJ0ekBjaHJvbWl1bS5vcmc+ClNpZ25lZC1vZmYtYnk6IEJpYmJ5IEhzaWVoIDxiaWJieS5o
c2llaEBtZWRpYXRlay5jb20+ClNpZ25lZC1vZmYtYnk6IE1hbyBIdWFuZyA8bGl0dGxlY3ZyQGNo
cm9taXVtLm9yZz4KU2lnbmVkLW9mZi1ieTogUGhpbGlwcCBaYWJlbCA8cC56YWJlbEBwZW5ndXRy
b25peC5kZT4KLS0tCkNoYW5nZXMgc2luY2UgdjE0OgogLSBGaXhlZCBtb2R1bGUgYnVpbGQKIC0g
U2VsZWN0IERSTV9HRU1fQ01BX0hFTFBFUiBhbmQgdXNlIGRybV9nZW1fY21hX3ZtX29wcwogLSBT
ZWxlY3QgTUVNT1JZIHNvIHRoYXQgc2VsZWN0IE1US19TTUkgd29ya3MgcHJvcGVybHkKIC0gUmVi
YXNlIG9udG8gZHJtLW5leHQgc28gd2UgY2FuIHVzZSBkcm1fY29ubmVjdG9yX3VucmVnaXN0ZXJf
YWxsKCkKIC0gUmVtb3ZlIGRlcHJlY2F0ZWQgdW5sb2FkIGhvb2sKLS0tCiBkcml2ZXJzL2dwdS9k
cm0vS2NvbmZpZyAgICAgICAgICAgICAgICAgICAgIHwgICAyICsKIGRyaXZlcnMvZ3B1L2RybS9N
YWtlZmlsZSAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogZHJpdmVycy9ncHUvZHJtL21lZGlh
dGVrL0tjb25maWcgICAgICAgICAgICB8ICAxNCArCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv
TWFrZWZpbGUgICAgICAgICAgIHwgIDExICsKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtf
ZGlzcF9vdmwuYyAgICAgfCAzMDIgKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vbWVk
aWF0ZWsvbXRrX2Rpc3BfcmRtYS5jICAgIHwgMjQwICsrKysrKysrKysrKwogZHJpdmVycy9ncHUv
ZHJtL21lZGlhdGVrL210a19kcm1fY3J0Yy5jICAgICB8IDU4MiArKysrKysrKysrKysrKysrKysr
KysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9jcnRjLmggICAgIHwg
IDMyICsrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHAuYyAgICAgIHwgMzUz
ICsrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHAu
aCAgICAgIHwgIDQxICsrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHBfY29t
cC5jIHwgMjI1ICsrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9k
ZHBfY29tcC5oIHwgMTUwICsrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJt
X2Rydi5jICAgICAgfCA1NTggKysrKysrKysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1
L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5oICAgICAgfCAgNTcgKysrCiBkcml2ZXJzL2dwdS9k
cm0vbWVkaWF0ZWsvbXRrX2RybV9mYi5jICAgICAgIHwgMTY1ICsrKysrKysrCiBkcml2ZXJzL2dw
dS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9mYi5oICAgICAgIHwgIDIzICsrCiBkcml2ZXJzL2dwdS9k
cm0vbWVkaWF0ZWsvbXRrX2RybV9nZW0uYyAgICAgIHwgMjY5ICsrKysrKysrKysrKysKIGRyaXZl
cnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2dlbS5oICAgICAgfCAgNTkgKysrCiBkcml2ZXJz
L2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9wbGFuZS5jICAgIHwgMjQwICsrKysrKysrKysrKwog
ZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fcGxhbmUuaCAgICB8ICA1OSArKysKIDIw
IGZpbGVzIGNoYW5nZWQsIDMzODMgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRy
aXZlcnMvZ3B1L2RybS9tZWRpYXRlay9LY29uZmlnCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy
cy9ncHUvZHJtL21lZGlhdGVrL01ha2VmaWxlCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9n
cHUvZHJtL21lZGlhdGVrL210a19kaXNwX292bC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy
cy9ncHUvZHJtL21lZGlhdGVrL210a19kaXNwX3JkbWEuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRy
aXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2NydGMuYwogY3JlYXRlIG1vZGUgMTAwNjQ0
IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2NydGMuaAogY3JlYXRlIG1vZGUgMTAw
NjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2RkcC5jCiBjcmVhdGUgbW9kZSAx
MDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwLmgKIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHBfY29tcC5jCiBjcmVh
dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwX2NvbXAu
aAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Ry
di5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1f
ZHJ2LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Ry
bV9mYi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19k
cm1fZmIuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtf
ZHJtX2dlbS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210
a19kcm1fZ2VtLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv
bXRrX2RybV9wbGFuZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlh
dGVrL210a19kcm1fcGxhbmUuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9LY29uZmln
IGIvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKaW5kZXggOWU0ZjJmMS4uOGNlMDM1YyAxMDA2NDQK
LS0tIGEvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKKysrIGIvZHJpdmVycy9ncHUvZHJtL0tjb25m
aWcKQEAgLTI4MywzICsyODMsNSBAQCBzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS92YzQvS2NvbmZp
ZyIKIHNvdXJjZSAiZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvS2NvbmZpZyIKIAogc291cmNlICJk
cml2ZXJzL2dwdS9kcm0vYXJjL0tjb25maWciCisKK3NvdXJjZSAiZHJpdmVycy9ncHUvZHJtL21l
ZGlhdGVrL0tjb25maWciCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUgYi9k
cml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKaW5kZXggYzMzOGQwNC4uNDcyZWY1ZCAxMDA2NDQKLS0t
IGEvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmls
ZQpAQCAtNzMsNiArNzMsNyBAQCBvYmotJChDT05GSUdfRFJNX01TTSkgKz0gbXNtLwogb2JqLSQo
Q09ORklHX0RSTV9URUdSQSkgKz0gdGVncmEvCiBvYmotJChDT05GSUdfRFJNX1NUSSkgKz0gc3Rp
Lwogb2JqLSQoQ09ORklHX0RSTV9JTVgpICs9IGlteC8KK29iai0kKENPTkZJR19EUk1fTUVESUFU
RUspICs9IG1lZGlhdGVrLwogb2JqLXkJCQkrPSBpMmMvCiBvYmoteQkJCSs9IHBhbmVsLwogb2Jq
LXkJCQkrPSBicmlkZ2UvCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvS2Nv
bmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjMwZTUzNzEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dw
dS9kcm0vbWVkaWF0ZWsvS2NvbmZpZwpAQCAtMCwwICsxLDE0IEBACitjb25maWcgRFJNX01FRElB
VEVLCisJdHJpc3RhdGUgIkRSTSBTdXBwb3J0IGZvciBNZWRpYXRlayBTb0NzIgorCWRlcGVuZHMg
b24gRFJNCisJZGVwZW5kcyBvbiBBUkNIX01FRElBVEVLIHx8IChBUk0gJiYgQ09NUElMRV9URVNU
KQorCXNlbGVjdCBEUk1fR0VNX0NNQV9IRUxQRVIKKwlzZWxlY3QgRFJNX0tNU19IRUxQRVIKKwlz
ZWxlY3QgSU9NTVVfRE1BCisJc2VsZWN0IE1FTU9SWQorCXNlbGVjdCBNVEtfU01JCisJaGVscAor
CSAgQ2hvb3NlIHRoaXMgb3B0aW9uIGlmIHlvdSBoYXZlIGEgTWVkaWF0ZWsgU29Dcy4KKwkgIFRo
ZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgbWVkaWF0ZWstZHJtCisJICBUaGlzIGRyaXZlciBwcm92
aWRlcyBrZXJuZWwgbW9kZSBzZXR0aW5nIGFuZAorCSAgYnVmZmVyIG1hbmFnZW1lbnQgdG8gdXNl
cnNwYWNlLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL01ha2VmaWxlIGIv
ZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLmQ0YmRlN2MKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0v
bWVkaWF0ZWsvTWFrZWZpbGUKQEAgLTAsMCArMSwxMSBAQAorbWVkaWF0ZWstZHJtLXkgOj0gbXRr
X2Rpc3Bfb3ZsLm8gXAorCQkgIG10a19kaXNwX3JkbWEubyBcCisJCSAgbXRrX2RybV9jcnRjLm8g
XAorCQkgIG10a19kcm1fZGRwLm8gXAorCQkgIG10a19kcm1fZGRwX2NvbXAubyBcCisJCSAgbXRr
X2RybV9kcnYubyBcCisJCSAgbXRrX2RybV9mYi5vIFwKKwkJICBtdGtfZHJtX2dlbS5vIFwKKwkJ
ICBtdGtfZHJtX3BsYW5lLm8KKworb2JqLSQoQ09ORklHX0RSTV9NRURJQVRFSykgKz0gbWVkaWF0
ZWstZHJtLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZGlzcF9v
dmwuYyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZGlzcF9vdmwuYwpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjYyNjcxZgotLS0gL2Rldi9udWxsCisrKyBiL2Ry
aXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZGlzcF9vdmwuYwpAQCAtMCwwICsxLDMwMiBAQAor
LyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMuCisgKgorICogVGhpcyBwcm9n
cmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp
ZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxkcm0vZHJt
UC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBvbmVudC5o
PgorI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2lycS5o
PgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSAibXRrX2Ry
bV9jcnRjLmgiCisjaW5jbHVkZSAibXRrX2RybV9kZHBfY29tcC5oIgorCisjZGVmaW5lIERJU1Bf
UkVHX09WTF9JTlRFTgkJCTB4MDAwNAorI2RlZmluZSBPVkxfRk1FX0NQTF9JTlQJCQkJCUJJVCgx
KQorI2RlZmluZSBESVNQX1JFR19PVkxfSU5UU1RBCQkJMHgwMDA4CisjZGVmaW5lIERJU1BfUkVH
X09WTF9FTgkJCQkweDAwMGMKKyNkZWZpbmUgRElTUF9SRUdfT1ZMX1JTVAkJCTB4MDAxNAorI2Rl
ZmluZSBESVNQX1JFR19PVkxfUk9JX1NJWkUJCQkweDAwMjAKKyNkZWZpbmUgRElTUF9SRUdfT1ZM
X1JPSV9CR0NMUgkJCTB4MDAyOAorI2RlZmluZSBESVNQX1JFR19PVkxfU1JDX0NPTgkJCTB4MDAy
YworI2RlZmluZSBESVNQX1JFR19PVkxfQ09OKG4pCQkJKDB4MDAzMCArIDB4MjAgKiAobikpCisj
ZGVmaW5lIERJU1BfUkVHX09WTF9TUkNfU0laRShuKQkJKDB4MDAzOCArIDB4MjAgKiAobikpCisj
ZGVmaW5lIERJU1BfUkVHX09WTF9PRkZTRVQobikJCQkoMHgwMDNjICsgMHgyMCAqIChuKSkKKyNk
ZWZpbmUgRElTUF9SRUdfT1ZMX1BJVENIKG4pCQkJKDB4MDA0NCArIDB4MjAgKiAobikpCisjZGVm
aW5lIERJU1BfUkVHX09WTF9SRE1BX0NUUkwobikJCSgweDAwYzAgKyAweDIwICogKG4pKQorI2Rl
ZmluZSBESVNQX1JFR19PVkxfUkRNQV9HTUMobikJCSgweDAwYzggKyAweDIwICogKG4pKQorI2Rl
ZmluZSBESVNQX1JFR19PVkxfQUREUihuKQkJCSgweDBmNDAgKyAweDIwICogKG4pKQorCisjZGVm
aW5lCU9WTF9SRE1BX01FTV9HTUMJMHg0MDQwMjAyMAorCisjZGVmaW5lIE9WTF9DT05fQllURV9T
V0FQCUJJVCgyNCkKKyNkZWZpbmUgT1ZMX0NPTl9DTFJGTVRfUkdCNTY1CSgwIDw8IDEyKQorI2Rl
ZmluZSBPVkxfQ09OX0NMUkZNVF9SR0I4ODgJKDEgPDwgMTIpCisjZGVmaW5lIE9WTF9DT05fQ0xS
Rk1UX1JHQkE4ODg4CSgyIDw8IDEyKQorI2RlZmluZSBPVkxfQ09OX0NMUkZNVF9BUkdCODg4OAko
MyA8PCAxMikKKyNkZWZpbmUJT1ZMX0NPTl9BRU4JCUJJVCg4KQorI2RlZmluZQlPVkxfQ09OX0FM
UEhBCQkweGZmCisKKy8qKgorICogc3RydWN0IG10a19kaXNwX292bCAtIERJU1BfT1ZMIGRyaXZl
ciBzdHJ1Y3R1cmUKKyAqIEBkZHBfY29tcCAtIHN0cnVjdHVyZSBjb250YWluaW5nIHR5cGUgZW51
bSBhbmQgaGFyZHdhcmUgcmVzb3VyY2VzCisgKiBAY3J0YyAtIGFzc29jaWF0ZWQgY3J0YyB0byBy
ZXBvcnQgdmJsYW5rIGV2ZW50cyB0bworICovCitzdHJ1Y3QgbXRrX2Rpc3Bfb3ZsIHsKKwlzdHJ1
Y3QgbXRrX2RkcF9jb21wCQlkZHBfY29tcDsKKwlzdHJ1Y3QgZHJtX2NydGMJCQkqY3J0YzsKK307
CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBtdGtfZGlzcF9vdmxfaXJxX2hhbmRsZXIoaW50IGlycSwg
dm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBtdGtfZGlzcF9vdmwgKnByaXYgPSBkZXZfaWQ7CisJ
c3RydWN0IG10a19kZHBfY29tcCAqb3ZsID0gJnByaXYtPmRkcF9jb21wOworCisJLyogQ2xlYXIg
ZnJhbWUgY29tcGxldGlvbiBpbnRlcnJ1cHQgKi8KKwl3cml0ZWwoMHgwLCBvdmwtPnJlZ3MgKyBE
SVNQX1JFR19PVkxfSU5UU1RBKTsKKworCWlmICghcHJpdi0+Y3J0YykKKwkJcmV0dXJuIElSUV9O
T05FOworCisJbXRrX2NydGNfZGRwX2lycShwcml2LT5jcnRjLCBvdmwpOworCisJcmV0dXJuIElS
UV9IQU5ETEVEOworfQorCitzdGF0aWMgdm9pZCBtdGtfb3ZsX2VuYWJsZV92Ymxhbmsoc3RydWN0
IG10a19kZHBfY29tcCAqY29tcCwKKwkJCQkgIHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKKwlz
dHJ1Y3QgbXRrX2Rpc3Bfb3ZsICpwcml2ID0gY29udGFpbmVyX29mKGNvbXAsIHN0cnVjdCBtdGtf
ZGlzcF9vdmwsCisJCQkJCQkgZGRwX2NvbXApOworCisJcHJpdi0+Y3J0YyA9IGNydGM7CisJd3Jp
dGVsX3JlbGF4ZWQoT1ZMX0ZNRV9DUExfSU5ULCBjb21wLT5yZWdzICsgRElTUF9SRUdfT1ZMX0lO
VEVOKTsKK30KKworc3RhdGljIHZvaWQgbXRrX292bF9kaXNhYmxlX3ZibGFuayhzdHJ1Y3QgbXRr
X2RkcF9jb21wICpjb21wKQoreworCXN0cnVjdCBtdGtfZGlzcF9vdmwgKnByaXYgPSBjb250YWlu
ZXJfb2YoY29tcCwgc3RydWN0IG10a19kaXNwX292bCwKKwkJCQkJCSBkZHBfY29tcCk7CisKKwlw
cml2LT5jcnRjID0gTlVMTDsKKwl3cml0ZWxfcmVsYXhlZCgweDAsIGNvbXAtPnJlZ3MgKyBESVNQ
X1JFR19PVkxfSU5URU4pOworfQorCitzdGF0aWMgdm9pZCBtdGtfb3ZsX3N0YXJ0KHN0cnVjdCBt
dGtfZGRwX2NvbXAgKmNvbXApCit7CisJd3JpdGVsX3JlbGF4ZWQoMHgxLCBjb21wLT5yZWdzICsg
RElTUF9SRUdfT1ZMX0VOKTsKK30KKworc3RhdGljIHZvaWQgbXRrX292bF9zdG9wKHN0cnVjdCBt
dGtfZGRwX2NvbXAgKmNvbXApCit7CisJd3JpdGVsX3JlbGF4ZWQoMHgwLCBjb21wLT5yZWdzICsg
RElTUF9SRUdfT1ZMX0VOKTsKK30KKworc3RhdGljIHZvaWQgbXRrX292bF9jb25maWcoc3RydWN0
IG10a19kZHBfY29tcCAqY29tcCwgdW5zaWduZWQgaW50IHcsCisJCQkgICB1bnNpZ25lZCBpbnQg
aCwgdW5zaWduZWQgaW50IHZyZWZyZXNoKQoreworCWlmICh3ICE9IDAgJiYgaCAhPSAwKQorCQl3
cml0ZWxfcmVsYXhlZChoIDw8IDE2IHwgdywgY29tcC0+cmVncyArIERJU1BfUkVHX09WTF9ST0lf
U0laRSk7CisJd3JpdGVsX3JlbGF4ZWQoMHgwLCBjb21wLT5yZWdzICsgRElTUF9SRUdfT1ZMX1JP
SV9CR0NMUik7CisKKwl3cml0ZWwoMHgxLCBjb21wLT5yZWdzICsgRElTUF9SRUdfT1ZMX1JTVCk7
CisJd3JpdGVsKDB4MCwgY29tcC0+cmVncyArIERJU1BfUkVHX09WTF9SU1QpOworfQorCitzdGF0
aWMgdm9pZCBtdGtfb3ZsX2xheWVyX29uKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAsIHVuc2ln
bmVkIGludCBpZHgpCit7CisJdW5zaWduZWQgaW50IHJlZzsKKworCXdyaXRlbCgweDEsIGNvbXAt
PnJlZ3MgKyBESVNQX1JFR19PVkxfUkRNQV9DVFJMKGlkeCkpOworCXdyaXRlbChPVkxfUkRNQV9N
RU1fR01DLCBjb21wLT5yZWdzICsgRElTUF9SRUdfT1ZMX1JETUFfR01DKGlkeCkpOworCisJcmVn
ID0gcmVhZGwoY29tcC0+cmVncyArIERJU1BfUkVHX09WTF9TUkNfQ09OKTsKKwlyZWcgPSByZWcg
fCBCSVQoaWR4KTsKKwl3cml0ZWwocmVnLCBjb21wLT5yZWdzICsgRElTUF9SRUdfT1ZMX1NSQ19D
T04pOworfQorCitzdGF0aWMgdm9pZCBtdGtfb3ZsX2xheWVyX29mZihzdHJ1Y3QgbXRrX2RkcF9j
b21wICpjb21wLCB1bnNpZ25lZCBpbnQgaWR4KQoreworCXVuc2lnbmVkIGludCByZWc7CisKKwly
ZWcgPSByZWFkbChjb21wLT5yZWdzICsgRElTUF9SRUdfT1ZMX1NSQ19DT04pOworCXJlZyA9IHJl
ZyAmIH5CSVQoaWR4KTsKKwl3cml0ZWwocmVnLCBjb21wLT5yZWdzICsgRElTUF9SRUdfT1ZMX1NS
Q19DT04pOworCisJd3JpdGVsKDB4MCwgY29tcC0+cmVncyArIERJU1BfUkVHX09WTF9SRE1BX0NU
UkwoaWR4KSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgb3ZsX2ZtdF9jb252ZXJ0KHVuc2ln
bmVkIGludCBmbXQpCit7CisJc3dpdGNoIChmbXQpIHsKKwlkZWZhdWx0OgorCWNhc2UgRFJNX0ZP
Uk1BVF9SR0I1NjU6CisJCXJldHVybiBPVkxfQ09OX0NMUkZNVF9SR0I1NjU7CisJY2FzZSBEUk1f
Rk9STUFUX0JHUjU2NToKKwkJcmV0dXJuIE9WTF9DT05fQ0xSRk1UX1JHQjU2NSB8IE9WTF9DT05f
QllURV9TV0FQOworCWNhc2UgRFJNX0ZPUk1BVF9SR0I4ODg6CisJCXJldHVybiBPVkxfQ09OX0NM
UkZNVF9SR0I4ODg7CisJY2FzZSBEUk1fRk9STUFUX0JHUjg4ODoKKwkJcmV0dXJuIE9WTF9DT05f
Q0xSRk1UX1JHQjg4OCB8IE9WTF9DT05fQllURV9TV0FQOworCWNhc2UgRFJNX0ZPUk1BVF9SR0JY
ODg4ODoKKwljYXNlIERSTV9GT1JNQVRfUkdCQTg4ODg6CisJCXJldHVybiBPVkxfQ09OX0NMUkZN
VF9BUkdCODg4ODsKKwljYXNlIERSTV9GT1JNQVRfQkdSWDg4ODg6CisJY2FzZSBEUk1fRk9STUFU
X0JHUkE4ODg4OgorCQlyZXR1cm4gT1ZMX0NPTl9DTFJGTVRfQVJHQjg4ODggfCBPVkxfQ09OX0JZ
VEVfU1dBUDsKKwljYXNlIERSTV9GT1JNQVRfWFJHQjg4ODg6CisJY2FzZSBEUk1fRk9STUFUX0FS
R0I4ODg4OgorCQlyZXR1cm4gT1ZMX0NPTl9DTFJGTVRfUkdCQTg4ODg7CisJY2FzZSBEUk1fRk9S
TUFUX1hCR1I4ODg4OgorCWNhc2UgRFJNX0ZPUk1BVF9BQkdSODg4ODoKKwkJcmV0dXJuIE9WTF9D
T05fQ0xSRk1UX1JHQkE4ODg4IHwgT1ZMX0NPTl9CWVRFX1NXQVA7CisJfQorfQorCitzdGF0aWMg
dm9pZCBtdGtfb3ZsX2xheWVyX2NvbmZpZyhzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wLCB1bnNp
Z25lZCBpbnQgaWR4LAorCQkJCSBzdHJ1Y3QgbXRrX3BsYW5lX3N0YXRlICpzdGF0ZSkKK3sKKwlz
dHJ1Y3QgbXRrX3BsYW5lX3BlbmRpbmdfc3RhdGUgKnBlbmRpbmcgPSAmc3RhdGUtPnBlbmRpbmc7
CisJdW5zaWduZWQgaW50IGFkZHIgPSBwZW5kaW5nLT5hZGRyOworCXVuc2lnbmVkIGludCBwaXRj
aCA9IHBlbmRpbmctPnBpdGNoICYgMHhmZmZmOworCXVuc2lnbmVkIGludCBmbXQgPSBwZW5kaW5n
LT5mb3JtYXQ7CisJdW5zaWduZWQgaW50IG9mZnNldCA9IChwZW5kaW5nLT55IDw8IDE2KSB8IHBl
bmRpbmctPng7CisJdW5zaWduZWQgaW50IHNyY19zaXplID0gKHBlbmRpbmctPmhlaWdodCA8PCAx
NikgfCBwZW5kaW5nLT53aWR0aDsKKwl1bnNpZ25lZCBpbnQgY29uOworCisJaWYgKCFwZW5kaW5n
LT5lbmFibGUpCisJCW10a19vdmxfbGF5ZXJfb2ZmKGNvbXAsIGlkeCk7CisKKwljb24gPSBvdmxf
Zm10X2NvbnZlcnQoZm10KTsKKwlpZiAoaWR4ICE9IDApCisJCWNvbiB8PSBPVkxfQ09OX0FFTiB8
IE9WTF9DT05fQUxQSEE7CisKKwl3cml0ZWxfcmVsYXhlZChjb24sIGNvbXAtPnJlZ3MgKyBESVNQ
X1JFR19PVkxfQ09OKGlkeCkpOworCXdyaXRlbF9yZWxheGVkKHBpdGNoLCBjb21wLT5yZWdzICsg
RElTUF9SRUdfT1ZMX1BJVENIKGlkeCkpOworCXdyaXRlbF9yZWxheGVkKHNyY19zaXplLCBjb21w
LT5yZWdzICsgRElTUF9SRUdfT1ZMX1NSQ19TSVpFKGlkeCkpOworCXdyaXRlbF9yZWxheGVkKG9m
ZnNldCwgY29tcC0+cmVncyArIERJU1BfUkVHX09WTF9PRkZTRVQoaWR4KSk7CisJd3JpdGVsX3Jl
bGF4ZWQoYWRkciwgY29tcC0+cmVncyArIERJU1BfUkVHX09WTF9BRERSKGlkeCkpOworCisJaWYg
KHBlbmRpbmctPmVuYWJsZSkKKwkJbXRrX292bF9sYXllcl9vbihjb21wLCBpZHgpOworfQorCitz
dGF0aWMgY29uc3Qgc3RydWN0IG10a19kZHBfY29tcF9mdW5jcyBtdGtfZGlzcF9vdmxfZnVuY3Mg
PSB7CisJLmNvbmZpZyA9IG10a19vdmxfY29uZmlnLAorCS5zdGFydCA9IG10a19vdmxfc3RhcnQs
CisJLnN0b3AgPSBtdGtfb3ZsX3N0b3AsCisJLmVuYWJsZV92YmxhbmsgPSBtdGtfb3ZsX2VuYWJs
ZV92YmxhbmssCisJLmRpc2FibGVfdmJsYW5rID0gbXRrX292bF9kaXNhYmxlX3ZibGFuaywKKwku
bGF5ZXJfb24gPSBtdGtfb3ZsX2xheWVyX29uLAorCS5sYXllcl9vZmYgPSBtdGtfb3ZsX2xheWVy
X29mZiwKKwkubGF5ZXJfY29uZmlnID0gbXRrX292bF9sYXllcl9jb25maWcsCit9OworCitzdGF0
aWMgaW50IG10a19kaXNwX292bF9iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmlj
ZSAqbWFzdGVyLAorCQkJICAgICB2b2lkICpkYXRhKQoreworCXN0cnVjdCBtdGtfZGlzcF9vdmwg
KnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtX2Rl
diA9IGRhdGE7CisJaW50IHJldDsKKworCXJldCA9IG10a19kZHBfY29tcF9yZWdpc3Rlcihkcm1f
ZGV2LCAmcHJpdi0+ZGRwX2NvbXApOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAi
RmFpbGVkIHRvIHJlZ2lzdGVyIGNvbXBvbmVudCAlczogJWRcbiIsCisJCQlkZXYtPm9mX25vZGUt
PmZ1bGxfbmFtZSwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwor
c3RhdGljIHZvaWQgbXRrX2Rpc3Bfb3ZsX3VuYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVj
dCBkZXZpY2UgKm1hc3RlciwKKwkJCQl2b2lkICpkYXRhKQoreworCXN0cnVjdCBtdGtfZGlzcF9v
dmwgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJt
X2RldiA9IGRhdGE7CisKKwltdGtfZGRwX2NvbXBfdW5yZWdpc3Rlcihkcm1fZGV2LCAmcHJpdi0+
ZGRwX2NvbXApOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbXBvbmVudF9vcHMgbXRrX2Rp
c3Bfb3ZsX2NvbXBvbmVudF9vcHMgPSB7CisJLmJpbmQJPSBtdGtfZGlzcF9vdmxfYmluZCwKKwku
dW5iaW5kID0gbXRrX2Rpc3Bfb3ZsX3VuYmluZCwKK307CisKK3N0YXRpYyBpbnQgbXRrX2Rpc3Bf
b3ZsX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRldmlj
ZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgbXRrX2Rpc3Bfb3ZsICpwcml2OworCWludCBj
b21wX2lkOworCWludCBpcnE7CisJaW50IHJldDsKKworCXByaXYgPSBkZXZtX2t6YWxsb2MoZGV2
LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXByaXYpCisJCXJldHVybiAtRU5P
TUVNOworCisJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAoaXJxIDwgMCkK
KwkJcmV0dXJuIGlycTsKKworCXJldCA9IGRldm1fcmVxdWVzdF9pcnEoZGV2LCBpcnEsIG10a19k
aXNwX292bF9pcnFfaGFuZGxlciwKKwkJCSAgICAgICBJUlFGX1RSSUdHRVJfTk9ORSwgZGV2X25h
bWUoZGV2KSwgcHJpdik7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQg
dG8gcmVxdWVzdCBpcnEgJWQ6ICVkXG4iLCBpcnEsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQor
CisJY29tcF9pZCA9IG10a19kZHBfY29tcF9nZXRfaWQoZGV2LT5vZl9ub2RlLCBNVEtfRElTUF9P
VkwpOworCWlmIChjb21wX2lkIDwgMCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBpZGVu
dGlmeSBieSBhbGlhczogJWRcbiIsIGNvbXBfaWQpOworCQlyZXR1cm4gY29tcF9pZDsKKwl9CisK
KwlyZXQgPSBtdGtfZGRwX2NvbXBfaW5pdChkZXYsIGRldi0+b2Zfbm9kZSwgJnByaXYtPmRkcF9j
b21wLCBjb21wX2lkLAorCQkJCSZtdGtfZGlzcF9vdmxfZnVuY3MpOworCWlmIChyZXQpIHsKKwkJ
ZGV2X2VycihkZXYsICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBjb21wb25lbnQ6ICVkXG4iLCByZXQp
OworCQlyZXR1cm4gcmV0OworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHByaXYp
OworCisJcmV0ID0gY29tcG9uZW50X2FkZChkZXYsICZtdGtfZGlzcF9vdmxfY29tcG9uZW50X29w
cyk7CisJaWYgKHJldCkKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gYWRkIGNvbXBvbmVudDog
JWRcbiIsIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG10a19kaXNwX292
bF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwljb21wb25lbnRfZGVs
KCZwZGV2LT5kZXYsICZtdGtfZGlzcF9vdmxfY29tcG9uZW50X29wcyk7CisKKwlyZXR1cm4gMDsK
K30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbXRrX2Rpc3Bfb3ZsX2RyaXZl
cl9kdF9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ4MTczLWRpc3At
b3ZsIiwgfSwKKwl7fSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBtdGtfZGlzcF9vdmxf
ZHJpdmVyX2R0X21hdGNoKTsKKworc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdGtfZGlzcF9vdmxf
ZHJpdmVyID0geworCS5wcm9iZQkJPSBtdGtfZGlzcF9vdmxfcHJvYmUsCisJLnJlbW92ZQkJPSBt
dGtfZGlzcF9vdmxfcmVtb3ZlLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJtZWRpYXRlay1k
aXNwLW92bCIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBt
dGtfZGlzcF9vdmxfZHJpdmVyX2R0X21hdGNoLAorCX0sCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVy
cy9ncHUvZHJtL21lZGlhdGVrL210a19kaXNwX3JkbWEuYyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRp
YXRlay9tdGtfZGlzcF9yZG1hLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
NWZiODBjYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtf
ZGlzcF9yZG1hLmMKQEAgLTAsMCArMSwyNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUg
TWVkaWFUZWsgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFt
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqLworCisjaW5jbHVkZSA8ZHJtL2RybVAuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsu
aD4KKyNpbmNsdWRlIDxsaW51eC9jb21wb25lbnQuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9kZXZp
Y2UuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9y
bV9kZXZpY2UuaD4KKworI2luY2x1ZGUgIm10a19kcm1fY3J0Yy5oIgorI2luY2x1ZGUgIm10a19k
cm1fZGRwX2NvbXAuaCIKKworI2RlZmluZSBESVNQX1JFR19SRE1BX0lOVF9FTkFCTEUJCTB4MDAw
MAorI2RlZmluZSBESVNQX1JFR19SRE1BX0lOVF9TVEFUVVMJCTB4MDAwNAorI2RlZmluZSBSRE1B
X1RBUkdFVF9MSU5FX0lOVAkJCQlCSVQoNSkKKyNkZWZpbmUgUkRNQV9GSUZPX1VOREVSRkxPV19J
TlQJCQkJQklUKDQpCisjZGVmaW5lIFJETUFfRU9GX0FCTk9STUFMX0lOVAkJCQlCSVQoMykKKyNk
ZWZpbmUgUkRNQV9GUkFNRV9FTkRfSU5UCQkJCUJJVCgyKQorI2RlZmluZSBSRE1BX0ZSQU1FX1NU
QVJUX0lOVAkJCQlCSVQoMSkKKyNkZWZpbmUgUkRNQV9SRUdfVVBEQVRFX0lOVAkJCQlCSVQoMCkK
KyNkZWZpbmUgRElTUF9SRUdfUkRNQV9HTE9CQUxfQ09OCQkweDAwMTAKKyNkZWZpbmUgUkRNQV9F
TkdJTkVfRU4JCQkJCUJJVCgwKQorI2RlZmluZSBESVNQX1JFR19SRE1BX1NJWkVfQ09OXzAJCTB4
MDAxNAorI2RlZmluZSBESVNQX1JFR19SRE1BX1NJWkVfQ09OXzEJCTB4MDAxOAorI2RlZmluZSBE
SVNQX1JFR19SRE1BX1RBUkdFVF9MSU5FCQkweDAwMWMKKyNkZWZpbmUgRElTUF9SRUdfUkRNQV9G
SUZPX0NPTgkJCTB4MDA0MAorI2RlZmluZSBSRE1BX0ZJRk9fVU5ERVJGTE9XX0VOCQkJCUJJVCgz
MSkKKyNkZWZpbmUgUkRNQV9GSUZPX1BTRVVET19TSVpFKGJ5dGVzKQkJCSgoKGJ5dGVzKSAvIDE2
KSA8PCAxNikKKyNkZWZpbmUgUkRNQV9PVVRQVVRfVkFMSURfRklGT19USFJFU0hPTEQoYnl0ZXMp
CQkoKGJ5dGVzKSAvIDE2KQorCisvKioKKyAqIHN0cnVjdCBtdGtfZGlzcF9yZG1hIC0gRElTUF9S
RE1BIGRyaXZlciBzdHJ1Y3R1cmUKKyAqIEBkZHBfY29tcCAtIHN0cnVjdHVyZSBjb250YWluaW5n
IHR5cGUgZW51bSBhbmQgaGFyZHdhcmUgcmVzb3VyY2VzCisgKiBAY3J0YyAtIGFzc29jaWF0ZWQg
Y3J0YyB0byByZXBvcnQgaXJxIGV2ZW50cyB0bworICovCitzdHJ1Y3QgbXRrX2Rpc3BfcmRtYSB7
CisJc3RydWN0IG10a19kZHBfY29tcAkJZGRwX2NvbXA7CisJc3RydWN0IGRybV9jcnRjCQkJKmNy
dGM7Cit9OworCitzdGF0aWMgaXJxcmV0dXJuX3QgbXRrX2Rpc3BfcmRtYV9pcnFfaGFuZGxlcihp
bnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IG10a19kaXNwX3JkbWEgKnByaXYgPSBk
ZXZfaWQ7CisJc3RydWN0IG10a19kZHBfY29tcCAqcmRtYSA9ICZwcml2LT5kZHBfY29tcDsKKwor
CS8qIENsZWFyIGZyYW1lIGNvbXBsZXRpb24gaW50ZXJydXB0ICovCisJd3JpdGVsKDB4MCwgcmRt
YS0+cmVncyArIERJU1BfUkVHX1JETUFfSU5UX1NUQVRVUyk7CisKKwlpZiAoIXByaXYtPmNydGMp
CisJCXJldHVybiBJUlFfTk9ORTsKKworCW10a19jcnRjX2RkcF9pcnEocHJpdi0+Y3J0YywgcmRt
YSk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyB2b2lkIHJkbWFfdXBkYXRl
X2JpdHMoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCwgdW5zaWduZWQgaW50IHJlZywKKwkJCSAg
ICAgdW5zaWduZWQgaW50IG1hc2ssIHVuc2lnbmVkIGludCB2YWwpCit7CisJdW5zaWduZWQgaW50
IHRtcCA9IHJlYWRsKGNvbXAtPnJlZ3MgKyByZWcpOworCisJdG1wID0gKHRtcCAmIH5tYXNrKSB8
ICh2YWwgJiBtYXNrKTsKKwl3cml0ZWwodG1wLCBjb21wLT5yZWdzICsgcmVnKTsKK30KKworc3Rh
dGljIHZvaWQgbXRrX3JkbWFfZW5hYmxlX3ZibGFuayhzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21w
LAorCQkJCSAgIHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKKwlzdHJ1Y3QgbXRrX2Rpc3BfcmRt
YSAqcHJpdiA9IGNvbnRhaW5lcl9vZihjb21wLCBzdHJ1Y3QgbXRrX2Rpc3BfcmRtYSwKKwkJCQkJ
CSAgZGRwX2NvbXApOworCisJcHJpdi0+Y3J0YyA9IGNydGM7CisJcmRtYV91cGRhdGVfYml0cyhj
b21wLCBESVNQX1JFR19SRE1BX0lOVF9FTkFCTEUsIFJETUFfRlJBTUVfRU5EX0lOVCwKKwkJCSBS
RE1BX0ZSQU1FX0VORF9JTlQpOworfQorCitzdGF0aWMgdm9pZCBtdGtfcmRtYV9kaXNhYmxlX3Zi
bGFuayhzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKQoreworCXN0cnVjdCBtdGtfZGlzcF9yZG1h
ICpwcml2ID0gY29udGFpbmVyX29mKGNvbXAsIHN0cnVjdCBtdGtfZGlzcF9yZG1hLAorCQkJCQkJ
ICBkZHBfY29tcCk7CisKKwlwcml2LT5jcnRjID0gTlVMTDsKKwlyZG1hX3VwZGF0ZV9iaXRzKGNv
bXAsIERJU1BfUkVHX1JETUFfSU5UX0VOQUJMRSwgUkRNQV9GUkFNRV9FTkRfSU5ULCAwKTsKK30K
Kworc3RhdGljIHZvaWQgbXRrX3JkbWFfc3RhcnQoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCkK
K3sKKwlyZG1hX3VwZGF0ZV9iaXRzKGNvbXAsIERJU1BfUkVHX1JETUFfR0xPQkFMX0NPTiwgUkRN
QV9FTkdJTkVfRU4sCisJCQkgUkRNQV9FTkdJTkVfRU4pOworfQorCitzdGF0aWMgdm9pZCBtdGtf
cmRtYV9zdG9wKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXApCit7CisJcmRtYV91cGRhdGVfYml0
cyhjb21wLCBESVNQX1JFR19SRE1BX0dMT0JBTF9DT04sIFJETUFfRU5HSU5FX0VOLCAwKTsKK30K
Kworc3RhdGljIHZvaWQgbXRrX3JkbWFfY29uZmlnKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAs
IHVuc2lnbmVkIGludCB3aWR0aCwKKwkJCSAgICB1bnNpZ25lZCBpbnQgaGVpZ2h0LCB1bnNpZ25l
ZCBpbnQgdnJlZnJlc2gpCit7CisJdW5zaWduZWQgaW50IHRocmVzaG9sZDsKKwl1bnNpZ25lZCBp
bnQgcmVnOworCisJcmRtYV91cGRhdGVfYml0cyhjb21wLCBESVNQX1JFR19SRE1BX1NJWkVfQ09O
XzAsIDB4ZmZmLCB3aWR0aCk7CisJcmRtYV91cGRhdGVfYml0cyhjb21wLCBESVNQX1JFR19SRE1B
X1NJWkVfQ09OXzEsIDB4ZmZmZmYsIGhlaWdodCk7CisKKwkvKgorCSAqIEVuYWJsZSBGSUZPIHVu
ZGVyZmxvdyBzaW5jZSBEU0kgYW5kIERQSSBjYW4ndCBiZSBibG9ja2VkLgorCSAqIEtlZXAgdGhl
IEZJRk8gcHNldWRvIHNpemUgcmVzZXQgZGVmYXVsdCBvZiA4IEtpQi4gU2V0IHRoZQorCSAqIG91
dHB1dCB0aHJlc2hvbGQgdG8gNiBtaWNyb3NlY29uZHMgd2l0aCA3LzYgb3ZlcmhlYWQgdG8KKwkg
KiBhY2NvdW50IGZvciBibGFua2luZywgYW5kIHdpdGggYSBwaXhlbCBkZXB0aCBvZiA0IGJ5dGVz
OgorCSAqLworCXRocmVzaG9sZCA9IHdpZHRoICogaGVpZ2h0ICogdnJlZnJlc2ggKiA0ICogNyAv
IDEwMDAwMDA7CisJcmVnID0gUkRNQV9GSUZPX1VOREVSRkxPV19FTiB8CisJICAgICAgUkRNQV9G
SUZPX1BTRVVET19TSVpFKFNaXzhLKSB8CisJICAgICAgUkRNQV9PVVRQVVRfVkFMSURfRklGT19U
SFJFU0hPTEQodGhyZXNob2xkKTsKKwl3cml0ZWwocmVnLCBjb21wLT5yZWdzICsgRElTUF9SRUdf
UkRNQV9GSUZPX0NPTik7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRrX2RkcF9jb21wX2Z1
bmNzIG10a19kaXNwX3JkbWFfZnVuY3MgPSB7CisJLmNvbmZpZyA9IG10a19yZG1hX2NvbmZpZywK
Kwkuc3RhcnQgPSBtdGtfcmRtYV9zdGFydCwKKwkuc3RvcCA9IG10a19yZG1hX3N0b3AsCisJLmVu
YWJsZV92YmxhbmsgPSBtdGtfcmRtYV9lbmFibGVfdmJsYW5rLAorCS5kaXNhYmxlX3ZibGFuayA9
IG10a19yZG1hX2Rpc2FibGVfdmJsYW5rLAorfTsKKworc3RhdGljIGludCBtdGtfZGlzcF9yZG1h
X2JpbmQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsCisJCQkgICAg
ICB2b2lkICpkYXRhKQoreworCXN0cnVjdCBtdGtfZGlzcF9yZG1hICpwcml2ID0gZGV2X2dldF9k
cnZkYXRhKGRldik7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybV9kZXYgPSBkYXRhOworCWludCBy
ZXQ7CisKKwlyZXQgPSBtdGtfZGRwX2NvbXBfcmVnaXN0ZXIoZHJtX2RldiwgJnByaXYtPmRkcF9j
b21wKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byByZWdpc3Rl
ciBjb21wb25lbnQgJXM6ICVkXG4iLAorCQkJZGV2LT5vZl9ub2RlLT5mdWxsX25hbWUsIHJldCk7
CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7CisKK30KKworc3RhdGljIHZvaWQgbXRr
X2Rpc3BfcmRtYV91bmJpbmQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0
ZXIsCisJCQkJIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IG10a19kaXNwX3JkbWEgKnByaXYgPSBk
ZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtX2RldiA9IGRhdGE7
CisKKwltdGtfZGRwX2NvbXBfdW5yZWdpc3Rlcihkcm1fZGV2LCAmcHJpdi0+ZGRwX2NvbXApOwor
fQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbXBvbmVudF9vcHMgbXRrX2Rpc3BfcmRtYV9jb21w
b25lbnRfb3BzID0geworCS5iaW5kCT0gbXRrX2Rpc3BfcmRtYV9iaW5kLAorCS51bmJpbmQgPSBt
dGtfZGlzcF9yZG1hX3VuYmluZCwKK307CisKK3N0YXRpYyBpbnQgbXRrX2Rpc3BfcmRtYV9wcm9i
ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9
ICZwZGV2LT5kZXY7CisJc3RydWN0IG10a19kaXNwX3JkbWEgKnByaXY7CisJaW50IGNvbXBfaWQ7
CisJaW50IGlycTsKKwlpbnQgcmV0OworCisJcHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVv
ZigqcHJpdiksIEdGUF9LRVJORUwpOworCWlmICghcHJpdikKKwkJcmV0dXJuIC1FTk9NRU07CisK
KwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlmIChpcnEgPCAwKQorCQlyZXR1
cm4gaXJxOworCisJY29tcF9pZCA9IG10a19kZHBfY29tcF9nZXRfaWQoZGV2LT5vZl9ub2RlLCBN
VEtfRElTUF9SRE1BKTsKKwlpZiAoY29tcF9pZCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJGYWls
ZWQgdG8gaWRlbnRpZnkgYnkgYWxpYXM6ICVkXG4iLCBjb21wX2lkKTsKKwkJcmV0dXJuIGNvbXBf
aWQ7CisJfQorCisJcmV0ID0gbXRrX2RkcF9jb21wX2luaXQoZGV2LCBkZXYtPm9mX25vZGUsICZw
cml2LT5kZHBfY29tcCwgY29tcF9pZCwKKwkJCQkmbXRrX2Rpc3BfcmRtYV9mdW5jcyk7CisJaWYg
KHJldCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBpbml0aWFsaXplIGNvbXBvbmVudDog
JWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogRGlzYWJsZSBhbmQgY2xlYXIg
cGVuZGluZyBpbnRlcnJ1cHRzICovCisJd3JpdGVsKDB4MCwgcHJpdi0+ZGRwX2NvbXAucmVncyAr
IERJU1BfUkVHX1JETUFfSU5UX0VOQUJMRSk7CisJd3JpdGVsKDB4MCwgcHJpdi0+ZGRwX2NvbXAu
cmVncyArIERJU1BfUkVHX1JETUFfSU5UX1NUQVRVUyk7CisKKwlyZXQgPSBkZXZtX3JlcXVlc3Rf
aXJxKGRldiwgaXJxLCBtdGtfZGlzcF9yZG1hX2lycV9oYW5kbGVyLAorCQkJICAgICAgIElSUUZf
VFJJR0dFUl9OT05FLCBkZXZfbmFtZShkZXYpLCBwcml2KTsKKwlpZiAocmV0IDwgMCkgeworCQlk
ZXZfZXJyKGRldiwgIkZhaWxlZCB0byByZXF1ZXN0IGlycSAlZDogJWRcbiIsIGlycSwgcmV0KTsK
KwkJcmV0dXJuIHJldDsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBwcml2KTsK
KworCXJldCA9IGNvbXBvbmVudF9hZGQoZGV2LCAmbXRrX2Rpc3BfcmRtYV9jb21wb25lbnRfb3Bz
KTsKKwlpZiAocmV0KQorCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBhZGQgY29tcG9uZW50OiAl
ZFxuIiwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2Rpc3BfcmRt
YV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwljb21wb25lbnRfZGVs
KCZwZGV2LT5kZXYsICZtdGtfZGlzcF9yZG1hX2NvbXBvbmVudF9vcHMpOworCisJcmV0dXJuIDA7
Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG10a19kaXNwX3JkbWFfZHJp
dmVyX2R0X21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtZGlz
cC1yZG1hIiwgfSwKKwl7fSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBtdGtfZGlzcF9y
ZG1hX2RyaXZlcl9kdF9tYXRjaCk7CisKK3N0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXRrX2Rpc3Bf
cmRtYV9kcml2ZXIgPSB7CisJLnByb2JlCQk9IG10a19kaXNwX3JkbWFfcHJvYmUsCisJLnJlbW92
ZQkJPSBtdGtfZGlzcF9yZG1hX3JlbW92ZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAibWVk
aWF0ZWstZGlzcC1yZG1hIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJCS5vZl9tYXRjaF90
YWJsZSA9IG10a19kaXNwX3JkbWFfZHJpdmVyX2R0X21hdGNoLAorCX0sCit9OwpkaWZmIC0tZ2l0
IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fY3J0Yy5jIGIvZHJpdmVycy9ncHUv
ZHJtL21lZGlhdGVrL210a19kcm1fY3J0Yy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmY4Y2I2YzYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0
ZWsvbXRrX2RybV9jcnRjLmMKQEAgLTAsMCArMSw1ODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMp
IDIwMTUgTWVkaWFUZWsgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICog
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBw
cm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8YXNtL2JhcnJpZXIuaD4KKyNpbmNsdWRlIDxk
cm0vZHJtUC5oPgorI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5oPgorI2luY2x1ZGUg
PGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX3BsYW5lX2hlbHBlci5o
PgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4K
KyNpbmNsdWRlIDxzb2MvbWVkaWF0ZWsvc21pLmg+CisKKyNpbmNsdWRlICJtdGtfZHJtX2Rydi5o
IgorI2luY2x1ZGUgIm10a19kcm1fY3J0Yy5oIgorI2luY2x1ZGUgIm10a19kcm1fZGRwLmgiCisj
aW5jbHVkZSAibXRrX2RybV9kZHBfY29tcC5oIgorI2luY2x1ZGUgIm10a19kcm1fZ2VtLmgiCisj
aW5jbHVkZSAibXRrX2RybV9wbGFuZS5oIgorCisvKioKKyAqIHN0cnVjdCBtdGtfZHJtX2NydGMg
LSBNZWRpYVRlayBzcGVjaWZpYyBjcnRjIHN0cnVjdHVyZS4KKyAqIEBiYXNlOiBjcnRjIG9iamVj
dC4KKyAqIEBlbmFibGVkOiByZWNvcmRzIHdoZXRoZXIgY3J0Y19lbmFibGUgc3VjY2VlZGVkCisg
KiBAcGxhbmVzOiBhcnJheSBvZiA0IG10a19kcm1fcGxhbmUgc3RydWN0dXJlcywgb25lIGZvciBl
YWNoIG92ZXJsYXkgcGxhbmUKKyAqIEBwZW5kaW5nX3BsYW5lczogd2hldGhlciBhbnkgcGxhbmUg
aGFzIHBlbmRpbmcgY2hhbmdlcyB0byBiZSBhcHBsaWVkCisgKiBAY29uZmlnX3JlZ3M6IG1lbW9y
eSBtYXBwZWQgbW1zeXMgY29uZmlndXJhdGlvbiByZWdpc3RlciBzcGFjZQorICogQG11dGV4OiBo
YW5kbGUgdG8gb25lIG9mIHRoZSB0ZW4gZGlzcF9tdXRleCBzdHJlYW1zCisgKiBAZGRwX2NvbXBf
bnI6IG51bWJlciBvZiBjb21wb25lbnRzIGluIGRkcF9jb21wCisgKiBAZGRwX2NvbXA6IGFycmF5
IG9mIHBvaW50ZXJzIHRoZSBtdGtfZGRwX2NvbXAgc3RydWN0dXJlcyB1c2VkIGJ5IHRoaXMgY3J0
YworICovCitzdHJ1Y3QgbXRrX2RybV9jcnRjIHsKKwlzdHJ1Y3QgZHJtX2NydGMJCQliYXNlOwor
CWJvb2wJCQkJZW5hYmxlZDsKKworCWJvb2wJCQkJcGVuZGluZ19uZWVkc192Ymxhbms7CisJc3Ry
dWN0IGRybV9wZW5kaW5nX3ZibGFua19ldmVudAkqZXZlbnQ7CisKKwlzdHJ1Y3QgbXRrX2RybV9w
bGFuZQkJcGxhbmVzW09WTF9MQVlFUl9OUl07CisJYm9vbAkJCQlwZW5kaW5nX3BsYW5lczsKKwor
CXZvaWQgX19pb21lbQkJCSpjb25maWdfcmVnczsKKwlzdHJ1Y3QgbXRrX2Rpc3BfbXV0ZXgJCSpt
dXRleDsKKwl1bnNpZ25lZCBpbnQJCQlkZHBfY29tcF9ucjsKKwlzdHJ1Y3QgbXRrX2RkcF9jb21w
CQkqKmRkcF9jb21wOworfTsKKworc3RydWN0IG10a19jcnRjX3N0YXRlIHsKKwlzdHJ1Y3QgZHJt
X2NydGNfc3RhdGUJCWJhc2U7CisKKwlib29sCQkJCXBlbmRpbmdfY29uZmlnOworCXVuc2lnbmVk
IGludAkJCXBlbmRpbmdfd2lkdGg7CisJdW5zaWduZWQgaW50CQkJcGVuZGluZ19oZWlnaHQ7CisJ
dW5zaWduZWQgaW50CQkJcGVuZGluZ192cmVmcmVzaDsKK307CisKK3N0YXRpYyBpbmxpbmUgc3Ry
dWN0IG10a19kcm1fY3J0YyAqdG9fbXRrX2NydGMoc3RydWN0IGRybV9jcnRjICpjKQoreworCXJl
dHVybiBjb250YWluZXJfb2YoYywgc3RydWN0IG10a19kcm1fY3J0YywgYmFzZSk7Cit9CisKK3N0
YXRpYyBpbmxpbmUgc3RydWN0IG10a19jcnRjX3N0YXRlICp0b19tdGtfY3J0Y19zdGF0ZShzdHJ1
Y3QgZHJtX2NydGNfc3RhdGUgKnMpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihzLCBzdHJ1Y3Qg
bXRrX2NydGNfc3RhdGUsIGJhc2UpOworfQorCitzdGF0aWMgdm9pZCBtdGtfZHJtX2NydGNfZmlu
aXNoX3BhZ2VfZmxpcChzdHJ1Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0YykKK3sKKwlzdHJ1Y3Qg
ZHJtX2NydGMgKmNydGMgPSAmbXRrX2NydGMtPmJhc2U7CisJdW5zaWduZWQgbG9uZyBmbGFnczsK
KworCXNwaW5fbG9ja19pcnFzYXZlKCZjcnRjLT5kZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsKKwlk
cm1fc2VuZF92YmxhbmtfZXZlbnQoY3J0Yy0+ZGV2LCBtdGtfY3J0Yy0+ZXZlbnQtPnBpcGUsIG10
a19jcnRjLT5ldmVudCk7CisJZHJtX2NydGNfdmJsYW5rX3B1dChjcnRjKTsKKwltdGtfY3J0Yy0+
ZXZlbnQgPSBOVUxMOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNydGMtPmRldi0+ZXZlbnRf
bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBtdGtfZHJtX2ZpbmlzaF9wYWdlX2ZsaXAo
c3RydWN0IG10a19kcm1fY3J0YyAqbXRrX2NydGMpCit7CisJZHJtX2NydGNfaGFuZGxlX3ZibGFu
aygmbXRrX2NydGMtPmJhc2UpOworCWlmIChtdGtfY3J0Yy0+cGVuZGluZ19uZWVkc192Ymxhbmsp
IHsKKwkJbXRrX2RybV9jcnRjX2ZpbmlzaF9wYWdlX2ZsaXAobXRrX2NydGMpOworCQltdGtfY3J0
Yy0+cGVuZGluZ19uZWVkc192YmxhbmsgPSBmYWxzZTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIG10
a19kcm1fY3J0Y19kZXN0cm95KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKKwlzdHJ1Y3QgbXRr
X2RybV9jcnRjICptdGtfY3J0YyA9IHRvX210a19jcnRjKGNydGMpOworCWludCBpOworCisJZm9y
IChpID0gMDsgaSA8IG10a19jcnRjLT5kZHBfY29tcF9ucjsgaSsrKQorCQljbGtfdW5wcmVwYXJl
KG10a19jcnRjLT5kZHBfY29tcFtpXS0+Y2xrKTsKKworCW10a19kaXNwX211dGV4X3B1dChtdGtf
Y3J0Yy0+bXV0ZXgpOworCisJZHJtX2NydGNfY2xlYW51cChjcnRjKTsKK30KKworc3RhdGljIHZv
aWQgbXRrX2RybV9jcnRjX3Jlc2V0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKKwlzdHJ1Y3Qg
bXRrX2NydGNfc3RhdGUgKnN0YXRlOworCisJaWYgKGNydGMtPnN0YXRlKSB7CisJCWlmIChjcnRj
LT5zdGF0ZS0+bW9kZV9ibG9iKQorCQkJZHJtX3Byb3BlcnR5X3VucmVmZXJlbmNlX2Jsb2IoY3J0
Yy0+c3RhdGUtPm1vZGVfYmxvYik7CisKKwkJc3RhdGUgPSB0b19tdGtfY3J0Y19zdGF0ZShjcnRj
LT5zdGF0ZSk7CisJCW1lbXNldChzdGF0ZSwgMCwgc2l6ZW9mKCpzdGF0ZSkpOworCX0gZWxzZSB7
CisJCXN0YXRlID0ga3phbGxvYyhzaXplb2YoKnN0YXRlKSwgR0ZQX0tFUk5FTCk7CisJCWlmICgh
c3RhdGUpCisJCQlyZXR1cm47CisJCWNydGMtPnN0YXRlID0gJnN0YXRlLT5iYXNlOworCX0KKwor
CXN0YXRlLT5iYXNlLmNydGMgPSBjcnRjOworfQorCitzdGF0aWMgc3RydWN0IGRybV9jcnRjX3N0
YXRlICptdGtfZHJtX2NydGNfZHVwbGljYXRlX3N0YXRlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykK
K3sKKwlzdHJ1Y3QgbXRrX2NydGNfc3RhdGUgKnN0YXRlOworCisJc3RhdGUgPSBremFsbG9jKHNp
emVvZigqc3RhdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXN0YXRlKQorCQlyZXR1cm4gTlVMTDsK
KworCV9fZHJtX2F0b21pY19oZWxwZXJfY3J0Y19kdXBsaWNhdGVfc3RhdGUoY3J0YywgJnN0YXRl
LT5iYXNlKTsKKworCVdBUk5fT04oc3RhdGUtPmJhc2UuY3J0YyAhPSBjcnRjKTsKKwlzdGF0ZS0+
YmFzZS5jcnRjID0gY3J0YzsKKworCXJldHVybiAmc3RhdGUtPmJhc2U7Cit9CisKK3N0YXRpYyB2
b2lkIG10a19kcm1fY3J0Y19kZXN0cm95X3N0YXRlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKKwkJ
CQkgICAgICAgc3RydWN0IGRybV9jcnRjX3N0YXRlICpzdGF0ZSkKK3sKKwlfX2RybV9hdG9taWNf
aGVscGVyX2NydGNfZGVzdHJveV9zdGF0ZShjcnRjLCBzdGF0ZSk7CisJa2ZyZWUodG9fbXRrX2Ny
dGNfc3RhdGUoc3RhdGUpKTsKK30KKworc3RhdGljIGJvb2wgbXRrX2RybV9jcnRjX21vZGVfZml4
dXAoc3RydWN0IGRybV9jcnRjICpjcnRjLAorCQkJCSAgICBjb25zdCBzdHJ1Y3QgZHJtX2Rpc3Bs
YXlfbW9kZSAqbW9kZSwKKwkJCQkgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVk
X21vZGUpCit7CisJLyogTm90aGluZyB0byBkbyBoZXJlLCBidXQgdGhpcyBjYWxsYmFjayBpcyBt
YW5kYXRvcnkuICovCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcm1fY3J0
Y19tb2RlX3NldF9ub2ZiKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKKwlzdHJ1Y3QgbXRrX2Ny
dGNfc3RhdGUgKnN0YXRlID0gdG9fbXRrX2NydGNfc3RhdGUoY3J0Yy0+c3RhdGUpOworCisJc3Rh
dGUtPnBlbmRpbmdfd2lkdGggPSBjcnRjLT5tb2RlLmhkaXNwbGF5OworCXN0YXRlLT5wZW5kaW5n
X2hlaWdodCA9IGNydGMtPm1vZGUudmRpc3BsYXk7CisJc3RhdGUtPnBlbmRpbmdfdnJlZnJlc2gg
PSBjcnRjLT5tb2RlLnZyZWZyZXNoOworCXdtYigpOwkvKiBNYWtlIHN1cmUgdGhlIGFib3ZlIHBh
cmFtZXRlcnMgYXJlIHNldCBiZWZvcmUgdXBkYXRlICovCisJc3RhdGUtPnBlbmRpbmdfY29uZmln
ID0gdHJ1ZTsKK30KKworaW50IG10a19kcm1fY3J0Y19lbmFibGVfdmJsYW5rKHN0cnVjdCBkcm1f
ZGV2aWNlICpkcm0sIHVuc2lnbmVkIGludCBwaXBlKQoreworCXN0cnVjdCBtdGtfZHJtX3ByaXZh
dGUgKnByaXYgPSBkcm0tPmRldl9wcml2YXRlOworCXN0cnVjdCBtdGtfZHJtX2NydGMgKm10a19j
cnRjID0gdG9fbXRrX2NydGMocHJpdi0+Y3J0Y1twaXBlXSk7CisJc3RydWN0IG10a19kZHBfY29t
cCAqb3ZsID0gbXRrX2NydGMtPmRkcF9jb21wWzBdOworCisJbXRrX2RkcF9jb21wX2VuYWJsZV92
Ymxhbmsob3ZsLCAmbXRrX2NydGMtPmJhc2UpOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgbXRr
X2RybV9jcnRjX2Rpc2FibGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sIHVuc2lnbmVk
IGludCBwaXBlKQoreworCXN0cnVjdCBtdGtfZHJtX3ByaXZhdGUgKnByaXYgPSBkcm0tPmRldl9w
cml2YXRlOworCXN0cnVjdCBtdGtfZHJtX2NydGMgKm10a19jcnRjID0gdG9fbXRrX2NydGMocHJp
di0+Y3J0Y1twaXBlXSk7CisJc3RydWN0IG10a19kZHBfY29tcCAqb3ZsID0gbXRrX2NydGMtPmRk
cF9jb21wWzBdOworCisJbXRrX2RkcF9jb21wX2Rpc2FibGVfdmJsYW5rKG92bCk7Cit9CisKK3N0
YXRpYyBpbnQgbXRrX2NydGNfZGRwX2Nsa19lbmFibGUoc3RydWN0IG10a19kcm1fY3J0YyAqbXRr
X2NydGMpCit7CisJaW50IHJldDsKKwlpbnQgaTsKKworCURSTV9ERUJVR19EUklWRVIoIiVzXG4i
LCBfX2Z1bmNfXyk7CisJZm9yIChpID0gMDsgaSA8IG10a19jcnRjLT5kZHBfY29tcF9ucjsgaSsr
KSB7CisJCXJldCA9IGNsa19lbmFibGUobXRrX2NydGMtPmRkcF9jb21wW2ldLT5jbGspOworCQlp
ZiAocmV0KSB7CisJCQlEUk1fRVJST1IoIkZhaWxlZCB0byBlbmFibGUgY2xvY2sgJWQ6ICVkXG4i
LCBpLCByZXQpOworCQkJZ290byBlcnI7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK2VycjoKKwl3
aGlsZSAoLS1pID49IDApCisJCWNsa19kaXNhYmxlKG10a19jcnRjLT5kZHBfY29tcFtpXS0+Y2xr
KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBtdGtfY3J0Y19kZHBfY2xrX2Rpc2Fi
bGUoc3RydWN0IG10a19kcm1fY3J0YyAqbXRrX2NydGMpCit7CisJaW50IGk7CisKKwlEUk1fREVC
VUdfRFJJVkVSKCIlc1xuIiwgX19mdW5jX18pOworCWZvciAoaSA9IDA7IGkgPCBtdGtfY3J0Yy0+
ZGRwX2NvbXBfbnI7IGkrKykKKwkJY2xrX2Rpc2FibGUobXRrX2NydGMtPmRkcF9jb21wW2ldLT5j
bGspOworfQorCitzdGF0aWMgaW50IG10a19jcnRjX2RkcF9od19pbml0KHN0cnVjdCBtdGtfZHJt
X2NydGMgKm10a19jcnRjKQoreworCXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9ICZtdGtfY3J0Yy0+
YmFzZTsKKwl1bnNpZ25lZCBpbnQgd2lkdGgsIGhlaWdodCwgdnJlZnJlc2g7CisJaW50IHJldDsK
KwlpbnQgaTsKKworCURSTV9ERUJVR19EUklWRVIoIiVzXG4iLCBfX2Z1bmNfXyk7CisJaWYgKFdB
Uk5fT04oIWNydGMtPnN0YXRlKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl3aWR0aCA9IGNydGMt
PnN0YXRlLT5hZGp1c3RlZF9tb2RlLmhkaXNwbGF5OworCWhlaWdodCA9IGNydGMtPnN0YXRlLT5h
ZGp1c3RlZF9tb2RlLnZkaXNwbGF5OworCXZyZWZyZXNoID0gY3J0Yy0+c3RhdGUtPmFkanVzdGVk
X21vZGUudnJlZnJlc2g7CisKKwlyZXQgPSBwbV9ydW50aW1lX2dldF9zeW5jKGNydGMtPmRldi0+
ZGV2KTsKKwlpZiAocmV0IDwgMCkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBlbmFibGUgcG93
ZXIgZG9tYWluOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBtdGtf
ZGlzcF9tdXRleF9wcmVwYXJlKG10a19jcnRjLT5tdXRleCk7CisJaWYgKHJldCA8IDApIHsKKwkJ
RFJNX0VSUk9SKCJGYWlsZWQgdG8gZW5hYmxlIG11dGV4IGNsb2NrOiAlZFxuIiwgcmV0KTsKKwkJ
Z290byBlcnJfcG1fcnVudGltZV9wdXQ7CisJfQorCisJcmV0ID0gbXRrX2NydGNfZGRwX2Nsa19l
bmFibGUobXRrX2NydGMpOworCWlmIChyZXQgPCAwKSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHRv
IGVuYWJsZSBjb21wb25lbnQgY2xvY2tzOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJfbXV0ZXhf
dW5wcmVwYXJlOworCX0KKworCURSTV9ERUJVR19EUklWRVIoIm1lZGlhdGVrX2RkcF9kZHBfcGF0
aF9zZXR1cFxuIik7CisJZm9yIChpID0gMDsgaSA8IG10a19jcnRjLT5kZHBfY29tcF9uciAtIDE7
IGkrKykgeworCQltdGtfZGRwX2FkZF9jb21wX3RvX3BhdGgobXRrX2NydGMtPmNvbmZpZ19yZWdz
LAorCQkJCQkgbXRrX2NydGMtPmRkcF9jb21wW2ldLT5pZCwKKwkJCQkJIG10a19jcnRjLT5kZHBf
Y29tcFtpICsgMV0tPmlkKTsKKwkJbXRrX2Rpc3BfbXV0ZXhfYWRkX2NvbXAobXRrX2NydGMtPm11
dGV4LAorCQkJCQltdGtfY3J0Yy0+ZGRwX2NvbXBbaV0tPmlkKTsKKwl9CisJbXRrX2Rpc3BfbXV0
ZXhfYWRkX2NvbXAobXRrX2NydGMtPm11dGV4LCBtdGtfY3J0Yy0+ZGRwX2NvbXBbaV0tPmlkKTsK
KwltdGtfZGlzcF9tdXRleF9lbmFibGUobXRrX2NydGMtPm11dGV4KTsKKworCWZvciAoaSA9IDA7
IGkgPCBtdGtfY3J0Yy0+ZGRwX2NvbXBfbnI7IGkrKykgeworCQlzdHJ1Y3QgbXRrX2RkcF9jb21w
ICpjb21wID0gbXRrX2NydGMtPmRkcF9jb21wW2ldOworCisJCW10a19kZHBfY29tcF9jb25maWco
Y29tcCwgd2lkdGgsIGhlaWdodCwgdnJlZnJlc2gpOworCQltdGtfZGRwX2NvbXBfc3RhcnQoY29t
cCk7CisJfQorCisJLyogSW5pdGlhbGx5IGNvbmZpZ3VyZSBhbGwgcGxhbmVzICovCisJZm9yIChp
ID0gMDsgaSA8IE9WTF9MQVlFUl9OUjsgaSsrKSB7CisJCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5l
ID0gJm10a19jcnRjLT5wbGFuZXNbaV0uYmFzZTsKKwkJc3RydWN0IG10a19wbGFuZV9zdGF0ZSAq
cGxhbmVfc3RhdGU7CisKKwkJcGxhbmVfc3RhdGUgPSB0b19tdGtfcGxhbmVfc3RhdGUocGxhbmUt
PnN0YXRlKTsKKwkJbXRrX2RkcF9jb21wX2xheWVyX2NvbmZpZyhtdGtfY3J0Yy0+ZGRwX2NvbXBb
MF0sIGksCisJCQkJCSAgcGxhbmVfc3RhdGUpOworCX0KKworCXJldHVybiAwOworCitlcnJfbXV0
ZXhfdW5wcmVwYXJlOgorCW10a19kaXNwX211dGV4X3VucHJlcGFyZShtdGtfY3J0Yy0+bXV0ZXgp
OworZXJyX3BtX3J1bnRpbWVfcHV0OgorCXBtX3J1bnRpbWVfcHV0KGNydGMtPmRldi0+ZGV2KTsK
KwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBtdGtfY3J0Y19kZHBfaHdfZmluaShzdHJ1
Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0YykKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0g
bXRrX2NydGMtPmJhc2UuZGV2OworCWludCBpOworCisJRFJNX0RFQlVHX0RSSVZFUigiJXNcbiIs
IF9fZnVuY19fKTsKKwlmb3IgKGkgPSAwOyBpIDwgbXRrX2NydGMtPmRkcF9jb21wX25yOyBpKysp
CisJCW10a19kZHBfY29tcF9zdG9wKG10a19jcnRjLT5kZHBfY29tcFtpXSk7CisJZm9yIChpID0g
MDsgaSA8IG10a19jcnRjLT5kZHBfY29tcF9ucjsgaSsrKQorCQltdGtfZGlzcF9tdXRleF9yZW1v
dmVfY29tcChtdGtfY3J0Yy0+bXV0ZXgsCisJCQkJCSAgIG10a19jcnRjLT5kZHBfY29tcFtpXS0+
aWQpOworCW10a19kaXNwX211dGV4X2Rpc2FibGUobXRrX2NydGMtPm11dGV4KTsKKwlmb3IgKGkg
PSAwOyBpIDwgbXRrX2NydGMtPmRkcF9jb21wX25yIC0gMTsgaSsrKSB7CisJCW10a19kZHBfcmVt
b3ZlX2NvbXBfZnJvbV9wYXRoKG10a19jcnRjLT5jb25maWdfcmVncywKKwkJCQkJICAgICAgbXRr
X2NydGMtPmRkcF9jb21wW2ldLT5pZCwKKwkJCQkJICAgICAgbXRrX2NydGMtPmRkcF9jb21wW2kg
KyAxXS0+aWQpOworCQltdGtfZGlzcF9tdXRleF9yZW1vdmVfY29tcChtdGtfY3J0Yy0+bXV0ZXgs
CisJCQkJCSAgIG10a19jcnRjLT5kZHBfY29tcFtpXS0+aWQpOworCX0KKwltdGtfZGlzcF9tdXRl
eF9yZW1vdmVfY29tcChtdGtfY3J0Yy0+bXV0ZXgsIG10a19jcnRjLT5kZHBfY29tcFtpXS0+aWQp
OworCW10a19jcnRjX2RkcF9jbGtfZGlzYWJsZShtdGtfY3J0Yyk7CisJbXRrX2Rpc3BfbXV0ZXhf
dW5wcmVwYXJlKG10a19jcnRjLT5tdXRleCk7CisKKwlwbV9ydW50aW1lX3B1dChkcm0tPmRldik7
Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcm1fY3J0Y19lbmFibGUoc3RydWN0IGRybV9jcnRjICpj
cnRjKQoreworCXN0cnVjdCBtdGtfZHJtX2NydGMgKm10a19jcnRjID0gdG9fbXRrX2NydGMoY3J0
Yyk7CisJc3RydWN0IG10a19kZHBfY29tcCAqb3ZsID0gbXRrX2NydGMtPmRkcF9jb21wWzBdOwor
CWludCByZXQ7CisKKwlEUk1fREVCVUdfRFJJVkVSKCIlcyAlZFxuIiwgX19mdW5jX18sIGNydGMt
PmJhc2UuaWQpOworCisJcmV0ID0gbXRrX3NtaV9sYXJiX2dldChvdmwtPmxhcmJfZGV2KTsKKwlp
ZiAocmV0KSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIGdldCBsYXJiOiAlZFxuIiwgcmV0KTsK
KwkJcmV0dXJuOworCX0KKworCXJldCA9IG10a19jcnRjX2RkcF9od19pbml0KG10a19jcnRjKTsK
KwlpZiAocmV0KSB7CisJCW10a19zbWlfbGFyYl9wdXQob3ZsLT5sYXJiX2Rldik7CisJCXJldHVy
bjsKKwl9CisKKwlkcm1fY3J0Y192Ymxhbmtfb24oY3J0Yyk7CisJbXRrX2NydGMtPmVuYWJsZWQg
PSB0cnVlOworfQorCitzdGF0aWMgdm9pZCBtdGtfZHJtX2NydGNfZGlzYWJsZShzdHJ1Y3QgZHJt
X2NydGMgKmNydGMpCit7CisJc3RydWN0IG10a19kcm1fY3J0YyAqbXRrX2NydGMgPSB0b19tdGtf
Y3J0YyhjcnRjKTsKKwlzdHJ1Y3QgbXRrX2RkcF9jb21wICpvdmwgPSBtdGtfY3J0Yy0+ZGRwX2Nv
bXBbMF07CisJaW50IGk7CisKKwlEUk1fREVCVUdfRFJJVkVSKCIlcyAlZFxuIiwgX19mdW5jX18s
IGNydGMtPmJhc2UuaWQpOworCWlmICghbXRrX2NydGMtPmVuYWJsZWQpCisJCXJldHVybjsKKwor
CS8qIFNldCBhbGwgcGVuZGluZyBwbGFuZSBzdGF0ZSB0byBkaXNhYmxlZCAqLworCWZvciAoaSA9
IDA7IGkgPCBPVkxfTEFZRVJfTlI7IGkrKykgeworCQlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSA9
ICZtdGtfY3J0Yy0+cGxhbmVzW2ldLmJhc2U7CisJCXN0cnVjdCBtdGtfcGxhbmVfc3RhdGUgKnBs
YW5lX3N0YXRlOworCisJCXBsYW5lX3N0YXRlID0gdG9fbXRrX3BsYW5lX3N0YXRlKHBsYW5lLT5z
dGF0ZSk7CisJCXBsYW5lX3N0YXRlLT5wZW5kaW5nLmVuYWJsZSA9IGZhbHNlOworCQlwbGFuZV9z
dGF0ZS0+cGVuZGluZy5jb25maWcgPSB0cnVlOworCX0KKwltdGtfY3J0Yy0+cGVuZGluZ19wbGFu
ZXMgPSB0cnVlOworCisJLyogV2FpdCBmb3IgcGxhbmVzIHRvIGJlIGRpc2FibGVkICovCisJZHJt
X2NydGNfd2FpdF9vbmVfdmJsYW5rKGNydGMpOworCisJZHJtX2NydGNfdmJsYW5rX29mZihjcnRj
KTsKKwltdGtfY3J0Y19kZHBfaHdfZmluaShtdGtfY3J0Yyk7CisJbXRrX3NtaV9sYXJiX3B1dChv
dmwtPmxhcmJfZGV2KTsKKworCW10a19jcnRjLT5lbmFibGVkID0gZmFsc2U7Cit9CisKK3N0YXRp
YyB2b2lkIG10a19kcm1fY3J0Y19hdG9taWNfYmVnaW4oc3RydWN0IGRybV9jcnRjICpjcnRjLAor
CQkJCSAgICAgIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqb2xkX2NydGNfc3RhdGUpCit7CisJc3Ry
dWN0IG10a19jcnRjX3N0YXRlICpzdGF0ZSA9IHRvX210a19jcnRjX3N0YXRlKGNydGMtPnN0YXRl
KTsKKwlzdHJ1Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0YyA9IHRvX210a19jcnRjKGNydGMpOwor
CisJaWYgKG10a19jcnRjLT5ldmVudCAmJiBzdGF0ZS0+YmFzZS5ldmVudCkKKwkJRFJNX0VSUk9S
KCJuZXcgZXZlbnQgd2hpbGUgdGhlcmUgaXMgc3RpbGwgYSBwZW5kaW5nIGV2ZW50XG4iKTsKKwor
CWlmIChzdGF0ZS0+YmFzZS5ldmVudCkgeworCQlzdGF0ZS0+YmFzZS5ldmVudC0+cGlwZSA9IGRy
bV9jcnRjX2luZGV4KGNydGMpOworCQlXQVJOX09OKGRybV9jcnRjX3ZibGFua19nZXQoY3J0Yykg
IT0gMCk7CisJCW10a19jcnRjLT5ldmVudCA9IHN0YXRlLT5iYXNlLmV2ZW50OworCQlzdGF0ZS0+
YmFzZS5ldmVudCA9IE5VTEw7CisJfQorfQorCitzdGF0aWMgdm9pZCBtdGtfZHJtX2NydGNfYXRv
bWljX2ZsdXNoKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKKwkJCQkgICAgICBzdHJ1Y3QgZHJtX2Ny
dGNfc3RhdGUgKm9sZF9jcnRjX3N0YXRlKQoreworCXN0cnVjdCBtdGtfZHJtX2NydGMgKm10a19j
cnRjID0gdG9fbXRrX2NydGMoY3J0Yyk7CisJdW5zaWduZWQgaW50IHBlbmRpbmdfcGxhbmVzID0g
MDsKKwlpbnQgaTsKKworCWlmIChtdGtfY3J0Yy0+ZXZlbnQpCisJCW10a19jcnRjLT5wZW5kaW5n
X25lZWRzX3ZibGFuayA9IHRydWU7CisJZm9yIChpID0gMDsgaSA8IE9WTF9MQVlFUl9OUjsgaSsr
KSB7CisJCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lID0gJm10a19jcnRjLT5wbGFuZXNbaV0uYmFz
ZTsKKwkJc3RydWN0IG10a19wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGU7CisKKwkJcGxhbmVfc3Rh
dGUgPSB0b19tdGtfcGxhbmVfc3RhdGUocGxhbmUtPnN0YXRlKTsKKwkJaWYgKHBsYW5lX3N0YXRl
LT5wZW5kaW5nLmRpcnR5KSB7CisJCQlwbGFuZV9zdGF0ZS0+cGVuZGluZy5jb25maWcgPSB0cnVl
OworCQkJcGxhbmVfc3RhdGUtPnBlbmRpbmcuZGlydHkgPSBmYWxzZTsKKwkJCXBlbmRpbmdfcGxh
bmVzIHw9IEJJVChpKTsKKwkJfQorCX0KKwlpZiAocGVuZGluZ19wbGFuZXMpCisJCW10a19jcnRj
LT5wZW5kaW5nX3BsYW5lcyA9IHRydWU7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Ny
dGNfZnVuY3MgbXRrX2NydGNfZnVuY3MgPSB7CisJLnNldF9jb25maWcJCT0gZHJtX2F0b21pY19o
ZWxwZXJfc2V0X2NvbmZpZywKKwkucGFnZV9mbGlwCQk9IGRybV9hdG9taWNfaGVscGVyX3BhZ2Vf
ZmxpcCwKKwkuZGVzdHJveQkJPSBtdGtfZHJtX2NydGNfZGVzdHJveSwKKwkucmVzZXQJCQk9IG10
a19kcm1fY3J0Y19yZXNldCwKKwkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZQk9IG10a19kcm1fY3J0
Y19kdXBsaWNhdGVfc3RhdGUsCisJLmF0b21pY19kZXN0cm95X3N0YXRlCT0gbXRrX2RybV9jcnRj
X2Rlc3Ryb3lfc3RhdGUsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jcnRjX2hlbHBl
cl9mdW5jcyBtdGtfY3J0Y19oZWxwZXJfZnVuY3MgPSB7CisJLm1vZGVfZml4dXAJPSBtdGtfZHJt
X2NydGNfbW9kZV9maXh1cCwKKwkubW9kZV9zZXRfbm9mYgk9IG10a19kcm1fY3J0Y19tb2RlX3Nl
dF9ub2ZiLAorCS5lbmFibGUJCT0gbXRrX2RybV9jcnRjX2VuYWJsZSwKKwkuZGlzYWJsZQk9IG10
a19kcm1fY3J0Y19kaXNhYmxlLAorCS5hdG9taWNfYmVnaW4JPSBtdGtfZHJtX2NydGNfYXRvbWlj
X2JlZ2luLAorCS5hdG9taWNfZmx1c2gJPSBtdGtfZHJtX2NydGNfYXRvbWljX2ZsdXNoLAorfTsK
Kworc3RhdGljIGludCBtdGtfZHJtX2NydGNfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLAor
CQkJICAgICBzdHJ1Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0YywKKwkJCSAgICAgc3RydWN0IGRy
bV9wbGFuZSAqcHJpbWFyeSwKKwkJCSAgICAgc3RydWN0IGRybV9wbGFuZSAqY3Vyc29yLCB1bnNp
Z25lZCBpbnQgcGlwZSkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gZHJtX2NydGNfaW5pdF93aXRo
X3BsYW5lcyhkcm0sICZtdGtfY3J0Yy0+YmFzZSwgcHJpbWFyeSwgY3Vyc29yLAorCQkJCQkmbXRr
X2NydGNfZnVuY3MsIE5VTEwpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2NsZWFudXBfY3J0YzsK
KworCWRybV9jcnRjX2hlbHBlcl9hZGQoJm10a19jcnRjLT5iYXNlLCAmbXRrX2NydGNfaGVscGVy
X2Z1bmNzKTsKKworCXJldHVybiAwOworCitlcnJfY2xlYW51cF9jcnRjOgorCWRybV9jcnRjX2Ns
ZWFudXAoJm10a19jcnRjLT5iYXNlKTsKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIG10a19jcnRj
X2RkcF9pcnEoc3RydWN0IGRybV9jcnRjICpjcnRjLCBzdHJ1Y3QgbXRrX2RkcF9jb21wICpvdmwp
Cit7CisJc3RydWN0IG10a19kcm1fY3J0YyAqbXRrX2NydGMgPSB0b19tdGtfY3J0YyhjcnRjKTsK
KwlzdHJ1Y3QgbXRrX2NydGNfc3RhdGUgKnN0YXRlID0gdG9fbXRrX2NydGNfc3RhdGUobXRrX2Ny
dGMtPmJhc2Uuc3RhdGUpOworCXVuc2lnbmVkIGludCBpOworCisJLyoKKwkgKiBUT0RPOiBpbnN0
ZWFkIG9mIHVwZGF0aW5nIHRoZSByZWdpc3RlcnMgaGVyZSwgd2Ugc2hvdWxkIHByZXBhcmUKKwkg
KiB3b3JraW5nIHJlZ2lzdGVycyBpbiBhdG9taWNfY29tbWl0IGFuZCBsZXQgdGhlIGhhcmR3YXJl
IGNvbW1hbmQKKwkgKiBxdWV1ZSB1cGRhdGUgbW9kdWxlIHJlZ2lzdGVycyBvbiB2YmxhbmsuCisJ
ICovCisJaWYgKHN0YXRlLT5wZW5kaW5nX2NvbmZpZykgeworCQltdGtfZGRwX2NvbXBfY29uZmln
KG92bCwgc3RhdGUtPnBlbmRpbmdfd2lkdGgsCisJCQkJICAgIHN0YXRlLT5wZW5kaW5nX2hlaWdo
dCwKKwkJCQkgICAgc3RhdGUtPnBlbmRpbmdfdnJlZnJlc2gpOworCisJCXN0YXRlLT5wZW5kaW5n
X2NvbmZpZyA9IGZhbHNlOworCX0KKworCWlmIChtdGtfY3J0Yy0+cGVuZGluZ19wbGFuZXMpIHsK
KwkJZm9yIChpID0gMDsgaSA8IE9WTF9MQVlFUl9OUjsgaSsrKSB7CisJCQlzdHJ1Y3QgZHJtX3Bs
YW5lICpwbGFuZSA9ICZtdGtfY3J0Yy0+cGxhbmVzW2ldLmJhc2U7CisJCQlzdHJ1Y3QgbXRrX3Bs
YW5lX3N0YXRlICpwbGFuZV9zdGF0ZTsKKworCQkJcGxhbmVfc3RhdGUgPSB0b19tdGtfcGxhbmVf
c3RhdGUocGxhbmUtPnN0YXRlKTsKKworCQkJaWYgKHBsYW5lX3N0YXRlLT5wZW5kaW5nLmNvbmZp
ZykgeworCQkJCW10a19kZHBfY29tcF9sYXllcl9jb25maWcob3ZsLCBpLCBwbGFuZV9zdGF0ZSk7
CisJCQkJcGxhbmVfc3RhdGUtPnBlbmRpbmcuY29uZmlnID0gZmFsc2U7CisJCQl9CisJCX0KKwkJ
bXRrX2NydGMtPnBlbmRpbmdfcGxhbmVzID0gZmFsc2U7CisJfQorCisJbXRrX2RybV9maW5pc2hf
cGFnZV9mbGlwKG10a19jcnRjKTsKK30KKworaW50IG10a19kcm1fY3J0Y19jcmVhdGUoc3RydWN0
IGRybV9kZXZpY2UgKmRybV9kZXYsCisJCQljb25zdCBlbnVtIG10a19kZHBfY29tcF9pZCAqcGF0
aCwgdW5zaWduZWQgaW50IHBhdGhfbGVuKQoreworCXN0cnVjdCBtdGtfZHJtX3ByaXZhdGUgKnBy
aXYgPSBkcm1fZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkcm1fZGV2
LT5kZXY7CisJc3RydWN0IG10a19kcm1fY3J0YyAqbXRrX2NydGM7CisJZW51bSBkcm1fcGxhbmVf
dHlwZSB0eXBlOworCXVuc2lnbmVkIGludCB6cG9zOworCWludCBwaXBlID0gcHJpdi0+bnVtX3Bp
cGVzOworCWludCByZXQ7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcGF0aF9sZW47IGkr
KykgeworCQllbnVtIG10a19kZHBfY29tcF9pZCBjb21wX2lkID0gcGF0aFtpXTsKKwkJc3RydWN0
IGRldmljZV9ub2RlICpub2RlOworCisJCW5vZGUgPSBwcml2LT5jb21wX25vZGVbY29tcF9pZF07
CisJCWlmICghbm9kZSkgeworCQkJZGV2X2luZm8oZGV2LAorCQkJCSAiTm90IGNyZWF0aW5nIGNy
dGMgJWQgYmVjYXVzZSBjb21wb25lbnQgJWQgaXMgZGlzYWJsZWQgb3IgbWlzc2luZ1xuIiwKKwkJ
CQkgcGlwZSwgY29tcF9pZCk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCW10a19jcnRjID0g
ZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCptdGtfY3J0YyksIEdGUF9LRVJORUwpOworCWlmICgh
bXRrX2NydGMpCisJCXJldHVybiAtRU5PTUVNOworCisJbXRrX2NydGMtPmNvbmZpZ19yZWdzID0g
cHJpdi0+Y29uZmlnX3JlZ3M7CisJbXRrX2NydGMtPmRkcF9jb21wX25yID0gcGF0aF9sZW47CisJ
bXRrX2NydGMtPmRkcF9jb21wID0gZGV2bV9rbWFsbG9jX2FycmF5KGRldiwgbXRrX2NydGMtPmRk
cF9jb21wX25yLAorCQkJCQkJc2l6ZW9mKCptdGtfY3J0Yy0+ZGRwX2NvbXApLAorCQkJCQkJR0ZQ
X0tFUk5FTCk7CisKKwltdGtfY3J0Yy0+bXV0ZXggPSBtdGtfZGlzcF9tdXRleF9nZXQocHJpdi0+
bXV0ZXhfZGV2LCBwaXBlKTsKKwlpZiAoSVNfRVJSKG10a19jcnRjLT5tdXRleCkpIHsKKwkJcmV0
ID0gUFRSX0VSUihtdGtfY3J0Yy0+bXV0ZXgpOworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBn
ZXQgbXV0ZXg6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWZvciAoaSA9IDA7
IGkgPCBtdGtfY3J0Yy0+ZGRwX2NvbXBfbnI7IGkrKykgeworCQllbnVtIG10a19kZHBfY29tcF9p
ZCBjb21wX2lkID0gcGF0aFtpXTsKKwkJc3RydWN0IG10a19kZHBfY29tcCAqY29tcDsKKwkJc3Ry
dWN0IGRldmljZV9ub2RlICpub2RlOworCisJCW5vZGUgPSBwcml2LT5jb21wX25vZGVbY29tcF9p
ZF07CisJCWNvbXAgPSBwcml2LT5kZHBfY29tcFtjb21wX2lkXTsKKwkJaWYgKCFjb21wKSB7CisJ
CQlkZXZfZXJyKGRldiwgIkNvbXBvbmVudCAlcyBub3QgaW5pdGlhbGl6ZWRcbiIsCisJCQkJbm9k
ZS0+ZnVsbF9uYW1lKTsKKwkJCXJldCA9IC1FTk9ERVY7CisJCQlnb3RvIHVucHJlcGFyZTsKKwkJ
fQorCisJCXJldCA9IGNsa19wcmVwYXJlKGNvbXAtPmNsayk7CisJCWlmIChyZXQpIHsKKwkJCWRl
dl9lcnIoZGV2LAorCQkJCSJGYWlsZWQgdG8gcHJlcGFyZSBjbG9jayBmb3IgY29tcG9uZW50ICVz
OiAlZFxuIiwKKwkJCQlub2RlLT5mdWxsX25hbWUsIHJldCk7CisJCQlnb3RvIHVucHJlcGFyZTsK
KwkJfQorCisJCW10a19jcnRjLT5kZHBfY29tcFtpXSA9IGNvbXA7CisJfQorCisJZm9yICh6cG9z
ID0gMDsgenBvcyA8IE9WTF9MQVlFUl9OUjsgenBvcysrKSB7CisJCXR5cGUgPSAoenBvcyA9PSAw
KSA/IERSTV9QTEFORV9UWVBFX1BSSU1BUlkgOgorCQkJCSh6cG9zID09IDEpID8gRFJNX1BMQU5F
X1RZUEVfQ1VSU09SIDoKKwkJCQkJCURSTV9QTEFORV9UWVBFX09WRVJMQVk7CisJCXJldCA9IG10
a19wbGFuZV9pbml0KGRybV9kZXYsICZtdGtfY3J0Yy0+cGxhbmVzW3pwb3NdLAorCQkJCSAgICAg
QklUKHBpcGUpLCB0eXBlLCB6cG9zKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gdW5wcmVwYXJlOwor
CX0KKworCXJldCA9IG10a19kcm1fY3J0Y19pbml0KGRybV9kZXYsIG10a19jcnRjLCAmbXRrX2Ny
dGMtPnBsYW5lc1swXS5iYXNlLAorCQkJCSZtdGtfY3J0Yy0+cGxhbmVzWzFdLmJhc2UsIHBpcGUp
OworCWlmIChyZXQgPCAwKQorCQlnb3RvIHVucHJlcGFyZTsKKworCXByaXYtPmNydGNbcGlwZV0g
PSAmbXRrX2NydGMtPmJhc2U7CisJcHJpdi0+bnVtX3BpcGVzKys7CisKKwlyZXR1cm4gMDsKKwor
dW5wcmVwYXJlOgorCXdoaWxlICgtLWkgPj0gMCkKKwkJY2xrX3VucHJlcGFyZShtdGtfY3J0Yy0+
ZGRwX2NvbXBbaV0tPmNsayk7CisKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVy
cy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fY3J0Yy5oIGIvZHJpdmVycy9ncHUvZHJtL21lZGlh
dGVrL210a19kcm1fY3J0Yy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgx
ZTU1NjYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Ry
bV9jcnRjLmgKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRp
YVRlayBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICovCisKKyNpZm5kZWYgTVRLX0RSTV9DUlRDX0gKKyNkZWZpbmUgTVRLX0RSTV9DUlRDX0gK
KworI2luY2x1ZGUgPGRybS9kcm1fY3J0Yy5oPgorI2luY2x1ZGUgIm10a19kcm1fZGRwX2NvbXAu
aCIKKyNpbmNsdWRlICJtdGtfZHJtX3BsYW5lLmgiCisKKyNkZWZpbmUgT1ZMX0xBWUVSX05SCTQK
KworaW50IG10a19kcm1fY3J0Y19lbmFibGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0s
IHVuc2lnbmVkIGludCBwaXBlKTsKK3ZvaWQgbXRrX2RybV9jcnRjX2Rpc2FibGVfdmJsYW5rKHN0
cnVjdCBkcm1fZGV2aWNlICpkcm0sIHVuc2lnbmVkIGludCBwaXBlKTsKK3ZvaWQgbXRrX2RybV9j
cnRjX2NoZWNrX2ZsdXNoKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7Cit2b2lkIG10a19kcm1fY3J0
Y19jb21taXQoc3RydWN0IGRybV9jcnRjICpjcnRjKTsKK3ZvaWQgbXRrX2NydGNfZGRwX2lycShz
dHJ1Y3QgZHJtX2NydGMgKmNydGMsIHN0cnVjdCBtdGtfZGRwX2NvbXAgKm92bCk7CitpbnQgbXRr
X2RybV9jcnRjX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZHJtX2RldiwKKwkJCWNvbnN0IGVu
dW0gbXRrX2RkcF9jb21wX2lkICpwYXRoLAorCQkJdW5zaWduZWQgaW50IHBhdGhfbGVuKTsKKwor
I2VuZGlmIC8qIE1US19EUk1fQ1JUQ19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v
bWVkaWF0ZWsvbXRrX2RybV9kZHAuYyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJt
X2RkcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3YmE5MzU1Ci0tLSAv
ZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwLmMKQEAg
LTAsMCArMSwzNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgTWVkaWFUZWsgSW5jLgor
ICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQor
ICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisj
aW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVk
ZSA8bGludXgvb2ZfZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+
CisjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+CisKKyNpbmNsdWRlICJtdGtfZHJtX2RkcC5oIgor
I2luY2x1ZGUgIm10a19kcm1fZGRwX2NvbXAuaCIKKworI2RlZmluZSBESVNQX1JFR19DT05GSUdf
RElTUF9PVkwwX01PVVRfRU4JMHgwNDAKKyNkZWZpbmUgRElTUF9SRUdfQ09ORklHX0RJU1BfT1ZM
MV9NT1VUX0VOCTB4MDQ0CisjZGVmaW5lIERJU1BfUkVHX0NPTkZJR19ESVNQX09EX01PVVRfRU4J
CTB4MDQ4CisjZGVmaW5lIERJU1BfUkVHX0NPTkZJR19ESVNQX0dBTU1BX01PVVRfRU4JMHgwNGMK
KyNkZWZpbmUgRElTUF9SRUdfQ09ORklHX0RJU1BfVUZPRV9NT1VUX0VOCTB4MDUwCisjZGVmaW5l
IERJU1BfUkVHX0NPTkZJR19ESVNQX0NPTE9SMF9TRUxfSU4JMHgwODQKKyNkZWZpbmUgRElTUF9S
RUdfQ09ORklHX0RJU1BfQ09MT1IxX1NFTF9JTgkweDA4OAorI2RlZmluZSBESVNQX1JFR19DT05G
SUdfRFBJX1NFTF9JTgkJMHgwYWMKKyNkZWZpbmUgRElTUF9SRUdfQ09ORklHX0RJU1BfUkRNQTFf
TU9VVF9FTgkweDBjOAorI2RlZmluZSBESVNQX1JFR19DT05GSUdfTU1TWVNfQ0dfQ09OMAkJMHgx
MDAKKworI2RlZmluZSBESVNQX1JFR19NVVRFWF9FTihuKQkoMHgyMCArIDB4MjAgKiAobikpCisj
ZGVmaW5lIERJU1BfUkVHX01VVEVYX1JTVChuKQkoMHgyOCArIDB4MjAgKiAobikpCisjZGVmaW5l
IERJU1BfUkVHX01VVEVYX01PRChuKQkoMHgyYyArIDB4MjAgKiAobikpCisjZGVmaW5lIERJU1Bf
UkVHX01VVEVYX1NPRihuKQkoMHgzMCArIDB4MjAgKiAobikpCisKKyNkZWZpbmUgTVVURVhfTU9E
X0RJU1BfT1ZMMAkJQklUKDExKQorI2RlZmluZSBNVVRFWF9NT0RfRElTUF9PVkwxCQlCSVQoMTIp
CisjZGVmaW5lIE1VVEVYX01PRF9ESVNQX1JETUEwCQlCSVQoMTMpCisjZGVmaW5lIE1VVEVYX01P
RF9ESVNQX1JETUExCQlCSVQoMTQpCisjZGVmaW5lIE1VVEVYX01PRF9ESVNQX1JETUEyCQlCSVQo
MTUpCisjZGVmaW5lIE1VVEVYX01PRF9ESVNQX1dETUEwCQlCSVQoMTYpCisjZGVmaW5lIE1VVEVY
X01PRF9ESVNQX1dETUExCQlCSVQoMTcpCisjZGVmaW5lIE1VVEVYX01PRF9ESVNQX0NPTE9SMAkJ
QklUKDE4KQorI2RlZmluZSBNVVRFWF9NT0RfRElTUF9DT0xPUjEJCUJJVCgxOSkKKyNkZWZpbmUg
TVVURVhfTU9EX0RJU1BfQUFMCQlCSVQoMjApCisjZGVmaW5lIE1VVEVYX01PRF9ESVNQX0dBTU1B
CQlCSVQoMjEpCisjZGVmaW5lIE1VVEVYX01PRF9ESVNQX1VGT0UJCUJJVCgyMikKKyNkZWZpbmUg
TVVURVhfTU9EX0RJU1BfUFdNMAkJQklUKDIzKQorI2RlZmluZSBNVVRFWF9NT0RfRElTUF9QV00x
CQlCSVQoMjQpCisjZGVmaW5lIE1VVEVYX01PRF9ESVNQX09ECQlCSVQoMjUpCisKKyNkZWZpbmUg
TVVURVhfU09GX1NJTkdMRV9NT0RFCQkwCisjZGVmaW5lIE1VVEVYX1NPRl9EU0kwCQkJMQorI2Rl
ZmluZSBNVVRFWF9TT0ZfRFNJMQkJCTIKKyNkZWZpbmUgTVVURVhfU09GX0RQSTAJCQkzCisKKyNk
ZWZpbmUgT1ZMMF9NT1VUX0VOX0NPTE9SMAkJMHgxCisjZGVmaW5lIE9EX01PVVRfRU5fUkRNQTAJ
CTB4MQorI2RlZmluZSBVRk9FX01PVVRfRU5fRFNJMAkJMHgxCisjZGVmaW5lIENPTE9SMF9TRUxf
SU5fT1ZMMAkJMHgxCisjZGVmaW5lIE9WTDFfTU9VVF9FTl9DT0xPUjEJCTB4MQorI2RlZmluZSBH
QU1NQV9NT1VUX0VOX1JETUExCQkweDEKKyNkZWZpbmUgUkRNQTFfTU9VVF9EUEkwCQkJMHgyCisj
ZGVmaW5lIERQSTBfU0VMX0lOX1JETUExCQkweDEKKyNkZWZpbmUgQ09MT1IxX1NFTF9JTl9PVkwx
CQkweDEKKworc3RydWN0IG10a19kaXNwX211dGV4IHsKKwlpbnQgaWQ7CisJYm9vbCBjbGFpbWVk
OworfTsKKworc3RydWN0IG10a19kZHAgeworCXN0cnVjdCBkZXZpY2UJCQkqZGV2OworCXN0cnVj
dCBjbGsJCQkqY2xrOworCXZvaWQgX19pb21lbQkJCSpyZWdzOworCXN0cnVjdCBtdGtfZGlzcF9t
dXRleAkJbXV0ZXhbMTBdOworfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtdXRleF9t
b2RbRERQX0NPTVBPTkVOVF9JRF9NQVhdID0geworCVtERFBfQ09NUE9ORU5UX0FBTF0gPSBNVVRF
WF9NT0RfRElTUF9BQUwsCisJW0REUF9DT01QT05FTlRfQ09MT1IwXSA9IE1VVEVYX01PRF9ESVNQ
X0NPTE9SMCwKKwlbRERQX0NPTVBPTkVOVF9DT0xPUjFdID0gTVVURVhfTU9EX0RJU1BfQ09MT1Ix
LAorCVtERFBfQ09NUE9ORU5UX0dBTU1BXSA9IE1VVEVYX01PRF9ESVNQX0dBTU1BLAorCVtERFBf
Q09NUE9ORU5UX09EXSA9IE1VVEVYX01PRF9ESVNQX09ELAorCVtERFBfQ09NUE9ORU5UX09WTDBd
ID0gTVVURVhfTU9EX0RJU1BfT1ZMMCwKKwlbRERQX0NPTVBPTkVOVF9PVkwxXSA9IE1VVEVYX01P
RF9ESVNQX09WTDEsCisJW0REUF9DT01QT05FTlRfUFdNMF0gPSBNVVRFWF9NT0RfRElTUF9QV00w
LAorCVtERFBfQ09NUE9ORU5UX1BXTTFdID0gTVVURVhfTU9EX0RJU1BfUFdNMSwKKwlbRERQX0NP
TVBPTkVOVF9SRE1BMF0gPSBNVVRFWF9NT0RfRElTUF9SRE1BMCwKKwlbRERQX0NPTVBPTkVOVF9S
RE1BMV0gPSBNVVRFWF9NT0RfRElTUF9SRE1BMSwKKwlbRERQX0NPTVBPTkVOVF9SRE1BMl0gPSBN
VVRFWF9NT0RfRElTUF9SRE1BMiwKKwlbRERQX0NPTVBPTkVOVF9VRk9FXSA9IE1VVEVYX01PRF9E
SVNQX1VGT0UsCisJW0REUF9DT01QT05FTlRfV0RNQTBdID0gTVVURVhfTU9EX0RJU1BfV0RNQTAs
CisJW0REUF9DT01QT05FTlRfV0RNQTFdID0gTVVURVhfTU9EX0RJU1BfV0RNQTEsCit9OworCitz
dGF0aWMgdW5zaWduZWQgaW50IG10a19kZHBfbW91dF9lbihlbnVtIG10a19kZHBfY29tcF9pZCBj
dXIsCisJCQkJICAgIGVudW0gbXRrX2RkcF9jb21wX2lkIG5leHQsCisJCQkJICAgIHVuc2lnbmVk
IGludCAqYWRkcikKK3sKKwl1bnNpZ25lZCBpbnQgdmFsdWU7CisKKwlpZiAoY3VyID09IEREUF9D
T01QT05FTlRfT1ZMMCAmJiBuZXh0ID09IEREUF9DT01QT05FTlRfQ09MT1IwKSB7CisJCSphZGRy
ID0gRElTUF9SRUdfQ09ORklHX0RJU1BfT1ZMMF9NT1VUX0VOOworCQl2YWx1ZSA9IE9WTDBfTU9V
VF9FTl9DT0xPUjA7CisJfSBlbHNlIGlmIChjdXIgPT0gRERQX0NPTVBPTkVOVF9PRCAmJiBuZXh0
ID09IEREUF9DT01QT05FTlRfUkRNQTApIHsKKwkJKmFkZHIgPSBESVNQX1JFR19DT05GSUdfRElT
UF9PRF9NT1VUX0VOOworCQl2YWx1ZSA9IE9EX01PVVRfRU5fUkRNQTA7CisJfSBlbHNlIGlmIChj
dXIgPT0gRERQX0NPTVBPTkVOVF9VRk9FICYmIG5leHQgPT0gRERQX0NPTVBPTkVOVF9EU0kwKSB7
CisJCSphZGRyID0gRElTUF9SRUdfQ09ORklHX0RJU1BfVUZPRV9NT1VUX0VOOworCQl2YWx1ZSA9
IFVGT0VfTU9VVF9FTl9EU0kwOworCX0gZWxzZSBpZiAoY3VyID09IEREUF9DT01QT05FTlRfT1ZM
MSAmJiBuZXh0ID09IEREUF9DT01QT05FTlRfQ09MT1IxKSB7CisJCSphZGRyID0gRElTUF9SRUdf
Q09ORklHX0RJU1BfT1ZMMV9NT1VUX0VOOworCQl2YWx1ZSA9IE9WTDFfTU9VVF9FTl9DT0xPUjE7
CisJfSBlbHNlIGlmIChjdXIgPT0gRERQX0NPTVBPTkVOVF9HQU1NQSAmJiBuZXh0ID09IEREUF9D
T01QT05FTlRfUkRNQTEpIHsKKwkJKmFkZHIgPSBESVNQX1JFR19DT05GSUdfRElTUF9HQU1NQV9N
T1VUX0VOOworCQl2YWx1ZSA9IEdBTU1BX01PVVRfRU5fUkRNQTE7CisJfSBlbHNlIGlmIChjdXIg
PT0gRERQX0NPTVBPTkVOVF9SRE1BMSAmJiBuZXh0ID09IEREUF9DT01QT05FTlRfRFBJMCkgewor
CQkqYWRkciA9IERJU1BfUkVHX0NPTkZJR19ESVNQX1JETUExX01PVVRfRU47CisJCXZhbHVlID0g
UkRNQTFfTU9VVF9EUEkwOworCX0gZWxzZSB7CisJCXZhbHVlID0gMDsKKwl9CisKKwlyZXR1cm4g
dmFsdWU7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbXRrX2RkcF9zZWxfaW4oZW51bSBtdGtf
ZGRwX2NvbXBfaWQgY3VyLAorCQkJCSAgIGVudW0gbXRrX2RkcF9jb21wX2lkIG5leHQsCisJCQkJ
ICAgdW5zaWduZWQgaW50ICphZGRyKQoreworCXVuc2lnbmVkIGludCB2YWx1ZTsKKworCWlmIChj
dXIgPT0gRERQX0NPTVBPTkVOVF9PVkwwICYmIG5leHQgPT0gRERQX0NPTVBPTkVOVF9DT0xPUjAp
IHsKKwkJKmFkZHIgPSBESVNQX1JFR19DT05GSUdfRElTUF9DT0xPUjBfU0VMX0lOOworCQl2YWx1
ZSA9IENPTE9SMF9TRUxfSU5fT1ZMMDsKKwl9IGVsc2UgaWYgKGN1ciA9PSBERFBfQ09NUE9ORU5U
X1JETUExICYmIG5leHQgPT0gRERQX0NPTVBPTkVOVF9EUEkwKSB7CisJCSphZGRyID0gRElTUF9S
RUdfQ09ORklHX0RQSV9TRUxfSU47CisJCXZhbHVlID0gRFBJMF9TRUxfSU5fUkRNQTE7CisJfSBl
bHNlIGlmIChjdXIgPT0gRERQX0NPTVBPTkVOVF9PVkwxICYmIG5leHQgPT0gRERQX0NPTVBPTkVO
VF9DT0xPUjEpIHsKKwkJKmFkZHIgPSBESVNQX1JFR19DT05GSUdfRElTUF9DT0xPUjFfU0VMX0lO
OworCQl2YWx1ZSA9IENPTE9SMV9TRUxfSU5fT1ZMMTsKKwl9IGVsc2UgeworCQl2YWx1ZSA9IDA7
CisJfQorCisJcmV0dXJuIHZhbHVlOworfQorCit2b2lkIG10a19kZHBfYWRkX2NvbXBfdG9fcGF0
aCh2b2lkIF9faW9tZW0gKmNvbmZpZ19yZWdzLAorCQkJICAgICAgZW51bSBtdGtfZGRwX2NvbXBf
aWQgY3VyLAorCQkJICAgICAgZW51bSBtdGtfZGRwX2NvbXBfaWQgbmV4dCkKK3sKKwl1bnNpZ25l
ZCBpbnQgYWRkciwgdmFsdWUsIHJlZzsKKworCXZhbHVlID0gbXRrX2RkcF9tb3V0X2VuKGN1ciwg
bmV4dCwgJmFkZHIpOworCWlmICh2YWx1ZSkgeworCQlyZWcgPSByZWFkbF9yZWxheGVkKGNvbmZp
Z19yZWdzICsgYWRkcikgfCB2YWx1ZTsKKwkJd3JpdGVsX3JlbGF4ZWQocmVnLCBjb25maWdfcmVn
cyArIGFkZHIpOworCX0KKworCXZhbHVlID0gbXRrX2RkcF9zZWxfaW4oY3VyLCBuZXh0LCAmYWRk
cik7CisJaWYgKHZhbHVlKSB7CisJCXJlZyA9IHJlYWRsX3JlbGF4ZWQoY29uZmlnX3JlZ3MgKyBh
ZGRyKSB8IHZhbHVlOworCQl3cml0ZWxfcmVsYXhlZChyZWcsIGNvbmZpZ19yZWdzICsgYWRkcik7
CisJfQorfQorCit2b2lkIG10a19kZHBfcmVtb3ZlX2NvbXBfZnJvbV9wYXRoKHZvaWQgX19pb21l
bSAqY29uZmlnX3JlZ3MsCisJCQkJICAgZW51bSBtdGtfZGRwX2NvbXBfaWQgY3VyLAorCQkJCSAg
IGVudW0gbXRrX2RkcF9jb21wX2lkIG5leHQpCit7CisJdW5zaWduZWQgaW50IGFkZHIsIHZhbHVl
LCByZWc7CisKKwl2YWx1ZSA9IG10a19kZHBfbW91dF9lbihjdXIsIG5leHQsICZhZGRyKTsKKwlp
ZiAodmFsdWUpIHsKKwkJcmVnID0gcmVhZGxfcmVsYXhlZChjb25maWdfcmVncyArIGFkZHIpICYg
fnZhbHVlOworCQl3cml0ZWxfcmVsYXhlZChyZWcsIGNvbmZpZ19yZWdzICsgYWRkcik7CisJfQor
CisJdmFsdWUgPSBtdGtfZGRwX3NlbF9pbihjdXIsIG5leHQsICZhZGRyKTsKKwlpZiAodmFsdWUp
IHsKKwkJcmVnID0gcmVhZGxfcmVsYXhlZChjb25maWdfcmVncyArIGFkZHIpICYgfnZhbHVlOwor
CQl3cml0ZWxfcmVsYXhlZChyZWcsIGNvbmZpZ19yZWdzICsgYWRkcik7CisJfQorfQorCitzdHJ1
Y3QgbXRrX2Rpc3BfbXV0ZXggKm10a19kaXNwX211dGV4X2dldChzdHJ1Y3QgZGV2aWNlICpkZXYs
IHVuc2lnbmVkIGludCBpZCkKK3sKKwlzdHJ1Y3QgbXRrX2RkcCAqZGRwID0gZGV2X2dldF9kcnZk
YXRhKGRldik7CisKKwlpZiAoaWQgPj0gMTApCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwor
CWlmIChkZHAtPm11dGV4W2lkXS5jbGFpbWVkKQorCQlyZXR1cm4gRVJSX1BUUigtRUJVU1kpOwor
CisJZGRwLT5tdXRleFtpZF0uY2xhaW1lZCA9IHRydWU7CisKKwlyZXR1cm4gJmRkcC0+bXV0ZXhb
aWRdOworfQorCit2b2lkIG10a19kaXNwX211dGV4X3B1dChzdHJ1Y3QgbXRrX2Rpc3BfbXV0ZXgg
Km11dGV4KQoreworCXN0cnVjdCBtdGtfZGRwICpkZHAgPSBjb250YWluZXJfb2YobXV0ZXgsIHN0
cnVjdCBtdGtfZGRwLAorCQkJCQkgICBtdXRleFttdXRleC0+aWRdKTsKKworCVdBUk5fT04oJmRk
cC0+bXV0ZXhbbXV0ZXgtPmlkXSAhPSBtdXRleCk7CisKKwltdXRleC0+Y2xhaW1lZCA9IGZhbHNl
OworfQorCitpbnQgbXRrX2Rpc3BfbXV0ZXhfcHJlcGFyZShzdHJ1Y3QgbXRrX2Rpc3BfbXV0ZXgg
Km11dGV4KQoreworCXN0cnVjdCBtdGtfZGRwICpkZHAgPSBjb250YWluZXJfb2YobXV0ZXgsIHN0
cnVjdCBtdGtfZGRwLAorCQkJCQkgICBtdXRleFttdXRleC0+aWRdKTsKKwlyZXR1cm4gY2xrX3By
ZXBhcmVfZW5hYmxlKGRkcC0+Y2xrKTsKK30KKwordm9pZCBtdGtfZGlzcF9tdXRleF91bnByZXBh
cmUoc3RydWN0IG10a19kaXNwX211dGV4ICptdXRleCkKK3sKKwlzdHJ1Y3QgbXRrX2RkcCAqZGRw
ID0gY29udGFpbmVyX29mKG11dGV4LCBzdHJ1Y3QgbXRrX2RkcCwKKwkJCQkJICAgbXV0ZXhbbXV0
ZXgtPmlkXSk7CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRkcC0+Y2xrKTsKK30KKwordm9pZCBt
dGtfZGlzcF9tdXRleF9hZGRfY29tcChzdHJ1Y3QgbXRrX2Rpc3BfbXV0ZXggKm11dGV4LAorCQkJ
ICAgICBlbnVtIG10a19kZHBfY29tcF9pZCBpZCkKK3sKKwlzdHJ1Y3QgbXRrX2RkcCAqZGRwID0g
Y29udGFpbmVyX29mKG11dGV4LCBzdHJ1Y3QgbXRrX2RkcCwKKwkJCQkJICAgbXV0ZXhbbXV0ZXgt
PmlkXSk7CisJdW5zaWduZWQgaW50IHJlZzsKKworCVdBUk5fT04oJmRkcC0+bXV0ZXhbbXV0ZXgt
PmlkXSAhPSBtdXRleCk7CisKKwlzd2l0Y2ggKGlkKSB7CisJY2FzZSBERFBfQ09NUE9ORU5UX0RT
STA6CisJCXJlZyA9IE1VVEVYX1NPRl9EU0kwOworCQlicmVhazsKKwljYXNlIEREUF9DT01QT05F
TlRfRFNJMToKKwkJcmVnID0gTVVURVhfU09GX0RTSTA7CisJCWJyZWFrOworCWNhc2UgRERQX0NP
TVBPTkVOVF9EUEkwOgorCQlyZWcgPSBNVVRFWF9TT0ZfRFBJMDsKKwkJYnJlYWs7CisJZGVmYXVs
dDoKKwkJcmVnID0gcmVhZGxfcmVsYXhlZChkZHAtPnJlZ3MgKyBESVNQX1JFR19NVVRFWF9NT0Qo
bXV0ZXgtPmlkKSk7CisJCXJlZyB8PSBtdXRleF9tb2RbaWRdOworCQl3cml0ZWxfcmVsYXhlZChy
ZWcsIGRkcC0+cmVncyArIERJU1BfUkVHX01VVEVYX01PRChtdXRleC0+aWQpKTsKKwkJcmV0dXJu
OworCX0KKworCXdyaXRlbF9yZWxheGVkKHJlZywgZGRwLT5yZWdzICsgRElTUF9SRUdfTVVURVhf
U09GKG11dGV4LT5pZCkpOworfQorCit2b2lkIG10a19kaXNwX211dGV4X3JlbW92ZV9jb21wKHN0
cnVjdCBtdGtfZGlzcF9tdXRleCAqbXV0ZXgsCisJCQkJZW51bSBtdGtfZGRwX2NvbXBfaWQgaWQp
Cit7CisJc3RydWN0IG10a19kZHAgKmRkcCA9IGNvbnRhaW5lcl9vZihtdXRleCwgc3RydWN0IG10
a19kZHAsCisJCQkJCSAgIG11dGV4W211dGV4LT5pZF0pOworCXVuc2lnbmVkIGludCByZWc7CisK
KwlXQVJOX09OKCZkZHAtPm11dGV4W211dGV4LT5pZF0gIT0gbXV0ZXgpOworCisJc3dpdGNoIChp
ZCkgeworCWNhc2UgRERQX0NPTVBPTkVOVF9EU0kwOgorCWNhc2UgRERQX0NPTVBPTkVOVF9EU0kx
OgorCWNhc2UgRERQX0NPTVBPTkVOVF9EUEkwOgorCQl3cml0ZWxfcmVsYXhlZChNVVRFWF9TT0Zf
U0lOR0xFX01PREUsCisJCQkgICAgICAgZGRwLT5yZWdzICsgRElTUF9SRUdfTVVURVhfU09GKG11
dGV4LT5pZCkpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZWcgPSByZWFkbF9yZWxheGVkKGRk
cC0+cmVncyArIERJU1BfUkVHX01VVEVYX01PRChtdXRleC0+aWQpKTsKKwkJcmVnICY9IH5tdXRl
eF9tb2RbaWRdOworCQl3cml0ZWxfcmVsYXhlZChyZWcsIGRkcC0+cmVncyArIERJU1BfUkVHX01V
VEVYX01PRChtdXRleC0+aWQpKTsKKwkJYnJlYWs7CisJfQorfQorCit2b2lkIG10a19kaXNwX211
dGV4X2VuYWJsZShzdHJ1Y3QgbXRrX2Rpc3BfbXV0ZXggKm11dGV4KQoreworCXN0cnVjdCBtdGtf
ZGRwICpkZHAgPSBjb250YWluZXJfb2YobXV0ZXgsIHN0cnVjdCBtdGtfZGRwLAorCQkJCQkgICBt
dXRleFttdXRleC0+aWRdKTsKKworCVdBUk5fT04oJmRkcC0+bXV0ZXhbbXV0ZXgtPmlkXSAhPSBt
dXRleCk7CisKKwl3cml0ZWwoMSwgZGRwLT5yZWdzICsgRElTUF9SRUdfTVVURVhfRU4obXV0ZXgt
PmlkKSk7Cit9CisKK3ZvaWQgbXRrX2Rpc3BfbXV0ZXhfZGlzYWJsZShzdHJ1Y3QgbXRrX2Rpc3Bf
bXV0ZXggKm11dGV4KQoreworCXN0cnVjdCBtdGtfZGRwICpkZHAgPSBjb250YWluZXJfb2YobXV0
ZXgsIHN0cnVjdCBtdGtfZGRwLAorCQkJCQkgICBtdXRleFttdXRleC0+aWRdKTsKKworCVdBUk5f
T04oJmRkcC0+bXV0ZXhbbXV0ZXgtPmlkXSAhPSBtdXRleCk7CisKKwl3cml0ZWwoMCwgZGRwLT5y
ZWdzICsgRElTUF9SRUdfTVVURVhfRU4obXV0ZXgtPmlkKSk7Cit9CisKK3N0YXRpYyBpbnQgbXRr
X2RkcF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkZXZp
Y2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0IG10a19kZHAgKmRkcDsKKwlzdHJ1Y3QgcmVz
b3VyY2UgKnJlZ3M7CisJaW50IGk7CisKKwlkZHAgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2Yo
KmRkcCksIEdGUF9LRVJORUwpOworCWlmICghZGRwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWZv
ciAoaSA9IDA7IGkgPCAxMDsgaSsrKQorCQlkZHAtPm11dGV4W2ldLmlkID0gaTsKKworCWRkcC0+
Y2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgTlVMTCk7CisJaWYgKElTX0VSUihkZHAtPmNsaykpIHsK
KwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZ2V0IGNsb2NrXG4iKTsKKwkJcmV0dXJuIFBUUl9F
UlIoZGRwLT5jbGspOworCX0KKworCXJlZ3MgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwg
SU9SRVNPVVJDRV9NRU0sIDApOworCWRkcC0+cmVncyA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShk
ZXYsIHJlZ3MpOworCWlmIChJU19FUlIoZGRwLT5yZWdzKSkgeworCQlkZXZfZXJyKGRldiwgIkZh
aWxlZCB0byBtYXAgbXV0ZXggcmVnaXN0ZXJzXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIoZGRwLT5y
ZWdzKTsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkZHApOworCisJcmV0dXJu
IDA7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2RkcF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2Rldmlj
ZSAqcGRldikKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZp
Y2VfaWQgZGRwX2RyaXZlcl9kdF9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0
ZWssbXQ4MTczLWRpc3AtbXV0ZXgiIH0sCisJe30sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShv
ZiwgZGRwX2RyaXZlcl9kdF9tYXRjaCk7CisKK3N0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXRrX2Rk
cF9kcml2ZXIgPSB7CisJLnByb2JlCQk9IG10a19kZHBfcHJvYmUsCisJLnJlbW92ZQkJPSBtdGtf
ZGRwX3JlbW92ZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAibWVkaWF0ZWstZGRwIiwKKwkJ
Lm93bmVyCT0gVEhJU19NT0RVTEUsCisJCS5vZl9tYXRjaF90YWJsZSA9IGRkcF9kcml2ZXJfZHRf
bWF0Y2gsCisJfSwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRr
X2RybV9kZHAuaCBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2RkcC5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyYzExNzUKLS0tIC9kZXYvbnVsbAorKysg
Yi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHAuaApAQCAtMCwwICsxLDQxIEBA
CisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1IE1lZGlhVGVrIEluYy4KKyAqCisgKiBUaGlzIHBy
b2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1v
ZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBNVEtfRFJN
X0REUF9ICisjZGVmaW5lIE1US19EUk1fRERQX0gKKworI2luY2x1ZGUgIm10a19kcm1fZGRwX2Nv
bXAuaCIKKworc3RydWN0IHJlZ21hcDsKK3N0cnVjdCBkZXZpY2U7CitzdHJ1Y3QgbXRrX2Rpc3Bf
bXV0ZXg7CisKK3ZvaWQgbXRrX2RkcF9hZGRfY29tcF90b19wYXRoKHZvaWQgX19pb21lbSAqY29u
ZmlnX3JlZ3MsCisJCQkgICAgICBlbnVtIG10a19kZHBfY29tcF9pZCBjdXIsCisJCQkgICAgICBl
bnVtIG10a19kZHBfY29tcF9pZCBuZXh0KTsKK3ZvaWQgbXRrX2RkcF9yZW1vdmVfY29tcF9mcm9t
X3BhdGgodm9pZCBfX2lvbWVtICpjb25maWdfcmVncywKKwkJCQkgICBlbnVtIG10a19kZHBfY29t
cF9pZCBjdXIsCisJCQkJICAgZW51bSBtdGtfZGRwX2NvbXBfaWQgbmV4dCk7CisKK3N0cnVjdCBt
dGtfZGlzcF9tdXRleCAqbXRrX2Rpc3BfbXV0ZXhfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgdW5z
aWduZWQgaW50IGlkKTsKK2ludCBtdGtfZGlzcF9tdXRleF9wcmVwYXJlKHN0cnVjdCBtdGtfZGlz
cF9tdXRleCAqbXV0ZXgpOwordm9pZCBtdGtfZGlzcF9tdXRleF9hZGRfY29tcChzdHJ1Y3QgbXRr
X2Rpc3BfbXV0ZXggKm11dGV4LAorCQkJICAgICBlbnVtIG10a19kZHBfY29tcF9pZCBpZCk7Cit2
b2lkIG10a19kaXNwX211dGV4X2VuYWJsZShzdHJ1Y3QgbXRrX2Rpc3BfbXV0ZXggKm11dGV4KTsK
K3ZvaWQgbXRrX2Rpc3BfbXV0ZXhfZGlzYWJsZShzdHJ1Y3QgbXRrX2Rpc3BfbXV0ZXggKm11dGV4
KTsKK3ZvaWQgbXRrX2Rpc3BfbXV0ZXhfcmVtb3ZlX2NvbXAoc3RydWN0IG10a19kaXNwX211dGV4
ICptdXRleCwKKwkJCQllbnVtIG10a19kZHBfY29tcF9pZCBpZCk7Cit2b2lkIG10a19kaXNwX211
dGV4X3VucHJlcGFyZShzdHJ1Y3QgbXRrX2Rpc3BfbXV0ZXggKm11dGV4KTsKK3ZvaWQgbXRrX2Rp
c3BfbXV0ZXhfcHV0KHN0cnVjdCBtdGtfZGlzcF9tdXRleCAqbXV0ZXgpOworCisjZW5kaWYgLyog
TVRLX0RSTV9ERFBfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210
a19kcm1fZGRwX2NvbXAuYyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2RkcF9j
b21wLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk3MGZjZgotLS0gL2Rl
di9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2RkcF9jb21wLmMK
QEAgLTAsMCArMSwyMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgTWVkaWFUZWsgSW5j
LgorICogQXV0aG9yczoKKyAqCVlUIFNoZW4gPHl0LnNoZW5AbWVkaWF0ZWsuY29tPgorICoJQ0sg
SHUgPGNrLmh1QG1lZGlhdGVrLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMK
KyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRo
aXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUg
PGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgorI2luY2x1ZGUgPGxp
bnV4L29mX2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8
bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8ZHJtL2RybVAuaD4KKyNpbmNsdWRl
ICJtdGtfZHJtX2Rydi5oIgorI2luY2x1ZGUgIm10a19kcm1fcGxhbmUuaCIKKyNpbmNsdWRlICJt
dGtfZHJtX2RkcF9jb21wLmgiCisKKyNkZWZpbmUgRElTUF9PRF9FTgkJCQkweDAwMDAKKyNkZWZp
bmUgRElTUF9PRF9JTlRFTgkJCQkweDAwMDgKKyNkZWZpbmUgRElTUF9PRF9JTlRTVEEJCQkJMHgw
MDBjCisjZGVmaW5lIERJU1BfT0RfQ0ZHCQkJCTB4MDAyMAorI2RlZmluZSBESVNQX09EX1NJWkUJ
CQkJMHgwMDMwCisKKyNkZWZpbmUgRElTUF9SRUdfVUZPX1NUQVJUCQkJMHgwMDAwCisKKyNkZWZp
bmUgRElTUF9DT0xPUl9DRkdfTUFJTgkJCTB4MDQwMAorI2RlZmluZSBESVNQX0NPTE9SX1NUQVJU
CQkJMHgwYzAwCisjZGVmaW5lIERJU1BfQ09MT1JfV0lEVEgJCQkweDBjNTAKKyNkZWZpbmUgRElT
UF9DT0xPUl9IRUlHSFQJCQkweDBjNTQKKworI2RlZmluZQlPRF9SRUxBWV9NT0RFCQlCSVQoMCkK
KworI2RlZmluZQlVRk9fQllQQVNTCQlCSVQoMikKKworI2RlZmluZQlDT0xPUl9CWVBBU1NfQUxM
CUJJVCg3KQorI2RlZmluZQlDT0xPUl9TRVFfU0VMCQlCSVQoMTMpCisKK3N0YXRpYyB2b2lkIG10
a19jb2xvcl9jb25maWcoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCwgdW5zaWduZWQgaW50IHcs
CisJCQkgICAgIHVuc2lnbmVkIGludCBoLCB1bnNpZ25lZCBpbnQgdnJlZnJlc2gpCit7CisJd3Jp
dGVsKHcsIGNvbXAtPnJlZ3MgKyBESVNQX0NPTE9SX1dJRFRIKTsKKwl3cml0ZWwoaCwgY29tcC0+
cmVncyArIERJU1BfQ09MT1JfSEVJR0hUKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2NvbG9yX3N0
YXJ0KHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXApCit7CisJd3JpdGVsKENPTE9SX0JZUEFTU19B
TEwgfCBDT0xPUl9TRVFfU0VMLAorCSAgICAgICBjb21wLT5yZWdzICsgRElTUF9DT0xPUl9DRkdf
TUFJTik7CisJd3JpdGVsKDB4MSwgY29tcC0+cmVncyArIERJU1BfQ09MT1JfU1RBUlQpOworfQor
CitzdGF0aWMgdm9pZCBtdGtfb2RfY29uZmlnKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAsIHVu
c2lnbmVkIGludCB3LAorCQkJICB1bnNpZ25lZCBpbnQgaCwgdW5zaWduZWQgaW50IHZyZWZyZXNo
KQoreworCXdyaXRlbCh3IDw8IDE2IHwgaCwgY29tcC0+cmVncyArIERJU1BfT0RfU0laRSk7Cit9
CisKK3N0YXRpYyB2b2lkIG10a19vZF9zdGFydChzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKQor
eworCXdyaXRlbChPRF9SRUxBWV9NT0RFLCBjb21wLT5yZWdzICsgRElTUF9PRF9DRkcpOworCXdy
aXRlbCgxLCBjb21wLT5yZWdzICsgRElTUF9PRF9FTik7Cit9CisKK3N0YXRpYyB2b2lkIG10a191
Zm9lX3N0YXJ0KHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXApCit7CisJd3JpdGVsKFVGT19CWVBB
U1MsIGNvbXAtPnJlZ3MgKyBESVNQX1JFR19VRk9fU1RBUlQpOworfQorCitzdGF0aWMgY29uc3Qg
c3RydWN0IG10a19kZHBfY29tcF9mdW5jcyBkZHBfY29sb3IgPSB7CisJLmNvbmZpZyA9IG10a19j
b2xvcl9jb25maWcsCisJLnN0YXJ0ID0gbXRrX2NvbG9yX3N0YXJ0LAorfTsKKworc3RhdGljIGNv
bnN0IHN0cnVjdCBtdGtfZGRwX2NvbXBfZnVuY3MgZGRwX29kID0geworCS5jb25maWcgPSBtdGtf
b2RfY29uZmlnLAorCS5zdGFydCA9IG10a19vZF9zdGFydCwKK307CisKK3N0YXRpYyBjb25zdCBz
dHJ1Y3QgbXRrX2RkcF9jb21wX2Z1bmNzIGRkcF91Zm9lID0geworCS5zdGFydCA9IG10a191Zm9l
X3N0YXJ0LAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBtdGtfZGRwX2NvbXBfc3Rl
bVtNVEtfRERQX0NPTVBfVFlQRV9NQVhdID0geworCVtNVEtfRElTUF9PVkxdID0gIm92bCIsCisJ
W01US19ESVNQX1JETUFdID0gInJkbWEiLAorCVtNVEtfRElTUF9XRE1BXSA9ICJ3ZG1hIiwKKwlb
TVRLX0RJU1BfQ09MT1JdID0gImNvbG9yIiwKKwlbTVRLX0RJU1BfQUFMXSA9ICJhYWwiLAorCVtN
VEtfRElTUF9HQU1NQV0gPSAiZ2FtbWEiLAorCVtNVEtfRElTUF9VRk9FXSA9ICJ1Zm9lIiwKKwlb
TVRLX0RTSV0gPSAiZHNpIiwKKwlbTVRLX0RQSV0gPSAiZHBpIiwKKwlbTVRLX0RJU1BfUFdNXSA9
ICJwd20iLAorCVtNVEtfRElTUF9NVVRFWF0gPSAibXV0ZXgiLAorCVtNVEtfRElTUF9PRF0gPSAi
b2QiLAorfTsKKworc3RydWN0IG10a19kZHBfY29tcF9tYXRjaCB7CisJZW51bSBtdGtfZGRwX2Nv
bXBfdHlwZSB0eXBlOworCWludCBhbGlhc19pZDsKKwljb25zdCBzdHJ1Y3QgbXRrX2RkcF9jb21w
X2Z1bmNzICpmdW5jczsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRrX2RkcF9jb21wX21h
dGNoIG10a19kZHBfbWF0Y2hlc1tERFBfQ09NUE9ORU5UX0lEX01BWF0gPSB7CisJW0REUF9DT01Q
T05FTlRfQUFMXQk9IHsgTVRLX0RJU1BfQUFMLAkwLCBOVUxMIH0sCisJW0REUF9DT01QT05FTlRf
Q09MT1IwXQk9IHsgTVRLX0RJU1BfQ09MT1IsCTAsICZkZHBfY29sb3IgfSwKKwlbRERQX0NPTVBP
TkVOVF9DT0xPUjFdCT0geyBNVEtfRElTUF9DT0xPUiwJMSwgJmRkcF9jb2xvciB9LAorCVtERFBf
Q09NUE9ORU5UX0RQSTBdCT0geyBNVEtfRFBJLAkJMCwgTlVMTCB9LAorCVtERFBfQ09NUE9ORU5U
X0RTSTBdCT0geyBNVEtfRFNJLAkJMCwgTlVMTCB9LAorCVtERFBfQ09NUE9ORU5UX0RTSTFdCT0g
eyBNVEtfRFNJLAkJMSwgTlVMTCB9LAorCVtERFBfQ09NUE9ORU5UX0dBTU1BXQk9IHsgTVRLX0RJ
U1BfR0FNTUEsCTAsIE5VTEwgfSwKKwlbRERQX0NPTVBPTkVOVF9PRF0JPSB7IE1US19ESVNQX09E
LAkwLCAmZGRwX29kIH0sCisJW0REUF9DT01QT05FTlRfT1ZMMF0JPSB7IE1US19ESVNQX09WTCwJ
MCwgTlVMTCB9LAorCVtERFBfQ09NUE9ORU5UX09WTDFdCT0geyBNVEtfRElTUF9PVkwsCTEsIE5V
TEwgfSwKKwlbRERQX0NPTVBPTkVOVF9QV00wXQk9IHsgTVRLX0RJU1BfUFdNLAkwLCBOVUxMIH0s
CisJW0REUF9DT01QT05FTlRfUkRNQTBdCT0geyBNVEtfRElTUF9SRE1BLAkwLCBOVUxMIH0sCisJ
W0REUF9DT01QT05FTlRfUkRNQTFdCT0geyBNVEtfRElTUF9SRE1BLAkxLCBOVUxMIH0sCisJW0RE
UF9DT01QT05FTlRfUkRNQTJdCT0geyBNVEtfRElTUF9SRE1BLAkyLCBOVUxMIH0sCisJW0REUF9D
T01QT05FTlRfVUZPRV0JPSB7IE1US19ESVNQX1VGT0UsCTAsICZkZHBfdWZvZSB9LAorCVtERFBf
Q09NUE9ORU5UX1dETUEwXQk9IHsgTVRLX0RJU1BfV0RNQSwJMCwgTlVMTCB9LAorCVtERFBfQ09N
UE9ORU5UX1dETUExXQk9IHsgTVRLX0RJU1BfV0RNQSwJMSwgTlVMTCB9LAorfTsKKworaW50IG10
a19kZHBfY29tcF9nZXRfaWQoc3RydWN0IGRldmljZV9ub2RlICpub2RlLAorCQkJZW51bSBtdGtf
ZGRwX2NvbXBfdHlwZSBjb21wX3R5cGUpCit7CisJaW50IGlkID0gb2ZfYWxpYXNfZ2V0X2lkKG5v
ZGUsIG10a19kZHBfY29tcF9zdGVtW2NvbXBfdHlwZV0pOworCWludCBpOworCisJZm9yIChpID0g
MDsgaSA8IEFSUkFZX1NJWkUobXRrX2RkcF9tYXRjaGVzKTsgaSsrKSB7CisJCWlmIChjb21wX3R5
cGUgPT0gbXRrX2RkcF9tYXRjaGVzW2ldLnR5cGUgJiYKKwkJICAgIChpZCA8IDAgfHwgaWQgPT0g
bXRrX2RkcF9tYXRjaGVzW2ldLmFsaWFzX2lkKSkKKwkJCXJldHVybiBpOworCX0KKworCXJldHVy
biAtRUlOVkFMOworfQorCitpbnQgbXRrX2RkcF9jb21wX2luaXQoc3RydWN0IGRldmljZSAqZGV2
LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsCisJCSAgICAgIHN0cnVjdCBtdGtfZGRwX2NvbXAg
KmNvbXAsIGVudW0gbXRrX2RkcF9jb21wX2lkIGNvbXBfaWQsCisJCSAgICAgIGNvbnN0IHN0cnVj
dCBtdGtfZGRwX2NvbXBfZnVuY3MgKmZ1bmNzKQoreworCWVudW0gbXRrX2RkcF9jb21wX3R5cGUg
dHlwZTsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmxhcmJfbm9kZTsKKwlzdHJ1Y3QgcGxhdGZvcm1f
ZGV2aWNlICpsYXJiX3BkZXY7CisKKwlpZiAoY29tcF9pZCA8IDAgfHwgY29tcF9pZCA+PSBERFBf
Q09NUE9ORU5UX0lEX01BWCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljb21wLT5pZCA9IGNvbXBf
aWQ7CisJY29tcC0+ZnVuY3MgPSBmdW5jcyA/OiBtdGtfZGRwX21hdGNoZXNbY29tcF9pZF0uZnVu
Y3M7CisKKwlpZiAoY29tcF9pZCA9PSBERFBfQ09NUE9ORU5UX0RQSTAgfHwKKwkgICAgY29tcF9p
ZCA9PSBERFBfQ09NUE9ORU5UX0RTSTAgfHwKKwkgICAgY29tcF9pZCA9PSBERFBfQ09NUE9ORU5U
X1BXTTApIHsKKwkJY29tcC0+cmVncyA9IE5VTEw7CisJCWNvbXAtPmNsayA9IE5VTEw7CisJCWNv
bXAtPmlycSA9IDA7CisJCXJldHVybiAwOworCX0KKworCWNvbXAtPnJlZ3MgPSBvZl9pb21hcChu
b2RlLCAwKTsKKwljb21wLT5pcnEgPSBvZl9pcnFfZ2V0KG5vZGUsIDApOworCWNvbXAtPmNsayA9
IG9mX2Nsa19nZXQobm9kZSwgMCk7CisJaWYgKElTX0VSUihjb21wLT5jbGspKQorCQljb21wLT5j
bGsgPSBOVUxMOworCisJdHlwZSA9IG10a19kZHBfbWF0Y2hlc1tjb21wX2lkXS50eXBlOworCisJ
LyogT25seSBETUEgY2FwYWJsZSBjb21wb25lbnRzIG5lZWQgdGhlIExBUkIgcHJvcGVydHkgKi8K
Kwljb21wLT5sYXJiX2RldiA9IE5VTEw7CisJaWYgKHR5cGUgIT0gTVRLX0RJU1BfT1ZMICYmCisJ
ICAgIHR5cGUgIT0gTVRLX0RJU1BfUkRNQSAmJgorCSAgICB0eXBlICE9IE1US19ESVNQX1dETUEp
CisJCXJldHVybiAwOworCisJbGFyYl9ub2RlID0gb2ZfcGFyc2VfcGhhbmRsZShub2RlLCAibWVk
aWF0ZWssbGFyYiIsIDApOworCWlmICghbGFyYl9ub2RlKSB7CisJCWRldl9lcnIoZGV2LAorCQkJ
Ik1pc3NpbmcgbWVkaWFkZWssbGFyYiBwaGFuZGxlIGluICVzIG5vZGVcbiIsCisJCQlub2RlLT5m
dWxsX25hbWUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlsYXJiX3BkZXYgPSBvZl9maW5k
X2RldmljZV9ieV9ub2RlKGxhcmJfbm9kZSk7CisJaWYgKCFsYXJiX3BkZXYpIHsKKwkJZGV2X3dh
cm4oZGV2LCAiV2FpdGluZyBmb3IgbGFyYiBkZXZpY2UgJXNcbiIsCisJCQkgbGFyYl9ub2RlLT5m
dWxsX25hbWUpOworCQlvZl9ub2RlX3B1dChsYXJiX25vZGUpOworCQlyZXR1cm4gLUVQUk9CRV9E
RUZFUjsKKwl9CisJb2Zfbm9kZV9wdXQobGFyYl9ub2RlKTsKKworCWNvbXAtPmxhcmJfZGV2ID0g
JmxhcmJfcGRldi0+ZGV2OworCisJcmV0dXJuIDA7Cit9CisKK2ludCBtdGtfZGRwX2NvbXBfcmVn
aXN0ZXIoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgc3RydWN0IG10a19kZHBfY29tcCAqY29tcCkK
K3sKKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2YXRlID0gZHJtLT5kZXZfcHJpdmF0ZTsK
KworCWlmIChwcml2YXRlLT5kZHBfY29tcFtjb21wLT5pZF0pCisJCXJldHVybiAtRUJVU1k7CisK
Kwlwcml2YXRlLT5kZHBfY29tcFtjb21wLT5pZF0gPSBjb21wOworCXJldHVybiAwOworfQorCit2
b2lkIG10a19kZHBfY29tcF91bnJlZ2lzdGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sIHN0cnVj
dCBtdGtfZGRwX2NvbXAgKmNvbXApCit7CisJc3RydWN0IG10a19kcm1fcHJpdmF0ZSAqcHJpdmF0
ZSA9IGRybS0+ZGV2X3ByaXZhdGU7CisKKwlwcml2YXRlLT5kZHBfY29tcFtjb21wLT5pZF0gPSBO
VUxMOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRw
X2NvbXAuaCBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2RkcF9jb21wLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmIxM2JhOQotLS0gL2Rldi9udWxsCisr
KyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2RkcF9jb21wLmgKQEAgLTAsMCAr
MSwxNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgTWVkaWFUZWsgSW5jLgorICoKKyAq
IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05V
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVm
IE1US19EUk1fRERQX0NPTVBfSAorI2RlZmluZSBNVEtfRFJNX0REUF9DT01QX0gKKworI2luY2x1
ZGUgPGxpbnV4L2lvLmg+CisKK3N0cnVjdCBkZXZpY2U7CitzdHJ1Y3QgZGV2aWNlX25vZGU7Citz
dHJ1Y3QgZHJtX2NydGM7CitzdHJ1Y3QgZHJtX2RldmljZTsKK3N0cnVjdCBtdGtfcGxhbmVfc3Rh
dGU7CisKK2VudW0gbXRrX2RkcF9jb21wX3R5cGUgeworCU1US19ESVNQX09WTCwKKwlNVEtfRElT
UF9SRE1BLAorCU1US19ESVNQX1dETUEsCisJTVRLX0RJU1BfQ09MT1IsCisJTVRLX0RJU1BfQUFM
LAorCU1US19ESVNQX0dBTU1BLAorCU1US19ESVNQX1VGT0UsCisJTVRLX0RTSSwKKwlNVEtfRFBJ
LAorCU1US19ESVNQX1BXTSwKKwlNVEtfRElTUF9NVVRFWCwKKwlNVEtfRElTUF9PRCwKKwlNVEtf
RERQX0NPTVBfVFlQRV9NQVgsCit9OworCitlbnVtIG10a19kZHBfY29tcF9pZCB7CisJRERQX0NP
TVBPTkVOVF9BQUwsCisJRERQX0NPTVBPTkVOVF9DT0xPUjAsCisJRERQX0NPTVBPTkVOVF9DT0xP
UjEsCisJRERQX0NPTVBPTkVOVF9EUEkwLAorCUREUF9DT01QT05FTlRfRFNJMCwKKwlERFBfQ09N
UE9ORU5UX0RTSTEsCisJRERQX0NPTVBPTkVOVF9HQU1NQSwKKwlERFBfQ09NUE9ORU5UX09ELAor
CUREUF9DT01QT05FTlRfT1ZMMCwKKwlERFBfQ09NUE9ORU5UX09WTDEsCisJRERQX0NPTVBPTkVO
VF9QV00wLAorCUREUF9DT01QT05FTlRfUFdNMSwKKwlERFBfQ09NUE9ORU5UX1JETUEwLAorCURE
UF9DT01QT05FTlRfUkRNQTEsCisJRERQX0NPTVBPTkVOVF9SRE1BMiwKKwlERFBfQ09NUE9ORU5U
X1VGT0UsCisJRERQX0NPTVBPTkVOVF9XRE1BMCwKKwlERFBfQ09NUE9ORU5UX1dETUExLAorCURE
UF9DT01QT05FTlRfSURfTUFYLAorfTsKKworc3RydWN0IG10a19kZHBfY29tcDsKKworc3RydWN0
IG10a19kZHBfY29tcF9mdW5jcyB7CisJdm9pZCAoKmNvbmZpZykoc3RydWN0IG10a19kZHBfY29t
cCAqY29tcCwgdW5zaWduZWQgaW50IHcsCisJCSAgICAgICB1bnNpZ25lZCBpbnQgaCwgdW5zaWdu
ZWQgaW50IHZyZWZyZXNoKTsKKwl2b2lkICgqc3RhcnQpKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNv
bXApOworCXZvaWQgKCpzdG9wKShzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKTsKKwl2b2lkICgq
ZW5hYmxlX3ZibGFuaykoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCwgc3RydWN0IGRybV9jcnRj
ICpjcnRjKTsKKwl2b2lkICgqZGlzYWJsZV92YmxhbmspKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNv
bXApOworCXZvaWQgKCpsYXllcl9vbikoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCwgdW5zaWdu
ZWQgaW50IGlkeCk7CisJdm9pZCAoKmxheWVyX29mZikoc3RydWN0IG10a19kZHBfY29tcCAqY29t
cCwgdW5zaWduZWQgaW50IGlkeCk7CisJdm9pZCAoKmxheWVyX2NvbmZpZykoc3RydWN0IG10a19k
ZHBfY29tcCAqY29tcCwgdW5zaWduZWQgaW50IGlkeCwKKwkJCSAgICAgc3RydWN0IG10a19wbGFu
ZV9zdGF0ZSAqc3RhdGUpOworfTsKKworc3RydWN0IG10a19kZHBfY29tcCB7CisJc3RydWN0IGNs
ayAqY2xrOworCXZvaWQgX19pb21lbSAqcmVnczsKKwlpbnQgaXJxOworCXN0cnVjdCBkZXZpY2Ug
KmxhcmJfZGV2OworCWVudW0gbXRrX2RkcF9jb21wX2lkIGlkOworCWNvbnN0IHN0cnVjdCBtdGtf
ZGRwX2NvbXBfZnVuY3MgKmZ1bmNzOworfTsKKworc3RhdGljIGlubGluZSB2b2lkIG10a19kZHBf
Y29tcF9jb25maWcoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCwKKwkJCQkgICAgICAgdW5zaWdu
ZWQgaW50IHcsIHVuc2lnbmVkIGludCBoLAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgdnJlZnJl
c2gpCit7CisJaWYgKGNvbXAtPmZ1bmNzICYmIGNvbXAtPmZ1bmNzLT5jb25maWcpCisJCWNvbXAt
PmZ1bmNzLT5jb25maWcoY29tcCwgdywgaCwgdnJlZnJlc2gpOworfQorCitzdGF0aWMgaW5saW5l
IHZvaWQgbXRrX2RkcF9jb21wX3N0YXJ0KHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXApCit7CisJ
aWYgKGNvbXAtPmZ1bmNzICYmIGNvbXAtPmZ1bmNzLT5zdGFydCkKKwkJY29tcC0+ZnVuY3MtPnN0
YXJ0KGNvbXApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbXRrX2RkcF9jb21wX3N0b3Aoc3Ry
dWN0IG10a19kZHBfY29tcCAqY29tcCkKK3sKKwlpZiAoY29tcC0+ZnVuY3MgJiYgY29tcC0+ZnVu
Y3MtPnN0b3ApCisJCWNvbXAtPmZ1bmNzLT5zdG9wKGNvbXApOworfQorCitzdGF0aWMgaW5saW5l
IHZvaWQgbXRrX2RkcF9jb21wX2VuYWJsZV92Ymxhbmsoc3RydWN0IG10a19kZHBfY29tcCAqY29t
cCwKKwkJCQkJICAgICAgc3RydWN0IGRybV9jcnRjICpjcnRjKQoreworCWlmIChjb21wLT5mdW5j
cyAmJiBjb21wLT5mdW5jcy0+ZW5hYmxlX3ZibGFuaykKKwkJY29tcC0+ZnVuY3MtPmVuYWJsZV92
YmxhbmsoY29tcCwgY3J0Yyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtdGtfZGRwX2NvbXBf
ZGlzYWJsZV92Ymxhbmsoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCkKK3sKKwlpZiAoY29tcC0+
ZnVuY3MgJiYgY29tcC0+ZnVuY3MtPmRpc2FibGVfdmJsYW5rKQorCQljb21wLT5mdW5jcy0+ZGlz
YWJsZV92YmxhbmsoY29tcCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtdGtfZGRwX2NvbXBf
bGF5ZXJfb24oc3RydWN0IG10a19kZHBfY29tcCAqY29tcCwKKwkJCQkJIHVuc2lnbmVkIGludCBp
ZHgpCit7CisJaWYgKGNvbXAtPmZ1bmNzICYmIGNvbXAtPmZ1bmNzLT5sYXllcl9vbikKKwkJY29t
cC0+ZnVuY3MtPmxheWVyX29uKGNvbXAsIGlkeCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBt
dGtfZGRwX2NvbXBfbGF5ZXJfb2ZmKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAsCisJCQkJCSAg
dW5zaWduZWQgaW50IGlkeCkKK3sKKwlpZiAoY29tcC0+ZnVuY3MgJiYgY29tcC0+ZnVuY3MtPmxh
eWVyX29mZikKKwkJY29tcC0+ZnVuY3MtPmxheWVyX29mZihjb21wLCBpZHgpOworfQorCitzdGF0
aWMgaW5saW5lIHZvaWQgbXRrX2RkcF9jb21wX2xheWVyX2NvbmZpZyhzdHJ1Y3QgbXRrX2RkcF9j
b21wICpjb21wLAorCQkJCQkgICAgIHVuc2lnbmVkIGludCBpZHgsCisJCQkJCSAgICAgc3RydWN0
IG10a19wbGFuZV9zdGF0ZSAqc3RhdGUpCit7CisJaWYgKGNvbXAtPmZ1bmNzICYmIGNvbXAtPmZ1
bmNzLT5sYXllcl9jb25maWcpCisJCWNvbXAtPmZ1bmNzLT5sYXllcl9jb25maWcoY29tcCwgaWR4
LCBzdGF0ZSk7Cit9CisKK2ludCBtdGtfZGRwX2NvbXBfZ2V0X2lkKHN0cnVjdCBkZXZpY2Vfbm9k
ZSAqbm9kZSwKKwkJCWVudW0gbXRrX2RkcF9jb21wX3R5cGUgY29tcF90eXBlKTsKK2ludCBtdGtf
ZGRwX2NvbXBfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqY29t
cF9ub2RlLAorCQkgICAgICBzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wLCBlbnVtIG10a19kZHBf
Y29tcF9pZCBjb21wX2lkLAorCQkgICAgICBjb25zdCBzdHJ1Y3QgbXRrX2RkcF9jb21wX2Z1bmNz
ICpmdW5jcyk7CitpbnQgbXRrX2RkcF9jb21wX3JlZ2lzdGVyKHN0cnVjdCBkcm1fZGV2aWNlICpk
cm0sIHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXApOwordm9pZCBtdGtfZGRwX2NvbXBfdW5yZWdp
c3RlcihzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCBzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKTsK
KworI2VuZGlmIC8qIE1US19EUk1fRERQX0NPTVBfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n
cHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv
bXRrX2RybV9kcnYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWEwOWEx
Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2
LmMKQEAgLTAsMCArMSw1NTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgTWVkaWFUZWsg
SW5jLgorICogQXV0aG9yOiBZVCBTSEVOIDx5dC5zaGVuQG1lZGlhdGVrLmNvbT4KKyAqCisgKiBU
aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUg
PGRybS9kcm1QLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWMuaD4KKyNpbmNsdWRlIDxkcm0v
ZHJtX2F0b21pY19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2NydGNfaGVscGVyLmg+Cisj
aW5jbHVkZSA8ZHJtL2RybV9nZW0uaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2dlbV9jbWFfaGVscGVy
Lmg+CisjaW5jbHVkZSA8bGludXgvY29tcG9uZW50Lmg+CisjaW5jbHVkZSA8bGludXgvaW9tbXUu
aD4KKyNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxh
dGZvcm0uaD4KKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CisKKyNpbmNsdWRlICJtdGtf
ZHJtX2NydGMuaCIKKyNpbmNsdWRlICJtdGtfZHJtX2RkcC5oIgorI2luY2x1ZGUgIm10a19kcm1f
ZGRwX2NvbXAuaCIKKyNpbmNsdWRlICJtdGtfZHJtX2Rydi5oIgorI2luY2x1ZGUgIm10a19kcm1f
ZmIuaCIKKyNpbmNsdWRlICJtdGtfZHJtX2dlbS5oIgorCisjZGVmaW5lIERSSVZFUl9OQU1FICJt
ZWRpYXRlayIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgIk1lZGlhdGVrIFNvQyBEUk0iCisjZGVmaW5l
IERSSVZFUl9EQVRFICIyMDE1MDUxMyIKKyNkZWZpbmUgRFJJVkVSX01BSk9SIDEKKyNkZWZpbmUg
RFJJVkVSX01JTk9SIDAKKworc3RhdGljIHZvaWQgbXRrX2F0b21pY19zY2hlZHVsZShzdHJ1Y3Qg
bXRrX2RybV9wcml2YXRlICpwcml2YXRlLAorCQkJCXN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpz
dGF0ZSkKK3sKKwlwcml2YXRlLT5jb21taXQuc3RhdGUgPSBzdGF0ZTsKKwlzY2hlZHVsZV93b3Jr
KCZwcml2YXRlLT5jb21taXQud29yayk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19hdG9taWNfd2Fp
dF9mb3JfZmVuY2VzKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSkKK3sKKwlzdHJ1Y3Qg
ZHJtX3BsYW5lICpwbGFuZTsKKwlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZTsK
KwlpbnQgaTsKKworCWZvcl9lYWNoX3BsYW5lX2luX3N0YXRlKHN0YXRlLCBwbGFuZSwgcGxhbmVf
c3RhdGUsIGkpCisJCW10a19mYl93YWl0KHBsYW5lLT5zdGF0ZS0+ZmIpOworfQorCitzdGF0aWMg
dm9pZCBtdGtfYXRvbWljX2NvbXBsZXRlKHN0cnVjdCBtdGtfZHJtX3ByaXZhdGUgKnByaXZhdGUs
CisJCQkJc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKQoreworCXN0cnVjdCBkcm1fZGV2
aWNlICpkcm0gPSBwcml2YXRlLT5kcm07CisKKwltdGtfYXRvbWljX3dhaXRfZm9yX2ZlbmNlcyhz
dGF0ZSk7CisKKwlkcm1fYXRvbWljX2hlbHBlcl9jb21taXRfbW9kZXNldF9kaXNhYmxlcyhkcm0s
IHN0YXRlKTsKKwlkcm1fYXRvbWljX2hlbHBlcl9jb21taXRfcGxhbmVzKGRybSwgc3RhdGUsIGZh
bHNlKTsKKwlkcm1fYXRvbWljX2hlbHBlcl9jb21taXRfbW9kZXNldF9lbmFibGVzKGRybSwgc3Rh
dGUpOworCWRybV9hdG9taWNfaGVscGVyX3dhaXRfZm9yX3ZibGFua3MoZHJtLCBzdGF0ZSk7CisJ
ZHJtX2F0b21pY19oZWxwZXJfY2xlYW51cF9wbGFuZXMoZHJtLCBzdGF0ZSk7CisJZHJtX2F0b21p
Y19zdGF0ZV9mcmVlKHN0YXRlKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2F0b21pY193b3JrKHN0
cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2
YXRlID0gY29udGFpbmVyX29mKHdvcmssCisJCQlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlLCBjb21t
aXQud29yayk7CisKKwltdGtfYXRvbWljX2NvbXBsZXRlKHByaXZhdGUsIHByaXZhdGUtPmNvbW1p
dC5zdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2F0b21pY19jb21taXQoc3RydWN0IGRybV9k
ZXZpY2UgKmRybSwKKwkJCSAgICAgc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAorCQkJ
ICAgICBib29sIGFzeW5jKQoreworCXN0cnVjdCBtdGtfZHJtX3ByaXZhdGUgKnByaXZhdGUgPSBk
cm0tPmRldl9wcml2YXRlOworCWludCByZXQ7CisKKwlyZXQgPSBkcm1fYXRvbWljX2hlbHBlcl9w
cmVwYXJlX3BsYW5lcyhkcm0sIHN0YXRlKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJ
bXV0ZXhfbG9jaygmcHJpdmF0ZS0+Y29tbWl0LmxvY2spOworCWZsdXNoX3dvcmsoJnByaXZhdGUt
PmNvbW1pdC53b3JrKTsKKworCWRybV9hdG9taWNfaGVscGVyX3N3YXBfc3RhdGUoZHJtLCBzdGF0
ZSk7CisKKwlpZiAoYXN5bmMpCisJCW10a19hdG9taWNfc2NoZWR1bGUocHJpdmF0ZSwgc3RhdGUp
OworCWVsc2UKKwkJbXRrX2F0b21pY19jb21wbGV0ZShwcml2YXRlLCBzdGF0ZSk7CisKKwltdXRl
eF91bmxvY2soJnByaXZhdGUtPmNvbW1pdC5sb2NrKTsKKworCXJldHVybiAwOworfQorCitzdGF0
aWMgY29uc3Qgc3RydWN0IGRybV9tb2RlX2NvbmZpZ19mdW5jcyBtdGtfZHJtX21vZGVfY29uZmln
X2Z1bmNzID0geworCS5mYl9jcmVhdGUgPSBtdGtfZHJtX21vZGVfZmJfY3JlYXRlLAorCS5hdG9t
aWNfY2hlY2sgPSBkcm1fYXRvbWljX2hlbHBlcl9jaGVjaywKKwkuYXRvbWljX2NvbW1pdCA9IG10
a19hdG9taWNfY29tbWl0LAorfTsKKworc3RhdGljIGNvbnN0IGVudW0gbXRrX2RkcF9jb21wX2lk
IG10a19kZHBfbWFpbltdID0geworCUREUF9DT01QT05FTlRfT1ZMMCwKKwlERFBfQ09NUE9ORU5U
X0NPTE9SMCwKKwlERFBfQ09NUE9ORU5UX0FBTCwKKwlERFBfQ09NUE9ORU5UX09ELAorCUREUF9D
T01QT05FTlRfUkRNQTAsCisJRERQX0NPTVBPTkVOVF9VRk9FLAorCUREUF9DT01QT05FTlRfRFNJ
MCwKKwlERFBfQ09NUE9ORU5UX1BXTTAsCit9OworCitzdGF0aWMgY29uc3QgZW51bSBtdGtfZGRw
X2NvbXBfaWQgbXRrX2RkcF9leHRbXSA9IHsKKwlERFBfQ09NUE9ORU5UX09WTDEsCisJRERQX0NP
TVBPTkVOVF9DT0xPUjEsCisJRERQX0NPTVBPTkVOVF9HQU1NQSwKKwlERFBfQ09NUE9ORU5UX1JE
TUExLAorCUREUF9DT01QT05FTlRfRFBJMCwKK307CisKK3N0YXRpYyBpbnQgbXRrX2RybV9rbXNf
aW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKQoreworCXN0cnVjdCBtdGtfZHJtX3ByaXZhdGUg
KnByaXZhdGUgPSBkcm0tPmRldl9wcml2YXRlOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBk
ZXY7CisJc3RydWN0IGRldmljZV9ub2RlICpucDsKKwlpbnQgcmV0OworCisJaWYgKCFpb21tdV9w
cmVzZW50KCZwbGF0Zm9ybV9idXNfdHlwZSkpCisJCXJldHVybiAtRVBST0JFX0RFRkVSOworCisJ
cGRldiA9IG9mX2ZpbmRfZGV2aWNlX2J5X25vZGUocHJpdmF0ZS0+bXV0ZXhfbm9kZSk7CisJaWYg
KCFwZGV2KSB7CisJCWRldl9lcnIoZHJtLT5kZXYsICJXYWl0aW5nIGZvciBkaXNwLW11dGV4IGRl
dmljZSAlc1xuIiwKKwkJCXByaXZhdGUtPm11dGV4X25vZGUtPmZ1bGxfbmFtZSk7CisJCW9mX25v
ZGVfcHV0KHByaXZhdGUtPm11dGV4X25vZGUpOworCQlyZXR1cm4gLUVQUk9CRV9ERUZFUjsKKwl9
CisJcHJpdmF0ZS0+bXV0ZXhfZGV2ID0gJnBkZXYtPmRldjsKKworCWRybV9tb2RlX2NvbmZpZ19p
bml0KGRybSk7CisKKwlkcm0tPm1vZGVfY29uZmlnLm1pbl93aWR0aCA9IDY0OworCWRybS0+bW9k
ZV9jb25maWcubWluX2hlaWdodCA9IDY0OworCisJLyoKKwkgKiBzZXQgbWF4IHdpZHRoIGFuZCBo
ZWlnaHQgYXMgZGVmYXVsdCB2YWx1ZSg0MDk2eDQwOTYpLgorCSAqIHRoaXMgdmFsdWUgd291bGQg
YmUgdXNlZCB0byBjaGVjayBmcmFtZWJ1ZmZlciBzaXplIGxpbWl0YXRpb24KKwkgKiBhdCBkcm1f
bW9kZV9hZGRmYigpLgorCSAqLworCWRybS0+bW9kZV9jb25maWcubWF4X3dpZHRoID0gNDA5NjsK
Kwlkcm0tPm1vZGVfY29uZmlnLm1heF9oZWlnaHQgPSA0MDk2OworCWRybS0+bW9kZV9jb25maWcu
ZnVuY3MgPSAmbXRrX2RybV9tb2RlX2NvbmZpZ19mdW5jczsKKworCXJldCA9IGNvbXBvbmVudF9i
aW5kX2FsbChkcm0tPmRldiwgZHJtKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9jb25maWdfY2xl
YW51cDsKKworCS8qCisJICogV2UgY3VycmVudGx5IHN1cHBvcnQgdHdvIGZpeGVkIGRhdGEgc3Ry
ZWFtcywgZWFjaCBvcHRpb25hbCwKKwkgKiBhbmQgZWFjaCBzdGF0aWNhbGx5IGFzc2lnbmVkIHRv
IGEgY3J0YzoKKwkgKiBPVkwwIC0+IENPTE9SMCAtPiBBQUwgLT4gT0QgLT4gUkRNQTAgLT4gVUZP
RSAtPiBEU0kwIC4uLgorCSAqLworCXJldCA9IG10a19kcm1fY3J0Y19jcmVhdGUoZHJtLCBtdGtf
ZGRwX21haW4sIEFSUkFZX1NJWkUobXRrX2RkcF9tYWluKSk7CisJaWYgKHJldCA8IDApCisJCWdv
dG8gZXJyX2NvbXBvbmVudF91bmJpbmQ7CisJLyogLi4uIGFuZCBPVkwxIC0+IENPTE9SMSAtPiBH
QU1NQSAtPiBSRE1BMSAtPiBEUEkwLiAqLworCXJldCA9IG10a19kcm1fY3J0Y19jcmVhdGUoZHJt
LCBtdGtfZGRwX2V4dCwgQVJSQVlfU0laRShtdGtfZGRwX2V4dCkpOworCWlmIChyZXQgPCAwKQor
CQlnb3RvIGVycl9jb21wb25lbnRfdW5iaW5kOworCisJLyogVXNlIE9WTCBkZXZpY2UgZm9yIGFs
bCBETUEgbWVtb3J5IGFsbG9jYXRpb25zICovCisJbnAgPSBwcml2YXRlLT5jb21wX25vZGVbbXRr
X2RkcF9tYWluWzBdXSA/OgorCSAgICAgcHJpdmF0ZS0+Y29tcF9ub2RlW210a19kZHBfZXh0WzBd
XTsKKwlwZGV2ID0gb2ZfZmluZF9kZXZpY2VfYnlfbm9kZShucCk7CisJaWYgKCFwZGV2KSB7CisJ
CXJldCA9IC1FTk9ERVY7CisJCWRldl9lcnIoZHJtLT5kZXYsICJOZWVkIGF0IGxlYXN0IG9uZSBP
VkwgZGV2aWNlXG4iKTsKKwkJZ290byBlcnJfY29tcG9uZW50X3VuYmluZDsKKwl9CisKKwlwcml2
YXRlLT5kbWFfZGV2ID0gJnBkZXYtPmRldjsKKworCS8qCisJICogV2UgZG9uJ3QgdXNlIHRoZSBk
cm1faXJxX2luc3RhbGwoKSBoZWxwZXJzIHByb3ZpZGVkIGJ5IHRoZSBEUk0KKwkgKiBjb3JlLCBz
byB3ZSBuZWVkIHRvIHNldCB0aGlzIG1hbnVhbGx5IGluIG9yZGVyIHRvIGFsbG93IHRoZQorCSAq
IERSTV9JT0NUTF9XQUlUX1ZCTEFOSyB0byBvcGVyYXRlIGNvcnJlY3RseS4KKwkgKi8KKwlkcm0t
PmlycV9lbmFibGVkID0gdHJ1ZTsKKwlyZXQgPSBkcm1fdmJsYW5rX2luaXQoZHJtLCBNQVhfQ1JU
Qyk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyX2NvbXBvbmVudF91bmJpbmQ7CisKKwlkcm1f
a21zX2hlbHBlcl9wb2xsX2luaXQoZHJtKTsKKwlkcm1fbW9kZV9jb25maWdfcmVzZXQoZHJtKTsK
KworCXJldHVybiAwOworCitlcnJfY29tcG9uZW50X3VuYmluZDoKKwljb21wb25lbnRfdW5iaW5k
X2FsbChkcm0tPmRldiwgZHJtKTsKK2Vycl9jb25maWdfY2xlYW51cDoKKwlkcm1fbW9kZV9jb25m
aWdfY2xlYW51cChkcm0pOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgbXRrX2Ry
bV9rbXNfZGVpbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pCit7CisJZHJtX2ttc19oZWxwZXJf
cG9sbF9maW5pKGRybSk7CisKKwlkcm1fdmJsYW5rX2NsZWFudXAoZHJtKTsKKwljb21wb25lbnRf
dW5iaW5kX2FsbChkcm0tPmRldiwgZHJtKTsKKwlkcm1fbW9kZV9jb25maWdfY2xlYW51cChkcm0p
OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtdGtfZHJtX2ZvcHMg
PSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm9wZW4gPSBkcm1fb3BlbiwKKwkucmVsZWFz
ZSA9IGRybV9yZWxlYXNlLAorCS51bmxvY2tlZF9pb2N0bCA9IGRybV9pb2N0bCwKKwkubW1hcCA9
IG10a19kcm1fZ2VtX21tYXAsCisJLnBvbGwgPSBkcm1fcG9sbCwKKwkucmVhZCA9IGRybV9yZWFk
LAorI2lmZGVmIENPTkZJR19DT01QQVQKKwkuY29tcGF0X2lvY3RsID0gZHJtX2NvbXBhdF9pb2N0
bCwKKyNlbmRpZgorfTsKKworc3RhdGljIHN0cnVjdCBkcm1fZHJpdmVyIG10a19kcm1fZHJpdmVy
ID0geworCS5kcml2ZXJfZmVhdHVyZXMgPSBEUklWRVJfTU9ERVNFVCB8IERSSVZFUl9HRU0gfCBE
UklWRVJfUFJJTUUgfAorCQkJICAgRFJJVkVSX0FUT01JQywKKworCS5nZXRfdmJsYW5rX2NvdW50
ZXIgPSBkcm1fdmJsYW5rX2NvdW50LAorCS5lbmFibGVfdmJsYW5rID0gbXRrX2RybV9jcnRjX2Vu
YWJsZV92YmxhbmssCisJLmRpc2FibGVfdmJsYW5rID0gbXRrX2RybV9jcnRjX2Rpc2FibGVfdmJs
YW5rLAorCisJLmdlbV9mcmVlX29iamVjdCA9IG10a19kcm1fZ2VtX2ZyZWVfb2JqZWN0LAorCS5n
ZW1fdm1fb3BzID0gJmRybV9nZW1fY21hX3ZtX29wcywKKwkuZHVtYl9jcmVhdGUgPSBtdGtfZHJt
X2dlbV9kdW1iX2NyZWF0ZSwKKwkuZHVtYl9tYXBfb2Zmc2V0ID0gbXRrX2RybV9nZW1fZHVtYl9t
YXBfb2Zmc2V0LAorCS5kdW1iX2Rlc3Ryb3kgPSBkcm1fZ2VtX2R1bWJfZGVzdHJveSwKKworCS5w
cmltZV9oYW5kbGVfdG9fZmQgPSBkcm1fZ2VtX3ByaW1lX2hhbmRsZV90b19mZCwKKwkucHJpbWVf
ZmRfdG9faGFuZGxlID0gZHJtX2dlbV9wcmltZV9mZF90b19oYW5kbGUsCisJLmdlbV9wcmltZV9l
eHBvcnQgPSBkcm1fZ2VtX3ByaW1lX2V4cG9ydCwKKwkuZ2VtX3ByaW1lX2ltcG9ydCA9IGRybV9n
ZW1fcHJpbWVfaW1wb3J0LAorCS5nZW1fcHJpbWVfZ2V0X3NnX3RhYmxlID0gbXRrX2dlbV9wcmlt
ZV9nZXRfc2dfdGFibGUsCisJLmdlbV9wcmltZV9pbXBvcnRfc2dfdGFibGUgPSBtdGtfZ2VtX3By
aW1lX2ltcG9ydF9zZ190YWJsZSwKKwkuZ2VtX3ByaW1lX21tYXAgPSBtdGtfZHJtX2dlbV9tbWFw
X2J1ZiwKKwkuZm9wcyA9ICZtdGtfZHJtX2ZvcHMsCisKKwkubmFtZSA9IERSSVZFUl9OQU1FLAor
CS5kZXNjID0gRFJJVkVSX0RFU0MsCisJLmRhdGUgPSBEUklWRVJfREFURSwKKwkubWFqb3IgPSBE
UklWRVJfTUFKT1IsCisJLm1pbm9yID0gRFJJVkVSX01JTk9SLAorfTsKKworc3RhdGljIGludCBj
b21wYXJlX29mKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKK3sKKwlyZXR1cm4gZGV2
LT5vZl9ub2RlID09IGRhdGE7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2RybV9iaW5kKHN0cnVjdCBk
ZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2YXRlID0gZGV2X2dl
dF9kcnZkYXRhKGRldik7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybTsKKwlpbnQgcmV0OworCisJ
ZHJtID0gZHJtX2Rldl9hbGxvYygmbXRrX2RybV9kcml2ZXIsIGRldik7CisJaWYgKCFkcm0pCisJ
CXJldHVybiAtRU5PTUVNOworCisJZHJtX2Rldl9zZXRfdW5pcXVlKGRybSwgZGV2X25hbWUoZGV2
KSk7CisKKwlyZXQgPSBkcm1fZGV2X3JlZ2lzdGVyKGRybSwgMCk7CisJaWYgKHJldCA8IDApCisJ
CWdvdG8gZXJyX2ZyZWU7CisKKwlkcm0tPmRldl9wcml2YXRlID0gcHJpdmF0ZTsKKwlwcml2YXRl
LT5kcm0gPSBkcm07CisKKwlyZXQgPSBtdGtfZHJtX2ttc19pbml0KGRybSk7CisJaWYgKHJldCA8
IDApCisJCWdvdG8gZXJyX3VucmVnaXN0ZXI7CisKKwlyZXR1cm4gMDsKKworZXJyX3VucmVnaXN0
ZXI6CisJZHJtX2Rldl91bnJlZ2lzdGVyKGRybSk7CitlcnJfZnJlZToKKwlkcm1fZGV2X3VucmVm
KGRybSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgbXRrX2RybV91bmJpbmQoc3Ry
dWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBtdGtfZHJtX3ByaXZhdGUgKnByaXZhdGUgPSBk
ZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWRybV9wdXRfZGV2KHByaXZhdGUtPmRybSk7CisJcHJp
dmF0ZS0+ZHJtID0gTlVMTDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21wb25lbnRfbWFz
dGVyX29wcyBtdGtfZHJtX29wcyA9IHsKKwkuYmluZAkJPSBtdGtfZHJtX2JpbmQsCisJLnVuYmlu
ZAkJPSBtdGtfZHJtX3VuYmluZCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNl
X2lkIG10a19kZHBfY29tcF9kdF9pZHNbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVr
LG10ODE3My1kaXNwLW92bCIsICAgLmRhdGEgPSAodm9pZCAqKU1US19ESVNQX09WTCB9LAorCXsg
LmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ4MTczLWRpc3AtcmRtYSIsICAuZGF0YSA9ICh2b2lk
ICopTVRLX0RJU1BfUkRNQSB9LAorCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ4MTczLWRp
c3Atd2RtYSIsICAuZGF0YSA9ICh2b2lkICopTVRLX0RJU1BfV0RNQSB9LAorCXsgLmNvbXBhdGli
bGUgPSAibWVkaWF0ZWssbXQ4MTczLWRpc3AtY29sb3IiLCAuZGF0YSA9ICh2b2lkICopTVRLX0RJ
U1BfQ09MT1IgfSwKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1kaXNwLWFhbCIs
ICAgLmRhdGEgPSAodm9pZCAqKU1US19ESVNQX0FBTH0sCisJeyAuY29tcGF0aWJsZSA9ICJtZWRp
YXRlayxtdDgxNzMtZGlzcC1nYW1tYSIsIC5kYXRhID0gKHZvaWQgKilNVEtfRElTUF9HQU1NQSwg
fSwKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1kaXNwLXVmb2UiLCAgLmRhdGEg
PSAodm9pZCAqKU1US19ESVNQX1VGT0UgfSwKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10
ODE3My1kc2kiLCAgICAgICAgLmRhdGEgPSAodm9pZCAqKU1US19EU0kgfSwKKwl7IC5jb21wYXRp
YmxlID0gIm1lZGlhdGVrLG10ODE3My1kcGkiLCAgICAgICAgLmRhdGEgPSAodm9pZCAqKU1US19E
UEkgfSwKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1kaXNwLW11dGV4IiwgLmRh
dGEgPSAodm9pZCAqKU1US19ESVNQX01VVEVYIH0sCisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRl
ayxtdDgxNzMtZGlzcC1wd20iLCAgIC5kYXRhID0gKHZvaWQgKilNVEtfRElTUF9QV00gfSwKKwl7
IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1kaXNwLW9kIiwgICAgLmRhdGEgPSAodm9p
ZCAqKU1US19ESVNQX09EIH0sCisJeyB9Cit9OworCitzdGF0aWMgaW50IG10a19kcm1fcHJvYmUo
c3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAm
cGRldi0+ZGV2OworCXN0cnVjdCBtdGtfZHJtX3ByaXZhdGUgKnByaXZhdGU7CisJc3RydWN0IHJl
c291cmNlICptZW07CisJc3RydWN0IGRldmljZV9ub2RlICpub2RlOworCXN0cnVjdCBjb21wb25l
bnRfbWF0Y2ggKm1hdGNoID0gTlVMTDsKKwlpbnQgcmV0OworCWludCBpOworCisJcHJpdmF0ZSA9
IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdmF0ZSksIEdGUF9LRVJORUwpOworCWlmICgh
cHJpdmF0ZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltdXRleF9pbml0KCZwcml2YXRlLT5jb21t
aXQubG9jayk7CisJSU5JVF9XT1JLKCZwcml2YXRlLT5jb21taXQud29yaywgbXRrX2F0b21pY193
b3JrKTsKKworCW1lbSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01F
TSwgMCk7CisJcHJpdmF0ZS0+Y29uZmlnX3JlZ3MgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2
LCBtZW0pOworCWlmIChJU19FUlIocHJpdmF0ZS0+Y29uZmlnX3JlZ3MpKSB7CisJCXJldCA9IFBU
Ul9FUlIocHJpdmF0ZS0+Y29uZmlnX3JlZ3MpOworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBp
b3JlbWFwIG1tc3lzLWNvbmZpZyByZXNvdXJjZTogJWRcbiIsCisJCQlyZXQpOworCQlyZXR1cm4g
cmV0OworCX0KKworCS8qIEl0ZXJhdGUgb3ZlciBzaWJsaW5nIERJU1AgZnVuY3Rpb24gYmxvY2tz
ICovCisJZm9yX2VhY2hfY2hpbGRfb2Zfbm9kZShkZXYtPm9mX25vZGUtPnBhcmVudCwgbm9kZSkg
eworCQljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICpvZl9pZDsKKwkJZW51bSBtdGtfZGRwX2Nv
bXBfdHlwZSBjb21wX3R5cGU7CisJCWludCBjb21wX2lkOworCisJCW9mX2lkID0gb2ZfbWF0Y2hf
bm9kZShtdGtfZGRwX2NvbXBfZHRfaWRzLCBub2RlKTsKKwkJaWYgKCFvZl9pZCkKKwkJCWNvbnRp
bnVlOworCisJCWlmICghb2ZfZGV2aWNlX2lzX2F2YWlsYWJsZShub2RlKSkgeworCQkJZGV2X2Ri
ZyhkZXYsICJTa2lwcGluZyBkaXNhYmxlZCBjb21wb25lbnQgJXNcbiIsCisJCQkJbm9kZS0+ZnVs
bF9uYW1lKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJY29tcF90eXBlID0gKGVudW0gbXRrX2Rk
cF9jb21wX3R5cGUpb2ZfaWQtPmRhdGE7CisKKwkJaWYgKGNvbXBfdHlwZSA9PSBNVEtfRElTUF9N
VVRFWCkgeworCQkJcHJpdmF0ZS0+bXV0ZXhfbm9kZSA9IG9mX25vZGVfZ2V0KG5vZGUpOworCQkJ
Y29udGludWU7CisJCX0KKworCQljb21wX2lkID0gbXRrX2RkcF9jb21wX2dldF9pZChub2RlLCBj
b21wX3R5cGUpOworCQlpZiAoY29tcF9pZCA8IDApIHsKKwkJCWRldl93YXJuKGRldiwgIlNraXBw
aW5nIHVua25vd24gY29tcG9uZW50ICVzXG4iLAorCQkJCSBub2RlLT5mdWxsX25hbWUpOworCQkJ
Y29udGludWU7CisJCX0KKworCQlwcml2YXRlLT5jb21wX25vZGVbY29tcF9pZF0gPSBvZl9ub2Rl
X2dldChub2RlKTsKKworCQkvKgorCQkgKiBDdXJyZW50bHkgb25seSB0aGUgT1ZMLCBSRE1BLCBE
U0ksIGFuZCBEUEkgYmxvY2tzIGhhdmUKKwkJICogc2VwYXJhdGUgY29tcG9uZW50IHBsYXRmb3Jt
IGRyaXZlcnMgYW5kIGluaXRpYWxpemUgdGhlaXIgb3duCisJCSAqIEREUCBjb21wb25lbnQgc3Ry
dWN0dXJlLiBUaGUgb3RoZXJzIGFyZSBpbml0aWFsaXplZCBoZXJlLgorCQkgKi8KKwkJaWYgKGNv
bXBfdHlwZSA9PSBNVEtfRElTUF9PVkwgfHwKKwkJICAgIGNvbXBfdHlwZSA9PSBNVEtfRElTUF9S
RE1BIHx8CisJCSAgICBjb21wX3R5cGUgPT0gTVRLX0RTSSB8fAorCQkgICAgY29tcF90eXBlID09
IE1US19EUEkpIHsKKwkJCWRldl9pbmZvKGRldiwgIkFkZGluZyBjb21wb25lbnQgbWF0Y2ggZm9y
ICVzXG4iLAorCQkJCSBub2RlLT5mdWxsX25hbWUpOworCQkJY29tcG9uZW50X21hdGNoX2FkZChk
ZXYsICZtYXRjaCwgY29tcGFyZV9vZiwgbm9kZSk7CisJCX0gZWxzZSB7CisJCQlzdHJ1Y3QgbXRr
X2RkcF9jb21wICpjb21wOworCisJCQljb21wID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpj
b21wKSwgR0ZQX0tFUk5FTCk7CisJCQlpZiAoIWNvbXApIHsKKwkJCQlyZXQgPSAtRU5PTUVNOwor
CQkJCWdvdG8gZXJyX25vZGU7CisJCQl9CisKKwkJCXJldCA9IG10a19kZHBfY29tcF9pbml0KGRl
diwgbm9kZSwgY29tcCwgY29tcF9pZCwgTlVMTCk7CisJCQlpZiAocmV0KQorCQkJCWdvdG8gZXJy
X25vZGU7CisKKwkJCXByaXZhdGUtPmRkcF9jb21wW2NvbXBfaWRdID0gY29tcDsKKwkJfQorCX0K
KworCWlmICghcHJpdmF0ZS0+bXV0ZXhfbm9kZSkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0
byBmaW5kIGRpc3AtbXV0ZXggbm9kZVxuIik7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZXJy
X25vZGU7CisJfQorCisJcG1fcnVudGltZV9lbmFibGUoZGV2KTsKKworCXBsYXRmb3JtX3NldF9k
cnZkYXRhKHBkZXYsIHByaXZhdGUpOworCisJcmV0ID0gY29tcG9uZW50X21hc3Rlcl9hZGRfd2l0
aF9tYXRjaChkZXYsICZtdGtfZHJtX29wcywgbWF0Y2gpOworCWlmIChyZXQpCisJCWdvdG8gZXJy
X3BtOworCisJcmV0dXJuIDA7CisKK2Vycl9wbToKKwlwbV9ydW50aW1lX2Rpc2FibGUoZGV2KTsK
K2Vycl9ub2RlOgorCW9mX25vZGVfcHV0KHByaXZhdGUtPm11dGV4X25vZGUpOworCWZvciAoaSA9
IDA7IGkgPCBERFBfQ09NUE9ORU5UX0lEX01BWDsgaSsrKQorCQlvZl9ub2RlX3B1dChwcml2YXRl
LT5jb21wX25vZGVbaV0pOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2RybV9y
ZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgbXRrX2RybV9w
cml2YXRlICpwcml2YXRlID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGRy
bV9kZXZpY2UgKmRybSA9IHByaXZhdGUtPmRybTsKKwlpbnQgaTsKKworCWRybV9jb25uZWN0b3Jf
dW5yZWdpc3Rlcl9hbGwoZHJtKTsKKwlkcm1fZGV2X3VucmVnaXN0ZXIoZHJtKTsKKwltdGtfZHJt
X2ttc19kZWluaXQoZHJtKTsKKwlkcm1fZGV2X3VucmVmKGRybSk7CisKKwljb21wb25lbnRfbWFz
dGVyX2RlbCgmcGRldi0+ZGV2LCAmbXRrX2RybV9vcHMpOworCXBtX3J1bnRpbWVfZGlzYWJsZSgm
cGRldi0+ZGV2KTsKKwlvZl9ub2RlX3B1dChwcml2YXRlLT5tdXRleF9ub2RlKTsKKwlmb3IgKGkg
PSAwOyBpIDwgRERQX0NPTVBPTkVOVF9JRF9NQVg7IGkrKykKKwkJb2Zfbm9kZV9wdXQocHJpdmF0
ZS0+Y29tcF9ub2RlW2ldKTsKKworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1BNX1NM
RUVQCitzdGF0aWMgaW50IG10a19kcm1fc3lzX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQor
eworCXN0cnVjdCBtdGtfZHJtX3ByaXZhdGUgKnByaXZhdGUgPSBkZXZfZ2V0X2RydmRhdGEoZGV2
KTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0gcHJpdmF0ZS0+ZHJtOworCisJZHJtX2ttc19o
ZWxwZXJfcG9sbF9kaXNhYmxlKGRybSk7CisKKwlwcml2YXRlLT5zdXNwZW5kX3N0YXRlID0gZHJt
X2F0b21pY19oZWxwZXJfc3VzcGVuZChkcm0pOworCWlmIChJU19FUlIocHJpdmF0ZS0+c3VzcGVu
ZF9zdGF0ZSkpIHsKKwkJZHJtX2ttc19oZWxwZXJfcG9sbF9lbmFibGUoZHJtKTsKKwkJcmV0dXJu
IFBUUl9FUlIocHJpdmF0ZS0+c3VzcGVuZF9zdGF0ZSk7CisJfQorCisJRFJNX0RFQlVHX0RSSVZF
UigibXRrX2RybV9zeXNfc3VzcGVuZFxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQg
bXRrX2RybV9zeXNfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbXRrX2Ry
bV9wcml2YXRlICpwcml2YXRlID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGRybV9k
ZXZpY2UgKmRybSA9IHByaXZhdGUtPmRybTsKKworCWRybV9hdG9taWNfaGVscGVyX3Jlc3VtZShk
cm0sIHByaXZhdGUtPnN1c3BlbmRfc3RhdGUpOworCWRybV9rbXNfaGVscGVyX3BvbGxfZW5hYmxl
KGRybSk7CisKKwlEUk1fREVCVUdfRFJJVkVSKCJtdGtfZHJtX3N5c19yZXN1bWVcbiIpOworCXJl
dHVybiAwOworfQorI2VuZGlmCisKK3N0YXRpYyBTSU1QTEVfREVWX1BNX09QUyhtdGtfZHJtX3Bt
X29wcywgbXRrX2RybV9zeXNfc3VzcGVuZCwKKwkJCSBtdGtfZHJtX3N5c19yZXN1bWUpOworCitz
dGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtdGtfZHJtX29mX2lkc1tdID0geworCXsg
LmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ4MTczLW1tc3lzIiwgfSwKKwl7IH0KK307CisKK3N0
YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10a19kcm1fcGxhdGZvcm1fZHJpdmVyID0gewor
CS5wcm9iZQk9IG10a19kcm1fcHJvYmUsCisJLnJlbW92ZQk9IG10a19kcm1fcmVtb3ZlLAorCS5k
cml2ZXIJPSB7CisJCS5uYW1lCT0gIm1lZGlhdGVrLWRybSIsCisJCS5vZl9tYXRjaF90YWJsZSA9
IG10a19kcm1fb2ZfaWRzLAorCQkucG0gICAgID0gJm10a19kcm1fcG1fb3BzLAorCX0sCit9Owor
CitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciAqIGNvbnN0IG10a19kcm1fZHJpdmVyc1td
ID0geworCSZtdGtfZHJtX3BsYXRmb3JtX2RyaXZlciwKKwkmbXRrX2RkcF9kcml2ZXIsCisJJm10
a19kaXNwX292bF9kcml2ZXIsCisJJm10a19kaXNwX3JkbWFfZHJpdmVyLAorfTsKKworc3RhdGlj
IGludCBfX2luaXQgbXRrX2RybV9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKwlpbnQgaTsKKwor
CWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG10a19kcm1fZHJpdmVycyk7IGkrKykgeworCQly
ZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIobXRrX2RybV9kcml2ZXJzW2ldKTsKKwkJaWYg
KHJldCA8IDApIHsKKwkJCXByX2VycigiRmFpbGVkIHRvIHJlZ2lzdGVyICVzIGRyaXZlcjogJWRc
biIsCisJCQkgICAgICAgbXRrX2RybV9kcml2ZXJzW2ldLT5kcml2ZXIubmFtZSwgcmV0KTsKKwkJ
CWdvdG8gZXJyOworCQl9CisJfQorCisJcmV0dXJuIDA7CisKK2VycjoKKwl3aGlsZSAoLS1pID49
IDApCisJCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKG10a19kcm1fZHJpdmVyc1tpXSk7CisK
KwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgbXRrX2RybV9leGl0KHZvaWQp
Cit7CisJaW50IGk7CisKKwlmb3IgKGkgPSBBUlJBWV9TSVpFKG10a19kcm1fZHJpdmVycykgLSAx
OyBpID49IDA7IGktLSkKKwkJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIobXRrX2RybV9kcml2
ZXJzW2ldKTsKK30KKworbW9kdWxlX2luaXQobXRrX2RybV9pbml0KTsKK21vZHVsZV9leGl0KG10
a19kcm1fZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIllUIFNIRU4gPHl0LnNoZW5AbWVkaWF0ZWsu
Y29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJNZWRpYXRlayBTb0MgRFJNIGRyaXZlciIpOwor
TU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21l
ZGlhdGVrL210a19kcm1fZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9k
cnYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yN2RjOGZhCi0tLSAvZGV2
L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmgKQEAgLTAs
MCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMuCisgKgor
ICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBH
TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5k
ZWYgTVRLX0RSTV9EUlZfSAorI2RlZmluZSBNVEtfRFJNX0RSVl9ICisKKyNpbmNsdWRlIDxsaW51
eC9pby5oPgorI2luY2x1ZGUgIm10a19kcm1fZGRwX2NvbXAuaCIKKworI2RlZmluZSBNQVhfQ1JU
QwkyCisjZGVmaW5lIE1BWF9DT05ORUNUT1IJMgorCitzdHJ1Y3QgZGV2aWNlOworc3RydWN0IGRl
dmljZV9ub2RlOworc3RydWN0IGRybV9jcnRjOworc3RydWN0IGRybV9kZXZpY2U7CitzdHJ1Y3Qg
ZHJtX2ZiX2hlbHBlcjsKK3N0cnVjdCBkcm1fcHJvcGVydHk7CitzdHJ1Y3QgcmVnbWFwOworCitz
dHJ1Y3QgbXRrX2RybV9wcml2YXRlIHsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtOworCXN0cnVj
dCBkZXZpY2UgKmRtYV9kZXY7CisKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGNbTUFYX0NSVENdOwor
CXVuc2lnbmVkIGludCBudW1fcGlwZXM7CisKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm11dGV4X25v
ZGU7CisJc3RydWN0IGRldmljZSAqbXV0ZXhfZGV2OworCXZvaWQgX19pb21lbSAqY29uZmlnX3Jl
Z3M7CisJc3RydWN0IGRldmljZV9ub2RlICpjb21wX25vZGVbRERQX0NPTVBPTkVOVF9JRF9NQVhd
OworCXN0cnVjdCBtdGtfZGRwX2NvbXAgKmRkcF9jb21wW0REUF9DT01QT05FTlRfSURfTUFYXTsK
KworCXN0cnVjdCB7CisJCXN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZTsKKwkJc3RydWN0
IHdvcmtfc3RydWN0IHdvcms7CisJCXN0cnVjdCBtdXRleCBsb2NrOworCX0gY29tbWl0OworCisJ
c3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN1c3BlbmRfc3RhdGU7Cit9OworCitleHRlcm4gc3Ry
dWN0IHBsYXRmb3JtX2RyaXZlciBtdGtfZGRwX2RyaXZlcjsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZv
cm1fZHJpdmVyIG10a19kaXNwX292bF9kcml2ZXI7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2Ry
aXZlciBtdGtfZGlzcF9yZG1hX2RyaXZlcjsKKworI2VuZGlmIC8qIE1US19EUk1fRFJWX0ggKi8K
ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2ZiLmMgYi9kcml2
ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9mYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjMzZDMwYzEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0v
bWVkaWF0ZWsvbXRrX2RybV9mYi5jCkBAIC0wLDAgKzEsMTY1IEBACisvKgorICogQ29weXJpZ2h0
IChjKSAyMDE1IE1lZGlhVGVrIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMK
KyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRo
aXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVkZSA8
ZHJtL2RybV9jcnRjX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fZmJfaGVscGVyLmg+Cisj
aW5jbHVkZSA8ZHJtL2RybV9nZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtYnVmLmg+CisjaW5j
bHVkZSA8bGludXgvcmVzZXJ2YXRpb24uaD4KKworI2luY2x1ZGUgIm10a19kcm1fZHJ2LmgiCisj
aW5jbHVkZSAibXRrX2RybV9mYi5oIgorI2luY2x1ZGUgIm10a19kcm1fZ2VtLmgiCisKKy8qCisg
KiBtdGsgc3BlY2lmaWMgZnJhbWVidWZmZXIgc3RydWN0dXJlLgorICoKKyAqIEBmYjogZHJtIGZy
YW1lYnVmZmVyIG9iamVjdC4KKyAqIEBnZW1fb2JqOiBhcnJheSBvZiBnZW0gb2JqZWN0cy4KKyAq
Lworc3RydWN0IG10a19kcm1fZmIgeworCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIJYmFzZTsKKwkv
KiBGb3Igbm93IHdlIG9ubHkgc3VwcG9ydCBhIHNpbmdsZSBwbGFuZSAqLworCXN0cnVjdCBkcm1f
Z2VtX29iamVjdAkqZ2VtX29iajsKK307CisKKyNkZWZpbmUgdG9fbXRrX2ZiKHgpIGNvbnRhaW5l
cl9vZih4LCBzdHJ1Y3QgbXRrX2RybV9mYiwgYmFzZSkKKworc3RydWN0IGRybV9nZW1fb2JqZWN0
ICptdGtfZmJfZ2V0X2dlbV9vYmooc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIpCit7CisJc3Ry
dWN0IG10a19kcm1fZmIgKm10a19mYiA9IHRvX210a19mYihmYik7CisKKwlyZXR1cm4gbXRrX2Zi
LT5nZW1fb2JqOworfQorCitzdGF0aWMgaW50IG10a19kcm1fZmJfY3JlYXRlX2hhbmRsZShzdHJ1
Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKKwkJCQkgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3By
aXYsCisJCQkJICAgIHVuc2lnbmVkIGludCAqaGFuZGxlKQoreworCXN0cnVjdCBtdGtfZHJtX2Zi
ICptdGtfZmIgPSB0b19tdGtfZmIoZmIpOworCisJcmV0dXJuIGRybV9nZW1faGFuZGxlX2NyZWF0
ZShmaWxlX3ByaXYsIG10a19mYi0+Z2VtX29iaiwgaGFuZGxlKTsKK30KKworc3RhdGljIHZvaWQg
bXRrX2RybV9mYl9kZXN0cm95KHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiKQoreworCXN0cnVj
dCBtdGtfZHJtX2ZiICptdGtfZmIgPSB0b19tdGtfZmIoZmIpOworCisJZHJtX2ZyYW1lYnVmZmVy
X2NsZWFudXAoZmIpOworCisJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQobXRr
X2ZiLT5nZW1fb2JqKTsKKworCWtmcmVlKG10a19mYik7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1
Y3QgZHJtX2ZyYW1lYnVmZmVyX2Z1bmNzIG10a19kcm1fZmJfZnVuY3MgPSB7CisJLmNyZWF0ZV9o
YW5kbGUgPSBtdGtfZHJtX2ZiX2NyZWF0ZV9oYW5kbGUsCisJLmRlc3Ryb3kgPSBtdGtfZHJtX2Zi
X2Rlc3Ryb3ksCit9OworCitzdGF0aWMgc3RydWN0IG10a19kcm1fZmIgKm10a19kcm1fZnJhbWVi
dWZmZXJfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCQljb25zdCBzdHJ1Y3QgZHJt
X21vZGVfZmJfY21kMiAqbW9kZSwKKwkJCQkJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCit7
CisJc3RydWN0IG10a19kcm1fZmIgKm10a19mYjsKKwlpbnQgcmV0OworCisJaWYgKGRybV9mb3Jt
YXRfbnVtX3BsYW5lcyhtb2RlLT5waXhlbF9mb3JtYXQpICE9IDEpCisJCXJldHVybiBFUlJfUFRS
KC1FSU5WQUwpOworCisJbXRrX2ZiID0ga3phbGxvYyhzaXplb2YoKm10a19mYiksIEdGUF9LRVJO
RUwpOworCWlmICghbXRrX2ZiKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCWRybV9o
ZWxwZXJfbW9kZV9maWxsX2ZiX3N0cnVjdCgmbXRrX2ZiLT5iYXNlLCBtb2RlKTsKKworCW10a19m
Yi0+Z2VtX29iaiA9IG9iajsKKworCXJldCA9IGRybV9mcmFtZWJ1ZmZlcl9pbml0KGRldiwgJm10
a19mYi0+YmFzZSwgJm10a19kcm1fZmJfZnVuY3MpOworCWlmIChyZXQpIHsKKwkJRFJNX0VSUk9S
KCJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBmcmFtZWJ1ZmZlclxuIik7CisJCWtmcmVlKG10a19mYik7
CisJCXJldHVybiBFUlJfUFRSKHJldCk7CisJfQorCisJcmV0dXJuIG10a19mYjsKK30KKworLyoK
KyAqIFdhaXQgZm9yIGFueSBleGNsdXNpdmUgZmVuY2UgaW4gZmIncyBnZW0gb2JqZWN0J3MgcmVz
ZXJ2YXRpb24gb2JqZWN0LgorICoKKyAqIFJldHVybnMgLUVSRVNUQVJUU1lTIGlmIGludGVycnVw
dGVkLCBlbHNlIDAuCisgKi8KK2ludCBtdGtfZmJfd2FpdChzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVy
ICpmYikKK3sKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbTsKKwlzdHJ1Y3QgcmVzZXJ2YXRp
b25fb2JqZWN0ICpyZXN2OworCWxvbmcgcmV0OworCisJaWYgKCFmYikKKwkJcmV0dXJuIDA7CisK
KwlnZW0gPSBtdGtfZmJfZ2V0X2dlbV9vYmooZmIpOworCWlmICghZ2VtIHx8ICFnZW0tPmRtYV9i
dWYgfHwgIWdlbS0+ZG1hX2J1Zi0+cmVzdikKKwkJcmV0dXJuIDA7CisKKwlyZXN2ID0gZ2VtLT5k
bWFfYnVmLT5yZXN2OworCXJldCA9IHJlc2VydmF0aW9uX29iamVjdF93YWl0X3RpbWVvdXRfcmN1
KHJlc3YsIGZhbHNlLCB0cnVlLAorCQkJCQkJICBNQVhfU0NIRURVTEVfVElNRU9VVCk7CisJLyog
TUFYX1NDSEVEVUxFX1RJTUVPVVQgb24gc3VjY2VzcywgLUVSRVNUQVJUU1lTIGlmIGludGVycnVw
dGVkICovCisJaWYgKFdBUk5fT04ocmV0IDwgMCkpCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4g
MDsKK30KKworc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqbXRrX2RybV9tb2RlX2ZiX2NyZWF0ZShz
dHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCQkgICAgICAgc3RydWN0IGRybV9maWxlICpmaWxl
LAorCQkJCQkgICAgICAgY29uc3Qgc3RydWN0IGRybV9tb2RlX2ZiX2NtZDIgKmNtZCkKK3sKKwlz
dHJ1Y3QgbXRrX2RybV9mYiAqbXRrX2ZiOworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ2VtOwor
CXVuc2lnbmVkIGludCB3aWR0aCA9IGNtZC0+d2lkdGg7CisJdW5zaWduZWQgaW50IGhlaWdodCA9
IGNtZC0+aGVpZ2h0OworCXVuc2lnbmVkIGludCBzaXplLCBicHA7CisJaW50IHJldDsKKworCWlm
IChkcm1fZm9ybWF0X251bV9wbGFuZXMoY21kLT5waXhlbF9mb3JtYXQpICE9IDEpCisJCXJldHVy
biBFUlJfUFRSKC1FSU5WQUwpOworCisJZ2VtID0gZHJtX2dlbV9vYmplY3RfbG9va3VwKGRldiwg
ZmlsZSwgY21kLT5oYW5kbGVzWzBdKTsKKwlpZiAoIWdlbSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVO
T0VOVCk7CisKKwlicHAgPSBkcm1fZm9ybWF0X3BsYW5lX2NwcChjbWQtPnBpeGVsX2Zvcm1hdCwg
MCk7CisJc2l6ZSA9IChoZWlnaHQgLSAxKSAqIGNtZC0+cGl0Y2hlc1swXSArIHdpZHRoICogYnBw
OworCXNpemUgKz0gY21kLT5vZmZzZXRzWzBdOworCisJaWYgKGdlbS0+c2l6ZSA8IHNpemUpIHsK
KwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byB1bnJlZmVyZW5jZTsKKwl9CisKKwltdGtfZmIgPSBt
dGtfZHJtX2ZyYW1lYnVmZmVyX2luaXQoZGV2LCBjbWQsIGdlbSk7CisJaWYgKElTX0VSUihtdGtf
ZmIpKSB7CisJCXJldCA9IFBUUl9FUlIobXRrX2ZiKTsKKwkJZ290byB1bnJlZmVyZW5jZTsKKwl9
CisKKwlyZXR1cm4gJm10a19mYi0+YmFzZTsKKwordW5yZWZlcmVuY2U6CisJZHJtX2dlbV9vYmpl
Y3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQoZ2VtKTsKKwlyZXR1cm4gRVJSX1BUUihyZXQpOworfQpk
aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZmIuaCBiL2RyaXZl
cnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2ZiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uOWIyYWUzNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9t
ZWRpYXRlay9tdGtfZHJtX2ZiLmgKQEAgLTAsMCArMSwyMyBAQAorLyoKKyAqIENvcHlyaWdodCAo
YykgMjAxNSBNZWRpYVRlayBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisg
KiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlz
IHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgTVRLX0RSTV9GQl9ICisjZGVmaW5lIE1US19E
Uk1fRkJfSAorCitzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm10a19mYl9nZXRfZ2VtX29iaihzdHJ1
Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYik7CitpbnQgbXRrX2ZiX3dhaXQoc3RydWN0IGRybV9mcmFt
ZWJ1ZmZlciAqZmIpOworc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqbXRrX2RybV9tb2RlX2ZiX2Ny
ZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCQkgICAgICAgc3RydWN0IGRybV9maWxl
ICpmaWxlLAorCQkJCQkgICAgICAgY29uc3Qgc3RydWN0IGRybV9tb2RlX2ZiX2NtZDIgKmNtZCk7
CisKKyNlbmRpZiAvKiBNVEtfRFJNX0ZCX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry
bS9tZWRpYXRlay9tdGtfZHJtX2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19k
cm1fZ2VtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc3M2JmYQotLS0g
L2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2dlbS5jCkBA
IC0wLDAgKzEsMjY5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1IE1lZGlhVGVrIEluYy4K
KyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUK
KyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKwor
I2luY2x1ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9nZW0uaD4KKyNpbmNsdWRl
IDxsaW51eC9kbWEtYnVmLmg+CisKKyNpbmNsdWRlICJtdGtfZHJtX2Rydi5oIgorI2luY2x1ZGUg
Im10a19kcm1fZ2VtLmgiCisKK3N0YXRpYyBzdHJ1Y3QgbXRrX2RybV9nZW1fb2JqICptdGtfZHJt
X2dlbV9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJCQl1bnNpZ25lZCBsb25nIHNp
emUpCit7CisJc3RydWN0IG10a19kcm1fZ2VtX29iaiAqbXRrX2dlbV9vYmo7CisJaW50IHJldDsK
KworCXNpemUgPSByb3VuZF91cChzaXplLCBQQUdFX1NJWkUpOworCisJbXRrX2dlbV9vYmogPSBr
emFsbG9jKHNpemVvZigqbXRrX2dlbV9vYmopLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW10a19nZW1f
b2JqKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCXJldCA9IGRybV9nZW1fb2JqZWN0
X2luaXQoZGV2LCAmbXRrX2dlbV9vYmotPmJhc2UsIHNpemUpOworCWlmIChyZXQgPCAwKSB7CisJ
CURSTV9FUlJPUigiZmFpbGVkIHRvIGluaXRpYWxpemUgZ2VtIG9iamVjdFxuIik7CisJCWtmcmVl
KG10a19nZW1fb2JqKTsKKwkJcmV0dXJuIEVSUl9QVFIocmV0KTsKKwl9CisKKwlyZXR1cm4gbXRr
X2dlbV9vYmo7Cit9CisKK3N0cnVjdCBtdGtfZHJtX2dlbV9vYmogKm10a19kcm1fZ2VtX2NyZWF0
ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCQkgICBzaXplX3Qgc2l6ZSwgYm9vbCBhbGxv
Y19rbWFwKQoreworCXN0cnVjdCBtdGtfZHJtX3ByaXZhdGUgKnByaXYgPSBkZXYtPmRldl9wcml2
YXRlOworCXN0cnVjdCBtdGtfZHJtX2dlbV9vYmogKm10a19nZW07CisJc3RydWN0IGRybV9nZW1f
b2JqZWN0ICpvYmo7CisJaW50IHJldDsKKworCW10a19nZW0gPSBtdGtfZHJtX2dlbV9pbml0KGRl
diwgc2l6ZSk7CisJaWYgKElTX0VSUihtdGtfZ2VtKSkKKwkJcmV0dXJuIEVSUl9DQVNUKG10a19n
ZW0pOworCisJb2JqID0gJm10a19nZW0tPmJhc2U7CisKKwlpbml0X2RtYV9hdHRycygmbXRrX2dl
bS0+ZG1hX2F0dHJzKTsKKwlkbWFfc2V0X2F0dHIoRE1BX0FUVFJfV1JJVEVfQ09NQklORSwgJm10
a19nZW0tPmRtYV9hdHRycyk7CisKKwlpZiAoIWFsbG9jX2ttYXApCisJCWRtYV9zZXRfYXR0cihE
TUFfQVRUUl9OT19LRVJORUxfTUFQUElORywgJm10a19nZW0tPmRtYV9hdHRycyk7CisKKwltdGtf
Z2VtLT5jb29raWUgPSBkbWFfYWxsb2NfYXR0cnMocHJpdi0+ZG1hX2Rldiwgb2JqLT5zaXplLAor
CQkJCQkgICZtdGtfZ2VtLT5kbWFfYWRkciwgR0ZQX0tFUk5FTCwKKwkJCQkJICAmbXRrX2dlbS0+
ZG1hX2F0dHJzKTsKKwlpZiAoIW10a19nZW0tPmNvb2tpZSkgeworCQlEUk1fRVJST1IoImZhaWxl
ZCB0byBhbGxvY2F0ZSAlenggYnl0ZSBkbWEgYnVmZmVyIiwgb2JqLT5zaXplKTsKKwkJcmV0ID0g
LUVOT01FTTsKKwkJZ290byBlcnJfZ2VtX2ZyZWU7CisJfQorCisJaWYgKGFsbG9jX2ttYXApCisJ
CW10a19nZW0tPmt2YWRkciA9IG10a19nZW0tPmNvb2tpZTsKKworCURSTV9ERUJVR19EUklWRVIo
ImNvb2tpZSA9ICVwIGRtYV9hZGRyID0gJXBhZCBzaXplID0gJXp1XG4iLAorCQkJIG10a19nZW0t
PmNvb2tpZSwgJm10a19nZW0tPmRtYV9hZGRyLAorCQkJIHNpemUpOworCisJcmV0dXJuIG10a19n
ZW07CisKK2Vycl9nZW1fZnJlZToKKwlkcm1fZ2VtX29iamVjdF9yZWxlYXNlKG9iaik7CisJa2Zy
ZWUobXRrX2dlbSk7CisJcmV0dXJuIEVSUl9QVFIocmV0KTsKK30KKwordm9pZCBtdGtfZHJtX2dl
bV9mcmVlX29iamVjdChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKK3sKKwlzdHJ1Y3QgbXRr
X2RybV9nZW1fb2JqICptdGtfZ2VtID0gdG9fbXRrX2dlbV9vYmoob2JqKTsKKwlzdHJ1Y3QgbXRr
X2RybV9wcml2YXRlICpwcml2ID0gb2JqLT5kZXYtPmRldl9wcml2YXRlOworCisJaWYgKG10a19n
ZW0tPnNnKQorCQlkcm1fcHJpbWVfZ2VtX2Rlc3Ryb3kob2JqLCBtdGtfZ2VtLT5zZyk7CisJZWxz
ZQorCQlkbWFfZnJlZV9hdHRycyhwcml2LT5kbWFfZGV2LCBvYmotPnNpemUsIG10a19nZW0tPmNv
b2tpZSwKKwkJCSAgICAgICBtdGtfZ2VtLT5kbWFfYWRkciwgJm10a19nZW0tPmRtYV9hdHRycyk7
CisKKwkvKiByZWxlYXNlIGZpbGUgcG9pbnRlciB0byBnZW0gb2JqZWN0LiAqLworCWRybV9nZW1f
b2JqZWN0X3JlbGVhc2Uob2JqKTsKKworCWtmcmVlKG10a19nZW0pOworfQorCitpbnQgbXRrX2Ry
bV9nZW1fZHVtYl9jcmVhdGUoc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsIHN0cnVjdCBkcm1f
ZGV2aWNlICpkZXYsCisJCQkgICAgc3RydWN0IGRybV9tb2RlX2NyZWF0ZV9kdW1iICphcmdzKQor
eworCXN0cnVjdCBtdGtfZHJtX2dlbV9vYmogKm10a19nZW07CisJaW50IHJldDsKKworCWFyZ3Mt
PnBpdGNoID0gRElWX1JPVU5EX1VQKGFyZ3MtPndpZHRoICogYXJncy0+YnBwLCA4KTsKKwlhcmdz
LT5zaXplID0gYXJncy0+cGl0Y2ggKiBhcmdzLT5oZWlnaHQ7CisKKwltdGtfZ2VtID0gbXRrX2Ry
bV9nZW1fY3JlYXRlKGRldiwgYXJncy0+c2l6ZSwgZmFsc2UpOworCWlmIChJU19FUlIobXRrX2dl
bSkpCisJCXJldHVybiBQVFJfRVJSKG10a19nZW0pOworCisJLyoKKwkgKiBhbGxvY2F0ZSBhIGlk
IG9mIGlkciB0YWJsZSB3aGVyZSB0aGUgb2JqIGlzIHJlZ2lzdGVyZWQKKwkgKiBhbmQgaGFuZGxl
IGhhcyB0aGUgaWQgd2hhdCB1c2VyIGNhbiBzZWUuCisJICovCisJcmV0ID0gZHJtX2dlbV9oYW5k
bGVfY3JlYXRlKGZpbGVfcHJpdiwgJm10a19nZW0tPmJhc2UsICZhcmdzLT5oYW5kbGUpOworCWlm
IChyZXQpCisJCWdvdG8gZXJyX2hhbmRsZV9jcmVhdGU7CisKKwkvKiBkcm9wIHJlZmVyZW5jZSBm
cm9tIGFsbG9jYXRlIC0gaGFuZGxlIGhvbGRzIGl0IG5vdy4gKi8KKwlkcm1fZ2VtX29iamVjdF91
bnJlZmVyZW5jZV91bmxvY2tlZCgmbXRrX2dlbS0+YmFzZSk7CisKKwlyZXR1cm4gMDsKKworZXJy
X2hhbmRsZV9jcmVhdGU6CisJbXRrX2RybV9nZW1fZnJlZV9vYmplY3QoJm10a19nZW0tPmJhc2Up
OworCXJldHVybiByZXQ7Cit9CisKK2ludCBtdGtfZHJtX2dlbV9kdW1iX21hcF9vZmZzZXQoc3Ry
dWN0IGRybV9maWxlICpmaWxlX3ByaXYsCisJCQkJc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdWlu
dDMyX3QgaGFuZGxlLAorCQkJCXVpbnQ2NF90ICpvZmZzZXQpCit7CisJc3RydWN0IGRybV9nZW1f
b2JqZWN0ICpvYmo7CisJaW50IHJldDsKKworCW9iaiA9IGRybV9nZW1fb2JqZWN0X2xvb2t1cChk
ZXYsIGZpbGVfcHJpdiwgaGFuZGxlKTsKKwlpZiAoIW9iaikgeworCQlEUk1fRVJST1IoImZhaWxl
ZCB0byBsb29rdXAgZ2VtIG9iamVjdC5cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwly
ZXQgPSBkcm1fZ2VtX2NyZWF0ZV9tbWFwX29mZnNldChvYmopOworCWlmIChyZXQpCisJCWdvdG8g
b3V0OworCisJKm9mZnNldCA9IGRybV92bWFfbm9kZV9vZmZzZXRfYWRkcigmb2JqLT52bWFfbm9k
ZSk7CisJRFJNX0RFQlVHX0tNUygib2Zmc2V0ID0gMHglbGx4XG4iLCAqb2Zmc2V0KTsKKworb3V0
OgorCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKG9iaik7CisJcmV0dXJuIHJl
dDsKK30KKworc3RhdGljIGludCBtdGtfZHJtX2dlbV9vYmplY3RfbW1hcChzdHJ1Y3QgZHJtX2dl
bV9vYmplY3QgKm9iaiwKKwkJCQkgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKKworewor
CWludCByZXQ7CisJc3RydWN0IG10a19kcm1fZ2VtX29iaiAqbXRrX2dlbSA9IHRvX210a19nZW1f
b2JqKG9iaik7CisJc3RydWN0IG10a19kcm1fcHJpdmF0ZSAqcHJpdiA9IG9iai0+ZGV2LT5kZXZf
cHJpdmF0ZTsKKworCS8qCisJICogZG1hX2FsbG9jX2F0dHJzKCkgYWxsb2NhdGVkIGEgc3RydWN0
IHBhZ2UgdGFibGUgZm9yIG10a19nZW0sIHNvIGNsZWFyCisJICogVk1fUEZOTUFQIGZsYWcgdGhh
dCB3YXMgc2V0IGJ5IGRybV9nZW1fbW1hcF9vYmooKS9kcm1fZ2VtX21tYXAoKS4KKwkgKi8KKwl2
bWEtPnZtX2ZsYWdzICY9IH5WTV9QRk5NQVA7CisJdm1hLT52bV9wZ29mZiA9IDA7CisKKwlyZXQg
PSBkbWFfbW1hcF9hdHRycyhwcml2LT5kbWFfZGV2LCB2bWEsIG10a19nZW0tPmNvb2tpZSwKKwkJ
CSAgICAgbXRrX2dlbS0+ZG1hX2FkZHIsIG9iai0+c2l6ZSwgJm10a19nZW0tPmRtYV9hdHRycyk7
CisJaWYgKHJldCkKKwkJZHJtX2dlbV92bV9jbG9zZSh2bWEpOworCisJcmV0dXJuIHJldDsKK30K
KworaW50IG10a19kcm1fZ2VtX21tYXBfYnVmKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCBz
dHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gZHJtX2dl
bV9tbWFwX29iaihvYmosIG9iai0+c2l6ZSwgdm1hKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0
OworCisJcmV0dXJuIG10a19kcm1fZ2VtX29iamVjdF9tbWFwKG9iaiwgdm1hKTsKK30KKworaW50
IG10a19kcm1fZ2VtX21tYXAoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCB2bV9hcmVhX3N0cnVj
dCAqdm1hKQoreworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOworCWludCByZXQ7CisKKwly
ZXQgPSBkcm1fZ2VtX21tYXAoZmlscCwgdm1hKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0Owor
CisJb2JqID0gdm1hLT52bV9wcml2YXRlX2RhdGE7CisKKwlyZXR1cm4gbXRrX2RybV9nZW1fb2Jq
ZWN0X21tYXAob2JqLCB2bWEpOworfQorCisvKgorICogQWxsb2NhdGUgYSBzZ190YWJsZSBmb3Ig
dGhpcyBHRU0gb2JqZWN0LgorICogTm90ZTogQm90aCB0aGUgdGFibGUncyBjb250ZW50cywgYW5k
IHRoZSBzZ190YWJsZSBpdHNlbGYgbXVzdCBiZSBmcmVlZCBieQorICogICAgICAgdGhlIGNhbGxl
ci4KKyAqIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBuZXdseSBhbGxvY2F0ZWQgc2dfdGFibGUs
IG9yIGFuIEVSUl9QVFIoKSBlcnJvci4KKyAqLworc3RydWN0IHNnX3RhYmxlICptdGtfZ2VtX3By
aW1lX2dldF9zZ190YWJsZShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKK3sKKwlzdHJ1Y3Qg
bXRrX2RybV9nZW1fb2JqICptdGtfZ2VtID0gdG9fbXRrX2dlbV9vYmoob2JqKTsKKwlzdHJ1Y3Qg
bXRrX2RybV9wcml2YXRlICpwcml2ID0gb2JqLT5kZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBz
Z190YWJsZSAqc2d0OworCWludCByZXQ7CisKKwlzZ3QgPSBremFsbG9jKHNpemVvZigqc2d0KSwg
R0ZQX0tFUk5FTCk7CisJaWYgKCFzZ3QpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJ
cmV0ID0gZG1hX2dldF9zZ3RhYmxlX2F0dHJzKHByaXYtPmRtYV9kZXYsIHNndCwgbXRrX2dlbS0+
Y29va2llLAorCQkJCSAgICBtdGtfZ2VtLT5kbWFfYWRkciwgb2JqLT5zaXplLAorCQkJCSAgICAm
bXRrX2dlbS0+ZG1hX2F0dHJzKTsKKwlpZiAocmV0KSB7CisJCURSTV9FUlJPUigiZmFpbGVkIHRv
IGFsbG9jYXRlIHNndCwgJWRcbiIsIHJldCk7CisJCWtmcmVlKHNndCk7CisJCXJldHVybiBFUlJf
UFRSKHJldCk7CisJfQorCisJcmV0dXJuIHNndDsKK30KKworc3RydWN0IGRybV9nZW1fb2JqZWN0
ICptdGtfZ2VtX3ByaW1lX2ltcG9ydF9zZ190YWJsZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAor
CQkJc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoLCBzdHJ1Y3Qgc2dfdGFibGUgKnNn
KQoreworCXN0cnVjdCBtdGtfZHJtX2dlbV9vYmogKm10a19nZW07CisJaW50IHJldDsKKwlzdHJ1
Y3Qgc2NhdHRlcmxpc3QgKnM7CisJdW5zaWduZWQgaW50IGk7CisJZG1hX2FkZHJfdCBleHBlY3Rl
ZDsKKworCW10a19nZW0gPSBtdGtfZHJtX2dlbV9pbml0KGRldiwgYXR0YWNoLT5kbWFidWYtPnNp
emUpOworCisJaWYgKElTX0VSUihtdGtfZ2VtKSkKKwkJcmV0dXJuIEVSUl9QVFIoUFRSX0VSUiht
dGtfZ2VtKSk7CisKKwlleHBlY3RlZCA9IHNnX2RtYV9hZGRyZXNzKHNnLT5zZ2wpOworCWZvcl9l
YWNoX3NnKHNnLT5zZ2wsIHMsIHNnLT5uZW50cywgaSkgeworCQlpZiAoc2dfZG1hX2FkZHJlc3Mo
cykgIT0gZXhwZWN0ZWQpIHsKKwkJCURSTV9FUlJPUigic2dfdGFibGUgaXMgbm90IGNvbnRpZ3Vv
dXMiKTsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIGVycl9nZW1fZnJlZTsKKwkJfQorCQll
eHBlY3RlZCA9IHNnX2RtYV9hZGRyZXNzKHMpICsgc2dfZG1hX2xlbihzKTsKKwl9CisKKwltdGtf
Z2VtLT5kbWFfYWRkciA9IHNnX2RtYV9hZGRyZXNzKHNnLT5zZ2wpOworCW10a19nZW0tPnNnID0g
c2c7CisKKwlyZXR1cm4gJm10a19nZW0tPmJhc2U7CisKK2Vycl9nZW1fZnJlZToKKwlrZnJlZSht
dGtfZ2VtKTsKKwlyZXR1cm4gRVJSX1BUUihyZXQpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n
cHUvZHJtL21lZGlhdGVrL210a19kcm1fZ2VtLmggYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv
bXRrX2RybV9nZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTJhNTYy
Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZ2Vt
LmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJ
bmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICov
CisKKyNpZm5kZWYgX01US19EUk1fR0VNX0hfCisjZGVmaW5lIF9NVEtfRFJNX0dFTV9IXworCisj
aW5jbHVkZSA8ZHJtL2RybV9nZW0uaD4KKworLyoKKyAqIG10ayBkcm0gYnVmZmVyIHN0cnVjdHVy
ZS4KKyAqCisgKiBAYmFzZTogYSBnZW0gb2JqZWN0LgorICoJLSBhIG5ldyBoYW5kbGUgdG8gdGhp
cyBnZW0gb2JqZWN0IHdvdWxkIGJlIGNyZWF0ZWQKKyAqCWJ5IGRybV9nZW1faGFuZGxlX2NyZWF0
ZSgpLgorICogQGNvb2tpZTogdGhlIHJldHVybiB2YWx1ZSBvZiBkbWFfYWxsb2NfYXR0cnMoKSwg
a2VlcCBpdCBmb3IgZG1hX2ZyZWVfYXR0cnMoKQorICogQGt2YWRkcjoga2VybmVsIHZpcnR1YWwg
YWRkcmVzcyBvZiBnZW0gYnVmZmVyLgorICogQGRtYV9hZGRyOiBkbWEgYWRkcmVzcyBvZiBnZW0g
YnVmZmVyLgorICogQGRtYV9hdHRyczogZG1hIGF0dHJpYnV0ZXMgb2YgZ2VtIGJ1ZmZlci4KKyAq
CisgKiBQLlMuIHRoaXMgb2JqZWN0IHdvdWxkIGJlIHRyYW5zZmVycmVkIHRvIHVzZXIgYXMga21z
X2JvLmhhbmRsZSBzbworICoJdXNlciBjYW4gYWNjZXNzIHRoZSBidWZmZXIgdGhyb3VnaCBrbXNf
Ym8uaGFuZGxlLgorICovCitzdHJ1Y3QgbXRrX2RybV9nZW1fb2JqIHsKKwlzdHJ1Y3QgZHJtX2dl
bV9vYmplY3QJYmFzZTsKKwl2b2lkCQkJKmNvb2tpZTsKKwl2b2lkCQkJKmt2YWRkcjsKKwlkbWFf
YWRkcl90CQlkbWFfYWRkcjsKKwlzdHJ1Y3QgZG1hX2F0dHJzCWRtYV9hdHRyczsKKwlzdHJ1Y3Qg
c2dfdGFibGUJCSpzZzsKK307CisKKyNkZWZpbmUgdG9fbXRrX2dlbV9vYmooeCkJY29udGFpbmVy
X29mKHgsIHN0cnVjdCBtdGtfZHJtX2dlbV9vYmosIGJhc2UpCisKK3ZvaWQgbXRrX2RybV9nZW1f
ZnJlZV9vYmplY3Qoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW0pOworc3RydWN0IG10a19kcm1f
Z2VtX29iaiAqbXRrX2RybV9nZW1fY3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHNpemVf
dCBzaXplLAorCQkJCQkgICBib29sIGFsbG9jX2ttYXApOworaW50IG10a19kcm1fZ2VtX2R1bWJf
Y3JlYXRlKHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LCBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2
LAorCQkJICAgIHN0cnVjdCBkcm1fbW9kZV9jcmVhdGVfZHVtYiAqYXJncyk7CitpbnQgbXRrX2Ry
bV9nZW1fZHVtYl9tYXBfb2Zmc2V0KHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAorCQkJCXN0
cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVpbnQzMl90IGhhbmRsZSwKKwkJCQl1aW50NjRfdCAqb2Zm
c2V0KTsKK2ludCBtdGtfZHJtX2dlbV9tbWFwKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qgdm1f
YXJlYV9zdHJ1Y3QgKnZtYSk7CitpbnQgbXRrX2RybV9nZW1fbW1hcF9idWYoc3RydWN0IGRybV9n
ZW1fb2JqZWN0ICpvYmosCisJCQkgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOworc3RydWN0
IHNnX3RhYmxlICptdGtfZ2VtX3ByaW1lX2dldF9zZ190YWJsZShzdHJ1Y3QgZHJtX2dlbV9vYmpl
Y3QgKm9iaik7CitzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm10a19nZW1fcHJpbWVfaW1wb3J0X3Nn
X3RhYmxlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2ht
ZW50ICphdHRhY2gsIHN0cnVjdCBzZ190YWJsZSAqc2cpOworCisjZW5kaWYKZGlmZiAtLWdpdCBh
L2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX3BsYW5lLmMgYi9kcml2ZXJzL2dwdS9k
cm0vbWVkaWF0ZWsvbXRrX2RybV9wbGFuZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmM4OTg3ODgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0
ZWsvbXRrX2RybV9wbGFuZS5jCkBAIC0wLDAgKzEsMjQwIEBACisvKgorICogQ29weXJpZ2h0IChj
KSAyMDE1IE1lZGlhVGVrIEluYy4KKyAqIEF1dGhvcjogQ0sgSHUgPGNrLmh1QG1lZGlhdGVrLmNv
bT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8K
KworI2luY2x1ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWMuaD4KKyNp
bmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX3BsYW5l
X2hlbHBlci5oPgorCisjaW5jbHVkZSAibXRrX2RybV9jcnRjLmgiCisjaW5jbHVkZSAibXRrX2Ry
bV9kZHBfY29tcC5oIgorI2luY2x1ZGUgIm10a19kcm1fZHJ2LmgiCisjaW5jbHVkZSAibXRrX2Ry
bV9mYi5oIgorI2luY2x1ZGUgIm10a19kcm1fZ2VtLmgiCisjaW5jbHVkZSAibXRrX2RybV9wbGFu
ZS5oIgorCitzdGF0aWMgY29uc3QgdTMyIGZvcm1hdHNbXSA9IHsKKwlEUk1fRk9STUFUX1hSR0I4
ODg4LAorCURSTV9GT1JNQVRfQVJHQjg4ODgsCisJRFJNX0ZPUk1BVF9SR0I1NjUsCit9OworCitz
dGF0aWMgdm9pZCBtdGtfcGxhbmVfZW5hYmxlKHN0cnVjdCBtdGtfZHJtX3BsYW5lICptdGtfcGxh
bmUsIGJvb2wgZW5hYmxlLAorCQkJICAgICBkbWFfYWRkcl90IGFkZHIsIHN0cnVjdCBkcm1fcmVj
dCAqZGVzdCkKK3sKKwlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSA9ICZtdGtfcGxhbmUtPmJhc2U7
CisJc3RydWN0IG10a19wbGFuZV9zdGF0ZSAqc3RhdGUgPSB0b19tdGtfcGxhbmVfc3RhdGUocGxh
bmUtPnN0YXRlKTsKKwl1bnNpZ25lZCBpbnQgcGl0Y2gsIGZvcm1hdDsKKwlpbnQgeCwgeTsKKwor
CWlmIChXQVJOX09OKCFwbGFuZS0+c3RhdGUgfHwgKGVuYWJsZSAmJiAhcGxhbmUtPnN0YXRlLT5m
YikpKQorCQlyZXR1cm47CisKKwlpZiAocGxhbmUtPnN0YXRlLT5mYikgeworCQlwaXRjaCA9IHBs
YW5lLT5zdGF0ZS0+ZmItPnBpdGNoZXNbMF07CisJCWZvcm1hdCA9IHBsYW5lLT5zdGF0ZS0+ZmIt
PnBpeGVsX2Zvcm1hdDsKKwl9IGVsc2UgeworCQlwaXRjaCA9IDA7CisJCWZvcm1hdCA9IERSTV9G
T1JNQVRfUkdCQTg4ODg7CisJfQorCisJeCA9IHBsYW5lLT5zdGF0ZS0+Y3J0Y194OworCXkgPSBw
bGFuZS0+c3RhdGUtPmNydGNfeTsKKworCWlmICh4IDwgMCkgeworCQlhZGRyIC09IHggKiA0Owor
CQl4ID0gMDsKKwl9CisKKwlpZiAoeSA8IDApIHsKKwkJYWRkciAtPSB5ICogcGl0Y2g7CisJCXkg
PSAwOworCX0KKworCXN0YXRlLT5wZW5kaW5nLmVuYWJsZSA9IGVuYWJsZTsKKwlzdGF0ZS0+cGVu
ZGluZy5waXRjaCA9IHBpdGNoOworCXN0YXRlLT5wZW5kaW5nLmZvcm1hdCA9IGZvcm1hdDsKKwlz
dGF0ZS0+cGVuZGluZy5hZGRyID0gYWRkcjsKKwlzdGF0ZS0+cGVuZGluZy54ID0geDsKKwlzdGF0
ZS0+cGVuZGluZy55ID0geTsKKwlzdGF0ZS0+cGVuZGluZy53aWR0aCA9IGRlc3QtPngyIC0gZGVz
dC0+eDE7CisJc3RhdGUtPnBlbmRpbmcuaGVpZ2h0ID0gZGVzdC0+eTIgLSBkZXN0LT55MTsKKwl3
bWIoKTsgLyogTWFrZSBzdXJlIHRoZSBhYm92ZSBwYXJhbWV0ZXJzIGFyZSBzZXQgYmVmb3JlIHVw
ZGF0ZSAqLworCXN0YXRlLT5wZW5kaW5nLmRpcnR5ID0gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQg
bXRrX3BsYW5lX3Jlc2V0KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lKQoreworCXN0cnVjdCBtdGtf
cGxhbmVfc3RhdGUgKnN0YXRlOworCisJaWYgKHBsYW5lLT5zdGF0ZSkgeworCQlpZiAocGxhbmUt
PnN0YXRlLT5mYikKKwkJCWRybV9mcmFtZWJ1ZmZlcl91bnJlZmVyZW5jZShwbGFuZS0+c3RhdGUt
PmZiKTsKKworCQlzdGF0ZSA9IHRvX210a19wbGFuZV9zdGF0ZShwbGFuZS0+c3RhdGUpOworCQlt
ZW1zZXQoc3RhdGUsIDAsIHNpemVvZigqc3RhdGUpKTsKKwl9IGVsc2UgeworCQlzdGF0ZSA9IGt6
YWxsb2Moc2l6ZW9mKCpzdGF0ZSksIEdGUF9LRVJORUwpOworCQlpZiAoIXN0YXRlKQorCQkJcmV0
dXJuOworCQlwbGFuZS0+c3RhdGUgPSAmc3RhdGUtPmJhc2U7CisJfQorCisJc3RhdGUtPmJhc2Uu
cGxhbmUgPSBwbGFuZTsKKwlzdGF0ZS0+cGVuZGluZy5mb3JtYXQgPSBEUk1fRk9STUFUX1JHQjU2
NTsKK30KKworc3RhdGljIHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKm10a19wbGFuZV9kdXBsaWNh
dGVfc3RhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUpCit7CisJc3RydWN0IG10a19wbGFuZV9z
dGF0ZSAqb2xkX3N0YXRlID0gdG9fbXRrX3BsYW5lX3N0YXRlKHBsYW5lLT5zdGF0ZSk7CisJc3Ry
dWN0IG10a19wbGFuZV9zdGF0ZSAqc3RhdGU7CisKKwlzdGF0ZSA9IGt6YWxsb2Moc2l6ZW9mKCpz
dGF0ZSksIEdGUF9LRVJORUwpOworCWlmICghc3RhdGUpCisJCXJldHVybiBOVUxMOworCisJX19k
cm1fYXRvbWljX2hlbHBlcl9wbGFuZV9kdXBsaWNhdGVfc3RhdGUocGxhbmUsICZzdGF0ZS0+YmFz
ZSk7CisKKwlXQVJOX09OKHN0YXRlLT5iYXNlLnBsYW5lICE9IHBsYW5lKTsKKworCXN0YXRlLT5w
ZW5kaW5nID0gb2xkX3N0YXRlLT5wZW5kaW5nOworCisJcmV0dXJuICZzdGF0ZS0+YmFzZTsKK30K
Kworc3RhdGljIHZvaWQgbXRrX2RybV9wbGFuZV9kZXN0cm95X3N0YXRlKHN0cnVjdCBkcm1fcGxh
bmUgKnBsYW5lLAorCQkJCQlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSkKK3sKKwlfX2Ry
bV9hdG9taWNfaGVscGVyX3BsYW5lX2Rlc3Ryb3lfc3RhdGUocGxhbmUsIHN0YXRlKTsKKwlrZnJl
ZSh0b19tdGtfcGxhbmVfc3RhdGUoc3RhdGUpKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBk
cm1fcGxhbmVfZnVuY3MgbXRrX3BsYW5lX2Z1bmNzID0geworCS51cGRhdGVfcGxhbmUgPSBkcm1f
YXRvbWljX2hlbHBlcl91cGRhdGVfcGxhbmUsCisJLmRpc2FibGVfcGxhbmUgPSBkcm1fYXRvbWlj
X2hlbHBlcl9kaXNhYmxlX3BsYW5lLAorCS5kZXN0cm95ID0gZHJtX3BsYW5lX2NsZWFudXAsCisJ
LnJlc2V0ID0gbXRrX3BsYW5lX3Jlc2V0LAorCS5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0gbXRr
X3BsYW5lX2R1cGxpY2F0ZV9zdGF0ZSwKKwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBtdGtfZHJt
X3BsYW5lX2Rlc3Ryb3lfc3RhdGUsCit9OworCitzdGF0aWMgaW50IG10a19wbGFuZV9hdG9taWNf
Y2hlY2soc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCisJCQkJICBzdHJ1Y3QgZHJtX3BsYW5lX3N0
YXRlICpzdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHN0YXRlLT5mYjsK
KwlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNfc3RhdGU7CisJYm9vbCB2aXNpYmxlOworCXN0
cnVjdCBkcm1fcmVjdCBkZXN0ID0geworCQkueDEgPSBzdGF0ZS0+Y3J0Y194LAorCQkueTEgPSBz
dGF0ZS0+Y3J0Y195LAorCQkueDIgPSBzdGF0ZS0+Y3J0Y194ICsgc3RhdGUtPmNydGNfdywKKwkJ
LnkyID0gc3RhdGUtPmNydGNfeSArIHN0YXRlLT5jcnRjX2gsCisJfTsKKwlzdHJ1Y3QgZHJtX3Jl
Y3Qgc3JjID0geworCQkvKiAxNi4xNiBmaXhlZCBwb2ludCAqLworCQkueDEgPSBzdGF0ZS0+c3Jj
X3gsCisJCS55MSA9IHN0YXRlLT5zcmNfeSwKKwkJLngyID0gc3RhdGUtPnNyY194ICsgc3RhdGUt
PnNyY193LAorCQkueTIgPSBzdGF0ZS0+c3JjX3kgKyBzdGF0ZS0+c3JjX2gsCisJfTsKKwlzdHJ1
Y3QgZHJtX3JlY3QgY2xpcCA9IHsgMCwgfTsKKworCWlmICghZmIpCisJCXJldHVybiAwOworCisJ
aWYgKCFtdGtfZmJfZ2V0X2dlbV9vYmooZmIpKSB7CisJCURSTV9ERUJVR19LTVMoImJ1ZmZlciBp
cyBudWxsXG4iKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJaWYgKCFzdGF0ZS0+Y3J0YykK
KwkJcmV0dXJuIDA7CisKKwljcnRjX3N0YXRlID0gZHJtX2F0b21pY19nZXRfY3J0Y19zdGF0ZShz
dGF0ZS0+c3RhdGUsIHN0YXRlLT5jcnRjKTsKKwlpZiAoSVNfRVJSKGNydGNfc3RhdGUpKQorCQly
ZXR1cm4gUFRSX0VSUihjcnRjX3N0YXRlKTsKKworCWNsaXAueDIgPSBjcnRjX3N0YXRlLT5tb2Rl
LmhkaXNwbGF5OworCWNsaXAueTIgPSBjcnRjX3N0YXRlLT5tb2RlLnZkaXNwbGF5OworCisJcmV0
dXJuIGRybV9wbGFuZV9oZWxwZXJfY2hlY2tfdXBkYXRlKHBsYW5lLCBzdGF0ZS0+Y3J0YywgZmIs
CisJCQkJCSAgICAgJnNyYywgJmRlc3QsICZjbGlwLAorCQkJCQkgICAgIERSTV9QTEFORV9IRUxQ
RVJfTk9fU0NBTElORywKKwkJCQkJICAgICBEUk1fUExBTkVfSEVMUEVSX05PX1NDQUxJTkcsCisJ
CQkJCSAgICAgdHJ1ZSwgdHJ1ZSwgJnZpc2libGUpOworfQorCitzdGF0aWMgdm9pZCBtdGtfcGxh
bmVfYXRvbWljX3VwZGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKKwkJCQkgICAgc3RydWN0
IGRybV9wbGFuZV9zdGF0ZSAqb2xkX3N0YXRlKQoreworCXN0cnVjdCBtdGtfcGxhbmVfc3RhdGUg
KnN0YXRlID0gdG9fbXRrX3BsYW5lX3N0YXRlKHBsYW5lLT5zdGF0ZSk7CisJc3RydWN0IGRybV9j
cnRjICpjcnRjID0gc3RhdGUtPmJhc2UuY3J0YzsKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdl
bTsKKwlzdHJ1Y3QgbXRrX2RybV9nZW1fb2JqICptdGtfZ2VtOworCXN0cnVjdCBtdGtfZHJtX3Bs
YW5lICptdGtfcGxhbmUgPSB0b19tdGtfcGxhbmUocGxhbmUpOworCXN0cnVjdCBkcm1fcmVjdCBk
ZXN0ID0geworCQkueDEgPSBzdGF0ZS0+YmFzZS5jcnRjX3gsCisJCS55MSA9IHN0YXRlLT5iYXNl
LmNydGNfeSwKKwkJLngyID0gc3RhdGUtPmJhc2UuY3J0Y194ICsgc3RhdGUtPmJhc2UuY3J0Y193
LAorCQkueTIgPSBzdGF0ZS0+YmFzZS5jcnRjX3kgKyBzdGF0ZS0+YmFzZS5jcnRjX2gsCisJfTsK
KwlzdHJ1Y3QgZHJtX3JlY3QgY2xpcCA9IHsgMCwgfTsKKworCWlmICghY3J0YykKKwkJcmV0dXJu
OworCisJY2xpcC54MiA9IHN0YXRlLT5iYXNlLmNydGMtPnN0YXRlLT5tb2RlLmhkaXNwbGF5Owor
CWNsaXAueTIgPSBzdGF0ZS0+YmFzZS5jcnRjLT5zdGF0ZS0+bW9kZS52ZGlzcGxheTsKKwlkcm1f
cmVjdF9pbnRlcnNlY3QoJmRlc3QsICZjbGlwKTsKKworCWdlbSA9IG10a19mYl9nZXRfZ2VtX29i
aihzdGF0ZS0+YmFzZS5mYik7CisJbXRrX2dlbSA9IHRvX210a19nZW1fb2JqKGdlbSk7CisJbXRr
X3BsYW5lX2VuYWJsZShtdGtfcGxhbmUsIHRydWUsIG10a19nZW0tPmRtYV9hZGRyLCAmZGVzdCk7
Cit9CisKK3N0YXRpYyB2b2lkIG10a19wbGFuZV9hdG9taWNfZGlzYWJsZShzdHJ1Y3QgZHJtX3Bs
YW5lICpwbGFuZSwKKwkJCQkgICAgIHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKm9sZF9zdGF0ZSkK
K3sKKwlzdHJ1Y3QgbXRrX3BsYW5lX3N0YXRlICpzdGF0ZSA9IHRvX210a19wbGFuZV9zdGF0ZShw
bGFuZS0+c3RhdGUpOworCisJc3RhdGUtPnBlbmRpbmcuZW5hYmxlID0gZmFsc2U7CisJd21iKCk7
IC8qIE1ha2Ugc3VyZSB0aGUgYWJvdmUgcGFyYW1ldGVyIGlzIHNldCBiZWZvcmUgdXBkYXRlICov
CisJc3RhdGUtPnBlbmRpbmcuZGlydHkgPSB0cnVlOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0
IGRybV9wbGFuZV9oZWxwZXJfZnVuY3MgbXRrX3BsYW5lX2hlbHBlcl9mdW5jcyA9IHsKKwkuYXRv
bWljX2NoZWNrID0gbXRrX3BsYW5lX2F0b21pY19jaGVjaywKKwkuYXRvbWljX3VwZGF0ZSA9IG10
a19wbGFuZV9hdG9taWNfdXBkYXRlLAorCS5hdG9taWNfZGlzYWJsZSA9IG10a19wbGFuZV9hdG9t
aWNfZGlzYWJsZSwKK307CisKK2ludCBtdGtfcGxhbmVfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAq
ZGV2LCBzdHJ1Y3QgbXRrX2RybV9wbGFuZSAqbXRrX3BsYW5lLAorCQkgICB1bnNpZ25lZCBsb25n
IHBvc3NpYmxlX2NydGNzLCBlbnVtIGRybV9wbGFuZV90eXBlIHR5cGUsCisJCSAgIHVuc2lnbmVk
IGludCB6cG9zKQoreworCWludCBlcnI7CisKKwllcnIgPSBkcm1fdW5pdmVyc2FsX3BsYW5lX2lu
aXQoZGV2LCAmbXRrX3BsYW5lLT5iYXNlLCBwb3NzaWJsZV9jcnRjcywKKwkJCQkgICAgICAgJm10
a19wbGFuZV9mdW5jcywgZm9ybWF0cywKKwkJCQkgICAgICAgQVJSQVlfU0laRShmb3JtYXRzKSwg
dHlwZSwgTlVMTCk7CisJaWYgKGVycikgeworCQlEUk1fRVJST1IoImZhaWxlZCB0byBpbml0aWFs
aXplIHBsYW5lXG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlkcm1fcGxhbmVfaGVscGVyX2Fk
ZCgmbXRrX3BsYW5lLT5iYXNlLCAmbXRrX3BsYW5lX2hlbHBlcl9mdW5jcyk7CisJbXRrX3BsYW5l
LT5pZHggPSB6cG9zOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k
cm0vbWVkaWF0ZWsvbXRrX2RybV9wbGFuZS5oIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210
a19kcm1fcGxhbmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MmE3YjNl
Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fcGxh
bmUuaApAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1IE1lZGlhVGVr
IEluYy4KKyAqIEF1dGhvcjogQ0sgSHUgPGNrLmh1QG1lZGlhdGVrLmNvbT4KKyAqCisgKiBUaGlz
IHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
IG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfTVRL
X0RSTV9QTEFORV9IXworI2RlZmluZSBfTVRLX0RSTV9QTEFORV9IXworCisjaW5jbHVkZSA8ZHJt
L2RybV9jcnRjLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworc3RydWN0IG10a19kcm1f
cGxhbmUgeworCXN0cnVjdCBkcm1fcGxhbmUJCWJhc2U7CisJdW5zaWduZWQgaW50CQkJaWR4Owor
fTsKKworc3RydWN0IG10a19wbGFuZV9wZW5kaW5nX3N0YXRlIHsKKwlib29sCQkJCWNvbmZpZzsK
Kwlib29sCQkJCWVuYWJsZTsKKwlkbWFfYWRkcl90CQkJYWRkcjsKKwl1bnNpZ25lZCBpbnQJCQlw
aXRjaDsKKwl1bnNpZ25lZCBpbnQJCQlmb3JtYXQ7CisJdW5zaWduZWQgaW50CQkJeDsKKwl1bnNp
Z25lZCBpbnQJCQl5OworCXVuc2lnbmVkIGludAkJCXdpZHRoOworCXVuc2lnbmVkIGludAkJCWhl
aWdodDsKKwlib29sCQkJCWRpcnR5OworfTsKKworc3RydWN0IG10a19wbGFuZV9zdGF0ZSB7CisJ
c3RydWN0IGRybV9wbGFuZV9zdGF0ZQkJYmFzZTsKKwlzdHJ1Y3QgbXRrX3BsYW5lX3BlbmRpbmdf
c3RhdGUJcGVuZGluZzsKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG10a19kcm1fcGxhbmUg
KnRvX210a19wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSkKK3sKKwlyZXR1cm4gY29udGFp
bmVyX29mKHBsYW5lLCBzdHJ1Y3QgbXRrX2RybV9wbGFuZSwgYmFzZSk7Cit9CisKK3N0YXRpYyBp
bmxpbmUgc3RydWN0IG10a19wbGFuZV9zdGF0ZSAqCit0b19tdGtfcGxhbmVfc3RhdGUoc3RydWN0
IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihzdGF0ZSwg
c3RydWN0IG10a19wbGFuZV9zdGF0ZSwgYmFzZSk7Cit9CisKK2ludCBtdGtfcGxhbmVfaW5pdChz
dHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgbXRrX2RybV9wbGFuZSAqbXRrX3BsYW5lLAor
CQkgICB1bnNpZ25lZCBsb25nIHBvc3NpYmxlX2NydGNzLCBlbnVtIGRybV9wbGFuZV90eXBlIHR5
cGUsCisJCSAgIHVuc2lnbmVkIGludCB6cG9zKTsKKworI2VuZGlmCi0tIAoyLjguMC5yYzMKCl9f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBt
YWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3Rz
LmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=