From mboxrd@z Thu Jan 1 00:00:00 1970
From: Philipp Zabel
Subject: [PATCH v11 02/14] drm/mediatek: Add DRM Driver for Mediatek SoC
MT8173.
Date: Wed, 17 Feb 2016 12:28:42 +0100
Message-ID: <1455708534-20274-3-git-send-email-p.zabel@pengutronix.de>
References: <1455708534-20274-1-git-send-email-p.zabel@pengutronix.de>
Mime-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Return-path:
In-Reply-To: <1455708534-20274-1-git-send-email-p.zabel@pengutronix.de>
List-Unsubscribe: ,
List-Archive:
List-Post:
List-Help:
List-Subscribe: ,
Errors-To: dri-devel-bounces@lists.freedesktop.org
Sender: "dri-devel"
To: dri-devel@lists.freedesktop.org
Cc: Mark Rutland , Stephen Boyd , Michael Turquette , Jie Qiu , Cawa Cheng , Mao Huang , YT Shen , Yingjoe Chen , devicetree@vger.kernel.org, Jitao Shi , kernel@pengutronix.de, Pawel Moll , Ian Campbell , Rob Herring , linux-mediatek@lists.infradead.org, Matthias Brugger , Paul Bolle , Emil Velikov , Tomasz Figa , Kumar Gala
List-Id: linux-mediatek@lists.infradead.org
RnJvbTogQ0sgSHUgPGNrLmh1QG1lZGlhdGVrLmNvbT4KClRoaXMgcGF0Y2ggYWRkcyBhbiBpbml0
aWFsIERSTSBkcml2ZXIgZm9yIHRoZSBNZWRpYXRlayBNVDgxNzMgRElTUApzdWJzeXN0ZW0uIEl0
IGN1cnJlbnRseSBzdXBwb3J0cyB0d28gZml4ZWQgb3V0cHV0IHN0cmVhbXMgZnJvbSB0aGUKT1ZM
MC9PVkwxIHNvdXJjZXMgdG8gdGhlIERTSTAvRFBJMCBzaW5rcywgcmVzcGVjdGl2ZWx5LgoKU2ln
bmVkLW9mZi1ieTogQ0sgSHUgPGNrLmh1QG1lZGlhdGVrLmNvbT4KU2lnbmVkLW9mZi1ieTogWVQg
U2hlbiA8eXQuc2hlbkBtZWRpYXRlay5jb20+ClNpZ25lZC1vZmYtYnk6IERhbmllbCBLdXJ0eiA8
ZGprdXJ0ekBjaHJvbWl1bS5vcmc+ClNpZ25lZC1vZmYtYnk6IEJpYmJ5IEhzaWVoIDxiaWJieS5o
c2llaEBtZWRpYXRlay5jb20+ClNpZ25lZC1vZmYtYnk6IE1hbyBIdWFuZyA8bGl0dGxlY3ZyQGNo
cm9taXVtLm9yZz4KU2lnbmVkLW9mZi1ieTogUGhpbGlwcCBaYWJlbCA8cC56YWJlbEBwZW5ndXRy
b25peC5kZT4KLS0tCkNoYW5nZXMgc2luY2UgdjEwOgogLSBLZWVwIHRoZSBwbGFuZSdzIHBlbmRp
bmcuZW5hYmxlIHN0YXRlIHdoZW4gZGlzYWJsaW5nIHRoZW0gaW5pdGlhbGx5LgotLS0KIGRyaXZl
cnMvZ3B1L2RybS9LY29uZmlnICAgICAgICAgICAgICAgICAgICAgfCAgIDIgKwogZHJpdmVycy9n
cHUvZHJtL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICB8ICAgMSArCiBkcml2ZXJzL2dwdS9k
cm0vbWVkaWF0ZWsvS2NvbmZpZyAgICAgICAgICAgIHwgIDEyICsKIGRyaXZlcnMvZ3B1L2RybS9t
ZWRpYXRlay9NYWtlZmlsZSAgICAgICAgICAgfCAgMTEgKwogZHJpdmVycy9ncHUvZHJtL21lZGlh
dGVrL210a19kaXNwX292bC5jICAgICB8IDMwMiArKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1
L2RybS9tZWRpYXRlay9tdGtfZGlzcF9yZG1hLmMgICAgfCAyNDAgKysrKysrKysrKysrCiBkcml2
ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9jcnRjLmMgICAgIHwgNTgwICsrKysrKysrKysr
KysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2NydGMu
aCAgICAgfCAgMzIgKysKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2RkcC5jICAg
ICAgfCAzNTUgKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtf
ZHJtX2RkcC5oICAgICAgfCAgNDEgKysKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJt
X2RkcF9jb21wLmMgfCAyMjUgKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9t
dGtfZHJtX2RkcF9jb21wLmggfCAxNTAgKysrKysrKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVr
L210a19kcm1fZHJ2LmMgICAgICB8IDU3OSArKysrKysrKysrKysrKysrKysrKysrKysrKysKIGRy
aXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5oICAgICAgfCAgNTMgKysrCiBkcml2
ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9mYi5jICAgICAgIHwgMTY1ICsrKysrKysrCiBk
cml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9mYi5oICAgICAgIHwgIDIzICsrCiBkcml2
ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9nZW0uYyAgICAgIHwgMjY2ICsrKysrKysrKysr
KysKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2dlbS5oICAgICAgfCAgNTkgKysr
CiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9wbGFuZS5jICAgIHwgMjQwICsrKysr
KysrKysrKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fcGxhbmUuaCAgICB8ICA1
OSArKysKIDIwIGZpbGVzIGNoYW5nZWQsIDMzOTUgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUg
MTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9LY29uZmlnCiBjcmVhdGUgbW9kZSAxMDA2
NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL01ha2VmaWxlCiBjcmVhdGUgbW9kZSAxMDA2NDQg
ZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kaXNwX292bC5jCiBjcmVhdGUgbW9kZSAxMDA2
NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kaXNwX3JkbWEuYwogY3JlYXRlIG1vZGUg
MTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2NydGMuYwogY3JlYXRlIG1v
ZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2NydGMuaAogY3JlYXRl
IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2RkcC5jCiBjcmVh
dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwLmgKIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHBfY29t
cC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1f
ZGRwX2NvbXAuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9t
dGtfZHJtX2Rydi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVr
L210a19kcm1fZHJ2LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0
ZWsvbXRrX2RybV9mYi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlh
dGVrL210a19kcm1fZmIuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRp
YXRlay9tdGtfZHJtX2dlbS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21l
ZGlhdGVrL210a19kcm1fZ2VtLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0v
bWVkaWF0ZWsvbXRrX2RybV9wbGFuZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUv
ZHJtL21lZGlhdGVrL210a19kcm1fcGxhbmUuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry
bS9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKaW5kZXggOGFlN2FiNi4uZjdiMGQ3
OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKKysrIGIvZHJpdmVycy9ncHUv
ZHJtL0tjb25maWcKQEAgLTI2OSwzICsyNjksNSBAQCBzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS9p
bXgvS2NvbmZpZyIKIHNvdXJjZSAiZHJpdmVycy9ncHUvZHJtL3ZjNC9LY29uZmlnIgogCiBzb3Vy
Y2UgImRyaXZlcnMvZ3B1L2RybS9ldG5hdml2L0tjb25maWciCisKK3NvdXJjZSAiZHJpdmVycy9n
cHUvZHJtL21lZGlhdGVrL0tjb25maWciCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vTWFr
ZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKaW5kZXggNjE3NjZkZS4uN2IwZDFhYiAx
MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2Ry
bS9NYWtlZmlsZQpAQCAtNjksNiArNjksNyBAQCBvYmotJChDT05GSUdfRFJNX01TTSkgKz0gbXNt
Lwogb2JqLSQoQ09ORklHX0RSTV9URUdSQSkgKz0gdGVncmEvCiBvYmotJChDT05GSUdfRFJNX1NU
SSkgKz0gc3RpLwogb2JqLSQoQ09ORklHX0RSTV9JTVgpICs9IGlteC8KK29iai0kKENPTkZJR19E
Uk1fTUVESUFURUspICs9IG1lZGlhdGVrLwogb2JqLXkJCQkrPSBpMmMvCiBvYmoteQkJCSs9IHBh
bmVsLwogb2JqLXkJCQkrPSBicmlkZ2UvCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVk
aWF0ZWsvS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9LY29uZmlnCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkYWQ4OTIKLS0tIC9kZXYvbnVsbAorKysgYi9k
cml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvS2NvbmZpZwpAQCAtMCwwICsxLDEyIEBACitjb25maWcg
RFJNX01FRElBVEVLCisJdHJpc3RhdGUgIkRSTSBTdXBwb3J0IGZvciBNZWRpYXRlayBTb0NzIgor
CWRlcGVuZHMgb24gRFJNCisJZGVwZW5kcyBvbiBBUkNIX01FRElBVEVLIHx8IChBUk0gJiYgQ09N
UElMRV9URVNUKQorCXNlbGVjdCBEUk1fS01TX0hFTFBFUgorCXNlbGVjdCBJT01NVV9ETUEKKwlz
ZWxlY3QgTVRLX1NNSQorCWhlbHAKKwkgIENob29zZSB0aGlzIG9wdGlvbiBpZiB5b3UgaGF2ZSBh
IE1lZGlhdGVrIFNvQ3MuCisJICBUaGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIG1lZGlhdGVrLWRy
bQorCSAgVGhpcyBkcml2ZXIgcHJvdmlkZXMga2VybmVsIG1vZGUgc2V0dGluZyBhbmQKKwkgIGJ1
ZmZlciBtYW5hZ2VtZW50IHRvIHVzZXJzcGFjZS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry
bS9tZWRpYXRlay9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9NYWtlZmlsZQpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGJkZTdjCi0tLSAvZGV2L251bGwK
KysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL01ha2VmaWxlCkBAIC0wLDAgKzEsMTEgQEAK
K21lZGlhdGVrLWRybS15IDo9IG10a19kaXNwX292bC5vIFwKKwkJICBtdGtfZGlzcF9yZG1hLm8g
XAorCQkgIG10a19kcm1fY3J0Yy5vIFwKKwkJICBtdGtfZHJtX2RkcC5vIFwKKwkJICBtdGtfZHJt
X2RkcF9jb21wLm8gXAorCQkgIG10a19kcm1fZHJ2Lm8gXAorCQkgIG10a19kcm1fZmIubyBcCisJ
CSAgbXRrX2RybV9nZW0ubyBcCisJCSAgbXRrX2RybV9wbGFuZS5vCisKK29iai0kKENPTkZJR19E
Uk1fTUVESUFURUspICs9IG1lZGlhdGVrLWRybS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k
cm0vbWVkaWF0ZWsvbXRrX2Rpc3Bfb3ZsLmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRr
X2Rpc3Bfb3ZsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGY2MjY3MWYK
LS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Rpc3Bfb3Zs
LmMKQEAgLTAsMCArMSwzMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgTWVkaWFUZWsg
SW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
LworCisjaW5jbHVkZSA8ZHJtL2RybVAuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNs
dWRlIDxsaW51eC9jb21wb25lbnQuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KKyNp
bmNsdWRlIDxsaW51eC9vZl9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2Uu
aD4KKworI2luY2x1ZGUgIm10a19kcm1fY3J0Yy5oIgorI2luY2x1ZGUgIm10a19kcm1fZGRwX2Nv
bXAuaCIKKworI2RlZmluZSBESVNQX1JFR19PVkxfSU5URU4JCQkweDAwMDQKKyNkZWZpbmUgT1ZM
X0ZNRV9DUExfSU5UCQkJCQlCSVQoMSkKKyNkZWZpbmUgRElTUF9SRUdfT1ZMX0lOVFNUQQkJCTB4
MDAwOAorI2RlZmluZSBESVNQX1JFR19PVkxfRU4JCQkJMHgwMDBjCisjZGVmaW5lIERJU1BfUkVH
X09WTF9SU1QJCQkweDAwMTQKKyNkZWZpbmUgRElTUF9SRUdfT1ZMX1JPSV9TSVpFCQkJMHgwMDIw
CisjZGVmaW5lIERJU1BfUkVHX09WTF9ST0lfQkdDTFIJCQkweDAwMjgKKyNkZWZpbmUgRElTUF9S
RUdfT1ZMX1NSQ19DT04JCQkweDAwMmMKKyNkZWZpbmUgRElTUF9SRUdfT1ZMX0NPTihuKQkJCSgw
eDAwMzAgKyAweDIwICogKG4pKQorI2RlZmluZSBESVNQX1JFR19PVkxfU1JDX1NJWkUobikJCSgw
eDAwMzggKyAweDIwICogKG4pKQorI2RlZmluZSBESVNQX1JFR19PVkxfT0ZGU0VUKG4pCQkJKDB4
MDAzYyArIDB4MjAgKiAobikpCisjZGVmaW5lIERJU1BfUkVHX09WTF9QSVRDSChuKQkJCSgweDAw
NDQgKyAweDIwICogKG4pKQorI2RlZmluZSBESVNQX1JFR19PVkxfUkRNQV9DVFJMKG4pCQkoMHgw
MGMwICsgMHgyMCAqIChuKSkKKyNkZWZpbmUgRElTUF9SRUdfT1ZMX1JETUFfR01DKG4pCQkoMHgw
MGM4ICsgMHgyMCAqIChuKSkKKyNkZWZpbmUgRElTUF9SRUdfT1ZMX0FERFIobikJCQkoMHgwZjQw
ICsgMHgyMCAqIChuKSkKKworI2RlZmluZQlPVkxfUkRNQV9NRU1fR01DCTB4NDA0MDIwMjAKKwor
I2RlZmluZSBPVkxfQ09OX0JZVEVfU1dBUAlCSVQoMjQpCisjZGVmaW5lIE9WTF9DT05fQ0xSRk1U
X1JHQjU2NQkoMCA8PCAxMikKKyNkZWZpbmUgT1ZMX0NPTl9DTFJGTVRfUkdCODg4CSgxIDw8IDEy
KQorI2RlZmluZSBPVkxfQ09OX0NMUkZNVF9SR0JBODg4OAkoMiA8PCAxMikKKyNkZWZpbmUgT1ZM
X0NPTl9DTFJGTVRfQVJHQjg4ODgJKDMgPDwgMTIpCisjZGVmaW5lCU9WTF9DT05fQUVOCQlCSVQo
OCkKKyNkZWZpbmUJT1ZMX0NPTl9BTFBIQQkJMHhmZgorCisvKioKKyAqIHN0cnVjdCBtdGtfZGlz
cF9vdmwgLSBESVNQX09WTCBkcml2ZXIgc3RydWN0dXJlCisgKiBAZGRwX2NvbXAgLSBzdHJ1Y3R1
cmUgY29udGFpbmluZyB0eXBlIGVudW0gYW5kIGhhcmR3YXJlIHJlc291cmNlcworICogQGNydGMg
LSBhc3NvY2lhdGVkIGNydGMgdG8gcmVwb3J0IHZibGFuayBldmVudHMgdG8KKyAqLworc3RydWN0
IG10a19kaXNwX292bCB7CisJc3RydWN0IG10a19kZHBfY29tcAkJZGRwX2NvbXA7CisJc3RydWN0
IGRybV9jcnRjCQkJKmNydGM7Cit9OworCitzdGF0aWMgaXJxcmV0dXJuX3QgbXRrX2Rpc3Bfb3Zs
X2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgbXRrX2Rpc3Bf
b3ZsICpwcml2ID0gZGV2X2lkOworCXN0cnVjdCBtdGtfZGRwX2NvbXAgKm92bCA9ICZwcml2LT5k
ZHBfY29tcDsKKworCS8qIENsZWFyIGZyYW1lIGNvbXBsZXRpb24gaW50ZXJydXB0ICovCisJd3Jp
dGVsKDB4MCwgb3ZsLT5yZWdzICsgRElTUF9SRUdfT1ZMX0lOVFNUQSk7CisKKwlpZiAoIXByaXYt
PmNydGMpCisJCXJldHVybiBJUlFfTk9ORTsKKworCW10a19jcnRjX2RkcF9pcnEocHJpdi0+Y3J0
Yywgb3ZsKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHZvaWQgbXRrX292
bF9lbmFibGVfdmJsYW5rKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAsCisJCQkJICBzdHJ1Y3Qg
ZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0IG10a19kaXNwX292bCAqcHJpdiA9IGNvbnRhaW5l
cl9vZihjb21wLCBzdHJ1Y3QgbXRrX2Rpc3Bfb3ZsLAorCQkJCQkJIGRkcF9jb21wKTsKKworCXBy
aXYtPmNydGMgPSBjcnRjOworCXdyaXRlbF9yZWxheGVkKE9WTF9GTUVfQ1BMX0lOVCwgY29tcC0+
cmVncyArIERJU1BfUkVHX09WTF9JTlRFTik7Cit9CisKK3N0YXRpYyB2b2lkIG10a19vdmxfZGlz
YWJsZV92Ymxhbmsoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCkKK3sKKwlzdHJ1Y3QgbXRrX2Rp
c3Bfb3ZsICpwcml2ID0gY29udGFpbmVyX29mKGNvbXAsIHN0cnVjdCBtdGtfZGlzcF9vdmwsCisJ
CQkJCQkgZGRwX2NvbXApOworCisJcHJpdi0+Y3J0YyA9IE5VTEw7CisJd3JpdGVsX3JlbGF4ZWQo
MHgwLCBjb21wLT5yZWdzICsgRElTUF9SRUdfT1ZMX0lOVEVOKTsKK30KKworc3RhdGljIHZvaWQg
bXRrX292bF9zdGFydChzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKQoreworCXdyaXRlbF9yZWxh
eGVkKDB4MSwgY29tcC0+cmVncyArIERJU1BfUkVHX09WTF9FTik7Cit9CisKK3N0YXRpYyB2b2lk
IG10a19vdmxfc3RvcChzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKQoreworCXdyaXRlbF9yZWxh
eGVkKDB4MCwgY29tcC0+cmVncyArIERJU1BfUkVHX09WTF9FTik7Cit9CisKK3N0YXRpYyB2b2lk
IG10a19vdmxfY29uZmlnKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAsIHVuc2lnbmVkIGludCB3
LAorCQkJICAgdW5zaWduZWQgaW50IGgsIHVuc2lnbmVkIGludCB2cmVmcmVzaCkKK3sKKwlpZiAo
dyAhPSAwICYmIGggIT0gMCkKKwkJd3JpdGVsX3JlbGF4ZWQoaCA8PCAxNiB8IHcsIGNvbXAtPnJl
Z3MgKyBESVNQX1JFR19PVkxfUk9JX1NJWkUpOworCXdyaXRlbF9yZWxheGVkKDB4MCwgY29tcC0+
cmVncyArIERJU1BfUkVHX09WTF9ST0lfQkdDTFIpOworCisJd3JpdGVsKDB4MSwgY29tcC0+cmVn
cyArIERJU1BfUkVHX09WTF9SU1QpOworCXdyaXRlbCgweDAsIGNvbXAtPnJlZ3MgKyBESVNQX1JF
R19PVkxfUlNUKTsKK30KKworc3RhdGljIHZvaWQgbXRrX292bF9sYXllcl9vbihzdHJ1Y3QgbXRr
X2RkcF9jb21wICpjb21wLCB1bnNpZ25lZCBpbnQgaWR4KQoreworCXVuc2lnbmVkIGludCByZWc7
CisKKwl3cml0ZWwoMHgxLCBjb21wLT5yZWdzICsgRElTUF9SRUdfT1ZMX1JETUFfQ1RSTChpZHgp
KTsKKwl3cml0ZWwoT1ZMX1JETUFfTUVNX0dNQywgY29tcC0+cmVncyArIERJU1BfUkVHX09WTF9S
RE1BX0dNQyhpZHgpKTsKKworCXJlZyA9IHJlYWRsKGNvbXAtPnJlZ3MgKyBESVNQX1JFR19PVkxf
U1JDX0NPTik7CisJcmVnID0gcmVnIHwgQklUKGlkeCk7CisJd3JpdGVsKHJlZywgY29tcC0+cmVn
cyArIERJU1BfUkVHX09WTF9TUkNfQ09OKTsKK30KKworc3RhdGljIHZvaWQgbXRrX292bF9sYXll
cl9vZmYoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCwgdW5zaWduZWQgaW50IGlkeCkKK3sKKwl1
bnNpZ25lZCBpbnQgcmVnOworCisJcmVnID0gcmVhZGwoY29tcC0+cmVncyArIERJU1BfUkVHX09W
TF9TUkNfQ09OKTsKKwlyZWcgPSByZWcgJiB+QklUKGlkeCk7CisJd3JpdGVsKHJlZywgY29tcC0+
cmVncyArIERJU1BfUkVHX09WTF9TUkNfQ09OKTsKKworCXdyaXRlbCgweDAsIGNvbXAtPnJlZ3Mg
KyBESVNQX1JFR19PVkxfUkRNQV9DVFJMKGlkeCkpOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50
IG92bF9mbXRfY29udmVydCh1bnNpZ25lZCBpbnQgZm10KQoreworCXN3aXRjaCAoZm10KSB7CisJ
ZGVmYXVsdDoKKwljYXNlIERSTV9GT1JNQVRfUkdCNTY1OgorCQlyZXR1cm4gT1ZMX0NPTl9DTFJG
TVRfUkdCNTY1OworCWNhc2UgRFJNX0ZPUk1BVF9CR1I1NjU6CisJCXJldHVybiBPVkxfQ09OX0NM
UkZNVF9SR0I1NjUgfCBPVkxfQ09OX0JZVEVfU1dBUDsKKwljYXNlIERSTV9GT1JNQVRfUkdCODg4
OgorCQlyZXR1cm4gT1ZMX0NPTl9DTFJGTVRfUkdCODg4OworCWNhc2UgRFJNX0ZPUk1BVF9CR1I4
ODg6CisJCXJldHVybiBPVkxfQ09OX0NMUkZNVF9SR0I4ODggfCBPVkxfQ09OX0JZVEVfU1dBUDsK
KwljYXNlIERSTV9GT1JNQVRfUkdCWDg4ODg6CisJY2FzZSBEUk1fRk9STUFUX1JHQkE4ODg4Ogor
CQlyZXR1cm4gT1ZMX0NPTl9DTFJGTVRfQVJHQjg4ODg7CisJY2FzZSBEUk1fRk9STUFUX0JHUlg4
ODg4OgorCWNhc2UgRFJNX0ZPUk1BVF9CR1JBODg4ODoKKwkJcmV0dXJuIE9WTF9DT05fQ0xSRk1U
X0FSR0I4ODg4IHwgT1ZMX0NPTl9CWVRFX1NXQVA7CisJY2FzZSBEUk1fRk9STUFUX1hSR0I4ODg4
OgorCWNhc2UgRFJNX0ZPUk1BVF9BUkdCODg4ODoKKwkJcmV0dXJuIE9WTF9DT05fQ0xSRk1UX1JH
QkE4ODg4OworCWNhc2UgRFJNX0ZPUk1BVF9YQkdSODg4ODoKKwljYXNlIERSTV9GT1JNQVRfQUJH
Ujg4ODg6CisJCXJldHVybiBPVkxfQ09OX0NMUkZNVF9SR0JBODg4OCB8IE9WTF9DT05fQllURV9T
V0FQOworCX0KK30KKworc3RhdGljIHZvaWQgbXRrX292bF9sYXllcl9jb25maWcoc3RydWN0IG10
a19kZHBfY29tcCAqY29tcCwgdW5zaWduZWQgaW50IGlkeCwKKwkJCQkgc3RydWN0IG10a19wbGFu
ZV9zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IG10a19wbGFuZV9wZW5kaW5nX3N0YXRlICpwZW5k
aW5nID0gJnN0YXRlLT5wZW5kaW5nOworCXVuc2lnbmVkIGludCBhZGRyID0gcGVuZGluZy0+YWRk
cjsKKwl1bnNpZ25lZCBpbnQgcGl0Y2ggPSBwZW5kaW5nLT5waXRjaCAmIDB4ZmZmZjsKKwl1bnNp
Z25lZCBpbnQgZm10ID0gcGVuZGluZy0+Zm9ybWF0OworCXVuc2lnbmVkIGludCBvZmZzZXQgPSAo
cGVuZGluZy0+eSA8PCAxNikgfCBwZW5kaW5nLT54OworCXVuc2lnbmVkIGludCBzcmNfc2l6ZSA9
IChwZW5kaW5nLT5oZWlnaHQgPDwgMTYpIHwgcGVuZGluZy0+d2lkdGg7CisJdW5zaWduZWQgaW50
IGNvbjsKKworCWlmICghcGVuZGluZy0+ZW5hYmxlKQorCQltdGtfb3ZsX2xheWVyX29mZihjb21w
LCBpZHgpOworCisJY29uID0gb3ZsX2ZtdF9jb252ZXJ0KGZtdCk7CisJaWYgKGlkeCAhPSAwKQor
CQljb24gfD0gT1ZMX0NPTl9BRU4gfCBPVkxfQ09OX0FMUEhBOworCisJd3JpdGVsX3JlbGF4ZWQo
Y29uLCBjb21wLT5yZWdzICsgRElTUF9SRUdfT1ZMX0NPTihpZHgpKTsKKwl3cml0ZWxfcmVsYXhl
ZChwaXRjaCwgY29tcC0+cmVncyArIERJU1BfUkVHX09WTF9QSVRDSChpZHgpKTsKKwl3cml0ZWxf
cmVsYXhlZChzcmNfc2l6ZSwgY29tcC0+cmVncyArIERJU1BfUkVHX09WTF9TUkNfU0laRShpZHgp
KTsKKwl3cml0ZWxfcmVsYXhlZChvZmZzZXQsIGNvbXAtPnJlZ3MgKyBESVNQX1JFR19PVkxfT0ZG
U0VUKGlkeCkpOworCXdyaXRlbF9yZWxheGVkKGFkZHIsIGNvbXAtPnJlZ3MgKyBESVNQX1JFR19P
VkxfQUREUihpZHgpKTsKKworCWlmIChwZW5kaW5nLT5lbmFibGUpCisJCW10a19vdmxfbGF5ZXJf
b24oY29tcCwgaWR4KTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBtdGtfZGRwX2NvbXBfZnVu
Y3MgbXRrX2Rpc3Bfb3ZsX2Z1bmNzID0geworCS5jb25maWcgPSBtdGtfb3ZsX2NvbmZpZywKKwku
c3RhcnQgPSBtdGtfb3ZsX3N0YXJ0LAorCS5zdG9wID0gbXRrX292bF9zdG9wLAorCS5lbmFibGVf
dmJsYW5rID0gbXRrX292bF9lbmFibGVfdmJsYW5rLAorCS5kaXNhYmxlX3ZibGFuayA9IG10a19v
dmxfZGlzYWJsZV92YmxhbmssCisJLmxheWVyX29uID0gbXRrX292bF9sYXllcl9vbiwKKwkubGF5
ZXJfb2ZmID0gbXRrX292bF9sYXllcl9vZmYsCisJLmxheWVyX2NvbmZpZyA9IG10a19vdmxfbGF5
ZXJfY29uZmlnLAorfTsKKworc3RhdGljIGludCBtdGtfZGlzcF9vdmxfYmluZChzdHJ1Y3QgZGV2
aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3RlciwKKwkJCSAgICAgdm9pZCAqZGF0YSkKK3sK
KwlzdHJ1Y3QgbXRrX2Rpc3Bfb3ZsICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3Ry
dWN0IGRybV9kZXZpY2UgKmRybV9kZXYgPSBkYXRhOworCWludCByZXQ7CisKKwlyZXQgPSBtdGtf
ZGRwX2NvbXBfcmVnaXN0ZXIoZHJtX2RldiwgJnByaXYtPmRkcF9jb21wKTsKKwlpZiAocmV0IDwg
MCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byByZWdpc3RlciBjb21wb25lbnQgJXM6ICVk
XG4iLAorCQkJZGV2LT5vZl9ub2RlLT5mdWxsX25hbWUsIHJldCk7CisJCXJldHVybiByZXQ7CisJ
fQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kaXNwX292bF91bmJpbmQoc3Ry
dWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsCisJCQkJdm9pZCAqZGF0YSkK
K3sKKwlzdHJ1Y3QgbXRrX2Rpc3Bfb3ZsICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJ
c3RydWN0IGRybV9kZXZpY2UgKmRybV9kZXYgPSBkYXRhOworCisJbXRrX2RkcF9jb21wX3VucmVn
aXN0ZXIoZHJtX2RldiwgJnByaXYtPmRkcF9jb21wKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVj
dCBjb21wb25lbnRfb3BzIG10a19kaXNwX292bF9jb21wb25lbnRfb3BzID0geworCS5iaW5kCT0g
bXRrX2Rpc3Bfb3ZsX2JpbmQsCisJLnVuYmluZCA9IG10a19kaXNwX292bF91bmJpbmQsCit9Owor
CitzdGF0aWMgaW50IG10a19kaXNwX292bF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpw
ZGV2KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0IG10a19k
aXNwX292bCAqcHJpdjsKKwlpbnQgY29tcF9pZDsKKwlpbnQgaXJxOworCWludCByZXQ7CisKKwlw
cml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYg
KCFwcml2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRl
diwgMCk7CisJaWYgKGlycSA8IDApCisJCXJldHVybiBpcnE7CisKKwlyZXQgPSBkZXZtX3JlcXVl
c3RfaXJxKGRldiwgaXJxLCBtdGtfZGlzcF9vdmxfaXJxX2hhbmRsZXIsCisJCQkgICAgICAgSVJR
Rl9UUklHR0VSX05PTkUsIGRldl9uYW1lKGRldiksIHByaXYpOworCWlmIChyZXQgPCAwKSB7CisJ
CWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJlcXVlc3QgaXJxICVkOiAlZFxuIiwgaXJxLCByZXQp
OworCQlyZXR1cm4gcmV0OworCX0KKworCWNvbXBfaWQgPSBtdGtfZGRwX2NvbXBfZ2V0X2lkKGRl
di0+b2Zfbm9kZSwgTVRLX0RJU1BfT1ZMKTsKKwlpZiAoY29tcF9pZCA8IDApIHsKKwkJZGV2X2Vy
cihkZXYsICJGYWlsZWQgdG8gaWRlbnRpZnkgYnkgYWxpYXM6ICVkXG4iLCBjb21wX2lkKTsKKwkJ
cmV0dXJuIGNvbXBfaWQ7CisJfQorCisJcmV0ID0gbXRrX2RkcF9jb21wX2luaXQoZGV2LCBkZXYt
Pm9mX25vZGUsICZwcml2LT5kZHBfY29tcCwgY29tcF9pZCwKKwkJCQkmbXRrX2Rpc3Bfb3ZsX2Z1
bmNzKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGluaXRpYWxpemUg
Y29tcG9uZW50OiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlwbGF0Zm9ybV9z
ZXRfZHJ2ZGF0YShwZGV2LCBwcml2KTsKKworCXJldCA9IGNvbXBvbmVudF9hZGQoZGV2LCAmbXRr
X2Rpc3Bfb3ZsX2NvbXBvbmVudF9vcHMpOworCWlmIChyZXQpCisJCWRldl9lcnIoZGV2LCAiRmFp
bGVkIHRvIGFkZCBjb21wb25lbnQ6ICVkXG4iLCByZXQpOworCisJcmV0dXJuIHJldDsKK30KKwor
c3RhdGljIGludCBtdGtfZGlzcF9vdmxfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBk
ZXYpCit7CisJY29tcG9uZW50X2RlbCgmcGRldi0+ZGV2LCAmbXRrX2Rpc3Bfb3ZsX2NvbXBvbmVu
dF9vcHMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNl
X2lkIG10a19kaXNwX292bF9kcml2ZXJfZHRfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0g
Im1lZGlhdGVrLG10ODE3My1kaXNwLW92bCIsIH0sCisJe30sCit9OworTU9EVUxFX0RFVklDRV9U
QUJMRShvZiwgbXRrX2Rpc3Bfb3ZsX2RyaXZlcl9kdF9tYXRjaCk7CisKK3N0cnVjdCBwbGF0Zm9y
bV9kcml2ZXIgbXRrX2Rpc3Bfb3ZsX2RyaXZlciA9IHsKKwkucHJvYmUJCT0gbXRrX2Rpc3Bfb3Zs
X3Byb2JlLAorCS5yZW1vdmUJCT0gbXRrX2Rpc3Bfb3ZsX3JlbW92ZSwKKwkuZHJpdmVyCQk9IHsK
KwkJLm5hbWUJPSAibWVkaWF0ZWstZGlzcC1vdmwiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwK
KwkJLm9mX21hdGNoX3RhYmxlID0gbXRrX2Rpc3Bfb3ZsX2RyaXZlcl9kdF9tYXRjaCwKKwl9LAor
fTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZGlzcF9yZG1hLmMg
Yi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Rpc3BfcmRtYS5jCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2OGFlODcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJz
L2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Rpc3BfcmRtYS5jCkBAIC0wLDAgKzEsMjQwIEBACisvKgor
ICogQ29weXJpZ2h0IChjKSAyMDE1IE1lZGlhVGVrIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0g
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQor
ICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2
ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGRybS9kcm1QLmg+
CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvY29tcG9uZW50Lmg+Cisj
aW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfaXJxLmg+Cisj
aW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlICJtdGtfZHJtX2Ny
dGMuaCIKKyNpbmNsdWRlICJtdGtfZHJtX2RkcF9jb21wLmgiCisKKyNkZWZpbmUgRElTUF9SRUdf
UkRNQV9JTlRfRU5BQkxFCQkweDAwMDAKKyNkZWZpbmUgRElTUF9SRUdfUkRNQV9JTlRfU1RBVFVT
CQkweDAwMDQKKyNkZWZpbmUgUkRNQV9UQVJHRVRfTElORV9JTlQJCQkJQklUKDUpCisjZGVmaW5l
IFJETUFfRklGT19VTkRFUkZMT1dfSU5UCQkJCUJJVCg0KQorI2RlZmluZSBSRE1BX0VPRl9BQk5P
Uk1BTF9JTlQJCQkJQklUKDMpCisjZGVmaW5lIFJETUFfRlJBTUVfRU5EX0lOVAkJCQlCSVQoMikK
KyNkZWZpbmUgUkRNQV9GUkFNRV9TVEFSVF9JTlQJCQkJQklUKDEpCisjZGVmaW5lIFJETUFfUkVH
X1VQREFURV9JTlQJCQkJQklUKDApCisjZGVmaW5lIERJU1BfUkVHX1JETUFfR0xPQkFMX0NPTgkJ
MHgwMDEwCisjZGVmaW5lIFJETUFfRU5HSU5FX0VOCQkJCQlCSVQoMCkKKyNkZWZpbmUgRElTUF9S
RUdfUkRNQV9TSVpFX0NPTl8wCQkweDAwMTQKKyNkZWZpbmUgRElTUF9SRUdfUkRNQV9TSVpFX0NP
Tl8xCQkweDAwMTgKKyNkZWZpbmUgRElTUF9SRUdfUkRNQV9UQVJHRVRfTElORQkJMHgwMDFjCisj
ZGVmaW5lIERJU1BfUkVHX1JETUFfRklGT19DT04JCQkweDAwNDAKKyNkZWZpbmUgUkRNQV9GSUZP
X1VOREVSRkxPV19FTgkJCQlCSVQoMzEpCisjZGVmaW5lIFJETUFfRklGT19QU0VVRE9fU0laRShi
eXRlcykJCQkoKChieXRlcykgLyAxNikgPDwgMTYpCisjZGVmaW5lIFJETUFfT1VUUFVUX1ZBTElE
X0ZJRk9fVEhSRVNIT0xEKGJ5dGVzKQkJKChieXRlcykgLyAxNikKKworLyoqCisgKiBzdHJ1Y3Qg
bXRrX2Rpc3BfcmRtYSAtIERJU1BfUkRNQSBkcml2ZXIgc3RydWN0dXJlCisgKiBAZGRwX2NvbXAg
LSBzdHJ1Y3R1cmUgY29udGFpbmluZyB0eXBlIGVudW0gYW5kIGhhcmR3YXJlIHJlc291cmNlcwor
ICogQGNydGMgLSBhc3NvY2lhdGVkIGNydGMgdG8gcmVwb3J0IGlycSBldmVudHMgdG8KKyAqLwor
c3RydWN0IG10a19kaXNwX3JkbWEgeworCXN0cnVjdCBtdGtfZGRwX2NvbXAJCWRkcF9jb21wOwor
CXN0cnVjdCBkcm1fY3J0YwkJCSpjcnRjOworfTsKKworc3RhdGljIGlycXJldHVybl90IG10a19k
aXNwX3JkbWFfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBt
dGtfZGlzcF9yZG1hICpwcml2ID0gZGV2X2lkOworCXN0cnVjdCBtdGtfZGRwX2NvbXAgKnJkbWEg
PSAmcHJpdi0+ZGRwX2NvbXA7CisKKwkvKiBDbGVhciBmcmFtZSBjb21wbGV0aW9uIGludGVycnVw
dCAqLworCXdyaXRlbCgweDAsIHJkbWEtPnJlZ3MgKyBESVNQX1JFR19SRE1BX0lOVF9TVEFUVVMp
OworCisJaWYgKCFwcml2LT5jcnRjKQorCQlyZXR1cm4gSVJRX05PTkU7CisKKwltdGtfY3J0Y19k
ZHBfaXJxKHByaXYtPmNydGMsIHJkbWEpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitz
dGF0aWMgdm9pZCByZG1hX3VwZGF0ZV9iaXRzKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAsIHVu
c2lnbmVkIGludCByZWcsCisJCQkgICAgIHVuc2lnbmVkIGludCBtYXNrLCB1bnNpZ25lZCBpbnQg
dmFsKQoreworCXVuc2lnbmVkIGludCB0bXAgPSByZWFkbChjb21wLT5yZWdzICsgcmVnKTsKKwor
CXRtcCA9ICh0bXAgJiB+bWFzaykgfCAodmFsICYgbWFzayk7CisJd3JpdGVsKHRtcCwgY29tcC0+
cmVncyArIHJlZyk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19yZG1hX2VuYWJsZV92Ymxhbmsoc3Ry
dWN0IG10a19kZHBfY29tcCAqY29tcCwKKwkJCQkgICBzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7
CisJc3RydWN0IG10a19kaXNwX3JkbWEgKnByaXYgPSBjb250YWluZXJfb2YoY29tcCwgc3RydWN0
IG10a19kaXNwX3JkbWEsCisJCQkJCQkgIGRkcF9jb21wKTsKKworCXByaXYtPmNydGMgPSBjcnRj
OworCXJkbWFfdXBkYXRlX2JpdHMoY29tcCwgRElTUF9SRUdfUkRNQV9JTlRfRU5BQkxFLCBSRE1B
X0ZSQU1FX0VORF9JTlQsCisJCQkgUkRNQV9GUkFNRV9FTkRfSU5UKTsKK30KKworc3RhdGljIHZv
aWQgbXRrX3JkbWFfZGlzYWJsZV92Ymxhbmsoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCkKK3sK
KwlzdHJ1Y3QgbXRrX2Rpc3BfcmRtYSAqcHJpdiA9IGNvbnRhaW5lcl9vZihjb21wLCBzdHJ1Y3Qg
bXRrX2Rpc3BfcmRtYSwKKwkJCQkJCSAgZGRwX2NvbXApOworCisJcHJpdi0+Y3J0YyA9IE5VTEw7
CisJcmRtYV91cGRhdGVfYml0cyhjb21wLCBESVNQX1JFR19SRE1BX0lOVF9FTkFCTEUsIFJETUFf
RlJBTUVfRU5EX0lOVCwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19yZG1hX3N0YXJ0KHN0cnVj
dCBtdGtfZGRwX2NvbXAgKmNvbXApCit7CisJcmRtYV91cGRhdGVfYml0cyhjb21wLCBESVNQX1JF
R19SRE1BX0dMT0JBTF9DT04sIFJETUFfRU5HSU5FX0VOLAorCQkJIFJETUFfRU5HSU5FX0VOKTsK
K30KKworc3RhdGljIHZvaWQgbXRrX3JkbWFfc3RvcChzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21w
KQoreworCXJkbWFfdXBkYXRlX2JpdHMoY29tcCwgRElTUF9SRUdfUkRNQV9HTE9CQUxfQ09OLCBS
RE1BX0VOR0lORV9FTiwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19yZG1hX2NvbmZpZyhzdHJ1
Y3QgbXRrX2RkcF9jb21wICpjb21wLCB1bnNpZ25lZCB3aWR0aCwKKwkJCSAgICB1bnNpZ25lZCBo
ZWlnaHQsIHVuc2lnbmVkIGludCB2cmVmcmVzaCkKK3sKKwl1bnNpZ25lZCBpbnQgdGhyZXNob2xk
OworCXVuc2lnbmVkIGludCByZWc7CisKKwlyZG1hX3VwZGF0ZV9iaXRzKGNvbXAsIERJU1BfUkVH
X1JETUFfU0laRV9DT05fMCwgMHhmZmYsIHdpZHRoKTsKKwlyZG1hX3VwZGF0ZV9iaXRzKGNvbXAs
IERJU1BfUkVHX1JETUFfU0laRV9DT05fMSwgMHhmZmZmZiwgaGVpZ2h0KTsKKworCS8qCisJICog
RW5hYmxlIEZJRk8gdW5kZXJmbG93IHNpbmNlIERTSSBhbmQgRFBJIGNhbid0IGJlIGJsb2NrZWQu
CisJICogS2VlcCB0aGUgRklGTyBwc2V1ZG8gc2l6ZSByZXNldCBkZWZhdWx0IG9mIDggS2lCLiBT
ZXQgdGhlCisJICogb3V0cHV0IHRocmVzaG9sZCB0byA2IG1pY3Jvc2Vjb25kcyB3aXRoIDcvNiBv
dmVyaGVhZCB0bworCSAqIGFjY291bnQgZm9yIGJsYW5raW5nLCBhbmQgd2l0aCBhIHBpeGVsIGRl
cHRoIG9mIDQgYnl0ZXM6CisJICovCisJdGhyZXNob2xkID0gd2lkdGggKiBoZWlnaHQgKiB2cmVm
cmVzaCAqIDQgKiA3IC8gMTAwMDAwMDsKKwlyZWcgPSBSRE1BX0ZJRk9fVU5ERVJGTE9XX0VOIHwK
KwkgICAgICBSRE1BX0ZJRk9fUFNFVURPX1NJWkUoU1pfOEspIHwKKwkgICAgICBSRE1BX09VVFBV
VF9WQUxJRF9GSUZPX1RIUkVTSE9MRCh0aHJlc2hvbGQpOworCXdyaXRlbChyZWcsIGNvbXAtPnJl
Z3MgKyBESVNQX1JFR19SRE1BX0ZJRk9fQ09OKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBt
dGtfZGRwX2NvbXBfZnVuY3MgbXRrX2Rpc3BfcmRtYV9mdW5jcyA9IHsKKwkuY29uZmlnID0gbXRr
X3JkbWFfY29uZmlnLAorCS5zdGFydCA9IG10a19yZG1hX3N0YXJ0LAorCS5zdG9wID0gbXRrX3Jk
bWFfc3RvcCwKKwkuZW5hYmxlX3ZibGFuayA9IG10a19yZG1hX2VuYWJsZV92YmxhbmssCisJLmRp
c2FibGVfdmJsYW5rID0gbXRrX3JkbWFfZGlzYWJsZV92YmxhbmssCit9OworCitzdGF0aWMgaW50
IG10a19kaXNwX3JkbWFfYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKm1h
c3RlciwKKwkJCSAgICAgIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IG10a19kaXNwX3JkbWEgKnBy
aXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtX2RldiA9
IGRhdGE7CisJaW50IHJldDsKKworCXJldCA9IG10a19kZHBfY29tcF9yZWdpc3Rlcihkcm1fZGV2
LCAmcHJpdi0+ZGRwX2NvbXApOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiRmFp
bGVkIHRvIHJlZ2lzdGVyIGNvbXBvbmVudCAlczogJWRcbiIsCisJCQlkZXYtPm9mX25vZGUtPmZ1
bGxfbmFtZSwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKKworfQorCitz
dGF0aWMgdm9pZCBtdGtfZGlzcF9yZG1hX3VuYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVj
dCBkZXZpY2UgKm1hc3RlciwKKwkJCQkgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgbXRrX2Rpc3Bf
cmRtYSAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBkcm1fZGV2aWNlICpk
cm1fZGV2ID0gZGF0YTsKKworCW10a19kZHBfY29tcF91bnJlZ2lzdGVyKGRybV9kZXYsICZwcml2
LT5kZHBfY29tcCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tcG9uZW50X29wcyBtdGtf
ZGlzcF9yZG1hX2NvbXBvbmVudF9vcHMgPSB7CisJLmJpbmQJPSBtdGtfZGlzcF9yZG1hX2JpbmQs
CisJLnVuYmluZCA9IG10a19kaXNwX3JkbWFfdW5iaW5kLAorfTsKKworc3RhdGljIGludCBtdGtf
ZGlzcF9yZG1hX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0
IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgbXRrX2Rpc3BfcmRtYSAqcHJpdjsK
KwlpbnQgY29tcF9pZDsKKwlpbnQgaXJxOworCWludCByZXQ7CisKKwlwcml2ID0gZGV2bV9remFs
bG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwcml2KQorCQlyZXR1
cm4gLUVOT01FTTsKKworCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKGly
cSA8IDApCisJCXJldHVybiBpcnE7CisKKwljb21wX2lkID0gbXRrX2RkcF9jb21wX2dldF9pZChk
ZXYtPm9mX25vZGUsIE1US19ESVNQX1JETUEpOworCWlmIChjb21wX2lkIDwgMCkgeworCQlkZXZf
ZXJyKGRldiwgIkZhaWxlZCB0byBpZGVudGlmeSBieSBhbGlhczogJWRcbiIsIGNvbXBfaWQpOwor
CQlyZXR1cm4gY29tcF9pZDsKKwl9CisKKwlyZXQgPSBtdGtfZGRwX2NvbXBfaW5pdChkZXYsIGRl
di0+b2Zfbm9kZSwgJnByaXYtPmRkcF9jb21wLCBjb21wX2lkLAorCQkJCSZtdGtfZGlzcF9yZG1h
X2Z1bmNzKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGluaXRpYWxp
emUgY29tcG9uZW50OiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBEaXNh
YmxlIGFuZCBjbGVhciBwZW5kaW5nIGludGVycnVwdHMgKi8KKwl3cml0ZWwoMHgwLCBwcml2LT5k
ZHBfY29tcC5yZWdzICsgRElTUF9SRUdfUkRNQV9JTlRfRU5BQkxFKTsKKwl3cml0ZWwoMHgwLCBw
cml2LT5kZHBfY29tcC5yZWdzICsgRElTUF9SRUdfUkRNQV9JTlRfU1RBVFVTKTsKKworCXJldCA9
IGRldm1fcmVxdWVzdF9pcnEoZGV2LCBpcnEsIG10a19kaXNwX3JkbWFfaXJxX2hhbmRsZXIsCisJ
CQkgICAgICAgSVJRRl9UUklHR0VSX05PTkUsIGRldl9uYW1lKGRldiksIHByaXYpOworCWlmIChy
ZXQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJlcXVlc3QgaXJxICVkOiAlZFxu
IiwgaXJxLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRh
KHBkZXYsIHByaXYpOworCisJcmV0ID0gY29tcG9uZW50X2FkZChkZXYsICZtdGtfZGlzcF9yZG1h
X2NvbXBvbmVudF9vcHMpOworCWlmIChyZXQpCisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGFk
ZCBjb21wb25lbnQ6ICVkXG4iLCByZXQpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlu
dCBtdGtfZGlzcF9yZG1hX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorewor
CWNvbXBvbmVudF9kZWwoJnBkZXYtPmRldiwgJm10a19kaXNwX3JkbWFfY29tcG9uZW50X29wcyk7
CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbXRr
X2Rpc3BfcmRtYV9kcml2ZXJfZHRfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlh
dGVrLG10ODE3My1kaXNwLXJkbWEiLCB9LAorCXt9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUo
b2YsIG10a19kaXNwX3JkbWFfZHJpdmVyX2R0X21hdGNoKTsKKworc3RydWN0IHBsYXRmb3JtX2Ry
aXZlciBtdGtfZGlzcF9yZG1hX2RyaXZlciA9IHsKKwkucHJvYmUJCT0gbXRrX2Rpc3BfcmRtYV9w
cm9iZSwKKwkucmVtb3ZlCQk9IG10a19kaXNwX3JkbWFfcmVtb3ZlLAorCS5kcml2ZXIJCT0gewor
CQkubmFtZQk9ICJtZWRpYXRlay1kaXNwLXJkbWEiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwK
KwkJLm9mX21hdGNoX3RhYmxlID0gbXRrX2Rpc3BfcmRtYV9kcml2ZXJfZHRfbWF0Y2gsCisJfSwK
K307CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9jcnRjLmMg
Yi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9jcnRjLmMKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uNjVhYWJkYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMv
Z3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2NydGMuYwpAQCAtMCwwICsxLDU4MCBAQAorLyoKKyAq
IENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAq
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVy
c2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4K
KyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxhc20vYmFycmllci5o
PgorI2luY2x1ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVy
Lmg+CisjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1f
cGxhbmVfaGVscGVyLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgv
cG1fcnVudGltZS5oPgorI2luY2x1ZGUgPHNvYy9tZWRpYXRlay9zbWkuaD4KKworI2luY2x1ZGUg
Im10a19kcm1fZHJ2LmgiCisjaW5jbHVkZSAibXRrX2RybV9jcnRjLmgiCisjaW5jbHVkZSAibXRr
X2RybV9kZHAuaCIKKyNpbmNsdWRlICJtdGtfZHJtX2RkcF9jb21wLmgiCisjaW5jbHVkZSAibXRr
X2RybV9nZW0uaCIKKyNpbmNsdWRlICJtdGtfZHJtX3BsYW5lLmgiCisKKy8qKgorICogc3RydWN0
IG10a19kcm1fY3J0YyAtIE1lZGlhVGVrIHNwZWNpZmljIGNydGMgc3RydWN0dXJlLgorICogQGJh
c2U6IGNydGMgb2JqZWN0LgorICogQGVuYWJsZWQ6IHJlY29yZHMgd2hldGhlciBjcnRjX2VuYWJs
ZSBzdWNjZWVkZWQKKyAqIEBwbGFuZXM6IGFycmF5IG9mIDQgbXRrX2RybV9wbGFuZSBzdHJ1Y3R1
cmVzLCBvbmUgZm9yIGVhY2ggb3ZlcmxheSBwbGFuZQorICogQHBlbmRpbmdfcGxhbmVzOiB3aGV0
aGVyIGFueSBwbGFuZSBoYXMgcGVuZGluZyBjaGFuZ2VzIHRvIGJlIGFwcGxpZWQKKyAqIEBjb25m
aWdfcmVnczogbWVtb3J5IG1hcHBlZCBtbXN5cyBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIHNwYWNl
CisgKiBAbXV0ZXg6IGhhbmRsZSB0byBvbmUgb2YgdGhlIHRlbiBkaXNwX211dGV4IHN0cmVhbXMK
KyAqIEBkZHBfY29tcF9ucjogbnVtYmVyIG9mIGNvbXBvbmVudHMgaW4gZGRwX2NvbXAKKyAqIEBk
ZHBfY29tcDogYXJyYXkgb2YgcG9pbnRlcnMgdGhlIG10a19kZHBfY29tcCBzdHJ1Y3R1cmVzIHVz
ZWQgYnkgdGhpcyBjcnRjCisgKi8KK3N0cnVjdCBtdGtfZHJtX2NydGMgeworCXN0cnVjdCBkcm1f
Y3J0YwkJCWJhc2U7CisJYm9vbAkJCQllbmFibGVkOworCisJYm9vbAkJCQlwZW5kaW5nX25lZWRz
X3ZibGFuazsKKwlzdHJ1Y3QgZHJtX3BlbmRpbmdfdmJsYW5rX2V2ZW50CSpldmVudDsKKworCXN0
cnVjdCBtdGtfZHJtX3BsYW5lCQlwbGFuZXNbT1ZMX0xBWUVSX05SXTsKKwlib29sCQkJCXBlbmRp
bmdfcGxhbmVzOworCisJdm9pZCBfX2lvbWVtCQkJKmNvbmZpZ19yZWdzOworCXN0cnVjdCBtdGtf
ZGlzcF9tdXRleAkJKm11dGV4OworCXVuc2lnbmVkIGludAkJCWRkcF9jb21wX25yOworCXN0cnVj
dCBtdGtfZGRwX2NvbXAJCSoqZGRwX2NvbXA7Cit9OworCitzdHJ1Y3QgbXRrX2NydGNfc3RhdGUg
eworCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZQkJYmFzZTsKKworCWJvb2wJCQkJcGVuZGluZ19jb25m
aWc7CisJdW5zaWduZWQgaW50CQkJcGVuZGluZ193aWR0aDsKKwl1bnNpZ25lZCBpbnQJCQlwZW5k
aW5nX2hlaWdodDsKKwl1bnNpZ25lZCBpbnQJCQlwZW5kaW5nX3ZyZWZyZXNoOworfTsKKworc3Rh
dGljIGlubGluZSBzdHJ1Y3QgbXRrX2RybV9jcnRjICp0b19tdGtfY3J0YyhzdHJ1Y3QgZHJtX2Ny
dGMgKmMpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihjLCBzdHJ1Y3QgbXRrX2RybV9jcnRjLCBi
YXNlKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbXRrX2NydGNfc3RhdGUgKnRvX210a19j
cnRjX3N0YXRlKHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqcykKK3sKKwlyZXR1cm4gY29udGFpbmVy
X29mKHMsIHN0cnVjdCBtdGtfY3J0Y19zdGF0ZSwgYmFzZSk7Cit9CisKK3N0YXRpYyB2b2lkIG10
a19kcm1fY3J0Y19maW5pc2hfcGFnZV9mbGlwKHN0cnVjdCBtdGtfZHJtX2NydGMgKm10a19jcnRj
KQoreworCXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9ICZtdGtfY3J0Yy0+YmFzZTsKKwl1bnNpZ25l
ZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNydGMtPmRldi0+ZXZlbnRfbG9j
aywgZmxhZ3MpOworCWRybV9zZW5kX3ZibGFua19ldmVudChjcnRjLT5kZXYsIG10a19jcnRjLT5l
dmVudC0+cGlwZSwgbXRrX2NydGMtPmV2ZW50KTsKKwlkcm1fY3J0Y192YmxhbmtfcHV0KGNydGMp
OworCW10a19jcnRjLT5ldmVudCA9IE5VTEw7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3J0
Yy0+ZGV2LT5ldmVudF9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcm1fZmlu
aXNoX3BhZ2VfZmxpcChzdHJ1Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0YykKK3sKKwlkcm1fY3J0
Y19oYW5kbGVfdmJsYW5rKCZtdGtfY3J0Yy0+YmFzZSk7CisJaWYgKG10a19jcnRjLT5wZW5kaW5n
X25lZWRzX3ZibGFuaykgeworCQltdGtfZHJtX2NydGNfZmluaXNoX3BhZ2VfZmxpcChtdGtfY3J0
Yyk7CisJCW10a19jcnRjLT5wZW5kaW5nX25lZWRzX3ZibGFuayA9IGZhbHNlOworCX0KK30KKwor
c3RhdGljIHZvaWQgbXRrX2RybV9jcnRjX2Rlc3Ryb3koc3RydWN0IGRybV9jcnRjICpjcnRjKQor
eworCXN0cnVjdCBtdGtfZHJtX2NydGMgKm10a19jcnRjID0gdG9fbXRrX2NydGMoY3J0Yyk7CisJ
aW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbXRrX2NydGMtPmRkcF9jb21wX25yOyBpKyspCisJ
CWNsa191bnByZXBhcmUobXRrX2NydGMtPmRkcF9jb21wW2ldLT5jbGspOworCisJbXRrX2Rpc3Bf
bXV0ZXhfcHV0KG10a19jcnRjLT5tdXRleCk7CisKKwlkcm1fY3J0Y19jbGVhbnVwKGNydGMpOwor
fQorCitzdGF0aWMgdm9pZCBtdGtfZHJtX2NydGNfcmVzZXQoc3RydWN0IGRybV9jcnRjICpjcnRj
KQoreworCXN0cnVjdCBtdGtfY3J0Y19zdGF0ZSAqc3RhdGU7CisKKwlpZiAoY3J0Yy0+c3RhdGUp
IHsKKwkJaWYgKGNydGMtPnN0YXRlLT5tb2RlX2Jsb2IpCisJCQlkcm1fcHJvcGVydHlfdW5yZWZl
cmVuY2VfYmxvYihjcnRjLT5zdGF0ZS0+bW9kZV9ibG9iKTsKKworCQlzdGF0ZSA9IHRvX210a19j
cnRjX3N0YXRlKGNydGMtPnN0YXRlKTsKKwkJbWVtc2V0KHN0YXRlLCAwLCBzaXplb2YoKnN0YXRl
KSk7CisJfSBlbHNlIHsKKwkJc3RhdGUgPSBremFsbG9jKHNpemVvZigqc3RhdGUpLCBHRlBfS0VS
TkVMKTsKKwkJaWYgKCFzdGF0ZSkKKwkJCXJldHVybjsKKwkJY3J0Yy0+c3RhdGUgPSAmc3RhdGUt
PmJhc2U7CisJfQorCisJc3RhdGUtPmJhc2UuY3J0YyA9IGNydGM7Cit9CisKK3N0YXRpYyBzdHJ1
Y3QgZHJtX2NydGNfc3RhdGUgKm10a19kcm1fY3J0Y19kdXBsaWNhdGVfc3RhdGUoc3RydWN0IGRy
bV9jcnRjICpjcnRjKQoreworCXN0cnVjdCBtdGtfY3J0Y19zdGF0ZSAqc3RhdGU7CisKKwlzdGF0
ZSA9IGt6YWxsb2Moc2l6ZW9mKCpzdGF0ZSksIEdGUF9LRVJORUwpOworCWlmICghc3RhdGUpCisJ
CXJldHVybiBOVUxMOworCisJX19kcm1fYXRvbWljX2hlbHBlcl9jcnRjX2R1cGxpY2F0ZV9zdGF0
ZShjcnRjLCAmc3RhdGUtPmJhc2UpOworCisJV0FSTl9PTihzdGF0ZS0+YmFzZS5jcnRjICE9IGNy
dGMpOworCXN0YXRlLT5iYXNlLmNydGMgPSBjcnRjOworCisJcmV0dXJuICZzdGF0ZS0+YmFzZTsK
K30KKworc3RhdGljIHZvaWQgbXRrX2RybV9jcnRjX2Rlc3Ryb3lfc3RhdGUoc3RydWN0IGRybV9j
cnRjICpjcnRjLAorCQkJCSAgICAgICBzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKnN0YXRlKQorewor
CV9fZHJtX2F0b21pY19oZWxwZXJfY3J0Y19kZXN0cm95X3N0YXRlKGNydGMsIHN0YXRlKTsKKwlr
ZnJlZSh0b19tdGtfY3J0Y19zdGF0ZShzdGF0ZSkpOworfQorCitzdGF0aWMgYm9vbCBtdGtfZHJt
X2NydGNfbW9kZV9maXh1cChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCisJCQkJICAgIGNvbnN0IHN0
cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAorCQkJCSAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlf
bW9kZSAqYWRqdXN0ZWRfbW9kZSkKK3sKKwkvKiBOb3RoaW5nIHRvIGRvIGhlcmUsIGJ1dCB0aGlz
IGNhbGxiYWNrIGlzIG1hbmRhdG9yeS4gKi8KKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHZv
aWQgbXRrX2RybV9jcnRjX21vZGVfc2V0X25vZmIoc3RydWN0IGRybV9jcnRjICpjcnRjKQorewor
CXN0cnVjdCBtdGtfY3J0Y19zdGF0ZSAqc3RhdGUgPSB0b19tdGtfY3J0Y19zdGF0ZShjcnRjLT5z
dGF0ZSk7CisKKwlzdGF0ZS0+cGVuZGluZ193aWR0aCA9IGNydGMtPm1vZGUuaGRpc3BsYXk7CisJ
c3RhdGUtPnBlbmRpbmdfaGVpZ2h0ID0gY3J0Yy0+bW9kZS52ZGlzcGxheTsKKwlzdGF0ZS0+cGVu
ZGluZ192cmVmcmVzaCA9IGNydGMtPm1vZGUudnJlZnJlc2g7CisJd21iKCk7CS8qIE1ha2Ugc3Vy
ZSB0aGUgYWJvdmUgcGFyYW1ldGVycyBhcmUgc2V0IGJlZm9yZSB1cGRhdGUgKi8KKwlzdGF0ZS0+
cGVuZGluZ19jb25maWcgPSB0cnVlOworfQorCitpbnQgbXRrX2RybV9jcnRjX2VuYWJsZV92Ymxh
bmsoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgdW5zaWduZWQgaW50IHBpcGUpCit7CisJc3RydWN0
IG10a19kcm1fcHJpdmF0ZSAqcHJpdiA9IGRybS0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IG10a19k
cm1fY3J0YyAqbXRrX2NydGMgPSB0b19tdGtfY3J0Yyhwcml2LT5jcnRjW3BpcGVdKTsKKwlzdHJ1
Y3QgbXRrX2RkcF9jb21wICpvdmwgPSBtdGtfY3J0Yy0+ZGRwX2NvbXBbMF07CisKKwltdGtfZGRw
X2NvbXBfZW5hYmxlX3ZibGFuayhvdmwsICZtdGtfY3J0Yy0+YmFzZSk7CisKKwlyZXR1cm4gMDsK
K30KKwordm9pZCBtdGtfZHJtX2NydGNfZGlzYWJsZV92Ymxhbmsoc3RydWN0IGRybV9kZXZpY2Ug
KmRybSwgdW5zaWduZWQgaW50IHBpcGUpCit7CisJc3RydWN0IG10a19kcm1fcHJpdmF0ZSAqcHJp
diA9IGRybS0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IG10a19kcm1fY3J0YyAqbXRrX2NydGMgPSB0
b19tdGtfY3J0Yyhwcml2LT5jcnRjW3BpcGVdKTsKKwlzdHJ1Y3QgbXRrX2RkcF9jb21wICpvdmwg
PSBtdGtfY3J0Yy0+ZGRwX2NvbXBbMF07CisKKwltdGtfZGRwX2NvbXBfZGlzYWJsZV92Ymxhbmso
b3ZsKTsKK30KKworc3RhdGljIGludCBtdGtfY3J0Y19kZHBfY2xrX2VuYWJsZShzdHJ1Y3QgbXRr
X2RybV9jcnRjICptdGtfY3J0YykKK3sKKwlpbnQgcmV0OworCWludCBpOworCisJRFJNX0RFQlVH
X0RSSVZFUigiJXNcbiIsIF9fZnVuY19fKTsKKwlmb3IgKGkgPSAwOyBpIDwgbXRrX2NydGMtPmRk
cF9jb21wX25yOyBpKyspIHsKKwkJcmV0ID0gY2xrX2VuYWJsZShtdGtfY3J0Yy0+ZGRwX2NvbXBb
aV0tPmNsayk7CisJCWlmIChyZXQpIHsKKwkJCURSTV9FUlJPUigiRmFpbGVkIHRvIGVuYWJsZSBj
bG9jayAlZDogJWRcbiIsIGksIHJldCk7CisJCQlnb3RvIGVycjsKKwkJfQorCX0KKworCXJldHVy
biAwOworZXJyOgorCXdoaWxlICgtLWkgPj0gMCkKKwkJY2xrX2Rpc2FibGUobXRrX2NydGMtPmRk
cF9jb21wW2ldLT5jbGspOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIG10a19jcnRj
X2RkcF9jbGtfZGlzYWJsZShzdHJ1Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0YykKK3sKKwlpbnQg
aTsKKworCURSTV9ERUJVR19EUklWRVIoIiVzXG4iLCBfX2Z1bmNfXyk7CisJZm9yIChpID0gMDsg
aSA8IG10a19jcnRjLT5kZHBfY29tcF9ucjsgaSsrKQorCQljbGtfZGlzYWJsZShtdGtfY3J0Yy0+
ZGRwX2NvbXBbaV0tPmNsayk7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2NydGNfZGRwX2h3X2luaXQo
c3RydWN0IG10a19kcm1fY3J0YyAqbXRrX2NydGMpCit7CisJc3RydWN0IGRybV9jcnRjICpjcnRj
ID0gJm10a19jcnRjLT5iYXNlOworCXVuc2lnbmVkIGludCB3aWR0aCwgaGVpZ2h0LCB2cmVmcmVz
aDsKKwlpbnQgcmV0OworCWludCBpOworCisJRFJNX0RFQlVHX0RSSVZFUigiJXNcbiIsIF9fZnVu
Y19fKTsKKwlpZiAoV0FSTl9PTighY3J0Yy0+c3RhdGUpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwor
CXdpZHRoID0gY3J0Yy0+c3RhdGUtPmFkanVzdGVkX21vZGUuaGRpc3BsYXk7CisJaGVpZ2h0ID0g
Y3J0Yy0+c3RhdGUtPmFkanVzdGVkX21vZGUudmRpc3BsYXk7CisJdnJlZnJlc2ggPSBjcnRjLT5z
dGF0ZS0+YWRqdXN0ZWRfbW9kZS52cmVmcmVzaDsKKworCXJldCA9IHBtX3J1bnRpbWVfZ2V0X3N5
bmMoY3J0Yy0+ZGV2LT5kZXYpOworCWlmIChyZXQgPCAwKSB7CisJCURSTV9FUlJPUigiRmFpbGVk
IHRvIGVuYWJsZSBwb3dlciBkb21haW46ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0K
KworCXJldCA9IG10a19kaXNwX211dGV4X3ByZXBhcmUobXRrX2NydGMtPm11dGV4KTsKKwlpZiAo
cmV0IDwgMCkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBlbmFibGUgbXV0ZXggY2xvY2s6ICVk
XG4iLCByZXQpOworCQlnb3RvIGVycl9wbV9ydW50aW1lX3B1dDsKKwl9CisKKwlyZXQgPSBtdGtf
Y3J0Y19kZHBfY2xrX2VuYWJsZShtdGtfY3J0Yyk7CisJaWYgKHJldCA8IDApIHsKKwkJRFJNX0VS
Uk9SKCJGYWlsZWQgdG8gZW5hYmxlIGNvbXBvbmVudCBjbG9ja3M6ICVkXG4iLCByZXQpOworCQln
b3RvIGVycl9tdXRleF91bnByZXBhcmU7CisJfQorCisJRFJNX0RFQlVHX0RSSVZFUigibWVkaWF0
ZWtfZGRwX2RkcF9wYXRoX3NldHVwXG4iKTsKKwlmb3IgKGkgPSAwOyBpIDwgbXRrX2NydGMtPmRk
cF9jb21wX25yIC0gMTsgaSsrKSB7CisJCW10a19kZHBfYWRkX2NvbXBfdG9fcGF0aChtdGtfY3J0
Yy0+Y29uZmlnX3JlZ3MsCisJCQkJCSBtdGtfY3J0Yy0+ZGRwX2NvbXBbaV0tPmlkLAorCQkJCQkg
bXRrX2NydGMtPmRkcF9jb21wW2kgKyAxXS0+aWQpOworCQltdGtfZGlzcF9tdXRleF9hZGRfY29t
cChtdGtfY3J0Yy0+bXV0ZXgsCisJCQkJCW10a19jcnRjLT5kZHBfY29tcFtpXS0+aWQpOworCX0K
KwltdGtfZGlzcF9tdXRleF9hZGRfY29tcChtdGtfY3J0Yy0+bXV0ZXgsIG10a19jcnRjLT5kZHBf
Y29tcFtpXS0+aWQpOworCW10a19kaXNwX211dGV4X2VuYWJsZShtdGtfY3J0Yy0+bXV0ZXgpOwor
CisJZm9yIChpID0gMDsgaSA8IG10a19jcnRjLT5kZHBfY29tcF9ucjsgaSsrKSB7CisJCXN0cnVj
dCBtdGtfZGRwX2NvbXAgKmNvbXAgPSBtdGtfY3J0Yy0+ZGRwX2NvbXBbaV07CisKKwkJbXRrX2Rk
cF9jb21wX2NvbmZpZyhjb21wLCB3aWR0aCwgaGVpZ2h0LCB2cmVmcmVzaCk7CisJCW10a19kZHBf
Y29tcF9zdGFydChjb21wKTsKKwl9CisKKwkvKiBJbml0aWFsbHkgZGlzYWJsZSBhbGwgcGxhbmVz
LCBrZWVwIHRoZSBwZW5kaW5nIHBsYW5lIHN0YXRlICovCisJZm9yIChpID0gMDsgaSA8IE9WTF9M
QVlFUl9OUjsgaSsrKSB7CisJCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lID0gJm10a19jcnRjLT5w
bGFuZXNbaV0uYmFzZTsKKwkJc3RydWN0IG10a19wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGU7CisJ
CWJvb2wgZW5hYmxlOworCisJCXBsYW5lX3N0YXRlID0gdG9fbXRrX3BsYW5lX3N0YXRlKHBsYW5l
LT5zdGF0ZSk7CisJCWVuYWJsZSA9IHBsYW5lX3N0YXRlLT5wZW5kaW5nLmVuYWJsZTsKKwkJcGxh
bmVfc3RhdGUtPnBlbmRpbmcuZW5hYmxlID0gZmFsc2U7CisJCW10a19kZHBfY29tcF9sYXllcl9j
b25maWcobXRrX2NydGMtPmRkcF9jb21wWzBdLCBpLAorCQkJCQkgIHBsYW5lX3N0YXRlKTsKKwkJ
cGxhbmVfc3RhdGUtPnBlbmRpbmcuZW5hYmxlID0gZW5hYmxlOworCX0KKworCXJldHVybiAwOwor
CitlcnJfbXV0ZXhfdW5wcmVwYXJlOgorCW10a19kaXNwX211dGV4X3VucHJlcGFyZShtdGtfY3J0
Yy0+bXV0ZXgpOworZXJyX3BtX3J1bnRpbWVfcHV0OgorCXBtX3J1bnRpbWVfcHV0KGNydGMtPmRl
di0+ZGV2KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBtdGtfY3J0Y19kZHBfaHdf
ZmluaShzdHJ1Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0YykKK3sKKwlzdHJ1Y3QgZHJtX2Rldmlj
ZSAqZHJtID0gbXRrX2NydGMtPmJhc2UuZGV2OworCWludCBpOworCisJRFJNX0RFQlVHX0RSSVZF
UigiJXNcbiIsIF9fZnVuY19fKTsKKwlmb3IgKGkgPSAwOyBpIDwgbXRrX2NydGMtPmRkcF9jb21w
X25yOyBpKyspCisJCW10a19kZHBfY29tcF9zdG9wKG10a19jcnRjLT5kZHBfY29tcFtpXSk7CisJ
Zm9yIChpID0gMDsgaSA8IG10a19jcnRjLT5kZHBfY29tcF9ucjsgaSsrKQorCQltdGtfZGlzcF9t
dXRleF9yZW1vdmVfY29tcChtdGtfY3J0Yy0+bXV0ZXgsCisJCQkJCSAgIG10a19jcnRjLT5kZHBf
Y29tcFtpXS0+aWQpOworCW10a19kaXNwX211dGV4X2Rpc2FibGUobXRrX2NydGMtPm11dGV4KTsK
Kwlmb3IgKGkgPSAwOyBpIDwgbXRrX2NydGMtPmRkcF9jb21wX25yIC0gMTsgaSsrKSB7CisJCW10
a19kZHBfcmVtb3ZlX2NvbXBfZnJvbV9wYXRoKG10a19jcnRjLT5jb25maWdfcmVncywKKwkJCQkJ
ICAgICAgbXRrX2NydGMtPmRkcF9jb21wW2ldLT5pZCwKKwkJCQkJICAgICAgbXRrX2NydGMtPmRk
cF9jb21wW2kgKyAxXS0+aWQpOworCQltdGtfZGlzcF9tdXRleF9yZW1vdmVfY29tcChtdGtfY3J0
Yy0+bXV0ZXgsCisJCQkJCSAgIG10a19jcnRjLT5kZHBfY29tcFtpXS0+aWQpOworCX0KKwltdGtf
ZGlzcF9tdXRleF9yZW1vdmVfY29tcChtdGtfY3J0Yy0+bXV0ZXgsIG10a19jcnRjLT5kZHBfY29t
cFtpXS0+aWQpOworCW10a19jcnRjX2RkcF9jbGtfZGlzYWJsZShtdGtfY3J0Yyk7CisJbXRrX2Rp
c3BfbXV0ZXhfdW5wcmVwYXJlKG10a19jcnRjLT5tdXRleCk7CisKKwlwbV9ydW50aW1lX3B1dChk
cm0tPmRldik7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcm1fY3J0Y19lbmFibGUoc3RydWN0IGRy
bV9jcnRjICpjcnRjKQoreworCXN0cnVjdCBtdGtfZHJtX2NydGMgKm10a19jcnRjID0gdG9fbXRr
X2NydGMoY3J0Yyk7CisJc3RydWN0IG10a19kZHBfY29tcCAqb3ZsID0gbXRrX2NydGMtPmRkcF9j
b21wWzBdOworCWludCByZXQ7CisKKwlEUk1fREVCVUdfRFJJVkVSKCIlcyAlZFxuIiwgX19mdW5j
X18sIGNydGMtPmJhc2UuaWQpOworCisJcmV0ID0gbXRrX3NtaV9sYXJiX2dldChvdmwtPmxhcmJf
ZGV2KTsKKwlpZiAocmV0KSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIGdldCBsYXJiOiAlZFxu
IiwgcmV0KTsKKwkJcmV0dXJuOworCX0KKworCXJldCA9IG10a19jcnRjX2RkcF9od19pbml0KG10
a19jcnRjKTsKKwlpZiAocmV0KSB7CisJCW10a19zbWlfbGFyYl9wdXQob3ZsLT5sYXJiX2Rldik7
CisJCXJldHVybjsKKwl9CisKKwlkcm1fY3J0Y192Ymxhbmtfb24oY3J0Yyk7CisJbXRrX2NydGMt
PmVuYWJsZWQgPSB0cnVlOworfQorCitzdGF0aWMgdm9pZCBtdGtfZHJtX2NydGNfZGlzYWJsZShz
dHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0IG10a19kcm1fY3J0YyAqbXRrX2NydGMg
PSB0b19tdGtfY3J0YyhjcnRjKTsKKwlzdHJ1Y3QgbXRrX2RkcF9jb21wICpvdmwgPSBtdGtfY3J0
Yy0+ZGRwX2NvbXBbMF07CisJaW50IGk7CisKKwlEUk1fREVCVUdfRFJJVkVSKCIlcyAlZFxuIiwg
X19mdW5jX18sIGNydGMtPmJhc2UuaWQpOworCWlmIChXQVJOX09OKCFtdGtfY3J0Yy0+ZW5hYmxl
ZCkpCisJCXJldHVybjsKKworCS8qIFNldCBhbGwgcGVuZGluZyBwbGFuZSBzdGF0ZSB0byBkaXNh
YmxlZCAqLworCWZvciAoaSA9IDA7IGkgPCBPVkxfTEFZRVJfTlI7IGkrKykgeworCQlzdHJ1Y3Qg
ZHJtX3BsYW5lICpwbGFuZSA9ICZtdGtfY3J0Yy0+cGxhbmVzW2ldLmJhc2U7CisJCXN0cnVjdCBt
dGtfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlOworCisJCXBsYW5lX3N0YXRlID0gdG9fbXRrX3Bs
YW5lX3N0YXRlKHBsYW5lLT5zdGF0ZSk7CisJCXBsYW5lX3N0YXRlLT5wZW5kaW5nLmVuYWJsZSA9
IGZhbHNlOworCQlwbGFuZV9zdGF0ZS0+cGVuZGluZy5jb25maWcgPSB0cnVlOworCX0KKwltdGtf
Y3J0Yy0+cGVuZGluZ19wbGFuZXMgPSB0cnVlOworCisJLyogV2FpdCBmb3IgcGxhbmVzIHRvIGJl
IGRpc2FibGVkICovCisJZHJtX2NydGNfd2FpdF9vbmVfdmJsYW5rKGNydGMpOworCisJZHJtX2Ny
dGNfdmJsYW5rX29mZihjcnRjKTsKKwltdGtfY3J0Y19kZHBfaHdfZmluaShtdGtfY3J0Yyk7CisJ
bXRrX3NtaV9sYXJiX3B1dChvdmwtPmxhcmJfZGV2KTsKKworCW10a19jcnRjLT5lbmFibGVkID0g
ZmFsc2U7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcm1fY3J0Y19hdG9taWNfYmVnaW4oc3RydWN0
IGRybV9jcnRjICpjcnRjLAorCQkJCSAgICAgIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqb2xkX2Ny
dGNfc3RhdGUpCit7CisJc3RydWN0IG10a19jcnRjX3N0YXRlICpzdGF0ZSA9IHRvX210a19jcnRj
X3N0YXRlKGNydGMtPnN0YXRlKTsKKwlzdHJ1Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0YyA9IHRv
X210a19jcnRjKGNydGMpOworCisJaWYgKG10a19jcnRjLT5ldmVudCAmJiBzdGF0ZS0+YmFzZS5l
dmVudCkKKwkJRFJNX0VSUk9SKCJuZXcgZXZlbnQgd2hpbGUgdGhlcmUgaXMgc3RpbGwgYSBwZW5k
aW5nIGV2ZW50XG4iKTsKKworCWlmIChzdGF0ZS0+YmFzZS5ldmVudCkgeworCQlzdGF0ZS0+YmFz
ZS5ldmVudC0+cGlwZSA9IGRybV9jcnRjX2luZGV4KGNydGMpOworCQlXQVJOX09OKGRybV9jcnRj
X3ZibGFua19nZXQoY3J0YykgIT0gMCk7CisJCW10a19jcnRjLT5ldmVudCA9IHN0YXRlLT5iYXNl
LmV2ZW50OworCQlzdGF0ZS0+YmFzZS5ldmVudCA9IE5VTEw7CisJfQorfQorCitzdGF0aWMgdm9p
ZCBtdGtfZHJtX2NydGNfYXRvbWljX2ZsdXNoKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKKwkJCQkg
ICAgICBzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKm9sZF9jcnRjX3N0YXRlKQoreworCXN0cnVjdCBt
dGtfZHJtX2NydGMgKm10a19jcnRjID0gdG9fbXRrX2NydGMoY3J0Yyk7CisJdW5zaWduZWQgaW50
IHBlbmRpbmdfcGxhbmVzID0gMDsKKwlpbnQgaTsKKworCWlmIChtdGtfY3J0Yy0+ZXZlbnQpCisJ
CW10a19jcnRjLT5wZW5kaW5nX25lZWRzX3ZibGFuayA9IHRydWU7CisJZm9yIChpID0gMDsgaSA8
IE9WTF9MQVlFUl9OUjsgaSsrKSB7CisJCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lID0gJm10a19j
cnRjLT5wbGFuZXNbaV0uYmFzZTsKKwkJc3RydWN0IG10a19wbGFuZV9zdGF0ZSAqcGxhbmVfc3Rh
dGU7CisKKwkJcGxhbmVfc3RhdGUgPSB0b19tdGtfcGxhbmVfc3RhdGUocGxhbmUtPnN0YXRlKTsK
KwkJaWYgKHBsYW5lX3N0YXRlLT5wZW5kaW5nLmRpcnR5KSB7CisJCQlwbGFuZV9zdGF0ZS0+cGVu
ZGluZy5jb25maWcgPSB0cnVlOworCQkJcGxhbmVfc3RhdGUtPnBlbmRpbmcuZGlydHkgPSBmYWxz
ZTsKKwkJCXBlbmRpbmdfcGxhbmVzIHw9IEJJVChpKTsKKwkJfQorCX0KKwlpZiAocGVuZGluZ19w
bGFuZXMpCisJCW10a19jcnRjLT5wZW5kaW5nX3BsYW5lcyA9IHRydWU7Cit9CisKK3N0YXRpYyBj
b25zdCBzdHJ1Y3QgZHJtX2NydGNfZnVuY3MgbXRrX2NydGNfZnVuY3MgPSB7CisJLnNldF9jb25m
aWcJCT0gZHJtX2F0b21pY19oZWxwZXJfc2V0X2NvbmZpZywKKwkucGFnZV9mbGlwCQk9IGRybV9h
dG9taWNfaGVscGVyX3BhZ2VfZmxpcCwKKwkuZGVzdHJveQkJPSBtdGtfZHJtX2NydGNfZGVzdHJv
eSwKKwkucmVzZXQJCQk9IG10a19kcm1fY3J0Y19yZXNldCwKKwkuYXRvbWljX2R1cGxpY2F0ZV9z
dGF0ZQk9IG10a19kcm1fY3J0Y19kdXBsaWNhdGVfc3RhdGUsCisJLmF0b21pY19kZXN0cm95X3N0
YXRlCT0gbXRrX2RybV9jcnRjX2Rlc3Ryb3lfc3RhdGUsCit9OworCitzdGF0aWMgY29uc3Qgc3Ry
dWN0IGRybV9jcnRjX2hlbHBlcl9mdW5jcyBtdGtfY3J0Y19oZWxwZXJfZnVuY3MgPSB7CisJLm1v
ZGVfZml4dXAJPSBtdGtfZHJtX2NydGNfbW9kZV9maXh1cCwKKwkubW9kZV9zZXRfbm9mYgk9IG10
a19kcm1fY3J0Y19tb2RlX3NldF9ub2ZiLAorCS5lbmFibGUJCT0gbXRrX2RybV9jcnRjX2VuYWJs
ZSwKKwkuZGlzYWJsZQk9IG10a19kcm1fY3J0Y19kaXNhYmxlLAorCS5hdG9taWNfYmVnaW4JPSBt
dGtfZHJtX2NydGNfYXRvbWljX2JlZ2luLAorCS5hdG9taWNfZmx1c2gJPSBtdGtfZHJtX2NydGNf
YXRvbWljX2ZsdXNoLAorfTsKKworc3RhdGljIGludCBtdGtfZHJtX2NydGNfaW5pdChzdHJ1Y3Qg
ZHJtX2RldmljZSAqZHJtLAorCQkJICAgICBzdHJ1Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0YywK
KwkJCSAgICAgc3RydWN0IGRybV9wbGFuZSAqcHJpbWFyeSwKKwkJCSAgICAgc3RydWN0IGRybV9w
bGFuZSAqY3Vyc29yLCB1bnNpZ25lZCBpbnQgcGlwZSkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0g
ZHJtX2NydGNfaW5pdF93aXRoX3BsYW5lcyhkcm0sICZtdGtfY3J0Yy0+YmFzZSwgcHJpbWFyeSwg
Y3Vyc29yLAorCQkJCQkmbXRrX2NydGNfZnVuY3MsIE5VTEwpOworCWlmIChyZXQpCisJCWdvdG8g
ZXJyX2NsZWFudXBfY3J0YzsKKworCWRybV9jcnRjX2hlbHBlcl9hZGQoJm10a19jcnRjLT5iYXNl
LCAmbXRrX2NydGNfaGVscGVyX2Z1bmNzKTsKKworCXJldHVybiAwOworCitlcnJfY2xlYW51cF9j
cnRjOgorCWRybV9jcnRjX2NsZWFudXAoJm10a19jcnRjLT5iYXNlKTsKKwlyZXR1cm4gcmV0Owor
fQorCit2b2lkIG10a19jcnRjX2RkcF9pcnEoc3RydWN0IGRybV9jcnRjICpjcnRjLCBzdHJ1Y3Qg
bXRrX2RkcF9jb21wICpvdmwpCit7CisJc3RydWN0IG10a19kcm1fY3J0YyAqbXRrX2NydGMgPSB0
b19tdGtfY3J0YyhjcnRjKTsKKwlzdHJ1Y3QgbXRrX2NydGNfc3RhdGUgKnN0YXRlID0gdG9fbXRr
X2NydGNfc3RhdGUobXRrX2NydGMtPmJhc2Uuc3RhdGUpOworCXVuc2lnbmVkIGludCBpOworCisJ
LyoKKwkgKiBUT0RPOiBpbnN0ZWFkIG9mIHVwZGF0aW5nIHRoZSByZWdpc3RlcnMgaGVyZSwgd2Ug
c2hvdWxkIHByZXBhcmUKKwkgKiB3b3JraW5nIHJlZ2lzdGVycyBpbiBhdG9taWNfY29tbWl0IGFu
ZCBsZXQgdGhlIGhhcmR3YXJlIGNvbW1hbmQKKwkgKiBxdWV1ZSB1cGRhdGUgbW9kdWxlIHJlZ2lz
dGVycyBvbiB2YmxhbmsuCisJICovCisJaWYgKHN0YXRlLT5wZW5kaW5nX2NvbmZpZykgeworCQlt
dGtfZGRwX2NvbXBfY29uZmlnKG92bCwgc3RhdGUtPnBlbmRpbmdfd2lkdGgsCisJCQkJICAgIHN0
YXRlLT5wZW5kaW5nX2hlaWdodCwKKwkJCQkgICAgc3RhdGUtPnBlbmRpbmdfdnJlZnJlc2gpOwor
CisJCXN0YXRlLT5wZW5kaW5nX2NvbmZpZyA9IGZhbHNlOworCX0KKworCWlmIChtdGtfY3J0Yy0+
cGVuZGluZ19wbGFuZXMpIHsKKwkJZm9yIChpID0gMDsgaSA8IE9WTF9MQVlFUl9OUjsgaSsrKSB7
CisJCQlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSA9ICZtdGtfY3J0Yy0+cGxhbmVzW2ldLmJhc2U7
CisJCQlzdHJ1Y3QgbXRrX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZTsKKworCQkJcGxhbmVfc3Rh
dGUgPSB0b19tdGtfcGxhbmVfc3RhdGUocGxhbmUtPnN0YXRlKTsKKworCQkJaWYgKHBsYW5lX3N0
YXRlLT5wZW5kaW5nLmNvbmZpZykgeworCQkJCW10a19kZHBfY29tcF9sYXllcl9jb25maWcob3Zs
LCBpLCBwbGFuZV9zdGF0ZSk7CisJCQkJcGxhbmVfc3RhdGUtPnBlbmRpbmcuY29uZmlnID0gZmFs
c2U7CisJCQl9CisJCX0KKwkJbXRrX2NydGMtPnBlbmRpbmdfcGxhbmVzID0gZmFsc2U7CisJfQor
CisJbXRrX2RybV9maW5pc2hfcGFnZV9mbGlwKG10a19jcnRjKTsKK30KKworaW50IG10a19kcm1f
Y3J0Y19jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRybV9kZXYsCisJCQljb25zdCBlbnVtIG10
a19kZHBfY29tcF9pZCAqcGF0aCwgdW5zaWduZWQgaW50IHBhdGhfbGVuKQoreworCXN0cnVjdCBt
dGtfZHJtX3ByaXZhdGUgKnByaXYgPSBkcm1fZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZGV2
aWNlICpkZXYgPSBkcm1fZGV2LT5kZXY7CisJc3RydWN0IG10a19kcm1fY3J0YyAqbXRrX2NydGM7
CisJZW51bSBkcm1fcGxhbmVfdHlwZSB0eXBlOworCXVuc2lnbmVkIGludCB6cG9zOworCWludCBw
aXBlID0gcHJpdi0+bnVtX3BpcGVzOworCWludCByZXQ7CisJaW50IGk7CisKKwltdGtfY3J0YyA9
IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqbXRrX2NydGMpLCBHRlBfS0VSTkVMKTsKKwlpZiAo
IW10a19jcnRjKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW10a19jcnRjLT5jb25maWdfcmVncyA9
IHByaXYtPmNvbmZpZ19yZWdzOworCW10a19jcnRjLT5kZHBfY29tcF9uciA9IHBhdGhfbGVuOwor
CW10a19jcnRjLT5kZHBfY29tcCA9IGRldm1fa21hbGxvY19hcnJheShkZXYsIG10a19jcnRjLT5k
ZHBfY29tcF9uciwKKwkJCQkJCXNpemVvZigqbXRrX2NydGMtPmRkcF9jb21wKSwKKwkJCQkJCUdG
UF9LRVJORUwpOworCisJbXRrX2NydGMtPm11dGV4ID0gbXRrX2Rpc3BfbXV0ZXhfZ2V0KHByaXYt
Pm11dGV4X2RldiwgcGlwZSk7CisJaWYgKElTX0VSUihtdGtfY3J0Yy0+bXV0ZXgpKSB7CisJCXJl
dCA9IFBUUl9FUlIobXRrX2NydGMtPm11dGV4KTsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8g
Z2V0IG11dGV4OiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlmb3IgKGkgPSAw
OyBpIDwgbXRrX2NydGMtPmRkcF9jb21wX25yOyBpKyspIHsKKwkJZW51bSBtdGtfZGRwX2NvbXBf
aWQgY29tcF9pZCA9IHBhdGhbaV07CisJCXN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXA7CisJCXN0
cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZTsKKworCQlub2RlID0gcHJpdi0+Y29tcF9ub2RlW2NvbXBf
aWRdOworCQlpZiAoIW5vZGUpIHsKKwkJCWRldl9lcnIoZGV2LCAiQ29tcG9uZW50ICVkIGlzIGRp
c2FibGVkIG9yIG1pc3NpbmdcbiIsCisJCQkJY29tcF9pZCk7CisJCQlyZXQgPSAtRU5PREVWOwor
CQkJZ290byB1bnByZXBhcmU7CisJCX0KKworCQljb21wID0gcHJpdi0+ZGRwX2NvbXBbY29tcF9p
ZF07CisJCWlmICghY29tcCkgeworCQkJZGV2X2VycihkZXYsICJDb21wb25lbnQgJXMgbm90IGlu
aXRpYWxpemVkXG4iLAorCQkJCW5vZGUtPmZ1bGxfbmFtZSk7CisJCQlyZXQgPSAtRU5PREVWOwor
CQkJZ290byB1bnByZXBhcmU7CisJCX0KKworCQlyZXQgPSBjbGtfcHJlcGFyZShjb21wLT5jbGsp
OworCQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKGRldiwKKwkJCQkiRmFpbGVkIHRvIHByZXBhcmUg
Y2xvY2sgZm9yIGNvbXBvbmVudCAlczogJWRcbiIsCisJCQkJbm9kZS0+ZnVsbF9uYW1lLCByZXQp
OworCQkJZ290byB1bnByZXBhcmU7CisJCX0KKworCQltdGtfY3J0Yy0+ZGRwX2NvbXBbaV0gPSBj
b21wOworCX0KKworCWZvciAoenBvcyA9IDA7IHpwb3MgPCBPVkxfTEFZRVJfTlI7IHpwb3MrKykg
eworCQl0eXBlID0gKHpwb3MgPT0gMCkgPyBEUk1fUExBTkVfVFlQRV9QUklNQVJZIDoKKwkJCQko
enBvcyA9PSAxKSA/IERSTV9QTEFORV9UWVBFX0NVUlNPUiA6CisJCQkJCQlEUk1fUExBTkVfVFlQ
RV9PVkVSTEFZOworCQlyZXQgPSBtdGtfcGxhbmVfaW5pdChkcm1fZGV2LCAmbXRrX2NydGMtPnBs
YW5lc1t6cG9zXSwKKwkJCQkgICAgIEJJVChwaXBlKSwgdHlwZSwgenBvcyk7CisJCWlmIChyZXQp
CisJCQlnb3RvIHVucHJlcGFyZTsKKwl9CisKKwlyZXQgPSBtdGtfZHJtX2NydGNfaW5pdChkcm1f
ZGV2LCBtdGtfY3J0YywgJm10a19jcnRjLT5wbGFuZXNbMF0uYmFzZSwKKwkJCQkmbXRrX2NydGMt
PnBsYW5lc1sxXS5iYXNlLCBwaXBlKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byB1bnByZXBhcmU7
CisKKwlwcml2LT5jcnRjW3BpcGVdID0gJm10a19jcnRjLT5iYXNlOworCXByaXYtPm51bV9waXBl
cysrOworCisJcmV0dXJuIDA7CisKK3VucHJlcGFyZToKKwl3aGlsZSAoLS1pID49IDApCisJCWNs
a191bnByZXBhcmUobXRrX2NydGMtPmRkcF9jb21wW2ldLT5jbGspOworCisJcmV0dXJuIHJldDsK
K30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2NydGMuaCBi
L2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2NydGMuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi44MWU1NTY2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9n
cHUvZHJtL21lZGlhdGVrL210a19kcm1fY3J0Yy5oCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKGMpIDIwMTUgTWVkaWFUZWsgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNp
b24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisg
KgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIE1US19EUk1fQ1JUQ19ICisj
ZGVmaW5lIE1US19EUk1fQ1JUQ19ICisKKyNpbmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KKyNpbmNs
dWRlICJtdGtfZHJtX2RkcF9jb21wLmgiCisjaW5jbHVkZSAibXRrX2RybV9wbGFuZS5oIgorCisj
ZGVmaW5lIE9WTF9MQVlFUl9OUgk0CisKK2ludCBtdGtfZHJtX2NydGNfZW5hYmxlX3ZibGFuayhz
dHJ1Y3QgZHJtX2RldmljZSAqZHJtLCB1bnNpZ25lZCBpbnQgcGlwZSk7Cit2b2lkIG10a19kcm1f
Y3J0Y19kaXNhYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCB1bnNpZ25lZCBpbnQg
cGlwZSk7Cit2b2lkIG10a19kcm1fY3J0Y19jaGVja19mbHVzaChzdHJ1Y3QgZHJtX2NydGMgKmNy
dGMpOwordm9pZCBtdGtfZHJtX2NydGNfY29tbWl0KHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7Cit2
b2lkIG10a19jcnRjX2RkcF9pcnEoc3RydWN0IGRybV9jcnRjICpjcnRjLCBzdHJ1Y3QgbXRrX2Rk
cF9jb21wICpvdmwpOworaW50IG10a19kcm1fY3J0Y19jcmVhdGUoc3RydWN0IGRybV9kZXZpY2Ug
KmRybV9kZXYsCisJCQljb25zdCBlbnVtIG10a19kZHBfY29tcF9pZCAqcGF0aCwKKwkJCXVuc2ln
bmVkIGludCBwYXRoX2xlbik7CisKKyNlbmRpZiAvKiBNVEtfRFJNX0NSVENfSCAqLwpkaWZmIC0t
Z2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwLmMgYi9kcml2ZXJzL2dw
dS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi4xNjU4NGU0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlh
dGVrL210a19kcm1fZGRwLmMKQEAgLTAsMCArMSwzNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMp
IDIwMTUgTWVkaWFUZWsgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICog
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBw
cm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGlu
dXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+CisjaW5jbHVkZSA8bGlu
dXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+CisKKyNpbmNs
dWRlICJtdGtfZHJtX2RkcC5oIgorI2luY2x1ZGUgIm10a19kcm1fZGRwX2NvbXAuaCIKKworI2Rl
ZmluZSBESVNQX1JFR19DT05GSUdfRElTUF9PVkwwX01PVVRfRU4JMHgwNDAKKyNkZWZpbmUgRElT
UF9SRUdfQ09ORklHX0RJU1BfT1ZMMV9NT1VUX0VOCTB4MDQ0CisjZGVmaW5lIERJU1BfUkVHX0NP
TkZJR19ESVNQX09EX01PVVRfRU4JCTB4MDQ4CisjZGVmaW5lIERJU1BfUkVHX0NPTkZJR19ESVNQ
X0dBTU1BX01PVVRfRU4JMHgwNGMKKyNkZWZpbmUgRElTUF9SRUdfQ09ORklHX0RJU1BfVUZPRV9N
T1VUX0VOCTB4MDUwCisjZGVmaW5lIERJU1BfUkVHX0NPTkZJR19ESVNQX0NPTE9SMF9TRUxfSU4J
MHgwODQKKyNkZWZpbmUgRElTUF9SRUdfQ09ORklHX0RJU1BfQ09MT1IxX1NFTF9JTgkweDA4OAor
I2RlZmluZSBESVNQX1JFR19DT05GSUdfRFBJX1NFTF9JTgkJMHgwYWMKKyNkZWZpbmUgRElTUF9S
RUdfQ09ORklHX0RJU1BfUkRNQTFfTU9VVF9FTgkweDBjOAorI2RlZmluZSBESVNQX1JFR19DT05G
SUdfTU1TWVNfQ0dfQ09OMAkJMHgxMDAKKworI2RlZmluZSBESVNQX1JFR19NVVRFWF9FTihuKQko
MHgyMCArIDB4MjAgKiAobikpCisjZGVmaW5lIERJU1BfUkVHX01VVEVYX1JTVChuKQkoMHgyOCAr
IDB4MjAgKiAobikpCisjZGVmaW5lIERJU1BfUkVHX01VVEVYX01PRChuKQkoMHgyYyArIDB4MjAg
KiAobikpCisjZGVmaW5lIERJU1BfUkVHX01VVEVYX1NPRihuKQkoMHgzMCArIDB4MjAgKiAobikp
CisKKyNkZWZpbmUgTVVURVhfTU9EX0RJU1BfT1ZMMAkJQklUKDExKQorI2RlZmluZSBNVVRFWF9N
T0RfRElTUF9PVkwxCQlCSVQoMTIpCisjZGVmaW5lIE1VVEVYX01PRF9ESVNQX1JETUEwCQlCSVQo
MTMpCisjZGVmaW5lIE1VVEVYX01PRF9ESVNQX1JETUExCQlCSVQoMTQpCisjZGVmaW5lIE1VVEVY
X01PRF9ESVNQX1JETUEyCQlCSVQoMTUpCisjZGVmaW5lIE1VVEVYX01PRF9ESVNQX1dETUEwCQlC
SVQoMTYpCisjZGVmaW5lIE1VVEVYX01PRF9ESVNQX1dETUExCQlCSVQoMTcpCisjZGVmaW5lIE1V
VEVYX01PRF9ESVNQX0NPTE9SMAkJQklUKDE4KQorI2RlZmluZSBNVVRFWF9NT0RfRElTUF9DT0xP
UjEJCUJJVCgxOSkKKyNkZWZpbmUgTVVURVhfTU9EX0RJU1BfQUFMCQlCSVQoMjApCisjZGVmaW5l
IE1VVEVYX01PRF9ESVNQX0dBTU1BCQlCSVQoMjEpCisjZGVmaW5lIE1VVEVYX01PRF9ESVNQX1VG
T0UJCUJJVCgyMikKKyNkZWZpbmUgTVVURVhfTU9EX0RJU1BfUFdNMAkJQklUKDIzKQorI2RlZmlu
ZSBNVVRFWF9NT0RfRElTUF9QV00xCQlCSVQoMjQpCisjZGVmaW5lIE1VVEVYX01PRF9ESVNQX09E
CQlCSVQoMjUpCisKKyNkZWZpbmUgTVVURVhfU09GX1NJTkdMRV9NT0RFCQkwCisjZGVmaW5lIE1V
VEVYX1NPRl9EU0kwCQkJMQorI2RlZmluZSBNVVRFWF9TT0ZfRFNJMQkJCTIKKyNkZWZpbmUgTVVU
RVhfU09GX0RQSTAJCQkzCisKKyNkZWZpbmUgT1ZMMF9NT1VUX0VOX0NPTE9SMAkJMHgxCisjZGVm
aW5lIE9EX01PVVRfRU5fUkRNQTAJCTB4MQorI2RlZmluZSBVRk9FX01PVVRfRU5fRFNJMAkJMHgx
CisjZGVmaW5lIENPTE9SMF9TRUxfSU5fT1ZMMAkJMHgxCisjZGVmaW5lIE9WTDFfTU9VVF9FTl9D
T0xPUjEJCTB4MQorI2RlZmluZSBHQU1NQV9NT1VUX0VOX1JETUExCQkweDEKKyNkZWZpbmUgUkRN
QTFfTU9VVF9EUEkwCQkJMHgyCisjZGVmaW5lIERQSTBfU0VMX0lOX1JETUExCQkweDEKKyNkZWZp
bmUgQ09MT1IxX1NFTF9JTl9PVkwxCQkweDEKKworc3RydWN0IG10a19kaXNwX211dGV4IHsKKwlp
bnQgaWQ7CisJYm9vbCBjbGFpbWVkOworfTsKKworc3RydWN0IG10a19kZHAgeworCXN0cnVjdCBk
ZXZpY2UJCQkqZGV2OworCXN0cnVjdCBjbGsJCQkqY2xrOworCXZvaWQgX19pb21lbQkJCSpyZWdz
OworCXN0cnVjdCBtdGtfZGlzcF9tdXRleAkJbXV0ZXhbMTBdOworfTsKKworc3RhdGljIGNvbnN0
IHVuc2lnbmVkIGludCBtdXRleF9tb2RbRERQX0NPTVBPTkVOVF9JRF9NQVhdID0geworCVtERFBf
Q09NUE9ORU5UX0FBTF0gPSBNVVRFWF9NT0RfRElTUF9BQUwsCisJW0REUF9DT01QT05FTlRfQ09M
T1IwXSA9IE1VVEVYX01PRF9ESVNQX0NPTE9SMCwKKwlbRERQX0NPTVBPTkVOVF9DT0xPUjFdID0g
TVVURVhfTU9EX0RJU1BfQ09MT1IxLAorCVtERFBfQ09NUE9ORU5UX0dBTU1BXSA9IE1VVEVYX01P
RF9ESVNQX0dBTU1BLAorCVtERFBfQ09NUE9ORU5UX09EXSA9IE1VVEVYX01PRF9ESVNQX09ELAor
CVtERFBfQ09NUE9ORU5UX09WTDBdID0gTVVURVhfTU9EX0RJU1BfT1ZMMCwKKwlbRERQX0NPTVBP
TkVOVF9PVkwxXSA9IE1VVEVYX01PRF9ESVNQX09WTDEsCisJW0REUF9DT01QT05FTlRfUFdNMF0g
PSBNVVRFWF9NT0RfRElTUF9QV00wLAorCVtERFBfQ09NUE9ORU5UX1BXTTFdID0gTVVURVhfTU9E
X0RJU1BfUFdNMSwKKwlbRERQX0NPTVBPTkVOVF9SRE1BMF0gPSBNVVRFWF9NT0RfRElTUF9SRE1B
MCwKKwlbRERQX0NPTVBPTkVOVF9SRE1BMV0gPSBNVVRFWF9NT0RfRElTUF9SRE1BMSwKKwlbRERQ
X0NPTVBPTkVOVF9SRE1BMl0gPSBNVVRFWF9NT0RfRElTUF9SRE1BMiwKKwlbRERQX0NPTVBPTkVO
VF9VRk9FXSA9IE1VVEVYX01PRF9ESVNQX1VGT0UsCisJW0REUF9DT01QT05FTlRfV0RNQTBdID0g
TVVURVhfTU9EX0RJU1BfV0RNQTAsCisJW0REUF9DT01QT05FTlRfV0RNQTFdID0gTVVURVhfTU9E
X0RJU1BfV0RNQTEsCit9OworCitzdGF0aWMgdW5zaWduZWQgaW50IG10a19kZHBfbW91dF9lbihl
bnVtIG10a19kZHBfY29tcF9pZCBjdXIsCisJCQkJICAgIGVudW0gbXRrX2RkcF9jb21wX2lkIG5l
eHQsCisJCQkJICAgIHVuc2lnbmVkIGludCAqYWRkcikKK3sKKwl1bnNpZ25lZCBpbnQgdmFsdWU7
CisKKwlpZiAoY3VyID09IEREUF9DT01QT05FTlRfT1ZMMCAmJiBuZXh0ID09IEREUF9DT01QT05F
TlRfQ09MT1IwKSB7CisJCSphZGRyID0gRElTUF9SRUdfQ09ORklHX0RJU1BfT1ZMMF9NT1VUX0VO
OworCQl2YWx1ZSA9IE9WTDBfTU9VVF9FTl9DT0xPUjA7CisJfSBlbHNlIGlmIChjdXIgPT0gRERQ
X0NPTVBPTkVOVF9PRCAmJiBuZXh0ID09IEREUF9DT01QT05FTlRfUkRNQTApIHsKKwkJKmFkZHIg
PSBESVNQX1JFR19DT05GSUdfRElTUF9PRF9NT1VUX0VOOworCQl2YWx1ZSA9IE9EX01PVVRfRU5f
UkRNQTA7CisJfSBlbHNlIGlmIChjdXIgPT0gRERQX0NPTVBPTkVOVF9VRk9FICYmIG5leHQgPT0g
RERQX0NPTVBPTkVOVF9EU0kwKSB7CisJCSphZGRyID0gRElTUF9SRUdfQ09ORklHX0RJU1BfVUZP
RV9NT1VUX0VOOworCQl2YWx1ZSA9IFVGT0VfTU9VVF9FTl9EU0kwOworCX0gZWxzZSBpZiAoY3Vy
ID09IEREUF9DT01QT05FTlRfT1ZMMSAmJiBuZXh0ID09IEREUF9DT01QT05FTlRfQ09MT1IxKSB7
CisJCSphZGRyID0gRElTUF9SRUdfQ09ORklHX0RJU1BfT1ZMMV9NT1VUX0VOOworCQl2YWx1ZSA9
IE9WTDFfTU9VVF9FTl9DT0xPUjE7CisJfSBlbHNlIGlmIChjdXIgPT0gRERQX0NPTVBPTkVOVF9H
QU1NQSAmJiBuZXh0ID09IEREUF9DT01QT05FTlRfUkRNQTEpIHsKKwkJKmFkZHIgPSBESVNQX1JF
R19DT05GSUdfRElTUF9HQU1NQV9NT1VUX0VOOworCQl2YWx1ZSA9IEdBTU1BX01PVVRfRU5fUkRN
QTE7CisJfSBlbHNlIGlmIChjdXIgPT0gRERQX0NPTVBPTkVOVF9SRE1BMSAmJiBuZXh0ID09IERE
UF9DT01QT05FTlRfRFBJMCkgeworCQkqYWRkciA9IERJU1BfUkVHX0NPTkZJR19ESVNQX1JETUEx
X01PVVRfRU47CisJCXZhbHVlID0gUkRNQTFfTU9VVF9EUEkwOworCX0gZWxzZSB7CisJCXZhbHVl
ID0gMDsKKwl9CisKKwlyZXR1cm4gdmFsdWU7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbXRr
X2RkcF9zZWxfaW4oZW51bSBtdGtfZGRwX2NvbXBfaWQgY3VyLAorCQkJCSAgIGVudW0gbXRrX2Rk
cF9jb21wX2lkIG5leHQsCisJCQkJICAgdW5zaWduZWQgaW50ICphZGRyKQoreworCXVuc2lnbmVk
IGludCB2YWx1ZTsKKworCWlmIChjdXIgPT0gRERQX0NPTVBPTkVOVF9PVkwwICYmIG5leHQgPT0g
RERQX0NPTVBPTkVOVF9DT0xPUjApIHsKKwkJKmFkZHIgPSBESVNQX1JFR19DT05GSUdfRElTUF9D
T0xPUjBfU0VMX0lOOworCQl2YWx1ZSA9IENPTE9SMF9TRUxfSU5fT1ZMMDsKKwl9IGVsc2UgaWYg
KGN1ciA9PSBERFBfQ09NUE9ORU5UX1JETUExICYmIG5leHQgPT0gRERQX0NPTVBPTkVOVF9EUEkw
KSB7CisJCSphZGRyID0gRElTUF9SRUdfQ09ORklHX0RQSV9TRUxfSU47CisJCXZhbHVlID0gRFBJ
MF9TRUxfSU5fUkRNQTE7CisJfSBlbHNlIGlmIChjdXIgPT0gRERQX0NPTVBPTkVOVF9PVkwxICYm
IG5leHQgPT0gRERQX0NPTVBPTkVOVF9DT0xPUjEpIHsKKwkJKmFkZHIgPSBESVNQX1JFR19DT05G
SUdfRElTUF9DT0xPUjFfU0VMX0lOOworCQl2YWx1ZSA9IENPTE9SMV9TRUxfSU5fT1ZMMTsKKwl9
IGVsc2UgeworCQl2YWx1ZSA9IDA7CisJfQorCisJcmV0dXJuIHZhbHVlOworfQorCit2b2lkIG10
a19kZHBfYWRkX2NvbXBfdG9fcGF0aCh2b2lkIF9faW9tZW0gKmNvbmZpZ19yZWdzLAorCQkJICAg
ICAgZW51bSBtdGtfZGRwX2NvbXBfaWQgY3VyLAorCQkJICAgICAgZW51bSBtdGtfZGRwX2NvbXBf
aWQgbmV4dCkKK3sKKwl1bnNpZ25lZCBpbnQgYWRkciwgdmFsdWUsIHJlZzsKKworCXZhbHVlID0g
bXRrX2RkcF9tb3V0X2VuKGN1ciwgbmV4dCwgJmFkZHIpOworCWlmICh2YWx1ZSkgeworCQlyZWcg
PSByZWFkbF9yZWxheGVkKGNvbmZpZ19yZWdzICsgYWRkcikgfCB2YWx1ZTsKKwkJd3JpdGVsX3Jl
bGF4ZWQocmVnLCBjb25maWdfcmVncyArIGFkZHIpOworCX0KKworCXZhbHVlID0gbXRrX2RkcF9z
ZWxfaW4oY3VyLCBuZXh0LCAmYWRkcik7CisJaWYgKHZhbHVlKSB7CisJCXJlZyA9IHJlYWRsX3Jl
bGF4ZWQoY29uZmlnX3JlZ3MgKyBhZGRyKSB8IHZhbHVlOworCQl3cml0ZWxfcmVsYXhlZChyZWcs
IGNvbmZpZ19yZWdzICsgYWRkcik7CisJfQorfQorCit2b2lkIG10a19kZHBfcmVtb3ZlX2NvbXBf
ZnJvbV9wYXRoKHZvaWQgX19pb21lbSAqY29uZmlnX3JlZ3MsCisJCQkJICAgZW51bSBtdGtfZGRw
X2NvbXBfaWQgY3VyLAorCQkJCSAgIGVudW0gbXRrX2RkcF9jb21wX2lkIG5leHQpCit7CisJdW5z
aWduZWQgaW50IGFkZHIsIHZhbHVlLCByZWc7CisKKwl2YWx1ZSA9IG10a19kZHBfbW91dF9lbihj
dXIsIG5leHQsICZhZGRyKTsKKwlpZiAodmFsdWUpIHsKKwkJcmVnID0gcmVhZGxfcmVsYXhlZChj
b25maWdfcmVncyArIGFkZHIpICYgfnZhbHVlOworCQl3cml0ZWxfcmVsYXhlZChyZWcsIGNvbmZp
Z19yZWdzICsgYWRkcik7CisJfQorCisJdmFsdWUgPSBtdGtfZGRwX3NlbF9pbihjdXIsIG5leHQs
ICZhZGRyKTsKKwlpZiAodmFsdWUpIHsKKwkJcmVnID0gcmVhZGxfcmVsYXhlZChjb25maWdfcmVn
cyArIGFkZHIpICYgfnZhbHVlOworCQl3cml0ZWxfcmVsYXhlZChyZWcsIGNvbmZpZ19yZWdzICsg
YWRkcik7CisJfQorfQorCitzdHJ1Y3QgbXRrX2Rpc3BfbXV0ZXggKm10a19kaXNwX211dGV4X2dl
dChzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBpZCkKK3sKKwlzdHJ1Y3QgbXRrX2Rk
cCAqZGRwID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlpZiAoaWQgPj0gMTApCisJCXJldHVy
biBFUlJfUFRSKC1FSU5WQUwpOworCWlmIChkZHAtPm11dGV4W2lkXS5jbGFpbWVkKQorCQlyZXR1
cm4gRVJSX1BUUigtRUJVU1kpOworCisJZGRwLT5tdXRleFtpZF0uY2xhaW1lZCA9IHRydWU7CisK
KwlyZXR1cm4gJmRkcC0+bXV0ZXhbaWRdOworfQorCit2b2lkIG10a19kaXNwX211dGV4X3B1dChz
dHJ1Y3QgbXRrX2Rpc3BfbXV0ZXggKm11dGV4KQoreworCXN0cnVjdCBtdGtfZGRwICpkZHAgPSBj
b250YWluZXJfb2YobXV0ZXgsIHN0cnVjdCBtdGtfZGRwLAorCQkJCQkgICBtdXRleFttdXRleC0+
aWRdKTsKKworCVdBUk5fT04oJmRkcC0+bXV0ZXhbbXV0ZXgtPmlkXSAhPSBtdXRleCk7CisKKwlt
dXRleC0+Y2xhaW1lZCA9IGZhbHNlOworfQorCitpbnQgbXRrX2Rpc3BfbXV0ZXhfcHJlcGFyZShz
dHJ1Y3QgbXRrX2Rpc3BfbXV0ZXggKm11dGV4KQoreworCXN0cnVjdCBtdGtfZGRwICpkZHAgPSBj
b250YWluZXJfb2YobXV0ZXgsIHN0cnVjdCBtdGtfZGRwLAorCQkJCQkgICBtdXRleFttdXRleC0+
aWRdKTsKKwlyZXR1cm4gY2xrX3ByZXBhcmVfZW5hYmxlKGRkcC0+Y2xrKTsKK30KKwordm9pZCBt
dGtfZGlzcF9tdXRleF91bnByZXBhcmUoc3RydWN0IG10a19kaXNwX211dGV4ICptdXRleCkKK3sK
KwlzdHJ1Y3QgbXRrX2RkcCAqZGRwID0gY29udGFpbmVyX29mKG11dGV4LCBzdHJ1Y3QgbXRrX2Rk
cCwKKwkJCQkJICAgbXV0ZXhbbXV0ZXgtPmlkXSk7CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRk
cC0+Y2xrKTsKK30KKwordm9pZCBtdGtfZGlzcF9tdXRleF9hZGRfY29tcChzdHJ1Y3QgbXRrX2Rp
c3BfbXV0ZXggKm11dGV4LAorCQkJICAgICBlbnVtIG10a19kZHBfY29tcF9pZCBpZCkKK3sKKwlz
dHJ1Y3QgbXRrX2RkcCAqZGRwID0gY29udGFpbmVyX29mKG11dGV4LCBzdHJ1Y3QgbXRrX2RkcCwK
KwkJCQkJICAgbXV0ZXhbbXV0ZXgtPmlkXSk7CisJdW5zaWduZWQgaW50IHJlZzsKKworCVdBUk5f
T04oJmRkcC0+bXV0ZXhbbXV0ZXgtPmlkXSAhPSBtdXRleCk7CisKKwlzd2l0Y2ggKGlkKSB7CisJ
Y2FzZSBERFBfQ09NUE9ORU5UX0RTSTA6CisJCXJlZyA9IE1VVEVYX1NPRl9EU0kwOworCQlicmVh
azsKKwljYXNlIEREUF9DT01QT05FTlRfRFNJMToKKwkJcmVnID0gTVVURVhfU09GX0RTSTA7CisJ
CWJyZWFrOworCWNhc2UgRERQX0NPTVBPTkVOVF9EUEkwOgorCQlyZWcgPSBNVVRFWF9TT0ZfRFBJ
MDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmVnID0gcmVhZGxfcmVsYXhlZChkZHAtPnJlZ3Mg
KyBESVNQX1JFR19NVVRFWF9NT0QobXV0ZXgtPmlkKSk7CisJCXJlZyB8PSBtdXRleF9tb2RbaWRd
OworCQl3cml0ZWxfcmVsYXhlZChyZWcsIGRkcC0+cmVncyArIERJU1BfUkVHX01VVEVYX01PRCht
dXRleC0+aWQpKTsKKwkJcmV0dXJuOworCX0KKworCXdyaXRlbF9yZWxheGVkKHJlZywgZGRwLT5y
ZWdzICsgRElTUF9SRUdfTVVURVhfU09GKG11dGV4LT5pZCkpOworfQorCit2b2lkIG10a19kaXNw
X211dGV4X3JlbW92ZV9jb21wKHN0cnVjdCBtdGtfZGlzcF9tdXRleCAqbXV0ZXgsCisJCQkJZW51
bSBtdGtfZGRwX2NvbXBfaWQgaWQpCit7CisJc3RydWN0IG10a19kZHAgKmRkcCA9IGNvbnRhaW5l
cl9vZihtdXRleCwgc3RydWN0IG10a19kZHAsCisJCQkJCSAgIG11dGV4W211dGV4LT5pZF0pOwor
CXVuc2lnbmVkIGludCByZWc7CisKKwlXQVJOX09OKCZkZHAtPm11dGV4W211dGV4LT5pZF0gIT0g
bXV0ZXgpOworCisJc3dpdGNoIChpZCkgeworCWNhc2UgRERQX0NPTVBPTkVOVF9EU0kwOgorCWNh
c2UgRERQX0NPTVBPTkVOVF9EU0kxOgorCWNhc2UgRERQX0NPTVBPTkVOVF9EUEkwOgorCQl3cml0
ZWxfcmVsYXhlZChNVVRFWF9TT0ZfU0lOR0xFX01PREUsCisJCQkgICAgICAgZGRwLT5yZWdzICsg
RElTUF9SRUdfTVVURVhfU09GKG11dGV4LT5pZCkpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQly
ZWcgPSByZWFkbF9yZWxheGVkKGRkcC0+cmVncyArIERJU1BfUkVHX01VVEVYX01PRChtdXRleC0+
aWQpKTsKKwkJcmVnICY9IH5tdXRleF9tb2RbaWRdOworCQl3cml0ZWxfcmVsYXhlZChyZWcsIGRk
cC0+cmVncyArIERJU1BfUkVHX01VVEVYX01PRChtdXRleC0+aWQpKTsKKwkJYnJlYWs7CisJfQor
fQorCit2b2lkIG10a19kaXNwX211dGV4X2VuYWJsZShzdHJ1Y3QgbXRrX2Rpc3BfbXV0ZXggKm11
dGV4KQoreworCXN0cnVjdCBtdGtfZGRwICpkZHAgPSBjb250YWluZXJfb2YobXV0ZXgsIHN0cnVj
dCBtdGtfZGRwLAorCQkJCQkgICBtdXRleFttdXRleC0+aWRdKTsKKworCVdBUk5fT04oJmRkcC0+
bXV0ZXhbbXV0ZXgtPmlkXSAhPSBtdXRleCk7CisKKwl3cml0ZWwoMSwgZGRwLT5yZWdzICsgRElT
UF9SRUdfTVVURVhfRU4obXV0ZXgtPmlkKSk7Cit9CisKK3ZvaWQgbXRrX2Rpc3BfbXV0ZXhfZGlz
YWJsZShzdHJ1Y3QgbXRrX2Rpc3BfbXV0ZXggKm11dGV4KQoreworCXN0cnVjdCBtdGtfZGRwICpk
ZHAgPSBjb250YWluZXJfb2YobXV0ZXgsIHN0cnVjdCBtdGtfZGRwLAorCQkJCQkgICBtdXRleFtt
dXRleC0+aWRdKTsKKworCVdBUk5fT04oJmRkcC0+bXV0ZXhbbXV0ZXgtPmlkXSAhPSBtdXRleCk7
CisKKwl3cml0ZWwoMCwgZGRwLT5yZWdzICsgRElTUF9SRUdfTVVURVhfRU4obXV0ZXgtPmlkKSk7
Cit9CisKK3N0YXRpYyBpbnQgbXRrX2RkcF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpw
ZGV2KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0IG10a19k
ZHAgKmRkcDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlZ3M7CisJaW50IGk7CisKKwlkZHAgPSBkZXZt
X2t6YWxsb2MoZGV2LCBzaXplb2YoKmRkcCksIEdGUF9LRVJORUwpOworCWlmICghZGRwKQorCQly
ZXR1cm4gLUVOT01FTTsKKworCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKQorCQlkZHAtPm11dGV4
W2ldLmlkID0gaTsKKworCWRkcC0+Y2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgTlVMTCk7CisJaWYg
KElTX0VSUihkZHAtPmNsaykpIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZ2V0IGNsb2Nr
XG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIoZGRwLT5jbGspOworCX0KKworCXJlZ3MgPSBwbGF0Zm9y
bV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWRkcC0+cmVncyA9IGRl
dm1faW9yZW1hcF9yZXNvdXJjZShkZXYsIHJlZ3MpOworCWlmIChJU19FUlIoZGRwLT5yZWdzKSkg
eworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBtYXAgbXV0ZXggcmVnaXN0ZXJzXG4iKTsKKwkJ
cmV0dXJuIFBUUl9FUlIoZGRwLT5yZWdzKTsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShw
ZGV2LCBkZHApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2RkcF9yZW1vdmUo
c3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj
IGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgZGRwX2RyaXZlcl9kdF9tYXRjaFtdID0geworCXsg
LmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ4MTczLWRpc3AtbXV0ZXgiIH0sCisJe30sCit9Owor
TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgZGRwX2RyaXZlcl9kdF9tYXRjaCk7CisKK3N0YXRpYyBz
dHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10a19kZHBfZHJpdmVyID0geworCS5wcm9iZQkJPSBtdGtf
ZGRwX3Byb2JlLAorCS5yZW1vdmUJCT0gbXRrX2RkcF9yZW1vdmUsCisJLmRyaXZlcgkJPSB7CisJ
CS5uYW1lCT0gIm1lZGlhdGVrLWRkcCIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCQkub2Zf
bWF0Y2hfdGFibGUgPSBkZHBfZHJpdmVyX2R0X21hdGNoLAorCX0sCit9OworCittb2R1bGVfcGxh
dGZvcm1fZHJpdmVyKG10a19kZHBfZHJpdmVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry
bS9tZWRpYXRlay9tdGtfZHJtX2RkcC5oIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19k
cm1fZGRwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJjMTE3NQotLS0g
L2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2RkcC5oCkBA
IC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgTWVkaWFUZWsgSW5jLgor
ICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQor
ICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisj
aWZuZGVmIE1US19EUk1fRERQX0gKKyNkZWZpbmUgTVRLX0RSTV9ERFBfSAorCisjaW5jbHVkZSAi
bXRrX2RybV9kZHBfY29tcC5oIgorCitzdHJ1Y3QgcmVnbWFwOworc3RydWN0IGRldmljZTsKK3N0
cnVjdCBtdGtfZGlzcF9tdXRleDsKKwordm9pZCBtdGtfZGRwX2FkZF9jb21wX3RvX3BhdGgodm9p
ZCBfX2lvbWVtICpjb25maWdfcmVncywKKwkJCSAgICAgIGVudW0gbXRrX2RkcF9jb21wX2lkIGN1
ciwKKwkJCSAgICAgIGVudW0gbXRrX2RkcF9jb21wX2lkIG5leHQpOwordm9pZCBtdGtfZGRwX3Jl
bW92ZV9jb21wX2Zyb21fcGF0aCh2b2lkIF9faW9tZW0gKmNvbmZpZ19yZWdzLAorCQkJCSAgIGVu
dW0gbXRrX2RkcF9jb21wX2lkIGN1ciwKKwkJCQkgICBlbnVtIG10a19kZHBfY29tcF9pZCBuZXh0
KTsKKworc3RydWN0IG10a19kaXNwX211dGV4ICptdGtfZGlzcF9tdXRleF9nZXQoc3RydWN0IGRl
dmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgaWQpOworaW50IG10a19kaXNwX211dGV4X3ByZXBhcmUo
c3RydWN0IG10a19kaXNwX211dGV4ICptdXRleCk7Cit2b2lkIG10a19kaXNwX211dGV4X2FkZF9j
b21wKHN0cnVjdCBtdGtfZGlzcF9tdXRleCAqbXV0ZXgsCisJCQkgICAgIGVudW0gbXRrX2RkcF9j
b21wX2lkIGlkKTsKK3ZvaWQgbXRrX2Rpc3BfbXV0ZXhfZW5hYmxlKHN0cnVjdCBtdGtfZGlzcF9t
dXRleCAqbXV0ZXgpOwordm9pZCBtdGtfZGlzcF9tdXRleF9kaXNhYmxlKHN0cnVjdCBtdGtfZGlz
cF9tdXRleCAqbXV0ZXgpOwordm9pZCBtdGtfZGlzcF9tdXRleF9yZW1vdmVfY29tcChzdHJ1Y3Qg
bXRrX2Rpc3BfbXV0ZXggKm11dGV4LAorCQkJCWVudW0gbXRrX2RkcF9jb21wX2lkIGlkKTsKK3Zv
aWQgbXRrX2Rpc3BfbXV0ZXhfdW5wcmVwYXJlKHN0cnVjdCBtdGtfZGlzcF9tdXRleCAqbXV0ZXgp
Owordm9pZCBtdGtfZGlzcF9tdXRleF9wdXQoc3RydWN0IG10a19kaXNwX211dGV4ICptdXRleCk7
CisKKyNlbmRpZiAvKiBNVEtfRFJNX0REUF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k
cm0vbWVkaWF0ZWsvbXRrX2RybV9kZHBfY29tcC5jIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVr
L210a19kcm1fZGRwX2NvbXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4z
OTcwZmNmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19k
cm1fZGRwX2NvbXAuYwpAQCAtMCwwICsxLDIyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAx
NSBNZWRpYVRlayBJbmMuCisgKiBBdXRob3JzOgorICoJWVQgU2hlbiA8eXQuc2hlbkBtZWRpYXRl
ay5jb20+CisgKglDSyBIdSA8Y2suaHVAbWVkaWF0ZWsuY29tPgorICoKKyAqIFRoaXMgcHJvZ3Jh
bSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5
CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY2xr
Lmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+
CisjaW5jbHVkZSA8bGludXgvb2ZfaXJxLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0u
aD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxkcm0vZHJt
UC5oPgorI2luY2x1ZGUgIm10a19kcm1fZHJ2LmgiCisjaW5jbHVkZSAibXRrX2RybV9wbGFuZS5o
IgorI2luY2x1ZGUgIm10a19kcm1fZGRwX2NvbXAuaCIKKworI2RlZmluZSBESVNQX09EX0VOCQkJ
CTB4MDAwMAorI2RlZmluZSBESVNQX09EX0lOVEVOCQkJCTB4MDAwOAorI2RlZmluZSBESVNQX09E
X0lOVFNUQQkJCQkweDAwMGMKKyNkZWZpbmUgRElTUF9PRF9DRkcJCQkJMHgwMDIwCisjZGVmaW5l
IERJU1BfT0RfU0laRQkJCQkweDAwMzAKKworI2RlZmluZSBESVNQX1JFR19VRk9fU1RBUlQJCQkw
eDAwMDAKKworI2RlZmluZSBESVNQX0NPTE9SX0NGR19NQUlOCQkJMHgwNDAwCisjZGVmaW5lIERJ
U1BfQ09MT1JfU1RBUlQJCQkweDBjMDAKKyNkZWZpbmUgRElTUF9DT0xPUl9XSURUSAkJCTB4MGM1
MAorI2RlZmluZSBESVNQX0NPTE9SX0hFSUdIVAkJCTB4MGM1NAorCisjZGVmaW5lCU9EX1JFTEFZ
X01PREUJCUJJVCgwKQorCisjZGVmaW5lCVVGT19CWVBBU1MJCUJJVCgyKQorCisjZGVmaW5lCUNP
TE9SX0JZUEFTU19BTEwJQklUKDcpCisjZGVmaW5lCUNPTE9SX1NFUV9TRUwJCUJJVCgxMykKKwor
c3RhdGljIHZvaWQgbXRrX2NvbG9yX2NvbmZpZyhzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wLCB1
bnNpZ25lZCBpbnQgdywKKwkJCSAgICAgdW5zaWduZWQgaW50IGgsIHVuc2lnbmVkIGludCB2cmVm
cmVzaCkKK3sKKwl3cml0ZWwodywgY29tcC0+cmVncyArIERJU1BfQ09MT1JfV0lEVEgpOworCXdy
aXRlbChoLCBjb21wLT5yZWdzICsgRElTUF9DT0xPUl9IRUlHSFQpOworfQorCitzdGF0aWMgdm9p
ZCBtdGtfY29sb3Jfc3RhcnQoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCkKK3sKKwl3cml0ZWwo
Q09MT1JfQllQQVNTX0FMTCB8IENPTE9SX1NFUV9TRUwsCisJICAgICAgIGNvbXAtPnJlZ3MgKyBE
SVNQX0NPTE9SX0NGR19NQUlOKTsKKwl3cml0ZWwoMHgxLCBjb21wLT5yZWdzICsgRElTUF9DT0xP
Ul9TVEFSVCk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19vZF9jb25maWcoc3RydWN0IG10a19kZHBf
Y29tcCAqY29tcCwgdW5zaWduZWQgaW50IHcsCisJCQkgIHVuc2lnbmVkIGludCBoLCB1bnNpZ25l
ZCBpbnQgdnJlZnJlc2gpCit7CisJd3JpdGVsKHcgPDwgMTYgfCBoLCBjb21wLT5yZWdzICsgRElT
UF9PRF9TSVpFKTsKK30KKworc3RhdGljIHZvaWQgbXRrX29kX3N0YXJ0KHN0cnVjdCBtdGtfZGRw
X2NvbXAgKmNvbXApCit7CisJd3JpdGVsKE9EX1JFTEFZX01PREUsIGNvbXAtPnJlZ3MgKyBESVNQ
X09EX0NGRyk7CisJd3JpdGVsKDEsIGNvbXAtPnJlZ3MgKyBESVNQX09EX0VOKTsKK30KKworc3Rh
dGljIHZvaWQgbXRrX3Vmb2Vfc3RhcnQoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCkKK3sKKwl3
cml0ZWwoVUZPX0JZUEFTUywgY29tcC0+cmVncyArIERJU1BfUkVHX1VGT19TVEFSVCk7Cit9CisK
K3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRrX2RkcF9jb21wX2Z1bmNzIGRkcF9jb2xvciA9IHsKKwku
Y29uZmlnID0gbXRrX2NvbG9yX2NvbmZpZywKKwkuc3RhcnQgPSBtdGtfY29sb3Jfc3RhcnQsCit9
OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG10a19kZHBfY29tcF9mdW5jcyBkZHBfb2QgPSB7CisJ
LmNvbmZpZyA9IG10a19vZF9jb25maWcsCisJLnN0YXJ0ID0gbXRrX29kX3N0YXJ0LAorfTsKKwor
c3RhdGljIGNvbnN0IHN0cnVjdCBtdGtfZGRwX2NvbXBfZnVuY3MgZGRwX3Vmb2UgPSB7CisJLnN0
YXJ0ID0gbXRrX3Vmb2Vfc3RhcnQsCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG10
a19kZHBfY29tcF9zdGVtW01US19ERFBfQ09NUF9UWVBFX01BWF0gPSB7CisJW01US19ESVNQX09W
TF0gPSAib3ZsIiwKKwlbTVRLX0RJU1BfUkRNQV0gPSAicmRtYSIsCisJW01US19ESVNQX1dETUFd
ID0gIndkbWEiLAorCVtNVEtfRElTUF9DT0xPUl0gPSAiY29sb3IiLAorCVtNVEtfRElTUF9BQUxd
ID0gImFhbCIsCisJW01US19ESVNQX0dBTU1BXSA9ICJnYW1tYSIsCisJW01US19ESVNQX1VGT0Vd
ID0gInVmb2UiLAorCVtNVEtfRFNJXSA9ICJkc2kiLAorCVtNVEtfRFBJXSA9ICJkcGkiLAorCVtN
VEtfRElTUF9QV01dID0gInB3bSIsCisJW01US19ESVNQX01VVEVYXSA9ICJtdXRleCIsCisJW01U
S19ESVNQX09EXSA9ICJvZCIsCit9OworCitzdHJ1Y3QgbXRrX2RkcF9jb21wX21hdGNoIHsKKwll
bnVtIG10a19kZHBfY29tcF90eXBlIHR5cGU7CisJaW50IGFsaWFzX2lkOworCWNvbnN0IHN0cnVj
dCBtdGtfZGRwX2NvbXBfZnVuY3MgKmZ1bmNzOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBt
dGtfZGRwX2NvbXBfbWF0Y2ggbXRrX2RkcF9tYXRjaGVzW0REUF9DT01QT05FTlRfSURfTUFYXSA9
IHsKKwlbRERQX0NPTVBPTkVOVF9BQUxdCT0geyBNVEtfRElTUF9BQUwsCTAsIE5VTEwgfSwKKwlb
RERQX0NPTVBPTkVOVF9DT0xPUjBdCT0geyBNVEtfRElTUF9DT0xPUiwJMCwgJmRkcF9jb2xvciB9
LAorCVtERFBfQ09NUE9ORU5UX0NPTE9SMV0JPSB7IE1US19ESVNQX0NPTE9SLAkxLCAmZGRwX2Nv
bG9yIH0sCisJW0REUF9DT01QT05FTlRfRFBJMF0JPSB7IE1US19EUEksCQkwLCBOVUxMIH0sCisJ
W0REUF9DT01QT05FTlRfRFNJMF0JPSB7IE1US19EU0ksCQkwLCBOVUxMIH0sCisJW0REUF9DT01Q
T05FTlRfRFNJMV0JPSB7IE1US19EU0ksCQkxLCBOVUxMIH0sCisJW0REUF9DT01QT05FTlRfR0FN
TUFdCT0geyBNVEtfRElTUF9HQU1NQSwJMCwgTlVMTCB9LAorCVtERFBfQ09NUE9ORU5UX09EXQk9
IHsgTVRLX0RJU1BfT0QsCTAsICZkZHBfb2QgfSwKKwlbRERQX0NPTVBPTkVOVF9PVkwwXQk9IHsg
TVRLX0RJU1BfT1ZMLAkwLCBOVUxMIH0sCisJW0REUF9DT01QT05FTlRfT1ZMMV0JPSB7IE1US19E
SVNQX09WTCwJMSwgTlVMTCB9LAorCVtERFBfQ09NUE9ORU5UX1BXTTBdCT0geyBNVEtfRElTUF9Q
V00sCTAsIE5VTEwgfSwKKwlbRERQX0NPTVBPTkVOVF9SRE1BMF0JPSB7IE1US19ESVNQX1JETUEs
CTAsIE5VTEwgfSwKKwlbRERQX0NPTVBPTkVOVF9SRE1BMV0JPSB7IE1US19ESVNQX1JETUEsCTEs
IE5VTEwgfSwKKwlbRERQX0NPTVBPTkVOVF9SRE1BMl0JPSB7IE1US19ESVNQX1JETUEsCTIsIE5V
TEwgfSwKKwlbRERQX0NPTVBPTkVOVF9VRk9FXQk9IHsgTVRLX0RJU1BfVUZPRSwJMCwgJmRkcF91
Zm9lIH0sCisJW0REUF9DT01QT05FTlRfV0RNQTBdCT0geyBNVEtfRElTUF9XRE1BLAkwLCBOVUxM
IH0sCisJW0REUF9DT01QT05FTlRfV0RNQTFdCT0geyBNVEtfRElTUF9XRE1BLAkxLCBOVUxMIH0s
Cit9OworCitpbnQgbXRrX2RkcF9jb21wX2dldF9pZChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUs
CisJCQllbnVtIG10a19kZHBfY29tcF90eXBlIGNvbXBfdHlwZSkKK3sKKwlpbnQgaWQgPSBvZl9h
bGlhc19nZXRfaWQobm9kZSwgbXRrX2RkcF9jb21wX3N0ZW1bY29tcF90eXBlXSk7CisJaW50IGk7
CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShtdGtfZGRwX21hdGNoZXMpOyBpKyspIHsK
KwkJaWYgKGNvbXBfdHlwZSA9PSBtdGtfZGRwX21hdGNoZXNbaV0udHlwZSAmJgorCQkgICAgKGlk
IDwgMCB8fCBpZCA9PSBtdGtfZGRwX21hdGNoZXNbaV0uYWxpYXNfaWQpKQorCQkJcmV0dXJuIGk7
CisJfQorCisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK2ludCBtdGtfZGRwX2NvbXBfaW5pdChzdHJ1
Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwKKwkJICAgICAgc3RydWN0
IG10a19kZHBfY29tcCAqY29tcCwgZW51bSBtdGtfZGRwX2NvbXBfaWQgY29tcF9pZCwKKwkJICAg
ICAgY29uc3Qgc3RydWN0IG10a19kZHBfY29tcF9mdW5jcyAqZnVuY3MpCit7CisJZW51bSBtdGtf
ZGRwX2NvbXBfdHlwZSB0eXBlOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbGFyYl9ub2RlOworCXN0
cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmxhcmJfcGRldjsKKworCWlmIChjb21wX2lkIDwgMCB8fCBj
b21wX2lkID49IEREUF9DT01QT05FTlRfSURfTUFYKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWNv
bXAtPmlkID0gY29tcF9pZDsKKwljb21wLT5mdW5jcyA9IGZ1bmNzID86IG10a19kZHBfbWF0Y2hl
c1tjb21wX2lkXS5mdW5jczsKKworCWlmIChjb21wX2lkID09IEREUF9DT01QT05FTlRfRFBJMCB8
fAorCSAgICBjb21wX2lkID09IEREUF9DT01QT05FTlRfRFNJMCB8fAorCSAgICBjb21wX2lkID09
IEREUF9DT01QT05FTlRfUFdNMCkgeworCQljb21wLT5yZWdzID0gTlVMTDsKKwkJY29tcC0+Y2xr
ID0gTlVMTDsKKwkJY29tcC0+aXJxID0gMDsKKwkJcmV0dXJuIDA7CisJfQorCisJY29tcC0+cmVn
cyA9IG9mX2lvbWFwKG5vZGUsIDApOworCWNvbXAtPmlycSA9IG9mX2lycV9nZXQobm9kZSwgMCk7
CisJY29tcC0+Y2xrID0gb2ZfY2xrX2dldChub2RlLCAwKTsKKwlpZiAoSVNfRVJSKGNvbXAtPmNs
aykpCisJCWNvbXAtPmNsayA9IE5VTEw7CisKKwl0eXBlID0gbXRrX2RkcF9tYXRjaGVzW2NvbXBf
aWRdLnR5cGU7CisKKwkvKiBPbmx5IERNQSBjYXBhYmxlIGNvbXBvbmVudHMgbmVlZCB0aGUgTEFS
QiBwcm9wZXJ0eSAqLworCWNvbXAtPmxhcmJfZGV2ID0gTlVMTDsKKwlpZiAodHlwZSAhPSBNVEtf
RElTUF9PVkwgJiYKKwkgICAgdHlwZSAhPSBNVEtfRElTUF9SRE1BICYmCisJICAgIHR5cGUgIT0g
TVRLX0RJU1BfV0RNQSkKKwkJcmV0dXJuIDA7CisKKwlsYXJiX25vZGUgPSBvZl9wYXJzZV9waGFu
ZGxlKG5vZGUsICJtZWRpYXRlayxsYXJiIiwgMCk7CisJaWYgKCFsYXJiX25vZGUpIHsKKwkJZGV2
X2VycihkZXYsCisJCQkiTWlzc2luZyBtZWRpYWRlayxsYXJiIHBoYW5kbGUgaW4gJXMgbm9kZVxu
IiwKKwkJCW5vZGUtPmZ1bGxfbmFtZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWxhcmJf
cGRldiA9IG9mX2ZpbmRfZGV2aWNlX2J5X25vZGUobGFyYl9ub2RlKTsKKwlpZiAoIWxhcmJfcGRl
dikgeworCQlkZXZfd2FybihkZXYsICJXYWl0aW5nIGZvciBsYXJiIGRldmljZSAlc1xuIiwKKwkJ
CSBsYXJiX25vZGUtPmZ1bGxfbmFtZSk7CisJCW9mX25vZGVfcHV0KGxhcmJfbm9kZSk7CisJCXJl
dHVybiAtRVBST0JFX0RFRkVSOworCX0KKwlvZl9ub2RlX3B1dChsYXJiX25vZGUpOworCisJY29t
cC0+bGFyYl9kZXYgPSAmbGFyYl9wZGV2LT5kZXY7CisKKwlyZXR1cm4gMDsKK30KKworaW50IG10
a19kZHBfY29tcF9yZWdpc3RlcihzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCBzdHJ1Y3QgbXRrX2Rk
cF9jb21wICpjb21wKQoreworCXN0cnVjdCBtdGtfZHJtX3ByaXZhdGUgKnByaXZhdGUgPSBkcm0t
PmRldl9wcml2YXRlOworCisJaWYgKHByaXZhdGUtPmRkcF9jb21wW2NvbXAtPmlkXSkKKwkJcmV0
dXJuIC1FQlVTWTsKKworCXByaXZhdGUtPmRkcF9jb21wW2NvbXAtPmlkXSA9IGNvbXA7CisJcmV0
dXJuIDA7Cit9CisKK3ZvaWQgbXRrX2RkcF9jb21wX3VucmVnaXN0ZXIoc3RydWN0IGRybV9kZXZp
Y2UgKmRybSwgc3RydWN0IG10a19kZHBfY29tcCAqY29tcCkKK3sKKwlzdHJ1Y3QgbXRrX2RybV9w
cml2YXRlICpwcml2YXRlID0gZHJtLT5kZXZfcHJpdmF0ZTsKKworCXByaXZhdGUtPmRkcF9jb21w
W2NvbXAtPmlkXSA9IE5VTEw7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0
ZWsvbXRrX2RybV9kZHBfY29tcC5oIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1f
ZGRwX2NvbXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjEzYmE5Ci0t
LSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwX2Nv
bXAuaApAQCAtMCwwICsxLDE1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRl
ayBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICovCisKKyNpZm5kZWYgTVRLX0RSTV9ERFBfQ09NUF9ICisjZGVmaW5lIE1US19EUk1fRERQX0NP
TVBfSAorCisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworc3RydWN0IGRldmljZTsKK3N0cnVjdCBk
ZXZpY2Vfbm9kZTsKK3N0cnVjdCBkcm1fY3J0YzsKK3N0cnVjdCBkcm1fZGV2aWNlOworc3RydWN0
IG10a19wbGFuZV9zdGF0ZTsKKworZW51bSBtdGtfZGRwX2NvbXBfdHlwZSB7CisJTVRLX0RJU1Bf
T1ZMLAorCU1US19ESVNQX1JETUEsCisJTVRLX0RJU1BfV0RNQSwKKwlNVEtfRElTUF9DT0xPUiwK
KwlNVEtfRElTUF9BQUwsCisJTVRLX0RJU1BfR0FNTUEsCisJTVRLX0RJU1BfVUZPRSwKKwlNVEtf
RFNJLAorCU1US19EUEksCisJTVRLX0RJU1BfUFdNLAorCU1US19ESVNQX01VVEVYLAorCU1US19E
SVNQX09ELAorCU1US19ERFBfQ09NUF9UWVBFX01BWCwKK307CisKK2VudW0gbXRrX2RkcF9jb21w
X2lkIHsKKwlERFBfQ09NUE9ORU5UX0FBTCwKKwlERFBfQ09NUE9ORU5UX0NPTE9SMCwKKwlERFBf
Q09NUE9ORU5UX0NPTE9SMSwKKwlERFBfQ09NUE9ORU5UX0RQSTAsCisJRERQX0NPTVBPTkVOVF9E
U0kwLAorCUREUF9DT01QT05FTlRfRFNJMSwKKwlERFBfQ09NUE9ORU5UX0dBTU1BLAorCUREUF9D
T01QT05FTlRfT0QsCisJRERQX0NPTVBPTkVOVF9PVkwwLAorCUREUF9DT01QT05FTlRfT1ZMMSwK
KwlERFBfQ09NUE9ORU5UX1BXTTAsCisJRERQX0NPTVBPTkVOVF9QV00xLAorCUREUF9DT01QT05F
TlRfUkRNQTAsCisJRERQX0NPTVBPTkVOVF9SRE1BMSwKKwlERFBfQ09NUE9ORU5UX1JETUEyLAor
CUREUF9DT01QT05FTlRfVUZPRSwKKwlERFBfQ09NUE9ORU5UX1dETUEwLAorCUREUF9DT01QT05F
TlRfV0RNQTEsCisJRERQX0NPTVBPTkVOVF9JRF9NQVgsCit9OworCitzdHJ1Y3QgbXRrX2RkcF9j
b21wOworCitzdHJ1Y3QgbXRrX2RkcF9jb21wX2Z1bmNzIHsKKwl2b2lkICgqY29uZmlnKShzdHJ1
Y3QgbXRrX2RkcF9jb21wICpjb21wLCB1bnNpZ25lZCBpbnQgdywKKwkJICAgICAgIHVuc2lnbmVk
IGludCBoLCB1bnNpZ25lZCBpbnQgdnJlZnJlc2gpOworCXZvaWQgKCpzdGFydCkoc3RydWN0IG10
a19kZHBfY29tcCAqY29tcCk7CisJdm9pZCAoKnN0b3ApKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNv
bXApOworCXZvaWQgKCplbmFibGVfdmJsYW5rKShzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wLCBz
dHJ1Y3QgZHJtX2NydGMgKmNydGMpOworCXZvaWQgKCpkaXNhYmxlX3ZibGFuaykoc3RydWN0IG10
a19kZHBfY29tcCAqY29tcCk7CisJdm9pZCAoKmxheWVyX29uKShzdHJ1Y3QgbXRrX2RkcF9jb21w
ICpjb21wLCB1bnNpZ25lZCBpbnQgaWR4KTsKKwl2b2lkICgqbGF5ZXJfb2ZmKShzdHJ1Y3QgbXRr
X2RkcF9jb21wICpjb21wLCB1bnNpZ25lZCBpbnQgaWR4KTsKKwl2b2lkICgqbGF5ZXJfY29uZmln
KShzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wLCB1bnNpZ25lZCBpbnQgaWR4LAorCQkJICAgICBz
dHJ1Y3QgbXRrX3BsYW5lX3N0YXRlICpzdGF0ZSk7Cit9OworCitzdHJ1Y3QgbXRrX2RkcF9jb21w
IHsKKwlzdHJ1Y3QgY2xrICpjbGs7CisJdm9pZCBfX2lvbWVtICpyZWdzOworCWludCBpcnE7CisJ
c3RydWN0IGRldmljZSAqbGFyYl9kZXY7CisJZW51bSBtdGtfZGRwX2NvbXBfaWQgaWQ7CisJY29u
c3Qgc3RydWN0IG10a19kZHBfY29tcF9mdW5jcyAqZnVuY3M7Cit9OworCitzdGF0aWMgaW5saW5l
IHZvaWQgbXRrX2RkcF9jb21wX2NvbmZpZyhzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wLAorCQkJ
CSAgICAgICB1bnNpZ25lZCBpbnQgdywgdW5zaWduZWQgaW50IGgsCisJCQkJICAgICAgIHVuc2ln
bmVkIGludCB2cmVmcmVzaCkKK3sKKwlpZiAoY29tcC0+ZnVuY3MgJiYgY29tcC0+ZnVuY3MtPmNv
bmZpZykKKwkJY29tcC0+ZnVuY3MtPmNvbmZpZyhjb21wLCB3LCBoLCB2cmVmcmVzaCk7Cit9CisK
K3N0YXRpYyBpbmxpbmUgdm9pZCBtdGtfZGRwX2NvbXBfc3RhcnQoc3RydWN0IG10a19kZHBfY29t
cCAqY29tcCkKK3sKKwlpZiAoY29tcC0+ZnVuY3MgJiYgY29tcC0+ZnVuY3MtPnN0YXJ0KQorCQlj
b21wLT5mdW5jcy0+c3RhcnQoY29tcCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtdGtfZGRw
X2NvbXBfc3RvcChzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKQoreworCWlmIChjb21wLT5mdW5j
cyAmJiBjb21wLT5mdW5jcy0+c3RvcCkKKwkJY29tcC0+ZnVuY3MtPnN0b3AoY29tcCk7Cit9CisK
K3N0YXRpYyBpbmxpbmUgdm9pZCBtdGtfZGRwX2NvbXBfZW5hYmxlX3ZibGFuayhzdHJ1Y3QgbXRr
X2RkcF9jb21wICpjb21wLAorCQkJCQkgICAgICBzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJ
aWYgKGNvbXAtPmZ1bmNzICYmIGNvbXAtPmZ1bmNzLT5lbmFibGVfdmJsYW5rKQorCQljb21wLT5m
dW5jcy0+ZW5hYmxlX3ZibGFuayhjb21wLCBjcnRjKTsKK30KKworc3RhdGljIGlubGluZSB2b2lk
IG10a19kZHBfY29tcF9kaXNhYmxlX3ZibGFuayhzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKQor
eworCWlmIChjb21wLT5mdW5jcyAmJiBjb21wLT5mdW5jcy0+ZGlzYWJsZV92YmxhbmspCisJCWNv
bXAtPmZ1bmNzLT5kaXNhYmxlX3ZibGFuayhjb21wKTsKK30KKworc3RhdGljIGlubGluZSB2b2lk
IG10a19kZHBfY29tcF9sYXllcl9vbihzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wLAorCQkJCQkg
dW5zaWduZWQgaW50IGlkeCkKK3sKKwlpZiAoY29tcC0+ZnVuY3MgJiYgY29tcC0+ZnVuY3MtPmxh
eWVyX29uKQorCQljb21wLT5mdW5jcy0+bGF5ZXJfb24oY29tcCwgaWR4KTsKK30KKworc3RhdGlj
IGlubGluZSB2b2lkIG10a19kZHBfY29tcF9sYXllcl9vZmYoc3RydWN0IG10a19kZHBfY29tcCAq
Y29tcCwKKwkJCQkJICB1bnNpZ25lZCBpbnQgaWR4KQoreworCWlmIChjb21wLT5mdW5jcyAmJiBj
b21wLT5mdW5jcy0+bGF5ZXJfb2ZmKQorCQljb21wLT5mdW5jcy0+bGF5ZXJfb2ZmKGNvbXAsIGlk
eCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtdGtfZGRwX2NvbXBfbGF5ZXJfY29uZmlnKHN0
cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAsCisJCQkJCSAgICAgdW5zaWduZWQgaW50IGlkeCwKKwkJ
CQkJICAgICBzdHJ1Y3QgbXRrX3BsYW5lX3N0YXRlICpzdGF0ZSkKK3sKKwlpZiAoY29tcC0+ZnVu
Y3MgJiYgY29tcC0+ZnVuY3MtPmxheWVyX2NvbmZpZykKKwkJY29tcC0+ZnVuY3MtPmxheWVyX2Nv
bmZpZyhjb21wLCBpZHgsIHN0YXRlKTsKK30KKworaW50IG10a19kZHBfY29tcF9nZXRfaWQoc3Ry
dWN0IGRldmljZV9ub2RlICpub2RlLAorCQkJZW51bSBtdGtfZGRwX2NvbXBfdHlwZSBjb21wX3R5
cGUpOworaW50IG10a19kZHBfY29tcF9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRl
dmljZV9ub2RlICpjb21wX25vZGUsCisJCSAgICAgIHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAs
IGVudW0gbXRrX2RkcF9jb21wX2lkIGNvbXBfaWQsCisJCSAgICAgIGNvbnN0IHN0cnVjdCBtdGtf
ZGRwX2NvbXBfZnVuY3MgKmZ1bmNzKTsKK2ludCBtdGtfZGRwX2NvbXBfcmVnaXN0ZXIoc3RydWN0
IGRybV9kZXZpY2UgKmRybSwgc3RydWN0IG10a19kZHBfY29tcCAqY29tcCk7Cit2b2lkIG10a19k
ZHBfY29tcF91bnJlZ2lzdGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sIHN0cnVjdCBtdGtfZGRw
X2NvbXAgKmNvbXApOworCisjZW5kaWYgLyogTVRLX0RSTV9ERFBfQ09NUF9IICovCmRpZmYgLS1n
aXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuYyBiL2RyaXZlcnMvZ3B1
L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmQyNjhlNWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0
ZWsvbXRrX2RybV9kcnYuYwpAQCAtMCwwICsxLDU3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykg
MjAxNSBNZWRpYVRlayBJbmMuCisgKiBBdXRob3I6IFlUIFNIRU4gPHl0LnNoZW5AbWVkaWF0ZWsu
Y29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
LworCisjaW5jbHVkZSA8ZHJtL2RybVAuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pYy5oPgor
I2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fY3J0
Y19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2dlbS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nv
bXBvbmVudC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvbW11Lmg+CisjaW5jbHVkZSA8bGludXgvb2Zf
YWRkcmVzcy5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGlu
dXgvcG1fcnVudGltZS5oPgorCisjaW5jbHVkZSAibXRrX2RybV9jcnRjLmgiCisjaW5jbHVkZSAi
bXRrX2RybV9kZHAuaCIKKyNpbmNsdWRlICJtdGtfZHJtX2RkcF9jb21wLmgiCisjaW5jbHVkZSAi
bXRrX2RybV9kcnYuaCIKKyNpbmNsdWRlICJtdGtfZHJtX2ZiLmgiCisjaW5jbHVkZSAibXRrX2Ry
bV9nZW0uaCIKKworI2RlZmluZSBEUklWRVJfTkFNRSAibWVkaWF0ZWsiCisjZGVmaW5lIERSSVZF
Ul9ERVNDICJNZWRpYXRlayBTb0MgRFJNIgorI2RlZmluZSBEUklWRVJfREFURSAiMjAxNTA1MTMi
CisjZGVmaW5lIERSSVZFUl9NQUpPUiAxCisjZGVmaW5lIERSSVZFUl9NSU5PUiAwCisKK3N0YXRp
YyB2b2lkIG10a19hdG9taWNfc2NoZWR1bGUoc3RydWN0IG10a19kcm1fcHJpdmF0ZSAqcHJpdmF0
ZSwKKwkJCQlzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUpCit7CisJcHJpdmF0ZS0+Y29t
bWl0LnN0YXRlID0gc3RhdGU7CisJc2NoZWR1bGVfd29yaygmcHJpdmF0ZS0+Y29tbWl0Lndvcmsp
OworfQorCitzdGF0aWMgdm9pZCBtdGtfYXRvbWljX3dhaXRfZm9yX2ZlbmNlcyhzdHJ1Y3QgZHJt
X2F0b21pY19zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IGRybV9wbGFuZSAqcGxhbmU7CisJc3Ry
dWN0IGRybV9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGU7CisJaW50IGk7CisKKwlmb3JfZWFjaF9w
bGFuZV9pbl9zdGF0ZShzdGF0ZSwgcGxhbmUsIHBsYW5lX3N0YXRlLCBpKQorCQltdGtfZmJfd2Fp
dChwbGFuZS0+c3RhdGUtPmZiKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2F0b21pY19jb21wbGV0
ZShzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2YXRlLAorCQkJCXN0cnVjdCBkcm1fYXRvbWlj
X3N0YXRlICpzdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0gcHJpdmF0ZS0+ZHJt
OworCisJbXRrX2F0b21pY193YWl0X2Zvcl9mZW5jZXMoc3RhdGUpOworCisJZHJtX2F0b21pY19o
ZWxwZXJfY29tbWl0X21vZGVzZXRfZGlzYWJsZXMoZHJtLCBzdGF0ZSk7CisJZHJtX2F0b21pY19o
ZWxwZXJfY29tbWl0X3BsYW5lcyhkcm0sIHN0YXRlLCBmYWxzZSk7CisJZHJtX2F0b21pY19oZWxw
ZXJfY29tbWl0X21vZGVzZXRfZW5hYmxlcyhkcm0sIHN0YXRlKTsKKwlkcm1fYXRvbWljX2hlbHBl
cl93YWl0X2Zvcl92YmxhbmtzKGRybSwgc3RhdGUpOworCWRybV9hdG9taWNfaGVscGVyX2NsZWFu
dXBfcGxhbmVzKGRybSwgc3RhdGUpOworCWRybV9hdG9taWNfc3RhdGVfZnJlZShzdGF0ZSk7Cit9
CisKK3N0YXRpYyB2b2lkIG10a19hdG9taWNfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmsp
Cit7CisJc3RydWN0IG10a19kcm1fcHJpdmF0ZSAqcHJpdmF0ZSA9IGNvbnRhaW5lcl9vZih3b3Jr
LAorCQkJc3RydWN0IG10a19kcm1fcHJpdmF0ZSwgY29tbWl0LndvcmspOworCisJbXRrX2F0b21p
Y19jb21wbGV0ZShwcml2YXRlLCBwcml2YXRlLT5jb21taXQuc3RhdGUpOworfQorCitzdGF0aWMg
aW50IG10a19hdG9taWNfY29tbWl0KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sCisJCQkgICAgIHN0
cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwKKwkJCSAgICAgYm9vbCBhc3luYykKK3sKKwlz
dHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2YXRlID0gZHJtLT5kZXZfcHJpdmF0ZTsKKwlpbnQg
cmV0OworCisJcmV0ID0gZHJtX2F0b21pY19oZWxwZXJfcHJlcGFyZV9wbGFuZXMoZHJtLCBzdGF0
ZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCW11dGV4X2xvY2soJnByaXZhdGUtPmNv
bW1pdC5sb2NrKTsKKwlmbHVzaF93b3JrKCZwcml2YXRlLT5jb21taXQud29yayk7CisKKwlkcm1f
YXRvbWljX2hlbHBlcl9zd2FwX3N0YXRlKGRybSwgc3RhdGUpOworCisJaWYgKGFzeW5jKQorCQlt
dGtfYXRvbWljX3NjaGVkdWxlKHByaXZhdGUsIHN0YXRlKTsKKwllbHNlCisJCW10a19hdG9taWNf
Y29tcGxldGUocHJpdmF0ZSwgc3RhdGUpOworCisJbXV0ZXhfdW5sb2NrKCZwcml2YXRlLT5jb21t
aXQubG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fbW9k
ZV9jb25maWdfZnVuY3MgbXRrX2RybV9tb2RlX2NvbmZpZ19mdW5jcyA9IHsKKwkuZmJfY3JlYXRl
ID0gbXRrX2RybV9tb2RlX2ZiX2NyZWF0ZSwKKwkuYXRvbWljX2NoZWNrID0gZHJtX2F0b21pY19o
ZWxwZXJfY2hlY2ssCisJLmF0b21pY19jb21taXQgPSBtdGtfYXRvbWljX2NvbW1pdCwKK307CisK
K3N0YXRpYyBjb25zdCBlbnVtIG10a19kZHBfY29tcF9pZCBtdGtfZGRwX21haW5bXSA9IHsKKwlE
RFBfQ09NUE9ORU5UX09WTDAsCisJRERQX0NPTVBPTkVOVF9DT0xPUjAsCisJRERQX0NPTVBPTkVO
VF9BQUwsCisJRERQX0NPTVBPTkVOVF9PRCwKKwlERFBfQ09NUE9ORU5UX1JETUEwLAorCUREUF9D
T01QT05FTlRfVUZPRSwKKwlERFBfQ09NUE9ORU5UX0RTSTAsCisJRERQX0NPTVBPTkVOVF9QV00w
LAorfTsKKworc3RhdGljIGNvbnN0IGVudW0gbXRrX2RkcF9jb21wX2lkIG10a19kZHBfZXh0W10g
PSB7CisJRERQX0NPTVBPTkVOVF9PVkwxLAorCUREUF9DT01QT05FTlRfQ09MT1IxLAorCUREUF9D
T01QT05FTlRfR0FNTUEsCisJRERQX0NPTVBPTkVOVF9SRE1BMSwKKwlERFBfQ09NUE9ORU5UX0RQ
STAsCit9OworCitzdGF0aWMgaW50IG10a19kcm1fa21zX2luaXQoc3RydWN0IGRybV9kZXZpY2Ug
KmRybSkKK3sKKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2YXRlID0gZHJtLT5kZXZfcHJp
dmF0ZTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCWludCByZXQ7CisKKwlpZiAo
IWlvbW11X3ByZXNlbnQoJnBsYXRmb3JtX2J1c190eXBlKSkKKwkJcmV0dXJuIC1FUFJPQkVfREVG
RVI7CisKKwlwZGV2ID0gb2ZfZmluZF9kZXZpY2VfYnlfbm9kZShwcml2YXRlLT5tdXRleF9ub2Rl
KTsKKwlpZiAoIXBkZXYpIHsKKwkJZGV2X2Vycihkcm0tPmRldiwgIldhaXRpbmcgZm9yIGRpc3At
bXV0ZXggZGV2aWNlICVzXG4iLAorCQkJcHJpdmF0ZS0+bXV0ZXhfbm9kZS0+ZnVsbF9uYW1lKTsK
KwkJb2Zfbm9kZV9wdXQocHJpdmF0ZS0+bXV0ZXhfbm9kZSk7CisJCXJldHVybiAtRVBST0JFX0RF
RkVSOworCX0KKwlwcml2YXRlLT5tdXRleF9kZXYgPSAmcGRldi0+ZGV2OworCisJZHJtX21vZGVf
Y29uZmlnX2luaXQoZHJtKTsKKworCWRybS0+bW9kZV9jb25maWcubWluX3dpZHRoID0gNjQ7CisJ
ZHJtLT5tb2RlX2NvbmZpZy5taW5faGVpZ2h0ID0gNjQ7CisKKwkvKgorCSAqIHNldCBtYXggd2lk
dGggYW5kIGhlaWdodCBhcyBkZWZhdWx0IHZhbHVlKDQwOTZ4NDA5NikuCisJICogdGhpcyB2YWx1
ZSB3b3VsZCBiZSB1c2VkIHRvIGNoZWNrIGZyYW1lYnVmZmVyIHNpemUgbGltaXRhdGlvbgorCSAq
IGF0IGRybV9tb2RlX2FkZGZiKCkuCisJICovCisJZHJtLT5tb2RlX2NvbmZpZy5tYXhfd2lkdGgg
PSA0MDk2OworCWRybS0+bW9kZV9jb25maWcubWF4X2hlaWdodCA9IDQwOTY7CisJZHJtLT5tb2Rl
X2NvbmZpZy5mdW5jcyA9ICZtdGtfZHJtX21vZGVfY29uZmlnX2Z1bmNzOworCisJcmV0ID0gY29t
cG9uZW50X2JpbmRfYWxsKGRybS0+ZGV2LCBkcm0pOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2Nv
bmZpZ19jbGVhbnVwOworCisJLyoKKwkgKiBXZSBjdXJyZW50bHkgc3VwcG9ydCB0d28gZml4ZWQg
ZGF0YSBzdHJlYW1zLCBlYWNoIHN0YXRpY2FsbHkKKwkgKiBhc3NpZ25lZCB0byBhIGNydGM6CisJ
ICogT1ZMMCAtPiBDT0xPUjAgLT4gQUFMIC0+IE9EIC0+IFJETUEwIC0+IFVGT0UgLT4gRFNJMCAu
Li4KKwkgKi8KKwlyZXQgPSBtdGtfZHJtX2NydGNfY3JlYXRlKGRybSwgbXRrX2RkcF9tYWluLCBB
UlJBWV9TSVpFKG10a19kZHBfbWFpbikpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycl9jb21w
b25lbnRfdW5iaW5kOworCS8qIC4uLiBhbmQgT1ZMMSAtPiBDT0xPUjEgLT4gR0FNTUEgLT4gUkRN
QTEgLT4gRFBJMC4gKi8KKwlyZXQgPSBtdGtfZHJtX2NydGNfY3JlYXRlKGRybSwgbXRrX2RkcF9l
eHQsIEFSUkFZX1NJWkUobXRrX2RkcF9leHQpKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJf
Y29tcG9uZW50X3VuYmluZDsKKworCS8qCisJICogV2UgZG9uJ3QgdXNlIHRoZSBkcm1faXJxX2lu
c3RhbGwoKSBoZWxwZXJzIHByb3ZpZGVkIGJ5IHRoZSBEUk0KKwkgKiBjb3JlLCBzbyB3ZSBuZWVk
IHRvIHNldCB0aGlzIG1hbnVhbGx5IGluIG9yZGVyIHRvIGFsbG93IHRoZQorCSAqIERSTV9JT0NU
TF9XQUlUX1ZCTEFOSyB0byBvcGVyYXRlIGNvcnJlY3RseS4KKwkgKi8KKwlkcm0tPmlycV9lbmFi
bGVkID0gdHJ1ZTsKKwlyZXQgPSBkcm1fdmJsYW5rX2luaXQoZHJtLCBNQVhfQ1JUQyk7CisJaWYg
KHJldCA8IDApCisJCWdvdG8gZXJyX2NvbXBvbmVudF91bmJpbmQ7CisKKwlkcm1fa21zX2hlbHBl
cl9wb2xsX2luaXQoZHJtKTsKKwlkcm1fbW9kZV9jb25maWdfcmVzZXQoZHJtKTsKKworCXJldHVy
biAwOworCitlcnJfY29tcG9uZW50X3VuYmluZDoKKwljb21wb25lbnRfdW5iaW5kX2FsbChkcm0t
PmRldiwgZHJtKTsKK2Vycl9jb25maWdfY2xlYW51cDoKKwlkcm1fbW9kZV9jb25maWdfY2xlYW51
cChkcm0pOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgbXRrX2RybV9rbXNfZGVp
bml0KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pCit7CisJZHJtX2ttc19oZWxwZXJfcG9sbF9maW5p
KGRybSk7CisKKwlkcm1fdmJsYW5rX2NsZWFudXAoZHJtKTsKKwljb21wb25lbnRfdW5iaW5kX2Fs
bChkcm0tPmRldiwgZHJtKTsKKwlkcm1fbW9kZV9jb25maWdfY2xlYW51cChkcm0pOworfQorCitz
dGF0aWMgaW50IG10a19kcm1fdW5sb2FkKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pCit7CisJbXRr
X2RybV9rbXNfZGVpbml0KGRybSk7CisJZHJtLT5kZXZfcHJpdmF0ZSA9IE5VTEw7CisKKwlyZXR1
cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBtdGtf
ZHJtX2dlbV92bV9vcHMgPSB7CisJLm9wZW4gPSBkcm1fZ2VtX3ZtX29wZW4sCisJLmNsb3NlID0g
ZHJtX2dlbV92bV9jbG9zZSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRp
b25zIG10a19kcm1fZm9wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkub3BlbiA9IGRy
bV9vcGVuLAorCS5yZWxlYXNlID0gZHJtX3JlbGVhc2UsCisJLnVubG9ja2VkX2lvY3RsID0gZHJt
X2lvY3RsLAorCS5tbWFwID0gbXRrX2RybV9nZW1fbW1hcCwKKwkucG9sbCA9IGRybV9wb2xsLAor
CS5yZWFkID0gZHJtX3JlYWQsCisjaWZkZWYgQ09ORklHX0NPTVBBVAorCS5jb21wYXRfaW9jdGwg
PSBkcm1fY29tcGF0X2lvY3RsLAorI2VuZGlmCit9OworCitzdGF0aWMgc3RydWN0IGRybV9kcml2
ZXIgbXRrX2RybV9kcml2ZXIgPSB7CisJLmRyaXZlcl9mZWF0dXJlcyA9IERSSVZFUl9NT0RFU0VU
IHwgRFJJVkVSX0dFTSB8IERSSVZFUl9QUklNRSB8CisJCQkgICBEUklWRVJfQVRPTUlDLAorCS51
bmxvYWQgPSBtdGtfZHJtX3VubG9hZCwKKworCS5nZXRfdmJsYW5rX2NvdW50ZXIgPSBkcm1fdmJs
YW5rX2NvdW50LAorCS5lbmFibGVfdmJsYW5rID0gbXRrX2RybV9jcnRjX2VuYWJsZV92Ymxhbmss
CisJLmRpc2FibGVfdmJsYW5rID0gbXRrX2RybV9jcnRjX2Rpc2FibGVfdmJsYW5rLAorCisJLmdl
bV9mcmVlX29iamVjdCA9IG10a19kcm1fZ2VtX2ZyZWVfb2JqZWN0LAorCS5nZW1fdm1fb3BzID0g
Jm10a19kcm1fZ2VtX3ZtX29wcywKKwkuZHVtYl9jcmVhdGUgPSBtdGtfZHJtX2dlbV9kdW1iX2Ny
ZWF0ZSwKKwkuZHVtYl9tYXBfb2Zmc2V0ID0gbXRrX2RybV9nZW1fZHVtYl9tYXBfb2Zmc2V0LAor
CS5kdW1iX2Rlc3Ryb3kgPSBkcm1fZ2VtX2R1bWJfZGVzdHJveSwKKworCS5wcmltZV9oYW5kbGVf
dG9fZmQgPSBkcm1fZ2VtX3ByaW1lX2hhbmRsZV90b19mZCwKKwkucHJpbWVfZmRfdG9faGFuZGxl
ID0gZHJtX2dlbV9wcmltZV9mZF90b19oYW5kbGUsCisJLmdlbV9wcmltZV9leHBvcnQgPSBkcm1f
Z2VtX3ByaW1lX2V4cG9ydCwKKwkuZ2VtX3ByaW1lX2ltcG9ydCA9IGRybV9nZW1fcHJpbWVfaW1w
b3J0LAorCS5nZW1fcHJpbWVfZ2V0X3NnX3RhYmxlID0gbXRrX2dlbV9wcmltZV9nZXRfc2dfdGFi
bGUsCisJLmdlbV9wcmltZV9pbXBvcnRfc2dfdGFibGUgPSBtdGtfZ2VtX3ByaW1lX2ltcG9ydF9z
Z190YWJsZSwKKwkuZ2VtX3ByaW1lX21tYXAgPSBtdGtfZHJtX2dlbV9tbWFwX2J1ZiwKKwkuZm9w
cyA9ICZtdGtfZHJtX2ZvcHMsCisKKwkubmFtZSA9IERSSVZFUl9OQU1FLAorCS5kZXNjID0gRFJJ
VkVSX0RFU0MsCisJLmRhdGUgPSBEUklWRVJfREFURSwKKwkubWFqb3IgPSBEUklWRVJfTUFKT1Is
CisJLm1pbm9yID0gRFJJVkVSX01JTk9SLAorfTsKKworc3RhdGljIGludCBjb21wYXJlX29mKHN0
cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKK3sKKwlyZXR1cm4gZGV2LT5vZl9ub2RlID09
IGRhdGE7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2RybV9iaW5kKHN0cnVjdCBkZXZpY2UgKmRldikK
K3sKKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2YXRlID0gZGV2X2dldF9kcnZkYXRhKGRl
dik7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybTsKKwlpbnQgcmV0OworCisJZHJtID0gZHJtX2Rl
dl9hbGxvYygmbXRrX2RybV9kcml2ZXIsIGRldik7CisJaWYgKCFkcm0pCisJCXJldHVybiAtRU5P
TUVNOworCisJZHJtX2Rldl9zZXRfdW5pcXVlKGRybSwgZGV2X25hbWUoZGV2KSk7CisKKwlyZXQg
PSBkcm1fZGV2X3JlZ2lzdGVyKGRybSwgMCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyX2Zy
ZWU7CisKKwlkcm0tPmRldl9wcml2YXRlID0gcHJpdmF0ZTsKKwlwcml2YXRlLT5kcm0gPSBkcm07
CisKKwlyZXQgPSBtdGtfZHJtX2ttc19pbml0KGRybSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8g
ZXJyX3VucmVnaXN0ZXI7CisKKwlyZXR1cm4gMDsKKworZXJyX3VucmVnaXN0ZXI6CisJZHJtX2Rl
dl91bnJlZ2lzdGVyKGRybSk7CitlcnJfZnJlZToKKwlkcm1fZGV2X3VucmVmKGRybSk7CisJcmV0
dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgbXRrX2RybV91bmJpbmQoc3RydWN0IGRldmljZSAq
ZGV2KQoreworCXN0cnVjdCBtdGtfZHJtX3ByaXZhdGUgKnByaXZhdGUgPSBkZXZfZ2V0X2RydmRh
dGEoZGV2KTsKKworCWRybV9wdXRfZGV2KHByaXZhdGUtPmRybSk7CisJcHJpdmF0ZS0+ZHJtID0g
TlVMTDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21wb25lbnRfbWFzdGVyX29wcyBtdGtf
ZHJtX29wcyA9IHsKKwkuYmluZAkJPSBtdGtfZHJtX2JpbmQsCisJLnVuYmluZAkJPSBtdGtfZHJt
X3VuYmluZCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG10a19kZHBf
Y29tcF9kdF9pZHNbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1kaXNw
LW92bCIsICAgLmRhdGEgPSAodm9pZCAqKU1US19ESVNQX09WTCB9LAorCXsgLmNvbXBhdGlibGUg
PSAibWVkaWF0ZWssbXQ4MTczLWRpc3AtcmRtYSIsICAuZGF0YSA9ICh2b2lkICopTVRLX0RJU1Bf
UkRNQSB9LAorCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ4MTczLWRpc3Atd2RtYSIsICAu
ZGF0YSA9ICh2b2lkICopTVRLX0RJU1BfV0RNQSB9LAorCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0
ZWssbXQ4MTczLWRpc3AtY29sb3IiLCAuZGF0YSA9ICh2b2lkICopTVRLX0RJU1BfQ09MT1IgfSwK
Kwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1kaXNwLWFhbCIsICAgLmRhdGEgPSAo
dm9pZCAqKU1US19ESVNQX0FBTH0sCisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMt
ZGlzcC1nYW1tYSIsIC5kYXRhID0gKHZvaWQgKilNVEtfRElTUF9HQU1NQSwgfSwKKwl7IC5jb21w
YXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1kaXNwLXVmb2UiLCAgLmRhdGEgPSAodm9pZCAqKU1U
S19ESVNQX1VGT0UgfSwKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1kc2kiLCAg
ICAgICAgLmRhdGEgPSAodm9pZCAqKU1US19EU0kgfSwKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlh
dGVrLG10ODE3My1kcGkiLCAgICAgICAgLmRhdGEgPSAodm9pZCAqKU1US19EUEkgfSwKKwl7IC5j
b21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1kaXNwLW11dGV4IiwgLmRhdGEgPSAodm9pZCAq
KU1US19ESVNQX01VVEVYIH0sCisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtZGlz
cC1wd20iLCAgIC5kYXRhID0gKHZvaWQgKilNVEtfRElTUF9QV00gfSwKKwl7IC5jb21wYXRpYmxl
ID0gIm1lZGlhdGVrLG10ODE3My1kaXNwLW9kIiwgICAgLmRhdGEgPSAodm9pZCAqKU1US19ESVNQ
X09EIH0sCisJeyB9Cit9OworCitzdGF0aWMgaW50IG10a19kcm1fcHJvYmUoc3RydWN0IHBsYXRm
b3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2Owor
CXN0cnVjdCBtdGtfZHJtX3ByaXZhdGUgKnByaXZhdGU7CisJc3RydWN0IHJlc291cmNlICptZW07
CisJc3RydWN0IGRldmljZV9ub2RlICpub2RlOworCXN0cnVjdCBjb21wb25lbnRfbWF0Y2ggKm1h
dGNoID0gTlVMTDsKKwlpbnQgcmV0OworCWludCBpOworCisJcHJpdmF0ZSA9IGRldm1fa3phbGxv
YyhkZXYsIHNpemVvZigqcHJpdmF0ZSksIEdGUF9LRVJORUwpOworCWlmICghcHJpdmF0ZSkKKwkJ
cmV0dXJuIC1FTk9NRU07CisKKwltdXRleF9pbml0KCZwcml2YXRlLT5jb21taXQubG9jayk7CisJ
SU5JVF9XT1JLKCZwcml2YXRlLT5jb21taXQud29yaywgbXRrX2F0b21pY193b3JrKTsKKworCW1l
bSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJcHJp
dmF0ZS0+Y29uZmlnX3JlZ3MgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCBtZW0pOworCWlm
IChJU19FUlIocHJpdmF0ZS0+Y29uZmlnX3JlZ3MpKSB7CisJCXJldCA9IFBUUl9FUlIocHJpdmF0
ZS0+Y29uZmlnX3JlZ3MpOworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBpb3JlbWFwIG1tc3lz
LWNvbmZpZyByZXNvdXJjZTogJWRcbiIsCisJCQlyZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwor
CS8qIEl0ZXJhdGUgb3ZlciBzaWJsaW5nIERJU1AgZnVuY3Rpb24gYmxvY2tzICovCisJZm9yX2Vh
Y2hfY2hpbGRfb2Zfbm9kZShkZXYtPm9mX25vZGUtPnBhcmVudCwgbm9kZSkgeworCQljb25zdCBz
dHJ1Y3Qgb2ZfZGV2aWNlX2lkICpvZl9pZDsKKwkJZW51bSBtdGtfZGRwX2NvbXBfdHlwZSBjb21w
X3R5cGU7CisJCWludCBjb21wX2lkOworCisJCW9mX2lkID0gb2ZfbWF0Y2hfbm9kZShtdGtfZGRw
X2NvbXBfZHRfaWRzLCBub2RlKTsKKwkJaWYgKCFvZl9pZCkKKwkJCWNvbnRpbnVlOworCisJCWlm
ICghb2ZfZGV2aWNlX2lzX2F2YWlsYWJsZShub2RlKSkgeworCQkJZGV2X2RiZyhkZXYsICJTa2lw
cGluZyBkaXNhYmxlZCBjb21wb25lbnQgJXNcbiIsCisJCQkJbm9kZS0+ZnVsbF9uYW1lKTsKKwkJ
CWNvbnRpbnVlOworCQl9CisKKwkJY29tcF90eXBlID0gKGVudW0gbXRrX2RkcF9jb21wX3R5cGUp
b2ZfaWQtPmRhdGE7CisKKwkJaWYgKGNvbXBfdHlwZSA9PSBNVEtfRElTUF9NVVRFWCkgeworCQkJ
cHJpdmF0ZS0+bXV0ZXhfbm9kZSA9IG9mX25vZGVfZ2V0KG5vZGUpOworCQkJY29udGludWU7CisJ
CX0KKworCQljb21wX2lkID0gbXRrX2RkcF9jb21wX2dldF9pZChub2RlLCBjb21wX3R5cGUpOwor
CQlpZiAoY29tcF9pZCA8IDApIHsKKwkJCWRldl93YXJuKGRldiwgIlNraXBwaW5nIHVua25vd24g
Y29tcG9uZW50ICVzXG4iLAorCQkJCSBub2RlLT5mdWxsX25hbWUpOworCQkJY29udGludWU7CisJ
CX0KKworCQlwcml2YXRlLT5jb21wX25vZGVbY29tcF9pZF0gPSBvZl9ub2RlX2dldChub2RlKTsK
KworCQkvKgorCQkgKiBDdXJyZW50bHkgb25seSB0aGUgT1ZMLCBSRE1BLCBEU0ksIGFuZCBEUEkg
YmxvY2tzIGhhdmUKKwkJICogc2VwYXJhdGUgY29tcG9uZW50IHBsYXRmb3JtIGRyaXZlcnMgYW5k
IGluaXRpYWxpemUgdGhlaXIgb3duCisJCSAqIEREUCBjb21wb25lbnQgc3RydWN0dXJlLiBUaGUg
b3RoZXJzIGFyZSBpbml0aWFsaXplZCBoZXJlLgorCQkgKi8KKwkJaWYgKGNvbXBfdHlwZSA9PSBN
VEtfRElTUF9PVkwgfHwKKwkJICAgIGNvbXBfdHlwZSA9PSBNVEtfRElTUF9SRE1BIHx8CisJCSAg
ICBjb21wX3R5cGUgPT0gTVRLX0RTSSB8fAorCQkgICAgY29tcF90eXBlID09IE1US19EUEkpIHsK
KwkJCWRldl9pbmZvKGRldiwgIkFkZGluZyBjb21wb25lbnQgbWF0Y2ggZm9yICVzXG4iLAorCQkJ
CSBub2RlLT5mdWxsX25hbWUpOworCQkJY29tcG9uZW50X21hdGNoX2FkZChkZXYsICZtYXRjaCwg
Y29tcGFyZV9vZiwgbm9kZSk7CisJCX0gZWxzZSB7CisJCQlzdHJ1Y3QgbXRrX2RkcF9jb21wICpj
b21wOworCisJCQljb21wID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpjb21wKSwgR0ZQX0tF
Uk5FTCk7CisJCQlpZiAoIWNvbXApIHsKKwkJCQlyZXQgPSAtRU5PTUVNOworCQkJCWdvdG8gZXJy
X25vZGU7CisJCQl9CisKKwkJCXJldCA9IG10a19kZHBfY29tcF9pbml0KGRldiwgbm9kZSwgY29t
cCwgY29tcF9pZCwgTlVMTCk7CisJCQlpZiAocmV0KQorCQkJCWdvdG8gZXJyX25vZGU7CisKKwkJ
CXByaXZhdGUtPmRkcF9jb21wW2NvbXBfaWRdID0gY29tcDsKKwkJfQorCX0KKworCWlmICghcHJp
dmF0ZS0+bXV0ZXhfbm9kZSkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBmaW5kIGRpc3At
bXV0ZXggbm9kZVxuIik7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyX25vZGU7CisJfQor
CisJcG1fcnVudGltZV9lbmFibGUoZGV2KTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYs
IHByaXZhdGUpOworCisJcmV0ID0gY29tcG9uZW50X21hc3Rlcl9hZGRfd2l0aF9tYXRjaChkZXYs
ICZtdGtfZHJtX29wcywgbWF0Y2gpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX3BtOworCisJcmV0
dXJuIDA7CisKK2Vycl9wbToKKwlwbV9ydW50aW1lX2Rpc2FibGUoZGV2KTsKK2Vycl9ub2RlOgor
CW9mX25vZGVfcHV0KHByaXZhdGUtPm11dGV4X25vZGUpOworCWZvciAoaSA9IDA7IGkgPCBERFBf
Q09NUE9ORU5UX0lEX01BWDsgaSsrKQorCQlvZl9ub2RlX3B1dChwcml2YXRlLT5jb21wX25vZGVb
aV0pOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2RybV9yZW1vdmUoc3RydWN0
IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2
YXRlID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJaW50IGk7CisKKwljb21wb25lbnRf
bWFzdGVyX2RlbCgmcGRldi0+ZGV2LCAmbXRrX2RybV9vcHMpOworCXBtX3J1bnRpbWVfZGlzYWJs
ZSgmcGRldi0+ZGV2KTsKKwlvZl9ub2RlX3B1dChwcml2YXRlLT5tdXRleF9ub2RlKTsKKwlmb3Ig
KGkgPSAwOyBpIDwgRERQX0NPTVBPTkVOVF9JRF9NQVg7IGkrKykKKwkJb2Zfbm9kZV9wdXQocHJp
dmF0ZS0+Y29tcF9ub2RlW2ldKTsKKworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1BN
X1NMRUVQCitzdGF0aWMgaW50IG10a19kcm1fc3lzX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2
KQoreworCXN0cnVjdCBtdGtfZHJtX3ByaXZhdGUgKnByaXZhdGUgPSBkZXZfZ2V0X2RydmRhdGEo
ZGV2KTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0gcHJpdmF0ZS0+ZHJtOworCXN0cnVjdCBk
cm1fY29ubmVjdG9yICpjb25uOworCisJZHJtX2ttc19oZWxwZXJfcG9sbF9kaXNhYmxlKGRybSk7
CisKKwlkcm1fbW9kZXNldF9sb2NrX2FsbChkcm0pOworCWxpc3RfZm9yX2VhY2hfZW50cnkoY29u
biwgJmRybS0+bW9kZV9jb25maWcuY29ubmVjdG9yX2xpc3QsIGhlYWQpIHsKKwkJaW50IG9sZF9k
cG1zID0gY29ubi0+ZHBtczsKKworCQlpZiAoY29ubi0+ZnVuY3MtPmRwbXMpCisJCQljb25uLT5m
dW5jcy0+ZHBtcyhjb25uLCBEUk1fTU9ERV9EUE1TX09GRik7CisKKwkJLyogU2V0IHRoZSBvbGQg
bW9kZSBiYWNrIHRvIHRoZSBjb25uZWN0b3IgZm9yIHJlc3VtZSAqLworCQljb25uLT5kcG1zID0g
b2xkX2RwbXM7CisJfQorCWRybV9tb2Rlc2V0X3VubG9ja19hbGwoZHJtKTsKKworCURSTV9ERUJV
R19EUklWRVIoIm10a19kcm1fc3lzX3N1c3BlbmRcbiIpOworCXJldHVybiAwOworfQorCitzdGF0
aWMgaW50IG10a19kcm1fc3lzX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0
IG10a19kcm1fcHJpdmF0ZSAqcHJpdmF0ZSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVj
dCBkcm1fZGV2aWNlICpkcm0gPSBwcml2YXRlLT5kcm07CisJc3RydWN0IGRybV9jb25uZWN0b3Ig
KmNvbm47CisKKwlkcm1fbW9kZXNldF9sb2NrX2FsbChkcm0pOworCWxpc3RfZm9yX2VhY2hfZW50
cnkoY29ubiwgJmRybS0+bW9kZV9jb25maWcuY29ubmVjdG9yX2xpc3QsIGhlYWQpIHsKKwkJaW50
IGRlc2lyZWRfbW9kZSA9IGNvbm4tPmRwbXM7CisKKwkJLyoKKwkJICogYXQgc3VzcGVuZCB0aW1l
LCB3ZSBzYXZlIGRwbXMgdG8gY29ubmVjdG9yLT5kcG1zLAorCQkgKiByZXN0b3JlIHRoZSBvbGRf
ZHBtcywgYW5kIGF0IGN1cnJlbnQgdGltZSwgdGhlIGNvbm5lY3RvcgorCQkgKiBkcG1zIHN0YXR1
cyBtdXN0IGJlIERSTV9NT0RFX0RQTVNfT0ZGLgorCQkgKi8KKwkJY29ubi0+ZHBtcyA9IERSTV9N
T0RFX0RQTVNfT0ZGOworCisJCS8qCisJCSAqIElmIHRoZSBjb25uZWN0b3IgaGFzIGJlZW4gZGlz
Y29ubmVjdGVkIGR1cmluZyBzdXNwZW5kLAorCQkgKiBkaXNjb25uZWN0IGl0IGZyb20gdGhlIGVu
Y29kZXIgYW5kIGxlYXZlIGl0IG9mZi4gV2UnbGwgbm90aWZ5CisJCSAqIHVzZXJzcGFjZSBhdCB0
aGUgZW5kLgorCQkgKi8KKwkJaWYgKGNvbm4tPmZ1bmNzLT5kcG1zKQorCQkJY29ubi0+ZnVuY3Mt
PmRwbXMoY29ubiwgZGVzaXJlZF9tb2RlKTsKKwl9CisJZHJtX21vZGVzZXRfdW5sb2NrX2FsbChk
cm0pOworCisJZHJtX2ttc19oZWxwZXJfcG9sbF9lbmFibGUoZHJtKTsKKworCURSTV9ERUJVR19E
UklWRVIoIm10a19kcm1fc3lzX3Jlc3VtZVxuIik7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKwor
c3RhdGljIFNJTVBMRV9ERVZfUE1fT1BTKG10a19kcm1fcG1fb3BzLCBtdGtfZHJtX3N5c19zdXNw
ZW5kLAorCQkJIG10a19kcm1fc3lzX3Jlc3VtZSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2Zf
ZGV2aWNlX2lkIG10a19kcm1fb2ZfaWRzW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRl
ayxtdDgxNzMtbW1zeXMiLCB9LAorCXsgfQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9k
cml2ZXIgbXRrX2RybV9wbGF0Zm9ybV9kcml2ZXIgPSB7CisJLnByb2JlCT0gbXRrX2RybV9wcm9i
ZSwKKwkucmVtb3ZlCT0gbXRrX2RybV9yZW1vdmUsCisJLmRyaXZlcgk9IHsKKwkJLm5hbWUJPSAi
bWVkaWF0ZWstZHJtIiwKKwkJLm9mX21hdGNoX3RhYmxlID0gbXRrX2RybV9vZl9pZHMsCisJCS5w
bSAgICAgPSAmbXRrX2RybV9wbV9vcHMsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZv
cm1fZHJpdmVyICogY29uc3QgbXRrX2RybV9kcml2ZXJzW10gPSB7CisJJm10a19kcm1fcGxhdGZv
cm1fZHJpdmVyLAorCSZtdGtfZGlzcF9vdmxfZHJpdmVyLAorCSZtdGtfZGlzcF9yZG1hX2RyaXZl
ciwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG10a19kcm1faW5pdCh2b2lkKQoreworCWludCBy
ZXQ7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShtdGtfZHJtX2RyaXZl
cnMpOyBpKyspIHsKKwkJcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKG10a19kcm1fZHJp
dmVyc1tpXSk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlwcl9lcnIoIkZhaWxlZCB0byByZWdpc3Rl
ciAlcyBkcml2ZXI6ICVkXG4iLAorCQkJICAgICAgIG10a19kcm1fZHJpdmVyc1tpXS0+ZHJpdmVy
Lm5hbWUsIHJldCk7CisJCQlnb3RvIGVycjsKKwkJfQorCX0KKworCXJldHVybiAwOworCitlcnI6
CisJd2hpbGUgKC0taSA+PSAwKQorCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcihtdGtfZHJt
X2RyaXZlcnNbaV0pOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG10
a19kcm1fZXhpdCh2b2lkKQoreworCWludCBpOworCisJZm9yIChpID0gQVJSQVlfU0laRShtdGtf
ZHJtX2RyaXZlcnMpIC0gMTsgaSA+PSAwOyBpLS0pCisJCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lz
dGVyKG10a19kcm1fZHJpdmVyc1tpXSk7Cit9CisKK21vZHVsZV9pbml0KG10a19kcm1faW5pdCk7
Cittb2R1bGVfZXhpdChtdGtfZHJtX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJZVCBTSEVOIDx5
dC5zaGVuQG1lZGlhdGVrLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiTWVkaWF0ZWsgU29D
IERSTSBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2Ry
aXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL21l
ZGlhdGVrL210a19kcm1fZHJ2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
N2E1Y2IxNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtf
ZHJtX2Rydi5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgTWVk
aWFUZWsgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqLworCisjaWZuZGVmIE1US19EUk1fRFJWX0gKKyNkZWZpbmUgTVRLX0RSTV9EUlZfSAor
CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlICJtdGtfZHJtX2RkcF9jb21wLmgiCisK
KyNkZWZpbmUgTUFYX0NSVEMJMgorI2RlZmluZSBNQVhfQ09OTkVDVE9SCTIKKworc3RydWN0IGRl
dmljZTsKK3N0cnVjdCBkZXZpY2Vfbm9kZTsKK3N0cnVjdCBkcm1fY3J0YzsKK3N0cnVjdCBkcm1f
ZGV2aWNlOworc3RydWN0IGRybV9mYl9oZWxwZXI7CitzdHJ1Y3QgZHJtX3Byb3BlcnR5Oworc3Ry
dWN0IHJlZ21hcDsKKworc3RydWN0IG10a19kcm1fcHJpdmF0ZSB7CisJc3RydWN0IGRybV9kZXZp
Y2UgKmRybTsKKworCXN0cnVjdCBkcm1fY3J0YyAqY3J0Y1tNQVhfQ1JUQ107CisJdW5zaWduZWQg
aW50IG51bV9waXBlczsKKworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbXV0ZXhfbm9kZTsKKwlzdHJ1
Y3QgZGV2aWNlICptdXRleF9kZXY7CisJdm9pZCBfX2lvbWVtICpjb25maWdfcmVnczsKKwlzdHJ1
Y3QgZGV2aWNlX25vZGUgKmNvbXBfbm9kZVtERFBfQ09NUE9ORU5UX0lEX01BWF07CisJc3RydWN0
IG10a19kZHBfY29tcCAqZGRwX2NvbXBbRERQX0NPTVBPTkVOVF9JRF9NQVhdOworCisJc3RydWN0
IHsKKwkJc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlOworCQlzdHJ1Y3Qgd29ya19zdHJ1
Y3Qgd29yazsKKwkJc3RydWN0IG11dGV4IGxvY2s7CisJfSBjb21taXQ7Cit9OworCitleHRlcm4g
c3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdGtfZGlzcF9vdmxfZHJpdmVyOworZXh0ZXJuIHN0cnVj
dCBwbGF0Zm9ybV9kcml2ZXIgbXRrX2Rpc3BfcmRtYV9kcml2ZXI7CisKKyNlbmRpZiAvKiBNVEtf
RFJNX0RSVl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Ry
bV9mYi5jIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZmIuYwpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2QzMGMxCi0tLSAvZGV2L251bGwKKysrIGIvZHJp
dmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZmIuYwpAQCAtMCwwICsxLDE2NSBAQAorLyoK
KyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMuCisgKgorICogVGhpcyBwcm9ncmFt
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkK
KyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
dmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxkcm0vZHJtUC5o
PgorI2luY2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2Zi
X2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fZ2VtLmg+CisjaW5jbHVkZSA8bGludXgvZG1h
LWJ1Zi5oPgorI2luY2x1ZGUgPGxpbnV4L3Jlc2VydmF0aW9uLmg+CisKKyNpbmNsdWRlICJtdGtf
ZHJtX2Rydi5oIgorI2luY2x1ZGUgIm10a19kcm1fZmIuaCIKKyNpbmNsdWRlICJtdGtfZHJtX2dl
bS5oIgorCisvKgorICogbXRrIHNwZWNpZmljIGZyYW1lYnVmZmVyIHN0cnVjdHVyZS4KKyAqCisg
KiBAZmI6IGRybSBmcmFtZWJ1ZmZlciBvYmplY3QuCisgKiBAZ2VtX29iajogYXJyYXkgb2YgZ2Vt
IG9iamVjdHMuCisgKi8KK3N0cnVjdCBtdGtfZHJtX2ZiIHsKKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVm
ZmVyCWJhc2U7CisJLyogRm9yIG5vdyB3ZSBvbmx5IHN1cHBvcnQgYSBzaW5nbGUgcGxhbmUgKi8K
KwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QJKmdlbV9vYmo7Cit9OworCisjZGVmaW5lIHRvX210a19m
Yih4KSBjb250YWluZXJfb2YoeCwgc3RydWN0IG10a19kcm1fZmIsIGJhc2UpCisKK3N0cnVjdCBk
cm1fZ2VtX29iamVjdCAqbXRrX2ZiX2dldF9nZW1fb2JqKHN0cnVjdCBkcm1fZnJhbWVidWZmZXIg
KmZiKQoreworCXN0cnVjdCBtdGtfZHJtX2ZiICptdGtfZmIgPSB0b19tdGtfZmIoZmIpOworCisJ
cmV0dXJuIG10a19mYi0+Z2VtX29iajsKK30KKworc3RhdGljIGludCBtdGtfZHJtX2ZiX2NyZWF0
ZV9oYW5kbGUoc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCisJCQkJICAgIHN0cnVjdCBkcm1f
ZmlsZSAqZmlsZV9wcml2LAorCQkJCSAgICB1bnNpZ25lZCBpbnQgKmhhbmRsZSkKK3sKKwlzdHJ1
Y3QgbXRrX2RybV9mYiAqbXRrX2ZiID0gdG9fbXRrX2ZiKGZiKTsKKworCXJldHVybiBkcm1fZ2Vt
X2hhbmRsZV9jcmVhdGUoZmlsZV9wcml2LCBtdGtfZmItPmdlbV9vYmosIGhhbmRsZSk7Cit9CisK
K3N0YXRpYyB2b2lkIG10a19kcm1fZmJfZGVzdHJveShzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpm
YikKK3sKKwlzdHJ1Y3QgbXRrX2RybV9mYiAqbXRrX2ZiID0gdG9fbXRrX2ZiKGZiKTsKKworCWRy
bV9mcmFtZWJ1ZmZlcl9jbGVhbnVwKGZiKTsKKworCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNl
X3VubG9ja2VkKG10a19mYi0+Z2VtX29iaik7CisKKwlrZnJlZShtdGtfZmIpOworfQorCitzdGF0
aWMgY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlcl9mdW5jcyBtdGtfZHJtX2ZiX2Z1bmNzID0g
eworCS5jcmVhdGVfaGFuZGxlID0gbXRrX2RybV9mYl9jcmVhdGVfaGFuZGxlLAorCS5kZXN0cm95
ID0gbXRrX2RybV9mYl9kZXN0cm95LAorfTsKKworc3RhdGljIHN0cnVjdCBtdGtfZHJtX2ZiICpt
dGtfZHJtX2ZyYW1lYnVmZmVyX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJY29u
c3Qgc3RydWN0IGRybV9tb2RlX2ZiX2NtZDIgKm1vZGUsCisJCQkJCXN0cnVjdCBkcm1fZ2VtX29i
amVjdCAqb2JqKQoreworCXN0cnVjdCBtdGtfZHJtX2ZiICptdGtfZmI7CisJaW50IHJldDsKKwor
CWlmIChkcm1fZm9ybWF0X251bV9wbGFuZXMobW9kZS0+cGl4ZWxfZm9ybWF0KSAhPSAxKQorCQly
ZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKworCW10a19mYiA9IGt6YWxsb2Moc2l6ZW9mKCptdGtf
ZmIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW10a19mYikKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01F
TSk7CisKKwlkcm1faGVscGVyX21vZGVfZmlsbF9mYl9zdHJ1Y3QoJm10a19mYi0+YmFzZSwgbW9k
ZSk7CisKKwltdGtfZmItPmdlbV9vYmogPSBvYmo7CisKKwlyZXQgPSBkcm1fZnJhbWVidWZmZXJf
aW5pdChkZXYsICZtdGtfZmItPmJhc2UsICZtdGtfZHJtX2ZiX2Z1bmNzKTsKKwlpZiAocmV0KSB7
CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIGluaXRpYWxpemUgZnJhbWVidWZmZXJcbiIpOworCQlr
ZnJlZShtdGtfZmIpOworCQlyZXR1cm4gRVJSX1BUUihyZXQpOworCX0KKworCXJldHVybiBtdGtf
ZmI7Cit9CisKKy8qCisgKiBXYWl0IGZvciBhbnkgZXhjbHVzaXZlIGZlbmNlIGluIGZiJ3MgZ2Vt
IG9iamVjdCdzIHJlc2VydmF0aW9uIG9iamVjdC4KKyAqCisgKiBSZXR1cm5zIC1FUkVTVEFSVFNZ
UyBpZiBpbnRlcnJ1cHRlZCwgZWxzZSAwLgorICovCitpbnQgbXRrX2ZiX3dhaXQoc3RydWN0IGRy
bV9mcmFtZWJ1ZmZlciAqZmIpCit7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW07CisJc3Ry
dWN0IHJlc2VydmF0aW9uX29iamVjdCAqcmVzdjsKKwlsb25nIHJldDsKKworCWlmICghZmIpCisJ
CXJldHVybiAwOworCisJZ2VtID0gbXRrX2ZiX2dldF9nZW1fb2JqKGZiKTsKKwlpZiAoIWdlbSB8
fCAhZ2VtLT5kbWFfYnVmIHx8ICFnZW0tPmRtYV9idWYtPnJlc3YpCisJCXJldHVybiAwOworCisJ
cmVzdiA9IGdlbS0+ZG1hX2J1Zi0+cmVzdjsKKwlyZXQgPSByZXNlcnZhdGlvbl9vYmplY3Rfd2Fp
dF90aW1lb3V0X3JjdShyZXN2LCBmYWxzZSwgdHJ1ZSwKKwkJCQkJCSAgTUFYX1NDSEVEVUxFX1RJ
TUVPVVQpOworCS8qIE1BWF9TQ0hFRFVMRV9USU1FT1VUIG9uIHN1Y2Nlc3MsIC1FUkVTVEFSVFNZ
UyBpZiBpbnRlcnJ1cHRlZCAqLworCWlmIChXQVJOX09OKHJldCA8IDApKQorCQlyZXR1cm4gcmV0
OworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBkcm1fZnJhbWVidWZmZXIgKm10a19kcm1fbW9k
ZV9mYl9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJICAgICAgIHN0cnVjdCBk
cm1fZmlsZSAqZmlsZSwKKwkJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBkcm1fbW9kZV9mYl9jbWQy
ICpjbWQpCit7CisJc3RydWN0IG10a19kcm1fZmIgKm10a19mYjsKKwlzdHJ1Y3QgZHJtX2dlbV9v
YmplY3QgKmdlbTsKKwl1bnNpZ25lZCBpbnQgd2lkdGggPSBjbWQtPndpZHRoOworCXVuc2lnbmVk
IGludCBoZWlnaHQgPSBjbWQtPmhlaWdodDsKKwl1bnNpZ25lZCBpbnQgc2l6ZSwgYnBwOworCWlu
dCByZXQ7CisKKwlpZiAoZHJtX2Zvcm1hdF9udW1fcGxhbmVzKGNtZC0+cGl4ZWxfZm9ybWF0KSAh
PSAxKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKworCWdlbSA9IGRybV9nZW1fb2JqZWN0
X2xvb2t1cChkZXYsIGZpbGUsIGNtZC0+aGFuZGxlc1swXSk7CisJaWYgKCFnZW0pCisJCXJldHVy
biBFUlJfUFRSKC1FTk9FTlQpOworCisJYnBwID0gZHJtX2Zvcm1hdF9wbGFuZV9jcHAoY21kLT5w
aXhlbF9mb3JtYXQsIDApOworCXNpemUgPSAoaGVpZ2h0IC0gMSkgKiBjbWQtPnBpdGNoZXNbMF0g
KyB3aWR0aCAqIGJwcDsKKwlzaXplICs9IGNtZC0+b2Zmc2V0c1swXTsKKworCWlmIChnZW0tPnNp
emUgPCBzaXplKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gdW5yZWZlcmVuY2U7CisJfQor
CisJbXRrX2ZiID0gbXRrX2RybV9mcmFtZWJ1ZmZlcl9pbml0KGRldiwgY21kLCBnZW0pOworCWlm
IChJU19FUlIobXRrX2ZiKSkgeworCQlyZXQgPSBQVFJfRVJSKG10a19mYik7CisJCWdvdG8gdW5y
ZWZlcmVuY2U7CisJfQorCisJcmV0dXJuICZtdGtfZmItPmJhc2U7CisKK3VucmVmZXJlbmNlOgor
CWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKGdlbSk7CisJcmV0dXJuIEVSUl9Q
VFIocmV0KTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJt
X2ZiLmggYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9mYi5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliMmFlMzQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2
ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9mYi5oCkBAIC0wLDAgKzEsMjMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKGMpIDIwMTUgTWVkaWFUZWsgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cisg
KiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZl
cnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24u
CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIE1US19EUk1fRkJfSAor
I2RlZmluZSBNVEtfRFJNX0ZCX0gKKworc3RydWN0IGRybV9nZW1fb2JqZWN0ICptdGtfZmJfZ2V0
X2dlbV9vYmooc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIpOworaW50IG10a19mYl93YWl0KHN0
cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiKTsKK3N0cnVjdCBkcm1fZnJhbWVidWZmZXIgKm10a19k
cm1fbW9kZV9mYl9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJICAgICAgIHN0
cnVjdCBkcm1fZmlsZSAqZmlsZSwKKwkJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBkcm1fbW9kZV9m
Yl9jbWQyICpjbWQpOworCisjZW5kaWYgLyogTVRLX0RSTV9GQl9IICovCmRpZmYgLS1naXQgYS9k
cml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9t
ZWRpYXRlay9tdGtfZHJtX2dlbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjZiYzQ5NGUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRr
X2RybV9nZW0uYwpAQCAtMCwwICsxLDI2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBN
ZWRpYVRlayBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0g
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICovCisKKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgPGRybS9kcm1fZ2Vt
Lmg+CisjaW5jbHVkZSA8bGludXgvZG1hLWJ1Zi5oPgorCisjaW5jbHVkZSAibXRrX2RybV9nZW0u
aCIKKworc3RhdGljIHN0cnVjdCBtdGtfZHJtX2dlbV9vYmogKm10a19kcm1fZ2VtX2luaXQoc3Ry
dWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJCXVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlzdHJ1
Y3QgbXRrX2RybV9nZW1fb2JqICptdGtfZ2VtX29iajsKKwlpbnQgcmV0OworCisJc2l6ZSA9IHJv
dW5kX3VwKHNpemUsIFBBR0VfU0laRSk7CisKKwltdGtfZ2VtX29iaiA9IGt6YWxsb2Moc2l6ZW9m
KCptdGtfZ2VtX29iaiksIEdGUF9LRVJORUwpOworCWlmICghbXRrX2dlbV9vYmopCisJCXJldHVy
biBFUlJfUFRSKC1FTk9NRU0pOworCisJcmV0ID0gZHJtX2dlbV9vYmplY3RfaW5pdChkZXYsICZt
dGtfZ2VtX29iai0+YmFzZSwgc2l6ZSk7CisJaWYgKHJldCA8IDApIHsKKwkJRFJNX0VSUk9SKCJm
YWlsZWQgdG8gaW5pdGlhbGl6ZSBnZW0gb2JqZWN0XG4iKTsKKwkJa2ZyZWUobXRrX2dlbV9vYmop
OworCQlyZXR1cm4gRVJSX1BUUihyZXQpOworCX0KKworCXJldHVybiBtdGtfZ2VtX29iajsKK30K
Kworc3RydWN0IG10a19kcm1fZ2VtX29iaiAqbXRrX2RybV9nZW1fY3JlYXRlKHN0cnVjdCBkcm1f
ZGV2aWNlICpkZXYsCisJCQkJCSAgIHNpemVfdCBzaXplLCBib29sIGFsbG9jX2ttYXApCit7CisJ
c3RydWN0IG10a19kcm1fZ2VtX29iaiAqbXRrX2dlbTsKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3Qg
Km9iajsKKwlpbnQgcmV0OworCisJbXRrX2dlbSA9IG10a19kcm1fZ2VtX2luaXQoZGV2LCBzaXpl
KTsKKwlpZiAoSVNfRVJSKG10a19nZW0pKQorCQlyZXR1cm4gRVJSX0NBU1QobXRrX2dlbSk7CisK
KwlvYmogPSAmbXRrX2dlbS0+YmFzZTsKKworCWluaXRfZG1hX2F0dHJzKCZtdGtfZ2VtLT5kbWFf
YXR0cnMpOworCWRtYV9zZXRfYXR0cihETUFfQVRUUl9XUklURV9DT01CSU5FLCAmbXRrX2dlbS0+
ZG1hX2F0dHJzKTsKKworCWlmICghYWxsb2Nfa21hcCkKKwkJZG1hX3NldF9hdHRyKERNQV9BVFRS
X05PX0tFUk5FTF9NQVBQSU5HLCAmbXRrX2dlbS0+ZG1hX2F0dHJzKTsKKworCW10a19nZW0tPmNv
b2tpZSA9IGRtYV9hbGxvY19hdHRycyhkZXYtPmRldiwgb2JqLT5zaXplLAorCQkJCQkgICZtdGtf
Z2VtLT5kbWFfYWRkciwgR0ZQX0tFUk5FTCwKKwkJCQkJICAmbXRrX2dlbS0+ZG1hX2F0dHJzKTsK
KwlpZiAoIW10a19nZW0tPmNvb2tpZSkgeworCQlEUk1fRVJST1IoImZhaWxlZCB0byBhbGxvY2F0
ZSAlenggYnl0ZSBkbWEgYnVmZmVyIiwgb2JqLT5zaXplKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJ
Z290byBlcnJfZ2VtX2ZyZWU7CisJfQorCisJaWYgKGFsbG9jX2ttYXApCisJCW10a19nZW0tPmt2
YWRkciA9IG10a19nZW0tPmNvb2tpZTsKKworCURSTV9ERUJVR19EUklWRVIoImNvb2tpZSA9ICVw
IGRtYV9hZGRyID0gJXBhZCBzaXplID0gJXp1XG4iLAorCQkJIG10a19nZW0tPmNvb2tpZSwgJm10
a19nZW0tPmRtYV9hZGRyLAorCQkJIHNpemUpOworCisJcmV0dXJuIG10a19nZW07CisKK2Vycl9n
ZW1fZnJlZToKKwlkcm1fZ2VtX29iamVjdF9yZWxlYXNlKG9iaik7CisJa2ZyZWUobXRrX2dlbSk7
CisJcmV0dXJuIEVSUl9QVFIocmV0KTsKK30KKwordm9pZCBtdGtfZHJtX2dlbV9mcmVlX29iamVj
dChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKK3sKKwlzdHJ1Y3QgbXRrX2RybV9nZW1fb2Jq
ICptdGtfZ2VtID0gdG9fbXRrX2dlbV9vYmoob2JqKTsKKworCWlmIChtdGtfZ2VtLT5zZykKKwkJ
ZHJtX3ByaW1lX2dlbV9kZXN0cm95KG9iaiwgbXRrX2dlbS0+c2cpOworCWVsc2UKKwkJZG1hX2Zy
ZWVfYXR0cnMob2JqLT5kZXYtPmRldiwgb2JqLT5zaXplLCBtdGtfZ2VtLT5jb29raWUsCisJCQkg
ICAgICAgbXRrX2dlbS0+ZG1hX2FkZHIsICZtdGtfZ2VtLT5kbWFfYXR0cnMpOworCisJLyogcmVs
ZWFzZSBmaWxlIHBvaW50ZXIgdG8gZ2VtIG9iamVjdC4gKi8KKwlkcm1fZ2VtX29iamVjdF9yZWxl
YXNlKG9iaik7CisKKwlrZnJlZShtdGtfZ2VtKTsKK30KKworaW50IG10a19kcm1fZ2VtX2R1bWJf
Y3JlYXRlKHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LCBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2
LAorCQkJICAgIHN0cnVjdCBkcm1fbW9kZV9jcmVhdGVfZHVtYiAqYXJncykKK3sKKwlzdHJ1Y3Qg
bXRrX2RybV9nZW1fb2JqICptdGtfZ2VtOworCWludCByZXQ7CisKKwlhcmdzLT5waXRjaCA9IERJ
Vl9ST1VORF9VUChhcmdzLT53aWR0aCAqIGFyZ3MtPmJwcCwgOCk7CisJYXJncy0+c2l6ZSA9IGFy
Z3MtPnBpdGNoICogYXJncy0+aGVpZ2h0OworCisJbXRrX2dlbSA9IG10a19kcm1fZ2VtX2NyZWF0
ZShkZXYsIGFyZ3MtPnNpemUsIGZhbHNlKTsKKwlpZiAoSVNfRVJSKG10a19nZW0pKQorCQlyZXR1
cm4gUFRSX0VSUihtdGtfZ2VtKTsKKworCS8qCisJICogYWxsb2NhdGUgYSBpZCBvZiBpZHIgdGFi
bGUgd2hlcmUgdGhlIG9iaiBpcyByZWdpc3RlcmVkCisJICogYW5kIGhhbmRsZSBoYXMgdGhlIGlk
IHdoYXQgdXNlciBjYW4gc2VlLgorCSAqLworCXJldCA9IGRybV9nZW1faGFuZGxlX2NyZWF0ZShm
aWxlX3ByaXYsICZtdGtfZ2VtLT5iYXNlLCAmYXJncy0+aGFuZGxlKTsKKwlpZiAocmV0KQorCQln
b3RvIGVycl9oYW5kbGVfY3JlYXRlOworCisJLyogZHJvcCByZWZlcmVuY2UgZnJvbSBhbGxvY2F0
ZSAtIGhhbmRsZSBob2xkcyBpdCBub3cuICovCisJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Vf
dW5sb2NrZWQoJm10a19nZW0tPmJhc2UpOworCisJcmV0dXJuIDA7CisKK2Vycl9oYW5kbGVfY3Jl
YXRlOgorCW10a19kcm1fZ2VtX2ZyZWVfb2JqZWN0KCZtdGtfZ2VtLT5iYXNlKTsKKwlyZXR1cm4g
cmV0OworfQorCitpbnQgbXRrX2RybV9nZW1fZHVtYl9tYXBfb2Zmc2V0KHN0cnVjdCBkcm1fZmls
ZSAqZmlsZV9wcml2LAorCQkJCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVpbnQzMl90IGhhbmRs
ZSwKKwkJCQl1aW50NjRfdCAqb2Zmc2V0KQoreworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2Jq
OworCWludCByZXQ7CisKKwlvYmogPSBkcm1fZ2VtX29iamVjdF9sb29rdXAoZGV2LCBmaWxlX3By
aXYsIGhhbmRsZSk7CisJaWYgKCFvYmopIHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gbG9va3Vw
IGdlbSBvYmplY3QuXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0ID0gZHJtX2dl
bV9jcmVhdGVfbW1hcF9vZmZzZXQob2JqKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCSpv
ZmZzZXQgPSBkcm1fdm1hX25vZGVfb2Zmc2V0X2FkZHIoJm9iai0+dm1hX25vZGUpOworCURSTV9E
RUJVR19LTVMoIm9mZnNldCA9IDB4JWxseFxuIiwgKm9mZnNldCk7CisKK291dDoKKwlkcm1fZ2Vt
X29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZChvYmopOworCXJldHVybiByZXQ7Cit9CisKK3N0
YXRpYyBpbnQgbXRrX2RybV9nZW1fb2JqZWN0X21tYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpv
YmosCisJCQkJICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCisKK3sKKwlpbnQgcmV0Owor
CXN0cnVjdCBtdGtfZHJtX2dlbV9vYmogKm10a19nZW0gPSB0b19tdGtfZ2VtX29iaihvYmopOwor
CXN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBvYmotPmRldjsKKworCS8qCisJICogZG1hX2FsbG9j
X2F0dHJzKCkgYWxsb2NhdGVkIGEgc3RydWN0IHBhZ2UgdGFibGUgZm9yIG10a19nZW0sIHNvIGNs
ZWFyCisJICogVk1fUEZOTUFQIGZsYWcgdGhhdCB3YXMgc2V0IGJ5IGRybV9nZW1fbW1hcF9vYmoo
KS9kcm1fZ2VtX21tYXAoKS4KKwkgKi8KKwl2bWEtPnZtX2ZsYWdzICY9IH5WTV9QRk5NQVA7CisJ
dm1hLT52bV9wZ29mZiA9IDA7CisKKwlyZXQgPSBkbWFfbW1hcF9hdHRycyhkcm0tPmRldiwgdm1h
LCBtdGtfZ2VtLT5jb29raWUsIG10a19nZW0tPmRtYV9hZGRyLAorCQkJICAgICBvYmotPnNpemUs
ICZtdGtfZ2VtLT5kbWFfYXR0cnMpOworCWlmIChyZXQpCisJCWRybV9nZW1fdm1fY2xvc2Uodm1h
KTsKKworCXJldHVybiByZXQ7Cit9CisKK2ludCBtdGtfZHJtX2dlbV9tbWFwX2J1ZihzdHJ1Y3Qg
ZHJtX2dlbV9vYmplY3QgKm9iaiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJaW50
IHJldDsKKworCXJldCA9IGRybV9nZW1fbW1hcF9vYmoob2JqLCBvYmotPnNpemUsIHZtYSk7CisJ
aWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiBtdGtfZHJtX2dlbV9vYmplY3RfbW1h
cChvYmosIHZtYSk7Cit9CisKK2ludCBtdGtfZHJtX2dlbV9tbWFwKHN0cnVjdCBmaWxlICpmaWxw
LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3Qg
Km9iajsKKwlpbnQgcmV0OworCisJcmV0ID0gZHJtX2dlbV9tbWFwKGZpbHAsIHZtYSk7CisJaWYg
KHJldCkKKwkJcmV0dXJuIHJldDsKKworCW9iaiA9IHZtYS0+dm1fcHJpdmF0ZV9kYXRhOworCisJ
cmV0dXJuIG10a19kcm1fZ2VtX29iamVjdF9tbWFwKG9iaiwgdm1hKTsKK30KKworLyoKKyAqIEFs
bG9jYXRlIGEgc2dfdGFibGUgZm9yIHRoaXMgR0VNIG9iamVjdC4KKyAqIE5vdGU6IEJvdGggdGhl
IHRhYmxlJ3MgY29udGVudHMsIGFuZCB0aGUgc2dfdGFibGUgaXRzZWxmIG11c3QgYmUgZnJlZWQg
YnkKKyAqICAgICAgIHRoZSBjYWxsZXIuCisgKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgbmV3
bHkgYWxsb2NhdGVkIHNnX3RhYmxlLCBvciBhbiBFUlJfUFRSKCkgZXJyb3IuCisgKi8KK3N0cnVj
dCBzZ190YWJsZSAqbXRrX2dlbV9wcmltZV9nZXRfc2dfdGFibGUoc3RydWN0IGRybV9nZW1fb2Jq
ZWN0ICpvYmopCit7CisJc3RydWN0IG10a19kcm1fZ2VtX29iaiAqbXRrX2dlbSA9IHRvX210a19n
ZW1fb2JqKG9iaik7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IG9iai0+ZGV2OworCXN0cnVj
dCBzZ190YWJsZSAqc2d0OworCWludCByZXQ7CisKKwlzZ3QgPSBremFsbG9jKHNpemVvZigqc2d0
KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzZ3QpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwor
CisJcmV0ID0gZG1hX2dldF9zZ3RhYmxlX2F0dHJzKGRybS0+ZGV2LCBzZ3QsIG10a19nZW0tPmNv
b2tpZSwKKwkJCQkgICAgbXRrX2dlbS0+ZG1hX2FkZHIsIG9iai0+c2l6ZSwKKwkJCQkgICAgJm10
a19nZW0tPmRtYV9hdHRycyk7CisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoImZhaWxlZCB0byBh
bGxvY2F0ZSBzZ3QsICVkXG4iLCByZXQpOworCQlrZnJlZShzZ3QpOworCQlyZXR1cm4gRVJSX1BU
UihyZXQpOworCX0KKworCXJldHVybiBzZ3Q7Cit9CisKK3N0cnVjdCBkcm1fZ2VtX29iamVjdCAq
bXRrX2dlbV9wcmltZV9pbXBvcnRfc2dfdGFibGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJ
CXN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCwgc3RydWN0IHNnX3RhYmxlICpzZykK
K3sKKwlzdHJ1Y3QgbXRrX2RybV9nZW1fb2JqICptdGtfZ2VtOworCWludCByZXQ7CisJc3RydWN0
IHNjYXR0ZXJsaXN0ICpzOworCXVuc2lnbmVkIGludCBpOworCWRtYV9hZGRyX3QgZXhwZWN0ZWQ7
CisKKwltdGtfZ2VtID0gbXRrX2RybV9nZW1faW5pdChkZXYsIGF0dGFjaC0+ZG1hYnVmLT5zaXpl
KTsKKworCWlmIChJU19FUlIobXRrX2dlbSkpCisJCXJldHVybiBFUlJfUFRSKFBUUl9FUlIobXRr
X2dlbSkpOworCisJZXhwZWN0ZWQgPSBzZ19kbWFfYWRkcmVzcyhzZy0+c2dsKTsKKwlmb3JfZWFj
aF9zZyhzZy0+c2dsLCBzLCBzZy0+bmVudHMsIGkpIHsKKwkJaWYgKHNnX2RtYV9hZGRyZXNzKHMp
ICE9IGV4cGVjdGVkKSB7CisJCQlEUk1fRVJST1IoInNnX3RhYmxlIGlzIG5vdCBjb250aWd1b3Vz
Iik7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJZ290byBlcnJfZ2VtX2ZyZWU7CisJCX0KKwkJZXhw
ZWN0ZWQgPSBzZ19kbWFfYWRkcmVzcyhzKSArIHNnX2RtYV9sZW4ocyk7CisJfQorCisJbXRrX2dl
bS0+ZG1hX2FkZHIgPSBzZ19kbWFfYWRkcmVzcyhzZy0+c2dsKTsKKwltdGtfZ2VtLT5zZyA9IHNn
OworCisJcmV0dXJuICZtdGtfZ2VtLT5iYXNlOworCitlcnJfZ2VtX2ZyZWU6CisJa2ZyZWUobXRr
X2dlbSk7CisJcmV0dXJuIEVSUl9QVFIocmV0KTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1
L2RybS9tZWRpYXRlay9tdGtfZHJtX2dlbS5oIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210
a19kcm1fZ2VtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjIyNzI1YQot
LS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2dlbS5o
CkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgTWVkaWFUZWsgSW5j
LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLwor
CisjaWZuZGVmIF9NVEtfRFJNX0dFTV9IXworI2RlZmluZSBfTVRLX0RSTV9HRU1fSF8KKworI2lu
Y2x1ZGUgPGRybS9kcm1fZ2VtLmg+CisKKy8qCisgKiBtdGsgZHJtIGJ1ZmZlciBzdHJ1Y3R1cmUu
CisgKgorICogQGJhc2U6IGEgZ2VtIG9iamVjdC4KKyAqCS0gYSBuZXcgaGFuZGxlIHRvIHRoaXMg
Z2VtIG9iamVjdCB3b3VsZCBiZSBjcmVhdGVkCisgKglieSBkcm1fZ2VtX2hhbmRsZV9jcmVhdGUo
KS4KKyAqIEBjb29raWU6IHRoZSByZXR1cm4gdmFsdWUgb2YgZG1hX2FsbG9jX2F0dHJzKCksIGtl
ZXAgaXQgZm9yIGRtYV9mcmVlX2F0dHJzKCkKKyAqIEBrdmFkZHI6IGtlcm5lbCB2aXJ0dWFsIGFk
ZHJlc3Mgb2YgZ2VtIGJ1ZmZlci4KKyAqIEBkbWFfYWRkcjogZG1hIGFkZHJlc3Mgb2YgZ2VtIGJ1
ZmZlci4KKyAqIEBkbWFfYXR0cnM6IGRtYSBhdHRyaWJ1dGVzIG9mIGdlbSBidWZmZXIuCisgKgor
ICogUC5TLiB0aGlzIG9iamVjdCB3b3VsZCBiZSB0cmFuc2ZlcnJlZCB0byB1c2VyIGFzIGttc19i
by5oYW5kbGUgc28KKyAqCXVzZXIgY2FuIGFjY2VzcyB0aGUgYnVmZmVyIHRocm91Z2gga21zX2Jv
LmhhbmRsZS4KKyAqLworc3RydWN0IG10a19kcm1fZ2VtX29iaiB7CisJc3RydWN0IGRybV9nZW1f
b2JqZWN0CWJhc2U7CisJdm9pZAkJCSpjb29raWU7CisJdm9pZAkJCSprdmFkZHI7CisJZG1hX2Fk
ZHJfdAkJZG1hX2FkZHI7CisJc3RydWN0IGRtYV9hdHRycwlkbWFfYXR0cnM7CisJc3RydWN0IHNn
X3RhYmxlCQkqc2c7Cit9OworCisjZGVmaW5lIHRvX210a19nZW1fb2JqKHgpCWNvbnRhaW5lcl9v
Zih4LCBzdHJ1Y3QgbXRrX2RybV9nZW1fb2JqLCBiYXNlKQorCit2b2lkIG10a19kcm1fZ2VtX2Zy
ZWVfb2JqZWN0KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ2VtKTsKK3N0cnVjdCBtdGtfZHJtX2dl
bV9vYmogKm10a19kcm1fZ2VtX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCQkg
ICB1bnNpZ25lZCBsb25nIHNpemUsIGJvb2wgYWxsb2Nfa21hcCk7CitpbnQgbXRrX2RybV9nZW1f
ZHVtYl9jcmVhdGUoc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsIHN0cnVjdCBkcm1fZGV2aWNl
ICpkZXYsCisJCQkgICAgc3RydWN0IGRybV9tb2RlX2NyZWF0ZV9kdW1iICphcmdzKTsKK2ludCBt
dGtfZHJtX2dlbV9kdW1iX21hcF9vZmZzZXQoc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsCisJ
CQkJc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdWludDMyX3QgaGFuZGxlLAorCQkJCXVpbnQ2NF90
ICpvZmZzZXQpOworaW50IG10a19kcm1fZ2VtX21tYXAoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVj
dCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKK2ludCBtdGtfZHJtX2dlbV9tbWFwX2J1ZihzdHJ1Y3Qg
ZHJtX2dlbV9vYmplY3QgKm9iaiwKKwkJCSBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7Citz
dHJ1Y3Qgc2dfdGFibGUgKm10a19nZW1fcHJpbWVfZ2V0X3NnX3RhYmxlKHN0cnVjdCBkcm1fZ2Vt
X29iamVjdCAqb2JqKTsKK3N0cnVjdCBkcm1fZ2VtX29iamVjdCAqbXRrX2dlbV9wcmltZV9pbXBv
cnRfc2dfdGFibGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBkbWFfYnVmX2F0
dGFjaG1lbnQgKmF0dGFjaCwgc3RydWN0IHNnX3RhYmxlICpzZyk7CisKKyNlbmRpZgpkaWZmIC0t
Z2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fcGxhbmUuYyBiL2RyaXZlcnMv
Z3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX3BsYW5lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uYzg5ODc4OAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9t
ZWRpYXRlay9tdGtfZHJtX3BsYW5lLmMKQEAgLTAsMCArMSwyNDAgQEAKKy8qCisgKiBDb3B5cmln
aHQgKGMpIDIwMTUgTWVkaWFUZWsgSW5jLgorICogQXV0aG9yOiBDSyBIdSA8Y2suaHVAbWVkaWF0
ZWsuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqLworCisjaW5jbHVkZSA8ZHJtL2RybVAuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pYy5o
PgorI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1f
cGxhbmVfaGVscGVyLmg+CisKKyNpbmNsdWRlICJtdGtfZHJtX2NydGMuaCIKKyNpbmNsdWRlICJt
dGtfZHJtX2RkcF9jb21wLmgiCisjaW5jbHVkZSAibXRrX2RybV9kcnYuaCIKKyNpbmNsdWRlICJt
dGtfZHJtX2ZiLmgiCisjaW5jbHVkZSAibXRrX2RybV9nZW0uaCIKKyNpbmNsdWRlICJtdGtfZHJt
X3BsYW5lLmgiCisKK3N0YXRpYyBjb25zdCB1MzIgZm9ybWF0c1tdID0geworCURSTV9GT1JNQVRf
WFJHQjg4ODgsCisJRFJNX0ZPUk1BVF9BUkdCODg4OCwKKwlEUk1fRk9STUFUX1JHQjU2NSwKK307
CisKK3N0YXRpYyB2b2lkIG10a19wbGFuZV9lbmFibGUoc3RydWN0IG10a19kcm1fcGxhbmUgKm10
a19wbGFuZSwgYm9vbCBlbmFibGUsCisJCQkgICAgIGRtYV9hZGRyX3QgYWRkciwgc3RydWN0IGRy
bV9yZWN0ICpkZXN0KQoreworCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lID0gJm10a19wbGFuZS0+
YmFzZTsKKwlzdHJ1Y3QgbXRrX3BsYW5lX3N0YXRlICpzdGF0ZSA9IHRvX210a19wbGFuZV9zdGF0
ZShwbGFuZS0+c3RhdGUpOworCXVuc2lnbmVkIGludCBwaXRjaCwgZm9ybWF0OworCWludCB4LCB5
OworCisJaWYgKFdBUk5fT04oIXBsYW5lLT5zdGF0ZSB8fCAoZW5hYmxlICYmICFwbGFuZS0+c3Rh
dGUtPmZiKSkpCisJCXJldHVybjsKKworCWlmIChwbGFuZS0+c3RhdGUtPmZiKSB7CisJCXBpdGNo
ID0gcGxhbmUtPnN0YXRlLT5mYi0+cGl0Y2hlc1swXTsKKwkJZm9ybWF0ID0gcGxhbmUtPnN0YXRl
LT5mYi0+cGl4ZWxfZm9ybWF0OworCX0gZWxzZSB7CisJCXBpdGNoID0gMDsKKwkJZm9ybWF0ID0g
RFJNX0ZPUk1BVF9SR0JBODg4ODsKKwl9CisKKwl4ID0gcGxhbmUtPnN0YXRlLT5jcnRjX3g7CisJ
eSA9IHBsYW5lLT5zdGF0ZS0+Y3J0Y195OworCisJaWYgKHggPCAwKSB7CisJCWFkZHIgLT0geCAq
IDQ7CisJCXggPSAwOworCX0KKworCWlmICh5IDwgMCkgeworCQlhZGRyIC09IHkgKiBwaXRjaDsK
KwkJeSA9IDA7CisJfQorCisJc3RhdGUtPnBlbmRpbmcuZW5hYmxlID0gZW5hYmxlOworCXN0YXRl
LT5wZW5kaW5nLnBpdGNoID0gcGl0Y2g7CisJc3RhdGUtPnBlbmRpbmcuZm9ybWF0ID0gZm9ybWF0
OworCXN0YXRlLT5wZW5kaW5nLmFkZHIgPSBhZGRyOworCXN0YXRlLT5wZW5kaW5nLnggPSB4Owor
CXN0YXRlLT5wZW5kaW5nLnkgPSB5OworCXN0YXRlLT5wZW5kaW5nLndpZHRoID0gZGVzdC0+eDIg
LSBkZXN0LT54MTsKKwlzdGF0ZS0+cGVuZGluZy5oZWlnaHQgPSBkZXN0LT55MiAtIGRlc3QtPnkx
OworCXdtYigpOyAvKiBNYWtlIHN1cmUgdGhlIGFib3ZlIHBhcmFtZXRlcnMgYXJlIHNldCBiZWZv
cmUgdXBkYXRlICovCisJc3RhdGUtPnBlbmRpbmcuZGlydHkgPSB0cnVlOworfQorCitzdGF0aWMg
dm9pZCBtdGtfcGxhbmVfcmVzZXQoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUpCit7CisJc3RydWN0
IG10a19wbGFuZV9zdGF0ZSAqc3RhdGU7CisKKwlpZiAocGxhbmUtPnN0YXRlKSB7CisJCWlmIChw
bGFuZS0+c3RhdGUtPmZiKQorCQkJZHJtX2ZyYW1lYnVmZmVyX3VucmVmZXJlbmNlKHBsYW5lLT5z
dGF0ZS0+ZmIpOworCisJCXN0YXRlID0gdG9fbXRrX3BsYW5lX3N0YXRlKHBsYW5lLT5zdGF0ZSk7
CisJCW1lbXNldChzdGF0ZSwgMCwgc2l6ZW9mKCpzdGF0ZSkpOworCX0gZWxzZSB7CisJCXN0YXRl
ID0ga3phbGxvYyhzaXplb2YoKnN0YXRlKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghc3RhdGUpCisJ
CQlyZXR1cm47CisJCXBsYW5lLT5zdGF0ZSA9ICZzdGF0ZS0+YmFzZTsKKwl9CisKKwlzdGF0ZS0+
YmFzZS5wbGFuZSA9IHBsYW5lOworCXN0YXRlLT5wZW5kaW5nLmZvcm1hdCA9IERSTV9GT1JNQVRf
UkdCNTY1OworfQorCitzdGF0aWMgc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqbXRrX3BsYW5lX2R1
cGxpY2F0ZV9zdGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSkKK3sKKwlzdHJ1Y3QgbXRrX3Bs
YW5lX3N0YXRlICpvbGRfc3RhdGUgPSB0b19tdGtfcGxhbmVfc3RhdGUocGxhbmUtPnN0YXRlKTsK
KwlzdHJ1Y3QgbXRrX3BsYW5lX3N0YXRlICpzdGF0ZTsKKworCXN0YXRlID0ga3phbGxvYyhzaXpl
b2YoKnN0YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzdGF0ZSkKKwkJcmV0dXJuIE5VTEw7CisK
KwlfX2RybV9hdG9taWNfaGVscGVyX3BsYW5lX2R1cGxpY2F0ZV9zdGF0ZShwbGFuZSwgJnN0YXRl
LT5iYXNlKTsKKworCVdBUk5fT04oc3RhdGUtPmJhc2UucGxhbmUgIT0gcGxhbmUpOworCisJc3Rh
dGUtPnBlbmRpbmcgPSBvbGRfc3RhdGUtPnBlbmRpbmc7CisKKwlyZXR1cm4gJnN0YXRlLT5iYXNl
OworfQorCitzdGF0aWMgdm9pZCBtdGtfZHJtX3BsYW5lX2Rlc3Ryb3lfc3RhdGUoc3RydWN0IGRy
bV9wbGFuZSAqcGxhbmUsCisJCQkJCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlKQorewor
CV9fZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfZGVzdHJveV9zdGF0ZShwbGFuZSwgc3RhdGUpOwor
CWtmcmVlKHRvX210a19wbGFuZV9zdGF0ZShzdGF0ZSkpOworfQorCitzdGF0aWMgY29uc3Qgc3Ry
dWN0IGRybV9wbGFuZV9mdW5jcyBtdGtfcGxhbmVfZnVuY3MgPSB7CisJLnVwZGF0ZV9wbGFuZSA9
IGRybV9hdG9taWNfaGVscGVyX3VwZGF0ZV9wbGFuZSwKKwkuZGlzYWJsZV9wbGFuZSA9IGRybV9h
dG9taWNfaGVscGVyX2Rpc2FibGVfcGxhbmUsCisJLmRlc3Ryb3kgPSBkcm1fcGxhbmVfY2xlYW51
cCwKKwkucmVzZXQgPSBtdGtfcGxhbmVfcmVzZXQsCisJLmF0b21pY19kdXBsaWNhdGVfc3RhdGUg
PSBtdGtfcGxhbmVfZHVwbGljYXRlX3N0YXRlLAorCS5hdG9taWNfZGVzdHJveV9zdGF0ZSA9IG10
a19kcm1fcGxhbmVfZGVzdHJveV9zdGF0ZSwKK307CisKK3N0YXRpYyBpbnQgbXRrX3BsYW5lX2F0
b21pY19jaGVjayhzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKKwkJCQkgIHN0cnVjdCBkcm1fcGxh
bmVfc3RhdGUgKnN0YXRlKQoreworCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gc3RhdGUt
PmZiOworCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTsKKwlib29sIHZpc2libGU7
CisJc3RydWN0IGRybV9yZWN0IGRlc3QgPSB7CisJCS54MSA9IHN0YXRlLT5jcnRjX3gsCisJCS55
MSA9IHN0YXRlLT5jcnRjX3ksCisJCS54MiA9IHN0YXRlLT5jcnRjX3ggKyBzdGF0ZS0+Y3J0Y193
LAorCQkueTIgPSBzdGF0ZS0+Y3J0Y195ICsgc3RhdGUtPmNydGNfaCwKKwl9OworCXN0cnVjdCBk
cm1fcmVjdCBzcmMgPSB7CisJCS8qIDE2LjE2IGZpeGVkIHBvaW50ICovCisJCS54MSA9IHN0YXRl
LT5zcmNfeCwKKwkJLnkxID0gc3RhdGUtPnNyY195LAorCQkueDIgPSBzdGF0ZS0+c3JjX3ggKyBz
dGF0ZS0+c3JjX3csCisJCS55MiA9IHN0YXRlLT5zcmNfeSArIHN0YXRlLT5zcmNfaCwKKwl9Owor
CXN0cnVjdCBkcm1fcmVjdCBjbGlwID0geyAwLCB9OworCisJaWYgKCFmYikKKwkJcmV0dXJuIDA7
CisKKwlpZiAoIW10a19mYl9nZXRfZ2VtX29iaihmYikpIHsKKwkJRFJNX0RFQlVHX0tNUygiYnVm
ZmVyIGlzIG51bGxcbiIpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwlpZiAoIXN0YXRlLT5j
cnRjKQorCQlyZXR1cm4gMDsKKworCWNydGNfc3RhdGUgPSBkcm1fYXRvbWljX2dldF9jcnRjX3N0
YXRlKHN0YXRlLT5zdGF0ZSwgc3RhdGUtPmNydGMpOworCWlmIChJU19FUlIoY3J0Y19zdGF0ZSkp
CisJCXJldHVybiBQVFJfRVJSKGNydGNfc3RhdGUpOworCisJY2xpcC54MiA9IGNydGNfc3RhdGUt
Pm1vZGUuaGRpc3BsYXk7CisJY2xpcC55MiA9IGNydGNfc3RhdGUtPm1vZGUudmRpc3BsYXk7CisK
KwlyZXR1cm4gZHJtX3BsYW5lX2hlbHBlcl9jaGVja191cGRhdGUocGxhbmUsIHN0YXRlLT5jcnRj
LCBmYiwKKwkJCQkJICAgICAmc3JjLCAmZGVzdCwgJmNsaXAsCisJCQkJCSAgICAgRFJNX1BMQU5F
X0hFTFBFUl9OT19TQ0FMSU5HLAorCQkJCQkgICAgIERSTV9QTEFORV9IRUxQRVJfTk9fU0NBTElO
RywKKwkJCQkJICAgICB0cnVlLCB0cnVlLCAmdmlzaWJsZSk7Cit9CisKK3N0YXRpYyB2b2lkIG10
a19wbGFuZV9hdG9taWNfdXBkYXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAorCQkJCSAgICBz
dHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpvbGRfc3RhdGUpCit7CisJc3RydWN0IG10a19wbGFuZV9z
dGF0ZSAqc3RhdGUgPSB0b19tdGtfcGxhbmVfc3RhdGUocGxhbmUtPnN0YXRlKTsKKwlzdHJ1Y3Qg
ZHJtX2NydGMgKmNydGMgPSBzdGF0ZS0+YmFzZS5jcnRjOworCXN0cnVjdCBkcm1fZ2VtX29iamVj
dCAqZ2VtOworCXN0cnVjdCBtdGtfZHJtX2dlbV9vYmogKm10a19nZW07CisJc3RydWN0IG10a19k
cm1fcGxhbmUgKm10a19wbGFuZSA9IHRvX210a19wbGFuZShwbGFuZSk7CisJc3RydWN0IGRybV9y
ZWN0IGRlc3QgPSB7CisJCS54MSA9IHN0YXRlLT5iYXNlLmNydGNfeCwKKwkJLnkxID0gc3RhdGUt
PmJhc2UuY3J0Y195LAorCQkueDIgPSBzdGF0ZS0+YmFzZS5jcnRjX3ggKyBzdGF0ZS0+YmFzZS5j
cnRjX3csCisJCS55MiA9IHN0YXRlLT5iYXNlLmNydGNfeSArIHN0YXRlLT5iYXNlLmNydGNfaCwK
Kwl9OworCXN0cnVjdCBkcm1fcmVjdCBjbGlwID0geyAwLCB9OworCisJaWYgKCFjcnRjKQorCQly
ZXR1cm47CisKKwljbGlwLngyID0gc3RhdGUtPmJhc2UuY3J0Yy0+c3RhdGUtPm1vZGUuaGRpc3Bs
YXk7CisJY2xpcC55MiA9IHN0YXRlLT5iYXNlLmNydGMtPnN0YXRlLT5tb2RlLnZkaXNwbGF5Owor
CWRybV9yZWN0X2ludGVyc2VjdCgmZGVzdCwgJmNsaXApOworCisJZ2VtID0gbXRrX2ZiX2dldF9n
ZW1fb2JqKHN0YXRlLT5iYXNlLmZiKTsKKwltdGtfZ2VtID0gdG9fbXRrX2dlbV9vYmooZ2VtKTsK
KwltdGtfcGxhbmVfZW5hYmxlKG10a19wbGFuZSwgdHJ1ZSwgbXRrX2dlbS0+ZG1hX2FkZHIsICZk
ZXN0KTsKK30KKworc3RhdGljIHZvaWQgbXRrX3BsYW5lX2F0b21pY19kaXNhYmxlKHN0cnVjdCBk
cm1fcGxhbmUgKnBsYW5lLAorCQkJCSAgICAgc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqb2xkX3N0
YXRlKQoreworCXN0cnVjdCBtdGtfcGxhbmVfc3RhdGUgKnN0YXRlID0gdG9fbXRrX3BsYW5lX3N0
YXRlKHBsYW5lLT5zdGF0ZSk7CisKKwlzdGF0ZS0+cGVuZGluZy5lbmFibGUgPSBmYWxzZTsKKwl3
bWIoKTsgLyogTWFrZSBzdXJlIHRoZSBhYm92ZSBwYXJhbWV0ZXIgaXMgc2V0IGJlZm9yZSB1cGRh
dGUgKi8KKwlzdGF0ZS0+cGVuZGluZy5kaXJ0eSA9IHRydWU7Cit9CisKK3N0YXRpYyBjb25zdCBz
dHJ1Y3QgZHJtX3BsYW5lX2hlbHBlcl9mdW5jcyBtdGtfcGxhbmVfaGVscGVyX2Z1bmNzID0gewor
CS5hdG9taWNfY2hlY2sgPSBtdGtfcGxhbmVfYXRvbWljX2NoZWNrLAorCS5hdG9taWNfdXBkYXRl
ID0gbXRrX3BsYW5lX2F0b21pY191cGRhdGUsCisJLmF0b21pY19kaXNhYmxlID0gbXRrX3BsYW5l
X2F0b21pY19kaXNhYmxlLAorfTsKKworaW50IG10a19wbGFuZV9pbml0KHN0cnVjdCBkcm1fZGV2
aWNlICpkZXYsIHN0cnVjdCBtdGtfZHJtX3BsYW5lICptdGtfcGxhbmUsCisJCSAgIHVuc2lnbmVk
IGxvbmcgcG9zc2libGVfY3J0Y3MsIGVudW0gZHJtX3BsYW5lX3R5cGUgdHlwZSwKKwkJICAgdW5z
aWduZWQgaW50IHpwb3MpCit7CisJaW50IGVycjsKKworCWVyciA9IGRybV91bml2ZXJzYWxfcGxh
bmVfaW5pdChkZXYsICZtdGtfcGxhbmUtPmJhc2UsIHBvc3NpYmxlX2NydGNzLAorCQkJCSAgICAg
ICAmbXRrX3BsYW5lX2Z1bmNzLCBmb3JtYXRzLAorCQkJCSAgICAgICBBUlJBWV9TSVpFKGZvcm1h
dHMpLCB0eXBlLCBOVUxMKTsKKwlpZiAoZXJyKSB7CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIGlu
aXRpYWxpemUgcGxhbmVcbiIpOworCQlyZXR1cm4gZXJyOworCX0KKworCWRybV9wbGFuZV9oZWxw
ZXJfYWRkKCZtdGtfcGxhbmUtPmJhc2UsICZtdGtfcGxhbmVfaGVscGVyX2Z1bmNzKTsKKwltdGtf
cGxhbmUtPmlkeCA9IHpwb3M7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMv
Z3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX3BsYW5lLmggYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0
ZWsvbXRrX2RybV9wbGFuZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcy
YTdiM2UKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Ry
bV9wbGFuZS5oCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgTWVk
aWFUZWsgSW5jLgorICogQXV0aG9yOiBDSyBIdSA8Y2suaHVAbWVkaWF0ZWsuY29tPgorICoKKyAq
IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05V
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVm
IF9NVEtfRFJNX1BMQU5FX0hfCisjZGVmaW5lIF9NVEtfRFJNX1BMQU5FX0hfCisKKyNpbmNsdWRl
IDxkcm0vZHJtX2NydGMuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitzdHJ1Y3QgbXRr
X2RybV9wbGFuZSB7CisJc3RydWN0IGRybV9wbGFuZQkJYmFzZTsKKwl1bnNpZ25lZCBpbnQJCQlp
ZHg7Cit9OworCitzdHJ1Y3QgbXRrX3BsYW5lX3BlbmRpbmdfc3RhdGUgeworCWJvb2wJCQkJY29u
ZmlnOworCWJvb2wJCQkJZW5hYmxlOworCWRtYV9hZGRyX3QJCQlhZGRyOworCXVuc2lnbmVkIGlu
dAkJCXBpdGNoOworCXVuc2lnbmVkIGludAkJCWZvcm1hdDsKKwl1bnNpZ25lZCBpbnQJCQl4Owor
CXVuc2lnbmVkIGludAkJCXk7CisJdW5zaWduZWQgaW50CQkJd2lkdGg7CisJdW5zaWduZWQgaW50
CQkJaGVpZ2h0OworCWJvb2wJCQkJZGlydHk7Cit9OworCitzdHJ1Y3QgbXRrX3BsYW5lX3N0YXRl
IHsKKwlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlCQliYXNlOworCXN0cnVjdCBtdGtfcGxhbmVfcGVu
ZGluZ19zdGF0ZQlwZW5kaW5nOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbXRrX2RybV9w
bGFuZSAqdG9fbXRrX3BsYW5lKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lKQoreworCXJldHVybiBj
b250YWluZXJfb2YocGxhbmUsIHN0cnVjdCBtdGtfZHJtX3BsYW5lLCBiYXNlKTsKK30KKworc3Rh
dGljIGlubGluZSBzdHJ1Y3QgbXRrX3BsYW5lX3N0YXRlICoKK3RvX210a19wbGFuZV9zdGF0ZShz
dHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHN0
YXRlLCBzdHJ1Y3QgbXRrX3BsYW5lX3N0YXRlLCBiYXNlKTsKK30KKworaW50IG10a19wbGFuZV9p
bml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBtdGtfZHJtX3BsYW5lICptdGtfcGxh
bmUsCisJCSAgIHVuc2lnbmVkIGxvbmcgcG9zc2libGVfY3J0Y3MsIGVudW0gZHJtX3BsYW5lX3R5
cGUgdHlwZSwKKwkJICAgdW5zaWduZWQgaW50IHpwb3MpOworCisjZW5kaWYKLS0gCjIuNy4wCgpf
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwg
bWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0
cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK