From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jeykumar Sankaran Subject: [DPU PATCH v2 5/6] drm/msm: hook up DPU with upstream DSI Date: Thu, 19 Apr 2018 16:52:03 -0700 Message-ID: <1524181924-9123-6-git-send-email-jsanka@codeaurora.org> References: <1524181924-9123-1-git-send-email-jsanka@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1524181924-9123-1-git-send-email-jsanka-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: hoegsberg-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org, Jeykumar Sankaran , seanpaul-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org, robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org List-Id: linux-arm-msm@vger.kernel.org U3dpdGNoIERQVSBmcm9tIGRzaS1zdGFnaW5nIHRvIHVwc3RyZWFtIGRzaSBkcml2ZXIuIFRvIG1h a2UKdGhlIHN3aXRjaCBhdG9taWMsIHRoaXMgY2hhbmdlIGluY2x1ZGVzOgotIHJlbW92ZSBkcHUg Y29ubmVjdG9yIGxheWVycwotIGNsZWFuIHVwIGRwdSBjb25uZWN0b3IgZGVwZW5kZW5jaWVzIGlu IGVuY29kZXIvY3J0YwotIGNvbXBpbGUgb3V0IHdyaXRlYmFjayBhbmQgZGlzcGxheSBwb3J0IGRy aXZlcnMKLSBjb21waWxlIG91dCBkc2ktc3RhZ2luZyBkcml2ZXIgKHNlcGFyYXRlIHBhdGNoIHN1 Ym1pdHRlZCB0bwogIHJlbW92ZSB0aGUgZHJpdmVyKQotIGFkYXB0IHVwc3RyZWFtIGRldmljZSBo aWVyYXJjaHkKCmNoYW5nZXMgaW4gdjI6CgktIHJlbW92ZSBmaWxlcyBub3QgYXBwbGljYWJsZSB1 cHN0cmVhbSAoU2VhbiBQYXVsKQoJLSByZW1vdmUgY29tcGlsZWQgb3V0IG5vbi1kc2kgZGlzcGxh eSBpbml0IChTZWFuIFBhdWwpCgktIHNwbGl0IHVucmVsYXRlZCBjaGFuZ2VzIGludG8gc2VwYXJh dGUgcGF0Y2ggc2V0IChTZWFuIFBhdWwpCgpTaWduZWQtb2ZmLWJ5OiBKZXlrdW1hciBTYW5rYXJh biA8anNhbmthQGNvZGVhdXJvcmEub3JnPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9tc20vTWFrZWZp bGUgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMSAtCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rp c3AvZHB1MS9kcHVfY29ubmVjdG9yLmMgICAgICB8IDExODQgLS0tLS0tLS0tLS0tLS0tLS0tLS0K IGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jb25uZWN0b3IuaCAgICAgIHwgIDU1 NSAtLS0tLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmMgICAg ICAgICAgIHwgICAgOSAtCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rl ci5jICAgICAgICB8ICAxNzkgKy0tCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVf ZW5jb2Rlci5oICAgICAgICB8ICAgMTAgKy0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUx L2RwdV9lbmNvZGVyX3BoeXMuaCAgIHwgICAgOCArLQogLi4uL2dwdS9kcm0vbXNtL2Rpc3AvZHB1 MS9kcHVfZW5jb2Rlcl9waHlzX3ZpZC5jICAgfCAgICA2ICstCiBkcml2ZXJzL2dwdS9kcm0vbXNt L2Rpc3AvZHB1MS9kcHVfa21zLmMgICAgICAgICAgICB8ICA0ODkgKy0tLS0tLS0KIGRyaXZlcnMv Z3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9rbXMuaCAgICAgICAgICAgIHwgICAgNiAtCiBkcml2 ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfcm0uYyAgICAgICAgICAgICB8ICAgNTQgKy0K IGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9ybS5oICAgICAgICAgICAgIHwgICAx MSArCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwdV9kYmcuYyAgICAgICAgICAgICAgICAgICAgICB8 ICAgIDMgLQogZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZHJ2LmMgICAgICAgICAgICAgICAgICAg ICAgfCAgIDQ3ICstCiBkcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9kcnYuaCAgICAgICAgICAgICAg ICAgICAgICB8ICAgMzkgLQogMTUgZmlsZXMgY2hhbmdlZCwgMTU4IGluc2VydGlvbnMoKyksIDI0 NDMgZGVsZXRpb25zKC0pCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9k aXNwL2RwdTEvZHB1X2Nvbm5lY3Rvci5jCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUv ZHJtL21zbS9kaXNwL2RwdTEvZHB1X2Nvbm5lY3Rvci5oCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL21zbS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9tc20vTWFrZWZpbGUKaW5kZXgg YjIzYTAwMS4uYThkOGFkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9NYWtlZmls ZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL01ha2VmaWxlCkBAIC00OCw3ICs0OCw2IEBAIG1z bS15IDo9IFwKIAlkaXNwL21kcDUvbWRwNV9wbGFuZS5vIFwKIAlkaXNwL21kcDUvbWRwNV9zbXAu byBcCiAJZGlzcC9kcHUxL2RwdV9jb2xvcl9wcm9jZXNzaW5nLm8gXAotCWRpc3AvZHB1MS9kcHVf Y29ubmVjdG9yLm8gXAogCWRpc3AvZHB1MS9kcHVfY29yZV9pcnEubyBcCiAJZGlzcC9kcHUxL2Rw dV9jb3JlX3BlcmYubyBcCiAJZGlzcC9kcHUxL2RwdV9jcnRjLm8gXApkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2Nvbm5lY3Rvci5jIGIvZHJpdmVycy9ncHUv ZHJtL21zbS9kaXNwL2RwdTEvZHB1X2Nvbm5lY3Rvci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCBkYzA5NzhkLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9k cHUxL2RwdV9jb25uZWN0b3IuYworKysgL2Rldi9udWxsCkBAIC0xLDExODQgKzAsMCBAQAotLyog Q29weXJpZ2h0IChjKSAyMDE2LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRz IHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKLSAqIG9ubHkgdmVy c2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoK LSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg YmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl IGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKi8KLQotI2RlZmluZSBwcl9mbXQoZm10KQkiW2RybTol czolZF0gIiBmbXQsIF9fZnVuY19fLCBfX0xJTkVfXwotI2luY2x1ZGUgIm1zbV9kcnYuaCIKLSNp bmNsdWRlICJkcHVfZGJnLmgiCi0KLSNpbmNsdWRlICJkcHVfa21zLmgiCi0jaW5jbHVkZSAiZHB1 X2Nvbm5lY3Rvci5oIgotI2lmZGVmIENPTkZJR19EUk1fTVNNX0RTSV9TVEFHSU5HCi0jaW5jbHVk ZSA8bGludXgvYmFja2xpZ2h0Lmg+Ci0jaW5jbHVkZSAiZHNpX2RybS5oIgotI2luY2x1ZGUgImRz aV9kaXNwbGF5LmgiCi0jZW5kaWYKLQotI2RlZmluZSBCTF9OT0RFX05BTUVfU0laRSAzMgotCi0j ZGVmaW5lIERQVV9ERUJVR19DT05OKGMsIGZtdCwgLi4uKSBEUFVfREVCVUcoImNvbm4lZCAiIGZt dCxcCi0JCShjKSA/IChjKS0+YmFzZS5iYXNlLmlkIDogLTEsICMjX19WQV9BUkdTX18pCi0KLSNk ZWZpbmUgRFBVX0VSUk9SX0NPTk4oYywgZm10LCAuLi4pIERQVV9FUlJPUigiY29ubiVkICIgZm10 LFwKLQkJKGMpID8gKGMpLT5iYXNlLmJhc2UuaWQgOiAtMSwgIyNfX1ZBX0FSR1NfXykKLXN0YXRp YyB1MzIgZGl0aGVyX21hdHJpeFtESVRIRVJfTUFUUklYX1NaXSA9IHsKLQkxNSwgNywgMTMsIDUs IDMsIDExLCAxLCA5LCAxMiwgNCwgMTQsIDYsIDAsIDgsIDIsIDEwCi19OwotCi1zdGF0aWMgY29u c3Qgc3RydWN0IGRybV9wcm9wX2VudW1fbGlzdCBlX3RvcG9sb2d5X25hbWVbXSA9IHsKLQl7RFBV X1JNX1RPUE9MT0dZX05PTkUsCSJkcHVfbm9uZSJ9LAotCXtEUFVfUk1fVE9QT0xPR1lfU0lOR0xF UElQRSwJImRwdV9zaW5nbGVwaXBlIn0sCi0Je0RQVV9STV9UT1BPTE9HWV9EVUFMUElQRSwJImRw dV9kdWFscGlwZSJ9LAotCXtEUFVfUk1fVE9QT0xPR1lfRFVBTFBJUEVfM0RNRVJHRSwJImRwdV9k dWFscGlwZW1lcmdlIn0sCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGRybV9wcm9wX2VudW1f bGlzdCBlX3RvcG9sb2d5X2NvbnRyb2xbXSA9IHsKLQl7RFBVX1JNX1RPUENUTF9SRVNFUlZFX0xP Q0ssCSJyZXNlcnZlX2xvY2sifSwKLQl7RFBVX1JNX1RPUENUTF9SRVNFUlZFX0NMRUFSLAkicmVz ZXJ2ZV9jbGVhciJ9LAotCXtEUFVfUk1fVE9QQ1RMX0RTUFAsCQkiZHNwcCJ9LAotfTsKLXN0YXRp YyBjb25zdCBzdHJ1Y3QgZHJtX3Byb3BfZW51bV9saXN0IGVfcG93ZXJfbW9kZVtdID0gewotCXtE UFVfTU9ERV9EUE1TX09OLAkiT04ifSwKLQl7RFBVX01PREVfRFBNU19MUDEsCSJMUDEifSwKLQl7 RFBVX01PREVfRFBNU19MUDIsCSJMUDIifSwKLQl7RFBVX01PREVfRFBNU19PRkYsCSJPRkYifSwK LX07Ci0KLSNpZmRlZiBDT05GSUdfRFJNX01TTV9EU0lfU1RBR0lORwotc3RhdGljIGludCBkcHVf YmFja2xpZ2h0X2RldmljZV91cGRhdGVfc3RhdHVzKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpi ZCkKLXsKLQlpbnQgYnJpZ2h0bmVzczsKLQlzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXk7Ci0J c3RydWN0IGRwdV9jb25uZWN0b3IgKmNfY29ubjsKLQlpbnQgYmxfbHZsOwotCXN0cnVjdCBkcm1f ZXZlbnQgZXZlbnQ7Ci0KLQlicmlnaHRuZXNzID0gYmQtPnByb3BzLmJyaWdodG5lc3M7Ci0KLQlp ZiAoKGJkLT5wcm9wcy5wb3dlciAhPSBGQl9CTEFOS19VTkJMQU5LKSB8fAotCQkJKGJkLT5wcm9w cy5zdGF0ZSAmIEJMX0NPUkVfRkJCTEFOSykgfHwKLQkJCShiZC0+cHJvcHMuc3RhdGUgJiBCTF9D T1JFX1NVU1BFTkRFRCkpCi0JCWJyaWdodG5lc3MgPSAwOwotCi0JY19jb25uID0gYmxfZ2V0X2Rh dGEoYmQpOwotCWRpc3BsYXkgPSAoc3RydWN0IGRzaV9kaXNwbGF5ICopIGNfY29ubi0+ZGlzcGxh eTsKLQlpZiAoYnJpZ2h0bmVzcyA+IGRpc3BsYXktPnBhbmVsLT5ibF9jb25maWcuYmxfbWF4X2xl dmVsKQotCQlicmlnaHRuZXNzID0gZGlzcGxheS0+cGFuZWwtPmJsX2NvbmZpZy5ibF9tYXhfbGV2 ZWw7Ci0KLQkvKiBtYXAgVUkgYnJpZ2h0bmVzcyBpbnRvIGRyaXZlciBiYWNrbGlnaHQgbGV2ZWwg d2l0aCByb3VuZGluZyAqLwotCWJsX2x2bCA9IG11bHRfZnJhYyhicmlnaHRuZXNzLCBkaXNwbGF5 LT5wYW5lbC0+YmxfY29uZmlnLmJsX21heF9sZXZlbCwKLQkJCWRpc3BsYXktPnBhbmVsLT5ibF9j b25maWcuYnJpZ2h0bmVzc19tYXhfbGV2ZWwpOwotCi0JaWYgKCFibF9sdmwgJiYgYnJpZ2h0bmVz cykKLQkJYmxfbHZsID0gMTsKLQotCWlmIChjX2Nvbm4tPm9wcy5zZXRfYmFja2xpZ2h0KSB7Ci0J CWV2ZW50LnR5cGUgPSBEUk1fRVZFTlRfU1lTX0JBQ0tMSUdIVDsKLQkJZXZlbnQubGVuZ3RoID0g c2l6ZW9mKHUzMik7Ci0JCW1zbV9tb2RlX29iamVjdF9ldmVudF9ub3RpZnkoJmNfY29ubi0+YmFz ZS5iYXNlLAotCQkJCWNfY29ubi0+YmFzZS5kZXYsICZldmVudCwgKHU4ICopJmJyaWdodG5lc3Mp OwotCQljX2Nvbm4tPm9wcy5zZXRfYmFja2xpZ2h0KGNfY29ubi0+ZGlzcGxheSwgYmxfbHZsKTsK LQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBkcHVfYmFja2xpZ2h0X2RldmljZV9n ZXRfYnJpZ2h0bmVzcyhzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQpCi17Ci0JcmV0dXJuIDA7 Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYmFja2xpZ2h0X29wcyBkcHVfYmFja2xpZ2h0X2Rl dmljZV9vcHMgPSB7Ci0JLnVwZGF0ZV9zdGF0dXMgPSBkcHVfYmFja2xpZ2h0X2RldmljZV91cGRh dGVfc3RhdHVzLAotCS5nZXRfYnJpZ2h0bmVzcyA9IGRwdV9iYWNrbGlnaHRfZGV2aWNlX2dldF9i cmlnaHRuZXNzLAotfTsKLQotc3RhdGljIGludCBkcHVfYmFja2xpZ2h0X3NldHVwKHN0cnVjdCBk cHVfY29ubmVjdG9yICpjX2Nvbm4sCi0JCQkJCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCi17Ci0J c3RydWN0IGJhY2tsaWdodF9wcm9wZXJ0aWVzIHByb3BzOwotCXN0cnVjdCBkc2lfZGlzcGxheSAq ZGlzcGxheTsKLQlzdHJ1Y3QgZHNpX2JhY2tsaWdodF9jb25maWcgKmJsX2NvbmZpZzsKLQlzdGF0 aWMgaW50IGRpc3BsYXlfY291bnQ7Ci0JY2hhciBibF9ub2RlX25hbWVbQkxfTk9ERV9OQU1FX1NJ WkVdOwotCi0JaWYgKCFjX2Nvbm4gfHwgIWRldiB8fCAhZGV2LT5kZXYpIHsKLQkJRFBVX0VSUk9S KCJpbnZhbGlkIHBhcmFtXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfSBlbHNlIGlmIChjX2Nv bm4tPmNvbm5lY3Rvcl90eXBlICE9IERSTV9NT0RFX0NPTk5FQ1RPUl9EU0kpIHsKLQkJcmV0dXJu IDA7Ci0JfQotCi0JbWVtc2V0KCZwcm9wcywgMCwgc2l6ZW9mKHByb3BzKSk7Ci0JcHJvcHMudHlw ZSA9IEJBQ0tMSUdIVF9SQVc7Ci0JcHJvcHMucG93ZXIgPSBGQl9CTEFOS19VTkJMQU5LOwotCi0J ZGlzcGxheSA9IChzdHJ1Y3QgZHNpX2Rpc3BsYXkgKikgY19jb25uLT5kaXNwbGF5OwotCWJsX2Nv bmZpZyA9ICZkaXNwbGF5LT5wYW5lbC0+YmxfY29uZmlnOwotCXByb3BzLm1heF9icmlnaHRuZXNz ID0gYmxfY29uZmlnLT5icmlnaHRuZXNzX21heF9sZXZlbDsKLQlwcm9wcy5icmlnaHRuZXNzID0g YmxfY29uZmlnLT5icmlnaHRuZXNzX21heF9sZXZlbDsKLQlzbnByaW50ZihibF9ub2RlX25hbWUs IEJMX05PREVfTkFNRV9TSVpFLCAicGFuZWwldS1iYWNrbGlnaHQiLAotCQkJCQkJCWRpc3BsYXlf Y291bnQpOwotCWNfY29ubi0+YmxfZGV2aWNlID0gYmFja2xpZ2h0X2RldmljZV9yZWdpc3Rlcihi bF9ub2RlX25hbWUsIGRldi0+ZGV2LAotCQkJY19jb25uLCAmZHB1X2JhY2tsaWdodF9kZXZpY2Vf b3BzLCAmcHJvcHMpOwotCWlmIChJU19FUlJfT1JfTlVMTChjX2Nvbm4tPmJsX2RldmljZSkpIHsK LQkJRFBVX0VSUk9SKCJGYWlsZWQgdG8gcmVnaXN0ZXIgYmFja2xpZ2h0OiAlbGRcbiIsCi0JCQkJ ICAgIFBUUl9FUlIoY19jb25uLT5ibF9kZXZpY2UpKTsKLQkJY19jb25uLT5ibF9kZXZpY2UgPSBO VUxMOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0JZGlzcGxheV9jb3VudCsrOwotCi0JcmV0dXJu IDA7Ci19Ci0jZW5kaWYKLQotaW50IGRwdV9jb25uZWN0b3JfdHJpZ2dlcl9ldmVudCh2b2lkICpk cm1fY29ubmVjdG9yLAotCQl1aW50MzJfdCBldmVudF9pZHgsIHVpbnQzMl90IGluc3RhbmNlX2lk eCwKLQkJdWludDMyX3QgZGF0YTAsIHVpbnQzMl90IGRhdGExLAotCQl1aW50MzJfdCBkYXRhMiwg dWludDMyX3QgZGF0YTMpCi17Ci0Jc3RydWN0IGRwdV9jb25uZWN0b3IgKmNfY29ubjsKLQl1bnNp Z25lZCBsb25nIGlycV9mbGFnczsKLQl2b2lkICgqY2JfZnVuYykodWludDMyX3QgZXZlbnRfaWR4 LAotCQkJdWludDMyX3QgaW5zdGFuY2VfaWR4LCB2b2lkICp1c3IsCi0JCQl1aW50MzJfdCBkYXRh MCwgdWludDMyX3QgZGF0YTEsCi0JCQl1aW50MzJfdCBkYXRhMiwgdWludDMyX3QgZGF0YTMpOwot CXZvaWQgKnVzcjsKLQlpbnQgcmMgPSAwOwotCi0JLyoKLQkgKiBUaGlzIGZ1bmN0aW9uIG1heSBw b3RlbnRpYWxseSBiZSBjYWxsZWQgZnJvbSBhbiBJU1IgY29udGV4dCwgc28KLQkgKiBhdm9pZCBl eGNlc3NpdmUgbG9nZ2luZy9ldGMuCi0JICovCi0JaWYgKCFkcm1fY29ubmVjdG9yKQotCQlyZXR1 cm4gLUVJTlZBTDsKLQllbHNlIGlmIChldmVudF9pZHggPj0gRFBVX0NPTk5fRVZFTlRfQ09VTlQp Ci0JCXJldHVybiAtRUlOVkFMOwotCWNfY29ubiA9IHRvX2RwdV9jb25uZWN0b3IoZHJtX2Nvbm5l Y3Rvcik7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmY19jb25uLT5ldmVudF9sb2NrLCBpcnFfZmxh Z3MpOwotCWNiX2Z1bmMgPSBjX2Nvbm4tPmV2ZW50X3RhYmxlW2V2ZW50X2lkeF0uY2JfZnVuYzsK LQl1c3IgPSBjX2Nvbm4tPmV2ZW50X3RhYmxlW2V2ZW50X2lkeF0udXNyOwotCXNwaW5fdW5sb2Nr X2lycXJlc3RvcmUoJmNfY29ubi0+ZXZlbnRfbG9jaywgaXJxX2ZsYWdzKTsKLQotCWlmIChjYl9m dW5jKQotCQljYl9mdW5jKGV2ZW50X2lkeCwgaW5zdGFuY2VfaWR4LCB1c3IsCi0JCQlkYXRhMCwg ZGF0YTEsIGRhdGEyLCBkYXRhMyk7Ci0JZWxzZQotCQlyYyA9IC1FQUdBSU47Ci0KLQlyZXR1cm4g cmM7Ci19Ci0KLWludCBkcHVfY29ubmVjdG9yX3JlZ2lzdGVyX2V2ZW50KHN0cnVjdCBkcm1fY29u bmVjdG9yICpjb25uZWN0b3IsCi0JCXVpbnQzMl90IGV2ZW50X2lkeCwKLQkJdm9pZCAoKmNiX2Z1 bmMpKHVpbnQzMl90IGV2ZW50X2lkeCwKLQkJCXVpbnQzMl90IGluc3RhbmNlX2lkeCwgdm9pZCAq dXNyLAotCQkJdWludDMyX3QgZGF0YTAsIHVpbnQzMl90IGRhdGExLAotCQkJdWludDMyX3QgZGF0 YTIsIHVpbnQzMl90IGRhdGEzKSwKLQkJdm9pZCAqdXNyKQotewotCXN0cnVjdCBkcHVfY29ubmVj dG9yICpjX2Nvbm47Ci0JdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7Ci0KLQlpZiAoIWNvbm5lY3Rv cikgewotCQlEUFVfRVJST1IoImludmFsaWQgY29ubmVjdG9yXG4iKTsKLQkJcmV0dXJuIC1FSU5W QUw7Ci0JfSBlbHNlIGlmIChldmVudF9pZHggPj0gRFBVX0NPTk5fRVZFTlRfQ09VTlQpIHsKLQkJ RFBVX0VSUk9SKCJjb25uJWQsIGludmFsaWQgZXZlbnQgJWRcbiIsCi0JCQkJY29ubmVjdG9yLT5i YXNlLmlkLCBldmVudF9pZHgpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JY19jb25uID0gdG9f ZHB1X2Nvbm5lY3Rvcihjb25uZWN0b3IpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNfY29ubi0+ ZXZlbnRfbG9jaywgaXJxX2ZsYWdzKTsKLQljX2Nvbm4tPmV2ZW50X3RhYmxlW2V2ZW50X2lkeF0u Y2JfZnVuYyA9IGNiX2Z1bmM7Ci0JY19jb25uLT5ldmVudF90YWJsZVtldmVudF9pZHhdLnVzciA9 IHVzcjsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjX2Nvbm4tPmV2ZW50X2xvY2ssIGlycV9m bGFncyk7Ci0KLQkvKiBvcHRpb25hbGx5IG5vdGlmeSBkaXNwbGF5IG9mIGV2ZW50IHJlZ2lzdHJh dGlvbiAqLwotCWlmIChjX2Nvbm4tPm9wcy5lbmFibGVfZXZlbnQgJiYgY19jb25uLT5kaXNwbGF5 KQotCQljX2Nvbm4tPm9wcy5lbmFibGVfZXZlbnQoY29ubmVjdG9yLCBldmVudF9pZHgsCi0JCQkJ Y2JfZnVuYyAhPSBOVUxMLCBjX2Nvbm4tPmRpc3BsYXkpOwotCXJldHVybiAwOwotfQotCi12b2lk IGRwdV9jb25uZWN0b3JfdW5yZWdpc3Rlcl9ldmVudChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29u bmVjdG9yLAotCQl1aW50MzJfdCBldmVudF9pZHgpCi17Ci0JKHZvaWQpZHB1X2Nvbm5lY3Rvcl9y ZWdpc3Rlcl9ldmVudChjb25uZWN0b3IsIGV2ZW50X2lkeCwgMCwgMCk7Ci19Ci0KLSNpZmRlZiBD T05GSUdfRFJNX01TTV9EU0lfU1RBR0lORwotc3RhdGljIGludCBfZHB1X2Nvbm5lY3Rvcl9nZXRf ZGVmYXVsdF9kaXRoZXJfY2ZnX3YxKAotCQlzdHJ1Y3QgZHB1X2Nvbm5lY3RvciAqY19jb25uLCB2 b2lkICpjZmcpCi17Ci0Jc3RydWN0IGRybV9tc21fZGl0aGVyICpkaXRoZXJfY2ZnID0gKHN0cnVj dCBkcm1fbXNtX2RpdGhlciAqKWNmZzsKLQllbnVtIGRzaV9waXhlbF9mb3JtYXQgZHN0X2Zvcm1h dCA9IERTSV9QSVhFTF9GT1JNQVRfTUFYOwotCi0JaWYgKCFjX2Nvbm4gfHwgIWNmZykgewotCQlE UFVfRVJST1IoImludmFsaWQgYXJndW1lbnQocyksIGNfY29ubiAlcEssIGNmZyAlcEtcbiIsCi0J CQkJY19jb25uLCBjZmcpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAoIWNfY29ubi0+ b3BzLmdldF9kc3RfZm9ybWF0KSB7Ci0JCURQVV9ERUJVRygiZ2V0X2RzdF9mb3JtYXQgaXMgdW5h dmFpbGFibGVcbiIpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlkc3RfZm9ybWF0ID0gY19jb25uLT5v cHMuZ2V0X2RzdF9mb3JtYXQoY19jb25uLT5kaXNwbGF5KTsKLQlzd2l0Y2ggKGRzdF9mb3JtYXQp IHsKLQljYXNlIERTSV9QSVhFTF9GT1JNQVRfUkdCODg4OgotCQlkaXRoZXJfY2ZnLT5jMF9iaXRk ZXB0aCA9IDg7Ci0JCWRpdGhlcl9jZmctPmMxX2JpdGRlcHRoID0gODsKLQkJZGl0aGVyX2NmZy0+ YzJfYml0ZGVwdGggPSA4OwotCQlkaXRoZXJfY2ZnLT5jM19iaXRkZXB0aCA9IDg7Ci0JCWJyZWFr OwotCWNhc2UgRFNJX1BJWEVMX0ZPUk1BVF9SR0I2NjY6Ci0JY2FzZSBEU0lfUElYRUxfRk9STUFU X1JHQjY2Nl9MT09TRToKLQkJZGl0aGVyX2NmZy0+YzBfYml0ZGVwdGggPSA2OwotCQlkaXRoZXJf Y2ZnLT5jMV9iaXRkZXB0aCA9IDY7Ci0JCWRpdGhlcl9jZmctPmMyX2JpdGRlcHRoID0gNjsKLQkJ ZGl0aGVyX2NmZy0+YzNfYml0ZGVwdGggPSA2OwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlEUFVf REVCVUcoIm5vIGRlZmF1bHQgZGl0aGVyIGNvbmZpZyBmb3IgZHN0X2Zvcm1hdCAlZFxuIiwKLQkJ CWRzdF9mb3JtYXQpOwotCQlyZXR1cm4gLUVOT0RBVEE7Ci0JfQotCi0JbWVtY3B5KCZkaXRoZXJf Y2ZnLT5tYXRyaXgsIGRpdGhlcl9tYXRyaXgsCi0JCQlzaXplb2YodTMyKSAqIERJVEhFUl9NQVRS SVhfU1opOwotCWRpdGhlcl9jZmctPnRlbXBvcmFsX2VuID0gMDsKLQlyZXR1cm4gMDsKLX0KLQot c3RhdGljIHZvaWQgX2RwdV9jb25uZWN0b3JfaW5zdGFsbF9kaXRoZXJfcHJvcGVydHkoc3RydWN0 IGRybV9kZXZpY2UgKmRldiwKLQkJc3RydWN0IGRwdV9rbXMgKmRwdV9rbXMsIHN0cnVjdCBkcHVf Y29ubmVjdG9yICpjX2Nvbm4pCi17Ci0JY2hhciBwcm9wX25hbWVbRFJNX1BST1BfTkFNRV9MRU5d OwotCXN0cnVjdCBkcHVfbWRzc19jZmcgKmNhdGFsb2cgPSBOVUxMOwotCXN0cnVjdCBkcm1fcHJv cGVydHlfYmxvYiAqYmxvYl9wdHI7Ci0Jdm9pZCAqY2ZnOwotCWludCByZXQgPSAwOwotCXUzMiB2 ZXJzaW9uID0gMCwgbGVuID0gMDsKLQlib29sIGRlZmFsdXRfZGl0aGVyX25lZWRlZCA9IGZhbHNl OwotCi0JaWYgKCFkZXYgfHwgIWRwdV9rbXMgfHwgIWNfY29ubikgewotCQlEUFVfRVJST1IoImlu dmxkIGFyZ3MgKHMpLCBkZXYgJXBLLCBkcHVfa21zICVwSywgY19jb25uICVwS1xuIiwKLQkJCQlk ZXYsIGRwdV9rbXMsIGNfY29ubik7Ci0JCXJldHVybjsKLQl9Ci0KLQljYXRhbG9nID0gZHB1X2tt cy0+Y2F0YWxvZzsKLQl2ZXJzaW9uID0gRFBVX0NPTE9SX1BST0NFU1NfTUFKT1IoCi0JCQljYXRh bG9nLT5waW5ncG9uZ1swXS5zYmxrLT5kaXRoZXIudmVyc2lvbik7Ci0Jc25wcmludGYocHJvcF9u YW1lLCBBUlJBWV9TSVpFKHByb3BfbmFtZSksICIlcyVkIiwKLQkJCSJEUFVfUFBfRElUSEVSX1Yi LCB2ZXJzaW9uKTsKLQlzd2l0Y2ggKHZlcnNpb24pIHsKLQljYXNlIDE6Ci0JCW1zbV9wcm9wZXJ0 eV9pbnN0YWxsX2Jsb2IoJmNfY29ubi0+cHJvcGVydHlfaW5mbywgcHJvcF9uYW1lLAotCQkJRFJN X01PREVfUFJPUF9CTE9CLAotCQkJQ09OTkVDVE9SX1BST1BfUFBfRElUSEVSKTsKLQkJbGVuID0g c2l6ZW9mKHN0cnVjdCBkcm1fbXNtX2RpdGhlcik7Ci0JCWNmZyA9IGt6YWxsb2MobGVuLCBHRlBf S0VSTkVMKTsKLQkJaWYgKCFjZmcpCi0JCQlyZXR1cm47Ci0KLQkJcmV0ID0gX2RwdV9jb25uZWN0 b3JfZ2V0X2RlZmF1bHRfZGl0aGVyX2NmZ192MShjX2Nvbm4sIGNmZyk7Ci0JCWlmICghcmV0KQot CQkJZGVmYWx1dF9kaXRoZXJfbmVlZGVkID0gdHJ1ZTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJ RFBVX0VSUk9SKCJ1bnN1cHBvcnRlZCBkaXRoZXIgdmVyc2lvbiAlZFxuIiwgdmVyc2lvbik7Ci0J CXJldHVybjsKLQl9Ci0KLQlpZiAoZGVmYWx1dF9kaXRoZXJfbmVlZGVkKSB7Ci0JCWJsb2JfcHRy ID0gZHJtX3Byb3BlcnR5X2NyZWF0ZV9ibG9iKGRldiwgbGVuLCBjZmcpOwotCQlpZiAoSVNfRVJS X09SX05VTEwoYmxvYl9wdHIpKQotCQkJZ290byBleGl0OwotCQljX2Nvbm4tPmJsb2JfZGl0aGVy ID0gYmxvYl9wdHI7Ci0JfQotZXhpdDoKLQlrZnJlZShjZmcpOwotfQotI2VuZGlmCi0KLWludCBk cHVfY29ubmVjdG9yX2dldF9kaXRoZXJfY2ZnKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uLAot CQkJc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKnN0YXRlLCB2b2lkICoqY2ZnLAotCQkJc2l6 ZV90ICpsZW4pCi17Ci0Jc3RydWN0IGRwdV9jb25uZWN0b3IgKmNfY29ubiA9IE5VTEw7Ci0Jc3Ry dWN0IGRwdV9jb25uZWN0b3Jfc3RhdGUgKmNfc3RhdGUgPSBOVUxMOwotCXNpemVfdCBkaXRoZXJf c3ogPSAwOwotCi0JaWYgKCFjb25uIHx8ICFzdGF0ZSB8fCAhKCpjZmcpKQotCQlyZXR1cm4gLUVJ TlZBTDsKLQotCWNfY29ubiA9IHRvX2RwdV9jb25uZWN0b3IoY29ubik7Ci0JY19zdGF0ZSA9IHRv X2RwdV9jb25uZWN0b3Jfc3RhdGUoc3RhdGUpOwotCi0JLyogdHJ5IHRvIGdldCB1c2VyIGNvbmZp ZyBkYXRhIGZpcnN0ICovCi0JKmNmZyA9IG1zbV9wcm9wZXJ0eV9nZXRfYmxvYigmY19jb25uLT5w cm9wZXJ0eV9pbmZvLAotCQkJCQkmY19zdGF0ZS0+cHJvcGVydHlfc3RhdGUsCi0JCQkJCSZkaXRo ZXJfc3osCi0JCQkJCUNPTk5FQ1RPUl9QUk9QX1BQX0RJVEhFUik7Ci0JLyogaWYgdXNlciBjb25m aWcgZGF0YSBkb2Vzbid0IGV4aXN0LCB1c2UgZGVmYXVsdCBkaXRoZXIgYmxvYiAqLwotCWlmICgq Y2ZnID09IE5VTEwgJiYgY19jb25uLT5ibG9iX2RpdGhlcikgewotCQkqY2ZnID0gJmNfY29ubi0+ YmxvYl9kaXRoZXItPmRhdGE7Ci0JCWRpdGhlcl9zeiA9IGNfY29ubi0+YmxvYl9kaXRoZXItPmxl bmd0aDsKLQl9Ci0JKmxlbiA9IGRpdGhlcl9zejsKLQlyZXR1cm4gMDsKLX0KLQotaW50IGRwdV9j b25uZWN0b3JfZ2V0X2luZm8oc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKLQkJc3Ry dWN0IG1zbV9kaXNwbGF5X2luZm8gKmluZm8pCi17Ci0Jc3RydWN0IGRwdV9jb25uZWN0b3IgKmNf Y29ubjsKLQotCWlmICghY29ubmVjdG9yIHx8ICFpbmZvKSB7Ci0JCURQVV9FUlJPUigiaW52YWxp ZCBhcmd1bWVudChzKSwgY29ubiAlcEssIGluZm8gJXBLXG4iLAotCQkJCWNvbm5lY3RvciwgaW5m byk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWNfY29ubiA9IHRvX2RwdV9jb25uZWN0b3Io Y29ubmVjdG9yKTsKLQotCWlmICghY19jb25uLT5kaXNwbGF5IHx8ICFjX2Nvbm4tPm9wcy5nZXRf aW5mbykgewotCQlEUFVfRVJST1IoImRpc3BsYXkgaW5mbyBub3Qgc3VwcG9ydGVkIGZvciAlcEtc biIsCi0JCQkJY19jb25uLT5kaXNwbGF5KTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmV0 dXJuIGNfY29ubi0+b3BzLmdldF9pbmZvKGluZm8sIGNfY29ubi0+ZGlzcGxheSk7Ci19Ci0KLXN0 YXRpYyBpbnQgX2RwdV9jb25uZWN0b3JfdXBkYXRlX3Bvd2VyX2xvY2tlZChzdHJ1Y3QgZHB1X2Nv bm5lY3RvciAqY19jb25uKQotewotCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7Ci0J dm9pZCAqZGlzcGxheTsKLQlpbnQgKCpzZXRfcG93ZXIpKHN0cnVjdCBkcm1fY29ubmVjdG9yICos IGludCwgdm9pZCAqKTsKLQlpbnQgbW9kZSwgcmMgPSAwOwotCi0JaWYgKCFjX2Nvbm4pCi0JCXJl dHVybiAtRUlOVkFMOwotCWNvbm5lY3RvciA9ICZjX2Nvbm4tPmJhc2U7Ci0KLQlzd2l0Y2ggKGNf Y29ubi0+ZHBtc19tb2RlKSB7Ci0JY2FzZSBEUk1fTU9ERV9EUE1TX09OOgotCQltb2RlID0gY19j b25uLT5scF9tb2RlOwotCQlicmVhazsKLQljYXNlIERSTV9NT0RFX0RQTVNfU1RBTkRCWToKLQkJ bW9kZSA9IERQVV9NT0RFX0RQTVNfU1RBTkRCWTsKLQkJYnJlYWs7Ci0JY2FzZSBEUk1fTU9ERV9E UE1TX1NVU1BFTkQ6Ci0JCW1vZGUgPSBEUFVfTU9ERV9EUE1TX1NVU1BFTkQ7Ci0JCWJyZWFrOwot CWNhc2UgRFJNX01PREVfRFBNU19PRkY6Ci0JCW1vZGUgPSBEUFVfTU9ERV9EUE1TX09GRjsKLQkJ YnJlYWs7Ci0JZGVmYXVsdDoKLQkJbW9kZSA9IGNfY29ubi0+bHBfbW9kZTsKLQkJRFBVX0VSUk9S KCJjb25uICVkIGRwbXMgc2V0IHRvIHVucmVjb2duaXplZCBtb2RlICVkXG4iLAotCQkJCWNvbm5l Y3Rvci0+YmFzZS5pZCwgbW9kZSk7Ci0JCWJyZWFrOwotCX0KLQotCURQVV9FVlQzMihjb25uZWN0 b3ItPmJhc2UuaWQsIGNfY29ubi0+ZHBtc19tb2RlLCBjX2Nvbm4tPmxwX21vZGUsIG1vZGUpOwot CURQVV9ERUJVRygiY29ubiAlZCAtIGRwbXMgJWQsIGxwICVkLCBwYW5lbCAlZFxuIiwgY29ubmVj dG9yLT5iYXNlLmlkLAotCQkJY19jb25uLT5kcG1zX21vZGUsIGNfY29ubi0+bHBfbW9kZSwgbW9k ZSk7Ci0KLQlpZiAobW9kZSAhPSBjX2Nvbm4tPmxhc3RfcGFuZWxfcG93ZXJfbW9kZSAmJiBjX2Nv bm4tPm9wcy5zZXRfcG93ZXIpIHsKLQkJZGlzcGxheSA9IGNfY29ubi0+ZGlzcGxheTsKLQkJc2V0 X3Bvd2VyID0gY19jb25uLT5vcHMuc2V0X3Bvd2VyOwotCi0JCW11dGV4X3VubG9jaygmY19jb25u LT5sb2NrKTsKLQkJcmMgPSBzZXRfcG93ZXIoY29ubmVjdG9yLCBtb2RlLCBkaXNwbGF5KTsKLQkJ bXV0ZXhfbG9jaygmY19jb25uLT5sb2NrKTsKLQl9Ci0JY19jb25uLT5sYXN0X3BhbmVsX3Bvd2Vy X21vZGUgPSBtb2RlOwotCi0JcmV0dXJuIHJjOwotfQotCi1pbnQgZHB1X2Nvbm5lY3Rvcl9wcmVf a2lja29mZihzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQotewotCXN0cnVjdCBkcHVf Y29ubmVjdG9yICpjX2Nvbm47Ci0Jc3RydWN0IGRwdV9jb25uZWN0b3Jfc3RhdGUgKmNfc3RhdGU7 Ci0JaW50IGlkeCwgcmMgPSAwOwotCi0JaWYgKCFjb25uZWN0b3IpIHsKLQkJRFBVX0VSUk9SKCJp bnZhbGlkIGFyZ3VtZW50XG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JY19jb25uID0g dG9fZHB1X2Nvbm5lY3Rvcihjb25uZWN0b3IpOwotCWNfc3RhdGUgPSB0b19kcHVfY29ubmVjdG9y X3N0YXRlKGNvbm5lY3Rvci0+c3RhdGUpOwotCi0JaWYgKCFjX2Nvbm4tPmRpc3BsYXkpIHsKLQkJ RFBVX0VSUk9SKCJpbnZhbGlkIGFyZ3VtZW50XG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQot I2lmZGVmIENPTkZJR19EUk1fTVNNX0RTSV9TVEFHSU5HCi0JaWYgKGNfY29ubi0+b3BzLnNldF9i YWNrbGlnaHQpIHsKLQkJRFBVX0RFQlVHKCJjb25uJWQ6IFNldCBiYWNrbGlnaHQgdG8gMjU1XG4i LCBjb25uZWN0b3ItPmJhc2UuaWQpOwotCQljX2Nvbm4tPm9wcy5zZXRfYmFja2xpZ2h0KGNfY29u bi0+ZGlzcGxheSwgMjU1KTsKLQl9Ci0jZW5kaWYKLQotCXdoaWxlICgoaWR4ID0gbXNtX3Byb3Bl cnR5X3BvcF9kaXJ0eSgmY19jb25uLT5wcm9wZXJ0eV9pbmZvLAotCQkJCQkmY19zdGF0ZS0+cHJv cGVydHlfc3RhdGUpKSA+PSAwKSB7Ci0JCXN3aXRjaCAoaWR4KSB7Ci0JCWNhc2UgQ09OTkVDVE9S X1BST1BfTFA6Ci0JCQltdXRleF9sb2NrKCZjX2Nvbm4tPmxvY2spOwotCQkJY19jb25uLT5scF9t b2RlID0gZHB1X2Nvbm5lY3Rvcl9nZXRfcHJvcGVydHkoCi0JCQkJCWNvbm5lY3Rvci0+c3RhdGUs IENPTk5FQ1RPUl9QUk9QX0xQKTsKLQkJCV9kcHVfY29ubmVjdG9yX3VwZGF0ZV9wb3dlcl9sb2Nr ZWQoY19jb25uKTsKLQkJCW11dGV4X3VubG9jaygmY19jb25uLT5sb2NrKTsKLQkJCWJyZWFrOwot CQlkZWZhdWx0OgotCQkJLyogbm90aGluZyB0byBkbyBmb3IgbW9zdCBwcm9wZXJ0aWVzICovCi0J CQlicmVhazsKLQkJfQotCX0KLQotCURQVV9FVlQzMl9WRVJCT1NFKGNvbm5lY3Rvci0+YmFzZS5p ZCk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXZvaWQgZHB1X2Nvbm5lY3Rvcl9jbGtfY3RybChzdHJ1 Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBib29sIGVuYWJsZSkKLXsKLSNpZmRlZiBDT05G SUdfRFJNX01TTV9EU0lfU1RBR0lORwotCXN0cnVjdCBkcHVfY29ubmVjdG9yICpjX2Nvbm47Ci0J c3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5OwotCXUzMiBzdGF0ZSA9IGVuYWJsZSA/IERTSV9D TEtfT04gOiBEU0lfQ0xLX09GRjsKLQotCWlmICghY29ubmVjdG9yKSB7Ci0JCURQVV9FUlJPUigi aW52YWxpZCBjb25uZWN0b3JcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JY19jb25uID0gdG9fZHB1 X2Nvbm5lY3Rvcihjb25uZWN0b3IpOwotCWRpc3BsYXkgPSAoc3RydWN0IGRzaV9kaXNwbGF5ICop IGNfY29ubi0+ZGlzcGxheTsKLQotCWlmIChkaXNwbGF5ICYmIGNfY29ubi0+b3BzLmNsa19jdHJs KQotCQljX2Nvbm4tPm9wcy5jbGtfY3RybChkaXNwbGF5LT5tZHBfY2xrX2hhbmRsZSwKLQkJCQlE U0lfQUxMX0NMS1MsIHN0YXRlKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgdm9pZCBkcHVfY29ubmVj dG9yX2Rlc3Ryb3koc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKLXsKLQlzdHJ1Y3Qg ZHB1X2Nvbm5lY3RvciAqY19jb25uOwotCi0JaWYgKCFjb25uZWN0b3IpIHsKLQkJRFBVX0VSUk9S KCJpbnZhbGlkIGNvbm5lY3RvclxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQljX2Nvbm4gPSB0b19k cHVfY29ubmVjdG9yKGNvbm5lY3Rvcik7Ci0KLQlpZiAoY19jb25uLT5vcHMucHV0X21vZGVzKQot CQljX2Nvbm4tPm9wcy5wdXRfbW9kZXMoY29ubmVjdG9yLCBjX2Nvbm4tPmRpc3BsYXkpOwotCi0J aWYgKGNfY29ubi0+YmxvYl9jYXBzKQotCQlkcm1fcHJvcGVydHlfYmxvYl9wdXQoY19jb25uLT5i bG9iX2NhcHMpOwotCWlmIChjX2Nvbm4tPmJsb2JfaGRyKQotCQlkcm1fcHJvcGVydHlfYmxvYl9w dXQoY19jb25uLT5ibG9iX2hkcik7Ci0JaWYgKGNfY29ubi0+YmxvYl9kaXRoZXIpCi0JCWRybV9w cm9wZXJ0eV9ibG9iX3B1dChjX2Nvbm4tPmJsb2JfZGl0aGVyKTsKLQltc21fcHJvcGVydHlfZGVz dHJveSgmY19jb25uLT5wcm9wZXJ0eV9pbmZvKTsKLQotCWlmIChjX2Nvbm4tPmJsX2RldmljZSkK LQkJYmFja2xpZ2h0X2RldmljZV91bnJlZ2lzdGVyKGNfY29ubi0+YmxfZGV2aWNlKTsKLQlkcm1f Y29ubmVjdG9yX3VucmVnaXN0ZXIoY29ubmVjdG9yKTsKLQltdXRleF9kZXN0cm95KCZjX2Nvbm4t PmxvY2spOwotCWRybV9jb25uZWN0b3JfY2xlYW51cChjb25uZWN0b3IpOwotCWtmcmVlKGNfY29u bik7Ci19Ci0KLS8qKgotICogX2RwdV9jb25uZWN0b3JfZGVzdHJveV9mYiAtIGNsZWFuIHVwIGNv bm5lY3RvciBzdGF0ZSdzIG91dF9mYiBidWZmZXIKLSAqIEBjX2Nvbm46IFBvaW50ZXIgdG8gZHB1 IGNvbm5lY3RvciBzdHJ1Y3R1cmUKLSAqIEBjX3N0YXRlOiBQb2ludGVyIHRvIGRwdSBjb25uZWN0 b3Igc3RhdGUgc3RydWN0dXJlCi0gKi8KLXN0YXRpYyB2b2lkIF9kcHVfY29ubmVjdG9yX2Rlc3Ry b3lfZmIoc3RydWN0IGRwdV9jb25uZWN0b3IgKmNfY29ubiwKLQkJc3RydWN0IGRwdV9jb25uZWN0 b3Jfc3RhdGUgKmNfc3RhdGUpCi17Ci0JaWYgKCFjX3N0YXRlIHx8ICFjX3N0YXRlLT5vdXRfZmIp IHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIHN0YXRlICVwS1xuIiwgY19zdGF0ZSk7Ci0JCXJldHVy bjsKLQl9Ci0KLQlkcm1fZnJhbWVidWZmZXJfcHV0KGNfc3RhdGUtPm91dF9mYik7Ci0JY19zdGF0 ZS0+b3V0X2ZiID0gTlVMTDsKLQotCWlmIChjX2Nvbm4pCi0JCWNfc3RhdGUtPnByb3BlcnR5X3Zh bHVlc1tDT05ORUNUT1JfUFJPUF9PVVRfRkJdLnZhbHVlID0KLQkJCW1zbV9wcm9wZXJ0eV9nZXRf ZGVmYXVsdCgmY19jb25uLT5wcm9wZXJ0eV9pbmZvLAotCQkJCQlDT05ORUNUT1JfUFJPUF9PVVRf RkIpOwotCWVsc2UKLQkJY19zdGF0ZS0+cHJvcGVydHlfdmFsdWVzW0NPTk5FQ1RPUl9QUk9QX09V VF9GQl0udmFsdWUgPSB+MDsKLX0KLQotc3RhdGljIHZvaWQgZHB1X2Nvbm5lY3Rvcl9hdG9taWNf ZGVzdHJveV9zdGF0ZShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAotCQlzdHJ1Y3Qg ZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqc3RhdGUpCi17Ci0Jc3RydWN0IGRwdV9jb25uZWN0b3IgKmNf Y29ubiA9IE5VTEw7Ci0Jc3RydWN0IGRwdV9jb25uZWN0b3Jfc3RhdGUgKmNfc3RhdGUgPSBOVUxM OwotCi0JaWYgKCFzdGF0ZSkgewotCQlEUFVfRVJST1IoImludmFsaWQgc3RhdGVcbiIpOwotCQly ZXR1cm47Ci0JfQotCi0JLyoKLQkgKiBUaGUgYmFzZSBEUk0gZnJhbWV3b3JrIGN1cnJlbnRseSBh bHdheXMgcGFzc2VzIGluIGEgTlVMTAotCSAqIGNvbm5lY3RvciBwb2ludGVyLiBUaGlzIGlzIG5v dCBjb3JyZWN0LCBidXQgYXR0ZW1wdCB0bwotCSAqIGhhbmRsZSB0aGF0IGNhc2UgYXMgbXVjaCBh cyBwb3NzaWJsZS4KLQkgKi8KLQlpZiAoY29ubmVjdG9yKQotCQljX2Nvbm4gPSB0b19kcHVfY29u bmVjdG9yKGNvbm5lY3Rvcik7Ci0JY19zdGF0ZSA9IHRvX2RwdV9jb25uZWN0b3Jfc3RhdGUoc3Rh dGUpOwotCi0JaWYgKGNfc3RhdGUtPm91dF9mYikKLQkJX2RwdV9jb25uZWN0b3JfZGVzdHJveV9m YihjX2Nvbm4sIGNfc3RhdGUpOwotCi0JaWYgKCFjX2Nvbm4pIHsKLQkJa2ZyZWUoY19zdGF0ZSk7 Ci0JfSBlbHNlIHsKLQkJLyogZGVzdHJveSB2YWx1ZSBoZWxwZXIgKi8KLQkJbXNtX3Byb3BlcnR5 X2Rlc3Ryb3lfc3RhdGUoJmNfY29ubi0+cHJvcGVydHlfaW5mbywgY19zdGF0ZSwKLQkJCQkmY19z dGF0ZS0+cHJvcGVydHlfc3RhdGUpOwotCX0KLX0KLQotc3RhdGljIHZvaWQgZHB1X2Nvbm5lY3Rv cl9hdG9taWNfcmVzZXQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKLXsKLQlzdHJ1 Y3QgZHB1X2Nvbm5lY3RvciAqY19jb25uOwotCXN0cnVjdCBkcHVfY29ubmVjdG9yX3N0YXRlICpj X3N0YXRlOwotCi0JaWYgKCFjb25uZWN0b3IpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGNvbm5l Y3RvclxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQljX2Nvbm4gPSB0b19kcHVfY29ubmVjdG9yKGNv bm5lY3Rvcik7Ci0KLQlpZiAoY29ubmVjdG9yLT5zdGF0ZSkgewotCQlkcHVfY29ubmVjdG9yX2F0 b21pY19kZXN0cm95X3N0YXRlKGNvbm5lY3RvciwgY29ubmVjdG9yLT5zdGF0ZSk7Ci0JCWNvbm5l Y3Rvci0+c3RhdGUgPSAwOwotCX0KLQotCWNfc3RhdGUgPSBtc21fcHJvcGVydHlfYWxsb2Nfc3Rh dGUoJmNfY29ubi0+cHJvcGVydHlfaW5mbyk7Ci0JaWYgKCFjX3N0YXRlKSB7Ci0JCURQVV9FUlJP Uigic3RhdGUgYWxsb2MgZmFpbGVkXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qIHJlc2V0IHZh bHVlIGhlbHBlciwgemVybyBvdXQgc3RhdGUgc3RydWN0dXJlIGFuZCByZXNldCBwcm9wZXJ0aWVz ICovCi0JbXNtX3Byb3BlcnR5X3Jlc2V0X3N0YXRlKCZjX2Nvbm4tPnByb3BlcnR5X2luZm8sIGNf c3RhdGUsCi0JCQkmY19zdGF0ZS0+cHJvcGVydHlfc3RhdGUsCi0JCQljX3N0YXRlLT5wcm9wZXJ0 eV92YWx1ZXMpOwotCi0JY19zdGF0ZS0+YmFzZS5jb25uZWN0b3IgPSBjb25uZWN0b3I7Ci0JY29u bmVjdG9yLT5zdGF0ZSA9ICZjX3N0YXRlLT5iYXNlOwotfQotCi1zdGF0aWMgc3RydWN0IGRybV9j b25uZWN0b3Jfc3RhdGUgKgotZHB1X2Nvbm5lY3Rvcl9hdG9taWNfZHVwbGljYXRlX3N0YXRlKHN0 cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCi17Ci0Jc3RydWN0IGRwdV9jb25uZWN0b3Ig KmNfY29ubjsKLQlzdHJ1Y3QgZHB1X2Nvbm5lY3Rvcl9zdGF0ZSAqY19zdGF0ZSwgKmNfb2xkc3Rh dGU7Ci0KLQlpZiAoIWNvbm5lY3RvciB8fCAhY29ubmVjdG9yLT5zdGF0ZSkgewotCQlEUFVfRVJS T1IoImludmFsaWQgY29ubmVjdG9yICVwS1xuIiwgY29ubmVjdG9yKTsKLQkJcmV0dXJuIE5VTEw7 Ci0JfQotCi0JY19jb25uID0gdG9fZHB1X2Nvbm5lY3Rvcihjb25uZWN0b3IpOwotCWNfb2xkc3Rh dGUgPSB0b19kcHVfY29ubmVjdG9yX3N0YXRlKGNvbm5lY3Rvci0+c3RhdGUpOwotCWNfc3RhdGUg PSBtc21fcHJvcGVydHlfYWxsb2Nfc3RhdGUoJmNfY29ubi0+cHJvcGVydHlfaW5mbyk7Ci0JaWYg KCFjX3N0YXRlKSB7Ci0JCURQVV9FUlJPUigic3RhdGUgYWxsb2MgZmFpbGVkXG4iKTsKLQkJcmV0 dXJuIE5VTEw7Ci0JfQotCi0JLyogZHVwbGljYXRlIHZhbHVlIGhlbHBlciAqLwotCW1zbV9wcm9w ZXJ0eV9kdXBsaWNhdGVfc3RhdGUoJmNfY29ubi0+cHJvcGVydHlfaW5mbywKLQkJCWNfb2xkc3Rh dGUsIGNfc3RhdGUsCi0JCQkmY19zdGF0ZS0+cHJvcGVydHlfc3RhdGUsIGNfc3RhdGUtPnByb3Bl cnR5X3ZhbHVlcyk7Ci0KLQkvKiBhZGRpdGlvbmFsIGhhbmRsaW5nIGZvciBkcm0gZnJhbWVidWZm ZXIgb2JqZWN0cyAqLwotCWlmIChjX3N0YXRlLT5vdXRfZmIpCi0JCWRybV9mcmFtZWJ1ZmZlcl9n ZXQoY19zdGF0ZS0+b3V0X2ZiKTsKLQotCXJldHVybiAmY19zdGF0ZS0+YmFzZTsKLX0KLQotc3Rh dGljIGludCBfZHB1X2Nvbm5lY3Rvcl91cGRhdGVfYmxfc2NhbGUoc3RydWN0IGRwdV9jb25uZWN0 b3IgKmNfY29ubiwKLQkJaW50IGlkeCwKLQkJdWludDY0X3QgdmFsdWUpCi17Ci0jaWZkZWYgQ09O RklHX0RSTV9NU01fRFNJX1NUQUdJTkcKLQlzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRzaV9kaXNwbGF5 ID0gY19jb25uLT5kaXNwbGF5OwotCXN0cnVjdCBkc2lfYmFja2xpZ2h0X2NvbmZpZyAqYmxfY29u ZmlnOwotCWludCByYyA9IDA7Ci0KLQlpZiAoIWRzaV9kaXNwbGF5IHx8ICFkc2lfZGlzcGxheS0+ cGFuZWwpIHsKLQkJcHJfZXJyKCJJbnZhbGlkIHBhcmFtcyhzKSBkc2lfZGlzcGxheSAlcEssIHBh bmVsICVwS1xuIiwKLQkJCWRzaV9kaXNwbGF5LAotCQkJKChkc2lfZGlzcGxheSkgPyBkc2lfZGlz cGxheS0+cGFuZWwgOiBOVUxMKSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWJsX2NvbmZp ZyA9ICZkc2lfZGlzcGxheS0+cGFuZWwtPmJsX2NvbmZpZzsKLQlpZiAoaWR4ID09IENPTk5FQ1RP Ul9QUk9QX0JMX1NDQUxFKSB7Ci0JCWJsX2NvbmZpZy0+Ymxfc2NhbGUgPSB2YWx1ZTsKLQkJaWYg KHZhbHVlID4gTUFYX0JMX1NDQUxFX0xFVkVMKQotCQkJYmxfY29uZmlnLT5ibF9zY2FsZSA9IE1B WF9CTF9TQ0FMRV9MRVZFTDsKLQkJRFBVX0RFQlVHKCJzZXQgdG8gcGFuZWw6IGJsX3NjYWxlID0g JXUsIGJsX2xldmVsID0gJXVcbiIsCi0JCQlibF9jb25maWctPmJsX3NjYWxlLCBibF9jb25maWct PmJsX2xldmVsKTsKLQkJcmMgPSBjX2Nvbm4tPm9wcy5zZXRfYmFja2xpZ2h0KGRzaV9kaXNwbGF5 LAotCQkJCQkgICAgICAgYmxfY29uZmlnLT5ibF9sZXZlbCk7Ci0JfSBlbHNlIGlmIChpZHggPT0g Q09OTkVDVE9SX1BST1BfQURfQkxfU0NBTEUpIHsKLQkJYmxfY29uZmlnLT5ibF9zY2FsZV9hZCA9 IHZhbHVlOwotCQlpZiAodmFsdWUgPiBNQVhfQURfQkxfU0NBTEVfTEVWRUwpCi0JCQlibF9jb25m aWctPmJsX3NjYWxlX2FkID0gTUFYX0FEX0JMX1NDQUxFX0xFVkVMOwotCQlEUFVfREVCVUcoInNl dCB0byBwYW5lbDogYmxfc2NhbGVfYWQgPSAldSwgYmxfbGV2ZWwgPSAldVxuIiwKLQkJCWJsX2Nv bmZpZy0+Ymxfc2NhbGVfYWQsIGJsX2NvbmZpZy0+YmxfbGV2ZWwpOwotCQlyYyA9IGNfY29ubi0+ b3BzLnNldF9iYWNrbGlnaHQoZHNpX2Rpc3BsYXksCi0JCQkJCSAgICAgICBibF9jb25maWctPmJs X2xldmVsKTsKLQl9Ci0JcmV0dXJuIHJjOwotI2Vsc2UKLQlyZXR1cm4gMDsKLSNlbmRpZgotfQot Ci1zdGF0aWMgaW50IGRwdV9jb25uZWN0b3JfYXRvbWljX3NldF9wcm9wZXJ0eShzdHJ1Y3QgZHJt X2Nvbm5lY3RvciAqY29ubmVjdG9yLAotCQlzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqc3Rh dGUsCi0JCXN0cnVjdCBkcm1fcHJvcGVydHkgKnByb3BlcnR5LAotCQl1aW50NjRfdCB2YWwpCi17 Ci0Jc3RydWN0IGRwdV9jb25uZWN0b3IgKmNfY29ubjsKLQlzdHJ1Y3QgZHB1X2Nvbm5lY3Rvcl9z dGF0ZSAqY19zdGF0ZTsKLQlpbnQgaWR4LCByYzsKLQotCWlmICghY29ubmVjdG9yIHx8ICFzdGF0 ZSB8fCAhcHJvcGVydHkpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGFyZ3VtZW50KHMpLCBjb25u ICVwSywgc3RhdGUgJXBLLCBwcnAgJXBLXG4iLAotCQkJCWNvbm5lY3Rvciwgc3RhdGUsIHByb3Bl cnR5KTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JY19jb25uID0gdG9fZHB1X2Nvbm5lY3Rv cihjb25uZWN0b3IpOwotCWNfc3RhdGUgPSB0b19kcHVfY29ubmVjdG9yX3N0YXRlKHN0YXRlKTsK LQotCS8qIGdlbmVyaWMgcHJvcGVydHkgaGFuZGxpbmcgKi8KLQlyYyA9IG1zbV9wcm9wZXJ0eV9h dG9taWNfc2V0KCZjX2Nvbm4tPnByb3BlcnR5X2luZm8sCi0JCQkmY19zdGF0ZS0+cHJvcGVydHlf c3RhdGUsIHByb3BlcnR5LCB2YWwpOwotCWlmIChyYykKLQkJZ290byBlbmQ7Ci0KLQkvKiBjb25u ZWN0b3Itc3BlY2lmaWMgcHJvcGVydHkgaGFuZGxpbmcgKi8KLQlpZHggPSBtc21fcHJvcGVydHlf aW5kZXgoJmNfY29ubi0+cHJvcGVydHlfaW5mbywgcHJvcGVydHkpOwotCXN3aXRjaCAoaWR4KSB7 Ci0JY2FzZSBDT05ORUNUT1JfUFJPUF9PVVRfRkI6Ci0JCS8qIGNsZWFyIG9sZCBmYiwgaWYgcHJl c2VudCAqLwotCQlpZiAoY19zdGF0ZS0+b3V0X2ZiKQotCQkJX2RwdV9jb25uZWN0b3JfZGVzdHJv eV9mYihjX2Nvbm4sIGNfc3RhdGUpOwotCi0JCS8qIGNvbnZlcnQgZmIgdmFsIHRvIGRybSBmcmFt ZWJ1ZmZlciBhbmQgcHJlcGFyZSBpdCAqLwotCQljX3N0YXRlLT5vdXRfZmIgPQotCQkJZHJtX2Zy YW1lYnVmZmVyX2xvb2t1cChjb25uZWN0b3ItPmRldiwgTlVMTCwgdmFsKTsKLQkJaWYgKCFjX3N0 YXRlLT5vdXRfZmIgJiYgdmFsKSB7Ci0JCQlEUFVfRVJST1IoImZhaWxlZCB0byBsb29rIHVwIGZi ICVsbGRcbiIsIHZhbCk7Ci0JCQlyYyA9IC1FRkFVTFQ7Ci0JCX0gZWxzZSBpZiAoIWNfc3RhdGUt Pm91dF9mYiAmJiAhdmFsKSB7Ci0JCQlEUFVfREVCVUcoImNsZWFyZWQgZmJfaWRcbiIpOwotCQkJ cmMgPSAwOwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgQ09OTkVDVE9SX1BST1BfQkxfU0NBTEU6Ci0J Y2FzZSBDT05ORUNUT1JfUFJPUF9BRF9CTF9TQ0FMRToKLQkJcmMgPSBfZHB1X2Nvbm5lY3Rvcl91 cGRhdGVfYmxfc2NhbGUoY19jb25uLCBpZHgsIHZhbCk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0J CWJyZWFrOwotCX0KLQotCS8qIGNoZWNrIGZvciBjdXN0b20gcHJvcGVydHkgaGFuZGxpbmcgKi8K LQlpZiAoIXJjICYmIGNfY29ubi0+b3BzLnNldF9wcm9wZXJ0eSkgewotCQlyYyA9IGNfY29ubi0+ b3BzLnNldF9wcm9wZXJ0eShjb25uZWN0b3IsCi0JCQkJc3RhdGUsCi0JCQkJaWR4LAotCQkJCXZh bCwKLQkJCQljX2Nvbm4tPmRpc3BsYXkpOwotCi0JCS8qIHBvdGVudGlhbGx5IGNsZWFuIHVwIG91 dF9mYiBpZiByYyAhPSAwICovCi0JCWlmICgoaWR4ID09IENPTk5FQ1RPUl9QUk9QX09VVF9GQikg JiYgcmMpCi0JCQlfZHB1X2Nvbm5lY3Rvcl9kZXN0cm95X2ZiKGNfY29ubiwgY19zdGF0ZSk7Ci0J fQotZW5kOgotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBkcHVfY29ubmVjdG9yX3NldF9w cm9wZXJ0eShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAotCQlzdHJ1Y3QgZHJtX3By b3BlcnR5ICpwcm9wZXJ0eSwKLQkJdWludDY0X3QgdmFsKQotewotCWlmICghY29ubmVjdG9yKSB7 Ci0JCURQVV9FUlJPUigiaW52YWxpZCBjb25uZWN0b3JcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsK LQl9Ci0KLQlyZXR1cm4gZHB1X2Nvbm5lY3Rvcl9hdG9taWNfc2V0X3Byb3BlcnR5KGNvbm5lY3Rv ciwKLQkJCWNvbm5lY3Rvci0+c3RhdGUsIHByb3BlcnR5LCB2YWwpOwotfQotCi1zdGF0aWMgaW50 IGRwdV9jb25uZWN0b3JfYXRvbWljX2dldF9wcm9wZXJ0eShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAq Y29ubmVjdG9yLAotCQljb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqc3RhdGUsCi0J CXN0cnVjdCBkcm1fcHJvcGVydHkgKnByb3BlcnR5LAotCQl1aW50NjRfdCAqdmFsKQotewotCXN0 cnVjdCBkcHVfY29ubmVjdG9yICpjX2Nvbm47Ci0Jc3RydWN0IGRwdV9jb25uZWN0b3Jfc3RhdGUg KmNfc3RhdGU7Ci0JaW50IGlkeCwgcmMgPSAtRUlOVkFMOwotCi0JaWYgKCFjb25uZWN0b3IgfHwg IXN0YXRlKSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBhcmd1bWVudChzKSwgY29ubiAlcEssIHN0 YXRlICVwS1xuIiwKLQkJCQljb25uZWN0b3IsIHN0YXRlKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0J fQotCi0JY19jb25uID0gdG9fZHB1X2Nvbm5lY3Rvcihjb25uZWN0b3IpOwotCWNfc3RhdGUgPSB0 b19kcHVfY29ubmVjdG9yX3N0YXRlKHN0YXRlKTsKLQotCWlkeCA9IG1zbV9wcm9wZXJ0eV9pbmRl eCgmY19jb25uLT5wcm9wZXJ0eV9pbmZvLCBwcm9wZXJ0eSk7Ci0JLyogZ2V0IGNhY2hlZCBwcm9w ZXJ0eSB2YWx1ZSAqLwotCXJjID0gbXNtX3Byb3BlcnR5X2F0b21pY19nZXQoJmNfY29ubi0+cHJv cGVydHlfaW5mbywKLQkJCSZjX3N0YXRlLT5wcm9wZXJ0eV9zdGF0ZSwgcHJvcGVydHksIHZhbCk7 Ci0KLQkvKiBhbGxvdyBmb3IgY3VzdG9tIG92ZXJyaWRlICovCi0JaWYgKGNfY29ubi0+b3BzLmdl dF9wcm9wZXJ0eSkKLQkJcmMgPSBjX2Nvbm4tPm9wcy5nZXRfcHJvcGVydHkoY29ubmVjdG9yLAot CQkJCShzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqKXN0YXRlLAotCQkJCWlkeCwKLQkJCQl2 YWwsCi0JCQkJY19jb25uLT5kaXNwbGF5KTsKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBlbnVt IGRybV9jb25uZWN0b3Jfc3RhdHVzCi1kcHVfY29ubmVjdG9yX2RldGVjdChzdHJ1Y3QgZHJtX2Nv bm5lY3RvciAqY29ubmVjdG9yLCBib29sIGZvcmNlKQotewotCWVudW0gZHJtX2Nvbm5lY3Rvcl9z dGF0dXMgc3RhdHVzID0gY29ubmVjdG9yX3N0YXR1c191bmtub3duOwotCXN0cnVjdCBkcHVfY29u bmVjdG9yICpjX2Nvbm47Ci0KLQlpZiAoIWNvbm5lY3RvcikgewotCQlEUFVfRVJST1IoImludmFs aWQgY29ubmVjdG9yXG4iKTsKLQkJcmV0dXJuIHN0YXR1czsKLQl9Ci0KLQljX2Nvbm4gPSB0b19k cHVfY29ubmVjdG9yKGNvbm5lY3Rvcik7Ci0KLQlpZiAoY19jb25uLT5vcHMuZGV0ZWN0KQotCQlz dGF0dXMgPSBjX2Nvbm4tPm9wcy5kZXRlY3QoY29ubmVjdG9yLAotCQkJCWZvcmNlLAotCQkJCWNf Y29ubi0+ZGlzcGxheSk7Ci0KLQlyZXR1cm4gc3RhdHVzOwotfQotCi1pbnQgZHB1X2Nvbm5lY3Rv cl9nZXRfZHBtcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQotewotCXN0cnVjdCBk cHVfY29ubmVjdG9yICpjX2Nvbm47Ci0JaW50IHJjOwotCi0JaWYgKCFjb25uZWN0b3IpIHsKLQkJ RFBVX0RFQlVHKCJpbnZhbGlkIGNvbm5lY3RvclxuIik7Ci0JCXJldHVybiBEUk1fTU9ERV9EUE1T X09GRjsKLQl9Ci0KLQljX2Nvbm4gPSB0b19kcHVfY29ubmVjdG9yKGNvbm5lY3Rvcik7Ci0KLQlt dXRleF9sb2NrKCZjX2Nvbm4tPmxvY2spOwotCXJjID0gY19jb25uLT5kcG1zX21vZGU7Ci0JbXV0 ZXhfdW5sb2NrKCZjX2Nvbm4tPmxvY2spOwotCi0JcmV0dXJuIHJjOwotfQotCi1pbnQgZHB1X2Nv bm5lY3Rvcl9zZXRfcHJvcGVydHlfZm9yX2NvbW1pdChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29u bmVjdG9yLAotCQlzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqYXRvbWljX3N0YXRlLAotCQl1aW50 MzJfdCBwcm9wZXJ0eV9pZHgsIHVpbnQ2NF90IHZhbHVlKQotewotCXN0cnVjdCBkcm1fY29ubmVj dG9yX3N0YXRlICpzdGF0ZTsKLQlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpwcm9wZXJ0eTsKLQlzdHJ1 Y3QgZHB1X2Nvbm5lY3RvciAqY19jb25uOwotCi0JaWYgKCFjb25uZWN0b3IgfHwgIWF0b21pY19z dGF0ZSkgewotCQlEUFVfRVJST1IoImludmFsaWQgYXJndW1lbnQocyksIGNvbm4gJWQsIHN0YXRl ICVkXG4iLAotCQkJCWNvbm5lY3RvciAhPSBOVUxMLCBhdG9taWNfc3RhdGUgIT0gTlVMTCk7Ci0J CXJldHVybiAtRUlOVkFMOwotCX0KLQotCWNfY29ubiA9IHRvX2RwdV9jb25uZWN0b3IoY29ubmVj dG9yKTsKLQlwcm9wZXJ0eSA9IG1zbV9wcm9wZXJ0eV9pbmRleF90b19kcm1fcHJvcGVydHkoCi0J CQkmY19jb25uLT5wcm9wZXJ0eV9pbmZvLCBwcm9wZXJ0eV9pZHgpOwotCWlmICghcHJvcGVydHkp IHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIHByb3BlcnR5IGluZGV4ICVkXG4iLCBwcm9wZXJ0eV9p ZHgpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlzdGF0ZSA9IGRybV9hdG9taWNfZ2V0X2Nv bm5lY3Rvcl9zdGF0ZShhdG9taWNfc3RhdGUsIGNvbm5lY3Rvcik7Ci0JaWYgKElTX0VSUl9PUl9O VUxMKHN0YXRlKSkgewotCQlEUFVfRVJST1IoImZhaWxlZCB0byBnZXQgY29ubiAlZCBzdGF0ZVxu IiwKLQkJCQljb25uZWN0b3ItPmJhc2UuaWQpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQly ZXR1cm4gZHB1X2Nvbm5lY3Rvcl9hdG9taWNfc2V0X3Byb3BlcnR5KAotCQkJY29ubmVjdG9yLCBz dGF0ZSwgcHJvcGVydHksIHZhbHVlKTsKLX0KLQotI2lmZGVmIENPTkZJR19ERUJVR19GUwotLyoq Ci0gKiBkcHVfY29ubmVjdG9yX2luaXRfZGVidWdmcyAtIGluaXRpYWxpemUgY29ubmVjdG9yIGRl YnVnZnMKLSAqIEBjb25uZWN0b3I6IFBvaW50ZXIgdG8gZHJtIGNvbm5lY3RvcgotICovCi1zdGF0 aWMgaW50IGRwdV9jb25uZWN0b3JfaW5pdF9kZWJ1Z2ZzKHN0cnVjdCBkcm1fY29ubmVjdG9yICpj b25uZWN0b3IpCi17Ci0Jc3RydWN0IGRwdV9jb25uZWN0b3IgKmRwdV9jb25uZWN0b3I7Ci0KLQlp ZiAoIWNvbm5lY3RvciB8fCAhY29ubmVjdG9yLT5kZWJ1Z2ZzX2VudHJ5KSB7Ci0JCURQVV9FUlJP UigiaW52YWxpZCBjb25uZWN0b3JcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlkcHVf Y29ubmVjdG9yID0gdG9fZHB1X2Nvbm5lY3Rvcihjb25uZWN0b3IpOwotCi0JaWYgKCFkZWJ1Z2Zz X2NyZWF0ZV9ib29sKCJmYl9rbWFwIiwgMDYwMCwgY29ubmVjdG9yLT5kZWJ1Z2ZzX2VudHJ5LAot CQkJJmRwdV9jb25uZWN0b3ItPmZiX2ttYXApKSB7Ci0JCURQVV9FUlJPUigiZmFpbGVkIHRvIGNy ZWF0ZSBjb25uZWN0b3IgZmJfa21hcFxuIik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCXJl dHVybiAwOwotfQotI2Vsc2UKLXN0YXRpYyBpbnQgZHB1X2Nvbm5lY3Rvcl9pbml0X2RlYnVnZnMo c3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKLXsKLQlyZXR1cm4gMDsKLX0KLSNlbmRp ZgotCi1zdGF0aWMgaW50IGRwdV9jb25uZWN0b3JfbGF0ZV9yZWdpc3RlcihzdHJ1Y3QgZHJtX2Nv bm5lY3RvciAqY29ubmVjdG9yKQotewotCXJldHVybiBkcHVfY29ubmVjdG9yX2luaXRfZGVidWdm cyhjb25uZWN0b3IpOwotfQotCi1zdGF0aWMgdm9pZCBkcHVfY29ubmVjdG9yX2Vhcmx5X3VucmVn aXN0ZXIoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKLXsKLQkvKiBkZWJ1Z2ZzIHVu ZGVyIGNvbm5lY3Rvci0+ZGVidWdmcyBhcmUgZGVsZXRlZCBieSBkcm1fZGVidWdmcyAqLwotfQot Ci1zdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3JfZnVuY3MgZHB1X2Nvbm5lY3Rvcl9v cHMgPSB7Ci0JLnJlc2V0ID0gICAgICAgICAgICAgICAgICBkcHVfY29ubmVjdG9yX2F0b21pY19y ZXNldCwKLQkuZGV0ZWN0ID0gICAgICAgICAgICAgICAgIGRwdV9jb25uZWN0b3JfZGV0ZWN0LAot CS5kZXN0cm95ID0gICAgICAgICAgICAgICAgZHB1X2Nvbm5lY3Rvcl9kZXN0cm95LAotCS5maWxs X21vZGVzID0gICAgICAgICAgICAgZHJtX2hlbHBlcl9wcm9iZV9zaW5nbGVfY29ubmVjdG9yX21v ZGVzLAotCS5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0gZHB1X2Nvbm5lY3Rvcl9hdG9taWNfZHVw bGljYXRlX3N0YXRlLAotCS5hdG9taWNfZGVzdHJveV9zdGF0ZSA9ICAgZHB1X2Nvbm5lY3Rvcl9h dG9taWNfZGVzdHJveV9zdGF0ZSwKLQkuYXRvbWljX3NldF9wcm9wZXJ0eSA9ICAgIGRwdV9jb25u ZWN0b3JfYXRvbWljX3NldF9wcm9wZXJ0eSwKLQkuYXRvbWljX2dldF9wcm9wZXJ0eSA9ICAgIGRw dV9jb25uZWN0b3JfYXRvbWljX2dldF9wcm9wZXJ0eSwKLQkuc2V0X3Byb3BlcnR5ID0gICAgICAg ICAgIGRwdV9jb25uZWN0b3Jfc2V0X3Byb3BlcnR5LAotCS5sYXRlX3JlZ2lzdGVyID0gICAgICAg ICAgZHB1X2Nvbm5lY3Rvcl9sYXRlX3JlZ2lzdGVyLAotCS5lYXJseV91bnJlZ2lzdGVyID0gICAg ICAgZHB1X2Nvbm5lY3Rvcl9lYXJseV91bnJlZ2lzdGVyLAotfTsKLQotc3RhdGljIGludCBkcHVf Y29ubmVjdG9yX2dldF9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQotewot CXN0cnVjdCBkcHVfY29ubmVjdG9yICpjX2Nvbm47Ci0KLQlpZiAoIWNvbm5lY3RvcikgewotCQlE UFVfRVJST1IoImludmFsaWQgY29ubmVjdG9yXG4iKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JY19j b25uID0gdG9fZHB1X2Nvbm5lY3Rvcihjb25uZWN0b3IpOwotCWlmICghY19jb25uLT5vcHMuZ2V0 X21vZGVzKSB7Ci0JCURQVV9ERUJVRygibWlzc2luZyBnZXRfbW9kZXMgY2FsbGJhY2tcbiIpOwot CQlyZXR1cm4gMDsKLQl9Ci0KLQlyZXR1cm4gY19jb25uLT5vcHMuZ2V0X21vZGVzKGNvbm5lY3Rv ciwgY19jb25uLT5kaXNwbGF5KTsKLX0KLQotc3RhdGljIGVudW0gZHJtX21vZGVfc3RhdHVzCi1k cHVfY29ubmVjdG9yX21vZGVfdmFsaWQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwK LQkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCi17Ci0Jc3RydWN0IGRwdV9jb25uZWN0 b3IgKmNfY29ubjsKLQotCWlmICghY29ubmVjdG9yIHx8ICFtb2RlKSB7Ci0JCURQVV9FUlJPUigi aW52YWxpZCBhcmd1bWVudChzKSwgY29ubiAlcEssIG1vZGUgJXBLXG4iLAotCQkJCWNvbm5lY3Rv ciwgbW9kZSk7Ci0JCXJldHVybiBNT0RFX0VSUk9SOwotCX0KLQotCWNfY29ubiA9IHRvX2RwdV9j b25uZWN0b3IoY29ubmVjdG9yKTsKLQotCWlmIChjX2Nvbm4tPm9wcy5tb2RlX3ZhbGlkKQotCQly ZXR1cm4gY19jb25uLT5vcHMubW9kZV92YWxpZChjb25uZWN0b3IsIG1vZGUsIGNfY29ubi0+ZGlz cGxheSk7Ci0KLQkvKiBhc3N1bWUgYWxsIG1vZGVzIG9rYXkgYnkgZGVmYXVsdCAqLwotCXJldHVy biBNT0RFX09LOwotfQotCi1zdGF0aWMgc3RydWN0IGRybV9lbmNvZGVyICoKLWRwdV9jb25uZWN0 b3JfYmVzdF9lbmNvZGVyKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCi17Ci0Jc3Ry dWN0IGRwdV9jb25uZWN0b3IgKmNfY29ubiA9IHRvX2RwdV9jb25uZWN0b3IoY29ubmVjdG9yKTsK LQotCWlmICghY29ubmVjdG9yKSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBjb25uZWN0b3JcbiIp OwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQkvKgotCSAqIFRoaXMgaXMgdHJ1ZSBmb3Igbm93LCBy ZXZpc2l0IHRoaXMgY29kZSB3aGVuIG11bHRpcGxlIGVuY29kZXJzIGFyZQotCSAqIHN1cHBvcnRl ZC4KLQkgKi8KLQlyZXR1cm4gY19jb25uLT5lbmNvZGVyOwotfQotCi1zdGF0aWMgY29uc3Qgc3Ry dWN0IGRybV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzIGRwdV9jb25uZWN0b3JfaGVscGVyX29wcyA9 IHsKLQkuZ2V0X21vZGVzID0gICAgZHB1X2Nvbm5lY3Rvcl9nZXRfbW9kZXMsCi0JLm1vZGVfdmFs aWQgPSAgIGRwdV9jb25uZWN0b3JfbW9kZV92YWxpZCwKLQkuYmVzdF9lbmNvZGVyID0gZHB1X2Nv bm5lY3Rvcl9iZXN0X2VuY29kZXIsCi19OwotCi1zdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqZHB1X2Nv bm5lY3Rvcl9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCXN0cnVjdCBkcm1fZW5jb2Rl ciAqZW5jb2RlciwKLQkJc3RydWN0IGRybV9wYW5lbCAqcGFuZWwsCi0JCXZvaWQgKmRpc3BsYXks Ci0JCWNvbnN0IHN0cnVjdCBkcHVfY29ubmVjdG9yX29wcyAqb3BzLAotCQlpbnQgY29ubmVjdG9y X3BvbGwsCi0JCWludCBjb25uZWN0b3JfdHlwZSkKLXsKLQlzdHJ1Y3QgbXNtX2RybV9wcml2YXRl ICpwcml2OwotCXN0cnVjdCBkcHVfa21zICpkcHVfa21zOwotCXN0cnVjdCBkcHVfa21zX2luZm8g KmluZm87Ci0Jc3RydWN0IGRwdV9jb25uZWN0b3IgKmNfY29ubiA9IE5VTEw7Ci0Jc3RydWN0IG1z bV9kaXNwbGF5X2luZm8gZGlzcGxheV9pbmZvOwotCWludCByYzsKLQotCWlmICghZGV2IHx8ICFk ZXYtPmRldl9wcml2YXRlIHx8ICFlbmNvZGVyKSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBhcmd1 bWVudChzKSwgZGV2ICVwSywgZW5jICVwS1xuIiwKLQkJCQlkZXYsIGVuY29kZXIpOwotCQlyZXR1 cm4gRVJSX1BUUigtRUlOVkFMKTsKLQl9Ci0KLQlwcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlp ZiAoIXByaXYtPmttcykgewotCQlEUFVfRVJST1IoImludmFsaWQga21zIHJlZmVyZW5jZVxuIik7 Ci0JCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwotCX0KLQotCWNfY29ubiA9IGt6YWxsb2Moc2l6 ZW9mKCpjX2Nvbm4pLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWNfY29ubikgewotCQlEUFVfRVJST1Io ImZhaWxlZCB0byBhbGxvYyBkcHUgY29ubmVjdG9yXG4iKTsKLQkJcmV0dXJuIEVSUl9QVFIoLUVO T01FTSk7Ci0JfQotCi0JbWVtc2V0KCZkaXNwbGF5X2luZm8sIDAsIHNpemVvZihkaXNwbGF5X2lu Zm8pKTsKLQotCXJjID0gZHJtX2Nvbm5lY3Rvcl9pbml0KGRldiwKLQkJCSZjX2Nvbm4tPmJhc2Us Ci0JCQkmZHB1X2Nvbm5lY3Rvcl9vcHMsCi0JCQljb25uZWN0b3JfdHlwZSk7Ci0JaWYgKHJjKQot CQlnb3RvIGVycm9yX2ZyZWVfY29ubjsKLQotCXNwaW5fbG9ja19pbml0KCZjX2Nvbm4tPmV2ZW50 X2xvY2spOwotCi0JY19jb25uLT5jb25uZWN0b3JfdHlwZSA9IGNvbm5lY3Rvcl90eXBlOwotCWNf Y29ubi0+ZW5jb2RlciA9IGVuY29kZXI7Ci0JY19jb25uLT5wYW5lbCA9IHBhbmVsOwotCWNfY29u bi0+ZGlzcGxheSA9IGRpc3BsYXk7Ci0KLQljX2Nvbm4tPmRwbXNfbW9kZSA9IERSTV9NT0RFX0RQ TVNfT047Ci0JY19jb25uLT5scF9tb2RlID0gMDsKLQljX2Nvbm4tPmxhc3RfcGFuZWxfcG93ZXJf bW9kZSA9IERQVV9NT0RFX0RQTVNfT047Ci0KLQlkcHVfa21zID0gdG9fZHB1X2ttcyhwcml2LT5r bXMpOwotCi0JaWYgKG9wcykKLQkJY19jb25uLT5vcHMgPSAqb3BzOwotCi0JY19jb25uLT5iYXNl LmhlbHBlcl9wcml2YXRlID0gJmRwdV9jb25uZWN0b3JfaGVscGVyX29wczsKLQljX2Nvbm4tPmJh c2UucG9sbGVkID0gY29ubmVjdG9yX3BvbGw7Ci0JY19jb25uLT5iYXNlLmludGVybGFjZV9hbGxv d2VkID0gMDsKLQljX2Nvbm4tPmJhc2UuZG91Ymxlc2Nhbl9hbGxvd2VkID0gMDsKLQotCXNucHJp bnRmKGNfY29ubi0+bmFtZSwKLQkJCURQVV9DT05ORUNUT1JfTkFNRV9TSVpFLAotCQkJImNvbm4l dSIsCi0JCQljX2Nvbm4tPmJhc2UuYmFzZS5pZCk7Ci0KLQltdXRleF9pbml0KCZjX2Nvbm4tPmxv Y2spOwotCi0JcmMgPSBkcm1fbW9kZV9jb25uZWN0b3JfYXR0YWNoX2VuY29kZXIoJmNfY29ubi0+ YmFzZSwgZW5jb2Rlcik7Ci0JaWYgKHJjKSB7Ci0JCURQVV9FUlJPUigiZmFpbGVkIHRvIGF0dGFj aCBlbmNvZGVyIHRvIGNvbm5lY3RvciwgJWRcbiIsIHJjKTsKLQkJZ290byBlcnJvcl9jbGVhbnVw X2Nvbm47Ci0JfQotCi0jaWZkZWYgQ09ORklHX0RSTV9NU01fRFNJX1NUQUdJTkcKLQlyYyA9IGRw dV9iYWNrbGlnaHRfc2V0dXAoY19jb25uLCBkZXYpOwotCWlmIChyYykgewotCQlEUFVfRVJST1Io ImZhaWxlZCB0byBzZXR1cCBiYWNrbGlnaHQsIHJjPSVkXG4iLCByYyk7Ci0JCWdvdG8gZXJyb3Jf Y2xlYW51cF9jb25uOwotCX0KLSNlbmRpZgotCi0JLyogY3JlYXRlIHByb3BlcnRpZXMgKi8KLQlt c21fcHJvcGVydHlfaW5pdCgmY19jb25uLT5wcm9wZXJ0eV9pbmZvLCAmY19jb25uLT5iYXNlLmJh c2UsIGRldiwKLQkJCXByaXYtPmNvbm5fcHJvcGVydHksIGNfY29ubi0+cHJvcGVydHlfZGF0YSwK LQkJCUNPTk5FQ1RPUl9QUk9QX0NPVU5ULCBDT05ORUNUT1JfUFJPUF9CTE9CQ09VTlQsCi0JCQlz aXplb2Yoc3RydWN0IGRwdV9jb25uZWN0b3Jfc3RhdGUpKTsKLQotCWlmIChjX2Nvbm4tPm9wcy5w b3N0X2luaXQpIHsKLQkJaW5mbyA9IGttYWxsb2Moc2l6ZW9mKCppbmZvKSwgR0ZQX0tFUk5FTCk7 Ci0JCWlmICghaW5mbykgewotCQkJRFBVX0VSUk9SKCJmYWlsZWQgdG8gYWxsb2NhdGUgaW5mbyBi dWZmZXJcbiIpOwotCQkJcmMgPSAtRU5PTUVNOwotCQkJZ290byBlcnJvcl9jbGVhbnVwX2Nvbm47 Ci0JCX0KLQotCQlkcHVfa21zX2luZm9fcmVzZXQoaW5mbyk7Ci0JCXJjID0gY19jb25uLT5vcHMu cG9zdF9pbml0KCZjX2Nvbm4tPmJhc2UsIGluZm8sIGRpc3BsYXkpOwotCQlpZiAocmMpIHsKLQkJ CURQVV9FUlJPUigicG9zdC1pbml0IGZhaWxlZCwgJWRcbiIsIHJjKTsKLQkJCWtmcmVlKGluZm8p OwotCQkJZ290byBlcnJvcl9jbGVhbnVwX2Nvbm47Ci0JCX0KLQotCQltc21fcHJvcGVydHlfaW5z dGFsbF9ibG9iKCZjX2Nvbm4tPnByb3BlcnR5X2luZm8sCi0JCQkJImNhcGFiaWxpdGllcyIsCi0J CQkJRFJNX01PREVfUFJPUF9JTU1VVEFCTEUsCi0JCQkJQ09OTkVDVE9SX1BST1BfRFBVX0lORk8p OwotCi0JCW1zbV9wcm9wZXJ0eV9zZXRfYmxvYigmY19jb25uLT5wcm9wZXJ0eV9pbmZvLAotCQkJ CSZjX2Nvbm4tPmJsb2JfY2FwcywKLQkJCQlEUFVfS01TX0lORk9fREFUQShpbmZvKSwKLQkJCQlE UFVfS01TX0lORk9fREFUQUxFTihpbmZvKSwKLQkJCQlDT05ORUNUT1JfUFJPUF9EUFVfSU5GTyk7 Ci0JCWtmcmVlKGluZm8pOwotCX0KLQotI2lmZGVmIENPTkZJR19EUk1fTVNNX0RTSV9TVEFHSU5H Ci0JaWYgKGNvbm5lY3Rvcl90eXBlID09IERSTV9NT0RFX0NPTk5FQ1RPUl9EU0kpIHsKLQkJc3Ry dWN0IGRzaV9kaXNwbGF5ICpkc2lfZGlzcGxheTsKLQotCQlkc2lfZGlzcGxheSA9IChzdHJ1Y3Qg ZHNpX2Rpc3BsYXkgKikoZGlzcGxheSk7Ci0JCWlmIChkc2lfZGlzcGxheSAmJiBkc2lfZGlzcGxh eS0+cGFuZWwgJiYKLQkJCWRzaV9kaXNwbGF5LT5wYW5lbC0+aGRyX3Byb3BzLmhkcl9lbmFibGVk ID09IHRydWUpIHsKLQkJCW1zbV9wcm9wZXJ0eV9pbnN0YWxsX2Jsb2IoJmNfY29ubi0+cHJvcGVy dHlfaW5mbywKLQkJCQkiaGRyX3Byb3BlcnRpZXMiLAotCQkJCURSTV9NT0RFX1BST1BfSU1NVVRB QkxFLAotCQkJCUNPTk5FQ1RPUl9QUk9QX0hEUl9JTkZPKTsKLQotCQkJbXNtX3Byb3BlcnR5X3Nl dF9ibG9iKCZjX2Nvbm4tPnByb3BlcnR5X2luZm8sCi0JCQkJJmNfY29ubi0+YmxvYl9oZHIsCi0J CQkJJmRzaV9kaXNwbGF5LT5wYW5lbC0+aGRyX3Byb3BzLAotCQkJCXNpemVvZihkc2lfZGlzcGxh eS0+cGFuZWwtPmhkcl9wcm9wcyksCi0JCQkJQ09OTkVDVE9SX1BST1BfSERSX0lORk8pOwotCQl9 Ci0JfQotCi0JLyogaW5zdGFsbCBQUF9ESVRIRVIgcHJvcGVydGllcyAqLwotCV9kcHVfY29ubmVj dG9yX2luc3RhbGxfZGl0aGVyX3Byb3BlcnR5KGRldiwgZHB1X2ttcywgY19jb25uKTsKLQotCW1z bV9wcm9wZXJ0eV9pbnN0YWxsX3JhbmdlKCZjX2Nvbm4tPnByb3BlcnR5X2luZm8sICJibF9zY2Fs ZSIsCi0JCTB4MCwgMCwgTUFYX0JMX1NDQUxFX0xFVkVMLCBNQVhfQkxfU0NBTEVfTEVWRUwsCi0J CUNPTk5FQ1RPUl9QUk9QX0JMX1NDQUxFKTsKLQotCW1zbV9wcm9wZXJ0eV9pbnN0YWxsX3Jhbmdl KCZjX2Nvbm4tPnByb3BlcnR5X2luZm8sICJhZF9ibF9zY2FsZSIsCi0JCTB4MCwgMCwgTUFYX0FE X0JMX1NDQUxFX0xFVkVMLCBNQVhfQURfQkxfU0NBTEVfTEVWRUwsCi0JCUNPTk5FQ1RPUl9QUk9Q X0FEX0JMX1NDQUxFKTsKLSNlbmRpZgotCi0JLyogZW51bS9iaXRtYXNrIHByb3BlcnRpZXMgKi8K LQltc21fcHJvcGVydHlfaW5zdGFsbF9lbnVtKCZjX2Nvbm4tPnByb3BlcnR5X2luZm8sICJ0b3Bv bG9neV9uYW1lIiwKLQkJCURSTV9NT0RFX1BST1BfSU1NVVRBQkxFLCAwLCBlX3RvcG9sb2d5X25h bWUsCi0JCQlBUlJBWV9TSVpFKGVfdG9wb2xvZ3lfbmFtZSksCi0JCQlDT05ORUNUT1JfUFJPUF9U T1BPTE9HWV9OQU1FKTsKLQltc21fcHJvcGVydHlfaW5zdGFsbF9lbnVtKCZjX2Nvbm4tPnByb3Bl cnR5X2luZm8sICJ0b3BvbG9neV9jb250cm9sIiwKLQkJCTAsIDEsIGVfdG9wb2xvZ3lfY29udHJv bCwKLQkJCUFSUkFZX1NJWkUoZV90b3BvbG9neV9jb250cm9sKSwKLQkJCUNPTk5FQ1RPUl9QUk9Q X1RPUE9MT0dZX0NPTlRST0wpOwotCW1zbV9wcm9wZXJ0eV9pbnN0YWxsX2VudW0oJmNfY29ubi0+ cHJvcGVydHlfaW5mbywgIkxQIiwKLQkJCTAsIDAsIGVfcG93ZXJfbW9kZSwKLQkJCUFSUkFZX1NJ WkUoZV9wb3dlcl9tb2RlKSwKLQkJCUNPTk5FQ1RPUl9QUk9QX0xQKTsKLQotCXJjID0gbXNtX3By b3BlcnR5X2luc3RhbGxfZ2V0X3N0YXR1cygmY19jb25uLT5wcm9wZXJ0eV9pbmZvKTsKLQlpZiAo cmMpIHsKLQkJRFBVX0VSUk9SKCJmYWlsZWQgdG8gY3JlYXRlIG9uZSBvciBtb3JlIHByb3BlcnRp ZXNcbiIpOwotCQlnb3RvIGVycm9yX2Rlc3Ryb3lfcHJvcGVydHk7Ci0JfQotCi0JRFBVX0RFQlVH KCJjb25uZWN0b3IgJWQgYXR0YWNoIGVuY29kZXIgJWRcbiIsCi0JCQljX2Nvbm4tPmJhc2UuYmFz ZS5pZCwgZW5jb2Rlci0+YmFzZS5pZCk7Ci0KLQlwcml2LT5jb25uZWN0b3JzW3ByaXYtPm51bV9j b25uZWN0b3JzKytdID0gJmNfY29ubi0+YmFzZTsKLQotCXJldHVybiAmY19jb25uLT5iYXNlOwot Ci1lcnJvcl9kZXN0cm95X3Byb3BlcnR5OgotCWlmIChjX2Nvbm4tPmJsb2JfY2FwcykKLQkJZHJt X3Byb3BlcnR5X2Jsb2JfcHV0KGNfY29ubi0+YmxvYl9jYXBzKTsKLQlpZiAoY19jb25uLT5ibG9i X2hkcikKLQkJZHJtX3Byb3BlcnR5X2Jsb2JfcHV0KGNfY29ubi0+YmxvYl9oZHIpOwotCWlmIChj X2Nvbm4tPmJsb2JfZGl0aGVyKQotCQlkcm1fcHJvcGVydHlfYmxvYl9wdXQoY19jb25uLT5ibG9i X2RpdGhlcik7Ci0KLQltc21fcHJvcGVydHlfZGVzdHJveSgmY19jb25uLT5wcm9wZXJ0eV9pbmZv KTsKLWVycm9yX2NsZWFudXBfY29ubjoKLQltdXRleF9kZXN0cm95KCZjX2Nvbm4tPmxvY2spOwot CWRybV9jb25uZWN0b3JfY2xlYW51cCgmY19jb25uLT5iYXNlKTsKLWVycm9yX2ZyZWVfY29ubjoK LQlrZnJlZShjX2Nvbm4pOwotCi0JcmV0dXJuIEVSUl9QVFIocmMpOwotfQotCi1pbnQgZHB1X2Nv bm5lY3Rvcl9yZWdpc3Rlcl9jdXN0b21fZXZlbnQoc3RydWN0IGRwdV9rbXMgKmttcywKLQkJc3Ry dWN0IGRybV9jb25uZWN0b3IgKmNvbm5fZHJtLCB1MzIgZXZlbnQsIGJvb2wgdmFsKQotewotCWlu dCByZXQgPSAtRUlOVkFMOwotCi0Jc3dpdGNoIChldmVudCkgewotCWNhc2UgRFJNX0VWRU5UX1NZ U19CQUNLTElHSFQ6Ci0JCXJldCA9IDA7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWJyZWFrOwot CX0KLQlyZXR1cm4gcmV0OwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNw L2RwdTEvZHB1X2Nvbm5lY3Rvci5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1 X2Nvbm5lY3Rvci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZDUxNmZiLi4wMDAw MDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jb25uZWN0b3IuaAor KysgL2Rldi9udWxsCkBAIC0xLDU1NSArMCwwIEBACi0vKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAx OCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhp cyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v ciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgdmVyc2lvbiAyIGFuZAotICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5 IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lU SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgot ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg U2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K LSAqLwotCi0jaWZuZGVmIF9EUFVfQ09OTkVDVE9SX0hfCi0jZGVmaW5lIF9EUFVfQ09OTkVDVE9S X0hfCi0KLSNpbmNsdWRlIDx1YXBpL2RybS9tc21fZHJtX3BwLmg+Ci0jaW5jbHVkZSA8ZHJtL2Ry bVAuaD4KLSNpbmNsdWRlIDxkcm0vZHJtX2F0b21pYy5oPgotI2luY2x1ZGUgPGRybS9kcm1fcGFu ZWwuaD4KLQotI2luY2x1ZGUgIm1zbV9kcnYuaCIKLSNpbmNsdWRlICJtc21fcHJvcC5oIgotI2lu Y2x1ZGUgImRwdV9rbXMuaCIKLQotI2RlZmluZSBEUFVfQ09OTkVDVE9SX05BTUVfU0laRQkxNgot Ci1zdHJ1Y3QgZHB1X2Nvbm5lY3RvcjsKLXN0cnVjdCBkcHVfY29ubmVjdG9yX3N0YXRlOwotCi0v KioKLSAqIHN0cnVjdCBkcHVfY29ubmVjdG9yX29wcyAtIGNhbGxiYWNrIGZ1bmN0aW9ucyBmb3Ig Z2VuZXJpYyBkcHUgY29ubmVjdG9yCi0gKiBJbmRpdmlkdWFsIGNhbGxiYWNrcyBkb2N1bWVudGVk IGJlbG93LgotICovCi1zdHJ1Y3QgZHB1X2Nvbm5lY3Rvcl9vcHMgewotCS8qKgotCSAqIHBvc3Rf aW5pdCAtIHBlcmZvcm0gYWRkaXRpb25hbCBpbml0aWFsaXphdGlvbiBzdGVwcwotCSAqIEBjb25u ZWN0b3I6IFBvaW50ZXIgdG8gZHJtIGNvbm5lY3RvciBzdHJ1Y3R1cmUKLQkgKiBAaW5mbzogUG9p bnRlciB0byBkcHUgY29ubmVjdG9yIGluZm8gc3RydWN0dXJlCi0JICogQGRpc3BsYXk6IFBvaW50 ZXIgdG8gcHJpdmF0ZSBkaXNwbGF5IGhhbmRsZQotCSAqIFJldHVybnM6IFplcm8gb24gc3VjY2Vz cwotCSAqLwotCWludCAoKnBvc3RfaW5pdCkoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rv ciwKLQkJCXZvaWQgKmluZm8sCi0JCQl2b2lkICpkaXNwbGF5KTsKLQotCS8qKgotCSAqIGRldGVj dCAtIGRldGVybWluZSBpZiBjb25uZWN0b3IgaXMgY29ubmVjdGVkCi0JICogQGNvbm5lY3Rvcjog UG9pbnRlciB0byBkcm0gY29ubmVjdG9yIHN0cnVjdHVyZQotCSAqIEBmb3JjZTogRm9yY2UgZGV0 ZWN0IHNldHRpbmcgZnJvbSBkcm0gZnJhbWV3b3JrCi0JICogQGRpc3BsYXk6IFBvaW50ZXIgdG8g cHJpdmF0ZSBkaXNwbGF5IGhhbmRsZQotCSAqIFJldHVybnM6IENvbm5lY3RvciAnaXMgY29ubmVj dGVkJyBzdGF0dXMKLQkgKi8KLQllbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzICgqZGV0ZWN0KShz dHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAotCQkJYm9vbCBmb3JjZSwKLQkJCXZvaWQg KmRpc3BsYXkpOwotCi0JLyoqCi0JICogZ2V0X21vZGVzIC0gYWRkIGRybSBtb2RlcyB2aWEgZHJt X21vZGVfcHJvYmVkX2FkZCgpCi0JICogQGNvbm5lY3RvcjogUG9pbnRlciB0byBkcm0gY29ubmVj dG9yIHN0cnVjdHVyZQotCSAqIEBkaXNwbGF5OiBQb2ludGVyIHRvIHByaXZhdGUgZGlzcGxheSBo YW5kbGUKLQkgKiBSZXR1cm5zOiBOdW1iZXIgb2YgbW9kZXMgYWRkZWQKLQkgKi8KLQlpbnQgKCpn ZXRfbW9kZXMpKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCi0JCQl2b2lkICpkaXNw bGF5KTsKLQotCS8qKgotCSAqIHB1dF9tb2RlcyAtIGZyZWUgdXAgZHJtIG1vZGVzIG9mIHRoZSBj b25uZWN0b3IKLQkgKiBAY29ubmVjdG9yOiBQb2ludGVyIHRvIGRybSBjb25uZWN0b3Igc3RydWN0 dXJlCi0JICogQGRpc3BsYXk6IFBvaW50ZXIgdG8gcHJpdmF0ZSBkaXNwbGF5IGhhbmRsZQotCSAq LwotCXZvaWQgKCpwdXRfbW9kZXMpKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCi0J CQl2b2lkICpkaXNwbGF5KTsKLQotCS8qKgotCSAqIHVwZGF0ZV9wcHMgLSB1cGRhdGUgcHBzIGNv bW1hbmQgZm9yIHRoZSBkaXNwbGF5IHBhbmVsCi0JICogQHBwc19jbWQ6IFBvaW50ZXIgdG8gcHBz IGNvbW1hbmQKLQkgKiBAZGlzcGxheTogUG9pbnRlciB0byBwcml2YXRlIGRpc3BsYXkgaGFuZGxl Ci0JICogUmV0dXJuczogWmVybyBvbiBzdWNjZXNzCi0JICovCi0JaW50ICgqdXBkYXRlX3Bwcyko Y2hhciAqcHBzX2NtZCwgdm9pZCAqZGlzcGxheSk7Ci0KLQkvKioKLQkgKiBtb2RlX3ZhbGlkIC0g ZGV0ZXJtaW5lIGlmIHNwZWNpZmllZCBtb2RlIGlzIHZhbGlkCi0JICogQGNvbm5lY3RvcjogUG9p bnRlciB0byBkcm0gY29ubmVjdG9yIHN0cnVjdHVyZQotCSAqIEBtb2RlOiBQb2ludGVyIHRvIGRy bSBtb2RlIHN0cnVjdHVyZQotCSAqIEBkaXNwbGF5OiBQb2ludGVyIHRvIHByaXZhdGUgZGlzcGxh eSBoYW5kbGUKLQkgKiBSZXR1cm5zOiBWYWxpZGl0eSBzdGF0dXMgZm9yIHNwZWNpZmllZCBtb2Rl Ci0JICovCi0JZW51bSBkcm1fbW9kZV9zdGF0dXMgKCptb2RlX3ZhbGlkKShzdHJ1Y3QgZHJtX2Nv bm5lY3RvciAqY29ubmVjdG9yLAotCQkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCi0J CQl2b2lkICpkaXNwbGF5KTsKLQotCS8qKgotCSAqIHNldF9wcm9wZXJ0eSAtIHNldCBwcm9wZXJ0 eSB2YWx1ZQotCSAqIEBjb25uZWN0b3I6IFBvaW50ZXIgdG8gZHJtIGNvbm5lY3RvciBzdHJ1Y3R1 cmUKLQkgKiBAc3RhdGU6IFBvaW50ZXIgdG8gZHJtIGNvbm5lY3RvciBzdGF0ZSBzdHJ1Y3R1cmUK LQkgKiBAcHJvcGVydHlfaW5kZXg6IERSTSBwcm9wZXJ0eSBpbmRleAotCSAqIEB2YWx1ZTogSW5j b21pbmcgcHJvcGVydHkgdmFsdWUKLQkgKiBAZGlzcGxheTogUG9pbnRlciB0byBwcml2YXRlIGRp c3BsYXkgc3RydWN0dXJlCi0JICogUmV0dXJuczogWmVybyBvbiBzdWNjZXNzCi0JICovCi0JaW50 ICgqc2V0X3Byb3BlcnR5KShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAotCQkJc3Ry dWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKnN0YXRlLAotCQkJaW50IHByb3BlcnR5X2luZGV4LAot CQkJdWludDY0X3QgdmFsdWUsCi0JCQl2b2lkICpkaXNwbGF5KTsKLQotCS8qKgotCSAqIGdldF9w cm9wZXJ0eSAtIGdldCBwcm9wZXJ0eSB2YWx1ZQotCSAqIEBjb25uZWN0b3I6IFBvaW50ZXIgdG8g ZHJtIGNvbm5lY3RvciBzdHJ1Y3R1cmUKLQkgKiBAc3RhdGU6IFBvaW50ZXIgdG8gZHJtIGNvbm5l Y3RvciBzdGF0ZSBzdHJ1Y3R1cmUKLQkgKiBAcHJvcGVydHlfaW5kZXg6IERSTSBwcm9wZXJ0eSBp bmRleAotCSAqIEB2YWx1ZTogUG9pbnRlciB0byB2YXJpYWJsZSBmb3IgYWNjZXB0aW5nIHByb3Bl cnR5IHZhbHVlCi0JICogQGRpc3BsYXk6IFBvaW50ZXIgdG8gcHJpdmF0ZSBkaXNwbGF5IHN0cnVj dHVyZQotCSAqIFJldHVybnM6IFplcm8gb24gc3VjY2VzcwotCSAqLwotCWludCAoKmdldF9wcm9w ZXJ0eSkoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKLQkJCXN0cnVjdCBkcm1fY29u bmVjdG9yX3N0YXRlICpzdGF0ZSwKLQkJCWludCBwcm9wZXJ0eV9pbmRleCwKLQkJCXVpbnQ2NF90 ICp2YWx1ZSwKLQkJCXZvaWQgKmRpc3BsYXkpOwotCi0JLyoqCi0JICogZ2V0X2luZm8gLSBnZXQg ZGlzcGxheSBpbmZvcm1hdGlvbgotCSAqIEBpbmZvOiBQb2ludGVyIHRvIG1zbSBkaXNwbGF5IGlu Zm8gc3RydWN0dXJlCi0JICogQGRpc3BsYXk6IFBvaW50ZXIgdG8gcHJpdmF0ZSBkaXNwbGF5IHN0 cnVjdHVyZQotCSAqIFJldHVybnM6IFplcm8gb24gc3VjY2VzcwotCSAqLwotCWludCAoKmdldF9p bmZvKShzdHJ1Y3QgbXNtX2Rpc3BsYXlfaW5mbyAqaW5mbywgdm9pZCAqZGlzcGxheSk7Ci0KLQkv KioKLQkgKiBnZXRfbW9kZV9pbmZvIC0gcmV0cmlldmUgbW9kZSBpbmZvcm1hdGlvbgotCSAqIEBk cm1fbW9kZTogRGlzcGxheSBtb2RlIHNldCBmb3IgdGhlIGRpc3BsYXkKLQkgKiBAbW9kZV9pbmZv OiBPdXQgcGFyYW1ldGVyLiBpbmZvcm1hdGlvbiBvZiB0aGUgZGlzcGxheSBtb2RlCi0JICogQG1h eF9taXhlcl93aWR0aDogbWF4IHdpZHRoIHN1cHBvcnRlZCBieSBIVyBsYXllciBtaXhlcgotCSAq IFJldHVybnM6IFplcm8gb24gc3VjY2VzcwotCSAqLwotCWludCAoKmdldF9tb2RlX2luZm8pKGNv bnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpkcm1fbW9kZSwKLQkJCXN0cnVjdCBtc21fbW9k ZV9pbmZvICptb2RlX2luZm8sCi0JCQl1MzIgbWF4X21peGVyX3dpZHRoKTsKLQotCS8qKgotCSAq IGVuYWJsZV9ldmVudCAtIG5vdGlmeSBkaXNwbGF5IG9mIGV2ZW50IHJlZ2lzdHJhdGlvbi91bnJl Z2lzdHJhdGlvbgotCSAqIEBjb25uZWN0b3I6IFBvaW50ZXIgdG8gZHJtIGNvbm5lY3RvciBzdHJ1 Y3R1cmUKLQkgKiBAZXZlbnRfaWR4OiBEUFUgY29ubmVjdG9yIGV2ZW50IGluZGV4Ci0JICogQGVu YWJsZTogV2hldGhlciB0aGUgZXZlbnQgaXMgYmVpbmcgZW5hYmxlZC9kaXNhYmxlZAotCSAqIEBk aXNwbGF5OiBQb2ludGVyIHRvIHByaXZhdGUgZGlzcGxheSBzdHJ1Y3R1cmUKLQkgKi8KLQl2b2lk ICgqZW5hYmxlX2V2ZW50KShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAotCQkJdWlu dDMyX3QgZXZlbnRfaWR4LCBib29sIGVuYWJsZSwgdm9pZCAqZGlzcGxheSk7Ci0KLQlpbnQgKCpz ZXRfYmFja2xpZ2h0KSh2b2lkICpkaXNwbGF5LCB1MzIgYmxfbHZsKTsKLQotCS8qKgotCSAqIHNv ZnRfcmVzZXQgLSBwZXJmb3JtIGEgc29mdCByZXNldCBvbiB0aGUgY29ubmVjdG9yCi0JICogQGRp c3BsYXk6IFBvaW50ZXIgdG8gcHJpdmF0ZSBkaXNwbGF5IHN0cnVjdHVyZQotCSAqIFJldHVybjog WmVybyBvbiBzdWNjZXNzLCAtRVJST1Igb3RoZXJ3aXNlCi0JICovCi0JaW50ICgqc29mdF9yZXNl dCkodm9pZCAqZGlzcGxheSk7Ci0KLQkvKioKLQkgKiBwcmVfa2lja29mZiAtIHRyaWdnZXIgZGlz cGxheSB0byBwcm9ncmFtIGtpY2tvZmYtdGltZSBmZWF0dXJlcwotCSAqIEBjb25uZWN0b3I6IFBv aW50ZXIgdG8gZHJtIGNvbm5lY3RvciBzdHJ1Y3R1cmUKLQkgKiBAZGlzcGxheTogUG9pbnRlciB0 byBwcml2YXRlIGRpc3BsYXkgc3RydWN0dXJlCi0JICogUmV0dXJuczogWmVybyBvbiBzdWNjZXNz Ci0JICovCi0JaW50ICgqcHJlX2tpY2tvZmYpKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0 b3IsCi0JCQl2b2lkICpkaXNwbGF5KTsKLQotCS8qKgotCSAqIGNsa19jdHJsIC0gcGVyZm9ybSBj bGsgZW5hYmxlL2Rpc2FibGUgb24gdGhlIGNvbm5lY3RvcgotCSAqIEBoYW5kbGU6IFBvaW50ZXIg dG8gY2xrIGhhbmRsZQotCSAqIEB0eXBlOiBUeXBlIG9mIGNsa3MKLQkgKiBAZW5hYmxlOiBTdGF0 ZSBvZiBjbGtzCi0JICovCi0JaW50ICgqY2xrX2N0cmwpKHZvaWQgKmhhbmRsZSwgdTMyIHR5cGUs IHUzMiBzdGF0ZSk7Ci0KLQkvKioKLQkgKiBzZXRfcG93ZXIgLSB1cGRhdGUgZHBtcyBzZXR0aW5n Ci0JICogQGNvbm5lY3RvcjogUG9pbnRlciB0byBkcm0gY29ubmVjdG9yIHN0cnVjdHVyZQotCSAq IEBwb3dlcl9tb2RlOiBPbmUgb2YgdGhlIGZvbGxvd2luZywKLQkgKiAgICAgICAgICAgICAgRFBV X01PREVfRFBNU19PTgotCSAqICAgICAgICAgICAgICBEUFVfTU9ERV9EUE1TX0xQMQotCSAqICAg ICAgICAgICAgICBEUFVfTU9ERV9EUE1TX0xQMgotCSAqICAgICAgICAgICAgICBEUFVfTU9ERV9E UE1TX09GRgotCSAqIEBkaXNwbGF5OiBQb2ludGVyIHRvIHByaXZhdGUgZGlzcGxheSBzdHJ1Y3R1 cmUKLQkgKiBSZXR1cm5zOiBaZXJvIG9uIHN1Y2Nlc3MKLQkgKi8KLQlpbnQgKCpzZXRfcG93ZXIp KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCi0JCQlpbnQgcG93ZXJfbW9kZSwgdm9p ZCAqZGlzcGxheSk7Ci0KLQkvKioKLQkgKiBnZXRfZHN0X2Zvcm1hdCAtIGdldCBkc3RfZm9ybWF0 IGZyb20gZGlzcGxheQotCSAqIEBkaXNwbGF5OiBQb2ludGVyIHRvIHByaXZhdGUgZGlzcGxheSBo YW5kbGUKLQkgKiBSZXR1cm5zOiBkc3RfZm9ybWF0IG9mIGRpc3BsYXkKLQkgKi8KLQllbnVtIGRz aV9waXhlbF9mb3JtYXQgKCpnZXRfZHN0X2Zvcm1hdCkodm9pZCAqZGlzcGxheSk7Ci0KLQkvKioK LQkgKiBwb3N0X2tpY2tvZmYgLSBkaXNwbGF5IHRvIHByb2dyYW0gcG9zdCBraWNrb2ZmLXRpbWUg ZmVhdHVyZXMKLQkgKiBAY29ubmVjdG9yOiBQb2ludGVyIHRvIGRybSBjb25uZWN0b3Igc3RydWN0 dXJlCi0JICogUmV0dXJuczogWmVybyBvbiBzdWNjZXNzCi0JICovCi0JaW50ICgqcG9zdF9raWNr b2ZmKShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKTsKLQotCS8qKgotCSAqIHNlbmRf aHBkX2V2ZW50IC0gc2VuZCBIUEQgdWV2ZW50IG5vdGlmaWNhdGlvbiB0byB1c2Vyc3BhY2UKLQkg KiBAZGlzcGxheTogUG9pbnRlciB0byBwcml2YXRlIGRpc3BsYXkgc3RydWN0dXJlCi0JICovCi0J dm9pZCAoKnNlbmRfaHBkX2V2ZW50KSh2b2lkICpkaXNwbGF5KTsKLX07Ci0KLS8qKgotICogZW51 bSBkcHVfY29ubmVjdG9yX2V2ZW50cyAtIGxpc3Qgb2YgcmVjb2duaXplZCBjb25uZWN0b3IgZXZl bnRzCi0gKi8KLWVudW0gZHB1X2Nvbm5lY3Rvcl9ldmVudHMgewotCURQVV9DT05OX0VWRU5UX1ZJ RF9ET05FLCAvKiB2aWRlbyBtb2RlIGZyYW1lIGRvbmUgKi8KLQlEUFVfQ09OTl9FVkVOVF9DTURf RE9ORSwgLyogY29tbWFuZCBtb2RlIGZyYW1lIGRvbmUgKi8KLQlEUFVfQ09OTl9FVkVOVF9DT1VO VCwKLX07Ci0KLS8qKgotICogc3RydWN0IGRwdV9jb25uZWN0b3JfZXZ0IC0gbG9jYWwgZXZlbnQg cmVnaXN0cmF0aW9uIGVudHJ5IHN0cnVjdHVyZQotICogQGNiX2Z1bmM6IFBvaW50ZXIgdG8gZGVz aXJlZCBjYWxsYmFjayBmdW5jdGlvbgotICogQHVzcjogVXNlciBwb2ludGVyIHRvIHBhc3MgdG8g Y2FsbGJhY2sgb24gZXZlbnQgdHJpZ2dlcgotICovCi1zdHJ1Y3QgZHB1X2Nvbm5lY3Rvcl9ldnQg ewotCXZvaWQgKCpjYl9mdW5jKSh1aW50MzJfdCBldmVudF9pZHgsCi0JCQl1aW50MzJfdCBpbnN0 YW5jZV9pZHgsIHZvaWQgKnVzciwKLQkJCXVpbnQzMl90IGRhdGEwLCB1aW50MzJfdCBkYXRhMSwK LQkJCXVpbnQzMl90IGRhdGEyLCB1aW50MzJfdCBkYXRhMyk7Ci0Jdm9pZCAqdXNyOwotfTsKLQot LyoqCi0gKiBzdHJ1Y3QgZHB1X2Nvbm5lY3RvciAtIGxvY2FsIGRwdSBjb25uZWN0b3Igc3RydWN0 dXJlCi0gKiBAYmFzZTogQmFzZSBkcm0gY29ubmVjdG9yIHN0cnVjdHVyZQotICogQGNvbm5lY3Rv cl90eXBlOiBTZXQgdG8gb25lIG9mIERSTV9NT0RFX0NPTk5FQ1RPUl8gdHlwZXMKLSAqIEBlbmNv ZGVyOiBQb2ludGVyIHRvIHByZWZlcnJlZCBkcm0gZW5jb2RlcgotICogQHBhbmVsOiBQb2ludGVy IHRvIGRybSBwYW5lbCwgaWYgcHJlc2VudAotICogQGRpc3BsYXk6IFBvaW50ZXIgdG8gcHJpdmF0 ZSBkaXNwbGF5IGRhdGEgc3RydWN0dXJlCi0gKiBAbW11X3NlY3VyZTogTU1VIGlkIGZvciBzZWN1 cmUgYnVmZmVycwotICogQG1tdV91bnNlY3VyZTogTU1VIGlkIGZvciB1bnNlY3VyZSBidWZmZXJz Ci0gKiBAbmFtZTogQVNDSUkgbmFtZSBvZiBjb25uZWN0b3IKLSAqIEBsb2NrOiBNdXRleCBsb2Nr IG9iamVjdCBmb3IgdGhpcyBzdHJ1Y3R1cmUKLSAqIEBvcHM6IExvY2FsIGNhbGxiYWNrIGZ1bmN0 aW9uIHBvaW50ZXIgdGFibGUKLSAqIEBkcG1zX21vZGU6IERQTVMgcHJvcGVydHkgc2V0dGluZyBm cm9tIHVzZXIgc3BhY2UKLSAqIEBscF9tb2RlOiBMUCBwcm9wZXJ0eSBzZXR0aW5nIGZyb20gdXNl ciBzcGFjZQotICogQGxhc3RfcGFuZWxfcG93ZXJfbW9kZTogTGFzdCBjb25zb2xpZGF0ZWQgZHBt cy9scCBtb2RlIHNldHRpbmcKLSAqIEBwcm9wZXJ0eV9pbmZvOiBQcml2YXRlIHN0cnVjdHVyZSBm b3IgZ2VuZXJpYyBwcm9wZXJ0eSBoYW5kbGluZwotICogQHByb3BlcnR5X2RhdGE6IEFycmF5IG9m IHByaXZhdGUgZGF0YSBmb3IgZ2VuZXJpYyBwcm9wZXJ0eSBoYW5kbGluZwotICogQGJsb2JfY2Fw czogUG9pbnRlciB0byBibG9iIHN0cnVjdHVyZSBmb3IgJ2NhcGFiaWxpdGllcycgcHJvcGVydHkK LSAqIEBibG9iX2hkcjogUG9pbnRlciB0byBibG9iIHN0cnVjdHVyZSBmb3IgJ2hkcl9wcm9wZXJ0 aWVzJyBwcm9wZXJ0eQotICogQGJsb2JfZGl0aGVyOiBQb2ludGVyIHRvIGJsb2Igc3RydWN0dXJl IGZvciBkZWZhdWx0IGRpdGhlciBjb25maWcKLSAqIEBmYl9rbWFwOiB0cnVlIGlmIGtlcm5lbCBt YXBwaW5nIG9mIGZyYW1lYnVmZmVyIGlzIHJlcXVlc3RlZAotICogQGV2ZW50X3RhYmxlOiBBcnJh eSBvZiByZWdpc3RlcmVkIGV2ZW50cwotICogQGV2ZW50X2xvY2s6IExvY2sgb2JqZWN0IGZvciBl dmVudF90YWJsZQotICogQGJsX2RldmljZTogYmFja2xpZ2h0IGRldmljZSBub2RlCi0gKi8KLXN0 cnVjdCBkcHVfY29ubmVjdG9yIHsKLQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciBiYXNlOwotCi0JaW50 IGNvbm5lY3Rvcl90eXBlOwotCi0Jc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOwotCXN0cnVj dCBkcm1fcGFuZWwgKnBhbmVsOwotCXZvaWQgKmRpc3BsYXk7Ci0KLQlzdHJ1Y3QgbXNtX2dlbV9h ZGRyZXNzX3NwYWNlICphc3BhY2VbRFBVX0lPTU1VX0RPTUFJTl9NQVhdOwotCi0JY2hhciBuYW1l W0RQVV9DT05ORUNUT1JfTkFNRV9TSVpFXTsKLQotCXN0cnVjdCBtdXRleCBsb2NrOwotCXN0cnVj dCBkcHVfY29ubmVjdG9yX29wcyBvcHM7Ci0JaW50IGRwbXNfbW9kZTsKLQlpbnQgbHBfbW9kZTsK LQlpbnQgbGFzdF9wYW5lbF9wb3dlcl9tb2RlOwotCi0Jc3RydWN0IG1zbV9wcm9wZXJ0eV9pbmZv IHByb3BlcnR5X2luZm87Ci0Jc3RydWN0IG1zbV9wcm9wZXJ0eV9kYXRhIHByb3BlcnR5X2RhdGFb Q09OTkVDVE9SX1BST1BfQ09VTlRdOwotCXN0cnVjdCBkcm1fcHJvcGVydHlfYmxvYiAqYmxvYl9j YXBzOwotCXN0cnVjdCBkcm1fcHJvcGVydHlfYmxvYiAqYmxvYl9oZHI7Ci0Jc3RydWN0IGRybV9w cm9wZXJ0eV9ibG9iICpibG9iX2RpdGhlcjsKLQotCWJvb2wgZmJfa21hcDsKLQlzdHJ1Y3QgZHB1 X2Nvbm5lY3Rvcl9ldnQgZXZlbnRfdGFibGVbRFBVX0NPTk5fRVZFTlRfQ09VTlRdOwotCXNwaW5s b2NrX3QgZXZlbnRfbG9jazsKLQotCXN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpibF9kZXZpY2U7 Ci19OwotCi0vKioKLSAqIHRvX2RwdV9jb25uZWN0b3IgLSBjb252ZXJ0IGRybV9jb25uZWN0b3Ig cG9pbnRlciB0byBkcHUgY29ubmVjdG9yIHBvaW50ZXIKLSAqIEBYOiBQb2ludGVyIHRvIGRybV9j b25uZWN0b3Igc3RydWN0dXJlCi0gKiBSZXR1cm5zOiBQb2ludGVyIHRvIGRwdV9jb25uZWN0b3Ig c3RydWN0dXJlCi0gKi8KLSNkZWZpbmUgdG9fZHB1X2Nvbm5lY3Rvcih4KSAgICAgY29udGFpbmVy X29mKCh4KSwgc3RydWN0IGRwdV9jb25uZWN0b3IsIGJhc2UpCi0KLS8qKgotICogZHB1X2Nvbm5l Y3Rvcl9nZXRfZGlzcGxheSAtIGdldCBkcHUgY29ubmVjdG9yJ3MgcHJpdmF0ZSBkaXNwbGF5IHBv aW50ZXIKLSAqIEBDOiBQb2ludGVyIHRvIGRybSBjb25uZWN0b3Igc3RydWN0dXJlCi0gKiBSZXR1 cm5zOiBQb2ludGVyIHRvIGFzc29jaWF0ZWQgcHJpdmF0ZSBkaXNwbGF5IHN0cnVjdHVyZQotICov Ci0jZGVmaW5lIGRwdV9jb25uZWN0b3JfZ2V0X2Rpc3BsYXkoQykgXAotCSgoQykgPyB0b19kcHVf Y29ubmVjdG9yKChDKSktPmRpc3BsYXkgOiAwKQotCi0vKioKLSAqIGRwdV9jb25uZWN0b3JfZ2V0 X3BhbmVsIC0gZ2V0IGRwdSBjb25uZWN0b3IncyBwcml2YXRlIHBhbmVsIHBvaW50ZXIKLSAqIEBD OiBQb2ludGVyIHRvIGRybSBjb25uZWN0b3Igc3RydWN0dXJlCi0gKiBSZXR1cm5zOiBQb2ludGVy IHRvIGFzc29jaWF0ZWQgcHJpdmF0ZSBkaXNwbGF5IHN0cnVjdHVyZQotICovCi0jZGVmaW5lIGRw dV9jb25uZWN0b3JfZ2V0X3BhbmVsKEMpIFwKLQkoKEMpID8gdG9fZHB1X2Nvbm5lY3RvcigoQykp LT5wYW5lbCA6IE5VTEwpCi0KLS8qKgotICogZHB1X2Nvbm5lY3Rvcl9nZXRfZW5jb2RlciAtIGdl dCBkcHUgY29ubmVjdG9yJ3MgcHJpdmF0ZSBlbmNvZGVyIHBvaW50ZXIKLSAqIEBDOiBQb2ludGVy IHRvIGRybSBjb25uZWN0b3Igc3RydWN0dXJlCi0gKiBSZXR1cm5zOiBQb2ludGVyIHRvIGFzc29j aWF0ZWQgcHJpdmF0ZSBlbmNvZGVyIHN0cnVjdHVyZQotICovCi0jZGVmaW5lIGRwdV9jb25uZWN0 b3JfZ2V0X2VuY29kZXIoQykgXAotCSgoQykgPyB0b19kcHVfY29ubmVjdG9yKChDKSktPmVuY29k ZXIgOiAwKQotCi0vKioKLSAqIGRwdV9jb25uZWN0b3JfZ2V0X3Byb3BpbmZvIC0gZ2V0IGRwdSBj b25uZWN0b3IncyBwcm9wZXJ0eSBpbmZvIHBvaW50ZXIKLSAqIEBDOiBQb2ludGVyIHRvIGRybSBj b25uZWN0b3Igc3RydWN0dXJlCi0gKiBSZXR1cm5zOiBQb2ludGVyIHRvIGFzc29jaWF0ZWQgcHJp dmF0ZSBwcm9wZXJ0eSBpbmZvIHN0cnVjdHVyZQotICovCi0jZGVmaW5lIGRwdV9jb25uZWN0b3Jf Z2V0X3Byb3BpbmZvKEMpIFwKLQkoKEMpID8gJnRvX2RwdV9jb25uZWN0b3IoKEMpKS0+cHJvcGVy dHlfaW5mbyA6IDApCi0KLS8qKgotICogc3RydWN0IGRwdV9jb25uZWN0b3Jfc3RhdGUgLSBwcml2 YXRlIGNvbm5lY3RvciBzdGF0dXMgc3RydWN0dXJlCi0gKiBAYmFzZTogQmFzZSBkcm0gY29ubmVj dG9yIHN0cnVjdHVyZQotICogQG91dF9mYjogUG9pbnRlciB0byBvdXRwdXQgZnJhbWUgYnVmZmVy LCBpZiBhcHBsaWNhYmxlCi0gKiBAcHJvcGVydHlfc3RhdGU6IExvY2FsIHN0b3JhZ2UgZm9yIG1z bV9wcm9wIHByb3BlcnRpZXMKLSAqIEBwcm9wZXJ0eV92YWx1ZXM6IExvY2FsIGNhY2hlIG9mIGN1 cnJlbnQgY29ubmVjdG9yIHByb3BlcnR5IHZhbHVlcwotICogQHByb3BlcnR5X2Jsb2JzOiBibG9i IHByb3BlcnRpZXMKLSAqLwotc3RydWN0IGRwdV9jb25uZWN0b3Jfc3RhdGUgewotCXN0cnVjdCBk cm1fY29ubmVjdG9yX3N0YXRlIGJhc2U7Ci0Jc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqb3V0X2Zi OwotCXN0cnVjdCBtc21fcHJvcGVydHlfc3RhdGUgcHJvcGVydHlfc3RhdGU7Ci0Jc3RydWN0IG1z bV9wcm9wZXJ0eV92YWx1ZSBwcm9wZXJ0eV92YWx1ZXNbQ09OTkVDVE9SX1BST1BfQ09VTlRdOwot Ci0Jc3RydWN0IGRybV9wcm9wZXJ0eV9ibG9iICpwcm9wZXJ0eV9ibG9ic1tDT05ORUNUT1JfUFJP UF9CTE9CQ09VTlRdOwotfTsKLQotLyoqCi0gKiB0b19kcHVfY29ubmVjdG9yX3N0YXRlIC0gY29u dmVydCBkcm1fY29ubmVjdG9yX3N0YXRlIHBvaW50ZXIgdG8KLSAqICAgICAgICAgICAgICAgICAg ICAgICAgICBkcHUgY29ubmVjdG9yIHN0YXRlIHBvaW50ZXIKLSAqIEBYOiBQb2ludGVyIHRvIGRy bV9jb25uZWN0b3Jfc3RhdGUgc3RydWN0dXJlCi0gKiBSZXR1cm5zOiBQb2ludGVyIHRvIGRwdV9j b25uZWN0b3Jfc3RhdGUgc3RydWN0dXJlCi0gKi8KLSNkZWZpbmUgdG9fZHB1X2Nvbm5lY3Rvcl9z dGF0ZSh4KSBcCi0JY29udGFpbmVyX29mKCh4KSwgc3RydWN0IGRwdV9jb25uZWN0b3Jfc3RhdGUs IGJhc2UpCi0KLS8qKgotICogZHB1X2Nvbm5lY3Rvcl9nZXRfcHJvcGVydHkgLSBxdWVyeSBpbnRl Z2VyIHZhbHVlIG9mIGNvbm5lY3RvciBwcm9wZXJ0eQotICogQFM6IFBvaW50ZXIgdG8gZHJtIGNv bm5lY3RvciBzdGF0ZQotICogQFg6IFByb3BlcnR5IGluZGV4LCBmcm9tIGVudW0gbXNtX21kcF9j b25uZWN0b3JfcHJvcGVydHkKLSAqIFJldHVybnM6IEludGVnZXIgdmFsdWUgb2YgcmVxdWVzdGVk IHByb3BlcnR5Ci0gKi8KLSNkZWZpbmUgZHB1X2Nvbm5lY3Rvcl9nZXRfcHJvcGVydHkoUywgWCkg XAotCSgoUykgJiYgKChYKSA8IENPTk5FQ1RPUl9QUk9QX0NPVU5UKSA/IFwKLQkgKHRvX2RwdV9j b25uZWN0b3Jfc3RhdGUoKFMpKS0+cHJvcGVydHlfdmFsdWVzWyhYKV0udmFsdWUpIDogMCkKLQot LyoqCi0gKiBkcHVfY29ubmVjdG9yX2dldF9wcm9wZXJ0eV9zdGF0ZSAtIHJldHJpZXZlIHByb3Bl cnR5IHN0YXRlIGNhY2hlCi0gKiBAUzogUG9pbnRlciB0byBkcm0gY29ubmVjdG9yIHN0YXRlCi0g KiBSZXR1cm5zOiBQb2ludGVyIHRvIGxvY2FsIHByb3BlcnR5IHN0YXRlIHN0cnVjdHVyZQotICov Ci0jZGVmaW5lIGRwdV9jb25uZWN0b3JfZ2V0X3Byb3BlcnR5X3N0YXRlKFMpIFwKLQkoKFMpID8g KCZ0b19kcHVfY29ubmVjdG9yX3N0YXRlKChTKSktPnByb3BlcnR5X3N0YXRlKSA6IE5VTEwpCi0K LS8qKgotICogZHB1X2Nvbm5lY3Rvcl9nZXRfb3V0X2ZiIC0gcXVlcnkgb3V0X2ZiIHZhbHVlIGZy b20gZHB1IGNvbm5lY3RvciBzdGF0ZQotICogQFM6IFBvaW50ZXIgdG8gZHJtIGNvbm5lY3RvciBz dGF0ZQotICogUmV0dXJuczogT3V0cHV0IGZiIGFzc29jaWF0ZWQgd2l0aCBzcGVjaWZpZWQgY29u bmVjdG9yIHN0YXRlCi0gKi8KLSNkZWZpbmUgZHB1X2Nvbm5lY3Rvcl9nZXRfb3V0X2ZiKFMpIFwK LQkoKFMpID8gdG9fZHB1X2Nvbm5lY3Rvcl9zdGF0ZSgoUykpLT5vdXRfZmIgOiAwKQotCi0vKioK LSAqIGRwdV9jb25uZWN0b3JfZ2V0X3RvcG9sb2d5X25hbWUgLSBoZWxwZXIgYWNjZXNzb3IgdG8g cmV0cmlldmUgdG9wb2xvZ3lfbmFtZQotICogQGNvbm5lY3RvcjogcG9pbnRlciB0byBkcm0gY29u bmVjdG9yCi0gKiBSZXR1cm5zOiB2YWx1ZSBvZiB0aGUgQ09OTkVDVE9SX1BST1BfVE9QT0xPR1lf TkFNRSBwcm9wZXJ0eSBvciAwCi0gKi8KLXN0YXRpYyBpbmxpbmUgdWludDY0X3QgZHB1X2Nvbm5l Y3Rvcl9nZXRfdG9wb2xvZ3lfbmFtZSgKLQkJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rv cikKLXsKLQlpZiAoIWNvbm5lY3RvciB8fCAhY29ubmVjdG9yLT5zdGF0ZSkKLQkJcmV0dXJuIDA7 Ci0JcmV0dXJuIGRwdV9jb25uZWN0b3JfZ2V0X3Byb3BlcnR5KGNvbm5lY3Rvci0+c3RhdGUsCi0J CQlDT05ORUNUT1JfUFJPUF9UT1BPTE9HWV9OQU1FKTsKLX0KLQotLyoqCi0gKiBkcHVfY29ubmVj dG9yX2dldF9scCAtIGhlbHBlciBhY2Nlc3NvciB0byByZXRyaWV2ZSBMUCBzdGF0ZQotICogQGNv bm5lY3RvcjogcG9pbnRlciB0byBkcm0gY29ubmVjdG9yCi0gKiBSZXR1cm5zOiB2YWx1ZSBvZiB0 aGUgQ09OTkVDVE9SX1BST1BfTFAgcHJvcGVydHkgb3IgMAotICovCi1zdGF0aWMgaW5saW5lIHVp bnQ2NF90IGRwdV9jb25uZWN0b3JfZ2V0X2xwKAotCQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29u bmVjdG9yKQotewotCWlmICghY29ubmVjdG9yIHx8ICFjb25uZWN0b3ItPnN0YXRlKQotCQlyZXR1 cm4gMDsKLQlyZXR1cm4gZHB1X2Nvbm5lY3Rvcl9nZXRfcHJvcGVydHkoY29ubmVjdG9yLT5zdGF0 ZSwKLQkJCUNPTk5FQ1RPUl9QUk9QX0xQKTsKLX0KLQotLyoqCi0gKiBkcHVfY29ubmVjdG9yX3Nl dF9wcm9wZXJ0eV9mb3JfY29tbWl0IC0gYWRkIHByb3BlcnR5IHNldCB0byBhdG9taWMgc3RhdGUK LSAqCUFkZCBhIGNvbm5lY3RvciBzdGF0ZSBwcm9wZXJ0eSB1cGRhdGUgZm9yIHRoZSBzcGVjaWZp ZWQgcHJvcGVydHkgaW5kZXgKLSAqCXRvIHRoZSBhdG9taWMgc3RhdGUgaW4gcHJlcGFyYXRpb24g Zm9yIGEgZHJtX2F0b21pY19jb21taXQuCi0gKiBAY29ubmVjdG9yOiBQb2ludGVyIHRvIGRybSBj b25uZWN0b3IKLSAqIEBhdG9taWNfc3RhdGU6IFBvaW50ZXIgdG8gRFJNIGF0b21pYyBzdGF0ZSBz dHJ1Y3R1cmUgZm9yIGNvbW1pdAotICogQHByb3BlcnR5X2lkeDogQ29ubmVjdG9yIHByb3BlcnR5 IGluZGV4Ci0gKiBAdmFsdWU6IFVwZGF0ZWQgcHJvcGVydHkgdmFsdWUKLSAqIFJldHVybnM6IFpl cm8gb24gc3VjY2VzcwotICovCi1pbnQgZHB1X2Nvbm5lY3Rvcl9zZXRfcHJvcGVydHlfZm9yX2Nv bW1pdChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAotCQlzdHJ1Y3QgZHJtX2F0b21p Y19zdGF0ZSAqYXRvbWljX3N0YXRlLAotCQl1aW50MzJfdCBwcm9wZXJ0eV9pZHgsIHVpbnQ2NF90 IHZhbHVlKTsKLQotLyoqCi0gKiBkcHVfY29ubmVjdG9yX2luaXQgLSBjcmVhdGUgZHJtIGNvbm5l Y3RvciBvYmplY3QgZm9yIGEgZ2l2ZW4gZGlzcGxheQotICogQGRldjogUG9pbnRlciB0byBkcm0g ZGV2aWNlIHN0cnVjdAotICogQGVuY29kZXI6IFBvaW50ZXIgdG8gYXNzb2NpYXRlZCBlbmNvZGVy Ci0gKiBAcGFuZWw6IFBvaW50ZXIgdG8gYXNzb2NpYXRlZCBwYW5lbCwgY2FuIGJlIE5VTEwKLSAq IEBkaXNwbGF5OiBQb2ludGVyIHRvIGFzc29jaWF0ZWQgZGlzcGxheSBvYmplY3QKLSAqIEBvcHM6 IFBvaW50ZXIgdG8gY2FsbGJhY2sgb3BlcmF0aW9ucyBmdW5jdGlvbiB0YWJsZQotICogQGNvbm5l Y3Rvcl9wb2xsOiBTZXQgdG8gYXBwcm9wcmlhdGUgRFJNX0NPTk5FQ1RPUl9QT0xMXyBzZXR0aW5n Ci0gKiBAY29ubmVjdG9yX3R5cGU6IFNldCB0byBhcHByb3ByaWF0ZSBEUk1fTU9ERV9DT05ORUNU T1JfIHR5cGUKLSAqIFJldHVybnM6IFBvaW50ZXIgdG8gbmV3bHkgY3JlYXRlZCBkcm0gY29ubmVj dG9yIHN0cnVjdAotICovCi1zdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqZHB1X2Nvbm5lY3Rvcl9pbml0 KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwK LQkJc3RydWN0IGRybV9wYW5lbCAqcGFuZWwsCi0JCXZvaWQgKmRpc3BsYXksCi0JCWNvbnN0IHN0 cnVjdCBkcHVfY29ubmVjdG9yX29wcyAqb3BzLAotCQlpbnQgY29ubmVjdG9yX3BvbGwsCi0JCWlu dCBjb25uZWN0b3JfdHlwZSk7Ci0KLS8qKgotICogZHB1X2Nvbm5lY3Rvcl9nZXRfaW5mbyAtIHF1 ZXJ5IGRpc3BsYXkgc3BlY2lmaWMgaW5mb3JtYXRpb24KLSAqIEBjb25uZWN0b3I6IFBvaW50ZXIg dG8gZHJtIGNvbm5lY3RvciBvYmplY3QKLSAqIEBpbmZvOiBQb2ludGVyIHRvIG1zbSBkaXNwbGF5 IGluZm9ybWF0aW9uIHN0cnVjdHVyZQotICogUmV0dXJuczogWmVybyBvbiBzdWNjZXNzCi0gKi8K LWludCBkcHVfY29ubmVjdG9yX2dldF9pbmZvKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0 b3IsCi0JCXN0cnVjdCBtc21fZGlzcGxheV9pbmZvICppbmZvKTsKLQotLyoqCi0gKiBkcHVfY29u bmVjdG9yX2Nsa19jdHJsIC0gZW5hYmxlcy9kaXNhYmxlcyB0aGUgY29ubmVjdG9yIGNsa3MKLSAq IEBjb25uZWN0b3I6IFBvaW50ZXIgdG8gZHJtIGNvbm5lY3RvciBvYmplY3QKLSAqIEBlbmFibGU6 IHRydWUvZmFsc2UgdG8gZW5hYmxlL2Rpc2FibGUKLSAqLwotdm9pZCBkcHVfY29ubmVjdG9yX2Ns a19jdHJsKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsIGJvb2wgZW5hYmxlKTsKLQot LyoqCi0gKiBkcHVfY29ubmVjdG9yX2dldF9kcG1zIC0gcXVlcnkgZHBtcyBzZXR0aW5nCi0gKiBA Y29ubmVjdG9yOiBQb2ludGVyIHRvIGRybSBjb25uZWN0b3Igc3RydWN0dXJlCi0gKiBSZXR1cm5z OiBDdXJyZW50IERQTVMgc2V0dGluZyBmb3IgY29ubmVjdG9yCi0gKi8KLWludCBkcHVfY29ubmVj dG9yX2dldF9kcG1zKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpOwotCi0vKioKLSAq IGRwdV9jb25uZWN0b3JfdHJpZ2dlcl9ldmVudCAtIGluZGljYXRlIHRoYXQgYW4gZXZlbnQgaGFz IG9jY3VycmVkCi0gKglBbnkgY2FsbGJhY2tzIHRoYXQgaGF2ZSBiZWVuIHJlZ2lzdGVyZWQgYWdh aW5zdCB0aGlzIGV2ZW50IHdpbGwKLSAqCWJlIGNhbGxlZCBmcm9tIHRoZSBzYW1lIHRocmVhZCBj b250ZXh0LgotICogQGNvbm5lY3RvcjogUG9pbnRlciB0byBkcm0gY29ubmVjdG9yIHN0cnVjdHVy ZQotICogQGV2ZW50X2lkeDogSW5kZXggb2YgZXZlbnQgdG8gdHJpZ2dlcgotICogQGluc3RhbmNl X2lkeDogRXZlbnQtc3BlY2lmaWMgImluc3RhbmNlIGluZGV4IiB0byBwYXNzIHRvIGNhbGxiYWNr Ci0gKiBAZGF0YTA6IEV2ZW50LXNwZWNpZmljICJkYXRhIiB0byBwYXNzIHRvIGNhbGxiYWNrCi0g KiBAZGF0YTE6IEV2ZW50LXNwZWNpZmljICJkYXRhIiB0byBwYXNzIHRvIGNhbGxiYWNrCi0gKiBA ZGF0YTI6IEV2ZW50LXNwZWNpZmljICJkYXRhIiB0byBwYXNzIHRvIGNhbGxiYWNrCi0gKiBAZGF0 YTM6IEV2ZW50LXNwZWNpZmljICJkYXRhIiB0byBwYXNzIHRvIGNhbGxiYWNrCi0gKiBSZXR1cm5z OiBaZXJvIG9uIHN1Y2Nlc3MKLSAqLwotaW50IGRwdV9jb25uZWN0b3JfdHJpZ2dlcl9ldmVudCh2 b2lkICpkcm1fY29ubmVjdG9yLAotCQl1aW50MzJfdCBldmVudF9pZHgsIHVpbnQzMl90IGluc3Rh bmNlX2lkeCwKLQkJdWludDMyX3QgZGF0YTAsIHVpbnQzMl90IGRhdGExLAotCQl1aW50MzJfdCBk YXRhMiwgdWludDMyX3QgZGF0YTMpOwotCi0vKioKLSAqIGRwdV9jb25uZWN0b3JfcmVnaXN0ZXJf ZXZlbnQgLSByZWdpc3RlciBhIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBhbiBldmVudAotICogQGNv bm5lY3RvcjogUG9pbnRlciB0byBkcm0gY29ubmVjdG9yIHN0cnVjdHVyZQotICogQGV2ZW50X2lk eDogSW5kZXggb2YgZXZlbnQgdG8gcmVnaXN0ZXIKLSAqIEBjYl9mdW5jOiBQb2ludGVyIHRvIGRl c2lyZWQgY2FsbGJhY2sgZnVuY3Rpb24KLSAqIEB1c3I6IFVzZXIgcG9pbnRlciB0byBwYXNzIHRv IGNhbGxiYWNrIG9uIGV2ZW50IHRyaWdnZXIKLSAqIFJldHVybnM6IFplcm8gb24gc3VjY2Vzcwot ICovCi1pbnQgZHB1X2Nvbm5lY3Rvcl9yZWdpc3Rlcl9ldmVudChzdHJ1Y3QgZHJtX2Nvbm5lY3Rv ciAqY29ubmVjdG9yLAotCQl1aW50MzJfdCBldmVudF9pZHgsCi0JCXZvaWQgKCpjYl9mdW5jKSh1 aW50MzJfdCBldmVudF9pZHgsCi0JCQl1aW50MzJfdCBpbnN0YW5jZV9pZHgsIHZvaWQgKnVzciwK LQkJCXVpbnQzMl90IGRhdGEwLCB1aW50MzJfdCBkYXRhMSwKLQkJCXVpbnQzMl90IGRhdGEyLCB1 aW50MzJfdCBkYXRhMyksCi0JCXZvaWQgKnVzcik7Ci0KLS8qKgotICogZHB1X2Nvbm5lY3Rvcl91 bnJlZ2lzdGVyX2V2ZW50IC0gdW5yZWdpc3RlciBhbGwgY2FsbGJhY2tzIGZvciBhbiBldmVudAot ICogQGNvbm5lY3RvcjogUG9pbnRlciB0byBkcm0gY29ubmVjdG9yIHN0cnVjdHVyZQotICogQGV2 ZW50X2lkeDogSW5kZXggb2YgZXZlbnQgdG8gcmVnaXN0ZXIKLSAqLwotdm9pZCBkcHVfY29ubmVj dG9yX3VucmVnaXN0ZXJfZXZlbnQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKLQkJ dWludDMyX3QgZXZlbnRfaWR4KTsKLQotLyoqCi0gKiBkcHVfY29ubmVjdG9yX3JlZ2lzdGVyX2N1 c3RvbV9ldmVudCAtIHJlZ2lzdGVyIGZvciBhc3luYyBldmVudHMKLSAqIEBrbXM6IFBvaW50ZXIg dG8gZHB1X2ttcwotICogQGNvbm5fZHJtOiBQb2ludGVyIHRvIGRybSBjb25uZWN0b3Igb2JqZWN0 Ci0gKiBAZXZlbnQ6IEV2ZW50IGZvciB3aGljaCByZXF1ZXN0IGlzIGJlaW5nIHNlbnQKLSAqIEBl bjogRmxhZyB0byBlbmFibGUvZGlzYWJsZSB0aGUgZXZlbnQKLSAqIFJldHVybnM6IFplcm8gb24g c3VjY2VzcwotICovCi1pbnQgZHB1X2Nvbm5lY3Rvcl9yZWdpc3Rlcl9jdXN0b21fZXZlbnQoc3Ry dWN0IGRwdV9rbXMgKmttcywKLQkJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5fZHJtLCB1MzIg ZXZlbnQsIGJvb2wgZW4pOwotCi0vKioKLSAqIGRwdV9jb25uZWN0b3JfcHJlX2tpY2tvZmYgLSB0 cmlnZ2VyIGtpY2tvZmYgdGltZSBmZWF0dXJlIHByb2dyYW1taW5nCi0gKiBAY29ubmVjdG9yOiBQ b2ludGVyIHRvIGRybSBjb25uZWN0b3Igb2JqZWN0Ci0gKiBSZXR1cm5zOiBaZXJvIG9uIHN1Y2Nl c3MKLSAqLwotaW50IGRwdV9jb25uZWN0b3JfcHJlX2tpY2tvZmYoc3RydWN0IGRybV9jb25uZWN0 b3IgKmNvbm5lY3Rvcik7Ci0KLS8qKgotICogZHB1X2Nvbm5lY3Rvcl9uZWVkc19vZmZzZXQgLSBh ZGp1c3QgdGhlIG91dHB1dCBmZW5jZSBvZmZzZXQgYmFzZWQgb24KLSAqICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZGlzcGxheSB0eXBlCi0gKiBAY29ubmVjdG9yOiBQb2ludGVyIHRvIGRy bSBjb25uZWN0b3Igb2JqZWN0Ci0gKiBSZXR1cm5zOiB0cnVlIGlmIG9mZnNldCBpcyByZXF1aXJl ZCwgZmFsc2UgZm9yIGFsbCBvdGhlciBjYXNlcy4KLSAqLwotc3RhdGljIGlubGluZSBib29sIGRw dV9jb25uZWN0b3JfbmVlZHNfb2Zmc2V0KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3Ip Ci17Ci0Jc3RydWN0IGRwdV9jb25uZWN0b3IgKmNfY29ubjsKLQotCWlmICghY29ubmVjdG9yKQot CQlyZXR1cm4gZmFsc2U7Ci0KLQljX2Nvbm4gPSB0b19kcHVfY29ubmVjdG9yKGNvbm5lY3Rvcik7 Ci0JcmV0dXJuIChjX2Nvbm4tPmNvbm5lY3Rvcl90eXBlICE9IERSTV9NT0RFX0NPTk5FQ1RPUl9W SVJUVUFMKTsKLX0KLQotLyoqCi0gKiBkcHVfY29ubmVjdG9yX2dldF9kaXRoZXJfY2ZnIC0gZ2V0 IGRpdGhlciBwcm9wZXJ0eSBkYXRhCi0gKiBAY29ubjogUG9pbnRlciB0byBkcm1fY29ubmVjdG9y IHN0cnVjdAotICogQHN0YXRlOiBQb2ludGVyIHRvIGRybV9jb25uZWN0b3Jfc3RhdGUgc3RydWN0 Ci0gKiBAY2ZnOiBQb2ludGVyIHRvIHBvaW50ZXIgdG8gZGl0aGVyIGNmZwotICogQGxlbjogbGVu Z3RoIG9mIHRoZSBkaXRoZXIgZGF0YQotICogUmV0dXJuczogWmVybyBvbiBzdWNjZXNzCi0gKi8K LWludCBkcHVfY29ubmVjdG9yX2dldF9kaXRoZXJfY2ZnKHN0cnVjdCBkcm1fY29ubmVjdG9yICpj b25uLAotCQlzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqc3RhdGUsIHZvaWQgKipjZmcsIHNp emVfdCAqbGVuKTsKLQotI2VuZGlmIC8qIF9EUFVfQ09OTkVDVE9SX0hfICovCmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0Yy5jIGIvZHJpdmVycy9ncHUv ZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NydGMuYwppbmRleCAzODc5MTlhLi5hZDE5NWQ1IDEwMDY0 NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0Yy5jCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmMKQEAgLTMzLDcgKzMzLDYgQEAK ICNpbmNsdWRlICJkcHVfcGxhbmUuaCIKICNpbmNsdWRlICJkcHVfY29sb3JfcHJvY2Vzc2luZy5o IgogI2luY2x1ZGUgImRwdV9lbmNvZGVyLmgiCi0jaW5jbHVkZSAiZHB1X2Nvbm5lY3Rvci5oIgog I2luY2x1ZGUgImRwdV92YmlmLmgiCiAjaW5jbHVkZSAiZHB1X3Bvd2VyX2hhbmRsZS5oIgogI2lu Y2x1ZGUgImRwdV9jb3JlX3BlcmYuaCIKQEAgLTMzNTksNyArMzM1OCw2IEBAIHN0YXRpYyBpbnQg ZHB1X2NydGNfYXRvbWljX2dldF9wcm9wZXJ0eShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCiAJc3Ry dWN0IGRwdV9jcnRjX3N0YXRlICpjc3RhdGU7CiAJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVy OwogCWludCBpLCByZXQgPSAtRUlOVkFMOwotCWJvb2wgY29ubl9vZmZzZXQgPSAwOwogCWJvb2wg aXNfY21kID0gdHJ1ZTsKIAogCWlmICghY3J0YyB8fCAhc3RhdGUpIHsKQEAgLTMzNjgsMTMgKzMz NjYsNiBAQCBzdGF0aWMgaW50IGRwdV9jcnRjX2F0b21pY19nZXRfcHJvcGVydHkoc3RydWN0IGRy bV9jcnRjICpjcnRjLAogCQlkcHVfY3J0YyA9IHRvX2RwdV9jcnRjKGNydGMpOwogCQljc3RhdGUg PSB0b19kcHVfY3J0Y19zdGF0ZShzdGF0ZSk7CiAKLQkJZm9yIChpID0gMDsgaSA8IGNzdGF0ZS0+ bnVtX2Nvbm5lY3RvcnM7ICsraSkgewotCQkJY29ubl9vZmZzZXQgPSBkcHVfY29ubmVjdG9yX25l ZWRzX29mZnNldCgKLQkJCQkJCWNzdGF0ZS0+Y29ubmVjdG9yc1tpXSk7Ci0JCQlpZiAoY29ubl9v ZmZzZXQpCi0JCQkJYnJlYWs7Ci0JCX0KLQogCQkvKioKIAkJICogc2V0IHRoZSBjbWQgZmxhZyBv bmx5IHdoZW4gYWxsIHRoZSBlbmNvZGVycyBhdHRhY2hlZAogCQkgKiB0byB0aGUgY3J0YyBhcmUg aW4gY21kIG1vZGUuIENvbnNpZGVyIGFsbCBvdGhlciBjYXNlcwpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9t c20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyLmMKaW5kZXggMzg1NDQxMC4uNDM4NjM2MCAxMDA2NDQK LS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXIuYworKysgYi9k cml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlci5jCkBAIC03MCw2ICs3MCw4 IEBACiAKICNkZWZpbmUgSURMRV9TSE9SVF9USU1FT1VUCTEKIAorI2RlZmluZSBNQVhfVkRJU1BM QVlfU1BMSVQgMTA4MAorCiAvKioKICAqIGVudW0gZHB1X2VuY19yY19ldmVudHMgLSBldmVudHMg Zm9yIHJlc291cmNlIGNvbnRyb2wgc3RhdGUgbWFjaGluZQogICogQERQVV9FTkNfUkNfRVZFTlRf S0lDS09GRjoKQEAgLTE3Miw3ICsxNzQsNiBAQCBlbnVtIGRwdV9lbmNfcmNfc3RhdGVzIHsKICAq IEBmcmFtZV9kb25lX3RpbWVyOgkJd2F0Y2hkb2cgdGltZXIgZm9yIGZyYW1lIGRvbmUgZXZlbnQK ICAqIEB2c3luY19ldmVudF90aW1lcjoJCXZzeW5jIHRpbWVyCiAgKiBAZGlzcF9pbmZvOgkJCWxv Y2FsIGNvcHkgb2YgbXNtX2Rpc3BsYXlfaW5mbyBzdHJ1Y3QKLSAqIEBtb2RlX2luZm86CQkJbG9j YWwgY29weSBvZiBtc21fbW9kZV9pbmZvIHN0cnVjdAogICogQG1pc3JfZW5hYmxlOgkJbWlzciBl bmFibGUvZGlzYWJsZSBzdGF0dXMKICAqIEBtaXNyX2ZyYW1lX2NvdW50OgkJbWlzciBmcmFtZSBj b3VudCBiZWZvcmUgc3RhcnQgY2FwdHVyaW5nIHRoZSBkYXRhCiAgKiBAaWRsZV9wY19zdXBwb3J0 ZWQ6CQlpbmRpY2F0ZSBpZiBpZGxlIHBvd2VyIGNvbGxhcHMgaXMgc3VwcG9ydGVkCkBAIC0yMTQs NyArMjE1LDYgQEAgc3RydWN0IGRwdV9lbmNvZGVyX3ZpcnQgewogCXN0cnVjdCB0aW1lcl9saXN0 IHZzeW5jX2V2ZW50X3RpbWVyOwogCiAJc3RydWN0IG1zbV9kaXNwbGF5X2luZm8gZGlzcF9pbmZv OwotCXN0cnVjdCBtc21fbW9kZV9pbmZvIG1vZGVfaW5mbzsKIAlib29sIG1pc3JfZW5hYmxlOwog CXUzMiBtaXNyX2ZyYW1lX2NvdW50OwogCkBAIC00OTcsOCArNDk3LDYgQEAgdm9pZCBkcHVfZW5j b2Rlcl9nZXRfaHdfcmVzb3VyY2VzKHN0cnVjdCBkcm1fZW5jb2RlciAqZHJtX2VuYywKIAkJaWYg KHBoeXMgJiYgcGh5cy0+b3BzLmdldF9od19yZXNvdXJjZXMpCiAJCQlwaHlzLT5vcHMuZ2V0X2h3 X3Jlc291cmNlcyhwaHlzLCBod19yZXMsIGNvbm5fc3RhdGUpOwogCX0KLQotCWh3X3Jlcy0+dG9w b2xvZ3kgPSBkcHVfZW5jLT5tb2RlX2luZm8udG9wb2xvZ3k7CiB9CiAKIHZvaWQgZHB1X2VuY29k ZXJfZGVzdHJveShzdHJ1Y3QgZHJtX2VuY29kZXIgKmRybV9lbmMpCkBAIC02MDUsNiArNjAzLDI1 IEBAIHN0YXRpYyB2b2lkIF9kcHVfZW5jb2Rlcl9hZGp1c3RfbW9kZShzdHJ1Y3QgZHJtX2Nvbm5l Y3RvciAqY29ubmVjdG9yLAogCX0KIH0KIAorc3RhdGljIHN0cnVjdCBtc21fZGlzcGxheV90b3Bv bG9neSBkcHVfZW5jb2Rlcl9nZXRfdG9wb2xvZ3koCisJCQlzdHJ1Y3QgZHB1X2VuY29kZXJfdmly dCAqZHB1X2VuYywKKwkJCXN0cnVjdCBkcHVfa21zICpkcHVfa21zLAorCQkJc3RydWN0IGRybV9k aXNwbGF5X21vZGUgKm1vZGUpCit7CisJc3RydWN0IG1zbV9kaXNwbGF5X3RvcG9sb2d5IHRvcG9s b2d5OworCWludCBpLCBpbnRmX2NvdW50ID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBNQVhfUEhZ U19FTkNPREVSU19QRVJfVklSVFVBTDsgaSsrKQorCQlpZiAoZHB1X2VuYy0+cGh5c19lbmNzW2ld KQorCQkJaW50Zl9jb3VudCsrOworCisJLyogVXNlciBzcGxpdCB0b3BvbG9neSBmb3Igd2lkdGgg PiAxMDgwICovCisJdG9wb2xvZ3kubnVtX2xtID0gKG1vZGUtPnZkaXNwbGF5ID4gTUFYX1ZESVNQ TEFZX1NQTElUKSA/IDIgOiAxOworCXRvcG9sb2d5Lm51bV9lbmMgPSAwOworCXRvcG9sb2d5Lm51 bV9pbnRmID0gaW50Zl9jb3VudDsKKworCXJldHVybiB0b3BvbG9neTsKK30KIHN0YXRpYyBpbnQg ZHB1X2VuY29kZXJfdmlydF9hdG9taWNfY2hlY2soCiAJCXN0cnVjdCBkcm1fZW5jb2RlciAqZHJt X2VuYywKIAkJc3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLApAQCAtNjE1LDYgKzYz Miw3IEBAIHN0YXRpYyBpbnQgZHB1X2VuY29kZXJfdmlydF9hdG9taWNfY2hlY2soCiAJc3RydWN0 IGRwdV9rbXMgKmRwdV9rbXM7CiAJY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGU7 CiAJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkal9tb2RlOworCXN0cnVjdCBtc21fZGlzcGxh eV90b3BvbG9neSB0b3BvbG9neTsKIAlpbnQgaSA9IDA7CiAJaW50IHJldCA9IDA7CiAKQEAgLTY2 MCw2ICs2NzgsOCBAQCBzdGF0aWMgaW50IGRwdV9lbmNvZGVyX3ZpcnRfYXRvbWljX2NoZWNrKAog CQl9CiAJfQogCisJdG9wb2xvZ3kgPSBkcHVfZW5jb2Rlcl9nZXRfdG9wb2xvZ3koZHB1X2VuYywg ZHB1X2ttcywgYWRqX21vZGUpOworCiAJLyogUmVzZXJ2ZSBkeW5hbWljIHJlc291cmNlcyBub3cu IEluZGljYXRpbmcgQXRvbWljVGVzdCBwaGFzZSAqLwogCWlmICghcmV0KSB7CiAJCS8qCkBAIC02 NjksNyArNjg5LDcgQEAgc3RhdGljIGludCBkcHVfZW5jb2Rlcl92aXJ0X2F0b21pY19jaGVjaygK IAkJaWYgKGRybV9hdG9taWNfY3J0Y19uZWVkc19tb2Rlc2V0KGNydGNfc3RhdGUpCiAJCQkJJiYg ZHB1X2VuYy0+bW9kZV9zZXRfY29tcGxldGUpIHsKIAkJCXJldCA9IGRwdV9ybV9yZXNlcnZlKCZk cHVfa21zLT5ybSwgZHJtX2VuYywgY3J0Y19zdGF0ZSwKLQkJCQljb25uX3N0YXRlLCB0cnVlKTsK KwkJCQljb25uX3N0YXRlLCB0b3BvbG9neSwgdHJ1ZSk7CiAJCQlkcHVfZW5jLT5tb2RlX3NldF9j b21wbGV0ZSA9IGZhbHNlOwogCQl9CiAJfQpAQCAtNjkwLDcgKzcxMCw2IEBAIHN0YXRpYyB2b2lk IF9kcHVfZW5jb2Rlcl91cGRhdGVfdnN5bmNfc291cmNlKHN0cnVjdCBkcHVfZW5jb2Rlcl92aXJ0 ICpkcHVfZW5jLAogCXN0cnVjdCBkcHVfa21zICpkcHVfa21zOwogCXN0cnVjdCBkcHVfaHdfbWRw ICpod19tZHB0b3A7CiAJc3RydWN0IGRybV9lbmNvZGVyICpkcm1fZW5jOwotCXN0cnVjdCBtc21f bW9kZV9pbmZvICptb2RlX2luZm87CiAJaW50IGk7CiAKIAlpZiAoIWRwdV9lbmMgfHwgIWRpc3Bf aW5mbykgewpAQCAtNzIwLDE5ICs3MzksMTIgQEAgc3RhdGljIHZvaWQgX2RwdV9lbmNvZGVyX3Vw ZGF0ZV92c3luY19zb3VyY2Uoc3RydWN0IGRwdV9lbmNvZGVyX3ZpcnQgKmRwdV9lbmMsCiAJCXJl dHVybjsKIAl9CiAKLQltb2RlX2luZm8gPSAmZHB1X2VuYy0+bW9kZV9pbmZvOwotCWlmICghbW9k ZV9pbmZvKSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBtb2RlIGluZm9cbiIpOwotCQlyZXR1cm47 Ci0JfQotCiAJaWYgKGh3X21kcHRvcC0+b3BzLnNldHVwX3ZzeW5jX3NvdXJjZSAmJgogCQkJZGlz cF9pbmZvLT5jYXBhYmlsaXRpZXMgJiBNU01fRElTUExBWV9DQVBfQ01EX01PREUpIHsKIAkJZm9y IChpID0gMDsgaSA8IGRwdV9lbmMtPm51bV9waHlzX2VuY3M7IGkrKykKIAkJCXZzeW5jX2NmZy5w cG51bWJlcltpXSA9IGRwdV9lbmMtPmh3X3BwW2ldLT5pZHg7CiAKIAkJdnN5bmNfY2ZnLnBwX2Nv dW50ID0gZHB1X2VuYy0+bnVtX3BoeXNfZW5jczsKLQkJdnN5bmNfY2ZnLmZyYW1lX3JhdGUgPSBt b2RlX2luZm8tPmZyYW1lX3JhdGU7CiAJCWlmIChkaXNwX2luZm8tPmlzX3RlX3VzaW5nX3dhdGNo ZG9nX3RpbWVyKQogCQkJdnN5bmNfY2ZnLnZzeW5jX3NvdXJjZSA9IERQVV9WU1lOQ19TT1VSQ0Vf V0RfVElNRVJfMDsKIAkJZWxzZQpAQCAtNzg5LDkgKzgwMSw2IEBAIHN0YXRpYyB2b2lkIF9kcHVf ZW5jb2Rlcl9yZXNvdXJjZV9jb250cm9sX2hlbHBlcihzdHJ1Y3QgZHJtX2VuY29kZXIgKmRybV9l bmMsCiAJCWRwdV9wb3dlcl9yZXNvdXJjZV9lbmFibGUoJnByaXYtPnBoYW5kbGUsCiAJCQkJZHB1 X2ttcy0+Y29yZV9jbGllbnQsIHRydWUpOwogCi0JCS8qIGVuYWJsZSBEU0kgY2xrcyAqLwotCQlk cHVfY29ubmVjdG9yX2Nsa19jdHJsKGRwdV9lbmMtPmN1cl9tYXN0ZXItPmNvbm5lY3RvciwgdHJ1 ZSk7Ci0KIAkJLyogZW5hYmxlIGFsbCB0aGUgaXJxICovCiAJCV9kcHVfZW5jb2Rlcl9pcnFfY29u dHJvbChkcm1fZW5jLCB0cnVlKTsKIApAQCAtNzk5LDkgKzgwOCw2IEBAIHN0YXRpYyB2b2lkIF9k cHVfZW5jb2Rlcl9yZXNvdXJjZV9jb250cm9sX2hlbHBlcihzdHJ1Y3QgZHJtX2VuY29kZXIgKmRy bV9lbmMsCiAJCS8qIGRpc2FibGUgYWxsIHRoZSBpcnEgKi8KIAkJX2RwdV9lbmNvZGVyX2lycV9j b250cm9sKGRybV9lbmMsIGZhbHNlKTsKIAotCQkvKiBkaXNhYmxlIERTSSBjbGtzICovCi0JCWRw dV9jb25uZWN0b3JfY2xrX2N0cmwoZHB1X2VuYy0+Y3VyX21hc3Rlci0+Y29ubmVjdG9yLCBmYWxz ZSk7Ci0KIAkJLyogZGlzYWJsZSBEUFUgY29yZSBjbGtzICovCiAJCWRwdV9wb3dlcl9yZXNvdXJj ZV9lbmFibGUoJnByaXYtPnBoYW5kbGUsCiAJCQkJZHB1X2ttcy0+Y29yZV9jbGllbnQsIGZhbHNl KTsKQEAgLTgxMyw3ICs4MTksNiBAQCBzdGF0aWMgdm9pZCBfZHB1X2VuY29kZXJfcmVzb3VyY2Vf Y29udHJvbF9oZWxwZXIoc3RydWN0IGRybV9lbmNvZGVyICpkcm1fZW5jLAogc3RhdGljIGludCBk cHVfZW5jb2Rlcl9yZXNvdXJjZV9jb250cm9sKHN0cnVjdCBkcm1fZW5jb2RlciAqZHJtX2VuYywK IAkJdTMyIHN3X2V2ZW50KQogewotCXVuc2lnbmVkIGludCBscCwgaWRsZV90aW1lb3V0OwogCXN0 cnVjdCBkcHVfZW5jb2Rlcl92aXJ0ICpkcHVfZW5jOwogCXN0cnVjdCBtc21fZHJtX3ByaXZhdGUg KnByaXY7CiAJc3RydWN0IG1zbV9kcm1fdGhyZWFkICpkaXNwX3RocmVhZDsKQEAgLTkxOSwyNSAr OTI0LDEzIEBAIHN0YXRpYyBpbnQgZHB1X2VuY29kZXJfcmVzb3VyY2VfY29udHJvbChzdHJ1Y3Qg ZHJtX2VuY29kZXIgKmRybV9lbmMsCiAJCQlyZXR1cm4gMDsKIAkJfQogCi0JCS8qIHNldCBpZGxl IHRpbWVvdXQgYmFzZWQgb24gbWFzdGVyIGNvbm5lY3RvcidzIGxwIHZhbHVlICovCi0JCWlmIChk cHVfZW5jLT5jdXJfbWFzdGVyKQotCQkJbHAgPSBkcHVfY29ubmVjdG9yX2dldF9scCgKLQkJCQkJ ZHB1X2VuYy0+Y3VyX21hc3Rlci0+Y29ubmVjdG9yKTsKLQkJZWxzZQotCQkJbHAgPSBEUFVfTU9E RV9EUE1TX09OOwotCi0JCWlmIChscCA9PSBEUFVfTU9ERV9EUE1TX0xQMikKLQkJCWlkbGVfdGlt ZW91dCA9IElETEVfU0hPUlRfVElNRU9VVDsKLQkJZWxzZQotCQkJaWRsZV90aW1lb3V0ID0gZHB1 X2VuYy0+aWRsZV90aW1lb3V0OwotCiAJCWt0aHJlYWRfcXVldWVfZGVsYXllZF93b3JrKAogCQkJ JmRpc3BfdGhyZWFkLT53b3JrZXIsCiAJCQkmZHB1X2VuYy0+ZGVsYXllZF9vZmZfd29yaywKLQkJ CW1zZWNzX3RvX2ppZmZpZXMoaWRsZV90aW1lb3V0KSk7CisJCQltc2Vjc190b19qaWZmaWVzKGRw dV9lbmMtPmlkbGVfdGltZW91dCkpOwogCiAJCURQVV9FVlQzMihEUk1JRChkcm1fZW5jKSwgc3df ZXZlbnQsIGRwdV9lbmMtPnJjX3N0YXRlLAotCQkJCWlkbGVfdGltZW91dCwgRFBVX0VWVExPR19G VU5DX0NBU0UyKTsKKwkJCQlkcHVfZW5jLT5pZGxlX3RpbWVvdXQsIERQVV9FVlRMT0dfRlVOQ19D QVNFMik7CiAJCURQVV9ERUJVR19FTkMoZHB1X2VuYywgInN3X2V2ZW50OiVkLCB3b3JrIHNjaGVk dWxlZFxuIiwKIAkJCQlzd19ldmVudCk7CiAJCWJyZWFrOwpAQCAtMTEzMiw4ICsxMTI1LDkgQEAg c3RhdGljIHZvaWQgZHB1X2VuY29kZXJfdmlydF9tb2RlX3NldChzdHJ1Y3QgZHJtX2VuY29kZXIg KmRybV9lbmMsCiAJc3RydWN0IGRwdV9rbXMgKmRwdV9rbXM7CiAJc3RydWN0IGxpc3RfaGVhZCAq Y29ubmVjdG9yX2xpc3Q7CiAJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm4gPSBOVUxMLCAqY29u bl9pdGVyOwotCXN0cnVjdCBkcHVfY29ubmVjdG9yICpkcHVfY29ubiA9IE5VTEw7CiAJc3RydWN0 IGRwdV9ybV9od19pdGVyIHBwX2l0ZXI7CisJc3RydWN0IG1zbV9kaXNwbGF5X3RvcG9sb2d5IHRv cG9sb2d5OworCWVudW0gZHB1X3JtX3RvcG9sb2d5X25hbWUgdG9wb2xvZ3lfbmFtZTsKIAlpbnQg aSA9IDAsIHJldDsKIAogCWlmICghZHJtX2VuYykgewpAQCAtMTE2MiwzMyArMTE1NiwxMSBAQCBz dGF0aWMgdm9pZCBkcHVfZW5jb2Rlcl92aXJ0X21vZGVfc2V0KHN0cnVjdCBkcm1fZW5jb2RlciAq ZHJtX2VuYywKIAkJcmV0dXJuOwogCX0KIAotCWRwdV9jb25uID0gdG9fZHB1X2Nvbm5lY3Rvcihj b25uKTsKLQlpZiAoZHB1X2Nvbm4pIHsKLQkJcmV0ID0gZHB1X2Nvbm4tPm9wcy5nZXRfbW9kZV9p bmZvKGFkal9tb2RlLCAmZHB1X2VuYy0+bW9kZV9pbmZvLAotCQkJCWRwdV9rbXMtPmNhdGFsb2ct PmNhcHMtPm1heF9taXhlcl93aWR0aCk7Ci0JCWlmIChyZXQpIHsKLQkJCURQVV9FUlJPUl9FTkMo ZHB1X2VuYywKLQkJCQkiaW52YWxpZCB0b3BvbG9neSBmb3IgdGhlIG1vZGVcbiIpOwotCQkJcmV0 dXJuOwotCQl9Ci0JfQotCi0JLyogcmVsZWFzZSByZXNvdXJjZXMgYmVmb3JlIHNlYW1sZXNzIG1v ZGUgY2hhbmdlICovCi0JaWYgKG1zbV9pc19tb2RlX3NlYW1sZXNzX2RtcyhhZGpfbW9kZSkpIHsK LQkJLyogcmVzdG9yZSByZXNvdXJjZSBzdGF0ZSBiZWZvcmUgcmVsZWFzaW5nIHRoZW0gKi8KLQkJ cmV0ID0gZHB1X2VuY29kZXJfcmVzb3VyY2VfY29udHJvbChkcm1fZW5jLAotCQkJCURQVV9FTkNf UkNfRVZFTlRfUFJFX01PREVTRVQpOwotCQlpZiAocmV0KSB7Ci0JCQlEUFVfRVJST1JfRU5DKGRw dV9lbmMsCi0JCQkJCSJkcHUgcmVzb3VyY2UgY29udHJvbCBmYWlsZWQ6ICVkXG4iLAotCQkJCQly ZXQpOwotCQkJcmV0dXJuOwotCQl9Ci0JfQorCXRvcG9sb2d5ID0gZHB1X2VuY29kZXJfZ2V0X3Rv cG9sb2d5KGRwdV9lbmMsIGRwdV9rbXMsIGFkal9tb2RlKTsKIAogCS8qIFJlc2VydmUgZHluYW1p YyByZXNvdXJjZXMgbm93LiBJbmRpY2F0aW5nIG5vbi1BdG9taWNUZXN0IHBoYXNlICovCiAJcmV0 ID0gZHB1X3JtX3Jlc2VydmUoJmRwdV9rbXMtPnJtLCBkcm1fZW5jLCBkcm1fZW5jLT5jcnRjLT5z dGF0ZSwKLQkJCWNvbm4tPnN0YXRlLCBmYWxzZSk7CisJCQljb25uLT5zdGF0ZSwgdG9wb2xvZ3ks IGZhbHNlKTsKIAlpZiAocmV0KSB7CiAJCURQVV9FUlJPUl9FTkMoZHB1X2VuYywKIAkJCQkiZmFp bGVkIHRvIHJlc2VydmUgaHcgcmVzb3VyY2VzLCAlZFxuIiwgcmV0KTsKQEAgLTEyMDMsNiArMTE3 NSw3IEBAIHN0YXRpYyB2b2lkIGRwdV9lbmNvZGVyX3ZpcnRfbW9kZV9zZXQoc3RydWN0IGRybV9l bmNvZGVyICpkcm1fZW5jLAogCQlkcHVfZW5jLT5od19wcFtpXSA9IChzdHJ1Y3QgZHB1X2h3X3Bp bmdwb25nICopIHBwX2l0ZXIuaHc7CiAJfQogCisJdG9wb2xvZ3lfbmFtZSA9IGRwdV9ybV9nZXRf dG9wb2xvZ3lfbmFtZSh0b3BvbG9neSk7CiAJZm9yIChpID0gMDsgaSA8IGRwdV9lbmMtPm51bV9w aHlzX2VuY3M7IGkrKykgewogCQlzdHJ1Y3QgZHB1X2VuY29kZXJfcGh5cyAqcGh5cyA9IGRwdV9l bmMtPnBoeXNfZW5jc1tpXTsKIApAQCAtMTIxNCw2ICsxMTg3LDcgQEAgc3RhdGljIHZvaWQgZHB1 X2VuY29kZXJfdmlydF9tb2RlX3NldChzdHJ1Y3QgZHJtX2VuY29kZXIgKmRybV9lbmMsCiAJCQl9 CiAJCQlwaHlzLT5od19wcCA9IGRwdV9lbmMtPmh3X3BwW2ldOwogCQkJcGh5cy0+Y29ubmVjdG9y ID0gY29ubi0+c3RhdGUtPmNvbm5lY3RvcjsKKwkJCXBoeXMtPnRvcG9sb2d5X25hbWUgPSB0b3Bv bG9neV9uYW1lOwogCQkJaWYgKHBoeXMtPm9wcy5tb2RlX3NldCkKIAkJCQlwaHlzLT5vcHMubW9k ZV9zZXQocGh5cywgbW9kZSwgYWRqX21vZGUpOwogCQl9CkBAIC0xNzExLDggKzE2ODUsNiBAQCBp bnQgZHB1X2VuY29kZXJfaGVscGVyX3dhaXRfZXZlbnRfdGltZW91dCgKIHZvaWQgZHB1X2VuY29k ZXJfaGVscGVyX2h3X3Jlc2V0KHN0cnVjdCBkcHVfZW5jb2Rlcl9waHlzICpwaHlzX2VuYykKIHsK IAlzdHJ1Y3QgZHB1X2VuY29kZXJfdmlydCAqZHB1X2VuYzsKLQlzdHJ1Y3QgZHB1X2Nvbm5lY3Rv ciAqZHB1X2NvbjsKLQl2b2lkICpkcHVfY29uX2Rpc3A7CiAJc3RydWN0IGRwdV9od19jdGwgKmN0 bDsKIAlpbnQgcmM7CiAKQEAgLTE3MjksMjIgKzE3MDEsNiBAQCB2b2lkIGRwdV9lbmNvZGVyX2hl bHBlcl9od19yZXNldChzdHJ1Y3QgZHB1X2VuY29kZXJfcGh5cyAqcGh5c19lbmMpCiAJRFBVX0RF QlVHX0VOQyhkcHVfZW5jLCAiY3RsICVkIHJlc2V0XG4iLCAgY3RsLT5pZHgpOwogCURQVV9FVlQz MihEUk1JRChwaHlzX2VuYy0+cGFyZW50KSwgY3RsLT5pZHgpOwogCi0JaWYgKHBoeXNfZW5jLT5v cHMuaXNfbWFzdGVyICYmIHBoeXNfZW5jLT5vcHMuaXNfbWFzdGVyKHBoeXNfZW5jKSAmJgotCQkJ cGh5c19lbmMtPmNvbm5lY3RvcikgewotCQlkcHVfY29uID0gdG9fZHB1X2Nvbm5lY3RvcihwaHlz X2VuYy0+Y29ubmVjdG9yKTsKLQkJZHB1X2Nvbl9kaXNwID0gZHB1X2Nvbm5lY3Rvcl9nZXRfZGlz cGxheShwaHlzX2VuYy0+Y29ubmVjdG9yKTsKLQotCQlpZiAoZHB1X2Nvbi0+b3BzLnNvZnRfcmVz ZXQpIHsKLQkJCXJjID0gZHB1X2Nvbi0+b3BzLnNvZnRfcmVzZXQoZHB1X2Nvbl9kaXNwKTsKLQkJ CWlmIChyYykgewotCQkJCURQVV9FUlJPUl9FTkMoZHB1X2VuYywKLQkJCQkJCSJjb25uZWN0b3Ig c29mdCByZXNldCBmYWlsdXJlXG4iKTsKLQkJCQlEUFVfREJHX0RVTVAoImFsbCIsICJkYmdfYnVz IiwgInZiaWZfZGJnX2J1cyIsCi0JCQkJCQkJCSJwYW5pYyIpOwotCQkJfQotCQl9Ci0JfQotCiAJ cmMgPSBjdGwtPm9wcy5yZXNldChjdGwpOwogCWlmIChyYykgewogCQlEUFVfRVJST1JfRU5DKGRw dV9lbmMsICJjdGwgJWQgcmVzZXQgZmFpbHVyZVxuIiwgIGN0bC0+aWR4KTsKQEAgLTE4NjIsMjIg KzE4MTgsNiBAQCB2b2lkIGRwdV9lbmNvZGVyX3RyaWdnZXJfa2lja29mZl9wZW5kaW5nKHN0cnVj dCBkcm1fZW5jb2RlciAqZHJtX2VuYykKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIF9kcHVfZW5jb2Rl cl9zZXR1cF9kaXRoZXIoc3RydWN0IGRwdV9lbmNvZGVyX3BoeXMgKnBoeXMpCi17Ci0Jdm9pZCAq ZGl0aGVyX2NmZzsKLQlpbnQgcmV0ID0gMDsKLQlzaXplX3QgbGVuID0gMDsKLQotCWlmICghcGh5 cyB8fCAhcGh5cy0+Y29ubmVjdG9yIHx8ICFwaHlzLT5od19wcCB8fAotCQkJIXBoeXMtPmh3X3Bw LT5vcHMuc2V0dXBfZGl0aGVyKQotCQlyZXR1cm47Ci0KLQlyZXQgPSBkcHVfY29ubmVjdG9yX2dl dF9kaXRoZXJfY2ZnKHBoeXMtPmNvbm5lY3RvciwKLQkJCQlwaHlzLT5jb25uZWN0b3ItPnN0YXRl LCAmZGl0aGVyX2NmZywgJmxlbik7Ci0JaWYgKCFyZXQpCi0JCXBoeXMtPmh3X3BwLT5vcHMuc2V0 dXBfZGl0aGVyKHBoeXMtPmh3X3BwLCBkaXRoZXJfY2ZnLCBsZW4pOwotfQotCiBzdGF0aWMgdTMy IF9kcHVfZW5jb2Rlcl9jYWxjdWxhdGVfbGluZXRpbWUoc3RydWN0IGRwdV9lbmNvZGVyX3ZpcnQg KmRwdV9lbmMsCiAJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQogewpAQCAtMjAyOCw3 ICsxOTY4LDYgQEAgdm9pZCBkcHVfZW5jb2Rlcl9wcmVwYXJlX2Zvcl9raWNrb2ZmKHN0cnVjdCBk cm1fZW5jb2RlciAqZHJtX2VuYywKIAlzdHJ1Y3QgZHB1X2VuY29kZXJfcGh5cyAqcGh5czsKIAli b29sIG5lZWRzX2h3X3Jlc2V0ID0gZmFsc2U7CiAJdW5zaWduZWQgaW50IGk7Ci0JaW50IHJjOwog CiAJaWYgKCFkcm1fZW5jIHx8ICFwYXJhbXMpIHsKIAkJRFBVX0VSUk9SKCJpbnZhbGlkIGFyZ3Nc biIpOwpAQCAtMjA0OCw3ICsxOTg3LDYgQEAgdm9pZCBkcHVfZW5jb2Rlcl9wcmVwYXJlX2Zvcl9r aWNrb2ZmKHN0cnVjdCBkcm1fZW5jb2RlciAqZHJtX2VuYywKIAkJCQlwaHlzLT5vcHMucHJlcGFy ZV9mb3Jfa2lja29mZihwaHlzLCBwYXJhbXMpOwogCQkJaWYgKHBoeXMtPmVuYWJsZV9zdGF0ZSA9 PSBEUFVfRU5DX0VSUl9ORUVEU19IV19SRVNFVCkKIAkJCQluZWVkc19od19yZXNldCA9IHRydWU7 Ci0JCQlfZHB1X2VuY29kZXJfc2V0dXBfZGl0aGVyKHBoeXMpOwogCQl9CiAJfQogCURQVV9BVFJB Q0VfRU5EKCJlbmNfcHJlcGFyZV9mb3Jfa2lja29mZiIpOwpAQCAtMjA2NCwxNCArMjAwMiw2IEBA IHZvaWQgZHB1X2VuY29kZXJfcHJlcGFyZV9mb3Jfa2lja29mZihzdHJ1Y3QgZHJtX2VuY29kZXIg KmRybV9lbmMsCiAJCQkJcGh5cy0+b3BzLmh3X3Jlc2V0KHBoeXMpOwogCQl9CiAJfQotCi0JaWYg KGRwdV9lbmMtPmN1cl9tYXN0ZXIgJiYgZHB1X2VuYy0+Y3VyX21hc3Rlci0+Y29ubmVjdG9yKSB7 Ci0JCXJjID0gZHB1X2Nvbm5lY3Rvcl9wcmVfa2lja29mZihkcHVfZW5jLT5jdXJfbWFzdGVyLT5j b25uZWN0b3IpOwotCQlpZiAocmMpCi0JCQlEUFVfRVJST1JfRU5DKGRwdV9lbmMsICJraWNrb2Zm IGNvbm4lZCBmYWlsZWQgcmMgJWRcbiIsCi0JCQkJCWRwdV9lbmMtPmN1cl9tYXN0ZXItPmNvbm5l Y3Rvci0+YmFzZS5pZCwKLQkJCQkJcmMpOwotCX0KIH0KIAogdm9pZCBkcHVfZW5jb2Rlcl9raWNr b2ZmKHN0cnVjdCBkcm1fZW5jb2RlciAqZHJtX2VuYykKQEAgLTI3MDQsOCArMjYzNCw3IEBAIHN0 YXRpYyB2b2lkIGRwdV9lbmNvZGVyX2ZyYW1lX2RvbmVfdGltZW91dChzdHJ1Y3QgdGltZXJfbGlz dCAqdCkKIAkJLmVhcmx5X3VucmVnaXN0ZXIgPSBkcHVfZW5jb2Rlcl9lYXJseV91bnJlZ2lzdGVy LAogfTsKIAotc3RydWN0IGRybV9lbmNvZGVyICpkcHVfZW5jb2Rlcl9pbml0KAotCQlzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2LAoraW50IGRwdV9lbmNvZGVyX3NldHVwKHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYsIHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jLAogCQlzdHJ1Y3QgbXNtX2Rpc3BsYXlfaW5m byAqZGlzcF9pbmZvKQogewogCXN0cnVjdCBtc21fZHJtX3ByaXZhdGUgKnByaXYgPSBkZXYtPmRl dl9wcml2YXRlOwpAQCAtMjcxNSwxMSArMjY0NCw3IEBAIHN0cnVjdCBkcm1fZW5jb2RlciAqZHB1 X2VuY29kZXJfaW5pdCgKIAlpbnQgZHJtX2VuY19tb2RlID0gRFJNX01PREVfRU5DT0RFUl9OT05F OwogCWludCByZXQgPSAwOwogCi0JZHB1X2VuYyA9IGt6YWxsb2Moc2l6ZW9mKCpkcHVfZW5jKSwg R0ZQX0tFUk5FTCk7Ci0JaWYgKCFkcHVfZW5jKSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8g ZmFpbDsKLQl9CisJZHB1X2VuYyA9IHRvX2RwdV9lbmNvZGVyX3ZpcnQoZW5jKTsKIAogCW11dGV4 X2luaXQoJmRwdV9lbmMtPmVuY19sb2NrKTsKIAlyZXQgPSBkcHVfZW5jb2Rlcl9zZXR1cF9kaXNw bGF5KGRwdV9lbmMsIGRwdV9rbXMsIGRpc3BfaW5mbywKQEAgLTI3MjksMTYgKzI2NTQsMTIgQEAg c3RydWN0IGRybV9lbmNvZGVyICpkcHVfZW5jb2Rlcl9pbml0KAogCiAJZHB1X2VuYy0+Y3VyX21h c3RlciA9IE5VTEw7CiAJc3Bpbl9sb2NrX2luaXQoJmRwdV9lbmMtPmVuY19zcGlubG9jayk7Ci0J ZHJtX2VuYyA9ICZkcHVfZW5jLT5iYXNlOwotCWRybV9lbmNvZGVyX2luaXQoZGV2LCBkcm1fZW5j LCAmZHB1X2VuY29kZXJfZnVuY3MsIGRybV9lbmNfbW9kZSwgTlVMTCk7Ci0JZHJtX2VuY29kZXJf aGVscGVyX2FkZChkcm1fZW5jLCAmZHB1X2VuY29kZXJfaGVscGVyX2Z1bmNzKTsKIAogCWF0b21p Y19zZXQoJmRwdV9lbmMtPmZyYW1lX2RvbmVfdGltZW91dCwgMCk7CiAJdGltZXJfc2V0dXAoJmRw dV9lbmMtPmZyYW1lX2RvbmVfdGltZXIsCiAJCQlkcHVfZW5jb2Rlcl9mcmFtZV9kb25lX3RpbWVv dXQsIDApOwogCi0JaWYgKChkaXNwX2luZm8tPmludGZfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNU T1JfRFNJKSAmJgotCQkJZGlzcF9pbmZvLT5pc19wcmltYXJ5KQorCWlmIChkaXNwX2luZm8tPmlu dGZfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfRFNJKQogCQl0aW1lcl9zZXR1cCgmZHB1X2Vu Yy0+dnN5bmNfZXZlbnRfdGltZXIsCiAJCQkJZHB1X2VuY29kZXJfdnN5bmNfZXZlbnRfaGFuZGxl ciwKIAkJCQkwKTsKQEAgLTI3NTYsMTQgKzI2NzcsMzggQEAgc3RydWN0IGRybV9lbmNvZGVyICpk cHVfZW5jb2Rlcl9pbml0KAogCiAJRFBVX0RFQlVHX0VOQyhkcHVfZW5jLCAiY3JlYXRlZFxuIik7 CiAKLQlyZXR1cm4gZHJtX2VuYzsKKwlyZXR1cm4gcmV0OwogCiBmYWlsOgogCURQVV9FUlJPUigi ZmFpbGVkIHRvIGNyZWF0ZSBlbmNvZGVyXG4iKTsKIAlpZiAoZHJtX2VuYykKIAkJZHB1X2VuY29k ZXJfZGVzdHJveShkcm1fZW5jKTsKIAotCXJldHVybiBFUlJfUFRSKHJldCk7CisJcmV0dXJuIHJl dDsKKworCit9CisKK3N0cnVjdCBkcm1fZW5jb2RlciAqZHB1X2VuY29kZXJfaW5pdChzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2LAorCQlpbnQgZHJtX2VuY19tb2RlKQoreworCXN0cnVjdCBkcHVfZW5j b2Rlcl92aXJ0ICpkcHVfZW5jID0gTlVMTDsKKwlpbnQgcmMgPSAwOworCisJZHB1X2VuYyA9IGRl dm1fa3phbGxvYyhkZXYtPmRldiwgc2l6ZW9mKCpkcHVfZW5jKSwgR0ZQX0tFUk5FTCk7CisJaWYg KCFkcHVfZW5jKQorCQlyZXR1cm4gRVJSX1BUUihFTk9NRU0pOworCisJcmMgPSBkcm1fZW5jb2Rl cl9pbml0KGRldiwgJmRwdV9lbmMtPmJhc2UsICZkcHVfZW5jb2Rlcl9mdW5jcywKKwkJCWRybV9l bmNfbW9kZSwgTlVMTCk7CisJaWYgKHJjKSB7CisJCWRldm1fa2ZyZWUoZGV2LT5kZXYsIGRwdV9l bmMpOworCQlyZXR1cm4gRVJSX1BUUihyYyk7CisJfQorCisJZHJtX2VuY29kZXJfaGVscGVyX2Fk ZCgmZHB1X2VuYy0+YmFzZSwgJmRwdV9lbmNvZGVyX2hlbHBlcl9mdW5jcyk7CisKKwlyZXR1cm4g JmRwdV9lbmMtPmJhc2U7CiB9CiAKIGludCBkcHVfZW5jb2Rlcl93YWl0X2Zvcl9ldmVudChzdHJ1 Y3QgZHJtX2VuY29kZXIgKmRybV9lbmMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNt L2Rpc3AvZHB1MS9kcHVfZW5jb2Rlci5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEv ZHB1X2VuY29kZXIuaAppbmRleCBiMjU2MTlkLi5kODUzYWQ5IDEwMDY0NAotLS0gYS9kcml2ZXJz L2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlci5oCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyLmgKQEAgLTQ1LDcgKzQ1LDYgQEAgc3RydWN0IGRw dV9lbmNvZGVyX2h3X3Jlc291cmNlcyB7CiAJZW51bSBkcHVfaW50Zl9tb2RlIHdic1tXQl9NQVhd OwogCWJvb2wgbmVlZHNfY2RtOwogCXUzMiBkaXNwbGF5X251bV9vZl9oX3RpbGVzOwotCXN0cnVj dCBtc21fZGlzcGxheV90b3BvbG9neSB0b3BvbG9neTsKIH07CiAKIC8qKgpAQCAtMTYwLDYgKzE1 OSwxNSBAQCBpbnQgZHB1X2VuY29kZXJfd2FpdF9mb3JfZXZlbnQoc3RydWN0IGRybV9lbmNvZGVy ICpkcm1fZW5jb2RlciwKICAqLwogc3RydWN0IGRybV9lbmNvZGVyICpkcHVfZW5jb2Rlcl9pbml0 KAogCQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQlpbnQgZHJtX2VuY19tb2RlKTsKKworLyoq CisgKiBkcHVfZW5jb2Rlcl9zZXR1cCAtIHNldHVwIGRwdV9lbmNvZGVyIGZvciB0aGUgZGlzcGxh eSBwcm9iZWQKKyAqIEBkZXY6CQlQb2ludGVyIHRvIGRybSBkZXZpY2Ugc3RydWN0dXJlCisgKiBA ZW5jOgkJUG9pbnRlciB0byB0aGUgZHJtX2VuY29kZXIKKyAqIEBkaXNwX2luZm86CVBvaW50ZXIg dG8gdGhlIGRpc3BsYXkgaW5mbworICovCitpbnQgZHB1X2VuY29kZXJfc2V0dXAoc3RydWN0IGRy bV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9lbmNvZGVyICplbmMsCiAJCXN0cnVjdCBtc21fZGlz cGxheV9pbmZvICpkaXNwX2luZm8pOwogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyX3BoeXMuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20v ZGlzcC9kcHUxL2RwdV9lbmNvZGVyX3BoeXMuaAppbmRleCA1NzZjNDc1Li4zNWJlZWZhIDEwMDY0 NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlcl9waHlzLmgK KysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXJfcGh5cy5oCkBA IC0yNSw3ICsyNSw2IEBACiAjaW5jbHVkZSAiZHB1X2h3X3diLmgiCiAjaW5jbHVkZSAiZHB1X2h3 X2NkbS5oIgogI2luY2x1ZGUgImRwdV9lbmNvZGVyLmgiCi0jaW5jbHVkZSAiZHB1X2Nvbm5lY3Rv ci5oIgogCiAjZGVmaW5lIERQVV9FTkNPREVSX05BTUVfTUFYCTE2CiAKQEAgLTIyMSw2ICsyMjAs NyBAQCBzdHJ1Y3QgZHB1X2VuY29kZXJfaXJxIHsKICAqIEBzcGxpdF9yb2xlOgkJUm9sZSB0byBw bGF5IGluIGEgc3BsaXQtcGFuZWwgY29uZmlndXJhdGlvbgogICogQGludGZfbW9kZToJCUludGVy ZmFjZSBtb2RlCiAgKiBAaW50Zl9pZHg6CQlJbnRlcmZhY2UgaW5kZXggb24gZHB1IGhhcmR3YXJl CisgKiBAdG9wb2xvZ3lfbmFtZToJdG9wb2xvZ3kgc2VsZWN0ZWQgZm9yIHRoZSBkaXNwbGF5CiAg KiBAZW5jX3NwaW5sb2NrOglWaXJ0dWFsLUVuY29kZXItV2lkZSBTcGluIExvY2sgZm9yIElSUSBw dXJwb3NlcwogICogQGVuYWJsZV9zdGF0ZToJRW5hYmxlIHN0YXRlIHRyYWNraW5nCiAgKiBAdmJs YW5rX3JlZmNvdW50OglSZWZlcmVuY2UgY291bnQgb2YgdmJsYW5rIHJlcXVlc3QKQEAgLTI1MCw2 ICsyNTAsNyBAQCBzdHJ1Y3QgZHB1X2VuY29kZXJfcGh5cyB7CiAJZW51bSBkcHVfZW5jX3NwbGl0 X3JvbGUgc3BsaXRfcm9sZTsKIAllbnVtIGRwdV9pbnRmX21vZGUgaW50Zl9tb2RlOwogCWVudW0g ZHB1X2ludGYgaW50Zl9pZHg7CisJZW51bSBkcHVfcm1fdG9wb2xvZ3lfbmFtZSB0b3BvbG9neV9u YW1lOwogCXNwaW5sb2NrX3QgKmVuY19zcGlubG9jazsKIAllbnVtIGRwdV9lbmNfZW5hYmxlX3N0 YXRlIGVuYWJsZV9zdGF0ZTsKIAlhdG9taWNfdCB2YmxhbmtfcmVmY291bnQ7CkBAIC00NDMsMTQg KzQ0NCwxMSBAQCBpbnQgZHB1X2VuY29kZXJfaGVscGVyX3dhaXRfZXZlbnRfdGltZW91dCgKIHN0 YXRpYyBpbmxpbmUgZW51bSBkcHVfM2RfYmxlbmRfbW9kZSBkcHVfZW5jb2Rlcl9oZWxwZXJfZ2V0 XzNkX2JsZW5kX21vZGUoCiAJCXN0cnVjdCBkcHVfZW5jb2Rlcl9waHlzICpwaHlzX2VuYykKIHsK LQllbnVtIGRwdV9ybV90b3BvbG9neV9uYW1lIHRvcG9sb2d5OwotCiAJaWYgKCFwaHlzX2VuYyB8 fCBwaHlzX2VuYy0+ZW5hYmxlX3N0YXRlID09IERQVV9FTkNfRElTQUJMSU5HKQogCQlyZXR1cm4g QkxFTkRfM0RfTk9ORTsKIAotCXRvcG9sb2d5ID0gZHB1X2Nvbm5lY3Rvcl9nZXRfdG9wb2xvZ3lf bmFtZShwaHlzX2VuYy0+Y29ubmVjdG9yKTsKIAlpZiAocGh5c19lbmMtPnNwbGl0X3JvbGUgPT0g RU5DX1JPTEVfU09MTyAmJgotCSAgICB0b3BvbG9neSA9PSBEUFVfUk1fVE9QT0xPR1lfRFVBTFBJ UEVfM0RNRVJHRSkKKwkgICAgcGh5c19lbmMtPnRvcG9sb2d5X25hbWUgPT0gRFBVX1JNX1RPUE9M T0dZX0RVQUxQSVBFXzNETUVSR0UpCiAJCXJldHVybiBCTEVORF8zRF9IX1JPV19JTlQ7CiAKIAly ZXR1cm4gQkxFTkRfM0RfTk9ORTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlz cC9kcHUxL2RwdV9lbmNvZGVyX3BoeXNfdmlkLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3Av ZHB1MS9kcHVfZW5jb2Rlcl9waHlzX3ZpZC5jCmluZGV4IGI2ODA3MTguLjczZTU5MzggMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyX3BoeXNfdmlk LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXJfcGh5c192 aWQuYwpAQCAtMTUsNyArMTUsNiBAQAogI2luY2x1ZGUgImRwdV9od19pbnRlcnJ1cHRzLmgiCiAj aW5jbHVkZSAiZHB1X2NvcmVfaXJxLmgiCiAjaW5jbHVkZSAiZHB1X2Zvcm1hdHMuaCIKLSNpbmNs dWRlICJkc2lfZGlzcGxheS5oIgogI2luY2x1ZGUgImRwdV90cmFjZS5oIgogCiAjZGVmaW5lIERQ VV9ERUJVR19WSURFTkMoZSwgZm10LCAuLi4pIERQVV9ERUJVRygiZW5jJWQgaW50ZiVkICIgZm10 LCBcCkBAIC0zNTYsMTMgKzM1NSwxMCBAQCBzdGF0aWMgdm9pZCBkcHVfZW5jb2Rlcl9waHlzX3Zp ZF91bmRlcnJ1bl9pcnEodm9pZCAqYXJnLCBpbnQgaXJxX2lkeCkKIAogc3RhdGljIGJvb2wgX2Rw dV9lbmNvZGVyX3BoeXNfaXNfZHVhbF9jdGwoc3RydWN0IGRwdV9lbmNvZGVyX3BoeXMgKnBoeXNf ZW5jKQogewotCWVudW0gZHB1X3JtX3RvcG9sb2d5X25hbWUgdG9wb2xvZ3k7Ci0KIAlpZiAoIXBo eXNfZW5jKQogCQlyZXR1cm4gZmFsc2U7CiAKLQl0b3BvbG9neSA9IGRwdV9jb25uZWN0b3JfZ2V0 X3RvcG9sb2d5X25hbWUocGh5c19lbmMtPmNvbm5lY3Rvcik7Ci0JaWYgKHRvcG9sb2d5ID09IERQ VV9STV9UT1BPTE9HWV9EVUFMUElQRSkKKwlpZiAocGh5c19lbmMtPnRvcG9sb2d5X25hbWUgPT0g RFBVX1JNX1RPUE9MT0dZX0RVQUxQSVBFKQogCQlyZXR1cm4gdHJ1ZTsKIAogCXJldHVybiBmYWxz ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9rbXMuYyBi L2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9rbXMuYwppbmRleCA1N2Q4MDhkLi45 ZWQ1NmZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfa21z LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2ttcy5jCkBAIC0yNywx OCArMjcsNiBAQAogI2luY2x1ZGUgIm1zbV9tbXUuaCIKICNpbmNsdWRlICJtc21fZ2VtLmgiCiAK LSNpZmRlZiBDT05GSUdfRFJNX01TTV9EU0lfU1RBR0lORwotI2luY2x1ZGUgImRzaV9kaXNwbGF5 LmgiCi0jaW5jbHVkZSAiZHNpX2RybS5oIgotI2VuZGlmCi0jaWZkZWYgQ09ORklHX0RSTV9NU01f V1JJVEVCQUNLCi0jaW5jbHVkZSAiZHB1X3diLmgiCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfRFJN X01TTV9ESVNQTEFZUE9SVAotI2luY2x1ZGUgImRwL2RwX2Rpc3BsYXkuaCIKLSNpbmNsdWRlICJk cF9kcm0uaCIKLSNlbmRpZgotI2luY2x1ZGUgImRwdV9jb25uZWN0b3IuaCIKICNpbmNsdWRlICJk cHVfa21zLmgiCiAjaW5jbHVkZSAiZHB1X2NvcmVfaXJxLmgiCiAjaW5jbHVkZSAiZHB1X2Zvcm1h dHMuaCIKQEAgLTQ2OCw5ICs0NTYsNyBAQCBzdGF0aWMgdm9pZCBkcHVfa21zX2NvbXBsZXRlX2Nv bW1pdChzdHJ1Y3QgbXNtX2ttcyAqa21zLAogCXN0cnVjdCBtc21fZHJtX3ByaXZhdGUgKnByaXY7 CiAJc3RydWN0IGRybV9jcnRjICpjcnRjOwogCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqb2xkX2Ny dGNfc3RhdGU7Ci0Jc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm47Ci0Jc3RydWN0IGRybV9jb25u ZWN0b3Jfc3RhdGUgKm9sZF9jb25uX3N0YXRlOwotCWludCBpLCByYyA9IDA7CisJaW50IGk7CiAK IAlpZiAoIWttcyB8fCAhb2xkX3N0YXRlKQogCQlyZXR1cm47CkBAIC00ODMsMTkgKzQ2OSw2IEBA IHN0YXRpYyB2b2lkIGRwdV9rbXNfY29tcGxldGVfY29tbWl0KHN0cnVjdCBtc21fa21zICprbXMs CiAJZm9yX2VhY2hfb2xkX2NydGNfaW5fc3RhdGUob2xkX3N0YXRlLCBjcnRjLCBvbGRfY3J0Y19z dGF0ZSwgaSkKIAkJZHB1X2NydGNfY29tcGxldGVfY29tbWl0KGNydGMsIG9sZF9jcnRjX3N0YXRl KTsKIAotCWZvcl9lYWNoX29sZF9jb25uZWN0b3JfaW5fc3RhdGUob2xkX3N0YXRlLCBjb25uLCBv bGRfY29ubl9zdGF0ZSwgaSkgewotCQlzdHJ1Y3QgZHB1X2Nvbm5lY3RvciAqY19jb25uOwotCi0J CWNfY29ubiA9IHRvX2RwdV9jb25uZWN0b3IoY29ubik7Ci0JCWlmICghY19jb25uLT5vcHMucG9z dF9raWNrb2ZmKQotCQkJY29udGludWU7Ci0JCXJjID0gY19jb25uLT5vcHMucG9zdF9raWNrb2Zm KGNvbm4pOwotCQlpZiAocmMpIHsKLQkJCXByX2VycigiQ29ubmVjdG9yIFBvc3Qga2lja29mZiBm YWlsZWQgcmM9JWRcbiIsCi0JCQkJCSByYyk7Ci0JCX0KLQl9Ci0KIAlkcHVfcG93ZXJfcmVzb3Vy Y2VfZW5hYmxlKCZwcml2LT5waGFuZGxlLCBkcHVfa21zLT5jb3JlX2NsaWVudCwgZmFsc2UpOwog CXBtX3J1bnRpbWVfcHV0X3N5bmMoZHB1X2ttcy0+ZGV2LT5kZXYpOwogCkBAIC01NDgsMzE3ICs1 MjEsMzYgQEAgc3RhdGljIHZvaWQgZHB1X2ttc193YWl0X2Zvcl9jb21taXRfZG9uZShzdHJ1Y3Qg bXNtX2ttcyAqa21zLAogCWRybV9jcnRjX3ZibGFua19wdXQoY3J0Yyk7CiB9CiAKLS8qKgotICog X2RwdV9rbXNfZ2V0X2Rpc3BsYXlzIC0gcXVlcnkgZm9yIHVuZGVybHlpbmcgZGlzcGxheSBoYW5k bGVzIGFuZCBjYWNoZSB0aGVtCi0gKiBAZHB1X2ttczogICAgUG9pbnRlciB0byBkcHUga21zIHN0 cnVjdHVyZQotICogUmV0dXJuczogICAgIFplcm8gb24gc3VjY2VzcwotICovCi1zdGF0aWMgaW50 IF9kcHVfa21zX2dldF9kaXNwbGF5cyhzdHJ1Y3QgZHB1X2ttcyAqZHB1X2ttcykKLXsKLQlpbnQg cmMgPSAtRU5PTUVNOwotCi0JaWYgKCFkcHVfa21zKSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBk cHUga21zXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0jaWZkZWYgQ09ORklHX0RSTV9N U01fRFNJX1NUQUdJTkcKLQkvKiBkc2kgKi8KLQlkcHVfa21zLT5kc2lfZGlzcGxheXMgPSBOVUxM OwotCWRwdV9rbXMtPmRzaV9kaXNwbGF5X2NvdW50ID0gZHNpX2Rpc3BsYXlfZ2V0X251bV9vZl9k aXNwbGF5cygpOwotCWlmIChkcHVfa21zLT5kc2lfZGlzcGxheV9jb3VudCkgewotCQlkcHVfa21z LT5kc2lfZGlzcGxheXMgPSBrY2FsbG9jKGRwdV9rbXMtPmRzaV9kaXNwbGF5X2NvdW50LAotCQkJ CXNpemVvZih2b2lkICopLAotCQkJCUdGUF9LRVJORUwpOwotCQlpZiAoIWRwdV9rbXMtPmRzaV9k aXNwbGF5cykgewotCQkJRFBVX0VSUk9SKCJmYWlsZWQgdG8gYWxsb2NhdGUgZHNpIGRpc3BsYXlz XG4iKTsKLQkJCWdvdG8gZXhpdF9kZWluaXRfZHNpOwotCQl9Ci0JCWRwdV9rbXMtPmRzaV9kaXNw bGF5X2NvdW50ID0KLQkJCWRzaV9kaXNwbGF5X2dldF9hY3RpdmVfZGlzcGxheXMoZHB1X2ttcy0+ ZHNpX2Rpc3BsYXlzLAotCQkJCQlkcHVfa21zLT5kc2lfZGlzcGxheV9jb3VudCk7Ci0JfQotI2Vu ZGlmCi0KLSNpZmRlZiBDT05GSUdfRFJNX01TTV9XUklURUJBQ0sKLQkvKiB3YiAqLwotCWRwdV9r bXMtPndiX2Rpc3BsYXlzID0gTlVMTDsKLQlkcHVfa21zLT53Yl9kaXNwbGF5X2NvdW50ID0gZHB1 X3diX2dldF9udW1fb2ZfZGlzcGxheXMoKTsKLQlpZiAoZHB1X2ttcy0+d2JfZGlzcGxheV9jb3Vu dCkgewotCQlkcHVfa21zLT53Yl9kaXNwbGF5cyA9IGtjYWxsb2MoZHB1X2ttcy0+d2JfZGlzcGxh eV9jb3VudCwKLQkJCQlzaXplb2Yodm9pZCAqKSwKLQkJCQlHRlBfS0VSTkVMKTsKLQkJaWYgKCFk cHVfa21zLT53Yl9kaXNwbGF5cykgewotCQkJRFBVX0VSUk9SKCJmYWlsZWQgdG8gYWxsb2NhdGUg d2IgZGlzcGxheXNcbiIpOwotCQkJZ290byBleGl0X2RlaW5pdF93YjsKLQkJfQotCQlkcHVfa21z LT53Yl9kaXNwbGF5X2NvdW50ID0KLQkJCXdiX2Rpc3BsYXlfZ2V0X2Rpc3BsYXlzKGRwdV9rbXMt PndiX2Rpc3BsYXlzLAotCQkJCQlkcHVfa21zLT53Yl9kaXNwbGF5X2NvdW50KTsKLQl9Ci0jZW5k aWYKLQotI2lmZGVmIENPTkZJR19EUk1fTVNNX0RJU1BMQVlQT1JUCi0JLyogZHAgKi8KLQlkcHVf a21zLT5kcF9kaXNwbGF5cyA9IE5VTEw7Ci0JZHB1X2ttcy0+ZHBfZGlzcGxheV9jb3VudCA9IGRw X2Rpc3BsYXlfZ2V0X251bV9vZl9kaXNwbGF5cygpOwotCWlmIChkcHVfa21zLT5kcF9kaXNwbGF5 X2NvdW50KSB7Ci0JCWRwdV9rbXMtPmRwX2Rpc3BsYXlzID0ga2NhbGxvYyhkcHVfa21zLT5kcF9k aXNwbGF5X2NvdW50LAotCQkJCXNpemVvZih2b2lkICopLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFk cHVfa21zLT5kcF9kaXNwbGF5cykgewotCQkJRFBVX0VSUk9SKCJmYWlsZWQgdG8gYWxsb2NhdGUg ZHAgZGlzcGxheXNcbiIpOwotCQkJZ290byBleGl0X2RlaW5pdF9kcDsKLQkJfQotCQlkcHVfa21z LT5kcF9kaXNwbGF5X2NvdW50ID0KLQkJCWRwX2Rpc3BsYXlfZ2V0X2Rpc3BsYXlzKGRwdV9rbXMt PmRwX2Rpc3BsYXlzLAotCQkJCQlkcHVfa21zLT5kcF9kaXNwbGF5X2NvdW50KTsKLQl9Ci0jZW5k aWYKLQotCXJldHVybiAwOwotCi0jaWZkZWYgQ09ORklHX0RSTV9NU01fRElTUExBWVBPUlQKLWV4 aXRfZGVpbml0X2RwOgotCWtmcmVlKGRwdV9rbXMtPmRwX2Rpc3BsYXlzKTsKLQlkcHVfa21zLT5k cF9kaXNwbGF5X2NvdW50ID0gMDsKLQlkcHVfa21zLT5kcF9kaXNwbGF5cyA9IE5VTEw7Ci0jZW5k aWYKLSNpZmRlZiBDT05GSUdfRFJNX01TTV9XUklURUJBQ0sKLWV4aXRfZGVpbml0X3diOgotCWtm cmVlKGRwdV9rbXMtPndiX2Rpc3BsYXlzKTsKLQlkcHVfa21zLT53Yl9kaXNwbGF5X2NvdW50ID0g MDsKLQlkcHVfa21zLT53Yl9kaXNwbGF5cyA9IE5VTEw7Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdf RFJNX01TTV9EU0lfU1RBR0lORwotZXhpdF9kZWluaXRfZHNpOgotCWtmcmVlKGRwdV9rbXMtPmRz aV9kaXNwbGF5cyk7Ci0JZHB1X2ttcy0+ZHNpX2Rpc3BsYXlfY291bnQgPSAwOwotCWRwdV9rbXMt PmRzaV9kaXNwbGF5cyA9IE5VTEw7Ci0JcmV0dXJuIHJjOwotI2Vsc2UKLQlyZXR1cm4gcmM7Ci0j ZW5kaWYKLX0KLQotLyoqCi0gKiBfZHB1X2ttc19yZWxlYXNlX2Rpc3BsYXlzIC0gcmVsZWFzZSBj YWNoZSBvZiB1bmRlcmx5aW5nIGRpc3BsYXkgaGFuZGxlcwotICogQGRwdV9rbXM6ICAgIFBvaW50 ZXIgdG8gZHB1IGttcyBzdHJ1Y3R1cmUKLSAqLwotc3RhdGljIHZvaWQgX2RwdV9rbXNfcmVsZWFz ZV9kaXNwbGF5cyhzdHJ1Y3QgZHB1X2ttcyAqZHB1X2ttcykKLXsKLQlpZiAoIWRwdV9rbXMpIHsK LQkJRFBVX0VSUk9SKCJpbnZhbGlkIGRwdSBrbXNcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0Ja2Zy ZWUoZHB1X2ttcy0+d2JfZGlzcGxheXMpOwotCWRwdV9rbXMtPndiX2Rpc3BsYXlzID0gTlVMTDsK LQlkcHVfa21zLT53Yl9kaXNwbGF5X2NvdW50ID0gMDsKLQotCWtmcmVlKGRwdV9rbXMtPmRzaV9k aXNwbGF5cyk7Ci0JZHB1X2ttcy0+ZHNpX2Rpc3BsYXlzID0gTlVMTDsKLQlkcHVfa21zLT5kc2lf ZGlzcGxheV9jb3VudCA9IDA7Ci19Ci0KLSNpZmRlZiBDT05GSUdfRFJNX01TTV9EU0lfU1RBR0lO Rwogc3RhdGljIHZvaWQgX2RwdV9rbXNfaW5pdGlhbGl6ZV9kc2koc3RydWN0IGRybV9kZXZpY2Ug KmRldiwKIAkJCQkgICAgc3RydWN0IG1zbV9kcm1fcHJpdmF0ZSAqcHJpdiwKLQkJCQkgICAgc3Ry dWN0IGRwdV9rbXMgKmRwdV9rbXMsCi0JCQkJICAgIHVuc2lnbmVkIG1heF9lbmNvZGVycykKLXsK LQlzdGF0aWMgY29uc3Qgc3RydWN0IGRwdV9jb25uZWN0b3Jfb3BzIGRzaV9vcHMgPSB7Ci0JCS5w b3N0X2luaXQgPSAgZHNpX2Nvbm5fcG9zdF9pbml0LAotCQkuZGV0ZWN0ID0gICAgIGRzaV9jb25u X2RldGVjdCwKLQkJLmdldF9tb2RlcyA9ICBkc2lfY29ubmVjdG9yX2dldF9tb2RlcywKLQkJLnB1 dF9tb2RlcyA9ICBkc2lfY29ubmVjdG9yX3B1dF9tb2RlcywKLQkJLm1vZGVfdmFsaWQgPSBkc2lf Y29ubl9tb2RlX3ZhbGlkLAotCQkuZ2V0X2luZm8gPSAgIGRzaV9kaXNwbGF5X2dldF9pbmZvLAot CQkuc2V0X2JhY2tsaWdodCA9IGRzaV9kaXNwbGF5X3NldF9iYWNrbGlnaHQsCi0JCS5zb2Z0X3Jl c2V0ICAgPSBkc2lfZGlzcGxheV9zb2Z0X3Jlc2V0LAotCQkucHJlX2tpY2tvZmYgID0gZHNpX2Nv bm5fcHJlX2tpY2tvZmYsCi0JCS5jbGtfY3RybCA9IGRzaV9kaXNwbGF5X2Nsa19jdHJsLAotCQku c2V0X3Bvd2VyID0gZHNpX2Rpc3BsYXlfc2V0X3Bvd2VyLAotCQkuZ2V0X21vZGVfaW5mbyA9IGRz aV9jb25uX2dldF9tb2RlX2luZm8sCi0JCS5nZXRfZHN0X2Zvcm1hdCA9IGRzaV9kaXNwbGF5X2dl dF9kc3RfZm9ybWF0LAotCQkucG9zdF9raWNrb2ZmID0gZHNpX2Nvbm5fcG9zdF9raWNrb2ZmCi0J fTsKLQlzdHJ1Y3QgbXNtX2Rpc3BsYXlfaW5mbyBpbmZvOwotCXN0cnVjdCBkcm1fZW5jb2RlciAq ZW5jb2RlcjsKLQl2b2lkICpkaXNwbGF5LCAqY29ubmVjdG9yOwotCWludCBpLCByYzsKLQotCS8q IGRzaSAqLwotCWZvciAoaSA9IDA7IGkgPCBkcHVfa21zLT5kc2lfZGlzcGxheV9jb3VudCAmJgot CQlwcml2LT5udW1fZW5jb2RlcnMgPCBtYXhfZW5jb2RlcnM7ICsraSkgewotCQlkaXNwbGF5ID0g ZHB1X2ttcy0+ZHNpX2Rpc3BsYXlzW2ldOwotCQllbmNvZGVyID0gTlVMTDsKLQotCQltZW1zZXQo JmluZm8sIDB4MCwgc2l6ZW9mKGluZm8pKTsKLQkJcmMgPSBkc2lfZGlzcGxheV9nZXRfaW5mbygm aW5mbywgZGlzcGxheSk7Ci0JCWlmIChyYykgewotCQkJRFBVX0VSUk9SKCJkc2kgZ2V0X2luZm8g JWQgZmFpbGVkXG4iLCBpKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJZW5jb2RlciA9IGRwdV9l bmNvZGVyX2luaXQoZGV2LCAmaW5mbyk7Ci0JCWlmIChJU19FUlJfT1JfTlVMTChlbmNvZGVyKSkg ewotCQkJRFBVX0VSUk9SKCJlbmNvZGVyIGluaXQgZmFpbGVkIGZvciBkc2kgJWRcbiIsIGkpOwot CQkJY29udGludWU7Ci0JCX0KLQotCQlyYyA9IGRzaV9kaXNwbGF5X2RybV9icmlkZ2VfaW5pdChk aXNwbGF5LCBlbmNvZGVyKTsKLQkJaWYgKHJjKSB7Ci0JCQlEUFVfRVJST1IoImRzaSBicmlkZ2Ug JWQgaW5pdCBmYWlsZWQsICVkXG4iLCBpLCByYyk7Ci0JCQlkcHVfZW5jb2Rlcl9kZXN0cm95KGVu Y29kZXIpOwotCQkJY29udGludWU7Ci0JCX0KLQotCQljb25uZWN0b3IgPSBkcHVfY29ubmVjdG9y X2luaXQoZGV2LAotCQkJCQllbmNvZGVyLAotCQkJCQkwLAotCQkJCQlkaXNwbGF5LAotCQkJCQkm ZHNpX29wcywKLQkJCQkJRFJNX0NPTk5FQ1RPUl9QT0xMX0hQRCwKLQkJCQkJRFJNX01PREVfQ09O TkVDVE9SX0RTSSk7Ci0JCWlmIChjb25uZWN0b3IpIHsKLQkJCXByaXYtPmVuY29kZXJzW3ByaXYt Pm51bV9lbmNvZGVycysrXSA9IGVuY29kZXI7Ci0JCX0gZWxzZSB7Ci0JCQlEUFVfRVJST1IoImRz aSAlZCBjb25uZWN0b3IgaW5pdCBmYWlsZWRcbiIsIGkpOwotCQkJZHNpX2Rpc3BsYXlfZHJtX2Jy aWRnZV9kZWluaXQoZGlzcGxheSk7Ci0JCQlkcHVfZW5jb2Rlcl9kZXN0cm95KGVuY29kZXIpOwot CQl9Ci0JfQotfQotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfRFJNX01TTV9XUklURUJBQ0sKLXN0 YXRpYyB2b2lkIF9kcHVfa21zX2luaXRpYWxpemVfd2Ioc3RydWN0IGRybV9kZXZpY2UgKmRldiwK LQkJCQkgICBzdHJ1Y3QgbXNtX2RybV9wcml2YXRlICpwcml2LAotCQkJCSAgIHN0cnVjdCBkcHVf a21zICpkcHVfa21zLAotCQkJCSAgIHVuc2lnbmVkIG1heF9lbmNvZGVycykKKwkJCQkgICAgc3Ry dWN0IGRwdV9rbXMgKmRwdV9rbXMpCiB7Ci0Jc3RhdGljIGNvbnN0IHN0cnVjdCBkcHVfY29ubmVj dG9yX29wcyB3Yl9vcHMgPSB7Ci0JCS5wb3N0X2luaXQgPSAgICBkcHVfd2JfY29ubmVjdG9yX3Bv c3RfaW5pdCwKLQkJLmRldGVjdCA9ICAgICAgIGRwdV93Yl9jb25uZWN0b3JfZGV0ZWN0LAotCQku Z2V0X21vZGVzID0gICAgZHB1X3diX2Nvbm5lY3Rvcl9nZXRfbW9kZXMsCi0JCS5zZXRfcHJvcGVy dHkgPSBkcHVfd2JfY29ubmVjdG9yX3NldF9wcm9wZXJ0eSwKLQkJLmdldF9pbmZvID0gICAgIGRw dV93Yl9nZXRfaW5mbywKLQkJLnNvZnRfcmVzZXQgPSAgIE5VTEwsCi0JCS5nZXRfbW9kZV9pbmZv ID0gZHB1X3diX2dldF9tb2RlX2luZm8sCi0JCS5nZXRfZHN0X2Zvcm1hdCA9IE5VTEwKLQl9Owot CXN0cnVjdCBtc21fZGlzcGxheV9pbmZvIGluZm87Ci0Jc3RydWN0IGRybV9lbmNvZGVyICplbmNv ZGVyOwotCXZvaWQgKmRpc3BsYXksICpjb25uZWN0b3I7CisJc3RydWN0IGRybV9lbmNvZGVyICpl bmNvZGVyID0gTlVMTDsKIAlpbnQgaSwgcmM7CiAKLQkvKiB3YiAqLwotCWZvciAoaSA9IDA7IGkg PCBkcHVfa21zLT53Yl9kaXNwbGF5X2NvdW50ICYmCi0JCXByaXYtPm51bV9lbmNvZGVycyA8IG1h eF9lbmNvZGVyczsgKytpKSB7Ci0JCWRpc3BsYXkgPSBkcHVfa21zLT53Yl9kaXNwbGF5c1tpXTsK LQkJZW5jb2RlciA9IE5VTEw7Ci0KLQkJbWVtc2V0KCZpbmZvLCAweDAsIHNpemVvZihpbmZvKSk7 Ci0JCXJjID0gZHB1X3diX2dldF9pbmZvKCZpbmZvLCBkaXNwbGF5KTsKLQkJaWYgKHJjKSB7Ci0J CQlEUFVfRVJST1IoIndiIGdldF9pbmZvICVkIGZhaWxlZFxuIiwgaSk7Ci0JCQljb250aW51ZTsK LQkJfQotCi0JCWVuY29kZXIgPSBkcHVfZW5jb2Rlcl9pbml0KGRldiwgJmluZm8pOwotCQlpZiAo SVNfRVJSX09SX05VTEwoZW5jb2RlcikpIHsKLQkJCURQVV9FUlJPUigiZW5jb2RlciBpbml0IGZh aWxlZCBmb3Igd2IgJWRcbiIsIGkpOwotCQkJY29udGludWU7Ci0JCX0KLQotCQlyYyA9IGRwdV93 Yl9kcm1faW5pdChkaXNwbGF5LCBlbmNvZGVyKTsKLQkJaWYgKHJjKSB7Ci0JCQlEUFVfRVJST1Io IndiIGJyaWRnZSAlZCBpbml0IGZhaWxlZCwgJWRcbiIsIGksIHJjKTsKLQkJCWRwdV9lbmNvZGVy X2Rlc3Ryb3koZW5jb2Rlcik7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCWNvbm5lY3RvciA9IGRw dV9jb25uZWN0b3JfaW5pdChkZXYsCi0JCQkJZW5jb2RlciwKLQkJCQkwLAotCQkJCWRpc3BsYXks Ci0JCQkJJndiX29wcywKLQkJCQlEUk1fQ09OTkVDVE9SX1BPTExfSFBELAotCQkJCURSTV9NT0RF X0NPTk5FQ1RPUl9WSVJUVUFMKTsKLQkJaWYgKGNvbm5lY3RvcikgewotCQkJcHJpdi0+ZW5jb2Rl cnNbcHJpdi0+bnVtX2VuY29kZXJzKytdID0gZW5jb2RlcjsKLQkJfSBlbHNlIHsKLQkJCURQVV9F UlJPUigid2IgJWQgY29ubmVjdG9yIGluaXQgZmFpbGVkXG4iLCBpKTsKLQkJCWRwdV93Yl9kcm1f ZGVpbml0KGRpc3BsYXkpOwotCQkJZHB1X2VuY29kZXJfZGVzdHJveShlbmNvZGVyKTsKLQkJfQor CS8qVE9ETzogU3VwcG9ydCB0d28gaW5kZXBlbmRlbnQgRFNJIGNvbm5lY3RvcnMgKi8KKwllbmNv ZGVyID0gZHB1X2VuY29kZXJfaW5pdChkZXYsIERSTV9NT0RFX0NPTk5FQ1RPUl9EU0kpOworCWlm IChJU19FUlJfT1JfTlVMTChlbmNvZGVyKSkgeworCQlEUFVfRVJST1IoImVuY29kZXIgaW5pdCBm YWlsZWQgZm9yIGRzaSBkaXNwbGF5XG4iKTsKKwkJcmV0dXJuOwogCX0KLX0KLSNlbmRpZgotCi0j aWZkZWYgQ09ORklHX0RSTV9NU01fRElTUExBWVBPUlQKLXN0YXRpYyB2b2lkIF9kcHVfa21zX2lu aXRpYWxpemVfZHAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKLQkJCQkgICBzdHJ1Y3QgbXNtX2Ry bV9wcml2YXRlICpwcml2LAotCQkJCSAgIHN0cnVjdCBkcHVfa21zICpkcHVfa21zLAotCQkJCSAg IHVuc2lnbmVkIG1heF9lbmNvZGVycykKLXsKLQlzdGF0aWMgY29uc3Qgc3RydWN0IGRwdV9jb25u ZWN0b3Jfb3BzIGRwX29wcyA9IHsKLQkJLnBvc3RfaW5pdCAgPSBkcF9jb25uZWN0b3JfcG9zdF9p bml0LAotCQkuZGV0ZWN0ICAgICA9IGRwX2Nvbm5lY3Rvcl9kZXRlY3QsCi0JCS5nZXRfbW9kZXMg ID0gZHBfY29ubmVjdG9yX2dldF9tb2RlcywKLQkJLm1vZGVfdmFsaWQgPSBkcF9jb25uZWN0b3Jf bW9kZV92YWxpZCwKLQkJLmdldF9pbmZvICAgPSBkcF9jb25uZWN0b3JfZ2V0X2luZm8sCi0JCS5n ZXRfbW9kZV9pbmZvICA9IGRwX2Nvbm5lY3Rvcl9nZXRfbW9kZV9pbmZvLAotCQkuc2VuZF9ocGRf ZXZlbnQgPSBkcF9jb25uZWN0b3Jfc2VuZF9ocGRfZXZlbnQsCi0JfTsKLQlzdHJ1Y3QgbXNtX2Rp c3BsYXlfaW5mbyBpbmZvOwotCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKLQl2b2lkICpk aXNwbGF5LCAqY29ubmVjdG9yOwotCWludCBpLCByYzsKIAotCS8qIGRwICovCi0JZm9yIChpID0g MDsgaSA8IGRwdV9rbXMtPmRwX2Rpc3BsYXlfY291bnQgJiYKLQkJCXByaXYtPm51bV9lbmNvZGVy cyA8IG1heF9lbmNvZGVyczsgKytpKSB7Ci0JCWRpc3BsYXkgPSBkcHVfa21zLT5kcF9kaXNwbGF5 c1tpXTsKLQkJZW5jb2RlciA9IE5VTEw7CisJcHJpdi0+ZW5jb2RlcnNbcHJpdi0+bnVtX2VuY29k ZXJzKytdID0gZW5jb2RlcjsKIAotCQltZW1zZXQoJmluZm8sIDB4MCwgc2l6ZW9mKGluZm8pKTsK LQkJcmMgPSBkcF9jb25uZWN0b3JfZ2V0X2luZm8oJmluZm8sIGRpc3BsYXkpOwotCQlpZiAocmMp IHsKLQkJCURQVV9FUlJPUigiZHAgZ2V0X2luZm8gJWQgZmFpbGVkXG4iLCBpKTsKLQkJCWNvbnRp bnVlOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHByaXYtPmRzaSk7IGkrKykgeworCQlp ZiAoIXByaXYtPmRzaVtpXSkgeworCQkJRFBVX0RFQlVHKCJpbnZhbGlkIG1zbV9kc2kgZm9yIGN0 cmwgJWRcbiIsIGkpOworCQkJcmV0dXJuOwogCQl9CiAKLQkJZW5jb2RlciA9IGRwdV9lbmNvZGVy X2luaXQoZGV2LCAmaW5mbyk7Ci0JCWlmIChJU19FUlJfT1JfTlVMTChlbmNvZGVyKSkgewotCQkJ RFBVX0VSUk9SKCJkcCBlbmNvZGVyIGluaXQgZmFpbGVkICVkXG4iLCBpKTsKLQkJCWNvbnRpbnVl OwotCQl9Ci0KLQkJcmMgPSBkcF9kcm1fYnJpZGdlX2luaXQoZGlzcGxheSwgZW5jb2Rlcik7CisJ CXJjID0gbXNtX2RzaV9tb2Rlc2V0X2luaXQocHJpdi0+ZHNpW2ldLCBkZXYsIGVuY29kZXIpOwog CQlpZiAocmMpIHsKLQkJCURQVV9FUlJPUigiZHAgYnJpZGdlICVkIGluaXQgZmFpbGVkLCAlZFxu IiwgaSwgcmMpOwotCQkJZHB1X2VuY29kZXJfZGVzdHJveShlbmNvZGVyKTsKKwkJCURQVV9FUlJP UigibW9kZXNldF9pbml0IGZhaWxlZCBmb3IgZHNpWyVkXSwgcmMgPSAlZFxuIiwKKwkJCQlpLCBy Yyk7CiAJCQljb250aW51ZTsKIAkJfQotCi0JCWNvbm5lY3RvciA9IGRwdV9jb25uZWN0b3JfaW5p dChkZXYsCi0JCQkJCWVuY29kZXIsCi0JCQkJCU5VTEwsCi0JCQkJCWRpc3BsYXksCi0JCQkJCSZk cF9vcHMsCi0JCQkJCURSTV9DT05ORUNUT1JfUE9MTF9IUEQsCi0JCQkJCURSTV9NT0RFX0NPTk5F Q1RPUl9EaXNwbGF5UG9ydCk7Ci0JCWlmIChjb25uZWN0b3IpIHsKLQkJCXByaXYtPmVuY29kZXJz W3ByaXYtPm51bV9lbmNvZGVycysrXSA9IGVuY29kZXI7Ci0JCX0gZWxzZSB7Ci0JCQlEUFVfRVJS T1IoImRwICVkIGNvbm5lY3RvciBpbml0IGZhaWxlZFxuIiwgaSk7Ci0JCQlkcF9kcm1fYnJpZGdl X2RlaW5pdChkaXNwbGF5KTsKLQkJCWRwdV9lbmNvZGVyX2Rlc3Ryb3koZW5jb2Rlcik7Ci0JCX0K IAl9CiB9Ci0jZW5kaWYKIAogLyoqCiAgKiBfZHB1X2ttc19zZXR1cF9kaXNwbGF5cyAtIGNyZWF0 ZSBlbmNvZGVycywgYnJpZGdlcyBhbmQgY29ubmVjdG9ycwpAQCAtODcyLDI2ICs1NjQsMTIgQEAg c3RhdGljIHZvaWQgX2RwdV9rbXNfc2V0dXBfZGlzcGxheXMoc3RydWN0IGRybV9kZXZpY2UgKmRl diwKIAkJCQkgICAgc3RydWN0IG1zbV9kcm1fcHJpdmF0ZSAqcHJpdiwKIAkJCQkgICAgc3RydWN0 IGRwdV9rbXMgKmRwdV9rbXMpCiB7Ci0JdW5zaWduZWQgbWF4X2VuY29kZXJzOwotCi0JbWF4X2Vu Y29kZXJzID0gZHB1X2ttcy0+ZHNpX2Rpc3BsYXlfY291bnQgKyBkcHVfa21zLT53Yl9kaXNwbGF5 X2NvdW50ICsKLQkJCQlkcHVfa21zLT5kcF9kaXNwbGF5X2NvdW50OwotCWlmIChtYXhfZW5jb2Rl cnMgPiBBUlJBWV9TSVpFKHByaXYtPmVuY29kZXJzKSkgewotCQltYXhfZW5jb2RlcnMgPSBBUlJB WV9TSVpFKHByaXYtPmVuY29kZXJzKTsKLQkJRFBVX0VSUk9SKCJjYXBwaW5nIG51bWJlciBvZiBk aXNwbGF5cyB0byAlZCIsIG1heF9lbmNvZGVycyk7Ci0JfQotCi0jaWZkZWYgQ09ORklHX0RSTV9N U01fRFNJX1NUQUdJTkcKLQlfZHB1X2ttc19pbml0aWFsaXplX2RzaShkZXYsIHByaXYsIGRwdV9r bXMsIG1heF9lbmNvZGVycyk7Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19EUk1fTVNNX1dSSVRF QkFDSwotCV9kcHVfa21zX2luaXRpYWxpemVfd2IoZGV2LCBwcml2LCBkcHVfa21zLCBtYXhfZW5j b2RlcnMpOwotI2VuZGlmCisJX2RwdV9rbXNfaW5pdGlhbGl6ZV9kc2koZGV2LCBwcml2LCBkcHVf a21zKTsKIAotI2lmZGVmIENPTkZJR19EUk1fTVNNX0RJU1BMQVlQT1JUCi0JX2RwdV9rbXNfaW5p dGlhbGl6ZV9kcChkZXYsIHByaXYsIGRwdV9rbXMsIG1heF9lbmNvZGVycyk7Ci0jZW5kaWYKKwkv KioKKwkgKiBFeHRlbmQgdGhpcyBmdW5jdGlvbiB0byBpbml0aWFsaXplIG90aGVyCisJICogdHlw ZXMgb2YgZGlzcGxheXMKKwkgKi8KIH0KIAogc3RhdGljIHZvaWQgX2RwdV9rbXNfZHJtX29ial9k ZXN0cm95KHN0cnVjdCBkcHVfa21zICpkcHVfa21zKQpAQCAtOTI2LDggKzYwNCw2IEBAIHN0YXRp YyB2b2lkIF9kcHVfa21zX2RybV9vYmpfZGVzdHJveShzdHJ1Y3QgZHB1X2ttcyAqZHB1X2ttcykK IAlmb3IgKGkgPSAwOyBpIDwgcHJpdi0+bnVtX2VuY29kZXJzOyBpKyspCiAJCXByaXYtPmVuY29k ZXJzW2ldLT5mdW5jcy0+ZGVzdHJveShwcml2LT5lbmNvZGVyc1tpXSk7CiAJcHJpdi0+bnVtX2Vu Y29kZXJzID0gMDsKLQotCV9kcHVfa21zX3JlbGVhc2VfZGlzcGxheXMoZHB1X2ttcyk7CiB9CiAK IHN0YXRpYyBpbnQgX2RwdV9rbXNfZHJtX29ial9pbml0KHN0cnVjdCBkcHVfa21zICpkcHVfa21z KQpAQCAtOTU4LDEyICs2MzQsMTIgQEAgc3RhdGljIGludCBfZHB1X2ttc19kcm1fb2JqX2luaXQo c3RydWN0IGRwdV9rbXMgKmRwdV9rbXMpCiAJcmV0ID0gZHB1X2NvcmVfaXJxX2RvbWFpbl9hZGQo ZHB1X2ttcyk7CiAJaWYgKHJldCkKIAkJZ290byBmYWlsX2lycTsKKwogCS8qCi0JICogUXVlcnkg Zm9yIHVuZGVybHlpbmcgZGlzcGxheSBkcml2ZXJzLCBhbmQgY3JlYXRlIGNvbm5lY3RvcnMsCi0J ICogYnJpZGdlcyBhbmQgZW5jb2RlcnMgZm9yIHRoZW0uCisJICogQ3JlYXRlIGVuY29kZXIgYW5k IHF1ZXJ5IGRpc3BsYXkgZHJpdmVycyB0byBjcmVhdGUKKwkgKiBicmlkZ2VzIGFuZCBjb25uZWN0 b3JzCiAJICovCi0JaWYgKCFfZHB1X2ttc19nZXRfZGlzcGxheXMoZHB1X2ttcykpCi0JCSh2b2lk KV9kcHVfa21zX3NldHVwX2Rpc3BsYXlzKGRldiwgcHJpdiwgZHB1X2ttcyk7CisJX2RwdV9rbXNf c2V0dXBfZGlzcGxheXMoZGV2LCBwcml2LCBkcHVfa21zKTsKIAogCW1heF9jcnRjX2NvdW50ID0g bWluKGNhdGFsb2ctPm1peGVyX2NvdW50LCBwcml2LT5udW1fZW5jb2RlcnMpOwogCkBAIC0xMzgx LDggKzEwNTcsNiBAQCBzdGF0aWMgdm9pZCBfZHB1X2ttc19od19kZXN0cm95KHN0cnVjdCBkcHVf a21zICpkcHVfa21zLAogCQlkcHVfcG93ZXJfaGFuZGxlX3VucmVnaXN0ZXJfZXZlbnQoCiAJCQkJ JnByaXYtPnBoYW5kbGUsIGRwdV9rbXMtPnBvd2VyX2V2ZW50KTsKIAotCV9kcHVfa21zX3JlbGVh c2VfZGlzcGxheXMoZHB1X2ttcyk7Ci0KIAkvKiBzYWZlIHRvIGNhbGwgdGhlc2UgbW9yZSB0aGFu IG9uY2UgZHVyaW5nIHNodXRkb3duICovCiAJX2RwdV9kZWJ1Z2ZzX2Rlc3Ryb3koZHB1X2ttcyk7 CiAJX2RwdV9rbXNfbW11X2Rlc3Ryb3koZHB1X2ttcyk7CkBAIC0xNTIxLDUzICsxMTk1LDEwIEBA IHN0YXRpYyBpbnQgZHB1X2ttc19hdG9taWNfY2hlY2soc3RydWN0IG1zbV9rbXMgKmttcywKIAkJ ZHB1X2ttcy0+YXNwYWNlW2RvbWFpbl0gOiBOVUxMOwogfQogCi1zdGF0aWMgdm9pZCBfZHB1X2tt c19wb3N0X29wZW4oc3RydWN0IG1zbV9rbXMgKmttcywgc3RydWN0IGRybV9maWxlICpmaWxlKQot ewotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBOVUxMOwotCXN0cnVjdCBkcHVfa21zICpkcHVf a21zID0gTlVMTDsKLQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yID0gTlVMTDsKLQlz dHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9saXN0X2l0ZXIgY29ubl9pdGVyOwotCXN0cnVjdCBkcHVfY29u bmVjdG9yICpkcHVfY29ubiA9IE5VTEw7Ci0KLQlpZiAoIWttcykgewotCQlEUFVfRVJST1IoImlu dmFsaWQga21zXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCWRwdV9rbXMgPSB0b19kcHVfa21zKGtt cyk7Ci0JZGV2ID0gZHB1X2ttcy0+ZGV2OwotCi0JaWYgKCFkZXYpIHsKLQkJRFBVX0VSUk9SKCJp bnZhbGlkIGRldmljZVxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAoIWRldi0+bW9kZV9jb25m aWcucG9sbF9lbmFibGVkKQotCQlyZXR1cm47Ci0KLQltdXRleF9sb2NrKCZkZXYtPm1vZGVfY29u ZmlnLm11dGV4KTsKLQlkcm1fY29ubmVjdG9yX2xpc3RfaXRlcl9iZWdpbihkZXYsICZjb25uX2l0 ZXIpOwotCWRybV9mb3JfZWFjaF9jb25uZWN0b3JfaXRlcihjb25uZWN0b3IsICZjb25uX2l0ZXIp IHsKLQkJLyogT25seSBoYW5kbGUgSFBEIGNhcGFibGUgY29ubmVjdG9ycy4gKi8KLQkJaWYgKCEo Y29ubmVjdG9yLT5wb2xsZWQgJiBEUk1fQ09OTkVDVE9SX1BPTExfSFBEKSkKLQkJCWNvbnRpbnVl OwotCi0JCWRwdV9jb25uID0gdG9fZHB1X2Nvbm5lY3Rvcihjb25uZWN0b3IpOwotCi0JCWlmIChk cHVfY29ubi0+b3BzLnNlbmRfaHBkX2V2ZW50KQotCQkJZHB1X2Nvbm4tPm9wcy5zZW5kX2hwZF9l dmVudChkcHVfY29ubi0+ZGlzcGxheSk7Ci0JfQotCWRybV9jb25uZWN0b3JfbGlzdF9pdGVyX2Vu ZCgmY29ubl9pdGVyKTsKLQltdXRleF91bmxvY2soJmRldi0+bW9kZV9jb25maWcubXV0ZXgpOwot Ci19Ci0KIHN0YXRpYyBpbnQgZHB1X2ttc19wbV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikK IHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGRldjsKIAlzdHJ1Y3QgZHJtX21vZGVzZXRfYWNxdWly ZV9jdHggY3R4OwotCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uOwotCXN0cnVjdCBkcm1fY29u bmVjdG9yX2xpc3RfaXRlciBjb25uX2l0ZXI7CiAJc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0 YXRlOwogCXN0cnVjdCBkcHVfa21zICpkcHVfa21zOwogCWludCByZXQgPSAwLCBudW1fY3J0Y3Mg PSAwOwpAQCAtMTYxMSw0NSArMTI0Miw2IEBAIHN0YXRpYyBpbnQgZHB1X2ttc19wbV9zdXNwZW5k KHN0cnVjdCBkZXZpY2UgKmRldikKIAl9CiAKIAlzdGF0ZS0+YWNxdWlyZV9jdHggPSAmY3R4Owot CWRybV9jb25uZWN0b3JfbGlzdF9pdGVyX2JlZ2luKGRkZXYsICZjb25uX2l0ZXIpOwotCWRybV9m b3JfZWFjaF9jb25uZWN0b3JfaXRlcihjb25uLCAmY29ubl9pdGVyKSB7Ci0JCXN0cnVjdCBkcm1f Y3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTsKLQkJdWludDY0X3QgbHA7Ci0KLQkJaWYgKCFjb25uLT5z dGF0ZSB8fCAhY29ubi0+c3RhdGUtPmNydGMgfHwKLQkJCQljb25uLT5kcG1zICE9IERSTV9NT0RF X0RQTVNfT04pCi0JCQljb250aW51ZTsKLQotCQlscCA9IGRwdV9jb25uZWN0b3JfZ2V0X2xwKGNv bm4pOwotCQlpZiAobHAgPT0gRFBVX01PREVfRFBNU19MUDEpIHsKLQkJCS8qIHRyYW5zaXRpb24g TFAxLT5MUDIgb24gcG0gc3VzcGVuZCAqLwotCQkJcmV0ID0gZHB1X2Nvbm5lY3Rvcl9zZXRfcHJv cGVydHlfZm9yX2NvbW1pdChjb25uLCBzdGF0ZSwKLQkJCQkJQ09OTkVDVE9SX1BST1BfTFAsIERQ VV9NT0RFX0RQTVNfTFAyKTsKLQkJCWlmIChyZXQpIHsKLQkJCQlEUk1fRVJST1IoImZhaWxlZCB0 byBzZXQgbHAyIGZvciBjb25uICVkXG4iLAotCQkJCQkJY29ubi0+YmFzZS5pZCk7Ci0JCQkJZHJt X2F0b21pY19zdGF0ZV9wdXQoc3RhdGUpOwotCQkJCWdvdG8gdW5sb2NrOwotCQkJfQotCQl9Ci0K LQkJaWYgKGxwICE9IERQVV9NT0RFX0RQTVNfTFAyKSB7Ci0JCQkvKiBmb3JjZSBDUlRDIHRvIGJl IGluYWN0aXZlICovCi0JCQljcnRjX3N0YXRlID0gZHJtX2F0b21pY19nZXRfY3J0Y19zdGF0ZShz dGF0ZSwKLQkJCQkJY29ubi0+c3RhdGUtPmNydGMpOwotCQkJaWYgKElTX0VSUl9PUl9OVUxMKGNy dGNfc3RhdGUpKSB7Ci0JCQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gZ2V0IGNydGMgJWQgc3RhdGVc biIsCi0JCQkJCQljb25uLT5zdGF0ZS0+Y3J0Yy0+YmFzZS5pZCk7Ci0JCQkJZHJtX2F0b21pY19z dGF0ZV9wdXQoc3RhdGUpOwotCQkJCWdvdG8gdW5sb2NrOwotCQkJfQotCi0JCQlpZiAobHAgIT0g RFBVX01PREVfRFBNU19MUDEpCi0JCQkJY3J0Y19zdGF0ZS0+YWN0aXZlID0gZmFsc2U7Ci0JCQkr K251bV9jcnRjczsKLQkJfQotCX0KLQlkcm1fY29ubmVjdG9yX2xpc3RfaXRlcl9lbmQoJmNvbm5f aXRlcik7CiAKIAkvKiBjaGVjayBmb3Igbm90aGluZyB0byBkbyAqLwogCWlmIChudW1fY3J0Y3Mg PT0gMCkgewpAQCAtMTcyMSw2ICsxMzEzLDM0IEBAIHN0YXRpYyBpbnQgZHB1X2ttc19wbV9yZXN1 bWUoc3RydWN0IGRldmljZSAqZGV2KQogCXJldHVybiAwOwogfQogCit2b2lkIF9kcHVfa21zX3Nl dF9lbmNvZGVyX21vZGUoc3RydWN0IG1zbV9rbXMgKmttcywKKwkJCQkgc3RydWN0IGRybV9lbmNv ZGVyICplbmNvZGVyLAorCQkJCSBib29sIGNtZF9tb2RlKQoreworCXN0cnVjdCBtc21fZGlzcGxh eV9pbmZvIGluZm87CisJc3RydWN0IG1zbV9kcm1fcHJpdmF0ZSAqcHJpdiA9IGVuY29kZXItPmRl di0+ZGV2X3ByaXZhdGU7CisJaW50IGksIHJjID0gMDsKKworCW1lbXNldCgmaW5mbywgMCwgc2l6 ZW9mKGluZm8pKTsKKworCWluZm8uaW50Zl90eXBlID0gZW5jb2Rlci0+ZW5jb2Rlcl90eXBlOwor CWluZm8uY2FwYWJpbGl0aWVzID0gY21kX21vZGUgPyBNU01fRElTUExBWV9DQVBfQ01EX01PREUg OgorCQkJTVNNX0RJU1BMQVlfQ0FQX1ZJRF9NT0RFOworCisJLyogVE9ETzogTm8gc3VwcG9ydCBm b3IgRFNJIHN3YXAgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwcml2LT5kc2kpOyBp KyspIHsKKwkJaWYgKHByaXYtPmRzaVtpXSkgeworCQkJaW5mby5oX3RpbGVfaW5zdGFuY2VbaW5m by5udW1fb2ZfaF90aWxlc10gPSBpOworCQkJaW5mby5udW1fb2ZfaF90aWxlcysrOworCQl9CisJ fQorCisJcmMgPSBkcHVfZW5jb2Rlcl9zZXR1cChlbmNvZGVyLT5kZXYsIGVuY29kZXIsICZpbmZv KTsKKwlpZiAocmMpCisJCURQVV9FUlJPUigiZmFpbGVkIHRvIHNldHVwIERQVSBlbmNvZGVyICVk OiByYzolZFxuIiwKKwkJCWVuY29kZXItPmJhc2UuaWQsIHJjKTsKK30KKwogc3RhdGljIGNvbnN0 IHN0cnVjdCBtc21fa21zX2Z1bmNzIGttc19mdW5jcyA9IHsKIAkuaHdfaW5pdCAgICAgICAgID0g ZHB1X2ttc19od19pbml0LAogCS5wb3N0aW5pdCAgICAgICAgPSBkcHVfa21zX3Bvc3Rpbml0LApA QCAtMTc0NCw3ICsxMzY0LDcgQEAgc3RhdGljIGludCBkcHVfa21zX3BtX3Jlc3VtZShzdHJ1Y3Qg ZGV2aWNlICpkZXYpCiAJLnBtX3Jlc3VtZSAgICAgICA9IGRwdV9rbXNfcG1fcmVzdW1lLAogCS5k ZXN0cm95ICAgICAgICAgPSBkcHVfa21zX2Rlc3Ryb3ksCiAJLmdldF9hZGRyZXNzX3NwYWNlID0g X2RwdV9rbXNfZ2V0X2FkZHJlc3Nfc3BhY2UsCi0JLnBvc3RvcGVuID0gX2RwdV9rbXNfcG9zdF9v cGVuLAorCS5zZXRfZW5jb2Rlcl9tb2RlID0gX2RwdV9rbXNfc2V0X2VuY29kZXJfbW9kZSwKIH07 CiAKIC8qIHRoZSBjYWxsZXIgYXBpIG5lZWRzIHRvIHR1cm4gb24gY2xvY2sgYmVmb3JlIGNhbGxp bmcgaXQgKi8KQEAgLTIwMDMsNyArMTYyMyw2IEBAIHN0YXRpYyBpbnQgZHB1X2ttc19od19pbml0 KHN0cnVjdCBtc21fa21zICprbXMpCiAKIAlpZiAoZHB1X2ttcy0+YXNwYWNlWzBdKQogCQlrbXMt PmFzcGFjZSA9IGRwdV9rbXMtPmFzcGFjZVswXTsKLQogI2lmZGVmIENPTkZJR19DSFJPTUVfUkVH RE1BCiAJLyogSW5pdGlhbGl6ZSByZWcgZG1hIGJsb2NrIHdoaWNoIGlzIGEgc2luZ2xldG9uICov CiAJcmMgPSBkcHVfcmVnX2RtYV9pbml0KGRwdV9rbXMtPnJlZ19kbWEsIGRwdV9rbXMtPmNhdGFs b2csCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfa21zLmgg Yi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfa21zLmgKaW5kZXggYTE0YzI2ZC4u ZWIzNTIxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2tt cy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9rbXMuaApAQCAtMjAw LDEyICsyMDAsNiBAQCBzdHJ1Y3QgZHB1X2ttcyB7CiAKIAlzdHJ1Y3QgZHB1X2h3X3ZiaWYgKmh3 X3ZiaWZbVkJJRl9NQVhdOwogCXN0cnVjdCBkcHVfaHdfbWRwICpod19tZHA7Ci0JaW50IGRzaV9k aXNwbGF5X2NvdW50OwotCXZvaWQgKipkc2lfZGlzcGxheXM7Ci0JaW50IHdiX2Rpc3BsYXlfY291 bnQ7Ci0Jdm9pZCAqKndiX2Rpc3BsYXlzOwotCWludCBkcF9kaXNwbGF5X2NvdW50OwotCXZvaWQg KipkcF9kaXNwbGF5czsKIAogCWJvb2wgaGFzX2Rhbmdlcl9jdHJsOwogfTsKZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9ybS5jIGIvZHJpdmVycy9ncHUvZHJt L21zbS9kaXNwL2RwdTEvZHB1X3JtLmMKaW5kZXggYzhjMTJkMy4uYWY4MjA1ZiAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X3JtLmMKKysrIGIvZHJpdmVycy9n cHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X3JtLmMKQEAgLTIzLDcgKzIzLDYgQEAKICNpbmNsdWRl ICJkcHVfaHdfaW50Zi5oIgogI2luY2x1ZGUgImRwdV9od193Yi5oIgogI2luY2x1ZGUgImRwdV9l bmNvZGVyLmgiCi0jaW5jbHVkZSAiZHB1X2Nvbm5lY3Rvci5oIgogCiAjZGVmaW5lIFJFU0VSVkVE X0JZX09USEVSKGgsIHIpIFwKIAkoKGgpLT5yc3ZwICYmICgoaCktPnJzdnAtPmVuY19pZCAhPSAo ciktPmVuY19pZCkpCkBAIC0xNTgsNiArMTU3LDE4IEBAIHN0cnVjdCBkcHVfaHdfbWRwICpkcHVf cm1fZ2V0X21kcChzdHJ1Y3QgZHB1X3JtICpybSkKIAlyZXR1cm4gcm0tPmh3X21kcDsKIH0KIAor ZW51bSBkcHVfcm1fdG9wb2xvZ3lfbmFtZQorZHB1X3JtX2dldF90b3BvbG9neV9uYW1lKHN0cnVj dCBtc21fZGlzcGxheV90b3BvbG9neSB0b3BvbG9neSkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9 IDA7IGkgPCBEUFVfUk1fVE9QT0xPR1lfTUFYOyBpKyspCisJCWlmIChSTV9JU19UT1BPTE9HWV9N QVRDSChnX3RvcF90YWJsZVtpXSwgdG9wb2xvZ3kpKQorCQkJcmV0dXJuIGdfdG9wX3RhYmxlW2ld LnRvcF9uYW1lOworCisJcmV0dXJuIERQVV9STV9UT1BPTE9HWV9OT05FOworfQorCiB2b2lkIGRw dV9ybV9pbml0X2h3X2l0ZXIoCiAJCXN0cnVjdCBkcHVfcm1faHdfaXRlciAqaXRlciwKIAkJdWlu dDMyX3QgZW5jX2lkLApAQCAtOTU0LDIwICs5NjUsMTkgQEAgc3RhdGljIGludCBfZHB1X3JtX3Bv cHVsYXRlX3JlcXVpcmVtZW50cygKIAkJc3RydWN0IGRybV9lbmNvZGVyICplbmMsCiAJCXN0cnVj dCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKIAkJc3RydWN0IGRybV9jb25uZWN0b3Jfc3Rh dGUgKmNvbm5fc3RhdGUsCi0JCXN0cnVjdCBkcHVfcm1fcmVxdWlyZW1lbnRzICpyZXFzKQorCQlz dHJ1Y3QgZHB1X3JtX3JlcXVpcmVtZW50cyAqcmVxcywKKwkJc3RydWN0IG1zbV9kaXNwbGF5X3Rv cG9sb2d5IHJlcV90b3BvbG9neSkKIHsKIAljb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAq bW9kZSA9ICZjcnRjX3N0YXRlLT5tb2RlOwogCWludCBpOwogCiAJbWVtc2V0KHJlcXMsIDAsIHNp emVvZigqcmVxcykpOwogCi0JcmVxcy0+dG9wX2N0cmwgPSBkcHVfY29ubmVjdG9yX2dldF9wcm9w ZXJ0eShjb25uX3N0YXRlLAotCQkJQ09OTkVDVE9SX1BST1BfVE9QT0xPR1lfQ09OVFJPTCk7CiAJ ZHB1X2VuY29kZXJfZ2V0X2h3X3Jlc291cmNlcyhlbmMsICZyZXFzLT5od19yZXMsIGNvbm5fc3Rh dGUpOwogCiAJZm9yIChpID0gMDsgaSA8IERQVV9STV9UT1BPTE9HWV9NQVg7IGkrKykgewogCQlp ZiAoUk1fSVNfVE9QT0xPR1lfTUFUQ0goZ190b3BfdGFibGVbaV0sCi0JCQkJCXJlcXMtPmh3X3Jl cy50b3BvbG9neSkpIHsKKwkJCQkJcmVxX3RvcG9sb2d5KSkgewogCQkJcmVxcy0+dG9wb2xvZ3kg PSAmZ190b3BfdGFibGVbaV07CiAJCQlicmVhazsKIAkJfQpAQCAtOTc4LDEwICs5ODgsNiBAQCBz dGF0aWMgaW50IF9kcHVfcm1fcG9wdWxhdGVfcmVxdWlyZW1lbnRzKAogCQlyZXR1cm4gLUVJTlZB TDsKIAl9CiAKLQkvKiBEU0MgYmxvY2tzIGFyZSBoYXJkd2lyZWQgZm9yIGNvbnRyb2wgcGF0aCAw IGFuZCAxICovCi0JaWYgKHJlcXMtPnRvcG9sb2d5LT5udW1fY29tcF9lbmMpCi0JCXJlcXMtPnRv cF9jdHJsIHw9IEJJVChEUFVfUk1fVE9QQ1RMX0RTUFApOwotCiAJLyoqCiAJICogU2V0IHRoZSBy ZXF1aXJlbWVudCBiYXNlZCBvbiBjYXBzIGlmIG5vdCBzZXQgZnJvbSB1c2VyIHNwYWNlCiAJICog VGhpcyB3aWxsIGVuc3VyZSB0byBzZWxlY3QgTE0gdGllZCB3aXRoIERTIGJsb2NrcwpAQCAtMTEx MCw5ICsxMTE2LDYgQEAgdm9pZCBkcHVfcm1fcmVsZWFzZShzdHJ1Y3QgZHB1X3JtICpybSwgc3Ry dWN0IGRybV9lbmNvZGVyICplbmMpCiAJCWdvdG8gZW5kOwogCX0KIAotCXRvcF9jdHJsID0gZHB1 X2Nvbm5lY3Rvcl9nZXRfcHJvcGVydHkoY29ubi0+c3RhdGUsCi0JCQlDT05ORUNUT1JfUFJPUF9U T1BPTE9HWV9DT05UUk9MKTsKLQogCWlmICh0b3BfY3RybCAmIEJJVChEUFVfUk1fVE9QQ1RMX1JF U0VSVkVfTE9DSykpIHsKIAkJRFBVX0RFQlVHKCJyc3ZwW3MlZGUlZF0gbm90IHJlbGVhc2luZyBs b2NrZWQgcmVzb3VyY2VzXG4iLAogCQkJCXJzdnAtPnNlcSwgcnN2cC0+ZW5jX2lkKTsKQEAgLTEx MjAsMTIgKzExMjMsNiBAQCB2b2lkIGRwdV9ybV9yZWxlYXNlKHN0cnVjdCBkcHVfcm0gKnJtLCBz dHJ1Y3QgZHJtX2VuY29kZXIgKmVuYykKIAkJRFBVX0RFQlVHKCJyZWxlYXNlIHJzdnBbcyVkZSVk XVxuIiwgcnN2cC0+c2VxLAogCQkJCXJzdnAtPmVuY19pZCk7CiAJCV9kcHVfcm1fcmVsZWFzZV9y c3ZwKHJtLCByc3ZwLCBjb25uKTsKLQotCQkodm9pZCkgbXNtX3Byb3BlcnR5X3NldF9wcm9wZXJ0 eSgKLQkJCQlkcHVfY29ubmVjdG9yX2dldF9wcm9waW5mbyhjb25uKSwKLQkJCQlkcHVfY29ubmVj dG9yX2dldF9wcm9wZXJ0eV9zdGF0ZShjb25uLT5zdGF0ZSksCi0JCQkJQ09OTkVDVE9SX1BST1Bf VE9QT0xPR1lfTkFNRSwKLQkJCQlEUFVfUk1fVE9QT0xPR1lfTk9ORSk7CiAJfQogCiBlbmQ6CkBA IC0xMTQxLDE4ICsxMTM4LDYgQEAgc3RhdGljIGludCBfZHB1X3JtX2NvbW1pdF9yc3ZwKAogCWVu dW0gZHB1X2h3X2Jsa190eXBlIHR5cGU7CiAJaW50IHJldCA9IDA7CiAKLQlyZXQgPSBtc21fcHJv cGVydHlfc2V0X3Byb3BlcnR5KAotCQkJZHB1X2Nvbm5lY3Rvcl9nZXRfcHJvcGluZm8oY29ubl9z dGF0ZS0+Y29ubmVjdG9yKSwKLQkJCWRwdV9jb25uZWN0b3JfZ2V0X3Byb3BlcnR5X3N0YXRlKGNv bm5fc3RhdGUpLAotCQkJQ09OTkVDVE9SX1BST1BfVE9QT0xPR1lfTkFNRSwKLQkJCXJzdnAtPnRv cG9sb2d5KTsKLQlpZiAocmV0KSB7Ci0JCURQVV9FUlJPUigiZmFpbGVkIHRvIHNldCB0b3BvbG9n eSBuYW1lIHByb3BlcnR5LCByZXQgJWRcbiIsCi0JCQkJcmV0KTsKLQkJX2RwdV9ybV9yZWxlYXNl X3JzdnAocm0sIHJzdnAsIGNvbm5fc3RhdGUtPmNvbm5lY3Rvcik7Ci0JCXJldHVybiByZXQ7Ci0J fQotCiAJLyogU3dhcCBuZXh0IHJzdnAgdG8gYmUgdGhlIGFjdGl2ZSAqLwogCWZvciAodHlwZSA9 IDA7IHR5cGUgPCBEUFVfSFdfQkxLX01BWDsgdHlwZSsrKSB7CiAJCWxpc3RfZm9yX2VhY2hfZW50 cnkoYmxrLCAmcm0tPmh3X2Jsa3NbdHlwZV0sIGxpc3QpIHsKQEAgLTExNzcsNiArMTE2Miw3IEBA IGludCBkcHVfcm1fcmVzZXJ2ZSgKIAkJc3RydWN0IGRybV9lbmNvZGVyICplbmMsCiAJCXN0cnVj dCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKIAkJc3RydWN0IGRybV9jb25uZWN0b3Jfc3Rh dGUgKmNvbm5fc3RhdGUsCisJCXN0cnVjdCBtc21fZGlzcGxheV90b3BvbG9neSB0b3BvbG9neSwK IAkJYm9vbCB0ZXN0X29ubHkpCiB7CiAJc3RydWN0IGRwdV9ybV9yc3ZwICpyc3ZwX2N1ciwgKnJz dnBfbnh0OwpAQCAtMTIwMiw3ICsxMTg4LDcgQEAgaW50IGRwdV9ybV9yZXNlcnZlKAogCV9kcHVf cm1fcHJpbnRfcnN2cHMocm0sIERQVV9STV9TVEFHRV9CRUdJTik7CiAKIAlyZXQgPSBfZHB1X3Jt X3BvcHVsYXRlX3JlcXVpcmVtZW50cyhybSwgZW5jLCBjcnRjX3N0YXRlLAotCQkJY29ubl9zdGF0 ZSwgJnJlcXMpOworCQkJY29ubl9zdGF0ZSwgJnJlcXMsIHRvcG9sb2d5KTsKIAlpZiAocmV0KSB7 CiAJCURQVV9FUlJPUigiZmFpbGVkIHRvIHBvcHVsYXRlIGh3IHJlcXVpcmVtZW50c1xuIik7CiAJ CWdvdG8gZW5kOwpAQCAtMTIzNywxMiArMTIyMyw2IEBAIGludCBkcHVfcm1fcmVzZXJ2ZSgKIAkJ X2RwdV9ybV9yZWxlYXNlX3JzdnAocm0sIHJzdnBfY3VyLCBjb25uX3N0YXRlLT5jb25uZWN0b3Ip OwogCQlyc3ZwX2N1ciA9IE5VTEw7CiAJCV9kcHVfcm1fcHJpbnRfcnN2cHMocm0sIERQVV9STV9T VEFHRV9BRlRFUl9DTEVBUik7Ci0JCSh2b2lkKSBtc21fcHJvcGVydHlfc2V0X3Byb3BlcnR5KAot CQkJCWRwdV9jb25uZWN0b3JfZ2V0X3Byb3BpbmZvKAotCQkJCQkJY29ubl9zdGF0ZS0+Y29ubmVj dG9yKSwKLQkJCQlkcHVfY29ubmVjdG9yX2dldF9wcm9wZXJ0eV9zdGF0ZShjb25uX3N0YXRlKSwK LQkJCQlDT05ORUNUT1JfUFJPUF9UT1BPTE9HWV9OQU1FLAotCQkJCURQVV9STV9UT1BPTE9HWV9O T05FKTsKIAl9CiAKIAkvKiBDaGVjayB0aGUgcHJvcG9zZWQgcmVzZXJ2YXRpb24sIHN0b3JlIGl0 IGluIGh3J3MgIm5leHQiIGZpZWxkICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNt L2Rpc3AvZHB1MS9kcHVfcm0uaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9y bS5oCmluZGV4IDhhNmNiY2YuLjRjNzc4NzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9t c20vZGlzcC9kcHUxL2RwdV9ybS5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUx L2RwdV9ybS5oCkBAIC0xMjgsNiArMTI4LDcgQEAgaW50IGRwdV9ybV9pbml0KHN0cnVjdCBkcHVf cm0gKnJtLAogICogQGRybV9lbmM6IERSTSBFbmNvZGVyIGhhbmRsZQogICogQGNydGNfc3RhdGU6 IFByb3Bvc2VkIEF0b21pYyBEUk0gQ1JUQyBTdGF0ZSBoYW5kbGUKICAqIEBjb25uX3N0YXRlOiBQ cm9wb3NlZCBBdG9taWMgRFJNIENvbm5lY3RvciBTdGF0ZSBoYW5kbGUKKyAqIEB0b3BvbG9neTog UG9pbnRlciB0byB0b3BvbG9neSBpbmZvIGZvciB0aGUgZGlzcGxheQogICogQHRlc3Rfb25seTog QXRvbWljLVRlc3QgcGhhc2UsIGRpc2NhcmQgcmVzdWx0cyAodW5sZXNzIHByb3BlcnR5IG92ZXJy aWRlcykKICAqIEBSZXR1cm46IDAgb24gU3VjY2VzcyBvdGhlcndpc2UgLUVSUk9SCiAgKi8KQEAg LTEzNSw2ICsxMzYsNyBAQCBpbnQgZHB1X3JtX3Jlc2VydmUoc3RydWN0IGRwdV9ybSAqcm0sCiAJ CXN0cnVjdCBkcm1fZW5jb2RlciAqZHJtX2VuYywKIAkJc3RydWN0IGRybV9jcnRjX3N0YXRlICpj cnRjX3N0YXRlLAogCQlzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubl9zdGF0ZSwKKwkJ c3RydWN0IG1zbV9kaXNwbGF5X3RvcG9sb2d5IHRvcG9sb2d5LAogCQlib29sIHRlc3Rfb25seSk7 CiAKIC8qKgpAQCAtMTg3LDQgKzE4OSwxMyBAQCB2b2lkIGRwdV9ybV9pbml0X2h3X2l0ZXIoCiAg Ki8KIGludCBkcHVfcm1fY2hlY2tfcHJvcGVydHlfdG9wY3RsKHVpbnQ2NF90IHZhbCk7CiAKKy8q KgorICogZHB1X3JtX2dldF90b3BvbG9neV9uYW1lIC0gcmV0dXJucyB0aGUgbmFtZSBvZiB0aGUg dGhlIGdpdmVuIHRvcG9sb2d5CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbml0 aW9uCisgKiBAdG9wb2xvZ3k6IHRvcG9sb2d5IGRlZmluaXRpb24KKyAqIEBSZXR1cm46IG5hbWUg b2YgdGhlIHRvcG9sb2d5CisgKi8KK2VudW0gZHB1X3JtX3RvcG9sb2d5X25hbWUKK2RwdV9ybV9n ZXRfdG9wb2xvZ3lfbmFtZShzdHJ1Y3QgbXNtX2Rpc3BsYXlfdG9wb2xvZ3kgdG9wb2xvZ3kpOwor CiAjZW5kaWYgLyogX19EUFVfUk1fSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v bXNtL2RwdV9kYmcuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHB1X2RiZy5jCmluZGV4IDM0MWI1 OTYuLjVjNjIzMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHB1X2RiZy5jCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHB1X2RiZy5jCkBAIC0yNTQ1LDkgKzI1NDUsNiBAQCBz dGF0aWMgdm9pZCBfZHB1X2R1bXBfYXJyYXkoc3RydWN0IGRwdV9kYmdfcmVnX2Jhc2UgKmJsa19h cnJbXSwKIAlpZiAoZHVtcF9kYmdidXNfdmJpZl9ydCkKIAkJX2RwdV9kYmdfZHVtcF92YmlmX2Ri Z19idXMoJmRwdV9kYmdfYmFzZS5kYmdidXNfdmJpZl9ydCk7CiAKLQlpZiAoZHB1X2RiZ19iYXNl LmRzaV9kYmdfYnVzIHx8IGR1bXBfYWxsKQotCQlkc2lfY3RybF9kZWJ1Z19kdW1wKCk7Ci0KIAlp ZiAoZG9fcGFuaWMgJiYgZHB1X2RiZ19iYXNlLnBhbmljX29uX2VycikKIAkJcGFuaWMobmFtZSk7 CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9kcnYuYyBiL2RyaXZlcnMv Z3B1L2RybS9tc20vbXNtX2Rydi5jCmluZGV4IGE3MTBiNjMuLjMzNmFjYTUgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20v bXNtX2Rydi5jCkBAIC00NywxMiArNDcsNiBAQAogI2luY2x1ZGUgIm1zbV9mZW5jZS5oIgogI2lu Y2x1ZGUgIm1zbV9ncHUuaCIKICNpbmNsdWRlICJtc21fa21zLmgiCi0jaWZkZWYgQ09ORklHX0RS TV9NU01fV1JJVEVCQUNLCi0jaW5jbHVkZSAiZHB1X3diLmgiCi0jZW5kaWYKLSNpZmRlZiBDT05G SUdfRFJNX01TTV9EU0lfU1RBR0lORwotI2luY2x1ZGUgImRzaV9kaXNwbGF5LmgiCi0jZW5kaWYK ICNpZmRlZiBDT05GSUdfRFJNX01TTV9EUFUKICNpbmNsdWRlICJkcHVfZGJnLmgiCiAjZW5kaWYK QEAgLTEzOTUsOSArMTM4OSw2IEBAIGludCBtc21faW9jdGxfcm1mYjIoc3RydWN0IGRybV9kZXZp Y2UgKmRldiwgdm9pZCAqZGF0YSwKIAlEUk1fSU9DVExfREVGX0RSVihNU01fR0VNX01BRFZJU0Us ICBtc21faW9jdGxfZ2VtX21hZHZpc2UsICBEUk1fQVVUSHxEUk1fUkVOREVSX0FMTE9XKSwKIAlE Uk1fSU9DVExfREVGX0RSVihNU01fU1VCTUlUUVVFVUVfTkVXLCAgIG1zbV9pb2N0bF9zdWJtaXRx dWV1ZV9uZXcsICAgRFJNX0FVVEh8RFJNX1JFTkRFUl9BTExPVyksCiAJRFJNX0lPQ1RMX0RFRl9E UlYoTVNNX1NVQk1JVFFVRVVFX0NMT1NFLCBtc21faW9jdGxfc3VibWl0cXVldWVfY2xvc2UsIERS TV9BVVRIfERSTV9SRU5ERVJfQUxMT1cpLAotI2lmZGVmIENPTkZJR19EUk1fTVNNX1dSSVRFQkFD SwotCURSTV9JT0NUTF9ERUZfRFJWKERQVV9XQl9DT05GSUcsIGRwdV93Yl9jb25maWcsIERSTV9V TkxPQ0tFRHxEUk1fQVVUSCksCi0jZW5kaWYKIAlEUk1fSU9DVExfREVGX0RSVihNU01fUk1GQjIs IG1zbV9pb2N0bF9ybWZiMiwKIAkJCSAgRFJNX0NPTlRST0xfQUxMT1d8RFJNX1VOTE9DS0VEKSwK IH07CkBAIC0xNjM5LDQyICsxNjMwLDYgQEAgc3RhdGljIGludCBhZGRfZGlzcGxheV9jb21wb25l bnRzKHN0cnVjdCBkZXZpY2UgKmRldiwKIAlzdHJ1Y3QgZGV2aWNlICptZHBfZGV2ID0gTlVMTDsK IAlpbnQgcmV0OwogCi0jaWZkZWYgQ09ORklHX0RSTV9NU01fRFBVCi0Jc3RydWN0IGRldmljZV9u b2RlICpub2RlOwotCWNvbnN0IGNoYXIgKm5hbWU7Ci0KLQlpZiAob2ZfZGV2aWNlX2lzX2NvbXBh dGlibGUoZGV2LT5vZl9ub2RlLCAicWNvbSxkcHUta21zIikpIHsKLQkJc3RydWN0IGRldmljZV9u b2RlICpucCA9IGRldi0+b2Zfbm9kZTsKLQkJdW5zaWduZWQgaW50IGk7Ci0JCWJvb2wgZm91bmQg PSBmYWxzZTsKLQotI2lmZGVmIENPTkZJR19EUk1fTVNNX0RTSV9TVEFHSU5HCi0JCWZvciAoaSA9 IDA7IGkgPCBNQVhfRFNJX0FDVElWRV9ESVNQTEFZOyBpKyspIHsKLQkJCW5vZGUgPSBkc2lfZGlz cGxheV9nZXRfYm9vdF9kaXNwbGF5KGkpOwotCi0JCQlpZiAobm9kZSAhPSBOVUxMKSB7Ci0JCQkJ bmFtZSA9IG9mX2dldF9wcm9wZXJ0eShub2RlLCAibGFiZWwiLCBOVUxMKTsKLQkJCQljb21wb25l bnRfbWF0Y2hfYWRkKGRldiwgbWF0Y2hwdHIsIGNvbXBhcmVfb2YsCi0JCQkJCQlub2RlKTsKLQkJ CQlwcl9kZWJ1ZygiQWRkZWQgY29tcG9uZW50ID0gJXNcbiIsIG5hbWUpOwotCQkJCWZvdW5kID0g dHJ1ZTsKLQkJCX0KLQkJfQotCQlpZiAoIWZvdW5kKQotCQkJcmV0dXJuIC1FUFJPQkVfREVGRVI7 Ci0jZW5kaWYKLQotCQlmb3IgKGkgPSAwOyA7IGkrKykgewotCQkJbm9kZSA9IG9mX3BhcnNlX3Bo YW5kbGUobnAsICJjb25uZWN0b3JzIiwgaSk7Ci0JCQlpZiAoIW5vZGUpCi0JCQkJYnJlYWs7Ci0K LQkJCWNvbXBvbmVudF9tYXRjaF9hZGQoZGV2LCBtYXRjaHB0ciwgY29tcGFyZV9vZiwgbm9kZSk7 Ci0JCX0KLQkJcmV0dXJuIDA7Ci0JfQotI2VuZGlmCi0KIAkvKgogCSAqIE1EUDUgYmFzZWQgZGV2 aWNlcyBkb24ndCBoYXZlIGEgZmxhdCBoaWVyYXJjaHkuIFRoZXJlIGlzIGEgdG9wIGxldmVsCiAJ ICogcGFyZW50OiBNRFNTLCBhbmQgY2hpbGRyZW46IE1EUDUsIERTSSwgSERNSSwgZURQIGV0Yy4g UG9wdWxhdGUgdGhlCkBAIC0xNjk4LDcgKzE2NTMsNyBAQCBzdGF0aWMgaW50IGFkZF9kaXNwbGF5 X2NvbXBvbmVudHMoc3RydWN0IGRldmljZSAqZGV2LAogCQlwdXRfZGV2aWNlKG1kcF9kZXYpOwog CiAJCS8qIGFkZCB0aGUgTURQIGNvbXBvbmVudCBpdHNlbGYgKi8KLQkJY29tcG9uZW50X21hdGNo X2FkZChkZXYsIG1hdGNocHRyLCBjb21wYXJlX29mLAorCQlkcm1fb2ZfY29tcG9uZW50X21hdGNo X2FkZChkZXYsIG1hdGNocHRyLCBjb21wYXJlX29mLAogCQkJCSAgIG1kcF9kZXYtPm9mX25vZGUp OwogCX0gZWxzZSB7CiAJCS8qIE1EUDQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9t c20vbXNtX2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZHJ2LmgKaW5kZXggZjk4YzRl Zi4uZmRlNjc1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZHJ2LmgKKysr IGIvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZHJ2LmgKQEAgLTE1OSw4ICsxNTksNiBAQCBlbnVt IG1zbV9tZHBfY29ubl9wcm9wZXJ0eSB7CiAJQ09OTkVDVE9SX1BST1BfQURfQkxfU0NBTEUsCiAK IAkvKiBlbnVtL2JpdG1hc2sgcHJvcGVydGllcyAqLwotCUNPTk5FQ1RPUl9QUk9QX1RPUE9MT0dZ X05BTUUsCi0JQ09OTkVDVE9SX1BST1BfVE9QT0xPR1lfQ09OVFJPTCwKIAlDT05ORUNUT1JfUFJP UF9BVVRPUkVGUkVTSCwKIAlDT05ORUNUT1JfUFJPUF9MUCwKIApAQCAtMzMxLDU3ICszMjksMjAg QEAgc3RydWN0IG1zbV9kaXNwbGF5X3RvcG9sb2d5IHsKIH07CiAKIC8qKgotICogc3RydWN0IG1z bV9tb2RlX2luZm8gLSBkZWZpbmVzIGFsbCBtc20gY3VzdG9tIG1vZGUgaW5mbwotICogQGZyYW1l X3JhdGU6ICAgICAgZnJhbWVfcmF0ZSBvZiB0aGUgbW9kZQotICogQHZ0b3RhbDogICAgICAgICAg dnRvdGFsIGNhbGN1bGF0ZWQgZm9yIHRoZSBtb2RlCi0gKiBAcHJlZmlsbF9saW5lczogICBwcmVm aWxsIGxpbmVzIGJhc2VkIG9uIHBvcmNoZXMuCi0gKiBAaml0dGVyX251bWVyOglkaXNwbGF5IHBh bmVsIGppdHRlciBudW1lcmF0b3IgY29uZmlndXJhdGlvbgotICogQGppdHRlcl9kZW5vbToJZGlz cGxheSBwYW5lbCBqaXR0ZXIgZGVub21pbmF0b3IgY29uZmlndXJhdGlvbgotICogQHRvcG9sb2d5 OiAgICAgICAgc3VwcG9ydGVkIHRvcG9sb2d5IGZvciB0aGUgbW9kZQotICovCi1zdHJ1Y3QgbXNt X21vZGVfaW5mbyB7Ci0JdWludDMyX3QgZnJhbWVfcmF0ZTsKLQl1aW50MzJfdCB2dG90YWw7Ci0J dWludDMyX3QgcHJlZmlsbF9saW5lczsKLQl1aW50MzJfdCBqaXR0ZXJfbnVtZXI7Ci0JdWludDMy X3Qgaml0dGVyX2Rlbm9tOwotCXN0cnVjdCBtc21fZGlzcGxheV90b3BvbG9neSB0b3BvbG9neTsK LX07Ci0KLS8qKgogICogc3RydWN0IG1zbV9kaXNwbGF5X2luZm8gLSBkZWZpbmVzIGRpc3BsYXkg cHJvcGVydGllcwogICogQGludGZfdHlwZTogICAgICAgICAgRFJNX01PREVfQ09OTkVDVE9SXyBk aXNwbGF5IHR5cGUKICAqIEBjYXBhYmlsaXRpZXM6ICAgICAgIEJpdG1hc2sgb2YgZGlzcGxheSBm bGFncwogICogQG51bV9vZl9oX3RpbGVzOiAgICAgTnVtYmVyIG9mIGhvcml6b250YWwgdGlsZXMg aW4gY2FzZSBvZiBzcGxpdCBpbnRlcmZhY2UKICAqIEBoX3RpbGVfaW5zdGFuY2U6ICAgIENvbnRy b2xsZXIgaW5zdGFuY2UgdXNlZCBwZXIgdGlsZS4gTnVtYmVyIG9mIGVsZW1lbnRzIGlzCiAgKiAg ICAgICAgICAgICAgICAgICAgICBiYXNlZCBvbiBudW1fb2ZfaF90aWxlcwotICogQGlzX2Nvbm5l Y3RlZDogICAgICAgU2V0IHRvIHRydWUgaWYgZGlzcGxheSBpcyBjb25uZWN0ZWQKLSAqIEB3aWR0 aF9tbTogICAgICAgICAgIFBoeXNpY2FsIHdpZHRoCi0gKiBAaGVpZ2h0X21tOiAgICAgICAgICBQ aHlzaWNhbCBoZWlnaHQKLSAqIEBtYXhfd2lkdGg6ICAgICAgICAgIE1heCB3aWR0aCBvZiBkaXNw bGF5LiBJbiBjYXNlIG9mIGhvdCBwbHVnZ2FibGUgZGlzcGxheQotICogICAgICAgICAgICAgICAg ICAgICAgdGhpcyBpcyBtYXggd2lkdGggc3VwcG9ydGVkIGJ5IGNvbnRyb2xsZXIKLSAqIEBtYXhf aGVpZ2h0OiAgICAgICAgIE1heCBoZWlnaHQgb2YgZGlzcGxheS4gSW4gY2FzZSBvZiBob3QgcGx1 Z2dhYmxlIGRpc3BsYXkKLSAqICAgICAgICAgICAgICAgICAgICAgIHRoaXMgaXMgbWF4IGhlaWdo dCBzdXBwb3J0ZWQgYnkgY29udHJvbGxlcgotICogQGlzX3ByaW1hcnk6ICAgICAgICAgU2V0IHRv IHRydWUgaWYgZGlzcGxheSBpcyBwcmltYXJ5IGRpc3BsYXkKICAqIEBpc190ZV91c2luZ193YXRj aGRvZ190aW1lcjogIEJvb2xlYW4gdG8gaW5kaWNhdGUgd2F0Y2hkb2cgVEUgaXMKICAqCQkJCSB1 c2VkIGluc3RlYWQgb2YgcGFuZWwgVEUgaW4gY21kIG1vZGUgcGFuZWxzCiAgKi8KIHN0cnVjdCBt c21fZGlzcGxheV9pbmZvIHsKIAlpbnQgaW50Zl90eXBlOwogCXVpbnQzMl90IGNhcGFiaWxpdGll czsKLQogCXVpbnQzMl90IG51bV9vZl9oX3RpbGVzOwogCXVpbnQzMl90IGhfdGlsZV9pbnN0YW5j ZVtNQVhfSF9USUxFU19QRVJfRElTUExBWV07Ci0KLQlib29sIGlzX2Nvbm5lY3RlZDsKLQotCXVu c2lnbmVkIGludCB3aWR0aF9tbTsKLQl1bnNpZ25lZCBpbnQgaGVpZ2h0X21tOwotCi0JdWludDMy X3QgbWF4X3dpZHRoOwotCXVpbnQzMl90IG1heF9oZWlnaHQ7Ci0KLQlib29sIGlzX3ByaW1hcnk7 CiAJYm9vbCBpc190ZV91c2luZ193YXRjaGRvZ190aW1lcjsKIH07CiAKLS0gClRoZSBRdWFsY29t bSBJbm5vdmF0aW9uIENlbnRlciwgSW5jLiBpcyBhIG1lbWJlciBvZiB0aGUgQ29kZSBBdXJvcmEg Rm9ydW0sCmEgTGludXggRm91bmRhdGlvbiBDb2xsYWJvcmF0aXZlIFByb2plY3QKCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkZyZWVkcmVubyBtYWlsaW5n IGxpc3QKRnJlZWRyZW5vQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVk ZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ZyZWVkcmVubwo=