From mboxrd@z Thu Jan 1 00:00:00 1970
From: Philipp Zabel
Subject: [PATCH v6 06/12] drm/mediatek: Add HDMI support
Date: Wed, 18 Nov 2015 18:34:14 +0100
Message-ID: <1447868060-11620-7-git-send-email-p.zabel@pengutronix.de>
References: <1447868060-11620-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: <1447868060-11620-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 , devicetree@vger.kernel.org, Paul Bolle , YT Shen , Jitao Shi , Jie Qiu , Pawel Moll , Ian Campbell , Cawa Cheng , Rob Herring , linux-mediatek@lists.infradead.org, Kumar Gala , Matthias Brugger , kernel@pengutronix.de
List-Id: devicetree@vger.kernel.org
RnJvbTogSmllIFFpdSA8amllLnFpdUBtZWRpYXRlay5jb20+CgpUaGlzIHBhdGNoIGFkZHMgZHJp
dmVycyBmb3IgdGhlIEhETUkgYnJpZGdlIGNvbm5lY3RlZCB0byB0aGUgRFBJMApkaXNwbGF5IHN1
YnN5c3RlbSBmdW5jdGlvbiBibG9jaywgZm9yIHRoZSBIRE1JIEREQyBibG9jaywgYW5kIGZvcgp0
aGUgSERNSSBQSFkgdG8gc3VwcG9ydCBIRE1JIG91dHB1dC4KClNpZ25lZC1vZmYtYnk6IEppZSBR
aXUgPGppZS5xaXVAbWVkaWF0ZWsuY29tPgpTaWduZWQtb2ZmLWJ5OiBQaGlsaXBwIFphYmVsIDxw
LnphYmVsQHBlbmd1dHJvbml4LmRlPgotLS0KQ2hhbmdlcyBzaW5jZSB2NToKLSBSZWdpc3RlciBh
bmQgdW5yZWdpc3RlciBoZG1pIGRyaXZlcnMgaW4gYSBsb29wCi0gQWRkIHN0YXRpYyBrZXl3b3Jk
IHRvIHVuZXhwb3J0ZWQgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb25zCi0gUmVtb3ZlIHVudXNlZCBm
dW5jdGlvbnMKLS0tCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvS2NvbmZpZyAgICAgICAgICAg
ICB8ICAgNiArCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvTWFrZWZpbGUgICAgICAgICAgICB8
ICAgOCArCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2NlYy5jICAgICAgICAgICB8IDI0
NSArKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfY2VjLmggICAgICAgICAg
IHwgIDI1ICsKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5jICAgICAgIHwg
ICAxICsKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2hkbWlfZHJ2LmMgIHwgNjMz
ICsrKysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRt
aS5jICAgICAgICAgIHwgNTE1ICsrKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL21l
ZGlhdGVrL210a19oZG1pLmggICAgICAgICAgfCAxMTggKysrKysKIGRyaXZlcnMvZ3B1L2RybS9t
ZWRpYXRlay9tdGtfaGRtaV9kZGNfZHJ2LmMgIHwgMzYyICsrKysrKysrKysrKysKIGRyaXZlcnMv
Z3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaV9ody5jICAgICAgIHwgNzU3ICsrKysrKysrKysrKysr
KysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19oZG1pX2h3LmggICAg
ICAgfCAgNzYgKysrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2hkbWlfcGh5LmMgICAg
ICB8IDM0MCArKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaV9w
aHkuaCAgICAgIHwgIDIwICsKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaV9waHlf
cmVncy5oIHwgMTE4ICsrKysrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2hkbWlfcmVn
cy5oICAgICB8IDIyMSArKysrKysrKwogaW5jbHVkZS9kcm0vbWVkaWF0ZWsvbXRrX2hkbWlfYXVk
aW8uaCAgICAgICAgfCAxNTAgKysrKysrCiAxNiBmaWxlcyBjaGFuZ2VkLCAzNTk1IGluc2VydGlv
bnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Nl
Yy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19jZWMu
aAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2hk
bWlfZHJ2LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRr
X2hkbWkuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtf
aGRtaS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19o
ZG1pX2RkY19kcnYuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRl
ay9tdGtfaGRtaV9ody5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlh
dGVrL210a19oZG1pX2h3LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVk
aWF0ZWsvbXRrX2hkbWlfcGh5LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0v
bWVkaWF0ZWsvbXRrX2hkbWlfcGh5LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9k
cm0vbWVkaWF0ZWsvbXRrX2hkbWlfcGh5X3JlZ3MuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl
cnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaV9yZWdzLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBp
bmNsdWRlL2RybS9tZWRpYXRlay9tdGtfaGRtaV9hdWRpby5oCgpkaWZmIC0tZ2l0IGEvZHJpdmVy
cy9ncHUvZHJtL21lZGlhdGVrL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvS2Nv
bmZpZwppbmRleCA1MzQzY2YxLi44NWFmNTFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v
bWVkaWF0ZWsvS2NvbmZpZworKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvS2NvbmZpZwpA
QCAtMTQsMyArMTQsOSBAQCBjb25maWcgRFJNX01FRElBVEVLCiAJICBUaGlzIGRyaXZlciBwcm92
aWRlcyBrZXJuZWwgbW9kZSBzZXR0aW5nIGFuZAogCSAgYnVmZmVyIG1hbmFnZW1lbnQgdG8gdXNl
cnNwYWNlLgogCitjb25maWcgRFJNX01FRElBVEVLX0hETUkKKwl0cmlzdGF0ZSAiRFJNIEhETUkg
U3VwcG9ydCBmb3IgTWVkaWF0ZWsgU29DcyIKKwlkZXBlbmRzIG9uIERSTV9NRURJQVRFSworCXNl
bGVjdCBHRU5FUklDX1BIWQorCWhlbHAKKwkgIERSTS9LTVMgSERNSSBkcml2ZXIgZm9yIE1lZGlh
dGVrIFNvQ3MKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9NYWtlZmlsZSBi
L2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9NYWtlZmlsZQppbmRleCA5MzM4MGZlLi5lMmE1YzVj
IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvTWFrZWZpbGUKKysrIGIvZHJp
dmVycy9ncHUvZHJtL21lZGlhdGVrL01ha2VmaWxlCkBAIC0xMSwzICsxMSwxMSBAQCBtZWRpYXRl
ay1kcm0teSA6PSBtdGtfZHJtX2Rydi5vIFwKIAogb2JqLSQoQ09ORklHX0RSTV9NRURJQVRFSykg
Kz0gbWVkaWF0ZWstZHJtLm8KIAorbWVkaWF0ZWstZHJtLWhkbWktb2JqcyA6PSBtdGtfZHJtX2hk
bWlfZHJ2Lm8gXAorCQkJICBtdGtfY2VjLm8gXAorCQkJICBtdGtfaGRtaV9kZGNfZHJ2Lm8gXAor
CQkJICBtdGtfaGRtaS5vIFwKKwkJCSAgbXRrX2hkbWlfaHcubyBcCisJCQkgIG10a19oZG1pX3Bo
eS5vCisKK29iai0kKENPTkZJR19EUk1fTUVESUFURUtfSERNSSkgKz0gbWVkaWF0ZWstZHJtLWhk
bWkubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19jZWMuYyBiL2Ry
aXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfY2VjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uYzMzOWQyZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9t
ZWRpYXRlay9tdGtfY2VjLmMKQEAgLTAsMCArMSwyNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMp
IDIwMTQgTWVkaWFUZWsgSW5jLgorICogQXV0aG9yOiBKaWUgUWl1IDxqaWUucWl1QG1lZGlhdGVr
LmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
Ki8KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2lu
Y2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVk
ZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlICJtdGtfY2VjLmgiCisKKyNk
ZWZpbmUgVFJfQ09ORklHCQkweDAwCisjZGVmaW5lIENMRUFSX0NFQ19JUlEJCQlCSVQoMTUpCisK
KyNkZWZpbmUgQ0VDX0NLR0VOCQkweDA0CisjZGVmaW5lIENFQ18zMktfUEROCQkJQklUKDE5KQor
I2RlZmluZSBQRE4JCQkJQklUKDE2KQorCisjZGVmaW5lIFJYX0VWRU5UCQkweDU0CisjZGVmaW5l
IEhETUlfUE9SRAkJCUJJVCgyNSkKKyNkZWZpbmUgSERNSV9IVFBMRwkJCUJJVCgyNCkKKyNkZWZp
bmUgSERNSV9QT1JEX0lOVF9FTgkJQklUKDkpCisjZGVmaW5lIEhETUlfSFRQTEdfSU5UX0VOCQlC
SVQoOCkKKworI2RlZmluZSBSWF9HRU5fV0QJCTB4NTgKKyNkZWZpbmUgSERNSV9QT1JEX0lOVF8z
MktfU1RBVFVTCUJJVCgyNikKKyNkZWZpbmUgUlhfUklTQ19JTlRfMzJLX1NUQVRVUwkJQklUKDI1
KQorI2RlZmluZSBIRE1JX0hUUExHX0lOVF8zMktfU1RBVFVTCUJJVCgyNCkKKyNkZWZpbmUgSERN
SV9QT1JEX0lOVF8zMktfQ0xSCQlCSVQoMTgpCisjZGVmaW5lIFJYX0lOVF8zMktfQ0xSCQkJQklU
KDE3KQorI2RlZmluZSBIRE1JX0hUUExHX0lOVF8zMktfQ0xSCQlCSVQoMTYpCisjZGVmaW5lIEhE
TUlfUE9SRF9JTlRfMzJLX1NUQV9NQVNLCUJJVCgxMCkKKyNkZWZpbmUgUlhfUklTQ19JTlRfMzJL
X1NUQV9NQVNLCUJJVCg5KQorI2RlZmluZSBIRE1JX0hUUExHX0lOVF8zMktfU1RBX01BU0sJQklU
KDgpCisjZGVmaW5lIEhETUlfUE9SRF9JTlRfMzJLX0VOCQlCSVQoMikKKyNkZWZpbmUgUlhfSU5U
XzMyS19FTgkJCUJJVCgxKQorI2RlZmluZSBIRE1JX0hUUExHX0lOVF8zMktfRU4JCUJJVCgwKQor
CisjZGVmaW5lIE5PUk1BTF9JTlRfQ1RSTAkJMHg1QworI2RlZmluZSBIRE1JX0hUUExHX0lOVF9T
VEEJCUJJVCgwKQorI2RlZmluZSBIRE1JX1BPUkRfSU5UX1NUQQkJQklUKDEpCisjZGVmaW5lIEhE
TUlfSFRQTEdfSU5UX0NMUgkJQklUKDE2KQorI2RlZmluZSBIRE1JX1BPUkRfSU5UX0NMUgkJQklU
KDE3KQorI2RlZmluZSBIRE1JX0ZVTExfSU5UX0NMUgkJQklUKDIwKQorCitzdHJ1Y3QgbXRrX2Nl
YyB7CisJdm9pZCBfX2lvbWVtICpyZWdzOworCXN0cnVjdCBjbGsgKmNsazsKKwlpbnQgaXJxOwor
CWJvb2wgaHBkOworCXZvaWQgKCpocGRfZXZlbnQpKGJvb2wgaHBkLCB2b2lkICpkYXRhKTsKKwl2
b2lkICpocGRfZXZlbnRfZGF0YTsKK307CisKK3N0YXRpYyB2b2lkIG10a19jZWNfbWFzayhzdHJ1
Y3QgbXRrX2NlYyAqY2VjLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LAorCQkJIHVuc2lnbmVkIGludCB2
YWwsIHVuc2lnbmVkIGludCBtYXNrKQoreworCXUzMiB0bXAgPSByZWFkbChjZWMtPnJlZ3MgKyBv
ZmZzZXQpICYgfm1hc2s7CisKKwl0bXAgfD0gdmFsICYgbWFzazsKKwl3cml0ZWwodmFsLCBjZWMt
PnJlZ3MgKyBvZmZzZXQpOworfQorCit2b2lkIG10a19jZWNfc2V0X2hwZF9ldmVudChzdHJ1Y3Qg
ZGV2aWNlICpkZXYsCisJCQkgICB2b2lkICgqaHBkX2V2ZW50KShib29sIGhwZCwgdm9pZCAqZGF0
YSksCisJCQkgICB2b2lkICpocGRfZXZlbnRfZGF0YSkKK3sKKwlzdHJ1Y3QgbXRrX2NlYyAqY2Vj
ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwljZWMtPmhwZF9ldmVudF9kYXRhID0gaHBkX2V2
ZW50X2RhdGE7CisJY2VjLT5ocGRfZXZlbnQgPSBocGRfZXZlbnQ7Cit9CisKK2Jvb2wgbXRrX2Nl
Y19ocGRfaGlnaChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG10a19jZWMgKmNlYyA9
IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXVuc2lnbmVkIGludCBzdGF0dXM7CisKKwlzdGF0dXMg
PSByZWFkbChjZWMtPnJlZ3MgKyBSWF9FVkVOVCk7CisKKwlyZXR1cm4gKHN0YXR1cyAmIChIRE1J
X1BPUkQgfCBIRE1JX0hUUExHKSkgPT0gKEhETUlfUE9SRCB8IEhETUlfSFRQTEcpOworfQorCitp
bnQgbXRrX2NlY19pcnEoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBtdGtfY2VjICpj
ZWMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCXJldHVybiBjZWMtPmlycTsKK30KKworc3Rh
dGljIHZvaWQgbXRrX2NlY19odHBsZ19pcnFfZW5hYmxlKHN0cnVjdCBtdGtfY2VjICpjZWMpCit7
CisJbXRrX2NlY19tYXNrKGNlYywgQ0VDX0NLR0VOLCAwLCBQRE4pOworCW10a19jZWNfbWFzayhj
ZWMsIENFQ19DS0dFTiwgQ0VDXzMyS19QRE4sIENFQ18zMktfUEROKTsKKwltdGtfY2VjX21hc2so
Y2VjLCBSWF9HRU5fV0QsIEhETUlfUE9SRF9JTlRfMzJLX0NMUiwKKwkJICAgICBIRE1JX1BPUkRf
SU5UXzMyS19DTFIpOworCW10a19jZWNfbWFzayhjZWMsIFJYX0dFTl9XRCwgUlhfSU5UXzMyS19D
TFIsIFJYX0lOVF8zMktfQ0xSKTsKKwltdGtfY2VjX21hc2soY2VjLCBSWF9HRU5fV0QsIEhETUlf
SFRQTEdfSU5UXzMyS19DTFIsCisJCSAgICAgSERNSV9IVFBMR19JTlRfMzJLX0NMUik7CisJbXRr
X2NlY19tYXNrKGNlYywgUlhfR0VOX1dELCAwLCBIRE1JX1BPUkRfSU5UXzMyS19DTFIpOworCW10
a19jZWNfbWFzayhjZWMsIFJYX0dFTl9XRCwgMCwgUlhfSU5UXzMyS19DTFIpOworCW10a19jZWNf
bWFzayhjZWMsIFJYX0dFTl9XRCwgMCwgSERNSV9IVFBMR19JTlRfMzJLX0NMUik7CisJbXRrX2Nl
Y19tYXNrKGNlYywgUlhfR0VOX1dELCAwLCBIRE1JX1BPUkRfSU5UXzMyS19FTik7CisJbXRrX2Nl
Y19tYXNrKGNlYywgUlhfR0VOX1dELCAwLCBSWF9JTlRfMzJLX0VOKTsKKwltdGtfY2VjX21hc2so
Y2VjLCBSWF9HRU5fV0QsIDAsIEhETUlfSFRQTEdfSU5UXzMyS19FTik7CisKKwltdGtfY2VjX21h
c2soY2VjLCBSWF9FVkVOVCwgSERNSV9QT1JEX0lOVF9FTiwgSERNSV9QT1JEX0lOVF9FTik7CisJ
bXRrX2NlY19tYXNrKGNlYywgUlhfRVZFTlQsIEhETUlfSFRQTEdfSU5UX0VOLCBIRE1JX0hUUExH
X0lOVF9FTik7Cit9CisKK3N0YXRpYyB2b2lkIG10a19jZWNfaHRwbGdfaXJxX2Rpc2FibGUoc3Ry
dWN0IG10a19jZWMgKmNlYykKK3sKKwltdGtfY2VjX21hc2soY2VjLCBSWF9FVkVOVCwgMCwgSERN
SV9QT1JEX0lOVF9FTik7CisJbXRrX2NlY19tYXNrKGNlYywgUlhfRVZFTlQsIDAsIEhETUlfSFRQ
TEdfSU5UX0VOKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2NlY19jbGVhcl9odHBsZ19pcnEoc3Ry
dWN0IG10a19jZWMgKmNlYykKK3sKKwltdGtfY2VjX21hc2soY2VjLCBUUl9DT05GSUcsIENMRUFS
X0NFQ19JUlEsIENMRUFSX0NFQ19JUlEpOworCW10a19jZWNfbWFzayhjZWMsIE5PUk1BTF9JTlRf
Q1RSTCwgSERNSV9IVFBMR19JTlRfQ0xSLAorCQkgICAgIEhETUlfSFRQTEdfSU5UX0NMUik7CisJ
bXRrX2NlY19tYXNrKGNlYywgTk9STUFMX0lOVF9DVFJMLCBIRE1JX1BPUkRfSU5UX0NMUiwKKwkJ
ICAgICBIRE1JX1BPUkRfSU5UX0NMUik7CisJbXRrX2NlY19tYXNrKGNlYywgTk9STUFMX0lOVF9D
VFJMLCBIRE1JX0ZVTExfSU5UX0NMUiwKKwkJICAgICBIRE1JX0ZVTExfSU5UX0NMUik7CisJbXRr
X2NlY19tYXNrKGNlYywgUlhfR0VOX1dELCBIRE1JX1BPUkRfSU5UXzMyS19DTFIsCisJCSAgICAg
SERNSV9QT1JEX0lOVF8zMktfQ0xSKTsKKwltdGtfY2VjX21hc2soY2VjLCBSWF9HRU5fV0QsIFJY
X0lOVF8zMktfQ0xSLCBSWF9JTlRfMzJLX0NMUik7CisJbXRrX2NlY19tYXNrKGNlYywgUlhfR0VO
X1dELCBIRE1JX0hUUExHX0lOVF8zMktfQ0xSLAorCQkgICAgIEhETUlfSFRQTEdfSU5UXzMyS19D
TFIpOworCXVkZWxheSg1KTsKKwltdGtfY2VjX21hc2soY2VjLCBOT1JNQUxfSU5UX0NUUkwsIDAs
IEhETUlfSFRQTEdfSU5UX0NMUik7CisJbXRrX2NlY19tYXNrKGNlYywgTk9STUFMX0lOVF9DVFJM
LCAwLCBIRE1JX1BPUkRfSU5UX0NMUik7CisJbXRrX2NlY19tYXNrKGNlYywgVFJfQ09ORklHLCAw
LCBDTEVBUl9DRUNfSVJRKTsKKwltdGtfY2VjX21hc2soY2VjLCBOT1JNQUxfSU5UX0NUUkwsIDAs
IEhETUlfRlVMTF9JTlRfQ0xSKTsKKwltdGtfY2VjX21hc2soY2VjLCBSWF9HRU5fV0QsIDAsIEhE
TUlfUE9SRF9JTlRfMzJLX0NMUik7CisJbXRrX2NlY19tYXNrKGNlYywgUlhfR0VOX1dELCAwLCBS
WF9JTlRfMzJLX0NMUik7CisJbXRrX2NlY19tYXNrKGNlYywgUlhfR0VOX1dELCAwLCBIRE1JX0hU
UExHX0lOVF8zMktfQ0xSKTsKK30KKworc3RhdGljIGlycXJldHVybl90IG10a19jZWNfaHRwbGdf
aXNyX3RocmVhZChpbnQgaXJxLCB2b2lkICphcmcpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0g
YXJnOworCXN0cnVjdCBtdGtfY2VjICpjZWMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlib29s
IGhwZDsKKworCW10a19jZWNfY2xlYXJfaHRwbGdfaXJxKGNlYyk7CisJaHBkID0gbXRrX2NlY19o
cGRfaGlnaChkZXYpOworCisJaWYgKGNlYy0+aHBkICE9IGhwZCkgeworCQlkZXZfaW5mbyhkZXYs
ICJob3RwbHVnIGV2ZW50ISxjdXIgaHBkID0gJWQsIGhwZCA9ICVkXG4iLAorCQkJIGNlYy0+aHBk
LCBocGQpOworCQljZWMtPmhwZCA9IGhwZDsKKwkJaWYgKGNlYy0+aHBkX2V2ZW50KQorCQkJY2Vj
LT5ocGRfZXZlbnQoaHBkLCBjZWMtPmhwZF9ldmVudF9kYXRhKTsKKwl9CisJcmV0dXJuIElSUV9I
QU5ETEVEOworfQorCitzdGF0aWMgaW50IG10a19jZWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2Rl
dmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCXN0cnVj
dCBtdGtfY2VjICpjZWM7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJaW50IHJldDsKKworCWNl
YyA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqY2VjKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFj
ZWMpCisJCXJldHVybiAtRU5PTUVNOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgY2Vj
KTsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwg
MCk7CisJY2VjLT5yZWdzID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwgcmVzKTsKKwlpZiAo
SVNfRVJSKGNlYy0+cmVncykpIHsKKwkJcmV0ID0gUFRSX0VSUihjZWMtPnJlZ3MpOworCQlkZXZf
ZXJyKGRldiwgIkZhaWxlZCB0byBpb3JlbWFwIGNlYzogJWRcbiIsIHJldCk7CisJCXJldHVybiBy
ZXQ7CisJfQorCisJY2VjLT5jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCBOVUxMKTsKKwlpZiAoSVNf
RVJSKGNlYy0+Y2xrKSkgeworCQlyZXQgPSBQVFJfRVJSKGNlYy0+Y2xrKTsKKwkJZGV2X2Vycihk
ZXYsICJGYWlsZWQgdG8gZ2V0IGNlYyBjbG9jazogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7
CisJfQorCisJY2VjLT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlmIChjZWMt
PmlycSA8IDApIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZ2V0IGNlYyBpcnE6ICVkXG4i
LCBjZWMtPmlycSk7CisJCXJldHVybiBjZWMtPmlycTsKKwl9CisKKwlyZXQgPSBkZXZtX3JlcXVl
c3RfdGhyZWFkZWRfaXJxKGRldiwgY2VjLT5pcnEsIE5VTEwsCisJCQkJCW10a19jZWNfaHRwbGdf
aXNyX3RocmVhZCwKKwkJCQkJSVJRRl9TSEFSRUQgfCBJUlFGX1RSSUdHRVJfTE9XIHwKKwkJCQkJ
SVJRRl9PTkVTSE9ULCAiaGRtaSBocGQiLCBkZXYpOworCWlmIChyZXQpIHsKKwkJZGV2X2Vycihk
ZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgY2VjIGlycTogJWRcbiIsIHJldCk7CisJCXJldHVybiBy
ZXQ7CisJfQorCisJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGNlYy0+Y2xrKTsKKwlpZiAocmV0
KSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGVuYWJsZSBjZWMgY2xvY2s6ICVkXG4iLCBy
ZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCW10a19jZWNfaHRwbGdfaXJxX2VuYWJsZShjZWMp
OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2NlY19yZW1vdmUoc3RydWN0IHBs
YXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgbXRrX2NlYyAqY2VjID0gcGxhdGZvcm1f
Z2V0X2RydmRhdGEocGRldik7CisKKwltdGtfY2VjX2h0cGxnX2lycV9kaXNhYmxlKGNlYyk7CisJ
Y2xrX2Rpc2FibGVfdW5wcmVwYXJlKGNlYy0+Y2xrKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj
IGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbXRrX2NlY19vZl9pZHNbXSA9IHsKKwl7IC5jb21w
YXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1jZWMiLCB9LAorCXt9Cit9OworCitzdHJ1Y3QgcGxh
dGZvcm1fZHJpdmVyIG10a19jZWNfZHJpdmVyID0geworCS5wcm9iZSA9IG10a19jZWNfcHJvYmUs
CisJLnJlbW92ZSA9IG10a19jZWNfcmVtb3ZlLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gIm1l
ZGlhdGVrLWNlYyIsCisJCS5vZl9tYXRjaF90YWJsZSA9IG10a19jZWNfb2ZfaWRzLAorCX0sCit9
OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19jZWMuaCBiL2RyaXZl
cnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfY2VjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uODMwNjQyMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRp
YXRlay9tdGtfY2VjLmgKQEAgLTAsMCArMSwyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAx
NCBNZWRpYVRlayBJbmMuCisgKiBBdXRob3I6IEppZSBRaXUgPGppZS5xaXVAbWVkaWF0ZWsuY29t
PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLwor
I2lmbmRlZiBfTVRLX0NFQ19ICisjZGVmaW5lIF9NVEtfQ0VDX0gKKworc3RydWN0IGRldmljZTsK
Kwordm9pZCBtdGtfY2VjX3NldF9ocGRfZXZlbnQoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAg
dm9pZCAoKmhvdHBsdWdfZXZlbnQpKGJvb2wgaHBkLCB2b2lkICpkYXRhKSwKKwkJCSAgIHZvaWQg
KmhvdHBsdWdfZXZlbnRfZGF0YSk7Citib29sIG10a19jZWNfaHBkX2hpZ2goc3RydWN0IGRldmlj
ZSAqZGV2KTsKK2ludCBtdGtfY2VjX2lycShzdHJ1Y3QgZGV2aWNlICpkZXYpOworCisjZW5kaWYg
LyogX01US19DRUNfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210
a19kcm1fZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuYwppbmRl
eCA1Y2I2MTlhLi41NWRkYWRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv
bXRrX2RybV9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYu
YwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CiAjaW5j
bHVkZSA8bGludXgvcG1fcnVudGltZS5oPgogCisjaW5jbHVkZSAibXRrX2NlYy5oIgogI2luY2x1
ZGUgIm10a19kcm1fY3J0Yy5oIgogI2luY2x1ZGUgIm10a19kcm1fZGRwLmgiCiAjaW5jbHVkZSAi
bXRrX2RybV9kZHBfY29tcC5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVr
L210a19kcm1faGRtaV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2hk
bWlfZHJ2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmExNmVkNQotLS0g
L2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2hkbWlfZHJ2
LmMKQEAgLTAsMCArMSw2MzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQgTWVkaWFUZWsg
SW5jLgorICogQXV0aG9yOiBKaWUgUWl1IDxqaWUucWl1QG1lZGlhdGVrLmNvbT4KKyAqCisgKiBU
aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpbmNsdWRlIDxk
cm0vZHJtUC5oPgorI2luY2x1ZGUgPGRybS9kcm1fY3J0Yy5oPgorI2luY2x1ZGUgPGRybS9kcm1f
Y3J0Y19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIuaD4KKyNpbmNs
dWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51
eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvc3lzY29uLmg+CisjaW5jbHVkZSA8bGlu
dXgvb2ZfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4
L29mX2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9ncmFwaC5oPgorI2luY2x1ZGUgPGxpbnV4
L3BoeS9waHkuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRl
ICJtdGtfY2VjLmgiCisjaW5jbHVkZSAibXRrX2hkbWkuaCIKKyNpbmNsdWRlICJtdGtfaGRtaV9o
dy5oIgorI2luY2x1ZGUgIm10a19oZG1pX3BoeS5oIgorCitzdGF0aWMgY29uc3QgY2hhciAqIGNv
bnN0IG10a19oZG1pX2Nsa19uYW1lc1tNVEtfSERNSV9DTEtfQ09VTlRdID0geworCVtNVEtfSERN
SV9DTEtfSERNSV9QSVhFTF0gPSAicGl4ZWwiLAorCVtNVEtfSERNSV9DTEtfSERNSV9QTExdID0g
InBsbCIsCisJW01US19IRE1JX0NMS19BVURfQkNMS10gPSAiYmNsayIsCisJW01US19IRE1JX0NM
S19BVURfU1BESUZdID0gInNwZGlmIiwKK307CisKK3N0YXRpYyBjb25zdCBlbnVtIG10a19oZG1p
X2Nsa19pZCBtdGtfaGRtaV9lbmFibGVfY2xvY2tzW10gPSB7CisJTVRLX0hETUlfQ0xLX0FVRF9C
Q0xLLAorCU1US19IRE1JX0NMS19BVURfU1BESUYsCit9OworCitzdGF0aWMgaW50IG10a19oZG1p
X2dldF9hbGxfY2xrKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwKKwkJCQlzdHJ1Y3QgZGV2aWNlX25v
ZGUgKm5wKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobXRrX2hk
bWlfY2xrX25hbWVzKTsgaSsrKSB7CisJCWhkbWktPmNsa1tpXSA9IG9mX2Nsa19nZXRfYnlfbmFt
ZShucCwKKwkJCQkJCSAgbXRrX2hkbWlfY2xrX25hbWVzW2ldKTsKKwkJaWYgKElTX0VSUihoZG1p
LT5jbGtbaV0pKQorCQkJcmV0dXJuIFBUUl9FUlIoaGRtaS0+Y2xrW2ldKTsKKwl9CisJcmV0dXJu
IDA7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2hkbWlfY2xrX2VuYWJsZV9hdWRpbyhzdHJ1Y3QgbXRr
X2hkbWkgKmhkbWkpCit7CisJaW50IHJldDsKKworCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZSho
ZG1pLT5jbGtbTVRLX0hETUlfQ0xLX0FVRF9CQ0xLXSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJl
dDsKKworCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShoZG1pLT5jbGtbTVRLX0hETUlfQ0xLX0FV
RF9TUERJRl0pOworCWlmIChyZXQpCisJCWdvdG8gZXJyOworCisJcmV0dXJuIDA7CitlcnI6CisJ
Y2xrX2Rpc2FibGVfdW5wcmVwYXJlKGhkbWktPmNsa1tNVEtfSERNSV9DTEtfQVVEX0JDTEtdKTsK
KwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBtdGtfaGRtaV9jbGtfZGlzYWJsZV9hdWRp
byhzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkpCit7CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGhkbWkt
PmNsa1tNVEtfSERNSV9DTEtfQVVEX0JDTEtdKTsKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoaGRt
aS0+Y2xrW01US19IRE1JX0NMS19BVURfU1BESUZdKTsKK30KKworc3RhdGljIGVudW0gZHJtX2Nv
bm5lY3Rvcl9zdGF0dXMgaGRtaV9jb25uX2RldGVjdChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29u
biwKKwkJCQkJCSAgYm9vbCBmb3JjZSkKK3sKKwlzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkgPSBoZG1p
X2N0eF9mcm9tX2Nvbm4oY29ubik7CisKKwlyZXR1cm4gbXRrX2hkbWlfaHBkX2hpZ2goaGRtaSkg
PworCSAgICAgICBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZCA6IGNvbm5lY3Rvcl9zdGF0dXNf
ZGlzY29ubmVjdGVkOworfQorCitzdGF0aWMgdm9pZCBoZG1pX2Nvbm5fZGVzdHJveShzdHJ1Y3Qg
ZHJtX2Nvbm5lY3RvciAqY29ubikKK3sKKwlzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkgPSBoZG1pX2N0
eF9mcm9tX2Nvbm4oY29ubik7CisKKwltdGtfY2VjX3NldF9ocGRfZXZlbnQoaGRtaS0+Y2VjX2Rl
diwgTlVMTCwgTlVMTCk7CisKKwlkcm1fY29ubmVjdG9yX3VucmVnaXN0ZXIoY29ubik7CisJZHJt
X2Nvbm5lY3Rvcl9jbGVhbnVwKGNvbm4pOworfQorCitzdGF0aWMgaW50IGhkbWlfY29ubl9zZXRf
cHJvcGVydHkoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm4sCisJCQkJICBzdHJ1Y3QgZHJtX3By
b3BlcnR5ICpwcm9wZXJ0eSwgdWludDY0X3QgdmFsKQoreworCXJldHVybiAwOworfQorCitzdGF0
aWMgaW50IG10a19oZG1pX2Nvbm5fZ2V0X21vZGVzKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25u
KQoreworCXN0cnVjdCBtdGtfaGRtaSAqaGRtaSA9IGhkbWlfY3R4X2Zyb21fY29ubihjb25uKTsK
KwlzdHJ1Y3QgZWRpZCAqZWRpZDsKKwlpbnQgcmV0OworCisJaWYgKCFoZG1pLT5kZGNfYWRwdCkK
KwkJcmV0dXJuIC1FTk9ERVY7CisKKwllZGlkID0gZHJtX2dldF9lZGlkKGNvbm4sIGhkbWktPmRk
Y19hZHB0KTsKKwlpZiAoIWVkaWQpCisJCXJldHVybiAtRU5PREVWOworCisJaGRtaS0+ZHZpX21v
ZGUgPSAhZHJtX2RldGVjdF9oZG1pX21vbml0b3IoZWRpZCk7CisKKwlkcm1fbW9kZV9jb25uZWN0
b3JfdXBkYXRlX2VkaWRfcHJvcGVydHkoY29ubiwgZWRpZCk7CisKKwlyZXQgPSBkcm1fYWRkX2Vk
aWRfbW9kZXMoY29ubiwgZWRpZCk7CisJa2ZyZWUoZWRpZCk7CisJcmV0dXJuIHJldDsKK30KKwor
c3RhdGljIGludCBtdGtfaGRtaV9jb25uX21vZGVfdmFsaWQoc3RydWN0IGRybV9jb25uZWN0b3Ig
KmNvbm4sCisJCQkJICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQoreworCXN0cnVj
dCBtdGtfaGRtaSAqaGRtaSA9IGhkbWlfY3R4X2Zyb21fY29ubihjb25uKTsKKworCWRldl9pbmZv
KGhkbWktPmRldiwgInhyZXM9JWQsIHlyZXM9JWQsIHJlZnJlc2g9JWQsIGludGw9JWQgY2xvY2s9
JWRcbiIsCisJCSBtb2RlLT5oZGlzcGxheSwgbW9kZS0+dmRpc3BsYXksIG1vZGUtPnZyZWZyZXNo
LAorCQkgISEobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0lOVEVSTEFDRSksIG1vZGUtPmNs
b2NrICogMTAwMCk7CisKKwlpZiAoaGRtaS0+YnJpZGdlLm5leHQpIHsKKwkJc3RydWN0IGRybV9k
aXNwbGF5X21vZGUgYWRqdXN0ZWRfbW9kZTsKKworCQlkcm1fbW9kZV9jb3B5KCZhZGp1c3RlZF9t
b2RlLCBtb2RlKTsKKwkJaWYgKCFkcm1fYnJpZGdlX21vZGVfZml4dXAoaGRtaS0+YnJpZGdlLm5l
eHQsIG1vZGUsCisJCQkJCSAgICZhZGp1c3RlZF9tb2RlKSkKKwkJCXJldHVybiBNT0RFX0JBRDsK
Kwl9CisKKwlpZiAobW9kZS0+Y2xvY2sgPj0gMjcwMDAgJiYKKwkgICAgbW9kZS0+Y2xvY2sgPD0g
Mjk3MDAwICYmCisJICAgIG1vZGUtPmhkaXNwbGF5IDw9IDB4MWZmZiAmJgorCSAgICBtb2RlLT52
ZGlzcGxheSA8PSAweDFmZmYpCisJCXJldHVybiBNT0RFX09LOworCisJcmV0dXJuIE1PREVfQkFE
OworfQorCitzdGF0aWMgc3RydWN0IGRybV9lbmNvZGVyICptdGtfaGRtaV9jb25uX2Jlc3RfZW5j
KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uKQoreworCXN0cnVjdCBtdGtfaGRtaSAqaGRtaSA9
IGhkbWlfY3R4X2Zyb21fY29ubihjb25uKTsKKworCXJldHVybiBoZG1pLT5icmlkZ2UuZW5jb2Rl
cjsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX2Z1bmNzIG10a19oZG1p
X2Nvbm5lY3Rvcl9mdW5jcyA9IHsKKwkuZHBtcyA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rv
cl9kcG1zLAorCS5kZXRlY3QgPSBoZG1pX2Nvbm5fZGV0ZWN0LAorCS5maWxsX21vZGVzID0gZHJt
X2hlbHBlcl9wcm9iZV9zaW5nbGVfY29ubmVjdG9yX21vZGVzLAorCS5kZXN0cm95ID0gaGRtaV9j
b25uX2Rlc3Ryb3ksCisJLnNldF9wcm9wZXJ0eSA9IGhkbWlfY29ubl9zZXRfcHJvcGVydHksCisJ
LnJlc2V0ID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX3Jlc2V0LAorCS5hdG9taWNfZHVw
bGljYXRlX3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2R1cGxpY2F0ZV9zdGF0
ZSwKKwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3Jf
ZGVzdHJveV9zdGF0ZSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9o
ZWxwZXJfZnVuY3MKKwkJbXRrX2hkbWlfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyA9IHsKKwkuZ2V0
X21vZGVzID0gbXRrX2hkbWlfY29ubl9nZXRfbW9kZXMsCisJLm1vZGVfdmFsaWQgPSBtdGtfaGRt
aV9jb25uX21vZGVfdmFsaWQsCisJLmJlc3RfZW5jb2RlciA9IG10a19oZG1pX2Nvbm5fYmVzdF9l
bmMsCit9OworCitzdGF0aWMgdm9pZCBtdGtfaGRtaV9ocGRfZXZlbnQoYm9vbCBocGQsIHZvaWQg
KmRhdGEpCit7CisJc3RydWN0IG10a19oZG1pICpoZG1pID0gZGF0YTsKKworCWlmIChoZG1pICYm
IGhkbWktPmJyaWRnZS5lbmNvZGVyICYmIGhkbWktPmJyaWRnZS5lbmNvZGVyLT5kZXYpCisJCWRy
bV9oZWxwZXJfaHBkX2lycV9ldmVudChoZG1pLT5icmlkZ2UuZW5jb2Rlci0+ZGV2KTsKK30KKwor
LyoKKyAqIEJyaWRnZSBjYWxsYmFja3MKKyAqLworCitzdGF0aWMgaW50IG10a19oZG1pX2JyaWRn
ZV9hdHRhY2goc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKK3sKKwlzdHJ1Y3QgbXRrX2hkbWkg
KmhkbWkgPSBoZG1pX2N0eF9mcm9tX2JyaWRnZShicmlkZ2UpOworCWludCByZXQ7CisKKwlyZXQg
PSBkcm1fY29ubmVjdG9yX2luaXQoYnJpZGdlLT5lbmNvZGVyLT5kZXYsICZoZG1pLT5jb25uLAor
CQkJCSAmbXRrX2hkbWlfY29ubmVjdG9yX2Z1bmNzLAorCQkJCSBEUk1fTU9ERV9DT05ORUNUT1Jf
SERNSUEpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihoZG1pLT5kZXYsICJGYWlsZWQgdG8gaW5p
dGlhbGl6ZSBjb25uZWN0b3I6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwlkcm1f
Y29ubmVjdG9yX2hlbHBlcl9hZGQoJmhkbWktPmNvbm4sICZtdGtfaGRtaV9jb25uZWN0b3JfaGVs
cGVyX2Z1bmNzKTsKKworCWhkbWktPmNvbm4ucG9sbGVkID0gRFJNX0NPTk5FQ1RPUl9QT0xMX0hQ
RDsKKwloZG1pLT5jb25uLmludGVybGFjZV9hbGxvd2VkID0gdHJ1ZTsKKwloZG1pLT5jb25uLmRv
dWJsZXNjYW5fYWxsb3dlZCA9IGZhbHNlOworCisJcmV0ID0gZHJtX2Nvbm5lY3Rvcl9yZWdpc3Rl
cigmaGRtaS0+Y29ubik7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGhkbWktPmRldiwgIkZhaWxl
ZCB0byByZWdpc3RlciBjb25uZWN0b3I6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0K
KworCXJldCA9IGRybV9tb2RlX2Nvbm5lY3Rvcl9hdHRhY2hfZW5jb2RlcigmaGRtaS0+Y29ubiwK
KwkJCQkJCWJyaWRnZS0+ZW5jb2Rlcik7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGhkbWktPmRl
diwKKwkJCSJGYWlsZWQgdG8gYXR0YWNoIGNvbm5lY3RvciB0byBlbmNvZGVyOiAlZFxuIiwgcmV0
KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlpZiAoYnJpZGdlLT5uZXh0KSB7CisJCWJyaWRnZS0+
bmV4dC0+ZW5jb2RlciA9IGJyaWRnZS0+ZW5jb2RlcjsKKwkJcmV0ID0gZHJtX2JyaWRnZV9hdHRh
Y2goYnJpZGdlLT5lbmNvZGVyLT5kZXYsIGJyaWRnZS0+bmV4dCk7CisJCWlmIChyZXQpIHsKKwkJ
CWRldl9lcnIoaGRtaS0+ZGV2LAorCQkJCSJGYWlsZWQgdG8gYXR0YWNoIGV4dGVybmFsIGJyaWRn
ZTogJWRcbiIsIHJldCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCisJbXRrX2NlY19zZXRf
aHBkX2V2ZW50KGhkbWktPmNlY19kZXYsIG10a19oZG1pX2hwZF9ldmVudCwgaGRtaSk7CisKKwly
ZXR1cm4gMDsKK30KKworc3RhdGljIGJvb2wgbXRrX2hkbWlfYnJpZGdlX21vZGVfZml4dXAoc3Ry
dWN0IGRybV9icmlkZ2UgKmJyaWRnZSwKKwkJCQljb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9k
ZSAqbW9kZSwKKwkJCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSkKK3sK
KwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQgbXRrX2hkbWlfYnJpZGdlX2Rpc2FibGUo
c3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKK3sKKwlzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkgPSBo
ZG1pX2N0eF9mcm9tX2JyaWRnZShicmlkZ2UpOworCisJcGh5X3Bvd2VyX29mZihoZG1pLT5waHkp
OworCWNsa19kaXNhYmxlX3VucHJlcGFyZShoZG1pLT5jbGtbTVRLX0hETUlfQ0xLX0hETUlfUElY
RUxdKTsKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoaGRtaS0+Y2xrW01US19IRE1JX0NMS19IRE1J
X1BMTF0pOworfQorCitzdGF0aWMgdm9pZCBtdGtfaGRtaV9icmlkZ2VfcG9zdF9kaXNhYmxlKHN0
cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UpCit7CisJc3RydWN0IG10a19oZG1pICpoZG1pID0gaGRt
aV9jdHhfZnJvbV9icmlkZ2UoYnJpZGdlKTsKKworCW10a19oZG1pX3Bvd2VyX29mZihoZG1pKTsK
K30KKworc3RhdGljIHZvaWQgbXRrX2hkbWlfYnJpZGdlX21vZGVfc2V0KHN0cnVjdCBkcm1fYnJp
ZGdlICpicmlkZ2UsCisJCQkgICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKKwkJ
CSAgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlKQoreworCXN0cnVj
dCBtdGtfaGRtaSAqaGRtaSA9IGhkbWlfY3R4X2Zyb21fYnJpZGdlKGJyaWRnZSk7CisKKwlkZXZf
aW5mbyhoZG1pLT5kZXYsICJjdXIgaW5mbzogbmFtZTolcywgaGRpc3BsYXk6JWRcbiIsCisJCSBh
ZGp1c3RlZF9tb2RlLT5uYW1lLCBhZGp1c3RlZF9tb2RlLT5oZGlzcGxheSk7CisJZGV2X2luZm8o
aGRtaS0+ZGV2LCAiaHN5bmNfc3RhcnQ6JWQsaHN5bmNfZW5kOiVkLCBodG90YWw6JWQiLAorCQkg
YWRqdXN0ZWRfbW9kZS0+aHN5bmNfc3RhcnQsIGFkanVzdGVkX21vZGUtPmhzeW5jX2VuZCwKKwkJ
IGFkanVzdGVkX21vZGUtPmh0b3RhbCk7CisJZGV2X2luZm8oaGRtaS0+ZGV2LCAiaHNrZXc6JWQs
IHZkaXNwbGF5OiVkXG4iLAorCQkgYWRqdXN0ZWRfbW9kZS0+aHNrZXcsIGFkanVzdGVkX21vZGUt
PnZkaXNwbGF5KTsKKwlkZXZfaW5mbyhoZG1pLT5kZXYsICJ2c3luY19zdGFydDolZCwgdnN5bmNf
ZW5kOiVkLCB2dG90YWw6JWQiLAorCQkgYWRqdXN0ZWRfbW9kZS0+dnN5bmNfc3RhcnQsIGFkanVz
dGVkX21vZGUtPnZzeW5jX2VuZCwKKwkJIGFkanVzdGVkX21vZGUtPnZ0b3RhbCk7CisJZGV2X2lu
Zm8oaGRtaS0+ZGV2LCAidnNjYW46JWQsIGZsYWc6JWRcbiIsCisJCSBhZGp1c3RlZF9tb2RlLT52
c2NhbiwgYWRqdXN0ZWRfbW9kZS0+ZmxhZ3MpOworCisJZHJtX21vZGVfY29weSgmaGRtaS0+bW9k
ZSwgYWRqdXN0ZWRfbW9kZSk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19oZG1pX2JyaWRnZV9wcmVf
ZW5hYmxlKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UpCit7CisJc3RydWN0IG10a19oZG1pICpo
ZG1pID0gaGRtaV9jdHhfZnJvbV9icmlkZ2UoYnJpZGdlKTsKKworCW10a19oZG1pX3Bvd2VyX29u
KGhkbWkpOworfQorCitzdGF0aWMgdm9pZCBtdGtfaGRtaV9icmlkZ2VfZW5hYmxlKHN0cnVjdCBk
cm1fYnJpZGdlICpicmlkZ2UpCit7CisJc3RydWN0IG10a19oZG1pICpoZG1pID0gaGRtaV9jdHhf
ZnJvbV9icmlkZ2UoYnJpZGdlKTsKKworCW10a19oZG1pX291dHB1dF9zZXRfZGlzcGxheV9tb2Rl
KGhkbWksICZoZG1pLT5tb2RlKTsKKwljbGtfcHJlcGFyZV9lbmFibGUoaGRtaS0+Y2xrW01US19I
RE1JX0NMS19IRE1JX1BMTF0pOworCWNsa19wcmVwYXJlX2VuYWJsZShoZG1pLT5jbGtbTVRLX0hE
TUlfQ0xLX0hETUlfUElYRUxdKTsKKwlwaHlfcG93ZXJfb24oaGRtaS0+cGh5KTsKK30KKworc3Rh
dGljIGNvbnN0IHN0cnVjdCBkcm1fYnJpZGdlX2Z1bmNzIG10a19oZG1pX2JyaWRnZV9mdW5jcyA9
IHsKKwkuYXR0YWNoID0gbXRrX2hkbWlfYnJpZGdlX2F0dGFjaCwKKwkubW9kZV9maXh1cCA9IG10
a19oZG1pX2JyaWRnZV9tb2RlX2ZpeHVwLAorCS5kaXNhYmxlID0gbXRrX2hkbWlfYnJpZGdlX2Rp
c2FibGUsCisJLnBvc3RfZGlzYWJsZSA9IG10a19oZG1pX2JyaWRnZV9wb3N0X2Rpc2FibGUsCisJ
Lm1vZGVfc2V0ID0gbXRrX2hkbWlfYnJpZGdlX21vZGVfc2V0LAorCS5wcmVfZW5hYmxlID0gbXRr
X2hkbWlfYnJpZGdlX3ByZV9lbmFibGUsCisJLmVuYWJsZSA9IG10a19oZG1pX2JyaWRnZV9lbmFi
bGUsCit9OworCitzdGF0aWMgaW50IG10a19oZG1pX2R0X3BhcnNlX3BkYXRhKHN0cnVjdCBtdGtf
aGRtaSAqaGRtaSwKKwkJCQkgICBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0
cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0IGRldmljZV9ub2RlICpucCA9
IGRldi0+b2Zfbm9kZTsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNlY19ucCwgKnBvcnQsICplcCwg
KnJlbW90ZSwgKmkyY19ucDsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpjZWNfcGRldjsKKwlz
dHJ1Y3QgcmVnbWFwICpyZWdtYXA7CisJc3RydWN0IHJlc291cmNlICptZW07CisJaW50IHJldDsK
KworCWhkbWktPmZsdF9uXzV2X2dwaW8gPSBvZl9nZXRfbmFtZWRfZ3BpbyhucCwgImZsdF9uXzV2
LWdwaW9zIiwgMCk7CisJaWYgKGhkbWktPmZsdF9uXzV2X2dwaW8gPCAwKSB7CisJCWRldl9lcnIo
ZGV2LCAiRmFpbGVkIHRvIGdldCBmbHRfbl81diBncGlvOiAlZFxuIiwKKwkJCWhkbWktPmZsdF9u
XzV2X2dwaW8pOworCQlyZXR1cm4gaGRtaS0+Zmx0X25fNXZfZ3BpbzsKKwl9CisKKwlyZXQgPSBt
dGtfaGRtaV9nZXRfYWxsX2NsayhoZG1pLCBucCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRl
diwgIkZhaWxlZCB0byBnZXQgY2xvY2tzOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9
CisKKwkvKiBUaGUgQ0VDIG1vZHVsZSBoYW5kbGVzIEhETUkgaG90cGx1ZyBkZXRlY3Rpb24gKi8K
KwljZWNfbnAgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShucC0+cGFyZW50LCBOVUxMLAorCQkJ
CQkgIm1lZGlhdGVrLG10ODE3My1jZWMiKTsKKwlpZiAoIWNlY19ucCkgeworCQlkZXZfZXJyKGRl
diwgIkZhaWxlZCB0byBmaW5kIENFQyBub2RlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQor
CisJY2VjX3BkZXYgPSBvZl9maW5kX2RldmljZV9ieV9ub2RlKGNlY19ucCk7CisJaWYgKCFjZWNf
cGRldikgeworCQlkZXZfZXJyKGhkbWktPmRldiwgIldhaXRpbmcgZm9yIENFQyBkZXZpY2UgJXNc
biIsCisJCQljZWNfbnAtPmZ1bGxfbmFtZSk7CisJCXJldHVybiAtRVBST0JFX0RFRkVSOworCX0K
KwloZG1pLT5jZWNfZGV2ID0gJmNlY19wZGV2LT5kZXY7CisKKwkvKgorCSAqIFRoZSBtZWRpYXRl
ayxzeXNjb24taGRtaSBwcm9wZXJ0eSBjb250YWlucyBhIHBoYW5kbGUgbGluayB0byB0aGUKKwkg
KiBNTVNZU19DT05GSUcgZGV2aWNlIGFuZCB0aGUgcmVnaXN0ZXIgb2Zmc2V0IG9mIHRoZSBIRE1J
X1NZU19DRkcKKwkgKiByZWdpc3RlcnMgaXQgY29udGFpbnMuCisJICovCisJcmVnbWFwID0gc3lz
Y29uX3JlZ21hcF9sb29rdXBfYnlfcGhhbmRsZShucCwgIm1lZGlhdGVrLHN5c2Nvbi1oZG1pIik7
CisJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzJfaW5kZXgobnAsICJtZWRpYXRlayxzeXNjb24t
aGRtaSIsIDEsCisJCQkJCSAmaGRtaS0+c3lzX29mZnNldCk7CisJaWYgKElTX0VSUihyZWdtYXAp
KQorCQlyZXQgPSBQVFJfRVJSKHJlZ21hcCk7CisJaWYgKHJldCkgeworCQlyZXQgPSBQVFJfRVJS
KHJlZ21hcCk7CisJCWRldl9lcnIoZGV2LAorCQkJIkZhaWxlZCB0byBnZXQgc3lzdGVtIGNvbmZp
Z3VyYXRpb24gcmVnaXN0ZXJzOiAlZFxuIiwKKwkJCXJldCk7CisJCXJldHVybiByZXQ7CisJfQor
CWhkbWktPnN5c19yZWdtYXAgPSByZWdtYXA7CisKKwltZW0gPSBwbGF0Zm9ybV9nZXRfcmVzb3Vy
Y2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWhkbWktPnJlZ3MgPSBkZXZtX2lvcmVtYXBf
cmVzb3VyY2UoZGV2LCBtZW0pOworCWlmIChJU19FUlIoaGRtaS0+cmVncykpIHsKKwkJZGV2X2Vy
cihkZXYsICJGYWlsZWQgdG8gaW9yZW1hcCBoZG1pX3NoZWxsOiAlbGRcbiIsCisJCQlQVFJfRVJS
KGhkbWktPnJlZ3MpKTsKKwkJcmV0dXJuIFBUUl9FUlIoaGRtaS0+cmVncyk7CisJfQorCisJcG9y
dCA9IG9mX2dyYXBoX2dldF9wb3J0X2J5X2lkKG5wLCAxKTsKKwlpZiAoIXBvcnQpIHsKKwkJZGV2
X2VycihkZXYsICJNaXNzaW5nIG91dHB1dCBwb3J0IG5vZGVcbiIpOworCQlyZXR1cm4gLUVJTlZB
TDsKKwl9CisKKwllcCA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKHBvcnQsICJlbmRwb2ludCIpOwor
CWlmICghZXApIHsKKwkJZGV2X2VycihkZXYsICJNaXNzaW5nIGVuZHBvaW50IG5vZGUgaW4gcG9y
dCAlc1xuIiwKKwkJCXBvcnQtPmZ1bGxfbmFtZSk7CisJCW9mX25vZGVfcHV0KHBvcnQpOworCQly
ZXR1cm4gLUVJTlZBTDsKKwl9CisJb2Zfbm9kZV9wdXQocG9ydCk7CisKKwlyZW1vdGUgPSBvZl9n
cmFwaF9nZXRfcmVtb3RlX3BvcnRfcGFyZW50KGVwKTsKKwlpZiAoIXJlbW90ZSkgeworCQlkZXZf
ZXJyKGRldiwgIk1pc3NpbmcgY29ubmVjdG9yL2JyaWRnZSBub2RlIGZvciBlbmRwb2ludCAlc1xu
IiwKKwkJCWVwLT5mdWxsX25hbWUpOworCQlvZl9ub2RlX3B1dChlcCk7CisJCXJldHVybiAtRUlO
VkFMOworCX0KKwlvZl9ub2RlX3B1dChlcCk7CisKKwlpZiAoIW9mX2RldmljZV9pc19jb21wYXRp
YmxlKHJlbW90ZSwgImhkbWktY29ubmVjdG9yIikpIHsKKwkJaGRtaS0+YnJpZGdlLm5leHQgPSBv
Zl9kcm1fZmluZF9icmlkZ2UocmVtb3RlKTsKKwkJaWYgKCFoZG1pLT5icmlkZ2UubmV4dCkgewor
CQkJZGV2X2VycihkZXYsICJXYWl0aW5nIGZvciBleHRlcm5hbCBicmlkZ2VcbiIpOworCQkJb2Zf
bm9kZV9wdXQocmVtb3RlKTsKKwkJCXJldHVybiAtRVBST0JFX0RFRkVSOworCQl9CisJfQorCisJ
aTJjX25wID0gb2ZfcGFyc2VfcGhhbmRsZShyZW1vdGUsICJkZGMtaTJjLWJ1cyIsIDApOworCWlm
ICghaTJjX25wKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGZpbmQgZGRjLWkyYy1idXMg
bm9kZSBpbiAlc1xuIiwKKwkJCXJlbW90ZS0+ZnVsbF9uYW1lKTsKKwkJb2Zfbm9kZV9wdXQocmVt
b3RlKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCW9mX25vZGVfcHV0KHJlbW90ZSk7CisKKwlo
ZG1pLT5kZGNfYWRwdCA9IG9mX2ZpbmRfaTJjX2FkYXB0ZXJfYnlfbm9kZShpMmNfbnApOworCWlm
ICghaGRtaS0+ZGRjX2FkcHQpIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZ2V0IGRkYyBp
MmMgYWRhcHRlciBieSBub2RlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJu
IDA7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBoZG1pX2ZsdF9uXzV2X2lycV90aHJlYWQoaW50
IGlycSwgdm9pZCAqYXJnKQoreworCXN0cnVjdCBtdGtfaGRtaSAqaGRtaSA9IGFyZzsKKworCWRl
dl9lcnIoaGRtaS0+ZGV2LCAiZGV0ZWN0ZWQgNXYgcGluIGVycm9yIHN0YXR1c1xuIik7CisJcmV0
dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IG10a19kcm1faGRtaV9wcm9iZShzdHJ1
Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBtdGtfaGRtaSAqaGRtaTsKKwlz
dHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCWludCByZXQ7CisJc3RydWN0IG10a19o
ZG1pX2F1ZGlvX2RhdGEgYXVkaW9fZGF0YTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlX2luZm8g
YXVkaW9fcGRldl9pbmZvOworCisJaGRtaSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqaGRt
aSksIEdGUF9LRVJORUwpOworCWlmICghaGRtaSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwloZG1p
LT5kZXYgPSBkZXY7CisKKwlyZXQgPSBtdGtfaGRtaV9kdF9wYXJzZV9wZGF0YShoZG1pLCBwZGV2
KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAibXRrX2hkbWlfZHRfcGFyc2VfcGRhdGEg
ZmFpbGVkISFcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCWhkbWktPmZsdF9uXzV2X2lycSA9
IGdwaW9fdG9faXJxKGhkbWktPmZsdF9uXzV2X2dwaW8pOworCWlmIChoZG1pLT5mbHRfbl81dl9p
cnEgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiaGRtaS0+Zmx0X25fNXZfaXJxID0gJWRcbiIsCisJ
CQloZG1pLT5mbHRfbl81dl9pcnEpOworCQlyZXR1cm4gaGRtaS0+Zmx0X25fNXZfaXJxOworCX0K
KworCXJldCA9IGRldm1fcmVxdWVzdF90aHJlYWRlZF9pcnEoZGV2LCBoZG1pLT5mbHRfbl81dl9p
cnEsCisJCQkJCU5VTEwsIGhkbWlfZmx0X25fNXZfaXJxX3RocmVhZCwKKwkJCQkJSVJRRl9UUklH
R0VSX1JJU0lORyB8CisJCQkJCUlSUUZfVFJJR0dFUl9GQUxMSU5HIHwgSVJRRl9PTkVTSE9ULAor
CQkJCQkiaGRtaSBmbHRfbl81diIsIGhkbWkpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYs
ICJGYWlsZWQgdG8gcmVnaXN0ZXIgaGRtaSBmbHRfbl81diBpbnRlcnJ1cHRcbiIpOworCQlyZXR1
cm4gcmV0OworCX0KKworCWhkbWktPnBoeSA9IGRldm1fcGh5X2dldChkZXYsICJoZG1pIik7CisJ
aWYgKElTX0VSUihoZG1pLT5waHkpKSB7CisJCXJldCA9IFBUUl9FUlIoaGRtaS0+cGh5KTsKKwkJ
ZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZ2V0IEhETUkgUEhZOiAlZFxuIiwgcmV0KTsKKwkJcmV0
dXJuIHJldDsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBoZG1pKTsKKworCXJl
dCA9IG10a19oZG1pX291dHB1dF9pbml0KGhkbWkpOworCWlmIChyZXQpIHsKKwkJZGV2X2Vycihk
ZXYsICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBoZG1pIG91dHB1dFxuIik7CisJCXJldHVybiByZXQ7
CisJfQorCisJbWVtc2V0KCZhdWRpb19kYXRhLCAwLCBzaXplb2YoYXVkaW9fZGF0YSkpOworCWF1
ZGlvX2RhdGEuaXJxID0gbXRrX2NlY19pcnEoaGRtaS0+Y2VjX2Rldik7CisJYXVkaW9fZGF0YS5t
dGtfaGRtaSA9IGhkbWk7CisJYXVkaW9fZGF0YS5lbmFibGUgPSBtdGtfaGRtaV9hdWRpb19lbmFi
bGU7CisJYXVkaW9fZGF0YS5kaXNhYmxlID0gbXRrX2hkbWlfYXVkaW9fZGlzYWJsZTsKKwlhdWRp
b19kYXRhLnNldF9hdWRpb19wYXJhbSA9IG10a19oZG1pX2F1ZGlvX3NldF9wYXJhbTsKKwlhdWRp
b19kYXRhLmhwZF9kZXRlY3QgPSBtdGtfaGRtaV9ocGRfaGlnaDsKKwlhdWRpb19kYXRhLmRldGVj
dF9kdmlfbW9uaXRvciA9IG10a19oZG1pX2RldGVjdF9kdmlfbW9uaXRvcjsKKworCW1lbXNldCgm
YXVkaW9fcGRldl9pbmZvLCAwLCBzaXplb2YoYXVkaW9fcGRldl9pbmZvKSk7CisJYXVkaW9fcGRl
dl9pbmZvLnBhcmVudCA9IGRldjsKKwlhdWRpb19wZGV2X2luZm8uaWQgPSBQTEFURk9STV9ERVZJ
RF9OT05FOworCWF1ZGlvX3BkZXZfaW5mby5uYW1lID0gIm10ay1oZG1pLWNvZGVjIjsKKwlhdWRp
b19wZGV2X2luZm8uZG1hX21hc2sgPSBETUFfQklUX01BU0soMzIpOworCWF1ZGlvX3BkZXZfaW5m
by5kYXRhID0gJmF1ZGlvX2RhdGE7CisJYXVkaW9fcGRldl9pbmZvLnNpemVfZGF0YSA9IHNpemVv
ZihhdWRpb19kYXRhKTsKKwloZG1pLT5hdWRpb19wZGV2ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lz
dGVyX2Z1bGwoJmF1ZGlvX3BkZXZfaW5mbyk7CisJaWYgKElTX0VSUihoZG1pLT5hdWRpb19wZGV2
KSkKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgYXVkaW8gZGV2aWNlOiAlbGRc
biIsIFBUUl9FUlIoaGRtaS0+YXVkaW9fcGRldikpOworCisJaGRtaS0+YnJpZGdlLmZ1bmNzID0g
Jm10a19oZG1pX2JyaWRnZV9mdW5jczsKKwloZG1pLT5icmlkZ2Uub2Zfbm9kZSA9IHBkZXYtPmRl
di5vZl9ub2RlOworCXJldCA9IGRybV9icmlkZ2VfYWRkKCZoZG1pLT5icmlkZ2UpOworCWlmIChy
ZXQpIHsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gYWRkIGJyaWRnZSwgcmV0ID0gJWRcbiIs
IHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gbXRrX2hkbWlfY2xrX2VuYWJsZV9h
dWRpbyhoZG1pKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGVuYWJs
ZSBhdWRpbyBjbG9ja3M6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycl9icmlkZ2VfcmVtb3ZlOwor
CX0KKworCWRldl9pbmZvKGRldiwgIm1lZGlhdGVrIGhkbWkgcHJvYmUgc3VjY2Vzc1xuIik7CisJ
cmV0dXJuIDA7CisKK2Vycl9icmlkZ2VfcmVtb3ZlOgorCWRybV9icmlkZ2VfcmVtb3ZlKCZoZG1p
LT5icmlkZ2UpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2RybV9oZG1pX3Jl
bW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBtdGtfaGRtaSAq
aGRtaSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJZHJtX2JyaWRnZV9yZW1vdmUo
JmhkbWktPmJyaWRnZSk7CisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoaGRtaS0+YXVkaW9f
cGRldik7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJbXRrX2hkbWlfY2xr
X2Rpc2FibGVfYXVkaW8oaGRtaSk7CisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfUE1f
U0xFRVAKK3N0YXRpYyBpbnQgbXRrX2hkbWlfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7
CisJc3RydWN0IG10a19oZG1pICpoZG1pID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwltdGtf
aGRtaV9wb3dlcl9vZmYoaGRtaSk7CisJbXRrX2hkbWlfY2xrX2Rpc2FibGVfYXVkaW8oaGRtaSk7
CisJZGV2X2luZm8oZGV2LCAiaGRtaSBzdXNwZW5kIHN1Y2Nlc3MhXG4iKTsKKwlyZXR1cm4gMDsK
K30KKworc3RhdGljIGludCBtdGtfaGRtaV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQorewor
CXN0cnVjdCBtdGtfaGRtaSAqaGRtaSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCByZXQg
PSAwOworCisJcmV0ID0gbXRrX2hkbWlfY2xrX2VuYWJsZV9hdWRpbyhoZG1pKTsKKwlpZiAocmV0
KSB7CisJCWRldl9lcnIoZGV2LCAiaGRtaSByZXN1bWUgZmFpbGVkIVxuIik7CisJCXJldHVybiBy
ZXQ7CisJfQorCisJbXRrX2hkbWlfcG93ZXJfb24oaGRtaSk7CisJbXRrX2hkbWlfb3V0cHV0X3Nl
dF9kaXNwbGF5X21vZGUoaGRtaSwgJmhkbWktPm1vZGUpOworCWRldl9pbmZvKGRldiwgImhkbWkg
cmVzdW1lIHN1Y2Nlc3MhXG4iKTsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorc3RhdGljIFNJTVBM
RV9ERVZfUE1fT1BTKG10a19oZG1pX3BtX29wcywKKwkJCSBtdGtfaGRtaV9zdXNwZW5kLCBtdGtf
aGRtaV9yZXN1bWUpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtdGtfZHJt
X2hkbWlfb2ZfaWRzW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtaGRt
aSIsIH0sCisJe30KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10a19oZG1p
X2RyaXZlciA9IHsKKwkucHJvYmUgPSBtdGtfZHJtX2hkbWlfcHJvYmUsCisJLnJlbW92ZSA9IG10
a19kcm1faGRtaV9yZW1vdmUsCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAibWVkaWF0ZWstZHJt
LWhkbWkiLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBtdGtfZHJtX2hkbWlfb2ZfaWRzLAorCQkucG0g
PSAmbXRrX2hkbWlfcG1fb3BzLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2Ry
aXZlciAqIGNvbnN0IG10a19oZG1pX2RyaXZlcnNbXSA9IHsKKwkmbXRrX2hkbWlfcGh5X2RyaXZl
ciwKKwkmbXRrX2hkbWlfZGRjX2RyaXZlciwKKwkmbXRrX2NlY19kcml2ZXIsCisJJm10a19oZG1p
X2RyaXZlciwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG10a19oZG1pdHhfaW5pdCh2b2lkKQor
eworCWludCByZXQ7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShtdGtf
aGRtaV9kcml2ZXJzKTsgaSsrKSB7CisJCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlciht
dGtfaGRtaV9kcml2ZXJzW2ldKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCXByX2VycigiRmFpbGVk
IHRvIHJlZ2lzdGVyICVzIGRyaXZlcjogJWRcbiIsCisJCQkgICAgICAgbXRrX2hkbWlfZHJpdmVy
c1tpXS0+ZHJpdmVyLm5hbWUsIHJldCk7CisJCQlnb3RvIGVycjsKKwkJfQorCX0KKworCXJldHVy
biAwOworCitlcnI6CisJd2hpbGUgKC0taSA+PSAwKQorCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdp
c3RlcihtdGtfaGRtaV9kcml2ZXJzW2ldKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2
b2lkIF9fZXhpdCBtdGtfaGRtaXR4X2V4aXQodm9pZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9
IEFSUkFZX1NJWkUobXRrX2hkbWlfZHJpdmVycykgLSAxOyBpID49IDA7IGktLSkKKwkJcGxhdGZv
cm1fZHJpdmVyX3VucmVnaXN0ZXIobXRrX2hkbWlfZHJpdmVyc1tpXSk7Cit9CisKK21vZHVsZV9p
bml0KG10a19oZG1pdHhfaW5pdCk7Cittb2R1bGVfZXhpdChtdGtfaGRtaXR4X2V4aXQpOworCitN
T0RVTEVfQVVUSE9SKCJKaWUgUWl1IDxqaWUucWl1QG1lZGlhdGVrLmNvbT4iKTsKK01PRFVMRV9E
RVNDUklQVElPTigiTWVkaWFUZWsgSERNSSBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwg
djIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaS5jIGIv
ZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19oZG1pLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uOTQ5ZDU5ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2Ry
bS9tZWRpYXRlay9tdGtfaGRtaS5jCkBAIC0wLDAgKzEsNTE1IEBACisvKgorICogQ29weXJpZ2h0
IChjKSAyMDE0IE1lZGlhVGVrIEluYy4KKyAqIEF1dGhvcjogSmllIFFpdSA8amllLnFpdUBtZWRp
YXRlay5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICovCisjaW5jbHVkZSA8ZHJtL2RybV9lZGlkLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+
CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9waHkvcGh5Lmg+Cisj
aW5jbHVkZSAibXRrX2NlYy5oIgorI2luY2x1ZGUgIm10a19oZG1pLmgiCisjaW5jbHVkZSAibXRr
X2hkbWlfaHcuaCIKKyNpbmNsdWRlICJtdGtfaGRtaV9waHkuaCIKKworc3RhdGljIHU4IG10a19o
ZG1pX2F1ZF9nZXRfY2hubF9jb3VudChlbnVtIGhkbWlfYXVkX2NoYW5uZWxfdHlwZSBjaGFubmVs
X3R5cGUpCit7CisJc3dpdGNoIChjaGFubmVsX3R5cGUpIHsKKwljYXNlIEhETUlfQVVEX0NIQU5f
VFlQRV8xXzA6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfMV8xOgorCWNhc2UgSERNSV9BVURf
Q0hBTl9UWVBFXzJfMDoKKwkJcmV0dXJuIDI7CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfMl8x
OgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzNfMDoKKwkJcmV0dXJuIDM7CisJY2FzZSBIRE1J
X0FVRF9DSEFOX1RZUEVfM18xOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzRfMDoKKwljYXNl
IEhETUlfQVVEX0NIQU5fVFlQRV8zXzBfTFJTOgorCQlyZXR1cm4gNDsKKwljYXNlIEhETUlfQVVE
X0NIQU5fVFlQRV80XzE6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfNV8wOgorCWNhc2UgSERN
SV9BVURfQ0hBTl9UWVBFXzNfMV9MUlM6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfNF8wX0NM
UlM6CisJCXJldHVybiA1OworCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzVfMToKKwljYXNlIEhE
TUlfQVVEX0NIQU5fVFlQRV82XzA6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfNF8xX0NMUlM6
CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfNl8wX0NTOgorCWNhc2UgSERNSV9BVURfQ0hBTl9U
WVBFXzZfMF9DSDoKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV82XzBfT0g6CisJY2FzZSBIRE1J
X0FVRF9DSEFOX1RZUEVfNl8wX0NIUjoKKwkJcmV0dXJuIDY7CisJY2FzZSBIRE1JX0FVRF9DSEFO
X1RZUEVfNl8xOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzZfMV9DUzoKKwljYXNlIEhETUlf
QVVEX0NIQU5fVFlQRV82XzFfQ0g6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfNl8xX09IOgor
CWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzZfMV9DSFI6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZ
UEVfN18wOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzdfMF9MSF9SSDoKKwljYXNlIEhETUlf
QVVEX0NIQU5fVFlQRV83XzBfTFNSX1JTUjoKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV83XzBf
TENfUkM6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18wX0xXX1JXOgorCWNhc2UgSERNSV9B
VURfQ0hBTl9UWVBFXzdfMF9MU0RfUlNEOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzdfMF9M
U1NfUlNTOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzdfMF9MSFNfUkhTOgorCWNhc2UgSERN
SV9BVURfQ0hBTl9UWVBFXzdfMF9DU19DSDoKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV83XzBf
Q1NfT0g6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18wX0NTX0NIUjoKKwljYXNlIEhETUlf
QVVEX0NIQU5fVFlQRV83XzBfQ0hfT0g6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18wX0NI
X0NIUjoKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV83XzBfT0hfQ0hSOgorCWNhc2UgSERNSV9B
VURfQ0hBTl9UWVBFXzdfMF9MU1NfUlNTX0xTUl9SU1I6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZ
UEVfOF8wX0xIX1JIX0NTOgorCQlyZXR1cm4gNzsKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV83
XzE6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18xX0xIX1JIOgorCWNhc2UgSERNSV9BVURf
Q0hBTl9UWVBFXzdfMV9MU1JfUlNSOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzdfMV9MQ19S
QzoKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV83XzFfTFdfUlc6CisJY2FzZSBIRE1JX0FVRF9D
SEFOX1RZUEVfN18xX0xTRF9SU0Q6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18xX0xTU19S
U1M6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18xX0xIU19SSFM6CisJY2FzZSBIRE1JX0FV
RF9DSEFOX1RZUEVfN18xX0NTX0NIOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzdfMV9DU19P
SDoKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV83XzFfQ1NfQ0hSOgorCWNhc2UgSERNSV9BVURf
Q0hBTl9UWVBFXzdfMV9DSF9PSDoKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV83XzFfQ0hfQ0hS
OgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzdfMV9PSF9DSFI6CisJY2FzZSBIRE1JX0FVRF9D
SEFOX1RZUEVfN18xX0xTU19SU1NfTFNSX1JTUjoKKwkJcmV0dXJuIDg7CisJZGVmYXVsdDoKKwkJ
cmV0dXJuIDI7CisJfQorfQorCitzdGF0aWMgaW50IG10a19oZG1pX3ZpZGVvX2NoYW5nZV92cGxs
KHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwgdTMyIGNsb2NrLAorCQkJCSAgICAgIGVudW0gaGRtaV9k
aXNwbGF5X2NvbG9yX2RlcHRoIGRlcHRoKQoreworCXVuc2lnbmVkIGxvbmcgcmF0ZTsKKwlpbnQg
cmV0OworCisJLyogVGhlIERQSSBkcml2ZXIgYWxyZWFkeSBzaG91bGQgaGF2ZSBzZXQgVFZEUExM
IHRvIHRoZSBjb3JyZWN0IHJhdGUgKi8KKwlyZXQgPSBjbGtfc2V0X3JhdGUoaGRtaS0+Y2xrW01U
S19IRE1JX0NMS19IRE1JX1BMTF0sIGNsb2NrKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoaGRt
aS0+ZGV2LCAiRmFpbGVkIHRvIHNldCBQTEwgdG8gJXUgSHo6ICVkXG4iLCBjbG9jaywKKwkJCXJl
dCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmF0ZSA9IGNsa19nZXRfcmF0ZShoZG1pLT5jbGtb
TVRLX0hETUlfQ0xLX0hETUlfUExMXSk7CisKKwlpZiAoRElWX1JPVU5EX0NMT1NFU1QocmF0ZSwg
MTAwMCkgIT0gRElWX1JPVU5EX0NMT1NFU1QoY2xvY2ssIDEwMDApKQorCQlkZXZfd2FybihoZG1p
LT5kZXYsICJXYW50IFBMTCAldSBIeiwgZ290ICVsdSBIelxuIiwgY2xvY2ssCisJCQkgcmF0ZSk7
CisJZWxzZQorCQlkZXZfZGJnKGhkbWktPmRldiwgIldhbnQgUExMICV1IEh6LCBnb3QgJWx1IEh6
XG4iLCBjbG9jaywgcmF0ZSk7CisKKwltdGtfaGRtaV9waHlfc2V0X3BsbChoZG1pLT5waHksIGNs
b2NrLCBkZXB0aCk7CisJbXRrX2hkbWlfaHdfY29uZmlnX3N5cyhoZG1pKTsKKwltdGtfaGRtaV9o
d19zZXRfZGVlcF9jb2xvcl9tb2RlKGhkbWksIGRlcHRoKTsKKwlyZXR1cm4gMDsKK30KKworc3Rh
dGljIHZvaWQgbXRrX2hkbWlfdmlkZW9fc2V0X2Rpc3BsYXlfbW9kZShzdHJ1Y3QgbXRrX2hkbWkg
KmhkbWksCisJCQkJCSAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKK3sKKwltdGtf
aGRtaV9od19yZXNldChoZG1pKTsKKwltdGtfaGRtaV9od19lbmFibGVfbm90aWNlKGhkbWksIHRy
dWUpOworCW10a19oZG1pX2h3X3dyaXRlX2ludF9tYXNrKGhkbWksIDB4ZmYpOworCW10a19oZG1p
X2h3X2VuYWJsZV9kdmlfbW9kZShoZG1pLCBoZG1pLT5kdmlfbW9kZSk7CisJbXRrX2hkbWlfaHdf
bmN0c19hdXRvX3dyaXRlX2VuYWJsZShoZG1pLCB0cnVlKTsKKworCW10a19oZG1pX2h3X21zaWNf
c2V0dGluZyhoZG1pLCBtb2RlKTsKK30KKworc3RhdGljIGludCBtdGtfaGRtaV9hdWRfZW5hYmxl
X3BhY2tldChzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksIGJvb2wgZW5hYmxlKQoreworCW10a19oZG1p
X2h3X3NlbmRfYXVkX3BhY2tldChoZG1pLCBlbmFibGUpOworCXJldHVybiAwOworfQorCitzdGF0
aWMgaW50IG10a19oZG1pX2F1ZF9vbl9vZmZfaHdfbmN0cyhzdHJ1Y3QgbXRrX2hkbWkgKmhkbWks
IGJvb2wgb24pCit7CisJbXRrX2hkbWlfaHdfbmN0c19lbmFibGUoaGRtaSwgb24pOworCXJldHVy
biAwOworfQorCitzdGF0aWMgaW50IG10a19oZG1pX2F1ZF9zZXRfaW5wdXQoc3RydWN0IG10a19o
ZG1pICpoZG1pKQoreworCXU4IGNoYW5fY291bnQ7CisKKwltdGtfaGRtaV9od19hdWRfc2V0X2No
YW5uZWxfc3dhcChoZG1pLCBIRE1JX0FVRF9TV0FQX0xGRV9DQyk7CisJbXRrX2hkbWlfaHdfYXVk
X3Jhd19kYXRhX2VuYWJsZShoZG1pLCB0cnVlKTsKKworCWlmIChoZG1pLT5hdWRfcGFyYW0uYXVk
X2lucHV0X3R5cGUgPT0gSERNSV9BVURfSU5QVVRfU1BESUYgJiYKKwkgICAgaGRtaS0+YXVkX3Bh
cmFtLmF1ZF9jb2RlYyA9PSBIRE1JX0FVRElPX0NPRElOR19UWVBFX0RTVCkgeworCQltdGtfaGRt
aV9od19hdWRfc2V0X2JpdF9udW0oaGRtaSwKKwkJCQkJICAgIEhETUlfQVVESU9fU0FNUExFX1NJ
WkVfMjQpOworCX0gZWxzZSBpZiAoaGRtaS0+YXVkX3BhcmFtLmF1ZF9pMnNfZm10ID09CisJCQlI
RE1JX0kyU19NT0RFX0xKVF8yNEJJVCkgeworCQloZG1pLT5hdWRfcGFyYW0uYXVkX2kyc19mbXQg
PSBIRE1JX0kyU19NT0RFX0xKVF8xNkJJVDsKKwl9CisKKwltdGtfaGRtaV9od19hdWRfc2V0X2ky
c19mbXQoaGRtaSwKKwkJCQkgICAgaGRtaS0+YXVkX3BhcmFtLmF1ZF9pMnNfZm10KTsKKwltdGtf
aGRtaV9od19hdWRfc2V0X2JpdF9udW0oaGRtaSwgSERNSV9BVURJT19TQU1QTEVfU0laRV8yNCk7
CisKKwltdGtfaGRtaV9od19hdWRfc2V0X2hpZ2hfYml0cmF0ZShoZG1pLCBmYWxzZSk7CisJbXRr
X2hkbWlfcGh5X2F1ZF9kc3Rfbm9ybWFsX2RvdWJsZV9lbmFibGUoaGRtaSwgZmFsc2UpOworCW10
a19oZG1pX2h3X2F1ZF9kc3RfZW5hYmxlKGhkbWksIGZhbHNlKTsKKworCWlmIChoZG1pLT5hdWRf
cGFyYW0uYXVkX2lucHV0X3R5cGUgPT0gSERNSV9BVURfSU5QVVRfU1BESUYpIHsKKwkJbXRrX2hk
bWlfaHdfYXVkX2RzZF9lbmFibGUoaGRtaSwgZmFsc2UpOworCQlpZiAoaGRtaS0+YXVkX3BhcmFt
LmF1ZF9jb2RlYyA9PQorCQkJSERNSV9BVURJT19DT0RJTkdfVFlQRV9EU1QpIHsKKwkJCW10a19o
ZG1pX3BoeV9hdWRfZHN0X25vcm1hbF9kb3VibGVfZW5hYmxlKGhkbWksCisJCQkJCQkJCSAgdHJ1
ZSk7CisJCQltdGtfaGRtaV9od19hdWRfZHN0X2VuYWJsZShoZG1pLCB0cnVlKTsKKwkJfQorCisJ
CWNoYW5fY291bnQgPSBtdGtfaGRtaV9hdWRfZ2V0X2NobmxfY291bnQKKwkJCQkJCSAoSERNSV9B
VURfQ0hBTl9UWVBFXzJfMCk7CisJCW10a19oZG1pX2h3X2F1ZF9zZXRfaTJzX2NoYW5fbnVtKGhk
bWksCisJCQkJCQkgSERNSV9BVURfQ0hBTl9UWVBFXzJfMCwKKwkJCQkJCSBjaGFuX2NvdW50KTsK
KwkJbXRrX2hkbWlfaHdfYXVkX3NldF9pbnB1dF90eXBlKGhkbWksCisJCQkJCSAgICAgICBIRE1J
X0FVRF9JTlBVVF9TUERJRik7CisJfSBlbHNlIHsKKwkJbXRrX2hkbWlfaHdfYXVkX2RzZF9lbmFi
bGUoaGRtaSwgZmFsc2UpOworCQljaGFuX2NvdW50ID0KKwkJCW10a19oZG1pX2F1ZF9nZXRfY2hu
bF9jb3VudCgKKwkJCWhkbWktPmF1ZF9wYXJhbS5hdWRfaW5wdXRfY2hhbl90eXBlKTsKKwkJbXRr
X2hkbWlfaHdfYXVkX3NldF9pMnNfY2hhbl9udW0oCisJCQloZG1pLAorCQkJaGRtaS0+YXVkX3Bh
cmFtLmF1ZF9pbnB1dF9jaGFuX3R5cGUsCisJCQljaGFuX2NvdW50KTsKKwkJbXRrX2hkbWlfaHdf
YXVkX3NldF9pbnB1dF90eXBlKGhkbWksCisJCQkJCSAgICAgICBIRE1JX0FVRF9JTlBVVF9JMlMp
OworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdGtfaGRtaV9hdWRfc2V0X3NyYyhz
dHJ1Y3QgbXRrX2hkbWkgKmhkbWksCisJCQkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmRpc3Bs
YXlfbW9kZSkKK3sKKwltdGtfaGRtaV9hdWRfb25fb2ZmX2h3X25jdHMoaGRtaSwgZmFsc2UpOwor
CisJaWYgKGhkbWktPmF1ZF9wYXJhbS5hdWRfaW5wdXRfdHlwZSA9PSBIRE1JX0FVRF9JTlBVVF9J
MlMpIHsKKwkJc3dpdGNoIChoZG1pLT5hdWRfcGFyYW0uYXVkX2hkbWlfZnMpIHsKKwkJY2FzZSBI
RE1JX0FVRElPX1NBTVBMRV9GUkVRVUVOQ1lfMzIwMDA6CisJCWNhc2UgSERNSV9BVURJT19TQU1Q
TEVfRlJFUVVFTkNZXzQ0MTAwOgorCQljYXNlIEhETUlfQVVESU9fU0FNUExFX0ZSRVFVRU5DWV80
ODAwMDoKKwkJY2FzZSBIRE1JX0FVRElPX1NBTVBMRV9GUkVRVUVOQ1lfODgyMDA6CisJCWNhc2Ug
SERNSV9BVURJT19TQU1QTEVfRlJFUVVFTkNZXzk2MDAwOgorCQkJbXRrX2hkbWlfaHdfYXVkX3Ny
Y19vZmYoaGRtaSk7CisJCQkvKiBtdGtfaGRtaV9od19hdWRfc3JjX2VuYWJsZShoZG1pLCBmYWxz
ZSk7ICovCisJCQltdGtfaGRtaV9od19hdWRfc2V0X21jbGsoCisJCQloZG1pLAorCQkJaGRtaS0+
YXVkX3BhcmFtLmF1ZF9tY2xrKTsKKwkJCW10a19oZG1pX2h3X2F1ZF9hY2xrX2ludl9lbmFibGUo
aGRtaSwgZmFsc2UpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCX0g
ZWxzZSB7CisJCXN3aXRjaCAoaGRtaS0+YXVkX3BhcmFtLmllY19mcmFtZV9mcykgeworCQljYXNl
IEhETUlfSUVDXzMySzoKKwkJCWhkbWktPmF1ZF9wYXJhbS5hdWRfaGRtaV9mcyA9CisJCQkgICAg
SERNSV9BVURJT19TQU1QTEVfRlJFUVVFTkNZXzMyMDAwOworCQkJbXRrX2hkbWlfaHdfYXVkX3Ny
Y19vZmYoaGRtaSk7CisJCQltdGtfaGRtaV9od19hdWRfc2V0X21jbGsoaGRtaSwKKwkJCQkJCSBI
RE1JX0FVRF9NQ0xLXzEyOEZTKTsKKwkJCW10a19oZG1pX2h3X2F1ZF9hY2xrX2ludl9lbmFibGUo
aGRtaSwgZmFsc2UpOworCQkJYnJlYWs7CisJCWNhc2UgSERNSV9JRUNfNDhLOgorCQkJaGRtaS0+
YXVkX3BhcmFtLmF1ZF9oZG1pX2ZzID0KKwkJCSAgICBIRE1JX0FVRElPX1NBTVBMRV9GUkVRVUVO
Q1lfNDgwMDA7CisJCQltdGtfaGRtaV9od19hdWRfc3JjX29mZihoZG1pKTsKKwkJCW10a19oZG1p
X2h3X2F1ZF9zZXRfbWNsayhoZG1pLAorCQkJCQkJIEhETUlfQVVEX01DTEtfMTI4RlMpOworCQkJ
bXRrX2hkbWlfaHdfYXVkX2FjbGtfaW52X2VuYWJsZShoZG1pLCBmYWxzZSk7CisJCQlicmVhazsK
KwkJY2FzZSBIRE1JX0lFQ180NEs6CisJCQloZG1pLT5hdWRfcGFyYW0uYXVkX2hkbWlfZnMgPQor
CQkJICAgIEhETUlfQVVESU9fU0FNUExFX0ZSRVFVRU5DWV80NDEwMDsKKwkJCW10a19oZG1pX2h3
X2F1ZF9zcmNfb2ZmKGhkbWkpOworCQkJbXRrX2hkbWlfaHdfYXVkX3NldF9tY2xrKGhkbWksCisJ
CQkJCQkgSERNSV9BVURfTUNMS18xMjhGUyk7CisJCQltdGtfaGRtaV9od19hdWRfYWNsa19pbnZf
ZW5hYmxlKGhkbWksIGZhbHNlKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJ
CX0KKwl9CisJbXRrX2hkbWlfaHdfYXVkX3NldF9uY3RzKGhkbWksIGhkbWktPmRlcHRoLCBoZG1p
LT5hdWRfcGFyYW0uYXVkX2hkbWlfZnMsCisJCQkJIGRpc3BsYXlfbW9kZS0+Y2xvY2spOworCisJ
bXRrX2hkbWlfaHdfYXVkX3NyY19yZWVuYWJsZShoZG1pKTsKKwlyZXR1cm4gMDsKK30KKworc3Rh
dGljIGludCBtdGtfaGRtaV9hdWRfc2V0X2Nobmxfc3RhdHVzKHN0cnVjdCBtdGtfaGRtaSAqaGRt
aSkKK3sKKwltdGtfaGRtaV9od19hdWRfc2V0X2NoYW5uZWxfc3RhdHVzKAorCQloZG1pLAorCSAg
IGhkbWktPmF1ZF9wYXJhbS5oZG1pX2xfY2hhbm5lbF9zdGF0ZSwKKwkgICBoZG1pLT5hdWRfcGFy
YW0uaGRtaV9yX2NoYW5uZWxfc3RhdGUsCisJICAgaGRtaS0+YXVkX3BhcmFtLmF1ZF9oZG1pX2Zz
KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdGtfaGRtaV9hdWRfb3V0cHV0X2NvbmZp
ZyhzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksCisJCQkJICAgICAgc3RydWN0IGRybV9kaXNwbGF5X21v
ZGUgKmRpc3BsYXlfbW9kZSkKK3sKKwltdGtfaGRtaV9od19hdWRfbXV0ZShoZG1pLCB0cnVlKTsK
KwltdGtfaGRtaV9hdWRfZW5hYmxlX3BhY2tldChoZG1pLCBmYWxzZSk7CisKKwltdGtfaGRtaV9h
dWRfc2V0X2lucHV0KGhkbWkpOworCW10a19oZG1pX2F1ZF9zZXRfc3JjKGhkbWksIGRpc3BsYXlf
bW9kZSk7CisJbXRrX2hkbWlfYXVkX3NldF9jaG5sX3N0YXR1cyhoZG1pKTsKKworCXVzbGVlcF9y
YW5nZSg1MCwgMTAwKTsKKworCW10a19oZG1pX2F1ZF9vbl9vZmZfaHdfbmN0cyhoZG1pLCB0cnVl
KTsKKwltdGtfaGRtaV9hdWRfZW5hYmxlX3BhY2tldChoZG1pLCB0cnVlKTsKKwltdGtfaGRtaV9o
d19hdWRfbXV0ZShoZG1pLCBmYWxzZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXRr
X2hkbWlfc2V0dXBfYXZfbXV0ZV9wYWNrZXQoc3RydWN0IG10a19oZG1pICpoZG1pKQoreworCW10
a19oZG1pX2h3X3NlbmRfYXZfbXV0ZShoZG1pKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlu
dCBtdGtfaGRtaV9zZXR1cF9hdl91bm11dGVfcGFja2V0KHN0cnVjdCBtdGtfaGRtaSAqaGRtaSkK
K3sKKwltdGtfaGRtaV9od19zZW5kX2F2X3VubXV0ZShoZG1pKTsKKwlyZXR1cm4gMDsKK30KKwor
c3RhdGljIGludCBtdGtfaGRtaV9zZXR1cF9hdmlfaW5mb2ZyYW1lKHN0cnVjdCBtdGtfaGRtaSAq
aGRtaSwKKwkJCQkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCit7CisJc3RydWN0IGhk
bWlfYXZpX2luZm9mcmFtZSBmcmFtZTsKKwl1OCBidWZmZXJbMTddOworCXNzaXplX3QgZXJyOwor
CisJZXJyID0gZHJtX2hkbWlfYXZpX2luZm9mcmFtZV9mcm9tX2Rpc3BsYXlfbW9kZSgmZnJhbWUs
IG1vZGUpOworCWlmIChlcnIgPCAwKSB7CisJCWRldl9lcnIoaGRtaS0+ZGV2LAorCQkJIkZhaWxl
ZCB0byBnZXQgQVZJIGluZm9mcmFtZSBmcm9tIG1vZGU6ICVsZFxuIiwgZXJyKTsKKwkJcmV0dXJu
IGVycjsKKwl9CisKKwllcnIgPSBoZG1pX2F2aV9pbmZvZnJhbWVfcGFjaygmZnJhbWUsIGJ1ZmZl
ciwgc2l6ZW9mKGJ1ZmZlcikpOworCWlmIChlcnIgPCAwKSB7CisJCWRldl9lcnIoaGRtaS0+ZGV2
LCAiRmFpbGVkIHRvIHBhY2sgQVZJIGluZm9mcmFtZTogJWxkXG4iLCBlcnIpOworCQlyZXR1cm4g
ZXJyOworCX0KKworCW10a19oZG1pX2h3X3NlbmRfaW5mb19mcmFtZShoZG1pLCBidWZmZXIsIHNp
emVvZihidWZmZXIpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdGtfaGRtaV9zZXR1
cF9zcGRfaW5mb2ZyYW1lKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwKKwkJCQkJY29uc3QgY2hhciAq
dmVuZG9yLAorCQkJCQljb25zdCBjaGFyICpwcm9kdWN0KQoreworCXN0cnVjdCBoZG1pX3NwZF9p
bmZvZnJhbWUgZnJhbWU7CisJdTggYnVmZmVyWzI5XTsKKwlzc2l6ZV90IGVycjsKKworCWVyciA9
IGhkbWlfc3BkX2luZm9mcmFtZV9pbml0KCZmcmFtZSwgdmVuZG9yLCBwcm9kdWN0KTsKKwlpZiAo
ZXJyIDwgMCkgeworCQlkZXZfZXJyKGhkbWktPmRldiwgIkZhaWxlZCB0byBpbml0aWFsaXplIFNQ
RCBpbmZvZnJhbWUgJWxkXG4iLAorCQkJICAgICBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKwor
CWVyciA9IGhkbWlfc3BkX2luZm9mcmFtZV9wYWNrKCZmcmFtZSwgYnVmZmVyLCBzaXplb2YoYnVm
ZmVyKSk7CisJaWYgKGVyciA8IDApIHsKKwkJZGV2X2VycihoZG1pLT5kZXYsICJGYWlsZWQgdG8g
cGFjayBTRFAgaW5mb2ZyYW1lOiAlbGRcbiIsIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCisJ
bXRrX2hkbWlfaHdfc2VuZF9pbmZvX2ZyYW1lKGhkbWksIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikp
OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10a19oZG1pX3NldHVwX2F1ZGlvX2luZm9m
cmFtZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkpCit7CisJc3RydWN0IGhkbWlfYXVkaW9faW5mb2Zy
YW1lIGZyYW1lOworCXU4IGJ1ZmZlclsxNF07CisJc3NpemVfdCBlcnI7CisKKwllcnIgPSBoZG1p
X2F1ZGlvX2luZm9mcmFtZV9pbml0KCZmcmFtZSk7CisJaWYgKGVyciA8IDApIHsKKwkJZGV2X2Vy
cihoZG1pLT5kZXYsICJGYWllZCB0byBzZXR1cCBhdWRpbyBpbmZvZnJhbWU6ICVsZFxuIiwKKwkJ
CWVycik7CisJCXJldHVybiBlcnI7CisJfQorCisJZnJhbWUuY29kaW5nX3R5cGUgPSBIRE1JX0FV
RElPX0NPRElOR19UWVBFX1NUUkVBTTsKKwlmcmFtZS5zYW1wbGVfZnJlcXVlbmN5ID0gSERNSV9B
VURJT19TQU1QTEVfRlJFUVVFTkNZX1NUUkVBTTsKKwlmcmFtZS5zYW1wbGVfc2l6ZSA9IEhETUlf
QVVESU9fU0FNUExFX1NJWkVfU1RSRUFNOworCWZyYW1lLmNoYW5uZWxzID0KKwkgICAgbXRrX2hk
bWlfYXVkX2dldF9jaG5sX2NvdW50KAorCSAgICBoZG1pLT5hdWRfcGFyYW0uYXVkX2lucHV0X2No
YW5fdHlwZSk7CisKKwllcnIgPSBoZG1pX2F1ZGlvX2luZm9mcmFtZV9wYWNrKCZmcmFtZSwgYnVm
ZmVyLCBzaXplb2YoYnVmZmVyKSk7CisJaWYgKGVyciA8IDApIHsKKwkJZGV2X2VycihoZG1pLT5k
ZXYsICJGYWlsZWQgdG8gcGFjayBhdWRpbyBpbmZvZnJhbWU6ICVsZFxuIiwKKwkJCWVycik7CisJ
CXJldHVybiBlcnI7CisJfQorCisJbXRrX2hkbWlfaHdfc2VuZF9pbmZvX2ZyYW1lKGhkbWksIGJ1
ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10a19o
ZG1pX3NldHVwX3ZlbmRvcl9zcGVjaWZpY19pbmZvZnJhbWUoc3RydWN0IG10a19oZG1pICpoZG1p
LAorCQkJCQkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCit7CisJc3RydWN0IGhkbWlf
dmVuZG9yX2luZm9mcmFtZSBmcmFtZTsKKwl1OCBidWZmZXJbMTBdOworCXNzaXplX3QgZXJyOwor
CisJZXJyID0gZHJtX2hkbWlfdmVuZG9yX2luZm9mcmFtZV9mcm9tX2Rpc3BsYXlfbW9kZSgmZnJh
bWUsIG1vZGUpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycihoZG1pLT5kZXYsCisJCQkiRmFpbGVk
IHRvIGdldCB2ZW5kb3IgaW5mb2ZyYW1lIGZyb20gbW9kZTogJWxkXG4iLCBlcnIpOworCQlyZXR1
cm4gZXJyOworCX0KKworCWVyciA9IGhkbWlfdmVuZG9yX2luZm9mcmFtZV9wYWNrKCZmcmFtZSwg
YnVmZmVyLCBzaXplb2YoYnVmZmVyKSk7CisJaWYgKGVycikgeworCQlkZXZfZXJyKGhkbWktPmRl
diwgIkZhaWxlZCB0byBwYWNrIHZlbmRvciBpbmZvZnJhbWU6ICVsZFxuIiwKKwkJCWVycik7CisJ
CXJldHVybiBlcnI7CisJfQorCisJbXRrX2hkbWlfaHdfc2VuZF9pbmZvX2ZyYW1lKGhkbWksIGJ1
ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpOworCXJldHVybiAwOworfQorCitpbnQgbXRrX2hkbWlfaHBk
X2hpZ2goc3RydWN0IG10a19oZG1pICpoZG1pKQoreworCXJldHVybiBoZG1pLT5jZWNfZGV2ID8g
bXRrX2NlY19ocGRfaGlnaChoZG1pLT5jZWNfZGV2KSA6IGZhbHNlOworfQorCitpbnQgbXRrX2hk
bWlfb3V0cHV0X2luaXQoc3RydWN0IG10a19oZG1pICpoZG1pKQoreworCXN0cnVjdCBoZG1pX2F1
ZGlvX3BhcmFtICphdWRfcGFyYW0gPSAmaGRtaS0+YXVkX3BhcmFtOworCisJaWYgKGhkbWktPmlu
aXQpCisJCXJldHVybiAtRUlOVkFMOworCisJaGRtaS0+Y3NwID0gSERNSV9DT0xPUlNQQUNFX1JH
QjsKKwloZG1pLT5kZXB0aCA9IEhETUlfREVFUF9DT0xPUl8yNEJJVFM7CisJaGRtaS0+b3V0cHV0
ID0gdHJ1ZTsKKwlhdWRfcGFyYW0tPmF1ZF9jb2RlYyA9IEhETUlfQVVESU9fQ09ESU5HX1RZUEVf
UENNOworCWF1ZF9wYXJhbS0+YXVkX2hkbWlfZnMgPSBIRE1JX0FVRElPX1NBTVBMRV9GUkVRVUVO
Q1lfNDgwMDA7CisJYXVkX3BhcmFtLT5hdWRfc2FtcGVfc2l6ZSA9IEhETUlfQVVESU9fU0FNUExF
X1NJWkVfMTY7CisJYXVkX3BhcmFtLT5hdWRfaW5wdXRfdHlwZSA9IEhETUlfQVVEX0lOUFVUX0ky
UzsKKwlhdWRfcGFyYW0tPmF1ZF9pMnNfZm10ID0gSERNSV9JMlNfTU9ERV9JMlNfMjRCSVQ7CisJ
YXVkX3BhcmFtLT5hdWRfbWNsayA9IEhETUlfQVVEX01DTEtfMTI4RlM7CisJYXVkX3BhcmFtLT5p
ZWNfZnJhbWVfZnMgPSBIRE1JX0lFQ180OEs7CisJYXVkX3BhcmFtLT5hdWRfaW5wdXRfY2hhbl90
eXBlID0gSERNSV9BVURfQ0hBTl9UWVBFXzJfMDsKKwlhdWRfcGFyYW0tPmhkbWlfbF9jaGFubmVs
X3N0YXRlWzJdID0gMjsKKwlhdWRfcGFyYW0tPmhkbWlfcl9jaGFubmVsX3N0YXRlWzJdID0gMjsK
KwloZG1pLT5pbml0ID0gdHJ1ZTsKKworCXJldHVybiAwOworfQorCit2b2lkIG10a19oZG1pX3Bv
d2VyX29uKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSkKK3sKKwltdGtfaGRtaV9od19tYWtlX3JlZ193
cml0YWJsZShoZG1pLCB0cnVlKTsKKwltdGtfaGRtaV9od18xcDRfdmVyc2lvbl9lbmFibGUoaGRt
aSwgdHJ1ZSk7Cit9CisKK3ZvaWQgbXRrX2hkbWlfcG93ZXJfb2ZmKHN0cnVjdCBtdGtfaGRtaSAq
aGRtaSkKK3sKKwltdGtfaGRtaV9od18xcDRfdmVyc2lvbl9lbmFibGUoaGRtaSwgdHJ1ZSk7CisJ
bXRrX2hkbWlfaHdfbWFrZV9yZWdfd3JpdGFibGUoaGRtaSwgZmFsc2UpOworfQorCit2b2lkIG10
a19oZG1pX2F1ZGlvX2VuYWJsZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkpCit7CisJbXRrX2hkbWlf
YXVkX2VuYWJsZV9wYWNrZXQoaGRtaSwgdHJ1ZSk7CisJaGRtaS0+YXVkaW9fZW5hYmxlID0gdHJ1
ZTsKK30KKwordm9pZCBtdGtfaGRtaV9hdWRpb19kaXNhYmxlKHN0cnVjdCBtdGtfaGRtaSAqaGRt
aSkKK3sKKwltdGtfaGRtaV9hdWRfZW5hYmxlX3BhY2tldChoZG1pLCBmYWxzZSk7CisJaGRtaS0+
YXVkaW9fZW5hYmxlID0gZmFsc2U7Cit9CisKK2ludCBtdGtfaGRtaV9hdWRpb19zZXRfcGFyYW0o
c3RydWN0IG10a19oZG1pICpoZG1pLAorCQkJICAgICBzdHJ1Y3QgaGRtaV9hdWRpb19wYXJhbSAq
cGFyYW0pCit7CisJaWYgKCFoZG1pLT5hdWRpb19lbmFibGUpIHsKKwkJZGV2X2VycihoZG1pLT5k
ZXYsICJoZG1pIGF1ZGlvIGlzIGluIGRpc2FibGUgc3RhdGUhXG4iKTsKKwkJcmV0dXJuIC1FSU5W
QUw7CisJfQorCWRldl9pbmZvKGhkbWktPmRldiwgImNvZGVjOiVkLCBpbnB1dDolZCwgY2hhbm5l
bDolZCwgZnM6JWRcbiIsCisJCSBwYXJhbS0+YXVkX2NvZGVjLCBwYXJhbS0+YXVkX2lucHV0X3R5
cGUsCisJCSBwYXJhbS0+YXVkX2lucHV0X2NoYW5fdHlwZSwgcGFyYW0tPmF1ZF9oZG1pX2ZzKTsK
KwltZW1jcHkoJmhkbWktPmF1ZF9wYXJhbSwgcGFyYW0sIHNpemVvZigqcGFyYW0pKTsKKwlyZXR1
cm4gbXRrX2hkbWlfYXVkX291dHB1dF9jb25maWcoaGRtaSwgJmhkbWktPm1vZGUpOworfQorCitp
bnQgbXRrX2hkbWlfZGV0ZWN0X2R2aV9tb25pdG9yKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSkKK3sK
KwlyZXR1cm4gaGRtaS0+ZHZpX21vZGU7Cit9CisKK2ludCBtdGtfaGRtaV9vdXRwdXRfc2V0X2Rp
c3BsYXlfbW9kZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksCisJCQkJICAgICBzdHJ1Y3QgZHJtX2Rp
c3BsYXlfbW9kZSAqbW9kZSkKK3sKKwlpbnQgcmV0OworCisJaWYgKCFoZG1pLT5pbml0KSB7CisJ
CWRldl9lcnIoaGRtaS0+ZGV2LCAiZG9lc24ndCBpbml0IGhkbWkgY29udHJvbCBjb250ZXh0IVxu
Iik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW10a19oZG1pX2h3X3ZpZF9ibGFjayhoZG1p
LCB0cnVlKTsKKwltdGtfaGRtaV9od19hdWRfbXV0ZShoZG1pLCB0cnVlKTsKKwltdGtfaGRtaV9z
ZXR1cF9hdl9tdXRlX3BhY2tldChoZG1pKTsKKwlwaHlfcG93ZXJfb2ZmKGhkbWktPnBoeSk7CisK
KwlyZXQgPSBtdGtfaGRtaV92aWRlb19jaGFuZ2VfdnBsbChoZG1pLAorCQkJCQkgbW9kZS0+Y2xv
Y2sgKiAxMDAwLAorCQkJCQkgaGRtaS0+ZGVwdGgpOworCWlmIChyZXQpIHsKKwkJZGV2X2Vyciho
ZG1pLT5kZXYsICJzZXQgdnBsbCBmYWlsZWQhXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJbXRr
X2hkbWlfdmlkZW9fc2V0X2Rpc3BsYXlfbW9kZShoZG1pLCBtb2RlKTsKKworCXBoeV9wb3dlcl9v
bihoZG1pLT5waHkpOworCW10a19oZG1pX2F1ZF9vdXRwdXRfY29uZmlnKGhkbWksIG1vZGUpOwor
CisJbXRrX2hkbWlfc2V0dXBfYXVkaW9faW5mb2ZyYW1lKGhkbWkpOworCW10a19oZG1pX3NldHVw
X2F2aV9pbmZvZnJhbWUoaGRtaSwgbW9kZSk7CisJbXRrX2hkbWlfc2V0dXBfc3BkX2luZm9mcmFt
ZShoZG1pLCAibWVkaWF0ZWsiLCAiY2hyb21lYm9vayIpOworCWlmIChtb2RlLT5mbGFncyAmIERS
TV9NT0RFX0ZMQUdfM0RfTUFTSykKKwkJbXRrX2hkbWlfc2V0dXBfdmVuZG9yX3NwZWNpZmljX2lu
Zm9mcmFtZShoZG1pLCBtb2RlKTsKKworCW10a19oZG1pX2h3X3ZpZF9ibGFjayhoZG1pLCBmYWxz
ZSk7CisJbXRrX2hkbWlfaHdfYXVkX211dGUoaGRtaSwgZmFsc2UpOworCW10a19oZG1pX3NldHVw
X2F2X3VubXV0ZV9wYWNrZXQoaGRtaSk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2Ry
aXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaS5oIGIvZHJpdmVycy9ncHUvZHJtL21lZGlh
dGVrL210a19oZG1pLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzVhODkx
NwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaS5o
CkBAIC0wLDAgKzEsMTE4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE0IE1lZGlhVGVrIElu
Yy4KKyAqIEF1dGhvcjogSmllIFFpdSA8amllLnFpdUBtZWRpYXRlay5jb20+CisgKgorICogVGhp
cyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
ciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaWZuZGVmIF9NVEtf
SERNSV9DVFJMX0gKKyNkZWZpbmUgX01US19IRE1JX0NUUkxfSAorCisjaW5jbHVkZSA8ZHJtL2Ry
bV9jcnRjLmg+CisjaW5jbHVkZSA8ZHJtL21lZGlhdGVrL210a19oZG1pX2F1ZGlvLmg+CisjaW5j
bHVkZSA8bGludXgvaGRtaS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGlu
dXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworc3RydWN0IGNsazsKK3N0
cnVjdCBkZXZpY2U7CitzdHJ1Y3QgZGV2aWNlX25vZGU7CitzdHJ1Y3QgaTJjX2FkYXB0ZXI7Citz
dHJ1Y3QgcGxhdGZvcm1fZGV2aWNlOworc3RydWN0IHBoeTsKK3N0cnVjdCByZWdtYXA7CisKK2Vu
dW0gbXRrX2hkbWlfY2xrX2lkIHsKKwlNVEtfSERNSV9DTEtfSERNSV9QSVhFTCwKKwlNVEtfSERN
SV9DTEtfSERNSV9QTEwsCisJTVRLX0hETUlfQ0xLX0FVRF9CQ0xLLAorCU1US19IRE1JX0NMS19B
VURfU1BESUYsCisJTVRLX0hETUlfQ0xLX0NPVU5UCit9OworCitlbnVtIGhkbWlfZGlzcGxheV9j
b2xvcl9kZXB0aCB7CisJSERNSV9ERUVQX0NPTE9SXzI0QklUUywKKwlIRE1JX0RFRVBfQ09MT1Jf
MzBCSVRTLAorCUhETUlfREVFUF9DT0xPUl8zNkJJVFMsCisJSERNSV9ERUVQX0NPTE9SXzQ4QklU
UywKK307CisKK3N0cnVjdCBtdGtfaGRtaSB7CisJc3RydWN0IGRybV9icmlkZ2UgYnJpZGdlOwor
CXN0cnVjdCBkcm1fY29ubmVjdG9yIGNvbm47CisJc3RydWN0IGRldmljZSAqZGV2OworCXN0cnVj
dCBwaHkgKnBoeTsKKwlzdHJ1Y3QgZGV2aWNlICpjZWNfZGV2OworCXN0cnVjdCBpMmNfYWRhcHRl
ciAqZGRjX2FkcHQ7CisJc3RydWN0IGNsayAqY2xrW01US19IRE1JX0NMS19DT1VOVF07CisjaWYg
ZGVmaW5lZChDT05GSUdfREVCVUdfRlMpCisJc3RydWN0IGRlbnRyeSAqZGVidWdmczsKKyNlbmRp
ZgorCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmF1ZGlvX3BkZXY7CisJc3RydWN0IGRybV9kaXNw
bGF5X21vZGUgbW9kZTsKKwlib29sIGR2aV9tb2RlOworCWludCBmbHRfbl81dl9ncGlvOworCWlu
dCBmbHRfbl81dl9pcnE7CisJdTMyIG1pbl9jbG9jazsKKwl1MzIgbWF4X2Nsb2NrOworCXUzMiBt
YXhfaGRpc3BsYXk7CisJdTMyIG1heF92ZGlzcGxheTsKKwl1MzIgaWJpYXM7CisJdTMyIGliaWFz
X3VwOworCXN0cnVjdCByZWdtYXAgKnN5c19yZWdtYXA7CisJdW5zaWduZWQgaW50IHN5c19vZmZz
ZXQ7CisJdm9pZCBfX2lvbWVtICpyZWdzOworCWJvb2wgaW5pdDsKKwllbnVtIGhkbWlfZGlzcGxh
eV9jb2xvcl9kZXB0aCBkZXB0aDsKKwllbnVtIGhkbWlfY29sb3JzcGFjZSBjc3A7CisJYm9vbCBh
dWRpb19lbmFibGU7CisJYm9vbCBvdXRwdXQ7CisJc3RydWN0IGhkbWlfYXVkaW9fcGFyYW0gYXVk
X3BhcmFtOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbXRrX2hkbWkgKmhkbWlfY3R4X2Zy
b21fYnJpZGdlKHN0cnVjdCBkcm1fYnJpZGdlICpiKQoreworCXJldHVybiBjb250YWluZXJfb2Yo
Yiwgc3RydWN0IG10a19oZG1pLCBicmlkZ2UpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBt
dGtfaGRtaSAqaGRtaV9jdHhfZnJvbV9jb25uKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjKQorewor
CXJldHVybiBjb250YWluZXJfb2YoYywgc3RydWN0IG10a19oZG1pLCBjb25uKTsKK30KKworaW50
IG10a19oZG1pX291dHB1dF9pbml0KHN0cnVjdCBtdGtfaGRtaSAqaGRtaSk7CitpbnQgbXRrX2hk
bWlfaHBkX2hpZ2goc3RydWN0IG10a19oZG1pICpoZG1pKTsKK2ludCBtdGtfaGRtaV9vdXRwdXRf
c2V0X2Rpc3BsYXlfbW9kZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksCisJCQkJICAgICBzdHJ1Y3Qg
ZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSk7Cit2b2lkIG10a19oZG1pX3Bvd2VyX29uKHN0cnVjdCBt
dGtfaGRtaSAqaGRtaSk7Cit2b2lkIG10a19oZG1pX3Bvd2VyX29mZihzdHJ1Y3QgbXRrX2hkbWkg
KmhkbWkpOwordm9pZCBtdGtfaGRtaV9hdWRpb19lbmFibGUoc3RydWN0IG10a19oZG1pICpoY3R4
KTsKK3ZvaWQgbXRrX2hkbWlfYXVkaW9fZGlzYWJsZShzdHJ1Y3QgbXRrX2hkbWkgKmhjdHgpOwor
aW50IG10a19oZG1pX2F1ZGlvX3NldF9wYXJhbShzdHJ1Y3QgbXRrX2hkbWkgKmhjdHgsCisJCQkg
ICAgIHN0cnVjdCBoZG1pX2F1ZGlvX3BhcmFtICpwYXJhbSk7CitpbnQgbXRrX2hkbWlfZGV0ZWN0
X2R2aV9tb25pdG9yKHN0cnVjdCBtdGtfaGRtaSAqaGN0eCk7CisjaWYgZGVmaW5lZChDT05GSUdf
REVCVUdfRlMpCitpbnQgbXRrX2RybV9oZG1pX2RlYnVnZnNfaW5pdChzdHJ1Y3QgbXRrX2hkbWkg
KmhkbWkpOwordm9pZCBtdGtfZHJtX2hkbWlfZGVidWdmc19leGl0KHN0cnVjdCBtdGtfaGRtaSAq
aGRtaSk7CisjZWxzZQoraW50IG10a19kcm1faGRtaV9kZWJ1Z2ZzX2luaXQoc3RydWN0IG10a19o
ZG1pICpoZG1pKQoreworCXJldHVybiAwOworfQorCit2b2lkIG10a19kcm1faGRtaV9kZWJ1Z2Zz
X2V4aXQoc3RydWN0IG10a19oZG1pICpoZG1pKQoreworfQorI2VuZGlmIC8qIENPTkZJR19ERUJV
R19GUyAqLworCitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdGtfY2VjX2RyaXZlcjsK
K2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10a19oZG1pX2RkY19kcml2ZXI7CitleHRl
cm4gc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdGtfaGRtaV9waHlfZHJpdmVyOworI2VuZGlmIC8q
IF9NVEtfSERNSV9DVFJMX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRl
ay9tdGtfaGRtaV9kZGNfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2hkbWlf
ZGRjX2Rydi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyZTU0ODcKLS0t
IC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2hkbWlfZGRjX2Ry
di5jCkBAIC0wLDAgKzEsMzYyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE0IE1lZGlhVGVr
IEluYy4KKyAqIEF1dGhvcjogSmllIFFpdSA8amllLnFpdUBtZWRpYXRlay5jb20+CisgKgorICog
VGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8
bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGlu
dXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5
Lmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNp
bmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4K
KyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRl
IDxsaW51eC9vZl9hZGRyZXNzLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfaXJxLmg+CisjaW5jbHVk
ZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKworI2RlZmluZSBTSUYxX0NMT0sJCSgyODgpCisjZGVm
aW5lIEREQ19ERENNQ1RMMAkJKDB4MCkKKyNkZWZpbmUgRERDTV9PRFJBSU4JCQlCSVQoMzEpCisj
ZGVmaW5lIEREQ01fQ0xLX0RJVl9PRkZTRVQJCSgxNikKKyNkZWZpbmUgRERDTV9DTEtfRElWX01B
U0sJCSgweGZmZiA8PCAxNikKKyNkZWZpbmUgRERDTV9DU19TVEFUVVMJCQlCSVQoNCkKKyNkZWZp
bmUgRERDTV9TQ0xfU1RBVEUJCQlCSVQoMykKKyNkZWZpbmUgRERDTV9TREFfU1RBVEUJCQlCSVQo
MikKKyNkZWZpbmUgRERDTV9TTTBFTgkJCUJJVCgxKQorI2RlZmluZSBERENNX1NDTF9TVFJFQ0gJ
CQlCSVQoMCkKKyNkZWZpbmUgRERDX0REQ01DVEwxCQkoMHg0KQorI2RlZmluZSBERENNX0FDS19P
RkZTRVQJCQkoMTYpCisjZGVmaW5lIEREQ01fQUNLX01BU0sJCQkoMHhmZiA8PCAxNikKKyNkZWZp
bmUgRERDTV9QR0xFTl9PRkZTRVQJCSg4KQorI2RlZmluZSBERENNX1BHTEVOX01BU0sJCQkoMHg3
IDw8IDgpCisjZGVmaW5lIEREQ01fU0lGX01PREVfT0ZGU0VUCQkoNCkKKyNkZWZpbmUgRERDTV9T
SUZfTU9ERV9NQVNLCQkoMHg3IDw8IDQpCisjZGVmaW5lIEREQ01fU1RBUlQJCQkoMHgxKQorI2Rl
ZmluZSBERENNX1dSSVRFX0RBVEEJCQkoMHgyKQorI2RlZmluZSBERENNX1NUT1AJCQkoMHgzKQor
I2RlZmluZSBERENNX1JFQURfREFUQV9OT19BQ0sJCSgweDQpCisjZGVmaW5lIEREQ01fUkVBRF9E
QVRBX0FDSwkJKDB4NSkKKyNkZWZpbmUgRERDTV9UUkkJCQlCSVQoMCkKKyNkZWZpbmUgRERDX0RE
Q01EMAkJKDB4OCkKKyNkZWZpbmUgRERDTV9EQVRBMwkJCSgweGZmIDw8IDI0KQorI2RlZmluZSBE
RENNX0RBVEEyCQkJKDB4ZmYgPDwgMTYpCisjZGVmaW5lIEREQ01fREFUQTEJCQkoMHhmZiA8PCA4
KQorI2RlZmluZSBERENNX0RBVEEwCQkJKDB4ZmYgPDwgMCkKKyNkZWZpbmUgRERDX0REQ01EMQkJ
KDB4YykKKyNkZWZpbmUgRERDTV9EQVRBNwkJCSgweGZmIDw8IDI0KQorI2RlZmluZSBERENNX0RB
VEE2CQkJKDB4ZmYgPDwgMTYpCisjZGVmaW5lIEREQ01fREFUQTUJCQkoMHhmZiA8PCA4KQorI2Rl
ZmluZSBERENNX0RBVEE0CQkJKDB4ZmYgPDwgMCkKKworc3RydWN0IG10a19oZG1pX2kyYyB7CisJ
c3RydWN0IGkyY19hZGFwdGVyIGFkYXA7CisJc3RydWN0IGNsayAqY2xrOworCXZvaWQgX19pb21l
bSAqcmVnczsKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzaWZfc2V0X2JpdChzdHJ1Y3QgbXRr
X2hkbWlfaTJjICppMmMsIHVuc2lnbmVkIGludCBvZmZzZXQsCisJCQkgICAgICAgdW5zaWduZWQg
aW50IHZhbCkKK3sKKwl3cml0ZWwocmVhZGwoaTJjLT5yZWdzICsgb2Zmc2V0KSB8IHZhbCwgaTJj
LT5yZWdzICsgb2Zmc2V0KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNpZl9jbHJfYml0KHN0
cnVjdCBtdGtfaGRtaV9pMmMgKmkyYywgdW5zaWduZWQgaW50IG9mZnNldCwKKwkJCSAgICAgICB1
bnNpZ25lZCBpbnQgdmFsKQoreworCXdyaXRlbChyZWFkbChpMmMtPnJlZ3MgKyBvZmZzZXQpICYg
fnZhbCwgaTJjLT5yZWdzICsgb2Zmc2V0KTsKK30KKworc3RhdGljIGlubGluZSBib29sIHNpZl9i
aXRfaXNfc2V0KHN0cnVjdCBtdGtfaGRtaV9pMmMgKmkyYywgdW5zaWduZWQgaW50IG9mZnNldCwK
KwkJCQkgIHVuc2lnbmVkIGludCB2YWwpCit7CisJcmV0dXJuIChyZWFkbChpMmMtPnJlZ3MgKyBv
ZmZzZXQpICYgdmFsKSA9PSB2YWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzaWZfd3JpdGVf
bWFzayhzdHJ1Y3QgbXRrX2hkbWlfaTJjICppMmMsIHVuc2lnbmVkIGludCBvZmZzZXQsCisJCQkJ
ICB1bnNpZ25lZCBpbnQgbWFzaywgdW5zaWduZWQgaW50IHNoaWZ0LAorCQkJCSAgdW5zaWduZWQg
aW50IHZhbCkKK3sKKwl1bnNpZ25lZCBpbnQgdG1wOworCisJdG1wID0gcmVhZGwoaTJjLT5yZWdz
ICsgb2Zmc2V0KTsKKwl0bXAgJj0gfm1hc2s7CisJdG1wIHw9ICh2YWwgPDwgc2hpZnQpICYgbWFz
azsKKwl3cml0ZWwodG1wLCBpMmMtPnJlZ3MgKyBvZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5l
IHVuc2lnbmVkIGludCBzaWZfcmVhZF9tYXNrKHN0cnVjdCBtdGtfaGRtaV9pMmMgKmkyYywKKwkJ
CQkJIHVuc2lnbmVkIGludCBvZmZzZXQsIHVuc2lnbmVkIGludCBtYXNrLAorCQkJCQkgdW5zaWdu
ZWQgaW50IHNoaWZ0KQoreworCXJldHVybiAocmVhZGwoaTJjLT5yZWdzICsgb2Zmc2V0KSAmIG1h
c2spID4+IHNoaWZ0OworfQorCitzdGF0aWMgdm9pZCBkZGNtX3RyaWdnZXJfbW9kZShzdHJ1Y3Qg
bXRrX2hkbWlfaTJjICppMmMsIGludCBtb2RlKQoreworCWludCB0aW1lb3V0ID0gMjAgKiAxMDAw
OworCisJc2lmX3dyaXRlX21hc2soaTJjLCBERENfRERDTUNUTDEsIEREQ01fU0lGX01PREVfTUFT
SywKKwkJICAgICAgIEREQ01fU0lGX01PREVfT0ZGU0VULCBtb2RlKTsKKwlzaWZfc2V0X2JpdChp
MmMsIEREQ19ERENNQ1RMMSwgRERDTV9UUkkpOworCXdoaWxlIChzaWZfYml0X2lzX3NldChpMmMs
IEREQ19ERENNQ1RMMSwgRERDTV9UUkkpKSB7CisJCXRpbWVvdXQgLT0gMjsKKwkJdWRlbGF5KDIp
OworCQlpZiAodGltZW91dCA8PSAwKQorCQkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW50IG10
a19oZG1pX2kyY19yZWFkX21zZyhzdHJ1Y3QgbXRrX2hkbWlfaTJjICppMmMsIHN0cnVjdCBpMmNf
bXNnICptc2cpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gaTJjLT5hZGFwLmRldi5wYXJlbnQ7
CisJdTMyIHJlbWFpbl9jb3VudCwgYWNrX2NvdW50LCBhY2tfZmluYWwsIHJlYWRfY291bnQsIHRl
bXBfY291bnQ7CisJdTMyIGluZGV4ID0gMDsKKwl1MzIgYWNrOworCWludCBpOworCisJZGRjbV90
cmlnZ2VyX21vZGUoaTJjLCBERENNX1NUQVJUKTsKKwlzaWZfd3JpdGVfbWFzayhpMmMsIEREQ19E
RENNRDAsIDB4ZmYsIDAsIChtc2ctPmFkZHIgPDwgMSkgfCAweDAxKTsKKwlzaWZfd3JpdGVfbWFz
ayhpMmMsIEREQ19ERENNQ1RMMSwgRERDTV9QR0xFTl9NQVNLLCBERENNX1BHTEVOX09GRlNFVCwK
KwkJICAgICAgIDB4MDApOworCWRkY21fdHJpZ2dlcl9tb2RlKGkyYywgRERDTV9XUklURV9EQVRB
KTsKKwlhY2sgPSBzaWZfcmVhZF9tYXNrKGkyYywgRERDX0REQ01DVEwxLCBERENNX0FDS19NQVNL
LCBERENNX0FDS19PRkZTRVQpOworCWRldl9kYmcoZGV2LCAiYWNrID0gMHgleFxuIiwgYWNrKTsK
KwlpZiAoYWNrICE9IDB4MDEpIHsKKwkJZGV2X2VycihkZXYsICJpMmMgYWNrIGVyciFcbiIpOwor
CQlyZXR1cm4gLUVOWElPOworCX0KKworCXJlbWFpbl9jb3VudCA9IG1zZy0+bGVuOworCWFja19j
b3VudCA9IChtc2ctPmxlbiAtIDEpIC8gODsKKwlhY2tfZmluYWwgPSAwOworCisJd2hpbGUgKHJl
bWFpbl9jb3VudCA+IDApIHsKKwkJaWYgKGFja19jb3VudCA+IDApIHsKKwkJCXJlYWRfY291bnQg
PSA4OworCQkJYWNrX2ZpbmFsID0gMDsKKwkJCWFja19jb3VudC0tOworCQl9IGVsc2UgeworCQkJ
cmVhZF9jb3VudCA9IHJlbWFpbl9jb3VudDsKKwkJCWFja19maW5hbCA9IDE7CisJCX0KKworCQlz
aWZfd3JpdGVfbWFzayhpMmMsIEREQ19ERENNQ1RMMSwgRERDTV9QR0xFTl9NQVNLLAorCQkJICAg
ICAgIEREQ01fUEdMRU5fT0ZGU0VULCByZWFkX2NvdW50IC0gMSk7CisJCWRkY21fdHJpZ2dlcl9t
b2RlKGkyYywgKGFja19maW5hbCA9PSAxKSA/CisJCQkJICBERENNX1JFQURfREFUQV9OT19BQ0sg
OgorCQkJCSAgRERDTV9SRUFEX0RBVEFfQUNLKTsKKworCQlhY2sgPSBzaWZfcmVhZF9tYXNrKGky
YywgRERDX0REQ01DVEwxLCBERENNX0FDS19NQVNLLAorCQkJCSAgICBERENNX0FDS19PRkZTRVQp
OworCQl0ZW1wX2NvdW50ID0gMDsKKwkJd2hpbGUgKCgoYWNrICYgKDEgPDwgdGVtcF9jb3VudCkp
ICE9IDApICYmICh0ZW1wX2NvdW50IDwgOCkpCisJCQl0ZW1wX2NvdW50Kys7CisJCWlmICgoKGFj
a19maW5hbCA9PSAxKSAmJiAodGVtcF9jb3VudCAhPSAocmVhZF9jb3VudCAtIDEpKSkgfHwKKwkJ
ICAgICgoYWNrX2ZpbmFsID09IDApICYmICh0ZW1wX2NvdW50ICE9IHJlYWRfY291bnQpKSkgewor
CQkJZGV2X2VycihkZXYsICJBZGRyZXNzIE5BQ0shIEFDSygweCV4KVxuIiwgYWNrKTsKKwkJCWJy
ZWFrOworCQl9CisKKwkJZm9yIChpID0gcmVhZF9jb3VudDsgaSA+PSAxOyBpLS0pIHsKKwkJCWlu
dCBzaGlmdDsKKwkJCWludCBvZmZzZXQ7CisKKwkJCWlmIChpID4gNCkgeworCQkJCW9mZnNldCA9
IEREQ19ERENNRDE7CisJCQkJc2hpZnQgPSAoaSAtIDUpICogODsKKwkJCX0gZWxzZSB7CisJCQkJ
b2Zmc2V0ID0gRERDX0REQ01EMDsKKwkJCQlzaGlmdCA9IChpIC0gMSkgKiA4OworCQkJfQorCisJ
CQltc2ctPmJ1ZltpbmRleCArIGkgLSAxXSA9IHNpZl9yZWFkX21hc2soaTJjLCBvZmZzZXQsCisJ
CQkJCQkJCTB4ZmYgPDwgc2hpZnQsCisJCQkJCQkJCXNoaWZ0KTsKKwkJfQorCisJCXJlbWFpbl9j
b3VudCAtPSByZWFkX2NvdW50OworCQlpbmRleCArPSByZWFkX2NvdW50OworCX0KKworCXJldHVy
biAwOworfQorCitzdGF0aWMgaW50IG10a19oZG1pX2kyY193cml0ZV9tc2coc3RydWN0IG10a19o
ZG1pX2kyYyAqaTJjLCBzdHJ1Y3QgaTJjX21zZyAqbXNnKQoreworCXN0cnVjdCBkZXZpY2UgKmRl
diA9IGkyYy0+YWRhcC5kZXYucGFyZW50OworCXUzMiBhY2s7CisKKwlkZGNtX3RyaWdnZXJfbW9k
ZShpMmMsIEREQ01fU1RBUlQpOworCXNpZl93cml0ZV9tYXNrKGkyYywgRERDX0REQ01EMCwgRERD
TV9EQVRBMCwgMCwgbXNnLT5hZGRyIDw8IDEpOworCXNpZl93cml0ZV9tYXNrKGkyYywgRERDX0RE
Q01EMCwgRERDTV9EQVRBMSwgOCwgbXNnLT5idWZbMF0pOworCXNpZl93cml0ZV9tYXNrKGkyYywg
RERDX0REQ01DVEwxLCBERENNX1BHTEVOX01BU0ssIEREQ01fUEdMRU5fT0ZGU0VULAorCQkgICAg
ICAgMHgxKTsKKwlkZGNtX3RyaWdnZXJfbW9kZShpMmMsIEREQ01fV1JJVEVfREFUQSk7CisKKwlh
Y2sgPSBzaWZfcmVhZF9tYXNrKGkyYywgRERDX0REQ01DVEwxLCBERENNX0FDS19NQVNLLCBERENN
X0FDS19PRkZTRVQpOworCWRldl9kYmcoZGV2LCAiYWNrID0gJWRcbiIsIGFjayk7CisKKwlpZiAo
YWNrICE9IDB4MDMpIHsKKwkJZGV2X2VycihkZXYsICJpMmMgYWNrIGVyciFcbiIpOworCQlyZXR1
cm4gLUVJTzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdGtfaGRtaV9pMmNf
eGZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkgICAgIHN0cnVjdCBpMmNfbXNn
ICptc2dzLCBpbnQgbnVtKQoreworCXN0cnVjdCBtdGtfaGRtaV9pMmMgKmkyYyA9IGFkYXB0ZXIt
PmFsZ29fZGF0YTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBhZGFwdGVyLT5kZXYucGFyZW50Owor
CWludCByZXQ7CisJaW50IGk7CisKKwlpZiAoIWkyYykgeworCQlkZXZfZXJyKGRldiwgImludmFs
aWQgYXJndW1lbnRzXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc2lmX3NldF9iaXQo
aTJjLCBERENfRERDTUNUTDAsIEREQ01fU0NMX1NUUkVDSCk7CisJc2lmX3NldF9iaXQoaTJjLCBE
RENfRERDTUNUTDAsIEREQ01fU00wRU4pOworCXNpZl9jbHJfYml0KGkyYywgRERDX0REQ01DVEww
LCBERENNX09EUkFJTik7CisKKwlpZiAoc2lmX2JpdF9pc19zZXQoaTJjLCBERENfRERDTUNUTDEs
IEREQ01fVFJJKSkgeworCQlkZXZfZXJyKGRldiwgImRkYyBsaW5lIGlzIGJ1c3khXG4iKTsKKwkJ
cmV0dXJuIC1FQlVTWTsKKwl9CisKKwlzaWZfd3JpdGVfbWFzayhpMmMsIEREQ19ERENNQ1RMMCwg
RERDTV9DTEtfRElWX01BU0ssCisJCSAgICAgICBERENNX0NMS19ESVZfT0ZGU0VULCBTSUYxX0NM
T0spOworCisJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7CisJCXN0cnVjdCBpMmNfbXNnICpt
c2cgPSAmbXNnc1tpXTsKKworCQlkZXZfZGJnKGRldiwgImkyYyBtc2csIGFkcjoweCV4LCBmbGFn
czolZCwgbGVuIDoweCV4XG4iLAorCQkJbXNnLT5hZGRyLCBtc2ctPmZsYWdzLCBtc2ctPmxlbik7
CisKKwkJaWYgKG1zZy0+ZmxhZ3MgJiBJMkNfTV9SRCkKKwkJCXJldCA9IG10a19oZG1pX2kyY19y
ZWFkX21zZyhpMmMsIG1zZyk7CisJCWVsc2UKKwkJCXJldCA9IG10a19oZG1pX2kyY193cml0ZV9t
c2coaTJjLCBtc2cpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8geGZlcl9lbmQ7CisJfQorCisJ
ZGRjbV90cmlnZ2VyX21vZGUoaTJjLCBERENNX1NUT1ApOworCisJcmV0dXJuIGk7CisKK3hmZXJf
ZW5kOgorCWRkY21fdHJpZ2dlcl9tb2RlKGkyYywgRERDTV9TVE9QKTsKKwlkZXZfZXJyKGRldiwg
ImRkYyBmYWlsZWQhXG4iKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdTMyIG10a19oZG1p
X2kyY19mdW5jKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlyZXR1cm4gSTJDX0ZV
TkNfSTJDIHwgSTJDX0ZVTkNfU01CVVNfRU1VTDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBp
MmNfYWxnb3JpdGhtIG10a19oZG1pX2kyY19hbGdvcml0aG0gPSB7CisJLm1hc3Rlcl94ZmVyID0g
bXRrX2hkbWlfaTJjX3hmZXIsCisJLmZ1bmN0aW9uYWxpdHkgPSBtdGtfaGRtaV9pMmNfZnVuYywK
K307CisKK3N0YXRpYyBpbnQgbXRrX2hkbWlfaTJjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZp
Y2UgKnBkZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3Qg
bXRrX2hkbWlfaTJjICppMmM7CisJc3RydWN0IHJlc291cmNlICptZW07CisJaW50IHJldDsKKwor
CWkyYyA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZihzdHJ1Y3QgbXRrX2hkbWlfaTJjKSwgR0ZQ
X0tFUk5FTCk7CisJaWYgKCFpMmMpCisJCXJldHVybiAtRU5PTUVNOworCisJaTJjLT5jbGsgPSBk
ZXZtX2Nsa19nZXQoZGV2LCAiZGRjLWkyYyIpOworCWlmIChJU19FUlIoaTJjLT5jbGspKSB7CisJ
CWRldl9lcnIoZGV2LCAiZ2V0IGRkY19jbGsgZmFpbGVkIDogJXAgLFxuIiwgaTJjLT5jbGspOwor
CQlyZXR1cm4gUFRSX0VSUihpMmMtPmNsayk7CisJfQorCisJbWVtID0gcGxhdGZvcm1fZ2V0X3Jl
c291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpMmMtPnJlZ3MgPSBkZXZtX2lvcmVt
YXBfcmVzb3VyY2UoJnBkZXYtPmRldiwgbWVtKTsKKwlpZiAoSVNfRVJSKGkyYy0+cmVncykpIHsK
KwkJZGV2X2VycihkZXYsICJnZXQgbWVtb3J5IHNvdXJjZSBmYWlsIVxuIik7CisJCXJldHVybiBQ
VFJfRVJSKGkyYy0+cmVncyk7CisJfQorCisJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGkyYy0+
Y2xrKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiZW5hYmxlIGRkYyBjbGsgZmFpbGVk
IVxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJc3RybGNweShpMmMtPmFkYXAubmFtZSwgIm1l
ZGlhdGVrLWhkbWktaTJjIiwgc2l6ZW9mKGkyYy0+YWRhcC5uYW1lKSk7CisJaTJjLT5hZGFwLm93
bmVyID0gVEhJU19NT0RVTEU7CisJaTJjLT5hZGFwLmFsZ28gPSAmbXRrX2hkbWlfaTJjX2FsZ29y
aXRobTsKKwlpMmMtPmFkYXAucmV0cmllcyA9IDM7CisJaTJjLT5hZGFwLmRldi5vZl9ub2RlID0g
ZGV2LT5vZl9ub2RlOworCWkyYy0+YWRhcC5hbGdvX2RhdGEgPSBpMmM7CisJaTJjLT5hZGFwLmRl
di5wYXJlbnQgPSAmcGRldi0+ZGV2OworCisJcmV0ID0gaTJjX2FkZF9hZGFwdGVyKCZpMmMtPmFk
YXApOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGFkZCBidXMg
dG8gaTJjIGNvcmVcbiIpOworCQlnb3RvIGVycl9jbGtfZGlzYWJsZTsKKwl9CisKKwlwbGF0Zm9y
bV9zZXRfZHJ2ZGF0YShwZGV2LCBpMmMpOworCisJZGV2X2RiZyhkZXYsICJpMmMtPmFkYXA6ICVw
XG4iLCAmaTJjLT5hZGFwKTsKKwlkZXZfZGJnKGRldiwgImkyYy0+Y2xrOiAlcFxuIiwgaTJjLT5j
bGspOworCWRldl9kYmcoZGV2LCAicGh5c2ljYWwgYWRyOiAweCVsbHgsIGVuZDogMHglbGx4XG4i
LCBtZW0tPnN0YXJ0LAorCQltZW0tPmVuZCk7CisKKwlyZXR1cm4gMDsKKworZXJyX2Nsa19kaXNh
YmxlOgorCWNsa19kaXNhYmxlX3VucHJlcGFyZShpMmMtPmNsayk7CisJcmV0dXJuIHJldDsKK30K
Kworc3RhdGljIGludCBtdGtfaGRtaV9pMmNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ug
KnBkZXYpCit7CisJc3RydWN0IG10a19oZG1pX2kyYyAqaTJjID0gcGxhdGZvcm1fZ2V0X2RydmRh
dGEocGRldik7CisKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoaTJjLT5jbGspOworCWkyY19kZWxf
YWRhcHRlcigmaTJjLT5hZGFwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3Ry
dWN0IG9mX2RldmljZV9pZCBtdGtfaGRtaV9pMmNfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxl
ID0gIm1lZGlhdGVrLG10ODE3My1oZG1pLWRkYyIsIH0sCisJe30sCit9OworCitzdHJ1Y3QgcGxh
dGZvcm1fZHJpdmVyIG10a19oZG1pX2RkY19kcml2ZXIgPSB7CisJLnByb2JlID0gbXRrX2hkbWlf
aTJjX3Byb2JlLAorCS5yZW1vdmUgPSBtdGtfaGRtaV9pMmNfcmVtb3ZlLAorCS5kcml2ZXIgPSB7
CisJCS5uYW1lID0gIm1lZGlhdGVrLWhkbWktZGRjIiwKKwkJLm9mX21hdGNoX3RhYmxlID0gbXRr
X2hkbWlfaTJjX21hdGNoLAorCX0sCit9OworCitNT0RVTEVfQVVUSE9SKCJKaWUgUWl1IDxqaWUu
cWl1QG1lZGlhdGVrLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiTWVkaWFUZWsgSERNSSBp
MmMgRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2
ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2hkbWlfaHcuYyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRp
YXRlay9tdGtfaGRtaV9ody5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2
NTIyNjYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2hk
bWlfaHcuYwpAQCAtMCwwICsxLDc1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBNZWRp
YVRlayBJbmMuCisgKiBBdXRob3I6IEppZSBRaXUgPGppZS5xaXVAbWVkaWF0ZWsuY29tPgorICoK
KyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICog
R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1
ZGUgIm10a19oZG1pX2h3LmgiCisjaW5jbHVkZSAibXRrX2hkbWlfcmVncy5oIgorI2luY2x1ZGUg
Im10a19oZG1pLmgiCisKKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9k
ZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2hkbWkuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgor
I2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPgorCitzdGF0aWMgdTMyIG10a19oZG1pX3JlYWQoc3Ry
dWN0IG10a19oZG1pICpoZG1pLCB1MzIgb2Zmc2V0KQoreworCXJldHVybiByZWFkbChoZG1pLT5y
ZWdzICsgb2Zmc2V0KTsKK30KKworc3RhdGljIHZvaWQgbXRrX2hkbWlfd3JpdGUoc3RydWN0IG10
a19oZG1pICpoZG1pLCB1MzIgb2Zmc2V0LCB1MzIgdmFsKQoreworCXdyaXRlbCh2YWwsIGhkbWkt
PnJlZ3MgKyBvZmZzZXQpOworfQorCitzdGF0aWMgdm9pZCBtdGtfaGRtaV9tYXNrKHN0cnVjdCBt
dGtfaGRtaSAqaGRtaSwgdTMyIG9mZnNldCwgdTMyIHZhbCwgdTMyIG1hc2spCit7CisJdTMyIHRt
cCA9IG10a19oZG1pX3JlYWQoaGRtaSwgb2Zmc2V0KSAmIH5tYXNrOworCisJdG1wIHw9ICh2YWwg
JiBtYXNrKTsKKwltdGtfaGRtaV93cml0ZShoZG1pLCBvZmZzZXQsIHRtcCk7Cit9CisKK3N0YXRp
YyBjb25zdCB1OCBQUkVESVZbM11bNF0gPSB7CisJezB4MCwgMHgwLCAweDAsIDB4MH0sCS8qIDI3
TWh6ICovCisJezB4MSwgMHgxLCAweDEsIDB4MX0sCS8qIDc0TWh6ICovCisJezB4MSwgMHgxLCAw
eDEsIDB4MX0JLyogMTQ4TWh6ICovCit9OworCitzdGF0aWMgY29uc3QgdTggVFhESVZbM11bNF0g
PSB7CisJezB4MywgMHgzLCAweDMsIDB4Mn0sCS8qIDI3TWh6ICovCisJezB4MiwgMHgxLCAweDEs
IDB4MX0sCS8qIDc0TWh6ICovCisJezB4MSwgMHgwLCAweDAsIDB4MH0JLyogMTQ4TWh6ICovCit9
OworCitzdGF0aWMgY29uc3QgdTggRkJLU0VMWzNdWzRdID0geworCXsweDEsIDB4MSwgMHgxLCAw
eDF9LAkvKiAyN01oeiAqLworCXsweDEsIDB4MCwgMHgxLCAweDF9LAkvKiA3NE1oeiAqLworCXsw
eDEsIDB4MCwgMHgxLCAweDF9CS8qIDE0OE1oeiAqLworfTsKKworc3RhdGljIGNvbnN0IHU4IEZC
S0RJVlszXVs0XSA9IHsKKwl7MTksIDI0LCAyOSwgMTl9LAkvKiAyN01oeiAqLworCXsxOSwgMjQs
IDE0LCAxOX0sCS8qIDc0TWh6ICovCisJezE5LCAyNCwgMTQsIDE5fQkvKiAxNDhNaHogKi8KK307
CisKK3N0YXRpYyBjb25zdCB1OCBESVZFTlszXVs0XSA9IHsKKwl7MHgyLCAweDEsIDB4MSwgMHgy
fSwJLyogMjdNaHogKi8KKwl7MHgyLCAweDIsIDB4MiwgMHgyfSwJLyogNzRNaHogKi8KKwl7MHgy
LCAweDIsIDB4MiwgMHgyfQkvKiAxNDhNaHogKi8KK307CisKK3N0YXRpYyBjb25zdCB1OCBIVFBM
TEJQWzNdWzRdID0geworCXsweGMsIDB4YywgMHg4LCAweGN9LAkvKiAyN01oeiAqLworCXsweGMs
IDB4ZiwgMHhmLCAweGN9LAkvKiA3NE1oeiAqLworCXsweGMsIDB4ZiwgMHhmLCAweGN9CS8qIDE0
OE1oeiAqLworfTsKKworc3RhdGljIGNvbnN0IHU4IEhUUExMQkNbM11bNF0gPSB7CisJezB4Miwg
MHgzLCAweDMsIDB4Mn0sCS8qIDI3TWh6ICovCisJezB4MiwgMHgzLCAweDMsIDB4Mn0sCS8qIDc0
TWh6ICovCisJezB4MiwgMHgzLCAweDMsIDB4Mn0JLyogMTQ4TWh6ICovCit9OworCitzdGF0aWMg
Y29uc3QgdTggSFRQTExCUlszXVs0XSA9IHsKKwl7MHgxLCAweDEsIDB4MCwgMHgxfSwJLyogMjdN
aHogKi8KKwl7MHgxLCAweDIsIDB4MiwgMHgxfSwJLyogNzRNaHogKi8KKwl7MHgxLCAweDIsIDB4
MiwgMHgxfQkvKiAxNDhNaHogKi8KK307CisKKyNkZWZpbmUgTkNUU19CWVRFUyAgICAgICAgICAw
eDA3CitzdGF0aWMgY29uc3QgdTggSERNSV9OQ1RTWzddWzldW05DVFNfQllURVNdID0geworCXt7
MHgwMCwgMHgwMCwgMHg2OSwgMHg3OCwgMHgwMCwgMHgxMCwgMHgwMH0sCisJIHsweDAwLCAweDAw
LCAweGQyLCAweGYwLCAweDAwLCAweDEwLCAweDAwfSwKKwkgezB4MDAsIDB4MDMsIDB4MzcsIDB4
ZjksIDB4MDAsIDB4MmQsIDB4ODB9LAorCSB7MHgwMCwgMHgwMSwgMHgyMiwgMHgwYSwgMHgwMCwg
MHgxMCwgMHgwMH0sCisJIHsweDAwLCAweDA2LCAweDZmLCAweGYzLCAweDAwLCAweDJkLCAweDgw
fSwKKwkgezB4MDAsIDB4MDIsIDB4NDQsIDB4MTQsIDB4MDAsIDB4MTAsIDB4MDB9LAorCSB7MHgw
MCwgMHgwMSwgMHhBNSwgMHhlMCwgMHgwMCwgMHgxMCwgMHgwMH0sCisJIHsweDAwLCAweDA2LCAw
eDZGLCAweEYzLCAweDAwLCAweDE2LCAweEMwfSwKKwkgezB4MDAsIDB4MDMsIDB4NjYsIDB4MUUs
IDB4MDAsIDB4MEMsIDB4MDB9CisJIH0sCisJe3sweDAwLCAweDAwLCAweDc1LCAweDMwLCAweDAw
LCAweDE4LCAweDgwfSwKKwkgezB4MDAsIDB4MDAsIDB4ZWEsIDB4NjAsIDB4MDAsIDB4MTgsIDB4
ODB9LAorCSB7MHgwMCwgMHgwMywgMHg5MywgMHg4NywgMHgwMCwgMHg0NSwgMHhhY30sCisJIHsw
eDAwLCAweDAxLCAweDQyLCAweDQ0LCAweDAwLCAweDE4LCAweDgwfSwKKwkgezB4MDAsIDB4MDMs
IDB4OTMsIDB4ODcsIDB4MDAsIDB4MjIsIDB4ZDZ9LAorCSB7MHgwMCwgMHgwMiwgMHg4NCwgMHg4
OCwgMHgwMCwgMHgxOCwgMHg4MH0sCisJIHsweDAwLCAweDAxLCAweGQ0LCAweGMwLCAweDAwLCAw
eDE4LCAweDgwfSwKKwkgezB4MDAsIDB4MDMsIDB4OTMsIDB4ODcsIDB4MDAsIDB4MTEsIDB4NkJ9
LAorCSB7MHgwMCwgMHgwMywgMHhDNiwgMHhDQywgMHgwMCwgMHgxMiwgMHg2MH0KKwkgfSwKKwl7
ezB4MDAsIDB4MDAsIDB4NjksIDB4NzgsIDB4MDAsIDB4MTgsIDB4MDB9LAorCSB7MHgwMCwgMHgw
MCwgMHhkMiwgMHhmMCwgMHgwMCwgMHgxOCwgMHgwMH0sCisJIHsweDAwLCAweDAyLCAweDI1LCAw
eDUxLCAweDAwLCAweDJkLCAweDgwfSwKKwkgezB4MDAsIDB4MDEsIDB4MjIsIDB4MGEsIDB4MDAs
IDB4MTgsIDB4MDB9LAorCSB7MHgwMCwgMHgwMiwgMHgyNSwgMHg1MSwgMHgwMCwgMHgxNiwgMHhj
MH0sCisJIHsweDAwLCAweDAyLCAweDQ0LCAweDE0LCAweDAwLCAweDE4LCAweDAwfSwKKwkgezB4
MDAsIDB4MDEsIDB4QTUsIDB4ZTAsIDB4MDAsIDB4MTgsIDB4MDB9LAorCSB7MHgwMCwgMHgwNCwg
MHg0QSwgMHhBMiwgMHgwMCwgMHgxNiwgMHhDMH0sCisJIHsweDAwLCAweDAzLCAweEM2LCAweEND
LCAweDAwLCAweDE0LCAweDAwfQorCSB9LAorCXt7MHgwMCwgMHgwMCwgMHg3NSwgMHgzMCwgMHgw
MCwgMHgzMSwgMHgwMH0sCisJIHsweDAwLCAweDAwLCAweGVhLCAweDYwLCAweDAwLCAweDMxLCAw
eDAwfSwKKwkgezB4MDAsIDB4MDMsIDB4OTMsIDB4ODcsIDB4MDAsIDB4OGIsIDB4NTh9LAorCSB7
MHgwMCwgMHgwMSwgMHg0MiwgMHg0NCwgMHgwMCwgMHgzMSwgMHgwMH0sCisJIHsweDAwLCAweDAz
LCAweDkzLCAweDg3LCAweDAwLCAweDQ1LCAweGFjfSwKKwkgezB4MDAsIDB4MDIsIDB4ODQsIDB4
ODgsIDB4MDAsIDB4MzEsIDB4MDB9LAorCSB7MHgwMCwgMHgwMSwgMHhkNCwgMHhjMCwgMHgwMCwg
MHgzMSwgMHgwMH0sCisJIHsweDAwLCAweDAzLCAweDkzLCAweDg3LCAweDAwLCAweDIyLCAweEQ2
fSwKKwkgezB4MDAsIDB4MDMsIDB4QzYsIDB4Q0MsIDB4MDAsIDB4MjQsIDB4QzB9CisJIH0sCisJ
e3sweDAwLCAweDAwLCAweDY5LCAweDc4LCAweDAwLCAweDMwLCAweDAwfSwKKwkgezB4MDAsIDB4
MDAsIDB4ZDIsIDB4ZjAsIDB4MDAsIDB4MzAsIDB4MDB9LAorCSB7MHgwMCwgMHgwMiwgMHgyNSwg
MHg1MSwgMHgwMCwgMHg1YiwgMHgwMH0sCisJIHsweDAwLCAweDAxLCAweDIyLCAweDBhLCAweDAw
LCAweDMwLCAweDAwfSwKKwkgezB4MDAsIDB4MDIsIDB4MjUsIDB4NTEsIDB4MDAsIDB4MmQsIDB4
ODB9LAorCSB7MHgwMCwgMHgwMiwgMHg0NCwgMHgxNCwgMHgwMCwgMHgzMCwgMHgwMH0sCisJIHsw
eDAwLCAweDAxLCAweEE1LCAweGUwLCAweDAwLCAweDMwLCAweDAwfSwKKwkgezB4MDAsIDB4MDQs
IDB4NEEsIDB4QTIsIDB4MDAsIDB4MkQsIDB4ODB9LAorCSB7MHgwMCwgMHgwMywgMHhDNiwgMHhD
QywgMHgwMCwgMHgyOCwgMHg4MH0KKwkgfSwKKwl7ezB4MDAsIDB4MDAsIDB4NzUsIDB4MzAsIDB4
MDAsIDB4NjIsIDB4MDB9LAorCSB7MHgwMCwgMHgwMCwgMHhlYSwgMHg2MCwgMHgwMCwgMHg2Miwg
MHgwMH0sCisJIHsweDAwLCAweDAzLCAweDkzLCAweDg3LCAweDAxLCAweDE2LCAweGIwfSwKKwkg
ezB4MDAsIDB4MDEsIDB4NDIsIDB4NDQsIDB4MDAsIDB4NjIsIDB4MDB9LAorCSB7MHgwMCwgMHgw
MywgMHg5MywgMHg4NywgMHgwMCwgMHg4YiwgMHg1OH0sCisJIHsweDAwLCAweDAyLCAweDg0LCAw
eDg4LCAweDAwLCAweDYyLCAweDAwfSwKKwkgezB4MDAsIDB4MDEsIDB4ZDQsIDB4YzAsIDB4MDAs
IDB4NjIsIDB4MDB9LAorCSB7MHgwMCwgMHgwMywgMHg5MywgMHg4NywgMHgwMCwgMHg0NSwgMHhB
Q30sCisJIHsweDAwLCAweDAzLCAweEM2LCAweENDLCAweDAwLCAweDQ5LCAweDgwfQorCSB9LAor
CXt7MHgwMCwgMHgwMCwgMHg2OSwgMHg3OCwgMHgwMCwgMHg2MCwgMHgwMH0sCisJIHsweDAwLCAw
eDAwLCAweGQyLCAweGYwLCAweDAwLCAweDYwLCAweDAwfSwKKwkgezB4MDAsIDB4MDIsIDB4MjUs
IDB4NTEsIDB4MDAsIDB4YjYsIDB4MDB9LAorCSB7MHgwMCwgMHgwMSwgMHgyMiwgMHgwYSwgMHgw
MCwgMHg2MCwgMHgwMH0sCisJIHsweDAwLCAweDAyLCAweDI1LCAweDUxLCAweDAwLCAweDViLCAw
eDAwfSwKKwkgezB4MDAsIDB4MDIsIDB4NDQsIDB4MTQsIDB4MDAsIDB4NjAsIDB4MDB9LAorCSB7
MHgwMCwgMHgwMSwgMHhBNSwgMHhlMCwgMHgwMCwgMHg2MCwgMHgwMH0sCisJIHsweDAwLCAweDA0
LCAweDRBLCAweEEyLCAweDAwLCAweDVCLCAweDAwfSwKKwkgezB4MDAsIDB4MDMsIDB4QzYsIDB4
Q0MsIDB4MDAsIDB4NTAsIDB4MDB9CisJIH0KK307CisKK3ZvaWQgbXRrX2hkbWlfaHdfdmlkX2Js
YWNrKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwKKwkJCSAgIGJvb2wgYmxhY2spCit7CisJbXRrX2hk
bWlfbWFzayhoZG1pLCBWSURFT19DRkdfNCwgYmxhY2sgPyBHRU5fUkdCIDogTk9STUFMX1BBVEgs
CisJCSAgICAgIFZJREVPX1NPVVJDRV9TRUwpOworfQorCit2b2lkIG10a19oZG1pX2h3X21ha2Vf
cmVnX3dyaXRhYmxlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwgYm9vbCBlbmFibGUpCit7CisJcmVn
bWFwX3VwZGF0ZV9iaXRzKGhkbWktPnN5c19yZWdtYXAsIGhkbWktPnN5c19vZmZzZXQgKyBIRE1J
X1NZU19DRkcyMCwKKwkJCSAgIEhETUlfUENMS19GUkVFX1JVTiwgZW5hYmxlID8gSERNSV9QQ0xL
X0ZSRUVfUlVOIDogMCk7CisJcmVnbWFwX3VwZGF0ZV9iaXRzKGhkbWktPnN5c19yZWdtYXAsIGhk
bWktPnN5c19vZmZzZXQgKyBIRE1JX1NZU19DRkcxQywKKwkJCSAgIEhETUlfT04gfCBBTkxHX09O
LCBlbmFibGUgPyAoSERNSV9PTiB8IEFOTEdfT04pIDogMCk7Cit9CisKK3ZvaWQgbXRrX2hkbWlf
aHdfMXA0X3ZlcnNpb25fZW5hYmxlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwgYm9vbCBlbmFibGUp
Cit7CisJcmVnbWFwX3VwZGF0ZV9iaXRzKGhkbWktPnN5c19yZWdtYXAsIGhkbWktPnN5c19vZmZz
ZXQgKyBIRE1JX1NZU19DRkcyMCwKKwkJCSAgIEhETUkyUDBfRU4sIGVuYWJsZSA/IDAgOiBIRE1J
MlAwX0VOKTsKK30KKwordm9pZCBtdGtfaGRtaV9od19hdWRfbXV0ZShzdHJ1Y3QgbXRrX2hkbWkg
KmhkbWksIGJvb2wgbXV0ZSkKK3sKKwltdGtfaGRtaV9tYXNrKGhkbWksIEdSTF9BVURJT19DRkcs
IG11dGUgPyBBVURJT19aRVJPIDogMCwgQVVESU9fWkVSTyk7Cit9CisKK3ZvaWQgbXRrX2hkbWlf
aHdfcmVzZXQoc3RydWN0IG10a19oZG1pICpoZG1pKQoreworCXJlZ21hcF91cGRhdGVfYml0cyho
ZG1pLT5zeXNfcmVnbWFwLCBoZG1pLT5zeXNfb2Zmc2V0ICsgSERNSV9TWVNfQ0ZHMUMsCisJCQkg
ICBIRE1JX1JTVCwgSERNSV9SU1QpOworCXJlZ21hcF91cGRhdGVfYml0cyhoZG1pLT5zeXNfcmVn
bWFwLCBoZG1pLT5zeXNfb2Zmc2V0ICsgSERNSV9TWVNfQ0ZHMUMsCisJCQkgICBIRE1JX1JTVCwg
MCk7CisJbXRrX2hkbWlfbWFzayhoZG1pLCBHUkxfQ0ZHMywgMCwgQ0ZHM19DT05UUk9MX1BBQ0tF
VF9ERUxBWSk7CisJcmVnbWFwX3VwZGF0ZV9iaXRzKGhkbWktPnN5c19yZWdtYXAsIGhkbWktPnN5
c19vZmZzZXQgKyBIRE1JX1NZU19DRkcxQywKKwkJCSAgIEFOTEdfT04sIEFOTEdfT04pOworfQor
Cit2b2lkIG10a19oZG1pX2h3X2VuYWJsZV9ub3RpY2Uoc3RydWN0IG10a19oZG1pICpoZG1pLCBi
b29sIGVuYWJsZV9ub3RpY2UpCit7CisJbXRrX2hkbWlfbWFzayhoZG1pLCBHUkxfQ0ZHMiwgZW5h
YmxlX25vdGljZSA/IENGRzJfTk9USUNFX0VOIDogMCwKKwkJICAgICAgQ0ZHMl9OT1RJQ0VfRU4p
OworfQorCit2b2lkIG10a19oZG1pX2h3X3dyaXRlX2ludF9tYXNrKHN0cnVjdCBtdGtfaGRtaSAq
aGRtaSwgdTMyIGludF9tYXNrKQoreworCW10a19oZG1pX3dyaXRlKGhkbWksIEdSTF9JTlRfTUFT
SywgaW50X21hc2spOworfQorCit2b2lkIG10a19oZG1pX2h3X2VuYWJsZV9kdmlfbW9kZShzdHJ1
Y3QgbXRrX2hkbWkgKmhkbWksIGJvb2wgZW5hYmxlKQoreworCW10a19oZG1pX21hc2soaGRtaSwg
R1JMX0NGRzEsIGVuYWJsZSA/IENGRzFfRFZJIDogMCwgQ0ZHMV9EVkkpOworfQorCit2b2lkIG10
a19oZG1pX2h3X3NlbmRfaW5mb19mcmFtZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksIHU4ICpidWZm
ZXIsIHU4IGxlbikKK3sKKwl1MzIgY3RybF9yZWcgPSBHUkxfQ1RSTDsKKwlpbnQgaTsKKwl1OCAq
ZnJhbWVfZGF0YTsKKwl1OCBmcmFtZV90eXBlOworCXU4IGZyYW1lX3ZlcjsKKwl1OCBmcmFtZV9s
ZW47CisJdTggY2hlY2tzdW07CisJaW50IGN0cmxfZnJhbWVfZW4gPSAwOworCisJZnJhbWVfdHlw
ZSA9ICpidWZmZXI7CisJYnVmZmVyICs9IDE7CisJZnJhbWVfdmVyID0gKmJ1ZmZlcjsKKwlidWZm
ZXIgKz0gMTsKKwlmcmFtZV9sZW4gPSAqYnVmZmVyOworCWJ1ZmZlciArPSAxOworCWNoZWNrc3Vt
ID0gKmJ1ZmZlcjsKKwlidWZmZXIgKz0gMTsKKwlmcmFtZV9kYXRhID0gYnVmZmVyOworCisJZGV2
X2luZm8oaGRtaS0+ZGV2LAorCQkgImZyYW1lX3R5cGU6MHgleCxmcmFtZV92ZXI6MHgleCxmcmFt
ZV9sZW46MHgleCxjaGVja3N1bToweCV4XG4iLAorCQkgZnJhbWVfdHlwZSwgZnJhbWVfdmVyLCBm
cmFtZV9sZW4sIGNoZWNrc3VtKTsKKworCXN3aXRjaCAoZnJhbWVfdHlwZSkgeworCWNhc2UgSERN
SV9JTkZPRlJBTUVfVFlQRV9BVkk6CisJCWN0cmxfZnJhbWVfZW4gPSBDVFJMX0FWSV9FTjsKKwkJ
Y3RybF9yZWcgPSBHUkxfQ1RSTDsKKwkJYnJlYWs7CisJY2FzZSBIRE1JX0lORk9GUkFNRV9UWVBF
X1NQRDoKKwkJY3RybF9mcmFtZV9lbiA9IENUUkxfU1BEX0VOOworCQljdHJsX3JlZyA9IEdSTF9D
VFJMOworCQlicmVhazsKKwljYXNlIEhETUlfSU5GT0ZSQU1FX1RZUEVfQVVESU86CisJCWN0cmxf
ZnJhbWVfZW4gPSBDVFJMX0FVRElPX0VOOworCQljdHJsX3JlZyA9IEdSTF9DVFJMOworCQlicmVh
azsKKwljYXNlIEhETUlfSU5GT0ZSQU1FX1RZUEVfVkVORE9SOgorCQljdHJsX2ZyYW1lX2VuID0g
VlNfRU47CisJCWN0cmxfcmVnID0gR1JMX0FDUF9JU1JDX0NUUkw7CisJCWJyZWFrOworCWRlZmF1
bHQ6CisJCWJyZWFrOworCX0KKwltdGtfaGRtaV9tYXNrKGhkbWksIGN0cmxfcmVnLCAwLCBjdHJs
X2ZyYW1lX2VuKTsKKwltdGtfaGRtaV93cml0ZShoZG1pLCBHUkxfSU5GT0ZSTV9UWVBFLCBmcmFt
ZV90eXBlKTsKKwltdGtfaGRtaV93cml0ZShoZG1pLCBHUkxfSU5GT0ZSTV9WRVIsIGZyYW1lX3Zl
cik7CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX0lORk9GUk1fTE5HLCBmcmFtZV9sZW4pOwor
CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX0lGTV9QT1JULCBjaGVja3N1bSk7CisJZm9yIChp
ID0gMDsgaSA8IGZyYW1lX2xlbjsgaSsrKQorCQltdGtfaGRtaV93cml0ZShoZG1pLCBHUkxfSUZN
X1BPUlQsIGZyYW1lX2RhdGFbaV0pOworCisJbXRrX2hkbWlfbWFzayhoZG1pLCBjdHJsX3JlZywg
Y3RybF9mcmFtZV9lbiwgY3RybF9mcmFtZV9lbik7Cit9CisKK3ZvaWQgbXRrX2hkbWlfaHdfc2Vu
ZF9hdWRfcGFja2V0KHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwgYm9vbCBlbmFibGUpCit7CisJbXRr
X2hkbWlfbWFzayhoZG1pLCBHUkxfU0hJRlRfUjIsIGVuYWJsZSA/IDAgOiBBVURJT19QQUNLRVRf
T0ZGLAorCQkgICAgICBBVURJT19QQUNLRVRfT0ZGKTsKK30KKwordm9pZCBtdGtfaGRtaV9od19j
b25maWdfc3lzKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSkKK3sKKwlyZWdtYXBfdXBkYXRlX2JpdHMo
aGRtaS0+c3lzX3JlZ21hcCwgaGRtaS0+c3lzX29mZnNldCArIEhETUlfU1lTX0NGRzIwLAorCQkJ
ICAgSERNSV9PVVRfRklGT19FTiB8IE1ITF9NT0RFX09OLCAwKTsKKwltZGVsYXkoMik7CisJcmVn
bWFwX3VwZGF0ZV9iaXRzKGhkbWktPnN5c19yZWdtYXAsIGhkbWktPnN5c19vZmZzZXQgKyBIRE1J
X1NZU19DRkcyMCwKKwkJCSAgIEhETUlfT1VUX0ZJRk9fRU4gfCBNSExfTU9ERV9PTiwgSERNSV9P
VVRfRklGT19FTik7Cit9CisKK3ZvaWQgbXRrX2hkbWlfaHdfc2V0X2RlZXBfY29sb3JfbW9kZShz
dHJ1Y3QgbXRrX2hkbWkgKmhkbWksCisJCQkJICAgICBlbnVtIGhkbWlfZGlzcGxheV9jb2xvcl9k
ZXB0aCBkZXB0aCkKK3sKKwl1MzIgdmFsID0gMDsKKworCXN3aXRjaCAoZGVwdGgpIHsKKwljYXNl
IEhETUlfREVFUF9DT0xPUl8yNEJJVFM6CisJCXZhbCA9IENPTE9SXzhCSVRfTU9ERTsKKwkJYnJl
YWs7CisJY2FzZSBIRE1JX0RFRVBfQ09MT1JfMzBCSVRTOgorCQl2YWwgPSBDT0xPUl8xMEJJVF9N
T0RFIHwgREVFUF9DT0xPUl9FTjsKKwkJYnJlYWs7CisJY2FzZSBIRE1JX0RFRVBfQ09MT1JfMzZC
SVRTOgorCQl2YWwgPSBDT0xPUl8xMkJJVF9NT0RFIHwgREVFUF9DT0xPUl9FTjsKKwkJYnJlYWs7
CisJY2FzZSBIRE1JX0RFRVBfQ09MT1JfNDhCSVRTOgorCQl2YWwgPSBDT0xPUl8xNkJJVF9NT0RF
IHwgREVFUF9DT0xPUl9FTjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJdmFsID0gQ09MT1JfOEJJ
VF9NT0RFOworCQlicmVhazsKKwl9CisKKwlyZWdtYXBfdXBkYXRlX2JpdHMoaGRtaS0+c3lzX3Jl
Z21hcCwgaGRtaS0+c3lzX29mZnNldCArIEhETUlfU1lTX0NGRzIwLAorCQkJICAgREVFUF9DT0xP
Ul9NT0RFX01BU0sgfCBERUVQX0NPTE9SX0VOLCB2YWwpOworfQorCit2b2lkIG10a19oZG1pX2h3
X3NlbmRfYXZfbXV0ZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkpCit7CisJbXRrX2hkbWlfbWFzayho
ZG1pLCBHUkxfQ0ZHNCwgMCwgQ1RSTF9BVk1VVEUpOworCW1kZWxheSgyKTsKKwltdGtfaGRtaV9t
YXNrKGhkbWksIEdSTF9DRkc0LCBDVFJMX0FWTVVURSwgQ1RSTF9BVk1VVEUpOworfQorCit2b2lk
IG10a19oZG1pX2h3X3NlbmRfYXZfdW5tdXRlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSkKK3sKKwlt
dGtfaGRtaV9tYXNrKGhkbWksIEdSTF9DRkc0LCBDRkc0X0FWX1VOTVVURV9FTiwKKwkJICAgICAg
Q0ZHNF9BVl9VTk1VVEVfRU4gfCBDRkc0X0FWX1VOTVVURV9TRVQpOworCW1kZWxheSgyKTsKKwlt
dGtfaGRtaV9tYXNrKGhkbWksIEdSTF9DRkc0LCBDRkc0X0FWX1VOTVVURV9TRVQsCisJCSAgICAg
IENGRzRfQVZfVU5NVVRFX0VOIHwgQ0ZHNF9BVl9VTk1VVEVfU0VUKTsKK30KKwordm9pZCBtdGtf
aGRtaV9od19uY3RzX2VuYWJsZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksIGJvb2wgb24pCit7CisJ
bXRrX2hkbWlfbWFzayhoZG1pLCBHUkxfQ1RTX0NUUkwsIG9uID8gMCA6IENUU19DVFJMX1NPRlQs
CisJCSAgICAgIENUU19DVFJMX1NPRlQpOworfQorCit2b2lkIG10a19oZG1pX2h3X25jdHNfYXV0
b193cml0ZV9lbmFibGUoc3RydWN0IG10a19oZG1pICpoZG1pLCBib29sIGVuYWJsZSkKK3sKKwlt
dGtfaGRtaV9tYXNrKGhkbWksIEdSTF9DVFNfQ1RSTCwgZW5hYmxlID8gTkNUU19XUklfQU5ZVElN
RSA6IDAsCisJCSAgICAgIE5DVFNfV1JJX0FOWVRJTUUpOworfQorCit2b2lkIG10a19oZG1pX2h3
X21zaWNfc2V0dGluZyhzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksCisJCQkgICAgICBzdHJ1Y3QgZHJt
X2Rpc3BsYXlfbW9kZSAqbW9kZSkKK3sKKwltdGtfaGRtaV9tYXNrKGhkbWksIEdSTF9DRkc0LCAw
LCBDRkdfTUhMX01PREUpOworCisJaWYgKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19JTlRF
UkxBQ0UgJiYKKwkgICAgbW9kZS0+Y2xvY2sgPT0gNzQyNTAgJiYKKwkgICAgbW9kZS0+dmRpc3Bs
YXkgPT0gMTA4MCkKKwkJbXRrX2hkbWlfbWFzayhoZG1pLCBHUkxfQ0ZHMiwgMCwgTUhMX0RFX1NF
TCk7CisJZWxzZQorCQltdGtfaGRtaV9tYXNrKGhkbWksIEdSTF9DRkcyLCBNSExfREVfU0VMLCBN
SExfREVfU0VMKTsKK30KKwordm9pZCBtdGtfaGRtaV9od19hdWRfc2V0X2NoYW5uZWxfc3dhcChz
dHJ1Y3QgbXRrX2hkbWkgKmhkbWksCisJCQkJICAgICAgZW51bSBoZG1pX2F1ZF9jaGFubmVsX3N3
YXBfdHlwZSBzd2FwKQoreworCXU4IHN3YXBfYml0OworCisJc3dpdGNoIChzd2FwKSB7CisJY2Fz
ZSBIRE1JX0FVRF9TV0FQX0xSOgorCQlzd2FwX2JpdCA9IExSX1NXQVA7CisJCWJyZWFrOworCWNh
c2UgSERNSV9BVURfU1dBUF9MRkVfQ0M6CisJCXN3YXBfYml0ID0gTEZFX0NDX1NXQVA7CisJCWJy
ZWFrOworCWNhc2UgSERNSV9BVURfU1dBUF9MU1JTOgorCQlzd2FwX2JpdCA9IExTUlNfU1dBUDsK
KwkJYnJlYWs7CisJY2FzZSBIRE1JX0FVRF9TV0FQX1JMU19SUlM6CisJCXN3YXBfYml0ID0gUkxT
X1JSU19TV0FQOworCQlicmVhazsKKwljYXNlIEhETUlfQVVEX1NXQVBfTFJfU1RBVFVTOgorCQlz
d2FwX2JpdCA9IExSX1NUQVRVU19TV0FQOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlzd2FwX2Jp
dCA9IExGRV9DQ19TV0FQOworCQlicmVhazsKKwl9CisJbXRrX2hkbWlfbWFzayhoZG1pLCBHUkxf
Q0hfU1dBUCwgc3dhcF9iaXQsIDB4ZmYpOworfQorCit2b2lkIG10a19oZG1pX2h3X2F1ZF9yYXdf
ZGF0YV9lbmFibGUoc3RydWN0IG10a19oZG1pICpoZG1pLCBib29sIGVuYWJsZSkKK3sKKwltdGtf
aGRtaV9tYXNrKGhkbWksIEdSTF9NSVhfQ1RSTCwgZW5hYmxlID8gTUlYX0NUUkxfRkxBVCA6IDAs
CisJCSAgICAgIE1JWF9DVFJMX0ZMQVQpOworfQorCit2b2lkIG10a19oZG1pX2h3X2F1ZF9zZXRf
Yml0X251bShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksCisJCQkJIGVudW0gaGRtaV9hdWRpb19zYW1w
bGVfc2l6ZSBiaXRfbnVtKQoreworCXUzMiB2YWwgPSAwOworCisJaWYgKGJpdF9udW0gPT0gSERN
SV9BVURJT19TQU1QTEVfU0laRV8xNikKKwkJdmFsID0gQU9VVF8xNkJJVDsKKwllbHNlIGlmIChi
aXRfbnVtID09IEhETUlfQVVESU9fU0FNUExFX1NJWkVfMjApCisJCXZhbCA9IEFPVVRfMjBCSVQ7
CisJZWxzZSBpZiAoYml0X251bSA9PSBIRE1JX0FVRElPX1NBTVBMRV9TSVpFXzI0KQorCQl2YWwg
PSBBT1VUXzI0QklUOworCisJbXRrX2hkbWlfbWFzayhoZG1pLCBHUkxfQU9VVF9CTlVNX1NFTCwg
dmFsLCAweDAzKTsKK30KKwordm9pZCBtdGtfaGRtaV9od19hdWRfc2V0X2kyc19mbXQoc3RydWN0
IG10a19oZG1pICpoZG1pLAorCQkJCSBlbnVtIGhkbWlfYXVkX2kyc19mbXQgaTJzX2ZtdCkKK3sK
Kwl1MzIgdmFsID0gMDsKKworCXZhbCA9IG10a19oZG1pX3JlYWQoaGRtaSwgR1JMX0NGRzApOwor
CXZhbCAmPSB+MHgzMzsKKworCXN3aXRjaCAoaTJzX2ZtdCkgeworCWNhc2UgSERNSV9JMlNfTU9E
RV9SSlRfMjRCSVQ6CisJCXZhbCB8PSAoQ0ZHMF9JMlNfTU9ERV9SVEogfCBDRkcwX0kyU19NT0RF
XzI0QklUKTsKKwkJYnJlYWs7CisJY2FzZSBIRE1JX0kyU19NT0RFX1JKVF8xNkJJVDoKKwkJdmFs
IHw9IChDRkcwX0kyU19NT0RFX1JUSiB8IENGRzBfSTJTX01PREVfMTZCSVQpOworCQlicmVhazsK
KwljYXNlIEhETUlfSTJTX01PREVfTEpUXzI0QklUOgorCQl2YWwgfD0gKENGRzBfSTJTX01PREVf
TFRKIHwgQ0ZHMF9JMlNfTU9ERV8yNEJJVCk7CisJCWJyZWFrOworCWNhc2UgSERNSV9JMlNfTU9E
RV9MSlRfMTZCSVQ6CisJCXZhbCB8PSAoQ0ZHMF9JMlNfTU9ERV9MVEogfCBDRkcwX0kyU19NT0RF
XzE2QklUKTsKKwkJYnJlYWs7CisJY2FzZSBIRE1JX0kyU19NT0RFX0kyU18yNEJJVDoKKwkJdmFs
IHw9IChDRkcwX0kyU19NT0RFX0kyUyB8IENGRzBfSTJTX01PREVfMjRCSVQpOworCQlicmVhazsK
KwljYXNlIEhETUlfSTJTX01PREVfSTJTXzE2QklUOgorCQl2YWwgfD0gKENGRzBfSTJTX01PREVf
STJTIHwgQ0ZHMF9JMlNfTU9ERV8xNkJJVCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFr
OworCX0KKwltdGtfaGRtaV93cml0ZShoZG1pLCBHUkxfQ0ZHMCwgdmFsKTsKK30KKwordm9pZCBt
dGtfaGRtaV9od19hdWRfc2V0X2hpZ2hfYml0cmF0ZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksIGJv
b2wgZW5hYmxlKQoreworCW10a19oZG1pX21hc2soaGRtaSwgR1JMX0FPVVRfQk5VTV9TRUwsCisJ
CSAgICAgIGVuYWJsZSA/IEhJR0hfQklUX1JBVEVfUEFDS0VUX0FMSUdOIDogMCwKKwkJICAgICAg
SElHSF9CSVRfUkFURV9QQUNLRVRfQUxJR04pOworCW10a19oZG1pX21hc2soaGRtaSwgR1JMX0FV
RElPX0NGRywgZW5hYmxlID8gSElHSF9CSVRfUkFURSA6IDAsCisJCSAgICAgIEhJR0hfQklUX1JB
VEUpOworfQorCit2b2lkIG10a19oZG1pX3BoeV9hdWRfZHN0X25vcm1hbF9kb3VibGVfZW5hYmxl
KHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwKKwkJCQkJICAgICAgIGJvb2wgZW5hYmxlKQoreworCW10
a19oZG1pX21hc2soaGRtaSwgR1JMX0FVRElPX0NGRywgZW5hYmxlID8gRFNUX05PUk1BTF9ET1VC
TEUgOiAwLAorCQkgICAgICBEU1RfTk9STUFMX0RPVUJMRSk7Cit9CisKK3ZvaWQgbXRrX2hkbWlf
aHdfYXVkX2RzdF9lbmFibGUoc3RydWN0IG10a19oZG1pICpoZG1pLCBib29sIGVuYWJsZSkKK3sK
KwltdGtfaGRtaV9tYXNrKGhkbWksIEdSTF9BVURJT19DRkcsIGVuYWJsZSA/IFNBQ0RfRFNUIDog
MCwgU0FDRF9EU1QpOworfQorCit2b2lkIG10a19oZG1pX2h3X2F1ZF9kc2RfZW5hYmxlKHN0cnVj
dCBtdGtfaGRtaSAqaGRtaSwgYm9vbCBlbmFibGUpCit7CisJbXRrX2hkbWlfbWFzayhoZG1pLCBH
UkxfQVVESU9fQ0ZHLCBlbmFibGUgPyBTQUNEX1NFTCA6IDAsIFNBQ0RfU0VMKTsKK30KKwordm9p
ZCBtdGtfaGRtaV9od19hdWRfc2V0X2kyc19jaGFuX251bShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWks
CisJCQkJICAgICAgZW51bSBoZG1pX2F1ZF9jaGFubmVsX3R5cGUgY2hhbm5lbF90eXBlLAorCQkJ
CSAgICAgIHU4IGNoYW5uZWxfY291bnQpCit7CisJdTggdmFsXzEsIHZhbF8yLCB2YWxfMywgdmFs
XzQ7CisKKwlpZiAoY2hhbm5lbF9jb3VudCA9PSAyKSB7CisJCXZhbF8xID0gMHgwNDsKKwkJdmFs
XzIgPSAweDUwOworCX0gZWxzZSBpZiAoY2hhbm5lbF9jb3VudCA9PSAzIHx8IGNoYW5uZWxfY291
bnQgPT0gNCkgeworCQlpZiAoY2hhbm5lbF9jb3VudCA9PSA0ICYmCisJCSAgICAoY2hhbm5lbF90
eXBlID09IEhETUlfQVVEX0NIQU5fVFlQRV8zXzBfTFJTIHx8CisJCSAgICBjaGFubmVsX3R5cGUg
PT0gSERNSV9BVURfQ0hBTl9UWVBFXzRfMCkpIHsKKwkJCXZhbF8xID0gMHgxNDsKKwkJfSBlbHNl
IHsKKwkJCXZhbF8xID0gMHgwYzsKKwkJfQorCQl2YWxfMiA9IDB4NTA7CisJfSBlbHNlIGlmIChj
aGFubmVsX2NvdW50ID09IDYgfHwgY2hhbm5lbF9jb3VudCA9PSA1KSB7CisJCWlmIChjaGFubmVs
X2NvdW50ID09IDYgJiYKKwkJICAgIGNoYW5uZWxfdHlwZSAhPSBIRE1JX0FVRF9DSEFOX1RZUEVf
NV8xICYmCisJCSAgICBjaGFubmVsX3R5cGUgIT0gSERNSV9BVURfQ0hBTl9UWVBFXzRfMV9DTFJT
KSB7CisJCQl2YWxfMSA9IDB4M2M7CisJCQl2YWxfMiA9IDB4NTA7CisJCX0gZWxzZSB7CisJCQl2
YWxfMSA9IDB4MWM7CisJCQl2YWxfMiA9IDB4NTA7CisJCX0KKwl9IGVsc2UgaWYgKGNoYW5uZWxf
Y291bnQgPT0gOCB8fCBjaGFubmVsX2NvdW50ID09IDcpIHsKKwkJdmFsXzEgPSAweDNjOworCQl2
YWxfMiA9IDB4NTA7CisJfSBlbHNlIHsKKwkJdmFsXzEgPSAweDA0OworCQl2YWxfMiA9IDB4NTA7
CisJfQorCisJdmFsXzMgPSAweGM2OworCXZhbF80ID0gMHhmYTsKKworCW10a19oZG1pX3dyaXRl
KGhkbWksIEdSTF9DSF9TVzAsIHZhbF8yKTsKKwltdGtfaGRtaV93cml0ZShoZG1pLCBHUkxfQ0hf
U1cxLCB2YWxfMyk7CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX0NIX1NXMiwgdmFsXzQpOwor
CW10a19oZG1pX3dyaXRlKGhkbWksIEdSTF9JMlNfVVYsIHZhbF8xKTsKK30KKwordm9pZCBtdGtf
aGRtaV9od19hdWRfc2V0X2lucHV0X3R5cGUoc3RydWN0IG10a19oZG1pICpoZG1pLAorCQkJCSAg
ICBlbnVtIGhkbWlfYXVkX2lucHV0X3R5cGUgaW5wdXRfdHlwZSkKK3sKKwl1MzIgdmFsID0gMDsK
KworCXZhbCA9IG10a19oZG1pX3JlYWQoaGRtaSwgR1JMX0NGRzEpOworCWlmIChpbnB1dF90eXBl
ID09IEhETUlfQVVEX0lOUFVUX0kyUyAmJgorCSAgICAodmFsICYgQ0ZHMV9TUERJRikgPT0gQ0ZH
MV9TUERJRikgeworCQl2YWwgJj0gfkNGRzFfU1BESUY7CisJfSBlbHNlIGlmIChpbnB1dF90eXBl
ID09IEhETUlfQVVEX0lOUFVUX1NQRElGICYmCisJCSh2YWwgJiBDRkcxX1NQRElGKSA9PSAwKSB7
CisJCXZhbCB8PSBDRkcxX1NQRElGOworCX0KKwltdGtfaGRtaV93cml0ZShoZG1pLCBHUkxfQ0ZH
MSwgdmFsKTsKK30KKwordm9pZCBtdGtfaGRtaV9od19hdWRfc2V0X2NoYW5uZWxfc3RhdHVzKHN0
cnVjdCBtdGtfaGRtaSAqaGRtaSwKKwkJCQkJdTggKmxfY2hhbl9zdGF0dXMsIHU4ICpyX2NoYW5f
c3RhdHVzLAorCQkJCQllbnVtIGhkbWlfYXVkaW9fc2FtcGxlX2ZyZXF1ZW5jeQorCQkJCQlhdWRf
aGRtaV9mcykKK3sKKwl1OCBsX3N0YXR1c1s1XTsKKwl1OCByX3N0YXR1c1s1XTsKKwl1OCB2YWwg
PSAwOworCisJbF9zdGF0dXNbMF0gPSBsX2NoYW5fc3RhdHVzWzBdOworCWxfc3RhdHVzWzFdID0g
bF9jaGFuX3N0YXR1c1sxXTsKKwlsX3N0YXR1c1syXSA9IGxfY2hhbl9zdGF0dXNbMl07CisJcl9z
dGF0dXNbMF0gPSByX2NoYW5fc3RhdHVzWzBdOworCXJfc3RhdHVzWzFdID0gcl9jaGFuX3N0YXR1
c1sxXTsKKwlyX3N0YXR1c1syXSA9IHJfY2hhbl9zdGF0dXNbMl07CisKKwlsX3N0YXR1c1swXSAm
PSB+MHgwMjsKKwlyX3N0YXR1c1swXSAmPSB+MHgwMjsKKworCXZhbCA9IGxfY2hhbl9zdGF0dXNb
M10gJiAweGYwOworCXN3aXRjaCAoYXVkX2hkbWlfZnMpIHsKKwljYXNlIEhETUlfQVVESU9fU0FN
UExFX0ZSRVFVRU5DWV8zMjAwMDoKKwkJdmFsIHw9IDB4MDM7CisJCWJyZWFrOworCWNhc2UgSERN
SV9BVURJT19TQU1QTEVfRlJFUVVFTkNZXzQ0MTAwOgorCQlicmVhazsKKwljYXNlIEhETUlfQVVE
SU9fU0FNUExFX0ZSRVFVRU5DWV84ODIwMDoKKwkJdmFsIHw9IDB4MDg7CisJCWJyZWFrOworCWNh
c2UgSERNSV9BVURJT19TQU1QTEVfRlJFUVVFTkNZXzk2MDAwOgorCQl2YWwgfD0gMHgwYTsKKwkJ
YnJlYWs7CisJY2FzZSBIRE1JX0FVRElPX1NBTVBMRV9GUkVRVUVOQ1lfNDgwMDA6CisJCXZhbCB8
PSAweDAyOworCQlicmVhazsKKwlkZWZhdWx0OgorCQl2YWwgfD0gMHgwMjsKKwkJYnJlYWs7CisJ
fQorCWxfc3RhdHVzWzNdID0gdmFsOworCXJfc3RhdHVzWzNdID0gdmFsOworCisJdmFsID0gbF9j
aGFuX3N0YXR1c1s0XTsKKwl2YWwgfD0gKCh+KGxfc3RhdHVzWzNdICYgMHgwZikpIDw8IDQpOwor
CWxfc3RhdHVzWzRdID0gdmFsOworCXJfc3RhdHVzWzRdID0gdmFsOworCisJdmFsID0gbF9zdGF0
dXNbMF07CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX0kyU19DX1NUQTAsIHZhbCk7CisJbXRr
X2hkbWlfd3JpdGUoaGRtaSwgR1JMX0xfU1RBVFVTXzAsIHZhbCk7CisKKwl2YWwgPSByX3N0YXR1
c1swXTsKKwltdGtfaGRtaV93cml0ZShoZG1pLCBHUkxfUl9TVEFUVVNfMCwgdmFsKTsKKworCXZh
bCA9IGxfc3RhdHVzWzFdOworCW10a19oZG1pX3dyaXRlKGhkbWksIEdSTF9JMlNfQ19TVEExLCB2
YWwpOworCW10a19oZG1pX3dyaXRlKGhkbWksIEdSTF9MX1NUQVRVU18xLCB2YWwpOworCisJdmFs
ID0gcl9zdGF0dXNbMV07CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX1JfU1RBVFVTXzEsIHZh
bCk7CisKKwl2YWwgPSBsX3N0YXR1c1syXTsKKwltdGtfaGRtaV93cml0ZShoZG1pLCBHUkxfSTJT
X0NfU1RBMiwgdmFsKTsKKwltdGtfaGRtaV93cml0ZShoZG1pLCBHUkxfTF9TVEFUVVNfMiwgdmFs
KTsKKworCXZhbCA9IHJfc3RhdHVzWzJdOworCW10a19oZG1pX3dyaXRlKGhkbWksIEdSTF9SX1NU
QVRVU18yLCB2YWwpOworCisJdmFsID0gbF9zdGF0dXNbM107CisJbXRrX2hkbWlfd3JpdGUoaGRt
aSwgR1JMX0kyU19DX1NUQTMsIHZhbCk7CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX0xfU1RB
VFVTXzMsIHZhbCk7CisKKwl2YWwgPSByX3N0YXR1c1szXTsKKwltdGtfaGRtaV93cml0ZShoZG1p
LCBHUkxfUl9TVEFUVVNfMywgdmFsKTsKKworCXZhbCA9IGxfc3RhdHVzWzRdOworCW10a19oZG1p
X3dyaXRlKGhkbWksIEdSTF9JMlNfQ19TVEE0LCB2YWwpOworCW10a19oZG1pX3dyaXRlKGhkbWks
IEdSTF9MX1NUQVRVU180LCB2YWwpOworCisJdmFsID0gcl9zdGF0dXNbNF07CisJbXRrX2hkbWlf
d3JpdGUoaGRtaSwgR1JMX1JfU1RBVFVTXzQsIHZhbCk7CisKKwlmb3IgKHZhbCA9IDA7IHZhbCA8
IDE5OyB2YWwrKykgeworCQltdGtfaGRtaV93cml0ZShoZG1pLCBHUkxfTF9TVEFUVVNfNSArIHZh
bCAqIDQsIDApOworCQltdGtfaGRtaV93cml0ZShoZG1pLCBHUkxfUl9TVEFUVVNfNSArIHZhbCAq
IDQsIDApOworCX0KK30KKwordm9pZCBtdGtfaGRtaV9od19hdWRfc3JjX3JlZW5hYmxlKHN0cnVj
dCBtdGtfaGRtaSAqaGRtaSkKK3sKKwl1MzIgdmFsOworCisJdmFsID0gbXRrX2hkbWlfcmVhZCho
ZG1pLCBHUkxfTUlYX0NUUkwpOworCWlmICh2YWwgJiBNSVhfQ1RSTF9TUkNfRU4pIHsKKwkJdmFs
ICY9IH5NSVhfQ1RSTF9TUkNfRU47CisJCW10a19oZG1pX3dyaXRlKGhkbWksIEdSTF9NSVhfQ1RS
TCwgdmFsKTsKKwkJdXNsZWVwX3JhbmdlKDI1NSwgNTEyKTsKKwkJdmFsIHw9IE1JWF9DVFJMX1NS
Q19FTjsKKwkJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX01JWF9DVFJMLCB2YWwpOworCX0KK30K
Kwordm9pZCBtdGtfaGRtaV9od19hdWRfc3JjX29mZihzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkpCit7
CisJdTMyIHZhbDsKKworCXZhbCA9IG10a19oZG1pX3JlYWQoaGRtaSwgR1JMX01JWF9DVFJMKTsK
Kwl2YWwgJj0gfk1JWF9DVFJMX1NSQ19FTjsKKwltdGtfaGRtaV93cml0ZShoZG1pLCBHUkxfTUlY
X0NUUkwsIHZhbCk7CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX1NISUZUX0wxLCAweDAwKTsK
K30KKwordm9pZCBtdGtfaGRtaV9od19hdWRfc2V0X21jbGsoc3RydWN0IG10a19oZG1pICpoZG1p
LCBlbnVtIGhkbWlfYXVkX21jbGsgbWNsaykKK3sKKwl1MzIgdmFsOworCisJdmFsID0gbXRrX2hk
bWlfcmVhZChoZG1pLCBHUkxfQ0ZHNSk7CisJdmFsICY9IENGRzVfQ0RfUkFUSU9fTUFTSzsKKwor
CXN3aXRjaCAobWNsaykgeworCWNhc2UgSERNSV9BVURfTUNMS18xMjhGUzoKKwkJdmFsIHw9IENG
RzVfRlMxMjg7CisJCWJyZWFrOworCWNhc2UgSERNSV9BVURfTUNMS18yNTZGUzoKKwkJdmFsIHw9
IENGRzVfRlMyNTY7CisJCWJyZWFrOworCWNhc2UgSERNSV9BVURfTUNMS18zODRGUzoKKwkJdmFs
IHw9IENGRzVfRlMzODQ7CisJCWJyZWFrOworCWNhc2UgSERNSV9BVURfTUNMS181MTJGUzoKKwkJ
dmFsIHw9IENGRzVfRlM1MTI7CisJCWJyZWFrOworCWNhc2UgSERNSV9BVURfTUNMS183NjhGUzoK
KwkJdmFsIHw9IENGRzVfRlM3Njg7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXZhbCB8PSBDRkc1
X0ZTMjU2OworCQlicmVhazsKKwl9CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX0NGRzUsIHZh
bCk7Cit9CisKK3ZvaWQgbXRrX2hkbWlfaHdfYXVkX2FjbGtfaW52X2VuYWJsZShzdHJ1Y3QgbXRr
X2hkbWkgKmhkbWksIGJvb2wgZW5hYmxlKQoreworCXUzMiB2YWw7CisKKwl2YWwgPSBtdGtfaGRt
aV9yZWFkKGhkbWksIEdSTF9DRkcyKTsKKwlpZiAoZW5hYmxlKQorCQl2YWwgfD0gMHg4MDsKKwll
bHNlCisJCXZhbCAmPSB+MHg4MDsKKwltdGtfaGRtaV93cml0ZShoZG1pLCBHUkxfQ0ZHMiwgdmFs
KTsKK30KKworc3RhdGljIHZvaWQgZG9faGRtaV9od19hdWRfc2V0X25jdHMoc3RydWN0IG10a19o
ZG1pICpoZG1pLAorCQkJCSAgICBlbnVtIGhkbWlfZGlzcGxheV9jb2xvcl9kZXB0aCBkZXB0aCwK
KwkJCQkgICAgZW51bSBoZG1pX2F1ZGlvX3NhbXBsZV9mcmVxdWVuY3kgZnJlcSwKKwkJCQkgICAg
aW50IHBpeCkKK3sKKwl1bnNpZ25lZCBjaGFyIHZhbFtOQ1RTX0JZVEVTXTsKKwl1bnNpZ25lZCBp
bnQgdGVtcDsKKwlpbnQgaSA9IDA7CisKKwltdGtfaGRtaV93cml0ZShoZG1pLCBHUkxfTkNUUywg
MCk7CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX05DVFMsIDApOworCW10a19oZG1pX3dyaXRl
KGhkbWksIEdSTF9OQ1RTLCAwKTsKKwltZW1zZXQodmFsLCAwLCBzaXplb2YodmFsKSk7CisKKwlp
ZiAoZGVwdGggPT0gSERNSV9ERUVQX0NPTE9SXzI0QklUUykgeworCQlmb3IgKGkgPSAwOyBpIDwg
TkNUU19CWVRFUzsgaSsrKSB7CisJCQlpZiAoKGZyZXEgPCA4KSAmJiAocGl4IDwgOSkpCisJCQkJ
dmFsW2ldID0gSERNSV9OQ1RTW2ZyZXEgLSAxXVtwaXhdW2ldOworCQl9CisJCXRlbXAgPSAodmFs
WzBdIDw8IDI0KSB8ICh2YWxbMV0gPDwgMTYpIHwKKwkJCSh2YWxbMl0gPDwgOCkgfCAodmFsWzNd
KTsJLyogQ1RTICovCisJfSBlbHNlIHsKKwkJZm9yIChpID0gMDsgaSA8IE5DVFNfQllURVM7IGkr
KykgeworCQkJaWYgKChmcmVxIDwgNykgJiYgKHBpeCA8IDkpKQorCQkJCXZhbFtpXSA9IEhETUlf
TkNUU1tmcmVxIC0gMV1bcGl4XVtpXTsKKwkJfQorCisJCXRlbXAgPQorCQkgICAgKHZhbFswXSA8
PCAyNCkgfCAodmFsWzFdIDw8IDE2KSB8ICh2YWxbMl0gPDwgOCkgfCAodmFsWzNdKTsKKworCQlp
ZiAoZGVwdGggPT0gSERNSV9ERUVQX0NPTE9SXzMwQklUUykKKwkJCXRlbXAgPSAodGVtcCA+PiAy
KSAqIDU7CisJCWVsc2UgaWYgKGRlcHRoID09IEhETUlfREVFUF9DT0xPUl8zNkJJVFMpCisJCQl0
ZW1wID0gKHRlbXAgPj4gMSkgKiAzOworCQllbHNlIGlmIChkZXB0aCA9PSBIRE1JX0RFRVBfQ09M
T1JfNDhCSVRTKQorCQkJdGVtcCA9ICh0ZW1wIDw8IDEpOworCisJCXZhbFswXSA9ICh0ZW1wID4+
IDI0KSAmIDB4ZmY7CisJCXZhbFsxXSA9ICh0ZW1wID4+IDE2KSAmIDB4ZmY7CisJCXZhbFsyXSA9
ICh0ZW1wID4+IDgpICYgMHhmZjsKKwkJdmFsWzNdID0gKHRlbXApICYgMHhmZjsKKwl9CisKKwlm
b3IgKGkgPSAwOyBpIDwgTkNUU19CWVRFUzsgaSsrKQorCQltdGtfaGRtaV93cml0ZShoZG1pLCBH
UkxfTkNUUywgdmFsW2ldKTsKK30KKwordm9pZCBtdGtfaGRtaV9od19hdWRfc2V0X25jdHMoc3Ry
dWN0IG10a19oZG1pICpoZG1pLAorCQkJICAgICAgZW51bSBoZG1pX2Rpc3BsYXlfY29sb3JfZGVw
dGggZGVwdGgsCisJCQkgICAgICBlbnVtIGhkbWlfYXVkaW9fc2FtcGxlX2ZyZXF1ZW5jeSBmcmVx
LCBpbnQgY2xvY2spCit7CisJaW50IHBpeCA9IDA7CisKKwlzd2l0Y2ggKGNsb2NrKSB7CisJY2Fz
ZSAyNzAwMDoKKwkJcGl4ID0gMDsKKwkJYnJlYWs7CisJY2FzZSA3NDE3NToKKwkJcGl4ID0gMjsK
KwkJYnJlYWs7CisJY2FzZSA3NDI1MDoKKwkJcGl4ID0gMzsKKwkJYnJlYWs7CisJY2FzZSAxNDgz
NTA6CisJCXBpeCA9IDQ7CisJCWJyZWFrOworCWNhc2UgMTQ4NTAwOgorCQlwaXggPSA1OworCQli
cmVhazsKKwlkZWZhdWx0OgorCQlwaXggPSAwOworCQlicmVhazsKKwl9CisKKwltdGtfaGRtaV9t
YXNrKGhkbWksIERVTU1ZXzMwNCwgQVVESU9fSTJTX05DVFNfU0VMXzY0LAorCQkgICAgICBBVURJ
T19JMlNfTkNUU19TRUwpOworCWRvX2hkbWlfaHdfYXVkX3NldF9uY3RzKGhkbWksIGRlcHRoLCBm
cmVxLCBwaXgpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19o
ZG1pX2h3LmggYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2hkbWlfaHcuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wY2VkODBhCi0tLSAvZGV2L251bGwKKysrIGIv
ZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19oZG1pX2h3LmgKQEAgLTAsMCArMSw3NiBAQAor
LyoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBNZWRpYVRlayBJbmMuCisgKiBBdXRob3I6IEppZSBR
aXUgPGppZS5xaXVAbWVkaWF0ZWsuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBh
cworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICog
VGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2lmbmRlZiBfTVRLX0hETUlfSFdfSAorI2RlZmluZSBf
TVRLX0hETUlfSFdfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51
eC9oZG1pLmg+CisjaW5jbHVkZSAibXRrX2hkbWkuaCIKKwordm9pZCBtdGtfaGRtaV9od192aWRf
YmxhY2soc3RydWN0IG10a19oZG1pICpoZG1pLCBib29sIGJsYWNrKTsKK3ZvaWQgbXRrX2hkbWlf
aHdfYXVkX211dGUoc3RydWN0IG10a19oZG1pICpoZG1pLCBib29sIG11dGUpOwordm9pZCBtdGtf
aGRtaV9od19zZW5kX2luZm9fZnJhbWUoc3RydWN0IG10a19oZG1pICpoZG1pLCB1OCAqYnVmZmVy
LCB1OCBsZW4pOwordm9pZCBtdGtfaGRtaV9od19zZW5kX2F1ZF9wYWNrZXQoc3RydWN0IG10a19o
ZG1pICpoZG1pLCBib29sIGVuYWJsZSk7CitpbnQgbXRrX2hkbWlfaHdfc2V0X2Nsb2NrKHN0cnVj
dCBtdGtfaGRtaSAqaGN0eCwgdTMyIGNsb2NrKTsKK3ZvaWQgbXRrX2hkbWlfaHdfY29uZmlnX3N5
cyhzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkpOwordm9pZCBtdGtfaGRtaV9od19zZXRfZGVlcF9jb2xv
cl9tb2RlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwKKwkJCQkgICAgIGVudW0gaGRtaV9kaXNwbGF5
X2NvbG9yX2RlcHRoIGRlcHRoKTsKK3ZvaWQgbXRrX2hkbWlfaHdfc2VuZF9hdl9tdXRlKHN0cnVj
dCBtdGtfaGRtaSAqaGRtaSk7Cit2b2lkIG10a19oZG1pX2h3X3NlbmRfYXZfdW5tdXRlKHN0cnVj
dCBtdGtfaGRtaSAqaGRtaSk7Cit2b2lkIG10a19oZG1pX2h3X25jdHNfZW5hYmxlKHN0cnVjdCBt
dGtfaGRtaSAqaGRtaSwgYm9vbCBvbik7Cit2b2lkIG10a19oZG1pX2h3X2F1ZF9zZXRfY2hhbm5l
bF9zd2FwKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwKKwkJCQkgICAgICBlbnVtIGhkbWlfYXVkX2No
YW5uZWxfc3dhcF90eXBlIHN3YXApOwordm9pZCBtdGtfaGRtaV9od19hdWRfcmF3X2RhdGFfZW5h
YmxlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwgYm9vbCBlbmFibGUpOwordm9pZCBtdGtfaGRtaV9o
d19hdWRfc2V0X2JpdF9udW0oc3RydWN0IG10a19oZG1pICpoZG1pLAorCQkJCSBlbnVtIGhkbWlf
YXVkaW9fc2FtcGxlX3NpemUgYml0X251bSk7Cit2b2lkIG10a19oZG1pX2h3X2F1ZF9zZXRfaGln
aF9iaXRyYXRlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwgYm9vbCBlbmFibGUpOwordm9pZCBtdGtf
aGRtaV9waHlfYXVkX2RzdF9ub3JtYWxfZG91YmxlX2VuYWJsZShzdHJ1Y3QgbXRrX2hkbWkgKmhk
bWksCisJCQkJCSAgICAgICBib29sIGVuYWJsZSk7Cit2b2lkIG10a19oZG1pX2h3X2F1ZF9kc3Rf
ZW5hYmxlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwgYm9vbCBlbmFibGUpOwordm9pZCBtdGtfaGRt
aV9od19hdWRfZHNkX2VuYWJsZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksIGJvb2wgZW5hYmxlKTsK
K3ZvaWQgbXRrX2hkbWlfaHdfYXVkX3NldF9pMnNfZm10KHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwK
KwkJCQkgZW51bSBoZG1pX2F1ZF9pMnNfZm10IGkyc19mbXQpOwordm9pZCBtdGtfaGRtaV9od19h
dWRfc2V0X2kyc19jaGFuX251bShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksCisJCQkJICAgICAgZW51
bSBoZG1pX2F1ZF9jaGFubmVsX3R5cGUgY2hhbm5lbF90eXBlLAorCQkJCSAgICAgIHU4IGNoYW5u
ZWxfY291bnQpOwordm9pZCBtdGtfaGRtaV9od19hdWRfc2V0X2lucHV0X3R5cGUoc3RydWN0IG10
a19oZG1pICpoZG1pLAorCQkJCSAgICBlbnVtIGhkbWlfYXVkX2lucHV0X3R5cGUgaW5wdXRfdHlw
ZSk7Cit2b2lkIG10a19oZG1pX2h3X2F1ZF9zZXRfY2hhbm5lbF9zdGF0dXMoc3RydWN0IG10a19o
ZG1pICpoZG1pLAorCQkJCQl1OCAqbF9jaGFuX3N0YXR1cywgdTggKnJfY2hhbl9zdGF1cywKKwkJ
CQkJZW51bSBoZG1pX2F1ZGlvX3NhbXBsZV9mcmVxdWVuY3kKKwkJCQkJYXVkX2hkbWlfZnMpOwor
dm9pZCBtdGtfaGRtaV9od19hdWRfc3JjX2VuYWJsZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksIGJv
b2wgZW5hYmxlKTsKK3ZvaWQgbXRrX2hkbWlfaHdfYXVkX3NldF9tY2xrKHN0cnVjdCBtdGtfaGRt
aSAqaGRtaSwgZW51bSBoZG1pX2F1ZF9tY2xrIG1jbGspOwordm9pZCBtdGtfaGRtaV9od19hdWRf
c3JjX29mZihzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkpOwordm9pZCBtdGtfaGRtaV9od19hdWRfc3Jj
X3JlZW5hYmxlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSk7Cit2b2lkIG10a19oZG1pX2h3X2F1ZF9h
Y2xrX2ludl9lbmFibGUoc3RydWN0IG10a19oZG1pICpoZG1pLCBib29sIGVuYWJsZSk7Cit2b2lk
IG10a19oZG1pX2h3X2F1ZF9zZXRfbmN0cyhzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksCisJCQkgICAg
ICBlbnVtIGhkbWlfZGlzcGxheV9jb2xvcl9kZXB0aCBkZXB0aCwKKwkJCSAgICAgIGVudW0gaGRt
aV9hdWRpb19zYW1wbGVfZnJlcXVlbmN5IGZyZXEsCisJCQkgICAgICBpbnQgY2xvY2spOworYm9v
bCBtdGtfaGRtaV9od19pc19ocGRfaGlnaChzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkpOwordm9pZCBt
dGtfaGRtaV9od19tYWtlX3JlZ193cml0YWJsZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksIGJvb2wg
ZW5hYmxlKTsKK3ZvaWQgbXRrX2hkbWlfaHdfcmVzZXQoc3RydWN0IG10a19oZG1pICpoZG1pKTsK
K3ZvaWQgbXRrX2hkbWlfaHdfZW5hYmxlX25vdGljZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksIGJv
b2wgZW5hYmxlX25vdGljZSk7Cit2b2lkIG10a19oZG1pX2h3X3dyaXRlX2ludF9tYXNrKHN0cnVj
dCBtdGtfaGRtaSAqaGRtaSwgdTMyIGludF9tYXNrKTsKK3ZvaWQgbXRrX2hkbWlfaHdfZW5hYmxl
X2R2aV9tb2RlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwgYm9vbCBlbmFibGUpOwordm9pZCBtdGtf
aGRtaV9od19uY3RzX2F1dG9fd3JpdGVfZW5hYmxlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwgYm9v
bCBlbmFibGUpOwordm9pZCBtdGtfaGRtaV9od19tc2ljX3NldHRpbmcoc3RydWN0IG10a19oZG1p
ICpoZG1pLAorCQkJICAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpOwordm9pZCBt
dGtfaGRtaV9od18xcDRfdmVyc2lvbl9lbmFibGUoc3RydWN0IG10a19oZG1pICpoZG1pLCBib29s
IGVuYWJsZSk7Cit2b2lkIG10a19oZG1pX2h3X2h0cGxnX2lycV9lbmFibGUoc3RydWN0IG10a19o
ZG1pICpoZG1pKTsKK3ZvaWQgbXRrX2hkbWlfaHdfaHRwbGdfaXJxX2Rpc2FibGUoc3RydWN0IG10
a19oZG1pICpoZG1pKTsKK3ZvaWQgbXRrX2hkbWlfaHdfY2xlYXJfaHRwbGdfaXJxKHN0cnVjdCBt
dGtfaGRtaSAqaGRtaSk7CisKKyNlbmRpZiAvKiBfTVRLX0hETUlfSFdfSCAqLwpkaWZmIC0tZ2l0
IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19oZG1pX3BoeS5jIGIvZHJpdmVycy9ncHUv
ZHJtL21lZGlhdGVrL210a19oZG1pX3BoeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjczYWM5YmUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0
ZWsvbXRrX2hkbWlfcGh5LmMKQEAgLTAsMCArMSwzNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMp
IDIwMTQgTWVkaWFUZWsgSW5jLgorICogQXV0aG9yOiBKaWUgUWl1IDxqaWUucWl1QG1lZGlhdGVr
LmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
Ki8KKworI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Cisj
aW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvc3lzY29uLmg+CisjaW5j
bHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGh5L3BoeS5oPgorI2luY2x1
ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Cisj
aW5jbHVkZSAibXRrX2hkbWkuaCIKKyNpbmNsdWRlICJtdGtfaGRtaV9waHlfcmVncy5oIgorCitz
dHJ1Y3QgbXRrX2hkbWlfcGh5IHsKKwl2b2lkIF9faW9tZW0gKnJlZ3M7CisJc3RydWN0IGNsayAq
cGxsX3JlZl9jbGs7CisJdTggZHJ2X2ltcF9jbGs7CisJdTggZHJ2X2ltcF9kMjsKKwl1OCBkcnZf
aW1wX2QxOworCXU4IGRydl9pbXBfZDA7CisJdTMyIGliaWFzOworCXUzMiBpYmlhc191cDsKK307
CisKK3N0YXRpYyBjb25zdCB1OCBQUkVESVZbM11bNF0gPSB7CisJezB4MCwgMHgwLCAweDAsIDB4
MH0sCS8qIDI3TWh6ICovCisJezB4MSwgMHgxLCAweDEsIDB4MX0sCS8qIDc0TWh6ICovCisJezB4
MSwgMHgxLCAweDEsIDB4MX0JLyogMTQ4TWh6ICovCit9OworCitzdGF0aWMgY29uc3QgdTggVFhE
SVZbM11bNF0gPSB7CisJezB4MywgMHgzLCAweDMsIDB4Mn0sCS8qIDI3TWh6ICovCisJezB4Miwg
MHgxLCAweDEsIDB4MX0sCS8qIDc0TWh6ICovCisJezB4MSwgMHgwLCAweDAsIDB4MH0JLyogMTQ4
TWh6ICovCit9OworCitzdGF0aWMgY29uc3QgdTggRkJLU0VMWzNdWzRdID0geworCXsweDEsIDB4
MSwgMHgxLCAweDF9LAkvKiAyN01oeiAqLworCXsweDEsIDB4MCwgMHgxLCAweDF9LAkvKiA3NE1o
eiAqLworCXsweDEsIDB4MCwgMHgxLCAweDF9CS8qIDE0OE1oeiAqLworfTsKKworc3RhdGljIGNv
bnN0IHU4IEZCS0RJVlszXVs0XSA9IHsKKwl7MTksIDI0LCAyOSwgMTl9LAkvKiAyN01oeiAqLwor
CXsxOSwgMjQsIDE0LCAxOX0sCS8qIDc0TWh6ICovCisJezE5LCAyNCwgMTQsIDE5fQkvKiAxNDhN
aHogKi8KK307CisKK3N0YXRpYyBjb25zdCB1OCBESVZFTlszXVs0XSA9IHsKKwl7MHgyLCAweDEs
IDB4MSwgMHgyfSwJLyogMjdNaHogKi8KKwl7MHgyLCAweDIsIDB4MiwgMHgyfSwJLyogNzRNaHog
Ki8KKwl7MHgyLCAweDIsIDB4MiwgMHgyfQkvKiAxNDhNaHogKi8KK307CisKK3N0YXRpYyBjb25z
dCB1OCBIVFBMTEJQWzNdWzRdID0geworCXsweGMsIDB4YywgMHg4LCAweGN9LAkvKiAyN01oeiAq
LworCXsweGMsIDB4ZiwgMHhmLCAweGN9LAkvKiA3NE1oeiAqLworCXsweGMsIDB4ZiwgMHhmLCAw
eGN9CS8qIDE0OE1oeiAqLworfTsKKworc3RhdGljIGNvbnN0IHU4IEhUUExMQkNbM11bNF0gPSB7
CisJezB4MiwgMHgzLCAweDMsIDB4Mn0sCS8qIDI3TWh6ICovCisJezB4MiwgMHgzLCAweDMsIDB4
Mn0sCS8qIDc0TWh6ICovCisJezB4MiwgMHgzLCAweDMsIDB4Mn0JLyogMTQ4TWh6ICovCit9Owor
CitzdGF0aWMgY29uc3QgdTggSFRQTExCUlszXVs0XSA9IHsKKwl7MHgxLCAweDEsIDB4MCwgMHgx
fSwJLyogMjdNaHogKi8KKwl7MHgxLCAweDIsIDB4MiwgMHgxfSwJLyogNzRNaHogKi8KKwl7MHgx
LCAweDIsIDB4MiwgMHgxfQkvKiAxNDhNaHogKi8KK307CisKK3N0YXRpYyB2b2lkIG10a19oZG1p
X3BoeV9tYXNrKHN0cnVjdCBtdGtfaGRtaV9waHkgKmhkbWlfcGh5LCB1MzIgb2Zmc2V0LAorCQkJ
ICAgICAgdTMyIHZhbCwgdTMyIG1hc2spCit7CisJdTMyIHRtcCA9IHJlYWRsKGhkbWlfcGh5LT5y
ZWdzICArIG9mZnNldCkgJiB+bWFzazsKKworCXRtcCB8PSAodmFsICYgbWFzayk7CisJd3JpdGVs
KHRtcCwgaGRtaV9waHktPnJlZ3MgKyBvZmZzZXQpOworfQorCitzdGF0aWMgdm9pZCBtdGtfaGRt
aV9waHlfZW5hYmxlX3RtZHMoc3RydWN0IG10a19oZG1pX3BoeSAqaGRtaV9waHkpCit7CisJY2xr
X3ByZXBhcmVfZW5hYmxlKGhkbWlfcGh5LT5wbGxfcmVmX2Nsayk7CisJbXRrX2hkbWlfcGh5X21h
c2soaGRtaV9waHksIEhETUlfQ09OMSwgUkdfSERNSVRYX1BMTF9BVVRPS19FTiwKKwkJCSAgUkdf
SERNSVRYX1BMTF9BVVRPS19FTik7CisJbXRrX2hkbWlfcGh5X21hc2soaGRtaV9waHksIEhETUlf
Q09OMCwgUkdfSERNSVRYX1BMTF9QT1NESVYsCisJCQkgIFJHX0hETUlUWF9QTExfUE9TRElWKTsK
KwltdGtfaGRtaV9waHlfbWFzayhoZG1pX3BoeSwgSERNSV9DT04zLCAwLCBSR19IRE1JVFhfTUhM
Q0tfRU4pOworCW10a19oZG1pX3BoeV9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjEsIFJHX0hETUlU
WF9QTExfQklBU19FTiwKKwkJCSAgUkdfSERNSVRYX1BMTF9CSUFTX0VOKTsKKwl1c2xlZXBfcmFu
Z2UoMTAwLCAxNTApOworCW10a19oZG1pX3BoeV9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjAsIFJH
X0hETUlUWF9QTExfRU4sCisJCQkgIFJHX0hETUlUWF9QTExfRU4pOworCXVzbGVlcF9yYW5nZSgx
MDAsIDE1MCk7CisJbXRrX2hkbWlfcGh5X21hc2soaGRtaV9waHksIEhETUlfQ09OMSwgUkdfSERN
SVRYX1BMTF9CSUFTX0xQRl9FTiwKKwkJCSAgUkdfSERNSVRYX1BMTF9CSUFTX0xQRl9FTik7CisJ
bXRrX2hkbWlfcGh5X21hc2soaGRtaV9waHksIEhETUlfQ09OMSwgUkdfSERNSVRYX1BMTF9UWERJ
Vl9FTiwKKwkJCSAgUkdfSERNSVRYX1BMTF9UWERJVl9FTik7CisJbXRrX2hkbWlfcGh5X21hc2so
aGRtaV9waHksIEhETUlfQ09OMywgUkdfSERNSVRYX1NFUl9FTiwKKwkJCSAgUkdfSERNSVRYX1NF
Ul9FTik7CisJbXRrX2hkbWlfcGh5X21hc2soaGRtaV9waHksIEhETUlfQ09OMywgUkdfSERNSVRY
X1BSRF9FTiwKKwkJCSAgUkdfSERNSVRYX1BSRF9FTik7CisJbXRrX2hkbWlfcGh5X21hc2soaGRt
aV9waHksIEhETUlfQ09OMywgUkdfSERNSVRYX0RSVl9FTiwKKwkJCSAgUkdfSERNSVRYX0RSVl9F
Tik7CisJdXNsZWVwX3JhbmdlKDEwMCwgMTUwKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2hkbWlf
cGh5X2Rpc2FibGVfdG1kcyhzdHJ1Y3QgbXRrX2hkbWlfcGh5ICpoZG1pX3BoeSkKK3sKKwltdGtf
aGRtaV9waHlfbWFzayhoZG1pX3BoeSwgSERNSV9DT04zLCAwLCBSR19IRE1JVFhfRFJWX0VOKTsK
KwltdGtfaGRtaV9waHlfbWFzayhoZG1pX3BoeSwgSERNSV9DT04zLCAwLCBSR19IRE1JVFhfUFJE
X0VOKTsKKwltdGtfaGRtaV9waHlfbWFzayhoZG1pX3BoeSwgSERNSV9DT04zLCAwLCBSR19IRE1J
VFhfU0VSX0VOKTsKKwltdGtfaGRtaV9waHlfbWFzayhoZG1pX3BoeSwgSERNSV9DT04xLCAwLCBS
R19IRE1JVFhfUExMX1RYRElWX0VOKTsKKwltdGtfaGRtaV9waHlfbWFzayhoZG1pX3BoeSwgSERN
SV9DT04xLCAwLCBSR19IRE1JVFhfUExMX0JJQVNfTFBGX0VOKTsKKwl1c2xlZXBfcmFuZ2UoMTAw
LCAxNTApOworCW10a19oZG1pX3BoeV9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjAsIDAsIFJHX0hE
TUlUWF9QTExfRU4pOworCXVzbGVlcF9yYW5nZSgxMDAsIDE1MCk7CisJbXRrX2hkbWlfcGh5X21h
c2soaGRtaV9waHksIEhETUlfQ09OMSwgMCwgUkdfSERNSVRYX1BMTF9CSUFTX0VOKTsKKwltdGtf
aGRtaV9waHlfbWFzayhoZG1pX3BoeSwgSERNSV9DT04wLCAwLCBSR19IRE1JVFhfUExMX1BPU0RJ
Vik7CisJbXRrX2hkbWlfcGh5X21hc2soaGRtaV9waHksIEhETUlfQ09OMSwgMCwgUkdfSERNSVRY
X1BMTF9BVVRPS19FTik7CisJdXNsZWVwX3JhbmdlKDEwMCwgMTUwKTsKKwljbGtfZGlzYWJsZV91
bnByZXBhcmUoaGRtaV9waHktPnBsbF9yZWZfY2xrKTsKK30KKwordm9pZCBtdGtfaGRtaV9waHlf
c2V0X3BsbChzdHJ1Y3QgcGh5ICpwaHksIHUzMiBjbG9jaywKKwkJCSAgZW51bSBoZG1pX2Rpc3Bs
YXlfY29sb3JfZGVwdGggZGVwdGgpCit7CisJc3RydWN0IG10a19oZG1pX3BoeSAqaGRtaV9waHkg
PSBwaHlfZ2V0X2RydmRhdGEocGh5KTsKKwl1bnNpZ25lZCBpbnQgaWJpYXM7CisJdW5zaWduZWQg
aW50IHBpeDsKKworCWlmIChjbG9jayA8PSA3NDAwMDAwMCkKKwkJY2xrX3NldF9yYXRlKGhkbWlf
cGh5LT5wbGxfcmVmX2NsaywgY2xvY2spOworCWVsc2UKKwkJY2xrX3NldF9yYXRlKGhkbWlfcGh5
LT5wbGxfcmVmX2NsaywgY2xvY2sgLyAyKTsKKworCWRldl9kYmcoJnBoeS0+ZGV2LCAiV2FudCBS
RUYgJXUgSHosIHBpeGVsIGNsb2NrICVsdSBIelxuIiwKKwkJY2xvY2ssIGNsa19nZXRfcmF0ZSho
ZG1pX3BoeS0+cGxsX3JlZl9jbGspKTsKKworCWlmIChjbG9jayA8PSAyNzAwMDAwMCkKKwkJcGl4
ID0gMDsKKwllbHNlIGlmIChjbG9jayA8PSA3NDAwMDAwMCkKKwkJcGl4ID0gMTsKKwllbHNlCisJ
CXBpeCA9IDI7CisKKwltdGtfaGRtaV9waHlfbWFzayhoZG1pX3BoeSwgSERNSV9DT04wLAorCQkJ
ICAoKFBSRURJVltwaXhdW2RlcHRoXSkgPDwgUFJFRElWX1NISUZUKSwKKwkJCSAgUkdfSERNSVRY
X1BMTF9QUkVESVYpOworCW10a19oZG1pX3BoeV9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjAsIFJH
X0hETUlUWF9QTExfUE9TRElWLAorCQkJICBSR19IRE1JVFhfUExMX1BPU0RJVik7CisJbXRrX2hk
bWlfcGh5X21hc2soaGRtaV9waHksIEhETUlfQ09OMCwKKwkJCSAgKDB4MSA8PCBQTExfSUNfU0hJ
RlQpIHwgKDB4MSA8PCBQTExfSVJfU0hJRlQpLAorCQkJICBSR19IRE1JVFhfUExMX0lDIHwgUkdf
SERNSVRYX1BMTF9JUik7CisJbXRrX2hkbWlfcGh5X21hc2soaGRtaV9waHksIEhETUlfQ09OMSwK
KwkJCSAgKChUWERJVltwaXhdW2RlcHRoXSkgPDwgUExMX1RYRElWX1NISUZUKSwKKwkJCSAgUkdf
SERNSVRYX1BMTF9UWERJVik7CisJbXRrX2hkbWlfcGh5X21hc2soaGRtaV9waHksIEhETUlfQ09O
MCwKKwkJCSAgKChGQktTRUxbcGl4XVtkZXB0aF0pIDw8IFBMTF9GQktTRUxfU0hJRlQpIHwKKwkJ
CSAgKChGQktESVZbcGl4XVtkZXB0aF0pIDw8IFBMTF9GQktESVZfU0hJRlQpLAorCQkJICBSR19I
RE1JVFhfUExMX0ZCS1NFTCB8IFJHX0hETUlUWF9QTExfRkJLRElWKTsKKwltdGtfaGRtaV9waHlf
bWFzayhoZG1pX3BoeSwgSERNSV9DT04xLAorCQkJICAoKERJVkVOW3BpeF1bZGVwdGhdKSA8PCBQ
TExfRElWRU5fU0hJRlQpLAorCQkJICBSR19IRE1JVFhfUExMX0RJVkVOKTsKKwltdGtfaGRtaV9w
aHlfbWFzayhoZG1pX3BoeSwgSERNSV9DT04wLAorCQkJICAoKEhUUExMQlBbcGl4XVtkZXB0aF0p
IDw8IFBMTF9CUF9TSElGVCkgfAorCQkJICAoKEhUUExMQkNbcGl4XVtkZXB0aF0pIDw8IFBMTF9C
Q19TSElGVCkgfAorCQkJICAoKEhUUExMQlJbcGl4XVtkZXB0aF0pIDw8IFBMTF9CUl9TSElGVCks
CisJCQkgIFJHX0hETUlUWF9QTExfQlAgfCBSR19IRE1JVFhfUExMX0JDIHwKKwkJCSAgUkdfSERN
SVRYX1BMTF9CUik7CisKKwlpZiAoKHBpeCA9PSAyKSAmJiAoZGVwdGggIT0gSERNSV9ERUVQX0NP
TE9SXzI0QklUUykpIHsKKwkJbXRrX2hkbWlfcGh5X21hc2soaGRtaV9waHksIEhETUlfQ09OMywg
UkdfSERNSVRYX1BSRF9JTVBfRU4sCisJCQkJICBSR19IRE1JVFhfUFJEX0lNUF9FTik7CisJCW10
a19oZG1pX3BoeV9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjQsCisJCQkJICAoMHg2IDw8IFBSRF9J
QklBU19DTEtfU0hJRlQpIHwKKwkJCQkgICgweDYgPDwgUFJEX0lCSUFTX0QyX1NISUZUKSB8CisJ
CQkJICAoMHg2IDw8IFBSRF9JQklBU19EMV9TSElGVCkgfAorCQkJCSAgKDB4NiA8PCBQUkRfSUJJ
QVNfRDBfU0hJRlQpLAorCQkJCSAgUkdfSERNSVRYX1BSRF9JQklBU19DTEsgfAorCQkJCSAgUkdf
SERNSVRYX1BSRF9JQklBU19EMiB8CisJCQkJICBSR19IRE1JVFhfUFJEX0lCSUFTX0QxIHwKKwkJ
CQkgIFJHX0hETUlUWF9QUkRfSUJJQVNfRDApOworCQltdGtfaGRtaV9waHlfbWFzayhoZG1pX3Bo
eSwgSERNSV9DT04zLAorCQkJCSAgMHhmIDw8IERSVl9JTVBfRU5fU0hJRlQsCisJCQkJICBSR19I
RE1JVFhfRFJWX0lNUF9FTik7CisJCWliaWFzID0gaGRtaV9waHktPmliaWFzX3VwOworCX0gZWxz
ZSB7CisJCW10a19oZG1pX3BoeV9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjMsIDAsIFJHX0hETUlU
WF9QUkRfSU1QX0VOKTsKKwkJbXRrX2hkbWlfcGh5X21hc2soaGRtaV9waHksIEhETUlfQ09ONCwK
KwkJCQkgICgweDMgPDwgUFJEX0lCSUFTX0NMS19TSElGVCkgfAorCQkJCSAgKDB4MyA8PCBQUkRf
SUJJQVNfRDJfU0hJRlQpIHwKKwkJCQkgICgweDMgPDwgUFJEX0lCSUFTX0QxX1NISUZUKSB8CisJ
CQkJICAoMHgzIDw8IFBSRF9JQklBU19EMF9TSElGVCksCisJCQkJICBSR19IRE1JVFhfUFJEX0lC
SUFTX0NMSyB8CisJCQkJICBSR19IRE1JVFhfUFJEX0lCSUFTX0QyIHwKKwkJCQkgIFJHX0hETUlU
WF9QUkRfSUJJQVNfRDEgfAorCQkJCSAgUkdfSERNSVRYX1BSRF9JQklBU19EMCk7CisJCW10a19o
ZG1pX3BoeV9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjMsCisJCQkJICAoMHgwIDw8IERSVl9JTVBf
RU5fU0hJRlQpLAorCQkJCSAgUkdfSERNSVRYX0RSVl9JTVBfRU4pOworCQlpYmlhcyA9IGhkbWlf
cGh5LT5pYmlhczsKKwl9CisKKwltdGtfaGRtaV9waHlfbWFzayhoZG1pX3BoeSwgSERNSV9DT042
LAorCQkJICAoaGRtaV9waHktPmRydl9pbXBfY2xrIDw8IERSVl9JTVBfQ0xLX1NISUZUKSB8CisJ
CQkgIChoZG1pX3BoeS0+ZHJ2X2ltcF9kMiA8PCBEUlZfSU1QX0QyX1NISUZUKSB8CisJCQkgICho
ZG1pX3BoeS0+ZHJ2X2ltcF9kMSA8PCBEUlZfSU1QX0QxX1NISUZUKSB8CisJCQkgIChoZG1pX3Bo
eS0+ZHJ2X2ltcF9kMCA8PCBEUlZfSU1QX0QwX1NISUZUKSwKKwkJCSAgUkdfSERNSVRYX0RSVl9J
TVBfQ0xLIHwgUkdfSERNSVRYX0RSVl9JTVBfRDIgfAorCQkJICBSR19IRE1JVFhfRFJWX0lNUF9E
MSB8IFJHX0hETUlUWF9EUlZfSU1QX0QwKTsKKwltdGtfaGRtaV9waHlfbWFzayhoZG1pX3BoeSwg
SERNSV9DT041LAorCQkJICAoaWJpYXMgPDwgRFJWX0lCSUFTX0NMS19TSElGVCkgfAorCQkJICAo
aWJpYXMgPDwgRFJWX0lCSUFTX0QyX1NISUZUKSB8CisJCQkgIChpYmlhcyA8PCBEUlZfSUJJQVNf
RDFfU0hJRlQpIHwKKwkJCSAgKGliaWFzIDw8IERSVl9JQklBU19EMF9TSElGVCksCisJCQkgIFJH
X0hETUlUWF9EUlZfSUJJQVNfQ0xLIHwgUkdfSERNSVRYX0RSVl9JQklBU19EMiB8CisJCQkgIFJH
X0hETUlUWF9EUlZfSUJJQVNfRDEgfCBSR19IRE1JVFhfRFJWX0lCSUFTX0QwKTsKK30KKworc3Rh
dGljIGludCBtdGtfaGRtaV9waHlfcG93ZXJfb24oc3RydWN0IHBoeSAqcGh5KQoreworCXN0cnVj
dCBtdGtfaGRtaV9waHkgKmhkbWlfcGh5ID0gcGh5X2dldF9kcnZkYXRhKHBoeSk7CisKKwltdGtf
aGRtaV9waHlfZW5hYmxlX3RtZHMoaGRtaV9waHkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRp
YyBpbnQgbXRrX2hkbWlfcGh5X3Bvd2VyX29mZihzdHJ1Y3QgcGh5ICpwaHkpCit7CisJc3RydWN0
IG10a19oZG1pX3BoeSAqaGRtaV9waHkgPSBwaHlfZ2V0X2RydmRhdGEocGh5KTsKKworCW10a19o
ZG1pX3BoeV9kaXNhYmxlX3RtZHMoaGRtaV9waHkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRp
YyBzdHJ1Y3QgcGh5X29wcyBtdGtfaGRtaV9waHlfb3BzID0geworCS5wb3dlcl9vbiA9IG10a19o
ZG1pX3BoeV9wb3dlcl9vbiwKKwkucG93ZXJfb2ZmID0gbXRrX2hkbWlfcGh5X3Bvd2VyX29mZiwK
Kwkub3duZXIgPSBUSElTX01PRFVMRSwKK307CisKK3N0YXRpYyBpbnQgbXRrX2hkbWlfcGh5X3By
b2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2
ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgbXRrX2hkbWlfcGh5ICpoZG1pX3BoeTsKKwlzdHJ1Y3Qg
cmVzb3VyY2UgKm1lbTsKKwlzdHJ1Y3QgcGh5ICpwaHk7CisJc3RydWN0IHBoeV9wcm92aWRlciAq
cGh5X3Byb3ZpZGVyOworCWludCByZXQ7CisKKwloZG1pX3BoeSA9IGRldm1fa3phbGxvYyhkZXYs
IHNpemVvZigqaGRtaV9waHkpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWhkbWlfcGh5KQorCQlyZXR1
cm4gLUVOT01FTTsKKworCW1lbSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09V
UkNFX01FTSwgMCk7CisJaGRtaV9waHktPnJlZ3MgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2
LCBtZW0pOworCWlmIChJU19FUlIoaGRtaV9waHktPnJlZ3MpKSB7CisJCXJldCA9IFBUUl9FUlIo
aGRtaV9waHktPnJlZ3MpOworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBnZXQgbWVtb3J5IHJl
c291cmNlOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwloZG1pX3BoeS0+cGxs
X3JlZl9jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAicGxsX3JlZiIpOworCWlmIChJU19FUlIoaGRt
aV9waHktPnBsbF9yZWZfY2xrKSkgeworCQlyZXQgPSBQVFJfRVJSKGhkbWlfcGh5LT5wbGxfcmVm
X2Nsayk7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBnZXQgUExMIHJlZmVyZW5j
ZSBjbG9jazogJWRcbiIsCisJCQlyZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IG9m
X3Byb3BlcnR5X3JlYWRfdTMyKGRldi0+b2Zfbm9kZSwgIm1lZGlhdGVrLGliaWFzIiwKKwkJCQkg
ICAmaGRtaV9waHktPmliaWFzKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZwZGV2LT5k
ZXYsICJGYWlsZWQgdG8gZ2V0IGliaWFzOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9
CisKKwlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihkZXYtPm9mX25vZGUsICJtZWRpYXRlayxp
Ymlhc191cCIsCisJCQkJICAgJmhkbWlfcGh5LT5pYmlhc191cCk7CisJaWYgKHJldCA8IDApIHsK
KwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIGdldCBpYmlhcyB1cDogJWRcbiIsIHJl
dCk7CisJCXJldHVybiByZXQ7CisJfQorCisJZGV2X2luZm8oZGV2LCAiVXNpbmcgZGVmYXVsdCBU
WCBEUlYgaW1wZWRhbmNlOiA0LjJrLzM2XG4iKTsKKwloZG1pX3BoeS0+ZHJ2X2ltcF9jbGsgPSAw
eDMwOworCWhkbWlfcGh5LT5kcnZfaW1wX2QyID0gMHgzMDsKKwloZG1pX3BoeS0+ZHJ2X2ltcF9k
MSA9IDB4MzA7CisJaGRtaV9waHktPmRydl9pbXBfZDAgPSAweDMwOworCisJcGh5ID0gZGV2bV9w
aHlfY3JlYXRlKGRldiwgTlVMTCwgJm10a19oZG1pX3BoeV9vcHMpOworCWlmIChJU19FUlIocGh5
KSkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBjcmVhdGUgSERNSSBQSFlcbiIpOworCQly
ZXR1cm4gUFRSX0VSUihwaHkpOworCX0KKwlwaHlfc2V0X2RydmRhdGEocGh5LCBoZG1pX3BoeSk7
CisKKwlwaHlfcHJvdmlkZXIgPSBkZXZtX29mX3BoeV9wcm92aWRlcl9yZWdpc3RlcihkZXYsIG9m
X3BoeV9zaW1wbGVfeGxhdGUpOworCisJcmV0dXJuIFBUUl9FUlJfT1JfWkVSTyhwaHlfcHJvdmlk
ZXIpOworfQorCitzdGF0aWMgaW50IG10a19oZG1pX3BoeV9yZW1vdmUoc3RydWN0IHBsYXRmb3Jt
X2RldmljZSAqcGRldikKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBv
Zl9kZXZpY2VfaWQgbXRrX2hkbWlfcGh5X21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJt
ZWRpYXRlayxtdDgxNzMtaGRtaS1waHkiLCB9LAorCXt9LAorfTsKKworc3RydWN0IHBsYXRmb3Jt
X2RyaXZlciBtdGtfaGRtaV9waHlfZHJpdmVyID0geworCS5wcm9iZSA9IG10a19oZG1pX3BoeV9w
cm9iZSwKKwkucmVtb3ZlID0gbXRrX2hkbWlfcGh5X3JlbW92ZSwKKwkuZHJpdmVyID0geworCQku
bmFtZSA9ICJtZWRpYXRlay1oZG1pLXBoeSIsCisJCS5vZl9tYXRjaF90YWJsZSA9IG10a19oZG1p
X3BoeV9tYXRjaCwKKwl9LAorfTsKKworTU9EVUxFX0FVVEhPUigiSmllIFFpdSA8amllLnFpdUBt
ZWRpYXRlay5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIk1lZGlhVGVrIE1UODE3MyBIRE1J
IFBIWSBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2Ry
aXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaV9waHkuaCBiL2RyaXZlcnMvZ3B1L2RybS9t
ZWRpYXRlay9tdGtfaGRtaV9waHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5mZjNlOTVhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210
a19oZG1pX3BoeS5oCkBAIC0wLDAgKzEsMjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQg
TWVkaWFUZWsgSW5jLgorICogQXV0aG9yOiBKaWUgUWl1IDxqaWUucWl1QG1lZGlhdGVrLmNvbT4K
KyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUK
KyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNp
Zm5kZWYgX01US19IRE1JX1BIWV9ICisjZGVmaW5lIF9NVEtfSERNSV9QSFlfSAorCit2b2lkIG10
a19oZG1pX3BoeV9zZXRfcGxsKHN0cnVjdCBwaHkgKnBoeSwgdTMyIGNsb2NrLAorCQkJICBlbnVt
IGhkbWlfZGlzcGxheV9jb2xvcl9kZXB0aCBkZXB0aCk7CisKKyNlbmRpZiAvKiBfTVRLX0hETUlf
UEhZX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaV9w
aHlfcmVncy5oIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19oZG1pX3BoeV9yZWdzLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE0YmI5ZgotLS0gL2Rldi9udWxs
CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaV9waHlfcmVncy5oCkBAIC0w
LDAgKzEsMTE4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE0IE1lZGlhVGVrIEluYy4KKyAq
IEF1dGhvcjogSmllIFFpdSA8amllLnFpdUBtZWRpYXRlay5jb20+CisgKgorICogVGhpcyBwcm9n
cmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp
ZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaWZuZGVmIF9NVEtfSERNSV9Q
SFlfUkVHU19ICisjZGVmaW5lIF9NVEtfSERNSV9QSFlfUkVHU19ICisKKyNkZWZpbmUgSERNSV9D
T04wCQkweDAwCisjZGVmaW5lIFJHX0hETUlUWF9QTExfRU4JCUJJVCgzMSkKKyNkZWZpbmUgUkdf
SERNSVRYX1BMTF9GQktESVYJCSgweDdmIDw8IDI0KQorI2RlZmluZSBQTExfRkJLRElWX1NISUZU
CQkyNAorI2RlZmluZSBSR19IRE1JVFhfUExMX0ZCS1NFTAkJKDB4MyA8PCAyMikKKyNkZWZpbmUg
UExMX0ZCS1NFTF9TSElGVAkJMjIKKyNkZWZpbmUgUkdfSERNSVRYX1BMTF9QUkVESVYJCSgweDMg
PDwgMjApCisjZGVmaW5lIFBSRURJVl9TSElGVAkJCTIwCisjZGVmaW5lIFJHX0hETUlUWF9QTExf
UE9TRElWCQkoMHgzIDw8IDE4KQorI2RlZmluZSBQT1NESVZfU0hJRlQJCQkxOAorI2RlZmluZSBS
R19IRE1JVFhfUExMX1JTVF9ETFkJCSgweDMgPDwgMTYpCisjZGVmaW5lIFJHX0hETUlUWF9QTExf
SVIJCSgweGYgPDwgMTIpCisjZGVmaW5lIFBMTF9JUl9TSElGVAkJCTEyCisjZGVmaW5lIFJHX0hE
TUlUWF9QTExfSUMJCSgweGYgPDwgOCkKKyNkZWZpbmUgUExMX0lDX1NISUZUCQkJOAorI2RlZmlu
ZSBSR19IRE1JVFhfUExMX0JQCQkoMHhmIDw8IDQpCisjZGVmaW5lIFBMTF9CUF9TSElGVAkJCTQK
KyNkZWZpbmUgUkdfSERNSVRYX1BMTF9CUgkJKDB4MyA8PCAyKQorI2RlZmluZSBQTExfQlJfU0hJ
RlQJCQkyCisjZGVmaW5lIFJHX0hETUlUWF9QTExfQkMJCSgweDMgPDwgMCkKKyNkZWZpbmUgUExM
X0JDX1NISUZUCQkJMAorI2RlZmluZSBIRE1JX0NPTjEJCTB4MDQKKyNkZWZpbmUgUkdfSERNSVRY
X1BMTF9ESVZFTgkJKDB4NyA8PCAyOSkKKyNkZWZpbmUgUExMX0RJVkVOX1NISUZUCQkJMjkKKyNk
ZWZpbmUgUkdfSERNSVRYX1BMTF9BVVRPS19FTgkJQklUKDI4KQorI2RlZmluZSBSR19IRE1JVFhf
UExMX0FVVE9LX0tGCQkoMHgzIDw8IDI2KQorI2RlZmluZSBSR19IRE1JVFhfUExMX0FVVE9LX0tT
CQkoMHgzIDw8IDI0KQorI2RlZmluZSBSR19IRE1JVFhfUExMX0FVVE9LX0xPQUQJQklUKDIzKQor
I2RlZmluZSBSR19IRE1JVFhfUExMX0JBTkQJCSgweDNmIDw8IDE2KQorI2RlZmluZSBSR19IRE1J
VFhfUExMX1JFRl9TRUwJCUJJVCgxNSkKKyNkZWZpbmUgUkdfSERNSVRYX1BMTF9CSUFTX0VOCQlC
SVQoMTQpCisjZGVmaW5lIFJHX0hETUlUWF9QTExfQklBU19MUEZfRU4JQklUKDEzKQorI2RlZmlu
ZSBSR19IRE1JVFhfUExMX1RYRElWX0VOCQlCSVQoMTIpCisjZGVmaW5lIFJHX0hETUlUWF9QTExf
VFhESVYJCSgweDMgPDwgMTApCisjZGVmaW5lIFBMTF9UWERJVl9TSElGVAkJCTEwCisjZGVmaW5l
IFJHX0hETUlUWF9QTExfTFZST0RfRU4JCUJJVCg5KQorI2RlZmluZSBSR19IRE1JVFhfUExMX01P
TlZDX0VOCQlCSVQoOCkKKyNkZWZpbmUgUkdfSERNSVRYX1BMTF9NT05DS19FTgkJQklUKDcpCisj
ZGVmaW5lIFJHX0hETUlUWF9QTExfTU9OUkVGX0VOCQlCSVQoNikKKyNkZWZpbmUgUkdfSERNSVRY
X1BMTF9UU1RfRU4JCUJJVCg1KQorI2RlZmluZSBSR19IRE1JVFhfUExMX1RTVF9DS19FTgkJQklU
KDQpCisjZGVmaW5lIFJHX0hETUlUWF9QTExfVFNUX1NFTAkJKDB4ZiA8PCAwKQorI2RlZmluZSBI
RE1JX0NPTjIJCTB4MDgKKyNkZWZpbmUgUkdTX0hETUlUWF9QTExfQVVUT0tfQkFORAkoMHg3ZiA8
PCA4KQorI2RlZmluZSBSR1NfSERNSVRYX1BMTF9BVVRPS19GQUlMCUJJVCgxKQorI2RlZmluZSBS
R19IRE1JVFhfRU5fVFhfQ0tMRE8JCUJJVCgwKQorI2RlZmluZSBIRE1JX0NPTjMJCTB4MGMKKyNk
ZWZpbmUgUkdfSERNSVRYX1NFUl9FTgkJKDB4ZiA8PCAyOCkKKyNkZWZpbmUgUkdfSERNSVRYX1BS
RF9FTgkJKDB4ZiA8PCAyNCkKKyNkZWZpbmUgUkdfSERNSVRYX1BSRF9JTVBfRU4JCSgweGYgPDwg
MjApCisjZGVmaW5lIFJHX0hETUlUWF9EUlZfRU4JCSgweGYgPDwgMTYpCisjZGVmaW5lIFJHX0hE
TUlUWF9EUlZfSU1QX0VOCQkoMHhmIDw8IDEyKQorI2RlZmluZSBEUlZfSU1QX0VOX1NISUZUCQkx
MgorI2RlZmluZSBSR19IRE1JVFhfTUhMQ0tfRk9SQ0UJCUJJVCgxMCkKKyNkZWZpbmUgUkdfSERN
SVRYX01ITENLX1BQSVhfRU4JCUJJVCg5KQorI2RlZmluZSBSR19IRE1JVFhfTUhMQ0tfRU4JCUJJ
VCg4KQorI2RlZmluZSBSR19IRE1JVFhfU0VSX0RJTl9TRUwJCSgweGYgPDwgNCkKKyNkZWZpbmUg
UkdfSERNSVRYX1NFUl81VDFfQklTVF9FTglCSVQoMykKKyNkZWZpbmUgUkdfSERNSVRYX1NFUl9C
SVNUX1RPRwkJQklUKDIpCisjZGVmaW5lIFJHX0hETUlUWF9TRVJfRElOX1RPRwkJQklUKDEpCisj
ZGVmaW5lIFJHX0hETUlUWF9TRVJfQ0xLRElHX0lOVglCSVQoMCkKKyNkZWZpbmUgSERNSV9DT040
CQkweDEwCisjZGVmaW5lIFJHX0hETUlUWF9QUkRfSUJJQVNfQ0xLCQkoMHhmIDw8IDI0KQorI2Rl
ZmluZSBSR19IRE1JVFhfUFJEX0lCSUFTX0QyCQkoMHhmIDw8IDE2KQorI2RlZmluZSBSR19IRE1J
VFhfUFJEX0lCSUFTX0QxCQkoMHhmIDw8IDgpCisjZGVmaW5lIFJHX0hETUlUWF9QUkRfSUJJQVNf
RDAJCSgweGYgPDwgMCkKKyNkZWZpbmUgUFJEX0lCSUFTX0NMS19TSElGVAkJMjQKKyNkZWZpbmUg
UFJEX0lCSUFTX0QyX1NISUZUCQkxNgorI2RlZmluZSBQUkRfSUJJQVNfRDFfU0hJRlQJCTgKKyNk
ZWZpbmUgUFJEX0lCSUFTX0QwX1NISUZUCQkwCisjZGVmaW5lIEhETUlfQ09ONQkJMHgxNAorI2Rl
ZmluZSBSR19IRE1JVFhfRFJWX0lCSUFTX0NMSwkJKDB4M2YgPDwgMjQpCisjZGVmaW5lIFJHX0hE
TUlUWF9EUlZfSUJJQVNfRDIJCSgweDNmIDw8IDE2KQorI2RlZmluZSBSR19IRE1JVFhfRFJWX0lC
SUFTX0QxCQkoMHgzZiA8PCA4KQorI2RlZmluZSBSR19IRE1JVFhfRFJWX0lCSUFTX0QwCQkoMHgz
ZiA8PCAwKQorI2RlZmluZSBEUlZfSUJJQVNfQ0xLX1NISUZUCQkyNAorI2RlZmluZSBEUlZfSUJJ
QVNfRDJfU0hJRlQJCTE2CisjZGVmaW5lIERSVl9JQklBU19EMV9TSElGVAkJOAorI2RlZmluZSBE
UlZfSUJJQVNfRDBfU0hJRlQJCTAKKyNkZWZpbmUgSERNSV9DT042CQkweDE4CisjZGVmaW5lIFJH
X0hETUlUWF9EUlZfSU1QX0NMSwkJKDB4M2YgPDwgMjQpCisjZGVmaW5lIFJHX0hETUlUWF9EUlZf
SU1QX0QyCQkoMHgzZiA8PCAxNikKKyNkZWZpbmUgUkdfSERNSVRYX0RSVl9JTVBfRDEJCSgweDNm
IDw8IDgpCisjZGVmaW5lIFJHX0hETUlUWF9EUlZfSU1QX0QwCQkoMHgzZiA8PCAwKQorI2RlZmlu
ZSBEUlZfSU1QX0NMS19TSElGVAkJMjQKKyNkZWZpbmUgRFJWX0lNUF9EMl9TSElGVAkJMTYKKyNk
ZWZpbmUgRFJWX0lNUF9EMV9TSElGVAkJOAorI2RlZmluZSBEUlZfSU1QX0QwX1NISUZUCQkwCisj
ZGVmaW5lIEhETUlfQ09ONwkJMHgxYworI2RlZmluZSBSR19IRE1JVFhfTUhMQ0tfRFJWX0lCSUFT
CSgweDFmIDw8IDI3KQorI2RlZmluZSBSR19IRE1JVFhfU0VSX0RJTgkJKDB4M2ZmIDw8IDE2KQor
I2RlZmluZSBSR19IRE1JVFhfQ0hMRENfVFNUCQkoMHhmIDw8IDEyKQorI2RlZmluZSBSR19IRE1J
VFhfQ0hMQ0tfVFNUCQkoMHhmIDw8IDgpCisjZGVmaW5lIFJHX0hETUlUWF9SRVNFUlZFCQkoMHhm
ZiA8PCAwKQorI2RlZmluZSBIRE1JX0NPTjgJCTB4MjAKKyNkZWZpbmUgUkdTX0hETUlUWF8yVDFf
TEVWCQkoMHhmIDw8IDE2KQorI2RlZmluZSBSR1NfSERNSVRYXzJUMV9FREcJCSgweGYgPDwgMTIp
CisjZGVmaW5lIFJHU19IRE1JVFhfNVQxX0xFVgkJKDB4ZiA8PCA4KQorI2RlZmluZSBSR1NfSERN
SVRYXzVUMV9FREcJCSgweGYgPDwgNCkKKyNkZWZpbmUgUkdTX0hETUlUWF9QTFVHX1RTVAkJQklU
KDApCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19o
ZG1pX3JlZ3MuaCBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaV9yZWdzLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU3ZWUyMgotLS0gL2Rldi9udWxsCisr
KyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaV9yZWdzLmgKQEAgLTAsMCArMSwy
MjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQgTWVkaWFUZWsgSW5jLgorICogQXV0aG9y
OiBKaWUgUWl1IDxqaWUucWl1QG1lZGlhdGVrLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICog
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJz
aW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgor
ICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpZm5kZWYgX01US19IRE1JX1JFR1NfSAor
I2RlZmluZSBfTVRLX0hETUlfUkVHU19ICisKKyNkZWZpbmUgR1JMX0lOVF9NQVNLCQkweDE4Cisj
ZGVmaW5lIEdSTF9JRk1fUE9SVAkJMHgxODgKKyNkZWZpbmUgR1JMX0NIX1NXQVAJCTB4MTk4Cisj
ZGVmaW5lIExSX1NXQVAJCQkJQklUKDApCisjZGVmaW5lIExGRV9DQ19TV0FQCQkJQklUKDEpCisj
ZGVmaW5lIExTUlNfU1dBUAkJCUJJVCgyKQorI2RlZmluZSBSTFNfUlJTX1NXQVAJCQlCSVQoMykK
KyNkZWZpbmUgTFJfU1RBVFVTX1NXQVAJCQlCSVQoNCkKKyNkZWZpbmUgR1JMX0kyU19DX1NUQTAJ
CTB4MTQwCisjZGVmaW5lIEdSTF9JMlNfQ19TVEExCQkweDE0NAorI2RlZmluZSBHUkxfSTJTX0Nf
U1RBMgkJMHgxNDgKKyNkZWZpbmUgR1JMX0kyU19DX1NUQTMJCTB4MTRDCisjZGVmaW5lIEdSTF9J
MlNfQ19TVEE0CQkweDE1MAorI2RlZmluZSBHUkxfSTJTX1VWCQkweDE1NAorI2RlZmluZSBHUkxf
QUNQX0lTUkNfQ1RSTAkweDE1OAorI2RlZmluZSBWU19FTgkJCQlCSVQoMCkKKyNkZWZpbmUgQUNQ
X0VOCQkJCUJJVCgxKQorI2RlZmluZSBJU1JDMV9FTgkJCUJJVCgyKQorI2RlZmluZSBJU1JDMl9F
TgkJCUJJVCgzKQorI2RlZmluZSBHQU1VVF9FTgkJCUJJVCg0KQorI2RlZmluZSBHUkxfQ1RTX0NU
UkwJCTB4MTYwCisjZGVmaW5lIENUU19DVFJMX1NPRlQJCQlCSVQoMCkKKyNkZWZpbmUgR1JMX0lO
VAkJCTB4MTQKKyNkZWZpbmUgSU5UX01ESQkJCQlCSVQoMCkKKyNkZWZpbmUgSU5UX0hEQ1AJCQlC
SVQoMSkKKyNkZWZpbmUgSU5UX0ZJRk9fTwkJCUJJVCgyKQorI2RlZmluZSBJTlRfRklGT19VCQkJ
QklUKDMpCisjZGVmaW5lIElOVF9JRk1fRVJSCQkJQklUKDQpCisjZGVmaW5lIElOVF9JTkZfRE9O
RQkJCUJJVCg1KQorI2RlZmluZSBJTlRfTkNUU19ET05FCQkJQklUKDYpCisjZGVmaW5lIElOVF9D
VFJMX1BLVF9ET05FCQlCSVQoNykKKyNkZWZpbmUgR1JMX0lOVF9NQVNLCQkweDE4CisjZGVmaW5l
IEdSTF9DVFJMCQkweDFDCisjZGVmaW5lIENUUkxfR0VOX0VOCQkJQklUKDIpCisjZGVmaW5lIENU
UkxfU1BEX0VOCQkJQklUKDMpCisjZGVmaW5lIENUUkxfTVBFR19FTgkJCUJJVCg0KQorI2RlZmlu
ZSBDVFJMX0FVRElPX0VOCQkJQklUKDUpCisjZGVmaW5lIENUUkxfQVZJX0VOCQkJQklUKDYpCisj
ZGVmaW5lIENUUkxfQVZNVVRFCQkJQklUKDcpCisjZGVmaW5lCUdSTF9TVEFUVVMJCTB4MjAKKyNk
ZWZpbmUgU1RBVFVTX0hUUExHCQkJQklUKDApCisjZGVmaW5lIFNUQVRVU19QT1JECQkJQklUKDEp
CisjZGVmaW5lIEdSTF9ESVZOCQkweDE3MAorI2RlZmluZSBOQ1RTX1dSSV9BTllUSU1FCQlCSVQo
NikKKyNkZWZpbmUgR1JMX0FVRElPX0NGRwkJMHgxN0MKKyNkZWZpbmUgQVVESU9fWkVSTwkJCUJJ
VCgwKQorI2RlZmluZSBISUdIX0JJVF9SQVRFCQkJQklUKDEpCisjZGVmaW5lIFNBQ0RfRFNUCQkJ
QklUKDIpCisjZGVmaW5lIERTVF9OT1JNQUxfRE9VQkxFCQlCSVQoMykKKyNkZWZpbmUgRFNEX0lO
VgkJCQlCSVQoNCkKKyNkZWZpbmUgTFJfSU5WCQkJCUJJVCg1KQorI2RlZmluZSBMUl9NSVgJCQkJ
QklUKDYpCisjZGVmaW5lIFNBQ0RfU0VMCQkJQklUKDcpCisjZGVmaW5lIEdSTF9OQ1RTCQkweDE4
NAorI2RlZmluZSBHUkxfQ0hfU1cwCQkweDE4QworI2RlZmluZSBHUkxfQ0hfU1cxCQkweDE5MAor
I2RlZmluZSBHUkxfQ0hfU1cyCQkweDE5NAorI2RlZmluZSBHUkxfSU5GT0ZSTV9WRVIJCTB4MTlD
CisjZGVmaW5lIEdSTF9JTkZPRlJNX1RZUEUJMHgxQTAKKyNkZWZpbmUgR1JMX0lORk9GUk1fTE5H
CQkweDFBNAorI2RlZmluZSBHUkxfTUlYX0NUUkwJCTB4MUI0CisjZGVmaW5lIE1JWF9DVFJMX1NS
Q19FTgkJCUJJVCgwKQorI2RlZmluZSBCWVBBU1NfVk9MVU1FCQkJQklUKDEpCisjZGVmaW5lIE1J
WF9DVFJMX0ZMQVQJCQlCSVQoNykKKyNkZWZpbmUgR1JMX0FPVVRfQk5VTV9TRUwJMHgxQzQKKyNk
ZWZpbmUgQU9VVF8yNEJJVAkJCTB4MDAKKyNkZWZpbmUgQU9VVF8yMEJJVAkJCTB4MDIKKyNkZWZp
bmUgQU9VVF8xNkJJVAkJCTB4MDMKKyNkZWZpbmUgSElHSF9CSVRfUkFURV9QQUNLRVRfQUxJR04J
KDB4MyA8PCA2KQorI2RlZmluZSBHUkxfU0hJRlRfTDEJCTB4MUMwCisjZGVmaW5lIEdSTF9TSElG
VF9SMgkJMHgxQjAKKyNkZWZpbmUgQVVESU9fUEFDS0VUX09GRgkJQklUKDYpCisjZGVmaW5lIEdS
TF9DRkcwCQkweDI0CisjZGVmaW5lIENGRzBfSTJTX01PREVfUlRKCQkweDEKKyNkZWZpbmUgQ0ZH
MF9JMlNfTU9ERV9MVEoJCTB4MAorI2RlZmluZSBDRkcwX0kyU19NT0RFX0kyUwkJMHgyCisjZGVm
aW5lIENGRzBfSTJTX01PREVfMjRCSVQJCTB4MDAKKyNkZWZpbmUgQ0ZHMF9JMlNfTU9ERV8xNkJJ
VAkJMHgxMAorI2RlZmluZSBHUkxfQ0ZHMQkJMHgyOAorI2RlZmluZSBDRkcxX0VER19TRUwJCQlC
SVQoMCkKKyNkZWZpbmUgQ0ZHMV9TUERJRgkJCUJJVCgxKQorI2RlZmluZSBDRkcxX0RWSQkJCUJJ
VCgyKQorI2RlZmluZSBDRkcxX0hEQ1BfREVCVUcJCQlCSVQoMykKKyNkZWZpbmUgR1JMX0NGRzIJ
CTB4MmMKKyNkZWZpbmUgQ0ZHMl9OT1RJQ0VfRU4JCQlCSVQoNikKKyNkZWZpbmUgTUhMX0RFX1NF
TAkJCUJJVCgzKQorI2RlZmluZSBHUkxfQ0ZHMwkJMHgzMAorI2RlZmluZSBDRkczX0FFU19LRVlf
SU5ERVhfTUFTSwkJMHgzZgorI2RlZmluZSBDRkczX0NPTlRST0xfUEFDS0VUX0RFTEFZCUJJVCg2
KQorI2RlZmluZSBDRkczX0tTVl9MT0FEX1NUQVJUCQlCSVQoNykKKyNkZWZpbmUgR1JMX0NGRzQJ
CTB4MzQKKyNkZWZpbmUgQ0ZHNF9BRVNfS0VZX0xPQUQJCUJJVCg0KQorI2RlZmluZSBDRkc0X0FW
X1VOTVVURV9FTgkJQklUKDUpCisjZGVmaW5lIENGRzRfQVZfVU5NVVRFX1NFVAkJQklUKDYpCisj
ZGVmaW5lIENGR19NSExfTU9ERQkJCUJJVCg3KQorI2RlZmluZSBHUkxfQ0ZHNQkJMHgzOAorI2Rl
ZmluZSBDRkc1X0NEX1JBVElPX01BU0sJMHg4RgorI2RlZmluZSBDRkc1X0ZTMTI4CQkJKDB4MSA8
PCA0KQorI2RlZmluZSBDRkc1X0ZTMjU2CQkJKDB4MiA8PCA0KQorI2RlZmluZSBDRkc1X0ZTMzg0
CQkJKDB4MyA8PCA0KQorI2RlZmluZSBDRkc1X0ZTNTEyCQkJKDB4NCA8PCA0KQorI2RlZmluZSBD
Rkc1X0ZTNzY4CQkJKDB4NiA8PCA0KQorI2RlZmluZSBEVU1NWV8zMDQJCTB4MzA0CisjZGVmaW5l
IENITU9fU0VMCQkJKDB4Mzw8MikKKyNkZWZpbmUgQ0hNMV9TRUwJCQkoMHgzPDw0KQorI2RlZmlu
ZSBDSE0yX1NFTAkJCSgweDM8PDYpCisjZGVmaW5lIEFVRElPX0kyU19OQ1RTX1NFTAkJQklUKDEp
CisjZGVmaW5lIEFVRElPX0kyU19OQ1RTX1NFTF82NAkJKDE8PDEpCisjZGVmaW5lIEFVRElPX0ky
U19OQ1RTX1NFTF8xMjgJCSgwPDwxKQorI2RlZmluZSBORVdfR0NQX0NUUkwJCQlCSVQoMCkKKyNk
ZWZpbmUgTkVXX0dDUF9DVFJMX01FUkdFCQlCSVQoMCkKKyNkZWZpbmUgR1JMX0xfU1RBVFVTXzAJ
CTB4MjAwCisjZGVmaW5lIEdSTF9MX1NUQVRVU18xCQkweDIwNAorI2RlZmluZSBHUkxfTF9TVEFU
VVNfMgkJMHgyMDgKKyNkZWZpbmUgR1JMX0xfU1RBVFVTXzMJCTB4MjBjCisjZGVmaW5lIEdSTF9M
X1NUQVRVU180CQkweDIxMAorI2RlZmluZSBHUkxfTF9TVEFUVVNfNQkJMHgyMTQKKyNkZWZpbmUg
R1JMX0xfU1RBVFVTXzYJCTB4MjE4CisjZGVmaW5lIEdSTF9MX1NUQVRVU183CQkweDIxYworI2Rl
ZmluZSBHUkxfTF9TVEFUVVNfOAkJMHgyMjAKKyNkZWZpbmUgR1JMX0xfU1RBVFVTXzkJCTB4MjI0
CisjZGVmaW5lIEdSTF9MX1NUQVRVU18xMAkJMHgyMjgKKyNkZWZpbmUgR1JMX0xfU1RBVFVTXzEx
CQkweDIyYworI2RlZmluZSBHUkxfTF9TVEFUVVNfMTIJCTB4MjMwCisjZGVmaW5lIEdSTF9MX1NU
QVRVU18xMwkJMHgyMzQKKyNkZWZpbmUgR1JMX0xfU1RBVFVTXzE0CQkweDIzOAorI2RlZmluZSBH
UkxfTF9TVEFUVVNfMTUJCTB4MjNjCisjZGVmaW5lIEdSTF9MX1NUQVRVU18xNgkJMHgyNDAKKyNk
ZWZpbmUgR1JMX0xfU1RBVFVTXzE3CQkweDI0NAorI2RlZmluZSBHUkxfTF9TVEFUVVNfMTgJCTB4
MjQ4CisjZGVmaW5lIEdSTF9MX1NUQVRVU18xOQkJMHgyNGMKKyNkZWZpbmUgR1JMX0xfU1RBVFVT
XzIwCQkweDI1MAorI2RlZmluZSBHUkxfTF9TVEFUVVNfMjEJCTB4MjU0CisjZGVmaW5lIEdSTF9M
X1NUQVRVU18yMgkJMHgyNTgKKyNkZWZpbmUgR1JMX0xfU1RBVFVTXzIzCQkweDI1YworI2RlZmlu
ZSBHUkxfUl9TVEFUVVNfMAkJMHgyNjAKKyNkZWZpbmUgR1JMX1JfU1RBVFVTXzEJCTB4MjY0Cisj
ZGVmaW5lIEdSTF9SX1NUQVRVU18yCQkweDI2OAorI2RlZmluZSBHUkxfUl9TVEFUVVNfMwkJMHgy
NmMKKyNkZWZpbmUgR1JMX1JfU1RBVFVTXzQJCTB4MjcwCisjZGVmaW5lIEdSTF9SX1NUQVRVU181
CQkweDI3NAorI2RlZmluZSBHUkxfUl9TVEFUVVNfNgkJMHgyNzgKKyNkZWZpbmUgR1JMX1JfU1RB
VFVTXzcJCTB4MjdjCisjZGVmaW5lIEdSTF9SX1NUQVRVU184CQkweDI4MAorI2RlZmluZSBHUkxf
Ul9TVEFUVVNfOQkJMHgyODQKKyNkZWZpbmUgR1JMX1JfU1RBVFVTXzEwCQkweDI4OAorI2RlZmlu
ZSBHUkxfUl9TVEFUVVNfMTEJCTB4MjhjCisjZGVmaW5lIEdSTF9SX1NUQVRVU18xMgkJMHgyOTAK
KyNkZWZpbmUgR1JMX1JfU1RBVFVTXzEzCQkweDI5NAorI2RlZmluZSBHUkxfUl9TVEFUVVNfMTQJ
CTB4Mjk4CisjZGVmaW5lIEdSTF9SX1NUQVRVU18xNQkJMHgyOWMKKyNkZWZpbmUgR1JMX1JfU1RB
VFVTXzE2CQkweDJhMAorI2RlZmluZSBHUkxfUl9TVEFUVVNfMTcJCTB4MmE0CisjZGVmaW5lIEdS
TF9SX1NUQVRVU18xOAkJMHgyYTgKKyNkZWZpbmUgR1JMX1JfU1RBVFVTXzE5CQkweDJhYworI2Rl
ZmluZSBHUkxfUl9TVEFUVVNfMjAJCTB4MmIwCisjZGVmaW5lIEdSTF9SX1NUQVRVU18yMQkJMHgy
YjQKKyNkZWZpbmUgR1JMX1JfU1RBVFVTXzIyCQkweDJiOAorI2RlZmluZSBHUkxfUl9TVEFUVVNf
MjMJCTB4MmJjCisjZGVmaW5lIEdSTF9BQklTVF9DVFJMMAkJMHgyRDQKKyNkZWZpbmUgR1JMX0FC
SVNUX0NUUkwxCQkweDJEOAorI2RlZmluZSBBQklTVF9FTgkJCUJJVCg3KQorI2RlZmluZSBBQklT
VF9EQVRBX0ZNVAkJCSgweDcgPDwgMCkKKyNkZWZpbmUgVklERU9fQ0ZHXzAJCTB4MzgwCisjZGVm
aW5lIFZJREVPX0NGR18xCQkweDM4NAorI2RlZmluZSBWSURFT19DRkdfMgkJMHgzODgKKyNkZWZp
bmUgVklERU9fQ0ZHXzMJCTB4MzhjCisjZGVmaW5lIFZJREVPX0NGR180CQkweDM5MAorI2RlZmlu
ZSBWSURFT19TT1VSQ0VfU0VMCQlCSVQoNykKKyNkZWZpbmUgTk9STUFMX1BBVEgJCQkoMSA8PCA3
KQorI2RlZmluZSBHRU5fUkdCCQkJCSgwIDw8IDcpCisKKyNkZWZpbmUgSERNSV9TWVNfQ0ZHMUMJ
CTB4MDAwCisjZGVmaW5lIEhETUlfT04JCQkJQklUKDApCisjZGVmaW5lIEhETUlfUlNUCQkJQklU
KDEpCisjZGVmaW5lIEFOTEdfT04JCQkJQklUKDIpCisjZGVmaW5lIENGRzEwX0RWSQkJCUJJVCgz
KQorI2RlZmluZSBIRE1JX1RTVAkJCUJJVCgzKQorI2RlZmluZSBTWVNfS0VZTUFTSzEJCQkoMHhm
ZiA8PCA4KQorI2RlZmluZSBTWVNfS0VZTUFTSzIJCQkoMHhmZiA8PCAxNikKKyNkZWZpbmUgQVVE
X09VVFNZTkNfRU4JCQlCSVQoMjQpCisjZGVmaW5lIEFVRF9PVVRTWU5DX1BSRV9FTgkJQklUKDI1
KQorI2RlZmluZSBJMkNNX09OCQkJCUJJVCgyNikKKyNkZWZpbmUgRTJQUk9NX1RZUEVfOEJJVAkJ
QklUKDI3KQorI2RlZmluZSBNQ01fRTJQUk9NX09OCQkJQklUKDI4KQorI2RlZmluZSBFWFRfRTJQ
Uk9NX09OCQkJQklUKDI5KQorI2RlZmluZSBIVFBMR19QSU5fU0VMX09GRgkJQklUKDMwKQorI2Rl
ZmluZSBBRVNfRUZVU0VfRU5BQkxFCQlCSVQoMzEpCisjZGVmaW5lIEhETUlfU1lTX0NGRzIwCQkw
eDAwNAorI2RlZmluZSBERUVQX0NPTE9SX01PREVfTUFTSwkJKDMgPDwgMSkKKyNkZWZpbmUgQ09M
T1JfOEJJVF9NT0RFCQkJKDAgPDwgMSkKKyNkZWZpbmUgQ09MT1JfMTBCSVRfTU9ERQkJKDEgPDwg
MSkKKyNkZWZpbmUgQ09MT1JfMTJCSVRfTU9ERQkJKDIgPDwgMSkKKyNkZWZpbmUgQ09MT1JfMTZC
SVRfTU9ERQkJKDMgPDwgMSkKKyNkZWZpbmUgREVFUF9DT0xPUl9FTgkJCUJJVCgwKQorI2RlZmlu
ZSBIRE1JX0FVRElPX1RFU1RfU0VMCQlCSVQoOCkKKyNkZWZpbmUgSERNSTJQMF9FTgkJCUJJVCgx
MSkKKyNkZWZpbmUgSERNSV9PVVRfRklGT19FTgkJQklUKDE2KQorI2RlZmluZSBIRE1JX09VVF9G
SUZPX0NMS19JTlYJCUJJVCgxNykKKyNkZWZpbmUgTUhMX01PREVfT04JCQlCSVQoMjgpCisjZGVm
aW5lIE1ITF9QUF9NT0RFCQkJQklUKDI5KQorI2RlZmluZSBNSExfU1lOQ19BVVRPX0VOCQlCSVQo
MzApCisjZGVmaW5lIEhETUlfUENMS19GUkVFX1JVTgkJQklUKDMxKQorCisjZW5kaWYKZGlmZiAt
LWdpdCBhL2luY2x1ZGUvZHJtL21lZGlhdGVrL210a19oZG1pX2F1ZGlvLmggYi9pbmNsdWRlL2Ry
bS9tZWRpYXRlay9tdGtfaGRtaV9hdWRpby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjJhZTY0ZDgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2RybS9tZWRpYXRlay9t
dGtfaGRtaV9hdWRpby5oCkBAIC0wLDAgKzEsMTUwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAy
MDE0IE1lZGlhVGVrIEluYy4KKyAqIEF1dGhvcjogSmllIFFpdSA8amllLnFpdUBtZWRpYXRlay5j
b20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICov
CisjaWZuZGVmIF9NVEtfSERNSV9BVURJT19ICisjZGVmaW5lIF9NVEtfSERNSV9BVURJT19ICisK
KyNpbmNsdWRlIDxsaW51eC9oZG1pLmg+CitlbnVtIGhkbWlfYXVkX2lucHV0X3R5cGUgeworCUhE
TUlfQVVEX0lOUFVUX0kyUyA9IDAsCisJSERNSV9BVURfSU5QVVRfU1BESUYsCit9OworCitlbnVt
IGhkbWlfYXVkX2kyc19mbXQgeworCUhETUlfSTJTX01PREVfUkpUXzI0QklUID0gMCwKKwlIRE1J
X0kyU19NT0RFX1JKVF8xNkJJVCwKKwlIRE1JX0kyU19NT0RFX0xKVF8yNEJJVCwKKwlIRE1JX0ky
U19NT0RFX0xKVF8xNkJJVCwKKwlIRE1JX0kyU19NT0RFX0kyU18yNEJJVCwKKwlIRE1JX0kyU19N
T0RFX0kyU18xNkJJVAorfTsKKworZW51bSBoZG1pX2F1ZF9tY2xrIHsKKwlIRE1JX0FVRF9NQ0xL
XzEyOEZTLAorCUhETUlfQVVEX01DTEtfMTkyRlMsCisJSERNSV9BVURfTUNMS18yNTZGUywKKwlI
RE1JX0FVRF9NQ0xLXzM4NEZTLAorCUhETUlfQVVEX01DTEtfNTEyRlMsCisJSERNSV9BVURfTUNM
S183NjhGUywKKwlIRE1JX0FVRF9NQ0xLXzExNTJGUywKK307CisKK2VudW0gaGRtaV9hdWRfaWVj
X2ZyYW1lX3JhdGUgeworCUhETUlfSUVDXzMySyA9IDAsCisJSERNSV9JRUNfOTZLLAorCUhETUlf
SUVDXzE5MkssCisJSERNSV9JRUNfNzY4SywKKwlIRE1JX0lFQ180NEssCisJSERNSV9JRUNfODhL
LAorCUhETUlfSUVDXzE3NkssCisJSERNSV9JRUNfNzA1SywKKwlIRE1JX0lFQ18xNkssCisJSERN
SV9JRUNfMjJLLAorCUhETUlfSUVDXzI0SywKKwlIRE1JX0lFQ180OEssCit9OworCitlbnVtIGhk
bWlfYXVkX2NoYW5uZWxfdHlwZSB7CisJSERNSV9BVURfQ0hBTl9UWVBFXzFfMCA9IDAsCisJSERN
SV9BVURfQ0hBTl9UWVBFXzFfMSwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfMl8wLAorCUhETUlfQVVE
X0NIQU5fVFlQRV8yXzEsCisJSERNSV9BVURfQ0hBTl9UWVBFXzNfMCwKKwlIRE1JX0FVRF9DSEFO
X1RZUEVfM18xLAorCUhETUlfQVVEX0NIQU5fVFlQRV80XzAsCisJSERNSV9BVURfQ0hBTl9UWVBF
XzRfMSwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfNV8wLAorCUhETUlfQVVEX0NIQU5fVFlQRV81XzEs
CisJSERNSV9BVURfQ0hBTl9UWVBFXzZfMCwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfNl8xLAorCUhE
TUlfQVVEX0NIQU5fVFlQRV83XzAsCisJSERNSV9BVURfQ0hBTl9UWVBFXzdfMSwKKwlIRE1JX0FV
RF9DSEFOX1RZUEVfM18wX0xSUywKKwlIRE1JX0FVRF9DSEFOX1RZUEVfM18xX0xSUywKKwlIRE1J
X0FVRF9DSEFOX1RZUEVfNF8wX0NMUlMsCisJSERNSV9BVURfQ0hBTl9UWVBFXzRfMV9DTFJTLAor
CUhETUlfQVVEX0NIQU5fVFlQRV82XzFfQ1MsCisJSERNSV9BVURfQ0hBTl9UWVBFXzZfMV9DSCwK
KwlIRE1JX0FVRF9DSEFOX1RZUEVfNl8xX09ILAorCUhETUlfQVVEX0NIQU5fVFlQRV82XzFfQ0hS
LAorCUhETUlfQVVEX0NIQU5fVFlQRV83XzFfTEhfUkgsCisJSERNSV9BVURfQ0hBTl9UWVBFXzdf
MV9MU1JfUlNSLAorCUhETUlfQVVEX0NIQU5fVFlQRV83XzFfTENfUkMsCisJSERNSV9BVURfQ0hB
Tl9UWVBFXzdfMV9MV19SVywKKwlIRE1JX0FVRF9DSEFOX1RZUEVfN18xX0xTRF9SU0QsCisJSERN
SV9BVURfQ0hBTl9UWVBFXzdfMV9MU1NfUlNTLAorCUhETUlfQVVEX0NIQU5fVFlQRV83XzFfTEhT
X1JIUywKKwlIRE1JX0FVRF9DSEFOX1RZUEVfN18xX0NTX0NILAorCUhETUlfQVVEX0NIQU5fVFlQ
RV83XzFfQ1NfT0gsCisJSERNSV9BVURfQ0hBTl9UWVBFXzdfMV9DU19DSFIsCisJSERNSV9BVURf
Q0hBTl9UWVBFXzdfMV9DSF9PSCwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfN18xX0NIX0NIUiwKKwlI
RE1JX0FVRF9DSEFOX1RZUEVfN18xX09IX0NIUiwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfN18xX0xT
U19SU1NfTFNSX1JTUiwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfNl8wX0NTLAorCUhETUlfQVVEX0NI
QU5fVFlQRV82XzBfQ0gsCisJSERNSV9BVURfQ0hBTl9UWVBFXzZfMF9PSCwKKwlIRE1JX0FVRF9D
SEFOX1RZUEVfNl8wX0NIUiwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfN18wX0xIX1JILAorCUhETUlf
QVVEX0NIQU5fVFlQRV83XzBfTFNSX1JTUiwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfN18wX0xDX1JD
LAorCUhETUlfQVVEX0NIQU5fVFlQRV83XzBfTFdfUlcsCisJSERNSV9BVURfQ0hBTl9UWVBFXzdf
MF9MU0RfUlNELAorCUhETUlfQVVEX0NIQU5fVFlQRV83XzBfTFNTX1JTUywKKwlIRE1JX0FVRF9D
SEFOX1RZUEVfN18wX0xIU19SSFMsCisJSERNSV9BVURfQ0hBTl9UWVBFXzdfMF9DU19DSCwKKwlI
RE1JX0FVRF9DSEFOX1RZUEVfN18wX0NTX09ILAorCUhETUlfQVVEX0NIQU5fVFlQRV83XzBfQ1Nf
Q0hSLAorCUhETUlfQVVEX0NIQU5fVFlQRV83XzBfQ0hfT0gsCisJSERNSV9BVURfQ0hBTl9UWVBF
XzdfMF9DSF9DSFIsCisJSERNSV9BVURfQ0hBTl9UWVBFXzdfMF9PSF9DSFIsCisJSERNSV9BVURf
Q0hBTl9UWVBFXzdfMF9MU1NfUlNTX0xTUl9SU1IsCisJSERNSV9BVURfQ0hBTl9UWVBFXzhfMF9M
SF9SSF9DUywKKwlIRE1JX0FVRF9DSEFOX1RZUEVfVU5LTk9XTiA9IDB4RkYKK307CisKK2VudW0g
aGRtaV9hdWRfY2hhbm5lbF9zd2FwX3R5cGUgeworCUhETUlfQVVEX1NXQVBfTFIsCisJSERNSV9B
VURfU1dBUF9MRkVfQ0MsCisJSERNSV9BVURfU1dBUF9MU1JTLAorCUhETUlfQVVEX1NXQVBfUkxT
X1JSUywKKwlIRE1JX0FVRF9TV0FQX0xSX1NUQVRVUywKK307CisKK3N0cnVjdCBoZG1pX2F1ZGlv
X3BhcmFtIHsKKwllbnVtIGhkbWlfYXVkaW9fY29kaW5nX3R5cGUgYXVkX2NvZGVjOworCWVudW0g
aGRtaV9hdWRpb19zYW1wbGVfZnJlcXVlbmN5IGF1ZF9oZG1pX2ZzOworCWVudW0gaGRtaV9hdWRp
b19zYW1wbGVfc2l6ZSBhdWRfc2FtcGVfc2l6ZTsKKwllbnVtIGhkbWlfYXVkX2lucHV0X3R5cGUg
YXVkX2lucHV0X3R5cGU7CisJZW51bSBoZG1pX2F1ZF9pMnNfZm10IGF1ZF9pMnNfZm10OworCWVu
dW0gaGRtaV9hdWRfbWNsayBhdWRfbWNsazsKKwllbnVtIGhkbWlfYXVkX2llY19mcmFtZV9yYXRl
IGllY19mcmFtZV9mczsKKwllbnVtIGhkbWlfYXVkX2NoYW5uZWxfdHlwZSBhdWRfaW5wdXRfY2hh
bl90eXBlOworCXU4IGhkbWlfbF9jaGFubmVsX3N0YXRlWzZdOworCXU4IGhkbWlfcl9jaGFubmVs
X3N0YXRlWzZdOworfTsKKworc3RydWN0IG10a19oZG1pOworCitzdHJ1Y3QgbXRrX2hkbWlfYXVk
aW9fZGF0YSB7CisJaW50IGlycTsKKwlzdHJ1Y3QgbXRrX2hkbWkgKm10a19oZG1pOworCWludCAo
KmRldGVjdF9kdmlfbW9uaXRvcikoc3RydWN0IG10a19oZG1pICpoY3R4KTsKKwlpbnQgKCpocGRf
ZGV0ZWN0KShzdHJ1Y3QgbXRrX2hkbWkgKmhjdHgpOworCXZvaWQgKCplbmFibGUpKHN0cnVjdCBt
dGtfaGRtaSAqaGN0eCk7CisJdm9pZCAoKmRpc2FibGUpKHN0cnVjdCBtdGtfaGRtaSAqaGN0eCk7
CisJaW50ICgqc2V0X2F1ZGlvX3BhcmFtKShzdHJ1Y3QgbXRrX2hkbWkgKmhjdHgsCisJCQkJc3Ry
dWN0IGhkbWlfYXVkaW9fcGFyYW0gKnBhcmFtKTsKK307CisKKyNlbmRpZiAvKiBfTVRLX0hETUlf
QVVESU9fSCAqLwotLSAKMi42LjIKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVk
ZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8v
ZHJpLWRldmVsCg==