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