From mboxrd@z Thu Jan 1 00:00:00 1970
From: Philipp Zabel
Subject: [PATCH v7 03/14] drm/mediatek: Add DSI sub driver
Date: Mon, 30 Nov 2015 22:07:45 +0100
Message-ID: <1448917676-25584-4-git-send-email-p.zabel@pengutronix.de>
References: <1448917676-25584-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: <1448917676-25584-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 , Tomasz Figa , Rob Herring , linux-mediatek@lists.infradead.org, Kumar Gala , Matthias Brugger , kernel@pengutronix.de
List-Id: devicetree@vger.kernel.org
RnJvbTogQ0sgSHUgPGNrLmh1QG1lZGlhdGVrLmNvbT4KClRoaXMgcGF0Y2ggYWRkIGEgZHJtIGVu
Y29kZXIvY29ubmVjdG9yIGRyaXZlciBmb3IgdGhlIE1JUEkgRFNJIGZ1bmN0aW9uCmJsb2NrIG9m
IHRoZSBNZWRpYXRlayBkaXNwbGF5IHN1YnN5c3RlbSBhbmQgYSBwaHkgZHJpdmVyIGZvciB0aGUg
TUlQSSBUWApELVBIWSBjb250cm9sIG1vZHVsZS4KClNpZ25lZC1vZmYtYnk6IEppdGFvIFNoaSA8
aml0YW8uc2hpQG1lZGlhdGVrLmNvbT4KU2lnbmVkLW9mZi1ieTogUGhpbGlwcCBaYWJlbCA8cC56
YWJlbEBwZW5ndXRyb25peC5kZT4KLS0tCkNoYW5nZXMgc2luY2UgdjY6CiAtIEFkZGVkIG10a19k
c2lfcG93ZXJvbi9vZmYgcmVmY291bnRpbmcgYW5kIG10a19kZHBfY29tcG9uZW50IHN0YXJ0L3N0
b3AKICAgY2FsbGJhY2tzIHRvIGtlZXAgcGl4ZWwgY2xvY2sgZW5hYmxlZCB1bnRpbCBjcnRjX2Rp
c2FibGUKLS0tCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvTWFrZWZpbGUgICAgICB8ICAgNCAr
LQogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmMgfCAgIDIgKwogZHJpdmVy
cy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmggfCAgIDIgKwogZHJpdmVycy9ncHUvZHJt
L21lZGlhdGVrL210a19kc2kuYyAgICAgfCA4MzggKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RzaS5oICAgICB8ICA1NyArKysK
IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfbWlwaV90eC5jIHwgMzc3ICsrKysrKysrKysr
KysrKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19taXBpX3R4LmggfCAgMjEgKwogNyBm
aWxlcyBjaGFuZ2VkLCAxMzAwIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RzaS5jCiBjcmVhdGUgbW9k
ZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kc2kuaAogY3JlYXRlIG1vZGUg
MTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfbWlwaV90eC5jCiBjcmVhdGUgbW9k
ZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19taXBpX3R4LmgKCmRpZmYgLS1n
aXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0v
bWVkaWF0ZWsvTWFrZWZpbGUKaW5kZXggYmQ2ZThkZi4uNTczZjIwOSAxMDA2NDQKLS0tIGEvZHJp
dmVycy9ncHUvZHJtL21lZGlhdGVrL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRp
YXRlay9NYWtlZmlsZQpAQCAtNSw3ICs1LDkgQEAgbWVkaWF0ZWstZHJtLXkgOj0gbXRrX2Rpc3Bf
b3ZsLm8gXAogCQkgIG10a19kcm1fZHJ2Lm8gXAogCQkgIG10a19kcm1fZmIubyBcCiAJCSAgbXRr
X2RybV9nZW0ubyBcCi0JCSAgbXRrX2RybV9wbGFuZS5vCisJCSAgbXRrX2RybV9wbGFuZS5vIFwK
KwkJICBtdGtfZHNpLm8gXAorCQkgIG10a19taXBpX3R4Lm8KIAogb2JqLSQoQ09ORklHX0RSTV9N
RURJQVRFSykgKz0gbWVkaWF0ZWstZHJtLm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt
L21lZGlhdGVrL210a19kcm1fZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Ry
bV9kcnYuYwppbmRleCBhMzRjNzY1Li43MzljM2U5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9k
cm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv
bXRrX2RybV9kcnYuYwpAQCAtNTIxLDYgKzUyMSw4IEBAIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1f
ZHJpdmVyIG10a19kcm1fcGxhdGZvcm1fZHJpdmVyID0gewogc3RhdGljIHN0cnVjdCBwbGF0Zm9y
bV9kcml2ZXIgKiBjb25zdCBtdGtfZHJtX2RyaXZlcnNbXSA9IHsKIAkmbXRrX2RybV9wbGF0Zm9y
bV9kcml2ZXIsCiAJJm10a19kaXNwX292bF9kcml2ZXIsCisJJm10a19kc2lfZHJpdmVyLAorCSZt
dGtfbWlwaV90eF9kcml2ZXIsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBtdGtfZHJtX2luaXQo
dm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5o
IGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmgKaW5kZXggZGY0MjFjZC4u
M2I1YjI1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2
LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmgKQEAgLTQ5LDUg
KzQ5LDcgQEAgc3RydWN0IG10a19kcm1fcHJpdmF0ZSB7CiB9OwogCiBleHRlcm4gc3RydWN0IHBs
YXRmb3JtX2RyaXZlciBtdGtfZGlzcF9vdmxfZHJpdmVyOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9y
bV9kcml2ZXIgbXRrX2RzaV9kcml2ZXI7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RyaXZlciBt
dGtfbWlwaV90eF9kcml2ZXI7CiAKICNlbmRpZiAvKiBNVEtfRFJNX0RSVl9IICovCmRpZmYgLS1n
aXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RzaS5jIGIvZHJpdmVycy9ncHUvZHJt
L21lZGlhdGVrL210a19kc2kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41
YjdlZWE0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19k
c2kuYwpAQCAtMCwwICsxLDgzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRl
ayBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICovCisKKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hl
bHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0v
ZHJtX21pcGlfZHNpLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9wYW5lbC5oPgorI2luY2x1ZGUgPGxp
bnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBvbmVudC5oPgorI2luY2x1ZGUgPGxpbnV4
L29mLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxsaW51eC9v
Zl9ncmFwaC5oPgorI2luY2x1ZGUgPGxpbnV4L3BoeS9waHkuaD4KKyNpbmNsdWRlIDxsaW51eC9w
bGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDx2aWRlby92aWRlb21vZGUuaD4KKworI2luY2x1
ZGUgIm10a19kc2kuaCIKKyNpbmNsdWRlICJtdGtfbWlwaV90eC5oIgorCisjZGVmaW5lIERTSV9W
SURFT19GSUZPX0RFUFRICSgxOTIwIC8gNCkKKyNkZWZpbmUgRFNJX0hPU1RfRklGT19ERVBUSAk2
NAorCisjZGVmaW5lIERTSV9TVEFSVAkJMHgwMAorCisjZGVmaW5lIERTSV9DT05fQ1RSTAkJMHgx
MAorI2RlZmluZSBEU0lfUkVTRVQJCQlCSVQoMCkKKyNkZWZpbmUgRFNJX0VOCQkJCUJJVCgxKQor
CisjZGVmaW5lIERTSV9NT0RFX0NUUkwJCTB4MTQKKyNkZWZpbmUgTU9ERQkJCQkoMykKKyNkZWZp
bmUgQ01EX01PREUJCQkwCisjZGVmaW5lIFNZTkNfUFVMU0VfTU9ERQkJCTEKKyNkZWZpbmUgU1lO
Q19FVkVOVF9NT0RFCQkJMgorI2RlZmluZSBCVVJTVF9NT0RFCQkJMworI2RlZmluZSBGUk1fTU9E
RQkJCUJJVCgxNikKKyNkZWZpbmUgTUlYX01PREUJCQlCSVQoMTcpCisKKyNkZWZpbmUgRFNJX1RY
UlhfQ1RSTAkJMHgxOAorI2RlZmluZSBWQ19OVU0JCQkJKDIgPDwgMCkKKyNkZWZpbmUgTEFORV9O
VU0JCQkoMHhmIDw8IDIpCisjZGVmaW5lIERJU19FT1QJCQkJQklUKDYpCisjZGVmaW5lIE5VTExf
RU4JCQkJQklUKDcpCisjZGVmaW5lIFRFX0ZSRUVSVU4JCQlCSVQoOCkKKyNkZWZpbmUgRVhUX1RF
X0VOCQkJQklUKDkpCisjZGVmaW5lIEVYVF9URV9FREdFCQkJQklUKDEwKQorI2RlZmluZSBNQVhf
UlROX1NJWkUJCQkoMHhmIDw8IDEyKQorI2RlZmluZSBIU1RYX0NLTFBfRU4JCQlCSVQoMTYpCisK
KyNkZWZpbmUgRFNJX1BTQ1RSTAkJMHgxYworI2RlZmluZSBEU0lfUFNfV0MJCQkweDNmZmYKKyNk
ZWZpbmUgRFNJX1BTX1NFTAkJCSgzIDw8IDE2KQorI2RlZmluZSBQQUNLRURfUFNfMTZCSVRfUkdC
NTY1CQkoMCA8PCAxNikKKyNkZWZpbmUgTE9PU0VMWV9QU18xOEJJVF9SR0I2NjYJCSgxIDw8IDE2
KQorI2RlZmluZSBQQUNLRURfUFNfMThCSVRfUkdCNjY2CQkoMiA8PCAxNikKKyNkZWZpbmUgUEFD
S0VEX1BTXzI0QklUX1JHQjg4OAkJKDMgPDwgMTYpCisKKyNkZWZpbmUgRFNJX1ZTQV9OTAkJMHgy
MAorI2RlZmluZSBEU0lfVkJQX05MCQkweDI0CisjZGVmaW5lIERTSV9WRlBfTkwJCTB4MjgKKyNk
ZWZpbmUgRFNJX1ZBQ1RfTkwJCTB4MkMKKyNkZWZpbmUgRFNJX0hTQV9XQwkJMHg1MAorI2RlZmlu
ZSBEU0lfSEJQX1dDCQkweDU0CisjZGVmaW5lIERTSV9IRlBfV0MJCTB4NTgKKworI2RlZmluZSBE
U0lfSFNUWF9DS0xfV0MJCTB4NjQKKworI2RlZmluZSBEU0lfUEhZX0xDQ09OCQkweDEwNAorI2Rl
ZmluZSBMQ19IU19UWF9FTgkJCUJJVCgwKQorI2RlZmluZSBMQ19VTFBNX0VOCQkJQklUKDEpCisj
ZGVmaW5lIExDX1dBS0VVUF9FTgkJCUJJVCgyKQorCisjZGVmaW5lIERTSV9QSFlfTEQwQ09OCQkw
eDEwOAorI2RlZmluZSBMRDBfSFNfVFhfRU4JCQlCSVQoMCkKKyNkZWZpbmUgTEQwX1VMUE1fRU4J
CQlCSVQoMSkKKyNkZWZpbmUgTEQwX1dBS0VVUF9FTgkJCUJJVCgyKQorCisjZGVmaW5lIERTSV9Q
SFlfVElNRUNPTjAJMHgxMTAKKyNkZWZpbmUgTFBYCQkJCSgweGZmIDw8IDApCisjZGVmaW5lIEhT
X1BSUFIJCQkJKDB4ZmYgPDwgOCkKKyNkZWZpbmUgSFNfWkVSTwkJCQkoMHhmZiA8PCAxNikKKyNk
ZWZpbmUgSFNfVFJBSUwJCQkoMHhmZiA8PCAyNCkKKworI2RlZmluZSBEU0lfUEhZX1RJTUVDT04x
CTB4MTE0CisjZGVmaW5lIFRBX0dPCQkJCSgweGZmIDw8IDApCisjZGVmaW5lIFRBX1NVUkUJCQkJ
KDB4ZmYgPDwgOCkKKyNkZWZpbmUgVEFfR0VUCQkJCSgweGZmIDw8IDE2KQorI2RlZmluZSBEQV9I
U19FWElUCQkJKDB4ZmYgPDwgMjQpCisKKyNkZWZpbmUgRFNJX1BIWV9USU1FQ09OMgkweDExOAor
I2RlZmluZSBDT05UX0RFVAkJCSgweGZmIDw8IDApCisjZGVmaW5lIENMS19aRVJPCQkJKDB4ZmYg
PDwgMTYpCisjZGVmaW5lIENMS19UUkFJTAkJCSgweGZmIDw8IDI0KQorCisjZGVmaW5lIERTSV9Q
SFlfVElNRUNPTjMJMHgxMWMKKyNkZWZpbmUgQ0xLX0hTX1BSUFIJCQkoMHhmZiA8PCAwKQorI2Rl
ZmluZSBDTEtfSFNfUE9TVAkJCSgweGZmIDw8IDgpCisjZGVmaW5lIENMS19IU19FWElUCQkJKDB4
ZmYgPDwgMTYpCisKKyNkZWZpbmUgTlNfVE9fQ1lDTEUobiwgYykgICAgKChuKSAvIGMgKyAoKChu
KSAlIGMpID8gMSA6IDApKQorCitzdGF0aWMgdm9pZCBtdGtfZHNpX21hc2soc3RydWN0IG10a19k
c2kgKmRzaSwgdTMyIG9mZnNldCwgdTMyIG1hc2ssIHUzMiBkYXRhKQoreworCXUzMiB0ZW1wID0g
cmVhZGwoZHNpLT5yZWdzICsgb2Zmc2V0KTsKKworCXdyaXRlbCgodGVtcCAmIH5tYXNrKSB8IChk
YXRhICYgbWFzayksIGRzaS0+cmVncyArIG9mZnNldCk7Cit9CisKK3N0YXRpYyB2b2lkIGRzaV9w
aHlfdGltY29uZmlnKHN0cnVjdCBtdGtfZHNpICpkc2kpCit7CisJdTMyIHRpbWNvbjAsIHRpbWNv
bjEsIHRpbWNvbjIsIHRpbWNvbjM7CisJdW5zaWduZWQgaW50IHVpLCBjeWNsZV90aW1lOworCXVu
c2lnbmVkIGludCBscHg7CisKKwl1aSA9IDEwMDAgLyBkc2ktPmRhdGFfcmF0ZSArIDB4MDE7CisJ
Y3ljbGVfdGltZSA9IDgwMDAgLyBkc2ktPmRhdGFfcmF0ZSArIDB4MDE7CisJbHB4ID0gNTsKKwor
CXRpbWNvbjAgPSAoOCA8PCAyNCkgfCAoMHhhIDw8IDE2KSB8ICgweDYgPDwgOCkgfCBscHg7CisJ
dGltY29uMSA9ICg3IDw8IDI0KSB8ICg1ICogbHB4IDw8IDE2KSB8ICgoMyAqIGxweCkgLyAyKSA8
PCA4IHwKKwkJICAoNCAqIGxweCk7CisJdGltY29uMiA9ICgoTlNfVE9fQ1lDTEUoMHg2NCwgY3lj
bGVfdGltZSkgKyAweGEpIDw8IDI0KSB8CisJCSAgKE5TX1RPX0NZQ0xFKDB4MTUwLCBjeWNsZV90
aW1lKSA8PCAxNik7CisJdGltY29uMyA9ICgyICogbHB4KSA8PCAxNiB8IE5TX1RPX0NZQ0xFKDgw
ICsgNTIgKiB1aSwgY3ljbGVfdGltZSkgPDwgOCB8CisJCSAgIE5TX1RPX0NZQ0xFKDB4NDAsIGN5
Y2xlX3RpbWUpOworCisJd3JpdGVsKHRpbWNvbjAsIGRzaS0+cmVncyArIERTSV9QSFlfVElNRUNP
TjApOworCXdyaXRlbCh0aW1jb24xLCBkc2ktPnJlZ3MgKyBEU0lfUEhZX1RJTUVDT04xKTsKKwl3
cml0ZWwodGltY29uMiwgZHNpLT5yZWdzICsgRFNJX1BIWV9USU1FQ09OMik7CisJd3JpdGVsKHRp
bWNvbjMsIGRzaS0+cmVncyArIERTSV9QSFlfVElNRUNPTjMpOworfQorCitzdGF0aWMgdm9pZCBt
dGtfZHNpX2VuYWJsZShzdHJ1Y3QgbXRrX2RzaSAqZHNpKQoreworCW10a19kc2lfbWFzayhkc2ks
IERTSV9DT05fQ1RSTCwgRFNJX0VOLCBEU0lfRU4pOworfQorCitzdGF0aWMgdm9pZCBtdGtfZHNp
X2Rpc2FibGUoc3RydWN0IG10a19kc2kgKmRzaSkKK3sKKwltdGtfZHNpX21hc2soZHNpLCBEU0lf
Q09OX0NUUkwsIERTSV9FTiwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kc2lfcmVzZXQoc3Ry
dWN0IG10a19kc2kgKmRzaSkKK3sKKwltdGtfZHNpX21hc2soZHNpLCBEU0lfQ09OX0NUUkwsIERT
SV9SRVNFVCwgRFNJX1JFU0VUKTsKKwltdGtfZHNpX21hc2soZHNpLCBEU0lfQ09OX0NUUkwsIERT
SV9SRVNFVCwgMCk7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2RzaV9wb3dlcm9uKHN0cnVjdCBtdGtf
ZHNpICpkc2kpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gZHNpLT5kZXY7CisJaW50IHJldDsK
KworCWlmICgrK2RzaS0+cmVmY291bnQgIT0gMSkKKwkJcmV0dXJuIDA7CisKKwkvKioKKwkgKiBk
YXRhX3JhdGUgPSAocGl4ZWxfY2xvY2sgLyAxMDAwKSAqIHBpeGVsX2RpcHRoICogbWlwaV9yYXRp
bzsKKwkgKiBwaXhlbF9jbG9jayB1bml0IGlzIEtoeiwgZGF0YV9yYXRhIHVuaXQgaXMgTUh6LCBz
byBuZWVkIGRpdmlkZSAxMDAwLgorCSAqIG1pcGlfcmF0aW8gaXMgbWlwaSBjbGsgY29lZmZpY2ll
bnQgZm9yIGJhbGFuY2UgdGhlIHBpeGVsIGNsayBpbiBtaXBpLgorCSAqIHdlIHNldCBtaXBpX3Jh
dGlvIGlzIDEuMDUuCisJICovCisJZHNpLT5kYXRhX3JhdGUgPSBkc2ktPnZtLnBpeGVsY2xvY2sg
KiAzICogMjEgLyAoMSAqIDEwMDAgKiAxMCk7CisKKwltdGtfbWlwaV90eF9zZXRfZGF0YV9yYXRl
KGRzaS0+cGh5LCBkc2ktPmRhdGFfcmF0ZSk7CisJcGh5X3Bvd2VyX29uKGRzaS0+cGh5KTsKKwor
CXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShkc2ktPmVuZ2luZV9jbGspOworCWlmIChyZXQgPCAw
KSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGVuYWJsZSBlbmdpbmUgY2xvY2s6ICVkXG4i
LCByZXQpOworCQlnb3RvIGVycl9lbmdpbmVfY2xrOworCX0KKworCXJldCA9IGNsa19wcmVwYXJl
X2VuYWJsZShkc2ktPmRpZ2l0YWxfY2xrKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRl
diwgIkZhaWxlZCB0byBlbmFibGUgZGlnaXRhbCBjbG9jazogJWRcbiIsIHJldCk7CisJCWdvdG8g
ZXJyX2RpZ2l0YWxfY2xrOworCX0KKworCW10a19kc2lfZW5hYmxlKGRzaSk7CisJbXRrX2RzaV9y
ZXNldChkc2kpOworCWRzaV9waHlfdGltY29uZmlnKGRzaSk7CisKKwlyZXR1cm4gMDsKKworZXJy
X2RpZ2l0YWxfY2xrOgorCWNsa19kaXNhYmxlX3VucHJlcGFyZShkc2ktPmVuZ2luZV9jbGspOwor
ZXJyX2VuZ2luZV9jbGs6CisJZHNpLT5yZWZjb3VudC0tOworCXJldHVybiByZXQ7Cit9CisKK3N0
YXRpYyB2b2lkIGRzaV9jbGtfdWxwX21vZGVfZW50ZXIoc3RydWN0IG10a19kc2kgKmRzaSkKK3sK
KwltdGtfZHNpX21hc2soZHNpLCBEU0lfUEhZX0xDQ09OLCBMQ19IU19UWF9FTiwgMCk7CisJbXRr
X2RzaV9tYXNrKGRzaSwgRFNJX1BIWV9MQ0NPTiwgTENfVUxQTV9FTiwgMCk7Cit9CisKK3N0YXRp
YyB2b2lkIGRzaV9jbGtfdWxwX21vZGVfbGVhdmUoc3RydWN0IG10a19kc2kgKmRzaSkKK3sKKwlt
dGtfZHNpX21hc2soZHNpLCBEU0lfUEhZX0xDQ09OLCBMQ19VTFBNX0VOLCAwKTsKKwltdGtfZHNp
X21hc2soZHNpLCBEU0lfUEhZX0xDQ09OLCBMQ19XQUtFVVBfRU4sIExDX1dBS0VVUF9FTik7CisJ
bXRrX2RzaV9tYXNrKGRzaSwgRFNJX1BIWV9MQ0NPTiwgTENfV0FLRVVQX0VOLCAwKTsKK30KKwor
c3RhdGljIHZvaWQgZHNpX2xhbmUwX3VscF9tb2RlX2VudGVyKHN0cnVjdCBtdGtfZHNpICpkc2kp
Cit7CisJbXRrX2RzaV9tYXNrKGRzaSwgRFNJX1BIWV9MRDBDT04sIExEMF9IU19UWF9FTiwgMCk7
CisJbXRrX2RzaV9tYXNrKGRzaSwgRFNJX1BIWV9MRDBDT04sIExEMF9VTFBNX0VOLCAwKTsKK30K
Kworc3RhdGljIHZvaWQgZHNpX2xhbmUwX3VscF9tb2RlX2xlYXZlKHN0cnVjdCBtdGtfZHNpICpk
c2kpCit7CisJbXRrX2RzaV9tYXNrKGRzaSwgRFNJX1BIWV9MRDBDT04sIExEMF9VTFBNX0VOLCAw
KTsKKwltdGtfZHNpX21hc2soZHNpLCBEU0lfUEhZX0xEMENPTiwgTEQwX1dBS0VVUF9FTiwgTEQw
X1dBS0VVUF9FTik7CisJbXRrX2RzaV9tYXNrKGRzaSwgRFNJX1BIWV9MRDBDT04sIExEMF9XQUtF
VVBfRU4sIDApOworfQorCitzdGF0aWMgYm9vbCBkc2lfY2xrX2hzX3N0YXRlKHN0cnVjdCBtdGtf
ZHNpICpkc2kpCit7CisJdTMyIHRtcF9yZWcxOworCisJdG1wX3JlZzEgPSByZWFkbChkc2ktPnJl
Z3MgKyBEU0lfUEhZX0xDQ09OKTsKKwlyZXR1cm4gKCh0bXBfcmVnMSAmIExDX0hTX1RYX0VOKSA9
PSAxKSA/IHRydWUgOiBmYWxzZTsKK30KKworc3RhdGljIHZvaWQgZHNpX2Nsa19oc19tb2RlKHN0
cnVjdCBtdGtfZHNpICpkc2ksIGJvb2wgZW50ZXIpCit7CisJaWYgKGVudGVyICYmICFkc2lfY2xr
X2hzX3N0YXRlKGRzaSkpCisJCW10a19kc2lfbWFzayhkc2ksIERTSV9QSFlfTENDT04sIExDX0hT
X1RYX0VOLCBMQ19IU19UWF9FTik7CisJZWxzZSBpZiAoIWVudGVyICYmIGRzaV9jbGtfaHNfc3Rh
dGUoZHNpKSkKKwkJbXRrX2RzaV9tYXNrKGRzaSwgRFNJX1BIWV9MQ0NPTiwgTENfSFNfVFhfRU4s
IDApOworfQorCitzdGF0aWMgdm9pZCBkc2lfc2V0X21vZGUoc3RydWN0IG10a19kc2kgKmRzaSkK
K3sKKwl1MzIgdmlkX21vZGUgPSBDTURfTU9ERTsKKworCWlmIChkc2ktPm1vZGVfZmxhZ3MgJiBN
SVBJX0RTSV9NT0RFX1ZJREVPKSB7CisJCXZpZF9tb2RlID0gU1lOQ19QVUxTRV9NT0RFOworCisJ
CWlmICgoZHNpLT5tb2RlX2ZsYWdzICYgTUlQSV9EU0lfTU9ERV9WSURFT19CVVJTVCkgJiYKKwkJ
ICAgICEoZHNpLT5tb2RlX2ZsYWdzICYgTUlQSV9EU0lfTU9ERV9WSURFT19TWU5DX1BVTFNFKSkK
KwkJCXZpZF9tb2RlID0gQlVSU1RfTU9ERTsKKwl9CisKKwl3cml0ZWwodmlkX21vZGUsIGRzaS0+
cmVncyArIERTSV9NT0RFX0NUUkwpOworfQorCitzdGF0aWMgdm9pZCBkc2lfcHNfY29udHJvbF92
YWN0KHN0cnVjdCBtdGtfZHNpICpkc2kpCit7CisJc3RydWN0IHZpZGVvbW9kZSAqdm0gPSAmZHNp
LT52bTsKKwl1MzIgZHNpX2J1Zl9icHAsIHBzX3djOworCXUzMiBwc19icHBfbW9kZTsKKworCWlm
IChkc2ktPmZvcm1hdCA9PSBNSVBJX0RTSV9GTVRfUkdCNTY1KQorCQlkc2lfYnVmX2JwcCA9IDI7
CisJZWxzZQorCQlkc2lfYnVmX2JwcCA9IDM7CisKKwlwc193YyA9IHZtLT5oYWN0aXZlICogZHNp
X2J1Zl9icHA7CisJcHNfYnBwX21vZGUgPSBwc193YzsKKworCXN3aXRjaCAoZHNpLT5mb3JtYXQp
IHsKKwljYXNlIE1JUElfRFNJX0ZNVF9SR0I4ODg6CisJCXBzX2JwcF9tb2RlIHw9IFBBQ0tFRF9Q
U18yNEJJVF9SR0I4ODg7CisJCWJyZWFrOworCWNhc2UgTUlQSV9EU0lfRk1UX1JHQjY2NjoKKwkJ
cHNfYnBwX21vZGUgfD0gUEFDS0VEX1BTXzE4QklUX1JHQjY2NjsKKwkJYnJlYWs7CisJY2FzZSBN
SVBJX0RTSV9GTVRfUkdCNjY2X1BBQ0tFRDoKKwkJcHNfYnBwX21vZGUgfD0gTE9PU0VMWV9QU18x
OEJJVF9SR0I2NjY7CisJCWJyZWFrOworCWNhc2UgTUlQSV9EU0lfRk1UX1JHQjU2NToKKwkJcHNf
YnBwX21vZGUgfD0gUEFDS0VEX1BTXzE2QklUX1JHQjU2NTsKKwkJYnJlYWs7CisJfQorCisJd3Jp
dGVsKHZtLT52YWN0aXZlLCBkc2ktPnJlZ3MgKyBEU0lfVkFDVF9OTCk7CisJd3JpdGVsKHBzX2Jw
cF9tb2RlLCBkc2ktPnJlZ3MgKyBEU0lfUFNDVFJMKTsKKwl3cml0ZWwocHNfd2MsIGRzaS0+cmVn
cyArIERTSV9IU1RYX0NLTF9XQyk7Cit9CisKK3N0YXRpYyB2b2lkIGRzaV9yeHR4X2NvbnRyb2wo
c3RydWN0IG10a19kc2kgKmRzaSkKK3sKKwl1MzIgdG1wX3JlZzsKKworCXN3aXRjaCAoZHNpLT5s
YW5lcykgeworCWNhc2UgMToKKwkJdG1wX3JlZyA9IDEgPDwgMjsKKwkJYnJlYWs7CisJY2FzZSAy
OgorCQl0bXBfcmVnID0gMyA8PCAyOworCQlicmVhazsKKwljYXNlIDM6CisJCXRtcF9yZWcgPSA3
IDw8IDI7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJdG1wX3JlZyA9IDB4ZiA8PCAyOworCQlicmVh
azsKKwlkZWZhdWx0OgorCQl0bXBfcmVnID0gMHhmIDw8IDI7CisJCWJyZWFrOworCX0KKworCXdy
aXRlbCh0bXBfcmVnLCBkc2ktPnJlZ3MgKyBEU0lfVFhSWF9DVFJMKTsKK30KKworc3RhdGljIHZv
aWQgZHNpX3BzX2NvbnRyb2woc3RydWN0IG10a19kc2kgKmRzaSkKK3sKKwl1bnNpZ25lZCBpbnQg
ZHNpX3RtcF9idWZfYnBwOworCXUzMiB0bXBfcmVnOworCisJc3dpdGNoIChkc2ktPmZvcm1hdCkg
eworCWNhc2UgTUlQSV9EU0lfRk1UX1JHQjg4ODoKKwkJdG1wX3JlZyA9IFBBQ0tFRF9QU18yNEJJ
VF9SR0I4ODg7CisJCWRzaV90bXBfYnVmX2JwcCA9IDM7CisJCWJyZWFrOworCWNhc2UgTUlQSV9E
U0lfRk1UX1JHQjY2NjoKKwkJdG1wX3JlZyA9IExPT1NFTFlfUFNfMThCSVRfUkdCNjY2OworCQlk
c2lfdG1wX2J1Zl9icHAgPSAzOworCQlicmVhazsKKwljYXNlIE1JUElfRFNJX0ZNVF9SR0I2NjZf
UEFDS0VEOgorCQl0bXBfcmVnID0gUEFDS0VEX1BTXzE4QklUX1JHQjY2NjsKKwkJZHNpX3RtcF9i
dWZfYnBwID0gMzsKKwkJYnJlYWs7CisJY2FzZSBNSVBJX0RTSV9GTVRfUkdCNTY1OgorCQl0bXBf
cmVnID0gUEFDS0VEX1BTXzE2QklUX1JHQjU2NTsKKwkJZHNpX3RtcF9idWZfYnBwID0gMjsKKwkJ
YnJlYWs7CisJZGVmYXVsdDoKKwkJdG1wX3JlZyA9IFBBQ0tFRF9QU18yNEJJVF9SR0I4ODg7CisJ
CWRzaV90bXBfYnVmX2JwcCA9IDM7CisJCWJyZWFrOworCX0KKworCXRtcF9yZWcgKz0gZHNpLT52
bS5oYWN0aXZlICogZHNpX3RtcF9idWZfYnBwICYgRFNJX1BTX1dDOworCXdyaXRlbCh0bXBfcmVn
LCBkc2ktPnJlZ3MgKyBEU0lfUFNDVFJMKTsKK30KKworc3RhdGljIHZvaWQgZHNpX2NvbmZpZ192
ZG9fdGltaW5nKHN0cnVjdCBtdGtfZHNpICpkc2kpCit7CisJdW5zaWduZWQgaW50IGhvcml6b250
YWxfc3luY19hY3RpdmVfYnl0ZTsKKwl1bnNpZ25lZCBpbnQgaG9yaXpvbnRhbF9iYWNrcG9yY2hf
Ynl0ZTsKKwl1bnNpZ25lZCBpbnQgaG9yaXpvbnRhbF9mcm9udHBvcmNoX2J5dGU7CisJdW5zaWdu
ZWQgaW50IGRzaV90bXBfYnVmX2JwcDsKKworCXN0cnVjdCB2aWRlb21vZGUgKnZtID0gJmRzaS0+
dm07CisKKwlpZiAoZHNpLT5mb3JtYXQgPT0gTUlQSV9EU0lfRk1UX1JHQjU2NSkKKwkJZHNpX3Rt
cF9idWZfYnBwID0gMjsKKwllbHNlCisJCWRzaV90bXBfYnVmX2JwcCA9IDM7CisKKwl3cml0ZWwo
dm0tPnZzeW5jX2xlbiwgZHNpLT5yZWdzICsgRFNJX1ZTQV9OTCk7CisJd3JpdGVsKHZtLT52YmFj
a19wb3JjaCwgZHNpLT5yZWdzICsgRFNJX1ZCUF9OTCk7CisJd3JpdGVsKHZtLT52ZnJvbnRfcG9y
Y2gsIGRzaS0+cmVncyArIERTSV9WRlBfTkwpOworCXdyaXRlbCh2bS0+dmFjdGl2ZSwgZHNpLT5y
ZWdzICsgRFNJX1ZBQ1RfTkwpOworCisJaG9yaXpvbnRhbF9zeW5jX2FjdGl2ZV9ieXRlID0gKHZt
LT5oc3luY19sZW4gKiBkc2lfdG1wX2J1Zl9icHAgLSAxMCk7CisKKwlpZiAoZHNpLT5tb2RlX2Zs
YWdzICYgTUlQSV9EU0lfTU9ERV9WSURFT19TWU5DX1BVTFNFKQorCQlob3Jpem9udGFsX2JhY2tw
b3JjaF9ieXRlID0KKwkJCSh2bS0+aGJhY2tfcG9yY2ggKiBkc2lfdG1wX2J1Zl9icHAgLSAxMCk7
CisJZWxzZQorCQlob3Jpem9udGFsX2JhY2twb3JjaF9ieXRlID0gKCh2bS0+aGJhY2tfcG9yY2gg
KyB2bS0+aHN5bmNfbGVuKSAqCisJCQlkc2lfdG1wX2J1Zl9icHAgLSAxMCk7CisKKwlob3Jpem9u
dGFsX2Zyb250cG9yY2hfYnl0ZSA9ICh2bS0+aGZyb250X3BvcmNoICogZHNpX3RtcF9idWZfYnBw
IC0gMTIpOworCisJd3JpdGVsKGhvcml6b250YWxfc3luY19hY3RpdmVfYnl0ZSwgZHNpLT5yZWdz
ICsgRFNJX0hTQV9XQyk7CisJd3JpdGVsKGhvcml6b250YWxfYmFja3BvcmNoX2J5dGUsIGRzaS0+
cmVncyArIERTSV9IQlBfV0MpOworCXdyaXRlbChob3Jpem9udGFsX2Zyb250cG9yY2hfYnl0ZSwg
ZHNpLT5yZWdzICsgRFNJX0hGUF9XQyk7CisKKwlkc2lfcHNfY29udHJvbChkc2kpOworfQorCitz
dGF0aWMgdm9pZCBtdGtfZHNpX3N0YXJ0KHN0cnVjdCBtdGtfZHNpICpkc2kpCit7CisJd3JpdGVs
KDAsIGRzaS0+cmVncyArIERTSV9TVEFSVCk7CisJd3JpdGVsKDEsIGRzaS0+cmVncyArIERTSV9T
VEFSVCk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kc2lfcG93ZXJvZmYoc3RydWN0IG10a19kc2kg
KmRzaSkKK3sKKwlpZiAoV0FSTl9PTihkc2ktPnJlZmNvdW50ID09IDApKQorCQlyZXR1cm47CisK
KwlpZiAoLS1kc2ktPnJlZmNvdW50ICE9IDApCisJCXJldHVybjsKKworCWRzaV9sYW5lMF91bHBf
bW9kZV9lbnRlcihkc2kpOworCWRzaV9jbGtfdWxwX21vZGVfZW50ZXIoZHNpKTsKKworCW10a19k
c2lfZGlzYWJsZShkc2kpOworCisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRzaS0+ZW5naW5lX2Ns
ayk7CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRzaS0+ZGlnaXRhbF9jbGspOworCisJcGh5X3Bv
d2VyX29mZihkc2ktPnBoeSk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19vdXRwdXRfZHNpX2VuYWJs
ZShzdHJ1Y3QgbXRrX2RzaSAqZHNpKQoreworCWludCByZXQ7CisKKwlpZiAoZHNpLT5lbmFibGVk
KQorCQlyZXR1cm47CisKKwlpZiAoZHNpLT5wYW5lbCkgeworCQlpZiAoZHJtX3BhbmVsX3ByZXBh
cmUoZHNpLT5wYW5lbCkpIHsKKwkJCURSTV9FUlJPUigiZmFpbGVkIHRvIHNldHVwIHRoZSBwYW5l
bFxuIik7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwlyZXQgPSBtdGtfZHNpX3Bvd2Vyb24oZHNp
KTsKKwlpZiAocmV0IDwgMCkgeworCQlEUk1fRVJST1IoImZhaWxlZCB0byBwb3dlciBvbiBkc2lc
biIpOworCQlyZXR1cm47CisJfQorCisJZHNpX3J4dHhfY29udHJvbChkc2kpOworCisJZHNpX2Ns
a191bHBfbW9kZV9sZWF2ZShkc2kpOworCWRzaV9sYW5lMF91bHBfbW9kZV9sZWF2ZShkc2kpOwor
CWRzaV9jbGtfaHNfbW9kZShkc2ksIDApOworCWRzaV9zZXRfbW9kZShkc2kpOworCisJZHNpX3Bz
X2NvbnRyb2xfdmFjdChkc2kpOworCWRzaV9jb25maWdfdmRvX3RpbWluZyhkc2kpOworCisJZHNp
X3NldF9tb2RlKGRzaSk7CisJZHNpX2Nsa19oc19tb2RlKGRzaSwgMSk7CisKKwltdGtfZHNpX3N0
YXJ0KGRzaSk7CisKKwlkc2ktPmVuYWJsZWQgPSB0cnVlOworfQorCitzdGF0aWMgdm9pZCBtdGtf
b3V0cHV0X2RzaV9kaXNhYmxlKHN0cnVjdCBtdGtfZHNpICpkc2kpCit7CisJaWYgKCFkc2ktPmVu
YWJsZWQpCisJCXJldHVybjsKKworCWlmIChkc2ktPnBhbmVsKSB7CisJCWlmIChkcm1fcGFuZWxf
ZGlzYWJsZShkc2ktPnBhbmVsKSkgeworCQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gZGlzYWJsZSB0
aGUgcGFuZWxcbiIpOworCQkJcmV0dXJuOworCQl9CisJfQorCisJbXRrX2RzaV9wb3dlcm9mZihk
c2kpOworCisJZHNpLT5lbmFibGVkID0gZmFsc2U7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kc2lf
ZW5jb2Rlcl9kZXN0cm95KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKK3sKKwlkcm1fZW5j
b2Rlcl9jbGVhbnVwKGVuY29kZXIpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9lbmNv
ZGVyX2Z1bmNzIG10a19kc2lfZW5jb2Rlcl9mdW5jcyA9IHsKKwkuZGVzdHJveSA9IG10a19kc2lf
ZW5jb2Rlcl9kZXN0cm95LAorfTsKKworc3RhdGljIGJvb2wgbXRrX2RzaV9lbmNvZGVyX21vZGVf
Zml4dXAoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAorCQkJCSAgICAgICBjb25zdCBzdHJ1
Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKKwkJCQkgICAgICAgc3RydWN0IGRybV9kaXNwbGF5
X21vZGUgKmFkanVzdGVkX21vZGUpCit7CisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2b2lk
IG10a19kc2lfZW5jb2Rlcl9tb2RlX3NldChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsCisJ
CQkJICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKKwkJCQkgICAgIHN0cnVjdCBk
cm1fZGlzcGxheV9tb2RlICphZGp1c3RlZCkKK3sKKwlzdHJ1Y3QgbXRrX2RzaSAqZHNpID0gZW5j
b2Rlcl90b19kc2koZW5jb2Rlcik7CisKKwlkc2ktPnZtLnBpeGVsY2xvY2sgPSBhZGp1c3RlZC0+
Y2xvY2s7CisJZHNpLT52bS5oYWN0aXZlID0gYWRqdXN0ZWQtPmhkaXNwbGF5OworCWRzaS0+dm0u
aGJhY2tfcG9yY2ggPSBhZGp1c3RlZC0+aHRvdGFsIC0gYWRqdXN0ZWQtPmhzeW5jX2VuZDsKKwlk
c2ktPnZtLmhmcm9udF9wb3JjaCA9IGFkanVzdGVkLT5oc3luY19zdGFydCAtIGFkanVzdGVkLT5o
ZGlzcGxheTsKKwlkc2ktPnZtLmhzeW5jX2xlbiA9IGFkanVzdGVkLT5oc3luY19lbmQgLSBhZGp1
c3RlZC0+aHN5bmNfc3RhcnQ7CisKKwlkc2ktPnZtLnZhY3RpdmUgPSBhZGp1c3RlZC0+dmRpc3Bs
YXk7CisJZHNpLT52bS52YmFja19wb3JjaCA9IGFkanVzdGVkLT52dG90YWwgLSBhZGp1c3RlZC0+
dnN5bmNfZW5kOworCWRzaS0+dm0udmZyb250X3BvcmNoID0gYWRqdXN0ZWQtPnZzeW5jX3N0YXJ0
IC0gYWRqdXN0ZWQtPnZkaXNwbGF5OworCWRzaS0+dm0udnN5bmNfbGVuID0gYWRqdXN0ZWQtPnZz
eW5jX2VuZCAtIGFkanVzdGVkLT52c3luY19zdGFydDsKK30KKworc3RhdGljIHZvaWQgbXRrX2Rz
aV9lbmNvZGVyX2Rpc2FibGUoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQoreworCXN0cnVj
dCBtdGtfZHNpICpkc2kgPSBlbmNvZGVyX3RvX2RzaShlbmNvZGVyKTsKKworCW10a19vdXRwdXRf
ZHNpX2Rpc2FibGUoZHNpKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2RzaV9lbmNvZGVyX2VuYWJs
ZShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCit7CisJc3RydWN0IG10a19kc2kgKmRzaSA9
IGVuY29kZXJfdG9fZHNpKGVuY29kZXIpOworCisJbXRrX291dHB1dF9kc2lfZW5hYmxlKGRzaSk7
Cit9CisKK3N0YXRpYyBlbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzIG10a19kc2lfY29ubmVjdG9y
X2RldGVjdCgKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBib29sIGZvcmNlKQor
eworCXJldHVybiBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsKK30KKworc3RhdGljIHZvaWQg
bXRrX2RzaV9jb25uZWN0b3JfZGVzdHJveShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9y
KQoreworCWRybV9jb25uZWN0b3JfdW5yZWdpc3Rlcihjb25uZWN0b3IpOworCWRybV9jb25uZWN0
b3JfY2xlYW51cChjb25uZWN0b3IpOworfQorCitzdGF0aWMgaW50IG10a19kc2lfY29ubmVjdG9y
X2dldF9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQoreworCXN0cnVjdCBt
dGtfZHNpICpkc2kgPSBjb25uZWN0b3JfdG9fZHNpKGNvbm5lY3Rvcik7CisKKwlyZXR1cm4gZHJt
X3BhbmVsX2dldF9tb2Rlcyhkc2ktPnBhbmVsKTsKK30KKworc3RhdGljIHN0cnVjdCBkcm1fZW5j
b2RlciAqbXRrX2RzaV9jb25uZWN0b3JfYmVzdF9lbmNvZGVyKAorCQlzdHJ1Y3QgZHJtX2Nvbm5l
Y3RvciAqY29ubmVjdG9yKQoreworCXN0cnVjdCBtdGtfZHNpICpkc2kgPSBjb25uZWN0b3JfdG9f
ZHNpKGNvbm5lY3Rvcik7CisKKwlyZXR1cm4gJmRzaS0+ZW5jb2RlcjsKK30KKworc3RhdGljIGNv
bnN0IHN0cnVjdCBkcm1fZW5jb2Rlcl9oZWxwZXJfZnVuY3MgbXRrX2RzaV9lbmNvZGVyX2hlbHBl
cl9mdW5jcyA9IHsKKwkubW9kZV9maXh1cCA9IG10a19kc2lfZW5jb2Rlcl9tb2RlX2ZpeHVwLAor
CS5tb2RlX3NldCA9IG10a19kc2lfZW5jb2Rlcl9tb2RlX3NldCwKKwkuZGlzYWJsZSA9IG10a19k
c2lfZW5jb2Rlcl9kaXNhYmxlLAorCS5lbmFibGUgPSBtdGtfZHNpX2VuY29kZXJfZW5hYmxlLAor
fTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX2Z1bmNzIG10a19kc2lfY29u
bmVjdG9yX2Z1bmNzID0geworCS5kcG1zID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2Rw
bXMsCisJLmRldGVjdCA9IG10a19kc2lfY29ubmVjdG9yX2RldGVjdCwKKwkuZmlsbF9tb2RlcyA9
IGRybV9oZWxwZXJfcHJvYmVfc2luZ2xlX2Nvbm5lY3Rvcl9tb2RlcywKKwkuZGVzdHJveSA9IG10
a19kc2lfY29ubmVjdG9yX2Rlc3Ryb3ksCisJLnJlc2V0ID0gZHJtX2F0b21pY19oZWxwZXJfY29u
bmVjdG9yX3Jlc2V0LAorCS5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0gZHJtX2F0b21pY19oZWxw
ZXJfY29ubmVjdG9yX2R1cGxpY2F0ZV9zdGF0ZSwKKwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBk
cm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZGVzdHJveV9zdGF0ZSwKK307CisKK3N0YXRpYyBj
b25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MKKwltdGtfZHNpX2Nvbm5lY3Rv
cl9oZWxwZXJfZnVuY3MgPSB7CisJLmdldF9tb2RlcyA9IG10a19kc2lfY29ubmVjdG9yX2dldF9t
b2RlcywKKwkuYmVzdF9lbmNvZGVyID0gbXRrX2RzaV9jb25uZWN0b3JfYmVzdF9lbmNvZGVyLAor
fTsKKworc3RhdGljIGludCBtdGtfZHJtX2F0dGFjaF9sY21fYnJpZGdlKHN0cnVjdCBkcm1fYnJp
ZGdlICpicmlkZ2UsCisJCQkJICAgICBzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCit7CisJ
aW50IHJldDsKKworCWVuY29kZXItPmJyaWRnZSA9IGJyaWRnZTsKKwlicmlkZ2UtPmVuY29kZXIg
PSBlbmNvZGVyOworCXJldCA9IGRybV9icmlkZ2VfYXR0YWNoKGVuY29kZXItPmRldiwgYnJpZGdl
KTsKKwlpZiAocmV0KSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIGF0dGFjaCBicmlkZ2UgdG8g
ZHJtXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlu
dCBtdGtfZHNpX2NyZWF0ZV9jb25uX2VuYyhzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCBzdHJ1Y3Qg
bXRrX2RzaSAqZHNpKQoreworCWludCByZXQ7CisKKwlyZXQgPSBkcm1fZW5jb2Rlcl9pbml0KGRy
bSwgJmRzaS0+ZW5jb2RlciwgJm10a19kc2lfZW5jb2Rlcl9mdW5jcywKKwkJCSAgICAgICBEUk1f
TU9ERV9FTkNPREVSX0RTSSk7CisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBl
bmNvZGVyIGluaXQgdG8gZHJtXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJZHJtX2VuY29kZXJf
aGVscGVyX2FkZCgmZHNpLT5lbmNvZGVyLCAmbXRrX2RzaV9lbmNvZGVyX2hlbHBlcl9mdW5jcyk7
CisKKwlkc2ktPmVuY29kZXIucG9zc2libGVfY3J0Y3MgPSAxOworCisJLyogUHJlLWVtcHQgRFAg
Y29ubmVjdG9yIGNyZWF0aW9uIGlmIHRoZXJlJ3MgYSBicmlkZ2UgKi8KKwlyZXQgPSBtdGtfZHJt
X2F0dGFjaF9sY21fYnJpZGdlKGRzaS0+YnJpZGdlLCAmZHNpLT5lbmNvZGVyKTsKKwlpZiAoIXJl
dCkKKwkJcmV0dXJuIDA7CisKKwlyZXQgPSBkcm1fY29ubmVjdG9yX2luaXQoZHJtLCAmZHNpLT5j
b25uLCAmbXRrX2RzaV9jb25uZWN0b3JfZnVuY3MsCisJCQkJIERSTV9NT0RFX0NPTk5FQ1RPUl9E
U0kpOworCWlmIChyZXQpIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gY29ubmVjdG9yIGluaXQg
dG8gZHJtXG4iKTsKKwkJZ290byBlcnJjb25uZWN0b3I7CisJfQorCisJZHJtX2Nvbm5lY3Rvcl9o
ZWxwZXJfYWRkKCZkc2ktPmNvbm4sICZtdGtfZHNpX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MpOwor
CisJcmV0ID0gZHJtX2Nvbm5lY3Rvcl9yZWdpc3RlcigmZHNpLT5jb25uKTsKKwlpZiAocmV0KSB7
CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIGNvbm5lY3RvciByZWdpc3RlciB0byBkcm1cbiIpOwor
CQlnb3RvIGVycmNvbm5lY3RvcnJlZzsKKwl9CisKKwlkc2ktPmNvbm4uZHBtcyA9IERSTV9NT0RF
X0RQTVNfT0ZGOworCWRybV9tb2RlX2Nvbm5lY3Rvcl9hdHRhY2hfZW5jb2RlcigmZHNpLT5jb25u
LCAmZHNpLT5lbmNvZGVyKTsKKworCWlmIChkc2ktPnBhbmVsKSB7CisJCXJldCA9IGRybV9wYW5l
bF9hdHRhY2goZHNpLT5wYW5lbCwgJmRzaS0+Y29ubik7CisJCWlmIChyZXQpIHsKKwkJCURSTV9F
UlJPUigiRmFpbGVkIHRvIGF0dGFjdCBwYW5lbCB0byBkcm1cbiIpOworCQkJcmV0dXJuIHJldDsK
KwkJfQorCX0KKwlyZXR1cm4gMDsKKworZXJyY29ubmVjdG9yOgorCWRybV9lbmNvZGVyX2NsZWFu
dXAoJmRzaS0+ZW5jb2Rlcik7CitlcnJjb25uZWN0b3JyZWc6CisJZHJtX2Nvbm5lY3Rvcl9jbGVh
bnVwKCZkc2ktPmNvbm4pOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgbXRrX2Rz
aV9kZXN0cm95X2Nvbm5fZW5jKHN0cnVjdCBtdGtfZHNpICpkc2kpCit7CisJZHJtX2VuY29kZXJf
Y2xlYW51cCgmZHNpLT5lbmNvZGVyKTsKKwlkcm1fY29ubmVjdG9yX3VucmVnaXN0ZXIoJmRzaS0+
Y29ubik7CisJZHJtX2Nvbm5lY3Rvcl9jbGVhbnVwKCZkc2ktPmNvbm4pOworfQorCitzdGF0aWMg
dm9pZCBtdGtfZHNpX2RkcF9zdGFydChzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKQoreworCXN0
cnVjdCBtdGtfZHNpICpkc2kgPSBjb250YWluZXJfb2YoY29tcCwgc3RydWN0IG10a19kc2ksIGRk
cF9jb21wKTsKKworCW10a19kc2lfcG93ZXJvbihkc2kpOworfQorCitzdGF0aWMgdm9pZCBtdGtf
ZHNpX2RkcF9zdG9wKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXApCit7CisJc3RydWN0IG10a19k
c2kgKmRzaSA9IGNvbnRhaW5lcl9vZihjb21wLCBzdHJ1Y3QgbXRrX2RzaSwgZGRwX2NvbXApOwor
CisJbXRrX2RzaV9wb3dlcm9mZihkc2kpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG10a19k
ZHBfY29tcF9mdW5jcyBtdGtfZHNpX2Z1bmNzID0geworCS5zdGFydCA9IG10a19kc2lfZGRwX3N0
YXJ0LAorCS5zdG9wID0gbXRrX2RzaV9kZHBfc3RvcCwKK307CisKK3N0YXRpYyBpbnQgbXRrX2Rz
aV9iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqbWFzdGVyLCB2b2lkICpk
YXRhKQoreworCWludCByZXQ7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IGRhdGE7CisJc3Ry
dWN0IG10a19kc2kgKmRzaSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJcmV0ID0gbXRrX2Rk
cF9jb21wX3JlZ2lzdGVyKGRybSwgJmRzaS0+ZGRwX2NvbXApOworCWlmIChyZXQgPCAwKSB7CisJ
CWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIGNvbXBvbmVudCAlczogJWRcbiIsCisJ
CQlkZXYtPm9mX25vZGUtPmZ1bGxfbmFtZSwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwly
ZXQgPSBtdGtfZHNpX2NyZWF0ZV9jb25uX2VuYyhkcm0sIGRzaSk7CisJaWYgKHJldCkgeworCQlE
Uk1fRVJST1IoIkVuY29kZXIgY3JlYXRlIGZhaWxlZCB3aXRoICVkXG4iLCByZXQpOworCQlnb3Rv
IGVycl91bnJlZ2lzdGVyOworCX0KKworCXJldHVybiAwOworCitlcnJfdW5yZWdpc3RlcjoKKwlt
dGtfZGRwX2NvbXBfdW5yZWdpc3Rlcihkcm0sICZkc2ktPmRkcF9jb21wKTsKKwlyZXR1cm4gcmV0
OworfQorCitzdGF0aWMgdm9pZCBtdGtfZHNpX3VuYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0
cnVjdCBkZXZpY2UgKm1hc3RlciwKKwkJCSAgIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRybV9k
ZXZpY2UgKmRybSA9IGRhdGE7CisJc3RydWN0IG10a19kc2kgKmRzaTsKKworCWRzaSA9IHBsYXRm
b3JtX2dldF9kcnZkYXRhKHRvX3BsYXRmb3JtX2RldmljZShkZXYpKTsKKwltdGtfZHNpX2Rlc3Ry
b3lfY29ubl9lbmMoZHNpKTsKKwltdGtfZGRwX2NvbXBfdW5yZWdpc3Rlcihkcm0sICZkc2ktPmRk
cF9jb21wKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21wb25lbnRfb3BzIG10a19kc2lf
Y29tcG9uZW50X29wcyA9IHsKKwkuYmluZCA9IG10a19kc2lfYmluZCwKKwkudW5iaW5kID0gbXRr
X2RzaV91bmJpbmQsCit9OworCitzdGF0aWMgaW50IG10a19kc2lfcHJvYmUoc3RydWN0IHBsYXRm
b3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgbXRrX2RzaSAqZHNpOworCXN0cnVjdCBkZXZp
Y2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0IGRldmljZV9ub2RlICpyZW1vdGVfbm9kZSwg
KmVuZHBvaW50OworCXN0cnVjdCByZXNvdXJjZSAqcmVnczsKKwlpbnQgY29tcF9pZDsKKwlpbnQg
cmV0OworCisJZHNpID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpkc2kpLCBHRlBfS0VSTkVM
KTsKKwlkc2ktPm1vZGVfZmxhZ3MgPSBNSVBJX0RTSV9NT0RFX1ZJREVPIHwgTUlQSV9EU0lfTU9E
RV9WSURFT19TWU5DX1BVTFNFOworCWRzaS0+Zm9ybWF0ID0gTUlQSV9EU0lfRk1UX1JHQjg4ODsK
Kwlkc2ktPmxhbmVzID0gNDsKKworCWVuZHBvaW50ID0gb2ZfZ3JhcGhfZ2V0X25leHRfZW5kcG9p
bnQoZGV2LT5vZl9ub2RlLCBOVUxMKTsKKwlpZiAoZW5kcG9pbnQpIHsKKwkJcmVtb3RlX25vZGUg
PSBvZl9ncmFwaF9nZXRfcmVtb3RlX3BvcnRfcGFyZW50KGVuZHBvaW50KTsKKwkJaWYgKCFyZW1v
dGVfbm9kZSkgeworCQkJZGV2X2VycihkZXYsICJObyBwYW5lbCBjb25uZWN0ZWRcbiIpOworCQkJ
cmV0dXJuIC1FTk9ERVY7CisJCX0KKworCQlkc2ktPmJyaWRnZSA9IG9mX2RybV9maW5kX2JyaWRn
ZShyZW1vdGVfbm9kZSk7CisJCWRzaS0+cGFuZWwgPSBvZl9kcm1fZmluZF9wYW5lbChyZW1vdGVf
bm9kZSk7CisJCW9mX25vZGVfcHV0KHJlbW90ZV9ub2RlKTsKKwkJaWYgKCFkc2ktPmJyaWRnZSAm
JiAhZHNpLT5wYW5lbCkgeworCQkJZGV2X2luZm8oZGV2LCAiV2FpdGluZyBmb3IgYnJpZGdlIG9y
IHBhbmVsIGRyaXZlclxuIik7CisJCQlyZXR1cm4gLUVQUk9CRV9ERUZFUjsKKwkJfQorCX0KKwor
CWRzaS0+ZW5naW5lX2NsayA9IGRldm1fY2xrX2dldChkZXYsICJlbmdpbmUiKTsKKwlpZiAoSVNf
RVJSKGRzaS0+ZW5naW5lX2NsaykpIHsKKwkJcmV0ID0gUFRSX0VSUihkc2ktPmVuZ2luZV9jbGsp
OworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBnZXQgZW5naW5lIGNsb2NrOiAlZFxuIiwgcmV0
KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlkc2ktPmRpZ2l0YWxfY2xrID0gZGV2bV9jbGtfZ2V0
KGRldiwgImRpZ2l0YWwiKTsKKwlpZiAoSVNfRVJSKGRzaS0+ZGlnaXRhbF9jbGspKSB7CisJCXJl
dCA9IFBUUl9FUlIoZHNpLT5kaWdpdGFsX2Nsayk7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRv
IGdldCBkaWdpdGFsIGNsb2NrOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwly
ZWdzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlk
c2ktPnJlZ3MgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCByZWdzKTsKKwlpZiAoSVNfRVJS
KGRzaS0+cmVncykpIHsKKwkJcmV0ID0gUFRSX0VSUihkc2ktPnJlZ3MpOworCQlkZXZfZXJyKGRl
diwgIkZhaWxlZCB0byBpb3JlbWFwIG1lbW9yeTogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7
CisJfQorCisJZHNpLT5waHkgPSBkZXZtX3BoeV9nZXQoZGV2LCAiZHBoeSIpOworCWlmIChJU19F
UlIoZHNpLT5waHkpKSB7CisJCXJldCA9IFBUUl9FUlIoZHNpLT5waHkpOworCQlkZXZfZXJyKGRl
diwgIkZhaWxlZCB0byBnZXQgTUlQSS1EUEhZOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsK
Kwl9CisKKwljb21wX2lkID0gbXRrX2RkcF9jb21wX2dldF9pZChkZXYtPm9mX25vZGUsIE1US19E
U0kpOworCWlmIChjb21wX2lkIDwgMCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBpZGVu
dGlmeSBieSBhbGlhczogJWRcbiIsIGNvbXBfaWQpOworCQlyZXR1cm4gY29tcF9pZDsKKwl9CisK
KwlyZXQgPSBtdGtfZGRwX2NvbXBfaW5pdChkZXYsIGRldi0+b2Zfbm9kZSwgJmRzaS0+ZGRwX2Nv
bXAsIGNvbXBfaWQsCisJCQkJJm10a19kc2lfZnVuY3MpOworCWlmIChyZXQpIHsKKwkJZGV2X2Vy
cihkZXYsICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBjb21wb25lbnQ6ICVkXG4iLCByZXQpOworCQly
ZXR1cm4gcmV0OworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRzaSk7CisKKwly
ZXQgPSBjb21wb25lbnRfYWRkKCZwZGV2LT5kZXYsICZtdGtfZHNpX2NvbXBvbmVudF9vcHMpOwor
CWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gYWRkIERTSSBjb21wb25lbnRc
biIpOworCQlyZXR1cm4gLUVQUk9CRV9ERUZFUjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3Rh
dGljIGludCBtdGtfZHNpX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorewor
CXN0cnVjdCBtdGtfZHNpICpkc2kgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCW10
a19vdXRwdXRfZHNpX2Rpc2FibGUoZHNpKTsKKwljb21wb25lbnRfZGVsKCZwZGV2LT5kZXYsICZt
dGtfZHNpX2NvbXBvbmVudF9vcHMpOworCisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdf
UE0KK3N0YXRpYyBpbnQgbXRrX2RzaV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlz
dHJ1Y3QgbXRrX2RzaSAqZHNpOworCisJZHNpID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlt
dGtfb3V0cHV0X2RzaV9kaXNhYmxlKGRzaSk7CisJRFJNX0RFQlVHX0RSSVZFUigiZHNpIHN1c3Bl
bmQgc3VjY2VzcyFcbiIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2RzaV9y
ZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBtdGtfZHNpICpkc2k7CisKKwlk
c2kgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCW10a19vdXRwdXRfZHNpX2VuYWJsZShkc2kp
OworCURSTV9ERUJVR19EUklWRVIoImRzaSByZXN1bWUgc3VjY2VzcyFcbiIpOworCisJcmV0dXJu
IDA7Cit9CisjZW5kaWYKK3N0YXRpYyBTSU1QTEVfREVWX1BNX09QUyhtdGtfZHNpX3BtX29wcywg
bXRrX2RzaV9zdXNwZW5kLCBtdGtfZHNpX3Jlc3VtZSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg
b2ZfZGV2aWNlX2lkIG10a19kc2lfb2ZfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gIm1l
ZGlhdGVrLG10ODE3My1kc2kiIH0sCisJeyB9LAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RyaXZl
ciBtdGtfZHNpX2RyaXZlciA9IHsKKwkucHJvYmUgPSBtdGtfZHNpX3Byb2JlLAorCS5yZW1vdmUg
PSBtdGtfZHNpX3JlbW92ZSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJtdGstZHNpIiwKKwkJ
Lm9mX21hdGNoX3RhYmxlID0gbXRrX2RzaV9vZl9tYXRjaCwKKwkJLnBtID0gJm10a19kc2lfcG1f
b3BzLAorCX0sCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19k
c2kuaCBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHNpLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uMGMzNzNjNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMv
Z3B1L2RybS9tZWRpYXRlay9tdGtfZHNpLmgKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHly
aWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAy
IGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisg
KiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX01US19EU0lfSF8KKyNkZWZpbmUg
X01US19EU0lfSF8KKworI2luY2x1ZGUgPGRybS9kcm1fY3J0Yy5oPgorCisjaW5jbHVkZSAibXRr
X2RybV9kZHBfY29tcC5oIgorCitzdHJ1Y3QgcGh5OworCitzdHJ1Y3QgbXRrX2RzaSB7CisJc3Ry
dWN0IG10a19kZHBfY29tcCBkZHBfY29tcDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0
IGRybV9lbmNvZGVyIGVuY29kZXI7CisJc3RydWN0IGRybV9jb25uZWN0b3IgY29ubjsKKwlzdHJ1
Y3QgZHJtX3BhbmVsICpwYW5lbDsKKwlzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlOworCXN0cnVj
dCBwaHkgKnBoeTsKKworCXZvaWQgX19pb21lbSAqcmVnczsKKworCXN0cnVjdCBjbGsgKmVuZ2lu
ZV9jbGs7CisJc3RydWN0IGNsayAqZGlnaXRhbF9jbGs7CisKKwl1MzIgZGF0YV9yYXRlOworCisJ
dW5zaWduZWQgbG9uZyBtb2RlX2ZsYWdzOworCWVudW0gbWlwaV9kc2lfcGl4ZWxfZm9ybWF0IGZv
cm1hdDsKKwl1bnNpZ25lZCBpbnQgbGFuZXM7CisJc3RydWN0IHZpZGVvbW9kZSB2bTsKKwlpbnQg
cmVmY291bnQ7CisJYm9vbCBlbmFibGVkOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbXRr
X2RzaSAqZW5jb2Rlcl90b19kc2koc3RydWN0IGRybV9lbmNvZGVyICplKQoreworCXJldHVybiBj
b250YWluZXJfb2YoZSwgc3RydWN0IG10a19kc2ksIGVuY29kZXIpOworfQorCitzdGF0aWMgaW5s
aW5lIHN0cnVjdCBtdGtfZHNpICpjb25uZWN0b3JfdG9fZHNpKHN0cnVjdCBkcm1fY29ubmVjdG9y
ICpjKQoreworCXJldHVybiBjb250YWluZXJfb2YoYywgc3RydWN0IG10a19kc2ksIGNvbm4pOwor
fQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfbWlw
aV90eC5jIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19taXBpX3R4LmMKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRhZmQwNAotLS0gL2Rldi9udWxsCisrKyBiL2Ry
aXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfbWlwaV90eC5jCkBAIC0wLDAgKzEsMzc3IEBACisv
KgorICogQ29weXJpZ2h0IChjKSAyMDE1IE1lZGlhVGVrIEluYy4KKyAqCisgKiBUaGlzIHByb2dy
YW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlm
eQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Ns
ay5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNp
bmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2Uu
aD4KKyNpbmNsdWRlIDxsaW51eC9waHkvcGh5Lmg+CisKKyNpbmNsdWRlICJtdGtfbWlwaV90eC5o
IgorCisjZGVmaW5lIE1JUElUWF9EU0lfQ09OCQkweDAwCisjZGVmaW5lIFJHX0RTSV9MRE9DT1JF
X0VOCQlCSVQoMCkKKyNkZWZpbmUgUkdfRFNJX0NLR19MRE9PVVRfRU4JCUJJVCgxKQorI2RlZmlu
ZSBSR19EU0lfQkNMS19TRUwJCQkoMyA8PCAyKQorI2RlZmluZSBSR19EU0lfTERfSURYX1NFTAkJ
KDcgPDwgNCkKKyNkZWZpbmUgUkdfRFNJX1BIWUNMS19TRUwJCSgyIDw8IDgpCisjZGVmaW5lIFJH
X0RTSV9EU0lDTEtfRlJFUV9TRUwJCUJJVCgxMCkKKyNkZWZpbmUgUkdfRFNJX0xQVFhfQ0xNUF9F
TgkJQklUKDExKQorCisjZGVmaW5lIE1JUElUWF9EU0lfQ0xPQ0tfTEFORQkweDA0CisjZGVmaW5l
IFJHX0RTSV9MTlRDX0xET09VVF9FTgkJQklUKDApCisjZGVmaW5lIFJHX0RTSV9MTlRDX0NLTEFO
RV9FTgkJQklUKDEpCisjZGVmaW5lIFJHX0RTSV9MTlRDX0xQVFhfSVBMVVMxCQlCSVQoMikKKyNk
ZWZpbmUgUkdfRFNJX0xOVENfTFBUWF9JUExVUzIJCUJJVCgzKQorI2RlZmluZSBSR19EU0lfTE5U
Q19MUFRYX0lNSU5VUwkJQklUKDQpCisjZGVmaW5lIFJHX0RTSV9MTlRDX0xQQ0RfSVBMVVMJCUJJ
VCg1KQorI2RlZmluZSBSR19EU0lfTE5UQ19MUENEX0lNTFVTCQlCSVQoNikKKyNkZWZpbmUgUkdf
RFNJX0xOVENfUlRfQ09ERQkJKDB4ZiA8PCA4KQorCisjZGVmaW5lIE1JUElUWF9EU0lfREFUQV9M
QU5FMAkweDA4CisjZGVmaW5lIFJHX0RTSV9MTlQwX0xET09VVF9FTgkJQklUKDApCisjZGVmaW5l
IFJHX0RTSV9MTlQwX0NLTEFORV9FTgkJQklUKDEpCisjZGVmaW5lIFJHX0RTSV9MTlQwX0xQVFhf
SVBMVVMxCQlCSVQoMikKKyNkZWZpbmUgUkdfRFNJX0xOVDBfTFBUWF9JUExVUzIJCUJJVCgzKQor
I2RlZmluZSBSR19EU0lfTE5UMF9MUFRYX0lNSU5VUwkJQklUKDQpCisjZGVmaW5lIFJHX0RTSV9M
TlQwX0xQQ0RfSVBMVVMJCUJJVCg1KQorI2RlZmluZSBSR19EU0lfTE5UMF9MUENEX0lNSU5VUwkJ
QklUKDYpCisjZGVmaW5lIFJHX0RTSV9MTlQwX1JUX0NPREUJCSgweGYgPDwgOCkKKworI2RlZmlu
ZSBNSVBJVFhfRFNJX0RBVEFfTEFORTEJMHgwYworI2RlZmluZSBSR19EU0lfTE5UMV9MRE9PVVRf
RU4JCUJJVCgwKQorI2RlZmluZSBSR19EU0lfTE5UMV9DS0xBTkVfRU4JCUJJVCgxKQorI2RlZmlu
ZSBSR19EU0lfTE5UMV9MUFRYX0lQTFVTMQkJQklUKDIpCisjZGVmaW5lIFJHX0RTSV9MTlQxX0xQ
VFhfSVBMVVMyCQlCSVQoMykKKyNkZWZpbmUgUkdfRFNJX0xOVDFfTFBUWF9JTUlOVVMJCUJJVCg0
KQorI2RlZmluZSBSR19EU0lfTE5UMV9MUENEX0lQTFVTCQlCSVQoNSkKKyNkZWZpbmUgUkdfRFNJ
X0xOVDFfTFBDRF9JTUlOVVMJCUJJVCg2KQorI2RlZmluZSBSR19EU0lfTE5UMV9SVF9DT0RFCQko
MHhmIDw8IDgpCisKKyNkZWZpbmUgTUlQSVRYX0RTSV9EQVRBX0xBTkUyCTB4MTAKKyNkZWZpbmUg
UkdfRFNJX0xOVDJfTERPT1VUX0VOCQlCSVQoMCkKKyNkZWZpbmUgUkdfRFNJX0xOVDJfQ0tMQU5F
X0VOCQlCSVQoMSkKKyNkZWZpbmUgUkdfRFNJX0xOVDJfTFBUWF9JUExVUzEJCUJJVCgyKQorI2Rl
ZmluZSBSR19EU0lfTE5UMl9MUFRYX0lQTFVTMgkJQklUKDMpCisjZGVmaW5lIFJHX0RTSV9MTlQy
X0xQVFhfSU1JTlVTCQlCSVQoNCkKKyNkZWZpbmUgUkdfRFNJX0xOVDJfTFBDRF9JUExVUwkJQklU
KDUpCisjZGVmaW5lIFJHX0RTSV9MTlQyX0xQQ0RfSU1JTlVTCQlCSVQoNikKKyNkZWZpbmUgUkdf
RFNJX0xOVDJfUlRfQ09ERQkJKDB4ZiA8PCA4KQorCisjZGVmaW5lIE1JUElUWF9EU0lfREFUQV9M
QU5FMwkweDE0CisjZGVmaW5lIFJHX0RTSV9MTlQzX0xET09VVF9FTgkJQklUKDApCisjZGVmaW5l
IFJHX0RTSV9MTlQzX0NLTEFORV9FTgkJQklUKDEpCisjZGVmaW5lIFJHX0RTSV9MTlQzX0xQVFhf
SVBMVVMxCQlCSVQoMikKKyNkZWZpbmUgUkdfRFNJX0xOVDNfTFBUWF9JUExVUzIJCUJJVCgzKQor
I2RlZmluZSBSR19EU0lfTE5UM19MUFRYX0lNSU5VUwkJQklUKDQpCisjZGVmaW5lIFJHX0RTSV9M
TlQzX0xQQ0RfSVBMVVMJCUJJVCg1KQorI2RlZmluZSBSR19EU0lfTE5UM19MUENEX0lNSU5VUwkJ
QklUKDYpCisjZGVmaW5lIFJHX0RTSV9MTlQzX1JUX0NPREUJCSgweGYgPDwgOCkKKworI2RlZmlu
ZSBNSVBJVFhfRFNJX1RPUF9DT04JMHg0MAorI2RlZmluZSBSR19EU0lfTE5UX0lOVFJfRU4JCUJJ
VCgwKQorI2RlZmluZSBSR19EU0lfTE5UX0hTX0JJQVNfRU4JCUJJVCgxKQorI2RlZmluZSBSR19E
U0lfTE5UX0lNUF9DQUxfRU4JCUJJVCgyKQorI2RlZmluZSBSR19EU0lfTE5UX1RFU1RNT0RFX0VO
CQlCSVQoMykKKyNkZWZpbmUgUkdfRFNJX0xOVF9JTVBfQ0FMX0NPREUJCSgweGYgPDwgNCkKKyNk
ZWZpbmUgUkdfRFNJX0xOVF9BSU9fU0VMCQkoNyA8PCA4KQorI2RlZmluZSBSR19EU0lfUEFEX1RJ
RV9MT1dfRU4JCUJJVCgxMSkKKyNkZWZpbmUgUkdfRFNJX0RFQlVHX0lOUFVUX0VOCQlCSVQoMTIp
CisjZGVmaW5lIFJHX0RTSV9QUkVTRVJWRQkJCSg3IDw8IDEzKQorCisjZGVmaW5lIE1JUElUWF9E
U0lfQkdfQ09OCTB4NDQKKyNkZWZpbmUgUkdfRFNJX0JHX0NPUkVfRU4JCUJJVCgwKQorI2RlZmlu
ZSBSR19EU0lfQkdfQ0tFTgkJCUJJVCgxKQorI2RlZmluZSBSR19EU0lfQkdfRElWCQkJKDB4MyA8
PCAyKQorI2RlZmluZSBSR19EU0lfQkdfRkFTVF9DSEFSR0UJCUJJVCg0KQorI2RlZmluZSBSR19E
U0lfVk9VVF9NU0sJCQkoMHgzZmZmZiA8PCA1KQorI2RlZmluZSBSR19EU0lfVjEyX1NFTAkJCSg3
IDw8IDUpCisjZGVmaW5lIFJHX0RTSV9WMTBfU0VMCQkJKDcgPDwgOCkKKyNkZWZpbmUgUkdfRFNJ
X1YwNzJfU0VMCQkJKDcgPDwgMTEpCisjZGVmaW5lIFJHX0RTSV9WMDRfU0VMCQkJKDcgPDwgMTQp
CisjZGVmaW5lIFJHX0RTSV9WMDMyX1NFTAkJCSg3IDw8IDE3KQorI2RlZmluZSBSR19EU0lfVjAy
X1NFTAkJCSg3IDw8IDIwKQorI2RlZmluZSBSR19EU0lfQkdfUjFfVFJJTQkJKDB4ZiA8PCAyNCkK
KyNkZWZpbmUgUkdfRFNJX0JHX1IyX1RSSU0JCSgweGYgPDwgMjgpCisKKyNkZWZpbmUgTUlQSVRY
X0RTSV9QTExfQ09OMAkweDUwCisjZGVmaW5lIFJHX0RTSV9NUFBMTF9QTExfRU4JCUJJVCgwKQor
I2RlZmluZSBSR19EU0lfTVBQTExfRElWX01TSwkJKDB4MWZmIDw8IDEpCisjZGVmaW5lIFJHX0RT
SV9NUFBMTF9QUkVESVYJCSgzIDw8IDEpCisjZGVmaW5lIFJHX0RTSV9NUFBMTF9UWERJVjAJCSgz
IDw8IDMpCisjZGVmaW5lIFJHX0RTSV9NUFBMTF9UWERJVjEJCSgzIDw8IDUpCisjZGVmaW5lIFJH
X0RTSV9NUFBMTF9QT1NESVYJCSg3IDw8IDcpCisjZGVmaW5lIFJHX0RTSV9NUFBMTF9NT05WQ19F
TgkJQklUKDEwKQorI2RlZmluZSBSR19EU0lfTVBQTExfTU9OUkVGX0VOCQlCSVQoMTEpCisjZGVm
aW5lIFJHX0RTSV9NUFBMTF9WT0RfRU4JCUJJVCgxMikKKworI2RlZmluZSBNSVBJVFhfRFNJX1BM
TF9DT04xCTB4NTQKKyNkZWZpbmUgUkdfRFNJX01QUExMX1NETV9GUkFfRU4JCUJJVCgwKQorI2Rl
ZmluZSBSR19EU0lfTVBQTExfU0RNX1NTQ19QSF9JTklUCUJJVCgxKQorI2RlZmluZSBSR19EU0lf
TVBQTExfU0RNX1NTQ19FTgkJQklUKDIpCisjZGVmaW5lIFJHX0RTSV9NUFBMTF9TRE1fU1NDX1BS
RAkoMHhmZmZmIDw8IDE2KQorCisjZGVmaW5lIE1JUElUWF9EU0lfUExMX0NPTjIJMHg1OAorCisj
ZGVmaW5lIE1JUElUWF9EU0lfUExMX1BXUgkweDY4CisjZGVmaW5lIFJHX0RTSV9NUFBMTF9TRE1f
UFdSX09OCQlCSVQoMCkKKyNkZWZpbmUgUkdfRFNJX01QUExMX1NETV9JU09fRU4JCUJJVCgxKQor
I2RlZmluZSBSR19EU0lfTVBQTExfU0RNX1BXUl9BQ0sJQklUKDgpCisKKyNkZWZpbmUgTUlQSVRY
X0RTSV9TV19DVFJMCTB4ODAKKyNkZWZpbmUgU1dfQ1RSTF9FTgkJCUJJVCgwKQorCisjZGVmaW5l
IE1JUElUWF9EU0lfU1dfQ1RSTF9DT04wCTB4ODQKKyNkZWZpbmUgU1dfTE5UQ19MUFRYX1BSRV9P
RQkJQklUKDApCisjZGVmaW5lIFNXX0xOVENfTFBUWF9PRQkJCUJJVCgxKQorI2RlZmluZSBTV19M
TlRDX0xQVFhfUAkJCUJJVCgyKQorI2RlZmluZSBTV19MTlRDX0xQVFhfTgkJCUJJVCgzKQorI2Rl
ZmluZSBTV19MTlRDX0hTVFhfUFJFX09FCQlCSVQoNCkKKyNkZWZpbmUgU1dfTE5UQ19IU1RYX09F
CQkJQklUKDUpCisjZGVmaW5lIFNXX0xOVENfSFNUWF9aRVJPQ0xLCQlCSVQoNikKKyNkZWZpbmUg
U1dfTE5UMF9MUFRYX1BSRV9PRQkJQklUKDcpCisjZGVmaW5lIFNXX0xOVDBfTFBUWF9PRQkJCUJJ
VCg4KQorI2RlZmluZSBTV19MTlQwX0xQVFhfUAkJCUJJVCg5KQorI2RlZmluZSBTV19MTlQwX0xQ
VFhfTgkJCUJJVCgxMCkKKyNkZWZpbmUgU1dfTE5UMF9IU1RYX1BSRV9PRQkJQklUKDExKQorI2Rl
ZmluZSBTV19MTlQwX0hTVFhfT0UJCQlCSVQoMTIpCisjZGVmaW5lIFNXX0xOVDBfTFBSWF9FTgkJ
CUJJVCgxMykKKyNkZWZpbmUgU1dfTE5UMV9MUFRYX1BSRV9PRQkJQklUKDE0KQorI2RlZmluZSBT
V19MTlQxX0xQVFhfT0UJCQlCSVQoMTUpCisjZGVmaW5lIFNXX0xOVDFfTFBUWF9QCQkJQklUKDE2
KQorI2RlZmluZSBTV19MTlQxX0xQVFhfTgkJCUJJVCgxNykKKyNkZWZpbmUgU1dfTE5UMV9IU1RY
X1BSRV9PRQkJQklUKDE4KQorI2RlZmluZSBTV19MTlQxX0hTVFhfT0UJCQlCSVQoMTkpCisjZGVm
aW5lIFNXX0xOVDJfTFBUWF9QUkVfT0UJCUJJVCgyMCkKKyNkZWZpbmUgU1dfTE5UMl9MUFRYX09F
CQkJQklUKDIxKQorI2RlZmluZSBTV19MTlQyX0xQVFhfUAkJCUJJVCgyMikKKyNkZWZpbmUgU1df
TE5UMl9MUFRYX04JCQlCSVQoMjMpCisjZGVmaW5lIFNXX0xOVDJfSFNUWF9QUkVfT0UJCUJJVCgy
NCkKKyNkZWZpbmUgU1dfTE5UMl9IU1RYX09FCQkJQklUKDI1KQorCitzdHJ1Y3QgbXRrX21pcGlf
dHggeworCXZvaWQgX19pb21lbSAqcmVnczsKKwl1bnNpZ25lZCBpbnQgZGF0YV9yYXRlOworfTsK
Kworc3RhdGljIHZvaWQgbXRrX21pcGlfdHhfbWFzayhzdHJ1Y3QgbXRrX21pcGlfdHggKm1pcGlf
dHgsIHUzMiBvZmZzZXQsIHUzMiBtYXNrLAorCQkJICAgICB1MzIgZGF0YSkKK3sKKwl1MzIgdGVt
cCA9IHJlYWRsKG1pcGlfdHgtPnJlZ3MgKyBvZmZzZXQpOworCisJd3JpdGVsKCh0ZW1wICYgfm1h
c2spIHwgKGRhdGEgJiBtYXNrKSwgbWlwaV90eC0+cmVncyArIG9mZnNldCk7Cit9CisKK2ludCBt
dGtfbWlwaV90eF9zZXRfZGF0YV9yYXRlKHN0cnVjdCBwaHkgKnBoeSwgdW5zaWduZWQgaW50IGRh
dGFfcmF0ZSkKK3sKKwlzdHJ1Y3QgbXRrX21pcGlfdHggKm1pcGlfdHggPSBwaHlfZ2V0X2RydmRh
dGEocGh5KTsKKworCWlmIChkYXRhX3JhdGUgPCA1MCB8fCBkYXRhX3JhdGUgPiAxMjUwKQorCQly
ZXR1cm4gLUVJTlZBTDsKKworCW1pcGlfdHgtPmRhdGFfcmF0ZSA9IGRhdGFfcmF0ZTsKKworCXJl
dHVybiAwOworfQorCitzdGF0aWMgaW50IG10a19taXBpX3R4X3Bvd2VyX29uKHN0cnVjdCBwaHkg
KnBoeSkKK3sKKwlzdHJ1Y3QgbXRrX21pcGlfdHggKm1pcGlfdHggPSBwaHlfZ2V0X2RydmRhdGEo
cGh5KTsKKwl1bnNpZ25lZCBpbnQgdHhkaXYsIHR4ZGl2MCwgdHhkaXYxOworCXU2NCBwY3c7CisK
KwlpZiAobWlwaV90eC0+ZGF0YV9yYXRlID49IDUwMCkgeworCQl0eGRpdiA9IDE7CisJCXR4ZGl2
MCA9IDA7CisJCXR4ZGl2MSA9IDA7CisJfSBlbHNlIGlmIChtaXBpX3R4LT5kYXRhX3JhdGUgPj0g
MjUwKSB7CisJCXR4ZGl2ID0gMjsKKwkJdHhkaXYwID0gMTsKKwkJdHhkaXYxID0gMDsKKwl9IGVs
c2UgaWYgKG1pcGlfdHgtPmRhdGFfcmF0ZSA+PSAxMjUpIHsKKwkJdHhkaXYgPSA0OworCQl0eGRp
djAgPSAyOworCQl0eGRpdjEgPSAwOworCX0gZWxzZSBpZiAobWlwaV90eC0+ZGF0YV9yYXRlID4g
NjIpIHsKKwkJdHhkaXYgPSA4OworCQl0eGRpdjAgPSAyOworCQl0eGRpdjEgPSAxOworCX0gZWxz
ZSBpZiAobWlwaV90eC0+ZGF0YV9yYXRlID49IDUwKSB7CisJCXR4ZGl2ID0gMTY7CisJCXR4ZGl2
MCA9IDI7CisJCXR4ZGl2MSA9IDI7CisJfSBlbHNlIHsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQor
CisJbXRrX21pcGlfdHhfbWFzayhtaXBpX3R4LCBNSVBJVFhfRFNJX0JHX0NPTiwKKwkJCSBSR19E
U0lfVk9VVF9NU0sgfCBSR19EU0lfQkdfQ0tFTiB8IFJHX0RTSV9CR19DT1JFX0VOLAorCQkJICg0
IDw8IDIwKSB8ICg0IDw8IDE3KSB8ICg0IDw8IDE0KSB8CisJCQkgKDQgPDwgMTEpIHwgKDQgPDwg
OCkgfCAoNCA8PCA1KSB8CisJCQkgUkdfRFNJX0JHX0NLRU4gfCBSR19EU0lfQkdfQ09SRV9FTik7
CisKKwl1c2xlZXBfcmFuZ2UoMzAsIDEwMCk7CisKKwltdGtfbWlwaV90eF9tYXNrKG1pcGlfdHgs
IE1JUElUWF9EU0lfVE9QX0NPTiwKKwkJCSBSR19EU0lfTE5UX0lNUF9DQUxfQ09ERSB8IFJHX0RT
SV9MTlRfSFNfQklBU19FTiwKKwkJCSAoOCA8PCA0KSB8IFJHX0RTSV9MTlRfSFNfQklBU19FTik7
CisKKwltdGtfbWlwaV90eF9tYXNrKG1pcGlfdHgsIE1JUElUWF9EU0lfQ09OLAorCQkJIFJHX0RT
SV9DS0dfTERPT1VUX0VOIHwgUkdfRFNJX0xET0NPUkVfRU4sCisJCQkgUkdfRFNJX0NLR19MRE9P
VVRfRU4gfCBSR19EU0lfTERPQ09SRV9FTik7CisKKwltdGtfbWlwaV90eF9tYXNrKG1pcGlfdHgs
IE1JUElUWF9EU0lfUExMX1BXUiwKKwkJCSBSR19EU0lfTVBQTExfU0RNX1BXUl9PTiB8IFJHX0RT
SV9NUFBMTF9TRE1fSVNPX0VOLAorCQkJIFJHX0RTSV9NUFBMTF9TRE1fUFdSX09OKTsKKworCW10
a19taXBpX3R4X21hc2sobWlwaV90eCwgTUlQSVRYX0RTSV9QTExfQ09OMCwgUkdfRFNJX01QUExM
X1BMTF9FTiwgMCk7CisKKwltdGtfbWlwaV90eF9tYXNrKG1pcGlfdHgsIE1JUElUWF9EU0lfUExM
X0NPTjAsCisJCQkgUkdfRFNJX01QUExMX1RYRElWMCB8IFJHX0RTSV9NUFBMTF9UWERJVjEgfAor
CQkJIFJHX0RTSV9NUFBMTF9QUkVESVYsCisJCQkgKHR4ZGl2MCA8PCAzKSB8ICh0eGRpdjEgPDwg
NSkpOworCisJLyoKKwkgKiBQTEwgUENXIGNvbmZpZworCSAqIFBDVyBiaXQgMjR+MzAgPSBpbnRl
Z2VyIHBhcnQgb2YgcGN3CisJICogUENXIGJpdCAwfjIzID0gZnJhY3Rpb25hbCBwYXJ0IG9mIHBj
dworCSAqIHBjdyA9IGRhdGFfUmF0ZSo0KnR4ZGl2LyhSZWZfY2xrKjIpOworCSAqIFBvc3QgRElW
ID00LCBzbyBuZWVkIGRhdGFfUmF0ZSo0CisJICogUmVmX2NsayBpcyAyNk1IegorCSAqLworCXBj
dyA9ICgodTY0KSBtaXBpX3R4LT5kYXRhX3JhdGUgKiB0eGRpdikgPDwgMjQ7CisJcGN3IC89IDEz
OworCXdyaXRlbChwY3csIG1pcGlfdHgtPnJlZ3MgKyBNSVBJVFhfRFNJX1BMTF9DT04yKTsKKwor
CW10a19taXBpX3R4X21hc2sobWlwaV90eCwgTUlQSVRYX0RTSV9QTExfQ09OMSwKKwkJCSBSR19E
U0lfTVBQTExfU0RNX0ZSQV9FTiwgUkdfRFNJX01QUExMX1NETV9GUkFfRU4pOworCisJbXRrX21p
cGlfdHhfbWFzayhtaXBpX3R4LCBNSVBJVFhfRFNJX0NMT0NLX0xBTkUsCisJCQkgUkdfRFNJX0xO
VENfTERPT1VUX0VOLCBSR19EU0lfTE5UQ19MRE9PVVRfRU4pOworCW10a19taXBpX3R4X21hc2so
bWlwaV90eCwgTUlQSVRYX0RTSV9EQVRBX0xBTkUwLAorCQkJIFJHX0RTSV9MTlQwX0xET09VVF9F
TiwgUkdfRFNJX0xOVDBfTERPT1VUX0VOKTsKKwltdGtfbWlwaV90eF9tYXNrKG1pcGlfdHgsIE1J
UElUWF9EU0lfREFUQV9MQU5FMSwKKwkJCSBSR19EU0lfTE5UMV9MRE9PVVRfRU4sIFJHX0RTSV9M
TlQxX0xET09VVF9FTik7CisJbXRrX21pcGlfdHhfbWFzayhtaXBpX3R4LCBNSVBJVFhfRFNJX0RB
VEFfTEFORTIsCisJCQkgUkdfRFNJX0xOVDJfTERPT1VUX0VOLCBSR19EU0lfTE5UMl9MRE9PVVRf
RU4pOworCW10a19taXBpX3R4X21hc2sobWlwaV90eCwgTUlQSVRYX0RTSV9EQVRBX0xBTkUzLAor
CQkJIFJHX0RTSV9MTlQzX0xET09VVF9FTiwgUkdfRFNJX0xOVDNfTERPT1VUX0VOKTsKKworCW10
a19taXBpX3R4X21hc2sobWlwaV90eCwgTUlQSVRYX0RTSV9QTExfQ09OMCwKKwkJCSBSR19EU0lf
TVBQTExfUExMX0VOLCBSR19EU0lfTVBQTExfUExMX0VOKTsKKworCXVzbGVlcF9yYW5nZSgyMCwg
MTAwKTsKKworCW10a19taXBpX3R4X21hc2sobWlwaV90eCwgTUlQSVRYX0RTSV9QTExfQ09OMSwK
KwkJCSBSR19EU0lfTVBQTExfU0RNX1NTQ19FTiwgMCk7CisKKwltdGtfbWlwaV90eF9tYXNrKG1p
cGlfdHgsIE1JUElUWF9EU0lfVE9QX0NPTiwgUkdfRFNJX1BBRF9USUVfTE9XX0VOLCAwKTsKKwor
CXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10a19taXBpX3R4X3Bvd2VyX29mZihzdHJ1Y3Qg
cGh5ICpwaHkpCit7CisJc3RydWN0IG10a19taXBpX3R4ICptaXBpX3R4ID0gcGh5X2dldF9kcnZk
YXRhKHBoeSk7CisKKwltdGtfbWlwaV90eF9tYXNrKG1pcGlfdHgsIE1JUElUWF9EU0lfUExMX0NP
TjAsIFJHX0RTSV9NUFBMTF9QTExfRU4sIDApOworCisJbXRrX21pcGlfdHhfbWFzayhtaXBpX3R4
LCBNSVBJVFhfRFNJX1RPUF9DT04sIFJHX0RTSV9QQURfVElFX0xPV19FTiwKKwkJCVJHX0RTSV9Q
QURfVElFX0xPV19FTik7CisKKwltdGtfbWlwaV90eF9tYXNrKG1pcGlfdHgsIE1JUElUWF9EU0lf
Q0xPQ0tfTEFORSwKKwkJCSBSR19EU0lfTE5UQ19MRE9PVVRfRU4sIDApOworCW10a19taXBpX3R4
X21hc2sobWlwaV90eCwgTUlQSVRYX0RTSV9EQVRBX0xBTkUwLAorCQkJIFJHX0RTSV9MTlQwX0xE
T09VVF9FTiwgMCk7CisJbXRrX21pcGlfdHhfbWFzayhtaXBpX3R4LCBNSVBJVFhfRFNJX0RBVEFf
TEFORTEsCisJCQkgUkdfRFNJX0xOVDFfTERPT1VUX0VOLCAwKTsKKwltdGtfbWlwaV90eF9tYXNr
KG1pcGlfdHgsIE1JUElUWF9EU0lfREFUQV9MQU5FMiwKKwkJCSBSR19EU0lfTE5UMl9MRE9PVVRf
RU4sIDApOworCW10a19taXBpX3R4X21hc2sobWlwaV90eCwgTUlQSVRYX0RTSV9EQVRBX0xBTkUz
LAorCQkJIFJHX0RTSV9MTlQzX0xET09VVF9FTiwgMCk7CisKKwltdGtfbWlwaV90eF9tYXNrKG1p
cGlfdHgsIE1JUElUWF9EU0lfUExMX1BXUiwKKwkJCVJHX0RTSV9NUFBMTF9TRE1fSVNPX0VOIHwg
UkdfRFNJX01QUExMX1NETV9QV1JfT04sCisJCQlSR19EU0lfTVBQTExfU0RNX0lTT19FTik7CisK
KwltdGtfbWlwaV90eF9tYXNrKG1pcGlfdHgsIE1JUElUWF9EU0lfVE9QX0NPTiwgUkdfRFNJX0xO
VF9IU19CSUFTX0VOLCAwKTsKKworCW10a19taXBpX3R4X21hc2sobWlwaV90eCwgTUlQSVRYX0RT
SV9DT04sCisJCQlSR19EU0lfQ0tHX0xET09VVF9FTiB8IFJHX0RTSV9MRE9DT1JFX0VOLCAwKTsK
KworCW10a19taXBpX3R4X21hc2sobWlwaV90eCwgTUlQSVRYX0RTSV9CR19DT04sCisJCQlSR19E
U0lfQkdfQ0tFTiB8IFJHX0RTSV9CR19DT1JFX0VOLCAwKTsKKworCW10a19taXBpX3R4X21hc2so
bWlwaV90eCwgTUlQSVRYX0RTSV9QTExfQ09OMCwgUkdfRFNJX01QUExMX0RJVl9NU0ssIDApOwor
CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGh5X29wcyBtdGtfbWlwaV90eF9vcHMg
PSB7CisJLnBvd2VyX29uID0gbXRrX21pcGlfdHhfcG93ZXJfb24sCisJLnBvd2VyX29mZiA9IG10
a19taXBpX3R4X3Bvd2VyX29mZiwKKwkub3duZXIgPSBUSElTX01PRFVMRSwKK307CisKK3N0YXRp
YyBpbnQgbXRrX21pcGlfdHhfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sK
KwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCXN0cnVjdCBtdGtfbWlwaV90eCAq
bWlwaV90eDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKm1lbTsKKwlzdHJ1Y3QgcGh5ICpwaHk7CisJc3Ry
dWN0IHBoeV9wcm92aWRlciAqcGh5X3Byb3ZpZGVyOworCWludCByZXQ7CisKKwltaXBpX3R4ID0g
ZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCptaXBpX3R4KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFt
aXBpX3R4KQorCQlyZXR1cm4gLUVOT01FTTsKKworCW1lbSA9IHBsYXRmb3JtX2dldF9yZXNvdXJj
ZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJbWlwaV90eC0+cmVncyA9IGRldm1faW9yZW1h
cF9yZXNvdXJjZShkZXYsIG1lbSk7CisJaWYgKElTX0VSUihtaXBpX3R4LT5yZWdzKSkgeworCQly
ZXQgPSBQVFJfRVJSKG1pcGlfdHgtPnJlZ3MpOworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBn
ZXQgbWVtb3J5IHJlc291cmNlOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlw
aHkgPSBkZXZtX3BoeV9jcmVhdGUoZGV2LCBOVUxMLCAmbXRrX21pcGlfdHhfb3BzKTsKKwlpZiAo
SVNfRVJSKHBoeSkpIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gY3JlYXRlIE1JUEkgRC1Q
SFlcbiIpOworCQlyZXR1cm4gUFRSX0VSUihwaHkpOworCX0KKwlwaHlfc2V0X2RydmRhdGEocGh5
LCBtaXBpX3R4KTsKKworCXBoeV9wcm92aWRlciA9IGRldm1fb2ZfcGh5X3Byb3ZpZGVyX3JlZ2lz
dGVyKGRldiwgb2ZfcGh5X3NpbXBsZV94bGF0ZSk7CisKKwlyZXR1cm4gUFRSX0VSUl9PUl9aRVJP
KHBoeV9wcm92aWRlcik7Cit9CisKK3N0YXRpYyBpbnQgbXRrX21pcGlfdHhfcmVtb3ZlKHN0cnVj
dCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25z
dCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG10a19taXBpX3R4X21hdGNoW10gPSB7CisJeyAuY29tcGF0
aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtbWlwaS10eCIsIH0sCisJe30sCit9OworCitzdHJ1Y3Qg
cGxhdGZvcm1fZHJpdmVyIG10a19taXBpX3R4X2RyaXZlciA9IHsKKwkucHJvYmUgPSBtdGtfbWlw
aV90eF9wcm9iZSwKKwkucmVtb3ZlID0gbXRrX21pcGlfdHhfcmVtb3ZlLAorCS5kcml2ZXIgPSB7
CisJCS5uYW1lID0gIm1lZGlhdGVrLW1pcGktdHgiLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBtdGtf
bWlwaV90eF9tYXRjaCwKKwl9LAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRp
YXRlay9tdGtfbWlwaV90eC5oIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19taXBpX3R4
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVmNGExMAotLS0gL2Rldi9u
dWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfbWlwaV90eC5oCkBAIC0wLDAg
KzEsMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgTWVkaWFUZWsgSW5jLgorICoKKyAq
IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05V
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVm
IF9NVEtfTUlQSV9UWF9IXworI2RlZmluZSBfTVRLX01JUElfVFhfSAorCitzdHJ1Y3QgcGh5Owor
CitpbnQgbXRrX21pcGlfdHhfc2V0X2RhdGFfcmF0ZShzdHJ1Y3QgcGh5ICpwaHksIHVuc2lnbmVk
IGludCBkYXRhX3JhdGUpOworCisjZW5kaWYKLS0gCjIuNi4yCgpfX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1k
ZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9t
YWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=