From mboxrd@z Thu Jan 1 00:00:00 1970 From: Philipp Zabel Subject: [PATCH v10 06/13] drm/mediatek: Add HDMI support Date: Wed, 3 Feb 2016 20:25:55 +0100 Message-ID: <1454527562-28154-7-git-send-email-p.zabel@pengutronix.de> References: <1454527562-28154-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: <1454527562-28154-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 , 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 , Stephen Boyd , Tomasz Figa , Kumar Gala List-Id: linux-mediatek@lists.infradead.org RnJvbTogSmllIFFpdSA8amllLnFpdUBtZWRpYXRlay5jb20+CgpUaGlzIHBhdGNoIGFkZHMgZHJp dmVycyBmb3IgdGhlIEhETUkgYnJpZGdlIGNvbm5lY3RlZCB0byB0aGUgRFBJMApkaXNwbGF5IHN1 YnN5c3RlbSBmdW5jdGlvbiBibG9jaywgZm9yIHRoZSBIRE1JIEREQyBibG9jaywgYW5kIGZvcgp0 aGUgSERNSSBQSFkgdG8gc3VwcG9ydCBIRE1JIG91dHB1dC4KClNpZ25lZC1vZmYtYnk6IEppZSBR aXUgPGppZS5xaXVAbWVkaWF0ZWsuY29tPgpTaWduZWQtb2ZmLWJ5OiBQaGlsaXBwIFphYmVsIDxw LnphYmVsQHBlbmd1dHJvbml4LmRlPgotLS0KQ2hhbmdlcyBzaW5jZSB2OToKIC0gZml4IG5vIHNp Z25hbCBhZnRlciBzdXNwZW5kL3Jlc3VtZSBpc3N1ZQogLSBmaXggbm8gYXVkaW8gb3V0cHV0IGZy b20gZXh0ZXJuYWwgZGlzcGxheSBpc3N1ZQogLSByZW1vdmUgZmx0X25fNXYgZ3BpbyBhbmQgaXJx Ci0tLQogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL0tjb25maWcgICAgICAgICAgICAgICB8ICAg NyArCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvTWFrZWZpbGUgICAgICAgICAgICAgIHwgICA5 ICsKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfY2VjLmMgICAgICAgICAgICAgfCAyNDUg KysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19jZWMuaCAgICAgICAgICAg ICB8ICAyNSArCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuYyAgICAgICAg IHwgICAxICsKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2hkbWlfZHJ2LmMgICAg fCA1NzkgKysrKysrKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210 a19oZG1pLmMgICAgICAgICAgICB8IDQ3OSArKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1 L2RybS9tZWRpYXRlay9tdGtfaGRtaS5oICAgICAgICAgICAgfCAyMjEgKysrKysrKysrCiBkcml2 ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2hkbWlfZGRjX2Rydi5jICAgIHwgMzYyICsrKysrKysr KysrKysrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2hkbWlfaHcuYyAgICAgICAgIHwg NjUyICsrKysrKysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9t dGtfaGRtaV9ody5oICAgICAgICAgfCAgNzMgKysrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv bXRrX2hkbWlfcmVncy5oICAgICAgIHwgMjIxICsrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL21l ZGlhdGVrL210a19tdDgxNzNfaGRtaV9waHkuYyB8IDUwNSArKysrKysrKysrKysrKysrKysrCiAx MyBmaWxlcyBjaGFuZ2VkLCAzMzc5IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2NlYy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy9ncHUvZHJtL21lZGlhdGVrL210a19jZWMuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2hkbWlfZHJ2LmMKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2hkbWkuYwogY3JlYXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19oZG1pX2RkY19kcnYuYwogY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaV9ody5jCiBjcmVhdGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19oZG1pX2h3LmgKIGNyZWF0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2hkbWlfcmVncy5oCiBjcmVh dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19tdDgxNzNfaGRtaV9w aHkuYwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9LY29uZmlnIGIvZHJp dmVycy9ncHUvZHJtL21lZGlhdGVrL0tjb25maWcKaW5kZXggYjdlMDQwNC4uODI5YWI2NiAxMDA2 NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL0tjb25maWcKKysrIGIvZHJpdmVycy9n cHUvZHJtL21lZGlhdGVrL0tjb25maWcKQEAgLTEzLDMgKzEzLDEwIEBAIGNvbmZpZyBEUk1fTUVE SUFURUsKIAkgIFRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgbWVkaWF0ZWstZHJtCiAJICBUaGlz IGRyaXZlciBwcm92aWRlcyBrZXJuZWwgbW9kZSBzZXR0aW5nIGFuZAogCSAgYnVmZmVyIG1hbmFn ZW1lbnQgdG8gdXNlcnNwYWNlLgorCitjb25maWcgRFJNX01FRElBVEVLX0hETUkKKwl0cmlzdGF0 ZSAiRFJNIEhETUkgU3VwcG9ydCBmb3IgTWVkaWF0ZWsgU29DcyIKKwlkZXBlbmRzIG9uIERSTV9N RURJQVRFSworCXNlbGVjdCBHRU5FUklDX1BIWQorCWhlbHAKKwkgIERSTS9LTVMgSERNSSBkcml2 ZXIgZm9yIE1lZGlhdGVrIFNvQ3MKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRl ay9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9NYWtlZmlsZQppbmRleCA1ZmNm NThlLi42ZDUzYmVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvTWFrZWZp bGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL01ha2VmaWxlCkBAIC0xMiwzICsxMiwx MiBAQCBtZWRpYXRlay1kcm0teSA6PSBtdGtfZGlzcF9vdmwubyBcCiAJCSAgbXRrX2RwaS5vCiAK IG9iai0kKENPTkZJR19EUk1fTUVESUFURUspICs9IG1lZGlhdGVrLWRybS5vCisKK21lZGlhdGVr LWRybS1oZG1pLW9ianMgOj0gbXRrX2NlYy5vIFwKKwkJCSAgbXRrX2RybV9oZG1pX2Rydi5vIFwK KwkJCSAgbXRrX2hkbWkubyBcCisJCQkgIG10a19oZG1pX2RkY19kcnYubyBcCisJCQkgIG10a19o ZG1pX2h3Lm8gXAorCQkJICBtdGtfbXQ4MTczX2hkbWlfcGh5Lm8KKworb2JqLSQoQ09ORklHX0RS TV9NRURJQVRFS19IRE1JKSArPSBtZWRpYXRlay1kcm0taGRtaS5vCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2NlYy5jIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVr L210a19jZWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmEzNjQ3Ci0t LSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19jZWMuYwpAQCAt MCwwICsxLDI0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBNZWRpYVRlayBJbmMuCisg KiBBdXRob3I6IEppZSBRaXUgPGppZS5xaXVAbWVkaWF0ZWsuY29tPgorICoKKyAqIFRoaXMgcHJv Z3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k aWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2Ns ay5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNp bmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZp Y2UuaD4KKworI2luY2x1ZGUgIm10a19jZWMuaCIKKworI2RlZmluZSBUUl9DT05GSUcJCTB4MDAK KyNkZWZpbmUgQ0xFQVJfQ0VDX0lSUQkJCUJJVCgxNSkKKworI2RlZmluZSBDRUNfQ0tHRU4JCTB4 MDQKKyNkZWZpbmUgQ0VDXzMyS19QRE4JCQlCSVQoMTkpCisjZGVmaW5lIFBETgkJCQlCSVQoMTYp CisKKyNkZWZpbmUgUlhfRVZFTlQJCTB4NTQKKyNkZWZpbmUgSERNSV9QT1JECQkJQklUKDI1KQor I2RlZmluZSBIRE1JX0hUUExHCQkJQklUKDI0KQorI2RlZmluZSBIRE1JX1BPUkRfSU5UX0VOCQlC SVQoOSkKKyNkZWZpbmUgSERNSV9IVFBMR19JTlRfRU4JCUJJVCg4KQorCisjZGVmaW5lIFJYX0dF Tl9XRAkJMHg1OAorI2RlZmluZSBIRE1JX1BPUkRfSU5UXzMyS19TVEFUVVMJQklUKDI2KQorI2Rl ZmluZSBSWF9SSVNDX0lOVF8zMktfU1RBVFVTCQlCSVQoMjUpCisjZGVmaW5lIEhETUlfSFRQTEdf SU5UXzMyS19TVEFUVVMJQklUKDI0KQorI2RlZmluZSBIRE1JX1BPUkRfSU5UXzMyS19DTFIJCUJJ VCgxOCkKKyNkZWZpbmUgUlhfSU5UXzMyS19DTFIJCQlCSVQoMTcpCisjZGVmaW5lIEhETUlfSFRQ TEdfSU5UXzMyS19DTFIJCUJJVCgxNikKKyNkZWZpbmUgSERNSV9QT1JEX0lOVF8zMktfU1RBX01B U0sJQklUKDEwKQorI2RlZmluZSBSWF9SSVNDX0lOVF8zMktfU1RBX01BU0sJQklUKDkpCisjZGVm aW5lIEhETUlfSFRQTEdfSU5UXzMyS19TVEFfTUFTSwlCSVQoOCkKKyNkZWZpbmUgSERNSV9QT1JE X0lOVF8zMktfRU4JCUJJVCgyKQorI2RlZmluZSBSWF9JTlRfMzJLX0VOCQkJQklUKDEpCisjZGVm aW5lIEhETUlfSFRQTEdfSU5UXzMyS19FTgkJQklUKDApCisKKyNkZWZpbmUgTk9STUFMX0lOVF9D VFJMCQkweDVDCisjZGVmaW5lIEhETUlfSFRQTEdfSU5UX1NUQQkJQklUKDApCisjZGVmaW5lIEhE TUlfUE9SRF9JTlRfU1RBCQlCSVQoMSkKKyNkZWZpbmUgSERNSV9IVFBMR19JTlRfQ0xSCQlCSVQo MTYpCisjZGVmaW5lIEhETUlfUE9SRF9JTlRfQ0xSCQlCSVQoMTcpCisjZGVmaW5lIEhETUlfRlVM TF9JTlRfQ0xSCQlCSVQoMjApCisKK3N0cnVjdCBtdGtfY2VjIHsKKwl2b2lkIF9faW9tZW0gKnJl Z3M7CisJc3RydWN0IGNsayAqY2xrOworCWludCBpcnE7CisJYm9vbCBocGQ7CisJdm9pZCAoKmhw ZF9ldmVudCkoYm9vbCBocGQsIHN0cnVjdCBkZXZpY2UgKmRldik7CisJc3RydWN0IGRldmljZSAq aGRtaV9kZXY7Cit9OworCitzdGF0aWMgdm9pZCBtdGtfY2VjX21hc2soc3RydWN0IG10a19jZWMg KmNlYywgdW5zaWduZWQgaW50IG9mZnNldCwKKwkJCSB1bnNpZ25lZCBpbnQgdmFsLCB1bnNpZ25l ZCBpbnQgbWFzaykKK3sKKwl1MzIgdG1wID0gcmVhZGwoY2VjLT5yZWdzICsgb2Zmc2V0KSAmIH5t YXNrOworCisJdG1wIHw9IHZhbCAmIG1hc2s7CisJd3JpdGVsKHZhbCwgY2VjLT5yZWdzICsgb2Zm c2V0KTsKK30KKwordm9pZCBtdGtfY2VjX3NldF9ocGRfZXZlbnQoc3RydWN0IGRldmljZSAqZGV2 LAorCQkJICAgdm9pZCAoKmhwZF9ldmVudCkoYm9vbCBocGQsIHN0cnVjdCBkZXZpY2UgKmRldiks CisJCQkgICBzdHJ1Y3QgZGV2aWNlICpoZG1pX2RldikKK3sKKwlzdHJ1Y3QgbXRrX2NlYyAqY2Vj ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwljZWMtPmhkbWlfZGV2ID0gaGRtaV9kZXY7CisJ Y2VjLT5ocGRfZXZlbnQgPSBocGRfZXZlbnQ7Cit9CisKK2Jvb2wgbXRrX2NlY19ocGRfaGlnaChz dHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG10a19jZWMgKmNlYyA9IGRldl9nZXRfZHJ2 ZGF0YShkZXYpOworCXVuc2lnbmVkIGludCBzdGF0dXM7CisKKwlzdGF0dXMgPSByZWFkbChjZWMt PnJlZ3MgKyBSWF9FVkVOVCk7CisKKwlyZXR1cm4gKHN0YXR1cyAmIChIRE1JX1BPUkQgfCBIRE1J X0hUUExHKSkgPT0gKEhETUlfUE9SRCB8IEhETUlfSFRQTEcpOworfQorCitpbnQgbXRrX2NlY19p cnEoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBtdGtfY2VjICpjZWMgPSBkZXZfZ2V0 X2RydmRhdGEoZGV2KTsKKworCXJldHVybiBjZWMtPmlycTsKK30KKworc3RhdGljIHZvaWQgbXRr X2NlY19odHBsZ19pcnFfZW5hYmxlKHN0cnVjdCBtdGtfY2VjICpjZWMpCit7CisJbXRrX2NlY19t YXNrKGNlYywgQ0VDX0NLR0VOLCAwLCBQRE4pOworCW10a19jZWNfbWFzayhjZWMsIENFQ19DS0dF TiwgQ0VDXzMyS19QRE4sIENFQ18zMktfUEROKTsKKwltdGtfY2VjX21hc2soY2VjLCBSWF9HRU5f V0QsIEhETUlfUE9SRF9JTlRfMzJLX0NMUiwKKwkJICAgICBIRE1JX1BPUkRfSU5UXzMyS19DTFIp OworCW10a19jZWNfbWFzayhjZWMsIFJYX0dFTl9XRCwgUlhfSU5UXzMyS19DTFIsIFJYX0lOVF8z MktfQ0xSKTsKKwltdGtfY2VjX21hc2soY2VjLCBSWF9HRU5fV0QsIEhETUlfSFRQTEdfSU5UXzMy S19DTFIsCisJCSAgICAgSERNSV9IVFBMR19JTlRfMzJLX0NMUik7CisJbXRrX2NlY19tYXNrKGNl YywgUlhfR0VOX1dELCAwLCBIRE1JX1BPUkRfSU5UXzMyS19DTFIpOworCW10a19jZWNfbWFzayhj ZWMsIFJYX0dFTl9XRCwgMCwgUlhfSU5UXzMyS19DTFIpOworCW10a19jZWNfbWFzayhjZWMsIFJY X0dFTl9XRCwgMCwgSERNSV9IVFBMR19JTlRfMzJLX0NMUik7CisJbXRrX2NlY19tYXNrKGNlYywg UlhfR0VOX1dELCAwLCBIRE1JX1BPUkRfSU5UXzMyS19FTik7CisJbXRrX2NlY19tYXNrKGNlYywg UlhfR0VOX1dELCAwLCBSWF9JTlRfMzJLX0VOKTsKKwltdGtfY2VjX21hc2soY2VjLCBSWF9HRU5f V0QsIDAsIEhETUlfSFRQTEdfSU5UXzMyS19FTik7CisKKwltdGtfY2VjX21hc2soY2VjLCBSWF9F VkVOVCwgSERNSV9QT1JEX0lOVF9FTiwgSERNSV9QT1JEX0lOVF9FTik7CisJbXRrX2NlY19tYXNr KGNlYywgUlhfRVZFTlQsIEhETUlfSFRQTEdfSU5UX0VOLCBIRE1JX0hUUExHX0lOVF9FTik7Cit9 CisKK3N0YXRpYyB2b2lkIG10a19jZWNfaHRwbGdfaXJxX2Rpc2FibGUoc3RydWN0IG10a19jZWMg KmNlYykKK3sKKwltdGtfY2VjX21hc2soY2VjLCBSWF9FVkVOVCwgMCwgSERNSV9QT1JEX0lOVF9F Tik7CisJbXRrX2NlY19tYXNrKGNlYywgUlhfRVZFTlQsIDAsIEhETUlfSFRQTEdfSU5UX0VOKTsK K30KKworc3RhdGljIHZvaWQgbXRrX2NlY19jbGVhcl9odHBsZ19pcnEoc3RydWN0IG10a19jZWMg KmNlYykKK3sKKwltdGtfY2VjX21hc2soY2VjLCBUUl9DT05GSUcsIENMRUFSX0NFQ19JUlEsIENM RUFSX0NFQ19JUlEpOworCW10a19jZWNfbWFzayhjZWMsIE5PUk1BTF9JTlRfQ1RSTCwgSERNSV9I VFBMR19JTlRfQ0xSLAorCQkgICAgIEhETUlfSFRQTEdfSU5UX0NMUik7CisJbXRrX2NlY19tYXNr KGNlYywgTk9STUFMX0lOVF9DVFJMLCBIRE1JX1BPUkRfSU5UX0NMUiwKKwkJICAgICBIRE1JX1BP UkRfSU5UX0NMUik7CisJbXRrX2NlY19tYXNrKGNlYywgTk9STUFMX0lOVF9DVFJMLCBIRE1JX0ZV TExfSU5UX0NMUiwKKwkJICAgICBIRE1JX0ZVTExfSU5UX0NMUik7CisJbXRrX2NlY19tYXNrKGNl YywgUlhfR0VOX1dELCBIRE1JX1BPUkRfSU5UXzMyS19DTFIsCisJCSAgICAgSERNSV9QT1JEX0lO VF8zMktfQ0xSKTsKKwltdGtfY2VjX21hc2soY2VjLCBSWF9HRU5fV0QsIFJYX0lOVF8zMktfQ0xS LCBSWF9JTlRfMzJLX0NMUik7CisJbXRrX2NlY19tYXNrKGNlYywgUlhfR0VOX1dELCBIRE1JX0hU UExHX0lOVF8zMktfQ0xSLAorCQkgICAgIEhETUlfSFRQTEdfSU5UXzMyS19DTFIpOworCXVkZWxh eSg1KTsKKwltdGtfY2VjX21hc2soY2VjLCBOT1JNQUxfSU5UX0NUUkwsIDAsIEhETUlfSFRQTEdf SU5UX0NMUik7CisJbXRrX2NlY19tYXNrKGNlYywgTk9STUFMX0lOVF9DVFJMLCAwLCBIRE1JX1BP UkRfSU5UX0NMUik7CisJbXRrX2NlY19tYXNrKGNlYywgVFJfQ09ORklHLCAwLCBDTEVBUl9DRUNf SVJRKTsKKwltdGtfY2VjX21hc2soY2VjLCBOT1JNQUxfSU5UX0NUUkwsIDAsIEhETUlfRlVMTF9J TlRfQ0xSKTsKKwltdGtfY2VjX21hc2soY2VjLCBSWF9HRU5fV0QsIDAsIEhETUlfUE9SRF9JTlRf MzJLX0NMUik7CisJbXRrX2NlY19tYXNrKGNlYywgUlhfR0VOX1dELCAwLCBSWF9JTlRfMzJLX0NM Uik7CisJbXRrX2NlY19tYXNrKGNlYywgUlhfR0VOX1dELCAwLCBIRE1JX0hUUExHX0lOVF8zMktf Q0xSKTsKK30KKworc3RhdGljIGlycXJldHVybl90IG10a19jZWNfaHRwbGdfaXNyX3RocmVhZChp bnQgaXJxLCB2b2lkICphcmcpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gYXJnOworCXN0cnVj dCBtdGtfY2VjICpjZWMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlib29sIGhwZDsKKworCW10 a19jZWNfY2xlYXJfaHRwbGdfaXJxKGNlYyk7CisJaHBkID0gbXRrX2NlY19ocGRfaGlnaChkZXYp OworCisJaWYgKGNlYy0+aHBkICE9IGhwZCkgeworCQlkZXZfaW5mbyhkZXYsICJob3RwbHVnIGV2 ZW50ISxjdXIgaHBkID0gJWQsIGhwZCA9ICVkXG4iLAorCQkJIGNlYy0+aHBkLCBocGQpOworCQlj ZWMtPmhwZCA9IGhwZDsKKwkJaWYgKGNlYy0+aHBkX2V2ZW50KQorCQkJY2VjLT5ocGRfZXZlbnQo aHBkLCBjZWMtPmhkbWlfZGV2KTsKKwl9CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0 aWMgaW50IG10a19jZWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlz dHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCXN0cnVjdCBtdGtfY2VjICpjZWM7CisJ c3RydWN0IHJlc291cmNlICpyZXM7CisJaW50IHJldDsKKworCWNlYyA9IGRldm1fa3phbGxvYyhk ZXYsIHNpemVvZigqY2VjKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjZWMpCisJCXJldHVybiAtRU5P TUVNOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgY2VjKTsKKworCXJlcyA9IHBsYXRm b3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJY2VjLT5yZWdzID0g ZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwgcmVzKTsKKwlpZiAoSVNfRVJSKGNlYy0+cmVncykp IHsKKwkJcmV0ID0gUFRSX0VSUihjZWMtPnJlZ3MpOworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0 byBpb3JlbWFwIGNlYzogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJY2VjLT5j bGsgPSBkZXZtX2Nsa19nZXQoZGV2LCBOVUxMKTsKKwlpZiAoSVNfRVJSKGNlYy0+Y2xrKSkgewor CQlyZXQgPSBQVFJfRVJSKGNlYy0+Y2xrKTsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZ2V0 IGNlYyBjbG9jazogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJY2VjLT5pcnEg PSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlmIChjZWMtPmlycSA8IDApIHsKKwkJZGV2 X2VycihkZXYsICJGYWlsZWQgdG8gZ2V0IGNlYyBpcnE6ICVkXG4iLCBjZWMtPmlycSk7CisJCXJl dHVybiBjZWMtPmlycTsKKwl9CisKKwlyZXQgPSBkZXZtX3JlcXVlc3RfdGhyZWFkZWRfaXJxKGRl diwgY2VjLT5pcnEsIE5VTEwsCisJCQkJCW10a19jZWNfaHRwbGdfaXNyX3RocmVhZCwKKwkJCQkJ SVJRRl9TSEFSRUQgfCBJUlFGX1RSSUdHRVJfTE9XIHwKKwkJCQkJSVJRRl9PTkVTSE9ULCAiaGRt aSBocGQiLCBkZXYpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gcmVn aXN0ZXIgY2VjIGlycTogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0g Y2xrX3ByZXBhcmVfZW5hYmxlKGNlYy0+Y2xrKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2 LCAiRmFpbGVkIHRvIGVuYWJsZSBjZWMgY2xvY2s6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0 OworCX0KKworCW10a19jZWNfaHRwbGdfaXJxX2VuYWJsZShjZWMpOworCisJcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyBpbnQgbXRrX2NlY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRl dikKK3sKKwlzdHJ1Y3QgbXRrX2NlYyAqY2VjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7 CisKKwltdGtfY2VjX2h0cGxnX2lycV9kaXNhYmxlKGNlYyk7CisJY2xrX2Rpc2FibGVfdW5wcmVw YXJlKGNlYy0+Y2xrKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9k ZXZpY2VfaWQgbXRrX2NlY19vZl9pZHNbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVr LG10ODE3My1jZWMiLCB9LAorCXt9Cit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10a19j ZWNfZHJpdmVyID0geworCS5wcm9iZSA9IG10a19jZWNfcHJvYmUsCisJLnJlbW92ZSA9IG10a19j ZWNfcmVtb3ZlLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gIm1lZGlhdGVrLWNlYyIsCisJCS5v Zl9tYXRjaF90YWJsZSA9IG10a19jZWNfb2ZfaWRzLAorCX0sCit9OwpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL21lZGlhdGVrL210a19jZWMuaCBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRl ay9tdGtfY2VjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU2ZThmZAot LS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfY2VjLmgKQEAg LTAsMCArMSwyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBNZWRpYVRlayBJbmMuCisg KiBBdXRob3I6IEppZSBRaXUgPGppZS5xaXVAbWVkaWF0ZWsuY29tPgorICoKKyAqIFRoaXMgcHJv Z3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k aWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2lmbmRlZiBfTVRLX0NFQ19I CisjZGVmaW5lIF9NVEtfQ0VDX0gKKworc3RydWN0IGRldmljZTsKKwordm9pZCBtdGtfY2VjX3Nl dF9ocGRfZXZlbnQoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgdm9pZCAoKmhvdHBsdWdfZXZl bnQpKGJvb2wgaHBkLCBzdHJ1Y3QgZGV2aWNlICpkZXYpLAorCQkJICAgc3RydWN0IGRldmljZSAq aGRtaV9kZXYpOworYm9vbCBtdGtfY2VjX2hwZF9oaWdoKHN0cnVjdCBkZXZpY2UgKmRldik7Citp bnQgbXRrX2NlY19pcnEoc3RydWN0IGRldmljZSAqZGV2KTsKKworI2VuZGlmIC8qIF9NVEtfQ0VD X0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5j IGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmMKaW5kZXggYTA4MTIxYi4u MzZmNDQzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2 LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmMKQEAgLTIzLDYg KzIzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgogI2luY2x1ZGUgPGxpbnV4 L3BtX3J1bnRpbWUuaD4KIAorI2luY2x1ZGUgIm10a19jZWMuaCIKICNpbmNsdWRlICJtdGtfZHJt X2NydGMuaCIKICNpbmNsdWRlICJtdGtfZHJtX2RkcC5oIgogI2luY2x1ZGUgIm10a19kcm1fZGRw X2NvbXAuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2hk bWlfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9oZG1pX2Rydi5jCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmNjYxZTAKLS0tIC9kZXYvbnVsbAor KysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9oZG1pX2Rydi5jCkBAIC0wLDAg KzEsNTc5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE0IE1lZGlhVGVrIEluYy4KKyAqIEF1 dGhvcjogSmllIFFpdSA8amllLnFpdUBtZWRpYXRlay5jb20+CisgKgorICogVGhpcyBwcm9ncmFt IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkK KyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug dmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv bi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8ZHJtL2RybVAuaD4K KyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2Ny dGMuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2NydGNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2Ry bV9lZGlkLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+ CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3N5c2Nvbi5o PgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4K KyNpbmNsdWRlIDxsaW51eC9vZl9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZ3JhcGguaD4K KyNpbmNsdWRlIDxsaW51eC9waHkvcGh5Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2 aWNlLmg+CisjaW5jbHVkZSAibXRrX2NlYy5oIgorI2luY2x1ZGUgIm10a19oZG1pLmgiCisjaW5j bHVkZSAibXRrX2hkbWlfaHcuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBtdGtfaGRt aV9jbGtfbmFtZXNbTVRLX0hETUlfQ0xLX0NPVU5UXSA9IHsKKwlbTVRLX0hETUlfQ0xLX0hETUlf UElYRUxdID0gInBpeGVsIiwKKwlbTVRLX0hETUlfQ0xLX0hETUlfUExMXSA9ICJwbGwiLAorCVtN VEtfSERNSV9DTEtfQVVEX0JDTEtdID0gImJjbGsiLAorCVtNVEtfSERNSV9DTEtfQVVEX1NQRElG XSA9ICJzcGRpZiIsCit9OworCitzdGF0aWMgY29uc3QgZW51bSBtdGtfaGRtaV9jbGtfaWQgbXRr X2hkbWlfZW5hYmxlX2Nsb2Nrc1tdID0geworCU1US19IRE1JX0NMS19BVURfQkNMSywKKwlNVEtf SERNSV9DTEtfQVVEX1NQRElGLAorfTsKKworc3RhdGljIGludCBtdGtfaGRtaV9nZXRfYWxsX2Ns ayhzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksCisJCQkJc3RydWN0IGRldmljZV9ub2RlICpucCkKK3sK KwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG10a19oZG1pX2Nsa19uYW1l cyk7IGkrKykgeworCQloZG1pLT5jbGtbaV0gPSBvZl9jbGtfZ2V0X2J5X25hbWUobnAsCisJCQkJ CQkgIG10a19oZG1pX2Nsa19uYW1lc1tpXSk7CisJCWlmIChJU19FUlIoaGRtaS0+Y2xrW2ldKSkK KwkJCXJldHVybiBQVFJfRVJSKGhkbWktPmNsa1tpXSk7CisJfQorCXJldHVybiAwOworfQorCitz dGF0aWMgaW50IG10a19oZG1pX2Nsa19lbmFibGVfYXVkaW8oc3RydWN0IG10a19oZG1pICpoZG1p KQoreworCWludCByZXQ7CisKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoaGRtaS0+Y2xrW01U S19IRE1JX0NMS19BVURfQkNMS10pOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQg PSBjbGtfcHJlcGFyZV9lbmFibGUoaGRtaS0+Y2xrW01US19IRE1JX0NMS19BVURfU1BESUZdKTsK KwlpZiAocmV0KQorCQlnb3RvIGVycjsKKworCXJldHVybiAwOworZXJyOgorCWNsa19kaXNhYmxl X3VucHJlcGFyZShoZG1pLT5jbGtbTVRLX0hETUlfQ0xLX0FVRF9CQ0xLXSk7CisJcmV0dXJuIHJl dDsKK30KKworc3RhdGljIHZvaWQgbXRrX2hkbWlfY2xrX2Rpc2FibGVfYXVkaW8oc3RydWN0IG10 a19oZG1pICpoZG1pKQoreworCWNsa19kaXNhYmxlX3VucHJlcGFyZShoZG1pLT5jbGtbTVRLX0hE TUlfQ0xLX0FVRF9CQ0xLXSk7CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGhkbWktPmNsa1tNVEtf SERNSV9DTEtfQVVEX1NQRElGXSk7Cit9CisKK3N0YXRpYyBlbnVtIGRybV9jb25uZWN0b3Jfc3Rh dHVzIGhkbWlfY29ubl9kZXRlY3Qoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm4sCisJCQkJCQkg IGJvb2wgZm9yY2UpCit7CisJc3RydWN0IG10a19oZG1pICpoZG1pID0gaGRtaV9jdHhfZnJvbV9j b25uKGNvbm4pOworCisJcmV0dXJuIG10a19oZG1pX2hwZF9oaWdoKGhkbWkpID8KKwkgICAgICAg Y29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQgOiBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3Rl ZDsKK30KKworc3RhdGljIHZvaWQgaGRtaV9jb25uX2Rlc3Ryb3koc3RydWN0IGRybV9jb25uZWN0 b3IgKmNvbm4pCit7CisJc3RydWN0IG10a19oZG1pICpoZG1pID0gaGRtaV9jdHhfZnJvbV9jb25u KGNvbm4pOworCisJbXRrX2NlY19zZXRfaHBkX2V2ZW50KGhkbWktPmNlY19kZXYsIE5VTEwsIE5V TEwpOworCisJZHJtX2Nvbm5lY3Rvcl91bnJlZ2lzdGVyKGNvbm4pOworCWRybV9jb25uZWN0b3Jf Y2xlYW51cChjb25uKTsKK30KKworc3RhdGljIGludCBoZG1pX2Nvbm5fc2V0X3Byb3BlcnR5KHN0 cnVjdCBkcm1fY29ubmVjdG9yICpjb25uLAorCQkJCSAgc3RydWN0IGRybV9wcm9wZXJ0eSAqcHJv cGVydHksIHVpbnQ2NF90IHZhbCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdGtf aGRtaV9jb25uX2dldF9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubikKK3sKKwlzdHJ1 Y3QgbXRrX2hkbWkgKmhkbWkgPSBoZG1pX2N0eF9mcm9tX2Nvbm4oY29ubik7CisJc3RydWN0IGVk aWQgKmVkaWQ7CisJaW50IHJldDsKKworCWlmICghaGRtaS0+ZGRjX2FkcHQpCisJCXJldHVybiAt RU5PREVWOworCisJZWRpZCA9IGRybV9nZXRfZWRpZChjb25uLCBoZG1pLT5kZGNfYWRwdCk7CisJ aWYgKCFlZGlkKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWhkbWktPmR2aV9tb2RlID0gIWRybV9k ZXRlY3RfbW9uaXRvcl9hdWRpbyhlZGlkKTsKKworCWRybV9tb2RlX2Nvbm5lY3Rvcl91cGRhdGVf ZWRpZF9wcm9wZXJ0eShjb25uLCBlZGlkKTsKKworCXJldCA9IGRybV9hZGRfZWRpZF9tb2Rlcyhj b25uLCBlZGlkKTsKKwlkcm1fZWRpZF90b19lbGQoY29ubiwgZWRpZCk7CisJa2ZyZWUoZWRpZCk7 CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBtdGtfaGRtaV9jb25uX21vZGVfdmFsaWQo c3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm4sCisJCQkJICAgIHN0cnVjdCBkcm1fZGlzcGxheV9t b2RlICptb2RlKQoreworCXN0cnVjdCBtdGtfaGRtaSAqaGRtaSA9IGhkbWlfY3R4X2Zyb21fY29u bihjb25uKTsKKworCWRldl9kYmcoaGRtaS0+ZGV2LCAieHJlcz0lZCwgeXJlcz0lZCwgcmVmcmVz aD0lZCwgaW50bD0lZCBjbG9jaz0lZFxuIiwKKwkJbW9kZS0+aGRpc3BsYXksIG1vZGUtPnZkaXNw bGF5LCBtb2RlLT52cmVmcmVzaCwKKwkJISEobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0lO VEVSTEFDRSksIG1vZGUtPmNsb2NrICogMTAwMCk7CisKKwlpZiAoaGRtaS0+YnJpZGdlLm5leHQp IHsKKwkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgYWRqdXN0ZWRfbW9kZTsKKworCQlkcm1fbW9k ZV9jb3B5KCZhZGp1c3RlZF9tb2RlLCBtb2RlKTsKKwkJaWYgKCFkcm1fYnJpZGdlX21vZGVfZml4 dXAoaGRtaS0+YnJpZGdlLm5leHQsIG1vZGUsCisJCQkJCSAgICZhZGp1c3RlZF9tb2RlKSkKKwkJ CXJldHVybiBNT0RFX0JBRDsKKwl9CisKKwlpZiAobW9kZS0+Y2xvY2sgPCAyNzAwMCkKKwkJcmV0 dXJuIE1PREVfQ0xPQ0tfTE9XOworCWlmIChtb2RlLT5jbG9jayA+IDI5NzAwMCkKKwkJcmV0dXJu IE1PREVfQ0xPQ0tfSElHSDsKKworCXJldHVybiBkcm1fbW9kZV92YWxpZGF0ZV9zaXplKG1vZGUs IDB4MWZmZiwgMHgxZmZmKTsKK30KKworc3RhdGljIHN0cnVjdCBkcm1fZW5jb2RlciAqbXRrX2hk bWlfY29ubl9iZXN0X2VuYyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubikKK3sKKwlzdHJ1Y3Qg bXRrX2hkbWkgKmhkbWkgPSBoZG1pX2N0eF9mcm9tX2Nvbm4oY29ubik7CisKKwlyZXR1cm4gaGRt aS0+YnJpZGdlLmVuY29kZXI7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rv cl9mdW5jcyBtdGtfaGRtaV9jb25uZWN0b3JfZnVuY3MgPSB7CisJLmRwbXMgPSBkcm1fYXRvbWlj X2hlbHBlcl9jb25uZWN0b3JfZHBtcywKKwkuZGV0ZWN0ID0gaGRtaV9jb25uX2RldGVjdCwKKwku ZmlsbF9tb2RlcyA9IGRybV9oZWxwZXJfcHJvYmVfc2luZ2xlX2Nvbm5lY3Rvcl9tb2RlcywKKwku ZGVzdHJveSA9IGhkbWlfY29ubl9kZXN0cm95LAorCS5zZXRfcHJvcGVydHkgPSBoZG1pX2Nvbm5f c2V0X3Byb3BlcnR5LAorCS5yZXNldCA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9yZXNl dCwKKwkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rv cl9kdXBsaWNhdGVfc3RhdGUsCisJLmF0b21pY19kZXN0cm95X3N0YXRlID0gZHJtX2F0b21pY19o ZWxwZXJfY29ubmVjdG9yX2Rlc3Ryb3lfc3RhdGUsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0 IGRybV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzCisJCW10a19oZG1pX2Nvbm5lY3Rvcl9oZWxwZXJf ZnVuY3MgPSB7CisJLmdldF9tb2RlcyA9IG10a19oZG1pX2Nvbm5fZ2V0X21vZGVzLAorCS5tb2Rl X3ZhbGlkID0gbXRrX2hkbWlfY29ubl9tb2RlX3ZhbGlkLAorCS5iZXN0X2VuY29kZXIgPSBtdGtf aGRtaV9jb25uX2Jlc3RfZW5jLAorfTsKKworc3RhdGljIHZvaWQgbXRrX2hkbWlfaHBkX2V2ZW50 KGJvb2wgaHBkLCBzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG10a19oZG1pICpoZG1p ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlpZiAoaGRtaSAmJiBoZG1pLT5icmlkZ2UuZW5j b2RlciAmJiBoZG1pLT5icmlkZ2UuZW5jb2Rlci0+ZGV2KQorCQlkcm1faGVscGVyX2hwZF9pcnFf ZXZlbnQoaGRtaS0+YnJpZGdlLmVuY29kZXItPmRldik7Cit9CisKKy8qCisgKiBCcmlkZ2UgY2Fs bGJhY2tzCisgKi8KKworc3RhdGljIGludCBtdGtfaGRtaV9icmlkZ2VfYXR0YWNoKHN0cnVjdCBk cm1fYnJpZGdlICpicmlkZ2UpCit7CisJc3RydWN0IG10a19oZG1pICpoZG1pID0gaGRtaV9jdHhf ZnJvbV9icmlkZ2UoYnJpZGdlKTsKKwlpbnQgcmV0OworCisJcmV0ID0gZHJtX2Nvbm5lY3Rvcl9p bml0KGJyaWRnZS0+ZW5jb2Rlci0+ZGV2LCAmaGRtaS0+Y29ubiwKKwkJCQkgJm10a19oZG1pX2Nv bm5lY3Rvcl9mdW5jcywKKwkJCQkgRFJNX01PREVfQ09OTkVDVE9SX0hETUlBKTsKKwlpZiAocmV0 KSB7CisJCWRldl9lcnIoaGRtaS0+ZGV2LCAiRmFpbGVkIHRvIGluaXRpYWxpemUgY29ubmVjdG9y OiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisJZHJtX2Nvbm5lY3Rvcl9oZWxwZXJf YWRkKCZoZG1pLT5jb25uLCAmbXRrX2hkbWlfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyk7CisKKwlo ZG1pLT5jb25uLnBvbGxlZCA9IERSTV9DT05ORUNUT1JfUE9MTF9IUEQ7CisJaGRtaS0+Y29ubi5p bnRlcmxhY2VfYWxsb3dlZCA9IHRydWU7CisJaGRtaS0+Y29ubi5kb3VibGVzY2FuX2FsbG93ZWQg PSBmYWxzZTsKKworCXJldCA9IGRybV9jb25uZWN0b3JfcmVnaXN0ZXIoJmhkbWktPmNvbm4pOwor CWlmIChyZXQpIHsKKwkJZGV2X2VycihoZG1pLT5kZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgY29u bmVjdG9yOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBkcm1fbW9k ZV9jb25uZWN0b3JfYXR0YWNoX2VuY29kZXIoJmhkbWktPmNvbm4sCisJCQkJCQlicmlkZ2UtPmVu Y29kZXIpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihoZG1pLT5kZXYsCisJCQkiRmFpbGVkIHRv IGF0dGFjaCBjb25uZWN0b3IgdG8gZW5jb2RlcjogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7 CisJfQorCisJaWYgKGJyaWRnZS0+bmV4dCkgeworCQlicmlkZ2UtPm5leHQtPmVuY29kZXIgPSBi cmlkZ2UtPmVuY29kZXI7CisJCXJldCA9IGRybV9icmlkZ2VfYXR0YWNoKGJyaWRnZS0+ZW5jb2Rl ci0+ZGV2LCBicmlkZ2UtPm5leHQpOworCQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKGhkbWktPmRl diwKKwkJCQkiRmFpbGVkIHRvIGF0dGFjaCBleHRlcm5hbCBicmlkZ2U6ICVkXG4iLCByZXQpOwor CQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKworCW10a19jZWNfc2V0X2hwZF9ldmVudChoZG1pLT5j ZWNfZGV2LCBtdGtfaGRtaV9ocGRfZXZlbnQsIGhkbWktPmRldik7CisKKwlyZXR1cm4gMDsKK30K Kworc3RhdGljIGJvb2wgbXRrX2hkbWlfYnJpZGdlX21vZGVfZml4dXAoc3RydWN0IGRybV9icmlk Z2UgKmJyaWRnZSwKKwkJCQkgICAgICAgY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1v ZGUsCisJCQkJICAgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlKQor eworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZCBtdGtfaGRtaV9icmlkZ2VfZGlzYWJs ZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQoreworCXN0cnVjdCBtdGtfaGRtaSAqaGRtaSA9 IGhkbWlfY3R4X2Zyb21fYnJpZGdlKGJyaWRnZSk7CisKKwlwaHlfcG93ZXJfb2ZmKGhkbWktPnBo eSk7CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGhkbWktPmNsa1tNVEtfSERNSV9DTEtfSERNSV9Q SVhFTF0pOworCWNsa19kaXNhYmxlX3VucHJlcGFyZShoZG1pLT5jbGtbTVRLX0hETUlfQ0xLX0hE TUlfUExMXSk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19oZG1pX2JyaWRnZV9wb3N0X2Rpc2FibGUo c3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKK3sKKwlzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkgPSBo ZG1pX2N0eF9mcm9tX2JyaWRnZShicmlkZ2UpOworCisJbXRrX2hkbWlfcG93ZXJfb2ZmKGhkbWkp OworfQorCitzdGF0aWMgdm9pZCBtdGtfaGRtaV9icmlkZ2VfbW9kZV9zZXQoc3RydWN0IGRybV9i cmlkZ2UgKmJyaWRnZSwKKwkJCQkgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAor CQkJCSAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGUpCit7CisJc3Ry dWN0IG10a19oZG1pICpoZG1pID0gaGRtaV9jdHhfZnJvbV9icmlkZ2UoYnJpZGdlKTsKKworCWRl dl9kYmcoaGRtaS0+ZGV2LCAiY3VyIGluZm86IG5hbWU6JXMsIGhkaXNwbGF5OiVkXG4iLAorCQlh ZGp1c3RlZF9tb2RlLT5uYW1lLCBhZGp1c3RlZF9tb2RlLT5oZGlzcGxheSk7CisJZGV2X2RiZyho ZG1pLT5kZXYsICJoc3luY19zdGFydDolZCxoc3luY19lbmQ6JWQsIGh0b3RhbDolZCIsCisJCWFk anVzdGVkX21vZGUtPmhzeW5jX3N0YXJ0LCBhZGp1c3RlZF9tb2RlLT5oc3luY19lbmQsCisJCWFk anVzdGVkX21vZGUtPmh0b3RhbCk7CisJZGV2X2RiZyhoZG1pLT5kZXYsICJoc2tldzolZCwgdmRp c3BsYXk6JWRcbiIsCisJCWFkanVzdGVkX21vZGUtPmhza2V3LCBhZGp1c3RlZF9tb2RlLT52ZGlz cGxheSk7CisJZGV2X2RiZyhoZG1pLT5kZXYsICJ2c3luY19zdGFydDolZCwgdnN5bmNfZW5kOiVk LCB2dG90YWw6JWQiLAorCQlhZGp1c3RlZF9tb2RlLT52c3luY19zdGFydCwgYWRqdXN0ZWRfbW9k ZS0+dnN5bmNfZW5kLAorCQlhZGp1c3RlZF9tb2RlLT52dG90YWwpOworCWRldl9kYmcoaGRtaS0+ ZGV2LCAidnNjYW46JWQsIGZsYWc6JWRcbiIsCisJCWFkanVzdGVkX21vZGUtPnZzY2FuLCBhZGp1 c3RlZF9tb2RlLT5mbGFncyk7CisKKwlkcm1fbW9kZV9jb3B5KCZoZG1pLT5tb2RlLCBhZGp1c3Rl ZF9tb2RlKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2hkbWlfYnJpZGdlX3ByZV9lbmFibGUoc3Ry dWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKK3sKKwlzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkgPSBoZG1p X2N0eF9mcm9tX2JyaWRnZShicmlkZ2UpOworCisJbXRrX2hkbWlfcG93ZXJfb24oaGRtaSk7Cit9 CisKK3N0YXRpYyB2b2lkIG10a19oZG1pX2JyaWRnZV9lbmFibGUoc3RydWN0IGRybV9icmlkZ2Ug KmJyaWRnZSkKK3sKKwlzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkgPSBoZG1pX2N0eF9mcm9tX2JyaWRn ZShicmlkZ2UpOworCisJbXRrX2hkbWlfb3V0cHV0X3NldF9kaXNwbGF5X21vZGUoaGRtaSwgJmhk bWktPm1vZGUpOworCWNsa19wcmVwYXJlX2VuYWJsZShoZG1pLT5jbGtbTVRLX0hETUlfQ0xLX0hE TUlfUExMXSk7CisJY2xrX3ByZXBhcmVfZW5hYmxlKGhkbWktPmNsa1tNVEtfSERNSV9DTEtfSERN SV9QSVhFTF0pOworCXBoeV9wb3dlcl9vbihoZG1pLT5waHkpOworfQorCitzdGF0aWMgY29uc3Qg c3RydWN0IGRybV9icmlkZ2VfZnVuY3MgbXRrX2hkbWlfYnJpZGdlX2Z1bmNzID0geworCS5hdHRh Y2ggPSBtdGtfaGRtaV9icmlkZ2VfYXR0YWNoLAorCS5tb2RlX2ZpeHVwID0gbXRrX2hkbWlfYnJp ZGdlX21vZGVfZml4dXAsCisJLmRpc2FibGUgPSBtdGtfaGRtaV9icmlkZ2VfZGlzYWJsZSwKKwku cG9zdF9kaXNhYmxlID0gbXRrX2hkbWlfYnJpZGdlX3Bvc3RfZGlzYWJsZSwKKwkubW9kZV9zZXQg PSBtdGtfaGRtaV9icmlkZ2VfbW9kZV9zZXQsCisJLnByZV9lbmFibGUgPSBtdGtfaGRtaV9icmlk Z2VfcHJlX2VuYWJsZSwKKwkuZW5hYmxlID0gbXRrX2hkbWlfYnJpZGdlX2VuYWJsZSwKK307CisK K3N0YXRpYyBpbnQgbXRrX2hkbWlfZHRfcGFyc2VfcGRhdGEoc3RydWN0IG10a19oZG1pICpoZG1p LAorCQkJCSAgIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRldmlj ZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LT5vZl9u b2RlOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqY2VjX25wLCAqcG9ydCwgKmVwLCAqcmVtb3RlLCAq aTJjX25wOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmNlY19wZGV2OworCXN0cnVjdCByZWdt YXAgKnJlZ21hcDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKm1lbTsKKwlpbnQgcmV0OworCisJcmV0ID0g bXRrX2hkbWlfZ2V0X2FsbF9jbGsoaGRtaSwgbnApOworCWlmIChyZXQpIHsKKwkJZGV2X2Vycihk ZXYsICJGYWlsZWQgdG8gZ2V0IGNsb2NrczogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJ fQorCisJLyogVGhlIENFQyBtb2R1bGUgaGFuZGxlcyBIRE1JIGhvdHBsdWcgZGV0ZWN0aW9uICov CisJY2VjX25wID0gb2ZfZmluZF9jb21wYXRpYmxlX25vZGUobnAtPnBhcmVudCwgTlVMTCwKKwkJ CQkJICJtZWRpYXRlayxtdDgxNzMtY2VjIik7CisJaWYgKCFjZWNfbnApIHsKKwkJZGV2X2Vycihk ZXYsICJGYWlsZWQgdG8gZmluZCBDRUMgbm9kZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0K KworCWNlY19wZGV2ID0gb2ZfZmluZF9kZXZpY2VfYnlfbm9kZShjZWNfbnApOworCWlmICghY2Vj X3BkZXYpIHsKKwkJZGV2X2VycihoZG1pLT5kZXYsICJXYWl0aW5nIGZvciBDRUMgZGV2aWNlICVz XG4iLAorCQkJY2VjX25wLT5mdWxsX25hbWUpOworCQlyZXR1cm4gLUVQUk9CRV9ERUZFUjsKKwl9 CisJaGRtaS0+Y2VjX2RldiA9ICZjZWNfcGRldi0+ZGV2OworCisJLyoKKwkgKiBUaGUgbWVkaWF0 ZWssc3lzY29uLWhkbWkgcHJvcGVydHkgY29udGFpbnMgYSBwaGFuZGxlIGxpbmsgdG8gdGhlCisJ ICogTU1TWVNfQ09ORklHIGRldmljZSBhbmQgdGhlIHJlZ2lzdGVyIG9mZnNldCBvZiB0aGUgSERN SV9TWVNfQ0ZHCisJICogcmVnaXN0ZXJzIGl0IGNvbnRhaW5zLgorCSAqLworCXJlZ21hcCA9IHN5 c2Nvbl9yZWdtYXBfbG9va3VwX2J5X3BoYW5kbGUobnAsICJtZWRpYXRlayxzeXNjb24taGRtaSIp OworCXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyX2luZGV4KG5wLCAibWVkaWF0ZWssc3lzY29u LWhkbWkiLCAxLAorCQkJCQkgJmhkbWktPnN5c19vZmZzZXQpOworCWlmIChJU19FUlIocmVnbWFw KSkKKwkJcmV0ID0gUFRSX0VSUihyZWdtYXApOworCWlmIChyZXQpIHsKKwkJcmV0ID0gUFRSX0VS UihyZWdtYXApOworCQlkZXZfZXJyKGRldiwKKwkJCSJGYWlsZWQgdG8gZ2V0IHN5c3RlbSBjb25m aWd1cmF0aW9uIHJlZ2lzdGVyczogJWRcbiIsCisJCQlyZXQpOworCQlyZXR1cm4gcmV0OworCX0K KwloZG1pLT5zeXNfcmVnbWFwID0gcmVnbWFwOworCisJbWVtID0gcGxhdGZvcm1fZ2V0X3Jlc291 cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwloZG1pLT5yZWdzID0gZGV2bV9pb3JlbWFw X3Jlc291cmNlKGRldiwgbWVtKTsKKwlpZiAoSVNfRVJSKGhkbWktPnJlZ3MpKSB7CisJCWRldl9l cnIoZGV2LCAiRmFpbGVkIHRvIGlvcmVtYXAgaGRtaV9zaGVsbDogJWxkXG4iLAorCQkJUFRSX0VS UihoZG1pLT5yZWdzKSk7CisJCXJldHVybiBQVFJfRVJSKGhkbWktPnJlZ3MpOworCX0KKworCXBv cnQgPSBvZl9ncmFwaF9nZXRfcG9ydF9ieV9pZChucCwgMSk7CisJaWYgKCFwb3J0KSB7CisJCWRl dl9lcnIoZGV2LCAiTWlzc2luZyBvdXRwdXQgcG9ydCBub2RlXG4iKTsKKwkJcmV0dXJuIC1FSU5W QUw7CisJfQorCisJZXAgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShwb3J0LCAiZW5kcG9pbnQiKTsK KwlpZiAoIWVwKSB7CisJCWRldl9lcnIoZGV2LCAiTWlzc2luZyBlbmRwb2ludCBub2RlIGluIHBv cnQgJXNcbiIsCisJCQlwb3J0LT5mdWxsX25hbWUpOworCQlvZl9ub2RlX3B1dChwb3J0KTsKKwkJ cmV0dXJuIC1FSU5WQUw7CisJfQorCW9mX25vZGVfcHV0KHBvcnQpOworCisJcmVtb3RlID0gb2Zf Z3JhcGhfZ2V0X3JlbW90ZV9wb3J0X3BhcmVudChlcCk7CisJaWYgKCFyZW1vdGUpIHsKKwkJZGV2 X2VycihkZXYsICJNaXNzaW5nIGNvbm5lY3Rvci9icmlkZ2Ugbm9kZSBmb3IgZW5kcG9pbnQgJXNc biIsCisJCQllcC0+ZnVsbF9uYW1lKTsKKwkJb2Zfbm9kZV9wdXQoZXApOworCQlyZXR1cm4gLUVJ TlZBTDsKKwl9CisJb2Zfbm9kZV9wdXQoZXApOworCisJaWYgKCFvZl9kZXZpY2VfaXNfY29tcGF0 aWJsZShyZW1vdGUsICJoZG1pLWNvbm5lY3RvciIpKSB7CisJCWhkbWktPmJyaWRnZS5uZXh0ID0g b2ZfZHJtX2ZpbmRfYnJpZGdlKHJlbW90ZSk7CisJCWlmICghaGRtaS0+YnJpZGdlLm5leHQpIHsK KwkJCWRldl9lcnIoZGV2LCAiV2FpdGluZyBmb3IgZXh0ZXJuYWwgYnJpZGdlXG4iKTsKKwkJCW9m X25vZGVfcHV0KHJlbW90ZSk7CisJCQlyZXR1cm4gLUVQUk9CRV9ERUZFUjsKKwkJfQorCX0KKwor CWkyY19ucCA9IG9mX3BhcnNlX3BoYW5kbGUocmVtb3RlLCAiZGRjLWkyYy1idXMiLCAwKTsKKwlp ZiAoIWkyY19ucCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBmaW5kIGRkYy1pMmMtYnVz IG5vZGUgaW4gJXNcbiIsCisJCQlyZW1vdGUtPmZ1bGxfbmFtZSk7CisJCW9mX25vZGVfcHV0KHJl bW90ZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlvZl9ub2RlX3B1dChyZW1vdGUpOworCisJ aGRtaS0+ZGRjX2FkcHQgPSBvZl9maW5kX2kyY19hZGFwdGVyX2J5X25vZGUoaTJjX25wKTsKKwlp ZiAoIWhkbWktPmRkY19hZHB0KSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGdldCBkZGMg aTJjIGFkYXB0ZXIgYnkgbm9kZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVy biAwOworfQorCitzdGF0aWMgaW50IG10a19kcm1faGRtaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1f ZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBtdGtfaGRtaSAqaGRtaTsKKwlzdHJ1Y3QgZGV2aWNl ICpkZXYgPSAmcGRldi0+ZGV2OworCWludCByZXQ7CisKKwloZG1pID0gZGV2bV9remFsbG9jKGRl diwgc2l6ZW9mKCpoZG1pKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFoZG1pKQorCQlyZXR1cm4gLUVO T01FTTsKKworCWhkbWktPmRldiA9IGRldjsKKworCXJldCA9IG10a19oZG1pX2R0X3BhcnNlX3Bk YXRhKGhkbWksIHBkZXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwloZG1pLT5waHkg PSBkZXZtX3BoeV9nZXQoZGV2LCAiaGRtaSIpOworCWlmIChJU19FUlIoaGRtaS0+cGh5KSkgewor CQlyZXQgPSBQVFJfRVJSKGhkbWktPnBoeSk7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGdl dCBIRE1JIFBIWTogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcGxhdGZvcm1f c2V0X2RydmRhdGEocGRldiwgaGRtaSk7CisKKwlyZXQgPSBtdGtfaGRtaV9vdXRwdXRfaW5pdCho ZG1pKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGluaXRpYWxpemUg aGRtaSBvdXRwdXRcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCWhkbWktPmJyaWRnZS5mdW5j cyA9ICZtdGtfaGRtaV9icmlkZ2VfZnVuY3M7CisJaGRtaS0+YnJpZGdlLm9mX25vZGUgPSBwZGV2 LT5kZXYub2Zfbm9kZTsKKwlyZXQgPSBkcm1fYnJpZGdlX2FkZCgmaGRtaS0+YnJpZGdlKTsKKwlp ZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGFkZCBicmlkZ2UsIHJldCA9ICVk XG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IG10a19oZG1pX2Nsa19lbmFi bGVfYXVkaW8oaGRtaSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBl bmFibGUgYXVkaW8gY2xvY2tzOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJfYnJpZGdlX3JlbW92 ZTsKKwl9CisKKwlkZXZfZGJnKGRldiwgIm1lZGlhdGVrIGhkbWkgcHJvYmUgc3VjY2Vzc1xuIik7 CisJcmV0dXJuIDA7CisKK2Vycl9icmlkZ2VfcmVtb3ZlOgorCWRybV9icmlkZ2VfcmVtb3ZlKCZo ZG1pLT5icmlkZ2UpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2RybV9oZG1p X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBtdGtfaGRt aSAqaGRtaSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJZHJtX2JyaWRnZV9yZW1v dmUoJmhkbWktPmJyaWRnZSk7CisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoaGRtaS0+YXVk aW9fcGRldik7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJbXRrX2hkbWlf Y2xrX2Rpc2FibGVfYXVkaW8oaGRtaSk7CisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdf UE1fU0xFRVAKK3N0YXRpYyBpbnQgbXRrX2hkbWlfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYp Cit7CisJc3RydWN0IG10a19oZG1pICpoZG1pID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlt dGtfaGRtaV9wb3dlcl9vZmYoaGRtaSk7CisJbXRrX2hkbWlfY2xrX2Rpc2FibGVfYXVkaW8oaGRt aSk7CisJcGh5X3Bvd2VyX29mZihoZG1pLT5waHkpOworCWRldl9kYmcoZGV2LCAiaGRtaSBzdXNw ZW5kIHN1Y2Nlc3MhXG4iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdGtfaGRtaV9y ZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBtdGtfaGRtaSAqaGRtaSA9IGRl dl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCByZXQgPSAwOworCisJcmV0ID0gbXRrX2hkbWlfY2xr X2VuYWJsZV9hdWRpbyhoZG1pKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiaGRtaSBy ZXN1bWUgZmFpbGVkIVxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJbXRrX2hkbWlfcG93ZXJf b24oaGRtaSk7CisJbXRrX2hkbWlfb3V0cHV0X3NldF9kaXNwbGF5X21vZGUoaGRtaSwgJmhkbWkt Pm1vZGUpOworCXBoeV9wb3dlcl9vbihoZG1pLT5waHkpOworCWRldl9kYmcoZGV2LCAiaGRtaSBy ZXN1bWUgc3VjY2VzcyFcbiIpOworCXJldHVybiAwOworfQorI2VuZGlmCitzdGF0aWMgU0lNUExF X0RFVl9QTV9PUFMobXRrX2hkbWlfcG1fb3BzLAorCQkJIG10a19oZG1pX3N1c3BlbmQsIG10a19o ZG1pX3Jlc3VtZSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG10a19kcm1f aGRtaV9vZl9pZHNbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1oZG1p IiwgfSwKKwl7fQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXRrX2hkbWlf ZHJpdmVyID0geworCS5wcm9iZSA9IG10a19kcm1faGRtaV9wcm9iZSwKKwkucmVtb3ZlID0gbXRr X2RybV9oZG1pX3JlbW92ZSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJtZWRpYXRlay1kcm0t aGRtaSIsCisJCS5vZl9tYXRjaF90YWJsZSA9IG10a19kcm1faGRtaV9vZl9pZHMsCisJCS5wbSA9 ICZtdGtfaGRtaV9wbV9vcHMsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJp dmVyICogY29uc3QgbXRrX2hkbWlfZHJpdmVyc1tdID0geworCSZtdGtfaGRtaV9waHlfZHJpdmVy LAorCSZtdGtfaGRtaV9kZGNfZHJpdmVyLAorCSZtdGtfY2VjX2RyaXZlciwKKwkmbXRrX2hkbWlf ZHJpdmVyLAorfTsKKworc3RhdGljIGludCBfX2luaXQgbXRrX2hkbWl0eF9pbml0KHZvaWQpCit7 CisJaW50IHJldDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG10a19o ZG1pX2RyaXZlcnMpOyBpKyspIHsKKwkJcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKG10 a19oZG1pX2RyaXZlcnNbaV0pOworCQlpZiAocmV0IDwgMCkgeworCQkJcHJfZXJyKCJGYWlsZWQg dG8gcmVnaXN0ZXIgJXMgZHJpdmVyOiAlZFxuIiwKKwkJCSAgICAgICBtdGtfaGRtaV9kcml2ZXJz W2ldLT5kcml2ZXIubmFtZSwgcmV0KTsKKwkJCWdvdG8gZXJyOworCQl9CisJfQorCisJcmV0dXJu IDA7CisKK2VycjoKKwl3aGlsZSAoLS1pID49IDApCisJCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lz dGVyKG10a19oZG1pX2RyaXZlcnNbaV0pOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZv aWQgX19leGl0IG10a19oZG1pdHhfZXhpdCh2b2lkKQoreworCWludCBpOworCisJZm9yIChpID0g QVJSQVlfU0laRShtdGtfaGRtaV9kcml2ZXJzKSAtIDE7IGkgPj0gMDsgaS0tKQorCQlwbGF0Zm9y bV9kcml2ZXJfdW5yZWdpc3RlcihtdGtfaGRtaV9kcml2ZXJzW2ldKTsKK30KKworbW9kdWxlX2lu aXQobXRrX2hkbWl0eF9pbml0KTsKK21vZHVsZV9leGl0KG10a19oZG1pdHhfZXhpdCk7CisKK01P RFVMRV9BVVRIT1IoIkppZSBRaXUgPGppZS5xaXVAbWVkaWF0ZWsuY29tPiIpOworTU9EVUxFX0RF U0NSSVBUSU9OKCJNZWRpYVRlayBIRE1JIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2 MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19oZG1pLmMgYi9k cml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2hkbWkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwLi4zMGVjN2I1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJt L21lZGlhdGVrL210a19oZG1pLmMKQEAgLTAsMCArMSw0NzkgQEAKKy8qCisgKiBDb3B5cmlnaHQg KGMpIDIwMTQgTWVkaWFUZWsgSW5jLgorICogQXV0aG9yOiBKaWUgUWl1IDxqaWUucWl1QG1lZGlh dGVrLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBi eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBk aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g IFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu CisgKi8KKyNpbmNsdWRlIDxkcm0vZHJtX2VkaWQuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4K KyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3BoeS9waHkuaD4KKyNp bmNsdWRlICJtdGtfY2VjLmgiCisjaW5jbHVkZSAibXRrX2hkbWkuaCIKKyNpbmNsdWRlICJtdGtf aGRtaV9ody5oIgorCitzdGF0aWMgdTggbXRrX2hkbWlfYXVkX2dldF9jaG5sX2NvdW50KGVudW0g aGRtaV9hdWRfY2hhbm5lbF90eXBlIGNoYW5uZWxfdHlwZSkKK3sKKwlzd2l0Y2ggKGNoYW5uZWxf dHlwZSkgeworCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzFfMDoKKwljYXNlIEhETUlfQVVEX0NI QU5fVFlQRV8xXzE6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfMl8wOgorCQlyZXR1cm4gMjsK KwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV8yXzE6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVf M18wOgorCQlyZXR1cm4gMzsKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV8zXzE6CisJY2FzZSBI RE1JX0FVRF9DSEFOX1RZUEVfNF8wOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzNfMF9MUlM6 CisJCXJldHVybiA0OworCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzRfMToKKwljYXNlIEhETUlf QVVEX0NIQU5fVFlQRV81XzA6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfM18xX0xSUzoKKwlj YXNlIEhETUlfQVVEX0NIQU5fVFlQRV80XzBfQ0xSUzoKKwkJcmV0dXJuIDU7CisJY2FzZSBIRE1J X0FVRF9DSEFOX1RZUEVfNV8xOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzZfMDoKKwljYXNl IEhETUlfQVVEX0NIQU5fVFlQRV80XzFfQ0xSUzoKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV82 XzBfQ1M6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfNl8wX0NIOgorCWNhc2UgSERNSV9BVURf Q0hBTl9UWVBFXzZfMF9PSDoKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV82XzBfQ0hSOgorCQly ZXR1cm4gNjsKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV82XzE6CisJY2FzZSBIRE1JX0FVRF9D SEFOX1RZUEVfNl8xX0NTOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzZfMV9DSDoKKwljYXNl IEhETUlfQVVEX0NIQU5fVFlQRV82XzFfT0g6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfNl8x X0NIUjoKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV83XzA6CisJY2FzZSBIRE1JX0FVRF9DSEFO X1RZUEVfN18wX0xIX1JIOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzdfMF9MU1JfUlNSOgor CWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzdfMF9MQ19SQzoKKwljYXNlIEhETUlfQVVEX0NIQU5f VFlQRV83XzBfTFdfUlc6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18wX0xTRF9SU0Q6CisJ Y2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18wX0xTU19SU1M6CisJY2FzZSBIRE1JX0FVRF9DSEFO X1RZUEVfN18wX0xIU19SSFM6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18wX0NTX0NIOgor CWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzdfMF9DU19PSDoKKwljYXNlIEhETUlfQVVEX0NIQU5f VFlQRV83XzBfQ1NfQ0hSOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzdfMF9DSF9PSDoKKwlj YXNlIEhETUlfQVVEX0NIQU5fVFlQRV83XzBfQ0hfQ0hSOgorCWNhc2UgSERNSV9BVURfQ0hBTl9U WVBFXzdfMF9PSF9DSFI6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18wX0xTU19SU1NfTFNS X1JTUjoKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV84XzBfTEhfUkhfQ1M6CisJCXJldHVybiA3 OworCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzdfMToKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQ RV83XzFfTEhfUkg6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18xX0xTUl9SU1I6CisJY2Fz ZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18xX0xDX1JDOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBF XzdfMV9MV19SVzoKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV83XzFfTFNEX1JTRDoKKwljYXNl IEhETUlfQVVEX0NIQU5fVFlQRV83XzFfTFNTX1JTUzoKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQ RV83XzFfTEhTX1JIUzoKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV83XzFfQ1NfQ0g6CisJY2Fz ZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18xX0NTX09IOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBF XzdfMV9DU19DSFI6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18xX0NIX09IOgorCWNhc2Ug SERNSV9BVURfQ0hBTl9UWVBFXzdfMV9DSF9DSFI6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVf N18xX09IX0NIUjoKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV83XzFfTFNTX1JTU19MU1JfUlNS OgorCQlyZXR1cm4gODsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMjsKKwl9Cit9CisKK3N0YXRpYyBp bnQgbXRrX2hkbWlfdmlkZW9fY2hhbmdlX3ZwbGwoc3RydWN0IG10a19oZG1pICpoZG1pLCB1MzIg Y2xvY2spCit7CisJdW5zaWduZWQgbG9uZyByYXRlOworCWludCByZXQ7CisKKwkvKiBUaGUgRFBJ IGRyaXZlciBhbHJlYWR5IHNob3VsZCBoYXZlIHNldCBUVkRQTEwgdG8gdGhlIGNvcnJlY3QgcmF0 ZSAqLworCXJldCA9IGNsa19zZXRfcmF0ZShoZG1pLT5jbGtbTVRLX0hETUlfQ0xLX0hETUlfUExM XSwgY2xvY2spOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihoZG1pLT5kZXYsICJGYWlsZWQgdG8g c2V0IFBMTCB0byAldSBIejogJWRcbiIsIGNsb2NrLAorCQkJcmV0KTsKKwkJcmV0dXJuIHJldDsK Kwl9CisKKwlyYXRlID0gY2xrX2dldF9yYXRlKGhkbWktPmNsa1tNVEtfSERNSV9DTEtfSERNSV9Q TExdKTsKKworCWlmIChESVZfUk9VTkRfQ0xPU0VTVChyYXRlLCAxMDAwKSAhPSBESVZfUk9VTkRf Q0xPU0VTVChjbG9jaywgMTAwMCkpCisJCWRldl93YXJuKGhkbWktPmRldiwgIldhbnQgUExMICV1 IEh6LCBnb3QgJWx1IEh6XG4iLCBjbG9jaywKKwkJCSByYXRlKTsKKwllbHNlCisJCWRldl9kYmco aGRtaS0+ZGV2LCAiV2FudCBQTEwgJXUgSHosIGdvdCAlbHUgSHpcbiIsIGNsb2NrLCByYXRlKTsK KworCW10a19oZG1pX2h3X2NvbmZpZ19zeXMoaGRtaSk7CisJbXRrX2hkbWlfaHdfc2V0X2RlZXBf Y29sb3JfbW9kZShoZG1pKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbXRrX2hkbWlf dmlkZW9fc2V0X2Rpc3BsYXlfbW9kZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksCisJCQkJCSAgICBz dHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKK3sKKwltdGtfaGRtaV9od19yZXNldChoZG1p KTsKKwltdGtfaGRtaV9od19lbmFibGVfbm90aWNlKGhkbWksIHRydWUpOworCW10a19oZG1pX2h3 X3dyaXRlX2ludF9tYXNrKGhkbWksIDB4ZmYpOworCW10a19oZG1pX2h3X2VuYWJsZV9kdmlfbW9k ZShoZG1pLCBoZG1pLT5kdmlfbW9kZSk7CisJbXRrX2hkbWlfaHdfbmN0c19hdXRvX3dyaXRlX2Vu YWJsZShoZG1pLCB0cnVlKTsKKworCW10a19oZG1pX2h3X21zaWNfc2V0dGluZyhoZG1pLCBtb2Rl KTsKK30KKworc3RhdGljIGludCBtdGtfaGRtaV9hdWRfZW5hYmxlX3BhY2tldChzdHJ1Y3QgbXRr X2hkbWkgKmhkbWksIGJvb2wgZW5hYmxlKQoreworCW10a19oZG1pX2h3X3NlbmRfYXVkX3BhY2tl dChoZG1pLCBlbmFibGUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10a19oZG1pX2F1 ZF9vbl9vZmZfaHdfbmN0cyhzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksIGJvb2wgb24pCit7CisJbXRr X2hkbWlfaHdfbmN0c19lbmFibGUoaGRtaSwgb24pOworCXJldHVybiAwOworfQorCitzdGF0aWMg aW50IG10a19oZG1pX2F1ZF9zZXRfaW5wdXQoc3RydWN0IG10a19oZG1pICpoZG1pKQoreworCXU4 IGNoYW5fY291bnQ7CisKKwltdGtfaGRtaV9od19hdWRfc2V0X2NoYW5uZWxfc3dhcChoZG1pLCBI RE1JX0FVRF9TV0FQX0xGRV9DQyk7CisJbXRrX2hkbWlfaHdfYXVkX3Jhd19kYXRhX2VuYWJsZSho ZG1pLCB0cnVlKTsKKworCWlmIChoZG1pLT5hdWRfcGFyYW0uYXVkX2lucHV0X3R5cGUgPT0gSERN SV9BVURfSU5QVVRfU1BESUYgJiYKKwkgICAgaGRtaS0+YXVkX3BhcmFtLmF1ZF9jb2RlYyA9PSBI RE1JX0FVRElPX0NPRElOR19UWVBFX0RTVCkgeworCQltdGtfaGRtaV9od19hdWRfc2V0X2JpdF9u dW0oaGRtaSwKKwkJCQkJICAgIEhETUlfQVVESU9fU0FNUExFX1NJWkVfMjQpOworCX0gZWxzZSBp ZiAoaGRtaS0+YXVkX3BhcmFtLmF1ZF9pMnNfZm10ID09CisJCQlIRE1JX0kyU19NT0RFX0xKVF8y NEJJVCkgeworCQloZG1pLT5hdWRfcGFyYW0uYXVkX2kyc19mbXQgPSBIRE1JX0kyU19NT0RFX0xK VF8xNkJJVDsKKwl9CisKKwltdGtfaGRtaV9od19hdWRfc2V0X2kyc19mbXQoaGRtaSwKKwkJCQkg ICAgaGRtaS0+YXVkX3BhcmFtLmF1ZF9pMnNfZm10KTsKKwltdGtfaGRtaV9od19hdWRfc2V0X2Jp dF9udW0oaGRtaSwgSERNSV9BVURJT19TQU1QTEVfU0laRV8yNCk7CisKKwltdGtfaGRtaV9od19h dWRfc2V0X2hpZ2hfYml0cmF0ZShoZG1pLCBmYWxzZSk7CisJbXRrX2hkbWlfcGh5X2F1ZF9kc3Rf bm9ybWFsX2RvdWJsZV9lbmFibGUoaGRtaSwgZmFsc2UpOworCW10a19oZG1pX2h3X2F1ZF9kc3Rf ZW5hYmxlKGhkbWksIGZhbHNlKTsKKworCWlmIChoZG1pLT5hdWRfcGFyYW0uYXVkX2lucHV0X3R5 cGUgPT0gSERNSV9BVURfSU5QVVRfU1BESUYpIHsKKwkJbXRrX2hkbWlfaHdfYXVkX2RzZF9lbmFi bGUoaGRtaSwgZmFsc2UpOworCQlpZiAoaGRtaS0+YXVkX3BhcmFtLmF1ZF9jb2RlYyA9PQorCQkJ SERNSV9BVURJT19DT0RJTkdfVFlQRV9EU1QpIHsKKwkJCW10a19oZG1pX3BoeV9hdWRfZHN0X25v cm1hbF9kb3VibGVfZW5hYmxlKGhkbWksCisJCQkJCQkJCSAgdHJ1ZSk7CisJCQltdGtfaGRtaV9o d19hdWRfZHN0X2VuYWJsZShoZG1pLCB0cnVlKTsKKwkJfQorCisJCWNoYW5fY291bnQgPSBtdGtf aGRtaV9hdWRfZ2V0X2NobmxfY291bnQKKwkJCQkJCSAoSERNSV9BVURfQ0hBTl9UWVBFXzJfMCk7 CisJCW10a19oZG1pX2h3X2F1ZF9zZXRfaTJzX2NoYW5fbnVtKGhkbWksCisJCQkJCQkgSERNSV9B VURfQ0hBTl9UWVBFXzJfMCwKKwkJCQkJCSBjaGFuX2NvdW50KTsKKwkJbXRrX2hkbWlfaHdfYXVk X3NldF9pbnB1dF90eXBlKGhkbWksCisJCQkJCSAgICAgICBIRE1JX0FVRF9JTlBVVF9TUERJRik7 CisJfSBlbHNlIHsKKwkJbXRrX2hkbWlfaHdfYXVkX2RzZF9lbmFibGUoaGRtaSwgZmFsc2UpOwor CQljaGFuX2NvdW50ID0KKwkJCW10a19oZG1pX2F1ZF9nZXRfY2hubF9jb3VudCgKKwkJCWhkbWkt PmF1ZF9wYXJhbS5hdWRfaW5wdXRfY2hhbl90eXBlKTsKKwkJbXRrX2hkbWlfaHdfYXVkX3NldF9p MnNfY2hhbl9udW0oCisJCQloZG1pLAorCQkJaGRtaS0+YXVkX3BhcmFtLmF1ZF9pbnB1dF9jaGFu X3R5cGUsCisJCQljaGFuX2NvdW50KTsKKwkJbXRrX2hkbWlfaHdfYXVkX3NldF9pbnB1dF90eXBl KGhkbWksCisJCQkJCSAgICAgICBIRE1JX0FVRF9JTlBVVF9JMlMpOworCX0KKwlyZXR1cm4gMDsK K30KKworc3RhdGljIGludCBtdGtfaGRtaV9hdWRfc2V0X3NyYyhzdHJ1Y3QgbXRrX2hkbWkgKmhk bWksCisJCQkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmRpc3BsYXlfbW9kZSkKK3sKKwltdGtf aGRtaV9hdWRfb25fb2ZmX2h3X25jdHMoaGRtaSwgZmFsc2UpOworCisJaWYgKGhkbWktPmF1ZF9w YXJhbS5hdWRfaW5wdXRfdHlwZSA9PSBIRE1JX0FVRF9JTlBVVF9JMlMpIHsKKwkJc3dpdGNoICho ZG1pLT5hdWRfcGFyYW0uYXVkX2hkbWlfZnMpIHsKKwkJY2FzZSBIRE1JX0FVRElPX1NBTVBMRV9G UkVRVUVOQ1lfMzIwMDA6CisJCWNhc2UgSERNSV9BVURJT19TQU1QTEVfRlJFUVVFTkNZXzQ0MTAw OgorCQljYXNlIEhETUlfQVVESU9fU0FNUExFX0ZSRVFVRU5DWV80ODAwMDoKKwkJY2FzZSBIRE1J X0FVRElPX1NBTVBMRV9GUkVRVUVOQ1lfODgyMDA6CisJCWNhc2UgSERNSV9BVURJT19TQU1QTEVf RlJFUVVFTkNZXzk2MDAwOgorCQkJbXRrX2hkbWlfaHdfYXVkX3NyY19vZmYoaGRtaSk7CisJCQkv KiBtdGtfaGRtaV9od19hdWRfc3JjX2VuYWJsZShoZG1pLCBmYWxzZSk7ICovCisJCQltdGtfaGRt aV9od19hdWRfc2V0X21jbGsoCisJCQloZG1pLAorCQkJaGRtaS0+YXVkX3BhcmFtLmF1ZF9tY2xr KTsKKwkJCW10a19oZG1pX2h3X2F1ZF9hY2xrX2ludl9lbmFibGUoaGRtaSwgZmFsc2UpOworCQkJ YnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCX0gZWxzZSB7CisJCXN3aXRjaCAo aGRtaS0+YXVkX3BhcmFtLmllY19mcmFtZV9mcykgeworCQljYXNlIEhETUlfSUVDXzMySzoKKwkJ CWhkbWktPmF1ZF9wYXJhbS5hdWRfaGRtaV9mcyA9CisJCQkgICAgSERNSV9BVURJT19TQU1QTEVf RlJFUVVFTkNZXzMyMDAwOworCQkJbXRrX2hkbWlfaHdfYXVkX3NyY19vZmYoaGRtaSk7CisJCQlt dGtfaGRtaV9od19hdWRfc2V0X21jbGsoaGRtaSwKKwkJCQkJCSBIRE1JX0FVRF9NQ0xLXzEyOEZT KTsKKwkJCW10a19oZG1pX2h3X2F1ZF9hY2xrX2ludl9lbmFibGUoaGRtaSwgZmFsc2UpOworCQkJ YnJlYWs7CisJCWNhc2UgSERNSV9JRUNfNDhLOgorCQkJaGRtaS0+YXVkX3BhcmFtLmF1ZF9oZG1p X2ZzID0KKwkJCSAgICBIRE1JX0FVRElPX1NBTVBMRV9GUkVRVUVOQ1lfNDgwMDA7CisJCQltdGtf aGRtaV9od19hdWRfc3JjX29mZihoZG1pKTsKKwkJCW10a19oZG1pX2h3X2F1ZF9zZXRfbWNsayho ZG1pLAorCQkJCQkJIEhETUlfQVVEX01DTEtfMTI4RlMpOworCQkJbXRrX2hkbWlfaHdfYXVkX2Fj bGtfaW52X2VuYWJsZShoZG1pLCBmYWxzZSk7CisJCQlicmVhazsKKwkJY2FzZSBIRE1JX0lFQ180 NEs6CisJCQloZG1pLT5hdWRfcGFyYW0uYXVkX2hkbWlfZnMgPQorCQkJICAgIEhETUlfQVVESU9f U0FNUExFX0ZSRVFVRU5DWV80NDEwMDsKKwkJCW10a19oZG1pX2h3X2F1ZF9zcmNfb2ZmKGhkbWkp OworCQkJbXRrX2hkbWlfaHdfYXVkX3NldF9tY2xrKGhkbWksCisJCQkJCQkgSERNSV9BVURfTUNM S18xMjhGUyk7CisJCQltdGtfaGRtaV9od19hdWRfYWNsa19pbnZfZW5hYmxlKGhkbWksIGZhbHNl KTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwl9CisJbXRrX2hkbWlf aHdfYXVkX3NldF9uY3RzKGhkbWksIGhkbWktPmF1ZF9wYXJhbS5hdWRfaGRtaV9mcywKKwkJCQkg ZGlzcGxheV9tb2RlLT5jbG9jayk7CisKKwltdGtfaGRtaV9od19hdWRfc3JjX3JlZW5hYmxlKGhk bWkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10a19oZG1pX2F1ZF9zZXRfY2hubF9z dGF0dXMoc3RydWN0IG10a19oZG1pICpoZG1pKQoreworCW10a19oZG1pX2h3X2F1ZF9zZXRfY2hh bm5lbF9zdGF0dXMoCisJCWhkbWksCisJICAgaGRtaS0+YXVkX3BhcmFtLmhkbWlfbF9jaGFubmVs X3N0YXRlLAorCSAgIGhkbWktPmF1ZF9wYXJhbS5oZG1pX3JfY2hhbm5lbF9zdGF0ZSwKKwkgICBo ZG1pLT5hdWRfcGFyYW0uYXVkX2hkbWlfZnMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50 IG10a19oZG1pX2F1ZF9vdXRwdXRfY29uZmlnKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwKKwkJCQkg ICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqZGlzcGxheV9tb2RlKQoreworCW10a19oZG1p X2h3X2F1ZF9tdXRlKGhkbWksIHRydWUpOworCW10a19oZG1pX2F1ZF9lbmFibGVfcGFja2V0KGhk bWksIGZhbHNlKTsKKworCW10a19oZG1pX2F1ZF9zZXRfaW5wdXQoaGRtaSk7CisJbXRrX2hkbWlf YXVkX3NldF9zcmMoaGRtaSwgZGlzcGxheV9tb2RlKTsKKwltdGtfaGRtaV9hdWRfc2V0X2Nobmxf c3RhdHVzKGhkbWkpOworCisJdXNsZWVwX3JhbmdlKDUwLCAxMDApOworCisJbXRrX2hkbWlfYXVk X29uX29mZl9od19uY3RzKGhkbWksIHRydWUpOworCW10a19oZG1pX2F1ZF9lbmFibGVfcGFja2V0 KGhkbWksIHRydWUpOworCW10a19oZG1pX2h3X2F1ZF9tdXRlKGhkbWksIGZhbHNlKTsKKwlyZXR1 cm4gMDsKK30KKworc3RhdGljIGludCBtdGtfaGRtaV9zZXR1cF9hdl9tdXRlX3BhY2tldChzdHJ1 Y3QgbXRrX2hkbWkgKmhkbWkpCit7CisJbXRrX2hkbWlfaHdfc2VuZF9hdl9tdXRlKGhkbWkpOwor CXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10a19oZG1pX3NldHVwX2F2X3VubXV0ZV9wYWNr ZXQoc3RydWN0IG10a19oZG1pICpoZG1pKQoreworCW10a19oZG1pX2h3X3NlbmRfYXZfdW5tdXRl KGhkbWkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10a19oZG1pX3NldHVwX2F2aV9p bmZvZnJhbWUoc3RydWN0IG10a19oZG1pICpoZG1pLAorCQkJCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlf bW9kZSAqbW9kZSkKK3sKKwlzdHJ1Y3QgaGRtaV9hdmlfaW5mb2ZyYW1lIGZyYW1lOworCXU4IGJ1 ZmZlclsxN107CisJc3NpemVfdCBlcnI7CisKKwllcnIgPSBkcm1faGRtaV9hdmlfaW5mb2ZyYW1l X2Zyb21fZGlzcGxheV9tb2RlKCZmcmFtZSwgbW9kZSk7CisJaWYgKGVyciA8IDApIHsKKwkJZGV2 X2VycihoZG1pLT5kZXYsCisJCQkiRmFpbGVkIHRvIGdldCBBVkkgaW5mb2ZyYW1lIGZyb20gbW9k ZTogJXpkXG4iLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKworCWVyciA9IGhkbWlfYXZpX2lu Zm9mcmFtZV9wYWNrKCZmcmFtZSwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSk7CisJaWYgKGVyciA8 IDApIHsKKwkJZGV2X2VycihoZG1pLT5kZXYsICJGYWlsZWQgdG8gcGFjayBBVkkgaW5mb2ZyYW1l OiAlemRcbiIsIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCisJbXRrX2hkbWlfaHdfc2VuZF9p bmZvX2ZyYW1lKGhkbWksIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpOworCXJldHVybiAwOworfQor CitzdGF0aWMgaW50IG10a19oZG1pX3NldHVwX3NwZF9pbmZvZnJhbWUoc3RydWN0IG10a19oZG1p ICpoZG1pLAorCQkJCQljb25zdCBjaGFyICp2ZW5kb3IsCisJCQkJCWNvbnN0IGNoYXIgKnByb2R1 Y3QpCit7CisJc3RydWN0IGhkbWlfc3BkX2luZm9mcmFtZSBmcmFtZTsKKwl1OCBidWZmZXJbMjld OworCXNzaXplX3QgZXJyOworCisJZXJyID0gaGRtaV9zcGRfaW5mb2ZyYW1lX2luaXQoJmZyYW1l LCB2ZW5kb3IsIHByb2R1Y3QpOworCWlmIChlcnIgPCAwKSB7CisJCWRldl9lcnIoaGRtaS0+ZGV2 LCAiRmFpbGVkIHRvIGluaXRpYWxpemUgU1BEIGluZm9mcmFtZTogJXpkXG4iLAorCQkJZXJyKTsK KwkJcmV0dXJuIGVycjsKKwl9CisKKwllcnIgPSBoZG1pX3NwZF9pbmZvZnJhbWVfcGFjaygmZnJh bWUsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpOworCWlmIChlcnIgPCAwKSB7CisJCWRldl9lcnIo aGRtaS0+ZGV2LCAiRmFpbGVkIHRvIHBhY2sgU0RQIGluZm9mcmFtZTogJXpkXG4iLCBlcnIpOwor CQlyZXR1cm4gZXJyOworCX0KKworCW10a19oZG1pX2h3X3NlbmRfaW5mb19mcmFtZShoZG1pLCBi dWZmZXIsIHNpemVvZihidWZmZXIpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdGtf aGRtaV9zZXR1cF9hdWRpb19pbmZvZnJhbWUoc3RydWN0IG10a19oZG1pICpoZG1pKQoreworCXN0 cnVjdCBoZG1pX2F1ZGlvX2luZm9mcmFtZSBmcmFtZTsKKwl1OCBidWZmZXJbMTRdOworCXNzaXpl X3QgZXJyOworCisJZXJyID0gaGRtaV9hdWRpb19pbmZvZnJhbWVfaW5pdCgmZnJhbWUpOworCWlm IChlcnIgPCAwKSB7CisJCWRldl9lcnIoaGRtaS0+ZGV2LCAiRmFpbGVkIHRvIHNldHVwIGF1ZGlv IGluZm9mcmFtZTogJXpkXG4iLAorCQkJZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlmcmFt ZS5jb2RpbmdfdHlwZSA9IEhETUlfQVVESU9fQ09ESU5HX1RZUEVfU1RSRUFNOworCWZyYW1lLnNh bXBsZV9mcmVxdWVuY3kgPSBIRE1JX0FVRElPX1NBTVBMRV9GUkVRVUVOQ1lfU1RSRUFNOworCWZy YW1lLnNhbXBsZV9zaXplID0gSERNSV9BVURJT19TQU1QTEVfU0laRV9TVFJFQU07CisJZnJhbWUu Y2hhbm5lbHMgPQorCSAgICBtdGtfaGRtaV9hdWRfZ2V0X2NobmxfY291bnQoCisJICAgIGhkbWkt PmF1ZF9wYXJhbS5hdWRfaW5wdXRfY2hhbl90eXBlKTsKKworCWVyciA9IGhkbWlfYXVkaW9faW5m b2ZyYW1lX3BhY2soJmZyYW1lLCBidWZmZXIsIHNpemVvZihidWZmZXIpKTsKKwlpZiAoZXJyIDwg MCkgeworCQlkZXZfZXJyKGhkbWktPmRldiwgIkZhaWxlZCB0byBwYWNrIGF1ZGlvIGluZm9mcmFt ZTogJXpkXG4iLAorCQkJZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwltdGtfaGRtaV9od19z ZW5kX2luZm9fZnJhbWUoaGRtaSwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSk7CisJcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyBpbnQgbXRrX2hkbWlfc2V0dXBfdmVuZG9yX3NwZWNpZmljX2luZm9mcmFt ZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksCisJCQkJCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAq bW9kZSkKK3sKKwlzdHJ1Y3QgaGRtaV92ZW5kb3JfaW5mb2ZyYW1lIGZyYW1lOworCXU4IGJ1ZmZl clsxMF07CisJc3NpemVfdCBlcnI7CisKKwllcnIgPSBkcm1faGRtaV92ZW5kb3JfaW5mb2ZyYW1l X2Zyb21fZGlzcGxheV9tb2RlKCZmcmFtZSwgbW9kZSk7CisJaWYgKGVycikgeworCQlkZXZfZXJy KGhkbWktPmRldiwKKwkJCSJGYWlsZWQgdG8gZ2V0IHZlbmRvciBpbmZvZnJhbWUgZnJvbSBtb2Rl OiAlemRcbiIsIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCisJZXJyID0gaGRtaV92ZW5kb3Jf aW5mb2ZyYW1lX3BhY2soJmZyYW1lLCBidWZmZXIsIHNpemVvZihidWZmZXIpKTsKKwlpZiAoZXJy KSB7CisJCWRldl9lcnIoaGRtaS0+ZGV2LCAiRmFpbGVkIHRvIHBhY2sgdmVuZG9yIGluZm9mcmFt ZTogJXpkXG4iLAorCQkJZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwltdGtfaGRtaV9od19z ZW5kX2luZm9fZnJhbWUoaGRtaSwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSk7CisJcmV0dXJuIDA7 Cit9CisKK2ludCBtdGtfaGRtaV9ocGRfaGlnaChzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkpCit7CisJ cmV0dXJuIGhkbWktPmNlY19kZXYgPyBtdGtfY2VjX2hwZF9oaWdoKGhkbWktPmNlY19kZXYpIDog ZmFsc2U7Cit9CisKK2ludCBtdGtfaGRtaV9vdXRwdXRfaW5pdChzdHJ1Y3QgbXRrX2hkbWkgKmhk bWkpCit7CisJc3RydWN0IGhkbWlfYXVkaW9fcGFyYW0gKmF1ZF9wYXJhbSA9ICZoZG1pLT5hdWRf cGFyYW07CisKKwlpZiAoaGRtaS0+aW5pdCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwloZG1pLT5j c3AgPSBIRE1JX0NPTE9SU1BBQ0VfUkdCOworCWhkbWktPm91dHB1dCA9IHRydWU7CisJYXVkX3Bh cmFtLT5hdWRfY29kZWMgPSBIRE1JX0FVRElPX0NPRElOR19UWVBFX1BDTTsKKwlhdWRfcGFyYW0t PmF1ZF9oZG1pX2ZzID0gSERNSV9BVURJT19TQU1QTEVfRlJFUVVFTkNZXzQ4MDAwOworCWF1ZF9w YXJhbS0+YXVkX3NhbXBlX3NpemUgPSBIRE1JX0FVRElPX1NBTVBMRV9TSVpFXzE2OworCWF1ZF9w YXJhbS0+YXVkX2lucHV0X3R5cGUgPSBIRE1JX0FVRF9JTlBVVF9JMlM7CisJYXVkX3BhcmFtLT5h dWRfaTJzX2ZtdCA9IEhETUlfSTJTX01PREVfSTJTXzI0QklUOworCWF1ZF9wYXJhbS0+YXVkX21j bGsgPSBIRE1JX0FVRF9NQ0xLXzEyOEZTOworCWF1ZF9wYXJhbS0+aWVjX2ZyYW1lX2ZzID0gSERN SV9JRUNfNDhLOworCWF1ZF9wYXJhbS0+YXVkX2lucHV0X2NoYW5fdHlwZSA9IEhETUlfQVVEX0NI QU5fVFlQRV8yXzA7CisJYXVkX3BhcmFtLT5oZG1pX2xfY2hhbm5lbF9zdGF0ZVsyXSA9IDI7CisJ YXVkX3BhcmFtLT5oZG1pX3JfY2hhbm5lbF9zdGF0ZVsyXSA9IDI7CisJaGRtaS0+aW5pdCA9IHRy dWU7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBtdGtfaGRtaV9wb3dlcl9vbihzdHJ1Y3QgbXRr X2hkbWkgKmhkbWkpCit7CisJbXRrX2hkbWlfaHdfbWFrZV9yZWdfd3JpdGFibGUoaGRtaSwgdHJ1 ZSk7CisJbXRrX2hkbWlfaHdfMXA0X3ZlcnNpb25fZW5hYmxlKGhkbWksIHRydWUpOworfQorCit2 b2lkIG10a19oZG1pX3Bvd2VyX29mZihzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkpCit7CisJbXRrX2hk bWlfaHdfMXA0X3ZlcnNpb25fZW5hYmxlKGhkbWksIHRydWUpOworCW10a19oZG1pX2h3X21ha2Vf cmVnX3dyaXRhYmxlKGhkbWksIGZhbHNlKTsKK30KKworaW50IG10a19oZG1pX291dHB1dF9zZXRf ZGlzcGxheV9tb2RlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwKKwkJCQkgICAgIHN0cnVjdCBkcm1f ZGlzcGxheV9tb2RlICptb2RlKQoreworCWludCByZXQ7CisKKwlpZiAoIWhkbWktPmluaXQpIHsK KwkJZGV2X2VycihoZG1pLT5kZXYsICJkb2Vzbid0IGluaXQgaGRtaSBjb250cm9sIGNvbnRleHQh XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbXRrX2hkbWlfaHdfdmlkX2JsYWNrKGhk bWksIHRydWUpOworCW10a19oZG1pX2h3X2F1ZF9tdXRlKGhkbWksIHRydWUpOworCW10a19oZG1p X3NldHVwX2F2X211dGVfcGFja2V0KGhkbWkpOworCXBoeV9wb3dlcl9vZmYoaGRtaS0+cGh5KTsK KworCXJldCA9IG10a19oZG1pX3ZpZGVvX2NoYW5nZV92cGxsKGhkbWksCisJCQkJCSBtb2RlLT5j bG9jayAqIDEwMDApOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihoZG1pLT5kZXYsICJGYWlsZWQg dG8gc2V0IHZwbGw6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwltdGtfaGRtaV92 aWRlb19zZXRfZGlzcGxheV9tb2RlKGhkbWksIG1vZGUpOworCisJcGh5X3Bvd2VyX29uKGhkbWkt PnBoeSk7CisJbXRrX2hkbWlfYXVkX291dHB1dF9jb25maWcoaGRtaSwgbW9kZSk7CisKKwltdGtf aGRtaV9zZXR1cF9hdWRpb19pbmZvZnJhbWUoaGRtaSk7CisJbXRrX2hkbWlfc2V0dXBfYXZpX2lu Zm9mcmFtZShoZG1pLCBtb2RlKTsKKwltdGtfaGRtaV9zZXR1cF9zcGRfaW5mb2ZyYW1lKGhkbWks ICJtZWRpYXRlayIsICJjaHJvbWVib29rIik7CisJaWYgKG1vZGUtPmZsYWdzICYgRFJNX01PREVf RkxBR18zRF9NQVNLKQorCQltdGtfaGRtaV9zZXR1cF92ZW5kb3Jfc3BlY2lmaWNfaW5mb2ZyYW1l KGhkbWksIG1vZGUpOworCisJbXRrX2hkbWlfaHdfdmlkX2JsYWNrKGhkbWksIGZhbHNlKTsKKwlt dGtfaGRtaV9od19hdWRfbXV0ZShoZG1pLCBmYWxzZSk7CisJbXRrX2hkbWlfc2V0dXBfYXZfdW5t dXRlX3BhY2tldChoZG1pKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL21lZGlhdGVrL210a19oZG1pLmggYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRr X2hkbWkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDAzOTE1Ci0tLSAv ZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19oZG1pLmgKQEAgLTAs MCArMSwyMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQgTWVkaWFUZWsgSW5jLgorICog QXV0aG9yOiBKaWUgUWl1IDxqaWUucWl1QG1lZGlhdGVrLmNvbT4KKyAqCisgKiBUaGlzIHByb2dy YW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlm eQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0 IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0 IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpZm5kZWYgX01US19IRE1JX0NU UkxfSAorI2RlZmluZSBfTVRLX0hETUlfQ1RSTF9ICisKKyNpbmNsdWRlIDxkcm0vZHJtX2NydGMu aD4KKyNpbmNsdWRlIDxsaW51eC9oZG1pLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNs dWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitzdHJ1Y3Qg Y2xrOworc3RydWN0IGRldmljZTsKK3N0cnVjdCBkZXZpY2Vfbm9kZTsKK3N0cnVjdCBpMmNfYWRh cHRlcjsKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2U7CitzdHJ1Y3QgcGh5Oworc3RydWN0IHJlZ21h cDsKKworZW51bSBtdGtfaGRtaV9jbGtfaWQgeworCU1US19IRE1JX0NMS19IRE1JX1BJWEVMLAor CU1US19IRE1JX0NMS19IRE1JX1BMTCwKKwlNVEtfSERNSV9DTEtfQVVEX0JDTEssCisJTVRLX0hE TUlfQ0xLX0FVRF9TUERJRiwKKwlNVEtfSERNSV9DTEtfQ09VTlQKK307CisKK2VudW0gaGRtaV9h dWRfaW5wdXRfdHlwZSB7CisJSERNSV9BVURfSU5QVVRfSTJTID0gMCwKKwlIRE1JX0FVRF9JTlBV VF9TUERJRiwKK307CisKK2VudW0gaGRtaV9hdWRfaTJzX2ZtdCB7CisJSERNSV9JMlNfTU9ERV9S SlRfMjRCSVQgPSAwLAorCUhETUlfSTJTX01PREVfUkpUXzE2QklULAorCUhETUlfSTJTX01PREVf TEpUXzI0QklULAorCUhETUlfSTJTX01PREVfTEpUXzE2QklULAorCUhETUlfSTJTX01PREVfSTJT XzI0QklULAorCUhETUlfSTJTX01PREVfSTJTXzE2QklUCit9OworCitlbnVtIGhkbWlfYXVkX21j bGsgeworCUhETUlfQVVEX01DTEtfMTI4RlMsCisJSERNSV9BVURfTUNMS18xOTJGUywKKwlIRE1J X0FVRF9NQ0xLXzI1NkZTLAorCUhETUlfQVVEX01DTEtfMzg0RlMsCisJSERNSV9BVURfTUNMS181 MTJGUywKKwlIRE1JX0FVRF9NQ0xLXzc2OEZTLAorCUhETUlfQVVEX01DTEtfMTE1MkZTLAorfTsK KworZW51bSBoZG1pX2F1ZF9pZWNfZnJhbWVfcmF0ZSB7CisJSERNSV9JRUNfMzJLID0gMCwKKwlI RE1JX0lFQ185NkssCisJSERNSV9JRUNfMTkySywKKwlIRE1JX0lFQ183NjhLLAorCUhETUlfSUVD XzQ0SywKKwlIRE1JX0lFQ184OEssCisJSERNSV9JRUNfMTc2SywKKwlIRE1JX0lFQ183MDVLLAor CUhETUlfSUVDXzE2SywKKwlIRE1JX0lFQ18yMkssCisJSERNSV9JRUNfMjRLLAorCUhETUlfSUVD XzQ4SywKK307CisKK2VudW0gaGRtaV9hdWRfY2hhbm5lbF90eXBlIHsKKwlIRE1JX0FVRF9DSEFO X1RZUEVfMV8wID0gMCwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfMV8xLAorCUhETUlfQVVEX0NIQU5f VFlQRV8yXzAsCisJSERNSV9BVURfQ0hBTl9UWVBFXzJfMSwKKwlIRE1JX0FVRF9DSEFOX1RZUEVf M18wLAorCUhETUlfQVVEX0NIQU5fVFlQRV8zXzEsCisJSERNSV9BVURfQ0hBTl9UWVBFXzRfMCwK KwlIRE1JX0FVRF9DSEFOX1RZUEVfNF8xLAorCUhETUlfQVVEX0NIQU5fVFlQRV81XzAsCisJSERN SV9BVURfQ0hBTl9UWVBFXzVfMSwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfNl8wLAorCUhETUlfQVVE X0NIQU5fVFlQRV82XzEsCisJSERNSV9BVURfQ0hBTl9UWVBFXzdfMCwKKwlIRE1JX0FVRF9DSEFO X1RZUEVfN18xLAorCUhETUlfQVVEX0NIQU5fVFlQRV8zXzBfTFJTLAorCUhETUlfQVVEX0NIQU5f VFlQRV8zXzFfTFJTLAorCUhETUlfQVVEX0NIQU5fVFlQRV80XzBfQ0xSUywKKwlIRE1JX0FVRF9D SEFOX1RZUEVfNF8xX0NMUlMsCisJSERNSV9BVURfQ0hBTl9UWVBFXzZfMV9DUywKKwlIRE1JX0FV RF9DSEFOX1RZUEVfNl8xX0NILAorCUhETUlfQVVEX0NIQU5fVFlQRV82XzFfT0gsCisJSERNSV9B VURfQ0hBTl9UWVBFXzZfMV9DSFIsCisJSERNSV9BVURfQ0hBTl9UWVBFXzdfMV9MSF9SSCwKKwlI RE1JX0FVRF9DSEFOX1RZUEVfN18xX0xTUl9SU1IsCisJSERNSV9BVURfQ0hBTl9UWVBFXzdfMV9M Q19SQywKKwlIRE1JX0FVRF9DSEFOX1RZUEVfN18xX0xXX1JXLAorCUhETUlfQVVEX0NIQU5fVFlQ RV83XzFfTFNEX1JTRCwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfN18xX0xTU19SU1MsCisJSERNSV9B VURfQ0hBTl9UWVBFXzdfMV9MSFNfUkhTLAorCUhETUlfQVVEX0NIQU5fVFlQRV83XzFfQ1NfQ0gs CisJSERNSV9BVURfQ0hBTl9UWVBFXzdfMV9DU19PSCwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfN18x X0NTX0NIUiwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfN18xX0NIX09ILAorCUhETUlfQVVEX0NIQU5f VFlQRV83XzFfQ0hfQ0hSLAorCUhETUlfQVVEX0NIQU5fVFlQRV83XzFfT0hfQ0hSLAorCUhETUlf QVVEX0NIQU5fVFlQRV83XzFfTFNTX1JTU19MU1JfUlNSLAorCUhETUlfQVVEX0NIQU5fVFlQRV82 XzBfQ1MsCisJSERNSV9BVURfQ0hBTl9UWVBFXzZfMF9DSCwKKwlIRE1JX0FVRF9DSEFOX1RZUEVf Nl8wX09ILAorCUhETUlfQVVEX0NIQU5fVFlQRV82XzBfQ0hSLAorCUhETUlfQVVEX0NIQU5fVFlQ RV83XzBfTEhfUkgsCisJSERNSV9BVURfQ0hBTl9UWVBFXzdfMF9MU1JfUlNSLAorCUhETUlfQVVE X0NIQU5fVFlQRV83XzBfTENfUkMsCisJSERNSV9BVURfQ0hBTl9UWVBFXzdfMF9MV19SVywKKwlI RE1JX0FVRF9DSEFOX1RZUEVfN18wX0xTRF9SU0QsCisJSERNSV9BVURfQ0hBTl9UWVBFXzdfMF9M U1NfUlNTLAorCUhETUlfQVVEX0NIQU5fVFlQRV83XzBfTEhTX1JIUywKKwlIRE1JX0FVRF9DSEFO X1RZUEVfN18wX0NTX0NILAorCUhETUlfQVVEX0NIQU5fVFlQRV83XzBfQ1NfT0gsCisJSERNSV9B VURfQ0hBTl9UWVBFXzdfMF9DU19DSFIsCisJSERNSV9BVURfQ0hBTl9UWVBFXzdfMF9DSF9PSCwK KwlIRE1JX0FVRF9DSEFOX1RZUEVfN18wX0NIX0NIUiwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfN18w X09IX0NIUiwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfN18wX0xTU19SU1NfTFNSX1JTUiwKKwlIRE1J X0FVRF9DSEFOX1RZUEVfOF8wX0xIX1JIX0NTLAorCUhETUlfQVVEX0NIQU5fVFlQRV9VTktOT1dO ID0gMHhGRgorfTsKKworZW51bSBoZG1pX2F1ZF9jaGFubmVsX3N3YXBfdHlwZSB7CisJSERNSV9B VURfU1dBUF9MUiwKKwlIRE1JX0FVRF9TV0FQX0xGRV9DQywKKwlIRE1JX0FVRF9TV0FQX0xTUlMs CisJSERNSV9BVURfU1dBUF9STFNfUlJTLAorCUhETUlfQVVEX1NXQVBfTFJfU1RBVFVTLAorfTsK Kworc3RydWN0IGhkbWlfYXVkaW9fcGFyYW0geworCWVudW0gaGRtaV9hdWRpb19jb2RpbmdfdHlw ZSBhdWRfY29kZWM7CisJZW51bSBoZG1pX2F1ZGlvX3NhbXBsZV9mcmVxdWVuY3kgYXVkX2hkbWlf ZnM7CisJZW51bSBoZG1pX2F1ZGlvX3NhbXBsZV9zaXplIGF1ZF9zYW1wZV9zaXplOworCWVudW0g aGRtaV9hdWRfaW5wdXRfdHlwZSBhdWRfaW5wdXRfdHlwZTsKKwllbnVtIGhkbWlfYXVkX2kyc19m bXQgYXVkX2kyc19mbXQ7CisJZW51bSBoZG1pX2F1ZF9tY2xrIGF1ZF9tY2xrOworCWVudW0gaGRt aV9hdWRfaWVjX2ZyYW1lX3JhdGUgaWVjX2ZyYW1lX2ZzOworCWVudW0gaGRtaV9hdWRfY2hhbm5l bF90eXBlIGF1ZF9pbnB1dF9jaGFuX3R5cGU7CisJdTggaGRtaV9sX2NoYW5uZWxfc3RhdGVbNl07 CisJdTggaGRtaV9yX2NoYW5uZWxfc3RhdGVbNl07Cit9OworCitzdHJ1Y3QgbXRrX2hkbWkgewor CXN0cnVjdCBkcm1fYnJpZGdlIGJyaWRnZTsKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciBjb25uOwor CXN0cnVjdCBkZXZpY2UgKmRldjsKKwlzdHJ1Y3QgcGh5ICpwaHk7CisJc3RydWN0IGRldmljZSAq Y2VjX2RldjsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmRkY19hZHB0OworCXN0cnVjdCBjbGsgKmNs a1tNVEtfSERNSV9DTEtfQ09VTlRdOworI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKQorCXN0 cnVjdCBkZW50cnkgKmRlYnVnZnM7CisjZW5kaWYKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICph dWRpb19wZGV2OworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlIG1vZGU7CisJYm9vbCBkdmlfbW9k ZTsKKwl1MzIgbWluX2Nsb2NrOworCXUzMiBtYXhfY2xvY2s7CisJdTMyIG1heF9oZGlzcGxheTsK Kwl1MzIgbWF4X3ZkaXNwbGF5OworCXUzMiBpYmlhczsKKwl1MzIgaWJpYXNfdXA7CisJc3RydWN0 IHJlZ21hcCAqc3lzX3JlZ21hcDsKKwl1bnNpZ25lZCBpbnQgc3lzX29mZnNldDsKKwl2b2lkIF9f aW9tZW0gKnJlZ3M7CisJYm9vbCBpbml0OworCWVudW0gaGRtaV9jb2xvcnNwYWNlIGNzcDsKKwli b29sIGF1ZGlvX2VuYWJsZTsKKwlib29sIG91dHB1dDsKKwlzdHJ1Y3QgaGRtaV9hdWRpb19wYXJh bSBhdWRfcGFyYW07Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtdGtfaGRtaSAqaGRtaV9j dHhfZnJvbV9icmlkZ2Uoc3RydWN0IGRybV9icmlkZ2UgKmIpCit7CisJcmV0dXJuIGNvbnRhaW5l cl9vZihiLCBzdHJ1Y3QgbXRrX2hkbWksIGJyaWRnZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3Ry dWN0IG10a19oZG1pICpoZG1pX2N0eF9mcm9tX2Nvbm4oc3RydWN0IGRybV9jb25uZWN0b3IgKmMp Cit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihjLCBzdHJ1Y3QgbXRrX2hkbWksIGNvbm4pOworfQor CitpbnQgbXRrX2hkbWlfb3V0cHV0X2luaXQoc3RydWN0IG10a19oZG1pICpoZG1pKTsKK2ludCBt dGtfaGRtaV9ocGRfaGlnaChzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkpOworaW50IG10a19oZG1pX291 dHB1dF9zZXRfZGlzcGxheV9tb2RlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwKKwkJCQkgICAgIHN0 cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKTsKK3ZvaWQgbXRrX2hkbWlfcG93ZXJfb24oc3Ry dWN0IG10a19oZG1pICpoZG1pKTsKK3ZvaWQgbXRrX2hkbWlfcG93ZXJfb2ZmKHN0cnVjdCBtdGtf aGRtaSAqaGRtaSk7CisjaWYgZGVmaW5lZChDT05GSUdfREVCVUdfRlMpCitpbnQgbXRrX2RybV9o ZG1pX2RlYnVnZnNfaW5pdChzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkpOwordm9pZCBtdGtfZHJtX2hk bWlfZGVidWdmc19leGl0KHN0cnVjdCBtdGtfaGRtaSAqaGRtaSk7CisjZWxzZQoraW50IG10a19k cm1faGRtaV9kZWJ1Z2ZzX2luaXQoc3RydWN0IG10a19oZG1pICpoZG1pKQoreworCXJldHVybiAw OworfQorCit2b2lkIG10a19kcm1faGRtaV9kZWJ1Z2ZzX2V4aXQoc3RydWN0IG10a19oZG1pICpo ZG1pKQoreworfQorI2VuZGlmIC8qIENPTkZJR19ERUJVR19GUyAqLworCitleHRlcm4gc3RydWN0 IHBsYXRmb3JtX2RyaXZlciBtdGtfY2VjX2RyaXZlcjsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1f ZHJpdmVyIG10a19oZG1pX2RkY19kcml2ZXI7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RyaXZl ciBtdGtfaGRtaV9waHlfZHJpdmVyOworI2VuZGlmIC8qIF9NVEtfSERNSV9DVFJMX0ggKi8KZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaV9kZGNfZHJ2LmMgYi9k cml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2hkbWlfZGRjX2Rydi5jCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyZTU0ODcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJz L2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2hkbWlfZGRjX2Rydi5jCkBAIC0wLDAgKzEsMzYyIEBACisv KgorICogQ29weXJpZ2h0IChjKSAyMDE0IE1lZGlhVGVrIEluYy4KKyAqIEF1dGhvcjogSmllIFFp dSA8amllLnFpdUBtZWRpYXRlay5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29m dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFz CisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBU aGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm b3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVk ZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGlu dXgvdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZXJy bm8uaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9k ZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+ CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+Cisj aW5jbHVkZSA8bGludXgvb2ZfaXJxLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4K KworI2RlZmluZSBTSUYxX0NMT0sJCSgyODgpCisjZGVmaW5lIEREQ19ERENNQ1RMMAkJKDB4MCkK KyNkZWZpbmUgRERDTV9PRFJBSU4JCQlCSVQoMzEpCisjZGVmaW5lIEREQ01fQ0xLX0RJVl9PRkZT RVQJCSgxNikKKyNkZWZpbmUgRERDTV9DTEtfRElWX01BU0sJCSgweGZmZiA8PCAxNikKKyNkZWZp bmUgRERDTV9DU19TVEFUVVMJCQlCSVQoNCkKKyNkZWZpbmUgRERDTV9TQ0xfU1RBVEUJCQlCSVQo MykKKyNkZWZpbmUgRERDTV9TREFfU1RBVEUJCQlCSVQoMikKKyNkZWZpbmUgRERDTV9TTTBFTgkJ CUJJVCgxKQorI2RlZmluZSBERENNX1NDTF9TVFJFQ0gJCQlCSVQoMCkKKyNkZWZpbmUgRERDX0RE Q01DVEwxCQkoMHg0KQorI2RlZmluZSBERENNX0FDS19PRkZTRVQJCQkoMTYpCisjZGVmaW5lIERE Q01fQUNLX01BU0sJCQkoMHhmZiA8PCAxNikKKyNkZWZpbmUgRERDTV9QR0xFTl9PRkZTRVQJCSg4 KQorI2RlZmluZSBERENNX1BHTEVOX01BU0sJCQkoMHg3IDw8IDgpCisjZGVmaW5lIEREQ01fU0lG X01PREVfT0ZGU0VUCQkoNCkKKyNkZWZpbmUgRERDTV9TSUZfTU9ERV9NQVNLCQkoMHg3IDw8IDQp CisjZGVmaW5lIEREQ01fU1RBUlQJCQkoMHgxKQorI2RlZmluZSBERENNX1dSSVRFX0RBVEEJCQko MHgyKQorI2RlZmluZSBERENNX1NUT1AJCQkoMHgzKQorI2RlZmluZSBERENNX1JFQURfREFUQV9O T19BQ0sJCSgweDQpCisjZGVmaW5lIEREQ01fUkVBRF9EQVRBX0FDSwkJKDB4NSkKKyNkZWZpbmUg RERDTV9UUkkJCQlCSVQoMCkKKyNkZWZpbmUgRERDX0REQ01EMAkJKDB4OCkKKyNkZWZpbmUgRERD TV9EQVRBMwkJCSgweGZmIDw8IDI0KQorI2RlZmluZSBERENNX0RBVEEyCQkJKDB4ZmYgPDwgMTYp CisjZGVmaW5lIEREQ01fREFUQTEJCQkoMHhmZiA8PCA4KQorI2RlZmluZSBERENNX0RBVEEwCQkJ KDB4ZmYgPDwgMCkKKyNkZWZpbmUgRERDX0REQ01EMQkJKDB4YykKKyNkZWZpbmUgRERDTV9EQVRB NwkJCSgweGZmIDw8IDI0KQorI2RlZmluZSBERENNX0RBVEE2CQkJKDB4ZmYgPDwgMTYpCisjZGVm aW5lIEREQ01fREFUQTUJCQkoMHhmZiA8PCA4KQorI2RlZmluZSBERENNX0RBVEE0CQkJKDB4ZmYg PDwgMCkKKworc3RydWN0IG10a19oZG1pX2kyYyB7CisJc3RydWN0IGkyY19hZGFwdGVyIGFkYXA7 CisJc3RydWN0IGNsayAqY2xrOworCXZvaWQgX19pb21lbSAqcmVnczsKK307CisKK3N0YXRpYyBp bmxpbmUgdm9pZCBzaWZfc2V0X2JpdChzdHJ1Y3QgbXRrX2hkbWlfaTJjICppMmMsIHVuc2lnbmVk IGludCBvZmZzZXQsCisJCQkgICAgICAgdW5zaWduZWQgaW50IHZhbCkKK3sKKwl3cml0ZWwocmVh ZGwoaTJjLT5yZWdzICsgb2Zmc2V0KSB8IHZhbCwgaTJjLT5yZWdzICsgb2Zmc2V0KTsKK30KKwor c3RhdGljIGlubGluZSB2b2lkIHNpZl9jbHJfYml0KHN0cnVjdCBtdGtfaGRtaV9pMmMgKmkyYywg dW5zaWduZWQgaW50IG9mZnNldCwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgdmFsKQoreworCXdy aXRlbChyZWFkbChpMmMtPnJlZ3MgKyBvZmZzZXQpICYgfnZhbCwgaTJjLT5yZWdzICsgb2Zmc2V0 KTsKK30KKworc3RhdGljIGlubGluZSBib29sIHNpZl9iaXRfaXNfc2V0KHN0cnVjdCBtdGtfaGRt aV9pMmMgKmkyYywgdW5zaWduZWQgaW50IG9mZnNldCwKKwkJCQkgIHVuc2lnbmVkIGludCB2YWwp Cit7CisJcmV0dXJuIChyZWFkbChpMmMtPnJlZ3MgKyBvZmZzZXQpICYgdmFsKSA9PSB2YWw7Cit9 CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzaWZfd3JpdGVfbWFzayhzdHJ1Y3QgbXRrX2hkbWlfaTJj ICppMmMsIHVuc2lnbmVkIGludCBvZmZzZXQsCisJCQkJICB1bnNpZ25lZCBpbnQgbWFzaywgdW5z aWduZWQgaW50IHNoaWZ0LAorCQkJCSAgdW5zaWduZWQgaW50IHZhbCkKK3sKKwl1bnNpZ25lZCBp bnQgdG1wOworCisJdG1wID0gcmVhZGwoaTJjLT5yZWdzICsgb2Zmc2V0KTsKKwl0bXAgJj0gfm1h c2s7CisJdG1wIHw9ICh2YWwgPDwgc2hpZnQpICYgbWFzazsKKwl3cml0ZWwodG1wLCBpMmMtPnJl Z3MgKyBvZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBzaWZfcmVhZF9t YXNrKHN0cnVjdCBtdGtfaGRtaV9pMmMgKmkyYywKKwkJCQkJIHVuc2lnbmVkIGludCBvZmZzZXQs IHVuc2lnbmVkIGludCBtYXNrLAorCQkJCQkgdW5zaWduZWQgaW50IHNoaWZ0KQoreworCXJldHVy biAocmVhZGwoaTJjLT5yZWdzICsgb2Zmc2V0KSAmIG1hc2spID4+IHNoaWZ0OworfQorCitzdGF0 aWMgdm9pZCBkZGNtX3RyaWdnZXJfbW9kZShzdHJ1Y3QgbXRrX2hkbWlfaTJjICppMmMsIGludCBt b2RlKQoreworCWludCB0aW1lb3V0ID0gMjAgKiAxMDAwOworCisJc2lmX3dyaXRlX21hc2soaTJj LCBERENfRERDTUNUTDEsIEREQ01fU0lGX01PREVfTUFTSywKKwkJICAgICAgIEREQ01fU0lGX01P REVfT0ZGU0VULCBtb2RlKTsKKwlzaWZfc2V0X2JpdChpMmMsIEREQ19ERENNQ1RMMSwgRERDTV9U UkkpOworCXdoaWxlIChzaWZfYml0X2lzX3NldChpMmMsIEREQ19ERENNQ1RMMSwgRERDTV9UUkkp KSB7CisJCXRpbWVvdXQgLT0gMjsKKwkJdWRlbGF5KDIpOworCQlpZiAodGltZW91dCA8PSAwKQor CQkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW50IG10a19oZG1pX2kyY19yZWFkX21zZyhzdHJ1 Y3QgbXRrX2hkbWlfaTJjICppMmMsIHN0cnVjdCBpMmNfbXNnICptc2cpCit7CisJc3RydWN0IGRl dmljZSAqZGV2ID0gaTJjLT5hZGFwLmRldi5wYXJlbnQ7CisJdTMyIHJlbWFpbl9jb3VudCwgYWNr X2NvdW50LCBhY2tfZmluYWwsIHJlYWRfY291bnQsIHRlbXBfY291bnQ7CisJdTMyIGluZGV4ID0g MDsKKwl1MzIgYWNrOworCWludCBpOworCisJZGRjbV90cmlnZ2VyX21vZGUoaTJjLCBERENNX1NU QVJUKTsKKwlzaWZfd3JpdGVfbWFzayhpMmMsIEREQ19ERENNRDAsIDB4ZmYsIDAsIChtc2ctPmFk ZHIgPDwgMSkgfCAweDAxKTsKKwlzaWZfd3JpdGVfbWFzayhpMmMsIEREQ19ERENNQ1RMMSwgRERD TV9QR0xFTl9NQVNLLCBERENNX1BHTEVOX09GRlNFVCwKKwkJICAgICAgIDB4MDApOworCWRkY21f dHJpZ2dlcl9tb2RlKGkyYywgRERDTV9XUklURV9EQVRBKTsKKwlhY2sgPSBzaWZfcmVhZF9tYXNr KGkyYywgRERDX0REQ01DVEwxLCBERENNX0FDS19NQVNLLCBERENNX0FDS19PRkZTRVQpOworCWRl dl9kYmcoZGV2LCAiYWNrID0gMHgleFxuIiwgYWNrKTsKKwlpZiAoYWNrICE9IDB4MDEpIHsKKwkJ ZGV2X2VycihkZXYsICJpMmMgYWNrIGVyciFcbiIpOworCQlyZXR1cm4gLUVOWElPOworCX0KKwor CXJlbWFpbl9jb3VudCA9IG1zZy0+bGVuOworCWFja19jb3VudCA9IChtc2ctPmxlbiAtIDEpIC8g ODsKKwlhY2tfZmluYWwgPSAwOworCisJd2hpbGUgKHJlbWFpbl9jb3VudCA+IDApIHsKKwkJaWYg KGFja19jb3VudCA+IDApIHsKKwkJCXJlYWRfY291bnQgPSA4OworCQkJYWNrX2ZpbmFsID0gMDsK KwkJCWFja19jb3VudC0tOworCQl9IGVsc2UgeworCQkJcmVhZF9jb3VudCA9IHJlbWFpbl9jb3Vu dDsKKwkJCWFja19maW5hbCA9IDE7CisJCX0KKworCQlzaWZfd3JpdGVfbWFzayhpMmMsIEREQ19E RENNQ1RMMSwgRERDTV9QR0xFTl9NQVNLLAorCQkJICAgICAgIEREQ01fUEdMRU5fT0ZGU0VULCBy ZWFkX2NvdW50IC0gMSk7CisJCWRkY21fdHJpZ2dlcl9tb2RlKGkyYywgKGFja19maW5hbCA9PSAx KSA/CisJCQkJICBERENNX1JFQURfREFUQV9OT19BQ0sgOgorCQkJCSAgRERDTV9SRUFEX0RBVEFf QUNLKTsKKworCQlhY2sgPSBzaWZfcmVhZF9tYXNrKGkyYywgRERDX0REQ01DVEwxLCBERENNX0FD S19NQVNLLAorCQkJCSAgICBERENNX0FDS19PRkZTRVQpOworCQl0ZW1wX2NvdW50ID0gMDsKKwkJ d2hpbGUgKCgoYWNrICYgKDEgPDwgdGVtcF9jb3VudCkpICE9IDApICYmICh0ZW1wX2NvdW50IDwg OCkpCisJCQl0ZW1wX2NvdW50Kys7CisJCWlmICgoKGFja19maW5hbCA9PSAxKSAmJiAodGVtcF9j b3VudCAhPSAocmVhZF9jb3VudCAtIDEpKSkgfHwKKwkJICAgICgoYWNrX2ZpbmFsID09IDApICYm ICh0ZW1wX2NvdW50ICE9IHJlYWRfY291bnQpKSkgeworCQkJZGV2X2VycihkZXYsICJBZGRyZXNz IE5BQ0shIEFDSygweCV4KVxuIiwgYWNrKTsKKwkJCWJyZWFrOworCQl9CisKKwkJZm9yIChpID0g cmVhZF9jb3VudDsgaSA+PSAxOyBpLS0pIHsKKwkJCWludCBzaGlmdDsKKwkJCWludCBvZmZzZXQ7 CisKKwkJCWlmIChpID4gNCkgeworCQkJCW9mZnNldCA9IEREQ19ERENNRDE7CisJCQkJc2hpZnQg PSAoaSAtIDUpICogODsKKwkJCX0gZWxzZSB7CisJCQkJb2Zmc2V0ID0gRERDX0REQ01EMDsKKwkJ CQlzaGlmdCA9IChpIC0gMSkgKiA4OworCQkJfQorCisJCQltc2ctPmJ1ZltpbmRleCArIGkgLSAx XSA9IHNpZl9yZWFkX21hc2soaTJjLCBvZmZzZXQsCisJCQkJCQkJCTB4ZmYgPDwgc2hpZnQsCisJ CQkJCQkJCXNoaWZ0KTsKKwkJfQorCisJCXJlbWFpbl9jb3VudCAtPSByZWFkX2NvdW50OworCQlp bmRleCArPSByZWFkX2NvdW50OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10 a19oZG1pX2kyY193cml0ZV9tc2coc3RydWN0IG10a19oZG1pX2kyYyAqaTJjLCBzdHJ1Y3QgaTJj X21zZyAqbXNnKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGkyYy0+YWRhcC5kZXYucGFyZW50 OworCXUzMiBhY2s7CisKKwlkZGNtX3RyaWdnZXJfbW9kZShpMmMsIEREQ01fU1RBUlQpOworCXNp Zl93cml0ZV9tYXNrKGkyYywgRERDX0REQ01EMCwgRERDTV9EQVRBMCwgMCwgbXNnLT5hZGRyIDw8 IDEpOworCXNpZl93cml0ZV9tYXNrKGkyYywgRERDX0REQ01EMCwgRERDTV9EQVRBMSwgOCwgbXNn LT5idWZbMF0pOworCXNpZl93cml0ZV9tYXNrKGkyYywgRERDX0REQ01DVEwxLCBERENNX1BHTEVO X01BU0ssIEREQ01fUEdMRU5fT0ZGU0VULAorCQkgICAgICAgMHgxKTsKKwlkZGNtX3RyaWdnZXJf bW9kZShpMmMsIEREQ01fV1JJVEVfREFUQSk7CisKKwlhY2sgPSBzaWZfcmVhZF9tYXNrKGkyYywg RERDX0REQ01DVEwxLCBERENNX0FDS19NQVNLLCBERENNX0FDS19PRkZTRVQpOworCWRldl9kYmco ZGV2LCAiYWNrID0gJWRcbiIsIGFjayk7CisKKwlpZiAoYWNrICE9IDB4MDMpIHsKKwkJZGV2X2Vy cihkZXYsICJpMmMgYWNrIGVyciFcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlyZXR1cm4g MDsKK30KKworc3RhdGljIGludCBtdGtfaGRtaV9pMmNfeGZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIg KmFkYXB0ZXIsCisJCQkgICAgIHN0cnVjdCBpMmNfbXNnICptc2dzLCBpbnQgbnVtKQoreworCXN0 cnVjdCBtdGtfaGRtaV9pMmMgKmkyYyA9IGFkYXB0ZXItPmFsZ29fZGF0YTsKKwlzdHJ1Y3QgZGV2 aWNlICpkZXYgPSBhZGFwdGVyLT5kZXYucGFyZW50OworCWludCByZXQ7CisJaW50IGk7CisKKwlp ZiAoIWkyYykgeworCQlkZXZfZXJyKGRldiwgImludmFsaWQgYXJndW1lbnRzXG4iKTsKKwkJcmV0 dXJuIC1FSU5WQUw7CisJfQorCisJc2lmX3NldF9iaXQoaTJjLCBERENfRERDTUNUTDAsIEREQ01f U0NMX1NUUkVDSCk7CisJc2lmX3NldF9iaXQoaTJjLCBERENfRERDTUNUTDAsIEREQ01fU00wRU4p OworCXNpZl9jbHJfYml0KGkyYywgRERDX0REQ01DVEwwLCBERENNX09EUkFJTik7CisKKwlpZiAo c2lmX2JpdF9pc19zZXQoaTJjLCBERENfRERDTUNUTDEsIEREQ01fVFJJKSkgeworCQlkZXZfZXJy KGRldiwgImRkYyBsaW5lIGlzIGJ1c3khXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlz aWZfd3JpdGVfbWFzayhpMmMsIEREQ19ERENNQ1RMMCwgRERDTV9DTEtfRElWX01BU0ssCisJCSAg ICAgICBERENNX0NMS19ESVZfT0ZGU0VULCBTSUYxX0NMT0spOworCisJZm9yIChpID0gMDsgaSA8 IG51bTsgaSsrKSB7CisJCXN0cnVjdCBpMmNfbXNnICptc2cgPSAmbXNnc1tpXTsKKworCQlkZXZf ZGJnKGRldiwgImkyYyBtc2csIGFkcjoweCV4LCBmbGFnczolZCwgbGVuIDoweCV4XG4iLAorCQkJ bXNnLT5hZGRyLCBtc2ctPmZsYWdzLCBtc2ctPmxlbik7CisKKwkJaWYgKG1zZy0+ZmxhZ3MgJiBJ MkNfTV9SRCkKKwkJCXJldCA9IG10a19oZG1pX2kyY19yZWFkX21zZyhpMmMsIG1zZyk7CisJCWVs c2UKKwkJCXJldCA9IG10a19oZG1pX2kyY193cml0ZV9tc2coaTJjLCBtc2cpOworCQlpZiAocmV0 IDwgMCkKKwkJCWdvdG8geGZlcl9lbmQ7CisJfQorCisJZGRjbV90cmlnZ2VyX21vZGUoaTJjLCBE RENNX1NUT1ApOworCisJcmV0dXJuIGk7CisKK3hmZXJfZW5kOgorCWRkY21fdHJpZ2dlcl9tb2Rl KGkyYywgRERDTV9TVE9QKTsKKwlkZXZfZXJyKGRldiwgImRkYyBmYWlsZWQhXG4iKTsKKwlyZXR1 cm4gcmV0OworfQorCitzdGF0aWMgdTMyIG10a19oZG1pX2kyY19mdW5jKHN0cnVjdCBpMmNfYWRh cHRlciAqYWRhcHRlcikKK3sKKwlyZXR1cm4gSTJDX0ZVTkNfSTJDIHwgSTJDX0ZVTkNfU01CVVNf RU1VTDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfYWxnb3JpdGhtIG10a19oZG1pX2ky Y19hbGdvcml0aG0gPSB7CisJLm1hc3Rlcl94ZmVyID0gbXRrX2hkbWlfaTJjX3hmZXIsCisJLmZ1 bmN0aW9uYWxpdHkgPSBtdGtfaGRtaV9pMmNfZnVuYywKK307CisKK3N0YXRpYyBpbnQgbXRrX2hk bWlfaTJjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRl dmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgbXRrX2hkbWlfaTJjICppMmM7CisJc3Ry dWN0IHJlc291cmNlICptZW07CisJaW50IHJldDsKKworCWkyYyA9IGRldm1fa3phbGxvYyhkZXYs IHNpemVvZihzdHJ1Y3QgbXRrX2hkbWlfaTJjKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpMmMpCisJ CXJldHVybiAtRU5PTUVNOworCisJaTJjLT5jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAiZGRjLWky YyIpOworCWlmIChJU19FUlIoaTJjLT5jbGspKSB7CisJCWRldl9lcnIoZGV2LCAiZ2V0IGRkY19j bGsgZmFpbGVkIDogJXAgLFxuIiwgaTJjLT5jbGspOworCQlyZXR1cm4gUFRSX0VSUihpMmMtPmNs ayk7CisJfQorCisJbWVtID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0Vf TUVNLCAwKTsKKwlpMmMtPnJlZ3MgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoJnBkZXYtPmRldiwg bWVtKTsKKwlpZiAoSVNfRVJSKGkyYy0+cmVncykpIHsKKwkJZGV2X2VycihkZXYsICJnZXQgbWVt b3J5IHNvdXJjZSBmYWlsIVxuIik7CisJCXJldHVybiBQVFJfRVJSKGkyYy0+cmVncyk7CisJfQor CisJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGkyYy0+Y2xrKTsKKwlpZiAocmV0KSB7CisJCWRl dl9lcnIoZGV2LCAiZW5hYmxlIGRkYyBjbGsgZmFpbGVkIVxuIik7CisJCXJldHVybiByZXQ7CisJ fQorCisJc3RybGNweShpMmMtPmFkYXAubmFtZSwgIm1lZGlhdGVrLWhkbWktaTJjIiwgc2l6ZW9m KGkyYy0+YWRhcC5uYW1lKSk7CisJaTJjLT5hZGFwLm93bmVyID0gVEhJU19NT0RVTEU7CisJaTJj LT5hZGFwLmFsZ28gPSAmbXRrX2hkbWlfaTJjX2FsZ29yaXRobTsKKwlpMmMtPmFkYXAucmV0cmll cyA9IDM7CisJaTJjLT5hZGFwLmRldi5vZl9ub2RlID0gZGV2LT5vZl9ub2RlOworCWkyYy0+YWRh cC5hbGdvX2RhdGEgPSBpMmM7CisJaTJjLT5hZGFwLmRldi5wYXJlbnQgPSAmcGRldi0+ZGV2Owor CisJcmV0ID0gaTJjX2FkZF9hZGFwdGVyKCZpMmMtPmFkYXApOworCWlmIChyZXQgPCAwKSB7CisJ CWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGFkZCBidXMgdG8gaTJjIGNvcmVcbiIpOworCQlnb3Rv IGVycl9jbGtfZGlzYWJsZTsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBpMmMp OworCisJZGV2X2RiZyhkZXYsICJpMmMtPmFkYXA6ICVwXG4iLCAmaTJjLT5hZGFwKTsKKwlkZXZf ZGJnKGRldiwgImkyYy0+Y2xrOiAlcFxuIiwgaTJjLT5jbGspOworCWRldl9kYmcoZGV2LCAicGh5 c2ljYWwgYWRyOiAweCVsbHgsIGVuZDogMHglbGx4XG4iLCBtZW0tPnN0YXJ0LAorCQltZW0tPmVu ZCk7CisKKwlyZXR1cm4gMDsKKworZXJyX2Nsa19kaXNhYmxlOgorCWNsa19kaXNhYmxlX3VucHJl cGFyZShpMmMtPmNsayk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBtdGtfaGRtaV9p MmNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG10a19o ZG1pX2kyYyAqaTJjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwljbGtfZGlzYWJs ZV91bnByZXBhcmUoaTJjLT5jbGspOworCWkyY19kZWxfYWRhcHRlcigmaTJjLT5hZGFwKTsKKwor CXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtdGtfaGRt aV9pMmNfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1oZG1p LWRkYyIsIH0sCisJe30sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10a19oZG1pX2Rk Y19kcml2ZXIgPSB7CisJLnByb2JlID0gbXRrX2hkbWlfaTJjX3Byb2JlLAorCS5yZW1vdmUgPSBt dGtfaGRtaV9pMmNfcmVtb3ZlLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gIm1lZGlhdGVrLWhk bWktZGRjIiwKKwkJLm9mX21hdGNoX3RhYmxlID0gbXRrX2hkbWlfaTJjX21hdGNoLAorCX0sCit9 OworCitNT0RVTEVfQVVUSE9SKCJKaWUgUWl1IDxqaWUucWl1QG1lZGlhdGVrLmNvbT4iKTsKK01P RFVMRV9ERVNDUklQVElPTigiTWVkaWFUZWsgSERNSSBpMmMgRHJpdmVyIik7CitNT0RVTEVfTElD RU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRr X2hkbWlfaHcuYyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaV9ody5jCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5YzdmZmMKLS0tIC9kZXYvbnVsbAorKysg Yi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2hkbWlfaHcuYwpAQCAtMCwwICsxLDY1MiBA QAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBNZWRpYVRlayBJbmMuCisgKiBBdXRob3I6IEpp ZSBRaXUgPGppZS5xaXVAbWVkaWF0ZWsuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24g MiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgor ICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgIm10a19oZG1pX2h3LmgiCisjaW5j bHVkZSAibXRrX2hkbWlfcmVncy5oIgorI2luY2x1ZGUgIm10a19oZG1pLmgiCisKKyNpbmNsdWRl IDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4 L2hkbWkuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5o PgorCitzdGF0aWMgdTMyIG10a19oZG1pX3JlYWQoc3RydWN0IG10a19oZG1pICpoZG1pLCB1MzIg b2Zmc2V0KQoreworCXJldHVybiByZWFkbChoZG1pLT5yZWdzICsgb2Zmc2V0KTsKK30KKworc3Rh dGljIHZvaWQgbXRrX2hkbWlfd3JpdGUoc3RydWN0IG10a19oZG1pICpoZG1pLCB1MzIgb2Zmc2V0 LCB1MzIgdmFsKQoreworCXdyaXRlbCh2YWwsIGhkbWktPnJlZ3MgKyBvZmZzZXQpOworfQorCitz dGF0aWMgdm9pZCBtdGtfaGRtaV9tYXNrKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwgdTMyIG9mZnNl dCwgdTMyIHZhbCwgdTMyIG1hc2spCit7CisJdTMyIHRtcCA9IG10a19oZG1pX3JlYWQoaGRtaSwg b2Zmc2V0KSAmIH5tYXNrOworCisJdG1wIHw9ICh2YWwgJiBtYXNrKTsKKwltdGtfaGRtaV93cml0 ZShoZG1pLCBvZmZzZXQsIHRtcCk7Cit9CisKKyNkZWZpbmUgTkNUU19CWVRFUyAgICAgICAgICAw eDA3CisKK3ZvaWQgbXRrX2hkbWlfaHdfdmlkX2JsYWNrKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwK KwkJCSAgIGJvb2wgYmxhY2spCit7CisJbXRrX2hkbWlfbWFzayhoZG1pLCBWSURFT19DRkdfNCwg YmxhY2sgPyBHRU5fUkdCIDogTk9STUFMX1BBVEgsCisJCSAgICAgIFZJREVPX1NPVVJDRV9TRUwp OworfQorCit2b2lkIG10a19oZG1pX2h3X21ha2VfcmVnX3dyaXRhYmxlKHN0cnVjdCBtdGtfaGRt aSAqaGRtaSwgYm9vbCBlbmFibGUpCit7CisJcmVnbWFwX3VwZGF0ZV9iaXRzKGhkbWktPnN5c19y ZWdtYXAsIGhkbWktPnN5c19vZmZzZXQgKyBIRE1JX1NZU19DRkcyMCwKKwkJCSAgIEhETUlfUENM S19GUkVFX1JVTiwgZW5hYmxlID8gSERNSV9QQ0xLX0ZSRUVfUlVOIDogMCk7CisJcmVnbWFwX3Vw ZGF0ZV9iaXRzKGhkbWktPnN5c19yZWdtYXAsIGhkbWktPnN5c19vZmZzZXQgKyBIRE1JX1NZU19D RkcxQywKKwkJCSAgIEhETUlfT04gfCBBTkxHX09OLCBlbmFibGUgPyAoSERNSV9PTiB8IEFOTEdf T04pIDogMCk7Cit9CisKK3ZvaWQgbXRrX2hkbWlfaHdfMXA0X3ZlcnNpb25fZW5hYmxlKHN0cnVj dCBtdGtfaGRtaSAqaGRtaSwgYm9vbCBlbmFibGUpCit7CisJcmVnbWFwX3VwZGF0ZV9iaXRzKGhk bWktPnN5c19yZWdtYXAsIGhkbWktPnN5c19vZmZzZXQgKyBIRE1JX1NZU19DRkcyMCwKKwkJCSAg IEhETUkyUDBfRU4sIGVuYWJsZSA/IDAgOiBIRE1JMlAwX0VOKTsKK30KKwordm9pZCBtdGtfaGRt aV9od19hdWRfbXV0ZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksIGJvb2wgbXV0ZSkKK3sKKwltdGtf aGRtaV9tYXNrKGhkbWksIEdSTF9BVURJT19DRkcsIG11dGUgPyBBVURJT19aRVJPIDogMCwgQVVE SU9fWkVSTyk7Cit9CisKK3ZvaWQgbXRrX2hkbWlfaHdfcmVzZXQoc3RydWN0IG10a19oZG1pICpo ZG1pKQoreworCXJlZ21hcF91cGRhdGVfYml0cyhoZG1pLT5zeXNfcmVnbWFwLCBoZG1pLT5zeXNf b2Zmc2V0ICsgSERNSV9TWVNfQ0ZHMUMsCisJCQkgICBIRE1JX1JTVCwgSERNSV9SU1QpOworCXJl Z21hcF91cGRhdGVfYml0cyhoZG1pLT5zeXNfcmVnbWFwLCBoZG1pLT5zeXNfb2Zmc2V0ICsgSERN SV9TWVNfQ0ZHMUMsCisJCQkgICBIRE1JX1JTVCwgMCk7CisJbXRrX2hkbWlfbWFzayhoZG1pLCBH UkxfQ0ZHMywgMCwgQ0ZHM19DT05UUk9MX1BBQ0tFVF9ERUxBWSk7CisJcmVnbWFwX3VwZGF0ZV9i aXRzKGhkbWktPnN5c19yZWdtYXAsIGhkbWktPnN5c19vZmZzZXQgKyBIRE1JX1NZU19DRkcxQywK KwkJCSAgIEFOTEdfT04sIEFOTEdfT04pOworfQorCit2b2lkIG10a19oZG1pX2h3X2VuYWJsZV9u b3RpY2Uoc3RydWN0IG10a19oZG1pICpoZG1pLCBib29sIGVuYWJsZV9ub3RpY2UpCit7CisJbXRr X2hkbWlfbWFzayhoZG1pLCBHUkxfQ0ZHMiwgZW5hYmxlX25vdGljZSA/IENGRzJfTk9USUNFX0VO IDogMCwKKwkJICAgICAgQ0ZHMl9OT1RJQ0VfRU4pOworfQorCit2b2lkIG10a19oZG1pX2h3X3dy aXRlX2ludF9tYXNrKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwgdTMyIGludF9tYXNrKQoreworCW10 a19oZG1pX3dyaXRlKGhkbWksIEdSTF9JTlRfTUFTSywgaW50X21hc2spOworfQorCit2b2lkIG10 a19oZG1pX2h3X2VuYWJsZV9kdmlfbW9kZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksIGJvb2wgZW5h YmxlKQoreworCW10a19oZG1pX21hc2soaGRtaSwgR1JMX0NGRzEsIGVuYWJsZSA/IENGRzFfRFZJ IDogMCwgQ0ZHMV9EVkkpOworfQorCit2b2lkIG10a19oZG1pX2h3X3NlbmRfaW5mb19mcmFtZShz dHJ1Y3QgbXRrX2hkbWkgKmhkbWksIHU4ICpidWZmZXIsIHU4IGxlbikKK3sKKwl1MzIgY3RybF9y ZWcgPSBHUkxfQ1RSTDsKKwlpbnQgaTsKKwl1OCAqZnJhbWVfZGF0YTsKKwl1OCBmcmFtZV90eXBl OworCXU4IGZyYW1lX3ZlcjsKKwl1OCBmcmFtZV9sZW47CisJdTggY2hlY2tzdW07CisJaW50IGN0 cmxfZnJhbWVfZW4gPSAwOworCisJZnJhbWVfdHlwZSA9ICpidWZmZXI7CisJYnVmZmVyICs9IDE7 CisJZnJhbWVfdmVyID0gKmJ1ZmZlcjsKKwlidWZmZXIgKz0gMTsKKwlmcmFtZV9sZW4gPSAqYnVm ZmVyOworCWJ1ZmZlciArPSAxOworCWNoZWNrc3VtID0gKmJ1ZmZlcjsKKwlidWZmZXIgKz0gMTsK KwlmcmFtZV9kYXRhID0gYnVmZmVyOworCisJZGV2X2RiZyhoZG1pLT5kZXYsCisJCSJmcmFtZV90 eXBlOjB4JXgsZnJhbWVfdmVyOjB4JXgsZnJhbWVfbGVuOjB4JXgsY2hlY2tzdW06MHgleFxuIiwK KwkJZnJhbWVfdHlwZSwgZnJhbWVfdmVyLCBmcmFtZV9sZW4sIGNoZWNrc3VtKTsKKworCXN3aXRj aCAoZnJhbWVfdHlwZSkgeworCWNhc2UgSERNSV9JTkZPRlJBTUVfVFlQRV9BVkk6CisJCWN0cmxf ZnJhbWVfZW4gPSBDVFJMX0FWSV9FTjsKKwkJY3RybF9yZWcgPSBHUkxfQ1RSTDsKKwkJYnJlYWs7 CisJY2FzZSBIRE1JX0lORk9GUkFNRV9UWVBFX1NQRDoKKwkJY3RybF9mcmFtZV9lbiA9IENUUkxf U1BEX0VOOworCQljdHJsX3JlZyA9IEdSTF9DVFJMOworCQlicmVhazsKKwljYXNlIEhETUlfSU5G T0ZSQU1FX1RZUEVfQVVESU86CisJCWN0cmxfZnJhbWVfZW4gPSBDVFJMX0FVRElPX0VOOworCQlj dHJsX3JlZyA9IEdSTF9DVFJMOworCQlicmVhazsKKwljYXNlIEhETUlfSU5GT0ZSQU1FX1RZUEVf VkVORE9SOgorCQljdHJsX2ZyYW1lX2VuID0gVlNfRU47CisJCWN0cmxfcmVnID0gR1JMX0FDUF9J U1JDX0NUUkw7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwltdGtfaGRtaV9t YXNrKGhkbWksIGN0cmxfcmVnLCAwLCBjdHJsX2ZyYW1lX2VuKTsKKwltdGtfaGRtaV93cml0ZSho ZG1pLCBHUkxfSU5GT0ZSTV9UWVBFLCBmcmFtZV90eXBlKTsKKwltdGtfaGRtaV93cml0ZShoZG1p LCBHUkxfSU5GT0ZSTV9WRVIsIGZyYW1lX3Zlcik7CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JM X0lORk9GUk1fTE5HLCBmcmFtZV9sZW4pOworCisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX0lG TV9QT1JULCBjaGVja3N1bSk7CisJZm9yIChpID0gMDsgaSA8IGZyYW1lX2xlbjsgaSsrKQorCQlt dGtfaGRtaV93cml0ZShoZG1pLCBHUkxfSUZNX1BPUlQsIGZyYW1lX2RhdGFbaV0pOworCisJbXRr X2hkbWlfbWFzayhoZG1pLCBjdHJsX3JlZywgY3RybF9mcmFtZV9lbiwgY3RybF9mcmFtZV9lbik7 Cit9CisKK3ZvaWQgbXRrX2hkbWlfaHdfc2VuZF9hdWRfcGFja2V0KHN0cnVjdCBtdGtfaGRtaSAq aGRtaSwgYm9vbCBlbmFibGUpCit7CisJbXRrX2hkbWlfbWFzayhoZG1pLCBHUkxfU0hJRlRfUjIs IGVuYWJsZSA/IDAgOiBBVURJT19QQUNLRVRfT0ZGLAorCQkgICAgICBBVURJT19QQUNLRVRfT0ZG KTsKK30KKwordm9pZCBtdGtfaGRtaV9od19jb25maWdfc3lzKHN0cnVjdCBtdGtfaGRtaSAqaGRt aSkKK3sKKwlyZWdtYXBfdXBkYXRlX2JpdHMoaGRtaS0+c3lzX3JlZ21hcCwgaGRtaS0+c3lzX29m ZnNldCArIEhETUlfU1lTX0NGRzIwLAorCQkJICAgSERNSV9PVVRfRklGT19FTiB8IE1ITF9NT0RF X09OLCAwKTsKKwltZGVsYXkoMik7CisJcmVnbWFwX3VwZGF0ZV9iaXRzKGhkbWktPnN5c19yZWdt YXAsIGhkbWktPnN5c19vZmZzZXQgKyBIRE1JX1NZU19DRkcyMCwKKwkJCSAgIEhETUlfT1VUX0ZJ Rk9fRU4gfCBNSExfTU9ERV9PTiwgSERNSV9PVVRfRklGT19FTik7Cit9CisKK3ZvaWQgbXRrX2hk bWlfaHdfc2V0X2RlZXBfY29sb3JfbW9kZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkpCit7CisJcmVn bWFwX3VwZGF0ZV9iaXRzKGhkbWktPnN5c19yZWdtYXAsIGhkbWktPnN5c19vZmZzZXQgKyBIRE1J X1NZU19DRkcyMCwKKwkJCSAgIERFRVBfQ09MT1JfTU9ERV9NQVNLIHwgREVFUF9DT0xPUl9FTiwg Q09MT1JfOEJJVF9NT0RFKTsKK30KKwordm9pZCBtdGtfaGRtaV9od19zZW5kX2F2X211dGUoc3Ry dWN0IG10a19oZG1pICpoZG1pKQoreworCW10a19oZG1pX21hc2soaGRtaSwgR1JMX0NGRzQsIDAs IENUUkxfQVZNVVRFKTsKKwltZGVsYXkoMik7CisJbXRrX2hkbWlfbWFzayhoZG1pLCBHUkxfQ0ZH NCwgQ1RSTF9BVk1VVEUsIENUUkxfQVZNVVRFKTsKK30KKwordm9pZCBtdGtfaGRtaV9od19zZW5k X2F2X3VubXV0ZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkpCit7CisJbXRrX2hkbWlfbWFzayhoZG1p LCBHUkxfQ0ZHNCwgQ0ZHNF9BVl9VTk1VVEVfRU4sCisJCSAgICAgIENGRzRfQVZfVU5NVVRFX0VO IHwgQ0ZHNF9BVl9VTk1VVEVfU0VUKTsKKwltZGVsYXkoMik7CisJbXRrX2hkbWlfbWFzayhoZG1p LCBHUkxfQ0ZHNCwgQ0ZHNF9BVl9VTk1VVEVfU0VULAorCQkgICAgICBDRkc0X0FWX1VOTVVURV9F TiB8IENGRzRfQVZfVU5NVVRFX1NFVCk7Cit9CisKK3ZvaWQgbXRrX2hkbWlfaHdfbmN0c19lbmFi bGUoc3RydWN0IG10a19oZG1pICpoZG1pLCBib29sIG9uKQoreworCW10a19oZG1pX21hc2soaGRt aSwgR1JMX0NUU19DVFJMLCBvbiA/IDAgOiBDVFNfQ1RSTF9TT0ZULAorCQkgICAgICBDVFNfQ1RS TF9TT0ZUKTsKK30KKwordm9pZCBtdGtfaGRtaV9od19uY3RzX2F1dG9fd3JpdGVfZW5hYmxlKHN0 cnVjdCBtdGtfaGRtaSAqaGRtaSwgYm9vbCBlbmFibGUpCit7CisJbXRrX2hkbWlfbWFzayhoZG1p LCBHUkxfQ1RTX0NUUkwsIGVuYWJsZSA/IE5DVFNfV1JJX0FOWVRJTUUgOiAwLAorCQkgICAgICBO Q1RTX1dSSV9BTllUSU1FKTsKK30KKwordm9pZCBtdGtfaGRtaV9od19tc2ljX3NldHRpbmcoc3Ry dWN0IG10a19oZG1pICpoZG1pLAorCQkJICAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1v ZGUpCit7CisJbXRrX2hkbWlfbWFzayhoZG1pLCBHUkxfQ0ZHNCwgMCwgQ0ZHX01ITF9NT0RFKTsK KworCWlmIChtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfSU5URVJMQUNFICYmCisJICAgIG1v ZGUtPmNsb2NrID09IDc0MjUwICYmCisJICAgIG1vZGUtPnZkaXNwbGF5ID09IDEwODApCisJCW10 a19oZG1pX21hc2soaGRtaSwgR1JMX0NGRzIsIDAsIE1ITF9ERV9TRUwpOworCWVsc2UKKwkJbXRr X2hkbWlfbWFzayhoZG1pLCBHUkxfQ0ZHMiwgTUhMX0RFX1NFTCwgTUhMX0RFX1NFTCk7Cit9CisK K3ZvaWQgbXRrX2hkbWlfaHdfYXVkX3NldF9jaGFubmVsX3N3YXAoc3RydWN0IG10a19oZG1pICpo ZG1pLAorCQkJCSAgICAgIGVudW0gaGRtaV9hdWRfY2hhbm5lbF9zd2FwX3R5cGUgc3dhcCkKK3sK Kwl1OCBzd2FwX2JpdDsKKworCXN3aXRjaCAoc3dhcCkgeworCWNhc2UgSERNSV9BVURfU1dBUF9M UjoKKwkJc3dhcF9iaXQgPSBMUl9TV0FQOworCQlicmVhazsKKwljYXNlIEhETUlfQVVEX1NXQVBf TEZFX0NDOgorCQlzd2FwX2JpdCA9IExGRV9DQ19TV0FQOworCQlicmVhazsKKwljYXNlIEhETUlf QVVEX1NXQVBfTFNSUzoKKwkJc3dhcF9iaXQgPSBMU1JTX1NXQVA7CisJCWJyZWFrOworCWNhc2Ug SERNSV9BVURfU1dBUF9STFNfUlJTOgorCQlzd2FwX2JpdCA9IFJMU19SUlNfU1dBUDsKKwkJYnJl YWs7CisJY2FzZSBIRE1JX0FVRF9TV0FQX0xSX1NUQVRVUzoKKwkJc3dhcF9iaXQgPSBMUl9TVEFU VVNfU1dBUDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJc3dhcF9iaXQgPSBMRkVfQ0NfU1dBUDsK KwkJYnJlYWs7CisJfQorCW10a19oZG1pX21hc2soaGRtaSwgR1JMX0NIX1NXQVAsIHN3YXBfYml0 LCAweGZmKTsKK30KKwordm9pZCBtdGtfaGRtaV9od19hdWRfcmF3X2RhdGFfZW5hYmxlKHN0cnVj dCBtdGtfaGRtaSAqaGRtaSwgYm9vbCBlbmFibGUpCit7CisJbXRrX2hkbWlfbWFzayhoZG1pLCBH UkxfTUlYX0NUUkwsIGVuYWJsZSA/IE1JWF9DVFJMX0ZMQVQgOiAwLAorCQkgICAgICBNSVhfQ1RS TF9GTEFUKTsKK30KKwordm9pZCBtdGtfaGRtaV9od19hdWRfc2V0X2JpdF9udW0oc3RydWN0IG10 a19oZG1pICpoZG1pLAorCQkJCSBlbnVtIGhkbWlfYXVkaW9fc2FtcGxlX3NpemUgYml0X251bSkK K3sKKwl1MzIgdmFsID0gMDsKKworCWlmIChiaXRfbnVtID09IEhETUlfQVVESU9fU0FNUExFX1NJ WkVfMTYpCisJCXZhbCA9IEFPVVRfMTZCSVQ7CisJZWxzZSBpZiAoYml0X251bSA9PSBIRE1JX0FV RElPX1NBTVBMRV9TSVpFXzIwKQorCQl2YWwgPSBBT1VUXzIwQklUOworCWVsc2UgaWYgKGJpdF9u dW0gPT0gSERNSV9BVURJT19TQU1QTEVfU0laRV8yNCkKKwkJdmFsID0gQU9VVF8yNEJJVDsKKwor CW10a19oZG1pX21hc2soaGRtaSwgR1JMX0FPVVRfQk5VTV9TRUwsIHZhbCwgMHgwMyk7Cit9CisK K3ZvaWQgbXRrX2hkbWlfaHdfYXVkX3NldF9pMnNfZm10KHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwK KwkJCQkgZW51bSBoZG1pX2F1ZF9pMnNfZm10IGkyc19mbXQpCit7CisJdTMyIHZhbCA9IDA7CisK Kwl2YWwgPSBtdGtfaGRtaV9yZWFkKGhkbWksIEdSTF9DRkcwKTsKKwl2YWwgJj0gfjB4MzM7CisK Kwlzd2l0Y2ggKGkyc19mbXQpIHsKKwljYXNlIEhETUlfSTJTX01PREVfUkpUXzI0QklUOgorCQl2 YWwgfD0gKENGRzBfSTJTX01PREVfUlRKIHwgQ0ZHMF9JMlNfTU9ERV8yNEJJVCk7CisJCWJyZWFr OworCWNhc2UgSERNSV9JMlNfTU9ERV9SSlRfMTZCSVQ6CisJCXZhbCB8PSAoQ0ZHMF9JMlNfTU9E RV9SVEogfCBDRkcwX0kyU19NT0RFXzE2QklUKTsKKwkJYnJlYWs7CisJY2FzZSBIRE1JX0kyU19N T0RFX0xKVF8yNEJJVDoKKwkJdmFsIHw9IChDRkcwX0kyU19NT0RFX0xUSiB8IENGRzBfSTJTX01P REVfMjRCSVQpOworCQlicmVhazsKKwljYXNlIEhETUlfSTJTX01PREVfTEpUXzE2QklUOgorCQl2 YWwgfD0gKENGRzBfSTJTX01PREVfTFRKIHwgQ0ZHMF9JMlNfTU9ERV8xNkJJVCk7CisJCWJyZWFr OworCWNhc2UgSERNSV9JMlNfTU9ERV9JMlNfMjRCSVQ6CisJCXZhbCB8PSAoQ0ZHMF9JMlNfTU9E RV9JMlMgfCBDRkcwX0kyU19NT0RFXzI0QklUKTsKKwkJYnJlYWs7CisJY2FzZSBIRE1JX0kyU19N T0RFX0kyU18xNkJJVDoKKwkJdmFsIHw9IChDRkcwX0kyU19NT0RFX0kyUyB8IENGRzBfSTJTX01P REVfMTZCSVQpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJbXRrX2hkbWlf d3JpdGUoaGRtaSwgR1JMX0NGRzAsIHZhbCk7Cit9CisKK3ZvaWQgbXRrX2hkbWlfaHdfYXVkX3Nl dF9oaWdoX2JpdHJhdGUoc3RydWN0IG10a19oZG1pICpoZG1pLCBib29sIGVuYWJsZSkKK3sKKwlt dGtfaGRtaV9tYXNrKGhkbWksIEdSTF9BT1VUX0JOVU1fU0VMLAorCQkgICAgICBlbmFibGUgPyBI SUdIX0JJVF9SQVRFX1BBQ0tFVF9BTElHTiA6IDAsCisJCSAgICAgIEhJR0hfQklUX1JBVEVfUEFD S0VUX0FMSUdOKTsKKwltdGtfaGRtaV9tYXNrKGhkbWksIEdSTF9BVURJT19DRkcsIGVuYWJsZSA/ IEhJR0hfQklUX1JBVEUgOiAwLAorCQkgICAgICBISUdIX0JJVF9SQVRFKTsKK30KKwordm9pZCBt dGtfaGRtaV9waHlfYXVkX2RzdF9ub3JtYWxfZG91YmxlX2VuYWJsZShzdHJ1Y3QgbXRrX2hkbWkg KmhkbWksCisJCQkJCSAgICAgICBib29sIGVuYWJsZSkKK3sKKwltdGtfaGRtaV9tYXNrKGhkbWks IEdSTF9BVURJT19DRkcsIGVuYWJsZSA/IERTVF9OT1JNQUxfRE9VQkxFIDogMCwKKwkJICAgICAg RFNUX05PUk1BTF9ET1VCTEUpOworfQorCit2b2lkIG10a19oZG1pX2h3X2F1ZF9kc3RfZW5hYmxl KHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwgYm9vbCBlbmFibGUpCit7CisJbXRrX2hkbWlfbWFzayho ZG1pLCBHUkxfQVVESU9fQ0ZHLCBlbmFibGUgPyBTQUNEX0RTVCA6IDAsIFNBQ0RfRFNUKTsKK30K Kwordm9pZCBtdGtfaGRtaV9od19hdWRfZHNkX2VuYWJsZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWks IGJvb2wgZW5hYmxlKQoreworCW10a19oZG1pX21hc2soaGRtaSwgR1JMX0FVRElPX0NGRywgZW5h YmxlID8gU0FDRF9TRUwgOiAwLCBTQUNEX1NFTCk7Cit9CisKK3ZvaWQgbXRrX2hkbWlfaHdfYXVk X3NldF9pMnNfY2hhbl9udW0oc3RydWN0IG10a19oZG1pICpoZG1pLAorCQkJCSAgICAgIGVudW0g aGRtaV9hdWRfY2hhbm5lbF90eXBlIGNoYW5uZWxfdHlwZSwKKwkJCQkgICAgICB1OCBjaGFubmVs X2NvdW50KQoreworCXU4IHZhbF8xLCB2YWxfMiwgdmFsXzMsIHZhbF80OworCisJaWYgKGNoYW5u ZWxfY291bnQgPT0gMikgeworCQl2YWxfMSA9IDB4MDQ7CisJCXZhbF8yID0gMHg1MDsKKwl9IGVs c2UgaWYgKGNoYW5uZWxfY291bnQgPT0gMyB8fCBjaGFubmVsX2NvdW50ID09IDQpIHsKKwkJaWYg KGNoYW5uZWxfY291bnQgPT0gNCAmJgorCQkgICAgKGNoYW5uZWxfdHlwZSA9PSBIRE1JX0FVRF9D SEFOX1RZUEVfM18wX0xSUyB8fAorCQkgICAgY2hhbm5lbF90eXBlID09IEhETUlfQVVEX0NIQU5f VFlQRV80XzApKSB7CisJCQl2YWxfMSA9IDB4MTQ7CisJCX0gZWxzZSB7CisJCQl2YWxfMSA9IDB4 MGM7CisJCX0KKwkJdmFsXzIgPSAweDUwOworCX0gZWxzZSBpZiAoY2hhbm5lbF9jb3VudCA9PSA2 IHx8IGNoYW5uZWxfY291bnQgPT0gNSkgeworCQlpZiAoY2hhbm5lbF9jb3VudCA9PSA2ICYmCisJ CSAgICBjaGFubmVsX3R5cGUgIT0gSERNSV9BVURfQ0hBTl9UWVBFXzVfMSAmJgorCQkgICAgY2hh bm5lbF90eXBlICE9IEhETUlfQVVEX0NIQU5fVFlQRV80XzFfQ0xSUykgeworCQkJdmFsXzEgPSAw eDNjOworCQkJdmFsXzIgPSAweDUwOworCQl9IGVsc2UgeworCQkJdmFsXzEgPSAweDFjOworCQkJ dmFsXzIgPSAweDUwOworCQl9CisJfSBlbHNlIGlmIChjaGFubmVsX2NvdW50ID09IDggfHwgY2hh bm5lbF9jb3VudCA9PSA3KSB7CisJCXZhbF8xID0gMHgzYzsKKwkJdmFsXzIgPSAweDUwOworCX0g ZWxzZSB7CisJCXZhbF8xID0gMHgwNDsKKwkJdmFsXzIgPSAweDUwOworCX0KKworCXZhbF8zID0g MHhjNjsKKwl2YWxfNCA9IDB4ZmE7CisKKwltdGtfaGRtaV93cml0ZShoZG1pLCBHUkxfQ0hfU1cw LCB2YWxfMik7CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX0NIX1NXMSwgdmFsXzMpOworCW10 a19oZG1pX3dyaXRlKGhkbWksIEdSTF9DSF9TVzIsIHZhbF80KTsKKwltdGtfaGRtaV93cml0ZSho ZG1pLCBHUkxfSTJTX1VWLCB2YWxfMSk7Cit9CisKK3ZvaWQgbXRrX2hkbWlfaHdfYXVkX3NldF9p bnB1dF90eXBlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwKKwkJCQkgICAgZW51bSBoZG1pX2F1ZF9p bnB1dF90eXBlIGlucHV0X3R5cGUpCit7CisJdTMyIHZhbCA9IDA7CisKKwl2YWwgPSBtdGtfaGRt aV9yZWFkKGhkbWksIEdSTF9DRkcxKTsKKwlpZiAoaW5wdXRfdHlwZSA9PSBIRE1JX0FVRF9JTlBV VF9JMlMgJiYKKwkgICAgKHZhbCAmIENGRzFfU1BESUYpID09IENGRzFfU1BESUYpIHsKKwkJdmFs ICY9IH5DRkcxX1NQRElGOworCX0gZWxzZSBpZiAoaW5wdXRfdHlwZSA9PSBIRE1JX0FVRF9JTlBV VF9TUERJRiAmJgorCQkodmFsICYgQ0ZHMV9TUERJRikgPT0gMCkgeworCQl2YWwgfD0gQ0ZHMV9T UERJRjsKKwl9CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX0NGRzEsIHZhbCk7Cit9CisKK3Zv aWQgbXRrX2hkbWlfaHdfYXVkX3NldF9jaGFubmVsX3N0YXR1cyhzdHJ1Y3QgbXRrX2hkbWkgKmhk bWksCisJCQkJCXU4ICpsX2NoYW5fc3RhdHVzLCB1OCAqcl9jaGFuX3N0YXR1cywKKwkJCQkJZW51 bSBoZG1pX2F1ZGlvX3NhbXBsZV9mcmVxdWVuY3kKKwkJCQkJYXVkX2hkbWlfZnMpCit7CisJdTgg bF9zdGF0dXNbNV07CisJdTggcl9zdGF0dXNbNV07CisJdTggdmFsID0gMDsKKworCWxfc3RhdHVz WzBdID0gbF9jaGFuX3N0YXR1c1swXTsKKwlsX3N0YXR1c1sxXSA9IGxfY2hhbl9zdGF0dXNbMV07 CisJbF9zdGF0dXNbMl0gPSBsX2NoYW5fc3RhdHVzWzJdOworCXJfc3RhdHVzWzBdID0gcl9jaGFu X3N0YXR1c1swXTsKKwlyX3N0YXR1c1sxXSA9IHJfY2hhbl9zdGF0dXNbMV07CisJcl9zdGF0dXNb Ml0gPSByX2NoYW5fc3RhdHVzWzJdOworCisJbF9zdGF0dXNbMF0gJj0gfjB4MDI7CisJcl9zdGF0 dXNbMF0gJj0gfjB4MDI7CisKKwl2YWwgPSBsX2NoYW5fc3RhdHVzWzNdICYgMHhmMDsKKwlzd2l0 Y2ggKGF1ZF9oZG1pX2ZzKSB7CisJY2FzZSBIRE1JX0FVRElPX1NBTVBMRV9GUkVRVUVOQ1lfMzIw MDA6CisJCXZhbCB8PSAweDAzOworCQlicmVhazsKKwljYXNlIEhETUlfQVVESU9fU0FNUExFX0ZS RVFVRU5DWV80NDEwMDoKKwkJYnJlYWs7CisJY2FzZSBIRE1JX0FVRElPX1NBTVBMRV9GUkVRVUVO Q1lfODgyMDA6CisJCXZhbCB8PSAweDA4OworCQlicmVhazsKKwljYXNlIEhETUlfQVVESU9fU0FN UExFX0ZSRVFVRU5DWV85NjAwMDoKKwkJdmFsIHw9IDB4MGE7CisJCWJyZWFrOworCWNhc2UgSERN SV9BVURJT19TQU1QTEVfRlJFUVVFTkNZXzQ4MDAwOgorCQl2YWwgfD0gMHgwMjsKKwkJYnJlYWs7 CisJZGVmYXVsdDoKKwkJdmFsIHw9IDB4MDI7CisJCWJyZWFrOworCX0KKwlsX3N0YXR1c1szXSA9 IHZhbDsKKwlyX3N0YXR1c1szXSA9IHZhbDsKKworCXZhbCA9IGxfY2hhbl9zdGF0dXNbNF07CisJ dmFsIHw9ICgofihsX3N0YXR1c1szXSAmIDB4MGYpKSA8PCA0KTsKKwlsX3N0YXR1c1s0XSA9IHZh bDsKKwlyX3N0YXR1c1s0XSA9IHZhbDsKKworCXZhbCA9IGxfc3RhdHVzWzBdOworCW10a19oZG1p X3dyaXRlKGhkbWksIEdSTF9JMlNfQ19TVEEwLCB2YWwpOworCW10a19oZG1pX3dyaXRlKGhkbWks IEdSTF9MX1NUQVRVU18wLCB2YWwpOworCisJdmFsID0gcl9zdGF0dXNbMF07CisJbXRrX2hkbWlf d3JpdGUoaGRtaSwgR1JMX1JfU1RBVFVTXzAsIHZhbCk7CisKKwl2YWwgPSBsX3N0YXR1c1sxXTsK KwltdGtfaGRtaV93cml0ZShoZG1pLCBHUkxfSTJTX0NfU1RBMSwgdmFsKTsKKwltdGtfaGRtaV93 cml0ZShoZG1pLCBHUkxfTF9TVEFUVVNfMSwgdmFsKTsKKworCXZhbCA9IHJfc3RhdHVzWzFdOwor CW10a19oZG1pX3dyaXRlKGhkbWksIEdSTF9SX1NUQVRVU18xLCB2YWwpOworCisJdmFsID0gbF9z dGF0dXNbMl07CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX0kyU19DX1NUQTIsIHZhbCk7CisJ bXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX0xfU1RBVFVTXzIsIHZhbCk7CisKKwl2YWwgPSByX3N0 YXR1c1syXTsKKwltdGtfaGRtaV93cml0ZShoZG1pLCBHUkxfUl9TVEFUVVNfMiwgdmFsKTsKKwor CXZhbCA9IGxfc3RhdHVzWzNdOworCW10a19oZG1pX3dyaXRlKGhkbWksIEdSTF9JMlNfQ19TVEEz LCB2YWwpOworCW10a19oZG1pX3dyaXRlKGhkbWksIEdSTF9MX1NUQVRVU18zLCB2YWwpOworCisJ dmFsID0gcl9zdGF0dXNbM107CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX1JfU1RBVFVTXzMs IHZhbCk7CisKKwl2YWwgPSBsX3N0YXR1c1s0XTsKKwltdGtfaGRtaV93cml0ZShoZG1pLCBHUkxf STJTX0NfU1RBNCwgdmFsKTsKKwltdGtfaGRtaV93cml0ZShoZG1pLCBHUkxfTF9TVEFUVVNfNCwg dmFsKTsKKworCXZhbCA9IHJfc3RhdHVzWzRdOworCW10a19oZG1pX3dyaXRlKGhkbWksIEdSTF9S X1NUQVRVU180LCB2YWwpOworCisJZm9yICh2YWwgPSAwOyB2YWwgPCAxOTsgdmFsKyspIHsKKwkJ bXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX0xfU1RBVFVTXzUgKyB2YWwgKiA0LCAwKTsKKwkJbXRr X2hkbWlfd3JpdGUoaGRtaSwgR1JMX1JfU1RBVFVTXzUgKyB2YWwgKiA0LCAwKTsKKwl9Cit9CisK K3ZvaWQgbXRrX2hkbWlfaHdfYXVkX3NyY19yZWVuYWJsZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkp Cit7CisJdTMyIHZhbDsKKworCXZhbCA9IG10a19oZG1pX3JlYWQoaGRtaSwgR1JMX01JWF9DVFJM KTsKKwlpZiAodmFsICYgTUlYX0NUUkxfU1JDX0VOKSB7CisJCXZhbCAmPSB+TUlYX0NUUkxfU1JD X0VOOworCQltdGtfaGRtaV93cml0ZShoZG1pLCBHUkxfTUlYX0NUUkwsIHZhbCk7CisJCXVzbGVl cF9yYW5nZSgyNTUsIDUxMik7CisJCXZhbCB8PSBNSVhfQ1RSTF9TUkNfRU47CisJCW10a19oZG1p X3dyaXRlKGhkbWksIEdSTF9NSVhfQ1RSTCwgdmFsKTsKKwl9Cit9CisKK3ZvaWQgbXRrX2hkbWlf aHdfYXVkX3NyY19vZmYoc3RydWN0IG10a19oZG1pICpoZG1pKQoreworCXUzMiB2YWw7CisKKwl2 YWwgPSBtdGtfaGRtaV9yZWFkKGhkbWksIEdSTF9NSVhfQ1RSTCk7CisJdmFsICY9IH5NSVhfQ1RS TF9TUkNfRU47CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX01JWF9DVFJMLCB2YWwpOworCW10 a19oZG1pX3dyaXRlKGhkbWksIEdSTF9TSElGVF9MMSwgMHgwMCk7Cit9CisKK3ZvaWQgbXRrX2hk bWlfaHdfYXVkX3NldF9tY2xrKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwgZW51bSBoZG1pX2F1ZF9t Y2xrIG1jbGspCit7CisJdTMyIHZhbDsKKworCXZhbCA9IG10a19oZG1pX3JlYWQoaGRtaSwgR1JM X0NGRzUpOworCXZhbCAmPSBDRkc1X0NEX1JBVElPX01BU0s7CisKKwlzd2l0Y2ggKG1jbGspIHsK KwljYXNlIEhETUlfQVVEX01DTEtfMTI4RlM6CisJCXZhbCB8PSBDRkc1X0ZTMTI4OworCQlicmVh azsKKwljYXNlIEhETUlfQVVEX01DTEtfMjU2RlM6CisJCXZhbCB8PSBDRkc1X0ZTMjU2OworCQli cmVhazsKKwljYXNlIEhETUlfQVVEX01DTEtfMzg0RlM6CisJCXZhbCB8PSBDRkc1X0ZTMzg0Owor CQlicmVhazsKKwljYXNlIEhETUlfQVVEX01DTEtfNTEyRlM6CisJCXZhbCB8PSBDRkc1X0ZTNTEy OworCQlicmVhazsKKwljYXNlIEhETUlfQVVEX01DTEtfNzY4RlM6CisJCXZhbCB8PSBDRkc1X0ZT NzY4OworCQlicmVhazsKKwlkZWZhdWx0OgorCQl2YWwgfD0gQ0ZHNV9GUzI1NjsKKwkJYnJlYWs7 CisJfQorCW10a19oZG1pX3dyaXRlKGhkbWksIEdSTF9DRkc1LCB2YWwpOworfQorCit2b2lkIG10 a19oZG1pX2h3X2F1ZF9hY2xrX2ludl9lbmFibGUoc3RydWN0IG10a19oZG1pICpoZG1pLCBib29s IGVuYWJsZSkKK3sKKwl1MzIgdmFsOworCisJdmFsID0gbXRrX2hkbWlfcmVhZChoZG1pLCBHUkxf Q0ZHMik7CisJaWYgKGVuYWJsZSkKKwkJdmFsIHw9IDB4ODA7CisJZWxzZQorCQl2YWwgJj0gfjB4 ODA7CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX0NGRzIsIHZhbCk7Cit9CisKK3N0cnVjdCBo ZG1pX2Fjcl9uIHsKKwl1bnNpZ25lZCBpbnQgY2xvY2s7CisJdW5zaWduZWQgaW50IG5bM107Cit9 OworCisvKiBSZWNvbW1lbmRlZCBOIHZhbHVlcyBmcm9tIEhETUkgc3BlY2lmaWNhdGlvbiwgdGFi bGVzIDctMSB0byA3LTMgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRtaV9hY3JfbiBoZG1pX3Jl Y19uX3RhYmxlW10gPSB7CisJLyogQ2xvY2ssIE46IDMya0h6IDQ0LjFrSHogNDhrSHogKi8KKwl7 ICAyNTE3NSwgeyAgNDU3NiwgIDcwMDcsICA2ODY0IH0gfSwKKwl7ICA3NDE3NiwgeyAxMTY0OCwg MTc4MzYsIDExNjQ4IH0gfSwKKwl7IDE0ODM1MiwgeyAxMTY0OCwgIDg5MTgsICA1ODI0IH0gfSwK Kwl7IDI5NjcwMywgeyAgNTgyNCwgIDQ0NTksICA1ODI0IH0gfSwKKwl7IDI5NzAwMCwgeyAgMzA3 MiwgIDQ3MDQsICA1MTIwIH0gfSwKKwl7ICAgICAgMCwgeyAgNDA5NiwgIDYyNzIsICA2MTQ0IH0g fSwgLyogYWxsIG90aGVyIFRNRFMgY2xvY2tzICovCit9OworCisvKioKKyAqIGhkbWlfcmVjb21t ZW5kZWRfbigpIC0gUmV0dXJuIE4gdmFsdWUgcmVjb21tZW5kZWQgYnkgSERNSSBzcGVjaWZpY2F0 aW9uCisgKiBAZnJlcTogYXVkaW8gc2FtcGxlIHJhdGUgaW4gSHoKKyAqIEBjbG9jazogcm91bmRl ZCBUTURTIGNsb2NrIGluIGtIegorICovCitzdGF0aWMgdW5zaWduZWQgaW50IGhkbWlfcmVjb21t ZW5kZWRfbih1bnNpZ25lZCBpbnQgZnJlcSwgdW5zaWduZWQgaW50IGNsb2NrKQoreworCWNvbnN0 IHN0cnVjdCBoZG1pX2Fjcl9uICpyZWNvbW1lbmRlZDsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZv ciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGhkbWlfcmVjX25fdGFibGUpIC0gMTsgaSsrKSB7CisJ CWlmIChjbG9jayA9PSBoZG1pX3JlY19uX3RhYmxlW2ldLmNsb2NrKQorCQkJYnJlYWs7CisJfQor CXJlY29tbWVuZGVkID0gaGRtaV9yZWNfbl90YWJsZSArIGk7CisKKwlzd2l0Y2ggKGZyZXEpIHsK KwljYXNlIDMyMDAwOgorCQlyZXR1cm4gcmVjb21tZW5kZWQtPm5bMF07CisJY2FzZSA0NDEwMDoK KwkJcmV0dXJuIHJlY29tbWVuZGVkLT5uWzFdOworCWNhc2UgNDgwMDA6CisJCXJldHVybiByZWNv bW1lbmRlZC0+blsyXTsKKwljYXNlIDg4MjAwOgorCQlyZXR1cm4gcmVjb21tZW5kZWQtPm5bMV0g KiAyOworCWNhc2UgOTYwMDA6CisJCXJldHVybiByZWNvbW1lbmRlZC0+blsyXSAqIDI7CisJY2Fz ZSAxNzY0MDA6CisJCXJldHVybiByZWNvbW1lbmRlZC0+blsxXSAqIDQ7CisJY2FzZSAxOTIwMDA6 CisJCXJldHVybiByZWNvbW1lbmRlZC0+blsyXSAqIDQ7CisJZGVmYXVsdDoKKwkJcmV0dXJuICgx MjggKiBmcmVxKSAvIDEwMDA7CisJfQorfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGhkbWlfbW9k ZV9jbG9ja190b19oeih1bnNpZ25lZCBpbnQgY2xvY2spCit7CisJc3dpdGNoIChjbG9jaykgewor CWNhc2UgMjUxNzU6CisJCXJldHVybiAyNTE3NDgyNTsJLyogMjUuMi8xLjAwMSBNSHogKi8KKwlj YXNlIDc0MTc2OgorCQlyZXR1cm4gNzQxNzU4MjQ7CS8qIDc0LjI1LzEuMDAxIE1IeiAqLworCWNh c2UgMTQ4MzUyOgorCQlyZXR1cm4gMTQ4MzUxNjQ4OwkvKiAxNDguNS8xLjAwMSBNSHogKi8KKwlj YXNlIDI5NjcwMzoKKwkJcmV0dXJuIDI5NjcwMzI5NzsJLyogMjk3LzEuMDAxIE1IeiAqLworCWRl ZmF1bHQ6CisJCXJldHVybiBjbG9jayAqIDEwMDA7CisJfQorfQorCitzdGF0aWMgdW5zaWduZWQg aW50IGhkbWlfZXhwZWN0ZWRfY3RzKHVuc2lnbmVkIGludCBhdWRpb19zYW1wbGVfcmF0ZSwKKwkJ CQkgICAgICB1bnNpZ25lZCBpbnQgdG1kc19jbG9jaywgdW5zaWduZWQgaW50IG4pCit7CisJcmV0 dXJuIERJVl9ST1VORF9DTE9TRVNUX1VMTCgodTY0KWhkbWlfbW9kZV9jbG9ja190b19oeih0bWRz X2Nsb2NrKSAqIG4sCisJCQkJICAgICAxMjggKiBhdWRpb19zYW1wbGVfcmF0ZSk7Cit9CisKK3N0 YXRpYyB2b2lkIGRvX2hkbWlfaHdfYXVkX3NldF9uY3RzKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwg dW5zaWduZWQgaW50IG4sCisJCQkJICAgIHVuc2lnbmVkIGludCBjdHMpCit7CisJdW5zaWduZWQg Y2hhciB2YWxbTkNUU19CWVRFU107CisJaW50IGk7CisKKwltdGtfaGRtaV93cml0ZShoZG1pLCBH UkxfTkNUUywgMCk7CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX05DVFMsIDApOworCW10a19o ZG1pX3dyaXRlKGhkbWksIEdSTF9OQ1RTLCAwKTsKKwltZW1zZXQodmFsLCAwLCBzaXplb2YodmFs KSk7CisKKwl2YWxbMF0gPSAoY3RzID4+IDI0KSAmIDB4ZmY7CisJdmFsWzFdID0gKGN0cyA+PiAx NikgJiAweGZmOworCXZhbFsyXSA9IChjdHMgPj4gOCkgJiAweGZmOworCXZhbFszXSA9IGN0cyAm IDB4ZmY7CisKKwl2YWxbNF0gPSAobiA+PiAxNikgJiAweGZmOworCXZhbFs1XSA9IChuID4+IDgp ICYgMHhmZjsKKwl2YWxbNl0gPSBuICYgMHhmZjsKKworCWZvciAoaSA9IDA7IGkgPCBOQ1RTX0JZ VEVTOyBpKyspCisJCW10a19oZG1pX3dyaXRlKGhkbWksIEdSTF9OQ1RTLCB2YWxbaV0pOworfQor Cit2b2lkIG10a19oZG1pX2h3X2F1ZF9zZXRfbmN0cyhzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksIHVu c2lnbmVkIGludCBzYW1wbGVfcmF0ZSwKKwkJCSAgICAgIHVuc2lnbmVkIGludCBjbG9jaykKK3sK Kwl1bnNpZ25lZCBpbnQgbiwgY3RzOworCisJbiA9IGhkbWlfcmVjb21tZW5kZWRfbihzYW1wbGVf cmF0ZSwgY2xvY2spOworCWN0cyA9IGhkbWlfZXhwZWN0ZWRfY3RzKHNhbXBsZV9yYXRlLCBjbG9j aywgbik7CisKKwlkZXZfZGJnKGhkbWktPmRldiwgIiVzOiBzYW1wbGVfcmF0ZT0ldSwgY2xvY2s9 JWQsIGN0cz0ldSwgbj0ldVxuIiwKKwkJX19mdW5jX18sIHNhbXBsZV9yYXRlLCBjbG9jaywgbiwg Y3RzKTsKKworCW10a19oZG1pX21hc2soaGRtaSwgRFVNTVlfMzA0LCBBVURJT19JMlNfTkNUU19T RUxfNjQsCisJCSAgICAgIEFVRElPX0kyU19OQ1RTX1NFTCk7CisJZG9faGRtaV9od19hdWRfc2V0 X25jdHMoaGRtaSwgbiwgY3RzKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRp YXRlay9tdGtfaGRtaV9ody5oIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19oZG1pX2h3 LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTAxMzIxOQotLS0gL2Rldi9u dWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaV9ody5oCkBAIC0wLDAg KzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQgTWVkaWFUZWsgSW5jLgorICogQXV0 aG9yOiBKaWUgUWl1IDxqaWUucWl1QG1lZGlhdGVrLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0g aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQor ICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2 ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2 ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpZm5kZWYgX01US19IRE1JX0hXX0gK KyNkZWZpbmUgX01US19IRE1JX0hXX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5j bHVkZSA8bGludXgvaGRtaS5oPgorI2luY2x1ZGUgIm10a19oZG1pLmgiCisKK3ZvaWQgbXRrX2hk bWlfaHdfdmlkX2JsYWNrKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwgYm9vbCBibGFjayk7Cit2b2lk IG10a19oZG1pX2h3X2F1ZF9tdXRlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwgYm9vbCBtdXRlKTsK K3ZvaWQgbXRrX2hkbWlfaHdfc2VuZF9pbmZvX2ZyYW1lKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwg dTggKmJ1ZmZlciwgdTggbGVuKTsKK3ZvaWQgbXRrX2hkbWlfaHdfc2VuZF9hdWRfcGFja2V0KHN0 cnVjdCBtdGtfaGRtaSAqaGRtaSwgYm9vbCBlbmFibGUpOworaW50IG10a19oZG1pX2h3X3NldF9j bG9jayhzdHJ1Y3QgbXRrX2hkbWkgKmhjdHgsIHUzMiBjbG9jayk7Cit2b2lkIG10a19oZG1pX2h3 X2NvbmZpZ19zeXMoc3RydWN0IG10a19oZG1pICpoZG1pKTsKK3ZvaWQgbXRrX2hkbWlfaHdfc2V0 X2RlZXBfY29sb3JfbW9kZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkpOwordm9pZCBtdGtfaGRtaV9o d19zZW5kX2F2X211dGUoc3RydWN0IG10a19oZG1pICpoZG1pKTsKK3ZvaWQgbXRrX2hkbWlfaHdf c2VuZF9hdl91bm11dGUoc3RydWN0IG10a19oZG1pICpoZG1pKTsKK3ZvaWQgbXRrX2hkbWlfaHdf bmN0c19lbmFibGUoc3RydWN0IG10a19oZG1pICpoZG1pLCBib29sIG9uKTsKK3ZvaWQgbXRrX2hk bWlfaHdfYXVkX3NldF9jaGFubmVsX3N3YXAoc3RydWN0IG10a19oZG1pICpoZG1pLAorCQkJCSAg ICAgIGVudW0gaGRtaV9hdWRfY2hhbm5lbF9zd2FwX3R5cGUgc3dhcCk7Cit2b2lkIG10a19oZG1p X2h3X2F1ZF9yYXdfZGF0YV9lbmFibGUoc3RydWN0IG10a19oZG1pICpoZG1pLCBib29sIGVuYWJs ZSk7Cit2b2lkIG10a19oZG1pX2h3X2F1ZF9zZXRfYml0X251bShzdHJ1Y3QgbXRrX2hkbWkgKmhk bWksCisJCQkJIGVudW0gaGRtaV9hdWRpb19zYW1wbGVfc2l6ZSBiaXRfbnVtKTsKK3ZvaWQgbXRr X2hkbWlfaHdfYXVkX3NldF9oaWdoX2JpdHJhdGUoc3RydWN0IG10a19oZG1pICpoZG1pLCBib29s IGVuYWJsZSk7Cit2b2lkIG10a19oZG1pX3BoeV9hdWRfZHN0X25vcm1hbF9kb3VibGVfZW5hYmxl KHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwKKwkJCQkJICAgICAgIGJvb2wgZW5hYmxlKTsKK3ZvaWQg bXRrX2hkbWlfaHdfYXVkX2RzdF9lbmFibGUoc3RydWN0IG10a19oZG1pICpoZG1pLCBib29sIGVu YWJsZSk7Cit2b2lkIG10a19oZG1pX2h3X2F1ZF9kc2RfZW5hYmxlKHN0cnVjdCBtdGtfaGRtaSAq aGRtaSwgYm9vbCBlbmFibGUpOwordm9pZCBtdGtfaGRtaV9od19hdWRfc2V0X2kyc19mbXQoc3Ry dWN0IG10a19oZG1pICpoZG1pLAorCQkJCSBlbnVtIGhkbWlfYXVkX2kyc19mbXQgaTJzX2ZtdCk7 Cit2b2lkIG10a19oZG1pX2h3X2F1ZF9zZXRfaTJzX2NoYW5fbnVtKHN0cnVjdCBtdGtfaGRtaSAq aGRtaSwKKwkJCQkgICAgICBlbnVtIGhkbWlfYXVkX2NoYW5uZWxfdHlwZSBjaGFubmVsX3R5cGUs CisJCQkJICAgICAgdTggY2hhbm5lbF9jb3VudCk7Cit2b2lkIG10a19oZG1pX2h3X2F1ZF9zZXRf aW5wdXRfdHlwZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksCisJCQkJICAgIGVudW0gaGRtaV9hdWRf aW5wdXRfdHlwZSBpbnB1dF90eXBlKTsKK3ZvaWQgbXRrX2hkbWlfaHdfYXVkX3NldF9jaGFubmVs X3N0YXR1cyhzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksCisJCQkJCXU4ICpsX2NoYW5fc3RhdHVzLCB1 OCAqcl9jaGFuX3N0YXVzLAorCQkJCQllbnVtIGhkbWlfYXVkaW9fc2FtcGxlX2ZyZXF1ZW5jeQor CQkJCQlhdWRfaGRtaV9mcyk7Cit2b2lkIG10a19oZG1pX2h3X2F1ZF9zcmNfZW5hYmxlKHN0cnVj dCBtdGtfaGRtaSAqaGRtaSwgYm9vbCBlbmFibGUpOwordm9pZCBtdGtfaGRtaV9od19hdWRfc2V0 X21jbGsoc3RydWN0IG10a19oZG1pICpoZG1pLCBlbnVtIGhkbWlfYXVkX21jbGsgbWNsayk7Cit2 b2lkIG10a19oZG1pX2h3X2F1ZF9zcmNfb2ZmKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSk7Cit2b2lk IG10a19oZG1pX2h3X2F1ZF9zcmNfcmVlbmFibGUoc3RydWN0IG10a19oZG1pICpoZG1pKTsKK3Zv aWQgbXRrX2hkbWlfaHdfYXVkX2FjbGtfaW52X2VuYWJsZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWks IGJvb2wgZW5hYmxlKTsKK3ZvaWQgbXRrX2hkbWlfaHdfYXVkX3NldF9uY3RzKHN0cnVjdCBtdGtf aGRtaSAqaGRtaSwgdW5zaWduZWQgaW50IHNhbXBsZV9yYXRlLAorCQkJICAgICAgdW5zaWduZWQg aW50IGNsb2NrKTsKK2Jvb2wgbXRrX2hkbWlfaHdfaXNfaHBkX2hpZ2goc3RydWN0IG10a19oZG1p ICpoZG1pKTsKK3ZvaWQgbXRrX2hkbWlfaHdfbWFrZV9yZWdfd3JpdGFibGUoc3RydWN0IG10a19o ZG1pICpoZG1pLCBib29sIGVuYWJsZSk7Cit2b2lkIG10a19oZG1pX2h3X3Jlc2V0KHN0cnVjdCBt dGtfaGRtaSAqaGRtaSk7Cit2b2lkIG10a19oZG1pX2h3X2VuYWJsZV9ub3RpY2Uoc3RydWN0IG10 a19oZG1pICpoZG1pLCBib29sIGVuYWJsZV9ub3RpY2UpOwordm9pZCBtdGtfaGRtaV9od193cml0 ZV9pbnRfbWFzayhzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksIHUzMiBpbnRfbWFzayk7Cit2b2lkIG10 a19oZG1pX2h3X2VuYWJsZV9kdmlfbW9kZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksIGJvb2wgZW5h YmxlKTsKK3ZvaWQgbXRrX2hkbWlfaHdfbmN0c19hdXRvX3dyaXRlX2VuYWJsZShzdHJ1Y3QgbXRr X2hkbWkgKmhkbWksIGJvb2wgZW5hYmxlKTsKK3ZvaWQgbXRrX2hkbWlfaHdfbXNpY19zZXR0aW5n KHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwKKwkJCSAgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2Rl ICptb2RlKTsKK3ZvaWQgbXRrX2hkbWlfaHdfMXA0X3ZlcnNpb25fZW5hYmxlKHN0cnVjdCBtdGtf aGRtaSAqaGRtaSwgYm9vbCBlbmFibGUpOwordm9pZCBtdGtfaGRtaV9od19odHBsZ19pcnFfZW5h YmxlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSk7Cit2b2lkIG10a19oZG1pX2h3X2h0cGxnX2lycV9k aXNhYmxlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSk7Cit2b2lkIG10a19oZG1pX2h3X2NsZWFyX2h0 cGxnX2lycShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkpOworCisjZW5kaWYgLyogX01US19IRE1JX0hX X0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaV9yZWdz LmggYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2hkbWlfcmVncy5oCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjMWQzMTgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2 ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2hkbWlfcmVncy5oCkBAIC0wLDAgKzEsMjIxIEBACisv KgorICogQ29weXJpZ2h0IChjKSAyMDE0IE1lZGlhVGVrIEluYy4KKyAqIEF1dGhvcjogSmllIFFp dSA8amllLnFpdUBtZWRpYXRlay5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29m dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFz CisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBU aGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm b3IgbW9yZSBkZXRhaWxzLgorICovCisjaWZuZGVmIF9NVEtfSERNSV9SRUdTX0gKKyNkZWZpbmUg X01US19IRE1JX1JFR1NfSAorCisjZGVmaW5lIEdSTF9JTlRfTUFTSwkJMHgxOAorI2RlZmluZSBH UkxfSUZNX1BPUlQJCTB4MTg4CisjZGVmaW5lIEdSTF9DSF9TV0FQCQkweDE5OAorI2RlZmluZSBM Ul9TV0FQCQkJCUJJVCgwKQorI2RlZmluZSBMRkVfQ0NfU1dBUAkJCUJJVCgxKQorI2RlZmluZSBM U1JTX1NXQVAJCQlCSVQoMikKKyNkZWZpbmUgUkxTX1JSU19TV0FQCQkJQklUKDMpCisjZGVmaW5l IExSX1NUQVRVU19TV0FQCQkJQklUKDQpCisjZGVmaW5lIEdSTF9JMlNfQ19TVEEwCQkweDE0MAor I2RlZmluZSBHUkxfSTJTX0NfU1RBMQkJMHgxNDQKKyNkZWZpbmUgR1JMX0kyU19DX1NUQTIJCTB4 MTQ4CisjZGVmaW5lIEdSTF9JMlNfQ19TVEEzCQkweDE0QworI2RlZmluZSBHUkxfSTJTX0NfU1RB NAkJMHgxNTAKKyNkZWZpbmUgR1JMX0kyU19VVgkJMHgxNTQKKyNkZWZpbmUgR1JMX0FDUF9JU1JD X0NUUkwJMHgxNTgKKyNkZWZpbmUgVlNfRU4JCQkJQklUKDApCisjZGVmaW5lIEFDUF9FTgkJCQlC SVQoMSkKKyNkZWZpbmUgSVNSQzFfRU4JCQlCSVQoMikKKyNkZWZpbmUgSVNSQzJfRU4JCQlCSVQo MykKKyNkZWZpbmUgR0FNVVRfRU4JCQlCSVQoNCkKKyNkZWZpbmUgR1JMX0NUU19DVFJMCQkweDE2 MAorI2RlZmluZSBDVFNfQ1RSTF9TT0ZUCQkJQklUKDApCisjZGVmaW5lIEdSTF9JTlQJCQkweDE0 CisjZGVmaW5lIElOVF9NREkJCQkJQklUKDApCisjZGVmaW5lIElOVF9IRENQCQkJQklUKDEpCisj ZGVmaW5lIElOVF9GSUZPX08JCQlCSVQoMikKKyNkZWZpbmUgSU5UX0ZJRk9fVQkJCUJJVCgzKQor I2RlZmluZSBJTlRfSUZNX0VSUgkJCUJJVCg0KQorI2RlZmluZSBJTlRfSU5GX0RPTkUJCQlCSVQo NSkKKyNkZWZpbmUgSU5UX05DVFNfRE9ORQkJCUJJVCg2KQorI2RlZmluZSBJTlRfQ1RSTF9QS1Rf RE9ORQkJQklUKDcpCisjZGVmaW5lIEdSTF9JTlRfTUFTSwkJMHgxOAorI2RlZmluZSBHUkxfQ1RS TAkJMHgxQworI2RlZmluZSBDVFJMX0dFTl9FTgkJCUJJVCgyKQorI2RlZmluZSBDVFJMX1NQRF9F TgkJCUJJVCgzKQorI2RlZmluZSBDVFJMX01QRUdfRU4JCQlCSVQoNCkKKyNkZWZpbmUgQ1RSTF9B VURJT19FTgkJCUJJVCg1KQorI2RlZmluZSBDVFJMX0FWSV9FTgkJCUJJVCg2KQorI2RlZmluZSBD VFJMX0FWTVVURQkJCUJJVCg3KQorI2RlZmluZQlHUkxfU1RBVFVTCQkweDIwCisjZGVmaW5lIFNU QVRVU19IVFBMRwkJCUJJVCgwKQorI2RlZmluZSBTVEFUVVNfUE9SRAkJCUJJVCgxKQorI2RlZmlu ZSBHUkxfRElWTgkJMHgxNzAKKyNkZWZpbmUgTkNUU19XUklfQU5ZVElNRQkJQklUKDYpCisjZGVm aW5lIEdSTF9BVURJT19DRkcJCTB4MTdDCisjZGVmaW5lIEFVRElPX1pFUk8JCQlCSVQoMCkKKyNk ZWZpbmUgSElHSF9CSVRfUkFURQkJCUJJVCgxKQorI2RlZmluZSBTQUNEX0RTVAkJCUJJVCgyKQor I2RlZmluZSBEU1RfTk9STUFMX0RPVUJMRQkJQklUKDMpCisjZGVmaW5lIERTRF9JTlYJCQkJQklU KDQpCisjZGVmaW5lIExSX0lOVgkJCQlCSVQoNSkKKyNkZWZpbmUgTFJfTUlYCQkJCUJJVCg2KQor I2RlZmluZSBTQUNEX1NFTAkJCUJJVCg3KQorI2RlZmluZSBHUkxfTkNUUwkJMHgxODQKKyNkZWZp bmUgR1JMX0NIX1NXMAkJMHgxOEMKKyNkZWZpbmUgR1JMX0NIX1NXMQkJMHgxOTAKKyNkZWZpbmUg R1JMX0NIX1NXMgkJMHgxOTQKKyNkZWZpbmUgR1JMX0lORk9GUk1fVkVSCQkweDE5QworI2RlZmlu ZSBHUkxfSU5GT0ZSTV9UWVBFCTB4MUEwCisjZGVmaW5lIEdSTF9JTkZPRlJNX0xORwkJMHgxQTQK KyNkZWZpbmUgR1JMX01JWF9DVFJMCQkweDFCNAorI2RlZmluZSBNSVhfQ1RSTF9TUkNfRU4JCQlC SVQoMCkKKyNkZWZpbmUgQllQQVNTX1ZPTFVNRQkJCUJJVCgxKQorI2RlZmluZSBNSVhfQ1RSTF9G TEFUCQkJQklUKDcpCisjZGVmaW5lIEdSTF9BT1VUX0JOVU1fU0VMCTB4MUM0CisjZGVmaW5lIEFP VVRfMjRCSVQJCQkweDAwCisjZGVmaW5lIEFPVVRfMjBCSVQJCQkweDAyCisjZGVmaW5lIEFPVVRf MTZCSVQJCQkweDAzCisjZGVmaW5lIEhJR0hfQklUX1JBVEVfUEFDS0VUX0FMSUdOCSgweDMgPDwg NikKKyNkZWZpbmUgR1JMX1NISUZUX0wxCQkweDFDMAorI2RlZmluZSBHUkxfU0hJRlRfUjIJCTB4 MUIwCisjZGVmaW5lIEFVRElPX1BBQ0tFVF9PRkYJCUJJVCg2KQorI2RlZmluZSBHUkxfQ0ZHMAkJ MHgyNAorI2RlZmluZSBDRkcwX0kyU19NT0RFX1JUSgkJMHgxCisjZGVmaW5lIENGRzBfSTJTX01P REVfTFRKCQkweDAKKyNkZWZpbmUgQ0ZHMF9JMlNfTU9ERV9JMlMJCTB4MgorI2RlZmluZSBDRkcw X0kyU19NT0RFXzI0QklUCQkweDAwCisjZGVmaW5lIENGRzBfSTJTX01PREVfMTZCSVQJCTB4MTAK KyNkZWZpbmUgR1JMX0NGRzEJCTB4MjgKKyNkZWZpbmUgQ0ZHMV9FREdfU0VMCQkJQklUKDApCisj ZGVmaW5lIENGRzFfU1BESUYJCQlCSVQoMSkKKyNkZWZpbmUgQ0ZHMV9EVkkJCQlCSVQoMikKKyNk ZWZpbmUgQ0ZHMV9IRENQX0RFQlVHCQkJQklUKDMpCisjZGVmaW5lIEdSTF9DRkcyCQkweDJjCisj ZGVmaW5lIENGRzJfTk9USUNFX0VOCQkJQklUKDYpCisjZGVmaW5lIE1ITF9ERV9TRUwJCQlCSVQo MykKKyNkZWZpbmUgR1JMX0NGRzMJCTB4MzAKKyNkZWZpbmUgQ0ZHM19BRVNfS0VZX0lOREVYX01B U0sJCTB4M2YKKyNkZWZpbmUgQ0ZHM19DT05UUk9MX1BBQ0tFVF9ERUxBWQlCSVQoNikKKyNkZWZp bmUgQ0ZHM19LU1ZfTE9BRF9TVEFSVAkJQklUKDcpCisjZGVmaW5lIEdSTF9DRkc0CQkweDM0Cisj ZGVmaW5lIENGRzRfQUVTX0tFWV9MT0FECQlCSVQoNCkKKyNkZWZpbmUgQ0ZHNF9BVl9VTk1VVEVf RU4JCUJJVCg1KQorI2RlZmluZSBDRkc0X0FWX1VOTVVURV9TRVQJCUJJVCg2KQorI2RlZmluZSBD RkdfTUhMX01PREUJCQlCSVQoNykKKyNkZWZpbmUgR1JMX0NGRzUJCTB4MzgKKyNkZWZpbmUgQ0ZH NV9DRF9SQVRJT19NQVNLCTB4OEYKKyNkZWZpbmUgQ0ZHNV9GUzEyOAkJCSgweDEgPDwgNCkKKyNk ZWZpbmUgQ0ZHNV9GUzI1NgkJCSgweDIgPDwgNCkKKyNkZWZpbmUgQ0ZHNV9GUzM4NAkJCSgweDMg PDwgNCkKKyNkZWZpbmUgQ0ZHNV9GUzUxMgkJCSgweDQgPDwgNCkKKyNkZWZpbmUgQ0ZHNV9GUzc2 OAkJCSgweDYgPDwgNCkKKyNkZWZpbmUgRFVNTVlfMzA0CQkweDMwNAorI2RlZmluZSBDSE1PX1NF TAkJCSgweDMgPDwgMikKKyNkZWZpbmUgQ0hNMV9TRUwJCQkoMHgzIDw8IDQpCisjZGVmaW5lIENI TTJfU0VMCQkJKDB4MyA8PCA2KQorI2RlZmluZSBBVURJT19JMlNfTkNUU19TRUwJCUJJVCgxKQor I2RlZmluZSBBVURJT19JMlNfTkNUU19TRUxfNjQJCSgxIDw8IDEpCisjZGVmaW5lIEFVRElPX0ky U19OQ1RTX1NFTF8xMjgJCSgwIDw8IDEpCisjZGVmaW5lIE5FV19HQ1BfQ1RSTAkJCUJJVCgwKQor I2RlZmluZSBORVdfR0NQX0NUUkxfTUVSR0UJCUJJVCgwKQorI2RlZmluZSBHUkxfTF9TVEFUVVNf MAkJMHgyMDAKKyNkZWZpbmUgR1JMX0xfU1RBVFVTXzEJCTB4MjA0CisjZGVmaW5lIEdSTF9MX1NU QVRVU18yCQkweDIwOAorI2RlZmluZSBHUkxfTF9TVEFUVVNfMwkJMHgyMGMKKyNkZWZpbmUgR1JM X0xfU1RBVFVTXzQJCTB4MjEwCisjZGVmaW5lIEdSTF9MX1NUQVRVU181CQkweDIxNAorI2RlZmlu ZSBHUkxfTF9TVEFUVVNfNgkJMHgyMTgKKyNkZWZpbmUgR1JMX0xfU1RBVFVTXzcJCTB4MjFjCisj ZGVmaW5lIEdSTF9MX1NUQVRVU184CQkweDIyMAorI2RlZmluZSBHUkxfTF9TVEFUVVNfOQkJMHgy MjQKKyNkZWZpbmUgR1JMX0xfU1RBVFVTXzEwCQkweDIyOAorI2RlZmluZSBHUkxfTF9TVEFUVVNf MTEJCTB4MjJjCisjZGVmaW5lIEdSTF9MX1NUQVRVU18xMgkJMHgyMzAKKyNkZWZpbmUgR1JMX0xf U1RBVFVTXzEzCQkweDIzNAorI2RlZmluZSBHUkxfTF9TVEFUVVNfMTQJCTB4MjM4CisjZGVmaW5l IEdSTF9MX1NUQVRVU18xNQkJMHgyM2MKKyNkZWZpbmUgR1JMX0xfU1RBVFVTXzE2CQkweDI0MAor I2RlZmluZSBHUkxfTF9TVEFUVVNfMTcJCTB4MjQ0CisjZGVmaW5lIEdSTF9MX1NUQVRVU18xOAkJ MHgyNDgKKyNkZWZpbmUgR1JMX0xfU1RBVFVTXzE5CQkweDI0YworI2RlZmluZSBHUkxfTF9TVEFU VVNfMjAJCTB4MjUwCisjZGVmaW5lIEdSTF9MX1NUQVRVU18yMQkJMHgyNTQKKyNkZWZpbmUgR1JM X0xfU1RBVFVTXzIyCQkweDI1OAorI2RlZmluZSBHUkxfTF9TVEFUVVNfMjMJCTB4MjVjCisjZGVm aW5lIEdSTF9SX1NUQVRVU18wCQkweDI2MAorI2RlZmluZSBHUkxfUl9TVEFUVVNfMQkJMHgyNjQK KyNkZWZpbmUgR1JMX1JfU1RBVFVTXzIJCTB4MjY4CisjZGVmaW5lIEdSTF9SX1NUQVRVU18zCQkw eDI2YworI2RlZmluZSBHUkxfUl9TVEFUVVNfNAkJMHgyNzAKKyNkZWZpbmUgR1JMX1JfU1RBVFVT XzUJCTB4Mjc0CisjZGVmaW5lIEdSTF9SX1NUQVRVU182CQkweDI3OAorI2RlZmluZSBHUkxfUl9T VEFUVVNfNwkJMHgyN2MKKyNkZWZpbmUgR1JMX1JfU1RBVFVTXzgJCTB4MjgwCisjZGVmaW5lIEdS TF9SX1NUQVRVU185CQkweDI4NAorI2RlZmluZSBHUkxfUl9TVEFUVVNfMTAJCTB4Mjg4CisjZGVm aW5lIEdSTF9SX1NUQVRVU18xMQkJMHgyOGMKKyNkZWZpbmUgR1JMX1JfU1RBVFVTXzEyCQkweDI5 MAorI2RlZmluZSBHUkxfUl9TVEFUVVNfMTMJCTB4Mjk0CisjZGVmaW5lIEdSTF9SX1NUQVRVU18x NAkJMHgyOTgKKyNkZWZpbmUgR1JMX1JfU1RBVFVTXzE1CQkweDI5YworI2RlZmluZSBHUkxfUl9T VEFUVVNfMTYJCTB4MmEwCisjZGVmaW5lIEdSTF9SX1NUQVRVU18xNwkJMHgyYTQKKyNkZWZpbmUg R1JMX1JfU1RBVFVTXzE4CQkweDJhOAorI2RlZmluZSBHUkxfUl9TVEFUVVNfMTkJCTB4MmFjCisj ZGVmaW5lIEdSTF9SX1NUQVRVU18yMAkJMHgyYjAKKyNkZWZpbmUgR1JMX1JfU1RBVFVTXzIxCQkw eDJiNAorI2RlZmluZSBHUkxfUl9TVEFUVVNfMjIJCTB4MmI4CisjZGVmaW5lIEdSTF9SX1NUQVRV U18yMwkJMHgyYmMKKyNkZWZpbmUgR1JMX0FCSVNUX0NUUkwwCQkweDJENAorI2RlZmluZSBHUkxf QUJJU1RfQ1RSTDEJCTB4MkQ4CisjZGVmaW5lIEFCSVNUX0VOCQkJQklUKDcpCisjZGVmaW5lIEFC SVNUX0RBVEFfRk1UCQkJKDB4NyA8PCAwKQorI2RlZmluZSBWSURFT19DRkdfMAkJMHgzODAKKyNk ZWZpbmUgVklERU9fQ0ZHXzEJCTB4Mzg0CisjZGVmaW5lIFZJREVPX0NGR18yCQkweDM4OAorI2Rl ZmluZSBWSURFT19DRkdfMwkJMHgzOGMKKyNkZWZpbmUgVklERU9fQ0ZHXzQJCTB4MzkwCisjZGVm aW5lIFZJREVPX1NPVVJDRV9TRUwJCUJJVCg3KQorI2RlZmluZSBOT1JNQUxfUEFUSAkJCSgxIDw8 IDcpCisjZGVmaW5lIEdFTl9SR0IJCQkJKDAgPDwgNykKKworI2RlZmluZSBIRE1JX1NZU19DRkcx QwkJMHgwMDAKKyNkZWZpbmUgSERNSV9PTgkJCQlCSVQoMCkKKyNkZWZpbmUgSERNSV9SU1QJCQlC SVQoMSkKKyNkZWZpbmUgQU5MR19PTgkJCQlCSVQoMikKKyNkZWZpbmUgQ0ZHMTBfRFZJCQkJQklU KDMpCisjZGVmaW5lIEhETUlfVFNUCQkJQklUKDMpCisjZGVmaW5lIFNZU19LRVlNQVNLMQkJCSgw eGZmIDw8IDgpCisjZGVmaW5lIFNZU19LRVlNQVNLMgkJCSgweGZmIDw8IDE2KQorI2RlZmluZSBB VURfT1VUU1lOQ19FTgkJCUJJVCgyNCkKKyNkZWZpbmUgQVVEX09VVFNZTkNfUFJFX0VOCQlCSVQo MjUpCisjZGVmaW5lIEkyQ01fT04JCQkJQklUKDI2KQorI2RlZmluZSBFMlBST01fVFlQRV84QklU CQlCSVQoMjcpCisjZGVmaW5lIE1DTV9FMlBST01fT04JCQlCSVQoMjgpCisjZGVmaW5lIEVYVF9F MlBST01fT04JCQlCSVQoMjkpCisjZGVmaW5lIEhUUExHX1BJTl9TRUxfT0ZGCQlCSVQoMzApCisj ZGVmaW5lIEFFU19FRlVTRV9FTkFCTEUJCUJJVCgzMSkKKyNkZWZpbmUgSERNSV9TWVNfQ0ZHMjAJ CTB4MDA0CisjZGVmaW5lIERFRVBfQ09MT1JfTU9ERV9NQVNLCQkoMyA8PCAxKQorI2RlZmluZSBD T0xPUl84QklUX01PREUJCQkoMCA8PCAxKQorI2RlZmluZSBDT0xPUl8xMEJJVF9NT0RFCQkoMSA8 PCAxKQorI2RlZmluZSBDT0xPUl8xMkJJVF9NT0RFCQkoMiA8PCAxKQorI2RlZmluZSBDT0xPUl8x NkJJVF9NT0RFCQkoMyA8PCAxKQorI2RlZmluZSBERUVQX0NPTE9SX0VOCQkJQklUKDApCisjZGVm aW5lIEhETUlfQVVESU9fVEVTVF9TRUwJCUJJVCg4KQorI2RlZmluZSBIRE1JMlAwX0VOCQkJQklU KDExKQorI2RlZmluZSBIRE1JX09VVF9GSUZPX0VOCQlCSVQoMTYpCisjZGVmaW5lIEhETUlfT1VU X0ZJRk9fQ0xLX0lOVgkJQklUKDE3KQorI2RlZmluZSBNSExfTU9ERV9PTgkJCUJJVCgyOCkKKyNk ZWZpbmUgTUhMX1BQX01PREUJCQlCSVQoMjkpCisjZGVmaW5lIE1ITF9TWU5DX0FVVE9fRU4JCUJJ VCgzMCkKKyNkZWZpbmUgSERNSV9QQ0xLX0ZSRUVfUlVOCQlCSVQoMzEpCisKKyNlbmRpZgpkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19tdDgxNzNfaGRtaV9waHkuYyBi L2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfbXQ4MTczX2hkbWlfcGh5LmMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQ5ZjA3ZgotLS0gL2Rldi9udWxsCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfbXQ4MTczX2hkbWlfcGh5LmMKQEAgLTAsMCArMSw1 MDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQgTWVkaWFUZWsgSW5jLgorICogQXV0aG9y OiBKaWUgUWl1IDxqaWUucWl1QG1lZGlhdGVrLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMg ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICog aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJz aW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgor ICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgor I2luY2x1ZGUgPGxpbnV4L2Nsay1wcm92aWRlci5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+ CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvc3lzY29uLmg+Cisj aW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGh5L3BoeS5oPgorI2lu Y2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+ CisKKyNkZWZpbmUgSERNSV9DT04wCQkweDAwCisjZGVmaW5lIFJHX0hETUlUWF9QTExfRU4JCUJJ VCgzMSkKKyNkZWZpbmUgUkdfSERNSVRYX1BMTF9GQktESVYJCSgweDdmIDw8IDI0KQorI2RlZmlu ZSBQTExfRkJLRElWX1NISUZUCQkyNAorI2RlZmluZSBSR19IRE1JVFhfUExMX0ZCS1NFTAkJKDB4 MyA8PCAyMikKKyNkZWZpbmUgUExMX0ZCS1NFTF9TSElGVAkJMjIKKyNkZWZpbmUgUkdfSERNSVRY X1BMTF9QUkVESVYJCSgweDMgPDwgMjApCisjZGVmaW5lIFBSRURJVl9TSElGVAkJCTIwCisjZGVm aW5lIFJHX0hETUlUWF9QTExfUE9TRElWCQkoMHgzIDw8IDE4KQorI2RlZmluZSBQT1NESVZfU0hJ RlQJCQkxOAorI2RlZmluZSBSR19IRE1JVFhfUExMX1JTVF9ETFkJCSgweDMgPDwgMTYpCisjZGVm aW5lIFJHX0hETUlUWF9QTExfSVIJCSgweGYgPDwgMTIpCisjZGVmaW5lIFBMTF9JUl9TSElGVAkJ CTEyCisjZGVmaW5lIFJHX0hETUlUWF9QTExfSUMJCSgweGYgPDwgOCkKKyNkZWZpbmUgUExMX0lD X1NISUZUCQkJOAorI2RlZmluZSBSR19IRE1JVFhfUExMX0JQCQkoMHhmIDw8IDQpCisjZGVmaW5l IFBMTF9CUF9TSElGVAkJCTQKKyNkZWZpbmUgUkdfSERNSVRYX1BMTF9CUgkJKDB4MyA8PCAyKQor I2RlZmluZSBQTExfQlJfU0hJRlQJCQkyCisjZGVmaW5lIFJHX0hETUlUWF9QTExfQkMJCSgweDMg PDwgMCkKKyNkZWZpbmUgUExMX0JDX1NISUZUCQkJMAorI2RlZmluZSBIRE1JX0NPTjEJCTB4MDQK KyNkZWZpbmUgUkdfSERNSVRYX1BMTF9ESVZFTgkJKDB4NyA8PCAyOSkKKyNkZWZpbmUgUExMX0RJ VkVOX1NISUZUCQkJMjkKKyNkZWZpbmUgUkdfSERNSVRYX1BMTF9BVVRPS19FTgkJQklUKDI4KQor I2RlZmluZSBSR19IRE1JVFhfUExMX0FVVE9LX0tGCQkoMHgzIDw8IDI2KQorI2RlZmluZSBSR19I RE1JVFhfUExMX0FVVE9LX0tTCQkoMHgzIDw8IDI0KQorI2RlZmluZSBSR19IRE1JVFhfUExMX0FV VE9LX0xPQUQJQklUKDIzKQorI2RlZmluZSBSR19IRE1JVFhfUExMX0JBTkQJCSgweDNmIDw8IDE2 KQorI2RlZmluZSBSR19IRE1JVFhfUExMX1JFRl9TRUwJCUJJVCgxNSkKKyNkZWZpbmUgUkdfSERN SVRYX1BMTF9CSUFTX0VOCQlCSVQoMTQpCisjZGVmaW5lIFJHX0hETUlUWF9QTExfQklBU19MUEZf RU4JQklUKDEzKQorI2RlZmluZSBSR19IRE1JVFhfUExMX1RYRElWX0VOCQlCSVQoMTIpCisjZGVm aW5lIFJHX0hETUlUWF9QTExfVFhESVYJCSgweDMgPDwgMTApCisjZGVmaW5lIFBMTF9UWERJVl9T SElGVAkJCTEwCisjZGVmaW5lIFJHX0hETUlUWF9QTExfTFZST0RfRU4JCUJJVCg5KQorI2RlZmlu ZSBSR19IRE1JVFhfUExMX01PTlZDX0VOCQlCSVQoOCkKKyNkZWZpbmUgUkdfSERNSVRYX1BMTF9N T05DS19FTgkJQklUKDcpCisjZGVmaW5lIFJHX0hETUlUWF9QTExfTU9OUkVGX0VOCQlCSVQoNikK KyNkZWZpbmUgUkdfSERNSVRYX1BMTF9UU1RfRU4JCUJJVCg1KQorI2RlZmluZSBSR19IRE1JVFhf UExMX1RTVF9DS19FTgkJQklUKDQpCisjZGVmaW5lIFJHX0hETUlUWF9QTExfVFNUX1NFTAkJKDB4 ZiA8PCAwKQorI2RlZmluZSBIRE1JX0NPTjIJCTB4MDgKKyNkZWZpbmUgUkdTX0hETUlUWF9QTExf QVVUT0tfQkFORAkoMHg3ZiA8PCA4KQorI2RlZmluZSBSR1NfSERNSVRYX1BMTF9BVVRPS19GQUlM CUJJVCgxKQorI2RlZmluZSBSR19IRE1JVFhfRU5fVFhfQ0tMRE8JCUJJVCgwKQorI2RlZmluZSBI RE1JX0NPTjMJCTB4MGMKKyNkZWZpbmUgUkdfSERNSVRYX1NFUl9FTgkJKDB4ZiA8PCAyOCkKKyNk ZWZpbmUgUkdfSERNSVRYX1BSRF9FTgkJKDB4ZiA8PCAyNCkKKyNkZWZpbmUgUkdfSERNSVRYX1BS RF9JTVBfRU4JCSgweGYgPDwgMjApCisjZGVmaW5lIFJHX0hETUlUWF9EUlZfRU4JCSgweGYgPDwg MTYpCisjZGVmaW5lIFJHX0hETUlUWF9EUlZfSU1QX0VOCQkoMHhmIDw8IDEyKQorI2RlZmluZSBE UlZfSU1QX0VOX1NISUZUCQkxMgorI2RlZmluZSBSR19IRE1JVFhfTUhMQ0tfRk9SQ0UJCUJJVCgx MCkKKyNkZWZpbmUgUkdfSERNSVRYX01ITENLX1BQSVhfRU4JCUJJVCg5KQorI2RlZmluZSBSR19I RE1JVFhfTUhMQ0tfRU4JCUJJVCg4KQorI2RlZmluZSBSR19IRE1JVFhfU0VSX0RJTl9TRUwJCSgw eGYgPDwgNCkKKyNkZWZpbmUgUkdfSERNSVRYX1NFUl81VDFfQklTVF9FTglCSVQoMykKKyNkZWZp bmUgUkdfSERNSVRYX1NFUl9CSVNUX1RPRwkJQklUKDIpCisjZGVmaW5lIFJHX0hETUlUWF9TRVJf RElOX1RPRwkJQklUKDEpCisjZGVmaW5lIFJHX0hETUlUWF9TRVJfQ0xLRElHX0lOVglCSVQoMCkK KyNkZWZpbmUgSERNSV9DT040CQkweDEwCisjZGVmaW5lIFJHX0hETUlUWF9QUkRfSUJJQVNfQ0xL CQkoMHhmIDw8IDI0KQorI2RlZmluZSBSR19IRE1JVFhfUFJEX0lCSUFTX0QyCQkoMHhmIDw8IDE2 KQorI2RlZmluZSBSR19IRE1JVFhfUFJEX0lCSUFTX0QxCQkoMHhmIDw8IDgpCisjZGVmaW5lIFJH X0hETUlUWF9QUkRfSUJJQVNfRDAJCSgweGYgPDwgMCkKKyNkZWZpbmUgUFJEX0lCSUFTX0NMS19T SElGVAkJMjQKKyNkZWZpbmUgUFJEX0lCSUFTX0QyX1NISUZUCQkxNgorI2RlZmluZSBQUkRfSUJJ QVNfRDFfU0hJRlQJCTgKKyNkZWZpbmUgUFJEX0lCSUFTX0QwX1NISUZUCQkwCisjZGVmaW5lIEhE TUlfQ09ONQkJMHgxNAorI2RlZmluZSBSR19IRE1JVFhfRFJWX0lCSUFTX0NMSwkJKDB4M2YgPDwg MjQpCisjZGVmaW5lIFJHX0hETUlUWF9EUlZfSUJJQVNfRDIJCSgweDNmIDw8IDE2KQorI2RlZmlu ZSBSR19IRE1JVFhfRFJWX0lCSUFTX0QxCQkoMHgzZiA8PCA4KQorI2RlZmluZSBSR19IRE1JVFhf RFJWX0lCSUFTX0QwCQkoMHgzZiA8PCAwKQorI2RlZmluZSBEUlZfSUJJQVNfQ0xLX1NISUZUCQky NAorI2RlZmluZSBEUlZfSUJJQVNfRDJfU0hJRlQJCTE2CisjZGVmaW5lIERSVl9JQklBU19EMV9T SElGVAkJOAorI2RlZmluZSBEUlZfSUJJQVNfRDBfU0hJRlQJCTAKKyNkZWZpbmUgSERNSV9DT042 CQkweDE4CisjZGVmaW5lIFJHX0hETUlUWF9EUlZfSU1QX0NMSwkJKDB4M2YgPDwgMjQpCisjZGVm aW5lIFJHX0hETUlUWF9EUlZfSU1QX0QyCQkoMHgzZiA8PCAxNikKKyNkZWZpbmUgUkdfSERNSVRY X0RSVl9JTVBfRDEJCSgweDNmIDw8IDgpCisjZGVmaW5lIFJHX0hETUlUWF9EUlZfSU1QX0QwCQko MHgzZiA8PCAwKQorI2RlZmluZSBEUlZfSU1QX0NMS19TSElGVAkJMjQKKyNkZWZpbmUgRFJWX0lN UF9EMl9TSElGVAkJMTYKKyNkZWZpbmUgRFJWX0lNUF9EMV9TSElGVAkJOAorI2RlZmluZSBEUlZf SU1QX0QwX1NISUZUCQkwCisjZGVmaW5lIEhETUlfQ09ONwkJMHgxYworI2RlZmluZSBSR19IRE1J VFhfTUhMQ0tfRFJWX0lCSUFTCSgweDFmIDw8IDI3KQorI2RlZmluZSBSR19IRE1JVFhfU0VSX0RJ TgkJKDB4M2ZmIDw8IDE2KQorI2RlZmluZSBSR19IRE1JVFhfQ0hMRENfVFNUCQkoMHhmIDw8IDEy KQorI2RlZmluZSBSR19IRE1JVFhfQ0hMQ0tfVFNUCQkoMHhmIDw8IDgpCisjZGVmaW5lIFJHX0hE TUlUWF9SRVNFUlZFCQkoMHhmZiA8PCAwKQorI2RlZmluZSBIRE1JX0NPTjgJCTB4MjAKKyNkZWZp bmUgUkdTX0hETUlUWF8yVDFfTEVWCQkoMHhmIDw8IDE2KQorI2RlZmluZSBSR1NfSERNSVRYXzJU MV9FREcJCSgweGYgPDwgMTIpCisjZGVmaW5lIFJHU19IRE1JVFhfNVQxX0xFVgkJKDB4ZiA8PCA4 KQorI2RlZmluZSBSR1NfSERNSVRYXzVUMV9FREcJCSgweGYgPDwgNCkKKyNkZWZpbmUgUkdTX0hE TUlUWF9QTFVHX1RTVAkJQklUKDApCisKK3N0cnVjdCBtdGtfaGRtaV9waHkgeworCXZvaWQgX19p b21lbSAqcmVnczsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0IGNsayAqcGxsOworCXN0 cnVjdCBjbGtfaHcgcGxsX2h3OworCXVuc2lnbmVkIGxvbmcgcGxsX3JhdGU7CisJdTggZHJ2X2lt cF9jbGs7CisJdTggZHJ2X2ltcF9kMjsKKwl1OCBkcnZfaW1wX2QxOworCXU4IGRydl9pbXBfZDA7 CisJdTMyIGliaWFzOworCXUzMiBpYmlhc191cDsKK307CisKK3N0YXRpYyBjb25zdCB1OCBQUkVE SVZbM11bNF0gPSB7CisJezB4MCwgMHgwLCAweDAsIDB4MH0sCS8qIDI3TWh6ICovCisJezB4MSwg MHgxLCAweDEsIDB4MX0sCS8qIDc0TWh6ICovCisJezB4MSwgMHgxLCAweDEsIDB4MX0JLyogMTQ4 TWh6ICovCit9OworCitzdGF0aWMgY29uc3QgdTggVFhESVZbM11bNF0gPSB7CisJezB4MywgMHgz LCAweDMsIDB4Mn0sCS8qIDI3TWh6ICovCisJezB4MiwgMHgxLCAweDEsIDB4MX0sCS8qIDc0TWh6 ICovCisJezB4MSwgMHgwLCAweDAsIDB4MH0JLyogMTQ4TWh6ICovCit9OworCitzdGF0aWMgY29u c3QgdTggRkJLU0VMWzNdWzRdID0geworCXsweDEsIDB4MSwgMHgxLCAweDF9LAkvKiAyN01oeiAq LworCXsweDEsIDB4MCwgMHgxLCAweDF9LAkvKiA3NE1oeiAqLworCXsweDEsIDB4MCwgMHgxLCAw eDF9CS8qIDE0OE1oeiAqLworfTsKKworc3RhdGljIGNvbnN0IHU4IEZCS0RJVlszXVs0XSA9IHsK Kwl7MTksIDI0LCAyOSwgMTl9LAkvKiAyN01oeiAqLworCXsxOSwgMjQsIDE0LCAxOX0sCS8qIDc0 TWh6ICovCisJezE5LCAyNCwgMTQsIDE5fQkvKiAxNDhNaHogKi8KK307CisKK3N0YXRpYyBjb25z dCB1OCBESVZFTlszXVs0XSA9IHsKKwl7MHgyLCAweDEsIDB4MSwgMHgyfSwJLyogMjdNaHogKi8K Kwl7MHgyLCAweDIsIDB4MiwgMHgyfSwJLyogNzRNaHogKi8KKwl7MHgyLCAweDIsIDB4MiwgMHgy fQkvKiAxNDhNaHogKi8KK307CisKK3N0YXRpYyBjb25zdCB1OCBIVFBMTEJQWzNdWzRdID0gewor CXsweGMsIDB4YywgMHg4LCAweGN9LAkvKiAyN01oeiAqLworCXsweGMsIDB4ZiwgMHhmLCAweGN9 LAkvKiA3NE1oeiAqLworCXsweGMsIDB4ZiwgMHhmLCAweGN9CS8qIDE0OE1oeiAqLworfTsKKwor c3RhdGljIGNvbnN0IHU4IEhUUExMQkNbM11bNF0gPSB7CisJezB4MiwgMHgzLCAweDMsIDB4Mn0s CS8qIDI3TWh6ICovCisJezB4MiwgMHgzLCAweDMsIDB4Mn0sCS8qIDc0TWh6ICovCisJezB4Miwg MHgzLCAweDMsIDB4Mn0JLyogMTQ4TWh6ICovCit9OworCitzdGF0aWMgY29uc3QgdTggSFRQTExC UlszXVs0XSA9IHsKKwl7MHgxLCAweDEsIDB4MCwgMHgxfSwJLyogMjdNaHogKi8KKwl7MHgxLCAw eDIsIDB4MiwgMHgxfSwJLyogNzRNaHogKi8KKwl7MHgxLCAweDIsIDB4MiwgMHgxfQkvKiAxNDhN aHogKi8KK307CisKK3N0YXRpYyB2b2lkIG10a19oZG1pX3BoeV9tYXNrKHN0cnVjdCBtdGtfaGRt aV9waHkgKmhkbWlfcGh5LCB1MzIgb2Zmc2V0LAorCQkJICAgICAgdTMyIHZhbCwgdTMyIG1hc2sp Cit7CisJdTMyIHRtcCA9IHJlYWRsKGhkbWlfcGh5LT5yZWdzICArIG9mZnNldCkgJiB+bWFzazsK KworCXRtcCB8PSAodmFsICYgbWFzayk7CisJd3JpdGVsKHRtcCwgaGRtaV9waHktPnJlZ3MgKyBv ZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtdGtfaGRtaV9waHkgKnRvX210a19o ZG1pX3BoeShzdHJ1Y3QgY2xrX2h3ICpodykKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGh3LCBz dHJ1Y3QgbXRrX2hkbWlfcGh5LCBwbGxfaHcpOworfQorCitzdGF0aWMgaW50IG10a19oZG1pX3Bs bF9wcmVwYXJlKHN0cnVjdCBjbGtfaHcgKmh3KQoreworCXN0cnVjdCBtdGtfaGRtaV9waHkgKmhk bWlfcGh5ID0gdG9fbXRrX2hkbWlfcGh5KGh3KTsKKworCWRldl9kYmcoaGRtaV9waHktPmRldiwg InByZXBhcmVcbiIpOworCisJbXRrX2hkbWlfcGh5X21hc2soaGRtaV9waHksIEhETUlfQ09OMSwg UkdfSERNSVRYX1BMTF9BVVRPS19FTiwKKwkJCSAgUkdfSERNSVRYX1BMTF9BVVRPS19FTik7CisJ bXRrX2hkbWlfcGh5X21hc2soaGRtaV9waHksIEhETUlfQ09OMCwgUkdfSERNSVRYX1BMTF9QT1NE SVYsCisJCQkgIFJHX0hETUlUWF9QTExfUE9TRElWKTsKKwltdGtfaGRtaV9waHlfbWFzayhoZG1p X3BoeSwgSERNSV9DT04zLCAwLCBSR19IRE1JVFhfTUhMQ0tfRU4pOworCW10a19oZG1pX3BoeV9t YXNrKGhkbWlfcGh5LCBIRE1JX0NPTjEsIFJHX0hETUlUWF9QTExfQklBU19FTiwKKwkJCSAgUkdf SERNSVRYX1BMTF9CSUFTX0VOKTsKKwl1c2xlZXBfcmFuZ2UoMTAwLCAxNTApOworCW10a19oZG1p X3BoeV9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjAsIFJHX0hETUlUWF9QTExfRU4sCisJCQkgIFJH X0hETUlUWF9QTExfRU4pOworCXVzbGVlcF9yYW5nZSgxMDAsIDE1MCk7CisJbXRrX2hkbWlfcGh5 X21hc2soaGRtaV9waHksIEhETUlfQ09OMSwgUkdfSERNSVRYX1BMTF9CSUFTX0xQRl9FTiwKKwkJ CSAgUkdfSERNSVRYX1BMTF9CSUFTX0xQRl9FTik7CisJbXRrX2hkbWlfcGh5X21hc2soaGRtaV9w aHksIEhETUlfQ09OMSwgUkdfSERNSVRYX1BMTF9UWERJVl9FTiwKKwkJCSAgUkdfSERNSVRYX1BM TF9UWERJVl9FTik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbXRrX2hkbWlfcGxs X3VucHJlcGFyZShzdHJ1Y3QgY2xrX2h3ICpodykKK3sKKwlzdHJ1Y3QgbXRrX2hkbWlfcGh5ICpo ZG1pX3BoeSA9IHRvX210a19oZG1pX3BoeShodyk7CisKKwlkZXZfZGJnKGhkbWlfcGh5LT5kZXYs ICJwcmVwYXJlXG4iKTsKKworCW10a19oZG1pX3BoeV9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjEs IDAsIFJHX0hETUlUWF9QTExfVFhESVZfRU4pOworCW10a19oZG1pX3BoeV9tYXNrKGhkbWlfcGh5 LCBIRE1JX0NPTjEsIDAsIFJHX0hETUlUWF9QTExfQklBU19MUEZfRU4pOworCXVzbGVlcF9yYW5n ZSgxMDAsIDE1MCk7CisJbXRrX2hkbWlfcGh5X21hc2soaGRtaV9waHksIEhETUlfQ09OMCwgMCwg UkdfSERNSVRYX1BMTF9FTik7CisJdXNsZWVwX3JhbmdlKDEwMCwgMTUwKTsKKwltdGtfaGRtaV9w aHlfbWFzayhoZG1pX3BoeSwgSERNSV9DT04xLCAwLCBSR19IRE1JVFhfUExMX0JJQVNfRU4pOwor CW10a19oZG1pX3BoeV9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjAsIDAsIFJHX0hETUlUWF9QTExf UE9TRElWKTsKKwltdGtfaGRtaV9waHlfbWFzayhoZG1pX3BoeSwgSERNSV9DT04xLCAwLCBSR19I RE1JVFhfUExMX0FVVE9LX0VOKTsKKwl1c2xlZXBfcmFuZ2UoMTAwLCAxNTApOworfQorCitzdGF0 aWMgaW50IG10a19oZG1pX3BsbF9zZXRfcmF0ZShzdHJ1Y3QgY2xrX2h3ICpodywgdW5zaWduZWQg bG9uZyByYXRlLAorCQkJCSB1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlKQoreworCXN0cnVjdCBt dGtfaGRtaV9waHkgKmhkbWlfcGh5ID0gdG9fbXRrX2hkbWlfcGh5KGh3KTsKKwl1bnNpZ25lZCBp bnQgcHJlX2RpdjsKKwl1bnNpZ25lZCBpbnQgZGl2OworCisJZGV2X2RiZyhoZG1pX3BoeS0+ZGV2 LCAic2V0IHJhdGUgOiAlbHUsIHBhcmVudDogJWx1XG4iLCByYXRlLAorCQlwYXJlbnRfcmF0ZSk7 CisKKwlpZiAocmF0ZSA8PSAyNzAwMDAwMCkgeworCQlwcmVfZGl2ID0gMDsKKwkJZGl2ID0gMzsK Kwl9IGVsc2UgaWYgKHJhdGUgPD0gNzQyNTAwMDApIHsKKwkJcHJlX2RpdiA9IDE7CisJCWRpdiA9 IDI7CisJfSBlbHNlIHsKKwkJcHJlX2RpdiA9IDE7CisJCWRpdiA9IDE7CisJfQorCisJbXRrX2hk bWlfcGh5X21hc2soaGRtaV9waHksIEhETUlfQ09OMCwKKwkJCSAgKHByZV9kaXYgPDwgUFJFRElW X1NISUZUKSwKKwkJCSAgUkdfSERNSVRYX1BMTF9QUkVESVYpOworCW10a19oZG1pX3BoeV9tYXNr KGhkbWlfcGh5LCBIRE1JX0NPTjAsIFJHX0hETUlUWF9QTExfUE9TRElWLAorCQkJICBSR19IRE1J VFhfUExMX1BPU0RJVik7CisJbXRrX2hkbWlfcGh5X21hc2soaGRtaV9waHksIEhETUlfQ09OMCwK KwkJCSAgKDB4MSA8PCBQTExfSUNfU0hJRlQpIHwgKDB4MSA8PCBQTExfSVJfU0hJRlQpLAorCQkJ ICBSR19IRE1JVFhfUExMX0lDIHwgUkdfSERNSVRYX1BMTF9JUik7CisJbXRrX2hkbWlfcGh5X21h c2soaGRtaV9waHksIEhETUlfQ09OMSwKKwkJCSAgKGRpdiA8PCBQTExfVFhESVZfU0hJRlQpLAor CQkJICBSR19IRE1JVFhfUExMX1RYRElWKTsKKwltdGtfaGRtaV9waHlfbWFzayhoZG1pX3BoeSwg SERNSV9DT04wLAorCQkJICAoMHgxIDw8IFBMTF9GQktTRUxfU0hJRlQpIHwgKDE5IDw8IFBMTF9G QktESVZfU0hJRlQpLAorCQkJICBSR19IRE1JVFhfUExMX0ZCS1NFTCB8IFJHX0hETUlUWF9QTExf RkJLRElWKTsKKwltdGtfaGRtaV9waHlfbWFzayhoZG1pX3BoeSwgSERNSV9DT04xLAorCQkJICAo MHgyIDw8IFBMTF9ESVZFTl9TSElGVCksCisJCQkgIFJHX0hETUlUWF9QTExfRElWRU4pOworCW10 a19oZG1pX3BoeV9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjAsCisJCQkgICgweGMgPDwgUExMX0JQ X1NISUZUKSB8ICgweDIgPDwgUExMX0JDX1NISUZUKSB8CisJCQkgICgweDEgPDwgUExMX0JSX1NI SUZUKSwKKwkJCSAgUkdfSERNSVRYX1BMTF9CUCB8IFJHX0hETUlUWF9QTExfQkMgfAorCQkJICBS R19IRE1JVFhfUExMX0JSKTsKKwltdGtfaGRtaV9waHlfbWFzayhoZG1pX3BoeSwgSERNSV9DT04z LCAwLCBSR19IRE1JVFhfUFJEX0lNUF9FTik7CisJbXRrX2hkbWlfcGh5X21hc2soaGRtaV9waHks IEhETUlfQ09ONCwKKwkJCSAgKDB4MyA8PCBQUkRfSUJJQVNfQ0xLX1NISUZUKSB8CisJCQkgICgw eDMgPDwgUFJEX0lCSUFTX0QyX1NISUZUKSB8CisJCQkgICgweDMgPDwgUFJEX0lCSUFTX0QxX1NI SUZUKSB8CisJCQkgICgweDMgPDwgUFJEX0lCSUFTX0QwX1NISUZUKSwKKwkJCSAgUkdfSERNSVRY X1BSRF9JQklBU19DTEsgfAorCQkJICBSR19IRE1JVFhfUFJEX0lCSUFTX0QyIHwKKwkJCSAgUkdf SERNSVRYX1BSRF9JQklBU19EMSB8CisJCQkgIFJHX0hETUlUWF9QUkRfSUJJQVNfRDApOworCW10 a19oZG1pX3BoeV9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjMsCisJCQkgICgweDAgPDwgRFJWX0lN UF9FTl9TSElGVCksCisJCQkgIFJHX0hETUlUWF9EUlZfSU1QX0VOKTsKKwltdGtfaGRtaV9waHlf bWFzayhoZG1pX3BoeSwgSERNSV9DT042LAorCQkJICAoaGRtaV9waHktPmRydl9pbXBfY2xrIDw8 IERSVl9JTVBfQ0xLX1NISUZUKSB8CisJCQkgIChoZG1pX3BoeS0+ZHJ2X2ltcF9kMiA8PCBEUlZf SU1QX0QyX1NISUZUKSB8CisJCQkgIChoZG1pX3BoeS0+ZHJ2X2ltcF9kMSA8PCBEUlZfSU1QX0Qx X1NISUZUKSB8CisJCQkgIChoZG1pX3BoeS0+ZHJ2X2ltcF9kMCA8PCBEUlZfSU1QX0QwX1NISUZU KSwKKwkJCSAgUkdfSERNSVRYX0RSVl9JTVBfQ0xLIHwgUkdfSERNSVRYX0RSVl9JTVBfRDIgfAor CQkJICBSR19IRE1JVFhfRFJWX0lNUF9EMSB8IFJHX0hETUlUWF9EUlZfSU1QX0QwKTsKKwltdGtf aGRtaV9waHlfbWFzayhoZG1pX3BoeSwgSERNSV9DT041LAorCQkJICAoaGRtaV9waHktPmliaWFz IDw8IERSVl9JQklBU19DTEtfU0hJRlQpIHwKKwkJCSAgKGhkbWlfcGh5LT5pYmlhcyA8PCBEUlZf SUJJQVNfRDJfU0hJRlQpIHwKKwkJCSAgKGhkbWlfcGh5LT5pYmlhcyA8PCBEUlZfSUJJQVNfRDFf U0hJRlQpIHwKKwkJCSAgKGhkbWlfcGh5LT5pYmlhcyA8PCBEUlZfSUJJQVNfRDBfU0hJRlQpLAor CQkJICBSR19IRE1JVFhfRFJWX0lCSUFTX0NMSyB8IFJHX0hETUlUWF9EUlZfSUJJQVNfRDIgfAor CQkJICBSR19IRE1JVFhfRFJWX0lCSUFTX0QxIHwgUkdfSERNSVRYX0RSVl9JQklBU19EMCk7CisJ cmV0dXJuIDA7Cit9CisKK3N0YXRpYyBsb25nIG10a19oZG1pX3BsbF9yb3VuZF9yYXRlKHN0cnVj dCBjbGtfaHcgKmh3LCB1bnNpZ25lZCBsb25nIHJhdGUsCisJCQkJICAgIHVuc2lnbmVkIGxvbmcg KnBhcmVudF9yYXRlKQoreworCXN0cnVjdCBtdGtfaGRtaV9waHkgKmhkbWlfcGh5ID0gdG9fbXRr X2hkbWlfcGh5KGh3KTsKKworCWhkbWlfcGh5LT5wbGxfcmF0ZSA9IHJhdGU7CisJaWYgKHJhdGUg PD0gNzQyNTAwMDApCisJCSpwYXJlbnRfcmF0ZSA9IHJhdGU7CisJZWxzZQorCQkqcGFyZW50X3Jh dGUgPSByYXRlIC8gMjsKKworCXJldHVybiByYXRlOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9u ZyBtdGtfaGRtaV9wbGxfcmVjYWxjX3JhdGUoc3RydWN0IGNsa19odyAqaHcsCisJCQkJCSAgICAg IHVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGUpCit7CisJc3RydWN0IG10a19oZG1pX3BoeSAqaGRt aV9waHkgPSB0b19tdGtfaGRtaV9waHkoaHcpOworCisJcmV0dXJuIGhkbWlfcGh5LT5wbGxfcmF0 ZTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtfb3BzIG10a19oZG1pX3BsbF9vcHMgPSB7 CisJLnByZXBhcmUgPSBtdGtfaGRtaV9wbGxfcHJlcGFyZSwKKwkudW5wcmVwYXJlID0gbXRrX2hk bWlfcGxsX3VucHJlcGFyZSwKKwkuc2V0X3JhdGUgPSBtdGtfaGRtaV9wbGxfc2V0X3JhdGUsCisJ LnJvdW5kX3JhdGUgPSBtdGtfaGRtaV9wbGxfcm91bmRfcmF0ZSwKKwkucmVjYWxjX3JhdGUgPSBt dGtfaGRtaV9wbGxfcmVjYWxjX3JhdGUsCit9OworCitzdGF0aWMgdm9pZCBtdGtfaGRtaV9waHlf ZW5hYmxlX3RtZHMoc3RydWN0IG10a19oZG1pX3BoeSAqaGRtaV9waHkpCit7CisJbXRrX2hkbWlf cGh5X21hc2soaGRtaV9waHksIEhETUlfQ09OMywgUkdfSERNSVRYX1NFUl9FTiwKKwkJCSAgUkdf SERNSVRYX1NFUl9FTik7CisJbXRrX2hkbWlfcGh5X21hc2soaGRtaV9waHksIEhETUlfQ09OMywg UkdfSERNSVRYX1BSRF9FTiwKKwkJCSAgUkdfSERNSVRYX1BSRF9FTik7CisJbXRrX2hkbWlfcGh5 X21hc2soaGRtaV9waHksIEhETUlfQ09OMywgUkdfSERNSVRYX0RSVl9FTiwKKwkJCSAgUkdfSERN SVRYX0RSVl9FTik7CisJdXNsZWVwX3JhbmdlKDEwMCwgMTUwKTsKK30KKworc3RhdGljIHZvaWQg bXRrX2hkbWlfcGh5X2Rpc2FibGVfdG1kcyhzdHJ1Y3QgbXRrX2hkbWlfcGh5ICpoZG1pX3BoeSkK K3sKKwltdGtfaGRtaV9waHlfbWFzayhoZG1pX3BoeSwgSERNSV9DT04zLCAwLCBSR19IRE1JVFhf RFJWX0VOKTsKKwltdGtfaGRtaV9waHlfbWFzayhoZG1pX3BoeSwgSERNSV9DT04zLCAwLCBSR19I RE1JVFhfUFJEX0VOKTsKKwltdGtfaGRtaV9waHlfbWFzayhoZG1pX3BoeSwgSERNSV9DT04zLCAw LCBSR19IRE1JVFhfU0VSX0VOKTsKK30KKworc3RhdGljIGludCBtdGtfaGRtaV9waHlfcG93ZXJf b24oc3RydWN0IHBoeSAqcGh5KQoreworCXN0cnVjdCBtdGtfaGRtaV9waHkgKmhkbWlfcGh5ID0g cGh5X2dldF9kcnZkYXRhKHBoeSk7CisJaW50IHJldDsKKworCXJldCA9IGNsa19wcmVwYXJlX2Vu YWJsZShoZG1pX3BoeS0+cGxsKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCW10 a19oZG1pX3BoeV9lbmFibGVfdG1kcyhoZG1pX3BoeSk7CisKKwlyZXR1cm4gMDsKK30KKworc3Rh dGljIGludCBtdGtfaGRtaV9waHlfcG93ZXJfb2ZmKHN0cnVjdCBwaHkgKnBoeSkKK3sKKwlzdHJ1 Y3QgbXRrX2hkbWlfcGh5ICpoZG1pX3BoeSA9IHBoeV9nZXRfZHJ2ZGF0YShwaHkpOworCisJbXRr X2hkbWlfcGh5X2Rpc2FibGVfdG1kcyhoZG1pX3BoeSk7CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJl KGhkbWlfcGh5LT5wbGwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGh5X29w cyBtdGtfaGRtaV9waHlfb3BzID0geworCS5wb3dlcl9vbiA9IG10a19oZG1pX3BoeV9wb3dlcl9v biwKKwkucG93ZXJfb2ZmID0gbXRrX2hkbWlfcGh5X3Bvd2VyX29mZiwKKwkub3duZXIgPSBUSElT X01PRFVMRSwKK307CisKK3N0YXRpYyBpbnQgbXRrX2hkbWlfcGh5X3Byb2JlKHN0cnVjdCBwbGF0 Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsK KwlzdHJ1Y3QgbXRrX2hkbWlfcGh5ICpoZG1pX3BoeTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKm1lbTsK KwlzdHJ1Y3QgY2xrICpyZWZfY2xrOworCWNvbnN0IGNoYXIgKnJlZl9jbGtfbmFtZTsKKwlzdHJ1 Y3QgY2xrX2luaXRfZGF0YSBjbGtfaW5pdCA9IHsKKwkJLm9wcyA9ICZtdGtfaGRtaV9wbGxfb3Bz LAorCQkubnVtX3BhcmVudHMgPSAxLAorCQkucGFyZW50X25hbWVzID0gKGNvbnN0IGNoYXIgKiBj b25zdCAqKSZyZWZfY2xrX25hbWUsCisJCS5mbGFncyA9IENMS19TRVRfUkFURV9QQVJFTlQgfCBD TEtfU0VUX1JBVEVfR0FURSwKKwl9OworCXN0cnVjdCBwaHkgKnBoeTsKKwlzdHJ1Y3QgcGh5X3By b3ZpZGVyICpwaHlfcHJvdmlkZXI7CisJaW50IHJldDsKKworCWhkbWlfcGh5ID0gZGV2bV9remFs bG9jKGRldiwgc2l6ZW9mKCpoZG1pX3BoeSksIEdGUF9LRVJORUwpOworCWlmICghaGRtaV9waHkp CisJCXJldHVybiAtRU5PTUVNOworCisJbWVtID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYs IElPUkVTT1VSQ0VfTUVNLCAwKTsKKwloZG1pX3BoeS0+cmVncyA9IGRldm1faW9yZW1hcF9yZXNv dXJjZShkZXYsIG1lbSk7CisJaWYgKElTX0VSUihoZG1pX3BoeS0+cmVncykpIHsKKwkJcmV0ID0g UFRSX0VSUihoZG1pX3BoeS0+cmVncyk7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGdldCBt ZW1vcnkgcmVzb3VyY2U6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJlZl9j bGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAicGxsX3JlZiIpOworCWlmIChJU19FUlIocmVmX2Nsaykp IHsKKwkJcmV0ID0gUFRSX0VSUihyZWZfY2xrKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFp bGVkIHRvIGdldCBQTEwgcmVmZXJlbmNlIGNsb2NrOiAlZFxuIiwKKwkJCXJldCk7CisJCXJldHVy biByZXQ7CisJfQorCXJlZl9jbGtfbmFtZSA9IF9fY2xrX2dldF9uYW1lKHJlZl9jbGspOworCisJ cmV0ID0gb2ZfcHJvcGVydHlfcmVhZF9zdHJpbmcoZGV2LT5vZl9ub2RlLCAiY2xvY2stb3V0cHV0 LW5hbWVzIiwKKwkJCQkgICAgICAmY2xrX2luaXQubmFtZSk7CisJaWYgKHJldCA8IDApIHsKKwkJ ZGV2X2VycihkZXYsICJGYWlsZWQgdG8gcmVhZCBjbG9jay1vdXRwdXQtbmFtZXM6ICVkXG4iLCBy ZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWhkbWlfcGh5LT5wbGxfaHcuaW5pdCA9ICZjbGtf aW5pdDsKKwloZG1pX3BoeS0+cGxsID0gZGV2bV9jbGtfcmVnaXN0ZXIoZGV2LCAmaGRtaV9waHkt PnBsbF9odyk7CisJaWYgKElTX0VSUihoZG1pX3BoeS0+cGxsKSkgeworCQlyZXQgPSBQVFJfRVJS KGhkbWlfcGh5LT5wbGwpOworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byByZWdpc3RlciBQTEw6 ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IG9mX3Byb3BlcnR5X3Jl YWRfdTMyKGRldi0+b2Zfbm9kZSwgIm1lZGlhdGVrLGliaWFzIiwKKwkJCQkgICAmaGRtaV9waHkt PmliaWFzKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQg dG8gZ2V0IGliaWFzOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBv Zl9wcm9wZXJ0eV9yZWFkX3UzMihkZXYtPm9mX25vZGUsICJtZWRpYXRlayxpYmlhc191cCIsCisJ CQkJICAgJmhkbWlfcGh5LT5pYmlhc191cCk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2Vycigm cGRldi0+ZGV2LCAiRmFpbGVkIHRvIGdldCBpYmlhcyB1cDogJWRcbiIsIHJldCk7CisJCXJldHVy biByZXQ7CisJfQorCisJZGV2X2luZm8oZGV2LCAiVXNpbmcgZGVmYXVsdCBUWCBEUlYgaW1wZWRh bmNlOiA0LjJrLzM2XG4iKTsKKwloZG1pX3BoeS0+ZHJ2X2ltcF9jbGsgPSAweDMwOworCWhkbWlf cGh5LT5kcnZfaW1wX2QyID0gMHgzMDsKKwloZG1pX3BoeS0+ZHJ2X2ltcF9kMSA9IDB4MzA7CisJ aGRtaV9waHktPmRydl9pbXBfZDAgPSAweDMwOworCisJcGh5ID0gZGV2bV9waHlfY3JlYXRlKGRl diwgTlVMTCwgJm10a19oZG1pX3BoeV9vcHMpOworCWlmIChJU19FUlIocGh5KSkgeworCQlkZXZf ZXJyKGRldiwgIkZhaWxlZCB0byBjcmVhdGUgSERNSSBQSFlcbiIpOworCQlyZXR1cm4gUFRSX0VS UihwaHkpOworCX0KKwlwaHlfc2V0X2RydmRhdGEocGh5LCBoZG1pX3BoeSk7CisKKwlwaHlfcHJv dmlkZXIgPSBkZXZtX29mX3BoeV9wcm92aWRlcl9yZWdpc3RlcihkZXYsIG9mX3BoeV9zaW1wbGVf eGxhdGUpOworCWlmIChJU19FUlIocGh5X3Byb3ZpZGVyKSkKKwkJcmV0dXJuIFBUUl9FUlIocGh5 X3Byb3ZpZGVyKTsKKworCWhkbWlfcGh5LT5kZXYgPSBkZXY7CisJcmV0dXJuIG9mX2Nsa19hZGRf cHJvdmlkZXIoZGV2LT5vZl9ub2RlLCBvZl9jbGtfc3JjX3NpbXBsZV9nZXQsCisJCQkJICAgaGRt aV9waHktPnBsbCk7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2hkbWlfcGh5X3JlbW92ZShzdHJ1Y3Qg cGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qg c3RydWN0IG9mX2RldmljZV9pZCBtdGtfaGRtaV9waHlfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRp YmxlID0gIm1lZGlhdGVrLG10ODE3My1oZG1pLXBoeSIsIH0sCisJe30sCit9OworCitzdHJ1Y3Qg cGxhdGZvcm1fZHJpdmVyIG10a19oZG1pX3BoeV9kcml2ZXIgPSB7CisJLnByb2JlID0gbXRrX2hk bWlfcGh5X3Byb2JlLAorCS5yZW1vdmUgPSBtdGtfaGRtaV9waHlfcmVtb3ZlLAorCS5kcml2ZXIg PSB7CisJCS5uYW1lID0gIm1lZGlhdGVrLWhkbWktcGh5IiwKKwkJLm9mX21hdGNoX3RhYmxlID0g bXRrX2hkbWlfcGh5X21hdGNoLAorCX0sCit9OworCitNT0RVTEVfQVVUSE9SKCJKaWUgUWl1IDxq aWUucWl1QG1lZGlhdGVrLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiTWVkaWFUZWsgTVQ4 MTczIEhETUkgUEhZIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwotLSAKMi43 LjAucmMzCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpk cmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0 cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=