From mboxrd@z Thu Jan 1 00:00:00 1970
From: Philipp Zabel
Subject: [PATCH 2/2] drm/bridge: tc358767: Add DPI to eDP bridge driver
Date: Fri, 1 Jul 2016 16:50:10 +0200
Message-ID: <1467384610-29908-3-git-send-email-p.zabel@pengutronix.de>
References: <1467384610-29908-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: <1467384610-29908-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, Pawel Moll , Ian Campbell , Andrey Gusakov , Rob Herring , Chris Healy , Kumar Gala , Thierry Reding
List-Id: devicetree@vger.kernel.org
RnJvbTogQW5kcmV5IEd1c2Frb3YgPGFuZHJleS5ndXNha292QGNvZ2VudGVtYmVkZGVkLmNvbT4K
CkFkZCBhIGRybV9icmlkZ2UgZHJpdmVyIGZvciB0aGUgVG9zaGliYSBUQzM1ODc2NyBEUEkvRFNJ
IHRvCmVEUC9EUCBicmlkZ2UuIEN1cnJlbnRseSBvbmx5IERQSSBpbnB1dCB3aXRoIDI0LWJpdCBS
R0IgaXMKc3VwcG9ydGVkLgoKU2lnbmVkLW9mZi1ieTogQW5kcmV5IEd1c2Frb3YgPGFuZHJleS5n
dXNha292QGNvZ2VudGVtYmVkZGVkLmNvbT4KU2lnbmVkLW9mZi1ieTogUGhpbGlwcCBaYWJlbCA8
cC56YWJlbEBwZW5ndXRyb25peC5kZT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL0tjb25m
aWcgICAgfCAgICA4ICsKIGRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvTWFrZWZpbGUgICB8ICAgIDEg
KwogZHJpdmVycy9ncHUvZHJtL2JyaWRnZS90YzM1ODc2Ny5jIHwgMTQxOSArKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrCiAzIGZpbGVzIGNoYW5nZWQsIDE0MjggaW5zZXJ0aW9u
cygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvdGMzNTg3Njcu
YwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvS2NvbmZpZyBiL2RyaXZlcnMv
Z3B1L2RybS9icmlkZ2UvS2NvbmZpZwppbmRleCA4Zjc0MjNmLi4wNGMyYjZkIDEwMDY0NAotLS0g
YS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL0tjb25maWcKKysrIGIvZHJpdmVycy9ncHUvZHJtL2Jy
aWRnZS9LY29uZmlnCkBAIC01MCw2ICs1MCwxNCBAQCBjb25maWcgRFJNX1BBUkFERV9QUzg2MjIK
IAktLS1oZWxwLS0tCiAJICBQYXJhZGUgZURQLUxWRFMgYnJpZGdlIGNoaXAgZHJpdmVyLgogCitj
b25maWcgRFJNX1RPU0hJQkFfVEMzNTg3NjcKKwl0cmlzdGF0ZSAiVG9zaGliYSBUQzM1ODc2NyBl
RFAgYnJpZGdlIgorCXNlbGVjdCBEUk1fS01TX0hFTFBFUgorCXNlbGVjdCBSRUdNQVBfSTJDCisJ
c2VsZWN0IERSTV9QQU5FTAorCS0tLWhlbHAtLS0KKwkgIFRvc2hpYmEgVEMzNTg3NjcgZURQIGJy
aWRnZSBjaGlwIGRyaXZlci4KKwogc291cmNlICJkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2FuYWxv
Z2l4L0tjb25maWciCiAKIGVuZG1lbnUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9icmlk
Z2UvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL01ha2VmaWxlCmluZGV4IDk2YjEz
YjMuLjdjMjFhM2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvTWFrZWZpbGUK
KysrIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9NYWtlZmlsZQpAQCAtNSw0ICs1LDUgQEAgb2Jq
LSQoQ09ORklHX0RSTV9EV19IRE1JKSArPSBkdy1oZG1pLm8KIG9iai0kKENPTkZJR19EUk1fRFdf
SERNSV9BSEJfQVVESU8pICs9IGR3LWhkbWktYWhiLWF1ZGlvLm8KIG9iai0kKENPTkZJR19EUk1f
TlhQX1BUTjM0NjApICs9IG54cC1wdG4zNDYwLm8KIG9iai0kKENPTkZJR19EUk1fUEFSQURFX1BT
ODYyMikgKz0gcGFyYWRlLXBzODYyMi5vCitvYmotJChDT05GSUdfRFJNX1RPU0hJQkFfVEMzNTg3
NjcpICs9IHRjMzU4NzY3Lm8KIG9iai0kKENPTkZJR19EUk1fQU5BTE9HSVhfRFApICs9IGFuYWxv
Z2l4LwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS90YzM1ODc2Ny5jIGIvZHJp
dmVycy9ncHUvZHJtL2JyaWRnZS90YzM1ODc2Ny5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjUxNWYxMjMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vYnJp
ZGdlL3RjMzU4NzY3LmMKQEAgLTAsMCArMSwxNDE5IEBACisvKgorICogdGMzNTg3NjcgZURQIGJy
aWRnZSBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQ29nZW50RW1iZWRkZWQgSW5j
CisgKiBBdXRob3I6IEFuZHJleSBHdXNha292IDxhbmRyZXkuZ3VzYWtvdkBjb2dlbnRlbWJlZGRl
ZC5jb20+CisgKgorICogQ29weXJpZ2h0IChDKSAyMDE2IFBlbmd1dHJvbml4LCBQaGlsaXBwIFph
YmVsIDxwLnphYmVsQHBlbmd1dHJvbml4LmRlPgorICoKKyAqIEluaXRpYWxseSBiYXNlZCBvbjog
ZHJpdmVycy9ncHUvZHJtL2kyYy90ZGE5OTh4X2Rydi5jCisgKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIFRleGFzIEluc3RydW1lbnRzCisgKiBBdXRob3I6IFJvYiBDbGFyayA8cm9iZGNsYXJrQGdt
YWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
CisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJv
Z3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4
L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8vY29uc3VtZXIuaD4KKyNpbmNsdWRlIDxs
aW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9t
b2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFi
Lmg+CisKKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxw
ZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2RwX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1f
ZWRpZC5oPgorI2luY2x1ZGUgPGRybS9kcm1fb2YuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX3BhbmVs
Lmg+CisKKy8qIFJlZ2lzdGVycyAqLworCisvKiBEaXNwbGF5IFBhcmFsbGVsIEludGVyZmFjZSAq
LworI2RlZmluZSBEUElQWExGTVQJCTB4MDQ0MAorI2RlZmluZSBWU19QT0xfQUNUSVZFX0xPVwkJ
KDEgPDwgMTApCisjZGVmaW5lIEhTX1BPTF9BQ1RJVkVfTE9XCQkoMSA8PCA5KQorI2RlZmluZSBE
RV9QT0xfQUNUSVZFX0hJR0gJCSgwIDw8IDgpCisjZGVmaW5lIFNVQl9DRkdfVFlQRV9DT05GSUcx
CQkoMCA8PCAyKSAvKiBMU0IgYWxpZ25lZCAqLworI2RlZmluZSBTVUJfQ0ZHX1RZUEVfQ09ORklH
MgkJKDEgPDwgMikgLyogTG9vc2VseSBQYWNrZWQgKi8KKyNkZWZpbmUgU1VCX0NGR19UWVBFX0NP
TkZJRzMJCSgyIDw8IDIpIC8qIExTQiBhbGlnbmVkIDgtYml0ICovCisjZGVmaW5lIERQSV9CUFBf
UkdCODg4CQkJKDAgPDwgMCkKKyNkZWZpbmUgRFBJX0JQUF9SR0I2NjYJCQkoMSA8PCAwKQorI2Rl
ZmluZSBEUElfQlBQX1JHQjU2NQkJCSgyIDw8IDApCisKKy8qIFZpZGVvIFBhdGggKi8KKyNkZWZp
bmUgVlBDVFJMMAkJCTB4MDQ1MAorI2RlZmluZSBPUFhMRk1UX1JHQjY2NgkJCSgwIDw8IDgpCisj
ZGVmaW5lIE9QWExGTVRfUkdCODg4CQkJKDEgPDwgOCkKKyNkZWZpbmUgRlJNU1lOQ19ESVNBQkxF
RAkJKDAgPDwgNCkgLyogVmlkZW8gVGltaW5nIEdlbiBEaXNhYmxlZCAqLworI2RlZmluZSBGUk1T
WU5DX0VOQUJMRUQJCQkoMSA8PCA0KSAvKiBWaWRlbyBUaW1pbmcgR2VuIEVuYWJsZWQgKi8KKyNk
ZWZpbmUgTVNGX0RJU0FCTEVECQkJKDAgPDwgMCkgLyogTWFnaWMgU3F1YXJlIEZSQyBkaXNhYmxl
ZCAqLworI2RlZmluZSBNU0ZfRU5BQkxFRAkJCSgxIDw8IDApIC8qIE1hZ2ljIFNxdWFyZSBGUkMg
ZW5hYmxlZCAqLworI2RlZmluZSBIVElNMDEJCQkweDA0NTQKKyNkZWZpbmUgSFRJTTAyCQkJMHgw
NDU4CisjZGVmaW5lIFZUSU0wMQkJCTB4MDQ1YworI2RlZmluZSBWVElNMDIJCQkweDA0NjAKKyNk
ZWZpbmUgVkZVRU4wCQkJMHgwNDY0CisjZGVmaW5lIFZGVUVOCQkJCUJJVCgwKSAgIC8qIFZpZGVv
IEZyYW1lIFRpbWluZyBVcGxvYWQgKi8KKworLyogU3lzdGVtICovCisjZGVmaW5lIFRDX0lEUkVH
CQkweDA1MDAKKyNkZWZpbmUgU1lTQ1RSTAkJCTB4MDUxMAorI2RlZmluZSBEUDBfQVVEU1JDX05P
X0lOUFVUCQkoMCA8PCAzKQorI2RlZmluZSBEUDBfQVVEU1JDX0kyU19SWAkJKDEgPDwgMykKKyNk
ZWZpbmUgRFAwX1ZJRFNSQ19OT19JTlBVVAkJKDAgPDwgMCkKKyNkZWZpbmUgRFAwX1ZJRFNSQ19E
U0lfUlgJCSgxIDw8IDApCisjZGVmaW5lIERQMF9WSURTUkNfRFBJX1JYCQkoMiA8PCAwKQorI2Rl
ZmluZSBEUDBfVklEU1JDX0NPTE9SX0JBUgkJKDMgPDwgMCkKKworLyogQ29udHJvbCAqLworI2Rl
ZmluZSBEUDBDVEwJCQkweDA2MDAKKyNkZWZpbmUgVklEX01OX0dFTgkJCUJJVCg2KSAgIC8qIEF1
dG8tZ2VuZXJhdGUgTS9OIHZhbHVlcyAqLworI2RlZmluZSBFRl9FTgkJCQlCSVQoNSkgICAvKiBF
bmFibGUgRW5oYW5jZWQgRnJhbWluZyAqLworI2RlZmluZSBWSURfRU4JCQkJQklUKDEpICAgLyog
VmlkZW8gdHJhbnNtaXNzaW9uIGVuYWJsZSAqLworI2RlZmluZSBEUF9FTgkJCQlCSVQoMCkgICAv
KiBFbmFibGUgRFBUWCBmdW5jdGlvbiAqLworCisvKiBDbG9ja3MgKi8KKyNkZWZpbmUgRFAwX1ZJ
RE1OR0VOMAkJMHgwNjEwCisjZGVmaW5lIERQMF9WSURNTkdFTjEJCTB4MDYxNAorI2RlZmluZSBE
UDBfVk1OR0VOU1RBVFVTCTB4MDYxOAorCisvKiBNYWluIENoYW5uZWwgKi8KKyNkZWZpbmUgRFAw
X1NFQ1NBTVBMRQkJMHgwNjQwCisjZGVmaW5lIERQMF9WSURTWU5DREVMQVkJMHgwNjQ0CisjZGVm
aW5lIERQMF9UT1RBTFZBTAkJMHgwNjQ4CisjZGVmaW5lIERQMF9TVEFSVFZBTAkJMHgwNjRjCisj
ZGVmaW5lIERQMF9BQ1RJVkVWQUwJCTB4MDY1MAorI2RlZmluZSBEUDBfU1lOQ1ZBTAkJMHgwNjU0
CisjZGVmaW5lIERQMF9NSVNDCQkweDA2NTgKKyNkZWZpbmUgVFVfU0laRV9SRUNPTU1FTkRFRAkJ
KDB4M2YgPDwgMTYpIC8qIExTQ0xLIGN5Y2xlcyBwZXIgVFUgKi8KKyNkZWZpbmUgQlBDXzYJCQkJ
KDAgPDwgNSkKKyNkZWZpbmUgQlBDXzgJCQkJKDEgPDwgNSkKKworLyogQVVYIGNoYW5uZWwgKi8K
KyNkZWZpbmUgRFAwX0FVWENGRzAJCTB4MDY2MAorI2RlZmluZSBEUDBfQVVYQ0ZHMQkJMHgwNjY0
CisjZGVmaW5lIEFVWF9SWF9GSUxURVJfRU4JCUJJVCgxNikKKworI2RlZmluZSBEUDBfQVVYQURE
UgkJMHgwNjY4CisjZGVmaW5lIERQMF9BVVhXREFUQShpKQkJKDB4MDY2YyArIChpKSAqIDQpCisj
ZGVmaW5lIERQMF9BVVhSREFUQShpKQkJKDB4MDY3YyArIChpKSAqIDQpCisjZGVmaW5lIERQMF9B
VVhTVEFUVVMJCTB4MDY4YworI2RlZmluZSBBVVhfU1RBVFVTX01BU0sJCQkweGYwCisjZGVmaW5l
IEFVWF9TVEFUVVNfU0hJRlQJCTQKKyNkZWZpbmUgQVVYX1RJTUVPVVQJCQlCSVQoMSkKKyNkZWZp
bmUgQVVYX0JVU1kJCQlCSVQoMCkKKyNkZWZpbmUgRFAwX0FVWEkyQ0FEUgkJMHgwNjk4CisKKy8q
IExpbmsgVHJhaW5pbmcgKi8KKyNkZWZpbmUgRFAwX1NSQ0NUUkwJCTB4MDZhMAorI2RlZmluZSBE
UDBfU1JDQ1RSTF9TQ1JNQkxESVMJCUJJVCgxMykKKyNkZWZpbmUgRFAwX1NSQ0NUUkxfRU44MTBC
CQlCSVQoMTIpCisjZGVmaW5lIERQMF9TUkNDVFJMX05PVFAJCSgwIDw8IDgpCisjZGVmaW5lIERQ
MF9TUkNDVFJMX1RQMQkJCSgxIDw8IDgpCisjZGVmaW5lIERQMF9TUkNDVFJMX1RQMgkJCSgyIDw8
IDgpCisjZGVmaW5lIERQMF9TUkNDVFJMX0xBTkVTS0VXCQlCSVQoNykKKyNkZWZpbmUgRFAwX1NS
Q0NUUkxfU1NDRwkJQklUKDMpCisjZGVmaW5lIERQMF9TUkNDVFJMX0xBTkVTXzEJCSgwIDw8IDIp
CisjZGVmaW5lIERQMF9TUkNDVFJMX0xBTkVTXzIJCSgxIDw8IDIpCisjZGVmaW5lIERQMF9TUkND
VFJMX0JXMjcJCSgxIDw8IDEpCisjZGVmaW5lIERQMF9TUkNDVFJMX0JXMTYyCQkoMCA8PCAxKQor
I2RlZmluZSBEUDBfU1JDQ1RSTF9BVVRPQ09SUkVDVAkJQklUKDApCisjZGVmaW5lIERQMF9MVFNU
QVQJCTB4MDZkMAorI2RlZmluZSBMVF9MT09QRE9ORQkJCUJJVCgxMykKKyNkZWZpbmUgTFRfU1RB
VFVTX01BU0sJCQkoMHgxZiA8PCA4KQorI2RlZmluZSBMVF9DSEFOTkVMMV9FUV9CSVRTCQkoRFBf
Q0hBTk5FTF9FUV9CSVRTIDw8IDQpCisjZGVmaW5lIExUX0lOVEVSTEFORV9BTElHTl9ET05FCQlC
SVQoMykKKyNkZWZpbmUgTFRfQ0hBTk5FTDBfRVFfQklUUwkJKERQX0NIQU5ORUxfRVFfQklUUykK
KyNkZWZpbmUgRFAwX1NOS0xUQ0hHUkVRCQkweDA2ZDQKKyNkZWZpbmUgRFAwX0xUTE9PUENUUkwJ
CTB4MDZkOAorI2RlZmluZSBEUDBfU05LTFRDVFJMCQkweDA2ZTQKKworLyogUEhZICovCisjZGVm
aW5lIERQX1BIWV9DVFJMCQkweDA4MDAKKyNkZWZpbmUgRFBfUEhZX1JTVAkJCUJJVCgyOCkgIC8q
IERQIFBIWSBHbG9iYWwgU29mdCBSZXNldCAqLworI2RlZmluZSBCR1JFTgkJCQlCSVQoMjUpICAv
KiBBVVggUEhZIEJHUiBFbmFibGUgKi8KKyNkZWZpbmUgUFdSX1NXX0VOCQkJQklUKDI0KSAgLyog
UEhZIFBvd2VyIFN3aXRjaCBFbmFibGUgKi8KKyNkZWZpbmUgUEhZX00xX1JTVAkJCUJJVCgxMikg
IC8qIFJlc2V0IFBIWTEgTWFpbiBDaGFubmVsICovCisjZGVmaW5lIFBIWV9SRFkJCQkJQklUKDE2
KSAgLyogUEhZIE1haW4gQ2hhbm5lbHMgUmVhZHkgKi8KKyNkZWZpbmUgUEhZX00wX1JTVAkJCUJJ
VCg4KSAgIC8qIFJlc2V0IFBIWTAgTWFpbiBDaGFubmVsICovCisjZGVmaW5lIFBIWV9BMF9FTgkJ
CUJJVCgxKSAgIC8qIFBIWSBBdXggQ2hhbm5lbDAgRW5hYmxlICovCisjZGVmaW5lIFBIWV9NMF9F
TgkJCUJJVCgwKSAgIC8qIFBIWSBNYWluIENoYW5uZWwwIEVuYWJsZSAqLworCisvKiBQTEwgKi8K
KyNkZWZpbmUgRFAwX1BMTENUUkwJCTB4MDkwMAorI2RlZmluZSBEUDFfUExMQ1RSTAkJMHgwOTA0
CS8qIG5vdCBkZWZpbmVkIGluIERTICovCisjZGVmaW5lIFBYTF9QTExDVFJMCQkweDA5MDgKKyNk
ZWZpbmUgUExMVVBEQVRFCQkJQklUKDIpCisjZGVmaW5lIFBMTEJZUAkJCQlCSVQoMSkKKyNkZWZp
bmUgUExMRU4JCQkJQklUKDApCisjZGVmaW5lIFBYTF9QTExQQVJBTQkJMHgwOTE0CisjZGVmaW5l
IElOX1NFTF9SRUZDTEsJCQkoMCA8PCAxNCkKKyNkZWZpbmUgU1lTX1BMTFBBUkFNCQkweDA5MTgK
KyNkZWZpbmUgUkVGX0ZSRVFfMzhNNAkJCSgwIDw8IDgpIC8qIDM4LjQgTUh6ICovCisjZGVmaW5l
IFJFRl9GUkVRXzE5TTIJCQkoMSA8PCA4KSAvKiAxOS4yIE1IeiAqLworI2RlZmluZSBSRUZfRlJF
UV8yNk0JCQkoMiA8PCA4KSAvKiAyNiBNSHogKi8KKyNkZWZpbmUgUkVGX0ZSRVFfMTNNCQkJKDMg
PDwgOCkgLyogMTMgTUh6ICovCisjZGVmaW5lIFNZU0NMS19TRUxfTFNDTEsJCSgwIDw8IDQpCisj
ZGVmaW5lIExTQ0xLX0RJVl8xCQkJKDAgPDwgMCkKKyNkZWZpbmUgTFNDTEtfRElWXzIJCQkoMSA8
PCAwKQorCisvKiBUZXN0ICYgRGVidWcgKi8KKyNkZWZpbmUgVFNUQ1RMCQkJMHgwYTAwCisjZGVm
aW5lIFBMTF9EQkcJCQkweDBhMDQKKworc3RydWN0IHRjX2VkcF9saW5rIHsKKwlzdHJ1Y3QgZHJt
X2RwX2xpbmsJYmFzZTsKKwl1OAkJCWFzc3I7CisJaW50CQkJc2NyYW1ibGVyX2RpczsKKwlpbnQJ
CQlzcHJlYWQ7CisJaW50CQkJY29kaW5nOGIxMGI7CisJdTgJCQlzd2luZzsKKwl1OAkJCXByZWVt
cDsKK307CisKK3N0cnVjdCB0Y19kYXRhIHsKKwlzdHJ1Y3QgZGV2aWNlCQkqZGV2OworCXN0cnVj
dCByZWdtYXAJCSpyZWdtYXA7CisJc3RydWN0IGRybV9kcF9hdXgJYXV4OworCisJc3RydWN0IGRy
bV9icmlkZ2UJYnJpZGdlOworCXN0cnVjdCBkcm1fY29ubmVjdG9yCWNvbm5lY3RvcjsKKwlzdHJ1
Y3QgZHJtX3BhbmVsCSpwYW5lbDsKKworCS8qIGxpbmsgc2V0dGluZ3MgKi8KKwlzdHJ1Y3QgdGNf
ZWRwX2xpbmsJbGluazsKKworCS8qIGRpc3BsYXkgZWRpZCAqLworCXN0cnVjdCBlZGlkCQkqZWRp
ZDsKKwkvKiBjdXJyZW50IG1vZGUgKi8KKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZQkqbW9kZTsK
KworCS8qIFBMTCBwaXhlbGNsb2NrICovCisJdTMyCQkJcGxsX2NsazsKKwl1MzIJCQlwbGxfY2xr
X3JlYWw7CisKKwlpbnQJCQl0ZXN0X3BhdHRlcm47CisKKwl1MzIJCQlyZXY7CisJdTgJCQlhc3Ny
OworCisJc3RydWN0IGdwaW9fZGVzYwkqc2RfZ3BpbzsKKwlzdHJ1Y3QgZ3Bpb19kZXNjCSpyZXNl
dF9ncGlvOworCXN0cnVjdCBjbGsJCSpyZWZjbGs7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVj
dCB0Y19kYXRhICphdXhfdG9fdGMoc3RydWN0IGRybV9kcF9hdXggKmEpCit7CisJcmV0dXJuIGNv
bnRhaW5lcl9vZihhLCBzdHJ1Y3QgdGNfZGF0YSwgYXV4KTsKK30KKworc3RhdGljIGlubGluZSBz
dHJ1Y3QgdGNfZGF0YSAqYnJpZGdlX3RvX3RjKHN0cnVjdCBkcm1fYnJpZGdlICpiKQoreworCXJl
dHVybiBjb250YWluZXJfb2YoYiwgc3RydWN0IHRjX2RhdGEsIGJyaWRnZSk7Cit9CisKK3N0YXRp
YyBpbmxpbmUgc3RydWN0IHRjX2RhdGEgKmNvbm5lY3Rvcl90b190YyhzdHJ1Y3QgZHJtX2Nvbm5l
Y3RvciAqYykKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGMsIHN0cnVjdCB0Y19kYXRhLCBjb25u
ZWN0b3IpOworfQorCisvKiBTaW1wbGUgbWFjcm9zIHRvIGF2b2lkIHJlcGVhdGVkIGVycm9yIGNo
ZWNrcyAqLworI2RlZmluZSB0Y193cml0ZShyZWcsIHZhcikJCQkJCVwKKwlkbyB7CQkJCQkJCVwK
KwkJcmV0ID0gcmVnbWFwX3dyaXRlKHRjLT5yZWdtYXAsIHJlZywgdmFyKTsJXAorCQlpZiAocmV0
KQkJCQkJXAorCQkJZ290byBlcnI7CQkJCVwKKwl9IHdoaWxlICgwKQorI2RlZmluZSB0Y19yZWFk
KHJlZywgdmFyKQkJCQkJXAorCWRvIHsJCQkJCQkJXAorCQlyZXQgPSByZWdtYXBfcmVhZCh0Yy0+
cmVnbWFwLCByZWcsIHZhcik7CVwKKwkJaWYgKHJldCkJCQkJCVwKKwkJCWdvdG8gZXJyOwkJCQlc
CisJfSB3aGlsZSAoMCkKKworI2lmbmRlZiByZWdtYXBfcmVhZF9wb2xsX3RpbWVvdXQKKyNkZWZp
bmUgcmVnbWFwX3JlYWRfcG9sbF90aW1lb3V0KG1hcCwgYWRkciwgdmFsLCBjb25kLCBzbGVlcF91
cywgdGltZW91dF91cykgXAorKHsgXAorCWt0aW1lX3QgdGltZW91dCA9IGt0aW1lX2FkZF91cyhr
dGltZV9nZXQoKSwgdGltZW91dF91cyk7IFwKKwlpbnQgcmV0OyBcCisJbWlnaHRfc2xlZXBfaWYo
c2xlZXBfdXMpOyBcCisJZm9yICg7OykgeyBcCisJCXJldCA9IHJlZ21hcF9yZWFkKChtYXApLCAo
YWRkciksICYodmFsKSk7IFwKKwkJaWYgKHJldCkgXAorCQkJYnJlYWs7IFwKKwkJaWYgKGNvbmQp
IFwKKwkJCWJyZWFrOyBcCisJCWlmICh0aW1lb3V0X3VzICYmIGt0aW1lX2NvbXBhcmUoa3RpbWVf
Z2V0KCksIHRpbWVvdXQpID4gMCkgeyBcCisJCQlyZXQgPSByZWdtYXBfcmVhZCgobWFwKSwgKGFk
ZHIpLCAmKHZhbCkpOyBcCisJCQlicmVhazsgXAorCQl9IFwKKwkJaWYgKHNsZWVwX3VzKSBcCisJ
CQl1c2xlZXBfcmFuZ2UoKHNsZWVwX3VzID4+IDIpICsgMSwgc2xlZXBfdXMpOyBcCisJfSBcCisJ
cmV0ID86ICgoY29uZCkgPyAwIDogLUVUSU1FRE9VVCk7IFwKK30pCisjZW5kaWYKKworc3RhdGlj
IGludCB0Y19hdXhfd2FpdF9idXN5KHN0cnVjdCB0Y19kYXRhICp0YywgdW5zaWduZWQgaW50IHRp
bWVvdXRfbXMpCit7CisJdTMyIHZhbHVlOworCisJcmV0dXJuIHJlZ21hcF9yZWFkX3BvbGxfdGlt
ZW91dCh0Yy0+cmVnbWFwLCBEUDBfQVVYU1RBVFVTLCB2YWx1ZSwKKwkJCQkJISh2YWx1ZSAmIEFV
WF9CVVNZKSwKKwkJCQkJMTAwMCwgMTAwMCAqIHRpbWVvdXRfbXMpOworfQorCitzdGF0aWMgaW50
IHRjX2F1eF9nZXRfc3RhdHVzKHN0cnVjdCB0Y19kYXRhICp0YywgdTggKnJlcGx5KQoreworCWlu
dCByZXQ7CisJdTMyIHZhbHVlOworCisJcmV0ID0gcmVnbWFwX3JlYWQodGMtPnJlZ21hcCwgRFAw
X0FVWFNUQVRVUywgJnZhbHVlKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlpZiAo
dmFsdWUgJiBBVVhfQlVTWSkgeworCQlpZiAodmFsdWUgJiBBVVhfVElNRU9VVCkgeworCQkJZGV2
X2Vycih0Yy0+ZGV2LCAiaTJjIGFjY2VzcyB0aW1lb3V0IVxuIik7CisJCQlyZXR1cm4gLUVUSU1F
RE9VVDsKKwkJfQorCQlyZXR1cm4gLUVCVVNZOworCX0KKworCSpyZXBseSA9ICh2YWx1ZSAmIEFV
WF9TVEFUVVNfTUFTSykgPj4gQVVYX1NUQVRVU19TSElGVDsKKwlyZXR1cm4gMDsKK30KKworc3Rh
dGljIHNzaXplX3QgdGNfYXV4X3RyYW5zZmVyKHN0cnVjdCBkcm1fZHBfYXV4ICphdXgsCisJCQkg
ICAgICAgc3RydWN0IGRybV9kcF9hdXhfbXNnICptc2cpCit7CisJc3RydWN0IHRjX2RhdGEgKnRj
ID0gYXV4X3RvX3RjKGF1eCk7CisJc2l6ZV90IHNpemUgPSBtaW5fdChzaXplX3QsIDgsIG1zZy0+
c2l6ZSk7CisJdTggcmVxdWVzdCA9IG1zZy0+cmVxdWVzdCAmIH5EUF9BVVhfSTJDX01PVDsKKwl1
OCAqYnVmID0gbXNnLT5idWZmZXI7CisJdTMyIHRtcCA9IDA7CisJaW50IGkgPSAwOworCWludCBy
ZXQ7CisKKwlpZiAoc2l6ZSA9PSAwKQorCQlyZXR1cm4gMDsKKworCXJldCA9IHRjX2F1eF93YWl0
X2J1c3kodGMsIDEwMCk7CisJaWYgKHJldCkKKwkJZ290byBlcnI7CisKKwlpZiAocmVxdWVzdCA9
PSBEUF9BVVhfSTJDX1dSSVRFIHx8IHJlcXVlc3QgPT0gRFBfQVVYX05BVElWRV9XUklURSkgewor
CQkvKiBTdG9yZSBkYXRhICovCisJCXdoaWxlIChpIDwgc2l6ZSkgeworCQkJaWYgKHJlcXVlc3Qg
PT0gRFBfQVVYX05BVElWRV9XUklURSkKKwkJCQl0bXAgPSB0bXAgfCAoYnVmW2ldIDw8ICg4ICog
KGkgJiAweDMpKSk7CisJCQllbHNlCisJCQkJdG1wID0gKHRtcCA8PCA4KSB8IGJ1ZltpXTsKKwkJ
CWkrKzsKKwkJCWlmICgoKGkgJSA0KSA9PSAwKSB8fCAoaSA9PSBzaXplKSkgeworCQkJCXRjX3dy
aXRlKERQMF9BVVhXREFUQShpID4+IDIpLCB0bXApOworCQkJCXRtcCA9IDA7CisJCQl9CisJCX0K
Kwl9IGVsc2UgaWYgKHJlcXVlc3QgIT0gRFBfQVVYX0kyQ19SRUFEICYmCisJCSAgIHJlcXVlc3Qg
IT0gRFBfQVVYX05BVElWRV9SRUFEKSB7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIFN0
b3JlIGFkZHJlc3MgKi8KKwl0Y193cml0ZShEUDBfQVVYQUREUiwgbXNnLT5hZGRyZXNzKTsKKwkv
KiBTdGFydCB0cmFuc2ZlciAqLworCXRjX3dyaXRlKERQMF9BVVhDRkcwLCAoKHNpemUgLSAxKSA8
PCA4KSB8IHJlcXVlc3QpOworCisJcmV0ID0gdGNfYXV4X3dhaXRfYnVzeSh0YywgMTAwKTsKKwlp
ZiAocmV0KQorCQlnb3RvIGVycjsKKworCXJldCA9IHRjX2F1eF9nZXRfc3RhdHVzKHRjLCAmbXNn
LT5yZXBseSk7CisJaWYgKHJldCkKKwkJZ290byBlcnI7CisKKwlpZiAocmVxdWVzdCA9PSBEUF9B
VVhfSTJDX1JFQUQgfHwgcmVxdWVzdCA9PSBEUF9BVVhfTkFUSVZFX1JFQUQpIHsKKwkJLyogUmVh
ZCBkYXRhICovCisJCXdoaWxlIChpIDwgc2l6ZSkgeworCQkJaWYgKChpICUgNCkgPT0gMCkKKwkJ
CQl0Y19yZWFkKERQMF9BVVhSREFUQShpID4+IDIpLCAmdG1wKTsKKwkJCWJ1ZltpXSA9IHRtcCAm
IDB4ZmY7CisJCQl0bXAgPSB0bXAgPj4gODsKKwkJCWkrKzsKKwkJfQorCX0KKworCXJldHVybiBz
aXplOworZXJyOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3Qg
dHJhaW5pbmdfcGF0dGVybjFfZXJyb3JzW10gPSB7CisJIk5vIGVycm9ycyIsCisJIkF1eCB3cml0
ZSBlcnJvciIsCisJIkF1eCByZWFkIGVycm9yIiwKKwkiTWF4IHZvbHRhZ2UgcmVhY2hlZCBlcnJv
ciIsCisJIkxvb3AgY291bnRlciBleHBpcmVkIGVycm9yIiwKKwkicmVzIiwgInJlcyIsICJyZXMi
Cit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHRyYWluaW5nX3BhdHRlcm4yX2Vycm9y
c1tdID0geworCSJObyBlcnJvcnMiLAorCSJBdXggd3JpdGUgZXJyb3IiLAorCSJBdXggcmVhZCBl
cnJvciIsCisJIkNsb2NrIHJlY292ZXJ5IGZhaWxlZCBlcnJvciIsCisJIkxvb3AgY291bnRlciBl
eHBpcmVkIGVycm9yIiwKKwkicmVzIiwgInJlcyIsICJyZXMiCit9OworCitzdGF0aWMgdTMyIHRj
X3NyY2N0cmwoc3RydWN0IHRjX2RhdGEgKnRjKQoreworCS8qCisJICogTm8gdHJhaW5pbmcgcGF0
dGVybiwgc2tldyBsYW5lIDEgZGF0YSBieSB0d28gTFNDTEsgY3ljbGVzIHdpdGgKKwkgKiByZXNw
ZWN0IHRvIGxhbmUgMCBkYXRhLCBBdXRvQ29ycmVjdCBNb2RlID0gMAorCSAqLworCXUzMiByZWcg
PSBEUDBfU1JDQ1RSTF9OT1RQIHwgRFAwX1NSQ0NUUkxfTEFORVNLRVc7CisKKwlpZiAodGMtPmxp
bmsuc2NyYW1ibGVyX2RpcykKKwkJcmVnIHw9IERQMF9TUkNDVFJMX1NDUk1CTERJUzsJLyogU2Ny
YW1ibGVyIERpc2FibGVkICovCisJaWYgKHRjLT5saW5rLmNvZGluZzhiMTBiKQorCQkvKiBFbmFi
bGUgOC8xMEIgRW5jb2RlciAoVHhEYXRhWzE5OjE2XSBub3QgdXNlZCkgKi8KKwkJcmVnIHw9IERQ
MF9TUkNDVFJMX0VOODEwQjsKKwlpZiAodGMtPmxpbmsuc3ByZWFkKQorCQlyZWcgfD0gRFAwX1NS
Q0NUUkxfU1NDRzsJLyogU3ByZWFkIFNwZWN0cnVtIEVuYWJsZSAqLworCWlmICh0Yy0+bGluay5i
YXNlLm51bV9sYW5lcyA9PSAyKQorCQlyZWcgfD0gRFAwX1NSQ0NUUkxfTEFORVNfMjsJLyogVHdv
IE1haW4gQ2hhbm5lbCBMYW5lcyAqLworCWlmICh0Yy0+bGluay5iYXNlLnJhdGUgIT0gMTYyMDAw
KQorCQlyZWcgfD0gRFAwX1NSQ0NUUkxfQlcyNzsJLyogMi43IEdicHMgbGluayAqLworCXJldHVy
biByZWc7Cit9CisKK3N0YXRpYyB2b2lkIHRjX3dhaXRfcGxsX2xvY2soc3RydWN0IHRjX2RhdGEg
KnRjKQoreworCS8qIFdhaXQgZm9yIFBMTCB0byBsb2NrOiB1cCB0byAyLjA5IG1zLCBkZXBlbmRp
bmcgb24gcmVmY2xrICovCisJdXNsZWVwX3JhbmdlKDMwMDAsIDYwMDApOworfQorCitzdGF0aWMg
aW50IHRjX3B4bF9wbGxfZW4oc3RydWN0IHRjX2RhdGEgKnRjLCB1MzIgcmVmY2xrKQoreworCWlu
dCByZXQ7CisJaW50IGlfcHJlLCBiZXN0X3ByZSA9IDE7CisJaW50IGlfcG9zdCwgYmVzdF9wb3N0
ID0gMTsKKwlpbnQgZGl2LCBiZXN0X2RpdiA9IDE7CisJaW50IG11bCwgYmVzdF9tdWwgPSAxOwor
CWludCBkZWx0YSwgYmVzdF9kZWx0YTsKKwlpbnQgZXh0X2RpdltdID0gezEsIDIsIDMsIDUsIDd9
OworCWludCBiZXN0X3BpeGVsY2xvY2sgPSAwOworCWludCB2Y29faGkgPSAwOworCWludCBwaXhl
bGNsb2NrOworCisJcGl4ZWxjbG9jayA9IHRjLT5wbGxfY2xrOworCisJZGV2X2RiZyh0Yy0+ZGV2
LCAiUExMOiByZXF1ZXN0ZWQgJWQgcGl4ZWxjbG9jaywgcmVmICVkXG4iLCBwaXhlbGNsb2NrLAor
CQlyZWZjbGspOworCWJlc3RfZGVsdGEgPSBwaXhlbGNsb2NrOworCS8qIGJpZyBsb29wcyAqLwor
CWZvciAoaV9wcmUgPSAwOyBpX3ByZSA8IEFSUkFZX1NJWkUoZXh0X2Rpdik7IGlfcHJlKyspIHsK
KwkJLyogcmVmY2xrIC8gZXh0X3ByZV9kaXYgc2hvdWxkIGJlIGluIHRoZSAxIHRvIDIwMCBNSHog
cmFuZ2UgKi8KKwkJaWYgKChyZWZjbGsgLyBleHRfZGl2W2lfcHJlXSA+IDIwMDAwMDAwMCkgfHwK
KwkJICAgIChyZWZjbGsgLyBleHRfZGl2W2lfcHJlXSA8IDEwMDAwMDApKQorCQkJY29udGludWU7
CisJCWZvciAoaV9wb3N0ID0gMDsgaV9wb3N0IDwgQVJSQVlfU0laRShleHRfZGl2KTsgaV9wb3N0
KyspIHsKKwkJCWZvciAoZGl2ID0gMTsgZGl2IDw9IDE2OyBkaXYrKykgeworCQkJCXUzMiBjbGs7
CisJCQkJdTY0IHRtcDsKKworCQkJCXRtcCA9IHBpeGVsY2xvY2sgKiBleHRfZGl2W2lfcHJlXSAq
CisJCQkJICAgICAgZXh0X2RpdltpX3Bvc3RdICogZGl2OworCQkJCWRvX2Rpdih0bXAsIHJlZmNs
ayk7CisJCQkJbXVsID0gdG1wOworCisJCQkJY2xrID0gcmVmY2xrIC8gZXh0X2RpdltpX3ByZV0g
LyBkaXYgKiBtdWwgLworCQkJCSAgICAgIGV4dF9kaXZbaV9wb3N0XTsKKwkJCQlkZWx0YSA9IGNs
ayAtIHBpeGVsY2xvY2s7CisKKwkJCQkvKiBjaGVjayBsaW1pdHMgKi8KKwkJCQlpZiAoKG11bCA8
IDEpIHx8CisJCQkJICAgIChtdWwgPiAxMjgpKQorCQkJCQljb250aW51ZTsKKwkJCQkvKgorCQkJ
CSAqIHJlZmNsayAqIG11bCAvIChleHRfcHJlX2RpdiAqIHByZV9kaXYpCisJCQkJICogc2hvdWxk
IGJlIGluIHRoZSAxNTAgdG8gNjUwIE1IeiByYW5nZQorCQkJCSAqLworCQkJCWlmICgocmVmY2xr
IC8gZXh0X2RpdltpX3ByZV0gLyBkaXYgKiBtdWwgPiA2NTAwMDAwMDApIHx8CisJCQkJICAgIChy
ZWZjbGsgLyBleHRfZGl2W2lfcHJlXSAvIGRpdiAqIG11bCA8IDE1MDAwMDAwMCkpCisJCQkJCWNv
bnRpbnVlOworCisJCQkJaWYgKGFicyhkZWx0YSkgPCBhYnMoYmVzdF9kZWx0YSkpIHsKKwkJCQkJ
YmVzdF9wcmUgPSBpX3ByZTsKKwkJCQkJYmVzdF9wb3N0ID0gaV9wb3N0OworCQkJCQliZXN0X2Rp
diA9IGRpdjsKKwkJCQkJYmVzdF9tdWwgPSBtdWw7CisJCQkJCWJlc3RfZGVsdGEgPSBkZWx0YTsK
KwkJCQkJYmVzdF9waXhlbGNsb2NrID0gY2xrOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwlpZiAo
YmVzdF9waXhlbGNsb2NrID09IDApIHsKKwkJZGV2X2Vycih0Yy0+ZGV2LCAiRmFpbGVkIHRvIGNh
bGMgY2xvY2sgZm9yICVkIHBpeGVsY2xvY2tcbiIsCisJCQlwaXhlbGNsb2NrKTsKKwkJcmV0dXJu
IC1FSU5WQUw7CisJfQorCisJZGV2X2RiZyh0Yy0+ZGV2LCAiUExMOiBnb3QgJWQsIGRlbHRhICVk
XG4iLCBiZXN0X3BpeGVsY2xvY2ssCisJCWJlc3RfZGVsdGEpOworCWRldl9kYmcodGMtPmRldiwg
IlBMTDogJWQgLyAlZCAvICVkICogJWQgLyAlZFxuIiwgcmVmY2xrLAorCQlleHRfZGl2W2Jlc3Rf
cHJlXSwgYmVzdF9kaXYsIGJlc3RfbXVsLCBleHRfZGl2W2Jlc3RfcG9zdF0pOworCisJLyogaWYg
VkNPID49IDMwMCBNSHogKi8KKwlpZiAocmVmY2xrIC8gZXh0X2RpdltiZXN0X3ByZV0gLyBiZXN0
X2RpdiAqIGJlc3RfbXVsID49IDMwMDAwMDAwMCkKKwkJdmNvX2hpID0gMTsKKwkvKiBzZWUgRFMg
Ki8KKwlpZiAoYmVzdF9kaXYgPT0gMTYpCisJCWJlc3RfZGl2ID0gMDsKKwlpZiAoYmVzdF9tdWwg
PT0gMTI4KQorCQliZXN0X211bCA9IDA7CisKKwkvKiBQb3dlciB1cCBQTEwgYW5kIHN3aXRjaCB0
byBieXBhc3MgKi8KKwl0Y193cml0ZShQWExfUExMQ1RSTCwgUExMQllQIHwgUExMRU4pOworCisJ
dGNfd3JpdGUoUFhMX1BMTFBBUkFNLAorCQkgKHZjb19oaSA8PCAyNCkgfAkJLyogRm9yIFBMTCBW
Q08gPj0gMzAwIE1IeiA9IDEgKi8KKwkJIChleHRfZGl2W2Jlc3RfcHJlXSA8PCAyMCkgfAkvKiBF
eHRlcm5hbCBQcmUtZGl2aWRlciAqLworCQkgKGV4dF9kaXZbYmVzdF9wb3N0XSA8PCAxNikgfAkv
KiBFeHRlcm5hbCBQb3N0LWRpdmlkZXIgKi8KKwkJIElOX1NFTF9SRUZDTEsgfAkJLyogVXNlIFJl
ZkNsayBhcyBQTEwgaW5wdXQgKi8KKwkJIChiZXN0X2RpdiA8PCA4KSB8CQkvKiBEaXZpZGVyIGZv
ciBQTEwgUmVmQ2xrICovCisJCSAoYmVzdF9tdWwgPDwgMCkpOwkJLyogTXVsdGlwbGllciBmb3Ig
UExMICovCisKKwkvKiBGb3JjZSBQTEwgcGFyYW1ldGVyIHVwZGF0ZSBhbmQgZGlzYWJsZSBieXBh
c3MgKi8KKwl0Y193cml0ZShQWExfUExMQ1RSTCwgUExMVVBEQVRFIHwgUExMRU4pOworCisJdGNf
d2FpdF9wbGxfbG9jayh0Yyk7CisKKwkvKiBzYXZlICovCisJdGMtPnBsbF9jbGtfcmVhbCA9IGJl
c3RfcGl4ZWxjbG9jazsKKworCXJldHVybiAwOworZXJyOgorCXJldHVybiByZXQ7Cit9CisKK3N0
YXRpYyBpbnQgdGNfcHhsX3BsbF9kaXMoc3RydWN0IHRjX2RhdGEgKnRjKQoreworCS8qIEVuYWJs
ZSBQTEwgYnlwYXNzLCBwb3dlciBkb3duIFBMTCAqLworCXJldHVybiByZWdtYXBfd3JpdGUodGMt
PnJlZ21hcCwgUFhMX1BMTENUUkwsIFBMTEJZUCk7Cit9CisKK3N0YXRpYyBpbnQgdGNfc3RyZWFt
X2Nsb2NrX2NhbGMoc3RydWN0IHRjX2RhdGEgKnRjKQoreworCWludCByZXQ7CisJLyoKKwkgKiBJ
ZiB0aGUgU3RyZWFtIGNsb2NrIGFuZCBMaW5rIFN5bWJvbCBjbG9jayBhcmUKKwkgKiBhc3luY2hy
b25vdXMgd2l0aCBlYWNoIG90aGVyLCB0aGUgdmFsdWUgb2YgTSBjaGFuZ2VzIG92ZXIKKwkgKiB0
aW1lLiBUaGlzIHdheSBvZiBnZW5lcmF0aW5nIGxpbmsgY2xvY2sgYW5kIHN0cmVhbQorCSAqIGNs
b2NrIGlzIGNhbGxlZCBBc3luY2hyb25vdXMgQ2xvY2sgbW9kZS4gVGhlIHZhbHVlIE0KKwkgKiBt
dXN0IGNoYW5nZSB3aGlsZSB0aGUgdmFsdWUgTiBzdGF5cyBjb25zdGFudC4gVGhlCisJICogdmFs
dWUgb2YgTiBpbiB0aGlzIEFzeW5jaHJvbm91cyBDbG9jayBtb2RlIG11c3QgYmUgc2V0CisJICog
dG8gMl4xNSBvciAzMiw3NjguCisJICoKKwkgKiBMU0NMSyA9IDEvMTAgb2YgaGlnaCBzcGVlZCBs
aW5rIGNsb2NrCisJICoKKwkgKiBmX1NUUk1DTEsgPSBNL04gKiBmX0xTQ0xLCisJICogTS9OID0g
Zl9TVFJNQ0xLIC8gZl9MU0NMSworCSAqCisJICovCisJdGNfd3JpdGUoRFAwX1ZJRE1OR0VOMSwg
MzI3NjgpOworCisJcmV0dXJuIDA7CitlcnI6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlu
dCB0Y19hdXhfbGlua19zZXR1cChzdHJ1Y3QgdGNfZGF0YSAqdGMpCit7CisJdW5zaWduZWQgbG9u
ZyByYXRlOworCXUzMiB2YWx1ZTsKKwlpbnQgcmV0OworCisJcmF0ZSA9IGNsa19nZXRfcmF0ZSh0
Yy0+cmVmY2xrKTsKKwlzd2l0Y2ggKHJhdGUpIHsKKwljYXNlIDM4NDAwMDAwOgorCQl2YWx1ZSA9
IFJFRl9GUkVRXzM4TTQ7CisJCWJyZWFrOworCWNhc2UgMjYwMDAwMDA6CisJCXZhbHVlID0gUkVG
X0ZSRVFfMjZNOworCQlicmVhazsKKwljYXNlIDE5MjAwMDAwOgorCQl2YWx1ZSA9IFJFRl9GUkVR
XzE5TTI7CisJCWJyZWFrOworCWNhc2UgMTMwMDAwMDA6CisJCXZhbHVlID0gUkVGX0ZSRVFfMTNN
OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZXJyKHRjLT5kZXYsICJJbnZhbGlkIHJlZmNs
ayByYXRlOiAlbHUgSHpcbiIsIHJhdGUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBT
ZXR1cCBEUC1QSFkgLyBQTEwgKi8KKwl2YWx1ZSB8PSBTWVNDTEtfU0VMX0xTQ0xLIHwgTFNDTEtf
RElWXzI7CisJdGNfd3JpdGUoU1lTX1BMTFBBUkFNLCB2YWx1ZSk7CisKKwl0Y193cml0ZShEUF9Q
SFlfQ1RSTCwgQkdSRU4gfCBQV1JfU1dfRU4gfCBCSVQoMikgfCBQSFlfQTBfRU4pOworCisJLyoK
KwkgKiBJbml0aWFsbHkgUExMcyBhcmUgaW4gYnlwYXNzLiBGb3JjZSBQTEwgcGFyYW1ldGVyIHVw
ZGF0ZSwKKwkgKiBkaXNhYmxlIFBMTCBieXBhc3MsIGVuYWJsZSBQTEwKKwkgKi8KKwl0Y193cml0
ZShEUDBfUExMQ1RSTCwgUExMVVBEQVRFIHwgUExMRU4pOworCXRjX3dhaXRfcGxsX2xvY2sodGMp
OworCisJdGNfd3JpdGUoRFAxX1BMTENUUkwsIFBMTFVQREFURSB8IFBMTEVOKTsKKwl0Y193YWl0
X3BsbF9sb2NrKHRjKTsKKworCXJldCA9IHJlZ21hcF9yZWFkX3BvbGxfdGltZW91dCh0Yy0+cmVn
bWFwLCBEUF9QSFlfQ1RSTCwgdmFsdWUsCisJCQkJICAgICAgIHZhbHVlICYgUEhZX1JEWSwgMSwg
MTAwMCk7CisJaWYgKHJldCA9PSAtRVRJTUVET1VUKSB7CisJCWRldl9lcnIodGMtPmRldiwgIlRp
bWVvdXQgd2FpdGluZyBmb3IgUEhZIHRvIGJlY29tZSByZWFkeSIpOworCQlyZXR1cm4gcmV0Owor
CX0gZWxzZSBpZiAocmV0KQorCQlnb3RvIGVycjsKKworCS8qIFNldHVwIEFVWCBsaW5rICovCisJ
dGNfd3JpdGUoRFAwX0FVWENGRzEsIEFVWF9SWF9GSUxURVJfRU4gfAorCQkgKDB4MDYgPDwgOCkg
fAkvKiBBdXggQml0IFBlcmlvZCBDYWxjdWxhdG9yIFRocmVzaG9sZCAqLworCQkgKDB4M2YgPDwg
MCkpOwkvKiBBdXggUmVzcG9uc2UgVGltZW91dCBUaW1lciAqLworCisJcmV0dXJuIDA7CitlcnI6
CisJZGV2X2Vycih0Yy0+ZGV2LCAidGNfYXV4X2xpbmtfc2V0dXAgZmFpbGVkOiAlZFxuIiwgcmV0
KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHRjX2dldF9kaXNwbGF5X3Byb3BzKHN0
cnVjdCB0Y19kYXRhICp0YykKK3sKKwlpbnQgcmV0OworCS8qIHRlbXAgYnVmZmVyICovCisJdTgg
dG1wWzhdOworCisJLyogUmVhZCBEUCBSeCBMaW5rIENhcGFiaWxpdHkgKi8KKwlyZXQgPSBkcm1f
ZHBfbGlua19wcm9iZSgmdGMtPmF1eCwgJnRjLT5saW5rLmJhc2UpOworCWlmIChyZXQgPCAwKQor
CQlnb3RvIGVycl9kcGNkX3JlYWQ7CisJaWYgKCh0Yy0+bGluay5iYXNlLnJhdGUgIT0gMTYyMDAw
KSAmJiAodGMtPmxpbmsuYmFzZS5yYXRlICE9IDI3MDAwMCkpCisJCWdvdG8gZXJyX2RwY2RfaW52
YWw7CisKKwlyZXQgPSBkcm1fZHBfZHBjZF9yZWFkYigmdGMtPmF1eCwgRFBfTUFYX0RPV05TUFJF
QUQsIHRtcCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyX2RwY2RfcmVhZDsKKwl0Yy0+bGlu
ay5zcHJlYWQgPSB0bXBbMF0gJiBCSVQoMCk7IC8qIDAuNSUgZG93biBzcHJlYWQgKi8KKworCXJl
dCA9IGRybV9kcF9kcGNkX3JlYWRiKCZ0Yy0+YXV4LCBEUF9NQUlOX0xJTktfQ0hBTk5FTF9DT0RJ
TkcsIHRtcCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyX2RwY2RfcmVhZDsKKwl0Yy0+bGlu
ay5jb2Rpbmc4YjEwYiA9IHRtcFswXSAmIEJJVCgwKTsKKwl0Yy0+bGluay5zY3JhbWJsZXJfZGlz
ID0gMDsKKwkvKiByZWFkIGFzc3IgKi8KKwlyZXQgPSBkcm1fZHBfZHBjZF9yZWFkYigmdGMtPmF1
eCwgRFBfRURQX0NPTkZJR1VSQVRJT05fU0VULCB0bXApOworCWlmIChyZXQgPCAwKQorCQlnb3Rv
IGVycl9kcGNkX3JlYWQ7CisJdGMtPmxpbmsuYXNzciA9IHRtcFswXSAmIERQX0FMVEVSTkFURV9T
Q1JBTUJMRVJfUkVTRVRfRU5BQkxFOworCisJZGV2X2RiZyh0Yy0+ZGV2LCAiRFBDRCByZXY6ICVk
LiVkLCByYXRlOiAlcywgbGFuZXM6ICVkLCBmcmFtaW5nOiAlc1xuIiwKKwkJdGMtPmxpbmsuYmFz
ZS5yZXZpc2lvbiA+PiA0LCB0Yy0+bGluay5iYXNlLnJldmlzaW9uICYgMHgwZiwKKwkJKHRjLT5s
aW5rLmJhc2UucmF0ZSA9PSAxNjIwMDApID8gIjEuNjJHYnBzIiA6ICIyLjdHYnBzIiwKKwkJdGMt
PmxpbmsuYmFzZS5udW1fbGFuZXMsCisJCSh0Yy0+bGluay5iYXNlLmNhcGFiaWxpdGllcyAmIERQ
X0xJTktfQ0FQX0VOSEFOQ0VEX0ZSQU1JTkcpID8KKwkJImVuaGFuY2VkIiA6ICJub24tZW5oYW5j
ZWQiKTsKKwlkZXZfZGJnKHRjLT5kZXYsICJBTlNJIDhCLzEwQjogJWRcbiIsIHRjLT5saW5rLmNv
ZGluZzhiMTBiKTsKKwlkZXZfZGJnKHRjLT5kZXYsICJEaXNwbGF5IEFTU1I6ICVkLCBUQzM1ODc2
NyBBU1NSOiAlZFxuIiwKKwkJdGMtPmxpbmsuYXNzciwgdGMtPmFzc3IpOworCisJcmV0dXJuIDA7
CisKK2Vycl9kcGNkX3JlYWQ6CisJZGV2X2Vycih0Yy0+ZGV2LCAiZmFpbGVkIHRvIHJlYWQgRFBD
RDogJWRcbiIsIHJldCk7CisJcmV0dXJuIHJldDsKK2Vycl9kcGNkX2ludmFsOgorCWRldl9lcnIo
dGMtPmRldiwgImludmFsaWQgRFBDRFxuIik7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRp
YyBpbnQgdGNfc2V0X3ZpZGVvX21vZGUoc3RydWN0IHRjX2RhdGEgKnRjLCBzdHJ1Y3QgZHJtX2Rp
c3BsYXlfbW9kZSAqbW9kZSkKK3sKKwlpbnQgcmV0OworCWludCB2aWRfc3luY19kbHk7CisJaW50
IG1heF90dV9zeW1ib2w7CisKKwlpbnQgbGVmdF9tYXJnaW4gPSBtb2RlLT5odG90YWwgLSBtb2Rl
LT5oc3luY19lbmQ7CisJaW50IHJpZ2h0X21hcmdpbiA9IG1vZGUtPmhzeW5jX3N0YXJ0IC0gbW9k
ZS0+aGRpc3BsYXk7CisJaW50IGhzeW5jX2xlbiA9IG1vZGUtPmhzeW5jX2VuZCAtIG1vZGUtPmhz
eW5jX3N0YXJ0OworCWludCB1cHBlcl9tYXJnaW4gPSBtb2RlLT52dG90YWwgLSBtb2RlLT52c3lu
Y19lbmQ7CisJaW50IGxvd2VyX21hcmdpbiA9IG1vZGUtPnZzeW5jX3N0YXJ0IC0gbW9kZS0+dmRp
c3BsYXk7CisJaW50IHZzeW5jX2xlbiA9IG1vZGUtPnZzeW5jX2VuZCAtIG1vZGUtPnZzeW5jX3N0
YXJ0OworCisJZGV2X2RiZyh0Yy0+ZGV2LCAic2V0IG1vZGUgJWR4JWRcbiIsCisJCW1vZGUtPmhk
aXNwbGF5LCBtb2RlLT52ZGlzcGxheSk7CisJZGV2X2RiZyh0Yy0+ZGV2LCAiSCBtYXJnaW4gJWQs
JWQgc3luYyAlZFxuIiwKKwkJbGVmdF9tYXJnaW4sIHJpZ2h0X21hcmdpbiwgaHN5bmNfbGVuKTsK
KwlkZXZfZGJnKHRjLT5kZXYsICJWIG1hcmdpbiAlZCwlZCBzeW5jICVkXG4iLAorCQl1cHBlcl9t
YXJnaW4sIGxvd2VyX21hcmdpbiwgdnN5bmNfbGVuKTsKKwlkZXZfZGJnKHRjLT5kZXYsICJ0b3Rh
bDogJWR4JWRcbiIsIG1vZGUtPmh0b3RhbCwgbW9kZS0+dnRvdGFsKTsKKworCisJLyogTENEIEN0
bCBGcmFtZSBTaXplICovCisJdGNfd3JpdGUoVlBDVFJMMCwgKDB4NDAgPDwgMjApIC8qIFZTREVM
QVkgKi8gfAorCQkgT1BYTEZNVF9SR0I4ODggfCBGUk1TWU5DX0RJU0FCTEVEIHwgTVNGX0RJU0FC
TEVEKTsKKwl0Y193cml0ZShIVElNMDEsIChsZWZ0X21hcmdpbiA8PCAxNikgfAkJLyogSCBiYWNr
IHBvcmNoICovCisJCQkgKGhzeW5jX2xlbiA8PCAwKSk7CQkvKiBIc3luYyAqLworCXRjX3dyaXRl
KEhUSU0wMiwgKHJpZ2h0X21hcmdpbiA8PCAxNikgfAkJLyogSCBmcm9udCBwb3JjaCAqLworCQkJ
IChtb2RlLT5oZGlzcGxheSA8PCAwKSk7CS8qIHdpZHRoICovCisJdGNfd3JpdGUoVlRJTTAxLCAo
dXBwZXJfbWFyZ2luIDw8IDE2KSB8CQkvKiBWIGJhY2sgcG9yY2ggKi8KKwkJCSAodnN5bmNfbGVu
IDw8IDApKTsJCS8qIFZzeW5jICovCisJdGNfd3JpdGUoVlRJTTAyLCAobG93ZXJfbWFyZ2luIDw8
IDE2KSB8CQkvKiBWIGZyb250IHBvcmNoICovCisJCQkgKG1vZGUtPnZkaXNwbGF5IDw8IDApKTsJ
LyogaGVpZ2h0ICovCisJdGNfd3JpdGUoVkZVRU4wLCBWRlVFTik7CQkvKiB1cGRhdGUgc2V0dGlu
Z3MgKi8KKworCS8qIFRlc3QgcGF0dGVybiBzZXR0aW5ncyAqLworCXRjX3dyaXRlKFRTVENUTCwK
KwkJICgxMjAgPDwgMjQpIHwJLyogUmVkIENvbG9yIGNvbXBvbmVudCB2YWx1ZSAqLworCQkgKDIw
IDw8IDE2KSB8CS8qIEdyZWVuIENvbG9yIGNvbXBvbmVudCB2YWx1ZSAqLworCQkgKDk5IDw8IDgp
IHwJLyogQmx1ZSBDb2xvciBjb21wb25lbnQgdmFsdWUgKi8KKwkJICgxIDw8IDQpIHwJLyogRW5h
YmxlIEkyQyBGaWx0ZXIgKi8KKwkJICgyIDw8IDApIHwJLyogQ29sb3IgYmFyIE1vZGUgKi8KKwkJ
IDApOworCisJLyogRFAgTWFpbiBTdHJlYW0gQXR0cmlidXRlcyAqLworCXZpZF9zeW5jX2RseSA9
IGhzeW5jX2xlbiArIGxlZnRfbWFyZ2luICsgbW9kZS0+aGRpc3BsYXk7CisJdGNfd3JpdGUoRFAw
X1ZJRFNZTkNERUxBWSwKKwkJICgweDAwM2UgPDwgMTYpIHwJLyogdGhyZXNoX2RseSAqLworCQkg
KHZpZF9zeW5jX2RseSA8PCAwKSk7CisKKwl0Y193cml0ZShEUDBfVE9UQUxWQUwsIChtb2RlLT52
dG90YWwgPDwgMTYpIHwgKG1vZGUtPmh0b3RhbCkpOworCisJdGNfd3JpdGUoRFAwX1NUQVJUVkFM
LAorCQkgKCh1cHBlcl9tYXJnaW4gKyB2c3luY19sZW4pIDw8IDE2KSB8CisJCSAoKGxlZnRfbWFy
Z2luICsgaHN5bmNfbGVuKSA8PCAwKSk7CisKKwl0Y193cml0ZShEUDBfQUNUSVZFVkFMLCAobW9k
ZS0+dmRpc3BsYXkgPDwgMTYpIHwgKG1vZGUtPmhkaXNwbGF5KSk7CisKKwl0Y193cml0ZShEUDBf
U1lOQ1ZBTCwgKHZzeW5jX2xlbiA8PCAxNikgfCAoaHN5bmNfbGVuIDw8IDApKTsKKworCXRjX3dy
aXRlKERQSVBYTEZNVCwgVlNfUE9MX0FDVElWRV9MT1cgfCBIU19QT0xfQUNUSVZFX0xPVyB8CisJ
CSBERV9QT0xfQUNUSVZFX0hJR0ggfCBTVUJfQ0ZHX1RZUEVfQ09ORklHMSB8IERQSV9CUFBfUkdC
ODg4KTsKKworCS8qCisJICogUmVjb21tZW5kZWQgbWF4aW11bSBudW1iZXIgb2Ygc3ltYm9scyB0
cmFuc2ZlcnJlZCBpbiBhIHRyYW5zZmVyIHVuaXQ6CisJICogRElWX1JPVU5EX1VQKChpbnB1dCBh
Y3RpdmUgdmlkZW8gYmFuZHdpZHRoIGluIGJ5dGVzKSAqIHR1X3NpemUsCisJICogICAgICAgICAg
ICAgIChvdXRwdXQgYWN0aXZlIHZpZGVvIGJhbmR3aWR0aCBpbiBieXRlcykpCisJICogTXVzdCBi
ZSBsZXNzIHRoYW4gdHVfc2l6ZS4KKwkgKi8KKwltYXhfdHVfc3ltYm9sID0gVFVfU0laRV9SRUNP
TU1FTkRFRCAtIDE7CisJdGNfd3JpdGUoRFAwX01JU0MsIChtYXhfdHVfc3ltYm9sIDw8IDIzKSB8
IFRVX1NJWkVfUkVDT01NRU5ERUQgfCBCUENfOCk7CisKKwlyZXR1cm4gMDsKK2VycjoKKwlyZXR1
cm4gcmV0OworfQorCitzdGF0aWMgaW50IHRjX2xpbmtfdHJhaW5pbmcoc3RydWN0IHRjX2RhdGEg
KnRjLCBpbnQgcGF0dGVybikKK3sKKwljb25zdCBjaGFyICogY29uc3QgKmVycm9yczsKKwl1MzIg
c3JjY3RybCA9IHRjX3NyY2N0cmwodGMpIHwgRFAwX1NSQ0NUUkxfU0NSTUJMRElTIHwKKwkJICAg
ICAgRFAwX1NSQ0NUUkxfQVVUT0NPUlJFQ1Q7CisJaW50IHRpbWVvdXQ7CisJaW50IHJldHJ5Owor
CXUzMiB2YWx1ZTsKKwlpbnQgcmV0OworCisJaWYgKHBhdHRlcm4gPT0gRFBfVFJBSU5JTkdfUEFU
VEVSTl8xKSB7CisJCXNyY2N0cmwgfD0gRFAwX1NSQ0NUUkxfVFAxOworCQllcnJvcnMgPSB0cmFp
bmluZ19wYXR0ZXJuMV9lcnJvcnM7CisJfSBlbHNlIHsKKwkJc3JjY3RybCB8PSBEUDBfU1JDQ1RS
TF9UUDI7CisJCWVycm9ycyA9IHRyYWluaW5nX3BhdHRlcm4yX2Vycm9yczsKKwl9CisKKwkvKiBT
ZXQgRFBDRCAweDEwMiBmb3IgVHJhaW5pbmcgUGFydCAxIG9yIDIgKi8KKwl0Y193cml0ZShEUDBf
U05LTFRDVFJMLCBEUF9MSU5LX1NDUkFNQkxJTkdfRElTQUJMRSB8IHBhdHRlcm4pOworCisJdGNf
d3JpdGUoRFAwX0xUTE9PUENUUkwsCisJCSAoMHgwZiA8PCAyOCkgfAkvKiBEZWZlciBJdGVyYXRp
b24gQ291bnQgKi8KKwkJICgweDBmIDw8IDI0KSB8CS8qIExvb3AgSXRlcmF0aW9uIENvdW50ICov
CisJCSAoMHgwZCA8PCAwKSk7CS8qIExvb3AgVGltZXIgRGVsYXkgKi8KKworCXJldHJ5ID0gNTsK
KwlkbyB7CisJCS8qIFNldCBEUDAgVHJhaW5pbmcgUGF0dGVybiAqLworCQl0Y193cml0ZShEUDBf
U1JDQ1RSTCwgc3JjY3RybCk7CisKKwkJLyogRW5hYmxlIERQMCB0byBzdGFydCBMaW5rIFRyYWlu
aW5nICovCisJCXRjX3dyaXRlKERQMENUTCwgRFBfRU4pOworCisJCS8qIHdhaXQgKi8KKwkJdGlt
ZW91dCA9IDEwMDA7CisJCWRvIHsKKwkJCXRjX3JlYWQoRFAwX0xUU1RBVCwgJnZhbHVlKTsKKwkJ
CXVkZWxheSgxKTsKKwkJfSB3aGlsZSAoKCEodmFsdWUgJiBMVF9MT09QRE9ORSkpICYmICgtLXRp
bWVvdXQpKTsKKwkJaWYgKHRpbWVvdXQgPT0gMCkgeworCQkJZGV2X2Vycih0Yy0+ZGV2LCAiTGlu
ayB0cmFpbmluZyB0aW1lb3V0IVxuIik7CisJCX0gZWxzZSB7CisJCQlpbnQgcGF0dGVybiA9ICh2
YWx1ZSA+PiAxMSkgJiAweDM7CisJCQlpbnQgZXJyb3IgPSAodmFsdWUgPj4gOCkgJiAweDc7CisK
KwkJCWRldl9kYmcodGMtPmRldiwKKwkJCQkiTGluayB0cmFpbmluZyBwaGFzZSAlZCBkb25lIGFm
dGVyICVkIHVTOiAlc1xuIiwKKwkJCQlwYXR0ZXJuLCAxMDAwIC0gdGltZW91dCwgZXJyb3JzW2Vy
cm9yXSk7CisJCQlpZiAocGF0dGVybiA9PSBEUF9UUkFJTklOR19QQVRURVJOXzEgJiYgZXJyb3Ig
PT0gMCkKKwkJCQlicmVhazsKKwkJCWlmIChwYXR0ZXJuID09IERQX1RSQUlOSU5HX1BBVFRFUk5f
MikgeworCQkJCXZhbHVlICY9IExUX0NIQU5ORUwxX0VRX0JJVFMgfAorCQkJCQkgTFRfSU5URVJM
QU5FX0FMSUdOX0RPTkUgfAorCQkJCQkgTFRfQ0hBTk5FTDBfRVFfQklUUzsKKwkJCQkvKiBpbiBj
YXNlIG9mIHR3byBsYW5lcyAqLworCQkJCWlmICgodGMtPmxpbmsuYmFzZS5udW1fbGFuZXMgPT0g
MikgJiYKKwkJCQkgICAgKHZhbHVlID09IChMVF9DSEFOTkVMMV9FUV9CSVRTIHwKKwkJCQkJICAg
ICAgIExUX0lOVEVSTEFORV9BTElHTl9ET05FIHwKKwkJCQkJICAgICAgIExUX0NIQU5ORUwwX0VR
X0JJVFMpKSkKKwkJCQkJYnJlYWs7CisJCQkJLyogaW4gY2FzZSBvZiBvbmUgbGluZSAqLworCQkJ
CWlmICgodGMtPmxpbmsuYmFzZS5udW1fbGFuZXMgPT0gMSkgJiYKKwkJCQkgICAgKHZhbHVlID09
IChMVF9JTlRFUkxBTkVfQUxJR05fRE9ORSB8CisJCQkJCSAgICAgICBMVF9DSEFOTkVMMF9FUV9C
SVRTKSkpCisJCQkJCWJyZWFrOworCQkJfQorCQl9CisJCS8qIHJlc3RhcnQgKi8KKwkJdGNfd3Jp
dGUoRFAwQ1RMLCAwKTsKKwkJdXNsZWVwX3JhbmdlKDEwLCAyMCk7CisJfSB3aGlsZSAoLS1yZXRy
eSk7CisJaWYgKHJldHJ5ID09IDApIHsKKwkJZGV2X2Vycih0Yy0+ZGV2LCAiRmFpbGVkIHRvIGZp
bmlzaCB0cmFpbmluZyBwaGFzZSAlZFxuIiwKKwkJCXBhdHRlcm4pOworCX0KKworCXJldHVybiAw
OworZXJyOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgdGNfbWFpbl9saW5rX3NldHVw
KHN0cnVjdCB0Y19kYXRhICp0YykKK3sKKwlzdHJ1Y3QgZHJtX2RwX2F1eCAqYXV4ID0gJnRjLT5h
dXg7CisJc3RydWN0IGRldmljZSAqZGV2ID0gdGMtPmRldjsKKwl1bnNpZ25lZCBpbnQgcmF0ZTsK
Kwl1MzIgZHBfcGh5X2N0cmw7CisJaW50IHRpbWVvdXQ7CisJYm9vbCBhbGlnbmVkOworCWJvb2wg
cmVhZHk7CisJdTMyIHZhbHVlOworCWludCByZXQ7CisJdTggdG1wWzhdOworCisJLyogZGlzcGxh
eSBtb2RlIHNob3VsZCBiZSBzZXQgYXQgdGhpcyBwb2ludCAqLworCWlmICghdGMtPm1vZGUpCisJ
CXJldHVybiAtRUlOVkFMOworCisJLyogZnJvbSBleGNlbCBmaWxlIC0gRFAwX1NyY0N0cmwgKi8K
Kwl0Y193cml0ZShEUDBfU1JDQ1RSTCwgRFAwX1NSQ0NUUkxfU0NSTUJMRElTIHwgRFAwX1NSQ0NU
UkxfRU44MTBCIHwKKwkJIERQMF9TUkNDVFJMX0xBTkVTS0VXIHwgRFAwX1NSQ0NUUkxfTEFORVNf
MiB8CisJCSBEUDBfU1JDQ1RSTF9CVzI3IHwgRFAwX1NSQ0NUUkxfQVVUT0NPUlJFQ1QpOworCS8q
IGZyb20gZXhjZWwgZmlsZSAtIERQMV9TcmNDdHJsICovCisJdGNfd3JpdGUoMHgwN2EwLCAweDAw
MDAzMDgzKTsKKworCXJhdGUgPSBjbGtfZ2V0X3JhdGUodGMtPnJlZmNsayk7CisJc3dpdGNoIChy
YXRlKSB7CisJY2FzZSAzODQwMDAwMDoKKwkJdmFsdWUgPSBSRUZfRlJFUV8zOE00OworCQlicmVh
azsKKwljYXNlIDI2MDAwMDAwOgorCQl2YWx1ZSA9IFJFRl9GUkVRXzI2TTsKKwkJYnJlYWs7CisJ
Y2FzZSAxOTIwMDAwMDoKKwkJdmFsdWUgPSBSRUZfRlJFUV8xOU0yOworCQlicmVhazsKKwljYXNl
IDEzMDAwMDAwOgorCQl2YWx1ZSA9IFJFRl9GUkVRXzEzTTsKKwkJYnJlYWs7CisJZGVmYXVsdDoK
KwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXZhbHVlIHw9IFNZU0NMS19TRUxfTFNDTEsgfCBMU0NM
S19ESVZfMjsKKwl0Y193cml0ZShTWVNfUExMUEFSQU0sIHZhbHVlKTsKKwkvKiBTZXR1cCBNYWlu
IExpbmsgKi8KKwlkcF9waHlfY3RybCA9IEJHUkVOIHwgUFdSX1NXX0VOIHwgQklUKDIpIHwgUEhZ
X0EwX0VOIHwgIFBIWV9NMF9FTjsKKwl0Y193cml0ZShEUF9QSFlfQ1RSTCwgZHBfcGh5X2N0cmwp
OworCW1zbGVlcCgxMDApOworCisJLyogUExMIHNldHVwICovCisJdGNfd3JpdGUoRFAwX1BMTENU
UkwsIFBMTFVQREFURSB8IFBMTEVOKTsKKwl0Y193YWl0X3BsbF9sb2NrKHRjKTsKKworCXRjX3dy
aXRlKERQMV9QTExDVFJMLCBQTExVUERBVEUgfCBQTExFTik7CisJdGNfd2FpdF9wbGxfbG9jayh0
Yyk7CisKKwkvKiBQWEwgUExMIHNldHVwICovCisJaWYgKHRjLT50ZXN0X3BhdHRlcm4pIHsKKwkJ
cmV0ID0gdGNfcHhsX3BsbF9lbih0YywgY2xrX2dldF9yYXRlKHRjLT5yZWZjbGspKTsKKwkJaWYg
KHJldCkKKwkJCWdvdG8gZXJyOworCX0KKworCS8qIFJlc2V0L0VuYWJsZSBNYWluIExpbmtzICov
CisJZHBfcGh5X2N0cmwgfD0gRFBfUEhZX1JTVCB8IFBIWV9NMV9SU1QgfCBQSFlfTTBfUlNUOwor
CXRjX3dyaXRlKERQX1BIWV9DVFJMLCBkcF9waHlfY3RybCk7CisJdXNsZWVwX3JhbmdlKDEwMCwg
MjAwKTsKKwlkcF9waHlfY3RybCAmPSB+KERQX1BIWV9SU1QgfCBQSFlfTTFfUlNUIHwgUEhZX00w
X1JTVCk7CisJdGNfd3JpdGUoRFBfUEhZX0NUUkwsIGRwX3BoeV9jdHJsKTsKKworCXRpbWVvdXQg
PSAxMDAwOworCWRvIHsKKwkJdGNfcmVhZChEUF9QSFlfQ1RSTCwgJnZhbHVlKTsKKwkJdWRlbGF5
KDEpOworCX0gd2hpbGUgKCghKHZhbHVlICYgUEhZX1JEWSkpICYmICgtLXRpbWVvdXQpKTsKKwor
CWlmICh0aW1lb3V0ID09IDApIHsKKwkJZGV2X2VycihkZXYsICJ0aW1lb3V0IHdhaXRpbmcgZm9y
IHBoeSBiZWNvbWUgcmVhZHkiKTsKKwkJcmV0dXJuIC1FVElNRURPVVQ7CisJfQorCisJLyogU2V0
IG1pc2M6IDggYml0cyBwZXIgY29sb3IgKi8KKwlyZXQgPSByZWdtYXBfdXBkYXRlX2JpdHModGMt
PnJlZ21hcCwgRFAwX01JU0MsIEJQQ184LCBCUENfOCk7CisJaWYgKHJldCkKKwkJZ290byBlcnI7
CisKKwkvKgorCSAqIEFTU1IgbW9kZQorCSAqIG9uIFRDMzU4NzY3IHNpZGUgQVNTUiBjb25maWd1
cmVkIHRocm91Z2ggc3RyYXAgcGluCisJICogc2VlbXMgdGhlcmUgaXMgbm8gd2F5IHRvIGNoYW5n
ZSB0aGlzIHNldHRpbmcgZnJvbSBTVworCSAqCisJICogY2hlY2sgaXMgdGMgY29uZmlndXJlZCBm
b3Igc2FtZSBtb2RlCisJICovCisJaWYgKHRjLT5hc3NyICE9IHRjLT5saW5rLmFzc3IpIHsKKwkJ
ZGV2X2RiZyhkZXYsICJUcnlpbmcgdG8gc2V0IGRpc3BsYXkgdG8gQVNTUjogJWRcbiIsCisJCQl0
Yy0+YXNzcik7CisJCS8qIHRyeSB0byBzZXQgQVNTUiBvbiBkaXNwbGF5IHNpZGUgKi8KKwkJdG1w
WzBdID0gdGMtPmFzc3I7CisJCXJldCA9IGRybV9kcF9kcGNkX3dyaXRlYihhdXgsIERQX0VEUF9D
T05GSUdVUkFUSU9OX1NFVCwgdG1wWzBdKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGVycl9k
cGNkX3JlYWQ7CisJCS8qIHJlYWQgYmFjayAqLworCQlyZXQgPSBkcm1fZHBfZHBjZF9yZWFkYihh
dXgsIERQX0VEUF9DT05GSUdVUkFUSU9OX1NFVCwgdG1wKTsKKwkJaWYgKHJldCA8IDApCisJCQln
b3RvIGVycl9kcGNkX3JlYWQ7CisKKwkJaWYgKHRtcFswXSAhPSB0Yy0+YXNzcikgeworCQkJZGV2
X3dhcm4oZGV2LCAiRmFpbGVkIHRvIHN3aXRjaCBkaXNwbGF5IEFTU1IgdG8gJWQsIGZhbGxpbmcg
YmFjayB0byB1bnNjcmFtYmxlZCBtb2RlXG4iLAorCQkJCSB0Yy0+YXNzcik7CisJCQkvKiB0cnlp
bmcgd2l0aCBkaXNhYmxlZCBzY3JhbWJsZXIgKi8KKwkJCXRjLT5saW5rLnNjcmFtYmxlcl9kaXMg
PSAxOworCQl9CisJfQorCisJLyogU2V0dXAgTGluayAmIERQUnggQ29uZmlnIGZvciBUcmFpbmlu
ZyAqLworCXJldCA9IGRybV9kcF9saW5rX2NvbmZpZ3VyZShhdXgsICZ0Yy0+bGluay5iYXNlKTsK
KwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJfZHBjZF93cml0ZTsKKworCS8qIERPV05TUFJFQURf
Q1RSTCAqLworCXRtcFswXSA9IHRjLT5saW5rLnNwcmVhZCA/IERQX1NQUkVBRF9BTVBfMF81IDog
MHgwMDsKKwkvKiBNQUlOX0xJTktfQ0hBTk5FTF9DT0RJTkdfU0VUICovCisJdG1wWzFdID0gIHRj
LT5saW5rLmNvZGluZzhiMTBiID8gRFBfU0VUX0FOU0lfOEIxMEIgOiAweDAwOworCXJldCA9IGRy
bV9kcF9kcGNkX3dyaXRlKGF1eCwgRFBfRE9XTlNQUkVBRF9DVFJMLCB0bXAsIDIpOworCWlmIChy
ZXQgPCAwKQorCQlnb3RvIGVycl9kcGNkX3dyaXRlOworCisJcmV0ID0gdGNfbGlua190cmFpbmlu
Zyh0YywgRFBfVFJBSU5JTkdfUEFUVEVSTl8xKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjsKKwor
CXJldCA9IHRjX2xpbmtfdHJhaW5pbmcodGMsIERQX1RSQUlOSU5HX1BBVFRFUk5fMik7CisJaWYg
KHJldCkKKwkJZ290byBlcnI7CisKKwkvKiBDbGVhciBEUENEIDB4MTAyICovCisJLyogTm90ZTog
Q2FuIE5vdCB1c2UgRFAwX1NOS0xUQ1RSTCAoMHgwNkU0KSBzaG9ydCBjdXQgKi8KKwl0bXBbMF0g
PSB0Yy0+bGluay5zY3JhbWJsZXJfZGlzID8gRFBfTElOS19TQ1JBTUJMSU5HX0RJU0FCTEUgOiAw
eDAwOworCXJldCA9IGRybV9kcF9kcGNkX3dyaXRlYihhdXgsIERQX1RSQUlOSU5HX1BBVFRFUk5f
U0VULCB0bXBbMF0pOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycl9kcGNkX3dyaXRlOworCisJ
LyogQ2xlYXIgVHJhaW5pbmcgUGF0dGVybiwgc2V0IEF1dG9Db3JyZWN0IE1vZGUgPSAxICovCisJ
dGNfd3JpdGUoRFAwX1NSQ0NUUkwsIHRjX3NyY2N0cmwodGMpIHwgRFAwX1NSQ0NUUkxfQVVUT0NP
UlJFQ1QpOworCisJLyogV2FpdCAqLworCXRpbWVvdXQgPSAxMDA7CisJZG8geworCQl1ZGVsYXko
MSk7CisJCS8qIFJlYWQgRFBDRCAweDIwMi0weDIwNyAqLworCQlyZXQgPSBkcm1fZHBfZHBjZF9y
ZWFkX2xpbmtfc3RhdHVzKGF1eCwgdG1wICsgMik7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBl
cnJfZHBjZF9yZWFkOworCQlyZWFkeSA9ICh0bXBbMl0gPT0gKChEUF9DSEFOTkVMX0VRX0JJVFMg
PDwgNCkgfCAvKiBMYW5lMSAqLworCQkJCSAgICAgRFBfQ0hBTk5FTF9FUV9CSVRTKSk7ICAgICAg
LyogTGFuZTAgKi8KKwkJYWxpZ25lZCA9IHRtcFs0XSAmIERQX0lOVEVSTEFORV9BTElHTl9ET05F
OworCX0gd2hpbGUgKCgtLXRpbWVvdXQpICYmICEocmVhZHkgJiYgYWxpZ25lZCkpOworCisJaWYg
KHRpbWVvdXQgPT0gMCkgeworCQkvKiBSZWFkIERQQ0QgMHgyMDAtMHgyMDEgKi8KKwkJcmV0ID0g
ZHJtX2RwX2RwY2RfcmVhZChhdXgsIERQX1NJTktfQ09VTlQsIHRtcCwgMik7CisJCWlmIChyZXQg
PCAwKQorCQkJZ290byBlcnJfZHBjZF9yZWFkOworCQlkZXZfaW5mbyhkZXYsICIweDAyMDAgU0lO
S19DT1VOVDogMHglMDJ4XG4iLCB0bXBbMF0pOworCQlkZXZfaW5mbyhkZXYsICIweDAyMDEgREVW
SUNFX1NFUlZJQ0VfSVJRX1ZFQ1RPUjogMHglMDJ4XG4iLAorCQkJIHRtcFsxXSk7CisJCWRldl9p
bmZvKGRldiwgIjB4MDIwMiBMQU5FMF8xX1NUQVRVUzogMHglMDJ4XG4iLCB0bXBbMl0pOworCQlk
ZXZfaW5mbyhkZXYsICIweDAyMDQgTEFORV9BTElHTl9TVEFUVVNfVVBEQVRFRDogMHglMDJ4XG4i
LAorCQkJIHRtcFs0XSk7CisJCWRldl9pbmZvKGRldiwgIjB4MDIwNSBTSU5LX1NUQVRVUzogMHgl
MDJ4XG4iLCB0bXBbNV0pOworCQlkZXZfaW5mbyhkZXYsICIweDAyMDYgQURKVVNUX1JFUVVFU1Rf
TEFORTBfMTogMHglMDJ4XG4iLAorCQkJIHRtcFs2XSk7CisKKwkJaWYgKCFyZWFkeSkKKwkJCWRl
dl9lcnIoZGV2LCAiTGFuZTAvMSBub3QgcmVhZHlcbiIpOworCQlpZiAoIWFsaWduZWQpCisJCQlk
ZXZfZXJyKGRldiwgIkxhbmUwLzEgbm90IGFsaWduZWRcbiIpOworCQlyZXR1cm4gLUVBR0FJTjsK
Kwl9CisKKwlyZXQgPSB0Y19zZXRfdmlkZW9fbW9kZSh0YywgdGMtPm1vZGUpOworCWlmIChyZXQp
CisJCWdvdG8gZXJyOworCisJLyogU2V0IE0vTiAqLworCXJldCA9IHRjX3N0cmVhbV9jbG9ja19j
YWxjKHRjKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjsKKworCXJldHVybiAwOworZXJyX2RwY2Rf
cmVhZDoKKwlkZXZfZXJyKHRjLT5kZXYsICJGYWlsZWQgdG8gcmVhZCBEUENEOiAlZFxuIiwgcmV0
KTsKKwlyZXR1cm4gcmV0OworZXJyX2RwY2Rfd3JpdGU6CisJZGV2X2Vycih0Yy0+ZGV2LCAiRmFp
bGVkIHRvIHdyaXRlIERQQ0Q6ICVkXG4iLCByZXQpOworZXJyOgorCXJldHVybiByZXQ7Cit9CisK
K3N0YXRpYyBpbnQgdGNfbWFpbl9saW5rX3N0cmVhbShzdHJ1Y3QgdGNfZGF0YSAqdGMsIGludCBz
dGF0ZSkKK3sKKwlpbnQgcmV0OworCXUzMiB2YWx1ZTsKKworCWRldl9kYmcodGMtPmRldiwgInN0
cmVhbTogJWRcbiIsIHN0YXRlKTsKKworCWlmIChzdGF0ZSkgeworCQl2YWx1ZSA9IFZJRF9NTl9H
RU4gfCBEUF9FTjsKKwkJaWYgKHRjLT5saW5rLmJhc2UuY2FwYWJpbGl0aWVzICYgRFBfTElOS19D
QVBfRU5IQU5DRURfRlJBTUlORykKKwkJCXZhbHVlIHw9IEVGX0VOOworCQl0Y193cml0ZShEUDBD
VEwsIHZhbHVlKTsKKwkJLyoKKwkJICogVklEX0VOIGFzc2VydGlvbiBzaG91bGQgYmUgZGVsYXll
ZCBieSBhdCBsZWFzdCBOICogTFNDTEsKKwkJICogY3ljbGVzIGZyb20gdGhlIHRpbWUgVklEX01O
X0dFTiBpcyBlbmFibGVkIGluIG9yZGVyIHRvCisJCSAqIGdlbmVyYXRlIHN0YWJsZSB2YWx1ZXMg
Zm9yIFZJRF9NLiBMU0NMSyBpcyAyNzAgTUh6IG9yCisJCSAqIDE2MiBNSHosIFZJRF9OIGlzIHNl
dCB0byAzMjc2OCBpbiAgdGNfc3RyZWFtX2Nsb2NrX2NhbGMoKSwKKwkJICogc28gYSBkZWxheSBv
ZiBhdCBsZWFzdCAyMDMgdXMgc2hvdWxkIHN1ZmZpY2UuCisJCSAqLworCQl1c2xlZXBfcmFuZ2Uo
NTAwLCAxMDAwKTsKKwkJdmFsdWUgfD0gVklEX0VOOworCQl0Y193cml0ZShEUDBDVEwsIHZhbHVl
KTsKKwkJLyogU2V0IGlucHV0IGludGVyZmFjZSAqLworCQl2YWx1ZSA9IERQMF9BVURTUkNfTk9f
SU5QVVQ7CisJCWlmICh0Yy0+dGVzdF9wYXR0ZXJuKQorCQkJdmFsdWUgfD0gRFAwX1ZJRFNSQ19D
T0xPUl9CQVI7CisJCWVsc2UKKwkJCXZhbHVlIHw9IERQMF9WSURTUkNfRFBJX1JYOworCQl0Y193
cml0ZShTWVNDVFJMLCB2YWx1ZSk7CisJfSBlbHNlIHsKKwkJdGNfd3JpdGUoRFAwQ1RMLCAwKTsK
Kwl9CisKKwlyZXR1cm4gMDsKK2VycjoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgZW51bSBk
cm1fY29ubmVjdG9yX3N0YXR1cwordGNfY29ubmVjdG9yX2RldGVjdChzdHJ1Y3QgZHJtX2Nvbm5l
Y3RvciAqY29ubmVjdG9yLCBib29sIGZvcmNlKQoreworCXJldHVybiBjb25uZWN0b3Jfc3RhdHVz
X2Nvbm5lY3RlZDsKK30KKworc3RhdGljIHZvaWQgdGNfYnJpZGdlX3ByZV9lbmFibGUoc3RydWN0
IGRybV9icmlkZ2UgKmJyaWRnZSkKK3sKKwlzdHJ1Y3QgdGNfZGF0YSAqdGMgPSBicmlkZ2VfdG9f
dGMoYnJpZGdlKTsKKworCWRybV9wYW5lbF9wcmVwYXJlKHRjLT5wYW5lbCk7Cit9CisKK3N0YXRp
YyB2b2lkIHRjX2JyaWRnZV9lbmFibGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKK3sKKwlz
dHJ1Y3QgdGNfZGF0YSAqdGMgPSBicmlkZ2VfdG9fdGMoYnJpZGdlKTsKKwlpbnQgcmV0OworCisJ
cmV0ID0gdGNfbWFpbl9saW5rX3NldHVwKHRjKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJy
KHRjLT5kZXYsICJtYWluIGxpbmsgc2V0dXAgZXJyb3I6ICVkXG4iLCByZXQpOworCQlyZXR1cm47
CisJfQorCisJcmV0ID0gdGNfbWFpbl9saW5rX3N0cmVhbSh0YywgMSk7CisJaWYgKHJldCA8IDAp
IHsKKwkJZGV2X2Vycih0Yy0+ZGV2LCAibWFpbiBsaW5rIHN0cmVhbSBzdGFydCBlcnJvcjogJWRc
biIsIHJldCk7CisJCXJldHVybjsKKwl9CisKKwlkcm1fcGFuZWxfZW5hYmxlKHRjLT5wYW5lbCk7
Cit9CisKK3N0YXRpYyB2b2lkIHRjX2JyaWRnZV9kaXNhYmxlKHN0cnVjdCBkcm1fYnJpZGdlICpi
cmlkZ2UpCit7CisJc3RydWN0IHRjX2RhdGEgKnRjID0gYnJpZGdlX3RvX3RjKGJyaWRnZSk7CisJ
aW50IHJldDsKKworCWRybV9wYW5lbF9kaXNhYmxlKHRjLT5wYW5lbCk7CisKKwlyZXQgPSB0Y19t
YWluX2xpbmtfc3RyZWFtKHRjLCAwKTsKKwlpZiAocmV0IDwgMCkKKwkJZGV2X2Vycih0Yy0+ZGV2
LCAibWFpbiBsaW5rIHN0cmVhbSBzdG9wIGVycm9yOiAlZFxuIiwgcmV0KTsKK30KKworc3RhdGlj
IHZvaWQgdGNfYnJpZGdlX3Bvc3RfZGlzYWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQor
eworCXN0cnVjdCB0Y19kYXRhICp0YyA9IGJyaWRnZV90b190YyhicmlkZ2UpOworCisJZHJtX3Bh
bmVsX3VucHJlcGFyZSh0Yy0+cGFuZWwpOworfQorCitzdGF0aWMgYm9vbCB0Y19icmlkZ2VfbW9k
ZV9maXh1cChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLAorCQkJCSBjb25zdCBzdHJ1Y3QgZHJt
X2Rpc3BsYXlfbW9kZSAqbW9kZSwKKwkJCQkgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkaikK
K3sKKwkvKiBGaXh1cCBzeW5jIHBvbGFyaXRpZXMsIGJvdGggaHN5bmMgYW5kIHZzeW5jIGFyZSBh
Y3RpdmUgbG93ICovCisJYWRqLT5mbGFncyA9IG1vZGUtPmZsYWdzOworCWFkai0+ZmxhZ3MgfD0g
KERSTV9NT0RFX0ZMQUdfTkhTWU5DIHwgRFJNX01PREVfRkxBR19OVlNZTkMpOworCWFkai0+Zmxh
Z3MgJj0gfihEUk1fTU9ERV9GTEFHX1BIU1lOQyB8IERSTV9NT0RFX0ZMQUdfUFZTWU5DKTsKKwor
CXJldHVybiB0cnVlOworfQorCitzdGF0aWMgaW50IHRjX2Nvbm5lY3Rvcl9tb2RlX3ZhbGlkKHN0
cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCisJCQkJICAgc3RydWN0IGRybV9kaXNwbGF5
X21vZGUgKm1vZGUpCit7CisJLyogQWNjZXB0IGFueSBtb2RlICovCisJcmV0dXJuIE1PREVfT0s7
Cit9CisKK3N0YXRpYyB2b2lkIHRjX2JyaWRnZV9tb2RlX3NldChzdHJ1Y3QgZHJtX2JyaWRnZSAq
YnJpZGdlLAorCQkJICAgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAorCQkJICAg
ICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGopCit7CisJc3RydWN0IHRjX2RhdGEgKnRj
ID0gYnJpZGdlX3RvX3RjKGJyaWRnZSk7CisKKwl0Yy0+bW9kZSA9IG1vZGU7Cit9CisKK3N0YXRp
YyBpbnQgdGNfY29ubmVjdG9yX2dldF9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVj
dG9yKQoreworCXN0cnVjdCB0Y19kYXRhICp0YyA9IGNvbm5lY3Rvcl90b190Yyhjb25uZWN0b3Ip
OworCXN0cnVjdCBlZGlkICplZGlkOworCXVuc2lnbmVkIGludCBjb3VudDsKKworCWlmICh0Yy0+
cGFuZWwgJiYgdGMtPnBhbmVsLT5mdW5jcyAmJiB0Yy0+cGFuZWwtPmZ1bmNzLT5nZXRfbW9kZXMp
IHsKKwkJY291bnQgPSB0Yy0+cGFuZWwtPmZ1bmNzLT5nZXRfbW9kZXModGMtPnBhbmVsKTsKKwkJ
aWYgKGNvdW50ID4gMCkKKwkJCXJldHVybiBjb3VudDsKKwl9CisKKwllZGlkID0gZHJtX2dldF9l
ZGlkKGNvbm5lY3RvciwgJnRjLT5hdXguZGRjKTsKKworCWtmcmVlKHRjLT5lZGlkKTsKKwl0Yy0+
ZWRpZCA9IGVkaWQ7CisJaWYgKCFlZGlkKQorCQlyZXR1cm4gMDsKKworCWRybV9tb2RlX2Nvbm5l
Y3Rvcl91cGRhdGVfZWRpZF9wcm9wZXJ0eShjb25uZWN0b3IsIGVkaWQpOworCWNvdW50ID0gZHJt
X2FkZF9lZGlkX21vZGVzKGNvbm5lY3RvciwgZWRpZCk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisK
K3N0YXRpYyB2b2lkIHRjX2Nvbm5lY3Rvcl9zZXRfcG9sbGluZyhzdHJ1Y3QgdGNfZGF0YSAqdGMs
CisJCQkJICAgICBzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQoreworCS8qIFRPRE86
IGFkZCBzdXBwb3J0IGZvciBIUEQgKi8KKwljb25uZWN0b3ItPnBvbGxlZCA9IERSTV9DT05ORUNU
T1JfUE9MTF9DT05ORUNUIHwKKwkJCSAgICBEUk1fQ09OTkVDVE9SX1BPTExfRElTQ09OTkVDVDsK
K30KKworc3RhdGljIHN0cnVjdCBkcm1fZW5jb2RlciAqCit0Y19jb25uZWN0b3JfYmVzdF9lbmNv
ZGVyKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJc3RydWN0IHRjX2RhdGEg
KnRjID0gY29ubmVjdG9yX3RvX3RjKGNvbm5lY3Rvcik7CisKKwlyZXR1cm4gdGMtPmJyaWRnZS5l
bmNvZGVyOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3JfaGVscGVyX2Z1
bmNzIHRjX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgPSB7CisJLmdldF9tb2RlcyA9IHRjX2Nvbm5l
Y3Rvcl9nZXRfbW9kZXMsCisJLm1vZGVfdmFsaWQgPSB0Y19jb25uZWN0b3JfbW9kZV92YWxpZCwK
KwkuYmVzdF9lbmNvZGVyID0gdGNfY29ubmVjdG9yX2Jlc3RfZW5jb2RlciwKK307CisKK3N0YXRp
YyB2b2lkIHRjX2Nvbm5lY3Rvcl9kZXN0cm95KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0
b3IpCit7CisJZHJtX2Nvbm5lY3Rvcl91bnJlZ2lzdGVyKGNvbm5lY3Rvcik7CisJZHJtX2Nvbm5l
Y3Rvcl9jbGVhbnVwKGNvbm5lY3Rvcik7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Nv
bm5lY3Rvcl9mdW5jcyB0Y19jb25uZWN0b3JfZnVuY3MgPSB7CisJLmRwbXMgPSBkcm1faGVscGVy
X2Nvbm5lY3Rvcl9kcG1zLAorCS5maWxsX21vZGVzID0gZHJtX2hlbHBlcl9wcm9iZV9zaW5nbGVf
Y29ubmVjdG9yX21vZGVzLAorCS5kZXRlY3QgPSB0Y19jb25uZWN0b3JfZGV0ZWN0LAorCS5kZXN0
cm95ID0gdGNfY29ubmVjdG9yX2Rlc3Ryb3ksCit9OworCitzdGF0aWMgaW50IHRjX2JyaWRnZV9h
dHRhY2goc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKK3sKKwl1MzIgYnVzX2Zvcm1hdCA9IE1F
RElBX0JVU19GTVRfUkdCODg4XzFYMjQ7CisJc3RydWN0IHRjX2RhdGEgKnRjID0gYnJpZGdlX3Rv
X3RjKGJyaWRnZSk7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IGJyaWRnZS0+ZGV2OworCWlu
dCByZXQ7CisKKwkvKiBDcmVhdGUgZURQIGNvbm5lY3RvciAqLworCWRybV9jb25uZWN0b3JfaGVs
cGVyX2FkZCgmdGMtPmNvbm5lY3RvciwKKwkJCQkgJnRjX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3Mp
OworCXJldCA9IGRybV9jb25uZWN0b3JfaW5pdChkcm0sICZ0Yy0+Y29ubmVjdG9yLCAmdGNfY29u
bmVjdG9yX2Z1bmNzLAorCQkJCSBEUk1fTU9ERV9DT05ORUNUT1JfZURQKTsKKwlpZiAocmV0KQor
CQlyZXR1cm4gcmV0OworCisJaWYgKHRjLT5wYW5lbCkKKwkJZHJtX3BhbmVsX2F0dGFjaCh0Yy0+
cGFuZWwsICZ0Yy0+Y29ubmVjdG9yKTsKKworCWRybV9kaXNwbGF5X2luZm9fc2V0X2J1c19mb3Jt
YXRzKCZ0Yy0+Y29ubmVjdG9yLmRpc3BsYXlfaW5mbywKKwkJCQkJICZidXNfZm9ybWF0LCAxKTsK
Kwlkcm1fbW9kZV9jb25uZWN0b3JfYXR0YWNoX2VuY29kZXIoJnRjLT5jb25uZWN0b3IsIHRjLT5i
cmlkZ2UuZW5jb2Rlcik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBk
cm1fYnJpZGdlX2Z1bmNzIHRjX2JyaWRnZV9mdW5jcyA9IHsKKwkuYXR0YWNoID0gdGNfYnJpZGdl
X2F0dGFjaCwKKwkubW9kZV9zZXQgPSB0Y19icmlkZ2VfbW9kZV9zZXQsCisJLnByZV9lbmFibGUg
PSB0Y19icmlkZ2VfcHJlX2VuYWJsZSwKKwkuZW5hYmxlID0gdGNfYnJpZGdlX2VuYWJsZSwKKwku
ZGlzYWJsZSA9IHRjX2JyaWRnZV9kaXNhYmxlLAorCS5wb3N0X2Rpc2FibGUgPSB0Y19icmlkZ2Vf
cG9zdF9kaXNhYmxlLAorCS5tb2RlX2ZpeHVwID0gdGNfYnJpZGdlX21vZGVfZml4dXAsCit9Owor
CitzdGF0aWMgYm9vbCB0Y19yZWFkYWJsZV9yZWcoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25l
ZCBpbnQgcmVnKQoreworCXJldHVybiByZWcgIT0gU1lTQ1RSTDsKK30KKworc3RhdGljIGNvbnN0
IHN0cnVjdCByZWdtYXBfcmFuZ2UgdGNfdm9sYXRpbGVfcmFuZ2VzW10gPSB7CisJcmVnbWFwX3Jl
Z19yYW5nZShEUDBfQVVYV0RBVEEoMCksIERQMF9BVVhTVEFUVVMpLAorCXJlZ21hcF9yZWdfcmFu
Z2UoRFAwX0xUU1RBVCwgRFAwX1NOS0xUQ0hHUkVRKSwKKwlyZWdtYXBfcmVnX3JhbmdlKERQX1BI
WV9DVFJMLCBEUF9QSFlfQ1RSTCksCisJcmVnbWFwX3JlZ19yYW5nZShEUDBfUExMQ1RSTCwgUFhM
X1BMTENUUkwpLAorCXJlZ21hcF9yZWdfcmFuZ2UoVkZVRU4wLCBWRlVFTjApLAorfTsKKworc3Rh
dGljIGNvbnN0IHN0cnVjdCByZWdtYXBfYWNjZXNzX3RhYmxlIHRjX3ZvbGF0aWxlX3RhYmxlID0g
eworCS55ZXNfcmFuZ2VzID0gdGNfdm9sYXRpbGVfcmFuZ2VzLAorCS5uX3llc19yYW5nZXMgPSBB
UlJBWV9TSVpFKHRjX3ZvbGF0aWxlX3JhbmdlcyksCit9OworCitzdGF0aWMgYm9vbCB0Y193cml0
ZWFibGVfcmVnKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHJlZykKK3sKKwlyZXR1
cm4gKHJlZyAhPSBUQ19JRFJFRykgJiYKKwkgICAgICAgKHJlZyAhPSBEUDBfTFRTVEFUKSAmJgor
CSAgICAgICAocmVnICE9IERQMF9TTktMVENIR1JFUSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1
Y3QgcmVnbWFwX2NvbmZpZyB0Y19yZWdtYXBfY29uZmlnID0geworCS5uYW1lID0gInRjMzU4NzY3
IiwKKwkucmVnX2JpdHMgPSAxNiwKKwkudmFsX2JpdHMgPSAzMiwKKwkucmVnX3N0cmlkZSA9IDQs
CisJLm1heF9yZWdpc3RlciA9IFBMTF9EQkcsCisJLmNhY2hlX3R5cGUgPSBSRUdDQUNIRV9SQlRS
RUUsCisJLnJlYWRhYmxlX3JlZyA9IHRjX3JlYWRhYmxlX3JlZywKKwkudm9sYXRpbGVfdGFibGUg
PSAmdGNfdm9sYXRpbGVfdGFibGUsCisJLndyaXRlYWJsZV9yZWcgPSB0Y193cml0ZWFibGVfcmVn
LAorCS5yZWdfZm9ybWF0X2VuZGlhbiA9IFJFR01BUF9FTkRJQU5fQklHLAorCS52YWxfZm9ybWF0
X2VuZGlhbiA9IFJFR01BUF9FTkRJQU5fTElUVExFLAorfTsKKworc3RhdGljIGludCB0Y19wcm9i
ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAq
aWQpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmNsaWVudC0+ZGV2OworCXN0cnVjdCBkZXZp
Y2Vfbm9kZSAqZXA7CisJc3RydWN0IHRjX2RhdGEgKnRjOworCWludCByZXQ7CisKKwl0YyA9IGRl
dm1fa3phbGxvYyhkZXYsIHNpemVvZigqdGMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXRjKQorCQly
ZXR1cm4gLUVOT01FTTsKKworCXRjLT5kZXYgPSBkZXY7CisKKwkvKiBwb3J0QDEgaXMgdGhlIG91
dHB1dCBwb3J0ICovCisJZXAgPSBvZl9ncmFwaF9nZXRfZW5kcG9pbnRfYnlfcmVncyhkZXYtPm9m
X25vZGUsIDEsIC0xKTsKKwlpZiAoZXApIHsKKwkJc3RydWN0IGRldmljZV9ub2RlICpyZW1vdGU7
CisKKwkJcmVtb3RlID0gb2ZfZ3JhcGhfZ2V0X3JlbW90ZV9wb3J0X3BhcmVudChlcCk7CisJCWlm
ICghcmVtb3RlKSB7CisJCQlkZXZfd2FybihkZXYsICJlbmRwb2ludCAlcyBub3QgY29ubmVjdGVk
XG4iLAorCQkJCSBlcC0+ZnVsbF9uYW1lKTsKKwkJCW9mX25vZGVfcHV0KGVwKTsKKwkJCXJldHVy
biAtRU5PREVWOworCQl9CisJCW9mX25vZGVfcHV0KGVwKTsKKwkJdGMtPnBhbmVsID0gb2ZfZHJt
X2ZpbmRfcGFuZWwocmVtb3RlKTsKKwkJaWYgKHRjLT5wYW5lbCkgeworCQkJZGV2X2RiZyhkZXYs
ICJmb3VuZCBwYW5lbCAlc1xuIiwgcmVtb3RlLT5mdWxsX25hbWUpOworCQl9IGVsc2UgeworCQkJ
ZGV2X2RiZyhkZXYsICJ3YWl0aW5nIGZvciBwYW5lbCAlc1xuIiwKKwkJCQlyZW1vdGUtPmZ1bGxf
bmFtZSk7CisJCQlvZl9ub2RlX3B1dChyZW1vdGUpOworCQkJcmV0dXJuIC1FUFJPQkVfREVGRVI7
CisJCX0KKwkJb2Zfbm9kZV9wdXQocmVtb3RlKTsKKwl9CisKKwkvKiBTaHV0IGRvd24gR1BJTyBp
cyBvcHRpb25hbCAqLworCXRjLT5zZF9ncGlvID0gZGV2bV9ncGlvZF9nZXRfb3B0aW9uYWwoZGV2
LCAic2h1dGRvd24iLCBHUElPRF9PVVRfSElHSCk7CisJaWYgKElTX0VSUih0Yy0+c2RfZ3Bpbykp
CisJCXJldHVybiBQVFJfRVJSKHRjLT5zZF9ncGlvKTsKKworCWlmICh0Yy0+c2RfZ3Bpbykgewor
CQlncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAodGMtPnNkX2dwaW8sIDApOworCQl1c2xlZXBfcmFu
Z2UoNTAwMCwgMTAwMDApOworCX0KKworCS8qIFJlc2V0IEdQSU8gaXMgb3B0aW9uYWwgKi8KKwl0
Yy0+cmVzZXRfZ3BpbyA9IGRldm1fZ3Bpb2RfZ2V0X29wdGlvbmFsKGRldiwgInJlc2V0IiwgR1BJ
T0RfT1VUX0xPVyk7CisJaWYgKElTX0VSUih0Yy0+cmVzZXRfZ3BpbykpCisJCXJldHVybiBQVFJf
RVJSKHRjLT5yZXNldF9ncGlvKTsKKworCWlmICh0Yy0+cmVzZXRfZ3BpbykgeworCQlncGlvZF9z
ZXRfdmFsdWVfY2Fuc2xlZXAodGMtPnJlc2V0X2dwaW8sIDEpOworCQl1c2xlZXBfcmFuZ2UoNTAw
MCwgMTAwMDApOworCX0KKworCXRjLT5yZWZjbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAicmVmIik7
CisJaWYgKElTX0VSUih0Yy0+cmVmY2xrKSkgeworCQlyZXQgPSBQVFJfRVJSKHRjLT5yZWZjbGsp
OworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBnZXQgcmVmY2xrOiAlZFxuIiwgcmV0KTsKKwkJ
cmV0dXJuIHJldDsKKwl9CisKKwl0Yy0+cmVnbWFwID0gZGV2bV9yZWdtYXBfaW5pdF9pMmMoY2xp
ZW50LCAmdGNfcmVnbWFwX2NvbmZpZyk7CisJaWYgKElTX0VSUih0Yy0+cmVnbWFwKSkgeworCQly
ZXQgPSBQVFJfRVJSKHRjLT5yZWdtYXApOworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBpbml0
aWFsaXplIHJlZ21hcDogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0g
cmVnbWFwX3JlYWQodGMtPnJlZ21hcCwgVENfSURSRUcsICZ0Yy0+cmV2KTsKKwlpZiAocmV0KSB7
CisJCWRldl9lcnIodGMtPmRldiwgImNhbiBub3QgcmVhZCBkZXZpY2UgSUQ6ICVkXG4iLCByZXQp
OworCQlyZXR1cm4gcmV0OworCX0KKworCWlmICgodGMtPnJldiAhPSAweDY2MDEpICYmICh0Yy0+
cmV2ICE9IDB4NjYwMykpIHsKKwkJZGV2X2Vycih0Yy0+ZGV2LCAiaW52YWxpZCBkZXZpY2UgSUQ6
IDB4JTA4eFxuIiwgdGMtPnJldik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXRjLT5hc3Ny
ID0gKHRjLT5yZXYgPT0gMHg2NjAxKTsgLyogRW5hYmxlIEFTU1IgZm9yIGVEUCBwYW5lbHMgKi8K
KworCXJldCA9IHRjX2F1eF9saW5rX3NldHVwKHRjKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0
OworCisJLyogUmVnaXN0ZXIgRFAgQVVYIGNoYW5uZWwgKi8KKwl0Yy0+YXV4Lm5hbWUgPSAiVEMz
NTg3NjcgQVVYIGkyYyBhZGFwdGVyIjsKKwl0Yy0+YXV4LmRldiA9IHRjLT5kZXY7CisJdGMtPmF1
eC50cmFuc2ZlciA9IHRjX2F1eF90cmFuc2ZlcjsKKwlyZXQgPSBkcm1fZHBfYXV4X3JlZ2lzdGVy
KCZ0Yy0+YXV4KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gdGNfZ2V0X2Rp
c3BsYXlfcHJvcHModGMpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX3VucmVnaXN0ZXJfYXV4Owor
CisJdGNfY29ubmVjdG9yX3NldF9wb2xsaW5nKHRjLCAmdGMtPmNvbm5lY3Rvcik7CisKKwl0Yy0+
YnJpZGdlLmZ1bmNzID0gJnRjX2JyaWRnZV9mdW5jczsKKwl0Yy0+YnJpZGdlLm9mX25vZGUgPSBk
ZXYtPm9mX25vZGU7CisJcmV0ID0gZHJtX2JyaWRnZV9hZGQoJnRjLT5icmlkZ2UpOworCWlmIChy
ZXQpIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gYWRkIGRybV9icmlkZ2U6ICVkXG4iLCBy
ZXQpOworCQlnb3RvIGVycl91bnJlZ2lzdGVyX2F1eDsKKwl9CisKKwlpMmNfc2V0X2NsaWVudGRh
dGEoY2xpZW50LCB0Yyk7CisKKwlyZXR1cm4gMDsKK2Vycl91bnJlZ2lzdGVyX2F1eDoKKwlkcm1f
ZHBfYXV4X3VucmVnaXN0ZXIoJnRjLT5hdXgpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBp
bnQgdGNfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IHRjX2Rh
dGEgKnRjID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwlkcm1fYnJpZGdlX3JlbW92
ZSgmdGMtPmJyaWRnZSk7CisJZHJtX2RwX2F1eF91bnJlZ2lzdGVyKCZ0Yy0+YXV4KTsKKworCXRj
X3B4bF9wbGxfZGlzKHRjKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0
IGkyY19kZXZpY2VfaWQgdGMzNTg3NjdfaTJjX2lkc1tdID0geworCXsgInRjMzU4NzY3IiwgMCB9
LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCB0YzM1ODc2N19pMmNfaWRzKTsK
Kworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgdGMzNTg3Njdfb2ZfaWRzW10gPSB7
CisJeyAuY29tcGF0aWJsZSA9ICJ0b3NoaWJhLHRjMzU4NzY3IiwgfSwKKwl7IH0KK307CitNT0RV
TEVfREVWSUNFX1RBQkxFKG9mLCB0YzM1ODc2N19vZl9pZHMpOworCitzdGF0aWMgc3RydWN0IGky
Y19kcml2ZXIgdGMzNTg3NjdfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gInRj
MzU4NzY3IiwKKwkJLm9mX21hdGNoX3RhYmxlID0gdGMzNTg3Njdfb2ZfaWRzLAorCX0sCisJLmlk
X3RhYmxlID0gdGMzNTg3NjdfaTJjX2lkcywKKwkucHJvYmUgPSB0Y19wcm9iZSwKKwkucmVtb3Zl
CT0gdGNfcmVtb3ZlLAorfTsKK21vZHVsZV9pMmNfZHJpdmVyKHRjMzU4NzY3X2RyaXZlcik7CisK
K01PRFVMRV9BVVRIT1IoIkFuZHJleSBHdXNha292IDxhbmRyZXkuZ3VzYWtvdkBjb2dlbnRlbWJl
ZGRlZC5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oInRjMzU4NzY3IGVEUCBlbmNvZGVyIGRy
aXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotLSAKMi44LjEKCl9fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QK
ZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9w
Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=