From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jeykumar Sankaran Subject: [DPU PATCH v3 5/6] drm/msm: hook up DPU with upstream DSI Date: Fri, 25 May 2018 14:26:06 -0700 Message-ID: <1527283567-6546-6-git-send-email-jsanka@codeaurora.org> References: <1527283567-6546-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: <1527283567-6546-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, Rajesh Yadav List-Id: linux-arm-msm@vger.kernel.org U3dpdGNoIERQVSBmcm9tIGRzaS1zdGFnaW5nIHRvIHVwc3RyZWFtIGRzaSBkcml2ZXIuIFRvIG1h a2UKdGhlIHN3aXRjaCBhdG9taWMsIHRoaXMgY2hhbmdlIGluY2x1ZGVzOgotIHJlbW92ZSBkcHUg Y29ubmVjdG9yIGxheWVycwotIGNsZWFuIHVwIGRwdSBjb25uZWN0b3IgZGVwZW5kZW5jaWVzIGlu IGVuY29kZXIvY3J0YwotIGNvbXBpbGUgb3V0IHdyaXRlYmFjayBhbmQgZGlzcGxheSBwb3J0IGRy aXZlcnMKLSBjb21waWxlIG91dCBkc2ktc3RhZ2luZyBkcml2ZXIgKHNlcGFyYXRlIHBhdGNoIHN1 Ym1pdHRlZCB0bwogIHJlbW92ZSB0aGUgZHJpdmVyKQotIGFkYXB0IHVwc3RyZWFtIGRldmljZSBo aWVyYXJjaHkKCmNoYW5nZXMgaW4gdjI6CgktIHJlbW92ZSBmaWxlcyBub3QgYXBwbGljYWJsZSB1 cHN0cmVhbSAoU2VhbiBQYXVsKQoJLSByZW1vdmUgY29tcGlsZWQgb3V0IG5vbi1kc2kgZGlzcGxh eSBpbml0IChTZWFuIFBhdWwpCgktIHNwbGl0IHVucmVsYXRlZCBjaGFuZ2VzIGludG8gc2VwYXJh dGUgcGF0Y2ggc2V0IChTZWFuIFBhdWwpCmNoYW5nZXMgaW4gdjM6CgktIGZpeCBjb21waWxhdGlv biB3YXJuaW5nCgktIGNvbXBpbGUgb3V0IGRzaSBzdGFnaW5nCgpTaWduZWQtb2ZmLWJ5OiBKZXlr dW1hciBTYW5rYXJhbiA8anNhbmthQGNvZGVhdXJvcmEub3JnPgpTaWduZWQtb2ZmLWJ5OiBTZWFu IFBhdWwgPHNlYW5wYXVsQGNocm9taXVtLm9yZz4KU2lnbmVkLW9mZi1ieTogUmFqZXNoIFlhZGF2 IDxyeWFkYXZAY29kZWF1cm9yYS5vcmc+Ci0tLQogZHJpdmVycy9ncHUvZHJtL21zbS9NYWtlZmls ZSAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIyIC0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlz cC9kcHUxL2RwdV9jb25uZWN0b3IuYyAgICAgIHwgMTE4NSAtLS0tLS0tLS0tLS0tLS0tLS0tLQog ZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2Nvbm5lY3Rvci5oICAgICAgfCAgNTU1 IC0tLS0tLS0tLQogZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NydGMuYyAgICAg ICAgICAgfCAgICA5IC0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVy LmMgICAgICAgIHwgIDE3OSArLS0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9l bmNvZGVyLmggICAgICAgIHwgICAxMCArLQogZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEv ZHB1X2VuY29kZXJfcGh5cy5oICAgfCAgICA4ICstCiAuLi4vZ3B1L2RybS9tc20vZGlzcC9kcHUx L2RwdV9lbmNvZGVyX3BoeXNfdmlkLmMgICB8ICAgIDYgKy0KIGRyaXZlcnMvZ3B1L2RybS9tc20v ZGlzcC9kcHUxL2RwdV9rbXMuYyAgICAgICAgICAgIHwgIDQ4OCArLS0tLS0tLQogZHJpdmVycy9n cHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2ttcy5oICAgICAgICAgICAgfCAgICA2IC0KIGRyaXZl cnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9ybS5jICAgICAgICAgICAgIHwgICA1NiArLQog ZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X3JtLmggICAgICAgICAgICAgfCAgIDEx ICsKIGRyaXZlcnMvZ3B1L2RybS9tc20vZHB1X2RiZy5jICAgICAgICAgICAgICAgICAgICAgIHwg ICAgMyAtCiBkcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9kcnYuYyAgICAgICAgICAgICAgICAgICAg ICB8ICAgNDcgKy0KIGRyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2Rydi5oICAgICAgICAgICAgICAg ICAgICAgIHwgICAzOSAtCiAxNSBmaWxlcyBjaGFuZ2VkLCAxNTkgaW5zZXJ0aW9ucygrKSwgMjQ2 NSBkZWxldGlvbnMoLSkKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rp c3AvZHB1MS9kcHVfY29ubmVjdG9yLmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9k cm0vbXNtL2Rpc3AvZHB1MS9kcHVfY29ubmVjdG9yLmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vbXNtL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL21zbS9NYWtlZmlsZQppbmRleCBk OTQ3ZjJhLi5kNzU1OGVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL01ha2VmaWxl CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vTWFrZWZpbGUKQEAgLTEsNyArMSw2IEBACiAjIFNQ RFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiBjY2ZsYWdzLXkgOj0gLUlkcml2ZXJzL2dw dS9kcm0vbXNtCiBjY2ZsYWdzLXkgKz0gLUlkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MQot Y2NmbGFncy15ICs9IC1JZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZwogY2NmbGFncy0k KENPTkZJR19EUk1fTVNNX0RTSSkgKz0gLUlkcml2ZXJzL2dwdS9kcm0vbXNtL2RzaQogCiBtc20t eSA6PSBcCkBAIC00OCw3ICs0Nyw2IEBAIG1zbS15IDo9IFwKIAlkaXNwL21kcDUvbWRwNV9wbGFu ZS5vIFwKIAlkaXNwL21kcDUvbWRwNV9zbXAubyBcCiAJZGlzcC9kcHUxL2RwdV9jb2xvcl9wcm9j ZXNzaW5nLm8gXAotCWRpc3AvZHB1MS9kcHVfY29ubmVjdG9yLm8gXAogCWRpc3AvZHB1MS9kcHVf Y29yZV9pcnEubyBcCiAJZGlzcC9kcHUxL2RwdV9jb3JlX3BlcmYubyBcCiAJZGlzcC9kcHUxL2Rw dV9jcnRjLm8gXApAQCAtMTQxLDI2ICsxMzksNiBAQCBtc20tJChDT05GSUdfRFJNX01TTV9EU0kp ICs9IGRzaS9kc2kubyBcCiAJCQlkc2kvcGh5L2RzaV9waHkubyBcCiAJCQlkaXNwL21kcDUvbWRw NV9jbWRfZW5jb2Rlci5vCiAKLW1zbS0kKENPTkZJR19EUk1fTVNNX0RTSV9TVEFHSU5HKSArPSBk c2ktc3RhZ2luZy9kc2lfcGh5Lm8gXAotCQkJCWRzaS1zdGFnaW5nL2RzaV9wd3IubyBcCi0JCQkJ ZHNpLXN0YWdpbmcvZHNpX3BoeS5vIFwKLQkJCQlkc2ktc3RhZ2luZy9kc2lfcGh5X2h3X3YyXzAu byBcCi0JCQkJZHNpLXN0YWdpbmcvZHNpX3BoeV9od192M18wLm8gXAotCQkJCWRzaS1zdGFnaW5n L2RzaV9waHlfdGltaW5nX2NhbGMubyBcCi0JCQkJZHNpLXN0YWdpbmcvZHNpX3BoeV90aW1pbmdf djJfMC5vIFwKLQkJCQlkc2ktc3RhZ2luZy9kc2lfcGh5X3RpbWluZ192M18wLm8gXAotCQkJCWRz aS1zdGFnaW5nL2RzaV9jdHJsX2h3X2Ntbi5vIFwKLQkJCQlkc2ktc3RhZ2luZy9kc2lfY3RybF9o d18xXzQubyBcCi0JCQkJZHNpLXN0YWdpbmcvZHNpX2N0cmxfaHdfMl8wLm8gXAotCQkJCWRzaS1z dGFnaW5nL2RzaV9jdHJsX2h3XzJfMi5vIFwKLQkJCQlkc2ktc3RhZ2luZy9kc2lfY3RybC5vIFwK LQkJCQlkc2ktc3RhZ2luZy9kc2lfY2F0YWxvZy5vIFwKLQkJCQlkc2ktc3RhZ2luZy9kc2lfZHJt Lm8gXAotCQkJCWRzaS1zdGFnaW5nL2RzaV9kaXNwbGF5Lm8gXAotCQkJCWRzaS1zdGFnaW5nL2Rz aV9wYW5lbC5vIFwKLQkJCQlkc2ktc3RhZ2luZy9kc2lfY2xrX21hbmFnZXIubyBcCi0JCQkJZHNp LXN0YWdpbmcvZHNpX2Rpc3BsYXlfdGVzdC5vCi0KIG1zbS0kKENPTkZJR19EUk1fTVNNX0RTSV8y OE5NX1BIWSkgKz0gZHNpL3BoeS9kc2lfcGh5XzI4bm0ubwogbXNtLSQoQ09ORklHX0RSTV9NU01f RFNJXzIwTk1fUEhZKSArPSBkc2kvcGh5L2RzaV9waHlfMjBubS5vCiBtc20tJChDT05GSUdfRFJN X01TTV9EU0lfMjhOTV84OTYwX1BIWSkgKz0gZHNpL3BoeS9kc2lfcGh5XzI4bm1fODk2MC5vCmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY29ubmVjdG9yLmMg Yi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY29ubmVjdG9yLmMKZGVsZXRlZCBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2OTkxOWYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL21zbS9kaXNwL2RwdTEvZHB1X2Nvbm5lY3Rvci5jCisrKyAvZGV2L251bGwKQEAgLTEsMTE4 NSArMCwwIEBACi0vKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRp b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29m dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFu ZAotICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqLwotCi0jZGVmaW5lIHByX2Zt dChmbXQpCSJbZHJtOiVzOiVkXSAiIGZtdCwgX19mdW5jX18sIF9fTElORV9fCi0jaW5jbHVkZSAi bXNtX2Rydi5oIgotI2luY2x1ZGUgImRwdV9kYmcuaCIKLQotI2luY2x1ZGUgImRwdV9rbXMuaCIK LSNpbmNsdWRlICJkcHVfY29ubmVjdG9yLmgiCi0jaWZkZWYgQ09ORklHX0RSTV9NU01fRFNJX1NU QUdJTkcKLSNpbmNsdWRlIDxsaW51eC9iYWNrbGlnaHQuaD4KLSNpbmNsdWRlICJkc2lfZHJtLmgi Ci0jaW5jbHVkZSAiZHNpX2Rpc3BsYXkuaCIKLSNlbmRpZgotCi0jZGVmaW5lIEJMX05PREVfTkFN RV9TSVpFIDMyCi0KLSNkZWZpbmUgRFBVX0RFQlVHX0NPTk4oYywgZm10LCAuLi4pIERQVV9ERUJV RygiY29ubiVkICIgZm10LFwKLQkJKGMpID8gKGMpLT5iYXNlLmJhc2UuaWQgOiAtMSwgIyNfX1ZB X0FSR1NfXykKLQotI2RlZmluZSBEUFVfRVJST1JfQ09OTihjLCBmbXQsIC4uLikgRFBVX0VSUk9S KCJjb25uJWQgIiBmbXQsXAotCQkoYykgPyAoYyktPmJhc2UuYmFzZS5pZCA6IC0xLCAjI19fVkFf QVJHU19fKQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGRybV9wcm9wX2VudW1fbGlzdCBlX3RvcG9s b2d5X25hbWVbXSA9IHsKLQl7RFBVX1JNX1RPUE9MT0dZX05PTkUsCSJkcHVfbm9uZSJ9LAotCXtE UFVfUk1fVE9QT0xPR1lfU0lOR0xFUElQRSwJImRwdV9zaW5nbGVwaXBlIn0sCi0Je0RQVV9STV9U T1BPTE9HWV9EVUFMUElQRSwJImRwdV9kdWFscGlwZSJ9LAotCXtEUFVfUk1fVE9QT0xPR1lfRFVB TFBJUEVfM0RNRVJHRSwJImRwdV9kdWFscGlwZW1lcmdlIn0sCi19OwotCi1zdGF0aWMgY29uc3Qg c3RydWN0IGRybV9wcm9wX2VudW1fbGlzdCBlX3RvcG9sb2d5X2NvbnRyb2xbXSA9IHsKLQl7RFBV X1JNX1RPUENUTF9SRVNFUlZFX0xPQ0ssCSJyZXNlcnZlX2xvY2sifSwKLQl7RFBVX1JNX1RPUENU TF9SRVNFUlZFX0NMRUFSLAkicmVzZXJ2ZV9jbGVhciJ9LAotCXtEUFVfUk1fVE9QQ1RMX0RTUFAs CQkiZHNwcCJ9LAotfTsKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3Byb3BfZW51bV9saXN0IGVf cG93ZXJfbW9kZVtdID0gewotCXtEUFVfTU9ERV9EUE1TX09OLAkiT04ifSwKLQl7RFBVX01PREVf RFBNU19MUDEsCSJMUDEifSwKLQl7RFBVX01PREVfRFBNU19MUDIsCSJMUDIifSwKLQl7RFBVX01P REVfRFBNU19PRkYsCSJPRkYifSwKLX07Ci0KLSNpZmRlZiBDT05GSUdfRFJNX01TTV9EU0lfU1RB R0lORwotc3RhdGljIGludCBkcHVfYmFja2xpZ2h0X2RldmljZV91cGRhdGVfc3RhdHVzKHN0cnVj dCBiYWNrbGlnaHRfZGV2aWNlICpiZCkKLXsKLQlpbnQgYnJpZ2h0bmVzczsKLQlzdHJ1Y3QgZHNp X2Rpc3BsYXkgKmRpc3BsYXk7Ci0Jc3RydWN0IGRwdV9jb25uZWN0b3IgKmNfY29ubjsKLQlpbnQg YmxfbHZsOwotCXN0cnVjdCBkcm1fZXZlbnQgZXZlbnQ7Ci0KLQlicmlnaHRuZXNzID0gYmQtPnBy b3BzLmJyaWdodG5lc3M7Ci0KLQlpZiAoKGJkLT5wcm9wcy5wb3dlciAhPSBGQl9CTEFOS19VTkJM QU5LKSB8fAotCQkJKGJkLT5wcm9wcy5zdGF0ZSAmIEJMX0NPUkVfRkJCTEFOSykgfHwKLQkJCShi ZC0+cHJvcHMuc3RhdGUgJiBCTF9DT1JFX1NVU1BFTkRFRCkpCi0JCWJyaWdodG5lc3MgPSAwOwot Ci0JY19jb25uID0gYmxfZ2V0X2RhdGEoYmQpOwotCWRpc3BsYXkgPSAoc3RydWN0IGRzaV9kaXNw bGF5ICopIGNfY29ubi0+ZGlzcGxheTsKLQlpZiAoYnJpZ2h0bmVzcyA+IGRpc3BsYXktPnBhbmVs LT5ibF9jb25maWcuYmxfbWF4X2xldmVsKQotCQlicmlnaHRuZXNzID0gZGlzcGxheS0+cGFuZWwt PmJsX2NvbmZpZy5ibF9tYXhfbGV2ZWw7Ci0KLQkvKiBtYXAgVUkgYnJpZ2h0bmVzcyBpbnRvIGRy aXZlciBiYWNrbGlnaHQgbGV2ZWwgd2l0aCByb3VuZGluZyAqLwotCWJsX2x2bCA9IG11bHRfZnJh YyhicmlnaHRuZXNzLCBkaXNwbGF5LT5wYW5lbC0+YmxfY29uZmlnLmJsX21heF9sZXZlbCwKLQkJ CWRpc3BsYXktPnBhbmVsLT5ibF9jb25maWcuYnJpZ2h0bmVzc19tYXhfbGV2ZWwpOwotCi0JaWYg KCFibF9sdmwgJiYgYnJpZ2h0bmVzcykKLQkJYmxfbHZsID0gMTsKLQotCWlmIChjX2Nvbm4tPm9w cy5zZXRfYmFja2xpZ2h0KSB7Ci0JCWV2ZW50LnR5cGUgPSBEUk1fRVZFTlRfU1lTX0JBQ0tMSUdI VDsKLQkJZXZlbnQubGVuZ3RoID0gc2l6ZW9mKHUzMik7Ci0JCW1zbV9tb2RlX29iamVjdF9ldmVu dF9ub3RpZnkoJmNfY29ubi0+YmFzZS5iYXNlLAotCQkJCWNfY29ubi0+YmFzZS5kZXYsICZldmVu dCwgKHU4ICopJmJyaWdodG5lc3MpOwotCQljX2Nvbm4tPm9wcy5zZXRfYmFja2xpZ2h0KGNfY29u bi0+ZGlzcGxheSwgYmxfbHZsKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBk cHVfYmFja2xpZ2h0X2RldmljZV9nZXRfYnJpZ2h0bmVzcyhzdHJ1Y3QgYmFja2xpZ2h0X2Rldmlj ZSAqYmQpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYmFja2xpZ2h0 X29wcyBkcHVfYmFja2xpZ2h0X2RldmljZV9vcHMgPSB7Ci0JLnVwZGF0ZV9zdGF0dXMgPSBkcHVf YmFja2xpZ2h0X2RldmljZV91cGRhdGVfc3RhdHVzLAotCS5nZXRfYnJpZ2h0bmVzcyA9IGRwdV9i YWNrbGlnaHRfZGV2aWNlX2dldF9icmlnaHRuZXNzLAotfTsKLQotc3RhdGljIGludCBkcHVfYmFj a2xpZ2h0X3NldHVwKHN0cnVjdCBkcHVfY29ubmVjdG9yICpjX2Nvbm4sCi0JCQkJCXN0cnVjdCBk cm1fZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGJhY2tsaWdodF9wcm9wZXJ0aWVzIHByb3BzOwot CXN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheTsKLQlzdHJ1Y3QgZHNpX2JhY2tsaWdodF9jb25m aWcgKmJsX2NvbmZpZzsKLQlzdGF0aWMgaW50IGRpc3BsYXlfY291bnQ7Ci0JY2hhciBibF9ub2Rl X25hbWVbQkxfTk9ERV9OQU1FX1NJWkVdOwotCi0JaWYgKCFjX2Nvbm4gfHwgIWRldiB8fCAhZGV2 LT5kZXYpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIHBhcmFtXG4iKTsKLQkJcmV0dXJuIC1FSU5W QUw7Ci0JfSBlbHNlIGlmIChjX2Nvbm4tPmNvbm5lY3Rvcl90eXBlICE9IERSTV9NT0RFX0NPTk5F Q1RPUl9EU0kpIHsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JbWVtc2V0KCZwcm9wcywgMCwgc2l6ZW9m KHByb3BzKSk7Ci0JcHJvcHMudHlwZSA9IEJBQ0tMSUdIVF9SQVc7Ci0JcHJvcHMucG93ZXIgPSBG Ql9CTEFOS19VTkJMQU5LOwotCi0JZGlzcGxheSA9IChzdHJ1Y3QgZHNpX2Rpc3BsYXkgKikgY19j b25uLT5kaXNwbGF5OwotCWJsX2NvbmZpZyA9ICZkaXNwbGF5LT5wYW5lbC0+YmxfY29uZmlnOwot CXByb3BzLm1heF9icmlnaHRuZXNzID0gYmxfY29uZmlnLT5icmlnaHRuZXNzX21heF9sZXZlbDsK LQlwcm9wcy5icmlnaHRuZXNzID0gYmxfY29uZmlnLT5icmlnaHRuZXNzX21heF9sZXZlbDsKLQlz bnByaW50ZihibF9ub2RlX25hbWUsIEJMX05PREVfTkFNRV9TSVpFLCAicGFuZWwldS1iYWNrbGln aHQiLAotCQkJCQkJCWRpc3BsYXlfY291bnQpOwotCWNfY29ubi0+YmxfZGV2aWNlID0gYmFja2xp Z2h0X2RldmljZV9yZWdpc3RlcihibF9ub2RlX25hbWUsIGRldi0+ZGV2LAotCQkJY19jb25uLCAm ZHB1X2JhY2tsaWdodF9kZXZpY2Vfb3BzLCAmcHJvcHMpOwotCWlmIChJU19FUlJfT1JfTlVMTChj X2Nvbm4tPmJsX2RldmljZSkpIHsKLQkJRFBVX0VSUk9SKCJGYWlsZWQgdG8gcmVnaXN0ZXIgYmFj a2xpZ2h0OiAlbGRcbiIsCi0JCQkJICAgIFBUUl9FUlIoY19jb25uLT5ibF9kZXZpY2UpKTsKLQkJ Y19jb25uLT5ibF9kZXZpY2UgPSBOVUxMOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0JZGlzcGxh eV9jb3VudCsrOwotCi0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYKLQotaW50IGRwdV9jb25uZWN0b3Jf dHJpZ2dlcl9ldmVudCh2b2lkICpkcm1fY29ubmVjdG9yLAotCQl1aW50MzJfdCBldmVudF9pZHgs IHVpbnQzMl90IGluc3RhbmNlX2lkeCwKLQkJdWludDMyX3QgZGF0YTAsIHVpbnQzMl90IGRhdGEx LAotCQl1aW50MzJfdCBkYXRhMiwgdWludDMyX3QgZGF0YTMpCi17Ci0Jc3RydWN0IGRwdV9jb25u ZWN0b3IgKmNfY29ubjsKLQl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKLQl2b2lkICgqY2JfZnVu YykodWludDMyX3QgZXZlbnRfaWR4LAotCQkJdWludDMyX3QgaW5zdGFuY2VfaWR4LCB2b2lkICp1 c3IsCi0JCQl1aW50MzJfdCBkYXRhMCwgdWludDMyX3QgZGF0YTEsCi0JCQl1aW50MzJfdCBkYXRh MiwgdWludDMyX3QgZGF0YTMpOwotCXZvaWQgKnVzcjsKLQlpbnQgcmMgPSAwOwotCi0JLyoKLQkg KiBUaGlzIGZ1bmN0aW9uIG1heSBwb3RlbnRpYWxseSBiZSBjYWxsZWQgZnJvbSBhbiBJU1IgY29u dGV4dCwgc28KLQkgKiBhdm9pZCBleGNlc3NpdmUgbG9nZ2luZy9ldGMuCi0JICovCi0JaWYgKCFk cm1fY29ubmVjdG9yKQotCQlyZXR1cm4gLUVJTlZBTDsKLQllbHNlIGlmIChldmVudF9pZHggPj0g RFBVX0NPTk5fRVZFTlRfQ09VTlQpCi0JCXJldHVybiAtRUlOVkFMOwotCWNfY29ubiA9IHRvX2Rw dV9jb25uZWN0b3IoZHJtX2Nvbm5lY3Rvcik7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmY19jb25u LT5ldmVudF9sb2NrLCBpcnFfZmxhZ3MpOwotCWNiX2Z1bmMgPSBjX2Nvbm4tPmV2ZW50X3RhYmxl W2V2ZW50X2lkeF0uY2JfZnVuYzsKLQl1c3IgPSBjX2Nvbm4tPmV2ZW50X3RhYmxlW2V2ZW50X2lk eF0udXNyOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNfY29ubi0+ZXZlbnRfbG9jaywgaXJx X2ZsYWdzKTsKLQotCWlmIChjYl9mdW5jKQotCQljYl9mdW5jKGV2ZW50X2lkeCwgaW5zdGFuY2Vf aWR4LCB1c3IsCi0JCQlkYXRhMCwgZGF0YTEsIGRhdGEyLCBkYXRhMyk7Ci0JZWxzZQotCQlyYyA9 IC1FQUdBSU47Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLWludCBkcHVfY29ubmVjdG9yX3JlZ2lzdGVy X2V2ZW50KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCi0JCXVpbnQzMl90IGV2ZW50 X2lkeCwKLQkJdm9pZCAoKmNiX2Z1bmMpKHVpbnQzMl90IGV2ZW50X2lkeCwKLQkJCXVpbnQzMl90 IGluc3RhbmNlX2lkeCwgdm9pZCAqdXNyLAotCQkJdWludDMyX3QgZGF0YTAsIHVpbnQzMl90IGRh dGExLAotCQkJdWludDMyX3QgZGF0YTIsIHVpbnQzMl90IGRhdGEzKSwKLQkJdm9pZCAqdXNyKQot ewotCXN0cnVjdCBkcHVfY29ubmVjdG9yICpjX2Nvbm47Ci0JdW5zaWduZWQgbG9uZyBpcnFfZmxh Z3M7Ci0KLQlpZiAoIWNvbm5lY3RvcikgewotCQlEUFVfRVJST1IoImludmFsaWQgY29ubmVjdG9y XG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfSBlbHNlIGlmIChldmVudF9pZHggPj0gRFBVX0NP Tk5fRVZFTlRfQ09VTlQpIHsKLQkJRFBVX0VSUk9SKCJjb25uJWQsIGludmFsaWQgZXZlbnQgJWRc biIsCi0JCQkJY29ubmVjdG9yLT5iYXNlLmlkLCBldmVudF9pZHgpOwotCQlyZXR1cm4gLUVJTlZB TDsKLQl9Ci0JY19jb25uID0gdG9fZHB1X2Nvbm5lY3Rvcihjb25uZWN0b3IpOwotCi0Jc3Bpbl9s b2NrX2lycXNhdmUoJmNfY29ubi0+ZXZlbnRfbG9jaywgaXJxX2ZsYWdzKTsKLQljX2Nvbm4tPmV2 ZW50X3RhYmxlW2V2ZW50X2lkeF0uY2JfZnVuYyA9IGNiX2Z1bmM7Ci0JY19jb25uLT5ldmVudF90 YWJsZVtldmVudF9pZHhdLnVzciA9IHVzcjsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjX2Nv bm4tPmV2ZW50X2xvY2ssIGlycV9mbGFncyk7Ci0KLQkvKiBvcHRpb25hbGx5IG5vdGlmeSBkaXNw bGF5IG9mIGV2ZW50IHJlZ2lzdHJhdGlvbiAqLwotCWlmIChjX2Nvbm4tPm9wcy5lbmFibGVfZXZl bnQgJiYgY19jb25uLT5kaXNwbGF5KQotCQljX2Nvbm4tPm9wcy5lbmFibGVfZXZlbnQoY29ubmVj dG9yLCBldmVudF9pZHgsCi0JCQkJY2JfZnVuYyAhPSBOVUxMLCBjX2Nvbm4tPmRpc3BsYXkpOwot CXJldHVybiAwOwotfQotCi12b2lkIGRwdV9jb25uZWN0b3JfdW5yZWdpc3Rlcl9ldmVudChzdHJ1 Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAotCQl1aW50MzJfdCBldmVudF9pZHgpCi17Ci0J KHZvaWQpZHB1X2Nvbm5lY3Rvcl9yZWdpc3Rlcl9ldmVudChjb25uZWN0b3IsIGV2ZW50X2lkeCwg MCwgMCk7Ci19Ci0KLSNpZmRlZiBDT05GSUdfRFJNX01TTV9EU0lfU1RBR0lORwotc3RhdGljIHUz MiBkaXRoZXJfbWF0cml4W0RJVEhFUl9NQVRSSVhfU1pdID0gewotCTE1LCA3LCAxMywgNSwgMywg MTEsIDEsIDksIDEyLCA0LCAxNCwgNiwgMCwgOCwgMiwgMTAKLX07Ci0KLXN0YXRpYyBpbnQgX2Rw dV9jb25uZWN0b3JfZ2V0X2RlZmF1bHRfZGl0aGVyX2NmZ192MSgKLQkJc3RydWN0IGRwdV9jb25u ZWN0b3IgKmNfY29ubiwgdm9pZCAqY2ZnKQotewotCXN0cnVjdCBkcm1fbXNtX2RpdGhlciAqZGl0 aGVyX2NmZyA9IChzdHJ1Y3QgZHJtX21zbV9kaXRoZXIgKiljZmc7Ci0JZW51bSBkc2lfcGl4ZWxf Zm9ybWF0IGRzdF9mb3JtYXQgPSBEU0lfUElYRUxfRk9STUFUX01BWDsKLQotCWlmICghY19jb25u IHx8ICFjZmcpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGFyZ3VtZW50KHMpLCBjX2Nvbm4gJXBL LCBjZmcgJXBLXG4iLAotCQkJCWNfY29ubiwgY2ZnKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQot Ci0JaWYgKCFjX2Nvbm4tPm9wcy5nZXRfZHN0X2Zvcm1hdCkgewotCQlEUFVfREVCVUcoImdldF9k c3RfZm9ybWF0IGlzIHVuYXZhaWxhYmxlXG4iKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JZHN0X2Zv cm1hdCA9IGNfY29ubi0+b3BzLmdldF9kc3RfZm9ybWF0KGNfY29ubi0+ZGlzcGxheSk7Ci0Jc3dp dGNoIChkc3RfZm9ybWF0KSB7Ci0JY2FzZSBEU0lfUElYRUxfRk9STUFUX1JHQjg4ODoKLQkJZGl0 aGVyX2NmZy0+YzBfYml0ZGVwdGggPSA4OwotCQlkaXRoZXJfY2ZnLT5jMV9iaXRkZXB0aCA9IDg7 Ci0JCWRpdGhlcl9jZmctPmMyX2JpdGRlcHRoID0gODsKLQkJZGl0aGVyX2NmZy0+YzNfYml0ZGVw dGggPSA4OwotCQlicmVhazsKLQljYXNlIERTSV9QSVhFTF9GT1JNQVRfUkdCNjY2OgotCWNhc2Ug RFNJX1BJWEVMX0ZPUk1BVF9SR0I2NjZfTE9PU0U6Ci0JCWRpdGhlcl9jZmctPmMwX2JpdGRlcHRo ID0gNjsKLQkJZGl0aGVyX2NmZy0+YzFfYml0ZGVwdGggPSA2OwotCQlkaXRoZXJfY2ZnLT5jMl9i aXRkZXB0aCA9IDY7Ci0JCWRpdGhlcl9jZmctPmMzX2JpdGRlcHRoID0gNjsKLQkJYnJlYWs7Ci0J ZGVmYXVsdDoKLQkJRFBVX0RFQlVHKCJubyBkZWZhdWx0IGRpdGhlciBjb25maWcgZm9yIGRzdF9m b3JtYXQgJWRcbiIsCi0JCQlkc3RfZm9ybWF0KTsKLQkJcmV0dXJuIC1FTk9EQVRBOwotCX0KLQot CW1lbWNweSgmZGl0aGVyX2NmZy0+bWF0cml4LCBkaXRoZXJfbWF0cml4LAotCQkJc2l6ZW9mKHUz MikgKiBESVRIRVJfTUFUUklYX1NaKTsKLQlkaXRoZXJfY2ZnLT50ZW1wb3JhbF9lbiA9IDA7Ci0J cmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIF9kcHVfY29ubmVjdG9yX2luc3RhbGxfZGl0aGVy X3Byb3BlcnR5KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCXN0cnVjdCBkcHVfa21zICpkcHVf a21zLCBzdHJ1Y3QgZHB1X2Nvbm5lY3RvciAqY19jb25uKQotewotCWNoYXIgcHJvcF9uYW1lW0RS TV9QUk9QX05BTUVfTEVOXTsKLQlzdHJ1Y3QgZHB1X21kc3NfY2ZnICpjYXRhbG9nID0gTlVMTDsK LQlzdHJ1Y3QgZHJtX3Byb3BlcnR5X2Jsb2IgKmJsb2JfcHRyOwotCXZvaWQgKmNmZzsKLQlpbnQg cmV0ID0gMDsKLQl1MzIgdmVyc2lvbiA9IDAsIGxlbiA9IDA7Ci0JYm9vbCBkZWZhbHV0X2RpdGhl cl9uZWVkZWQgPSBmYWxzZTsKLQotCWlmICghZGV2IHx8ICFkcHVfa21zIHx8ICFjX2Nvbm4pIHsK LQkJRFBVX0VSUk9SKCJpbnZsZCBhcmdzIChzKSwgZGV2ICVwSywgZHB1X2ttcyAlcEssIGNfY29u biAlcEtcbiIsCi0JCQkJZGV2LCBkcHVfa21zLCBjX2Nvbm4pOwotCQlyZXR1cm47Ci0JfQotCi0J Y2F0YWxvZyA9IGRwdV9rbXMtPmNhdGFsb2c7Ci0JdmVyc2lvbiA9IERQVV9DT0xPUl9QUk9DRVNT X01BSk9SKAotCQkJY2F0YWxvZy0+cGluZ3BvbmdbMF0uc2Jsay0+ZGl0aGVyLnZlcnNpb24pOwot CXNucHJpbnRmKHByb3BfbmFtZSwgQVJSQVlfU0laRShwcm9wX25hbWUpLCAiJXMlZCIsCi0JCQki RFBVX1BQX0RJVEhFUl9WIiwgdmVyc2lvbik7Ci0Jc3dpdGNoICh2ZXJzaW9uKSB7Ci0JY2FzZSAx OgotCQltc21fcHJvcGVydHlfaW5zdGFsbF9ibG9iKCZjX2Nvbm4tPnByb3BlcnR5X2luZm8sIHBy b3BfbmFtZSwKLQkJCURSTV9NT0RFX1BST1BfQkxPQiwKLQkJCUNPTk5FQ1RPUl9QUk9QX1BQX0RJ VEhFUik7Ci0JCWxlbiA9IHNpemVvZihzdHJ1Y3QgZHJtX21zbV9kaXRoZXIpOwotCQljZmcgPSBr emFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghY2ZnKQotCQkJcmV0dXJuOwotCi0JCXJl dCA9IF9kcHVfY29ubmVjdG9yX2dldF9kZWZhdWx0X2RpdGhlcl9jZmdfdjEoY19jb25uLCBjZmcp OwotCQlpZiAoIXJldCkKLQkJCWRlZmFsdXRfZGl0aGVyX25lZWRlZCA9IHRydWU7Ci0JCWJyZWFr OwotCWRlZmF1bHQ6Ci0JCURQVV9FUlJPUigidW5zdXBwb3J0ZWQgZGl0aGVyIHZlcnNpb24gJWRc biIsIHZlcnNpb24pOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKGRlZmFsdXRfZGl0aGVyX25lZWRl ZCkgewotCQlibG9iX3B0ciA9IGRybV9wcm9wZXJ0eV9jcmVhdGVfYmxvYihkZXYsIGxlbiwgY2Zn KTsKLQkJaWYgKElTX0VSUl9PUl9OVUxMKGJsb2JfcHRyKSkKLQkJCWdvdG8gZXhpdDsKLQkJY19j b25uLT5ibG9iX2RpdGhlciA9IGJsb2JfcHRyOwotCX0KLWV4aXQ6Ci0Ja2ZyZWUoY2ZnKTsKLX0K LSNlbmRpZgotCi1pbnQgZHB1X2Nvbm5lY3Rvcl9nZXRfZGl0aGVyX2NmZyhzdHJ1Y3QgZHJtX2Nv bm5lY3RvciAqY29ubiwKLQkJCXN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpzdGF0ZSwgdm9p ZCAqKmNmZywKLQkJCXNpemVfdCAqbGVuKQotewotCXN0cnVjdCBkcHVfY29ubmVjdG9yICpjX2Nv bm4gPSBOVUxMOwotCXN0cnVjdCBkcHVfY29ubmVjdG9yX3N0YXRlICpjX3N0YXRlID0gTlVMTDsK LQlzaXplX3QgZGl0aGVyX3N6ID0gMDsKLQotCWlmICghY29ubiB8fCAhc3RhdGUgfHwgISgqY2Zn KSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQljX2Nvbm4gPSB0b19kcHVfY29ubmVjdG9yKGNvbm4p OwotCWNfc3RhdGUgPSB0b19kcHVfY29ubmVjdG9yX3N0YXRlKHN0YXRlKTsKLQotCS8qIHRyeSB0 byBnZXQgdXNlciBjb25maWcgZGF0YSBmaXJzdCAqLwotCSpjZmcgPSBtc21fcHJvcGVydHlfZ2V0 X2Jsb2IoJmNfY29ubi0+cHJvcGVydHlfaW5mbywKLQkJCQkJJmNfc3RhdGUtPnByb3BlcnR5X3N0 YXRlLAotCQkJCQkmZGl0aGVyX3N6LAotCQkJCQlDT05ORUNUT1JfUFJPUF9QUF9ESVRIRVIpOwot CS8qIGlmIHVzZXIgY29uZmlnIGRhdGEgZG9lc24ndCBleGlzdCwgdXNlIGRlZmF1bHQgZGl0aGVy IGJsb2IgKi8KLQlpZiAoKmNmZyA9PSBOVUxMICYmIGNfY29ubi0+YmxvYl9kaXRoZXIpIHsKLQkJ KmNmZyA9ICZjX2Nvbm4tPmJsb2JfZGl0aGVyLT5kYXRhOwotCQlkaXRoZXJfc3ogPSBjX2Nvbm4t PmJsb2JfZGl0aGVyLT5sZW5ndGg7Ci0JfQotCSpsZW4gPSBkaXRoZXJfc3o7Ci0JcmV0dXJuIDA7 Ci19Ci0KLWludCBkcHVfY29ubmVjdG9yX2dldF9pbmZvKHN0cnVjdCBkcm1fY29ubmVjdG9yICpj b25uZWN0b3IsCi0JCXN0cnVjdCBtc21fZGlzcGxheV9pbmZvICppbmZvKQotewotCXN0cnVjdCBk cHVfY29ubmVjdG9yICpjX2Nvbm47Ci0KLQlpZiAoIWNvbm5lY3RvciB8fCAhaW5mbykgewotCQlE UFVfRVJST1IoImludmFsaWQgYXJndW1lbnQocyksIGNvbm4gJXBLLCBpbmZvICVwS1xuIiwKLQkJ CQljb25uZWN0b3IsIGluZm8pOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQljX2Nvbm4gPSB0 b19kcHVfY29ubmVjdG9yKGNvbm5lY3Rvcik7Ci0KLQlpZiAoIWNfY29ubi0+ZGlzcGxheSB8fCAh Y19jb25uLT5vcHMuZ2V0X2luZm8pIHsKLQkJRFBVX0VSUk9SKCJkaXNwbGF5IGluZm8gbm90IHN1 cHBvcnRlZCBmb3IgJXBLXG4iLAotCQkJCWNfY29ubi0+ZGlzcGxheSk7Ci0JCXJldHVybiAtRUlO VkFMOwotCX0KLQotCXJldHVybiBjX2Nvbm4tPm9wcy5nZXRfaW5mbyhpbmZvLCBjX2Nvbm4tPmRp c3BsYXkpOwotfQotCi1zdGF0aWMgaW50IF9kcHVfY29ubmVjdG9yX3VwZGF0ZV9wb3dlcl9sb2Nr ZWQoc3RydWN0IGRwdV9jb25uZWN0b3IgKmNfY29ubikKLXsKLQlzdHJ1Y3QgZHJtX2Nvbm5lY3Rv ciAqY29ubmVjdG9yOwotCXZvaWQgKmRpc3BsYXk7Ci0JaW50ICgqc2V0X3Bvd2VyKShzdHJ1Y3Qg ZHJtX2Nvbm5lY3RvciAqLCBpbnQsIHZvaWQgKik7Ci0JaW50IG1vZGUsIHJjID0gMDsKLQotCWlm ICghY19jb25uKQotCQlyZXR1cm4gLUVJTlZBTDsKLQljb25uZWN0b3IgPSAmY19jb25uLT5iYXNl OwotCi0Jc3dpdGNoIChjX2Nvbm4tPmRwbXNfbW9kZSkgewotCWNhc2UgRFJNX01PREVfRFBNU19P TjoKLQkJbW9kZSA9IGNfY29ubi0+bHBfbW9kZTsKLQkJYnJlYWs7Ci0JY2FzZSBEUk1fTU9ERV9E UE1TX1NUQU5EQlk6Ci0JCW1vZGUgPSBEUFVfTU9ERV9EUE1TX1NUQU5EQlk7Ci0JCWJyZWFrOwot CWNhc2UgRFJNX01PREVfRFBNU19TVVNQRU5EOgotCQltb2RlID0gRFBVX01PREVfRFBNU19TVVNQ RU5EOwotCQlicmVhazsKLQljYXNlIERSTV9NT0RFX0RQTVNfT0ZGOgotCQltb2RlID0gRFBVX01P REVfRFBNU19PRkY7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCW1vZGUgPSBjX2Nvbm4tPmxwX21v ZGU7Ci0JCURQVV9FUlJPUigiY29ubiAlZCBkcG1zIHNldCB0byB1bnJlY29nbml6ZWQgbW9kZSAl ZFxuIiwKLQkJCQljb25uZWN0b3ItPmJhc2UuaWQsIG1vZGUpOwotCQlicmVhazsKLQl9Ci0KLQlE UFVfRVZUMzIoY29ubmVjdG9yLT5iYXNlLmlkLCBjX2Nvbm4tPmRwbXNfbW9kZSwgY19jb25uLT5s cF9tb2RlLCBtb2RlKTsKLQlEUFVfREVCVUcoImNvbm4gJWQgLSBkcG1zICVkLCBscCAlZCwgcGFu ZWwgJWRcbiIsIGNvbm5lY3Rvci0+YmFzZS5pZCwKLQkJCWNfY29ubi0+ZHBtc19tb2RlLCBjX2Nv bm4tPmxwX21vZGUsIG1vZGUpOwotCi0JaWYgKG1vZGUgIT0gY19jb25uLT5sYXN0X3BhbmVsX3Bv d2VyX21vZGUgJiYgY19jb25uLT5vcHMuc2V0X3Bvd2VyKSB7Ci0JCWRpc3BsYXkgPSBjX2Nvbm4t PmRpc3BsYXk7Ci0JCXNldF9wb3dlciA9IGNfY29ubi0+b3BzLnNldF9wb3dlcjsKLQotCQltdXRl eF91bmxvY2soJmNfY29ubi0+bG9jayk7Ci0JCXJjID0gc2V0X3Bvd2VyKGNvbm5lY3RvciwgbW9k ZSwgZGlzcGxheSk7Ci0JCW11dGV4X2xvY2soJmNfY29ubi0+bG9jayk7Ci0JfQotCWNfY29ubi0+ bGFzdF9wYW5lbF9wb3dlcl9tb2RlID0gbW9kZTsKLQotCXJldHVybiByYzsKLX0KLQotaW50IGRw dV9jb25uZWN0b3JfcHJlX2tpY2tvZmYoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikK LXsKLQlzdHJ1Y3QgZHB1X2Nvbm5lY3RvciAqY19jb25uOwotCXN0cnVjdCBkcHVfY29ubmVjdG9y X3N0YXRlICpjX3N0YXRlOwotCWludCBpZHgsIHJjID0gMDsKLQotCWlmICghY29ubmVjdG9yKSB7 Ci0JCURQVV9FUlJPUigiaW52YWxpZCBhcmd1bWVudFxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwot CX0KLQotCWNfY29ubiA9IHRvX2RwdV9jb25uZWN0b3IoY29ubmVjdG9yKTsKLQljX3N0YXRlID0g dG9fZHB1X2Nvbm5lY3Rvcl9zdGF0ZShjb25uZWN0b3ItPnN0YXRlKTsKLQotCWlmICghY19jb25u LT5kaXNwbGF5KSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBhcmd1bWVudFxuIik7Ci0JCXJldHVy biAtRUlOVkFMOwotCX0KLSNpZmRlZiBDT05GSUdfRFJNX01TTV9EU0lfU1RBR0lORwotCWlmIChj X2Nvbm4tPm9wcy5zZXRfYmFja2xpZ2h0KSB7Ci0JCURQVV9ERUJVRygiY29ubiVkOiBTZXQgYmFj a2xpZ2h0IHRvIDI1NVxuIiwgY29ubmVjdG9yLT5iYXNlLmlkKTsKLQkJY19jb25uLT5vcHMuc2V0 X2JhY2tsaWdodChjX2Nvbm4tPmRpc3BsYXksIDI1NSk7Ci0JfQotI2VuZGlmCi0KLQl3aGlsZSAo KGlkeCA9IG1zbV9wcm9wZXJ0eV9wb3BfZGlydHkoJmNfY29ubi0+cHJvcGVydHlfaW5mbywKLQkJ CQkJJmNfc3RhdGUtPnByb3BlcnR5X3N0YXRlKSkgPj0gMCkgewotCQlzd2l0Y2ggKGlkeCkgewot CQljYXNlIENPTk5FQ1RPUl9QUk9QX0xQOgotCQkJbXV0ZXhfbG9jaygmY19jb25uLT5sb2NrKTsK LQkJCWNfY29ubi0+bHBfbW9kZSA9IGRwdV9jb25uZWN0b3JfZ2V0X3Byb3BlcnR5KAotCQkJCQlj b25uZWN0b3ItPnN0YXRlLCBDT05ORUNUT1JfUFJPUF9MUCk7Ci0JCQlfZHB1X2Nvbm5lY3Rvcl91 cGRhdGVfcG93ZXJfbG9ja2VkKGNfY29ubik7Ci0JCQltdXRleF91bmxvY2soJmNfY29ubi0+bG9j ayk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCS8qIG5vdGhpbmcgdG8gZG8gZm9yIG1vc3Qg cHJvcGVydGllcyAqLwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlEUFVfRVZUMzJfVkVSQk9TRShj b25uZWN0b3ItPmJhc2UuaWQpOwotCi0JcmV0dXJuIHJjOwotfQotCi12b2lkIGRwdV9jb25uZWN0 b3JfY2xrX2N0cmwoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwgYm9vbCBlbmFibGUp Ci17Ci0jaWZkZWYgQ09ORklHX0RSTV9NU01fRFNJX1NUQUdJTkcKLQlzdHJ1Y3QgZHB1X2Nvbm5l Y3RvciAqY19jb25uOwotCXN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheTsKLQl1MzIgc3RhdGUg PSBlbmFibGUgPyBEU0lfQ0xLX09OIDogRFNJX0NMS19PRkY7Ci0KLQlpZiAoIWNvbm5lY3Rvcikg ewotCQlEUFVfRVJST1IoImludmFsaWQgY29ubmVjdG9yXG4iKTsKLQkJcmV0dXJuOwotCX0KLQot CWNfY29ubiA9IHRvX2RwdV9jb25uZWN0b3IoY29ubmVjdG9yKTsKLQlkaXNwbGF5ID0gKHN0cnVj dCBkc2lfZGlzcGxheSAqKSBjX2Nvbm4tPmRpc3BsYXk7Ci0KLQlpZiAoZGlzcGxheSAmJiBjX2Nv bm4tPm9wcy5jbGtfY3RybCkKLQkJY19jb25uLT5vcHMuY2xrX2N0cmwoZGlzcGxheS0+bWRwX2Ns a19oYW5kbGUsCi0JCQkJRFNJX0FMTF9DTEtTLCBzdGF0ZSk7Ci0jZW5kaWYKLX0KLQotc3RhdGlj IHZvaWQgZHB1X2Nvbm5lY3Rvcl9kZXN0cm95KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0 b3IpCi17Ci0Jc3RydWN0IGRwdV9jb25uZWN0b3IgKmNfY29ubjsKLQotCWlmICghY29ubmVjdG9y KSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBjb25uZWN0b3JcbiIpOwotCQlyZXR1cm47Ci0JfQot Ci0JY19jb25uID0gdG9fZHB1X2Nvbm5lY3Rvcihjb25uZWN0b3IpOwotCi0JaWYgKGNfY29ubi0+ b3BzLnB1dF9tb2RlcykKLQkJY19jb25uLT5vcHMucHV0X21vZGVzKGNvbm5lY3RvciwgY19jb25u LT5kaXNwbGF5KTsKLQotCWlmIChjX2Nvbm4tPmJsb2JfY2FwcykKLQkJZHJtX3Byb3BlcnR5X2Js b2JfcHV0KGNfY29ubi0+YmxvYl9jYXBzKTsKLQlpZiAoY19jb25uLT5ibG9iX2hkcikKLQkJZHJt X3Byb3BlcnR5X2Jsb2JfcHV0KGNfY29ubi0+YmxvYl9oZHIpOwotCWlmIChjX2Nvbm4tPmJsb2Jf ZGl0aGVyKQotCQlkcm1fcHJvcGVydHlfYmxvYl9wdXQoY19jb25uLT5ibG9iX2RpdGhlcik7Ci0J bXNtX3Byb3BlcnR5X2Rlc3Ryb3koJmNfY29ubi0+cHJvcGVydHlfaW5mbyk7Ci0KLQlpZiAoY19j b25uLT5ibF9kZXZpY2UpCi0JCWJhY2tsaWdodF9kZXZpY2VfdW5yZWdpc3RlcihjX2Nvbm4tPmJs X2RldmljZSk7Ci0JZHJtX2Nvbm5lY3Rvcl91bnJlZ2lzdGVyKGNvbm5lY3Rvcik7Ci0JbXV0ZXhf ZGVzdHJveSgmY19jb25uLT5sb2NrKTsKLQlkcm1fY29ubmVjdG9yX2NsZWFudXAoY29ubmVjdG9y KTsKLQlrZnJlZShjX2Nvbm4pOwotfQotCi0vKioKLSAqIF9kcHVfY29ubmVjdG9yX2Rlc3Ryb3lf ZmIgLSBjbGVhbiB1cCBjb25uZWN0b3Igc3RhdGUncyBvdXRfZmIgYnVmZmVyCi0gKiBAY19jb25u OiBQb2ludGVyIHRvIGRwdSBjb25uZWN0b3Igc3RydWN0dXJlCi0gKiBAY19zdGF0ZTogUG9pbnRl ciB0byBkcHUgY29ubmVjdG9yIHN0YXRlIHN0cnVjdHVyZQotICovCi1zdGF0aWMgdm9pZCBfZHB1 X2Nvbm5lY3Rvcl9kZXN0cm95X2ZiKHN0cnVjdCBkcHVfY29ubmVjdG9yICpjX2Nvbm4sCi0JCXN0 cnVjdCBkcHVfY29ubmVjdG9yX3N0YXRlICpjX3N0YXRlKQotewotCWlmICghY19zdGF0ZSB8fCAh Y19zdGF0ZS0+b3V0X2ZiKSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBzdGF0ZSAlcEtcbiIsIGNf c3RhdGUpOwotCQlyZXR1cm47Ci0JfQotCi0JZHJtX2ZyYW1lYnVmZmVyX3B1dChjX3N0YXRlLT5v dXRfZmIpOwotCWNfc3RhdGUtPm91dF9mYiA9IE5VTEw7Ci0KLQlpZiAoY19jb25uKQotCQljX3N0 YXRlLT5wcm9wZXJ0eV92YWx1ZXNbQ09OTkVDVE9SX1BST1BfT1VUX0ZCXS52YWx1ZSA9Ci0JCQlt c21fcHJvcGVydHlfZ2V0X2RlZmF1bHQoJmNfY29ubi0+cHJvcGVydHlfaW5mbywKLQkJCQkJQ09O TkVDVE9SX1BST1BfT1VUX0ZCKTsKLQllbHNlCi0JCWNfc3RhdGUtPnByb3BlcnR5X3ZhbHVlc1tD T05ORUNUT1JfUFJPUF9PVVRfRkJdLnZhbHVlID0gfjA7Ci19Ci0KLXN0YXRpYyB2b2lkIGRwdV9j b25uZWN0b3JfYXRvbWljX2Rlc3Ryb3lfc3RhdGUoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5l Y3RvciwKLQkJc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKnN0YXRlKQotewotCXN0cnVjdCBk cHVfY29ubmVjdG9yICpjX2Nvbm4gPSBOVUxMOwotCXN0cnVjdCBkcHVfY29ubmVjdG9yX3N0YXRl ICpjX3N0YXRlID0gTlVMTDsKLQotCWlmICghc3RhdGUpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlk IHN0YXRlXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qCi0JICogVGhlIGJhc2UgRFJNIGZyYW1l d29yayBjdXJyZW50bHkgYWx3YXlzIHBhc3NlcyBpbiBhIE5VTEwKLQkgKiBjb25uZWN0b3IgcG9p bnRlci4gVGhpcyBpcyBub3QgY29ycmVjdCwgYnV0IGF0dGVtcHQgdG8KLQkgKiBoYW5kbGUgdGhh dCBjYXNlIGFzIG11Y2ggYXMgcG9zc2libGUuCi0JICovCi0JaWYgKGNvbm5lY3RvcikKLQkJY19j b25uID0gdG9fZHB1X2Nvbm5lY3Rvcihjb25uZWN0b3IpOwotCWNfc3RhdGUgPSB0b19kcHVfY29u bmVjdG9yX3N0YXRlKHN0YXRlKTsKLQotCWlmIChjX3N0YXRlLT5vdXRfZmIpCi0JCV9kcHVfY29u bmVjdG9yX2Rlc3Ryb3lfZmIoY19jb25uLCBjX3N0YXRlKTsKLQotCWlmICghY19jb25uKSB7Ci0J CWtmcmVlKGNfc3RhdGUpOwotCX0gZWxzZSB7Ci0JCS8qIGRlc3Ryb3kgdmFsdWUgaGVscGVyICov Ci0JCW1zbV9wcm9wZXJ0eV9kZXN0cm95X3N0YXRlKCZjX2Nvbm4tPnByb3BlcnR5X2luZm8sIGNf c3RhdGUsCi0JCQkJJmNfc3RhdGUtPnByb3BlcnR5X3N0YXRlKTsKLQl9Ci19Ci0KLXN0YXRpYyB2 b2lkIGRwdV9jb25uZWN0b3JfYXRvbWljX3Jlc2V0KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25u ZWN0b3IpCi17Ci0Jc3RydWN0IGRwdV9jb25uZWN0b3IgKmNfY29ubjsKLQlzdHJ1Y3QgZHB1X2Nv bm5lY3Rvcl9zdGF0ZSAqY19zdGF0ZTsKLQotCWlmICghY29ubmVjdG9yKSB7Ci0JCURQVV9FUlJP UigiaW52YWxpZCBjb25uZWN0b3JcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JY19jb25uID0gdG9f ZHB1X2Nvbm5lY3Rvcihjb25uZWN0b3IpOwotCi0JaWYgKGNvbm5lY3Rvci0+c3RhdGUpIHsKLQkJ ZHB1X2Nvbm5lY3Rvcl9hdG9taWNfZGVzdHJveV9zdGF0ZShjb25uZWN0b3IsIGNvbm5lY3Rvci0+ c3RhdGUpOwotCQljb25uZWN0b3ItPnN0YXRlID0gMDsKLQl9Ci0KLQljX3N0YXRlID0gbXNtX3By b3BlcnR5X2FsbG9jX3N0YXRlKCZjX2Nvbm4tPnByb3BlcnR5X2luZm8pOwotCWlmICghY19zdGF0 ZSkgewotCQlEUFVfRVJST1IoInN0YXRlIGFsbG9jIGZhaWxlZFxuIik7Ci0JCXJldHVybjsKLQl9 Ci0KLQkvKiByZXNldCB2YWx1ZSBoZWxwZXIsIHplcm8gb3V0IHN0YXRlIHN0cnVjdHVyZSBhbmQg cmVzZXQgcHJvcGVydGllcyAqLwotCW1zbV9wcm9wZXJ0eV9yZXNldF9zdGF0ZSgmY19jb25uLT5w cm9wZXJ0eV9pbmZvLCBjX3N0YXRlLAotCQkJJmNfc3RhdGUtPnByb3BlcnR5X3N0YXRlLAotCQkJ Y19zdGF0ZS0+cHJvcGVydHlfdmFsdWVzKTsKLQotCWNfc3RhdGUtPmJhc2UuY29ubmVjdG9yID0g Y29ubmVjdG9yOwotCWNvbm5lY3Rvci0+c3RhdGUgPSAmY19zdGF0ZS0+YmFzZTsKLX0KLQotc3Rh dGljIHN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICoKLWRwdV9jb25uZWN0b3JfYXRvbWljX2R1 cGxpY2F0ZV9zdGF0ZShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQotewotCXN0cnVj dCBkcHVfY29ubmVjdG9yICpjX2Nvbm47Ci0Jc3RydWN0IGRwdV9jb25uZWN0b3Jfc3RhdGUgKmNf c3RhdGUsICpjX29sZHN0YXRlOwotCi0JaWYgKCFjb25uZWN0b3IgfHwgIWNvbm5lY3Rvci0+c3Rh dGUpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGNvbm5lY3RvciAlcEtcbiIsIGNvbm5lY3Rvcik7 Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCWNfY29ubiA9IHRvX2RwdV9jb25uZWN0b3IoY29ubmVj dG9yKTsKLQljX29sZHN0YXRlID0gdG9fZHB1X2Nvbm5lY3Rvcl9zdGF0ZShjb25uZWN0b3ItPnN0 YXRlKTsKLQljX3N0YXRlID0gbXNtX3Byb3BlcnR5X2FsbG9jX3N0YXRlKCZjX2Nvbm4tPnByb3Bl cnR5X2luZm8pOwotCWlmICghY19zdGF0ZSkgewotCQlEUFVfRVJST1IoInN0YXRlIGFsbG9jIGZh aWxlZFxuIik7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCS8qIGR1cGxpY2F0ZSB2YWx1ZSBoZWxw ZXIgKi8KLQltc21fcHJvcGVydHlfZHVwbGljYXRlX3N0YXRlKCZjX2Nvbm4tPnByb3BlcnR5X2lu Zm8sCi0JCQljX29sZHN0YXRlLCBjX3N0YXRlLAotCQkJJmNfc3RhdGUtPnByb3BlcnR5X3N0YXRl LCBjX3N0YXRlLT5wcm9wZXJ0eV92YWx1ZXMpOwotCi0JLyogYWRkaXRpb25hbCBoYW5kbGluZyBm b3IgZHJtIGZyYW1lYnVmZmVyIG9iamVjdHMgKi8KLQlpZiAoY19zdGF0ZS0+b3V0X2ZiKQotCQlk cm1fZnJhbWVidWZmZXJfZ2V0KGNfc3RhdGUtPm91dF9mYik7Ci0KLQlyZXR1cm4gJmNfc3RhdGUt PmJhc2U7Ci19Ci0KLXN0YXRpYyBpbnQgX2RwdV9jb25uZWN0b3JfdXBkYXRlX2JsX3NjYWxlKHN0 cnVjdCBkcHVfY29ubmVjdG9yICpjX2Nvbm4sCi0JCWludCBpZHgsCi0JCXVpbnQ2NF90IHZhbHVl KQotewotI2lmZGVmIENPTkZJR19EUk1fTVNNX0RTSV9TVEFHSU5HCi0Jc3RydWN0IGRzaV9kaXNw bGF5ICpkc2lfZGlzcGxheSA9IGNfY29ubi0+ZGlzcGxheTsKLQlzdHJ1Y3QgZHNpX2JhY2tsaWdo dF9jb25maWcgKmJsX2NvbmZpZzsKLQlpbnQgcmMgPSAwOwotCi0JaWYgKCFkc2lfZGlzcGxheSB8 fCAhZHNpX2Rpc3BsYXktPnBhbmVsKSB7Ci0JCXByX2VycigiSW52YWxpZCBwYXJhbXMocykgZHNp X2Rpc3BsYXkgJXBLLCBwYW5lbCAlcEtcbiIsCi0JCQlkc2lfZGlzcGxheSwKLQkJCSgoZHNpX2Rp c3BsYXkpID8gZHNpX2Rpc3BsYXktPnBhbmVsIDogTlVMTCkpOwotCQlyZXR1cm4gLUVJTlZBTDsK LQl9Ci0KLQlibF9jb25maWcgPSAmZHNpX2Rpc3BsYXktPnBhbmVsLT5ibF9jb25maWc7Ci0JaWYg KGlkeCA9PSBDT05ORUNUT1JfUFJPUF9CTF9TQ0FMRSkgewotCQlibF9jb25maWctPmJsX3NjYWxl ID0gdmFsdWU7Ci0JCWlmICh2YWx1ZSA+IE1BWF9CTF9TQ0FMRV9MRVZFTCkKLQkJCWJsX2NvbmZp Zy0+Ymxfc2NhbGUgPSBNQVhfQkxfU0NBTEVfTEVWRUw7Ci0JCURQVV9ERUJVRygic2V0IHRvIHBh bmVsOiBibF9zY2FsZSA9ICV1LCBibF9sZXZlbCA9ICV1XG4iLAotCQkJYmxfY29uZmlnLT5ibF9z Y2FsZSwgYmxfY29uZmlnLT5ibF9sZXZlbCk7Ci0JCXJjID0gY19jb25uLT5vcHMuc2V0X2JhY2ts aWdodChkc2lfZGlzcGxheSwKLQkJCQkJICAgICAgIGJsX2NvbmZpZy0+YmxfbGV2ZWwpOwotCX0g ZWxzZSBpZiAoaWR4ID09IENPTk5FQ1RPUl9QUk9QX0FEX0JMX1NDQUxFKSB7Ci0JCWJsX2NvbmZp Zy0+Ymxfc2NhbGVfYWQgPSB2YWx1ZTsKLQkJaWYgKHZhbHVlID4gTUFYX0FEX0JMX1NDQUxFX0xF VkVMKQotCQkJYmxfY29uZmlnLT5ibF9zY2FsZV9hZCA9IE1BWF9BRF9CTF9TQ0FMRV9MRVZFTDsK LQkJRFBVX0RFQlVHKCJzZXQgdG8gcGFuZWw6IGJsX3NjYWxlX2FkID0gJXUsIGJsX2xldmVsID0g JXVcbiIsCi0JCQlibF9jb25maWctPmJsX3NjYWxlX2FkLCBibF9jb25maWctPmJsX2xldmVsKTsK LQkJcmMgPSBjX2Nvbm4tPm9wcy5zZXRfYmFja2xpZ2h0KGRzaV9kaXNwbGF5LAotCQkJCQkgICAg ICAgYmxfY29uZmlnLT5ibF9sZXZlbCk7Ci0JfQotCXJldHVybiByYzsKLSNlbHNlCi0JcmV0dXJu IDA7Ci0jZW5kaWYKLX0KLQotc3RhdGljIGludCBkcHVfY29ubmVjdG9yX2F0b21pY19zZXRfcHJv cGVydHkoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKLQkJc3RydWN0IGRybV9jb25u ZWN0b3Jfc3RhdGUgKnN0YXRlLAotCQlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpwcm9wZXJ0eSwKLQkJ dWludDY0X3QgdmFsKQotewotCXN0cnVjdCBkcHVfY29ubmVjdG9yICpjX2Nvbm47Ci0Jc3RydWN0 IGRwdV9jb25uZWN0b3Jfc3RhdGUgKmNfc3RhdGU7Ci0JaW50IGlkeCwgcmM7Ci0KLQlpZiAoIWNv bm5lY3RvciB8fCAhc3RhdGUgfHwgIXByb3BlcnR5KSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBh cmd1bWVudChzKSwgY29ubiAlcEssIHN0YXRlICVwSywgcHJwICVwS1xuIiwKLQkJCQljb25uZWN0 b3IsIHN0YXRlLCBwcm9wZXJ0eSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWNfY29ubiA9 IHRvX2RwdV9jb25uZWN0b3IoY29ubmVjdG9yKTsKLQljX3N0YXRlID0gdG9fZHB1X2Nvbm5lY3Rv cl9zdGF0ZShzdGF0ZSk7Ci0KLQkvKiBnZW5lcmljIHByb3BlcnR5IGhhbmRsaW5nICovCi0JcmMg PSBtc21fcHJvcGVydHlfYXRvbWljX3NldCgmY19jb25uLT5wcm9wZXJ0eV9pbmZvLAotCQkJJmNf c3RhdGUtPnByb3BlcnR5X3N0YXRlLCBwcm9wZXJ0eSwgdmFsKTsKLQlpZiAocmMpCi0JCWdvdG8g ZW5kOwotCi0JLyogY29ubmVjdG9yLXNwZWNpZmljIHByb3BlcnR5IGhhbmRsaW5nICovCi0JaWR4 ID0gbXNtX3Byb3BlcnR5X2luZGV4KCZjX2Nvbm4tPnByb3BlcnR5X2luZm8sIHByb3BlcnR5KTsK LQlzd2l0Y2ggKGlkeCkgewotCWNhc2UgQ09OTkVDVE9SX1BST1BfT1VUX0ZCOgotCQkvKiBjbGVh ciBvbGQgZmIsIGlmIHByZXNlbnQgKi8KLQkJaWYgKGNfc3RhdGUtPm91dF9mYikKLQkJCV9kcHVf Y29ubmVjdG9yX2Rlc3Ryb3lfZmIoY19jb25uLCBjX3N0YXRlKTsKLQotCQkvKiBjb252ZXJ0IGZi IHZhbCB0byBkcm0gZnJhbWVidWZmZXIgYW5kIHByZXBhcmUgaXQgKi8KLQkJY19zdGF0ZS0+b3V0 X2ZiID0KLQkJCWRybV9mcmFtZWJ1ZmZlcl9sb29rdXAoY29ubmVjdG9yLT5kZXYsIE5VTEwsIHZh bCk7Ci0JCWlmICghY19zdGF0ZS0+b3V0X2ZiICYmIHZhbCkgewotCQkJRFBVX0VSUk9SKCJmYWls ZWQgdG8gbG9vayB1cCBmYiAlbGxkXG4iLCB2YWwpOwotCQkJcmMgPSAtRUZBVUxUOwotCQl9IGVs c2UgaWYgKCFjX3N0YXRlLT5vdXRfZmIgJiYgIXZhbCkgewotCQkJRFBVX0RFQlVHKCJjbGVhcmVk IGZiX2lkXG4iKTsKLQkJCXJjID0gMDsKLQkJfQotCQlicmVhazsKLQljYXNlIENPTk5FQ1RPUl9Q Uk9QX0JMX1NDQUxFOgotCWNhc2UgQ09OTkVDVE9SX1BST1BfQURfQkxfU0NBTEU6Ci0JCXJjID0g X2RwdV9jb25uZWN0b3JfdXBkYXRlX2JsX3NjYWxlKGNfY29ubiwgaWR4LCB2YWwpOwotCQlicmVh azsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci0KLQkvKiBjaGVjayBmb3IgY3VzdG9tIHByb3Bl cnR5IGhhbmRsaW5nICovCi0JaWYgKCFyYyAmJiBjX2Nvbm4tPm9wcy5zZXRfcHJvcGVydHkpIHsK LQkJcmMgPSBjX2Nvbm4tPm9wcy5zZXRfcHJvcGVydHkoY29ubmVjdG9yLAotCQkJCXN0YXRlLAot CQkJCWlkeCwKLQkJCQl2YWwsCi0JCQkJY19jb25uLT5kaXNwbGF5KTsKLQotCQkvKiBwb3RlbnRp YWxseSBjbGVhbiB1cCBvdXRfZmIgaWYgcmMgIT0gMCAqLwotCQlpZiAoKGlkeCA9PSBDT05ORUNU T1JfUFJPUF9PVVRfRkIpICYmIHJjKQotCQkJX2RwdV9jb25uZWN0b3JfZGVzdHJveV9mYihjX2Nv bm4sIGNfc3RhdGUpOwotCX0KLWVuZDoKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHB1 X2Nvbm5lY3Rvcl9zZXRfcHJvcGVydHkoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwK LQkJc3RydWN0IGRybV9wcm9wZXJ0eSAqcHJvcGVydHksCi0JCXVpbnQ2NF90IHZhbCkKLXsKLQlp ZiAoIWNvbm5lY3RvcikgewotCQlEUFVfRVJST1IoImludmFsaWQgY29ubmVjdG9yXG4iKTsKLQkJ cmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmV0dXJuIGRwdV9jb25uZWN0b3JfYXRvbWljX3NldF9w cm9wZXJ0eShjb25uZWN0b3IsCi0JCQljb25uZWN0b3ItPnN0YXRlLCBwcm9wZXJ0eSwgdmFsKTsK LX0KLQotc3RhdGljIGludCBkcHVfY29ubmVjdG9yX2F0b21pY19nZXRfcHJvcGVydHkoc3RydWN0 IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKLQkJY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3Jf c3RhdGUgKnN0YXRlLAotCQlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpwcm9wZXJ0eSwKLQkJdWludDY0 X3QgKnZhbCkKLXsKLQlzdHJ1Y3QgZHB1X2Nvbm5lY3RvciAqY19jb25uOwotCXN0cnVjdCBkcHVf Y29ubmVjdG9yX3N0YXRlICpjX3N0YXRlOwotCWludCBpZHgsIHJjID0gLUVJTlZBTDsKLQotCWlm ICghY29ubmVjdG9yIHx8ICFzdGF0ZSkgewotCQlEUFVfRVJST1IoImludmFsaWQgYXJndW1lbnQo cyksIGNvbm4gJXBLLCBzdGF0ZSAlcEtcbiIsCi0JCQkJY29ubmVjdG9yLCBzdGF0ZSk7Ci0JCXJl dHVybiAtRUlOVkFMOwotCX0KLQotCWNfY29ubiA9IHRvX2RwdV9jb25uZWN0b3IoY29ubmVjdG9y KTsKLQljX3N0YXRlID0gdG9fZHB1X2Nvbm5lY3Rvcl9zdGF0ZShzdGF0ZSk7Ci0KLQlpZHggPSBt c21fcHJvcGVydHlfaW5kZXgoJmNfY29ubi0+cHJvcGVydHlfaW5mbywgcHJvcGVydHkpOwotCS8q IGdldCBjYWNoZWQgcHJvcGVydHkgdmFsdWUgKi8KLQlyYyA9IG1zbV9wcm9wZXJ0eV9hdG9taWNf Z2V0KCZjX2Nvbm4tPnByb3BlcnR5X2luZm8sCi0JCQkmY19zdGF0ZS0+cHJvcGVydHlfc3RhdGUs IHByb3BlcnR5LCB2YWwpOwotCi0JLyogYWxsb3cgZm9yIGN1c3RvbSBvdmVycmlkZSAqLwotCWlm IChjX2Nvbm4tPm9wcy5nZXRfcHJvcGVydHkpCi0JCXJjID0gY19jb25uLT5vcHMuZ2V0X3Byb3Bl cnR5KGNvbm5lY3RvciwKLQkJCQkoc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKilzdGF0ZSwK LQkJCQlpZHgsCi0JCQkJdmFsLAotCQkJCWNfY29ubi0+ZGlzcGxheSk7Ci0JcmV0dXJuIHJjOwot fQotCi1zdGF0aWMgZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cwotZHB1X2Nvbm5lY3Rvcl9kZXRl Y3Qoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwgYm9vbCBmb3JjZSkKLXsKLQllbnVt IGRybV9jb25uZWN0b3Jfc3RhdHVzIHN0YXR1cyA9IGNvbm5lY3Rvcl9zdGF0dXNfdW5rbm93bjsK LQlzdHJ1Y3QgZHB1X2Nvbm5lY3RvciAqY19jb25uOwotCi0JaWYgKCFjb25uZWN0b3IpIHsKLQkJ RFBVX0VSUk9SKCJpbnZhbGlkIGNvbm5lY3RvclxuIik7Ci0JCXJldHVybiBzdGF0dXM7Ci0JfQot Ci0JY19jb25uID0gdG9fZHB1X2Nvbm5lY3Rvcihjb25uZWN0b3IpOwotCi0JaWYgKGNfY29ubi0+ b3BzLmRldGVjdCkKLQkJc3RhdHVzID0gY19jb25uLT5vcHMuZGV0ZWN0KGNvbm5lY3RvciwKLQkJ CQlmb3JjZSwKLQkJCQljX2Nvbm4tPmRpc3BsYXkpOwotCi0JcmV0dXJuIHN0YXR1czsKLX0KLQot aW50IGRwdV9jb25uZWN0b3JfZ2V0X2RwbXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rv cikKLXsKLQlzdHJ1Y3QgZHB1X2Nvbm5lY3RvciAqY19jb25uOwotCWludCByYzsKLQotCWlmICgh Y29ubmVjdG9yKSB7Ci0JCURQVV9ERUJVRygiaW52YWxpZCBjb25uZWN0b3JcbiIpOwotCQlyZXR1 cm4gRFJNX01PREVfRFBNU19PRkY7Ci0JfQotCi0JY19jb25uID0gdG9fZHB1X2Nvbm5lY3Rvcihj b25uZWN0b3IpOwotCi0JbXV0ZXhfbG9jaygmY19jb25uLT5sb2NrKTsKLQlyYyA9IGNfY29ubi0+ ZHBtc19tb2RlOwotCW11dGV4X3VubG9jaygmY19jb25uLT5sb2NrKTsKLQotCXJldHVybiByYzsK LX0KLQotaW50IGRwdV9jb25uZWN0b3Jfc2V0X3Byb3BlcnR5X2Zvcl9jb21taXQoc3RydWN0IGRy bV9jb25uZWN0b3IgKmNvbm5lY3RvciwKLQkJc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKmF0b21p Y19zdGF0ZSwKLQkJdWludDMyX3QgcHJvcGVydHlfaWR4LCB1aW50NjRfdCB2YWx1ZSkKLXsKLQlz dHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqc3RhdGU7Ci0Jc3RydWN0IGRybV9wcm9wZXJ0eSAq cHJvcGVydHk7Ci0Jc3RydWN0IGRwdV9jb25uZWN0b3IgKmNfY29ubjsKLQotCWlmICghY29ubmVj dG9yIHx8ICFhdG9taWNfc3RhdGUpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGFyZ3VtZW50KHMp LCBjb25uICVkLCBzdGF0ZSAlZFxuIiwKLQkJCQljb25uZWN0b3IgIT0gTlVMTCwgYXRvbWljX3N0 YXRlICE9IE5VTEwpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQljX2Nvbm4gPSB0b19kcHVf Y29ubmVjdG9yKGNvbm5lY3Rvcik7Ci0JcHJvcGVydHkgPSBtc21fcHJvcGVydHlfaW5kZXhfdG9f ZHJtX3Byb3BlcnR5KAotCQkJJmNfY29ubi0+cHJvcGVydHlfaW5mbywgcHJvcGVydHlfaWR4KTsK LQlpZiAoIXByb3BlcnR5KSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBwcm9wZXJ0eSBpbmRleCAl ZFxuIiwgcHJvcGVydHlfaWR4KTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0Jc3RhdGUgPSBk cm1fYXRvbWljX2dldF9jb25uZWN0b3Jfc3RhdGUoYXRvbWljX3N0YXRlLCBjb25uZWN0b3IpOwot CWlmIChJU19FUlJfT1JfTlVMTChzdGF0ZSkpIHsKLQkJRFBVX0VSUk9SKCJmYWlsZWQgdG8gZ2V0 IGNvbm4gJWQgc3RhdGVcbiIsCi0JCQkJY29ubmVjdG9yLT5iYXNlLmlkKTsKLQkJcmV0dXJuIC1F SU5WQUw7Ci0JfQotCi0JcmV0dXJuIGRwdV9jb25uZWN0b3JfYXRvbWljX3NldF9wcm9wZXJ0eSgK LQkJCWNvbm5lY3Rvciwgc3RhdGUsIHByb3BlcnR5LCB2YWx1ZSk7Ci19Ci0KLSNpZmRlZiBDT05G SUdfREVCVUdfRlMKLS8qKgotICogZHB1X2Nvbm5lY3Rvcl9pbml0X2RlYnVnZnMgLSBpbml0aWFs aXplIGNvbm5lY3RvciBkZWJ1Z2ZzCi0gKiBAY29ubmVjdG9yOiBQb2ludGVyIHRvIGRybSBjb25u ZWN0b3IKLSAqLwotc3RhdGljIGludCBkcHVfY29ubmVjdG9yX2luaXRfZGVidWdmcyhzdHJ1Y3Qg ZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQotewotCXN0cnVjdCBkcHVfY29ubmVjdG9yICpkcHVf Y29ubmVjdG9yOwotCi0JaWYgKCFjb25uZWN0b3IgfHwgIWNvbm5lY3Rvci0+ZGVidWdmc19lbnRy eSkgewotCQlEUFVfRVJST1IoImludmFsaWQgY29ubmVjdG9yXG4iKTsKLQkJcmV0dXJuIC1FSU5W QUw7Ci0JfQotCi0JZHB1X2Nvbm5lY3RvciA9IHRvX2RwdV9jb25uZWN0b3IoY29ubmVjdG9yKTsK LQotCWlmICghZGVidWdmc19jcmVhdGVfYm9vbCgiZmJfa21hcCIsIDA2MDAsIGNvbm5lY3Rvci0+ ZGVidWdmc19lbnRyeSwKLQkJCSZkcHVfY29ubmVjdG9yLT5mYl9rbWFwKSkgewotCQlEUFVfRVJS T1IoImZhaWxlZCB0byBjcmVhdGUgY29ubmVjdG9yIGZiX2ttYXBcbiIpOwotCQlyZXR1cm4gLUVO T01FTTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLSNlbHNlCi1zdGF0aWMgaW50IGRwdV9jb25uZWN0 b3JfaW5pdF9kZWJ1Z2ZzKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCi17Ci0JcmV0 dXJuIDA7Ci19Ci0jZW5kaWYKLQotc3RhdGljIGludCBkcHVfY29ubmVjdG9yX2xhdGVfcmVnaXN0 ZXIoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKLXsKLQlyZXR1cm4gZHB1X2Nvbm5l Y3Rvcl9pbml0X2RlYnVnZnMoY29ubmVjdG9yKTsKLX0KLQotc3RhdGljIHZvaWQgZHB1X2Nvbm5l Y3Rvcl9lYXJseV91bnJlZ2lzdGVyKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCi17 Ci0JLyogZGVidWdmcyB1bmRlciBjb25uZWN0b3ItPmRlYnVnZnMgYXJlIGRlbGV0ZWQgYnkgZHJt X2RlYnVnZnMgKi8KLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX2Z1bmNz IGRwdV9jb25uZWN0b3Jfb3BzID0gewotCS5yZXNldCA9ICAgICAgICAgICAgICAgICAgZHB1X2Nv bm5lY3Rvcl9hdG9taWNfcmVzZXQsCi0JLmRldGVjdCA9ICAgICAgICAgICAgICAgICBkcHVfY29u bmVjdG9yX2RldGVjdCwKLQkuZGVzdHJveSA9ICAgICAgICAgICAgICAgIGRwdV9jb25uZWN0b3Jf ZGVzdHJveSwKLQkuZmlsbF9tb2RlcyA9ICAgICAgICAgICAgIGRybV9oZWxwZXJfcHJvYmVfc2lu Z2xlX2Nvbm5lY3Rvcl9tb2RlcywKLQkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9IGRwdV9jb25u ZWN0b3JfYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSwKLQkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSAg IGRwdV9jb25uZWN0b3JfYXRvbWljX2Rlc3Ryb3lfc3RhdGUsCi0JLmF0b21pY19zZXRfcHJvcGVy dHkgPSAgICBkcHVfY29ubmVjdG9yX2F0b21pY19zZXRfcHJvcGVydHksCi0JLmF0b21pY19nZXRf cHJvcGVydHkgPSAgICBkcHVfY29ubmVjdG9yX2F0b21pY19nZXRfcHJvcGVydHksCi0JLnNldF9w cm9wZXJ0eSA9ICAgICAgICAgICBkcHVfY29ubmVjdG9yX3NldF9wcm9wZXJ0eSwKLQkubGF0ZV9y ZWdpc3RlciA9ICAgICAgICAgIGRwdV9jb25uZWN0b3JfbGF0ZV9yZWdpc3RlciwKLQkuZWFybHlf dW5yZWdpc3RlciA9ICAgICAgIGRwdV9jb25uZWN0b3JfZWFybHlfdW5yZWdpc3RlciwKLX07Ci0K LXN0YXRpYyBpbnQgZHB1X2Nvbm5lY3Rvcl9nZXRfbW9kZXMoc3RydWN0IGRybV9jb25uZWN0b3Ig KmNvbm5lY3RvcikKLXsKLQlzdHJ1Y3QgZHB1X2Nvbm5lY3RvciAqY19jb25uOwotCi0JaWYgKCFj b25uZWN0b3IpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGNvbm5lY3RvclxuIik7Ci0JCXJldHVy biAwOwotCX0KLQotCWNfY29ubiA9IHRvX2RwdV9jb25uZWN0b3IoY29ubmVjdG9yKTsKLQlpZiAo IWNfY29ubi0+b3BzLmdldF9tb2RlcykgewotCQlEUFVfREVCVUcoIm1pc3NpbmcgZ2V0X21vZGVz IGNhbGxiYWNrXG4iKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JcmV0dXJuIGNfY29ubi0+b3BzLmdl dF9tb2Rlcyhjb25uZWN0b3IsIGNfY29ubi0+ZGlzcGxheSk7Ci19Ci0KLXN0YXRpYyBlbnVtIGRy bV9tb2RlX3N0YXR1cwotZHB1X2Nvbm5lY3Rvcl9tb2RlX3ZhbGlkKHN0cnVjdCBkcm1fY29ubmVj dG9yICpjb25uZWN0b3IsCi0JCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQotewotCXN0 cnVjdCBkcHVfY29ubmVjdG9yICpjX2Nvbm47Ci0KLQlpZiAoIWNvbm5lY3RvciB8fCAhbW9kZSkg ewotCQlEUFVfRVJST1IoImludmFsaWQgYXJndW1lbnQocyksIGNvbm4gJXBLLCBtb2RlICVwS1xu IiwKLQkJCQljb25uZWN0b3IsIG1vZGUpOwotCQlyZXR1cm4gTU9ERV9FUlJPUjsKLQl9Ci0KLQlj X2Nvbm4gPSB0b19kcHVfY29ubmVjdG9yKGNvbm5lY3Rvcik7Ci0KLQlpZiAoY19jb25uLT5vcHMu bW9kZV92YWxpZCkKLQkJcmV0dXJuIGNfY29ubi0+b3BzLm1vZGVfdmFsaWQoY29ubmVjdG9yLCBt b2RlLCBjX2Nvbm4tPmRpc3BsYXkpOwotCi0JLyogYXNzdW1lIGFsbCBtb2RlcyBva2F5IGJ5IGRl ZmF1bHQgKi8KLQlyZXR1cm4gTU9ERV9PSzsKLX0KLQotc3RhdGljIHN0cnVjdCBkcm1fZW5jb2Rl ciAqCi1kcHVfY29ubmVjdG9yX2Jlc3RfZW5jb2RlcihzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29u bmVjdG9yKQotewotCXN0cnVjdCBkcHVfY29ubmVjdG9yICpjX2Nvbm4gPSB0b19kcHVfY29ubmVj dG9yKGNvbm5lY3Rvcik7Ci0KLQlpZiAoIWNvbm5lY3RvcikgewotCQlEUFVfRVJST1IoImludmFs aWQgY29ubmVjdG9yXG4iKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JLyoKLQkgKiBUaGlzIGlz IHRydWUgZm9yIG5vdywgcmV2aXNpdCB0aGlzIGNvZGUgd2hlbiBtdWx0aXBsZSBlbmNvZGVycyBh cmUKLQkgKiBzdXBwb3J0ZWQuCi0JICovCi0JcmV0dXJuIGNfY29ubi0+ZW5jb2RlcjsKLX0KLQot c3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX2hlbHBlcl9mdW5jcyBkcHVfY29ubmVj dG9yX2hlbHBlcl9vcHMgPSB7Ci0JLmdldF9tb2RlcyA9ICAgIGRwdV9jb25uZWN0b3JfZ2V0X21v ZGVzLAotCS5tb2RlX3ZhbGlkID0gICBkcHVfY29ubmVjdG9yX21vZGVfdmFsaWQsCi0JLmJlc3Rf ZW5jb2RlciA9IGRwdV9jb25uZWN0b3JfYmVzdF9lbmNvZGVyLAotfTsKLQotc3RydWN0IGRybV9j b25uZWN0b3IgKmRwdV9jb25uZWN0b3JfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAotCQlz dHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsCi0JCXN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsLAot CQl2b2lkICpkaXNwbGF5LAotCQljb25zdCBzdHJ1Y3QgZHB1X2Nvbm5lY3Rvcl9vcHMgKm9wcywK LQkJaW50IGNvbm5lY3Rvcl9wb2xsLAotCQlpbnQgY29ubmVjdG9yX3R5cGUpCi17Ci0Jc3RydWN0 IG1zbV9kcm1fcHJpdmF0ZSAqcHJpdjsKLQlzdHJ1Y3QgZHB1X2ttcyAqZHB1X2ttczsKLQlzdHJ1 Y3QgZHB1X2ttc19pbmZvICppbmZvOwotCXN0cnVjdCBkcHVfY29ubmVjdG9yICpjX2Nvbm4gPSBO VUxMOwotCXN0cnVjdCBtc21fZGlzcGxheV9pbmZvIGRpc3BsYXlfaW5mbzsKLQlpbnQgcmM7Ci0K LQlpZiAoIWRldiB8fCAhZGV2LT5kZXZfcHJpdmF0ZSB8fCAhZW5jb2RlcikgewotCQlEUFVfRVJS T1IoImludmFsaWQgYXJndW1lbnQocyksIGRldiAlcEssIGVuYyAlcEtcbiIsCi0JCQkJZGV2LCBl bmNvZGVyKTsKLQkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Ci0JfQotCi0JcHJpdiA9IGRldi0+ ZGV2X3ByaXZhdGU7Ci0JaWYgKCFwcml2LT5rbXMpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGtt cyByZWZlcmVuY2VcbiIpOwotCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKLQl9Ci0KLQljX2Nv bm4gPSBremFsbG9jKHNpemVvZigqY19jb25uKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFjX2Nvbm4p IHsKLQkJRFBVX0VSUk9SKCJmYWlsZWQgdG8gYWxsb2MgZHB1IGNvbm5lY3RvclxuIik7Ci0JCXJl dHVybiBFUlJfUFRSKC1FTk9NRU0pOwotCX0KLQotCW1lbXNldCgmZGlzcGxheV9pbmZvLCAwLCBz aXplb2YoZGlzcGxheV9pbmZvKSk7Ci0KLQlyYyA9IGRybV9jb25uZWN0b3JfaW5pdChkZXYsCi0J CQkmY19jb25uLT5iYXNlLAotCQkJJmRwdV9jb25uZWN0b3Jfb3BzLAotCQkJY29ubmVjdG9yX3R5 cGUpOwotCWlmIChyYykKLQkJZ290byBlcnJvcl9mcmVlX2Nvbm47Ci0KLQlzcGluX2xvY2tfaW5p dCgmY19jb25uLT5ldmVudF9sb2NrKTsKLQotCWNfY29ubi0+Y29ubmVjdG9yX3R5cGUgPSBjb25u ZWN0b3JfdHlwZTsKLQljX2Nvbm4tPmVuY29kZXIgPSBlbmNvZGVyOwotCWNfY29ubi0+cGFuZWwg PSBwYW5lbDsKLQljX2Nvbm4tPmRpc3BsYXkgPSBkaXNwbGF5OwotCi0JY19jb25uLT5kcG1zX21v ZGUgPSBEUk1fTU9ERV9EUE1TX09OOwotCWNfY29ubi0+bHBfbW9kZSA9IDA7Ci0JY19jb25uLT5s YXN0X3BhbmVsX3Bvd2VyX21vZGUgPSBEUFVfTU9ERV9EUE1TX09OOwotCi0JZHB1X2ttcyA9IHRv X2RwdV9rbXMocHJpdi0+a21zKTsKLQotCWlmIChvcHMpCi0JCWNfY29ubi0+b3BzID0gKm9wczsK LQotCWNfY29ubi0+YmFzZS5oZWxwZXJfcHJpdmF0ZSA9ICZkcHVfY29ubmVjdG9yX2hlbHBlcl9v cHM7Ci0JY19jb25uLT5iYXNlLnBvbGxlZCA9IGNvbm5lY3Rvcl9wb2xsOwotCWNfY29ubi0+YmFz ZS5pbnRlcmxhY2VfYWxsb3dlZCA9IDA7Ci0JY19jb25uLT5iYXNlLmRvdWJsZXNjYW5fYWxsb3dl ZCA9IDA7Ci0KLQlzbnByaW50ZihjX2Nvbm4tPm5hbWUsCi0JCQlEUFVfQ09OTkVDVE9SX05BTUVf U0laRSwKLQkJCSJjb25uJXUiLAotCQkJY19jb25uLT5iYXNlLmJhc2UuaWQpOwotCi0JbXV0ZXhf aW5pdCgmY19jb25uLT5sb2NrKTsKLQotCXJjID0gZHJtX21vZGVfY29ubmVjdG9yX2F0dGFjaF9l bmNvZGVyKCZjX2Nvbm4tPmJhc2UsIGVuY29kZXIpOwotCWlmIChyYykgewotCQlEUFVfRVJST1Io ImZhaWxlZCB0byBhdHRhY2ggZW5jb2RlciB0byBjb25uZWN0b3IsICVkXG4iLCByYyk7Ci0JCWdv dG8gZXJyb3JfY2xlYW51cF9jb25uOwotCX0KLQotI2lmZGVmIENPTkZJR19EUk1fTVNNX0RTSV9T VEFHSU5HCi0JcmMgPSBkcHVfYmFja2xpZ2h0X3NldHVwKGNfY29ubiwgZGV2KTsKLQlpZiAocmMp IHsKLQkJRFBVX0VSUk9SKCJmYWlsZWQgdG8gc2V0dXAgYmFja2xpZ2h0LCByYz0lZFxuIiwgcmMp OwotCQlnb3RvIGVycm9yX2NsZWFudXBfY29ubjsKLQl9Ci0jZW5kaWYKLQotCS8qIGNyZWF0ZSBw cm9wZXJ0aWVzICovCi0JbXNtX3Byb3BlcnR5X2luaXQoJmNfY29ubi0+cHJvcGVydHlfaW5mbywg JmNfY29ubi0+YmFzZS5iYXNlLCBkZXYsCi0JCQlwcml2LT5jb25uX3Byb3BlcnR5LCBjX2Nvbm4t PnByb3BlcnR5X2RhdGEsCi0JCQlDT05ORUNUT1JfUFJPUF9DT1VOVCwgQ09OTkVDVE9SX1BST1Bf QkxPQkNPVU5ULAotCQkJc2l6ZW9mKHN0cnVjdCBkcHVfY29ubmVjdG9yX3N0YXRlKSk7Ci0KLQlp ZiAoY19jb25uLT5vcHMucG9zdF9pbml0KSB7Ci0JCWluZm8gPSBrbWFsbG9jKHNpemVvZigqaW5m byksIEdGUF9LRVJORUwpOwotCQlpZiAoIWluZm8pIHsKLQkJCURQVV9FUlJPUigiZmFpbGVkIHRv IGFsbG9jYXRlIGluZm8gYnVmZmVyXG4iKTsKLQkJCXJjID0gLUVOT01FTTsKLQkJCWdvdG8gZXJy b3JfY2xlYW51cF9jb25uOwotCQl9Ci0KLQkJZHB1X2ttc19pbmZvX3Jlc2V0KGluZm8pOwotCQly YyA9IGNfY29ubi0+b3BzLnBvc3RfaW5pdCgmY19jb25uLT5iYXNlLCBpbmZvLCBkaXNwbGF5KTsK LQkJaWYgKHJjKSB7Ci0JCQlEUFVfRVJST1IoInBvc3QtaW5pdCBmYWlsZWQsICVkXG4iLCByYyk7 Ci0JCQlrZnJlZShpbmZvKTsKLQkJCWdvdG8gZXJyb3JfY2xlYW51cF9jb25uOwotCQl9Ci0KLQkJ bXNtX3Byb3BlcnR5X2luc3RhbGxfYmxvYigmY19jb25uLT5wcm9wZXJ0eV9pbmZvLAotCQkJCSJj YXBhYmlsaXRpZXMiLAotCQkJCURSTV9NT0RFX1BST1BfSU1NVVRBQkxFLAotCQkJCUNPTk5FQ1RP Ul9QUk9QX0RQVV9JTkZPKTsKLQotCQltc21fcHJvcGVydHlfc2V0X2Jsb2IoJmNfY29ubi0+cHJv cGVydHlfaW5mbywKLQkJCQkmY19jb25uLT5ibG9iX2NhcHMsCi0JCQkJRFBVX0tNU19JTkZPX0RB VEEoaW5mbyksCi0JCQkJRFBVX0tNU19JTkZPX0RBVEFMRU4oaW5mbyksCi0JCQkJQ09OTkVDVE9S X1BST1BfRFBVX0lORk8pOwotCQlrZnJlZShpbmZvKTsKLQl9Ci0KLSNpZmRlZiBDT05GSUdfRFJN X01TTV9EU0lfU1RBR0lORwotCWlmIChjb25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNU T1JfRFNJKSB7Ci0JCXN0cnVjdCBkc2lfZGlzcGxheSAqZHNpX2Rpc3BsYXk7Ci0KLQkJZHNpX2Rp c3BsYXkgPSAoc3RydWN0IGRzaV9kaXNwbGF5ICopKGRpc3BsYXkpOwotCQlpZiAoZHNpX2Rpc3Bs YXkgJiYgZHNpX2Rpc3BsYXktPnBhbmVsICYmCi0JCQlkc2lfZGlzcGxheS0+cGFuZWwtPmhkcl9w cm9wcy5oZHJfZW5hYmxlZCA9PSB0cnVlKSB7Ci0JCQltc21fcHJvcGVydHlfaW5zdGFsbF9ibG9i KCZjX2Nvbm4tPnByb3BlcnR5X2luZm8sCi0JCQkJImhkcl9wcm9wZXJ0aWVzIiwKLQkJCQlEUk1f TU9ERV9QUk9QX0lNTVVUQUJMRSwKLQkJCQlDT05ORUNUT1JfUFJPUF9IRFJfSU5GTyk7Ci0KLQkJ CW1zbV9wcm9wZXJ0eV9zZXRfYmxvYigmY19jb25uLT5wcm9wZXJ0eV9pbmZvLAotCQkJCSZjX2Nv bm4tPmJsb2JfaGRyLAotCQkJCSZkc2lfZGlzcGxheS0+cGFuZWwtPmhkcl9wcm9wcywKLQkJCQlz aXplb2YoZHNpX2Rpc3BsYXktPnBhbmVsLT5oZHJfcHJvcHMpLAotCQkJCUNPTk5FQ1RPUl9QUk9Q X0hEUl9JTkZPKTsKLQkJfQotCX0KLQotCS8qIGluc3RhbGwgUFBfRElUSEVSIHByb3BlcnRpZXMg Ki8KLQlfZHB1X2Nvbm5lY3Rvcl9pbnN0YWxsX2RpdGhlcl9wcm9wZXJ0eShkZXYsIGRwdV9rbXMs IGNfY29ubik7Ci0KLQltc21fcHJvcGVydHlfaW5zdGFsbF9yYW5nZSgmY19jb25uLT5wcm9wZXJ0 eV9pbmZvLCAiYmxfc2NhbGUiLAotCQkweDAsIDAsIE1BWF9CTF9TQ0FMRV9MRVZFTCwgTUFYX0JM X1NDQUxFX0xFVkVMLAotCQlDT05ORUNUT1JfUFJPUF9CTF9TQ0FMRSk7Ci0KLQltc21fcHJvcGVy dHlfaW5zdGFsbF9yYW5nZSgmY19jb25uLT5wcm9wZXJ0eV9pbmZvLCAiYWRfYmxfc2NhbGUiLAot CQkweDAsIDAsIE1BWF9BRF9CTF9TQ0FMRV9MRVZFTCwgTUFYX0FEX0JMX1NDQUxFX0xFVkVMLAot CQlDT05ORUNUT1JfUFJPUF9BRF9CTF9TQ0FMRSk7Ci0jZW5kaWYKLQotCS8qIGVudW0vYml0bWFz ayBwcm9wZXJ0aWVzICovCi0JbXNtX3Byb3BlcnR5X2luc3RhbGxfZW51bSgmY19jb25uLT5wcm9w ZXJ0eV9pbmZvLCAidG9wb2xvZ3lfbmFtZSIsCi0JCQlEUk1fTU9ERV9QUk9QX0lNTVVUQUJMRSwg MCwgZV90b3BvbG9neV9uYW1lLAotCQkJQVJSQVlfU0laRShlX3RvcG9sb2d5X25hbWUpLAotCQkJ Q09OTkVDVE9SX1BST1BfVE9QT0xPR1lfTkFNRSk7Ci0JbXNtX3Byb3BlcnR5X2luc3RhbGxfZW51 bSgmY19jb25uLT5wcm9wZXJ0eV9pbmZvLCAidG9wb2xvZ3lfY29udHJvbCIsCi0JCQkwLCAxLCBl X3RvcG9sb2d5X2NvbnRyb2wsCi0JCQlBUlJBWV9TSVpFKGVfdG9wb2xvZ3lfY29udHJvbCksCi0J CQlDT05ORUNUT1JfUFJPUF9UT1BPTE9HWV9DT05UUk9MKTsKLQltc21fcHJvcGVydHlfaW5zdGFs bF9lbnVtKCZjX2Nvbm4tPnByb3BlcnR5X2luZm8sICJMUCIsCi0JCQkwLCAwLCBlX3Bvd2VyX21v ZGUsCi0JCQlBUlJBWV9TSVpFKGVfcG93ZXJfbW9kZSksCi0JCQlDT05ORUNUT1JfUFJPUF9MUCk7 Ci0KLQlyYyA9IG1zbV9wcm9wZXJ0eV9pbnN0YWxsX2dldF9zdGF0dXMoJmNfY29ubi0+cHJvcGVy dHlfaW5mbyk7Ci0JaWYgKHJjKSB7Ci0JCURQVV9FUlJPUigiZmFpbGVkIHRvIGNyZWF0ZSBvbmUg b3IgbW9yZSBwcm9wZXJ0aWVzXG4iKTsKLQkJZ290byBlcnJvcl9kZXN0cm95X3Byb3BlcnR5Owot CX0KLQotCURQVV9ERUJVRygiY29ubmVjdG9yICVkIGF0dGFjaCBlbmNvZGVyICVkXG4iLAotCQkJ Y19jb25uLT5iYXNlLmJhc2UuaWQsIGVuY29kZXItPmJhc2UuaWQpOwotCi0JcHJpdi0+Y29ubmVj dG9yc1twcml2LT5udW1fY29ubmVjdG9ycysrXSA9ICZjX2Nvbm4tPmJhc2U7Ci0KLQlyZXR1cm4g JmNfY29ubi0+YmFzZTsKLQotZXJyb3JfZGVzdHJveV9wcm9wZXJ0eToKLQlpZiAoY19jb25uLT5i bG9iX2NhcHMpCi0JCWRybV9wcm9wZXJ0eV9ibG9iX3B1dChjX2Nvbm4tPmJsb2JfY2Fwcyk7Ci0J aWYgKGNfY29ubi0+YmxvYl9oZHIpCi0JCWRybV9wcm9wZXJ0eV9ibG9iX3B1dChjX2Nvbm4tPmJs b2JfaGRyKTsKLQlpZiAoY19jb25uLT5ibG9iX2RpdGhlcikKLQkJZHJtX3Byb3BlcnR5X2Jsb2Jf cHV0KGNfY29ubi0+YmxvYl9kaXRoZXIpOwotCi0JbXNtX3Byb3BlcnR5X2Rlc3Ryb3koJmNfY29u bi0+cHJvcGVydHlfaW5mbyk7Ci1lcnJvcl9jbGVhbnVwX2Nvbm46Ci0JbXV0ZXhfZGVzdHJveSgm Y19jb25uLT5sb2NrKTsKLQlkcm1fY29ubmVjdG9yX2NsZWFudXAoJmNfY29ubi0+YmFzZSk7Ci1l cnJvcl9mcmVlX2Nvbm46Ci0Ja2ZyZWUoY19jb25uKTsKLQotCXJldHVybiBFUlJfUFRSKHJjKTsK LX0KLQotaW50IGRwdV9jb25uZWN0b3JfcmVnaXN0ZXJfY3VzdG9tX2V2ZW50KHN0cnVjdCBkcHVf a21zICprbXMsCi0JCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uX2RybSwgdTMyIGV2ZW50LCBi b29sIHZhbCkKLXsKLQlpbnQgcmV0ID0gLUVJTlZBTDsKLQotCXN3aXRjaCAoZXZlbnQpIHsKLQlj YXNlIERSTV9FVkVOVF9TWVNfQkFDS0xJR0hUOgotCQlyZXQgPSAwOwotCQlicmVhazsKLQlkZWZh dWx0OgotCQlicmVhazsKLQl9Ci0JcmV0dXJuIHJldDsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jb25uZWN0b3IuaCBiL2RyaXZlcnMvZ3B1L2RybS9t c20vZGlzcC9kcHUxL2RwdV9jb25uZWN0b3IuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggZWQ1MTZmYi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9k cHVfY29ubmVjdG9yLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NTUgKzAsMCBAQAotLyogQ29weXJp Z2h0IChjKSAyMDE2LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2Vy dmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKLSAqIG9ubHkgdmVyc2lvbiAy IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRo aXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl ZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp ZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv ciBtb3JlIGRldGFpbHMuCi0gKi8KLQotI2lmbmRlZiBfRFBVX0NPTk5FQ1RPUl9IXwotI2RlZmlu ZSBfRFBVX0NPTk5FQ1RPUl9IXwotCi0jaW5jbHVkZSA8dWFwaS9kcm0vbXNtX2RybV9wcC5oPgot I2luY2x1ZGUgPGRybS9kcm1QLmg+Ci0jaW5jbHVkZSA8ZHJtL2RybV9hdG9taWMuaD4KLSNpbmNs dWRlIDxkcm0vZHJtX3BhbmVsLmg+Ci0KLSNpbmNsdWRlICJtc21fZHJ2LmgiCi0jaW5jbHVkZSAi bXNtX3Byb3AuaCIKLSNpbmNsdWRlICJkcHVfa21zLmgiCi0KLSNkZWZpbmUgRFBVX0NPTk5FQ1RP Ul9OQU1FX1NJWkUJMTYKLQotc3RydWN0IGRwdV9jb25uZWN0b3I7Ci1zdHJ1Y3QgZHB1X2Nvbm5l Y3Rvcl9zdGF0ZTsKLQotLyoqCi0gKiBzdHJ1Y3QgZHB1X2Nvbm5lY3Rvcl9vcHMgLSBjYWxsYmFj ayBmdW5jdGlvbnMgZm9yIGdlbmVyaWMgZHB1IGNvbm5lY3RvcgotICogSW5kaXZpZHVhbCBjYWxs YmFja3MgZG9jdW1lbnRlZCBiZWxvdy4KLSAqLwotc3RydWN0IGRwdV9jb25uZWN0b3Jfb3BzIHsK LQkvKioKLQkgKiBwb3N0X2luaXQgLSBwZXJmb3JtIGFkZGl0aW9uYWwgaW5pdGlhbGl6YXRpb24g c3RlcHMKLQkgKiBAY29ubmVjdG9yOiBQb2ludGVyIHRvIGRybSBjb25uZWN0b3Igc3RydWN0dXJl Ci0JICogQGluZm86IFBvaW50ZXIgdG8gZHB1IGNvbm5lY3RvciBpbmZvIHN0cnVjdHVyZQotCSAq IEBkaXNwbGF5OiBQb2ludGVyIHRvIHByaXZhdGUgZGlzcGxheSBoYW5kbGUKLQkgKiBSZXR1cm5z OiBaZXJvIG9uIHN1Y2Nlc3MKLQkgKi8KLQlpbnQgKCpwb3N0X2luaXQpKHN0cnVjdCBkcm1fY29u bmVjdG9yICpjb25uZWN0b3IsCi0JCQl2b2lkICppbmZvLAotCQkJdm9pZCAqZGlzcGxheSk7Ci0K LQkvKioKLQkgKiBkZXRlY3QgLSBkZXRlcm1pbmUgaWYgY29ubmVjdG9yIGlzIGNvbm5lY3RlZAot CSAqIEBjb25uZWN0b3I6IFBvaW50ZXIgdG8gZHJtIGNvbm5lY3RvciBzdHJ1Y3R1cmUKLQkgKiBA Zm9yY2U6IEZvcmNlIGRldGVjdCBzZXR0aW5nIGZyb20gZHJtIGZyYW1ld29yawotCSAqIEBkaXNw bGF5OiBQb2ludGVyIHRvIHByaXZhdGUgZGlzcGxheSBoYW5kbGUKLQkgKiBSZXR1cm5zOiBDb25u ZWN0b3IgJ2lzIGNvbm5lY3RlZCcgc3RhdHVzCi0JICovCi0JZW51bSBkcm1fY29ubmVjdG9yX3N0 YXR1cyAoKmRldGVjdCkoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKLQkJCWJvb2wg Zm9yY2UsCi0JCQl2b2lkICpkaXNwbGF5KTsKLQotCS8qKgotCSAqIGdldF9tb2RlcyAtIGFkZCBk cm0gbW9kZXMgdmlhIGRybV9tb2RlX3Byb2JlZF9hZGQoKQotCSAqIEBjb25uZWN0b3I6IFBvaW50 ZXIgdG8gZHJtIGNvbm5lY3RvciBzdHJ1Y3R1cmUKLQkgKiBAZGlzcGxheTogUG9pbnRlciB0byBw cml2YXRlIGRpc3BsYXkgaGFuZGxlCi0JICogUmV0dXJuczogTnVtYmVyIG9mIG1vZGVzIGFkZGVk Ci0JICovCi0JaW50ICgqZ2V0X21vZGVzKShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9y LAotCQkJdm9pZCAqZGlzcGxheSk7Ci0KLQkvKioKLQkgKiBwdXRfbW9kZXMgLSBmcmVlIHVwIGRy bSBtb2RlcyBvZiB0aGUgY29ubmVjdG9yCi0JICogQGNvbm5lY3RvcjogUG9pbnRlciB0byBkcm0g Y29ubmVjdG9yIHN0cnVjdHVyZQotCSAqIEBkaXNwbGF5OiBQb2ludGVyIHRvIHByaXZhdGUgZGlz cGxheSBoYW5kbGUKLQkgKi8KLQl2b2lkICgqcHV0X21vZGVzKShzdHJ1Y3QgZHJtX2Nvbm5lY3Rv ciAqY29ubmVjdG9yLAotCQkJdm9pZCAqZGlzcGxheSk7Ci0KLQkvKioKLQkgKiB1cGRhdGVfcHBz IC0gdXBkYXRlIHBwcyBjb21tYW5kIGZvciB0aGUgZGlzcGxheSBwYW5lbAotCSAqIEBwcHNfY21k OiBQb2ludGVyIHRvIHBwcyBjb21tYW5kCi0JICogQGRpc3BsYXk6IFBvaW50ZXIgdG8gcHJpdmF0 ZSBkaXNwbGF5IGhhbmRsZQotCSAqIFJldHVybnM6IFplcm8gb24gc3VjY2VzcwotCSAqLwotCWlu dCAoKnVwZGF0ZV9wcHMpKGNoYXIgKnBwc19jbWQsIHZvaWQgKmRpc3BsYXkpOwotCi0JLyoqCi0J ICogbW9kZV92YWxpZCAtIGRldGVybWluZSBpZiBzcGVjaWZpZWQgbW9kZSBpcyB2YWxpZAotCSAq IEBjb25uZWN0b3I6IFBvaW50ZXIgdG8gZHJtIGNvbm5lY3RvciBzdHJ1Y3R1cmUKLQkgKiBAbW9k ZTogUG9pbnRlciB0byBkcm0gbW9kZSBzdHJ1Y3R1cmUKLQkgKiBAZGlzcGxheTogUG9pbnRlciB0 byBwcml2YXRlIGRpc3BsYXkgaGFuZGxlCi0JICogUmV0dXJuczogVmFsaWRpdHkgc3RhdHVzIGZv ciBzcGVjaWZpZWQgbW9kZQotCSAqLwotCWVudW0gZHJtX21vZGVfc3RhdHVzICgqbW9kZV92YWxp ZCkoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKLQkJCXN0cnVjdCBkcm1fZGlzcGxh eV9tb2RlICptb2RlLAotCQkJdm9pZCAqZGlzcGxheSk7Ci0KLQkvKioKLQkgKiBzZXRfcHJvcGVy dHkgLSBzZXQgcHJvcGVydHkgdmFsdWUKLQkgKiBAY29ubmVjdG9yOiBQb2ludGVyIHRvIGRybSBj b25uZWN0b3Igc3RydWN0dXJlCi0JICogQHN0YXRlOiBQb2ludGVyIHRvIGRybSBjb25uZWN0b3Ig c3RhdGUgc3RydWN0dXJlCi0JICogQHByb3BlcnR5X2luZGV4OiBEUk0gcHJvcGVydHkgaW5kZXgK LQkgKiBAdmFsdWU6IEluY29taW5nIHByb3BlcnR5IHZhbHVlCi0JICogQGRpc3BsYXk6IFBvaW50 ZXIgdG8gcHJpdmF0ZSBkaXNwbGF5IHN0cnVjdHVyZQotCSAqIFJldHVybnM6IFplcm8gb24gc3Vj Y2VzcwotCSAqLwotCWludCAoKnNldF9wcm9wZXJ0eSkoc3RydWN0IGRybV9jb25uZWN0b3IgKmNv bm5lY3RvciwKLQkJCXN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpzdGF0ZSwKLQkJCWludCBw cm9wZXJ0eV9pbmRleCwKLQkJCXVpbnQ2NF90IHZhbHVlLAotCQkJdm9pZCAqZGlzcGxheSk7Ci0K LQkvKioKLQkgKiBnZXRfcHJvcGVydHkgLSBnZXQgcHJvcGVydHkgdmFsdWUKLQkgKiBAY29ubmVj dG9yOiBQb2ludGVyIHRvIGRybSBjb25uZWN0b3Igc3RydWN0dXJlCi0JICogQHN0YXRlOiBQb2lu dGVyIHRvIGRybSBjb25uZWN0b3Igc3RhdGUgc3RydWN0dXJlCi0JICogQHByb3BlcnR5X2luZGV4 OiBEUk0gcHJvcGVydHkgaW5kZXgKLQkgKiBAdmFsdWU6IFBvaW50ZXIgdG8gdmFyaWFibGUgZm9y IGFjY2VwdGluZyBwcm9wZXJ0eSB2YWx1ZQotCSAqIEBkaXNwbGF5OiBQb2ludGVyIHRvIHByaXZh dGUgZGlzcGxheSBzdHJ1Y3R1cmUKLQkgKiBSZXR1cm5zOiBaZXJvIG9uIHN1Y2Nlc3MKLQkgKi8K LQlpbnQgKCpnZXRfcHJvcGVydHkpKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCi0J CQlzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqc3RhdGUsCi0JCQlpbnQgcHJvcGVydHlfaW5k ZXgsCi0JCQl1aW50NjRfdCAqdmFsdWUsCi0JCQl2b2lkICpkaXNwbGF5KTsKLQotCS8qKgotCSAq IGdldF9pbmZvIC0gZ2V0IGRpc3BsYXkgaW5mb3JtYXRpb24KLQkgKiBAaW5mbzogUG9pbnRlciB0 byBtc20gZGlzcGxheSBpbmZvIHN0cnVjdHVyZQotCSAqIEBkaXNwbGF5OiBQb2ludGVyIHRvIHBy aXZhdGUgZGlzcGxheSBzdHJ1Y3R1cmUKLQkgKiBSZXR1cm5zOiBaZXJvIG9uIHN1Y2Nlc3MKLQkg Ki8KLQlpbnQgKCpnZXRfaW5mbykoc3RydWN0IG1zbV9kaXNwbGF5X2luZm8gKmluZm8sIHZvaWQg KmRpc3BsYXkpOwotCi0JLyoqCi0JICogZ2V0X21vZGVfaW5mbyAtIHJldHJpZXZlIG1vZGUgaW5m b3JtYXRpb24KLQkgKiBAZHJtX21vZGU6IERpc3BsYXkgbW9kZSBzZXQgZm9yIHRoZSBkaXNwbGF5 Ci0JICogQG1vZGVfaW5mbzogT3V0IHBhcmFtZXRlci4gaW5mb3JtYXRpb24gb2YgdGhlIGRpc3Bs YXkgbW9kZQotCSAqIEBtYXhfbWl4ZXJfd2lkdGg6IG1heCB3aWR0aCBzdXBwb3J0ZWQgYnkgSFcg bGF5ZXIgbWl4ZXIKLQkgKiBSZXR1cm5zOiBaZXJvIG9uIHN1Y2Nlc3MKLQkgKi8KLQlpbnQgKCpn ZXRfbW9kZV9pbmZvKShjb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqZHJtX21vZGUsCi0J CQlzdHJ1Y3QgbXNtX21vZGVfaW5mbyAqbW9kZV9pbmZvLAotCQkJdTMyIG1heF9taXhlcl93aWR0 aCk7Ci0KLQkvKioKLQkgKiBlbmFibGVfZXZlbnQgLSBub3RpZnkgZGlzcGxheSBvZiBldmVudCBy ZWdpc3RyYXRpb24vdW5yZWdpc3RyYXRpb24KLQkgKiBAY29ubmVjdG9yOiBQb2ludGVyIHRvIGRy bSBjb25uZWN0b3Igc3RydWN0dXJlCi0JICogQGV2ZW50X2lkeDogRFBVIGNvbm5lY3RvciBldmVu dCBpbmRleAotCSAqIEBlbmFibGU6IFdoZXRoZXIgdGhlIGV2ZW50IGlzIGJlaW5nIGVuYWJsZWQv ZGlzYWJsZWQKLQkgKiBAZGlzcGxheTogUG9pbnRlciB0byBwcml2YXRlIGRpc3BsYXkgc3RydWN0 dXJlCi0JICovCi0Jdm9pZCAoKmVuYWJsZV9ldmVudCkoc3RydWN0IGRybV9jb25uZWN0b3IgKmNv bm5lY3RvciwKLQkJCXVpbnQzMl90IGV2ZW50X2lkeCwgYm9vbCBlbmFibGUsIHZvaWQgKmRpc3Bs YXkpOwotCi0JaW50ICgqc2V0X2JhY2tsaWdodCkodm9pZCAqZGlzcGxheSwgdTMyIGJsX2x2bCk7 Ci0KLQkvKioKLQkgKiBzb2Z0X3Jlc2V0IC0gcGVyZm9ybSBhIHNvZnQgcmVzZXQgb24gdGhlIGNv bm5lY3RvcgotCSAqIEBkaXNwbGF5OiBQb2ludGVyIHRvIHByaXZhdGUgZGlzcGxheSBzdHJ1Y3R1 cmUKLQkgKiBSZXR1cm46IFplcm8gb24gc3VjY2VzcywgLUVSUk9SIG90aGVyd2lzZQotCSAqLwot CWludCAoKnNvZnRfcmVzZXQpKHZvaWQgKmRpc3BsYXkpOwotCi0JLyoqCi0JICogcHJlX2tpY2tv ZmYgLSB0cmlnZ2VyIGRpc3BsYXkgdG8gcHJvZ3JhbSBraWNrb2ZmLXRpbWUgZmVhdHVyZXMKLQkg KiBAY29ubmVjdG9yOiBQb2ludGVyIHRvIGRybSBjb25uZWN0b3Igc3RydWN0dXJlCi0JICogQGRp c3BsYXk6IFBvaW50ZXIgdG8gcHJpdmF0ZSBkaXNwbGF5IHN0cnVjdHVyZQotCSAqIFJldHVybnM6 IFplcm8gb24gc3VjY2VzcwotCSAqLwotCWludCAoKnByZV9raWNrb2ZmKShzdHJ1Y3QgZHJtX2Nv bm5lY3RvciAqY29ubmVjdG9yLAotCQkJdm9pZCAqZGlzcGxheSk7Ci0KLQkvKioKLQkgKiBjbGtf Y3RybCAtIHBlcmZvcm0gY2xrIGVuYWJsZS9kaXNhYmxlIG9uIHRoZSBjb25uZWN0b3IKLQkgKiBA aGFuZGxlOiBQb2ludGVyIHRvIGNsayBoYW5kbGUKLQkgKiBAdHlwZTogVHlwZSBvZiBjbGtzCi0J ICogQGVuYWJsZTogU3RhdGUgb2YgY2xrcwotCSAqLwotCWludCAoKmNsa19jdHJsKSh2b2lkICpo YW5kbGUsIHUzMiB0eXBlLCB1MzIgc3RhdGUpOwotCi0JLyoqCi0JICogc2V0X3Bvd2VyIC0gdXBk YXRlIGRwbXMgc2V0dGluZwotCSAqIEBjb25uZWN0b3I6IFBvaW50ZXIgdG8gZHJtIGNvbm5lY3Rv ciBzdHJ1Y3R1cmUKLQkgKiBAcG93ZXJfbW9kZTogT25lIG9mIHRoZSBmb2xsb3dpbmcsCi0JICog ICAgICAgICAgICAgIERQVV9NT0RFX0RQTVNfT04KLQkgKiAgICAgICAgICAgICAgRFBVX01PREVf RFBNU19MUDEKLQkgKiAgICAgICAgICAgICAgRFBVX01PREVfRFBNU19MUDIKLQkgKiAgICAgICAg ICAgICAgRFBVX01PREVfRFBNU19PRkYKLQkgKiBAZGlzcGxheTogUG9pbnRlciB0byBwcml2YXRl IGRpc3BsYXkgc3RydWN0dXJlCi0JICogUmV0dXJuczogWmVybyBvbiBzdWNjZXNzCi0JICovCi0J aW50ICgqc2V0X3Bvd2VyKShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAotCQkJaW50 IHBvd2VyX21vZGUsIHZvaWQgKmRpc3BsYXkpOwotCi0JLyoqCi0JICogZ2V0X2RzdF9mb3JtYXQg LSBnZXQgZHN0X2Zvcm1hdCBmcm9tIGRpc3BsYXkKLQkgKiBAZGlzcGxheTogUG9pbnRlciB0byBw cml2YXRlIGRpc3BsYXkgaGFuZGxlCi0JICogUmV0dXJuczogZHN0X2Zvcm1hdCBvZiBkaXNwbGF5 Ci0JICovCi0JZW51bSBkc2lfcGl4ZWxfZm9ybWF0ICgqZ2V0X2RzdF9mb3JtYXQpKHZvaWQgKmRp c3BsYXkpOwotCi0JLyoqCi0JICogcG9zdF9raWNrb2ZmIC0gZGlzcGxheSB0byBwcm9ncmFtIHBv c3Qga2lja29mZi10aW1lIGZlYXR1cmVzCi0JICogQGNvbm5lY3RvcjogUG9pbnRlciB0byBkcm0g Y29ubmVjdG9yIHN0cnVjdHVyZQotCSAqIFJldHVybnM6IFplcm8gb24gc3VjY2VzcwotCSAqLwot CWludCAoKnBvc3Rfa2lja29mZikoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvcik7Ci0K LQkvKioKLQkgKiBzZW5kX2hwZF9ldmVudCAtIHNlbmQgSFBEIHVldmVudCBub3RpZmljYXRpb24g dG8gdXNlcnNwYWNlCi0JICogQGRpc3BsYXk6IFBvaW50ZXIgdG8gcHJpdmF0ZSBkaXNwbGF5IHN0 cnVjdHVyZQotCSAqLwotCXZvaWQgKCpzZW5kX2hwZF9ldmVudCkodm9pZCAqZGlzcGxheSk7Ci19 OwotCi0vKioKLSAqIGVudW0gZHB1X2Nvbm5lY3Rvcl9ldmVudHMgLSBsaXN0IG9mIHJlY29nbml6 ZWQgY29ubmVjdG9yIGV2ZW50cwotICovCi1lbnVtIGRwdV9jb25uZWN0b3JfZXZlbnRzIHsKLQlE UFVfQ09OTl9FVkVOVF9WSURfRE9ORSwgLyogdmlkZW8gbW9kZSBmcmFtZSBkb25lICovCi0JRFBV X0NPTk5fRVZFTlRfQ01EX0RPTkUsIC8qIGNvbW1hbmQgbW9kZSBmcmFtZSBkb25lICovCi0JRFBV X0NPTk5fRVZFTlRfQ09VTlQsCi19OwotCi0vKioKLSAqIHN0cnVjdCBkcHVfY29ubmVjdG9yX2V2 dCAtIGxvY2FsIGV2ZW50IHJlZ2lzdHJhdGlvbiBlbnRyeSBzdHJ1Y3R1cmUKLSAqIEBjYl9mdW5j OiBQb2ludGVyIHRvIGRlc2lyZWQgY2FsbGJhY2sgZnVuY3Rpb24KLSAqIEB1c3I6IFVzZXIgcG9p bnRlciB0byBwYXNzIHRvIGNhbGxiYWNrIG9uIGV2ZW50IHRyaWdnZXIKLSAqLwotc3RydWN0IGRw dV9jb25uZWN0b3JfZXZ0IHsKLQl2b2lkICgqY2JfZnVuYykodWludDMyX3QgZXZlbnRfaWR4LAot CQkJdWludDMyX3QgaW5zdGFuY2VfaWR4LCB2b2lkICp1c3IsCi0JCQl1aW50MzJfdCBkYXRhMCwg dWludDMyX3QgZGF0YTEsCi0JCQl1aW50MzJfdCBkYXRhMiwgdWludDMyX3QgZGF0YTMpOwotCXZv aWQgKnVzcjsKLX07Ci0KLS8qKgotICogc3RydWN0IGRwdV9jb25uZWN0b3IgLSBsb2NhbCBkcHUg Y29ubmVjdG9yIHN0cnVjdHVyZQotICogQGJhc2U6IEJhc2UgZHJtIGNvbm5lY3RvciBzdHJ1Y3R1 cmUKLSAqIEBjb25uZWN0b3JfdHlwZTogU2V0IHRvIG9uZSBvZiBEUk1fTU9ERV9DT05ORUNUT1Jf IHR5cGVzCi0gKiBAZW5jb2RlcjogUG9pbnRlciB0byBwcmVmZXJyZWQgZHJtIGVuY29kZXIKLSAq IEBwYW5lbDogUG9pbnRlciB0byBkcm0gcGFuZWwsIGlmIHByZXNlbnQKLSAqIEBkaXNwbGF5OiBQ b2ludGVyIHRvIHByaXZhdGUgZGlzcGxheSBkYXRhIHN0cnVjdHVyZQotICogQG1tdV9zZWN1cmU6 IE1NVSBpZCBmb3Igc2VjdXJlIGJ1ZmZlcnMKLSAqIEBtbXVfdW5zZWN1cmU6IE1NVSBpZCBmb3Ig dW5zZWN1cmUgYnVmZmVycwotICogQG5hbWU6IEFTQ0lJIG5hbWUgb2YgY29ubmVjdG9yCi0gKiBA bG9jazogTXV0ZXggbG9jayBvYmplY3QgZm9yIHRoaXMgc3RydWN0dXJlCi0gKiBAb3BzOiBMb2Nh bCBjYWxsYmFjayBmdW5jdGlvbiBwb2ludGVyIHRhYmxlCi0gKiBAZHBtc19tb2RlOiBEUE1TIHBy b3BlcnR5IHNldHRpbmcgZnJvbSB1c2VyIHNwYWNlCi0gKiBAbHBfbW9kZTogTFAgcHJvcGVydHkg c2V0dGluZyBmcm9tIHVzZXIgc3BhY2UKLSAqIEBsYXN0X3BhbmVsX3Bvd2VyX21vZGU6IExhc3Qg Y29uc29saWRhdGVkIGRwbXMvbHAgbW9kZSBzZXR0aW5nCi0gKiBAcHJvcGVydHlfaW5mbzogUHJp dmF0ZSBzdHJ1Y3R1cmUgZm9yIGdlbmVyaWMgcHJvcGVydHkgaGFuZGxpbmcKLSAqIEBwcm9wZXJ0 eV9kYXRhOiBBcnJheSBvZiBwcml2YXRlIGRhdGEgZm9yIGdlbmVyaWMgcHJvcGVydHkgaGFuZGxp bmcKLSAqIEBibG9iX2NhcHM6IFBvaW50ZXIgdG8gYmxvYiBzdHJ1Y3R1cmUgZm9yICdjYXBhYmls aXRpZXMnIHByb3BlcnR5Ci0gKiBAYmxvYl9oZHI6IFBvaW50ZXIgdG8gYmxvYiBzdHJ1Y3R1cmUg Zm9yICdoZHJfcHJvcGVydGllcycgcHJvcGVydHkKLSAqIEBibG9iX2RpdGhlcjogUG9pbnRlciB0 byBibG9iIHN0cnVjdHVyZSBmb3IgZGVmYXVsdCBkaXRoZXIgY29uZmlnCi0gKiBAZmJfa21hcDog dHJ1ZSBpZiBrZXJuZWwgbWFwcGluZyBvZiBmcmFtZWJ1ZmZlciBpcyByZXF1ZXN0ZWQKLSAqIEBl dmVudF90YWJsZTogQXJyYXkgb2YgcmVnaXN0ZXJlZCBldmVudHMKLSAqIEBldmVudF9sb2NrOiBM b2NrIG9iamVjdCBmb3IgZXZlbnRfdGFibGUKLSAqIEBibF9kZXZpY2U6IGJhY2tsaWdodCBkZXZp Y2Ugbm9kZQotICovCi1zdHJ1Y3QgZHB1X2Nvbm5lY3RvciB7Ci0Jc3RydWN0IGRybV9jb25uZWN0 b3IgYmFzZTsKLQotCWludCBjb25uZWN0b3JfdHlwZTsKLQotCXN0cnVjdCBkcm1fZW5jb2RlciAq ZW5jb2RlcjsKLQlzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbDsKLQl2b2lkICpkaXNwbGF5OwotCi0J c3RydWN0IG1zbV9nZW1fYWRkcmVzc19zcGFjZSAqYXNwYWNlW0RQVV9JT01NVV9ET01BSU5fTUFY XTsKLQotCWNoYXIgbmFtZVtEUFVfQ09OTkVDVE9SX05BTUVfU0laRV07Ci0KLQlzdHJ1Y3QgbXV0 ZXggbG9jazsKLQlzdHJ1Y3QgZHB1X2Nvbm5lY3Rvcl9vcHMgb3BzOwotCWludCBkcG1zX21vZGU7 Ci0JaW50IGxwX21vZGU7Ci0JaW50IGxhc3RfcGFuZWxfcG93ZXJfbW9kZTsKLQotCXN0cnVjdCBt c21fcHJvcGVydHlfaW5mbyBwcm9wZXJ0eV9pbmZvOwotCXN0cnVjdCBtc21fcHJvcGVydHlfZGF0 YSBwcm9wZXJ0eV9kYXRhW0NPTk5FQ1RPUl9QUk9QX0NPVU5UXTsKLQlzdHJ1Y3QgZHJtX3Byb3Bl cnR5X2Jsb2IgKmJsb2JfY2FwczsKLQlzdHJ1Y3QgZHJtX3Byb3BlcnR5X2Jsb2IgKmJsb2JfaGRy OwotCXN0cnVjdCBkcm1fcHJvcGVydHlfYmxvYiAqYmxvYl9kaXRoZXI7Ci0KLQlib29sIGZiX2tt YXA7Ci0Jc3RydWN0IGRwdV9jb25uZWN0b3JfZXZ0IGV2ZW50X3RhYmxlW0RQVV9DT05OX0VWRU5U X0NPVU5UXTsKLQlzcGlubG9ja190IGV2ZW50X2xvY2s7Ci0KLQlzdHJ1Y3QgYmFja2xpZ2h0X2Rl dmljZSAqYmxfZGV2aWNlOwotfTsKLQotLyoqCi0gKiB0b19kcHVfY29ubmVjdG9yIC0gY29udmVy dCBkcm1fY29ubmVjdG9yIHBvaW50ZXIgdG8gZHB1IGNvbm5lY3RvciBwb2ludGVyCi0gKiBAWDog UG9pbnRlciB0byBkcm1fY29ubmVjdG9yIHN0cnVjdHVyZQotICogUmV0dXJuczogUG9pbnRlciB0 byBkcHVfY29ubmVjdG9yIHN0cnVjdHVyZQotICovCi0jZGVmaW5lIHRvX2RwdV9jb25uZWN0b3Io eCkgICAgIGNvbnRhaW5lcl9vZigoeCksIHN0cnVjdCBkcHVfY29ubmVjdG9yLCBiYXNlKQotCi0v KioKLSAqIGRwdV9jb25uZWN0b3JfZ2V0X2Rpc3BsYXkgLSBnZXQgZHB1IGNvbm5lY3RvcidzIHBy aXZhdGUgZGlzcGxheSBwb2ludGVyCi0gKiBAQzogUG9pbnRlciB0byBkcm0gY29ubmVjdG9yIHN0 cnVjdHVyZQotICogUmV0dXJuczogUG9pbnRlciB0byBhc3NvY2lhdGVkIHByaXZhdGUgZGlzcGxh eSBzdHJ1Y3R1cmUKLSAqLwotI2RlZmluZSBkcHVfY29ubmVjdG9yX2dldF9kaXNwbGF5KEMpIFwK LQkoKEMpID8gdG9fZHB1X2Nvbm5lY3RvcigoQykpLT5kaXNwbGF5IDogMCkKLQotLyoqCi0gKiBk cHVfY29ubmVjdG9yX2dldF9wYW5lbCAtIGdldCBkcHUgY29ubmVjdG9yJ3MgcHJpdmF0ZSBwYW5l bCBwb2ludGVyCi0gKiBAQzogUG9pbnRlciB0byBkcm0gY29ubmVjdG9yIHN0cnVjdHVyZQotICog UmV0dXJuczogUG9pbnRlciB0byBhc3NvY2lhdGVkIHByaXZhdGUgZGlzcGxheSBzdHJ1Y3R1cmUK LSAqLwotI2RlZmluZSBkcHVfY29ubmVjdG9yX2dldF9wYW5lbChDKSBcCi0JKChDKSA/IHRvX2Rw dV9jb25uZWN0b3IoKEMpKS0+cGFuZWwgOiBOVUxMKQotCi0vKioKLSAqIGRwdV9jb25uZWN0b3Jf Z2V0X2VuY29kZXIgLSBnZXQgZHB1IGNvbm5lY3RvcidzIHByaXZhdGUgZW5jb2RlciBwb2ludGVy Ci0gKiBAQzogUG9pbnRlciB0byBkcm0gY29ubmVjdG9yIHN0cnVjdHVyZQotICogUmV0dXJuczog UG9pbnRlciB0byBhc3NvY2lhdGVkIHByaXZhdGUgZW5jb2RlciBzdHJ1Y3R1cmUKLSAqLwotI2Rl ZmluZSBkcHVfY29ubmVjdG9yX2dldF9lbmNvZGVyKEMpIFwKLQkoKEMpID8gdG9fZHB1X2Nvbm5l Y3RvcigoQykpLT5lbmNvZGVyIDogMCkKLQotLyoqCi0gKiBkcHVfY29ubmVjdG9yX2dldF9wcm9w aW5mbyAtIGdldCBkcHUgY29ubmVjdG9yJ3MgcHJvcGVydHkgaW5mbyBwb2ludGVyCi0gKiBAQzog UG9pbnRlciB0byBkcm0gY29ubmVjdG9yIHN0cnVjdHVyZQotICogUmV0dXJuczogUG9pbnRlciB0 byBhc3NvY2lhdGVkIHByaXZhdGUgcHJvcGVydHkgaW5mbyBzdHJ1Y3R1cmUKLSAqLwotI2RlZmlu ZSBkcHVfY29ubmVjdG9yX2dldF9wcm9waW5mbyhDKSBcCi0JKChDKSA/ICZ0b19kcHVfY29ubmVj dG9yKChDKSktPnByb3BlcnR5X2luZm8gOiAwKQotCi0vKioKLSAqIHN0cnVjdCBkcHVfY29ubmVj dG9yX3N0YXRlIC0gcHJpdmF0ZSBjb25uZWN0b3Igc3RhdHVzIHN0cnVjdHVyZQotICogQGJhc2U6 IEJhc2UgZHJtIGNvbm5lY3RvciBzdHJ1Y3R1cmUKLSAqIEBvdXRfZmI6IFBvaW50ZXIgdG8gb3V0 cHV0IGZyYW1lIGJ1ZmZlciwgaWYgYXBwbGljYWJsZQotICogQHByb3BlcnR5X3N0YXRlOiBMb2Nh bCBzdG9yYWdlIGZvciBtc21fcHJvcCBwcm9wZXJ0aWVzCi0gKiBAcHJvcGVydHlfdmFsdWVzOiBM b2NhbCBjYWNoZSBvZiBjdXJyZW50IGNvbm5lY3RvciBwcm9wZXJ0eSB2YWx1ZXMKLSAqIEBwcm9w ZXJ0eV9ibG9iczogYmxvYiBwcm9wZXJ0aWVzCi0gKi8KLXN0cnVjdCBkcHVfY29ubmVjdG9yX3N0 YXRlIHsKLQlzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSBiYXNlOwotCXN0cnVjdCBkcm1fZnJh bWVidWZmZXIgKm91dF9mYjsKLQlzdHJ1Y3QgbXNtX3Byb3BlcnR5X3N0YXRlIHByb3BlcnR5X3N0 YXRlOwotCXN0cnVjdCBtc21fcHJvcGVydHlfdmFsdWUgcHJvcGVydHlfdmFsdWVzW0NPTk5FQ1RP Ul9QUk9QX0NPVU5UXTsKLQotCXN0cnVjdCBkcm1fcHJvcGVydHlfYmxvYiAqcHJvcGVydHlfYmxv YnNbQ09OTkVDVE9SX1BST1BfQkxPQkNPVU5UXTsKLX07Ci0KLS8qKgotICogdG9fZHB1X2Nvbm5l Y3Rvcl9zdGF0ZSAtIGNvbnZlcnQgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSBwb2ludGVyIHRvCi0gKiAg ICAgICAgICAgICAgICAgICAgICAgICAgZHB1IGNvbm5lY3RvciBzdGF0ZSBwb2ludGVyCi0gKiBA WDogUG9pbnRlciB0byBkcm1fY29ubmVjdG9yX3N0YXRlIHN0cnVjdHVyZQotICogUmV0dXJuczog UG9pbnRlciB0byBkcHVfY29ubmVjdG9yX3N0YXRlIHN0cnVjdHVyZQotICovCi0jZGVmaW5lIHRv X2RwdV9jb25uZWN0b3Jfc3RhdGUoeCkgXAotCWNvbnRhaW5lcl9vZigoeCksIHN0cnVjdCBkcHVf Y29ubmVjdG9yX3N0YXRlLCBiYXNlKQotCi0vKioKLSAqIGRwdV9jb25uZWN0b3JfZ2V0X3Byb3Bl cnR5IC0gcXVlcnkgaW50ZWdlciB2YWx1ZSBvZiBjb25uZWN0b3IgcHJvcGVydHkKLSAqIEBTOiBQ b2ludGVyIHRvIGRybSBjb25uZWN0b3Igc3RhdGUKLSAqIEBYOiBQcm9wZXJ0eSBpbmRleCwgZnJv bSBlbnVtIG1zbV9tZHBfY29ubmVjdG9yX3Byb3BlcnR5Ci0gKiBSZXR1cm5zOiBJbnRlZ2VyIHZh bHVlIG9mIHJlcXVlc3RlZCBwcm9wZXJ0eQotICovCi0jZGVmaW5lIGRwdV9jb25uZWN0b3JfZ2V0 X3Byb3BlcnR5KFMsIFgpIFwKLQkoKFMpICYmICgoWCkgPCBDT05ORUNUT1JfUFJPUF9DT1VOVCkg PyBcCi0JICh0b19kcHVfY29ubmVjdG9yX3N0YXRlKChTKSktPnByb3BlcnR5X3ZhbHVlc1soWCld LnZhbHVlKSA6IDApCi0KLS8qKgotICogZHB1X2Nvbm5lY3Rvcl9nZXRfcHJvcGVydHlfc3RhdGUg LSByZXRyaWV2ZSBwcm9wZXJ0eSBzdGF0ZSBjYWNoZQotICogQFM6IFBvaW50ZXIgdG8gZHJtIGNv bm5lY3RvciBzdGF0ZQotICogUmV0dXJuczogUG9pbnRlciB0byBsb2NhbCBwcm9wZXJ0eSBzdGF0 ZSBzdHJ1Y3R1cmUKLSAqLwotI2RlZmluZSBkcHVfY29ubmVjdG9yX2dldF9wcm9wZXJ0eV9zdGF0 ZShTKSBcCi0JKChTKSA/ICgmdG9fZHB1X2Nvbm5lY3Rvcl9zdGF0ZSgoUykpLT5wcm9wZXJ0eV9z dGF0ZSkgOiBOVUxMKQotCi0vKioKLSAqIGRwdV9jb25uZWN0b3JfZ2V0X291dF9mYiAtIHF1ZXJ5 IG91dF9mYiB2YWx1ZSBmcm9tIGRwdSBjb25uZWN0b3Igc3RhdGUKLSAqIEBTOiBQb2ludGVyIHRv IGRybSBjb25uZWN0b3Igc3RhdGUKLSAqIFJldHVybnM6IE91dHB1dCBmYiBhc3NvY2lhdGVkIHdp dGggc3BlY2lmaWVkIGNvbm5lY3RvciBzdGF0ZQotICovCi0jZGVmaW5lIGRwdV9jb25uZWN0b3Jf Z2V0X291dF9mYihTKSBcCi0JKChTKSA/IHRvX2RwdV9jb25uZWN0b3Jfc3RhdGUoKFMpKS0+b3V0 X2ZiIDogMCkKLQotLyoqCi0gKiBkcHVfY29ubmVjdG9yX2dldF90b3BvbG9neV9uYW1lIC0gaGVs cGVyIGFjY2Vzc29yIHRvIHJldHJpZXZlIHRvcG9sb2d5X25hbWUKLSAqIEBjb25uZWN0b3I6IHBv aW50ZXIgdG8gZHJtIGNvbm5lY3RvcgotICogUmV0dXJuczogdmFsdWUgb2YgdGhlIENPTk5FQ1RP Ul9QUk9QX1RPUE9MT0dZX05BTUUgcHJvcGVydHkgb3IgMAotICovCi1zdGF0aWMgaW5saW5lIHVp bnQ2NF90IGRwdV9jb25uZWN0b3JfZ2V0X3RvcG9sb2d5X25hbWUoCi0JCXN0cnVjdCBkcm1fY29u bmVjdG9yICpjb25uZWN0b3IpCi17Ci0JaWYgKCFjb25uZWN0b3IgfHwgIWNvbm5lY3Rvci0+c3Rh dGUpCi0JCXJldHVybiAwOwotCXJldHVybiBkcHVfY29ubmVjdG9yX2dldF9wcm9wZXJ0eShjb25u ZWN0b3ItPnN0YXRlLAotCQkJQ09OTkVDVE9SX1BST1BfVE9QT0xPR1lfTkFNRSk7Ci19Ci0KLS8q KgotICogZHB1X2Nvbm5lY3Rvcl9nZXRfbHAgLSBoZWxwZXIgYWNjZXNzb3IgdG8gcmV0cmlldmUg TFAgc3RhdGUKLSAqIEBjb25uZWN0b3I6IHBvaW50ZXIgdG8gZHJtIGNvbm5lY3RvcgotICogUmV0 dXJuczogdmFsdWUgb2YgdGhlIENPTk5FQ1RPUl9QUk9QX0xQIHByb3BlcnR5IG9yIDAKLSAqLwot c3RhdGljIGlubGluZSB1aW50NjRfdCBkcHVfY29ubmVjdG9yX2dldF9scCgKLQkJc3RydWN0IGRy bV9jb25uZWN0b3IgKmNvbm5lY3RvcikKLXsKLQlpZiAoIWNvbm5lY3RvciB8fCAhY29ubmVjdG9y LT5zdGF0ZSkKLQkJcmV0dXJuIDA7Ci0JcmV0dXJuIGRwdV9jb25uZWN0b3JfZ2V0X3Byb3BlcnR5 KGNvbm5lY3Rvci0+c3RhdGUsCi0JCQlDT05ORUNUT1JfUFJPUF9MUCk7Ci19Ci0KLS8qKgotICog ZHB1X2Nvbm5lY3Rvcl9zZXRfcHJvcGVydHlfZm9yX2NvbW1pdCAtIGFkZCBwcm9wZXJ0eSBzZXQg dG8gYXRvbWljIHN0YXRlCi0gKglBZGQgYSBjb25uZWN0b3Igc3RhdGUgcHJvcGVydHkgdXBkYXRl IGZvciB0aGUgc3BlY2lmaWVkIHByb3BlcnR5IGluZGV4Ci0gKgl0byB0aGUgYXRvbWljIHN0YXRl IGluIHByZXBhcmF0aW9uIGZvciBhIGRybV9hdG9taWNfY29tbWl0LgotICogQGNvbm5lY3Rvcjog UG9pbnRlciB0byBkcm0gY29ubmVjdG9yCi0gKiBAYXRvbWljX3N0YXRlOiBQb2ludGVyIHRvIERS TSBhdG9taWMgc3RhdGUgc3RydWN0dXJlIGZvciBjb21taXQKLSAqIEBwcm9wZXJ0eV9pZHg6IENv bm5lY3RvciBwcm9wZXJ0eSBpbmRleAotICogQHZhbHVlOiBVcGRhdGVkIHByb3BlcnR5IHZhbHVl Ci0gKiBSZXR1cm5zOiBaZXJvIG9uIHN1Y2Nlc3MKLSAqLwotaW50IGRwdV9jb25uZWN0b3Jfc2V0 X3Byb3BlcnR5X2Zvcl9jb21taXQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKLQkJ c3RydWN0IGRybV9hdG9taWNfc3RhdGUgKmF0b21pY19zdGF0ZSwKLQkJdWludDMyX3QgcHJvcGVy dHlfaWR4LCB1aW50NjRfdCB2YWx1ZSk7Ci0KLS8qKgotICogZHB1X2Nvbm5lY3Rvcl9pbml0IC0g Y3JlYXRlIGRybSBjb25uZWN0b3Igb2JqZWN0IGZvciBhIGdpdmVuIGRpc3BsYXkKLSAqIEBkZXY6 IFBvaW50ZXIgdG8gZHJtIGRldmljZSBzdHJ1Y3QKLSAqIEBlbmNvZGVyOiBQb2ludGVyIHRvIGFz c29jaWF0ZWQgZW5jb2RlcgotICogQHBhbmVsOiBQb2ludGVyIHRvIGFzc29jaWF0ZWQgcGFuZWws IGNhbiBiZSBOVUxMCi0gKiBAZGlzcGxheTogUG9pbnRlciB0byBhc3NvY2lhdGVkIGRpc3BsYXkg b2JqZWN0Ci0gKiBAb3BzOiBQb2ludGVyIHRvIGNhbGxiYWNrIG9wZXJhdGlvbnMgZnVuY3Rpb24g dGFibGUKLSAqIEBjb25uZWN0b3JfcG9sbDogU2V0IHRvIGFwcHJvcHJpYXRlIERSTV9DT05ORUNU T1JfUE9MTF8gc2V0dGluZwotICogQGNvbm5lY3Rvcl90eXBlOiBTZXQgdG8gYXBwcm9wcmlhdGUg RFJNX01PREVfQ09OTkVDVE9SXyB0eXBlCi0gKiBSZXR1cm5zOiBQb2ludGVyIHRvIG5ld2x5IGNy ZWF0ZWQgZHJtIGNvbm5lY3RvciBzdHJ1Y3QKLSAqLwotc3RydWN0IGRybV9jb25uZWN0b3IgKmRw dV9jb25uZWN0b3JfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAotCQlzdHJ1Y3QgZHJtX2Vu Y29kZXIgKmVuY29kZXIsCi0JCXN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsLAotCQl2b2lkICpkaXNw bGF5LAotCQljb25zdCBzdHJ1Y3QgZHB1X2Nvbm5lY3Rvcl9vcHMgKm9wcywKLQkJaW50IGNvbm5l Y3Rvcl9wb2xsLAotCQlpbnQgY29ubmVjdG9yX3R5cGUpOwotCi0vKioKLSAqIGRwdV9jb25uZWN0 b3JfZ2V0X2luZm8gLSBxdWVyeSBkaXNwbGF5IHNwZWNpZmljIGluZm9ybWF0aW9uCi0gKiBAY29u bmVjdG9yOiBQb2ludGVyIHRvIGRybSBjb25uZWN0b3Igb2JqZWN0Ci0gKiBAaW5mbzogUG9pbnRl ciB0byBtc20gZGlzcGxheSBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUKLSAqIFJldHVybnM6IFplcm8g b24gc3VjY2VzcwotICovCi1pbnQgZHB1X2Nvbm5lY3Rvcl9nZXRfaW5mbyhzdHJ1Y3QgZHJtX2Nv bm5lY3RvciAqY29ubmVjdG9yLAotCQlzdHJ1Y3QgbXNtX2Rpc3BsYXlfaW5mbyAqaW5mbyk7Ci0K LS8qKgotICogZHB1X2Nvbm5lY3Rvcl9jbGtfY3RybCAtIGVuYWJsZXMvZGlzYWJsZXMgdGhlIGNv bm5lY3RvciBjbGtzCi0gKiBAY29ubmVjdG9yOiBQb2ludGVyIHRvIGRybSBjb25uZWN0b3Igb2Jq ZWN0Ci0gKiBAZW5hYmxlOiB0cnVlL2ZhbHNlIHRvIGVuYWJsZS9kaXNhYmxlCi0gKi8KLXZvaWQg ZHB1X2Nvbm5lY3Rvcl9jbGtfY3RybChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBi b29sIGVuYWJsZSk7Ci0KLS8qKgotICogZHB1X2Nvbm5lY3Rvcl9nZXRfZHBtcyAtIHF1ZXJ5IGRw bXMgc2V0dGluZwotICogQGNvbm5lY3RvcjogUG9pbnRlciB0byBkcm0gY29ubmVjdG9yIHN0cnVj dHVyZQotICogUmV0dXJuczogQ3VycmVudCBEUE1TIHNldHRpbmcgZm9yIGNvbm5lY3RvcgotICov Ci1pbnQgZHB1X2Nvbm5lY3Rvcl9nZXRfZHBtcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVj dG9yKTsKLQotLyoqCi0gKiBkcHVfY29ubmVjdG9yX3RyaWdnZXJfZXZlbnQgLSBpbmRpY2F0ZSB0 aGF0IGFuIGV2ZW50IGhhcyBvY2N1cnJlZAotICoJQW55IGNhbGxiYWNrcyB0aGF0IGhhdmUgYmVl biByZWdpc3RlcmVkIGFnYWluc3QgdGhpcyBldmVudCB3aWxsCi0gKgliZSBjYWxsZWQgZnJvbSB0 aGUgc2FtZSB0aHJlYWQgY29udGV4dC4KLSAqIEBjb25uZWN0b3I6IFBvaW50ZXIgdG8gZHJtIGNv bm5lY3RvciBzdHJ1Y3R1cmUKLSAqIEBldmVudF9pZHg6IEluZGV4IG9mIGV2ZW50IHRvIHRyaWdn ZXIKLSAqIEBpbnN0YW5jZV9pZHg6IEV2ZW50LXNwZWNpZmljICJpbnN0YW5jZSBpbmRleCIgdG8g cGFzcyB0byBjYWxsYmFjawotICogQGRhdGEwOiBFdmVudC1zcGVjaWZpYyAiZGF0YSIgdG8gcGFz cyB0byBjYWxsYmFjawotICogQGRhdGExOiBFdmVudC1zcGVjaWZpYyAiZGF0YSIgdG8gcGFzcyB0 byBjYWxsYmFjawotICogQGRhdGEyOiBFdmVudC1zcGVjaWZpYyAiZGF0YSIgdG8gcGFzcyB0byBj YWxsYmFjawotICogQGRhdGEzOiBFdmVudC1zcGVjaWZpYyAiZGF0YSIgdG8gcGFzcyB0byBjYWxs YmFjawotICogUmV0dXJuczogWmVybyBvbiBzdWNjZXNzCi0gKi8KLWludCBkcHVfY29ubmVjdG9y X3RyaWdnZXJfZXZlbnQodm9pZCAqZHJtX2Nvbm5lY3RvciwKLQkJdWludDMyX3QgZXZlbnRfaWR4 LCB1aW50MzJfdCBpbnN0YW5jZV9pZHgsCi0JCXVpbnQzMl90IGRhdGEwLCB1aW50MzJfdCBkYXRh MSwKLQkJdWludDMyX3QgZGF0YTIsIHVpbnQzMl90IGRhdGEzKTsKLQotLyoqCi0gKiBkcHVfY29u bmVjdG9yX3JlZ2lzdGVyX2V2ZW50IC0gcmVnaXN0ZXIgYSBjYWxsYmFjayBmdW5jdGlvbiBmb3Ig YW4gZXZlbnQKLSAqIEBjb25uZWN0b3I6IFBvaW50ZXIgdG8gZHJtIGNvbm5lY3RvciBzdHJ1Y3R1 cmUKLSAqIEBldmVudF9pZHg6IEluZGV4IG9mIGV2ZW50IHRvIHJlZ2lzdGVyCi0gKiBAY2JfZnVu YzogUG9pbnRlciB0byBkZXNpcmVkIGNhbGxiYWNrIGZ1bmN0aW9uCi0gKiBAdXNyOiBVc2VyIHBv aW50ZXIgdG8gcGFzcyB0byBjYWxsYmFjayBvbiBldmVudCB0cmlnZ2VyCi0gKiBSZXR1cm5zOiBa ZXJvIG9uIHN1Y2Nlc3MKLSAqLwotaW50IGRwdV9jb25uZWN0b3JfcmVnaXN0ZXJfZXZlbnQoc3Ry dWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKLQkJdWludDMyX3QgZXZlbnRfaWR4LAotCQl2 b2lkICgqY2JfZnVuYykodWludDMyX3QgZXZlbnRfaWR4LAotCQkJdWludDMyX3QgaW5zdGFuY2Vf aWR4LCB2b2lkICp1c3IsCi0JCQl1aW50MzJfdCBkYXRhMCwgdWludDMyX3QgZGF0YTEsCi0JCQl1 aW50MzJfdCBkYXRhMiwgdWludDMyX3QgZGF0YTMpLAotCQl2b2lkICp1c3IpOwotCi0vKioKLSAq IGRwdV9jb25uZWN0b3JfdW5yZWdpc3Rlcl9ldmVudCAtIHVucmVnaXN0ZXIgYWxsIGNhbGxiYWNr cyBmb3IgYW4gZXZlbnQKLSAqIEBjb25uZWN0b3I6IFBvaW50ZXIgdG8gZHJtIGNvbm5lY3RvciBz dHJ1Y3R1cmUKLSAqIEBldmVudF9pZHg6IEluZGV4IG9mIGV2ZW50IHRvIHJlZ2lzdGVyCi0gKi8K LXZvaWQgZHB1X2Nvbm5lY3Rvcl91bnJlZ2lzdGVyX2V2ZW50KHN0cnVjdCBkcm1fY29ubmVjdG9y ICpjb25uZWN0b3IsCi0JCXVpbnQzMl90IGV2ZW50X2lkeCk7Ci0KLS8qKgotICogZHB1X2Nvbm5l Y3Rvcl9yZWdpc3Rlcl9jdXN0b21fZXZlbnQgLSByZWdpc3RlciBmb3IgYXN5bmMgZXZlbnRzCi0g KiBAa21zOiBQb2ludGVyIHRvIGRwdV9rbXMKLSAqIEBjb25uX2RybTogUG9pbnRlciB0byBkcm0g Y29ubmVjdG9yIG9iamVjdAotICogQGV2ZW50OiBFdmVudCBmb3Igd2hpY2ggcmVxdWVzdCBpcyBi ZWluZyBzZW50Ci0gKiBAZW46IEZsYWcgdG8gZW5hYmxlL2Rpc2FibGUgdGhlIGV2ZW50Ci0gKiBS ZXR1cm5zOiBaZXJvIG9uIHN1Y2Nlc3MKLSAqLwotaW50IGRwdV9jb25uZWN0b3JfcmVnaXN0ZXJf Y3VzdG9tX2V2ZW50KHN0cnVjdCBkcHVfa21zICprbXMsCi0JCXN0cnVjdCBkcm1fY29ubmVjdG9y ICpjb25uX2RybSwgdTMyIGV2ZW50LCBib29sIGVuKTsKLQotLyoqCi0gKiBkcHVfY29ubmVjdG9y X3ByZV9raWNrb2ZmIC0gdHJpZ2dlciBraWNrb2ZmIHRpbWUgZmVhdHVyZSBwcm9ncmFtbWluZwot ICogQGNvbm5lY3RvcjogUG9pbnRlciB0byBkcm0gY29ubmVjdG9yIG9iamVjdAotICogUmV0dXJu czogWmVybyBvbiBzdWNjZXNzCi0gKi8KLWludCBkcHVfY29ubmVjdG9yX3ByZV9raWNrb2ZmKHN0 cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpOwotCi0vKioKLSAqIGRwdV9jb25uZWN0b3Jf bmVlZHNfb2Zmc2V0IC0gYWRqdXN0IHRoZSBvdXRwdXQgZmVuY2Ugb2Zmc2V0IGJhc2VkIG9uCi0g KiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXkgdHlwZQotICogQGNvbm5lY3Rv cjogUG9pbnRlciB0byBkcm0gY29ubmVjdG9yIG9iamVjdAotICogUmV0dXJuczogdHJ1ZSBpZiBv ZmZzZXQgaXMgcmVxdWlyZWQsIGZhbHNlIGZvciBhbGwgb3RoZXIgY2FzZXMuCi0gKi8KLXN0YXRp YyBpbmxpbmUgYm9vbCBkcHVfY29ubmVjdG9yX25lZWRzX29mZnNldChzdHJ1Y3QgZHJtX2Nvbm5l Y3RvciAqY29ubmVjdG9yKQotewotCXN0cnVjdCBkcHVfY29ubmVjdG9yICpjX2Nvbm47Ci0KLQlp ZiAoIWNvbm5lY3RvcikKLQkJcmV0dXJuIGZhbHNlOwotCi0JY19jb25uID0gdG9fZHB1X2Nvbm5l Y3Rvcihjb25uZWN0b3IpOwotCXJldHVybiAoY19jb25uLT5jb25uZWN0b3JfdHlwZSAhPSBEUk1f TU9ERV9DT05ORUNUT1JfVklSVFVBTCk7Ci19Ci0KLS8qKgotICogZHB1X2Nvbm5lY3Rvcl9nZXRf ZGl0aGVyX2NmZyAtIGdldCBkaXRoZXIgcHJvcGVydHkgZGF0YQotICogQGNvbm46IFBvaW50ZXIg dG8gZHJtX2Nvbm5lY3RvciBzdHJ1Y3QKLSAqIEBzdGF0ZTogUG9pbnRlciB0byBkcm1fY29ubmVj dG9yX3N0YXRlIHN0cnVjdAotICogQGNmZzogUG9pbnRlciB0byBwb2ludGVyIHRvIGRpdGhlciBj ZmcKLSAqIEBsZW46IGxlbmd0aCBvZiB0aGUgZGl0aGVyIGRhdGEKLSAqIFJldHVybnM6IFplcm8g b24gc3VjY2VzcwotICovCi1pbnQgZHB1X2Nvbm5lY3Rvcl9nZXRfZGl0aGVyX2NmZyhzdHJ1Y3Qg ZHJtX2Nvbm5lY3RvciAqY29ubiwKLQkJc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKnN0YXRl LCB2b2lkICoqY2ZnLCBzaXplX3QgKmxlbik7Ci0KLSNlbmRpZiAvKiBfRFBVX0NPTk5FQ1RPUl9I XyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NydGMu YyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmMKaW5kZXggYzBlODAz NS4uNDg5MjBiMDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2Rw dV9jcnRjLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NydGMuYwpA QCAtMzMsNyArMzMsNiBAQAogI2luY2x1ZGUgImRwdV9wbGFuZS5oIgogI2luY2x1ZGUgImRwdV9j b2xvcl9wcm9jZXNzaW5nLmgiCiAjaW5jbHVkZSAiZHB1X2VuY29kZXIuaCIKLSNpbmNsdWRlICJk cHVfY29ubmVjdG9yLmgiCiAjaW5jbHVkZSAiZHB1X3ZiaWYuaCIKICNpbmNsdWRlICJkcHVfcG93 ZXJfaGFuZGxlLmgiCiAjaW5jbHVkZSAiZHB1X2NvcmVfcGVyZi5oIgpAQCAtMzM0Nyw3ICszMzQ2 LDYgQEAgc3RhdGljIGludCBkcHVfY3J0Y19hdG9taWNfZ2V0X3Byb3BlcnR5KHN0cnVjdCBkcm1f Y3J0YyAqY3J0YywKIAlzdHJ1Y3QgZHB1X2NydGNfc3RhdGUgKmNzdGF0ZTsKIAlzdHJ1Y3QgZHJt X2VuY29kZXIgKmVuY29kZXI7CiAJaW50IGksIHJldCA9IC1FSU5WQUw7Ci0JYm9vbCBjb25uX29m ZnNldCA9IDA7CiAJYm9vbCBpc19jbWQgPSB0cnVlOwogCiAJaWYgKCFjcnRjIHx8ICFzdGF0ZSkg ewpAQCAtMzM1NiwxMyArMzM1NCw2IEBAIHN0YXRpYyBpbnQgZHB1X2NydGNfYXRvbWljX2dldF9w cm9wZXJ0eShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCiAJCWRwdV9jcnRjID0gdG9fZHB1X2NydGMo Y3J0Yyk7CiAJCWNzdGF0ZSA9IHRvX2RwdV9jcnRjX3N0YXRlKHN0YXRlKTsKIAotCQlmb3IgKGkg PSAwOyBpIDwgY3N0YXRlLT5udW1fY29ubmVjdG9yczsgKytpKSB7Ci0JCQljb25uX29mZnNldCA9 IGRwdV9jb25uZWN0b3JfbmVlZHNfb2Zmc2V0KAotCQkJCQkJY3N0YXRlLT5jb25uZWN0b3JzW2ld KTsKLQkJCWlmIChjb25uX29mZnNldCkKLQkJCQlicmVhazsKLQkJfQotCiAJCS8qKgogCQkgKiBz ZXQgdGhlIGNtZCBmbGFnIG9ubHkgd2hlbiBhbGwgdGhlIGVuY29kZXJzIGF0dGFjaGVkCiAJCSAq IHRvIHRoZSBjcnRjIGFyZSBpbiBjbWQgbW9kZS4gQ29uc2lkZXIgYWxsIG90aGVyIGNhc2VzCmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlci5jIGIv ZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXIuYwppbmRleCAzODU0NDEw Li40Mzg2MzYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVf ZW5jb2Rlci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVy LmMKQEAgLTcwLDYgKzcwLDggQEAKIAogI2RlZmluZSBJRExFX1NIT1JUX1RJTUVPVVQJMQogCisj ZGVmaW5lIE1BWF9WRElTUExBWV9TUExJVCAxMDgwCisKIC8qKgogICogZW51bSBkcHVfZW5jX3Jj X2V2ZW50cyAtIGV2ZW50cyBmb3IgcmVzb3VyY2UgY29udHJvbCBzdGF0ZSBtYWNoaW5lCiAgKiBA RFBVX0VOQ19SQ19FVkVOVF9LSUNLT0ZGOgpAQCAtMTcyLDcgKzE3NCw2IEBAIGVudW0gZHB1X2Vu Y19yY19zdGF0ZXMgewogICogQGZyYW1lX2RvbmVfdGltZXI6CQl3YXRjaGRvZyB0aW1lciBmb3Ig ZnJhbWUgZG9uZSBldmVudAogICogQHZzeW5jX2V2ZW50X3RpbWVyOgkJdnN5bmMgdGltZXIKICAq IEBkaXNwX2luZm86CQkJbG9jYWwgY29weSBvZiBtc21fZGlzcGxheV9pbmZvIHN0cnVjdAotICog QG1vZGVfaW5mbzoJCQlsb2NhbCBjb3B5IG9mIG1zbV9tb2RlX2luZm8gc3RydWN0CiAgKiBAbWlz cl9lbmFibGU6CQltaXNyIGVuYWJsZS9kaXNhYmxlIHN0YXR1cwogICogQG1pc3JfZnJhbWVfY291 bnQ6CQltaXNyIGZyYW1lIGNvdW50IGJlZm9yZSBzdGFydCBjYXB0dXJpbmcgdGhlIGRhdGEKICAq IEBpZGxlX3BjX3N1cHBvcnRlZDoJCWluZGljYXRlIGlmIGlkbGUgcG93ZXIgY29sbGFwcyBpcyBz dXBwb3J0ZWQKQEAgLTIxNCw3ICsyMTUsNiBAQCBzdHJ1Y3QgZHB1X2VuY29kZXJfdmlydCB7CiAJ c3RydWN0IHRpbWVyX2xpc3QgdnN5bmNfZXZlbnRfdGltZXI7CiAKIAlzdHJ1Y3QgbXNtX2Rpc3Bs YXlfaW5mbyBkaXNwX2luZm87Ci0Jc3RydWN0IG1zbV9tb2RlX2luZm8gbW9kZV9pbmZvOwogCWJv b2wgbWlzcl9lbmFibGU7CiAJdTMyIG1pc3JfZnJhbWVfY291bnQ7CiAKQEAgLTQ5Nyw4ICs0OTcs NiBAQCB2b2lkIGRwdV9lbmNvZGVyX2dldF9od19yZXNvdXJjZXMoc3RydWN0IGRybV9lbmNvZGVy ICpkcm1fZW5jLAogCQlpZiAocGh5cyAmJiBwaHlzLT5vcHMuZ2V0X2h3X3Jlc291cmNlcykKIAkJ CXBoeXMtPm9wcy5nZXRfaHdfcmVzb3VyY2VzKHBoeXMsIGh3X3JlcywgY29ubl9zdGF0ZSk7CiAJ fQotCi0JaHdfcmVzLT50b3BvbG9neSA9IGRwdV9lbmMtPm1vZGVfaW5mby50b3BvbG9neTsKIH0K IAogdm9pZCBkcHVfZW5jb2Rlcl9kZXN0cm95KHN0cnVjdCBkcm1fZW5jb2RlciAqZHJtX2VuYykK QEAgLTYwNSw2ICs2MDMsMjUgQEAgc3RhdGljIHZvaWQgX2RwdV9lbmNvZGVyX2FkanVzdF9tb2Rl KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCiAJfQogfQogCitzdGF0aWMgc3RydWN0 IG1zbV9kaXNwbGF5X3RvcG9sb2d5IGRwdV9lbmNvZGVyX2dldF90b3BvbG9neSgKKwkJCXN0cnVj dCBkcHVfZW5jb2Rlcl92aXJ0ICpkcHVfZW5jLAorCQkJc3RydWN0IGRwdV9rbXMgKmRwdV9rbXMs CisJCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKK3sKKwlzdHJ1Y3QgbXNtX2Rpc3Bs YXlfdG9wb2xvZ3kgdG9wb2xvZ3k7CisJaW50IGksIGludGZfY291bnQgPSAwOworCisJZm9yIChp ID0gMDsgaSA8IE1BWF9QSFlTX0VOQ09ERVJTX1BFUl9WSVJUVUFMOyBpKyspCisJCWlmIChkcHVf ZW5jLT5waHlzX2VuY3NbaV0pCisJCQlpbnRmX2NvdW50Kys7CisKKwkvKiBVc2VyIHNwbGl0IHRv cG9sb2d5IGZvciB3aWR0aCA+IDEwODAgKi8KKwl0b3BvbG9neS5udW1fbG0gPSAobW9kZS0+dmRp c3BsYXkgPiBNQVhfVkRJU1BMQVlfU1BMSVQpID8gMiA6IDE7CisJdG9wb2xvZ3kubnVtX2VuYyA9 IDA7CisJdG9wb2xvZ3kubnVtX2ludGYgPSBpbnRmX2NvdW50OworCisJcmV0dXJuIHRvcG9sb2d5 OworfQogc3RhdGljIGludCBkcHVfZW5jb2Rlcl92aXJ0X2F0b21pY19jaGVjaygKIAkJc3RydWN0 IGRybV9lbmNvZGVyICpkcm1fZW5jLAogCQlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNfc3Rh dGUsCkBAIC02MTUsNiArNjMyLDcgQEAgc3RhdGljIGludCBkcHVfZW5jb2Rlcl92aXJ0X2F0b21p Y19jaGVjaygKIAlzdHJ1Y3QgZHB1X2ttcyAqZHB1X2ttczsKIAljb25zdCBzdHJ1Y3QgZHJtX2Rp c3BsYXlfbW9kZSAqbW9kZTsKIAlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqX21vZGU7CisJ c3RydWN0IG1zbV9kaXNwbGF5X3RvcG9sb2d5IHRvcG9sb2d5OwogCWludCBpID0gMDsKIAlpbnQg cmV0ID0gMDsKIApAQCAtNjYwLDYgKzY3OCw4IEBAIHN0YXRpYyBpbnQgZHB1X2VuY29kZXJfdmly dF9hdG9taWNfY2hlY2soCiAJCX0KIAl9CiAKKwl0b3BvbG9neSA9IGRwdV9lbmNvZGVyX2dldF90 b3BvbG9neShkcHVfZW5jLCBkcHVfa21zLCBhZGpfbW9kZSk7CisKIAkvKiBSZXNlcnZlIGR5bmFt aWMgcmVzb3VyY2VzIG5vdy4gSW5kaWNhdGluZyBBdG9taWNUZXN0IHBoYXNlICovCiAJaWYgKCFy ZXQpIHsKIAkJLyoKQEAgLTY2OSw3ICs2ODksNyBAQCBzdGF0aWMgaW50IGRwdV9lbmNvZGVyX3Zp cnRfYXRvbWljX2NoZWNrKAogCQlpZiAoZHJtX2F0b21pY19jcnRjX25lZWRzX21vZGVzZXQoY3J0 Y19zdGF0ZSkKIAkJCQkmJiBkcHVfZW5jLT5tb2RlX3NldF9jb21wbGV0ZSkgewogCQkJcmV0ID0g ZHB1X3JtX3Jlc2VydmUoJmRwdV9rbXMtPnJtLCBkcm1fZW5jLCBjcnRjX3N0YXRlLAotCQkJCWNv bm5fc3RhdGUsIHRydWUpOworCQkJCWNvbm5fc3RhdGUsIHRvcG9sb2d5LCB0cnVlKTsKIAkJCWRw dV9lbmMtPm1vZGVfc2V0X2NvbXBsZXRlID0gZmFsc2U7CiAJCX0KIAl9CkBAIC02OTAsNyArNzEw LDYgQEAgc3RhdGljIHZvaWQgX2RwdV9lbmNvZGVyX3VwZGF0ZV92c3luY19zb3VyY2Uoc3RydWN0 IGRwdV9lbmNvZGVyX3ZpcnQgKmRwdV9lbmMsCiAJc3RydWN0IGRwdV9rbXMgKmRwdV9rbXM7CiAJ c3RydWN0IGRwdV9od19tZHAgKmh3X21kcHRvcDsKIAlzdHJ1Y3QgZHJtX2VuY29kZXIgKmRybV9l bmM7Ci0Jc3RydWN0IG1zbV9tb2RlX2luZm8gKm1vZGVfaW5mbzsKIAlpbnQgaTsKIAogCWlmICgh ZHB1X2VuYyB8fCAhZGlzcF9pbmZvKSB7CkBAIC03MjAsMTkgKzczOSwxMiBAQCBzdGF0aWMgdm9p ZCBfZHB1X2VuY29kZXJfdXBkYXRlX3ZzeW5jX3NvdXJjZShzdHJ1Y3QgZHB1X2VuY29kZXJfdmly dCAqZHB1X2VuYywKIAkJcmV0dXJuOwogCX0KIAotCW1vZGVfaW5mbyA9ICZkcHVfZW5jLT5tb2Rl X2luZm87Ci0JaWYgKCFtb2RlX2luZm8pIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIG1vZGUgaW5m b1xuIik7Ci0JCXJldHVybjsKLQl9Ci0KIAlpZiAoaHdfbWRwdG9wLT5vcHMuc2V0dXBfdnN5bmNf c291cmNlICYmCiAJCQlkaXNwX2luZm8tPmNhcGFiaWxpdGllcyAmIE1TTV9ESVNQTEFZX0NBUF9D TURfTU9ERSkgewogCQlmb3IgKGkgPSAwOyBpIDwgZHB1X2VuYy0+bnVtX3BoeXNfZW5jczsgaSsr KQogCQkJdnN5bmNfY2ZnLnBwbnVtYmVyW2ldID0gZHB1X2VuYy0+aHdfcHBbaV0tPmlkeDsKIAog CQl2c3luY19jZmcucHBfY291bnQgPSBkcHVfZW5jLT5udW1fcGh5c19lbmNzOwotCQl2c3luY19j ZmcuZnJhbWVfcmF0ZSA9IG1vZGVfaW5mby0+ZnJhbWVfcmF0ZTsKIAkJaWYgKGRpc3BfaW5mby0+ aXNfdGVfdXNpbmdfd2F0Y2hkb2dfdGltZXIpCiAJCQl2c3luY19jZmcudnN5bmNfc291cmNlID0g RFBVX1ZTWU5DX1NPVVJDRV9XRF9USU1FUl8wOwogCQllbHNlCkBAIC03ODksOSArODAxLDYgQEAg c3RhdGljIHZvaWQgX2RwdV9lbmNvZGVyX3Jlc291cmNlX2NvbnRyb2xfaGVscGVyKHN0cnVjdCBk cm1fZW5jb2RlciAqZHJtX2VuYywKIAkJZHB1X3Bvd2VyX3Jlc291cmNlX2VuYWJsZSgmcHJpdi0+ cGhhbmRsZSwKIAkJCQlkcHVfa21zLT5jb3JlX2NsaWVudCwgdHJ1ZSk7CiAKLQkJLyogZW5hYmxl IERTSSBjbGtzICovCi0JCWRwdV9jb25uZWN0b3JfY2xrX2N0cmwoZHB1X2VuYy0+Y3VyX21hc3Rl ci0+Y29ubmVjdG9yLCB0cnVlKTsKLQogCQkvKiBlbmFibGUgYWxsIHRoZSBpcnEgKi8KIAkJX2Rw dV9lbmNvZGVyX2lycV9jb250cm9sKGRybV9lbmMsIHRydWUpOwogCkBAIC03OTksOSArODA4LDYg QEAgc3RhdGljIHZvaWQgX2RwdV9lbmNvZGVyX3Jlc291cmNlX2NvbnRyb2xfaGVscGVyKHN0cnVj dCBkcm1fZW5jb2RlciAqZHJtX2VuYywKIAkJLyogZGlzYWJsZSBhbGwgdGhlIGlycSAqLwogCQlf ZHB1X2VuY29kZXJfaXJxX2NvbnRyb2woZHJtX2VuYywgZmFsc2UpOwogCi0JCS8qIGRpc2FibGUg RFNJIGNsa3MgKi8KLQkJZHB1X2Nvbm5lY3Rvcl9jbGtfY3RybChkcHVfZW5jLT5jdXJfbWFzdGVy LT5jb25uZWN0b3IsIGZhbHNlKTsKLQogCQkvKiBkaXNhYmxlIERQVSBjb3JlIGNsa3MgKi8KIAkJ ZHB1X3Bvd2VyX3Jlc291cmNlX2VuYWJsZSgmcHJpdi0+cGhhbmRsZSwKIAkJCQlkcHVfa21zLT5j b3JlX2NsaWVudCwgZmFsc2UpOwpAQCAtODEzLDcgKzgxOSw2IEBAIHN0YXRpYyB2b2lkIF9kcHVf ZW5jb2Rlcl9yZXNvdXJjZV9jb250cm9sX2hlbHBlcihzdHJ1Y3QgZHJtX2VuY29kZXIgKmRybV9l bmMsCiBzdGF0aWMgaW50IGRwdV9lbmNvZGVyX3Jlc291cmNlX2NvbnRyb2woc3RydWN0IGRybV9l bmNvZGVyICpkcm1fZW5jLAogCQl1MzIgc3dfZXZlbnQpCiB7Ci0JdW5zaWduZWQgaW50IGxwLCBp ZGxlX3RpbWVvdXQ7CiAJc3RydWN0IGRwdV9lbmNvZGVyX3ZpcnQgKmRwdV9lbmM7CiAJc3RydWN0 IG1zbV9kcm1fcHJpdmF0ZSAqcHJpdjsKIAlzdHJ1Y3QgbXNtX2RybV90aHJlYWQgKmRpc3BfdGhy ZWFkOwpAQCAtOTE5LDI1ICs5MjQsMTMgQEAgc3RhdGljIGludCBkcHVfZW5jb2Rlcl9yZXNvdXJj ZV9jb250cm9sKHN0cnVjdCBkcm1fZW5jb2RlciAqZHJtX2VuYywKIAkJCXJldHVybiAwOwogCQl9 CiAKLQkJLyogc2V0IGlkbGUgdGltZW91dCBiYXNlZCBvbiBtYXN0ZXIgY29ubmVjdG9yJ3MgbHAg dmFsdWUgKi8KLQkJaWYgKGRwdV9lbmMtPmN1cl9tYXN0ZXIpCi0JCQlscCA9IGRwdV9jb25uZWN0 b3JfZ2V0X2xwKAotCQkJCQlkcHVfZW5jLT5jdXJfbWFzdGVyLT5jb25uZWN0b3IpOwotCQllbHNl Ci0JCQlscCA9IERQVV9NT0RFX0RQTVNfT047Ci0KLQkJaWYgKGxwID09IERQVV9NT0RFX0RQTVNf TFAyKQotCQkJaWRsZV90aW1lb3V0ID0gSURMRV9TSE9SVF9USU1FT1VUOwotCQllbHNlCi0JCQlp ZGxlX3RpbWVvdXQgPSBkcHVfZW5jLT5pZGxlX3RpbWVvdXQ7Ci0KIAkJa3RocmVhZF9xdWV1ZV9k ZWxheWVkX3dvcmsoCiAJCQkmZGlzcF90aHJlYWQtPndvcmtlciwKIAkJCSZkcHVfZW5jLT5kZWxh eWVkX29mZl93b3JrLAotCQkJbXNlY3NfdG9famlmZmllcyhpZGxlX3RpbWVvdXQpKTsKKwkJCW1z ZWNzX3RvX2ppZmZpZXMoZHB1X2VuYy0+aWRsZV90aW1lb3V0KSk7CiAKIAkJRFBVX0VWVDMyKERS TUlEKGRybV9lbmMpLCBzd19ldmVudCwgZHB1X2VuYy0+cmNfc3RhdGUsCi0JCQkJaWRsZV90aW1l b3V0LCBEUFVfRVZUTE9HX0ZVTkNfQ0FTRTIpOworCQkJCWRwdV9lbmMtPmlkbGVfdGltZW91dCwg RFBVX0VWVExPR19GVU5DX0NBU0UyKTsKIAkJRFBVX0RFQlVHX0VOQyhkcHVfZW5jLCAic3dfZXZl bnQ6JWQsIHdvcmsgc2NoZWR1bGVkXG4iLAogCQkJCXN3X2V2ZW50KTsKIAkJYnJlYWs7CkBAIC0x MTMyLDggKzExMjUsOSBAQCBzdGF0aWMgdm9pZCBkcHVfZW5jb2Rlcl92aXJ0X21vZGVfc2V0KHN0 cnVjdCBkcm1fZW5jb2RlciAqZHJtX2VuYywKIAlzdHJ1Y3QgZHB1X2ttcyAqZHB1X2ttczsKIAlz dHJ1Y3QgbGlzdF9oZWFkICpjb25uZWN0b3JfbGlzdDsKIAlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAq Y29ubiA9IE5VTEwsICpjb25uX2l0ZXI7Ci0Jc3RydWN0IGRwdV9jb25uZWN0b3IgKmRwdV9jb25u ID0gTlVMTDsKIAlzdHJ1Y3QgZHB1X3JtX2h3X2l0ZXIgcHBfaXRlcjsKKwlzdHJ1Y3QgbXNtX2Rp c3BsYXlfdG9wb2xvZ3kgdG9wb2xvZ3k7CisJZW51bSBkcHVfcm1fdG9wb2xvZ3lfbmFtZSB0b3Bv bG9neV9uYW1lOwogCWludCBpID0gMCwgcmV0OwogCiAJaWYgKCFkcm1fZW5jKSB7CkBAIC0xMTYy LDMzICsxMTU2LDExIEBAIHN0YXRpYyB2b2lkIGRwdV9lbmNvZGVyX3ZpcnRfbW9kZV9zZXQoc3Ry dWN0IGRybV9lbmNvZGVyICpkcm1fZW5jLAogCQlyZXR1cm47CiAJfQogCi0JZHB1X2Nvbm4gPSB0 b19kcHVfY29ubmVjdG9yKGNvbm4pOwotCWlmIChkcHVfY29ubikgewotCQlyZXQgPSBkcHVfY29u bi0+b3BzLmdldF9tb2RlX2luZm8oYWRqX21vZGUsICZkcHVfZW5jLT5tb2RlX2luZm8sCi0JCQkJ ZHB1X2ttcy0+Y2F0YWxvZy0+Y2Fwcy0+bWF4X21peGVyX3dpZHRoKTsKLQkJaWYgKHJldCkgewot CQkJRFBVX0VSUk9SX0VOQyhkcHVfZW5jLAotCQkJCSJpbnZhbGlkIHRvcG9sb2d5IGZvciB0aGUg bW9kZVxuIik7Ci0JCQlyZXR1cm47Ci0JCX0KLQl9Ci0KLQkvKiByZWxlYXNlIHJlc291cmNlcyBi ZWZvcmUgc2VhbWxlc3MgbW9kZSBjaGFuZ2UgKi8KLQlpZiAobXNtX2lzX21vZGVfc2VhbWxlc3Nf ZG1zKGFkal9tb2RlKSkgewotCQkvKiByZXN0b3JlIHJlc291cmNlIHN0YXRlIGJlZm9yZSByZWxl YXNpbmcgdGhlbSAqLwotCQlyZXQgPSBkcHVfZW5jb2Rlcl9yZXNvdXJjZV9jb250cm9sKGRybV9l bmMsCi0JCQkJRFBVX0VOQ19SQ19FVkVOVF9QUkVfTU9ERVNFVCk7Ci0JCWlmIChyZXQpIHsKLQkJ CURQVV9FUlJPUl9FTkMoZHB1X2VuYywKLQkJCQkJImRwdSByZXNvdXJjZSBjb250cm9sIGZhaWxl ZDogJWRcbiIsCi0JCQkJCXJldCk7Ci0JCQlyZXR1cm47Ci0JCX0KLQl9CisJdG9wb2xvZ3kgPSBk cHVfZW5jb2Rlcl9nZXRfdG9wb2xvZ3koZHB1X2VuYywgZHB1X2ttcywgYWRqX21vZGUpOwogCiAJ LyogUmVzZXJ2ZSBkeW5hbWljIHJlc291cmNlcyBub3cuIEluZGljYXRpbmcgbm9uLUF0b21pY1Rl c3QgcGhhc2UgKi8KIAlyZXQgPSBkcHVfcm1fcmVzZXJ2ZSgmZHB1X2ttcy0+cm0sIGRybV9lbmMs IGRybV9lbmMtPmNydGMtPnN0YXRlLAotCQkJY29ubi0+c3RhdGUsIGZhbHNlKTsKKwkJCWNvbm4t PnN0YXRlLCB0b3BvbG9neSwgZmFsc2UpOwogCWlmIChyZXQpIHsKIAkJRFBVX0VSUk9SX0VOQyhk cHVfZW5jLAogCQkJCSJmYWlsZWQgdG8gcmVzZXJ2ZSBodyByZXNvdXJjZXMsICVkXG4iLCByZXQp OwpAQCAtMTIwMyw2ICsxMTc1LDcgQEAgc3RhdGljIHZvaWQgZHB1X2VuY29kZXJfdmlydF9tb2Rl X3NldChzdHJ1Y3QgZHJtX2VuY29kZXIgKmRybV9lbmMsCiAJCWRwdV9lbmMtPmh3X3BwW2ldID0g KHN0cnVjdCBkcHVfaHdfcGluZ3BvbmcgKikgcHBfaXRlci5odzsKIAl9CiAKKwl0b3BvbG9neV9u YW1lID0gZHB1X3JtX2dldF90b3BvbG9neV9uYW1lKHRvcG9sb2d5KTsKIAlmb3IgKGkgPSAwOyBp IDwgZHB1X2VuYy0+bnVtX3BoeXNfZW5jczsgaSsrKSB7CiAJCXN0cnVjdCBkcHVfZW5jb2Rlcl9w aHlzICpwaHlzID0gZHB1X2VuYy0+cGh5c19lbmNzW2ldOwogCkBAIC0xMjE0LDYgKzExODcsNyBA QCBzdGF0aWMgdm9pZCBkcHVfZW5jb2Rlcl92aXJ0X21vZGVfc2V0KHN0cnVjdCBkcm1fZW5jb2Rl ciAqZHJtX2VuYywKIAkJCX0KIAkJCXBoeXMtPmh3X3BwID0gZHB1X2VuYy0+aHdfcHBbaV07CiAJ CQlwaHlzLT5jb25uZWN0b3IgPSBjb25uLT5zdGF0ZS0+Y29ubmVjdG9yOworCQkJcGh5cy0+dG9w b2xvZ3lfbmFtZSA9IHRvcG9sb2d5X25hbWU7CiAJCQlpZiAocGh5cy0+b3BzLm1vZGVfc2V0KQog CQkJCXBoeXMtPm9wcy5tb2RlX3NldChwaHlzLCBtb2RlLCBhZGpfbW9kZSk7CiAJCX0KQEAgLTE3 MTEsOCArMTY4NSw2IEBAIGludCBkcHVfZW5jb2Rlcl9oZWxwZXJfd2FpdF9ldmVudF90aW1lb3V0 KAogdm9pZCBkcHVfZW5jb2Rlcl9oZWxwZXJfaHdfcmVzZXQoc3RydWN0IGRwdV9lbmNvZGVyX3Bo eXMgKnBoeXNfZW5jKQogewogCXN0cnVjdCBkcHVfZW5jb2Rlcl92aXJ0ICpkcHVfZW5jOwotCXN0 cnVjdCBkcHVfY29ubmVjdG9yICpkcHVfY29uOwotCXZvaWQgKmRwdV9jb25fZGlzcDsKIAlzdHJ1 Y3QgZHB1X2h3X2N0bCAqY3RsOwogCWludCByYzsKIApAQCAtMTcyOSwyMiArMTcwMSw2IEBAIHZv aWQgZHB1X2VuY29kZXJfaGVscGVyX2h3X3Jlc2V0KHN0cnVjdCBkcHVfZW5jb2Rlcl9waHlzICpw aHlzX2VuYykKIAlEUFVfREVCVUdfRU5DKGRwdV9lbmMsICJjdGwgJWQgcmVzZXRcbiIsICBjdGwt PmlkeCk7CiAJRFBVX0VWVDMyKERSTUlEKHBoeXNfZW5jLT5wYXJlbnQpLCBjdGwtPmlkeCk7CiAK LQlpZiAocGh5c19lbmMtPm9wcy5pc19tYXN0ZXIgJiYgcGh5c19lbmMtPm9wcy5pc19tYXN0ZXIo cGh5c19lbmMpICYmCi0JCQlwaHlzX2VuYy0+Y29ubmVjdG9yKSB7Ci0JCWRwdV9jb24gPSB0b19k cHVfY29ubmVjdG9yKHBoeXNfZW5jLT5jb25uZWN0b3IpOwotCQlkcHVfY29uX2Rpc3AgPSBkcHVf Y29ubmVjdG9yX2dldF9kaXNwbGF5KHBoeXNfZW5jLT5jb25uZWN0b3IpOwotCi0JCWlmIChkcHVf Y29uLT5vcHMuc29mdF9yZXNldCkgewotCQkJcmMgPSBkcHVfY29uLT5vcHMuc29mdF9yZXNldChk cHVfY29uX2Rpc3ApOwotCQkJaWYgKHJjKSB7Ci0JCQkJRFBVX0VSUk9SX0VOQyhkcHVfZW5jLAot CQkJCQkJImNvbm5lY3RvciBzb2Z0IHJlc2V0IGZhaWx1cmVcbiIpOwotCQkJCURQVV9EQkdfRFVN UCgiYWxsIiwgImRiZ19idXMiLCAidmJpZl9kYmdfYnVzIiwKLQkJCQkJCQkJInBhbmljIik7Ci0J CQl9Ci0JCX0KLQl9Ci0KIAlyYyA9IGN0bC0+b3BzLnJlc2V0KGN0bCk7CiAJaWYgKHJjKSB7CiAJ CURQVV9FUlJPUl9FTkMoZHB1X2VuYywgImN0bCAlZCByZXNldCBmYWlsdXJlXG4iLCAgY3RsLT5p ZHgpOwpAQCAtMTg2MiwyMiArMTgxOCw2IEBAIHZvaWQgZHB1X2VuY29kZXJfdHJpZ2dlcl9raWNr b2ZmX3BlbmRpbmcoc3RydWN0IGRybV9lbmNvZGVyICpkcm1fZW5jKQogCX0KIH0KIAotc3RhdGlj IHZvaWQgX2RwdV9lbmNvZGVyX3NldHVwX2RpdGhlcihzdHJ1Y3QgZHB1X2VuY29kZXJfcGh5cyAq cGh5cykKLXsKLQl2b2lkICpkaXRoZXJfY2ZnOwotCWludCByZXQgPSAwOwotCXNpemVfdCBsZW4g PSAwOwotCi0JaWYgKCFwaHlzIHx8ICFwaHlzLT5jb25uZWN0b3IgfHwgIXBoeXMtPmh3X3BwIHx8 Ci0JCQkhcGh5cy0+aHdfcHAtPm9wcy5zZXR1cF9kaXRoZXIpCi0JCXJldHVybjsKLQotCXJldCA9 IGRwdV9jb25uZWN0b3JfZ2V0X2RpdGhlcl9jZmcocGh5cy0+Y29ubmVjdG9yLAotCQkJCXBoeXMt PmNvbm5lY3Rvci0+c3RhdGUsICZkaXRoZXJfY2ZnLCAmbGVuKTsKLQlpZiAoIXJldCkKLQkJcGh5 cy0+aHdfcHAtPm9wcy5zZXR1cF9kaXRoZXIocGh5cy0+aHdfcHAsIGRpdGhlcl9jZmcsIGxlbik7 Ci19Ci0KIHN0YXRpYyB1MzIgX2RwdV9lbmNvZGVyX2NhbGN1bGF0ZV9saW5ldGltZShzdHJ1Y3Qg ZHB1X2VuY29kZXJfdmlydCAqZHB1X2VuYywKIAkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1v ZGUpCiB7CkBAIC0yMDI4LDcgKzE5NjgsNiBAQCB2b2lkIGRwdV9lbmNvZGVyX3ByZXBhcmVfZm9y X2tpY2tvZmYoc3RydWN0IGRybV9lbmNvZGVyICpkcm1fZW5jLAogCXN0cnVjdCBkcHVfZW5jb2Rl cl9waHlzICpwaHlzOwogCWJvb2wgbmVlZHNfaHdfcmVzZXQgPSBmYWxzZTsKIAl1bnNpZ25lZCBp bnQgaTsKLQlpbnQgcmM7CiAKIAlpZiAoIWRybV9lbmMgfHwgIXBhcmFtcykgewogCQlEUFVfRVJS T1IoImludmFsaWQgYXJnc1xuIik7CkBAIC0yMDQ4LDcgKzE5ODcsNiBAQCB2b2lkIGRwdV9lbmNv ZGVyX3ByZXBhcmVfZm9yX2tpY2tvZmYoc3RydWN0IGRybV9lbmNvZGVyICpkcm1fZW5jLAogCQkJ CXBoeXMtPm9wcy5wcmVwYXJlX2Zvcl9raWNrb2ZmKHBoeXMsIHBhcmFtcyk7CiAJCQlpZiAocGh5 cy0+ZW5hYmxlX3N0YXRlID09IERQVV9FTkNfRVJSX05FRURTX0hXX1JFU0VUKQogCQkJCW5lZWRz X2h3X3Jlc2V0ID0gdHJ1ZTsKLQkJCV9kcHVfZW5jb2Rlcl9zZXR1cF9kaXRoZXIocGh5cyk7CiAJ CX0KIAl9CiAJRFBVX0FUUkFDRV9FTkQoImVuY19wcmVwYXJlX2Zvcl9raWNrb2ZmIik7CkBAIC0y MDY0LDE0ICsyMDAyLDYgQEAgdm9pZCBkcHVfZW5jb2Rlcl9wcmVwYXJlX2Zvcl9raWNrb2ZmKHN0 cnVjdCBkcm1fZW5jb2RlciAqZHJtX2VuYywKIAkJCQlwaHlzLT5vcHMuaHdfcmVzZXQocGh5cyk7 CiAJCX0KIAl9Ci0KLQlpZiAoZHB1X2VuYy0+Y3VyX21hc3RlciAmJiBkcHVfZW5jLT5jdXJfbWFz dGVyLT5jb25uZWN0b3IpIHsKLQkJcmMgPSBkcHVfY29ubmVjdG9yX3ByZV9raWNrb2ZmKGRwdV9l bmMtPmN1cl9tYXN0ZXItPmNvbm5lY3Rvcik7Ci0JCWlmIChyYykKLQkJCURQVV9FUlJPUl9FTkMo ZHB1X2VuYywgImtpY2tvZmYgY29ubiVkIGZhaWxlZCByYyAlZFxuIiwKLQkJCQkJZHB1X2VuYy0+ Y3VyX21hc3Rlci0+Y29ubmVjdG9yLT5iYXNlLmlkLAotCQkJCQlyYyk7Ci0JfQogfQogCiB2b2lk IGRwdV9lbmNvZGVyX2tpY2tvZmYoc3RydWN0IGRybV9lbmNvZGVyICpkcm1fZW5jKQpAQCAtMjcw NCw4ICsyNjM0LDcgQEAgc3RhdGljIHZvaWQgZHB1X2VuY29kZXJfZnJhbWVfZG9uZV90aW1lb3V0 KHN0cnVjdCB0aW1lcl9saXN0ICp0KQogCQkuZWFybHlfdW5yZWdpc3RlciA9IGRwdV9lbmNvZGVy X2Vhcmx5X3VucmVnaXN0ZXIsCiB9OwogCi1zdHJ1Y3QgZHJtX2VuY29kZXIgKmRwdV9lbmNvZGVy X2luaXQoCi0JCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCitpbnQgZHB1X2VuY29kZXJfc2V0dXAo c3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9lbmNvZGVyICplbmMsCiAJCXN0cnVj dCBtc21fZGlzcGxheV9pbmZvICpkaXNwX2luZm8pCiB7CiAJc3RydWN0IG1zbV9kcm1fcHJpdmF0 ZSAqcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CkBAIC0yNzE1LDExICsyNjQ0LDcgQEAgc3RydWN0 IGRybV9lbmNvZGVyICpkcHVfZW5jb2Rlcl9pbml0KAogCWludCBkcm1fZW5jX21vZGUgPSBEUk1f TU9ERV9FTkNPREVSX05PTkU7CiAJaW50IHJldCA9IDA7CiAKLQlkcHVfZW5jID0ga3phbGxvYyhz aXplb2YoKmRwdV9lbmMpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWRwdV9lbmMpIHsKLQkJcmV0ID0g LUVOT01FTTsKLQkJZ290byBmYWlsOwotCX0KKwlkcHVfZW5jID0gdG9fZHB1X2VuY29kZXJfdmly dChlbmMpOwogCiAJbXV0ZXhfaW5pdCgmZHB1X2VuYy0+ZW5jX2xvY2spOwogCXJldCA9IGRwdV9l bmNvZGVyX3NldHVwX2Rpc3BsYXkoZHB1X2VuYywgZHB1X2ttcywgZGlzcF9pbmZvLApAQCAtMjcy OSwxNiArMjY1NCwxMiBAQCBzdHJ1Y3QgZHJtX2VuY29kZXIgKmRwdV9lbmNvZGVyX2luaXQoCiAK IAlkcHVfZW5jLT5jdXJfbWFzdGVyID0gTlVMTDsKIAlzcGluX2xvY2tfaW5pdCgmZHB1X2VuYy0+ ZW5jX3NwaW5sb2NrKTsKLQlkcm1fZW5jID0gJmRwdV9lbmMtPmJhc2U7Ci0JZHJtX2VuY29kZXJf aW5pdChkZXYsIGRybV9lbmMsICZkcHVfZW5jb2Rlcl9mdW5jcywgZHJtX2VuY19tb2RlLCBOVUxM KTsKLQlkcm1fZW5jb2Rlcl9oZWxwZXJfYWRkKGRybV9lbmMsICZkcHVfZW5jb2Rlcl9oZWxwZXJf ZnVuY3MpOwogCiAJYXRvbWljX3NldCgmZHB1X2VuYy0+ZnJhbWVfZG9uZV90aW1lb3V0LCAwKTsK IAl0aW1lcl9zZXR1cCgmZHB1X2VuYy0+ZnJhbWVfZG9uZV90aW1lciwKIAkJCWRwdV9lbmNvZGVy X2ZyYW1lX2RvbmVfdGltZW91dCwgMCk7CiAKLQlpZiAoKGRpc3BfaW5mby0+aW50Zl90eXBlID09 IERSTV9NT0RFX0NPTk5FQ1RPUl9EU0kpICYmCi0JCQlkaXNwX2luZm8tPmlzX3ByaW1hcnkpCisJ aWYgKGRpc3BfaW5mby0+aW50Zl90eXBlID09IERSTV9NT0RFX0NPTk5FQ1RPUl9EU0kpCiAJCXRp bWVyX3NldHVwKCZkcHVfZW5jLT52c3luY19ldmVudF90aW1lciwKIAkJCQlkcHVfZW5jb2Rlcl92 c3luY19ldmVudF9oYW5kbGVyLAogCQkJCTApOwpAQCAtMjc1NiwxNCArMjY3NywzOCBAQCBzdHJ1 Y3QgZHJtX2VuY29kZXIgKmRwdV9lbmNvZGVyX2luaXQoCiAKIAlEUFVfREVCVUdfRU5DKGRwdV9l bmMsICJjcmVhdGVkXG4iKTsKIAotCXJldHVybiBkcm1fZW5jOworCXJldHVybiByZXQ7CiAKIGZh aWw6CiAJRFBVX0VSUk9SKCJmYWlsZWQgdG8gY3JlYXRlIGVuY29kZXJcbiIpOwogCWlmIChkcm1f ZW5jKQogCQlkcHVfZW5jb2Rlcl9kZXN0cm95KGRybV9lbmMpOwogCi0JcmV0dXJuIEVSUl9QVFIo cmV0KTsKKwlyZXR1cm4gcmV0OworCisKK30KKworc3RydWN0IGRybV9lbmNvZGVyICpkcHVfZW5j b2Rlcl9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCWludCBkcm1fZW5jX21vZGUpCit7 CisJc3RydWN0IGRwdV9lbmNvZGVyX3ZpcnQgKmRwdV9lbmMgPSBOVUxMOworCWludCByYyA9IDA7 CisKKwlkcHVfZW5jID0gZGV2bV9remFsbG9jKGRldi0+ZGV2LCBzaXplb2YoKmRwdV9lbmMpLCBH RlBfS0VSTkVMKTsKKwlpZiAoIWRwdV9lbmMpCisJCXJldHVybiBFUlJfUFRSKEVOT01FTSk7CisK KwlyYyA9IGRybV9lbmNvZGVyX2luaXQoZGV2LCAmZHB1X2VuYy0+YmFzZSwgJmRwdV9lbmNvZGVy X2Z1bmNzLAorCQkJZHJtX2VuY19tb2RlLCBOVUxMKTsKKwlpZiAocmMpIHsKKwkJZGV2bV9rZnJl ZShkZXYtPmRldiwgZHB1X2VuYyk7CisJCXJldHVybiBFUlJfUFRSKHJjKTsKKwl9CisKKwlkcm1f ZW5jb2Rlcl9oZWxwZXJfYWRkKCZkcHVfZW5jLT5iYXNlLCAmZHB1X2VuY29kZXJfaGVscGVyX2Z1 bmNzKTsKKworCXJldHVybiAmZHB1X2VuYy0+YmFzZTsKIH0KIAogaW50IGRwdV9lbmNvZGVyX3dh aXRfZm9yX2V2ZW50KHN0cnVjdCBkcm1fZW5jb2RlciAqZHJtX2VuYywKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyLmggYi9kcml2ZXJzL2dwdS9k cm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlci5oCmluZGV4IGIyNTYxOWQuLmQ4NTNhZDkgMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyLmgKKysr IGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXIuaApAQCAtNDUsNyAr NDUsNiBAQCBzdHJ1Y3QgZHB1X2VuY29kZXJfaHdfcmVzb3VyY2VzIHsKIAllbnVtIGRwdV9pbnRm X21vZGUgd2JzW1dCX01BWF07CiAJYm9vbCBuZWVkc19jZG07CiAJdTMyIGRpc3BsYXlfbnVtX29m X2hfdGlsZXM7Ci0Jc3RydWN0IG1zbV9kaXNwbGF5X3RvcG9sb2d5IHRvcG9sb2d5OwogfTsKIAog LyoqCkBAIC0xNjAsNiArMTU5LDE1IEBAIGludCBkcHVfZW5jb2Rlcl93YWl0X2Zvcl9ldmVudChz dHJ1Y3QgZHJtX2VuY29kZXIgKmRybV9lbmNvZGVyLAogICovCiBzdHJ1Y3QgZHJtX2VuY29kZXIg KmRwdV9lbmNvZGVyX2luaXQoCiAJCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCWludCBkcm1f ZW5jX21vZGUpOworCisvKioKKyAqIGRwdV9lbmNvZGVyX3NldHVwIC0gc2V0dXAgZHB1X2VuY29k ZXIgZm9yIHRoZSBkaXNwbGF5IHByb2JlZAorICogQGRldjoJCVBvaW50ZXIgdG8gZHJtIGRldmlj ZSBzdHJ1Y3R1cmUKKyAqIEBlbmM6CQlQb2ludGVyIHRvIHRoZSBkcm1fZW5jb2RlcgorICogQGRp c3BfaW5mbzoJUG9pbnRlciB0byB0aGUgZGlzcGxheSBpbmZvCisgKi8KK2ludCBkcHVfZW5jb2Rl cl9zZXR1cChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuYywK IAkJc3RydWN0IG1zbV9kaXNwbGF5X2luZm8gKmRpc3BfaW5mbyk7CiAKIC8qKgpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXJfcGh5cy5oIGIvZHJp dmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXJfcGh5cy5oCmluZGV4IDU3NmM0 NzUuLjM1YmVlZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2Rw dV9lbmNvZGVyX3BoeXMuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVf ZW5jb2Rlcl9waHlzLmgKQEAgLTI1LDcgKzI1LDYgQEAKICNpbmNsdWRlICJkcHVfaHdfd2IuaCIK ICNpbmNsdWRlICJkcHVfaHdfY2RtLmgiCiAjaW5jbHVkZSAiZHB1X2VuY29kZXIuaCIKLSNpbmNs dWRlICJkcHVfY29ubmVjdG9yLmgiCiAKICNkZWZpbmUgRFBVX0VOQ09ERVJfTkFNRV9NQVgJMTYK IApAQCAtMjIxLDYgKzIyMCw3IEBAIHN0cnVjdCBkcHVfZW5jb2Rlcl9pcnEgewogICogQHNwbGl0 X3JvbGU6CQlSb2xlIHRvIHBsYXkgaW4gYSBzcGxpdC1wYW5lbCBjb25maWd1cmF0aW9uCiAgKiBA aW50Zl9tb2RlOgkJSW50ZXJmYWNlIG1vZGUKICAqIEBpbnRmX2lkeDoJCUludGVyZmFjZSBpbmRl eCBvbiBkcHUgaGFyZHdhcmUKKyAqIEB0b3BvbG9neV9uYW1lOgl0b3BvbG9neSBzZWxlY3RlZCBm b3IgdGhlIGRpc3BsYXkKICAqIEBlbmNfc3BpbmxvY2s6CVZpcnR1YWwtRW5jb2Rlci1XaWRlIFNw aW4gTG9jayBmb3IgSVJRIHB1cnBvc2VzCiAgKiBAZW5hYmxlX3N0YXRlOglFbmFibGUgc3RhdGUg dHJhY2tpbmcKICAqIEB2YmxhbmtfcmVmY291bnQ6CVJlZmVyZW5jZSBjb3VudCBvZiB2Ymxhbmsg cmVxdWVzdApAQCAtMjUwLDYgKzI1MCw3IEBAIHN0cnVjdCBkcHVfZW5jb2Rlcl9waHlzIHsKIAll bnVtIGRwdV9lbmNfc3BsaXRfcm9sZSBzcGxpdF9yb2xlOwogCWVudW0gZHB1X2ludGZfbW9kZSBp bnRmX21vZGU7CiAJZW51bSBkcHVfaW50ZiBpbnRmX2lkeDsKKwllbnVtIGRwdV9ybV90b3BvbG9n eV9uYW1lIHRvcG9sb2d5X25hbWU7CiAJc3BpbmxvY2tfdCAqZW5jX3NwaW5sb2NrOwogCWVudW0g ZHB1X2VuY19lbmFibGVfc3RhdGUgZW5hYmxlX3N0YXRlOwogCWF0b21pY190IHZibGFua19yZWZj b3VudDsKQEAgLTQ0MywxNCArNDQ0LDExIEBAIGludCBkcHVfZW5jb2Rlcl9oZWxwZXJfd2FpdF9l dmVudF90aW1lb3V0KAogc3RhdGljIGlubGluZSBlbnVtIGRwdV8zZF9ibGVuZF9tb2RlIGRwdV9l bmNvZGVyX2hlbHBlcl9nZXRfM2RfYmxlbmRfbW9kZSgKIAkJc3RydWN0IGRwdV9lbmNvZGVyX3Bo eXMgKnBoeXNfZW5jKQogewotCWVudW0gZHB1X3JtX3RvcG9sb2d5X25hbWUgdG9wb2xvZ3k7Ci0K IAlpZiAoIXBoeXNfZW5jIHx8IHBoeXNfZW5jLT5lbmFibGVfc3RhdGUgPT0gRFBVX0VOQ19ESVNB QkxJTkcpCiAJCXJldHVybiBCTEVORF8zRF9OT05FOwogCi0JdG9wb2xvZ3kgPSBkcHVfY29ubmVj dG9yX2dldF90b3BvbG9neV9uYW1lKHBoeXNfZW5jLT5jb25uZWN0b3IpOwogCWlmIChwaHlzX2Vu Yy0+c3BsaXRfcm9sZSA9PSBFTkNfUk9MRV9TT0xPICYmCi0JICAgIHRvcG9sb2d5ID09IERQVV9S TV9UT1BPTE9HWV9EVUFMUElQRV8zRE1FUkdFKQorCSAgICBwaHlzX2VuYy0+dG9wb2xvZ3lfbmFt ZSA9PSBEUFVfUk1fVE9QT0xPR1lfRFVBTFBJUEVfM0RNRVJHRSkKIAkJcmV0dXJuIEJMRU5EXzNE X0hfUk9XX0lOVDsKIAogCXJldHVybiBCTEVORF8zRF9OT05FOwpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXJfcGh5c192aWQuYyBiL2RyaXZlcnMv Z3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyX3BoeXNfdmlkLmMKaW5kZXggYjY4MDcx OC4uNzNlNTkzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1 X2VuY29kZXJfcGh5c192aWQuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9k cHVfZW5jb2Rlcl9waHlzX3ZpZC5jCkBAIC0xNSw3ICsxNSw2IEBACiAjaW5jbHVkZSAiZHB1X2h3 X2ludGVycnVwdHMuaCIKICNpbmNsdWRlICJkcHVfY29yZV9pcnEuaCIKICNpbmNsdWRlICJkcHVf Zm9ybWF0cy5oIgotI2luY2x1ZGUgImRzaV9kaXNwbGF5LmgiCiAjaW5jbHVkZSAiZHB1X3RyYWNl LmgiCiAKICNkZWZpbmUgRFBVX0RFQlVHX1ZJREVOQyhlLCBmbXQsIC4uLikgRFBVX0RFQlVHKCJl bmMlZCBpbnRmJWQgIiBmbXQsIFwKQEAgLTM1NiwxMyArMzU1LDEwIEBAIHN0YXRpYyB2b2lkIGRw dV9lbmNvZGVyX3BoeXNfdmlkX3VuZGVycnVuX2lycSh2b2lkICphcmcsIGludCBpcnFfaWR4KQog CiBzdGF0aWMgYm9vbCBfZHB1X2VuY29kZXJfcGh5c19pc19kdWFsX2N0bChzdHJ1Y3QgZHB1X2Vu Y29kZXJfcGh5cyAqcGh5c19lbmMpCiB7Ci0JZW51bSBkcHVfcm1fdG9wb2xvZ3lfbmFtZSB0b3Bv bG9neTsKLQogCWlmICghcGh5c19lbmMpCiAJCXJldHVybiBmYWxzZTsKIAotCXRvcG9sb2d5ID0g ZHB1X2Nvbm5lY3Rvcl9nZXRfdG9wb2xvZ3lfbmFtZShwaHlzX2VuYy0+Y29ubmVjdG9yKTsKLQlp ZiAodG9wb2xvZ3kgPT0gRFBVX1JNX1RPUE9MT0dZX0RVQUxQSVBFKQorCWlmIChwaHlzX2VuYy0+ dG9wb2xvZ3lfbmFtZSA9PSBEUFVfUk1fVE9QT0xPR1lfRFVBTFBJUEUpCiAJCXJldHVybiB0cnVl OwogCiAJcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNw L2RwdTEvZHB1X2ttcy5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2ttcy5j CmluZGV4IDBmYmViNzUuLjM3YzdjNjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20v ZGlzcC9kcHUxL2RwdV9rbXMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9k cHVfa21zLmMKQEAgLTI3LDE4ICsyNyw2IEBACiAjaW5jbHVkZSAibXNtX21tdS5oIgogI2luY2x1 ZGUgIm1zbV9nZW0uaCIKIAotI2lmZGVmIENPTkZJR19EUk1fTVNNX0RTSV9TVEFHSU5HCi0jaW5j bHVkZSAiZHNpX2Rpc3BsYXkuaCIKLSNpbmNsdWRlICJkc2lfZHJtLmgiCi0jZW5kaWYKLSNpZmRl ZiBDT05GSUdfRFJNX01TTV9XUklURUJBQ0sKLSNpbmNsdWRlICJkcHVfd2IuaCIKLSNlbmRpZgot I2lmZGVmIENPTkZJR19EUk1fTVNNX0RJU1BMQVlQT1JUCi0jaW5jbHVkZSAiZHAvZHBfZGlzcGxh eS5oIgotI2luY2x1ZGUgImRwX2RybS5oIgotI2VuZGlmCi0jaW5jbHVkZSAiZHB1X2Nvbm5lY3Rv ci5oIgogI2luY2x1ZGUgImRwdV9rbXMuaCIKICNpbmNsdWRlICJkcHVfY29yZV9pcnEuaCIKICNp bmNsdWRlICJkcHVfZm9ybWF0cy5oIgpAQCAtNDczLDkgKzQ2MSw3IEBAIHN0YXRpYyB2b2lkIGRw dV9rbXNfY29tcGxldGVfY29tbWl0KHN0cnVjdCBtc21fa21zICprbXMsCiAJc3RydWN0IG1zbV9k cm1fcHJpdmF0ZSAqcHJpdjsKIAlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7CiAJc3RydWN0IGRybV9j cnRjX3N0YXRlICpvbGRfY3J0Y19zdGF0ZTsKLQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubjsK LQlzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqb2xkX2Nvbm5fc3RhdGU7Ci0JaW50IGksIHJj ID0gMDsKKwlpbnQgaTsKIAogCWlmICgha21zIHx8ICFvbGRfc3RhdGUpCiAJCXJldHVybjsKQEAg LTQ4OCwxOSArNDc0LDYgQEAgc3RhdGljIHZvaWQgZHB1X2ttc19jb21wbGV0ZV9jb21taXQoc3Ry dWN0IG1zbV9rbXMgKmttcywKIAlmb3JfZWFjaF9vbGRfY3J0Y19pbl9zdGF0ZShvbGRfc3RhdGUs IGNydGMsIG9sZF9jcnRjX3N0YXRlLCBpKQogCQlkcHVfY3J0Y19jb21wbGV0ZV9jb21taXQoY3J0 Yywgb2xkX2NydGNfc3RhdGUpOwogCi0JZm9yX2VhY2hfb2xkX2Nvbm5lY3Rvcl9pbl9zdGF0ZShv bGRfc3RhdGUsIGNvbm4sIG9sZF9jb25uX3N0YXRlLCBpKSB7Ci0JCXN0cnVjdCBkcHVfY29ubmVj dG9yICpjX2Nvbm47Ci0KLQkJY19jb25uID0gdG9fZHB1X2Nvbm5lY3Rvcihjb25uKTsKLQkJaWYg KCFjX2Nvbm4tPm9wcy5wb3N0X2tpY2tvZmYpCi0JCQljb250aW51ZTsKLQkJcmMgPSBjX2Nvbm4t Pm9wcy5wb3N0X2tpY2tvZmYoY29ubik7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJDb25uZWN0 b3IgUG9zdCBraWNrb2ZmIGZhaWxlZCByYz0lZFxuIiwKLQkJCQkJIHJjKTsKLQkJfQotCX0KLQog CWRwdV9wb3dlcl9yZXNvdXJjZV9lbmFibGUoJnByaXYtPnBoYW5kbGUsIGRwdV9rbXMtPmNvcmVf Y2xpZW50LCBmYWxzZSk7CiAJcG1fcnVudGltZV9wdXRfc3luYyhkcHVfa21zLT5kZXYtPmRldik7 CiAKQEAgLTU1MywzMTcgKzUyNiwzNiBAQCBzdGF0aWMgdm9pZCBkcHVfa21zX3dhaXRfZm9yX2Nv bW1pdF9kb25lKHN0cnVjdCBtc21fa21zICprbXMsCiAJZHJtX2NydGNfdmJsYW5rX3B1dChjcnRj KTsKIH0KIAotLyoqCi0gKiBfZHB1X2ttc19nZXRfZGlzcGxheXMgLSBxdWVyeSBmb3IgdW5kZXJs eWluZyBkaXNwbGF5IGhhbmRsZXMgYW5kIGNhY2hlIHRoZW0KLSAqIEBkcHVfa21zOiAgICBQb2lu dGVyIHRvIGRwdSBrbXMgc3RydWN0dXJlCi0gKiBSZXR1cm5zOiAgICAgWmVybyBvbiBzdWNjZXNz Ci0gKi8KLXN0YXRpYyBpbnQgX2RwdV9rbXNfZ2V0X2Rpc3BsYXlzKHN0cnVjdCBkcHVfa21zICpk cHVfa21zKQotewotCWludCByYyA9IC1FTk9NRU07Ci0KLQlpZiAoIWRwdV9rbXMpIHsKLQkJRFBV X0VSUk9SKCJpbnZhbGlkIGRwdSBrbXNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLSNp ZmRlZiBDT05GSUdfRFJNX01TTV9EU0lfU1RBR0lORwotCS8qIGRzaSAqLwotCWRwdV9rbXMtPmRz aV9kaXNwbGF5cyA9IE5VTEw7Ci0JZHB1X2ttcy0+ZHNpX2Rpc3BsYXlfY291bnQgPSBkc2lfZGlz cGxheV9nZXRfbnVtX29mX2Rpc3BsYXlzKCk7Ci0JaWYgKGRwdV9rbXMtPmRzaV9kaXNwbGF5X2Nv dW50KSB7Ci0JCWRwdV9rbXMtPmRzaV9kaXNwbGF5cyA9IGtjYWxsb2MoZHB1X2ttcy0+ZHNpX2Rp c3BsYXlfY291bnQsCi0JCQkJc2l6ZW9mKHZvaWQgKiksCi0JCQkJR0ZQX0tFUk5FTCk7Ci0JCWlm ICghZHB1X2ttcy0+ZHNpX2Rpc3BsYXlzKSB7Ci0JCQlEUFVfRVJST1IoImZhaWxlZCB0byBhbGxv Y2F0ZSBkc2kgZGlzcGxheXNcbiIpOwotCQkJZ290byBleGl0X2RlaW5pdF9kc2k7Ci0JCX0KLQkJ ZHB1X2ttcy0+ZHNpX2Rpc3BsYXlfY291bnQgPQotCQkJZHNpX2Rpc3BsYXlfZ2V0X2FjdGl2ZV9k aXNwbGF5cyhkcHVfa21zLT5kc2lfZGlzcGxheXMsCi0JCQkJCWRwdV9rbXMtPmRzaV9kaXNwbGF5 X2NvdW50KTsKLQl9Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19EUk1fTVNNX1dSSVRFQkFDSwot CS8qIHdiICovCi0JZHB1X2ttcy0+d2JfZGlzcGxheXMgPSBOVUxMOwotCWRwdV9rbXMtPndiX2Rp c3BsYXlfY291bnQgPSBkcHVfd2JfZ2V0X251bV9vZl9kaXNwbGF5cygpOwotCWlmIChkcHVfa21z LT53Yl9kaXNwbGF5X2NvdW50KSB7Ci0JCWRwdV9rbXMtPndiX2Rpc3BsYXlzID0ga2NhbGxvYyhk cHVfa21zLT53Yl9kaXNwbGF5X2NvdW50LAotCQkJCXNpemVvZih2b2lkICopLAotCQkJCUdGUF9L RVJORUwpOwotCQlpZiAoIWRwdV9rbXMtPndiX2Rpc3BsYXlzKSB7Ci0JCQlEUFVfRVJST1IoImZh aWxlZCB0byBhbGxvY2F0ZSB3YiBkaXNwbGF5c1xuIik7Ci0JCQlnb3RvIGV4aXRfZGVpbml0X3di OwotCQl9Ci0JCWRwdV9rbXMtPndiX2Rpc3BsYXlfY291bnQgPQotCQkJd2JfZGlzcGxheV9nZXRf ZGlzcGxheXMoZHB1X2ttcy0+d2JfZGlzcGxheXMsCi0JCQkJCWRwdV9rbXMtPndiX2Rpc3BsYXlf Y291bnQpOwotCX0KLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0RSTV9NU01fRElTUExBWVBPUlQK LQkvKiBkcCAqLwotCWRwdV9rbXMtPmRwX2Rpc3BsYXlzID0gTlVMTDsKLQlkcHVfa21zLT5kcF9k aXNwbGF5X2NvdW50ID0gZHBfZGlzcGxheV9nZXRfbnVtX29mX2Rpc3BsYXlzKCk7Ci0JaWYgKGRw dV9rbXMtPmRwX2Rpc3BsYXlfY291bnQpIHsKLQkJZHB1X2ttcy0+ZHBfZGlzcGxheXMgPSBrY2Fs bG9jKGRwdV9rbXMtPmRwX2Rpc3BsYXlfY291bnQsCi0JCQkJc2l6ZW9mKHZvaWQgKiksIEdGUF9L RVJORUwpOwotCQlpZiAoIWRwdV9rbXMtPmRwX2Rpc3BsYXlzKSB7Ci0JCQlEUFVfRVJST1IoImZh aWxlZCB0byBhbGxvY2F0ZSBkcCBkaXNwbGF5c1xuIik7Ci0JCQlnb3RvIGV4aXRfZGVpbml0X2Rw OwotCQl9Ci0JCWRwdV9rbXMtPmRwX2Rpc3BsYXlfY291bnQgPQotCQkJZHBfZGlzcGxheV9nZXRf ZGlzcGxheXMoZHB1X2ttcy0+ZHBfZGlzcGxheXMsCi0JCQkJCWRwdV9rbXMtPmRwX2Rpc3BsYXlf Y291bnQpOwotCX0KLSNlbmRpZgotCi0JcmV0dXJuIDA7Ci0KLSNpZmRlZiBDT05GSUdfRFJNX01T TV9ESVNQTEFZUE9SVAotZXhpdF9kZWluaXRfZHA6Ci0Ja2ZyZWUoZHB1X2ttcy0+ZHBfZGlzcGxh eXMpOwotCWRwdV9rbXMtPmRwX2Rpc3BsYXlfY291bnQgPSAwOwotCWRwdV9rbXMtPmRwX2Rpc3Bs YXlzID0gTlVMTDsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19EUk1fTVNNX1dSSVRFQkFDSwotZXhp dF9kZWluaXRfd2I6Ci0Ja2ZyZWUoZHB1X2ttcy0+d2JfZGlzcGxheXMpOwotCWRwdV9rbXMtPndi X2Rpc3BsYXlfY291bnQgPSAwOwotCWRwdV9rbXMtPndiX2Rpc3BsYXlzID0gTlVMTDsKLSNlbmRp ZgotI2lmZGVmIENPTkZJR19EUk1fTVNNX0RTSV9TVEFHSU5HCi1leGl0X2RlaW5pdF9kc2k6Ci0J a2ZyZWUoZHB1X2ttcy0+ZHNpX2Rpc3BsYXlzKTsKLQlkcHVfa21zLT5kc2lfZGlzcGxheV9jb3Vu dCA9IDA7Ci0JZHB1X2ttcy0+ZHNpX2Rpc3BsYXlzID0gTlVMTDsKLQlyZXR1cm4gcmM7Ci0jZWxz ZQotCXJldHVybiByYzsKLSNlbmRpZgotfQotCi0vKioKLSAqIF9kcHVfa21zX3JlbGVhc2VfZGlz cGxheXMgLSByZWxlYXNlIGNhY2hlIG9mIHVuZGVybHlpbmcgZGlzcGxheSBoYW5kbGVzCi0gKiBA ZHB1X2ttczogICAgUG9pbnRlciB0byBkcHUga21zIHN0cnVjdHVyZQotICovCi1zdGF0aWMgdm9p ZCBfZHB1X2ttc19yZWxlYXNlX2Rpc3BsYXlzKHN0cnVjdCBkcHVfa21zICpkcHVfa21zKQotewot CWlmICghZHB1X2ttcykgewotCQlEUFVfRVJST1IoImludmFsaWQgZHB1IGttc1xuIik7Ci0JCXJl dHVybjsKLQl9Ci0KLQlrZnJlZShkcHVfa21zLT53Yl9kaXNwbGF5cyk7Ci0JZHB1X2ttcy0+d2Jf ZGlzcGxheXMgPSBOVUxMOwotCWRwdV9rbXMtPndiX2Rpc3BsYXlfY291bnQgPSAwOwotCi0Ja2Zy ZWUoZHB1X2ttcy0+ZHNpX2Rpc3BsYXlzKTsKLQlkcHVfa21zLT5kc2lfZGlzcGxheXMgPSBOVUxM OwotCWRwdV9rbXMtPmRzaV9kaXNwbGF5X2NvdW50ID0gMDsKLX0KLQotI2lmZGVmIENPTkZJR19E Uk1fTVNNX0RTSV9TVEFHSU5HCiBzdGF0aWMgdm9pZCBfZHB1X2ttc19pbml0aWFsaXplX2RzaShz dHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkJCSAgICBzdHJ1Y3QgbXNtX2RybV9wcml2YXRlICpw cml2LAotCQkJCSAgICBzdHJ1Y3QgZHB1X2ttcyAqZHB1X2ttcywKLQkJCQkgICAgdW5zaWduZWQg bWF4X2VuY29kZXJzKQotewotCXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHB1X2Nvbm5lY3Rvcl9vcHMg ZHNpX29wcyA9IHsKLQkJLnBvc3RfaW5pdCA9ICBkc2lfY29ubl9wb3N0X2luaXQsCi0JCS5kZXRl Y3QgPSAgICAgZHNpX2Nvbm5fZGV0ZWN0LAotCQkuZ2V0X21vZGVzID0gIGRzaV9jb25uZWN0b3Jf Z2V0X21vZGVzLAotCQkucHV0X21vZGVzID0gIGRzaV9jb25uZWN0b3JfcHV0X21vZGVzLAotCQku bW9kZV92YWxpZCA9IGRzaV9jb25uX21vZGVfdmFsaWQsCi0JCS5nZXRfaW5mbyA9ICAgZHNpX2Rp c3BsYXlfZ2V0X2luZm8sCi0JCS5zZXRfYmFja2xpZ2h0ID0gZHNpX2Rpc3BsYXlfc2V0X2JhY2ts aWdodCwKLQkJLnNvZnRfcmVzZXQgICA9IGRzaV9kaXNwbGF5X3NvZnRfcmVzZXQsCi0JCS5wcmVf a2lja29mZiAgPSBkc2lfY29ubl9wcmVfa2lja29mZiwKLQkJLmNsa19jdHJsID0gZHNpX2Rpc3Bs YXlfY2xrX2N0cmwsCi0JCS5zZXRfcG93ZXIgPSBkc2lfZGlzcGxheV9zZXRfcG93ZXIsCi0JCS5n ZXRfbW9kZV9pbmZvID0gZHNpX2Nvbm5fZ2V0X21vZGVfaW5mbywKLQkJLmdldF9kc3RfZm9ybWF0 ID0gZHNpX2Rpc3BsYXlfZ2V0X2RzdF9mb3JtYXQsCi0JCS5wb3N0X2tpY2tvZmYgPSBkc2lfY29u bl9wb3N0X2tpY2tvZmYKLQl9OwotCXN0cnVjdCBtc21fZGlzcGxheV9pbmZvIGluZm87Ci0Jc3Ry dWN0IGRybV9lbmNvZGVyICplbmNvZGVyOwotCXZvaWQgKmRpc3BsYXksICpjb25uZWN0b3I7Ci0J aW50IGksIHJjOwotCi0JLyogZHNpICovCi0JZm9yIChpID0gMDsgaSA8IGRwdV9rbXMtPmRzaV9k aXNwbGF5X2NvdW50ICYmCi0JCXByaXYtPm51bV9lbmNvZGVycyA8IG1heF9lbmNvZGVyczsgKytp KSB7Ci0JCWRpc3BsYXkgPSBkcHVfa21zLT5kc2lfZGlzcGxheXNbaV07Ci0JCWVuY29kZXIgPSBO VUxMOwotCi0JCW1lbXNldCgmaW5mbywgMHgwLCBzaXplb2YoaW5mbykpOwotCQlyYyA9IGRzaV9k aXNwbGF5X2dldF9pbmZvKCZpbmZvLCBkaXNwbGF5KTsKLQkJaWYgKHJjKSB7Ci0JCQlEUFVfRVJS T1IoImRzaSBnZXRfaW5mbyAlZCBmYWlsZWRcbiIsIGkpOwotCQkJY29udGludWU7Ci0JCX0KLQot CQllbmNvZGVyID0gZHB1X2VuY29kZXJfaW5pdChkZXYsICZpbmZvKTsKLQkJaWYgKElTX0VSUl9P Ul9OVUxMKGVuY29kZXIpKSB7Ci0JCQlEUFVfRVJST1IoImVuY29kZXIgaW5pdCBmYWlsZWQgZm9y IGRzaSAlZFxuIiwgaSk7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCXJjID0gZHNpX2Rpc3BsYXlf ZHJtX2JyaWRnZV9pbml0KGRpc3BsYXksIGVuY29kZXIpOwotCQlpZiAocmMpIHsKLQkJCURQVV9F UlJPUigiZHNpIGJyaWRnZSAlZCBpbml0IGZhaWxlZCwgJWRcbiIsIGksIHJjKTsKLQkJCWRwdV9l bmNvZGVyX2Rlc3Ryb3koZW5jb2Rlcik7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCWNvbm5lY3Rv ciA9IGRwdV9jb25uZWN0b3JfaW5pdChkZXYsCi0JCQkJCWVuY29kZXIsCi0JCQkJCTAsCi0JCQkJ CWRpc3BsYXksCi0JCQkJCSZkc2lfb3BzLAotCQkJCQlEUk1fQ09OTkVDVE9SX1BPTExfSFBELAot CQkJCQlEUk1fTU9ERV9DT05ORUNUT1JfRFNJKTsKLQkJaWYgKGNvbm5lY3RvcikgewotCQkJcHJp di0+ZW5jb2RlcnNbcHJpdi0+bnVtX2VuY29kZXJzKytdID0gZW5jb2RlcjsKLQkJfSBlbHNlIHsK LQkJCURQVV9FUlJPUigiZHNpICVkIGNvbm5lY3RvciBpbml0IGZhaWxlZFxuIiwgaSk7Ci0JCQlk c2lfZGlzcGxheV9kcm1fYnJpZGdlX2RlaW5pdChkaXNwbGF5KTsKLQkJCWRwdV9lbmNvZGVyX2Rl c3Ryb3koZW5jb2Rlcik7Ci0JCX0KLQl9Ci19Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19EUk1f TVNNX1dSSVRFQkFDSwotc3RhdGljIHZvaWQgX2RwdV9rbXNfaW5pdGlhbGl6ZV93YihzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2LAotCQkJCSAgIHN0cnVjdCBtc21fZHJtX3ByaXZhdGUgKnByaXYsCi0J CQkJICAgc3RydWN0IGRwdV9rbXMgKmRwdV9rbXMsCi0JCQkJICAgdW5zaWduZWQgbWF4X2VuY29k ZXJzKQorCQkJCSAgICBzdHJ1Y3QgZHB1X2ttcyAqZHB1X2ttcykKIHsKLQlzdGF0aWMgY29uc3Qg c3RydWN0IGRwdV9jb25uZWN0b3Jfb3BzIHdiX29wcyA9IHsKLQkJLnBvc3RfaW5pdCA9ICAgIGRw dV93Yl9jb25uZWN0b3JfcG9zdF9pbml0LAotCQkuZGV0ZWN0ID0gICAgICAgZHB1X3diX2Nvbm5l Y3Rvcl9kZXRlY3QsCi0JCS5nZXRfbW9kZXMgPSAgICBkcHVfd2JfY29ubmVjdG9yX2dldF9tb2Rl cywKLQkJLnNldF9wcm9wZXJ0eSA9IGRwdV93Yl9jb25uZWN0b3Jfc2V0X3Byb3BlcnR5LAotCQku Z2V0X2luZm8gPSAgICAgZHB1X3diX2dldF9pbmZvLAotCQkuc29mdF9yZXNldCA9ICAgTlVMTCwK LQkJLmdldF9tb2RlX2luZm8gPSBkcHVfd2JfZ2V0X21vZGVfaW5mbywKLQkJLmdldF9kc3RfZm9y bWF0ID0gTlVMTAotCX07Ci0Jc3RydWN0IG1zbV9kaXNwbGF5X2luZm8gaW5mbzsKLQlzdHJ1Y3Qg ZHJtX2VuY29kZXIgKmVuY29kZXI7Ci0Jdm9pZCAqZGlzcGxheSwgKmNvbm5lY3RvcjsKKwlzdHJ1 Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIgPSBOVUxMOwogCWludCBpLCByYzsKIAotCS8qIHdiICov Ci0JZm9yIChpID0gMDsgaSA8IGRwdV9rbXMtPndiX2Rpc3BsYXlfY291bnQgJiYKLQkJcHJpdi0+ bnVtX2VuY29kZXJzIDwgbWF4X2VuY29kZXJzOyArK2kpIHsKLQkJZGlzcGxheSA9IGRwdV9rbXMt PndiX2Rpc3BsYXlzW2ldOwotCQllbmNvZGVyID0gTlVMTDsKLQotCQltZW1zZXQoJmluZm8sIDB4 MCwgc2l6ZW9mKGluZm8pKTsKLQkJcmMgPSBkcHVfd2JfZ2V0X2luZm8oJmluZm8sIGRpc3BsYXkp OwotCQlpZiAocmMpIHsKLQkJCURQVV9FUlJPUigid2IgZ2V0X2luZm8gJWQgZmFpbGVkXG4iLCBp KTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJZW5jb2RlciA9IGRwdV9lbmNvZGVyX2luaXQoZGV2 LCAmaW5mbyk7Ci0JCWlmIChJU19FUlJfT1JfTlVMTChlbmNvZGVyKSkgewotCQkJRFBVX0VSUk9S KCJlbmNvZGVyIGluaXQgZmFpbGVkIGZvciB3YiAlZFxuIiwgaSk7Ci0JCQljb250aW51ZTsKLQkJ fQotCi0JCXJjID0gZHB1X3diX2RybV9pbml0KGRpc3BsYXksIGVuY29kZXIpOwotCQlpZiAocmMp IHsKLQkJCURQVV9FUlJPUigid2IgYnJpZGdlICVkIGluaXQgZmFpbGVkLCAlZFxuIiwgaSwgcmMp OwotCQkJZHB1X2VuY29kZXJfZGVzdHJveShlbmNvZGVyKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0K LQkJY29ubmVjdG9yID0gZHB1X2Nvbm5lY3Rvcl9pbml0KGRldiwKLQkJCQllbmNvZGVyLAotCQkJ CTAsCi0JCQkJZGlzcGxheSwKLQkJCQkmd2Jfb3BzLAotCQkJCURSTV9DT05ORUNUT1JfUE9MTF9I UEQsCi0JCQkJRFJNX01PREVfQ09OTkVDVE9SX1ZJUlRVQUwpOwotCQlpZiAoY29ubmVjdG9yKSB7 Ci0JCQlwcml2LT5lbmNvZGVyc1twcml2LT5udW1fZW5jb2RlcnMrK10gPSBlbmNvZGVyOwotCQl9 IGVsc2UgewotCQkJRFBVX0VSUk9SKCJ3YiAlZCBjb25uZWN0b3IgaW5pdCBmYWlsZWRcbiIsIGkp OwotCQkJZHB1X3diX2RybV9kZWluaXQoZGlzcGxheSk7Ci0JCQlkcHVfZW5jb2Rlcl9kZXN0cm95 KGVuY29kZXIpOwotCQl9CisJLypUT0RPOiBTdXBwb3J0IHR3byBpbmRlcGVuZGVudCBEU0kgY29u bmVjdG9ycyAqLworCWVuY29kZXIgPSBkcHVfZW5jb2Rlcl9pbml0KGRldiwgRFJNX01PREVfQ09O TkVDVE9SX0RTSSk7CisJaWYgKElTX0VSUl9PUl9OVUxMKGVuY29kZXIpKSB7CisJCURQVV9FUlJP UigiZW5jb2RlciBpbml0IGZhaWxlZCBmb3IgZHNpIGRpc3BsYXlcbiIpOworCQlyZXR1cm47CiAJ fQotfQotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfRFJNX01TTV9ESVNQTEFZUE9SVAotc3RhdGlj IHZvaWQgX2RwdV9rbXNfaW5pdGlhbGl6ZV9kcChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAotCQkJ CSAgIHN0cnVjdCBtc21fZHJtX3ByaXZhdGUgKnByaXYsCi0JCQkJICAgc3RydWN0IGRwdV9rbXMg KmRwdV9rbXMsCi0JCQkJICAgdW5zaWduZWQgbWF4X2VuY29kZXJzKQotewotCXN0YXRpYyBjb25z dCBzdHJ1Y3QgZHB1X2Nvbm5lY3Rvcl9vcHMgZHBfb3BzID0gewotCQkucG9zdF9pbml0ICA9IGRw X2Nvbm5lY3Rvcl9wb3N0X2luaXQsCi0JCS5kZXRlY3QgICAgID0gZHBfY29ubmVjdG9yX2RldGVj dCwKLQkJLmdldF9tb2RlcyAgPSBkcF9jb25uZWN0b3JfZ2V0X21vZGVzLAotCQkubW9kZV92YWxp ZCA9IGRwX2Nvbm5lY3Rvcl9tb2RlX3ZhbGlkLAotCQkuZ2V0X2luZm8gICA9IGRwX2Nvbm5lY3Rv cl9nZXRfaW5mbywKLQkJLmdldF9tb2RlX2luZm8gID0gZHBfY29ubmVjdG9yX2dldF9tb2RlX2lu Zm8sCi0JCS5zZW5kX2hwZF9ldmVudCA9IGRwX2Nvbm5lY3Rvcl9zZW5kX2hwZF9ldmVudCwKLQl9 OwotCXN0cnVjdCBtc21fZGlzcGxheV9pbmZvIGluZm87Ci0Jc3RydWN0IGRybV9lbmNvZGVyICpl bmNvZGVyOwotCXZvaWQgKmRpc3BsYXksICpjb25uZWN0b3I7Ci0JaW50IGksIHJjOwogCi0JLyog ZHAgKi8KLQlmb3IgKGkgPSAwOyBpIDwgZHB1X2ttcy0+ZHBfZGlzcGxheV9jb3VudCAmJgotCQkJ cHJpdi0+bnVtX2VuY29kZXJzIDwgbWF4X2VuY29kZXJzOyArK2kpIHsKLQkJZGlzcGxheSA9IGRw dV9rbXMtPmRwX2Rpc3BsYXlzW2ldOwotCQllbmNvZGVyID0gTlVMTDsKKwlwcml2LT5lbmNvZGVy c1twcml2LT5udW1fZW5jb2RlcnMrK10gPSBlbmNvZGVyOwogCi0JCW1lbXNldCgmaW5mbywgMHgw LCBzaXplb2YoaW5mbykpOwotCQlyYyA9IGRwX2Nvbm5lY3Rvcl9nZXRfaW5mbygmaW5mbywgZGlz cGxheSk7Ci0JCWlmIChyYykgewotCQkJRFBVX0VSUk9SKCJkcCBnZXRfaW5mbyAlZCBmYWlsZWRc biIsIGkpOwotCQkJY29udGludWU7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocHJpdi0+ ZHNpKTsgaSsrKSB7CisJCWlmICghcHJpdi0+ZHNpW2ldKSB7CisJCQlEUFVfREVCVUcoImludmFs aWQgbXNtX2RzaSBmb3IgY3RybCAlZFxuIiwgaSk7CisJCQlyZXR1cm47CiAJCX0KIAotCQllbmNv ZGVyID0gZHB1X2VuY29kZXJfaW5pdChkZXYsICZpbmZvKTsKLQkJaWYgKElTX0VSUl9PUl9OVUxM KGVuY29kZXIpKSB7Ci0JCQlEUFVfRVJST1IoImRwIGVuY29kZXIgaW5pdCBmYWlsZWQgJWRcbiIs IGkpOwotCQkJY29udGludWU7Ci0JCX0KLQotCQlyYyA9IGRwX2RybV9icmlkZ2VfaW5pdChkaXNw bGF5LCBlbmNvZGVyKTsKKwkJcmMgPSBtc21fZHNpX21vZGVzZXRfaW5pdChwcml2LT5kc2lbaV0s IGRldiwgZW5jb2Rlcik7CiAJCWlmIChyYykgewotCQkJRFBVX0VSUk9SKCJkcCBicmlkZ2UgJWQg aW5pdCBmYWlsZWQsICVkXG4iLCBpLCByYyk7Ci0JCQlkcHVfZW5jb2Rlcl9kZXN0cm95KGVuY29k ZXIpOworCQkJRFBVX0VSUk9SKCJtb2Rlc2V0X2luaXQgZmFpbGVkIGZvciBkc2lbJWRdLCByYyA9 ICVkXG4iLAorCQkJCWksIHJjKTsKIAkJCWNvbnRpbnVlOwogCQl9Ci0KLQkJY29ubmVjdG9yID0g ZHB1X2Nvbm5lY3Rvcl9pbml0KGRldiwKLQkJCQkJZW5jb2RlciwKLQkJCQkJTlVMTCwKLQkJCQkJ ZGlzcGxheSwKLQkJCQkJJmRwX29wcywKLQkJCQkJRFJNX0NPTk5FQ1RPUl9QT0xMX0hQRCwKLQkJ CQkJRFJNX01PREVfQ09OTkVDVE9SX0Rpc3BsYXlQb3J0KTsKLQkJaWYgKGNvbm5lY3Rvcikgewot CQkJcHJpdi0+ZW5jb2RlcnNbcHJpdi0+bnVtX2VuY29kZXJzKytdID0gZW5jb2RlcjsKLQkJfSBl bHNlIHsKLQkJCURQVV9FUlJPUigiZHAgJWQgY29ubmVjdG9yIGluaXQgZmFpbGVkXG4iLCBpKTsK LQkJCWRwX2RybV9icmlkZ2VfZGVpbml0KGRpc3BsYXkpOwotCQkJZHB1X2VuY29kZXJfZGVzdHJv eShlbmNvZGVyKTsKLQkJfQogCX0KIH0KLSNlbmRpZgogCiAvKioKICAqIF9kcHVfa21zX3NldHVw X2Rpc3BsYXlzIC0gY3JlYXRlIGVuY29kZXJzLCBicmlkZ2VzIGFuZCBjb25uZWN0b3JzCkBAIC04 NzcsMjYgKzU2OSwxMiBAQCBzdGF0aWMgdm9pZCBfZHB1X2ttc19zZXR1cF9kaXNwbGF5cyhzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2LAogCQkJCSAgICBzdHJ1Y3QgbXNtX2RybV9wcml2YXRlICpwcml2 LAogCQkJCSAgICBzdHJ1Y3QgZHB1X2ttcyAqZHB1X2ttcykKIHsKLQl1bnNpZ25lZCBtYXhfZW5j b2RlcnM7Ci0KLQltYXhfZW5jb2RlcnMgPSBkcHVfa21zLT5kc2lfZGlzcGxheV9jb3VudCArIGRw dV9rbXMtPndiX2Rpc3BsYXlfY291bnQgKwotCQkJCWRwdV9rbXMtPmRwX2Rpc3BsYXlfY291bnQ7 Ci0JaWYgKG1heF9lbmNvZGVycyA+IEFSUkFZX1NJWkUocHJpdi0+ZW5jb2RlcnMpKSB7Ci0JCW1h eF9lbmNvZGVycyA9IEFSUkFZX1NJWkUocHJpdi0+ZW5jb2RlcnMpOwotCQlEUFVfRVJST1IoImNh cHBpbmcgbnVtYmVyIG9mIGRpc3BsYXlzIHRvICVkIiwgbWF4X2VuY29kZXJzKTsKLQl9Ci0KLSNp ZmRlZiBDT05GSUdfRFJNX01TTV9EU0lfU1RBR0lORwotCV9kcHVfa21zX2luaXRpYWxpemVfZHNp KGRldiwgcHJpdiwgZHB1X2ttcywgbWF4X2VuY29kZXJzKTsKLSNlbmRpZgorCV9kcHVfa21zX2lu aXRpYWxpemVfZHNpKGRldiwgcHJpdiwgZHB1X2ttcyk7CiAKLSNpZmRlZiBDT05GSUdfRFJNX01T TV9XUklURUJBQ0sKLQlfZHB1X2ttc19pbml0aWFsaXplX3diKGRldiwgcHJpdiwgZHB1X2ttcywg bWF4X2VuY29kZXJzKTsKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0RSTV9NU01fRElTUExBWVBP UlQKLQlfZHB1X2ttc19pbml0aWFsaXplX2RwKGRldiwgcHJpdiwgZHB1X2ttcywgbWF4X2VuY29k ZXJzKTsKLSNlbmRpZgorCS8qKgorCSAqIEV4dGVuZCB0aGlzIGZ1bmN0aW9uIHRvIGluaXRpYWxp emUgb3RoZXIKKwkgKiB0eXBlcyBvZiBkaXNwbGF5cworCSAqLwogfQogCiBzdGF0aWMgdm9pZCBf ZHB1X2ttc19kcm1fb2JqX2Rlc3Ryb3koc3RydWN0IGRwdV9rbXMgKmRwdV9rbXMpCkBAIC05MzEs OCArNjA5LDYgQEAgc3RhdGljIHZvaWQgX2RwdV9rbXNfZHJtX29ial9kZXN0cm95KHN0cnVjdCBk cHVfa21zICpkcHVfa21zKQogCWZvciAoaSA9IDA7IGkgPCBwcml2LT5udW1fZW5jb2RlcnM7IGkr KykKIAkJcHJpdi0+ZW5jb2RlcnNbaV0tPmZ1bmNzLT5kZXN0cm95KHByaXYtPmVuY29kZXJzW2ld KTsKIAlwcml2LT5udW1fZW5jb2RlcnMgPSAwOwotCi0JX2RwdV9rbXNfcmVsZWFzZV9kaXNwbGF5 cyhkcHVfa21zKTsKIH0KIAogc3RhdGljIGludCBfZHB1X2ttc19kcm1fb2JqX2luaXQoc3RydWN0 IGRwdV9rbXMgKmRwdV9rbXMpCkBAIC05NjMsMTIgKzYzOSwxMiBAQCBzdGF0aWMgaW50IF9kcHVf a21zX2RybV9vYmpfaW5pdChzdHJ1Y3QgZHB1X2ttcyAqZHB1X2ttcykKIAlyZXQgPSBkcHVfY29y ZV9pcnFfZG9tYWluX2FkZChkcHVfa21zKTsKIAlpZiAocmV0KQogCQlnb3RvIGZhaWxfaXJxOwor CiAJLyoKLQkgKiBRdWVyeSBmb3IgdW5kZXJseWluZyBkaXNwbGF5IGRyaXZlcnMsIGFuZCBjcmVh dGUgY29ubmVjdG9ycywKLQkgKiBicmlkZ2VzIGFuZCBlbmNvZGVycyBmb3IgdGhlbS4KKwkgKiBD cmVhdGUgZW5jb2RlciBhbmQgcXVlcnkgZGlzcGxheSBkcml2ZXJzIHRvIGNyZWF0ZQorCSAqIGJy aWRnZXMgYW5kIGNvbm5lY3RvcnMKIAkgKi8KLQlpZiAoIV9kcHVfa21zX2dldF9kaXNwbGF5cyhk cHVfa21zKSkKLQkJKHZvaWQpX2RwdV9rbXNfc2V0dXBfZGlzcGxheXMoZGV2LCBwcml2LCBkcHVf a21zKTsKKwlfZHB1X2ttc19zZXR1cF9kaXNwbGF5cyhkZXYsIHByaXYsIGRwdV9rbXMpOwogCiAJ bWF4X2NydGNfY291bnQgPSBtaW4oY2F0YWxvZy0+bWl4ZXJfY291bnQsIHByaXYtPm51bV9lbmNv ZGVycyk7CiAKQEAgLTEzODYsOCArMTA2Miw2IEBAIHN0YXRpYyB2b2lkIF9kcHVfa21zX2h3X2Rl c3Ryb3koc3RydWN0IGRwdV9rbXMgKmRwdV9rbXMsCiAJCWRwdV9wb3dlcl9oYW5kbGVfdW5yZWdp c3Rlcl9ldmVudCgKIAkJCQkmcHJpdi0+cGhhbmRsZSwgZHB1X2ttcy0+cG93ZXJfZXZlbnQpOwog Ci0JX2RwdV9rbXNfcmVsZWFzZV9kaXNwbGF5cyhkcHVfa21zKTsKLQogCS8qIHNhZmUgdG8gY2Fs bCB0aGVzZSBtb3JlIHRoYW4gb25jZSBkdXJpbmcgc2h1dGRvd24gKi8KIAlfZHB1X2RlYnVnZnNf ZGVzdHJveShkcHVfa21zKTsKIAlfZHB1X2ttc19tbXVfZGVzdHJveShkcHVfa21zKTsKQEAgLTE1 OTAsNTMgKzEyNjQsMTAgQEAgc3RhdGljIGludCBkcHVfa21zX2F0b21pY19jaGVjayhzdHJ1Y3Qg bXNtX2ttcyAqa21zLAogCQlkcHVfa21zLT5hc3BhY2VbZG9tYWluXSA6IE5VTEw7CiB9CiAKLXN0 YXRpYyB2b2lkIF9kcHVfa21zX3Bvc3Rfb3BlbihzdHJ1Y3QgbXNtX2ttcyAqa21zLCBzdHJ1Y3Qg ZHJtX2ZpbGUgKmZpbGUpCi17Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IE5VTEw7Ci0Jc3Ry dWN0IGRwdV9rbXMgKmRwdV9rbXMgPSBOVUxMOwotCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25u ZWN0b3IgPSBOVUxMOwotCXN0cnVjdCBkcm1fY29ubmVjdG9yX2xpc3RfaXRlciBjb25uX2l0ZXI7 Ci0Jc3RydWN0IGRwdV9jb25uZWN0b3IgKmRwdV9jb25uID0gTlVMTDsKLQotCWlmICgha21zKSB7 Ci0JCURQVV9FUlJPUigiaW52YWxpZCBrbXNcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JZHB1X2tt cyA9IHRvX2RwdV9rbXMoa21zKTsKLQlkZXYgPSBkcHVfa21zLT5kZXY7Ci0KLQlpZiAoIWRldikg ewotCQlEUFVfRVJST1IoImludmFsaWQgZGV2aWNlXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCWlm ICghZGV2LT5tb2RlX2NvbmZpZy5wb2xsX2VuYWJsZWQpCi0JCXJldHVybjsKLQotCW11dGV4X2xv Y2soJmRldi0+bW9kZV9jb25maWcubXV0ZXgpOwotCWRybV9jb25uZWN0b3JfbGlzdF9pdGVyX2Jl Z2luKGRldiwgJmNvbm5faXRlcik7Ci0JZHJtX2Zvcl9lYWNoX2Nvbm5lY3Rvcl9pdGVyKGNvbm5l Y3RvciwgJmNvbm5faXRlcikgewotCQkvKiBPbmx5IGhhbmRsZSBIUEQgY2FwYWJsZSBjb25uZWN0 b3JzLiAqLwotCQlpZiAoIShjb25uZWN0b3ItPnBvbGxlZCAmIERSTV9DT05ORUNUT1JfUE9MTF9I UEQpKQotCQkJY29udGludWU7Ci0KLQkJZHB1X2Nvbm4gPSB0b19kcHVfY29ubmVjdG9yKGNvbm5l Y3Rvcik7Ci0KLQkJaWYgKGRwdV9jb25uLT5vcHMuc2VuZF9ocGRfZXZlbnQpCi0JCQlkcHVfY29u bi0+b3BzLnNlbmRfaHBkX2V2ZW50KGRwdV9jb25uLT5kaXNwbGF5KTsKLQl9Ci0JZHJtX2Nvbm5l Y3Rvcl9saXN0X2l0ZXJfZW5kKCZjb25uX2l0ZXIpOwotCW11dGV4X3VubG9jaygmZGV2LT5tb2Rl X2NvbmZpZy5tdXRleCk7Ci0KLX0KLQogc3RhdGljIGludCBkcHVfa21zX3BtX3N1c3BlbmQoc3Ry dWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZGV2OwogCXN0cnVjdCBk cm1fbW9kZXNldF9hY3F1aXJlX2N0eCBjdHg7Ci0Jc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm47 Ci0Jc3RydWN0IGRybV9jb25uZWN0b3JfbGlzdF9pdGVyIGNvbm5faXRlcjsKIAlzdHJ1Y3QgZHJt X2F0b21pY19zdGF0ZSAqc3RhdGU7CiAJc3RydWN0IGRwdV9rbXMgKmRwdV9rbXM7CiAJaW50IHJl dCA9IDAsIG51bV9jcnRjcyA9IDA7CkBAIC0xNjgwLDQ1ICsxMzExLDYgQEAgc3RhdGljIGludCBk cHVfa21zX3BtX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogCX0KIAogCXN0YXRlLT5hY3F1 aXJlX2N0eCA9ICZjdHg7Ci0JZHJtX2Nvbm5lY3Rvcl9saXN0X2l0ZXJfYmVnaW4oZGRldiwgJmNv bm5faXRlcik7Ci0JZHJtX2Zvcl9lYWNoX2Nvbm5lY3Rvcl9pdGVyKGNvbm4sICZjb25uX2l0ZXIp IHsKLQkJc3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlOwotCQl1aW50NjRfdCBscDsK LQotCQlpZiAoIWNvbm4tPnN0YXRlIHx8ICFjb25uLT5zdGF0ZS0+Y3J0YyB8fAotCQkJCWNvbm4t PmRwbXMgIT0gRFJNX01PREVfRFBNU19PTikKLQkJCWNvbnRpbnVlOwotCi0JCWxwID0gZHB1X2Nv bm5lY3Rvcl9nZXRfbHAoY29ubik7Ci0JCWlmIChscCA9PSBEUFVfTU9ERV9EUE1TX0xQMSkgewot CQkJLyogdHJhbnNpdGlvbiBMUDEtPkxQMiBvbiBwbSBzdXNwZW5kICovCi0JCQlyZXQgPSBkcHVf Y29ubmVjdG9yX3NldF9wcm9wZXJ0eV9mb3JfY29tbWl0KGNvbm4sIHN0YXRlLAotCQkJCQlDT05O RUNUT1JfUFJPUF9MUCwgRFBVX01PREVfRFBNU19MUDIpOwotCQkJaWYgKHJldCkgewotCQkJCURS TV9FUlJPUigiZmFpbGVkIHRvIHNldCBscDIgZm9yIGNvbm4gJWRcbiIsCi0JCQkJCQljb25uLT5i YXNlLmlkKTsKLQkJCQlkcm1fYXRvbWljX3N0YXRlX3B1dChzdGF0ZSk7Ci0JCQkJZ290byB1bmxv Y2s7Ci0JCQl9Ci0JCX0KLQotCQlpZiAobHAgIT0gRFBVX01PREVfRFBNU19MUDIpIHsKLQkJCS8q IGZvcmNlIENSVEMgdG8gYmUgaW5hY3RpdmUgKi8KLQkJCWNydGNfc3RhdGUgPSBkcm1fYXRvbWlj X2dldF9jcnRjX3N0YXRlKHN0YXRlLAotCQkJCQljb25uLT5zdGF0ZS0+Y3J0Yyk7Ci0JCQlpZiAo SVNfRVJSX09SX05VTEwoY3J0Y19zdGF0ZSkpIHsKLQkJCQlEUk1fRVJST1IoImZhaWxlZCB0byBn ZXQgY3J0YyAlZCBzdGF0ZVxuIiwKLQkJCQkJCWNvbm4tPnN0YXRlLT5jcnRjLT5iYXNlLmlkKTsK LQkJCQlkcm1fYXRvbWljX3N0YXRlX3B1dChzdGF0ZSk7Ci0JCQkJZ290byB1bmxvY2s7Ci0JCQl9 Ci0KLQkJCWlmIChscCAhPSBEUFVfTU9ERV9EUE1TX0xQMSkKLQkJCQljcnRjX3N0YXRlLT5hY3Rp dmUgPSBmYWxzZTsKLQkJCSsrbnVtX2NydGNzOwotCQl9Ci0JfQotCWRybV9jb25uZWN0b3JfbGlz dF9pdGVyX2VuZCgmY29ubl9pdGVyKTsKIAogCS8qIGNoZWNrIGZvciBub3RoaW5nIHRvIGRvICov CiAJaWYgKG51bV9jcnRjcyA9PSAwKSB7CkBAIC0xNzkwLDYgKzEzODIsMzQgQEAgc3RhdGljIGlu dCBkcHVfa21zX3BtX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiAJcmV0dXJuIDA7CiB9CiAK K3ZvaWQgX2RwdV9rbXNfc2V0X2VuY29kZXJfbW9kZShzdHJ1Y3QgbXNtX2ttcyAqa21zLAorCQkJ CSBzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsCisJCQkJIGJvb2wgY21kX21vZGUpCit7CisJ c3RydWN0IG1zbV9kaXNwbGF5X2luZm8gaW5mbzsKKwlzdHJ1Y3QgbXNtX2RybV9wcml2YXRlICpw cml2ID0gZW5jb2Rlci0+ZGV2LT5kZXZfcHJpdmF0ZTsKKwlpbnQgaSwgcmMgPSAwOworCisJbWVt c2V0KCZpbmZvLCAwLCBzaXplb2YoaW5mbykpOworCisJaW5mby5pbnRmX3R5cGUgPSBlbmNvZGVy LT5lbmNvZGVyX3R5cGU7CisJaW5mby5jYXBhYmlsaXRpZXMgPSBjbWRfbW9kZSA/IE1TTV9ESVNQ TEFZX0NBUF9DTURfTU9ERSA6CisJCQlNU01fRElTUExBWV9DQVBfVklEX01PREU7CisKKwkvKiBU T0RPOiBObyBzdXBwb3J0IGZvciBEU0kgc3dhcCAqLworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9T SVpFKHByaXYtPmRzaSk7IGkrKykgeworCQlpZiAocHJpdi0+ZHNpW2ldKSB7CisJCQlpbmZvLmhf dGlsZV9pbnN0YW5jZVtpbmZvLm51bV9vZl9oX3RpbGVzXSA9IGk7CisJCQlpbmZvLm51bV9vZl9o X3RpbGVzKys7CisJCX0KKwl9CisKKwlyYyA9IGRwdV9lbmNvZGVyX3NldHVwKGVuY29kZXItPmRl diwgZW5jb2RlciwgJmluZm8pOworCWlmIChyYykKKwkJRFBVX0VSUk9SKCJmYWlsZWQgdG8gc2V0 dXAgRFBVIGVuY29kZXIgJWQ6IHJjOiVkXG4iLAorCQkJZW5jb2Rlci0+YmFzZS5pZCwgcmMpOwor fQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IG1zbV9rbXNfZnVuY3Mga21zX2Z1bmNzID0gewogCS5o d19pbml0ICAgICAgICAgPSBkcHVfa21zX2h3X2luaXQsCiAJLnBvc3Rpbml0ICAgICAgICA9IGRw dV9rbXNfcG9zdGluaXQsCkBAIC0xODEzLDcgKzE0MzMsNyBAQCBzdGF0aWMgaW50IGRwdV9rbXNf cG1fcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIAkucG1fcmVzdW1lICAgICAgID0gZHB1X2tt c19wbV9yZXN1bWUsCiAJLmRlc3Ryb3kgICAgICAgICA9IGRwdV9rbXNfZGVzdHJveSwKIAkuZ2V0 X2FkZHJlc3Nfc3BhY2UgPSBfZHB1X2ttc19nZXRfYWRkcmVzc19zcGFjZSwKLQkucG9zdG9wZW4g PSBfZHB1X2ttc19wb3N0X29wZW4sCisJLnNldF9lbmNvZGVyX21vZGUgPSBfZHB1X2ttc19zZXRf ZW5jb2Rlcl9tb2RlLAogfTsKIAogLyogdGhlIGNhbGxlciBhcGkgbmVlZHMgdG8gdHVybiBvbiBj bG9jayBiZWZvcmUgY2FsbGluZyBpdCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21z bS9kaXNwL2RwdTEvZHB1X2ttcy5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1 X2ttcy5oCmluZGV4IDM3MTFkYWY4Li41YjBjMDgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9k cm0vbXNtL2Rpc3AvZHB1MS9kcHVfa21zLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNw L2RwdTEvZHB1X2ttcy5oCkBAIC0yMDAsMTIgKzIwMCw2IEBAIHN0cnVjdCBkcHVfa21zIHsKIAog CXN0cnVjdCBkcHVfaHdfdmJpZiAqaHdfdmJpZltWQklGX01BWF07CiAJc3RydWN0IGRwdV9od19t ZHAgKmh3X21kcDsKLQlpbnQgZHNpX2Rpc3BsYXlfY291bnQ7Ci0Jdm9pZCAqKmRzaV9kaXNwbGF5 czsKLQlpbnQgd2JfZGlzcGxheV9jb3VudDsKLQl2b2lkICoqd2JfZGlzcGxheXM7Ci0JaW50IGRw X2Rpc3BsYXlfY291bnQ7Ci0Jdm9pZCAqKmRwX2Rpc3BsYXlzOwogCiAJYm9vbCBoYXNfZGFuZ2Vy X2N0cmw7CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1 X3JtLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfcm0uYwppbmRleCBjOGMx MmQzLi5iZjFiYzEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9k cHVfcm0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfcm0uYwpAQCAt MjMsNyArMjMsNiBAQAogI2luY2x1ZGUgImRwdV9od19pbnRmLmgiCiAjaW5jbHVkZSAiZHB1X2h3 X3diLmgiCiAjaW5jbHVkZSAiZHB1X2VuY29kZXIuaCIKLSNpbmNsdWRlICJkcHVfY29ubmVjdG9y LmgiCiAKICNkZWZpbmUgUkVTRVJWRURfQllfT1RIRVIoaCwgcikgXAogCSgoaCktPnJzdnAgJiYg KChoKS0+cnN2cC0+ZW5jX2lkICE9IChyKS0+ZW5jX2lkKSkKQEAgLTE1OCw2ICsxNTcsMTggQEAg c3RydWN0IGRwdV9od19tZHAgKmRwdV9ybV9nZXRfbWRwKHN0cnVjdCBkcHVfcm0gKnJtKQogCXJl dHVybiBybS0+aHdfbWRwOwogfQogCitlbnVtIGRwdV9ybV90b3BvbG9neV9uYW1lCitkcHVfcm1f Z2V0X3RvcG9sb2d5X25hbWUoc3RydWN0IG1zbV9kaXNwbGF5X3RvcG9sb2d5IHRvcG9sb2d5KQor eworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IERQVV9STV9UT1BPTE9HWV9NQVg7IGkrKykK KwkJaWYgKFJNX0lTX1RPUE9MT0dZX01BVENIKGdfdG9wX3RhYmxlW2ldLCB0b3BvbG9neSkpCisJ CQlyZXR1cm4gZ190b3BfdGFibGVbaV0udG9wX25hbWU7CisKKwlyZXR1cm4gRFBVX1JNX1RPUE9M T0dZX05PTkU7Cit9CisKIHZvaWQgZHB1X3JtX2luaXRfaHdfaXRlcigKIAkJc3RydWN0IGRwdV9y bV9od19pdGVyICppdGVyLAogCQl1aW50MzJfdCBlbmNfaWQsCkBAIC05NTQsMjAgKzk2NSwxOSBA QCBzdGF0aWMgaW50IF9kcHVfcm1fcG9wdWxhdGVfcmVxdWlyZW1lbnRzKAogCQlzdHJ1Y3QgZHJt X2VuY29kZXIgKmVuYywKIAkJc3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAogCQlz dHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubl9zdGF0ZSwKLQkJc3RydWN0IGRwdV9ybV9y ZXF1aXJlbWVudHMgKnJlcXMpCisJCXN0cnVjdCBkcHVfcm1fcmVxdWlyZW1lbnRzICpyZXFzLAor CQlzdHJ1Y3QgbXNtX2Rpc3BsYXlfdG9wb2xvZ3kgcmVxX3RvcG9sb2d5KQogewogCWNvbnN0IHN0 cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlID0gJmNydGNfc3RhdGUtPm1vZGU7CiAJaW50IGk7 CiAKIAltZW1zZXQocmVxcywgMCwgc2l6ZW9mKCpyZXFzKSk7CiAKLQlyZXFzLT50b3BfY3RybCA9 IGRwdV9jb25uZWN0b3JfZ2V0X3Byb3BlcnR5KGNvbm5fc3RhdGUsCi0JCQlDT05ORUNUT1JfUFJP UF9UT1BPTE9HWV9DT05UUk9MKTsKIAlkcHVfZW5jb2Rlcl9nZXRfaHdfcmVzb3VyY2VzKGVuYywg JnJlcXMtPmh3X3JlcywgY29ubl9zdGF0ZSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgRFBVX1JNX1RP UE9MT0dZX01BWDsgaSsrKSB7CiAJCWlmIChSTV9JU19UT1BPTE9HWV9NQVRDSChnX3RvcF90YWJs ZVtpXSwKLQkJCQkJcmVxcy0+aHdfcmVzLnRvcG9sb2d5KSkgeworCQkJCQlyZXFfdG9wb2xvZ3kp KSB7CiAJCQlyZXFzLT50b3BvbG9neSA9ICZnX3RvcF90YWJsZVtpXTsKIAkJCWJyZWFrOwogCQl9 CkBAIC05NzgsMTAgKzk4OCw2IEBAIHN0YXRpYyBpbnQgX2RwdV9ybV9wb3B1bGF0ZV9yZXF1aXJl bWVudHMoCiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCS8qIERTQyBibG9ja3MgYXJlIGhhcmR3 aXJlZCBmb3IgY29udHJvbCBwYXRoIDAgYW5kIDEgKi8KLQlpZiAocmVxcy0+dG9wb2xvZ3ktPm51 bV9jb21wX2VuYykKLQkJcmVxcy0+dG9wX2N0cmwgfD0gQklUKERQVV9STV9UT1BDVExfRFNQUCk7 Ci0KIAkvKioKIAkgKiBTZXQgdGhlIHJlcXVpcmVtZW50IGJhc2VkIG9uIGNhcHMgaWYgbm90IHNl dCBmcm9tIHVzZXIgc3BhY2UKIAkgKiBUaGlzIHdpbGwgZW5zdXJlIHRvIHNlbGVjdCBMTSB0aWVk IHdpdGggRFMgYmxvY2tzCkBAIC0xMDg5LDcgKzEwOTUsNyBAQCB2b2lkIGRwdV9ybV9yZWxlYXNl KHN0cnVjdCBkcHVfcm0gKnJtLCBzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuYykKIHsKIAlzdHJ1Y3Qg ZHB1X3JtX3JzdnAgKnJzdnA7CiAJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm47Ci0JdWludDY0 X3QgdG9wX2N0cmw7CisJdWludDY0X3QgdG9wX2N0cmwgPSAwOwogCiAJaWYgKCFybSB8fCAhZW5j KSB7CiAJCURQVV9FUlJPUigiaW52YWxpZCBwYXJhbXNcbiIpOwpAQCAtMTExMCw5ICsxMTE2LDYg QEAgdm9pZCBkcHVfcm1fcmVsZWFzZShzdHJ1Y3QgZHB1X3JtICpybSwgc3RydWN0IGRybV9lbmNv ZGVyICplbmMpCiAJCWdvdG8gZW5kOwogCX0KIAotCXRvcF9jdHJsID0gZHB1X2Nvbm5lY3Rvcl9n ZXRfcHJvcGVydHkoY29ubi0+c3RhdGUsCi0JCQlDT05ORUNUT1JfUFJPUF9UT1BPTE9HWV9DT05U Uk9MKTsKLQogCWlmICh0b3BfY3RybCAmIEJJVChEUFVfUk1fVE9QQ1RMX1JFU0VSVkVfTE9DSykp IHsKIAkJRFBVX0RFQlVHKCJyc3ZwW3MlZGUlZF0gbm90IHJlbGVhc2luZyBsb2NrZWQgcmVzb3Vy Y2VzXG4iLAogCQkJCXJzdnAtPnNlcSwgcnN2cC0+ZW5jX2lkKTsKQEAgLTExMjAsMTIgKzExMjMs NiBAQCB2b2lkIGRwdV9ybV9yZWxlYXNlKHN0cnVjdCBkcHVfcm0gKnJtLCBzdHJ1Y3QgZHJtX2Vu Y29kZXIgKmVuYykKIAkJRFBVX0RFQlVHKCJyZWxlYXNlIHJzdnBbcyVkZSVkXVxuIiwgcnN2cC0+ c2VxLAogCQkJCXJzdnAtPmVuY19pZCk7CiAJCV9kcHVfcm1fcmVsZWFzZV9yc3ZwKHJtLCByc3Zw LCBjb25uKTsKLQotCQkodm9pZCkgbXNtX3Byb3BlcnR5X3NldF9wcm9wZXJ0eSgKLQkJCQlkcHVf Y29ubmVjdG9yX2dldF9wcm9waW5mbyhjb25uKSwKLQkJCQlkcHVfY29ubmVjdG9yX2dldF9wcm9w ZXJ0eV9zdGF0ZShjb25uLT5zdGF0ZSksCi0JCQkJQ09OTkVDVE9SX1BST1BfVE9QT0xPR1lfTkFN RSwKLQkJCQlEUFVfUk1fVE9QT0xPR1lfTk9ORSk7CiAJfQogCiBlbmQ6CkBAIC0xMTQxLDE4ICsx MTM4LDYgQEAgc3RhdGljIGludCBfZHB1X3JtX2NvbW1pdF9yc3ZwKAogCWVudW0gZHB1X2h3X2Js a190eXBlIHR5cGU7CiAJaW50IHJldCA9IDA7CiAKLQlyZXQgPSBtc21fcHJvcGVydHlfc2V0X3By b3BlcnR5KAotCQkJZHB1X2Nvbm5lY3Rvcl9nZXRfcHJvcGluZm8oY29ubl9zdGF0ZS0+Y29ubmVj dG9yKSwKLQkJCWRwdV9jb25uZWN0b3JfZ2V0X3Byb3BlcnR5X3N0YXRlKGNvbm5fc3RhdGUpLAot CQkJQ09OTkVDVE9SX1BST1BfVE9QT0xPR1lfTkFNRSwKLQkJCXJzdnAtPnRvcG9sb2d5KTsKLQlp ZiAocmV0KSB7Ci0JCURQVV9FUlJPUigiZmFpbGVkIHRvIHNldCB0b3BvbG9neSBuYW1lIHByb3Bl cnR5LCByZXQgJWRcbiIsCi0JCQkJcmV0KTsKLQkJX2RwdV9ybV9yZWxlYXNlX3JzdnAocm0sIHJz dnAsIGNvbm5fc3RhdGUtPmNvbm5lY3Rvcik7Ci0JCXJldHVybiByZXQ7Ci0JfQotCiAJLyogU3dh cCBuZXh0IHJzdnAgdG8gYmUgdGhlIGFjdGl2ZSAqLwogCWZvciAodHlwZSA9IDA7IHR5cGUgPCBE UFVfSFdfQkxLX01BWDsgdHlwZSsrKSB7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnkoYmxrLCAmcm0t Pmh3X2Jsa3NbdHlwZV0sIGxpc3QpIHsKQEAgLTExNzcsNiArMTE2Miw3IEBAIGludCBkcHVfcm1f cmVzZXJ2ZSgKIAkJc3RydWN0IGRybV9lbmNvZGVyICplbmMsCiAJCXN0cnVjdCBkcm1fY3J0Y19z dGF0ZSAqY3J0Y19zdGF0ZSwKIAkJc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5fc3Rh dGUsCisJCXN0cnVjdCBtc21fZGlzcGxheV90b3BvbG9neSB0b3BvbG9neSwKIAkJYm9vbCB0ZXN0 X29ubHkpCiB7CiAJc3RydWN0IGRwdV9ybV9yc3ZwICpyc3ZwX2N1ciwgKnJzdnBfbnh0OwpAQCAt MTIwMiw3ICsxMTg4LDcgQEAgaW50IGRwdV9ybV9yZXNlcnZlKAogCV9kcHVfcm1fcHJpbnRfcnN2 cHMocm0sIERQVV9STV9TVEFHRV9CRUdJTik7CiAKIAlyZXQgPSBfZHB1X3JtX3BvcHVsYXRlX3Jl cXVpcmVtZW50cyhybSwgZW5jLCBjcnRjX3N0YXRlLAotCQkJY29ubl9zdGF0ZSwgJnJlcXMpOwor CQkJY29ubl9zdGF0ZSwgJnJlcXMsIHRvcG9sb2d5KTsKIAlpZiAocmV0KSB7CiAJCURQVV9FUlJP UigiZmFpbGVkIHRvIHBvcHVsYXRlIGh3IHJlcXVpcmVtZW50c1xuIik7CiAJCWdvdG8gZW5kOwpA QCAtMTIzNywxMiArMTIyMyw2IEBAIGludCBkcHVfcm1fcmVzZXJ2ZSgKIAkJX2RwdV9ybV9yZWxl YXNlX3JzdnAocm0sIHJzdnBfY3VyLCBjb25uX3N0YXRlLT5jb25uZWN0b3IpOwogCQlyc3ZwX2N1 ciA9IE5VTEw7CiAJCV9kcHVfcm1fcHJpbnRfcnN2cHMocm0sIERQVV9STV9TVEFHRV9BRlRFUl9D TEVBUik7Ci0JCSh2b2lkKSBtc21fcHJvcGVydHlfc2V0X3Byb3BlcnR5KAotCQkJCWRwdV9jb25u ZWN0b3JfZ2V0X3Byb3BpbmZvKAotCQkJCQkJY29ubl9zdGF0ZS0+Y29ubmVjdG9yKSwKLQkJCQlk cHVfY29ubmVjdG9yX2dldF9wcm9wZXJ0eV9zdGF0ZShjb25uX3N0YXRlKSwKLQkJCQlDT05ORUNU T1JfUFJPUF9UT1BPTE9HWV9OQU1FLAotCQkJCURQVV9STV9UT1BPTE9HWV9OT05FKTsKIAl9CiAK IAkvKiBDaGVjayB0aGUgcHJvcG9zZWQgcmVzZXJ2YXRpb24sIHN0b3JlIGl0IGluIGh3J3MgIm5l eHQiIGZpZWxkICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9k cHVfcm0uaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9ybS5oCmluZGV4IDhh NmNiY2YuLjRjNzc4NzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUx L2RwdV9ybS5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9ybS5oCkBA IC0xMjgsNiArMTI4LDcgQEAgaW50IGRwdV9ybV9pbml0KHN0cnVjdCBkcHVfcm0gKnJtLAogICog QGRybV9lbmM6IERSTSBFbmNvZGVyIGhhbmRsZQogICogQGNydGNfc3RhdGU6IFByb3Bvc2VkIEF0 b21pYyBEUk0gQ1JUQyBTdGF0ZSBoYW5kbGUKICAqIEBjb25uX3N0YXRlOiBQcm9wb3NlZCBBdG9t aWMgRFJNIENvbm5lY3RvciBTdGF0ZSBoYW5kbGUKKyAqIEB0b3BvbG9neTogUG9pbnRlciB0byB0 b3BvbG9neSBpbmZvIGZvciB0aGUgZGlzcGxheQogICogQHRlc3Rfb25seTogQXRvbWljLVRlc3Qg cGhhc2UsIGRpc2NhcmQgcmVzdWx0cyAodW5sZXNzIHByb3BlcnR5IG92ZXJyaWRlcykKICAqIEBS ZXR1cm46IDAgb24gU3VjY2VzcyBvdGhlcndpc2UgLUVSUk9SCiAgKi8KQEAgLTEzNSw2ICsxMzYs NyBAQCBpbnQgZHB1X3JtX3Jlc2VydmUoc3RydWN0IGRwdV9ybSAqcm0sCiAJCXN0cnVjdCBkcm1f ZW5jb2RlciAqZHJtX2VuYywKIAkJc3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAog CQlzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubl9zdGF0ZSwKKwkJc3RydWN0IG1zbV9k aXNwbGF5X3RvcG9sb2d5IHRvcG9sb2d5LAogCQlib29sIHRlc3Rfb25seSk7CiAKIC8qKgpAQCAt MTg3LDQgKzE4OSwxMyBAQCB2b2lkIGRwdV9ybV9pbml0X2h3X2l0ZXIoCiAgKi8KIGludCBkcHVf cm1fY2hlY2tfcHJvcGVydHlfdG9wY3RsKHVpbnQ2NF90IHZhbCk7CiAKKy8qKgorICogZHB1X3Jt X2dldF90b3BvbG9neV9uYW1lIC0gcmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgdGhlIGdpdmVuIHRv cG9sb2d5CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbml0aW9uCisgKiBAdG9w b2xvZ3k6IHRvcG9sb2d5IGRlZmluaXRpb24KKyAqIEBSZXR1cm46IG5hbWUgb2YgdGhlIHRvcG9s b2d5CisgKi8KK2VudW0gZHB1X3JtX3RvcG9sb2d5X25hbWUKK2RwdV9ybV9nZXRfdG9wb2xvZ3lf bmFtZShzdHJ1Y3QgbXNtX2Rpc3BsYXlfdG9wb2xvZ3kgdG9wb2xvZ3kpOworCiAjZW5kaWYgLyog X19EUFVfUk1fSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwdV9kYmcu YyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHB1X2RiZy5jCmluZGV4IDU0ZWE2MzEuLjRhMzliODIg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHB1X2RiZy5jCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9tc20vZHB1X2RiZy5jCkBAIC0yNTQ3LDkgKzI1NDcsNiBAQCBzdGF0aWMgdm9pZCBf ZHB1X2R1bXBfYXJyYXkoc3RydWN0IGRwdV9kYmdfcmVnX2Jhc2UgKmJsa19hcnJbXSwKIAlpZiAo ZHVtcF9kYmdidXNfdmJpZl9ydCkKIAkJX2RwdV9kYmdfZHVtcF92YmlmX2RiZ19idXMoJmRwdV9k YmdfYmFzZS5kYmdidXNfdmJpZl9ydCk7CiAKLQlpZiAoZHB1X2RiZ19iYXNlLmRzaV9kYmdfYnVz IHx8IGR1bXBfYWxsKQotCQlkc2lfY3RybF9kZWJ1Z19kdW1wKCk7Ci0KIAlpZiAoZG9fcGFuaWMg JiYgZHB1X2RiZ19iYXNlLnBhbmljX29uX2VycikKIAkJcGFuaWMobmFtZSk7CiB9CmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20v bXNtX2Rydi5jCmluZGV4IGE2ZmUzYTEuLmViYzQwYTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9tc20vbXNtX2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2Rydi5jCkBA IC00NywxMiArNDcsNiBAQAogI2luY2x1ZGUgIm1zbV9mZW5jZS5oIgogI2luY2x1ZGUgIm1zbV9n cHUuaCIKICNpbmNsdWRlICJtc21fa21zLmgiCi0jaWZkZWYgQ09ORklHX0RSTV9NU01fV1JJVEVC QUNLCi0jaW5jbHVkZSAiZHB1X3diLmgiCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfRFJNX01TTV9E U0lfU1RBR0lORwotI2luY2x1ZGUgImRzaV9kaXNwbGF5LmgiCi0jZW5kaWYKICNpZmRlZiBDT05G SUdfRFJNX01TTV9EUFUKICNpbmNsdWRlICJkcHVfZGJnLmgiCiAjZW5kaWYKQEAgLTEyOTcsOSAr MTI5MSw2IEBAIGludCBtc21faW9jdGxfcm1mYjIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9p ZCAqZGF0YSwKIAlEUk1fSU9DVExfREVGX0RSVihNU01fR0VNX01BRFZJU0UsICBtc21faW9jdGxf Z2VtX21hZHZpc2UsICBEUk1fQVVUSHxEUk1fUkVOREVSX0FMTE9XKSwKIAlEUk1fSU9DVExfREVG X0RSVihNU01fU1VCTUlUUVVFVUVfTkVXLCAgIG1zbV9pb2N0bF9zdWJtaXRxdWV1ZV9uZXcsICAg RFJNX0FVVEh8RFJNX1JFTkRFUl9BTExPVyksCiAJRFJNX0lPQ1RMX0RFRl9EUlYoTVNNX1NVQk1J VFFVRVVFX0NMT1NFLCBtc21faW9jdGxfc3VibWl0cXVldWVfY2xvc2UsIERSTV9BVVRIfERSTV9S RU5ERVJfQUxMT1cpLAotI2lmZGVmIENPTkZJR19EUk1fTVNNX1dSSVRFQkFDSwotCURSTV9JT0NU TF9ERUZfRFJWKERQVV9XQl9DT05GSUcsIGRwdV93Yl9jb25maWcsIERSTV9VTkxPQ0tFRHxEUk1f QVVUSCksCi0jZW5kaWYKIAlEUk1fSU9DVExfREVGX0RSVihNU01fUk1GQjIsIG1zbV9pb2N0bF9y bWZiMiwKIAkJCSAgRFJNX0NPTlRST0xfQUxMT1d8RFJNX1VOTE9DS0VEKSwKIH07CkBAIC0xNTQx LDQyICsxNTMyLDYgQEAgc3RhdGljIGludCBhZGRfZGlzcGxheV9jb21wb25lbnRzKHN0cnVjdCBk ZXZpY2UgKmRldiwKIAlzdHJ1Y3QgZGV2aWNlICptZHBfZGV2ID0gTlVMTDsKIAlpbnQgcmV0Owog Ci0jaWZkZWYgQ09ORklHX0RSTV9NU01fRFBVCi0Jc3RydWN0IGRldmljZV9ub2RlICpub2RlOwot CWNvbnN0IGNoYXIgKm5hbWU7Ci0KLQlpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUoZGV2LT5v Zl9ub2RlLCAicWNvbSxkcHUta21zIikpIHsKLQkJc3RydWN0IGRldmljZV9ub2RlICpucCA9IGRl di0+b2Zfbm9kZTsKLQkJdW5zaWduZWQgaW50IGk7Ci0JCWJvb2wgZm91bmQgPSBmYWxzZTsKLQot I2lmZGVmIENPTkZJR19EUk1fTVNNX0RTSV9TVEFHSU5HCi0JCWZvciAoaSA9IDA7IGkgPCBNQVhf RFNJX0FDVElWRV9ESVNQTEFZOyBpKyspIHsKLQkJCW5vZGUgPSBkc2lfZGlzcGxheV9nZXRfYm9v dF9kaXNwbGF5KGkpOwotCi0JCQlpZiAobm9kZSAhPSBOVUxMKSB7Ci0JCQkJbmFtZSA9IG9mX2dl dF9wcm9wZXJ0eShub2RlLCAibGFiZWwiLCBOVUxMKTsKLQkJCQljb21wb25lbnRfbWF0Y2hfYWRk KGRldiwgbWF0Y2hwdHIsIGNvbXBhcmVfb2YsCi0JCQkJCQlub2RlKTsKLQkJCQlwcl9kZWJ1Zygi QWRkZWQgY29tcG9uZW50ID0gJXNcbiIsIG5hbWUpOwotCQkJCWZvdW5kID0gdHJ1ZTsKLQkJCX0K LQkJfQotCQlpZiAoIWZvdW5kKQotCQkJcmV0dXJuIC1FUFJPQkVfREVGRVI7Ci0jZW5kaWYKLQot CQlmb3IgKGkgPSAwOyA7IGkrKykgewotCQkJbm9kZSA9IG9mX3BhcnNlX3BoYW5kbGUobnAsICJj b25uZWN0b3JzIiwgaSk7Ci0JCQlpZiAoIW5vZGUpCi0JCQkJYnJlYWs7Ci0KLQkJCWNvbXBvbmVu dF9tYXRjaF9hZGQoZGV2LCBtYXRjaHB0ciwgY29tcGFyZV9vZiwgbm9kZSk7Ci0JCX0KLQkJcmV0 dXJuIDA7Ci0JfQotI2VuZGlmCi0KIAkvKgogCSAqIE1EUDUgYmFzZWQgZGV2aWNlcyBkb24ndCBo YXZlIGEgZmxhdCBoaWVyYXJjaHkuIFRoZXJlIGlzIGEgdG9wIGxldmVsCiAJICogcGFyZW50OiBN RFNTLCBhbmQgY2hpbGRyZW46IE1EUDUsIERTSSwgSERNSSwgZURQIGV0Yy4gUG9wdWxhdGUgdGhl CkBAIC0xNjAwLDcgKzE1NTUsNyBAQCBzdGF0aWMgaW50IGFkZF9kaXNwbGF5X2NvbXBvbmVudHMo c3RydWN0IGRldmljZSAqZGV2LAogCQlwdXRfZGV2aWNlKG1kcF9kZXYpOwogCiAJCS8qIGFkZCB0 aGUgTURQIGNvbXBvbmVudCBpdHNlbGYgKi8KLQkJY29tcG9uZW50X21hdGNoX2FkZChkZXYsIG1h dGNocHRyLCBjb21wYXJlX29mLAorCQlkcm1fb2ZfY29tcG9uZW50X21hdGNoX2FkZChkZXYsIG1h dGNocHRyLCBjb21wYXJlX29mLAogCQkJCSAgIG1kcF9kZXYtPm9mX25vZGUpOwogCX0gZWxzZSB7 CiAJCS8qIE1EUDQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2Rydi5o IGIvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZHJ2LmgKaW5kZXggZWFmMmI2YS4uOTBhMjUyMSAx MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZHJ2LmgKKysrIGIvZHJpdmVycy9n cHUvZHJtL21zbS9tc21fZHJ2LmgKQEAgLTE1OSw4ICsxNTksNiBAQCBlbnVtIG1zbV9tZHBfY29u bl9wcm9wZXJ0eSB7CiAJQ09OTkVDVE9SX1BST1BfQURfQkxfU0NBTEUsCiAKIAkvKiBlbnVtL2Jp dG1hc2sgcHJvcGVydGllcyAqLwotCUNPTk5FQ1RPUl9QUk9QX1RPUE9MT0dZX05BTUUsCi0JQ09O TkVDVE9SX1BST1BfVE9QT0xPR1lfQ09OVFJPTCwKIAlDT05ORUNUT1JfUFJPUF9BVVRPUkVGUkVT SCwKIAlDT05ORUNUT1JfUFJPUF9MUCwKIApAQCAtMzMxLDU3ICszMjksMjAgQEAgc3RydWN0IG1z bV9kaXNwbGF5X3RvcG9sb2d5IHsKIH07CiAKIC8qKgotICogc3RydWN0IG1zbV9tb2RlX2luZm8g LSBkZWZpbmVzIGFsbCBtc20gY3VzdG9tIG1vZGUgaW5mbwotICogQGZyYW1lX3JhdGU6ICAgICAg ZnJhbWVfcmF0ZSBvZiB0aGUgbW9kZQotICogQHZ0b3RhbDogICAgICAgICAgdnRvdGFsIGNhbGN1 bGF0ZWQgZm9yIHRoZSBtb2RlCi0gKiBAcHJlZmlsbF9saW5lczogICBwcmVmaWxsIGxpbmVzIGJh c2VkIG9uIHBvcmNoZXMuCi0gKiBAaml0dGVyX251bWVyOglkaXNwbGF5IHBhbmVsIGppdHRlciBu dW1lcmF0b3IgY29uZmlndXJhdGlvbgotICogQGppdHRlcl9kZW5vbToJZGlzcGxheSBwYW5lbCBq aXR0ZXIgZGVub21pbmF0b3IgY29uZmlndXJhdGlvbgotICogQHRvcG9sb2d5OiAgICAgICAgc3Vw cG9ydGVkIHRvcG9sb2d5IGZvciB0aGUgbW9kZQotICovCi1zdHJ1Y3QgbXNtX21vZGVfaW5mbyB7 Ci0JdWludDMyX3QgZnJhbWVfcmF0ZTsKLQl1aW50MzJfdCB2dG90YWw7Ci0JdWludDMyX3QgcHJl ZmlsbF9saW5lczsKLQl1aW50MzJfdCBqaXR0ZXJfbnVtZXI7Ci0JdWludDMyX3Qgaml0dGVyX2Rl bm9tOwotCXN0cnVjdCBtc21fZGlzcGxheV90b3BvbG9neSB0b3BvbG9neTsKLX07Ci0KLS8qKgog ICogc3RydWN0IG1zbV9kaXNwbGF5X2luZm8gLSBkZWZpbmVzIGRpc3BsYXkgcHJvcGVydGllcwog ICogQGludGZfdHlwZTogICAgICAgICAgRFJNX01PREVfQ09OTkVDVE9SXyBkaXNwbGF5IHR5cGUK ICAqIEBjYXBhYmlsaXRpZXM6ICAgICAgIEJpdG1hc2sgb2YgZGlzcGxheSBmbGFncwogICogQG51 bV9vZl9oX3RpbGVzOiAgICAgTnVtYmVyIG9mIGhvcml6b250YWwgdGlsZXMgaW4gY2FzZSBvZiBz cGxpdCBpbnRlcmZhY2UKICAqIEBoX3RpbGVfaW5zdGFuY2U6ICAgIENvbnRyb2xsZXIgaW5zdGFu Y2UgdXNlZCBwZXIgdGlsZS4gTnVtYmVyIG9mIGVsZW1lbnRzIGlzCiAgKiAgICAgICAgICAgICAg ICAgICAgICBiYXNlZCBvbiBudW1fb2ZfaF90aWxlcwotICogQGlzX2Nvbm5lY3RlZDogICAgICAg U2V0IHRvIHRydWUgaWYgZGlzcGxheSBpcyBjb25uZWN0ZWQKLSAqIEB3aWR0aF9tbTogICAgICAg ICAgIFBoeXNpY2FsIHdpZHRoCi0gKiBAaGVpZ2h0X21tOiAgICAgICAgICBQaHlzaWNhbCBoZWln aHQKLSAqIEBtYXhfd2lkdGg6ICAgICAgICAgIE1heCB3aWR0aCBvZiBkaXNwbGF5LiBJbiBjYXNl IG9mIGhvdCBwbHVnZ2FibGUgZGlzcGxheQotICogICAgICAgICAgICAgICAgICAgICAgdGhpcyBp cyBtYXggd2lkdGggc3VwcG9ydGVkIGJ5IGNvbnRyb2xsZXIKLSAqIEBtYXhfaGVpZ2h0OiAgICAg ICAgIE1heCBoZWlnaHQgb2YgZGlzcGxheS4gSW4gY2FzZSBvZiBob3QgcGx1Z2dhYmxlIGRpc3Bs YXkKLSAqICAgICAgICAgICAgICAgICAgICAgIHRoaXMgaXMgbWF4IGhlaWdodCBzdXBwb3J0ZWQg YnkgY29udHJvbGxlcgotICogQGlzX3ByaW1hcnk6ICAgICAgICAgU2V0IHRvIHRydWUgaWYgZGlz cGxheSBpcyBwcmltYXJ5IGRpc3BsYXkKICAqIEBpc190ZV91c2luZ193YXRjaGRvZ190aW1lcjog IEJvb2xlYW4gdG8gaW5kaWNhdGUgd2F0Y2hkb2cgVEUgaXMKICAqCQkJCSB1c2VkIGluc3RlYWQg b2YgcGFuZWwgVEUgaW4gY21kIG1vZGUgcGFuZWxzCiAgKi8KIHN0cnVjdCBtc21fZGlzcGxheV9p bmZvIHsKIAlpbnQgaW50Zl90eXBlOwogCXVpbnQzMl90IGNhcGFiaWxpdGllczsKLQogCXVpbnQz Ml90IG51bV9vZl9oX3RpbGVzOwogCXVpbnQzMl90IGhfdGlsZV9pbnN0YW5jZVtNQVhfSF9USUxF U19QRVJfRElTUExBWV07Ci0KLQlib29sIGlzX2Nvbm5lY3RlZDsKLQotCXVuc2lnbmVkIGludCB3 aWR0aF9tbTsKLQl1bnNpZ25lZCBpbnQgaGVpZ2h0X21tOwotCi0JdWludDMyX3QgbWF4X3dpZHRo OwotCXVpbnQzMl90IG1heF9oZWlnaHQ7Ci0KLQlib29sIGlzX3ByaW1hcnk7CiAJYm9vbCBpc190 ZV91c2luZ193YXRjaGRvZ190aW1lcjsKIH07CiAKLS0gClRoZSBRdWFsY29tbSBJbm5vdmF0aW9u IENlbnRlciwgSW5jLiBpcyBhIG1lbWJlciBvZiB0aGUgQ29kZSBBdXJvcmEgRm9ydW0sCmEgTGlu dXggRm91bmRhdGlvbiBDb2xsYWJvcmF0aXZlIFByb2plY3QKCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCkZyZWVkcmVubyBtYWlsaW5nIGxpc3QKRnJlZWRy ZW5vQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2ZyZWVkcmVubwo=