From mboxrd@z Thu Jan 1 00:00:00 1970
From: Philipp Zabel
Subject: Re: [PATCH v14 2/8] drm/mediatek: Add DRM Driver for Mediatek SoC
MT8173.
Date: Tue, 26 Apr 2016 10:05:22 +0200
Message-ID: <1461657922.3599.27.camel@pengutronix.de>
References: <1460387376-11799-1-git-send-email-p.zabel@pengutronix.de>
<1460387376-11799-3-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: <1460387376-11799-3-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 , Emil Velikov , Michael Turquette , Jie Qiu , Cawa Cheng , Mao Huang , Yingjoe Chen , devicetree@vger.kernel.org, Jitao Shi , Pawel Moll , Ian Campbell , YT Shen , Rob Herring , linux-mediatek@lists.infradead.org, Matthias Brugger , Paul Bolle , Stephen Boyd , Tomasz Figa , kernel@pengutronix.de, Kumar Gala
List-Id: devicetree@vger.kernel.org
RnJvbSAyNDk4Mjk2MWE3NDA2YzljNmVkMTM5MzI5YzllZTEyNjNkZGM5MmMyIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBDSyBIdSA8Y2suaHVAbWVkaWF0ZWsuY29tPgpEYXRlOiBNb24s
IDQgSmFuIDIwMTYgMTg6MzY6MzQgKzAxMDAKU3ViamVjdDogW1BBVENIIHYxNC41IDIvOF0gZHJt
L21lZGlhdGVrOiBBZGQgRFJNIERyaXZlciBmb3IgTWVkaWF0ZWsgU29DIE1UODE3My4KClRoaXMg
cGF0Y2ggYWRkcyBhbiBpbml0aWFsIERSTSBkcml2ZXIgZm9yIHRoZSBNZWRpYXRlayBNVDgxNzMg
RElTUApzdWJzeXN0ZW0uIEl0IGN1cnJlbnRseSBzdXBwb3J0cyB0d28gZml4ZWQgb3V0cHV0IHN0
cmVhbXMgZnJvbSB0aGUKT1ZMMC9PVkwxIHNvdXJjZXMgdG8gdGhlIERTSTAvRFBJMCBzaW5rcywg
cmVzcGVjdGl2ZWx5LgoKU2lnbmVkLW9mZi1ieTogQ0sgSHUgPGNrLmh1QG1lZGlhdGVrLmNvbT4K
U2lnbmVkLW9mZi1ieTogWVQgU2hlbiA8eXQuc2hlbkBtZWRpYXRlay5jb20+ClNpZ25lZC1vZmYt
Ynk6IERhbmllbCBLdXJ0eiA8ZGprdXJ0ekBjaHJvbWl1bS5vcmc+ClNpZ25lZC1vZmYtYnk6IEJp
YmJ5IEhzaWVoIDxiaWJieS5oc2llaEBtZWRpYXRlay5jb20+ClNpZ25lZC1vZmYtYnk6IE1hbyBI
dWFuZyA8bGl0dGxlY3ZyQGNocm9taXVtLm9yZz4KU2lnbmVkLW9mZi1ieTogUGhpbGlwcCBaYWJl
bCA8cC56YWJlbEBwZW5ndXRyb25peC5kZT4KLS0tCkNoYW5nZXMgc2luY2UgdjE0OgogLSBGaXhl
ZCBtb2R1bGUgYnVpbGQKLS0tCiBkcml2ZXJzL2dwdS9kcm0vS2NvbmZpZyAgICAgICAgICAgICAg
ICAgICAgIHwgICAyICsKIGRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZSAgICAgICAgICAgICAgICAg
ICAgfCAgIDEgKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL0tjb25maWcgICAgICAgICAgICB8
ICAxMiArCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvTWFrZWZpbGUgICAgICAgICAgIHwgIDEx
ICsKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZGlzcF9vdmwuYyAgICAgfCAzMDIgKysr
KysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Rpc3BfcmRtYS5jICAg
IHwgMjQwICsrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fY3J0
Yy5jICAgICB8IDU4MiArKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9k
cm0vbWVkaWF0ZWsvbXRrX2RybV9jcnRjLmggICAgIHwgIDMyICsrCiBkcml2ZXJzL2dwdS9kcm0v
bWVkaWF0ZWsvbXRrX2RybV9kZHAuYyAgICAgIHwgMzUzICsrKysrKysrKysrKysrKysrCiBkcml2
ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHAuaCAgICAgIHwgIDQxICsrCiBkcml2ZXJz
L2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHBfY29tcC5jIHwgMjI1ICsrKysrKysrKysrCiBk
cml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHBfY29tcC5oIHwgMTUwICsrKysrKysK
IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5jICAgICAgfCA1NjUgKysrKysr
KysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9k
cnYuaCAgICAgIHwgIDU3ICsrKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZmIu
YyAgICAgICB8IDE2NSArKysrKysrKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1f
ZmIuaCAgICAgICB8ICAyMyArKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZ2Vt
LmMgICAgICB8IDI2OSArKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRr
X2RybV9nZW0uaCAgICAgIHwgIDU5ICsrKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19k
cm1fcGxhbmUuYyAgICB8IDI0MCArKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRl
ay9tdGtfZHJtX3BsYW5lLmggICAgfCAgNTkgKysrCiAyMCBmaWxlcyBjaGFuZ2VkLCAzMzg4IGlu
c2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv
S2NvbmZpZwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9NYWtl
ZmlsZQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZGlz
cF9vdmwuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtf
ZGlzcF9yZG1hLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv
bXRrX2RybV9jcnRjLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0
ZWsvbXRrX2RybV9jcnRjLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVk
aWF0ZWsvbXRrX2RybV9kZHAuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9t
ZWRpYXRlay9tdGtfZHJtX2RkcC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJt
L21lZGlhdGVrL210a19kcm1fZGRwX2NvbXAuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv
Z3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2RkcF9jb21wLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBk
cml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuYwogY3JlYXRlIG1vZGUgMTAwNjQ0
IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5oCiBjcmVhdGUgbW9kZSAxMDA2
NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZmIuYwogY3JlYXRlIG1vZGUgMTAw
NjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2ZiLmgKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9nZW0uYwogY3JlYXRlIG1vZGUg
MTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2dlbS5oCiBjcmVhdGUgbW9k
ZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fcGxhbmUuYwogY3JlYXRl
IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX3BsYW5lLmgKCmRp
ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9LY29u
ZmlnCmluZGV4IGYyYTc0ZDAuLjU0ODIwMTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9L
Y29uZmlnCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCkBAIC0yODEsMyArMjgxLDUgQEAg
c291cmNlICJkcml2ZXJzL2dwdS9kcm0vaW14L0tjb25maWciCiBzb3VyY2UgImRyaXZlcnMvZ3B1
L2RybS92YzQvS2NvbmZpZyIKIAogc291cmNlICJkcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9LY29u
ZmlnIgorCitzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9LY29uZmlnIgpkaWZmIC0t
Z2l0IGEvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxl
CmluZGV4IDZlYjk0ZmMuLjAyYjFmM2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9NYWtl
ZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKQEAgLTczLDYgKzczLDcgQEAgb2Jq
LSQoQ09ORklHX0RSTV9NU00pICs9IG1zbS8KIG9iai0kKENPTkZJR19EUk1fVEVHUkEpICs9IHRl
Z3JhLwogb2JqLSQoQ09ORklHX0RSTV9TVEkpICs9IHN0aS8KIG9iai0kKENPTkZJR19EUk1fSU1Y
KSArPSBpbXgvCitvYmotJChDT05GSUdfRFJNX01FRElBVEVLKSArPSBtZWRpYXRlay8KIG9iai15
CQkJKz0gaTJjLwogb2JqLXkJCQkrPSBwYW5lbC8KIG9iai15CQkJKz0gYnJpZGdlLwpkaWZmIC0t
Z2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0v
bWVkaWF0ZWsvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGFk
ODkyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL0tjb25maWcK
QEAgLTAsMCArMSwxMiBAQAorY29uZmlnIERSTV9NRURJQVRFSworCXRyaXN0YXRlICJEUk0gU3Vw
cG9ydCBmb3IgTWVkaWF0ZWsgU29DcyIKKwlkZXBlbmRzIG9uIERSTQorCWRlcGVuZHMgb24gQVJD
SF9NRURJQVRFSyB8fCAoQVJNICYmIENPTVBJTEVfVEVTVCkKKwlzZWxlY3QgRFJNX0tNU19IRUxQ
RVIKKwlzZWxlY3QgSU9NTVVfRE1BCisJc2VsZWN0IE1US19TTUkKKwloZWxwCisJICBDaG9vc2Ug
dGhpcyBvcHRpb24gaWYgeW91IGhhdmUgYSBNZWRpYXRlayBTb0NzLgorCSAgVGhlIG1vZHVsZSB3
aWxsIGJlIGNhbGxlZCBtZWRpYXRlay1kcm0KKwkgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIGtlcm5l
bCBtb2RlIHNldHRpbmcgYW5kCisJICBidWZmZXIgbWFuYWdlbWVudCB0byB1c2Vyc3BhY2UuCmRp
ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvTWFrZWZpbGUgYi9kcml2ZXJzL2dw
dS9kcm0vbWVkaWF0ZWsvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uZDRiZGU3YwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9N
YWtlZmlsZQpAQCAtMCwwICsxLDExIEBACittZWRpYXRlay1kcm0teSA6PSBtdGtfZGlzcF9vdmwu
byBcCisJCSAgbXRrX2Rpc3BfcmRtYS5vIFwKKwkJICBtdGtfZHJtX2NydGMubyBcCisJCSAgbXRr
X2RybV9kZHAubyBcCisJCSAgbXRrX2RybV9kZHBfY29tcC5vIFwKKwkJICBtdGtfZHJtX2Rydi5v
IFwKKwkJICBtdGtfZHJtX2ZiLm8gXAorCQkgIG10a19kcm1fZ2VtLm8gXAorCQkgIG10a19kcm1f
cGxhbmUubworCitvYmotJChDT05GSUdfRFJNX01FRElBVEVLKSArPSBtZWRpYXRlay1kcm0ubwpk
aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kaXNwX292bC5jIGIvZHJp
dmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kaXNwX292bC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjhmNjI2NzFmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUv
ZHJtL21lZGlhdGVrL210a19kaXNwX292bC5jCkBAIC0wLDAgKzEsMzAyIEBACisvKgorICogQ29w
eXJpZ2h0IChjKSAyMDE1IE1lZGlhVGVrIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9u
IDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoK
KyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGRybS9kcm1QLmg+CisjaW5j
bHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvY29tcG9uZW50Lmg+CisjaW5jbHVk
ZSA8bGludXgvb2ZfZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfaXJxLmg+CisjaW5jbHVk
ZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlICJtdGtfZHJtX2NydGMuaCIK
KyNpbmNsdWRlICJtdGtfZHJtX2RkcF9jb21wLmgiCisKKyNkZWZpbmUgRElTUF9SRUdfT1ZMX0lO
VEVOCQkJMHgwMDA0CisjZGVmaW5lIE9WTF9GTUVfQ1BMX0lOVAkJCQkJQklUKDEpCisjZGVmaW5l
IERJU1BfUkVHX09WTF9JTlRTVEEJCQkweDAwMDgKKyNkZWZpbmUgRElTUF9SRUdfT1ZMX0VOCQkJ
CTB4MDAwYworI2RlZmluZSBESVNQX1JFR19PVkxfUlNUCQkJMHgwMDE0CisjZGVmaW5lIERJU1Bf
UkVHX09WTF9ST0lfU0laRQkJCTB4MDAyMAorI2RlZmluZSBESVNQX1JFR19PVkxfUk9JX0JHQ0xS
CQkJMHgwMDI4CisjZGVmaW5lIERJU1BfUkVHX09WTF9TUkNfQ09OCQkJMHgwMDJjCisjZGVmaW5l
IERJU1BfUkVHX09WTF9DT04obikJCQkoMHgwMDMwICsgMHgyMCAqIChuKSkKKyNkZWZpbmUgRElT
UF9SRUdfT1ZMX1NSQ19TSVpFKG4pCQkoMHgwMDM4ICsgMHgyMCAqIChuKSkKKyNkZWZpbmUgRElT
UF9SRUdfT1ZMX09GRlNFVChuKQkJCSgweDAwM2MgKyAweDIwICogKG4pKQorI2RlZmluZSBESVNQ
X1JFR19PVkxfUElUQ0gobikJCQkoMHgwMDQ0ICsgMHgyMCAqIChuKSkKKyNkZWZpbmUgRElTUF9S
RUdfT1ZMX1JETUFfQ1RSTChuKQkJKDB4MDBjMCArIDB4MjAgKiAobikpCisjZGVmaW5lIERJU1Bf
UkVHX09WTF9SRE1BX0dNQyhuKQkJKDB4MDBjOCArIDB4MjAgKiAobikpCisjZGVmaW5lIERJU1Bf
UkVHX09WTF9BRERSKG4pCQkJKDB4MGY0MCArIDB4MjAgKiAobikpCisKKyNkZWZpbmUJT1ZMX1JE
TUFfTUVNX0dNQwkweDQwNDAyMDIwCisKKyNkZWZpbmUgT1ZMX0NPTl9CWVRFX1NXQVAJQklUKDI0
KQorI2RlZmluZSBPVkxfQ09OX0NMUkZNVF9SR0I1NjUJKDAgPDwgMTIpCisjZGVmaW5lIE9WTF9D
T05fQ0xSRk1UX1JHQjg4OAkoMSA8PCAxMikKKyNkZWZpbmUgT1ZMX0NPTl9DTFJGTVRfUkdCQTg4
ODgJKDIgPDwgMTIpCisjZGVmaW5lIE9WTF9DT05fQ0xSRk1UX0FSR0I4ODg4CSgzIDw8IDEyKQor
I2RlZmluZQlPVkxfQ09OX0FFTgkJQklUKDgpCisjZGVmaW5lCU9WTF9DT05fQUxQSEEJCTB4ZmYK
KworLyoqCisgKiBzdHJ1Y3QgbXRrX2Rpc3Bfb3ZsIC0gRElTUF9PVkwgZHJpdmVyIHN0cnVjdHVy
ZQorICogQGRkcF9jb21wIC0gc3RydWN0dXJlIGNvbnRhaW5pbmcgdHlwZSBlbnVtIGFuZCBoYXJk
d2FyZSByZXNvdXJjZXMKKyAqIEBjcnRjIC0gYXNzb2NpYXRlZCBjcnRjIHRvIHJlcG9ydCB2Ymxh
bmsgZXZlbnRzIHRvCisgKi8KK3N0cnVjdCBtdGtfZGlzcF9vdmwgeworCXN0cnVjdCBtdGtfZGRw
X2NvbXAJCWRkcF9jb21wOworCXN0cnVjdCBkcm1fY3J0YwkJCSpjcnRjOworfTsKKworc3RhdGlj
IGlycXJldHVybl90IG10a19kaXNwX292bF9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZf
aWQpCit7CisJc3RydWN0IG10a19kaXNwX292bCAqcHJpdiA9IGRldl9pZDsKKwlzdHJ1Y3QgbXRr
X2RkcF9jb21wICpvdmwgPSAmcHJpdi0+ZGRwX2NvbXA7CisKKwkvKiBDbGVhciBmcmFtZSBjb21w
bGV0aW9uIGludGVycnVwdCAqLworCXdyaXRlbCgweDAsIG92bC0+cmVncyArIERJU1BfUkVHX09W
TF9JTlRTVEEpOworCisJaWYgKCFwcml2LT5jcnRjKQorCQlyZXR1cm4gSVJRX05PTkU7CisKKwlt
dGtfY3J0Y19kZHBfaXJxKHByaXYtPmNydGMsIG92bCk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7
Cit9CisKK3N0YXRpYyB2b2lkIG10a19vdmxfZW5hYmxlX3ZibGFuayhzdHJ1Y3QgbXRrX2RkcF9j
b21wICpjb21wLAorCQkJCSAgc3RydWN0IGRybV9jcnRjICpjcnRjKQoreworCXN0cnVjdCBtdGtf
ZGlzcF9vdmwgKnByaXYgPSBjb250YWluZXJfb2YoY29tcCwgc3RydWN0IG10a19kaXNwX292bCwK
KwkJCQkJCSBkZHBfY29tcCk7CisKKwlwcml2LT5jcnRjID0gY3J0YzsKKwl3cml0ZWxfcmVsYXhl
ZChPVkxfRk1FX0NQTF9JTlQsIGNvbXAtPnJlZ3MgKyBESVNQX1JFR19PVkxfSU5URU4pOworfQor
CitzdGF0aWMgdm9pZCBtdGtfb3ZsX2Rpc2FibGVfdmJsYW5rKHN0cnVjdCBtdGtfZGRwX2NvbXAg
KmNvbXApCit7CisJc3RydWN0IG10a19kaXNwX292bCAqcHJpdiA9IGNvbnRhaW5lcl9vZihjb21w
LCBzdHJ1Y3QgbXRrX2Rpc3Bfb3ZsLAorCQkJCQkJIGRkcF9jb21wKTsKKworCXByaXYtPmNydGMg
PSBOVUxMOworCXdyaXRlbF9yZWxheGVkKDB4MCwgY29tcC0+cmVncyArIERJU1BfUkVHX09WTF9J
TlRFTik7Cit9CisKK3N0YXRpYyB2b2lkIG10a19vdmxfc3RhcnQoc3RydWN0IG10a19kZHBfY29t
cCAqY29tcCkKK3sKKwl3cml0ZWxfcmVsYXhlZCgweDEsIGNvbXAtPnJlZ3MgKyBESVNQX1JFR19P
VkxfRU4pOworfQorCitzdGF0aWMgdm9pZCBtdGtfb3ZsX3N0b3Aoc3RydWN0IG10a19kZHBfY29t
cCAqY29tcCkKK3sKKwl3cml0ZWxfcmVsYXhlZCgweDAsIGNvbXAtPnJlZ3MgKyBESVNQX1JFR19P
VkxfRU4pOworfQorCitzdGF0aWMgdm9pZCBtdGtfb3ZsX2NvbmZpZyhzdHJ1Y3QgbXRrX2RkcF9j
b21wICpjb21wLCB1bnNpZ25lZCBpbnQgdywKKwkJCSAgIHVuc2lnbmVkIGludCBoLCB1bnNpZ25l
ZCBpbnQgdnJlZnJlc2gpCit7CisJaWYgKHcgIT0gMCAmJiBoICE9IDApCisJCXdyaXRlbF9yZWxh
eGVkKGggPDwgMTYgfCB3LCBjb21wLT5yZWdzICsgRElTUF9SRUdfT1ZMX1JPSV9TSVpFKTsKKwl3
cml0ZWxfcmVsYXhlZCgweDAsIGNvbXAtPnJlZ3MgKyBESVNQX1JFR19PVkxfUk9JX0JHQ0xSKTsK
KworCXdyaXRlbCgweDEsIGNvbXAtPnJlZ3MgKyBESVNQX1JFR19PVkxfUlNUKTsKKwl3cml0ZWwo
MHgwLCBjb21wLT5yZWdzICsgRElTUF9SRUdfT1ZMX1JTVCk7Cit9CisKK3N0YXRpYyB2b2lkIG10
a19vdmxfbGF5ZXJfb24oc3RydWN0IG10a19kZHBfY29tcCAqY29tcCwgdW5zaWduZWQgaW50IGlk
eCkKK3sKKwl1bnNpZ25lZCBpbnQgcmVnOworCisJd3JpdGVsKDB4MSwgY29tcC0+cmVncyArIERJ
U1BfUkVHX09WTF9SRE1BX0NUUkwoaWR4KSk7CisJd3JpdGVsKE9WTF9SRE1BX01FTV9HTUMsIGNv
bXAtPnJlZ3MgKyBESVNQX1JFR19PVkxfUkRNQV9HTUMoaWR4KSk7CisKKwlyZWcgPSByZWFkbChj
b21wLT5yZWdzICsgRElTUF9SRUdfT1ZMX1NSQ19DT04pOworCXJlZyA9IHJlZyB8IEJJVChpZHgp
OworCXdyaXRlbChyZWcsIGNvbXAtPnJlZ3MgKyBESVNQX1JFR19PVkxfU1JDX0NPTik7Cit9CisK
K3N0YXRpYyB2b2lkIG10a19vdmxfbGF5ZXJfb2ZmKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAs
IHVuc2lnbmVkIGludCBpZHgpCit7CisJdW5zaWduZWQgaW50IHJlZzsKKworCXJlZyA9IHJlYWRs
KGNvbXAtPnJlZ3MgKyBESVNQX1JFR19PVkxfU1JDX0NPTik7CisJcmVnID0gcmVnICYgfkJJVChp
ZHgpOworCXdyaXRlbChyZWcsIGNvbXAtPnJlZ3MgKyBESVNQX1JFR19PVkxfU1JDX0NPTik7CisK
Kwl3cml0ZWwoMHgwLCBjb21wLT5yZWdzICsgRElTUF9SRUdfT1ZMX1JETUFfQ1RSTChpZHgpKTsK
K30KKworc3RhdGljIHVuc2lnbmVkIGludCBvdmxfZm10X2NvbnZlcnQodW5zaWduZWQgaW50IGZt
dCkKK3sKKwlzd2l0Y2ggKGZtdCkgeworCWRlZmF1bHQ6CisJY2FzZSBEUk1fRk9STUFUX1JHQjU2
NToKKwkJcmV0dXJuIE9WTF9DT05fQ0xSRk1UX1JHQjU2NTsKKwljYXNlIERSTV9GT1JNQVRfQkdS
NTY1OgorCQlyZXR1cm4gT1ZMX0NPTl9DTFJGTVRfUkdCNTY1IHwgT1ZMX0NPTl9CWVRFX1NXQVA7
CisJY2FzZSBEUk1fRk9STUFUX1JHQjg4ODoKKwkJcmV0dXJuIE9WTF9DT05fQ0xSRk1UX1JHQjg4
ODsKKwljYXNlIERSTV9GT1JNQVRfQkdSODg4OgorCQlyZXR1cm4gT1ZMX0NPTl9DTFJGTVRfUkdC
ODg4IHwgT1ZMX0NPTl9CWVRFX1NXQVA7CisJY2FzZSBEUk1fRk9STUFUX1JHQlg4ODg4OgorCWNh
c2UgRFJNX0ZPUk1BVF9SR0JBODg4ODoKKwkJcmV0dXJuIE9WTF9DT05fQ0xSRk1UX0FSR0I4ODg4
OworCWNhc2UgRFJNX0ZPUk1BVF9CR1JYODg4ODoKKwljYXNlIERSTV9GT1JNQVRfQkdSQTg4ODg6
CisJCXJldHVybiBPVkxfQ09OX0NMUkZNVF9BUkdCODg4OCB8IE9WTF9DT05fQllURV9TV0FQOwor
CWNhc2UgRFJNX0ZPUk1BVF9YUkdCODg4ODoKKwljYXNlIERSTV9GT1JNQVRfQVJHQjg4ODg6CisJ
CXJldHVybiBPVkxfQ09OX0NMUkZNVF9SR0JBODg4ODsKKwljYXNlIERSTV9GT1JNQVRfWEJHUjg4
ODg6CisJY2FzZSBEUk1fRk9STUFUX0FCR1I4ODg4OgorCQlyZXR1cm4gT1ZMX0NPTl9DTFJGTVRf
UkdCQTg4ODggfCBPVkxfQ09OX0JZVEVfU1dBUDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIG10a19v
dmxfbGF5ZXJfY29uZmlnKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAsIHVuc2lnbmVkIGludCBp
ZHgsCisJCQkJIHN0cnVjdCBtdGtfcGxhbmVfc3RhdGUgKnN0YXRlKQoreworCXN0cnVjdCBtdGtf
cGxhbmVfcGVuZGluZ19zdGF0ZSAqcGVuZGluZyA9ICZzdGF0ZS0+cGVuZGluZzsKKwl1bnNpZ25l
ZCBpbnQgYWRkciA9IHBlbmRpbmctPmFkZHI7CisJdW5zaWduZWQgaW50IHBpdGNoID0gcGVuZGlu
Zy0+cGl0Y2ggJiAweGZmZmY7CisJdW5zaWduZWQgaW50IGZtdCA9IHBlbmRpbmctPmZvcm1hdDsK
Kwl1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gKHBlbmRpbmctPnkgPDwgMTYpIHwgcGVuZGluZy0+eDsK
Kwl1bnNpZ25lZCBpbnQgc3JjX3NpemUgPSAocGVuZGluZy0+aGVpZ2h0IDw8IDE2KSB8IHBlbmRp
bmctPndpZHRoOworCXVuc2lnbmVkIGludCBjb247CisKKwlpZiAoIXBlbmRpbmctPmVuYWJsZSkK
KwkJbXRrX292bF9sYXllcl9vZmYoY29tcCwgaWR4KTsKKworCWNvbiA9IG92bF9mbXRfY29udmVy
dChmbXQpOworCWlmIChpZHggIT0gMCkKKwkJY29uIHw9IE9WTF9DT05fQUVOIHwgT1ZMX0NPTl9B
TFBIQTsKKworCXdyaXRlbF9yZWxheGVkKGNvbiwgY29tcC0+cmVncyArIERJU1BfUkVHX09WTF9D
T04oaWR4KSk7CisJd3JpdGVsX3JlbGF4ZWQocGl0Y2gsIGNvbXAtPnJlZ3MgKyBESVNQX1JFR19P
VkxfUElUQ0goaWR4KSk7CisJd3JpdGVsX3JlbGF4ZWQoc3JjX3NpemUsIGNvbXAtPnJlZ3MgKyBE
SVNQX1JFR19PVkxfU1JDX1NJWkUoaWR4KSk7CisJd3JpdGVsX3JlbGF4ZWQob2Zmc2V0LCBjb21w
LT5yZWdzICsgRElTUF9SRUdfT1ZMX09GRlNFVChpZHgpKTsKKwl3cml0ZWxfcmVsYXhlZChhZGRy
LCBjb21wLT5yZWdzICsgRElTUF9SRUdfT1ZMX0FERFIoaWR4KSk7CisKKwlpZiAocGVuZGluZy0+
ZW5hYmxlKQorCQltdGtfb3ZsX2xheWVyX29uKGNvbXAsIGlkeCk7Cit9CisKK3N0YXRpYyBjb25z
dCBzdHJ1Y3QgbXRrX2RkcF9jb21wX2Z1bmNzIG10a19kaXNwX292bF9mdW5jcyA9IHsKKwkuY29u
ZmlnID0gbXRrX292bF9jb25maWcsCisJLnN0YXJ0ID0gbXRrX292bF9zdGFydCwKKwkuc3RvcCA9
IG10a19vdmxfc3RvcCwKKwkuZW5hYmxlX3ZibGFuayA9IG10a19vdmxfZW5hYmxlX3ZibGFuaywK
KwkuZGlzYWJsZV92YmxhbmsgPSBtdGtfb3ZsX2Rpc2FibGVfdmJsYW5rLAorCS5sYXllcl9vbiA9
IG10a19vdmxfbGF5ZXJfb24sCisJLmxheWVyX29mZiA9IG10a19vdmxfbGF5ZXJfb2ZmLAorCS5s
YXllcl9jb25maWcgPSBtdGtfb3ZsX2xheWVyX2NvbmZpZywKK307CisKK3N0YXRpYyBpbnQgbXRr
X2Rpc3Bfb3ZsX2JpbmQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIs
CisJCQkgICAgIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IG10a19kaXNwX292bCAqcHJpdiA9IGRl
dl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm1fZGV2ID0gZGF0YTsK
KwlpbnQgcmV0OworCisJcmV0ID0gbXRrX2RkcF9jb21wX3JlZ2lzdGVyKGRybV9kZXYsICZwcml2
LT5kZHBfY29tcCk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8g
cmVnaXN0ZXIgY29tcG9uZW50ICVzOiAlZFxuIiwKKwkJCWRldi0+b2Zfbm9kZS0+ZnVsbF9uYW1l
LCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9p
ZCBtdGtfZGlzcF9vdmxfdW5iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAq
bWFzdGVyLAorCQkJCXZvaWQgKmRhdGEpCit7CisJc3RydWN0IG10a19kaXNwX292bCAqcHJpdiA9
IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm1fZGV2ID0gZGF0
YTsKKworCW10a19kZHBfY29tcF91bnJlZ2lzdGVyKGRybV9kZXYsICZwcml2LT5kZHBfY29tcCk7
Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tcG9uZW50X29wcyBtdGtfZGlzcF9vdmxfY29t
cG9uZW50X29wcyA9IHsKKwkuYmluZAk9IG10a19kaXNwX292bF9iaW5kLAorCS51bmJpbmQgPSBt
dGtfZGlzcF9vdmxfdW5iaW5kLAorfTsKKworc3RhdGljIGludCBtdGtfZGlzcF9vdmxfcHJvYmUo
c3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAm
cGRldi0+ZGV2OworCXN0cnVjdCBtdGtfZGlzcF9vdmwgKnByaXY7CisJaW50IGNvbXBfaWQ7CisJ
aW50IGlycTsKKwlpbnQgcmV0OworCisJcHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigq
cHJpdiksIEdGUF9LRVJORUwpOworCWlmICghcHJpdikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlp
cnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlmIChpcnEgPCAwKQorCQlyZXR1cm4g
aXJxOworCisJcmV0ID0gZGV2bV9yZXF1ZXN0X2lycShkZXYsIGlycSwgbXRrX2Rpc3Bfb3ZsX2ly
cV9oYW5kbGVyLAorCQkJICAgICAgIElSUUZfVFJJR0dFUl9OT05FLCBkZXZfbmFtZShkZXYpLCBw
cml2KTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byByZXF1ZXN0
IGlycSAlZDogJWRcbiIsIGlycSwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwljb21wX2lk
ID0gbXRrX2RkcF9jb21wX2dldF9pZChkZXYtPm9mX25vZGUsIE1US19ESVNQX09WTCk7CisJaWYg
KGNvbXBfaWQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGlkZW50aWZ5IGJ5IGFs
aWFzOiAlZFxuIiwgY29tcF9pZCk7CisJCXJldHVybiBjb21wX2lkOworCX0KKworCXJldCA9IG10
a19kZHBfY29tcF9pbml0KGRldiwgZGV2LT5vZl9ub2RlLCAmcHJpdi0+ZGRwX2NvbXAsIGNvbXBf
aWQsCisJCQkJJm10a19kaXNwX292bF9mdW5jcyk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRl
diwgIkZhaWxlZCB0byBpbml0aWFsaXplIGNvbXBvbmVudDogJWRcbiIsIHJldCk7CisJCXJldHVy
biByZXQ7CisJfQorCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcHJpdik7CisKKwlyZXQg
PSBjb21wb25lbnRfYWRkKGRldiwgJm10a19kaXNwX292bF9jb21wb25lbnRfb3BzKTsKKwlpZiAo
cmV0KQorCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBhZGQgY29tcG9uZW50OiAlZFxuIiwgcmV0
KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2Rpc3Bfb3ZsX3JlbW92ZShz
dHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWNvbXBvbmVudF9kZWwoJnBkZXYtPmRl
diwgJm10a19kaXNwX292bF9jb21wb25lbnRfb3BzKTsKKworCXJldHVybiAwOworfQorCitzdGF0
aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtdGtfZGlzcF9vdmxfZHJpdmVyX2R0X21hdGNo
W10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtZGlzcC1vdmwiLCB9LAor
CXt9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIG10a19kaXNwX292bF9kcml2ZXJfZHRf
bWF0Y2gpOworCitzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10a19kaXNwX292bF9kcml2ZXIgPSB7
CisJLnByb2JlCQk9IG10a19kaXNwX292bF9wcm9iZSwKKwkucmVtb3ZlCQk9IG10a19kaXNwX292
bF9yZW1vdmUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gIm1lZGlhdGVrLWRpc3Atb3ZsIiwK
KwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJCS5vZl9tYXRjaF90YWJsZSA9IG10a19kaXNwX292
bF9kcml2ZXJfZHRfbWF0Y2gsCisJfSwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v
bWVkaWF0ZWsvbXRrX2Rpc3BfcmRtYS5jIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19k
aXNwX3JkbWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZmI4MGNiCi0t
LSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kaXNwX3JkbWEu
YwpAQCAtMCwwICsxLDI0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJ
bmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICov
CisKKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1
ZGUgPGxpbnV4L2NvbXBvbmVudC5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgorI2lu
Y2x1ZGUgPGxpbnV4L29mX2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5o
PgorCisjaW5jbHVkZSAibXRrX2RybV9jcnRjLmgiCisjaW5jbHVkZSAibXRrX2RybV9kZHBfY29t
cC5oIgorCisjZGVmaW5lIERJU1BfUkVHX1JETUFfSU5UX0VOQUJMRQkJMHgwMDAwCisjZGVmaW5l
IERJU1BfUkVHX1JETUFfSU5UX1NUQVRVUwkJMHgwMDA0CisjZGVmaW5lIFJETUFfVEFSR0VUX0xJ
TkVfSU5UCQkJCUJJVCg1KQorI2RlZmluZSBSRE1BX0ZJRk9fVU5ERVJGTE9XX0lOVAkJCQlCSVQo
NCkKKyNkZWZpbmUgUkRNQV9FT0ZfQUJOT1JNQUxfSU5UCQkJCUJJVCgzKQorI2RlZmluZSBSRE1B
X0ZSQU1FX0VORF9JTlQJCQkJQklUKDIpCisjZGVmaW5lIFJETUFfRlJBTUVfU1RBUlRfSU5UCQkJ
CUJJVCgxKQorI2RlZmluZSBSRE1BX1JFR19VUERBVEVfSU5UCQkJCUJJVCgwKQorI2RlZmluZSBE
SVNQX1JFR19SRE1BX0dMT0JBTF9DT04JCTB4MDAxMAorI2RlZmluZSBSRE1BX0VOR0lORV9FTgkJ
CQkJQklUKDApCisjZGVmaW5lIERJU1BfUkVHX1JETUFfU0laRV9DT05fMAkJMHgwMDE0CisjZGVm
aW5lIERJU1BfUkVHX1JETUFfU0laRV9DT05fMQkJMHgwMDE4CisjZGVmaW5lIERJU1BfUkVHX1JE
TUFfVEFSR0VUX0xJTkUJCTB4MDAxYworI2RlZmluZSBESVNQX1JFR19SRE1BX0ZJRk9fQ09OCQkJ
MHgwMDQwCisjZGVmaW5lIFJETUFfRklGT19VTkRFUkZMT1dfRU4JCQkJQklUKDMxKQorI2RlZmlu
ZSBSRE1BX0ZJRk9fUFNFVURPX1NJWkUoYnl0ZXMpCQkJKCgoYnl0ZXMpIC8gMTYpIDw8IDE2KQor
I2RlZmluZSBSRE1BX09VVFBVVF9WQUxJRF9GSUZPX1RIUkVTSE9MRChieXRlcykJCSgoYnl0ZXMp
IC8gMTYpCisKKy8qKgorICogc3RydWN0IG10a19kaXNwX3JkbWEgLSBESVNQX1JETUEgZHJpdmVy
IHN0cnVjdHVyZQorICogQGRkcF9jb21wIC0gc3RydWN0dXJlIGNvbnRhaW5pbmcgdHlwZSBlbnVt
IGFuZCBoYXJkd2FyZSByZXNvdXJjZXMKKyAqIEBjcnRjIC0gYXNzb2NpYXRlZCBjcnRjIHRvIHJl
cG9ydCBpcnEgZXZlbnRzIHRvCisgKi8KK3N0cnVjdCBtdGtfZGlzcF9yZG1hIHsKKwlzdHJ1Y3Qg
bXRrX2RkcF9jb21wCQlkZHBfY29tcDsKKwlzdHJ1Y3QgZHJtX2NydGMJCQkqY3J0YzsKK307CisK
K3N0YXRpYyBpcnFyZXR1cm5fdCBtdGtfZGlzcF9yZG1hX2lycV9oYW5kbGVyKGludCBpcnEsIHZv
aWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgbXRrX2Rpc3BfcmRtYSAqcHJpdiA9IGRldl9pZDsKKwlz
dHJ1Y3QgbXRrX2RkcF9jb21wICpyZG1hID0gJnByaXYtPmRkcF9jb21wOworCisJLyogQ2xlYXIg
ZnJhbWUgY29tcGxldGlvbiBpbnRlcnJ1cHQgKi8KKwl3cml0ZWwoMHgwLCByZG1hLT5yZWdzICsg
RElTUF9SRUdfUkRNQV9JTlRfU1RBVFVTKTsKKworCWlmICghcHJpdi0+Y3J0YykKKwkJcmV0dXJu
IElSUV9OT05FOworCisJbXRrX2NydGNfZGRwX2lycShwcml2LT5jcnRjLCByZG1hKTsKKworCXJl
dHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHZvaWQgcmRtYV91cGRhdGVfYml0cyhzdHJ1
Y3QgbXRrX2RkcF9jb21wICpjb21wLCB1bnNpZ25lZCBpbnQgcmVnLAorCQkJICAgICB1bnNpZ25l
ZCBpbnQgbWFzaywgdW5zaWduZWQgaW50IHZhbCkKK3sKKwl1bnNpZ25lZCBpbnQgdG1wID0gcmVh
ZGwoY29tcC0+cmVncyArIHJlZyk7CisKKwl0bXAgPSAodG1wICYgfm1hc2spIHwgKHZhbCAmIG1h
c2spOworCXdyaXRlbCh0bXAsIGNvbXAtPnJlZ3MgKyByZWcpOworfQorCitzdGF0aWMgdm9pZCBt
dGtfcmRtYV9lbmFibGVfdmJsYW5rKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAsCisJCQkJICAg
c3RydWN0IGRybV9jcnRjICpjcnRjKQoreworCXN0cnVjdCBtdGtfZGlzcF9yZG1hICpwcml2ID0g
Y29udGFpbmVyX29mKGNvbXAsIHN0cnVjdCBtdGtfZGlzcF9yZG1hLAorCQkJCQkJICBkZHBfY29t
cCk7CisKKwlwcml2LT5jcnRjID0gY3J0YzsKKwlyZG1hX3VwZGF0ZV9iaXRzKGNvbXAsIERJU1Bf
UkVHX1JETUFfSU5UX0VOQUJMRSwgUkRNQV9GUkFNRV9FTkRfSU5ULAorCQkJIFJETUFfRlJBTUVf
RU5EX0lOVCk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19yZG1hX2Rpc2FibGVfdmJsYW5rKHN0cnVj
dCBtdGtfZGRwX2NvbXAgKmNvbXApCit7CisJc3RydWN0IG10a19kaXNwX3JkbWEgKnByaXYgPSBj
b250YWluZXJfb2YoY29tcCwgc3RydWN0IG10a19kaXNwX3JkbWEsCisJCQkJCQkgIGRkcF9jb21w
KTsKKworCXByaXYtPmNydGMgPSBOVUxMOworCXJkbWFfdXBkYXRlX2JpdHMoY29tcCwgRElTUF9S
RUdfUkRNQV9JTlRfRU5BQkxFLCBSRE1BX0ZSQU1FX0VORF9JTlQsIDApOworfQorCitzdGF0aWMg
dm9pZCBtdGtfcmRtYV9zdGFydChzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKQoreworCXJkbWFf
dXBkYXRlX2JpdHMoY29tcCwgRElTUF9SRUdfUkRNQV9HTE9CQUxfQ09OLCBSRE1BX0VOR0lORV9F
TiwKKwkJCSBSRE1BX0VOR0lORV9FTik7Cit9CisKK3N0YXRpYyB2b2lkIG10a19yZG1hX3N0b3Ao
c3RydWN0IG10a19kZHBfY29tcCAqY29tcCkKK3sKKwlyZG1hX3VwZGF0ZV9iaXRzKGNvbXAsIERJ
U1BfUkVHX1JETUFfR0xPQkFMX0NPTiwgUkRNQV9FTkdJTkVfRU4sIDApOworfQorCitzdGF0aWMg
dm9pZCBtdGtfcmRtYV9jb25maWcoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCwgdW5zaWduZWQg
aW50IHdpZHRoLAorCQkJICAgIHVuc2lnbmVkIGludCBoZWlnaHQsIHVuc2lnbmVkIGludCB2cmVm
cmVzaCkKK3sKKwl1bnNpZ25lZCBpbnQgdGhyZXNob2xkOworCXVuc2lnbmVkIGludCByZWc7CisK
KwlyZG1hX3VwZGF0ZV9iaXRzKGNvbXAsIERJU1BfUkVHX1JETUFfU0laRV9DT05fMCwgMHhmZmYs
IHdpZHRoKTsKKwlyZG1hX3VwZGF0ZV9iaXRzKGNvbXAsIERJU1BfUkVHX1JETUFfU0laRV9DT05f
MSwgMHhmZmZmZiwgaGVpZ2h0KTsKKworCS8qCisJICogRW5hYmxlIEZJRk8gdW5kZXJmbG93IHNp
bmNlIERTSSBhbmQgRFBJIGNhbid0IGJlIGJsb2NrZWQuCisJICogS2VlcCB0aGUgRklGTyBwc2V1
ZG8gc2l6ZSByZXNldCBkZWZhdWx0IG9mIDggS2lCLiBTZXQgdGhlCisJICogb3V0cHV0IHRocmVz
aG9sZCB0byA2IG1pY3Jvc2Vjb25kcyB3aXRoIDcvNiBvdmVyaGVhZCB0bworCSAqIGFjY291bnQg
Zm9yIGJsYW5raW5nLCBhbmQgd2l0aCBhIHBpeGVsIGRlcHRoIG9mIDQgYnl0ZXM6CisJICovCisJ
dGhyZXNob2xkID0gd2lkdGggKiBoZWlnaHQgKiB2cmVmcmVzaCAqIDQgKiA3IC8gMTAwMDAwMDsK
KwlyZWcgPSBSRE1BX0ZJRk9fVU5ERVJGTE9XX0VOIHwKKwkgICAgICBSRE1BX0ZJRk9fUFNFVURP
X1NJWkUoU1pfOEspIHwKKwkgICAgICBSRE1BX09VVFBVVF9WQUxJRF9GSUZPX1RIUkVTSE9MRCh0
aHJlc2hvbGQpOworCXdyaXRlbChyZWcsIGNvbXAtPnJlZ3MgKyBESVNQX1JFR19SRE1BX0ZJRk9f
Q09OKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBtdGtfZGRwX2NvbXBfZnVuY3MgbXRrX2Rp
c3BfcmRtYV9mdW5jcyA9IHsKKwkuY29uZmlnID0gbXRrX3JkbWFfY29uZmlnLAorCS5zdGFydCA9
IG10a19yZG1hX3N0YXJ0LAorCS5zdG9wID0gbXRrX3JkbWFfc3RvcCwKKwkuZW5hYmxlX3ZibGFu
ayA9IG10a19yZG1hX2VuYWJsZV92YmxhbmssCisJLmRpc2FibGVfdmJsYW5rID0gbXRrX3JkbWFf
ZGlzYWJsZV92YmxhbmssCit9OworCitzdGF0aWMgaW50IG10a19kaXNwX3JkbWFfYmluZChzdHJ1
Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3RlciwKKwkJCSAgICAgIHZvaWQgKmRh
dGEpCit7CisJc3RydWN0IG10a19kaXNwX3JkbWEgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2
KTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtX2RldiA9IGRhdGE7CisJaW50IHJldDsKKworCXJl
dCA9IG10a19kZHBfY29tcF9yZWdpc3Rlcihkcm1fZGV2LCAmcHJpdi0+ZGRwX2NvbXApOworCWlm
IChyZXQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIGNvbXBvbmVu
dCAlczogJWRcbiIsCisJCQlkZXYtPm9mX25vZGUtPmZ1bGxfbmFtZSwgcmV0KTsKKwkJcmV0dXJu
IHJldDsKKwl9CisKKwlyZXR1cm4gMDsKKworfQorCitzdGF0aWMgdm9pZCBtdGtfZGlzcF9yZG1h
X3VuYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3RlciwKKwkJCQkg
dm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgbXRrX2Rpc3BfcmRtYSAqcHJpdiA9IGRldl9nZXRfZHJ2
ZGF0YShkZXYpOworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm1fZGV2ID0gZGF0YTsKKworCW10a19k
ZHBfY29tcF91bnJlZ2lzdGVyKGRybV9kZXYsICZwcml2LT5kZHBfY29tcCk7Cit9CisKK3N0YXRp
YyBjb25zdCBzdHJ1Y3QgY29tcG9uZW50X29wcyBtdGtfZGlzcF9yZG1hX2NvbXBvbmVudF9vcHMg
PSB7CisJLmJpbmQJPSBtdGtfZGlzcF9yZG1hX2JpbmQsCisJLnVuYmluZCA9IG10a19kaXNwX3Jk
bWFfdW5iaW5kLAorfTsKKworc3RhdGljIGludCBtdGtfZGlzcF9yZG1hX3Byb2JlKHN0cnVjdCBw
bGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRl
djsKKwlzdHJ1Y3QgbXRrX2Rpc3BfcmRtYSAqcHJpdjsKKwlpbnQgY29tcF9pZDsKKwlpbnQgaXJx
OworCWludCByZXQ7CisKKwlwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwg
R0ZQX0tFUk5FTCk7CisJaWYgKCFwcml2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlycSA9IHBs
YXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKGlycSA8IDApCisJCXJldHVybiBpcnE7CisK
Kwljb21wX2lkID0gbXRrX2RkcF9jb21wX2dldF9pZChkZXYtPm9mX25vZGUsIE1US19ESVNQX1JE
TUEpOworCWlmIChjb21wX2lkIDwgMCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBpZGVu
dGlmeSBieSBhbGlhczogJWRcbiIsIGNvbXBfaWQpOworCQlyZXR1cm4gY29tcF9pZDsKKwl9CisK
KwlyZXQgPSBtdGtfZGRwX2NvbXBfaW5pdChkZXYsIGRldi0+b2Zfbm9kZSwgJnByaXYtPmRkcF9j
b21wLCBjb21wX2lkLAorCQkJCSZtdGtfZGlzcF9yZG1hX2Z1bmNzKTsKKwlpZiAocmV0KSB7CisJ
CWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGluaXRpYWxpemUgY29tcG9uZW50OiAlZFxuIiwgcmV0
KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBEaXNhYmxlIGFuZCBjbGVhciBwZW5kaW5nIGlu
dGVycnVwdHMgKi8KKwl3cml0ZWwoMHgwLCBwcml2LT5kZHBfY29tcC5yZWdzICsgRElTUF9SRUdf
UkRNQV9JTlRfRU5BQkxFKTsKKwl3cml0ZWwoMHgwLCBwcml2LT5kZHBfY29tcC5yZWdzICsgRElT
UF9SRUdfUkRNQV9JTlRfU1RBVFVTKTsKKworCXJldCA9IGRldm1fcmVxdWVzdF9pcnEoZGV2LCBp
cnEsIG10a19kaXNwX3JkbWFfaXJxX2hhbmRsZXIsCisJCQkgICAgICAgSVJRRl9UUklHR0VSX05P
TkUsIGRldl9uYW1lKGRldiksIHByaXYpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZGV2
LCAiRmFpbGVkIHRvIHJlcXVlc3QgaXJxICVkOiAlZFxuIiwgaXJxLCByZXQpOworCQlyZXR1cm4g
cmV0OworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHByaXYpOworCisJcmV0ID0g
Y29tcG9uZW50X2FkZChkZXYsICZtdGtfZGlzcF9yZG1hX2NvbXBvbmVudF9vcHMpOworCWlmIChy
ZXQpCisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGFkZCBjb21wb25lbnQ6ICVkXG4iLCByZXQp
OworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBtdGtfZGlzcF9yZG1hX3JlbW92ZShz
dHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWNvbXBvbmVudF9kZWwoJnBkZXYtPmRl
diwgJm10a19kaXNwX3JkbWFfY29tcG9uZW50X29wcyk7CisKKwlyZXR1cm4gMDsKK30KKworc3Rh
dGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbXRrX2Rpc3BfcmRtYV9kcml2ZXJfZHRfbWF0
Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1kaXNwLXJkbWEiLCB9
LAorCXt9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIG10a19kaXNwX3JkbWFfZHJpdmVy
X2R0X21hdGNoKTsKKworc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdGtfZGlzcF9yZG1hX2RyaXZl
ciA9IHsKKwkucHJvYmUJCT0gbXRrX2Rpc3BfcmRtYV9wcm9iZSwKKwkucmVtb3ZlCQk9IG10a19k
aXNwX3JkbWFfcmVtb3ZlLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJtZWRpYXRlay1kaXNw
LXJkbWEiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwkJLm9mX21hdGNoX3RhYmxlID0gbXRr
X2Rpc3BfcmRtYV9kcml2ZXJfZHRfbWF0Y2gsCisJfSwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJz
L2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9jcnRjLmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0
ZWsvbXRrX2RybV9jcnRjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjhj
YjZjNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJt
X2NydGMuYwpAQCAtMCwwICsxLDU4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRp
YVRlayBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICovCisKKyNpbmNsdWRlIDxhc20vYmFycmllci5oPgorI2luY2x1ZGUgPGRybS9kcm1QLmg+
CisjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9j
cnRjX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fcGxhbmVfaGVscGVyLmg+CisjaW5jbHVk
ZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgorI2luY2x1ZGUg
PHNvYy9tZWRpYXRlay9zbWkuaD4KKworI2luY2x1ZGUgIm10a19kcm1fZHJ2LmgiCisjaW5jbHVk
ZSAibXRrX2RybV9jcnRjLmgiCisjaW5jbHVkZSAibXRrX2RybV9kZHAuaCIKKyNpbmNsdWRlICJt
dGtfZHJtX2RkcF9jb21wLmgiCisjaW5jbHVkZSAibXRrX2RybV9nZW0uaCIKKyNpbmNsdWRlICJt
dGtfZHJtX3BsYW5lLmgiCisKKy8qKgorICogc3RydWN0IG10a19kcm1fY3J0YyAtIE1lZGlhVGVr
IHNwZWNpZmljIGNydGMgc3RydWN0dXJlLgorICogQGJhc2U6IGNydGMgb2JqZWN0LgorICogQGVu
YWJsZWQ6IHJlY29yZHMgd2hldGhlciBjcnRjX2VuYWJsZSBzdWNjZWVkZWQKKyAqIEBwbGFuZXM6
IGFycmF5IG9mIDQgbXRrX2RybV9wbGFuZSBzdHJ1Y3R1cmVzLCBvbmUgZm9yIGVhY2ggb3Zlcmxh
eSBwbGFuZQorICogQHBlbmRpbmdfcGxhbmVzOiB3aGV0aGVyIGFueSBwbGFuZSBoYXMgcGVuZGlu
ZyBjaGFuZ2VzIHRvIGJlIGFwcGxpZWQKKyAqIEBjb25maWdfcmVnczogbWVtb3J5IG1hcHBlZCBt
bXN5cyBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIHNwYWNlCisgKiBAbXV0ZXg6IGhhbmRsZSB0byBv
bmUgb2YgdGhlIHRlbiBkaXNwX211dGV4IHN0cmVhbXMKKyAqIEBkZHBfY29tcF9ucjogbnVtYmVy
IG9mIGNvbXBvbmVudHMgaW4gZGRwX2NvbXAKKyAqIEBkZHBfY29tcDogYXJyYXkgb2YgcG9pbnRl
cnMgdGhlIG10a19kZHBfY29tcCBzdHJ1Y3R1cmVzIHVzZWQgYnkgdGhpcyBjcnRjCisgKi8KK3N0
cnVjdCBtdGtfZHJtX2NydGMgeworCXN0cnVjdCBkcm1fY3J0YwkJCWJhc2U7CisJYm9vbAkJCQll
bmFibGVkOworCisJYm9vbAkJCQlwZW5kaW5nX25lZWRzX3ZibGFuazsKKwlzdHJ1Y3QgZHJtX3Bl
bmRpbmdfdmJsYW5rX2V2ZW50CSpldmVudDsKKworCXN0cnVjdCBtdGtfZHJtX3BsYW5lCQlwbGFu
ZXNbT1ZMX0xBWUVSX05SXTsKKwlib29sCQkJCXBlbmRpbmdfcGxhbmVzOworCisJdm9pZCBfX2lv
bWVtCQkJKmNvbmZpZ19yZWdzOworCXN0cnVjdCBtdGtfZGlzcF9tdXRleAkJKm11dGV4OworCXVu
c2lnbmVkIGludAkJCWRkcF9jb21wX25yOworCXN0cnVjdCBtdGtfZGRwX2NvbXAJCSoqZGRwX2Nv
bXA7Cit9OworCitzdHJ1Y3QgbXRrX2NydGNfc3RhdGUgeworCXN0cnVjdCBkcm1fY3J0Y19zdGF0
ZQkJYmFzZTsKKworCWJvb2wJCQkJcGVuZGluZ19jb25maWc7CisJdW5zaWduZWQgaW50CQkJcGVu
ZGluZ193aWR0aDsKKwl1bnNpZ25lZCBpbnQJCQlwZW5kaW5nX2hlaWdodDsKKwl1bnNpZ25lZCBp
bnQJCQlwZW5kaW5nX3ZyZWZyZXNoOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbXRrX2Ry
bV9jcnRjICp0b19tdGtfY3J0YyhzdHJ1Y3QgZHJtX2NydGMgKmMpCit7CisJcmV0dXJuIGNvbnRh
aW5lcl9vZihjLCBzdHJ1Y3QgbXRrX2RybV9jcnRjLCBiYXNlKTsKK30KKworc3RhdGljIGlubGlu
ZSBzdHJ1Y3QgbXRrX2NydGNfc3RhdGUgKnRvX210a19jcnRjX3N0YXRlKHN0cnVjdCBkcm1fY3J0
Y19zdGF0ZSAqcykKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHMsIHN0cnVjdCBtdGtfY3J0Y19z
dGF0ZSwgYmFzZSk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcm1fY3J0Y19maW5pc2hfcGFnZV9m
bGlwKHN0cnVjdCBtdGtfZHJtX2NydGMgKm10a19jcnRjKQoreworCXN0cnVjdCBkcm1fY3J0YyAq
Y3J0YyA9ICZtdGtfY3J0Yy0+YmFzZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9s
b2NrX2lycXNhdmUoJmNydGMtPmRldi0+ZXZlbnRfbG9jaywgZmxhZ3MpOworCWRybV9zZW5kX3Zi
bGFua19ldmVudChjcnRjLT5kZXYsIG10a19jcnRjLT5ldmVudC0+cGlwZSwgbXRrX2NydGMtPmV2
ZW50KTsKKwlkcm1fY3J0Y192YmxhbmtfcHV0KGNydGMpOworCW10a19jcnRjLT5ldmVudCA9IE5V
TEw7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3J0Yy0+ZGV2LT5ldmVudF9sb2NrLCBmbGFn
cyk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcm1fZmluaXNoX3BhZ2VfZmxpcChzdHJ1Y3QgbXRr
X2RybV9jcnRjICptdGtfY3J0YykKK3sKKwlkcm1fY3J0Y19oYW5kbGVfdmJsYW5rKCZtdGtfY3J0
Yy0+YmFzZSk7CisJaWYgKG10a19jcnRjLT5wZW5kaW5nX25lZWRzX3ZibGFuaykgeworCQltdGtf
ZHJtX2NydGNfZmluaXNoX3BhZ2VfZmxpcChtdGtfY3J0Yyk7CisJCW10a19jcnRjLT5wZW5kaW5n
X25lZWRzX3ZibGFuayA9IGZhbHNlOworCX0KK30KKworc3RhdGljIHZvaWQgbXRrX2RybV9jcnRj
X2Rlc3Ryb3koc3RydWN0IGRybV9jcnRjICpjcnRjKQoreworCXN0cnVjdCBtdGtfZHJtX2NydGMg
Km10a19jcnRjID0gdG9fbXRrX2NydGMoY3J0Yyk7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBp
IDwgbXRrX2NydGMtPmRkcF9jb21wX25yOyBpKyspCisJCWNsa191bnByZXBhcmUobXRrX2NydGMt
PmRkcF9jb21wW2ldLT5jbGspOworCisJbXRrX2Rpc3BfbXV0ZXhfcHV0KG10a19jcnRjLT5tdXRl
eCk7CisKKwlkcm1fY3J0Y19jbGVhbnVwKGNydGMpOworfQorCitzdGF0aWMgdm9pZCBtdGtfZHJt
X2NydGNfcmVzZXQoc3RydWN0IGRybV9jcnRjICpjcnRjKQoreworCXN0cnVjdCBtdGtfY3J0Y19z
dGF0ZSAqc3RhdGU7CisKKwlpZiAoY3J0Yy0+c3RhdGUpIHsKKwkJaWYgKGNydGMtPnN0YXRlLT5t
b2RlX2Jsb2IpCisJCQlkcm1fcHJvcGVydHlfdW5yZWZlcmVuY2VfYmxvYihjcnRjLT5zdGF0ZS0+
bW9kZV9ibG9iKTsKKworCQlzdGF0ZSA9IHRvX210a19jcnRjX3N0YXRlKGNydGMtPnN0YXRlKTsK
KwkJbWVtc2V0KHN0YXRlLCAwLCBzaXplb2YoKnN0YXRlKSk7CisJfSBlbHNlIHsKKwkJc3RhdGUg
PSBremFsbG9jKHNpemVvZigqc3RhdGUpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFzdGF0ZSkKKwkJ
CXJldHVybjsKKwkJY3J0Yy0+c3RhdGUgPSAmc3RhdGUtPmJhc2U7CisJfQorCisJc3RhdGUtPmJh
c2UuY3J0YyA9IGNydGM7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKm10a19k
cm1fY3J0Y19kdXBsaWNhdGVfc3RhdGUoc3RydWN0IGRybV9jcnRjICpjcnRjKQoreworCXN0cnVj
dCBtdGtfY3J0Y19zdGF0ZSAqc3RhdGU7CisKKwlzdGF0ZSA9IGt6YWxsb2Moc2l6ZW9mKCpzdGF0
ZSksIEdGUF9LRVJORUwpOworCWlmICghc3RhdGUpCisJCXJldHVybiBOVUxMOworCisJX19kcm1f
YXRvbWljX2hlbHBlcl9jcnRjX2R1cGxpY2F0ZV9zdGF0ZShjcnRjLCAmc3RhdGUtPmJhc2UpOwor
CisJV0FSTl9PTihzdGF0ZS0+YmFzZS5jcnRjICE9IGNydGMpOworCXN0YXRlLT5iYXNlLmNydGMg
PSBjcnRjOworCisJcmV0dXJuICZzdGF0ZS0+YmFzZTsKK30KKworc3RhdGljIHZvaWQgbXRrX2Ry
bV9jcnRjX2Rlc3Ryb3lfc3RhdGUoc3RydWN0IGRybV9jcnRjICpjcnRjLAorCQkJCSAgICAgICBz
dHJ1Y3QgZHJtX2NydGNfc3RhdGUgKnN0YXRlKQoreworCV9fZHJtX2F0b21pY19oZWxwZXJfY3J0
Y19kZXN0cm95X3N0YXRlKGNydGMsIHN0YXRlKTsKKwlrZnJlZSh0b19tdGtfY3J0Y19zdGF0ZShz
dGF0ZSkpOworfQorCitzdGF0aWMgYm9vbCBtdGtfZHJtX2NydGNfbW9kZV9maXh1cChzdHJ1Y3Qg
ZHJtX2NydGMgKmNydGMsCisJCQkJICAgIGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpt
b2RlLAorCQkJCSAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSkKK3sK
KwkvKiBOb3RoaW5nIHRvIGRvIGhlcmUsIGJ1dCB0aGlzIGNhbGxiYWNrIGlzIG1hbmRhdG9yeS4g
Ki8KKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQgbXRrX2RybV9jcnRjX21vZGVfc2V0
X25vZmIoc3RydWN0IGRybV9jcnRjICpjcnRjKQoreworCXN0cnVjdCBtdGtfY3J0Y19zdGF0ZSAq
c3RhdGUgPSB0b19tdGtfY3J0Y19zdGF0ZShjcnRjLT5zdGF0ZSk7CisKKwlzdGF0ZS0+cGVuZGlu
Z193aWR0aCA9IGNydGMtPm1vZGUuaGRpc3BsYXk7CisJc3RhdGUtPnBlbmRpbmdfaGVpZ2h0ID0g
Y3J0Yy0+bW9kZS52ZGlzcGxheTsKKwlzdGF0ZS0+cGVuZGluZ192cmVmcmVzaCA9IGNydGMtPm1v
ZGUudnJlZnJlc2g7CisJd21iKCk7CS8qIE1ha2Ugc3VyZSB0aGUgYWJvdmUgcGFyYW1ldGVycyBh
cmUgc2V0IGJlZm9yZSB1cGRhdGUgKi8KKwlzdGF0ZS0+cGVuZGluZ19jb25maWcgPSB0cnVlOwor
fQorCitpbnQgbXRrX2RybV9jcnRjX2VuYWJsZV92Ymxhbmsoc3RydWN0IGRybV9kZXZpY2UgKmRy
bSwgdW5zaWduZWQgaW50IHBpcGUpCit7CisJc3RydWN0IG10a19kcm1fcHJpdmF0ZSAqcHJpdiA9
IGRybS0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IG10a19kcm1fY3J0YyAqbXRrX2NydGMgPSB0b19t
dGtfY3J0Yyhwcml2LT5jcnRjW3BpcGVdKTsKKwlzdHJ1Y3QgbXRrX2RkcF9jb21wICpvdmwgPSBt
dGtfY3J0Yy0+ZGRwX2NvbXBbMF07CisKKwltdGtfZGRwX2NvbXBfZW5hYmxlX3ZibGFuayhvdmws
ICZtdGtfY3J0Yy0+YmFzZSk7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBtdGtfZHJtX2NydGNf
ZGlzYWJsZV92Ymxhbmsoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgdW5zaWduZWQgaW50IHBpcGUp
Cit7CisJc3RydWN0IG10a19kcm1fcHJpdmF0ZSAqcHJpdiA9IGRybS0+ZGV2X3ByaXZhdGU7CisJ
c3RydWN0IG10a19kcm1fY3J0YyAqbXRrX2NydGMgPSB0b19tdGtfY3J0Yyhwcml2LT5jcnRjW3Bp
cGVdKTsKKwlzdHJ1Y3QgbXRrX2RkcF9jb21wICpvdmwgPSBtdGtfY3J0Yy0+ZGRwX2NvbXBbMF07
CisKKwltdGtfZGRwX2NvbXBfZGlzYWJsZV92Ymxhbmsob3ZsKTsKK30KKworc3RhdGljIGludCBt
dGtfY3J0Y19kZHBfY2xrX2VuYWJsZShzdHJ1Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0YykKK3sK
KwlpbnQgcmV0OworCWludCBpOworCisJRFJNX0RFQlVHX0RSSVZFUigiJXNcbiIsIF9fZnVuY19f
KTsKKwlmb3IgKGkgPSAwOyBpIDwgbXRrX2NydGMtPmRkcF9jb21wX25yOyBpKyspIHsKKwkJcmV0
ID0gY2xrX2VuYWJsZShtdGtfY3J0Yy0+ZGRwX2NvbXBbaV0tPmNsayk7CisJCWlmIChyZXQpIHsK
KwkJCURSTV9FUlJPUigiRmFpbGVkIHRvIGVuYWJsZSBjbG9jayAlZDogJWRcbiIsIGksIHJldCk7
CisJCQlnb3RvIGVycjsKKwkJfQorCX0KKworCXJldHVybiAwOworZXJyOgorCXdoaWxlICgtLWkg
Pj0gMCkKKwkJY2xrX2Rpc2FibGUobXRrX2NydGMtPmRkcF9jb21wW2ldLT5jbGspOworCXJldHVy
biByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIG10a19jcnRjX2RkcF9jbGtfZGlzYWJsZShzdHJ1Y3Qg
bXRrX2RybV9jcnRjICptdGtfY3J0YykKK3sKKwlpbnQgaTsKKworCURSTV9ERUJVR19EUklWRVIo
IiVzXG4iLCBfX2Z1bmNfXyk7CisJZm9yIChpID0gMDsgaSA8IG10a19jcnRjLT5kZHBfY29tcF9u
cjsgaSsrKQorCQljbGtfZGlzYWJsZShtdGtfY3J0Yy0+ZGRwX2NvbXBbaV0tPmNsayk7Cit9CisK
K3N0YXRpYyBpbnQgbXRrX2NydGNfZGRwX2h3X2luaXQoc3RydWN0IG10a19kcm1fY3J0YyAqbXRr
X2NydGMpCit7CisJc3RydWN0IGRybV9jcnRjICpjcnRjID0gJm10a19jcnRjLT5iYXNlOworCXVu
c2lnbmVkIGludCB3aWR0aCwgaGVpZ2h0LCB2cmVmcmVzaDsKKwlpbnQgcmV0OworCWludCBpOwor
CisJRFJNX0RFQlVHX0RSSVZFUigiJXNcbiIsIF9fZnVuY19fKTsKKwlpZiAoV0FSTl9PTighY3J0
Yy0+c3RhdGUpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXdpZHRoID0gY3J0Yy0+c3RhdGUtPmFk
anVzdGVkX21vZGUuaGRpc3BsYXk7CisJaGVpZ2h0ID0gY3J0Yy0+c3RhdGUtPmFkanVzdGVkX21v
ZGUudmRpc3BsYXk7CisJdnJlZnJlc2ggPSBjcnRjLT5zdGF0ZS0+YWRqdXN0ZWRfbW9kZS52cmVm
cmVzaDsKKworCXJldCA9IHBtX3J1bnRpbWVfZ2V0X3N5bmMoY3J0Yy0+ZGV2LT5kZXYpOworCWlm
IChyZXQgPCAwKSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIGVuYWJsZSBwb3dlciBkb21haW46
ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IG10a19kaXNwX211dGV4
X3ByZXBhcmUobXRrX2NydGMtPm11dGV4KTsKKwlpZiAocmV0IDwgMCkgeworCQlEUk1fRVJST1Io
IkZhaWxlZCB0byBlbmFibGUgbXV0ZXggY2xvY2s6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycl9w
bV9ydW50aW1lX3B1dDsKKwl9CisKKwlyZXQgPSBtdGtfY3J0Y19kZHBfY2xrX2VuYWJsZShtdGtf
Y3J0Yyk7CisJaWYgKHJldCA8IDApIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gZW5hYmxlIGNv
bXBvbmVudCBjbG9ja3M6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycl9tdXRleF91bnByZXBhcmU7
CisJfQorCisJRFJNX0RFQlVHX0RSSVZFUigibWVkaWF0ZWtfZGRwX2RkcF9wYXRoX3NldHVwXG4i
KTsKKwlmb3IgKGkgPSAwOyBpIDwgbXRrX2NydGMtPmRkcF9jb21wX25yIC0gMTsgaSsrKSB7CisJ
CW10a19kZHBfYWRkX2NvbXBfdG9fcGF0aChtdGtfY3J0Yy0+Y29uZmlnX3JlZ3MsCisJCQkJCSBt
dGtfY3J0Yy0+ZGRwX2NvbXBbaV0tPmlkLAorCQkJCQkgbXRrX2NydGMtPmRkcF9jb21wW2kgKyAx
XS0+aWQpOworCQltdGtfZGlzcF9tdXRleF9hZGRfY29tcChtdGtfY3J0Yy0+bXV0ZXgsCisJCQkJ
CW10a19jcnRjLT5kZHBfY29tcFtpXS0+aWQpOworCX0KKwltdGtfZGlzcF9tdXRleF9hZGRfY29t
cChtdGtfY3J0Yy0+bXV0ZXgsIG10a19jcnRjLT5kZHBfY29tcFtpXS0+aWQpOworCW10a19kaXNw
X211dGV4X2VuYWJsZShtdGtfY3J0Yy0+bXV0ZXgpOworCisJZm9yIChpID0gMDsgaSA8IG10a19j
cnRjLT5kZHBfY29tcF9ucjsgaSsrKSB7CisJCXN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAgPSBt
dGtfY3J0Yy0+ZGRwX2NvbXBbaV07CisKKwkJbXRrX2RkcF9jb21wX2NvbmZpZyhjb21wLCB3aWR0
aCwgaGVpZ2h0LCB2cmVmcmVzaCk7CisJCW10a19kZHBfY29tcF9zdGFydChjb21wKTsKKwl9CisK
KwkvKiBJbml0aWFsbHkgY29uZmlndXJlIGFsbCBwbGFuZXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwg
T1ZMX0xBWUVSX05SOyBpKyspIHsKKwkJc3RydWN0IGRybV9wbGFuZSAqcGxhbmUgPSAmbXRrX2Ny
dGMtPnBsYW5lc1tpXS5iYXNlOworCQlzdHJ1Y3QgbXRrX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0
ZTsKKworCQlwbGFuZV9zdGF0ZSA9IHRvX210a19wbGFuZV9zdGF0ZShwbGFuZS0+c3RhdGUpOwor
CQltdGtfZGRwX2NvbXBfbGF5ZXJfY29uZmlnKG10a19jcnRjLT5kZHBfY29tcFswXSwgaSwKKwkJ
CQkJICBwbGFuZV9zdGF0ZSk7CisJfQorCisJcmV0dXJuIDA7CisKK2Vycl9tdXRleF91bnByZXBh
cmU6CisJbXRrX2Rpc3BfbXV0ZXhfdW5wcmVwYXJlKG10a19jcnRjLT5tdXRleCk7CitlcnJfcG1f
cnVudGltZV9wdXQ6CisJcG1fcnVudGltZV9wdXQoY3J0Yy0+ZGV2LT5kZXYpOworCXJldHVybiBy
ZXQ7Cit9CisKK3N0YXRpYyB2b2lkIG10a19jcnRjX2RkcF9od19maW5pKHN0cnVjdCBtdGtfZHJt
X2NydGMgKm10a19jcnRjKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBtdGtfY3J0Yy0+
YmFzZS5kZXY7CisJaW50IGk7CisKKwlEUk1fREVCVUdfRFJJVkVSKCIlc1xuIiwgX19mdW5jX18p
OworCWZvciAoaSA9IDA7IGkgPCBtdGtfY3J0Yy0+ZGRwX2NvbXBfbnI7IGkrKykKKwkJbXRrX2Rk
cF9jb21wX3N0b3AobXRrX2NydGMtPmRkcF9jb21wW2ldKTsKKwlmb3IgKGkgPSAwOyBpIDwgbXRr
X2NydGMtPmRkcF9jb21wX25yOyBpKyspCisJCW10a19kaXNwX211dGV4X3JlbW92ZV9jb21wKG10
a19jcnRjLT5tdXRleCwKKwkJCQkJICAgbXRrX2NydGMtPmRkcF9jb21wW2ldLT5pZCk7CisJbXRr
X2Rpc3BfbXV0ZXhfZGlzYWJsZShtdGtfY3J0Yy0+bXV0ZXgpOworCWZvciAoaSA9IDA7IGkgPCBt
dGtfY3J0Yy0+ZGRwX2NvbXBfbnIgLSAxOyBpKyspIHsKKwkJbXRrX2RkcF9yZW1vdmVfY29tcF9m
cm9tX3BhdGgobXRrX2NydGMtPmNvbmZpZ19yZWdzLAorCQkJCQkgICAgICBtdGtfY3J0Yy0+ZGRw
X2NvbXBbaV0tPmlkLAorCQkJCQkgICAgICBtdGtfY3J0Yy0+ZGRwX2NvbXBbaSArIDFdLT5pZCk7
CisJCW10a19kaXNwX211dGV4X3JlbW92ZV9jb21wKG10a19jcnRjLT5tdXRleCwKKwkJCQkJICAg
bXRrX2NydGMtPmRkcF9jb21wW2ldLT5pZCk7CisJfQorCW10a19kaXNwX211dGV4X3JlbW92ZV9j
b21wKG10a19jcnRjLT5tdXRleCwgbXRrX2NydGMtPmRkcF9jb21wW2ldLT5pZCk7CisJbXRrX2Ny
dGNfZGRwX2Nsa19kaXNhYmxlKG10a19jcnRjKTsKKwltdGtfZGlzcF9tdXRleF91bnByZXBhcmUo
bXRrX2NydGMtPm11dGV4KTsKKworCXBtX3J1bnRpbWVfcHV0KGRybS0+ZGV2KTsKK30KKworc3Rh
dGljIHZvaWQgbXRrX2RybV9jcnRjX2VuYWJsZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJ
c3RydWN0IG10a19kcm1fY3J0YyAqbXRrX2NydGMgPSB0b19tdGtfY3J0YyhjcnRjKTsKKwlzdHJ1
Y3QgbXRrX2RkcF9jb21wICpvdmwgPSBtdGtfY3J0Yy0+ZGRwX2NvbXBbMF07CisJaW50IHJldDsK
KworCURSTV9ERUJVR19EUklWRVIoIiVzICVkXG4iLCBfX2Z1bmNfXywgY3J0Yy0+YmFzZS5pZCk7
CisKKwlyZXQgPSBtdGtfc21pX2xhcmJfZ2V0KG92bC0+bGFyYl9kZXYpOworCWlmIChyZXQpIHsK
KwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gZ2V0IGxhcmI6ICVkXG4iLCByZXQpOworCQlyZXR1cm47
CisJfQorCisJcmV0ID0gbXRrX2NydGNfZGRwX2h3X2luaXQobXRrX2NydGMpOworCWlmIChyZXQp
IHsKKwkJbXRrX3NtaV9sYXJiX3B1dChvdmwtPmxhcmJfZGV2KTsKKwkJcmV0dXJuOworCX0KKwor
CWRybV9jcnRjX3ZibGFua19vbihjcnRjKTsKKwltdGtfY3J0Yy0+ZW5hYmxlZCA9IHRydWU7Cit9
CisKK3N0YXRpYyB2b2lkIG10a19kcm1fY3J0Y19kaXNhYmxlKHN0cnVjdCBkcm1fY3J0YyAqY3J0
YykKK3sKKwlzdHJ1Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0YyA9IHRvX210a19jcnRjKGNydGMp
OworCXN0cnVjdCBtdGtfZGRwX2NvbXAgKm92bCA9IG10a19jcnRjLT5kZHBfY29tcFswXTsKKwlp
bnQgaTsKKworCURSTV9ERUJVR19EUklWRVIoIiVzICVkXG4iLCBfX2Z1bmNfXywgY3J0Yy0+YmFz
ZS5pZCk7CisJaWYgKCFtdGtfY3J0Yy0+ZW5hYmxlZCkKKwkJcmV0dXJuOworCisJLyogU2V0IGFs
bCBwZW5kaW5nIHBsYW5lIHN0YXRlIHRvIGRpc2FibGVkICovCisJZm9yIChpID0gMDsgaSA8IE9W
TF9MQVlFUl9OUjsgaSsrKSB7CisJCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lID0gJm10a19jcnRj
LT5wbGFuZXNbaV0uYmFzZTsKKwkJc3RydWN0IG10a19wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGU7
CisKKwkJcGxhbmVfc3RhdGUgPSB0b19tdGtfcGxhbmVfc3RhdGUocGxhbmUtPnN0YXRlKTsKKwkJ
cGxhbmVfc3RhdGUtPnBlbmRpbmcuZW5hYmxlID0gZmFsc2U7CisJCXBsYW5lX3N0YXRlLT5wZW5k
aW5nLmNvbmZpZyA9IHRydWU7CisJfQorCW10a19jcnRjLT5wZW5kaW5nX3BsYW5lcyA9IHRydWU7
CisKKwkvKiBXYWl0IGZvciBwbGFuZXMgdG8gYmUgZGlzYWJsZWQgKi8KKwlkcm1fY3J0Y193YWl0
X29uZV92YmxhbmsoY3J0Yyk7CisKKwlkcm1fY3J0Y192Ymxhbmtfb2ZmKGNydGMpOworCW10a19j
cnRjX2RkcF9od19maW5pKG10a19jcnRjKTsKKwltdGtfc21pX2xhcmJfcHV0KG92bC0+bGFyYl9k
ZXYpOworCisJbXRrX2NydGMtPmVuYWJsZWQgPSBmYWxzZTsKK30KKworc3RhdGljIHZvaWQgbXRr
X2RybV9jcnRjX2F0b21pY19iZWdpbihzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCisJCQkJICAgICAg
c3RydWN0IGRybV9jcnRjX3N0YXRlICpvbGRfY3J0Y19zdGF0ZSkKK3sKKwlzdHJ1Y3QgbXRrX2Ny
dGNfc3RhdGUgKnN0YXRlID0gdG9fbXRrX2NydGNfc3RhdGUoY3J0Yy0+c3RhdGUpOworCXN0cnVj
dCBtdGtfZHJtX2NydGMgKm10a19jcnRjID0gdG9fbXRrX2NydGMoY3J0Yyk7CisKKwlpZiAobXRr
X2NydGMtPmV2ZW50ICYmIHN0YXRlLT5iYXNlLmV2ZW50KQorCQlEUk1fRVJST1IoIm5ldyBldmVu
dCB3aGlsZSB0aGVyZSBpcyBzdGlsbCBhIHBlbmRpbmcgZXZlbnRcbiIpOworCisJaWYgKHN0YXRl
LT5iYXNlLmV2ZW50KSB7CisJCXN0YXRlLT5iYXNlLmV2ZW50LT5waXBlID0gZHJtX2NydGNfaW5k
ZXgoY3J0Yyk7CisJCVdBUk5fT04oZHJtX2NydGNfdmJsYW5rX2dldChjcnRjKSAhPSAwKTsKKwkJ
bXRrX2NydGMtPmV2ZW50ID0gc3RhdGUtPmJhc2UuZXZlbnQ7CisJCXN0YXRlLT5iYXNlLmV2ZW50
ID0gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcm1fY3J0Y19hdG9taWNfZmx1c2go
c3RydWN0IGRybV9jcnRjICpjcnRjLAorCQkJCSAgICAgIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAq
b2xkX2NydGNfc3RhdGUpCit7CisJc3RydWN0IG10a19kcm1fY3J0YyAqbXRrX2NydGMgPSB0b19t
dGtfY3J0YyhjcnRjKTsKKwl1bnNpZ25lZCBpbnQgcGVuZGluZ19wbGFuZXMgPSAwOworCWludCBp
OworCisJaWYgKG10a19jcnRjLT5ldmVudCkKKwkJbXRrX2NydGMtPnBlbmRpbmdfbmVlZHNfdmJs
YW5rID0gdHJ1ZTsKKwlmb3IgKGkgPSAwOyBpIDwgT1ZMX0xBWUVSX05SOyBpKyspIHsKKwkJc3Ry
dWN0IGRybV9wbGFuZSAqcGxhbmUgPSAmbXRrX2NydGMtPnBsYW5lc1tpXS5iYXNlOworCQlzdHJ1
Y3QgbXRrX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZTsKKworCQlwbGFuZV9zdGF0ZSA9IHRvX210
a19wbGFuZV9zdGF0ZShwbGFuZS0+c3RhdGUpOworCQlpZiAocGxhbmVfc3RhdGUtPnBlbmRpbmcu
ZGlydHkpIHsKKwkJCXBsYW5lX3N0YXRlLT5wZW5kaW5nLmNvbmZpZyA9IHRydWU7CisJCQlwbGFu
ZV9zdGF0ZS0+cGVuZGluZy5kaXJ0eSA9IGZhbHNlOworCQkJcGVuZGluZ19wbGFuZXMgfD0gQklU
KGkpOworCQl9CisJfQorCWlmIChwZW5kaW5nX3BsYW5lcykKKwkJbXRrX2NydGMtPnBlbmRpbmdf
cGxhbmVzID0gdHJ1ZTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY3J0Y19mdW5jcyBt
dGtfY3J0Y19mdW5jcyA9IHsKKwkuc2V0X2NvbmZpZwkJPSBkcm1fYXRvbWljX2hlbHBlcl9zZXRf
Y29uZmlnLAorCS5wYWdlX2ZsaXAJCT0gZHJtX2F0b21pY19oZWxwZXJfcGFnZV9mbGlwLAorCS5k
ZXN0cm95CQk9IG10a19kcm1fY3J0Y19kZXN0cm95LAorCS5yZXNldAkJCT0gbXRrX2RybV9jcnRj
X3Jlc2V0LAorCS5hdG9taWNfZHVwbGljYXRlX3N0YXRlCT0gbXRrX2RybV9jcnRjX2R1cGxpY2F0
ZV9zdGF0ZSwKKwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUJPSBtdGtfZHJtX2NydGNfZGVzdHJveV9z
dGF0ZSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2NydGNfaGVscGVyX2Z1bmNzIG10
a19jcnRjX2hlbHBlcl9mdW5jcyA9IHsKKwkubW9kZV9maXh1cAk9IG10a19kcm1fY3J0Y19tb2Rl
X2ZpeHVwLAorCS5tb2RlX3NldF9ub2ZiCT0gbXRrX2RybV9jcnRjX21vZGVfc2V0X25vZmIsCisJ
LmVuYWJsZQkJPSBtdGtfZHJtX2NydGNfZW5hYmxlLAorCS5kaXNhYmxlCT0gbXRrX2RybV9jcnRj
X2Rpc2FibGUsCisJLmF0b21pY19iZWdpbgk9IG10a19kcm1fY3J0Y19hdG9taWNfYmVnaW4sCisJ
LmF0b21pY19mbHVzaAk9IG10a19kcm1fY3J0Y19hdG9taWNfZmx1c2gsCit9OworCitzdGF0aWMg
aW50IG10a19kcm1fY3J0Y19pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sCisJCQkgICAgIHN0
cnVjdCBtdGtfZHJtX2NydGMgKm10a19jcnRjLAorCQkJICAgICBzdHJ1Y3QgZHJtX3BsYW5lICpw
cmltYXJ5LAorCQkJICAgICBzdHJ1Y3QgZHJtX3BsYW5lICpjdXJzb3IsIHVuc2lnbmVkIGludCBw
aXBlKQoreworCWludCByZXQ7CisKKwlyZXQgPSBkcm1fY3J0Y19pbml0X3dpdGhfcGxhbmVzKGRy
bSwgJm10a19jcnRjLT5iYXNlLCBwcmltYXJ5LCBjdXJzb3IsCisJCQkJCSZtdGtfY3J0Y19mdW5j
cywgTlVMTCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfY2xlYW51cF9jcnRjOworCisJZHJtX2Ny
dGNfaGVscGVyX2FkZCgmbXRrX2NydGMtPmJhc2UsICZtdGtfY3J0Y19oZWxwZXJfZnVuY3MpOwor
CisJcmV0dXJuIDA7CisKK2Vycl9jbGVhbnVwX2NydGM6CisJZHJtX2NydGNfY2xlYW51cCgmbXRr
X2NydGMtPmJhc2UpOworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgbXRrX2NydGNfZGRwX2lycShz
dHJ1Y3QgZHJtX2NydGMgKmNydGMsIHN0cnVjdCBtdGtfZGRwX2NvbXAgKm92bCkKK3sKKwlzdHJ1
Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0YyA9IHRvX210a19jcnRjKGNydGMpOworCXN0cnVjdCBt
dGtfY3J0Y19zdGF0ZSAqc3RhdGUgPSB0b19tdGtfY3J0Y19zdGF0ZShtdGtfY3J0Yy0+YmFzZS5z
dGF0ZSk7CisJdW5zaWduZWQgaW50IGk7CisKKwkvKgorCSAqIFRPRE86IGluc3RlYWQgb2YgdXBk
YXRpbmcgdGhlIHJlZ2lzdGVycyBoZXJlLCB3ZSBzaG91bGQgcHJlcGFyZQorCSAqIHdvcmtpbmcg
cmVnaXN0ZXJzIGluIGF0b21pY19jb21taXQgYW5kIGxldCB0aGUgaGFyZHdhcmUgY29tbWFuZAor
CSAqIHF1ZXVlIHVwZGF0ZSBtb2R1bGUgcmVnaXN0ZXJzIG9uIHZibGFuay4KKwkgKi8KKwlpZiAo
c3RhdGUtPnBlbmRpbmdfY29uZmlnKSB7CisJCW10a19kZHBfY29tcF9jb25maWcob3ZsLCBzdGF0
ZS0+cGVuZGluZ193aWR0aCwKKwkJCQkgICAgc3RhdGUtPnBlbmRpbmdfaGVpZ2h0LAorCQkJCSAg
ICBzdGF0ZS0+cGVuZGluZ192cmVmcmVzaCk7CisKKwkJc3RhdGUtPnBlbmRpbmdfY29uZmlnID0g
ZmFsc2U7CisJfQorCisJaWYgKG10a19jcnRjLT5wZW5kaW5nX3BsYW5lcykgeworCQlmb3IgKGkg
PSAwOyBpIDwgT1ZMX0xBWUVSX05SOyBpKyspIHsKKwkJCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5l
ID0gJm10a19jcnRjLT5wbGFuZXNbaV0uYmFzZTsKKwkJCXN0cnVjdCBtdGtfcGxhbmVfc3RhdGUg
KnBsYW5lX3N0YXRlOworCisJCQlwbGFuZV9zdGF0ZSA9IHRvX210a19wbGFuZV9zdGF0ZShwbGFu
ZS0+c3RhdGUpOworCisJCQlpZiAocGxhbmVfc3RhdGUtPnBlbmRpbmcuY29uZmlnKSB7CisJCQkJ
bXRrX2RkcF9jb21wX2xheWVyX2NvbmZpZyhvdmwsIGksIHBsYW5lX3N0YXRlKTsKKwkJCQlwbGFu
ZV9zdGF0ZS0+cGVuZGluZy5jb25maWcgPSBmYWxzZTsKKwkJCX0KKwkJfQorCQltdGtfY3J0Yy0+
cGVuZGluZ19wbGFuZXMgPSBmYWxzZTsKKwl9CisKKwltdGtfZHJtX2ZpbmlzaF9wYWdlX2ZsaXAo
bXRrX2NydGMpOworfQorCitpbnQgbXRrX2RybV9jcnRjX2NyZWF0ZShzdHJ1Y3QgZHJtX2Rldmlj
ZSAqZHJtX2RldiwKKwkJCWNvbnN0IGVudW0gbXRrX2RkcF9jb21wX2lkICpwYXRoLCB1bnNpZ25l
ZCBpbnQgcGF0aF9sZW4pCit7CisJc3RydWN0IG10a19kcm1fcHJpdmF0ZSAqcHJpdiA9IGRybV9k
ZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGRybV9kZXYtPmRldjsKKwlz
dHJ1Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0YzsKKwllbnVtIGRybV9wbGFuZV90eXBlIHR5cGU7
CisJdW5zaWduZWQgaW50IHpwb3M7CisJaW50IHBpcGUgPSBwcml2LT5udW1fcGlwZXM7CisJaW50
IHJldDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBwYXRoX2xlbjsgaSsrKSB7CisJCWVu
dW0gbXRrX2RkcF9jb21wX2lkIGNvbXBfaWQgPSBwYXRoW2ldOworCQlzdHJ1Y3QgZGV2aWNlX25v
ZGUgKm5vZGU7CisKKwkJbm9kZSA9IHByaXYtPmNvbXBfbm9kZVtjb21wX2lkXTsKKwkJaWYgKCFu
b2RlKSB7CisJCQlkZXZfaW5mbyhkZXYsCisJCQkJICJOb3QgY3JlYXRpbmcgY3J0YyAlZCBiZWNh
dXNlIGNvbXBvbmVudCAlZCBpcyBkaXNhYmxlZCBvciBtaXNzaW5nXG4iLAorCQkJCSBwaXBlLCBj
b21wX2lkKTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJbXRrX2NydGMgPSBkZXZtX2t6YWxs
b2MoZGV2LCBzaXplb2YoKm10a19jcnRjKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtdGtfY3J0YykK
KwkJcmV0dXJuIC1FTk9NRU07CisKKwltdGtfY3J0Yy0+Y29uZmlnX3JlZ3MgPSBwcml2LT5jb25m
aWdfcmVnczsKKwltdGtfY3J0Yy0+ZGRwX2NvbXBfbnIgPSBwYXRoX2xlbjsKKwltdGtfY3J0Yy0+
ZGRwX2NvbXAgPSBkZXZtX2ttYWxsb2NfYXJyYXkoZGV2LCBtdGtfY3J0Yy0+ZGRwX2NvbXBfbnIs
CisJCQkJCQlzaXplb2YoKm10a19jcnRjLT5kZHBfY29tcCksCisJCQkJCQlHRlBfS0VSTkVMKTsK
KworCW10a19jcnRjLT5tdXRleCA9IG10a19kaXNwX211dGV4X2dldChwcml2LT5tdXRleF9kZXYs
IHBpcGUpOworCWlmIChJU19FUlIobXRrX2NydGMtPm11dGV4KSkgeworCQlyZXQgPSBQVFJfRVJS
KG10a19jcnRjLT5tdXRleCk7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGdldCBtdXRleDog
JWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJZm9yIChpID0gMDsgaSA8IG10a19j
cnRjLT5kZHBfY29tcF9ucjsgaSsrKSB7CisJCWVudW0gbXRrX2RkcF9jb21wX2lkIGNvbXBfaWQg
PSBwYXRoW2ldOworCQlzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wOworCQlzdHJ1Y3QgZGV2aWNl
X25vZGUgKm5vZGU7CisKKwkJbm9kZSA9IHByaXYtPmNvbXBfbm9kZVtjb21wX2lkXTsKKwkJY29t
cCA9IHByaXYtPmRkcF9jb21wW2NvbXBfaWRdOworCQlpZiAoIWNvbXApIHsKKwkJCWRldl9lcnIo
ZGV2LCAiQ29tcG9uZW50ICVzIG5vdCBpbml0aWFsaXplZFxuIiwKKwkJCQlub2RlLT5mdWxsX25h
bWUpOworCQkJcmV0ID0gLUVOT0RFVjsKKwkJCWdvdG8gdW5wcmVwYXJlOworCQl9CisKKwkJcmV0
ID0gY2xrX3ByZXBhcmUoY29tcC0+Y2xrKTsKKwkJaWYgKHJldCkgeworCQkJZGV2X2VycihkZXYs
CisJCQkJIkZhaWxlZCB0byBwcmVwYXJlIGNsb2NrIGZvciBjb21wb25lbnQgJXM6ICVkXG4iLAor
CQkJCW5vZGUtPmZ1bGxfbmFtZSwgcmV0KTsKKwkJCWdvdG8gdW5wcmVwYXJlOworCQl9CisKKwkJ
bXRrX2NydGMtPmRkcF9jb21wW2ldID0gY29tcDsKKwl9CisKKwlmb3IgKHpwb3MgPSAwOyB6cG9z
IDwgT1ZMX0xBWUVSX05SOyB6cG9zKyspIHsKKwkJdHlwZSA9ICh6cG9zID09IDApID8gRFJNX1BM
QU5FX1RZUEVfUFJJTUFSWSA6CisJCQkJKHpwb3MgPT0gMSkgPyBEUk1fUExBTkVfVFlQRV9DVVJT
T1IgOgorCQkJCQkJRFJNX1BMQU5FX1RZUEVfT1ZFUkxBWTsKKwkJcmV0ID0gbXRrX3BsYW5lX2lu
aXQoZHJtX2RldiwgJm10a19jcnRjLT5wbGFuZXNbenBvc10sCisJCQkJICAgICBCSVQocGlwZSks
IHR5cGUsIHpwb3MpOworCQlpZiAocmV0KQorCQkJZ290byB1bnByZXBhcmU7CisJfQorCisJcmV0
ID0gbXRrX2RybV9jcnRjX2luaXQoZHJtX2RldiwgbXRrX2NydGMsICZtdGtfY3J0Yy0+cGxhbmVz
WzBdLmJhc2UsCisJCQkJJm10a19jcnRjLT5wbGFuZXNbMV0uYmFzZSwgcGlwZSk7CisJaWYgKHJl
dCA8IDApCisJCWdvdG8gdW5wcmVwYXJlOworCisJcHJpdi0+Y3J0Y1twaXBlXSA9ICZtdGtfY3J0
Yy0+YmFzZTsKKwlwcml2LT5udW1fcGlwZXMrKzsKKworCXJldHVybiAwOworCit1bnByZXBhcmU6
CisJd2hpbGUgKC0taSA+PSAwKQorCQljbGtfdW5wcmVwYXJlKG10a19jcnRjLT5kZHBfY29tcFtp
XS0+Y2xrKTsKKworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v
bWVkaWF0ZWsvbXRrX2RybV9jcnRjLmggYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Ry
bV9jcnRjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFlNTU2NgotLS0g
L2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2NydGMuaApA
QCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1IE1lZGlhVGVrIEluYy4K
KyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUK
KyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKwor
I2lmbmRlZiBNVEtfRFJNX0NSVENfSAorI2RlZmluZSBNVEtfRFJNX0NSVENfSAorCisjaW5jbHVk
ZSA8ZHJtL2RybV9jcnRjLmg+CisjaW5jbHVkZSAibXRrX2RybV9kZHBfY29tcC5oIgorI2luY2x1
ZGUgIm10a19kcm1fcGxhbmUuaCIKKworI2RlZmluZSBPVkxfTEFZRVJfTlIJNAorCitpbnQgbXRr
X2RybV9jcnRjX2VuYWJsZV92Ymxhbmsoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgdW5zaWduZWQg
aW50IHBpcGUpOwordm9pZCBtdGtfZHJtX2NydGNfZGlzYWJsZV92Ymxhbmsoc3RydWN0IGRybV9k
ZXZpY2UgKmRybSwgdW5zaWduZWQgaW50IHBpcGUpOwordm9pZCBtdGtfZHJtX2NydGNfY2hlY2tf
Zmx1c2goc3RydWN0IGRybV9jcnRjICpjcnRjKTsKK3ZvaWQgbXRrX2RybV9jcnRjX2NvbW1pdChz
dHJ1Y3QgZHJtX2NydGMgKmNydGMpOwordm9pZCBtdGtfY3J0Y19kZHBfaXJxKHN0cnVjdCBkcm1f
Y3J0YyAqY3J0Yywgc3RydWN0IG10a19kZHBfY29tcCAqb3ZsKTsKK2ludCBtdGtfZHJtX2NydGNf
Y3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkcm1fZGV2LAorCQkJY29uc3QgZW51bSBtdGtfZGRw
X2NvbXBfaWQgKnBhdGgsCisJCQl1bnNpZ25lZCBpbnQgcGF0aF9sZW4pOworCisjZW5kaWYgLyog
TVRLX0RSTV9DUlRDX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9t
dGtfZHJtX2RkcC5jIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwLmMKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdiYTkzNTUKLS0tIC9kZXYvbnVsbAor
KysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHAuYwpAQCAtMCwwICsxLDM1
MyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMuCisgKgorICogVGhp
cyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
ciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxs
aW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9v
Zl9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRl
IDxsaW51eC9yZWdtYXAuaD4KKworI2luY2x1ZGUgIm10a19kcm1fZGRwLmgiCisjaW5jbHVkZSAi
bXRrX2RybV9kZHBfY29tcC5oIgorCisjZGVmaW5lIERJU1BfUkVHX0NPTkZJR19ESVNQX09WTDBf
TU9VVF9FTgkweDA0MAorI2RlZmluZSBESVNQX1JFR19DT05GSUdfRElTUF9PVkwxX01PVVRfRU4J
MHgwNDQKKyNkZWZpbmUgRElTUF9SRUdfQ09ORklHX0RJU1BfT0RfTU9VVF9FTgkJMHgwNDgKKyNk
ZWZpbmUgRElTUF9SRUdfQ09ORklHX0RJU1BfR0FNTUFfTU9VVF9FTgkweDA0YworI2RlZmluZSBE
SVNQX1JFR19DT05GSUdfRElTUF9VRk9FX01PVVRfRU4JMHgwNTAKKyNkZWZpbmUgRElTUF9SRUdf
Q09ORklHX0RJU1BfQ09MT1IwX1NFTF9JTgkweDA4NAorI2RlZmluZSBESVNQX1JFR19DT05GSUdf
RElTUF9DT0xPUjFfU0VMX0lOCTB4MDg4CisjZGVmaW5lIERJU1BfUkVHX0NPTkZJR19EUElfU0VM
X0lOCQkweDBhYworI2RlZmluZSBESVNQX1JFR19DT05GSUdfRElTUF9SRE1BMV9NT1VUX0VOCTB4
MGM4CisjZGVmaW5lIERJU1BfUkVHX0NPTkZJR19NTVNZU19DR19DT04wCQkweDEwMAorCisjZGVm
aW5lIERJU1BfUkVHX01VVEVYX0VOKG4pCSgweDIwICsgMHgyMCAqIChuKSkKKyNkZWZpbmUgRElT
UF9SRUdfTVVURVhfUlNUKG4pCSgweDI4ICsgMHgyMCAqIChuKSkKKyNkZWZpbmUgRElTUF9SRUdf
TVVURVhfTU9EKG4pCSgweDJjICsgMHgyMCAqIChuKSkKKyNkZWZpbmUgRElTUF9SRUdfTVVURVhf
U09GKG4pCSgweDMwICsgMHgyMCAqIChuKSkKKworI2RlZmluZSBNVVRFWF9NT0RfRElTUF9PVkww
CQlCSVQoMTEpCisjZGVmaW5lIE1VVEVYX01PRF9ESVNQX09WTDEJCUJJVCgxMikKKyNkZWZpbmUg
TVVURVhfTU9EX0RJU1BfUkRNQTAJCUJJVCgxMykKKyNkZWZpbmUgTVVURVhfTU9EX0RJU1BfUkRN
QTEJCUJJVCgxNCkKKyNkZWZpbmUgTVVURVhfTU9EX0RJU1BfUkRNQTIJCUJJVCgxNSkKKyNkZWZp
bmUgTVVURVhfTU9EX0RJU1BfV0RNQTAJCUJJVCgxNikKKyNkZWZpbmUgTVVURVhfTU9EX0RJU1Bf
V0RNQTEJCUJJVCgxNykKKyNkZWZpbmUgTVVURVhfTU9EX0RJU1BfQ09MT1IwCQlCSVQoMTgpCisj
ZGVmaW5lIE1VVEVYX01PRF9ESVNQX0NPTE9SMQkJQklUKDE5KQorI2RlZmluZSBNVVRFWF9NT0Rf
RElTUF9BQUwJCUJJVCgyMCkKKyNkZWZpbmUgTVVURVhfTU9EX0RJU1BfR0FNTUEJCUJJVCgyMSkK
KyNkZWZpbmUgTVVURVhfTU9EX0RJU1BfVUZPRQkJQklUKDIyKQorI2RlZmluZSBNVVRFWF9NT0Rf
RElTUF9QV00wCQlCSVQoMjMpCisjZGVmaW5lIE1VVEVYX01PRF9ESVNQX1BXTTEJCUJJVCgyNCkK
KyNkZWZpbmUgTVVURVhfTU9EX0RJU1BfT0QJCUJJVCgyNSkKKworI2RlZmluZSBNVVRFWF9TT0Zf
U0lOR0xFX01PREUJCTAKKyNkZWZpbmUgTVVURVhfU09GX0RTSTAJCQkxCisjZGVmaW5lIE1VVEVY
X1NPRl9EU0kxCQkJMgorI2RlZmluZSBNVVRFWF9TT0ZfRFBJMAkJCTMKKworI2RlZmluZSBPVkww
X01PVVRfRU5fQ09MT1IwCQkweDEKKyNkZWZpbmUgT0RfTU9VVF9FTl9SRE1BMAkJMHgxCisjZGVm
aW5lIFVGT0VfTU9VVF9FTl9EU0kwCQkweDEKKyNkZWZpbmUgQ09MT1IwX1NFTF9JTl9PVkwwCQkw
eDEKKyNkZWZpbmUgT1ZMMV9NT1VUX0VOX0NPTE9SMQkJMHgxCisjZGVmaW5lIEdBTU1BX01PVVRf
RU5fUkRNQTEJCTB4MQorI2RlZmluZSBSRE1BMV9NT1VUX0RQSTAJCQkweDIKKyNkZWZpbmUgRFBJ
MF9TRUxfSU5fUkRNQTEJCTB4MQorI2RlZmluZSBDT0xPUjFfU0VMX0lOX09WTDEJCTB4MQorCitz
dHJ1Y3QgbXRrX2Rpc3BfbXV0ZXggeworCWludCBpZDsKKwlib29sIGNsYWltZWQ7Cit9OworCitz
dHJ1Y3QgbXRrX2RkcCB7CisJc3RydWN0IGRldmljZQkJCSpkZXY7CisJc3RydWN0IGNsawkJCSpj
bGs7CisJdm9pZCBfX2lvbWVtCQkJKnJlZ3M7CisJc3RydWN0IG10a19kaXNwX211dGV4CQltdXRl
eFsxMF07Cit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG11dGV4X21vZFtERFBfQ09N
UE9ORU5UX0lEX01BWF0gPSB7CisJW0REUF9DT01QT05FTlRfQUFMXSA9IE1VVEVYX01PRF9ESVNQ
X0FBTCwKKwlbRERQX0NPTVBPTkVOVF9DT0xPUjBdID0gTVVURVhfTU9EX0RJU1BfQ09MT1IwLAor
CVtERFBfQ09NUE9ORU5UX0NPTE9SMV0gPSBNVVRFWF9NT0RfRElTUF9DT0xPUjEsCisJW0REUF9D
T01QT05FTlRfR0FNTUFdID0gTVVURVhfTU9EX0RJU1BfR0FNTUEsCisJW0REUF9DT01QT05FTlRf
T0RdID0gTVVURVhfTU9EX0RJU1BfT0QsCisJW0REUF9DT01QT05FTlRfT1ZMMF0gPSBNVVRFWF9N
T0RfRElTUF9PVkwwLAorCVtERFBfQ09NUE9ORU5UX09WTDFdID0gTVVURVhfTU9EX0RJU1BfT1ZM
MSwKKwlbRERQX0NPTVBPTkVOVF9QV00wXSA9IE1VVEVYX01PRF9ESVNQX1BXTTAsCisJW0REUF9D
T01QT05FTlRfUFdNMV0gPSBNVVRFWF9NT0RfRElTUF9QV00xLAorCVtERFBfQ09NUE9ORU5UX1JE
TUEwXSA9IE1VVEVYX01PRF9ESVNQX1JETUEwLAorCVtERFBfQ09NUE9ORU5UX1JETUExXSA9IE1V
VEVYX01PRF9ESVNQX1JETUExLAorCVtERFBfQ09NUE9ORU5UX1JETUEyXSA9IE1VVEVYX01PRF9E
SVNQX1JETUEyLAorCVtERFBfQ09NUE9ORU5UX1VGT0VdID0gTVVURVhfTU9EX0RJU1BfVUZPRSwK
KwlbRERQX0NPTVBPTkVOVF9XRE1BMF0gPSBNVVRFWF9NT0RfRElTUF9XRE1BMCwKKwlbRERQX0NP
TVBPTkVOVF9XRE1BMV0gPSBNVVRFWF9NT0RfRElTUF9XRE1BMSwKK307CisKK3N0YXRpYyB1bnNp
Z25lZCBpbnQgbXRrX2RkcF9tb3V0X2VuKGVudW0gbXRrX2RkcF9jb21wX2lkIGN1ciwKKwkJCQkg
ICAgZW51bSBtdGtfZGRwX2NvbXBfaWQgbmV4dCwKKwkJCQkgICAgdW5zaWduZWQgaW50ICphZGRy
KQoreworCXVuc2lnbmVkIGludCB2YWx1ZTsKKworCWlmIChjdXIgPT0gRERQX0NPTVBPTkVOVF9P
VkwwICYmIG5leHQgPT0gRERQX0NPTVBPTkVOVF9DT0xPUjApIHsKKwkJKmFkZHIgPSBESVNQX1JF
R19DT05GSUdfRElTUF9PVkwwX01PVVRfRU47CisJCXZhbHVlID0gT1ZMMF9NT1VUX0VOX0NPTE9S
MDsKKwl9IGVsc2UgaWYgKGN1ciA9PSBERFBfQ09NUE9ORU5UX09EICYmIG5leHQgPT0gRERQX0NP
TVBPTkVOVF9SRE1BMCkgeworCQkqYWRkciA9IERJU1BfUkVHX0NPTkZJR19ESVNQX09EX01PVVRf
RU47CisJCXZhbHVlID0gT0RfTU9VVF9FTl9SRE1BMDsKKwl9IGVsc2UgaWYgKGN1ciA9PSBERFBf
Q09NUE9ORU5UX1VGT0UgJiYgbmV4dCA9PSBERFBfQ09NUE9ORU5UX0RTSTApIHsKKwkJKmFkZHIg
PSBESVNQX1JFR19DT05GSUdfRElTUF9VRk9FX01PVVRfRU47CisJCXZhbHVlID0gVUZPRV9NT1VU
X0VOX0RTSTA7CisJfSBlbHNlIGlmIChjdXIgPT0gRERQX0NPTVBPTkVOVF9PVkwxICYmIG5leHQg
PT0gRERQX0NPTVBPTkVOVF9DT0xPUjEpIHsKKwkJKmFkZHIgPSBESVNQX1JFR19DT05GSUdfRElT
UF9PVkwxX01PVVRfRU47CisJCXZhbHVlID0gT1ZMMV9NT1VUX0VOX0NPTE9SMTsKKwl9IGVsc2Ug
aWYgKGN1ciA9PSBERFBfQ09NUE9ORU5UX0dBTU1BICYmIG5leHQgPT0gRERQX0NPTVBPTkVOVF9S
RE1BMSkgeworCQkqYWRkciA9IERJU1BfUkVHX0NPTkZJR19ESVNQX0dBTU1BX01PVVRfRU47CisJ
CXZhbHVlID0gR0FNTUFfTU9VVF9FTl9SRE1BMTsKKwl9IGVsc2UgaWYgKGN1ciA9PSBERFBfQ09N
UE9ORU5UX1JETUExICYmIG5leHQgPT0gRERQX0NPTVBPTkVOVF9EUEkwKSB7CisJCSphZGRyID0g
RElTUF9SRUdfQ09ORklHX0RJU1BfUkRNQTFfTU9VVF9FTjsKKwkJdmFsdWUgPSBSRE1BMV9NT1VU
X0RQSTA7CisJfSBlbHNlIHsKKwkJdmFsdWUgPSAwOworCX0KKworCXJldHVybiB2YWx1ZTsKK30K
Kworc3RhdGljIHVuc2lnbmVkIGludCBtdGtfZGRwX3NlbF9pbihlbnVtIG10a19kZHBfY29tcF9p
ZCBjdXIsCisJCQkJICAgZW51bSBtdGtfZGRwX2NvbXBfaWQgbmV4dCwKKwkJCQkgICB1bnNpZ25l
ZCBpbnQgKmFkZHIpCit7CisJdW5zaWduZWQgaW50IHZhbHVlOworCisJaWYgKGN1ciA9PSBERFBf
Q09NUE9ORU5UX09WTDAgJiYgbmV4dCA9PSBERFBfQ09NUE9ORU5UX0NPTE9SMCkgeworCQkqYWRk
ciA9IERJU1BfUkVHX0NPTkZJR19ESVNQX0NPTE9SMF9TRUxfSU47CisJCXZhbHVlID0gQ09MT1Iw
X1NFTF9JTl9PVkwwOworCX0gZWxzZSBpZiAoY3VyID09IEREUF9DT01QT05FTlRfUkRNQTEgJiYg
bmV4dCA9PSBERFBfQ09NUE9ORU5UX0RQSTApIHsKKwkJKmFkZHIgPSBESVNQX1JFR19DT05GSUdf
RFBJX1NFTF9JTjsKKwkJdmFsdWUgPSBEUEkwX1NFTF9JTl9SRE1BMTsKKwl9IGVsc2UgaWYgKGN1
ciA9PSBERFBfQ09NUE9ORU5UX09WTDEgJiYgbmV4dCA9PSBERFBfQ09NUE9ORU5UX0NPTE9SMSkg
eworCQkqYWRkciA9IERJU1BfUkVHX0NPTkZJR19ESVNQX0NPTE9SMV9TRUxfSU47CisJCXZhbHVl
ID0gQ09MT1IxX1NFTF9JTl9PVkwxOworCX0gZWxzZSB7CisJCXZhbHVlID0gMDsKKwl9CisKKwly
ZXR1cm4gdmFsdWU7Cit9CisKK3ZvaWQgbXRrX2RkcF9hZGRfY29tcF90b19wYXRoKHZvaWQgX19p
b21lbSAqY29uZmlnX3JlZ3MsCisJCQkgICAgICBlbnVtIG10a19kZHBfY29tcF9pZCBjdXIsCisJ
CQkgICAgICBlbnVtIG10a19kZHBfY29tcF9pZCBuZXh0KQoreworCXVuc2lnbmVkIGludCBhZGRy
LCB2YWx1ZSwgcmVnOworCisJdmFsdWUgPSBtdGtfZGRwX21vdXRfZW4oY3VyLCBuZXh0LCAmYWRk
cik7CisJaWYgKHZhbHVlKSB7CisJCXJlZyA9IHJlYWRsX3JlbGF4ZWQoY29uZmlnX3JlZ3MgKyBh
ZGRyKSB8IHZhbHVlOworCQl3cml0ZWxfcmVsYXhlZChyZWcsIGNvbmZpZ19yZWdzICsgYWRkcik7
CisJfQorCisJdmFsdWUgPSBtdGtfZGRwX3NlbF9pbihjdXIsIG5leHQsICZhZGRyKTsKKwlpZiAo
dmFsdWUpIHsKKwkJcmVnID0gcmVhZGxfcmVsYXhlZChjb25maWdfcmVncyArIGFkZHIpIHwgdmFs
dWU7CisJCXdyaXRlbF9yZWxheGVkKHJlZywgY29uZmlnX3JlZ3MgKyBhZGRyKTsKKwl9Cit9CisK
K3ZvaWQgbXRrX2RkcF9yZW1vdmVfY29tcF9mcm9tX3BhdGgodm9pZCBfX2lvbWVtICpjb25maWdf
cmVncywKKwkJCQkgICBlbnVtIG10a19kZHBfY29tcF9pZCBjdXIsCisJCQkJICAgZW51bSBtdGtf
ZGRwX2NvbXBfaWQgbmV4dCkKK3sKKwl1bnNpZ25lZCBpbnQgYWRkciwgdmFsdWUsIHJlZzsKKwor
CXZhbHVlID0gbXRrX2RkcF9tb3V0X2VuKGN1ciwgbmV4dCwgJmFkZHIpOworCWlmICh2YWx1ZSkg
eworCQlyZWcgPSByZWFkbF9yZWxheGVkKGNvbmZpZ19yZWdzICsgYWRkcikgJiB+dmFsdWU7CisJ
CXdyaXRlbF9yZWxheGVkKHJlZywgY29uZmlnX3JlZ3MgKyBhZGRyKTsKKwl9CisKKwl2YWx1ZSA9
IG10a19kZHBfc2VsX2luKGN1ciwgbmV4dCwgJmFkZHIpOworCWlmICh2YWx1ZSkgeworCQlyZWcg
PSByZWFkbF9yZWxheGVkKGNvbmZpZ19yZWdzICsgYWRkcikgJiB+dmFsdWU7CisJCXdyaXRlbF9y
ZWxheGVkKHJlZywgY29uZmlnX3JlZ3MgKyBhZGRyKTsKKwl9Cit9CisKK3N0cnVjdCBtdGtfZGlz
cF9tdXRleCAqbXRrX2Rpc3BfbXV0ZXhfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQg
aW50IGlkKQoreworCXN0cnVjdCBtdGtfZGRwICpkZHAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsK
KworCWlmIChpZCA+PSAxMCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisJaWYgKGRkcC0+
bXV0ZXhbaWRdLmNsYWltZWQpCisJCXJldHVybiBFUlJfUFRSKC1FQlVTWSk7CisKKwlkZHAtPm11
dGV4W2lkXS5jbGFpbWVkID0gdHJ1ZTsKKworCXJldHVybiAmZGRwLT5tdXRleFtpZF07Cit9CisK
K3ZvaWQgbXRrX2Rpc3BfbXV0ZXhfcHV0KHN0cnVjdCBtdGtfZGlzcF9tdXRleCAqbXV0ZXgpCit7
CisJc3RydWN0IG10a19kZHAgKmRkcCA9IGNvbnRhaW5lcl9vZihtdXRleCwgc3RydWN0IG10a19k
ZHAsCisJCQkJCSAgIG11dGV4W211dGV4LT5pZF0pOworCisJV0FSTl9PTigmZGRwLT5tdXRleFtt
dXRleC0+aWRdICE9IG11dGV4KTsKKworCW11dGV4LT5jbGFpbWVkID0gZmFsc2U7Cit9CisKK2lu
dCBtdGtfZGlzcF9tdXRleF9wcmVwYXJlKHN0cnVjdCBtdGtfZGlzcF9tdXRleCAqbXV0ZXgpCit7
CisJc3RydWN0IG10a19kZHAgKmRkcCA9IGNvbnRhaW5lcl9vZihtdXRleCwgc3RydWN0IG10a19k
ZHAsCisJCQkJCSAgIG11dGV4W211dGV4LT5pZF0pOworCXJldHVybiBjbGtfcHJlcGFyZV9lbmFi
bGUoZGRwLT5jbGspOworfQorCit2b2lkIG10a19kaXNwX211dGV4X3VucHJlcGFyZShzdHJ1Y3Qg
bXRrX2Rpc3BfbXV0ZXggKm11dGV4KQoreworCXN0cnVjdCBtdGtfZGRwICpkZHAgPSBjb250YWlu
ZXJfb2YobXV0ZXgsIHN0cnVjdCBtdGtfZGRwLAorCQkJCQkgICBtdXRleFttdXRleC0+aWRdKTsK
KwljbGtfZGlzYWJsZV91bnByZXBhcmUoZGRwLT5jbGspOworfQorCit2b2lkIG10a19kaXNwX211
dGV4X2FkZF9jb21wKHN0cnVjdCBtdGtfZGlzcF9tdXRleCAqbXV0ZXgsCisJCQkgICAgIGVudW0g
bXRrX2RkcF9jb21wX2lkIGlkKQoreworCXN0cnVjdCBtdGtfZGRwICpkZHAgPSBjb250YWluZXJf
b2YobXV0ZXgsIHN0cnVjdCBtdGtfZGRwLAorCQkJCQkgICBtdXRleFttdXRleC0+aWRdKTsKKwl1
bnNpZ25lZCBpbnQgcmVnOworCisJV0FSTl9PTigmZGRwLT5tdXRleFttdXRleC0+aWRdICE9IG11
dGV4KTsKKworCXN3aXRjaCAoaWQpIHsKKwljYXNlIEREUF9DT01QT05FTlRfRFNJMDoKKwkJcmVn
ID0gTVVURVhfU09GX0RTSTA7CisJCWJyZWFrOworCWNhc2UgRERQX0NPTVBPTkVOVF9EU0kxOgor
CQlyZWcgPSBNVVRFWF9TT0ZfRFNJMDsKKwkJYnJlYWs7CisJY2FzZSBERFBfQ09NUE9ORU5UX0RQ
STA6CisJCXJlZyA9IE1VVEVYX1NPRl9EUEkwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZWcg
PSByZWFkbF9yZWxheGVkKGRkcC0+cmVncyArIERJU1BfUkVHX01VVEVYX01PRChtdXRleC0+aWQp
KTsKKwkJcmVnIHw9IG11dGV4X21vZFtpZF07CisJCXdyaXRlbF9yZWxheGVkKHJlZywgZGRwLT5y
ZWdzICsgRElTUF9SRUdfTVVURVhfTU9EKG11dGV4LT5pZCkpOworCQlyZXR1cm47CisJfQorCisJ
d3JpdGVsX3JlbGF4ZWQocmVnLCBkZHAtPnJlZ3MgKyBESVNQX1JFR19NVVRFWF9TT0YobXV0ZXgt
PmlkKSk7Cit9CisKK3ZvaWQgbXRrX2Rpc3BfbXV0ZXhfcmVtb3ZlX2NvbXAoc3RydWN0IG10a19k
aXNwX211dGV4ICptdXRleCwKKwkJCQllbnVtIG10a19kZHBfY29tcF9pZCBpZCkKK3sKKwlzdHJ1
Y3QgbXRrX2RkcCAqZGRwID0gY29udGFpbmVyX29mKG11dGV4LCBzdHJ1Y3QgbXRrX2RkcCwKKwkJ
CQkJICAgbXV0ZXhbbXV0ZXgtPmlkXSk7CisJdW5zaWduZWQgaW50IHJlZzsKKworCVdBUk5fT04o
JmRkcC0+bXV0ZXhbbXV0ZXgtPmlkXSAhPSBtdXRleCk7CisKKwlzd2l0Y2ggKGlkKSB7CisJY2Fz
ZSBERFBfQ09NUE9ORU5UX0RTSTA6CisJY2FzZSBERFBfQ09NUE9ORU5UX0RTSTE6CisJY2FzZSBE
RFBfQ09NUE9ORU5UX0RQSTA6CisJCXdyaXRlbF9yZWxheGVkKE1VVEVYX1NPRl9TSU5HTEVfTU9E
RSwKKwkJCSAgICAgICBkZHAtPnJlZ3MgKyBESVNQX1JFR19NVVRFWF9TT0YobXV0ZXgtPmlkKSk7
CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJlZyA9IHJlYWRsX3JlbGF4ZWQoZGRwLT5yZWdzICsg
RElTUF9SRUdfTVVURVhfTU9EKG11dGV4LT5pZCkpOworCQlyZWcgJj0gfm11dGV4X21vZFtpZF07
CisJCXdyaXRlbF9yZWxheGVkKHJlZywgZGRwLT5yZWdzICsgRElTUF9SRUdfTVVURVhfTU9EKG11
dGV4LT5pZCkpOworCQlicmVhazsKKwl9Cit9CisKK3ZvaWQgbXRrX2Rpc3BfbXV0ZXhfZW5hYmxl
KHN0cnVjdCBtdGtfZGlzcF9tdXRleCAqbXV0ZXgpCit7CisJc3RydWN0IG10a19kZHAgKmRkcCA9
IGNvbnRhaW5lcl9vZihtdXRleCwgc3RydWN0IG10a19kZHAsCisJCQkJCSAgIG11dGV4W211dGV4
LT5pZF0pOworCisJV0FSTl9PTigmZGRwLT5tdXRleFttdXRleC0+aWRdICE9IG11dGV4KTsKKwor
CXdyaXRlbCgxLCBkZHAtPnJlZ3MgKyBESVNQX1JFR19NVVRFWF9FTihtdXRleC0+aWQpKTsKK30K
Kwordm9pZCBtdGtfZGlzcF9tdXRleF9kaXNhYmxlKHN0cnVjdCBtdGtfZGlzcF9tdXRleCAqbXV0
ZXgpCit7CisJc3RydWN0IG10a19kZHAgKmRkcCA9IGNvbnRhaW5lcl9vZihtdXRleCwgc3RydWN0
IG10a19kZHAsCisJCQkJCSAgIG11dGV4W211dGV4LT5pZF0pOworCisJV0FSTl9PTigmZGRwLT5t
dXRleFttdXRleC0+aWRdICE9IG11dGV4KTsKKworCXdyaXRlbCgwLCBkZHAtPnJlZ3MgKyBESVNQ
X1JFR19NVVRFWF9FTihtdXRleC0+aWQpKTsKK30KKworc3RhdGljIGludCBtdGtfZGRwX3Byb2Jl
KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0g
JnBkZXYtPmRldjsKKwlzdHJ1Y3QgbXRrX2RkcCAqZGRwOworCXN0cnVjdCByZXNvdXJjZSAqcmVn
czsKKwlpbnQgaTsKKworCWRkcCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqZGRwKSwgR0ZQ
X0tFUk5FTCk7CisJaWYgKCFkZHApCisJCXJldHVybiAtRU5PTUVNOworCisJZm9yIChpID0gMDsg
aSA8IDEwOyBpKyspCisJCWRkcC0+bXV0ZXhbaV0uaWQgPSBpOworCisJZGRwLT5jbGsgPSBkZXZt
X2Nsa19nZXQoZGV2LCBOVUxMKTsKKwlpZiAoSVNfRVJSKGRkcC0+Y2xrKSkgeworCQlkZXZfZXJy
KGRldiwgIkZhaWxlZCB0byBnZXQgY2xvY2tcbiIpOworCQlyZXR1cm4gUFRSX0VSUihkZHAtPmNs
ayk7CisJfQorCisJcmVncyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNF
X01FTSwgMCk7CisJZGRwLT5yZWdzID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwgcmVncyk7
CisJaWYgKElTX0VSUihkZHAtPnJlZ3MpKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIG1h
cCBtdXRleCByZWdpc3RlcnNcbiIpOworCQlyZXR1cm4gUFRSX0VSUihkZHAtPnJlZ3MpOworCX0K
KworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRkcCk7CisKKwlyZXR1cm4gMDsKK30KKwor
c3RhdGljIGludCBtdGtfZGRwX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQor
eworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBkZHBf
ZHJpdmVyX2R0X21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMt
ZGlzcC1tdXRleCIgfSwKKwl7fSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBkZHBfZHJp
dmVyX2R0X21hdGNoKTsKKworc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdGtfZGRwX2RyaXZlciA9
IHsKKwkucHJvYmUJCT0gbXRrX2RkcF9wcm9iZSwKKwkucmVtb3ZlCQk9IG10a19kZHBfcmVtb3Zl
LAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJtZWRpYXRlay1kZHAiLAorCQkub3duZXIJPSBU
SElTX01PRFVMRSwKKwkJLm9mX21hdGNoX3RhYmxlID0gZGRwX2RyaXZlcl9kdF9tYXRjaCwKKwl9
LAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2RkcC5o
IGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uOTJjMTE3NQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMv
Z3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2RkcC5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKGMpIDIwMTUgTWVkaWFUZWsgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNp
b24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisg
KgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIE1US19EUk1fRERQX0gKKyNk
ZWZpbmUgTVRLX0RSTV9ERFBfSAorCisjaW5jbHVkZSAibXRrX2RybV9kZHBfY29tcC5oIgorCitz
dHJ1Y3QgcmVnbWFwOworc3RydWN0IGRldmljZTsKK3N0cnVjdCBtdGtfZGlzcF9tdXRleDsKKwor
dm9pZCBtdGtfZGRwX2FkZF9jb21wX3RvX3BhdGgodm9pZCBfX2lvbWVtICpjb25maWdfcmVncywK
KwkJCSAgICAgIGVudW0gbXRrX2RkcF9jb21wX2lkIGN1ciwKKwkJCSAgICAgIGVudW0gbXRrX2Rk
cF9jb21wX2lkIG5leHQpOwordm9pZCBtdGtfZGRwX3JlbW92ZV9jb21wX2Zyb21fcGF0aCh2b2lk
IF9faW9tZW0gKmNvbmZpZ19yZWdzLAorCQkJCSAgIGVudW0gbXRrX2RkcF9jb21wX2lkIGN1ciwK
KwkJCQkgICBlbnVtIG10a19kZHBfY29tcF9pZCBuZXh0KTsKKworc3RydWN0IG10a19kaXNwX211
dGV4ICptdGtfZGlzcF9tdXRleF9nZXQoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQg
aWQpOworaW50IG10a19kaXNwX211dGV4X3ByZXBhcmUoc3RydWN0IG10a19kaXNwX211dGV4ICpt
dXRleCk7Cit2b2lkIG10a19kaXNwX211dGV4X2FkZF9jb21wKHN0cnVjdCBtdGtfZGlzcF9tdXRl
eCAqbXV0ZXgsCisJCQkgICAgIGVudW0gbXRrX2RkcF9jb21wX2lkIGlkKTsKK3ZvaWQgbXRrX2Rp
c3BfbXV0ZXhfZW5hYmxlKHN0cnVjdCBtdGtfZGlzcF9tdXRleCAqbXV0ZXgpOwordm9pZCBtdGtf
ZGlzcF9tdXRleF9kaXNhYmxlKHN0cnVjdCBtdGtfZGlzcF9tdXRleCAqbXV0ZXgpOwordm9pZCBt
dGtfZGlzcF9tdXRleF9yZW1vdmVfY29tcChzdHJ1Y3QgbXRrX2Rpc3BfbXV0ZXggKm11dGV4LAor
CQkJCWVudW0gbXRrX2RkcF9jb21wX2lkIGlkKTsKK3ZvaWQgbXRrX2Rpc3BfbXV0ZXhfdW5wcmVw
YXJlKHN0cnVjdCBtdGtfZGlzcF9tdXRleCAqbXV0ZXgpOwordm9pZCBtdGtfZGlzcF9tdXRleF9w
dXQoc3RydWN0IG10a19kaXNwX211dGV4ICptdXRleCk7CisKKyNlbmRpZiAvKiBNVEtfRFJNX0RE
UF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHBf
Y29tcC5jIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwX2NvbXAuYwpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTcwZmNmCi0tLSAvZGV2L251bGwKKysr
IGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwX2NvbXAuYwpAQCAtMCwwICsx
LDIyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMuCisgKiBBdXRo
b3JzOgorICoJWVQgU2hlbiA8eXQuc2hlbkBtZWRpYXRlay5jb20+CisgKglDSyBIdSA8Y2suaHVA
bWVkaWF0ZWsuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFt
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvb2Yu
aD4KKyNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfaXJx
Lmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0
Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgIm10a19kcm1f
ZHJ2LmgiCisjaW5jbHVkZSAibXRrX2RybV9wbGFuZS5oIgorI2luY2x1ZGUgIm10a19kcm1fZGRw
X2NvbXAuaCIKKworI2RlZmluZSBESVNQX09EX0VOCQkJCTB4MDAwMAorI2RlZmluZSBESVNQX09E
X0lOVEVOCQkJCTB4MDAwOAorI2RlZmluZSBESVNQX09EX0lOVFNUQQkJCQkweDAwMGMKKyNkZWZp
bmUgRElTUF9PRF9DRkcJCQkJMHgwMDIwCisjZGVmaW5lIERJU1BfT0RfU0laRQkJCQkweDAwMzAK
KworI2RlZmluZSBESVNQX1JFR19VRk9fU1RBUlQJCQkweDAwMDAKKworI2RlZmluZSBESVNQX0NP
TE9SX0NGR19NQUlOCQkJMHgwNDAwCisjZGVmaW5lIERJU1BfQ09MT1JfU1RBUlQJCQkweDBjMDAK
KyNkZWZpbmUgRElTUF9DT0xPUl9XSURUSAkJCTB4MGM1MAorI2RlZmluZSBESVNQX0NPTE9SX0hF
SUdIVAkJCTB4MGM1NAorCisjZGVmaW5lCU9EX1JFTEFZX01PREUJCUJJVCgwKQorCisjZGVmaW5l
CVVGT19CWVBBU1MJCUJJVCgyKQorCisjZGVmaW5lCUNPTE9SX0JZUEFTU19BTEwJQklUKDcpCisj
ZGVmaW5lCUNPTE9SX1NFUV9TRUwJCUJJVCgxMykKKworc3RhdGljIHZvaWQgbXRrX2NvbG9yX2Nv
bmZpZyhzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wLCB1bnNpZ25lZCBpbnQgdywKKwkJCSAgICAg
dW5zaWduZWQgaW50IGgsIHVuc2lnbmVkIGludCB2cmVmcmVzaCkKK3sKKwl3cml0ZWwodywgY29t
cC0+cmVncyArIERJU1BfQ09MT1JfV0lEVEgpOworCXdyaXRlbChoLCBjb21wLT5yZWdzICsgRElT
UF9DT0xPUl9IRUlHSFQpOworfQorCitzdGF0aWMgdm9pZCBtdGtfY29sb3Jfc3RhcnQoc3RydWN0
IG10a19kZHBfY29tcCAqY29tcCkKK3sKKwl3cml0ZWwoQ09MT1JfQllQQVNTX0FMTCB8IENPTE9S
X1NFUV9TRUwsCisJICAgICAgIGNvbXAtPnJlZ3MgKyBESVNQX0NPTE9SX0NGR19NQUlOKTsKKwl3
cml0ZWwoMHgxLCBjb21wLT5yZWdzICsgRElTUF9DT0xPUl9TVEFSVCk7Cit9CisKK3N0YXRpYyB2
b2lkIG10a19vZF9jb25maWcoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCwgdW5zaWduZWQgaW50
IHcsCisJCQkgIHVuc2lnbmVkIGludCBoLCB1bnNpZ25lZCBpbnQgdnJlZnJlc2gpCit7CisJd3Jp
dGVsKHcgPDwgMTYgfCBoLCBjb21wLT5yZWdzICsgRElTUF9PRF9TSVpFKTsKK30KKworc3RhdGlj
IHZvaWQgbXRrX29kX3N0YXJ0KHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXApCit7CisJd3JpdGVs
KE9EX1JFTEFZX01PREUsIGNvbXAtPnJlZ3MgKyBESVNQX09EX0NGRyk7CisJd3JpdGVsKDEsIGNv
bXAtPnJlZ3MgKyBESVNQX09EX0VOKTsKK30KKworc3RhdGljIHZvaWQgbXRrX3Vmb2Vfc3RhcnQo
c3RydWN0IG10a19kZHBfY29tcCAqY29tcCkKK3sKKwl3cml0ZWwoVUZPX0JZUEFTUywgY29tcC0+
cmVncyArIERJU1BfUkVHX1VGT19TVEFSVCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRr
X2RkcF9jb21wX2Z1bmNzIGRkcF9jb2xvciA9IHsKKwkuY29uZmlnID0gbXRrX2NvbG9yX2NvbmZp
ZywKKwkuc3RhcnQgPSBtdGtfY29sb3Jfc3RhcnQsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0
IG10a19kZHBfY29tcF9mdW5jcyBkZHBfb2QgPSB7CisJLmNvbmZpZyA9IG10a19vZF9jb25maWcs
CisJLnN0YXJ0ID0gbXRrX29kX3N0YXJ0LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBtdGtf
ZGRwX2NvbXBfZnVuY3MgZGRwX3Vmb2UgPSB7CisJLnN0YXJ0ID0gbXRrX3Vmb2Vfc3RhcnQsCit9
OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG10a19kZHBfY29tcF9zdGVtW01US19ERFBf
Q09NUF9UWVBFX01BWF0gPSB7CisJW01US19ESVNQX09WTF0gPSAib3ZsIiwKKwlbTVRLX0RJU1Bf
UkRNQV0gPSAicmRtYSIsCisJW01US19ESVNQX1dETUFdID0gIndkbWEiLAorCVtNVEtfRElTUF9D
T0xPUl0gPSAiY29sb3IiLAorCVtNVEtfRElTUF9BQUxdID0gImFhbCIsCisJW01US19ESVNQX0dB
TU1BXSA9ICJnYW1tYSIsCisJW01US19ESVNQX1VGT0VdID0gInVmb2UiLAorCVtNVEtfRFNJXSA9
ICJkc2kiLAorCVtNVEtfRFBJXSA9ICJkcGkiLAorCVtNVEtfRElTUF9QV01dID0gInB3bSIsCisJ
W01US19ESVNQX01VVEVYXSA9ICJtdXRleCIsCisJW01US19ESVNQX09EXSA9ICJvZCIsCit9Owor
CitzdHJ1Y3QgbXRrX2RkcF9jb21wX21hdGNoIHsKKwllbnVtIG10a19kZHBfY29tcF90eXBlIHR5
cGU7CisJaW50IGFsaWFzX2lkOworCWNvbnN0IHN0cnVjdCBtdGtfZGRwX2NvbXBfZnVuY3MgKmZ1
bmNzOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBtdGtfZGRwX2NvbXBfbWF0Y2ggbXRrX2Rk
cF9tYXRjaGVzW0REUF9DT01QT05FTlRfSURfTUFYXSA9IHsKKwlbRERQX0NPTVBPTkVOVF9BQUxd
CT0geyBNVEtfRElTUF9BQUwsCTAsIE5VTEwgfSwKKwlbRERQX0NPTVBPTkVOVF9DT0xPUjBdCT0g
eyBNVEtfRElTUF9DT0xPUiwJMCwgJmRkcF9jb2xvciB9LAorCVtERFBfQ09NUE9ORU5UX0NPTE9S
MV0JPSB7IE1US19ESVNQX0NPTE9SLAkxLCAmZGRwX2NvbG9yIH0sCisJW0REUF9DT01QT05FTlRf
RFBJMF0JPSB7IE1US19EUEksCQkwLCBOVUxMIH0sCisJW0REUF9DT01QT05FTlRfRFNJMF0JPSB7
IE1US19EU0ksCQkwLCBOVUxMIH0sCisJW0REUF9DT01QT05FTlRfRFNJMV0JPSB7IE1US19EU0ks
CQkxLCBOVUxMIH0sCisJW0REUF9DT01QT05FTlRfR0FNTUFdCT0geyBNVEtfRElTUF9HQU1NQSwJ
MCwgTlVMTCB9LAorCVtERFBfQ09NUE9ORU5UX09EXQk9IHsgTVRLX0RJU1BfT0QsCTAsICZkZHBf
b2QgfSwKKwlbRERQX0NPTVBPTkVOVF9PVkwwXQk9IHsgTVRLX0RJU1BfT1ZMLAkwLCBOVUxMIH0s
CisJW0REUF9DT01QT05FTlRfT1ZMMV0JPSB7IE1US19ESVNQX09WTCwJMSwgTlVMTCB9LAorCVtE
RFBfQ09NUE9ORU5UX1BXTTBdCT0geyBNVEtfRElTUF9QV00sCTAsIE5VTEwgfSwKKwlbRERQX0NP
TVBPTkVOVF9SRE1BMF0JPSB7IE1US19ESVNQX1JETUEsCTAsIE5VTEwgfSwKKwlbRERQX0NPTVBP
TkVOVF9SRE1BMV0JPSB7IE1US19ESVNQX1JETUEsCTEsIE5VTEwgfSwKKwlbRERQX0NPTVBPTkVO
VF9SRE1BMl0JPSB7IE1US19ESVNQX1JETUEsCTIsIE5VTEwgfSwKKwlbRERQX0NPTVBPTkVOVF9V
Rk9FXQk9IHsgTVRLX0RJU1BfVUZPRSwJMCwgJmRkcF91Zm9lIH0sCisJW0REUF9DT01QT05FTlRf
V0RNQTBdCT0geyBNVEtfRElTUF9XRE1BLAkwLCBOVUxMIH0sCisJW0REUF9DT01QT05FTlRfV0RN
QTFdCT0geyBNVEtfRElTUF9XRE1BLAkxLCBOVUxMIH0sCit9OworCitpbnQgbXRrX2RkcF9jb21w
X2dldF9pZChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsCisJCQllbnVtIG10a19kZHBfY29tcF90
eXBlIGNvbXBfdHlwZSkKK3sKKwlpbnQgaWQgPSBvZl9hbGlhc19nZXRfaWQobm9kZSwgbXRrX2Rk
cF9jb21wX3N0ZW1bY29tcF90eXBlXSk7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJS
QVlfU0laRShtdGtfZGRwX21hdGNoZXMpOyBpKyspIHsKKwkJaWYgKGNvbXBfdHlwZSA9PSBtdGtf
ZGRwX21hdGNoZXNbaV0udHlwZSAmJgorCQkgICAgKGlkIDwgMCB8fCBpZCA9PSBtdGtfZGRwX21h
dGNoZXNbaV0uYWxpYXNfaWQpKQorCQkJcmV0dXJuIGk7CisJfQorCisJcmV0dXJuIC1FSU5WQUw7
Cit9CisKK2ludCBtdGtfZGRwX2NvbXBfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBk
ZXZpY2Vfbm9kZSAqbm9kZSwKKwkJICAgICAgc3RydWN0IG10a19kZHBfY29tcCAqY29tcCwgZW51
bSBtdGtfZGRwX2NvbXBfaWQgY29tcF9pZCwKKwkJICAgICAgY29uc3Qgc3RydWN0IG10a19kZHBf
Y29tcF9mdW5jcyAqZnVuY3MpCit7CisJZW51bSBtdGtfZGRwX2NvbXBfdHlwZSB0eXBlOworCXN0
cnVjdCBkZXZpY2Vfbm9kZSAqbGFyYl9ub2RlOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmxh
cmJfcGRldjsKKworCWlmIChjb21wX2lkIDwgMCB8fCBjb21wX2lkID49IEREUF9DT01QT05FTlRf
SURfTUFYKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWNvbXAtPmlkID0gY29tcF9pZDsKKwljb21w
LT5mdW5jcyA9IGZ1bmNzID86IG10a19kZHBfbWF0Y2hlc1tjb21wX2lkXS5mdW5jczsKKworCWlm
IChjb21wX2lkID09IEREUF9DT01QT05FTlRfRFBJMCB8fAorCSAgICBjb21wX2lkID09IEREUF9D
T01QT05FTlRfRFNJMCB8fAorCSAgICBjb21wX2lkID09IEREUF9DT01QT05FTlRfUFdNMCkgewor
CQljb21wLT5yZWdzID0gTlVMTDsKKwkJY29tcC0+Y2xrID0gTlVMTDsKKwkJY29tcC0+aXJxID0g
MDsKKwkJcmV0dXJuIDA7CisJfQorCisJY29tcC0+cmVncyA9IG9mX2lvbWFwKG5vZGUsIDApOwor
CWNvbXAtPmlycSA9IG9mX2lycV9nZXQobm9kZSwgMCk7CisJY29tcC0+Y2xrID0gb2ZfY2xrX2dl
dChub2RlLCAwKTsKKwlpZiAoSVNfRVJSKGNvbXAtPmNsaykpCisJCWNvbXAtPmNsayA9IE5VTEw7
CisKKwl0eXBlID0gbXRrX2RkcF9tYXRjaGVzW2NvbXBfaWRdLnR5cGU7CisKKwkvKiBPbmx5IERN
QSBjYXBhYmxlIGNvbXBvbmVudHMgbmVlZCB0aGUgTEFSQiBwcm9wZXJ0eSAqLworCWNvbXAtPmxh
cmJfZGV2ID0gTlVMTDsKKwlpZiAodHlwZSAhPSBNVEtfRElTUF9PVkwgJiYKKwkgICAgdHlwZSAh
PSBNVEtfRElTUF9SRE1BICYmCisJICAgIHR5cGUgIT0gTVRLX0RJU1BfV0RNQSkKKwkJcmV0dXJu
IDA7CisKKwlsYXJiX25vZGUgPSBvZl9wYXJzZV9waGFuZGxlKG5vZGUsICJtZWRpYXRlayxsYXJi
IiwgMCk7CisJaWYgKCFsYXJiX25vZGUpIHsKKwkJZGV2X2VycihkZXYsCisJCQkiTWlzc2luZyBt
ZWRpYWRlayxsYXJiIHBoYW5kbGUgaW4gJXMgbm9kZVxuIiwKKwkJCW5vZGUtPmZ1bGxfbmFtZSk7
CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWxhcmJfcGRldiA9IG9mX2ZpbmRfZGV2aWNlX2J5
X25vZGUobGFyYl9ub2RlKTsKKwlpZiAoIWxhcmJfcGRldikgeworCQlkZXZfd2FybihkZXYsICJX
YWl0aW5nIGZvciBsYXJiIGRldmljZSAlc1xuIiwKKwkJCSBsYXJiX25vZGUtPmZ1bGxfbmFtZSk7
CisJCW9mX25vZGVfcHV0KGxhcmJfbm9kZSk7CisJCXJldHVybiAtRVBST0JFX0RFRkVSOworCX0K
KwlvZl9ub2RlX3B1dChsYXJiX25vZGUpOworCisJY29tcC0+bGFyYl9kZXYgPSAmbGFyYl9wZGV2
LT5kZXY7CisKKwlyZXR1cm4gMDsKK30KKworaW50IG10a19kZHBfY29tcF9yZWdpc3RlcihzdHJ1
Y3QgZHJtX2RldmljZSAqZHJtLCBzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKQoreworCXN0cnVj
dCBtdGtfZHJtX3ByaXZhdGUgKnByaXZhdGUgPSBkcm0tPmRldl9wcml2YXRlOworCisJaWYgKHBy
aXZhdGUtPmRkcF9jb21wW2NvbXAtPmlkXSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCXByaXZhdGUt
PmRkcF9jb21wW2NvbXAtPmlkXSA9IGNvbXA7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgbXRrX2Rk
cF9jb21wX3VucmVnaXN0ZXIoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgc3RydWN0IG10a19kZHBf
Y29tcCAqY29tcCkKK3sKKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2YXRlID0gZHJtLT5k
ZXZfcHJpdmF0ZTsKKworCXByaXZhdGUtPmRkcF9jb21wW2NvbXAtPmlkXSA9IE5VTEw7Cit9CmRp
ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHBfY29tcC5oIGIv
ZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwX2NvbXAuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjEzYmE5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVy
cy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwX2NvbXAuaApAQCAtMCwwICsxLDE1MCBAQAor
LyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMuCisgKgorICogVGhpcyBwcm9n
cmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp
ZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgTVRLX0RSTV9E
RFBfQ09NUF9ICisjZGVmaW5lIE1US19EUk1fRERQX0NPTVBfSAorCisjaW5jbHVkZSA8bGludXgv
aW8uaD4KKworc3RydWN0IGRldmljZTsKK3N0cnVjdCBkZXZpY2Vfbm9kZTsKK3N0cnVjdCBkcm1f
Y3J0YzsKK3N0cnVjdCBkcm1fZGV2aWNlOworc3RydWN0IG10a19wbGFuZV9zdGF0ZTsKKworZW51
bSBtdGtfZGRwX2NvbXBfdHlwZSB7CisJTVRLX0RJU1BfT1ZMLAorCU1US19ESVNQX1JETUEsCisJ
TVRLX0RJU1BfV0RNQSwKKwlNVEtfRElTUF9DT0xPUiwKKwlNVEtfRElTUF9BQUwsCisJTVRLX0RJ
U1BfR0FNTUEsCisJTVRLX0RJU1BfVUZPRSwKKwlNVEtfRFNJLAorCU1US19EUEksCisJTVRLX0RJ
U1BfUFdNLAorCU1US19ESVNQX01VVEVYLAorCU1US19ESVNQX09ELAorCU1US19ERFBfQ09NUF9U
WVBFX01BWCwKK307CisKK2VudW0gbXRrX2RkcF9jb21wX2lkIHsKKwlERFBfQ09NUE9ORU5UX0FB
TCwKKwlERFBfQ09NUE9ORU5UX0NPTE9SMCwKKwlERFBfQ09NUE9ORU5UX0NPTE9SMSwKKwlERFBf
Q09NUE9ORU5UX0RQSTAsCisJRERQX0NPTVBPTkVOVF9EU0kwLAorCUREUF9DT01QT05FTlRfRFNJ
MSwKKwlERFBfQ09NUE9ORU5UX0dBTU1BLAorCUREUF9DT01QT05FTlRfT0QsCisJRERQX0NPTVBP
TkVOVF9PVkwwLAorCUREUF9DT01QT05FTlRfT1ZMMSwKKwlERFBfQ09NUE9ORU5UX1BXTTAsCisJ
RERQX0NPTVBPTkVOVF9QV00xLAorCUREUF9DT01QT05FTlRfUkRNQTAsCisJRERQX0NPTVBPTkVO
VF9SRE1BMSwKKwlERFBfQ09NUE9ORU5UX1JETUEyLAorCUREUF9DT01QT05FTlRfVUZPRSwKKwlE
RFBfQ09NUE9ORU5UX1dETUEwLAorCUREUF9DT01QT05FTlRfV0RNQTEsCisJRERQX0NPTVBPTkVO
VF9JRF9NQVgsCit9OworCitzdHJ1Y3QgbXRrX2RkcF9jb21wOworCitzdHJ1Y3QgbXRrX2RkcF9j
b21wX2Z1bmNzIHsKKwl2b2lkICgqY29uZmlnKShzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wLCB1
bnNpZ25lZCBpbnQgdywKKwkJICAgICAgIHVuc2lnbmVkIGludCBoLCB1bnNpZ25lZCBpbnQgdnJl
ZnJlc2gpOworCXZvaWQgKCpzdGFydCkoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCk7CisJdm9p
ZCAoKnN0b3ApKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXApOworCXZvaWQgKCplbmFibGVfdmJs
YW5rKShzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wLCBzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOwor
CXZvaWQgKCpkaXNhYmxlX3ZibGFuaykoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCk7CisJdm9p
ZCAoKmxheWVyX29uKShzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wLCB1bnNpZ25lZCBpbnQgaWR4
KTsKKwl2b2lkICgqbGF5ZXJfb2ZmKShzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wLCB1bnNpZ25l
ZCBpbnQgaWR4KTsKKwl2b2lkICgqbGF5ZXJfY29uZmlnKShzdHJ1Y3QgbXRrX2RkcF9jb21wICpj
b21wLCB1bnNpZ25lZCBpbnQgaWR4LAorCQkJICAgICBzdHJ1Y3QgbXRrX3BsYW5lX3N0YXRlICpz
dGF0ZSk7Cit9OworCitzdHJ1Y3QgbXRrX2RkcF9jb21wIHsKKwlzdHJ1Y3QgY2xrICpjbGs7CisJ
dm9pZCBfX2lvbWVtICpyZWdzOworCWludCBpcnE7CisJc3RydWN0IGRldmljZSAqbGFyYl9kZXY7
CisJZW51bSBtdGtfZGRwX2NvbXBfaWQgaWQ7CisJY29uc3Qgc3RydWN0IG10a19kZHBfY29tcF9m
dW5jcyAqZnVuY3M7Cit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgbXRrX2RkcF9jb21wX2NvbmZp
ZyhzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wLAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgdywg
dW5zaWduZWQgaW50IGgsCisJCQkJICAgICAgIHVuc2lnbmVkIGludCB2cmVmcmVzaCkKK3sKKwlp
ZiAoY29tcC0+ZnVuY3MgJiYgY29tcC0+ZnVuY3MtPmNvbmZpZykKKwkJY29tcC0+ZnVuY3MtPmNv
bmZpZyhjb21wLCB3LCBoLCB2cmVmcmVzaCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtdGtf
ZGRwX2NvbXBfc3RhcnQoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCkKK3sKKwlpZiAoY29tcC0+
ZnVuY3MgJiYgY29tcC0+ZnVuY3MtPnN0YXJ0KQorCQljb21wLT5mdW5jcy0+c3RhcnQoY29tcCk7
Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtdGtfZGRwX2NvbXBfc3RvcChzdHJ1Y3QgbXRrX2Rk
cF9jb21wICpjb21wKQoreworCWlmIChjb21wLT5mdW5jcyAmJiBjb21wLT5mdW5jcy0+c3RvcCkK
KwkJY29tcC0+ZnVuY3MtPnN0b3AoY29tcCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtdGtf
ZGRwX2NvbXBfZW5hYmxlX3ZibGFuayhzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wLAorCQkJCQkg
ICAgICBzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJaWYgKGNvbXAtPmZ1bmNzICYmIGNvbXAt
PmZ1bmNzLT5lbmFibGVfdmJsYW5rKQorCQljb21wLT5mdW5jcy0+ZW5hYmxlX3ZibGFuayhjb21w
LCBjcnRjKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG10a19kZHBfY29tcF9kaXNhYmxlX3Zi
bGFuayhzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKQoreworCWlmIChjb21wLT5mdW5jcyAmJiBj
b21wLT5mdW5jcy0+ZGlzYWJsZV92YmxhbmspCisJCWNvbXAtPmZ1bmNzLT5kaXNhYmxlX3ZibGFu
ayhjb21wKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG10a19kZHBfY29tcF9sYXllcl9vbihz
dHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wLAorCQkJCQkgdW5zaWduZWQgaW50IGlkeCkKK3sKKwlp
ZiAoY29tcC0+ZnVuY3MgJiYgY29tcC0+ZnVuY3MtPmxheWVyX29uKQorCQljb21wLT5mdW5jcy0+
bGF5ZXJfb24oY29tcCwgaWR4KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG10a19kZHBfY29t
cF9sYXllcl9vZmYoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCwKKwkJCQkJICB1bnNpZ25lZCBp
bnQgaWR4KQoreworCWlmIChjb21wLT5mdW5jcyAmJiBjb21wLT5mdW5jcy0+bGF5ZXJfb2ZmKQor
CQljb21wLT5mdW5jcy0+bGF5ZXJfb2ZmKGNvbXAsIGlkeCk7Cit9CisKK3N0YXRpYyBpbmxpbmUg
dm9pZCBtdGtfZGRwX2NvbXBfbGF5ZXJfY29uZmlnKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAs
CisJCQkJCSAgICAgdW5zaWduZWQgaW50IGlkeCwKKwkJCQkJICAgICBzdHJ1Y3QgbXRrX3BsYW5l
X3N0YXRlICpzdGF0ZSkKK3sKKwlpZiAoY29tcC0+ZnVuY3MgJiYgY29tcC0+ZnVuY3MtPmxheWVy
X2NvbmZpZykKKwkJY29tcC0+ZnVuY3MtPmxheWVyX2NvbmZpZyhjb21wLCBpZHgsIHN0YXRlKTsK
K30KKworaW50IG10a19kZHBfY29tcF9nZXRfaWQoc3RydWN0IGRldmljZV9ub2RlICpub2RlLAor
CQkJZW51bSBtdGtfZGRwX2NvbXBfdHlwZSBjb21wX3R5cGUpOworaW50IG10a19kZHBfY29tcF9p
bml0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9ub2RlICpjb21wX25vZGUsCisJ
CSAgICAgIHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAsIGVudW0gbXRrX2RkcF9jb21wX2lkIGNv
bXBfaWQsCisJCSAgICAgIGNvbnN0IHN0cnVjdCBtdGtfZGRwX2NvbXBfZnVuY3MgKmZ1bmNzKTsK
K2ludCBtdGtfZGRwX2NvbXBfcmVnaXN0ZXIoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgc3RydWN0
IG10a19kZHBfY29tcCAqY29tcCk7Cit2b2lkIG10a19kZHBfY29tcF91bnJlZ2lzdGVyKHN0cnVj
dCBkcm1fZGV2aWNlICpkcm0sIHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXApOworCisjZW5kaWYg
LyogTVRLX0RSTV9ERFBfQ09NUF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVk
aWF0ZWsvbXRrX2RybV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Ry
di5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiMWI0NWQKLS0tIC9kZXYv
bnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuYwpAQCAtMCww
ICsxLDU2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMuCisgKiBB
dXRob3I6IFlUIFNIRU4gPHl0LnNoZW5AbWVkaWF0ZWsuY29tPgorICoKKyAqIFRoaXMgcHJvZ3Jh
bSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5
CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8ZHJtL2RybVAu
aD4KKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pYy5oPgorI2luY2x1ZGUgPGRybS9kcm1fYXRvbWlj
X2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KKyNpbmNsdWRlIDxk
cm0vZHJtX2dlbS5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBvbmVudC5oPgorI2luY2x1ZGUgPGxp
bnV4L2lvbW11Lmg+CisjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgorI2luY2x1ZGUgPGxp
bnV4L29mX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgorCisjaW5j
bHVkZSAibXRrX2RybV9jcnRjLmgiCisjaW5jbHVkZSAibXRrX2RybV9kZHAuaCIKKyNpbmNsdWRl
ICJtdGtfZHJtX2RkcF9jb21wLmgiCisjaW5jbHVkZSAibXRrX2RybV9kcnYuaCIKKyNpbmNsdWRl
ICJtdGtfZHJtX2ZiLmgiCisjaW5jbHVkZSAibXRrX2RybV9nZW0uaCIKKworI2RlZmluZSBEUklW
RVJfTkFNRSAibWVkaWF0ZWsiCisjZGVmaW5lIERSSVZFUl9ERVNDICJNZWRpYXRlayBTb0MgRFJN
IgorI2RlZmluZSBEUklWRVJfREFURSAiMjAxNTA1MTMiCisjZGVmaW5lIERSSVZFUl9NQUpPUiAx
CisjZGVmaW5lIERSSVZFUl9NSU5PUiAwCisKK3N0YXRpYyB2b2lkIG10a19hdG9taWNfc2NoZWR1
bGUoc3RydWN0IG10a19kcm1fcHJpdmF0ZSAqcHJpdmF0ZSwKKwkJCQlzdHJ1Y3QgZHJtX2F0b21p
Y19zdGF0ZSAqc3RhdGUpCit7CisJcHJpdmF0ZS0+Y29tbWl0LnN0YXRlID0gc3RhdGU7CisJc2No
ZWR1bGVfd29yaygmcHJpdmF0ZS0+Y29tbWl0LndvcmspOworfQorCitzdGF0aWMgdm9pZCBtdGtf
YXRvbWljX3dhaXRfZm9yX2ZlbmNlcyhzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUpCit7
CisJc3RydWN0IGRybV9wbGFuZSAqcGxhbmU7CisJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqcGxh
bmVfc3RhdGU7CisJaW50IGk7CisKKwlmb3JfZWFjaF9wbGFuZV9pbl9zdGF0ZShzdGF0ZSwgcGxh
bmUsIHBsYW5lX3N0YXRlLCBpKQorCQltdGtfZmJfd2FpdChwbGFuZS0+c3RhdGUtPmZiKTsKK30K
Kworc3RhdGljIHZvaWQgbXRrX2F0b21pY19jb21wbGV0ZShzdHJ1Y3QgbXRrX2RybV9wcml2YXRl
ICpwcml2YXRlLAorCQkJCXN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSkKK3sKKwlzdHJ1
Y3QgZHJtX2RldmljZSAqZHJtID0gcHJpdmF0ZS0+ZHJtOworCisJbXRrX2F0b21pY193YWl0X2Zv
cl9mZW5jZXMoc3RhdGUpOworCisJZHJtX2F0b21pY19oZWxwZXJfY29tbWl0X21vZGVzZXRfZGlz
YWJsZXMoZHJtLCBzdGF0ZSk7CisJZHJtX2F0b21pY19oZWxwZXJfY29tbWl0X3BsYW5lcyhkcm0s
IHN0YXRlLCBmYWxzZSk7CisJZHJtX2F0b21pY19oZWxwZXJfY29tbWl0X21vZGVzZXRfZW5hYmxl
cyhkcm0sIHN0YXRlKTsKKwlkcm1fYXRvbWljX2hlbHBlcl93YWl0X2Zvcl92YmxhbmtzKGRybSwg
c3RhdGUpOworCWRybV9hdG9taWNfaGVscGVyX2NsZWFudXBfcGxhbmVzKGRybSwgc3RhdGUpOwor
CWRybV9hdG9taWNfc3RhdGVfZnJlZShzdGF0ZSk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19hdG9t
aWNfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IG10a19kcm1fcHJp
dmF0ZSAqcHJpdmF0ZSA9IGNvbnRhaW5lcl9vZih3b3JrLAorCQkJc3RydWN0IG10a19kcm1fcHJp
dmF0ZSwgY29tbWl0LndvcmspOworCisJbXRrX2F0b21pY19jb21wbGV0ZShwcml2YXRlLCBwcml2
YXRlLT5jb21taXQuc3RhdGUpOworfQorCitzdGF0aWMgaW50IG10a19hdG9taWNfY29tbWl0KHN0
cnVjdCBkcm1fZGV2aWNlICpkcm0sCisJCQkgICAgIHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpz
dGF0ZSwKKwkJCSAgICAgYm9vbCBhc3luYykKK3sKKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpw
cml2YXRlID0gZHJtLT5kZXZfcHJpdmF0ZTsKKwlpbnQgcmV0OworCisJcmV0ID0gZHJtX2F0b21p
Y19oZWxwZXJfcHJlcGFyZV9wbGFuZXMoZHJtLCBzdGF0ZSk7CisJaWYgKHJldCkKKwkJcmV0dXJu
IHJldDsKKworCW11dGV4X2xvY2soJnByaXZhdGUtPmNvbW1pdC5sb2NrKTsKKwlmbHVzaF93b3Jr
KCZwcml2YXRlLT5jb21taXQud29yayk7CisKKwlkcm1fYXRvbWljX2hlbHBlcl9zd2FwX3N0YXRl
KGRybSwgc3RhdGUpOworCisJaWYgKGFzeW5jKQorCQltdGtfYXRvbWljX3NjaGVkdWxlKHByaXZh
dGUsIHN0YXRlKTsKKwllbHNlCisJCW10a19hdG9taWNfY29tcGxldGUocHJpdmF0ZSwgc3RhdGUp
OworCisJbXV0ZXhfdW5sb2NrKCZwcml2YXRlLT5jb21taXQubG9jayk7CisKKwlyZXR1cm4gMDsK
K30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fbW9kZV9jb25maWdfZnVuY3MgbXRrX2RybV9t
b2RlX2NvbmZpZ19mdW5jcyA9IHsKKwkuZmJfY3JlYXRlID0gbXRrX2RybV9tb2RlX2ZiX2NyZWF0
ZSwKKwkuYXRvbWljX2NoZWNrID0gZHJtX2F0b21pY19oZWxwZXJfY2hlY2ssCisJLmF0b21pY19j
b21taXQgPSBtdGtfYXRvbWljX2NvbW1pdCwKK307CisKK3N0YXRpYyBjb25zdCBlbnVtIG10a19k
ZHBfY29tcF9pZCBtdGtfZGRwX21haW5bXSA9IHsKKwlERFBfQ09NUE9ORU5UX09WTDAsCisJRERQ
X0NPTVBPTkVOVF9DT0xPUjAsCisJRERQX0NPTVBPTkVOVF9BQUwsCisJRERQX0NPTVBPTkVOVF9P
RCwKKwlERFBfQ09NUE9ORU5UX1JETUEwLAorCUREUF9DT01QT05FTlRfVUZPRSwKKwlERFBfQ09N
UE9ORU5UX0RTSTAsCisJRERQX0NPTVBPTkVOVF9QV00wLAorfTsKKworc3RhdGljIGNvbnN0IGVu
dW0gbXRrX2RkcF9jb21wX2lkIG10a19kZHBfZXh0W10gPSB7CisJRERQX0NPTVBPTkVOVF9PVkwx
LAorCUREUF9DT01QT05FTlRfQ09MT1IxLAorCUREUF9DT01QT05FTlRfR0FNTUEsCisJRERQX0NP
TVBPTkVOVF9SRE1BMSwKKwlERFBfQ09NUE9ORU5UX0RQSTAsCit9OworCitzdGF0aWMgaW50IG10
a19kcm1fa21zX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRybSkKK3sKKwlzdHJ1Y3QgbXRrX2Ry
bV9wcml2YXRlICpwcml2YXRlID0gZHJtLT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgcGxhdGZvcm1f
ZGV2aWNlICpwZGV2OworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisJaW50IHJldDsKKworCWlm
ICghaW9tbXVfcHJlc2VudCgmcGxhdGZvcm1fYnVzX3R5cGUpKQorCQlyZXR1cm4gLUVQUk9CRV9E
RUZFUjsKKworCXBkZXYgPSBvZl9maW5kX2RldmljZV9ieV9ub2RlKHByaXZhdGUtPm11dGV4X25v
ZGUpOworCWlmICghcGRldikgeworCQlkZXZfZXJyKGRybS0+ZGV2LCAiV2FpdGluZyBmb3IgZGlz
cC1tdXRleCBkZXZpY2UgJXNcbiIsCisJCQlwcml2YXRlLT5tdXRleF9ub2RlLT5mdWxsX25hbWUp
OworCQlvZl9ub2RlX3B1dChwcml2YXRlLT5tdXRleF9ub2RlKTsKKwkJcmV0dXJuIC1FUFJPQkVf
REVGRVI7CisJfQorCXByaXZhdGUtPm11dGV4X2RldiA9ICZwZGV2LT5kZXY7CisKKwlkcm1fbW9k
ZV9jb25maWdfaW5pdChkcm0pOworCisJZHJtLT5tb2RlX2NvbmZpZy5taW5fd2lkdGggPSA2NDsK
Kwlkcm0tPm1vZGVfY29uZmlnLm1pbl9oZWlnaHQgPSA2NDsKKworCS8qCisJICogc2V0IG1heCB3
aWR0aCBhbmQgaGVpZ2h0IGFzIGRlZmF1bHQgdmFsdWUoNDA5Nng0MDk2KS4KKwkgKiB0aGlzIHZh
bHVlIHdvdWxkIGJlIHVzZWQgdG8gY2hlY2sgZnJhbWVidWZmZXIgc2l6ZSBsaW1pdGF0aW9uCisJ
ICogYXQgZHJtX21vZGVfYWRkZmIoKS4KKwkgKi8KKwlkcm0tPm1vZGVfY29uZmlnLm1heF93aWR0
aCA9IDQwOTY7CisJZHJtLT5tb2RlX2NvbmZpZy5tYXhfaGVpZ2h0ID0gNDA5NjsKKwlkcm0tPm1v
ZGVfY29uZmlnLmZ1bmNzID0gJm10a19kcm1fbW9kZV9jb25maWdfZnVuY3M7CisKKwlyZXQgPSBj
b21wb25lbnRfYmluZF9hbGwoZHJtLT5kZXYsIGRybSk7CisJaWYgKHJldCkKKwkJZ290byBlcnJf
Y29uZmlnX2NsZWFudXA7CisKKwkvKgorCSAqIFdlIGN1cnJlbnRseSBzdXBwb3J0IHR3byBmaXhl
ZCBkYXRhIHN0cmVhbXMsIGVhY2ggb3B0aW9uYWwsCisJICogYW5kIGVhY2ggc3RhdGljYWxseSBh
c3NpZ25lZCB0byBhIGNydGM6CisJICogT1ZMMCAtPiBDT0xPUjAgLT4gQUFMIC0+IE9EIC0+IFJE
TUEwIC0+IFVGT0UgLT4gRFNJMCAuLi4KKwkgKi8KKwlyZXQgPSBtdGtfZHJtX2NydGNfY3JlYXRl
KGRybSwgbXRrX2RkcF9tYWluLCBBUlJBWV9TSVpFKG10a19kZHBfbWFpbikpOworCWlmIChyZXQg
PCAwKQorCQlnb3RvIGVycl9jb21wb25lbnRfdW5iaW5kOworCS8qIC4uLiBhbmQgT1ZMMSAtPiBD
T0xPUjEgLT4gR0FNTUEgLT4gUkRNQTEgLT4gRFBJMC4gKi8KKwlyZXQgPSBtdGtfZHJtX2NydGNf
Y3JlYXRlKGRybSwgbXRrX2RkcF9leHQsIEFSUkFZX1NJWkUobXRrX2RkcF9leHQpKTsKKwlpZiAo
cmV0IDwgMCkKKwkJZ290byBlcnJfY29tcG9uZW50X3VuYmluZDsKKworCS8qIFVzZSBPVkwgZGV2
aWNlIGZvciBhbGwgRE1BIG1lbW9yeSBhbGxvY2F0aW9ucyAqLworCW5wID0gcHJpdmF0ZS0+Y29t
cF9ub2RlW210a19kZHBfbWFpblswXV0gPzoKKwkgICAgIHByaXZhdGUtPmNvbXBfbm9kZVttdGtf
ZGRwX2V4dFswXV07CisJcGRldiA9IG9mX2ZpbmRfZGV2aWNlX2J5X25vZGUobnApOworCWlmICgh
cGRldikgeworCQlyZXQgPSAtRU5PREVWOworCQlkZXZfZXJyKGRybS0+ZGV2LCAiTmVlZCBhdCBs
ZWFzdCBvbmUgT1ZMIGRldmljZVxuIik7CisJCWdvdG8gZXJyX2NvbXBvbmVudF91bmJpbmQ7CisJ
fQorCisJcHJpdmF0ZS0+ZG1hX2RldiA9ICZwZGV2LT5kZXY7CisKKwkvKgorCSAqIFdlIGRvbid0
IHVzZSB0aGUgZHJtX2lycV9pbnN0YWxsKCkgaGVscGVycyBwcm92aWRlZCBieSB0aGUgRFJNCisJ
ICogY29yZSwgc28gd2UgbmVlZCB0byBzZXQgdGhpcyBtYW51YWxseSBpbiBvcmRlciB0byBhbGxv
dyB0aGUKKwkgKiBEUk1fSU9DVExfV0FJVF9WQkxBTksgdG8gb3BlcmF0ZSBjb3JyZWN0bHkuCisJ
ICovCisJZHJtLT5pcnFfZW5hYmxlZCA9IHRydWU7CisJcmV0ID0gZHJtX3ZibGFua19pbml0KGRy
bSwgTUFYX0NSVEMpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycl9jb21wb25lbnRfdW5iaW5k
OworCisJZHJtX2ttc19oZWxwZXJfcG9sbF9pbml0KGRybSk7CisJZHJtX21vZGVfY29uZmlnX3Jl
c2V0KGRybSk7CisKKwlyZXR1cm4gMDsKKworZXJyX2NvbXBvbmVudF91bmJpbmQ6CisJY29tcG9u
ZW50X3VuYmluZF9hbGwoZHJtLT5kZXYsIGRybSk7CitlcnJfY29uZmlnX2NsZWFudXA6CisJZHJt
X21vZGVfY29uZmlnX2NsZWFudXAoZHJtKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2
b2lkIG10a19kcm1fa21zX2RlaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKQoreworCWRybV9r
bXNfaGVscGVyX3BvbGxfZmluaShkcm0pOworCisJZHJtX3ZibGFua19jbGVhbnVwKGRybSk7CisJ
Y29tcG9uZW50X3VuYmluZF9hbGwoZHJtLT5kZXYsIGRybSk7CisJZHJtX21vZGVfY29uZmlnX2Ns
ZWFudXAoZHJtKTsKK30KKworc3RhdGljIGludCBtdGtfZHJtX3VubG9hZChzdHJ1Y3QgZHJtX2Rl
dmljZSAqZHJtKQoreworCW10a19kcm1fa21zX2RlaW5pdChkcm0pOworCWRybS0+ZGV2X3ByaXZh
dGUgPSBOVUxMOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3Bl
cmF0aW9uc19zdHJ1Y3QgbXRrX2RybV9nZW1fdm1fb3BzID0geworCS5vcGVuID0gZHJtX2dlbV92
bV9vcGVuLAorCS5jbG9zZSA9IGRybV9nZW1fdm1fY2xvc2UsCit9OworCitzdGF0aWMgY29uc3Qg
c3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtdGtfZHJtX2ZvcHMgPSB7CisJLm93bmVyID0gVEhJU19N
T0RVTEUsCisJLm9wZW4gPSBkcm1fb3BlbiwKKwkucmVsZWFzZSA9IGRybV9yZWxlYXNlLAorCS51
bmxvY2tlZF9pb2N0bCA9IGRybV9pb2N0bCwKKwkubW1hcCA9IG10a19kcm1fZ2VtX21tYXAsCisJ
LnBvbGwgPSBkcm1fcG9sbCwKKwkucmVhZCA9IGRybV9yZWFkLAorI2lmZGVmIENPTkZJR19DT01Q
QVQKKwkuY29tcGF0X2lvY3RsID0gZHJtX2NvbXBhdF9pb2N0bCwKKyNlbmRpZgorfTsKKworc3Rh
dGljIHN0cnVjdCBkcm1fZHJpdmVyIG10a19kcm1fZHJpdmVyID0geworCS5kcml2ZXJfZmVhdHVy
ZXMgPSBEUklWRVJfTU9ERVNFVCB8IERSSVZFUl9HRU0gfCBEUklWRVJfUFJJTUUgfAorCQkJICAg
RFJJVkVSX0FUT01JQywKKwkudW5sb2FkID0gbXRrX2RybV91bmxvYWQsCisKKwkuZ2V0X3ZibGFu
a19jb3VudGVyID0gZHJtX3ZibGFua19jb3VudCwKKwkuZW5hYmxlX3ZibGFuayA9IG10a19kcm1f
Y3J0Y19lbmFibGVfdmJsYW5rLAorCS5kaXNhYmxlX3ZibGFuayA9IG10a19kcm1fY3J0Y19kaXNh
YmxlX3ZibGFuaywKKworCS5nZW1fZnJlZV9vYmplY3QgPSBtdGtfZHJtX2dlbV9mcmVlX29iamVj
dCwKKwkuZ2VtX3ZtX29wcyA9ICZtdGtfZHJtX2dlbV92bV9vcHMsCisJLmR1bWJfY3JlYXRlID0g
bXRrX2RybV9nZW1fZHVtYl9jcmVhdGUsCisJLmR1bWJfbWFwX29mZnNldCA9IG10a19kcm1fZ2Vt
X2R1bWJfbWFwX29mZnNldCwKKwkuZHVtYl9kZXN0cm95ID0gZHJtX2dlbV9kdW1iX2Rlc3Ryb3ks
CisKKwkucHJpbWVfaGFuZGxlX3RvX2ZkID0gZHJtX2dlbV9wcmltZV9oYW5kbGVfdG9fZmQsCisJ
LnByaW1lX2ZkX3RvX2hhbmRsZSA9IGRybV9nZW1fcHJpbWVfZmRfdG9faGFuZGxlLAorCS5nZW1f
cHJpbWVfZXhwb3J0ID0gZHJtX2dlbV9wcmltZV9leHBvcnQsCisJLmdlbV9wcmltZV9pbXBvcnQg
PSBkcm1fZ2VtX3ByaW1lX2ltcG9ydCwKKwkuZ2VtX3ByaW1lX2dldF9zZ190YWJsZSA9IG10a19n
ZW1fcHJpbWVfZ2V0X3NnX3RhYmxlLAorCS5nZW1fcHJpbWVfaW1wb3J0X3NnX3RhYmxlID0gbXRr
X2dlbV9wcmltZV9pbXBvcnRfc2dfdGFibGUsCisJLmdlbV9wcmltZV9tbWFwID0gbXRrX2RybV9n
ZW1fbW1hcF9idWYsCisJLmZvcHMgPSAmbXRrX2RybV9mb3BzLAorCisJLm5hbWUgPSBEUklWRVJf
TkFNRSwKKwkuZGVzYyA9IERSSVZFUl9ERVNDLAorCS5kYXRlID0gRFJJVkVSX0RBVEUsCisJLm1h
am9yID0gRFJJVkVSX01BSk9SLAorCS5taW5vciA9IERSSVZFUl9NSU5PUiwKK307CisKK3N0YXRp
YyBpbnQgY29tcGFyZV9vZihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCit7CisJcmV0
dXJuIGRldi0+b2Zfbm9kZSA9PSBkYXRhOworfQorCitzdGF0aWMgaW50IG10a19kcm1fYmluZChz
dHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG10a19kcm1fcHJpdmF0ZSAqcHJpdmF0ZSA9
IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm07CisJaW50IHJl
dDsKKworCWRybSA9IGRybV9kZXZfYWxsb2MoJm10a19kcm1fZHJpdmVyLCBkZXYpOworCWlmICgh
ZHJtKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRybV9kZXZfc2V0X3VuaXF1ZShkcm0sIGRldl9u
YW1lKGRldikpOworCisJcmV0ID0gZHJtX2Rldl9yZWdpc3Rlcihkcm0sIDApOworCWlmIChyZXQg
PCAwKQorCQlnb3RvIGVycl9mcmVlOworCisJZHJtLT5kZXZfcHJpdmF0ZSA9IHByaXZhdGU7CisJ
cHJpdmF0ZS0+ZHJtID0gZHJtOworCisJcmV0ID0gbXRrX2RybV9rbXNfaW5pdChkcm0pOworCWlm
IChyZXQgPCAwKQorCQlnb3RvIGVycl91bnJlZ2lzdGVyOworCisJcmV0dXJuIDA7CisKK2Vycl91
bnJlZ2lzdGVyOgorCWRybV9kZXZfdW5yZWdpc3Rlcihkcm0pOworZXJyX2ZyZWU6CisJZHJtX2Rl
dl91bnJlZihkcm0pOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcm1fdW5i
aW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2
YXRlID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlkcm1fcHV0X2Rldihwcml2YXRlLT5kcm0p
OworCXByaXZhdGUtPmRybSA9IE5VTEw7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tcG9u
ZW50X21hc3Rlcl9vcHMgbXRrX2RybV9vcHMgPSB7CisJLmJpbmQJCT0gbXRrX2RybV9iaW5kLAor
CS51bmJpbmQJCT0gbXRrX2RybV91bmJpbmQsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9m
X2RldmljZV9pZCBtdGtfZGRwX2NvbXBfZHRfaWRzW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJt
ZWRpYXRlayxtdDgxNzMtZGlzcC1vdmwiLCAgIC5kYXRhID0gKHZvaWQgKilNVEtfRElTUF9PVkwg
fSwKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1kaXNwLXJkbWEiLCAgLmRhdGEg
PSAodm9pZCAqKU1US19ESVNQX1JETUEgfSwKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10
ODE3My1kaXNwLXdkbWEiLCAgLmRhdGEgPSAodm9pZCAqKU1US19ESVNQX1dETUEgfSwKKwl7IC5j
b21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1kaXNwLWNvbG9yIiwgLmRhdGEgPSAodm9pZCAq
KU1US19ESVNQX0NPTE9SIH0sCisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtZGlz
cC1hYWwiLCAgIC5kYXRhID0gKHZvaWQgKilNVEtfRElTUF9BQUx9LAorCXsgLmNvbXBhdGlibGUg
PSAibWVkaWF0ZWssbXQ4MTczLWRpc3AtZ2FtbWEiLCAuZGF0YSA9ICh2b2lkICopTVRLX0RJU1Bf
R0FNTUEsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtZGlzcC11Zm9lIiwg
IC5kYXRhID0gKHZvaWQgKilNVEtfRElTUF9VRk9FIH0sCisJeyAuY29tcGF0aWJsZSA9ICJtZWRp
YXRlayxtdDgxNzMtZHNpIiwgICAgICAgIC5kYXRhID0gKHZvaWQgKilNVEtfRFNJIH0sCisJeyAu
Y29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtZHBpIiwgICAgICAgIC5kYXRhID0gKHZvaWQg
KilNVEtfRFBJIH0sCisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtZGlzcC1tdXRl
eCIsIC5kYXRhID0gKHZvaWQgKilNVEtfRElTUF9NVVRFWCB9LAorCXsgLmNvbXBhdGlibGUgPSAi
bWVkaWF0ZWssbXQ4MTczLWRpc3AtcHdtIiwgICAuZGF0YSA9ICh2b2lkICopTVRLX0RJU1BfUFdN
IH0sCisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtZGlzcC1vZCIsICAgIC5kYXRh
ID0gKHZvaWQgKilNVEtfRElTUF9PRCB9LAorCXsgfQorfTsKKworc3RhdGljIGludCBtdGtfZHJt
X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRldmljZSAq
ZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2YXRlOworCXN0
cnVjdCByZXNvdXJjZSAqbWVtOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZTsKKwlzdHJ1Y3Qg
Y29tcG9uZW50X21hdGNoICptYXRjaCA9IE5VTEw7CisJaW50IHJldDsKKwlpbnQgaTsKKworCXBy
aXZhdGUgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXZhdGUpLCBHRlBfS0VSTkVMKTsK
KwlpZiAoIXByaXZhdGUpCisJCXJldHVybiAtRU5PTUVNOworCisJbXV0ZXhfaW5pdCgmcHJpdmF0
ZS0+Y29tbWl0LmxvY2spOworCUlOSVRfV09SSygmcHJpdmF0ZS0+Y29tbWl0LndvcmssIG10a19h
dG9taWNfd29yayk7CisKKwltZW0gPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNP
VVJDRV9NRU0sIDApOworCXByaXZhdGUtPmNvbmZpZ19yZWdzID0gZGV2bV9pb3JlbWFwX3Jlc291
cmNlKGRldiwgbWVtKTsKKwlpZiAoSVNfRVJSKHByaXZhdGUtPmNvbmZpZ19yZWdzKSkgeworCQly
ZXQgPSBQVFJfRVJSKHByaXZhdGUtPmNvbmZpZ19yZWdzKTsKKwkJZGV2X2VycihkZXYsICJGYWls
ZWQgdG8gaW9yZW1hcCBtbXN5cy1jb25maWcgcmVzb3VyY2U6ICVkXG4iLAorCQkJcmV0KTsKKwkJ
cmV0dXJuIHJldDsKKwl9CisKKwkvKiBJdGVyYXRlIG92ZXIgc2libGluZyBESVNQIGZ1bmN0aW9u
IGJsb2NrcyAqLworCWZvcl9lYWNoX2NoaWxkX29mX25vZGUoZGV2LT5vZl9ub2RlLT5wYXJlbnQs
IG5vZGUpIHsKKwkJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqb2ZfaWQ7CisJCWVudW0gbXRr
X2RkcF9jb21wX3R5cGUgY29tcF90eXBlOworCQlpbnQgY29tcF9pZDsKKworCQlvZl9pZCA9IG9m
X21hdGNoX25vZGUobXRrX2RkcF9jb21wX2R0X2lkcywgbm9kZSk7CisJCWlmICghb2ZfaWQpCisJ
CQljb250aW51ZTsKKworCQlpZiAoIW9mX2RldmljZV9pc19hdmFpbGFibGUobm9kZSkpIHsKKwkJ
CWRldl9kYmcoZGV2LCAiU2tpcHBpbmcgZGlzYWJsZWQgY29tcG9uZW50ICVzXG4iLAorCQkJCW5v
ZGUtPmZ1bGxfbmFtZSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWNvbXBfdHlwZSA9IChlbnVt
IG10a19kZHBfY29tcF90eXBlKW9mX2lkLT5kYXRhOworCisJCWlmIChjb21wX3R5cGUgPT0gTVRL
X0RJU1BfTVVURVgpIHsKKwkJCXByaXZhdGUtPm11dGV4X25vZGUgPSBvZl9ub2RlX2dldChub2Rl
KTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJY29tcF9pZCA9IG10a19kZHBfY29tcF9nZXRfaWQo
bm9kZSwgY29tcF90eXBlKTsKKwkJaWYgKGNvbXBfaWQgPCAwKSB7CisJCQlkZXZfd2FybihkZXYs
ICJTa2lwcGluZyB1bmtub3duIGNvbXBvbmVudCAlc1xuIiwKKwkJCQkgbm9kZS0+ZnVsbF9uYW1l
KTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJcHJpdmF0ZS0+Y29tcF9ub2RlW2NvbXBfaWRdID0g
b2Zfbm9kZV9nZXQobm9kZSk7CisKKwkJLyoKKwkJICogQ3VycmVudGx5IG9ubHkgdGhlIE9WTCwg
UkRNQSwgRFNJLCBhbmQgRFBJIGJsb2NrcyBoYXZlCisJCSAqIHNlcGFyYXRlIGNvbXBvbmVudCBw
bGF0Zm9ybSBkcml2ZXJzIGFuZCBpbml0aWFsaXplIHRoZWlyIG93bgorCQkgKiBERFAgY29tcG9u
ZW50IHN0cnVjdHVyZS4gVGhlIG90aGVycyBhcmUgaW5pdGlhbGl6ZWQgaGVyZS4KKwkJICovCisJ
CWlmIChjb21wX3R5cGUgPT0gTVRLX0RJU1BfT1ZMIHx8CisJCSAgICBjb21wX3R5cGUgPT0gTVRL
X0RJU1BfUkRNQSB8fAorCQkgICAgY29tcF90eXBlID09IE1US19EU0kgfHwKKwkJICAgIGNvbXBf
dHlwZSA9PSBNVEtfRFBJKSB7CisJCQlkZXZfaW5mbyhkZXYsICJBZGRpbmcgY29tcG9uZW50IG1h
dGNoIGZvciAlc1xuIiwKKwkJCQkgbm9kZS0+ZnVsbF9uYW1lKTsKKwkJCWNvbXBvbmVudF9tYXRj
aF9hZGQoZGV2LCAmbWF0Y2gsIGNvbXBhcmVfb2YsIG5vZGUpOworCQl9IGVsc2UgeworCQkJc3Ry
dWN0IG10a19kZHBfY29tcCAqY29tcDsKKworCQkJY29tcCA9IGRldm1fa3phbGxvYyhkZXYsIHNp
emVvZigqY29tcCksIEdGUF9LRVJORUwpOworCQkJaWYgKCFjb21wKSB7CisJCQkJcmV0ID0gLUVO
T01FTTsKKwkJCQlnb3RvIGVycl9ub2RlOworCQkJfQorCisJCQlyZXQgPSBtdGtfZGRwX2NvbXBf
aW5pdChkZXYsIG5vZGUsIGNvbXAsIGNvbXBfaWQsIE5VTEwpOworCQkJaWYgKHJldCkKKwkJCQln
b3RvIGVycl9ub2RlOworCisJCQlwcml2YXRlLT5kZHBfY29tcFtjb21wX2lkXSA9IGNvbXA7CisJ
CX0KKwl9CisKKwlpZiAoIXByaXZhdGUtPm11dGV4X25vZGUpIHsKKwkJZGV2X2VycihkZXYsICJG
YWlsZWQgdG8gZmluZCBkaXNwLW11dGV4IG5vZGVcbiIpOworCQlyZXQgPSAtRU5PREVWOworCQln
b3RvIGVycl9ub2RlOworCX0KKworCXBtX3J1bnRpbWVfZW5hYmxlKGRldik7CisKKwlwbGF0Zm9y
bV9zZXRfZHJ2ZGF0YShwZGV2LCBwcml2YXRlKTsKKworCXJldCA9IGNvbXBvbmVudF9tYXN0ZXJf
YWRkX3dpdGhfbWF0Y2goZGV2LCAmbXRrX2RybV9vcHMsIG1hdGNoKTsKKwlpZiAocmV0KQorCQln
b3RvIGVycl9wbTsKKworCXJldHVybiAwOworCitlcnJfcG06CisJcG1fcnVudGltZV9kaXNhYmxl
KGRldik7CitlcnJfbm9kZToKKwlvZl9ub2RlX3B1dChwcml2YXRlLT5tdXRleF9ub2RlKTsKKwlm
b3IgKGkgPSAwOyBpIDwgRERQX0NPTVBPTkVOVF9JRF9NQVg7IGkrKykKKwkJb2Zfbm9kZV9wdXQo
cHJpdmF0ZS0+Y29tcF9ub2RlW2ldKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG10
a19kcm1fcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG10
a19kcm1fcHJpdmF0ZSAqcHJpdmF0ZSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCWlu
dCBpOworCisJY29tcG9uZW50X21hc3Rlcl9kZWwoJnBkZXYtPmRldiwgJm10a19kcm1fb3BzKTsK
KwlwbV9ydW50aW1lX2Rpc2FibGUoJnBkZXYtPmRldik7CisJb2Zfbm9kZV9wdXQocHJpdmF0ZS0+
bXV0ZXhfbm9kZSk7CisJZm9yIChpID0gMDsgaSA8IEREUF9DT01QT05FTlRfSURfTUFYOyBpKysp
CisJCW9mX25vZGVfcHV0KHByaXZhdGUtPmNvbXBfbm9kZVtpXSk7CisKKwlyZXR1cm4gMDsKK30K
KworI2lmZGVmIENPTkZJR19QTV9TTEVFUAorc3RhdGljIGludCBtdGtfZHJtX3N5c19zdXNwZW5k
KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2YXRl
ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IHByaXZh
dGUtPmRybTsKKworCWRybV9rbXNfaGVscGVyX3BvbGxfZGlzYWJsZShkcm0pOworCisJcHJpdmF0
ZS0+c3VzcGVuZF9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX3N1c3BlbmQoZHJtKTsKKwlpZiAo
SVNfRVJSKHByaXZhdGUtPnN1c3BlbmRfc3RhdGUpKSB7CisJCWRybV9rbXNfaGVscGVyX3BvbGxf
ZW5hYmxlKGRybSk7CisJCXJldHVybiBQVFJfRVJSKHByaXZhdGUtPnN1c3BlbmRfc3RhdGUpOwor
CX0KKworCURSTV9ERUJVR19EUklWRVIoIm10a19kcm1fc3lzX3N1c3BlbmRcbiIpOworCXJldHVy
biAwOworfQorCitzdGF0aWMgaW50IG10a19kcm1fc3lzX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpk
ZXYpCit7CisJc3RydWN0IG10a19kcm1fcHJpdmF0ZSAqcHJpdmF0ZSA9IGRldl9nZXRfZHJ2ZGF0
YShkZXYpOworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBwcml2YXRlLT5kcm07CisKKwlkcm1f
YXRvbWljX2hlbHBlcl9yZXN1bWUoZHJtLCBwcml2YXRlLT5zdXNwZW5kX3N0YXRlKTsKKwlkcm1f
a21zX2hlbHBlcl9wb2xsX2VuYWJsZShkcm0pOworCisJRFJNX0RFQlVHX0RSSVZFUigibXRrX2Ry
bV9zeXNfcmVzdW1lXG4iKTsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCitzdGF0aWMgU0lNUExF
X0RFVl9QTV9PUFMobXRrX2RybV9wbV9vcHMsIG10a19kcm1fc3lzX3N1c3BlbmQsCisJCQkgbXRr
X2RybV9zeXNfcmVzdW1lKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbXRr
X2RybV9vZl9pZHNbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1tbXN5
cyIsIH0sCisJeyB9Cit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdGtfZHJt
X3BsYXRmb3JtX2RyaXZlciA9IHsKKwkucHJvYmUJPSBtdGtfZHJtX3Byb2JlLAorCS5yZW1vdmUJ
PSBtdGtfZHJtX3JlbW92ZSwKKwkuZHJpdmVyCT0geworCQkubmFtZQk9ICJtZWRpYXRlay1kcm0i
LAorCQkub2ZfbWF0Y2hfdGFibGUgPSBtdGtfZHJtX29mX2lkcywKKwkJLnBtICAgICA9ICZtdGtf
ZHJtX3BtX29wcywKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgKiBj
b25zdCBtdGtfZHJtX2RyaXZlcnNbXSA9IHsKKwkmbXRrX2RybV9wbGF0Zm9ybV9kcml2ZXIsCisJ
Jm10a19kZHBfZHJpdmVyLAorCSZtdGtfZGlzcF9vdmxfZHJpdmVyLAorCSZtdGtfZGlzcF9yZG1h
X2RyaXZlciwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG10a19kcm1faW5pdCh2b2lkKQorewor
CWludCByZXQ7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShtdGtfZHJt
X2RyaXZlcnMpOyBpKyspIHsKKwkJcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKG10a19k
cm1fZHJpdmVyc1tpXSk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlwcl9lcnIoIkZhaWxlZCB0byBy
ZWdpc3RlciAlcyBkcml2ZXI6ICVkXG4iLAorCQkJICAgICAgIG10a19kcm1fZHJpdmVyc1tpXS0+
ZHJpdmVyLm5hbWUsIHJldCk7CisJCQlnb3RvIGVycjsKKwkJfQorCX0KKworCXJldHVybiAwOwor
CitlcnI6CisJd2hpbGUgKC0taSA+PSAwKQorCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlciht
dGtfZHJtX2RyaXZlcnNbaV0pOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19l
eGl0IG10a19kcm1fZXhpdCh2b2lkKQoreworCWludCBpOworCisJZm9yIChpID0gQVJSQVlfU0la
RShtdGtfZHJtX2RyaXZlcnMpIC0gMTsgaSA+PSAwOyBpLS0pCisJCXBsYXRmb3JtX2RyaXZlcl91
bnJlZ2lzdGVyKG10a19kcm1fZHJpdmVyc1tpXSk7Cit9CisKK21vZHVsZV9pbml0KG10a19kcm1f
aW5pdCk7Cittb2R1bGVfZXhpdChtdGtfZHJtX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJZVCBT
SEVOIDx5dC5zaGVuQG1lZGlhdGVrLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiTWVkaWF0
ZWsgU29DIERSTSBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdp
dCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5oIGIvZHJpdmVycy9ncHUv
ZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uMjdkYzhmYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRl
ay9tdGtfZHJtX2Rydi5oCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIw
MTUgTWVkaWFUZWsgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9n
cmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqLworCisjaWZuZGVmIE1US19EUk1fRFJWX0gKKyNkZWZpbmUgTVRLX0RSTV9E
UlZfSAorCisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlICJtdGtfZHJtX2RkcF9jb21w
LmgiCisKKyNkZWZpbmUgTUFYX0NSVEMJMgorI2RlZmluZSBNQVhfQ09OTkVDVE9SCTIKKworc3Ry
dWN0IGRldmljZTsKK3N0cnVjdCBkZXZpY2Vfbm9kZTsKK3N0cnVjdCBkcm1fY3J0YzsKK3N0cnVj
dCBkcm1fZGV2aWNlOworc3RydWN0IGRybV9mYl9oZWxwZXI7CitzdHJ1Y3QgZHJtX3Byb3BlcnR5
Oworc3RydWN0IHJlZ21hcDsKKworc3RydWN0IG10a19kcm1fcHJpdmF0ZSB7CisJc3RydWN0IGRy
bV9kZXZpY2UgKmRybTsKKwlzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2OworCisJc3RydWN0IGRybV9j
cnRjICpjcnRjW01BWF9DUlRDXTsKKwl1bnNpZ25lZCBpbnQgbnVtX3BpcGVzOworCisJc3RydWN0
IGRldmljZV9ub2RlICptdXRleF9ub2RlOworCXN0cnVjdCBkZXZpY2UgKm11dGV4X2RldjsKKwl2
b2lkIF9faW9tZW0gKmNvbmZpZ19yZWdzOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqY29tcF9ub2Rl
W0REUF9DT01QT05FTlRfSURfTUFYXTsKKwlzdHJ1Y3QgbXRrX2RkcF9jb21wICpkZHBfY29tcFtE
RFBfQ09NUE9ORU5UX0lEX01BWF07CisKKwlzdHJ1Y3QgeworCQlzdHJ1Y3QgZHJtX2F0b21pY19z
dGF0ZSAqc3RhdGU7CisJCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOworCQlzdHJ1Y3QgbXV0ZXgg
bG9jazsKKwl9IGNvbW1pdDsKKworCXN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdXNwZW5kX3N0
YXRlOworfTsKKworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXRrX2RkcF9kcml2ZXI7
CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdGtfZGlzcF9vdmxfZHJpdmVyOworZXh0
ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXRrX2Rpc3BfcmRtYV9kcml2ZXI7CisKKyNlbmRp
ZiAvKiBNVEtfRFJNX0RSVl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0
ZWsvbXRrX2RybV9mYi5jIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZmIuYwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2QzMGMxCi0tLSAvZGV2L251bGwK
KysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZmIuYwpAQCAtMCwwICsxLDE2
NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMuCisgKgorICogVGhp
cyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
ciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxk
cm0vZHJtUC5oPgorI2luY2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KKyNpbmNsdWRlIDxk
cm0vZHJtX2ZiX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fZ2VtLmg+CisjaW5jbHVkZSA8
bGludXgvZG1hLWJ1Zi5oPgorI2luY2x1ZGUgPGxpbnV4L3Jlc2VydmF0aW9uLmg+CisKKyNpbmNs
dWRlICJtdGtfZHJtX2Rydi5oIgorI2luY2x1ZGUgIm10a19kcm1fZmIuaCIKKyNpbmNsdWRlICJt
dGtfZHJtX2dlbS5oIgorCisvKgorICogbXRrIHNwZWNpZmljIGZyYW1lYnVmZmVyIHN0cnVjdHVy
ZS4KKyAqCisgKiBAZmI6IGRybSBmcmFtZWJ1ZmZlciBvYmplY3QuCisgKiBAZ2VtX29iajogYXJy
YXkgb2YgZ2VtIG9iamVjdHMuCisgKi8KK3N0cnVjdCBtdGtfZHJtX2ZiIHsKKwlzdHJ1Y3QgZHJt
X2ZyYW1lYnVmZmVyCWJhc2U7CisJLyogRm9yIG5vdyB3ZSBvbmx5IHN1cHBvcnQgYSBzaW5nbGUg
cGxhbmUgKi8KKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QJKmdlbV9vYmo7Cit9OworCisjZGVmaW5l
IHRvX210a19mYih4KSBjb250YWluZXJfb2YoeCwgc3RydWN0IG10a19kcm1fZmIsIGJhc2UpCisK
K3N0cnVjdCBkcm1fZ2VtX29iamVjdCAqbXRrX2ZiX2dldF9nZW1fb2JqKHN0cnVjdCBkcm1fZnJh
bWVidWZmZXIgKmZiKQoreworCXN0cnVjdCBtdGtfZHJtX2ZiICptdGtfZmIgPSB0b19tdGtfZmIo
ZmIpOworCisJcmV0dXJuIG10a19mYi0+Z2VtX29iajsKK30KKworc3RhdGljIGludCBtdGtfZHJt
X2ZiX2NyZWF0ZV9oYW5kbGUoc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCisJCQkJICAgIHN0
cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAorCQkJCSAgICB1bnNpZ25lZCBpbnQgKmhhbmRsZSkK
K3sKKwlzdHJ1Y3QgbXRrX2RybV9mYiAqbXRrX2ZiID0gdG9fbXRrX2ZiKGZiKTsKKworCXJldHVy
biBkcm1fZ2VtX2hhbmRsZV9jcmVhdGUoZmlsZV9wcml2LCBtdGtfZmItPmdlbV9vYmosIGhhbmRs
ZSk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcm1fZmJfZGVzdHJveShzdHJ1Y3QgZHJtX2ZyYW1l
YnVmZmVyICpmYikKK3sKKwlzdHJ1Y3QgbXRrX2RybV9mYiAqbXRrX2ZiID0gdG9fbXRrX2ZiKGZi
KTsKKworCWRybV9mcmFtZWJ1ZmZlcl9jbGVhbnVwKGZiKTsKKworCWRybV9nZW1fb2JqZWN0X3Vu
cmVmZXJlbmNlX3VubG9ja2VkKG10a19mYi0+Z2VtX29iaik7CisKKwlrZnJlZShtdGtfZmIpOwor
fQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlcl9mdW5jcyBtdGtfZHJtX2Zi
X2Z1bmNzID0geworCS5jcmVhdGVfaGFuZGxlID0gbXRrX2RybV9mYl9jcmVhdGVfaGFuZGxlLAor
CS5kZXN0cm95ID0gbXRrX2RybV9mYl9kZXN0cm95LAorfTsKKworc3RhdGljIHN0cnVjdCBtdGtf
ZHJtX2ZiICptdGtfZHJtX2ZyYW1lYnVmZmVyX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwK
KwkJCQkJY29uc3Qgc3RydWN0IGRybV9tb2RlX2ZiX2NtZDIgKm1vZGUsCisJCQkJCXN0cnVjdCBk
cm1fZ2VtX29iamVjdCAqb2JqKQoreworCXN0cnVjdCBtdGtfZHJtX2ZiICptdGtfZmI7CisJaW50
IHJldDsKKworCWlmIChkcm1fZm9ybWF0X251bV9wbGFuZXMobW9kZS0+cGl4ZWxfZm9ybWF0KSAh
PSAxKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKworCW10a19mYiA9IGt6YWxsb2Moc2l6
ZW9mKCptdGtfZmIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW10a19mYikKKwkJcmV0dXJuIEVSUl9Q
VFIoLUVOT01FTSk7CisKKwlkcm1faGVscGVyX21vZGVfZmlsbF9mYl9zdHJ1Y3QoJm10a19mYi0+
YmFzZSwgbW9kZSk7CisKKwltdGtfZmItPmdlbV9vYmogPSBvYmo7CisKKwlyZXQgPSBkcm1fZnJh
bWVidWZmZXJfaW5pdChkZXYsICZtdGtfZmItPmJhc2UsICZtdGtfZHJtX2ZiX2Z1bmNzKTsKKwlp
ZiAocmV0KSB7CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIGluaXRpYWxpemUgZnJhbWVidWZmZXJc
biIpOworCQlrZnJlZShtdGtfZmIpOworCQlyZXR1cm4gRVJSX1BUUihyZXQpOworCX0KKworCXJl
dHVybiBtdGtfZmI7Cit9CisKKy8qCisgKiBXYWl0IGZvciBhbnkgZXhjbHVzaXZlIGZlbmNlIGlu
IGZiJ3MgZ2VtIG9iamVjdCdzIHJlc2VydmF0aW9uIG9iamVjdC4KKyAqCisgKiBSZXR1cm5zIC1F
UkVTVEFSVFNZUyBpZiBpbnRlcnJ1cHRlZCwgZWxzZSAwLgorICovCitpbnQgbXRrX2ZiX3dhaXQo
c3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIpCit7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpn
ZW07CisJc3RydWN0IHJlc2VydmF0aW9uX29iamVjdCAqcmVzdjsKKwlsb25nIHJldDsKKworCWlm
ICghZmIpCisJCXJldHVybiAwOworCisJZ2VtID0gbXRrX2ZiX2dldF9nZW1fb2JqKGZiKTsKKwlp
ZiAoIWdlbSB8fCAhZ2VtLT5kbWFfYnVmIHx8ICFnZW0tPmRtYV9idWYtPnJlc3YpCisJCXJldHVy
biAwOworCisJcmVzdiA9IGdlbS0+ZG1hX2J1Zi0+cmVzdjsKKwlyZXQgPSByZXNlcnZhdGlvbl9v
YmplY3Rfd2FpdF90aW1lb3V0X3JjdShyZXN2LCBmYWxzZSwgdHJ1ZSwKKwkJCQkJCSAgTUFYX1ND
SEVEVUxFX1RJTUVPVVQpOworCS8qIE1BWF9TQ0hFRFVMRV9USU1FT1VUIG9uIHN1Y2Nlc3MsIC1F
UkVTVEFSVFNZUyBpZiBpbnRlcnJ1cHRlZCAqLworCWlmIChXQVJOX09OKHJldCA8IDApKQorCQly
ZXR1cm4gcmV0OworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBkcm1fZnJhbWVidWZmZXIgKm10
a19kcm1fbW9kZV9mYl9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJICAgICAg
IHN0cnVjdCBkcm1fZmlsZSAqZmlsZSwKKwkJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBkcm1fbW9k
ZV9mYl9jbWQyICpjbWQpCit7CisJc3RydWN0IG10a19kcm1fZmIgKm10a19mYjsKKwlzdHJ1Y3Qg
ZHJtX2dlbV9vYmplY3QgKmdlbTsKKwl1bnNpZ25lZCBpbnQgd2lkdGggPSBjbWQtPndpZHRoOwor
CXVuc2lnbmVkIGludCBoZWlnaHQgPSBjbWQtPmhlaWdodDsKKwl1bnNpZ25lZCBpbnQgc2l6ZSwg
YnBwOworCWludCByZXQ7CisKKwlpZiAoZHJtX2Zvcm1hdF9udW1fcGxhbmVzKGNtZC0+cGl4ZWxf
Zm9ybWF0KSAhPSAxKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKworCWdlbSA9IGRybV9n
ZW1fb2JqZWN0X2xvb2t1cChkZXYsIGZpbGUsIGNtZC0+aGFuZGxlc1swXSk7CisJaWYgKCFnZW0p
CisJCXJldHVybiBFUlJfUFRSKC1FTk9FTlQpOworCisJYnBwID0gZHJtX2Zvcm1hdF9wbGFuZV9j
cHAoY21kLT5waXhlbF9mb3JtYXQsIDApOworCXNpemUgPSAoaGVpZ2h0IC0gMSkgKiBjbWQtPnBp
dGNoZXNbMF0gKyB3aWR0aCAqIGJwcDsKKwlzaXplICs9IGNtZC0+b2Zmc2V0c1swXTsKKworCWlm
IChnZW0tPnNpemUgPCBzaXplKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gdW5yZWZlcmVu
Y2U7CisJfQorCisJbXRrX2ZiID0gbXRrX2RybV9mcmFtZWJ1ZmZlcl9pbml0KGRldiwgY21kLCBn
ZW0pOworCWlmIChJU19FUlIobXRrX2ZiKSkgeworCQlyZXQgPSBQVFJfRVJSKG10a19mYik7CisJ
CWdvdG8gdW5yZWZlcmVuY2U7CisJfQorCisJcmV0dXJuICZtdGtfZmItPmJhc2U7CisKK3VucmVm
ZXJlbmNlOgorCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKGdlbSk7CisJcmV0
dXJuIEVSUl9QVFIocmV0KTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRl
ay9tdGtfZHJtX2ZiLmggYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9mYi5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliMmFlMzQKLS0tIC9kZXYvbnVsbAor
KysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9mYi5oCkBAIC0wLDAgKzEsMjMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgTWVkaWFUZWsgSW5jLgorICoKKyAqIFRoaXMg
cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig
bW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIE1US19E
Uk1fRkJfSAorI2RlZmluZSBNVEtfRFJNX0ZCX0gKKworc3RydWN0IGRybV9nZW1fb2JqZWN0ICpt
dGtfZmJfZ2V0X2dlbV9vYmooc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIpOworaW50IG10a19m
Yl93YWl0KHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiKTsKK3N0cnVjdCBkcm1fZnJhbWVidWZm
ZXIgKm10a19kcm1fbW9kZV9mYl9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJ
ICAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSwKKwkJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBk
cm1fbW9kZV9mYl9jbWQyICpjbWQpOworCisjZW5kaWYgLyogTVRLX0RSTV9GQl9IICovCmRpZmYg
LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9nZW0uYyBiL2RyaXZlcnMv
Z3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2dlbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLmE3NzNiZmEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVk
aWF0ZWsvbXRrX2RybV9nZW0uYwpAQCAtMCwwICsxLDI2OSBAQAorLyoKKyAqIENvcHlyaWdodCAo
YykgMjAxNSBNZWRpYVRlayBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisg
KiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlz
IHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgPGRy
bS9kcm1fZ2VtLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLWJ1Zi5oPgorCisjaW5jbHVkZSAibXRr
X2RybV9kcnYuaCIKKyNpbmNsdWRlICJtdGtfZHJtX2dlbS5oIgorCitzdGF0aWMgc3RydWN0IG10
a19kcm1fZ2VtX29iaiAqbXRrX2RybV9nZW1faW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAor
CQkJCQkJdW5zaWduZWQgbG9uZyBzaXplKQoreworCXN0cnVjdCBtdGtfZHJtX2dlbV9vYmogKm10
a19nZW1fb2JqOworCWludCByZXQ7CisKKwlzaXplID0gcm91bmRfdXAoc2l6ZSwgUEFHRV9TSVpF
KTsKKworCW10a19nZW1fb2JqID0ga3phbGxvYyhzaXplb2YoKm10a19nZW1fb2JqKSwgR0ZQX0tF
Uk5FTCk7CisJaWYgKCFtdGtfZ2VtX29iaikKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisK
KwlyZXQgPSBkcm1fZ2VtX29iamVjdF9pbml0KGRldiwgJm10a19nZW1fb2JqLT5iYXNlLCBzaXpl
KTsKKwlpZiAocmV0IDwgMCkgeworCQlEUk1fRVJST1IoImZhaWxlZCB0byBpbml0aWFsaXplIGdl
bSBvYmplY3RcbiIpOworCQlrZnJlZShtdGtfZ2VtX29iaik7CisJCXJldHVybiBFUlJfUFRSKHJl
dCk7CisJfQorCisJcmV0dXJuIG10a19nZW1fb2JqOworfQorCitzdHJ1Y3QgbXRrX2RybV9nZW1f
b2JqICptdGtfZHJtX2dlbV9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJICAg
c2l6ZV90IHNpemUsIGJvb2wgYWxsb2Nfa21hcCkKK3sKKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRl
ICpwcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgbXRrX2RybV9nZW1fb2JqICptdGtf
Z2VtOworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOworCWludCByZXQ7CisKKwltdGtfZ2Vt
ID0gbXRrX2RybV9nZW1faW5pdChkZXYsIHNpemUpOworCWlmIChJU19FUlIobXRrX2dlbSkpCisJ
CXJldHVybiBFUlJfQ0FTVChtdGtfZ2VtKTsKKworCW9iaiA9ICZtdGtfZ2VtLT5iYXNlOworCisJ
aW5pdF9kbWFfYXR0cnMoJm10a19nZW0tPmRtYV9hdHRycyk7CisJZG1hX3NldF9hdHRyKERNQV9B
VFRSX1dSSVRFX0NPTUJJTkUsICZtdGtfZ2VtLT5kbWFfYXR0cnMpOworCisJaWYgKCFhbGxvY19r
bWFwKQorCQlkbWFfc2V0X2F0dHIoRE1BX0FUVFJfTk9fS0VSTkVMX01BUFBJTkcsICZtdGtfZ2Vt
LT5kbWFfYXR0cnMpOworCisJbXRrX2dlbS0+Y29va2llID0gZG1hX2FsbG9jX2F0dHJzKHByaXYt
PmRtYV9kZXYsIG9iai0+c2l6ZSwKKwkJCQkJICAmbXRrX2dlbS0+ZG1hX2FkZHIsIEdGUF9LRVJO
RUwsCisJCQkJCSAgJm10a19nZW0tPmRtYV9hdHRycyk7CisJaWYgKCFtdGtfZ2VtLT5jb29raWUp
IHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gYWxsb2NhdGUgJXp4IGJ5dGUgZG1hIGJ1ZmZlciIs
IG9iai0+c2l6ZSk7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2dlbV9mcmVlOworCX0K
KworCWlmIChhbGxvY19rbWFwKQorCQltdGtfZ2VtLT5rdmFkZHIgPSBtdGtfZ2VtLT5jb29raWU7
CisKKwlEUk1fREVCVUdfRFJJVkVSKCJjb29raWUgPSAlcCBkbWFfYWRkciA9ICVwYWQgc2l6ZSA9
ICV6dVxuIiwKKwkJCSBtdGtfZ2VtLT5jb29raWUsICZtdGtfZ2VtLT5kbWFfYWRkciwKKwkJCSBz
aXplKTsKKworCXJldHVybiBtdGtfZ2VtOworCitlcnJfZ2VtX2ZyZWU6CisJZHJtX2dlbV9vYmpl
Y3RfcmVsZWFzZShvYmopOworCWtmcmVlKG10a19nZW0pOworCXJldHVybiBFUlJfUFRSKHJldCk7
Cit9CisKK3ZvaWQgbXRrX2RybV9nZW1fZnJlZV9vYmplY3Qoc3RydWN0IGRybV9nZW1fb2JqZWN0
ICpvYmopCit7CisJc3RydWN0IG10a19kcm1fZ2VtX29iaiAqbXRrX2dlbSA9IHRvX210a19nZW1f
b2JqKG9iaik7CisJc3RydWN0IG10a19kcm1fcHJpdmF0ZSAqcHJpdiA9IG9iai0+ZGV2LT5kZXZf
cHJpdmF0ZTsKKworCWlmIChtdGtfZ2VtLT5zZykKKwkJZHJtX3ByaW1lX2dlbV9kZXN0cm95KG9i
aiwgbXRrX2dlbS0+c2cpOworCWVsc2UKKwkJZG1hX2ZyZWVfYXR0cnMocHJpdi0+ZG1hX2Rldiwg
b2JqLT5zaXplLCBtdGtfZ2VtLT5jb29raWUsCisJCQkgICAgICAgbXRrX2dlbS0+ZG1hX2FkZHIs
ICZtdGtfZ2VtLT5kbWFfYXR0cnMpOworCisJLyogcmVsZWFzZSBmaWxlIHBvaW50ZXIgdG8gZ2Vt
IG9iamVjdC4gKi8KKwlkcm1fZ2VtX29iamVjdF9yZWxlYXNlKG9iaik7CisKKwlrZnJlZShtdGtf
Z2VtKTsKK30KKworaW50IG10a19kcm1fZ2VtX2R1bWJfY3JlYXRlKHN0cnVjdCBkcm1fZmlsZSAq
ZmlsZV9wcml2LCBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJICAgIHN0cnVjdCBkcm1fbW9k
ZV9jcmVhdGVfZHVtYiAqYXJncykKK3sKKwlzdHJ1Y3QgbXRrX2RybV9nZW1fb2JqICptdGtfZ2Vt
OworCWludCByZXQ7CisKKwlhcmdzLT5waXRjaCA9IERJVl9ST1VORF9VUChhcmdzLT53aWR0aCAq
IGFyZ3MtPmJwcCwgOCk7CisJYXJncy0+c2l6ZSA9IGFyZ3MtPnBpdGNoICogYXJncy0+aGVpZ2h0
OworCisJbXRrX2dlbSA9IG10a19kcm1fZ2VtX2NyZWF0ZShkZXYsIGFyZ3MtPnNpemUsIGZhbHNl
KTsKKwlpZiAoSVNfRVJSKG10a19nZW0pKQorCQlyZXR1cm4gUFRSX0VSUihtdGtfZ2VtKTsKKwor
CS8qCisJICogYWxsb2NhdGUgYSBpZCBvZiBpZHIgdGFibGUgd2hlcmUgdGhlIG9iaiBpcyByZWdp
c3RlcmVkCisJICogYW5kIGhhbmRsZSBoYXMgdGhlIGlkIHdoYXQgdXNlciBjYW4gc2VlLgorCSAq
LworCXJldCA9IGRybV9nZW1faGFuZGxlX2NyZWF0ZShmaWxlX3ByaXYsICZtdGtfZ2VtLT5iYXNl
LCAmYXJncy0+aGFuZGxlKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9oYW5kbGVfY3JlYXRlOwor
CisJLyogZHJvcCByZWZlcmVuY2UgZnJvbSBhbGxvY2F0ZSAtIGhhbmRsZSBob2xkcyBpdCBub3cu
ICovCisJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQoJm10a19nZW0tPmJhc2Up
OworCisJcmV0dXJuIDA7CisKK2Vycl9oYW5kbGVfY3JlYXRlOgorCW10a19kcm1fZ2VtX2ZyZWVf
b2JqZWN0KCZtdGtfZ2VtLT5iYXNlKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgbXRrX2RybV9n
ZW1fZHVtYl9tYXBfb2Zmc2V0KHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAorCQkJCXN0cnVj
dCBkcm1fZGV2aWNlICpkZXYsIHVpbnQzMl90IGhhbmRsZSwKKwkJCQl1aW50NjRfdCAqb2Zmc2V0
KQoreworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOworCWludCByZXQ7CisKKwlvYmogPSBk
cm1fZ2VtX29iamVjdF9sb29rdXAoZGV2LCBmaWxlX3ByaXYsIGhhbmRsZSk7CisJaWYgKCFvYmop
IHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gbG9va3VwIGdlbSBvYmplY3QuXG4iKTsKKwkJcmV0
dXJuIC1FSU5WQUw7CisJfQorCisJcmV0ID0gZHJtX2dlbV9jcmVhdGVfbW1hcF9vZmZzZXQob2Jq
KTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCSpvZmZzZXQgPSBkcm1fdm1hX25vZGVfb2Zm
c2V0X2FkZHIoJm9iai0+dm1hX25vZGUpOworCURSTV9ERUJVR19LTVMoIm9mZnNldCA9IDB4JWxs
eFxuIiwgKm9mZnNldCk7CisKK291dDoKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxv
Y2tlZChvYmopOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2RybV9nZW1fb2Jq
ZWN0X21tYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCisJCQkJICAgc3RydWN0IHZtX2Fy
ZWFfc3RydWN0ICp2bWEpCisKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBtdGtfZHJtX2dlbV9vYmog
Km10a19nZW0gPSB0b19tdGtfZ2VtX29iaihvYmopOworCXN0cnVjdCBtdGtfZHJtX3ByaXZhdGUg
KnByaXYgPSBvYmotPmRldi0+ZGV2X3ByaXZhdGU7CisKKwkvKgorCSAqIGRtYV9hbGxvY19hdHRy
cygpIGFsbG9jYXRlZCBhIHN0cnVjdCBwYWdlIHRhYmxlIGZvciBtdGtfZ2VtLCBzbyBjbGVhcgor
CSAqIFZNX1BGTk1BUCBmbGFnIHRoYXQgd2FzIHNldCBieSBkcm1fZ2VtX21tYXBfb2JqKCkvZHJt
X2dlbV9tbWFwKCkuCisJICovCisJdm1hLT52bV9mbGFncyAmPSB+Vk1fUEZOTUFQOworCXZtYS0+
dm1fcGdvZmYgPSAwOworCisJcmV0ID0gZG1hX21tYXBfYXR0cnMocHJpdi0+ZG1hX2Rldiwgdm1h
LCBtdGtfZ2VtLT5jb29raWUsCisJCQkgICAgIG10a19nZW0tPmRtYV9hZGRyLCBvYmotPnNpemUs
ICZtdGtfZ2VtLT5kbWFfYXR0cnMpOworCWlmIChyZXQpCisJCWRybV9nZW1fdm1fY2xvc2Uodm1h
KTsKKworCXJldHVybiByZXQ7Cit9CisKK2ludCBtdGtfZHJtX2dlbV9tbWFwX2J1ZihzdHJ1Y3Qg
ZHJtX2dlbV9vYmplY3QgKm9iaiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJaW50
IHJldDsKKworCXJldCA9IGRybV9nZW1fbW1hcF9vYmoob2JqLCBvYmotPnNpemUsIHZtYSk7CisJ
aWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiBtdGtfZHJtX2dlbV9vYmplY3RfbW1h
cChvYmosIHZtYSk7Cit9CisKK2ludCBtdGtfZHJtX2dlbV9tbWFwKHN0cnVjdCBmaWxlICpmaWxw
LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3Qg
Km9iajsKKwlpbnQgcmV0OworCisJcmV0ID0gZHJtX2dlbV9tbWFwKGZpbHAsIHZtYSk7CisJaWYg
KHJldCkKKwkJcmV0dXJuIHJldDsKKworCW9iaiA9IHZtYS0+dm1fcHJpdmF0ZV9kYXRhOworCisJ
cmV0dXJuIG10a19kcm1fZ2VtX29iamVjdF9tbWFwKG9iaiwgdm1hKTsKK30KKworLyoKKyAqIEFs
bG9jYXRlIGEgc2dfdGFibGUgZm9yIHRoaXMgR0VNIG9iamVjdC4KKyAqIE5vdGU6IEJvdGggdGhl
IHRhYmxlJ3MgY29udGVudHMsIGFuZCB0aGUgc2dfdGFibGUgaXRzZWxmIG11c3QgYmUgZnJlZWQg
YnkKKyAqICAgICAgIHRoZSBjYWxsZXIuCisgKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgbmV3
bHkgYWxsb2NhdGVkIHNnX3RhYmxlLCBvciBhbiBFUlJfUFRSKCkgZXJyb3IuCisgKi8KK3N0cnVj
dCBzZ190YWJsZSAqbXRrX2dlbV9wcmltZV9nZXRfc2dfdGFibGUoc3RydWN0IGRybV9nZW1fb2Jq
ZWN0ICpvYmopCit7CisJc3RydWN0IG10a19kcm1fZ2VtX29iaiAqbXRrX2dlbSA9IHRvX210a19n
ZW1fb2JqKG9iaik7CisJc3RydWN0IG10a19kcm1fcHJpdmF0ZSAqcHJpdiA9IG9iai0+ZGV2LT5k
ZXZfcHJpdmF0ZTsKKwlzdHJ1Y3Qgc2dfdGFibGUgKnNndDsKKwlpbnQgcmV0OworCisJc2d0ID0g
a3phbGxvYyhzaXplb2YoKnNndCksIEdGUF9LRVJORUwpOworCWlmICghc2d0KQorCQlyZXR1cm4g
RVJSX1BUUigtRU5PTUVNKTsKKworCXJldCA9IGRtYV9nZXRfc2d0YWJsZV9hdHRycyhwcml2LT5k
bWFfZGV2LCBzZ3QsIG10a19nZW0tPmNvb2tpZSwKKwkJCQkgICAgbXRrX2dlbS0+ZG1hX2FkZHIs
IG9iai0+c2l6ZSwKKwkJCQkgICAgJm10a19nZW0tPmRtYV9hdHRycyk7CisJaWYgKHJldCkgewor
CQlEUk1fRVJST1IoImZhaWxlZCB0byBhbGxvY2F0ZSBzZ3QsICVkXG4iLCByZXQpOworCQlrZnJl
ZShzZ3QpOworCQlyZXR1cm4gRVJSX1BUUihyZXQpOworCX0KKworCXJldHVybiBzZ3Q7Cit9CisK
K3N0cnVjdCBkcm1fZ2VtX29iamVjdCAqbXRrX2dlbV9wcmltZV9pbXBvcnRfc2dfdGFibGUoc3Ry
dWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFj
aCwgc3RydWN0IHNnX3RhYmxlICpzZykKK3sKKwlzdHJ1Y3QgbXRrX2RybV9nZW1fb2JqICptdGtf
Z2VtOworCWludCByZXQ7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzOworCXVuc2lnbmVkIGludCBp
OworCWRtYV9hZGRyX3QgZXhwZWN0ZWQ7CisKKwltdGtfZ2VtID0gbXRrX2RybV9nZW1faW5pdChk
ZXYsIGF0dGFjaC0+ZG1hYnVmLT5zaXplKTsKKworCWlmIChJU19FUlIobXRrX2dlbSkpCisJCXJl
dHVybiBFUlJfUFRSKFBUUl9FUlIobXRrX2dlbSkpOworCisJZXhwZWN0ZWQgPSBzZ19kbWFfYWRk
cmVzcyhzZy0+c2dsKTsKKwlmb3JfZWFjaF9zZyhzZy0+c2dsLCBzLCBzZy0+bmVudHMsIGkpIHsK
KwkJaWYgKHNnX2RtYV9hZGRyZXNzKHMpICE9IGV4cGVjdGVkKSB7CisJCQlEUk1fRVJST1IoInNn
X3RhYmxlIGlzIG5vdCBjb250aWd1b3VzIik7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJZ290byBl
cnJfZ2VtX2ZyZWU7CisJCX0KKwkJZXhwZWN0ZWQgPSBzZ19kbWFfYWRkcmVzcyhzKSArIHNnX2Rt
YV9sZW4ocyk7CisJfQorCisJbXRrX2dlbS0+ZG1hX2FkZHIgPSBzZ19kbWFfYWRkcmVzcyhzZy0+
c2dsKTsKKwltdGtfZ2VtLT5zZyA9IHNnOworCisJcmV0dXJuICZtdGtfZ2VtLT5iYXNlOworCitl
cnJfZ2VtX2ZyZWU6CisJa2ZyZWUobXRrX2dlbSk7CisJcmV0dXJuIEVSUl9QVFIocmV0KTsKK30K
ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2dlbS5oIGIvZHJp
dmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZ2VtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uM2EyYTU2MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2Ry
bS9tZWRpYXRlay9tdGtfZHJtX2dlbS5oCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKGMpIDIwMTUgTWVkaWFUZWsgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBh
cworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICog
VGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9NVEtfRFJNX0dFTV9IXworI2RlZmlu
ZSBfTVRLX0RSTV9HRU1fSF8KKworI2luY2x1ZGUgPGRybS9kcm1fZ2VtLmg+CisKKy8qCisgKiBt
dGsgZHJtIGJ1ZmZlciBzdHJ1Y3R1cmUuCisgKgorICogQGJhc2U6IGEgZ2VtIG9iamVjdC4KKyAq
CS0gYSBuZXcgaGFuZGxlIHRvIHRoaXMgZ2VtIG9iamVjdCB3b3VsZCBiZSBjcmVhdGVkCisgKgli
eSBkcm1fZ2VtX2hhbmRsZV9jcmVhdGUoKS4KKyAqIEBjb29raWU6IHRoZSByZXR1cm4gdmFsdWUg
b2YgZG1hX2FsbG9jX2F0dHJzKCksIGtlZXAgaXQgZm9yIGRtYV9mcmVlX2F0dHJzKCkKKyAqIEBr
dmFkZHI6IGtlcm5lbCB2aXJ0dWFsIGFkZHJlc3Mgb2YgZ2VtIGJ1ZmZlci4KKyAqIEBkbWFfYWRk
cjogZG1hIGFkZHJlc3Mgb2YgZ2VtIGJ1ZmZlci4KKyAqIEBkbWFfYXR0cnM6IGRtYSBhdHRyaWJ1
dGVzIG9mIGdlbSBidWZmZXIuCisgKgorICogUC5TLiB0aGlzIG9iamVjdCB3b3VsZCBiZSB0cmFu
c2ZlcnJlZCB0byB1c2VyIGFzIGttc19iby5oYW5kbGUgc28KKyAqCXVzZXIgY2FuIGFjY2VzcyB0
aGUgYnVmZmVyIHRocm91Z2gga21zX2JvLmhhbmRsZS4KKyAqLworc3RydWN0IG10a19kcm1fZ2Vt
X29iaiB7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0CWJhc2U7CisJdm9pZAkJCSpjb29raWU7CisJ
dm9pZAkJCSprdmFkZHI7CisJZG1hX2FkZHJfdAkJZG1hX2FkZHI7CisJc3RydWN0IGRtYV9hdHRy
cwlkbWFfYXR0cnM7CisJc3RydWN0IHNnX3RhYmxlCQkqc2c7Cit9OworCisjZGVmaW5lIHRvX210
a19nZW1fb2JqKHgpCWNvbnRhaW5lcl9vZih4LCBzdHJ1Y3QgbXRrX2RybV9nZW1fb2JqLCBiYXNl
KQorCit2b2lkIG10a19kcm1fZ2VtX2ZyZWVfb2JqZWN0KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAq
Z2VtKTsKK3N0cnVjdCBtdGtfZHJtX2dlbV9vYmogKm10a19kcm1fZ2VtX2NyZWF0ZShzdHJ1Y3Qg
ZHJtX2RldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKKwkJCQkJICAgYm9vbCBhbGxvY19rbWFwKTsK
K2ludCBtdGtfZHJtX2dlbV9kdW1iX2NyZWF0ZShzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwg
c3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCSAgICBzdHJ1Y3QgZHJtX21vZGVfY3JlYXRlX2R1
bWIgKmFyZ3MpOworaW50IG10a19kcm1fZ2VtX2R1bWJfbWFwX29mZnNldChzdHJ1Y3QgZHJtX2Zp
bGUgKmZpbGVfcHJpdiwKKwkJCQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1aW50MzJfdCBoYW5k
bGUsCisJCQkJdWludDY0X3QgKm9mZnNldCk7CitpbnQgbXRrX2RybV9nZW1fbW1hcChzdHJ1Y3Qg
ZmlsZSAqZmlscCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOworaW50IG10a19kcm1fZ2Vt
X21tYXBfYnVmKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLAorCQkJIHN0cnVjdCB2bV9hcmVh
X3N0cnVjdCAqdm1hKTsKK3N0cnVjdCBzZ190YWJsZSAqbXRrX2dlbV9wcmltZV9nZXRfc2dfdGFi
bGUoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOworc3RydWN0IGRybV9nZW1fb2JqZWN0ICpt
dGtfZ2VtX3ByaW1lX2ltcG9ydF9zZ190YWJsZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJ
c3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoLCBzdHJ1Y3Qgc2dfdGFibGUgKnNnKTsK
KworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9w
bGFuZS5jIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fcGxhbmUuYwpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODk4Nzg4Ci0tLSAvZGV2L251bGwKKysrIGIv
ZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fcGxhbmUuYwpAQCAtMCwwICsxLDI0MCBA
QAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMuCisgKiBBdXRob3I6IENL
IEh1IDxjay5odUBtZWRpYXRlay5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFz
CisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBU
aGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUg
PGRybS9kcm1fYXRvbWljLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+Cisj
aW5jbHVkZSA8ZHJtL2RybV9wbGFuZV9oZWxwZXIuaD4KKworI2luY2x1ZGUgIm10a19kcm1fY3J0
Yy5oIgorI2luY2x1ZGUgIm10a19kcm1fZGRwX2NvbXAuaCIKKyNpbmNsdWRlICJtdGtfZHJtX2Ry
di5oIgorI2luY2x1ZGUgIm10a19kcm1fZmIuaCIKKyNpbmNsdWRlICJtdGtfZHJtX2dlbS5oIgor
I2luY2x1ZGUgIm10a19kcm1fcGxhbmUuaCIKKworc3RhdGljIGNvbnN0IHUzMiBmb3JtYXRzW10g
PSB7CisJRFJNX0ZPUk1BVF9YUkdCODg4OCwKKwlEUk1fRk9STUFUX0FSR0I4ODg4LAorCURSTV9G
T1JNQVRfUkdCNTY1LAorfTsKKworc3RhdGljIHZvaWQgbXRrX3BsYW5lX2VuYWJsZShzdHJ1Y3Qg
bXRrX2RybV9wbGFuZSAqbXRrX3BsYW5lLCBib29sIGVuYWJsZSwKKwkJCSAgICAgZG1hX2FkZHJf
dCBhZGRyLCBzdHJ1Y3QgZHJtX3JlY3QgKmRlc3QpCit7CisJc3RydWN0IGRybV9wbGFuZSAqcGxh
bmUgPSAmbXRrX3BsYW5lLT5iYXNlOworCXN0cnVjdCBtdGtfcGxhbmVfc3RhdGUgKnN0YXRlID0g
dG9fbXRrX3BsYW5lX3N0YXRlKHBsYW5lLT5zdGF0ZSk7CisJdW5zaWduZWQgaW50IHBpdGNoLCBm
b3JtYXQ7CisJaW50IHgsIHk7CisKKwlpZiAoV0FSTl9PTighcGxhbmUtPnN0YXRlIHx8IChlbmFi
bGUgJiYgIXBsYW5lLT5zdGF0ZS0+ZmIpKSkKKwkJcmV0dXJuOworCisJaWYgKHBsYW5lLT5zdGF0
ZS0+ZmIpIHsKKwkJcGl0Y2ggPSBwbGFuZS0+c3RhdGUtPmZiLT5waXRjaGVzWzBdOworCQlmb3Jt
YXQgPSBwbGFuZS0+c3RhdGUtPmZiLT5waXhlbF9mb3JtYXQ7CisJfSBlbHNlIHsKKwkJcGl0Y2gg
PSAwOworCQlmb3JtYXQgPSBEUk1fRk9STUFUX1JHQkE4ODg4OworCX0KKworCXggPSBwbGFuZS0+
c3RhdGUtPmNydGNfeDsKKwl5ID0gcGxhbmUtPnN0YXRlLT5jcnRjX3k7CisKKwlpZiAoeCA8IDAp
IHsKKwkJYWRkciAtPSB4ICogNDsKKwkJeCA9IDA7CisJfQorCisJaWYgKHkgPCAwKSB7CisJCWFk
ZHIgLT0geSAqIHBpdGNoOworCQl5ID0gMDsKKwl9CisKKwlzdGF0ZS0+cGVuZGluZy5lbmFibGUg
PSBlbmFibGU7CisJc3RhdGUtPnBlbmRpbmcucGl0Y2ggPSBwaXRjaDsKKwlzdGF0ZS0+cGVuZGlu
Zy5mb3JtYXQgPSBmb3JtYXQ7CisJc3RhdGUtPnBlbmRpbmcuYWRkciA9IGFkZHI7CisJc3RhdGUt
PnBlbmRpbmcueCA9IHg7CisJc3RhdGUtPnBlbmRpbmcueSA9IHk7CisJc3RhdGUtPnBlbmRpbmcu
d2lkdGggPSBkZXN0LT54MiAtIGRlc3QtPngxOworCXN0YXRlLT5wZW5kaW5nLmhlaWdodCA9IGRl
c3QtPnkyIC0gZGVzdC0+eTE7CisJd21iKCk7IC8qIE1ha2Ugc3VyZSB0aGUgYWJvdmUgcGFyYW1l
dGVycyBhcmUgc2V0IGJlZm9yZSB1cGRhdGUgKi8KKwlzdGF0ZS0+cGVuZGluZy5kaXJ0eSA9IHRy
dWU7Cit9CisKK3N0YXRpYyB2b2lkIG10a19wbGFuZV9yZXNldChzdHJ1Y3QgZHJtX3BsYW5lICpw
bGFuZSkKK3sKKwlzdHJ1Y3QgbXRrX3BsYW5lX3N0YXRlICpzdGF0ZTsKKworCWlmIChwbGFuZS0+
c3RhdGUpIHsKKwkJaWYgKHBsYW5lLT5zdGF0ZS0+ZmIpCisJCQlkcm1fZnJhbWVidWZmZXJfdW5y
ZWZlcmVuY2UocGxhbmUtPnN0YXRlLT5mYik7CisKKwkJc3RhdGUgPSB0b19tdGtfcGxhbmVfc3Rh
dGUocGxhbmUtPnN0YXRlKTsKKwkJbWVtc2V0KHN0YXRlLCAwLCBzaXplb2YoKnN0YXRlKSk7CisJ
fSBlbHNlIHsKKwkJc3RhdGUgPSBremFsbG9jKHNpemVvZigqc3RhdGUpLCBHRlBfS0VSTkVMKTsK
KwkJaWYgKCFzdGF0ZSkKKwkJCXJldHVybjsKKwkJcGxhbmUtPnN0YXRlID0gJnN0YXRlLT5iYXNl
OworCX0KKworCXN0YXRlLT5iYXNlLnBsYW5lID0gcGxhbmU7CisJc3RhdGUtPnBlbmRpbmcuZm9y
bWF0ID0gRFJNX0ZPUk1BVF9SR0I1NjU7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX3BsYW5lX3N0
YXRlICptdGtfcGxhbmVfZHVwbGljYXRlX3N0YXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lKQor
eworCXN0cnVjdCBtdGtfcGxhbmVfc3RhdGUgKm9sZF9zdGF0ZSA9IHRvX210a19wbGFuZV9zdGF0
ZShwbGFuZS0+c3RhdGUpOworCXN0cnVjdCBtdGtfcGxhbmVfc3RhdGUgKnN0YXRlOworCisJc3Rh
dGUgPSBremFsbG9jKHNpemVvZigqc3RhdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXN0YXRlKQor
CQlyZXR1cm4gTlVMTDsKKworCV9fZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfZHVwbGljYXRlX3N0
YXRlKHBsYW5lLCAmc3RhdGUtPmJhc2UpOworCisJV0FSTl9PTihzdGF0ZS0+YmFzZS5wbGFuZSAh
PSBwbGFuZSk7CisKKwlzdGF0ZS0+cGVuZGluZyA9IG9sZF9zdGF0ZS0+cGVuZGluZzsKKworCXJl
dHVybiAmc3RhdGUtPmJhc2U7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcm1fcGxhbmVfZGVzdHJv
eV9zdGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKKwkJCQkJc3RydWN0IGRybV9wbGFuZV9z
dGF0ZSAqc3RhdGUpCit7CisJX19kcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9kZXN0cm95X3N0YXRl
KHBsYW5lLCBzdGF0ZSk7CisJa2ZyZWUodG9fbXRrX3BsYW5lX3N0YXRlKHN0YXRlKSk7Cit9CisK
K3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX2Z1bmNzIG10a19wbGFuZV9mdW5jcyA9IHsK
KwkudXBkYXRlX3BsYW5lID0gZHJtX2F0b21pY19oZWxwZXJfdXBkYXRlX3BsYW5lLAorCS5kaXNh
YmxlX3BsYW5lID0gZHJtX2F0b21pY19oZWxwZXJfZGlzYWJsZV9wbGFuZSwKKwkuZGVzdHJveSA9
IGRybV9wbGFuZV9jbGVhbnVwLAorCS5yZXNldCA9IG10a19wbGFuZV9yZXNldCwKKwkuYXRvbWlj
X2R1cGxpY2F0ZV9zdGF0ZSA9IG10a19wbGFuZV9kdXBsaWNhdGVfc3RhdGUsCisJLmF0b21pY19k
ZXN0cm95X3N0YXRlID0gbXRrX2RybV9wbGFuZV9kZXN0cm95X3N0YXRlLAorfTsKKworc3RhdGlj
IGludCBtdGtfcGxhbmVfYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAorCQkJ
CSAgc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IGRybV9mcmFtZWJ1
ZmZlciAqZmIgPSBzdGF0ZS0+ZmI7CisJc3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRl
OworCWJvb2wgdmlzaWJsZTsKKwlzdHJ1Y3QgZHJtX3JlY3QgZGVzdCA9IHsKKwkJLngxID0gc3Rh
dGUtPmNydGNfeCwKKwkJLnkxID0gc3RhdGUtPmNydGNfeSwKKwkJLngyID0gc3RhdGUtPmNydGNf
eCArIHN0YXRlLT5jcnRjX3csCisJCS55MiA9IHN0YXRlLT5jcnRjX3kgKyBzdGF0ZS0+Y3J0Y19o
LAorCX07CisJc3RydWN0IGRybV9yZWN0IHNyYyA9IHsKKwkJLyogMTYuMTYgZml4ZWQgcG9pbnQg
Ki8KKwkJLngxID0gc3RhdGUtPnNyY194LAorCQkueTEgPSBzdGF0ZS0+c3JjX3ksCisJCS54MiA9
IHN0YXRlLT5zcmNfeCArIHN0YXRlLT5zcmNfdywKKwkJLnkyID0gc3RhdGUtPnNyY195ICsgc3Rh
dGUtPnNyY19oLAorCX07CisJc3RydWN0IGRybV9yZWN0IGNsaXAgPSB7IDAsIH07CisKKwlpZiAo
IWZiKQorCQlyZXR1cm4gMDsKKworCWlmICghbXRrX2ZiX2dldF9nZW1fb2JqKGZiKSkgeworCQlE
Uk1fREVCVUdfS01TKCJidWZmZXIgaXMgbnVsbFxuIik7CisJCXJldHVybiAtRUZBVUxUOworCX0K
KworCWlmICghc3RhdGUtPmNydGMpCisJCXJldHVybiAwOworCisJY3J0Y19zdGF0ZSA9IGRybV9h
dG9taWNfZ2V0X2NydGNfc3RhdGUoc3RhdGUtPnN0YXRlLCBzdGF0ZS0+Y3J0Yyk7CisJaWYgKElT
X0VSUihjcnRjX3N0YXRlKSkKKwkJcmV0dXJuIFBUUl9FUlIoY3J0Y19zdGF0ZSk7CisKKwljbGlw
LngyID0gY3J0Y19zdGF0ZS0+bW9kZS5oZGlzcGxheTsKKwljbGlwLnkyID0gY3J0Y19zdGF0ZS0+
bW9kZS52ZGlzcGxheTsKKworCXJldHVybiBkcm1fcGxhbmVfaGVscGVyX2NoZWNrX3VwZGF0ZShw
bGFuZSwgc3RhdGUtPmNydGMsIGZiLAorCQkJCQkgICAgICZzcmMsICZkZXN0LCAmY2xpcCwKKwkJ
CQkJICAgICBEUk1fUExBTkVfSEVMUEVSX05PX1NDQUxJTkcsCisJCQkJCSAgICAgRFJNX1BMQU5F
X0hFTFBFUl9OT19TQ0FMSU5HLAorCQkJCQkgICAgIHRydWUsIHRydWUsICZ2aXNpYmxlKTsKK30K
Kworc3RhdGljIHZvaWQgbXRrX3BsYW5lX2F0b21pY191cGRhdGUoc3RydWN0IGRybV9wbGFuZSAq
cGxhbmUsCisJCQkJICAgIHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKm9sZF9zdGF0ZSkKK3sKKwlz
dHJ1Y3QgbXRrX3BsYW5lX3N0YXRlICpzdGF0ZSA9IHRvX210a19wbGFuZV9zdGF0ZShwbGFuZS0+
c3RhdGUpOworCXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9IHN0YXRlLT5iYXNlLmNydGM7CisJc3Ry
dWN0IGRybV9nZW1fb2JqZWN0ICpnZW07CisJc3RydWN0IG10a19kcm1fZ2VtX29iaiAqbXRrX2dl
bTsKKwlzdHJ1Y3QgbXRrX2RybV9wbGFuZSAqbXRrX3BsYW5lID0gdG9fbXRrX3BsYW5lKHBsYW5l
KTsKKwlzdHJ1Y3QgZHJtX3JlY3QgZGVzdCA9IHsKKwkJLngxID0gc3RhdGUtPmJhc2UuY3J0Y194
LAorCQkueTEgPSBzdGF0ZS0+YmFzZS5jcnRjX3ksCisJCS54MiA9IHN0YXRlLT5iYXNlLmNydGNf
eCArIHN0YXRlLT5iYXNlLmNydGNfdywKKwkJLnkyID0gc3RhdGUtPmJhc2UuY3J0Y195ICsgc3Rh
dGUtPmJhc2UuY3J0Y19oLAorCX07CisJc3RydWN0IGRybV9yZWN0IGNsaXAgPSB7IDAsIH07CisK
KwlpZiAoIWNydGMpCisJCXJldHVybjsKKworCWNsaXAueDIgPSBzdGF0ZS0+YmFzZS5jcnRjLT5z
dGF0ZS0+bW9kZS5oZGlzcGxheTsKKwljbGlwLnkyID0gc3RhdGUtPmJhc2UuY3J0Yy0+c3RhdGUt
Pm1vZGUudmRpc3BsYXk7CisJZHJtX3JlY3RfaW50ZXJzZWN0KCZkZXN0LCAmY2xpcCk7CisKKwln
ZW0gPSBtdGtfZmJfZ2V0X2dlbV9vYmooc3RhdGUtPmJhc2UuZmIpOworCW10a19nZW0gPSB0b19t
dGtfZ2VtX29iaihnZW0pOworCW10a19wbGFuZV9lbmFibGUobXRrX3BsYW5lLCB0cnVlLCBtdGtf
Z2VtLT5kbWFfYWRkciwgJmRlc3QpOworfQorCitzdGF0aWMgdm9pZCBtdGtfcGxhbmVfYXRvbWlj
X2Rpc2FibGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCisJCQkJICAgICBzdHJ1Y3QgZHJtX3Bs
YW5lX3N0YXRlICpvbGRfc3RhdGUpCit7CisJc3RydWN0IG10a19wbGFuZV9zdGF0ZSAqc3RhdGUg
PSB0b19tdGtfcGxhbmVfc3RhdGUocGxhbmUtPnN0YXRlKTsKKworCXN0YXRlLT5wZW5kaW5nLmVu
YWJsZSA9IGZhbHNlOworCXdtYigpOyAvKiBNYWtlIHN1cmUgdGhlIGFib3ZlIHBhcmFtZXRlciBp
cyBzZXQgYmVmb3JlIHVwZGF0ZSAqLworCXN0YXRlLT5wZW5kaW5nLmRpcnR5ID0gdHJ1ZTsKK30K
Kworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcGxhbmVfaGVscGVyX2Z1bmNzIG10a19wbGFuZV9o
ZWxwZXJfZnVuY3MgPSB7CisJLmF0b21pY19jaGVjayA9IG10a19wbGFuZV9hdG9taWNfY2hlY2ss
CisJLmF0b21pY191cGRhdGUgPSBtdGtfcGxhbmVfYXRvbWljX3VwZGF0ZSwKKwkuYXRvbWljX2Rp
c2FibGUgPSBtdGtfcGxhbmVfYXRvbWljX2Rpc2FibGUsCit9OworCitpbnQgbXRrX3BsYW5lX2lu
aXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IG10a19kcm1fcGxhbmUgKm10a19wbGFu
ZSwKKwkJICAgdW5zaWduZWQgbG9uZyBwb3NzaWJsZV9jcnRjcywgZW51bSBkcm1fcGxhbmVfdHlw
ZSB0eXBlLAorCQkgICB1bnNpZ25lZCBpbnQgenBvcykKK3sKKwlpbnQgZXJyOworCisJZXJyID0g
ZHJtX3VuaXZlcnNhbF9wbGFuZV9pbml0KGRldiwgJm10a19wbGFuZS0+YmFzZSwgcG9zc2libGVf
Y3J0Y3MsCisJCQkJICAgICAgICZtdGtfcGxhbmVfZnVuY3MsIGZvcm1hdHMsCisJCQkJICAgICAg
IEFSUkFZX1NJWkUoZm9ybWF0cyksIHR5cGUsIE5VTEwpOworCWlmIChlcnIpIHsKKwkJRFJNX0VS
Uk9SKCJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBwbGFuZVxuIik7CisJCXJldHVybiBlcnI7CisJfQor
CisJZHJtX3BsYW5lX2hlbHBlcl9hZGQoJm10a19wbGFuZS0+YmFzZSwgJm10a19wbGFuZV9oZWxw
ZXJfZnVuY3MpOworCW10a19wbGFuZS0+aWR4ID0genBvczsKKworCXJldHVybiAwOworfQpkaWZm
IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fcGxhbmUuaCBiL2RyaXZl
cnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX3BsYW5lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uNzJhN2IzZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2Ry
bS9tZWRpYXRlay9tdGtfZHJtX3BsYW5lLmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHly
aWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMuCisgKiBBdXRob3I6IENLIEh1IDxjay5odUBtZWRp
YXRlay5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICovCisKKyNpZm5kZWYgX01US19EUk1fUExBTkVfSF8KKyNkZWZpbmUgX01US19EUk1fUExB
TkVfSF8KKworI2luY2x1ZGUgPGRybS9kcm1fY3J0Yy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVz
Lmg+CisKK3N0cnVjdCBtdGtfZHJtX3BsYW5lIHsKKwlzdHJ1Y3QgZHJtX3BsYW5lCQliYXNlOwor
CXVuc2lnbmVkIGludAkJCWlkeDsKK307CisKK3N0cnVjdCBtdGtfcGxhbmVfcGVuZGluZ19zdGF0
ZSB7CisJYm9vbAkJCQljb25maWc7CisJYm9vbAkJCQllbmFibGU7CisJZG1hX2FkZHJfdAkJCWFk
ZHI7CisJdW5zaWduZWQgaW50CQkJcGl0Y2g7CisJdW5zaWduZWQgaW50CQkJZm9ybWF0OworCXVu
c2lnbmVkIGludAkJCXg7CisJdW5zaWduZWQgaW50CQkJeTsKKwl1bnNpZ25lZCBpbnQJCQl3aWR0
aDsKKwl1bnNpZ25lZCBpbnQJCQloZWlnaHQ7CisJYm9vbAkJCQlkaXJ0eTsKK307CisKK3N0cnVj
dCBtdGtfcGxhbmVfc3RhdGUgeworCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUJCWJhc2U7CisJc3Ry
dWN0IG10a19wbGFuZV9wZW5kaW5nX3N0YXRlCXBlbmRpbmc7Cit9OworCitzdGF0aWMgaW5saW5l
IHN0cnVjdCBtdGtfZHJtX3BsYW5lICp0b19tdGtfcGxhbmUoc3RydWN0IGRybV9wbGFuZSAqcGxh
bmUpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihwbGFuZSwgc3RydWN0IG10a19kcm1fcGxhbmUs
IGJhc2UpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtdGtfcGxhbmVfc3RhdGUgKgordG9f
bXRrX3BsYW5lX3N0YXRlKHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlKQoreworCXJldHVy
biBjb250YWluZXJfb2Yoc3RhdGUsIHN0cnVjdCBtdGtfcGxhbmVfc3RhdGUsIGJhc2UpOworfQor
CitpbnQgbXRrX3BsYW5lX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IG10a19k
cm1fcGxhbmUgKm10a19wbGFuZSwKKwkJICAgdW5zaWduZWQgbG9uZyBwb3NzaWJsZV9jcnRjcywg
ZW51bSBkcm1fcGxhbmVfdHlwZSB0eXBlLAorCQkgICB1bnNpZ25lZCBpbnQgenBvcyk7CisKKyNl
bmRpZgotLSAKMi44LjAucmMzCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRl
c2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8v
ZHJpLWRldmVsCg==