From mboxrd@z Thu Jan 1 00:00:00 1970 From: Rajesh Yadav Subject: [DPU PATCH v2 2/2] drm/msm: Remove RSC support from DPU driver Date: Wed, 4 Apr 2018 14:36:29 +0530 Message-ID: <1522832789-24678-1-git-send-email-ryadav@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org Cc: robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, seanpaul-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org, Rajesh Yadav , hoegsberg-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org List-Id: linux-arm-msm@vger.kernel.org RGlzcGxheSBjb250cm9sbGVyJ3MgcG93ZXIgcmVzb3VyY2VzIGFuZCBidXMKYmFuZHdpZHRoIHZv dGluZyBpcyBjb250cm9sbGVkIGJ5IGRwdSBkcml2ZXIuClJlbW92ZSBEUFUgUlNDIGRyaXZlciBz dXBwb3J0LgoKU2lnbmVkLW9mZi1ieTogUmFqZXNoIFlhZGF2IDxyeWFkYXZAY29kZWF1cm9yYS5v cmc+Ci0tLQogZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NvcmVfcGVyZi5jICAg IHwgIDEzMCArLQogZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NvcmVfcGVyZi5o ICAgIHwgICAgNiAtCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0Yy5jICAg ICAgICAgfCAgIDE0IC0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmgg ICAgICAgICB8ICAgIDkgKy0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9lbmNv ZGVyLmMgICAgICB8ICAyNDIgKy0tLQogZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1 X2VuY29kZXIuaCAgICAgIHwgICAgNyAtCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9k cHVfZW5jb2Rlcl9waHlzLmggfCAgICAxIC0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUx L2RwdV9od190b3AuYyAgICAgICB8ICAgMjAgKy0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9k cHUxL2RwdV9od190b3AuaCAgICAgICB8ICAgIDMgLQogZHJpdmVycy9ncHUvZHJtL21zbS9kcHVf ZGJnLmMgICAgICAgICAgICAgICAgICAgIHwgICAyNyAtCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rw dV9kYmcuaCAgICAgICAgICAgICAgICAgICAgfCAgIDEwIC0KIGRyaXZlcnMvZ3B1L2RybS9tc20v ZHB1X3Bvd2VyX2hhbmRsZS5jICAgICAgICAgICB8ICAgNzMgKy0KIGRyaXZlcnMvZ3B1L2RybS9t c20vZHB1X3Bvd2VyX2hhbmRsZS5oICAgICAgICAgICB8ICAgIDQgLQogZHJpdmVycy9ncHUvZHJt L21zbS9kcHVfcnNjLmMgICAgICAgICAgICAgICAgICAgIHwgMTM2NyAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwdV9yc2NfaHcuYyAgICAgICAgICAgICAgICAg fCAgODE4IC0tLS0tLS0tLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZHB1X3JzY19wcml2Lmgg ICAgICAgICAgICAgICB8ICAxOTEgLS0tCiBpbmNsdWRlL2xpbnV4L2RwdV9yc2MuaCAgICAgICAg ICAgICAgICAgICAgICAgICAgfCAgMzAyIC0tLS0tCiAxNyBmaWxlcyBjaGFuZ2VkLCA0MiBpbnNl cnRpb25zKCspLCAzMTgyIGRlbGV0aW9ucygtKQogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv Z3B1L2RybS9tc20vZHB1X3JzYy5jCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJt L21zbS9kcHVfcnNjX2h3LmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNt L2RwdV9yc2NfcHJpdi5oCiBkZWxldGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9saW51eC9kcHVfcnNj LmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY29yZV9w ZXJmLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY29yZV9wZXJmLmMKaW5k ZXggMzZhNDc5NS4uOTgxZjc3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNw L2RwdTEvZHB1X2NvcmVfcGVyZi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUx L2RwdV9jb3JlX3BlcmYuYwpAQCAtMTgsNyArMTgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NvcnQu aD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9iaXRtYXAuaD4KLSNp bmNsdWRlIDxsaW51eC9kcHVfcnNjLmg+CiAKICNpbmNsdWRlICJtc21fcHJvcC5oIgogCkBAIC00 MiwyMyArNDEsNiBAQCBlbnVtIGRwdV9wZXJmX21vZGUgewogCURQVV9QRVJGX01PREVfTUFYCiB9 OwogCi0vKioKLSAqIGVudW0gZHB1X3BlcmZfdm90ZV9tb2RlOiBwZXJmIHZvdGUgbW9kZS4KLSAq IEBBUFBTX1JTQ19NT0RFOglJdCBjb21iaW5lcyB0aGUgdm90ZSBmb3IgYWxsIGRpc3BsYXlzIGFu ZCB2b3RlcyBpdAotICogICAgICAgICAgICAgICAgICAgICAgdGhyb3VnaCBBUFBTIHJzYy4gVGhp cyBpcyBkZWZhdWx0IG1vZGUgd2hlbiBkaXNwbGF5Ci0gKiAgICAgICAgICAgICAgICAgICAgICBy c2MgaXMgbm90IGF2YWlsYWJsZS4KLSAqIEBESVNQX1JTQ19NT0RFOglJdCBjb21iaW5lcyB0aGUg dm90ZSBmb3IgYWxsIGRpc3BsYXlzIGFuZCB2b3RlcyBpdAotICogICAgICAgICAgICAgICAgICAg ICAgdGhyb3VnaCBkaXNwbGF5IHJzYy4gVGhpcyBpcyBkZWZhdWx0IGNvbmZpZ3VyYXRpb24KLSAq ICAgICAgICAgICAgICAgICAgICAgIHdoZW4gZGlzcGxheSByc2MgaXMgYXZhaWxhYmxlLgotICog QERJU1BfUlNDX1BSSU1BUllfTU9ERToJVGhlIHByaW1hcnkgZGlzcGxheSB2b3RlcyB0aHJvdWdo IGRpc3BsYXkgcnNjCi0gKiAgICAgICAgICAgICAgICAgICAgICB3aGlsZSBhbGwgb3RoZXIgZGlz cGxheXMgdm90ZXMgdGhyb3VnaCBhcHBzIHJzYy4KLSAqLwotZW51bSBkcHVfcGVyZl92b3RlX21v ZGUgewotCUFQUFNfUlNDX01PREUsCi0JRElTUF9SU0NfTU9ERSwKLQlESVNQX1JTQ19QUklNQVJZ X01PREUsCi19OwotCiBzdGF0aWMgc3RydWN0IGRwdV9rbXMgKl9kcHVfY3J0Y19nZXRfa21zKHN0 cnVjdCBkcm1fY3J0YyAqY3J0YykKIHsKIAlzdHJ1Y3QgbXNtX2RybV9wcml2YXRlICpwcml2OwpA QCAtMjY2LDM4ICsyNDgsMTIgQEAgaW50IGRwdV9jb3JlX3BlcmZfY3J0Y19jaGVjayhzdHJ1Y3Qg ZHJtX2NydGMgKmNydGMsCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBfaXNf Y3J0Y19jbGllbnRfdHlwZV9tYXRjaGVzKHN0cnVjdCBkcm1fY3J0YyAqdG1wX2NydGMsCi0JZW51 bSBkcHVfY3J0Y19jbGllbnRfdHlwZSBjdXJyX2NsaWVudF90eXBlLAotCXN0cnVjdCBkcHVfY29y ZV9wZXJmICpwZXJmKQotewotCWlmICghdG1wX2NydGMpCi0JCXJldHVybiBmYWxzZTsKLQllbHNl IGlmIChwZXJmLT5id192b3RlX21vZGUgPT0gRElTUF9SU0NfUFJJTUFSWV9NT0RFICYmCi0JCQkJ CQkJcGVyZi0+ZHB1X3JzY19hdmFpbGFibGUpCi0JCXJldHVybiBjdXJyX2NsaWVudF90eXBlID09 IGRwdV9jcnRjX2dldF9jbGllbnRfdHlwZSh0bXBfY3J0Yyk7Ci0JZWxzZQotCQlyZXR1cm4gdHJ1 ZTsKLX0KLQotc3RhdGljIGlubGluZSBlbnVtIGRwdV9jcnRjX2NsaWVudF90eXBlIF9nZXRfZHB1 X2NsaWVudF90eXBlKAotCWVudW0gZHB1X2NydGNfY2xpZW50X3R5cGUgY3Vycl9jbGllbnRfdHlw ZSwKLQlzdHJ1Y3QgZHB1X2NvcmVfcGVyZiAqcGVyZikKLXsKLQlpZiAocGVyZi0+Yndfdm90ZV9t b2RlID09IERJU1BfUlNDX1BSSU1BUllfTU9ERSAmJgotCQkJCQkJcGVyZi0+ZHB1X3JzY19hdmFp bGFibGUpCi0JCXJldHVybiBjdXJyX2NsaWVudF90eXBlOwotCWVsc2UgaWYgKHBlcmYtPmJ3X3Zv dGVfbW9kZSAhPSBBUFBTX1JTQ19NT0RFICYmIHBlcmYtPmRwdV9yc2NfYXZhaWxhYmxlKQotCQly ZXR1cm4gUlRfUlNDX0NMSUVOVDsKLQllbHNlCi0JCXJldHVybiBSVF9DTElFTlQ7Ci19Ci0KIHN0 YXRpYyB2b2lkIF9kcHVfY29yZV9wZXJmX2NydGNfdXBkYXRlX2J1cyhzdHJ1Y3QgZHB1X2ttcyAq a21zLAogCQlzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIHUzMiBidXNfaWQpCiB7CiAJdTY0IGJ3X3N1 bV9vZl9pbnRmcyA9IDAsIGJ1c19hYl9xdW90YSwgYnVzX2liX3F1b3RhOwogCXN0cnVjdCBkcHVf Y29yZV9wZXJmX3BhcmFtcyBwZXJmID0geyB7IDAgfSB9OwotCWVudW0gZHB1X2NydGNfY2xpZW50 X3R5cGUgY2xpZW50X3ZvdGUsIGN1cnJfY2xpZW50X3R5cGUKKwllbnVtIGRwdV9jcnRjX2NsaWVu dF90eXBlIGN1cnJfY2xpZW50X3R5cGUKIAkJCQkJPSBkcHVfY3J0Y19nZXRfY2xpZW50X3R5cGUo Y3J0Yyk7CiAJc3RydWN0IGRybV9jcnRjICp0bXBfY3J0YzsKIAlzdHJ1Y3QgZHB1X2NydGNfc3Rh dGUgKmRwdV9jc3RhdGU7CkBAIC0zMDUsOCArMjYxLDggQEAgc3RhdGljIHZvaWQgX2RwdV9jb3Jl X3BlcmZfY3J0Y191cGRhdGVfYnVzKHN0cnVjdCBkcHVfa21zICprbXMsCiAKIAlkcm1fZm9yX2Vh Y2hfY3J0Yyh0bXBfY3J0YywgY3J0Yy0+ZGV2KSB7CiAJCWlmIChfZHB1X2NvcmVfcGVyZl9jcnRj X2lzX3Bvd2VyX29uKHRtcF9jcnRjKSAmJgotCQkgICAgX2lzX2NydGNfY2xpZW50X3R5cGVfbWF0 Y2hlcyh0bXBfY3J0YywgY3Vycl9jbGllbnRfdHlwZSwKLQkJCQkJCQkJJmttcy0+cGVyZikpIHsK KwkJCWN1cnJfY2xpZW50X3R5cGUgPT0KKwkJCQlkcHVfY3J0Y19nZXRfY2xpZW50X3R5cGUodG1w X2NydGMpKSB7CiAJCQlkcHVfY3N0YXRlID0gdG9fZHB1X2NydGNfc3RhdGUodG1wX2NydGMtPnN0 YXRlKTsKIAogCQkJcGVyZi5tYXhfcGVyX3BpcGVfaWJbYnVzX2lkXSA9CkBAIC0zMjksOCArMjg1 LDcgQEAgc3RhdGljIHZvaWQgX2RwdV9jb3JlX3BlcmZfY3J0Y191cGRhdGVfYnVzKHN0cnVjdCBk cHVfa21zICprbXMsCiAJCWJ1c19pYl9xdW90YSA9IGttcy0+cGVyZi5maXhfY29yZV9pYl92b3Rl OwogCX0KIAotCWNsaWVudF92b3RlID0gX2dldF9kcHVfY2xpZW50X3R5cGUoY3Vycl9jbGllbnRf dHlwZSwgJmttcy0+cGVyZik7Ci0Jc3dpdGNoIChjbGllbnRfdm90ZSkgeworCXN3aXRjaCAoY3Vy cl9jbGllbnRfdHlwZSkgewogCWNhc2UgTlJUX0NMSUVOVDoKIAkJZHB1X3Bvd2VyX2RhdGFfYnVz X3NldF9xdW90YSgmcHJpdi0+cGhhbmRsZSwga21zLT5jb3JlX2NsaWVudCwKIAkJCQlEUFVfUE9X RVJfSEFORExFX0RBVEFfQlVTX0NMSUVOVF9OUlQsCkBAIC0zNDcsNDYgKzMwMiwxMCBAQCBzdGF0 aWMgdm9pZCBfZHB1X2NvcmVfcGVyZl9jcnRjX3VwZGF0ZV9idXMoc3RydWN0IGRwdV9rbXMgKmtt cywKIAkJCQlidXNfaWQsIGJ1c19hYl9xdW90YSwgYnVzX2liX3F1b3RhKTsKIAkJYnJlYWs7CiAK LQljYXNlIFJUX1JTQ19DTElFTlQ6Ci0JCWRwdV9jc3RhdGUgPSB0b19kcHVfY3J0Y19zdGF0ZShj cnRjLT5zdGF0ZSk7Ci0JCWRwdV9yc2NfY2xpZW50X3ZvdGUoZHB1X2NzdGF0ZS0+cnNjX2NsaWVu dCwKLQkJCQlidXNfaWQsIGJ1c19hYl9xdW90YSwgYnVzX2liX3F1b3RhKTsKLQkJRFBVX0RFQlVH KCJjbGllbnQ6JXMgYnVzX2lkPSVkIGFiPSVsbHUgaWI9JWxsdVxuIiwgInJ0X3JzYyIsCi0JCQkJ YnVzX2lkLCBidXNfYWJfcXVvdGEsIGJ1c19pYl9xdW90YSk7Ci0JCWJyZWFrOwotCiAJZGVmYXVs dDoKIAkJRFBVX0VSUk9SKCJpbnZhbGlkIGNsaWVudCB0eXBlOiVkXG4iLCBjdXJyX2NsaWVudF90 eXBlKTsKIAkJYnJlYWs7CiAJfQotCi0JaWYgKGttcy0+cGVyZi5id192b3RlX21vZGVfdXBkYXRl ZCkgewotCQlzd2l0Y2ggKGttcy0+cGVyZi5id192b3RlX21vZGUpIHsKLQkJY2FzZSBESVNQX1JT Q19NT0RFOgotCQkJZHB1X3Bvd2VyX2RhdGFfYnVzX3NldF9xdW90YSgmcHJpdi0+cGhhbmRsZSwK LQkJCQlrbXMtPmNvcmVfY2xpZW50LAotCQkJCURQVV9QT1dFUl9IQU5ETEVfREFUQV9CVVNfQ0xJ RU5UX05SVCwKLQkJCQlidXNfaWQsIDAsIDApOwotCQkJZHB1X3Bvd2VyX2RhdGFfYnVzX3NldF9x dW90YSgmcHJpdi0+cGhhbmRsZSwKLQkJCQlrbXMtPmNvcmVfY2xpZW50LAotCQkJCURQVV9QT1dF Ul9IQU5ETEVfREFUQV9CVVNfQ0xJRU5UX1JULAotCQkJCWJ1c19pZCwgMCwgMCk7Ci0JCQlrbXMt PnBlcmYuYndfdm90ZV9tb2RlX3VwZGF0ZWQgPSBmYWxzZTsKLQkJCWJyZWFrOwotCi0JCWNhc2Ug QVBQU19SU0NfTU9ERToKLQkJCWRwdV9jc3RhdGUgPSB0b19kcHVfY3J0Y19zdGF0ZShjcnRjLT5z dGF0ZSk7Ci0JCQlpZiAoZHB1X2NzdGF0ZS0+cnNjX2NsaWVudCkgewotCQkJCWRwdV9yc2NfY2xp ZW50X3ZvdGUoZHB1X2NzdGF0ZS0+cnNjX2NsaWVudCwKLQkJCQkJCQkJYnVzX2lkLCAwLCAwKTsK LQkJCQlrbXMtPnBlcmYuYndfdm90ZV9tb2RlX3VwZGF0ZWQgPSBmYWxzZTsKLQkJCX0KLQkJCWJy ZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKLQkJfQotCX0KIH0KIAogLyoqCkBAIC00MTks OSArMzM4LDggQEAgdm9pZCBkcHVfY29yZV9wZXJmX2NydGNfcmVsZWFzZV9idyhzdHJ1Y3QgZHJt X2NydGMgKmNydGMpCiAJZHB1X2NydGMgPSB0b19kcHVfY3J0YyhjcnRjKTsKIAlkcHVfY3N0YXRl ID0gdG9fZHB1X2NydGNfc3RhdGUoY3J0Yy0+c3RhdGUpOwogCi0JLyogb25seSBkbyB0aGlzIGZv ciBjb21tYW5kIG1vZGUgcnQgY2xpZW50IChub24tcnNjIGNsaWVudCkgKi8KLQlpZiAoKGRwdV9j cnRjX2dldF9pbnRmX21vZGUoY3J0YykgIT0gSU5URl9NT0RFX0NNRCkgJiYKLQkJKGRwdV9jcnRj X2dldF9jbGllbnRfdHlwZShjcnRjKSAhPSBSVF9SU0NfQ0xJRU5UKSkKKwkvKiBvbmx5IGRvIHRo aXMgZm9yIGNvbW1hbmQgbW9kZSBydCBjbGllbnQgKi8KKwlpZiAoZHB1X2NydGNfZ2V0X2ludGZf bW9kZShjcnRjKSAhPSBJTlRGX01PREVfQ01EKQogCQlyZXR1cm47CiAKIAkvKgpAQCAtNDk0LDEw ICs0MTIsNiBAQCB2b2lkIGRwdV9jb3JlX3BlcmZfY3J0Y191cGRhdGUoc3RydWN0IGRybV9jcnRj ICpjcnRjLAogCX0KIAlwcml2ID0ga21zLT5kZXYtPmRldl9wcml2YXRlOwogCi0JLyogd2FrZSB2 b3RlIHVwZGF0ZSBpcyBub3QgcmVxdWlyZWQgd2l0aCBkaXNwbGF5IHJzYyAqLwotCWlmIChrbXMt PnBlcmYuYndfdm90ZV9tb2RlID09IERJU1BfUlNDX01PREUgJiYgc3RvcF9yZXEpCi0JCXJldHVy bjsKLQogCWRwdV9jcnRjID0gdG9fZHB1X2NydGMoY3J0Yyk7CiAJZHB1X2NzdGF0ZSA9IHRvX2Rw dV9jcnRjX3N0YXRlKGNydGMtPnN0YXRlKTsKIApAQCAtNTMzLDI4ICs0NDcsNiBAQCB2b2lkIGRw dV9jb3JlX3BlcmZfY3J0Y191cGRhdGUoc3RydWN0IGRybV9jcnRjICpjcnRjLAogCQkJCQkJbmV3 LT5tYXhfcGVyX3BpcGVfaWJbaV07CiAJCQkJdXBkYXRlX2J1cyB8PSBCSVQoaSk7CiAJCQl9Ci0K LQkJCS8qIGRpc3BsYXkgcnNjIG92ZXJyaWRlIGR1cmluZyBzb2x2ZXIgbW9kZSAqLwotCQkJaWYg KGttcy0+cGVyZi5id192b3RlX21vZGUgPT0gRElTUF9SU0NfTU9ERSAmJgotCQkJCWdldF9kcHVf cnNjX2N1cnJlbnRfc3RhdGUoRFBVX1JTQ19JTkRFWCkgPT0KLQkJCQkJCURQVV9SU0NfQ01EX1NU QVRFKSB7Ci0JCQkJLyogdXBkYXRlIG5ldyBiYW5kd2lkdGggaW4gYWxsIGNhc2VzICovCi0JCQkJ aWYgKHBhcmFtc19jaGFuZ2VkICYmICgobmV3LT5id19jdGxbaV0gIT0KLQkJCQkJCW9sZC0+Yndf Y3RsW2ldKSB8fAotCQkJCSAgICAgIChuZXctPm1heF9wZXJfcGlwZV9pYltpXSAhPQotCQkJCQkJ b2xkLT5tYXhfcGVyX3BpcGVfaWJbaV0pKSkgewotCQkJCQlvbGQtPmJ3X2N0bFtpXSA9IG5ldy0+ YndfY3RsW2ldOwotCQkJCQlvbGQtPm1heF9wZXJfcGlwZV9pYltpXSA9Ci0JCQkJCQkJbmV3LT5t YXhfcGVyX3BpcGVfaWJbaV07Ci0JCQkJCXVwZGF0ZV9idXMgfD0gQklUKGkpOwotCQkJCS8qCi0J CQkJICogcmVkdWNlIGJ3IHZvdGUgaXMgbm90IHJlcXVpcmVkIGluIHNvbHZlcgotCQkJCSAqIG1v ZGUKLQkJCQkgKi8KLQkJCQl9IGVsc2UgaWYgKCFwYXJhbXNfY2hhbmdlZCkgewotCQkJCQl1cGRh dGVfYnVzICY9IH5CSVQoaSk7Ci0JCQkJfQotCQkJfQogCQl9CiAKIAkJaWYgKChwYXJhbXNfY2hh bmdlZCAmJgpAQCAtNzMzLDEwICs2MjUsNiBAQCBpbnQgZHB1X2NvcmVfcGVyZl9kZWJ1Z2ZzX2lu aXQoc3RydWN0IGRwdV9jb3JlX3BlcmYgKnBlcmYsCiAJCQkodTMyICopJmNhdGFsb2ctPnBlcmYu bWluX2RyYW1faWIpOwogCWRlYnVnZnNfY3JlYXRlX2ZpbGUoInBlcmZfbW9kZSIsIDA2MDAsIHBl cmYtPmRlYnVnZnNfcm9vdCwKIAkJCSh1MzIgKilwZXJmLCAmZHB1X2NvcmVfcGVyZl9tb2RlX2Zv cHMpOwotCWRlYnVnZnNfY3JlYXRlX3UzMigiYndfdm90ZV9tb2RlIiwgMDYwMCwgcGVyZi0+ZGVi dWdmc19yb290LAotCQkJJnBlcmYtPmJ3X3ZvdGVfbW9kZSk7Ci0JZGVidWdmc19jcmVhdGVfYm9v bCgiYndfdm90ZV9tb2RlX3VwZGF0ZWQiLCAwNjAwLCBwZXJmLT5kZWJ1Z2ZzX3Jvb3QsCi0JCQkm cGVyZi0+Yndfdm90ZV9tb2RlX3VwZGF0ZWQpOwogCWRlYnVnZnNfY3JlYXRlX3U2NCgiZml4X2Nv cmVfY2xrX3JhdGUiLCAwNjAwLCBwZXJmLT5kZWJ1Z2ZzX3Jvb3QsCiAJCQkmcGVyZi0+Zml4X2Nv cmVfY2xrX3JhdGUpOwogCWRlYnVnZnNfY3JlYXRlX3U2NCgiZml4X2NvcmVfaWJfdm90ZSIsIDA2 MDAsIHBlcmYtPmRlYnVnZnNfcm9vdCwKQEAgLTc5MSwxMiArNjc5LDYgQEAgaW50IGRwdV9jb3Jl X3BlcmZfaW5pdChzdHJ1Y3QgZHB1X2NvcmVfcGVyZiAqcGVyZiwKIAlwZXJmLT5waGFuZGxlID0g cGhhbmRsZTsKIAlwZXJmLT5wY2xpZW50ID0gcGNsaWVudDsKIAlwZXJmLT5jbGtfbmFtZSA9IGNs a19uYW1lOwotCXBlcmYtPmRwdV9yc2NfYXZhaWxhYmxlID0gaXNfZHB1X3JzY19hdmFpbGFibGUo RFBVX1JTQ19JTkRFWCk7Ci0JLyogc2V0IGRlZmF1bHQgbW9kZSAqLwotCWlmIChwZXJmLT5kcHVf cnNjX2F2YWlsYWJsZSkKLQkJcGVyZi0+Yndfdm90ZV9tb2RlID0gRElTUF9SU0NfTU9ERTsKLQll bHNlCi0JCXBlcmYtPmJ3X3ZvdGVfbW9kZSA9IEFQUFNfUlNDX01PREU7CiAKIAlwZXJmLT5jb3Jl X2NsayA9IGRwdV9wb3dlcl9jbGtfZ2V0X2NsayhwaGFuZGxlLCBjbGtfbmFtZSk7CiAJaWYgKCFw ZXJmLT5jb3JlX2NsaykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2Rw dTEvZHB1X2NvcmVfcGVyZi5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2Nv cmVfcGVyZi5oCmluZGV4IDA5YzAxZGEuLjE5NjVmZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jb3JlX3BlcmYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0v bXNtL2Rpc3AvZHB1MS9kcHVfY29yZV9wZXJmLmgKQEAgLTYzLDkgKzYzLDYgQEAgc3RydWN0IGRw dV9jb3JlX3BlcmZfdHVuZSB7CiAgKiBAZml4X2NvcmVfY2xrX3JhdGU6IGZpeGVkIGNvcmUgY2xv Y2sgcmVxdWVzdCBpbiBIeiB1c2VkIGluIG1vZGUgMgogICogQGZpeF9jb3JlX2liX3ZvdGU6IGZp eGVkIGNvcmUgaWIgdm90ZSBpbiBicHMgdXNlZCBpbiBtb2RlIDIKICAqIEBmaXhfY29yZV9hYl92 b3RlOiBmaXhlZCBjb3JlIGFiIHZvdGUgaW4gYnBzIHVzZWQgaW4gbW9kZSAyCi0gKiBAYndfdm90 ZV9tb2RlOiBhcHBzIHJzYyB2cyBkaXNwbGF5IHJzYyBiYW5kd2lkdGggdm90ZSBtb2RlCi0gKiBA ZHB1X3JzY19hdmFpbGFibGU6IGlzIGRpc3BsYXkgcnNjIGF2YWlsYWJsZQotICogQGJ3X3ZvdGVf bW9kZV91cGRhdGVkOiBiYW5kd2lkdGggdm90ZSBtb2RlIHVwZGF0ZQogICovCiBzdHJ1Y3QgZHB1 X2NvcmVfcGVyZiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldjsKQEAgLTgyLDkgKzc5LDYgQEAg c3RydWN0IGRwdV9jb3JlX3BlcmYgewogCXU2NCBmaXhfY29yZV9jbGtfcmF0ZTsKIAl1NjQgZml4 X2NvcmVfaWJfdm90ZTsKIAl1NjQgZml4X2NvcmVfYWJfdm90ZTsKLQl1MzIgYndfdm90ZV9tb2Rl OwotCWJvb2wgZHB1X3JzY19hdmFpbGFibGU7Ci0JYm9vbCBid192b3RlX21vZGVfdXBkYXRlZDsK IH07CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1 X2NydGMuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmMKaW5kZXgg MzMwODkyOS4uMDAxZGRhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2Rw dTEvZHB1X2NydGMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0 Yy5jCkBAIC0yMDQ4LDcgKzIwNDgsNiBAQCBzdGF0aWMgdm9pZCBkcHVfY3J0Y19hdG9taWNfYmVn aW4oc3RydWN0IGRybV9jcnRjICpjcnRjLAogc3RhdGljIHZvaWQgZHB1X2NydGNfYXRvbWljX2Zs dXNoKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKIAkJc3RydWN0IGRybV9jcnRjX3N0YXRlICpvbGRf Y3J0Y19zdGF0ZSkKIHsKLQlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXI7CiAJc3RydWN0IGRw dV9jcnRjICpkcHVfY3J0YzsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2OwogCXN0cnVjdCBkcm1f cGxhbmUgKnBsYW5lOwpAQCAtMjEwOSwxNyArMjEwOCw2IEBAIHN0YXRpYyB2b2lkIGRwdV9jcnRj X2F0b21pY19mbHVzaChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCiAJZHJtX2F0b21pY19jcnRjX2Zv cl9lYWNoX3BsYW5lKHBsYW5lLCBjcnRjKQogCQlkcHVfcGxhbmVfcmVzdG9yZShwbGFuZSk7CiAK LQlpZiAoIWNzdGF0ZS0+cnNjX3VwZGF0ZSkgewotCQlkcm1fZm9yX2VhY2hfZW5jb2RlcihlbmNv ZGVyLCBkZXYpIHsKLQkJCWlmIChlbmNvZGVyLT5jcnRjICE9IGNydGMpCi0JCQkJY29udGludWU7 Ci0KLQkJCWNzdGF0ZS0+cnNjX2NsaWVudCA9Ci0JCQkJZHB1X2VuY29kZXJfZ2V0X3JzY19jbGll bnQoZW5jb2Rlcik7Ci0JCX0KLQkJY3N0YXRlLT5yc2NfdXBkYXRlID0gdHJ1ZTsKLQl9Ci0KIAkv KiB1cGRhdGUgcGVyZm9ybWFuY2Ugc2V0dGluZyBiZWZvcmUgY3J0YyBraWNrb2ZmICovCiAJZHB1 X2NvcmVfcGVyZl9jcnRjX3VwZGF0ZShjcnRjLCAxLCBmYWxzZSk7CiAKQEAgLTI2NjEsOCArMjY0 OSw2IEBAIHN0YXRpYyB2b2lkIGRwdV9jcnRjX2Rpc2FibGUoc3RydWN0IGRybV9jcnRjICpjcnRj KQogCQlpZiAoZW5jb2Rlci0+Y3J0YyAhPSBjcnRjKQogCQkJY29udGludWU7CiAJCWRwdV9lbmNv ZGVyX3JlZ2lzdGVyX2ZyYW1lX2V2ZW50X2NhbGxiYWNrKGVuY29kZXIsIE5VTEwsIE5VTEwpOwot CQljc3RhdGUtPnJzY19jbGllbnQgPSBOVUxMOwotCQljc3RhdGUtPnJzY191cGRhdGUgPSBmYWxz ZTsKIAl9CiAKIAlpZiAoZHB1X2NydGMtPnBvd2VyX2V2ZW50KQpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NydGMuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20v ZGlzcC9kcHUxL2RwdV9jcnRjLmgKaW5kZXggZGYwZGNlMy4uODc1NmIyYiAxMDA2NDQKLS0tIGEv ZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NydGMuaAorKysgYi9kcml2ZXJzL2dw dS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0Yy5oCkBAIC0zOCwxMiArMzgsMTAgQEAKICAqICAg ICAgICAgICAgICB2b3RpbmcgdGhyb3VnaCBhcHBzIHJzYwogICogQE5SVF9DTElFTlQ6CU5vbi1S ZWFsVGltZSBjbGllbnQgbGlrZSBXQiBkaXNwbGF5CiAgKiAgICAgICAgICAgICAgdm90aW5nIHRo cm91Z2ggYXBwcyByc2MKLSAqIEBSVF9SU0NfQ0xJRU5UOglSZWFsdGltZSBkaXNwbGF5IFJTQyB2 b3RpbmcgY2xpZW50CiAgKi8KIGVudW0gZHB1X2NydGNfY2xpZW50X3R5cGUgewogCVJUX0NMSUVO VCwKIAlOUlRfQ0xJRU5ULAotCVJUX1JTQ19DTElFTlQsCiB9OwogCiAvKioKQEAgLTMxMCw3ICsz MDgsNiBAQCBzdHJ1Y3QgZHB1X2NydGNfcmVzcG9vbCB7CiAgKiBAYmFzZTogQmFzZSBkcm0gY3J0 YyBzdGF0ZSBzdHJ1Y3R1cmUKICAqIEBjb25uZWN0b3JzICAgIDogQ3VycmVudGx5IGFzc29jaWF0 ZWQgZHJtIGNvbm5lY3RvcnMKICAqIEBudW1fY29ubmVjdG9yczogTnVtYmVyIG9mIGFzc29jaWF0 ZWQgZHJtIGNvbm5lY3RvcnMKLSAqIEByc2NfY2xpZW50ICAgIDogZHB1IHJzYyBjbGllbnQgd2hl biBtb2RlIGlzIHZhbGlkCiAgKiBAaXNfcHBzcGxpdCAgICA6IFdoZXRoZXIgY3VycmVudCB0b3Bv bG9neSByZXF1aXJlcyBQUFNwbGl0IHNwZWNpYWwgaGFuZGxpbmcKICAqIEBid19jb250cm9sICAg IDogdHJ1ZSBpZiBidy9jbGsgY29udHJvbGxlZCBieSBjb3JlIGJ3L2NsayBwcm9wZXJ0aWVzCiAg KiBAYndfc3BsaXRfdm90ZSA6IHRydWUgaWYgYncgY29udHJvbGxlZCBieSBsbGNjL2RyYW0gYncg cHJvcGVydGllcwpAQCAtMzMyLDggKzMyOSw2IEBAIHN0cnVjdCBkcHVfY3J0Y19zdGF0ZSB7CiAK IAlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yc1tNQVhfQ09OTkVDVE9SU107CiAJaW50 IG51bV9jb25uZWN0b3JzOwotCXN0cnVjdCBkcHVfcnNjX2NsaWVudCAqcnNjX2NsaWVudDsKLQli b29sIHJzY191cGRhdGU7CiAJYm9vbCBid19jb250cm9sOwogCWJvb2wgYndfc3BsaXRfdm90ZTsK IApAQCAtNDcxLDcgKzQ2Niw3IEBAIGludCBkcHVfY3J0Y19yZWdpc3Rlcl9jdXN0b21fZXZlbnQo c3RydWN0IGRwdV9rbXMgKmttcywKIGVudW0gZHB1X2ludGZfbW9kZSBkcHVfY3J0Y19nZXRfaW50 Zl9tb2RlKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7CiAKIC8qKgotICogZHB1X2NydGNfZ2V0X2Ns aWVudF90eXBlIC0gY2hlY2sgdGhlIGNydGMgdHlwZS0gcnQsIG5ydCwgcnNjLCBldGMuCisgKiBk cHVfY3J0Y19nZXRfY2xpZW50X3R5cGUgLSBjaGVjayB0aGUgY3J0YyB0eXBlLSBydCwgbnJ0IGV0 Yy4KICAqIEBjcnRjOiBQb2ludGVyIHRvIGNydGMKICAqLwogc3RhdGljIGlubGluZSBlbnVtIGRw dV9jcnRjX2NsaWVudF90eXBlIGRwdV9jcnRjX2dldF9jbGllbnRfdHlwZSgKQEAgLTQ4NCw3ICs0 NzksNyBAQCBzdGF0aWMgaW5saW5lIGVudW0gZHB1X2NydGNfY2xpZW50X3R5cGUgZHB1X2NydGNf Z2V0X2NsaWVudF90eXBlKAogCQlyZXR1cm4gTlJUX0NMSUVOVDsKIAogCXJldHVybiBkcHVfY3J0 Y19nZXRfaW50Zl9tb2RlKGNydGMpID09IElOVEZfTU9ERV9XQl9MSU5FID8gTlJUX0NMSUVOVCA6 Ci0JCQkoY3N0YXRlLT5yc2NfY2xpZW50ID8gUlRfUlNDX0NMSUVOVCA6IFJUX0NMSUVOVCk7CisJ CQlSVF9DTElFTlQ7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9k aXNwL2RwdTEvZHB1X2VuY29kZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2Rw dV9lbmNvZGVyLmMKaW5kZXggN2Y0MTgyMi4uNGY0NmEwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9n cHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0v bXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlci5jCkBAIC0yMCw3ICsyMCw2IEBACiAjaW5jbHVkZSA8 bGludXgva3RocmVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KICNpbmNsdWRlIDxs aW51eC9zZXFfZmlsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2RwdV9yc2MuaD4KIAogI2luY2x1ZGUg Im1zbV9kcnYuaCIKICNpbmNsdWRlICJkcHVfa21zLmgiCkBAIC03MiwxNyArNzEsMTMgQEAKIAog I2RlZmluZSBJRExFX1NIT1JUX1RJTUVPVVQJMQogCi0vKiBNYXhpbXVtIG51bWJlciBvZiBWU1lO QyB3YWl0IGF0dGVtcHRzIGZvciBSU0Mgc3RhdGUgdHJhbnNpdGlvbiAqLwotI2RlZmluZSBNQVhf UlNDX1dBSVQJNQotCiAvKioKICAqIGVudW0gZHB1X2VuY19yY19ldmVudHMgLSBldmVudHMgZm9y IHJlc291cmNlIGNvbnRyb2wgc3RhdGUgbWFjaGluZQogICogQERQVV9FTkNfUkNfRVZFTlRfS0lD S09GRjoKICAqCVRoaXMgZXZlbnQgaGFwcGVucyBhdCBOT1JNQUwgcHJpb3JpdHkuCiAgKglFdmVu dCB0aGF0IHNpZ25hbHMgdGhlIHN0YXJ0IG9mIHRoZSB0cmFuc2Zlci4gV2hlbiB0aGlzIGV2ZW50 IGlzCi0gKglyZWNlaXZlZCwgZW5hYmxlIE1EUC9EU0kgY29yZSBjbG9ja3MgYW5kIHJlcXVlc3Qg UlNDIHdpdGggQ01EIHN0YXRlLgotICoJUmVnYXJkbGVzcyBvZiB0aGUgcHJldmlvdXMgc3RhdGUs IHRoZSByZXNvdXJjZSBzaG91bGQgYmUgaW4gT04gc3RhdGUKLSAqCWF0IHRoZSBlbmQgb2YgdGhp cyBldmVudC4KKyAqCXJlY2VpdmVkLCBlbmFibGUgTURQL0RTSSBjb3JlIGNsb2Nrcy4gUmVnYXJk bGVzcyBvZiB0aGUgcHJldmlvdXMKKyAqCXN0YXRlLCB0aGUgcmVzb3VyY2Ugc2hvdWxkIGJlIGlu IE9OIHN0YXRlIGF0IHRoZSBlbmQgb2YgdGhpcyBldmVudC4KICAqIEBEUFVfRU5DX1JDX0VWRU5U X0ZSQU1FX0RPTkU6CiAgKglUaGlzIGV2ZW50IGhhcHBlbnMgYXQgSU5URVJSVVBUIGxldmVsLgog ICoJRXZlbnQgc2lnbmFscyB0aGUgZW5kIG9mIHRoZSBkYXRhIHRyYW5zZmVyIGFmdGVyIHRoZSBQ UCBGUkFNRV9ET05FCkBAIC05MCw5ICs4NSw5IEBACiAgKglJRExFX1BDIHN0YXRlIGFmdGVyIElE TEVfVElNRU9VVCB0aW1lLgogICogQERQVV9FTkNfUkNfRVZFTlRfUFJFX1NUT1A6CiAgKglUaGlz IGV2ZW50IGhhcHBlbnMgYXQgTk9STUFMIHByaW9yaXR5LgotICoJVGhpcyBldmVudCwgd2hlbiBy ZWNlaXZlZCBkdXJpbmcgdGhlIE9OIHN0YXRlLCBzZXQgUlNDIHRvIElETEUsIGFuZAotICoJYW5k IGxlYXZlIHRoZSBSQyBTVEFURSBpbiB0aGUgUFJFX09GRiBzdGF0ZS4KLSAqCUl0IHNob3VsZCBi ZSBmb2xsb3dlZCBieSB0aGUgU1RPUCBldmVudCBhcyBwYXJ0IG9mIGVuY29kZXIgZGlzYWJsZS4K KyAqCVRoaXMgZXZlbnQsIHdoZW4gcmVjZWl2ZWQgZHVyaW5nIHRoZSBPTiBzdGF0ZSwgbGVhdmUg dGhlIFJDIFNUQVRFCisgKglpbiB0aGUgUFJFX09GRiBzdGF0ZS4gSXQgc2hvdWxkIGJlIGZvbGxv d2VkIGJ5IHRoZSBTVE9QIGV2ZW50IGFzCisgKglwYXJ0IG9mIGVuY29kZXIgZGlzYWJsZS4KICAq CUlmIHJlY2VpdmVkIGR1cmluZyBJRExFIG9yIE9GRiBzdGF0ZXMsIGl0IHdpbGwgZG8gbm90aGlu Zy4KICAqIEBEUFVfRU5DX1JDX0VWRU5UX1NUT1A6CiAgKglUaGlzIGV2ZW50IGhhcHBlbnMgYXQg Tk9STUFMIHByaW9yaXR5LgpAQCAtMTA5LDEzICsxMDQsMTIgQEAKICAqIEBEUFVfRU5DX1JDX0VW RU5UX1BPU1RfTU9ERVNFVDoKICAqCVRoaXMgZXZlbnQgaGFwcGVucyBhdCBOT1JNQUwgcHJpb3Jp dHkgZnJvbSBhIHdvcmsgaXRlbS4KICAqCUV2ZW50IHNpZ25hbHMgdGhhdCBzZWFtbGVzcyBtb2Rl IHN3aXRjaCBpcyBjb21wbGV0ZSBhbmQgcmVzb3VyY2VzIGFyZQotICoJYWNxdWlyZWQuIENsaWVu dHMgd2FudHMgdG8gdHVybiBvbiB0aGUgaXJxIGFnYWluIGFuZCB1cGRhdGUgdGhlIHJzYwotICoJ d2l0aCBuZXcgdnRvdGFsLgorICoJYWNxdWlyZWQuIENsaWVudHMgd2FudHMgdG8gdHVybiBvbiB0 aGUgaXJxIGFnYWluLgogICogQERQVV9FTkNfUkNfRVZFTlRfRU5URVJfSURMRToKICAqCVRoaXMg ZXZlbnQgaGFwcGVucyBhdCBOT1JNQUwgcHJpb3JpdHkgZnJvbSBhIHdvcmsgaXRlbS4KICAqCUV2 ZW50IHNpZ25hbHMgdGhhdCB0aGVyZSB3ZXJlIG5vIGZyYW1lIHVwZGF0ZXMgZm9yIElETEVfVElN RU9VVCB0aW1lLgotICoJVGhpcyB3b3VsZCBkaXNhYmxlIE1EUC9EU0kgY29yZSBjbG9ja3MgYW5k IHJlcXVlc3QgUlNDIHdpdGggSURMRSBzdGF0ZQotICoJYW5kIGNoYW5nZSB0aGUgcmVzb3VyY2Ug c3RhdGUgdG8gSURMRS4KKyAqCVRoaXMgd291bGQgZGlzYWJsZSBNRFAvRFNJIGNvcmUgY2xvY2tz IGFuZCBjaGFuZ2UgdGhlIHJlc291cmNlIHN0YXRlCisgKgl0byBJRExFLgogICovCiBlbnVtIGRw dV9lbmNfcmNfZXZlbnRzIHsKIAlEUFVfRU5DX1JDX0VWRU5UX0tJQ0tPRkYgPSAxLApAQCAtMTc5 LDggKzE3Myw2IEBAIGVudW0gZHB1X2VuY19yY19zdGF0ZXMgewogICogQGZyYW1lX2RvbmVfdGlt ZW91dDoJCWZyYW1lIGRvbmUgdGltZW91dCBpbiBIegogICogQGZyYW1lX2RvbmVfdGltZXI6CQl3 YXRjaGRvZyB0aW1lciBmb3IgZnJhbWUgZG9uZSBldmVudAogICogQHZzeW5jX2V2ZW50X3RpbWVy OgkJdnN5bmMgdGltZXIKLSAqIEByc2NfY2xpZW50OgkJCXJzYyBjbGllbnQgcG9pbnRlcgotICog QHJzY19zdGF0ZV9pbml0OgkJYm9vbGVhbiB0byBpbmRpY2F0ZSByc2MgY29uZmlnIGluaXQKICAq IEBkaXNwX2luZm86CQkJbG9jYWwgY29weSBvZiBtc21fZGlzcGxheV9pbmZvIHN0cnVjdAogICog QG1vZGVfaW5mbzoJCQlsb2NhbCBjb3B5IG9mIG1zbV9tb2RlX2luZm8gc3RydWN0CiAgKiBAbWlz cl9lbmFibGU6CQltaXNyIGVuYWJsZS9kaXNhYmxlIHN0YXR1cwpAQCAtMTk0LDcgKzE4Niw2IEBA IGVudW0gZHB1X2VuY19yY19zdGF0ZXMgewogICogQHZzeW5jX2V2ZW50X3dvcms6CQl3b3JrZXIg dG8gaGFuZGxlIHZzeW5jIGV2ZW50IGZvciBhdXRvcmVmcmVzaAogICogQHRvcG9sb2d5OiAgICAg ICAgICAgICAgICAgICB0b3BvbG9neSBvZiB0aGUgZGlzcGxheQogICogQG1vZGVfc2V0X2NvbXBs ZXRlOiAgICAgICAgICBmbGFnIHRvIGluZGljYXRlIG1vZGVzZXQgY29tcGxldGlvbgotICogQHJz Y19jb25maWc6CQkJcnNjIGNvbmZpZ3VyYXRpb24gZm9yIGRpc3BsYXkgdnRvdGFsLCBmcHMsIGV0 Yy4KICAqIEBpZGxlX3RpbWVvdXQ6CQlpZGxlIHRpbWVvdXQgZHVyYXRpb24gaW4gbWlsbGlzZWNv bmRzCiAgKi8KIHN0cnVjdCBkcHVfZW5jb2Rlcl92aXJ0IHsKQEAgLTIyNSw4ICsyMTYsNiBAQCBz dHJ1Y3QgZHB1X2VuY29kZXJfdmlydCB7CiAJc3RydWN0IHRpbWVyX2xpc3QgZnJhbWVfZG9uZV90 aW1lcjsKIAlzdHJ1Y3QgdGltZXJfbGlzdCB2c3luY19ldmVudF90aW1lcjsKIAotCXN0cnVjdCBk cHVfcnNjX2NsaWVudCAqcnNjX2NsaWVudDsKLQlib29sIHJzY19zdGF0ZV9pbml0OwogCXN0cnVj dCBtc21fZGlzcGxheV9pbmZvIGRpc3BfaW5mbzsKIAlzdHJ1Y3QgbXNtX21vZGVfaW5mbyBtb2Rl X2luZm87CiAJYm9vbCBtaXNyX2VuYWJsZTsKQEAgLTI0MCw4ICsyMjksNiBAQCBzdHJ1Y3QgZHB1 X2VuY29kZXJfdmlydCB7CiAJc3RydWN0IG1zbV9kaXNwbGF5X3RvcG9sb2d5IHRvcG9sb2d5Owog CWJvb2wgbW9kZV9zZXRfY29tcGxldGU7CiAKLQlzdHJ1Y3QgZHB1X3JzY19jbWRfY29uZmlnIHJz Y19jb25maWc7Ci0KIAl1MzIgaWRsZV90aW1lb3V0OwogfTsKIApAQCAtNTcwLDcgKzU1Nyw2IEBA IHZvaWQgZHB1X2VuY29kZXJfZGVzdHJveShzdHJ1Y3QgZHJtX2VuY29kZXIgKmRybV9lbmMpCiAJ RFBVX0RFQlVHX0VOQyhkcHVfZW5jLCAiXG4iKTsKIAogCW11dGV4X2xvY2soJmRwdV9lbmMtPmVu Y19sb2NrKTsKLQlkcHVfcnNjX2NsaWVudF9kZXN0cm95KGRwdV9lbmMtPnJzY19jbGllbnQpOwog CiAJZm9yIChpID0gMDsgaSA8IGRwdV9lbmMtPm51bV9waHlzX2VuY3M7IGkrKykgewogCQlzdHJ1 Y3QgZHB1X2VuY29kZXJfcGh5cyAqcGh5cyA9IGRwdV9lbmMtPnBoeXNfZW5jc1tpXTsKQEAgLTEw NjYsNyArMTA1Miw3IEBAIHN0YXRpYyBpbnQgX2RwdV9lbmNvZGVyX2RzY19zZXR1cChzdHJ1Y3Qg ZHB1X2VuY29kZXJfdmlydCAqZHB1X2VuYykKIH0KIAogc3RhdGljIHZvaWQgX2RwdV9lbmNvZGVy X3VwZGF0ZV92c3luY19zb3VyY2Uoc3RydWN0IGRwdV9lbmNvZGVyX3ZpcnQgKmRwdV9lbmMsCi0J CQlzdHJ1Y3QgbXNtX2Rpc3BsYXlfaW5mbyAqZGlzcF9pbmZvLCBib29sIGlzX2R1bW15KQorCQkJ c3RydWN0IG1zbV9kaXNwbGF5X2luZm8gKmRpc3BfaW5mbykKIHsKIAlzdHJ1Y3QgZHB1X3ZzeW5j X3NvdXJjZV9jZmcgdnN5bmNfY2ZnID0geyAwIH07CiAJc3RydWN0IG1zbV9kcm1fcHJpdmF0ZSAq cHJpdjsKQEAgLTExMTYsMTMgKzExMDIsMTAgQEAgc3RhdGljIHZvaWQgX2RwdV9lbmNvZGVyX3Vw ZGF0ZV92c3luY19zb3VyY2Uoc3RydWN0IGRwdV9lbmNvZGVyX3ZpcnQgKmRwdV9lbmMsCiAKIAkJ dnN5bmNfY2ZnLnBwX2NvdW50ID0gZHB1X2VuYy0+bnVtX3BoeXNfZW5jczsKIAkJdnN5bmNfY2Zn LmZyYW1lX3JhdGUgPSBtb2RlX2luZm8tPmZyYW1lX3JhdGU7Ci0JCWlmIChpc19kdW1teSkKLQkJ CXZzeW5jX2NmZy52c3luY19zb3VyY2UgPSBEUFVfVlNZTkNfU09VUkNFX1dEX1RJTUVSXzE7Ci0J CWVsc2UgaWYgKGRpc3BfaW5mby0+aXNfdGVfdXNpbmdfd2F0Y2hkb2dfdGltZXIpCisJCWlmIChk aXNwX2luZm8tPmlzX3RlX3VzaW5nX3dhdGNoZG9nX3RpbWVyKQogCQkJdnN5bmNfY2ZnLnZzeW5j X3NvdXJjZSA9IERQVV9WU1lOQ19TT1VSQ0VfV0RfVElNRVJfMDsKIAkJZWxzZQogCQkJdnN5bmNf Y2ZnLnZzeW5jX3NvdXJjZSA9IERQVV9WU1lOQzBfU09VUkNFX0dQSU87Ci0JCXZzeW5jX2NmZy5p c19kdW1teSA9IGlzX2R1bW15OwogCiAJCWh3X21kcHRvcC0+b3BzLnNldHVwX3ZzeW5jX3NvdXJj ZShod19tZHB0b3AsICZ2c3luY19jZmcpOwogCX0KQEAgLTEyMjQsMTM2ICsxMjA3LDYgQEAgc3Rh dGljIGludCBfZHB1X2VuY29kZXJfZHNjX2Rpc2FibGUoc3RydWN0IGRwdV9lbmNvZGVyX3ZpcnQg KmRwdV9lbmMpCiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBfZHB1X2VuY29kZXJfdXBk YXRlX3JzY19jbGllbnQoCi0JCXN0cnVjdCBkcm1fZW5jb2RlciAqZHJtX2VuYywgYm9vbCBlbmFi bGUpCi17Ci0Jc3RydWN0IGRwdV9lbmNvZGVyX3ZpcnQgKmRwdV9lbmM7Ci0Jc3RydWN0IGRybV9j cnRjICpjcnRjOwotCWVudW0gZHB1X3JzY19zdGF0ZSByc2Nfc3RhdGU7Ci0Jc3RydWN0IGRwdV9y c2NfY21kX2NvbmZpZyAqcnNjX2NvbmZpZzsKLQlpbnQgcmV0LCBwcmVmaWxsX2xpbmVzOwotCXN0 cnVjdCBtc21fZGlzcGxheV9pbmZvICpkaXNwX2luZm87Ci0Jc3RydWN0IG1zbV9tb2RlX2luZm8g Km1vZGVfaW5mbzsKLQlpbnQgd2FpdF92YmxhbmtfY3J0Y19pZCA9IERQVV9SU0NfSU5WQUxJRF9D UlRDX0lEOwotCWludCB3YWl0X2NvdW50ID0gMDsKLQlzdHJ1Y3QgZHJtX2NydGMgKnByaW1hcnlf Y3J0YzsKLQlpbnQgcGlwZSA9IC0xOwotCi0JaWYgKCFkcm1fZW5jIHx8ICFkcm1fZW5jLT5jcnRj IHx8ICFkcm1fZW5jLT5kZXYpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGFyZ3VtZW50c1xuIik7 Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWRwdV9lbmMgPSB0b19kcHVfZW5jb2Rlcl92aXJ0 KGRybV9lbmMpOwotCWNydGMgPSBkcm1fZW5jLT5jcnRjOwotCWRpc3BfaW5mbyA9ICZkcHVfZW5j LT5kaXNwX2luZm87Ci0JbW9kZV9pbmZvID0gJmRwdV9lbmMtPm1vZGVfaW5mbzsKLQlyc2NfY29u ZmlnID0gJmRwdV9lbmMtPnJzY19jb25maWc7Ci0KLQlpZiAoIWRwdV9lbmMtPnJzY19jbGllbnQp IHsKLQkJRFBVX0RFQlVHX0VOQyhkcHVfZW5jLCAicnNjIGNsaWVudCBub3QgY3JlYXRlZFxuIik7 Ci0JCXJldHVybiAwOwotCX0KLQotCS8qKgotCSAqIG9ubHkgcHJpbWFyeSBjb21tYW5kIG1vZGUg cGFuZWwgY2FuIHJlcXVlc3QgQ01EIHN0YXRlLgotCSAqIGFsbCBvdGhlciBwYW5lbHMvZGlzcGxh eXMgY2FuIHJlcXVlc3QgZm9yIFZJRCBzdGF0ZSBpbmNsdWRpbmcKLQkgKiBzZWNvbmRhcnkgY29t bWFuZCBtb2RlIHBhbmVsLgotCSAqLwotCXJzY19zdGF0ZSA9IGVuYWJsZSA/Ci0JCSgoKGRpc3Bf aW5mby0+Y2FwYWJpbGl0aWVzICYgTVNNX0RJU1BMQVlfQ0FQX0NNRF9NT0RFKSAmJgotCQkgIGRp c3BfaW5mby0+aXNfcHJpbWFyeSkgPyBEUFVfUlNDX0NNRF9TVEFURSA6Ci0JCURQVV9SU0NfVklE X1NUQVRFKSA6IERQVV9SU0NfSURMRV9TVEFURTsKLQotCS8qIGNvbXBhcmUgc3BlY2lmaWMgaXRl bXMgYW5kIHJlY29uZmlndXJlIHRoZSByc2MgKi8KLQlpZiAoKHJzY19jb25maWctPmZwcyAhPSBt b2RlX2luZm8tPmZyYW1lX3JhdGUpIHx8Ci0JICAgIChyc2NfY29uZmlnLT52dG90YWwgIT0gbW9k ZV9pbmZvLT52dG90YWwpIHx8Ci0JICAgIChyc2NfY29uZmlnLT5wcmVmaWxsX2xpbmVzICE9IG1v ZGVfaW5mby0+cHJlZmlsbF9saW5lcykgfHwKLQkgICAgKHJzY19jb25maWctPmppdHRlcl9udW1l ciAhPSBtb2RlX2luZm8tPmppdHRlcl9udW1lcikgfHwKLQkgICAgKHJzY19jb25maWctPmppdHRl cl9kZW5vbSAhPSBtb2RlX2luZm8tPmppdHRlcl9kZW5vbSkpIHsKLQkJcnNjX2NvbmZpZy0+ZnBz ID0gbW9kZV9pbmZvLT5mcmFtZV9yYXRlOwotCQlyc2NfY29uZmlnLT52dG90YWwgPSBtb2RlX2lu Zm8tPnZ0b3RhbDsKLQkJcnNjX2NvbmZpZy0+cHJlZmlsbF9saW5lcyA9IHByZWZpbGxfbGluZXM7 Ci0JCXJzY19jb25maWctPmppdHRlcl9udW1lciA9IG1vZGVfaW5mby0+aml0dGVyX251bWVyOwot CQlyc2NfY29uZmlnLT5qaXR0ZXJfZGVub20gPSBtb2RlX2luZm8tPmppdHRlcl9kZW5vbTsKLQkJ ZHB1X2VuYy0+cnNjX3N0YXRlX2luaXQgPSBmYWxzZTsKLQl9Ci0KLQlpZiAocnNjX3N0YXRlICE9 IERQVV9SU0NfSURMRV9TVEFURSAmJiAhZHB1X2VuYy0+cnNjX3N0YXRlX2luaXQKLQkJCQkJJiYg ZGlzcF9pbmZvLT5pc19wcmltYXJ5KSB7Ci0JCS8qIHVwZGF0ZSBpdCBvbmx5IG9uY2UgKi8KLQkJ ZHB1X2VuYy0+cnNjX3N0YXRlX2luaXQgPSB0cnVlOwotCi0JCXJldCA9IGRwdV9yc2NfY2xpZW50 X3N0YXRlX3VwZGF0ZShkcHVfZW5jLT5yc2NfY2xpZW50LAotCQkJcnNjX3N0YXRlLCByc2NfY29u ZmlnLCBjcnRjLT5iYXNlLmlkLAotCQkJJndhaXRfdmJsYW5rX2NydGNfaWQpOwotCX0gZWxzZSB7 Ci0JCXJldCA9IGRwdV9yc2NfY2xpZW50X3N0YXRlX3VwZGF0ZShkcHVfZW5jLT5yc2NfY2xpZW50 LAotCQkJcnNjX3N0YXRlLCBOVUxMLCBjcnRjLT5iYXNlLmlkLAotCQkJJndhaXRfdmJsYW5rX2Ny dGNfaWQpOwotCX0KLQotCS8qKgotCSAqIGlmIFJTQyBwZXJmb3JtZWQgYSBzdGF0ZSBjaGFuZ2Ug dGhhdCByZXF1aXJlcyBhIFZCTEFOSyB3YWl0LCBpdCB3aWxsCi0JICogc2V0IHdhaXRfdmJsYW5r X2NydGNfaWQgdG8gdGhlIENSVEMgd2hvc2UgVkJMQU5LIHdlIG11c3Qgd2FpdCBvbi4KLQkgKgot CSAqIGlmIHdlIGFyZSB0aGUgcHJpbWFyeSBkaXNwbGF5LCB3ZSB3aWxsIG5lZWQgdG8gZW5hYmxl IGFuZCB3YWl0Ci0JICogbG9jYWxseSBzaW5jZSB3ZSBob2xkIHRoZSBjb21taXQgdGhyZWFkCi0J ICoKLQkgKiBpZiB3ZSBhcmUgYW4gZXh0ZXJuYWwgZGlzcGxheSwgd2UgbXVzdCBzZW5kIGEgc2ln bmFsIHRvIHRoZSBwcmltYXJ5Ci0JICogdG8gZW5hYmxlIGl0cyBWQkxBTksgYW5kIHdhaXQgb25l LCBzaW5jZSB0aGUgUlNDIGhhcmR3YXJlIGlzIGRyaXZlbgotCSAqIGJ5IHRoZSBwcmltYXJ5IHBh bmVsJ3MgVkJMQU5LIHNpZ25hbHMKLQkgKi8KLQlEUFVfRVZUMzJfVkVSQk9TRShEUk1JRChkcm1f ZW5jKSwgd2FpdF92YmxhbmtfY3J0Y19pZCk7Ci0JaWYgKHJldCkgewotCQlEUFVfRVJST1JfRU5D KGRwdV9lbmMsCi0JCQkJImRwdSByc2MgY2xpZW50IHVwZGF0ZSBmYWlsZWQgcmV0OiVkXG4iLCBy ZXQpOwotCQlyZXR1cm4gcmV0OwotCX0gZWxzZSBpZiAod2FpdF92YmxhbmtfY3J0Y19pZCA9PSBE UFVfUlNDX0lOVkFMSURfQ1JUQ19JRCkgewotCQlyZXR1cm4gcmV0OwotCX0KLQotCWlmIChjcnRj LT5iYXNlLmlkICE9IHdhaXRfdmJsYW5rX2NydGNfaWQpIHsKLQkJcHJpbWFyeV9jcnRjID0gZHJt X2NydGNfZmluZChkcm1fZW5jLT5kZXYsIE5VTEwsCi0JCQkJd2FpdF92YmxhbmtfY3J0Y19pZCk7 Ci0JCWlmICghcHJpbWFyeV9jcnRjKSB7Ci0JCQlEUFVfRVJST1JfRU5DKGRwdV9lbmMsCi0JCQkJ CSJmYWlsZWQgdG8gZmluZCBwcmltYXJ5IGNydGMgaWQgJWRcbiIsCi0JCQkJCXdhaXRfdmJsYW5r X2NydGNfaWQpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJcGlwZSA9IGRybV9jcnRjX2lu ZGV4KHByaW1hcnlfY3J0Yyk7Ci0JfQotCi0JLyoqCi0JICogbm90ZTogVkJMQU5LIGlzIGV4cGVj dGVkIHRvIGJlIGVuYWJsZWQgYXQgdGhpcyBwb2ludCBpbgotCSAqIHJlc291cmNlIGNvbnRyb2wg c3RhdGUgbWFjaGluZSBpZiBvbiBwcmltYXJ5IENSVEMKLQkgKi8KLQlmb3IgKHdhaXRfY291bnQg PSAwOyB3YWl0X2NvdW50IDwgTUFYX1JTQ19XQUlUOyB3YWl0X2NvdW50KyspIHsKLQkJaWYgKGRw dV9yc2NfY2xpZW50X2lzX3N0YXRlX3VwZGF0ZV9jb21wbGV0ZSgKLQkJCQlkcHVfZW5jLT5yc2Nf Y2xpZW50KSkKLQkJCWJyZWFrOwotCi0JCWlmIChjcnRjLT5iYXNlLmlkID09IHdhaXRfdmJsYW5r X2NydGNfaWQpCi0JCQlyZXQgPSBkcHVfZW5jb2Rlcl93YWl0X2Zvcl9ldmVudChkcm1fZW5jLAot CQkJCQlNU01fRU5DX1ZCTEFOSyk7Ci0JCWVsc2UKLQkJCWRybV93YWl0X29uZV92YmxhbmsoZHJt X2VuYy0+ZGV2LCBwaXBlKTsKLQotCQlpZiAocmV0KSB7Ci0JCQlEUFVfRVJST1JfRU5DKGRwdV9l bmMsCi0JCQkJCSJ3YWl0IGZvciB2YmxhbmsgZmFpbGVkIHJldDolZFxuIiwgcmV0KTsKLQkJCWJy ZWFrOwotCQl9Ci0JfQotCi0JaWYgKHdhaXRfY291bnQgPj0gTUFYX1JTQ19XQUlUKQotCQlEUFVf RVZUMzIoRFJNSUQoZHJtX2VuYyksIHdhaXRfdmJsYW5rX2NydGNfaWQsIHdhaXRfY291bnQsCi0J CQkJRFBVX0VWVExPR19FUlJPUik7Ci0KLQlyZXR1cm4gcmV0OwotfQotCiBzdGF0aWMgdm9pZCBf ZHB1X2VuY29kZXJfaXJxX2NvbnRyb2woc3RydWN0IGRybV9lbmNvZGVyICpkcm1fZW5jLCBib29s IGVuYWJsZSkKIHsKIAlzdHJ1Y3QgZHB1X2VuY29kZXJfdmlydCAqZHB1X2VuYzsKQEAgLTEzNzYs NDUgKzEyMjksNiBAQCBzdGF0aWMgdm9pZCBfZHB1X2VuY29kZXJfaXJxX2NvbnRyb2woc3RydWN0 IGRybV9lbmNvZGVyICpkcm1fZW5jLCBib29sIGVuYWJsZSkKIAogfQogCi1zdHJ1Y3QgZHB1X3Jz Y19jbGllbnQgKmRwdV9lbmNvZGVyX2dldF9yc2NfY2xpZW50KHN0cnVjdCBkcm1fZW5jb2RlciAq ZHJtX2VuYykKLXsKLQlzdHJ1Y3QgZHB1X2VuY29kZXJfdmlydCAqZHB1X2VuYzsKLQotCWlmICgh ZHJtX2VuYykKLQkJcmV0dXJuIE5VTEw7Ci0JZHB1X2VuYyA9IHRvX2RwdV9lbmNvZGVyX3ZpcnQo ZHJtX2VuYyk7Ci0JcmV0dXJuIGRwdV9lbmMtPnJzY19jbGllbnQ7Ci19Ci0KLXN0YXRpYyB2b2lk IF9kcHVfZW5jb2Rlcl9yZXNvdXJjZV9jb250cm9sX3JzY191cGRhdGUoCi0JCXN0cnVjdCBkcm1f ZW5jb2RlciAqZHJtX2VuYywgYm9vbCBlbmFibGUpCi17Ci0Jc3RydWN0IGRwdV9lbmNvZGVyX3Zp cnQgKmRwdV9lbmMgPSB0b19kcHVfZW5jb2Rlcl92aXJ0KGRybV9lbmMpOwotCWludCBpOwotCi0J aWYgKGVuYWJsZSkgewotCQlfZHB1X2VuY29kZXJfdXBkYXRlX3JzY19jbGllbnQoZHJtX2VuYywg dHJ1ZSk7Ci0JfSBlbHNlIHsKLQkJX2RwdV9lbmNvZGVyX3VwZGF0ZV9yc2NfY2xpZW50KGRybV9l bmMsIGZhbHNlKTsKLQotCQkvKioKLQkJICogZGlzYWJsZSB0aGUgdnN5bmMgc291cmNlIGFmdGVy IHVwZGF0aW5nIHRoZSByc2Mgc3RhdGUuIHJzYwotCQkgKiBzdGF0ZSB1cGRhdGUgbWlnaHQgaGF2 ZSB2c3luYyB3YWl0IGFuZCB2c3luYyBzb3VyY2UgbXVzdCBiZQotCQkgKiBkaXNhYmxlZCBhZnRl ciBpdC4gSXQgd2lsbCBhdm9pZCBnZW5lcmF0aW5nIGFueSB2c3luYyBmcm9tCi0JCSAqIHRoaXMg cG9pbnQgdGlsbCBtb2RlLTIgZW50cnkuIEl0IGlzIFNXIHdvcmthcm91bmQgZm9yCi0JCSAqIEhX IGxpbWl0YXRpb24gYW5kIHNob3VsZCBub3QgYmUgcmVtb3ZlZCB3aXRob3V0IGNoZWNraW5nIHRo ZQotCQkgKiB1cGRhdGVkIGRlc2lnbi4KLQkJICovCi0JCWZvciAoaSA9IDA7IGkgPCBkcHVfZW5j LT5udW1fcGh5c19lbmNzOyBpKyspIHsKLQkJCXN0cnVjdCBkcHVfZW5jb2Rlcl9waHlzICpwaHlz ID0gZHB1X2VuYy0+cGh5c19lbmNzW2ldOwotCi0JCQlpZiAocGh5cyAmJiBwaHlzLT5vcHMucHJl cGFyZV9pZGxlX3BjKQotCQkJCXBoeXMtPm9wcy5wcmVwYXJlX2lkbGVfcGMocGh5cyk7Ci0JCX0K LQotCX0KLX0KLQogc3RhdGljIHZvaWQgX2RwdV9lbmNvZGVyX3Jlc291cmNlX2NvbnRyb2xfaGVs cGVyKHN0cnVjdCBkcm1fZW5jb2RlciAqZHJtX2VuYywKIAkJYm9vbCBlbmFibGUpCiB7CkBAIC0x NTMzLDEzICsxMzQ3LDEwIEBAIHN0YXRpYyBpbnQgZHB1X2VuY29kZXJfcmVzb3VyY2VfY29udHJv bChzdHJ1Y3QgZHJtX2VuY29kZXIgKmRybV9lbmMsCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQog Ci0JCWlmIChpc192aWRfbW9kZSAmJiBkcHVfZW5jLT5yY19zdGF0ZSA9PSBEUFVfRU5DX1JDX1NU QVRFX0lETEUpIHsKKwkJaWYgKGlzX3ZpZF9tb2RlICYmIGRwdV9lbmMtPnJjX3N0YXRlID09IERQ VV9FTkNfUkNfU1RBVEVfSURMRSkKIAkJCV9kcHVfZW5jb2Rlcl9pcnFfY29udHJvbChkcm1fZW5j LCB0cnVlKTsKLQkJfSBlbHNlIHsKLQkJCS8qIGVuYWJsZSBhbGwgdGhlIGNsa3MgYW5kIHJlc291 cmNlcyAqLworCQllbHNlCiAJCQlfZHB1X2VuY29kZXJfcmVzb3VyY2VfY29udHJvbF9oZWxwZXIo ZHJtX2VuYywgdHJ1ZSk7Ci0JCQlfZHB1X2VuY29kZXJfcmVzb3VyY2VfY29udHJvbF9yc2NfdXBk YXRlKGRybV9lbmMsIHRydWUpOwotCQl9CiAKIAkJRFBVX0VWVDMyKERSTUlEKGRybV9lbmMpLCBz d19ldmVudCwgZHB1X2VuYy0+cmNfc3RhdGUsCiAJCQkJRFBVX0VOQ19SQ19TVEFURV9PTiwgRFBV X0VWVExPR19GVU5DX0NBU0UxKTsKQEAgLTE2MjksMTIgKzE0NDAsNiBAQCBzdGF0aWMgaW50IGRw dV9lbmNvZGVyX3Jlc291cmNlX2NvbnRyb2woc3RydWN0IGRybV9lbmNvZGVyICpkcm1fZW5jLAog CQkJcmV0dXJuIDA7CiAJCX0KIAotCQkvKioKLQkJICogSVJRcyBhcmUgc3RpbGwgZW5hYmxlZCBj dXJyZW50bHksIHdoaWNoIGFsbG93cyB3YWl0IGZvcgotCQkgKiBWQkxBTksgd2hpY2ggUlNDIG1h eSByZXF1aXJlIHRvIGNvcnJlY3RseSB0cmFuc2l0aW9uIHRvIE9GRgotCQkgKi8KLQkJX2RwdV9l bmNvZGVyX3Jlc291cmNlX2NvbnRyb2xfcnNjX3VwZGF0ZShkcm1fZW5jLCBmYWxzZSk7Ci0KIAkJ RFBVX0VWVDMyKERSTUlEKGRybV9lbmMpLCBzd19ldmVudCwgZHB1X2VuYy0+cmNfc3RhdGUsCiAJ CQkJRFBVX0VOQ19SQ19TVEFURV9QUkVfT0ZGLAogCQkJCURQVV9FVlRMT0dfRlVOQ19DQVNFMyk7 CkBAIC0xNjk0LDggKzE0OTksNiBAQCBzdGF0aWMgaW50IGRwdV9lbmNvZGVyX3Jlc291cmNlX2Nv bnRyb2woc3RydWN0IGRybV9lbmNvZGVyICpkcm1fZW5jLAogCQkJLyogZW5hYmxlIGFsbCB0aGUg Y2xrcyBhbmQgcmVzb3VyY2VzICovCiAJCQlfZHB1X2VuY29kZXJfcmVzb3VyY2VfY29udHJvbF9o ZWxwZXIoZHJtX2VuYywgdHJ1ZSk7CiAKLQkJCV9kcHVfZW5jb2Rlcl9yZXNvdXJjZV9jb250cm9s X3JzY191cGRhdGUoZHJtX2VuYywgdHJ1ZSk7Ci0KIAkJCURQVV9FVlQzMihEUk1JRChkcm1fZW5j KSwgc3dfZXZlbnQsIGRwdV9lbmMtPnJjX3N0YXRlLAogCQkJCURQVV9FTkNfUkNfU1RBVEVfT04s IERQVV9FVlRMT0dfRlVOQ19DQVNFNSk7CiAJCQlkcHVfZW5jLT5yY19zdGF0ZSA9IERQVV9FTkNf UkNfU1RBVEVfT047CkBAIC0xNzM3LDggKzE1NDAsNiBAQCBzdGF0aWMgaW50IGRwdV9lbmNvZGVy X3Jlc291cmNlX2NvbnRyb2woc3RydWN0IGRybV9lbmNvZGVyICpkcm1fZW5jLAogCiAJCV9kcHVf ZW5jb2Rlcl9pcnFfY29udHJvbChkcm1fZW5jLCB0cnVlKTsKIAotCQlfZHB1X2VuY29kZXJfdXBk YXRlX3JzY19jbGllbnQoZHJtX2VuYywgdHJ1ZSk7Ci0KIAkJRFBVX0VWVDMyKERSTUlEKGRybV9l bmMpLCBzd19ldmVudCwgZHB1X2VuYy0+cmNfc3RhdGUsCiAJCQkJRFBVX0VOQ19SQ19TVEFURV9P TiwgRFBVX0VWVExPR19GVU5DX0NBU0U2KTsKIApAQCAtMTc3MywxNCArMTU3NCwxMCBAQCBzdGF0 aWMgaW50IGRwdV9lbmNvZGVyX3Jlc291cmNlX2NvbnRyb2woc3RydWN0IGRybV9lbmNvZGVyICpk cm1fZW5jLAogCQkJcmV0dXJuIDA7CiAJCX0KIAotCQlpZiAoaXNfdmlkX21vZGUpIHsKKwkJaWYg KGlzX3ZpZF9tb2RlKQogCQkJX2RwdV9lbmNvZGVyX2lycV9jb250cm9sKGRybV9lbmMsIGZhbHNl KTsKLQkJfSBlbHNlIHsKLQkJCS8qIGRpc2FibGUgYWxsIHRoZSBjbGtzIGFuZCByZXNvdXJjZXMg Ki8KLQkJCV9kcHVfZW5jb2Rlcl9yZXNvdXJjZV9jb250cm9sX3JzY191cGRhdGUoZHJtX2VuYywK LQkJCQkJCQkJZmFsc2UpOworCQllbHNlCiAJCQlfZHB1X2VuY29kZXJfcmVzb3VyY2VfY29udHJv bF9oZWxwZXIoZHJtX2VuYywgZmFsc2UpOwotCQl9CiAKIAkJRFBVX0VWVDMyKERSTUlEKGRybV9l bmMpLCBzd19ldmVudCwgZHB1X2VuYy0+cmNfc3RhdGUsCiAJCQkJRFBVX0VOQ19SQ19TVEFURV9J RExFLCBEUFVfRVZUTE9HX0ZVTkNfQ0FTRTcpOwpAQCAtMTk1NCw3ICsxNzUxLDcgQEAgc3RhdGlj IHZvaWQgX2RwdV9lbmNvZGVyX3ZpcnRfZW5hYmxlX2hlbHBlcihzdHJ1Y3QgZHJtX2VuY29kZXIg KmRybV9lbmMpCiAJCQkJZHB1X2VuYy0+Y3VyX21hc3Rlci0+aHdfbWRwdG9wLAogCQkJCWRwdV9r bXMtPmNhdGFsb2cpOwogCi0JX2RwdV9lbmNvZGVyX3VwZGF0ZV92c3luY19zb3VyY2UoZHB1X2Vu YywgJmRwdV9lbmMtPmRpc3BfaW5mbywgZmFsc2UpOworCV9kcHVfZW5jb2Rlcl91cGRhdGVfdnN5 bmNfc291cmNlKGRwdV9lbmMsICZkcHVfZW5jLT5kaXNwX2luZm8pOwogfQogCiB2b2lkIGRwdV9l bmNvZGVyX3ZpcnRfcmVzdG9yZShzdHJ1Y3QgZHJtX2VuY29kZXIgKmRybV9lbmMpCkBAIC0zNTg5 LDcgKzMzODYsNiBAQCBzdHJ1Y3QgZHJtX2VuY29kZXIgKmRwdV9lbmNvZGVyX2luaXQoCiAJc3Ry dWN0IGRybV9lbmNvZGVyICpkcm1fZW5jID0gTlVMTDsKIAlzdHJ1Y3QgZHB1X2VuY29kZXJfdmly dCAqZHB1X2VuYyA9IE5VTEw7CiAJaW50IGRybV9lbmNfbW9kZSA9IERSTV9NT0RFX0VOQ09ERVJf Tk9ORTsKLQljaGFyIG5hbWVbRFBVX05BTUVfU0laRV07CiAJaW50IHJldCA9IDA7CiAKIAlkcHVf ZW5jID0ga3phbGxvYyhzaXplb2YoKmRwdV9lbmMpLCBHRlBfS0VSTkVMKTsKQEAgLTM2MjAsMTQg KzM0MTYsNiBAQCBzdHJ1Y3QgZHJtX2VuY29kZXIgKmRwdV9lbmNvZGVyX2luaXQoCiAJCQkJZHB1 X2VuY29kZXJfdnN5bmNfZXZlbnRfaGFuZGxlciwKIAkJCQkwKTsKIAotCXNucHJpbnRmKG5hbWUs IERQVV9OQU1FX1NJWkUsICJyc2NfZW5jJXUiLCBkcm1fZW5jLT5iYXNlLmlkKTsKLQlkcHVfZW5j LT5yc2NfY2xpZW50ID0gZHB1X3JzY19jbGllbnRfY3JlYXRlKERQVV9SU0NfSU5ERVgsIG5hbWUs Ci0JCQkJCWRpc3BfaW5mby0+aXNfcHJpbWFyeSk7Ci0JaWYgKElTX0VSUl9PUl9OVUxMKGRwdV9l bmMtPnJzY19jbGllbnQpKSB7Ci0JCURQVV9ERUJVRygiZHB1IHJzYyBjbGllbnQgY3JlYXRlIGZh aWxlZCA6JWxkXG4iLAotCQkJCQkJUFRSX0VSUihkcHVfZW5jLT5yc2NfY2xpZW50KSk7Ci0JCWRw dV9lbmMtPnJzY19jbGllbnQgPSBOVUxMOwotCX0KIAogCW11dGV4X2luaXQoJmRwdV9lbmMtPnJj X2xvY2spOwogCWt0aHJlYWRfaW5pdF9kZWxheWVkX3dvcmsoJmRwdV9lbmMtPmRlbGF5ZWRfb2Zm X3dvcmssCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5j b2Rlci5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXIuaAppbmRl eCA0YzU1NjBiLi5lODVlNWE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3Av ZHB1MS9kcHVfZW5jb2Rlci5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2Rw dV9lbmNvZGVyLmgKQEAgLTg4LDEzICs4OCw2IEBAIHZvaWQgZHB1X2VuY29kZXJfcmVnaXN0ZXJf ZnJhbWVfZXZlbnRfY2FsbGJhY2soc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAogCQl2b2lk ICgqY2IpKHZvaWQgKiwgdTMyKSwgdm9pZCAqZGF0YSk7CiAKIC8qKgotICogZHB1X2VuY29kZXJf Z2V0X3JzY19jbGllbnQgLSBnZXRzIHRoZSByc2MgY2xpZW50IHN0YXRlIGZvciBwcmltYXJ5Ci0g KiAgICAgIGZvciBwcmltYXJ5IGRpc3BsYXkuCi0gKiBAZW5jb2RlcjoJZW5jb2RlciBwb2ludGVy Ci0gKi8KLXN0cnVjdCBkcHVfcnNjX2NsaWVudCAqZHB1X2VuY29kZXJfZ2V0X3JzY19jbGllbnQo c3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKTsKLQotLyoqCiAgKiBkcHVfZW5jb2Rlcl9wcmVw YXJlX2Zvcl9raWNrb2ZmIC0gc2NoZWR1bGUgZG91YmxlIGJ1ZmZlciBmbGlwIG9mIHRoZSBjdGwK ICAqCXBhdGggKGkuZS4gY3RsIGZsdXNoIGFuZCBzdGFydCkgYXQgbmV4dCBhcHByb3ByaWF0ZSB0 aW1lLgogICoJSW1tZWRpYXRlbHk6IGlmIG5vIHByZXZpb3VzIGNvbW1pdCBpcyBvdXRzdGFuZGlu Zy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVy X3BoeXMuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyX3BoeXMu aAppbmRleCBlOTQ4NGZlLi45YmJmMzM5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21z bS9kaXNwL2RwdTEvZHB1X2VuY29kZXJfcGh5cy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20v ZGlzcC9kcHUxL2RwdV9lbmNvZGVyX3BoeXMuaApAQCAtMTYsNyArMTYsNiBAQAogI2RlZmluZSBf X0RQVV9FTkNPREVSX1BIWVNfSF9fCiAKICNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+Ci0jaW5j bHVkZSA8bGludXgvZHB1X3JzYy5oPgogCiAjaW5jbHVkZSAiZHB1X2ttcy5oIgogI2luY2x1ZGUg ImRwdV9od19pbnRmLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1 MS9kcHVfaHdfdG9wLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfdG9w LmMKaW5kZXggMGNhYWRjZWUuLjY4MTYzYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9t c20vZGlzcC9kcHUxL2RwdV9od190b3AuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3Av ZHB1MS9kcHVfaHdfdG9wLmMKQEAgLTI3MCwxOCArMjcwLDE0IEBAIHN0YXRpYyB2b2lkIGRwdV9o d19zZXR1cF92c3luY19zb3VyY2Uoc3RydWN0IGRwdV9od19tZHAgKm1kcCwKIAkJCWJyZWFrOwog CQl9CiAKLQkJaWYgKGNmZy0+aXNfZHVtbXkpIHsKLQkJCURQVV9SRUdfV1JJVEUoYywgd2RfY3Rs MiwgMHgwKTsKLQkJfSBlbHNlIHsKLQkJCURQVV9SRUdfV1JJVEUoYywgd2RfbG9hZF92YWx1ZSwK LQkJCQlDQUxDVUxBVEVfV0RfTE9BRF9WQUxVRShjZmctPmZyYW1lX3JhdGUpKTsKLQotCQkJRFBV X1JFR19XUklURShjLCB3ZF9jdGwsIEJJVCgwKSk7IC8qIGNsZWFyIHRpbWVyICovCi0JCQlyZWcg PSBEUFVfUkVHX1JFQUQoYywgd2RfY3RsMik7Ci0JCQlyZWcgfD0gQklUKDgpOwkJLyogZW5hYmxl IGhlYXJ0YmVhdCB0aW1lciAqLwotCQkJcmVnIHw9IEJJVCgwKTsJCS8qIGVuYWJsZSBXRCB0aW1l ciAqLwotCQkJRFBVX1JFR19XUklURShjLCB3ZF9jdGwyLCByZWcpOwotCQl9CisJCURQVV9SRUdf V1JJVEUoYywgd2RfbG9hZF92YWx1ZSwKKwkJCUNBTENVTEFURV9XRF9MT0FEX1ZBTFVFKGNmZy0+ ZnJhbWVfcmF0ZSkpOworCisJCURQVV9SRUdfV1JJVEUoYywgd2RfY3RsLCBCSVQoMCkpOyAvKiBj bGVhciB0aW1lciAqLworCQlyZWcgPSBEUFVfUkVHX1JFQUQoYywgd2RfY3RsMik7CisJCXJlZyB8 PSBCSVQoOCk7CQkvKiBlbmFibGUgaGVhcnRiZWF0IHRpbWVyICovCisJCXJlZyB8PSBCSVQoMCk7 CQkvKiBlbmFibGUgV0QgdGltZXIgKi8KKwkJRFBVX1JFR19XUklURShjLCB3ZF9jdGwyLCByZWcp OwogCiAJCS8qIG1ha2Ugc3VyZSB0aGF0IHRpbWVycyBhcmUgZW5hYmxlZC9kaXNhYmxlZCBmb3Ig dnN5bmMgc3RhdGUgKi8KIAkJd21iKCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNt L2Rpc3AvZHB1MS9kcHVfaHdfdG9wLmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9k cHVfaHdfdG9wLmgKaW5kZXggMThlNzZhMS4uMzc1Y2I3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9n cHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X3RvcC5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9t c20vZGlzcC9kcHUxL2RwdV9od190b3AuaApAQCAtODQsMTUgKzg0LDEyIEBAIHN0cnVjdCBkcHVf ZGFuZ2VyX3NhZmVfc3RhdHVzIHsKICAqIEBmcmFtZV9yYXRlOiBEaXNwbGF5IGZyYW1lIHJhdGUK ICAqIEBwcG51bWJlcjogcGluZyBwb25nIGluZGV4IGFycmF5CiAgKiBAdnN5bmNfc291cmNlOiB2 c3luYyBzb3VyY2Ugc2VsZWN0aW9uCi0gKiBAaXNfZHVtbXk6IGEgZHVtbXkgc291cmNlIG9mIHZz eW5jIHNlbGVjdGlvbi4gSXQgbXVzdCBub3QgYmUgc2VsZWN0ZWQgZm9yCi0gKiAgICAgICAgICAg YW55IGNhc2Ugb3RoZXIgdGhhbiBkcHUgcnNjIGlkbGUgcmVxdWVzdC4KICAqLwogc3RydWN0IGRw dV92c3luY19zb3VyY2VfY2ZnIHsKIAl1MzIgcHBfY291bnQ7CiAJdTMyIGZyYW1lX3JhdGU7CiAJ dTMyIHBwbnVtYmVyW1BJTkdQT05HX01BWF07CiAJdTMyIHZzeW5jX3NvdXJjZTsKLQlib29sIGlz X2R1bW15OwogfTsKIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwdV9k YmcuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHB1X2RiZy5jCmluZGV4IDgxMThmYjcuLjM0MWI1 OTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHB1X2RiZy5jCisrKyBiL2RyaXZl cnMvZ3B1L2RybS9tc20vZHB1X2RiZy5jCkBAIC02Nyw3ICs2Nyw2IEBACiAvKiBwcmludCBkZWJ1 ZyByYW5nZXMgaW4gZ3JvdXBzIG9mIDQgdTMycyAqLwogI2RlZmluZSBSRUdfRFVNUF9BTElHTgkJ MTYKIAotI2RlZmluZSBSU0NfREVCVUdfTVVYX1NFTF9TRE04NDUgOQogLyoqCiAgKiBzdHJ1Y3Qg ZHB1X2RiZ19yZWdfb2Zmc2V0IC0gdHJhY2tpbmcgZm9yIHN0YXJ0IGFuZCBlbmQgb2YgcmVnaW9u CiAgKiBAc3RhcnQ6IHN0YXJ0IG9mZnNldApAQCAtMjM4LDI5ICsyMzcsNiBAQCBzdGF0aWMgdm9p ZCBfZHB1X2RlYnVnX2J1c19wcGIxX2R1bXAodm9pZCBfX2lvbWVtICptZW1fYmFzZSwKIAkJCWVu dHJ5LT53cl9hZGRyLCBlbnRyeS0+YmxvY2tfaWQsIGVudHJ5LT50ZXN0X2lkLCB2YWwpOwogfQog Ci1zdGF0aWMgdm9pZCBfZHB1X2RlYnVnX2J1c19heGlfZHVtcF9zZG04NDUodm9pZCBfX2lvbWVt ICptZW1fYmFzZSwKLQkJc3RydWN0IGRwdV9kZWJ1Z19idXNfZW50cnkgKmVudHJ5LCB1MzIgdmFs KQotewotCXUzMiBzdGF0dXMsIGk7Ci0KLQlpZiAoIW1lbV9iYXNlIHx8ICFlbnRyeSkKLQkJcmV0 dXJuOwotCi0JZm9yIChpID0gMDsgaSA8PSBSU0NfREVCVUdfTVVYX1NFTF9TRE04NDU7IGkrKykg ewotCQkvL2RwdV9yc2NfZGVidWdfZHVtcChpKTsKLQotCQkvKiBtYWtlIHN1cmUgdGhhdCBtdXhf c2VsIHVwZGF0ZWQgKi8KLQkJd21iKCk7Ci0KLQkJLyogcmVhZCBzdGF0dXMgYWdhaW4gYWZ0ZXIg cnNjIHJvdXRlcyB0aGUgZGVidWcgYnVzICovCi0JCXN0YXR1cyA9IHJlYWRsX3JlbGF4ZWQobWVt X2Jhc2UgKyBEQkdCVVNfRFNQUF9TVEFUVVMpOwotCi0JCWRldl9lcnIoZHB1X2RiZ19iYXNlLmRl diwgInJzYyBtdXhfc2VsOiVkIDB4JXggJWQgJWQgMHgleFxuIiwKLQkJCWksIGVudHJ5LT53cl9h ZGRyLCBlbnRyeS0+YmxvY2tfaWQsCi0JCQllbnRyeS0+dGVzdF9pZCwgc3RhdHVzKTsKLQl9Ci19 Ci0KIHN0YXRpYyBzdHJ1Y3QgZHB1X2RlYnVnX2J1c19lbnRyeSBkYmdfYnVzX2RwdV84OTk4W10g PSB7CiAKIAkvKiBVbnBhY2sgMCBzc3BwIDAqLwpAQCAtMjAxNCw5ICsxOTkwLDYgQEAgc3RhdGlj IHZvaWQgX2RwdV9kZWJ1Z19idXNfYXhpX2R1bXBfc2RtODQ1KHZvaWQgX19pb21lbSAqbWVtX2Jh c2UsCiAJeyBEQkdCVVNfUEVSSVBILCA3MSwgM30sCiAJeyBEQkdCVVNfUEVSSVBILCA3MSwgNH0s CiAJeyBEQkdCVVNfUEVSSVBILCA3MSwgNX0sCi0KLQkvKiBheGkgLSBzaG91bGQgYmUgbGFzdCBl bnRyeSAqLwotCXsgREJHQlVTX0FYSV9JTlRGLCA2MiwgMCwgX2RwdV9kZWJ1Z19idXNfYXhpX2R1 bXBfc2RtODQ1fSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdmJpZl9kZWJ1Z19idXNfZW50cnkgdmJp Zl9kYmdfYnVzX21zbTg5OThbXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20v ZHB1X2RiZy5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcHVfZGJnLmgKaW5kZXggOWUzYjBlYi4u NzEwZTkxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kcHVfZGJnLmgKKysrIGIv ZHJpdmVycy9ncHUvZHJtL21zbS9kcHVfZGJnLmgKQEAgLTMxNiwxMiArMzE2LDYgQEAgaW50IGRw dV9ldnRsb2dfZ2V0X2ZpbHRlcihzdHJ1Y3QgZHB1X2RiZ19ldnRsb2cgKmV2dGxvZywgaW50IGlu ZGV4LAogCQljaGFyICpidWYsIHNpemVfdCBidWZzeik7CiAKIC8qKgotICogZHB1X3JzY19kZWJ1 Z19kdW1wIC0gZHB1IHJzYyBkZWJ1ZyBkdW1wIHN0YXR1cwotICogQG11eF9zZWw6CXNlbGVjdCBt dXggb24gcnNjIGRlYnVnIGJ1cwotICovCi12b2lkIGRwdV9yc2NfZGVidWdfZHVtcCh1MzIgbXV4 X3NlbCk7Ci0KLS8qKgogICogZHNpX2N0cmxfZGVidWdfZHVtcCAtIGR1bXAgZHNpIGRlYnVnIGR1 bXAgc3RhdHVzCiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBkc2lfY3RybF9kZWJ1Z19kdW1wKHZv aWQpIHt9CkBAIC00MDcsMTAgKzQwMSw2IEBAIHN0YXRpYyBpbmxpbmUgaW50IGRwdV9ldnRsb2df Z2V0X2ZpbHRlcihzdHJ1Y3QgZHB1X2RiZ19ldnRsb2cgKmV2dGxvZywKIAlyZXR1cm4gLUVJTlZB TDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGRwdV9yc2NfZGVidWdfZHVtcCh1MzIgbXV4X3Nl bCkKLXsKLX0KLQogc3RhdGljIGlubGluZSB2b2lkIGRzaV9jdHJsX2RlYnVnX2R1bXAodm9pZCkK IHsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHB1X3Bvd2VyX2hhbmRsZS5j IGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcHVfcG93ZXJfaGFuZGxlLmMKaW5kZXggYTUyYmU4Ni4u NGUwZjM3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kcHVfcG93ZXJfaGFuZGxl LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcHVfcG93ZXJfaGFuZGxlLmMKQEAgLTI3LDcg KzI3LDYgQEAKICNpbmNsdWRlIDxsaW51eC9tc20tYnVzLWJvYXJkLmg+CiAjZW5kaWYKICNpbmNs dWRlIDxsaW51eC9kcHVfaW9fdXRpbC5oPgotI2luY2x1ZGUgPGxpbnV4L2RwdV9yc2MuaD4KIAog I2luY2x1ZGUgImRwdV9wb3dlcl9oYW5kbGUuaCIKICNpbmNsdWRlICJkcHVfdHJhY2UuaCIKQEAg LTU3LDMyICs1Niw2IEBAIHN0YXRpYyB2b2lkIGRwdV9wb3dlcl9ldmVudF90cmlnZ2VyX2xvY2tl ZChzdHJ1Y3QgZHB1X3Bvd2VyX2hhbmRsZSAqcGhhbmRsZSwKIAl9CiB9CiAKLXN0YXRpYyBpbnQg ZHB1X3Bvd2VyX3JzY191cGRhdGUoc3RydWN0IGRwdV9wb3dlcl9oYW5kbGUgKnBoYW5kbGUsIGJv b2wgZW5hYmxlKQotewotCXUzMiByc2Nfc3RhdGU7Ci0JaW50IHJldCA9IDA7Ci0KLQkvKiBjcmVh dGVzIHRoZSByc2MgY2xpZW50IG9uIHRoZSBmaXJzdCBlbmFibGUgKi8KLQlpZiAoIXBoYW5kbGUt PnJzY19jbGllbnRfaW5pdCkgewotCQlwaGFuZGxlLT5yc2NfY2xpZW50ID0gZHB1X3JzY19jbGll bnRfY3JlYXRlKERQVV9SU0NfSU5ERVgsCi0JCQkJImRwdV9wb3dlcl9oYW5kbGUiLCBmYWxzZSk7 Ci0JCWlmIChJU19FUlJfT1JfTlVMTChwaGFuZGxlLT5yc2NfY2xpZW50KSkgewotCQkJcHJfZGVi dWcoImRwdSByc2MgY2xpZW50IGNyZWF0ZSBmYWlsZWQgOiVsZFxuIiwKLQkJCQkJCVBUUl9FUlIo cGhhbmRsZS0+cnNjX2NsaWVudCkpOwotCQkJcGhhbmRsZS0+cnNjX2NsaWVudCA9IE5VTEw7Ci0J CX0KLQkJcGhhbmRsZS0+cnNjX2NsaWVudF9pbml0ID0gdHJ1ZTsKLQl9Ci0KLQlyc2Nfc3RhdGUg PSBlbmFibGUgPyBEUFVfUlNDX0NMS19TVEFURSA6IERQVV9SU0NfSURMRV9TVEFURTsKLQotCWlm IChwaGFuZGxlLT5yc2NfY2xpZW50KQotCQlyZXQgPSBkcHVfcnNjX2NsaWVudF9zdGF0ZV91cGRh dGUocGhhbmRsZS0+cnNjX2NsaWVudCwKLQkJCXJzY19zdGF0ZSwgTlVMTCwgRFBVX1JTQ19JTlZB TElEX0NSVENfSUQsIE5VTEwpOwotCi0JcmV0dXJuIHJldDsKLX0KLQogc3RydWN0IGRwdV9wb3dl cl9jbGllbnQgKmRwdV9wb3dlcl9jbGllbnRfY3JlYXRlKAogCXN0cnVjdCBkcHVfcG93ZXJfaGFu ZGxlICpwaGFuZGxlLCBjaGFyICpjbGllbnRfbmFtZSkKIHsKQEAgLTc2MSw5ICs3MzQsNiBAQCBp bnQgZHB1X3Bvd2VyX3Jlc291cmNlX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwK IAlJTklUX0xJU1RfSEVBRCgmcGhhbmRsZS0+cG93ZXJfY2xpZW50X2NsaXN0KTsKIAlJTklUX0xJ U1RfSEVBRCgmcGhhbmRsZS0+ZXZlbnRfbGlzdCk7CiAKLQlwaGFuZGxlLT5yc2NfY2xpZW50ID0g TlVMTDsKLQlwaGFuZGxlLT5yc2NfY2xpZW50X2luaXQgPSBmYWxzZTsKLQogCW11dGV4X2luaXQo JnBoYW5kbGUtPnBoYW5kbGVfbG9jayk7CiAKIAlyZXR1cm4gcmM7CkBAIC04NDAsOCArODEwLDYg QEAgdm9pZCBkcHVfcG93ZXJfcmVzb3VyY2VfZGVpbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ug KnBkZXYsCiAJbXAtPm51bV92cmVnID0gMDsKIAltcC0+bnVtX2NsayA9IDA7CiAKLQlpZiAocGhh bmRsZS0+cnNjX2NsaWVudCkKLQkJZHB1X3JzY19jbGllbnRfZGVzdHJveShwaGFuZGxlLT5yc2Nf Y2xpZW50KTsKIH0KIAogaW50IGRwdV9wb3dlcl9yZXNvdXJjZV9lbmFibGUoc3RydWN0IGRwdV9w b3dlcl9oYW5kbGUgKnBoYW5kbGUsCkBAIC05MDYsMjEgKzg3NCwxMiBAQCBpbnQgZHB1X3Bvd2Vy X3Jlc291cmNlX2VuYWJsZShzdHJ1Y3QgZHB1X3Bvd2VyX2hhbmRsZSAqcGhhbmRsZSwKIAkJCQln b3RvIGRhdGFfYnVzX2hkbF9lcnI7CiAJCQl9CiAJCX0KLQkJLyoKLQkJICogLSBXaGVuIHRoZSB0 YXJnZXQgaXMgUlNDQyBlbmFibGVkLCByZWd1bGF0b3Igc2hvdWxkCi0JCSAqICAgYmUgZW5hYmxl ZCBieSB0aGUgcy93IG9ubHkgZm9yIHRoZSBmaXJzdCB0aW1lIGR1cmluZwotCQkgKiAgIGJvb3R1 cC4gQWZ0ZXIgdGhhdCwgUlNDQyBoYXJkd2FyZSB0YWtlcyBjYXJlIG9mIGVuYWJsaW5nLwotCQkg KiAgIGRpc2FibGluZyBpdC4KLQkJICogLSBXaGVuIHRoZSB0YXJnZXQgaXMgbm90IFJTQ0MgZW5h YmxlZCwgcmVndWxhdG9yIHNob3VsZAotCQkgKiAgIGJlIHRvdGFsbHkgaGFuZGxlZCBieSB0aGUg c29mdHdhcmUuCi0JCSAqLwotCQlpZiAoIXBoYW5kbGUtPnJzY19jbGllbnQpIHsKLQkJCXJjID0g bXNtX2Rzc19lbmFibGVfdnJlZyhtcC0+dnJlZ19jb25maWcsIG1wLT5udW1fdnJlZywKLQkJCQkJ CQkJCWVuYWJsZSk7Ci0JCQlpZiAocmMpIHsKLQkJCQlwcl9lcnIoImZhaWxlZCB0byBlbmFibGUg dnJlZ3MgcmM9JWRcbiIsIHJjKTsKLQkJCQlnb3RvIHZyZWdfZXJyOwotCQkJfQorCisJCXJjID0g bXNtX2Rzc19lbmFibGVfdnJlZyhtcC0+dnJlZ19jb25maWcsIG1wLT5udW1fdnJlZywKKwkJCQkJ CQkJZW5hYmxlKTsKKwkJaWYgKHJjKSB7CisJCQlwcl9lcnIoImZhaWxlZCB0byBlbmFibGUgdnJl Z3MgcmM9JWRcbiIsIHJjKTsKKwkJCWdvdG8gdnJlZ19lcnI7CiAJCX0KIAogCQlyYyA9IGRwdV9w b3dlcl9yZWdfYnVzX3VwZGF0ZShwaGFuZGxlLT5yZWdfYnVzX2hkbCwKQEAgLTkzMCwxMiArODg5 LDYgQEAgaW50IGRwdV9wb3dlcl9yZXNvdXJjZV9lbmFibGUoc3RydWN0IGRwdV9wb3dlcl9oYW5k bGUgKnBoYW5kbGUsCiAJCQlnb3RvIHJlZ19idXNfaGRsX2VycjsKIAkJfQogCi0JCXJjID0gZHB1 X3Bvd2VyX3JzY191cGRhdGUocGhhbmRsZSwgdHJ1ZSk7Ci0JCWlmIChyYykgewotCQkJcHJfZXJy KCJmYWlsZWQgdG8gdXBkYXRlIHJzY1xuIik7Ci0JCQlnb3RvIHJzY19lcnI7Ci0JCX0KLQogCQly YyA9IG1zbV9kc3NfZW5hYmxlX2NsayhtcC0+Y2xrX2NvbmZpZywgbXAtPm51bV9jbGssIGVuYWJs ZSk7CiAJCWlmIChyYykgewogCQkJcHJfZXJyKCJjbG9jayBlbmFibGUgZmFpbGVkIHJjOiVkXG4i LCByYyk7CkBAIC05NTEsMTQgKzkwNCwxMSBAQCBpbnQgZHB1X3Bvd2VyX3Jlc291cmNlX2VuYWJs ZShzdHJ1Y3QgZHB1X3Bvd2VyX2hhbmRsZSAqcGhhbmRsZSwKIAogCQltc21fZHNzX2VuYWJsZV9j bGsobXAtPmNsa19jb25maWcsIG1wLT5udW1fY2xrLCBlbmFibGUpOwogCi0JCWRwdV9wb3dlcl9y c2NfdXBkYXRlKHBoYW5kbGUsIGZhbHNlKTsKLQogCQlkcHVfcG93ZXJfcmVnX2J1c191cGRhdGUo cGhhbmRsZS0+cmVnX2J1c19oZGwsCiAJCQkJCQkJbWF4X3VzZWNhc2VfbmR4KTsKIAotCQlpZiAo IXBoYW5kbGUtPnJzY19jbGllbnQpCi0JCQltc21fZHNzX2VuYWJsZV92cmVnKG1wLT52cmVnX2Nv bmZpZywgbXAtPm51bV92cmVnLAotCQkJCQkJCQkJZW5hYmxlKTsKKwkJbXNtX2Rzc19lbmFibGVf dnJlZyhtcC0+dnJlZ19jb25maWcsIG1wLT5udW1fdnJlZywKKwkJCQkJCQllbmFibGUpOwogCQlm b3IgKGkgPSAwIDsgaSA8IERQVV9QT1dFUl9IQU5ETEVfREJVU19JRF9NQVg7IGkrKykKIAkJCWRw dV9wb3dlcl9kYXRhX2J1c191cGRhdGUoJnBoYW5kbGUtPmRhdGFfYnVzX2hhbmRsZVtpXSwKIAkJ CQkJZW5hYmxlKTsKQEAgLTk2NywxMyArOTE3LDEyIEBAIGludCBkcHVfcG93ZXJfcmVzb3VyY2Vf ZW5hYmxlKHN0cnVjdCBkcHVfcG93ZXJfaGFuZGxlICpwaGFuZGxlLAogCQkJCURQVV9QT1dFUl9F VkVOVF9QT1NUX0RJU0FCTEUpOwogCX0KIAorCWdvdG8gZW5kOworCiBjbGtfZXJyOgotCWRwdV9w b3dlcl9yc2NfdXBkYXRlKHBoYW5kbGUsIGZhbHNlKTsKLXJzY19lcnI6CiAJZHB1X3Bvd2VyX3Jl Z19idXNfdXBkYXRlKHBoYW5kbGUtPnJlZ19idXNfaGRsLCBwcmV2X3VzZWNhc2VfbmR4KTsKIHJl Z19idXNfaGRsX2VycjoKLQlpZiAoIXBoYW5kbGUtPnJzY19jbGllbnQpCi0JCW1zbV9kc3NfZW5h YmxlX3ZyZWcobXAtPnZyZWdfY29uZmlnLCBtcC0+bnVtX3ZyZWcsIDApOworCW1zbV9kc3NfZW5h YmxlX3ZyZWcobXAtPnZyZWdfY29uZmlnLCBtcC0+bnVtX3ZyZWcsIDApOwogdnJlZ19lcnI6CiAJ Zm9yIChpID0gMCA7IGkgPCBEUFVfUE9XRVJfSEFORExFX0RCVVNfSURfTUFYOyBpKyspCiAJCWRw dV9wb3dlcl9kYXRhX2J1c191cGRhdGUoJnBoYW5kbGUtPmRhdGFfYnVzX2hhbmRsZVtpXSwgMCk7 CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwdV9wb3dlcl9oYW5kbGUuaCBiL2Ry aXZlcnMvZ3B1L2RybS9tc20vZHB1X3Bvd2VyX2hhbmRsZS5oCmluZGV4IDI1YTAwYjEuLjFlZGFl NWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHB1X3Bvd2VyX2hhbmRsZS5oCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHB1X3Bvd2VyX2hhbmRsZS5oCkBAIC0xNTUsOCArMTU1 LDYgQEAgc3RydWN0IGRwdV9wb3dlcl9ldmVudCB7CiAgKiBAcmVnX2J1c19oZGw6IGN1cnJlbnQg cmVnaXN0ZXIgYnVzIGhhbmRsZQogICogQGRhdGFfYnVzX2hhbmRsZTogY29udGV4dCBzdHJ1Y3R1 cmUgZm9yIGRhdGEgYnVzIGNvbnRyb2wKICAqIEBldmVudF9saXN0OiBjdXJyZW50IHBvd2VyIGhh bmRsZSBldmVudCBsaXN0Ci0gKiBAcnNjX2NsaWVudDogZHB1IHJzYyBjbGllbnQgcG9pbnRlcgot ICogQHJzY19jbGllbnRfaW5pdDogYm9vbGVhbiB0byBjb250cm9sIHJzYyBjbGllbnQgY3JlYXRl CiAgKi8KIHN0cnVjdCBkcHVfcG93ZXJfaGFuZGxlIHsKIAlzdHJ1Y3QgZHNzX21vZHVsZV9wb3dl ciBtcDsKQEAgLTE2OCw4ICsxNjYsNiBAQCBzdHJ1Y3QgZHB1X3Bvd2VyX2hhbmRsZSB7CiAJc3Ry dWN0IGRwdV9wb3dlcl9kYXRhX2J1c19oYW5kbGUgZGF0YV9idXNfaGFuZGxlCiAJCVtEUFVfUE9X RVJfSEFORExFX0RCVVNfSURfTUFYXTsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGV2ZW50X2xpc3Q7Ci0J c3RydWN0IGRwdV9yc2NfY2xpZW50ICpyc2NfY2xpZW50OwotCWJvb2wgcnNjX2NsaWVudF9pbml0 OwogfTsKIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwdV9yc2MuYyBi L2RyaXZlcnMvZ3B1L2RybS9tc20vZHB1X3JzYy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp bmRleCA2N2JmNzlkLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHB1X3JzYy5j CisrKyAvZGV2L251bGwKQEAgLTEsMTM2NyArMCwwIEBACi0vKiBDb3B5cmlnaHQgKGMpIDIwMTYt MjAxOCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog VGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu ZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAotICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVk IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlz IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQg V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv ZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls cy4KLSAqCi0gKi8KLQotI2RlZmluZSBwcl9mbXQoZm10KQkiW2RwdV9yc2M6JXM6JWRdOiAiIGZt dCwgX19mdW5jX18sIF9fTElORV9fCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNs dWRlIDxsaW51eC9kZWJ1Z2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvb2YuaD4KLSNpbmNsdWRlIDxs aW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+Ci0jaW5jbHVkZSA8 bGludXgvY29tcG9uZW50Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxp bnV4L211dGV4Lmg+Ci0jaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KLSNpbmNsdWRlIDxs aW51eC9tb2R1bGUuaD4KLQotI2luY2x1ZGUgPHNvYy9xY29tL3JwbWguaD4KLSNpbmNsdWRlIDxk cm0vZHJtUC5oPgotI2luY2x1ZGUgPGRybS9kcm1faXJxLmg+Ci0jaW5jbHVkZSAiZHB1X3JzY19w cml2LmgiCi0jaW5jbHVkZSAiZHB1X2RiZy5oIgotCi0jZGVmaW5lIERQVV9SU0NfRFJWX0RCR19O QU1FCQkiZHB1X3JzY19kcnYiCi0jZGVmaW5lIERQVV9SU0NfV1JBUFBFUl9EQkdfTkFNRQkiZHB1 X3JzY193cmFwcGVyIgotCi0vKiB3b3JzdCBjYXNlIHRpbWUgdG8gZXhlY3V0ZSB0aGUgb25lIHRj cyB2b3RlKHNsZWVwL3dha2UpIC0gfjFtcyAqLwotI2RlZmluZSBTSU5HTEVfVENTX0VYRUNVVElP Tl9USU1FCQkJCTEwNjQwMDAKLQotLyogdGhpcyB0aW1lIGlzIH4xbXMgLSBvbmx5IHdha2UgdGNz IGluIGFueSBtb2RlICovCi0jZGVmaW5lIFJTQ19CQUNLT0ZGX1RJTUVfTlMJCSAoU0lOR0xFX1RD U19FWEVDVVRJT05fVElNRSArIDEwMCkKLQotLyogdGhpcyB0aW1lIGlzIH4xbXMgLSBvbmx5IHdh a2UgVENTIGluIG1vZGUtMCAqLwotI2RlZmluZSBSU0NfTU9ERV9USFJFU0hPTERfVElNRV9JTl9O UwkoU0lOR0xFX1RDU19FWEVDVVRJT05fVElNRSArIDEwMCkKLQotLyogdGhpcyB0aW1lIGlzIH4y bXMgLSBzbGVlcCsgd2FrZSBUQ1MgaW4gbW9kZS0xICovCi0jZGVmaW5lIFJTQ19USU1FX1NMT1Rf MF9OUwkJKChTSU5HTEVfVENTX0VYRUNVVElPTl9USU1FICogMikgKyAxMDApCi0KLSNkZWZpbmUg REVGQVVMVF9QQU5FTF9GUFMJCTYwCi0jZGVmaW5lIERFRkFVTFRfUEFORUxfSklUVEVSX05VTUVS QVRPUgkyCi0jZGVmaW5lIERFRkFVTFRfUEFORUxfSklUVEVSX0RFTk9NSU5BVE9SIDEKLSNkZWZp bmUgREVGQVVMVF9QQU5FTF9QUkVGSUxMX0xJTkVTCTI1Ci0jZGVmaW5lIERFRkFVTFRfUEFORUxf VlRPVEFMCQkoNDgwICsgREVGQVVMVF9QQU5FTF9QUkVGSUxMX0xJTkVTKQotI2RlZmluZSBUSUNL U19JTl9OQU5PX1NFQ09ORAkJMTAwMDAwMDAwMAotCi0jZGVmaW5lIE1BWF9CVUZGRVJfU0laRSAy NTYKLQotI2RlZmluZSBUUllfQ01EX01PREVfU1dJVENICQkweEZGRkYKLSNkZWZpbmUgVFJZX0NM S19NT0RFX1NXSVRDSAkJMHhGRkZFCi0jZGVmaW5lIFNUQVRFX1VQREFURV9OT1RfQUxMT1dFRAkw eEZGRkQKLQotLyogUHJpbWFyeSBwYW5lbCB3b3JzdCBjYXNlIFZTWU5DIGV4cGVjdGVkIHRvIGJl IG5vIGxlc3MgdGhhbiAzMGZwcyAqLwotI2RlZmluZSBQUklNQVJZX1ZCTEFOS19XT1JTVF9DQVNF X01TIDM0Ci0KLXN0YXRpYyBzdHJ1Y3QgZHB1X3JzY19wcml2ICpyc2NfcHJ2X2xpc3RbTUFYX1JT Q19DT1VOVF07Ci0KLS8qKgotICogZHB1X3JzY19jbGllbnRfY3JlYXRlKCkgLSBjcmVhdGUgdGhl IGNsaWVudCBmb3IgZHB1IHJzYy4KLSAqIERpZmZlcmVudCBkaXNwbGF5cyBsaWtlIERTSSwgSERN SSwgRFAsIFdCLCBldGMgc2hvdWxkIGNhbGwgdGhpcwotICogYXBpIHRvIHJlZ2lzdGVyIHRoZWly IHZvdGUgZm9yIHJwbWguIFRoZXkgc3RpbGwgbmVlZCB0byB2b3RlIGZvcgotICogcG93ZXIgaGFu ZGxlIHRvIGdldCB0aGUgY2xvY2tzLgotCi0gKiBAcnNjX2luZGV4OiAgIEEgY2xpZW50IHdpbGwg YmUgY3JlYXRlZCBvbiB0aGlzIFJTQy4gQXMgb2Ygbm93IG9ubHkKLSAqICAgICAgICAgICAgICAg RFBVX1JTQ19JTkRFWCBpcyB2YWxpZCByc2MgaW5kZXguCi0gKiBAbmFtZToJIENhbGxlciBuZWVk cyB0byBwcm92aWRlIHNvbWUgdmFsaWQgc3RyaW5nIHRvIGlkZW50aWZ5Ci0gKiAgICAgICAgICAg ICAgIHRoZSBjbGllbnQuICJwcmltYXJ5IiwgImRwIiwgImhkbWkiIGFyZSBzdWdnZXN0ZWQgbmFt ZS4KLSAqIEBpc19wcmltYXJ5OgkgQ2FsbGVyIG5lZWRzIHRvIHByb3ZpZGUgaW5mb3JtYXRpb24g aWYgY2xpZW50IGlzIHByaW1hcnkKLSAqICAgICAgICAgICAgICAgb3Igbm90LiBQcmltYXJ5IGNs aWVudCB2b3RlcyB3aWxsIGJlIHJlZGlyZWN0ZWQgdG8KLSAqICAgICAgICAgICAgICAgZGlzcGxh eSByc2MuCi0gKgotICogUmV0dXJuOiBjbGllbnQgbm9kZSBwb2ludGVyLgotICovCi1zdHJ1Y3Qg ZHB1X3JzY19jbGllbnQgKmRwdV9yc2NfY2xpZW50X2NyZWF0ZSh1MzIgcnNjX2luZGV4LCBjaGFy ICpjbGllbnRfbmFtZSwKLQlib29sIGlzX3ByaW1hcnlfY2xpZW50KQotewotCXN0cnVjdCBkcHVf cnNjX2NsaWVudCAqY2xpZW50OwotCXN0cnVjdCBkcHVfcnNjX3ByaXYgKnJzYzsKLQlzdGF0aWMg aW50IGlkOwotCi0JaWYgKCFjbGllbnRfbmFtZSkgewotCQlwcl9lcnIoImNsaWVudCBuYW1lIGlz IG51bGwtIG5vdCBzdXBwb3J0ZWRcbiIpOwotCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKLQl9 IGVsc2UgaWYgKHJzY19pbmRleCA+PSBNQVhfUlNDX0NPVU5UKSB7Ci0JCXByX2VycigiaW52YWxp ZCByc2MgaW5kZXhcbiIpOwotCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKLQl9IGVsc2UgaWYg KCFyc2NfcHJ2X2xpc3RbcnNjX2luZGV4XSkgewotCQlwcl9lcnIoInJzYyBub3QgcHJvYmVkIHll dCBvciBub3QgYXZhaWxhYmxlXG4iKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JcnNjID0gcnNj X3Bydl9saXN0W3JzY19pbmRleF07Ci0JY2xpZW50ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRw dV9yc2NfY2xpZW50KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFjbGllbnQpCi0JCXJldHVybiBFUlJf UFRSKC1FTk9NRU0pOwotCi0JbXV0ZXhfbG9jaygmcnNjLT5jbGllbnRfbG9jayk7Ci0Jc3RybGNw eShjbGllbnQtPm5hbWUsIGNsaWVudF9uYW1lLCBNQVhfUlNDX0NMSUVOVF9OQU1FX0xFTik7Ci0J Y2xpZW50LT5jdXJyZW50X3N0YXRlID0gRFBVX1JTQ19JRExFX1NUQVRFOwotCWNsaWVudC0+cnNj X2luZGV4ID0gcnNjX2luZGV4OwotCWNsaWVudC0+aWQgPSBpZDsKLQlpZiAoaXNfcHJpbWFyeV9j bGllbnQpCi0JCXJzYy0+cHJpbWFyeV9jbGllbnQgPSBjbGllbnQ7Ci0JcHJfZGVidWcoImNsaWVu dCAlcyByc2MgaW5kZXg6JWQgcHJpbWFyeTolZFxuIiwgY2xpZW50X25hbWUsCi0JCQkJCQlyc2Nf aW5kZXgsIGlzX3ByaW1hcnlfY2xpZW50KTsKLQotCWxpc3RfYWRkKCZjbGllbnQtPmxpc3QsICZy c2MtPmNsaWVudF9saXN0KTsKLQlpZCsrOwotCW11dGV4X3VubG9jaygmcnNjLT5jbGllbnRfbG9j ayk7Ci0KLQlyZXR1cm4gY2xpZW50OwotfQotRVhQT1JUX1NZTUJPTChkcHVfcnNjX2NsaWVudF9j cmVhdGUpOwotCi0vKioKLSAqIGRwdV9yc2NfY2xpZW50X2Rlc3Ryb3koKSAtIERlc3Ryb3kgdGhl IGRwdSByc2MgY2xpZW50LgotICoKLSAqIEBjbGllbnQ6CSBDbGllbnQgcG9pbnRlciBwcm92aWRl ZCBieSBkcHVfcnNjX2NsaWVudF9jcmVhdGUoKS4KLSAqCi0gKiBSZXR1cm46IG5vbmUKLSAqLwot dm9pZCBkcHVfcnNjX2NsaWVudF9kZXN0cm95KHN0cnVjdCBkcHVfcnNjX2NsaWVudCAqY2xpZW50 KQotewotCXN0cnVjdCBkcHVfcnNjX3ByaXYgKnJzYzsKLQllbnVtIGRwdV9yc2Nfc3RhdGUgc3Rh dGU7Ci0KLQlpZiAoIWNsaWVudCkgewotCQlwcl9kZWJ1ZygiaW52YWxpZCBjbGllbnRcbiIpOwot CQlnb3RvIGVuZDsKLQl9IGVsc2UgaWYgKGNsaWVudC0+cnNjX2luZGV4ID49IE1BWF9SU0NfQ09V TlQpIHsKLQkJcHJfZXJyKCJpbnZhbGlkIHJzYyBpbmRleFxuIik7Ci0JCWdvdG8gZW5kOwotCX0K LQotCXByX2RlYnVnKCJjbGllbnQgJXMgZGVzdHJveWVkXG4iLCBjbGllbnQtPm5hbWUpOwotCXJz YyA9IHJzY19wcnZfbGlzdFtjbGllbnQtPnJzY19pbmRleF07Ci0JaWYgKCFyc2MpCi0JCWdvdG8g ZW5kOwotCi0JbXV0ZXhfbG9jaygmcnNjLT5jbGllbnRfbG9jayk7Ci0Jc3RhdGUgPSBjbGllbnQt PmN1cnJlbnRfc3RhdGU7Ci0JbXV0ZXhfdW5sb2NrKCZyc2MtPmNsaWVudF9sb2NrKTsKLQotCWlm IChzdGF0ZSAhPSBEUFVfUlNDX0lETEVfU1RBVEUpIHsKLQkJaW50IHdhaXRfdmJsYW5rX2NydGNf aWQ7Ci0KLQkJZHB1X3JzY19jbGllbnRfc3RhdGVfdXBkYXRlKGNsaWVudCwgRFBVX1JTQ19JRExF X1NUQVRFLCBOVUxMLAotCQkJCURQVV9SU0NfSU5WQUxJRF9DUlRDX0lELCAmd2FpdF92Ymxhbmtf Y3J0Y19pZCk7Ci0KLQkJLyogaWYgdmJsYW5rIHdhaXQgcmVxdWlyZWQgYXQgc2h1dGRvd24sIHVz ZSBhIHNpbXBsZSBzbGVlcCAqLwotCQlpZiAod2FpdF92YmxhbmtfY3J0Y19pZCAhPSBEUFVfUlND X0lOVkFMSURfQ1JUQ19JRCkgewotCQkJcHJfZXJyKCJ1bmV4cGVjdGVkIHNsZWVwIHJlcXVpcmVk IG9uIGNydGMgJWQgYXQgcnNjIGNsaWVudCBkZXN0cm95XG4iLAotCQkJCQl3YWl0X3ZibGFua19j cnRjX2lkKTsKLQkJCURQVV9FVlQzMihjbGllbnQtPmlkLCBzdGF0ZSwgcnNjLT5jdXJyZW50X3N0 YXRlLAotCQkJCQljbGllbnQtPmNydGNfaWQsIHdhaXRfdmJsYW5rX2NydGNfaWQsCi0JCQkJCURQ VV9FVlRMT0dfRVJST1IpOwotCQkJbXNsZWVwKFBSSU1BUllfVkJMQU5LX1dPUlNUX0NBU0VfTVMp OwotCQl9Ci0JfQotCW11dGV4X2xvY2soJnJzYy0+Y2xpZW50X2xvY2spOwotCWxpc3RfZGVsX2lu aXQoJmNsaWVudC0+bGlzdCk7Ci0JbXV0ZXhfdW5sb2NrKCZyc2MtPmNsaWVudF9sb2NrKTsKLQot CWtmcmVlKGNsaWVudCk7Ci1lbmQ6Ci0JcmV0dXJuOwotfQotRVhQT1JUX1NZTUJPTChkcHVfcnNj X2NsaWVudF9kZXN0cm95KTsKLQotc3RydWN0IGRwdV9yc2NfZXZlbnQgKmRwdV9yc2NfcmVnaXN0 ZXJfZXZlbnQoaW50IHJzY19pbmRleCwgdWludDMyX3QgZXZlbnRfdHlwZSwKLQkJdm9pZCAoKmNi X2Z1bmMpKHVpbnQzMl90IGV2ZW50X3R5cGUsIHZvaWQgKnVzciksIHZvaWQgKnVzcikKLXsKLQlz dHJ1Y3QgZHB1X3JzY19ldmVudCAqZXZ0OwotCXN0cnVjdCBkcHVfcnNjX3ByaXYgKnJzYzsKLQot CWlmIChyc2NfaW5kZXggPj0gTUFYX1JTQ19DT1VOVCkgewotCQlwcl9lcnIoImludmFsaWQgcnNj IGluZGV4OiVkXG4iLCByc2NfaW5kZXgpOwotCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKLQl9 IGVsc2UgaWYgKCFyc2NfcHJ2X2xpc3RbcnNjX2luZGV4XSkgewotCQlwcl9lcnIoInJzYyBpZHg6 JWQgbm90IHByb2JlZCB5ZXQgb3Igbm90IGF2YWlsYWJsZVxuIiwKLQkJCQkJCQkJcnNjX2luZGV4 KTsKLQkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Ci0JfSBlbHNlIGlmICghY2JfZnVuYyB8fCAh ZXZlbnRfdHlwZSkgewotCQlwcl9lcnIoIm5vIGV2ZW50IG9yIGNiIGZ1bmNcbiIpOwotCQlyZXR1 cm4gRVJSX1BUUigtRUlOVkFMKTsKLQl9Ci0KLQlyc2MgPSByc2NfcHJ2X2xpc3RbcnNjX2luZGV4 XTsKLQlldnQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZHB1X3JzY19ldmVudCksIEdGUF9LRVJO RUwpOwotCWlmICghZXZ0KQotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKLQotCWV2dC0+ZXZl bnRfdHlwZSA9IGV2ZW50X3R5cGU7Ci0JZXZ0LT5yc2NfaW5kZXggPSByc2NfaW5kZXg7Ci0JZXZ0 LT51c3IgPSB1c3I7Ci0JZXZ0LT5jYl9mdW5jID0gY2JfZnVuYzsKLQlwcl9kZWJ1ZygiZXZlbnQg cmVnaXN0ZXIgdHlwZTolZCByc2MgaW5kZXg6JWRcbiIsCi0JCQkJCQlldmVudF90eXBlLCByc2Nf aW5kZXgpOwotCi0JbXV0ZXhfbG9jaygmcnNjLT5jbGllbnRfbG9jayk7Ci0JbGlzdF9hZGQoJmV2 dC0+bGlzdCwgJnJzYy0+ZXZlbnRfbGlzdCk7Ci0JbXV0ZXhfdW5sb2NrKCZyc2MtPmNsaWVudF9s b2NrKTsKLQotCXJldHVybiBldnQ7Ci19Ci1FWFBPUlRfU1lNQk9MKGRwdV9yc2NfcmVnaXN0ZXJf ZXZlbnQpOwotCi12b2lkIGRwdV9yc2NfdW5yZWdpc3Rlcl9ldmVudChzdHJ1Y3QgZHB1X3JzY19l dmVudCAqZXZlbnQpCi17Ci0Jc3RydWN0IGRwdV9yc2NfcHJpdiAqcnNjOwotCi0JaWYgKCFldmVu dCkgewotCQlwcl9kZWJ1ZygiaW52YWxpZCBldmVudCBjbGllbnRcbiIpOwotCQlnb3RvIGVuZDsK LQl9IGVsc2UgaWYgKGV2ZW50LT5yc2NfaW5kZXggPj0gTUFYX1JTQ19DT1VOVCkgewotCQlwcl9l cnIoImludmFsaWQgcnNjIGluZGV4XG4iKTsKLQkJZ290byBlbmQ7Ci0JfQotCi0JcHJfZGVidWco ImV2ZW50IGNsaWVudCBkZXN0cm95ZWRcbiIpOwotCXJzYyA9IHJzY19wcnZfbGlzdFtldmVudC0+ cnNjX2luZGV4XTsKLQlpZiAoIXJzYykKLQkJZ290byBlbmQ7Ci0KLQltdXRleF9sb2NrKCZyc2Mt PmNsaWVudF9sb2NrKTsKLQlsaXN0X2RlbF9pbml0KCZldmVudC0+bGlzdCk7Ci0JbXV0ZXhfdW5s b2NrKCZyc2MtPmNsaWVudF9sb2NrKTsKLQotCWtmcmVlKGV2ZW50KTsKLWVuZDoKLQlyZXR1cm47 Ci19Ci1FWFBPUlRfU1lNQk9MKGRwdV9yc2NfdW5yZWdpc3Rlcl9ldmVudCk7Ci0KLWJvb2wgaXNf ZHB1X3JzY19hdmFpbGFibGUoaW50IHJzY19pbmRleCkKLXsKLQlpZiAocnNjX2luZGV4ID49IE1B WF9SU0NfQ09VTlQpIHsKLQkJcHJfZXJyKCJpbnZhbGlkIHJzYyBpbmRleDolZFxuIiwgcnNjX2lu ZGV4KTsKLQkJcmV0dXJuIGZhbHNlOwotCX0gZWxzZSBpZiAoIXJzY19wcnZfbGlzdFtyc2NfaW5k ZXhdKSB7Ci0JCXByX2VycigicnNjIGlkeDolZCBub3QgcHJvYmVkIHlldCBvciBub3QgYXZhaWxh YmxlXG4iLAotCQkJCQkJCQlyc2NfaW5kZXgpOwotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcmV0 dXJuIHRydWU7Ci19Ci1FWFBPUlRfU1lNQk9MKGlzX2RwdV9yc2NfYXZhaWxhYmxlKTsKLQotZW51 bSBkcHVfcnNjX3N0YXRlIGdldF9kcHVfcnNjX2N1cnJlbnRfc3RhdGUoaW50IHJzY19pbmRleCkK LXsKLQlzdHJ1Y3QgZHB1X3JzY19wcml2ICpyc2M7Ci0KLQlpZiAocnNjX2luZGV4ID49IE1BWF9S U0NfQ09VTlQpIHsKLQkJcHJfZXJyKCJpbnZhbGlkIHJzYyBpbmRleDolZFxuIiwgcnNjX2luZGV4 KTsKLQkJcmV0dXJuIERQVV9SU0NfSURMRV9TVEFURTsKLQl9IGVsc2UgaWYgKCFyc2NfcHJ2X2xp c3RbcnNjX2luZGV4XSkgewotCQlwcl9lcnIoInJzYyBpZHg6JWQgbm90IHByb2JlZCB5ZXQgb3Ig bm90IGF2YWlsYWJsZVxuIiwKLQkJCQkJCQkJcnNjX2luZGV4KTsKLQkJcmV0dXJuIERQVV9SU0Nf SURMRV9TVEFURTsKLQl9Ci0KLQlyc2MgPSByc2NfcHJ2X2xpc3RbcnNjX2luZGV4XTsKLQlyZXR1 cm4gcnNjLT5jdXJyZW50X3N0YXRlOwotfQotRVhQT1JUX1NZTUJPTChnZXRfZHB1X3JzY19jdXJy ZW50X3N0YXRlKTsKLQotc3RhdGljIGludCBkcHVfcnNjX2Nsa19lbmFibGUoc3RydWN0IGRwdV9w b3dlcl9oYW5kbGUgKnBoYW5kbGUsCi0Jc3RydWN0IGRwdV9wb3dlcl9jbGllbnQgKnBjbGllbnQs IGJvb2wgZW5hYmxlKQotewotCWludCByYyA9IDA7Ci0Jc3RydWN0IGRzc19tb2R1bGVfcG93ZXIg Km1wOwotCi0JaWYgKCFwaGFuZGxlIHx8ICFwY2xpZW50KSB7Ci0JCXByX2VycigiaW52YWxpZCBp bnB1dCBhcmd1bWVudFxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCW1wID0gJnBoYW5k bGUtPm1wOwotCi0JaWYgKGVuYWJsZSkKLQkJcGNsaWVudC0+cmVmY291bnQrKzsKLQllbHNlIGlm IChwY2xpZW50LT5yZWZjb3VudCkKLQkJcGNsaWVudC0+cmVmY291bnQtLTsKLQotCWlmIChwY2xp ZW50LT5yZWZjb3VudCkKLQkJcGNsaWVudC0+dXNlY2FzZV9uZHggPSBWT1RFX0lOREVYX0xPVzsK LQllbHNlCi0JCXBjbGllbnQtPnVzZWNhc2VfbmR4ID0gVk9URV9JTkRFWF9ESVNBQkxFOwotCi0J aWYgKHBoYW5kbGUtPmN1cnJlbnRfdXNlY2FzZV9uZHggPT0gcGNsaWVudC0+dXNlY2FzZV9uZHgp Ci0JCWdvdG8gZW5kOwotCi0JaWYgKGVuYWJsZSkgewotCQlyYyA9IG1zbV9kc3NfZW5hYmxlX2Ns ayhtcC0+Y2xrX2NvbmZpZywgbXAtPm51bV9jbGssIGVuYWJsZSk7Ci0JCWlmIChyYykgewotCQkJ cHJfZXJyKCJjbG9jayBlbmFibGUgZmFpbGVkIHJjOiVkXG4iLCByYyk7Ci0JCQlnb3RvIGVuZDsK LQkJfQotCX0gZWxzZSB7Ci0JCW1zbV9kc3NfZW5hYmxlX2NsayhtcC0+Y2xrX2NvbmZpZywgbXAt Pm51bV9jbGssIGVuYWJsZSk7Ci0JfQotCi0JcGhhbmRsZS0+Y3VycmVudF91c2VjYXNlX25keCA9 IHBjbGllbnQtPnVzZWNhc2VfbmR4OwotCi1lbmQ6Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMg dTMyIGRwdV9yc2NfdGltZXJfY2FsY3VsYXRlKHN0cnVjdCBkcHVfcnNjX3ByaXYgKnJzYywKLQlz dHJ1Y3QgZHB1X3JzY19jbWRfY29uZmlnICpjbWRfY29uZmlnKQotewotCWNvbnN0IHUzMiBjeG9f cGVyaW9kX25zID0gNTI7Ci0JdTY0IHJzY19iYWNrb2ZmX3RpbWVfbnMgPSBSU0NfQkFDS09GRl9U SU1FX05TOwotCXU2NCByc2NfbW9kZV90aHJlc2hvbGRfdGltZV9ucyA9IFJTQ19NT0RFX1RIUkVT SE9MRF9USU1FX0lOX05TOwotCXU2NCByc2NfdGltZV9zbG90XzBfbnMgPSBSU0NfVElNRV9TTE9U XzBfTlM7Ci0JdTY0IHJzY190aW1lX3Nsb3RfMV9uczsKLQljb25zdCB1NjQgcGRjX2ppdHRlciA9 IDIwOyAvKiAyMCUgbW9yZSAqLwotCi0JdTY0IGZyYW1lX3RpbWVfbnMsIGZyYW1lX2ppdHRlcjsK LQl1NjQgbGluZV90aW1lX25zLCBwcmVmaWxsX3RpbWVfbnM7Ci0JdTY0IHBkY19iYWNrb2ZmX3Rp bWVfbnM7Ci0JczY0IHRvdGFsOwotCWludCByZXQgPSAwOwotCi0JaWYgKGNtZF9jb25maWcpCi0J CW1lbWNweSgmcnNjLT5jbWRfY29uZmlnLCBjbWRfY29uZmlnLCBzaXplb2YoKmNtZF9jb25maWcp KTsKLQotCS8qIGNhbGN1bGF0ZSBmb3IgNjQweDQ4MCA2MCBmcHMgcmVzb2x1dGlvbiBieSBkZWZh dWx0ICovCi0JaWYgKCFyc2MtPmNtZF9jb25maWcuZnBzKQotCQlyc2MtPmNtZF9jb25maWcuZnBz ID0gREVGQVVMVF9QQU5FTF9GUFM7Ci0JaWYgKCFyc2MtPmNtZF9jb25maWcuaml0dGVyX251bWVy KQotCQlyc2MtPmNtZF9jb25maWcuaml0dGVyX251bWVyID0gREVGQVVMVF9QQU5FTF9KSVRURVJf TlVNRVJBVE9SOwotCWlmICghcnNjLT5jbWRfY29uZmlnLmppdHRlcl9kZW5vbSkKLQkJcnNjLT5j bWRfY29uZmlnLmppdHRlcl9kZW5vbSA9IERFRkFVTFRfUEFORUxfSklUVEVSX0RFTk9NSU5BVE9S OwotCWlmICghcnNjLT5jbWRfY29uZmlnLnZ0b3RhbCkKLQkJcnNjLT5jbWRfY29uZmlnLnZ0b3Rh bCA9IERFRkFVTFRfUEFORUxfVlRPVEFMOwotCWlmICghcnNjLT5jbWRfY29uZmlnLnByZWZpbGxf bGluZXMpCi0JCXJzYy0+Y21kX2NvbmZpZy5wcmVmaWxsX2xpbmVzID0gREVGQVVMVF9QQU5FTF9Q UkVGSUxMX0xJTkVTOwotCXByX2RlYnVnKCJmcmFtZSBmcHM6JWQgaml0dGVyX251bWVyOiVkIGpp dHRlcl9kZW5vbTolZCB2dG90YWw6JWQgcHJlZmlsbCBsaW5lczolZFxuIiwKLQkJcnNjLT5jbWRf Y29uZmlnLmZwcywgcnNjLT5jbWRfY29uZmlnLmppdHRlcl9udW1lciwKLQkJcnNjLT5jbWRfY29u ZmlnLmppdHRlcl9kZW5vbSwgcnNjLT5jbWRfY29uZmlnLnZ0b3RhbCwKLQkJcnNjLT5jbWRfY29u ZmlnLnByZWZpbGxfbGluZXMpOwotCi0JLyogMSBuYW5vIHNlY29uZCAqLwotCWZyYW1lX3RpbWVf bnMgPSBUSUNLU19JTl9OQU5PX1NFQ09ORDsKLQlmcmFtZV90aW1lX25zID0gZGl2X3U2NChmcmFt ZV90aW1lX25zLCByc2MtPmNtZF9jb25maWcuZnBzKTsKLQotCWZyYW1lX2ppdHRlciA9IGZyYW1l X3RpbWVfbnMgKiByc2MtPmNtZF9jb25maWcuaml0dGVyX251bWVyOwotCWZyYW1lX2ppdHRlciA9 IGRpdl91NjQoZnJhbWVfaml0dGVyLCByc2MtPmNtZF9jb25maWcuaml0dGVyX2Rlbm9tKTsKLQkv KiBjb252ZXJ0IGl0IHRvIHBlcmNlbnRhZ2UgKi8KLQlmcmFtZV9qaXR0ZXIgPSBkaXZfdTY0KGZy YW1lX2ppdHRlciwgMTAwKTsKLQotCWxpbmVfdGltZV9ucyA9IGZyYW1lX3RpbWVfbnM7Ci0JbGlu ZV90aW1lX25zID0gZGl2X3U2NChsaW5lX3RpbWVfbnMsIHJzYy0+Y21kX2NvbmZpZy52dG90YWwp OwotCXByZWZpbGxfdGltZV9ucyA9IGxpbmVfdGltZV9ucyAqIHJzYy0+Y21kX2NvbmZpZy5wcmVm aWxsX2xpbmVzOwotCi0JdG90YWwgPSBmcmFtZV90aW1lX25zIC0gZnJhbWVfaml0dGVyIC0gcHJl ZmlsbF90aW1lX25zOwotCWlmICh0b3RhbCA8IDApIHsKLQkJcHJfZXJyKCJpbnZhbGlkIHRvdGFs IHRpbWUgcGVyaW9kIHRpbWU6JWxsdSBqaXRlcl90aW1lOiVsbHUgYmxhbmtpbmcgdGltZTolbGx1 XG4iLAotCQkJZnJhbWVfdGltZV9ucywgZnJhbWVfaml0dGVyLCBwcmVmaWxsX3RpbWVfbnMpOwot CQl0b3RhbCA9IDA7Ci0JfQotCi0JdG90YWwgPSBkaXZfdTY0KHRvdGFsLCBjeG9fcGVyaW9kX25z KTsKLQlyc2MtPnRpbWVyX2NvbmZpZy5zdGF0aWNfd2FrZXVwX3RpbWVfbnMgPSB0b3RhbDsKLQot CXByX2RlYnVnKCJmcmFtZSB0aW1lOiVsbHUgZnJhbWUgaml0ZXJfdGltZTolbGx1XG4iLAotCQkJ ZnJhbWVfdGltZV9ucywgZnJhbWVfaml0dGVyKTsKLQlwcl9kZWJ1ZygibGluZSB0aW1lOiVsbHUg cHJlZmlsbCB0aW1lIHBzOiVsbHVcbiIsCi0JCQlsaW5lX3RpbWVfbnMsIHByZWZpbGxfdGltZV9u cyk7Ci0JcHJfZGVidWcoInN0YXRpYyB3YWtldXAgdGltZTolbGxkIGN4bzoldVxuIiwgdG90YWws IGN4b19wZXJpb2RfbnMpOwotCi0JcGRjX2JhY2tvZmZfdGltZV9ucyA9IHJzY19iYWNrb2ZmX3Rp bWVfbnM7Ci0JcnNjX2JhY2tvZmZfdGltZV9ucyA9IGRpdl91NjQocnNjX2JhY2tvZmZfdGltZV9u cywgY3hvX3BlcmlvZF9ucyk7Ci0JcnNjLT50aW1lcl9jb25maWcucnNjX2JhY2tvZmZfdGltZV9u cyA9ICh1MzIpIHJzY19iYWNrb2ZmX3RpbWVfbnM7Ci0KLQlwZGNfYmFja29mZl90aW1lX25zICo9 IHBkY19qaXR0ZXI7Ci0JcGRjX2JhY2tvZmZfdGltZV9ucyA9IGRpdl91NjQocGRjX2JhY2tvZmZf dGltZV9ucywgMTAwKTsKLQlyc2MtPnRpbWVyX2NvbmZpZy5wZGNfYmFja29mZl90aW1lX25zID0g KHUzMikgcGRjX2JhY2tvZmZfdGltZV9uczsKLQotCXJzY19tb2RlX3RocmVzaG9sZF90aW1lX25z ID0KLQkJCWRpdl91NjQocnNjX21vZGVfdGhyZXNob2xkX3RpbWVfbnMsIGN4b19wZXJpb2RfbnMp OwotCXJzYy0+dGltZXJfY29uZmlnLnJzY19tb2RlX3RocmVzaG9sZF90aW1lX25zCi0JCQkJCT0g KHUzMikgcnNjX21vZGVfdGhyZXNob2xkX3RpbWVfbnM7Ci0KLQkvKiB0aW1lX3Nsb3RfMCBmb3Ig bW9kZTAgbGF0ZW5jeSAqLwotCXJzY190aW1lX3Nsb3RfMF9ucyA9IGRpdl91NjQocnNjX3RpbWVf c2xvdF8wX25zLCBjeG9fcGVyaW9kX25zKTsKLQlyc2MtPnRpbWVyX2NvbmZpZy5yc2NfdGltZV9z bG90XzBfbnMgPSAodTMyKSByc2NfdGltZV9zbG90XzBfbnM7Ci0KLQkvKiB0aW1lX3Nsb3RfMSBm b3IgbW9kZTEgbGF0ZW5jeSAqLwotCXJzY190aW1lX3Nsb3RfMV9ucyA9IGZyYW1lX3RpbWVfbnM7 Ci0JcnNjX3RpbWVfc2xvdF8xX25zID0gZGl2X3U2NChyc2NfdGltZV9zbG90XzFfbnMsIGN4b19w ZXJpb2RfbnMpOwotCXJzYy0+dGltZXJfY29uZmlnLnJzY190aW1lX3Nsb3RfMV9ucyA9ICh1MzIp IHJzY190aW1lX3Nsb3RfMV9uczsKLQotCS8qIG1vZGUgMiBpcyBpbmZpbml0ZSAqLwotCXJzYy0+ dGltZXJfY29uZmlnLnJzY190aW1lX3Nsb3RfMl9ucyA9IDB4RkZGRkZGRkY7Ci0KLQkvKiB0aW1l ciB1cGRhdGUgc2hvdWxkIGJlIGNhbGxlZCB3aXRoIGNsaWVudCBjYWxsICovCi0JaWYgKGNtZF9j b25maWcgJiYgcnNjLT5od19vcHMudGltZXJfdXBkYXRlKSB7Ci0JCXJldCA9IHJzYy0+aHdfb3Bz LnRpbWVyX3VwZGF0ZShyc2MpOwotCQlpZiAocmV0KQotCQkJcHJfZXJyKCJkcHUgcnNjOiBodyB0 aW1lciB1cGRhdGUgZmFpbGVkIHJldDolZFxuIiwgcmV0KTsKLQkvKiByc2MgaW5pdCBzaG91bGQg YmUgY2FsbGVkIGR1cmluZyByc2MgcHJvYmUgLSBvbmUgdGltZSBvbmx5ICovCi0JfSBlbHNlIGlm IChyc2MtPmh3X29wcy5pbml0KSB7Ci0JCXJldCA9IHJzYy0+aHdfb3BzLmluaXQocnNjKTsKLQkJ aWYgKHJldCkKLQkJCXByX2VycigiZHB1IHJzYzogaHcgaW5pdCBmYWlsZWQgcmV0OiVkXG4iLCBy ZXQpOwotCX0KLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgZHB1X3JzY19zd2l0Y2hf dG9faWRsZShzdHJ1Y3QgZHB1X3JzY19wcml2ICpyc2MpCi17Ci0Jc3RydWN0IGRwdV9yc2NfY2xp ZW50ICpjbGllbnQ7Ci0JaW50IHJjID0gU1RBVEVfVVBEQVRFX05PVF9BTExPV0VEOwotCWJvb2wg aWRsZV9zd2l0Y2ggPSB0cnVlOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShjbGllbnQsICZyc2Mt PmNsaWVudF9saXN0LCBsaXN0KQotCQlpZiAoY2xpZW50LT5jdXJyZW50X3N0YXRlICE9IERQVV9S U0NfSURMRV9TVEFURSkgewotCQkJaWRsZV9zd2l0Y2ggPSBmYWxzZTsKLQkJCWJyZWFrOwotCQl9 Ci0KLQlpZiAoIWlkbGVfc3dpdGNoKSB7Ci0JCS8qKgotCQkgKiBmb2xsb3dpbmcgY29kZSBuZWVk cyB0byBydW4gdGhlIGxvb3AgdGhyb3VnaCBlYWNoCi0JCSAqIGNsaWVudCBiZWNhdXNlIHRoZXkg bWlnaHQgYmUgaW4gZGlmZmVyZW50IG9yZGVyCi0JCSAqIHNvcnRpbmcgaXMgbm90IHBvc3NpYmxl OyBvbmx5IHByZWZlcmVuY2UgaXMgYXZhaWxhYmxlCi0JCSAqLwotCi0JCS8qIGZpcnN0IGNoZWNr IGlmIGFueSB2aWQgY2xpZW50IGFjdGl2ZSAqLwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNsaWVu dCwgJnJzYy0+Y2xpZW50X2xpc3QsIGxpc3QpCi0JCQlpZiAoY2xpZW50LT5jdXJyZW50X3N0YXRl ID09IERQVV9SU0NfVklEX1NUQVRFKQotCQkJCXJldHVybiByYzsKLQotCQkvKiBub3cgdHJ5IGNt ZCBzdGF0ZSBzd2l0Y2ggKi8KLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShjbGllbnQsICZyc2MtPmNs aWVudF9saXN0LCBsaXN0KQotCQkJaWYgKGNsaWVudC0+Y3VycmVudF9zdGF0ZSA9PSBEUFVfUlND X0NNRF9TVEFURSkKLQkJCQlyZXR1cm4gVFJZX0NNRF9NT0RFX1NXSVRDSDsKLQotCQkvKiBub3cg dHJ5IGNsayBzdGF0ZSBzd2l0Y2ggKi8KLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShjbGllbnQsICZy c2MtPmNsaWVudF9saXN0LCBsaXN0KQotCQkJaWYgKGNsaWVudC0+Y3VycmVudF9zdGF0ZSA9PSBE UFVfUlNDX0NMS19TVEFURSkKLQkJCQlyZXR1cm4gVFJZX0NMS19NT0RFX1NXSVRDSDsKLQotCX0g ZWxzZSBpZiAocnNjLT5od19vcHMuc3RhdGVfdXBkYXRlKSB7Ci0JCXJjID0gcnNjLT5od19vcHMu c3RhdGVfdXBkYXRlKHJzYywgRFBVX1JTQ19JRExFX1NUQVRFKTsKLQkJaWYgKCFyYykKLQkJCXJw bWhfbW9kZV9zb2x2ZXJfc2V0KHJzYy0+ZGlzcF9yc2MsIHRydWUpOwotCX0KLQotCXJldHVybiBy YzsKLX0KLQotc3RhdGljIGludCBkcHVfcnNjX3N3aXRjaF90b19jbWQoc3RydWN0IGRwdV9yc2Nf cHJpdiAqcnNjLAotCXN0cnVjdCBkcHVfcnNjX2NtZF9jb25maWcgKmNvbmZpZywKLQlzdHJ1Y3Qg ZHB1X3JzY19jbGllbnQgKmNhbGxlcl9jbGllbnQsCi0JaW50ICp3YWl0X3ZibGFua19jcnRjX2lk KQotewotCXN0cnVjdCBkcHVfcnNjX2NsaWVudCAqY2xpZW50OwotCWludCByYyA9IFNUQVRFX1VQ REFURV9OT1RfQUxMT1dFRDsKLQotCWlmICghcnNjLT5wcmltYXJ5X2NsaWVudCkgewotCQlwcl9l cnIoInByaW1hcnkgY2xpZW50IG5vdCBhdmFpbGFibGUgZm9yIGNtZCBzdGF0ZSBzd2l0Y2hcbiIp OwotCQlyYyA9IC1FSU5WQUw7Ci0JCWdvdG8gZW5kOwotCX0gZWxzZSBpZiAoY2FsbGVyX2NsaWVu dCAhPSByc2MtPnByaW1hcnlfY2xpZW50KSB7Ci0JCXByX2VycigicHJpbWFyeSBjbGllbnQgc3Rh dGU6JWQgbm90IGNtZCBzdGF0ZSByZXF1ZXN0XG4iLAotCQkJcnNjLT5wcmltYXJ5X2NsaWVudC0+ Y3VycmVudF9zdGF0ZSk7Ci0JCXJjID0gLUVJTlZBTDsKLQkJZ290byBlbmQ7Ci0JfQotCi0JLyog dXBkYXRlIHRpbWVycyAtIG1pZ2h0IG5vdCBiZSBhdmFpbGFibGUgYXQgbmV4dCBzd2l0Y2ggKi8K LQlpZiAoY29uZmlnKQotCQlkcHVfcnNjX3RpbWVyX2NhbGN1bGF0ZShyc2MsIGNvbmZpZyk7Ci0K LQkvKioKLQkgKiByc2MgY2xpZW50cyBjYW4gc3RpbGwgc2VuZCBjb25maWcgYXQgYW55IHRpbWUu IElmIGEgY29uZmlnIGlzCi0JICogcmVjZWl2ZWQgZHVyaW5nIGNtZF9zdGF0ZSB0aGVuIHZzeW5j X3dhaXQgd2lsbCBleGVjdXRlIHdpdGggdGhlIGxvZ2ljCi0JICogYmVsb3cuIElmIGEgY29uZmln IGlzIHJlY2VpdmVkIHdoZW4gcnNjIGlzIGluIEFNQyBtb2RlOyBBIG1vZGUKLQkgKiBzd2l0Y2gg d2lsbCBkbyB0aGUgdnN5bmMgd2FpdC4gdXBkYXRlZCBjaGVja3Mgc3RpbGwgc3VwcG9ydCBhbGwg Y2FzZXMKLQkgKiBmb3IgZHluYW1pYyBtb2RlIHN3aXRjaCBhbmQgaW5saW5lIHJvdGF0aW9uLgot CSAqLwotCWlmIChyc2MtPmN1cnJlbnRfc3RhdGUgPT0gRFBVX1JTQ19DTURfU1RBVEUpIHsKLQkJ cmMgPSAwOwotCQlpZiAoY29uZmlnKQotCQkJZ290byB2c3luY193YWl0OwotCQllbHNlCi0JCQln b3RvIGVuZDsKLQl9Ci0KLQkvKiBhbnkgb25lIGNsaWVudCBpbiB2aWRlbyBzdGF0ZSBibG9ja3Mg dGhlIGNtZCBzdGF0ZSBzd2l0Y2ggKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNsaWVudCwgJnJz Yy0+Y2xpZW50X2xpc3QsIGxpc3QpCi0JCWlmIChjbGllbnQtPmN1cnJlbnRfc3RhdGUgPT0gRFBV X1JTQ19WSURfU1RBVEUpCi0JCQlnb3RvIGVuZDsKLQotCWlmIChyc2MtPmh3X29wcy5zdGF0ZV91 cGRhdGUpIHsKLQkJcmMgPSByc2MtPmh3X29wcy5zdGF0ZV91cGRhdGUocnNjLCBEUFVfUlNDX0NN RF9TVEFURSk7Ci0JCWlmICghcmMpCi0JCQlycG1oX21vZGVfc29sdmVyX3NldChyc2MtPmRpc3Bf cnNjLCB0cnVlKTsKLQl9Ci0KLXZzeW5jX3dhaXQ6Ci0JLyogaW5kaWNhdGUgd2FpdCBmb3IgdnN5 bmMgZm9yIHZpZCB0byBjbWQgc3RhdGUgc3dpdGNoICYgY2ZnIHVwZGF0ZSAqLwotCWlmICghcmMg JiYgKHJzYy0+Y3VycmVudF9zdGF0ZSA9PSBEUFVfUlNDX1ZJRF9TVEFURSB8fAotCQkJcnNjLT5j dXJyZW50X3N0YXRlID09IERQVV9SU0NfQ01EX1NUQVRFKSkgewotCQkvKiBjbGVhciBWU1lOQyB0 aW1lc3RhbXAgZm9yIGluZGljYXRpb24gd2hlbiB1cGRhdGUgY29tcGxldGVzICovCi0JCWlmIChy c2MtPmh3X29wcy5od192c3luYykKLQkJCXJzYy0+aHdfb3BzLmh3X3ZzeW5jKHJzYywgVlNZTkNf RU5BQkxFLCBOVUxMLCAwLCAwKTsKLQkJaWYgKCF3YWl0X3ZibGFua19jcnRjX2lkKSB7Ci0JCQlw cl9lcnIoImludmFsaWQgY3J0YyBpZCB3YWl0IHBvaW50ZXIsIGNsaWVudCAlZFxuIiwKLQkJCQkJ Y2FsbGVyX2NsaWVudC0+aWQpOwotCQkJRFBVX0VWVDMyKGNhbGxlcl9jbGllbnQtPmlkLCByc2Mt PmN1cnJlbnRfc3RhdGUsCi0JCQkJCWNhbGxlcl9jbGllbnQtPmNydGNfaWQsCi0JCQkJCXdhaXRf dmJsYW5rX2NydGNfaWQsIERQVV9FVlRMT0dfRVJST1IpOwotCQkJbXNsZWVwKFBSSU1BUllfVkJM QU5LX1dPUlNUX0NBU0VfTVMpOwotCQl9IGVsc2UgewotCQkJKndhaXRfdmJsYW5rX2NydGNfaWQg PSByc2MtPnByaW1hcnlfY2xpZW50LT5jcnRjX2lkOwotCQl9Ci0JfQotZW5kOgotCXJldHVybiBy YzsKLX0KLQotc3RhdGljIGludCBkcHVfcnNjX3N3aXRjaF90b19jbGsoc3RydWN0IGRwdV9yc2Nf cHJpdiAqcnNjLAotCQlpbnQgKndhaXRfdmJsYW5rX2NydGNfaWQpCi17Ci0Jc3RydWN0IGRwdV9y c2NfY2xpZW50ICpjbGllbnQ7Ci0JaW50IHJjID0gU1RBVEVfVVBEQVRFX05PVF9BTExPV0VEOwot Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShjbGllbnQsICZyc2MtPmNsaWVudF9saXN0LCBsaXN0KQot CQlpZiAoKGNsaWVudC0+Y3VycmVudF9zdGF0ZSA9PSBEUFVfUlNDX1ZJRF9TVEFURSkgfHwKLQkJ ICAgIChjbGllbnQtPmN1cnJlbnRfc3RhdGUgPT0gRFBVX1JTQ19DTURfU1RBVEUpKQotCQkJZ290 byBlbmQ7Ci0KLQlpZiAocnNjLT5od19vcHMuc3RhdGVfdXBkYXRlKSB7Ci0JCXJjID0gcnNjLT5o d19vcHMuc3RhdGVfdXBkYXRlKHJzYywgRFBVX1JTQ19DTEtfU1RBVEUpOwotCQlpZiAoIXJjKQot CQkJcnBtaF9tb2RlX3NvbHZlcl9zZXQocnNjLT5kaXNwX3JzYywgZmFsc2UpOwotCX0KLQotCS8q IGluZGljYXRlIHdhaXQgZm9yIHZzeW5jIGZvciBjbWQgdG8gY2xrIHN0YXRlIHN3aXRjaCAqLwot CWlmICghcmMgJiYgcnNjLT5wcmltYXJ5X2NsaWVudCAmJgotCQkJKHJzYy0+Y3VycmVudF9zdGF0 ZSA9PSBEUFVfUlNDX0NNRF9TVEFURSkpIHsKLQkJLyogY2xlYXIgVlNZTkMgdGltZXN0YW1wIGZv ciBpbmRpY2F0aW9uIHdoZW4gdXBkYXRlIGNvbXBsZXRlcyAqLwotCQlpZiAocnNjLT5od19vcHMu aHdfdnN5bmMpCi0JCQlyc2MtPmh3X29wcy5od192c3luYyhyc2MsIFZTWU5DX0VOQUJMRSwgTlVM TCwgMCwgMCk7Ci0JCWlmICghd2FpdF92YmxhbmtfY3J0Y19pZCkgewotCQkJcHJfZXJyKCJpbnZh bGlkIGNydGMgaWQgd2FpdCBwb2ludGVyIHByb3ZpZGVkXG4iKTsKLQkJCW1zbGVlcChQUklNQVJZ X1ZCTEFOS19XT1JTVF9DQVNFX01TKTsKLQkJfSBlbHNlIHsKLQkJCSp3YWl0X3ZibGFua19jcnRj X2lkID0gcnNjLT5wcmltYXJ5X2NsaWVudC0+Y3J0Y19pZDsKLQkJfQotCX0KLWVuZDoKLQlyZXR1 cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHB1X3JzY19zd2l0Y2hfdG9fdmlkKHN0cnVjdCBkcHVf cnNjX3ByaXYgKnJzYywKLQlzdHJ1Y3QgZHB1X3JzY19jbWRfY29uZmlnICpjb25maWcsCi0Jc3Ry dWN0IGRwdV9yc2NfY2xpZW50ICpjYWxsZXJfY2xpZW50LAotCWludCAqd2FpdF92YmxhbmtfY3J0 Y19pZCkKLXsKLQlpbnQgcmMgPSAwOwotCi0JLyogdXBkYXRlIHRpbWVycyAtIG1pZ2h0IG5vdCBi ZSBhdmFpbGFibGUgYXQgbmV4dCBzd2l0Y2ggKi8KLQlpZiAoY29uZmlnICYmIChjYWxsZXJfY2xp ZW50ID09IHJzYy0+cHJpbWFyeV9jbGllbnQpKQotCQlkcHVfcnNjX3RpbWVyX2NhbGN1bGF0ZShy c2MsIGNvbmZpZyk7Ci0KLQkvKiBlYXJseSBleGl0IHdpdGhvdXQgdnN5bmMgd2FpdCBmb3Igdmlk IHN0YXRlICovCi0JaWYgKHJzYy0+Y3VycmVudF9zdGF0ZSA9PSBEUFVfUlNDX1ZJRF9TVEFURSkK LQkJZ290byBlbmQ7Ci0KLQkvKiB2aWRlbyBzdGF0ZSBzd2l0Y2ggc2hvdWxkIGJlIGRvbmUgaW1t ZWRpYXRlbHkgKi8KLQlpZiAocnNjLT5od19vcHMuc3RhdGVfdXBkYXRlKSB7Ci0JCXJjID0gcnNj LT5od19vcHMuc3RhdGVfdXBkYXRlKHJzYywgRFBVX1JTQ19WSURfU1RBVEUpOwotCQlpZiAoIXJj KQotCQkJcnBtaF9tb2RlX3NvbHZlcl9zZXQocnNjLT5kaXNwX3JzYywgZmFsc2UpOwotCX0KLQot CS8qIGluZGljYXRlIHdhaXQgZm9yIHZzeW5jIGZvciBjbWQgdG8gdmlkIHN0YXRlIHN3aXRjaCAq LwotCWlmICghcmMgJiYgcnNjLT5wcmltYXJ5X2NsaWVudCAmJgotCQkJKHJzYy0+Y3VycmVudF9z dGF0ZSA9PSBEUFVfUlNDX0NNRF9TVEFURSkpIHsKLQkJLyogY2xlYXIgVlNZTkMgdGltZXN0YW1w IGZvciBpbmRpY2F0aW9uIHdoZW4gdXBkYXRlIGNvbXBsZXRlcyAqLwotCQlpZiAocnNjLT5od19v cHMuaHdfdnN5bmMpCi0JCQlyc2MtPmh3X29wcy5od192c3luYyhyc2MsIFZTWU5DX0VOQUJMRSwg TlVMTCwgMCwgMCk7Ci0JCWlmICghd2FpdF92YmxhbmtfY3J0Y19pZCkgewotCQkJcHJfZXJyKCJp bnZhbGlkIGNydGMgaWQgd2FpdCBwb2ludGVyIHByb3ZpZGVkXG4iKTsKLQkJCW1zbGVlcChQUklN QVJZX1ZCTEFOS19XT1JTVF9DQVNFX01TKTsKLQkJfSBlbHNlIHsKLQkJCSp3YWl0X3ZibGFua19j cnRjX2lkID0gcnNjLT5wcmltYXJ5X2NsaWVudC0+Y3J0Y19pZDsKLQkJfQotCX0KLQotZW5kOgot CXJldHVybiByYzsKLX0KLQotLyoqCi0gKiBkcHVfcnNjX2NsaWVudF9pc19zdGF0ZV91cGRhdGVf Y29tcGxldGUoKSAtIGNoZWNrIGlmIHN0YXRlIHVwZGF0ZSBpcyBjb21wbGV0ZQotICogUlNDIHN0 YXRlIHRyYW5zaXRpb24gaXMgbm90IGNvbXBsZXRlIHVudGlsIEhXIHJlY2VpdmVzIFZCTEFOSyBz aWduYWwuIFRoaXMKLSAqIGZ1bmN0aW9uIGNoZWNrcyBSU0MgSFcgdG8gZGV0ZXJtaW5lIHdoZXRo ZXIgdGhhdCBzaWduYWwgaGFzIGJlZW4gcmVjZWl2ZWQuCi0gKiBAY2xpZW50OgkgQ2xpZW50IHBv aW50ZXIgcHJvdmlkZWQgYnkgZHB1X3JzY19jbGllbnRfY3JlYXRlKCkuCi0gKgotICogUmV0dXJu OiB0cnVlIGlmIHRoZSBzdGF0ZSB1cGRhdGUgaGFzIGNvbXBsZXRlZC4KLSAqLwotYm9vbCBkcHVf cnNjX2NsaWVudF9pc19zdGF0ZV91cGRhdGVfY29tcGxldGUoCi0JCXN0cnVjdCBkcHVfcnNjX2Ns aWVudCAqY2FsbGVyX2NsaWVudCkKLXsKLQlzdHJ1Y3QgZHB1X3JzY19wcml2ICpyc2M7Ci0JdTMy IHZzeW5jX3RpbWVzdGFtcDAgPSAwOwotCi0JaWYgKCFjYWxsZXJfY2xpZW50KSB7Ci0JCXByX2Vy cigiaW52YWxpZCBjbGllbnQgZm9yIHJzYyBzdGF0ZSB1cGRhdGVcbiIpOwotCQlyZXR1cm4gZmFs c2U7Ci0JfSBlbHNlIGlmIChjYWxsZXJfY2xpZW50LT5yc2NfaW5kZXggPj0gTUFYX1JTQ19DT1VO VCkgewotCQlwcl9lcnIoImludmFsaWQgcnNjIGluZGV4XG4iKTsKLQkJcmV0dXJuIGZhbHNlOwot CX0KLQotCXJzYyA9IHJzY19wcnZfbGlzdFtjYWxsZXJfY2xpZW50LT5yc2NfaW5kZXhdOwotCWlm ICghcnNjKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQkvKioKLQkgKiBzdGF0ZSB1cGRhdGVzIGNsZWFy IFZTWU5DIHRpbWVzdGFtcCwgY2hlY2sgaWYgYSBuZXcgb25lIGFycml2ZWQuCi0JICogdXNlIFZT WU5DIG1vZGUgMCAoQ01EIFRFKSBhbHdheXMgZm9yIHRoaXMsIHBlciBIVyByZWNvbW1lbmRhdGlv bi4KLQkgKi8KLQlpZiAocnNjLT5od19vcHMuaHdfdnN5bmMpCi0JCXZzeW5jX3RpbWVzdGFtcDAg PSByc2MtPmh3X29wcy5od192c3luYyhyc2MsIFZTWU5DX1JFQURfVlNZTkMwLAotCQkJCU5VTEws IDAsIDApOwotCi0JcmV0dXJuIHZzeW5jX3RpbWVzdGFtcDAgIT0gMDsKLX0KLQotLyoqCi0gKiBk cHVfcnNjX2NsaWVudF9zdGF0ZV91cGRhdGUoKSAtIHJzYyBjbGllbnQgc3RhdGUgdXBkYXRlCi0g KiBWaWRlbyBtb2RlLCBjbWQgbW9kZSBhbmQgY2xrIHN0YXRlIGFyZSBzdXBwb2VkIGFzIG1vZGVz LiBBIGNsaWVudCBuZWVkIHRvCi0gKiBzZXQgdGhpcyBwcm9wZXJ0eSBkdXJpbmcgcGFuZWwgY29u ZmlnIHRpbWUuIEEgc3dpdGNoaW5nIGNsaWVudCBjYW4gc2V0IHRoZQotICogcHJvcGVydHkgdG8g Y2hhbmdlIHRoZSBzdGF0ZQotICoKLSAqIEBjbGllbnQ6CSBDbGllbnQgcG9pbnRlciBwcm92aWRl ZCBieSBkcHVfcnNjX2NsaWVudF9jcmVhdGUoKS4KLSAqIEBzdGF0ZToJIENsaWVudCBzdGF0ZSAt IHZpZGVvL2NtZAotICogQGNvbmZpZzoJIGZwcywgdnRvdGFsLCBwb3JjaGVzLCBldGMgY29uZmln dXJhdGlvbiBmb3IgY29tbWFuZCBtb2RlCi0gKiAgICAgICAgICAgICAgIHBhbmVsCi0gKiBAY3J0 Y19pZDoJIGN1cnJlbnQgY2xpZW50J3MgY3J0YyBpZAotICogQHdhaXRfdmJsYW5rX2NydGNfaWQ6 CU91dHB1dCBwYXJhbWV0ZXIuIElmIHNldCB0byBub24temVybywgcnNjIGh3Ci0gKgkJCQlzdGF0 ZSB1cGRhdGUgcmVxdWlyZXMgYSB3YWl0IGZvciBvbmUgdmJsYW5rIG9uCi0gKgkJCQl0aGUgcHJp bWFyeSBjcnRjLiBJbiB0aGF0IGNhc2UsIHRoaXMgb3V0cHV0Ci0gKgkJCQlwYXJhbSB3aWxsIGJl IHNldCB0byB0aGUgY3J0YyBvbiB3aGljaCB0byB3YWl0LgotICoJCQkJSWYgRFBVX1JTQ19JTlZB TElEX0NSVENfSUQsIG5vIHdhaXQgbmVjZXNzYXJ5Ci0gKgotICogUmV0dXJuOiBlcnJvciBjb2Rl LgotICovCi1pbnQgZHB1X3JzY19jbGllbnRfc3RhdGVfdXBkYXRlKHN0cnVjdCBkcHVfcnNjX2Ns aWVudCAqY2FsbGVyX2NsaWVudCwKLQllbnVtIGRwdV9yc2Nfc3RhdGUgc3RhdGUsCi0Jc3RydWN0 IGRwdV9yc2NfY21kX2NvbmZpZyAqY29uZmlnLCBpbnQgY3J0Y19pZCwKLQlpbnQgKndhaXRfdmJs YW5rX2NydGNfaWQpCi17Ci0JaW50IHJjID0gMDsKLQlzdHJ1Y3QgZHB1X3JzY19wcml2ICpyc2M7 Ci0KLQlpZiAoIWNhbGxlcl9jbGllbnQpIHsKLQkJcHJfZXJyKCJpbnZhbGlkIGNsaWVudCBmb3Ig cnNjIHN0YXRlIHVwZGF0ZVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0gZWxzZSBpZiAoY2Fs bGVyX2NsaWVudC0+cnNjX2luZGV4ID49IE1BWF9SU0NfQ09VTlQpIHsKLQkJcHJfZXJyKCJpbnZh bGlkIHJzYyBpbmRleFxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXJzYyA9IHJzY19w cnZfbGlzdFtjYWxsZXJfY2xpZW50LT5yc2NfaW5kZXhdOwotCWlmICghcnNjKQotCQlyZXR1cm4g LUVJTlZBTDsKLQotCWlmICh3YWl0X3ZibGFua19jcnRjX2lkKQotCQkqd2FpdF92YmxhbmtfY3J0 Y19pZCA9IERQVV9SU0NfSU5WQUxJRF9DUlRDX0lEOwotCi0JbXV0ZXhfbG9jaygmcnNjLT5jbGll bnRfbG9jayk7Ci0JRFBVX0VWVDMyX1ZFUkJPU0UoY2FsbGVyX2NsaWVudC0+aWQsIGNhbGxlcl9j bGllbnQtPmN1cnJlbnRfc3RhdGUsCi0JCQlzdGF0ZSwgcnNjLT5jdXJyZW50X3N0YXRlLCBEUFVf RVZUTE9HX0ZVTkNfRU5UUlkpOwotCWNhbGxlcl9jbGllbnQtPmNydGNfaWQgPSBjcnRjX2lkOwot CWNhbGxlcl9jbGllbnQtPmN1cnJlbnRfc3RhdGUgPSBzdGF0ZTsKLQotCWlmIChyc2MtPm1hc3Rl cl9kcm0gPT0gTlVMTCkgewotCQlwcl9lcnIoImludmFsaWQgbWFzdGVyIGNvbXBvbmVudCBiaW5k aW5nXG4iKTsKLQkJcmMgPSAtRUlOVkFMOwotCQlnb3RvIGVuZDsKLQl9IGVsc2UgaWYgKChyc2Mt PmN1cnJlbnRfc3RhdGUgPT0gc3RhdGUpICYmICFjb25maWcpIHsKLQkJcHJfZGVidWcoIm5vIHN0 YXRlIGNoYW5nZTogJWRcbiIsIHN0YXRlKTsKLQkJZ290byBlbmQ7Ci0JfQotCi0JcHJfZGVidWco IiVwUzogcnNjIHN0YXRlOiVkIHJlcXVlc3QgY2xpZW50OiVzIHN0YXRlOiVkXG4iLAotCQlfX2J1 aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCksIHJzYy0+Y3VycmVudF9zdGF0ZSwKLQkJY2FsbGVyX2Ns aWVudC0+bmFtZSwgc3RhdGUpOwotCi0JaWYgKHJzYy0+Y3VycmVudF9zdGF0ZSA9PSBEUFVfUlND X0lETEVfU1RBVEUpCi0JCWRwdV9yc2NfY2xrX2VuYWJsZSgmcnNjLT5waGFuZGxlLCByc2MtPnBj bGllbnQsIHRydWUpOwotCi0Jc3dpdGNoIChzdGF0ZSkgewotCWNhc2UgRFBVX1JTQ19JRExFX1NU QVRFOgotCQlyYyA9IGRwdV9yc2Nfc3dpdGNoX3RvX2lkbGUocnNjKTsKLQotCQkvKiB2aWRlbyBz dGF0ZSBjbGllbnQgbWlnaHQgYmUgZXhpdGluZzsgdHJ5IGNtZCBzdGF0ZSBzd2l0Y2ggKi8KLQkJ aWYgKHJjID09IFRSWV9DTURfTU9ERV9TV0lUQ0gpIHsKLQkJCXJjID0gZHB1X3JzY19zd2l0Y2hf dG9fY21kKHJzYywgTlVMTCwKLQkJCQkJcnNjLT5wcmltYXJ5X2NsaWVudCwKLQkJCQkJd2FpdF92 YmxhbmtfY3J0Y19pZCk7Ci0JCQlpZiAoIXJjKQotCQkJCXN0YXRlID0gRFBVX1JTQ19DTURfU1RB VEU7Ci0KLQkJLyogY21kIHN0YXRlIGNsaWVudCBtaWdodCBiZSBleGl0aW5nOyB0cnkgY2xrIHN0 YXRlIHN3aXRjaCAqLwotCQl9IGVsc2UgaWYgKHJjID09IFRSWV9DTEtfTU9ERV9TV0lUQ0gpIHsK LQkJCXJjID0gZHB1X3JzY19zd2l0Y2hfdG9fY2xrKHJzYywgd2FpdF92YmxhbmtfY3J0Y19pZCk7 Ci0JCQlpZiAoIXJjKQotCQkJCXN0YXRlID0gRFBVX1JTQ19DTEtfU1RBVEU7Ci0JCX0KLQkJYnJl YWs7Ci0KLQljYXNlIERQVV9SU0NfQ01EX1NUQVRFOgotCQlyYyA9IGRwdV9yc2Nfc3dpdGNoX3Rv X2NtZChyc2MsIGNvbmZpZywgY2FsbGVyX2NsaWVudCwKLQkJCQl3YWl0X3ZibGFua19jcnRjX2lk KTsKLQkJYnJlYWs7Ci0KLQljYXNlIERQVV9SU0NfVklEX1NUQVRFOgotCQlyYyA9IGRwdV9yc2Nf c3dpdGNoX3RvX3ZpZChyc2MsIGNvbmZpZywgY2FsbGVyX2NsaWVudCwKLQkJCQl3YWl0X3ZibGFu a19jcnRjX2lkKTsKLQkJYnJlYWs7Ci0KLQljYXNlIERQVV9SU0NfQ0xLX1NUQVRFOgotCQlyYyA9 IGRwdV9yc2Nfc3dpdGNoX3RvX2Nsayhyc2MsIHdhaXRfdmJsYW5rX2NydGNfaWQpOwotCQlicmVh azsKLQotCWRlZmF1bHQ6Ci0JCXByX2VycigiaW52YWxpZCBzdGF0ZSBoYW5kbGluZyAlZFxuIiwg c3RhdGUpOwotCQlicmVhazsKLQl9Ci0KLQlpZiAocmMgPT0gU1RBVEVfVVBEQVRFX05PVF9BTExP V0VEKSB7Ci0JCXJjID0gMDsKLQkJRFBVX0VWVDMyKGNhbGxlcl9jbGllbnQtPmlkLCBjYWxsZXJf Y2xpZW50LT5jdXJyZW50X3N0YXRlLAotCQkJc3RhdGUsIHJzYy0+Y3VycmVudF9zdGF0ZSwgcmMs IERQVV9FVlRMT0dfRlVOQ19DQVNFMSk7Ci0JCWdvdG8gY2xrX2Rpc2FibGU7Ci0JfSBlbHNlIGlm IChyYykgewotCQlwcl9kZWJ1Zygic3RhdGU6JWQgdXBkYXRlIGZhaWxlZCByYzolZFxuIiwgc3Rh dGUsIHJjKTsKLQkJRFBVX0VWVDMyKGNhbGxlcl9jbGllbnQtPmlkLCBjYWxsZXJfY2xpZW50LT5j dXJyZW50X3N0YXRlLAotCQkJc3RhdGUsIHJzYy0+Y3VycmVudF9zdGF0ZSwgcmMsIERQVV9FVlRM T0dfRlVOQ19DQVNFMik7Ci0JCWdvdG8gY2xrX2Rpc2FibGU7Ci0JfQotCi0JcHJfZGVidWcoInN0 YXRlIHN3aXRjaCBzdWNjZXNzZnVsbHkgY29tcGxldGU6ICVkXG4iLCBzdGF0ZSk7Ci0JcnNjLT5j dXJyZW50X3N0YXRlID0gc3RhdGU7Ci0JRFBVX0VWVDMyKGNhbGxlcl9jbGllbnQtPmlkLCBjYWxs ZXJfY2xpZW50LT5jdXJyZW50X3N0YXRlLAotCQkJc3RhdGUsIHJzYy0+Y3VycmVudF9zdGF0ZSwg RFBVX0VWVExPR19GVU5DX0VYSVQpOwotCi1jbGtfZGlzYWJsZToKLQlpZiAocnNjLT5jdXJyZW50 X3N0YXRlID09IERQVV9SU0NfSURMRV9TVEFURSkKLQkJZHB1X3JzY19jbGtfZW5hYmxlKCZyc2Mt PnBoYW5kbGUsIHJzYy0+cGNsaWVudCwgZmFsc2UpOwotZW5kOgotCW11dGV4X3VubG9jaygmcnNj LT5jbGllbnRfbG9jayk7Ci0JcmV0dXJuIHJjOwotfQotRVhQT1JUX1NZTUJPTChkcHVfcnNjX2Ns aWVudF9zdGF0ZV91cGRhdGUpOwotCi0vKioKLSAqIGRwdV9yc2NfY2xpZW50X3ZvdGUoKSAtIGFi L2liIHZvdGUgZnJvbSByc2MgY2xpZW50Ci0gKgotICogQGNsaWVudDoJIENsaWVudCBwb2ludGVy IHByb3ZpZGVkIGJ5IGRwdV9yc2NfY2xpZW50X2NyZWF0ZSgpLgotICogQGJ1c19pZDogZGF0YSBi dXMgZm9yIHdoaWNoIHRvIGJlIHZvdGVkCi0gKiBAYWI6CQkgYWdncmVnYXRlZCBiYW5kd2lkdGgg dm90ZSBmcm9tIGNsaWVudC4KLSAqIEBpYjoJCSBpbnN0YW50IGJhbmR3aWR0aCB2b3RlIGZyb20g Y2xpZW50LgotICoKLSAqIFJldHVybjogZXJyb3IgY29kZS4KLSAqLwotaW50IGRwdV9yc2NfY2xp ZW50X3ZvdGUoc3RydWN0IGRwdV9yc2NfY2xpZW50ICpjYWxsZXJfY2xpZW50LAotCQl1MzIgYnVz X2lkLCB1NjQgYWJfdm90ZSwgdTY0IGliX3ZvdGUpCi17Ci0JaW50IHJjID0gMDsKLQlzdHJ1Y3Qg ZHB1X3JzY19wcml2ICpyc2M7Ci0KLQlpZiAoIWNhbGxlcl9jbGllbnQpIHsKLQkJcHJfZXJyKCJp bnZhbGlkIGNsaWVudCBmb3IgYWIvaWIgdm90ZVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0g ZWxzZSBpZiAoY2FsbGVyX2NsaWVudC0+cnNjX2luZGV4ID49IE1BWF9SU0NfQ09VTlQpIHsKLQkJ cHJfZXJyKCJpbnZhbGlkIHJzYyBpbmRleFxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQot CXJzYyA9IHJzY19wcnZfbGlzdFtjYWxsZXJfY2xpZW50LT5yc2NfaW5kZXhdOwotCWlmICghcnNj KQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXByX2RlYnVnKCJjbGllbnQ6JXMgYWI6JWxsdSBpYjol bGx1XG4iLAotCQkJY2FsbGVyX2NsaWVudC0+bmFtZSwgYWJfdm90ZSwgaWJfdm90ZSk7Ci0KLQlt dXRleF9sb2NrKCZyc2MtPmNsaWVudF9sb2NrKTsKLQlyYyA9IGRwdV9yc2NfY2xrX2VuYWJsZSgm cnNjLT5waGFuZGxlLCByc2MtPnBjbGllbnQsIHRydWUpOwotCWlmIChyYykKLQkJZ290byBjbGtf ZW5hYmxlX2ZhaWw7Ci0KLQlpZiAocnNjLT5od19vcHMudGNzX3dhaXQpIHsKLQkJcmMgPSByc2Mt Pmh3X29wcy50Y3Nfd2FpdChyc2MpOwotCQlpZiAocmMpIHsKLQkJCXByX2VycigidGNzIGlzIHN0 aWxsIGJ1c3k7IGNhbid0IHNlbmQgY29tbWFuZFxuIik7Ci0JCQlpZiAocnNjLT5od19vcHMudGNz X3VzZV9vaykKLQkJCQlyc2MtPmh3X29wcy50Y3NfdXNlX29rKHJzYyk7Ci0JCQlnb3RvIGVuZDsK LQkJfQotCX0KLQotCXJwbWhfaW52YWxpZGF0ZShyc2MtPmRpc3BfcnNjKTsKLQlkcHVfcG93ZXJf ZGF0YV9idXNfc2V0X3F1b3RhKCZyc2MtPnBoYW5kbGUsIHJzYy0+cGNsaWVudCwKLQkJRFBVX1BP V0VSX0hBTkRMRV9EQVRBX0JVU19DTElFTlRfUlQsCi0JCWJ1c19pZCwgYWJfdm90ZSwgaWJfdm90 ZSk7Ci0JcnBtaF9mbHVzaChyc2MtPmRpc3BfcnNjKTsKLQotCWlmIChyc2MtPmh3X29wcy50Y3Nf dXNlX29rKQotCQlyc2MtPmh3X29wcy50Y3NfdXNlX29rKHJzYyk7Ci0KLWVuZDoKLQlkcHVfcnNj X2Nsa19lbmFibGUoJnJzYy0+cGhhbmRsZSwgcnNjLT5wY2xpZW50LCBmYWxzZSk7Ci1jbGtfZW5h YmxlX2ZhaWw6Ci0JbXV0ZXhfdW5sb2NrKCZyc2MtPmNsaWVudF9sb2NrKTsKLQotCXJldHVybiBy YzsKLX0KLUVYUE9SVF9TWU1CT0woZHB1X3JzY19jbGllbnRfdm90ZSk7Ci0KLSNpZiBkZWZpbmVk KENPTkZJR19ERUJVR19GUykKLXZvaWQgZHB1X3JzY19kZWJ1Z19kdW1wKHUzMiBtdXhfc2VsKQot ewotCXN0cnVjdCBkcHVfcnNjX3ByaXYgKnJzYzsKLQotCXJzYyA9IHJzY19wcnZfbGlzdFtEUFVf UlNDX0lOREVYXTsKLQlpZiAoIXJzYykKLQkJcmV0dXJuOwotCi0JLyogdGhpcyBtdXN0IGJlIGNh bGxlZCB3aXRoIHJzYyBjbG9ja3MgZW5hYmxlZCAqLwotCWlmIChyc2MtPmh3X29wcy5kZWJ1Z19k dW1wKQotCQlyc2MtPmh3X29wcy5kZWJ1Z19kdW1wKHJzYywgbXV4X3NlbCk7Ci19Ci0jZW5kaWYg LyogZGVmaW5lZChDT05GSUdfREVCVUdfRlMpICovCi0KLXN0YXRpYyBpbnQgX2RwdV9kZWJ1Z2Zz X3N0YXR1c19zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3Qg ZHB1X3JzY19wcml2ICpyc2M7Ci0Jc3RydWN0IGRwdV9yc2NfY2xpZW50ICpjbGllbnQ7Ci0JaW50 IHJldDsKLQotCWlmICghcyB8fCAhcy0+cHJpdmF0ZSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQly c2MgPSBzLT5wcml2YXRlOwotCi0JbXV0ZXhfbG9jaygmcnNjLT5jbGllbnRfbG9jayk7Ci0JcmV0 ID0gZHB1X3JzY19jbGtfZW5hYmxlKCZyc2MtPnBoYW5kbGUsIHJzYy0+cGNsaWVudCwgdHJ1ZSk7 Ci0JaWYgKHJldCkKLQkJZ290byBlbmQ7Ci0KLQlzZXFfcHJpbnRmKHMsICJyc2MgY3VycmVudCBz dGF0ZTolZFxuIiwgcnNjLT5jdXJyZW50X3N0YXRlKTsKLQlzZXFfcHJpbnRmKHMsICJ3cmFwZXIg YmFja29mZiB0aW1lKG5zKTolZFxuIiwKLQkJCQlyc2MtPnRpbWVyX2NvbmZpZy5zdGF0aWNfd2Fr ZXVwX3RpbWVfbnMpOwotCXNlcV9wcmludGYocywgInJzYyBiYWNrb2ZmIHRpbWUobnMpOiVkXG4i LAotCQkJCXJzYy0+dGltZXJfY29uZmlnLnJzY19iYWNrb2ZmX3RpbWVfbnMpOwotCXNlcV9wcmlu dGYocywgInBkYyBiYWNrb2ZmIHRpbWUobnMpOiVkXG4iLAotCQkJCXJzYy0+dGltZXJfY29uZmln LnBkY19iYWNrb2ZmX3RpbWVfbnMpOwotCXNlcV9wcmludGYocywgInJzYyBtb2RlIHRocmVzaG9s ZCB0aW1lKG5zKTolZFxuIiwKLQkJCQlyc2MtPnRpbWVyX2NvbmZpZy5yc2NfbW9kZV90aHJlc2hv bGRfdGltZV9ucyk7Ci0Jc2VxX3ByaW50ZihzLCAicnNjIHRpbWUgc2xvdCAwKG5zKTolZFxuIiwK LQkJCQlyc2MtPnRpbWVyX2NvbmZpZy5yc2NfdGltZV9zbG90XzBfbnMpOwotCXNlcV9wcmludGYo cywgInJzYyB0aW1lIHNsb3QgMShucyk6JWRcbiIsCi0JCQkJcnNjLT50aW1lcl9jb25maWcucnNj X3RpbWVfc2xvdF8xX25zKTsKLQlzZXFfcHJpbnRmKHMsICJmcmFtZSBmcHM6JWQgaml0dGVyX251 bWVyOiVkIGppdHRlcl9kZW5vbTolZCB2dG90YWw6JWQgcHJlZmlsbCBsaW5lczolZFxuIiwKLQkJ CXJzYy0+Y21kX2NvbmZpZy5mcHMsIHJzYy0+Y21kX2NvbmZpZy5qaXR0ZXJfbnVtZXIsCi0JCQly c2MtPmNtZF9jb25maWcuaml0dGVyX2Rlbm9tLAotCQkJcnNjLT5jbWRfY29uZmlnLnZ0b3RhbCwg cnNjLT5jbWRfY29uZmlnLnByZWZpbGxfbGluZXMpOwotCi0Jc2VxX3B1dHMocywgIlxuIik7Ci0K LQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNsaWVudCwgJnJzYy0+Y2xpZW50X2xpc3QsIGxpc3QpCi0J CXNlcV9wcmludGYocywgIlx0IGNsaWVudDolcyBzdGF0ZTolZFxuIiwKLQkJCQljbGllbnQtPm5h bWUsIGNsaWVudC0+Y3VycmVudF9zdGF0ZSk7Ci0KLQlpZiAocnNjLT5od19vcHMuZGVidWdfc2hv dykgewotCQlyZXQgPSByc2MtPmh3X29wcy5kZWJ1Z19zaG93KHMsIHJzYyk7Ci0JCWlmIChyZXQp Ci0JCQlwcl9lcnIoImRwdSByc2M6IGh3IGRlYnVnIGZhaWxlZCByZXQ6JWRcbiIsIHJldCk7Ci0J fQotCWRwdV9yc2NfY2xrX2VuYWJsZSgmcnNjLT5waGFuZGxlLCByc2MtPnBjbGllbnQsIGZhbHNl KTsKLQotZW5kOgotCW11dGV4X3VubG9jaygmcnNjLT5jbGllbnRfbG9jayk7Ci0JcmV0dXJuIDA7 Ci19Ci0KLXN0YXRpYyBpbnQgX2RwdV9kZWJ1Z2ZzX3N0YXR1c19vcGVuKHN0cnVjdCBpbm9kZSAq aW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBf ZHB1X2RlYnVnZnNfc3RhdHVzX3Nob3csIGlub2RlLT5pX3ByaXZhdGUpOwotfQotCi1zdGF0aWMg aW50IF9kcHVfZGVidWdmc19tb2RlX2N0cmxfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1 Y3QgZmlsZSAqZmlsZSkKLXsKLQkvKiBub24tc2Vla2FibGUgKi8KLQlmaWxlLT5wcml2YXRlX2Rh dGEgPSBpbm9kZS0+aV9wcml2YXRlOwotCXJldHVybiBub25zZWVrYWJsZV9vcGVuKGlub2RlLCBm aWxlKTsKLX0KLQotc3RhdGljIHNzaXplX3QgX2RwdV9kZWJ1Z2ZzX21vZGVfY3RybF9yZWFkKHN0 cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLAotCQkJCXNpemVfdCBjb3VudCwgbG9m Zl90ICpwcG9zKQotewotCXN0cnVjdCBkcHVfcnNjX3ByaXYgKnJzYyA9IGZpbGUtPnByaXZhdGVf ZGF0YTsKLQljaGFyIGJ1ZmZlcltNQVhfQlVGRkVSX1NJWkVdOwotCWludCBibGVuID0gMCwgcmM7 Ci0KLQlpZiAoKnBwb3MgfHwgIXJzYyB8fCAhcnNjLT5od19vcHMubW9kZV9jdHJsKQotCQlyZXR1 cm4gMDsKLQotCW11dGV4X2xvY2soJnJzYy0+Y2xpZW50X2xvY2spOwotCXJjID0gZHB1X3JzY19j bGtfZW5hYmxlKCZyc2MtPnBoYW5kbGUsIHJzYy0+cGNsaWVudCwgdHJ1ZSk7Ci0JaWYgKHJjKQot CQlnb3RvIGVuZDsKLQotCWJsZW4gPSByc2MtPmh3X29wcy5tb2RlX2N0cmwocnNjLCBNT0RFX1JF QUQsIGJ1ZmZlciwKLQkJCQkJCQlNQVhfQlVGRkVSX1NJWkUsIDApOwotCi0JZHB1X3JzY19jbGtf ZW5hYmxlKCZyc2MtPnBoYW5kbGUsIHJzYy0+cGNsaWVudCwgZmFsc2UpOwotCi1lbmQ6Ci0JbXV0 ZXhfdW5sb2NrKCZyc2MtPmNsaWVudF9sb2NrKTsKLQlpZiAoYmxlbiA8PSAwKQotCQlyZXR1cm4g MDsKLQotCWlmIChjb3B5X3RvX3VzZXIoYnVmLCBidWZmZXIsIGJsZW4pKQotCQlyZXR1cm4gLUVG QVVMVDsKLQotCSpwcG9zICs9IGJsZW47Ci0JcmV0dXJuIGJsZW47Ci19Ci0KLXN0YXRpYyBzc2l6 ZV90IF9kcHVfZGVidWdmc19tb2RlX2N0cmxfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCi0JCQlj b25zdCBjaGFyIF9fdXNlciAqcCwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCi17Ci0Jc3Ry dWN0IGRwdV9yc2NfcHJpdiAqcnNjID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCWNoYXIgKmlucHV0 OwotCXUzMiBtb2RlX3N0YXRlID0gMDsKLQlpbnQgcmM7Ci0KLQlpZiAoIXJzYyB8fCAhcnNjLT5o d19vcHMubW9kZV9jdHJsIHx8ICFjb3VudCB8fAotCQkJCQljb3VudCA+IE1BWF9DT1VOVF9TSVpF X1NVUFBPUlRFRCkKLQkJcmV0dXJuIDA7Ci0KLQlpbnB1dCA9IGttYWxsb2MoY291bnQgKyAxLCBH RlBfS0VSTkVMKTsKLQlpZiAoIWlucHV0KQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWlmIChjb3B5 X2Zyb21fdXNlcihpbnB1dCwgcCwgY291bnQpKSB7Ci0JCWtmcmVlKGlucHV0KTsKLQkJcmV0dXJu IC1FRkFVTFQ7Ci0JfQotCWlucHV0W2NvdW50XSA9ICdcMCc7Ci0KLQlyYyA9IGtzdHJ0b2ludChp bnB1dCwgMCwgJm1vZGVfc3RhdGUpOwotCWlmIChyYykgewotCQlwcl9lcnIoIm1vZGVfc3RhdGU6 IGludCBjb252ZXJzaW9uIGZhaWxlZCByYzolZFxuIiwgcmMpOwotCQlnb3RvIGVuZDsKLQl9Ci0K LQlwcl9kZWJ1ZygibW9kZV9zdGF0ZTogJWRcbiIsIG1vZGVfc3RhdGUpOwotCW1vZGVfc3RhdGUg Jj0gMHg3OwotCWlmIChtb2RlX3N0YXRlICE9IEFMTF9NT0RFU19ESVNBQkxFRCAmJgotCQkJbW9k ZV9zdGF0ZSAhPSBBTExfTU9ERVNfRU5BQkxFRCAmJgotCQkJbW9kZV9zdGF0ZSAhPSBPTkxZX01P REVfMF9FTkFCTEVEICYmCi0JCQltb2RlX3N0YXRlICE9IE9OTFlfTU9ERV8wXzFfRU5BQkxFRCkg ewotCQlwcl9lcnIoImludmFsaWQgbW9kZTolZCBjb21iaW5hdGlvblxuIiwgbW9kZV9zdGF0ZSk7 Ci0JCWdvdG8gZW5kOwotCX0KLQotCW11dGV4X2xvY2soJnJzYy0+Y2xpZW50X2xvY2spOwotCXJj ID0gZHB1X3JzY19jbGtfZW5hYmxlKCZyc2MtPnBoYW5kbGUsIHJzYy0+cGNsaWVudCwgdHJ1ZSk7 Ci0JaWYgKHJjKQotCQlnb3RvIGNsa19lbmFibGVfZmFpbDsKLQotCXJzYy0+aHdfb3BzLm1vZGVf Y3RybChyc2MsIE1PREVfVVBEQVRFLCBOVUxMLCAwLCBtb2RlX3N0YXRlKTsKLQlkcHVfcnNjX2Ns a19lbmFibGUoJnJzYy0+cGhhbmRsZSwgcnNjLT5wY2xpZW50LCBmYWxzZSk7Ci0KLWNsa19lbmFi bGVfZmFpbDoKLQltdXRleF91bmxvY2soJnJzYy0+Y2xpZW50X2xvY2spOwotZW5kOgotCWtmcmVl KGlucHV0KTsKLQlyZXR1cm4gY291bnQ7Ci19Ci0KLXN0YXRpYyBpbnQgX2RwdV9kZWJ1Z2ZzX3Zz eW5jX21vZGVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsK LQkvKiBub24tc2Vla2FibGUgKi8KLQlmaWxlLT5wcml2YXRlX2RhdGEgPSBpbm9kZS0+aV9wcml2 YXRlOwotCXJldHVybiBub25zZWVrYWJsZV9vcGVuKGlub2RlLCBmaWxlKTsKLX0KLQotc3RhdGlj IHNzaXplX3QgX2RwdV9kZWJ1Z2ZzX3ZzeW5jX21vZGVfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwg Y2hhciBfX3VzZXIgKmJ1ZiwKLQkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKLXsKLQlz dHJ1Y3QgZHB1X3JzY19wcml2ICpyc2MgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0JY2hhciBidWZm ZXJbTUFYX0JVRkZFUl9TSVpFXTsKLQlpbnQgYmxlbiA9IDAsIHJjOwotCi0JaWYgKCpwcG9zIHx8 ICFyc2MgfHwgIXJzYy0+aHdfb3BzLmh3X3ZzeW5jKQotCQlyZXR1cm4gMDsKLQotCW11dGV4X2xv Y2soJnJzYy0+Y2xpZW50X2xvY2spOwotCXJjID0gZHB1X3JzY19jbGtfZW5hYmxlKCZyc2MtPnBo YW5kbGUsIHJzYy0+cGNsaWVudCwgdHJ1ZSk7Ci0JaWYgKHJjKQotCQlnb3RvIGVuZDsKLQotCWJs ZW4gPSByc2MtPmh3X29wcy5od192c3luYyhyc2MsIFZTWU5DX1JFQUQsIGJ1ZmZlciwKLQkJCQkJ CU1BWF9CVUZGRVJfU0laRSwgMCk7Ci0KLQlkcHVfcnNjX2Nsa19lbmFibGUoJnJzYy0+cGhhbmRs ZSwgcnNjLT5wY2xpZW50LCBmYWxzZSk7Ci0KLWVuZDoKLQltdXRleF91bmxvY2soJnJzYy0+Y2xp ZW50X2xvY2spOwotCWlmIChibGVuIDw9IDApCi0JCXJldHVybiAwOwotCi0JaWYgKGNvcHlfdG9f dXNlcihidWYsIGJ1ZmZlciwgYmxlbikpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JKnBwb3MgKz0g YmxlbjsKLQlyZXR1cm4gYmxlbjsKLX0KLQotc3RhdGljIHNzaXplX3QgX2RwdV9kZWJ1Z2ZzX3Zz eW5jX21vZGVfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCi0JCQljb25zdCBjaGFyIF9fdXNlciAq cCwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCi17Ci0Jc3RydWN0IGRwdV9yc2NfcHJpdiAq cnNjID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCWNoYXIgKmlucHV0OwotCXUzMiB2c3luY19zdGF0 ZSA9IDA7Ci0JaW50IHJjOwotCi0JaWYgKCFyc2MgfHwgIXJzYy0+aHdfb3BzLmh3X3ZzeW5jIHx8 ICFjb3VudCB8fAotCQkJCWNvdW50ID4gTUFYX0NPVU5UX1NJWkVfU1VQUE9SVEVEKQotCQlyZXR1 cm4gMDsKLQotCWlucHV0ID0ga21hbGxvYyhjb3VudCArIDEsIEdGUF9LRVJORUwpOwotCWlmICgh aW5wdXQpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JaWYgKGNvcHlfZnJvbV91c2VyKGlucHV0LCBw LCBjb3VudCkpIHsKLQkJa2ZyZWUoaW5wdXQpOwotCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0JaW5w dXRbY291bnRdID0gJ1wwJzsKLQotCXJjID0ga3N0cnRvaW50KGlucHV0LCAwLCAmdnN5bmNfc3Rh dGUpOwotCWlmIChyYykgewotCQlwcl9lcnIoInZzeW5jX3N0YXRlOiBpbnQgY29udmVyc2lvbiBm YWlsZWQgcmM6JWRcbiIsIHJjKTsKLQkJZ290byBlbmQ7Ci0JfQotCi0JcHJfZGVidWcoInZzeW5j X3N0YXRlOiAlZFxuIiwgdnN5bmNfc3RhdGUpOwotCXZzeW5jX3N0YXRlICY9IDB4NzsKLQotCW11 dGV4X2xvY2soJnJzYy0+Y2xpZW50X2xvY2spOwotCXJjID0gZHB1X3JzY19jbGtfZW5hYmxlKCZy c2MtPnBoYW5kbGUsIHJzYy0+cGNsaWVudCwgdHJ1ZSk7Ci0JaWYgKHJjKQotCQlnb3RvIGNsa19l bl9mYWlsOwotCi0JaWYgKHZzeW5jX3N0YXRlKQotCQlyc2MtPmh3X29wcy5od192c3luYyhyc2Ms IFZTWU5DX0VOQUJMRSwgTlVMTCwKLQkJCQkJCQkwLCB2c3luY19zdGF0ZSAtIDEpOwotCWVsc2UK LQkJcnNjLT5od19vcHMuaHdfdnN5bmMocnNjLCBWU1lOQ19ESVNBQkxFLCBOVUxMLCAwLCAwKTsK LQotCWRwdV9yc2NfY2xrX2VuYWJsZSgmcnNjLT5waGFuZGxlLCByc2MtPnBjbGllbnQsIGZhbHNl KTsKLQotY2xrX2VuX2ZhaWw6Ci0JbXV0ZXhfdW5sb2NrKCZyc2MtPmNsaWVudF9sb2NrKTsKLWVu ZDoKLQlrZnJlZShpbnB1dCk7Ci0JcmV0dXJuIGNvdW50OwotfQotCi1zdGF0aWMgY29uc3Qgc3Ry dWN0IGZpbGVfb3BlcmF0aW9ucyBkZWJ1Z2ZzX3N0YXR1c19mb3BzID0gewotCS5vcGVuID0JCV9k cHVfZGVidWdmc19zdGF0dXNfb3BlbiwKLQkucmVhZCA9CQlzZXFfcmVhZCwKLQkubGxzZWVrID0J c2VxX2xzZWVrLAotCS5yZWxlYXNlID0Jc2luZ2xlX3JlbGVhc2UsCi19OwotCi1zdGF0aWMgY29u c3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtb2RlX2NvbnRyb2xfZm9wcyA9IHsKLQkub3BlbiA9 CQlfZHB1X2RlYnVnZnNfbW9kZV9jdHJsX29wZW4sCi0JLnJlYWQgPQkJX2RwdV9kZWJ1Z2ZzX21v ZGVfY3RybF9yZWFkLAotCS53cml0ZSA9CV9kcHVfZGVidWdmc19tb2RlX2N0cmxfd3JpdGUsCi19 OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2c3luY19zdGF0dXNfZm9w cyA9IHsKLQkub3BlbiA9CQlfZHB1X2RlYnVnZnNfdnN5bmNfbW9kZV9vcGVuLAotCS5yZWFkID0J CV9kcHVfZGVidWdmc192c3luY19tb2RlX3JlYWQsCi0JLndyaXRlID0JX2RwdV9kZWJ1Z2ZzX3Zz eW5jX21vZGVfd3JpdGUsCi19OwotCi1zdGF0aWMgdm9pZCBfZHB1X3JzY19pbml0X2RlYnVnZnMo c3RydWN0IGRwdV9yc2NfcHJpdiAqcnNjLCBjaGFyICpuYW1lKQotewotCXJzYy0+ZGVidWdmc19y b290ID0gZGVidWdmc19jcmVhdGVfZGlyKG5hbWUsIE5VTEwpOwotCWlmICghcnNjLT5kZWJ1Z2Zz X3Jvb3QpCi0JCXJldHVybjsKLQotCS8qIGRvbid0IGVycm9yIGNoZWNrIHRoZXNlICovCi0JZGVi dWdmc19jcmVhdGVfZmlsZSgic3RhdHVzIiwgMDQwMCwgcnNjLT5kZWJ1Z2ZzX3Jvb3QsIHJzYywK LQkJCQkJCQkmZGVidWdmc19zdGF0dXNfZm9wcyk7Ci0JZGVidWdmc19jcmVhdGVfZmlsZSgibW9k ZV9jb250cm9sIiwgMDYwMCwgcnNjLT5kZWJ1Z2ZzX3Jvb3QsIHJzYywKLQkJCQkJCQkmbW9kZV9j b250cm9sX2ZvcHMpOwotCWRlYnVnZnNfY3JlYXRlX2ZpbGUoInZzeW5jX21vZGUiLCAwNjAwLCBy c2MtPmRlYnVnZnNfcm9vdCwgcnNjLAotCQkJCQkJCSZ2c3luY19zdGF0dXNfZm9wcyk7Ci0JZGVi dWdmc19jcmVhdGVfeDMyKCJkZWJ1Z19tb2RlIiwgMDYwMCwgcnNjLT5kZWJ1Z2ZzX3Jvb3QsCi0J CQkJCQkJJnJzYy0+ZGVidWdfbW9kZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRwdV9yc2NfZGVpbml0 KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCi0JCQkJCXN0cnVjdCBkcHVfcnNjX3ByaXYg KnJzYykKLXsKLQlpZiAoIXJzYykKLQkJcmV0dXJuOwotCi0JaWYgKHJzYy0+cGNsaWVudCkKLQkJ ZHB1X3JzY19jbGtfZW5hYmxlKCZyc2MtPnBoYW5kbGUsIHJzYy0+cGNsaWVudCwgZmFsc2UpOwot CWlmIChyc2MtPmZzKQotCQlkZXZtX3JlZ3VsYXRvcl9wdXQocnNjLT5mcyk7Ci0JaWYgKHJzYy0+ d3JhcHBlcl9pby5iYXNlKQotCQltc21fZHNzX2lvdW5tYXAoJnJzYy0+d3JhcHBlcl9pbyk7Ci0J aWYgKHJzYy0+ZHJ2X2lvLmJhc2UpCi0JCW1zbV9kc3NfaW91bm1hcCgmcnNjLT5kcnZfaW8pOwot CWlmIChyc2MtPmRpc3BfcnNjKQotCQlycG1oX3JlbGVhc2UocnNjLT5kaXNwX3JzYyk7Ci0JaWYg KHJzYy0+cGNsaWVudCkKLQkJZHB1X3Bvd2VyX2NsaWVudF9kZXN0cm95KCZyc2MtPnBoYW5kbGUs IHJzYy0+cGNsaWVudCk7Ci0KLQlkcHVfcG93ZXJfcmVzb3VyY2VfZGVpbml0KHBkZXYsICZyc2Mt PnBoYW5kbGUpOwotCWRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShyc2MtPmRlYnVnZnNfcm9vdCk7 Ci0Ja2ZyZWUocnNjKTsKLX0KLQotLyoqCi0gKiBkcHVfcnNjX2JpbmQgLSBiaW5kIHJzYyBkZXZp Y2Ugd2l0aCBjb250cm9sbGluZyBkZXZpY2UKLSAqIEBkZXY6ICAgICAgICBQb2ludGVyIHRvIGJh c2Ugb2YgcGxhdGZvcm0gZGV2aWNlCi0gKiBAbWFzdGVyOiAgICAgUG9pbnRlciB0byBjb250YWlu ZXIgb2YgZHJtIGRldmljZQotICogQGRhdGE6ICAgICAgIFBvaW50ZXIgdG8gcHJpdmF0ZSBkYXRh Ci0gKiBSZXR1cm5zOiAgICAgWmVybyBvbiBzdWNjZXNzCi0gKi8KLXN0YXRpYyBpbnQgZHB1X3Jz Y19iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJc3RydWN0IGRldmljZSAqbWFzdGVyLAotCQl2 b2lkICpkYXRhKQotewotCXN0cnVjdCBkcHVfcnNjX3ByaXYgKnJzYzsKLQlzdHJ1Y3QgZHJtX2Rl dmljZSAqZHJtOwotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9k ZXZpY2UoZGV2KTsKLQotCWlmICghZGV2IHx8ICFwZGV2IHx8ICFtYXN0ZXIpIHsKLQkJcHJfZXJy KCJpbnZhbGlkIHBhcmFtKHMpLCBkZXYgJXBLLCBwZGV2ICVwSywgbWFzdGVyICVwS1xuIiwKLQkJ CQlkZXYsIHBkZXYsIG1hc3Rlcik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWRybSA9IGRl dl9nZXRfZHJ2ZGF0YShtYXN0ZXIpOwotCXJzYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYp OwotCWlmICghZHJtIHx8ICFyc2MpIHsKLQkJcHJfZXJyKCJpbnZhbGlkIHBhcmFtKHMpLCBkcm0g JXBLLCByc2MgJXBLXG4iLAotCQkJCWRybSwgcnNjKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQot Ci0JbXV0ZXhfbG9jaygmcnNjLT5jbGllbnRfbG9jayk7Ci0JcnNjLT5tYXN0ZXJfZHJtID0gZHJt OwotCW11dGV4X3VubG9jaygmcnNjLT5jbGllbnRfbG9jayk7Ci0KLQlkcHVfZGJnX3JlZ19yZWdp c3Rlcl9iYXNlKERQVV9SU0NfRFJWX0RCR19OQU1FLCByc2MtPmRydl9pby5iYXNlLAotCQkJCQkJ CXJzYy0+ZHJ2X2lvLmxlbik7Ci0JZHB1X2RiZ19yZWdfcmVnaXN0ZXJfYmFzZShEUFVfUlNDX1dS QVBQRVJfREJHX05BTUUsCi0JCQkJcnNjLT53cmFwcGVyX2lvLmJhc2UsIHJzYy0+d3JhcHBlcl9p by5sZW4pOwotCXJldHVybiAwOwotfQotCi0vKioKLSAqIGRwdV9yc2NfdW5iaW5kIC0gdW5iaW5k IHJzYyBmcm9tIGNvbnRyb2xsaW5nIGRldmljZQotICogQGRldjogICAgICAgIFBvaW50ZXIgdG8g YmFzZSBvZiBwbGF0Zm9ybSBkZXZpY2UKLSAqIEBtYXN0ZXI6ICAgICBQb2ludGVyIHRvIGNvbnRh aW5lciBvZiBkcm0gZGV2aWNlCi0gKiBAZGF0YTogICAgICAgUG9pbnRlciB0byBwcml2YXRlIGRh dGEKLSAqLwotc3RhdGljIHZvaWQgZHB1X3JzY191bmJpbmQoc3RydWN0IGRldmljZSAqZGV2LAot CQlzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsIHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IGRwdV9yc2Nf cHJpdiAqcnNjOwotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9k ZXZpY2UoZGV2KTsKLQotCWlmICghZGV2IHx8ICFwZGV2KSB7Ci0JCXByX2VycigiaW52YWxpZCBw YXJhbShzKVxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlyc2MgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0 YShwZGV2KTsKLQlpZiAoIXJzYykgewotCQlwcl9lcnIoImludmFsaWQgZGlzcGxheSByc2NcbiIp OwotCQlyZXR1cm47Ci0JfQotCi0JbXV0ZXhfbG9jaygmcnNjLT5jbGllbnRfbG9jayk7Ci0JcnNj LT5tYXN0ZXJfZHJtID0gTlVMTDsKLQltdXRleF91bmxvY2soJnJzYy0+Y2xpZW50X2xvY2spOwot fQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNvbXBvbmVudF9vcHMgZHB1X3JzY19jb21wX29wcyA9 IHsKLQkuYmluZCA9IGRwdV9yc2NfYmluZCwKLQkudW5iaW5kID0gZHB1X3JzY191bmJpbmQsCi19 OwotCi1zdGF0aWMgaW50IGRwdV9yc2NfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRl dikKLXsKLQlpbnQgcmV0OwotCXN0cnVjdCBkcHVfcnNjX3ByaXYgKnJzYzsKLQlzdGF0aWMgaW50 IGNvdW50ZXI7Ci0JY2hhciAgbmFtZVtNQVhfUlNDX0NMSUVOVF9OQU1FX0xFTl07Ci0KLQlyc2Mg PSBremFsbG9jKHNpemVvZigqcnNjKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFyc2MpIHsKLQkJcmV0 ID0gLUVOT01FTTsKLQkJZ290byByc2NfYWxsb2NfZmFpbDsKLQl9Ci0KLQlwbGF0Zm9ybV9zZXRf ZHJ2ZGF0YShwZGV2LCByc2MpOwotCW9mX3Byb3BlcnR5X3JlYWRfdTMyKHBkZXYtPmRldi5vZl9u b2RlLCAicWNvbSxkcHUtcnNjLXZlcnNpb24iLAotCQkJCQkJCQkmcnNjLT52ZXJzaW9uKTsKLQot CXJldCA9IGRwdV9wb3dlcl9yZXNvdXJjZV9pbml0KHBkZXYsICZyc2MtPnBoYW5kbGUpOwotCWlm IChyZXQpIHsKLQkJcHJfZXJyKCJkcHUgcnNjOnBvd2VyIHJlc291cmNlIGluaXQgZmFpbGVkIHJl dDolZFxuIiwgcmV0KTsKLQkJZ290byBkcHVfcnNjX2ZhaWw7Ci0JfQotCi0JcnNjLT5wY2xpZW50 ID0gZHB1X3Bvd2VyX2NsaWVudF9jcmVhdGUoJnJzYy0+cGhhbmRsZSwgInJzYyIpOwotCWlmIChJ U19FUlJfT1JfTlVMTChyc2MtPnBjbGllbnQpKSB7Ci0JCXJldCA9IFBUUl9FUlIocnNjLT5wY2xp ZW50KTsKLQkJcnNjLT5wY2xpZW50ID0gTlVMTDsKLQkJcHJfZXJyKCJkcHUgcnNjOnBvd2VyIGNs aWVudCBjcmVhdGUgZmFpbGVkIHJldDolZFxuIiwgcmV0KTsKLQkJZ290byBkcHVfcnNjX2ZhaWw7 Ci0JfQotCi0JLyoqCi0JICogZHB1IHJzYyBzaG91bGQgYWx3YXlzIHZvdGUgdGhyb3VnaCBlbmFi bGUgcGF0aCwgc2xlZXAgdm90ZSBpcwotCSAqIHNldCB0byAiMCIgYnkgZGVmYXVsdC4KLQkgKi8K LQlkcHVfcG93ZXJfZGF0YV9idXNfc3RhdGVfdXBkYXRlKCZyc2MtPnBoYW5kbGUsIHRydWUpOwot Ci0JcnNjLT5kaXNwX3JzYyA9IHJwbWhfZ2V0X2J5bmFtZShwZGV2LCAiZGlzcF9yc2MiKTsKLQlp ZiAoSVNfRVJSX09SX05VTEwocnNjLT5kaXNwX3JzYykpIHsKLQkJcmV0ID0gUFRSX0VSUihyc2Mt PmRpc3BfcnNjKTsKLQkJcnNjLT5kaXNwX3JzYyA9IE5VTEw7Ci0JCXByX2VycigiZHB1IHJzYzpn ZXQgZGlzcGxheSByc2MgZmFpbGVkIHJldDolZFxuIiwgcmV0KTsKLQkJZ290byBkcHVfcnNjX2Zh aWw7Ci0JfQotCi0JcmV0ID0gbXNtX2Rzc19pb3JlbWFwX2J5bmFtZShwZGV2LCAmcnNjLT53cmFw cGVyX2lvLCAid3JhcHBlciIpOwotCWlmIChyZXQpIHsKLQkJcHJfZXJyKCJkcHUgcnNjOiB3cmFw cGVyIGlvIGRhdGEgbWFwcGluZyBmYWlsZWQgcmV0PSVkXG4iLCByZXQpOwotCQlnb3RvIGRwdV9y c2NfZmFpbDsKLQl9Ci0KLQlyZXQgPSBtc21fZHNzX2lvcmVtYXBfYnluYW1lKHBkZXYsICZyc2Mt PmRydl9pbywgImRydiIpOwotCWlmIChyZXQpIHsKLQkJcHJfZXJyKCJkcHUgcnNjOiBkcnYgaW8g ZGF0YSBtYXBwaW5nIGZhaWxlZCByZXQ6JWRcbiIsIHJldCk7Ci0JCWdvdG8gZHB1X3JzY19mYWls OwotCX0KLQotCXJzYy0+ZnMgPSBkZXZtX3JlZ3VsYXRvcl9nZXQoJnBkZXYtPmRldiwgInZkZCIp OwotCWlmIChJU19FUlJfT1JfTlVMTChyc2MtPmZzKSkgewotCQlyc2MtPmZzID0gTlVMTDsKLQkJ cHJfZXJyKCJ1bmFibGUgdG8gZ2V0IHJlZ3VsYXRvclxuIik7Ci0JCWdvdG8gZHB1X3JzY19mYWls OwotCX0KLQotCXJldCA9IGRwdV9yc2NfaHdfcmVnaXN0ZXIocnNjKTsKLQlpZiAocmV0KSB7Ci0J CXByX2VycigiZHB1IHJzYzogaHcgcmVnaXN0ZXIgZmFpbGVkIHJldDolZFxuIiwgcmV0KTsKLQkJ Z290byBkcHVfcnNjX2ZhaWw7Ci0JfQotCi0JaWYgKGRwdV9yc2NfY2xrX2VuYWJsZSgmcnNjLT5w aGFuZGxlLCByc2MtPnBjbGllbnQsIHRydWUpKSB7Ci0JCXByX2VycigiZmFpbGVkIHRvIGVuYWJs ZSBkcHUgcnNjIHBvd2VyIHJlc291cmNlc1xuIik7Ci0JCWdvdG8gZHB1X3JzY19mYWlsOwotCX0K LQotCWlmIChkcHVfcnNjX3RpbWVyX2NhbGN1bGF0ZShyc2MsIE5VTEwpKQotCQlnb3RvIGRwdV9y c2NfZmFpbDsKLQotCWRwdV9yc2NfY2xrX2VuYWJsZSgmcnNjLT5waGFuZGxlLCByc2MtPnBjbGll bnQsIGZhbHNlKTsKLQotCUlOSVRfTElTVF9IRUFEKCZyc2MtPmNsaWVudF9saXN0KTsKLQlJTklU X0xJU1RfSEVBRCgmcnNjLT5ldmVudF9saXN0KTsKLQltdXRleF9pbml0KCZyc2MtPmNsaWVudF9s b2NrKTsKLQotCXByX2luZm8oImRwdSByc2MgaW5kZXg6JWQgcHJvYmVkIHN1Y2Nlc3NmdWxseVxu IiwKLQkJCQlEUFVfUlNDX0lOREVYICsgY291bnRlcik7Ci0KLQlyc2NfcHJ2X2xpc3RbRFBVX1JT Q19JTkRFWCArIGNvdW50ZXJdID0gcnNjOwotCXNucHJpbnRmKG5hbWUsIE1BWF9SU0NfQ0xJRU5U X05BTUVfTEVOLCAiJXMlZCIsICJkcHVfcnNjIiwgY291bnRlcik7Ci0JX2RwdV9yc2NfaW5pdF9k ZWJ1Z2ZzKHJzYywgbmFtZSk7Ci0JY291bnRlcisrOwotCi0JcmV0ID0gY29tcG9uZW50X2FkZCgm cGRldi0+ZGV2LCAmZHB1X3JzY19jb21wX29wcyk7Ci0JaWYgKHJldCkKLQkJcHJfZGVidWcoImNv bXBvbmVudCBhZGQgZmFpbGVkLCByZXQ9JWRcbiIsIHJldCk7Ci0JcmV0ID0gMDsKLQotCXJldHVy biByZXQ7Ci0KLWRwdV9yc2NfZmFpbDoKLQlkcHVfcnNjX2RlaW5pdChwZGV2LCByc2MpOwotcnNj X2FsbG9jX2ZhaWw6Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBkcHVfcnNjX3JlbW92 ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQotewotCXN0cnVjdCBkcHVfcnNjX3ByaXYg KnJzYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCi0JZHB1X3JzY19kZWluaXQocGRl diwgcnNjKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2Vf aWQgZHRfbWF0Y2hbXSA9IHsKLQl7IC5jb21wYXRpYmxlID0gInFjb20sZHB1LXJzYyJ9LAotCXt9 Ci19OwotCi1NT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBkdF9tYXRjaCk7Ci0KLXN0YXRpYyBzdHJ1 Y3QgcGxhdGZvcm1fZHJpdmVyIGRwdV9yc2NfcGxhdGZvcm1fZHJpdmVyID0gewotCS5wcm9iZSAg ICAgID0gZHB1X3JzY19wcm9iZSwKLQkucmVtb3ZlICAgICA9IGRwdV9yc2NfcmVtb3ZlLAotCS5k cml2ZXIgICAgID0gewotCQkubmFtZSAgID0gImRwdV9yc2MiLAotCQkub2ZfbWF0Y2hfdGFibGUg PSBkdF9tYXRjaCwKLQl9LAotfTsKLQotc3RhdGljIGludCBfX2luaXQgZHB1X3JzY19yZWdpc3Rl cih2b2lkKQotewotCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmRwdV9yc2NfcGxh dGZvcm1fZHJpdmVyKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGRwdV9yc2NfdW5yZWdpc3Rl cih2b2lkKQotewotCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZkcHVfcnNjX3BsYXRmb3Jt X2RyaXZlcik7Ci19Ci0KLW1vZHVsZV9pbml0KGRwdV9yc2NfcmVnaXN0ZXIpOwotbW9kdWxlX2V4 aXQoZHB1X3JzY191bnJlZ2lzdGVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20v ZHB1X3JzY19ody5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcHVfcnNjX2h3LmMKZGVsZXRlZCBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhMzc5ZGUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL21zbS9kcHVfcnNjX2h3LmMKKysrIC9kZXYvbnVsbApAQCAtMSw4MTggKzAsMCBAQAotLyog Q29weXJpZ2h0IChjKSAyMDE2LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRz IHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKLSAqIG9ubHkgdmVy c2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoK LSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg YmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl IGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICovCi0KLSNkZWZpbmUgcHJfZm10KGZtdCkJIltk cHVfcnNjX2h3OiVzOiVkXTogIiBmbXQsIF9fZnVuY19fLCBfX0xJTkVfXwotCi0jaW5jbHVkZSA8 bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgotI2luY2x1ZGUgPGxp bnV4L2RlbGF5Lmg+Ci0KLSNpbmNsdWRlICJkcHVfcnNjX3ByaXYuaCIKLSNpbmNsdWRlICJkcHVf ZGJnLmgiCi0KLS8qIGRpc3BsYXkgcnNjIG9mZnNldCAqLwotI2RlZmluZSBEUFVfUlNDQ19QRENf U0VRX1NUQVJUX0FERFJfUkVHX09GRlNFVF9EUlYwCTB4MDIwCi0jZGVmaW5lIERQVV9SU0NDX1BE Q19NQVRDSF9WQUxVRV9MT19SRUdfT0ZGU0VUX0RSVjAJMHgwMjQKLSNkZWZpbmUgRFBVX1JTQ0Nf UERDX01BVENIX1ZBTFVFX0hJX1JFR19PRkZTRVRfRFJWMAkweDAyOAotI2RlZmluZSBEUFVfUlND Q19QRENfU0xBVkVfSURfRFJWMAkJCTB4MDJjCi0jZGVmaW5lIERQVV9SU0NDX1NFUV9QUk9HUkFN X0NPVU5URVIJCQkweDQwOAotI2RlZmluZSBEUFVfUlNDQ19TRVFfQ0ZHX0JSX0FERFJfMF9EUlYw CQkJMHg0MTAKLSNkZWZpbmUgRFBVX1JTQ0NfU0VRX0NGR19CUl9BRERSXzFfRFJWMAkJCTB4NDE0 Ci0jZGVmaW5lIERQVV9SU0NDX1NFUV9NRU1fMF9EUlYwCQkJCTB4NjAwCi0jZGVmaW5lIERQVV9S U0NDX1NPTFZFUl9PVkVSUklERV9DVFJMX0RSVjAJCTB4YzE0Ci0jZGVmaW5lIERQVV9SU0NDX0VS Uk9SX0lSUV9TVEFUVVNfRFJWMAkJCTB4MGQwCi0jZGVmaW5lIERQVV9SU0NDX1NFUV9CVVNZX0RS VjAJCQkJMHg0MDQKLSNkZWZpbmUgRFBVX1JTQ0NfU09MVkVSX1NUQVRVUzBfRFJWMAkJCTB4YzI0 Ci0jZGVmaW5lIERQVV9SU0NDX1NPTFZFUl9TVEFUVVMxX0RSVjAJCQkweGMyOAotI2RlZmluZSBE UFVfUlNDQ19TT0xWRVJfU1RBVFVTMl9EUlYwCQkJMHhjMmMKLSNkZWZpbmUgRFBVX1JTQ0NfQU1D X1RDU19NT0RFX0lSUV9TVEFUVVNfRFJWMAkJMHgxYzAwCi0KLSNkZWZpbmUgRFBVX1JTQ0NfU09G VF9XQUtFVVBfVElNRV9MT19EUlYwCQkweGMwNAotI2RlZmluZSBEUFVfUlNDQ19TT0ZUX1dBS0VV UF9USU1FX0hJX0RSVjAJCTB4YzA4Ci0jZGVmaW5lIERQVV9SU0NDX01BWF9JRExFX0RVUkFUSU9O X0RSVjAJCQkweGMwYwotI2RlZmluZSBEUFVfUlNDX1NPTFZFUl9USU1FX1NMT1RfVEFCTEVfMF9E UlYwCQkweDEwMDAKLSNkZWZpbmUgRFBVX1JTQ19TT0xWRVJfVElNRV9TTE9UX1RBQkxFXzFfRFJW MAkJMHgxMDA0Ci0jZGVmaW5lIERQVV9SU0NfU09MVkVSX1RJTUVfU0xPVF9UQUJMRV8yX0RSVjAJ CTB4MTAwOAotI2RlZmluZSBEUFVfUlNDX1NPTFZFUl9USU1FX1NMT1RfVEFCTEVfM19EUlYwCQkw eDEwMGMKLQotI2RlZmluZSBEUFVfUlNDX1NPTFZFUl9TT0xWRVJfTU9ERVNfRU5BQkxFRF9EUlYw CTB4YzIwCi0jZGVmaW5lIERQVV9SU0NfU09MVkVSX01PREVfUFJJX1RBQkxFX1NMT1QwX1BSSTBf RFJWMAkweDEwODAKLSNkZWZpbmUgRFBVX1JTQ19TT0xWRVJfTU9ERV9QUklfVEFCTEVfU0xPVDFf UFJJMF9EUlYwCTB4MTEwMAotI2RlZmluZSBEUFVfUlNDX1NPTFZFUl9NT0RFX1BSSV9UQUJMRV9T TE9UMV9QUkkzX0RSVjAJMHgxMTBjCi0jZGVmaW5lIERQVV9SU0NfU09MVkVSX01PREVfUFJJX1RB QkxFX1NMT1QyX1BSSTBfRFJWMAkweDExODAKLSNkZWZpbmUgRFBVX1JTQ19TT0xWRVJfTU9ERV9Q UklfVEFCTEVfU0xPVDJfUFJJM19EUlYwCTB4MTE4YwotCi0jZGVmaW5lIERQVV9SU0NfU09MVkVS X09WRVJSSURFX01PREVfRFJWMAkJMHhjMTgKLSNkZWZpbmUgRFBVX1JTQ19TT0xWRVJfT1ZFUlJJ REVfQ1RSTF9EUlYwCQkweGMxNAotI2RlZmluZSBEUFVfUlNDX1RJTUVSU19DT05TSURFUkVEX0RS VjAJCQkweGMwMAotI2RlZmluZSBEUFVfUlNDX1NPTFZFUl9PVkVSUklERV9JRExFX1RJTUVfRFJW MAkJMHhjMWMKLQotI2RlZmluZSBEUFVfUlNDX1NPTFZFUl9NT0RFX1BBUk0wX0RSVjBfTU9ERTAJ CTB4YzMwCi0jZGVmaW5lIERQVV9SU0NfU09MVkVSX01PREVfUEFSTTFfRFJWMF9NT0RFMAkJMHhj MzQKLSNkZWZpbmUgRFBVX1JTQ19TT0xWRVJfTU9ERV9QQVJNMl9EUlYwX01PREUwCQkweGMzOAot I2RlZmluZSBEUFVfUlNDX1NPTFZFUl9NT0RFX1BBUk0zX0RSVjBfTU9ERTAJCTB4YzQwCi0KLSNk ZWZpbmUgRFBVX1JTQ19TT0xWRVJfTU9ERV9QQVJNMF9EUlYwX01PREUxCQkweGM0YwotI2RlZmlu ZSBEUFVfUlNDX1NPTFZFUl9NT0RFX1BBUk0xX0RSVjBfTU9ERTEJCTB4YzUwCi0jZGVmaW5lIERQ VV9SU0NfU09MVkVSX01PREVfUEFSTTJfRFJWMF9NT0RFMQkJMHhjNTQKLSNkZWZpbmUgRFBVX1JT Q19TT0xWRVJfTU9ERV9QQVJNM19EUlYwX01PREUxCQkweGM1YwotCi0jZGVmaW5lIERQVV9SU0Nf U09MVkVSX01PREVfUEFSTTBfRFJWMF9NT0RFMgkJMHhjNjgKLSNkZWZpbmUgRFBVX1JTQ19TT0xW RVJfTU9ERV9QQVJNMV9EUlYwX01PREUyCQkweGM2YwotI2RlZmluZSBEUFVfUlNDX1NPTFZFUl9N T0RFX1BBUk0yX0RSVjBfTU9ERTIJCTB4YzcwCi0jZGVmaW5lIERQVV9SU0NfU09MVkVSX01PREVf UEFSTTNfRFJWMF9NT0RFMgkJMHhjNzgKLQotI2RlZmluZSBEUFVfUlNDQ19UQ1NfRFJWMF9DT05U Uk9MCQkJMHgxYzE0Ci0KLSNkZWZpbmUgRFBVX1JTQ0NfV1JBUFBFUl9DVFJMCQkJCTB4MDAwCi0j ZGVmaW5lIERQVV9SU0NDX1dSQVBQRVJfT1ZFUlJJREVfQ1RSTAkJCTB4MDA0Ci0jZGVmaW5lIERQ VV9SU0NDX1dSQVBQRVJfU1RBVElDX1dBS0VVUF8wCQkweDAwOAotI2RlZmluZSBEUFVfUlNDQ19X UkFQUEVSX1JTQ0NfTU9ERV9USFJFU0hPTEQJCTB4MDBjCi0jZGVmaW5lIERQVV9SU0NDX1dSQVBQ RVJfREVCVUdfQlVTCQkJMHgwMTAKLSNkZWZpbmUgRFBVX1JTQ0NfV1JBUFBFUl9WU1lOQ19USU1F U1RBTVAwCQkweDAxOAotI2RlZmluZSBEUFVfUlNDQ19XUkFQUEVSX1ZTWU5DX1RJTUVTVEFNUDEJ CTB4MDFjCi0jZGVmaW5lIERQVV9SU0NDX1NQQVJFX1BXUl9FVkVOVAkJCTB4MDIwCi0jZGVmaW5l IERQVV9SU0NDX1BXUl9DVFJMCQkJCTB4MDI0Ci0KLS8qIHF0aW1lciBvZmZzZXQgKi8KLSNkZWZp bmUgRFBVX1JTQ0NfUVRNUl9BQ19IV19GUkFNRV9TRUxfMQkJCTB4MUZFMAotI2RlZmluZSBEUFVf UlNDQ19RVE1SX0FDX0hXX0ZSQU1FX1NFTF8yCQkJMHgxRkYwCi0jZGVmaW5lIERQVV9SU0NDX1FU TVJfQUNfQ05UQUNSMF9GRzAJCQkweDEwNDAKLSNkZWZpbmUgRFBVX1JTQ0NfUVRNUl9BQ19DTlRB Q1IxX0ZHMAkJCTB4MTA0NAotI2RlZmluZSBEUFVfUlNDQ19GMF9RVE1SX1YxX0NOVFBfQ1ZBTF9M TwkJMHgyMDIwCi0jZGVmaW5lIERQVV9SU0NDX0YwX1FUTVJfVjFfQ05UUF9DVkFMX0hJCQkweDIw MjQKLSNkZWZpbmUgRFBVX1JTQ0NfRjFfUVRNUl9WMV9DTlRQX0NWQUxfTE8JCTB4MzAyMAotI2Rl ZmluZSBEUFVfUlNDQ19GMV9RVE1SX1YxX0NOVFBfQ1ZBTF9ISQkJMHgzMDI0Ci0jZGVmaW5lIERQ VV9SU0NDX0YwX1FUTVJfVjFfQ05UUF9DVEwJCQkweDIwMkMKLSNkZWZpbmUgRFBVX1JTQ0NfRjFf UVRNUl9WMV9DTlRQX0NUTAkJCTB4MzAyQwotCi0jZGVmaW5lIE1BWF9DSEVDS19MT09QUwkJCTUw MAotI2RlZmluZSBQT1dFUl9DVFJMX0JJVF8xMgkJMTIKLQotc3RhdGljIHZvaWQgcnNjX2V2ZW50 X3RyaWdnZXIoc3RydWN0IGRwdV9yc2NfcHJpdiAqcnNjLCB1aW50MzJfdCBldmVudF90eXBlKQot ewotCXN0cnVjdCBkcHVfcnNjX2V2ZW50ICpldmVudDsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnko ZXZlbnQsICZyc2MtPmV2ZW50X2xpc3QsIGxpc3QpCi0JCWlmIChldmVudC0+ZXZlbnRfdHlwZSAm IGV2ZW50X3R5cGUpCi0JCQlldmVudC0+Y2JfZnVuYyhldmVudF90eXBlLCBldmVudC0+dXNyKTsK LX0KLQotc3RhdGljIGludCByc2NfaHdfcXRpbWVyX2luaXQoc3RydWN0IGRwdV9yc2NfcHJpdiAq cnNjKQotewotCXByX2RlYnVnKCJyc2MgaGFyZHdhcmUgcXRpbWVyIGluaXRcbiIpOwotCi0JZHNz X3JlZ193KCZyc2MtPndyYXBwZXJfaW8sIERQVV9SU0NDX1FUTVJfQUNfSFdfRlJBTUVfU0VMXzEs Ci0JCQkJCQkweGZmZmZmZmZmLCByc2MtPmRlYnVnX21vZGUpOwotCWRzc19yZWdfdygmcnNjLT53 cmFwcGVyX2lvLCBEUFVfUlNDQ19RVE1SX0FDX0hXX0ZSQU1FX1NFTF8yLAotCQkJCQkJMHhmZmZm ZmZmZiwgcnNjLT5kZWJ1Z19tb2RlKTsKLQotCWRzc19yZWdfdygmcnNjLT53cmFwcGVyX2lvLCBE UFVfUlNDQ19RVE1SX0FDX0NOVEFDUjBfRkcwLAotCQkJCQkJMHgxLCByc2MtPmRlYnVnX21vZGUp OwotCWRzc19yZWdfdygmcnNjLT53cmFwcGVyX2lvLCBEUFVfUlNDQ19RVE1SX0FDX0NOVEFDUjFf RkcwLAotCQkJCQkJMHgxLCByc2MtPmRlYnVnX21vZGUpOwotCi0JZHNzX3JlZ193KCZyc2MtPndy YXBwZXJfaW8sIERQVV9SU0NDX0YwX1FUTVJfVjFfQ05UUF9DVkFMX0xPLAotCQkJCQkJMHhmZmZm ZmZmZiwgcnNjLT5kZWJ1Z19tb2RlKTsKLQlkc3NfcmVnX3coJnJzYy0+d3JhcHBlcl9pbywgRFBV X1JTQ0NfRjBfUVRNUl9WMV9DTlRQX0NWQUxfSEksCi0JCQkJCQkweGZmZmZmZmZmLCByc2MtPmRl YnVnX21vZGUpOwotCWRzc19yZWdfdygmcnNjLT53cmFwcGVyX2lvLCBEUFVfUlNDQ19GMV9RVE1S X1YxX0NOVFBfQ1ZBTF9MTywKLQkJCQkJCTB4ZmZmZmZmZmYsIHJzYy0+ZGVidWdfbW9kZSk7Ci0J ZHNzX3JlZ193KCZyc2MtPndyYXBwZXJfaW8sIERQVV9SU0NDX0YxX1FUTVJfVjFfQ05UUF9DVkFM X0hJLAotCQkJCQkJMHhmZmZmZmZmZiwgcnNjLT5kZWJ1Z19tb2RlKTsKLQotCWRzc19yZWdfdygm cnNjLT53cmFwcGVyX2lvLCBEUFVfUlNDQ19GMF9RVE1SX1YxX0NOVFBfQ1RMLAotCQkJCQkJMHgx LCByc2MtPmRlYnVnX21vZGUpOwotCWRzc19yZWdfdygmcnNjLT53cmFwcGVyX2lvLCBEUFVfUlND Q19GMV9RVE1SX1YxX0NOVFBfQ1RMLAotCQkJCQkJMHgxLCByc2MtPmRlYnVnX21vZGUpOwotCi0J cmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcnNjX2h3X3BkY19pbml0KHN0cnVjdCBkcHVfcnNj X3ByaXYgKnJzYykKLXsKLQlwcl9kZWJ1ZygicnNjIGhhcmR3YXJlIHBkYyBpbml0XG4iKTsKLQot CWRzc19yZWdfdygmcnNjLT5kcnZfaW8sIERQVV9SU0NDX1BEQ19TRVFfU1RBUlRfQUREUl9SRUdf T0ZGU0VUX0RSVjAsCi0JCQkJCQkweDQ1MjAsIHJzYy0+ZGVidWdfbW9kZSk7Ci0JZHNzX3JlZ193 KCZyc2MtPmRydl9pbywgRFBVX1JTQ0NfUERDX01BVENIX1ZBTFVFX0xPX1JFR19PRkZTRVRfRFJW MCwKLQkJCQkJCTB4NDUxMCwgcnNjLT5kZWJ1Z19tb2RlKTsKLQlkc3NfcmVnX3coJnJzYy0+ZHJ2 X2lvLCBEUFVfUlNDQ19QRENfTUFUQ0hfVkFMVUVfSElfUkVHX09GRlNFVF9EUlYwLAotCQkJCQkJ MHg0NTE0LCByc2MtPmRlYnVnX21vZGUpOwotCWRzc19yZWdfdygmcnNjLT5kcnZfaW8sIERQVV9S U0NDX1BEQ19TTEFWRV9JRF9EUlYwLAotCQkJCQkJMHgxLCByc2MtPmRlYnVnX21vZGUpOwotCi0J cmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcnNjX2h3X3dyYXBwZXJfaW5pdChzdHJ1Y3QgZHB1 X3JzY19wcml2ICpyc2MpCi17Ci0JcHJfZGVidWcoInJzYyBoYXJkd2FyZSB3cmFwcGVyIGluaXRc biIpOwotCi0JZHNzX3JlZ193KCZyc2MtPndyYXBwZXJfaW8sIERQVV9SU0NDX1dSQVBQRVJfU1RB VElDX1dBS0VVUF8wLAotCQlyc2MtPnRpbWVyX2NvbmZpZy5zdGF0aWNfd2FrZXVwX3RpbWVfbnMs IHJzYy0+ZGVidWdfbW9kZSk7Ci0KLQlkc3NfcmVnX3coJnJzYy0+d3JhcHBlcl9pbywgRFBVX1JT Q0NfV1JBUFBFUl9SU0NDX01PREVfVEhSRVNIT0xELAotCQlyc2MtPnRpbWVyX2NvbmZpZy5yc2Nf bW9kZV90aHJlc2hvbGRfdGltZV9ucywgcnNjLT5kZWJ1Z19tb2RlKTsKLQotCWRzc19yZWdfdygm cnNjLT53cmFwcGVyX2lvLCBEUFVfUlNDQ19XUkFQUEVSX09WRVJSSURFX0NUUkwsCi0JCQkJCQlC SVQoOCksIHJzYy0+ZGVidWdfbW9kZSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcnNj X2h3X3NlcV9tZW1vcnlfaW5pdChzdHJ1Y3QgZHB1X3JzY19wcml2ICpyc2MpCi17Ci0JcHJfZGVi dWcoInJzYyBzZXF1ZW5jZXIgbWVtb3J5IGluaXRcbiIpOwotCi0JLyogTW9kZSAtIDAgc2VxdWVu Y2UgKi8KLQlkc3NfcmVnX3coJnJzYy0+ZHJ2X2lvLCBEUFVfUlNDQ19TRVFfTUVNXzBfRFJWMCAr IDB4MCwKLQkJCQkJCTB4ZTBhODhiYWIsIHJzYy0+ZGVidWdfbW9kZSk7Ci0JZHNzX3JlZ193KCZy c2MtPmRydl9pbywgRFBVX1JTQ0NfU0VRX01FTV8wX0RSVjAgKyAweDQsCi0JCQkJCQkweDhiYWJl YzM5LCByc2MtPmRlYnVnX21vZGUpOwotCWRzc19yZWdfdygmcnNjLT5kcnZfaW8sIERQVV9SU0ND X1NFUV9NRU1fMF9EUlYwICsgMHg4LAotCQkJCQkJMHg4YmFiMjA4OCwgcnNjLT5kZWJ1Z19tb2Rl KTsKLQotCS8qIE1vZGUgLSAxIHNlcXVlbmNlICovCi0JZHNzX3JlZ193KCZyc2MtPmRydl9pbywg RFBVX1JTQ0NfU0VRX01FTV8wX0RSVjAgKyAweGMsCi0JCQkJCQkweDM5ZTAzOGE4LCByc2MtPmRl YnVnX21vZGUpOwotCWRzc19yZWdfdygmcnNjLT5kcnZfaW8sIERQVV9SU0NDX1NFUV9NRU1fMF9E UlYwICsgMHgxMCwKLQkJCQkJCTB4ODg4YmFiZWMsIHJzYy0+ZGVidWdfbW9kZSk7Ci0JZHNzX3Jl Z193KCZyc2MtPmRydl9pbywgRFBVX1JTQ0NfU0VRX01FTV8wX0RSVjAgKyAweDE0LAotCQkJCQkJ MHhhODA2YTAyMCwgcnNjLT5kZWJ1Z19tb2RlKTsKLQotCS8qIE1vZGUgLSAyIHNlcXVlbmNlICov Ci0JZHNzX3JlZ193KCZyc2MtPmRydl9pbywgRFBVX1JTQ0NfU0VRX01FTV8wX0RSVjAgKyAweDE4 LAotCQkJCQkJMHhhMTM4ZWJhYSwgcnNjLT5kZWJ1Z19tb2RlKTsKLQlkc3NfcmVnX3coJnJzYy0+ ZHJ2X2lvLCBEUFVfUlNDQ19TRVFfTUVNXzBfRFJWMCArIDB4MWMsCi0JCQkJCQkweGFjYTU4MWUx LCByc2MtPmRlYnVnX21vZGUpOwotCWRzc19yZWdfdygmcnNjLT5kcnZfaW8sIERQVV9SU0NDX1NF UV9NRU1fMF9EUlYwICsgMHgyMCwKLQkJCQkJCTB4ZTJhMmVkZTAsIHJzYy0+ZGVidWdfbW9kZSk7 Ci0JZHNzX3JlZ193KCZyc2MtPmRydl9pbywgRFBVX1JTQ0NfU0VRX01FTV8wX0RSVjAgKyAweDI0 LAotCQkJCQkJMHhlYThhMzk4MiwgcnNjLT5kZWJ1Z19tb2RlKTsKLQlkc3NfcmVnX3coJnJzYy0+ ZHJ2X2lvLCBEUFVfUlNDQ19TRVFfTUVNXzBfRFJWMCArIDB4MjgsCi0JCQkJCQkweGE5MjA4ODhj LCByc2MtPmRlYnVnX21vZGUpOwotCi0JLyogdGNzIHNsZWVwIHNlcXVlbmNlICovCi0JZHNzX3Jl Z193KCZyc2MtPmRydl9pbywgRFBVX1JTQ0NfU0VRX01FTV8wX0RSVjAgKyAweDJjLAotCQkJCQkJ MHg4OWU2YTZlOSwgcnNjLT5kZWJ1Z19tb2RlKTsKLQlkc3NfcmVnX3coJnJzYy0+ZHJ2X2lvLCBE UFVfUlNDQ19TRVFfTUVNXzBfRFJWMCArIDB4MzAsCi0JCQkJCQkweGE3ZTlhOTIwLCByc2MtPmRl YnVnX21vZGUpOwotCWRzc19yZWdfdygmcnNjLT5kcnZfaW8sIERQVV9SU0NDX1NFUV9NRU1fMF9E UlYwICsgMHgzNCwKLQkJCQkJCTB4MDAyMDg5ZTcsIHJzYy0+ZGVidWdfbW9kZSk7Ci0KLQkvKiBi cmFuY2ggYWRkcmVzcyAqLwotCWRzc19yZWdfdygmcnNjLT5kcnZfaW8sIERQVV9SU0NDX1NFUV9D RkdfQlJfQUREUl8wX0RSVjAsCi0JCQkJCQkweDJiLCByc2MtPmRlYnVnX21vZGUpOwotCWRzc19y ZWdfdygmcnNjLT5kcnZfaW8sIERQVV9SU0NDX1NFUV9DRkdfQlJfQUREUl8xX0RSVjAsCi0JCQkJ CQkweDMxLCByc2MtPmRlYnVnX21vZGUpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQg cnNjX2h3X3NvbHZlcl9pbml0KHN0cnVjdCBkcHVfcnNjX3ByaXYgKnJzYykKLXsKLQljb25zdCB1 MzIgbW9kZV8wX3N0YXJ0X2FkZHIgPSAweDA7Ci0JY29uc3QgdTMyIG1vZGVfMV9zdGFydF9hZGRy ID0gMHhhOwotCWNvbnN0IHUzMiBtb2RlXzJfc3RhcnRfYWRkciA9IDB4MTU7Ci0KLQlwcl9kZWJ1 ZygicnNjIHNvbHZlciBpbml0XG4iKTsKLQotCWRzc19yZWdfdygmcnNjLT5kcnZfaW8sIERQVV9S U0NDX1NPRlRfV0FLRVVQX1RJTUVfTE9fRFJWMCwKLQkJCQkJMHhGRkZGRkZGRiwgcnNjLT5kZWJ1 Z19tb2RlKTsKLQlkc3NfcmVnX3coJnJzYy0+ZHJ2X2lvLCBEUFVfUlNDQ19TT0ZUX1dBS0VVUF9U SU1FX0hJX0RSVjAsCi0JCQkJCTB4RkZGRkZGRkYsIHJzYy0+ZGVidWdfbW9kZSk7Ci0JZHNzX3Jl Z193KCZyc2MtPmRydl9pbywgRFBVX1JTQ0NfTUFYX0lETEVfRFVSQVRJT05fRFJWMCwKLQkJCQkJ MHhFRkZGRkZGRiwgcnNjLT5kZWJ1Z19tb2RlKTsKLQotCWRzc19yZWdfdygmcnNjLT5kcnZfaW8s IERQVV9SU0NfU09MVkVSX1RJTUVfU0xPVF9UQUJMRV8wX0RSVjAsCi0JCQkJCQkweDAsIHJzYy0+ ZGVidWdfbW9kZSk7Ci0JZHNzX3JlZ193KCZyc2MtPmRydl9pbywgRFBVX1JTQ19TT0xWRVJfVElN RV9TTE9UX1RBQkxFXzFfRFJWMCwKLQkJcnNjLT50aW1lcl9jb25maWcucnNjX3RpbWVfc2xvdF8w X25zLCByc2MtPmRlYnVnX21vZGUpOwotCWRzc19yZWdfdygmcnNjLT5kcnZfaW8sIERQVV9SU0Nf U09MVkVSX1RJTUVfU0xPVF9UQUJMRV8yX0RSVjAsCi0JCXJzYy0+dGltZXJfY29uZmlnLnJzY190 aW1lX3Nsb3RfMV9ucywgcnNjLT5kZWJ1Z19tb2RlKTsKLQlkc3NfcmVnX3coJnJzYy0+ZHJ2X2lv LCBEUFVfUlNDX1NPTFZFUl9USU1FX1NMT1RfVEFCTEVfM19EUlYwLAotCQlyc2MtPnRpbWVyX2Nv bmZpZy5yc2NfdGltZV9zbG90XzJfbnMsIHJzYy0+ZGVidWdfbW9kZSk7Ci0KLQlkc3NfcmVnX3co JnJzYy0+ZHJ2X2lvLCBEUFVfUlNDX1NPTFZFUl9TT0xWRVJfTU9ERVNfRU5BQkxFRF9EUlYwLAot CQkJCQkJMHg3LCByc2MtPmRlYnVnX21vZGUpOwotCi0JZHNzX3JlZ193KCZyc2MtPmRydl9pbywg RFBVX1JTQ19TT0xWRVJfTU9ERV9QUklfVEFCTEVfU0xPVDBfUFJJMF9EUlYwLAotCQkJCQkJMHgw LCByc2MtPmRlYnVnX21vZGUpOwotCWRzc19yZWdfdygmcnNjLT5kcnZfaW8sIERQVV9SU0NfU09M VkVSX01PREVfUFJJX1RBQkxFX1NMT1QxX1BSSTBfRFJWMCwKLQkJCQkJCTB4MSwgcnNjLT5kZWJ1 Z19tb2RlKTsKLQlkc3NfcmVnX3coJnJzYy0+ZHJ2X2lvLCBEUFVfUlNDX1NPTFZFUl9NT0RFX1BS SV9UQUJMRV9TTE9UMV9QUkkzX0RSVjAsCi0JCQkJCQkweDEsIHJzYy0+ZGVidWdfbW9kZSk7Ci0J ZHNzX3JlZ193KCZyc2MtPmRydl9pbywgRFBVX1JTQ19TT0xWRVJfTU9ERV9QUklfVEFCTEVfU0xP VDJfUFJJMF9EUlYwLAotCQkJCQkJMHgyLCByc2MtPmRlYnVnX21vZGUpOwotCWRzc19yZWdfdygm cnNjLT5kcnZfaW8sIERQVV9SU0NfU09MVkVSX01PREVfUFJJX1RBQkxFX1NMT1QyX1BSSTNfRFJW MCwKLQkJCQkJCTB4MiwgcnNjLT5kZWJ1Z19tb2RlKTsKLQotCWRzc19yZWdfdygmcnNjLT5kcnZf aW8sIERQVV9SU0NfU09MVkVSX09WRVJSSURFX01PREVfRFJWMCwKLQkJCQkJCTB4MCwgcnNjLT5k ZWJ1Z19tb2RlKTsKLQlkc3NfcmVnX3coJnJzYy0+ZHJ2X2lvLCBEUFVfUlNDX1NPTFZFUl9PVkVS UklERV9DVFJMX0RSVjAsCi0JCQkJCW1vZGVfMF9zdGFydF9hZGRyLCByc2MtPmRlYnVnX21vZGUp OwotCWRzc19yZWdfdygmcnNjLT5kcnZfaW8sIERQVV9SU0NfVElNRVJTX0NPTlNJREVSRURfRFJW MCwKLQkJCQkJCTB4MSwgcnNjLT5kZWJ1Z19tb2RlKTsKLQlkc3NfcmVnX3coJnJzYy0+ZHJ2X2lv LCBEUFVfUlNDX1NPTFZFUl9PVkVSUklERV9JRExFX1RJTUVfRFJWMCwKLQkJCQkJCTB4MDEwMDAw MTAsIHJzYy0+ZGVidWdfbW9kZSk7Ci0KLQlkc3NfcmVnX3coJnJzYy0+ZHJ2X2lvLCBEUFVfUlND X1NPTFZFUl9NT0RFX1BBUk0wX0RSVjBfTU9ERTAsCi0JCQkJCW1vZGVfMF9zdGFydF9hZGRyLCBy c2MtPmRlYnVnX21vZGUpOwotCWRzc19yZWdfdygmcnNjLT5kcnZfaW8sIERQVV9SU0NfU09MVkVS X01PREVfUEFSTTFfRFJWMF9NT0RFMCwKLQkJCQkJMHg4MDAwMDAwMCwgcnNjLT5kZWJ1Z19tb2Rl KTsKLQlkc3NfcmVnX3coJnJzYy0+ZHJ2X2lvLCBEUFVfUlNDX1NPTFZFUl9NT0RFX1BBUk0yX0RS VjBfTU9ERTAsCi0JCQlyc2MtPnRpbWVyX2NvbmZpZy5yc2NfYmFja29mZl90aW1lX25zLCByc2Mt PmRlYnVnX21vZGUpOwotCWRzc19yZWdfdygmcnNjLT5kcnZfaW8sIERQVV9SU0NfU09MVkVSX01P REVfUEFSTTNfRFJWMF9NT0RFMCwKLQkJCXJzYy0+dGltZXJfY29uZmlnLnBkY19iYWNrb2ZmX3Rp bWVfbnMsIHJzYy0+ZGVidWdfbW9kZSk7Ci0KLQlkc3NfcmVnX3coJnJzYy0+ZHJ2X2lvLCBEUFVf UlNDX1NPTFZFUl9NT0RFX1BBUk0wX0RSVjBfTU9ERTEsCi0JCQkJCW1vZGVfMV9zdGFydF9hZGRy LCByc2MtPmRlYnVnX21vZGUpOwotCWRzc19yZWdfdygmcnNjLT5kcnZfaW8sIERQVV9SU0NfU09M VkVSX01PREVfUEFSTTFfRFJWMF9NT0RFMSwKLQkJCQkJMHg4MDAwMDAwMCwgcnNjLT5kZWJ1Z19t b2RlKTsKLQlkc3NfcmVnX3coJnJzYy0+ZHJ2X2lvLCBEUFVfUlNDX1NPTFZFUl9NT0RFX1BBUk0y X0RSVjBfTU9ERTEsCi0JCQlyc2MtPnRpbWVyX2NvbmZpZy5yc2NfYmFja29mZl90aW1lX25zLCBy c2MtPmRlYnVnX21vZGUpOwotCWRzc19yZWdfdygmcnNjLT5kcnZfaW8sIERQVV9SU0NfU09MVkVS X01PREVfUEFSTTNfRFJWMF9NT0RFMSwKLQkJCXJzYy0+dGltZXJfY29uZmlnLnBkY19iYWNrb2Zm X3RpbWVfbnMsIHJzYy0+ZGVidWdfbW9kZSk7Ci0KLQlkc3NfcmVnX3coJnJzYy0+ZHJ2X2lvLCBE UFVfUlNDX1NPTFZFUl9NT0RFX1BBUk0wX0RSVjBfTU9ERTIsCi0JCQkJCW1vZGVfMl9zdGFydF9h ZGRyLCByc2MtPmRlYnVnX21vZGUpOwotCWRzc19yZWdfdygmcnNjLT5kcnZfaW8sIERQVV9SU0Nf U09MVkVSX01PREVfUEFSTTFfRFJWMF9NT0RFMiwKLQkJCQkJMHg4MDAwMDAwMCwgcnNjLT5kZWJ1 Z19tb2RlKTsKLQlkc3NfcmVnX3coJnJzYy0+ZHJ2X2lvLCBEUFVfUlNDX1NPTFZFUl9NT0RFX1BB Uk0yX0RSVjBfTU9ERTIsCi0JCQkJCTB4MCwgcnNjLT5kZWJ1Z19tb2RlKTsKLQlkc3NfcmVnX3co JnJzYy0+ZHJ2X2lvLCBEUFVfUlNDX1NPTFZFUl9NT0RFX1BBUk0zX0RSVjBfTU9ERTIsCi0JCQly c2MtPnRpbWVyX2NvbmZpZy5wZGNfYmFja29mZl90aW1lX25zLCByc2MtPmRlYnVnX21vZGUpOwot Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcnNjX2h3X3RpbWVyX3VwZGF0ZShzdHJ1Y3Qg ZHB1X3JzY19wcml2ICpyc2MpCi17Ci0JaWYgKCFyc2MpIHsKLQkJcHJfZGVidWcoImludmFsaWQg aW5wdXQgcGFyYW1cbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlwcl9kZWJ1ZygicnNj IGh3IHRpbWVyIHVwZGF0ZVxuIik7Ci0KLQlkc3NfcmVnX3coJnJzYy0+ZHJ2X2lvLCBEUFVfUlND X1NPTFZFUl9USU1FX1NMT1RfVEFCTEVfMV9EUlYwLAotCQlyc2MtPnRpbWVyX2NvbmZpZy5yc2Nf dGltZV9zbG90XzBfbnMsIHJzYy0+ZGVidWdfbW9kZSk7Ci0JZHNzX3JlZ193KCZyc2MtPmRydl9p bywgRFBVX1JTQ19TT0xWRVJfVElNRV9TTE9UX1RBQkxFXzJfRFJWMCwKLQkJcnNjLT50aW1lcl9j b25maWcucnNjX3RpbWVfc2xvdF8xX25zLCByc2MtPmRlYnVnX21vZGUpOwotCWRzc19yZWdfdygm cnNjLT5kcnZfaW8sIERQVV9SU0NfU09MVkVSX1RJTUVfU0xPVF9UQUJMRV8zX0RSVjAsCi0JCXJz Yy0+dGltZXJfY29uZmlnLnJzY190aW1lX3Nsb3RfMl9ucywgcnNjLT5kZWJ1Z19tb2RlKTsKLQot CWRzc19yZWdfdygmcnNjLT5kcnZfaW8sIERQVV9SU0NfU09MVkVSX01PREVfUEFSTTJfRFJWMF9N T0RFMCwKLQkJCXJzYy0+dGltZXJfY29uZmlnLnJzY19iYWNrb2ZmX3RpbWVfbnMsIHJzYy0+ZGVi dWdfbW9kZSk7Ci0JZHNzX3JlZ193KCZyc2MtPmRydl9pbywgRFBVX1JTQ19TT0xWRVJfTU9ERV9Q QVJNM19EUlYwX01PREUwLAotCQkJcnNjLT50aW1lcl9jb25maWcucGRjX2JhY2tvZmZfdGltZV9u cywgcnNjLT5kZWJ1Z19tb2RlKTsKLQotCWRzc19yZWdfdygmcnNjLT5kcnZfaW8sIERQVV9SU0Nf U09MVkVSX01PREVfUEFSTTJfRFJWMF9NT0RFMSwKLQkJCXJzYy0+dGltZXJfY29uZmlnLnJzY19i YWNrb2ZmX3RpbWVfbnMsIHJzYy0+ZGVidWdfbW9kZSk7Ci0JZHNzX3JlZ193KCZyc2MtPmRydl9p bywgRFBVX1JTQ19TT0xWRVJfTU9ERV9QQVJNM19EUlYwX01PREUxLAotCQkJcnNjLT50aW1lcl9j b25maWcucGRjX2JhY2tvZmZfdGltZV9ucywgcnNjLT5kZWJ1Z19tb2RlKTsKLQotCWRzc19yZWdf dygmcnNjLT5kcnZfaW8sIERQVV9SU0NfU09MVkVSX01PREVfUEFSTTNfRFJWMF9NT0RFMiwKLQkJ CXJzYy0+dGltZXJfY29uZmlnLnBkY19iYWNrb2ZmX3RpbWVfbnMsIHJzYy0+ZGVidWdfbW9kZSk7 Ci0KLQlkc3NfcmVnX3coJnJzYy0+d3JhcHBlcl9pbywgRFBVX1JTQ0NfV1JBUFBFUl9TVEFUSUNf V0FLRVVQXzAsCi0JCXJzYy0+dGltZXJfY29uZmlnLnN0YXRpY193YWtldXBfdGltZV9ucywgcnNj LT5kZWJ1Z19tb2RlKTsKLQotCWRzc19yZWdfdygmcnNjLT53cmFwcGVyX2lvLCBEUFVfUlNDQ19X UkFQUEVSX1JTQ0NfTU9ERV9USFJFU0hPTEQsCi0JCXJzYy0+dGltZXJfY29uZmlnLnJzY19tb2Rl X3RocmVzaG9sZF90aW1lX25zLCByc2MtPmRlYnVnX21vZGUpOwotCi0JLyogbWFrZSBzdXJlIHRo YXQgaHcgdGltZXJzIGFyZSB1cGRhdGVkICovCi0Jd21iKCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQot c3RhdGljIGludCBkcHVfcnNjX21vZGUyX2V4aXQoc3RydWN0IGRwdV9yc2NfcHJpdiAqcnNjLAot CQkJCQkJZW51bSBkcHVfcnNjX3N0YXRlIHN0YXRlKQotewotCWludCByYyA9IC1FQlVTWTsKLQlp bnQgY291bnQsIHJlZzsKLQl1bnNpZ25lZCBsb25nIHBvd2VyX3N0YXR1czsKLQotCXJzY19ldmVu dF90cmlnZ2VyKHJzYywgRFBVX1JTQ19FVkVOVF9QUkVfQ09SRV9SRVNUT1JFKTsKLQotCS8qKgot CSAqIGZvcmNlIGJ1c3kgYW5kIGlkbGUgZHVyaW5nIGNsayAmIHZpZGVvIG1vZGUgc3RhdGUgYmVj YXVzZSBpdAotCSAqIGlzIHRyeWluZyB0byBlbnRyeSBpbiBtb2RlLTIgd2l0aG91dCB0dXJuaW5n IG9uIHRoZSB2eXNuYy4KLQkgKi8KLQlpZiAoKHN0YXRlID09IERQVV9SU0NfVklEX1NUQVRFKSB8 fCAoc3RhdGUgPT0gRFBVX1JTQ19DTEtfU1RBVEUpKSB7Ci0JCXJlZyA9IGRzc19yZWdfcigmcnNj LT53cmFwcGVyX2lvLAotCQkJRFBVX1JTQ0NfV1JBUFBFUl9PVkVSUklERV9DVFJMLCByc2MtPmRl YnVnX21vZGUpOwotCQlyZWcgJj0gfihCSVQoOCkgfCBCSVQoMCkpOwotCQlkc3NfcmVnX3coJnJz Yy0+d3JhcHBlcl9pbywgRFBVX1JTQ0NfV1JBUFBFUl9PVkVSUklERV9DVFJMLAotCQkJCQkJCXJl ZywgcnNjLT5kZWJ1Z19tb2RlKTsKLQl9Ci0KLQkvLyBuZWVkcyByZXZpZXcgd2l0aCBIUEcgc2Vx dWVuY2UKLQlkc3NfcmVnX3coJnJzYy0+d3JhcHBlcl9pbywgRFBVX1JTQ0NfRjFfUVRNUl9WMV9D TlRQX0NWQUxfTE8sCi0JCQkJCTB4MCwgcnNjLT5kZWJ1Z19tb2RlKTsKLQlkc3NfcmVnX3coJnJz Yy0+d3JhcHBlcl9pbywgRFBVX1JTQ0NfRjFfUVRNUl9WMV9DTlRQX0NWQUxfSEksCi0JCQkJCTB4 MCwgcnNjLT5kZWJ1Z19tb2RlKTsKLQotCXJlZyA9IGRzc19yZWdfcigmcnNjLT53cmFwcGVyX2lv LCBEUFVfUlNDQ19XUkFQUEVSX0NUUkwsCi0JCQkJcnNjLT5kZWJ1Z19tb2RlKTsKLQlyZWcgJj0g fkJJVCgzKTsKLQlkc3NfcmVnX3coJnJzYy0+d3JhcHBlcl9pbywgRFBVX1JTQ0NfV1JBUFBFUl9D VFJMLAotCQkJCQlyZWcsIHJzYy0+ZGVidWdfbW9kZSk7Ci0KLQlyZWcgPSBkc3NfcmVnX3IoJnJz Yy0+d3JhcHBlcl9pbywgRFBVX1JTQ0NfU1BBUkVfUFdSX0VWRU5ULAotCQkJCQkJCXJzYy0+ZGVi dWdfbW9kZSk7Ci0JcmVnIHw9IEJJVCgxMyk7Ci0JZHNzX3JlZ193KCZyc2MtPndyYXBwZXJfaW8s IERQVV9SU0NDX1NQQVJFX1BXUl9FVkVOVCwKLQkJCQkJCQlyZWcsIHJzYy0+ZGVidWdfbW9kZSk7 Ci0KLQkvKiBtYWtlIHN1cmUgdGhhdCBtb2RlLTIgZXhpdCBiZWZvcmUgd2FpdCovCi0Jd21iKCk7 Ci0KLQkvKiB0aGlzIHdhaXQgaXMgcmVxdWlyZWQgdG8gbWFrZSBzdXJlIHRoYXQgZ2RzYyBpcyBw b3dlcmVkIG9uICovCi0JZm9yIChjb3VudCA9IE1BWF9DSEVDS19MT09QUzsgY291bnQgPiAwOyBj b3VudC0tKSB7Ci0JCXBvd2VyX3N0YXR1cyA9IGRzc19yZWdfcigmcnNjLT53cmFwcGVyX2lvLAot CQkJCURQVV9SU0NDX1BXUl9DVFJMLCByc2MtPmRlYnVnX21vZGUpOwotCQlpZiAoIXRlc3RfYml0 KFBPV0VSX0NUUkxfQklUXzEyLCAmcG93ZXJfc3RhdHVzKSkgewotCQkJcmVnID0gZHNzX3JlZ19y KCZyc2MtPmRydl9pbywKLQkJCQlEUFVfUlNDQ19TRVFfUFJPR1JBTV9DT1VOVEVSLCByc2MtPmRl YnVnX21vZGUpOwotCQkJRFBVX0VWVDMyX1ZFUkJPU0UoY291bnQsIHJlZywgcG93ZXJfc3RhdHVz KTsKLQkJCXJjID0gMDsKLQkJCWJyZWFrOwotCQl9Ci0JCXVzbGVlcF9yYW5nZSgxMCwgMTAwKTsK LQl9Ci0KLQlyZWcgPSBkc3NfcmVnX3IoJnJzYy0+d3JhcHBlcl9pbywgRFBVX1JTQ0NfU1BBUkVf UFdSX0VWRU5ULAotCQkJCQkJCXJzYy0+ZGVidWdfbW9kZSk7Ci0JcmVnICY9IH5CSVQoMTMpOwot CWRzc19yZWdfdygmcnNjLT53cmFwcGVyX2lvLCBEUFVfUlNDQ19TUEFSRV9QV1JfRVZFTlQsCi0J CQkJCQkJcmVnLCByc2MtPmRlYnVnX21vZGUpOwotCWlmIChyYykKLQkJcHJfZXJyKCJ2ZGQgcmVn IGlzIG5vdCBlbmFibGVkIHlldFxuIik7Ci0KLQlyc2NfZXZlbnRfdHJpZ2dlcihyc2MsIERQVV9S U0NfRVZFTlRfUE9TVF9DT1JFX1JFU1RPUkUpOwotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMg aW50IGRwdV9yc2NfbW9kZTJfZW50cnkoc3RydWN0IGRwdV9yc2NfcHJpdiAqcnNjKQotewotCWlu dCByYzsKLQlpbnQgY291bnQsIHdyYXBwZXJfc3RhdHVzOwotCXVuc2lnbmVkIGxvbmcgcmVnOwot Ci0JaWYgKHJzYy0+cG93ZXJfY29sbGFwc2VfYmxvY2spCi0JCXJldHVybiAtRUlOVkFMOwotCi0J cmMgPSByZWd1bGF0b3Jfc2V0X21vZGUocnNjLT5mcywgUkVHVUxBVE9SX01PREVfRkFTVCk7Ci0J aWYgKHJjKSB7Ci0JCXByX2VycigidmRkIHJlZyBmYXN0IG1vZGUgc2V0IGZhaWxlZCByYzolZFxu IiwgcmMpOwotCQlyZXR1cm4gcmM7Ci0JfQotCi0JcnNjX2V2ZW50X3RyaWdnZXIocnNjLCBEUFVf UlNDX0VWRU5UX1BSRV9DT1JFX1BDKTsKLQotCS8qIHVwZGF0ZSBxdGltZXJzIHRvIGhpZ2ggZHVy aW5nIGNsayAmIHZpZGVvIG1vZGUgc3RhdGUgKi8KLQlpZiAoKHJzYy0+Y3VycmVudF9zdGF0ZSA9 PSBEUFVfUlNDX1ZJRF9TVEFURSkgfHwKLQkJCShyc2MtPmN1cnJlbnRfc3RhdGUgPT0gRFBVX1JT Q19DTEtfU1RBVEUpKSB7Ci0JCWRzc19yZWdfdygmcnNjLT53cmFwcGVyX2lvLCBEUFVfUlNDQ19G MF9RVE1SX1YxX0NOVFBfQ1ZBTF9ISSwKLQkJCQkJCTB4ZmZmZmZmZmYsIHJzYy0+ZGVidWdfbW9k ZSk7Ci0JCWRzc19yZWdfdygmcnNjLT53cmFwcGVyX2lvLCBEUFVfUlNDQ19GMF9RVE1SX1YxX0NO VFBfQ1ZBTF9MTywKLQkJCQkJCTB4ZmZmZmZmZmYsIHJzYy0+ZGVidWdfbW9kZSk7Ci0JfQotCi0J d3JhcHBlcl9zdGF0dXMgPSBkc3NfcmVnX3IoJnJzYy0+d3JhcHBlcl9pbywgRFBVX1JTQ0NfV1JB UFBFUl9DVFJMLAotCQkJCXJzYy0+ZGVidWdfbW9kZSk7Ci0Jd3JhcHBlcl9zdGF0dXMgfD0gQklU KDMpOwotCXdyYXBwZXJfc3RhdHVzIHw9IEJJVCgwKTsKLQlkc3NfcmVnX3coJnJzYy0+d3JhcHBl cl9pbywgRFBVX1JTQ0NfV1JBUFBFUl9DVFJMLAotCQkJCQl3cmFwcGVyX3N0YXR1cywgcnNjLT5k ZWJ1Z19tb2RlKTsKLQotCS8qKgotCSAqIGZvcmNlIGJ1c3kgYW5kIGlkbGUgZHVyaW5nIGNsayAm IHZpZGVvIG1vZGUgc3RhdGUgYmVjYXVzZSBpdAotCSAqIGlzIHRyeWluZyB0byBlbnRyeSBpbiBt b2RlLTIgd2l0aG91dCB0dXJuaW5nIG9uIHRoZSB2eXNuYy4KLQkgKi8KLQlpZiAoKHJzYy0+Y3Vy cmVudF9zdGF0ZSA9PSBEUFVfUlNDX1ZJRF9TVEFURSkgfHwKLQkJCShyc2MtPmN1cnJlbnRfc3Rh dGUgPT0gRFBVX1JTQ19DTEtfU1RBVEUpKSB7Ci0JCWRzc19yZWdfdygmcnNjLT53cmFwcGVyX2lv LCBEUFVfUlNDQ19XUkFQUEVSX09WRVJSSURFX0NUUkwsCi0JCQkJQklUKDApIHwgQklUKDEpLCBy c2MtPmRlYnVnX21vZGUpOwotCQl3bWIoKTsgLyogZm9yY2UgYnVzeSBndXJhbnRlZSAqLwotCQlk c3NfcmVnX3coJnJzYy0+d3JhcHBlcl9pbywgRFBVX1JTQ0NfV1JBUFBFUl9PVkVSUklERV9DVFJM LAotCQkJCUJJVCgwKSB8IEJJVCg5KSwgcnNjLT5kZWJ1Z19tb2RlKTsKLQl9Ci0KLQkvKiBtYWtl IHN1cmUgdGhhdCBtb2RlLTIgaXMgdHJpZ2dlcmVkIGJlZm9yZSB3YWl0Ki8KLQl3bWIoKTsKLQot CXJjID0gLUVCVVNZOwotCS8qIHRoaXMgd2FpdCBpcyByZXF1aXJlZCB0byB0dXJuIG9mZiB0aGUg cnNjYyBjbG9ja3MgKi8KLQlmb3IgKGNvdW50ID0gTUFYX0NIRUNLX0xPT1BTOyBjb3VudCA+IDA7 IGNvdW50LS0pIHsKLQkJcmVnID0gZHNzX3JlZ19yKCZyc2MtPndyYXBwZXJfaW8sCi0JCQkJRFBV X1JTQ0NfUFdSX0NUUkwsIHJzYy0+ZGVidWdfbW9kZSk7Ci0JCWlmICh0ZXN0X2JpdChQT1dFUl9D VFJMX0JJVF8xMiwgJnJlZykpIHsKLQkJCXJjID0gMDsKLQkJCWJyZWFrOwotCQl9Ci0JCXVzbGVl cF9yYW5nZSgxMCwgMTAwKTsKLQl9Ci0KLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJtZHNzIGdkc2Mg cG93ZXIgZG93biBmYWlsZWQgcmM6JWRcbiIsIHJjKTsKLQkJRFBVX0VWVDMyKHJjLCBEUFVfRVZU TE9HX0VSUk9SKTsKLQkJZ290byBlbmQ7Ci0JfQotCi0JaWYgKChyc2MtPmN1cnJlbnRfc3RhdGUg PT0gRFBVX1JTQ19WSURfU1RBVEUpIHx8Ci0JCQkocnNjLT5jdXJyZW50X3N0YXRlID09IERQVV9S U0NfQ0xLX1NUQVRFKSkgewotCQlkc3NfcmVnX3coJnJzYy0+d3JhcHBlcl9pbywgRFBVX1JTQ0Nf V1JBUFBFUl9PVkVSUklERV9DVFJMLAotCQkJCQlCSVQoMCkgfCBCSVQoOCksIHJzYy0+ZGVidWdf bW9kZSk7Ci0JCXdtYigpOyAvKiBmb3JjZSBidXN5IG9uIHZzeW5jICovCi0JfQotCi0JcnNjX2V2 ZW50X3RyaWdnZXIocnNjLCBEUFVfUlNDX0VWRU5UX1BPU1RfQ09SRV9QQyk7Ci0KLQlyZXR1cm4g MDsKLQotZW5kOgotCWRwdV9yc2NfbW9kZTJfZXhpdChyc2MsIHJzYy0+Y3VycmVudF9zdGF0ZSk7 Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHB1X3JzY19zdGF0ZV91cGRhdGUoc3Ry dWN0IGRwdV9yc2NfcHJpdiAqcnNjLAotCQkJCQkJZW51bSBkcHVfcnNjX3N0YXRlIHN0YXRlKQot ewotCWludCByYyA9IDA7Ci0JaW50IHJlZzsKLQotCWlmIChyc2MtPnBvd2VyX2NvbGxhcHNlKSB7 Ci0JCXJjID0gZHB1X3JzY19tb2RlMl9leGl0KHJzYywgc3RhdGUpOwotCQlpZiAocmMpCi0JCQlw cl9lcnIoInBvd2VyIGNvbGxhcHNlOiBtb2RlMiBleGl0IGZhaWxlZFxuIik7Ci0JCWVsc2UKLQkJ CXJzYy0+cG93ZXJfY29sbGFwc2UgPSBmYWxzZTsKLQl9Ci0KLQlzd2l0Y2ggKHN0YXRlKSB7Ci0J Y2FzZSBEUFVfUlNDX0NNRF9TVEFURToKLQkJcHJfZGVidWcoImNvbW1hbmQgbW9kZSBoYW5kbGlu Z1xuIik7Ci0KLQkJZHNzX3JlZ193KCZyc2MtPndyYXBwZXJfaW8sIERQVV9SU0NDX1dSQVBQRVJf Q1RSTCwKLQkJCQkJCTB4MSwgcnNjLT5kZWJ1Z19tb2RlKTsKLQkJZHNzX3JlZ193KCZyc2MtPmRy dl9pbywgRFBVX1JTQ0NfU09MVkVSX09WRVJSSURFX0NUUkxfRFJWMCwKLQkJCQkJCQkweDAsIHJz Yy0+ZGVidWdfbW9kZSk7Ci0JCXJlZyA9IGRzc19yZWdfcigmcnNjLT53cmFwcGVyX2lvLAotCQkJ RFBVX1JTQ0NfV1JBUFBFUl9PVkVSUklERV9DVFJMLCByc2MtPmRlYnVnX21vZGUpOwotCQlyZWcg fD0gKEJJVCgwKSB8IEJJVCg4KSk7Ci0JCXJlZyAmPSB+KEJJVCgxKSB8IEJJVCgyKSB8IEJJVCgz KSB8IEJJVCg2KSB8IEJJVCg3KSB8IEJJVCg5KSk7Ci0JCWRzc19yZWdfdygmcnNjLT53cmFwcGVy X2lvLCBEUFVfUlNDQ19XUkFQUEVSX09WRVJSSURFX0NUUkwsCi0JCQkJCQkJcmVnLCByc2MtPmRl YnVnX21vZGUpOwotCQkvKiBtYWtlIHN1cmUgdGhhdCBzb2x2ZXIgaXMgZW5hYmxlZCAqLwotCQl3 bWIoKTsKLQotCQlyc2NfZXZlbnRfdHJpZ2dlcihyc2MsIERQVV9SU0NfRVZFTlRfU09MVkVSX0VO QUJMRUQpOwotCQlicmVhazsKLQotCWNhc2UgRFBVX1JTQ19WSURfU1RBVEU6Ci0JCXByX2RlYnVn KCJ2aWRlbyBtb2RlIGhhbmRsaW5nXG4iKTsKLQotCQlkc3NfcmVnX3coJnJzYy0+d3JhcHBlcl9p bywgRFBVX1JTQ0NfV1JBUFBFUl9DVFJMLAotCQkJCQkJMHgxLCByc2MtPmRlYnVnX21vZGUpOwot CQlyZWcgPSBkc3NfcmVnX3IoJnJzYy0+d3JhcHBlcl9pbywKLQkJCURQVV9SU0NDX1dSQVBQRVJf T1ZFUlJJREVfQ1RSTCwgcnNjLT5kZWJ1Z19tb2RlKTsKLQkJcmVnIHw9IEJJVCg4KTsKLQkJcmVn ICY9IH4oQklUKDEpIHwgQklUKDApKTsKLQkJZHNzX3JlZ193KCZyc2MtPndyYXBwZXJfaW8sIERQ VV9SU0NDX1dSQVBQRVJfT1ZFUlJJREVfQ1RSTCwKLQkJCQkJCQlyZWcsIHJzYy0+ZGVidWdfbW9k ZSk7Ci0JCS8qIG1ha2Ugc3VyZSB0aGF0IHNvbHZlciBtb2RlIGlzIG92ZXJyaWRlICovCi0JCXdt YigpOwotCi0JCXJzY19ldmVudF90cmlnZ2VyKHJzYywgRFBVX1JTQ19FVkVOVF9TT0xWRVJfRElT QUJMRUQpOwotCQlicmVhazsKLQotCWNhc2UgRFBVX1JTQ19DTEtfU1RBVEU6Ci0JCXByX2RlYnVn KCJjbGsgc3RhdGUgaGFuZGxpbmdcbiIpOwotCi0JCXJlZyA9IGRzc19yZWdfcigmcnNjLT53cmFw cGVyX2lvLAotCQkJRFBVX1JTQ0NfV1JBUFBFUl9PVkVSUklERV9DVFJMLCByc2MtPmRlYnVnX21v ZGUpOwotCQlyZWcgJj0gfihCSVQoOCkgfCBCSVQoMCkpOwotCQlkc3NfcmVnX3coJnJzYy0+d3Jh cHBlcl9pbywgRFBVX1JTQ0NfV1JBUFBFUl9PVkVSUklERV9DVFJMLAotCQkJCQkJCXJlZywgcnNj LT5kZWJ1Z19tb2RlKTsKLQkJLyogbWFrZSBzdXJlIHRoYXQgc29sdmVyIG1vZGUgaXMgZGlzYWJs ZWQgKi8KLQkJd21iKCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBEUFVfUlNDX0lETEVfU1RBVEU6Ci0J CXJjID0gZHB1X3JzY19tb2RlMl9lbnRyeShyc2MpOwotCQlpZiAocmMpCi0JCQlwcl9lcnIoInBv d2VyIGNvbGxhcHNlIC0gbW9kZSAyIGVudHJ5IGZhaWxlZFxuIik7Ci0JCWVsc2UKLQkJCXJzYy0+ cG93ZXJfY29sbGFwc2UgPSB0cnVlOwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCXByX2Vycigi c3RhdGU6JWQgaGFuZGxpbmcgaXMgbm90IHN1cHBvcnRlZFxuIiwgc3RhdGUpOwotCQlicmVhazsK LQl9Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLWludCByc2NfaHdfaW5pdChzdHJ1Y3QgZHB1X3JzY19w cml2ICpyc2MpCi17Ci0JaW50IHJjID0gMDsKLQotCXJjID0gcnNjX2h3X3F0aW1lcl9pbml0KHJz Yyk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigicnNjIGh3IHF0aW1lciBpbml0IGZhaWxlZFxuIik7 Ci0JCWdvdG8gZW5kOwotCX0KLQotCXJjID0gcnNjX2h3X3dyYXBwZXJfaW5pdChyc2MpOwotCWlm IChyYykgewotCQlwcl9lcnIoInJzYyBodyB3cmFwcGVyIGluaXQgZmFpbGVkXG4iKTsKLQkJZ290 byBlbmQ7Ci0JfQotCi0JcmMgPSByc2NfaHdfc2VxX21lbW9yeV9pbml0KHJzYyk7Ci0JaWYgKHJj KSB7Ci0JCXByX2VycigicnNjIHNlcXVlbmNlciBtZW1vcnkgaW5pdCBmYWlsZWRcbiIpOwotCQln b3RvIGVuZDsKLQl9Ci0KLQlyYyA9IHJzY19od19zb2x2ZXJfaW5pdChyc2MpOwotCWlmIChyYykg ewotCQlwcl9lcnIoInJzYyBzb2x2ZXIgaW5pdCBmYWlsZWRcbiIpOwotCQlnb3RvIGVuZDsKLQl9 Ci0KLQlyYyA9IHJzY19od19wZGNfaW5pdChyc2MpOwotCWlmIChyYykgewotCQlwcl9lcnIoInJz YyBodyBwZGMgaW5pdCBmYWlsZWRcbiIpOwotCQlnb3RvIGVuZDsKLQl9Ci0KLQkvKiBtYWtlIHN1 cmUgdGhhdCBodyBpcyBpbml0aWFsaXplZCAqLwotCXdtYigpOwotCi0JcHJfaW5mbygiZHB1IHJz YyBpbml0IHN1Y2Nlc3NmdWxseSBkb25lXG4iKTsKLWVuZDoKLQlyZXR1cm4gcmM7Ci19Ci0KLWlu dCByc2NfaHdfbW9kZV9jdHJsKHN0cnVjdCBkcHVfcnNjX3ByaXYgKnJzYywgZW51bSByc2NfbW9k ZV9yZXEgcmVxdWVzdCwKLQkJY2hhciAqYnVmZmVyLCBpbnQgYnVmZmVyX3NpemUsIHUzMiBtb2Rl KQotewotCXUzMiBibGVuID0gMDsKLQl1MzIgc2xvdF90aW1lOwotCi0Jc3dpdGNoIChyZXF1ZXN0 KSB7Ci0JY2FzZSBNT0RFX1JFQUQ6Ci0JCWlmICghYnVmZmVyIHx8ICFidWZmZXJfc2l6ZSkKLQkJ CXJldHVybiBibGVuOwotCi0JCWJsZW4gPSBzbnByaW50ZihidWZmZXIsIGJ1ZmZlcl9zaXplIC0g YmxlbiwKLQkJCSJtb2RlX3N0YXR1czoweCV4XG4iLAotCQkJZHNzX3JlZ19yKCZyc2MtPmRydl9p bywgRFBVX1JTQ0NfU09MVkVSX1NUQVRVUzJfRFJWMCwKLQkJCXJzYy0+ZGVidWdfbW9kZSkpOwot CQlicmVhazsKLQotCWNhc2UgTU9ERV9VUERBVEU6Ci0JCXNsb3RfdGltZSA9IG1vZGUgJiBCSVQo MCkgPyAweDAgOgotCQkJCQlyc2MtPnRpbWVyX2NvbmZpZy5yc2NfdGltZV9zbG90XzJfbnM7Ci0J CWRzc19yZWdfdygmcnNjLT5kcnZfaW8sIERQVV9SU0NfU09MVkVSX1RJTUVfU0xPVF9UQUJMRV8w X0RSVjAsCi0JCQkJCQlzbG90X3RpbWUsIHJzYy0+ZGVidWdfbW9kZSk7Ci0KLQkJc2xvdF90aW1l ID0gbW9kZSAmIEJJVCgxKSA/Ci0JCQlyc2MtPnRpbWVyX2NvbmZpZy5yc2NfdGltZV9zbG90XzBf bnMgOgotCQkJCXJzYy0+dGltZXJfY29uZmlnLnJzY190aW1lX3Nsb3RfMl9uczsKLQkJZHNzX3Jl Z193KCZyc2MtPmRydl9pbywgRFBVX1JTQ19TT0xWRVJfVElNRV9TTE9UX1RBQkxFXzFfRFJWMCwK LQkJCQkJCXNsb3RfdGltZSwgcnNjLT5kZWJ1Z19tb2RlKTsKLQotCQlyc2MtPnBvd2VyX2NvbGxh cHNlX2Jsb2NrID0gIShtb2RlICYgQklUKDIpKTsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQli cmVhazsKLQl9Ci0KLQlyZXR1cm4gYmxlbjsKLX0KLQotaW50IGRwdV9yc2NfZGVidWdfc2hvdyhz dHJ1Y3Qgc2VxX2ZpbGUgKnMsIHN0cnVjdCBkcHVfcnNjX3ByaXYgKnJzYykKLXsKLQlzZXFfcHJp bnRmKHMsICJvdmVycmlkZSBjdHJsOjB4JXhcbiIsCi0JCSBkc3NfcmVnX3IoJnJzYy0+d3JhcHBl cl9pbywgRFBVX1JTQ0NfV1JBUFBFUl9PVkVSUklERV9DVFJMLAotCQkJCXJzYy0+ZGVidWdfbW9k ZSkpOwotCXNlcV9wcmludGYocywgInBvd2VyIGN0cmw6MHgleFxuIiwKLQkJIGRzc19yZWdfcigm cnNjLT53cmFwcGVyX2lvLCBEUFVfUlNDQ19QV1JfQ1RSTCwKLQkJCQlyc2MtPmRlYnVnX21vZGUp KTsKLQlzZXFfcHJpbnRmKHMsICJ2c3ljbiB0aW1lc3RhbXAwOjB4JXhcbiIsCi0JCSBkc3NfcmVn X3IoJnJzYy0+d3JhcHBlcl9pbywgRFBVX1JTQ0NfV1JBUFBFUl9WU1lOQ19USU1FU1RBTVAwLAot CQkJCXJzYy0+ZGVidWdfbW9kZSkpOwotCXNlcV9wcmludGYocywgInZzeWNuIHRpbWVzdGFtcDE6 MHgleFxuIiwKLQkJIGRzc19yZWdfcigmcnNjLT53cmFwcGVyX2lvLCBEUFVfUlNDQ19XUkFQUEVS X1ZTWU5DX1RJTUVTVEFNUDEsCi0JCQkJcnNjLT5kZWJ1Z19tb2RlKSk7Ci0KLQlzZXFfcHJpbnRm KHMsICJlcnJvciBpcnEgc3RhdHVzOjB4JXhcbiIsCi0JCSBkc3NfcmVnX3IoJnJzYy0+ZHJ2X2lv LCBEUFVfUlNDQ19FUlJPUl9JUlFfU1RBVFVTX0RSVjAsCi0JCQkJcnNjLT5kZWJ1Z19tb2RlKSk7 Ci0KLQlzZXFfcHJpbnRmKHMsICJzZXEgYnVzeSBzdGF0dXM6MHgleFxuIiwKLQkJIGRzc19yZWdf cigmcnNjLT5kcnZfaW8sIERQVV9SU0NDX1NFUV9CVVNZX0RSVjAsCi0JCQkJcnNjLT5kZWJ1Z19t b2RlKSk7Ci0KLQlzZXFfcHJpbnRmKHMsICJzb2x2ZXIgb3ZlcnJpZGUgY3RybCBzdGF0dXM6MHgl eFxuIiwKLQkJIGRzc19yZWdfcigmcnNjLT5kcnZfaW8sIERQVV9SU0NDX1NPTFZFUl9PVkVSUklE RV9DVFJMX0RSVjAsCi0JCQkJcnNjLT5kZWJ1Z19tb2RlKSk7Ci0Jc2VxX3ByaW50ZihzLCAic29s dmVyIG92ZXJyaWRlIHN0YXR1czoweCV4XG4iLAotCQkgZHNzX3JlZ19yKCZyc2MtPmRydl9pbywg RFBVX1JTQ0NfU09MVkVSX1NUQVRVUzBfRFJWMCwKLQkJCQlyc2MtPmRlYnVnX21vZGUpKTsKLQlz ZXFfcHJpbnRmKHMsICJzb2x2ZXIgdGltZXNsb3Qgc3RhdHVzOjB4JXhcbiIsCi0JCSBkc3NfcmVn X3IoJnJzYy0+ZHJ2X2lvLCBEUFVfUlNDQ19TT0xWRVJfU1RBVFVTMV9EUlYwLAotCQkJCXJzYy0+ ZGVidWdfbW9kZSkpOwotCXNlcV9wcmludGYocywgInNvbHZlciBtb2RlIHN0YXR1czoweCV4XG4i LAotCQkgZHNzX3JlZ19yKCZyc2MtPmRydl9pbywgRFBVX1JTQ0NfU09MVkVSX1NUQVRVUzJfRFJW MCwKLQkJCQlyc2MtPmRlYnVnX21vZGUpKTsKLQotCXNlcV9wcmludGYocywgImFtYyBzdGF0dXM6 MHgleFxuIiwKLQkJIGRzc19yZWdfcigmcnNjLT5kcnZfaW8sIERQVV9SU0NDX0FNQ19UQ1NfTU9E RV9JUlFfU1RBVFVTX0RSVjAsCi0JCQkJcnNjLT5kZWJ1Z19tb2RlKSk7Ci0KLQlyZXR1cm4gMDsK LX0KLQotaW50IHJzY19od192c3luYyhzdHJ1Y3QgZHB1X3JzY19wcml2ICpyc2MsIGVudW0gcnNj X3ZzeW5jX3JlcSByZXF1ZXN0LAotCQljaGFyICpidWZmZXIsIGludCBidWZmZXJfc2l6ZSwgdTMy IG1vZGUpCi17Ci0JdTMyIGJsZW4gPSAwLCByZWc7Ci0KLQlzd2l0Y2ggKHJlcXVlc3QpIHsKLQlj YXNlIFZTWU5DX1JFQUQ6Ci0JCWlmICghYnVmZmVyIHx8ICFidWZmZXJfc2l6ZSkKLQkJCXJldHVy biBibGVuOwotCi0JCWJsZW4gPSBzbnByaW50ZihidWZmZXIsIGJ1ZmZlcl9zaXplIC0gYmxlbiwg InZzeW5jMDoweCV4XG4iLAotCQkJIGRzc19yZWdfcigmcnNjLT53cmFwcGVyX2lvLAotCQkJCURQ VV9SU0NDX1dSQVBQRVJfVlNZTkNfVElNRVNUQU1QMCwKLQkJCQlyc2MtPmRlYnVnX21vZGUpKTsK LQkJaWYgKGJsZW4gPj0gYnVmZmVyX3NpemUpCi0JCQlyZXR1cm4gYmxlbjsKLQotCQlibGVuICs9 IHNucHJpbnRmKGJ1ZmZlciArIGJsZW4sIGJ1ZmZlcl9zaXplIC0gYmxlbiwKLQkJCSJ2c3luYzE6 MHgleFxuIiwKLQkJCSBkc3NfcmVnX3IoJnJzYy0+d3JhcHBlcl9pbywKLQkJCQlEUFVfUlNDQ19X UkFQUEVSX1ZTWU5DX1RJTUVTVEFNUDEsCi0JCQkJcnNjLT5kZWJ1Z19tb2RlKSk7Ci0JCWJyZWFr OwotCi0JY2FzZSBWU1lOQ19SRUFEX1ZTWU5DMDoKLQkJcmV0dXJuIGRzc19yZWdfcigmcnNjLT53 cmFwcGVyX2lvLAotCQkJCURQVV9SU0NDX1dSQVBQRVJfVlNZTkNfVElNRVNUQU1QMCwKLQkJCQly c2MtPmRlYnVnX21vZGUpOwotCi0JY2FzZSBWU1lOQ19FTkFCTEU6Ci0JCS8qIGNsZWFyIHRoZSBj dXJyZW50IFZTWU5DIHZhbHVlICovCi0JCXJlZyA9IEJJVCg5KSB8ICgobW9kZSAmIDB4NykgPDwg MTApOwotCQlkc3NfcmVnX3coJnJzYy0+d3JhcHBlcl9pbywgRFBVX1JTQ0NfV1JBUFBFUl9ERUJV R19CVVMsCi0JCQkJCXJlZywgcnNjLT5kZWJ1Z19tb2RlKTsKLQotCQkvKiBlbmFibGUgdGhlIFZT WU5DIGxvZ2dpbmcgKi8KLQkJcmVnID0gQklUKDgpIHwgKChtb2RlICYgMHg3KSA8PCAxMCk7Ci0J CWRzc19yZWdfdygmcnNjLT53cmFwcGVyX2lvLCBEUFVfUlNDQ19XUkFQUEVSX0RFQlVHX0JVUywK LQkJCQlyZWcsIHJzYy0+ZGVidWdfbW9kZSk7Ci0KLQkJLyogZW5zdXJlIHZzeW5jIGNvbmZpZyBo YXMgYmVlbiB3cml0dGVuIGJlZm9yZSB3YWl0aW5nIG9uIGl0ICovCi0JCXdtYigpOwotCQlicmVh azsKLQotCWNhc2UgVlNZTkNfRElTQUJMRToKLQkJZHNzX3JlZ193KCZyc2MtPndyYXBwZXJfaW8s IERQVV9SU0NDX1dSQVBQRVJfREVCVUdfQlVTLAotCQkJCQkJMHgwLCByc2MtPmRlYnVnX21vZGUp OwotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gYmxlbjsKLX0KLQotc3RhdGljIHZvaWQgcnNjX2h3 X2RlYnVnX2R1bXAoc3RydWN0IGRwdV9yc2NfcHJpdiAqcnNjLCB1MzIgbXV4X3NlbCkKLXsKLQlk c3NfcmVnX3coJnJzYy0+d3JhcHBlcl9pbywgRFBVX1JTQ0NfV1JBUFBFUl9ERUJVR19CVVMsCi0J CSgobXV4X3NlbCAmIDB4ZikgPDwgMSkgfCBCSVQoMCksIHJzYy0+ZGVidWdfbW9kZSk7Ci19Ci0K LWJvb2wgcnNjX2h3X2lzX2FtY19tb2RlKHN0cnVjdCBkcHVfcnNjX3ByaXYgKnJzYykKLXsKLQly ZXR1cm4gZHNzX3JlZ19yKCZyc2MtPmRydl9pbywgRFBVX1JTQ0NfVENTX0RSVjBfQ09OVFJPTCwK LQkJCXJzYy0+ZGVidWdfbW9kZSkgJiBCSVQoMTYpOwotfQotCi1pbnQgcnNjX2h3X3Rjc193YWl0 KHN0cnVjdCBkcHVfcnNjX3ByaXYgKnJzYykKLXsKLQlpbnQgcmMgPSAtRUJVU1k7Ci0JaW50IGNv dW50LCBzZXFfc3RhdHVzOwotCi0JZHNzX3JlZ193KCZyc2MtPndyYXBwZXJfaW8sIERQVV9SU0ND X1dSQVBQRVJfQ1RSTCwKLQkJCQkJCTB4MCwgcnNjLT5kZWJ1Z19tb2RlKTsKLQlzZXFfc3RhdHVz ID0gZHNzX3JlZ19yKCZyc2MtPndyYXBwZXJfaW8sIERQVV9SU0NDX1dSQVBQRVJfQ1RSTCwKLQkJ CXJzYy0+ZGVidWdfbW9kZSkgJiBCSVQoMSk7Ci0JLyogaWYgc2VxIGJ1c3kgLSBzZXQgVENTIHVz ZSBPSyB0byBoaWdoIGFuZCB3YWl0IGZvciAyMDB1cyAqLwotCWlmIChzZXFfc3RhdHVzKSB7Ci0J CWRzc19yZWdfdygmcnNjLT53cmFwcGVyX2lvLCBEUFVfUlNDQ19XUkFQUEVSX0NUUkwsCi0JCQkJ CQkweDEsIHJzYy0+ZGVidWdfbW9kZSk7Ci0JCXVzbGVlcF9yYW5nZSgxMDAsIDIwMCk7Ci0JCWRz c19yZWdfdygmcnNjLT53cmFwcGVyX2lvLCBEUFVfUlNDQ19XUkFQUEVSX0NUUkwsCi0JCQkJCQkw eDAsIHJzYy0+ZGVidWdfbW9kZSk7Ci0JfQotCi0JLyogY2hlY2sgZm9yIHNlcXVlbmNlIHJ1bm5p bmcgc3RhdHVzIGJlZm9yZSBleGl0aW5nICovCi0JZm9yIChjb3VudCA9IE1BWF9DSEVDS19MT09Q UzsgY291bnQgPiAwOyBjb3VudC0tKSB7Ci0JCXNlcV9zdGF0dXMgPSBkc3NfcmVnX3IoJnJzYy0+ d3JhcHBlcl9pbywgRFBVX1JTQ0NfV1JBUFBFUl9DVFJMLAotCQkJCXJzYy0+ZGVidWdfbW9kZSkg JiBCSVQoMSk7Ci0JCWlmICghc2VxX3N0YXR1cykgewotCQkJcmMgPSAwOwotCQkJYnJlYWs7Ci0J CX0KLQkJdXNsZWVwX3JhbmdlKDEsIDIpOwotCX0KLQotCXJldHVybiByYzsKLX0KLQotaW50IHJz Y19od190Y3NfdXNlX29rKHN0cnVjdCBkcHVfcnNjX3ByaXYgKnJzYykKLXsKLQlkc3NfcmVnX3co JnJzYy0+d3JhcHBlcl9pbywgRFBVX1JTQ0NfV1JBUFBFUl9DVFJMLAotCQkJCQkJMHgxLCByc2Mt PmRlYnVnX21vZGUpOwotCXJldHVybiAwOwotfQotCi1pbnQgZHB1X3JzY19od19yZWdpc3Rlcihz dHJ1Y3QgZHB1X3JzY19wcml2ICpyc2MpCi17Ci0JcHJfZGVidWcoInJzYyBoYXJkd2FyZSByZWdp c3RlclxuIik7Ci0KLQlyc2MtPmh3X29wcy5pbml0ID0gcnNjX2h3X2luaXQ7Ci0JcnNjLT5od19v cHMudGltZXJfdXBkYXRlID0gcnNjX2h3X3RpbWVyX3VwZGF0ZTsKLQotCXJzYy0+aHdfb3BzLnRj c193YWl0ID0gcnNjX2h3X3Rjc193YWl0OwotCXJzYy0+aHdfb3BzLnRjc191c2Vfb2sgPSByc2Nf aHdfdGNzX3VzZV9vazsKLQlyc2MtPmh3X29wcy5pc19hbWNfbW9kZSA9IHJzY19od19pc19hbWNf bW9kZTsKLQotCXJzYy0+aHdfb3BzLmh3X3ZzeW5jID0gcnNjX2h3X3ZzeW5jOwotCXJzYy0+aHdf b3BzLnN0YXRlX3VwZGF0ZSA9IGRwdV9yc2Nfc3RhdGVfdXBkYXRlOwotCXJzYy0+aHdfb3BzLmRl YnVnX3Nob3cgPSBkcHVfcnNjX2RlYnVnX3Nob3c7Ci0JcnNjLT5od19vcHMubW9kZV9jdHJsID0g cnNjX2h3X21vZGVfY3RybDsKLQlyc2MtPmh3X29wcy5kZWJ1Z19kdW1wID0gcnNjX2h3X2RlYnVn X2R1bXA7Ci0KLQlyZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20v ZHB1X3JzY19wcml2LmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwdV9yc2NfcHJpdi5oCmRlbGV0 ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMjhhMzM5Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMv Z3B1L2RybS9tc20vZHB1X3JzY19wcml2LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxOTEgKzAsMCBA QAotLyogQ29weXJpZ2h0IChjKSAyMDE2LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwg cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKLSAqIG9u bHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u LgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2 ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICovCi0KLSNpZm5kZWYgX0RQVV9SU0Nf UFJJVl9IXwotI2RlZmluZSBfRFBVX1JTQ19QUklWX0hfCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJu ZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9kcHVfaW9fdXRpbC5oPgotI2luY2x1ZGUgPGxpbnV4L2Rw dV9yc2MuaD4KLQotI2luY2x1ZGUgPHNvYy9xY29tL3Rjcy5oPgotI2luY2x1ZGUgImRwdV9wb3dl cl9oYW5kbGUuaCIKLQotI2RlZmluZSBEUFVfUlNDX0NPTVBBVElCTEUgImRpc3BfcnNjYyIKLQot I2RlZmluZSBNQVhfUlNDX0NPVU5UCQk1Ci0KLSNkZWZpbmUgQUxMX01PREVTX0RJU0FCTEVECTB4 MAotI2RlZmluZSBPTkxZX01PREVfMF9FTkFCTEVECTB4MQotI2RlZmluZSBPTkxZX01PREVfMF8x X0VOQUJMRUQJMHgzCi0jZGVmaW5lIEFMTF9NT0RFU19FTkFCTEVECTB4NwotCi0jZGVmaW5lIE1B WF9DT1VOVF9TSVpFX1NVUFBPUlRFRAkxMjgKLQotc3RydWN0IGRwdV9yc2NfcHJpdjsKLQotLyoq Ci0gKiByc2NfbW9kZV9yZXE6IGRwdSByc2MgbW9kZSByZXF1ZXN0IGluZm9ybWF0aW9uCi0gKiBN T0RFX1JFQUQ6IHJlYWQgdnN5bmMgc3RhdHVzCi0gKiBNT0RFX1VQREFURTogbW9kZSB0aW1lc2xv dCB1cGRhdGUKLSAqICAgICAgICAgICAgMHgwOiBhbGwgbW9kZXMgYXJlIGRpc2FibGVkLgotICog ICAgICAgICAgICAweDE6IE1vZGUtMCBpcyBlbmFibGVkIGFuZCBvdGhlciB0d28gbW9kZXMgYXJl IGRpc2FibGVkLgotICogICAgICAgICAgICAweDM6IE1vZGUtMCAmIE1vZGUtMSBhcmUgZW5hYmxl ZCBhbmQgbW9kZS0yIGlzIGRpc2FibGVkLgotICogICAgICAgICAgICAweDc6IGFsbCBtb2RlcyBh cmUgZW5hYmxlZC4KLSAqLwotZW51bSByc2NfbW9kZV9yZXEgewotCU1PREVfUkVBRCwKLQlNT0RF X1VQREFURSA9IDB4MSwKLX07Ci0KLS8qKgotICogcnNjX3ZzeW5jX3JlcTogZHB1IHJzYyB2c3lu YyByZXF1ZXN0IGluZm9ybWF0aW9uCi0gKiBWU1lOQ19SRUFEOiByZWFkIHZzeW5jIHN0YXR1cwot ICogVlNZTkNfUkVBRF9WU1lOQzA6IHJlYWQgdmFsdWUgdnN5bmMwIHRpbWVzdGFtcCAoY2FzdCB0 byBpbnQgZnJvbSB1MzIpCi0gKiBWU1lOQ19FTkFCTEU6IGVuYWJsZSByc2Mgd3JhcHBlciB2c3lu YyBzdGF0dXMKLSAqIFZTWU5DX0RJU0FCTEU6IGRpc2FibGUgcnNjIHdyYXBwZXIgdnN5bmMgc3Rh dHVzCi0gKi8KLWVudW0gcnNjX3ZzeW5jX3JlcSB7Ci0JVlNZTkNfUkVBRCwKLQlWU1lOQ19SRUFE X1ZTWU5DMCwKLQlWU1lOQ19FTkFCTEUsCi0JVlNZTkNfRElTQUJMRSwKLX07Ci0KLS8qKgotICog c3RydWN0IGRwdV9yc2NfaHdfb3BzIC0gZHB1IHJlc291cmNlIHN0YXRlIGNvb3JkaW5hdG9yIGhh cmR3YXJlIG9wcwotICogQGluaXQ6CQkJSW5pdGlhbGl6ZSB0aGUgc2VxdWVuY2VyLCBzb2x2ZXIs IHF0aW1lciwKLQkJCQlldGMuIGhhcmR3YXJlIGJsb2NrcyBvbiBSU0MuCi0gKiBAdGltZXJfdXBk YXRlOgkJdXBkYXRlIHRoZSBzdGF0aWMgd3JhcHBlciB0aW1lIGFuZCBwZGMvcnNjCi0JCQkJYmFj a29mZiB0aW1lLgotICogQHRjc193YWl0OgkJCVdhaXRzIGZvciBUQ1MgYmxvY2sgT0sgdG8gYWxs b3cgc2VuZGluZyBhCi0gKgkJCQlUQ1MgY29tbWFuZC4KLSAqIEBod192c3luYzoJCQlFbmFibGVz IHRoZSB2c3luYyBvbiBSU0MgYmxvY2suCi0gKiBAdGNzX3VzZV9vazoJCQlzZXQgVENTIHNldCB0 byBoaWdoIHRvIGFsbG93IFJTQyB0byB1c2UgaXQuCi0gKiBAaXNfYW1jX21vZGU6CQlDaGVjayBj dXJyZW50IGFtYyBtb2RlIHN0YXR1cwotICogQGRlYnVnX2R1bXA6CQkJZHVtcCBkZWJ1ZyBidXMg cmVnaXN0ZXJzIG9yIGVuYWJsZSBkZWJ1ZyBidXMKLSAqIEBzdGF0ZV91cGRhdGU6CQlFbmFibGUv b3ZlcnJpZGUgdGhlIHNvbHZlciBiYXNlZCBvbiByc2Mgc3RhdGUKLSAqICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc3RhdHVzIChjb21tYW5kL3ZpZGVvKQotICogQG1vZGVfc2hvdzoJCQlz aG93cyBjdXJyZW50IG1vZGUgc3RhdHVzLCBtb2RlMC8xLzIKLSAqIEBkZWJ1Z19zaG93OgkJCVNo b3cgY3VycmVudCBkZWJ1ZyBzdGF0dXMuCi0gKi8KLQotc3RydWN0IGRwdV9yc2NfaHdfb3BzIHsK LQlpbnQgKCppbml0KShzdHJ1Y3QgZHB1X3JzY19wcml2ICpyc2MpOwotCWludCAoKnRpbWVyX3Vw ZGF0ZSkoc3RydWN0IGRwdV9yc2NfcHJpdiAqcnNjKTsKLQlpbnQgKCp0Y3Nfd2FpdCkoc3RydWN0 IGRwdV9yc2NfcHJpdiAqcnNjKTsKLQlpbnQgKCpod192c3luYykoc3RydWN0IGRwdV9yc2NfcHJp diAqcnNjLCBlbnVtIHJzY192c3luY19yZXEgcmVxdWVzdCwKLQkJY2hhciAqYnVmZmVyLCBpbnQg YnVmZmVyX3NpemUsIHUzMiBtb2RlKTsKLQlpbnQgKCp0Y3NfdXNlX29rKShzdHJ1Y3QgZHB1X3Jz Y19wcml2ICpyc2MpOwotCWJvb2wgKCppc19hbWNfbW9kZSkoc3RydWN0IGRwdV9yc2NfcHJpdiAq cnNjKTsKLQl2b2lkICgqZGVidWdfZHVtcCkoc3RydWN0IGRwdV9yc2NfcHJpdiAqcnNjLCB1MzIg bXV4X3NlbCk7Ci0JaW50ICgqc3RhdGVfdXBkYXRlKShzdHJ1Y3QgZHB1X3JzY19wcml2ICpyc2Ms IGVudW0gZHB1X3JzY19zdGF0ZSBzdGF0ZSk7Ci0JaW50ICgqZGVidWdfc2hvdykoc3RydWN0IHNl cV9maWxlICpzLCBzdHJ1Y3QgZHB1X3JzY19wcml2ICpyc2MpOwotCWludCAoKm1vZGVfY3RybCko c3RydWN0IGRwdV9yc2NfcHJpdiAqcnNjLCBlbnVtIHJzY19tb2RlX3JlcSByZXF1ZXN0LAotCQlj aGFyICpidWZmZXIsIGludCBidWZmZXJfc2l6ZSwgdTMyIG1vZGUpOwotfTsKLQotLyoqCi0gKiBz dHJ1Y3QgZHB1X3JzY190aW1lcl9jb25maWc6IHRoaXMgaXMgaW50ZXJuYWwgY29uZmlndXJhdGlv biBiZXR3ZWVuCi0gKiByc2MgYW5kIHJzY19odyBBUEkuCi0gKgotICogQHN0YXRpY193YWtldXBf dGltZV9uczoJd3JhcHBlciBiYWNrb2ZmIHRpbWUgaW4gbmFubyBzZWNvbmRzCi0gKiBAcnNjX2Jh Y2tvZmZfdGltZV9uczoJcnNjIGJhY2tvZmYgdGltZSBpbiBuYW5vIHNlY29uZHMKLSAqIEBwZGNf YmFja29mZl90aW1lX25zOglwZGMgYmFja29mZiB0aW1lIGluIG5hbm8gc2Vjb25kcwotICogQHJz Y19tb2RlX3RocmVzaG9sZF90aW1lX25zOglyc2MgbW9kZSB0aHJlc2hvbGQgdGltZSBpbiBuYW5v IHNlY29uZHMKLSAqIEByc2NfdGltZV9zbG90XzBfbnM6CQltb2RlLTAgdGltZSBzbG90IHRocmVz aG9sZCBpbiBuYW5vIHNlY29uZHMKLSAqIEByc2NfdGltZV9zbG90XzFfbnM6CQltb2RlLTEgdGlt ZSBzbG90IHRocmVzaG9sZCBpbiBuYW5vIHNlY29uZHMKLSAqIEByc2NfdGltZV9zbG90XzJfbnM6 CQltb2RlLTIgdGltZSBzbG90IHRocmVzaG9sZCBpbiBuYW5vIHNlY29uZHMKLSAqLwotc3RydWN0 IGRwdV9yc2NfdGltZXJfY29uZmlnIHsKLQl1MzIgc3RhdGljX3dha2V1cF90aW1lX25zOwotCi0J dTMyIHJzY19iYWNrb2ZmX3RpbWVfbnM7Ci0JdTMyIHBkY19iYWNrb2ZmX3RpbWVfbnM7Ci0JdTMy IHJzY19tb2RlX3RocmVzaG9sZF90aW1lX25zOwotCXUzMiByc2NfdGltZV9zbG90XzBfbnM7Ci0J dTMyIHJzY190aW1lX3Nsb3RfMV9uczsKLQl1MzIgcnNjX3RpbWVfc2xvdF8yX25zOwotfTsKLQot LyoqCi0gKiBzdHJ1Y3QgZHB1X3JzY19wcml2OiBkcHUgcmVzb3VyY2Ugc3RhdGUgY29vcmRpbmF0 b3IocnNjKSBwcml2YXRlIGhhbmRsZQotICogQHZlcnNpb246CQlyc2Mgc2VxdWVuY2UgdmVyc2lv bgotICogQHBoYW5kbGU6CQltb2R1bGUgcG93ZXIgaGFuZGxlIGZvciBjbG9ja3MKLSAqIEBwY2xp ZW50OgkJbW9kdWxlIHBvd2VyIGNsaWVudCBvZiBwaGFuZGxlCi0gKiBAZnM6CQkJIk1EU1MgR0RT QyIgaGFuZGxlCi0gKgotICogQGRpc3BfcnNjOgkJZGlzcGxheSByc2MgaGFuZGxlCi0gKiBAZHJ2 X2lvOgkJZHB1IGRydiBpbyBkYXRhIG1hcHBpbmcKLSAqIEB3cmFwcGVyX2lvOgkJd3JhcHBlciBp byBkYXRhIG1hcHBpbmcKLSAqCi0gKiBAY2xpZW50X2xpc3Q6CWN1cnJlbnQgcnNjIGNsaWVudCBs aXN0IGhhbmRsZQotICogQGV2ZW50X2xpc3Q6CQljdXJyZW50IHJzYyBldmVudCBsaXN0IGhhbmRs ZQotICogQGNsaWVudF9sb2NrOgljdXJyZW50IHJzYyBjbGllbnQgc3luY2hyb25pemF0aW9uIGxv Y2sKLSAqCi0gKiB0aW1lcl9jb25maWc6CWN1cnJlbnQgcnNjIHRpbWVyIGNvbmZpZ3VyYXRpb24K LSAqIGNtZF9jb25maWc6CQljdXJyZW50IHBhbmVsIGNvbmZpZwotICogY3VycmVudF9zdGF0ZToJ Y3VycmVudCByc2Mgc3RhdGUgKHZpZGVvL2NvbW1hbmQpLCBzb2x2ZXIKLSAqICAgICAgICAgICAg ICAgICAgICAgIG92ZXJyaWRlL2VuYWJsZWQuCi0gKiBkZWJ1Z19tb2RlOgkJZW5hYmxlcyB0aGUg bG9nZ2luZyBmb3IgZWFjaCByZWdpc3RlciByZWFkL3dyaXRlCi0gKiBkZWJ1Z2ZzX3Jvb3Q6CWRl YnVnZnMgZmlsZSBzeXN0ZW0gcm9vdCBub2RlCi0gKgotICogaHdfb3BzOgkJZHB1IHJzYyBoYXJk d2FyZSBvcGVyYXRpb25zCi0gKiBwb3dlcl9jb2xsYXBzZToJaWYgYWxsIGNsaWVudHMgYXJlIGlu IElETEUgc3RhdGUgdGhlbiBpdCBlbnRlcnMgaW4KLSAqCQkJbW9kZTIgc3RhdGUgYW5kIGVuYWJs ZSB0aGUgcG93ZXIgY29sbGFwc2Ugc3RhdGUKLSAqIHBvd2VyX2NvbGxhcHNlX2Jsb2NrOkJ5IGRl ZmF1bHQsIHJzYyBtb3ZlIHRvIG1vZGUtMiBpZiBhbGwgY2xpZW50cyBhcmUgaW4KLSAqCQkJaW52 YWxpZCBzdGF0ZS4gSXQgY2FuIGJlIGJsb2NrZWQgYnkgdGhpcyBib29sZWFuIGVudHJ5LgotICog cHJpbWFyeV9jbGllbnQ6CUEgY2xpZW50IHdoaWNoIGlzIGFsbG93ZWQgdG8gbWFrZSBjb21tYW5k IHN0YXRlIHJlcXVlc3QKLSAqCQkJYW5kIGFiL2liIHZvdGUgb24gZGlzcGxheSByc2MKLSAqIG1h c3Rlcl9kcm06CQlQcmltYXJ5IGNsaWVudCB3YWl0cyBmb3IgdnN5bmMgb24gdGhpcyBkcm0gb2Jq ZWN0IGJhc2VkCi0gKgkJCW9uIGNydGMgaWQKLSAqLwotc3RydWN0IGRwdV9yc2NfcHJpdiB7Ci0J dTMyIHZlcnNpb247Ci0Jc3RydWN0IGRwdV9wb3dlcl9oYW5kbGUgcGhhbmRsZTsKLQlzdHJ1Y3Qg ZHB1X3Bvd2VyX2NsaWVudCAqcGNsaWVudDsKLQlzdHJ1Y3QgcmVndWxhdG9yICpmczsKLQotCXN0 cnVjdCBycG1oX2NsaWVudCAqZGlzcF9yc2M7Ci0Jc3RydWN0IGRzc19pb19kYXRhIGRydl9pbzsK LQlzdHJ1Y3QgZHNzX2lvX2RhdGEgd3JhcHBlcl9pbzsKLQotCXN0cnVjdCBsaXN0X2hlYWQgY2xp ZW50X2xpc3Q7Ci0Jc3RydWN0IGxpc3RfaGVhZCBldmVudF9saXN0OwotCXN0cnVjdCBtdXRleCBj bGllbnRfbG9jazsKLQotCXN0cnVjdCBkcHVfcnNjX3RpbWVyX2NvbmZpZyB0aW1lcl9jb25maWc7 Ci0Jc3RydWN0IGRwdV9yc2NfY21kX2NvbmZpZyBjbWRfY29uZmlnOwotCXUzMgljdXJyZW50X3N0 YXRlOwotCi0JdTMyIGRlYnVnX21vZGU7Ci0Jc3RydWN0IGRlbnRyeSAqZGVidWdmc19yb290Owot Ci0Jc3RydWN0IGRwdV9yc2NfaHdfb3BzIGh3X29wczsKLQlib29sIHBvd2VyX2NvbGxhcHNlOwot CWJvb2wgcG93ZXJfY29sbGFwc2VfYmxvY2s7Ci0Jc3RydWN0IGRwdV9yc2NfY2xpZW50ICpwcmlt YXJ5X2NsaWVudDsKLQotCXN0cnVjdCBkcm1fZGV2aWNlICptYXN0ZXJfZHJtOwotfTsKLQotLyoq Ci0gKiBkcHVfcnNjX2h3X3JlZ2lzdGVyKCkgLSByZWdpc3RlciBoYXJkd2FyZSBBUEkKLSAqCi0g KiBAY2xpZW50OgkgQ2xpZW50IHBvaW50ZXIgcHJvdmlkZWQgYnkgZHB1X3JzY19jbGllbnRfY3Jl YXRlKCkuCi0gKgotICogUmV0dXJuOiBlcnJvciBjb2RlLgotICovCi1pbnQgZHB1X3JzY19od19y ZWdpc3RlcihzdHJ1Y3QgZHB1X3JzY19wcml2ICpyc2MpOwotCi0jZW5kaWYgLyogX0RQVV9SU0Nf UFJJVl9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kcHVfcnNjLmggYi9pbmNsdWRl L2xpbnV4L2RwdV9yc2MuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODFiZWE1ZS4u MDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L2RwdV9yc2MuaAorKysgL2Rldi9udWxsCkBAIC0x LDMwMiArMCwwIEBACi0vKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAxOCwgVGhlIExpbnV4IEZvdW5k YXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUg c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVu ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAy IGFuZAotICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7 IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZ IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKi8KLQotI2lmbmRl ZiBfRFBVX1JTQ19IXwotI2RlZmluZSBfRFBVX1JTQ19IXwotCi0jaW5jbHVkZSA8bGludXgva2Vy bmVsLmg+Ci0KLS8qIHByaW1hcnkgZGlzcGxheSByc2MgaW5kZXggKi8KLSNkZWZpbmUgRFBVX1JT Q19JTkRFWAkJMAotCi0jZGVmaW5lIE1BWF9SU0NfQ0xJRU5UX05BTUVfTEVOIDEyOAotCi0vKiBE Uk0gT2JqZWN0IElEcyBhcmUgbnVtYmVyZWQgZXhjbHVkaW5nIDAsIHVzZSAwIHRvIGluZGljYXRl IGludmFsaWQgQ1JUQyAqLwotI2RlZmluZSBEUFVfUlNDX0lOVkFMSURfQ1JUQ19JRCAwCi0KLS8q KgotICogZXZlbnQgd2lsbCBiZSB0cmlnZ2VyZWQgYmVmb3JlIHNkZSBjb3JlIHBvd2VyIGNvbGxh cHNlLAotICogbWRzcyBnZHNjIGlzIHN0aWxsIG9uCi0gKi8KLSNkZWZpbmUgRFBVX1JTQ19FVkVO VF9QUkVfQ09SRV9QQyAweDEKLS8qKgotICogZXZlbnQgd2lsbCBiZSB0cmlnZ2VyZWQgYWZ0ZXIg c2RlIGNvcmUgY29sbGFwc2UgY29tcGxldGUsCi0gKiBtZHNzIGdkc2MgaXMgb2ZmIG5vdwotICov Ci0jZGVmaW5lIERQVV9SU0NfRVZFTlRfUE9TVF9DT1JFX1BDIDB4MgotLyoqCi0gKiBldmVudCB3 aWxsIGJlIHRyaWdnZXJlZCBiZWZvcmUgcmVzdG9yaW5nIHRoZSBzZGUgY29yZSBmcm9tIHBvd2Vy IGNvbGxhcHNlLAotICogbWRzcyBnZHNjIGlzIHN0aWxsIG9mZgotICovCi0jZGVmaW5lIERQVV9S U0NfRVZFTlRfUFJFX0NPUkVfUkVTVE9SRSAweDQKLS8qKgotICogZXZlbnQgd2lsbCBiZSB0cmln Z2VyZWQgYWZ0ZXIgcmVzdG9yaW5nIHRoZSBzZGUgY29yZSBmcm9tIHBvd2VyIGNvbGxhcHNlLAot ICogbWRzcyBnZHNjIGlzIG9uIG5vdwotICovCi0jZGVmaW5lIERQVV9SU0NfRVZFTlRfUE9TVF9D T1JFX1JFU1RPUkUgMHg4Ci0vKioKLSAqIGV2ZW50IGF0dGFjaGVkIHdpdGggc29sdmVyIHN0YXRl IGVuYWJsZWQKLSAqIGFsbCBjbGllbnRzIGluIGNsa19zdGF0ZSBvciBjbWRfc3RhdGUKLSAqLwot I2RlZmluZSBEUFVfUlNDX0VWRU5UX1NPTFZFUl9FTkFCTEVEIDB4MTAKLS8qKgotICogZXZlbnQg YXR0YWNoZWQgd2l0aCBzb2x2ZXIgc3RhdGUgZGlzYWJsZWQKLSAqIG9uZSBvZiB0aGUgY2xpZW50 IHJlcXVlc3RlZCBmb3IgdmlkIHN0YXRlCi0gKi8KLSNkZWZpbmUgRFBVX1JTQ19FVkVOVF9TT0xW RVJfRElTQUJMRUQgMHgyMAotCi0vKioKLSAqIGRwdV9yc2Nfc3RhdGU6IHNkZSByc2Mgc3RhdGUg aW5mb3JtYXRpb24KLSAqIERQVV9SU0NfSURMRV9TVEFURTogQSBjbGllbnQgcmVxdWVzdHMgZm9y IGlkbGUgc3RhdGUgd2hlbiB0aGVyZSBpcyBubwotICogICAgICAgICAgICAgICAgICAgIHBpeGVs IG9yIGNtZCB0cmFuc2ZlciBleHBlY3RlZC4gQW4gaWRsZSB2b3RlIGZyb20KLSAqICAgICAgICAg ICAgICAgICAgICBhbGwgY2xpZW50cyBsZWFkIHRvIHBvd2VyIGNvbGxhcHNlIHN0YXRlLgotICog RFBVX1JTQ19DTEtfU1RBVEU6ICBBIGNsaWVudCByZXF1ZXN0cyBmb3IgY2xrIHN0YXRlIHdoZW4g aXQgd2FudHMgdG8KLSAqICAgICAgICAgICAgICAgICAgICBvbmx5IGF2b2lkIG1vZGUtMiBlbnRy eS9leGl0LiBGb3IgZXg6IFY0TDIgZHJpdmVyLAotICogICAgICAgICAgICAgICAgICAgIHNkZSBw b3dlciBoYW5kbGUsIGV0Yy4KLSAqIERQVV9SU0NfQ01EX1NUQVRFOiAgQSBjbGllbnQgcmVxdWVz dHMgZm9yIGNtZCBzdGF0ZSB3aGVuIGl0IHdhbnRzIHRvCi0gKiAgICAgICAgICAgICAgICAgICAg ZW5hYmxlIHRoZSBzb2x2ZXIgbW9kZS4KLSAqIERQVV9SU0NfVklEX1NUQVRFOiAgQSBjbGllbnQg cmVxdWVzdHMgZm9yIHZpZCBzdGF0ZSBpdCB3YW50cyB0byBhdm9pZAotICogICAgICAgICAgICAg ICAgICAgIHNvbHZlciBlbmFibGUgYmVjYXVzZSBjbGllbnQgaXMgZmV0Y2hpbmcgZGF0YSBmcm9t Ci0gKiAgICAgICAgICAgICAgICAgICAgY29udGludW91c2x5LgotICovCi1lbnVtIGRwdV9yc2Nf c3RhdGUgewotCURQVV9SU0NfSURMRV9TVEFURSwKLQlEUFVfUlNDX0NMS19TVEFURSwKLQlEUFVf UlNDX0NNRF9TVEFURSwKLQlEUFVfUlNDX1ZJRF9TVEFURSwKLX07Ci0KLS8qKgotICogc3RydWN0 IGRwdV9yc2NfY2xpZW50OiBzdG9yZXMgdGhlIHJzYyBjbGllbnQgZm9yIHNkZSBkcml2ZXIKLSAq IEBuYW1lOgluYW1lIG9mIHRoZSBjbGllbnQKLSAqIEBjdXJyZW50X3N0YXRlOiAgIGN1cnJlbnQg Y2xpZW50IHN0YXRlCi0gKiBAY3J0Y19pZDoJCWNydGNfaWQgYXNzb2NpYXRlZCB3aXRoIHRoaXMg cnNjIGNsaWVudC4KLSAqIEByc2NfaW5kZXg6CXJzYyBpbmRleCBvZiBhIGNsaWVudCAtIG9ubHkg aW5kZXggIjAiIHZhbGlkLgotICogQGlkOgkJSW5kZXggb2YgY2xpZW50LiBJdCB3aWxsIGJlIGFz c2lnbmVkIGR1cmluZyBjbGllbnRfY3JlYXRlIGNhbGwKLSAqIEBsaXN0OglsaXN0IHRvIGF0dGFj aCBjbGllbnQgbWFzdGVyIGxpc3QKLSAqLwotc3RydWN0IGRwdV9yc2NfY2xpZW50IHsKLQljaGFy IG5hbWVbTUFYX1JTQ19DTElFTlRfTkFNRV9MRU5dOwotCXNob3J0IGN1cnJlbnRfc3RhdGU7Ci0J aW50IGNydGNfaWQ7Ci0JdTMyIHJzY19pbmRleDsKLQl1MzIgaWQ7Ci0Jc3RydWN0IGxpc3RfaGVh ZCBsaXN0OwotfTsKLQotLyoqCi0gKiBzdHJ1Y3QgZHB1X3JzY19ldmVudDogbG9jYWwgZXZlbnQg cmVnaXN0cmF0aW9uIGVudHJ5IHN0cnVjdHVyZQotICogQGNiX2Z1bmM6CVBvaW50ZXIgdG8gZGVz aXJlZCBjYWxsYmFjayBmdW5jdGlvbgotICogQHVzcjoJVXNlciBwb2ludGVyIHRvIHBhc3MgdG8g Y2FsbGJhY2sgb24gZXZlbnQgdHJpZ2dlcgotICogQHJzY19pbmRleDoJcnNjIGluZGV4IG9mIGEg Y2xpZW50IC0gb25seSBpbmRleCAiMCIgdmFsaWQuCi0gKiBAZXZlbnRfdHlwZToJcmVmZXIgY29t bWVudHMgaW4gZXZlbnRfcmVnaXN0ZXIKLSAqIEBsaXN0OglsaXN0IHRvIGF0dGFjaCBldmVudCBt YXN0ZXIgbGlzdAotICovCi1zdHJ1Y3QgZHB1X3JzY19ldmVudCB7Ci0Jdm9pZCAoKmNiX2Z1bmMp KHVpbnQzMl90IGV2ZW50X3R5cGUsIHZvaWQgKnVzcik7Ci0Jdm9pZCAqdXNyOwotCXUzMiByc2Nf aW5kZXg7Ci0JdWludDMyX3QgZXZlbnRfdHlwZTsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci19 OwotCi0vKioKLSAqIHN0cnVjdCBkcHVfcnNjX2NtZF9jb25maWc6IHByb3ZpZGVzIHBhbmVsIGNv bmZpZ3VyYXRpb24gdG8gcnNjCi0gKiB3aGVuIGNsaWVudCBpcyBjb21tYW5kIG1vZGUuIEl0IGlz IG5vdCByZXF1aXJlZCB0byBzZXQgaXQgZHVyaW5nCi0gKiB2aWRlbyBtb2RlLgotICoKLSAqIEBm cHM6CXBhbmVsIHRlIGludGVydmFsCi0gKiBAdnRvdGFsOgljdXJyZW50IHZlcnRpY2FsIHRvdGFs IChoZWlnaHQgKyB2YnAgKyB2ZnApCi0gKiBAaml0dGVyX251bWVyOiBwYW5lbCBqaXR0ZXIgbnVt ZXJhdG9yIHZhbHVlLiBUaGlzIGNvbmZpZyBjYXVzZXMgcnNjL3NvbHZlcgotICogICAgICAgICAg ICAgICAgZWFybHkgYmVmb3JlIHRlLiBEZWZhdWx0IGlzIDAuOCUgaml0dGVyLgotICogQGppdHRl cl9kZW5vbTogcGFuZWwgaml0dGVyIGRlbm9taW5hdG9yLgotICogQHByZWZpbGxfbGluZXM6CW1h eCBwcmVmaWxsIGxpbmVzIGJhc2VkIG9uIHBhbmVsCi0gKi8KLXN0cnVjdCBkcHVfcnNjX2NtZF9j b25maWcgewotCXUzMiBmcHM7Ci0JdTMyIHZ0b3RhbDsKLQl1MzIgaml0dGVyX251bWVyOwotCXUz MiBqaXR0ZXJfZGVub207Ci0JdTMyIHByZWZpbGxfbGluZXM7Ci19OwotCi0jaWZkZWYgQ09ORklH X0RSTV9EUFVfUlNDCi0vKioKLSAqIGRwdV9yc2NfY2xpZW50X2NyZWF0ZSgpIC0gY3JlYXRlIHRo ZSBjbGllbnQgZm9yIHNkZSByc2MuCi0gKiBEaWZmZXJlbnQgZGlzcGxheXMgbGlrZSBEU0ksIEhE TUksIERQLCBXQiwgZXRjIHNob3VsZCBjYWxsIHRoaXMKLSAqIGFwaSB0byByZWdpc3RlciB0aGVp ciB2b3RlIGZvciBycG1oLiBUaGV5IHN0aWxsIG5lZWQgdG8gdm90ZSBmb3IKLSAqIHBvd2VyIGhh bmRsZSB0byBnZXQgdGhlIGNsb2Nrcy4KLQotICogQHJzY19pbmRleDogICBBIGNsaWVudCB3aWxs IGJlIGNyZWF0ZWQgb24gdGhpcyBSU0MuIEFzIG9mIG5vdyBvbmx5Ci0gKiAgICAgICAgICAgICAg IERQVV9SU0NfSU5ERVggaXMgdmFsaWQgcnNjIGluZGV4LgotICogQG5hbWU6CSBDYWxsZXIgbmVl ZHMgdG8gcHJvdmlkZSBzb21lIHZhbGlkIHN0cmluZyB0byBpZGVudGlmeQotICogICAgICAgICAg ICAgICB0aGUgY2xpZW50LiAicHJpbWFyeSIsICJkcCIsICJoZG1pIiBhcmUgc3VnZ2VzdGVkIG5h bWUuCi0gKiBAaXNfcHJpbWFyeToJIENhbGxlciBuZWVkcyB0byBwcm92aWRlIGluZm9ybWF0aW9u IGlmIGNsaWVudCBpcyBwcmltYXJ5Ci0gKiAgICAgICAgICAgICAgIG9yIG5vdC4gUHJpbWFyeSBj bGllbnQgdm90ZXMgd2lsbCBiZSByZWRpcmVjdGVkIHRvCi0gKiAgICAgICAgICAgICAgIGRpc3Bs YXkgcnNjLgotICogQGNvbmZpZzoJIGZwcywgdnRvdGFsLCBwb3JjaGVzLCBldGMgY29uZmlndXJh dGlvbiBmb3IgY29tbWFuZCBtb2RlCi0gKiAgICAgICAgICAgICAgIHBhbmVsCi0gKgotICogUmV0 dXJuOiBjbGllbnQgbm9kZSBwb2ludGVyLgotICovCi1zdHJ1Y3QgZHB1X3JzY19jbGllbnQgKmRw dV9yc2NfY2xpZW50X2NyZWF0ZSh1MzIgcnNjX2luZGV4LCBjaGFyICpuYW1lLAotCQlib29sIGlz X3ByaW1hcnlfZGlzcGxheSk7Ci0KLS8qKgotICogZHB1X3JzY19jbGllbnRfZGVzdHJveSgpIC0g RGVzdHJveSB0aGUgc2RlIHJzYyBjbGllbnQuCi0gKgotICogQGNsaWVudDoJIENsaWVudCBwb2lu dGVyIHByb3ZpZGVkIGJ5IGRwdV9yc2NfY2xpZW50X2NyZWF0ZSgpLgotICoKLSAqIFJldHVybjog bm9uZQotICovCi12b2lkIGRwdV9yc2NfY2xpZW50X2Rlc3Ryb3koc3RydWN0IGRwdV9yc2NfY2xp ZW50ICpjbGllbnQpOwotCi0vKioKLSAqIGRwdV9yc2NfY2xpZW50X3N0YXRlX3VwZGF0ZSgpIC0g cnNjIGNsaWVudCBzdGF0ZSB1cGRhdGUKLSAqIFZpZGVvIG1vZGUsIGNtZCBtb2RlIGFuZCBjbGsg c3RhdGUgYXJlIHN1cHBvcnRlZCBhcyBtb2Rlcy4gQSBjbGllbnQgbmVlZCB0bwotICogc2V0IHRo aXMgcHJvcGVydHkgZHVyaW5nIHBhbmVsIHRpbWUuIEEgc3dpdGNoaW5nIGNsaWVudCBjYW4gc2V0 IHRoZQotICogcHJvcGVydHkgdG8gY2hhbmdlIHRoZSBzdGF0ZQotICoKLSAqIEBjbGllbnQ6CSBD bGllbnQgcG9pbnRlciBwcm92aWRlZCBieSBkcHVfcnNjX2NsaWVudF9jcmVhdGUoKS4KLSAqIEBz dGF0ZToJIENsaWVudCBzdGF0ZSAtIHZpZGVvL2NtZAotICogQGNvbmZpZzoJIGZwcywgdnRvdGFs LCBwb3JjaGVzLCBldGMgY29uZmlndXJhdGlvbiBmb3IgY29tbWFuZCBtb2RlCi0gKiAgICAgICAg ICAgICAgIHBhbmVsCi0gKiBAY3J0Y19pZDoJIGN1cnJlbnQgY2xpZW50J3MgY3J0YyBpZAotICog QHdhaXRfdmJsYW5rX2NydGNfaWQ6CU91dHB1dCBwYXJhbWV0ZXIuIElmIHNldCB0byBub24temVy bywgcnNjIGh3Ci0gKgkJCQlzdGF0ZSB1cGRhdGUgcmVxdWlyZXMgYSB3YWl0IGZvciBvbmUgdmJs YW5rIG9uCi0gKgkJCQl0aGUgcHJpbWFyeSBjcnRjLiBJbiB0aGF0IGNhc2UsIHRoaXMgb3V0cHV0 Ci0gKgkJCQlwYXJhbSB3aWxsIGJlIHNldCB0byB0aGUgY3J0YyBvbiB3aGljaCB0byB3YWl0Lgot ICoJCQkJSWYgRFBVX1JTQ19JTlZBTElEX0NSVENfSUQsIG5vIHdhaXQgbmVjZXNzYXJ5Ci0gKgot ICogUmV0dXJuOiBlcnJvciBjb2RlLgotICovCi1pbnQgZHB1X3JzY19jbGllbnRfc3RhdGVfdXBk YXRlKHN0cnVjdCBkcHVfcnNjX2NsaWVudCAqY2xpZW50LAotCWVudW0gZHB1X3JzY19zdGF0ZSBz dGF0ZSwKLQlzdHJ1Y3QgZHB1X3JzY19jbWRfY29uZmlnICpjb25maWcsIGludCBjcnRjX2lkLAot CWludCAqd2FpdF92YmxhbmtfY3J0Y19pZCk7Ci0KLS8qKgotICogZHB1X3JzY19jbGllbnRfaXNf c3RhdGVfdXBkYXRlX2NvbXBsZXRlKCkgLSBjaGVjayBpZiBzdGF0ZSB1cGRhdGUgaXMgY29tcGxl dGUKLSAqIFJTQyBzdGF0ZSB0cmFuc2l0aW9uIGlzIG5vdCBjb21wbGV0ZSB1bnRpbCBIVyByZWNl aXZlcyBWQkxBTksgc2lnbmFsLiBUaGlzCi0gKiBmdW5jdGlvbiBjaGVja3MgUlNDIEhXIHRvIGRl dGVybWluZSB3aGV0aGVyIHRoYXQgc2lnbmFsIGhhcyBiZWVuIHJlY2VpdmVkLgotICogQGNsaWVu dDoJIENsaWVudCBwb2ludGVyIHByb3ZpZGVkIGJ5IGRwdV9yc2NfY2xpZW50X2NyZWF0ZSgpLgot ICoKLSAqIFJldHVybjogdHJ1ZSBpZiB0aGUgc3RhdGUgdXBkYXRlIGhhcyBjb21wbGV0ZWQuCi0g Ki8KLWJvb2wgZHB1X3JzY19jbGllbnRfaXNfc3RhdGVfdXBkYXRlX2NvbXBsZXRlKAotCQlzdHJ1 Y3QgZHB1X3JzY19jbGllbnQgKmNhbGxlcl9jbGllbnQpOwotCi0vKioKLSAqIGRwdV9yc2NfY2xp ZW50X3ZvdGUoKSAtIGFiL2liIHZvdGUgZnJvbSByc2MgY2xpZW50Ci0gKgotICogQGNsaWVudDoJ IENsaWVudCBwb2ludGVyIHByb3ZpZGVkIGJ5IGRwdV9yc2NfY2xpZW50X2NyZWF0ZSgpLgotICog QGJ1c19pZDoJIGRhdGEgYnVzIGlkZW50aWZpZXIKLSAqIEBhYjoJCSBhZ2dyZWdhdGVkIGJhbmR3 aWR0aCB2b3RlIGZyb20gY2xpZW50LgotICogQGliOgkJIGluc3RhbnQgYmFuZHdpZHRoIHZvdGUg ZnJvbSBjbGllbnQuCi0gKgotICogUmV0dXJuOiBlcnJvciBjb2RlLgotICovCi1pbnQgZHB1X3Jz Y19jbGllbnRfdm90ZShzdHJ1Y3QgZHB1X3JzY19jbGllbnQgKmNhbGxlcl9jbGllbnQsCi0JdTMy IGJ1c19pZCwgdTY0IGFiX3ZvdGUsIHU2NCBpYl92b3RlKTsKLQotLyoqCi0gKiBkcHVfcnNjX3Jl Z2lzdGVyX2V2ZW50IC0gcmVnaXN0ZXIgYSBjYWxsYmFjayBmdW5jdGlvbiBmb3IgYW4gZXZlbnQK LSAqIEByc2NfaW5kZXg6ICAgQSBjbGllbnQgd2lsbCBiZSBjcmVhdGVkIG9uIHRoaXMgUlNDLiBB cyBvZiBub3cgb25seQotICogICAgICAgICAgICAgICBEUFVfUlNDX0lOREVYIGlzIHZhbGlkIHJz YyBpbmRleC4KLSAqIEBldmVudF90eXBlOiAgZXZlbnQgdHlwZSB0byByZWdpc3RlcjsgY2xpZW50 IHNldHMgMHgzIGlmIGl0IHdhbnRzCi0gKiAgICAgICAgICAgICAgIHRvIHJlZ2lzdGVyIGZvciBD T1JFX1BDIGFuZCBDT1JFX1JFU1RPUkUgLSBib3RoIGV2ZW50cy4KLSAqIEBjYl9mdW5jOiAgICAg UG9pbnRlciB0byBkZXNpcmVkIGNhbGxiYWNrIGZ1bmN0aW9uCi0gKiBAdXNyOiAgICAgICAgIFVz ZXIgcG9pbnRlciB0byBwYXNzIHRvIGNhbGxiYWNrIG9uIGV2ZW50IHRyaWdnZXIKLSAqIFJldHVy bnM6IGRwdV9yc2NfZXZlbnQgcG9pbnRlciBvbiBzdWNjZXNzCi0gKi8KLXN0cnVjdCBkcHVfcnNj X2V2ZW50ICpkcHVfcnNjX3JlZ2lzdGVyX2V2ZW50KGludCByc2NfaW5kZXgsIHVpbnQzMl90IGV2 ZW50X3R5cGUsCi0JCXZvaWQgKCpjYl9mdW5jKSh1aW50MzJfdCBldmVudF90eXBlLCB2b2lkICp1 c3IpLCB2b2lkICp1c3IpOwotCi0vKioKLSAqIGRwdV9yc2NfdW5yZWdpc3Rlcl9ldmVudCAtIHVu cmVnaXN0ZXIgY2FsbGJhY2sgZm9yIGFuIGV2ZW50Ci0gKiBAZHB1X3JzY19ldmVudDogZXZlbnQg cmV0dXJuZWQgYnkgZHB1X3JzY19yZWdpc3Rlcl9ldmVudAotICovCi12b2lkIGRwdV9yc2NfdW5y ZWdpc3Rlcl9ldmVudChzdHJ1Y3QgZHB1X3JzY19ldmVudCAqZXZlbnQpOwotCi0vKioKLSAqIGlz X2RwdV9yc2NfYXZhaWxhYmxlIC0gY2hlY2sgaWYgZGlzcGxheSByc2MgYXZhaWxhYmxlLgotICog QHJzY19pbmRleDogICBBIGNsaWVudCB3aWxsIGJlIGNyZWF0ZWQgb24gdGhpcyBSU0MuIEFzIG9m IG5vdyBvbmx5Ci0gKiAgICAgICAgICAgICAgIERQVV9SU0NfSU5ERVggaXMgdmFsaWQgcnNjIGlu ZGV4LgotICogUmV0dXJuczogdHJ1ZSBpZiByc2MgaXMgYXZhaWxhYmxlOyBmYWxzZSBpbiBhbGwg b3RoZXIgY2FzZXMKLSAqLwotYm9vbCBpc19kcHVfcnNjX2F2YWlsYWJsZShpbnQgcnNjX2luZGV4 KTsKLQotLyoqCi0gKiBnZXRfZHB1X3JzY19jdXJyZW50X3N0YXRlIC0gZ2V0cyB0aGUgY3VycmVu dCBzdGF0ZSBvZiBzZGUgcnNjLgotICogQHJzY19pbmRleDogICBBIGNsaWVudCB3aWxsIGJlIGNy ZWF0ZWQgb24gdGhpcyBSU0MuIEFzIG9mIG5vdyBvbmx5Ci0gKiAgICAgICAgICAgICAgIERQVV9S U0NfSU5ERVggaXMgdmFsaWQgcnNjIGluZGV4LgotICogUmV0dXJuczogY3VycmVudCBzdGF0ZSBp ZiByc2MgYXZhaWxhYmxlOyBEUFVfUlNDX0lETEVfU1RBVEUgZm9yCi0gKiAgICAgICAgICBhbGwg b3RoZXIgY2FzZXMKLSAqLwotZW51bSBkcHVfcnNjX3N0YXRlIGdldF9kcHVfcnNjX2N1cnJlbnRf c3RhdGUoaW50IHJzY19pbmRleCk7Ci0KLSNlbHNlCi0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IGRw dV9yc2NfY2xpZW50ICpkcHVfcnNjX2NsaWVudF9jcmVhdGUodTMyIHJzY19pbmRleCwKLQkJY2hh ciAqbmFtZSwgYm9vbCBpc19wcmltYXJ5X2Rpc3BsYXkpCi17Ci0JcmV0dXJuIE5VTEw7Ci19Ci0K LXN0YXRpYyBpbmxpbmUgdm9pZCBkcHVfcnNjX2NsaWVudF9kZXN0cm95KHN0cnVjdCBkcHVfcnNj X2NsaWVudCAqY2xpZW50KQotewotfQotCi1zdGF0aWMgaW5saW5lIGludCBkcHVfcnNjX2NsaWVu dF9zdGF0ZV91cGRhdGUoc3RydWN0IGRwdV9yc2NfY2xpZW50ICpjbGllbnQsCi0JZW51bSBkcHVf cnNjX3N0YXRlIHN0YXRlLAotCXN0cnVjdCBkcHVfcnNjX2NtZF9jb25maWcgKmNvbmZpZywgaW50 IGNydGNfaWQsCi0JaW50ICp3YWl0X3ZibGFua19jcnRjX2lkKQotewotCXJldHVybiAwOwotfQot Ci1zdGF0aWMgaW5saW5lIGJvb2wgZHB1X3JzY19jbGllbnRfaXNfc3RhdGVfdXBkYXRlX2NvbXBs ZXRlKAotCQlzdHJ1Y3QgZHB1X3JzY19jbGllbnQgKmNhbGxlcl9jbGllbnQpCi17Ci0JcmV0dXJu IGZhbHNlOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBkcHVfcnNjX2NsaWVudF92b3RlKHN0cnVj dCBkcHVfcnNjX2NsaWVudCAqY2FsbGVyX2NsaWVudCwKLQl1MzIgYnVzX2lkLCB1NjQgYWJfdm90 ZSwgdTY0IGliX3ZvdGUpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgc3RydWN0 IGRwdV9yc2NfZXZlbnQgKmRwdV9yc2NfcmVnaXN0ZXJfZXZlbnQoaW50IHJzY19pbmRleCwKLQkJ dWludDMyX3QgZXZlbnRfdHlwZSwKLQkJdm9pZCAoKmNiX2Z1bmMpKHVpbnQzMl90IGV2ZW50X3R5 cGUsIHZvaWQgKnVzciksIHZvaWQgKnVzcikKLXsKLQlyZXR1cm4gTlVMTDsKLX0KLQotc3RhdGlj IGlubGluZSB2b2lkIGRwdV9yc2NfdW5yZWdpc3Rlcl9ldmVudChzdHJ1Y3QgZHB1X3JzY19ldmVu dCAqZXZlbnQpCi17Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc19kcHVfcnNjX2F2YWlsYWJs ZShpbnQgcnNjX2luZGV4KQotewotCXJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIGlubGluZSBl bnVtIGRwdV9yc2Nfc3RhdGUgZ2V0X2RwdV9yc2NfY3VycmVudF9zdGF0ZShpbnQgcnNjX2luZGV4 KQotewotCXJldHVybiBEUFVfUlNDX0lETEVfU1RBVEU7Ci19Ci0jZW5kaWYgLyogQ09ORklHX0RS TV9EUFVfUlNDICovCi0KLSNlbmRpZiAvKiBfRFBVX1JTQ19IXyAqLwotLSAKVGhlIFF1YWxjb21t IElubm92YXRpb24gQ2VudGVyLCBJbmMuIGlzIGEgbWVtYmVyIG9mIHRoZSBDb2RlIEF1cm9yYSBG b3J1bSwKYSBMaW51eCBGb3VuZGF0aW9uIENvbGxhYm9yYXRpdmUgUHJvamVjdAoKX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRnJlZWRyZW5vIG1haWxpbmcg bGlzdApGcmVlZHJlbm9AbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRl c2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZnJlZWRyZW5vCg==