From mboxrd@z Thu Jan 1 00:00:00 1970 From: Rajesh Yadav Subject: [DPU PATCH v3 11/12] drm/msm/dpu: move dpu_power_handle to dpu folder Date: Mon, 14 May 2018 20:56:58 +0530 Message-ID: <1526311619-3309-12-git-send-email-ryadav@codeaurora.org> References: <1526311619-3309-1-git-send-email-ryadav@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1526311619-3309-1-git-send-email-ryadav-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org Cc: robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, seanpaul-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org, Rajesh Yadav , hoegsberg-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org List-Id: linux-arm-msm@vger.kernel.org Tm93LCBzaW5jZSBkcHVfcG93ZXJfaGFuZGxlIG1hbmFnZXMgb25seSBidXMgc2NhbGluZwphbmQg cG93ZXIgZW5hYmxlL2Rpc2FibGUgbm90aWZpY2F0aW9ucyB3aGljaCBhcmUgcmVzdHJpY3RlZAp0 byBkcHUgZHJpdmVyLCBtb3ZlIGRwdV9wb3dlcl9oYW5kbGUgdG8gZHB1IGZvbGRlci4KCkNoYW5n ZXMgaW4gdjM6CgktIG5vbmUKCkNoYW5nZXMgaW4gdjI6CgktIHJlc29sdmVkIGNvbmZsaWN0IGlu IGRwdV91bmJpbmQKCS0gZHJvcHBlZCAoUmV2aWV3ZWQtYnk6IFNlYW4gUGF1bCkgZHVlIHRvIGFi b3ZlIGNoYW5nZQoKU2lnbmVkLW9mZi1ieTogUmFqZXNoIFlhZGF2IDxyeWFkYXZAY29kZWF1cm9y YS5vcmc+ClJldmlld2VkLWJ5OiBTZWFuIFBhdWwgPHNlYW5wYXVsQGNocm9taXVtLm9yZz4KLS0t CiBkcml2ZXJzL2dwdS9kcm0vbXNtL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgfCAgIDIg Ky0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jb3JlX2lycS5jICAgICB8ICAg MSAtCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY29yZV9wZXJmLmMgICAgfCAg IDUgKy0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmMgICAgICAgICB8 ICAgNyArLQogZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NydGMuaCAgICAgICAg IHwgICAyICsKIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyLmMgICAg ICB8ICAgMSAtCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfa21zLmMgICAgICAg ICAgfCAgMzkgKy0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9rbXMuaCAgICAg ICAgICB8ICAgMSArCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfcG93ZXJfaGFu ZGxlLmMgfCA2ODggKysrKysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9tc20v ZGlzcC9kcHUxL2RwdV9wb3dlcl9oYW5kbGUuaCB8IDI4OCArKysrKysrKysrCiBkcml2ZXJzL2dw dS9kcm0vbXNtL2RwdV9wb3dlcl9oYW5kbGUuYyAgICAgICAgICAgfCA2ODggLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZHB1X3Bvd2VyX2hhbmRsZS5oICAgICAg ICAgICB8IDI4OCAtLS0tLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9kcnYuYyAgICAg ICAgICAgICAgICAgICAgfCAgIDkgLQogZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZHJ2LmggICAg ICAgICAgICAgICAgICAgIHwgICA0IC0KIDE0IGZpbGVzIGNoYW5nZWQsIDEwMDggaW5zZXJ0aW9u cygrKSwgMTAxNSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9k cm0vbXNtL2Rpc3AvZHB1MS9kcHVfcG93ZXJfaGFuZGxlLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfcG93ZXJfaGFuZGxlLmgKIGRlbGV0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwdV9wb3dlcl9oYW5kbGUuYwogZGVsZXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZHB1X3Bvd2VyX2hhbmRsZS5oCgpkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9t c20vTWFrZWZpbGUKaW5kZXggZDk4MjZjMS4uZjU3OGQ1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9n cHUvZHJtL21zbS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL01ha2VmaWxlCkBA IC04MiwxMCArODIsMTAgQEAgbXNtLXkgOj0gXAogCWRpc3AvZHB1MS9kcHVfcm0ubyBcCiAJZGlz cC9kcHUxL2RwdV92YmlmLm8gXAogCWRpc3AvZHB1MS9kcHVfbWRzcy5vIFwKKwlkaXNwL2RwdTEv ZHB1X3Bvd2VyX2hhbmRsZS5vIFwKIAlkcHVfZGJnLm8gXAogCWRwdV9pb191dGlsLm8gXAogCWRw dV9kYmdfZXZ0bG9nLm8gXAotCWRwdV9wb3dlcl9oYW5kbGUubyBcCiAJbXNtX3Byb3AubyBcCiAJ bXNtX2F0b21pYy5vIFwKIAltc21fZGVidWdmcy5vIFwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jb3JlX2lycS5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9k aXNwL2RwdTEvZHB1X2NvcmVfaXJxLmMKaW5kZXggNWM1Y2M1Ni4uMzNhYjJhYyAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NvcmVfaXJxLmMKKysrIGIvZHJp dmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NvcmVfaXJxLmMKQEAgLTE4LDcgKzE4LDYg QEAKICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAKICNpbmNsdWRlICJkcHVfY29yZV9pcnEu aCIKLSNpbmNsdWRlICJkcHVfcG93ZXJfaGFuZGxlLmgiCiAKIC8qKgogICogZHB1X2NvcmVfaXJx X2NhbGxiYWNrX2hhbmRsZXIgLSBkaXNwYXRjaCBjb3JlIGludGVycnVwdHMKZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jb3JlX3BlcmYuYyBiL2RyaXZlcnMv Z3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jb3JlX3BlcmYuYwppbmRleCAyY2YzZmNhLi5kM2Ex ZWQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY29yZV9w ZXJmLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NvcmVfcGVyZi5j CkBAIC0yNTcsNyArMjU3LDYgQEAgc3RhdGljIHZvaWQgX2RwdV9jb3JlX3BlcmZfY3J0Y191cGRh dGVfYnVzKHN0cnVjdCBkcHVfa21zICprbXMsCiAJCQkJCT0gZHB1X2NydGNfZ2V0X2NsaWVudF90 eXBlKGNydGMpOwogCXN0cnVjdCBkcm1fY3J0YyAqdG1wX2NydGM7CiAJc3RydWN0IGRwdV9jcnRj X3N0YXRlICpkcHVfY3N0YXRlOwotCXN0cnVjdCBtc21fZHJtX3ByaXZhdGUgKnByaXYgPSBrbXMt PmRldi0+ZGV2X3ByaXZhdGU7CiAKIAlkcm1fZm9yX2VhY2hfY3J0Yyh0bXBfY3J0YywgY3J0Yy0+ ZGV2KSB7CiAJCWlmIChfZHB1X2NvcmVfcGVyZl9jcnRjX2lzX3Bvd2VyX29uKHRtcF9jcnRjKSAm JgpAQCAtMjg3LDcgKzI4Niw3IEBAIHN0YXRpYyB2b2lkIF9kcHVfY29yZV9wZXJmX2NydGNfdXBk YXRlX2J1cyhzdHJ1Y3QgZHB1X2ttcyAqa21zLAogCiAJc3dpdGNoIChjdXJyX2NsaWVudF90eXBl KSB7CiAJY2FzZSBOUlRfQ0xJRU5UOgotCQlkcHVfcG93ZXJfZGF0YV9idXNfc2V0X3F1b3RhKCZw cml2LT5waGFuZGxlLCBrbXMtPmNvcmVfY2xpZW50LAorCQlkcHVfcG93ZXJfZGF0YV9idXNfc2V0 X3F1b3RhKCZrbXMtPnBoYW5kbGUsIGttcy0+Y29yZV9jbGllbnQsCiAJCQkJRFBVX1BPV0VSX0hB TkRMRV9EQVRBX0JVU19DTElFTlRfTlJULAogCQkJCWJ1c19pZCwgYnVzX2FiX3F1b3RhLCBidXNf aWJfcXVvdGEpOwogCQlEUFVfREVCVUcoImNsaWVudDolcyBidXNfaWQ9JWQgYWI9JWxsdSBpYj0l bGx1XG4iLCAibnJ0IiwKQEAgLTI5NSw3ICsyOTQsNyBAQCBzdGF0aWMgdm9pZCBfZHB1X2NvcmVf cGVyZl9jcnRjX3VwZGF0ZV9idXMoc3RydWN0IGRwdV9rbXMgKmttcywKIAkJYnJlYWs7CiAKIAlj YXNlIFJUX0NMSUVOVDoKLQkJZHB1X3Bvd2VyX2RhdGFfYnVzX3NldF9xdW90YSgmcHJpdi0+cGhh bmRsZSwga21zLT5jb3JlX2NsaWVudCwKKwkJZHB1X3Bvd2VyX2RhdGFfYnVzX3NldF9xdW90YSgm a21zLT5waGFuZGxlLCBrbXMtPmNvcmVfY2xpZW50LAogCQkJCURQVV9QT1dFUl9IQU5ETEVfREFU QV9CVVNfQ0xJRU5UX1JULAogCQkJCWJ1c19pZCwgYnVzX2FiX3F1b3RhLCBidXNfaWJfcXVvdGEp OwogCQlEUFVfREVCVUcoImNsaWVudDolcyBidXNfaWQ9JWQgYWI9JWxsdSBpYj0lbGx1XG4iLCAi cnQiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NydGMu YyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmMKaW5kZXggZTJkMmUz Mi4uOTljNWU3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1 X2NydGMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0Yy5jCkBA IC01OTgsNiArNTk4LDcgQEAgc3RhdGljIHZvaWQgZHB1X2NydGNfZGVzdHJveShzdHJ1Y3QgZHJt X2NydGMgKmNydGMpCiAJX2RwdV9jcnRjX2Rlc3Ryb3lfZGVzdF9zY2FsZXIoZHB1X2NydGMpOwog CiAJX2RwdV9jcnRjX2RlaW5pdF9ldmVudHMoZHB1X2NydGMpOworCWRwdV9jcnRjLT5waGFuZGxl ID0gTlVMTDsKIAogCWRybV9jcnRjX2NsZWFudXAoY3J0Yyk7CiAJbXV0ZXhfZGVzdHJveSgmZHB1 X2NydGMtPmNydGNfbG9jayk7CkBAIC0yNTcyLDcgKzI1NzMsNyBAQCBzdGF0aWMgdm9pZCBkcHVf Y3J0Y19kaXNhYmxlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKIAl9CiAKIAlpZiAoZHB1X2NydGMt PnBvd2VyX2V2ZW50KQotCQlkcHVfcG93ZXJfaGFuZGxlX3VucmVnaXN0ZXJfZXZlbnQoJnByaXYt PnBoYW5kbGUsCisJCWRwdV9wb3dlcl9oYW5kbGVfdW5yZWdpc3Rlcl9ldmVudChkcHVfY3J0Yy0+ cGhhbmRsZSwKIAkJCQlkcHVfY3J0Yy0+cG93ZXJfZXZlbnQpOwogCiAKQEAgLTI2NDMsNyArMjY0 NCw3IEBAIHN0YXRpYyB2b2lkIGRwdV9jcnRjX2VuYWJsZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMs CiAJbXV0ZXhfdW5sb2NrKCZkcHVfY3J0Yy0+Y3J0Y19sb2NrKTsKIAogCWRwdV9jcnRjLT5wb3dl cl9ldmVudCA9IGRwdV9wb3dlcl9oYW5kbGVfcmVnaXN0ZXJfZXZlbnQoCi0JCSZwcml2LT5waGFu ZGxlLAorCQlkcHVfY3J0Yy0+cGhhbmRsZSwKIAkJRFBVX1BPV0VSX0VWRU5UX1BPU1RfRU5BQkxF IHwgRFBVX1BPV0VSX0VWRU5UX1BPU1RfRElTQUJMRSB8CiAJCURQVV9QT1dFUl9FVkVOVF9QUkVf RElTQUJMRSwKIAkJZHB1X2NydGNfaGFuZGxlX3Bvd2VyX2V2ZW50LCBjcnRjLCBkcHVfY3J0Yy0+ bmFtZSk7CkBAIC0zOTM4LDYgKzM5MzksOCBAQCBzdHJ1Y3QgZHJtX2NydGMgKmRwdV9jcnRjX2lu aXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9wbGFuZSAqcGxhbmUpCiAJZHB1 X2NwX2NydGNfaW5pdChjcnRjKTsKIAlkcHVfY3BfY3J0Y19pbnN0YWxsX3Byb3BlcnRpZXMoY3J0 Yyk7CiAKKwlkcHVfY3J0Yy0+cGhhbmRsZSA9ICZrbXMtPnBoYW5kbGU7CisKIAlEUFVfREVCVUco IiVzOiBzdWNjZXNzZnVsbHkgaW5pdGlhbGl6ZWQgY3J0Y1xuIiwgZHB1X2NydGMtPm5hbWUpOwog CXJldHVybiBjcnRjOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2Rw dTEvZHB1X2NydGMuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmgK aW5kZXggOTMwNDA1OC4uNjcxZDkwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9k aXNwL2RwdTEvZHB1X2NydGMuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9k cHVfY3J0Yy5oCkBAIC0xODQsNiArMTg0LDcgQEAgc3RydWN0IGRwdV9jcnRjX2V2ZW50IHsKICAq IEBtaXNyX2VuYWJsZSAgIDogYm9vbGVhbiBlbnRyeSBpbmRpY2F0ZXMgbWlzciBlbmFibGUvZGlz YWJsZSBzdGF0dXMuCiAgKiBAbWlzcl9mcmFtZV9jb3VudCAgOiBtaXNyIGZyYW1lIGNvdW50IHBy b3ZpZGVkIGJ5IGNsaWVudAogICogQG1pc3JfZGF0YSAgICAgOiBzdG9yZSBtaXNyIGRhdGEgYmVm b3JlIHR1cm5pbmcgb2ZmIHRoZSBjbG9ja3MuCisgKiBAcGhhbmRsZTogUG9pbnRlciB0byBwb3dl ciBoYW5kbGVyCiAgKiBAcG93ZXJfZXZlbnQgICA6IHJlZ2lzdGVyZWQgcG93ZXIgZXZlbnQgaGFu ZGxlCiAgKiBAY3VyX3BlcmYgICAgICA6IGN1cnJlbnQgcGVyZm9ybWFuY2UgY29tbWl0dGVkIHRv IGNsb2NrL2JhbmR3aWR0aCBkcml2ZXIKICAqIEBycF9sb2NrICAgICAgIDogc2VyaWFsaXphdGlv biBsb2NrIGZvciByZXNvdXJjZSBwb29sCkBAIC0yNDAsNiArMjQxLDcgQEAgc3RydWN0IGRwdV9j cnRjIHsKIAl1MzIgbWlzcl9mcmFtZV9jb3VudDsKIAl1MzIgbWlzcl9kYXRhW0NSVENfRFVBTF9N SVhFUlNdOwogCisJc3RydWN0IGRwdV9wb3dlcl9oYW5kbGUgKnBoYW5kbGU7CiAJc3RydWN0IGRw dV9wb3dlcl9ldmVudCAqcG93ZXJfZXZlbnQ7CiAKIAlzdHJ1Y3QgZHB1X2NvcmVfcGVyZl9wYXJh bXMgY3VyX3BlcmY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9k cHVfZW5jb2Rlci5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXIu YwppbmRleCAyOThhNmVmLi4xMWFlNmNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNt L2Rpc3AvZHB1MS9kcHVfZW5jb2Rlci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9k cHUxL2RwdV9lbmNvZGVyLmMKQEAgLTMxLDcgKzMxLDYgQEAKICNpbmNsdWRlICJkcHVfaHdfY3Rs LmgiCiAjaW5jbHVkZSAiZHB1X2Zvcm1hdHMuaCIKICNpbmNsdWRlICJkcHVfZW5jb2Rlcl9waHlz LmgiCi0jaW5jbHVkZSAiZHB1X3Bvd2VyX2hhbmRsZS5oIgogI2luY2x1ZGUgImRwdV9jcnRjLmgi CiAjaW5jbHVkZSAiZHB1X3RyYWNlLmgiCiAjaW5jbHVkZSAiZHB1X2NvcmVfaXJxLmgiCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfa21zLmMgYi9kcml2ZXJz L2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfa21zLmMKaW5kZXggOWMzYjIyMC4uMDU5OGNmYiAx MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2ttcy5jCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9rbXMuYwpAQCAtMTAxNywyNCArMTAx NywxOSBAQCBzdGF0aWMgbG9uZyBkcHVfa21zX3JvdW5kX3BpeGNsayhzdHJ1Y3QgbXNtX2ttcyAq a21zLCB1bnNpZ25lZCBsb25nIHJhdGUsCiBzdGF0aWMgdm9pZCBfZHB1X2ttc19od19kZXN0cm95 KHN0cnVjdCBkcHVfa21zICpkcHVfa21zKQogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXY7Ci0J c3RydWN0IG1zbV9kcm1fcHJpdmF0ZSAqcHJpdjsKIAlpbnQgaTsKIAogCWRldiA9IGRwdV9rbXMt PmRldjsKIAlpZiAoIWRldikKIAkJcmV0dXJuOwogCi0JcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7 Ci0JaWYgKCFwcml2KQotCQlyZXR1cm47Ci0KIAlpZiAoZHB1X2ttcy0+aHdfaW50cikKIAkJZHB1 X2h3X2ludHJfZGVzdHJveShkcHVfa21zLT5od19pbnRyKTsKIAlkcHVfa21zLT5od19pbnRyID0g TlVMTDsKIAogCWlmIChkcHVfa21zLT5wb3dlcl9ldmVudCkKIAkJZHB1X3Bvd2VyX2hhbmRsZV91 bnJlZ2lzdGVyX2V2ZW50KAotCQkJCSZwcml2LT5waGFuZGxlLCBkcHVfa21zLT5wb3dlcl9ldmVu dCk7CisJCQkJJmRwdV9rbXMtPnBoYW5kbGUsIGRwdV9rbXMtPnBvd2VyX2V2ZW50KTsKIAogCS8q IHNhZmUgdG8gY2FsbCB0aGVzZSBtb3JlIHRoYW4gb25jZSBkdXJpbmcgc2h1dGRvd24gKi8KIAlf ZHB1X2RlYnVnZnNfZGVzdHJveShkcHVfa21zKTsKQEAgLTEwNjcsNyArMTA2Miw4IEBAIHN0YXRp YyB2b2lkIF9kcHVfa21zX2h3X2Rlc3Ryb3koc3RydWN0IGRwdV9rbXMgKmRwdV9rbXMpCiAJZHB1 X2ttcy0+Y2F0YWxvZyA9IE5VTEw7CiAKIAlpZiAoZHB1X2ttcy0+Y29yZV9jbGllbnQpCi0JCWRw dV9wb3dlcl9jbGllbnRfZGVzdHJveSgmcHJpdi0+cGhhbmRsZSwgZHB1X2ttcy0+Y29yZV9jbGll bnQpOworCQlkcHVfcG93ZXJfY2xpZW50X2Rlc3Ryb3koJmRwdV9rbXMtPnBoYW5kbGUsCisJCQlk cHVfa21zLT5jb3JlX2NsaWVudCk7CiAJZHB1X2ttcy0+Y29yZV9jbGllbnQgPSBOVUxMOwogCiAJ aWYgKGRwdV9rbXMtPnZiaWZbVkJJRl9OUlRdKQpAQCAtMTYyNCw3ICsxNjIwLDggQEAgc3RhdGlj IGludCBkcHVfa21zX2h3X2luaXQoc3RydWN0IG1zbV9rbXMgKmttcykKIAl9CiAjZW5kaWYKIAot CWRwdV9rbXMtPmNvcmVfY2xpZW50ID0gZHB1X3Bvd2VyX2NsaWVudF9jcmVhdGUoJnByaXYtPnBo YW5kbGUsICJjb3JlIik7CisJZHB1X2ttcy0+Y29yZV9jbGllbnQgPSBkcHVfcG93ZXJfY2xpZW50 X2NyZWF0ZSgmZHB1X2ttcy0+cGhhbmRsZSwKKwkJCQkJImNvcmUiKTsKIAlpZiAoSVNfRVJSX09S X05VTEwoZHB1X2ttcy0+Y29yZV9jbGllbnQpKSB7CiAJCXJjID0gUFRSX0VSUihkcHVfa21zLT5j b3JlX2NsaWVudCk7CiAJCWlmICghZHB1X2ttcy0+Y29yZV9jbGllbnQpCkBAIC0xNzIxLDcgKzE3 MTgsOCBAQCBzdGF0aWMgaW50IGRwdV9rbXNfaHdfaW5pdChzdHJ1Y3QgbXNtX2ttcyAqa21zKQog I2VuZGlmCiAKIAlyYyA9IGRwdV9jb3JlX3BlcmZfaW5pdCgmZHB1X2ttcy0+cGVyZiwgZGV2LCBk cHVfa21zLT5jYXRhbG9nLAotCQkJJnByaXYtPnBoYW5kbGUsIF9kcHVfa21zX2dldF9jbGsoZHB1 X2ttcywgImNvcmVfY2xrIikpOworCQkJJmRwdV9rbXMtPnBoYW5kbGUsCisJCQlfZHB1X2ttc19n ZXRfY2xrKGRwdV9rbXMsICJjb3JlX2NsayIpKTsKIAlpZiAocmMpIHsKIAkJRFBVX0VSUk9SKCJm YWlsZWQgdG8gaW5pdCBwZXJmICVkXG4iLCByYyk7CiAJCWdvdG8gcGVyZl9lcnI7CkBAIC0xNzY1 LDcgKzE3NjMsOCBAQCBzdGF0aWMgaW50IGRwdV9rbXNfaHdfaW5pdChzdHJ1Y3QgbXNtX2ttcyAq a21zKQogCSAqIEhhbmRsZSAocmUpaW5pdGlhbGl6YXRpb25zIGR1cmluZyBwb3dlciBlbmFibGUK IAkgKi8KIAlkcHVfa21zX2hhbmRsZV9wb3dlcl9ldmVudChEUFVfUE9XRVJfRVZFTlRfUE9TVF9F TkFCTEUsIGRwdV9rbXMpOwotCWRwdV9rbXMtPnBvd2VyX2V2ZW50ID0gZHB1X3Bvd2VyX2hhbmRs ZV9yZWdpc3Rlcl9ldmVudCgmcHJpdi0+cGhhbmRsZSwKKwlkcHVfa21zLT5wb3dlcl9ldmVudCA9 IGRwdV9wb3dlcl9oYW5kbGVfcmVnaXN0ZXJfZXZlbnQoCisJCQkmZHB1X2ttcy0+cGhhbmRsZSwK IAkJCURQVV9QT1dFUl9FVkVOVF9QT1NUX0VOQUJMRSwKIAkJCWRwdV9rbXNfaGFuZGxlX3Bvd2Vy X2V2ZW50LCBkcHVfa21zLCAia21zIik7CiAKQEAgLTE4NDEsNiArMTg0MCwxMiBAQCBzdGF0aWMg aW50IGRwdV9iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqbWFzdGVyLCB2 b2lkICpkYXRhKQogCQlnb3RvIGNsa19yYXRlX2Vycm9yOwogCX0KIAorCXJldCA9IGRwdV9wb3dl cl9yZXNvdXJjZV9pbml0KHBkZXYsICZkcHVfa21zLT5waGFuZGxlKTsKKwlpZiAocmV0KSB7CisJ CXByX2VycigiZHB1IHBvd2VyIHJlc291cmNlIGluaXQgZmFpbGVkXG4iKTsKKwkJZ290byBwb3dl cl9pbml0X2ZhaWw7CisJfQorCiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZHB1X2ttcyk7 CiAKIAltc21fa21zX2luaXQoJmRwdV9rbXMtPmJhc2UsICZrbXNfZnVuY3MpOwpAQCAtMTg1Myw2 ICsxODU4LDcgQEAgc3RhdGljIGludCBkcHVfYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVj dCBkZXZpY2UgKm1hc3Rlciwgdm9pZCAqZGF0YSkKIAlwcml2LT5rbXMgPSAmZHB1X2ttcy0+YmFz ZTsKIAlyZXR1cm4gcmV0OwogCitwb3dlcl9pbml0X2ZhaWw6CiBjbGtfcmF0ZV9lcnJvcjoKIAlt c21fZHNzX3B1dF9jbGsobXAtPmNsa19jb25maWcsIG1wLT5udW1fY2xrKTsKIGNsa19nZXRfZXJy b3I6CkBAIC0xODY3LDYgKzE4NzMsNyBAQCBzdGF0aWMgdm9pZCBkcHVfdW5iaW5kKHN0cnVjdCBk ZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqbWFzdGVyLCB2b2lkICpkYXRhKQogCXN0cnVjdCBk cHVfa21zICpkcHVfa21zID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IGRz c19tb2R1bGVfcG93ZXIgKm1wID0gJmRwdV9rbXMtPm1wOwogCisJZHB1X3Bvd2VyX3Jlc291cmNl X2RlaW5pdChwZGV2LCAmZHB1X2ttcy0+cGhhbmRsZSk7CiAJbXNtX2Rzc19wdXRfY2xrKG1wLT5j bGtfY29uZmlnLCBtcC0+bnVtX2Nsayk7CiAJZGV2bV9rZnJlZSgmcGRldi0+ZGV2LCBtcC0+Y2xr X2NvbmZpZyk7CiAJbXAtPm51bV9jbGsgPSAwOwpAQCAtMTg5Nyw3ICsxOTA0LDYgQEAgc3RhdGlj IGludCBkcHVfcnVudGltZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIAlzdHJ1Y3QgcGxh dGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJc3RydWN0IGRw dV9rbXMgKmRwdV9rbXMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3QgZHJt X2RldmljZSAqZGRldjsKLQlzdHJ1Y3QgbXNtX2RybV9wcml2YXRlICpwcml2OwogCXN0cnVjdCBk c3NfbW9kdWxlX3Bvd2VyICptcCA9ICZkcHVfa21zLT5tcDsKIAogCWRkZXYgPSBkcHVfa21zLT5k ZXY7CkBAIC0xOTA1LDEwICsxOTExLDkgQEAgc3RhdGljIGludCBkcHVfcnVudGltZV9zdXNwZW5k KHN0cnVjdCBkZXZpY2UgKmRldikKIAkJRFBVX0VSUk9SKCJpbnZhbGlkIGRybV9kZXZpY2VcbiIp OwogCQlnb3RvIGV4aXQ7CiAJfQotCXByaXYgPSBkZGV2LT5kZXZfcHJpdmF0ZTsKIAotCXJjID0g ZHB1X3Bvd2VyX3Jlc291cmNlX2VuYWJsZSgmcHJpdi0+cGhhbmRsZSwKLQkJZHB1X2ttcy0+Y29y ZV9jbGllbnQsIGZhbHNlKTsKKwlyYyA9IGRwdV9wb3dlcl9yZXNvdXJjZV9lbmFibGUoJmRwdV9r bXMtPnBoYW5kbGUsCisJCQlkcHVfa21zLT5jb3JlX2NsaWVudCwgZmFsc2UpOwogCWlmIChyYykK IAkJRFBVX0VSUk9SKCJyZXNvdXJjZSBkaXNhYmxlIGZhaWxlZDogJWRcbiIsIHJjKTsKIApAQCAt MTkyNiw3ICsxOTMxLDYgQEAgc3RhdGljIGludCBkcHVfcnVudGltZV9yZXN1bWUoc3RydWN0IGRl dmljZSAqZGV2KQogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9k ZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgZHB1X2ttcyAqZHB1X2ttcyA9IHBsYXRmb3JtX2dldF9kcnZk YXRhKHBkZXYpOwogCXN0cnVjdCBkcm1fZGV2aWNlICpkZGV2OwotCXN0cnVjdCBtc21fZHJtX3By aXZhdGUgKnByaXY7CiAJc3RydWN0IGRzc19tb2R1bGVfcG93ZXIgKm1wID0gJmRwdV9rbXMtPm1w OwogCiAJZGRldiA9IGRwdV9rbXMtPmRldjsKQEAgLTE5MzQsNyArMTkzOCw2IEBAIHN0YXRpYyBp bnQgZHB1X3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIAkJRFBVX0VSUk9SKCJp bnZhbGlkIGRybV9kZXZpY2VcbiIpOwogCQlnb3RvIGV4aXQ7CiAJfQotCXByaXYgPSBkZGV2LT5k ZXZfcHJpdmF0ZTsKIAogCXJjID0gbXNtX2Rzc19lbmFibGVfY2xrKG1wLT5jbGtfY29uZmlnLCBt cC0+bnVtX2NsaywgdHJ1ZSk7CiAJaWYgKHJjKSB7CkBAIC0xOTQyLDggKzE5NDUsOCBAQCBzdGF0 aWMgaW50IGRwdV9ydW50aW1lX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiAJCWdvdG8gZXhp dDsKIAl9CiAKLQlyYyA9IGRwdV9wb3dlcl9yZXNvdXJjZV9lbmFibGUoJnByaXYtPnBoYW5kbGUs IGRwdV9rbXMtPmNvcmVfY2xpZW50LAotCQl0cnVlKTsKKwlyYyA9IGRwdV9wb3dlcl9yZXNvdXJj ZV9lbmFibGUoJmRwdV9rbXMtPnBoYW5kbGUsCisJCQlkcHVfa21zLT5jb3JlX2NsaWVudCwgdHJ1 ZSk7CiAJaWYgKHJjKQogCQlEUFVfRVJST1IoInJlc291cmNlIGVuYWJsZSBmYWlsZWQ6ICVkXG4i LCByYyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9r bXMuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9rbXMuaAppbmRleCBhODI1 NWZlLi5jNDhlZDRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9k cHVfa21zLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2ttcy5oCkBA IC0xNjQsNiArMTY0LDcgQEAgc3RydWN0IGRwdV9rbXMgewogCXN0cnVjdCBkcHVfbWRzc19jZmcg KmNhdGFsb2c7CiAKIAlzdHJ1Y3QgbXNtX2dlbV9hZGRyZXNzX3NwYWNlICphc3BhY2VbTVNNX1NN TVVfRE9NQUlOX01BWF07CisJc3RydWN0IGRwdV9wb3dlcl9oYW5kbGUgcGhhbmRsZTsKIAlzdHJ1 Y3QgZHB1X3Bvd2VyX2NsaWVudCAqY29yZV9jbGllbnQ7CiAjaWZkZWYgQ09ORklHX0lPTgogCXN0 cnVjdCBpb25fY2xpZW50ICppY2xpZW50OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21z bS9kaXNwL2RwdTEvZHB1X3Bvd2VyX2hhbmRsZS5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNw L2RwdTEvZHB1X3Bvd2VyX2hhbmRsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAuLmJkZjE4ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3Av ZHB1MS9kcHVfcG93ZXJfaGFuZGxlLmMKQEAgLTAsMCArMSw2ODggQEAKKy8qIENvcHlyaWdodCAo YykgMjAxNC0yMDE4LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K KyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1 dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCisgKiBvbmx5IHZlcnNpb24gMiBhcyBw dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHBy b2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y ZSBkZXRhaWxzLgorICoKKyAqLworCisjZGVmaW5lIHByX2ZtdChmbXQpCSJbZHJtOiVzOiVkXTog IiBmbXQsIF9fZnVuY19fLCBfX0xJTkVfXworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Cisj aW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRl IDxsaW51eC9vZl9hZGRyZXNzLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUg PGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKyNpZmRlZiBD T05GSUdfUUNPTV9CVVNfU0NBTElORworI2luY2x1ZGUgPGxpbnV4L21zbS1idXMuaD4KKyNpbmNs dWRlIDxsaW51eC9tc20tYnVzLWJvYXJkLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxsaW51eC9kcHVf aW9fdXRpbC5oPgorCisjaW5jbHVkZSAiZHB1X3Bvd2VyX2hhbmRsZS5oIgorI2luY2x1ZGUgImRw dV90cmFjZS5oIgorCitzdGF0aWMgY29uc3QgY2hhciAqZGF0YV9idXNfbmFtZVtEUFVfUE9XRVJf SEFORExFX0RCVVNfSURfTUFYXSA9IHsKKwlbRFBVX1BPV0VSX0hBTkRMRV9EQlVTX0lEX01OT0Nd ID0gInFjb20sZHB1LWRhdGEtYnVzIiwKKwlbRFBVX1BPV0VSX0hBTkRMRV9EQlVTX0lEX0xMQ0Nd ID0gInFjb20sZHB1LWxsY2MtYnVzIiwKKwlbRFBVX1BPV0VSX0hBTkRMRV9EQlVTX0lEX0VCSV0g PSAicWNvbSxkcHUtZWJpLWJ1cyIsCit9OworCitjb25zdCBjaGFyICpkcHVfcG93ZXJfaGFuZGxl X2dldF9kYnVzX25hbWUodTMyIGJ1c19pZCkKK3sKKwlpZiAoYnVzX2lkIDwgRFBVX1BPV0VSX0hB TkRMRV9EQlVTX0lEX01BWCkKKwkJcmV0dXJuIGRhdGFfYnVzX25hbWVbYnVzX2lkXTsKKworCXJl dHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBkcHVfcG93ZXJfZXZlbnRfdHJpZ2dlcl9sb2Nr ZWQoc3RydWN0IGRwdV9wb3dlcl9oYW5kbGUgKnBoYW5kbGUsCisJCXUzMiBldmVudF90eXBlKQor eworCXN0cnVjdCBkcHVfcG93ZXJfZXZlbnQgKmV2ZW50OworCisJbGlzdF9mb3JfZWFjaF9lbnRy eShldmVudCwgJnBoYW5kbGUtPmV2ZW50X2xpc3QsIGxpc3QpIHsKKwkJaWYgKGV2ZW50LT5ldmVu dF90eXBlICYgZXZlbnRfdHlwZSkKKwkJCWV2ZW50LT5jYl9mbmMoZXZlbnRfdHlwZSwgZXZlbnQt PnVzcik7CisJfQorfQorCitzdHJ1Y3QgZHB1X3Bvd2VyX2NsaWVudCAqZHB1X3Bvd2VyX2NsaWVu dF9jcmVhdGUoCisJc3RydWN0IGRwdV9wb3dlcl9oYW5kbGUgKnBoYW5kbGUsIGNoYXIgKmNsaWVu dF9uYW1lKQoreworCXN0cnVjdCBkcHVfcG93ZXJfY2xpZW50ICpjbGllbnQ7CisJc3RhdGljIHUz MiBpZDsKKworCWlmICghY2xpZW50X25hbWUgfHwgIXBoYW5kbGUpIHsKKwkJcHJfZXJyKCJjbGll bnQgbmFtZSBpcyBudWxsIG9yIGludmFsaWQgcG93ZXIgZGF0YVxuIik7CisJCXJldHVybiBFUlJf UFRSKC1FSU5WQUwpOworCX0KKworCWNsaWVudCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkcHVf cG93ZXJfY2xpZW50KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjbGllbnQpCisJCXJldHVybiBFUlJf UFRSKC1FTk9NRU0pOworCisJbXV0ZXhfbG9jaygmcGhhbmRsZS0+cGhhbmRsZV9sb2NrKTsKKwlz dHJsY3B5KGNsaWVudC0+bmFtZSwgY2xpZW50X25hbWUsIE1BWF9DTElFTlRfTkFNRV9MRU4pOwor CWNsaWVudC0+dXNlY2FzZV9uZHggPSBWT1RFX0lOREVYX0RJU0FCTEU7CisJY2xpZW50LT5pZCA9 IGlkOworCWNsaWVudC0+YWN0aXZlID0gdHJ1ZTsKKwlwcl9kZWJ1ZygiY2xpZW50ICVzIGNyZWF0 ZWQ6JXBLIGlkIDolZFxuIiwgY2xpZW50X25hbWUsCisJCWNsaWVudCwgaWQpOworCWlkKys7CisJ bGlzdF9hZGQoJmNsaWVudC0+bGlzdCwgJnBoYW5kbGUtPnBvd2VyX2NsaWVudF9jbGlzdCk7CisJ bXV0ZXhfdW5sb2NrKCZwaGFuZGxlLT5waGFuZGxlX2xvY2spOworCisJcmV0dXJuIGNsaWVudDsK K30KKwordm9pZCBkcHVfcG93ZXJfY2xpZW50X2Rlc3Ryb3koc3RydWN0IGRwdV9wb3dlcl9oYW5k bGUgKnBoYW5kbGUsCisJc3RydWN0IGRwdV9wb3dlcl9jbGllbnQgKmNsaWVudCkKK3sKKwlpZiAo IWNsaWVudCAgfHwgIXBoYW5kbGUpIHsKKwkJcHJfZXJyKCJyZWcgYnVzIHZvdGU6IGludmFsaWQg Y2xpZW50IGhhbmRsZVxuIik7CisJfSBlbHNlIGlmICghY2xpZW50LT5hY3RpdmUpIHsKKwkJcHJf ZXJyKCJkcHUgcG93ZXIgZGVpbml0IGFscmVhZHkgZG9uZVxuIik7CisJCWtmcmVlKGNsaWVudCk7 CisJfSBlbHNlIHsKKwkJcHJfZGVidWcoImJ1cyB2b3RlIGNsaWVudCAlcyBkZXN0cm95ZWQ6JXBL IGlkOiV1XG4iLAorCQkJY2xpZW50LT5uYW1lLCBjbGllbnQsIGNsaWVudC0+aWQpOworCQltdXRl eF9sb2NrKCZwaGFuZGxlLT5waGFuZGxlX2xvY2spOworCQlsaXN0X2RlbF9pbml0KCZjbGllbnQt Pmxpc3QpOworCQltdXRleF91bmxvY2soJnBoYW5kbGUtPnBoYW5kbGVfbG9jayk7CisJCWtmcmVl KGNsaWVudCk7CisJfQorfQorCisjaWZkZWYgQ09ORklHX1FDT01fQlVTX1NDQUxJTkcKKworI2Rl ZmluZSBNQVhfQVhJX1BPUlRfQ09VTlQgMworCitzdGF0aWMgaW50IF9kcHVfcG93ZXJfZGF0YV9i dXNfc2V0X3F1b3RhKAorCQlzdHJ1Y3QgZHB1X3Bvd2VyX2RhdGFfYnVzX2hhbmRsZSAqcGRidXMs CisJCXU2NCBhYl9xdW90YV9ydCwgdTY0IGFiX3F1b3RhX25ydCwKKwkJdTY0IGliX3F1b3RhX3J0 LCB1NjQgaWJfcXVvdGFfbnJ0KQoreworCWludCBuZXdfdWNfaWR4OworCXU2NCBhYl9xdW90YVtN QVhfQVhJX1BPUlRfQ09VTlRdID0gezAsIDB9OworCXU2NCBpYl9xdW90YVtNQVhfQVhJX1BPUlRf Q09VTlRdID0gezAsIDB9OworCWludCByYzsKKworCWlmIChwZGJ1cy0+ZGF0YV9idXNfaGRsIDwg MSkgeworCQlwcl9lcnIoImludmFsaWQgYnVzIGhhbmRsZSAlZFxuIiwgcGRidXMtPmRhdGFfYnVz X2hkbCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXBkYnVzLT5hYl9ydCA9IGFiX3F1b3Rh X3J0OworCXBkYnVzLT5pYl9ydCA9IGliX3F1b3RhX3J0OworCXBkYnVzLT5hYl9ucnQgPSBhYl9x dW90YV9ucnQ7CisJcGRidXMtPmliX25ydCA9IGliX3F1b3RhX25ydDsKKworCWlmIChwZGJ1cy0+ ZW5hYmxlKSB7CisJCWFiX3F1b3RhX3J0ID0gbWF4X3QodTY0LCBhYl9xdW90YV9ydCwKKwkJCQlE UFVfUE9XRVJfSEFORExFX0VOQUJMRV9CVVNfQUJfUVVPVEEpOworCQlpYl9xdW90YV9ydCA9IG1h eF90KHU2NCwgaWJfcXVvdGFfcnQsCisJCQkJRFBVX1BPV0VSX0hBTkRMRV9FTkFCTEVfQlVTX0lC X1FVT1RBKTsKKwkJYWJfcXVvdGFfbnJ0ID0gbWF4X3QodTY0LCBhYl9xdW90YV9ucnQsCisJCQkJ RFBVX1BPV0VSX0hBTkRMRV9FTkFCTEVfQlVTX0FCX1FVT1RBKTsKKwkJaWJfcXVvdGFfbnJ0ID0g bWF4X3QodTY0LCBpYl9xdW90YV9ucnQsCisJCQkJRFBVX1BPV0VSX0hBTkRMRV9FTkFCTEVfQlVT X0lCX1FVT1RBKTsKKwl9IGVsc2UgeworCQlhYl9xdW90YV9ydCA9IG1pbl90KHU2NCwgYWJfcXVv dGFfcnQsCisJCQkJRFBVX1BPV0VSX0hBTkRMRV9ESVNBQkxFX0JVU19BQl9RVU9UQSk7CisJCWli X3F1b3RhX3J0ID0gbWluX3QodTY0LCBpYl9xdW90YV9ydCwKKwkJCQlEUFVfUE9XRVJfSEFORExF X0RJU0FCTEVfQlVTX0lCX1FVT1RBKTsKKwkJYWJfcXVvdGFfbnJ0ID0gbWluX3QodTY0LCBhYl9x dW90YV9ucnQsCisJCQkJRFBVX1BPV0VSX0hBTkRMRV9ESVNBQkxFX0JVU19BQl9RVU9UQSk7CisJ CWliX3F1b3RhX25ydCA9IG1pbl90KHU2NCwgaWJfcXVvdGFfbnJ0LAorCQkJCURQVV9QT1dFUl9I QU5ETEVfRElTQUJMRV9CVVNfSUJfUVVPVEEpOworCX0KKworCWlmICghYWJfcXVvdGFfcnQgJiYg IWFiX3F1b3RhX25ydCAmJiAhaWJfcXVvdGFfcnQgJiYgIWliX3F1b3RhX25ydCkgIHsKKwkJbmV3 X3VjX2lkeCA9IDA7CisJfSBlbHNlIHsKKwkJaW50IGk7CisJCXN0cnVjdCBtc21fYnVzX3ZlY3Rv cnMgKnZlY3QgPSBOVUxMOworCQlzdHJ1Y3QgbXNtX2J1c19zY2FsZV9wZGF0YSAqYndfdGFibGUg PQorCQkJcGRidXMtPmRhdGFfYnVzX3NjYWxlX3RhYmxlOworCQl1MzIgbnJ0X2F4aV9wb3J0X2Nu dCA9IHBkYnVzLT5ucnRfYXhpX3BvcnRfY250OworCQl1MzIgdG90YWxfYXhpX3BvcnRfY250ID0g cGRidXMtPmF4aV9wb3J0X2NudDsKKwkJdTMyIHJ0X2F4aV9wb3J0X2NudCA9IHRvdGFsX2F4aV9w b3J0X2NudCAtIG5ydF9heGlfcG9ydF9jbnQ7CisKKwkJaWYgKCFid190YWJsZSB8fCAhdG90YWxf YXhpX3BvcnRfY250IHx8CisJCSAgICB0b3RhbF9heGlfcG9ydF9jbnQgPiBNQVhfQVhJX1BPUlRf Q09VTlQpIHsKKwkJCXByX2VycigiaW52YWxpZCBpbnB1dFxuIik7CisJCQlyZXR1cm4gLUVJTlZB TDsKKwkJfQorCisJCWlmIChwZGJ1cy0+YnVzX2NoYW5uZWxzKSB7CisJCQlpYl9xdW90YV9ydCA9 IGRpdl91NjQoaWJfcXVvdGFfcnQsCisJCQkJCQlwZGJ1cy0+YnVzX2NoYW5uZWxzKTsKKwkJCWli X3F1b3RhX25ydCA9IGRpdl91NjQoaWJfcXVvdGFfbnJ0LAorCQkJCQkJcGRidXMtPmJ1c19jaGFu bmVscyk7CisJCX0KKworCQlpZiAobnJ0X2F4aV9wb3J0X2NudCkgeworCisJCQlhYl9xdW90YV9y dCA9IGRpdl91NjQoYWJfcXVvdGFfcnQsIHJ0X2F4aV9wb3J0X2NudCk7CisJCQlhYl9xdW90YV9u cnQgPSBkaXZfdTY0KGFiX3F1b3RhX25ydCwgbnJ0X2F4aV9wb3J0X2NudCk7CisKKwkJCWZvciAo aSA9IDA7IGkgPCB0b3RhbF9heGlfcG9ydF9jbnQ7IGkrKykgeworCQkJCWlmIChpIDwgcnRfYXhp X3BvcnRfY250KSB7CisJCQkJCWFiX3F1b3RhW2ldID0gYWJfcXVvdGFfcnQ7CisJCQkJCWliX3F1 b3RhW2ldID0gaWJfcXVvdGFfcnQ7CisJCQkJfSBlbHNlIHsKKwkJCQkJYWJfcXVvdGFbaV0gPSBh Yl9xdW90YV9ucnQ7CisJCQkJCWliX3F1b3RhW2ldID0gaWJfcXVvdGFfbnJ0OworCQkJCX0KKwkJ CX0KKwkJfSBlbHNlIHsKKwkJCWFiX3F1b3RhWzBdID0gZGl2X3U2NChhYl9xdW90YV9ydCArIGFi X3F1b3RhX25ydCwKKwkJCQkJdG90YWxfYXhpX3BvcnRfY250KTsKKwkJCWliX3F1b3RhWzBdID0g aWJfcXVvdGFfcnQgKyBpYl9xdW90YV9ucnQ7CisKKwkJCWZvciAoaSA9IDE7IGkgPCB0b3RhbF9h eGlfcG9ydF9jbnQ7IGkrKykgeworCQkJCWFiX3F1b3RhW2ldID0gYWJfcXVvdGFbMF07CisJCQkJ aWJfcXVvdGFbaV0gPSBpYl9xdW90YVswXTsKKwkJCX0KKwkJfQorCisJCW5ld191Y19pZHggPSAo cGRidXMtPmN1cnJfYndfdWNfaWR4ICUKKwkJCShid190YWJsZS0+bnVtX3VzZWNhc2VzIC0gMSkp ICsgMTsKKworCQlmb3IgKGkgPSAwOyBpIDwgdG90YWxfYXhpX3BvcnRfY250OyBpKyspIHsKKwkJ CXZlY3QgPSAmYndfdGFibGUtPnVzZWNhc2VbbmV3X3VjX2lkeF0udmVjdG9yc1tpXTsKKwkJCXZl Y3QtPmFiID0gYWJfcXVvdGFbaV07CisJCQl2ZWN0LT5pYiA9IGliX3F1b3RhW2ldOworCisJCQlw cl9kZWJ1ZygKKwkJCQkiJXMgdWNfaWR4PSVkICVzIHBhdGggaWR4PSVkIGFiPSVsbHUgaWI9JWxs dVxuIiwKKwkJCQlid190YWJsZS0+bmFtZSwKKwkJCQluZXdfdWNfaWR4LCAoaSA8IHJ0X2F4aV9w b3J0X2NudCkgPyAicnQiIDogIm5ydCIKKwkJCQksIGksIHZlY3QtPmFiLCB2ZWN0LT5pYik7CisJ CX0KKwl9CisJcGRidXMtPmN1cnJfYndfdWNfaWR4ID0gbmV3X3VjX2lkeDsKKwlwZGJ1cy0+YW9f YndfdWNfaWR4ID0gbmV3X3VjX2lkeDsKKworCURQVV9BVFJBQ0VfQkVHSU4oIm1zbV9idXNfc2Nh bGVfcmVxIik7CisJcmMgPSBtc21fYnVzX3NjYWxlX2NsaWVudF91cGRhdGVfcmVxdWVzdChwZGJ1 cy0+ZGF0YV9idXNfaGRsLAorCQkJbmV3X3VjX2lkeCk7CisJRFBVX0FUUkFDRV9FTkQoIm1zbV9i dXNfc2NhbGVfcmVxIik7CisKKwlyZXR1cm4gcmM7Cit9CisKK2ludCBkcHVfcG93ZXJfZGF0YV9i dXNfc2V0X3F1b3RhKHN0cnVjdCBkcHVfcG93ZXJfaGFuZGxlICpwaGFuZGxlLAorCQlzdHJ1Y3Qg ZHB1X3Bvd2VyX2NsaWVudCAqcGNsaWVudCwKKwkJaW50IGJ1c19jbGllbnQsIHUzMiBidXNfaWQs CisJCXU2NCBhYl9xdW90YSwgdTY0IGliX3F1b3RhKQoreworCWludCByYyA9IDA7CisJaW50IGk7 CisJdTY0IHRvdGFsX2FiX3J0ID0gMCwgdG90YWxfaWJfcnQgPSAwOworCXU2NCB0b3RhbF9hYl9u cnQgPSAwLCB0b3RhbF9pYl9ucnQgPSAwOworCXN0cnVjdCBkcHVfcG93ZXJfY2xpZW50ICpjbGll bnQ7CisKKwlpZiAoIXBoYW5kbGUgfHwgIXBjbGllbnQgfHwKKwkJCWJ1c19jbGllbnQgPj0gRFBV X1BPV0VSX0hBTkRMRV9EQVRBX0JVU19DTElFTlRfTUFYIHx8CisJCQlidXNfaWQgPj0gRFBVX1BP V0VSX0hBTkRMRV9EQlVTX0lEX01BWCkgeworCQlwcl9lcnIoImludmFsaWQgcGFyYW1ldGVyc1xu Iik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW11dGV4X2xvY2soJnBoYW5kbGUtPnBoYW5k bGVfbG9jayk7CisKKwlwY2xpZW50LT5hYltidXNfY2xpZW50XSA9IGFiX3F1b3RhOworCXBjbGll bnQtPmliW2J1c19jbGllbnRdID0gaWJfcXVvdGE7CisJdHJhY2VfZHB1X3BlcmZfdXBkYXRlX2J1 cyhidXNfY2xpZW50LCBhYl9xdW90YSwgaWJfcXVvdGEpOworCisJbGlzdF9mb3JfZWFjaF9lbnRy eShjbGllbnQsICZwaGFuZGxlLT5wb3dlcl9jbGllbnRfY2xpc3QsIGxpc3QpIHsKKwkJZm9yIChp ID0gMDsgaSA8IERQVV9QT1dFUl9IQU5ETEVfREFUQV9CVVNfQ0xJRU5UX01BWDsgaSsrKSB7CisJ CQlpZiAoaSA9PSBEUFVfUE9XRVJfSEFORExFX0RBVEFfQlVTX0NMSUVOVF9OUlQpIHsKKwkJCQl0 b3RhbF9hYl9ucnQgKz0gY2xpZW50LT5hYltpXTsKKwkJCQl0b3RhbF9pYl9ucnQgKz0gY2xpZW50 LT5pYltpXTsKKwkJCX0gZWxzZSB7CisJCQkJdG90YWxfYWJfcnQgKz0gY2xpZW50LT5hYltpXTsK KwkJCQl0b3RhbF9pYl9ydCA9IG1heCh0b3RhbF9pYl9ydCwgY2xpZW50LT5pYltpXSk7CisJCQl9 CisJCX0KKwl9CisKKwlpZiAocGhhbmRsZS0+ZGF0YV9idXNfaGFuZGxlW2J1c19pZF0uZGF0YV9i dXNfaGRsKQorCQlyYyA9IF9kcHVfcG93ZXJfZGF0YV9idXNfc2V0X3F1b3RhKAorCQkJJnBoYW5k bGUtPmRhdGFfYnVzX2hhbmRsZVtidXNfaWRdLAorCQkJdG90YWxfYWJfcnQsIHRvdGFsX2FiX25y dCwKKwkJCXRvdGFsX2liX3J0LCB0b3RhbF9pYl9ucnQpOworCisJbXV0ZXhfdW5sb2NrKCZwaGFu ZGxlLT5waGFuZGxlX2xvY2spOworCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZCBkcHVf cG93ZXJfZGF0YV9idXNfdW5yZWdpc3RlcigKKwkJc3RydWN0IGRwdV9wb3dlcl9kYXRhX2J1c19o YW5kbGUgKnBkYnVzKQoreworCWlmIChwZGJ1cy0+ZGF0YV9idXNfaGRsKSB7CisJCW1zbV9idXNf c2NhbGVfdW5yZWdpc3Rlcl9jbGllbnQocGRidXMtPmRhdGFfYnVzX2hkbCk7CisJCXBkYnVzLT5k YXRhX2J1c19oZGwgPSAwOworCX0KK30KKworc3RhdGljIGludCBkcHVfcG93ZXJfZGF0YV9idXNf cGFyc2Uoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKKwlzdHJ1Y3QgZHB1X3Bvd2VyX2Rh dGFfYnVzX2hhbmRsZSAqcGRidXMsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IGRldmlj ZV9ub2RlICpub2RlOworCWludCByYyA9IDA7CisJaW50IHBhdGhzOworCisJcGRidXMtPmJ1c19j aGFubmVscyA9IDE7CisJcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihwZGV2LT5kZXYub2Zfbm9k ZSwKKwkJInFjb20sZHB1LWRyYW0tY2hhbm5lbHMiLCAmcGRidXMtPmJ1c19jaGFubmVscyk7CisJ aWYgKHJjKSB7CisJCXByX2RlYnVnKCJudW1iZXIgb2YgY2hhbm5lbHMgcHJvcGVydHkgbm90IHNw ZWNpZmllZFxuIik7CisJCXJjID0gMDsKKwl9CisKKwlwZGJ1cy0+bnJ0X2F4aV9wb3J0X2NudCA9 IDA7CisJcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihwZGV2LT5kZXYub2Zfbm9kZSwKKwkJCSJx Y29tLGRwdS1udW0tbnJ0LXBhdGhzIiwKKwkJCSZwZGJ1cy0+bnJ0X2F4aV9wb3J0X2NudCk7CisJ aWYgKHJjKSB7CisJCXByX2RlYnVnKCJudW1iZXIgb2YgYXhpIHBvcnQgcHJvcGVydHkgbm90IHNw ZWNpZmllZFxuIik7CisJCXJjID0gMDsKKwl9CisKKwlub2RlID0gb2ZfZ2V0X2NoaWxkX2J5X25h bWUocGRldi0+ZGV2Lm9mX25vZGUsIG5hbWUpOworCWlmIChub2RlKSB7CisJCXJjID0gb2ZfcHJv cGVydHlfcmVhZF91MzIobm9kZSwKKwkJCQkicWNvbSxtc20tYnVzLG51bS1wYXRocyIsICZwYXRo cyk7CisJCWlmIChyYykgeworCQkJcHJfZXJyKCJFcnJvci4gcWNvbSxtc20tYnVzLG51bS1wYXRo cyBub3QgZm91bmRcbiIpOworCQkJcmV0dXJuIHJjOworCQl9CisJCXBkYnVzLT5heGlfcG9ydF9j bnQgPSBwYXRoczsKKworCQlwZGJ1cy0+ZGF0YV9idXNfc2NhbGVfdGFibGUgPQorCQkJCW1zbV9i dXNfcGRhdGFfZnJvbV9ub2RlKHBkZXYsIG5vZGUpOworCQlpZiAoSVNfRVJSX09SX05VTEwocGRi dXMtPmRhdGFfYnVzX3NjYWxlX3RhYmxlKSkgeworCQkJcHJfZXJyKCJyZWcgYnVzIGhhbmRsZSBw YXJzaW5nIGZhaWxlZFxuIik7CisJCQlyYyA9IFBUUl9FUlIocGRidXMtPmRhdGFfYnVzX3NjYWxl X3RhYmxlKTsKKwkJCWlmICghcGRidXMtPmRhdGFfYnVzX3NjYWxlX3RhYmxlKQorCQkJCXJjID0g LUVJTlZBTDsKKwkJCWdvdG8gZW5kOworCQl9CisJCXBkYnVzLT5kYXRhX2J1c19oZGwgPSBtc21f YnVzX3NjYWxlX3JlZ2lzdGVyX2NsaWVudCgKKwkJCQlwZGJ1cy0+ZGF0YV9idXNfc2NhbGVfdGFi bGUpOworCQlpZiAoIXBkYnVzLT5kYXRhX2J1c19oZGwpIHsKKwkJCXByX2VycigiZGF0YV9idXNf Y2xpZW50IHJlZ2lzdGVyIGZhaWxlZFxuIik7CisJCQlyYyA9IC1FSU5WQUw7CisJCQlnb3RvIGVu ZDsKKwkJfQorCQlwcl9kZWJ1ZygicmVnaXN0ZXIgJXMgZGF0YV9idXNfaGRsPSV4XG4iLCBuYW1l LAorCQkJCXBkYnVzLT5kYXRhX2J1c19oZGwpOworCX0KKworZW5kOgorCXJldHVybiByYzsKK30K Kworc3RhdGljIGludCBkcHVfcG93ZXJfcmVnX2J1c19wYXJzZShzdHJ1Y3QgcGxhdGZvcm1fZGV2 aWNlICpwZGV2LAorCXN0cnVjdCBkcHVfcG93ZXJfaGFuZGxlICpwaGFuZGxlKQoreworCXN0cnVj dCBkZXZpY2Vfbm9kZSAqbm9kZTsKKwlzdHJ1Y3QgbXNtX2J1c19zY2FsZV9wZGF0YSAqYnVzX3Nj YWxlX3RhYmxlOworCWludCByYyA9IDA7CisKKwlub2RlID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUo cGRldi0+ZGV2Lm9mX25vZGUsICJxY29tLGRwdS1yZWctYnVzIik7CisJaWYgKG5vZGUpIHsKKwkJ YnVzX3NjYWxlX3RhYmxlID0gbXNtX2J1c19wZGF0YV9mcm9tX25vZGUocGRldiwgbm9kZSk7CisJ CWlmIChJU19FUlJfT1JfTlVMTChidXNfc2NhbGVfdGFibGUpKSB7CisJCQlwcl9lcnIoInJlZyBi dXMgaGFuZGxlIHBhcnNpbmcgZmFpbGVkXG4iKTsKKwkJCXJjID0gUFRSX0VSUihidXNfc2NhbGVf dGFibGUpOworCQkJaWYgKCFidXNfc2NhbGVfdGFibGUpCisJCQkJcmMgPSAtRUlOVkFMOworCQkJ Z290byBlbmQ7CisJCX0KKwkJcGhhbmRsZS0+cmVnX2J1c19oZGwgPSBtc21fYnVzX3NjYWxlX3Jl Z2lzdGVyX2NsaWVudCgKKwkJCSAgICAgIGJ1c19zY2FsZV90YWJsZSk7CisJCWlmICghcGhhbmRs ZS0+cmVnX2J1c19oZGwpIHsKKwkJCXByX2VycigicmVnX2J1c19jbGllbnQgcmVnaXN0ZXIgZmFp bGVkXG4iKTsKKwkJCXJjID0gLUVJTlZBTDsKKwkJCWdvdG8gZW5kOworCQl9CisJCXByX2RlYnVn KCJyZWdpc3RlciByZWdfYnVzX2hkbD0leFxuIiwgcGhhbmRsZS0+cmVnX2J1c19oZGwpOworCX0K KworZW5kOgorCXJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQgZHB1X3Bvd2VyX3JlZ19idXNf dW5yZWdpc3Rlcih1MzIgcmVnX2J1c19oZGwpCit7CisJaWYgKHJlZ19idXNfaGRsKQorCQltc21f YnVzX3NjYWxlX3VucmVnaXN0ZXJfY2xpZW50KHJlZ19idXNfaGRsKTsKK30KKworaW50IGRwdV9w b3dlcl9kYXRhX2J1c19zdGF0ZV91cGRhdGUoc3RydWN0IGRwdV9wb3dlcl9oYW5kbGUgKnBoYW5k bGUsCisJCQkJCQkJYm9vbCBlbmFibGUpCit7CisJaW50IGk7CisKKwlpZiAoIXBoYW5kbGUpIHsK KwkJcHJfZXJyKCJpbnZhbGlkIHBhcmFtXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJ Zm9yIChpID0gRFBVX1BPV0VSX0hBTkRMRV9EQlVTX0lEX01OT0M7CisJCQlpIDwgRFBVX1BPV0VS X0hBTkRMRV9EQlVTX0lEX01BWDsgaSsrKQorCQlwaGFuZGxlLT5kYXRhX2J1c19oYW5kbGVbaV0u ZW5hYmxlID0gZW5hYmxlOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZHB1X3Bvd2Vy X2RhdGFfYnVzX3VwZGF0ZShzdHJ1Y3QgZHB1X3Bvd2VyX2RhdGFfYnVzX2hhbmRsZSAqcGRidXMs CisJCQkJCQkJYm9vbCBlbmFibGUpCit7CisJaW50IHJjID0gMDsKKworCXBkYnVzLT5lbmFibGUg PSBlbmFibGU7CisKKwlpZiAocGRidXMtPmRhdGFfYnVzX2hkbCkKKwkJcmMgPSBfZHB1X3Bvd2Vy X2RhdGFfYnVzX3NldF9xdW90YShwZGJ1cywgcGRidXMtPmFiX3J0LAorCQkJCXBkYnVzLT5hYl9u cnQsIHBkYnVzLT5pYl9ydCwgcGRidXMtPmliX25ydCk7CisKKwlpZiAocmMpCisJCXByX2Vycigi ZmFpbGVkIHRvIHNldCBkYXRhIGJ1cyB2b3RlIHJjPSVkIGVuYWJsZTolZFxuIiwKKwkJCQkJCQly YywgZW5hYmxlKTsKKworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBkcHVfcG93ZXJfcmVn X2J1c191cGRhdGUodTMyIHJlZ19idXNfaGRsLCB1MzIgdXNlY2FzZV9uZHgpCit7CisJaW50IHJj ID0gMDsKKworCWlmIChyZWdfYnVzX2hkbCkKKwkJcmMgPSBtc21fYnVzX3NjYWxlX2NsaWVudF91 cGRhdGVfcmVxdWVzdChyZWdfYnVzX2hkbCwKKwkJCQkJCQkJdXNlY2FzZV9uZHgpOworCWlmIChy YykKKwkJcHJfZXJyKCJmYWlsZWQgdG8gc2V0IHJlZyBidXMgdm90ZSByYz0lZFxuIiwgcmMpOwor CisJcmV0dXJuIHJjOworfQorI2Vsc2UKK3N0YXRpYyBpbnQgZHB1X3Bvd2VyX2RhdGFfYnVzX3Bh cnNlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCisJCXN0cnVjdCBkcHVfcG93ZXJfZGF0 YV9idXNfaGFuZGxlICpwZGJ1cywgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlyZXR1cm4gMDsKK30K Kworc3RhdGljIHZvaWQgZHB1X3Bvd2VyX2RhdGFfYnVzX3VucmVnaXN0ZXIoCisJCXN0cnVjdCBk cHVfcG93ZXJfZGF0YV9idXNfaGFuZGxlICpwZGJ1cykKK3sKK30KKworaW50IGRwdV9wb3dlcl9k YXRhX2J1c19zZXRfcXVvdGEoc3RydWN0IGRwdV9wb3dlcl9oYW5kbGUgKnBoYW5kbGUsCisJCXN0 cnVjdCBkcHVfcG93ZXJfY2xpZW50ICpwY2xpZW50LAorCQlpbnQgYnVzX2NsaWVudCwgdTMyIGJ1 c19pZCwKKwkJdTY0IGFiX3F1b3RhLCB1NjQgaWJfcXVvdGEpCit7CisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyBpbnQgZHB1X3Bvd2VyX3JlZ19idXNfcGFyc2Uoc3RydWN0IHBsYXRmb3JtX2Rldmlj ZSAqcGRldiwKKwlzdHJ1Y3QgZHB1X3Bvd2VyX2hhbmRsZSAqcGhhbmRsZSkKK3sKKwlyZXR1cm4g MDsKK30KKworc3RhdGljIHZvaWQgZHB1X3Bvd2VyX3JlZ19idXNfdW5yZWdpc3Rlcih1MzIgcmVn X2J1c19oZGwpCit7Cit9CisKK3N0YXRpYyBpbnQgZHB1X3Bvd2VyX3JlZ19idXNfdXBkYXRlKHUz MiByZWdfYnVzX2hkbCwgdTMyIHVzZWNhc2VfbmR4KQoreworCXJldHVybiAwOworfQorCitzdGF0 aWMgaW50IGRwdV9wb3dlcl9kYXRhX2J1c191cGRhdGUoc3RydWN0IGRwdV9wb3dlcl9kYXRhX2J1 c19oYW5kbGUgKnBkYnVzLAorCQkJCQkJCWJvb2wgZW5hYmxlKQoreworCXJldHVybiAwOworfQor CitpbnQgZHB1X3Bvd2VyX2RhdGFfYnVzX3N0YXRlX3VwZGF0ZShzdHJ1Y3QgZHB1X3Bvd2VyX2hh bmRsZSAqcGhhbmRsZSwKKwkJCQkJCQlib29sIGVuYWJsZSkKK3sKKwlyZXR1cm4gMDsKK30KKyNl bmRpZgorCitpbnQgZHB1X3Bvd2VyX3Jlc291cmNlX2luaXQoc3RydWN0IHBsYXRmb3JtX2Rldmlj ZSAqcGRldiwKKwlzdHJ1Y3QgZHB1X3Bvd2VyX2hhbmRsZSAqcGhhbmRsZSkKK3sKKwlpbnQgcmMg PSAwLCBpOworCisJcGhhbmRsZS0+ZGV2ID0gJnBkZXYtPmRldjsKKworCXJjID0gZHB1X3Bvd2Vy X3JlZ19idXNfcGFyc2UocGRldiwgcGhhbmRsZSk7CisJaWYgKHJjKSB7CisJCXByX2VycigicmVn aXN0ZXIgYnVzIHBhcnNlIGZhaWxlZCByYz0lZFxuIiwgcmMpOworCQlyZXR1cm4gcmM7CisJfQor CisJZm9yIChpID0gRFBVX1BPV0VSX0hBTkRMRV9EQlVTX0lEX01OT0M7CisJCQlpIDwgRFBVX1BP V0VSX0hBTkRMRV9EQlVTX0lEX01BWDsgaSsrKSB7CisJCXJjID0gZHB1X3Bvd2VyX2RhdGFfYnVz X3BhcnNlKHBkZXYsCisJCQkJJnBoYW5kbGUtPmRhdGFfYnVzX2hhbmRsZVtpXSwKKwkJCQlkYXRh X2J1c19uYW1lW2ldKTsKKwkJaWYgKHJjKSB7CisJCQlwcl9lcnIoInJlZ2lzdGVyIGRhdGEgYnVz IHBhcnNlIGZhaWxlZCBpZD0lZCByYz0lZFxuIiwKKwkJCQkJaSwgcmMpOworCQkJZ290byBkYXRh X2J1c19lcnI7CisJCX0KKwl9CisKKwlJTklUX0xJU1RfSEVBRCgmcGhhbmRsZS0+cG93ZXJfY2xp ZW50X2NsaXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmcGhhbmRsZS0+ZXZlbnRfbGlzdCk7CisKKwlt dXRleF9pbml0KCZwaGFuZGxlLT5waGFuZGxlX2xvY2spOworCisJcmV0dXJuIHJjOworCitkYXRh X2J1c19lcnI6CisJZm9yIChpLS07IGkgPj0gMDsgaS0tKQorCQlkcHVfcG93ZXJfZGF0YV9idXNf dW5yZWdpc3RlcigmcGhhbmRsZS0+ZGF0YV9idXNfaGFuZGxlW2ldKTsKKwlkcHVfcG93ZXJfcmVn X2J1c191bnJlZ2lzdGVyKHBoYW5kbGUtPnJlZ19idXNfaGRsKTsKKwlyZXR1cm4gcmM7Cit9CisK K3ZvaWQgZHB1X3Bvd2VyX3Jlc291cmNlX2RlaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpw ZGV2LAorCXN0cnVjdCBkcHVfcG93ZXJfaGFuZGxlICpwaGFuZGxlKQoreworCXN0cnVjdCBkcHVf cG93ZXJfY2xpZW50ICpjdXJyX2NsaWVudCwgKm5leHRfY2xpZW50OworCXN0cnVjdCBkcHVfcG93 ZXJfZXZlbnQgKmN1cnJfZXZlbnQsICpuZXh0X2V2ZW50OworCWludCBpOworCisJaWYgKCFwaGFu ZGxlIHx8ICFwZGV2KSB7CisJCXByX2VycigiaW52YWxpZCBpbnB1dCBwYXJhbVxuIik7CisJCXJl dHVybjsKKwl9CisKKwltdXRleF9sb2NrKCZwaGFuZGxlLT5waGFuZGxlX2xvY2spOworCWxpc3Rf Zm9yX2VhY2hfZW50cnlfc2FmZShjdXJyX2NsaWVudCwgbmV4dF9jbGllbnQsCisJCQkmcGhhbmRs ZS0+cG93ZXJfY2xpZW50X2NsaXN0LCBsaXN0KSB7CisJCXByX2VycigiY2xpZW5kOiVzLSVkIHN0 aWxsIHJlZ2lzdGVyZWQgd2l0aCByZWZjb3VudDolZFxuIiwKKwkJCQljdXJyX2NsaWVudC0+bmFt ZSwgY3Vycl9jbGllbnQtPmlkLAorCQkJCWN1cnJfY2xpZW50LT5yZWZjb3VudCk7CisJCWN1cnJf Y2xpZW50LT5hY3RpdmUgPSBmYWxzZTsKKwkJbGlzdF9kZWwoJmN1cnJfY2xpZW50LT5saXN0KTsK Kwl9CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY3Vycl9ldmVudCwgbmV4dF9ldmVudCwK KwkJCSZwaGFuZGxlLT5ldmVudF9saXN0LCBsaXN0KSB7CisJCXByX2VycigiZXZlbnQ6JWQsIGNs aWVudDolcyBzdGlsbCByZWdpc3RlcmVkXG4iLAorCQkJCWN1cnJfZXZlbnQtPmV2ZW50X3R5cGUs CisJCQkJY3Vycl9ldmVudC0+Y2xpZW50X25hbWUpOworCQljdXJyX2V2ZW50LT5hY3RpdmUgPSBm YWxzZTsKKwkJbGlzdF9kZWwoJmN1cnJfZXZlbnQtPmxpc3QpOworCX0KKwltdXRleF91bmxvY2so JnBoYW5kbGUtPnBoYW5kbGVfbG9jayk7CisKKwlmb3IgKGkgPSAwOyBpIDwgRFBVX1BPV0VSX0hB TkRMRV9EQlVTX0lEX01BWDsgaSsrKQorCQlkcHVfcG93ZXJfZGF0YV9idXNfdW5yZWdpc3Rlcigm cGhhbmRsZS0+ZGF0YV9idXNfaGFuZGxlW2ldKTsKKworCWRwdV9wb3dlcl9yZWdfYnVzX3VucmVn aXN0ZXIocGhhbmRsZS0+cmVnX2J1c19oZGwpOworfQorCitpbnQgZHB1X3Bvd2VyX3Jlc291cmNl X2VuYWJsZShzdHJ1Y3QgZHB1X3Bvd2VyX2hhbmRsZSAqcGhhbmRsZSwKKwlzdHJ1Y3QgZHB1X3Bv d2VyX2NsaWVudCAqcGNsaWVudCwgYm9vbCBlbmFibGUpCit7CisJaW50IHJjID0gMCwgaTsKKwli b29sIGNoYW5nZWQgPSBmYWxzZTsKKwl1MzIgbWF4X3VzZWNhc2VfbmR4ID0gVk9URV9JTkRFWF9E SVNBQkxFLCBwcmV2X3VzZWNhc2VfbmR4OworCXN0cnVjdCBkcHVfcG93ZXJfY2xpZW50ICpjbGll bnQ7CisKKwlpZiAoIXBoYW5kbGUgfHwgIXBjbGllbnQpIHsKKwkJcHJfZXJyKCJpbnZhbGlkIGlu cHV0IGFyZ3VtZW50XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbXV0ZXhfbG9jaygm cGhhbmRsZS0+cGhhbmRsZV9sb2NrKTsKKwlpZiAoZW5hYmxlKQorCQlwY2xpZW50LT5yZWZjb3Vu dCsrOworCWVsc2UgaWYgKHBjbGllbnQtPnJlZmNvdW50KQorCQlwY2xpZW50LT5yZWZjb3VudC0t OworCisJaWYgKHBjbGllbnQtPnJlZmNvdW50KQorCQlwY2xpZW50LT51c2VjYXNlX25keCA9IFZP VEVfSU5ERVhfTE9XOworCWVsc2UKKwkJcGNsaWVudC0+dXNlY2FzZV9uZHggPSBWT1RFX0lOREVY X0RJU0FCTEU7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNsaWVudCwgJnBoYW5kbGUtPnBvd2Vy X2NsaWVudF9jbGlzdCwgbGlzdCkgeworCQlpZiAoY2xpZW50LT51c2VjYXNlX25keCA8IFZPVEVf SU5ERVhfTUFYICYmCisJCSAgICBjbGllbnQtPnVzZWNhc2VfbmR4ID4gbWF4X3VzZWNhc2VfbmR4 KQorCQkJbWF4X3VzZWNhc2VfbmR4ID0gY2xpZW50LT51c2VjYXNlX25keDsKKwl9CisKKwlpZiAo cGhhbmRsZS0+Y3VycmVudF91c2VjYXNlX25keCAhPSBtYXhfdXNlY2FzZV9uZHgpIHsKKwkJY2hh bmdlZCA9IHRydWU7CisJCXByZXZfdXNlY2FzZV9uZHggPSBwaGFuZGxlLT5jdXJyZW50X3VzZWNh c2VfbmR4OworCQlwaGFuZGxlLT5jdXJyZW50X3VzZWNhc2VfbmR4ID0gbWF4X3VzZWNhc2VfbmR4 OworCX0KKworCXByX2RlYnVnKCIlcFM6IGNoYW5nZWQ9JWQgY3VycmVudCBpZHg9JWQgcmVxdWVz dCBjbGllbnQgJXMgaWQ6JXUgZW5hYmxlOiVkIHJlZmNvdW50OiVkXG4iLAorCQlfX2J1aWx0aW5f cmV0dXJuX2FkZHJlc3MoMCksIGNoYW5nZWQsIG1heF91c2VjYXNlX25keCwKKwkJcGNsaWVudC0+ bmFtZSwgcGNsaWVudC0+aWQsIGVuYWJsZSwgcGNsaWVudC0+cmVmY291bnQpOworCisJaWYgKCFj aGFuZ2VkKQorCQlnb3RvIGVuZDsKKworCWlmIChlbmFibGUpIHsKKwkJZHB1X3Bvd2VyX2V2ZW50 X3RyaWdnZXJfbG9ja2VkKHBoYW5kbGUsCisJCQkJRFBVX1BPV0VSX0VWRU5UX1BSRV9FTkFCTEUp OworCisJCWZvciAoaSA9IDA7IGkgPCBEUFVfUE9XRVJfSEFORExFX0RCVVNfSURfTUFYOyBpKysp IHsKKwkJCXJjID0gZHB1X3Bvd2VyX2RhdGFfYnVzX3VwZGF0ZSgKKwkJCQkJJnBoYW5kbGUtPmRh dGFfYnVzX2hhbmRsZVtpXSwgZW5hYmxlKTsKKwkJCWlmIChyYykgeworCQkJCXByX2VycigiZmFp bGVkIHRvIHNldCBkYXRhIGJ1cyB2b3RlIGlkPSVkIHJjPSVkXG4iLAorCQkJCQkJaSwgcmMpOwor CQkJCWdvdG8gZGF0YV9idXNfaGRsX2VycjsKKwkJCX0KKwkJfQorCisJCXJjID0gZHB1X3Bvd2Vy X3JlZ19idXNfdXBkYXRlKHBoYW5kbGUtPnJlZ19idXNfaGRsLAorCQkJCQkJCW1heF91c2VjYXNl X25keCk7CisJCWlmIChyYykgeworCQkJcHJfZXJyKCJmYWlsZWQgdG8gc2V0IHJlZyBidXMgdm90 ZSByYz0lZFxuIiwgcmMpOworCQkJZ290byByZWdfYnVzX2hkbF9lcnI7CisJCX0KKworCQlkcHVf cG93ZXJfZXZlbnRfdHJpZ2dlcl9sb2NrZWQocGhhbmRsZSwKKwkJCQlEUFVfUE9XRVJfRVZFTlRf UE9TVF9FTkFCTEUpOworCisJfSBlbHNlIHsKKwkJZHB1X3Bvd2VyX2V2ZW50X3RyaWdnZXJfbG9j a2VkKHBoYW5kbGUsCisJCQkJRFBVX1BPV0VSX0VWRU5UX1BSRV9ESVNBQkxFKTsKKworCQlkcHVf cG93ZXJfcmVnX2J1c191cGRhdGUocGhhbmRsZS0+cmVnX2J1c19oZGwsCisJCQkJCQkJbWF4X3Vz ZWNhc2VfbmR4KTsKKworCQlmb3IgKGkgPSAwIDsgaSA8IERQVV9QT1dFUl9IQU5ETEVfREJVU19J RF9NQVg7IGkrKykKKwkJCWRwdV9wb3dlcl9kYXRhX2J1c191cGRhdGUoJnBoYW5kbGUtPmRhdGFf YnVzX2hhbmRsZVtpXSwKKwkJCQkJZW5hYmxlKTsKKworCQlkcHVfcG93ZXJfZXZlbnRfdHJpZ2dl cl9sb2NrZWQocGhhbmRsZSwKKwkJCQlEUFVfUE9XRVJfRVZFTlRfUE9TVF9ESVNBQkxFKTsKKwl9 CisKK2VuZDoKKwltdXRleF91bmxvY2soJnBoYW5kbGUtPnBoYW5kbGVfbG9jayk7CisJcmV0dXJu IHJjOworCityZWdfYnVzX2hkbF9lcnI6CisJZm9yIChpID0gMCA7IGkgPCBEUFVfUE9XRVJfSEFO RExFX0RCVVNfSURfTUFYOyBpKyspCisJCWRwdV9wb3dlcl9kYXRhX2J1c191cGRhdGUoJnBoYW5k bGUtPmRhdGFfYnVzX2hhbmRsZVtpXSwgMCk7CitkYXRhX2J1c19oZGxfZXJyOgorCXBoYW5kbGUt PmN1cnJlbnRfdXNlY2FzZV9uZHggPSBwcmV2X3VzZWNhc2VfbmR4OworCW11dGV4X3VubG9jaygm cGhhbmRsZS0+cGhhbmRsZV9sb2NrKTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0cnVjdCBkcHVfcG93 ZXJfZXZlbnQgKmRwdV9wb3dlcl9oYW5kbGVfcmVnaXN0ZXJfZXZlbnQoCisJCXN0cnVjdCBkcHVf cG93ZXJfaGFuZGxlICpwaGFuZGxlLAorCQl1MzIgZXZlbnRfdHlwZSwgdm9pZCAoKmNiX2ZuYyko dTMyIGV2ZW50X3R5cGUsIHZvaWQgKnVzciksCisJCXZvaWQgKnVzciwgY2hhciAqY2xpZW50X25h bWUpCit7CisJc3RydWN0IGRwdV9wb3dlcl9ldmVudCAqZXZlbnQ7CisKKwlpZiAoIXBoYW5kbGUp IHsKKwkJcHJfZXJyKCJpbnZhbGlkIHBvd2VyIGhhbmRsZVxuIik7CisJCXJldHVybiBFUlJfUFRS KC1FSU5WQUwpOworCX0gZWxzZSBpZiAoIWNiX2ZuYyB8fCAhZXZlbnRfdHlwZSkgeworCQlwcl9l cnIoIm5vIGNhbGxiYWNrIGZuYyBvciBldmVudCB0eXBlXG4iKTsKKwkJcmV0dXJuIEVSUl9QVFIo LUVJTlZBTCk7CisJfQorCisJZXZlbnQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZHB1X3Bvd2Vy X2V2ZW50KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFldmVudCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVO T01FTSk7CisKKwlldmVudC0+ZXZlbnRfdHlwZSA9IGV2ZW50X3R5cGU7CisJZXZlbnQtPmNiX2Zu YyA9IGNiX2ZuYzsKKwlldmVudC0+dXNyID0gdXNyOworCXN0cmxjcHkoZXZlbnQtPmNsaWVudF9u YW1lLCBjbGllbnRfbmFtZSwgTUFYX0NMSUVOVF9OQU1FX0xFTik7CisJZXZlbnQtPmFjdGl2ZSA9 IHRydWU7CisKKwltdXRleF9sb2NrKCZwaGFuZGxlLT5waGFuZGxlX2xvY2spOworCWxpc3RfYWRk KCZldmVudC0+bGlzdCwgJnBoYW5kbGUtPmV2ZW50X2xpc3QpOworCW11dGV4X3VubG9jaygmcGhh bmRsZS0+cGhhbmRsZV9sb2NrKTsKKworCXJldHVybiBldmVudDsKK30KKwordm9pZCBkcHVfcG93 ZXJfaGFuZGxlX3VucmVnaXN0ZXJfZXZlbnQoCisJCXN0cnVjdCBkcHVfcG93ZXJfaGFuZGxlICpw aGFuZGxlLAorCQlzdHJ1Y3QgZHB1X3Bvd2VyX2V2ZW50ICpldmVudCkKK3sKKwlpZiAoIXBoYW5k bGUgfHwgIWV2ZW50KSB7CisJCXByX2VycigiaW52YWxpZCBwaGFuZGxlIG9yIGV2ZW50XG4iKTsK Kwl9IGVsc2UgaWYgKCFldmVudC0+YWN0aXZlKSB7CisJCXByX2VycigicG93ZXIgaGFuZGxlIGRl aW5pdCBhbHJlYWR5IGRvbmVcbiIpOworCQlrZnJlZShldmVudCk7CisJfSBlbHNlIHsKKwkJbXV0 ZXhfbG9jaygmcGhhbmRsZS0+cGhhbmRsZV9sb2NrKTsKKwkJbGlzdF9kZWxfaW5pdCgmZXZlbnQt Pmxpc3QpOworCQltdXRleF91bmxvY2soJnBoYW5kbGUtPnBoYW5kbGVfbG9jayk7CisJCWtmcmVl KGV2ZW50KTsKKwl9Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1 MS9kcHVfcG93ZXJfaGFuZGxlLmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVf cG93ZXJfaGFuZGxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE2ZDRi OQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9w b3dlcl9oYW5kbGUuaApAQCAtMCwwICsxLDI4OCBAQAorLyogQ29weXJpZ2h0IChjKSAyMDE2LTIw MTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRo aXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv b3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKKyAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBi eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBk aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g IFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu CisgKgorICovCisKKyNpZm5kZWYgX0RQVV9QT1dFUl9IQU5ETEVfSF8KKyNkZWZpbmUgX0RQVV9Q T1dFUl9IQU5ETEVfSF8KKworI2RlZmluZSBNQVhfQ0xJRU5UX05BTUVfTEVOIDEyOAorCisjZGVm aW5lIERQVV9QT1dFUl9IQU5ETEVfRU5BQkxFX0JVU19BQl9RVU9UQQkwCisjZGVmaW5lIERQVV9Q T1dFUl9IQU5ETEVfRElTQUJMRV9CVVNfQUJfUVVPVEEJMAorI2RlZmluZSBEUFVfUE9XRVJfSEFO RExFX0VOQUJMRV9CVVNfSUJfUVVPVEEJMTYwMDAwMDAwMAorI2RlZmluZSBEUFVfUE9XRVJfSEFO RExFX0RJU0FCTEVfQlVTX0lCX1FVT1RBCTAKKworI2luY2x1ZGUgPGxpbnV4L2RwdV9pb191dGls Lmg+CisKKy8qIGV2ZW50IHdpbGwgYmUgdHJpZ2dlcmVkIGJlZm9yZSBwb3dlciBoYW5kbGVyIGRp c2FibGUgKi8KKyNkZWZpbmUgRFBVX1BPV0VSX0VWRU5UX1BSRV9ESVNBQkxFCTB4MQorCisvKiBl dmVudCB3aWxsIGJlIHRyaWdnZXJlZCBhZnRlciBwb3dlciBoYW5kbGVyIGRpc2FibGUgKi8KKyNk ZWZpbmUgRFBVX1BPV0VSX0VWRU5UX1BPU1RfRElTQUJMRQkweDIKKworLyogZXZlbnQgd2lsbCBi ZSB0cmlnZ2VyZWQgYmVmb3JlIHBvd2VyIGhhbmRsZXIgZW5hYmxlICovCisjZGVmaW5lIERQVV9Q T1dFUl9FVkVOVF9QUkVfRU5BQkxFCTB4NAorCisvKiBldmVudCB3aWxsIGJlIHRyaWdnZXJlZCBh ZnRlciBwb3dlciBoYW5kbGVyIGVuYWJsZSAqLworI2RlZmluZSBEUFVfUE9XRVJfRVZFTlRfUE9T VF9FTkFCTEUJMHg4CisKKy8qKgorICogbWRzc19idXNfdm90ZV90eXBlOiByZWdpc3RlciBidXMg dm90ZSB0eXBlCisgKiBWT1RFX0lOREVYX0RJU0FCTEU6IHJlbW92ZXMgdGhlIGNsaWVudCB2b3Rl CisgKiBWT1RFX0lOREVYX0xPVzoga2VlcHMgdGhlIGxvd2VzdCB2b3RlIGZvciByZWdpc3RlciBi dXMKKyAqIFZPVEVfSU5ERVhfTUFYOiBpbnZhbGlkCisgKi8KK2VudW0gbWRzc19idXNfdm90ZV90 eXBlIHsKKwlWT1RFX0lOREVYX0RJU0FCTEUsCisJVk9URV9JTkRFWF9MT1csCisJVk9URV9JTkRF WF9NQVgsCit9OworCisvKioKKyAqIGVudW0gZHB1X3Bvd2VyX2hhbmRsZV9kYXRhX2J1c19jbGll bnQgLSB0eXBlIG9mIGF4aSBidXMgY2xpZW50cworICogQERQVV9QT1dFUl9IQU5ETEVfREFUQV9C VVNfQ0xJRU5UX1JUOiBjb3JlIHJlYWwtdGltZSBidXMgY2xpZW50CisgKiBARFBVX1BPV0VSX0hB TkRMRV9EQVRBX0JVU19DTElFTlRfTlJUOiBjb3JlIG5vbi1yZWFsLXRpbWUgYnVzIGNsaWVudAor ICogQERQVV9QT1dFUl9IQU5ETEVfREFUQV9CVVNfQ0xJRU5UX01BWDogbWF4aW11bSBudW1iZXIg b2YgYnVzIGNsaWVudCB0eXBlCisgKi8KK2VudW0gZHB1X3Bvd2VyX2hhbmRsZV9kYXRhX2J1c19j bGllbnQgeworCURQVV9QT1dFUl9IQU5ETEVfREFUQV9CVVNfQ0xJRU5UX1JULAorCURQVV9QT1dF Ul9IQU5ETEVfREFUQV9CVVNfQ0xJRU5UX05SVCwKKwlEUFVfUE9XRVJfSEFORExFX0RBVEFfQlVT X0NMSUVOVF9NQVgKK307CisKKy8qKgorICogZW51bSBEUFVfUE9XRVJfSEFORExFX0RCVVNfSUQg LSBkYXRhIGJ1cyBpZGVudGlmaWVyCisgKiBARFBVX1BPV0VSX0hBTkRMRV9EQlVTX0lEX01OT0M6 IERQVS9NTk9DIGRhdGEgYnVzCisgKiBARFBVX1BPV0VSX0hBTkRMRV9EQlVTX0lEX0xMQ0M6IE1O T0MvTExDQyBkYXRhIGJ1cworICogQERQVV9QT1dFUl9IQU5ETEVfREJVU19JRF9FQkk6IExMQ0Mv RUJJIGRhdGEgYnVzCisgKi8KK2VudW0gRFBVX1BPV0VSX0hBTkRMRV9EQlVTX0lEIHsKKwlEUFVf UE9XRVJfSEFORExFX0RCVVNfSURfTU5PQywKKwlEUFVfUE9XRVJfSEFORExFX0RCVVNfSURfTExD QywKKwlEUFVfUE9XRVJfSEFORExFX0RCVVNfSURfRUJJLAorCURQVV9QT1dFUl9IQU5ETEVfREJV U19JRF9NQVgsCit9OworCisvKioKKyAqIHN0cnVjdCBkcHVfcG93ZXJfY2xpZW50OiBzdG9yZXMg dGhlIHBvd2VyIGNsaWVudCBmb3IgZHB1IGRyaXZlcgorICogQG5hbWU6CW5hbWUgb2YgdGhlIGNs aWVudAorICogQHVzZWNhc2VfbmR4OiBjdXJyZW50IHJlZ3MgYnVzIHZvdGUgdHlwZQorICogQHJl ZmNvdW50OgljdXJyZW50IHJlZmNvdW50IGlmIG11bHRpcGxlIG1vZHVsZXMgYXJlIHVzaW5nIHNh bWUKKyAqICAgICAgICAgICAgICBzYW1lIGNsaWVudCBmb3IgZW5hYmxlL2Rpc2FibGUuIFBvd2Vy IG1vZHVsZSB3aWxsCisgKiAgICAgICAgICAgICAgYWdncmVnYXRlIHRoZSByZWZjb3VudCBhbmQg dm90ZSBhY2NvcmRpbmdseSBmb3IgdGhpcworICogICAgICAgICAgICAgIGNsaWVudC4KKyAqIEBp ZDoJCWFzc2lnbmVkIGR1cmluZyBjcmVhdGUuIGhlbHBzIGZvciBkZWJ1Z2dpbmcuCisgKiBAbGlz dDoJbGlzdCB0byBhdHRhY2ggcG93ZXIgaGFuZGxlIG1hc3RlciBsaXN0CisgKiBAYWI6ICAgICAg ICAgYXJiaXRyYXRlZCBiYW5kd2lkdGggZm9yIGVhY2ggYnVzIGNsaWVudAorICogQGliOiAgICAg ICAgIGluc3RhbnRhbmVvdXMgYmFuZHdpZHRoIGZvciBlYWNoIGJ1cyBjbGllbnQKKyAqIEBhY3Rp dmU6CWluaWRjYXRlcyB0aGUgc3RhdGUgb2YgZHB1IHBvd2VyIGhhbmRsZQorICovCitzdHJ1Y3Qg ZHB1X3Bvd2VyX2NsaWVudCB7CisJY2hhciBuYW1lW01BWF9DTElFTlRfTkFNRV9MRU5dOworCXNo b3J0IHVzZWNhc2VfbmR4OworCXNob3J0IHJlZmNvdW50OworCXUzMiBpZDsKKwlzdHJ1Y3QgbGlz dF9oZWFkIGxpc3Q7CisJdTY0IGFiW0RQVV9QT1dFUl9IQU5ETEVfREFUQV9CVVNfQ0xJRU5UX01B WF07CisJdTY0IGliW0RQVV9QT1dFUl9IQU5ETEVfREFUQV9CVVNfQ0xJRU5UX01BWF07CisJYm9v bCBhY3RpdmU7Cit9OworCisvKioKKyAqIHN0cnVjdCBkcHVfcG93ZXJfZGF0YV9oYW5kbGU6IHBv d2VyIGhhbmRsZSBzdHJ1Y3QgZm9yIGRhdGEgYnVzCisgKiBAZGF0YV9idXNfc2NhbGVfdGFibGU6 IHBvaW50ZXIgdG8gYnVzIHNjYWxpbmcgdGFibGUKKyAqIEBkYXRhX2J1c19oZGw6IGN1cnJlbnQg ZGF0YSBidXMgaGFuZGxlCisgKiBAYXhpX3BvcnRfY250OiBudW1iZXIgb2YgcnQgYXhpIHBvcnRz CisgKiBAbnJ0X2F4aV9wb3J0X2NudDogbnVtYmVyIG9mIG5ydCBheGkgcG9ydHMKKyAqIEBidXNf Y2hhbm5lbHM6IG51bWJlciBvZiBtZW1vcnkgYnVzIGNoYW5uZWxzCisgKiBAY3Vycl9id191Y19p ZHg6IGN1cnJlbnQgdXNlIGNhc2UgaW5kZXggb2YgZGF0YSBidXMKKyAqIEBhb19id191Y19pZHg6 IGFjdGl2ZSBvbmx5IHVzZSBjYXNlIGluZGV4IG9mIGRhdGEgYnVzCisgKiBAYWJfcnQ6IHJlYWx0 aW1lIGFiIHF1b3RhCisgKiBAaWJfcnQ6IHJlYWx0aW1lIGliIHF1b3RhCisgKiBAYWJfbnJ0OiBu b24tcmVhbHRpbWUgYWIgcXVvdGEKKyAqIEBpYl9ucnQ6IG5vbi1yZWFsdGltZSBpYiBxdW90YQor ICogQGVuYWJsZTogdHJ1ZSBpZiBidXMgaXMgZW5hYmxlZAorICovCitzdHJ1Y3QgZHB1X3Bvd2Vy X2RhdGFfYnVzX2hhbmRsZSB7CisJc3RydWN0IG1zbV9idXNfc2NhbGVfcGRhdGEgKmRhdGFfYnVz X3NjYWxlX3RhYmxlOworCXUzMiBkYXRhX2J1c19oZGw7CisJdTMyIGF4aV9wb3J0X2NudDsKKwl1 MzIgbnJ0X2F4aV9wb3J0X2NudDsKKwl1MzIgYnVzX2NoYW5uZWxzOworCXUzMiBjdXJyX2J3X3Vj X2lkeDsKKwl1MzIgYW9fYndfdWNfaWR4OworCXU2NCBhYl9ydDsKKwl1NjQgaWJfcnQ7CisJdTY0 IGFiX25ydDsKKwl1NjQgaWJfbnJ0OworCWJvb2wgZW5hYmxlOworfTsKKworLyoKKyAqIHN0cnVj dCBkcHVfcG93ZXJfZXZlbnQgLSBsb2NhbCBldmVudCByZWdpc3RyYXRpb24gc3RydWN0dXJlCisg KiBAY2xpZW50X25hbWU6IG5hbWUgb2YgdGhlIGNsaWVudCByZWdpc3RlcmluZworICogQGNiX2Zu YzogcG9pbnRlciB0byBkZXNpcmVkIGNhbGxiYWNrIGZ1bmN0aW9uCisgKiBAdXNyOiB1c2VyIHBv aW50ZXIgdG8gcGFzcyB0byBjYWxsYmFjayBldmVudCB0cmlnZ2VyCisgKiBAZXZlbnQ6IHJlZmVy IHRvIERQVV9QT1dFUl9IQU5ETEVfRVZFTlRfKgorICogQGxpc3Q6IGxpc3QgdG8gYXR0YWNoIGV2 ZW50IG1hc3RlciBsaXN0CisgKiBAYWN0aXZlOiBpbmRpY2F0ZXMgdGhlIHN0YXRlIG9mIGRwdSBw b3dlciBoYW5kbGUKKyAqLworc3RydWN0IGRwdV9wb3dlcl9ldmVudCB7CisJY2hhciBjbGllbnRf bmFtZVtNQVhfQ0xJRU5UX05BTUVfTEVOXTsKKwl2b2lkICgqY2JfZm5jKSh1MzIgZXZlbnRfdHlw ZSwgdm9pZCAqdXNyKTsKKwl2b2lkICp1c3I7CisJdTMyIGV2ZW50X3R5cGU7CisJc3RydWN0IGxp c3RfaGVhZCBsaXN0OworCWJvb2wgYWN0aXZlOworfTsKKworLyoqCisgKiBzdHJ1Y3QgZHB1X3Bv d2VyX2hhbmRsZTogcG93ZXIgaGFuZGxlIG1haW4gc3RydWN0CisgKiBAY2xpZW50X2NsaXN0OiBt YXN0ZXIgbGlzdCB0byBzdG9yZSBhbGwgY2xpZW50cworICogQHBoYW5kbGVfbG9jazogbG9jayB0 byBzeW5jaHJvbml6ZSB0aGUgZW5hYmxlL2Rpc2FibGUKKyAqIEBkZXY6IHBvaW50ZXIgdG8gZGV2 aWNlIHN0cnVjdHVyZQorICogQHVzZWNhc2VfbmR4OiBjdXJyZW50IHVzZWNhc2UgaW5kZXgKKyAq IEByZWdfYnVzX2hkbDogY3VycmVudCByZWdpc3RlciBidXMgaGFuZGxlCisgKiBAZGF0YV9idXNf aGFuZGxlOiBjb250ZXh0IHN0cnVjdHVyZSBmb3IgZGF0YSBidXMgY29udHJvbAorICogQGV2ZW50 X2xpc3Q6IGN1cnJlbnQgcG93ZXIgaGFuZGxlIGV2ZW50IGxpc3QKKyAqLworc3RydWN0IGRwdV9w b3dlcl9oYW5kbGUgeworCXN0cnVjdCBsaXN0X2hlYWQgcG93ZXJfY2xpZW50X2NsaXN0OworCXN0 cnVjdCBtdXRleCBwaGFuZGxlX2xvY2s7CisJc3RydWN0IGRldmljZSAqZGV2OworCXUzMiBjdXJy ZW50X3VzZWNhc2VfbmR4OworCXUzMiByZWdfYnVzX2hkbDsKKwlzdHJ1Y3QgZHB1X3Bvd2VyX2Rh dGFfYnVzX2hhbmRsZSBkYXRhX2J1c19oYW5kbGUKKwkJW0RQVV9QT1dFUl9IQU5ETEVfREJVU19J RF9NQVhdOworCXN0cnVjdCBsaXN0X2hlYWQgZXZlbnRfbGlzdDsKK307CisKKy8qKgorICogZHB1 X3Bvd2VyX3Jlc291cmNlX2luaXQoKSAtIGluaXRpYWxpemVzIHRoZSBkcHUgcG93ZXIgaGFuZGxl CisgKiBAcGRldjogICBwbGF0Zm9ybSBkZXZpY2UgdG8gc2VhcmNoIHRoZSBwb3dlciByZXNvdXJj ZXMKKyAqIEBwZGF0YTogIHBvd2VyIGhhbmRsZSB0byBzdG9yZSB0aGUgcG93ZXIgcmVzb3VyY2Vz CisgKgorICogUmV0dXJuOiBlcnJvciBjb2RlLgorICovCitpbnQgZHB1X3Bvd2VyX3Jlc291cmNl X2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKKwlzdHJ1Y3QgZHB1X3Bvd2VyX2hh bmRsZSAqcGRhdGEpOworCisvKioKKyAqIGRwdV9wb3dlcl9yZXNvdXJjZV9kZWluaXQoKSAtIHJl bGVhc2UgdGhlIGRwdSBwb3dlciBoYW5kbGUKKyAqIEBwZGV2OiAgIHBsYXRmb3JtIGRldmljZSBm b3IgcG93ZXIgcmVzb3VyY2VzCisgKiBAcGRhdGE6ICBwb3dlciBoYW5kbGUgY29udGFpbmluZyB0 aGUgcmVzb3VyY2VzCisgKgorICogUmV0dXJuOiBlcnJvciBjb2RlLgorICovCit2b2lkIGRwdV9w b3dlcl9yZXNvdXJjZV9kZWluaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKKwlzdHJ1 Y3QgZHB1X3Bvd2VyX2hhbmRsZSAqcGRhdGEpOworCisvKioKKyAqIGRwdV9wb3dlcl9jbGllbnRf Y3JlYXRlKCkgLSBjcmVhdGUgdGhlIGNsaWVudCBvbiBwb3dlciBoYW5kbGUKKyAqIEBwZGF0YTog IHBvd2VyIGhhbmRsZSBjb250YWluaW5nIHRoZSByZXNvdXJjZXMKKyAqIEBjbGllbnRfbmFtZTog bmV3IGNsaWVudCBuYW1lIGZvciByZWdpc3RyYXRpb24KKyAqCisgKiBSZXR1cm46IGVycm9yIGNv ZGUuCisgKi8KK3N0cnVjdCBkcHVfcG93ZXJfY2xpZW50ICpkcHVfcG93ZXJfY2xpZW50X2NyZWF0 ZShzdHJ1Y3QgZHB1X3Bvd2VyX2hhbmRsZSAqcGRhdGEsCisJY2hhciAqY2xpZW50X25hbWUpOwor CisvKioKKyAqIGRwdV9wb3dlcl9jbGllbnRfZGVzdHJveSgpIC0gZGVzdHJveSB0aGUgY2xpZW50 IG9uIHBvd2VyIGhhbmRsZQorICogQHBkYXRhOiAgcG93ZXIgaGFuZGxlIGNvbnRhaW5pbmcgdGhl IHJlc291cmNlcworICogQGNsaWVudF9uYW1lOiBuZXcgY2xpZW50IG5hbWUgZm9yIHJlZ2lzdHJh dGlvbgorICoKKyAqIFJldHVybjogbm9uZQorICovCit2b2lkIGRwdV9wb3dlcl9jbGllbnRfZGVz dHJveShzdHJ1Y3QgZHB1X3Bvd2VyX2hhbmRsZSAqcGhhbmRsZSwKKwlzdHJ1Y3QgZHB1X3Bvd2Vy X2NsaWVudCAqY2xpZW50KTsKKworLyoqCisgKiBkcHVfcG93ZXJfcmVzb3VyY2VfZW5hYmxlKCkg LSBlbmFibGUvZGlzYWJsZSB0aGUgcG93ZXIgcmVzb3VyY2VzCisgKiBAcGRhdGE6ICBwb3dlciBo YW5kbGUgY29udGFpbmluZyB0aGUgcmVzb3VyY2VzCisgKiBAY2xpZW50OiBjbGllbnQgaW5mb3Jt YXRpb24gdG8gZW5hYmxlL2Rpc2FibGUgaXRzIHZvdGUKKyAqIEBlbmFibGU6IGJvb2xlYW4gcmVx dWVzdCBmb3IgZW5hYmxlL2Rpc2FibGUKKyAqCisgKiBSZXR1cm46IGVycm9yIGNvZGUuCisgKi8K K2ludCBkcHVfcG93ZXJfcmVzb3VyY2VfZW5hYmxlKHN0cnVjdCBkcHVfcG93ZXJfaGFuZGxlICpw ZGF0YSwKKwlzdHJ1Y3QgZHB1X3Bvd2VyX2NsaWVudCAqcGNsaWVudCwgYm9vbCBlbmFibGUpOwor CisvKioKKyAqIGRwdV9wb3dlcl9kYXRhX2J1c19zdGF0ZV91cGRhdGUoKSAtIHVwZGF0ZSBkYXRh IGJ1cyBzdGF0ZQorICogQHBkYXRhOiAgcG93ZXIgaGFuZGxlIGNvbnRhaW5pbmcgdGhlIHJlc291 cmNlcworICogQGVuYWJsZTogdGFrZSBlbmFibGUgdnMgZGlzYWJsZSBwYXRoCisgKgorICogUmV0 dXJuOiBlcnJvciBjb2RlLgorICovCitpbnQgZHB1X3Bvd2VyX2RhdGFfYnVzX3N0YXRlX3VwZGF0 ZShzdHJ1Y3QgZHB1X3Bvd2VyX2hhbmRsZSAqcGhhbmRsZSwKKwkJCQkJCQlib29sIGVuYWJsZSk7 CisKKy8qKgorICogZHB1X3Bvd2VyX2RhdGFfYnVzX3NldF9xdW90YSgpIC0gc2V0IGRhdGEgYnVz IHF1b3RhIGZvciBwb3dlciBjbGllbnQKKyAqIEBwaGFuZGxlOiAgcG93ZXIgaGFuZGxlIGNvbnRh aW5pbmcgdGhlIHJlc291cmNlcworICogQGNsaWVudDogY2xpZW50IGluZm9ybWF0aW9uIHRvIHNl dCBxdW90YQorICogQGJ1c19jbGllbnQ6IHJlYWwtdGltZSBvciBub24tcmVhbC10aW1lIGJ1cyBj bGllbnQKKyAqIEBidXNfaWQ6IGlkZW50aWZpZXIgb2YgZGF0YSBidXMsIHNlZSBEUFVfUE9XRVJf SEFORExFX0RCVVNfSUQKKyAqIEBhYl9xdW90YTogYXJiaXRyYXRlZCBidXMgYmFuZHdpZHRoCisg KiBAaWJfcXVvdGE6IGluc3RhbnRhbmVvdXMgYnVzIGJhbmR3aWR0aAorICoKKyAqIFJldHVybjog emVybyBpZiBzdWNjZXNzLCBvciBlcnJvciBjb2RlIG90aGVyd2lzZQorICovCitpbnQgZHB1X3Bv d2VyX2RhdGFfYnVzX3NldF9xdW90YShzdHJ1Y3QgZHB1X3Bvd2VyX2hhbmRsZSAqcGhhbmRsZSwK KwkJc3RydWN0IGRwdV9wb3dlcl9jbGllbnQgKnBjbGllbnQsCisJCWludCBidXNfY2xpZW50LCB1 MzIgYnVzX2lkLAorCQl1NjQgYWJfcXVvdGEsIHU2NCBpYl9xdW90YSk7CisKKy8qKgorICogZHB1 X3Bvd2VyX2RhdGFfYnVzX2JhbmR3aWR0aF9jdHJsKCkgLSBjb250cm9sIGRhdGEgYnVzIGJhbmR3 aWR0aCBlbmFibGUKKyAqIEBwaGFuZGxlOiAgcG93ZXIgaGFuZGxlIGNvbnRhaW5pbmcgdGhlIHJl c291cmNlcworICogQGNsaWVudDogY2xpZW50IGluZm9ybWF0aW9uIHRvIGJhbmR3aWR0aCBjb250 cm9sCisgKiBAZW5hYmxlOiB0cnVlIHRvIGVuYWJsZSBiYW5kd2lkdGggZm9yIGRhdGEgYmFzZQor ICoKKyAqIFJldHVybjogbm9uZQorICovCit2b2lkIGRwdV9wb3dlcl9kYXRhX2J1c19iYW5kd2lk dGhfY3RybChzdHJ1Y3QgZHB1X3Bvd2VyX2hhbmRsZSAqcGhhbmRsZSwKKwkJc3RydWN0IGRwdV9w b3dlcl9jbGllbnQgKnBjbGllbnQsIGludCBlbmFibGUpOworCisvKioKKyAqIGRwdV9wb3dlcl9o YW5kbGVfcmVnaXN0ZXJfZXZlbnQgLSByZWdpc3RlciBhIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBh biBldmVudC4KKyAqCUNsaWVudHMgY2FuIHJlZ2lzdGVyIGZvciBtdWx0aXBsZSBldmVudHMgd2l0 aCBhIHNpbmdsZSByZWdpc3Rlci4KKyAqCUFueSBibG9jayB3aXRoIGFjY2VzcyB0byBwaGFuZGxl IGNhbiByZWdpc3RlciBmb3IgdGhlIGV2ZW50CisgKglub3RpZmljYXRpb24uCisgKiBAcGhhbmRs ZToJcG93ZXIgaGFuZGxlIGNvbnRhaW5pbmcgdGhlIHJlc291cmNlcworICogQGV2ZW50X3R5cGU6 CWV2ZW50IHR5cGUgdG8gcmVnaXN0ZXI7IHJlZmVyIERQVV9QT1dFUl9IQU5ETEVfRVZFTlRfKgor ICogQGNiX2ZuYzoJcG9pbnRlciB0byBkZXNpcmVkIGNhbGxiYWNrIGZ1bmN0aW9uCisgKiBAdXNy Ogl1c2VyIHBvaW50ZXIgdG8gcGFzcyB0byBjYWxsYmFjayBvbiBldmVudCB0cmlnZ2VyCisgKgor ICogUmV0dXJuOglldmVudCBwb2ludGVyIGlmIHN1Y2Nlc3MsIG9yIGVycm9yIGNvZGUgb3RoZXJ3 aXNlCisgKi8KK3N0cnVjdCBkcHVfcG93ZXJfZXZlbnQgKmRwdV9wb3dlcl9oYW5kbGVfcmVnaXN0 ZXJfZXZlbnQoCisJCXN0cnVjdCBkcHVfcG93ZXJfaGFuZGxlICpwaGFuZGxlLAorCQl1MzIgZXZl bnRfdHlwZSwgdm9pZCAoKmNiX2ZuYykodTMyIGV2ZW50X3R5cGUsIHZvaWQgKnVzciksCisJCXZv aWQgKnVzciwgY2hhciAqY2xpZW50X25hbWUpOworLyoqCisgKiBkcHVfcG93ZXJfaGFuZGxlX3Vu cmVnaXN0ZXJfZXZlbnQgLSB1bnJlZ2lzdGVyIGNhbGxiYWNrIGZvciBldmVudChzKQorICogQHBo YW5kbGU6CXBvd2VyIGhhbmRsZSBjb250YWluaW5nIHRoZSByZXNvdXJjZXMKKyAqIEBldmVudDoJ ZXZlbnQgcG9pbnRlciByZXR1cm5lZCBhZnRlciBwb3dlciBoYW5kbGUgcmVnaXN0ZXIKKyAqLwor dm9pZCBkcHVfcG93ZXJfaGFuZGxlX3VucmVnaXN0ZXJfZXZlbnQoc3RydWN0IGRwdV9wb3dlcl9o YW5kbGUgKnBoYW5kbGUsCisJCXN0cnVjdCBkcHVfcG93ZXJfZXZlbnQgKmV2ZW50KTsKKworLyoq CisgKiBkcHVfcG93ZXJfaGFuZGxlX2dldF9kYnVzX25hbWUgLSBnZXQgbmFtZSBvZiBnaXZlbiBk YXRhIGJ1cyBpZGVudGlmaWVyCisgKiBAYnVzX2lkOglkYXRhIGJ1cyBpZGVudGlmaWVyCisgKiBS ZXR1cm46CVBvaW50ZXIgdG8gbmFtZSBzdHJpbmcgaWYgc3VjY2VzczsgTlVMTCBvdGhlcndpc2UK KyAqLworY29uc3QgY2hhciAqZHB1X3Bvd2VyX2hhbmRsZV9nZXRfZGJ1c19uYW1lKHUzMiBidXNf aWQpOworCisjZW5kaWYgLyogX0RQVV9QT1dFUl9IQU5ETEVfSF8gKi8KZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9tc20vZHB1X3Bvd2VyX2hhbmRsZS5jIGIvZHJpdmVycy9ncHUvZHJtL21z bS9kcHVfcG93ZXJfaGFuZGxlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkZjE4 ZGUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kcHVfcG93ZXJfaGFuZGxlLmMK KysrIC9kZXYvbnVsbApAQCAtMSw2ODggKzAsMCBAQAotLyogQ29weXJpZ2h0IChjKSAyMDE0LTIw MTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRo aXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv b3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKLSAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBi eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBk aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJ VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK LSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g IFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu Ci0gKgotICovCi0KLSNkZWZpbmUgcHJfZm10KGZtdCkJIltkcm06JXM6JWRdOiAiIGZtdCwgX19m dW5jX18sIF9fTElORV9fCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxs aW51eC9vZi5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L29m X2FkZHJlc3MuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvbXV0 ZXguaD4KLSNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgotI2lmZGVmIENPTkZJR19RQ09N X0JVU19TQ0FMSU5HCi0jaW5jbHVkZSA8bGludXgvbXNtLWJ1cy5oPgotI2luY2x1ZGUgPGxpbnV4 L21zbS1idXMtYm9hcmQuaD4KLSNlbmRpZgotI2luY2x1ZGUgPGxpbnV4L2RwdV9pb191dGlsLmg+ Ci0KLSNpbmNsdWRlICJkcHVfcG93ZXJfaGFuZGxlLmgiCi0jaW5jbHVkZSAiZHB1X3RyYWNlLmgi Ci0KLXN0YXRpYyBjb25zdCBjaGFyICpkYXRhX2J1c19uYW1lW0RQVV9QT1dFUl9IQU5ETEVfREJV U19JRF9NQVhdID0gewotCVtEUFVfUE9XRVJfSEFORExFX0RCVVNfSURfTU5PQ10gPSAicWNvbSxk cHUtZGF0YS1idXMiLAotCVtEUFVfUE9XRVJfSEFORExFX0RCVVNfSURfTExDQ10gPSAicWNvbSxk cHUtbGxjYy1idXMiLAotCVtEUFVfUE9XRVJfSEFORExFX0RCVVNfSURfRUJJXSA9ICJxY29tLGRw dS1lYmktYnVzIiwKLX07Ci0KLWNvbnN0IGNoYXIgKmRwdV9wb3dlcl9oYW5kbGVfZ2V0X2RidXNf bmFtZSh1MzIgYnVzX2lkKQotewotCWlmIChidXNfaWQgPCBEUFVfUE9XRVJfSEFORExFX0RCVVNf SURfTUFYKQotCQlyZXR1cm4gZGF0YV9idXNfbmFtZVtidXNfaWRdOwotCi0JcmV0dXJuIE5VTEw7 Ci19Ci0KLXN0YXRpYyB2b2lkIGRwdV9wb3dlcl9ldmVudF90cmlnZ2VyX2xvY2tlZChzdHJ1Y3Qg ZHB1X3Bvd2VyX2hhbmRsZSAqcGhhbmRsZSwKLQkJdTMyIGV2ZW50X3R5cGUpCi17Ci0Jc3RydWN0 IGRwdV9wb3dlcl9ldmVudCAqZXZlbnQ7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGV2ZW50LCAm cGhhbmRsZS0+ZXZlbnRfbGlzdCwgbGlzdCkgewotCQlpZiAoZXZlbnQtPmV2ZW50X3R5cGUgJiBl dmVudF90eXBlKQotCQkJZXZlbnQtPmNiX2ZuYyhldmVudF90eXBlLCBldmVudC0+dXNyKTsKLQl9 Ci19Ci0KLXN0cnVjdCBkcHVfcG93ZXJfY2xpZW50ICpkcHVfcG93ZXJfY2xpZW50X2NyZWF0ZSgK LQlzdHJ1Y3QgZHB1X3Bvd2VyX2hhbmRsZSAqcGhhbmRsZSwgY2hhciAqY2xpZW50X25hbWUpCi17 Ci0Jc3RydWN0IGRwdV9wb3dlcl9jbGllbnQgKmNsaWVudDsKLQlzdGF0aWMgdTMyIGlkOwotCi0J aWYgKCFjbGllbnRfbmFtZSB8fCAhcGhhbmRsZSkgewotCQlwcl9lcnIoImNsaWVudCBuYW1lIGlz IG51bGwgb3IgaW52YWxpZCBwb3dlciBkYXRhXG4iKTsKLQkJcmV0dXJuIEVSUl9QVFIoLUVJTlZB TCk7Ci0JfQotCi0JY2xpZW50ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRwdV9wb3dlcl9jbGll bnQpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWNsaWVudCkKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01F TSk7Ci0KLQltdXRleF9sb2NrKCZwaGFuZGxlLT5waGFuZGxlX2xvY2spOwotCXN0cmxjcHkoY2xp ZW50LT5uYW1lLCBjbGllbnRfbmFtZSwgTUFYX0NMSUVOVF9OQU1FX0xFTik7Ci0JY2xpZW50LT51 c2VjYXNlX25keCA9IFZPVEVfSU5ERVhfRElTQUJMRTsKLQljbGllbnQtPmlkID0gaWQ7Ci0JY2xp ZW50LT5hY3RpdmUgPSB0cnVlOwotCXByX2RlYnVnKCJjbGllbnQgJXMgY3JlYXRlZDolcEsgaWQg OiVkXG4iLCBjbGllbnRfbmFtZSwKLQkJY2xpZW50LCBpZCk7Ci0JaWQrKzsKLQlsaXN0X2FkZCgm Y2xpZW50LT5saXN0LCAmcGhhbmRsZS0+cG93ZXJfY2xpZW50X2NsaXN0KTsKLQltdXRleF91bmxv Y2soJnBoYW5kbGUtPnBoYW5kbGVfbG9jayk7Ci0KLQlyZXR1cm4gY2xpZW50OwotfQotCi12b2lk IGRwdV9wb3dlcl9jbGllbnRfZGVzdHJveShzdHJ1Y3QgZHB1X3Bvd2VyX2hhbmRsZSAqcGhhbmRs ZSwKLQlzdHJ1Y3QgZHB1X3Bvd2VyX2NsaWVudCAqY2xpZW50KQotewotCWlmICghY2xpZW50ICB8 fCAhcGhhbmRsZSkgewotCQlwcl9lcnIoInJlZyBidXMgdm90ZTogaW52YWxpZCBjbGllbnQgaGFu ZGxlXG4iKTsKLQl9IGVsc2UgaWYgKCFjbGllbnQtPmFjdGl2ZSkgewotCQlwcl9lcnIoImRwdSBw b3dlciBkZWluaXQgYWxyZWFkeSBkb25lXG4iKTsKLQkJa2ZyZWUoY2xpZW50KTsKLQl9IGVsc2Ug ewotCQlwcl9kZWJ1ZygiYnVzIHZvdGUgY2xpZW50ICVzIGRlc3Ryb3llZDolcEsgaWQ6JXVcbiIs Ci0JCQljbGllbnQtPm5hbWUsIGNsaWVudCwgY2xpZW50LT5pZCk7Ci0JCW11dGV4X2xvY2soJnBo YW5kbGUtPnBoYW5kbGVfbG9jayk7Ci0JCWxpc3RfZGVsX2luaXQoJmNsaWVudC0+bGlzdCk7Ci0J CW11dGV4X3VubG9jaygmcGhhbmRsZS0+cGhhbmRsZV9sb2NrKTsKLQkJa2ZyZWUoY2xpZW50KTsK LQl9Ci19Ci0KLSNpZmRlZiBDT05GSUdfUUNPTV9CVVNfU0NBTElORwotCi0jZGVmaW5lIE1BWF9B WElfUE9SVF9DT1VOVCAzCi0KLXN0YXRpYyBpbnQgX2RwdV9wb3dlcl9kYXRhX2J1c19zZXRfcXVv dGEoCi0JCXN0cnVjdCBkcHVfcG93ZXJfZGF0YV9idXNfaGFuZGxlICpwZGJ1cywKLQkJdTY0IGFi X3F1b3RhX3J0LCB1NjQgYWJfcXVvdGFfbnJ0LAotCQl1NjQgaWJfcXVvdGFfcnQsIHU2NCBpYl9x dW90YV9ucnQpCi17Ci0JaW50IG5ld191Y19pZHg7Ci0JdTY0IGFiX3F1b3RhW01BWF9BWElfUE9S VF9DT1VOVF0gPSB7MCwgMH07Ci0JdTY0IGliX3F1b3RhW01BWF9BWElfUE9SVF9DT1VOVF0gPSB7 MCwgMH07Ci0JaW50IHJjOwotCi0JaWYgKHBkYnVzLT5kYXRhX2J1c19oZGwgPCAxKSB7Ci0JCXBy X2VycigiaW52YWxpZCBidXMgaGFuZGxlICVkXG4iLCBwZGJ1cy0+ZGF0YV9idXNfaGRsKTsKLQkJ cmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcGRidXMtPmFiX3J0ID0gYWJfcXVvdGFfcnQ7Ci0JcGRi dXMtPmliX3J0ID0gaWJfcXVvdGFfcnQ7Ci0JcGRidXMtPmFiX25ydCA9IGFiX3F1b3RhX25ydDsK LQlwZGJ1cy0+aWJfbnJ0ID0gaWJfcXVvdGFfbnJ0OwotCi0JaWYgKHBkYnVzLT5lbmFibGUpIHsK LQkJYWJfcXVvdGFfcnQgPSBtYXhfdCh1NjQsIGFiX3F1b3RhX3J0LAotCQkJCURQVV9QT1dFUl9I QU5ETEVfRU5BQkxFX0JVU19BQl9RVU9UQSk7Ci0JCWliX3F1b3RhX3J0ID0gbWF4X3QodTY0LCBp Yl9xdW90YV9ydCwKLQkJCQlEUFVfUE9XRVJfSEFORExFX0VOQUJMRV9CVVNfSUJfUVVPVEEpOwot CQlhYl9xdW90YV9ucnQgPSBtYXhfdCh1NjQsIGFiX3F1b3RhX25ydCwKLQkJCQlEUFVfUE9XRVJf SEFORExFX0VOQUJMRV9CVVNfQUJfUVVPVEEpOwotCQlpYl9xdW90YV9ucnQgPSBtYXhfdCh1NjQs IGliX3F1b3RhX25ydCwKLQkJCQlEUFVfUE9XRVJfSEFORExFX0VOQUJMRV9CVVNfSUJfUVVPVEEp OwotCX0gZWxzZSB7Ci0JCWFiX3F1b3RhX3J0ID0gbWluX3QodTY0LCBhYl9xdW90YV9ydCwKLQkJ CQlEUFVfUE9XRVJfSEFORExFX0RJU0FCTEVfQlVTX0FCX1FVT1RBKTsKLQkJaWJfcXVvdGFfcnQg PSBtaW5fdCh1NjQsIGliX3F1b3RhX3J0LAotCQkJCURQVV9QT1dFUl9IQU5ETEVfRElTQUJMRV9C VVNfSUJfUVVPVEEpOwotCQlhYl9xdW90YV9ucnQgPSBtaW5fdCh1NjQsIGFiX3F1b3RhX25ydCwK LQkJCQlEUFVfUE9XRVJfSEFORExFX0RJU0FCTEVfQlVTX0FCX1FVT1RBKTsKLQkJaWJfcXVvdGFf bnJ0ID0gbWluX3QodTY0LCBpYl9xdW90YV9ucnQsCi0JCQkJRFBVX1BPV0VSX0hBTkRMRV9ESVNB QkxFX0JVU19JQl9RVU9UQSk7Ci0JfQotCi0JaWYgKCFhYl9xdW90YV9ydCAmJiAhYWJfcXVvdGFf bnJ0ICYmICFpYl9xdW90YV9ydCAmJiAhaWJfcXVvdGFfbnJ0KSAgewotCQluZXdfdWNfaWR4ID0g MDsKLQl9IGVsc2UgewotCQlpbnQgaTsKLQkJc3RydWN0IG1zbV9idXNfdmVjdG9ycyAqdmVjdCA9 IE5VTEw7Ci0JCXN0cnVjdCBtc21fYnVzX3NjYWxlX3BkYXRhICpid190YWJsZSA9Ci0JCQlwZGJ1 cy0+ZGF0YV9idXNfc2NhbGVfdGFibGU7Ci0JCXUzMiBucnRfYXhpX3BvcnRfY250ID0gcGRidXMt Pm5ydF9heGlfcG9ydF9jbnQ7Ci0JCXUzMiB0b3RhbF9heGlfcG9ydF9jbnQgPSBwZGJ1cy0+YXhp X3BvcnRfY250OwotCQl1MzIgcnRfYXhpX3BvcnRfY250ID0gdG90YWxfYXhpX3BvcnRfY250IC0g bnJ0X2F4aV9wb3J0X2NudDsKLQotCQlpZiAoIWJ3X3RhYmxlIHx8ICF0b3RhbF9heGlfcG9ydF9j bnQgfHwKLQkJICAgIHRvdGFsX2F4aV9wb3J0X2NudCA+IE1BWF9BWElfUE9SVF9DT1VOVCkgewot CQkJcHJfZXJyKCJpbnZhbGlkIGlucHV0XG4iKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0K LQkJaWYgKHBkYnVzLT5idXNfY2hhbm5lbHMpIHsKLQkJCWliX3F1b3RhX3J0ID0gZGl2X3U2NChp Yl9xdW90YV9ydCwKLQkJCQkJCXBkYnVzLT5idXNfY2hhbm5lbHMpOwotCQkJaWJfcXVvdGFfbnJ0 ID0gZGl2X3U2NChpYl9xdW90YV9ucnQsCi0JCQkJCQlwZGJ1cy0+YnVzX2NoYW5uZWxzKTsKLQkJ fQotCi0JCWlmIChucnRfYXhpX3BvcnRfY250KSB7Ci0KLQkJCWFiX3F1b3RhX3J0ID0gZGl2X3U2 NChhYl9xdW90YV9ydCwgcnRfYXhpX3BvcnRfY250KTsKLQkJCWFiX3F1b3RhX25ydCA9IGRpdl91 NjQoYWJfcXVvdGFfbnJ0LCBucnRfYXhpX3BvcnRfY250KTsKLQotCQkJZm9yIChpID0gMDsgaSA8 IHRvdGFsX2F4aV9wb3J0X2NudDsgaSsrKSB7Ci0JCQkJaWYgKGkgPCBydF9heGlfcG9ydF9jbnQp IHsKLQkJCQkJYWJfcXVvdGFbaV0gPSBhYl9xdW90YV9ydDsKLQkJCQkJaWJfcXVvdGFbaV0gPSBp Yl9xdW90YV9ydDsKLQkJCQl9IGVsc2UgewotCQkJCQlhYl9xdW90YVtpXSA9IGFiX3F1b3RhX25y dDsKLQkJCQkJaWJfcXVvdGFbaV0gPSBpYl9xdW90YV9ucnQ7Ci0JCQkJfQotCQkJfQotCQl9IGVs c2UgewotCQkJYWJfcXVvdGFbMF0gPSBkaXZfdTY0KGFiX3F1b3RhX3J0ICsgYWJfcXVvdGFfbnJ0 LAotCQkJCQl0b3RhbF9heGlfcG9ydF9jbnQpOwotCQkJaWJfcXVvdGFbMF0gPSBpYl9xdW90YV9y dCArIGliX3F1b3RhX25ydDsKLQotCQkJZm9yIChpID0gMTsgaSA8IHRvdGFsX2F4aV9wb3J0X2Nu dDsgaSsrKSB7Ci0JCQkJYWJfcXVvdGFbaV0gPSBhYl9xdW90YVswXTsKLQkJCQlpYl9xdW90YVtp XSA9IGliX3F1b3RhWzBdOwotCQkJfQotCQl9Ci0KLQkJbmV3X3VjX2lkeCA9IChwZGJ1cy0+Y3Vy cl9id191Y19pZHggJQotCQkJKGJ3X3RhYmxlLT5udW1fdXNlY2FzZXMgLSAxKSkgKyAxOwotCi0J CWZvciAoaSA9IDA7IGkgPCB0b3RhbF9heGlfcG9ydF9jbnQ7IGkrKykgewotCQkJdmVjdCA9ICZi d190YWJsZS0+dXNlY2FzZVtuZXdfdWNfaWR4XS52ZWN0b3JzW2ldOwotCQkJdmVjdC0+YWIgPSBh Yl9xdW90YVtpXTsKLQkJCXZlY3QtPmliID0gaWJfcXVvdGFbaV07Ci0KLQkJCXByX2RlYnVnKAot CQkJCSIlcyB1Y19pZHg9JWQgJXMgcGF0aCBpZHg9JWQgYWI9JWxsdSBpYj0lbGx1XG4iLAotCQkJ CWJ3X3RhYmxlLT5uYW1lLAotCQkJCW5ld191Y19pZHgsIChpIDwgcnRfYXhpX3BvcnRfY250KSA/ ICJydCIgOiAibnJ0IgotCQkJCSwgaSwgdmVjdC0+YWIsIHZlY3QtPmliKTsKLQkJfQotCX0KLQlw ZGJ1cy0+Y3Vycl9id191Y19pZHggPSBuZXdfdWNfaWR4OwotCXBkYnVzLT5hb19id191Y19pZHgg PSBuZXdfdWNfaWR4OwotCi0JRFBVX0FUUkFDRV9CRUdJTigibXNtX2J1c19zY2FsZV9yZXEiKTsK LQlyYyA9IG1zbV9idXNfc2NhbGVfY2xpZW50X3VwZGF0ZV9yZXF1ZXN0KHBkYnVzLT5kYXRhX2J1 c19oZGwsCi0JCQluZXdfdWNfaWR4KTsKLQlEUFVfQVRSQUNFX0VORCgibXNtX2J1c19zY2FsZV9y ZXEiKTsKLQotCXJldHVybiByYzsKLX0KLQotaW50IGRwdV9wb3dlcl9kYXRhX2J1c19zZXRfcXVv dGEoc3RydWN0IGRwdV9wb3dlcl9oYW5kbGUgKnBoYW5kbGUsCi0JCXN0cnVjdCBkcHVfcG93ZXJf Y2xpZW50ICpwY2xpZW50LAotCQlpbnQgYnVzX2NsaWVudCwgdTMyIGJ1c19pZCwKLQkJdTY0IGFi X3F1b3RhLCB1NjQgaWJfcXVvdGEpCi17Ci0JaW50IHJjID0gMDsKLQlpbnQgaTsKLQl1NjQgdG90 YWxfYWJfcnQgPSAwLCB0b3RhbF9pYl9ydCA9IDA7Ci0JdTY0IHRvdGFsX2FiX25ydCA9IDAsIHRv dGFsX2liX25ydCA9IDA7Ci0Jc3RydWN0IGRwdV9wb3dlcl9jbGllbnQgKmNsaWVudDsKLQotCWlm ICghcGhhbmRsZSB8fCAhcGNsaWVudCB8fAotCQkJYnVzX2NsaWVudCA+PSBEUFVfUE9XRVJfSEFO RExFX0RBVEFfQlVTX0NMSUVOVF9NQVggfHwKLQkJCWJ1c19pZCA+PSBEUFVfUE9XRVJfSEFORExF X0RCVVNfSURfTUFYKSB7Ci0JCXByX2VycigiaW52YWxpZCBwYXJhbWV0ZXJzXG4iKTsKLQkJcmV0 dXJuIC1FSU5WQUw7Ci0JfQotCi0JbXV0ZXhfbG9jaygmcGhhbmRsZS0+cGhhbmRsZV9sb2NrKTsK LQotCXBjbGllbnQtPmFiW2J1c19jbGllbnRdID0gYWJfcXVvdGE7Ci0JcGNsaWVudC0+aWJbYnVz X2NsaWVudF0gPSBpYl9xdW90YTsKLQl0cmFjZV9kcHVfcGVyZl91cGRhdGVfYnVzKGJ1c19jbGll bnQsIGFiX3F1b3RhLCBpYl9xdW90YSk7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNsaWVudCwg JnBoYW5kbGUtPnBvd2VyX2NsaWVudF9jbGlzdCwgbGlzdCkgewotCQlmb3IgKGkgPSAwOyBpIDwg RFBVX1BPV0VSX0hBTkRMRV9EQVRBX0JVU19DTElFTlRfTUFYOyBpKyspIHsKLQkJCWlmIChpID09 IERQVV9QT1dFUl9IQU5ETEVfREFUQV9CVVNfQ0xJRU5UX05SVCkgewotCQkJCXRvdGFsX2FiX25y dCArPSBjbGllbnQtPmFiW2ldOwotCQkJCXRvdGFsX2liX25ydCArPSBjbGllbnQtPmliW2ldOwot CQkJfSBlbHNlIHsKLQkJCQl0b3RhbF9hYl9ydCArPSBjbGllbnQtPmFiW2ldOwotCQkJCXRvdGFs X2liX3J0ID0gbWF4KHRvdGFsX2liX3J0LCBjbGllbnQtPmliW2ldKTsKLQkJCX0KLQkJfQotCX0K LQotCWlmIChwaGFuZGxlLT5kYXRhX2J1c19oYW5kbGVbYnVzX2lkXS5kYXRhX2J1c19oZGwpCi0J CXJjID0gX2RwdV9wb3dlcl9kYXRhX2J1c19zZXRfcXVvdGEoCi0JCQkmcGhhbmRsZS0+ZGF0YV9i dXNfaGFuZGxlW2J1c19pZF0sCi0JCQl0b3RhbF9hYl9ydCwgdG90YWxfYWJfbnJ0LAotCQkJdG90 YWxfaWJfcnQsIHRvdGFsX2liX25ydCk7Ci0KLQltdXRleF91bmxvY2soJnBoYW5kbGUtPnBoYW5k bGVfbG9jayk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyB2b2lkIGRwdV9wb3dlcl9kYXRh X2J1c191bnJlZ2lzdGVyKAotCQlzdHJ1Y3QgZHB1X3Bvd2VyX2RhdGFfYnVzX2hhbmRsZSAqcGRi dXMpCi17Ci0JaWYgKHBkYnVzLT5kYXRhX2J1c19oZGwpIHsKLQkJbXNtX2J1c19zY2FsZV91bnJl Z2lzdGVyX2NsaWVudChwZGJ1cy0+ZGF0YV9idXNfaGRsKTsKLQkJcGRidXMtPmRhdGFfYnVzX2hk bCA9IDA7Ci0JfQotfQotCi1zdGF0aWMgaW50IGRwdV9wb3dlcl9kYXRhX2J1c19wYXJzZShzdHJ1 Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAotCXN0cnVjdCBkcHVfcG93ZXJfZGF0YV9idXNfaGFu ZGxlICpwZGJ1cywgY29uc3QgY2hhciAqbmFtZSkKLXsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5v ZGU7Ci0JaW50IHJjID0gMDsKLQlpbnQgcGF0aHM7Ci0KLQlwZGJ1cy0+YnVzX2NoYW5uZWxzID0g MTsKLQlyYyA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKHBkZXYtPmRldi5vZl9ub2RlLAotCQkicWNv bSxkcHUtZHJhbS1jaGFubmVscyIsICZwZGJ1cy0+YnVzX2NoYW5uZWxzKTsKLQlpZiAocmMpIHsK LQkJcHJfZGVidWcoIm51bWJlciBvZiBjaGFubmVscyBwcm9wZXJ0eSBub3Qgc3BlY2lmaWVkXG4i KTsKLQkJcmMgPSAwOwotCX0KLQotCXBkYnVzLT5ucnRfYXhpX3BvcnRfY250ID0gMDsKLQlyYyA9 IG9mX3Byb3BlcnR5X3JlYWRfdTMyKHBkZXYtPmRldi5vZl9ub2RlLAotCQkJInFjb20sZHB1LW51 bS1ucnQtcGF0aHMiLAotCQkJJnBkYnVzLT5ucnRfYXhpX3BvcnRfY250KTsKLQlpZiAocmMpIHsK LQkJcHJfZGVidWcoIm51bWJlciBvZiBheGkgcG9ydCBwcm9wZXJ0eSBub3Qgc3BlY2lmaWVkXG4i KTsKLQkJcmMgPSAwOwotCX0KLQotCW5vZGUgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShwZGV2LT5k ZXYub2Zfbm9kZSwgbmFtZSk7Ci0JaWYgKG5vZGUpIHsKLQkJcmMgPSBvZl9wcm9wZXJ0eV9yZWFk X3UzMihub2RlLAotCQkJCSJxY29tLG1zbS1idXMsbnVtLXBhdGhzIiwgJnBhdGhzKTsKLQkJaWYg KHJjKSB7Ci0JCQlwcl9lcnIoIkVycm9yLiBxY29tLG1zbS1idXMsbnVtLXBhdGhzIG5vdCBmb3Vu ZFxuIik7Ci0JCQlyZXR1cm4gcmM7Ci0JCX0KLQkJcGRidXMtPmF4aV9wb3J0X2NudCA9IHBhdGhz OwotCi0JCXBkYnVzLT5kYXRhX2J1c19zY2FsZV90YWJsZSA9Ci0JCQkJbXNtX2J1c19wZGF0YV9m cm9tX25vZGUocGRldiwgbm9kZSk7Ci0JCWlmIChJU19FUlJfT1JfTlVMTChwZGJ1cy0+ZGF0YV9i dXNfc2NhbGVfdGFibGUpKSB7Ci0JCQlwcl9lcnIoInJlZyBidXMgaGFuZGxlIHBhcnNpbmcgZmFp bGVkXG4iKTsKLQkJCXJjID0gUFRSX0VSUihwZGJ1cy0+ZGF0YV9idXNfc2NhbGVfdGFibGUpOwot CQkJaWYgKCFwZGJ1cy0+ZGF0YV9idXNfc2NhbGVfdGFibGUpCi0JCQkJcmMgPSAtRUlOVkFMOwot CQkJZ290byBlbmQ7Ci0JCX0KLQkJcGRidXMtPmRhdGFfYnVzX2hkbCA9IG1zbV9idXNfc2NhbGVf cmVnaXN0ZXJfY2xpZW50KAotCQkJCXBkYnVzLT5kYXRhX2J1c19zY2FsZV90YWJsZSk7Ci0JCWlm ICghcGRidXMtPmRhdGFfYnVzX2hkbCkgewotCQkJcHJfZXJyKCJkYXRhX2J1c19jbGllbnQgcmVn aXN0ZXIgZmFpbGVkXG4iKTsKLQkJCXJjID0gLUVJTlZBTDsKLQkJCWdvdG8gZW5kOwotCQl9Ci0J CXByX2RlYnVnKCJyZWdpc3RlciAlcyBkYXRhX2J1c19oZGw9JXhcbiIsIG5hbWUsCi0JCQkJcGRi dXMtPmRhdGFfYnVzX2hkbCk7Ci0JfQotCi1lbmQ6Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMg aW50IGRwdV9wb3dlcl9yZWdfYnVzX3BhcnNlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYs Ci0Jc3RydWN0IGRwdV9wb3dlcl9oYW5kbGUgKnBoYW5kbGUpCi17Ci0Jc3RydWN0IGRldmljZV9u b2RlICpub2RlOwotCXN0cnVjdCBtc21fYnVzX3NjYWxlX3BkYXRhICpidXNfc2NhbGVfdGFibGU7 Ci0JaW50IHJjID0gMDsKLQotCW5vZGUgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShwZGV2LT5kZXYu b2Zfbm9kZSwgInFjb20sZHB1LXJlZy1idXMiKTsKLQlpZiAobm9kZSkgewotCQlidXNfc2NhbGVf dGFibGUgPSBtc21fYnVzX3BkYXRhX2Zyb21fbm9kZShwZGV2LCBub2RlKTsKLQkJaWYgKElTX0VS Ul9PUl9OVUxMKGJ1c19zY2FsZV90YWJsZSkpIHsKLQkJCXByX2VycigicmVnIGJ1cyBoYW5kbGUg cGFyc2luZyBmYWlsZWRcbiIpOwotCQkJcmMgPSBQVFJfRVJSKGJ1c19zY2FsZV90YWJsZSk7Ci0J CQlpZiAoIWJ1c19zY2FsZV90YWJsZSkKLQkJCQlyYyA9IC1FSU5WQUw7Ci0JCQlnb3RvIGVuZDsK LQkJfQotCQlwaGFuZGxlLT5yZWdfYnVzX2hkbCA9IG1zbV9idXNfc2NhbGVfcmVnaXN0ZXJfY2xp ZW50KAotCQkJICAgICAgYnVzX3NjYWxlX3RhYmxlKTsKLQkJaWYgKCFwaGFuZGxlLT5yZWdfYnVz X2hkbCkgewotCQkJcHJfZXJyKCJyZWdfYnVzX2NsaWVudCByZWdpc3RlciBmYWlsZWRcbiIpOwot CQkJcmMgPSAtRUlOVkFMOwotCQkJZ290byBlbmQ7Ci0JCX0KLQkJcHJfZGVidWcoInJlZ2lzdGVy IHJlZ19idXNfaGRsPSV4XG4iLCBwaGFuZGxlLT5yZWdfYnVzX2hkbCk7Ci0JfQotCi1lbmQ6Ci0J cmV0dXJuIHJjOwotfQotCi1zdGF0aWMgdm9pZCBkcHVfcG93ZXJfcmVnX2J1c191bnJlZ2lzdGVy KHUzMiByZWdfYnVzX2hkbCkKLXsKLQlpZiAocmVnX2J1c19oZGwpCi0JCW1zbV9idXNfc2NhbGVf dW5yZWdpc3Rlcl9jbGllbnQocmVnX2J1c19oZGwpOwotfQotCi1pbnQgZHB1X3Bvd2VyX2RhdGFf YnVzX3N0YXRlX3VwZGF0ZShzdHJ1Y3QgZHB1X3Bvd2VyX2hhbmRsZSAqcGhhbmRsZSwKLQkJCQkJ CQlib29sIGVuYWJsZSkKLXsKLQlpbnQgaTsKLQotCWlmICghcGhhbmRsZSkgewotCQlwcl9lcnIo ImludmFsaWQgcGFyYW1cbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlmb3IgKGkgPSBE UFVfUE9XRVJfSEFORExFX0RCVVNfSURfTU5PQzsKLQkJCWkgPCBEUFVfUE9XRVJfSEFORExFX0RC VVNfSURfTUFYOyBpKyspCi0JCXBoYW5kbGUtPmRhdGFfYnVzX2hhbmRsZVtpXS5lbmFibGUgPSBl bmFibGU7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBkcHVfcG93ZXJfZGF0YV9idXNf dXBkYXRlKHN0cnVjdCBkcHVfcG93ZXJfZGF0YV9idXNfaGFuZGxlICpwZGJ1cywKLQkJCQkJCQli b29sIGVuYWJsZSkKLXsKLQlpbnQgcmMgPSAwOwotCi0JcGRidXMtPmVuYWJsZSA9IGVuYWJsZTsK LQotCWlmIChwZGJ1cy0+ZGF0YV9idXNfaGRsKQotCQlyYyA9IF9kcHVfcG93ZXJfZGF0YV9idXNf c2V0X3F1b3RhKHBkYnVzLCBwZGJ1cy0+YWJfcnQsCi0JCQkJcGRidXMtPmFiX25ydCwgcGRidXMt PmliX3J0LCBwZGJ1cy0+aWJfbnJ0KTsKLQotCWlmIChyYykKLQkJcHJfZXJyKCJmYWlsZWQgdG8g c2V0IGRhdGEgYnVzIHZvdGUgcmM9JWQgZW5hYmxlOiVkXG4iLAotCQkJCQkJCXJjLCBlbmFibGUp OwotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRwdV9wb3dlcl9yZWdfYnVzX3VwZGF0 ZSh1MzIgcmVnX2J1c19oZGwsIHUzMiB1c2VjYXNlX25keCkKLXsKLQlpbnQgcmMgPSAwOwotCi0J aWYgKHJlZ19idXNfaGRsKQotCQlyYyA9IG1zbV9idXNfc2NhbGVfY2xpZW50X3VwZGF0ZV9yZXF1 ZXN0KHJlZ19idXNfaGRsLAotCQkJCQkJCQl1c2VjYXNlX25keCk7Ci0JaWYgKHJjKQotCQlwcl9l cnIoImZhaWxlZCB0byBzZXQgcmVnIGJ1cyB2b3RlIHJjPSVkXG4iLCByYyk7Ci0KLQlyZXR1cm4g cmM7Ci19Ci0jZWxzZQotc3RhdGljIGludCBkcHVfcG93ZXJfZGF0YV9idXNfcGFyc2Uoc3RydWN0 IHBsYXRmb3JtX2RldmljZSAqcGRldiwKLQkJc3RydWN0IGRwdV9wb3dlcl9kYXRhX2J1c19oYW5k bGUgKnBkYnVzLCBjb25zdCBjaGFyICpuYW1lKQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMg dm9pZCBkcHVfcG93ZXJfZGF0YV9idXNfdW5yZWdpc3RlcigKLQkJc3RydWN0IGRwdV9wb3dlcl9k YXRhX2J1c19oYW5kbGUgKnBkYnVzKQotewotfQotCi1pbnQgZHB1X3Bvd2VyX2RhdGFfYnVzX3Nl dF9xdW90YShzdHJ1Y3QgZHB1X3Bvd2VyX2hhbmRsZSAqcGhhbmRsZSwKLQkJc3RydWN0IGRwdV9w b3dlcl9jbGllbnQgKnBjbGllbnQsCi0JCWludCBidXNfY2xpZW50LCB1MzIgYnVzX2lkLAotCQl1 NjQgYWJfcXVvdGEsIHU2NCBpYl9xdW90YSkKLXsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlu dCBkcHVfcG93ZXJfcmVnX2J1c19wYXJzZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAot CXN0cnVjdCBkcHVfcG93ZXJfaGFuZGxlICpwaGFuZGxlKQotewotCXJldHVybiAwOwotfQotCi1z dGF0aWMgdm9pZCBkcHVfcG93ZXJfcmVnX2J1c191bnJlZ2lzdGVyKHUzMiByZWdfYnVzX2hkbCkK LXsKLX0KLQotc3RhdGljIGludCBkcHVfcG93ZXJfcmVnX2J1c191cGRhdGUodTMyIHJlZ19idXNf aGRsLCB1MzIgdXNlY2FzZV9uZHgpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZHB1 X3Bvd2VyX2RhdGFfYnVzX3VwZGF0ZShzdHJ1Y3QgZHB1X3Bvd2VyX2RhdGFfYnVzX2hhbmRsZSAq cGRidXMsCi0JCQkJCQkJYm9vbCBlbmFibGUpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBkcHVf cG93ZXJfZGF0YV9idXNfc3RhdGVfdXBkYXRlKHN0cnVjdCBkcHVfcG93ZXJfaGFuZGxlICpwaGFu ZGxlLAotCQkJCQkJCWJvb2wgZW5hYmxlKQotewotCXJldHVybiAwOwotfQotI2VuZGlmCi0KLWlu dCBkcHVfcG93ZXJfcmVzb3VyY2VfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAot CXN0cnVjdCBkcHVfcG93ZXJfaGFuZGxlICpwaGFuZGxlKQotewotCWludCByYyA9IDAsIGk7Ci0K LQlwaGFuZGxlLT5kZXYgPSAmcGRldi0+ZGV2OwotCi0JcmMgPSBkcHVfcG93ZXJfcmVnX2J1c19w YXJzZShwZGV2LCBwaGFuZGxlKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJyZWdpc3RlciBidXMg cGFyc2UgZmFpbGVkIHJjPSVkXG4iLCByYyk7Ci0JCXJldHVybiByYzsKLQl9Ci0KLQlmb3IgKGkg PSBEUFVfUE9XRVJfSEFORExFX0RCVVNfSURfTU5PQzsKLQkJCWkgPCBEUFVfUE9XRVJfSEFORExF X0RCVVNfSURfTUFYOyBpKyspIHsKLQkJcmMgPSBkcHVfcG93ZXJfZGF0YV9idXNfcGFyc2UocGRl diwKLQkJCQkmcGhhbmRsZS0+ZGF0YV9idXNfaGFuZGxlW2ldLAotCQkJCWRhdGFfYnVzX25hbWVb aV0pOwotCQlpZiAocmMpIHsKLQkJCXByX2VycigicmVnaXN0ZXIgZGF0YSBidXMgcGFyc2UgZmFp bGVkIGlkPSVkIHJjPSVkXG4iLAotCQkJCQlpLCByYyk7Ci0JCQlnb3RvIGRhdGFfYnVzX2VycjsK LQkJfQotCX0KLQotCUlOSVRfTElTVF9IRUFEKCZwaGFuZGxlLT5wb3dlcl9jbGllbnRfY2xpc3Qp OwotCUlOSVRfTElTVF9IRUFEKCZwaGFuZGxlLT5ldmVudF9saXN0KTsKLQotCW11dGV4X2luaXQo JnBoYW5kbGUtPnBoYW5kbGVfbG9jayk7Ci0KLQlyZXR1cm4gcmM7Ci0KLWRhdGFfYnVzX2VycjoK LQlmb3IgKGktLTsgaSA+PSAwOyBpLS0pCi0JCWRwdV9wb3dlcl9kYXRhX2J1c191bnJlZ2lzdGVy KCZwaGFuZGxlLT5kYXRhX2J1c19oYW5kbGVbaV0pOwotCWRwdV9wb3dlcl9yZWdfYnVzX3VucmVn aXN0ZXIocGhhbmRsZS0+cmVnX2J1c19oZGwpOwotCXJldHVybiByYzsKLX0KLQotdm9pZCBkcHVf cG93ZXJfcmVzb3VyY2VfZGVpbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCi0Jc3Ry dWN0IGRwdV9wb3dlcl9oYW5kbGUgKnBoYW5kbGUpCi17Ci0Jc3RydWN0IGRwdV9wb3dlcl9jbGll bnQgKmN1cnJfY2xpZW50LCAqbmV4dF9jbGllbnQ7Ci0Jc3RydWN0IGRwdV9wb3dlcl9ldmVudCAq Y3Vycl9ldmVudCwgKm5leHRfZXZlbnQ7Ci0JaW50IGk7Ci0KLQlpZiAoIXBoYW5kbGUgfHwgIXBk ZXYpIHsKLQkJcHJfZXJyKCJpbnZhbGlkIGlucHV0IHBhcmFtXG4iKTsKLQkJcmV0dXJuOwotCX0K LQotCW11dGV4X2xvY2soJnBoYW5kbGUtPnBoYW5kbGVfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9l bnRyeV9zYWZlKGN1cnJfY2xpZW50LCBuZXh0X2NsaWVudCwKLQkJCSZwaGFuZGxlLT5wb3dlcl9j bGllbnRfY2xpc3QsIGxpc3QpIHsKLQkJcHJfZXJyKCJjbGllbmQ6JXMtJWQgc3RpbGwgcmVnaXN0 ZXJlZCB3aXRoIHJlZmNvdW50OiVkXG4iLAotCQkJCWN1cnJfY2xpZW50LT5uYW1lLCBjdXJyX2Ns aWVudC0+aWQsCi0JCQkJY3Vycl9jbGllbnQtPnJlZmNvdW50KTsKLQkJY3Vycl9jbGllbnQtPmFj dGl2ZSA9IGZhbHNlOwotCQlsaXN0X2RlbCgmY3Vycl9jbGllbnQtPmxpc3QpOwotCX0KLQotCWxp c3RfZm9yX2VhY2hfZW50cnlfc2FmZShjdXJyX2V2ZW50LCBuZXh0X2V2ZW50LAotCQkJJnBoYW5k bGUtPmV2ZW50X2xpc3QsIGxpc3QpIHsKLQkJcHJfZXJyKCJldmVudDolZCwgY2xpZW50OiVzIHN0 aWxsIHJlZ2lzdGVyZWRcbiIsCi0JCQkJY3Vycl9ldmVudC0+ZXZlbnRfdHlwZSwKLQkJCQljdXJy X2V2ZW50LT5jbGllbnRfbmFtZSk7Ci0JCWN1cnJfZXZlbnQtPmFjdGl2ZSA9IGZhbHNlOwotCQls aXN0X2RlbCgmY3Vycl9ldmVudC0+bGlzdCk7Ci0JfQotCW11dGV4X3VubG9jaygmcGhhbmRsZS0+ cGhhbmRsZV9sb2NrKTsKLQotCWZvciAoaSA9IDA7IGkgPCBEUFVfUE9XRVJfSEFORExFX0RCVVNf SURfTUFYOyBpKyspCi0JCWRwdV9wb3dlcl9kYXRhX2J1c191bnJlZ2lzdGVyKCZwaGFuZGxlLT5k YXRhX2J1c19oYW5kbGVbaV0pOwotCi0JZHB1X3Bvd2VyX3JlZ19idXNfdW5yZWdpc3RlcihwaGFu ZGxlLT5yZWdfYnVzX2hkbCk7Ci19Ci0KLWludCBkcHVfcG93ZXJfcmVzb3VyY2VfZW5hYmxlKHN0 cnVjdCBkcHVfcG93ZXJfaGFuZGxlICpwaGFuZGxlLAotCXN0cnVjdCBkcHVfcG93ZXJfY2xpZW50 ICpwY2xpZW50LCBib29sIGVuYWJsZSkKLXsKLQlpbnQgcmMgPSAwLCBpOwotCWJvb2wgY2hhbmdl ZCA9IGZhbHNlOwotCXUzMiBtYXhfdXNlY2FzZV9uZHggPSBWT1RFX0lOREVYX0RJU0FCTEUsIHBy ZXZfdXNlY2FzZV9uZHg7Ci0Jc3RydWN0IGRwdV9wb3dlcl9jbGllbnQgKmNsaWVudDsKLQotCWlm ICghcGhhbmRsZSB8fCAhcGNsaWVudCkgewotCQlwcl9lcnIoImludmFsaWQgaW5wdXQgYXJndW1l bnRcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQltdXRleF9sb2NrKCZwaGFuZGxlLT5w aGFuZGxlX2xvY2spOwotCWlmIChlbmFibGUpCi0JCXBjbGllbnQtPnJlZmNvdW50Kys7Ci0JZWxz ZSBpZiAocGNsaWVudC0+cmVmY291bnQpCi0JCXBjbGllbnQtPnJlZmNvdW50LS07Ci0KLQlpZiAo cGNsaWVudC0+cmVmY291bnQpCi0JCXBjbGllbnQtPnVzZWNhc2VfbmR4ID0gVk9URV9JTkRFWF9M T1c7Ci0JZWxzZQotCQlwY2xpZW50LT51c2VjYXNlX25keCA9IFZPVEVfSU5ERVhfRElTQUJMRTsK LQotCWxpc3RfZm9yX2VhY2hfZW50cnkoY2xpZW50LCAmcGhhbmRsZS0+cG93ZXJfY2xpZW50X2Ns aXN0LCBsaXN0KSB7Ci0JCWlmIChjbGllbnQtPnVzZWNhc2VfbmR4IDwgVk9URV9JTkRFWF9NQVgg JiYKLQkJICAgIGNsaWVudC0+dXNlY2FzZV9uZHggPiBtYXhfdXNlY2FzZV9uZHgpCi0JCQltYXhf dXNlY2FzZV9uZHggPSBjbGllbnQtPnVzZWNhc2VfbmR4OwotCX0KLQotCWlmIChwaGFuZGxlLT5j dXJyZW50X3VzZWNhc2VfbmR4ICE9IG1heF91c2VjYXNlX25keCkgewotCQljaGFuZ2VkID0gdHJ1 ZTsKLQkJcHJldl91c2VjYXNlX25keCA9IHBoYW5kbGUtPmN1cnJlbnRfdXNlY2FzZV9uZHg7Ci0J CXBoYW5kbGUtPmN1cnJlbnRfdXNlY2FzZV9uZHggPSBtYXhfdXNlY2FzZV9uZHg7Ci0JfQotCi0J cHJfZGVidWcoIiVwUzogY2hhbmdlZD0lZCBjdXJyZW50IGlkeD0lZCByZXF1ZXN0IGNsaWVudCAl cyBpZDoldSBlbmFibGU6JWQgcmVmY291bnQ6JWRcbiIsCi0JCV9fYnVpbHRpbl9yZXR1cm5fYWRk cmVzcygwKSwgY2hhbmdlZCwgbWF4X3VzZWNhc2VfbmR4LAotCQlwY2xpZW50LT5uYW1lLCBwY2xp ZW50LT5pZCwgZW5hYmxlLCBwY2xpZW50LT5yZWZjb3VudCk7Ci0KLQlpZiAoIWNoYW5nZWQpCi0J CWdvdG8gZW5kOwotCi0JaWYgKGVuYWJsZSkgewotCQlkcHVfcG93ZXJfZXZlbnRfdHJpZ2dlcl9s b2NrZWQocGhhbmRsZSwKLQkJCQlEUFVfUE9XRVJfRVZFTlRfUFJFX0VOQUJMRSk7Ci0KLQkJZm9y IChpID0gMDsgaSA8IERQVV9QT1dFUl9IQU5ETEVfREJVU19JRF9NQVg7IGkrKykgewotCQkJcmMg PSBkcHVfcG93ZXJfZGF0YV9idXNfdXBkYXRlKAotCQkJCQkmcGhhbmRsZS0+ZGF0YV9idXNfaGFu ZGxlW2ldLCBlbmFibGUpOwotCQkJaWYgKHJjKSB7Ci0JCQkJcHJfZXJyKCJmYWlsZWQgdG8gc2V0 IGRhdGEgYnVzIHZvdGUgaWQ9JWQgcmM9JWRcbiIsCi0JCQkJCQlpLCByYyk7Ci0JCQkJZ290byBk YXRhX2J1c19oZGxfZXJyOwotCQkJfQotCQl9Ci0KLQkJcmMgPSBkcHVfcG93ZXJfcmVnX2J1c191 cGRhdGUocGhhbmRsZS0+cmVnX2J1c19oZGwsCi0JCQkJCQkJbWF4X3VzZWNhc2VfbmR4KTsKLQkJ aWYgKHJjKSB7Ci0JCQlwcl9lcnIoImZhaWxlZCB0byBzZXQgcmVnIGJ1cyB2b3RlIHJjPSVkXG4i LCByYyk7Ci0JCQlnb3RvIHJlZ19idXNfaGRsX2VycjsKLQkJfQotCi0JCWRwdV9wb3dlcl9ldmVu dF90cmlnZ2VyX2xvY2tlZChwaGFuZGxlLAotCQkJCURQVV9QT1dFUl9FVkVOVF9QT1NUX0VOQUJM RSk7Ci0KLQl9IGVsc2UgewotCQlkcHVfcG93ZXJfZXZlbnRfdHJpZ2dlcl9sb2NrZWQocGhhbmRs ZSwKLQkJCQlEUFVfUE9XRVJfRVZFTlRfUFJFX0RJU0FCTEUpOwotCi0JCWRwdV9wb3dlcl9yZWdf YnVzX3VwZGF0ZShwaGFuZGxlLT5yZWdfYnVzX2hkbCwKLQkJCQkJCQltYXhfdXNlY2FzZV9uZHgp OwotCi0JCWZvciAoaSA9IDAgOyBpIDwgRFBVX1BPV0VSX0hBTkRMRV9EQlVTX0lEX01BWDsgaSsr KQotCQkJZHB1X3Bvd2VyX2RhdGFfYnVzX3VwZGF0ZSgmcGhhbmRsZS0+ZGF0YV9idXNfaGFuZGxl W2ldLAotCQkJCQllbmFibGUpOwotCi0JCWRwdV9wb3dlcl9ldmVudF90cmlnZ2VyX2xvY2tlZChw aGFuZGxlLAotCQkJCURQVV9QT1dFUl9FVkVOVF9QT1NUX0RJU0FCTEUpOwotCX0KLQotZW5kOgot CW11dGV4X3VubG9jaygmcGhhbmRsZS0+cGhhbmRsZV9sb2NrKTsKLQlyZXR1cm4gcmM7Ci0KLXJl Z19idXNfaGRsX2VycjoKLQlmb3IgKGkgPSAwIDsgaSA8IERQVV9QT1dFUl9IQU5ETEVfREJVU19J RF9NQVg7IGkrKykKLQkJZHB1X3Bvd2VyX2RhdGFfYnVzX3VwZGF0ZSgmcGhhbmRsZS0+ZGF0YV9i dXNfaGFuZGxlW2ldLCAwKTsKLWRhdGFfYnVzX2hkbF9lcnI6Ci0JcGhhbmRsZS0+Y3VycmVudF91 c2VjYXNlX25keCA9IHByZXZfdXNlY2FzZV9uZHg7Ci0JbXV0ZXhfdW5sb2NrKCZwaGFuZGxlLT5w aGFuZGxlX2xvY2spOwotCXJldHVybiByYzsKLX0KLQotc3RydWN0IGRwdV9wb3dlcl9ldmVudCAq ZHB1X3Bvd2VyX2hhbmRsZV9yZWdpc3Rlcl9ldmVudCgKLQkJc3RydWN0IGRwdV9wb3dlcl9oYW5k bGUgKnBoYW5kbGUsCi0JCXUzMiBldmVudF90eXBlLCB2b2lkICgqY2JfZm5jKSh1MzIgZXZlbnRf dHlwZSwgdm9pZCAqdXNyKSwKLQkJdm9pZCAqdXNyLCBjaGFyICpjbGllbnRfbmFtZSkKLXsKLQlz dHJ1Y3QgZHB1X3Bvd2VyX2V2ZW50ICpldmVudDsKLQotCWlmICghcGhhbmRsZSkgewotCQlwcl9l cnIoImludmFsaWQgcG93ZXIgaGFuZGxlXG4iKTsKLQkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7 Ci0JfSBlbHNlIGlmICghY2JfZm5jIHx8ICFldmVudF90eXBlKSB7Ci0JCXByX2Vycigibm8gY2Fs bGJhY2sgZm5jIG9yIGV2ZW50IHR5cGVcbiIpOwotCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsK LQl9Ci0KLQlldmVudCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkcHVfcG93ZXJfZXZlbnQpLCBH RlBfS0VSTkVMKTsKLQlpZiAoIWV2ZW50KQotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKLQot CWV2ZW50LT5ldmVudF90eXBlID0gZXZlbnRfdHlwZTsKLQlldmVudC0+Y2JfZm5jID0gY2JfZm5j OwotCWV2ZW50LT51c3IgPSB1c3I7Ci0Jc3RybGNweShldmVudC0+Y2xpZW50X25hbWUsIGNsaWVu dF9uYW1lLCBNQVhfQ0xJRU5UX05BTUVfTEVOKTsKLQlldmVudC0+YWN0aXZlID0gdHJ1ZTsKLQot CW11dGV4X2xvY2soJnBoYW5kbGUtPnBoYW5kbGVfbG9jayk7Ci0JbGlzdF9hZGQoJmV2ZW50LT5s aXN0LCAmcGhhbmRsZS0+ZXZlbnRfbGlzdCk7Ci0JbXV0ZXhfdW5sb2NrKCZwaGFuZGxlLT5waGFu ZGxlX2xvY2spOwotCi0JcmV0dXJuIGV2ZW50OwotfQotCi12b2lkIGRwdV9wb3dlcl9oYW5kbGVf dW5yZWdpc3Rlcl9ldmVudCgKLQkJc3RydWN0IGRwdV9wb3dlcl9oYW5kbGUgKnBoYW5kbGUsCi0J CXN0cnVjdCBkcHVfcG93ZXJfZXZlbnQgKmV2ZW50KQotewotCWlmICghcGhhbmRsZSB8fCAhZXZl bnQpIHsKLQkJcHJfZXJyKCJpbnZhbGlkIHBoYW5kbGUgb3IgZXZlbnRcbiIpOwotCX0gZWxzZSBp ZiAoIWV2ZW50LT5hY3RpdmUpIHsKLQkJcHJfZXJyKCJwb3dlciBoYW5kbGUgZGVpbml0IGFscmVh ZHkgZG9uZVxuIik7Ci0JCWtmcmVlKGV2ZW50KTsKLQl9IGVsc2UgewotCQltdXRleF9sb2NrKCZw aGFuZGxlLT5waGFuZGxlX2xvY2spOwotCQlsaXN0X2RlbF9pbml0KCZldmVudC0+bGlzdCk7Ci0J CW11dGV4X3VubG9jaygmcGhhbmRsZS0+cGhhbmRsZV9sb2NrKTsKLQkJa2ZyZWUoZXZlbnQpOwot CX0KLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHB1X3Bvd2VyX2hhbmRsZS5o IGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcHVfcG93ZXJfaGFuZGxlLmgKZGVsZXRlZCBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDlhNmQ0YjkuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21z bS9kcHVfcG93ZXJfaGFuZGxlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyODggKzAsMCBAQAotLyog Q29weXJpZ2h0IChjKSAyMDE2LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRz IHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKLSAqIG9ubHkgdmVy c2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoK LSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg YmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl IGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICovCi0KLSNpZm5kZWYgX0RQVV9QT1dFUl9IQU5E TEVfSF8KLSNkZWZpbmUgX0RQVV9QT1dFUl9IQU5ETEVfSF8KLQotI2RlZmluZSBNQVhfQ0xJRU5U X05BTUVfTEVOIDEyOAotCi0jZGVmaW5lIERQVV9QT1dFUl9IQU5ETEVfRU5BQkxFX0JVU19BQl9R VU9UQQkwCi0jZGVmaW5lIERQVV9QT1dFUl9IQU5ETEVfRElTQUJMRV9CVVNfQUJfUVVPVEEJMAot I2RlZmluZSBEUFVfUE9XRVJfSEFORExFX0VOQUJMRV9CVVNfSUJfUVVPVEEJMTYwMDAwMDAwMAot I2RlZmluZSBEUFVfUE9XRVJfSEFORExFX0RJU0FCTEVfQlVTX0lCX1FVT1RBCTAKLQotI2luY2x1 ZGUgPGxpbnV4L2RwdV9pb191dGlsLmg+Ci0KLS8qIGV2ZW50IHdpbGwgYmUgdHJpZ2dlcmVkIGJl Zm9yZSBwb3dlciBoYW5kbGVyIGRpc2FibGUgKi8KLSNkZWZpbmUgRFBVX1BPV0VSX0VWRU5UX1BS RV9ESVNBQkxFCTB4MQotCi0vKiBldmVudCB3aWxsIGJlIHRyaWdnZXJlZCBhZnRlciBwb3dlciBo YW5kbGVyIGRpc2FibGUgKi8KLSNkZWZpbmUgRFBVX1BPV0VSX0VWRU5UX1BPU1RfRElTQUJMRQkw eDIKLQotLyogZXZlbnQgd2lsbCBiZSB0cmlnZ2VyZWQgYmVmb3JlIHBvd2VyIGhhbmRsZXIgZW5h YmxlICovCi0jZGVmaW5lIERQVV9QT1dFUl9FVkVOVF9QUkVfRU5BQkxFCTB4NAotCi0vKiBldmVu dCB3aWxsIGJlIHRyaWdnZXJlZCBhZnRlciBwb3dlciBoYW5kbGVyIGVuYWJsZSAqLwotI2RlZmlu ZSBEUFVfUE9XRVJfRVZFTlRfUE9TVF9FTkFCTEUJMHg4Ci0KLS8qKgotICogbWRzc19idXNfdm90 ZV90eXBlOiByZWdpc3RlciBidXMgdm90ZSB0eXBlCi0gKiBWT1RFX0lOREVYX0RJU0FCTEU6IHJl bW92ZXMgdGhlIGNsaWVudCB2b3RlCi0gKiBWT1RFX0lOREVYX0xPVzoga2VlcHMgdGhlIGxvd2Vz dCB2b3RlIGZvciByZWdpc3RlciBidXMKLSAqIFZPVEVfSU5ERVhfTUFYOiBpbnZhbGlkCi0gKi8K LWVudW0gbWRzc19idXNfdm90ZV90eXBlIHsKLQlWT1RFX0lOREVYX0RJU0FCTEUsCi0JVk9URV9J TkRFWF9MT1csCi0JVk9URV9JTkRFWF9NQVgsCi19OwotCi0vKioKLSAqIGVudW0gZHB1X3Bvd2Vy X2hhbmRsZV9kYXRhX2J1c19jbGllbnQgLSB0eXBlIG9mIGF4aSBidXMgY2xpZW50cwotICogQERQ VV9QT1dFUl9IQU5ETEVfREFUQV9CVVNfQ0xJRU5UX1JUOiBjb3JlIHJlYWwtdGltZSBidXMgY2xp ZW50Ci0gKiBARFBVX1BPV0VSX0hBTkRMRV9EQVRBX0JVU19DTElFTlRfTlJUOiBjb3JlIG5vbi1y ZWFsLXRpbWUgYnVzIGNsaWVudAotICogQERQVV9QT1dFUl9IQU5ETEVfREFUQV9CVVNfQ0xJRU5U X01BWDogbWF4aW11bSBudW1iZXIgb2YgYnVzIGNsaWVudCB0eXBlCi0gKi8KLWVudW0gZHB1X3Bv d2VyX2hhbmRsZV9kYXRhX2J1c19jbGllbnQgewotCURQVV9QT1dFUl9IQU5ETEVfREFUQV9CVVNf Q0xJRU5UX1JULAotCURQVV9QT1dFUl9IQU5ETEVfREFUQV9CVVNfQ0xJRU5UX05SVCwKLQlEUFVf UE9XRVJfSEFORExFX0RBVEFfQlVTX0NMSUVOVF9NQVgKLX07Ci0KLS8qKgotICogZW51bSBEUFVf UE9XRVJfSEFORExFX0RCVVNfSUQgLSBkYXRhIGJ1cyBpZGVudGlmaWVyCi0gKiBARFBVX1BPV0VS X0hBTkRMRV9EQlVTX0lEX01OT0M6IERQVS9NTk9DIGRhdGEgYnVzCi0gKiBARFBVX1BPV0VSX0hB TkRMRV9EQlVTX0lEX0xMQ0M6IE1OT0MvTExDQyBkYXRhIGJ1cwotICogQERQVV9QT1dFUl9IQU5E TEVfREJVU19JRF9FQkk6IExMQ0MvRUJJIGRhdGEgYnVzCi0gKi8KLWVudW0gRFBVX1BPV0VSX0hB TkRMRV9EQlVTX0lEIHsKLQlEUFVfUE9XRVJfSEFORExFX0RCVVNfSURfTU5PQywKLQlEUFVfUE9X RVJfSEFORExFX0RCVVNfSURfTExDQywKLQlEUFVfUE9XRVJfSEFORExFX0RCVVNfSURfRUJJLAot CURQVV9QT1dFUl9IQU5ETEVfREJVU19JRF9NQVgsCi19OwotCi0vKioKLSAqIHN0cnVjdCBkcHVf cG93ZXJfY2xpZW50OiBzdG9yZXMgdGhlIHBvd2VyIGNsaWVudCBmb3IgZHB1IGRyaXZlcgotICog QG5hbWU6CW5hbWUgb2YgdGhlIGNsaWVudAotICogQHVzZWNhc2VfbmR4OiBjdXJyZW50IHJlZ3Mg YnVzIHZvdGUgdHlwZQotICogQHJlZmNvdW50OgljdXJyZW50IHJlZmNvdW50IGlmIG11bHRpcGxl IG1vZHVsZXMgYXJlIHVzaW5nIHNhbWUKLSAqICAgICAgICAgICAgICBzYW1lIGNsaWVudCBmb3Ig ZW5hYmxlL2Rpc2FibGUuIFBvd2VyIG1vZHVsZSB3aWxsCi0gKiAgICAgICAgICAgICAgYWdncmVn YXRlIHRoZSByZWZjb3VudCBhbmQgdm90ZSBhY2NvcmRpbmdseSBmb3IgdGhpcwotICogICAgICAg ICAgICAgIGNsaWVudC4KLSAqIEBpZDoJCWFzc2lnbmVkIGR1cmluZyBjcmVhdGUuIGhlbHBzIGZv ciBkZWJ1Z2dpbmcuCi0gKiBAbGlzdDoJbGlzdCB0byBhdHRhY2ggcG93ZXIgaGFuZGxlIG1hc3Rl ciBsaXN0Ci0gKiBAYWI6ICAgICAgICAgYXJiaXRyYXRlZCBiYW5kd2lkdGggZm9yIGVhY2ggYnVz IGNsaWVudAotICogQGliOiAgICAgICAgIGluc3RhbnRhbmVvdXMgYmFuZHdpZHRoIGZvciBlYWNo IGJ1cyBjbGllbnQKLSAqIEBhY3RpdmU6CWluaWRjYXRlcyB0aGUgc3RhdGUgb2YgZHB1IHBvd2Vy IGhhbmRsZQotICovCi1zdHJ1Y3QgZHB1X3Bvd2VyX2NsaWVudCB7Ci0JY2hhciBuYW1lW01BWF9D TElFTlRfTkFNRV9MRU5dOwotCXNob3J0IHVzZWNhc2VfbmR4OwotCXNob3J0IHJlZmNvdW50Owot CXUzMiBpZDsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci0JdTY0IGFiW0RQVV9QT1dFUl9IQU5E TEVfREFUQV9CVVNfQ0xJRU5UX01BWF07Ci0JdTY0IGliW0RQVV9QT1dFUl9IQU5ETEVfREFUQV9C VVNfQ0xJRU5UX01BWF07Ci0JYm9vbCBhY3RpdmU7Ci19OwotCi0vKioKLSAqIHN0cnVjdCBkcHVf cG93ZXJfZGF0YV9oYW5kbGU6IHBvd2VyIGhhbmRsZSBzdHJ1Y3QgZm9yIGRhdGEgYnVzCi0gKiBA ZGF0YV9idXNfc2NhbGVfdGFibGU6IHBvaW50ZXIgdG8gYnVzIHNjYWxpbmcgdGFibGUKLSAqIEBk YXRhX2J1c19oZGw6IGN1cnJlbnQgZGF0YSBidXMgaGFuZGxlCi0gKiBAYXhpX3BvcnRfY250OiBu dW1iZXIgb2YgcnQgYXhpIHBvcnRzCi0gKiBAbnJ0X2F4aV9wb3J0X2NudDogbnVtYmVyIG9mIG5y dCBheGkgcG9ydHMKLSAqIEBidXNfY2hhbm5lbHM6IG51bWJlciBvZiBtZW1vcnkgYnVzIGNoYW5u ZWxzCi0gKiBAY3Vycl9id191Y19pZHg6IGN1cnJlbnQgdXNlIGNhc2UgaW5kZXggb2YgZGF0YSBi dXMKLSAqIEBhb19id191Y19pZHg6IGFjdGl2ZSBvbmx5IHVzZSBjYXNlIGluZGV4IG9mIGRhdGEg YnVzCi0gKiBAYWJfcnQ6IHJlYWx0aW1lIGFiIHF1b3RhCi0gKiBAaWJfcnQ6IHJlYWx0aW1lIGli IHF1b3RhCi0gKiBAYWJfbnJ0OiBub24tcmVhbHRpbWUgYWIgcXVvdGEKLSAqIEBpYl9ucnQ6IG5v bi1yZWFsdGltZSBpYiBxdW90YQotICogQGVuYWJsZTogdHJ1ZSBpZiBidXMgaXMgZW5hYmxlZAot ICovCi1zdHJ1Y3QgZHB1X3Bvd2VyX2RhdGFfYnVzX2hhbmRsZSB7Ci0Jc3RydWN0IG1zbV9idXNf c2NhbGVfcGRhdGEgKmRhdGFfYnVzX3NjYWxlX3RhYmxlOwotCXUzMiBkYXRhX2J1c19oZGw7Ci0J dTMyIGF4aV9wb3J0X2NudDsKLQl1MzIgbnJ0X2F4aV9wb3J0X2NudDsKLQl1MzIgYnVzX2NoYW5u ZWxzOwotCXUzMiBjdXJyX2J3X3VjX2lkeDsKLQl1MzIgYW9fYndfdWNfaWR4OwotCXU2NCBhYl9y dDsKLQl1NjQgaWJfcnQ7Ci0JdTY0IGFiX25ydDsKLQl1NjQgaWJfbnJ0OwotCWJvb2wgZW5hYmxl OwotfTsKLQotLyoKLSAqIHN0cnVjdCBkcHVfcG93ZXJfZXZlbnQgLSBsb2NhbCBldmVudCByZWdp c3RyYXRpb24gc3RydWN0dXJlCi0gKiBAY2xpZW50X25hbWU6IG5hbWUgb2YgdGhlIGNsaWVudCBy ZWdpc3RlcmluZwotICogQGNiX2ZuYzogcG9pbnRlciB0byBkZXNpcmVkIGNhbGxiYWNrIGZ1bmN0 aW9uCi0gKiBAdXNyOiB1c2VyIHBvaW50ZXIgdG8gcGFzcyB0byBjYWxsYmFjayBldmVudCB0cmln Z2VyCi0gKiBAZXZlbnQ6IHJlZmVyIHRvIERQVV9QT1dFUl9IQU5ETEVfRVZFTlRfKgotICogQGxp c3Q6IGxpc3QgdG8gYXR0YWNoIGV2ZW50IG1hc3RlciBsaXN0Ci0gKiBAYWN0aXZlOiBpbmRpY2F0 ZXMgdGhlIHN0YXRlIG9mIGRwdSBwb3dlciBoYW5kbGUKLSAqLwotc3RydWN0IGRwdV9wb3dlcl9l dmVudCB7Ci0JY2hhciBjbGllbnRfbmFtZVtNQVhfQ0xJRU5UX05BTUVfTEVOXTsKLQl2b2lkICgq Y2JfZm5jKSh1MzIgZXZlbnRfdHlwZSwgdm9pZCAqdXNyKTsKLQl2b2lkICp1c3I7Ci0JdTMyIGV2 ZW50X3R5cGU7Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotCWJvb2wgYWN0aXZlOwotfTsKLQot LyoqCi0gKiBzdHJ1Y3QgZHB1X3Bvd2VyX2hhbmRsZTogcG93ZXIgaGFuZGxlIG1haW4gc3RydWN0 Ci0gKiBAY2xpZW50X2NsaXN0OiBtYXN0ZXIgbGlzdCB0byBzdG9yZSBhbGwgY2xpZW50cwotICog QHBoYW5kbGVfbG9jazogbG9jayB0byBzeW5jaHJvbml6ZSB0aGUgZW5hYmxlL2Rpc2FibGUKLSAq IEBkZXY6IHBvaW50ZXIgdG8gZGV2aWNlIHN0cnVjdHVyZQotICogQHVzZWNhc2VfbmR4OiBjdXJy ZW50IHVzZWNhc2UgaW5kZXgKLSAqIEByZWdfYnVzX2hkbDogY3VycmVudCByZWdpc3RlciBidXMg aGFuZGxlCi0gKiBAZGF0YV9idXNfaGFuZGxlOiBjb250ZXh0IHN0cnVjdHVyZSBmb3IgZGF0YSBi dXMgY29udHJvbAotICogQGV2ZW50X2xpc3Q6IGN1cnJlbnQgcG93ZXIgaGFuZGxlIGV2ZW50IGxp c3QKLSAqLwotc3RydWN0IGRwdV9wb3dlcl9oYW5kbGUgewotCXN0cnVjdCBsaXN0X2hlYWQgcG93 ZXJfY2xpZW50X2NsaXN0OwotCXN0cnVjdCBtdXRleCBwaGFuZGxlX2xvY2s7Ci0Jc3RydWN0IGRl dmljZSAqZGV2OwotCXUzMiBjdXJyZW50X3VzZWNhc2VfbmR4OwotCXUzMiByZWdfYnVzX2hkbDsK LQlzdHJ1Y3QgZHB1X3Bvd2VyX2RhdGFfYnVzX2hhbmRsZSBkYXRhX2J1c19oYW5kbGUKLQkJW0RQ VV9QT1dFUl9IQU5ETEVfREJVU19JRF9NQVhdOwotCXN0cnVjdCBsaXN0X2hlYWQgZXZlbnRfbGlz dDsKLX07Ci0KLS8qKgotICogZHB1X3Bvd2VyX3Jlc291cmNlX2luaXQoKSAtIGluaXRpYWxpemVz IHRoZSBkcHUgcG93ZXIgaGFuZGxlCi0gKiBAcGRldjogICBwbGF0Zm9ybSBkZXZpY2UgdG8gc2Vh cmNoIHRoZSBwb3dlciByZXNvdXJjZXMKLSAqIEBwZGF0YTogIHBvd2VyIGhhbmRsZSB0byBzdG9y ZSB0aGUgcG93ZXIgcmVzb3VyY2VzCi0gKgotICogUmV0dXJuOiBlcnJvciBjb2RlLgotICovCi1p bnQgZHB1X3Bvd2VyX3Jlc291cmNlX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwK LQlzdHJ1Y3QgZHB1X3Bvd2VyX2hhbmRsZSAqcGRhdGEpOwotCi0vKioKLSAqIGRwdV9wb3dlcl9y ZXNvdXJjZV9kZWluaXQoKSAtIHJlbGVhc2UgdGhlIGRwdSBwb3dlciBoYW5kbGUKLSAqIEBwZGV2 OiAgIHBsYXRmb3JtIGRldmljZSBmb3IgcG93ZXIgcmVzb3VyY2VzCi0gKiBAcGRhdGE6ICBwb3dl ciBoYW5kbGUgY29udGFpbmluZyB0aGUgcmVzb3VyY2VzCi0gKgotICogUmV0dXJuOiBlcnJvciBj b2RlLgotICovCi12b2lkIGRwdV9wb3dlcl9yZXNvdXJjZV9kZWluaXQoc3RydWN0IHBsYXRmb3Jt X2RldmljZSAqcGRldiwKLQlzdHJ1Y3QgZHB1X3Bvd2VyX2hhbmRsZSAqcGRhdGEpOwotCi0vKioK LSAqIGRwdV9wb3dlcl9jbGllbnRfY3JlYXRlKCkgLSBjcmVhdGUgdGhlIGNsaWVudCBvbiBwb3dl ciBoYW5kbGUKLSAqIEBwZGF0YTogIHBvd2VyIGhhbmRsZSBjb250YWluaW5nIHRoZSByZXNvdXJj ZXMKLSAqIEBjbGllbnRfbmFtZTogbmV3IGNsaWVudCBuYW1lIGZvciByZWdpc3RyYXRpb24KLSAq Ci0gKiBSZXR1cm46IGVycm9yIGNvZGUuCi0gKi8KLXN0cnVjdCBkcHVfcG93ZXJfY2xpZW50ICpk cHVfcG93ZXJfY2xpZW50X2NyZWF0ZShzdHJ1Y3QgZHB1X3Bvd2VyX2hhbmRsZSAqcGRhdGEsCi0J Y2hhciAqY2xpZW50X25hbWUpOwotCi0vKioKLSAqIGRwdV9wb3dlcl9jbGllbnRfZGVzdHJveSgp IC0gZGVzdHJveSB0aGUgY2xpZW50IG9uIHBvd2VyIGhhbmRsZQotICogQHBkYXRhOiAgcG93ZXIg aGFuZGxlIGNvbnRhaW5pbmcgdGhlIHJlc291cmNlcwotICogQGNsaWVudF9uYW1lOiBuZXcgY2xp ZW50IG5hbWUgZm9yIHJlZ2lzdHJhdGlvbgotICoKLSAqIFJldHVybjogbm9uZQotICovCi12b2lk IGRwdV9wb3dlcl9jbGllbnRfZGVzdHJveShzdHJ1Y3QgZHB1X3Bvd2VyX2hhbmRsZSAqcGhhbmRs ZSwKLQlzdHJ1Y3QgZHB1X3Bvd2VyX2NsaWVudCAqY2xpZW50KTsKLQotLyoqCi0gKiBkcHVfcG93 ZXJfcmVzb3VyY2VfZW5hYmxlKCkgLSBlbmFibGUvZGlzYWJsZSB0aGUgcG93ZXIgcmVzb3VyY2Vz Ci0gKiBAcGRhdGE6ICBwb3dlciBoYW5kbGUgY29udGFpbmluZyB0aGUgcmVzb3VyY2VzCi0gKiBA Y2xpZW50OiBjbGllbnQgaW5mb3JtYXRpb24gdG8gZW5hYmxlL2Rpc2FibGUgaXRzIHZvdGUKLSAq IEBlbmFibGU6IGJvb2xlYW4gcmVxdWVzdCBmb3IgZW5hYmxlL2Rpc2FibGUKLSAqCi0gKiBSZXR1 cm46IGVycm9yIGNvZGUuCi0gKi8KLWludCBkcHVfcG93ZXJfcmVzb3VyY2VfZW5hYmxlKHN0cnVj dCBkcHVfcG93ZXJfaGFuZGxlICpwZGF0YSwKLQlzdHJ1Y3QgZHB1X3Bvd2VyX2NsaWVudCAqcGNs aWVudCwgYm9vbCBlbmFibGUpOwotCi0vKioKLSAqIGRwdV9wb3dlcl9kYXRhX2J1c19zdGF0ZV91 cGRhdGUoKSAtIHVwZGF0ZSBkYXRhIGJ1cyBzdGF0ZQotICogQHBkYXRhOiAgcG93ZXIgaGFuZGxl IGNvbnRhaW5pbmcgdGhlIHJlc291cmNlcwotICogQGVuYWJsZTogdGFrZSBlbmFibGUgdnMgZGlz YWJsZSBwYXRoCi0gKgotICogUmV0dXJuOiBlcnJvciBjb2RlLgotICovCi1pbnQgZHB1X3Bvd2Vy X2RhdGFfYnVzX3N0YXRlX3VwZGF0ZShzdHJ1Y3QgZHB1X3Bvd2VyX2hhbmRsZSAqcGhhbmRsZSwK LQkJCQkJCQlib29sIGVuYWJsZSk7Ci0KLS8qKgotICogZHB1X3Bvd2VyX2RhdGFfYnVzX3NldF9x dW90YSgpIC0gc2V0IGRhdGEgYnVzIHF1b3RhIGZvciBwb3dlciBjbGllbnQKLSAqIEBwaGFuZGxl OiAgcG93ZXIgaGFuZGxlIGNvbnRhaW5pbmcgdGhlIHJlc291cmNlcwotICogQGNsaWVudDogY2xp ZW50IGluZm9ybWF0aW9uIHRvIHNldCBxdW90YQotICogQGJ1c19jbGllbnQ6IHJlYWwtdGltZSBv ciBub24tcmVhbC10aW1lIGJ1cyBjbGllbnQKLSAqIEBidXNfaWQ6IGlkZW50aWZpZXIgb2YgZGF0 YSBidXMsIHNlZSBEUFVfUE9XRVJfSEFORExFX0RCVVNfSUQKLSAqIEBhYl9xdW90YTogYXJiaXRy YXRlZCBidXMgYmFuZHdpZHRoCi0gKiBAaWJfcXVvdGE6IGluc3RhbnRhbmVvdXMgYnVzIGJhbmR3 aWR0aAotICoKLSAqIFJldHVybjogemVybyBpZiBzdWNjZXNzLCBvciBlcnJvciBjb2RlIG90aGVy d2lzZQotICovCi1pbnQgZHB1X3Bvd2VyX2RhdGFfYnVzX3NldF9xdW90YShzdHJ1Y3QgZHB1X3Bv d2VyX2hhbmRsZSAqcGhhbmRsZSwKLQkJc3RydWN0IGRwdV9wb3dlcl9jbGllbnQgKnBjbGllbnQs Ci0JCWludCBidXNfY2xpZW50LCB1MzIgYnVzX2lkLAotCQl1NjQgYWJfcXVvdGEsIHU2NCBpYl9x dW90YSk7Ci0KLS8qKgotICogZHB1X3Bvd2VyX2RhdGFfYnVzX2JhbmR3aWR0aF9jdHJsKCkgLSBj b250cm9sIGRhdGEgYnVzIGJhbmR3aWR0aCBlbmFibGUKLSAqIEBwaGFuZGxlOiAgcG93ZXIgaGFu ZGxlIGNvbnRhaW5pbmcgdGhlIHJlc291cmNlcwotICogQGNsaWVudDogY2xpZW50IGluZm9ybWF0 aW9uIHRvIGJhbmR3aWR0aCBjb250cm9sCi0gKiBAZW5hYmxlOiB0cnVlIHRvIGVuYWJsZSBiYW5k d2lkdGggZm9yIGRhdGEgYmFzZQotICoKLSAqIFJldHVybjogbm9uZQotICovCi12b2lkIGRwdV9w b3dlcl9kYXRhX2J1c19iYW5kd2lkdGhfY3RybChzdHJ1Y3QgZHB1X3Bvd2VyX2hhbmRsZSAqcGhh bmRsZSwKLQkJc3RydWN0IGRwdV9wb3dlcl9jbGllbnQgKnBjbGllbnQsIGludCBlbmFibGUpOwot Ci0vKioKLSAqIGRwdV9wb3dlcl9oYW5kbGVfcmVnaXN0ZXJfZXZlbnQgLSByZWdpc3RlciBhIGNh bGxiYWNrIGZ1bmN0aW9uIGZvciBhbiBldmVudC4KLSAqCUNsaWVudHMgY2FuIHJlZ2lzdGVyIGZv ciBtdWx0aXBsZSBldmVudHMgd2l0aCBhIHNpbmdsZSByZWdpc3Rlci4KLSAqCUFueSBibG9jayB3 aXRoIGFjY2VzcyB0byBwaGFuZGxlIGNhbiByZWdpc3RlciBmb3IgdGhlIGV2ZW50Ci0gKglub3Rp ZmljYXRpb24uCi0gKiBAcGhhbmRsZToJcG93ZXIgaGFuZGxlIGNvbnRhaW5pbmcgdGhlIHJlc291 cmNlcwotICogQGV2ZW50X3R5cGU6CWV2ZW50IHR5cGUgdG8gcmVnaXN0ZXI7IHJlZmVyIERQVV9Q T1dFUl9IQU5ETEVfRVZFTlRfKgotICogQGNiX2ZuYzoJcG9pbnRlciB0byBkZXNpcmVkIGNhbGxi YWNrIGZ1bmN0aW9uCi0gKiBAdXNyOgl1c2VyIHBvaW50ZXIgdG8gcGFzcyB0byBjYWxsYmFjayBv biBldmVudCB0cmlnZ2VyCi0gKgotICogUmV0dXJuOglldmVudCBwb2ludGVyIGlmIHN1Y2Nlc3Ms IG9yIGVycm9yIGNvZGUgb3RoZXJ3aXNlCi0gKi8KLXN0cnVjdCBkcHVfcG93ZXJfZXZlbnQgKmRw dV9wb3dlcl9oYW5kbGVfcmVnaXN0ZXJfZXZlbnQoCi0JCXN0cnVjdCBkcHVfcG93ZXJfaGFuZGxl ICpwaGFuZGxlLAotCQl1MzIgZXZlbnRfdHlwZSwgdm9pZCAoKmNiX2ZuYykodTMyIGV2ZW50X3R5 cGUsIHZvaWQgKnVzciksCi0JCXZvaWQgKnVzciwgY2hhciAqY2xpZW50X25hbWUpOwotLyoqCi0g KiBkcHVfcG93ZXJfaGFuZGxlX3VucmVnaXN0ZXJfZXZlbnQgLSB1bnJlZ2lzdGVyIGNhbGxiYWNr IGZvciBldmVudChzKQotICogQHBoYW5kbGU6CXBvd2VyIGhhbmRsZSBjb250YWluaW5nIHRoZSBy ZXNvdXJjZXMKLSAqIEBldmVudDoJZXZlbnQgcG9pbnRlciByZXR1cm5lZCBhZnRlciBwb3dlciBo YW5kbGUgcmVnaXN0ZXIKLSAqLwotdm9pZCBkcHVfcG93ZXJfaGFuZGxlX3VucmVnaXN0ZXJfZXZl bnQoc3RydWN0IGRwdV9wb3dlcl9oYW5kbGUgKnBoYW5kbGUsCi0JCXN0cnVjdCBkcHVfcG93ZXJf ZXZlbnQgKmV2ZW50KTsKLQotLyoqCi0gKiBkcHVfcG93ZXJfaGFuZGxlX2dldF9kYnVzX25hbWUg LSBnZXQgbmFtZSBvZiBnaXZlbiBkYXRhIGJ1cyBpZGVudGlmaWVyCi0gKiBAYnVzX2lkOglkYXRh IGJ1cyBpZGVudGlmaWVyCi0gKiBSZXR1cm46CVBvaW50ZXIgdG8gbmFtZSBzdHJpbmcgaWYgc3Vj Y2VzczsgTlVMTCBvdGhlcndpc2UKLSAqLwotY29uc3QgY2hhciAqZHB1X3Bvd2VyX2hhbmRsZV9n ZXRfZGJ1c19uYW1lKHUzMiBidXNfaWQpOwotCi0jZW5kaWYgLyogX0RQVV9QT1dFUl9IQU5ETEVf SF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2Rydi5jIGIvZHJpdmVy cy9ncHUvZHJtL21zbS9tc21fZHJ2LmMKaW5kZXggNWMyNjdjZC4uNjBiNjkxOSAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21z bS9tc21fZHJ2LmMKQEAgLTM0MCw3ICszNDAsNiBAQCBzdGF0aWMgaW50IG1zbV9kcm1fdW5pbml0 KHN0cnVjdCBkZXZpY2UgKmRldikKIAljb21wb25lbnRfdW5iaW5kX2FsbChkZXYsIGRkZXYpOwog CiAjaWZkZWYgQ09ORklHX0RSTV9NU01fRFBVCi0JZHB1X3Bvd2VyX3Jlc291cmNlX2RlaW5pdChw ZGV2LCAmcHJpdi0+cGhhbmRsZSk7CiAJZHB1X2RiZ19kZXN0cm95KCk7CiAjZW5kaWYKIApAQCAt NTE5LDEyICs1MTgsNiBAQCBzdGF0aWMgaW50IG1zbV9kcm1faW5pdChzdHJ1Y3QgZGV2aWNlICpk ZXYsIHN0cnVjdCBkcm1fZHJpdmVyICpkcnYpCiAJZHJtX21vZGVfY29uZmlnX2luaXQoZGRldik7 CiAKICNpZmRlZiBDT05GSUdfRFJNX01TTV9EUFUKLQlyZXQgPSBkcHVfcG93ZXJfcmVzb3VyY2Vf aW5pdChwZGV2LCAmcHJpdi0+cGhhbmRsZSk7Ci0JaWYgKHJldCkgewotCQlwcl9lcnIoImRwdSBw b3dlciByZXNvdXJjZSBpbml0IGZhaWxlZFxuIik7Ci0JCWdvdG8gcG93ZXJfaW5pdF9mYWlsOwot CX0KLQogCXJldCA9IGRwdV9kYmdfaW5pdCgmcGRldi0+ZGV2KTsKIAlpZiAocmV0KSB7CiAJCWRl dl9lcnIoZGV2LCAiZmFpbGVkIHRvIGluaXQgZHB1IGRiZzogJWRcbiIsIHJldCk7CkBAIC03MzMs OCArNzI2LDYgQEAgc3RhdGljIGludCBtc21fZHJtX2luaXQoc3RydWN0IGRldmljZSAqZGV2LCBz dHJ1Y3QgZHJtX2RyaXZlciAqZHJ2KQogI2lmZGVmIENPTkZJR19EUk1fTVNNX0RQVQogCWRwdV9k YmdfZGVzdHJveSgpOwogZGJnX2luaXRfZmFpbDoKLQlkcHVfcG93ZXJfcmVzb3VyY2VfZGVpbml0 KHBkZXYsICZwcml2LT5waGFuZGxlKTsKLXBvd2VyX2luaXRfZmFpbDoKICNlbmRpZgogCWlmICht ZHNzICYmIG1kc3MtPmZ1bmNzKQogCQltZHNzLT5mdW5jcy0+ZGVzdHJveShkZGV2KTsKZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL21z bS9tc21fZHJ2LmgKaW5kZXggZjlhZTk2Zi4uMjdhNzNhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9n cHUvZHJtL21zbS9tc21fZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZHJ2LmgK QEAgLTQ2LDggKzQ2LDYgQEAKICNpbmNsdWRlIDxkcm0vbXNtX2RybS5oPgogI2luY2x1ZGUgPGRy bS9kcm1fZ2VtLmg+CiAKLSNpbmNsdWRlICJkcHVfcG93ZXJfaGFuZGxlLmgiCi0KICNkZWZpbmUg R0VUX01BSk9SX1JFVihyZXYpCQkoKHJldikgPj4gMjgpCiAjZGVmaW5lIEdFVF9NSU5PUl9SRVYo cmV2KQkJKCgocmV2KSA+PiAxNikgJiAweEZGRikKICNkZWZpbmUgR0VUX1NURVBfUkVWKHJldikJ CSgocmV2KSAmIDB4RkZGRikKQEAgLTM3NSw4ICszNzMsNiBAQCBzdHJ1Y3QgbXNtX2RybV9wcml2 YXRlIHsKIAogCXN0cnVjdCBtc21fa21zICprbXM7CiAKLQlzdHJ1Y3QgZHB1X3Bvd2VyX2hhbmRs ZSBwaGFuZGxlOwotCiAJLyogc3Vib3JkaW5hdGUgZGV2aWNlcywgaWYgcHJlc2VudDogKi8KIAlz dHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpncHVfcGRldjsKIAotLSAKVGhlIFF1YWxjb21tIElubm92 YXRpb24gQ2VudGVyLCBJbmMuIGlzIGEgbWVtYmVyIG9mIHRoZSBDb2RlIEF1cm9yYSBGb3J1bSwK YSBMaW51eCBGb3VuZGF0aW9uIENvbGxhYm9yYXRpdmUgUHJvamVjdAoKX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRnJlZWRyZW5vIG1haWxpbmcgbGlzdApG cmVlZHJlbm9AbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Au b3JnL21haWxtYW4vbGlzdGluZm8vZnJlZWRyZW5vCg==