From mboxrd@z Thu Jan 1 00:00:00 1970 From: Philipp Zabel Subject: [PATCH v15 2/6] drm/mediatek: Add HDMI support Date: Wed, 20 Apr 2016 10:49:26 +0200 Message-ID: <1461142170-23946-3-git-send-email-p.zabel@pengutronix.de> References: <1461142170-23946-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: <1461142170-23946-1-git-send-email-p.zabel@pengutronix.de> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org Cc: Mark Rutland , Stephen Boyd , Michael Turquette , Jie Qiu , Cawa Cheng , YT Shen , Yingjoe Chen , devicetree@vger.kernel.org, Jitao Shi , kernel@pengutronix.de, Pawel Moll , Ian Campbell , Rob Herring , linux-mediatek@lists.infradead.org, Matthias Brugger , Paul Bolle , Emil Velikov , Tomasz Figa , Kumar Gala List-Id: devicetree@vger.kernel.org RnJvbTogSmllIFFpdSA8amllLnFpdUBtZWRpYXRlay5jb20+CgpUaGlzIHBhdGNoIGFkZHMgZHJp dmVycyBmb3IgdGhlIEhETUkgYnJpZGdlIGNvbm5lY3RlZCB0byB0aGUgRFBJMApkaXNwbGF5IHN1 YnN5c3RlbSBmdW5jdGlvbiBibG9jaywgZm9yIHRoZSBIRE1JIEREQyBibG9jaywgYW5kIGZvcgp0 aGUgSERNSSBQSFkgdG8gc3VwcG9ydCBIRE1JIG91dHB1dC4KVGhpcyBpbmNsdWRlcyBhbiBpbnRl cmZhY2UgdG8gdGhlIGdlbmVyaWMgaGRtaS1jb2RlYyBkcml2ZXIgdG8gc3RhcnQKb3Igc3RvcCBh dWRpbyBwbGF5YmFjayBhbmQgdG8gcmV0cmlldmUgRUxEIChFRElEIGxpa2UgZGF0YSkgdG8gbGlt aXQgdGhlCnN1cHBvcnRlZCBhdWRpbyBmb3JtYXRzIHRvIHRoZSBIRE1JIHNpbmsgY2FwYWJpbGl0 aWVzLgoKU2lnbmVkLW9mZi1ieTogSmllIFFpdSA8amllLnFpdUBtZWRpYXRlay5jb20+ClNpZ25l ZC1vZmYtYnk6IFBoaWxpcHAgWmFiZWwgPHAuemFiZWxAcGVuZ3V0cm9uaXguZGU+Ci0tLQpDaGFu Z2VzIHNpbmNlIHYxNDoKIC0gU2VsZWN0IEhETUlfQ09ERUMKIC0gQWRkIGhkbWktY29kZWMgaW50 ZXJmYWNlCiAtIFNpbXBsaWZ5IG10a19oZG1pX2h3X2F1ZF9zZXRfY2hhbm5lbF9zdGF0dXMKLS0t CiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvS2NvbmZpZyAgICAgICAgICAgICAgIHwgICAgOCAr CiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvTWFrZWZpbGUgICAgICAgICAgICAgIHwgICAgNyAr CiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2NlYy5jICAgICAgICAgICAgIHwgIDI2NSAr KysrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2NlYy5oICAgICAgICAgICAgIHwgICAy NiArCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2hkbWkuYyAgICAgICAgICAgIHwgMTgy MyArKysrKysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtf aGRtaS5oICAgICAgICAgICAgfCAgIDIzICsKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtf aGRtaV9kZGMuYyAgICAgICAgfCAgMzU4ICsrKysrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv bXRrX2hkbWlfcmVncy5oICAgICAgIHwgIDIzNyArKysKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRl ay9tdGtfbXQ4MTczX2hkbWlfcGh5LmMgfCAgNTE1ICsrKysrKysKIDkgZmlsZXMgY2hhbmdlZCwg MzI2MiBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21l ZGlhdGVrL210a19jZWMuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRp YXRlay9tdGtfY2VjLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0 ZWsvbXRrX2hkbWkuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRl ay9tdGtfaGRtaS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVr L210a19oZG1pX2RkYy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlh dGVrL210a19oZG1pX3JlZ3MuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9t ZWRpYXRlay9tdGtfbXQ4MTczX2hkbWlfcGh5LmMKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vbWVkaWF0ZWsvS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9LY29uZmlnCmlu ZGV4IDBjNDlhOTQuLjc0ZjFjYzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRl ay9LY29uZmlnCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9LY29uZmlnCkBAIC0xMiwz ICsxMiwxMSBAQCBjb25maWcgRFJNX01FRElBVEVLCiAJICBUaGUgbW9kdWxlIHdpbGwgYmUgY2Fs bGVkIG1lZGlhdGVrLWRybQogCSAgVGhpcyBkcml2ZXIgcHJvdmlkZXMga2VybmVsIG1vZGUgc2V0 dGluZyBhbmQKIAkgIGJ1ZmZlciBtYW5hZ2VtZW50IHRvIHVzZXJzcGFjZS4KKworY29uZmlnIERS TV9NRURJQVRFS19IRE1JCisJdHJpc3RhdGUgIkRSTSBIRE1JIFN1cHBvcnQgZm9yIE1lZGlhdGVr IFNvQ3MiCisJZGVwZW5kcyBvbiBEUk1fTUVESUFURUsKKwlzZWxlY3QgU05EX1NPQ19IRE1JX0NP REVDIGlmIFNORF9TT0MKKwlzZWxlY3QgR0VORVJJQ19QSFkKKwloZWxwCisJICBEUk0vS01TIEhE TUkgZHJpdmVyIGZvciBNZWRpYXRlayBTb0NzCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v bWVkaWF0ZWsvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvTWFrZWZpbGUKaW5k ZXggNWZjZjU4ZS4uYmYyZTViZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVr L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9NYWtlZmlsZQpAQCAtMTIs MyArMTIsMTAgQEAgbWVkaWF0ZWstZHJtLXkgOj0gbXRrX2Rpc3Bfb3ZsLm8gXAogCQkgIG10a19k cGkubwogCiBvYmotJChDT05GSUdfRFJNX01FRElBVEVLKSArPSBtZWRpYXRlay1kcm0ubworCitt ZWRpYXRlay1kcm0taGRtaS1vYmpzIDo9IG10a19jZWMubyBcCisJCQkgIG10a19oZG1pLm8gXAor CQkJICBtdGtfaGRtaV9kZGMubyBcCisJCQkgIG10a19tdDgxNzNfaGRtaV9waHkubworCitvYmot JChDT05GSUdfRFJNX01FRElBVEVLX0hETUkpICs9IG1lZGlhdGVrLWRybS1oZG1pLm8KZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfY2VjLmMgYi9kcml2ZXJzL2dwdS9k cm0vbWVkaWF0ZWsvbXRrX2NlYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu LjdhM2ViOGMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRr X2NlYy5jCkBAIC0wLDAgKzEsMjY1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE0IE1lZGlh VGVrIEluYy4KKyAqIEF1dGhvcjogSmllIFFpdSA8amllLnFpdUBtZWRpYXRlay5jb20+CisgKgor ICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVk ZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51 eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3Bs YXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSAibXRrX2NlYy5oIgorCisjZGVmaW5lIFRSX0NP TkZJRwkJMHgwMAorI2RlZmluZSBDTEVBUl9DRUNfSVJRCQkJQklUKDE1KQorCisjZGVmaW5lIENF Q19DS0dFTgkJMHgwNAorI2RlZmluZSBDRUNfMzJLX1BETgkJCUJJVCgxOSkKKyNkZWZpbmUgUERO CQkJCUJJVCgxNikKKworI2RlZmluZSBSWF9FVkVOVAkJMHg1NAorI2RlZmluZSBIRE1JX1BPUkQJ CQlCSVQoMjUpCisjZGVmaW5lIEhETUlfSFRQTEcJCQlCSVQoMjQpCisjZGVmaW5lIEhETUlfUE9S RF9JTlRfRU4JCUJJVCg5KQorI2RlZmluZSBIRE1JX0hUUExHX0lOVF9FTgkJQklUKDgpCisKKyNk ZWZpbmUgUlhfR0VOX1dECQkweDU4CisjZGVmaW5lIEhETUlfUE9SRF9JTlRfMzJLX1NUQVRVUwlC SVQoMjYpCisjZGVmaW5lIFJYX1JJU0NfSU5UXzMyS19TVEFUVVMJCUJJVCgyNSkKKyNkZWZpbmUg SERNSV9IVFBMR19JTlRfMzJLX1NUQVRVUwlCSVQoMjQpCisjZGVmaW5lIEhETUlfUE9SRF9JTlRf MzJLX0NMUgkJQklUKDE4KQorI2RlZmluZSBSWF9JTlRfMzJLX0NMUgkJCUJJVCgxNykKKyNkZWZp bmUgSERNSV9IVFBMR19JTlRfMzJLX0NMUgkJQklUKDE2KQorI2RlZmluZSBIRE1JX1BPUkRfSU5U XzMyS19TVEFfTUFTSwlCSVQoMTApCisjZGVmaW5lIFJYX1JJU0NfSU5UXzMyS19TVEFfTUFTSwlC SVQoOSkKKyNkZWZpbmUgSERNSV9IVFBMR19JTlRfMzJLX1NUQV9NQVNLCUJJVCg4KQorI2RlZmlu ZSBIRE1JX1BPUkRfSU5UXzMyS19FTgkJQklUKDIpCisjZGVmaW5lIFJYX0lOVF8zMktfRU4JCQlC SVQoMSkKKyNkZWZpbmUgSERNSV9IVFBMR19JTlRfMzJLX0VOCQlCSVQoMCkKKworI2RlZmluZSBO T1JNQUxfSU5UX0NUUkwJCTB4NUMKKyNkZWZpbmUgSERNSV9IVFBMR19JTlRfU1RBCQlCSVQoMCkK KyNkZWZpbmUgSERNSV9QT1JEX0lOVF9TVEEJCUJJVCgxKQorI2RlZmluZSBIRE1JX0hUUExHX0lO VF9DTFIJCUJJVCgxNikKKyNkZWZpbmUgSERNSV9QT1JEX0lOVF9DTFIJCUJJVCgxNykKKyNkZWZp bmUgSERNSV9GVUxMX0lOVF9DTFIJCUJJVCgyMCkKKworc3RydWN0IG10a19jZWMgeworCXZvaWQg X19pb21lbSAqcmVnczsKKwlzdHJ1Y3QgY2xrICpjbGs7CisJaW50IGlycTsKKwlib29sIGhwZDsK Kwl2b2lkICgqaHBkX2V2ZW50KShib29sIGhwZCwgc3RydWN0IGRldmljZSAqZGV2KTsKKwlzdHJ1 Y3QgZGV2aWNlICpoZG1pX2RldjsKKwlzcGlubG9ja190IGxvY2s7Cit9OworCitzdGF0aWMgdm9p ZCBtdGtfY2VjX2NsZWFyX2JpdHMoc3RydWN0IG10a19jZWMgKmNlYywgdW5zaWduZWQgaW50IG9m ZnNldCwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgYml0cykKK3sKKwl2b2lkIF9faW9tZW0gKnJl ZyA9IGNlYy0+cmVncyArIG9mZnNldDsKKwl1MzIgdG1wOworCisJdG1wID0gcmVhZGwocmVnKTsK Kwl0bXAgJj0gfmJpdHM7CisJd3JpdGVsKHRtcCwgcmVnKTsKK30KKworc3RhdGljIHZvaWQgbXRr X2NlY19zZXRfYml0cyhzdHJ1Y3QgbXRrX2NlYyAqY2VjLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LAor CQkJICAgICB1bnNpZ25lZCBpbnQgYml0cykKK3sKKwl2b2lkIF9faW9tZW0gKnJlZyA9IGNlYy0+ cmVncyArIG9mZnNldDsKKwl1MzIgdG1wOworCisJdG1wID0gcmVhZGwocmVnKTsKKwl0bXAgfD0g Yml0czsKKwl3cml0ZWwodG1wLCByZWcpOworfQorCitzdGF0aWMgdm9pZCBtdGtfY2VjX21hc2so c3RydWN0IG10a19jZWMgKmNlYywgdW5zaWduZWQgaW50IG9mZnNldCwKKwkJCSB1bnNpZ25lZCBp bnQgdmFsLCB1bnNpZ25lZCBpbnQgbWFzaykKK3sKKwl1MzIgdG1wID0gcmVhZGwoY2VjLT5yZWdz ICsgb2Zmc2V0KSAmIH5tYXNrOworCisJdG1wIHw9IHZhbCAmIG1hc2s7CisJd3JpdGVsKHZhbCwg Y2VjLT5yZWdzICsgb2Zmc2V0KTsKK30KKwordm9pZCBtdGtfY2VjX3NldF9ocGRfZXZlbnQoc3Ry dWN0IGRldmljZSAqZGV2LAorCQkJICAgdm9pZCAoKmhwZF9ldmVudCkoYm9vbCBocGQsIHN0cnVj dCBkZXZpY2UgKmRldiksCisJCQkgICBzdHJ1Y3QgZGV2aWNlICpoZG1pX2RldikKK3sKKwlzdHJ1 Y3QgbXRrX2NlYyAqY2VjID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJdW5zaWduZWQgbG9uZyBm bGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjZWMtPmxvY2ssIGZsYWdzKTsKKwljZWMtPmhk bWlfZGV2ID0gaGRtaV9kZXY7CisJY2VjLT5ocGRfZXZlbnQgPSBocGRfZXZlbnQ7CisJc3Bpbl91 bmxvY2tfaXJxcmVzdG9yZSgmY2VjLT5sb2NrLCBmbGFncyk7Cit9CisKK2Jvb2wgbXRrX2NlY19o cGRfaGlnaChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG10a19jZWMgKmNlYyA9IGRl dl9nZXRfZHJ2ZGF0YShkZXYpOworCXVuc2lnbmVkIGludCBzdGF0dXM7CisKKwlzdGF0dXMgPSBy ZWFkbChjZWMtPnJlZ3MgKyBSWF9FVkVOVCk7CisKKwlyZXR1cm4gKHN0YXR1cyAmIChIRE1JX1BP UkQgfCBIRE1JX0hUUExHKSkgPT0gKEhETUlfUE9SRCB8IEhETUlfSFRQTEcpOworfQorCitzdGF0 aWMgdm9pZCBtdGtfY2VjX2h0cGxnX2lycV9pbml0KHN0cnVjdCBtdGtfY2VjICpjZWMpCit7CisJ bXRrX2NlY19tYXNrKGNlYywgQ0VDX0NLR0VOLCAwIHwgQ0VDXzMyS19QRE4sIFBETiB8IENFQ18z MktfUEROKTsKKwltdGtfY2VjX3NldF9iaXRzKGNlYywgUlhfR0VOX1dELCBIRE1JX1BPUkRfSU5U XzMyS19DTFIgfAorCQkJIFJYX0lOVF8zMktfQ0xSIHwgSERNSV9IVFBMR19JTlRfMzJLX0NMUik7 CisJbXRrX2NlY19tYXNrKGNlYywgUlhfR0VOX1dELCAwLCBIRE1JX1BPUkRfSU5UXzMyS19DTFIg fCBSWF9JTlRfMzJLX0NMUiB8CisJCSAgICAgSERNSV9IVFBMR19JTlRfMzJLX0NMUiB8IEhETUlf UE9SRF9JTlRfMzJLX0VOIHwKKwkJICAgICBSWF9JTlRfMzJLX0VOIHwgSERNSV9IVFBMR19JTlRf MzJLX0VOKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2NlY19odHBsZ19pcnFfZW5hYmxlKHN0cnVj dCBtdGtfY2VjICpjZWMpCit7CisJbXRrX2NlY19zZXRfYml0cyhjZWMsIFJYX0VWRU5ULCBIRE1J X1BPUkRfSU5UX0VOIHwgSERNSV9IVFBMR19JTlRfRU4pOworfQorCitzdGF0aWMgdm9pZCBtdGtf Y2VjX2h0cGxnX2lycV9kaXNhYmxlKHN0cnVjdCBtdGtfY2VjICpjZWMpCit7CisJbXRrX2NlY19j bGVhcl9iaXRzKGNlYywgUlhfRVZFTlQsIEhETUlfUE9SRF9JTlRfRU4gfCBIRE1JX0hUUExHX0lO VF9FTik7Cit9CisKK3N0YXRpYyB2b2lkIG10a19jZWNfY2xlYXJfaHRwbGdfaXJxKHN0cnVjdCBt dGtfY2VjICpjZWMpCit7CisJbXRrX2NlY19zZXRfYml0cyhjZWMsIFRSX0NPTkZJRywgQ0xFQVJf Q0VDX0lSUSk7CisJbXRrX2NlY19zZXRfYml0cyhjZWMsIE5PUk1BTF9JTlRfQ1RSTCwgSERNSV9I VFBMR19JTlRfQ0xSIHwKKwkJCSBIRE1JX1BPUkRfSU5UX0NMUiB8IEhETUlfRlVMTF9JTlRfQ0xS KTsKKwltdGtfY2VjX3NldF9iaXRzKGNlYywgUlhfR0VOX1dELCBIRE1JX1BPUkRfSU5UXzMyS19D TFIgfAorCQkJIFJYX0lOVF8zMktfQ0xSIHwgSERNSV9IVFBMR19JTlRfMzJLX0NMUik7CisJdXNs ZWVwX3JhbmdlKDUsIDEwKTsKKwltdGtfY2VjX2NsZWFyX2JpdHMoY2VjLCBOT1JNQUxfSU5UX0NU UkwsIEhETUlfSFRQTEdfSU5UX0NMUiB8CisJCQkgICBIRE1JX1BPUkRfSU5UX0NMUiB8IEhETUlf RlVMTF9JTlRfQ0xSKTsKKwltdGtfY2VjX2NsZWFyX2JpdHMoY2VjLCBUUl9DT05GSUcsIENMRUFS X0NFQ19JUlEpOworCW10a19jZWNfY2xlYXJfYml0cyhjZWMsIFJYX0dFTl9XRCwgSERNSV9QT1JE X0lOVF8zMktfQ0xSIHwKKwkJCSAgIFJYX0lOVF8zMktfQ0xSIHwgSERNSV9IVFBMR19JTlRfMzJL X0NMUik7Cit9CisKK3N0YXRpYyB2b2lkIG10a19jZWNfaHBkX2V2ZW50KHN0cnVjdCBtdGtfY2Vj ICpjZWMsIGJvb2wgaHBkKQoreworCXZvaWQgKCpocGRfZXZlbnQpKGJvb2wgaHBkLCBzdHJ1Y3Qg ZGV2aWNlICpkZXYpOworCXN0cnVjdCBkZXZpY2UgKmhkbWlfZGV2OworCXVuc2lnbmVkIGxvbmcg ZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2VjLT5sb2NrLCBmbGFncyk7CisJaHBkX2V2 ZW50ID0gY2VjLT5ocGRfZXZlbnQ7CisJaGRtaV9kZXYgPSBjZWMtPmhkbWlfZGV2OworCXNwaW5f dW5sb2NrX2lycXJlc3RvcmUoJmNlYy0+bG9jaywgZmxhZ3MpOworCisJaWYgKGhwZF9ldmVudCkK KwkJaHBkX2V2ZW50KGhwZCwgaGRtaV9kZXYpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgbXRr X2NlY19odHBsZ19pc3JfdGhyZWFkKGludCBpcnEsIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgZGV2 aWNlICpkZXYgPSBhcmc7CisJc3RydWN0IG10a19jZWMgKmNlYyA9IGRldl9nZXRfZHJ2ZGF0YShk ZXYpOworCWJvb2wgaHBkOworCisJbXRrX2NlY19jbGVhcl9odHBsZ19pcnEoY2VjKTsKKwlocGQg PSBtdGtfY2VjX2hwZF9oaWdoKGRldik7CisKKwlpZiAoY2VjLT5ocGQgIT0gaHBkKSB7CisJCWRl dl9kYmcoZGV2LCAiaG90cGx1ZyBldmVudCEgY3VyIGhwZCA9ICVkLCBocGQgPSAlZFxuIiwKKwkJ CWNlYy0+aHBkLCBocGQpOworCQljZWMtPmhwZCA9IGhwZDsKKwkJbXRrX2NlY19ocGRfZXZlbnQo Y2VjLCBocGQpOworCX0KKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQgbXRr X2NlY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkZXZp Y2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0IG10a19jZWMgKmNlYzsKKwlzdHJ1Y3QgcmVz b3VyY2UgKnJlczsKKwlpbnQgcmV0OworCisJY2VjID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9m KCpjZWMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNlYykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlw bGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBjZWMpOworCXNwaW5fbG9ja19pbml0KCZjZWMtPmxv Y2spOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVN LCAwKTsKKwljZWMtPnJlZ3MgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCByZXMpOworCWlm IChJU19FUlIoY2VjLT5yZWdzKSkgeworCQlyZXQgPSBQVFJfRVJSKGNlYy0+cmVncyk7CisJCWRl dl9lcnIoZGV2LCAiRmFpbGVkIHRvIGlvcmVtYXAgY2VjOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJu IHJldDsKKwl9CisKKwljZWMtPmNsayA9IGRldm1fY2xrX2dldChkZXYsIE5VTEwpOworCWlmIChJ U19FUlIoY2VjLT5jbGspKSB7CisJCXJldCA9IFBUUl9FUlIoY2VjLT5jbGspOworCQlkZXZfZXJy KGRldiwgIkZhaWxlZCB0byBnZXQgY2VjIGNsb2NrOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJl dDsKKwl9CisKKwljZWMtPmlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKGNl Yy0+aXJxIDwgMCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBnZXQgY2VjIGlycTogJWRc biIsIGNlYy0+aXJxKTsKKwkJcmV0dXJuIGNlYy0+aXJxOworCX0KKworCXJldCA9IGRldm1fcmVx dWVzdF90aHJlYWRlZF9pcnEoZGV2LCBjZWMtPmlycSwgTlVMTCwKKwkJCQkJbXRrX2NlY19odHBs Z19pc3JfdGhyZWFkLAorCQkJCQlJUlFGX1NIQVJFRCB8IElSUUZfVFJJR0dFUl9MT1cgfAorCQkJ CQlJUlFGX09ORVNIT1QsICJoZG1pIGhwZCIsIGRldik7CisJaWYgKHJldCkgeworCQlkZXZfZXJy KGRldiwgIkZhaWxlZCB0byByZWdpc3RlciBjZWMgaXJxOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJu IHJldDsKKwl9CisKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoY2VjLT5jbGspOworCWlmIChy ZXQpIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZW5hYmxlIGNlYyBjbG9jazogJWRcbiIs IHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJbXRrX2NlY19odHBsZ19pcnFfaW5pdChjZWMp OworCW10a19jZWNfaHRwbGdfaXJxX2VuYWJsZShjZWMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0 YXRpYyBpbnQgbXRrX2NlY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sK KwlzdHJ1Y3QgbXRrX2NlYyAqY2VjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlt dGtfY2VjX2h0cGxnX2lycV9kaXNhYmxlKGNlYyk7CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGNl Yy0+Y2xrKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2Vf aWQgbXRrX2NlY19vZl9pZHNbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3 My1jZWMiLCB9LAorCXt9Cit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10a19jZWNfZHJp dmVyID0geworCS5wcm9iZSA9IG10a19jZWNfcHJvYmUsCisJLnJlbW92ZSA9IG10a19jZWNfcmVt b3ZlLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gIm1lZGlhdGVrLWNlYyIsCisJCS5vZl9tYXRj aF90YWJsZSA9IG10a19jZWNfb2ZfaWRzLAorCX0sCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL21lZGlhdGVrL210a19jZWMuaCBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtf Y2VjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTAwNTdiNwotLS0gL2Rl di9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfY2VjLmgKQEAgLTAsMCAr MSwyNiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBNZWRpYVRlayBJbmMuCisgKiBBdXRo b3I6IEppZSBRaXUgPGppZS5xaXVAbWVkaWF0ZWsuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBp cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cisg KiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZl cnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24u CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2lmbmRlZiBfTVRLX0NFQ19ICisjZGVm aW5lIF9NVEtfQ0VDX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK3N0cnVjdCBkZXZp Y2U7CisKK3ZvaWQgbXRrX2NlY19zZXRfaHBkX2V2ZW50KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJ CSAgIHZvaWQgKCpob3RwbHVnX2V2ZW50KShib29sIGhwZCwgc3RydWN0IGRldmljZSAqZGV2KSwK KwkJCSAgIHN0cnVjdCBkZXZpY2UgKmhkbWlfZGV2KTsKK2Jvb2wgbXRrX2NlY19ocGRfaGlnaChz dHJ1Y3QgZGV2aWNlICpkZXYpOworCisjZW5kaWYgLyogX01US19DRUNfSCAqLwpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19oZG1pLmMgYi9kcml2ZXJzL2dwdS9kcm0v bWVkaWF0ZWsvbXRrX2hkbWkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4x M2NkMzRmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19o ZG1pLmMKQEAgLTAsMCArMSwxODIzIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE0IE1lZGlh VGVrIEluYy4KKyAqIEF1dGhvcjogSmllIFFpdSA8amllLnFpdUBtZWRpYXRlay5jb20+CisgKgor ICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVk ZSA8ZHJtL2RybVAuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIuaD4KKyNpbmNs dWRlIDxkcm0vZHJtX2NydGMuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2NydGNfaGVscGVyLmg+Cisj aW5jbHVkZSA8ZHJtL2RybV9lZGlkLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVk ZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9oZG1pLmg+CisjaW5jbHVkZSA8bGlu dXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwu aD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvc3lzY29uLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxh dGZvcm0uaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2dwaW8u aD4KKyNpbmNsdWRlIDxsaW51eC9vZl9ncmFwaC5oPgorI2luY2x1ZGUgPGxpbnV4L3BoeS9waHku aD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9y ZWdtYXAuaD4KKyNpbmNsdWRlIDxzb3VuZC9oZG1pLWNvZGVjLmg+CisjaW5jbHVkZSAibXRrX2Nl Yy5oIgorI2luY2x1ZGUgIm10a19oZG1pLmgiCisjaW5jbHVkZSAibXRrX2hkbWlfcmVncy5oIgor CisjZGVmaW5lIE5DVFNfQllURVMJNworCitlbnVtIG10a19oZG1pX2Nsa19pZCB7CisJTVRLX0hE TUlfQ0xLX0hETUlfUElYRUwsCisJTVRLX0hETUlfQ0xLX0hETUlfUExMLAorCU1US19IRE1JX0NM S19BVURfQkNMSywKKwlNVEtfSERNSV9DTEtfQVVEX1NQRElGLAorCU1US19IRE1JX0NMS19DT1VO VAorfTsKKworZW51bSBoZG1pX2F1ZF9pbnB1dF90eXBlIHsKKwlIRE1JX0FVRF9JTlBVVF9JMlMg PSAwLAorCUhETUlfQVVEX0lOUFVUX1NQRElGLAorfTsKKworZW51bSBoZG1pX2F1ZF9pMnNfZm10 IHsKKwlIRE1JX0kyU19NT0RFX1JKVF8yNEJJVCA9IDAsCisJSERNSV9JMlNfTU9ERV9SSlRfMTZC SVQsCisJSERNSV9JMlNfTU9ERV9MSlRfMjRCSVQsCisJSERNSV9JMlNfTU9ERV9MSlRfMTZCSVQs CisJSERNSV9JMlNfTU9ERV9JMlNfMjRCSVQsCisJSERNSV9JMlNfTU9ERV9JMlNfMTZCSVQKK307 CisKK2VudW0gaGRtaV9hdWRfbWNsayB7CisJSERNSV9BVURfTUNMS18xMjhGUywKKwlIRE1JX0FV RF9NQ0xLXzE5MkZTLAorCUhETUlfQVVEX01DTEtfMjU2RlMsCisJSERNSV9BVURfTUNMS18zODRG UywKKwlIRE1JX0FVRF9NQ0xLXzUxMkZTLAorCUhETUlfQVVEX01DTEtfNzY4RlMsCisJSERNSV9B VURfTUNMS18xMTUyRlMsCit9OworCitlbnVtIGhkbWlfYXVkX2NoYW5uZWxfdHlwZSB7CisJSERN SV9BVURfQ0hBTl9UWVBFXzFfMCA9IDAsCisJSERNSV9BVURfQ0hBTl9UWVBFXzFfMSwKKwlIRE1J X0FVRF9DSEFOX1RZUEVfMl8wLAorCUhETUlfQVVEX0NIQU5fVFlQRV8yXzEsCisJSERNSV9BVURf Q0hBTl9UWVBFXzNfMCwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfM18xLAorCUhETUlfQVVEX0NIQU5f VFlQRV80XzAsCisJSERNSV9BVURfQ0hBTl9UWVBFXzRfMSwKKwlIRE1JX0FVRF9DSEFOX1RZUEVf NV8wLAorCUhETUlfQVVEX0NIQU5fVFlQRV81XzEsCisJSERNSV9BVURfQ0hBTl9UWVBFXzZfMCwK KwlIRE1JX0FVRF9DSEFOX1RZUEVfNl8xLAorCUhETUlfQVVEX0NIQU5fVFlQRV83XzAsCisJSERN SV9BVURfQ0hBTl9UWVBFXzdfMSwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfM18wX0xSUywKKwlIRE1J X0FVRF9DSEFOX1RZUEVfM18xX0xSUywKKwlIRE1JX0FVRF9DSEFOX1RZUEVfNF8wX0NMUlMsCisJ SERNSV9BVURfQ0hBTl9UWVBFXzRfMV9DTFJTLAorCUhETUlfQVVEX0NIQU5fVFlQRV82XzFfQ1Ms CisJSERNSV9BVURfQ0hBTl9UWVBFXzZfMV9DSCwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfNl8xX09I LAorCUhETUlfQVVEX0NIQU5fVFlQRV82XzFfQ0hSLAorCUhETUlfQVVEX0NIQU5fVFlQRV83XzFf TEhfUkgsCisJSERNSV9BVURfQ0hBTl9UWVBFXzdfMV9MU1JfUlNSLAorCUhETUlfQVVEX0NIQU5f VFlQRV83XzFfTENfUkMsCisJSERNSV9BVURfQ0hBTl9UWVBFXzdfMV9MV19SVywKKwlIRE1JX0FV RF9DSEFOX1RZUEVfN18xX0xTRF9SU0QsCisJSERNSV9BVURfQ0hBTl9UWVBFXzdfMV9MU1NfUlNT LAorCUhETUlfQVVEX0NIQU5fVFlQRV83XzFfTEhTX1JIUywKKwlIRE1JX0FVRF9DSEFOX1RZUEVf N18xX0NTX0NILAorCUhETUlfQVVEX0NIQU5fVFlQRV83XzFfQ1NfT0gsCisJSERNSV9BVURfQ0hB Tl9UWVBFXzdfMV9DU19DSFIsCisJSERNSV9BVURfQ0hBTl9UWVBFXzdfMV9DSF9PSCwKKwlIRE1J X0FVRF9DSEFOX1RZUEVfN18xX0NIX0NIUiwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfN18xX09IX0NI UiwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfN18xX0xTU19SU1NfTFNSX1JTUiwKKwlIRE1JX0FVRF9D SEFOX1RZUEVfNl8wX0NTLAorCUhETUlfQVVEX0NIQU5fVFlQRV82XzBfQ0gsCisJSERNSV9BVURf Q0hBTl9UWVBFXzZfMF9PSCwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfNl8wX0NIUiwKKwlIRE1JX0FV RF9DSEFOX1RZUEVfN18wX0xIX1JILAorCUhETUlfQVVEX0NIQU5fVFlQRV83XzBfTFNSX1JTUiwK KwlIRE1JX0FVRF9DSEFOX1RZUEVfN18wX0xDX1JDLAorCUhETUlfQVVEX0NIQU5fVFlQRV83XzBf TFdfUlcsCisJSERNSV9BVURfQ0hBTl9UWVBFXzdfMF9MU0RfUlNELAorCUhETUlfQVVEX0NIQU5f VFlQRV83XzBfTFNTX1JTUywKKwlIRE1JX0FVRF9DSEFOX1RZUEVfN18wX0xIU19SSFMsCisJSERN SV9BVURfQ0hBTl9UWVBFXzdfMF9DU19DSCwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfN18wX0NTX09I LAorCUhETUlfQVVEX0NIQU5fVFlQRV83XzBfQ1NfQ0hSLAorCUhETUlfQVVEX0NIQU5fVFlQRV83 XzBfQ0hfT0gsCisJSERNSV9BVURfQ0hBTl9UWVBFXzdfMF9DSF9DSFIsCisJSERNSV9BVURfQ0hB Tl9UWVBFXzdfMF9PSF9DSFIsCisJSERNSV9BVURfQ0hBTl9UWVBFXzdfMF9MU1NfUlNTX0xTUl9S U1IsCisJSERNSV9BVURfQ0hBTl9UWVBFXzhfMF9MSF9SSF9DUywKKwlIRE1JX0FVRF9DSEFOX1RZ UEVfVU5LTk9XTiA9IDB4RkYKK307CisKK2VudW0gaGRtaV9hdWRfY2hhbm5lbF9zd2FwX3R5cGUg eworCUhETUlfQVVEX1NXQVBfTFIsCisJSERNSV9BVURfU1dBUF9MRkVfQ0MsCisJSERNSV9BVURf U1dBUF9MU1JTLAorCUhETUlfQVVEX1NXQVBfUkxTX1JSUywKKwlIRE1JX0FVRF9TV0FQX0xSX1NU QVRVUywKK307CisKK3N0cnVjdCBoZG1pX2F1ZGlvX3BhcmFtIHsKKwllbnVtIGhkbWlfYXVkaW9f Y29kaW5nX3R5cGUgYXVkX2NvZGVjOworCWVudW0gaGRtaV9hdWRpb19zYW1wbGVfc2l6ZSBhdWRf c2FtcGVfc2l6ZTsKKwllbnVtIGhkbWlfYXVkX2lucHV0X3R5cGUgYXVkX2lucHV0X3R5cGU7CisJ ZW51bSBoZG1pX2F1ZF9pMnNfZm10IGF1ZF9pMnNfZm10OworCWVudW0gaGRtaV9hdWRfbWNsayBh dWRfbWNsazsKKwllbnVtIGhkbWlfYXVkX2NoYW5uZWxfdHlwZSBhdWRfaW5wdXRfY2hhbl90eXBl OworCXN0cnVjdCBoZG1pX2NvZGVjX3BhcmFtcyBjb2RlY19wYXJhbXM7Cit9OworCitzdHJ1Y3Qg bXRrX2hkbWkgeworCXN0cnVjdCBkcm1fYnJpZGdlIGJyaWRnZTsKKwlzdHJ1Y3QgZHJtX2Nvbm5l Y3RvciBjb25uOworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlzdHJ1Y3QgcGh5ICpwaHk7CisJc3Ry dWN0IGRldmljZSAqY2VjX2RldjsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmRkY19hZHB0OworCXN0 cnVjdCBjbGsgKmNsa1tNVEtfSERNSV9DTEtfQ09VTlRdOworCXN0cnVjdCBkcm1fZGlzcGxheV9t b2RlIG1vZGU7CisJYm9vbCBkdmlfbW9kZTsKKwl1MzIgbWluX2Nsb2NrOworCXUzMiBtYXhfY2xv Y2s7CisJdTMyIG1heF9oZGlzcGxheTsKKwl1MzIgbWF4X3ZkaXNwbGF5OworCXUzMiBpYmlhczsK Kwl1MzIgaWJpYXNfdXA7CisJc3RydWN0IHJlZ21hcCAqc3lzX3JlZ21hcDsKKwl1bnNpZ25lZCBp bnQgc3lzX29mZnNldDsKKwl2b2lkIF9faW9tZW0gKnJlZ3M7CisJZW51bSBoZG1pX2NvbG9yc3Bh Y2UgY3NwOworCXN0cnVjdCBoZG1pX2F1ZGlvX3BhcmFtIGF1ZF9wYXJhbTsKKwlib29sIGF1ZGlv X2VuYWJsZTsKKwlib29sIHBvd2VyZWQ7CisJYm9vbCBlbmFibGVkOworfTsKKworc3RhdGljIGlu bGluZSBzdHJ1Y3QgbXRrX2hkbWkgKmhkbWlfY3R4X2Zyb21fYnJpZGdlKHN0cnVjdCBkcm1fYnJp ZGdlICpiKQoreworCXJldHVybiBjb250YWluZXJfb2YoYiwgc3RydWN0IG10a19oZG1pLCBicmlk Z2UpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtdGtfaGRtaSAqaGRtaV9jdHhfZnJvbV9j b25uKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjKQoreworCXJldHVybiBjb250YWluZXJfb2YoYywg c3RydWN0IG10a19oZG1pLCBjb25uKTsKK30KKworc3RhdGljIHUzMiBtdGtfaGRtaV9yZWFkKHN0 cnVjdCBtdGtfaGRtaSAqaGRtaSwgdTMyIG9mZnNldCkKK3sKKwlyZXR1cm4gcmVhZGwoaGRtaS0+ cmVncyArIG9mZnNldCk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19oZG1pX3dyaXRlKHN0cnVjdCBt dGtfaGRtaSAqaGRtaSwgdTMyIG9mZnNldCwgdTMyIHZhbCkKK3sKKwl3cml0ZWwodmFsLCBoZG1p LT5yZWdzICsgb2Zmc2V0KTsKK30KKworc3RhdGljIHZvaWQgbXRrX2hkbWlfY2xlYXJfYml0cyhz dHJ1Y3QgbXRrX2hkbWkgKmhkbWksIHUzMiBvZmZzZXQsIHUzMiBiaXRzKQoreworCXZvaWQgX19p b21lbSAqcmVnID0gaGRtaS0+cmVncyArIG9mZnNldDsKKwl1MzIgdG1wOworCisJdG1wID0gcmVh ZGwocmVnKTsKKwl0bXAgJj0gfmJpdHM7CisJd3JpdGVsKHRtcCwgcmVnKTsKK30KKworc3RhdGlj IHZvaWQgbXRrX2hkbWlfc2V0X2JpdHMoc3RydWN0IG10a19oZG1pICpoZG1pLCB1MzIgb2Zmc2V0 LCB1MzIgYml0cykKK3sKKwl2b2lkIF9faW9tZW0gKnJlZyA9IGhkbWktPnJlZ3MgKyBvZmZzZXQ7 CisJdTMyIHRtcDsKKworCXRtcCA9IHJlYWRsKHJlZyk7CisJdG1wIHw9IGJpdHM7CisJd3JpdGVs KHRtcCwgcmVnKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2hkbWlfbWFzayhzdHJ1Y3QgbXRrX2hk bWkgKmhkbWksIHUzMiBvZmZzZXQsIHUzMiB2YWwsIHUzMiBtYXNrKQoreworCXZvaWQgX19pb21l bSAqcmVnID0gaGRtaS0+cmVncyArIG9mZnNldDsKKwl1MzIgdG1wOworCisJdG1wID0gcmVhZGwo cmVnKTsKKwl0bXAgPSAodG1wICYgfm1hc2spIHwgKHZhbCAmIG1hc2spOworCXdyaXRlbCh0bXAs IHJlZyk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19oZG1pX2h3X3ZpZF9ibGFjayhzdHJ1Y3QgbXRr X2hkbWkgKmhkbWksIGJvb2wgYmxhY2spCit7CisJbXRrX2hkbWlfbWFzayhoZG1pLCBWSURFT19D RkdfNCwgYmxhY2sgPyBHRU5fUkdCIDogTk9STUFMX1BBVEgsCisJCSAgICAgIFZJREVPX1NPVVJD RV9TRUwpOworfQorCitzdGF0aWMgdm9pZCBtdGtfaGRtaV9od19tYWtlX3JlZ193cml0YWJsZShz dHJ1Y3QgbXRrX2hkbWkgKmhkbWksIGJvb2wgZW5hYmxlKQoreworCXJlZ21hcF91cGRhdGVfYml0 cyhoZG1pLT5zeXNfcmVnbWFwLCBoZG1pLT5zeXNfb2Zmc2V0ICsgSERNSV9TWVNfQ0ZHMjAsCisJ CQkgICBIRE1JX1BDTEtfRlJFRV9SVU4sIGVuYWJsZSA/IEhETUlfUENMS19GUkVFX1JVTiA6IDAp OworCXJlZ21hcF91cGRhdGVfYml0cyhoZG1pLT5zeXNfcmVnbWFwLCBoZG1pLT5zeXNfb2Zmc2V0 ICsgSERNSV9TWVNfQ0ZHMUMsCisJCQkgICBIRE1JX09OIHwgQU5MR19PTiwgZW5hYmxlID8gKEhE TUlfT04gfCBBTkxHX09OKSA6IDApOworfQorCitzdGF0aWMgdm9pZCBtdGtfaGRtaV9od18xcDRf dmVyc2lvbl9lbmFibGUoc3RydWN0IG10a19oZG1pICpoZG1pLCBib29sIGVuYWJsZSkKK3sKKwly ZWdtYXBfdXBkYXRlX2JpdHMoaGRtaS0+c3lzX3JlZ21hcCwgaGRtaS0+c3lzX29mZnNldCArIEhE TUlfU1lTX0NGRzIwLAorCQkJICAgSERNSTJQMF9FTiwgZW5hYmxlID8gMCA6IEhETUkyUDBfRU4p OworfQorCitzdGF0aWMgdm9pZCBtdGtfaGRtaV9od19hdWRfbXV0ZShzdHJ1Y3QgbXRrX2hkbWkg KmhkbWkpCit7CisJbXRrX2hkbWlfc2V0X2JpdHMoaGRtaSwgR1JMX0FVRElPX0NGRywgQVVESU9f WkVSTyk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19oZG1pX2h3X2F1ZF91bm11dGUoc3RydWN0IG10 a19oZG1pICpoZG1pKQoreworCW10a19oZG1pX2NsZWFyX2JpdHMoaGRtaSwgR1JMX0FVRElPX0NG RywgQVVESU9fWkVSTyk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19oZG1pX2h3X3Jlc2V0KHN0cnVj dCBtdGtfaGRtaSAqaGRtaSkKK3sKKwlyZWdtYXBfdXBkYXRlX2JpdHMoaGRtaS0+c3lzX3JlZ21h cCwgaGRtaS0+c3lzX29mZnNldCArIEhETUlfU1lTX0NGRzFDLAorCQkJICAgSERNSV9SU1QsIEhE TUlfUlNUKTsKKwlyZWdtYXBfdXBkYXRlX2JpdHMoaGRtaS0+c3lzX3JlZ21hcCwgaGRtaS0+c3lz X29mZnNldCArIEhETUlfU1lTX0NGRzFDLAorCQkJICAgSERNSV9SU1QsIDApOworCW10a19oZG1p X2NsZWFyX2JpdHMoaGRtaSwgR1JMX0NGRzMsIENGRzNfQ09OVFJPTF9QQUNLRVRfREVMQVkpOwor CXJlZ21hcF91cGRhdGVfYml0cyhoZG1pLT5zeXNfcmVnbWFwLCBoZG1pLT5zeXNfb2Zmc2V0ICsg SERNSV9TWVNfQ0ZHMUMsCisJCQkgICBBTkxHX09OLCBBTkxHX09OKTsKK30KKworc3RhdGljIHZv aWQgbXRrX2hkbWlfaHdfZW5hYmxlX25vdGljZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksIGJvb2wg ZW5hYmxlX25vdGljZSkKK3sKKwltdGtfaGRtaV9tYXNrKGhkbWksIEdSTF9DRkcyLCBlbmFibGVf bm90aWNlID8gQ0ZHMl9OT1RJQ0VfRU4gOiAwLAorCQkgICAgICBDRkcyX05PVElDRV9FTik7Cit9 CisKK3N0YXRpYyB2b2lkIG10a19oZG1pX2h3X3dyaXRlX2ludF9tYXNrKHN0cnVjdCBtdGtfaGRt aSAqaGRtaSwgdTMyIGludF9tYXNrKQoreworCW10a19oZG1pX3dyaXRlKGhkbWksIEdSTF9JTlRf TUFTSywgaW50X21hc2spOworfQorCitzdGF0aWMgdm9pZCBtdGtfaGRtaV9od19lbmFibGVfZHZp X21vZGUoc3RydWN0IG10a19oZG1pICpoZG1pLCBib29sIGVuYWJsZSkKK3sKKwltdGtfaGRtaV9t YXNrKGhkbWksIEdSTF9DRkcxLCBlbmFibGUgPyBDRkcxX0RWSSA6IDAsIENGRzFfRFZJKTsKK30K Kworc3RhdGljIHZvaWQgbXRrX2hkbWlfaHdfc2VuZF9pbmZvX2ZyYW1lKHN0cnVjdCBtdGtfaGRt aSAqaGRtaSwgdTggKmJ1ZmZlciwKKwkJCQkJdTggbGVuKQoreworCXUzMiBjdHJsX3JlZyA9IEdS TF9DVFJMOworCWludCBpOworCXU4ICpmcmFtZV9kYXRhOworCWVudW0gaGRtaV9pbmZvZnJhbWVf dHlwZSBmcmFtZV90eXBlOworCXU4IGZyYW1lX3ZlcjsKKwl1OCBmcmFtZV9sZW47CisJdTggY2hl Y2tzdW07CisJaW50IGN0cmxfZnJhbWVfZW4gPSAwOworCisJZnJhbWVfdHlwZSA9ICpidWZmZXI7 CisJYnVmZmVyICs9IDE7CisJZnJhbWVfdmVyID0gKmJ1ZmZlcjsKKwlidWZmZXIgKz0gMTsKKwlm cmFtZV9sZW4gPSAqYnVmZmVyOworCWJ1ZmZlciArPSAxOworCWNoZWNrc3VtID0gKmJ1ZmZlcjsK KwlidWZmZXIgKz0gMTsKKwlmcmFtZV9kYXRhID0gYnVmZmVyOworCisJZGV2X2RiZyhoZG1pLT5k ZXYsCisJCSJmcmFtZV90eXBlOjB4JXgsZnJhbWVfdmVyOjB4JXgsZnJhbWVfbGVuOjB4JXgsY2hl Y2tzdW06MHgleFxuIiwKKwkJZnJhbWVfdHlwZSwgZnJhbWVfdmVyLCBmcmFtZV9sZW4sIGNoZWNr c3VtKTsKKworCXN3aXRjaCAoZnJhbWVfdHlwZSkgeworCWNhc2UgSERNSV9JTkZPRlJBTUVfVFlQ RV9BVkk6CisJCWN0cmxfZnJhbWVfZW4gPSBDVFJMX0FWSV9FTjsKKwkJY3RybF9yZWcgPSBHUkxf Q1RSTDsKKwkJYnJlYWs7CisJY2FzZSBIRE1JX0lORk9GUkFNRV9UWVBFX1NQRDoKKwkJY3RybF9m cmFtZV9lbiA9IENUUkxfU1BEX0VOOworCQljdHJsX3JlZyA9IEdSTF9DVFJMOworCQlicmVhazsK KwljYXNlIEhETUlfSU5GT0ZSQU1FX1RZUEVfQVVESU86CisJCWN0cmxfZnJhbWVfZW4gPSBDVFJM X0FVRElPX0VOOworCQljdHJsX3JlZyA9IEdSTF9DVFJMOworCQlicmVhazsKKwljYXNlIEhETUlf SU5GT0ZSQU1FX1RZUEVfVkVORE9SOgorCQljdHJsX2ZyYW1lX2VuID0gVlNfRU47CisJCWN0cmxf cmVnID0gR1JMX0FDUF9JU1JDX0NUUkw7CisJCWJyZWFrOworCX0KKwltdGtfaGRtaV9jbGVhcl9i aXRzKGhkbWksIGN0cmxfcmVnLCBjdHJsX2ZyYW1lX2VuKTsKKwltdGtfaGRtaV93cml0ZShoZG1p LCBHUkxfSU5GT0ZSTV9UWVBFLCBmcmFtZV90eXBlKTsKKwltdGtfaGRtaV93cml0ZShoZG1pLCBH UkxfSU5GT0ZSTV9WRVIsIGZyYW1lX3Zlcik7CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX0lO Rk9GUk1fTE5HLCBmcmFtZV9sZW4pOworCisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX0lGTV9Q T1JULCBjaGVja3N1bSk7CisJZm9yIChpID0gMDsgaSA8IGZyYW1lX2xlbjsgaSsrKQorCQltdGtf aGRtaV93cml0ZShoZG1pLCBHUkxfSUZNX1BPUlQsIGZyYW1lX2RhdGFbaV0pOworCisJbXRrX2hk bWlfc2V0X2JpdHMoaGRtaSwgY3RybF9yZWcsIGN0cmxfZnJhbWVfZW4pOworfQorCitzdGF0aWMg dm9pZCBtdGtfaGRtaV9od19zZW5kX2F1ZF9wYWNrZXQoc3RydWN0IG10a19oZG1pICpoZG1pLCBi b29sIGVuYWJsZSkKK3sKKwltdGtfaGRtaV9tYXNrKGhkbWksIEdSTF9TSElGVF9SMiwgZW5hYmxl ID8gMCA6IEFVRElPX1BBQ0tFVF9PRkYsCisJCSAgICAgIEFVRElPX1BBQ0tFVF9PRkYpOworfQor CitzdGF0aWMgdm9pZCBtdGtfaGRtaV9od19jb25maWdfc3lzKHN0cnVjdCBtdGtfaGRtaSAqaGRt aSkKK3sKKwlyZWdtYXBfdXBkYXRlX2JpdHMoaGRtaS0+c3lzX3JlZ21hcCwgaGRtaS0+c3lzX29m ZnNldCArIEhETUlfU1lTX0NGRzIwLAorCQkJICAgSERNSV9PVVRfRklGT19FTiB8IE1ITF9NT0RF X09OLCAwKTsKKwl1c2xlZXBfcmFuZ2UoMjAwMCwgNDAwMCk7CisJcmVnbWFwX3VwZGF0ZV9iaXRz KGhkbWktPnN5c19yZWdtYXAsIGhkbWktPnN5c19vZmZzZXQgKyBIRE1JX1NZU19DRkcyMCwKKwkJ CSAgIEhETUlfT1VUX0ZJRk9fRU4gfCBNSExfTU9ERV9PTiwgSERNSV9PVVRfRklGT19FTik7Cit9 CisKK3N0YXRpYyB2b2lkIG10a19oZG1pX2h3X3NldF9kZWVwX2NvbG9yX21vZGUoc3RydWN0IG10 a19oZG1pICpoZG1pKQoreworCXJlZ21hcF91cGRhdGVfYml0cyhoZG1pLT5zeXNfcmVnbWFwLCBo ZG1pLT5zeXNfb2Zmc2V0ICsgSERNSV9TWVNfQ0ZHMjAsCisJCQkgICBERUVQX0NPTE9SX01PREVf TUFTSyB8IERFRVBfQ09MT1JfRU4sCisJCQkgICBDT0xPUl84QklUX01PREUpOworfQorCitzdGF0 aWMgdm9pZCBtdGtfaGRtaV9od19zZW5kX2F2X211dGUoc3RydWN0IG10a19oZG1pICpoZG1pKQor eworCW10a19oZG1pX2NsZWFyX2JpdHMoaGRtaSwgR1JMX0NGRzQsIENUUkxfQVZNVVRFKTsKKwl1 c2xlZXBfcmFuZ2UoMjAwMCwgNDAwMCk7CisJbXRrX2hkbWlfc2V0X2JpdHMoaGRtaSwgR1JMX0NG RzQsIENUUkxfQVZNVVRFKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2hkbWlfaHdfc2VuZF9hdl91 bm11dGUoc3RydWN0IG10a19oZG1pICpoZG1pKQoreworCW10a19oZG1pX21hc2soaGRtaSwgR1JM X0NGRzQsIENGRzRfQVZfVU5NVVRFX0VOLAorCQkgICAgICBDRkc0X0FWX1VOTVVURV9FTiB8IENG RzRfQVZfVU5NVVRFX1NFVCk7CisJdXNsZWVwX3JhbmdlKDIwMDAsIDQwMDApOworCW10a19oZG1p X21hc2soaGRtaSwgR1JMX0NGRzQsIENGRzRfQVZfVU5NVVRFX1NFVCwKKwkJICAgICAgQ0ZHNF9B Vl9VTk1VVEVfRU4gfCBDRkc0X0FWX1VOTVVURV9TRVQpOworfQorCitzdGF0aWMgdm9pZCBtdGtf aGRtaV9od19uY3RzX2VuYWJsZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksIGJvb2wgb24pCit7CisJ bXRrX2hkbWlfbWFzayhoZG1pLCBHUkxfQ1RTX0NUUkwsIG9uID8gMCA6IENUU19DVFJMX1NPRlQs CisJCSAgICAgIENUU19DVFJMX1NPRlQpOworfQorCitzdGF0aWMgdm9pZCBtdGtfaGRtaV9od19u Y3RzX2F1dG9fd3JpdGVfZW5hYmxlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwKKwkJCQkJICAgICAg IGJvb2wgZW5hYmxlKQoreworCW10a19oZG1pX21hc2soaGRtaSwgR1JMX0NUU19DVFJMLCBlbmFi bGUgPyBOQ1RTX1dSSV9BTllUSU1FIDogMCwKKwkJICAgICAgTkNUU19XUklfQU5ZVElNRSk7Cit9 CisKK3N0YXRpYyB2b2lkIG10a19oZG1pX2h3X21zaWNfc2V0dGluZyhzdHJ1Y3QgbXRrX2hkbWkg KmhkbWksCisJCQkJICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKK3sKKwltdGtf aGRtaV9jbGVhcl9iaXRzKGhkbWksIEdSTF9DRkc0LCBDRkc0X01ITF9NT0RFKTsKKworCWlmICht b2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfSU5URVJMQUNFICYmCisJICAgIG1vZGUtPmNsb2Nr ID09IDc0MjUwICYmCisJICAgIG1vZGUtPnZkaXNwbGF5ID09IDEwODApCisJCW10a19oZG1pX2Ns ZWFyX2JpdHMoaGRtaSwgR1JMX0NGRzIsIENGRzJfTUhMX0RFX1NFTCk7CisJZWxzZQorCQltdGtf aGRtaV9zZXRfYml0cyhoZG1pLCBHUkxfQ0ZHMiwgQ0ZHMl9NSExfREVfU0VMKTsKK30KKworc3Rh dGljIHZvaWQgbXRrX2hkbWlfaHdfYXVkX3NldF9jaGFubmVsX3N3YXAoc3RydWN0IG10a19oZG1p ICpoZG1pLAorCQkJCQllbnVtIGhkbWlfYXVkX2NoYW5uZWxfc3dhcF90eXBlIHN3YXApCit7CisJ dTggc3dhcF9iaXQ7CisKKwlzd2l0Y2ggKHN3YXApIHsKKwljYXNlIEhETUlfQVVEX1NXQVBfTFI6 CisJCXN3YXBfYml0ID0gTFJfU1dBUDsKKwkJYnJlYWs7CisJY2FzZSBIRE1JX0FVRF9TV0FQX0xG RV9DQzoKKwkJc3dhcF9iaXQgPSBMRkVfQ0NfU1dBUDsKKwkJYnJlYWs7CisJY2FzZSBIRE1JX0FV RF9TV0FQX0xTUlM6CisJCXN3YXBfYml0ID0gTFNSU19TV0FQOworCQlicmVhazsKKwljYXNlIEhE TUlfQVVEX1NXQVBfUkxTX1JSUzoKKwkJc3dhcF9iaXQgPSBSTFNfUlJTX1NXQVA7CisJCWJyZWFr OworCWNhc2UgSERNSV9BVURfU1dBUF9MUl9TVEFUVVM6CisJCXN3YXBfYml0ID0gTFJfU1RBVFVT X1NXQVA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXN3YXBfYml0ID0gTEZFX0NDX1NXQVA7CisJ CWJyZWFrOworCX0KKwltdGtfaGRtaV9tYXNrKGhkbWksIEdSTF9DSF9TV0FQLCBzd2FwX2JpdCwg MHhmZik7Cit9CisKK3N0YXRpYyB2b2lkIG10a19oZG1pX2h3X2F1ZF9zZXRfYml0X251bShzdHJ1 Y3QgbXRrX2hkbWkgKmhkbWksCisJCQkJCWVudW0gaGRtaV9hdWRpb19zYW1wbGVfc2l6ZSBiaXRf bnVtKQoreworCXUzMiB2YWw7CisKKwlzd2l0Y2ggKGJpdF9udW0pIHsKKwljYXNlIEhETUlfQVVE SU9fU0FNUExFX1NJWkVfMTY6CisJCXZhbCA9IEFPVVRfMTZCSVQ7CisJCWJyZWFrOworCWNhc2Ug SERNSV9BVURJT19TQU1QTEVfU0laRV8yMDoKKwkJdmFsID0gQU9VVF8yMEJJVDsKKwkJYnJlYWs7 CisJY2FzZSBIRE1JX0FVRElPX1NBTVBMRV9TSVpFXzI0OgorCWNhc2UgSERNSV9BVURJT19TQU1Q TEVfU0laRV9TVFJFQU06CisJCXZhbCA9IEFPVVRfMjRCSVQ7CisJCWJyZWFrOworCX0KKworCW10 a19oZG1pX21hc2soaGRtaSwgR1JMX0FPVVRfQ0ZHLCB2YWwsIEFPVVRfQk5VTV9TRUxfTUFTSyk7 Cit9CisKK3N0YXRpYyB2b2lkIG10a19oZG1pX2h3X2F1ZF9zZXRfaTJzX2ZtdChzdHJ1Y3QgbXRr X2hkbWkgKmhkbWksCisJCQkJCWVudW0gaGRtaV9hdWRfaTJzX2ZtdCBpMnNfZm10KQoreworCXUz MiB2YWw7CisKKwl2YWwgPSBtdGtfaGRtaV9yZWFkKGhkbWksIEdSTF9DRkcwKTsKKwl2YWwgJj0g fihDRkcwX1dfTEVOR1RIX01BU0sgfCBDRkcwX0kyU19NT0RFX01BU0spOworCisJc3dpdGNoIChp MnNfZm10KSB7CisJY2FzZSBIRE1JX0kyU19NT0RFX1JKVF8yNEJJVDoKKwkJdmFsIHw9IENGRzBf STJTX01PREVfUlRKIHwgQ0ZHMF9XX0xFTkdUSF8yNEJJVDsKKwkJYnJlYWs7CisJY2FzZSBIRE1J X0kyU19NT0RFX1JKVF8xNkJJVDoKKwkJdmFsIHw9IENGRzBfSTJTX01PREVfUlRKIHwgQ0ZHMF9X X0xFTkdUSF8xNkJJVDsKKwkJYnJlYWs7CisJY2FzZSBIRE1JX0kyU19NT0RFX0xKVF8yNEJJVDoK KwlkZWZhdWx0OgorCQl2YWwgfD0gQ0ZHMF9JMlNfTU9ERV9MVEogfCBDRkcwX1dfTEVOR1RIXzI0 QklUOworCQlicmVhazsKKwljYXNlIEhETUlfSTJTX01PREVfTEpUXzE2QklUOgorCQl2YWwgfD0g Q0ZHMF9JMlNfTU9ERV9MVEogfCBDRkcwX1dfTEVOR1RIXzE2QklUOworCQlicmVhazsKKwljYXNl IEhETUlfSTJTX01PREVfSTJTXzI0QklUOgorCQl2YWwgfD0gQ0ZHMF9JMlNfTU9ERV9JMlMgfCBD RkcwX1dfTEVOR1RIXzI0QklUOworCQlicmVhazsKKwljYXNlIEhETUlfSTJTX01PREVfSTJTXzE2 QklUOgorCQl2YWwgfD0gQ0ZHMF9JMlNfTU9ERV9JMlMgfCBDRkcwX1dfTEVOR1RIXzE2QklUOwor CQlicmVhazsKKwl9CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX0NGRzAsIHZhbCk7Cit9CisK K3N0YXRpYyB2b2lkIG10a19oZG1pX2h3X2F1ZGlvX2NvbmZpZyhzdHJ1Y3QgbXRrX2hkbWkgKmhk bWksIGJvb2wgZHN0KQoreworCWNvbnN0IHU4IG1hc2sgPSBISUdIX0JJVF9SQVRFIHwgRFNUX05P Uk1BTF9ET1VCTEUgfCBTQUNEX0RTVCB8IERTRF9TRUw7CisJdTggdmFsOworCisJLyogRGlzYWJs ZSBoaWdoIGJpdHJhdGUsIHNldCBEU1QgcGFja2V0IG5vcm1hbC9kb3VibGUgKi8KKwltdGtfaGRt aV9jbGVhcl9iaXRzKGhkbWksIEdSTF9BT1VUX0NGRywgSElHSF9CSVRfUkFURV9QQUNLRVRfQUxJ R04pOworCisJaWYgKGRzdCkKKwkJdmFsID0gRFNUX05PUk1BTF9ET1VCTEUgfCBTQUNEX0RTVDsK KwllbHNlCisJCXZhbCA9IDA7CisKKwltdGtfaGRtaV9tYXNrKGhkbWksIEdSTF9BVURJT19DRkcs IHZhbCwgbWFzayk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19oZG1pX2h3X2F1ZF9zZXRfaTJzX2No YW5fbnVtKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwKKwkJCQkJZW51bSBoZG1pX2F1ZF9jaGFubmVs X3R5cGUgY2hhbm5lbF90eXBlLAorCQkJCQl1OCBjaGFubmVsX2NvdW50KQoreworCXVuc2lnbmVk IGludCBjaF9zd2l0Y2g7CisJdTggaTJzX3V2OworCisJY2hfc3dpdGNoID0gQ0hfU1dJVENIKDcs IDcpIHwgQ0hfU1dJVENIKDYsIDYpIHwKKwkJICAgIENIX1NXSVRDSCg1LCA1KSB8IENIX1NXSVRD SCg0LCA0KSB8CisJCSAgICBDSF9TV0lUQ0goMywgMykgfCBDSF9TV0lUQ0goMSwgMikgfAorCQkg ICAgQ0hfU1dJVENIKDIsIDEpIHwgQ0hfU1dJVENIKDAsIDApOworCisJaWYgKGNoYW5uZWxfY291 bnQgPT0gMikgeworCQlpMnNfdXYgPSBJMlNfVVZfQ0hfRU4oMCk7CisJfSBlbHNlIGlmIChjaGFu bmVsX2NvdW50ID09IDMgfHwgY2hhbm5lbF9jb3VudCA9PSA0KSB7CisJCWlmIChjaGFubmVsX2Nv dW50ID09IDQgJiYKKwkJICAgIChjaGFubmVsX3R5cGUgPT0gSERNSV9BVURfQ0hBTl9UWVBFXzNf MF9MUlMgfHwKKwkJICAgIGNoYW5uZWxfdHlwZSA9PSBIRE1JX0FVRF9DSEFOX1RZUEVfNF8wKSkK KwkJCWkyc191diA9IEkyU19VVl9DSF9FTigyKSB8IEkyU19VVl9DSF9FTigwKTsKKwkJZWxzZQor CQkJaTJzX3V2ID0gSTJTX1VWX0NIX0VOKDMpIHwgSTJTX1VWX0NIX0VOKDIpOworCX0gZWxzZSBp ZiAoY2hhbm5lbF9jb3VudCA9PSA2IHx8IGNoYW5uZWxfY291bnQgPT0gNSkgeworCQlpZiAoY2hh bm5lbF9jb3VudCA9PSA2ICYmCisJCSAgICBjaGFubmVsX3R5cGUgIT0gSERNSV9BVURfQ0hBTl9U WVBFXzVfMSAmJgorCQkgICAgY2hhbm5lbF90eXBlICE9IEhETUlfQVVEX0NIQU5fVFlQRV80XzFf Q0xSUykgeworCQkJaTJzX3V2ID0gSTJTX1VWX0NIX0VOKDMpIHwgSTJTX1VWX0NIX0VOKDIpIHwK KwkJCQkgSTJTX1VWX0NIX0VOKDEpIHwgSTJTX1VWX0NIX0VOKDApOworCQl9IGVsc2UgeworCQkJ aTJzX3V2ID0gSTJTX1VWX0NIX0VOKDIpIHwgSTJTX1VWX0NIX0VOKDEpIHwKKwkJCQkgSTJTX1VW X0NIX0VOKDApOworCQl9CisJfSBlbHNlIGlmIChjaGFubmVsX2NvdW50ID09IDggfHwgY2hhbm5l bF9jb3VudCA9PSA3KSB7CisJCWkyc191diA9IEkyU19VVl9DSF9FTigzKSB8IEkyU19VVl9DSF9F TigyKSB8CisJCQkgSTJTX1VWX0NIX0VOKDEpIHwgSTJTX1VWX0NIX0VOKDApOworCX0gZWxzZSB7 CisJCWkyc191diA9IEkyU19VVl9DSF9FTigwKTsKKwl9CisKKwltdGtfaGRtaV93cml0ZShoZG1p LCBHUkxfQ0hfU1cwLCBjaF9zd2l0Y2ggJiAweGZmKTsKKwltdGtfaGRtaV93cml0ZShoZG1pLCBH UkxfQ0hfU1cxLCAoY2hfc3dpdGNoID4+IDgpICYgMHhmZik7CisJbXRrX2hkbWlfd3JpdGUoaGRt aSwgR1JMX0NIX1NXMiwgKGNoX3N3aXRjaCA+PiAxNikgJiAweGZmKTsKKwltdGtfaGRtaV93cml0 ZShoZG1pLCBHUkxfSTJTX1VWLCBpMnNfdXYpOworfQorCitzdGF0aWMgdm9pZCBtdGtfaGRtaV9o d19hdWRfc2V0X2lucHV0X3R5cGUoc3RydWN0IG10a19oZG1pICpoZG1pLAorCQkJCQkgICBlbnVt IGhkbWlfYXVkX2lucHV0X3R5cGUgaW5wdXRfdHlwZSkKK3sKKwl1MzIgdmFsOworCisJdmFsID0g bXRrX2hkbWlfcmVhZChoZG1pLCBHUkxfQ0ZHMSk7CisJaWYgKGlucHV0X3R5cGUgPT0gSERNSV9B VURfSU5QVVRfSTJTICYmCisJICAgICh2YWwgJiBDRkcxX1NQRElGKSA9PSBDRkcxX1NQRElGKSB7 CisJCXZhbCAmPSB+Q0ZHMV9TUERJRjsKKwl9IGVsc2UgaWYgKGlucHV0X3R5cGUgPT0gSERNSV9B VURfSU5QVVRfU1BESUYgJiYKKwkJKHZhbCAmIENGRzFfU1BESUYpID09IDApIHsKKwkJdmFsIHw9 IENGRzFfU1BESUY7CisJfQorCW10a19oZG1pX3dyaXRlKGhkbWksIEdSTF9DRkcxLCB2YWwpOwor fQorCitzdGF0aWMgdm9pZCBtdGtfaGRtaV9od19hdWRfc2V0X2NoYW5uZWxfc3RhdHVzKHN0cnVj dCBtdGtfaGRtaSAqaGRtaSwKKwkJCQkJICAgICAgIHU4ICpjaGFubmVsX3N0YXR1cykKK3sKKwlp bnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspIHsKKwkJbXRrX2hkbWlfd3JpdGUoaGRt aSwgR1JMX0kyU19DX1NUQTAgKyBpICogNCwgY2hhbm5lbF9zdGF0dXNbaV0pOworCQltdGtfaGRt aV93cml0ZShoZG1pLCBHUkxfTF9TVEFUVVNfMCArIGkgKiA0LCBjaGFubmVsX3N0YXR1c1tpXSk7 CisJCW10a19oZG1pX3dyaXRlKGhkbWksIEdSTF9SX1NUQVRVU18wICsgaSAqIDQsIGNoYW5uZWxf c3RhdHVzW2ldKTsKKwl9CisJZm9yICg7IGkgPCAyNDsgaSsrKSB7CisJCW10a19oZG1pX3dyaXRl KGhkbWksIEdSTF9MX1NUQVRVU18wICsgaSAqIDQsIDApOworCQltdGtfaGRtaV93cml0ZShoZG1p LCBHUkxfUl9TVEFUVVNfMCArIGkgKiA0LCAwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIG10a19o ZG1pX2h3X2F1ZF9zcmNfcmVlbmFibGUoc3RydWN0IG10a19oZG1pICpoZG1pKQoreworCXUzMiB2 YWw7CisKKwl2YWwgPSBtdGtfaGRtaV9yZWFkKGhkbWksIEdSTF9NSVhfQ1RSTCk7CisJaWYgKHZh bCAmIE1JWF9DVFJMX1NSQ19FTikgeworCQl2YWwgJj0gfk1JWF9DVFJMX1NSQ19FTjsKKwkJbXRr X2hkbWlfd3JpdGUoaGRtaSwgR1JMX01JWF9DVFJMLCB2YWwpOworCQl1c2xlZXBfcmFuZ2UoMjU1 LCA1MTIpOworCQl2YWwgfD0gTUlYX0NUUkxfU1JDX0VOOworCQltdGtfaGRtaV93cml0ZShoZG1p LCBHUkxfTUlYX0NUUkwsIHZhbCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBtdGtfaGRtaV9od19h dWRfc3JjX2Rpc2FibGUoc3RydWN0IG10a19oZG1pICpoZG1pKQoreworCXUzMiB2YWw7CisKKwl2 YWwgPSBtdGtfaGRtaV9yZWFkKGhkbWksIEdSTF9NSVhfQ1RSTCk7CisJdmFsICY9IH5NSVhfQ1RS TF9TUkNfRU47CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX01JWF9DVFJMLCB2YWwpOworCW10 a19oZG1pX3dyaXRlKGhkbWksIEdSTF9TSElGVF9MMSwgMHgwMCk7Cit9CisKK3N0YXRpYyB2b2lk IG10a19oZG1pX2h3X2F1ZF9zZXRfbWNsayhzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksCisJCQkJICAg ICBlbnVtIGhkbWlfYXVkX21jbGsgbWNsaykKK3sKKwl1MzIgdmFsOworCisJdmFsID0gbXRrX2hk bWlfcmVhZChoZG1pLCBHUkxfQ0ZHNSk7CisJdmFsICY9IENGRzVfQ0RfUkFUSU9fTUFTSzsKKwor CXN3aXRjaCAobWNsaykgeworCWNhc2UgSERNSV9BVURfTUNMS18xMjhGUzoKKwkJdmFsIHw9IENG RzVfRlMxMjg7CisJCWJyZWFrOworCWNhc2UgSERNSV9BVURfTUNMS18yNTZGUzoKKwkJdmFsIHw9 IENGRzVfRlMyNTY7CisJCWJyZWFrOworCWNhc2UgSERNSV9BVURfTUNMS18zODRGUzoKKwkJdmFs IHw9IENGRzVfRlMzODQ7CisJCWJyZWFrOworCWNhc2UgSERNSV9BVURfTUNMS181MTJGUzoKKwkJ dmFsIHw9IENGRzVfRlM1MTI7CisJCWJyZWFrOworCWNhc2UgSERNSV9BVURfTUNMS183NjhGUzoK KwkJdmFsIHw9IENGRzVfRlM3Njg7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXZhbCB8PSBDRkc1 X0ZTMjU2OworCQlicmVhazsKKwl9CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX0NGRzUsIHZh bCk7Cit9CisKK3N0cnVjdCBoZG1pX2Fjcl9uIHsKKwl1bnNpZ25lZCBpbnQgY2xvY2s7CisJdW5z aWduZWQgaW50IG5bM107Cit9OworCisvKiBSZWNvbW1lbmRlZCBOIHZhbHVlcyBmcm9tIEhETUkg c3BlY2lmaWNhdGlvbiwgdGFibGVzIDctMSB0byA3LTMgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg aGRtaV9hY3JfbiBoZG1pX3JlY19uX3RhYmxlW10gPSB7CisJLyogQ2xvY2ssIE46IDMya0h6IDQ0 LjFrSHogNDhrSHogKi8KKwl7ICAyNTE3NSwgeyAgNDU3NiwgIDcwMDcsICA2ODY0IH0gfSwKKwl7 ICA3NDE3NiwgeyAxMTY0OCwgMTc4MzYsIDExNjQ4IH0gfSwKKwl7IDE0ODM1MiwgeyAxMTY0OCwg IDg5MTgsICA1ODI0IH0gfSwKKwl7IDI5NjcwMywgeyAgNTgyNCwgIDQ0NTksICA1ODI0IH0gfSwK Kwl7IDI5NzAwMCwgeyAgMzA3MiwgIDQ3MDQsICA1MTIwIH0gfSwKKwl7ICAgICAgMCwgeyAgNDA5 NiwgIDYyNzIsICA2MTQ0IH0gfSwgLyogYWxsIG90aGVyIFRNRFMgY2xvY2tzICovCit9OworCisv KioKKyAqIGhkbWlfcmVjb21tZW5kZWRfbigpIC0gUmV0dXJuIE4gdmFsdWUgcmVjb21tZW5kZWQg YnkgSERNSSBzcGVjaWZpY2F0aW9uCisgKiBAZnJlcTogYXVkaW8gc2FtcGxlIHJhdGUgaW4gSHoK KyAqIEBjbG9jazogcm91bmRlZCBUTURTIGNsb2NrIGluIGtIegorICovCitzdGF0aWMgdW5zaWdu ZWQgaW50IGhkbWlfcmVjb21tZW5kZWRfbih1bnNpZ25lZCBpbnQgZnJlcSwgdW5zaWduZWQgaW50 IGNsb2NrKQoreworCWNvbnN0IHN0cnVjdCBoZG1pX2Fjcl9uICpyZWNvbW1lbmRlZDsKKwl1bnNp Z25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGhkbWlfcmVjX25fdGFi bGUpIC0gMTsgaSsrKSB7CisJCWlmIChjbG9jayA9PSBoZG1pX3JlY19uX3RhYmxlW2ldLmNsb2Nr KQorCQkJYnJlYWs7CisJfQorCXJlY29tbWVuZGVkID0gaGRtaV9yZWNfbl90YWJsZSArIGk7CisK Kwlzd2l0Y2ggKGZyZXEpIHsKKwljYXNlIDMyMDAwOgorCQlyZXR1cm4gcmVjb21tZW5kZWQtPm5b MF07CisJY2FzZSA0NDEwMDoKKwkJcmV0dXJuIHJlY29tbWVuZGVkLT5uWzFdOworCWNhc2UgNDgw MDA6CisJCXJldHVybiByZWNvbW1lbmRlZC0+blsyXTsKKwljYXNlIDg4MjAwOgorCQlyZXR1cm4g cmVjb21tZW5kZWQtPm5bMV0gKiAyOworCWNhc2UgOTYwMDA6CisJCXJldHVybiByZWNvbW1lbmRl ZC0+blsyXSAqIDI7CisJY2FzZSAxNzY0MDA6CisJCXJldHVybiByZWNvbW1lbmRlZC0+blsxXSAq IDQ7CisJY2FzZSAxOTIwMDA6CisJCXJldHVybiByZWNvbW1lbmRlZC0+blsyXSAqIDQ7CisJZGVm YXVsdDoKKwkJcmV0dXJuICgxMjggKiBmcmVxKSAvIDEwMDA7CisJfQorfQorCitzdGF0aWMgdW5z aWduZWQgaW50IGhkbWlfbW9kZV9jbG9ja190b19oeih1bnNpZ25lZCBpbnQgY2xvY2spCit7CisJ c3dpdGNoIChjbG9jaykgeworCWNhc2UgMjUxNzU6CisJCXJldHVybiAyNTE3NDgyNTsJLyogMjUu Mi8xLjAwMSBNSHogKi8KKwljYXNlIDc0MTc2OgorCQlyZXR1cm4gNzQxNzU4MjQ7CS8qIDc0LjI1 LzEuMDAxIE1IeiAqLworCWNhc2UgMTQ4MzUyOgorCQlyZXR1cm4gMTQ4MzUxNjQ4OwkvKiAxNDgu NS8xLjAwMSBNSHogKi8KKwljYXNlIDI5NjcwMzoKKwkJcmV0dXJuIDI5NjcwMzI5NzsJLyogMjk3 LzEuMDAxIE1IeiAqLworCWRlZmF1bHQ6CisJCXJldHVybiBjbG9jayAqIDEwMDA7CisJfQorfQor CitzdGF0aWMgdW5zaWduZWQgaW50IGhkbWlfZXhwZWN0ZWRfY3RzKHVuc2lnbmVkIGludCBhdWRp b19zYW1wbGVfcmF0ZSwKKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgdG1kc19jbG9jaywgdW5zaWdu ZWQgaW50IG4pCit7CisJcmV0dXJuIERJVl9ST1VORF9DTE9TRVNUX1VMTCgodTY0KWhkbWlfbW9k ZV9jbG9ja190b19oeih0bWRzX2Nsb2NrKSAqIG4sCisJCQkJICAgICAxMjggKiBhdWRpb19zYW1w bGVfcmF0ZSk7Cit9CisKK3N0YXRpYyB2b2lkIGRvX2hkbWlfaHdfYXVkX3NldF9uY3RzKHN0cnVj dCBtdGtfaGRtaSAqaGRtaSwgdW5zaWduZWQgaW50IG4sCisJCQkJICAgIHVuc2lnbmVkIGludCBj dHMpCit7CisJdW5zaWduZWQgY2hhciB2YWxbTkNUU19CWVRFU107CisJaW50IGk7CisKKwltdGtf aGRtaV93cml0ZShoZG1pLCBHUkxfTkNUUywgMCk7CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JM X05DVFMsIDApOworCW10a19oZG1pX3dyaXRlKGhkbWksIEdSTF9OQ1RTLCAwKTsKKwltZW1zZXQo dmFsLCAwLCBzaXplb2YodmFsKSk7CisKKwl2YWxbMF0gPSAoY3RzID4+IDI0KSAmIDB4ZmY7CisJ dmFsWzFdID0gKGN0cyA+PiAxNikgJiAweGZmOworCXZhbFsyXSA9IChjdHMgPj4gOCkgJiAweGZm OworCXZhbFszXSA9IGN0cyAmIDB4ZmY7CisKKwl2YWxbNF0gPSAobiA+PiAxNikgJiAweGZmOwor CXZhbFs1XSA9IChuID4+IDgpICYgMHhmZjsKKwl2YWxbNl0gPSBuICYgMHhmZjsKKworCWZvciAo aSA9IDA7IGkgPCBOQ1RTX0JZVEVTOyBpKyspCisJCW10a19oZG1pX3dyaXRlKGhkbWksIEdSTF9O Q1RTLCB2YWxbaV0pOworfQorCitzdGF0aWMgdm9pZCBtdGtfaGRtaV9od19hdWRfc2V0X25jdHMo c3RydWN0IG10a19oZG1pICpoZG1pLAorCQkJCSAgICAgdW5zaWduZWQgaW50IHNhbXBsZV9yYXRl LAorCQkJCSAgICAgdW5zaWduZWQgaW50IGNsb2NrKQoreworCXVuc2lnbmVkIGludCBuLCBjdHM7 CisKKwluID0gaGRtaV9yZWNvbW1lbmRlZF9uKHNhbXBsZV9yYXRlLCBjbG9jayk7CisJY3RzID0g aGRtaV9leHBlY3RlZF9jdHMoc2FtcGxlX3JhdGUsIGNsb2NrLCBuKTsKKworCWRldl9kYmcoaGRt aS0+ZGV2LCAiJXM6IHNhbXBsZV9yYXRlPSV1LCBjbG9jaz0lZCwgY3RzPSV1LCBuPSV1XG4iLAor CQlfX2Z1bmNfXywgc2FtcGxlX3JhdGUsIGNsb2NrLCBuLCBjdHMpOworCisJbXRrX2hkbWlfbWFz ayhoZG1pLCBEVU1NWV8zMDQsIEFVRElPX0kyU19OQ1RTX1NFTF82NCwKKwkJICAgICAgQVVESU9f STJTX05DVFNfU0VMKTsKKwlkb19oZG1pX2h3X2F1ZF9zZXRfbmN0cyhoZG1pLCBuLCBjdHMpOwor fQorCitzdGF0aWMgdTggbXRrX2hkbWlfYXVkX2dldF9jaG5sX2NvdW50KGVudW0gaGRtaV9hdWRf Y2hhbm5lbF90eXBlIGNoYW5uZWxfdHlwZSkKK3sKKwlzd2l0Y2ggKGNoYW5uZWxfdHlwZSkgewor CWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzFfMDoKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV8x XzE6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfMl8wOgorCQlyZXR1cm4gMjsKKwljYXNlIEhE TUlfQVVEX0NIQU5fVFlQRV8yXzE6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfM18wOgorCQly ZXR1cm4gMzsKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV8zXzE6CisJY2FzZSBIRE1JX0FVRF9D SEFOX1RZUEVfNF8wOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzNfMF9MUlM6CisJCXJldHVy biA0OworCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzRfMToKKwljYXNlIEhETUlfQVVEX0NIQU5f VFlQRV81XzA6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfM18xX0xSUzoKKwljYXNlIEhETUlf QVVEX0NIQU5fVFlQRV80XzBfQ0xSUzoKKwkJcmV0dXJuIDU7CisJY2FzZSBIRE1JX0FVRF9DSEFO X1RZUEVfNV8xOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzZfMDoKKwljYXNlIEhETUlfQVVE X0NIQU5fVFlQRV80XzFfQ0xSUzoKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV82XzBfQ1M6CisJ Y2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfNl8wX0NIOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBF XzZfMF9PSDoKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV82XzBfQ0hSOgorCQlyZXR1cm4gNjsK KwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV82XzE6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVf Nl8xX0NTOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzZfMV9DSDoKKwljYXNlIEhETUlfQVVE X0NIQU5fVFlQRV82XzFfT0g6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfNl8xX0NIUjoKKwlj YXNlIEhETUlfQVVEX0NIQU5fVFlQRV83XzA6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18w X0xIX1JIOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzdfMF9MU1JfUlNSOgorCWNhc2UgSERN SV9BVURfQ0hBTl9UWVBFXzdfMF9MQ19SQzoKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV83XzBf TFdfUlc6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18wX0xTRF9SU0Q6CisJY2FzZSBIRE1J X0FVRF9DSEFOX1RZUEVfN18wX0xTU19SU1M6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18w X0xIU19SSFM6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18wX0NTX0NIOgorCWNhc2UgSERN SV9BVURfQ0hBTl9UWVBFXzdfMF9DU19PSDoKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV83XzBf Q1NfQ0hSOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzdfMF9DSF9PSDoKKwljYXNlIEhETUlf QVVEX0NIQU5fVFlQRV83XzBfQ0hfQ0hSOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzdfMF9P SF9DSFI6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18wX0xTU19SU1NfTFNSX1JTUjoKKwlj YXNlIEhETUlfQVVEX0NIQU5fVFlQRV84XzBfTEhfUkhfQ1M6CisJCXJldHVybiA3OworCWNhc2Ug SERNSV9BVURfQ0hBTl9UWVBFXzdfMToKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV83XzFfTEhf Ukg6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18xX0xTUl9SU1I6CisJY2FzZSBIRE1JX0FV RF9DSEFOX1RZUEVfN18xX0xDX1JDOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzdfMV9MV19S VzoKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV83XzFfTFNEX1JTRDoKKwljYXNlIEhETUlfQVVE X0NIQU5fVFlQRV83XzFfTFNTX1JTUzoKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV83XzFfTEhT X1JIUzoKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV83XzFfQ1NfQ0g6CisJY2FzZSBIRE1JX0FV RF9DSEFOX1RZUEVfN18xX0NTX09IOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzdfMV9DU19D SFI6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18xX0NIX09IOgorCWNhc2UgSERNSV9BVURf Q0hBTl9UWVBFXzdfMV9DSF9DSFI6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18xX09IX0NI UjoKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV83XzFfTFNTX1JTU19MU1JfUlNSOgorCQlyZXR1 cm4gODsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMjsKKwl9Cit9CisKK3N0YXRpYyBpbnQgbXRrX2hk bWlfdmlkZW9fY2hhbmdlX3ZwbGwoc3RydWN0IG10a19oZG1pICpoZG1pLCB1MzIgY2xvY2spCit7 CisJdW5zaWduZWQgbG9uZyByYXRlOworCWludCByZXQ7CisKKwkvKiBUaGUgRFBJIGRyaXZlciBh bHJlYWR5IHNob3VsZCBoYXZlIHNldCBUVkRQTEwgdG8gdGhlIGNvcnJlY3QgcmF0ZSAqLworCXJl dCA9IGNsa19zZXRfcmF0ZShoZG1pLT5jbGtbTVRLX0hETUlfQ0xLX0hETUlfUExMXSwgY2xvY2sp OworCWlmIChyZXQpIHsKKwkJZGV2X2VycihoZG1pLT5kZXYsICJGYWlsZWQgdG8gc2V0IFBMTCB0 byAldSBIejogJWRcbiIsIGNsb2NrLAorCQkJcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwly YXRlID0gY2xrX2dldF9yYXRlKGhkbWktPmNsa1tNVEtfSERNSV9DTEtfSERNSV9QTExdKTsKKwor CWlmIChESVZfUk9VTkRfQ0xPU0VTVChyYXRlLCAxMDAwKSAhPSBESVZfUk9VTkRfQ0xPU0VTVChj bG9jaywgMTAwMCkpCisJCWRldl93YXJuKGhkbWktPmRldiwgIldhbnQgUExMICV1IEh6LCBnb3Qg JWx1IEh6XG4iLCBjbG9jaywKKwkJCSByYXRlKTsKKwllbHNlCisJCWRldl9kYmcoaGRtaS0+ZGV2 LCAiV2FudCBQTEwgJXUgSHosIGdvdCAlbHUgSHpcbiIsIGNsb2NrLCByYXRlKTsKKworCW10a19o ZG1pX2h3X2NvbmZpZ19zeXMoaGRtaSk7CisJbXRrX2hkbWlfaHdfc2V0X2RlZXBfY29sb3JfbW9k ZShoZG1pKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbXRrX2hkbWlfdmlkZW9fc2V0 X2Rpc3BsYXlfbW9kZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksCisJCQkJCSAgICBzdHJ1Y3QgZHJt X2Rpc3BsYXlfbW9kZSAqbW9kZSkKK3sKKwltdGtfaGRtaV9od19yZXNldChoZG1pKTsKKwltdGtf aGRtaV9od19lbmFibGVfbm90aWNlKGhkbWksIHRydWUpOworCW10a19oZG1pX2h3X3dyaXRlX2lu dF9tYXNrKGhkbWksIDB4ZmYpOworCW10a19oZG1pX2h3X2VuYWJsZV9kdmlfbW9kZShoZG1pLCBo ZG1pLT5kdmlfbW9kZSk7CisJbXRrX2hkbWlfaHdfbmN0c19hdXRvX3dyaXRlX2VuYWJsZShoZG1p LCB0cnVlKTsKKworCW10a19oZG1pX2h3X21zaWNfc2V0dGluZyhoZG1pLCBtb2RlKTsKK30KKwor c3RhdGljIGludCBtdGtfaGRtaV9hdWRfZW5hYmxlX3BhY2tldChzdHJ1Y3QgbXRrX2hkbWkgKmhk bWksIGJvb2wgZW5hYmxlKQoreworCW10a19oZG1pX2h3X3NlbmRfYXVkX3BhY2tldChoZG1pLCBl bmFibGUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10a19oZG1pX2F1ZF9vbl9vZmZf aHdfbmN0cyhzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksIGJvb2wgb24pCit7CisJbXRrX2hkbWlfaHdf bmN0c19lbmFibGUoaGRtaSwgb24pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10a19o ZG1pX2F1ZF9zZXRfaW5wdXQoc3RydWN0IG10a19oZG1pICpoZG1pKQoreworCWVudW0gaGRtaV9h dWRfY2hhbm5lbF90eXBlIGNoYW5fdHlwZTsKKwl1OCBjaGFuX2NvdW50OworCWJvb2wgZHN0Owor CisJbXRrX2hkbWlfaHdfYXVkX3NldF9jaGFubmVsX3N3YXAoaGRtaSwgSERNSV9BVURfU1dBUF9M RkVfQ0MpOworCW10a19oZG1pX3NldF9iaXRzKGhkbWksIEdSTF9NSVhfQ1RSTCwgTUlYX0NUUkxf RkxBVCk7CisKKwlpZiAoaGRtaS0+YXVkX3BhcmFtLmF1ZF9pbnB1dF90eXBlID09IEhETUlfQVVE X0lOUFVUX1NQRElGICYmCisJICAgIGhkbWktPmF1ZF9wYXJhbS5hdWRfY29kZWMgPT0gSERNSV9B VURJT19DT0RJTkdfVFlQRV9EU1QpIHsKKwkJbXRrX2hkbWlfaHdfYXVkX3NldF9iaXRfbnVtKGhk bWksIEhETUlfQVVESU9fU0FNUExFX1NJWkVfMjQpOworCX0gZWxzZSBpZiAoaGRtaS0+YXVkX3Bh cmFtLmF1ZF9pMnNfZm10ID09IEhETUlfSTJTX01PREVfTEpUXzI0QklUKSB7CisJCWhkbWktPmF1 ZF9wYXJhbS5hdWRfaTJzX2ZtdCA9IEhETUlfSTJTX01PREVfTEpUXzE2QklUOworCX0KKworCW10 a19oZG1pX2h3X2F1ZF9zZXRfaTJzX2ZtdChoZG1pLCBoZG1pLT5hdWRfcGFyYW0uYXVkX2kyc19m bXQpOworCW10a19oZG1pX2h3X2F1ZF9zZXRfYml0X251bShoZG1pLCBIRE1JX0FVRElPX1NBTVBM RV9TSVpFXzI0KTsKKworCWRzdCA9ICgoaGRtaS0+YXVkX3BhcmFtLmF1ZF9pbnB1dF90eXBlID09 IEhETUlfQVVEX0lOUFVUX1NQRElGKSAmJgorCSAgICAgICAoaGRtaS0+YXVkX3BhcmFtLmF1ZF9j b2RlYyA9PSBIRE1JX0FVRElPX0NPRElOR19UWVBFX0RTVCkpOworCW10a19oZG1pX2h3X2F1ZGlv X2NvbmZpZyhoZG1pLCBkc3QpOworCisJaWYgKGhkbWktPmF1ZF9wYXJhbS5hdWRfaW5wdXRfdHlw ZSA9PSBIRE1JX0FVRF9JTlBVVF9TUERJRikKKwkJY2hhbl90eXBlID0gSERNSV9BVURfQ0hBTl9U WVBFXzJfMDsKKwllbHNlCisJCWNoYW5fdHlwZSA9IGhkbWktPmF1ZF9wYXJhbS5hdWRfaW5wdXRf Y2hhbl90eXBlOworCWNoYW5fY291bnQgPSBtdGtfaGRtaV9hdWRfZ2V0X2NobmxfY291bnQoY2hh bl90eXBlKTsKKwltdGtfaGRtaV9od19hdWRfc2V0X2kyc19jaGFuX251bShoZG1pLCBjaGFuX3R5 cGUsIGNoYW5fY291bnQpOworCW10a19oZG1pX2h3X2F1ZF9zZXRfaW5wdXRfdHlwZShoZG1pLCBo ZG1pLT5hdWRfcGFyYW0uYXVkX2lucHV0X3R5cGUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRp YyBpbnQgbXRrX2hkbWlfYXVkX3NldF9zcmMoc3RydWN0IG10a19oZG1pICpoZG1pLAorCQkJCXN0 cnVjdCBkcm1fZGlzcGxheV9tb2RlICpkaXNwbGF5X21vZGUpCit7CisJdW5zaWduZWQgaW50IHNh bXBsZV9yYXRlID0gaGRtaS0+YXVkX3BhcmFtLmNvZGVjX3BhcmFtcy5zYW1wbGVfcmF0ZTsKKwor CW10a19oZG1pX2F1ZF9vbl9vZmZfaHdfbmN0cyhoZG1pLCBmYWxzZSk7CisJbXRrX2hkbWlfaHdf YXVkX3NyY19kaXNhYmxlKGhkbWkpOworCW10a19oZG1pX2NsZWFyX2JpdHMoaGRtaSwgR1JMX0NG RzIsIENGRzJfQUNMS19JTlYpOworCisJaWYgKGhkbWktPmF1ZF9wYXJhbS5hdWRfaW5wdXRfdHlw ZSA9PSBIRE1JX0FVRF9JTlBVVF9JMlMpIHsKKwkJc3dpdGNoIChzYW1wbGVfcmF0ZSkgeworCQlj YXNlIDMyMDAwOgorCQljYXNlIDQ0MTAwOgorCQljYXNlIDQ4MDAwOgorCQljYXNlIDg4MjAwOgor CQljYXNlIDk2MDAwOgorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTlZBTDsK KwkJfQorCQltdGtfaGRtaV9od19hdWRfc2V0X21jbGsoaGRtaSwgaGRtaS0+YXVkX3BhcmFtLmF1 ZF9tY2xrKTsKKwl9IGVsc2UgeworCQlzd2l0Y2ggKHNhbXBsZV9yYXRlKSB7CisJCWNhc2UgMzIw MDA6CisJCWNhc2UgNDQxMDA6CisJCWNhc2UgNDgwMDA6CisJCQlicmVhazsKKwkJZGVmYXVsdDoK KwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCW10a19oZG1pX2h3X2F1ZF9zZXRfbWNsayhoZG1p LCBIRE1JX0FVRF9NQ0xLXzEyOEZTKTsKKwl9CisKKwltdGtfaGRtaV9od19hdWRfc2V0X25jdHMo aGRtaSwgc2FtcGxlX3JhdGUsIGRpc3BsYXlfbW9kZS0+Y2xvY2spOworCisJbXRrX2hkbWlfaHdf YXVkX3NyY19yZWVuYWJsZShoZG1pKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdGtf aGRtaV9hdWRfb3V0cHV0X2NvbmZpZyhzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksCisJCQkJICAgICAg c3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmRpc3BsYXlfbW9kZSkKK3sKKwltdGtfaGRtaV9od19h dWRfbXV0ZShoZG1pKTsKKwltdGtfaGRtaV9hdWRfZW5hYmxlX3BhY2tldChoZG1pLCBmYWxzZSk7 CisKKwltdGtfaGRtaV9hdWRfc2V0X2lucHV0KGhkbWkpOworCW10a19oZG1pX2F1ZF9zZXRfc3Jj KGhkbWksIGRpc3BsYXlfbW9kZSk7CisJbXRrX2hkbWlfaHdfYXVkX3NldF9jaGFubmVsX3N0YXR1 cyhoZG1pLAorCQkJaGRtaS0+YXVkX3BhcmFtLmNvZGVjX3BhcmFtcy5pZWMuc3RhdHVzKTsKKwor CXVzbGVlcF9yYW5nZSg1MCwgMTAwKTsKKworCW10a19oZG1pX2F1ZF9vbl9vZmZfaHdfbmN0cyho ZG1pLCB0cnVlKTsKKwltdGtfaGRtaV9hdWRfZW5hYmxlX3BhY2tldChoZG1pLCB0cnVlKTsKKwlt dGtfaGRtaV9od19hdWRfdW5tdXRlKGhkbWkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50 IG10a19oZG1pX3NldHVwX2F2aV9pbmZvZnJhbWUoc3RydWN0IG10a19oZG1pICpoZG1pLAorCQkJ CQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKK3sKKwlzdHJ1Y3QgaGRtaV9hdmlfaW5m b2ZyYW1lIGZyYW1lOworCXU4IGJ1ZmZlclsxN107CisJc3NpemVfdCBlcnI7CisKKwllcnIgPSBk cm1faGRtaV9hdmlfaW5mb2ZyYW1lX2Zyb21fZGlzcGxheV9tb2RlKCZmcmFtZSwgbW9kZSk7CisJ aWYgKGVyciA8IDApIHsKKwkJZGV2X2VycihoZG1pLT5kZXYsCisJCQkiRmFpbGVkIHRvIGdldCBB VkkgaW5mb2ZyYW1lIGZyb20gbW9kZTogJXpkXG4iLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0K KworCWVyciA9IGhkbWlfYXZpX2luZm9mcmFtZV9wYWNrKCZmcmFtZSwgYnVmZmVyLCBzaXplb2Yo YnVmZmVyKSk7CisJaWYgKGVyciA8IDApIHsKKwkJZGV2X2VycihoZG1pLT5kZXYsICJGYWlsZWQg dG8gcGFjayBBVkkgaW5mb2ZyYW1lOiAlemRcbiIsIGVycik7CisJCXJldHVybiBlcnI7CisJfQor CisJbXRrX2hkbWlfaHdfc2VuZF9pbmZvX2ZyYW1lKGhkbWksIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZl cikpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10a19oZG1pX3NldHVwX3NwZF9pbmZv ZnJhbWUoc3RydWN0IG10a19oZG1pICpoZG1pLAorCQkJCQljb25zdCBjaGFyICp2ZW5kb3IsCisJ CQkJCWNvbnN0IGNoYXIgKnByb2R1Y3QpCit7CisJc3RydWN0IGhkbWlfc3BkX2luZm9mcmFtZSBm cmFtZTsKKwl1OCBidWZmZXJbMjldOworCXNzaXplX3QgZXJyOworCisJZXJyID0gaGRtaV9zcGRf aW5mb2ZyYW1lX2luaXQoJmZyYW1lLCB2ZW5kb3IsIHByb2R1Y3QpOworCWlmIChlcnIgPCAwKSB7 CisJCWRldl9lcnIoaGRtaS0+ZGV2LCAiRmFpbGVkIHRvIGluaXRpYWxpemUgU1BEIGluZm9mcmFt ZTogJXpkXG4iLAorCQkJZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwllcnIgPSBoZG1pX3Nw ZF9pbmZvZnJhbWVfcGFjaygmZnJhbWUsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpOworCWlmIChl cnIgPCAwKSB7CisJCWRldl9lcnIoaGRtaS0+ZGV2LCAiRmFpbGVkIHRvIHBhY2sgU0RQIGluZm9m cmFtZTogJXpkXG4iLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKworCW10a19oZG1pX2h3X3Nl bmRfaW5mb19mcmFtZShoZG1pLCBidWZmZXIsIHNpemVvZihidWZmZXIpKTsKKwlyZXR1cm4gMDsK K30KKworc3RhdGljIGludCBtdGtfaGRtaV9zZXR1cF9hdWRpb19pbmZvZnJhbWUoc3RydWN0IG10 a19oZG1pICpoZG1pKQoreworCXN0cnVjdCBoZG1pX2F1ZGlvX2luZm9mcmFtZSBmcmFtZTsKKwl1 OCBidWZmZXJbMTRdOworCXNzaXplX3QgZXJyOworCisJZXJyID0gaGRtaV9hdWRpb19pbmZvZnJh bWVfaW5pdCgmZnJhbWUpOworCWlmIChlcnIgPCAwKSB7CisJCWRldl9lcnIoaGRtaS0+ZGV2LCAi RmFpbGVkIHRvIHNldHVwIGF1ZGlvIGluZm9mcmFtZTogJXpkXG4iLAorCQkJZXJyKTsKKwkJcmV0 dXJuIGVycjsKKwl9CisKKwlmcmFtZS5jb2RpbmdfdHlwZSA9IEhETUlfQVVESU9fQ09ESU5HX1RZ UEVfU1RSRUFNOworCWZyYW1lLnNhbXBsZV9mcmVxdWVuY3kgPSBIRE1JX0FVRElPX1NBTVBMRV9G UkVRVUVOQ1lfU1RSRUFNOworCWZyYW1lLnNhbXBsZV9zaXplID0gSERNSV9BVURJT19TQU1QTEVf U0laRV9TVFJFQU07CisJZnJhbWUuY2hhbm5lbHMgPSBtdGtfaGRtaV9hdWRfZ2V0X2NobmxfY291 bnQoCisJCQkJCWhkbWktPmF1ZF9wYXJhbS5hdWRfaW5wdXRfY2hhbl90eXBlKTsKKworCWVyciA9 IGhkbWlfYXVkaW9faW5mb2ZyYW1lX3BhY2soJmZyYW1lLCBidWZmZXIsIHNpemVvZihidWZmZXIp KTsKKwlpZiAoZXJyIDwgMCkgeworCQlkZXZfZXJyKGhkbWktPmRldiwgIkZhaWxlZCB0byBwYWNr IGF1ZGlvIGluZm9mcmFtZTogJXpkXG4iLAorCQkJZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisK KwltdGtfaGRtaV9od19zZW5kX2luZm9fZnJhbWUoaGRtaSwgYnVmZmVyLCBzaXplb2YoYnVmZmVy KSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2hkbWlfc2V0dXBfdmVuZG9yX3Nw ZWNpZmljX2luZm9mcmFtZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksCisJCQkJCQlzdHJ1Y3QgZHJt X2Rpc3BsYXlfbW9kZSAqbW9kZSkKK3sKKwlzdHJ1Y3QgaGRtaV92ZW5kb3JfaW5mb2ZyYW1lIGZy YW1lOworCXU4IGJ1ZmZlclsxMF07CisJc3NpemVfdCBlcnI7CisKKwllcnIgPSBkcm1faGRtaV92 ZW5kb3JfaW5mb2ZyYW1lX2Zyb21fZGlzcGxheV9tb2RlKCZmcmFtZSwgbW9kZSk7CisJaWYgKGVy cikgeworCQlkZXZfZXJyKGhkbWktPmRldiwKKwkJCSJGYWlsZWQgdG8gZ2V0IHZlbmRvciBpbmZv ZnJhbWUgZnJvbSBtb2RlOiAlemRcbiIsIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCisJZXJy ID0gaGRtaV92ZW5kb3JfaW5mb2ZyYW1lX3BhY2soJmZyYW1lLCBidWZmZXIsIHNpemVvZihidWZm ZXIpKTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoaGRtaS0+ZGV2LCAiRmFpbGVkIHRvIHBhY2sg dmVuZG9yIGluZm9mcmFtZTogJXpkXG4iLAorCQkJZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisK KwltdGtfaGRtaV9od19zZW5kX2luZm9fZnJhbWUoaGRtaSwgYnVmZmVyLCBzaXplb2YoYnVmZmVy KSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2hkbWlfb3V0cHV0X2luaXQoc3Ry dWN0IG10a19oZG1pICpoZG1pKQoreworCXN0cnVjdCBoZG1pX2F1ZGlvX3BhcmFtICphdWRfcGFy YW0gPSAmaGRtaS0+YXVkX3BhcmFtOworCisJaGRtaS0+Y3NwID0gSERNSV9DT0xPUlNQQUNFX1JH QjsKKwlhdWRfcGFyYW0tPmF1ZF9jb2RlYyA9IEhETUlfQVVESU9fQ09ESU5HX1RZUEVfUENNOwor CWF1ZF9wYXJhbS0+YXVkX3NhbXBlX3NpemUgPSBIRE1JX0FVRElPX1NBTVBMRV9TSVpFXzE2Owor CWF1ZF9wYXJhbS0+YXVkX2lucHV0X3R5cGUgPSBIRE1JX0FVRF9JTlBVVF9JMlM7CisJYXVkX3Bh cmFtLT5hdWRfaTJzX2ZtdCA9IEhETUlfSTJTX01PREVfSTJTXzI0QklUOworCWF1ZF9wYXJhbS0+ YXVkX21jbGsgPSBIRE1JX0FVRF9NQ0xLXzEyOEZTOworCWF1ZF9wYXJhbS0+YXVkX2lucHV0X2No YW5fdHlwZSA9IEhETUlfQVVEX0NIQU5fVFlQRV8yXzA7CisKKwlyZXR1cm4gMDsKK30KKwordm9p ZCBtdGtfaGRtaV9hdWRpb19lbmFibGUoc3RydWN0IG10a19oZG1pICpoZG1pKQoreworCW10a19o ZG1pX2F1ZF9lbmFibGVfcGFja2V0KGhkbWksIHRydWUpOworCWhkbWktPmF1ZGlvX2VuYWJsZSA9 IHRydWU7Cit9CisKK3ZvaWQgbXRrX2hkbWlfYXVkaW9fZGlzYWJsZShzdHJ1Y3QgbXRrX2hkbWkg KmhkbWkpCit7CisJbXRrX2hkbWlfYXVkX2VuYWJsZV9wYWNrZXQoaGRtaSwgZmFsc2UpOworCWhk bWktPmF1ZGlvX2VuYWJsZSA9IGZhbHNlOworfQorCitpbnQgbXRrX2hkbWlfYXVkaW9fc2V0X3Bh cmFtKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwKKwkJCSAgICAgc3RydWN0IGhkbWlfYXVkaW9fcGFy YW0gKnBhcmFtKQoreworCWlmICghaGRtaS0+YXVkaW9fZW5hYmxlKSB7CisJCWRldl9lcnIoaGRt aS0+ZGV2LCAiaGRtaSBhdWRpbyBpcyBpbiBkaXNhYmxlIHN0YXRlIVxuIik7CisJCXJldHVybiAt RUlOVkFMOworCX0KKwlkZXZfZGJnKGhkbWktPmRldiwgImNvZGVjOiVkLCBpbnB1dDolZCwgY2hh bm5lbDolZCwgZnM6JWRcbiIsCisJCXBhcmFtLT5hdWRfY29kZWMsIHBhcmFtLT5hdWRfaW5wdXRf dHlwZSwKKwkJcGFyYW0tPmF1ZF9pbnB1dF9jaGFuX3R5cGUsIHBhcmFtLT5jb2RlY19wYXJhbXMu c2FtcGxlX3JhdGUpOworCW1lbWNweSgmaGRtaS0+YXVkX3BhcmFtLCBwYXJhbSwgc2l6ZW9mKCpw YXJhbSkpOworCXJldHVybiBtdGtfaGRtaV9hdWRfb3V0cHV0X2NvbmZpZyhoZG1pLCAmaGRtaS0+ bW9kZSk7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2hkbWlfb3V0cHV0X3NldF9kaXNwbGF5X21vZGUo c3RydWN0IG10a19oZG1pICpoZG1pLAorCQkJCQkgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUg Km1vZGUpCit7CisJaW50IHJldDsKKworCW10a19oZG1pX2h3X3ZpZF9ibGFjayhoZG1pLCB0cnVl KTsKKwltdGtfaGRtaV9od19hdWRfbXV0ZShoZG1pKTsKKwltdGtfaGRtaV9od19zZW5kX2F2X211 dGUoaGRtaSk7CisJcGh5X3Bvd2VyX29mZihoZG1pLT5waHkpOworCisJcmV0ID0gbXRrX2hkbWlf dmlkZW9fY2hhbmdlX3ZwbGwoaGRtaSwKKwkJCQkJIG1vZGUtPmNsb2NrICogMTAwMCk7CisJaWYg KHJldCkgeworCQlkZXZfZXJyKGhkbWktPmRldiwgIkZhaWxlZCB0byBzZXQgdnBsbDogJWRcbiIs IHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCW10a19oZG1pX3ZpZGVvX3NldF9kaXNwbGF5X21v ZGUoaGRtaSwgbW9kZSk7CisKKwlwaHlfcG93ZXJfb24oaGRtaS0+cGh5KTsKKwltdGtfaGRtaV9h dWRfb3V0cHV0X2NvbmZpZyhoZG1pLCBtb2RlKTsKKworCW10a19oZG1pX3NldHVwX2F1ZGlvX2lu Zm9mcmFtZShoZG1pKTsKKwltdGtfaGRtaV9zZXR1cF9hdmlfaW5mb2ZyYW1lKGhkbWksIG1vZGUp OworCW10a19oZG1pX3NldHVwX3NwZF9pbmZvZnJhbWUoaGRtaSwgIm1lZGlhdGVrIiwgIk9uLWNo aXAgSERNSSIpOworCWlmIChtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfM0RfTUFTSykKKwkJ bXRrX2hkbWlfc2V0dXBfdmVuZG9yX3NwZWNpZmljX2luZm9mcmFtZShoZG1pLCBtb2RlKTsKKwor CW10a19oZG1pX2h3X3ZpZF9ibGFjayhoZG1pLCBmYWxzZSk7CisJbXRrX2hkbWlfaHdfYXVkX3Vu bXV0ZShoZG1pKTsKKwltdGtfaGRtaV9od19zZW5kX2F2X3VubXV0ZShoZG1pKTsKKworCXJldHVy biAwOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG10a19oZG1pX2Nsa19uYW1lc1tN VEtfSERNSV9DTEtfQ09VTlRdID0geworCVtNVEtfSERNSV9DTEtfSERNSV9QSVhFTF0gPSAicGl4 ZWwiLAorCVtNVEtfSERNSV9DTEtfSERNSV9QTExdID0gInBsbCIsCisJW01US19IRE1JX0NMS19B VURfQkNMS10gPSAiYmNsayIsCisJW01US19IRE1JX0NMS19BVURfU1BESUZdID0gInNwZGlmIiwK K307CisKK3N0YXRpYyBpbnQgbXRrX2hkbWlfZ2V0X2FsbF9jbGsoc3RydWN0IG10a19oZG1pICpo ZG1pLAorCQkJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCit7CisJaW50IGk7CisKKwlmb3IgKGkg PSAwOyBpIDwgQVJSQVlfU0laRShtdGtfaGRtaV9jbGtfbmFtZXMpOyBpKyspIHsKKwkJaGRtaS0+ Y2xrW2ldID0gb2ZfY2xrX2dldF9ieV9uYW1lKG5wLAorCQkJCQkJICBtdGtfaGRtaV9jbGtfbmFt ZXNbaV0pOworCQlpZiAoSVNfRVJSKGhkbWktPmNsa1tpXSkpCisJCQlyZXR1cm4gUFRSX0VSUiho ZG1pLT5jbGtbaV0pOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdGtfaGRtaV9j bGtfZW5hYmxlX2F1ZGlvKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSkKK3sKKwlpbnQgcmV0OworCisJ cmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGhkbWktPmNsa1tNVEtfSERNSV9DTEtfQVVEX0JDTEtd KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxl KGhkbWktPmNsa1tNVEtfSERNSV9DTEtfQVVEX1NQRElGXSk7CisJaWYgKHJldCkKKwkJZ290byBl cnI7CisKKwlyZXR1cm4gMDsKK2VycjoKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoaGRtaS0+Y2xr W01US19IRE1JX0NMS19BVURfQkNMS10pOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lk IG10a19oZG1pX2Nsa19kaXNhYmxlX2F1ZGlvKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSkKK3sKKwlj bGtfZGlzYWJsZV91bnByZXBhcmUoaGRtaS0+Y2xrW01US19IRE1JX0NMS19BVURfQkNMS10pOwor CWNsa19kaXNhYmxlX3VucHJlcGFyZShoZG1pLT5jbGtbTVRLX0hETUlfQ0xLX0FVRF9TUERJRl0p OworfQorCitzdGF0aWMgZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cyBoZG1pX2Nvbm5fZGV0ZWN0 KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uLAorCQkJCQkJICBib29sIGZvcmNlKQoreworCXN0 cnVjdCBtdGtfaGRtaSAqaGRtaSA9IGhkbWlfY3R4X2Zyb21fY29ubihjb25uKTsKKworCXJldHVy biBtdGtfY2VjX2hwZF9oaWdoKGhkbWktPmNlY19kZXYpID8KKwkgICAgICAgY29ubmVjdG9yX3N0 YXR1c19jb25uZWN0ZWQgOiBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsKK30KKworc3Rh dGljIHZvaWQgaGRtaV9jb25uX2Rlc3Ryb3koc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm4pCit7 CisJc3RydWN0IG10a19oZG1pICpoZG1pID0gaGRtaV9jdHhfZnJvbV9jb25uKGNvbm4pOworCisJ bXRrX2NlY19zZXRfaHBkX2V2ZW50KGhkbWktPmNlY19kZXYsIE5VTEwsIE5VTEwpOworCisJZHJt X2Nvbm5lY3Rvcl91bnJlZ2lzdGVyKGNvbm4pOworCWRybV9jb25uZWN0b3JfY2xlYW51cChjb25u KTsKK30KKworc3RhdGljIGludCBtdGtfaGRtaV9jb25uX2dldF9tb2RlcyhzdHJ1Y3QgZHJtX2Nv bm5lY3RvciAqY29ubikKK3sKKwlzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkgPSBoZG1pX2N0eF9mcm9t X2Nvbm4oY29ubik7CisJc3RydWN0IGVkaWQgKmVkaWQ7CisJaW50IHJldDsKKworCWlmICghaGRt aS0+ZGRjX2FkcHQpCisJCXJldHVybiAtRU5PREVWOworCisJZWRpZCA9IGRybV9nZXRfZWRpZChj b25uLCBoZG1pLT5kZGNfYWRwdCk7CisJaWYgKCFlZGlkKQorCQlyZXR1cm4gLUVOT0RFVjsKKwor CWhkbWktPmR2aV9tb2RlID0gIWRybV9kZXRlY3RfbW9uaXRvcl9hdWRpbyhlZGlkKTsKKworCWRy bV9tb2RlX2Nvbm5lY3Rvcl91cGRhdGVfZWRpZF9wcm9wZXJ0eShjb25uLCBlZGlkKTsKKworCXJl dCA9IGRybV9hZGRfZWRpZF9tb2Rlcyhjb25uLCBlZGlkKTsKKwlkcm1fZWRpZF90b19lbGQoY29u biwgZWRpZCk7CisJa2ZyZWUoZWRpZCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBt dGtfaGRtaV9jb25uX21vZGVfdmFsaWQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm4sCisJCQkJ ICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQoreworCXN0cnVjdCBtdGtfaGRtaSAq aGRtaSA9IGhkbWlfY3R4X2Zyb21fY29ubihjb25uKTsKKworCWRldl9kYmcoaGRtaS0+ZGV2LCAi eHJlcz0lZCwgeXJlcz0lZCwgcmVmcmVzaD0lZCwgaW50bD0lZCBjbG9jaz0lZFxuIiwKKwkJbW9k ZS0+aGRpc3BsYXksIG1vZGUtPnZkaXNwbGF5LCBtb2RlLT52cmVmcmVzaCwKKwkJISEobW9kZS0+ ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0lOVEVSTEFDRSksIG1vZGUtPmNsb2NrICogMTAwMCk7CisK KwlpZiAoaGRtaS0+YnJpZGdlLm5leHQpIHsKKwkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgYWRq dXN0ZWRfbW9kZTsKKworCQlkcm1fbW9kZV9jb3B5KCZhZGp1c3RlZF9tb2RlLCBtb2RlKTsKKwkJ aWYgKCFkcm1fYnJpZGdlX21vZGVfZml4dXAoaGRtaS0+YnJpZGdlLm5leHQsIG1vZGUsCisJCQkJ CSAgICZhZGp1c3RlZF9tb2RlKSkKKwkJCXJldHVybiBNT0RFX0JBRDsKKwl9CisKKwlpZiAobW9k ZS0+Y2xvY2sgPCAyNzAwMCkKKwkJcmV0dXJuIE1PREVfQ0xPQ0tfTE9XOworCWlmIChtb2RlLT5j bG9jayA+IDI5NzAwMCkKKwkJcmV0dXJuIE1PREVfQ0xPQ0tfSElHSDsKKworCXJldHVybiBkcm1f bW9kZV92YWxpZGF0ZV9zaXplKG1vZGUsIDB4MWZmZiwgMHgxZmZmKTsKK30KKworc3RhdGljIHN0 cnVjdCBkcm1fZW5jb2RlciAqbXRrX2hkbWlfY29ubl9iZXN0X2VuYyhzdHJ1Y3QgZHJtX2Nvbm5l Y3RvciAqY29ubikKK3sKKwlzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkgPSBoZG1pX2N0eF9mcm9tX2Nv bm4oY29ubik7CisKKwlyZXR1cm4gaGRtaS0+YnJpZGdlLmVuY29kZXI7Cit9CisKK3N0YXRpYyBj b25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9mdW5jcyBtdGtfaGRtaV9jb25uZWN0b3JfZnVuY3Mg PSB7CisJLmRwbXMgPSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZHBtcywKKwkuZGV0ZWN0 ID0gaGRtaV9jb25uX2RldGVjdCwKKwkuZmlsbF9tb2RlcyA9IGRybV9oZWxwZXJfcHJvYmVfc2lu Z2xlX2Nvbm5lY3Rvcl9tb2RlcywKKwkuZGVzdHJveSA9IGhkbWlfY29ubl9kZXN0cm95LAorCS5y ZXNldCA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9yZXNldCwKKwkuYXRvbWljX2R1cGxp Y2F0ZV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kdXBsaWNhdGVfc3RhdGUs CisJLmF0b21pY19kZXN0cm95X3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2Rl c3Ryb3lfc3RhdGUsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3JfaGVs cGVyX2Z1bmNzCisJCW10a19oZG1pX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgPSB7CisJLmdldF9t b2RlcyA9IG10a19oZG1pX2Nvbm5fZ2V0X21vZGVzLAorCS5tb2RlX3ZhbGlkID0gbXRrX2hkbWlf Y29ubl9tb2RlX3ZhbGlkLAorCS5iZXN0X2VuY29kZXIgPSBtdGtfaGRtaV9jb25uX2Jlc3RfZW5j LAorfTsKKworc3RhdGljIHZvaWQgbXRrX2hkbWlfaHBkX2V2ZW50KGJvb2wgaHBkLCBzdHJ1Y3Qg ZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG10a19oZG1pICpoZG1pID0gZGV2X2dldF9kcnZkYXRh KGRldik7CisKKwlpZiAoaGRtaSAmJiBoZG1pLT5icmlkZ2UuZW5jb2RlciAmJiBoZG1pLT5icmlk Z2UuZW5jb2Rlci0+ZGV2KQorCQlkcm1faGVscGVyX2hwZF9pcnFfZXZlbnQoaGRtaS0+YnJpZGdl LmVuY29kZXItPmRldik7Cit9CisKKy8qCisgKiBCcmlkZ2UgY2FsbGJhY2tzCisgKi8KKworc3Rh dGljIGludCBtdGtfaGRtaV9icmlkZ2VfYXR0YWNoKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2Up Cit7CisJc3RydWN0IG10a19oZG1pICpoZG1pID0gaGRtaV9jdHhfZnJvbV9icmlkZ2UoYnJpZGdl KTsKKwlpbnQgcmV0OworCisJcmV0ID0gZHJtX2Nvbm5lY3Rvcl9pbml0KGJyaWRnZS0+ZW5jb2Rl ci0+ZGV2LCAmaGRtaS0+Y29ubiwKKwkJCQkgJm10a19oZG1pX2Nvbm5lY3Rvcl9mdW5jcywKKwkJ CQkgRFJNX01PREVfQ09OTkVDVE9SX0hETUlBKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoaGRt aS0+ZGV2LCAiRmFpbGVkIHRvIGluaXRpYWxpemUgY29ubmVjdG9yOiAlZFxuIiwgcmV0KTsKKwkJ cmV0dXJuIHJldDsKKwl9CisJZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKCZoZG1pLT5jb25uLCAm bXRrX2hkbWlfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyk7CisKKwloZG1pLT5jb25uLnBvbGxlZCA9 IERSTV9DT05ORUNUT1JfUE9MTF9IUEQ7CisJaGRtaS0+Y29ubi5pbnRlcmxhY2VfYWxsb3dlZCA9 IHRydWU7CisJaGRtaS0+Y29ubi5kb3VibGVzY2FuX2FsbG93ZWQgPSBmYWxzZTsKKworCXJldCA9 IGRybV9jb25uZWN0b3JfcmVnaXN0ZXIoJmhkbWktPmNvbm4pOworCWlmIChyZXQpIHsKKwkJZGV2 X2VycihoZG1pLT5kZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgY29ubmVjdG9yOiAlZFxuIiwgcmV0 KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBkcm1fbW9kZV9jb25uZWN0b3JfYXR0YWNo X2VuY29kZXIoJmhkbWktPmNvbm4sCisJCQkJCQlicmlkZ2UtPmVuY29kZXIpOworCWlmIChyZXQp IHsKKwkJZGV2X2VycihoZG1pLT5kZXYsCisJCQkiRmFpbGVkIHRvIGF0dGFjaCBjb25uZWN0b3Ig dG8gZW5jb2RlcjogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJaWYgKGJyaWRn ZS0+bmV4dCkgeworCQlicmlkZ2UtPm5leHQtPmVuY29kZXIgPSBicmlkZ2UtPmVuY29kZXI7CisJ CXJldCA9IGRybV9icmlkZ2VfYXR0YWNoKGJyaWRnZS0+ZW5jb2Rlci0+ZGV2LCBicmlkZ2UtPm5l eHQpOworCQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKGhkbWktPmRldiwKKwkJCQkiRmFpbGVkIHRv IGF0dGFjaCBleHRlcm5hbCBicmlkZ2U6ICVkXG4iLCByZXQpOworCQkJcmV0dXJuIHJldDsKKwkJ fQorCX0KKworCW10a19jZWNfc2V0X2hwZF9ldmVudChoZG1pLT5jZWNfZGV2LCBtdGtfaGRtaV9o cGRfZXZlbnQsIGhkbWktPmRldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGJvb2wgbXRr X2hkbWlfYnJpZGdlX21vZGVfZml4dXAoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSwKKwkJCQkg ICAgICAgY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCisJCQkJICAgICAgIHN0 cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlKQoreworCXJldHVybiB0cnVlOwor fQorCitzdGF0aWMgdm9pZCBtdGtfaGRtaV9icmlkZ2VfZGlzYWJsZShzdHJ1Y3QgZHJtX2JyaWRn ZSAqYnJpZGdlKQoreworCXN0cnVjdCBtdGtfaGRtaSAqaGRtaSA9IGhkbWlfY3R4X2Zyb21fYnJp ZGdlKGJyaWRnZSk7CisKKwlpZiAoIWhkbWktPmVuYWJsZWQpCisJCXJldHVybjsKKworCXBoeV9w b3dlcl9vZmYoaGRtaS0+cGh5KTsKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoaGRtaS0+Y2xrW01U S19IRE1JX0NMS19IRE1JX1BJWEVMXSk7CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGhkbWktPmNs a1tNVEtfSERNSV9DTEtfSERNSV9QTExdKTsKKworCWhkbWktPmVuYWJsZWQgPSBmYWxzZTsKK30K Kworc3RhdGljIHZvaWQgbXRrX2hkbWlfYnJpZGdlX3Bvc3RfZGlzYWJsZShzdHJ1Y3QgZHJtX2Jy aWRnZSAqYnJpZGdlKQoreworCXN0cnVjdCBtdGtfaGRtaSAqaGRtaSA9IGhkbWlfY3R4X2Zyb21f YnJpZGdlKGJyaWRnZSk7CisKKwlpZiAoIWhkbWktPnBvd2VyZWQpCisJCXJldHVybjsKKworCW10 a19oZG1pX2h3XzFwNF92ZXJzaW9uX2VuYWJsZShoZG1pLCB0cnVlKTsKKwltdGtfaGRtaV9od19t YWtlX3JlZ193cml0YWJsZShoZG1pLCBmYWxzZSk7CisKKwloZG1pLT5wb3dlcmVkID0gZmFsc2U7 Cit9CisKK3N0YXRpYyB2b2lkIG10a19oZG1pX2JyaWRnZV9tb2RlX3NldChzdHJ1Y3QgZHJtX2Jy aWRnZSAqYnJpZGdlLAorCQkJCSAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCisJ CQkJICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSkKK3sKKwlzdHJ1 Y3QgbXRrX2hkbWkgKmhkbWkgPSBoZG1pX2N0eF9mcm9tX2JyaWRnZShicmlkZ2UpOworCisJZGV2 X2RiZyhoZG1pLT5kZXYsICJjdXIgaW5mbzogbmFtZTolcywgaGRpc3BsYXk6JWRcbiIsCisJCWFk anVzdGVkX21vZGUtPm5hbWUsIGFkanVzdGVkX21vZGUtPmhkaXNwbGF5KTsKKwlkZXZfZGJnKGhk bWktPmRldiwgImhzeW5jX3N0YXJ0OiVkLGhzeW5jX2VuZDolZCwgaHRvdGFsOiVkIiwKKwkJYWRq dXN0ZWRfbW9kZS0+aHN5bmNfc3RhcnQsIGFkanVzdGVkX21vZGUtPmhzeW5jX2VuZCwKKwkJYWRq dXN0ZWRfbW9kZS0+aHRvdGFsKTsKKwlkZXZfZGJnKGhkbWktPmRldiwgImhza2V3OiVkLCB2ZGlz cGxheTolZFxuIiwKKwkJYWRqdXN0ZWRfbW9kZS0+aHNrZXcsIGFkanVzdGVkX21vZGUtPnZkaXNw bGF5KTsKKwlkZXZfZGJnKGhkbWktPmRldiwgInZzeW5jX3N0YXJ0OiVkLCB2c3luY19lbmQ6JWQs IHZ0b3RhbDolZCIsCisJCWFkanVzdGVkX21vZGUtPnZzeW5jX3N0YXJ0LCBhZGp1c3RlZF9tb2Rl LT52c3luY19lbmQsCisJCWFkanVzdGVkX21vZGUtPnZ0b3RhbCk7CisJZGV2X2RiZyhoZG1pLT5k ZXYsICJ2c2NhbjolZCwgZmxhZzolZFxuIiwKKwkJYWRqdXN0ZWRfbW9kZS0+dnNjYW4sIGFkanVz dGVkX21vZGUtPmZsYWdzKTsKKworCWRybV9tb2RlX2NvcHkoJmhkbWktPm1vZGUsIGFkanVzdGVk X21vZGUpOworfQorCitzdGF0aWMgdm9pZCBtdGtfaGRtaV9icmlkZ2VfcHJlX2VuYWJsZShzdHJ1 Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQoreworCXN0cnVjdCBtdGtfaGRtaSAqaGRtaSA9IGhkbWlf Y3R4X2Zyb21fYnJpZGdlKGJyaWRnZSk7CisKKwltdGtfaGRtaV9od19tYWtlX3JlZ193cml0YWJs ZShoZG1pLCB0cnVlKTsKKwltdGtfaGRtaV9od18xcDRfdmVyc2lvbl9lbmFibGUoaGRtaSwgdHJ1 ZSk7CisKKwloZG1pLT5wb3dlcmVkID0gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQgbXRrX2hkbWlf YnJpZGdlX2VuYWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQoreworCXN0cnVjdCBtdGtf aGRtaSAqaGRtaSA9IGhkbWlfY3R4X2Zyb21fYnJpZGdlKGJyaWRnZSk7CisKKwltdGtfaGRtaV9v dXRwdXRfc2V0X2Rpc3BsYXlfbW9kZShoZG1pLCAmaGRtaS0+bW9kZSk7CisJY2xrX3ByZXBhcmVf ZW5hYmxlKGhkbWktPmNsa1tNVEtfSERNSV9DTEtfSERNSV9QTExdKTsKKwljbGtfcHJlcGFyZV9l bmFibGUoaGRtaS0+Y2xrW01US19IRE1JX0NMS19IRE1JX1BJWEVMXSk7CisJcGh5X3Bvd2VyX29u KGhkbWktPnBoeSk7CisKKwloZG1pLT5lbmFibGVkID0gdHJ1ZTsKK30KKworc3RhdGljIGNvbnN0 IHN0cnVjdCBkcm1fYnJpZGdlX2Z1bmNzIG10a19oZG1pX2JyaWRnZV9mdW5jcyA9IHsKKwkuYXR0 YWNoID0gbXRrX2hkbWlfYnJpZGdlX2F0dGFjaCwKKwkubW9kZV9maXh1cCA9IG10a19oZG1pX2Jy aWRnZV9tb2RlX2ZpeHVwLAorCS5kaXNhYmxlID0gbXRrX2hkbWlfYnJpZGdlX2Rpc2FibGUsCisJ LnBvc3RfZGlzYWJsZSA9IG10a19oZG1pX2JyaWRnZV9wb3N0X2Rpc2FibGUsCisJLm1vZGVfc2V0 ID0gbXRrX2hkbWlfYnJpZGdlX21vZGVfc2V0LAorCS5wcmVfZW5hYmxlID0gbXRrX2hkbWlfYnJp ZGdlX3ByZV9lbmFibGUsCisJLmVuYWJsZSA9IG10a19oZG1pX2JyaWRnZV9lbmFibGUsCit9Owor CitzdGF0aWMgaW50IG10a19oZG1pX2R0X3BhcnNlX3BkYXRhKHN0cnVjdCBtdGtfaGRtaSAqaGRt aSwKKwkJCQkgICBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkZXZp Y2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0IGRldmljZV9ub2RlICpucCA9IGRldi0+b2Zf bm9kZTsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNlY19ucCwgKnBvcnQsICplcCwgKnJlbW90ZSwg KmkyY19ucDsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpjZWNfcGRldjsKKwlzdHJ1Y3QgcmVn bWFwICpyZWdtYXA7CisJc3RydWN0IHJlc291cmNlICptZW07CisJaW50IHJldDsKKworCXJldCA9 IG10a19oZG1pX2dldF9hbGxfY2xrKGhkbWksIG5wKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIo ZGV2LCAiRmFpbGVkIHRvIGdldCBjbG9ja3M6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0Owor CX0KKworCS8qIFRoZSBDRUMgbW9kdWxlIGhhbmRsZXMgSERNSSBob3RwbHVnIGRldGVjdGlvbiAq LworCWNlY19ucCA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKG5wLT5wYXJlbnQsIE5VTEwsCisJ CQkJCSAibWVkaWF0ZWssbXQ4MTczLWNlYyIpOworCWlmICghY2VjX25wKSB7CisJCWRldl9lcnIo ZGV2LCAiRmFpbGVkIHRvIGZpbmQgQ0VDIG5vZGVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9 CisKKwljZWNfcGRldiA9IG9mX2ZpbmRfZGV2aWNlX2J5X25vZGUoY2VjX25wKTsKKwlpZiAoIWNl Y19wZGV2KSB7CisJCWRldl9lcnIoaGRtaS0+ZGV2LCAiV2FpdGluZyBmb3IgQ0VDIGRldmljZSAl c1xuIiwKKwkJCWNlY19ucC0+ZnVsbF9uYW1lKTsKKwkJcmV0dXJuIC1FUFJPQkVfREVGRVI7CisJ fQorCWhkbWktPmNlY19kZXYgPSAmY2VjX3BkZXYtPmRldjsKKworCS8qCisJICogVGhlIG1lZGlh dGVrLHN5c2Nvbi1oZG1pIHByb3BlcnR5IGNvbnRhaW5zIGEgcGhhbmRsZSBsaW5rIHRvIHRoZQor CSAqIE1NU1lTX0NPTkZJRyBkZXZpY2UgYW5kIHRoZSByZWdpc3RlciBvZmZzZXQgb2YgdGhlIEhE TUlfU1lTX0NGRworCSAqIHJlZ2lzdGVycyBpdCBjb250YWlucy4KKwkgKi8KKwlyZWdtYXAgPSBz eXNjb25fcmVnbWFwX2xvb2t1cF9ieV9waGFuZGxlKG5wLCAibWVkaWF0ZWssc3lzY29uLWhkbWki KTsKKwlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMl9pbmRleChucCwgIm1lZGlhdGVrLHN5c2Nv bi1oZG1pIiwgMSwKKwkJCQkJICZoZG1pLT5zeXNfb2Zmc2V0KTsKKwlpZiAoSVNfRVJSKHJlZ21h cCkpCisJCXJldCA9IFBUUl9FUlIocmVnbWFwKTsKKwlpZiAocmV0KSB7CisJCXJldCA9IFBUUl9F UlIocmVnbWFwKTsKKwkJZGV2X2VycihkZXYsCisJCQkiRmFpbGVkIHRvIGdldCBzeXN0ZW0gY29u ZmlndXJhdGlvbiByZWdpc3RlcnM6ICVkXG4iLAorCQkJcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9 CisJaGRtaS0+c3lzX3JlZ21hcCA9IHJlZ21hcDsKKworCW1lbSA9IHBsYXRmb3JtX2dldF9yZXNv dXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaGRtaS0+cmVncyA9IGRldm1faW9yZW1h cF9yZXNvdXJjZShkZXYsIG1lbSk7CisJaWYgKElTX0VSUihoZG1pLT5yZWdzKSkKKwkJcmV0dXJu IFBUUl9FUlIoaGRtaS0+cmVncyk7CisKKwlwb3J0ID0gb2ZfZ3JhcGhfZ2V0X3BvcnRfYnlfaWQo bnAsIDEpOworCWlmICghcG9ydCkgeworCQlkZXZfZXJyKGRldiwgIk1pc3Npbmcgb3V0cHV0IHBv cnQgbm9kZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWVwID0gb2ZfZ2V0X2NoaWxk X2J5X25hbWUocG9ydCwgImVuZHBvaW50Iik7CisJaWYgKCFlcCkgeworCQlkZXZfZXJyKGRldiwg Ik1pc3NpbmcgZW5kcG9pbnQgbm9kZSBpbiBwb3J0ICVzXG4iLAorCQkJcG9ydC0+ZnVsbF9uYW1l KTsKKwkJb2Zfbm9kZV9wdXQocG9ydCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlvZl9ub2Rl X3B1dChwb3J0KTsKKworCXJlbW90ZSA9IG9mX2dyYXBoX2dldF9yZW1vdGVfcG9ydF9wYXJlbnQo ZXApOworCWlmICghcmVtb3RlKSB7CisJCWRldl9lcnIoZGV2LCAiTWlzc2luZyBjb25uZWN0b3Iv YnJpZGdlIG5vZGUgZm9yIGVuZHBvaW50ICVzXG4iLAorCQkJZXAtPmZ1bGxfbmFtZSk7CisJCW9m X25vZGVfcHV0KGVwKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCW9mX25vZGVfcHV0KGVwKTsK KworCWlmICghb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocmVtb3RlLCAiaGRtaS1jb25uZWN0b3Ii KSkgeworCQloZG1pLT5icmlkZ2UubmV4dCA9IG9mX2RybV9maW5kX2JyaWRnZShyZW1vdGUpOwor CQlpZiAoIWhkbWktPmJyaWRnZS5uZXh0KSB7CisJCQlkZXZfZXJyKGRldiwgIldhaXRpbmcgZm9y IGV4dGVybmFsIGJyaWRnZVxuIik7CisJCQlvZl9ub2RlX3B1dChyZW1vdGUpOworCQkJcmV0dXJu IC1FUFJPQkVfREVGRVI7CisJCX0KKwl9CisKKwlpMmNfbnAgPSBvZl9wYXJzZV9waGFuZGxlKHJl bW90ZSwgImRkYy1pMmMtYnVzIiwgMCk7CisJaWYgKCFpMmNfbnApIHsKKwkJZGV2X2VycihkZXYs ICJGYWlsZWQgdG8gZmluZCBkZGMtaTJjLWJ1cyBub2RlIGluICVzXG4iLAorCQkJcmVtb3RlLT5m dWxsX25hbWUpOworCQlvZl9ub2RlX3B1dChyZW1vdGUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9 CisJb2Zfbm9kZV9wdXQocmVtb3RlKTsKKworCWhkbWktPmRkY19hZHB0ID0gb2ZfZmluZF9pMmNf YWRhcHRlcl9ieV9ub2RlKGkyY19ucCk7CisJaWYgKCFoZG1pLT5kZGNfYWRwdCkgeworCQlkZXZf ZXJyKGRldiwgIkZhaWxlZCB0byBnZXQgZGRjIGkyYyBhZGFwdGVyIGJ5IG5vZGVcbiIpOworCQly ZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEhETUkgYXVkaW8g Y29kZWMgY2FsbGJhY2tzCisgKi8KKworc3RhdGljIGludCBtdGtfaGRtaV9hdWRpb19od19wYXJh bXMoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICBzdHJ1Y3QgaGRtaV9jb2RlY19kYWlmbXQg KmRhaWZtdCwKKwkJCQkgICAgc3RydWN0IGhkbWlfY29kZWNfcGFyYW1zICpwYXJhbXMpCit7CisJ c3RydWN0IG10a19oZG1pICpoZG1pID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGhk bWlfYXVkaW9fcGFyYW0gaGRtaV9wYXJhbXM7CisJdW5zaWduZWQgaW50IGNoYW4gPSBwYXJhbXMt PmNlYS5jaGFubmVsczsKKworCWRldl9kYmcoaGRtaS0+ZGV2LCAiJXM6ICV1IEh6LCAlZCBiaXQs ICVkIGNoYW5uZWxzXG4iLCBfX2Z1bmNfXywKKwkJcGFyYW1zLT5zYW1wbGVfcmF0ZSwgcGFyYW1z LT5zYW1wbGVfd2lkdGgsIGNoYW4pOworCisJaWYgKCFoZG1pLT5icmlkZ2UuZW5jb2RlcikKKwkJ cmV0dXJuIC1FTk9ERVY7CisKKwlzd2l0Y2ggKGNoYW4pIHsKKwljYXNlIDI6CisJCWhkbWlfcGFy YW1zLmF1ZF9pbnB1dF9jaGFuX3R5cGUgPSBIRE1JX0FVRF9DSEFOX1RZUEVfMl8wOworCQlicmVh azsKKwljYXNlIDQ6CisJCWhkbWlfcGFyYW1zLmF1ZF9pbnB1dF9jaGFuX3R5cGUgPSBIRE1JX0FV RF9DSEFOX1RZUEVfNF8wOworCQlicmVhazsKKwljYXNlIDY6CisJCWhkbWlfcGFyYW1zLmF1ZF9p bnB1dF9jaGFuX3R5cGUgPSBIRE1JX0FVRF9DSEFOX1RZUEVfNV8xOworCQlicmVhazsKKwljYXNl IDg6CisJCWhkbWlfcGFyYW1zLmF1ZF9pbnB1dF9jaGFuX3R5cGUgPSBIRE1JX0FVRF9DSEFOX1RZ UEVfN18xOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZXJyKGhkbWktPmRldiwgImNoYW5u ZWxbJWRdIG5vdCBzdXBwb3J0ZWQhXG4iLCBjaGFuKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQor CisJc3dpdGNoIChwYXJhbXMtPnNhbXBsZV9yYXRlKSB7CisJY2FzZSAzMjAwMDoKKwljYXNlIDQ0 MTAwOgorCWNhc2UgNDgwMDA6CisJY2FzZSA4ODIwMDoKKwljYXNlIDk2MDAwOgorCWNhc2UgMTc2 NDAwOgorCWNhc2UgMTkyMDAwOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZXJyKGhkbWkt PmRldiwgInJhdGVbJWRdIG5vdCBzdXBwb3J0ZWQhXG4iLAorCQkJcGFyYW1zLT5zYW1wbGVfcmF0 ZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXN3aXRjaCAoZGFpZm10LT5mbXQpIHsKKwlj YXNlIEhETUlfSTJTOgorCQloZG1pX3BhcmFtcy5hdWRfY29kZWMgPSBIRE1JX0FVRElPX0NPRElO R19UWVBFX1BDTTsKKwkJaGRtaV9wYXJhbXMuYXVkX3NhbXBlX3NpemUgPSBIRE1JX0FVRElPX1NB TVBMRV9TSVpFXzE2OworCQloZG1pX3BhcmFtcy5hdWRfaW5wdXRfdHlwZSA9IEhETUlfQVVEX0lO UFVUX0kyUzsKKwkJaGRtaV9wYXJhbXMuYXVkX2kyc19mbXQgPSBIRE1JX0kyU19NT0RFX0kyU18y NEJJVDsKKwkJaGRtaV9wYXJhbXMuYXVkX21jbGsgPSBIRE1JX0FVRF9NQ0xLXzEyOEZTOworCQli cmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZXJyKGhkbWktPmRldiwgIiVzOiBJbnZhbGlkIERBSSBm b3JtYXQgJWRcbiIsIF9fZnVuY19fLAorCQkJZGFpZm10LT5mbXQpOworCQlyZXR1cm4gLUVJTlZB TDsKKwl9CisKKwltZW1jcHkoJmhkbWlfcGFyYW1zLmNvZGVjX3BhcmFtcywgcGFyYW1zLAorCSAg ICAgICBzaXplb2YoaGRtaV9wYXJhbXMuY29kZWNfcGFyYW1zKSk7CisKKwltdGtfaGRtaV9hdWRp b19zZXRfcGFyYW0oaGRtaSwgJmhkbWlfcGFyYW1zKTsKKworCXJldHVybiAwOworfQorCitzdGF0 aWMgaW50IG10a19oZG1pX2F1ZGlvX3N0YXJ0dXAoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0 cnVjdCBtdGtfaGRtaSAqaGRtaSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJZGV2X2RiZyhk ZXYsICIlc1xuIiwgX19mdW5jX18pOworCisJbXRrX2hkbWlfYXVkaW9fZW5hYmxlKGhkbWkpOwor CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG10a19oZG1pX2F1ZGlvX3NodXRkb3duKHN0 cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkgPSBkZXZfZ2V0X2Ry dmRhdGEoZGV2KTsKKworCWRldl9kYmcoZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKKworCW10a19o ZG1pX2F1ZGlvX2Rpc2FibGUoaGRtaSk7Cit9CisKK2ludCBtdGtfaGRtaV9hdWRpb19kaWdpdGFs X211dGUoc3RydWN0IGRldmljZSAqZGV2LCBib29sIGVuYWJsZSkKK3sKKwlzdHJ1Y3QgbXRrX2hk bWkgKmhkbWkgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWRldl9kYmcoZGV2LCAiJXMoJWQp XG4iLCBfX2Z1bmNfXywgZW5hYmxlKTsKKworCWlmIChlbmFibGUpCisJCW10a19oZG1pX2h3X2F1 ZF9tdXRlKGhkbWkpOworCWVsc2UKKwkJbXRrX2hkbWlfaHdfYXVkX3VubXV0ZShoZG1pKTsKKwor CXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10a19oZG1pX2F1ZGlvX2dldF9lbGQoc3RydWN0 IGRldmljZSAqZGV2LCB1aW50OF90ICpidWYsIHNpemVfdCBsZW4pCit7CisJc3RydWN0IG10a19o ZG1pICpoZG1pID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlkZXZfZGJnKGRldiwgIiVzXG4i LCBfX2Z1bmNfXyk7CisKKwltZW1jcHkoYnVmLCBoZG1pLT5jb25uLmVsZCwgbWluKHNpemVvZiho ZG1pLT5jb25uLmVsZCksIGxlbikpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBz dHJ1Y3QgaGRtaV9jb2RlY19vcHMgbXRrX2hkbWlfYXVkaW9fY29kZWNfb3BzID0geworCS5od19w YXJhbXMgPSBtdGtfaGRtaV9hdWRpb19od19wYXJhbXMsCisJLmF1ZGlvX3N0YXJ0dXAgPSBtdGtf aGRtaV9hdWRpb19zdGFydHVwLAorCS5hdWRpb19zaHV0ZG93biA9IG10a19oZG1pX2F1ZGlvX3No dXRkb3duLAorCS5kaWdpdGFsX211dGUgPSBtdGtfaGRtaV9hdWRpb19kaWdpdGFsX211dGUsCisJ LmdldF9lbGQgPSBtdGtfaGRtaV9hdWRpb19nZXRfZWxkLAorfTsKKworc3RhdGljIHZvaWQgbXRr X2hkbWlfcmVnaXN0ZXJfYXVkaW9fZHJpdmVyKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1 Y3QgaGRtaV9jb2RlY19wZGF0YSBjb2RlY19kYXRhID0geworCQkub3BzID0gJm10a19oZG1pX2F1 ZGlvX2NvZGVjX29wcywKKwkJLm1heF9pMnNfY2hhbm5lbHMgPSAyLAorCQkuaTJzID0gMSwKKwl9 OworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisKKwlwZGV2ID0gcGxhdGZvcm1fZGV2 aWNlX3JlZ2lzdGVyX2RhdGEoZGV2LCBIRE1JX0NPREVDX0RSVl9OQU1FLAorCQkJCQkgICAgIFBM QVRGT1JNX0RFVklEX0FVVE8sICZjb2RlY19kYXRhLAorCQkJCQkgICAgIHNpemVvZihjb2RlY19k YXRhKSk7CisJaWYgKElTX0VSUihwZGV2KSkKKwkJcmV0dXJuOworCisJRFJNX0lORk8oIiVzIGRy aXZlciBib3VuZCB0byBIRE1JXG4iLCBIRE1JX0NPREVDX0RSVl9OQU1FKTsKK30KKworc3RhdGlj IGludCBtdGtfZHJtX2hkbWlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sK KwlzdHJ1Y3QgbXRrX2hkbWkgKmhkbWk7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRl djsKKwlpbnQgcmV0OworCisJaGRtaSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqaGRtaSks IEdGUF9LRVJORUwpOworCWlmICghaGRtaSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwloZG1pLT5k ZXYgPSBkZXY7CisKKwlyZXQgPSBtdGtfaGRtaV9kdF9wYXJzZV9wZGF0YShoZG1pLCBwZGV2KTsK KwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaGRtaS0+cGh5ID0gZGV2bV9waHlfZ2V0KGRl diwgImhkbWkiKTsKKwlpZiAoSVNfRVJSKGhkbWktPnBoeSkpIHsKKwkJcmV0ID0gUFRSX0VSUiho ZG1pLT5waHkpOworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBnZXQgSERNSSBQSFk6ICVkXG4i LCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYs IGhkbWkpOworCisJcmV0ID0gbXRrX2hkbWlfb3V0cHV0X2luaXQoaGRtaSk7CisJaWYgKHJldCkg eworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBpbml0aWFsaXplIGhkbWkgb3V0cHV0XG4iKTsK KwkJcmV0dXJuIHJldDsKKwl9CisKKwltdGtfaGRtaV9yZWdpc3Rlcl9hdWRpb19kcml2ZXIoZGV2 KTsKKworCWhkbWktPmJyaWRnZS5mdW5jcyA9ICZtdGtfaGRtaV9icmlkZ2VfZnVuY3M7CisJaGRt aS0+YnJpZGdlLm9mX25vZGUgPSBwZGV2LT5kZXYub2Zfbm9kZTsKKwlyZXQgPSBkcm1fYnJpZGdl X2FkZCgmaGRtaS0+YnJpZGdlKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVk IHRvIGFkZCBicmlkZ2UsIHJldCA9ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwor CXJldCA9IG10a19oZG1pX2Nsa19lbmFibGVfYXVkaW8oaGRtaSk7CisJaWYgKHJldCkgeworCQlk ZXZfZXJyKGRldiwgIkZhaWxlZCB0byBlbmFibGUgYXVkaW8gY2xvY2tzOiAlZFxuIiwgcmV0KTsK KwkJZ290byBlcnJfYnJpZGdlX3JlbW92ZTsKKwl9CisKKwlkZXZfZGJnKGRldiwgIm1lZGlhdGVr IGhkbWkgcHJvYmUgc3VjY2Vzc1xuIik7CisJcmV0dXJuIDA7CisKK2Vycl9icmlkZ2VfcmVtb3Zl OgorCWRybV9icmlkZ2VfcmVtb3ZlKCZoZG1pLT5icmlkZ2UpOworCXJldHVybiByZXQ7Cit9CisK K3N0YXRpYyBpbnQgbXRrX2RybV9oZG1pX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpw ZGV2KQoreworCXN0cnVjdCBtdGtfaGRtaSAqaGRtaSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBk ZXYpOworCisJZHJtX2JyaWRnZV9yZW1vdmUoJmhkbWktPmJyaWRnZSk7CisJbXRrX2hkbWlfY2xr X2Rpc2FibGVfYXVkaW8oaGRtaSk7CisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfUE1f U0xFRVAKK3N0YXRpYyBpbnQgbXRrX2hkbWlfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7 CisJc3RydWN0IG10a19oZG1pICpoZG1pID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwltdGtf aGRtaV9jbGtfZGlzYWJsZV9hdWRpbyhoZG1pKTsKKwlkZXZfZGJnKGRldiwgImhkbWkgc3VzcGVu ZCBzdWNjZXNzIVxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2hkbWlfcmVz dW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkgPSBkZXZf Z2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgcmV0ID0gMDsKKworCXJldCA9IG10a19oZG1pX2Nsa19l bmFibGVfYXVkaW8oaGRtaSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgImhkbWkgcmVz dW1lIGZhaWxlZCFcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCWRldl9kYmcoZGV2LCAiaGRt aSByZXN1bWUgc3VjY2VzcyFcbiIpOworCXJldHVybiAwOworfQorI2VuZGlmCitzdGF0aWMgU0lN UExFX0RFVl9QTV9PUFMobXRrX2hkbWlfcG1fb3BzLAorCQkJIG10a19oZG1pX3N1c3BlbmQsIG10 a19oZG1pX3Jlc3VtZSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG10a19k cm1faGRtaV9vZl9pZHNbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1o ZG1pIiwgfSwKKwl7fQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXRrX2hk bWlfZHJpdmVyID0geworCS5wcm9iZSA9IG10a19kcm1faGRtaV9wcm9iZSwKKwkucmVtb3ZlID0g bXRrX2RybV9oZG1pX3JlbW92ZSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJtZWRpYXRlay1k cm0taGRtaSIsCisJCS5vZl9tYXRjaF90YWJsZSA9IG10a19kcm1faGRtaV9vZl9pZHMsCisJCS5w bSA9ICZtdGtfaGRtaV9wbV9vcHMsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1f ZHJpdmVyICogY29uc3QgbXRrX2hkbWlfZHJpdmVyc1tdID0geworCSZtdGtfaGRtaV9waHlfZHJp dmVyLAorCSZtdGtfaGRtaV9kZGNfZHJpdmVyLAorCSZtdGtfY2VjX2RyaXZlciwKKwkmbXRrX2hk bWlfZHJpdmVyLAorfTsKKworc3RhdGljIGludCBfX2luaXQgbXRrX2hkbWl0eF9pbml0KHZvaWQp Cit7CisJaW50IHJldDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG10 a19oZG1pX2RyaXZlcnMpOyBpKyspIHsKKwkJcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVy KG10a19oZG1pX2RyaXZlcnNbaV0pOworCQlpZiAocmV0IDwgMCkgeworCQkJcHJfZXJyKCJGYWls ZWQgdG8gcmVnaXN0ZXIgJXMgZHJpdmVyOiAlZFxuIiwKKwkJCSAgICAgICBtdGtfaGRtaV9kcml2 ZXJzW2ldLT5kcml2ZXIubmFtZSwgcmV0KTsKKwkJCWdvdG8gZXJyOworCQl9CisJfQorCisJcmV0 dXJuIDA7CisKK2VycjoKKwl3aGlsZSAoLS1pID49IDApCisJCXBsYXRmb3JtX2RyaXZlcl91bnJl Z2lzdGVyKG10a19oZG1pX2RyaXZlcnNbaV0pOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGlj IHZvaWQgX19leGl0IG10a19oZG1pdHhfZXhpdCh2b2lkKQoreworCWludCBpOworCisJZm9yIChp ID0gQVJSQVlfU0laRShtdGtfaGRtaV9kcml2ZXJzKSAtIDE7IGkgPj0gMDsgaS0tKQorCQlwbGF0 Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcihtdGtfaGRtaV9kcml2ZXJzW2ldKTsKK30KKworbW9kdWxl X2luaXQobXRrX2hkbWl0eF9pbml0KTsKK21vZHVsZV9leGl0KG10a19oZG1pdHhfZXhpdCk7CisK K01PRFVMRV9BVVRIT1IoIkppZSBRaXUgPGppZS5xaXVAbWVkaWF0ZWsuY29tPiIpOworTU9EVUxF X0RFU0NSSVBUSU9OKCJNZWRpYVRlayBIRE1JIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQ TCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19oZG1pLmgg Yi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2hkbWkuaApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwLi42MzcxYjNkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUv ZHJtL21lZGlhdGVrL210a19oZG1pLmgKQEAgLTAsMCArMSwyMyBAQAorLyoKKyAqIENvcHlyaWdo dCAoYykgMjAxNCBNZWRpYVRlayBJbmMuCisgKiBBdXRob3I6IEppZSBRaXUgPGppZS5xaXVAbWVk aWF0ZWsuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVk IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlz IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls cy4KKyAqLworI2lmbmRlZiBfTVRLX0hETUlfQ1RSTF9ICisjZGVmaW5lIF9NVEtfSERNSV9DVFJM X0gKKworc3RydWN0IHBsYXRmb3JtX2RyaXZlcjsKKworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9k cml2ZXIgbXRrX2NlY19kcml2ZXI7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdGtf aGRtaV9kZGNfZHJpdmVyOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXRrX2hkbWlf cGh5X2RyaXZlcjsKKworI2VuZGlmIC8qIF9NVEtfSERNSV9DVFJMX0ggKi8KZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaV9kZGMuYyBiL2RyaXZlcnMvZ3B1L2Ry bS9tZWRpYXRlay9tdGtfaGRtaV9kZGMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwLi5jZjdkZDVkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVr L210a19oZG1pX2RkYy5jCkBAIC0wLDAgKzEsMzU4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAy MDE0IE1lZGlhVGVrIEluYy4KKyAqIEF1dGhvcjogSmllIFFpdSA8amllLnFpdUBtZWRpYXRlay5j b20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0 cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJp YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg dGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICov CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Cisj aW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUg PGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51 eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxs aW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaW8u aD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNz Lmg+CisjaW5jbHVkZSA8bGludXgvb2ZfaXJxLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZv cm0uaD4KKworI2RlZmluZSBTSUYxX0NMT0sJCSgyODgpCisjZGVmaW5lIEREQ19ERENNQ1RMMAkJ KDB4MCkKKyNkZWZpbmUgRERDTV9PRFJBSU4JCQlCSVQoMzEpCisjZGVmaW5lIEREQ01fQ0xLX0RJ Vl9PRkZTRVQJCSgxNikKKyNkZWZpbmUgRERDTV9DTEtfRElWX01BU0sJCSgweGZmZiA8PCAxNikK KyNkZWZpbmUgRERDTV9DU19TVEFUVVMJCQlCSVQoNCkKKyNkZWZpbmUgRERDTV9TQ0xfU1RBVEUJ CQlCSVQoMykKKyNkZWZpbmUgRERDTV9TREFfU1RBVEUJCQlCSVQoMikKKyNkZWZpbmUgRERDTV9T TTBFTgkJCUJJVCgxKQorI2RlZmluZSBERENNX1NDTF9TVFJFQ0gJCQlCSVQoMCkKKyNkZWZpbmUg RERDX0REQ01DVEwxCQkoMHg0KQorI2RlZmluZSBERENNX0FDS19PRkZTRVQJCQkoMTYpCisjZGVm aW5lIEREQ01fQUNLX01BU0sJCQkoMHhmZiA8PCAxNikKKyNkZWZpbmUgRERDTV9QR0xFTl9PRkZT RVQJCSg4KQorI2RlZmluZSBERENNX1BHTEVOX01BU0sJCQkoMHg3IDw8IDgpCisjZGVmaW5lIERE Q01fU0lGX01PREVfT0ZGU0VUCQkoNCkKKyNkZWZpbmUgRERDTV9TSUZfTU9ERV9NQVNLCQkoMHg3 IDw8IDQpCisjZGVmaW5lIEREQ01fU1RBUlQJCQkoMHgxKQorI2RlZmluZSBERENNX1dSSVRFX0RB VEEJCQkoMHgyKQorI2RlZmluZSBERENNX1NUT1AJCQkoMHgzKQorI2RlZmluZSBERENNX1JFQURf REFUQV9OT19BQ0sJCSgweDQpCisjZGVmaW5lIEREQ01fUkVBRF9EQVRBX0FDSwkJKDB4NSkKKyNk ZWZpbmUgRERDTV9UUkkJCQlCSVQoMCkKKyNkZWZpbmUgRERDX0REQ01EMAkJKDB4OCkKKyNkZWZp bmUgRERDTV9EQVRBMwkJCSgweGZmIDw8IDI0KQorI2RlZmluZSBERENNX0RBVEEyCQkJKDB4ZmYg PDwgMTYpCisjZGVmaW5lIEREQ01fREFUQTEJCQkoMHhmZiA8PCA4KQorI2RlZmluZSBERENNX0RB VEEwCQkJKDB4ZmYgPDwgMCkKKyNkZWZpbmUgRERDX0REQ01EMQkJKDB4YykKKyNkZWZpbmUgRERD TV9EQVRBNwkJCSgweGZmIDw8IDI0KQorI2RlZmluZSBERENNX0RBVEE2CQkJKDB4ZmYgPDwgMTYp CisjZGVmaW5lIEREQ01fREFUQTUJCQkoMHhmZiA8PCA4KQorI2RlZmluZSBERENNX0RBVEE0CQkJ KDB4ZmYgPDwgMCkKKworc3RydWN0IG10a19oZG1pX2RkYyB7CisJc3RydWN0IGkyY19hZGFwdGVy IGFkYXA7CisJc3RydWN0IGNsayAqY2xrOworCXZvaWQgX19pb21lbSAqcmVnczsKK307CisKK3N0 YXRpYyBpbmxpbmUgdm9pZCBzaWZfc2V0X2JpdChzdHJ1Y3QgbXRrX2hkbWlfZGRjICpkZGMsIHVu c2lnbmVkIGludCBvZmZzZXQsCisJCQkgICAgICAgdW5zaWduZWQgaW50IHZhbCkKK3sKKwl3cml0 ZWwocmVhZGwoZGRjLT5yZWdzICsgb2Zmc2V0KSB8IHZhbCwgZGRjLT5yZWdzICsgb2Zmc2V0KTsK K30KKworc3RhdGljIGlubGluZSB2b2lkIHNpZl9jbHJfYml0KHN0cnVjdCBtdGtfaGRtaV9kZGMg KmRkYywgdW5zaWduZWQgaW50IG9mZnNldCwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgdmFsKQor eworCXdyaXRlbChyZWFkbChkZGMtPnJlZ3MgKyBvZmZzZXQpICYgfnZhbCwgZGRjLT5yZWdzICsg b2Zmc2V0KTsKK30KKworc3RhdGljIGlubGluZSBib29sIHNpZl9iaXRfaXNfc2V0KHN0cnVjdCBt dGtfaGRtaV9kZGMgKmRkYywgdW5zaWduZWQgaW50IG9mZnNldCwKKwkJCQkgIHVuc2lnbmVkIGlu dCB2YWwpCit7CisJcmV0dXJuIChyZWFkbChkZGMtPnJlZ3MgKyBvZmZzZXQpICYgdmFsKSA9PSB2 YWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzaWZfd3JpdGVfbWFzayhzdHJ1Y3QgbXRrX2hk bWlfZGRjICpkZGMsIHVuc2lnbmVkIGludCBvZmZzZXQsCisJCQkJICB1bnNpZ25lZCBpbnQgbWFz aywgdW5zaWduZWQgaW50IHNoaWZ0LAorCQkJCSAgdW5zaWduZWQgaW50IHZhbCkKK3sKKwl1bnNp Z25lZCBpbnQgdG1wOworCisJdG1wID0gcmVhZGwoZGRjLT5yZWdzICsgb2Zmc2V0KTsKKwl0bXAg Jj0gfm1hc2s7CisJdG1wIHw9ICh2YWwgPDwgc2hpZnQpICYgbWFzazsKKwl3cml0ZWwodG1wLCBk ZGMtPnJlZ3MgKyBvZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBzaWZf cmVhZF9tYXNrKHN0cnVjdCBtdGtfaGRtaV9kZGMgKmRkYywKKwkJCQkJIHVuc2lnbmVkIGludCBv ZmZzZXQsIHVuc2lnbmVkIGludCBtYXNrLAorCQkJCQkgdW5zaWduZWQgaW50IHNoaWZ0KQorewor CXJldHVybiAocmVhZGwoZGRjLT5yZWdzICsgb2Zmc2V0KSAmIG1hc2spID4+IHNoaWZ0OworfQor CitzdGF0aWMgdm9pZCBkZGNtX3RyaWdnZXJfbW9kZShzdHJ1Y3QgbXRrX2hkbWlfZGRjICpkZGMs IGludCBtb2RlKQoreworCXUzMiB2YWw7CisKKwlzaWZfd3JpdGVfbWFzayhkZGMsIEREQ19ERENN Q1RMMSwgRERDTV9TSUZfTU9ERV9NQVNLLAorCQkgICAgICAgRERDTV9TSUZfTU9ERV9PRkZTRVQs IG1vZGUpOworCXNpZl9zZXRfYml0KGRkYywgRERDX0REQ01DVEwxLCBERENNX1RSSSk7CisJcmVh ZGxfcG9sbF90aW1lb3V0KGRkYy0+cmVncyArIEREQ19ERENNQ1RMMSwgdmFsLCB2YWwgJiBERENN X1RSSSwgNCwKKwkJCSAgIDIwMDAwKTsKK30KKworc3RhdGljIGludCBtdGtfaGRtaV9kZGNfcmVh ZF9tc2coc3RydWN0IG10a19oZG1pX2RkYyAqZGRjLCBzdHJ1Y3QgaTJjX21zZyAqbXNnKQorewor CXN0cnVjdCBkZXZpY2UgKmRldiA9IGRkYy0+YWRhcC5kZXYucGFyZW50OworCXUzMiByZW1haW5f Y291bnQsIGFja19jb3VudCwgYWNrX2ZpbmFsLCByZWFkX2NvdW50LCB0ZW1wX2NvdW50OworCXUz MiBpbmRleCA9IDA7CisJdTMyIGFjazsKKwlpbnQgaTsKKworCWRkY21fdHJpZ2dlcl9tb2RlKGRk YywgRERDTV9TVEFSVCk7CisJc2lmX3dyaXRlX21hc2soZGRjLCBERENfRERDTUQwLCAweGZmLCAw LCAobXNnLT5hZGRyIDw8IDEpIHwgMHgwMSk7CisJc2lmX3dyaXRlX21hc2soZGRjLCBERENfRERD TUNUTDEsIEREQ01fUEdMRU5fTUFTSywgRERDTV9QR0xFTl9PRkZTRVQsCisJCSAgICAgICAweDAw KTsKKwlkZGNtX3RyaWdnZXJfbW9kZShkZGMsIEREQ01fV1JJVEVfREFUQSk7CisJYWNrID0gc2lm X3JlYWRfbWFzayhkZGMsIEREQ19ERENNQ1RMMSwgRERDTV9BQ0tfTUFTSywgRERDTV9BQ0tfT0ZG U0VUKTsKKwlkZXZfZGJnKGRldiwgImFjayA9IDB4JXhcbiIsIGFjayk7CisJaWYgKGFjayAhPSAw eDAxKSB7CisJCWRldl9lcnIoZGV2LCAiaTJjIGFjayBlcnIhXG4iKTsKKwkJcmV0dXJuIC1FTlhJ TzsKKwl9CisKKwlyZW1haW5fY291bnQgPSBtc2ctPmxlbjsKKwlhY2tfY291bnQgPSAobXNnLT5s ZW4gLSAxKSAvIDg7CisJYWNrX2ZpbmFsID0gMDsKKworCXdoaWxlIChyZW1haW5fY291bnQgPiAw KSB7CisJCWlmIChhY2tfY291bnQgPiAwKSB7CisJCQlyZWFkX2NvdW50ID0gODsKKwkJCWFja19m aW5hbCA9IDA7CisJCQlhY2tfY291bnQtLTsKKwkJfSBlbHNlIHsKKwkJCXJlYWRfY291bnQgPSBy ZW1haW5fY291bnQ7CisJCQlhY2tfZmluYWwgPSAxOworCQl9CisKKwkJc2lmX3dyaXRlX21hc2so ZGRjLCBERENfRERDTUNUTDEsIEREQ01fUEdMRU5fTUFTSywKKwkJCSAgICAgICBERENNX1BHTEVO X09GRlNFVCwgcmVhZF9jb3VudCAtIDEpOworCQlkZGNtX3RyaWdnZXJfbW9kZShkZGMsIChhY2tf ZmluYWwgPT0gMSkgPworCQkJCSAgRERDTV9SRUFEX0RBVEFfTk9fQUNLIDoKKwkJCQkgIEREQ01f UkVBRF9EQVRBX0FDSyk7CisKKwkJYWNrID0gc2lmX3JlYWRfbWFzayhkZGMsIEREQ19ERENNQ1RM MSwgRERDTV9BQ0tfTUFTSywKKwkJCQkgICAgRERDTV9BQ0tfT0ZGU0VUKTsKKwkJdGVtcF9jb3Vu dCA9IDA7CisJCXdoaWxlICgoKGFjayAmICgxIDw8IHRlbXBfY291bnQpKSAhPSAwKSAmJiAodGVt cF9jb3VudCA8IDgpKQorCQkJdGVtcF9jb3VudCsrOworCQlpZiAoKChhY2tfZmluYWwgPT0gMSkg JiYgKHRlbXBfY291bnQgIT0gKHJlYWRfY291bnQgLSAxKSkpIHx8CisJCSAgICAoKGFja19maW5h bCA9PSAwKSAmJiAodGVtcF9jb3VudCAhPSByZWFkX2NvdW50KSkpIHsKKwkJCWRldl9lcnIoZGV2 LCAiQWRkcmVzcyBOQUNLISBBQ0soMHgleClcbiIsIGFjayk7CisJCQlicmVhazsKKwkJfQorCisJ CWZvciAoaSA9IHJlYWRfY291bnQ7IGkgPj0gMTsgaS0tKSB7CisJCQlpbnQgc2hpZnQ7CisJCQlp bnQgb2Zmc2V0OworCisJCQlpZiAoaSA+IDQpIHsKKwkJCQlvZmZzZXQgPSBERENfRERDTUQxOwor CQkJCXNoaWZ0ID0gKGkgLSA1KSAqIDg7CisJCQl9IGVsc2UgeworCQkJCW9mZnNldCA9IEREQ19E RENNRDA7CisJCQkJc2hpZnQgPSAoaSAtIDEpICogODsKKwkJCX0KKworCQkJbXNnLT5idWZbaW5k ZXggKyBpIC0gMV0gPSBzaWZfcmVhZF9tYXNrKGRkYywgb2Zmc2V0LAorCQkJCQkJCQkweGZmIDw8 IHNoaWZ0LAorCQkJCQkJCQlzaGlmdCk7CisJCX0KKworCQlyZW1haW5fY291bnQgLT0gcmVhZF9j b3VudDsKKwkJaW5kZXggKz0gcmVhZF9jb3VudDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3Rh dGljIGludCBtdGtfaGRtaV9kZGNfd3JpdGVfbXNnKHN0cnVjdCBtdGtfaGRtaV9kZGMgKmRkYywg c3RydWN0IGkyY19tc2cgKm1zZykKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkZGMtPmFkYXAu ZGV2LnBhcmVudDsKKwl1MzIgYWNrOworCisJZGRjbV90cmlnZ2VyX21vZGUoZGRjLCBERENNX1NU QVJUKTsKKwlzaWZfd3JpdGVfbWFzayhkZGMsIEREQ19ERENNRDAsIEREQ01fREFUQTAsIDAsIG1z Zy0+YWRkciA8PCAxKTsKKwlzaWZfd3JpdGVfbWFzayhkZGMsIEREQ19ERENNRDAsIEREQ01fREFU QTEsIDgsIG1zZy0+YnVmWzBdKTsKKwlzaWZfd3JpdGVfbWFzayhkZGMsIEREQ19ERENNQ1RMMSwg RERDTV9QR0xFTl9NQVNLLCBERENNX1BHTEVOX09GRlNFVCwKKwkJICAgICAgIDB4MSk7CisJZGRj bV90cmlnZ2VyX21vZGUoZGRjLCBERENNX1dSSVRFX0RBVEEpOworCisJYWNrID0gc2lmX3JlYWRf bWFzayhkZGMsIEREQ19ERENNQ1RMMSwgRERDTV9BQ0tfTUFTSywgRERDTV9BQ0tfT0ZGU0VUKTsK KwlkZXZfZGJnKGRldiwgImFjayA9ICVkXG4iLCBhY2spOworCisJaWYgKGFjayAhPSAweDAzKSB7 CisJCWRldl9lcnIoZGV2LCAiaTJjIGFjayBlcnIhXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQor CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2hkbWlfZGRjX3hmZXIoc3RydWN0IGky Y19hZGFwdGVyICphZGFwdGVyLAorCQkJICAgICBzdHJ1Y3QgaTJjX21zZyAqbXNncywgaW50IG51 bSkKK3sKKwlzdHJ1Y3QgbXRrX2hkbWlfZGRjICpkZGMgPSBhZGFwdGVyLT5hbGdvX2RhdGE7CisJ c3RydWN0IGRldmljZSAqZGV2ID0gYWRhcHRlci0+ZGV2LnBhcmVudDsKKwlpbnQgcmV0OworCWlu dCBpOworCisJaWYgKCFkZGMpIHsKKwkJZGV2X2VycihkZXYsICJpbnZhbGlkIGFyZ3VtZW50c1xu Iik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXNpZl9zZXRfYml0KGRkYywgRERDX0REQ01D VEwwLCBERENNX1NDTF9TVFJFQ0gpOworCXNpZl9zZXRfYml0KGRkYywgRERDX0REQ01DVEwwLCBE RENNX1NNMEVOKTsKKwlzaWZfY2xyX2JpdChkZGMsIEREQ19ERENNQ1RMMCwgRERDTV9PRFJBSU4p OworCisJaWYgKHNpZl9iaXRfaXNfc2V0KGRkYywgRERDX0REQ01DVEwxLCBERENNX1RSSSkpIHsK KwkJZGV2X2VycihkZXYsICJkZGMgbGluZSBpcyBidXN5IVxuIik7CisJCXJldHVybiAtRUJVU1k7 CisJfQorCisJc2lmX3dyaXRlX21hc2soZGRjLCBERENfRERDTUNUTDAsIEREQ01fQ0xLX0RJVl9N QVNLLAorCQkgICAgICAgRERDTV9DTEtfRElWX09GRlNFVCwgU0lGMV9DTE9LKTsKKworCWZvciAo aSA9IDA7IGkgPCBudW07IGkrKykgeworCQlzdHJ1Y3QgaTJjX21zZyAqbXNnID0gJm1zZ3NbaV07 CisKKwkJZGV2X2RiZyhkZXYsICJpMmMgbXNnLCBhZHI6MHgleCwgZmxhZ3M6JWQsIGxlbiA6MHgl eFxuIiwKKwkJCW1zZy0+YWRkciwgbXNnLT5mbGFncywgbXNnLT5sZW4pOworCisJCWlmIChtc2ct PmZsYWdzICYgSTJDX01fUkQpCisJCQlyZXQgPSBtdGtfaGRtaV9kZGNfcmVhZF9tc2coZGRjLCBt c2cpOworCQllbHNlCisJCQlyZXQgPSBtdGtfaGRtaV9kZGNfd3JpdGVfbXNnKGRkYywgbXNnKTsK KwkJaWYgKHJldCA8IDApCisJCQlnb3RvIHhmZXJfZW5kOworCX0KKworCWRkY21fdHJpZ2dlcl9t b2RlKGRkYywgRERDTV9TVE9QKTsKKworCXJldHVybiBpOworCit4ZmVyX2VuZDoKKwlkZGNtX3Ry aWdnZXJfbW9kZShkZGMsIEREQ01fU1RPUCk7CisJZGV2X2VycihkZXYsICJkZGMgZmFpbGVkIVxu Iik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHUzMiBtdGtfaGRtaV9kZGNfZnVuYyhzdHJ1 Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJcmV0dXJuIEkyQ19GVU5DX0kyQyB8IEkyQ19G VU5DX1NNQlVTX0VNVUw7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2FsZ29yaXRobSBt dGtfaGRtaV9kZGNfYWxnb3JpdGhtID0geworCS5tYXN0ZXJfeGZlciA9IG10a19oZG1pX2RkY194 ZmVyLAorCS5mdW5jdGlvbmFsaXR5ID0gbXRrX2hkbWlfZGRjX2Z1bmMsCit9OworCitzdGF0aWMg aW50IG10a19oZG1pX2RkY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorewor CXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0IG10a19oZG1pX2RkYyAq ZGRjOworCXN0cnVjdCByZXNvdXJjZSAqbWVtOworCWludCByZXQ7CisKKwlkZGMgPSBkZXZtX2t6 YWxsb2MoZGV2LCBzaXplb2Yoc3RydWN0IG10a19oZG1pX2RkYyksIEdGUF9LRVJORUwpOworCWlm ICghZGRjKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRkYy0+Y2xrID0gZGV2bV9jbGtfZ2V0KGRl diwgImRkYy1pMmMiKTsKKwlpZiAoSVNfRVJSKGRkYy0+Y2xrKSkgeworCQlkZXZfZXJyKGRldiwg ImdldCBkZGNfY2xrIGZhaWxlZDogJXAgLFxuIiwgZGRjLT5jbGspOworCQlyZXR1cm4gUFRSX0VS UihkZGMtPmNsayk7CisJfQorCisJbWVtID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElP UkVTT1VSQ0VfTUVNLCAwKTsKKwlkZGMtPnJlZ3MgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoJnBk ZXYtPmRldiwgbWVtKTsKKwlpZiAoSVNfRVJSKGRkYy0+cmVncykpCisJCXJldHVybiBQVFJfRVJS KGRkYy0+cmVncyk7CisKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoZGRjLT5jbGspOworCWlm IChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJlbmFibGUgZGRjIGNsayBmYWlsZWQhXG4iKTsKKwkJ cmV0dXJuIHJldDsKKwl9CisKKwlzdHJsY3B5KGRkYy0+YWRhcC5uYW1lLCAibWVkaWF0ZWstaGRt aS1kZGMiLCBzaXplb2YoZGRjLT5hZGFwLm5hbWUpKTsKKwlkZGMtPmFkYXAub3duZXIgPSBUSElT X01PRFVMRTsKKwlkZGMtPmFkYXAuY2xhc3MgPSBJMkNfQ0xBU1NfRERDOworCWRkYy0+YWRhcC5h bGdvID0gJm10a19oZG1pX2RkY19hbGdvcml0aG07CisJZGRjLT5hZGFwLnJldHJpZXMgPSAzOwor CWRkYy0+YWRhcC5kZXYub2Zfbm9kZSA9IGRldi0+b2Zfbm9kZTsKKwlkZGMtPmFkYXAuYWxnb19k YXRhID0gZGRjOworCWRkYy0+YWRhcC5kZXYucGFyZW50ID0gJnBkZXYtPmRldjsKKworCXJldCA9 IGkyY19hZGRfYWRhcHRlcigmZGRjLT5hZGFwKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJy KGRldiwgImZhaWxlZCB0byBhZGQgYnVzIHRvIGkyYyBjb3JlXG4iKTsKKwkJZ290byBlcnJfY2xr X2Rpc2FibGU7CisJfQorCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZGRjKTsKKworCWRl dl9kYmcoZGV2LCAiZGRjLT5hZGFwOiAlcFxuIiwgJmRkYy0+YWRhcCk7CisJZGV2X2RiZyhkZXYs ICJkZGMtPmNsazogJXBcbiIsIGRkYy0+Y2xrKTsKKwlkZXZfZGJnKGRldiwgInBoeXNpY2FsIGFk cjogMHglbGx4LCBlbmQ6IDB4JWxseFxuIiwgbWVtLT5zdGFydCwKKwkJbWVtLT5lbmQpOworCisJ cmV0dXJuIDA7CisKK2Vycl9jbGtfZGlzYWJsZToKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoZGRj LT5jbGspOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2hkbWlfZGRjX3JlbW92 ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBtdGtfaGRtaV9kZGMg KmRkYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJaTJjX2RlbF9hZGFwdGVyKCZk ZGMtPmFkYXApOworCWNsa19kaXNhYmxlX3VucHJlcGFyZShkZGMtPmNsayk7CisKKwlyZXR1cm4g MDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbXRrX2hkbWlfZGRjX21h dGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtaGRtaS1kZGMiLCB9 LAorCXt9LAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdGtfaGRtaV9kZGNfZHJpdmVy ID0geworCS5wcm9iZSA9IG10a19oZG1pX2RkY19wcm9iZSwKKwkucmVtb3ZlID0gbXRrX2hkbWlf ZGRjX3JlbW92ZSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJtZWRpYXRlay1oZG1pLWRkYyIs CisJCS5vZl9tYXRjaF90YWJsZSA9IG10a19oZG1pX2RkY19tYXRjaCwKKwl9LAorfTsKKworTU9E VUxFX0FVVEhPUigiSmllIFFpdSA8amllLnFpdUBtZWRpYXRlay5jb20+Iik7CitNT0RVTEVfREVT Q1JJUFRJT04oIk1lZGlhVGVrIEhETUkgRERDIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQ TCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19oZG1pX3Jl Z3MuaCBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaV9yZWdzLmgKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA5ZmJlMQotLS0gL2Rldi9udWxsCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaV9yZWdzLmgKQEAgLTAsMCArMSwyMzcgQEAK Ky8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQgTWVkaWFUZWsgSW5jLgorICogQXV0aG9yOiBKaWUg UWl1IDxqaWUucWl1QG1lZGlhdGVrLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBz b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5k ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIg YXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAq IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpZm5kZWYgX01US19IRE1JX1JFR1NfSAorI2RlZmlu ZSBfTVRLX0hETUlfUkVHU19ICisKKyNkZWZpbmUgR1JMX0lOVF9NQVNLCQkweDE4CisjZGVmaW5l IEdSTF9JRk1fUE9SVAkJMHgxODgKKyNkZWZpbmUgR1JMX0NIX1NXQVAJCTB4MTk4CisjZGVmaW5l IExSX1NXQVAJCQkJQklUKDApCisjZGVmaW5lIExGRV9DQ19TV0FQCQkJQklUKDEpCisjZGVmaW5l IExTUlNfU1dBUAkJCUJJVCgyKQorI2RlZmluZSBSTFNfUlJTX1NXQVAJCQlCSVQoMykKKyNkZWZp bmUgTFJfU1RBVFVTX1NXQVAJCQlCSVQoNCkKKyNkZWZpbmUgR1JMX0kyU19DX1NUQTAJCTB4MTQw CisjZGVmaW5lIEdSTF9JMlNfQ19TVEExCQkweDE0NAorI2RlZmluZSBHUkxfSTJTX0NfU1RBMgkJ MHgxNDgKKyNkZWZpbmUgR1JMX0kyU19DX1NUQTMJCTB4MTRDCisjZGVmaW5lIEdSTF9JMlNfQ19T VEE0CQkweDE1MAorI2RlZmluZSBHUkxfSTJTX1VWCQkweDE1NAorI2RlZmluZSBJMlNfVVZfVgkJ CUJJVCgwKQorI2RlZmluZSBJMlNfVVZfVQkJCUJJVCgxKQorI2RlZmluZSBJMlNfVVZfQ0hfRU5f TUFTSwkJMHgzYworI2RlZmluZSBJMlNfVVZfQ0hfRU4oeCkJCQlCSVQoKHgpICsgMikKKyNkZWZp bmUgSTJTX1VWX1RNRFNfREVCVUcJCUJJVCg2KQorI2RlZmluZSBJMlNfVVZfTk9STUFMX0lORk9f SU5WCQlCSVQoNykKKyNkZWZpbmUgR1JMX0FDUF9JU1JDX0NUUkwJMHgxNTgKKyNkZWZpbmUgVlNf RU4JCQkJQklUKDApCisjZGVmaW5lIEFDUF9FTgkJCQlCSVQoMSkKKyNkZWZpbmUgSVNSQzFfRU4J CQlCSVQoMikKKyNkZWZpbmUgSVNSQzJfRU4JCQlCSVQoMykKKyNkZWZpbmUgR0FNVVRfRU4JCQlC SVQoNCkKKyNkZWZpbmUgR1JMX0NUU19DVFJMCQkweDE2MAorI2RlZmluZSBDVFNfQ1RSTF9TT0ZU CQkJQklUKDApCisjZGVmaW5lIEdSTF9JTlQJCQkweDE0CisjZGVmaW5lIElOVF9NREkJCQkJQklU KDApCisjZGVmaW5lIElOVF9IRENQCQkJQklUKDEpCisjZGVmaW5lIElOVF9GSUZPX08JCQlCSVQo MikKKyNkZWZpbmUgSU5UX0ZJRk9fVQkJCUJJVCgzKQorI2RlZmluZSBJTlRfSUZNX0VSUgkJCUJJ VCg0KQorI2RlZmluZSBJTlRfSU5GX0RPTkUJCQlCSVQoNSkKKyNkZWZpbmUgSU5UX05DVFNfRE9O RQkJCUJJVCg2KQorI2RlZmluZSBJTlRfQ1RSTF9QS1RfRE9ORQkJQklUKDcpCisjZGVmaW5lIEdS TF9JTlRfTUFTSwkJMHgxOAorI2RlZmluZSBHUkxfQ1RSTAkJMHgxQworI2RlZmluZSBDVFJMX0dF Tl9FTgkJCUJJVCgyKQorI2RlZmluZSBDVFJMX1NQRF9FTgkJCUJJVCgzKQorI2RlZmluZSBDVFJM X01QRUdfRU4JCQlCSVQoNCkKKyNkZWZpbmUgQ1RSTF9BVURJT19FTgkJCUJJVCg1KQorI2RlZmlu ZSBDVFJMX0FWSV9FTgkJCUJJVCg2KQorI2RlZmluZSBDVFJMX0FWTVVURQkJCUJJVCg3KQorI2Rl ZmluZQlHUkxfU1RBVFVTCQkweDIwCisjZGVmaW5lIFNUQVRVU19IVFBMRwkJCUJJVCgwKQorI2Rl ZmluZSBTVEFUVVNfUE9SRAkJCUJJVCgxKQorI2RlZmluZSBHUkxfRElWTgkJMHgxNzAKKyNkZWZp bmUgTkNUU19XUklfQU5ZVElNRQkJQklUKDYpCisjZGVmaW5lIEdSTF9BVURJT19DRkcJCTB4MTdD CisjZGVmaW5lIEFVRElPX1pFUk8JCQlCSVQoMCkKKyNkZWZpbmUgSElHSF9CSVRfUkFURQkJCUJJ VCgxKQorI2RlZmluZSBTQUNEX0RTVAkJCUJJVCgyKQorI2RlZmluZSBEU1RfTk9STUFMX0RPVUJM RQkJQklUKDMpCisjZGVmaW5lIERTRF9JTlYJCQkJQklUKDQpCisjZGVmaW5lIExSX0lOVgkJCQlC SVQoNSkKKyNkZWZpbmUgTFJfTUlYCQkJCUJJVCg2KQorI2RlZmluZSBEU0RfU0VMCQkJCUJJVCg3 KQorI2RlZmluZSBHUkxfTkNUUwkJMHgxODQKKyNkZWZpbmUgR1JMX0NIX1NXMAkJMHgxOEMKKyNk ZWZpbmUgR1JMX0NIX1NXMQkJMHgxOTAKKyNkZWZpbmUgR1JMX0NIX1NXMgkJMHgxOTQKKyNkZWZp bmUgQ0hfU1dJVENIKGZyb20sIHRvKQkJKChmcm9tKSA8PCAoKHRvKSAqIDMpKQorI2RlZmluZSBH UkxfSU5GT0ZSTV9WRVIJCTB4MTlDCisjZGVmaW5lIEdSTF9JTkZPRlJNX1RZUEUJMHgxQTAKKyNk ZWZpbmUgR1JMX0lORk9GUk1fTE5HCQkweDFBNAorI2RlZmluZSBHUkxfTUlYX0NUUkwJCTB4MUI0 CisjZGVmaW5lIE1JWF9DVFJMX1NSQ19FTgkJCUJJVCgwKQorI2RlZmluZSBCWVBBU1NfVk9MVU1F CQkJQklUKDEpCisjZGVmaW5lIE1JWF9DVFJMX0ZMQVQJCQlCSVQoNykKKyNkZWZpbmUgR1JMX0FP VVRfQ0ZHCQkweDFDNAorI2RlZmluZSBBT1VUX0JOVU1fU0VMX01BU0sJCTB4MDMKKyNkZWZpbmUg QU9VVF8yNEJJVAkJCTB4MDAKKyNkZWZpbmUgQU9VVF8yMEJJVAkJCTB4MDIKKyNkZWZpbmUgQU9V VF8xNkJJVAkJCTB4MDMKKyNkZWZpbmUgQU9VVF9GSUZPX0FEQVBfQ1RSTAkJQklUKDYpCisjZGVm aW5lIEFPVVRfQlVSU1RfUFJFQU1CTEVfRU4JCUJJVCg3KQorI2RlZmluZSBISUdIX0JJVF9SQVRF X1BBQ0tFVF9BTElHTgkoQU9VVF9CVVJTVF9QUkVBTUJMRV9FTiB8IFwKKwkJCQkJIEFPVVRfRklG T19BREFQX0NUUkwpCisjZGVmaW5lIEdSTF9TSElGVF9MMQkJMHgxQzAKKyNkZWZpbmUgR1JMX1NI SUZUX1IyCQkweDFCMAorI2RlZmluZSBBVURJT19QQUNLRVRfT0ZGCQlCSVQoNikKKyNkZWZpbmUg R1JMX0NGRzAJCTB4MjQKKyNkZWZpbmUgQ0ZHMF9JMlNfTU9ERV9NQVNLCQkweDMKKyNkZWZpbmUg Q0ZHMF9JMlNfTU9ERV9SVEoJCTB4MQorI2RlZmluZSBDRkcwX0kyU19NT0RFX0xUSgkJMHgwCisj ZGVmaW5lIENGRzBfSTJTX01PREVfSTJTCQkweDIKKyNkZWZpbmUgQ0ZHMF9XX0xFTkdUSF9NQVNL CQkweDMwCisjZGVmaW5lIENGRzBfV19MRU5HVEhfMjRCSVQJCTB4MDAKKyNkZWZpbmUgQ0ZHMF9X X0xFTkdUSF8xNkJJVAkJMHgxMAorI2RlZmluZSBHUkxfQ0ZHMQkJMHgyOAorI2RlZmluZSBDRkcx X0VER19TRUwJCQlCSVQoMCkKKyNkZWZpbmUgQ0ZHMV9TUERJRgkJCUJJVCgxKQorI2RlZmluZSBD RkcxX0RWSQkJCUJJVCgyKQorI2RlZmluZSBDRkcxX0hEQ1BfREVCVUcJCQlCSVQoMykKKyNkZWZp bmUgR1JMX0NGRzIJCTB4MmMKKyNkZWZpbmUgQ0ZHMl9NSExfREVfU0VMCQkJQklUKDMpCisjZGVm aW5lIENGRzJfTUhMX0ZBS0VfREVfU0VMCQlCSVQoNCkKKyNkZWZpbmUgQ0ZHMl9NSExfREFUQV9S RU1BUAkJQklUKDUpCisjZGVmaW5lIENGRzJfTk9USUNFX0VOCQkJQklUKDYpCisjZGVmaW5lIENG RzJfQUNMS19JTlYJCQlCSVQoNykKKyNkZWZpbmUgR1JMX0NGRzMJCTB4MzAKKyNkZWZpbmUgQ0ZH M19BRVNfS0VZX0lOREVYX01BU0sJCTB4M2YKKyNkZWZpbmUgQ0ZHM19DT05UUk9MX1BBQ0tFVF9E RUxBWQlCSVQoNikKKyNkZWZpbmUgQ0ZHM19LU1ZfTE9BRF9TVEFSVAkJQklUKDcpCisjZGVmaW5l IEdSTF9DRkc0CQkweDM0CisjZGVmaW5lIENGRzRfQUVTX0tFWV9MT0FECQlCSVQoNCkKKyNkZWZp bmUgQ0ZHNF9BVl9VTk1VVEVfRU4JCUJJVCg1KQorI2RlZmluZSBDRkc0X0FWX1VOTVVURV9TRVQJ CUJJVCg2KQorI2RlZmluZSBDRkc0X01ITF9NT0RFCQkJQklUKDcpCisjZGVmaW5lIEdSTF9DRkc1 CQkweDM4CisjZGVmaW5lIENGRzVfQ0RfUkFUSU9fTUFTSwkweDhGCisjZGVmaW5lIENGRzVfRlMx MjgJCQkoMHgxIDw8IDQpCisjZGVmaW5lIENGRzVfRlMyNTYJCQkoMHgyIDw8IDQpCisjZGVmaW5l IENGRzVfRlMzODQJCQkoMHgzIDw8IDQpCisjZGVmaW5lIENGRzVfRlM1MTIJCQkoMHg0IDw8IDQp CisjZGVmaW5lIENGRzVfRlM3NjgJCQkoMHg2IDw8IDQpCisjZGVmaW5lIERVTU1ZXzMwNAkJMHgz MDQKKyNkZWZpbmUgQ0hNT19TRUwJCQkoMHgzIDw8IDIpCisjZGVmaW5lIENITTFfU0VMCQkJKDB4 MyA8PCA0KQorI2RlZmluZSBDSE0yX1NFTAkJCSgweDMgPDwgNikKKyNkZWZpbmUgQVVESU9fSTJT X05DVFNfU0VMCQlCSVQoMSkKKyNkZWZpbmUgQVVESU9fSTJTX05DVFNfU0VMXzY0CQkoMSA8PCAx KQorI2RlZmluZSBBVURJT19JMlNfTkNUU19TRUxfMTI4CQkoMCA8PCAxKQorI2RlZmluZSBORVdf R0NQX0NUUkwJCQlCSVQoMCkKKyNkZWZpbmUgTkVXX0dDUF9DVFJMX01FUkdFCQlCSVQoMCkKKyNk ZWZpbmUgR1JMX0xfU1RBVFVTXzAJCTB4MjAwCisjZGVmaW5lIEdSTF9MX1NUQVRVU18xCQkweDIw NAorI2RlZmluZSBHUkxfTF9TVEFUVVNfMgkJMHgyMDgKKyNkZWZpbmUgR1JMX0xfU1RBVFVTXzMJ CTB4MjBjCisjZGVmaW5lIEdSTF9MX1NUQVRVU180CQkweDIxMAorI2RlZmluZSBHUkxfTF9TVEFU VVNfNQkJMHgyMTQKKyNkZWZpbmUgR1JMX0xfU1RBVFVTXzYJCTB4MjE4CisjZGVmaW5lIEdSTF9M X1NUQVRVU183CQkweDIxYworI2RlZmluZSBHUkxfTF9TVEFUVVNfOAkJMHgyMjAKKyNkZWZpbmUg R1JMX0xfU1RBVFVTXzkJCTB4MjI0CisjZGVmaW5lIEdSTF9MX1NUQVRVU18xMAkJMHgyMjgKKyNk ZWZpbmUgR1JMX0xfU1RBVFVTXzExCQkweDIyYworI2RlZmluZSBHUkxfTF9TVEFUVVNfMTIJCTB4 MjMwCisjZGVmaW5lIEdSTF9MX1NUQVRVU18xMwkJMHgyMzQKKyNkZWZpbmUgR1JMX0xfU1RBVFVT XzE0CQkweDIzOAorI2RlZmluZSBHUkxfTF9TVEFUVVNfMTUJCTB4MjNjCisjZGVmaW5lIEdSTF9M X1NUQVRVU18xNgkJMHgyNDAKKyNkZWZpbmUgR1JMX0xfU1RBVFVTXzE3CQkweDI0NAorI2RlZmlu ZSBHUkxfTF9TVEFUVVNfMTgJCTB4MjQ4CisjZGVmaW5lIEdSTF9MX1NUQVRVU18xOQkJMHgyNGMK KyNkZWZpbmUgR1JMX0xfU1RBVFVTXzIwCQkweDI1MAorI2RlZmluZSBHUkxfTF9TVEFUVVNfMjEJ CTB4MjU0CisjZGVmaW5lIEdSTF9MX1NUQVRVU18yMgkJMHgyNTgKKyNkZWZpbmUgR1JMX0xfU1RB VFVTXzIzCQkweDI1YworI2RlZmluZSBHUkxfUl9TVEFUVVNfMAkJMHgyNjAKKyNkZWZpbmUgR1JM X1JfU1RBVFVTXzEJCTB4MjY0CisjZGVmaW5lIEdSTF9SX1NUQVRVU18yCQkweDI2OAorI2RlZmlu ZSBHUkxfUl9TVEFUVVNfMwkJMHgyNmMKKyNkZWZpbmUgR1JMX1JfU1RBVFVTXzQJCTB4MjcwCisj ZGVmaW5lIEdSTF9SX1NUQVRVU181CQkweDI3NAorI2RlZmluZSBHUkxfUl9TVEFUVVNfNgkJMHgy NzgKKyNkZWZpbmUgR1JMX1JfU1RBVFVTXzcJCTB4MjdjCisjZGVmaW5lIEdSTF9SX1NUQVRVU184 CQkweDI4MAorI2RlZmluZSBHUkxfUl9TVEFUVVNfOQkJMHgyODQKKyNkZWZpbmUgR1JMX1JfU1RB VFVTXzEwCQkweDI4OAorI2RlZmluZSBHUkxfUl9TVEFUVVNfMTEJCTB4MjhjCisjZGVmaW5lIEdS TF9SX1NUQVRVU18xMgkJMHgyOTAKKyNkZWZpbmUgR1JMX1JfU1RBVFVTXzEzCQkweDI5NAorI2Rl ZmluZSBHUkxfUl9TVEFUVVNfMTQJCTB4Mjk4CisjZGVmaW5lIEdSTF9SX1NUQVRVU18xNQkJMHgy OWMKKyNkZWZpbmUgR1JMX1JfU1RBVFVTXzE2CQkweDJhMAorI2RlZmluZSBHUkxfUl9TVEFUVVNf MTcJCTB4MmE0CisjZGVmaW5lIEdSTF9SX1NUQVRVU18xOAkJMHgyYTgKKyNkZWZpbmUgR1JMX1Jf U1RBVFVTXzE5CQkweDJhYworI2RlZmluZSBHUkxfUl9TVEFUVVNfMjAJCTB4MmIwCisjZGVmaW5l IEdSTF9SX1NUQVRVU18yMQkJMHgyYjQKKyNkZWZpbmUgR1JMX1JfU1RBVFVTXzIyCQkweDJiOAor I2RlZmluZSBHUkxfUl9TVEFUVVNfMjMJCTB4MmJjCisjZGVmaW5lIEdSTF9BQklTVF9DVFJMMAkJ MHgyRDQKKyNkZWZpbmUgR1JMX0FCSVNUX0NUUkwxCQkweDJEOAorI2RlZmluZSBBQklTVF9FTgkJ CUJJVCg3KQorI2RlZmluZSBBQklTVF9EQVRBX0ZNVAkJCSgweDcgPDwgMCkKKyNkZWZpbmUgVklE RU9fQ0ZHXzAJCTB4MzgwCisjZGVmaW5lIFZJREVPX0NGR18xCQkweDM4NAorI2RlZmluZSBWSURF T19DRkdfMgkJMHgzODgKKyNkZWZpbmUgVklERU9fQ0ZHXzMJCTB4MzhjCisjZGVmaW5lIFZJREVP X0NGR180CQkweDM5MAorI2RlZmluZSBWSURFT19TT1VSQ0VfU0VMCQlCSVQoNykKKyNkZWZpbmUg Tk9STUFMX1BBVEgJCQkoMSA8PCA3KQorI2RlZmluZSBHRU5fUkdCCQkJCSgwIDw8IDcpCisKKyNk ZWZpbmUgSERNSV9TWVNfQ0ZHMUMJCTB4MDAwCisjZGVmaW5lIEhETUlfT04JCQkJQklUKDApCisj ZGVmaW5lIEhETUlfUlNUCQkJQklUKDEpCisjZGVmaW5lIEFOTEdfT04JCQkJQklUKDIpCisjZGVm aW5lIENGRzEwX0RWSQkJCUJJVCgzKQorI2RlZmluZSBIRE1JX1RTVAkJCUJJVCgzKQorI2RlZmlu ZSBTWVNfS0VZTUFTSzEJCQkoMHhmZiA8PCA4KQorI2RlZmluZSBTWVNfS0VZTUFTSzIJCQkoMHhm ZiA8PCAxNikKKyNkZWZpbmUgQVVEX09VVFNZTkNfRU4JCQlCSVQoMjQpCisjZGVmaW5lIEFVRF9P VVRTWU5DX1BSRV9FTgkJQklUKDI1KQorI2RlZmluZSBJMkNNX09OCQkJCUJJVCgyNikKKyNkZWZp bmUgRTJQUk9NX1RZUEVfOEJJVAkJQklUKDI3KQorI2RlZmluZSBNQ01fRTJQUk9NX09OCQkJQklU KDI4KQorI2RlZmluZSBFWFRfRTJQUk9NX09OCQkJQklUKDI5KQorI2RlZmluZSBIVFBMR19QSU5f U0VMX09GRgkJQklUKDMwKQorI2RlZmluZSBBRVNfRUZVU0VfRU5BQkxFCQlCSVQoMzEpCisjZGVm aW5lIEhETUlfU1lTX0NGRzIwCQkweDAwNAorI2RlZmluZSBERUVQX0NPTE9SX01PREVfTUFTSwkJ KDMgPDwgMSkKKyNkZWZpbmUgQ09MT1JfOEJJVF9NT0RFCQkJKDAgPDwgMSkKKyNkZWZpbmUgQ09M T1JfMTBCSVRfTU9ERQkJKDEgPDwgMSkKKyNkZWZpbmUgQ09MT1JfMTJCSVRfTU9ERQkJKDIgPDwg MSkKKyNkZWZpbmUgQ09MT1JfMTZCSVRfTU9ERQkJKDMgPDwgMSkKKyNkZWZpbmUgREVFUF9DT0xP Ul9FTgkJCUJJVCgwKQorI2RlZmluZSBIRE1JX0FVRElPX1RFU1RfU0VMCQlCSVQoOCkKKyNkZWZp bmUgSERNSTJQMF9FTgkJCUJJVCgxMSkKKyNkZWZpbmUgSERNSV9PVVRfRklGT19FTgkJQklUKDE2 KQorI2RlZmluZSBIRE1JX09VVF9GSUZPX0NMS19JTlYJCUJJVCgxNykKKyNkZWZpbmUgTUhMX01P REVfT04JCQlCSVQoMjgpCisjZGVmaW5lIE1ITF9QUF9NT0RFCQkJQklUKDI5KQorI2RlZmluZSBN SExfU1lOQ19BVVRPX0VOCQlCSVQoMzApCisjZGVmaW5lIEhETUlfUENMS19GUkVFX1JVTgkJQklU KDMxKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtf bXQ4MTczX2hkbWlfcGh5LmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX210ODE3M19o ZG1pX3BoeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhMjQ3NTQKLS0t IC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX210ODE3M19oZG1p X3BoeS5jCkBAIC0wLDAgKzEsNTE1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE0IE1lZGlh VGVrIEluYy4KKyAqIEF1dGhvcjogSmllIFFpdSA8amllLnFpdUBtZWRpYXRlay5jb20+CisgKgor ICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNs dWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGstcHJvdmlkZXIuaD4KKyNpbmNs dWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGlu dXgvbWZkL3N5c2Nvbi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxp bnV4L3BoeS9waHkuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNs dWRlIDxsaW51eC90eXBlcy5oPgorCisjZGVmaW5lIEhETUlfQ09OMAkJMHgwMAorI2RlZmluZSBS R19IRE1JVFhfUExMX0VOCQlCSVQoMzEpCisjZGVmaW5lIFJHX0hETUlUWF9QTExfRkJLRElWCQko MHg3ZiA8PCAyNCkKKyNkZWZpbmUgUExMX0ZCS0RJVl9TSElGVAkJMjQKKyNkZWZpbmUgUkdfSERN SVRYX1BMTF9GQktTRUwJCSgweDMgPDwgMjIpCisjZGVmaW5lIFBMTF9GQktTRUxfU0hJRlQJCTIy CisjZGVmaW5lIFJHX0hETUlUWF9QTExfUFJFRElWCQkoMHgzIDw8IDIwKQorI2RlZmluZSBQUkVE SVZfU0hJRlQJCQkyMAorI2RlZmluZSBSR19IRE1JVFhfUExMX1BPU0RJVgkJKDB4MyA8PCAxOCkK KyNkZWZpbmUgUE9TRElWX1NISUZUCQkJMTgKKyNkZWZpbmUgUkdfSERNSVRYX1BMTF9SU1RfRExZ CQkoMHgzIDw8IDE2KQorI2RlZmluZSBSR19IRE1JVFhfUExMX0lSCQkoMHhmIDw8IDEyKQorI2Rl ZmluZSBQTExfSVJfU0hJRlQJCQkxMgorI2RlZmluZSBSR19IRE1JVFhfUExMX0lDCQkoMHhmIDw8 IDgpCisjZGVmaW5lIFBMTF9JQ19TSElGVAkJCTgKKyNkZWZpbmUgUkdfSERNSVRYX1BMTF9CUAkJ KDB4ZiA8PCA0KQorI2RlZmluZSBQTExfQlBfU0hJRlQJCQk0CisjZGVmaW5lIFJHX0hETUlUWF9Q TExfQlIJCSgweDMgPDwgMikKKyNkZWZpbmUgUExMX0JSX1NISUZUCQkJMgorI2RlZmluZSBSR19I RE1JVFhfUExMX0JDCQkoMHgzIDw8IDApCisjZGVmaW5lIFBMTF9CQ19TSElGVAkJCTAKKyNkZWZp bmUgSERNSV9DT04xCQkweDA0CisjZGVmaW5lIFJHX0hETUlUWF9QTExfRElWRU4JCSgweDcgPDwg MjkpCisjZGVmaW5lIFBMTF9ESVZFTl9TSElGVAkJCTI5CisjZGVmaW5lIFJHX0hETUlUWF9QTExf QVVUT0tfRU4JCUJJVCgyOCkKKyNkZWZpbmUgUkdfSERNSVRYX1BMTF9BVVRPS19LRgkJKDB4MyA8 PCAyNikKKyNkZWZpbmUgUkdfSERNSVRYX1BMTF9BVVRPS19LUwkJKDB4MyA8PCAyNCkKKyNkZWZp bmUgUkdfSERNSVRYX1BMTF9BVVRPS19MT0FECUJJVCgyMykKKyNkZWZpbmUgUkdfSERNSVRYX1BM TF9CQU5ECQkoMHgzZiA8PCAxNikKKyNkZWZpbmUgUkdfSERNSVRYX1BMTF9SRUZfU0VMCQlCSVQo MTUpCisjZGVmaW5lIFJHX0hETUlUWF9QTExfQklBU19FTgkJQklUKDE0KQorI2RlZmluZSBSR19I RE1JVFhfUExMX0JJQVNfTFBGX0VOCUJJVCgxMykKKyNkZWZpbmUgUkdfSERNSVRYX1BMTF9UWERJ Vl9FTgkJQklUKDEyKQorI2RlZmluZSBSR19IRE1JVFhfUExMX1RYRElWCQkoMHgzIDw8IDEwKQor I2RlZmluZSBQTExfVFhESVZfU0hJRlQJCQkxMAorI2RlZmluZSBSR19IRE1JVFhfUExMX0xWUk9E X0VOCQlCSVQoOSkKKyNkZWZpbmUgUkdfSERNSVRYX1BMTF9NT05WQ19FTgkJQklUKDgpCisjZGVm aW5lIFJHX0hETUlUWF9QTExfTU9OQ0tfRU4JCUJJVCg3KQorI2RlZmluZSBSR19IRE1JVFhfUExM X01PTlJFRl9FTgkJQklUKDYpCisjZGVmaW5lIFJHX0hETUlUWF9QTExfVFNUX0VOCQlCSVQoNSkK KyNkZWZpbmUgUkdfSERNSVRYX1BMTF9UU1RfQ0tfRU4JCUJJVCg0KQorI2RlZmluZSBSR19IRE1J VFhfUExMX1RTVF9TRUwJCSgweGYgPDwgMCkKKyNkZWZpbmUgSERNSV9DT04yCQkweDA4CisjZGVm aW5lIFJHU19IRE1JVFhfUExMX0FVVE9LX0JBTkQJKDB4N2YgPDwgOCkKKyNkZWZpbmUgUkdTX0hE TUlUWF9QTExfQVVUT0tfRkFJTAlCSVQoMSkKKyNkZWZpbmUgUkdfSERNSVRYX0VOX1RYX0NLTERP CQlCSVQoMCkKKyNkZWZpbmUgSERNSV9DT04zCQkweDBjCisjZGVmaW5lIFJHX0hETUlUWF9TRVJf RU4JCSgweGYgPDwgMjgpCisjZGVmaW5lIFJHX0hETUlUWF9QUkRfRU4JCSgweGYgPDwgMjQpCisj ZGVmaW5lIFJHX0hETUlUWF9QUkRfSU1QX0VOCQkoMHhmIDw8IDIwKQorI2RlZmluZSBSR19IRE1J VFhfRFJWX0VOCQkoMHhmIDw8IDE2KQorI2RlZmluZSBSR19IRE1JVFhfRFJWX0lNUF9FTgkJKDB4 ZiA8PCAxMikKKyNkZWZpbmUgRFJWX0lNUF9FTl9TSElGVAkJMTIKKyNkZWZpbmUgUkdfSERNSVRY X01ITENLX0ZPUkNFCQlCSVQoMTApCisjZGVmaW5lIFJHX0hETUlUWF9NSExDS19QUElYX0VOCQlC SVQoOSkKKyNkZWZpbmUgUkdfSERNSVRYX01ITENLX0VOCQlCSVQoOCkKKyNkZWZpbmUgUkdfSERN SVRYX1NFUl9ESU5fU0VMCQkoMHhmIDw8IDQpCisjZGVmaW5lIFJHX0hETUlUWF9TRVJfNVQxX0JJ U1RfRU4JQklUKDMpCisjZGVmaW5lIFJHX0hETUlUWF9TRVJfQklTVF9UT0cJCUJJVCgyKQorI2Rl ZmluZSBSR19IRE1JVFhfU0VSX0RJTl9UT0cJCUJJVCgxKQorI2RlZmluZSBSR19IRE1JVFhfU0VS X0NMS0RJR19JTlYJQklUKDApCisjZGVmaW5lIEhETUlfQ09ONAkJMHgxMAorI2RlZmluZSBSR19I RE1JVFhfUFJEX0lCSUFTX0NMSwkJKDB4ZiA8PCAyNCkKKyNkZWZpbmUgUkdfSERNSVRYX1BSRF9J QklBU19EMgkJKDB4ZiA8PCAxNikKKyNkZWZpbmUgUkdfSERNSVRYX1BSRF9JQklBU19EMQkJKDB4 ZiA8PCA4KQorI2RlZmluZSBSR19IRE1JVFhfUFJEX0lCSUFTX0QwCQkoMHhmIDw8IDApCisjZGVm aW5lIFBSRF9JQklBU19DTEtfU0hJRlQJCTI0CisjZGVmaW5lIFBSRF9JQklBU19EMl9TSElGVAkJ MTYKKyNkZWZpbmUgUFJEX0lCSUFTX0QxX1NISUZUCQk4CisjZGVmaW5lIFBSRF9JQklBU19EMF9T SElGVAkJMAorI2RlZmluZSBIRE1JX0NPTjUJCTB4MTQKKyNkZWZpbmUgUkdfSERNSVRYX0RSVl9J QklBU19DTEsJCSgweDNmIDw8IDI0KQorI2RlZmluZSBSR19IRE1JVFhfRFJWX0lCSUFTX0QyCQko MHgzZiA8PCAxNikKKyNkZWZpbmUgUkdfSERNSVRYX0RSVl9JQklBU19EMQkJKDB4M2YgPDwgOCkK KyNkZWZpbmUgUkdfSERNSVRYX0RSVl9JQklBU19EMAkJKDB4M2YgPDwgMCkKKyNkZWZpbmUgRFJW X0lCSUFTX0NMS19TSElGVAkJMjQKKyNkZWZpbmUgRFJWX0lCSUFTX0QyX1NISUZUCQkxNgorI2Rl ZmluZSBEUlZfSUJJQVNfRDFfU0hJRlQJCTgKKyNkZWZpbmUgRFJWX0lCSUFTX0QwX1NISUZUCQkw CisjZGVmaW5lIEhETUlfQ09ONgkJMHgxOAorI2RlZmluZSBSR19IRE1JVFhfRFJWX0lNUF9DTEsJ CSgweDNmIDw8IDI0KQorI2RlZmluZSBSR19IRE1JVFhfRFJWX0lNUF9EMgkJKDB4M2YgPDwgMTYp CisjZGVmaW5lIFJHX0hETUlUWF9EUlZfSU1QX0QxCQkoMHgzZiA8PCA4KQorI2RlZmluZSBSR19I RE1JVFhfRFJWX0lNUF9EMAkJKDB4M2YgPDwgMCkKKyNkZWZpbmUgRFJWX0lNUF9DTEtfU0hJRlQJ CTI0CisjZGVmaW5lIERSVl9JTVBfRDJfU0hJRlQJCTE2CisjZGVmaW5lIERSVl9JTVBfRDFfU0hJ RlQJCTgKKyNkZWZpbmUgRFJWX0lNUF9EMF9TSElGVAkJMAorI2RlZmluZSBIRE1JX0NPTjcJCTB4 MWMKKyNkZWZpbmUgUkdfSERNSVRYX01ITENLX0RSVl9JQklBUwkoMHgxZiA8PCAyNykKKyNkZWZp bmUgUkdfSERNSVRYX1NFUl9ESU4JCSgweDNmZiA8PCAxNikKKyNkZWZpbmUgUkdfSERNSVRYX0NI TERDX1RTVAkJKDB4ZiA8PCAxMikKKyNkZWZpbmUgUkdfSERNSVRYX0NITENLX1RTVAkJKDB4ZiA8 PCA4KQorI2RlZmluZSBSR19IRE1JVFhfUkVTRVJWRQkJKDB4ZmYgPDwgMCkKKyNkZWZpbmUgSERN SV9DT044CQkweDIwCisjZGVmaW5lIFJHU19IRE1JVFhfMlQxX0xFVgkJKDB4ZiA8PCAxNikKKyNk ZWZpbmUgUkdTX0hETUlUWF8yVDFfRURHCQkoMHhmIDw8IDEyKQorI2RlZmluZSBSR1NfSERNSVRY XzVUMV9MRVYJCSgweGYgPDwgOCkKKyNkZWZpbmUgUkdTX0hETUlUWF81VDFfRURHCQkoMHhmIDw8 IDQpCisjZGVmaW5lIFJHU19IRE1JVFhfUExVR19UU1QJCUJJVCgwKQorCitzdHJ1Y3QgbXRrX2hk bWlfcGh5IHsKKwl2b2lkIF9faW9tZW0gKnJlZ3M7CisJc3RydWN0IGRldmljZSAqZGV2OworCXN0 cnVjdCBjbGsgKnBsbDsKKwlzdHJ1Y3QgY2xrX2h3IHBsbF9odzsKKwl1bnNpZ25lZCBsb25nIHBs bF9yYXRlOworCXU4IGRydl9pbXBfY2xrOworCXU4IGRydl9pbXBfZDI7CisJdTggZHJ2X2ltcF9k MTsKKwl1OCBkcnZfaW1wX2QwOworCXUzMiBpYmlhczsKKwl1MzIgaWJpYXNfdXA7Cit9OworCitz dGF0aWMgY29uc3QgdTggUFJFRElWWzNdWzRdID0geworCXsweDAsIDB4MCwgMHgwLCAweDB9LAkv KiAyN01oeiAqLworCXsweDEsIDB4MSwgMHgxLCAweDF9LAkvKiA3NE1oeiAqLworCXsweDEsIDB4 MSwgMHgxLCAweDF9CS8qIDE0OE1oeiAqLworfTsKKworc3RhdGljIGNvbnN0IHU4IFRYRElWWzNd WzRdID0geworCXsweDMsIDB4MywgMHgzLCAweDJ9LAkvKiAyN01oeiAqLworCXsweDIsIDB4MSwg MHgxLCAweDF9LAkvKiA3NE1oeiAqLworCXsweDEsIDB4MCwgMHgwLCAweDB9CS8qIDE0OE1oeiAq LworfTsKKworc3RhdGljIGNvbnN0IHU4IEZCS1NFTFszXVs0XSA9IHsKKwl7MHgxLCAweDEsIDB4 MSwgMHgxfSwJLyogMjdNaHogKi8KKwl7MHgxLCAweDAsIDB4MSwgMHgxfSwJLyogNzRNaHogKi8K Kwl7MHgxLCAweDAsIDB4MSwgMHgxfQkvKiAxNDhNaHogKi8KK307CisKK3N0YXRpYyBjb25zdCB1 OCBGQktESVZbM11bNF0gPSB7CisJezE5LCAyNCwgMjksIDE5fSwJLyogMjdNaHogKi8KKwl7MTks IDI0LCAxNCwgMTl9LAkvKiA3NE1oeiAqLworCXsxOSwgMjQsIDE0LCAxOX0JLyogMTQ4TWh6ICov Cit9OworCitzdGF0aWMgY29uc3QgdTggRElWRU5bM11bNF0gPSB7CisJezB4MiwgMHgxLCAweDEs IDB4Mn0sCS8qIDI3TWh6ICovCisJezB4MiwgMHgyLCAweDIsIDB4Mn0sCS8qIDc0TWh6ICovCisJ ezB4MiwgMHgyLCAweDIsIDB4Mn0JLyogMTQ4TWh6ICovCit9OworCitzdGF0aWMgY29uc3QgdTgg SFRQTExCUFszXVs0XSA9IHsKKwl7MHhjLCAweGMsIDB4OCwgMHhjfSwJLyogMjdNaHogKi8KKwl7 MHhjLCAweGYsIDB4ZiwgMHhjfSwJLyogNzRNaHogKi8KKwl7MHhjLCAweGYsIDB4ZiwgMHhjfQkv KiAxNDhNaHogKi8KK307CisKK3N0YXRpYyBjb25zdCB1OCBIVFBMTEJDWzNdWzRdID0geworCXsw eDIsIDB4MywgMHgzLCAweDJ9LAkvKiAyN01oeiAqLworCXsweDIsIDB4MywgMHgzLCAweDJ9LAkv KiA3NE1oeiAqLworCXsweDIsIDB4MywgMHgzLCAweDJ9CS8qIDE0OE1oeiAqLworfTsKKworc3Rh dGljIGNvbnN0IHU4IEhUUExMQlJbM11bNF0gPSB7CisJezB4MSwgMHgxLCAweDAsIDB4MX0sCS8q IDI3TWh6ICovCisJezB4MSwgMHgyLCAweDIsIDB4MX0sCS8qIDc0TWh6ICovCisJezB4MSwgMHgy LCAweDIsIDB4MX0JLyogMTQ4TWh6ICovCit9OworCitzdGF0aWMgdm9pZCBtdGtfaGRtaV9waHlf Y2xlYXJfYml0cyhzdHJ1Y3QgbXRrX2hkbWlfcGh5ICpoZG1pX3BoeSwgdTMyIG9mZnNldCwKKwkJ CQkgICAgdTMyIGJpdHMpCit7CisJdm9pZCBfX2lvbWVtICpyZWcgPSBoZG1pX3BoeS0+cmVncyAr IG9mZnNldDsKKwl1MzIgdG1wOworCisJdG1wID0gcmVhZGwocmVnKTsKKwl0bXAgJj0gfmJpdHM7 CisJd3JpdGVsKHRtcCwgcmVnKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2hkbWlfcGh5X3NldF9i aXRzKHN0cnVjdCBtdGtfaGRtaV9waHkgKmhkbWlfcGh5LCB1MzIgb2Zmc2V0LAorCQkJCSAgdTMy IGJpdHMpCit7CisJdm9pZCBfX2lvbWVtICpyZWcgPSBoZG1pX3BoeS0+cmVncyArIG9mZnNldDsK Kwl1MzIgdG1wOworCisJdG1wID0gcmVhZGwocmVnKTsKKwl0bXAgfD0gYml0czsKKwl3cml0ZWwo dG1wLCByZWcpOworfQorCitzdGF0aWMgdm9pZCBtdGtfaGRtaV9waHlfbWFzayhzdHJ1Y3QgbXRr X2hkbWlfcGh5ICpoZG1pX3BoeSwgdTMyIG9mZnNldCwKKwkJCSAgICAgIHUzMiB2YWwsIHUzMiBt YXNrKQoreworCXZvaWQgX19pb21lbSAqcmVnID0gaGRtaV9waHktPnJlZ3MgKyBvZmZzZXQ7CisJ dTMyIHRtcDsKKworCXRtcCA9IHJlYWRsKHJlZyk7CisJdG1wID0gKHRtcCAmIH5tYXNrKSB8ICh2 YWwgJiBtYXNrKTsKKwl3cml0ZWwodG1wLCByZWcpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVj dCBtdGtfaGRtaV9waHkgKnRvX210a19oZG1pX3BoeShzdHJ1Y3QgY2xrX2h3ICpodykKK3sKKwly ZXR1cm4gY29udGFpbmVyX29mKGh3LCBzdHJ1Y3QgbXRrX2hkbWlfcGh5LCBwbGxfaHcpOworfQor CitzdGF0aWMgaW50IG10a19oZG1pX3BsbF9wcmVwYXJlKHN0cnVjdCBjbGtfaHcgKmh3KQorewor CXN0cnVjdCBtdGtfaGRtaV9waHkgKmhkbWlfcGh5ID0gdG9fbXRrX2hkbWlfcGh5KGh3KTsKKwor CWRldl9kYmcoaGRtaV9waHktPmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwltdGtfaGRtaV9w aHlfc2V0X2JpdHMoaGRtaV9waHksIEhETUlfQ09OMSwgUkdfSERNSVRYX1BMTF9BVVRPS19FTik7 CisJbXRrX2hkbWlfcGh5X3NldF9iaXRzKGhkbWlfcGh5LCBIRE1JX0NPTjAsIFJHX0hETUlUWF9Q TExfUE9TRElWKTsKKwltdGtfaGRtaV9waHlfY2xlYXJfYml0cyhoZG1pX3BoeSwgSERNSV9DT04z LCBSR19IRE1JVFhfTUhMQ0tfRU4pOworCW10a19oZG1pX3BoeV9zZXRfYml0cyhoZG1pX3BoeSwg SERNSV9DT04xLCBSR19IRE1JVFhfUExMX0JJQVNfRU4pOworCXVzbGVlcF9yYW5nZSgxMDAsIDE1 MCk7CisJbXRrX2hkbWlfcGh5X3NldF9iaXRzKGhkbWlfcGh5LCBIRE1JX0NPTjAsIFJHX0hETUlU WF9QTExfRU4pOworCXVzbGVlcF9yYW5nZSgxMDAsIDE1MCk7CisJbXRrX2hkbWlfcGh5X3NldF9i aXRzKGhkbWlfcGh5LCBIRE1JX0NPTjEsIFJHX0hETUlUWF9QTExfQklBU19MUEZfRU4pOworCW10 a19oZG1pX3BoeV9zZXRfYml0cyhoZG1pX3BoeSwgSERNSV9DT04xLCBSR19IRE1JVFhfUExMX1RY RElWX0VOKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBtdGtfaGRtaV9wbGxfdW5w cmVwYXJlKHN0cnVjdCBjbGtfaHcgKmh3KQoreworCXN0cnVjdCBtdGtfaGRtaV9waHkgKmhkbWlf cGh5ID0gdG9fbXRrX2hkbWlfcGh5KGh3KTsKKworCWRldl9kYmcoaGRtaV9waHktPmRldiwgIiVz XG4iLCBfX2Z1bmNfXyk7CisKKwltdGtfaGRtaV9waHlfY2xlYXJfYml0cyhoZG1pX3BoeSwgSERN SV9DT04xLCBSR19IRE1JVFhfUExMX1RYRElWX0VOKTsKKwltdGtfaGRtaV9waHlfY2xlYXJfYml0 cyhoZG1pX3BoeSwgSERNSV9DT04xLCBSR19IRE1JVFhfUExMX0JJQVNfTFBGX0VOKTsKKwl1c2xl ZXBfcmFuZ2UoMTAwLCAxNTApOworCW10a19oZG1pX3BoeV9jbGVhcl9iaXRzKGhkbWlfcGh5LCBI RE1JX0NPTjAsIFJHX0hETUlUWF9QTExfRU4pOworCXVzbGVlcF9yYW5nZSgxMDAsIDE1MCk7CisJ bXRrX2hkbWlfcGh5X2NsZWFyX2JpdHMoaGRtaV9waHksIEhETUlfQ09OMSwgUkdfSERNSVRYX1BM TF9CSUFTX0VOKTsKKwltdGtfaGRtaV9waHlfY2xlYXJfYml0cyhoZG1pX3BoeSwgSERNSV9DT04w LCBSR19IRE1JVFhfUExMX1BPU0RJVik7CisJbXRrX2hkbWlfcGh5X2NsZWFyX2JpdHMoaGRtaV9w aHksIEhETUlfQ09OMSwgUkdfSERNSVRYX1BMTF9BVVRPS19FTik7CisJdXNsZWVwX3JhbmdlKDEw MCwgMTUwKTsKK30KKworc3RhdGljIGludCBtdGtfaGRtaV9wbGxfc2V0X3JhdGUoc3RydWN0IGNs a19odyAqaHcsIHVuc2lnbmVkIGxvbmcgcmF0ZSwKKwkJCQkgdW5zaWduZWQgbG9uZyBwYXJlbnRf cmF0ZSkKK3sKKwlzdHJ1Y3QgbXRrX2hkbWlfcGh5ICpoZG1pX3BoeSA9IHRvX210a19oZG1pX3Bo eShodyk7CisJdW5zaWduZWQgaW50IHByZV9kaXY7CisJdW5zaWduZWQgaW50IGRpdjsKKworCWRl dl9kYmcoaGRtaV9waHktPmRldiwgIiVzOiAlbHUgSHosIHBhcmVudDogJWx1IEh6XG4iLCBfX2Z1 bmNfXywKKwkJcmF0ZSwgcGFyZW50X3JhdGUpOworCisJaWYgKHJhdGUgPD0gMjcwMDAwMDApIHsK KwkJcHJlX2RpdiA9IDA7CisJCWRpdiA9IDM7CisJfSBlbHNlIGlmIChyYXRlIDw9IDc0MjUwMDAw KSB7CisJCXByZV9kaXYgPSAxOworCQlkaXYgPSAyOworCX0gZWxzZSB7CisJCXByZV9kaXYgPSAx OworCQlkaXYgPSAxOworCX0KKworCW10a19oZG1pX3BoeV9tYXNrKGhkbWlfcGh5LCBIRE1JX0NP TjAsCisJCQkgIChwcmVfZGl2IDw8IFBSRURJVl9TSElGVCksIFJHX0hETUlUWF9QTExfUFJFRElW KTsKKwltdGtfaGRtaV9waHlfc2V0X2JpdHMoaGRtaV9waHksIEhETUlfQ09OMCwgUkdfSERNSVRY X1BMTF9QT1NESVYpOworCW10a19oZG1pX3BoeV9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjAsCisJ CQkgICgweDEgPDwgUExMX0lDX1NISUZUKSB8ICgweDEgPDwgUExMX0lSX1NISUZUKSwKKwkJCSAg UkdfSERNSVRYX1BMTF9JQyB8IFJHX0hETUlUWF9QTExfSVIpOworCW10a19oZG1pX3BoeV9tYXNr KGhkbWlfcGh5LCBIRE1JX0NPTjEsCisJCQkgIChkaXYgPDwgUExMX1RYRElWX1NISUZUKSwgUkdf SERNSVRYX1BMTF9UWERJVik7CisJbXRrX2hkbWlfcGh5X21hc2soaGRtaV9waHksIEhETUlfQ09O MCwKKwkJCSAgKDB4MSA8PCBQTExfRkJLU0VMX1NISUZUKSB8ICgxOSA8PCBQTExfRkJLRElWX1NI SUZUKSwKKwkJCSAgUkdfSERNSVRYX1BMTF9GQktTRUwgfCBSR19IRE1JVFhfUExMX0ZCS0RJVik7 CisJbXRrX2hkbWlfcGh5X21hc2soaGRtaV9waHksIEhETUlfQ09OMSwKKwkJCSAgKDB4MiA8PCBQ TExfRElWRU5fU0hJRlQpLCBSR19IRE1JVFhfUExMX0RJVkVOKTsKKwltdGtfaGRtaV9waHlfbWFz ayhoZG1pX3BoeSwgSERNSV9DT04wLAorCQkJICAoMHhjIDw8IFBMTF9CUF9TSElGVCkgfCAoMHgy IDw8IFBMTF9CQ19TSElGVCkgfAorCQkJICAoMHgxIDw8IFBMTF9CUl9TSElGVCksCisJCQkgIFJH X0hETUlUWF9QTExfQlAgfCBSR19IRE1JVFhfUExMX0JDIHwKKwkJCSAgUkdfSERNSVRYX1BMTF9C Uik7CisJbXRrX2hkbWlfcGh5X2NsZWFyX2JpdHMoaGRtaV9waHksIEhETUlfQ09OMywgUkdfSERN SVRYX1BSRF9JTVBfRU4pOworCW10a19oZG1pX3BoeV9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjQs CisJCQkgICgweDMgPDwgUFJEX0lCSUFTX0NMS19TSElGVCkgfAorCQkJICAoMHgzIDw8IFBSRF9J QklBU19EMl9TSElGVCkgfAorCQkJICAoMHgzIDw8IFBSRF9JQklBU19EMV9TSElGVCkgfAorCQkJ ICAoMHgzIDw8IFBSRF9JQklBU19EMF9TSElGVCksCisJCQkgIFJHX0hETUlUWF9QUkRfSUJJQVNf Q0xLIHwKKwkJCSAgUkdfSERNSVRYX1BSRF9JQklBU19EMiB8CisJCQkgIFJHX0hETUlUWF9QUkRf SUJJQVNfRDEgfAorCQkJICBSR19IRE1JVFhfUFJEX0lCSUFTX0QwKTsKKwltdGtfaGRtaV9waHlf bWFzayhoZG1pX3BoeSwgSERNSV9DT04zLAorCQkJICAoMHgwIDw8IERSVl9JTVBfRU5fU0hJRlQp LCBSR19IRE1JVFhfRFJWX0lNUF9FTik7CisJbXRrX2hkbWlfcGh5X21hc2soaGRtaV9waHksIEhE TUlfQ09ONiwKKwkJCSAgKGhkbWlfcGh5LT5kcnZfaW1wX2NsayA8PCBEUlZfSU1QX0NMS19TSElG VCkgfAorCQkJICAoaGRtaV9waHktPmRydl9pbXBfZDIgPDwgRFJWX0lNUF9EMl9TSElGVCkgfAor CQkJICAoaGRtaV9waHktPmRydl9pbXBfZDEgPDwgRFJWX0lNUF9EMV9TSElGVCkgfAorCQkJICAo aGRtaV9waHktPmRydl9pbXBfZDAgPDwgRFJWX0lNUF9EMF9TSElGVCksCisJCQkgIFJHX0hETUlU WF9EUlZfSU1QX0NMSyB8IFJHX0hETUlUWF9EUlZfSU1QX0QyIHwKKwkJCSAgUkdfSERNSVRYX0RS Vl9JTVBfRDEgfCBSR19IRE1JVFhfRFJWX0lNUF9EMCk7CisJbXRrX2hkbWlfcGh5X21hc2soaGRt aV9waHksIEhETUlfQ09ONSwKKwkJCSAgKGhkbWlfcGh5LT5pYmlhcyA8PCBEUlZfSUJJQVNfQ0xL X1NISUZUKSB8CisJCQkgIChoZG1pX3BoeS0+aWJpYXMgPDwgRFJWX0lCSUFTX0QyX1NISUZUKSB8 CisJCQkgIChoZG1pX3BoeS0+aWJpYXMgPDwgRFJWX0lCSUFTX0QxX1NISUZUKSB8CisJCQkgICho ZG1pX3BoeS0+aWJpYXMgPDwgRFJWX0lCSUFTX0QwX1NISUZUKSwKKwkJCSAgUkdfSERNSVRYX0RS Vl9JQklBU19DTEsgfCBSR19IRE1JVFhfRFJWX0lCSUFTX0QyIHwKKwkJCSAgUkdfSERNSVRYX0RS Vl9JQklBU19EMSB8IFJHX0hETUlUWF9EUlZfSUJJQVNfRDApOworCXJldHVybiAwOworfQorCitz dGF0aWMgbG9uZyBtdGtfaGRtaV9wbGxfcm91bmRfcmF0ZShzdHJ1Y3QgY2xrX2h3ICpodywgdW5z aWduZWQgbG9uZyByYXRlLAorCQkJCSAgICB1bnNpZ25lZCBsb25nICpwYXJlbnRfcmF0ZSkKK3sK KwlzdHJ1Y3QgbXRrX2hkbWlfcGh5ICpoZG1pX3BoeSA9IHRvX210a19oZG1pX3BoeShodyk7CisK KwloZG1pX3BoeS0+cGxsX3JhdGUgPSByYXRlOworCWlmIChyYXRlIDw9IDc0MjUwMDAwKQorCQkq cGFyZW50X3JhdGUgPSByYXRlOworCWVsc2UKKwkJKnBhcmVudF9yYXRlID0gcmF0ZSAvIDI7CisK KwlyZXR1cm4gcmF0ZTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgbXRrX2hkbWlfcGxsX3Jl Y2FsY19yYXRlKHN0cnVjdCBjbGtfaHcgKmh3LAorCQkJCQkgICAgICB1bnNpZ25lZCBsb25nIHBh cmVudF9yYXRlKQoreworCXN0cnVjdCBtdGtfaGRtaV9waHkgKmhkbWlfcGh5ID0gdG9fbXRrX2hk bWlfcGh5KGh3KTsKKworCXJldHVybiBoZG1pX3BoeS0+cGxsX3JhdGU7Cit9CisKK3N0YXRpYyBj b25zdCBzdHJ1Y3QgY2xrX29wcyBtdGtfaGRtaV9wbGxfb3BzID0geworCS5wcmVwYXJlID0gbXRr X2hkbWlfcGxsX3ByZXBhcmUsCisJLnVucHJlcGFyZSA9IG10a19oZG1pX3BsbF91bnByZXBhcmUs CisJLnNldF9yYXRlID0gbXRrX2hkbWlfcGxsX3NldF9yYXRlLAorCS5yb3VuZF9yYXRlID0gbXRr X2hkbWlfcGxsX3JvdW5kX3JhdGUsCisJLnJlY2FsY19yYXRlID0gbXRrX2hkbWlfcGxsX3JlY2Fs Y19yYXRlLAorfTsKKworc3RhdGljIHZvaWQgbXRrX2hkbWlfcGh5X2VuYWJsZV90bWRzKHN0cnVj dCBtdGtfaGRtaV9waHkgKmhkbWlfcGh5KQoreworCW10a19oZG1pX3BoeV9zZXRfYml0cyhoZG1p X3BoeSwgSERNSV9DT04zLAorCQkJICAgICAgUkdfSERNSVRYX1NFUl9FTiB8IFJHX0hETUlUWF9Q UkRfRU4gfAorCQkJICAgICAgUkdfSERNSVRYX0RSVl9FTik7CisJdXNsZWVwX3JhbmdlKDEwMCwg MTUwKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2hkbWlfcGh5X2Rpc2FibGVfdG1kcyhzdHJ1Y3Qg bXRrX2hkbWlfcGh5ICpoZG1pX3BoeSkKK3sKKwltdGtfaGRtaV9waHlfY2xlYXJfYml0cyhoZG1p X3BoeSwgSERNSV9DT04zLAorCQkJCVJHX0hETUlUWF9EUlZfRU4gfCBSR19IRE1JVFhfUFJEX0VO IHwKKwkJCQlSR19IRE1JVFhfU0VSX0VOKTsKK30KKworc3RhdGljIGludCBtdGtfaGRtaV9waHlf cG93ZXJfb24oc3RydWN0IHBoeSAqcGh5KQoreworCXN0cnVjdCBtdGtfaGRtaV9waHkgKmhkbWlf cGh5ID0gcGh5X2dldF9kcnZkYXRhKHBoeSk7CisJaW50IHJldDsKKworCXJldCA9IGNsa19wcmVw YXJlX2VuYWJsZShoZG1pX3BoeS0+cGxsKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsK KworCW10a19oZG1pX3BoeV9lbmFibGVfdG1kcyhoZG1pX3BoeSk7CisKKwlyZXR1cm4gMDsKK30K Kworc3RhdGljIGludCBtdGtfaGRtaV9waHlfcG93ZXJfb2ZmKHN0cnVjdCBwaHkgKnBoeSkKK3sK KwlzdHJ1Y3QgbXRrX2hkbWlfcGh5ICpoZG1pX3BoeSA9IHBoeV9nZXRfZHJ2ZGF0YShwaHkpOwor CisJbXRrX2hkbWlfcGh5X2Rpc2FibGVfdG1kcyhoZG1pX3BoeSk7CisJY2xrX2Rpc2FibGVfdW5w cmVwYXJlKGhkbWlfcGh5LT5wbGwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBz dHJ1Y3QgcGh5X29wcyBtdGtfaGRtaV9waHlfb3BzID0geworCS5wb3dlcl9vbiA9IG10a19oZG1p X3BoeV9wb3dlcl9vbiwKKwkucG93ZXJfb2ZmID0gbXRrX2hkbWlfcGh5X3Bvd2VyX29mZiwKKwku b3duZXIgPSBUSElTX01PRFVMRSwKK307CisKK3N0YXRpYyBpbnQgbXRrX2hkbWlfcGh5X3Byb2Jl KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0g JnBkZXYtPmRldjsKKwlzdHJ1Y3QgbXRrX2hkbWlfcGh5ICpoZG1pX3BoeTsKKwlzdHJ1Y3QgcmVz b3VyY2UgKm1lbTsKKwlzdHJ1Y3QgY2xrICpyZWZfY2xrOworCWNvbnN0IGNoYXIgKnJlZl9jbGtf bmFtZTsKKwlzdHJ1Y3QgY2xrX2luaXRfZGF0YSBjbGtfaW5pdCA9IHsKKwkJLm9wcyA9ICZtdGtf aGRtaV9wbGxfb3BzLAorCQkubnVtX3BhcmVudHMgPSAxLAorCQkucGFyZW50X25hbWVzID0gKGNv bnN0IGNoYXIgKiBjb25zdCAqKSZyZWZfY2xrX25hbWUsCisJCS5mbGFncyA9IENMS19TRVRfUkFU RV9QQVJFTlQgfCBDTEtfU0VUX1JBVEVfR0FURSwKKwl9OworCXN0cnVjdCBwaHkgKnBoeTsKKwlz dHJ1Y3QgcGh5X3Byb3ZpZGVyICpwaHlfcHJvdmlkZXI7CisJaW50IHJldDsKKworCWhkbWlfcGh5 ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpoZG1pX3BoeSksIEdGUF9LRVJORUwpOworCWlm ICghaGRtaV9waHkpCisJCXJldHVybiAtRU5PTUVNOworCisJbWVtID0gcGxhdGZvcm1fZ2V0X3Jl c291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwloZG1pX3BoeS0+cmVncyA9IGRldm1f aW9yZW1hcF9yZXNvdXJjZShkZXYsIG1lbSk7CisJaWYgKElTX0VSUihoZG1pX3BoeS0+cmVncykp IHsKKwkJcmV0ID0gUFRSX0VSUihoZG1pX3BoeS0+cmVncyk7CisJCWRldl9lcnIoZGV2LCAiRmFp bGVkIHRvIGdldCBtZW1vcnkgcmVzb3VyY2U6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0Owor CX0KKworCXJlZl9jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAicGxsX3JlZiIpOworCWlmIChJU19F UlIocmVmX2NsaykpIHsKKwkJcmV0ID0gUFRSX0VSUihyZWZfY2xrKTsKKwkJZGV2X2VycigmcGRl di0+ZGV2LCAiRmFpbGVkIHRvIGdldCBQTEwgcmVmZXJlbmNlIGNsb2NrOiAlZFxuIiwKKwkJCXJl dCk7CisJCXJldHVybiByZXQ7CisJfQorCXJlZl9jbGtfbmFtZSA9IF9fY2xrX2dldF9uYW1lKHJl Zl9jbGspOworCisJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF9zdHJpbmcoZGV2LT5vZl9ub2RlLCAi Y2xvY2stb3V0cHV0LW5hbWVzIiwKKwkJCQkgICAgICAmY2xrX2luaXQubmFtZSk7CisJaWYgKHJl dCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gcmVhZCBjbG9jay1vdXRwdXQtbmFt ZXM6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWhkbWlfcGh5LT5wbGxfaHcu aW5pdCA9ICZjbGtfaW5pdDsKKwloZG1pX3BoeS0+cGxsID0gZGV2bV9jbGtfcmVnaXN0ZXIoZGV2 LCAmaGRtaV9waHktPnBsbF9odyk7CisJaWYgKElTX0VSUihoZG1pX3BoeS0+cGxsKSkgeworCQly ZXQgPSBQVFJfRVJSKGhkbWlfcGh5LT5wbGwpOworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBy ZWdpc3RlciBQTEw6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IG9m X3Byb3BlcnR5X3JlYWRfdTMyKGRldi0+b2Zfbm9kZSwgIm1lZGlhdGVrLGliaWFzIiwKKwkJCQkg ICAmaGRtaV9waHktPmliaWFzKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZwZGV2LT5k ZXYsICJGYWlsZWQgdG8gZ2V0IGliaWFzOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9 CisKKwlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihkZXYtPm9mX25vZGUsICJtZWRpYXRlayxp Ymlhc191cCIsCisJCQkJICAgJmhkbWlfcGh5LT5pYmlhc191cCk7CisJaWYgKHJldCA8IDApIHsK KwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIGdldCBpYmlhcyB1cDogJWRcbiIsIHJl dCk7CisJCXJldHVybiByZXQ7CisJfQorCisJZGV2X2luZm8oZGV2LCAiVXNpbmcgZGVmYXVsdCBU WCBEUlYgaW1wZWRhbmNlOiA0LjJrLzM2XG4iKTsKKwloZG1pX3BoeS0+ZHJ2X2ltcF9jbGsgPSAw eDMwOworCWhkbWlfcGh5LT5kcnZfaW1wX2QyID0gMHgzMDsKKwloZG1pX3BoeS0+ZHJ2X2ltcF9k MSA9IDB4MzA7CisJaGRtaV9waHktPmRydl9pbXBfZDAgPSAweDMwOworCisJcGh5ID0gZGV2bV9w aHlfY3JlYXRlKGRldiwgTlVMTCwgJm10a19oZG1pX3BoeV9vcHMpOworCWlmIChJU19FUlIocGh5 KSkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBjcmVhdGUgSERNSSBQSFlcbiIpOworCQly ZXR1cm4gUFRSX0VSUihwaHkpOworCX0KKwlwaHlfc2V0X2RydmRhdGEocGh5LCBoZG1pX3BoeSk7 CisKKwlwaHlfcHJvdmlkZXIgPSBkZXZtX29mX3BoeV9wcm92aWRlcl9yZWdpc3RlcihkZXYsIG9m X3BoeV9zaW1wbGVfeGxhdGUpOworCWlmIChJU19FUlIocGh5X3Byb3ZpZGVyKSkKKwkJcmV0dXJu IFBUUl9FUlIocGh5X3Byb3ZpZGVyKTsKKworCWhkbWlfcGh5LT5kZXYgPSBkZXY7CisJcmV0dXJu IG9mX2Nsa19hZGRfcHJvdmlkZXIoZGV2LT5vZl9ub2RlLCBvZl9jbGtfc3JjX3NpbXBsZV9nZXQs CisJCQkJICAgaGRtaV9waHktPnBsbCk7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2hkbWlfcGh5X3Jl bW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXJldHVybiAwOworfQorCitz dGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtdGtfaGRtaV9waHlfbWF0Y2hbXSA9IHsK Kwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1oZG1pLXBoeSIsIH0sCisJe30sCit9 OworCitzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10a19oZG1pX3BoeV9kcml2ZXIgPSB7CisJLnBy b2JlID0gbXRrX2hkbWlfcGh5X3Byb2JlLAorCS5yZW1vdmUgPSBtdGtfaGRtaV9waHlfcmVtb3Zl LAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gIm1lZGlhdGVrLWhkbWktcGh5IiwKKwkJLm9mX21h dGNoX3RhYmxlID0gbXRrX2hkbWlfcGh5X21hdGNoLAorCX0sCit9OworCitNT0RVTEVfQVVUSE9S KCJKaWUgUWl1IDxqaWUucWl1QG1lZGlhdGVrLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigi TWVkaWFUZWsgTVQ4MTczIEhETUkgUEhZIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2 MiIpOwotLSAKMi44LjAucmMzCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVz a3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9k cmktZGV2ZWwK