From mboxrd@z Thu Jan 1 00:00:00 1970 From: Rajesh Yadav Subject: [DPU PATCH 05/11] drm/msm/dpu: remove writeback support Date: Wed, 30 May 2018 20:19:42 +0530 Message-ID: <1527691788-9350-6-git-send-email-ryadav@codeaurora.org> References: <1527691788-9350-1-git-send-email-ryadav@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1527691788-9350-1-git-send-email-ryadav@codeaurora.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, devicetree@vger.kernel.org Cc: Rajesh Yadav , hoegsberg@chromium.org List-Id: linux-arm-msm@vger.kernel.org UmVtb3ZlIHdyaXRlYmFjayBzdXBwb3J0IGZyb20gZHB1IGRyaXZlcgphcyBpdCBpcyBub3QgZW5h YmxlZC4KV3JpdGViYWNrIHN1cHBvcnQgd2lsbCBiZSBhZGRlZCBiYWNrIGxhdGVyCmJhc2VkIG9u IERSTSB3cml0ZWJhY2sgY29ubmVjdG9yLgoKU2lnbmVkLW9mZi1ieTogUmFqZXNoIFlhZGF2IDxy eWFkYXZAY29kZWF1cm9yYS5vcmc+Ci0tLQogZHJpdmVycy9ncHUvZHJtL21zbS9NYWtlZmlsZSAg ICAgICAgICAgICAgICAgICAgICAgfCAgICA1IC0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9k cHUxL2RwdV9jcnRjLmggICAgICAgICAgIHwgICAgMyArLQogZHJpdmVycy9ncHUvZHJtL21zbS9k aXNwL2RwdTEvZHB1X2VuY29kZXIuYyAgICAgICAgfCAgIDk0ICstCiBkcml2ZXJzL2dwdS9kcm0v bXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlci5oICAgICAgICB8ICAgIDIgLQogZHJpdmVycy9ncHUv ZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXJfcGh5cy5oICAgfCAgIDYzIC0KIC4uLi9ncHUv ZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXJfcGh5c193Yi5jICAgIHwgMTM0OSAtLS0tLS0t LS0tLS0tLS0tLS0tLQogZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2NhdGFs b2cuYyAgICAgfCAgIDQxICstCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdf Y2F0YWxvZy5oICAgICB8ICAgNzcgLS0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2Rw dV9od19jZG0uYyAgICAgICAgIHwgICAgMyAtCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1 MS9kcHVfaHdfY3RsLmMgICAgICAgICB8ICAgMTkgLQogZHJpdmVycy9ncHUvZHJtL21zbS9kaXNw L2RwdTEvZHB1X2h3X2N0bC5oICAgICAgICAgfCAgICA2IC0KIGRyaXZlcnMvZ3B1L2RybS9tc20v ZGlzcC9kcHUxL2RwdV9od190b3AuYyAgICAgICAgIHwgICAxMiArLQogZHJpdmVycy9ncHUvZHJt L21zbS9kaXNwL2RwdTEvZHB1X2h3X3RvcC5oICAgICAgICAgfCAgICA0IC0KIGRyaXZlcnMvZ3B1 L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od193Yi5jICAgICAgICAgIHwgIDMyMSAtLS0tLQogZHJp dmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X3diLmggICAgICAgICAgfCAgMTg2IC0t LQogZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2ttcy5jICAgICAgICAgICAgfCAg ICA1IC0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9rbXMuaCAgICAgICAgICAg IHwgICAgMSAtCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfcGxhbmUuYyAgICAg ICAgICB8ICAgIDIgKy0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9ybS5jICAg ICAgICAgICAgIHwgICA0MiArLQogZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X3di LmMgICAgICAgICAgICAgfCAgNzY3IC0tLS0tLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rp c3AvZHB1MS9kcHVfd2IuaCAgICAgICAgICAgICB8ICAyMzIgLS0tLQogMjEgZmlsZXMgY2hhbmdl ZCwgMjMgaW5zZXJ0aW9ucygrKSwgMzIxMSBkZWxldGlvbnMoLSkKIGRlbGV0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlcl9waHlzX3diLmMKIGRl bGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfd2Iu YwogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9o d193Yi5oCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEv ZHB1X3diLmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1 MS9kcHVfd2IuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vTWFrZWZpbGUgYi9k cml2ZXJzL2dwdS9kcm0vbXNtL01ha2VmaWxlCmluZGV4IDdmYzM5NzQuLmY0YzU5NTEgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJt L21zbS9NYWtlZmlsZQpAQCAtNjgsNyArNjgsNiBAQCBtc20teSA6PSBcCiAJZGlzcC9kcHUxL2Rw dV9od190b3AubyBcCiAJZGlzcC9kcHUxL2RwdV9od191dGlsLm8gXAogCWRpc3AvZHB1MS9kcHVf aHdfdmJpZi5vIFwKLQlkaXNwL2RwdTEvZHB1X2h3X3diLm8gXAogCWRpc3AvZHB1MS9kcHVfaXJx Lm8gXAogCWRpc3AvZHB1MS9kcHVfa21zLm8gXAogCWRpc3AvZHB1MS9kcHVfa21zX3V0aWxzLm8g XApAQCAtOTksOSArOTgsNiBAQCBtc20teSA6PSBcCiAKIG1zbS0kKENPTkZJR19ERUJVR19GUykg Kz0gYWRyZW5vL2E1eHhfZGVidWdmcy5vCiAKLW1zbV93Yi0kKENPTkZJR19EUk1fTVNNX1dSSVRF QkFDSykgKz0gZGlzcC9kcHUxL2RwdV93Yi5vIFwKLQkJCQkgICAgICBkaXNwL2RwdTEvZHB1X2Vu Y29kZXJfcGh5c193Yi5vCi0KIG1zbS0kKENPTkZJR19EUk1fTVNNX1JPVEFUT1IpICs9IGRpc3Av ZHB1MS9kcHVfaHdfcm90Lm8KIAogbXNtLSQoQ09ORklHX0RSTV9GQkRFVl9FTVVMQVRJT04pICs9 IG1zbV9mYmRldi5vCkBAIC0xMzQsNCArMTMwLDMgQEAgbXNtLSQoQ09ORklHX0RSTV9NU01fRFNJ XzEwTk1fUEhZKSArPSBkc2kvcGxsL2RzaV9wbGxfMTBubS5vCiBlbmRpZgogCiBvYmotJChDT05G SUdfRFJNX01TTSkJKz0gbXNtLm8KLW9iai0kKENPTkZJR19EUk1fTVNNX1dSSVRFQkFDSykgKz0g bXNtX3diLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9j cnRjLmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0Yy5oCmluZGV4IDBm M2FhNjAuLjM5ZGVmOTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUx L2RwdV9jcnRjLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NydGMu aApAQCAtNDQwLDggKzQ0MCw3IEBAIHN0YXRpYyBpbmxpbmUgZW51bSBkcHVfY3J0Y19jbGllbnRf dHlwZSBkcHVfY3J0Y19nZXRfY2xpZW50X3R5cGUoCiAJaWYgKCFjc3RhdGUpCiAJCXJldHVybiBO UlRfQ0xJRU5UOwogCi0JcmV0dXJuIGRwdV9jcnRjX2dldF9pbnRmX21vZGUoY3J0YykgPT0gSU5U Rl9NT0RFX1dCX0xJTkUgPyBOUlRfQ0xJRU5UIDoKLQkJCVJUX0NMSUVOVDsKKwlyZXR1cm4gUlRf Q0xJRU5UOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9k cHUxL2RwdV9lbmNvZGVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5j b2Rlci5jCmluZGV4IDFkNDVjOGYuLjdkZDYwOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9k aXNwL2RwdTEvZHB1X2VuY29kZXIuYwpAQCAtMTQwNSwxNSArMTQwNSw2IEBAIHN0YXRpYyBlbnVt IGRwdV9pbnRmIGRwdV9lbmNvZGVyX2dldF9pbnRmKHN0cnVjdCBkcHVfbWRzc19jZmcgKmNhdGFs b2csCiAJcmV0dXJuIElOVEZfTUFYOwogfQogCi1zdGF0aWMgZW51bSBkcHVfd2IgZHB1X2VuY29k ZXJfZ2V0X3diKHN0cnVjdCBkcHVfbWRzc19jZmcgKmNhdGFsb2csCi0JCWVudW0gZHB1X2ludGZf dHlwZSB0eXBlLCB1MzIgY29udHJvbGxlcl9pZCkKLXsKLQlpZiAoY29udHJvbGxlcl9pZCA8IGNh dGFsb2ctPndiX2NvdW50KQotCQlyZXR1cm4gY2F0YWxvZy0+d2JbY29udHJvbGxlcl9pZF0uaWQ7 Ci0KLQlyZXR1cm4gV0JfTUFYOwotfQotCiBzdGF0aWMgdm9pZCBkcHVfZW5jb2Rlcl92Ymxhbmtf Y2FsbGJhY2soc3RydWN0IGRybV9lbmNvZGVyICpkcm1fZW5jLAogCQlzdHJ1Y3QgZHB1X2VuY29k ZXJfcGh5cyAqcGh5X2VuYykKIHsKQEAgLTIxNDQsMTIgKzIxMzUsNiBAQCBzdGF0aWMgaW50IF9k cHVfZW5jb2Rlcl9zdGF0dXNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKmRhdGEpCiAJ CWNhc2UgSU5URl9NT0RFX0NNRDoKIAkJCXNlcV9wdXRzKHMsICJtb2RlOiBjb21tYW5kXG4iKTsK IAkJCWJyZWFrOwotCQljYXNlIElOVEZfTU9ERV9XQl9CTE9DSzoKLQkJCXNlcV9wdXRzKHMsICJt b2RlOiB3YiBibG9ja1xuIik7Ci0JCQlicmVhazsKLQkJY2FzZSBJTlRGX01PREVfV0JfTElORToK LQkJCXNlcV9wdXRzKHMsICJtb2RlOiB3YiBsaW5lXG4iKTsKLQkJCWJyZWFrOwogCQlkZWZhdWx0 OgogCQkJc2VxX3B1dHMocywgIm1vZGU6ID8/P1xuIik7CiAJCQlicmVhazsKQEAgLTI0MDksMzkg KzIzOTQsNiBAQCBzdGF0aWMgaW50IGRwdV9lbmNvZGVyX3ZpcnRfYWRkX3BoeXNfZW5jcygKIAly ZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBkcHVfZW5jb2Rlcl92aXJ0X2FkZF9waHlzX2VuY193 YihzdHJ1Y3QgZHB1X2VuY29kZXJfdmlydCAqZHB1X2VuYywKLQkJc3RydWN0IGRwdV9lbmNfcGh5 c19pbml0X3BhcmFtcyAqcGFyYW1zKQotewotI2lmZGVmIENPTkZJR19EUk1fTVNNX1dSSVRFQkFD SwotCXN0cnVjdCBkcHVfZW5jb2Rlcl9waHlzICplbmMgPSBOVUxMOwotCi0JaWYgKCFkcHVfZW5j KSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBlbmNvZGVyXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7 Ci0JfQotCi0JRFBVX0RFQlVHX0VOQyhkcHVfZW5jLCAiXG4iKTsKLQotCWlmIChkcHVfZW5jLT5u dW1fcGh5c19lbmNzICsgMSA+PSBBUlJBWV9TSVpFKGRwdV9lbmMtPnBoeXNfZW5jcykpIHsKLQkJ RFBVX0VSUk9SX0VOQyhkcHVfZW5jLCAidG9vIG1hbnkgcGh5c2ljYWwgZW5jb2RlcnMgJWRcbiIs Ci0JCQkgIGRwdV9lbmMtPm51bV9waHlzX2VuY3MpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0K LQllbmMgPSBkcHVfZW5jb2Rlcl9waHlzX3diX2luaXQocGFyYW1zKTsKLQotCWlmIChJU19FUlJf T1JfTlVMTChlbmMpKSB7Ci0JCURQVV9FUlJPUl9FTkMoZHB1X2VuYywgImZhaWxlZCB0byBpbml0 IHdiIGVuYzogJWxkXG4iLAotCQkJUFRSX0VSUihlbmMpKTsKLQkJcmV0dXJuIGVuYyA9PSAwID8g LUVJTlZBTCA6IFBUUl9FUlIoZW5jKTsKLQl9Ci0KLQlkcHVfZW5jLT5waHlzX2VuY3NbZHB1X2Vu Yy0+bnVtX3BoeXNfZW5jc10gPSBlbmM7Ci0JKytkcHVfZW5jLT5udW1fcGh5c19lbmNzOwotI2Vu ZGlmCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgZHB1X2VuY29kZXJfc2V0dXBfZGlzcGxh eShzdHJ1Y3QgZHB1X2VuY29kZXJfdmlydCAqZHB1X2VuYywKIAkJCQkgc3RydWN0IGRwdV9rbXMg KmRwdV9rbXMsCiAJCQkJIHN0cnVjdCBtc21fZGlzcGxheV9pbmZvICpkaXNwX2luZm8sCkBAIC0y NDgwLDkgKzI0MzIsNiBAQCBzdGF0aWMgaW50IGRwdV9lbmNvZGVyX3NldHVwX2Rpc3BsYXkoc3Ry dWN0IGRwdV9lbmNvZGVyX3ZpcnQgKmRwdV9lbmMsCiAJfSBlbHNlIGlmIChkaXNwX2luZm8tPmlu dGZfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfRGlzcGxheVBvcnQpIHsKIAkJKmRybV9lbmNf bW9kZSA9IERSTV9NT0RFX0VOQ09ERVJfVE1EUzsKIAkJaW50Zl90eXBlID0gSU5URl9EUDsKLQl9 IGVsc2UgaWYgKGRpc3BfaW5mby0+aW50Zl90eXBlID09IERSTV9NT0RFX0NPTk5FQ1RPUl9WSVJU VUFMKSB7Ci0JCSpkcm1fZW5jX21vZGUgPSBEUk1fTU9ERV9FTkNPREVSX1ZJUlRVQUw7Ci0JCWlu dGZfdHlwZSA9IElOVEZfV0I7CiAJfSBlbHNlIHsKIAkJRFBVX0VSUk9SX0VOQyhkcHVfZW5jLCAi dW5zdXBwb3J0ZWQgZGlzcGxheSBpbnRlcmZhY2UgdHlwZVxuIik7CiAJCXJldHVybiAtRUlOVkFM OwpAQCAtMjUyMCw0MiArMjQ2OSwyMSBAQCBzdGF0aWMgaW50IGRwdV9lbmNvZGVyX3NldHVwX2Rp c3BsYXkoc3RydWN0IGRwdV9lbmNvZGVyX3ZpcnQgKmRwdV9lbmMsCiAJCURQVV9ERUJVRygiaF90 aWxlX2luc3RhbmNlICVkID0gJWQsIHNwbGl0X3JvbGUgJWRcbiIsCiAJCQkJaSwgY29udHJvbGxl cl9pZCwgcGh5c19wYXJhbXMuc3BsaXRfcm9sZSk7CiAKLQkJaWYgKGludGZfdHlwZSA9PSBJTlRG X1dCKSB7Ci0JCQlwaHlzX3BhcmFtcy5pbnRmX2lkeCA9IElOVEZfTUFYOwotCQkJcGh5c19wYXJh bXMud2JfaWR4ID0gZHB1X2VuY29kZXJfZ2V0X3diKAotCQkJCQlkcHVfa21zLT5jYXRhbG9nLAot CQkJCQlpbnRmX3R5cGUsIGNvbnRyb2xsZXJfaWQpOwotCQkJaWYgKHBoeXNfcGFyYW1zLndiX2lk eCA9PSBXQl9NQVgpIHsKLQkJCQlEUFVfRVJST1JfRU5DKGRwdV9lbmMsCi0JCQkJCSJjb3VsZCBu b3QgZ2V0IHdiOiB0eXBlICVkLCBpZCAlZFxuIiwKLQkJCQkJaW50Zl90eXBlLCBjb250cm9sbGVy X2lkKTsKLQkJCQlyZXQgPSAtRUlOVkFMOwotCQkJfQotCQl9IGVsc2UgewotCQkJcGh5c19wYXJh bXMud2JfaWR4ID0gV0JfTUFYOwotCQkJcGh5c19wYXJhbXMuaW50Zl9pZHggPSBkcHVfZW5jb2Rl cl9nZXRfaW50ZigKLQkJCQkJZHB1X2ttcy0+Y2F0YWxvZywgaW50Zl90eXBlLAotCQkJCQljb250 cm9sbGVyX2lkKTsKLQkJCWlmIChwaHlzX3BhcmFtcy5pbnRmX2lkeCA9PSBJTlRGX01BWCkgewot CQkJCURQVV9FUlJPUl9FTkMoZHB1X2VuYywKLQkJCQkJImNvdWxkIG5vdCBnZXQgd2I6IHR5cGUg JWQsIGlkICVkXG4iLAotCQkJCQlpbnRmX3R5cGUsIGNvbnRyb2xsZXJfaWQpOwotCQkJCXJldCA9 IC1FSU5WQUw7Ci0JCQl9CisJCXBoeXNfcGFyYW1zLmludGZfaWR4ID0gZHB1X2VuY29kZXJfZ2V0 X2ludGYoZHB1X2ttcy0+Y2F0YWxvZywKKwkJCQkJCQkJCQkJCQlpbnRmX3R5cGUsCisJCQkJCQkJ CQkJCQkJY29udHJvbGxlcl9pZCk7CisJCWlmIChwaHlzX3BhcmFtcy5pbnRmX2lkeCA9PSBJTlRG X01BWCkgeworCQkJRFBVX0VSUk9SX0VOQyhkcHVfZW5jLCAiY291bGQgbm90IGdldCBpbnRmOiB0 eXBlICVkLCBpZCAlZFxuIiwKKwkJCQkJCSAgaW50Zl90eXBlLCBjb250cm9sbGVyX2lkKTsKKwkJ CXJldCA9IC1FSU5WQUw7CiAJCX0KIAogCQlpZiAoIXJldCkgewotCQkJaWYgKGludGZfdHlwZSA9 PSBJTlRGX1dCKQotCQkJCXJldCA9IGRwdV9lbmNvZGVyX3ZpcnRfYWRkX3BoeXNfZW5jX3diKGRw dV9lbmMsCi0JCQkJCQkmcGh5c19wYXJhbXMpOwotCQkJZWxzZQotCQkJCXJldCA9IGRwdV9lbmNv ZGVyX3ZpcnRfYWRkX3BoeXNfZW5jcygKLQkJCQkJCWRpc3BfaW5mby0+Y2FwYWJpbGl0aWVzLAot CQkJCQkJZHB1X2VuYywKLQkJCQkJCSZwaHlzX3BhcmFtcyk7CisJCQlyZXQgPSBkcHVfZW5jb2Rl cl92aXJ0X2FkZF9waHlzX2VuY3MoZGlzcF9pbmZvLT5jYXBhYmlsaXRpZXMsCisJCQkJCQkJCQkJ CQkgZHB1X2VuYywKKwkJCQkJCQkJCQkJCSAmcGh5c19wYXJhbXMpOwogCQkJaWYgKHJldCkKLQkJ CQlEUFVfRVJST1JfRU5DKGRwdV9lbmMsCi0JCQkJCQkiZmFpbGVkIHRvIGFkZCBwaHlzIGVuY3Nc biIpOworCQkJCURQVV9FUlJPUl9FTkMoZHB1X2VuYywgImZhaWxlZCB0byBhZGQgcGh5cyBlbmNz XG4iKTsKIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2Rw dTEvZHB1X2VuY29kZXIuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9lbmNv ZGVyLmgKaW5kZXggMDMzOWRmZC4uY2U5MjkwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJt L21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXIuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rp c3AvZHB1MS9kcHVfZW5jb2Rlci5oCkBAIC0zMiw3ICszMiw2IEBACiAvKioKICAqIEVuY29kZXIg ZnVuY3Rpb25zIGFuZCBkYXRhIHR5cGVzCiAgKiBAaW50ZnM6CUludGVyZmFjZXMgdGhpcyBlbmNv ZGVyIGlzIHVzaW5nLCBJTlRGX01PREVfTk9ORSBpZiB1bnVzZWQKLSAqIEB3YnM6CVdyaXRlYmFj a3MgdGhpcyBlbmNvZGVyIGlzIHVzaW5nLCBJTlRGX01PREVfTk9ORSBpZiB1bnVzZWQKICAqIEBu ZWVkc19jZG06CUVuY29kZXIgcmVxdWVzdHMgYSBDRE0gYmFzZWQgb24gcGl4ZWwgZm9ybWF0IGNv bnZlcnNpb24gbmVlZHMKICAqIEBkaXNwbGF5X251bV9vZl9oX3RpbGVzOiBOdW1iZXIgb2YgaG9y aXpvbnRhbCB0aWxlcyBpbiBjYXNlIG9mIHNwbGl0CiAgKiAgICAgICAgICAgICAgICAgICAgICAg ICAgaW50ZXJmYWNlCkBAIC00MCw3ICszOSw2IEBACiAgKi8KIHN0cnVjdCBkcHVfZW5jb2Rlcl9o d19yZXNvdXJjZXMgewogCWVudW0gZHB1X2ludGZfbW9kZSBpbnRmc1tJTlRGX01BWF07Ci0JZW51 bSBkcHVfaW50Zl9tb2RlIHdic1tXQl9NQVhdOwogCWJvb2wgbmVlZHNfY2RtOwogCXUzMiBkaXNw bGF5X251bV9vZl9oX3RpbGVzOwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20v ZGlzcC9kcHUxL2RwdV9lbmNvZGVyX3BoeXMuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9k cHUxL2RwdV9lbmNvZGVyX3BoeXMuaAppbmRleCAzNWJlZWZhLi4xNTQ1OWJlIDEwMDY0NAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlcl9waHlzLmgKKysrIGIv ZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXJfcGh5cy5oCkBAIC0yMiw3 ICsyMiw2IEBACiAjaW5jbHVkZSAiZHB1X2h3X3Bpbmdwb25nLmgiCiAjaW5jbHVkZSAiZHB1X2h3 X2N0bC5oIgogI2luY2x1ZGUgImRwdV9od190b3AuaCIKLSNpbmNsdWRlICJkcHVfaHdfd2IuaCIK ICNpbmNsdWRlICJkcHVfaHdfY2RtLmgiCiAjaW5jbHVkZSAiZHB1X2VuY29kZXIuaCIKIApAQCAt MzAzLDYxICszMDIsMTIgQEAgc3RydWN0IGRwdV9lbmNvZGVyX3BoeXNfY21kIHsKIH07CiAKIC8q KgotICogc3RydWN0IGRwdV9lbmNvZGVyX3BoeXNfd2IgLSBzdWItY2xhc3Mgb2YgZHB1X2VuY29k ZXJfcGh5cyB0byBoYW5kbGUKLSAqCXdyaXRlYmFjayBzcGVjaWZpYyBvcGVyYXRpb25zCi0gKiBA YmFzZToJCUJhc2VjbGFzcyBwaHlzaWNhbCBlbmNvZGVyIHN0cnVjdHVyZQotICogQGh3X3diOgkJ SGFyZHdhcmUgaW50ZXJmYWNlIHRvIHRoZSB3YiByZWdpc3RlcnMKLSAqIEBpcnFfaWR4OgkJSVJR IGludGVyZmFjZSBsb29rdXAgaW5kZXgKLSAqIEB3YmRvbmVfdGltZW91dDoJVGltZW91dCB2YWx1 ZSBmb3Igd3JpdGViYWNrIGRvbmUgaW4gbXNlYwotICogQGJ5cGFzc19pcnFyZWc6CUJ5cGFzcyBp cnEgcmVnaXN0ZXIvdW5yZWdpc3RlciBpZiBub24temVybwotICogQHdiZG9uZV9jb21wbGV0ZToJ Zm9yIHdiZG9uZSBpcnEgc3luY2hyb25pemF0aW9uCi0gKiBAd2JfY2ZnOgkJV3JpdGViYWNrIGhh cmR3YXJlIGNvbmZpZ3VyYXRpb24KLSAqIEBjZHBfY2ZnOgkJV3JpdGViYWNrIENEUCBjb25maWd1 cmF0aW9uCi0gKiBAaW50Zl9jZmc6CQlJbnRlcmZhY2UgaGFyZHdhcmUgY29uZmlndXJhdGlvbgot ICogQHdiX3JvaToJCVdyaXRlYmFjayByZWdpb24tb2YtaW50ZXJlc3QKLSAqIEB3Yl9mbXQ6CQlX cml0ZWJhY2sgcGl4ZWwgZm9ybWF0Ci0gKiBAd2JfZmI6CQlQb2ludGVyIHRvIGN1cnJlbnQgd3Jp dGViYWNrIGZyYW1lYnVmZmVyCi0gKiBAd2JfYXNwYWNlOgkJUG9pbnRlciB0byBjdXJyZW50IHdy aXRlYmFjayBhZGRyZXNzIHNwYWNlCi0gKiBAZnJhbWVfY291bnQ6CUNvdW50ZXIgb2YgY29tcGxl dGVkIHdyaXRlYmFjayBvcGVyYXRpb25zCi0gKiBAa2lja29mZl9jb3VudDoJQ291bnRlciBvZiBp c3N1ZWQgd3JpdGViYWNrIG9wZXJhdGlvbnMKLSAqIEBhc3BhY2U6CQlhZGRyZXNzIHNwYWNlIGlk ZW50aWZpZXIgZm9yIG5vbi1zZWN1cmUvc2VjdXJlIGRvbWFpbgotICogQHdiX2RldjoJCVBvaW50 ZXIgdG8gd3JpdGViYWNrIGRldmljZQotICogQHN0YXJ0X3RpbWU6CQlTdGFydCB0aW1lIG9mIHdy aXRlYmFjayBsYXRlc3QgcmVxdWVzdAotICogQGVuZF90aW1lOgkJRW5kIHRpbWUgb2Ygd3JpdGVi YWNrIGxhdGVzdCByZXF1ZXN0Ci0gKiBAYm9fZGlzYWJsZToJCUJ1ZmZlciBvYmplY3QocykgdG8g dXNlIGR1cmluZyB0aGUgZGlzYWJsaW5nIHN0YXRlCi0gKiBAZmJfZGlzYWJsZToJCUZyYW1lIGJ1 ZmZlciB0byB1c2UgZHVyaW5nIHRoZSBkaXNhYmxpbmcgc3RhdGUKLSAqLwotc3RydWN0IGRwdV9l bmNvZGVyX3BoeXNfd2IgewotCXN0cnVjdCBkcHVfZW5jb2Rlcl9waHlzIGJhc2U7Ci0Jc3RydWN0 IGRwdV9od193YiAqaHdfd2I7Ci0JaW50IGlycV9pZHg7Ci0Jc3RydWN0IGRwdV9pcnFfY2FsbGJh Y2sgaXJxX2NiOwotCXUzMiB3YmRvbmVfdGltZW91dDsKLQl1MzIgYnlwYXNzX2lycXJlZzsKLQlz dHJ1Y3QgY29tcGxldGlvbiB3YmRvbmVfY29tcGxldGU7Ci0Jc3RydWN0IGRwdV9od193Yl9jZmcg d2JfY2ZnOwotCXN0cnVjdCBkcHVfaHdfd2JfY2RwX2NmZyBjZHBfY2ZnOwotCXN0cnVjdCBkcHVf aHdfaW50Zl9jZmcgaW50Zl9jZmc7Ci0Jc3RydWN0IGRwdV9yZWN0IHdiX3JvaTsKLQljb25zdCBz dHJ1Y3QgZHB1X2Zvcm1hdCAqd2JfZm10OwotCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKndiX2Zi OwotCXUzMiBmcmFtZV9jb3VudDsKLQl1MzIga2lja29mZl9jb3VudDsKLQlzdHJ1Y3QgZHB1X3di X2RldmljZSAqd2JfZGV2OwotCWt0aW1lX3Qgc3RhcnRfdGltZTsKLQlrdGltZV90IGVuZF90aW1l OwotCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqYm9fZGlzYWJsZVtEUFVfTUFYX1BMQU5FU107Ci0J c3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmJfZGlzYWJsZTsKLX07Ci0KLS8qKgogICogc3RydWN0 IGRwdV9lbmNfcGh5c19pbml0X3BhcmFtcyAtIGluaXRpYWxpemF0aW9uIHBhcmFtZXRlcnMgZm9y IHBoeXMgZW5jcwogICogQGRwdV9rbXM6CQlQb2ludGVyIHRvIHRoZSBkcHVfa21zIHRvcCBsZXZl bAogICogQHBhcmVudDoJCVBvaW50ZXIgdG8gdGhlIGNvbnRhaW5pbmcgdmlydHVhbCBlbmNvZGVy CiAgKiBAcGFyZW50X29wczoJCUNhbGxiYWNrcyBleHBvc2VkIGJ5IHRoZSBwYXJlbnQgdG8gdGhl IHBoeXNfZW5jCiAgKiBAc3BsaXRfcm9sZToJCVJvbGUgdG8gcGxheSBpbiBhIHNwbGl0LXBhbmVs IGNvbmZpZ3VyYXRpb24KICAqIEBpbnRmX2lkeDoJCUludGVyZmFjZSBpbmRleCB0aGlzIHBoeXNf ZW5jIHdpbGwgY29udHJvbAotICogQHdiX2lkeDoJCVdyaXRlYmFjayBpbmRleCB0aGlzIHBoeXNf ZW5jIHdpbGwgY29udHJvbAogICogQGVuY19zcGlubG9jazoJVmlydHVhbC1FbmNvZGVyLVdpZGUg U3BpbiBMb2NrIGZvciBJUlEgcHVycG9zZXMKICAqLwogc3RydWN0IGRwdV9lbmNfcGh5c19pbml0 X3BhcmFtcyB7CkBAIC0zNjYsNyArMzE2LDYgQEAgc3RydWN0IGRwdV9lbmNfcGh5c19pbml0X3Bh cmFtcyB7CiAJc3RydWN0IGRwdV9lbmNvZGVyX3ZpcnRfb3BzIHBhcmVudF9vcHM7CiAJZW51bSBk cHVfZW5jX3NwbGl0X3JvbGUgc3BsaXRfcm9sZTsKIAllbnVtIGRwdV9pbnRmIGludGZfaWR4Owot CWVudW0gZHB1X3diIHdiX2lkeDsKIAlzcGlubG9ja190ICplbmNfc3BpbmxvY2s7CiB9OwogCkBA IC0zOTksMTggKzM0OCw2IEBAIHN0cnVjdCBkcHVfZW5jb2Rlcl9waHlzICpkcHVfZW5jb2Rlcl9w aHlzX2NtZF9pbml0KAogCQlzdHJ1Y3QgZHB1X2VuY19waHlzX2luaXRfcGFyYW1zICpwKTsKIAog LyoqCi0gKiBkcHVfZW5jb2Rlcl9waHlzX3diX2luaXQgLSBDb25zdHJ1Y3QgYSBuZXcgd3JpdGVi YWNrIHBoeXNpY2FsIGVuY29kZXIKLSAqIEBwOglQb2ludGVyIHRvIGluaXQgcGFyYW1zIHN0cnVj dHVyZQotICogUmV0dXJuOiBFcnJvciBjb2RlIG9yIG5ld2x5IGFsbG9jYXRlZCBlbmNvZGVyCi0g Ki8KLXN0cnVjdCBkcHVfZW5jb2Rlcl9waHlzICpkcHVfZW5jb2Rlcl9waHlzX3diX2luaXQoCi0J CXN0cnVjdCBkcHVfZW5jX3BoeXNfaW5pdF9wYXJhbXMgKnApOwotCi12b2lkIGRwdV9lbmNvZGVy X3BoeXNfc2V0dXBfY2RtKHN0cnVjdCBkcHVfZW5jb2Rlcl9waHlzICpwaHlzX2VuYywKLQkJc3Ry dWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIGNvbnN0IHN0cnVjdCBkcHVfZm9ybWF0ICpmb3JtYXQs Ci0JCXN0cnVjdCBkcHVfcmVjdCAqd2Jfcm9pKTsKLQotLyoqCiAgKiBkcHVfZW5jb2Rlcl9oZWxw ZXJfdHJpZ2dlcl9zdGFydCAtIGNvbnRyb2wgc3RhcnQgaGVscGVyIGZ1bmN0aW9uCiAgKglUaGlz IGhlbHBlciBmdW5jdGlvbiBtYXkgYmUgb3B0aW9uYWxseSBzcGVjaWZpZWQgYnkgcGh5c2ljYWwK ICAqCWVuY29kZXJzIGlmIHRoZXkgcmVxdWlyZSBjdGxfc3RhcnQgdHJpZ2dlcmluZy4KZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyX3BoeXNfd2Iu YyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyX3BoeXNfd2IuYwpk ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmQ3YjVlYS4uMDAwMDAwMAotLS0gYS9kcml2 ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlcl9waHlzX3diLmMKKysrIC9kZXYv bnVsbApAQCAtMSwxMzQ5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTUtMjAxOCBU aGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHBy b2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1v ZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSB2ZXJzaW9uIDIgYW5kCi0gKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJp YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VU IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBN RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg dGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICov Ci0KLSNkZWZpbmUgcHJfZm10KGZtdCkJIltkcm06JXM6JWRdICIgZm10LCBfX2Z1bmNfXywgX19M SU5FX18KLSNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+Ci0KLSNpbmNsdWRlICJkcHVfZW5jb2Rl cl9waHlzLmgiCi0jaW5jbHVkZSAiZHB1X2Zvcm1hdHMuaCIKLSNpbmNsdWRlICJkcHVfaHdfdG9w LmgiCi0jaW5jbHVkZSAiZHB1X2h3X2ludGVycnVwdHMuaCIKLSNpbmNsdWRlICJkcHVfY29yZV9p cnEuaCIKLSNpbmNsdWRlICJkcHVfd2IuaCIKLSNpbmNsdWRlICJkcHVfdmJpZi5oIgotI2luY2x1 ZGUgImRwdV9jcnRjLmgiCi0KLSNkZWZpbmUgdG9fZHB1X2VuY29kZXJfcGh5c193Yih4KSBcCi0J Y29udGFpbmVyX29mKHgsIHN0cnVjdCBkcHVfZW5jb2Rlcl9waHlzX3diLCBiYXNlKQotCi0jZGVm aW5lIFdCSUQod2JfZW5jKSAoKHdiX2VuYykgPyB3Yl9lbmMtPndiX2Rldi0+d2JfaWR4IDogLTEp Ci0KLSNkZWZpbmUgVE9fUzE1RDE2KF94XykJKChfeF8pIDw8IDcpCi0KLS8qKgotICogZHB1X3Jn YjJ5dXZfNjAxbCAtIHJnYiB0byB5dXYgY29sb3Igc3BhY2UgY29udmVyc2lvbiBtYXRyaXgKLSAq Ci0gKi8KLXN0YXRpYyBzdHJ1Y3QgZHB1X2NzY19jZmcgZHB1X2VuY29kZXJfcGh5c193Yl9yZ2Iy eXV2XzYwMWwgPSB7Ci0JewotCQlUT19TMTVEMTYoMHgwMDgzKSwgVE9fUzE1RDE2KDB4MDEwMiks IFRPX1MxNUQxNigweDAwMzIpLAotCQlUT19TMTVEMTYoMHgxZmI1KSwgVE9fUzE1RDE2KDB4MWY2 YyksIFRPX1MxNUQxNigweDAwZTEpLAotCQlUT19TMTVEMTYoMHgwMGUxKSwgVE9fUzE1RDE2KDB4 MWY0NSksIFRPX1MxNUQxNigweDFmZGMpCi0JfSwKLQl7IDB4MDAsIDB4MDAsIDB4MDAgfSwKLQl7 IDB4MDA0MCwgMHgwMjAwLCAweDAyMDAgfSwKLQl7IDB4MDAwLCAweDNmZiwgMHgwMDAsIDB4M2Zm LCAweDAwMCwgMHgzZmYgfSwKLQl7IDB4MDQwLCAweDNhYywgMHgwNDAsIDB4M2MwLCAweDA0MCwg MHgzYzAgfSwKLX07Ci0KLS8qKgotICogZHB1X2VuY29kZXJfcGh5c193Yl9pc19tYXN0ZXIgLSBy ZXBvcnQgd2IgYWx3YXlzIGFzIG1hc3RlciBlbmNvZGVyCi0gKi8KLXN0YXRpYyBib29sIGRwdV9l bmNvZGVyX3BoeXNfd2JfaXNfbWFzdGVyKHN0cnVjdCBkcHVfZW5jb2Rlcl9waHlzICpwaHlzX2Vu YykKLXsKLQlyZXR1cm4gdHJ1ZTsKLX0KLQotLyoqCi0gKiBkcHVfZW5jb2Rlcl9waHlzX3diX2dl dF9pbnRyX3R5cGUgLSBnZXQgaW50ZXJydXB0IHR5cGUgYmFzZWQgb24gYmxvY2sgbW9kZQotICog QGh3X3diOglQb2ludGVyIHRvIGgvdyB3cml0ZWJhY2sgZHJpdmVyCi0gKi8KLXN0YXRpYyBlbnVt IGRwdV9pbnRyX3R5cGUgZHB1X2VuY29kZXJfcGh5c193Yl9nZXRfaW50cl90eXBlKAotCQlzdHJ1 Y3QgZHB1X2h3X3diICpod193YikKLXsKLQlyZXR1cm4gKGh3X3diLT5jYXBzLT5mZWF0dXJlcyAm IEJJVChEUFVfV0JfQkxPQ0tfTU9ERSkpID8KLQkJCURQVV9JUlFfVFlQRV9XQl9ST1RfQ09NUCA6 IERQVV9JUlFfVFlQRV9XQl9XRkRfQ09NUDsKLX0KLQotLyoqCi0gKiBkcHVfZW5jb2Rlcl9waHlz X3diX3NldF9vdF9saW1pdCAtIHNldCBPVCBsaW1pdCBmb3Igd3JpdGViYWNrIGludGVyZmFjZQot ICogQHBoeXNfZW5jOglQb2ludGVyIHRvIHBoeXNpY2FsIGVuY29kZXIKLSAqLwotc3RhdGljIHZv aWQgZHB1X2VuY29kZXJfcGh5c193Yl9zZXRfb3RfbGltaXQoCi0JCXN0cnVjdCBkcHVfZW5jb2Rl cl9waHlzICpwaHlzX2VuYykKLXsKLQlzdHJ1Y3QgZHB1X2VuY29kZXJfcGh5c193YiAqd2JfZW5j ID0gdG9fZHB1X2VuY29kZXJfcGh5c193YihwaHlzX2VuYyk7Ci0Jc3RydWN0IGRwdV9od193YiAq aHdfd2IgPSB3Yl9lbmMtPmh3X3diOwotCXN0cnVjdCBkcHVfdmJpZl9zZXRfb3RfcGFyYW1zIG90 X3BhcmFtczsKLQotCW1lbXNldCgmb3RfcGFyYW1zLCAwLCBzaXplb2Yob3RfcGFyYW1zKSk7Ci0J b3RfcGFyYW1zLnhpbl9pZCA9IGh3X3diLT5jYXBzLT54aW5faWQ7Ci0Jb3RfcGFyYW1zLm51bSA9 IGh3X3diLT5pZHggLSBXQl8wOwotCW90X3BhcmFtcy53aWR0aCA9IHdiX2VuYy0+d2Jfcm9pLnc7 Ci0Jb3RfcGFyYW1zLmhlaWdodCA9IHdiX2VuYy0+d2Jfcm9pLmg7Ci0Jb3RfcGFyYW1zLmlzX3dm ZCA9IHRydWU7Ci0Jb3RfcGFyYW1zLmZyYW1lX3JhdGUgPSBwaHlzX2VuYy0+Y2FjaGVkX21vZGUu dnJlZnJlc2g7Ci0Jb3RfcGFyYW1zLnZiaWZfaWR4ID0gaHdfd2ItPmNhcHMtPnZiaWZfaWR4Owot CW90X3BhcmFtcy5jbGtfY3RybCA9IGh3X3diLT5jYXBzLT5jbGtfY3RybDsKLQlvdF9wYXJhbXMu cmQgPSBmYWxzZTsKLQotCWRwdV92YmlmX3NldF9vdF9saW1pdChwaHlzX2VuYy0+ZHB1X2ttcywg Jm90X3BhcmFtcyk7Ci19Ci0KLS8qKgotICogZHB1X2VuY29kZXJfcGh5c193Yl9zZXRfdHJhZmZp Y19zaGFwZXIgLSBzZXQgdHJhZmZpYyBzaGFwZXIgZm9yIHdyaXRlYmFjawotICogQHBoeXNfZW5j OglQb2ludGVyIHRvIHBoeXNpY2FsIGVuY29kZXIKLSAqLwotc3RhdGljIHZvaWQgZHB1X2VuY29k ZXJfcGh5c193Yl9zZXRfdHJhZmZpY19zaGFwZXIoCi0JCXN0cnVjdCBkcHVfZW5jb2Rlcl9waHlz ICpwaHlzX2VuYykKLXsKLQlzdHJ1Y3QgZHB1X2VuY29kZXJfcGh5c193YiAqd2JfZW5jID0gdG9f ZHB1X2VuY29kZXJfcGh5c193YihwaHlzX2VuYyk7Ci0Jc3RydWN0IGRwdV9od193Yl9jZmcgKndi X2NmZyA9ICZ3Yl9lbmMtPndiX2NmZzsKLQotCS8qIHRyYWZmaWMgc2hhcGVyIGlzIG9ubHkgZW5h YmxlZCBmb3Igcm90YXRvciAqLwotCXdiX2NmZy0+dHNfY2ZnLmVuID0gZmFsc2U7Ci19Ci0KLS8q KgotICogZHB1X2VuY29kZXJfcGh5c193Yl9zZXRfcW9zX3JlbWFwIC0gc2V0IFFvUyByZW1hcHBl ciBmb3Igd3JpdGViYWNrCi0gKiBAcGh5c19lbmM6CVBvaW50ZXIgdG8gcGh5c2ljYWwgZW5jb2Rl cgotICovCi1zdGF0aWMgdm9pZCBkcHVfZW5jb2Rlcl9waHlzX3diX3NldF9xb3NfcmVtYXAoCi0J CXN0cnVjdCBkcHVfZW5jb2Rlcl9waHlzICpwaHlzX2VuYykKLXsKLQlzdHJ1Y3QgZHB1X2VuY29k ZXJfcGh5c193YiAqd2JfZW5jOwotCXN0cnVjdCBkcHVfaHdfd2IgKmh3X3diOwotCXN0cnVjdCBk cm1fY3J0YyAqY3J0YzsKLQlzdHJ1Y3QgZHB1X3ZiaWZfc2V0X3Fvc19wYXJhbXMgcW9zX3BhcmFt czsKLQotCWlmICghcGh5c19lbmMgfHwgIXBoeXNfZW5jLT5wYXJlbnQgfHwgIXBoeXNfZW5jLT5w YXJlbnQtPmNydGMpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGFyZ3VtZW50c1xuIik7Ci0JCXJl dHVybjsKLQl9Ci0KLQl3Yl9lbmMgPSB0b19kcHVfZW5jb2Rlcl9waHlzX3diKHBoeXNfZW5jKTsK LQljcnRjID0gcGh5c19lbmMtPnBhcmVudC0+Y3J0YzsKLQotCWlmICghd2JfZW5jLT5od193YiB8 fCAhd2JfZW5jLT5od193Yi0+Y2FwcykgewotCQlEUFVfRVJST1IoImludmFsaWQgd3JpdGViYWNr IGhhcmR3YXJlXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCWh3X3diID0gd2JfZW5jLT5od193YjsK LQotCW1lbXNldCgmcW9zX3BhcmFtcywgMCwgc2l6ZW9mKHFvc19wYXJhbXMpKTsKLQlxb3NfcGFy YW1zLnZiaWZfaWR4ID0gaHdfd2ItPmNhcHMtPnZiaWZfaWR4OwotCXFvc19wYXJhbXMueGluX2lk ID0gaHdfd2ItPmNhcHMtPnhpbl9pZDsKLQlxb3NfcGFyYW1zLmNsa19jdHJsID0gaHdfd2ItPmNh cHMtPmNsa19jdHJsOwotCXFvc19wYXJhbXMubnVtID0gaHdfd2ItPmlkeCAtIFdCXzA7Ci0JcW9z X3BhcmFtcy5pc19ydCA9IGRwdV9jcnRjX2dldF9jbGllbnRfdHlwZShjcnRjKSAhPSBOUlRfQ0xJ RU5UOwotCi0JRFBVX0RFQlVHKCJbcW9zX3JlbWFwXSB3YjolZCB2YmlmOiVkIHhpbjolZCBydDol ZFxuIiwKLQkJCXFvc19wYXJhbXMubnVtLAotCQkJcW9zX3BhcmFtcy52YmlmX2lkeCwKLQkJCXFv c19wYXJhbXMueGluX2lkLCBxb3NfcGFyYW1zLmlzX3J0KTsKLQotCWRwdV92YmlmX3NldF9xb3Nf cmVtYXAocGh5c19lbmMtPmRwdV9rbXMsICZxb3NfcGFyYW1zKTsKLX0KLQotLyoqCi0gKiBkcHVf ZW5jb2Rlcl9waHlzX3NldHVwX2NkbSAtIHNldHVwIGNocm9tYSBkb3duIGJsb2NrCi0gKiBAcGh5 c19lbmM6CVBvaW50ZXIgdG8gcGh5c2ljYWwgZW5jb2RlcgotICogQGZiOgkJUG9pbnRlciB0byBv dXRwdXQgZnJhbWVidWZmZXIKLSAqIEBmb3JtYXQ6CU91dHB1dCBmb3JtYXQKLSAqLwotdm9pZCBk cHVfZW5jb2Rlcl9waHlzX3NldHVwX2NkbShzdHJ1Y3QgZHB1X2VuY29kZXJfcGh5cyAqcGh5c19l bmMsCi0JCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLCBjb25zdCBzdHJ1Y3QgZHB1X2Zvcm1h dCAqZm9ybWF0LAotCQlzdHJ1Y3QgZHB1X3JlY3QgKndiX3JvaSkKLXsKLQlzdHJ1Y3QgZHB1X2h3 X2NkbSAqaHdfY2RtOwotCXN0cnVjdCBkcHVfaHdfY2RtX2NmZyAqY2RtX2NmZzsKLQlpbnQgcmV0 OwotCi0JaWYgKCFwaHlzX2VuYyB8fCAhZm9ybWF0KQotCQlyZXR1cm47Ci0KLQljZG1fY2ZnID0g JnBoeXNfZW5jLT5jZG1fY2ZnOwotCWh3X2NkbSA9IHBoeXNfZW5jLT5od19jZG07Ci0JaWYgKCFo d19jZG0pCi0JCXJldHVybjsKLQotCWlmICghRFBVX0ZPUk1BVF9JU19ZVVYoZm9ybWF0KSkgewot CQlEUFVfREVCVUcoIltjZG1fZGlzYWJsZSBmbXQ6JXhdXG4iLAotCQkJCWZvcm1hdC0+YmFzZS5w aXhlbF9mb3JtYXQpOwotCi0JCWlmIChod19jZG0gJiYgaHdfY2RtLT5vcHMuZGlzYWJsZSkKLQkJ CWh3X2NkbS0+b3BzLmRpc2FibGUoaHdfY2RtKTsKLQotCQlyZXR1cm47Ci0JfQotCi0JbWVtc2V0 KGNkbV9jZmcsIDAsIHNpemVvZihzdHJ1Y3QgZHB1X2h3X2NkbV9jZmcpKTsKLQotCWlmICghd2Jf cm9pKQotCQlyZXR1cm47Ci0KLQljZG1fY2ZnLT5vdXRwdXRfd2lkdGggPSB3Yl9yb2ktPnc7Ci0J Y2RtX2NmZy0+b3V0cHV0X2hlaWdodCA9IHdiX3JvaS0+aDsKLQljZG1fY2ZnLT5vdXRwdXRfZm10 ID0gZm9ybWF0OwotCWNkbV9jZmctPm91dHB1dF90eXBlID0gQ0RNX0NEV05fT1VUUFVUX1dCOwot CWNkbV9jZmctPm91dHB1dF9iaXRfZGVwdGggPSBEUFVfRk9STUFUX0lTX0RYKGZvcm1hdCkgPwot CQlDRE1fQ0RXTl9PVVRQVVRfMTBCSVQgOiBDRE1fQ0RXTl9PVVRQVVRfOEJJVDsKLQotCS8qIGVu YWJsZSAxMCBiaXQgbG9naWMgKi8KLQlzd2l0Y2ggKGNkbV9jZmctPm91dHB1dF9mbXQtPmNocm9t YV9zYW1wbGUpIHsKLQljYXNlIERQVV9DSFJPTUFfUkdCOgotCQljZG1fY2ZnLT5oX2Nkd25fdHlw ZSA9IENETV9DRFdOX0RJU0FCTEU7Ci0JCWNkbV9jZmctPnZfY2R3bl90eXBlID0gQ0RNX0NEV05f RElTQUJMRTsKLQkJYnJlYWs7Ci0JY2FzZSBEUFVfQ0hST01BX0gyVjE6Ci0JCWNkbV9jZmctPmhf Y2R3bl90eXBlID0gQ0RNX0NEV05fQ09TSVRFOwotCQljZG1fY2ZnLT52X2Nkd25fdHlwZSA9IENE TV9DRFdOX0RJU0FCTEU7Ci0JCWJyZWFrOwotCWNhc2UgRFBVX0NIUk9NQV80MjA6Ci0JCWNkbV9j ZmctPmhfY2R3bl90eXBlID0gQ0RNX0NEV05fQ09TSVRFOwotCQljZG1fY2ZnLT52X2Nkd25fdHlw ZSA9IENETV9DRFdOX09GRlNJVEU7Ci0JCWJyZWFrOwotCWNhc2UgRFBVX0NIUk9NQV9IMVYyOgot CWRlZmF1bHQ6Ci0JCURQVV9FUlJPUigidW5zdXBwb3J0ZWQgY2hyb21hIHNhbXBsaW5nIHR5cGVc biIpOwotCQljZG1fY2ZnLT5oX2Nkd25fdHlwZSA9IENETV9DRFdOX0RJU0FCTEU7Ci0JCWNkbV9j ZmctPnZfY2R3bl90eXBlID0gQ0RNX0NEV05fRElTQUJMRTsKLQkJYnJlYWs7Ci0JfQotCi0JRFBV X0RFQlVHKCJbY2RtX2VuYWJsZTolZCwlZCwlWCwlZCwlZCwlZCwlZF1cbiIsCi0JCQljZG1fY2Zn LT5vdXRwdXRfd2lkdGgsCi0JCQljZG1fY2ZnLT5vdXRwdXRfaGVpZ2h0LAotCQkJY2RtX2NmZy0+ b3V0cHV0X2ZtdC0+YmFzZS5waXhlbF9mb3JtYXQsCi0JCQljZG1fY2ZnLT5vdXRwdXRfdHlwZSwK LQkJCWNkbV9jZmctPm91dHB1dF9iaXRfZGVwdGgsCi0JCQljZG1fY2ZnLT5oX2Nkd25fdHlwZSwK LQkJCWNkbV9jZmctPnZfY2R3bl90eXBlKTsKLQotCWlmIChod19jZG0gJiYgaHdfY2RtLT5vcHMu c2V0dXBfY3NjX2RhdGEpIHsKLQkJcmV0ID0gaHdfY2RtLT5vcHMuc2V0dXBfY3NjX2RhdGEoaHdf Y2RtLAotCQkJCSZkcHVfZW5jb2Rlcl9waHlzX3diX3JnYjJ5dXZfNjAxbCk7Ci0JCWlmIChyZXQg PCAwKSB7Ci0JCQlEUFVfRVJST1IoImZhaWxlZCB0byBzZXR1cCBDU0MgJWRcbiIsIHJldCk7Ci0J CQlyZXR1cm47Ci0JCX0KLQl9Ci0KLQlpZiAoaHdfY2RtICYmIGh3X2NkbS0+b3BzLnNldHVwX2Nk d24pIHsKLQkJcmV0ID0gaHdfY2RtLT5vcHMuc2V0dXBfY2R3bihod19jZG0sIGNkbV9jZmcpOwot CQlpZiAocmV0IDwgMCkgewotCQkJRFBVX0VSUk9SKCJmYWlsZWQgdG8gc2V0dXAgQ0RNICVkXG4i LCByZXQpOwotCQkJcmV0dXJuOwotCQl9Ci0JfQotCi0JaWYgKGh3X2NkbSAmJiBod19jZG0tPm9w cy5lbmFibGUpIHsKLQkJcmV0ID0gaHdfY2RtLT5vcHMuZW5hYmxlKGh3X2NkbSwgY2RtX2NmZyk7 Ci0JCWlmIChyZXQgPCAwKSB7Ci0JCQlEUFVfRVJST1IoImZhaWxlZCB0byBlbmFibGUgQ0RNICVk XG4iLCByZXQpOwotCQkJcmV0dXJuOwotCQl9Ci0JfQotfQotCi0vKioKLSAqIGRwdV9lbmNvZGVy X3BoeXNfd2Jfc2V0dXBfZmIgLSBzZXR1cCBvdXRwdXQgZnJhbWVidWZmZXIKLSAqIEBwaHlzX2Vu YzoJUG9pbnRlciB0byBwaHlzaWNhbCBlbmNvZGVyCi0gKiBAZmI6CQlQb2ludGVyIHRvIG91dHB1 dCBmcmFtZWJ1ZmZlcgotICogQHdiX3JvaToJUG9pbnRlciB0byBvdXRwdXQgcmVnaW9uIG9mIGlu dGVyZXN0Ci0gKi8KLXN0YXRpYyB2b2lkIGRwdV9lbmNvZGVyX3BoeXNfd2Jfc2V0dXBfZmIoc3Ry dWN0IGRwdV9lbmNvZGVyX3BoeXMgKnBoeXNfZW5jLAotCQlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVy ICpmYiwgc3RydWN0IGRwdV9yZWN0ICp3Yl9yb2kpCi17Ci0Jc3RydWN0IGRwdV9lbmNvZGVyX3Bo eXNfd2IgKndiX2VuYyA9IHRvX2RwdV9lbmNvZGVyX3BoeXNfd2IocGh5c19lbmMpOwotCXN0cnVj dCBkcHVfaHdfd2IgKmh3X3diOwotCXN0cnVjdCBkcHVfaHdfd2JfY2ZnICp3Yl9jZmc7Ci0Jc3Ry dWN0IGRwdV9od193Yl9jZHBfY2ZnICpjZHBfY2ZnOwotCWNvbnN0IHN0cnVjdCBtc21fZm9ybWF0 ICpmb3JtYXQ7Ci0JaW50IHJldDsKLQlzdHJ1Y3QgbXNtX2dlbV9hZGRyZXNzX3NwYWNlICphc3Bh Y2U7Ci0KLQlpZiAoIXBoeXNfZW5jIHx8ICFwaHlzX2VuYy0+ZHB1X2ttcyB8fCAhcGh5c19lbmMt PmRwdV9rbXMtPmNhdGFsb2cgfHwKLQkJCSFwaHlzX2VuYy0+Y29ubmVjdG9yKSB7Ci0JCURQVV9F UlJPUigiaW52YWxpZCBlbmNvZGVyXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCWh3X3diID0gd2Jf ZW5jLT5od193YjsKLQl3Yl9jZmcgPSAmd2JfZW5jLT53Yl9jZmc7Ci0JY2RwX2NmZyA9ICZ3Yl9l bmMtPmNkcF9jZmc7Ci0JbWVtc2V0KHdiX2NmZywgMCwgc2l6ZW9mKHN0cnVjdCBkcHVfaHdfd2Jf Y2ZnKSk7Ci0KLQl3Yl9jZmctPmludGZfbW9kZSA9IHBoeXNfZW5jLT5pbnRmX21vZGU7Ci0KLQlh c3BhY2UgPSBwaHlzX2VuYy0+ZHB1X2ttcy0+YmFzZS5hc3BhY2U7Ci0KLQlyZXQgPSBtc21fZnJh bWVidWZmZXJfcHJlcGFyZShmYiwgYXNwYWNlKTsKLQlpZiAocmV0KSB7Ci0JCURQVV9FUlJPUigi cHJlcCBmYiBmYWlsZWQsICVkXG4iLCByZXQpOwotCQlyZXR1cm47Ci0JfQotCi0JLyogY2FjaGUg ZnJhbWVidWZmZXIgZm9yIGNsZWFudXAgaW4gd3JpdGViYWNrIGRvbmUgKi8KLQl3Yl9lbmMtPndi X2ZiID0gZmI7Ci0KLQlmb3JtYXQgPSBtc21fZnJhbWVidWZmZXJfZm9ybWF0KGZiKTsKLQlpZiAo IWZvcm1hdCkgewotCQlEUFVfREVCVUcoImludmFsaWQgZm9ybWF0IGZvciBmYlxuIik7Ci0JCXJl dHVybjsKLQl9Ci0KLQl3Yl9jZmctPmRlc3QuZm9ybWF0ID0gZHB1X2dldF9kcHVfZm9ybWF0X2V4 dCgKLQkJCWZvcm1hdC0+cGl4ZWxfZm9ybWF0LAotCQkJZmItPm1vZGlmaWVyKTsKLQlpZiAoIXdi X2NmZy0+ZGVzdC5mb3JtYXQpIHsKLQkJLyogdGhpcyBlcnJvciBzaG91bGQgYmUgZGV0ZWN0ZWQg ZHVyaW5nIGF0b21pY19jaGVjayAqLwotCQlEUFVfRVJST1IoImZhaWxlZCB0byBnZXQgZm9ybWF0 ICV4XG4iLCBmb3JtYXQtPnBpeGVsX2Zvcm1hdCk7Ci0JCXJldHVybjsKLQl9Ci0Jd2JfY2ZnLT5y b2kgPSAqd2Jfcm9pOwotCi0JaWYgKGh3X3diLT5jYXBzLT5mZWF0dXJlcyAmIEJJVChEUFVfV0Jf WFlfUk9JX09GRlNFVCkpIHsKLQkJcmV0ID0gZHB1X2Zvcm1hdF9wb3B1bGF0ZV9sYXlvdXQoYXNw YWNlLCBmYiwgJndiX2NmZy0+ZGVzdCk7Ci0JCWlmIChyZXQpIHsKLQkJCURQVV9ERUJVRygiZmFp bGVkIHRvIHBvcHVsYXRlIGxheW91dCAlZFxuIiwgcmV0KTsKLQkJCXJldHVybjsKLQkJfQotCQl3 Yl9jZmctPmRlc3Qud2lkdGggPSBmYi0+d2lkdGg7Ci0JCXdiX2NmZy0+ZGVzdC5oZWlnaHQgPSBm Yi0+aGVpZ2h0OwotCQl3Yl9jZmctPmRlc3QubnVtX3BsYW5lcyA9IHdiX2NmZy0+ZGVzdC5mb3Jt YXQtPm51bV9wbGFuZXM7Ci0JfSBlbHNlIHsKLQkJcmV0ID0gZHB1X2Zvcm1hdF9wb3B1bGF0ZV9s YXlvdXRfd2l0aF9yb2koYXNwYWNlLCBmYiwgd2Jfcm9pLAotCQkJJndiX2NmZy0+ZGVzdCk7Ci0J CWlmIChyZXQpIHsKLQkJCS8qIHRoaXMgZXJyb3Igc2hvdWxkIGJlIGRldGVjdGVkIGR1cmluZyBh dG9taWNfY2hlY2sgKi8KLQkJCURQVV9ERUJVRygiZmFpbGVkIHRvIHBvcHVsYXRlIGxheW91dCAl ZFxuIiwgcmV0KTsKLQkJCXJldHVybjsKLQkJfQotCX0KLQotCWlmICgod2JfY2ZnLT5kZXN0LmZv cm1hdC0+ZmV0Y2hfcGxhbmVzID09IERQVV9QTEFORV9QTEFOQVIpICYmCi0JCQkod2JfY2ZnLT5k ZXN0LmZvcm1hdC0+ZWxlbWVudFswXSA9PSBDMV9CX0NiKSkKLQkJc3dhcCh3Yl9jZmctPmRlc3Qu cGxhbmVfYWRkclsxXSwgd2JfY2ZnLT5kZXN0LnBsYW5lX2FkZHJbMl0pOwotCi0JRFBVX0RFQlVH KCJbZmJfb2Zmc2V0OiU4Ljh4LCU4Ljh4LCU4Ljh4LCU4Ljh4XVxuIiwKLQkJCXdiX2NmZy0+ZGVz dC5wbGFuZV9hZGRyWzBdLAotCQkJd2JfY2ZnLT5kZXN0LnBsYW5lX2FkZHJbMV0sCi0JCQl3Yl9j ZmctPmRlc3QucGxhbmVfYWRkclsyXSwKLQkJCXdiX2NmZy0+ZGVzdC5wbGFuZV9hZGRyWzNdKTsK LQlEUFVfREVCVUcoIltmYl9zdHJpZGU6JTguOHgsJTguOHgsJTguOHgsJTguOHhdXG4iLAotCQkJ d2JfY2ZnLT5kZXN0LnBsYW5lX3BpdGNoWzBdLAotCQkJd2JfY2ZnLT5kZXN0LnBsYW5lX3BpdGNo WzFdLAotCQkJd2JfY2ZnLT5kZXN0LnBsYW5lX3BpdGNoWzJdLAotCQkJd2JfY2ZnLT5kZXN0LnBs YW5lX3BpdGNoWzNdKTsKLQotCWlmIChod193Yi0+b3BzLnNldHVwX3JvaSkKLQkJaHdfd2ItPm9w cy5zZXR1cF9yb2koaHdfd2IsIHdiX2NmZyk7Ci0KLQlpZiAoaHdfd2ItPm9wcy5zZXR1cF9vdXRm b3JtYXQpCi0JCWh3X3diLT5vcHMuc2V0dXBfb3V0Zm9ybWF0KGh3X3diLCB3Yl9jZmcpOwotCi0J aWYgKGh3X3diLT5vcHMuc2V0dXBfY2RwKSB7Ci0JCW1lbXNldChjZHBfY2ZnLCAwLCBzaXplb2Yo c3RydWN0IGRwdV9od193Yl9jZHBfY2ZnKSk7Ci0KLQkJY2RwX2NmZy0+ZW5hYmxlID0gcGh5c19l bmMtPmRwdV9rbXMtPmNhdGFsb2ctPnBlcmYuY2RwX2NmZwotCQkJCVtEUFVfUEVSRl9DRFBfVVNB R0VfTlJUXS53cl9lbmFibGU7Ci0JCWNkcF9jZmctPnVid2NfbWV0YV9lbmFibGUgPQotCQkJCURQ VV9GT1JNQVRfSVNfVUJXQyh3Yl9jZmctPmRlc3QuZm9ybWF0KTsKLQkJY2RwX2NmZy0+dGlsZV9h bW9ydGl6ZV9lbmFibGUgPQotCQkJCURQVV9GT1JNQVRfSVNfVUJXQyh3Yl9jZmctPmRlc3QuZm9y bWF0KSB8fAotCQkJCURQVV9GT1JNQVRfSVNfVElMRSh3Yl9jZmctPmRlc3QuZm9ybWF0KTsKLQkJ Y2RwX2NmZy0+cHJlbG9hZF9haGVhZCA9IERQVV9XQl9DRFBfUFJFTE9BRF9BSEVBRF82NDsKLQot CQlod193Yi0+b3BzLnNldHVwX2NkcChod193YiwgY2RwX2NmZyk7Ci0JfQotCi0JaWYgKGh3X3di LT5vcHMuc2V0dXBfb3V0YWRkcmVzcykgewotCQlEUFVfRVZUMzIoaHdfd2ItPmlkeCwKLQkJCQl3 Yl9jZmctPmRlc3Qud2lkdGgsCi0JCQkJd2JfY2ZnLT5kZXN0LmhlaWdodCwKLQkJCQl3Yl9jZmct PmRlc3QucGxhbmVfYWRkclswXSwKLQkJCQl3Yl9jZmctPmRlc3QucGxhbmVfc2l6ZVswXSwKLQkJ CQl3Yl9jZmctPmRlc3QucGxhbmVfYWRkclsxXSwKLQkJCQl3Yl9jZmctPmRlc3QucGxhbmVfc2l6 ZVsxXSwKLQkJCQl3Yl9jZmctPmRlc3QucGxhbmVfYWRkclsyXSwKLQkJCQl3Yl9jZmctPmRlc3Qu cGxhbmVfc2l6ZVsyXSwKLQkJCQl3Yl9jZmctPmRlc3QucGxhbmVfYWRkclszXSwKLQkJCQl3Yl9j ZmctPmRlc3QucGxhbmVfc2l6ZVszXSk7Ci0JCWh3X3diLT5vcHMuc2V0dXBfb3V0YWRkcmVzcyho d193Yiwgd2JfY2ZnKTsKLQl9Ci19Ci0KLS8qKgotICogZHB1X2VuY29kZXJfcGh5c193Yl9zZXR1 cF9jZHAgLSBzZXR1cCBjaHJvbWEgZG93biBwcmVmZXRjaCBibG9jawotICogQHBoeXNfZW5jOglQ b2ludGVyIHRvIHBoeXNpY2FsIGVuY29kZXIKLSAqLwotc3RhdGljIHZvaWQgZHB1X2VuY29kZXJf cGh5c193Yl9zZXR1cF9jZHAoc3RydWN0IGRwdV9lbmNvZGVyX3BoeXMgKnBoeXNfZW5jKQotewot CXN0cnVjdCBkcHVfZW5jb2Rlcl9waHlzX3diICp3Yl9lbmMgPSB0b19kcHVfZW5jb2Rlcl9waHlz X3diKHBoeXNfZW5jKTsKLQlzdHJ1Y3QgZHB1X2h3X3diICpod193YiA9IHdiX2VuYy0+aHdfd2I7 Ci0Jc3RydWN0IGRwdV9od19pbnRmX2NmZyAqaW50Zl9jZmcgPSAmd2JfZW5jLT5pbnRmX2NmZzsK LQotCW1lbXNldChpbnRmX2NmZywgMCwgc2l6ZW9mKHN0cnVjdCBkcHVfaHdfaW50Zl9jZmcpKTsK LQotCWludGZfY2ZnLT5pbnRmID0gRFBVX05PTkU7Ci0JaW50Zl9jZmctPndiID0gaHdfd2ItPmlk eDsKLQlpbnRmX2NmZy0+bW9kZV8zZCA9IGRwdV9lbmNvZGVyX2hlbHBlcl9nZXRfM2RfYmxlbmRf bW9kZShwaHlzX2VuYyk7Ci0KLQlpZiAocGh5c19lbmMtPmh3X2N0bCAmJiBwaHlzX2VuYy0+aHdf Y3RsLT5vcHMuc2V0dXBfaW50Zl9jZmcpCi0JCXBoeXNfZW5jLT5od19jdGwtPm9wcy5zZXR1cF9p bnRmX2NmZyhwaHlzX2VuYy0+aHdfY3RsLAotCQkJCWludGZfY2ZnKTsKLX0KLQotLyoqCi0gKiBk cHVfZW5jb2Rlcl9waHlzX3diX2F0b21pY19jaGVjayAtIHZlcmlmeSBhbmQgZml4dXAgZ2l2ZW4g YXRvbWljIHN0YXRlcwotICogQHBoeXNfZW5jOglQb2ludGVyIHRvIHBoeXNpY2FsIGVuY29kZXIK LSAqIEBjcnRjX3N0YXRlOglQb2ludGVyIHRvIENSVEMgYXRvbWljIHN0YXRlCi0gKiBAY29ubl9z dGF0ZToJUG9pbnRlciB0byBjb25uZWN0b3IgYXRvbWljIHN0YXRlCi0gKi8KLXN0YXRpYyBpbnQg ZHB1X2VuY29kZXJfcGh5c193Yl9hdG9taWNfY2hlY2soCi0JCXN0cnVjdCBkcHVfZW5jb2Rlcl9w aHlzICpwaHlzX2VuYywKLQkJc3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAotCQlz dHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubl9zdGF0ZSkKLXsKLQlzdHJ1Y3QgZHB1X2Vu Y29kZXJfcGh5c193YiAqd2JfZW5jID0gdG9fZHB1X2VuY29kZXJfcGh5c193YihwaHlzX2VuYyk7 Ci0Jc3RydWN0IGRwdV9od193YiAqaHdfd2IgPSB3Yl9lbmMtPmh3X3diOwotCWNvbnN0IHN0cnVj dCBkcHVfd2JfY2ZnICp3Yl9jZmcgPSBod193Yi0+Y2FwczsKLQlzdHJ1Y3QgZHJtX2ZyYW1lYnVm ZmVyICpmYjsKLQljb25zdCBzdHJ1Y3QgZHB1X2Zvcm1hdCAqZm10OwotCXN0cnVjdCBkcHVfcmVj dCB3Yl9yb2k7Ci0JY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUgPSAmY3J0Y19z dGF0ZS0+bW9kZTsKLQlpbnQgcmM7Ci0KLQlEUFVfREVCVUcoIlthdG9taWNfY2hlY2s6JWQsJWQs XCIlc1wiLCVkLCVkXVxuIiwKLQkJCWh3X3diLT5pZHggLSBXQl8wLCBtb2RlLT5iYXNlLmlkLCBt b2RlLT5uYW1lLAotCQkJbW9kZS0+aGRpc3BsYXksIG1vZGUtPnZkaXNwbGF5KTsKLQotCWlmICgh Y29ubl9zdGF0ZSB8fCAhY29ubl9zdGF0ZS0+Y29ubmVjdG9yKSB7Ci0JCURQVV9FUlJPUigiaW52 YWxpZCBjb25uZWN0b3Igc3RhdGVcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9IGVsc2UgaWYg KGNvbm5fc3RhdGUtPmNvbm5lY3Rvci0+c3RhdHVzICE9Ci0JCQljb25uZWN0b3Jfc3RhdHVzX2Nv bm5lY3RlZCkgewotCQlEUFVfRVJST1IoImNvbm5lY3RvciBub3QgY29ubmVjdGVkICVkXG4iLAot CQkJCWNvbm5fc3RhdGUtPmNvbm5lY3Rvci0+c3RhdHVzKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0J fQotCi0JbWVtc2V0KCZ3Yl9yb2ksIDAsIHNpemVvZihzdHJ1Y3QgZHB1X3JlY3QpKTsKLQotCXJj ID0gZHB1X3diX2Nvbm5lY3Rvcl9zdGF0ZV9nZXRfb3V0cHV0X3JvaShjb25uX3N0YXRlLCAmd2Jf cm9pKTsKLQlpZiAocmMpIHsKLQkJRFBVX0VSUk9SKCJmYWlsZWQgdG8gZ2V0IHJvaSAlZFxuIiwg cmMpOwotCQlyZXR1cm4gcmM7Ci0JfQotCi0JRFBVX0RFQlVHKCJbcm9pOiV1LCV1LCV1LCV1XVxu Iiwgd2Jfcm9pLngsIHdiX3JvaS55LAotCQkJd2Jfcm9pLncsIHdiX3JvaS5oKTsKLQotCWZiID0g ZHB1X3diX2Nvbm5lY3Rvcl9zdGF0ZV9nZXRfb3V0cHV0X2ZiKGNvbm5fc3RhdGUpOwotCWlmICgh ZmIpIHsKLQkJRFBVX0VSUk9SKCJubyBvdXRwdXQgZnJhbWVidWZmZXJcbiIpOwotCQlyZXR1cm4g LUVJTlZBTDsKLQl9Ci0KLQlEUFVfREVCVUcoIltmYl9pZDoldV1bZmI6JXUsJXVdXG4iLCBmYi0+ YmFzZS5pZCwKLQkJCWZiLT53aWR0aCwgZmItPmhlaWdodCk7Ci0KLQlmbXQgPSBkcHVfZ2V0X2Rw dV9mb3JtYXRfZXh0KGZiLT5mb3JtYXQtPmZvcm1hdCwgZmItPm1vZGlmaWVyKTsKLQlpZiAoIWZt dCkgewotCQlEUFVfRVJST1IoInVuc3VwcG9ydGVkIG91dHB1dCBwaXhlbCBmb3JtYXQ6JXhcbiIs Ci0JCQkJZmItPmZvcm1hdC0+Zm9ybWF0KTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JRFBV X0RFQlVHKCJbZmJfZm10OiV4LCVsbHhdXG4iLCBmYi0+Zm9ybWF0LT5mb3JtYXQsCi0JCQlmYi0+ bW9kaWZpZXIpOwotCi0JaWYgKERQVV9GT1JNQVRfSVNfWVVWKGZtdCkgJiYKLQkJCSEod2JfY2Zn LT5mZWF0dXJlcyAmIEJJVChEUFVfV0JfWVVWX0NPTkZJRykpKSB7Ci0JCURQVV9FUlJPUigiaW52 YWxpZCBvdXRwdXQgZm9ybWF0ICV4XG4iLCBmbXQtPmJhc2UucGl4ZWxfZm9ybWF0KTsKLQkJcmV0 dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKERQVV9GT1JNQVRfSVNfVUJXQyhmbXQpICYmCi0JCQkh KHdiX2NmZy0+ZmVhdHVyZXMgJiBCSVQoRFBVX1dCX1VCV0MpKSkgewotCQlEUFVfRVJST1IoImlu dmFsaWQgb3V0cHV0IGZvcm1hdCAleFxuIiwgZm10LT5iYXNlLnBpeGVsX2Zvcm1hdCk7Ci0JCXJl dHVybiAtRUlOVkFMOwotCX0KLQotCWlmIChEUFVfRk9STUFUX0lTX1lVVihmbXQpICE9ICEhcGh5 c19lbmMtPmh3X2NkbSkKLQkJY3J0Y19zdGF0ZS0+bW9kZV9jaGFuZ2VkID0gdHJ1ZTsKLQotCWlm ICh3Yl9yb2kudyAmJiB3Yl9yb2kuaCkgewotCQlpZiAod2Jfcm9pLncgIT0gbW9kZS0+aGRpc3Bs YXkpIHsKLQkJCURQVV9FUlJPUigiaW52YWxpZCByb2kgdz0lZCwgbW9kZSB3PSVkXG4iLCB3Yl9y b2kudywKLQkJCQkJbW9kZS0+aGRpc3BsYXkpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0gZWxz ZSBpZiAod2Jfcm9pLmggIT0gbW9kZS0+dmRpc3BsYXkpIHsKLQkJCURQVV9FUlJPUigiaW52YWxp ZCByb2kgaD0lZCwgbW9kZSBoPSVkXG4iLCB3Yl9yb2kuaCwKLQkJCQkJbW9kZS0+dmRpc3BsYXkp OwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0gZWxzZSBpZiAod2Jfcm9pLnggKyB3Yl9yb2kudyA+ IGZiLT53aWR0aCkgewotCQkJRFBVX0VSUk9SKCJpbnZhbGlkIHJvaSB4PSVkLCB3PSVkLCBmYiB3 PSVkXG4iLAotCQkJCQl3Yl9yb2kueCwgd2Jfcm9pLncsIGZiLT53aWR0aCk7Ci0JCQlyZXR1cm4g LUVJTlZBTDsKLQkJfSBlbHNlIGlmICh3Yl9yb2kueSArIHdiX3JvaS5oID4gZmItPmhlaWdodCkg ewotCQkJRFBVX0VSUk9SKCJpbnZhbGlkIHJvaSB5PSVkLCBoPSVkLCBmYiBoPSVkXG4iLAotCQkJ CQl3Yl9yb2kueSwgd2Jfcm9pLmgsIGZiLT5oZWlnaHQpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0J CX0gZWxzZSBpZiAod2Jfcm9pLncgPiB3Yl9jZmctPnNibGstPm1heGxpbmV3aWR0aCkgewotCQkJ RFBVX0VSUk9SKCJpbnZhbGlkIHJvaSB3PSVkLCBtYXhsaW5ld2lkdGg9JXVcbiIsCi0JCQkJCXdi X3JvaS53LCB3Yl9jZmctPnNibGstPm1heGxpbmV3aWR0aCk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsK LQkJfQotCX0gZWxzZSB7Ci0JCWlmICh3Yl9yb2kueCB8fCB3Yl9yb2kueSkgewotCQkJRFBVX0VS Uk9SKCJpbnZhbGlkIHJvaSB4PSVkLCB5PSVkXG4iLAotCQkJCQl3Yl9yb2kueCwgd2Jfcm9pLnkp OwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0gZWxzZSBpZiAoZmItPndpZHRoICE9IG1vZGUtPmhk aXNwbGF5KSB7Ci0JCQlEUFVfRVJST1IoImludmFsaWQgZmIgdz0lZCwgbW9kZSB3PSVkXG4iLCBm Yi0+d2lkdGgsCi0JCQkJCW1vZGUtPmhkaXNwbGF5KTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9 IGVsc2UgaWYgKGZiLT5oZWlnaHQgIT0gbW9kZS0+dmRpc3BsYXkpIHsKLQkJCURQVV9FUlJPUigi aW52YWxpZCBmYiBoPSVkLCBtb2RlIGg9JWRcbiIsIGZiLT5oZWlnaHQsCi0JCQkJCW1vZGUtPnZk aXNwbGF5KTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9IGVsc2UgaWYgKGZiLT53aWR0aCA+IHdi X2NmZy0+c2Jsay0+bWF4bGluZXdpZHRoKSB7Ci0JCQlEUFVfRVJST1IoImludmFsaWQgZmIgdz0l ZCwgbWF4bGluZXdpZHRoPSV1XG4iLAotCQkJCQlmYi0+d2lkdGgsIHdiX2NmZy0+c2Jsay0+bWF4 bGluZXdpZHRoKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JfQotCi0JcmV0dXJuIDA7Ci19 Ci0KLS8qKgotICogX2RwdV9lbmNvZGVyX3BoeXNfd2JfdXBkYXRlX2ZsdXNoIC0gZmx1c2ggaGFy ZHdhcmUgdXBkYXRlCi0gKiBAcGh5c19lbmM6CVBvaW50ZXIgdG8gcGh5c2ljYWwgZW5jb2Rlcgot ICovCi1zdGF0aWMgdm9pZCBfZHB1X2VuY29kZXJfcGh5c193Yl91cGRhdGVfZmx1c2goc3RydWN0 IGRwdV9lbmNvZGVyX3BoeXMgKnBoeXNfZW5jKQotewotCXN0cnVjdCBkcHVfZW5jb2Rlcl9waHlz X3diICp3Yl9lbmMgPSB0b19kcHVfZW5jb2Rlcl9waHlzX3diKHBoeXNfZW5jKTsKLQlzdHJ1Y3Qg ZHB1X2h3X3diICpod193YjsKLQlzdHJ1Y3QgZHB1X2h3X2N0bCAqaHdfY3RsOwotCXN0cnVjdCBk cHVfaHdfY2RtICpod19jZG07Ci0JdTMyIGZsdXNoX21hc2sgPSAwOwotCi0JaWYgKCFwaHlzX2Vu YykKLQkJcmV0dXJuOwotCi0JaHdfd2IgPSB3Yl9lbmMtPmh3X3diOwotCWh3X2N0bCA9IHBoeXNf ZW5jLT5od19jdGw7Ci0JaHdfY2RtID0gcGh5c19lbmMtPmh3X2NkbTsKLQotCURQVV9ERUJVRygi W3diOiVkXVxuIiwgaHdfd2ItPmlkeCAtIFdCXzApOwotCi0JaWYgKCFod19jdGwpIHsKLQkJRFBV X0RFQlVHKCJbd2I6JWRdIG5vIGN0bCBhc3NpZ25lZFxuIiwgaHdfd2ItPmlkeCAtIFdCXzApOwot CQlyZXR1cm47Ci0JfQotCi0JaWYgKGh3X2N0bC0+b3BzLmdldF9iaXRtYXNrX3diKQotCQlod19j dGwtPm9wcy5nZXRfYml0bWFza193Yihod19jdGwsICZmbHVzaF9tYXNrLCBod193Yi0+aWR4KTsK LQotCWlmIChod19jdGwtPm9wcy5nZXRfYml0bWFza19jZG0gJiYgaHdfY2RtKQotCQlod19jdGwt Pm9wcy5nZXRfYml0bWFza19jZG0oaHdfY3RsLCAmZmx1c2hfbWFzaywgaHdfY2RtLT5pZHgpOwot Ci0JaWYgKGh3X2N0bC0+b3BzLnVwZGF0ZV9wZW5kaW5nX2ZsdXNoKQotCQlod19jdGwtPm9wcy51 cGRhdGVfcGVuZGluZ19mbHVzaChod19jdGwsIGZsdXNoX21hc2spOwotCi0JaWYgKGh3X2N0bC0+ b3BzLmdldF9wZW5kaW5nX2ZsdXNoKQotCQlmbHVzaF9tYXNrID0gaHdfY3RsLT5vcHMuZ2V0X3Bl bmRpbmdfZmx1c2goaHdfY3RsKTsKLQotCURQVV9ERUJVRygiUGVuZGluZyBmbHVzaCBtYXNrIGZv ciBDVExfJWQgaXMgMHgleCwgV0IgJWRcbiIsCi0JCQlod19jdGwtPmlkeCAtIENUTF8wLCBmbHVz aF9tYXNrLCBod193Yi0+aWR4IC0gV0JfMCk7Ci19Ci0KLS8qKgotICogZHB1X2VuY29kZXJfcGh5 c193Yl9zZXR1cCAtIHNldHVwIHdyaXRlYmFjayBlbmNvZGVyCi0gKiBAcGh5c19lbmM6CVBvaW50 ZXIgdG8gcGh5c2ljYWwgZW5jb2RlcgotICovCi1zdGF0aWMgdm9pZCBkcHVfZW5jb2Rlcl9waHlz X3diX3NldHVwKAotCQlzdHJ1Y3QgZHB1X2VuY29kZXJfcGh5cyAqcGh5c19lbmMpCi17Ci0Jc3Ry dWN0IGRwdV9lbmNvZGVyX3BoeXNfd2IgKndiX2VuYyA9IHRvX2RwdV9lbmNvZGVyX3BoeXNfd2Io cGh5c19lbmMpOwotCXN0cnVjdCBkcHVfaHdfd2IgKmh3X3diID0gd2JfZW5jLT5od193YjsKLQlz dHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSBtb2RlID0gcGh5c19lbmMtPmNhY2hlZF9tb2RlOwotCXN0 cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiOwotCXN0cnVjdCBkcHVfcmVjdCAqd2Jfcm9pID0gJndi X2VuYy0+d2Jfcm9pOwotCi0JRFBVX0RFQlVHKCJbbW9kZV9zZXQ6JWQsJWQsXCIlc1wiLCVkLCVk XVxuIiwKLQkJCWh3X3diLT5pZHggLSBXQl8wLCBtb2RlLmJhc2UuaWQsIG1vZGUubmFtZSwKLQkJ CW1vZGUuaGRpc3BsYXksIG1vZGUudmRpc3BsYXkpOwotCi0JbWVtc2V0KHdiX3JvaSwgMCwgc2l6 ZW9mKHN0cnVjdCBkcHVfcmVjdCkpOwotCi0JLyogY2xlYXIgd3JpdGViYWNrIGZyYW1lYnVmZmVy IC0gd2lsbCBiZSB1cGRhdGVkIGluIHNldHVwX2ZiICovCi0Jd2JfZW5jLT53Yl9mYiA9IE5VTEw7 Ci0KLQlpZiAocGh5c19lbmMtPmVuYWJsZV9zdGF0ZSA9PSBEUFVfRU5DX0RJU0FCTElORykgewot CQlmYiA9IHdiX2VuYy0+ZmJfZGlzYWJsZTsKLQkJd2Jfcm9pLT53ID0gMDsKLQkJd2Jfcm9pLT5o ID0gMDsKLQl9IGVsc2UgewotCQlmYiA9IGRwdV93Yl9nZXRfb3V0cHV0X2ZiKHdiX2VuYy0+d2Jf ZGV2KTsKLQkJZHB1X3diX2dldF9vdXRwdXRfcm9pKHdiX2VuYy0+d2JfZGV2LCB3Yl9yb2kpOwot CX0KLQotCWlmICghZmIpIHsKLQkJRFBVX0RFQlVHKCJubyBvdXRwdXQgZnJhbWVidWZmZXJcbiIp OwotCQlyZXR1cm47Ci0JfQotCi0JRFBVX0RFQlVHKCJbZmJfaWQ6JXVdW2ZiOiV1LCV1XVxuIiwg ZmItPmJhc2UuaWQsCi0JCQlmYi0+d2lkdGgsIGZiLT5oZWlnaHQpOwotCi0JaWYgKHdiX3JvaS0+ dyA9PSAwIHx8IHdiX3JvaS0+aCA9PSAwKSB7Ci0JCXdiX3JvaS0+eCA9IDA7Ci0JCXdiX3JvaS0+ eSA9IDA7Ci0JCXdiX3JvaS0+dyA9IGZiLT53aWR0aDsKLQkJd2Jfcm9pLT5oID0gZmItPmhlaWdo dDsKLQl9Ci0KLQlEUFVfREVCVUcoIltyb2k6JXUsJXUsJXUsJXVdXG4iLCB3Yl9yb2ktPngsIHdi X3JvaS0+eSwKLQkJCXdiX3JvaS0+dywgd2Jfcm9pLT5oKTsKLQotCXdiX2VuYy0+d2JfZm10ID0g ZHB1X2dldF9kcHVfZm9ybWF0X2V4dChmYi0+Zm9ybWF0LT5mb3JtYXQsCi0JCQkJCQkJZmItPm1v ZGlmaWVyKTsKLQlpZiAoIXdiX2VuYy0+d2JfZm10KSB7Ci0JCURQVV9FUlJPUigidW5zdXBwb3J0 ZWQgb3V0cHV0IHBpeGVsIGZvcm1hdDogJWRcbiIsCi0JCQkJZmItPmZvcm1hdC0+Zm9ybWF0KTsK LQkJcmV0dXJuOwotCX0KLQotCURQVV9ERUJVRygiW2ZiX2ZtdDoleCwlbGx4XVxuIiwgZmItPmZv cm1hdC0+Zm9ybWF0LAotCQkJZmItPm1vZGlmaWVyKTsKLQotCWRwdV9lbmNvZGVyX3BoeXNfd2Jf c2V0X290X2xpbWl0KHBoeXNfZW5jKTsKLQotCWRwdV9lbmNvZGVyX3BoeXNfd2Jfc2V0X3RyYWZm aWNfc2hhcGVyKHBoeXNfZW5jKTsKLQotCWRwdV9lbmNvZGVyX3BoeXNfd2Jfc2V0X3Fvc19yZW1h cChwaHlzX2VuYyk7Ci0KLQlkcHVfZW5jb2Rlcl9waHlzX3NldHVwX2NkbShwaHlzX2VuYywgZmIs IHdiX2VuYy0+d2JfZm10LCB3Yl9yb2kpOwotCi0JZHB1X2VuY29kZXJfcGh5c193Yl9zZXR1cF9m YihwaHlzX2VuYywgZmIsIHdiX3JvaSk7Ci0KLQlkcHVfZW5jb2Rlcl9waHlzX3diX3NldHVwX2Nk cChwaHlzX2VuYyk7Ci19Ci0KLS8qKgotICogZHB1X2VuY29kZXJfcGh5c193Yl91bnJlZ2lzdGVy X2lycSAtIHVucmVnaXN0ZXIgd3JpdGViYWNrIGludGVycnVwdCBoYW5kbGVyCi0gKiBAcGh5c19l bmM6CVBvaW50ZXIgdG8gcGh5c2ljYWwgZW5jb2RlcgotICovCi1zdGF0aWMgaW50IGRwdV9lbmNv ZGVyX3BoeXNfd2JfdW5yZWdpc3Rlcl9pcnEoCi0JCXN0cnVjdCBkcHVfZW5jb2Rlcl9waHlzICpw aHlzX2VuYykKLXsKLQlzdHJ1Y3QgZHB1X2VuY29kZXJfcGh5c193YiAqd2JfZW5jID0gdG9fZHB1 X2VuY29kZXJfcGh5c193YihwaHlzX2VuYyk7Ci0Jc3RydWN0IGRwdV9od193YiAqaHdfd2IgPSB3 Yl9lbmMtPmh3X3diOwotCi0JaWYgKHdiX2VuYy0+YnlwYXNzX2lycXJlZykKLQkJcmV0dXJuIDA7 Ci0KLQlkcHVfY29yZV9pcnFfZGlzYWJsZShwaHlzX2VuYy0+ZHB1X2ttcywgJndiX2VuYy0+aXJx X2lkeCwgMSk7Ci0JZHB1X2NvcmVfaXJxX3VucmVnaXN0ZXJfY2FsbGJhY2socGh5c19lbmMtPmRw dV9rbXMsIHdiX2VuYy0+aXJxX2lkeCwKLQkJCSZ3Yl9lbmMtPmlycV9jYik7Ci0KLQlEUFVfREVC VUcoInVuLXJlZ2lzdGVyIElSUSBmb3Igd2IgJWQsIGlycV9pZHg9JWRcbiIsCi0JCQlod193Yi0+ aWR4IC0gV0JfMCwKLQkJCXdiX2VuYy0+aXJxX2lkeCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoq Ci0gKiBkcHVfZW5jb2Rlcl9waHlzX3diX2RvbmVfaXJxIC0gd3JpdGViYWNrIGludGVycnVwdCBo YW5kbGVyCi0gKiBAYXJnOglQb2ludGVyIHRvIHdyaXRlYmFjayBlbmNvZGVyCi0gKiBAaXJxX2lk eDoJaW50ZXJydXB0IGluZGV4Ci0gKi8KLXN0YXRpYyB2b2lkIGRwdV9lbmNvZGVyX3BoeXNfd2Jf ZG9uZV9pcnEodm9pZCAqYXJnLCBpbnQgaXJxX2lkeCkKLXsKLQlzdHJ1Y3QgZHB1X2VuY29kZXJf cGh5c193YiAqd2JfZW5jID0gYXJnOwotCXN0cnVjdCBkcHVfZW5jb2Rlcl9waHlzICpwaHlzX2Vu YyA9ICZ3Yl9lbmMtPmJhc2U7Ci0Jc3RydWN0IGRwdV9od193YiAqaHdfd2IgPSB3Yl9lbmMtPmh3 X3diOwotCXUzMiBldmVudCA9IDA7Ci0KLQlEUFVfREVCVUcoIlt3YjolZCwldV1cbiIsIGh3X3di LT5pZHggLSBXQl8wLAotCQkJd2JfZW5jLT5mcmFtZV9jb3VudCk7Ci0KLQkvKiBkb24ndCBub3Rp ZnkgdXBwZXIgbGF5ZXIgZm9yIGludGVybmFsIGNvbW1pdCAqLwotCWlmIChwaHlzX2VuYy0+ZW5h YmxlX3N0YXRlID09IERQVV9FTkNfRElTQUJMSU5HKQotCQlnb3RvIGNvbXBsZXRlOwotCi0JZXZl bnQgPSBEUFVfRU5DT0RFUl9GUkFNRV9FVkVOVF9ET05FOwotCi0JaWYgKHBoeXNfZW5jLT5wYXJl bnRfb3BzLmhhbmRsZV9mcmFtZV9kb25lKQotCQlwaHlzX2VuYy0+cGFyZW50X29wcy5oYW5kbGVf ZnJhbWVfZG9uZShwaHlzX2VuYy0+cGFyZW50LAotCQkJCXBoeXNfZW5jLCBldmVudCk7Ci0KLQlp ZiAocGh5c19lbmMtPnBhcmVudF9vcHMuaGFuZGxlX3ZibGFua192aXJ0KQotCQlwaHlzX2VuYy0+ cGFyZW50X29wcy5oYW5kbGVfdmJsYW5rX3ZpcnQocGh5c19lbmMtPnBhcmVudCwKLQkJCQlwaHlz X2VuYyk7Ci0KLQlEUFVfRVZUMzJfSVJRKERSTUlEKHBoeXNfZW5jLT5wYXJlbnQpLCBod193Yi0+ aWR4IC0gV0JfMCwgZXZlbnQpOwotCi1jb21wbGV0ZToKLQljb21wbGV0ZV9hbGwoJndiX2VuYy0+ d2Jkb25lX2NvbXBsZXRlKTsKLX0KLQotLyoqCi0gKiBkcHVfZW5jb2Rlcl9waHlzX3diX3JlZ2lz dGVyX2lycSAtIHJlZ2lzdGVyIHdyaXRlYmFjayBpbnRlcnJ1cHQgaGFuZGxlcgotICogQHBoeXNf ZW5jOglQb2ludGVyIHRvIHBoeXNpY2FsIGVuY29kZXIKLSAqLwotc3RhdGljIGludCBkcHVfZW5j b2Rlcl9waHlzX3diX3JlZ2lzdGVyX2lycShzdHJ1Y3QgZHB1X2VuY29kZXJfcGh5cyAqcGh5c19l bmMpCi17Ci0Jc3RydWN0IGRwdV9lbmNvZGVyX3BoeXNfd2IgKndiX2VuYyA9IHRvX2RwdV9lbmNv ZGVyX3BoeXNfd2IocGh5c19lbmMpOwotCXN0cnVjdCBkcHVfaHdfd2IgKmh3X3diID0gd2JfZW5j LT5od193YjsKLQlzdHJ1Y3QgZHB1X2lycV9jYWxsYmFjayAqaXJxX2NiID0gJndiX2VuYy0+aXJx X2NiOwotCWVudW0gZHB1X2ludHJfdHlwZSBpbnRyX3R5cGU7Ci0JaW50IHJldCA9IDA7Ci0KLQlp ZiAod2JfZW5jLT5ieXBhc3NfaXJxcmVnKQotCQlyZXR1cm4gMDsKLQotCWludHJfdHlwZSA9IGRw dV9lbmNvZGVyX3BoeXNfd2JfZ2V0X2ludHJfdHlwZShod193Yik7Ci0Jd2JfZW5jLT5pcnFfaWR4 ID0gZHB1X2NvcmVfaXJxX2lkeF9sb29rdXAocGh5c19lbmMtPmRwdV9rbXMsCi0JCQlpbnRyX3R5 cGUsIGh3X3diLT5pZHgpOwotCWlmICh3Yl9lbmMtPmlycV9pZHggPCAwKSB7Ci0JCURQVV9FUlJP UigKLQkJCSJmYWlsZWQgdG8gbG9va3VwIElSUSBpbmRleCBmb3IgV0JfRE9ORSB3aXRoIHdiPSVk XG4iLAotCQkJaHdfd2ItPmlkeCAtIFdCXzApOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlp cnFfY2ItPmZ1bmMgPSBkcHVfZW5jb2Rlcl9waHlzX3diX2RvbmVfaXJxOwotCWlycV9jYi0+YXJn ID0gd2JfZW5jOwotCXJldCA9IGRwdV9jb3JlX2lycV9yZWdpc3Rlcl9jYWxsYmFjayhwaHlzX2Vu Yy0+ZHB1X2ttcywKLQkJCXdiX2VuYy0+aXJxX2lkeCwgaXJxX2NiKTsKLQlpZiAocmV0KSB7Ci0J CURQVV9FUlJPUigiZmFpbGVkIHRvIHJlZ2lzdGVyIElSUSBjYWxsYmFjayBXQl9ET05FXG4iKTsK LQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlyZXQgPSBkcHVfY29yZV9pcnFfZW5hYmxlKHBoeXNfZW5j LT5kcHVfa21zLCAmd2JfZW5jLT5pcnFfaWR4LCAxKTsKLQlpZiAocmV0KSB7Ci0JCURQVV9FUlJP UigKLQkJCSJmYWlsZWQgdG8gZW5hYmxlIElSUSBmb3IgV0JfRE9ORSwgd2IgJWQsIGlycV9pZHg9 JWRcbiIsCi0JCQkJaHdfd2ItPmlkeCAtIFdCXzAsCi0JCQkJd2JfZW5jLT5pcnFfaWR4KTsKLQkJ d2JfZW5jLT5pcnFfaWR4ID0gLUVJTlZBTDsKLQotCQkvKiBVbnJlZ2lzdGVyIGNhbGxiYWNrIG9u IElSUSBlbmFibGUgZmFpbHVyZSAqLwotCQlkcHVfY29yZV9pcnFfdW5yZWdpc3Rlcl9jYWxsYmFj ayhwaHlzX2VuYy0+ZHB1X2ttcywKLQkJCQl3Yl9lbmMtPmlycV9pZHgsIGlycV9jYik7Ci0JCXJl dHVybiByZXQ7Ci0JfQotCi0JRFBVX0RFQlVHKCJyZWdpc3RlcmVkIElSUSBmb3Igd2IgJWQsIGly cV9pZHg9JWRcbiIsCi0JCQlod193Yi0+aWR4IC0gV0JfMCwKLQkJCXdiX2VuYy0+aXJxX2lkeCk7 Ci0KLQlyZXR1cm4gcmV0OwotfQotCi0vKioKLSAqIGRwdV9lbmNvZGVyX3BoeXNfd2JfbW9kZV9z ZXQgLSBzZXQgZGlzcGxheSBtb2RlCi0gKiBAcGh5c19lbmM6CVBvaW50ZXIgdG8gcGh5c2ljYWwg ZW5jb2RlcgotICogQG1vZGU6CVBvaW50ZXIgdG8gcmVxdWVzdGVkIGRpc3BsYXkgbW9kZQotICog QGFkal9tb2RlOglQb2ludGVyIHRvIGFkanVzdGVkIGRpc3BsYXkgbW9kZQotICovCi1zdGF0aWMg dm9pZCBkcHVfZW5jb2Rlcl9waHlzX3diX21vZGVfc2V0KAotCQlzdHJ1Y3QgZHB1X2VuY29kZXJf cGh5cyAqcGh5c19lbmMsCi0JCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAotCQlzdHJ1 Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqX21vZGUpCi17Ci0Jc3RydWN0IGRwdV9lbmNvZGVyX3Bo eXNfd2IgKndiX2VuYyA9IHRvX2RwdV9lbmNvZGVyX3BoeXNfd2IocGh5c19lbmMpOwotCXN0cnVj dCBkcHVfcm0gKnJtID0gJnBoeXNfZW5jLT5kcHVfa21zLT5ybTsKLQlzdHJ1Y3QgZHB1X2h3X3di ICpod193YiA9IHdiX2VuYy0+aHdfd2I7Ci0Jc3RydWN0IGRwdV9ybV9od19pdGVyIGl0ZXI7Ci0J aW50IGksIGluc3RhbmNlOwotCi0JcGh5c19lbmMtPmNhY2hlZF9tb2RlID0gKmFkal9tb2RlOwot CWluc3RhbmNlID0gcGh5c19lbmMtPnNwbGl0X3JvbGUgPT0gRU5DX1JPTEVfU0xBVkUgPyAxIDog MDsKLQotCURQVV9ERUJVRygiW21vZGVfc2V0X2NhY2hlOiVkLCVkLFwiJXNcIiwlZCwlZF1cbiIs Ci0JCQlod193Yi0+aWR4IC0gV0JfMCwgbW9kZS0+YmFzZS5pZCwKLQkJCW1vZGUtPm5hbWUsIG1v ZGUtPmhkaXNwbGF5LCBtb2RlLT52ZGlzcGxheSk7Ci0KLQlwaHlzX2VuYy0+aHdfY3RsID0gTlVM TDsKLQlwaHlzX2VuYy0+aHdfY2RtID0gTlVMTDsKLQotCS8qIFJldHJpZXZlIHByZXZpb3VzbHkg YWxsb2NhdGVkIEhXIFJlc291cmNlcy4gQ1RMIHNob3VsZG4ndCBmYWlsICovCi0JZHB1X3JtX2lu aXRfaHdfaXRlcigmaXRlciwgcGh5c19lbmMtPnBhcmVudC0+YmFzZS5pZCwgRFBVX0hXX0JMS19D VEwpOwotCWZvciAoaSA9IDA7IGkgPD0gaW5zdGFuY2U7IGkrKykgewotCQlkcHVfcm1fZ2V0X2h3 KHJtLCAmaXRlcik7Ci0JCWlmIChpID09IGluc3RhbmNlKQotCQkJcGh5c19lbmMtPmh3X2N0bCA9 IChzdHJ1Y3QgZHB1X2h3X2N0bCAqKSBpdGVyLmh3OwotCX0KLQotCWlmIChJU19FUlJfT1JfTlVM TChwaHlzX2VuYy0+aHdfY3RsKSkgewotCQlEUFVfRVJST1IoImZhaWxlZCBpbml0IGN0bDogJWxk XG4iLCBQVFJfRVJSKHBoeXNfZW5jLT5od19jdGwpKTsKLQkJcGh5c19lbmMtPmh3X2N0bCA9IE5V TEw7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBDRE0gaXMgb3B0aW9uYWwgKi8KLQlkcHVfcm1faW5p dF9od19pdGVyKCZpdGVyLCBwaHlzX2VuYy0+cGFyZW50LT5iYXNlLmlkLCBEUFVfSFdfQkxLX0NE TSk7Ci0JZm9yIChpID0gMDsgaSA8PSBpbnN0YW5jZTsgaSsrKSB7Ci0JCWRwdV9ybV9nZXRfaHco cm0sICZpdGVyKTsKLQkJaWYgKGkgPT0gaW5zdGFuY2UpCi0JCQlwaHlzX2VuYy0+aHdfY2RtID0g KHN0cnVjdCBkcHVfaHdfY2RtICopIGl0ZXIuaHc7Ci0JfQotCi0JaWYgKElTX0VSUihwaHlzX2Vu Yy0+aHdfY2RtKSkgewotCQlEUFVfRVJST1IoIkNETSByZXF1aXJlZCBidXQgbm90IGFsbG9jYXRl ZDogJWxkXG4iLAotCQkJCVBUUl9FUlIocGh5c19lbmMtPmh3X2NkbSkpOwotCQlwaHlzX2VuYy0+ aHdfY3RsID0gTlVMTDsKLQl9Ci19Ci0KLS8qKgotICogZHB1X2VuY29kZXJfcGh5c193Yl93YWl0 X2Zvcl9jb21taXRfZG9uZSAtIHdhaXQgdW50aWwgcmVxdWVzdCBpcyBjb21taXR0ZWQKLSAqIEBw aHlzX2VuYzoJUG9pbnRlciB0byBwaHlzaWNhbCBlbmNvZGVyCi0gKi8KLXN0YXRpYyBpbnQgZHB1 X2VuY29kZXJfcGh5c193Yl93YWl0X2Zvcl9jb21taXRfZG9uZSgKLQkJc3RydWN0IGRwdV9lbmNv ZGVyX3BoeXMgKnBoeXNfZW5jKQotewotCXVuc2lnbmVkIGxvbmcgcmV0OwotCXN0cnVjdCBkcHVf ZW5jb2Rlcl9waHlzX3diICp3Yl9lbmMgPSB0b19kcHVfZW5jb2Rlcl9waHlzX3diKHBoeXNfZW5j KTsKLQl1MzIgaXJxX3N0YXR1cywgZXZlbnQgPSAwOwotCXU2NCB3Yl90aW1lID0gMDsKLQlpbnQg cmMgPSAwOwotCXUzMiB0aW1lb3V0ID0gbWF4X3QodTMyLCB3Yl9lbmMtPndiZG9uZV90aW1lb3V0 LCBLSUNLT0ZGX1RJTUVPVVRfTVMpOwotCi0JLyogUmV0dXJuIEVXT1VMREJMT0NLIHNpbmNlIHdl IGtub3cgdGhlIHdhaXQgaXNuJ3QgbmVjZXNzYXJ5ICovCi0JaWYgKHBoeXNfZW5jLT5lbmFibGVf c3RhdGUgPT0gRFBVX0VOQ19ESVNBQkxFRCkgewotCQlEUFVfRVJST1IoImVuY29kZXIgYWxyZWFk eSBkaXNhYmxlZFxuIik7Ci0JCXJldHVybiAtRVdPVUxEQkxPQ0s7Ci0JfQotCi0JRFBVX0VWVDMy KERSTUlEKHBoeXNfZW5jLT5wYXJlbnQpLCBXQklEKHdiX2VuYyksIHdiX2VuYy0+ZnJhbWVfY291 bnQpOwotCi0JcmV0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZ3Yl9lbmMtPndiZG9u ZV9jb21wbGV0ZSwKLQkJCW1zZWNzX3RvX2ppZmZpZXModGltZW91dCkpOwotCi0JaWYgKCFyZXQp IHsKLQkJRFBVX0VWVDMyKERSTUlEKHBoeXNfZW5jLT5wYXJlbnQpLCBXQklEKHdiX2VuYyksCi0J CQkJd2JfZW5jLT5mcmFtZV9jb3VudCk7Ci0JCWlycV9zdGF0dXMgPSBkcHVfY29yZV9pcnFfcmVh ZChwaHlzX2VuYy0+ZHB1X2ttcywKLQkJCQl3Yl9lbmMtPmlycV9pZHgsIHRydWUpOwotCQlpZiAo aXJxX3N0YXR1cykgewotCQkJRFBVX0RFQlVHKCJ3YjolZCBkb25lIGJ1dCBpcnEgbm90IHRyaWdn ZXJlZFxuIiwKLQkJCQkJd2JfZW5jLT53Yl9kZXYtPndiX2lkeCAtIFdCXzApOwotCQkJZHB1X2Vu Y29kZXJfcGh5c193Yl9kb25lX2lycSh3Yl9lbmMsIHdiX2VuYy0+aXJxX2lkeCk7Ci0JCX0gZWxz ZSB7Ci0JCQlEUFVfRVJST1IoIndiOiVkIGtpY2tvZmYgdGltZWQgb3V0XG4iLAotCQkJCQl3Yl9l bmMtPndiX2Rldi0+d2JfaWR4IC0gV0JfMCk7Ci0KLQkJCWV2ZW50ID0gRFBVX0VOQ09ERVJfRlJB TUVfRVZFTlRfRVJST1I7Ci0JCQlpZiAocGh5c19lbmMtPnBhcmVudF9vcHMuaGFuZGxlX2ZyYW1l X2RvbmUpCi0JCQkJcGh5c19lbmMtPnBhcmVudF9vcHMuaGFuZGxlX2ZyYW1lX2RvbmUoCi0JCQkJ CXBoeXNfZW5jLT5wYXJlbnQsIHBoeXNfZW5jLCBldmVudCk7Ci0JCQlyYyA9IC1FVElNRURPVVQ7 Ci0JCX0KLQl9Ci0KLQlkcHVfZW5jb2Rlcl9waHlzX3diX3VucmVnaXN0ZXJfaXJxKHBoeXNfZW5j KTsKLQotCWlmICghcmMpCi0JCXdiX2VuYy0+ZW5kX3RpbWUgPSBrdGltZV9nZXQoKTsKLQotCS8q IG9uY2Ugb3BlcmF0aW9uIGlzIGRvbmUsIGRpc2FibGUgdHJhZmZpYyBzaGFwZXIgKi8KLQlpZiAo d2JfZW5jLT53Yl9jZmcudHNfY2ZnLmVuICYmIHdiX2VuYy0+aHdfd2IgJiYKLQkJCXdiX2VuYy0+ aHdfd2ItPm9wcy5zZXR1cF90cmFmZmljc2hhcGVyKSB7Ci0JCXdiX2VuYy0+d2JfY2ZnLnRzX2Nm Zy5lbiA9IGZhbHNlOwotCQl3Yl9lbmMtPmh3X3diLT5vcHMuc2V0dXBfdHJhZmZpY3NoYXBlcigK LQkJCQl3Yl9lbmMtPmh3X3diLCAmd2JfZW5jLT53Yl9jZmcpOwotCX0KLQotCS8qIHJlbW92ZSB2 b3RlIGZvciBpb21tdS9jbGsvYnVzICovCi0Jd2JfZW5jLT5mcmFtZV9jb3VudCsrOwotCi0JaWYg KCFyYykgewotCQl3Yl90aW1lID0gKHU2NClrdGltZV90b191cyh3Yl9lbmMtPmVuZF90aW1lKSAt Ci0JCQkJKHU2NClrdGltZV90b191cyh3Yl9lbmMtPnN0YXJ0X3RpbWUpOwotCQlEUFVfREVCVUco IndiOiVkIHRvb2sgJWxsdSB1c1xuIiwKLQkJCXdiX2VuYy0+d2JfZGV2LT53Yl9pZHggLSBXQl8w LCB3Yl90aW1lKTsKLQl9Ci0KLQkvKiBjbGVhbnVwIHdyaXRlYmFjayBmcmFtZWJ1ZmZlciAqLwot CWlmICh3Yl9lbmMtPndiX2ZiKSB7Ci0JCW1zbV9mcmFtZWJ1ZmZlcl9jbGVhbnVwKHdiX2VuYy0+ d2JfZmIsCi0JCQlwaHlzX2VuYy0+ZHB1X2ttcy0+YmFzZS5hc3BhY2UpOwotCQl3Yl9lbmMtPndi X2ZiID0gTlVMTDsKLQl9Ci0KLQlEUFVfRVZUMzIoRFJNSUQocGh5c19lbmMtPnBhcmVudCksIFdC SUQod2JfZW5jKSwgd2JfZW5jLT5mcmFtZV9jb3VudCwKLQkJCXdiX3RpbWUsIGV2ZW50LCByYyk7 Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLS8qKgotICogZHB1X2VuY29kZXJfcGh5c193Yl9wcmVwYXJl X2Zvcl9raWNrb2ZmIC0gcHJlLWtpY2tvZmYgcHJvY2Vzc2luZwotICogQHBoeXNfZW5jOglQb2lu dGVyIHRvIHBoeXNpY2FsIGVuY29kZXIKLSAqIEBwYXJhbXM6CWtpY2tvZmYgcGFyYW1ldGVycwot ICovCi1zdGF0aWMgdm9pZCBkcHVfZW5jb2Rlcl9waHlzX3diX3ByZXBhcmVfZm9yX2tpY2tvZmYo Ci0JCXN0cnVjdCBkcHVfZW5jb2Rlcl9waHlzICpwaHlzX2VuYywKLQkJc3RydWN0IGRwdV9lbmNv ZGVyX2tpY2tvZmZfcGFyYW1zICpwYXJhbXMpCi17Ci0Jc3RydWN0IGRwdV9lbmNvZGVyX3BoeXNf d2IgKndiX2VuYyA9IHRvX2RwdV9lbmNvZGVyX3BoeXNfd2IocGh5c19lbmMpOwotCWludCByZXQ7 Ci0KLQlEUFVfREVCVUcoIlt3YjolZCwldV1cbiIsIHdiX2VuYy0+aHdfd2ItPmlkeCAtIFdCXzAs Ci0JCQl3Yl9lbmMtPmtpY2tvZmZfY291bnQpOwotCi0JcmVpbml0X2NvbXBsZXRpb24oJndiX2Vu Yy0+d2Jkb25lX2NvbXBsZXRlKTsKLQotCXJldCA9IGRwdV9lbmNvZGVyX3BoeXNfd2JfcmVnaXN0 ZXJfaXJxKHBoeXNfZW5jKTsKLQlpZiAocmV0KSB7Ci0JCURQVV9FUlJPUigiZmFpbGVkIHRvIHJl Z2lzdGVyIGlycSAlZFxuIiwgcmV0KTsKLQkJcmV0dXJuOwotCX0KLQotCXdiX2VuYy0+a2lja29m Zl9jb3VudCsrOwotCi0JLyogc2V0IE9UIGxpbWl0ICYgZW5hYmxlIHRyYWZmaWMgc2hhcGVyICov Ci0JZHB1X2VuY29kZXJfcGh5c193Yl9zZXR1cChwaHlzX2VuYyk7Ci0KLQlfZHB1X2VuY29kZXJf cGh5c193Yl91cGRhdGVfZmx1c2gocGh5c19lbmMpOwotCi0JLyogdm90ZSBmb3IgaW9tbXUvY2xr L2J1cyAqLwotCXdiX2VuYy0+c3RhcnRfdGltZSA9IGt0aW1lX2dldCgpOwotCi0JRFBVX0VWVDMy KERSTUlEKHBoeXNfZW5jLT5wYXJlbnQpLCBXQklEKHdiX2VuYyksIHdiX2VuYy0+a2lja29mZl9j b3VudCk7Ci19Ci0KLS8qKgotICogZHB1X2VuY29kZXJfcGh5c193Yl9oYW5kbGVfcG9zdF9raWNr b2ZmIC0gcG9zdC1raWNrb2ZmIHByb2Nlc3NpbmcKLSAqIEBwaHlzX2VuYzoJUG9pbnRlciB0byBw aHlzaWNhbCBlbmNvZGVyCi0gKi8KLXN0YXRpYyB2b2lkIGRwdV9lbmNvZGVyX3BoeXNfd2JfaGFu ZGxlX3Bvc3Rfa2lja29mZigKLQkJc3RydWN0IGRwdV9lbmNvZGVyX3BoeXMgKnBoeXNfZW5jKQot ewotCXN0cnVjdCBkcHVfZW5jb2Rlcl9waHlzX3diICp3Yl9lbmMgPSB0b19kcHVfZW5jb2Rlcl9w aHlzX3diKHBoeXNfZW5jKTsKLQotCURQVV9ERUJVRygiW3diOiVkXVxuIiwgd2JfZW5jLT5od193 Yi0+aWR4IC0gV0JfMCk7Ci0KLQlEUFVfRVZUMzIoRFJNSUQocGh5c19lbmMtPnBhcmVudCksIFdC SUQod2JfZW5jKSk7Ci19Ci0KLS8qKgotICogX2RwdV9lbmNvZGVyX3BoeXNfd2JfaW5pdF9pbnRl cm5hbF9mYiAtIGNyZWF0ZSBmYiBmb3IgaW50ZXJuYWwgY29tbWl0Ci0gKiBAd2JfZW5jOgkJUG9p bnRlciB0byB3cml0ZWJhY2sgZW5jb2RlcgotICogQHBpeGVsX2Zvcm1hdDoJRFJNIHBpeGVsIGZv cm1hdAotICogQHdpZHRoOgkJRGVzaXJlZCBmYiB3aWR0aAotICogQGhlaWdodDoJCURlc2lyZWQg ZmIgaGVpZ2h0Ci0gKiBAcGl0Y2g6CQlEZXNpcmVkIGZiIHBpdGNoCi0gKi8KLXN0YXRpYyBpbnQg X2RwdV9lbmNvZGVyX3BoeXNfd2JfaW5pdF9pbnRlcm5hbF9mYigKLQkJc3RydWN0IGRwdV9lbmNv ZGVyX3BoeXNfd2IgKndiX2VuYywKLQkJdWludDMyX3QgcGl4ZWxfZm9ybWF0LCB1aW50MzJfdCB3 aWR0aCwKLQkJdWludDMyX3QgaGVpZ2h0LCB1aW50MzJfdCBwaXRjaCkKLXsKLQlzdHJ1Y3QgZHJt X2RldmljZSAqZGV2OwotCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiOwotCXN0cnVjdCBkcm1f bW9kZV9mYl9jbWQyIG1vZGVfY21kOwotCXVpbnQzMl90IHNpemU7Ci0JaW50IG5wbGFuZXMsIGks IHJldDsKLQlzdHJ1Y3QgbXNtX2dlbV9hZGRyZXNzX3NwYWNlICphc3BhY2U7Ci0KLQlpZiAoIXdi X2VuYyB8fCAhd2JfZW5jLT5iYXNlLnBhcmVudCB8fCAhd2JfZW5jLT5iYXNlLmRwdV9rbXMpIHsK LQkJRFBVX0VSUk9SKCJpbnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0K LQotCWFzcGFjZSA9IHdiX2VuYy0+YmFzZS5kcHVfa21zLT5iYXNlLmFzcGFjZTsKLQlpZiAoIWFz cGFjZSkgewotCQlEUFVfRVJST1IoImludmFsaWQgYWRkcmVzcyBzcGFjZVxuIik7Ci0JCXJldHVy biAtRUlOVkFMOwotCX0KLQotCWRldiA9IHdiX2VuYy0+YmFzZS5kcHVfa21zLT5kZXY7Ci0JaWYg KCFkZXYpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGRldlxuIik7Ci0JCXJldHVybiAtRUlOVkFM OwotCX0KLQotCW1lbXNldCgmbW9kZV9jbWQsIDAsIHNpemVvZihtb2RlX2NtZCkpOwotCW1vZGVf Y21kLnBpeGVsX2Zvcm1hdCA9IHBpeGVsX2Zvcm1hdDsKLQltb2RlX2NtZC53aWR0aCA9IHdpZHRo OwotCW1vZGVfY21kLmhlaWdodCA9IGhlaWdodDsKLQltb2RlX2NtZC5waXRjaGVzWzBdID0gcGl0 Y2g7Ci0KLQlzaXplID0gZHB1X2Zvcm1hdF9nZXRfZnJhbWVidWZmZXJfc2l6ZShwaXhlbF9mb3Jt YXQsCi0JCQltb2RlX2NtZC53aWR0aCwgbW9kZV9jbWQuaGVpZ2h0LAotCQkJbW9kZV9jbWQucGl0 Y2hlcywgMCk7Ci0JaWYgKCFzaXplKSB7Ci0JCURQVV9ERUJVRygibm90IGNyZWF0aW5nIHplcm8g c2l6ZSBidWZmZXJcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKiBhbGxvY2F0ZSBn ZW0gdHJhY2tpbmcgb2JqZWN0ICovCi0JbnBsYW5lcyA9IGRybV9mb3JtYXRfbnVtX3BsYW5lcyhw aXhlbF9mb3JtYXQpOwotCWlmIChucGxhbmVzID4gRFBVX01BWF9QTEFORVMpIHsKLQkJRFBVX0VS Uk9SKCJyZXF1ZXN0ZWQgZm9ybWF0IGhhcyB0b28gbWFueSBwbGFuZXNcbiIpOwotCQlyZXR1cm4g LUVJTlZBTDsKLQl9Ci0JbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCXdiX2VuYy0+ Ym9fZGlzYWJsZVswXSA9IG1zbV9nZW1fbmV3KGRldiwgc2l6ZSwKLQkJCU1TTV9CT19TQ0FOT1VU IHwgTVNNX0JPX1dDKTsKLQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKLQotCWlm IChJU19FUlJfT1JfTlVMTCh3Yl9lbmMtPmJvX2Rpc2FibGVbMF0pKSB7Ci0JCXJldCA9IFBUUl9F UlIod2JfZW5jLT5ib19kaXNhYmxlWzBdKTsKLQkJd2JfZW5jLT5ib19kaXNhYmxlWzBdID0gTlVM TDsKLQotCQlEUFVfRVJST1IoImZhaWxlZCB0byBjcmVhdGUgYm8sICVkXG4iLCByZXQpOwotCQly ZXR1cm4gcmV0OwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBucGxhbmVzOyArK2kpIHsKLQkJd2Jf ZW5jLT5ib19kaXNhYmxlW2ldID0gd2JfZW5jLT5ib19kaXNhYmxlWzBdOwotCQltb2RlX2NtZC5w aXRjaGVzW2ldID0gd2lkdGggKgotCQkJZHJtX2Zvcm1hdF9wbGFuZV9jcHAocGl4ZWxfZm9ybWF0 LCBpKTsKLQl9Ci0KLQlmYiA9IG1zbV9mcmFtZWJ1ZmZlcl9pbml0KGRldiwgJm1vZGVfY21kLCB3 Yl9lbmMtPmJvX2Rpc2FibGUpOwotCWlmIChJU19FUlJfT1JfTlVMTChmYikpIHsKLQkJcmV0ID0g UFRSX0VSUihmYik7Ci0JCWRybV9nZW1fb2JqZWN0X3B1dCh3Yl9lbmMtPmJvX2Rpc2FibGVbMF0p OwotCQl3Yl9lbmMtPmJvX2Rpc2FibGVbMF0gPSBOVUxMOwotCi0JCURQVV9FUlJPUigiZmFpbGVk IHRvIGluaXQgZmIsICVkXG4iLCByZXQpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCS8qIHByZXBh cmUgdGhlIGJhY2tpbmcgYnVmZmVyIG5vdyBzbyB0aGF0IGl0J3MgYXZhaWxhYmxlIGxhdGVyICov Ci0JcmV0ID0gbXNtX2ZyYW1lYnVmZmVyX3ByZXBhcmUoZmIsIGFzcGFjZSk7Ci0JaWYgKCFyZXQp Ci0JCXdiX2VuYy0+ZmJfZGlzYWJsZSA9IGZiOwotCXJldHVybiByZXQ7Ci19Ci0KLS8qKgotICog X2RwdV9lbmNvZGVyX3BoeXNfd2JfZGVzdHJveV9pbnRlcm5hbF9mYiAtIGRlY29uc3RydWN0IGlu dGVybmFsIGZiCi0gKiBAd2JfZW5jOgkJUG9pbnRlciB0byB3cml0ZWJhY2sgZW5jb2RlcgotICov Ci1zdGF0aWMgdm9pZCBfZHB1X2VuY29kZXJfcGh5c193Yl9kZXN0cm95X2ludGVybmFsX2ZiKAot CQlzdHJ1Y3QgZHB1X2VuY29kZXJfcGh5c193YiAqd2JfZW5jKQotewotCWlmICghd2JfZW5jKQot CQlyZXR1cm47Ci0KLQlpZiAod2JfZW5jLT5mYl9kaXNhYmxlKSB7Ci0JCWRybV9mcmFtZWJ1ZmZl cl91bnJlZ2lzdGVyX3ByaXZhdGUod2JfZW5jLT5mYl9kaXNhYmxlKTsKLQkJZHJtX2ZyYW1lYnVm ZmVyX3JlbW92ZSh3Yl9lbmMtPmZiX2Rpc2FibGUpOwotCQl3Yl9lbmMtPmZiX2Rpc2FibGUgPSBO VUxMOwotCX0KLQotCWlmICh3Yl9lbmMtPmJvX2Rpc2FibGVbMF0pIHsKLQkJZHJtX2dlbV9vYmpl Y3RfcHV0KHdiX2VuYy0+Ym9fZGlzYWJsZVswXSk7Ci0JCXdiX2VuYy0+Ym9fZGlzYWJsZVswXSA9 IE5VTEw7Ci0JfQotfQotCi0vKioKLSAqIGRwdV9lbmNvZGVyX3BoeXNfd2JfZW5hYmxlIC0gZW5h YmxlIHdyaXRlYmFjayBlbmNvZGVyCi0gKiBAcGh5c19lbmM6CVBvaW50ZXIgdG8gcGh5c2ljYWwg ZW5jb2RlcgotICovCi1zdGF0aWMgdm9pZCBkcHVfZW5jb2Rlcl9waHlzX3diX2VuYWJsZShzdHJ1 Y3QgZHB1X2VuY29kZXJfcGh5cyAqcGh5c19lbmMpCi17Ci0Jc3RydWN0IGRwdV9lbmNvZGVyX3Bo eXNfd2IgKndiX2VuYyA9IHRvX2RwdV9lbmNvZGVyX3BoeXNfd2IocGh5c19lbmMpOwotCXN0cnVj dCBkcHVfaHdfd2IgKmh3X3diID0gd2JfZW5jLT5od193YjsKLQlzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2OwotCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7Ci0KLQlEUFVfREVCVUcoIlt3 YjolZF1cbiIsIGh3X3diLT5pZHggLSBXQl8wKTsKLQotCWlmICghd2JfZW5jLT5iYXNlLnBhcmVu dCB8fCAhd2JfZW5jLT5iYXNlLnBhcmVudC0+ZGV2KSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBk cm0gZGV2aWNlXG4iKTsKLQkJcmV0dXJuOwotCX0KLQlkZXYgPSB3Yl9lbmMtPmJhc2UucGFyZW50 LT5kZXY7Ci0KLQkvKiBmaW5kIGFzc29jaWF0ZWQgd3JpdGViYWNrIGNvbm5lY3RvciAqLwotCWNv bm5lY3RvciA9IHBoeXNfZW5jLT5jb25uZWN0b3I7Ci0KLQlpZiAoIWNvbm5lY3RvciB8fCBjb25u ZWN0b3ItPmVuY29kZXIgIT0gcGh5c19lbmMtPnBhcmVudCkgewotCQlEUFVfRVJST1IoImZhaWxl ZCB0byBmaW5kIHdyaXRlYmFjayBjb25uZWN0b3JcbiIpOwotCQlyZXR1cm47Ci0JfQotCXdiX2Vu Yy0+d2JfZGV2ID0gZHB1X3diX2Nvbm5lY3Rvcl9nZXRfd2IoY29ubmVjdG9yKTsKLQotCXBoeXNf ZW5jLT5lbmFibGVfc3RhdGUgPSBEUFVfRU5DX0VOQUJMRUQ7Ci19Ci0KLS8qKgotICogZHB1X2Vu Y29kZXJfcGh5c193Yl9kaXNhYmxlIC0gZGlzYWJsZSB3cml0ZWJhY2sgZW5jb2RlcgotICogQHBo eXNfZW5jOglQb2ludGVyIHRvIHBoeXNpY2FsIGVuY29kZXIKLSAqLwotc3RhdGljIHZvaWQgZHB1 X2VuY29kZXJfcGh5c193Yl9kaXNhYmxlKHN0cnVjdCBkcHVfZW5jb2Rlcl9waHlzICpwaHlzX2Vu YykKLXsKLQlzdHJ1Y3QgZHB1X2VuY29kZXJfcGh5c193YiAqd2JfZW5jID0gdG9fZHB1X2VuY29k ZXJfcGh5c193YihwaHlzX2VuYyk7Ci0Jc3RydWN0IGRwdV9od193YiAqaHdfd2IgPSB3Yl9lbmMt Pmh3X3diOwotCi0JRFBVX0RFQlVHKCJbd2I6JWRdXG4iLCBod193Yi0+aWR4IC0gV0JfMCk7Ci0K LQlpZiAocGh5c19lbmMtPmVuYWJsZV9zdGF0ZSA9PSBEUFVfRU5DX0RJU0FCTEVEKSB7Ci0JCURQ VV9FUlJPUigiZW5jb2RlciBpcyBhbHJlYWR5IGRpc2FibGVkXG4iKTsKLQkJcmV0dXJuOwotCX0K LQotCWlmICh3Yl9lbmMtPmZyYW1lX2NvdW50ICE9IHdiX2VuYy0+a2lja29mZl9jb3VudCkgewot CQlEUFVfREVCVUcoIlt3YWl0X2Zvcl9kb25lOiB3YjolZCwgZnJhbWU6JXUsIGtpY2tvZmY6JXVd XG4iLAotCQkJCWh3X3diLT5pZHggLSBXQl8wLCB3Yl9lbmMtPmZyYW1lX2NvdW50LAotCQkJCXdi X2VuYy0+a2lja29mZl9jb3VudCk7Ci0JCWRwdV9lbmNvZGVyX3BoeXNfd2Jfd2FpdF9mb3JfY29t bWl0X2RvbmUocGh5c19lbmMpOwotCX0KLQotCWlmICghcGh5c19lbmMtPmh3X2N0bCB8fCAhcGh5 c19lbmMtPnBhcmVudCB8fAotCQkJIXBoeXNfZW5jLT5kcHVfa21zIHx8ICF3Yl9lbmMtPmZiX2Rp c2FibGUpIHsKLQkJRFBVX0RFQlVHKCJpbnZhbGlkIGVuYywgc2tpcHBpbmcgZXh0cmEgY29tbWl0 XG4iKTsKLQkJZ290byBleGl0OwotCX0KLQotCS8qIHJlc2V0IGgvdyBiZWZvcmUgZmluYWwgZmx1 c2ggKi8KLQlpZiAoZHB1X2VuY29kZXJfaGVscGVyX2h3X3JlbGVhc2UocGh5c19lbmMsIHdiX2Vu Yy0+ZmJfZGlzYWJsZSkpCi0JCWdvdG8gZXhpdDsKLQotCXBoeXNfZW5jLT5lbmFibGVfc3RhdGUg PSBEUFVfRU5DX0RJU0FCTElORzsKLQlkcHVfZW5jb2Rlcl9waHlzX3diX3ByZXBhcmVfZm9yX2tp Y2tvZmYocGh5c19lbmMsIE5VTEwpOwotCWlmIChwaHlzX2VuYy0+aHdfY3RsLT5vcHMudHJpZ2dl cl9mbHVzaCkKLQkJcGh5c19lbmMtPmh3X2N0bC0+b3BzLnRyaWdnZXJfZmx1c2gocGh5c19lbmMt Pmh3X2N0bCk7Ci0JZHB1X2VuY29kZXJfaGVscGVyX3RyaWdnZXJfc3RhcnQocGh5c19lbmMpOwot CWRwdV9lbmNvZGVyX3BoeXNfd2Jfd2FpdF9mb3JfY29tbWl0X2RvbmUocGh5c19lbmMpOwotZXhp dDoKLQlwaHlzX2VuYy0+ZW5hYmxlX3N0YXRlID0gRFBVX0VOQ19ESVNBQkxFRDsKLX0KLQotLyoq Ci0gKiBkcHVfZW5jb2Rlcl9waHlzX3diX2dldF9od19yZXNvdXJjZXMgLSBnZXQgaGFyZHdhcmUg cmVzb3VyY2VzCi0gKiBAcGh5c19lbmM6CVBvaW50ZXIgdG8gcGh5c2ljYWwgZW5jb2RlcgotICog QGh3X3JlczoJUG9pbnRlciB0byBlbmNvZGVyIHJlc291cmNlcwotICovCi1zdGF0aWMgdm9pZCBk cHVfZW5jb2Rlcl9waHlzX3diX2dldF9od19yZXNvdXJjZXMoCi0JCXN0cnVjdCBkcHVfZW5jb2Rl cl9waHlzICpwaHlzX2VuYywKLQkJc3RydWN0IGRwdV9lbmNvZGVyX2h3X3Jlc291cmNlcyAqaHdf cmVzLAotCQlzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubl9zdGF0ZSkKLXsKLQlzdHJ1 Y3QgZHB1X2VuY29kZXJfcGh5c193YiAqd2JfZW5jID0gdG9fZHB1X2VuY29kZXJfcGh5c193Yihw aHlzX2VuYyk7Ci0Jc3RydWN0IGRwdV9od193YiAqaHdfd2I7Ci0Jc3RydWN0IGRybV9mcmFtZWJ1 ZmZlciAqZmI7Ci0JY29uc3Qgc3RydWN0IGRwdV9mb3JtYXQgKmZtdDsKLQotCWlmICghcGh5c19l bmMpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGVuY29kZXJcbiIpOwotCQlyZXR1cm47Ci0JfQot Ci0JZmIgPSBkcHVfd2JfY29ubmVjdG9yX3N0YXRlX2dldF9vdXRwdXRfZmIoY29ubl9zdGF0ZSk7 Ci0JaWYgKCFmYikgewotCQlEUFVfRVJST1IoIm5vIG91dHB1dCBmcmFtZWJ1ZmZlclxuIik7Ci0J CXJldHVybjsKLQl9Ci0KLQlmbXQgPSBkcHVfZ2V0X2RwdV9mb3JtYXRfZXh0KGZiLT5mb3JtYXQt PmZvcm1hdCwgZmItPm1vZGlmaWVyKTsKLQlpZiAoIWZtdCkgewotCQlEUFVfRVJST1IoInVuc3Vw cG9ydGVkIG91dHB1dCBwaXhlbCBmb3JtYXQ6JWRcbiIsCi0JCQkJZmItPmZvcm1hdC0+Zm9ybWF0 KTsKLQkJcmV0dXJuOwotCX0KLQotCWh3X3diID0gd2JfZW5jLT5od193YjsKLQlod19yZXMtPndi c1tod193Yi0+aWR4IC0gV0JfMF0gPSBwaHlzX2VuYy0+aW50Zl9tb2RlOwotCWh3X3Jlcy0+bmVl ZHNfY2RtID0gRFBVX0ZPUk1BVF9JU19ZVVYoZm10KTsKLQlEUFVfREVCVUcoIlt3YjolZF0gaW50 Zl9tb2RlPSVkIG5lZWRzX2NkbT0lZFxuIiwgaHdfd2ItPmlkeCAtIFdCXzAsCi0JCQlod19yZXMt Pndic1tod193Yi0+aWR4IC0gV0JfMF0sCi0JCQlod19yZXMtPm5lZWRzX2NkbSk7Ci19Ci0KLSNp ZmRlZiBDT05GSUdfREVCVUdfRlMKLS8qKgotICogZHB1X2VuY29kZXJfcGh5c193Yl9pbml0X2Rl YnVnZnMgLSBpbml0aWFsaXplIHdyaXRlYmFjayBlbmNvZGVyIGRlYnVnZnMKLSAqIEBwaHlzX2Vu YzoJCVBvaW50ZXIgdG8gcGh5c2ljYWwgZW5jb2RlcgotICogQGRlYnVnZnNfcm9vdDoJUG9pbnRl ciB0byB2aXJ0dWFsIGVuY29kZXIncyBkZWJ1Z2ZzX3Jvb3QgZGlyCi0gKi8KLXN0YXRpYyBpbnQg ZHB1X2VuY29kZXJfcGh5c193Yl9pbml0X2RlYnVnZnMoCi0JCXN0cnVjdCBkcHVfZW5jb2Rlcl9w aHlzICpwaHlzX2VuYywgc3RydWN0IGRlbnRyeSAqZGVidWdmc19yb290KQotewotCXN0cnVjdCBk cHVfZW5jb2Rlcl9waHlzX3diICp3Yl9lbmMgPSB0b19kcHVfZW5jb2Rlcl9waHlzX3diKHBoeXNf ZW5jKTsKLQotCWlmICghcGh5c19lbmMgfHwgIXdiX2VuYy0+aHdfd2IgfHwgIWRlYnVnZnNfcm9v dCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoIWRlYnVnZnNfY3JlYXRlX3UzMigid2Jkb25l X3RpbWVvdXQiLCAwNjAwLAotCQkJZGVidWdmc19yb290LCAmd2JfZW5jLT53YmRvbmVfdGltZW91 dCkpIHsKLQkJRFBVX0VSUk9SKCJmYWlsZWQgdG8gY3JlYXRlIGRlYnVnZnMvd2Jkb25lX3RpbWVv dXRcbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQlpZiAoIWRlYnVnZnNfY3JlYXRlX3Uz MigiYnlwYXNzX2lycXJlZyIsIDA2MDAsCi0JCQlkZWJ1Z2ZzX3Jvb3QsICZ3Yl9lbmMtPmJ5cGFz c19pcnFyZWcpKSB7Ci0JCURQVV9FUlJPUigiZmFpbGVkIHRvIGNyZWF0ZSBkZWJ1Z2ZzL2J5cGFz c19pcnFyZWdcbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLSNl bHNlCi1zdGF0aWMgaW50IGRwdV9lbmNvZGVyX3BoeXNfd2JfaW5pdF9kZWJ1Z2ZzKAotCQlzdHJ1 Y3QgZHB1X2VuY29kZXJfcGh5cyAqcGh5c19lbmMsIHN0cnVjdCBkZW50cnkgKmRlYnVnZnNfcm9v dCkKLXsKLQlyZXR1cm4gMDsKLX0KLSNlbmRpZgotCi1zdGF0aWMgaW50IGRwdV9lbmNvZGVyX3Bo eXNfd2JfbGF0ZV9yZWdpc3RlcihzdHJ1Y3QgZHB1X2VuY29kZXJfcGh5cyAqcGh5c19lbmMsCi0J CXN0cnVjdCBkZW50cnkgKmRlYnVnZnNfcm9vdCkKLXsKLQlyZXR1cm4gZHB1X2VuY29kZXJfcGh5 c193Yl9pbml0X2RlYnVnZnMocGh5c19lbmMsIGRlYnVnZnNfcm9vdCk7Ci19Ci0KLS8qKgotICog ZHB1X2VuY29kZXJfcGh5c193Yl9kZXN0cm95IC0gZGVzdHJveSB3cml0ZWJhY2sgZW5jb2Rlcgot ICogQHBoeXNfZW5jOglQb2ludGVyIHRvIHBoeXNpY2FsIGVuY29kZXIKLSAqLwotc3RhdGljIHZv aWQgZHB1X2VuY29kZXJfcGh5c193Yl9kZXN0cm95KHN0cnVjdCBkcHVfZW5jb2Rlcl9waHlzICpw aHlzX2VuYykKLXsKLQlzdHJ1Y3QgZHB1X2VuY29kZXJfcGh5c193YiAqd2JfZW5jID0gdG9fZHB1 X2VuY29kZXJfcGh5c193YihwaHlzX2VuYyk7Ci0Jc3RydWN0IGRwdV9od193YiAqaHdfd2IgPSB3 Yl9lbmMtPmh3X3diOwotCi0JRFBVX0RFQlVHKCJbd2I6JWRdXG4iLCBod193Yi0+aWR4IC0gV0Jf MCk7Ci0KLQlpZiAoIXBoeXNfZW5jKQotCQlyZXR1cm47Ci0KLQlfZHB1X2VuY29kZXJfcGh5c193 Yl9kZXN0cm95X2ludGVybmFsX2ZiKHdiX2VuYyk7Ci0KLQlrZnJlZSh3Yl9lbmMpOwotfQotCi0v KioKLSAqIGRwdV9lbmNvZGVyX3BoeXNfd2JfaW5pdF9vcHMgLSBpbml0aWFsaXplIHdyaXRlYmFj ayBvcGVyYXRpb25zCi0gKiBAb3BzOglQb2ludGVyIHRvIGVuY29kZXIgb3BlcmF0aW9uIHRhYmxl Ci0gKi8KLXN0YXRpYyB2b2lkIGRwdV9lbmNvZGVyX3BoeXNfd2JfaW5pdF9vcHMoc3RydWN0IGRw dV9lbmNvZGVyX3BoeXNfb3BzICpvcHMpCi17Ci0Jb3BzLT5sYXRlX3JlZ2lzdGVyID0gZHB1X2Vu Y29kZXJfcGh5c193Yl9sYXRlX3JlZ2lzdGVyOwotCW9wcy0+aXNfbWFzdGVyID0gZHB1X2VuY29k ZXJfcGh5c193Yl9pc19tYXN0ZXI7Ci0Jb3BzLT5tb2RlX3NldCA9IGRwdV9lbmNvZGVyX3BoeXNf d2JfbW9kZV9zZXQ7Ci0Jb3BzLT5lbmFibGUgPSBkcHVfZW5jb2Rlcl9waHlzX3diX2VuYWJsZTsK LQlvcHMtPmRpc2FibGUgPSBkcHVfZW5jb2Rlcl9waHlzX3diX2Rpc2FibGU7Ci0Jb3BzLT5kZXN0 cm95ID0gZHB1X2VuY29kZXJfcGh5c193Yl9kZXN0cm95OwotCW9wcy0+YXRvbWljX2NoZWNrID0g ZHB1X2VuY29kZXJfcGh5c193Yl9hdG9taWNfY2hlY2s7Ci0Jb3BzLT5nZXRfaHdfcmVzb3VyY2Vz ID0gZHB1X2VuY29kZXJfcGh5c193Yl9nZXRfaHdfcmVzb3VyY2VzOwotCW9wcy0+d2FpdF9mb3Jf Y29tbWl0X2RvbmUgPSBkcHVfZW5jb2Rlcl9waHlzX3diX3dhaXRfZm9yX2NvbW1pdF9kb25lOwot CW9wcy0+cHJlcGFyZV9mb3Jfa2lja29mZiA9IGRwdV9lbmNvZGVyX3BoeXNfd2JfcHJlcGFyZV9m b3Jfa2lja29mZjsKLQlvcHMtPmhhbmRsZV9wb3N0X2tpY2tvZmYgPSBkcHVfZW5jb2Rlcl9waHlz X3diX2hhbmRsZV9wb3N0X2tpY2tvZmY7Ci0Jb3BzLT50cmlnZ2VyX3N0YXJ0ID0gZHB1X2VuY29k ZXJfaGVscGVyX3RyaWdnZXJfc3RhcnQ7Ci0Jb3BzLT5od19yZXNldCA9IGRwdV9lbmNvZGVyX2hl bHBlcl9od19yZXNldDsKLX0KLQotLyoqCi0gKiBkcHVfZW5jb2Rlcl9waHlzX3diX2luaXQgLSBp bml0aWFsaXplIHdyaXRlYmFjayBlbmNvZGVyCi0gKiBAaW5pdDoJUG9pbnRlciB0byBpbml0IGlu Zm8gc3RydWN0dXJlIHdpdGggaW5pdGlhbGl6YXRpb24gcGFyYW1zCi0gKi8KLXN0cnVjdCBkcHVf ZW5jb2Rlcl9waHlzICpkcHVfZW5jb2Rlcl9waHlzX3diX2luaXQoCi0JCXN0cnVjdCBkcHVfZW5j X3BoeXNfaW5pdF9wYXJhbXMgKnApCi17Ci0Jc3RydWN0IGRwdV9lbmNvZGVyX3BoeXMgKnBoeXNf ZW5jOwotCXN0cnVjdCBkcHVfZW5jb2Rlcl9waHlzX3diICp3Yl9lbmM7Ci0Jc3RydWN0IGRwdV9o d19tZHAgKmh3X21kcDsKLQlpbnQgcmV0ID0gMDsKLQotCURQVV9ERUJVRygiXG4iKTsKLQotCWlm ICghcCB8fCAhcC0+cGFyZW50KSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBwYXJhbXNcbiIpOwot CQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIGZhaWxfYWxsb2M7Ci0JfQotCi0Jd2JfZW5jID0ga3ph bGxvYyhzaXplb2YoKndiX2VuYyksIEdGUF9LRVJORUwpOwotCWlmICghd2JfZW5jKSB7Ci0JCURQ VV9FUlJPUigiZmFpbGVkIHRvIGFsbG9jYXRlIHdiIGVuY1xuIik7Ci0JCXJldCA9IC1FTk9NRU07 Ci0JCWdvdG8gZmFpbF9hbGxvYzsKLQl9Ci0Jd2JfZW5jLT5pcnFfaWR4ID0gLUVJTlZBTDsKLQl3 Yl9lbmMtPndiZG9uZV90aW1lb3V0ID0gS0lDS09GRl9USU1FT1VUX01TOwotCWluaXRfY29tcGxl dGlvbigmd2JfZW5jLT53YmRvbmVfY29tcGxldGUpOwotCi0JcGh5c19lbmMgPSAmd2JfZW5jLT5i YXNlOwotCi0JaHdfbWRwID0gZHB1X3JtX2dldF9tZHAoJnAtPmRwdV9rbXMtPnJtKTsKLQlpZiAo SVNfRVJSX09SX05VTEwoaHdfbWRwKSkgewotCQlyZXQgPSBQVFJfRVJSKGh3X21kcCk7Ci0JCURQ VV9FUlJPUigiZmFpbGVkIHRvIGluaXQgaHdfdG9wOiAlZFxuIiwgcmV0KTsKLQkJZ290byBmYWls X21kcF9pbml0OwotCX0KLQlwaHlzX2VuYy0+aHdfbWRwdG9wID0gaHdfbWRwOwotCi0JLyoqCi0J ICogaHdfd2IgcmVzb3VyY2UgcGVybWFuZW50bHkgYXNzaWduZWQgdG8gdGhpcyBlbmNvZGVyCi0J ICogT3RoZXIgcmVzb3VyY2VzIGFsbG9jYXRlZCBhdCBhdG9taWMgY29tbWl0IHRpbWUgYnkgdXNl IGNhc2UKLQkgKi8KLQlpZiAocC0+d2JfaWR4ICE9IERQVV9OT05FKSB7Ci0JCXN0cnVjdCBkcHVf cm1faHdfaXRlciBpdGVyOwotCi0JCWRwdV9ybV9pbml0X2h3X2l0ZXIoJml0ZXIsIDAsIERQVV9I V19CTEtfV0IpOwotCQl3aGlsZSAoZHB1X3JtX2dldF9odygmcC0+ZHB1X2ttcy0+cm0sICZpdGVy KSkgewotCQkJc3RydWN0IGRwdV9od193YiAqaHdfd2IgPSAoc3RydWN0IGRwdV9od193YiAqKWl0 ZXIuaHc7Ci0KLQkJCWlmIChod193Yi0+aWR4ID09IHAtPndiX2lkeCkgewotCQkJCXdiX2VuYy0+ aHdfd2IgPSBod193YjsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCi0JCWlmICghd2JfZW5jLT5o d193YikgewotCQkJcmV0ID0gLUVJTlZBTDsKLQkJCURQVV9FUlJPUigiZmFpbGVkIHRvIGluaXQg aHdfd2IlZFxuIiwgcC0+d2JfaWR4IC0gV0JfMCk7Ci0JCQlnb3RvIGZhaWxfd2JfaW5pdDsKLQkJ fQotCX0gZWxzZSB7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCURQVV9FUlJPUigiaW52YWxpZCB3Yl9p ZHhcbiIpOwotCQlnb3RvIGZhaWxfd2JfY2hlY2s7Ci0JfQotCi0JZHB1X2VuY29kZXJfcGh5c193 Yl9pbml0X29wcygmcGh5c19lbmMtPm9wcyk7Ci0JcGh5c19lbmMtPnBhcmVudCA9IHAtPnBhcmVu dDsKLQlwaHlzX2VuYy0+cGFyZW50X29wcyA9IHAtPnBhcmVudF9vcHM7Ci0JcGh5c19lbmMtPmRw dV9rbXMgPSBwLT5kcHVfa21zOwotCXBoeXNfZW5jLT5zcGxpdF9yb2xlID0gcC0+c3BsaXRfcm9s ZTsKLQlwaHlzX2VuYy0+aW50Zl9tb2RlID0gSU5URl9NT0RFX1dCX0xJTkU7Ci0JcGh5c19lbmMt PmludGZfaWR4ID0gcC0+aW50Zl9pZHg7Ci0JcGh5c19lbmMtPmVuY19zcGlubG9jayA9IHAtPmVu Y19zcGlubG9jazsKLQlJTklUX0xJU1RfSEVBRCgmd2JfZW5jLT5pcnFfY2IubGlzdCk7Ci0KLQkv KiBjcmVhdGUgaW50ZXJuYWwgYnVmZmVyIGZvciBkaXNhYmxlIGxvZ2ljICovCi0JaWYgKF9kcHVf ZW5jb2Rlcl9waHlzX3diX2luaXRfaW50ZXJuYWxfZmIod2JfZW5jLAotCQkJCURSTV9GT1JNQVRf UkdCODg4LCAyLCAxLCA2KSkgewotCQlEUFVfRVJST1IoImZhaWxlZCB0byBpbml0IGludGVybmFs IGZiXG4iKTsKLQkJZ290byBmYWlsX3diX2luaXQ7Ci0JfQotCi0JRFBVX0RFQlVHKCJDcmVhdGVk IGRwdV9lbmNvZGVyX3BoeXNfd2IgZm9yIHdiICVkXG4iLAotCQkJd2JfZW5jLT5od193Yi0+aWR4 IC0gV0JfMCk7Ci0KLQlyZXR1cm4gcGh5c19lbmM7Ci0KLWZhaWxfd2JfaW5pdDoKLWZhaWxfd2Jf Y2hlY2s6Ci1mYWlsX21kcF9pbml0OgotCWtmcmVlKHdiX2VuYyk7Ci1mYWlsX2FsbG9jOgotCXJl dHVybiBFUlJfUFRSKHJldCk7Ci19Ci0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20v ZGlzcC9kcHUxL2RwdV9od19jYXRhbG9nLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1 MS9kcHVfaHdfY2F0YWxvZy5jCmluZGV4IDdjMWQ4NGMuLjNkYThjMmQgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19jYXRhbG9nLmMKKysrIGIvZHJpdmVy cy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2NhdGFsb2cuYwpAQCAtMzcsMTAgKzM3LDYg QEAKICNkZWZpbmUgUElOR1BPTkdfU0RNODQ1X1NQTElUX01BU0sgXAogCShQSU5HUE9OR19TRE04 NDVfTUFTSyB8IEJJVChEUFVfUElOR1BPTkdfVEUyKSkKIAotI2RlZmluZSBXQjJfU0RNODQ1X01B U0sgXAotCShCSVQoRFBVX1dCX0xJTkVfTU9ERSkgfCBCSVQoRFBVX1dCX1RSQUZGSUNfU0hBUEVS KSB8IEJJVChEUFVfV0JfQ0RQKSB8XAotCUJJVChEUFVfV0JfWVVWX0NPTkZJRykgfCBCSVQoRFBV X1dCX1FPU184TFZMKSB8IEJJVChEUFVfV0JfVUJXQykpCi0KICNkZWZpbmUgREVGQVVMVF9QSVhF TF9SQU1fU0laRQkJKDUwICogMTAyNCkKICNkZWZpbmUgREVGQVVMVF9EUFVfTElORV9XSURUSAkJ MjA0OAogI2RlZmluZSBERUZBVUxUX0RQVV9PVVRQVVRfTElORV9XSURUSAkyNTYwCkBAIC05Miw4 ICs4OCw2IEBACiAJCQkucmVnX29mZiA9IDB4MkJDLCAuYml0X29mZiA9IDh9LAogCS5jbGtfY3Ry bHNbRFBVX0NMS19DVFJMX0NVUlNPUjFdID0gewogCQkJLnJlZ19vZmYgPSAweDJDNCwgLmJpdF9v ZmYgPSA4fSwKLQkuY2xrX2N0cmxzW0RQVV9DTEtfQ1RSTF9XQjJdID0gewotCQkJLnJlZ19vZmYg PSAweDNiOCwgLmJpdF9vZmYgPSAyNH0sCiAJfSwKIH07CiAKQEAgLTMzOSwzMyArMzMzLDE0IEBA CiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKgotICogV0IgYW5kIENETSBzdWIgYmxvY2tzIGNvbmZpZworICogQ0RNIHN1 YiBibG9ja3MgY29uZmlnCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKi8KLS8qIFdyaXRlYmFjayAyIGNhcGFiaWxpdHkgKi8KLXN0 YXRpYyBjb25zdCBzdHJ1Y3QgZHB1X3diX3N1Yl9ibG9ja3Mgc2RtODQ1X3diMl9zYmxrID0gewot CS5tYXhsaW5ld2lkdGggPSA0MDk2LAotfTsKLQotc3RhdGljIHN0cnVjdCBkcHVfd2JfY2ZnIHNk bTg0NV93YltdID0gewotCXsKLQkubmFtZSA9ICJ3Yl8yIiwgLmlkID0gV0JfMiwKLQkuYmFzZSA9 IDB4NjUwMDAsIC5sZW4gPSAweDJjOCwKLQkuZmVhdHVyZXMgPSBXQjJfU0RNODQ1X01BU0ssCi0J LnNibGsgPSAmc2RtODQ1X3diMl9zYmxrLAotCS5mb3JtYXRfbGlzdCA9IHdiMl9mb3JtYXRzLAot CS52YmlmX2lkeCA9IFZCSUZfTlJULAotCS54aW5faWQgPSA2LAotCS5jbGtfY3RybCA9IERQVV9D TEtfQ1RSTF9XQjIKLQl9LAotfTsKLQogc3RhdGljIHN0cnVjdCBkcHVfY2RtX2NmZyBzZG04NDVf Y2RtW10gPSB7CiAJewogCS5uYW1lID0gImNkbV8wIiwgLmlkID0gQ0RNXzAsCiAJLmJhc2UgPSAw eDc5MjAwLCAubGVuID0gMHgyMjQsCiAJLmZlYXR1cmVzID0gMCwKLQkuaW50Zl9jb25uZWN0ID0g QklUKElOVEZfMyksCi0JLndiX2Nvbm5lY3QgPSBCSVQoV0JfMikKKwkuaW50Zl9jb25uZWN0ID0g QklUKElOVEZfMykKIAl9LAogfTsKIApAQCAtNDMyLDExICs0MDcsNiBAQAogCXsuZmwgPSAwLCAu bHV0ID0gMHgwfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZHB1X3Fvc19sdXRfZW50cnkgc2RtODQ1 X3Fvc19jd2JbXSA9IHsKLQl7LmZsID0gMCwgLmx1dCA9IDB4NzUzMDAwMDAwMDAwMDAwMH0sCi19 OwotCi0KIHN0YXRpYyBzdHJ1Y3QgZHB1X3BlcmZfY2ZnIHNkbTg0NV9wZXJmX2RhdGEgPSB7CiAJ Lm1heF9id19sb3cgPSA2ODAwMDAwLAogCS5tYXhfYndfaGlnaCA9IDY4MDAwMDAsCkBAIC00NTgs NyArNDI4LDcgQEAKIAkuZG93bnNjYWxpbmdfcHJlZmlsbF9saW5lcyA9IDEsCiAJLmFtb3J0aXph YmxlX3RocmVzaG9sZCA9IDI1LAogCS5taW5fcHJlZmlsbF9saW5lcyA9IDI0LAotCS5kYW5nZXJf bHV0X3RibCA9IHsweGYsIDB4ZmZmZiwgMHgwLCAweDB9LAorCS5kYW5nZXJfbHV0X3RibCA9IHsw eGYsIDB4ZmZmZiwgMHgwfSwKIAkucW9zX2x1dF90YmwgPSB7CiAJCXsubmVudHJ5ID0gQVJSQVlf U0laRShzZG04NDVfcW9zX2xpbmVhciksCiAJCS5lbnRyaWVzID0gc2RtODQ1X3Fvc19saW5lYXIK QEAgLTQ2OSw5ICs0MzksNiBAQAogCQl7Lm5lbnRyeSA9IEFSUkFZX1NJWkUoc2RtODQ1X3Fvc19u cnQpLAogCQkuZW50cmllcyA9IHNkbTg0NV9xb3NfbnJ0CiAJCX0sCi0JCXsubmVudHJ5ID0gQVJS QVlfU0laRShzZG04NDVfcW9zX2N3YiksCi0JCS5lbnRyaWVzID0gc2RtODQ1X3Fvc19jd2IKLQkJ fSwKIAl9LAogCS5jZHBfY2ZnID0gewogCQl7LnJkX2VuYWJsZSA9IDEsIC53cl9lbmFibGUgPSAx fSwKQEAgLTUwNyw4ICs0NzQsNiBAQCB2b2lkIHNkbTg0NV9jZmdfaW5pdChzdHJ1Y3QgZHB1X21k c3NfY2ZnICpkcHVfY2ZnKQogCQkuY2RtID0gc2RtODQ1X2NkbSwKIAkJLmludGZfY291bnQgPSBB UlJBWV9TSVpFKHNkbTg0NV9pbnRmKSwKIAkJLmludGYgPSBzZG04NDVfaW50ZiwKLQkJLndiX2Nv dW50ID0gQVJSQVlfU0laRShzZG04NDVfd2IpLAotCQkud2IgPSBzZG04NDVfd2IsCiAJCS52Ymlm X2NvdW50ID0gQVJSQVlfU0laRShzZG04NDVfdmJpZiksCiAJCS52YmlmID0gc2RtODQ1X3ZiaWYs CiAJCS5yZWdfZG1hX2NvdW50ID0gMSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20v ZGlzcC9kcHUxL2RwdV9od19jYXRhbG9nLmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1 MS9kcHVfaHdfY2F0YWxvZy5oCmluZGV4IDEyYzU0NGIuLmYwY2IwZDQgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19jYXRhbG9nLmgKKysrIGIvZHJpdmVy cy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2NhdGFsb2cuaApAQCAtMTc5LDQ2ICsxNzks NiBAQCBlbnVtIHsKIH07CiAKIC8qKgotICogV0Igc3ViLWJsb2NrcyBhbmQgZmVhdHVyZXMKLSAq IEBEUFVfV0JfTElORV9NT0RFICAgICAgICBXcml0ZWJhY2sgbW9kdWxlIHN1cHBvcnRzIGxpbmUv bGluZWFyIG1vZGUKLSAqIEBEUFVfV0JfQkxPQ0tfTU9ERSAgICAgICBXcml0ZWJhY2sgbW9kdWxl IHN1cHBvcnRzIGJsb2NrIG1vZGUgcmVhZAotICogQERQVV9XQl9ST1RBVEUgICAgICAgICAgIHJv dGF0aW9uIHN1cHBvcnQsdGhpcyBpcyBhdmFpbGFibGUgaWYgd3JpdGViYWNrCi0gKiAgICAgICAg ICAgICAgICAgICAgICAgICAgc3VwcG9ydHMgYmxvY2sgbW9kZSByZWFkCi0gKiBARFBVX1dCX0NT QyAgICAgICAgICAgICAgV3JpdGViYWNrIGNvbG9yIGNvbnZlcnNpb24gYmxvY2sgc3VwcG9ydAot ICogQERQVV9XQl9DSFJPTUFfRE9XTiwgICAgIFdyaXRlYmFjayBjaHJvbWEgZG93biBibG9jaywK LSAqIEBEUFVfV0JfRE9XTlNDQUxFLCAgICAgICBXcml0ZWJhY2sgaW50ZWdlciBkb3duc2NhbGVy LAotICogQERQVV9XQl9ESVRIRVIsICAgICAgICAgIERpdGhlciBibG9jawotICogQERQVV9XQl9U UkFGRklDX1NIQVBFUiwgIFdyaXRlYmFjayB0cmFmZmljIHNoYXBlciBibG9jCi0gKiBARFBVX1dC X1VCV0MsICAgICAgICAgICAgV3JpdGViYWNrIFVuaXZlcnNhbCBiYW5kd2lkdGggY29tcHJlc3Np b24KLSAqIEBEUFVfV0JfWVVWX0NPTkZJRyAgICAgICBXcml0ZWJhY2sgc3VwcG9ydHMgb3V0cHV0 IG9mIFlVViBjb2xvcnNwYWNlCi0gKiBARFBVX1dCX1BJUEVfQUxQSEEgICAgICAgV3JpdGViYWNr IHN1cHBvcnRzIHBpcGUgYWxwaGEKLSAqIEBEUFVfV0JfWFlfUk9JX09GRlNFVCAgICBXcml0ZWJh Y2sgc3VwcG9ydHMgeC95LW9mZnNldCBvZiBvdXQgUk9JIGluCi0gKiAgICAgICAgICAgICAgICAg ICAgICAgICAgdGhlIGRlc3RpbmF0aW9uIGltYWdlCi0gKiBARFBVX1dCX1FPUywgICAgICAgICAg ICAgV3JpdGViYWNrIHN1cHBvcnRzIFFvUyBjb250cm9sLCBkYW5nZXIvc2FmZS9jcmVxCi0gKiBA RFBVX1dCX1FPU184TFZMLCAgICAgICAgV3JpdGViYWNrIHN1cHBvcnRzIDgtbGV2ZWwgUW9TIGNv bnRyb2wKLSAqIEBEUFVfV0JfQ0RQICAgICAgICAgICAgICBXcml0ZWJhY2sgc3VwcG9ydHMgY2xp ZW50IGRyaXZlbiBwcmVmZXRjaAotICogQERQVV9XQl9NQVggICAgICAgICAgICAgIG1heGltdW0g dmFsdWUKLSAqLwotZW51bSB7Ci0JRFBVX1dCX0xJTkVfTU9ERSA9IDB4MSwKLQlEUFVfV0JfQkxP Q0tfTU9ERSwKLQlEUFVfV0JfUk9UQVRFID0gRFBVX1dCX0JMT0NLX01PREUsCi0JRFBVX1dCX0NT QywKLQlEUFVfV0JfQ0hST01BX0RPV04sCi0JRFBVX1dCX0RPV05TQ0FMRSwKLQlEUFVfV0JfRElU SEVSLAotCURQVV9XQl9UUkFGRklDX1NIQVBFUiwKLQlEUFVfV0JfVUJXQywKLQlEUFVfV0JfWVVW X0NPTkZJRywKLQlEUFVfV0JfUElQRV9BTFBIQSwKLQlEUFVfV0JfWFlfUk9JX09GRlNFVCwKLQlE UFVfV0JfUU9TLAotCURQVV9XQl9RT1NfOExWTCwKLQlEUFVfV0JfQ0RQLAotCURQVV9XQl9NQVgK LX07Ci0KLS8qKgogICogVkJJRiBzdWItYmxvY2tzIGFuZCBmZWF0dXJlcwogICogQERQVV9WQklG X1FPU19PVExJTSAgICAgICAgVkJJRiBzdXBwb3J0cyBPVCBMaW1pdAogICogQERQVV9WQklGX1FP U19SRU1BUCAgICAgICAgVkJJRiBzdXBwb3J0cyBRb1MgcHJpb3JpdHkgcmVtYXAKQEAgLTMwOSw3 ICsyNjksNiBAQCBlbnVtIGRwdV9xb3NfbHV0X3VzYWdlIHsKIAlEUFVfUU9TX0xVVF9VU0FHRV9M SU5FQVIsCiAJRFBVX1FPU19MVVRfVVNBR0VfTUFDUk9USUxFLAogCURQVV9RT1NfTFVUX1VTQUdF X05SVCwKLQlEUFVfUU9TX0xVVF9VU0FHRV9DV0IsCiAJRFBVX1FPU19MVVRfVVNBR0VfTUFYLAog fTsKIApAQCAtNDMxLDEwICszOTAsNiBAQCBzdHJ1Y3QgZHB1X3Bpbmdwb25nX3N1Yl9ibGtzIHsK IAlzdHJ1Y3QgZHB1X3BwX2JsayBkaXRoZXI7CiB9OwogCi1zdHJ1Y3QgZHB1X3diX3N1Yl9ibG9j a3MgewotCXUzMiBtYXhsaW5ld2lkdGg7Ci19OwotCiAvKioKICAqIGRwdV9jbGtfY3RybF90eXBl IC0gRGVmaW5lcyB0b3AgbGV2ZWwgY2xvY2sgY29udHJvbCBzaWduYWxzCiAgKi8KQEAgLTQ1Mywx MSArNDA4LDcgQEAgZW51bSBkcHVfY2xrX2N0cmxfdHlwZSB7CiAJRFBVX0NMS19DVFJMX0RNQTEs CiAJRFBVX0NMS19DVFJMX0NVUlNPUjAsCiAJRFBVX0NMS19DVFJMX0NVUlNPUjEsCi0JRFBVX0NM S19DVFJMX1dCMCwKLQlEUFVfQ0xLX0NUUkxfV0IxLAotCURQVV9DTEtfQ1RSTF9XQjIsCiAJRFBV X0NMS19DVFJMX0lOTElORV9ST1QwX1NTUFAsCi0JRFBVX0NMS19DVFJMX0lOTElORV9ST1QwX1dC LAogCURQVV9DTEtfQ1RSTF9NQVgsCiB9OwogCkBAIC01ODQsMTIgKzUzNSwxMCBAQCBzdHJ1Y3Qg ZHB1X3Bpbmdwb25nX2NmZyAgewogICogQGJhc2UgICAgICAgICAgICAgICByZWdpc3RlciBvZmZz ZXQgb2YgdGhpcyBibG9jawogICogQGZlYXR1cmVzICAgICAgICAgICBiaXQgbWFzayBpZGVudGlm eWluZyBzdWItYmxvY2tzL2ZlYXR1cmVzCiAgKiBAaW50Zl9jb25uZWN0ICAgICAgIEJpdG1hc2sg b2YgSU5URiBJRHMgdGhpcyBDRE0gY2FuIGNvbm5lY3QgdG8KLSAqIEB3Yl9jb25uZWN0OiAgICAg ICAgQml0bWFzayBvZiBXcml0ZWJhY2sgSURzIHRoaXMgQ0RNIGNhbiBjb25uZWN0IHRvCiAgKi8K IHN0cnVjdCBkcHVfY2RtX2NmZyAgIHsKIAlEUFVfSFdfQkxLX0lORk87CiAJdW5zaWduZWQgbG9u ZyBpbnRmX2Nvbm5lY3Q7Ci0JdW5zaWduZWQgbG9uZyB3Yl9jb25uZWN0OwogfTsKIAogLyoqCkBA IC02MDksMjYgKzU1OCw2IEBAIHN0cnVjdCBkcHVfaW50Zl9jZmcgIHsKIH07CiAKIC8qKgotICog c3RydWN0IGRwdV93Yl9jZmcgLSBpbmZvcm1hdGlvbiBvZiB3cml0ZWJhY2sgYmxvY2tzCi0gKiBA aWQgICAgICAgICAgICAgICAgIGVudW0gaWRlbnRpZnlpbmcgdGhpcyBibG9jawotICogQGJhc2Ug ICAgICAgICAgICAgICByZWdpc3RlciBvZmZzZXQgb2YgdGhpcyBibG9jawotICogQGZlYXR1cmVz ICAgICAgICAgICBiaXQgbWFzayBpZGVudGlmeWluZyBzdWItYmxvY2tzL2ZlYXR1cmVzCi0gKiBA c2JsayAgICAgICAgICAgICAgIHN1Yi1ibG9jayBpbmZvcm1hdGlvbgotICogQGZvcm1hdF9saXN0 OiBQb2ludGVyIHRvIGxpc3Qgb2Ygc3VwcG9ydGVkIGZvcm1hdHMKLSAqIEB2YmlmX2lkeCAgICAg ICAgICAgdmJpZiBpZGVudGlmaWVyCi0gKiBAeGluX2lkICAgICAgICAgICAgIGNsaWVudCBpbnRl cmZhY2UgaWRlbnRpZmllcgotICogQGNsa19jdHJsICAgICAgICAgICBjbG9jayBjb250cm9sIGlk ZW50aWZpZXIKLSAqLwotc3RydWN0IGRwdV93Yl9jZmcgewotCURQVV9IV19CTEtfSU5GTzsKLQlj b25zdCBzdHJ1Y3QgZHB1X3diX3N1Yl9ibG9ja3MgKnNibGs7Ci0JY29uc3Qgc3RydWN0IGRwdV9m b3JtYXRfZXh0ZW5kZWQgKmZvcm1hdF9saXN0OwotCXUzMiB2YmlmX2lkeDsKLQl1MzIgeGluX2lk OwotCWVudW0gZHB1X2Nsa19jdHJsX3R5cGUgY2xrX2N0cmw7Ci19OwotCi0vKioKICAqIHN0cnVj dCBkcHVfdmJpZl9keW5hbWljX290X2NmZyAtIGR5bmFtaWMgT1Qgc2V0dGluZwogICogQHBwcyAg ICAgICAgICAgICAgICBwaXhlbCBwZXIgc2Vjb25kcwogICogQG90X2xpbWl0ICAgICAgICAgICBP VCBsaW1pdCB0byB1c2UgdXAgdG8gc3BlY2lmaWVkIHBpeGVsIHBlciBzZWNvbmQKQEAgLTc4MSw3 ICs3MTAsNiBAQCBzdHJ1Y3QgZHB1X3BlcmZfY2ZnIHsKICAqIEBkbWFfZm9ybWF0cyAgICAgICAg U3VwcG9ydGVkIGZvcm1hdHMgZm9yIGRtYSBwaXBlCiAgKiBAY3Vyc29yX2Zvcm1hdHMgICAgIFN1 cHBvcnRlZCBmb3JtYXRzIGZvciBjdXJzb3IgcGlwZQogICogQHZpZ19mb3JtYXRzICAgICAgICBT dXBwb3J0ZWQgZm9ybWF0cyBmb3IgdmlnIHBpcGUKLSAqIEB3Yl9mb3JtYXRzICAgICAgICAgU3Vw cG9ydGVkIGZvcm1hdHMgZm9yIHdiCiAgKi8KIHN0cnVjdCBkcHVfbWRzc19jZmcgewogCXUzMiBo d3ZlcnNpb247CkBAIC04MTIsOSArNzQwLDYgQEAgc3RydWN0IGRwdV9tZHNzX2NmZyB7CiAJdTMy IGludGZfY291bnQ7CiAJc3RydWN0IGRwdV9pbnRmX2NmZyAqaW50ZjsKIAotCXUzMiB3Yl9jb3Vu dDsKLQlzdHJ1Y3QgZHB1X3diX2NmZyAqd2I7Ci0KIAl1MzIgdmJpZl9jb3VudDsKIAlzdHJ1Y3Qg ZHB1X3ZiaWZfY2ZnICp2YmlmOwogCkBAIC04MjksNyArNzU0LDYgQEAgc3RydWN0IGRwdV9tZHNz X2NmZyB7CiAJc3RydWN0IGRwdV9mb3JtYXRfZXh0ZW5kZWQgKmRtYV9mb3JtYXRzOwogCXN0cnVj dCBkcHVfZm9ybWF0X2V4dGVuZGVkICpjdXJzb3JfZm9ybWF0czsKIAlzdHJ1Y3QgZHB1X2Zvcm1h dF9leHRlbmRlZCAqdmlnX2Zvcm1hdHM7Ci0Jc3RydWN0IGRwdV9mb3JtYXRfZXh0ZW5kZWQgKndi X2Zvcm1hdHM7CiB9OwogCiBzdHJ1Y3QgZHB1X21kc3NfaHdfY2ZnX2hhbmRsZXIgewpAQCAtODUx LDcgKzc3NSw2IEBAIHN0cnVjdCBkcHVfbWRzc19od19jZmdfaGFuZGxlciB7CiAjZGVmaW5lIEJM S19QSU5HUE9ORyhzKSAoKHMpLT5waW5ncG9uZykKICNkZWZpbmUgQkxLX0NETShzKSAoKHMpLT5j ZG0pCiAjZGVmaW5lIEJMS19JTlRGKHMpICgocyktPmludGYpCi0jZGVmaW5lIEJMS19XQihzKSAo KHMpLT53YikKICNkZWZpbmUgQkxLX0FEKHMpICgocyktPmFkKQogCiAvKioKZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19jZG0uYyBiL2RyaXZlcnMvZ3B1 L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19jZG0uYwppbmRleCA3NzFmZmU0Li4yNGIwZGJjIDEw MDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfY2RtLmMKKysr IGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2NkbS5jCkBAIC0yMzUsOSAr MjM1LDYgQEAgaW50IGRwdV9od19jZG1fZW5hYmxlKHN0cnVjdCBkcHVfaHdfY2RtICpjdHgsCiAJ CW9wbW9kZSA9IEJJVCgwKTsKIAkJb3Btb2RlIHw9IChmbXQtPmNocm9tYV9zYW1wbGUgPDwgMSk7 CiAJCWNkbV9jZmcuaW50Zl9lbiA9IHRydWU7Ci0JfSBlbHNlIHsKLQkJb3Btb2RlID0gMDsKLQkJ Y2RtX2NmZy53Yl9lbiA9IHRydWU7CiAJfQogCiAJY3NjIHw9IEJJVCgyKTsKZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19jdGwuYyBiL2RyaXZlcnMvZ3B1 L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19jdGwuYwppbmRleCA0ODY1NDI3Li5hZDAyMzE2IDEw MDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfY3RsLmMKKysr IGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2N0bC5jCkBAIC0yMjQsMjEg KzIyNCw2IEBAIHN0YXRpYyBpbmxpbmUgaW50IGRwdV9od19jdGxfZ2V0X2JpdG1hc2tfaW50Zihz dHJ1Y3QgZHB1X2h3X2N0bCAqY3R4LAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGlu dCBkcHVfaHdfY3RsX2dldF9iaXRtYXNrX3diKHN0cnVjdCBkcHVfaHdfY3RsICpjdHgsCi0JCXUz MiAqZmx1c2hiaXRzLCBlbnVtIGRwdV93YiB3YikKLXsKLQlzd2l0Y2ggKHdiKSB7Ci0JY2FzZSBX Ql8wOgotCWNhc2UgV0JfMToKLQljYXNlIFdCXzI6Ci0JCSpmbHVzaGJpdHMgfD0gQklUKDE2KTsK LQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCXJldHVybiAwOwot fQotCiBzdGF0aWMgaW5saW5lIGludCBkcHVfaHdfY3RsX2dldF9iaXRtYXNrX2NkbShzdHJ1Y3Qg ZHB1X2h3X2N0bCAqY3R4LAogCQl1MzIgKmZsdXNoYml0cywgZW51bSBkcHVfY2RtIGNkbSkKIHsK QEAgLTQ2MCw5ICs0NDUsNiBAQCBzdGF0aWMgdm9pZCBkcHVfaHdfY3RsX2ludGZfY2ZnKHN0cnVj dCBkcHVfaHdfY3RsICpjdHgsCiAKIAlpbnRmX2NmZyB8PSAoY2ZnLT5pbnRmICYgMHhGKSA8PCA0 OwogCi0JaWYgKGNmZy0+d2IpCi0JCWludGZfY2ZnIHw9IChjZmctPndiICYgMHgzKSArIDI7Ci0K IAlpZiAoY2ZnLT5tb2RlXzNkKSB7CiAJCWludGZfY2ZnIHw9IEJJVCgxOSk7CiAJCWludGZfY2Zn IHw9IChjZmctPm1vZGVfM2QgLSAweDEpIDw8IDIwOwpAQCAtNTA0LDcgKzQ4Niw2IEBAIHN0YXRp YyB2b2lkIF9zZXR1cF9jdGxfb3BzKHN0cnVjdCBkcHVfaHdfY3RsX29wcyAqb3BzLAogCW9wcy0+ Z2V0X2JpdG1hc2tfbWl4ZXIgPSBkcHVfaHdfY3RsX2dldF9iaXRtYXNrX21peGVyOwogCW9wcy0+ Z2V0X2JpdG1hc2tfaW50ZiA9IGRwdV9od19jdGxfZ2V0X2JpdG1hc2tfaW50ZjsKIAlvcHMtPmdl dF9iaXRtYXNrX2NkbSA9IGRwdV9od19jdGxfZ2V0X2JpdG1hc2tfY2RtOwotCW9wcy0+Z2V0X2Jp dG1hc2tfd2IgPSBkcHVfaHdfY3RsX2dldF9iaXRtYXNrX3diOwogfTsKIAogc3RhdGljIHN0cnVj dCBkcHVfaHdfYmxrX29wcyBkcHVfaHdfb3BzID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2N0bC5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNw L2RwdTEvZHB1X2h3X2N0bC5oCmluZGV4IGI3NzNhNWEuLmM2NmE3MWYgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19jdGwuaAorKysgYi9kcml2ZXJzL2dw dS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfY3RsLmgKQEAgLTQ0LDE0ICs0NCwxMiBAQCBzdHJ1 Y3QgZHB1X2h3X3N0YWdlX2NmZyB7CiAvKioKICAqIHN0cnVjdCBkcHVfaHdfaW50Zl9jZmcgOkRl c2NyaWJlcyBob3cgdGhlIERQVSB3cml0ZXMgZGF0YSB0byBvdXRwdXQgaW50ZXJmYWNlCiAgKiBA aW50ZiA6ICAgICAgICAgICAgICAgICBJbnRlcmZhY2UgaWQKLSAqIEB3YjogICAgICAgICAgICAg ICAgICAgIFdyaXRlYmFjayBpZAogICogQG1vZGVfM2Q6ICAgICAgICAgICAgICAgM2QgbXV4IGNv bmZpZ3VyYXRpb24KICAqIEBpbnRmX21vZGVfc2VsOiAgICAgICAgIEludGVyZmFjZSBtb2RlLCBj bWQgLyB2aWQKICAqIEBzdHJlYW1fc2VsOiAgICAgICAgICAgIFN0cmVhbSBzZWxlY3Rpb24gZm9y IG11bHRpLXN0cmVhbSBpbnRlcmZhY2VzCiAgKi8KIHN0cnVjdCBkcHVfaHdfaW50Zl9jZmcgewog CWVudW0gZHB1X2ludGYgaW50ZjsKLQllbnVtIGRwdV93YiB3YjsKIAllbnVtIGRwdV8zZF9ibGVu ZF9tb2RlIG1vZGVfM2Q7CiAJZW51bSBkcHVfY3RsX21vZGVfc2VsIGludGZfbW9kZV9zZWw7CiAJ aW50IHN0cmVhbV9zZWw7CkBAIC0xNDgsMTAgKzE0Niw2IEBAIHN0cnVjdCBkcHVfaHdfY3RsX29w cyB7CiAJCXUzMiAqZmx1c2hiaXRzLAogCQllbnVtIGRwdV9jZG0gYmxrKTsKIAotCWludCAoKmdl dF9iaXRtYXNrX3diKShzdHJ1Y3QgZHB1X2h3X2N0bCAqY3R4LAotCQl1MzIgKmZsdXNoYml0cywK LQkJZW51bSBkcHVfd2IgYmxrKTsKLQogCS8qKgogCSAqIFNldCBhbGwgYmxlbmQgc3RhZ2VzIHRv IGRpc2FibGVkCiAJICogQGN0eCAgICAgICA6IGN0bCBwYXRoIGN0eCBwb2ludGVyCmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfdG9wLmMgYi9kcml2ZXJz L2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfdG9wLmMKaW5kZXggOGY3ZjkzMi4uMTE1ZWVl ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X3RvcC5j CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od190b3AuYwpAQCAtMTA5 LDkgKzEwOSw3IEBAIHN0YXRpYyB2b2lkIGRwdV9od19zZXR1cF9jZG1fb3V0cHV0KHN0cnVjdCBk cHVfaHdfbWRwICptZHAsCiAKIAljID0gJm1kcC0+aHc7CiAKLQlpZiAoY2ZnLT53Yl9lbikKLQkJ b3V0X2N0bCB8PSBCSVQoMjQpOwotCWVsc2UgaWYgKGNmZy0+aW50Zl9lbikKKwlpZiAoY2ZnLT5p bnRmX2VuKQogCQlvdXRfY3RsIHw9IEJJVCgxOSk7CiAKIAlEUFVfUkVHX1dSSVRFKGMsIE1EUF9P VVRfQ1RMXzAsIG91dF9jdGwpOwpAQCAtMTc4LDEwICsxNzYsNiBAQCBzdGF0aWMgdm9pZCBkcHVf aHdfZ2V0X2Rhbmdlcl9zdGF0dXMoc3RydWN0IGRwdV9od19tZHAgKm1kcCwKIAlzdGF0dXMtPnNz cHBbU1NQUF9ETUEzXSA9ICh2YWx1ZSA+PiAzMCkgJiAweDM7CiAJc3RhdHVzLT5zc3BwW1NTUFBf Q1VSU09SMF0gPSAodmFsdWUgPj4gMjQpICYgMHgzOwogCXN0YXR1cy0+c3NwcFtTU1BQX0NVUlNP UjFdID0gKHZhbHVlID4+IDI2KSAmIDB4MzsKLQlzdGF0dXMtPndiW1dCXzBdID0gMDsKLQlzdGF0 dXMtPndiW1dCXzFdID0gMDsKLQlzdGF0dXMtPndiW1dCXzJdID0gKHZhbHVlID4+IDIpICYgMHgz OwotCXN0YXR1cy0+d2JbV0JfM10gPSAwOwogfQogCiBzdGF0aWMgdm9pZCBkcHVfaHdfc2V0dXBf dnN5bmNfc291cmNlKHN0cnVjdCBkcHVfaHdfbWRwICptZHAsCkBAIC0yNzksMTAgKzI3Myw2IEBA IHN0YXRpYyB2b2lkIGRwdV9od19nZXRfc2FmZV9zdGF0dXMoc3RydWN0IGRwdV9od19tZHAgKm1k cCwKIAlzdGF0dXMtPnNzcHBbU1NQUF9ETUEzXSA9ICh2YWx1ZSA+PiAzMCkgJiAweDE7CiAJc3Rh dHVzLT5zc3BwW1NTUFBfQ1VSU09SMF0gPSAodmFsdWUgPj4gMjQpICYgMHgxOwogCXN0YXR1cy0+ c3NwcFtTU1BQX0NVUlNPUjFdID0gKHZhbHVlID4+IDI2KSAmIDB4MTsKLQlzdGF0dXMtPndiW1dC XzBdID0gMDsKLQlzdGF0dXMtPndiW1dCXzFdID0gMDsKLQlzdGF0dXMtPndiW1dCXzJdID0gKHZh bHVlID4+IDIpICYgMHgxOwotCXN0YXR1cy0+d2JbV0JfM10gPSAwOwogfQogCiB2b2lkIGRwdV9o d19yZXNldF91YndjKHN0cnVjdCBkcHVfaHdfbWRwICptZHAsIHN0cnVjdCBkcHVfbWRzc19jZmcg Km0pCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfdG9w LmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfdG9wLmgKaW5kZXggNTQy OWNkNS4uODk5OTI1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEv ZHB1X2h3X3RvcC5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od190 b3AuaApAQCAtNTMsMTEgKzUzLDkgQEAgc3RydWN0IHNwbGl0X3BpcGVfY2ZnIHsKIAogLyoqCiAg KiBzdHJ1Y3QgY2RtX291dHB1dF9jZmc6IG91dHB1dCBjb25maWd1cmF0aW9uIGZvciBjZG0KLSAq IEB3Yl9lbiAgICAgOiBlbmFibGUvZGlzYWJsZSB3cml0ZWJhY2sgb3V0cHV0CiAgKiBAaW50Zl9l biAgIDogZW5hYmxlL2Rpc2FibGUgaW50ZXJmYWNlIG91dHB1dAogICovCiBzdHJ1Y3QgY2RtX291 dHB1dF9jZmcgewotCWJvb2wgd2JfZW47CiAJYm9vbCBpbnRmX2VuOwogfTsKIApAQCAtNjUsMTIg KzYzLDEwIEBAIHN0cnVjdCBjZG1fb3V0cHV0X2NmZyB7CiAgKiBzdHJ1Y3QgZHB1X2Rhbmdlcl9z YWZlX3N0YXR1czogZGFuZ2VyIGFuZCBzYWZlIHN0YXR1cyBzaWduYWxzCiAgKiBAbWRwOiB0b3Ag bGV2ZWwgc3RhdHVzCiAgKiBAc3NwcDogc291cmNlIHBpcGUgc3RhdHVzCi0gKiBAd2I6IHdyaXRl YmNrIG91dHB1dCBzdGF0dXMKICAqLwogc3RydWN0IGRwdV9kYW5nZXJfc2FmZV9zdGF0dXMgewog CXU4IG1kcDsKIAl1OCBzc3BwW1NTUFBfTUFYXTsKLQl1OCB3YltXQl9NQVhdOwogfTsKIAogLyoq CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfd2IuYyBi L2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od193Yi5jCmRlbGV0ZWQgZmlsZSBt b2RlIDEwMDY0NAppbmRleCA5MGIyYWFlLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9t c20vZGlzcC9kcHUxL2RwdV9od193Yi5jCisrKyAvZGV2L251bGwKQEAgLTEsMzIxICswLDAgQEAK LS8qIENvcHlyaWdodCAoYykgMjAxNS0yMDE4LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJp Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91 IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCi0gKiBvbmx5 IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4K LSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3 aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICovCi0KLSNpbmNsdWRlICJkcHVfaHdfbWRzcy5o IgotI2luY2x1ZGUgImRwdV9od2lvLmgiCi0jaW5jbHVkZSAiZHB1X2h3X2NhdGFsb2cuaCIKLSNp bmNsdWRlICJkcHVfaHdfd2IuaCIKLSNpbmNsdWRlICJkcHVfZm9ybWF0cy5oIgotI2luY2x1ZGUg ImRwdV9kYmcuaCIKLSNpbmNsdWRlICJkcHVfa21zLmgiCi0KLSNkZWZpbmUgV0JfRFNUX0ZPUk1B VAkJCTB4MDAwCi0jZGVmaW5lIFdCX0RTVF9PUF9NT0RFCQkJMHgwMDQKLSNkZWZpbmUgV0JfRFNU X1BBQ0tfUEFUVEVSTgkJMHgwMDgKLSNkZWZpbmUgV0JfRFNUMF9BRERSCQkJMHgwMEMKLSNkZWZp bmUgV0JfRFNUMV9BRERSCQkJMHgwMTAKLSNkZWZpbmUgV0JfRFNUMl9BRERSCQkJMHgwMTQKLSNk ZWZpbmUgV0JfRFNUM19BRERSCQkJMHgwMTgKLSNkZWZpbmUgV0JfRFNUX1lTVFJJREUwCQkJMHgw MUMKLSNkZWZpbmUgV0JfRFNUX1lTVFJJREUxCQkJMHgwMjAKLSNkZWZpbmUgV0JfRFNUX1lTVFJJ REUxCQkJMHgwMjAKLSNkZWZpbmUgV0JfRFNUX0RJVEhFUl9CSVRERVBUSAkJMHgwMjQKLSNkZWZp bmUgV0JfRFNUX01BVFJJWF9ST1cwCQkweDAzMAotI2RlZmluZSBXQl9EU1RfTUFUUklYX1JPVzEJ CTB4MDM0Ci0jZGVmaW5lIFdCX0RTVF9NQVRSSVhfUk9XMgkJMHgwMzgKLSNkZWZpbmUgV0JfRFNU X01BVFJJWF9ST1czCQkweDAzQwotI2RlZmluZSBXQl9EU1RfV1JJVEVfQ09ORklHCQkweDA0OAot I2RlZmluZSBXQl9ST1RBVElPTl9ETlNDQUxFUgkJMHgwNTAKLSNkZWZpbmUgV0JfUk9UQVRPUl9Q SVBFX0RPV05TQ0FMRVIJMHgwNTQKLSNkZWZpbmUgV0JfTjE2X0lOSVRfUEhBU0VfWF9DMDMJCTB4 MDYwCi0jZGVmaW5lIFdCX04xNl9JTklUX1BIQVNFX1hfQzEyCQkweDA2NAotI2RlZmluZSBXQl9O MTZfSU5JVF9QSEFTRV9ZX0MwMwkJMHgwNjgKLSNkZWZpbmUgV0JfTjE2X0lOSVRfUEhBU0VfWV9D MTIJCTB4MDZDCi0jZGVmaW5lIFdCX09VVF9TSVpFCQkJMHgwNzQKLSNkZWZpbmUgV0JfQUxQSEFf WF9WQUxVRQkJMHgwNzgKLSNkZWZpbmUgV0JfREFOR0VSX0xVVAkJCTB4MDg0Ci0jZGVmaW5lIFdC X1NBRkVfTFVUCQkJMHgwODgKLSNkZWZpbmUgV0JfUU9TX0NUUkwJCQkweDA5MAotI2RlZmluZSBX Ql9DUkVRX0xVVF8wCQkJMHgwOTgKLSNkZWZpbmUgV0JfQ1JFUV9MVVRfMQkJCTB4MDlDCi0jZGVm aW5lIFdCX1VCV0NfU1RBVElDX0NUUkwJCTB4MTQ0Ci0jZGVmaW5lIFdCX0NTQ19CQVNFCQkJMHgy NjAKLSNkZWZpbmUgV0JfRFNUX0FERFJfU1dfU1RBVFVTCQkweDJCMAotI2RlZmluZSBXQl9DRFBf Q05UTAkJCTB4MkI0Ci0jZGVmaW5lIFdCX09VVF9JTUFHRV9TSVpFCQkweDJDMAotI2RlZmluZSBX Ql9PVVRfWFkJCQkweDJDNAotCi0vKiBXQl9RT1NfQ1RSTCAqLwotI2RlZmluZSBXQl9RT1NfQ1RS TF9EQU5HRVJfU0FGRV9FTglCSVQoMCkKLQotc3RhdGljIHN0cnVjdCBkcHVfd2JfY2ZnICpfd2Jf b2Zmc2V0KGVudW0gZHB1X3diIHdiLAotCQlzdHJ1Y3QgZHB1X21kc3NfY2ZnICptLAotCQl2b2lk IF9faW9tZW0gKmFkZHIsCi0JCXN0cnVjdCBkcHVfaHdfYmxrX3JlZ19tYXAgKmIpCi17Ci0JaW50 IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbS0+d2JfY291bnQ7IGkrKykgewotCQlpZiAod2IgPT0g bS0+d2JbaV0uaWQpIHsKLQkJCWItPmJhc2Vfb2ZmID0gYWRkcjsKLQkJCWItPmJsa19vZmYgPSBt LT53YltpXS5iYXNlOwotCQkJYi0+bGVuZ3RoID0gbS0+d2JbaV0ubGVuOwotCQkJYi0+aHd2ZXJz aW9uID0gbS0+aHd2ZXJzaW9uOwotCQkJYi0+bG9nX21hc2sgPSBEUFVfREJHX01BU0tfV0I7Ci0J CQlyZXR1cm4gJm0tPndiW2ldOwotCQl9Ci0JfQotCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwot fQotCi1zdGF0aWMgdm9pZCBkcHVfaHdfd2Jfc2V0dXBfb3V0YWRkcmVzcyhzdHJ1Y3QgZHB1X2h3 X3diICpjdHgsCi0JCXN0cnVjdCBkcHVfaHdfd2JfY2ZnICpkYXRhKQotewotCXN0cnVjdCBkcHVf aHdfYmxrX3JlZ19tYXAgKmMgPSAmY3R4LT5odzsKLQotCURQVV9SRUdfV1JJVEUoYywgV0JfRFNU MF9BRERSLCBkYXRhLT5kZXN0LnBsYW5lX2FkZHJbMF0pOwotCURQVV9SRUdfV1JJVEUoYywgV0Jf RFNUMV9BRERSLCBkYXRhLT5kZXN0LnBsYW5lX2FkZHJbMV0pOwotCURQVV9SRUdfV1JJVEUoYywg V0JfRFNUMl9BRERSLCBkYXRhLT5kZXN0LnBsYW5lX2FkZHJbMl0pOwotCURQVV9SRUdfV1JJVEUo YywgV0JfRFNUM19BRERSLCBkYXRhLT5kZXN0LnBsYW5lX2FkZHJbM10pOwotfQotCi1zdGF0aWMg dm9pZCBkcHVfaHdfd2Jfc2V0dXBfZm9ybWF0KHN0cnVjdCBkcHVfaHdfd2IgKmN0eCwKLQkJc3Ry dWN0IGRwdV9od193Yl9jZmcgKmRhdGEpCi17Ci0Jc3RydWN0IGRwdV9od19ibGtfcmVnX21hcCAq YyA9ICZjdHgtPmh3OwotCWNvbnN0IHN0cnVjdCBkcHVfZm9ybWF0ICpmbXQgPSBkYXRhLT5kZXN0 LmZvcm1hdDsKLQl1MzIgZHN0X2Zvcm1hdCwgcGF0dGVybiwgeXN0cmlkZTAsIHlzdHJpZGUxLCBv dXRzaXplLCBjaHJvbWFfc2FtcDsKLQl1MzIgd3JpdGVfY29uZmlnID0gMDsKLQl1MzIgb3Btb2Rl ID0gMDsKLQl1MzIgZHN0X2FkZHJfc3cgPSAwOwotCi0JY2hyb21hX3NhbXAgPSBmbXQtPmNocm9t YV9zYW1wbGU7Ci0KLQlkc3RfZm9ybWF0ID0gKGNocm9tYV9zYW1wIDw8IDIzKSB8Ci0JCQkoZm10 LT5mZXRjaF9wbGFuZXMgPDwgMTkpIHwKLQkJCShmbXQtPmJpdHNbQzNfQUxQSEFdIDw8IDYpIHwK LQkJCShmbXQtPmJpdHNbQzJfUl9Dcl0gPDwgNCkgfAotCQkJKGZtdC0+Yml0c1tDMV9CX0NiXSA8 PCAyKSB8Ci0JCQkoZm10LT5iaXRzW0MwX0dfWV0gPDwgMCk7Ci0KLQlpZiAoZm10LT5iaXRzW0Mz X0FMUEhBXSB8fCBmbXQtPmFscGhhX2VuYWJsZSkgewotCQlkc3RfZm9ybWF0IHw9IEJJVCg4KTsg LyogRFNUQzNfRU4gKi8KLQkJaWYgKCFmbXQtPmFscGhhX2VuYWJsZSB8fAotCQkJCSEoY3R4LT5j YXBzLT5mZWF0dXJlcyAmIEJJVChEUFVfV0JfUElQRV9BTFBIQSkpKQotCQkJZHN0X2Zvcm1hdCB8 PSBCSVQoMTQpOyAvKiBEU1RfQUxQSEFfWCAqLwotCX0KLQotCWlmIChEUFVfRk9STUFUX0lTX1lV VihmbXQpICYmCi0JCQkoY3R4LT5jYXBzLT5mZWF0dXJlcyAmIEJJVChEUFVfV0JfWVVWX0NPTkZJ RykpKQotCQlkc3RfZm9ybWF0IHw9IEJJVCgxNSk7Ci0KLQlpZiAoRFBVX0ZPUk1BVF9JU19EWChm bXQpKQotCQlkc3RfZm9ybWF0IHw9IEJJVCgyMSk7Ci0KLQlwYXR0ZXJuID0gKGZtdC0+ZWxlbWVu dFszXSA8PCAyNCkgfAotCQkJKGZtdC0+ZWxlbWVudFsyXSA8PCAxNikgfAotCQkJKGZtdC0+ZWxl bWVudFsxXSA8PCA4KSAgfAotCQkJKGZtdC0+ZWxlbWVudFswXSA8PCAwKTsKLQotCWRzdF9mb3Jt YXQgfD0gKGZtdC0+dW5wYWNrX2FsaWduX21zYiA8PCAxOCkgfAotCQkJKGZtdC0+dW5wYWNrX3Rp Z2h0IDw8IDE3KSB8Ci0JCQkoKGZtdC0+dW5wYWNrX2NvdW50IC0gMSkgPDwgMTIpIHwKLQkJCSgo Zm10LT5icHAgLSAxKSA8PCA5KTsKLQotCXlzdHJpZGUwID0gZGF0YS0+ZGVzdC5wbGFuZV9waXRj aFswXSB8Ci0JCQkoZGF0YS0+ZGVzdC5wbGFuZV9waXRjaFsxXSA8PCAxNik7Ci0JeXN0cmlkZTEg PSBkYXRhLT5kZXN0LnBsYW5lX3BpdGNoWzJdIHwKLQkJCShkYXRhLT5kZXN0LnBsYW5lX3BpdGNo WzNdIDw8IDE2KTsKLQotCWlmIChkYXRhLT5yb2kuaCAmJiBkYXRhLT5yb2kudykKLQkJb3V0c2l6 ZSA9IChkYXRhLT5yb2kuaCA8PCAxNikgfCBkYXRhLT5yb2kudzsKLQllbHNlCi0JCW91dHNpemUg PSAoZGF0YS0+ZGVzdC5oZWlnaHQgPDwgMTYpIHwgZGF0YS0+ZGVzdC53aWR0aDsKLQotCWlmIChE UFVfRk9STUFUX0lTX1VCV0MoZm10KSkgewotCQlvcG1vZGUgfD0gQklUKDApOwotCQlkc3RfZm9y bWF0IHw9IEJJVCgzMSk7Ci0JCXdyaXRlX2NvbmZpZyB8PSAoY3R4LT5tZHAtPmhpZ2hlc3RfYmFu a19iaXQgPDwgOCk7Ci0JCWlmIChmbXQtPmJhc2UucGl4ZWxfZm9ybWF0ID09IERSTV9GT1JNQVRf UkdCNTY1KQotCQkJd3JpdGVfY29uZmlnIHw9IDB4ODsKLQkJaWYgKElTX1VCV0NfMjBfU1VQUE9S VEVEKGN0eC0+Y2F0YWxvZy0+Y2Fwcy0+dWJ3Y192ZXJzaW9uKSkKLQkJCURQVV9SRUdfV1JJVEUo YywgV0JfVUJXQ19TVEFUSUNfQ1RSTCwKLQkJCQkJKGN0eC0+bWRwLT51YndjX3N3aXp6bGUgPDwg MCkgfAotCQkJCQkoY3R4LT5tZHAtPmhpZ2hlc3RfYmFua19iaXQgPDwgNCkpOwotCX0KLQotCURQ VV9SRUdfV1JJVEUoYywgV0JfQUxQSEFfWF9WQUxVRSwgMHhGRik7Ci0JRFBVX1JFR19XUklURShj LCBXQl9EU1RfRk9STUFULCBkc3RfZm9ybWF0KTsKLQlEUFVfUkVHX1dSSVRFKGMsIFdCX0RTVF9P UF9NT0RFLCBvcG1vZGUpOwotCURQVV9SRUdfV1JJVEUoYywgV0JfRFNUX1BBQ0tfUEFUVEVSTiwg cGF0dGVybik7Ci0JRFBVX1JFR19XUklURShjLCBXQl9EU1RfWVNUUklERTAsIHlzdHJpZGUwKTsK LQlEUFVfUkVHX1dSSVRFKGMsIFdCX0RTVF9ZU1RSSURFMSwgeXN0cmlkZTEpOwotCURQVV9SRUdf V1JJVEUoYywgV0JfT1VUX1NJWkUsIG91dHNpemUpOwotCURQVV9SRUdfV1JJVEUoYywgV0JfRFNU X1dSSVRFX0NPTkZJRywgd3JpdGVfY29uZmlnKTsKLQlEUFVfUkVHX1dSSVRFKGMsIFdCX0RTVF9B RERSX1NXX1NUQVRVUywgZHN0X2FkZHJfc3cpOwotfQotCi1zdGF0aWMgdm9pZCBkcHVfaHdfd2Jf cm9pKHN0cnVjdCBkcHVfaHdfd2IgKmN0eCwgc3RydWN0IGRwdV9od193Yl9jZmcgKndiKQotewot CXN0cnVjdCBkcHVfaHdfYmxrX3JlZ19tYXAgKmMgPSAmY3R4LT5odzsKLQl1MzIgaW1hZ2Vfc2l6 ZSwgb3V0X3NpemUsIG91dF94eTsKLQotCWltYWdlX3NpemUgPSAod2ItPmRlc3QuaGVpZ2h0IDw8 IDE2KSB8IHdiLT5kZXN0LndpZHRoOwotCW91dF94eSA9ICh3Yi0+cm9pLnkgPDwgMTYpIHwgd2It PnJvaS54OwotCW91dF9zaXplID0gKHdiLT5yb2kuaCA8PCAxNikgfCB3Yi0+cm9pLnc7Ci0KLQlE UFVfUkVHX1dSSVRFKGMsIFdCX09VVF9JTUFHRV9TSVpFLCBpbWFnZV9zaXplKTsKLQlEUFVfUkVH X1dSSVRFKGMsIFdCX09VVF9YWSwgb3V0X3h5KTsKLQlEUFVfUkVHX1dSSVRFKGMsIFdCX09VVF9T SVpFLCBvdXRfc2l6ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRwdV9od193Yl9zZXR1cF9kYW5nZXJf c2FmZV9sdXQoc3RydWN0IGRwdV9od193YiAqY3R4LAotCQlzdHJ1Y3QgZHB1X2h3X3diX3Fvc19j ZmcgKmNmZykKLXsKLQlzdHJ1Y3QgZHB1X2h3X2Jsa19yZWdfbWFwICpjID0gJmN0eC0+aHc7Ci0K LQlpZiAoIWN0eCB8fCAhY2ZnKQotCQlyZXR1cm47Ci0KLQlEUFVfUkVHX1dSSVRFKGMsIFdCX0RB TkdFUl9MVVQsIGNmZy0+ZGFuZ2VyX2x1dCk7Ci0JRFBVX1JFR19XUklURShjLCBXQl9TQUZFX0xV VCwgY2ZnLT5zYWZlX2x1dCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRwdV9od193Yl9zZXR1cF9jcmVx X2x1dChzdHJ1Y3QgZHB1X2h3X3diICpjdHgsCi0JCXN0cnVjdCBkcHVfaHdfd2JfcW9zX2NmZyAq Y2ZnKQotewotCXN0cnVjdCBkcHVfaHdfYmxrX3JlZ19tYXAgKmMgPSAmY3R4LT5odzsKLQotCWlm ICghY3R4IHx8ICFjZmcpCi0JCXJldHVybjsKLQotCWlmIChjdHgtPmNhcHMgJiYgdGVzdF9iaXQo RFBVX1dCX1FPU184TFZMLCAmY3R4LT5jYXBzLT5mZWF0dXJlcykpIHsKLQkJRFBVX1JFR19XUklU RShjLCBXQl9DUkVRX0xVVF8wLCBjZmctPmNyZXFfbHV0KTsKLQkJRFBVX1JFR19XUklURShjLCBX Ql9DUkVRX0xVVF8xLCBjZmctPmNyZXFfbHV0ID4+IDMyKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lk IGRwdV9od193Yl9zZXR1cF9xb3NfY3RybChzdHJ1Y3QgZHB1X2h3X3diICpjdHgsCi0JCXN0cnVj dCBkcHVfaHdfd2JfcW9zX2NmZyAqY2ZnKQotewotCXN0cnVjdCBkcHVfaHdfYmxrX3JlZ19tYXAg KmMgPSAmY3R4LT5odzsKLQl1MzIgcW9zX2N0cmwgPSAwOwotCi0JaWYgKCFjdHggfHwgIWNmZykK LQkJcmV0dXJuOwotCi0JaWYgKGNmZy0+ZGFuZ2VyX3NhZmVfZW4pCi0JCXFvc19jdHJsIHw9IFdC X1FPU19DVFJMX0RBTkdFUl9TQUZFX0VOOwotCi0JRFBVX1JFR19XUklURShjLCBXQl9RT1NfQ1RS TCwgcW9zX2N0cmwpOwotfQotCi1zdGF0aWMgdm9pZCBkcHVfaHdfd2Jfc2V0dXBfY2RwKHN0cnVj dCBkcHVfaHdfd2IgKmN0eCwKLQkJc3RydWN0IGRwdV9od193Yl9jZHBfY2ZnICpjZmcpCi17Ci0J c3RydWN0IGRwdV9od19ibGtfcmVnX21hcCAqYzsKLQl1MzIgY2RwX2NudGwgPSAwOwotCi0JaWYg KCFjdHggfHwgIWNmZykKLQkJcmV0dXJuOwotCi0JYyA9ICZjdHgtPmh3OwotCi0JaWYgKGNmZy0+ ZW5hYmxlKQotCQljZHBfY250bCB8PSBCSVQoMCk7Ci0JaWYgKGNmZy0+dWJ3Y19tZXRhX2VuYWJs ZSkKLQkJY2RwX2NudGwgfD0gQklUKDEpOwotCWlmIChjZmctPnByZWxvYWRfYWhlYWQgPT0gRFBV X1dCX0NEUF9QUkVMT0FEX0FIRUFEXzY0KQotCQljZHBfY250bCB8PSBCSVQoMyk7Ci0KLQlEUFVf UkVHX1dSSVRFKGMsIFdCX0NEUF9DTlRMLCBjZHBfY250bCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9z ZXR1cF93Yl9vcHMoc3RydWN0IGRwdV9od193Yl9vcHMgKm9wcywKLQl1bnNpZ25lZCBsb25nIGZl YXR1cmVzKQotewotCW9wcy0+c2V0dXBfb3V0YWRkcmVzcyA9IGRwdV9od193Yl9zZXR1cF9vdXRh ZGRyZXNzOwotCW9wcy0+c2V0dXBfb3V0Zm9ybWF0ID0gZHB1X2h3X3diX3NldHVwX2Zvcm1hdDsK LQotCWlmICh0ZXN0X2JpdChEUFVfV0JfWFlfUk9JX09GRlNFVCwgJmZlYXR1cmVzKSkKLQkJb3Bz LT5zZXR1cF9yb2kgPSBkcHVfaHdfd2Jfcm9pOwotCi0JaWYgKHRlc3RfYml0KERQVV9XQl9RT1Ms ICZmZWF0dXJlcykpIHsKLQkJb3BzLT5zZXR1cF9kYW5nZXJfc2FmZV9sdXQgPQotCQkJZHB1X2h3 X3diX3NldHVwX2Rhbmdlcl9zYWZlX2x1dDsKLQkJb3BzLT5zZXR1cF9jcmVxX2x1dCA9IGRwdV9o d193Yl9zZXR1cF9jcmVxX2x1dDsKLQkJb3BzLT5zZXR1cF9xb3NfY3RybCA9IGRwdV9od193Yl9z ZXR1cF9xb3NfY3RybDsKLQl9Ci0KLQlpZiAodGVzdF9iaXQoRFBVX1dCX0NEUCwgJmZlYXR1cmVz KSkKLQkJb3BzLT5zZXR1cF9jZHAgPSBkcHVfaHdfd2Jfc2V0dXBfY2RwOwotfQotCi1zdGF0aWMg c3RydWN0IGRwdV9od19ibGtfb3BzIGRwdV9od19vcHMgPSB7Ci0JLnN0YXJ0ID0gTlVMTCwKLQku c3RvcCA9IE5VTEwsCi19OwotCi1zdHJ1Y3QgZHB1X2h3X3diICpkcHVfaHdfd2JfaW5pdChlbnVt IGRwdV93YiBpZHgsCi0JCXZvaWQgX19pb21lbSAqYWRkciwKLQkJc3RydWN0IGRwdV9tZHNzX2Nm ZyAqbSwKLQkJc3RydWN0IGRwdV9od19tZHAgKmh3X21kcCkKLXsKLQlzdHJ1Y3QgZHB1X2h3X3di ICpjOwotCXN0cnVjdCBkcHVfd2JfY2ZnICpjZmc7Ci0JaW50IHJjOwotCi0JaWYgKCFhZGRyIHx8 ICFtIHx8ICFod19tZHApCi0JCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwotCi0JYyA9IGt6YWxs b2Moc2l6ZW9mKCpjKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFjKQotCQlyZXR1cm4gRVJSX1BUUigt RU5PTUVNKTsKLQotCWNmZyA9IF93Yl9vZmZzZXQoaWR4LCBtLCBhZGRyLCAmYy0+aHcpOwotCWlm IChJU19FUlIoY2ZnKSkgewotCQlXQVJOKDEsICJVbmFibGUgdG8gZmluZCB3YiBpZHg9JWRcbiIs IGlkeCk7Ci0JCWtmcmVlKGMpOwotCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKLQl9Ci0KLQkv KiBBc3NpZ24gb3BzICovCi0JYy0+Y2F0YWxvZyA9IG07Ci0JYy0+bWRwID0gJm0tPm1kcFswXTsK LQljLT5pZHggPSBpZHg7Ci0JYy0+Y2FwcyA9IGNmZzsKLQlfc2V0dXBfd2Jfb3BzKCZjLT5vcHMs IGMtPmNhcHMtPmZlYXR1cmVzKTsKLQljLT5od19tZHAgPSBod19tZHA7Ci0KLQlyYyA9IGRwdV9o d19ibGtfaW5pdCgmYy0+YmFzZSwgRFBVX0hXX0JMS19XQiwgaWR4LCAmZHB1X2h3X29wcyk7Ci0J aWYgKHJjKSB7Ci0JCURQVV9FUlJPUigiZmFpbGVkIHRvIGluaXQgaHcgYmxrICVkXG4iLCByYyk7 Ci0JCWdvdG8gYmxrX2luaXRfZXJyb3I7Ci0JfQotCi0JZHB1X2RiZ19yZWdfcmVnaXN0ZXJfZHVt cF9yYW5nZShEUFVfREJHX05BTUUsIGNmZy0+bmFtZSwgYy0+aHcuYmxrX29mZiwKLQkJCWMtPmh3 LmJsa19vZmYgKyBjLT5ody5sZW5ndGgsIGMtPmh3Lnhpbl9pZCk7Ci0KLQlyZXR1cm4gYzsKLQot YmxrX2luaXRfZXJyb3I6Ci0Ja3pmcmVlKGMpOwotCi0JcmV0dXJuIEVSUl9QVFIocmMpOwotfQot Ci12b2lkIGRwdV9od193Yl9kZXN0cm95KHN0cnVjdCBkcHVfaHdfd2IgKmh3X3diKQotewotCWlm IChod193YikKLQkJZHB1X2h3X2Jsa19kZXN0cm95KCZod193Yi0+YmFzZSk7Ci0Ja2ZyZWUoaHdf d2IpOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3 X3diLmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfd2IuaApkZWxldGVk IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTQ1ZWJiYy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2dw dS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfd2IuaAorKysgL2Rldi9udWxsCkBAIC0xLDE4NiAr MCwwIEBACi0vKiBDb3B5cmlnaHQgKGMpIDIwMTUtMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRpb24u IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdh cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAot ICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqLwotCi0jaWZuZGVmIF9EUFVfSFdf V0JfSAotI2RlZmluZSBfRFBVX0hXX1dCX0gKLQotI2luY2x1ZGUgImRwdV9od19jYXRhbG9nLmgi Ci0jaW5jbHVkZSAiZHB1X2h3X21kc3MuaCIKLSNpbmNsdWRlICJkcHVfaHdfdG9wLmgiCi0jaW5j bHVkZSAiZHB1X2h3X3V0aWwuaCIKLQotc3RydWN0IGRwdV9od193YjsKLQotc3RydWN0IGRwdV9o d193Yl9jZmcgewotCXN0cnVjdCBkcHVfaHdfZm10X2xheW91dCBkZXN0OwotCWVudW0gZHB1X2lu dGZfbW9kZSBpbnRmX21vZGU7Ci0Jc3RydWN0IHRyYWZmaWNfc2hhcGVyX2NmZyB0c19jZmc7Ci0J c3RydWN0IGRwdV9yZWN0IHJvaTsKLX07Ci0KLS8qKgotICogZW51bSBDRFAgcHJlbG9hZCBhaGVh ZCBhZGRyZXNzIHNpemUKLSAqLwotZW51bSB7Ci0JRFBVX1dCX0NEUF9QUkVMT0FEX0FIRUFEXzMy LAotCURQVV9XQl9DRFBfUFJFTE9BRF9BSEVBRF82NAotfTsKLQotLyoqCi0gKiBzdHJ1Y3QgZHB1 X2h3X3diX2NkcF9jZmcgOiBDRFAgY29uZmlndXJhdGlvbgotICogQGVuYWJsZTogdHJ1ZSB0byBl bmFibGUgQ0RQCi0gKiBAdWJ3Y19tZXRhX2VuYWJsZTogdHJ1ZSB0byBlbmFibGUgdWJ3YyBtZXRh ZGF0YSBwcmVsb2FkCi0gKiBAdGlsZV9hbW9ydGl6ZV9lbmFibGU6IHRydWUgdG8gZW5hYmxlIGFt b3J0aXphdGlvbiBjb250cm9sIGZvciB0aWxlIGZvcm1hdAotICogQHByZWxvYWRfYWhlYWQ6IG51 bWJlciBvZiByZXF1ZXN0IHRvIHByZWxvYWQgYWhlYWQKLSAqCURQVV9XQl9DRFBfUFJFTE9BRF9B SEVBRF8zMiwKLSAqCURQVV9XQl9DRFBfUFJFTE9BRF9BSEVBRF82NAotICovCi1zdHJ1Y3QgZHB1 X2h3X3diX2NkcF9jZmcgewotCWJvb2wgZW5hYmxlOwotCWJvb2wgdWJ3Y19tZXRhX2VuYWJsZTsK LQlib29sIHRpbGVfYW1vcnRpemVfZW5hYmxlOwotCXUzMiBwcmVsb2FkX2FoZWFkOwotfTsKLQot LyoqCi0gKiBzdHJ1Y3QgZHB1X2h3X3diX3Fvc19jZmcgOiBXcml0ZWJhY2sgcGlwZSBRb1MgY29u ZmlndXJhdGlvbgotICogQGRhbmdlcl9sdXQ6IExVVCBmb3IgZ2VuZXJhdGUgZGFuZ2VyIGxldmVs IGJhc2VkIG9uIGZpbGwgbGV2ZWwKLSAqIEBzYWZlX2x1dDogTFVUIGZvciBnZW5lcmF0ZSBzYWZl IGxldmVsIGJhc2VkIG9uIGZpbGwgbGV2ZWwKLSAqIEBjcmVxX2x1dDogTFVUIGZvciBnZW5lcmF0 ZSBjcmVxIGxldmVsIGJhc2VkIG9uIGZpbGwgbGV2ZWwKLSAqIEBkYW5nZXJfc2FmZV9lbjogZW5h YmxlIGRhbmdlciBzYWZlIGdlbmVyYXRpb24KLSAqLwotc3RydWN0IGRwdV9od193Yl9xb3NfY2Zn IHsKLQl1MzIgZGFuZ2VyX2x1dDsKLQl1MzIgc2FmZV9sdXQ7Ci0JdTY0IGNyZXFfbHV0OwotCWJv b2wgZGFuZ2VyX3NhZmVfZW47Ci19OwotCi0vKioKLSAqCi0gKiBzdHJ1Y3QgZHB1X2h3X3diX29w cyA6IEludGVyZmFjZSB0byB0aGUgd2IgSHcgZHJpdmVyIGZ1bmN0aW9ucwotICogIEFzc3VtcHRp b24gaXMgdGhlc2UgZnVuY3Rpb25zIHdpbGwgYmUgY2FsbGVkIGFmdGVyIGNsb2NrcyBhcmUgZW5h YmxlZAotICovCi1zdHJ1Y3QgZHB1X2h3X3diX29wcyB7Ci0Jdm9pZCAoKnNldHVwX2NzY19kYXRh KShzdHJ1Y3QgZHB1X2h3X3diICpjdHgsCi0JCQlzdHJ1Y3QgZHB1X2NzY19jZmcgKmRhdGEpOwot Ci0Jdm9pZCAoKnNldHVwX291dGFkZHJlc3MpKHN0cnVjdCBkcHVfaHdfd2IgKmN0eCwKLQkJc3Ry dWN0IGRwdV9od193Yl9jZmcgKndiKTsKLQotCXZvaWQgKCpzZXR1cF9vdXRmb3JtYXQpKHN0cnVj dCBkcHVfaHdfd2IgKmN0eCwKLQkJc3RydWN0IGRwdV9od193Yl9jZmcgKndiKTsKLQotCXZvaWQg KCpzZXR1cF9yb3RhdG9yKShzdHJ1Y3QgZHB1X2h3X3diICpjdHgsCi0JCXN0cnVjdCBkcHVfaHdf d2JfY2ZnICp3Yik7Ci0KLQl2b2lkICgqc2V0dXBfZGl0aGVyKShzdHJ1Y3QgZHB1X2h3X3diICpj dHgsCi0JCXN0cnVjdCBkcHVfaHdfd2JfY2ZnICp3Yik7Ci0KLQl2b2lkICgqc2V0dXBfY2R3biko c3RydWN0IGRwdV9od193YiAqY3R4LAotCQlzdHJ1Y3QgZHB1X2h3X3diX2NmZyAqd2IpOwotCi0J dm9pZCAoKnNldHVwX3RyYWZmaWNzaGFwZXIpKHN0cnVjdCBkcHVfaHdfd2IgKmN0eCwKLQkJc3Ry dWN0IGRwdV9od193Yl9jZmcgKndiKTsKLQotCXZvaWQgKCpzZXR1cF9yb2kpKHN0cnVjdCBkcHVf aHdfd2IgKmN0eCwKLQkJc3RydWN0IGRwdV9od193Yl9jZmcgKndiKTsKLQotCS8qKgotCSAqIHNl dHVwX2Rhbmdlcl9zYWZlX2x1dCAtIHNldHVwIGRhbmdlciBzYWZlIExVVHMKLQkgKiBAY3R4OiBQ b2ludGVyIHRvIHBpcGUgY29udGV4dAotCSAqIEBjZmc6IFBvaW50ZXIgdG8gcGlwZSBRb1MgY29u ZmlndXJhdGlvbgotCSAqLwotCXZvaWQgKCpzZXR1cF9kYW5nZXJfc2FmZV9sdXQpKHN0cnVjdCBk cHVfaHdfd2IgKmN0eCwKLQkJCXN0cnVjdCBkcHVfaHdfd2JfcW9zX2NmZyAqY2ZnKTsKLQotCS8q KgotCSAqIHNldHVwX2NyZXFfbHV0IC0gc2V0dXAgQ1JFUSBMVVQKLQkgKiBAY3R4OiBQb2ludGVy IHRvIHBpcGUgY29udGV4dAotCSAqIEBjZmc6IFBvaW50ZXIgdG8gcGlwZSBRb1MgY29uZmlndXJh dGlvbgotCSAqLwotCXZvaWQgKCpzZXR1cF9jcmVxX2x1dCkoc3RydWN0IGRwdV9od193YiAqY3R4 LAotCQkJc3RydWN0IGRwdV9od193Yl9xb3NfY2ZnICpjZmcpOwotCi0JLyoqCi0JICogc2V0dXBf cW9zX2N0cmwgLSBzZXR1cCBRb1MgY29udHJvbAotCSAqIEBjdHg6IFBvaW50ZXIgdG8gcGlwZSBj b250ZXh0Ci0JICogQGNmZzogUG9pbnRlciB0byBwaXBlIFFvUyBjb25maWd1cmF0aW9uCi0JICov Ci0Jdm9pZCAoKnNldHVwX3Fvc19jdHJsKShzdHJ1Y3QgZHB1X2h3X3diICpjdHgsCi0JCQlzdHJ1 Y3QgZHB1X2h3X3diX3Fvc19jZmcgKmNmZyk7Ci0KLQkvKioKLQkgKiBzZXR1cF9jZHAgLSBzZXR1 cCBDRFAKLQkgKiBAY3R4OiBQb2ludGVyIHRvIHBpcGUgY29udGV4dAotCSAqIEBjZmc6IFBvaW50 ZXIgdG8gcGlwZSBDRFAgY29uZmlndXJhdGlvbgotCSAqLwotCXZvaWQgKCpzZXR1cF9jZHApKHN0 cnVjdCBkcHVfaHdfd2IgKmN0eCwKLQkJCXN0cnVjdCBkcHVfaHdfd2JfY2RwX2NmZyAqY2ZnKTsK LX07Ci0KLS8qKgotICogc3RydWN0IGRwdV9od193YiA6IFdCIGRyaXZlciBvYmplY3QKLSAqIEBi YXNlOiBoYXJkd2FyZSBibG9jayBiYXNlIHN0cnVjdHVyZQotICogQGh3OiBibG9jayBoYXJkd2Fy ZSBkZXRhaWxzCi0gKiBAY2F0YWxvZzogYmFjayBwb2ludGVyIHRvIGNhdGFsb2cKLSAqIEBtZHA6 IHBvaW50ZXIgdG8gYXNzb2NpYXRlZCBtZHAgcG9ydGlvbiBvZiB0aGUgY2F0YWxvZwotICogQGlk eDogaGFyZHdhcmUgaW5kZXggbnVtYmVyIHdpdGhpbiB0eXBlCi0gKiBAd2JfaHdfY2FwczogaGFy ZHdhcmUgY2FwYWJpbGl0aWVzCi0gKiBAb3BzOiBmdW5jdGlvbiBwb2ludGVycwotICogQGh3X21k cDogTURQIHRvcCBsZXZlbCBoYXJkd2FyZSBibG9jawotICovCi1zdHJ1Y3QgZHB1X2h3X3diIHsK LQlzdHJ1Y3QgZHB1X2h3X2JsayBiYXNlOwotCXN0cnVjdCBkcHVfaHdfYmxrX3JlZ19tYXAgaHc7 Ci0Jc3RydWN0IGRwdV9tZHNzX2NmZyAqY2F0YWxvZzsKLQlzdHJ1Y3QgZHB1X21kcF9jZmcgKm1k cDsKLQotCS8qIHdiIHBhdGggKi8KLQlpbnQgaWR4OwotCWNvbnN0IHN0cnVjdCBkcHVfd2JfY2Zn ICpjYXBzOwotCi0JLyogb3BzICovCi0Jc3RydWN0IGRwdV9od193Yl9vcHMgb3BzOwotCi0Jc3Ry dWN0IGRwdV9od19tZHAgKmh3X21kcDsKLX07Ci0KLS8qKgotICogZHB1X2h3X3diIC0gY29udmVy dCBiYXNlIG9iamVjdCBkcHVfaHdfYmFzZSB0byBjb250YWluZXIKLSAqIEBodzogUG9pbnRlciB0 byBiYXNlIGhhcmR3YXJlIGJsb2NrCi0gKiByZXR1cm46IFBvaW50ZXIgdG8gaGFyZHdhcmUgYmxv Y2sgY29udGFpbmVyCi0gKi8KLXN0YXRpYyBpbmxpbmUgc3RydWN0IGRwdV9od193YiAqdG9fZHB1 X2h3X3diKHN0cnVjdCBkcHVfaHdfYmxrICpodykKLXsKLQlyZXR1cm4gY29udGFpbmVyX29mKGh3 LCBzdHJ1Y3QgZHB1X2h3X3diLCBiYXNlKTsKLX0KLQotLyoqCi0gKiBkcHVfaHdfd2JfaW5pdCgp OiBJbml0aWFsaXplcyBhbmQgcmV0dXJuIHdyaXRlYmFjayBodyBkcml2ZXIgb2JqZWN0LgotICog QGlkeDogIHdiX3BhdGggaW5kZXggZm9yIHdoaWNoIGRyaXZlciBvYmplY3QgaXMgcmVxdWlyZWQK LSAqIEBhZGRyOiBtYXBwZWQgcmVnaXN0ZXIgaW8gYWRkcmVzcyBvZiBNRFAKLSAqIEBtIDogICBw b2ludGVyIHRvIG1kc3MgY2F0YWxvZyBkYXRhCi0gKiBAaHdfbWRwOiBwb2ludGVyIHRvIG1kcCB0 b3AgaHcgZHJpdmVyIG9iamVjdAotICovCi1zdHJ1Y3QgZHB1X2h3X3diICpkcHVfaHdfd2JfaW5p dChlbnVtIGRwdV93YiBpZHgsCi0JCXZvaWQgX19pb21lbSAqYWRkciwKLQkJc3RydWN0IGRwdV9t ZHNzX2NmZyAqbSwKLQkJc3RydWN0IGRwdV9od19tZHAgKmh3X21kcCk7Ci0KLS8qKgotICogZHB1 X2h3X3diX2Rlc3Ryb3koKTogRGVzdHJveSB3cml0ZWJhY2sgaHcgZHJpdmVyIG9iamVjdC4KLSAq IEBod193YjogIFBvaW50ZXIgdG8gd3JpdGViYWNrIGh3IGRyaXZlciBvYmplY3QKLSAqLwotdm9p ZCBkcHVfaHdfd2JfZGVzdHJveShzdHJ1Y3QgZHB1X2h3X3diICpod193Yik7Ci0KLSNlbmRpZiAv Kl9EUFVfSFdfV0JfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2Rw dTEvZHB1X2ttcy5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2ttcy5jCmlu ZGV4IDE2NjI5YWYuLjM2OWVhZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlz cC9kcHUxL2RwdV9rbXMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVf a21zLmMKQEAgLTEyMCwxMSArMTIwLDYgQEAgc3RhdGljIGludCBfZHB1X2Rhbmdlcl9zaWduYWxf c3RhdHVzKHN0cnVjdCBzZXFfZmlsZSAqcywKIAkJCQlzdGF0dXMuc3NwcFtpXSk7CiAJc2VxX3B1 dHMocywgIlxuIik7CiAKLQlmb3IgKGkgPSBXQl8wOyBpIDwgV0JfTUFYOyBpKyspCi0JCXNlcV9w cmludGYocywgIldCJWQgICAgIDogIDB4JXggIFx0IiwgaSAtIFdCXzAsCi0JCQkJc3RhdHVzLndi W2ldKTsKLQlzZXFfcHV0cyhzLCAiXG4iKTsKLQogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfa21zLmggYi9kcml2ZXJzL2dwdS9k cm0vbXNtL2Rpc3AvZHB1MS9kcHVfa21zLmgKaW5kZXggYzQ4ZWQ0ZS4uYTU0NjhlZCAxMDA2NDQK LS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2ttcy5oCisrKyBiL2RyaXZl cnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9rbXMuaApAQCAtMzEsNyArMzEsNiBAQAogI2lu Y2x1ZGUgImRwdV9od19jdGwuaCIKICNpbmNsdWRlICJkcHVfaHdfbG0uaCIKICNpbmNsdWRlICJk cHVfaHdfaW50ZXJydXB0cy5oIgotI2luY2x1ZGUgImRwdV9od193Yi5oIgogI2luY2x1ZGUgImRw dV9od190b3AuaCIKICNpbmNsdWRlICJkcHVfcm0uaCIKICNpbmNsdWRlICJkcHVfcG93ZXJfaGFu ZGxlLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfcGxh bmUuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9wbGFuZS5jCmluZGV4IDM4 NzE0YzkuLjYwOTBhY2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUx L2RwdV9wbGFuZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9wbGFu ZS5jCkBAIC0xMzc0LDcgKzEzNzQsNyBAQCBzdGF0aWMgaW50IGRwdV9wbGFuZV9zc3BwX2F0b21p Y191cGRhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCiAJCQljZHBfY2ZnLT50aWxlX2Ftb3J0 aXplX2VuYWJsZSA9CiAJCQkJCURQVV9GT1JNQVRfSVNfVUJXQyhmbXQpIHx8CiAJCQkJCURQVV9G T1JNQVRfSVNfVElMRShmbXQpOwotCQkJY2RwX2NmZy0+cHJlbG9hZF9haGVhZCA9IERQVV9XQl9D RFBfUFJFTE9BRF9BSEVBRF82NDsKKwkJCWNkcF9jZmctPnByZWxvYWRfYWhlYWQgPSBEUFVfU1NQ UF9DRFBfUFJFTE9BRF9BSEVBRF82NDsKIAogCQkJcGRwdS0+cGlwZV9ody0+b3BzLnNldHVwX2Nk cChwZHB1LT5waXBlX2h3LCBjZHBfY2ZnKTsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL21zbS9kaXNwL2RwdTEvZHB1X3JtLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1 MS9kcHVfcm0uYwppbmRleCAwYWYyOTk2Li5hYjEyZDg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dw dS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfcm0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rp c3AvZHB1MS9kcHVfcm0uYwpAQCAtMTksNyArMTksNiBAQAogI2luY2x1ZGUgImRwdV9od19jZG0u aCIKICNpbmNsdWRlICJkcHVfaHdfcGluZ3BvbmcuaCIKICNpbmNsdWRlICJkcHVfaHdfaW50Zi5o IgotI2luY2x1ZGUgImRwdV9od193Yi5oIgogI2luY2x1ZGUgImRwdV9lbmNvZGVyLmgiCiAKICNk ZWZpbmUgUkVTRVJWRURfQllfT1RIRVIoaCwgcikgXApAQCAtMjQ2LDkgKzI0NSw2IEBAIHN0YXRp YyB2b2lkIF9kcHVfcm1faHdfZGVzdHJveShlbnVtIGRwdV9od19ibGtfdHlwZSB0eXBlLCB2b2lk ICpodykKIAljYXNlIERQVV9IV19CTEtfSU5URjoKIAkJZHB1X2h3X2ludGZfZGVzdHJveShodyk7 CiAJCWJyZWFrOwotCWNhc2UgRFBVX0hXX0JMS19XQjoKLQkJZHB1X2h3X3diX2Rlc3Ryb3koaHcp OwotCQlicmVhazsKIAljYXNlIERQVV9IV19CTEtfU1NQUDoKIAkJLyogU1NQUHMgYXJlIG5vdCBt YW5hZ2VkIGJ5IHRoZSByZXNvdXJjZSBtYW5hZ2VyICovCiAJY2FzZSBEUFVfSFdfQkxLX1RPUDoK QEAgLTMyNSw5ICszMjEsNiBAQCBzdGF0aWMgaW50IF9kcHVfcm1faHdfYmxrX2NyZWF0ZSgKIAlj YXNlIERQVV9IV19CTEtfSU5URjoKIAkJaHcgPSBkcHVfaHdfaW50Zl9pbml0KGlkLCBtbWlvLCBj YXQpOwogCQlicmVhazsKLQljYXNlIERQVV9IV19CTEtfV0I6Ci0JCWh3ID0gZHB1X2h3X3diX2lu aXQoaWQsIG1taW8sIGNhdCwgaHdfbWRwKTsKLQkJYnJlYWs7CiAJY2FzZSBEUFVfSFdfQkxLX1NT UFA6CiAJCS8qIFNTUFBzIGFyZSBub3QgbWFuYWdlZCBieSB0aGUgcmVzb3VyY2UgbWFuYWdlciAq LwogCWNhc2UgRFBVX0hXX0JMS19UT1A6CkBAIC00NDMsMTUgKzQzNiw2IEBAIGludCBkcHVfcm1f aW5pdChzdHJ1Y3QgZHB1X3JtICpybSwKIAkJfQogCX0KIAotCWZvciAoaSA9IDA7IGkgPCBjYXQt PndiX2NvdW50OyBpKyspIHsKLQkJcmMgPSBfZHB1X3JtX2h3X2Jsa19jcmVhdGUocm0sIGNhdCwg bW1pbywgRFBVX0hXX0JMS19XQiwKLQkJCQljYXQtPndiW2ldLmlkLCAmY2F0LT53YltpXSk7Ci0J CWlmIChyYykgewotCQkJRFBVX0VSUk9SKCJmYWlsZWQ6IHdiIGh3IG5vdCBhdmFpbGFibGVcbiIp OwotCQkJZ290byBmYWlsOwotCQl9Ci0JfQotCiAJZm9yIChpID0gMDsgaSA8IGNhdC0+Y3RsX2Nv dW50OyBpKyspIHsKIAkJcmMgPSBfZHB1X3JtX2h3X2Jsa19jcmVhdGUocm0sIGNhdCwgbW1pbywg RFBVX0hXX0JMS19DVEwsCiAJCQkJY2F0LT5jdGxbaV0uaWQsICZjYXQtPmN0bFtpXSk7CkBAIC02 ODMsMTIgKzY2Nyw5IEBAIHN0YXRpYyBpbnQgX2RwdV9ybV9yZXNlcnZlX2NkbSgKIAogCQlpZiAo dHlwZSA9PSBEUFVfSFdfQkxLX0lOVEYgJiYgaWQgIT0gSU5URl9NQVgpCiAJCQltYXRjaCA9IHRl c3RfYml0KGlkLCAmY2Fwcy0+aW50Zl9jb25uZWN0KTsKLQkJZWxzZSBpZiAodHlwZSA9PSBEUFVf SFdfQkxLX1dCICYmIGlkICE9IFdCX01BWCkKLQkJCW1hdGNoID0gdGVzdF9iaXQoaWQsICZjYXBz LT53Yl9jb25uZWN0KTsKIAotCQlEUFVfREVCVUcoInR5cGUgJWQgaWQgJWQsIGNkbSBpbnRmcyAl bHUgd2JzICVsdSBtYXRjaCAlZFxuIiwKLQkJCQl0eXBlLCBpZCwgY2Fwcy0+aW50Zl9jb25uZWN0 LCBjYXBzLT53Yl9jb25uZWN0LAotCQkJCW1hdGNoKTsKKwkJRFBVX0RFQlVHKCJ0eXBlICVkIGlk ICVkLCBjZG0gaW50ZnMgJWx1IG1hdGNoICVkXG4iLAorCQkJCXR5cGUsIGlkLCBjYXBzLT5pbnRm X2Nvbm5lY3QsIG1hdGNoKTsKIAogCQlpZiAoIW1hdGNoKQogCQkJY29udGludWU7CkBAIC03MDYs NyArNjg3LDcgQEAgc3RhdGljIGludCBfZHB1X3JtX3Jlc2VydmVfY2RtKAogCXJldHVybiAwOwog fQogCi1zdGF0aWMgaW50IF9kcHVfcm1fcmVzZXJ2ZV9pbnRmX29yX3diKAorc3RhdGljIGludCBf ZHB1X3JtX3Jlc2VydmVfaW50ZigKIAkJc3RydWN0IGRwdV9ybSAqcm0sCiAJCXN0cnVjdCBkcHVf cm1fcnN2cCAqcnN2cCwKIAkJdWludDMyX3QgaWQsCkBAIC03MzIsMTMgKzcxMywxMiBAQCBzdGF0 aWMgaW50IF9kcHVfcm1fcmVzZXJ2ZV9pbnRmX29yX3diKAogCQlicmVhazsKIAl9CiAKLQkvKiBT aG91bGRuJ3QgaGFwcGVuIHNpbmNlIHdicyAvIGludGZzIGFyZSBmaXhlZCBhdCBwcm9iZSAqLwor CS8qIFNob3VsZG4ndCBoYXBwZW4gc2luY2UgaW50ZnMgYXJlIGZpeGVkIGF0IHByb2JlICovCiAJ aWYgKCFpdGVyLmh3KSB7CiAJCURQVV9FUlJPUigiY291bGRuJ3QgZmluZCB0eXBlICVkIGlkICVk XG4iLCB0eXBlLCBpZCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCS8qIEV4cGVjdGVkIG9u bHkgb25lIGludGYgb3Igd2Igd2lsbCByZXF1ZXN0IGNkbSAqLwogCWlmIChuZWVkc19jZG0pCiAJ CXJldCA9IF9kcHVfcm1fcmVzZXJ2ZV9jZG0ocm0sIHJzdnAsIGlkLCB0eXBlKTsKIApAQCAtNzU3 LDIyICs3MzcsMTIgQEAgc3RhdGljIGludCBfZHB1X3JtX3Jlc2VydmVfaW50Zl9yZWxhdGVkX2h3 KAogCQlpZiAoaHdfcmVzLT5pbnRmc1tpXSA9PSBJTlRGX01PREVfTk9ORSkKIAkJCWNvbnRpbnVl OwogCQlpZCA9IGkgKyBJTlRGXzA7Ci0JCXJldCA9IF9kcHVfcm1fcmVzZXJ2ZV9pbnRmX29yX3di KHJtLCByc3ZwLCBpZCwKKwkJcmV0ID0gX2RwdV9ybV9yZXNlcnZlX2ludGYocm0sIHJzdnAsIGlk LAogCQkJCURQVV9IV19CTEtfSU5URiwgaHdfcmVzLT5uZWVkc19jZG0pOwogCQlpZiAocmV0KQog CQkJcmV0dXJuIHJldDsKIAl9CiAKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShod19yZXMt Pndicyk7IGkrKykgewotCQlpZiAoaHdfcmVzLT53YnNbaV0gPT0gSU5URl9NT0RFX05PTkUpCi0J CQljb250aW51ZTsKLQkJaWQgPSBpICsgV0JfMDsKLQkJcmV0ID0gX2RwdV9ybV9yZXNlcnZlX2lu dGZfb3Jfd2Iocm0sIHJzdnAsIGlkLAotCQkJCURQVV9IV19CTEtfV0IsIGh3X3Jlcy0+bmVlZHNf Y2RtKTsKLQkJaWYgKHJldCkKLQkJCXJldHVybiByZXQ7Ci0JfQotCiAJcmV0dXJuIHJldDsKIH0K IApAQCAtODE1LDcgKzc4NSw3IEBAIHN0YXRpYyBpbnQgX2RwdV9ybV9tYWtlX25leHRfcnN2cCgK IAkJcmV0dXJuIHJldDsKIAl9CiAKLQkvKiBBc3NpZ24gSU5URnMsIFdCcywgYW5kIGJsa3Mgd2hv c2UgdXNhZ2UgaXMgdGllZCB0byB0aGVtOiBDVEwgJiBDRE0gKi8KKwkvKiBBc3NpZ24gSU5URnMg YW5kIGJsa3Mgd2hvc2UgdXNhZ2UgaXMgdGllZCB0byB0aGVtOiBDVEwgJiBDRE0gKi8KIAlyZXQg PSBfZHB1X3JtX3Jlc2VydmVfaW50Zl9yZWxhdGVkX2h3KHJtLCByc3ZwLCAmcmVxcy0+aHdfcmVz KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L21zbS9kaXNwL2RwdTEvZHB1X3diLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9k cHVfd2IuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWI0N2JiMi4uMDAwMDAwMAot LS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfd2IuYworKysgL2Rldi9udWxs CkBAIC0xLDc2NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDE1LTIwMTgsIFRoZSBM aW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3Jh bSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5 Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IHZlcnNpb24gMiBhbmQKLSAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRl ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5Z IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNI QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUK LSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKi8KLQot I2RlZmluZSBwcl9mbXQoZm10KQkiW2RybTolczolZF0gIiBmbXQsIF9fZnVuY19fLCBfX0xJTkVf XwotCi0jaW5jbHVkZSAibXNtX2ttcy5oIgotI2luY2x1ZGUgImRwdV9rbXMuaCIKLSNpbmNsdWRl ICJkcHVfd2IuaCIKLSNpbmNsdWRlICJkcHVfZm9ybWF0cy5oIgotCi0vKiBtYXhpbXVtIGRpc3Bs YXkgbW9kZSByZXNvbHV0aW9uIGlmIG5vdCBhdmFpbGFibGUgZnJvbSBjYXRhbG9nICovCi0jZGVm aW5lIERQVV9XQl9NT0RFX01BWF9XSURUSAk0MDk2Ci0jZGVmaW5lIERQVV9XQl9NT0RFX01BWF9I RUlHSFQJNDA5NgotCi0vKiBTZXJpYWxpemF0aW9uIGxvY2sgZm9yIGRwdV93Yl9saXN0ICovCi1z dGF0aWMgREVGSU5FX01VVEVYKGRwdV93Yl9saXN0X2xvY2spOwotCi0vKiBMaXN0IG9mIGFsbCB3 cml0ZWJhY2sgZGV2aWNlcyBpbnN0YWxsZWQgKi8KLXN0YXRpYyBMSVNUX0hFQUQoZHB1X3diX2xp c3QpOwotCi0vKioKLSAqIGRwdV93Yl9pc19mb3JtYXRfdmFsaWQgLSBjaGVjayBpZiBnaXZlbiBm b3JtYXQvbW9kaWZpZXIgaXMgc3VwcG9ydGVkCi0gKiBAd2JfZGV2OglQb2ludGVyIHRvIHdyaXRl YmFjayBkZXZpY2UKLSAqIEBwaXhlbF9mb3JtYXQ6CUZvdXJjYyBwaXhlbCBmb3JtYXQKLSAqIEBm b3JtYXRfbW9kaWZpZXI6CUZvcm1hdCBtb2RpZmllcgotICogUmV0dXJuczoJCXRydWUgaWYgdmFs aWQ7IGZhbHNlIG90aGVyd2lzZQotICovCi1zdGF0aWMgaW50IGRwdV93Yl9pc19mb3JtYXRfdmFs aWQoc3RydWN0IGRwdV93Yl9kZXZpY2UgKndiX2RldiwKLQkJdTMyIHBpeGVsX2Zvcm1hdCwgdTY0 IGZvcm1hdF9tb2RpZmllcikKLXsKLQljb25zdCBzdHJ1Y3QgZHB1X2Zvcm1hdF9leHRlbmRlZCAq Zm10cyA9IHdiX2Rldi0+d2JfY2ZnLT5mb3JtYXRfbGlzdDsKLQlpbnQgaTsKLQotCWlmICghZm10 cykKLQkJcmV0dXJuIGZhbHNlOwotCi0JZm9yIChpID0gMDsgZm10c1tpXS5mb3VyY2NfZm9ybWF0 OyBpKyspCi0JCWlmICgoZm10c1tpXS5tb2RpZmllciA9PSBmb3JtYXRfbW9kaWZpZXIpICYmCi0J CQkJKGZtdHNbaV0uZm91cmNjX2Zvcm1hdCA9PSBwaXhlbF9mb3JtYXQpKQotCQkJcmV0dXJuIHRy dWU7Ci0KLQlyZXR1cm4gZmFsc2U7Ci19Ci0KLWVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMKLWRw dV93Yl9jb25uZWN0b3JfZGV0ZWN0KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCi0J CWJvb2wgZm9yY2UsCi0JCXZvaWQgKmRpc3BsYXkpCi17Ci0JZW51bSBkcm1fY29ubmVjdG9yX3N0 YXR1cyByYyA9IGNvbm5lY3Rvcl9zdGF0dXNfdW5rbm93bjsKLQotCURQVV9ERUJVRygiXG4iKTsK LQotCWlmIChkaXNwbGF5KQotCQlyYyA9ICgoc3RydWN0IGRwdV93Yl9kZXZpY2UgKilkaXNwbGF5 KS0+ZGV0ZWN0X3N0YXR1czsKLQotCXJldHVybiByYzsKLX0KLQotaW50IGRwdV93Yl9jb25uZWN0 b3JfZ2V0X21vZGVzKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsIHZvaWQgKmRpc3Bs YXkpCi17Ci0Jc3RydWN0IGRwdV93Yl9kZXZpY2UgKndiX2RldjsKLQlpbnQgbnVtX21vZGVzID0g MDsKLQotCWlmICghY29ubmVjdG9yIHx8ICFkaXNwbGF5KQotCQlyZXR1cm4gMDsKLQotCXdiX2Rl diA9IGRpc3BsYXk7Ci0KLQlEUFVfREVCVUcoIlxuIik7Ci0KLQltdXRleF9sb2NrKCZ3Yl9kZXYt PndiX2xvY2spOwotCWlmICh3Yl9kZXYtPmNvdW50X21vZGVzICYmIHdiX2Rldi0+bW9kZXMpIHsK LQkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGU7Ci0JCWludCBpLCByZXQ7Ci0KLQkJZm9y IChpID0gMDsgaSA8IHdiX2Rldi0+Y291bnRfbW9kZXM7IGkrKykgewotCQkJbW9kZSA9IGRybV9t b2RlX2NyZWF0ZShjb25uZWN0b3ItPmRldik7Ci0JCQlpZiAoIW1vZGUpIHsKLQkJCQlEUFVfRVJS T1IoImZhaWxlZCB0byBjcmVhdGUgbW9kZVxuIik7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlyZXQg PSBkcm1fbW9kZV9jb252ZXJ0X3Vtb2RlKG1vZGUsCi0JCQkJCSZ3Yl9kZXYtPm1vZGVzW2ldKTsK LQkJCWlmIChyZXQpIHsKLQkJCQlEUFVfRVJST1IoImZhaWxlZCB0byBjb252ZXJ0IG1vZGUgJWRc biIsIHJldCk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0KLQkJCWRybV9tb2RlX3Byb2JlZF9hZGQoY29u bmVjdG9yLCBtb2RlKTsKLQkJCW51bV9tb2RlcysrOwotCQl9Ci0JfSBlbHNlIHsKLQkJdTMyIG1h eF93aWR0aCA9ICh3Yl9kZXYtPndiX2NmZyAmJiB3Yl9kZXYtPndiX2NmZy0+c2JsaykgPwotCQkJ CXdiX2Rldi0+d2JfY2ZnLT5zYmxrLT5tYXhsaW5ld2lkdGggOgotCQkJCURQVV9XQl9NT0RFX01B WF9XSURUSDsKLQotCQludW1fbW9kZXMgPSBkcm1fYWRkX21vZGVzX25vZWRpZChjb25uZWN0b3Is IG1heF93aWR0aCwKLQkJCQlEUFVfV0JfTU9ERV9NQVhfSEVJR0hUKTsKLQl9Ci0JbXV0ZXhfdW5s b2NrKCZ3Yl9kZXYtPndiX2xvY2spOwotCXJldHVybiBudW1fbW9kZXM7Ci19Ci0KLXN0cnVjdCBk cm1fZnJhbWVidWZmZXIgKgotZHB1X3diX2Nvbm5lY3Rvcl9zdGF0ZV9nZXRfb3V0cHV0X2ZiKHN0 cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpzdGF0ZSkKLXsKLQlpZiAoIXN0YXRlIHx8ICFzdGF0 ZS0+Y29ubmVjdG9yIHx8Ci0JCShzdGF0ZS0+Y29ubmVjdG9yLT5jb25uZWN0b3JfdHlwZSAhPQot CQkJCURSTV9NT0RFX0NPTk5FQ1RPUl9WSVJUVUFMKSkgewotCQlEUFVfRVJST1IoImludmFsaWQg cGFyYW1zXG4iKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JRFBVX0RFQlVHKCJcbiIpOwotCi0J cmV0dXJuIGRwdV9jb25uZWN0b3JfZ2V0X291dF9mYihzdGF0ZSk7Ci19Ci0KLWludCBkcHVfd2Jf Y29ubmVjdG9yX3N0YXRlX2dldF9vdXRwdXRfcm9pKHN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRl ICpzdGF0ZSwKLQkJc3RydWN0IGRwdV9yZWN0ICpyb2kpCi17Ci0JaWYgKCFzdGF0ZSB8fCAhcm9p IHx8ICFzdGF0ZS0+Y29ubmVjdG9yIHx8Ci0JCShzdGF0ZS0+Y29ubmVjdG9yLT5jb25uZWN0b3Jf dHlwZSAhPQotCQkJCURSTV9NT0RFX0NPTk5FQ1RPUl9WSVJUVUFMKSkgewotCQlEUFVfRVJST1Io ImludmFsaWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JRFBVX0RFQlVH KCJcbiIpOwotCi0Jcm9pLT54ID0gZHB1X2Nvbm5lY3Rvcl9nZXRfcHJvcGVydHkoc3RhdGUsIENP Tk5FQ1RPUl9QUk9QX0RTVF9YKTsKLQlyb2ktPnkgPSBkcHVfY29ubmVjdG9yX2dldF9wcm9wZXJ0 eShzdGF0ZSwgQ09OTkVDVE9SX1BST1BfRFNUX1kpOwotCXJvaS0+dyA9IGRwdV9jb25uZWN0b3Jf Z2V0X3Byb3BlcnR5KHN0YXRlLCBDT05ORUNUT1JfUFJPUF9EU1RfVyk7Ci0Jcm9pLT5oID0gZHB1 X2Nvbm5lY3Rvcl9nZXRfcHJvcGVydHkoc3RhdGUsIENPTk5FQ1RPUl9QUk9QX0RTVF9IKTsKLQot CXJldHVybiAwOwotfQotCi0vKioKLSAqIGRwdV93Yl9jb25uZWN0b3Jfc2V0X21vZGVzIC0gc2V0 IHdyaXRlYmFjayBtb2RlcyBhbmQgY29ubmVjdGlvbiBzdGF0dXMKLSAqIEB3Yl9kZXY6CVBvaW50 ZXIgdG8gd3JpdGUgYmFjayBkZXZpY2UKLSAqIEBjb3VudF9tb2RlczoJQ291bnQgb2YgbW9kZXMK LSAqIEBtb2RlczoJUG9pbnRlciB0byB3cml0ZWJhY2sgbW9kZSByZXF1ZXN0ZWQKLSAqIEBjb25u ZWN0ZWQ6CUNvbm5lY3Rpb24gc3RhdHVzIHJlcXVlc3RlZAotICogUmV0dXJuczoJMCBpZiBzdWNj ZXNzOyBlcnJvciBjb2RlIG90aGVyd2lzZQotICovCi1zdGF0aWMKLWludCBkcHVfd2JfY29ubmVj dG9yX3NldF9tb2RlcyhzdHJ1Y3QgZHB1X3diX2RldmljZSAqd2JfZGV2LAotCQl1MzIgY291bnRf bW9kZXMsIHN0cnVjdCBkcm1fbW9kZV9tb2RlaW5mbyBfX3VzZXIgKm1vZGVzLAotCQlib29sIGNv bm5lY3RlZCkKLXsKLQlpbnQgcmV0ID0gMDsKLQotCWlmICghd2JfZGV2IHx8ICF3Yl9kZXYtPmNv bm5lY3RvciB8fAotCQkJKHdiX2Rldi0+Y29ubmVjdG9yLT5jb25uZWN0b3JfdHlwZSAhPQotCQkJ IERSTV9NT0RFX0NPTk5FQ1RPUl9WSVJUVUFMKSkgewotCQlEUFVfRVJST1IoImludmFsaWQgcGFy YW1zXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JRFBVX0RFQlVHKCJcbiIpOwotCi0J aWYgKGNvbm5lY3RlZCkgewotCQlEUFVfREVCVUcoImNvbm5lY3RcbiIpOwotCi0JCWlmICh3Yl9k ZXYtPm1vZGVzKSB7Ci0JCQl3Yl9kZXYtPmNvdW50X21vZGVzID0gMDsKLQotCQkJa2ZyZWUod2Jf ZGV2LT5tb2Rlcyk7Ci0JCQl3Yl9kZXYtPm1vZGVzID0gTlVMTDsKLQkJfQotCi0JCWlmIChjb3Vu dF9tb2RlcyAmJiBtb2RlcykgewotCQkJd2JfZGV2LT5tb2RlcyA9IGtjYWxsb2MoY291bnRfbW9k ZXMsCi0JCQkJCXNpemVvZihzdHJ1Y3QgZHJtX21vZGVfbW9kZWluZm8pLAotCQkJCQlHRlBfS0VS TkVMKTsKLQkJCWlmICghd2JfZGV2LT5tb2RlcykgewotCQkJCURQVV9FUlJPUigiaW52YWxpZCBw YXJhbXNcbiIpOwotCQkJCXJldCA9IC1FTk9NRU07Ci0JCQkJZ290byBlcnJvcjsKLQkJCX0KLQot CQkJaWYgKGNvcHlfZnJvbV91c2VyKHdiX2Rldi0+bW9kZXMsIG1vZGVzLAotCQkJCQljb3VudF9t b2RlcyAqCi0JCQkJCXNpemVvZihzdHJ1Y3QgZHJtX21vZGVfbW9kZWluZm8pKSkgewotCQkJCURQ VV9FUlJPUigiZmFpbGVkIHRvIGNvcHkgbW9kZXNcbiIpOwotCQkJCWtmcmVlKHdiX2Rldi0+bW9k ZXMpOwotCQkJCXdiX2Rldi0+bW9kZXMgPSBOVUxMOwotCQkJCXJldCA9IC1FRkFVTFQ7Ci0JCQkJ Z290byBlcnJvcjsKLQkJCX0KLQotCQkJd2JfZGV2LT5jb3VudF9tb2RlcyA9IGNvdW50X21vZGVz OwotCQl9Ci0KLQkJd2JfZGV2LT5kZXRlY3Rfc3RhdHVzID0gY29ubmVjdG9yX3N0YXR1c19jb25u ZWN0ZWQ7Ci0JfSBlbHNlIHsKLQkJRFBVX0RFQlVHKCJkaXNjb25uZWN0XG4iKTsKLQotCQlpZiAo d2JfZGV2LT5tb2RlcykgewotCQkJd2JfZGV2LT5jb3VudF9tb2RlcyA9IDA7Ci0KLQkJCWtmcmVl KHdiX2Rldi0+bW9kZXMpOwotCQkJd2JfZGV2LT5tb2RlcyA9IE5VTEw7Ci0JCX0KLQotCQl3Yl9k ZXYtPmRldGVjdF9zdGF0dXMgPSBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsKLQl9Ci0K LWVycm9yOgotCXJldHVybiByZXQ7Ci19Ci0KLWludCBkcHVfd2JfY29ubmVjdG9yX3NldF9wcm9w ZXJ0eShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAotCQlzdHJ1Y3QgZHJtX2Nvbm5l Y3Rvcl9zdGF0ZSAqc3RhdGUsCi0JCWludCBwcm9wZXJ0eV9pbmRleCwKLQkJdWludDY0X3QgdmFs dWUsCi0JCXZvaWQgKmRpc3BsYXkpCi17Ci0Jc3RydWN0IGRwdV93Yl9kZXZpY2UgKndiX2RldiA9 IGRpc3BsYXk7Ci0Jc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqb3V0X2ZiOwotCWludCByYyA9IDA7 Ci0KLQlEUFVfREVCVUcoIlxuIik7Ci0KLQlpZiAoc3RhdGUgJiYgKHByb3BlcnR5X2luZGV4ID09 IENPTk5FQ1RPUl9QUk9QX09VVF9GQikpIHsKLQkJY29uc3Qgc3RydWN0IGRwdV9mb3JtYXQgKmRw dV9mb3JtYXQ7Ci0KLQkJb3V0X2ZiID0gZHB1X2Nvbm5lY3Rvcl9nZXRfb3V0X2ZiKHN0YXRlKTsK LQkJaWYgKCFvdXRfZmIpCi0JCQlnb3RvIGRvbmU7Ci0KLQkJZHB1X2Zvcm1hdCA9IGRwdV9nZXRf ZHB1X2Zvcm1hdF9leHQob3V0X2ZiLT5mb3JtYXQtPmZvcm1hdCwKLQkJCQlvdXRfZmItPm1vZGlm aWVyKTsKLQkJaWYgKCFkcHVfZm9ybWF0KSB7Ci0JCQlEUFVfRVJST1IoImZhaWxlZCB0byBnZXQg ZHB1IGZvcm1hdFxuIik7Ci0JCQlyYyA9IC1FSU5WQUw7Ci0JCQlnb3RvIGRvbmU7Ci0JCX0KLQot CQlpZiAoIWRwdV93Yl9pc19mb3JtYXRfdmFsaWQod2JfZGV2LCBvdXRfZmItPmZvcm1hdC0+Zm9y bWF0LAotCQkJCW91dF9mYi0+bW9kaWZpZXIpKSB7Ci0JCQlEUFVfRVJST1IoInVuc3VwcG9ydGVk IHdyaXRlYmFjayBmb3JtYXQgMHgleC8weCVsbHhcbiIsCi0JCQkJCW91dF9mYi0+Zm9ybWF0LT5m b3JtYXQsCi0JCQkJCW91dF9mYi0+bW9kaWZpZXIpOwotCQkJcmMgPSAtRUlOVkFMOwotCQkJZ290 byBkb25lOwotCQl9Ci0JfQotCi1kb25lOgotCXJldHVybiByYzsKLX0KLQotaW50IGRwdV93Yl9n ZXRfaW5mbyhzdHJ1Y3QgbXNtX2Rpc3BsYXlfaW5mbyAqaW5mbywgdm9pZCAqZGlzcGxheSkKLXsK LQlzdHJ1Y3QgZHB1X3diX2RldmljZSAqd2JfZGV2ID0gZGlzcGxheTsKLQotCWlmICghaW5mbyB8 fCAhd2JfZGV2KSB7Ci0JCXByX2VycigiaW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gLUVJ TlZBTDsKLQl9Ci0KLQltZW1zZXQoaW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBtc21fZGlzcGxheV9p bmZvKSk7Ci0JaW5mby0+aW50Zl90eXBlID0gRFJNX01PREVfQ09OTkVDVE9SX1ZJUlRVQUw7Ci0J aW5mby0+bnVtX29mX2hfdGlsZXMgPSAxOwotCWluZm8tPmhfdGlsZV9pbnN0YW5jZVswXSA9IGRw dV93Yl9nZXRfaW5kZXgoZGlzcGxheSk7Ci0JaW5mby0+aXNfY29ubmVjdGVkID0gdHJ1ZTsKLQlp bmZvLT5jYXBhYmlsaXRpZXMgPSBNU01fRElTUExBWV9DQVBfSE9UX1BMVUcgfCBNU01fRElTUExB WV9DQVBfRURJRDsKLQlpbmZvLT5tYXhfd2lkdGggPSAod2JfZGV2LT53Yl9jZmcgJiYgd2JfZGV2 LT53Yl9jZmctPnNibGspID8KLQkJCXdiX2Rldi0+d2JfY2ZnLT5zYmxrLT5tYXhsaW5ld2lkdGgg OgotCQkJRFBVX1dCX01PREVfTUFYX1dJRFRIOwotCWluZm8tPm1heF9oZWlnaHQgPSBEUFVfV0Jf TU9ERV9NQVhfSEVJR0hUOwotCXJldHVybiAwOwotfQotCi1pbnQgZHB1X3diX2dldF9tb2RlX2lu Zm8oY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmRybV9tb2RlLAotCXN0cnVjdCBtc21f bW9kZV9pbmZvICptb2RlX2luZm8sIHUzMiBtYXhfbWl4ZXJfd2lkdGgpCi17Ci0JY29uc3QgdTMy IGR1YWxfbG0gPSAyOwotCWNvbnN0IHUzMiBzaW5nbGVfbG0gPSAxOwotCWNvbnN0IHUzMiBzaW5n bGVfaW50ZiA9IDE7Ci0JY29uc3QgdTMyIG5vX2VuYyA9IDA7Ci0Jc3RydWN0IG1zbV9kaXNwbGF5 X3RvcG9sb2d5ICp0b3BvbG9neTsKLQotCWlmICghZHJtX21vZGUgfHwgIW1vZGVfaW5mbyB8fCAh bWF4X21peGVyX3dpZHRoKSB7Ci0JCXByX2VycigiaW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1 cm4gLUVJTlZBTDsKLQl9Ci0KLQl0b3BvbG9neSA9ICZtb2RlX2luZm8tPnRvcG9sb2d5OwotCXRv cG9sb2d5LT5udW1fbG0gPSAobWF4X21peGVyX3dpZHRoIDw9IGRybV9tb2RlLT5oZGlzcGxheSkg PwotCQkJCQkJCWR1YWxfbG0gOiBzaW5nbGVfbG07Ci0JdG9wb2xvZ3ktPm51bV9lbmMgPSBub19l bmM7Ci0JdG9wb2xvZ3ktPm51bV9pbnRmID0gc2luZ2xlX2ludGY7Ci0KLQlyZXR1cm4gMDsKLX0K LQotaW50IGRwdV93Yl9jb25uZWN0b3JfcG9zdF9pbml0KHN0cnVjdCBkcm1fY29ubmVjdG9yICpj b25uZWN0b3IsCi0JCXZvaWQgKmluZm8sCi0JCXZvaWQgKmRpc3BsYXkpCi17Ci0Jc3RydWN0IGRw dV9jb25uZWN0b3IgKmNfY29ubjsKLQlzdHJ1Y3QgZHB1X3diX2RldmljZSAqd2JfZGV2ID0gZGlz cGxheTsKLQljb25zdCBzdHJ1Y3QgZHB1X2Zvcm1hdF9leHRlbmRlZCAqZm9ybWF0X2xpc3Q7Ci0K LQlpZiAoIWNvbm5lY3RvciB8fCAhaW5mbyB8fCAhZGlzcGxheSB8fCAhd2JfZGV2LT53Yl9jZmcp IHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOwot CX0KLQotCWNfY29ubiA9IHRvX2RwdV9jb25uZWN0b3IoY29ubmVjdG9yKTsKLQl3Yl9kZXYtPmNv bm5lY3RvciA9IGNvbm5lY3RvcjsKLQl3Yl9kZXYtPmRldGVjdF9zdGF0dXMgPSBjb25uZWN0b3Jf c3RhdHVzX2Nvbm5lY3RlZDsKLQlmb3JtYXRfbGlzdCA9IHdiX2Rldi0+d2JfY2ZnLT5mb3JtYXRf bGlzdDsKLQotCS8qCi0JICogQWRkIGV4dHJhIGNvbm5lY3RvciBwcm9wZXJ0aWVzCi0JICovCi0J bXNtX3Byb3BlcnR5X2luc3RhbGxfcmFuZ2UoJmNfY29ubi0+cHJvcGVydHlfaW5mbywgIkZCX0lE IiwKLQkJCTB4MCwgMCwgfjAsIH4wLCBDT05ORUNUT1JfUFJPUF9PVVRfRkIpOwotCW1zbV9wcm9w ZXJ0eV9pbnN0YWxsX3JhbmdlKCZjX2Nvbm4tPnByb3BlcnR5X2luZm8sICJEU1RfWCIsCi0JCQkw eDAsIDAsIFVJTlRfTUFYLCAwLCBDT05ORUNUT1JfUFJPUF9EU1RfWCk7Ci0JbXNtX3Byb3BlcnR5 X2luc3RhbGxfcmFuZ2UoJmNfY29ubi0+cHJvcGVydHlfaW5mbywgIkRTVF9ZIiwKLQkJCTB4MCwg MCwgVUlOVF9NQVgsIDAsIENPTk5FQ1RPUl9QUk9QX0RTVF9ZKTsKLQltc21fcHJvcGVydHlfaW5z dGFsbF9yYW5nZSgmY19jb25uLT5wcm9wZXJ0eV9pbmZvLCAiRFNUX1ciLAotCQkJMHgwLCAwLCBV SU5UX01BWCwgMCwgQ09OTkVDVE9SX1BST1BfRFNUX1cpOwotCW1zbV9wcm9wZXJ0eV9pbnN0YWxs X3JhbmdlKCZjX2Nvbm4tPnByb3BlcnR5X2luZm8sICJEU1RfSCIsCi0JCQkweDAsIDAsIFVJTlRf TUFYLCAwLCBDT05ORUNUT1JfUFJPUF9EU1RfSCk7Ci0KLQkvKgotCSAqIFBvcHVsYXRlIGluZm8g YnVmZmVyCi0JICovCi0JaWYgKGZvcm1hdF9saXN0KSB7Ci0JCWRwdV9rbXNfaW5mb19zdGFydChp bmZvLCAicGl4ZWxfZm9ybWF0cyIpOwotCQl3aGlsZSAoZm9ybWF0X2xpc3QtPmZvdXJjY19mb3Jt YXQpIHsKLQkJCWRwdV9rbXNfaW5mb19hcHBlbmRfZm9ybWF0KGluZm8sCi0JCQkJCWZvcm1hdF9s aXN0LT5mb3VyY2NfZm9ybWF0LAotCQkJCQlmb3JtYXRfbGlzdC0+bW9kaWZpZXIpOwotCQkJKytm b3JtYXRfbGlzdDsKLQkJfQotCQlkcHVfa21zX2luZm9fc3RvcChpbmZvKTsKLQl9Ci0KLQlkcHVf a21zX2luZm9fYWRkX2tleWludChpbmZvLAotCQkJIndiX2ludGZfaW5kZXgiLAotCQkJd2JfZGV2 LT53Yl9pZHggLSBXQl8wKTsKLQotCWRwdV9rbXNfaW5mb19hZGRfa2V5aW50KGluZm8sCi0JCQki bWF4bGluZXdpZHRoIiwKLQkJCXdiX2Rldi0+d2JfY2ZnLT5zYmxrLT5tYXhsaW5ld2lkdGgpOwot Ci0JZHB1X2ttc19pbmZvX3N0YXJ0KGluZm8sICJmZWF0dXJlcyIpOwotCWlmICh3Yl9kZXYtPndi X2NmZyAmJiAod2JfZGV2LT53Yl9jZmctPmZlYXR1cmVzICYgRFBVX1dCX1VCV0MpKQotCQlkcHVf a21zX2luZm9fYXBwZW5kKGluZm8sICJ3Yl91YndjIik7Ci0JZHB1X2ttc19pbmZvX3N0b3AoaW5m byk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZHB1X3diX2dl dF9vdXRwdXRfZmIoc3RydWN0IGRwdV93Yl9kZXZpY2UgKndiX2RldikKLXsKLQlzdHJ1Y3QgZHJt X2ZyYW1lYnVmZmVyICpmYjsKLQotCWlmICghd2JfZGV2IHx8ICF3Yl9kZXYtPmNvbm5lY3Rvcikg ewotCQlEUFVfRVJST1IoImludmFsaWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQot Ci0JRFBVX0RFQlVHKCJcbiIpOwotCi0JbXV0ZXhfbG9jaygmd2JfZGV2LT53Yl9sb2NrKTsKLQlm YiA9IGRwdV93Yl9jb25uZWN0b3Jfc3RhdGVfZ2V0X291dHB1dF9mYih3Yl9kZXYtPmNvbm5lY3Rv ci0+c3RhdGUpOwotCW11dGV4X3VubG9jaygmd2JfZGV2LT53Yl9sb2NrKTsKLQotCXJldHVybiBm YjsKLX0KLQotaW50IGRwdV93Yl9nZXRfb3V0cHV0X3JvaShzdHJ1Y3QgZHB1X3diX2RldmljZSAq d2JfZGV2LCBzdHJ1Y3QgZHB1X3JlY3QgKnJvaSkKLXsKLQlpbnQgcmM7Ci0KLQlpZiAoIXdiX2Rl diB8fCAhd2JfZGV2LT5jb25uZWN0b3IgfHwgIXJvaSkgewotCQlEUFVfRVJST1IoImludmFsaWQg cGFyYW1zXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JRFBVX0RFQlVHKCJcbiIpOwot Ci0JbXV0ZXhfbG9jaygmd2JfZGV2LT53Yl9sb2NrKTsKLQlyYyA9IGRwdV93Yl9jb25uZWN0b3Jf c3RhdGVfZ2V0X291dHB1dF9yb2koCi0JCQl3Yl9kZXYtPmNvbm5lY3Rvci0+c3RhdGUsIHJvaSk7 Ci0JbXV0ZXhfdW5sb2NrKCZ3Yl9kZXYtPndiX2xvY2spOwotCi0JcmV0dXJuIHJjOwotfQotCi11 MzIgZHB1X3diX2dldF9udW1fb2ZfZGlzcGxheXModm9pZCkKLXsKLQl1MzIgY291bnQgPSAwOwot CXN0cnVjdCBkcHVfd2JfZGV2aWNlICp3Yl9kZXY7Ci0KLQlEUFVfREVCVUcoIlxuIik7Ci0KLQlt dXRleF9sb2NrKCZkcHVfd2JfbGlzdF9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHdiX2Rl diwgJmRwdV93Yl9saXN0LCB3Yl9saXN0KSB7Ci0JCWNvdW50Kys7Ci0JfQotCW11dGV4X3VubG9j aygmZHB1X3diX2xpc3RfbG9jayk7Ci0KLQlyZXR1cm4gY291bnQ7Ci19Ci0KLWludCB3Yl9kaXNw bGF5X2dldF9kaXNwbGF5cyh2b2lkICoqZGlzcGxheV9hcnJheSwgdTMyIG1heF9kaXNwbGF5X2Nv dW50KQotewotCXN0cnVjdCBkcHVfd2JfZGV2aWNlICpjdXJyOwotCWludCBpID0gMDsKLQotCURQ VV9ERUJVRygiXG4iKTsKLQotCWlmICghZGlzcGxheV9hcnJheSB8fCAhbWF4X2Rpc3BsYXlfY291 bnQpIHsKLQkJaWYgKCFkaXNwbGF5X2FycmF5KQotCQkJRFBVX0VSUk9SKCJpbnZhbGlkIHBhcmFt XG4iKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JbXV0ZXhfbG9jaygmZHB1X3diX2xpc3RfbG9jayk7 Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShjdXJyLCAmZHB1X3diX2xpc3QsIHdiX2xpc3QpIHsKLQkJ aWYgKGkgPj0gbWF4X2Rpc3BsYXlfY291bnQpCi0JCQlicmVhazsKLQkJZGlzcGxheV9hcnJheVtp KytdID0gY3VycjsKLQl9Ci0JbXV0ZXhfdW5sb2NrKCZkcHVfd2JfbGlzdF9sb2NrKTsKLQotCXJl dHVybiBpOwotfQotCi1pbnQgZHB1X3diX2NvbmZpZyhzdHJ1Y3QgZHJtX2RldmljZSAqZHJtX2Rl diwgdm9pZCAqZGF0YSwKLQkJCQlzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKLXsKLQlzdHJ1 Y3QgZHB1X2RybV93Yl9jZmcgKmNvbmZpZyA9IGRhdGE7Ci0Jc3RydWN0IG1zbV9kcm1fcHJpdmF0 ZSAqcHJpdjsKLQlzdHJ1Y3QgZHB1X3diX2RldmljZSAqd2JfZGV2ID0gTlVMTDsKLQlzdHJ1Y3Qg ZHB1X3diX2RldmljZSAqY3VycjsKLQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOwot CXVpbnQzMl90IGZsYWdzOwotCXVpbnQzMl90IGNvbm5lY3Rvcl9pZDsKLQl1aW50MzJfdCBjb3Vu dF9tb2RlczsKLQl1aW50NjRfdCBtb2RlczsKLQlpbnQgcmM7Ci0KLQlpZiAoIWRybV9kZXYgfHwg IWRhdGEpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJldHVybiAtRUlO VkFMOwotCX0KLQotCURQVV9ERUJVRygiXG4iKTsKLQotCWZsYWdzID0gY29uZmlnLT5mbGFnczsK LQljb25uZWN0b3JfaWQgPSBjb25maWctPmNvbm5lY3Rvcl9pZDsKLQljb3VudF9tb2RlcyA9IGNv bmZpZy0+Y291bnRfbW9kZXM7Ci0JbW9kZXMgPSBjb25maWctPm1vZGVzOwotCi0JcHJpdiA9IGRy bV9kZXYtPmRldl9wcml2YXRlOwotCi0JY29ubmVjdG9yID0gZHJtX2Nvbm5lY3Rvcl9sb29rdXAo ZHJtX2RldiwgTlVMTCwgY29ubmVjdG9yX2lkKTsKLQlpZiAoIWNvbm5lY3RvcikgewotCQlEUFVf RVJST1IoImZhaWxlZCB0byBmaW5kIGNvbm5lY3RvclxuIik7Ci0JCXJjID0gLUVOT0VOVDsKLQkJ Z290byBmYWlsOwotCX0KLQotCW11dGV4X2xvY2soJmRwdV93Yl9saXN0X2xvY2spOwotCWxpc3Rf Zm9yX2VhY2hfZW50cnkoY3VyciwgJmRwdV93Yl9saXN0LCB3Yl9saXN0KSB7Ci0JCWlmIChjdXJy LT5jb25uZWN0b3IgPT0gY29ubmVjdG9yKSB7Ci0JCQl3Yl9kZXYgPSBjdXJyOwotCQkJYnJlYWs7 Ci0JCX0KLQl9Ci0JbXV0ZXhfdW5sb2NrKCZkcHVfd2JfbGlzdF9sb2NrKTsKLQotCWlmICghd2Jf ZGV2KSB7Ci0JCURQVV9FUlJPUigiZmFpbGVkIHRvIGZpbmQgd2IgZGV2aWNlXG4iKTsKLQkJcmMg PSAtRU5PRU5UOwotCQlnb3RvIGZhaWw7Ci0JfQotCi0JbXV0ZXhfbG9jaygmd2JfZGV2LT53Yl9s b2NrKTsKLQotCXJjID0gZHB1X3diX2Nvbm5lY3Rvcl9zZXRfbW9kZXMod2JfZGV2LCBjb3VudF9t b2RlcywKLQkJKHN0cnVjdCBkcm1fbW9kZV9tb2RlaW5mbyBfX3VzZXIgKikgKHVpbnRwdHJfdCkg bW9kZXMsCi0JCShmbGFncyAmIERQVV9EUk1fV0JfQ0ZHX0ZMQUdTX0NPTk5FQ1RFRCkgPyB0cnVl IDogZmFsc2UpOwotCi0JbXV0ZXhfdW5sb2NrKCZ3Yl9kZXYtPndiX2xvY2spOwotCWRybV9oZWxw ZXJfaHBkX2lycV9ldmVudChkcm1fZGV2KTsKLWZhaWw6Ci0JcmV0dXJuIHJjOwotfQotCi0vKioK LSAqIF9kcHVfd2JfZGV2X2luaXQgLSBwZXJmb3JtIGRldmljZSBpbml0aWFsaXphdGlvbgotICog QHdiX2RldjoJUG9pbnRlciB0byB3cml0ZWJhY2sgZGV2aWNlCi0gKi8KLXN0YXRpYyBpbnQgX2Rw dV93Yl9kZXZfaW5pdChzdHJ1Y3QgZHB1X3diX2RldmljZSAqd2JfZGV2KQotewotCWludCByYyA9 IDA7Ci0KLQlpZiAoIXdiX2RldikgewotCQlEUFVfRVJST1IoImludmFsaWQgcGFyYW1zXG4iKTsK LQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JRFBVX0RFQlVHKCJcbiIpOwotCi0JcmV0dXJuIHJj OwotfQotCi0vKioKLSAqIF9kcHVfd2JfZGV2X2RlaW5pdCAtIHBlcmZvcm0gZGV2aWNlIGRlLWlu aXRpYWxpemF0aW9uCi0gKiBAd2JfZGV2OglQb2ludGVyIHRvIHdyaXRlYmFjayBkZXZpY2UKLSAq Lwotc3RhdGljIGludCBfZHB1X3diX2Rldl9kZWluaXQoc3RydWN0IGRwdV93Yl9kZXZpY2UgKndi X2RldikKLXsKLQlpbnQgcmMgPSAwOwotCi0JaWYgKCF3Yl9kZXYpIHsKLQkJRFBVX0VSUk9SKCJp bnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCURQVV9ERUJVRygi XG4iKTsKLQotCXJldHVybiByYzsKLX0KLQotLyoqCi0gKiBkcHVfd2JfYmluZCAtIGJpbmQgd3Jp dGViYWNrIGRldmljZSB3aXRoIGNvbnRyb2xsaW5nIGRldmljZQotICogQGRldjogICAgICAgIFBv aW50ZXIgdG8gYmFzZSBvZiBwbGF0Zm9ybSBkZXZpY2UKLSAqIEBtYXN0ZXI6ICAgICBQb2ludGVy IHRvIGNvbnRhaW5lciBvZiBkcm0gZGV2aWNlCi0gKiBAZGF0YTogICAgICAgUG9pbnRlciB0byBw cml2YXRlIGRhdGEKLSAqIFJldHVybnM6ICAgICBaZXJvIG9uIHN1Y2Nlc3MKLSAqLwotc3RhdGlj IGludCBkcHVfd2JfYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3Rl ciwgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgZHB1X3diX2RldmljZSAqd2JfZGV2OwotCi0JaWYg KCFkZXYgfHwgIW1hc3RlcikgewotCQlEUFVfRVJST1IoImludmFsaWQgcGFyYW1zXG4iKTsKLQkJ cmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0Jd2JfZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEodG9f cGxhdGZvcm1fZGV2aWNlKGRldikpOwotCWlmICghd2JfZGV2KSB7Ci0JCURQVV9FUlJPUigiaW52 YWxpZCB3YiBkZXZpY2VcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlEUFVfREVCVUco IlxuIik7Ci0KLQltdXRleF9sb2NrKCZ3Yl9kZXYtPndiX2xvY2spOwotCXdiX2Rldi0+ZHJtX2Rl diA9IGRldl9nZXRfZHJ2ZGF0YShtYXN0ZXIpOwotCW11dGV4X3VubG9jaygmd2JfZGV2LT53Yl9s b2NrKTsKLQotCXJldHVybiAwOwotfQotCi0vKioKLSAqIGRwdV93Yl91bmJpbmQgLSB1bmJpbmQg d3JpdGViYWNrIGZyb20gY29udHJvbGxpbmcgZGV2aWNlCi0gKiBAZGV2OiAgICAgICAgUG9pbnRl ciB0byBiYXNlIG9mIHBsYXRmb3JtIGRldmljZQotICogQG1hc3RlcjogICAgIFBvaW50ZXIgdG8g Y29udGFpbmVyIG9mIGRybSBkZXZpY2UKLSAqIEBkYXRhOiAgICAgICBQb2ludGVyIHRvIHByaXZh dGUgZGF0YQotICovCi1zdGF0aWMgdm9pZCBkcHVfd2JfdW5iaW5kKHN0cnVjdCBkZXZpY2UgKmRl diwKLQkJc3RydWN0IGRldmljZSAqbWFzdGVyLCB2b2lkICpkYXRhKQotewotCXN0cnVjdCBkcHVf d2JfZGV2aWNlICp3Yl9kZXY7Ci0KLQlpZiAoIWRldikgewotCQlEUFVfRVJST1IoImludmFsaWQg cGFyYW1zXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCXdiX2RldiA9IHBsYXRmb3JtX2dldF9kcnZk YXRhKHRvX3BsYXRmb3JtX2RldmljZShkZXYpKTsKLQlpZiAoIXdiX2RldikgewotCQlEUFVfRVJS T1IoImludmFsaWQgd2IgZGV2aWNlXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCURQVV9ERUJVRygi XG4iKTsKLQotCW11dGV4X2xvY2soJndiX2Rldi0+d2JfbG9jayk7Ci0Jd2JfZGV2LT5kcm1fZGV2 ID0gTlVMTDsKLQltdXRleF91bmxvY2soJndiX2Rldi0+d2JfbG9jayk7Ci19Ci0KLXN0YXRpYyBj b25zdCBzdHJ1Y3QgY29tcG9uZW50X29wcyBkcHVfd2JfY29tcF9vcHMgPSB7Ci0JLmJpbmQgPSBk cHVfd2JfYmluZCwKLQkudW5iaW5kID0gZHB1X3diX3VuYmluZCwKLX07Ci0KLS8qKgotICogZHB1 X3diX2RybV9pbml0IC0gcGVyZm9ybSBEUk0gaW5pdGlhbGl6YXRpb24KLSAqIEB3Yl9kZXY6CVBv aW50ZXIgdG8gd3JpdGViYWNrIGRldmljZQotICogQGVuY29kZXI6CVBvaW50ZXIgdG8gYXNzb2Np YXRlZCBlbmNvZGVyCi0gKi8KLWludCBkcHVfd2JfZHJtX2luaXQoc3RydWN0IGRwdV93Yl9kZXZp Y2UgKndiX2Rldiwgc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQotewotCWludCByYyA9IDA7 Ci0KLQlpZiAoIXdiX2RldiB8fCAhd2JfZGV2LT5kcm1fZGV2IHx8ICFlbmNvZGVyKSB7Ci0JCURQ VV9FUlJPUigiaW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlE UFVfREVCVUcoIlxuIik7Ci0KLQltdXRleF9sb2NrKCZ3Yl9kZXYtPndiX2xvY2spOwotCi0JaWYg KHdiX2Rldi0+ZHJtX2Rldi0+ZGV2X3ByaXZhdGUpIHsKLQkJc3RydWN0IG1zbV9kcm1fcHJpdmF0 ZSAqcHJpdiA9IHdiX2Rldi0+ZHJtX2Rldi0+ZGV2X3ByaXZhdGU7Ci0JCXN0cnVjdCBkcHVfa21z ICpkcHVfa21zID0gdG9fZHB1X2ttcyhwcml2LT5rbXMpOwotCi0JCWlmICh3Yl9kZXYtPmluZGV4 IDwgZHB1X2ttcy0+Y2F0YWxvZy0+d2JfY291bnQpIHsKLQkJCXdiX2Rldi0+d2JfaWR4ID0gZHB1 X2ttcy0+Y2F0YWxvZy0+d2Jbd2JfZGV2LT5pbmRleF0uaWQ7Ci0JCQl3Yl9kZXYtPndiX2NmZyA9 ICZkcHVfa21zLT5jYXRhbG9nLT53Ylt3Yl9kZXYtPmluZGV4XTsKLQkJfQotCX0KLQotCXdiX2Rl di0+ZHJtX2RldiA9IGVuY29kZXItPmRldjsKLQl3Yl9kZXYtPmVuY29kZXIgPSBlbmNvZGVyOwot CW11dGV4X3VubG9jaygmd2JfZGV2LT53Yl9sb2NrKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLWludCBk cHVfd2JfZHJtX2RlaW5pdChzdHJ1Y3QgZHB1X3diX2RldmljZSAqd2JfZGV2KQotewotCWludCBy YyA9IDA7Ci0KLQlpZiAoIXdiX2RldikgewotCQlEUFVfRVJST1IoImludmFsaWQgcGFyYW1zXG4i KTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JRFBVX0RFQlVHKCJcbiIpOwotCi0JcmV0dXJu IHJjOwotfQotCi0vKioKLSAqIGRwdV93Yl9wcm9iZSAtIGxvYWQgd3JpdGViYWNrIG1vZHVsZQot ICogQHBkZXY6CVBvaW50ZXIgdG8gcGxhdGZvcm0gZGV2aWNlCi0gKi8KLXN0YXRpYyBpbnQgZHB1 X3diX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0Jc3RydWN0IGRwdV93 Yl9kZXZpY2UgKndiX2RldjsKLQlpbnQgcmV0OwotCi0Jd2JfZGV2ID0gZGV2bV9remFsbG9jKCZw ZGV2LT5kZXYsIHNpemVvZigqd2JfZGV2KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF3Yl9kZXYpCi0J CXJldHVybiAtRU5PTUVNOwotCi0JRFBVX0RFQlVHKCJcbiIpOwotCi0JcmV0ID0gb2ZfcHJvcGVy dHlfcmVhZF91MzIocGRldi0+ZGV2Lm9mX25vZGUsICJjZWxsLWluZGV4IiwKLQkJCSZ3Yl9kZXYt PmluZGV4KTsKLQlpZiAocmV0KSB7Ci0JCURQVV9ERUJVRygiY2VsbCBpbmRleCBub3Qgc2V0LCBk ZWZhdWx0IHRvIDBcbiIpOwotCQl3Yl9kZXYtPmluZGV4ID0gMDsKLQl9Ci0KLQl3Yl9kZXYtPm5h bWUgPSBvZl9nZXRfcHJvcGVydHkocGRldi0+ZGV2Lm9mX25vZGUsICJsYWJlbCIsIE5VTEwpOwot CWlmICghd2JfZGV2LT5uYW1lKSB7Ci0JCURQVV9ERUJVRygibGFiZWwgbm90IHNldCwgZGVmYXVs dCB0byB1bmtub3duXG4iKTsKLQkJd2JfZGV2LT5uYW1lID0gInVua25vd24iOwotCX0KLQotCXdi X2Rldi0+d2JfaWR4ID0gRFBVX05PTkU7Ci0KLQltdXRleF9pbml0KCZ3Yl9kZXYtPndiX2xvY2sp OwotCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHdiX2Rldik7Ci0KLQltdXRleF9sb2NrKCZk cHVfd2JfbGlzdF9sb2NrKTsKLQlsaXN0X2FkZCgmd2JfZGV2LT53Yl9saXN0LCAmZHB1X3diX2xp c3QpOwotCW11dGV4X3VubG9jaygmZHB1X3diX2xpc3RfbG9jayk7Ci0KLQlpZiAoIV9kcHVfd2Jf ZGV2X2luaXQod2JfZGV2KSkgewotCQlyZXQgPSBjb21wb25lbnRfYWRkKCZwZGV2LT5kZXYsICZk cHVfd2JfY29tcF9vcHMpOwotCQlpZiAocmV0KQotCQkJcHJfZXJyKCJjb21wb25lbnQgYWRkIGZh aWxlZFxuIik7Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLQotLyoqCi0gKiBkcHVfd2JfcmVtb3Zl IC0gdW5sb2FkIHdyaXRlYmFjayBtb2R1bGUKLSAqIEBwZGV2OglQb2ludGVyIHRvIHBsYXRmb3Jt IGRldmljZQotICovCi1zdGF0aWMgaW50IGRwdV93Yl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2Rl dmljZSAqcGRldikKLXsKLQlzdHJ1Y3QgZHB1X3diX2RldmljZSAqd2JfZGV2OwotCXN0cnVjdCBk cHVfd2JfZGV2aWNlICpjdXJyLCAqbmV4dDsKLQotCXdiX2RldiA9IHBsYXRmb3JtX2dldF9kcnZk YXRhKHBkZXYpOwotCWlmICghd2JfZGV2KQotCQlyZXR1cm4gMDsKLQotCURQVV9ERUJVRygiXG4i KTsKLQotCSh2b2lkKV9kcHVfd2JfZGV2X2RlaW5pdCh3Yl9kZXYpOwotCi0JbXV0ZXhfbG9jaygm ZHB1X3diX2xpc3RfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGN1cnIsIG5leHQs ICZkcHVfd2JfbGlzdCwgd2JfbGlzdCkgewotCQlpZiAoY3VyciA9PSB3Yl9kZXYpIHsKLQkJCWxp c3RfZGVsKCZ3Yl9kZXYtPndiX2xpc3QpOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JbXV0ZXhfdW5s b2NrKCZkcHVfd2JfbGlzdF9sb2NrKTsKLQotCWtmcmVlKHdiX2Rldi0+bW9kZXMpOwotCW11dGV4 X2Rlc3Ryb3koJndiX2Rldi0+d2JfbG9jayk7Ci0KLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2 LCBOVUxMKTsKLQlkZXZtX2tmcmVlKCZwZGV2LT5kZXYsIHdiX2Rldik7Ci0KLQlyZXR1cm4gMDsK LX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgZHRfbWF0Y2hbXSA9IHsKLQl7 IC5jb21wYXRpYmxlID0gInFjb20sd2ItZGlzcGxheSJ9LAotCXt9Ci19OwotCi1zdGF0aWMgc3Ry dWN0IHBsYXRmb3JtX2RyaXZlciBkcHVfd2JfZHJpdmVyID0gewotCS5wcm9iZSA9IGRwdV93Yl9w cm9iZSwKLQkucmVtb3ZlID0gZHB1X3diX3JlbW92ZSwKLQkuZHJpdmVyID0gewotCQkubmFtZSA9 ICJkcHVfd2IiLAotCQkub2ZfbWF0Y2hfdGFibGUgPSBkdF9tYXRjaCwKLQl9LAotfTsKLQotc3Rh dGljIGludCBfX2luaXQgZHB1X3diX3JlZ2lzdGVyKHZvaWQpCi17Ci0JcmV0dXJuIHBsYXRmb3Jt X2RyaXZlcl9yZWdpc3RlcigmZHB1X3diX2RyaXZlcik7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhp dCBkcHVfd2JfdW5yZWdpc3Rlcih2b2lkKQotewotCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVy KCZkcHVfd2JfZHJpdmVyKTsKLX0KLQotbW9kdWxlX2luaXQoZHB1X3diX3JlZ2lzdGVyKTsKLW1v ZHVsZV9leGl0KGRwdV93Yl91bnJlZ2lzdGVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9tc20vZGlzcC9kcHUxL2RwdV93Yi5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEv ZHB1X3diLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2MDYzZTAuLjAwMDAwMDAK LS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X3diLmgKKysrIC9kZXYvbnVs bApAQCAtMSwyMzIgKzAsMCBAQAotLyogQ29weXJpZ2h0IChjKSAyMDE1LTIwMTgsIFRoZSBMaW51 eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBp cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0g KiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZl cnNpb24gMiBhbmQKLSAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBp biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdB UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5U QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAq IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKi8KLQotI2lm bmRlZiBfX0RQVV9XQl9IX18KLSNkZWZpbmUgX19EUFVfV0JfSF9fCi0KLSNpbmNsdWRlIDxsaW51 eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLQotI2luY2x1ZGUgIm1zbV9rbXMuaCIKLSNpbmNsdWRlICJk cHVfa21zLmgiCi0jaW5jbHVkZSAiZHB1X2Nvbm5lY3Rvci5oIgotCi0vKioKLSAqIHN0cnVjdCBk cHVfd2JfZGV2aWNlIC0gV3JpdGViYWNrIGRldmljZSBjb250ZXh0Ci0gKiBAZHJtX2RldjoJCVBv aW50ZXIgdG8gY29udHJvbGxpbmcgRFJNIGRldmljZQotICogQGluZGV4OgkJSW5kZXggb2YgaGFy ZHdhcmUgaW5zdGFuY2UgZnJvbSBkZXZpY2UgdHJlZQotICogQHdiX2lkeDoJCVdyaXRlYmFjayBp ZGVudGlmaWVyIG9mIGVudW0gZHB1X3diCi0gKiBAd2JfY2ZnOgkJV3JpdGViYWNrIGNvbmZpZ3Vy YXRpb24gY2F0YWxvZwotICogQG5hbWU6CQlOYW1lIG9mIHdyaXRlYmFjayBkZXZpY2UgZnJvbSBk ZXZpY2UgdHJlZQotICogQGRpc3BsYXlfdHlwZToJRGlzcGxheSB0eXBlIGZyb20gZGV2aWNlIHRy ZWUKLSAqIEB3Yl9saXN0CQlMaXN0IG9mIGFsbCB3cml0ZWJhY2sgZGV2aWNlcwotICogQHdiX2xv Y2sJCVNlcmlhbGl6YXRpb24gbG9jayBmb3Igd3JpdGViYWNrIGNvbnRleHQgc3RydWN0dXJlCi0g KiBAY29ubmVjdG9yOgkJQ29ubmVjdG9yIGFzc29jaWF0ZWQgd2l0aCB3cml0ZWJhY2sgZGV2aWNl Ci0gKiBAZW5jb2RlcjoJCUVuY29kZXIgYXNzb2NpYXRlZCB3aXRoIHdyaXRlYmFjayBkZXZpY2UK LSAqIEBtYXhfbWl4ZXJfd2lkdGg6ICAgIE1heCB3aWR0aCBzdXBwb3J0ZWQgYnkgRFBVIExNIEhX IGJsb2NrCi0gKiBAY291bnRfbW9kZXM6CUxlbmd0aCBvZiB3cml0ZWJhY2sgY29ubmVjdG9yIG1v ZGVzIGFycmF5Ci0gKiBAbW9kZXM6CQlXcml0ZWJhY2sgY29ubmVjdG9yIG1vZGVzIGFycmF5Ci0g Ki8KLXN0cnVjdCBkcHVfd2JfZGV2aWNlIHsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtX2RldjsK LQotCXUzMiBpbmRleDsKLQl1MzIgd2JfaWR4OwotCXN0cnVjdCBkcHVfd2JfY2ZnICp3Yl9jZmc7 Ci0JY29uc3QgY2hhciAqbmFtZTsKLQotCXN0cnVjdCBsaXN0X2hlYWQgd2JfbGlzdDsKLQlzdHJ1 Y3QgbXV0ZXggd2JfbG9jazsKLQotCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7Ci0J c3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOwotCi0JZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1 cyBkZXRlY3Rfc3RhdHVzOwotCXUzMiBtYXhfbWl4ZXJfd2lkdGg7Ci0KLQl1MzIgY291bnRfbW9k ZXM7Ci0Jc3RydWN0IGRybV9tb2RlX21vZGVpbmZvICptb2RlczsKLX07Ci0KLS8qKgotICogZHB1 X3diX2dldF9pbmRleCAtIGdldCBkZXZpY2UgaW5kZXggb2YgdGhlIGdpdmVuIHdyaXRlYmFjayBk ZXZpY2UKLSAqIEB3Yl9kZXY6CVBvaW50ZXIgdG8gd3JpdGViYWNrIGRldmljZQotICogUmV0dXJu czoJSW5kZXggb2YgaGFyZHdhcmUgaW5zdGFuY2UKLSAqLwotc3RhdGljIGlubGluZQotaW50IGRw dV93Yl9nZXRfaW5kZXgoc3RydWN0IGRwdV93Yl9kZXZpY2UgKndiX2RldikKLXsKLQlyZXR1cm4g d2JfZGV2ID8gd2JfZGV2LT5pbmRleCA6IC0xOwotfQotCi0vKioKLSAqIGRwdV93Yl9nZXRfb3V0 cHV0X2ZiIC0gZ2V0IGZyYW1lYnVmZmVyIGluIGN1cnJlbnQgYXRvbWljIHN0YXRlCi0gKiBAd2Jf ZGV2OglQb2ludGVyIHRvIHdyaXRlYmFjayBkZXZpY2UKLSAqIFJldHVybnM6CVBvaW50ZXIgdG8g ZnJhbWVidWZmZXIKLSAqLwotc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZHB1X3diX2dldF9vdXRw dXRfZmIoc3RydWN0IGRwdV93Yl9kZXZpY2UgKndiX2Rldik7Ci0KLS8qKgotICogZHB1X3diX2dl dF9vdXRwdXRfcm9pIC0gZ2V0IHJlZ2lvbi1vZi1pbnRlcmVzdCBpbiBjdXJyZW50IGF0b21pYyBz dGF0ZQotICogQHdiX2RldjoJUG9pbnRlciB0byB3cml0ZWJhY2sgZGV2aWNlCi0gKiBAcm9pOglQ b2ludGVyIHRvIHJlZ2lvbiBvZiBpbnRlcmVzdAotICogUmV0dXJuczoJMCBpZiBzdWNjZXNzOyBl cnJvciBjb2RlIG90aGVyd2lzZQotICovCi1pbnQgZHB1X3diX2dldF9vdXRwdXRfcm9pKHN0cnVj dCBkcHVfd2JfZGV2aWNlICp3Yl9kZXYsIHN0cnVjdCBkcHVfcmVjdCAqcm9pKTsKLQotLyoqCi0g KiBkcHVfd2JfZ2V0X251bV9vZl9kaXNwbGF5cyAtIGdldCB0b3RhbCBudW1iZXIgb2Ygd3JpdGVi YWNrIGRldmljZXMKLSAqIFJldHVybnM6CU51bWJlciBvZiB3cml0ZWJhY2sgZGV2aWNlcwotICov Ci11MzIgZHB1X3diX2dldF9udW1fb2ZfZGlzcGxheXModm9pZCk7Ci0KLS8qKgotICogd2JfZGlz cGxheV9nZXRfZGlzcGxheXMgLSByZXR1cm5zIHBvaW50ZXJzIGZvciBzdXBwb3J0ZWQgZGlzcGxh eSBkZXZpY2VzCi0gKiBAZGlzcGxheV9hcnJheTogUG9pbnRlciB0byBkaXNwbGF5IGFycmF5IHRv IGJlIGZpbGxlZAotICogQG1heF9kaXNwbGF5X2NvdW50OiBTaXplIG9mIGRpc3BsYXlfYXJyYXkK LSAqIEBSZXR1cm5zOiBOdW1iZXIgb2YgZGlzcGxheSBlbnRyaWVzIGZpbGxlZAotICovCi1pbnQg d2JfZGlzcGxheV9nZXRfZGlzcGxheXModm9pZCAqKmRpc3BsYXlfYXJyYXksIHUzMiBtYXhfZGlz cGxheV9jb3VudCk7Ci0KLXZvaWQgZHB1X3diX3NldF9hY3RpdmVfc3RhdGUoc3RydWN0IGRwdV93 Yl9kZXZpY2UgKndiX2RldiwgYm9vbCBpc19hY3RpdmUpOwotYm9vbCBkcHVfd2JfaXNfYWN0aXZl KHN0cnVjdCBkcHVfd2JfZGV2aWNlICp3Yl9kZXYpOwotCi0vKioKLSAqIGRwdV93Yl9kcm1faW5p dCAtIHBlcmZvcm0gRFJNIGluaXRpYWxpemF0aW9uCi0gKiBAd2JfZGV2OglQb2ludGVyIHRvIHdy aXRlYmFjayBkZXZpY2UKLSAqIEBlbmNvZGVyOglQb2ludGVyIHRvIGFzc29jaWF0ZWQgZW5jb2Rl cgotICogUmV0dXJuczoJMCBpZiBzdWNjZXNzOyBlcnJvciBjb2RlIG90aGVyd2lzZQotICovCi1p bnQgZHB1X3diX2RybV9pbml0KHN0cnVjdCBkcHVfd2JfZGV2aWNlICp3Yl9kZXYsIHN0cnVjdCBk cm1fZW5jb2RlciAqZW5jb2Rlcik7Ci0KLS8qKgotICogZHB1X3diX2RybV9kZWluaXQgLSBwZXJm b3JtIERSTSBkZS1pbml0aWFsaXphdGlvbgotICogQHdiX2RldjoJUG9pbnRlciB0byB3cml0ZWJh Y2sgZGV2aWNlCi0gKiBSZXR1cm5zOgkwIGlmIHN1Y2Nlc3M7IGVycm9yIGNvZGUgb3RoZXJ3aXNl Ci0gKi8KLWludCBkcHVfd2JfZHJtX2RlaW5pdChzdHJ1Y3QgZHB1X3diX2RldmljZSAqd2JfZGV2 KTsKLQotLyoqCi0gKiBkcHVfd2JfY29uZmlnIC0gc2V0dXAgY29ubmVjdGlvbiBzdGF0dXMgYW5k IGF2YWlsYWJsZSBkcm0gbW9kZXMgb2YgdGhlCi0gKgkJCWdpdmVuIHdyaXRlYmFjayBjb25uZWN0 b3IKLSAqIEBkcm1fZGV2OglQb2ludGVyIHRvIERSTSBkZXZpY2UKLSAqIEBkYXRhOglQb2ludGVy IHRvIHdyaXRlYmFjayBjb25maWd1cmF0aW9uCi0gKiBAZmlsZV9wcml2OglQb2ludGVyIGZpbGUg cHJpdmF0ZSBkYXRhCi0gKiBSZXR1cm5zOgkwIGlmIHN1Y2Nlc3M7IGVycm9yIGNvZGUgb3RoZXJ3 aXNlCi0gKgotICogVGhpcyBmdW5jdGlvbiB3aWxsIGluaXRpYXRlIGhvdC1wbHVnIGRldGVjdGlv biBldmVudC4KLSAqLwotaW50IGRwdV93Yl9jb25maWcoc3RydWN0IGRybV9kZXZpY2UgKmRybV9k ZXYsIHZvaWQgKmRhdGEsCi0JCQkJc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwotCi0vKioK LSAqIGRwdV93Yl9jb25uZWN0b3JfcG9zdF9pbml0IC0gcGVyZm9ybSB3cml0ZWJhY2sgc3BlY2lm aWMgaW5pdGlhbGl6YXRpb24KLSAqIEBjb25uZWN0b3I6IFBvaW50ZXIgdG8gZHJtIGNvbm5lY3Rv ciBzdHJ1Y3R1cmUKLSAqIEBpbmZvOiBQb2ludGVyIHRvIGNvbm5lY3RvciBpbmZvCi0gKiBAZGlz cGxheTogUG9pbnRlciB0byBwcml2YXRlIGRpc3BsYXkgc3RydWN0dXJlCi0gKiBSZXR1cm5zOiBa ZXJvIG9uIHN1Y2Nlc3MKLSAqLwotaW50IGRwdV93Yl9jb25uZWN0b3JfcG9zdF9pbml0KHN0cnVj dCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCi0JCXZvaWQgKmluZm8sCi0JCXZvaWQgKmRpc3Bs YXkpOwotCi0vKioKLSAqIGRwdV93Yl9jb25uZWN0b3JfZGV0ZWN0IC0gcGVyZm9ybSB3cml0ZWJh Y2sgY29ubmVjdGlvbiBzdGF0dXMgZGV0ZWN0aW9uCi0gKiBAY29ubmVjdG9yOglQb2ludGVyIHRv IGNvbm5lY3RvcgotICogQGZvcmNlOglJbmRpY2F0ZSBmb3JjZSBkZXRlY3Rpb24KLSAqIEBkaXNw bGF5OglQb2ludGVyIHRvIHdyaXRlYmFjayBkZXZpY2UKLSAqIFJldHVybnM6CWNvbm5lY3RvciBz dGF0dXMKLSAqLwotZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cwotZHB1X3diX2Nvbm5lY3Rvcl9k ZXRlY3Qoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKLQkJYm9vbCBmb3JjZSwKLQkJ dm9pZCAqZGlzcGxheSk7Ci0KLS8qKgotICogZHB1X3diX2Nvbm5lY3Rvcl9nZXRfbW9kZXMgLSBn ZXQgZGlzcGxheSBtb2RlcyBvZiBjb25uZWN0b3IKLSAqIEBjb25uZWN0b3I6CVBvaW50ZXIgdG8g Y29ubmVjdG9yCi0gKiBAZGlzcGxheToJUG9pbnRlciB0byB3cml0ZWJhY2sgZGV2aWNlCi0gKiBS ZXR1cm5zOglOdW1iZXIgb2YgbW9kZXMKLSAqCi0gKiBJZiBkaXNwbGF5IG1vZGVzIGFyZSBub3Qg c3BlY2lmaWVkIGluIHdyaXRlYmFjayBjb25maWd1cmF0aW9uIElPQ1RMLCB0aGlzCi0gKiBmdW5j dGlvbiB3aWxsIGluc3RhbGwgZGVmYXVsdCBFRElEIG1vZGVzIHVwIHRvIG1heGltdW0gcmVzb2x1 dGlvbiBzdXBwb3J0LgotICovCi1pbnQgZHB1X3diX2Nvbm5lY3Rvcl9nZXRfbW9kZXMoc3RydWN0 IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvciwgdm9pZCAqZGlzcGxheSk7Ci0KLS8qKgotICogZHB1 X3diX2Nvbm5lY3Rvcl9zZXRfcHJvcGVydHkgLSBzZXQgYXRvbWljIGNvbm5lY3RvciBwcm9wZXJ0 eQotICogQGNvbm5lY3RvcjogUG9pbnRlciB0byBkcm0gY29ubmVjdG9yIHN0cnVjdHVyZQotICog QHN0YXRlOiBQb2ludGVyIHRvIGRybSBjb25uZWN0b3Igc3RhdGUgc3RydWN0dXJlCi0gKiBAcHJv cGVydHlfaW5kZXg6IERSTSBwcm9wZXJ0eSBpbmRleAotICogQHZhbHVlOiBJbmNvbWluZyBwcm9w ZXJ0eSB2YWx1ZQotICogQGRpc3BsYXk6IFBvaW50ZXIgdG8gcHJpdmF0ZSBkaXNwbGF5IHN0cnVj dHVyZQotICogUmV0dXJuczogWmVybyBvbiBzdWNjZXNzCi0gKi8KLWludCBkcHVfd2JfY29ubmVj dG9yX3NldF9wcm9wZXJ0eShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAotCQlzdHJ1 Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqc3RhdGUsCi0JCWludCBwcm9wZXJ0eV9pbmRleCwKLQkJ dWludDY0X3QgdmFsdWUsCi0JCXZvaWQgKmRpc3BsYXkpOwotCi0vKioKLSAqIGRwdV93Yl9nZXRf aW5mbyAtIHJldHJpZXZlIHdyaXRlYmFjayAnZGlzcGxheScgaW5mb3JtYXRpb24KLSAqIEBpbmZv OiBQb2ludGVyIHRvIGRpc3BsYXkgaW5mbyBzdHJ1Y3R1cmUKLSAqIEBkaXNwbGF5OiBQb2ludGVy IHRvIHByaXZhdGUgZGlzcGxheSBzdHJ1Y3R1cmUKLSAqIFJldHVybnM6IFplcm8gb24gc3VjY2Vz cwotICovCi1pbnQgZHB1X3diX2dldF9pbmZvKHN0cnVjdCBtc21fZGlzcGxheV9pbmZvICppbmZv LCB2b2lkICpkaXNwbGF5KTsKLQotLyoqCi0gKiBkcHVfd2JfZ2V0X21vZGVfaW5mbyAtIHJldHJp ZXZlIGluZm9ybWF0aW9uIG9mIHRoZSBtb2RlIHNlbGVjdGVkCi0gKiBAZHJtX21vZGU6IERpc3Bs YXkgbW9kZSBzZXQgZm9yIHRoZSBkaXNwbGF5Ci0gKiBAbW9kZV9pbmZvOiBPdXQgcGFyYW1ldGVy LiBpbmZvcm1hdGlvbiBvZiB0aGUgbW9kZS4KLSAqIEBtYXhfbWl4ZXJfd2lkdGg6IG1heCB3aWR0 aCBzdXBwb3J0ZWQgYnkgSFcgbGF5ZXIgbWl4ZXIKLSAqIFJldHVybnM6IHplcm8gb24gc3VjY2Vz cwotICovCi1pbnQgZHB1X3diX2dldF9tb2RlX2luZm8oY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5 X21vZGUgKmRybV9tb2RlLAotCQlzdHJ1Y3QgbXNtX21vZGVfaW5mbyAqbW9kZV9pbmZvLCB1MzIg bWF4X21peGVyX3dpZHRoKTsKLQotLyoqCi0gKiBkcHVfd2JfY29ubmVjdG9yX2dldF93YiAtIHJl dHJpZXZlIHdyaXRlYmFjayBkZXZpY2Ugb2YgdGhlIGdpdmVuIGNvbm5lY3RvcgotICogQGNvbm5l Y3RvcjogUG9pbnRlciB0byBkcm0gY29ubmVjdG9yCi0gKiBSZXR1cm5zOiBQb2ludGVyIHRvIHdy aXRlYmFjayBkZXZpY2Ugb24gc3VjY2VzczsgTlVMTCBvdGhlcndpc2UKLSAqLwotc3RhdGljIGlu bGluZQotc3RydWN0IGRwdV93Yl9kZXZpY2UgKmRwdV93Yl9jb25uZWN0b3JfZ2V0X3diKHN0cnVj dCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCi17Ci0JaWYgKCFjb25uZWN0b3IgfHwKLQkJKGNv bm5lY3Rvci0+Y29ubmVjdG9yX3R5cGUgIT0gRFJNX01PREVfQ09OTkVDVE9SX1ZJUlRVQUwpKSB7 Ci0JCURQVV9FUlJPUigiaW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0K LQlyZXR1cm4gZHB1X2Nvbm5lY3Rvcl9nZXRfZGlzcGxheShjb25uZWN0b3IpOwotfQotCi0vKioK LSAqIGRwdV93Yl9jb25uZWN0b3Jfc3RhdGVfZ2V0X291dHB1dF9mYiAtIGdldCBmcmFtZWJ1ZmZl ciBvZiBnaXZlbiBzdGF0ZQotICogQHN0YXRlOglQb2ludGVyIHRvIGNvbm5lY3RvciBzdGF0ZQot ICogUmV0dXJuczoJUG9pbnRlciB0byBmcmFtZWJ1ZmZlcgotICovCi1zdHJ1Y3QgZHJtX2ZyYW1l YnVmZmVyICoKLWRwdV93Yl9jb25uZWN0b3Jfc3RhdGVfZ2V0X291dHB1dF9mYihzdHJ1Y3QgZHJt X2Nvbm5lY3Rvcl9zdGF0ZSAqc3RhdGUpOwotCi0vKioKLSAqIGRwdV93Yl9jb25uZWN0b3Jfc3Rh dGVfZ2V0X291dHB1dF9yb2kgLSBnZXQgcm9pIGZyb20gZ2l2ZW4gYXRvbWljIHN0YXRlCi0gKiBA c3RhdGU6CVBvaW50ZXIgdG8gYXRvbWljIHN0YXRlCi0gKiBAcm9pOglQb2ludGVyIHRvIHJlZ2lv biBvZiBpbnRlcmVzdAotICogUmV0dXJuczoJMCBpZiBzdWNjZXNzOyBlcnJvciBjb2RlIG90aGVy d2lzZQotICovCi1pbnQgZHB1X3diX2Nvbm5lY3Rvcl9zdGF0ZV9nZXRfb3V0cHV0X3JvaShzdHJ1 Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqc3RhdGUsCi0JCXN0cnVjdCBkcHVfcmVjdCAqcm9pKTsK LQotI2VuZGlmIC8qIF9fRFBVX1dCX0hfXyAqLwotCi0tIApUaGUgUXVhbGNvbW0gSW5ub3ZhdGlv biBDZW50ZXIsIEluYy4gaXMgYSBtZW1iZXIgb2YgdGhlIENvZGUgQXVyb3JhIEZvcnVtLAphIExp bnV4IEZvdW5kYXRpb24gQ29sbGFib3JhdGl2ZSBQcm9qZWN0CgpfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1k ZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcv bWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK