From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jeykumar Sankaran Subject: [PATCH v3 13/13] drm/msm/dpu: use private obj to track hw resources Date: Tue, 7 Aug 2018 20:20:11 -0700 Message-ID: <1533698411-29819-4-git-send-email-jsanka@codeaurora.org> References: <1533698411-29819-1-git-send-email-jsanka@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1533698411-29819-1-git-send-email-jsanka-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org Cc: hoegsberg-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org, Jeykumar Sankaran , seanpaul-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org, robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org List-Id: linux-arm-msm@vger.kernel.org U3dpdGNoIHRvIHN0YXRlIGJhc2VkIHJlc291cmNlIG1hbmFnZW1lbnQuIFRoaXMgcGF0Y2gKb3Zl cmhhdWxzIHRoZSByZXNvdXJjZSBtYW5hZ2VyIGFuZCBIVyBhbGxvY2F0aW9uIG1ldGhvZHMgYnkK bWFpbnRhaW5pbmcgdGhlIGdsb2JhbCByZXNvdXJjZSBwb29sIGFuZCBhbGxvY2F0ZWQgaHcKYmxv Y2tzIGluIHJlc3BlY3RpdmUgZHJtIGNvbXBvbmVudCBzdGF0ZXMuCgpHbG9iYWwgcmVzb3VyY2Ug bWFuYWdlcihSTSkgaXMgdHJhY2tlZCBpbiBwcml2YXRlIG9iamVjdC4KQWxsb2NhdGlvbiBzdHJh dGVneSBpcyBzd2l0Y2hlZCBmcm9tIHNpbmdsZSBwb2ludCBhbGxvY2F0aW9uCm9mIEhXIHJlc291 cmNlcyBmb3IgdGhlIGRpc3BsYXkgcGlwZWxpbmUgdG8gcGVyIGNvbXBvbmVudApiYXNlZCBhbGxv Y2F0aW9uLCB3aGVyZSBlYWNoIGRybSBjb21wb25lbnQgYWxsb2NhdGVzIEhXCmJsb2NrcyBtYXBw ZWQgdG8gaXQncyBkb21haW4gYW5kIHRyYWNrcyB0aGVtIGluIHRoZWlyIHJlc3BlY3RpdmUKc3Rh dGUgb2JqZWN0cy4KCkZpeCByZXNvdXJjZSBjb250ZW50aW9uIGR1ZSB0byByYWNlIGNvbmRpdGlv bnMgYmV0d2Vlbgp1c2VyIHNwYWNlIGFuZCBkaXNwbGF5IHRocmVhZCBieSByZXNlcnZpbmcgcmVz b3VyY2VzCm9ubHkgaW4gYXRvbWljIGNoZWNrLgoKY2hhbmdlcyBpbiB2MjoKCS0gbm9uZQpjaGFu Z2VzIGluIHYzOgoJLSByZWJhc2VkIG9uIFsxXQoJLSBmaXggY29udHJvbCBwYXRoIGJ1ZyBpbiBz cGxpdCBMTSB0b3BvbG9neQoKWzFdIGh0dHBzOi8vZ2l0bGFiLmZyZWVkZXNrdG9wLm9yZy9zZWFu cGF1bC9kcHUtc3RhZ2luZy9jb21taXRzL2Zvci1uZXh0CgpDaGFuZ2UtSWQ6IEllOWQ0MmViM2U5 MzI1NzgxNmRhZjNkMzZjNDQ0YTMzNTY0NWQ2NWM2ClNpZ25lZC1vZmYtYnk6IEpleWt1bWFyIFNh bmthcmFuIDxqc2Fua2FAY29kZWF1cm9yYS5vcmc+Ci0tLQogZHJpdmVycy9ncHUvZHJtL21zbS9k aXNwL2RwdTEvZHB1X2NydGMuYyAgICAgICAgICAgfCAxNjUgKystLS0KIGRyaXZlcnMvZ3B1L2Ry bS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmggICAgICAgICAgIHwgIDMyICstCiBkcml2ZXJzL2dw dS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlci5jICAgICAgICB8IDEzMyArKy0tCiBkcml2 ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlcl9waHlzLmggICB8ICAgMiArLQog Li4uL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlcl9waHlzX3ZpZC5jICAgfCAgMjIg Ky0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9rbXMuYyAgICAgICAgICAgIHwg IDE5ICstCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfa21zLmggICAgICAgICAg ICB8ICAgOCArLQogZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X3JtLmMgICAgICAg ICAgICAgfCA3ODMgKysrKysrLS0tLS0tLS0tLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rp c3AvZHB1MS9kcHVfcm0uaCAgICAgICAgICAgICB8IDE0MCArKy0tCiA5IGZpbGVzIGNoYW5nZWQs IDQ1MSBpbnNlcnRpb25zKCspLCA4NTMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NydGMuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20v ZGlzcC9kcHUxL2RwdV9jcnRjLmMKaW5kZXggMGViMzY5Yy4uZGJmZjg3MCAxMDA2NDQKLS0tIGEv ZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NydGMuYworKysgYi9kcml2ZXJzL2dw dS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0Yy5jCkBAIC00OCw2ICs0OCw4IEBACiAjZGVmaW5l IFJJR0hUX01JWEVSIDEKIAogI2RlZmluZSBNSVNSX0JVRkZfU0laRQkJCTI1NgorI2RlZmluZSBN QVhfVkRJU1BMQVlfU1BMSVQJCTEwODAKKwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBkcHVfa21z ICpfZHB1X2NydGNfZ2V0X2ttcyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCiB7CkBAIC0yNTgsMTYg KzI2MCw3IEBAIHN0YXRpYyB2b2lkIF9kcHVfY3J0Y19ibGVuZF9zZXR1cChzdHJ1Y3QgZHJtX2Ny dGMgKmNydGMpCiAKIAlEUFVfREVCVUcoIiVzXG4iLCBkcHVfY3J0Yy0+bmFtZSk7CiAKLQlpZiAo Y3N0YXRlLT5udW1fbWl4ZXJzID4gQ1JUQ19EVUFMX01JWEVSUykgewotCQlEUFVfRVJST1IoImlu dmFsaWQgbnVtYmVyIG1peGVyczogJWRcbiIsIGNzdGF0ZS0+bnVtX21peGVycyk7Ci0JCXJldHVy bjsKLQl9Ci0KIAlmb3IgKGkgPSAwOyBpIDwgY3N0YXRlLT5udW1fbWl4ZXJzOyBpKyspIHsKLQkJ aWYgKCFtaXhlcltpXS5od19sbSB8fCAhbWl4ZXJbaV0ubG1fY3RsKSB7Ci0JCQlEUFVfRVJST1Io ImludmFsaWQgbG0gb3IgY3RsIGFzc2lnbmVkIHRvIG1peGVyXG4iKTsKLQkJCXJldHVybjsKLQkJ fQogCQltaXhlcltpXS5taXhlcl9vcF9tb2RlID0gMDsKIAkJbWl4ZXJbaV0uZmx1c2hfbWFzayA9 IDA7CiAJCWlmIChtaXhlcltpXS5sbV9jdGwtPm9wcy5jbGVhcl9hbGxfYmxlbmRzdGFnZXMpCkBA IC00OTgsNzUgKzQ5MSwzMyBAQCB2b2lkIGRwdV9jcnRjX2NvbXBsZXRlX2NvbW1pdChzdHJ1Y3Qg ZHJtX2NydGMgKmNydGMsCiAJdHJhY2VfZHB1X2NydGNfY29tcGxldGVfY29tbWl0KERSTUlEKGNy dGMpKTsKIH0KIAotc3RhdGljIHZvaWQgX2RwdV9jcnRjX3NldHVwX21peGVyX2Zvcl9lbmNvZGVy KAotCQlzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCi0JCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jKQor c3RhdGljIHZvaWQgX2RwdV9jcnRjX3NldHVwX21peGVycyhzdHJ1Y3QgZHJtX2NydGNfc3RhdGUg KmNydGNfc3RhdGUpCiB7Ci0Jc3RydWN0IGRwdV9jcnRjX3N0YXRlICpjc3RhdGUgPSB0b19kcHVf Y3J0Y19zdGF0ZShjcnRjLT5zdGF0ZSk7Ci0Jc3RydWN0IGRwdV9rbXMgKmRwdV9rbXMgPSBfZHB1 X2NydGNfZ2V0X2ttcyhjcnRjKTsKLQlzdHJ1Y3QgZHB1X3JtICpybSA9ICZkcHVfa21zLT5ybTsK KwlzdHJ1Y3QgZHB1X2NydGNfc3RhdGUgKmNzdGF0ZSA9IHRvX2RwdV9jcnRjX3N0YXRlKGNydGNf c3RhdGUpOwogCXN0cnVjdCBkcHVfY3J0Y19taXhlciAqbWl4ZXI7Ci0Jc3RydWN0IGRwdV9od19j dGwgKmxhc3RfdmFsaWRfY3RsID0gTlVMTDsKLQlpbnQgaTsKLQlzdHJ1Y3QgZHB1X3JtX2h3X2l0 ZXIgbG1faXRlciwgY3RsX2l0ZXI7Ci0KLQlkcHVfcm1faW5pdF9od19pdGVyKCZsbV9pdGVyLCBl bmMtPmJhc2UuaWQsIERQVV9IV19CTEtfTE0pOwotCWRwdV9ybV9pbml0X2h3X2l0ZXIoJmN0bF9p dGVyLCBlbmMtPmJhc2UuaWQsIERQVV9IV19CTEtfQ1RMKTsKKwlpbnQgaSA9IDAsIGogPSAwOwog Ci0JLyogU2V0IHVwIGFsbCB0aGUgbWl4ZXJzIGFuZCBjdGxzIHJlc2VydmVkIGJ5IHRoaXMgZW5j b2RlciAqLwotCWZvciAoaSA9IGNzdGF0ZS0+bnVtX21peGVyczsgaSA8IEFSUkFZX1NJWkUoY3N0 YXRlLT5taXhlcnMpOyBpKyspIHsKLQkJbWl4ZXIgPSAmY3N0YXRlLT5taXhlcnNbaV07Ci0KLQkJ aWYgKCFkcHVfcm1fZ2V0X2h3KHJtLCAmbG1faXRlcikpCi0JCQlicmVhazsKLQkJbWl4ZXItPmh3 X2xtID0gKHN0cnVjdCBkcHVfaHdfbWl4ZXIgKilsbV9pdGVyLmh3OwotCi0JCS8qIENUTCBtYXkg YmUgPD0gTE1zLCBpZiA8LCBtdWx0aXBsZSBMTXMgY29udHJvbGxlZCBieSAxIENUTCAqLwotCQlp ZiAoIWRwdV9ybV9nZXRfaHcocm0sICZjdGxfaXRlcikpIHsKLQkJCURQVV9ERUJVRygibm8gY3Rs IGFzc2lnbmVkIHRvIGxtICVkLCB1c2luZyBwcmV2aW91c1xuIiwKLQkJCQkJbWl4ZXItPmh3X2xt LT5pZHggLSBMTV8wKTsKLQkJCW1peGVyLT5sbV9jdGwgPSBsYXN0X3ZhbGlkX2N0bDsKLQkJfSBl bHNlIHsKLQkJCW1peGVyLT5sbV9jdGwgPSAoc3RydWN0IGRwdV9od19jdGwgKiljdGxfaXRlci5o dzsKLQkJCWxhc3RfdmFsaWRfY3RsID0gbWl4ZXItPmxtX2N0bDsKLQkJfQotCi0JCS8qIFNob3Vs ZG4ndCBoYXBwZW4sIG1peGVycyBhcmUgYWx3YXlzID49IGN0bHMgKi8KLQkJaWYgKCFtaXhlci0+ bG1fY3RsKSB7Ci0JCQlEUFVfRVJST1IoIm5vIHZhbGlkIGN0bHMgZm91bmQgZm9yIGxtICVkXG4i LAotCQkJCQltaXhlci0+aHdfbG0tPmlkeCAtIExNXzApOwotCQkJcmV0dXJuOwotCQl9Ci0KLQkJ bWl4ZXItPmVuY29kZXIgPSBlbmM7Ci0KLQkJY3N0YXRlLT5udW1fbWl4ZXJzKys7Ci0JCURQVV9E RUJVRygic2V0dXAgbWl4ZXIgJWQ6IGxtICVkXG4iLAotCQkJCWksIG1peGVyLT5od19sbS0+aWR4 IC0gTE1fMCk7Ci0JCURQVV9ERUJVRygic2V0dXAgbWl4ZXIgJWQ6IGN0bCAlZFxuIiwKLQkJCQlp LCBtaXhlci0+bG1fY3RsLT5pZHggLSBDVExfMCk7CisJaWYgKGNzdGF0ZS0+bnVtX21peGVycyA8 IGNzdGF0ZS0+bnVtX2N0bHMpIHsKKwkJRFBVX0VSUk9SKAorCQkJImxtIGNvdW50KCVkKSA8IGN0 bCBjb3VudCglZCkuIE5vIHN1cHBvcnQgZm9yIHN1Y2ggdG9wb2xvZ2llc1xuIiwKKwkJCWNzdGF0 ZS0+bnVtX21peGVycywKKwkJCWNzdGF0ZS0+bnVtX2N0bHMpOworCQlyZXR1cm47CiAJfQotfQog Ci1zdGF0aWMgdm9pZCBfZHB1X2NydGNfc2V0dXBfbWl4ZXJzKHN0cnVjdCBkcm1fY3J0YyAqY3J0 YykKLXsKLQlzdHJ1Y3QgZHB1X2NydGMgKmRwdV9jcnRjID0gdG9fZHB1X2NydGMoY3J0Yyk7Ci0J c3RydWN0IGRwdV9jcnRjX3N0YXRlICpjc3RhdGUgPSB0b19kcHVfY3J0Y19zdGF0ZShjcnRjLT5z dGF0ZSk7Ci0Jc3RydWN0IGRybV9lbmNvZGVyICplbmM7Ci0KLQljc3RhdGUtPm51bV9taXhlcnMg PSAwOwotCW1lbXNldChjc3RhdGUtPm1peGVycywgMCwgc2l6ZW9mKGNzdGF0ZS0+bWl4ZXJzKSk7 CisJLyogU2V0IHVwIGFsbCB0aGUgbWl4ZXJzIGFuZCBjdGxzIHJlc2VydmVkIGJ5IHRoaXMgZW5j b2RlciAqLworCWZvciAoaSA9IDA7IGkgPCBjc3RhdGUtPm51bV9taXhlcnM7IGkrKykgeworCQkv KiAzRCBtZXJnZSB0b3BvbG9neSBjYW4gaGF2ZSBudW1fbWl4ZXJzID4gbnVtX2N0bHMgKi8KKwkJ aWYgKGkgPCBjc3RhdGUtPm51bV9jdGxzKQorCQkJaiA9IGk7CiAKLQltdXRleF9sb2NrKCZkcHVf Y3J0Yy0+Y3J0Y19sb2NrKTsKLQkvKiBDaGVjayBmb3IgbWl4ZXJzIG9uIGFsbCBlbmNvZGVycyBh dHRhY2hlZCB0byB0aGlzIGNydGMgKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVuYywgJmNydGMt PmRldi0+bW9kZV9jb25maWcuZW5jb2Rlcl9saXN0LCBoZWFkKSB7Ci0JCWlmIChlbmMtPmNydGMg IT0gY3J0YykKLQkJCWNvbnRpbnVlOworCQljc3RhdGUtPm1peGVyc1tpXS5sbV9jdGwgPSBjc3Rh dGUtPmh3X2N0bHNbal07CisJCW1peGVyID0gJmNzdGF0ZS0+bWl4ZXJzW2ldOwogCi0JCV9kcHVf Y3J0Y19zZXR1cF9taXhlcl9mb3JfZW5jb2RlcihjcnRjLCBlbmMpOworCQlEUFVfREVCVUcoInNl dHVwIG1peGVyICVkOiBsbSglZCkgLSBjdGwoJWQpXG4iLAorCQkJCWksIG1peGVyLT5od19sbS0+ aWR4IC0gTE1fMCwKKwkJCQltaXhlci0+bG1fY3RsLT5pZHggLSBDVExfMCk7CiAJfQotCi0JbXV0 ZXhfdW5sb2NrKCZkcHVfY3J0Yy0+Y3J0Y19sb2NrKTsKIH0KIAogc3RhdGljIHZvaWQgX2RwdV9j cnRjX3NldHVwX2xtX2JvdW5kcyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCkBAIC02MDYsNyArNTU3 LDcgQEAgc3RhdGljIHZvaWQgZHB1X2NydGNfYXRvbWljX2JlZ2luKHN0cnVjdCBkcm1fY3J0YyAq Y3J0YywKIAkJc3RydWN0IGRybV9jcnRjX3N0YXRlICpvbGRfc3RhdGUpCiB7CiAJc3RydWN0IGRw dV9jcnRjICpkcHVfY3J0YzsKLQlzdHJ1Y3QgZHB1X2NydGNfc3RhdGUgKmNzdGF0ZTsKKwlzdHJ1 Y3QgZHB1X2NydGNfc3RhdGUgKm5ld19jc3RhdGU7CiAJc3RydWN0IGRybV9lbmNvZGVyICplbmNv ZGVyOwogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAg LTYyNiwxNCArNTc3LDExIEBAIHN0YXRpYyB2b2lkIGRwdV9jcnRjX2F0b21pY19iZWdpbihzdHJ1 Y3QgZHJtX2NydGMgKmNydGMsCiAJRFBVX0RFQlVHKCJjcnRjJWRcbiIsIGNydGMtPmJhc2UuaWQp OwogCiAJZHB1X2NydGMgPSB0b19kcHVfY3J0YyhjcnRjKTsKLQljc3RhdGUgPSB0b19kcHVfY3J0 Y19zdGF0ZShjcnRjLT5zdGF0ZSk7CisJbmV3X2NzdGF0ZSA9IHRvX2RwdV9jcnRjX3N0YXRlKGNy dGMtPnN0YXRlKTsKIAlkZXYgPSBjcnRjLT5kZXY7CiAJc21tdV9zdGF0ZSA9ICZkcHVfY3J0Yy0+ c21tdV9zdGF0ZTsKIAotCWlmICghY3N0YXRlLT5udW1fbWl4ZXJzKSB7Ci0JCV9kcHVfY3J0Y19z ZXR1cF9taXhlcnMoY3J0Yyk7Ci0JCV9kcHVfY3J0Y19zZXR1cF9sbV9ib3VuZHMoY3J0YywgY3J0 Yy0+c3RhdGUpOwotCX0KKwlfZHB1X2NydGNfc2V0dXBfbG1fYm91bmRzKGNydGMsIGNydGMtPnN0 YXRlKTsKIAogCWlmIChkcHVfY3J0Yy0+ZXZlbnQpIHsKIAkJV0FSTl9PTihkcHVfY3J0Yy0+ZXZl bnQpOwpAQCAtNjU3LDcgKzYwNSw3IEBAIHN0YXRpYyB2b2lkIGRwdV9jcnRjX2F0b21pY19iZWdp bihzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCiAJICogaXQgbWVhbnMgd2UgYXJlIHRyeWluZyB0byBm bHVzaCBhIENSVEMgd2hvc2Ugc3RhdGUgaXMgZGlzYWJsZWQ6CiAJICogbm90aGluZyBlbHNlIG5l ZWRzIHRvIGJlIGRvbmUuCiAJICovCi0JaWYgKHVubGlrZWx5KCFjc3RhdGUtPm51bV9taXhlcnMp KQorCWlmICh1bmxpa2VseSghbmV3X2NzdGF0ZS0+bnVtX21peGVycykpCiAJCXJldHVybjsKIAog CV9kcHVfY3J0Y19ibGVuZF9zZXR1cChjcnRjKTsKQEAgLTEwNjksOSArMTAxNyw5IEBAIHN0YXRp YyB2b2lkIGRwdV9jcnRjX2hhbmRsZV9wb3dlcl9ldmVudCh1MzIgZXZlbnRfdHlwZSwgdm9pZCAq YXJnKQogewogCXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9IGFyZzsKIAlzdHJ1Y3QgZHB1X2NydGMg KmRwdV9jcnRjOworCXN0cnVjdCBkcHVfY3J0Y19zdGF0ZSAqY3N0YXRlOwogCXN0cnVjdCBkcm1f ZW5jb2RlciAqZW5jb2RlcjsKIAlzdHJ1Y3QgZHB1X2NydGNfbWl4ZXIgKm07Ci0Jc3RydWN0IGRw dV9jcnRjX3N0YXRlICpjc3RhdGU7CiAJdTMyIGksIG1pc3Jfc3RhdHVzOwogCiAJaWYgKCFjcnRj KSB7CkBAIC0xMDc5LDcgKzEwMjcsNyBAQCBzdGF0aWMgdm9pZCBkcHVfY3J0Y19oYW5kbGVfcG93 ZXJfZXZlbnQodTMyIGV2ZW50X3R5cGUsIHZvaWQgKmFyZykKIAkJcmV0dXJuOwogCX0KIAlkcHVf Y3J0YyA9IHRvX2RwdV9jcnRjKGNydGMpOwotCWNzdGF0ZSA9IHRvX2RwdV9jcnRjX3N0YXRlKGRw dV9jcnRjLT5iYXNlLnN0YXRlKTsKKwljc3RhdGUgPSB0b19kcHVfY3J0Y19zdGF0ZShjcnRjLT5z dGF0ZSk7CiAKIAltdXRleF9sb2NrKCZkcHVfY3J0Yy0+Y3J0Y19sb2NrKTsKIApAQCAtMTEzOCw2 ICsxMDg2LDggQEAgc3RhdGljIHZvaWQgZHB1X2NydGNfZGlzYWJsZShzdHJ1Y3QgZHJtX2NydGMg KmNydGMpCiAJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGU7CiAJc3RydWN0IGRybV9lbmNv ZGVyICplbmNvZGVyOwogCXN0cnVjdCBtc21fZHJtX3ByaXZhdGUgKnByaXY7CisJc3RydWN0IGRw dV9wcml2YXRlX3N0YXRlICpkcHVfcHJpdl9zdGF0ZTsKKwlzdHJ1Y3QgZHB1X2ttcyAqZHB1X2tt czsKIAlpbnQgcmV0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTExNDksNiArMTA5OSwx MCBAQCBzdGF0aWMgdm9pZCBkcHVfY3J0Y19kaXNhYmxlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykK IAljc3RhdGUgPSB0b19kcHVfY3J0Y19zdGF0ZShjcnRjLT5zdGF0ZSk7CiAJbW9kZSA9ICZjc3Rh dGUtPmJhc2UuYWRqdXN0ZWRfbW9kZTsKIAlwcml2ID0gY3J0Yy0+ZGV2LT5kZXZfcHJpdmF0ZTsK KwlkcHVfa21zID0gdG9fZHB1X2ttcyhwcml2LT5rbXMpOworCisJLyogYWNjZXNzaW5nIGFmdGVy IHN3YXAgc3RhdGUuIHBpdl9vYmouc3RhdGUgaXMgdGhlIGN1cnJlbnQgc3RhdGUgKi8KKwlkcHVf cHJpdl9zdGF0ZSA9IHRvX2RwdV9wcml2YXRlX3N0YXRlKGRwdV9rbXMtPnByaXZfb2JqLnN0YXRl KTsKIAogCURSTV9ERUJVR19LTVMoImNydGMlZFxuIiwgY3J0Yy0+YmFzZS5pZCk7CiAKQEAgLTEx OTUsMTMgKzExNDksMTQgQEAgc3RhdGljIHZvaWQgZHB1X2NydGNfZGlzYWJsZShzdHJ1Y3QgZHJt X2NydGMgKmNydGMpCiAJCWRwdV9wb3dlcl9oYW5kbGVfdW5yZWdpc3Rlcl9ldmVudChkcHVfY3J0 Yy0+cGhhbmRsZSwKIAkJCQlkcHVfY3J0Yy0+cG93ZXJfZXZlbnQpOwogCi0JbWVtc2V0KGNzdGF0 ZS0+bWl4ZXJzLCAwLCBzaXplb2YoY3N0YXRlLT5taXhlcnMpKTsKLQljc3RhdGUtPm51bV9taXhl cnMgPSAwOwotCiAJLyogZGlzYWJsZSBjbGsgJiBidyBjb250cm9sIHVudGlsIGNsayAmIGJ3IHBy b3BlcnRpZXMgYXJlIHNldCAqLwogCWNzdGF0ZS0+YndfY29udHJvbCA9IGZhbHNlOwogCWNzdGF0 ZS0+Yndfc3BsaXRfdm90ZSA9IGZhbHNlOwogCisJcmV0ID0gZHB1X3JtX3JlbGVhc2VfY3J0Y19y ZXMoJmRwdV9wcml2X3N0YXRlLT5ybSwgY3N0YXRlKTsKKwlpZiAocmV0KQorCQlEUFVfRVJST1Io ImVycm9yIGluIHJlbGVhc2luZyBjcnRjIHJlc291cmNlc1xuIik7CisKIAltdXRleF91bmxvY2so JmRwdV9jcnRjLT5jcnRjX2xvY2spOwogCiAJaWYgKGNydGMtPnN0YXRlLT5ldmVudCAmJiAhY3J0 Yy0+c3RhdGUtPmFjdGl2ZSkgewpAQCAtMTI2MCw2ICsxMjE1LDMxIEBAIHN0YXRpYyB2b2lkIGRw dV9jcnRjX2VuYWJsZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCiAKIH0KIAorc3RhdGljIHN0cnVj dCBkcHVfY3J0Y190b3BvbG9neQorZHB1X2NydGNfZ2V0X3RvcG9sb2d5KHN0cnVjdCBkcHVfY3J0 Y19zdGF0ZSAqY3N0YXRlLAorCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKK3sKKwlz dHJ1Y3QgZHB1X2NydGNfdG9wb2xvZ3kgdG9wb2xvZ3k7CisKKwltZW1zZXQoJnRvcG9sb2d5LCAw LCBzaXplb2YodG9wb2xvZ3kpKTsKKworCS8qIFVzZSBzcGxpdCB0b3BvbG9neSBmb3Igd2lkdGgg PiAxMDgwICovCisJdG9wb2xvZ3kubnVtX2xtcyA9IChtb2RlLT52ZGlzcGxheSA+IE1BWF9WRElT UExBWV9TUExJVCkgPyAyIDogMTsKKwl0b3BvbG9neS5udW1fY3RscyA9IGNzdGF0ZS0+bnVtX2lu dGZzOworCisJdG9wb2xvZ3kubmVlZHNfcmVhbGxvYyA9ICh0b3BvbG9neS5udW1fbG1zICE9IGNz dGF0ZS0+bnVtX21peGVycykgfHwKKwkJKHRvcG9sb2d5Lm51bV9jdGxzICE9IGNzdGF0ZS0+bnVt X2N0bHMpOworCisJaWYgKHRvcG9sb2d5Lm5lZWRzX3JlYWxsb2MpCisJCURQVV9ERUJVRygKKwkJ ImNydGMgJWQgbmVlZHMgaHcgcmVhbGxvY2F0aW9uLiBsbSAoJWQgLSAlZCkgY3RsKCVkIC0gJWQp XG4iLAorCQkJZ2V0X2NydGNfaWQoY3N0YXRlKSwKKwkJCWNzdGF0ZS0+bnVtX21peGVycywgdG9w b2xvZ3kubnVtX2xtcywKKwkJCWNzdGF0ZS0+bnVtX2N0bHMsIHRvcG9sb2d5Lm51bV9jdGxzKTsK KworCXJldHVybiB0b3BvbG9neTsKK30KKwogc3RydWN0IHBsYW5lX3N0YXRlIHsKIAlzdHJ1Y3Qg ZHB1X3BsYW5lX3N0YXRlICpkcHVfcHN0YXRlOwogCWNvbnN0IHN0cnVjdCBkcm1fcGxhbmVfc3Rh dGUgKmRybV9wc3RhdGU7CkBAIC0xMjc3LDYgKzEyNTcsOCBAQCBzdGF0aWMgaW50IGRwdV9jcnRj X2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCiAJY29uc3Qgc3RydWN0IGRybV9w bGFuZV9zdGF0ZSAqcHN0YXRlOwogCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lOwogCXN0cnVjdCBk cm1fZGlzcGxheV9tb2RlICptb2RlOworCXN0cnVjdCBkcHVfY3J0Y190b3BvbG9neSB0b3BvbG9n eTsKKwlzdHJ1Y3QgZHB1X3ByaXZhdGVfc3RhdGUgKmRwdV9wcml2X3N0YXRlOwogCiAJaW50IGNu dCA9IDAsIHJjID0gMCwgbWl4ZXJfd2lkdGgsIGksIHpfcG9zOwogCkBAIC0xNDkzLDYgKzE0NzUs MjUgQEAgc3RhdGljIGludCBkcHVfY3J0Y19hdG9taWNfY2hlY2soc3RydWN0IGRybV9jcnRjICpj cnRjLAogCQl9CiAJfQogCisJLyogUmVzb3VyY2UgYWxsb2NhdGlvbiAqLworCWRwdV9wcml2X3N0 YXRlID0gZHB1X2dldF9wcml2YXRlX3N0YXRlKHN0YXRlLT5zdGF0ZSk7CisJaWYgKElTX0VSUihk cHVfcHJpdl9zdGF0ZSkpCisJCWdvdG8gZW5kOworCisJdG9wb2xvZ3kgPSBkcHVfY3J0Y19nZXRf dG9wb2xvZ3koY3N0YXRlLCAmc3RhdGUtPmFkanVzdGVkX21vZGUpOworCWlmICghdG9wb2xvZ3ku bmVlZHNfcmVhbGxvYykKKwkJZ290byBlbmQ7CisKKwlkcHVfcm1fcmVsZWFzZV9jcnRjX3Jlcygm ZHB1X3ByaXZfc3RhdGUtPnJtLCBjc3RhdGUpOworCXJjID0gZHB1X3JtX3Jlc2VydmVfY3J0Y19y ZXMoJmRwdV9wcml2X3N0YXRlLT5ybSwgY3N0YXRlLCAmdG9wb2xvZ3kpOworCWlmIChyYykgewor CQlEUFVfRVJST1IoImZhaWxlZCB0byBhbGxvY2F0ZSByZXNvdXJjZXMgZm9yIGNydGM6ICVkXG4i LAorCQkJCWNydGMtPmJhc2UuaWQpOworCQlnb3RvIGVuZDsKKwl9CisKKwlfZHB1X2NydGNfc2V0 dXBfbWl4ZXJzKHN0YXRlKTsKKwogZW5kOgogCWtmcmVlKHBzdGF0ZXMpOwogCXJldHVybiByYzsK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmggYi9k cml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0Yy5oCmluZGV4IDViODVjYTguLjE1 YzMwYTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRj LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NydGMuaApAQCAtMzAs NiArMzAsOCBAQAogLyogZGVmaW5lIHRoZSBtYXhpbXVtIG51bWJlciBvZiBpbi1mbGlnaHQgZnJh bWUgZXZlbnRzICovCiAjZGVmaW5lIERQVV9DUlRDX0ZSQU1FX0VWRU5UX1NJWkUJNAogCitzdHJ1 Y3QgZHB1X2ttczsKKwogLyoqCiAgKiBlbnVtIGRwdV9jcnRjX2NsaWVudF90eXBlOiBjcnRjIGNs aWVudCB0eXBlCiAgKiBAUlRfQ0xJRU5UOglSZWFsVGltZSBjbGllbnQgbGlrZSB2aWRlby9jbWQg bW9kZSBkaXNwbGF5CkBAIC04MywxNSArODUsMTUgQEAgc3RydWN0IGRwdV9jcnRjX3NtbXVfc3Rh dGVfZGF0YSB7CiAvKioKICAqIHN0cnVjdCBkcHVfY3J0Y19taXhlcjogc3RvcmVzIHRoZSBtYXAg Zm9yIGVhY2ggdmlydHVhbCBwaXBlbGluZSBpbiB0aGUgQ1JUQwogICogQGh3X2xtOglMTSBIVyBE cml2ZXIgY29udGV4dAotICogQGxtX2N0bDoJQ1RMIFBhdGggSFcgZHJpdmVyIGNvbnRleHQKLSAq IEBlbmNvZGVyOglFbmNvZGVyIGF0dGFjaGVkIHRvIHRoaXMgbG0gJiBjdGwKKyAqIEBsbV9jdGw6 CUNUTCBwYXRoIGZvciBhc3NvY2lhdGVkIExNIEhXCisgKiBAaHdfcHA6CVBpbmdwb25nIEhXIGRy aXZlciBjb250ZXh0CiAgKiBAbWl4ZXJfb3BfbW9kZToJbWl4ZXIgYmxlbmRpbmcgb3BlcmF0aW9u IG1vZGUKICAqIEBmbHVzaF9tYXNrOgltaXhlciBmbHVzaCBtYXNrIGZvciBjdGwsIG1peGVyIGFu ZCBwaXBlCiAgKi8KIHN0cnVjdCBkcHVfY3J0Y19taXhlciB7CiAJc3RydWN0IGRwdV9od19taXhl ciAqaHdfbG07CiAJc3RydWN0IGRwdV9od19jdGwgKmxtX2N0bDsKLQlzdHJ1Y3QgZHJtX2VuY29k ZXIgKmVuY29kZXI7CisJc3RydWN0IGRwdV9od19waW5ncG9uZyAqaHdfcHA7CiAJdTMyIG1peGVy X29wX21vZGU7CiAJdTMyIGZsdXNoX21hc2s7CiB9OwpAQCAtMTE3LDYgKzExOSwxMyBAQCBzdHJ1 Y3QgZHB1X2NydGNfZnJhbWVfZXZlbnQgewogICovCiAjZGVmaW5lIERQVV9DUlRDX01BWF9FVkVO VF9DT1VOVAkxNgogCitzdHJ1Y3QgZHB1X2NydGNfdG9wb2xvZ3kgeworCWJvb2wgbmVlZHNfcmVh bGxvYzsKKwlpbnQgbnVtX2N0bHM7CisJaW50IG51bV9sbXM7CisJaW50IG51bV9pbnRmczsKK307 CisKIC8qKgogICogc3RydWN0IGRwdV9jcnRjIC0gdmlydHVhbGl6ZWQgQ1JUQyBkYXRhIHN0cnVj dHVyZQogICogQGJhc2UgICAgICAgICAgOiBCYXNlIGRybSBjcnRjIHN0cnVjdHVyZQpAQCAtMjIw LDYgKzIyOSw4IEBAIHN0cnVjdCBkcHVfY3J0YyB7CiAgKiBAbWl4ZXJzICAgICAgICA6IExpc3Qg b2YgYWN0aXZlIG1peGVycwogICogQG51bV9jdGxzICAgICAgOiBOdW1iZXIgb2YgY3RsIHBhdGhz IGluIHVzZQogICogQGh3X2N0bHMgICAgICAgOiBMaXN0IG9mIGFjdGl2ZWwgY3RsIHBhdGhzCisg KiBAbnVtX2ludGYgICAgICA6IE51bWVlciBvZiBpbnRlcmZhY2VzIGluIHVzZXMKKyAqIEBod19p bnRmcyAgICAgIDogTGlzdCBvZiBpbnRlcmZhY2VzIGluIHVzZQogICovCiBzdHJ1Y3QgZHB1X2Ny dGNfc3RhdGUgewogCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSBiYXNlOwpAQCAtMjM3LDExICsyNDgs MjYgQEAgc3RydWN0IGRwdV9jcnRjX3N0YXRlIHsKIAogCXUzMiBudW1fY3RsczsKIAlzdHJ1Y3Qg ZHB1X2h3X2N0bCAqaHdfY3Rsc1tDUlRDX0RVQUxfTUlYRVJTXTsKKworCS8qKgorCSAqIGFzIGRy bSBlbmNvZGVycyBkb2Vzbid0IGhhdmUgZGVkaWNhdGVzIHN0YXRlIG9iamVjdHMKKwkgKiBhbmQg ZHJtIGNvbm5lY3RvcnMgYXJlIG5vdCBvd25lZCBieSBEUFUsIG1haW50YWluCisJICogSFcgaW50 ZXJmYWNlIGFuZCBvdGhlciBpbnRlcmZhY2UgcmVsYXRlZCBibG9ja3MKKwkgKiBpbiBjcnRjIHN0 YXRlCisJICoKKwkgKiBUT0RPOiBObyBzdXBwb3J0IGZvciBjbG9uZSBtb2RlIHlldCB3aGVyZSBh IGNydGMKKwkgKiBjYW4gYmUgYXR0YWNoZWQgd2l0aCBtb3JlIHRoYW4gb25lIGVuY29kZXIvY29u bmVjdG9yLgorCSAqLworCXUzMiBudW1faW50ZnM7CisJc3RydWN0IGRwdV9od19pbnRmICpod19p bnRmc1tDUlRDX0RVQUxfTUlYRVJTXTsKIH07CiAKICNkZWZpbmUgdG9fZHB1X2NydGNfc3RhdGUo eCkgXAogCWNvbnRhaW5lcl9vZih4LCBzdHJ1Y3QgZHB1X2NydGNfc3RhdGUsIGJhc2UpCiAKKy8q IGdldCBjcnRjIGlkIGZyb20gZHB1IGNydGMgc3RhdGUqLworI2RlZmluZSBnZXRfY3J0Y19pZCh4 KSAoKHgtPmJhc2UuY3J0YyktPmJhc2UuaWQpCisKIC8qKgogICogZHB1X2NydGNfZ2V0X21peGVy X3dpZHRoIC0gZ2V0IHRoZSBtaXhlciB3aWR0aAogICogTWl4ZXIgd2lkdGggd2lsbCBiZSBzYW1l IGFzIHBhbmVsIHdpZHRoKC8yIGZvciBzcGxpdCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3Av ZHB1MS9kcHVfZW5jb2Rlci5jCmluZGV4IGZlMGI1NjMuLjlmNWY1OWYgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyLmMKKysrIGIvZHJpdmVycy9n cHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXIuYwpAQCAtNjksOCArNjksNiBAQAogCiAj ZGVmaW5lIElETEVfU0hPUlRfVElNRU9VVAkxCiAKLSNkZWZpbmUgTUFYX1ZESVNQTEFZX1NQTElU IDEwODAKLQogLyoqCiAgKiBlbnVtIGRwdV9lbmNfcmNfZXZlbnRzIC0gZXZlbnRzIGZvciByZXNv dXJjZSBjb250cm9sIHN0YXRlIG1hY2hpbmUKICAqIEBEUFVfRU5DX1JDX0VWRU5UX0tJQ0tPRkY6 CkBAIC01NzIsMjUgKzU3MCwzMiBAQCBzdGF0aWMgdm9pZCBfZHB1X2VuY29kZXJfYWRqdXN0X21v ZGUoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKIAl9CiB9CiAKLXN0YXRpYyBzdHJ1 Y3QgbXNtX2Rpc3BsYXlfdG9wb2xvZ3kgZHB1X2VuY29kZXJfZ2V0X3RvcG9sb2d5KAorc3RhdGlj IHN0cnVjdCBkcHVfY3J0Y190b3BvbG9neSBkcHVfZW5jb2Rlcl9nZXRfdG9wb2xvZ3koCiAJCQlz dHJ1Y3QgZHB1X2VuY29kZXJfdmlydCAqZHB1X2VuYywKLQkJCXN0cnVjdCBkcHVfa21zICpkcHVf a21zLAotCQkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCisJCQlzdHJ1Y3QgZHB1X2Ny dGNfc3RhdGUgKmNzdGF0ZSkKIHsKLQlzdHJ1Y3QgbXNtX2Rpc3BsYXlfdG9wb2xvZ3kgdG9wb2xv Z3k7CisJc3RydWN0IGRwdV9jcnRjX3RvcG9sb2d5IHRvcG9sb2d5OwogCWludCBpLCBpbnRmX2Nv dW50ID0gMDsKIAorCW1lbXNldCgmdG9wb2xvZ3ksIDAsIHNpemVvZih0b3BvbG9neSkpOworCiAJ Zm9yIChpID0gMDsgaSA8IE1BWF9QSFlTX0VOQ09ERVJTX1BFUl9WSVJUVUFMOyBpKyspCiAJCWlm IChkcHVfZW5jLT5waHlzX2VuY3NbaV0pCiAJCQlpbnRmX2NvdW50Kys7CiAKLQkvKiBVc2VyIHNw bGl0IHRvcG9sb2d5IGZvciB3aWR0aCA+IDEwODAgKi8KLQl0b3BvbG9neS5udW1fbG0gPSAobW9k ZS0+dmRpc3BsYXkgPiBNQVhfVkRJU1BMQVlfU1BMSVQpID8gMiA6IDE7Ci0JdG9wb2xvZ3kubnVt X2VuYyA9IDA7Ci0JdG9wb2xvZ3kubnVtX2ludGYgPSBpbnRmX2NvdW50OworCXRvcG9sb2d5Lm51 bV9pbnRmcyA9IGludGZfY291bnQ7CisKKwl0b3BvbG9neS5uZWVkc19yZWFsbG9jID0gKGNzdGF0 ZS0+bnVtX2ludGZzICE9IHRvcG9sb2d5Lm51bV9pbnRmcyk7CisKKwlpZiAodG9wb2xvZ3kubmVl ZHNfcmVhbGxvYykKKwkJRFBVX0RFQlVHX0VOQyhkcHVfZW5jLAorCQkJImNydGMgJWQgbmVlZHMg aHcgcmVhbGxvY2F0aW9uLiBpbnRmICglZCAtICVkKVxuIiwKKwkJCWdldF9jcnRjX2lkKGNzdGF0 ZSksCisJCQljc3RhdGUtPm51bV9pbnRmcywgdG9wb2xvZ3kubnVtX2ludGZzKTsKIAogCXJldHVy biB0b3BvbG9neTsKIH0KKwogc3RhdGljIGludCBkcHVfZW5jb2Rlcl92aXJ0X2F0b21pY19jaGVj aygKIAkJc3RydWN0IGRybV9lbmNvZGVyICpkcm1fZW5jLAogCQlzdHJ1Y3QgZHJtX2NydGNfc3Rh dGUgKmNydGNfc3RhdGUsCkBAIC02MDEsNyArNjA2LDEwIEBAIHN0YXRpYyBpbnQgZHB1X2VuY29k ZXJfdmlydF9hdG9taWNfY2hlY2soCiAJc3RydWN0IGRwdV9rbXMgKmRwdV9rbXM7CiAJY29uc3Qg c3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGU7CiAJc3RydWN0IGRybV9kaXNwbGF5X21vZGUg KmFkal9tb2RlOwotCXN0cnVjdCBtc21fZGlzcGxheV90b3BvbG9neSB0b3BvbG9neTsKKwlzdHJ1 Y3QgZHB1X2NydGNfdG9wb2xvZ3kgdG9wb2xvZ3k7CisJc3RydWN0IGRwdV9jcnRjX3N0YXRlICpk cHVfY3N0YXRlOworCXN0cnVjdCBkcHVfcHJpdmF0ZV9zdGF0ZSAqZHB1X3ByaXZfc3RhdGU7CisJ c3RydWN0IGRwdV9lbmNvZGVyX2h3X3Jlc291cmNlcyBlbmNfaHdfcmVzOwogCWludCBpID0gMDsK IAlpbnQgcmV0ID0gMDsKIApAQCAtNjE4LDYgKzYyNiw3IEBAIHN0YXRpYyBpbnQgZHB1X2VuY29k ZXJfdmlydF9hdG9taWNfY2hlY2soCiAJZHB1X2ttcyA9IHRvX2RwdV9rbXMocHJpdi0+a21zKTsK IAltb2RlID0gJmNydGNfc3RhdGUtPm1vZGU7CiAJYWRqX21vZGUgPSAmY3J0Y19zdGF0ZS0+YWRq dXN0ZWRfbW9kZTsKKwlkcHVfY3N0YXRlID0gdG9fZHB1X2NydGNfc3RhdGUoY3J0Y19zdGF0ZSk7 CiAJdHJhY2VfZHB1X2VuY19hdG9taWNfY2hlY2soRFJNSUQoZHJtX2VuYykpOwogCiAJLyoKQEAg LTY0NywyOCArNjU2LDM1IEBAIHN0YXRpYyBpbnQgZHB1X2VuY29kZXJfdmlydF9hdG9taWNfY2hl Y2soCiAJCX0KIAl9CiAKLQl0b3BvbG9neSA9IGRwdV9lbmNvZGVyX2dldF90b3BvbG9neShkcHVf ZW5jLCBkcHVfa21zLCBhZGpfbW9kZSk7CisJaWYgKHJldCkKKwkJZ290byBlbmQ7CiAKLQkvKiBS ZXNlcnZlIGR5bmFtaWMgcmVzb3VyY2VzIG5vdy4gSW5kaWNhdGluZyBBdG9taWNUZXN0IHBoYXNl ICovCi0JaWYgKCFyZXQpIHsKLQkJLyoKLQkJICogQXZvaWQgcmVzZXJ2aW5nIHJlc291cmNlcyB3 aGVuIG1vZGUgc2V0IGlzIHBlbmRpbmcuIFRvcG9sb2d5Ci0JCSAqIGluZm8gbWF5IG5vdCBiZSBh dmFpbGFibGUgdG8gY29tcGxldGUgcmVzZXJ2YXRpb24uCi0JCSAqLwotCQlpZiAoZHJtX2F0b21p Y19jcnRjX25lZWRzX21vZGVzZXQoY3J0Y19zdGF0ZSkKLQkJCQkmJiBkcHVfZW5jLT5tb2RlX3Nl dF9jb21wbGV0ZSkgewotCQkJcmV0ID0gZHB1X3JtX3Jlc2VydmUoJmRwdV9rbXMtPnJtLCBkcm1f ZW5jLCBjcnRjX3N0YXRlLAotCQkJCWNvbm5fc3RhdGUsIHRvcG9sb2d5LCB0cnVlKTsKLQkJCWRw dV9lbmMtPm1vZGVfc2V0X2NvbXBsZXRlID0gZmFsc2U7Ci0JCX0KKwkvKiBodyByZXNvdXJjZSBh bGxvY2F0aW9uICovCisJZHB1X2VuY29kZXJfZ2V0X2h3X3Jlc291cmNlcyhkcm1fZW5jLCAmZW5j X2h3X3JlcywgY29ubl9zdGF0ZSk7CisKKwlkcHVfcHJpdl9zdGF0ZSA9IGRwdV9nZXRfcHJpdmF0 ZV9zdGF0ZShjcnRjX3N0YXRlLT5zdGF0ZSk7CisJaWYgKElTX0VSUihkcHVfcHJpdl9zdGF0ZSkp CisJCWdvdG8gZW5kOworCisJdG9wb2xvZ3kgPSBkcHVfZW5jb2Rlcl9nZXRfdG9wb2xvZ3koZHB1 X2VuYywgZHB1X2NzdGF0ZSk7CisJaWYgKCF0b3BvbG9neS5uZWVkc19yZWFsbG9jKQorCQlnb3Rv IGVuZDsKKworCWRwdV9ybV9yZWxlYXNlX2VuY29kZXJfcmVzKCZkcHVfcHJpdl9zdGF0ZS0+cm0s IGRwdV9jc3RhdGUpOworCXJldCA9IGRwdV9ybV9yZXNlcnZlX2VuY29kZXJfcmVzKCZkcHVfcHJp dl9zdGF0ZS0+cm0sCisJCQkJCQkgICAgIGRwdV9jc3RhdGUsICZlbmNfaHdfcmVzKTsKKwlpZiAo cmV0KSB7CisJCURQVV9FUlJPUl9FTkMoZHB1X2VuYywKKwkJCQkiZmFpbGVkIHRvIGFsbG9jYXRl IGh3IHJlc291cmNlc1xuIik7CisJCWdvdG8gZW5kOwogCX0KIAotCWlmICghcmV0KQotCQlkcm1f bW9kZV9zZXRfY3J0Y2luZm8oYWRqX21vZGUsIDApOworCWRybV9tb2RlX3NldF9jcnRjaW5mbyhh ZGpfbW9kZSwgMCk7CiAKIAl0cmFjZV9kcHVfZW5jX2F0b21pY19jaGVja19mbGFncyhEUk1JRChk cm1fZW5jKSwgYWRqX21vZGUtPmZsYWdzLAogCQkJYWRqX21vZGUtPnByaXZhdGVfZmxhZ3MpOwog CitlbmQ6CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTAxNCwxMSArMTAzMCw4IEBAIHN0YXRpYyB2 b2lkIGRwdV9lbmNvZGVyX3ZpcnRfbW9kZV9zZXQoc3RydWN0IGRybV9lbmNvZGVyICpkcm1fZW5j LAogCXN0cnVjdCBkcHVfa21zICpkcHVfa21zOwogCXN0cnVjdCBsaXN0X2hlYWQgKmNvbm5lY3Rv cl9saXN0OwogCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uID0gTlVMTCwgKmNvbm5faXRlcjsK LQlzdHJ1Y3QgZHB1X3JtX2h3X2l0ZXIgcHBfaXRlciwgY3RsX2l0ZXI7Ci0Jc3RydWN0IG1zbV9k aXNwbGF5X3RvcG9sb2d5IHRvcG9sb2d5OwotCXN0cnVjdCBkcHVfaHdfY3RsICpod19jdGxbTUFY X0NIQU5ORUxTX1BFUl9FTkNdOwotCi0JaW50IGkgPSAwLCByZXQ7CisJc3RydWN0IGRwdV9jcnRj X3N0YXRlICpkcHVfY3N0YXRlOworCWludCBpID0gMDsKIAogCWlmICghZHJtX2VuYykgewogCQlE UFVfRVJST1IoImludmFsaWQgZW5jb2RlclxuIik7CkBAIC0xMDQ2LDUyICsxMDU5LDE2IEBAIHN0 YXRpYyB2b2lkIGRwdV9lbmNvZGVyX3ZpcnRfbW9kZV9zZXQoc3RydWN0IGRybV9lbmNvZGVyICpk cm1fZW5jLAogCQlyZXR1cm47CiAJfQogCi0JdG9wb2xvZ3kgPSBkcHVfZW5jb2Rlcl9nZXRfdG9w b2xvZ3koZHB1X2VuYywgZHB1X2ttcywgYWRqX21vZGUpOwotCi0JLyogUmVzZXJ2ZSBkeW5hbWlj IHJlc291cmNlcyBub3cuIEluZGljYXRpbmcgbm9uLUF0b21pY1Rlc3QgcGhhc2UgKi8KLQlyZXQg PSBkcHVfcm1fcmVzZXJ2ZSgmZHB1X2ttcy0+cm0sIGRybV9lbmMsIGRybV9lbmMtPmNydGMtPnN0 YXRlLAotCQkJY29ubi0+c3RhdGUsIHRvcG9sb2d5LCBmYWxzZSk7Ci0JaWYgKHJldCkgewotCQlE UFVfRVJST1JfRU5DKGRwdV9lbmMsCi0JCQkJImZhaWxlZCB0byByZXNlcnZlIGh3IHJlc291cmNl cywgJWRcbiIsIHJldCk7Ci0JCXJldHVybjsKLQl9Ci0KLQlkcHVfcm1faW5pdF9od19pdGVyKCZw cF9pdGVyLCBkcm1fZW5jLT5iYXNlLmlkLCBEUFVfSFdfQkxLX1BJTkdQT05HKTsKLQlmb3IgKGkg PSAwOyBpIDwgTUFYX0NIQU5ORUxTX1BFUl9FTkM7IGkrKykgewotCQlkcHVfZW5jLT5od19wcFtp XSA9IE5VTEw7Ci0JCWlmICghZHB1X3JtX2dldF9odygmZHB1X2ttcy0+cm0sICZwcF9pdGVyKSkK LQkJCWJyZWFrOwotCQlkcHVfZW5jLT5od19wcFtpXSA9IChzdHJ1Y3QgZHB1X2h3X3Bpbmdwb25n ICopIHBwX2l0ZXIuaHc7Ci0JfQotCi0JZHB1X3JtX2luaXRfaHdfaXRlcigmY3RsX2l0ZXIsIGRy bV9lbmMtPmJhc2UuaWQsIERQVV9IV19CTEtfQ1RMKTsKLQlmb3IgKGkgPSAwOyBpIDwgTUFYX0NI QU5ORUxTX1BFUl9FTkM7IGkrKykgewotCQlod19jdGxbaV0gPSBOVUxMOwotCQlpZiAoIWRwdV9y bV9nZXRfaHcoJmRwdV9rbXMtPnJtLCAmY3RsX2l0ZXIpKQotCQkJYnJlYWs7Ci0JCWh3X2N0bFtp XSA9IChzdHJ1Y3QgZHB1X2h3X2N0bCAqKWN0bF9pdGVyLmh3OwotCX0KKwlkcHVfY3N0YXRlID0g dG9fZHB1X2NydGNfc3RhdGUoZHJtX2VuYy0+Y3J0Yy0+c3RhdGUpOwogCiAJZm9yIChpID0gMDsg aSA8IGRwdV9lbmMtPm51bV9waHlzX2VuY3M7IGkrKykgewogCQlzdHJ1Y3QgZHB1X2VuY29kZXJf cGh5cyAqcGh5cyA9IGRwdV9lbmMtPnBoeXNfZW5jc1tpXTsKIAogCQlpZiAocGh5cykgewotCQkJ aWYgKCFkcHVfZW5jLT5od19wcFtpXSkgewotCQkJCURQVV9FUlJPUl9FTkMoZHB1X2VuYywKLQkJ CQkgICAgIm5vIHBwIGJsb2NrIGFzc2lnbmVkIGF0IGlkeDogJWRcbiIsIGkpOwotCQkJCXJldHVy bjsKLQkJCX0KLQkJCXBoeXMtPmh3X3BwID0gZHB1X2VuYy0+aHdfcHBbaV07Ci0KLQkJCWlmICgh aHdfY3RsW2ldKSB7Ci0JCQkJRFBVX0VSUk9SX0VOQyhkcHVfZW5jLAotCQkJCSAgICAibm8gY3Rs IGJsb2NrIGFzc2lnbmVkIGF0IGlkeDogJWRcbiIsIGkpOwotCQkJCXJldHVybjsKLQkJCX0KLQkJ CXBoeXMtPmh3X2N0bCA9IGh3X2N0bFtpXTsKLQorCQkJZHB1X2VuYy0+aHdfcHBbaV0gPSBkcHVf Y3N0YXRlLT5taXhlcnNbaV0uaHdfcHA7CisJCQlwaHlzLT5od19wcCA9IGRwdV9jc3RhdGUtPm1p eGVyc1tpXS5od19wcDsKIAkJCXBoeXMtPmNvbm5lY3RvciA9IGNvbm4tPnN0YXRlLT5jb25uZWN0 b3I7CisJCQlwaHlzLT5od19jdGwgPSBkcHVfY3N0YXRlLT5taXhlcnNbaV0ubG1fY3RsOwogCQkJ aWYgKHBoeXMtPm9wcy5tb2RlX3NldCkKIAkJCQlwaHlzLT5vcHMubW9kZV9zZXQocGh5cywgbW9k ZSwgYWRqX21vZGUpOwogCQl9CkBAIC0xMjM5LDcgKzEyMTYsOSBAQCBzdGF0aWMgdm9pZCBkcHVf ZW5jb2Rlcl92aXJ0X2Rpc2FibGUoc3RydWN0IGRybV9lbmNvZGVyICpkcm1fZW5jKQogCXN0cnVj dCBtc21fZHJtX3ByaXZhdGUgKnByaXY7CiAJc3RydWN0IGRwdV9rbXMgKmRwdV9rbXM7CiAJc3Ry dWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGU7Ci0JaW50IGkgPSAwOworCXN0cnVjdCBkcHVfcHJp dmF0ZV9zdGF0ZSAqZHB1X3ByaXZfc3RhdGU7CisJc3RydWN0IGRwdV9jcnRjX3N0YXRlICpjc3Rh dGU7CisJaW50IHJjLCBpID0gMDsKIAogCWlmICghZHJtX2VuYykgewogCQlEUFVfRVJST1IoImlu dmFsaWQgZW5jb2RlclxuIik7CkBAIC0xMjUzLDYgKzEyMzIsNyBAQCBzdGF0aWMgdm9pZCBkcHVf ZW5jb2Rlcl92aXJ0X2Rpc2FibGUoc3RydWN0IGRybV9lbmNvZGVyICpkcm1fZW5jKQogCX0KIAog CW1vZGUgPSAmZHJtX2VuYy0+Y3J0Yy0+c3RhdGUtPmFkanVzdGVkX21vZGU7CisJY3N0YXRlID0g dG9fZHB1X2NydGNfc3RhdGUoZHJtX2VuYy0+Y3J0Yy0+c3RhdGUpOwogCiAJZHB1X2VuYyA9IHRv X2RwdV9lbmNvZGVyX3ZpcnQoZHJtX2VuYyk7CiAJRFBVX0RFQlVHX0VOQyhkcHVfZW5jLCAiXG4i KTsKQEAgLTEyNjAsNiArMTI0MCw5IEBAIHN0YXRpYyB2b2lkIGRwdV9lbmNvZGVyX3ZpcnRfZGlz YWJsZShzdHJ1Y3QgZHJtX2VuY29kZXIgKmRybV9lbmMpCiAJcHJpdiA9IGRybV9lbmMtPmRldi0+ ZGV2X3ByaXZhdGU7CiAJZHB1X2ttcyA9IHRvX2RwdV9rbXMocHJpdi0+a21zKTsKIAorCS8qIGFj Y2Vzc2luZyBhZnRlciBzd2FwIHN0YXRlLiBwaXZfb2JqLnN0YXRlIGlzIHRoZSBjdXJyZW50IHN0 YXRlICovCisJZHB1X3ByaXZfc3RhdGUgPSB0b19kcHVfcHJpdmF0ZV9zdGF0ZShkcHVfa21zLT5w cml2X29iai5zdGF0ZSk7CisKIAl0cmFjZV9kcHVfZW5jX2Rpc2FibGUoRFJNSUQoZHJtX2VuYykp OwogCiAJLyogd2FpdCBmb3IgaWRsZSAqLwpAQCAtMTI4OSw5ICsxMjcyLDExIEBAIHN0YXRpYyB2 b2lkIGRwdV9lbmNvZGVyX3ZpcnRfZGlzYWJsZShzdHJ1Y3QgZHJtX2VuY29kZXIgKmRybV9lbmMp CiAKIAlkcHVfZW5jLT5jdXJfbWFzdGVyID0gTlVMTDsKIAotCURQVV9ERUJVR19FTkMoZHB1X2Vu YywgImVuY29kZXIgZGlzYWJsZWRcbiIpOworCXJjID0gZHB1X3JtX3JlbGVhc2VfZW5jb2Rlcl9y ZXMoJmRwdV9wcml2X3N0YXRlLT5ybSwgY3N0YXRlKTsKKwlpZiAocmMpCisJCURQVV9FUlJPUigi ZXJyb3IgaW4gcmVsZWFzaW5nIGVuY29kZXIgcmVzb3VyY2VzXG4iKTsKIAotCWRwdV9ybV9yZWxl YXNlKCZkcHVfa21zLT5ybSwgZHJtX2VuYyk7CisJRFBVX0RFQlVHX0VOQyhkcHVfZW5jLCAiZW5j b2RlciBkaXNhYmxlZFxuIik7CiB9CiAKIHN0YXRpYyBlbnVtIGRwdV9pbnRmIGRwdV9lbmNvZGVy X2dldF9pbnRmKHN0cnVjdCBkcHVfbWRzc19jZmcgKmNhdGFsb2csCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlcl9waHlzLmggYi9kcml2ZXJzL2dw dS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlcl9waHlzLmgKaW5kZXggZDA4YjVkNS4uMWJl ZTYwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29k ZXJfcGh5cy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVy X3BoeXMuaApAQCAtMzc0LDcgKzM3NCw3IEBAIHN0YXRpYyBpbmxpbmUgZW51bSBkcHVfM2RfYmxl bmRfbW9kZSBkcHVfZW5jb2Rlcl9oZWxwZXJfZ2V0XzNkX2JsZW5kX21vZGUoCiAJZHB1X2NzdGF0 ZSA9IHRvX2RwdV9jcnRjX3N0YXRlKHBoeXNfZW5jLT5wYXJlbnQtPmNydGMtPnN0YXRlKTsKIAog CWlmIChwaHlzX2VuYy0+c3BsaXRfcm9sZSA9PSBFTkNfUk9MRV9TT0xPICYmCi0JICAgIChkcHVf Y3N0YXRlLT5udW1fbWl4ZXJzID09IDIpKQorCQkoZHB1X2NzdGF0ZS0+bnVtX21peGVycyA9PSAy KSkKIAkJcmV0dXJuIEJMRU5EXzNEX0hfUk9XX0lOVDsKIAogCXJldHVybiBCTEVORF8zRF9OT05F OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXJf cGh5c192aWQuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyX3Bo eXNfdmlkLmMKaW5kZXggODg4NjdjMy4uMGRiMGQyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXJfcGh5c192aWQuYworKysgYi9kcml2ZXJzL2dw dS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlcl9waHlzX3ZpZC5jCkBAIC00NjEsMzUgKzQ2 MSwyNSBAQCBzdGF0aWMgaW50IGRwdV9lbmNvZGVyX3BoeXNfdmlkX2NvbnRyb2xfdmJsYW5rX2ly cSgKIAogc3RhdGljIHZvaWQgZHB1X2VuY29kZXJfcGh5c192aWRfZW5hYmxlKHN0cnVjdCBkcHVf ZW5jb2Rlcl9waHlzICpwaHlzX2VuYykKIHsKLQlzdHJ1Y3QgbXNtX2RybV9wcml2YXRlICpwcml2 OwogCXN0cnVjdCBkcHVfZW5jb2Rlcl9waHlzX3ZpZCAqdmlkX2VuYzsKLQlzdHJ1Y3QgZHB1X3Jt X2h3X2l0ZXIgaXRlcjsKIAlzdHJ1Y3QgZHB1X2h3X2N0bCAqY3RsOwotCXUzMiBmbHVzaF9tYXNr ID0gMDsKKwlzdHJ1Y3QgZHB1X2NydGNfc3RhdGUgKmNzdGF0ZTsKKwl1MzIgaSwgZmx1c2hfbWFz ayA9IDA7CiAKIAlpZiAoIXBoeXNfZW5jIHx8ICFwaHlzX2VuYy0+cGFyZW50IHx8ICFwaHlzX2Vu Yy0+cGFyZW50LT5kZXYgfHwKIAkJCSFwaHlzX2VuYy0+cGFyZW50LT5kZXYtPmRldl9wcml2YXRl KSB7CiAJCURQVV9FUlJPUigiaW52YWxpZCBlbmNvZGVyL2RldmljZVxuIik7CiAJCXJldHVybjsK IAl9Ci0JcHJpdiA9IHBoeXNfZW5jLT5wYXJlbnQtPmRldi0+ZGV2X3ByaXZhdGU7Ci0KIAl2aWRf ZW5jID0gdG9fZHB1X2VuY29kZXJfcGh5c192aWQocGh5c19lbmMpOwogCWN0bCA9IHBoeXNfZW5j LT5od19jdGw7CiAKLQlkcHVfcm1faW5pdF9od19pdGVyKCZpdGVyLCBwaHlzX2VuYy0+cGFyZW50 LT5iYXNlLmlkLCBEUFVfSFdfQkxLX0lOVEYpOwotCXdoaWxlIChkcHVfcm1fZ2V0X2h3KCZwaHlz X2VuYy0+ZHB1X2ttcy0+cm0sICZpdGVyKSkgewotCQlzdHJ1Y3QgZHB1X2h3X2ludGYgKmh3X2lu dGYgPSAoc3RydWN0IGRwdV9od19pbnRmICopaXRlci5odzsKKwljc3RhdGUgPSB0b19kcHVfY3J0 Y19zdGF0ZShwaHlzX2VuYy0+cGFyZW50LT5jcnRjLT5zdGF0ZSk7CisJZm9yIChpID0gMDsgaSA8 IGNzdGF0ZS0+bnVtX2ludGZzOyBpKyspCXsKKwkJc3RydWN0IGRwdV9od19pbnRmICpod19pbnRm ID0gY3N0YXRlLT5od19pbnRmc1tpXTsKIAotCQlpZiAoaHdfaW50Zi0+aWR4ID09IHBoeXNfZW5j LT5pbnRmX2lkeCkgeworCQlpZiAoaHdfaW50ZiAmJiAoaHdfaW50Zi0+aWR4ID09IHBoeXNfZW5j LT5pbnRmX2lkeCkpCiAJCQl2aWRfZW5jLT5od19pbnRmID0gaHdfaW50ZjsKLQkJCWJyZWFrOwot CQl9Ci0JfQotCi0JaWYgKCF2aWRfZW5jLT5od19pbnRmKSB7Ci0JCURQVV9FUlJPUigiaHdfaW50 ZiBub3QgYXNzaWduZWRcbiIpOwotCQlyZXR1cm47CiAJfQogCiAJRFBVX0RFQlVHX1ZJREVOQyh2 aWRfZW5jLCAiXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUx L2RwdV9rbXMuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9rbXMuYwppbmRl eCA1ZTg3YjlkLi41ODkyYjZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3Av ZHB1MS9kcHVfa21zLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2tt cy5jCkBAIC02MzAsNiArNjMwLDcgQEAgc3RhdGljIGxvbmcgZHB1X2ttc19yb3VuZF9waXhjbGso c3RydWN0IG1zbV9rbXMgKmttcywgdW5zaWduZWQgbG9uZyByYXRlLAogc3RhdGljIHZvaWQgX2Rw dV9rbXNfaHdfZGVzdHJveShzdHJ1Y3QgZHB1X2ttcyAqZHB1X2ttcykKIHsKIAlzdHJ1Y3QgZHJt X2RldmljZSAqZGV2OworCXN0cnVjdCBkcHVfcHJpdmF0ZV9zdGF0ZSAqZHB1X3ByaXZfc3RhdGU7 CiAJaW50IGk7CiAKIAlkZXYgPSBkcHVfa21zLT5kZXY7CkBAIC02NTcsOSArNjU4LDEyIEBAIHN0 YXRpYyB2b2lkIF9kcHVfa21zX2h3X2Rlc3Ryb3koc3RydWN0IGRwdV9rbXMgKmRwdV9rbXMpCiAJ CX0KIAl9CiAKLQlpZiAoZHB1X2ttcy0+cm1faW5pdCkKLQkJZHB1X3JtX2Rlc3Ryb3koJmRwdV9r bXMtPnJtKTsKLQlkcHVfa21zLT5ybV9pbml0ID0gZmFsc2U7CisJZHB1X3ByaXZfc3RhdGUgPSB0 b19kcHVfcHJpdmF0ZV9zdGF0ZShkcHVfa21zLT5wcml2X29iai5zdGF0ZSk7CisJaWYgKGRwdV9w cml2X3N0YXRlKSB7CisJCWlmIChkcHVfcHJpdl9zdGF0ZS0+cm1faW5pdCkKKwkJCWRwdV9ybV9k ZXN0cm95KCZkcHVfcHJpdl9zdGF0ZS0+cm0pOworCQlkcHVfcHJpdl9zdGF0ZS0+cm1faW5pdCA9 IGZhbHNlOworCX0KIAogCWlmIChkcHVfa21zLT5jYXRhbG9nKQogCQlkcHVfaHdfY2F0YWxvZ19k ZWluaXQoZHB1X2ttcy0+Y2F0YWxvZyk7CkBAIC05NjUsNiArOTY5LDcgQEAgc3RhdGljIGludCBk cHVfa21zX2h3X2luaXQoc3RydWN0IG1zbV9rbXMgKmttcykKIAlzdHJ1Y3QgZHB1X2ttcyAqZHB1 X2ttczsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2OwogCXN0cnVjdCBtc21fZHJtX3ByaXZhdGUg KnByaXY7CisJc3RydWN0IGRwdV9wcml2YXRlX3N0YXRlICpkcHVfcHJpdl9zdGF0ZTsKIAlpbnQg aSwgcmMgPSAtRUlOVkFMOwogCiAJaWYgKCFrbXMpIHsKQEAgLTEwNjUsMTYgKzEwNzAsMTYgQEAg c3RhdGljIGludCBkcHVfa21zX2h3X2luaXQoc3RydWN0IG1zbV9rbXMgKmttcykKIAkJZ290byBw b3dlcl9lcnJvcjsKIAl9CiAKLQlyYyA9IGRwdV9ybV9pbml0KCZkcHVfa21zLT5ybSwgZHB1X2tt cy0+Y2F0YWxvZywgZHB1X2ttcy0+bW1pbywKLQkJCWRwdV9rbXMtPmRldik7CisJZHB1X3ByaXZf c3RhdGUgPSB0b19kcHVfcHJpdmF0ZV9zdGF0ZShkcHVfa21zLT5wcml2X29iai5zdGF0ZSk7CisJ cmMgPSBkcHVfcm1faW5pdCgmZHB1X3ByaXZfc3RhdGUtPnJtLCBkcHVfa21zLT5jYXRhbG9nLCBk cHVfa21zLT5tbWlvKTsKIAlpZiAocmMpIHsKIAkJRFBVX0VSUk9SKCJybSBpbml0IGZhaWxlZDog JWRcbiIsIHJjKTsKIAkJZ290byBwb3dlcl9lcnJvcjsKIAl9CiAKLQlkcHVfa21zLT5ybV9pbml0 ID0gdHJ1ZTsKKwlkcHVfcHJpdl9zdGF0ZS0+cm1faW5pdCA9IHRydWU7CiAKLQlkcHVfa21zLT5o d19tZHAgPSBkcHVfcm1fZ2V0X21kcCgmZHB1X2ttcy0+cm0pOworCWRwdV9rbXMtPmh3X21kcCA9 IGRwdV9ybV9nZXRfbWRwKCZkcHVfcHJpdl9zdGF0ZS0+cm0pOwogCWlmIChJU19FUlJfT1JfTlVM TChkcHVfa21zLT5od19tZHApKSB7CiAJCXJjID0gUFRSX0VSUihkcHVfa21zLT5od19tZHApOwog CQlpZiAoIWRwdV9rbXMtPmh3X21kcCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20v ZGlzcC9kcHUxL2RwdV9rbXMuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9r bXMuaAppbmRleCAyNTc5Yzk4My4uZDI0NTgyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJt L21zbS9kaXNwL2RwdTEvZHB1X2ttcy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9k cHUxL2RwdV9rbXMuaApAQCAtMjksMTAgKzI5LDEwIEBACiAjaW5jbHVkZSAiZHB1X2h3X2xtLmgi CiAjaW5jbHVkZSAiZHB1X2h3X2ludGVycnVwdHMuaCIKICNpbmNsdWRlICJkcHVfaHdfdG9wLmgi Ci0jaW5jbHVkZSAiZHB1X3JtLmgiCiAjaW5jbHVkZSAiZHB1X3Bvd2VyX2hhbmRsZS5oIgogI2lu Y2x1ZGUgImRwdV9pcnEuaCIKICNpbmNsdWRlICJkcHVfY29yZV9wZXJmLmgiCisjaW5jbHVkZSAi ZHB1X3JtLmgiCiAKICNkZWZpbmUgRFJNSUQoeCkgKCh4KSA/ICh4KS0+YmFzZS5pZCA6IC0xKQog CkBAIC0xMzksOSArMTM5LDYgQEAgc3RydWN0IGRwdV9rbXMgewogCXN0cnVjdCBkcm1fYXRvbWlj X3N0YXRlICpzdXNwZW5kX3N0YXRlOwogCWJvb2wgc3VzcGVuZF9ibG9jazsKIAotCXN0cnVjdCBk cHVfcm0gcm07Ci0JYm9vbCBybV9pbml0OwotCiAJc3RydWN0IGRwdV9od192YmlmICpod192Ymlm W1ZCSUZfTUFYXTsKIAlzdHJ1Y3QgZHB1X2h3X21kcCAqaHdfbWRwOwogCkBAIC0xNTcsNiArMTU0 LDkgQEAgc3RydWN0IGRwdV9rbXMgewogCiBzdHJ1Y3QgZHB1X3ByaXZhdGVfc3RhdGUgewogCXN0 cnVjdCBkcm1fcHJpdmF0ZV9zdGF0ZSBiYXNlOworCisJc3RydWN0IGRwdV9ybSBybTsKKwlib29s IHJtX2luaXQ7CiB9OwogCiBzdHJ1Y3QgdnN5bmNfaW5mbyB7CmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfcm0uYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlz cC9kcHUxL2RwdV9ybS5jCmluZGV4IDM0NDQ0NjkuLmU0ZDhmYWMgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9ybS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9t c20vZGlzcC9kcHUxL2RwdV9ybS5jCkBAIC0yMSwxMjQgKzIxLDU5IEBACiAjaW5jbHVkZSAiZHB1 X2h3X2ludGYuaCIKICNpbmNsdWRlICJkcHVfZW5jb2Rlci5oIgogI2luY2x1ZGUgImRwdV90cmFj ZS5oIgotCi0jZGVmaW5lIFJFU0VSVkVEX0JZX09USEVSKGgsIHIpIFwKLQkoKGgpLT5yc3ZwICYm ICgoaCktPnJzdnAtPmVuY19pZCAhPSAociktPmVuY19pZCkpCi0KLSNkZWZpbmUgUk1fUlFfTE9D SyhyKSAoKHIpLT50b3BfY3RybCAmIEJJVChEUFVfUk1fVE9QQ1RMX1JFU0VSVkVfTE9DSykpCi0j ZGVmaW5lIFJNX1JRX0NMRUFSKHIpICgociktPnRvcF9jdHJsICYgQklUKERQVV9STV9UT1BDVExf UkVTRVJWRV9DTEVBUikpCi0jZGVmaW5lIFJNX1JRX0RTKHIpICgociktPnRvcF9jdHJsICYgQklU KERQVV9STV9UT1BDVExfRFMpKQotI2RlZmluZSBSTV9JU19UT1BPTE9HWV9NQVRDSCh0LCByKSAo KHQpLm51bV9sbSA9PSAocikubnVtX2xtICYmIFwKLQkJCQkodCkubnVtX2NvbXBfZW5jID09IChy KS5udW1fZW5jICYmIFwKLQkJCQkodCkubnVtX2ludGYgPT0gKHIpLm51bV9pbnRmKQotCi1zdHJ1 Y3QgZHB1X3JtX3RvcG9sb2d5X2RlZiB7Ci0JZW51bSBkcHVfcm1fdG9wb2xvZ3lfbmFtZSB0b3Bf bmFtZTsKLQlpbnQgbnVtX2xtOwotCWludCBudW1fY29tcF9lbmM7Ci0JaW50IG51bV9pbnRmOwot CWludCBudW1fY3RsOwotCWludCBuZWVkc19zcGxpdF9kaXNwbGF5OwotfTsKLQotc3RhdGljIGNv bnN0IHN0cnVjdCBkcHVfcm1fdG9wb2xvZ3lfZGVmIGdfdG9wX3RhYmxlW10gPSB7Ci0JeyAgIERQ VV9STV9UT1BPTE9HWV9OT05FLCAgICAgICAgICAgICAgICAgMCwgMCwgMCwgMCwgZmFsc2UgfSwK LQl7ICAgRFBVX1JNX1RPUE9MT0dZX1NJTkdMRVBJUEUsICAgICAgICAgICAxLCAwLCAxLCAxLCBm YWxzZSB9LAotCXsgICBEUFVfUk1fVE9QT0xPR1lfRFVBTFBJUEUsICAgICAgICAgICAgIDIsIDAs IDIsIDIsIHRydWUgIH0sCi0JeyAgIERQVV9STV9UT1BPTE9HWV9EVUFMUElQRV8zRE1FUkdFLCAg ICAgMiwgMCwgMSwgMSwgZmFsc2UgfSwKLX07Ci0KLS8qKgotICogc3RydWN0IGRwdV9ybV9yZXF1 aXJlbWVudHMgLSBSZXNlcnZhdGlvbiByZXF1aXJlbWVudHMgcGFyYW1ldGVyIGJ1bmRsZQotICog QHRvcF9jdHJsOiAgdG9wb2xvZ3kgY29udHJvbCBwcmVmZXJlbmNlIGZyb20ga2VybmVsIGNsaWVu dAotICogQHRvcDogICAgICAgc2VsZWN0ZWQgdG9wb2xvZ3kgZm9yIHRoZSBkaXNwbGF5Ci0gKiBA aHdfcmVzOgkgICBIYXJkd2FyZSByZXNvdXJjZXMgcmVxdWlyZWQgYXMgcmVwb3J0ZWQgYnkgdGhl IGVuY29kZXJzCi0gKi8KLXN0cnVjdCBkcHVfcm1fcmVxdWlyZW1lbnRzIHsKLQl1aW50NjRfdCB0 b3BfY3RybDsKLQljb25zdCBzdHJ1Y3QgZHB1X3JtX3RvcG9sb2d5X2RlZiAqdG9wb2xvZ3k7Ci0J c3RydWN0IGRwdV9lbmNvZGVyX2h3X3Jlc291cmNlcyBod19yZXM7Ci19OwotCi0vKioKLSAqIHN0 cnVjdCBkcHVfcm1fcnN2cCAtIFVzZSBDYXNlIFJlc2VydmF0aW9uIHRhZ2dpbmcgc3RydWN0dXJl Ci0gKglVc2VkIHRvIHRhZyBIVyBibG9ja3MgYXMgcmVzZXJ2ZWQgYnkgYSBDUlRDLT5FbmNvZGVy LT5Db25uZWN0b3IgY2hhaW4KLSAqCUJ5IHVzaW5nIGFzIGEgdGFnLCByYXRoZXIgdGhhbiBsaXN0 cyBvZiBwb2ludGVycyB0byBIVyBibG9ja3MgdXNlZAotICoJd2UgY2FuIGF2b2lkIHNvbWUgbGlz dCBtYW5hZ2VtZW50IHNpbmNlIHdlIGRvbid0IGtub3cgaG93IG1hbnkgYmxvY2tzCi0gKglvZiBl YWNoIHR5cGUgYSBnaXZlbiB1c2UgY2FzZSBtYXkgcmVxdWlyZS4KLSAqIEBsaXN0OglMaXN0IGhl YWQgZm9yIGxpc3Qgb2YgYWxsIHJlc2VydmF0aW9ucwotICogQHNlcToJR2xvYmFsIFJTVlAgc2Vx dWVuY2UgbnVtYmVyIGZvciBkZWJ1Z2dpbmcsIGVzcGVjaWFsbHkgZm9yCi0gKgkJZGlmZmVyZW50 aWF0aW5nIGRpZmZlcmVuY3QgYWxsb2NhdGlvbnMgZm9yIHNhbWUgZW5jb2Rlci4KLSAqIEBlbmNf aWQ6CVJlc2VydmF0aW9ucyBhcmUgdHJhY2tlZCBieSBFbmNvZGVyIERSTSBvYmplY3QgSUQuCi0g KgkJQ1JUQ3MgbWF5IGJlIGNvbm5lY3RlZCB0byBtdWx0aXBsZSBFbmNvZGVycy4KLSAqCQlBbiBl bmNvZGVyIG9yIGNvbm5lY3RvciBpZCBpZGVudGlmaWVzIHRoZSBkaXNwbGF5IHBhdGguCi0gKiBA dG9wb2xvZ3kJRFJNPC0+SFcgdG9wb2xvZ3kgdXNlIGNhc2UKLSAqLwotc3RydWN0IGRwdV9ybV9y c3ZwIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci0JdWludDMyX3Qgc2VxOwotCXVpbnQzMl90 IGVuY19pZDsKLQllbnVtIGRwdV9ybV90b3BvbG9neV9uYW1lIHRvcG9sb2d5OwotfTsKKyNpbmNs dWRlICJkcHVfcm0uaCIKIAogLyoqCiAgKiBzdHJ1Y3QgZHB1X3JtX2h3X2JsayAtIGhhcmR3YXJl IGJsb2NrIHRyYWNraW5nIGxpc3QgbWVtYmVyCi0gKiBAbGlzdDoJTGlzdCBoZWFkIGZvciBsaXN0 IG9mIGFsbCBoYXJkd2FyZSBibG9ja3MgdHJhY2tpbmcgaXRlbXMKLSAqIEByc3ZwOglQb2ludGVy IHRvIHVzZSBjYXNlIHJlc2VydmF0aW9uIGlmIHJlc2VydmVkIGJ5IGEgY2xpZW50Ci0gKiBAcnN2 cF9ueHQ6CVRlbXBvcmFyeSBwb2ludGVyIHVzZWQgZHVyaW5nIHJlc2VydmF0aW9uIHRvIHRoZSBp bmNvbWluZwotICoJCXJlcXVlc3QuIFdpbGwgYmUgc3dhcHBlZCBpbnRvIHJzdnAgaWYgcHJvcG9z YWwgaXMgYWNjZXB0ZWQKICAqIEB0eXBlOglUeXBlIG9mIGhhcmR3YXJlIGJsb2NrIHRoaXMgc3Ry dWN0dXJlIHRyYWNrcworICogQGRybV9pZDoJRFJNIGNvbXBvbmVudCBJRCBhc3NvY2lhdGVkIHdp dGggdGhlIEhXIGJsb2NrCiAgKiBAaWQ6CQlIYXJkd2FyZSBJRCBudW1iZXIsIHdpdGhpbiBpdCdz IG93biBzcGFjZSwgaWUuIExNX1gKLSAqIEBjYXRhbG9nOglQb2ludGVyIHRvIHRoZSBoYXJkd2Fy ZSBjYXRhbG9nIGVudHJ5IGZvciB0aGlzIGJsb2NrCiAgKiBAaHc6CQlQb2ludGVyIHRvIHRoZSBo YXJkd2FyZSByZWdpc3RlciBhY2Nlc3Mgb2JqZWN0IGZvciB0aGlzIGJsb2NrCiAgKi8KIHN0cnVj dCBkcHVfcm1faHdfYmxrIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci0Jc3RydWN0IGRwdV9y bV9yc3ZwICpyc3ZwOwotCXN0cnVjdCBkcHVfcm1fcnN2cCAqcnN2cF9ueHQ7CiAJZW51bSBkcHVf aHdfYmxrX3R5cGUgdHlwZTsKIAl1aW50MzJfdCBpZDsKKwl1aW50MzJfdCBybV9pZDsKIAlzdHJ1 Y3QgZHB1X2h3X2JsayAqaHc7CiB9OwogCi0vKioKLSAqIGRwdV9ybV9kYmdfcnN2cF9zdGFnZSAt IGVudW0gb2Ygc3RlcHMgaW4gbWFraW5nIHJlc2VydmF0aW9uIGZvciBldmVudCBsb2dnaW5nCi0g Ki8KLWVudW0gZHB1X3JtX2RiZ19yc3ZwX3N0YWdlIHsKLQlEUFVfUk1fU1RBR0VfQkVHSU4sCi0J RFBVX1JNX1NUQUdFX0FGVEVSX0NMRUFSLAotCURQVV9STV9TVEFHRV9BRlRFUl9SU1ZQTkVYVCwK LQlEUFVfUk1fU1RBR0VfRklOQUwKK3N0YXRpYyBjaGFyICpibGtfbmFtZVtEUFVfSFdfQkxLX01B WF0gPSB7CisJIkhXX1RPUCIsCisJIkhXX1NTUFAiLAorCSJIV19MTSIsCisJIkhXX0NUTCIsCisJ IkhXX0NETSIsCisJIkhXX1BJTkdQT05HIiwKKwkiSFdfSU5URiIsCisJIkhXX1dCIgogfTsKIAot c3RhdGljIHZvaWQgX2RwdV9ybV9wcmludF9yc3ZwcygKLQkJc3RydWN0IGRwdV9ybSAqcm0sCi0J CWVudW0gZHB1X3JtX2RiZ19yc3ZwX3N0YWdlIHN0YWdlKQordm9pZCBkcHVfcm1fcHJpbnRfc3Rh dGUoc3RydWN0IGRwdV9ybSAqcm0pCiB7Ci0Jc3RydWN0IGRwdV9ybV9yc3ZwICpyc3ZwOwotCXN0 cnVjdCBkcHVfcm1faHdfYmxrICpibGs7Ci0JZW51bSBkcHVfaHdfYmxrX3R5cGUgdHlwZTsKKwlp bnQgaTsKKworCW11dGV4X2xvY2soJnJtLT5ybV9sb2NrKTsKIAotCURQVV9ERUJVRygiJWRcbiIs IHN0YWdlKTsKKwlEUFVfRVJST1IoIkRQVSBSTSBzdGF0ZTpcbiIpOworCWZvciAoaSA9IDA7IGkg PCBEUFVfSFdfQkxLX01BWDsgaSsrKSB7CisJCWludCBibGtfbGVuID0gcm0tPmh3X2Jsa3NfbGVu W2ldOworCQlpbnQgKmRybV9tYXAgPSBybS0+aHdfZHJtX21hcFtpXTsKKwkJaW50IGo7CiAKLQls aXN0X2Zvcl9lYWNoX2VudHJ5KHJzdnAsICZybS0+cnN2cHMsIGxpc3QpIHsKLQkJRFJNX0RFQlVH X0tNUygiJWQgcnN2cFtzJXVlJXVdIHRvcG9sb2d5ICVkXG4iLCBzdGFnZSwgcnN2cC0+c2VxLAot CQkJICAgICAgcnN2cC0+ZW5jX2lkLCByc3ZwLT50b3BvbG9neSk7Ci0JfQorCQlpZiAoIWJsa19s ZW4pCisJCQljb250aW51ZTsKIAotCWZvciAodHlwZSA9IDA7IHR5cGUgPCBEUFVfSFdfQkxLX01B WDsgdHlwZSsrKSB7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnkoYmxrLCAmcm0tPmh3X2Jsa3NbdHlw ZV0sIGxpc3QpIHsKLQkJCWlmICghYmxrLT5yc3ZwICYmICFibGstPnJzdnBfbnh0KQorCQlEUFVf RVJST1IoIiVzXHR0b3RhbDogJWRcbiIsIGJsa19uYW1lW2ldLCBibGtfbGVuKTsKKworCQlmb3Ig KGogPSAwOyBqIDwgYmxrX2xlbjsgaisrKSB7CisJCQlpZiAoIWRybV9tYXBbal0pCiAJCQkJY29u dGludWU7CiAKLQkJCURSTV9ERUJVR19LTVMoIiVkIHJzdnBbcyV1ZSV1LT5zJXVlJXVdICVkICVk XG4iLCBzdGFnZSwKLQkJCQkoYmxrLT5yc3ZwKSA/IGJsay0+cnN2cC0+c2VxIDogMCwKLQkJCQko YmxrLT5yc3ZwKSA/IGJsay0+cnN2cC0+ZW5jX2lkIDogMCwKLQkJCQkoYmxrLT5yc3ZwX254dCkg PyBibGstPnJzdnBfbnh0LT5zZXEgOiAwLAotCQkJCShibGstPnJzdnBfbnh0KSA/IGJsay0+cnN2 cF9ueHQtPmVuY19pZCA6IDAsCi0JCQkJYmxrLT50eXBlLCBibGstPmlkKTsKKwkJCURQVV9FUlJP UigiXHRpZHg6JWQgZHJtX2lkOiAlZFxuIiwgaiwgZHJtX21hcFtqXSk7CiAJCX0KIAl9CisKKwlt dXRleF91bmxvY2soJnJtLT5ybV9sb2NrKTsKIH0KIAogc3RydWN0IGRwdV9od19tZHAgKmRwdV9y bV9nZXRfbWRwKHN0cnVjdCBkcHVfcm0gKnJtKQpAQCAtMTQ4LDE3ICs4MywxOSBAQCBzdHJ1Y3Qg ZHB1X2h3X21kcCAqZHB1X3JtX2dldF9tZHAoc3RydWN0IGRwdV9ybSAqcm0pCiAKIHZvaWQgZHB1 X3JtX2luaXRfaHdfaXRlcigKIAkJc3RydWN0IGRwdV9ybV9od19pdGVyICppdGVyLAotCQl1aW50 MzJfdCBlbmNfaWQsCisJCXVpbnQzMl90IGRybV9pZCwKIAkJZW51bSBkcHVfaHdfYmxrX3R5cGUg dHlwZSkKIHsKIAltZW1zZXQoaXRlciwgMCwgc2l6ZW9mKCppdGVyKSk7Ci0JaXRlci0+ZW5jX2lk ID0gZW5jX2lkOworCWl0ZXItPmRybV9pZCA9IGRybV9pZDsKIAlpdGVyLT50eXBlID0gdHlwZTsK IH0KIAogc3RhdGljIGJvb2wgX2RwdV9ybV9nZXRfaHdfbG9ja2VkKHN0cnVjdCBkcHVfcm0gKnJt LCBzdHJ1Y3QgZHB1X3JtX2h3X2l0ZXIgKmkpCiB7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqYmxrX2xp c3Q7CisJc3RydWN0IGRwdV9ybV9od19ibGsgKipibGtfbGlzdDsKKwl1aW50MzJfdCBibGtfbGVu LCBpbmRleDsKKwl1aW50MzJfdCAqZHJtX21hcDsKIAogCWlmICghcm0gfHwgIWkgfHwgaS0+dHlw ZSA+PSBEUFVfSFdfQkxLX01BWCkgewogCQlEUFVfRVJST1IoImludmFsaWQgcm1cbiIpOwpAQCAt MTY2LDMzICsxMDMsMzAgQEAgc3RhdGljIGJvb2wgX2RwdV9ybV9nZXRfaHdfbG9ja2VkKHN0cnVj dCBkcHVfcm0gKnJtLCBzdHJ1Y3QgZHB1X3JtX2h3X2l0ZXIgKmkpCiAJfQogCiAJaS0+aHcgPSBO VUxMOwotCWJsa19saXN0ID0gJnJtLT5od19ibGtzW2ktPnR5cGVdOwotCi0JaWYgKGktPmJsayAm JiAoJmktPmJsay0+bGlzdCA9PSBibGtfbGlzdCkpIHsKLQkJRFBVX0RFQlVHKCJhdHRlbXB0IHJl c3VtZSBpdGVyYXRpb24gcGFzdCBsYXN0XG4iKTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCWkt PmJsayA9IGxpc3RfcHJlcGFyZV9lbnRyeShpLT5ibGssIGJsa19saXN0LCBsaXN0KTsKKwlibGtf bGlzdCA9IHJtLT5od19ibGtzW2ktPnR5cGVdOworCWJsa19sZW4gPSBybS0+aHdfYmxrc19sZW5b aS0+dHlwZV07CisJZHJtX21hcCA9IHJtLT5od19kcm1fbWFwW2ktPnR5cGVdOwogCi0JbGlzdF9m b3JfZWFjaF9lbnRyeV9jb250aW51ZShpLT5ibGssIGJsa19saXN0LCBsaXN0KSB7Ci0JCXN0cnVj dCBkcHVfcm1fcnN2cCAqcnN2cCA9IGktPmJsay0+cnN2cDsKKwlmb3IgKGluZGV4ID0gaS0+aW5k ZXg7IGluZGV4IDwgYmxrX2xlbjsgaW5kZXgrKykgeworCQlzdHJ1Y3QgZHB1X3JtX2h3X2JsayAq YmxrID0gYmxrX2xpc3RbaW5kZXhdOwogCi0JCWlmIChpLT5ibGstPnR5cGUgIT0gaS0+dHlwZSkg ewotCQkJRFBVX0VSUk9SKCJmb3VuZCBpbmNvcnJlY3QgYmxvY2sgdHlwZSAlZCBvbiAlZCBsaXN0 XG4iLAotCQkJCQlpLT5ibGstPnR5cGUsIGktPnR5cGUpOworCQlpZiAoIWJsaykgeworCQkJRFBV X0VSUk9SKCJpbnZhbGlkIGJsb2NrLiBpbmRleDogJWQgdHlwZTogJWRcbiIsCisJCQkJCWluZGV4 LCBpLT50eXBlKTsKIAkJCXJldHVybiBmYWxzZTsKIAkJfQogCi0JCWlmICgoaS0+ZW5jX2lkID09 IDApIHx8IChyc3ZwICYmIHJzdnAtPmVuY19pZCA9PSBpLT5lbmNfaWQpKSB7Ci0JCQlpLT5odyA9 IGktPmJsay0+aHc7CisJCWlmIChkcm1fbWFwW2luZGV4XSA9PSBpLT5kcm1faWQpIHsKKwkJCWkt Pmh3ID0gYmxrLT5odzsKKwkJCWktPmluZGV4ID0gaW5kZXggKyAxOworCQkJaS0+YmxrID0gYmxr OwogCQkJRFBVX0RFQlVHKCJmb3VuZCB0eXBlICVkIGlkICVkIGZvciBlbmMgJWRcbiIsCi0JCQkJ CWktPnR5cGUsIGktPmJsay0+aWQsIGktPmVuY19pZCk7CisJCQkJCWktPnR5cGUsIGJsay0+aWQs IGktPmRybV9pZCk7CiAJCQlyZXR1cm4gdHJ1ZTsKIAkJfQogCX0KIAotCURQVV9ERUJVRygibm8g bWF0Y2gsIHR5cGUgJWQgZm9yIGVuYyAlZFxuIiwgaS0+dHlwZSwgaS0+ZW5jX2lkKTsKKwlEUFVf REVCVUcoIm5vIG1hdGNoLCB0eXBlICVkIGZvciBlbmMgJWRcbiIsIGktPnR5cGUsIGktPmRybV9p ZCk7CiAKIAlyZXR1cm4gZmFsc2U7CiB9CkBAIC0yMTcsOSArMTUxLDYgQEAgc3RhdGljIHZvaWQg X2RwdV9ybV9od19kZXN0cm95KGVudW0gZHB1X2h3X2Jsa190eXBlIHR5cGUsIHZvaWQgKmh3KQog CWNhc2UgRFBVX0hXX0JMS19DVEw6CiAJCWRwdV9od19jdGxfZGVzdHJveShodyk7CiAJCWJyZWFr OwotCWNhc2UgRFBVX0hXX0JMS19DRE06Ci0JCWRwdV9od19jZG1fZGVzdHJveShodyk7Ci0JCWJy ZWFrOwogCWNhc2UgRFBVX0hXX0JMS19QSU5HUE9ORzoKIAkJZHB1X2h3X3Bpbmdwb25nX2Rlc3Ry b3koaHcpOwogCQlicmVhazsKQEAgLTIzOSwyNiArMTcwLDI1IEBAIHN0YXRpYyB2b2lkIF9kcHVf cm1faHdfZGVzdHJveShlbnVtIGRwdV9od19ibGtfdHlwZSB0eXBlLCB2b2lkICpodykKIAogaW50 IGRwdV9ybV9kZXN0cm95KHN0cnVjdCBkcHVfcm0gKnJtKQogewotCi0Jc3RydWN0IGRwdV9ybV9y c3ZwICpyc3ZwX2N1ciwgKnJzdnBfbnh0OwotCXN0cnVjdCBkcHVfcm1faHdfYmxrICpod19jdXIs ICpod19ueHQ7CiAJZW51bSBkcHVfaHdfYmxrX3R5cGUgdHlwZTsKKwl1aW50MzJfdCBpOwogCiAJ aWYgKCFybSkgewogCQlEUFVfRVJST1IoImludmFsaWQgcm1cbiIpOwogCQlyZXR1cm4gLUVJTlZB TDsKIAl9CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnN2cF9jdXIsIHJzdnBfbnh0LCAm cm0tPnJzdnBzLCBsaXN0KSB7Ci0JCWxpc3RfZGVsKCZyc3ZwX2N1ci0+bGlzdCk7Ci0JCWtmcmVl KHJzdnBfY3VyKTsKLQl9CisJZm9yICh0eXBlID0gMDsgdHlwZSA8IERQVV9IV19CTEtfTUFYOyB0 eXBlKyspIHsKKwkJdWludDMyX3QgaHdfYmxrX2xlbiA9IHJtLT5od19ibGtzX2xlblt0eXBlXTsK IAorCQlmb3IgKGkgPSAwOyBpIDwgaHdfYmxrX2xlbjsgaSsrKSB7CisJCQlzdHJ1Y3QgZHB1X3Jt X2h3X2JsayAqaHdfY3VyID0gcm0tPmh3X2Jsa3NbdHlwZV1baV07CiAKLQlmb3IgKHR5cGUgPSAw OyB0eXBlIDwgRFBVX0hXX0JMS19NQVg7IHR5cGUrKykgewotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5 X3NhZmUoaHdfY3VyLCBod19ueHQsICZybS0+aHdfYmxrc1t0eXBlXSwKLQkJCQlsaXN0KSB7Ci0J CQlsaXN0X2RlbCgmaHdfY3VyLT5saXN0KTsKKwkJCWlmICghaHdfY3VyKSB7CisJCQkJRFBVX0VS Uk9SKCJJbnZhbGlkIGh3IGJsb2NrLiB0eXBlOiVkIGk6ICVkXG4iLAorCQkJCQl0eXBlLCBpKTsK KwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KIAkJCV9kcHVfcm1faHdfZGVzdHJveShod19jdXIt PnR5cGUsIGh3X2N1ci0+aHcpOwogCQkJa2ZyZWUoaHdfY3VyKTsKIAkJfQpAQCAtMjkzLDkgKzIy Myw2IEBAIHN0YXRpYyBpbnQgX2RwdV9ybV9od19ibGtfY3JlYXRlKAogCWNhc2UgRFBVX0hXX0JM S19DVEw6CiAJCWh3ID0gZHB1X2h3X2N0bF9pbml0KGlkLCBtbWlvLCBjYXQpOwogCQlicmVhazsK LQljYXNlIERQVV9IV19CTEtfQ0RNOgotCQlodyA9IGRwdV9od19jZG1faW5pdChpZCwgbW1pbywg Y2F0LCBod19tZHApOwotCQlicmVhazsKIAljYXNlIERQVV9IV19CTEtfUElOR1BPTkc6CiAJCWh3 ID0gZHB1X2h3X3Bpbmdwb25nX2luaXQoaWQsIG1taW8sIGNhdCk7CiAJCWJyZWFrOwpAQCAtMzI3 LDM1ICsyNTQsMjQgQEAgc3RhdGljIGludCBfZHB1X3JtX2h3X2Jsa19jcmVhdGUoCiAJYmxrLT50 eXBlID0gdHlwZTsKIAlibGstPmlkID0gaWQ7CiAJYmxrLT5odyA9IGh3OwotCWxpc3RfYWRkX3Rh aWwoJmJsay0+bGlzdCwgJnJtLT5od19ibGtzW3R5cGVdKTsKKwlibGstPnJtX2lkID0gcm0tPmh3 X2Jsa3NfbGVuW3R5cGVdOworCisJcm0tPmh3X2Jsa3NbdHlwZV1bcm0tPmh3X2Jsa3NfbGVuW3R5 cGVdKytdID0gYmxrOwogCiAJcmV0dXJuIDA7CiB9CiAKIGludCBkcHVfcm1faW5pdChzdHJ1Y3Qg ZHB1X3JtICpybSwKIAkJc3RydWN0IGRwdV9tZHNzX2NmZyAqY2F0LAotCQl2b2lkIF9faW9tZW0g Km1taW8sCi0JCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCisJCXZvaWQgX19pb21lbSAqbW1pbykK IHsKIAlpbnQgcmMsIGk7Ci0JZW51bSBkcHVfaHdfYmxrX3R5cGUgdHlwZTsKLQotCWlmICghcm0g fHwgIWNhdCB8fCAhbW1pbyB8fCAhZGV2KSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBrbXNcbiIp OwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9CiAKIAkvKiBDbGVhciwgc2V0dXAgbGlzdHMgKi8KIAlt ZW1zZXQocm0sIDAsIHNpemVvZigqcm0pKTsKIAogCW11dGV4X2luaXQoJnJtLT5ybV9sb2NrKTsK IAotCUlOSVRfTElTVF9IRUFEKCZybS0+cnN2cHMpOwotCWZvciAodHlwZSA9IDA7IHR5cGUgPCBE UFVfSFdfQkxLX01BWDsgdHlwZSsrKQotCQlJTklUX0xJU1RfSEVBRCgmcm0tPmh3X2Jsa3NbdHlw ZV0pOwotCi0Jcm0tPmRldiA9IGRldjsKLQogCS8qIFNvbWUgb2YgdGhlIHN1Yi1ibG9ja3MgcmVx dWlyZSBhbiBtZHB0b3AgdG8gYmUgY3JlYXRlZCAqLwogCXJtLT5od19tZHAgPSBkcHVfaHdfbWRw dG9wX2luaXQoTURQX1RPUCwgbW1pbywgY2F0KTsKIAlpZiAoSVNfRVJSX09SX05VTEwocm0tPmh3 X21kcCkpIHsKQEAgLTM4MCwxOCArMjk2LDYgQEAgaW50IGRwdV9ybV9pbml0KHN0cnVjdCBkcHVf cm0gKnJtLAogCQkJRFBVX0VSUk9SKCJmYWlsZWQ6IGxtIGh3IG5vdCBhdmFpbGFibGVcbiIpOwog CQkJZ290byBmYWlsOwogCQl9Ci0KLQkJaWYgKCFybS0+bG1fbWF4X3dpZHRoKSB7Ci0JCQlybS0+ bG1fbWF4X3dpZHRoID0gbG0tPnNibGstPm1heHdpZHRoOwotCQl9IGVsc2UgaWYgKHJtLT5sbV9t YXhfd2lkdGggIT0gbG0tPnNibGstPm1heHdpZHRoKSB7Ci0JCQkvKgotCQkJICogRG9uJ3QgZXhw ZWN0IHRvIGhhdmUgaHcgd2hlcmUgbG0gbWF4IHdpZHRocyBkaWZmZXIuCi0JCQkgKiBJZiBmb3Vu ZCwgdGFrZSB0aGUgbWluLgotCQkJICovCi0JCQlEUFVfRVJST1IoInVuc3VwcG9ydGVkOiBsbSBt YXh3aWR0aCBkaWZmZXJzXG4iKTsKLQkJCWlmIChybS0+bG1fbWF4X3dpZHRoID4gbG0tPnNibGst Pm1heHdpZHRoKQotCQkJCXJtLT5sbV9tYXhfd2lkdGggPSBsbS0+c2Jsay0+bWF4d2lkdGg7Ci0J CX0KIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgY2F0LT5waW5ncG9uZ19jb3VudDsgaSsrKSB7CkBA IC00MjYsMTUgKzMzMCw2IEBAIGludCBkcHVfcm1faW5pdChzdHJ1Y3QgZHB1X3JtICpybSwKIAkJ fQogCX0KIAotCWZvciAoaSA9IDA7IGkgPCBjYXQtPmNkbV9jb3VudDsgaSsrKSB7Ci0JCXJjID0g X2RwdV9ybV9od19ibGtfY3JlYXRlKHJtLCBjYXQsIG1taW8sIERQVV9IV19CTEtfQ0RNLAotCQkJ CWNhdC0+Y2RtW2ldLmlkLCAmY2F0LT5jZG1baV0pOwotCQlpZiAocmMpIHsKLQkJCURQVV9FUlJP UigiZmFpbGVkOiBjZG0gaHcgbm90IGF2YWlsYWJsZVxuIik7Ci0JCQlnb3RvIGZhaWw7Ci0JCX0K LQl9Ci0KIAlyZXR1cm4gMDsKIAogZmFpbDoKQEAgLTQ0OCw4ICszNDMsNyBAQCBpbnQgZHB1X3Jt X2luaXQoc3RydWN0IGRwdV9ybSAqcm0sCiAgKglwcm9wb3NlZCB1c2UgY2FzZSByZXF1aXJlbWVu dHMsIGluY2wuIGhhcmR3aXJlZCBkZXBlbmRlbnQgYmxvY2tzIGxpa2UKICAqCXBpbmdwb25nCiAg KiBAcm06IGRwdSByZXNvdXJjZSBtYW5hZ2VyIGhhbmRsZQotICogQHJzdnA6IHJlc2VydmF0aW9u IGN1cnJlbnRseSBiZWluZyBjcmVhdGVkCi0gKiBAcmVxczogcHJvcG9zZWQgdXNlIGNhc2UgcmVx dWlyZW1lbnRzCisgKiBAc3RhdGU6IGRwdSBjcnRjIHN0YXRlIGhhbmRsZQogICogQGxtOiBwcm9w b3NlZCBsYXllciBtaXhlciwgZnVuY3Rpb24gY2hlY2tzIGlmIGxtLCBhbmQgYWxsIG90aGVyIGhh cmR3aXJlZAogICogICAgICBibG9ja3MgY29ubmVjdGVkIHRvIHRoZSBsbSAocHApIGlzIGF2YWls YWJsZSBhbmQgYXBwcm9wcmlhdGUKICAqIEBwcDogb3V0cHV0IHBhcmFtZXRlciwgcGluZ3Bvbmcg YmxvY2sgYXR0YWNoZWQgdG8gdGhlIGxheWVyIG1peGVyLgpAQCAtNDYwLDggKzM1NCw3IEBAIGlu dCBkcHVfcm1faW5pdChzdHJ1Y3QgZHB1X3JtICpybSwKICAqLwogc3RhdGljIGJvb2wgX2RwdV9y bV9jaGVja19sbV9hbmRfZ2V0X2Nvbm5lY3RlZF9ibGtzKAogCQlzdHJ1Y3QgZHB1X3JtICpybSwK LQkJc3RydWN0IGRwdV9ybV9yc3ZwICpyc3ZwLAotCQlzdHJ1Y3QgZHB1X3JtX3JlcXVpcmVtZW50 cyAqcmVxcywKKwkJc3RydWN0IGRwdV9jcnRjX3N0YXRlICpzdGF0ZSwKIAkJc3RydWN0IGRwdV9y bV9od19ibGsgKmxtLAogCQlzdHJ1Y3QgZHB1X3JtX2h3X2JsayAqKnBwLAogCQlzdHJ1Y3QgZHB1 X3JtX2h3X2JsayAqcHJpbWFyeV9sbSkKQEAgLTQ4NiwxMiArMzc5LDYgQEAgc3RhdGljIGJvb2wg X2RwdV9ybV9jaGVja19sbV9hbmRfZ2V0X2Nvbm5lY3RlZF9ibGtzKAogCQl9CiAJfQogCi0JLyog QWxyZWFkeSByZXNlcnZlZD8gKi8KLQlpZiAoUkVTRVJWRURfQllfT1RIRVIobG0sIHJzdnApKSB7 Ci0JCURQVV9ERUJVRygibG0gJWQgYWxyZWFkeSByZXNlcnZlZFxuIiwgbG1fY2ZnLT5pZCk7Ci0J CXJldHVybiBmYWxzZTsKLQl9Ci0KIAlkcHVfcm1faW5pdF9od19pdGVyKCZpdGVyLCAwLCBEUFVf SFdfQkxLX1BJTkdQT05HKTsKIAl3aGlsZSAoX2RwdV9ybV9nZXRfaHdfbG9ja2VkKHJtLCAmaXRl cikpIHsKIAkJaWYgKGl0ZXIuYmxrLT5pZCA9PSBsbV9jZmctPnBpbmdwb25nKSB7CkBAIC01MDUs MzUgKzM5MiwyNCBAQCBzdGF0aWMgYm9vbCBfZHB1X3JtX2NoZWNrX2xtX2FuZF9nZXRfY29ubmVj dGVkX2Jsa3MoCiAJCXJldHVybiBmYWxzZTsKIAl9CiAKLQlpZiAoUkVTRVJWRURfQllfT1RIRVIo KnBwLCByc3ZwKSkgewotCQlEUFVfREVCVUcoImxtICVkIHBwICVkIGFscmVhZHkgcmVzZXJ2ZWRc biIsIGxtLT5pZCwKLQkJCQkoKnBwKS0+aWQpOwotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCiAJcmV0 dXJuIHRydWU7CiB9CiAKIHN0YXRpYyBpbnQgX2RwdV9ybV9yZXNlcnZlX2xtcygKLQkJc3RydWN0 IGRwdV9ybSAqcm0sCi0JCXN0cnVjdCBkcHVfcm1fcnN2cCAqcnN2cCwKLQkJc3RydWN0IGRwdV9y bV9yZXF1aXJlbWVudHMgKnJlcXMpCi0KKwlzdHJ1Y3QgZHB1X3JtICpybSwgc3RydWN0IGRwdV9j cnRjX3N0YXRlICpzdGF0ZSwKKwlzdHJ1Y3QgZHB1X2NydGNfdG9wb2xvZ3kgKnRvcG9sb2d5KQog ewogCXN0cnVjdCBkcHVfcm1faHdfYmxrICpsbVtNQVhfQkxPQ0tTXTsKIAlzdHJ1Y3QgZHB1X3Jt X2h3X2JsayAqcHBbTUFYX0JMT0NLU107CiAJc3RydWN0IGRwdV9ybV9od19pdGVyIGl0ZXJfaSwg aXRlcl9qOwogCWludCBsbV9jb3VudCA9IDA7Ci0JaW50IGksIHJjID0gMDsKLQotCWlmICghcmVx cy0+dG9wb2xvZ3ktPm51bV9sbSkgewotCQlEUFVfRVJST1IoImludmFsaWQgbnVtYmVyIG9mIGxt OiAlZFxuIiwgcmVxcy0+dG9wb2xvZ3ktPm51bV9sbSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0K KwlpbnQgaSwgZHJtX2lkID0gZ2V0X2NydGNfaWQoc3RhdGUpOworCWludCAqbG1fZHJtX21hcCA9 IHJtLT5od19kcm1fbWFwW0RQVV9IV19CTEtfTE1dOworCWludCAqcHBfZHJtX21hcCA9IHJtLT5o d19kcm1fbWFwW0RQVV9IV19CTEtfUElOR1BPTkddOwogCiAJLyogRmluZCBhIHByaW1hcnkgbWl4 ZXIgKi8KIAlkcHVfcm1faW5pdF9od19pdGVyKCZpdGVyX2ksIDAsIERQVV9IV19CTEtfTE0pOwot CXdoaWxlIChsbV9jb3VudCAhPSByZXFzLT50b3BvbG9neS0+bnVtX2xtICYmCisJd2hpbGUgKGxt X2NvdW50ICE9IHRvcG9sb2d5LT5udW1fbG1zICYmCiAJCQlfZHB1X3JtX2dldF9od19sb2NrZWQo cm0sICZpdGVyX2kpKSB7CiAJCW1lbXNldCgmbG0sIDAsIHNpemVvZihsbSkpOwogCQltZW1zZXQo JnBwLCAwLCBzaXplb2YocHApKTsKQEAgLTU0Miw4ICs0MTgsNyBAQCBzdGF0aWMgaW50IF9kcHVf cm1fcmVzZXJ2ZV9sbXMoCiAJCWxtW2xtX2NvdW50XSA9IGl0ZXJfaS5ibGs7CiAKIAkJaWYgKCFf ZHB1X3JtX2NoZWNrX2xtX2FuZF9nZXRfY29ubmVjdGVkX2Jsa3MoCi0JCQkJcm0sIHJzdnAsIHJl cXMsIGxtW2xtX2NvdW50XSwKLQkJCQkmcHBbbG1fY291bnRdLCBOVUxMKSkKKwkJCQlybSwgc3Rh dGUsIGxtW2xtX2NvdW50XSwgJnBwW2xtX2NvdW50XSwgTlVMTCkpCiAJCQljb250aW51ZTsKIAog CQkrK2xtX2NvdW50OwpAQCAtNTUxLDE0ICs0MjYsMTQgQEAgc3RhdGljIGludCBfZHB1X3JtX3Jl c2VydmVfbG1zKAogCQkvKiBWYWxpZCBwcmltYXJ5IG1peGVyIGZvdW5kLCBmaW5kIG1hdGNoaW5n IHBlZXJzICovCiAJCWRwdV9ybV9pbml0X2h3X2l0ZXIoJml0ZXJfaiwgMCwgRFBVX0hXX0JMS19M TSk7CiAKLQkJd2hpbGUgKGxtX2NvdW50ICE9IHJlcXMtPnRvcG9sb2d5LT5udW1fbG0gJiYKKwkJ d2hpbGUgKGxtX2NvdW50ICE9IHRvcG9sb2d5LT5udW1fbG1zICYmCiAJCQkJX2RwdV9ybV9nZXRf aHdfbG9ja2VkKHJtLCAmaXRlcl9qKSkgewogCQkJaWYgKGl0ZXJfaS5ibGsgPT0gaXRlcl9qLmJs aykKIAkJCQljb250aW51ZTsKIAogCQkJaWYgKCFfZHB1X3JtX2NoZWNrX2xtX2FuZF9nZXRfY29u bmVjdGVkX2Jsa3MoCi0JCQkJCXJtLCByc3ZwLCByZXFzLCBpdGVyX2ouYmxrLAotCQkJCQkmcHBb bG1fY291bnRdLCBpdGVyX2kuYmxrKSkKKwkJCQlybSwgc3RhdGUsIGl0ZXJfai5ibGssCisJCQkJ JnBwW2xtX2NvdW50XSwgaXRlcl9pLmJsaykpCiAJCQkJY29udGludWU7CiAKIAkJCWxtW2xtX2Nv dW50XSA9IGl0ZXJfai5ibGs7CkBAIC01NjYsNyArNDQxLDcgQEAgc3RhdGljIGludCBfZHB1X3Jt X3Jlc2VydmVfbG1zKAogCQl9CiAJfQogCi0JaWYgKGxtX2NvdW50ICE9IHJlcXMtPnRvcG9sb2d5 LT5udW1fbG0pIHsKKwlpZiAobG1fY291bnQgIT0gdG9wb2xvZ3ktPm51bV9sbXMpIHsKIAkJRFBV X0RFQlVHKCJ1bmFibGUgdG8gZmluZCBhcHByb3ByaWF0ZSBtaXhlcnNcbiIpOwogCQlyZXR1cm4g LUVOQVZBSUw7CiAJfQpAQCAtNTc1LDQ5MiArNDUwLDI2NCBAQCBzdGF0aWMgaW50IF9kcHVfcm1f cmVzZXJ2ZV9sbXMoCiAJCWlmICghbG1baV0pCiAJCQlicmVhazsKIAotCQlsbVtpXS0+cnN2cF9u eHQgPSByc3ZwOwotCQlwcFtpXS0+cnN2cF9ueHQgPSByc3ZwOworCQlsbV9kcm1fbWFwW2xtW2ld LT5ybV9pZF0gPSBkcm1faWQ7CisJCXBwX2RybV9tYXBbcHBbaV0tPnJtX2lkXSA9IGRybV9pZDsK IAotCQl0cmFjZV9kcHVfcm1fcmVzZXJ2ZV9sbXMobG1baV0tPmlkLCBsbVtpXS0+dHlwZSwgcnN2 cC0+ZW5jX2lkLAotCQkJCQkgcHBbaV0tPmlkKTsKKwkJc3RhdGUtPm1peGVyc1tpXS5od19sbSA9 IChzdHJ1Y3QgZHB1X2h3X21peGVyICopbG1baV0tPmh3OworCQlzdGF0ZS0+bWl4ZXJzW2ldLmh3 X3BwID0gKHN0cnVjdCBkcHVfaHdfcGluZ3BvbmcgKilwcFtpXS0+aHc7CiAJfQogCi0JcmV0dXJu IHJjOworCXN0YXRlLT5udW1fbWl4ZXJzID0gdG9wb2xvZ3ktPm51bV9sbXM7CisKKwlyZXR1cm4g MDsKIH0KIAogc3RhdGljIGludCBfZHB1X3JtX3Jlc2VydmVfY3RscygKLQkJc3RydWN0IGRwdV9y bSAqcm0sCi0JCXN0cnVjdCBkcHVfcm1fcnN2cCAqcnN2cCwKLQkJY29uc3Qgc3RydWN0IGRwdV9y bV90b3BvbG9neV9kZWYgKnRvcCkKKwkJc3RydWN0IGRwdV9ybSAqcm0sIHN0cnVjdCBkcHVfY3J0 Y19zdGF0ZSAqc3RhdGUsCisJCXN0cnVjdCBkcHVfY3J0Y190b3BvbG9neSAqdG9wb2xvZ3kpCiB7 CiAJc3RydWN0IGRwdV9ybV9od19ibGsgKmN0bHNbTUFYX0JMT0NLU107CiAJc3RydWN0IGRwdV9y bV9od19pdGVyIGl0ZXI7Ci0JaW50IGkgPSAwOworCWJvb2wgbmVlZHNfc3BsaXRfZGlzcGxheTsK KwlpbnQgaSA9IDAsIGRybV9pZCA9IGdldF9jcnRjX2lkKHN0YXRlKTsKKwlpbnQgKmN0bF9kcm1f bWFwID0gcm0tPmh3X2RybV9tYXBbRFBVX0hXX0JMS19DVExdOwogCiAJbWVtc2V0KCZjdGxzLCAw LCBzaXplb2YoY3RscykpOwogCisJbmVlZHNfc3BsaXRfZGlzcGxheSA9ICh0b3BvbG9neS0+bnVt X2N0bHMgPT0gMik7CisKIAlkcHVfcm1faW5pdF9od19pdGVyKCZpdGVyLCAwLCBEUFVfSFdfQkxL X0NUTCk7CiAJd2hpbGUgKF9kcHVfcm1fZ2V0X2h3X2xvY2tlZChybSwgJml0ZXIpKSB7CiAJCWNv bnN0IHN0cnVjdCBkcHVfaHdfY3RsICpjdGwgPSB0b19kcHVfaHdfY3RsKGl0ZXIuYmxrLT5odyk7 CiAJCXVuc2lnbmVkIGxvbmcgZmVhdHVyZXMgPSBjdGwtPmNhcHMtPmZlYXR1cmVzOwogCQlib29s IGhhc19zcGxpdF9kaXNwbGF5OwogCi0JCWlmIChSRVNFUlZFRF9CWV9PVEhFUihpdGVyLmJsaywg cnN2cCkpCi0JCQljb250aW51ZTsKLQogCQloYXNfc3BsaXRfZGlzcGxheSA9IEJJVChEUFVfQ1RM X1NQTElUX0RJU1BMQVkpICYgZmVhdHVyZXM7CiAKIAkJRFBVX0RFQlVHKCJjdGwgJWQgY2FwcyAw eCVsWFxuIiwgaXRlci5ibGstPmlkLCBmZWF0dXJlcyk7CiAKLQkJaWYgKHRvcC0+bmVlZHNfc3Bs aXRfZGlzcGxheSAhPSBoYXNfc3BsaXRfZGlzcGxheSkKKwkJaWYgKG5lZWRzX3NwbGl0X2Rpc3Bs YXkgIT0gaGFzX3NwbGl0X2Rpc3BsYXkpCiAJCQljb250aW51ZTsKIAogCQljdGxzW2ldID0gaXRl ci5ibGs7CiAJCURQVV9ERUJVRygiY3RsICVkIG1hdGNoXG4iLCBpdGVyLmJsay0+aWQpOwogCi0J CWlmICgrK2kgPT0gdG9wLT5udW1fY3RsKQorCQlpZiAoKytpID09IHRvcG9sb2d5LT5udW1fY3Rs cykKIAkJCWJyZWFrOwogCX0KIAotCWlmIChpICE9IHRvcC0+bnVtX2N0bCkKLQkJcmV0dXJuIC1F TkFWQUlMOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY3RscykgJiYgaSA8IHRvcC0+ bnVtX2N0bDsgaSsrKSB7Ci0JCWN0bHNbaV0tPnJzdnBfbnh0ID0gcnN2cDsKLQkJdHJhY2VfZHB1 X3JtX3Jlc2VydmVfY3RscyhjdGxzW2ldLT5pZCwgY3Rsc1tpXS0+dHlwZSwKLQkJCQkJICByc3Zw LT5lbmNfaWQpOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IF9kcHVfcm1fcmVz ZXJ2ZV9jZG0oCi0JCXN0cnVjdCBkcHVfcm0gKnJtLAotCQlzdHJ1Y3QgZHB1X3JtX3JzdnAgKnJz dnAsCi0JCXVpbnQzMl90IGlkLAotCQllbnVtIGRwdV9od19ibGtfdHlwZSB0eXBlKQotewotCXN0 cnVjdCBkcHVfcm1faHdfaXRlciBpdGVyOwotCi0JRFJNX0RFQlVHX0tNUygidHlwZSAlZCBpZCAl ZFxuIiwgdHlwZSwgaWQpOwotCi0JZHB1X3JtX2luaXRfaHdfaXRlcigmaXRlciwgMCwgRFBVX0hX X0JMS19DRE0pOwotCXdoaWxlIChfZHB1X3JtX2dldF9od19sb2NrZWQocm0sICZpdGVyKSkgewot CQljb25zdCBzdHJ1Y3QgZHB1X2h3X2NkbSAqY2RtID0gdG9fZHB1X2h3X2NkbShpdGVyLmJsay0+ aHcpOwotCQljb25zdCBzdHJ1Y3QgZHB1X2NkbV9jZmcgKmNhcHMgPSBjZG0tPmNhcHM7Ci0JCWJv b2wgbWF0Y2ggPSBmYWxzZTsKLQotCQlpZiAoUkVTRVJWRURfQllfT1RIRVIoaXRlci5ibGssIHJz dnApKQotCQkJY29udGludWU7Ci0KLQkJaWYgKHR5cGUgPT0gRFBVX0hXX0JMS19JTlRGICYmIGlk ICE9IElOVEZfTUFYKQotCQkJbWF0Y2ggPSB0ZXN0X2JpdChpZCwgJmNhcHMtPmludGZfY29ubmVj dCk7Ci0KLQkJRFJNX0RFQlVHX0tNUygiaXRlcjogdHlwZTolZCBpZDolZCBlbmM6JWQgY2RtOiVs dSBtYXRjaDolZFxuIiwKLQkJCSAgICAgIGl0ZXIuYmxrLT50eXBlLCBpdGVyLmJsay0+aWQsIHJz dnAtPmVuY19pZCwKLQkJCSAgICAgIGNhcHMtPmludGZfY29ubmVjdCwgbWF0Y2gpOworCWlmIChp ICE9IHRvcG9sb2d5LT5udW1fY3RscykKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLQkJaWYgKCFtYXRj aCkKLQkJCWNvbnRpbnVlOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGN0bHMpICYmIGkg PCB0b3BvbG9neS0+bnVtX2N0bHM7IGkrKykgeworCQljdGxfZHJtX21hcFtjdGxzW2ldLT5ybV9p ZF0gPSBkcm1faWQ7CisJCXN0YXRlLT5od19jdGxzW2ldID0gKHN0cnVjdCBkcHVfaHdfY3RsICop Y3Rsc1tpXS0+aHc7CiAKLQkJdHJhY2VfZHB1X3JtX3Jlc2VydmVfY2RtKGl0ZXIuYmxrLT5pZCwg aXRlci5ibGstPnR5cGUsCi0JCQkJCSByc3ZwLT5lbmNfaWQpOwotCQlpdGVyLmJsay0+cnN2cF9u eHQgPSByc3ZwOwotCQlicmVhazsKKwkJdHJhY2VfZHB1X3JtX3Jlc2VydmVfY3RscyhjdGxzW2ld LT50eXBlLAorCQkJCWdldF9jcnRjX2lkKHN0YXRlKSwgY3Rsc1tpXS0+aWQpOwogCX0KIAotCWlm ICghaXRlci5odykgewotCQlEUFVfRVJST1IoImNvdWxkbid0IHJlc2VydmUgY2RtIGZvciB0eXBl ICVkIGlkICVkXG4iLCB0eXBlLCBpZCk7Ci0JCXJldHVybiAtRU5BVkFJTDsKLQl9CisJc3RhdGUt Pm51bV9jdGxzID0gdG9wb2xvZ3ktPm51bV9jdGxzOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRp YyBpbnQgX2RwdV9ybV9yZXNlcnZlX2ludGYoCitzdGF0aWMgc3RydWN0IGRwdV9ybV9od19ibGsg Kl9kcHVfcm1fZ2V0X2h3X2lkKAogCQlzdHJ1Y3QgZHB1X3JtICpybSwKLQkJc3RydWN0IGRwdV9y bV9yc3ZwICpyc3ZwLAogCQl1aW50MzJfdCBpZCwKLQkJZW51bSBkcHVfaHdfYmxrX3R5cGUgdHlw ZSwKLQkJYm9vbCBuZWVkc19jZG0pCisJCWVudW0gZHB1X2h3X2Jsa190eXBlIHR5cGUpCiB7CiAJ c3RydWN0IGRwdV9ybV9od19pdGVyIGl0ZXI7Ci0JaW50IHJldCA9IDA7CiAKIAkvKiBGaW5kIHRo ZSBibG9jayBlbnRyeSBpbiB0aGUgcm0sIGFuZCBub3RlIHRoZSByZXNlcnZhdGlvbiAqLwogCWRw dV9ybV9pbml0X2h3X2l0ZXIoJml0ZXIsIDAsIHR5cGUpOwogCXdoaWxlIChfZHB1X3JtX2dldF9o d19sb2NrZWQocm0sICZpdGVyKSkgewogCQlpZiAoaXRlci5ibGstPmlkICE9IGlkKQogCQkJY29u dGludWU7Ci0KLQkJaWYgKFJFU0VSVkVEX0JZX09USEVSKGl0ZXIuYmxrLCByc3ZwKSkgewotCQkJ RFBVX0VSUk9SKCJ0eXBlICVkIGlkICVkIGFscmVhZHkgcmVzZXJ2ZWRcbiIsIHR5cGUsIGlkKTsK LQkJCXJldHVybiAtRU5BVkFJTDsKLQkJfQotCi0JCWl0ZXIuYmxrLT5yc3ZwX254dCA9IHJzdnA7 Ci0JCXRyYWNlX2RwdV9ybV9yZXNlcnZlX2ludGYoaXRlci5ibGstPmlkLCBpdGVyLmJsay0+dHlw ZSwKLQkJCQkJICByc3ZwLT5lbmNfaWQpOwogCQlicmVhazsKIAl9CiAKLQkvKiBTaG91bGRuJ3Qg aGFwcGVuIHNpbmNlIGludGZzIGFyZSBmaXhlZCBhdCBwcm9iZSAqLwogCWlmICghaXRlci5odykg ewogCQlEUFVfRVJST1IoImNvdWxkbid0IGZpbmQgdHlwZSAlZCBpZCAlZFxuIiwgdHlwZSwgaWQp OwotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0dXJuIE5VTEw7CiAJfQogCi0JaWYgKG5lZWRzX2Nk bSkKLQkJcmV0ID0gX2RwdV9ybV9yZXNlcnZlX2NkbShybSwgcnN2cCwgaWQsIHR5cGUpOwotCi0J cmV0dXJuIHJldDsKKwlyZXR1cm4gaXRlci5ibGs7CiB9CiAKIHN0YXRpYyBpbnQgX2RwdV9ybV9y ZXNlcnZlX2ludGZfcmVsYXRlZF9odygKIAkJc3RydWN0IGRwdV9ybSAqcm0sCi0JCXN0cnVjdCBk cHVfcm1fcnN2cCAqcnN2cCwKKwkJc3RydWN0IGRwdV9jcnRjX3N0YXRlICpzdGF0ZSwKIAkJc3Ry dWN0IGRwdV9lbmNvZGVyX2h3X3Jlc291cmNlcyAqaHdfcmVzKQogewotCWludCBpLCByZXQgPSAw OwotCXUzMiBpZDsKKwlzdHJ1Y3QgZHB1X3JtX2h3X2JsayAqaW50ZltJTlRGX01BWF0gPSB7fTsK Kwl1MzIgaSwgaWQsIGludGZfY291bnQgPSAwOworCXUzMiBkcm1faWQgPSBnZXRfY3J0Y19pZChz dGF0ZSk7CisJaW50ICppbnRmX2RybV9tYXAgPSBybS0+aHdfZHJtX21hcFtEUFVfSFdfQkxLX0lO VEZdOwogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaHdfcmVzLT5pbnRmcyk7IGkrKykg ewogCQlpZiAoaHdfcmVzLT5pbnRmc1tpXSA9PSBJTlRGX01PREVfTk9ORSkKIAkJCWNvbnRpbnVl OwotCQlpZCA9IGkgKyBJTlRGXzA7Ci0JCXJldCA9IF9kcHVfcm1fcmVzZXJ2ZV9pbnRmKHJtLCBy c3ZwLCBpZCwKLQkJCQlEUFVfSFdfQkxLX0lOVEYsIGh3X3Jlcy0+bmVlZHNfY2RtKTsKLQkJaWYg KHJldCkKLQkJCXJldHVybiByZXQ7Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KIAotc3RhdGljIGlu dCBfZHB1X3JtX21ha2VfbmV4dF9yc3ZwKAotCQlzdHJ1Y3QgZHB1X3JtICpybSwKLQkJc3RydWN0 IGRybV9lbmNvZGVyICplbmMsCi0JCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwK LQkJc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5fc3RhdGUsCi0JCXN0cnVjdCBkcHVf cm1fcnN2cCAqcnN2cCwKLQkJc3RydWN0IGRwdV9ybV9yZXF1aXJlbWVudHMgKnJlcXMpCi17Ci0J aW50IHJldDsKLQlzdHJ1Y3QgZHB1X3JtX3RvcG9sb2d5X2RlZiB0b3BvbG9neTsKLQotCS8qIENy ZWF0ZSByZXNlcnZhdGlvbiBpbmZvLCB0YWcgcmVzZXJ2ZWQgYmxvY2tzIHdpdGggaXQgYXMgd2Ug Z28gKi8KLQlyc3ZwLT5zZXEgPSArK3JtLT5yc3ZwX25leHRfc2VxOwotCXJzdnAtPmVuY19pZCA9 IGVuYy0+YmFzZS5pZDsKLQlyc3ZwLT50b3BvbG9neSA9IHJlcXMtPnRvcG9sb2d5LT50b3BfbmFt ZTsKLQlsaXN0X2FkZF90YWlsKCZyc3ZwLT5saXN0LCAmcm0tPnJzdnBzKTsKLQotCXJldCA9IF9k cHVfcm1fcmVzZXJ2ZV9sbXMocm0sIHJzdnAsIHJlcXMpOwotCWlmIChyZXQpIHsKLQkJRFBVX0VS Uk9SKCJ1bmFibGUgdG8gZmluZCBhcHByb3ByaWF0ZSBtaXhlcnNcbiIpOwotCQlyZXR1cm4gcmV0 OwotCX0KKwkJaWQgPSBpICsgSU5URl8wOworCQlpbnRmW2ldID0gX2RwdV9ybV9nZXRfaHdfaWQo cm0sIGlkLCBEUFVfSFdfQkxLX0lOVEYpOworCQlpZiAoIWludGZbaV0pCisJCQlyZXR1cm4gLUVJ TlZBTDsKIAotCS8qCi0JICogRG8gYXNzaWdubWVudCBwcmVmZXJyaW5nIHRvIGdpdmUgYXdheSBs b3ctcmVzb3VyY2UgQ1RMcyBmaXJzdDoKLQkgKiAtIENoZWNrIG1peGVycyB3aXRob3V0IFNwbGl0 IERpc3BsYXkKLQkgKiAtIE9ubHkgdGhlbiBhbGxvdyB0byBncmFiIGZyb20gQ1RMcyB3aXRoIHNw bGl0IGRpc3BsYXkgY2FwYWJpbGl0eQotCSAqLwotCV9kcHVfcm1fcmVzZXJ2ZV9jdGxzKHJtLCBy c3ZwLCByZXFzLT50b3BvbG9neSk7Ci0JaWYgKHJldCAmJiAhcmVxcy0+dG9wb2xvZ3ktPm5lZWRz X3NwbGl0X2Rpc3BsYXkpIHsKLQkJbWVtY3B5KCZ0b3BvbG9neSwgcmVxcy0+dG9wb2xvZ3ksIHNp emVvZih0b3BvbG9neSkpOwotCQl0b3BvbG9neS5uZWVkc19zcGxpdF9kaXNwbGF5ID0gdHJ1ZTsK LQkJX2RwdV9ybV9yZXNlcnZlX2N0bHMocm0sIHJzdnAsICZ0b3BvbG9neSk7CisJCS8qIFJlc2Vy dmUgb3RoZXIgSU5URiByZWxhdGVkIGJsb2NrcyBpZiBuZWVkZWQgKi8KIAl9Ci0JaWYgKHJldCkg ewotCQlEUFVfRVJST1IoInVuYWJsZSB0byBmaW5kIGFwcHJvcHJpYXRlIENUTFxuIik7Ci0JCXJl dHVybiByZXQ7Ci0JfQotCi0JLyogQXNzaWduIElOVEZzIGFuZCBibGtzIHdob3NlIHVzYWdlIGlz IHRpZWQgdG8gdGhlbTogQ1RMICYgQ0RNICovCi0JcmV0ID0gX2RwdV9ybV9yZXNlcnZlX2ludGZf cmVsYXRlZF9odyhybSwgcnN2cCwgJnJlcXMtPmh3X3Jlcyk7Ci0JaWYgKHJldCkKLQkJcmV0dXJu IHJldDsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgX2RwdV9ybV9wb3B1bGF0ZV9y ZXF1aXJlbWVudHMoCi0JCXN0cnVjdCBkcHVfcm0gKnJtLAotCQlzdHJ1Y3QgZHJtX2VuY29kZXIg KmVuYywKLQkJc3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAotCQlzdHJ1Y3QgZHJt X2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubl9zdGF0ZSwKLQkJc3RydWN0IGRwdV9ybV9yZXF1aXJlbWVu dHMgKnJlcXMsCi0JCXN0cnVjdCBtc21fZGlzcGxheV90b3BvbG9neSByZXFfdG9wb2xvZ3kpCi17 Ci0JaW50IGk7CiAKLQltZW1zZXQocmVxcywgMCwgc2l6ZW9mKCpyZXFzKSk7Ci0KLQlkcHVfZW5j b2Rlcl9nZXRfaHdfcmVzb3VyY2VzKGVuYywgJnJlcXMtPmh3X3JlcywgY29ubl9zdGF0ZSk7Ci0K LQlmb3IgKGkgPSAwOyBpIDwgRFBVX1JNX1RPUE9MT0dZX01BWDsgaSsrKSB7Ci0JCWlmIChSTV9J U19UT1BPTE9HWV9NQVRDSChnX3RvcF90YWJsZVtpXSwKLQkJCQkJcmVxX3RvcG9sb2d5KSkgewot CQkJcmVxcy0+dG9wb2xvZ3kgPSAmZ190b3BfdGFibGVbaV07Ci0JCQlicmVhazsKLQkJfQotCX0K Kwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShod19yZXMtPmludGZzKTsgaSsrKSB7CisJCWlm ICghaW50ZltpXSkKKwkJCWNvbnRpbnVlOwogCi0JaWYgKCFyZXFzLT50b3BvbG9neSkgewotCQlE UFVfRVJST1IoImludmFsaWQgdG9wb2xvZ3kgZm9yIHRoZSBkaXNwbGF5XG4iKTsKLQkJcmV0dXJu IC1FSU5WQUw7CisJCWludGZfZHJtX21hcFtpbnRmW2ldLT5ybV9pZF0gPSBkcm1faWQ7CisJCXN0 YXRlLT5od19pbnRmc1tpbnRmX2NvdW50KytdID0KKwkJCShzdHJ1Y3QgZHB1X2h3X2ludGYgKilp bnRmW2ldLT5odzsKIAl9CiAKLQkvKioKLQkgKiBTZXQgdGhlIHJlcXVpcmVtZW50IGJhc2VkIG9u IGNhcHMgaWYgbm90IHNldCBmcm9tIHVzZXIgc3BhY2UKLQkgKiBUaGlzIHdpbGwgZW5zdXJlIHRv IHNlbGVjdCBMTSB0aWVkIHdpdGggRFMgYmxvY2tzCi0JICogQ3VycmVudGx5LCBEUyBibG9ja3Mg YXJlIHRpZWQgd2l0aCBMTSAwIGFuZCBMTSAxIChwcmltYXJ5IGRpc3BsYXkpCi0JICovCi0JaWYg KCFSTV9SUV9EUyhyZXFzKSAmJiBybS0+aHdfbWRwLT5jYXBzLT5oYXNfZGVzdF9zY2FsZXIgJiYK LQkJY29ubl9zdGF0ZS0+Y29ubmVjdG9yLT5jb25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05O RUNUT1JfRFNJKQotCQlyZXFzLT50b3BfY3RybCB8PSBCSVQoRFBVX1JNX1RPUENUTF9EUyk7Ci0K LQlEUFVfREVCVUcoInRvcF9jdHJsOiAweCVsbFhcbiIsIHJlcXMtPnRvcF9jdHJsKTsKLQlEUFVf REVCVUcoIm51bV9sbTogJWQgbnVtX2N0bDogJWQgdG9wb2xvZ3k6ICVkIHNwbGl0X2Rpc3BsYXk6 ICVkXG4iLAotCQkJcmVxcy0+dG9wb2xvZ3ktPm51bV9sbSwgcmVxcy0+dG9wb2xvZ3ktPm51bV9j dGwsCi0JCQlyZXFzLT50b3BvbG9neS0+dG9wX25hbWUsCi0JCQlyZXFzLT50b3BvbG9neS0+bmVl ZHNfc3BsaXRfZGlzcGxheSk7CisJc3RhdGUtPm51bV9pbnRmcyA9IGludGZfY291bnQ7CiAKIAly ZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkcHVfcm1fcnN2cCAqX2RwdV9ybV9nZXRfcnN2 cCgKK3N0YXRpYyBpbnQgX2RwdV9ybV9yZWxlYXNlX2h3X2JsaygKIAkJc3RydWN0IGRwdV9ybSAq cm0sCi0JCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jKQorCQlzdHJ1Y3QgZHB1X2NydGNfc3RhdGUg KnN0YXRlLAorCQllbnVtIGRwdV9od19ibGtfdHlwZSB0eXBlKQogewotCXN0cnVjdCBkcHVfcm1f cnN2cCAqaTsKKwlzdHJ1Y3QgZHB1X3JtX2h3X2l0ZXIgaXRlcjsKKwlpbnQgZHJtX2lkID0gZ2V0 X2NydGNfaWQoc3RhdGUpOworCWludCBudW1fcmVsZWFzZWQgPSAwOworCWludCAqZHJtX21hcCA9 IHJtLT5od19kcm1fbWFwW3R5cGVdOwogCi0JaWYgKCFybSB8fCAhZW5jKSB7Ci0JCURQVV9FUlJP UigiaW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gTlVMTDsKKwlkcHVfcm1faW5pdF9od19p dGVyKCZpdGVyLCBkcm1faWQsIHR5cGUpOworCXdoaWxlIChfZHB1X3JtX2dldF9od19sb2NrZWQo cm0sICZpdGVyKSkgeworCQlkcm1fbWFwW2l0ZXIuYmxrLT5ybV9pZF0gPSAwOworCQludW1fcmVs ZWFzZWQrKzsKIAl9CiAKLQlpZiAobGlzdF9lbXB0eSgmcm0tPnJzdnBzKSkKLQkJcmV0dXJuIE5V TEw7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGksICZybS0+cnN2cHMsIGxpc3QpCi0JCWlmIChp LT5lbmNfaWQgPT0gZW5jLT5iYXNlLmlkKQotCQkJcmV0dXJuIGk7Ci0KLQlyZXR1cm4gTlVMTDsK KwlyZXR1cm4gbnVtX3JlbGVhc2VkOwogfQogCi1zdGF0aWMgc3RydWN0IGRybV9jb25uZWN0b3Ig Kl9kcHVfcm1fZ2V0X2Nvbm5lY3RvcigKLQkJc3RydWN0IGRybV9lbmNvZGVyICplbmMpCitzdGF0 aWMgaW50IF9kcHVfcm1fcmVsZWFzZV9sbXMoc3RydWN0IGRwdV9ybSAqcm0sIHN0cnVjdCBkcHVf Y3J0Y19zdGF0ZSAqc3RhdGUpCiB7Ci0Jc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm4gPSBOVUxM OwotCXN0cnVjdCBsaXN0X2hlYWQgKmNvbm5lY3Rvcl9saXN0ID0KLQkJCSZlbmMtPmRldi0+bW9k ZV9jb25maWcuY29ubmVjdG9yX2xpc3Q7CisJaW50IG51bV9sbSwgbnVtX3BwOwogCi0JbGlzdF9m b3JfZWFjaF9lbnRyeShjb25uLCBjb25uZWN0b3JfbGlzdCwgaGVhZCkKLQkJaWYgKGNvbm4tPmVu Y29kZXIgPT0gZW5jKQotCQkJcmV0dXJuIGNvbm47CisJLyogUmVsZWFzZSBMTSBibG9ja3MgKi8K KwludW1fbG0gPSBfZHB1X3JtX3JlbGVhc2VfaHdfYmxrKHJtLCBzdGF0ZSwgRFBVX0hXX0JMS19M TSk7CisKKwkvKiBSbGVhc2UgcGluZyBwb25nIGJsb2NrcyAqLworCW51bV9wcCA9IF9kcHVfcm1f cmVsZWFzZV9od19ibGsocm0sIHN0YXRlLCBEUFVfSFdfQkxLX1BJTkdQT05HKTsKKwlpZiAobnVt X3BwICE9IG51bV9sbSkgeworCQlEUFVfRVJST1IoImxtIGNoYWluIGNvdW50IG1pc21hdGNoIGxt OiAlZCBwcDolZFxuIiwKKwkJCQludW1fbG0sIG51bV9wcCk7CisJCXJldHVybiAwOworCX0KIAot CXJldHVybiBOVUxMOworCXJldHVybiBudW1fbG07CiB9CiAKLS8qKgotICogX2RwdV9ybV9yZWxl YXNlX3JzdnAgLSByZWxlYXNlIHJlc291cmNlcyBhbmQgcmVsZWFzZSBhIHJlc2VydmF0aW9uCi0g KiBAcm06CUtNUyBoYW5kbGUKLSAqIEByc3ZwOglSU1ZQIHBvaW50ZXIgdG8gcmVsZWFzZSBhbmQg cmVsZWFzZSByZXNvdXJjZXMgZm9yCi0gKi8KLXN0YXRpYyB2b2lkIF9kcHVfcm1fcmVsZWFzZV9y c3ZwKAotCQlzdHJ1Y3QgZHB1X3JtICpybSwKLQkJc3RydWN0IGRwdV9ybV9yc3ZwICpyc3ZwLAot CQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubikKK2ludCBkcHVfcm1fcmVzZXJ2ZV9jcnRjX3Jl cyhzdHJ1Y3QgZHB1X3JtICpybSwgc3RydWN0IGRwdV9jcnRjX3N0YXRlICpzdGF0ZSwKKwlzdHJ1 Y3QgZHB1X2NydGNfdG9wb2xvZ3kgKnRvcG9sb2d5KQogewotCXN0cnVjdCBkcHVfcm1fcnN2cCAq cnN2cF9jLCAqcnN2cF9uOwotCXN0cnVjdCBkcHVfcm1faHdfYmxrICpibGs7Ci0JZW51bSBkcHVf aHdfYmxrX3R5cGUgdHlwZTsKLQotCWlmICghcnN2cCkKLQkJcmV0dXJuOworCWludCByYyA9IDA7 CiAKLQlEUFVfREVCVUcoInJlbCByc3ZwICVkIGVuYyAlZFxuIiwgcnN2cC0+c2VxLCByc3ZwLT5l bmNfaWQpOworCW11dGV4X2xvY2soJnJtLT5ybV9sb2NrKTsKIAotCWxpc3RfZm9yX2VhY2hfZW50 cnlfc2FmZShyc3ZwX2MsIHJzdnBfbiwgJnJtLT5yc3ZwcywgbGlzdCkgewotCQlpZiAocnN2cCA9 PSByc3ZwX2MpIHsKLQkJCWxpc3RfZGVsKCZyc3ZwX2MtPmxpc3QpOwotCQkJYnJlYWs7Ci0JCX0K KwlyYyA9IF9kcHVfcm1fcmVzZXJ2ZV9sbXMocm0sIHN0YXRlLCB0b3BvbG9neSk7CisJaWYgKHJj KSAgeworCQlEUFVfRVJST1IoInVuYWJsZSB0byBhbGxvY2F0ZSBsbSBmb3IgY3J0YzogJWRcbiIs CisJCQkJZ2V0X2NydGNfaWQoc3RhdGUpKTsKKwkJZ290byByZXNlcnZlX2RvbmU7CiAJfQogCi0J Zm9yICh0eXBlID0gMDsgdHlwZSA8IERQVV9IV19CTEtfTUFYOyB0eXBlKyspIHsKLQkJbGlzdF9m b3JfZWFjaF9lbnRyeShibGssICZybS0+aHdfYmxrc1t0eXBlXSwgbGlzdCkgewotCQkJaWYgKGJs ay0+cnN2cCA9PSByc3ZwKSB7Ci0JCQkJYmxrLT5yc3ZwID0gTlVMTDsKLQkJCQlEUFVfREVCVUco InJlbCByc3ZwICVkIGVuYyAlZCAlZCAlZFxuIiwKLQkJCQkJCXJzdnAtPnNlcSwgcnN2cC0+ZW5j X2lkLAotCQkJCQkJYmxrLT50eXBlLCBibGstPmlkKTsKLQkJCX0KLQkJCWlmIChibGstPnJzdnBf bnh0ID09IHJzdnApIHsKLQkJCQlibGstPnJzdnBfbnh0ID0gTlVMTDsKLQkJCQlEUFVfREVCVUco InJlbCByc3ZwX254dCAlZCBlbmMgJWQgJWQgJWRcbiIsCi0JCQkJCQlyc3ZwLT5zZXEsIHJzdnAt PmVuY19pZCwKLQkJCQkJCWJsay0+dHlwZSwgYmxrLT5pZCk7Ci0JCQl9Ci0JCX0KKwlyYyA9IF9k cHVfcm1fcmVzZXJ2ZV9jdGxzKHJtLCBzdGF0ZSwgdG9wb2xvZ3kpOworCWlmIChyYykgIHsKKwkJ RFBVX0VSUk9SKCJ1bmFibGUgdG8gYWxsb2NhdGUgY3RsIGZvciBjcnRjOiAlZFxuIiwKKwkJCQln ZXRfY3J0Y19pZChzdGF0ZSkpOworCQlnb3RvIHJlc2VydmVfZG9uZTsKIAl9CiAKLQlrZnJlZShy c3ZwKTsKK3Jlc2VydmVfZG9uZToKKwltdXRleF91bmxvY2soJnJtLT5ybV9sb2NrKTsKKworCXJl dHVybiAwOwogfQogCi12b2lkIGRwdV9ybV9yZWxlYXNlKHN0cnVjdCBkcHVfcm0gKnJtLCBzdHJ1 Y3QgZHJtX2VuY29kZXIgKmVuYykKLXsKLQlzdHJ1Y3QgZHB1X3JtX3JzdnAgKnJzdnA7Ci0Jc3Ry dWN0IGRybV9jb25uZWN0b3IgKmNvbm47CiAKLQlpZiAoIXJtIHx8ICFlbmMpIHsKLQkJRFBVX0VS Uk9SKCJpbnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJldHVybjsKLQl9CitpbnQgZHB1X3JtX3JlbGVh c2VfY3J0Y19yZXMoc3RydWN0IGRwdV9ybSAqcm0sIHN0cnVjdCBkcHVfY3J0Y19zdGF0ZSAqc3Rh dGUpCit7CisJaW50IHJjID0gMCwgbnVtX3JlbGVhc2VkOwogCiAJbXV0ZXhfbG9jaygmcm0tPnJt X2xvY2spOwogCi0JcnN2cCA9IF9kcHVfcm1fZ2V0X3JzdnAocm0sIGVuYyk7Ci0JaWYgKCFyc3Zw KSB7Ci0JCURQVV9FUlJPUigiZmFpbGVkIHRvIGZpbmQgcnN2cCBmb3IgZW5jICVkXG4iLCBlbmMt PmJhc2UuaWQpOwotCQlnb3RvIGVuZDsKKwludW1fcmVsZWFzZWQgPSBfZHB1X3JtX3JlbGVhc2Vf bG1zKHJtLCBzdGF0ZSk7CisJaWYgKG51bV9yZWxlYXNlZCAhPSBzdGF0ZS0+bnVtX21peGVycykg eworCQlEUFVfRVJST1IoCisJCSJsbSByZWxlYXNlIGNvdW50IGRvZXNuJ3QgbWF0Y2ggZm9yIGNy dGM6ICVkICglZCAhPSAlZClcbiIsCisJCQlnZXRfY3J0Y19pZChzdGF0ZSksIG51bV9yZWxlYXNl ZCwgc3RhdGUtPm51bV9taXhlcnMpOworCQlyYyA9IC1FSU5WQUw7CisJCWdvdG8gcmVsZWFzZV9k b25lOwogCX0KIAotCWNvbm4gPSBfZHB1X3JtX2dldF9jb25uZWN0b3IoZW5jKTsKLQlpZiAoIWNv bm4pIHsKLQkJRFBVX0VSUk9SKCJmYWlsZWQgdG8gZ2V0IGNvbm5lY3RvciBmb3IgZW5jICVkXG4i LCBlbmMtPmJhc2UuaWQpOwotCQlnb3RvIGVuZDsKKwludW1fcmVsZWFzZWQgPSBfZHB1X3JtX3Jl bGVhc2VfaHdfYmxrKHJtLCBzdGF0ZSwgRFBVX0hXX0JMS19DVEwpOworCWlmIChudW1fcmVsZWFz ZWQgIT0gc3RhdGUtPm51bV9jdGxzKSB7CisJCURQVV9FUlJPUigKKwkJImxtIHJlbGVhc2UgY291 bnQgZG9lc24ndCBtYXRjaCBmb3IgY3J0YzogJWQgKCVkICE9ICVkKVxuIiwKKwkJCWdldF9jcnRj X2lkKHN0YXRlKSwgbnVtX3JlbGVhc2VkLCBzdGF0ZS0+bnVtX2N0bHMpOworCQlyYyA9IC1FSU5W QUw7CisJCWdvdG8gcmVsZWFzZV9kb25lOwogCX0KLQotCV9kcHVfcm1fcmVsZWFzZV9yc3ZwKHJt LCByc3ZwLCBjb25uKTsKLWVuZDoKKyByZWxlYXNlX2RvbmU6CiAJbXV0ZXhfdW5sb2NrKCZybS0+ cm1fbG9jayk7Ci19Ci0KLXN0YXRpYyBpbnQgX2RwdV9ybV9jb21taXRfcnN2cCgKLQkJc3RydWN0 IGRwdV9ybSAqcm0sCi0JCXN0cnVjdCBkcHVfcm1fcnN2cCAqcnN2cCwKLQkJc3RydWN0IGRybV9j b25uZWN0b3Jfc3RhdGUgKmNvbm5fc3RhdGUpCi17Ci0Jc3RydWN0IGRwdV9ybV9od19ibGsgKmJs azsKLQllbnVtIGRwdV9od19ibGtfdHlwZSB0eXBlOwotCWludCByZXQgPSAwOwotCi0JLyogU3dh cCBuZXh0IHJzdnAgdG8gYmUgdGhlIGFjdGl2ZSAqLwotCWZvciAodHlwZSA9IDA7IHR5cGUgPCBE UFVfSFdfQkxLX01BWDsgdHlwZSsrKSB7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnkoYmxrLCAmcm0t Pmh3X2Jsa3NbdHlwZV0sIGxpc3QpIHsKLQkJCWlmIChibGstPnJzdnBfbnh0KSB7Ci0JCQkJYmxr LT5yc3ZwID0gYmxrLT5yc3ZwX254dDsKLQkJCQlibGstPnJzdnBfbnh0ID0gTlVMTDsKLQkJCX0K LQkJfQotCX0KIAotCWlmICghcmV0KQotCQlEUk1fREVCVUdfS01TKCJyc3J2IGVuYyAlZCB0b3Bv bG9neSAlZFxuIiwgcnN2cC0+ZW5jX2lkLAotCQkJICAgICAgcnN2cC0+dG9wb2xvZ3kpOworCXN0 YXRlLT5udW1fbWl4ZXJzID0gMDsKKwlzdGF0ZS0+bnVtX2N0bHMgPSAwOworCW1lbXNldCgmc3Rh dGUtPm1peGVycywgMCwgc2l6ZW9mKHN0YXRlLT5taXhlcnMpKTsKKwltZW1zZXQoJnN0YXRlLT5o d19jdGxzLCAwLCBzaXplb2Yoc3RhdGUtPmh3X2N0bHMpKTsKIAotCXJldHVybiByZXQ7CisJcmV0 dXJuIHJjOwogfQogCi1pbnQgZHB1X3JtX3Jlc2VydmUoCi0JCXN0cnVjdCBkcHVfcm0gKnJtLAot CQlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuYywKLQkJc3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRj X3N0YXRlLAotCQlzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubl9zdGF0ZSwKLQkJc3Ry dWN0IG1zbV9kaXNwbGF5X3RvcG9sb2d5IHRvcG9sb2d5LAotCQlib29sIHRlc3Rfb25seSkKK2lu dCBkcHVfcm1fcmVzZXJ2ZV9lbmNvZGVyX3JlcygKKwlzdHJ1Y3QgZHB1X3JtICpybSwgc3RydWN0 IGRwdV9jcnRjX3N0YXRlICpzdGF0ZSwKKwlzdHJ1Y3QgZHB1X2VuY29kZXJfaHdfcmVzb3VyY2Vz ICpod19yZXMpCiB7Ci0Jc3RydWN0IGRwdV9ybV9yc3ZwICpyc3ZwX2N1ciwgKnJzdnBfbnh0Owot CXN0cnVjdCBkcHVfcm1fcmVxdWlyZW1lbnRzIHJlcXM7Ci0JaW50IHJldDsKLQotCWlmICghcm0g fHwgIWVuYyB8fCAhY3J0Y19zdGF0ZSB8fCAhY29ubl9zdGF0ZSkgewotCQlEUFVfRVJST1IoImlu dmFsaWQgYXJndW1lbnRzXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyogQ2hlY2sg aWYgdGhpcyBpcyBqdXN0IGEgcGFnZS1mbGlwICovCi0JaWYgKCFkcm1fYXRvbWljX2NydGNfbmVl ZHNfbW9kZXNldChjcnRjX3N0YXRlKSkKLQkJcmV0dXJuIDA7Ci0KLQlEUk1fREVCVUdfS01TKCJy ZXNlcnZpbmcgaHcgZm9yIGNvbm4gJWQgZW5jICVkIGNydGMgJWQgdGVzdF9vbmx5ICVkXG4iLAot CQkgICAgICBjb25uX3N0YXRlLT5jb25uZWN0b3ItPmJhc2UuaWQsIGVuYy0+YmFzZS5pZCwKLQkJ ICAgICAgY3J0Y19zdGF0ZS0+Y3J0Yy0+YmFzZS5pZCwgdGVzdF9vbmx5KTsKKwlpbnQgcmMgPSAw OwogCiAJbXV0ZXhfbG9jaygmcm0tPnJtX2xvY2spOwogCi0JX2RwdV9ybV9wcmludF9yc3Zwcyhy bSwgRFBVX1JNX1NUQUdFX0JFR0lOKTsKKwlyYyA9IF9kcHVfcm1fcmVzZXJ2ZV9pbnRmX3JlbGF0 ZWRfaHcocm0sIHN0YXRlLCBod19yZXMpOworCWlmIChyYykKKwkJRFBVX0VSUk9SKCJ1bmFibGUg dG8gYWxsb2NhdGUgaW50ZiBmb3IgY3J0YzogJWRcbiIsCisJCQkJZ2V0X2NydGNfaWQoc3RhdGUp KTsKIAotCXJldCA9IF9kcHVfcm1fcG9wdWxhdGVfcmVxdWlyZW1lbnRzKHJtLCBlbmMsIGNydGNf c3RhdGUsCi0JCQljb25uX3N0YXRlLCAmcmVxcywgdG9wb2xvZ3kpOwotCWlmIChyZXQpIHsKLQkJ RFBVX0VSUk9SKCJmYWlsZWQgdG8gcG9wdWxhdGUgaHcgcmVxdWlyZW1lbnRzXG4iKTsKLQkJZ290 byBlbmQ7Ci0JfQorCW11dGV4X3VubG9jaygmcm0tPnJtX2xvY2spOwogCi0JLyoKLQkgKiBXZSBv bmx5IHN1cHBvcnQgb25lIGFjdGl2ZSByZXNlcnZhdGlvbiBwZXItaHctYmxvY2suIEJ1dCB0byBp bXBsZW1lbnQKLQkgKiB0cmFuc2FjdGlvbmFsIHNlbWFudGljcyBmb3IgdGVzdC1vbmx5LCBhbmQg Zm9yIGFsbG93aW5nIGZhaWx1cmUgd2hpbGUKLQkgKiBtb2RpZnlpbmcgeW91ciBleGlzdGluZyBy ZXNlcnZhdGlvbiwgb3ZlciB0aGUgY291cnNlIG9mIHRoaXMKLQkgKiBmdW5jdGlvbiB3ZSBjYW4g aGF2ZSB0d28gcmVzZXJ2YXRpb25zOgotCSAqIEN1cnJlbnQ6IEV4aXN0aW5nIHJlc2VydmF0aW9u Ci0JICogTmV4dDogUHJvcG9zZWQgcmVzZXJ2YXRpb24uIFRoZSBwcm9wb3NlZCByZXNlcnZhdGlv biBtYXkgZmFpbCwgb3IgbWF5Ci0JICogICAgICAgYmUgZGlzY2FyZGVkIGlmIGluIHRlc3Qtb25s eSBtb2RlLgotCSAqIElmIHJlc2VydmF0aW9uIGlzIHN1Y2Nlc3NmdWwsIGFuZCB3ZSdyZSBub3Qg aW4gdGVzdC1vbmx5LCB0aGVuIHdlCi0JICogcmVwbGFjZSB0aGUgY3VycmVudCB3aXRoIHRoZSBu ZXh0LgotCSAqLwotCXJzdnBfbnh0ID0ga3phbGxvYyhzaXplb2YoKnJzdnBfbnh0KSwgR0ZQX0tF Uk5FTCk7Ci0JaWYgKCFyc3ZwX254dCkgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGVuZDsK LQl9CisJcmV0dXJuIHJjOworfQogCi0JcnN2cF9jdXIgPSBfZHB1X3JtX2dldF9yc3ZwKHJtLCBl bmMpOwotCi0JLyoKLQkgKiBVc2VyIGNhbiByZXF1ZXN0IHRoYXQgd2UgY2xlYXIgb3V0IGFueSBy ZXNlcnZhdGlvbiBkdXJpbmcgdGhlCi0JICogYXRvbWljX2NoZWNrIHBoYXNlIGJ5IHVzaW5nIHRo aXMgQ0xFQVIgYml0Ci0JICovCi0JaWYgKHJzdnBfY3VyICYmIHRlc3Rfb25seSAmJiBSTV9SUV9D TEVBUigmcmVxcykpIHsKLQkJRFBVX0RFQlVHKCJ0ZXN0X29ubHkgJiBDTEVBUjogY2xlYXIgcnN2 cFtzJWRlJWRdXG4iLAotCQkJCXJzdnBfY3VyLT5zZXEsIHJzdnBfY3VyLT5lbmNfaWQpOwotCQlf ZHB1X3JtX3JlbGVhc2VfcnN2cChybSwgcnN2cF9jdXIsIGNvbm5fc3RhdGUtPmNvbm5lY3Rvcik7 Ci0JCXJzdnBfY3VyID0gTlVMTDsKLQkJX2RwdV9ybV9wcmludF9yc3ZwcyhybSwgRFBVX1JNX1NU QUdFX0FGVEVSX0NMRUFSKTsKLQl9CitpbnQgZHB1X3JtX3JlbGVhc2VfZW5jb2Rlcl9yZXMoc3Ry dWN0IGRwdV9ybSAqcm0sIHN0cnVjdCBkcHVfY3J0Y19zdGF0ZSAqc3RhdGUpCit7CisJaW50IG51 bV9yZWxlYXNlZDsKKwlpbnQgcmMgPSAwOwogCi0JLyogQ2hlY2sgdGhlIHByb3Bvc2VkIHJlc2Vy dmF0aW9uLCBzdG9yZSBpdCBpbiBodydzICJuZXh0IiBmaWVsZCAqLwotCXJldCA9IF9kcHVfcm1f bWFrZV9uZXh0X3JzdnAocm0sIGVuYywgY3J0Y19zdGF0ZSwgY29ubl9zdGF0ZSwKLQkJCXJzdnBf bnh0LCAmcmVxcyk7Ci0KLQlfZHB1X3JtX3ByaW50X3JzdnBzKHJtLCBEUFVfUk1fU1RBR0VfQUZU RVJfUlNWUE5FWFQpOwotCi0JaWYgKHJldCkgewotCQlEUFVfRVJST1IoImZhaWxlZCB0byByZXNl cnZlIGh3IHJlc291cmNlczogJWRcbiIsIHJldCk7Ci0JCV9kcHVfcm1fcmVsZWFzZV9yc3ZwKHJt LCByc3ZwX254dCwgY29ubl9zdGF0ZS0+Y29ubmVjdG9yKTsKLQl9IGVsc2UgaWYgKHRlc3Rfb25s eSAmJiAhUk1fUlFfTE9DSygmcmVxcykpIHsKLQkJLyoKLQkJICogTm9ybWFsbHksIGlmIHRlc3Rf b25seSwgdGVzdCB0aGUgcmVzZXJ2YXRpb24gYW5kIHRoZW4gdW5kbwotCQkgKiBIb3dldmVyLCBp ZiB0aGUgdXNlciByZXF1ZXN0cyBMT0NLLCB0aGVuIGtlZXAgdGhlIHJlc2VydmF0aW9uCi0JCSAq IG1hZGUgZHVyaW5nIHRoZSBhdG9taWNfY2hlY2sgcGhhc2UuCi0JCSAqLwotCQlEUFVfREVCVUco InRlc3Rfb25seTogZGlzY2FyZCB0ZXN0IHJzdnBbcyVkZSVkXVxuIiwKLQkJCQlyc3ZwX254dC0+ c2VxLCByc3ZwX254dC0+ZW5jX2lkKTsKLQkJX2RwdV9ybV9yZWxlYXNlX3JzdnAocm0sIHJzdnBf bnh0LCBjb25uX3N0YXRlLT5jb25uZWN0b3IpOwotCX0gZWxzZSB7Ci0JCWlmICh0ZXN0X29ubHkg JiYgUk1fUlFfTE9DSygmcmVxcykpCi0JCQlEUFVfREVCVUcoInRlc3Rfb25seSAmIExPQ0s6IGxv Y2sgcnN2cFtzJWRlJWRdXG4iLAotCQkJCQlyc3ZwX254dC0+c2VxLCByc3ZwX254dC0+ZW5jX2lk KTsKLQotCQlfZHB1X3JtX3JlbGVhc2VfcnN2cChybSwgcnN2cF9jdXIsIGNvbm5fc3RhdGUtPmNv bm5lY3Rvcik7Ci0KLQkJcmV0ID0gX2RwdV9ybV9jb21taXRfcnN2cChybSwgcnN2cF9ueHQsIGNv bm5fc3RhdGUpOwotCX0KKwltdXRleF9sb2NrKCZybS0+cm1fbG9jayk7CiAKLQlfZHB1X3JtX3By aW50X3JzdnBzKHJtLCBEUFVfUk1fU1RBR0VfRklOQUwpOworCW51bV9yZWxlYXNlZCA9IF9kcHVf cm1fcmVsZWFzZV9od19ibGsocm0sIHN0YXRlLCBEUFVfSFdfQkxLX0lOVEYpOworCWlmIChudW1f cmVsZWFzZWQgIT0gc3RhdGUtPm51bV9pbnRmcykgeworCQlEUFVfRVJST1IoCisJCSJpbnRmIHJl bGVhc2UgY291bnQgZG9lc24ndCBtYXRjaCBmb3IgY3J0YzogJWQgKCVkICE9ICVkKVxuIiwKKwkJ CWdldF9jcnRjX2lkKHN0YXRlKSwgbnVtX3JlbGVhc2VkLCBzdGF0ZS0+bnVtX2ludGZzKTsKKwkJ cmMgPSAtRUlOVkFMOworCX0KIAotZW5kOgogCW11dGV4X3VubG9jaygmcm0tPnJtX2xvY2spOwog Ci0JcmV0dXJuIHJldDsKKwlzdGF0ZS0+bnVtX2ludGZzID0gMDsKKwltZW1zZXQoJnN0YXRlLT5o d19pbnRmcywgMCwgc2l6ZW9mKHN0YXRlLT5od19pbnRmcykpOworCisJcmV0dXJuIHJjOwogfQor CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfcm0uaCBiL2Ry aXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9ybS5oCmluZGV4IGRlNTJjMDMuLjNlMWZj N2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9ybS5oCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9ybS5oCkBAIC0xNiw2MSArMTYs MjggQEAKICNkZWZpbmUgX19EUFVfUk1fSF9fCiAKICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0K ICNpbmNsdWRlICJtc21fa21zLmgiCiAjaW5jbHVkZSAiZHB1X2h3X3RvcC5oIgorI2luY2x1ZGUg ImRwdV9lbmNvZGVyLmgiCiAKLS8qKgotICogZW51bSBkcHVfcm1fdG9wb2xvZ3lfbmFtZSAtIEhX IHJlc291cmNlIHVzZSBjYXNlIGluIHVzZSBieSBjb25uZWN0b3IKLSAqIEBEUFVfUk1fVE9QT0xP R1lfTk9ORTogICAgICAgICAgICAgICAgIE5vIHRvcG9sb2d5IGluIHVzZSBjdXJyZW50bHkKLSAq IEBEUFVfUk1fVE9QT0xPR1lfU0lOR0xFUElQRTogICAgICAgICAgIDEgTE0sIDEgUFAsIDEgSU5U Ri9XQgotICogQERQVV9STV9UT1BPTE9HWV9EVUFMUElQRTogICAgICAgICAgICAgMiBMTSwgMiBQ UCwgMiBJTlRGL1dCCi0gKiBARFBVX1JNX1RPUE9MT0dZX0RVQUxQSVBFXzNETUVSR0U6ICAgICAy IExNLCAyIFBQLCAzRE11eCwgMSBJTlRGL1dCCi0gKi8KLWVudW0gZHB1X3JtX3RvcG9sb2d5X25h bWUgewotCURQVV9STV9UT1BPTE9HWV9OT05FID0gMCwKLQlEUFVfUk1fVE9QT0xPR1lfU0lOR0xF UElQRSwKLQlEUFVfUk1fVE9QT0xPR1lfRFVBTFBJUEUsCi0JRFBVX1JNX1RPUE9MT0dZX0RVQUxQ SVBFXzNETUVSR0UsCi0JRFBVX1JNX1RPUE9MT0dZX01BWCwKLX07Ci0KLS8qKgotICogZW51bSBk cHVfcm1fdG9wb2xvZ3lfY29udHJvbCAtIEhXIHJlc291cmNlIHVzZSBjYXNlIGluIHVzZSBieSBj b25uZWN0b3IKLSAqIEBEUFVfUk1fVE9QQ1RMX1JFU0VSVkVfTE9DSzogSWYgc2V0LCBpbiBBdG9t aWNUZXN0IHBoYXNlLCBhZnRlciBhIHN1Y2Nlc3NmdWwKLSAqICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdGVzdCwgcmVzZXJ2ZSB0aGUgcmVzb3VyY2VzIGZvciB0aGlzIGRpc3BsYXkuCi0g KiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vcm1hbCBiZWhhdmlvciB3b3VsZCBub3Qg aW1wYWN0IHRoZSByZXNlcnZhdGlvbgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBs aXN0IGR1cmluZyB0aGUgQXRvbWljVGVzdCBwaGFzZS4KLSAqIEBEUFVfUk1fVE9QQ1RMX1JFU0VS VkVfQ0xFQVI6IElmIHNldCwgaW4gQXRvbWljVGVzdCBwaGFzZSwgYmVmb3JlIHRlc3RpbmcsCi0g KiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxlYXNlIGFueSByZXNlcnZhdGlvbiBo ZWxkIGJ5IHRoaXMgZGlzcGxheS4KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5v cm1hbCBiZWhhdmlvciB3b3VsZCBub3QgaW1wYWN0IHRoZQotICogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcmVzZXJ2YXRpb24gbGlzdCBkdXJpbmcgdGhlIEF0b21pY1Rlc3QgcGhhc2Uu Ci0gKiBARFBVX1JNX1RPUENUTF9EUyAgOiBSZXF1aXJlIGxheWVyIG1peGVycyB3aXRoIERTIGNh cGFiaWxpdGllcwotICovCi1lbnVtIGRwdV9ybV90b3BvbG9neV9jb250cm9sIHsKLQlEUFVfUk1f VE9QQ1RMX1JFU0VSVkVfTE9DSywKLQlEUFVfUk1fVE9QQ1RMX1JFU0VSVkVfQ0xFQVIsCi0JRFBV X1JNX1RPUENUTF9EUywKLX07CitzdHJ1Y3QgZHB1X2NydGNfc3RhdGU7CitzdHJ1Y3QgZHB1X2Ny dGNfdG9wb2xvZ3k7CiAKIC8qKgogICogc3RydWN0IGRwdV9ybSAtIERQVSBkeW5hbWljIGhhcmR3 YXJlIHJlc291cmNlIG1hbmFnZXIKLSAqIEBkZXY6IGRldmljZSBoYW5kbGUgZm9yIGV2ZW50IGxv Z2dpbmcgcHVycG9zZXMKLSAqIEByc3ZwczogbGlzdCBvZiBoYXJkd2FyZSByZXNlcnZhdGlvbnMg YnkgZWFjaCBjcnRjLT5lbmNvZGVyLT5jb25uZWN0b3IKKyAqIEBod19ibGtzX2xlbiAtIG51bWJl ciBvZiBodyBibG9ja3MgcGVyIHR5cGUKICAqIEBod19ibGtzOiBhcnJheSBvZiBsaXN0cyBvZiBo YXJkd2FyZSByZXNvdXJjZXMgcHJlc2VudCBpbiB0aGUgc3lzdGVtLCBvbmUKICAqCWxpc3QgcGVy IHR5cGUgb2YgaGFyZHdhcmUgYmxvY2sKKyAqIEBod19kcm1fbWFwIC0gYXJyYXkgdG8gdHJhY2sg ZWFjaCBodyBibG9jayB0eXBlIGFzc2lnbm1lbnRzCiAgKiBAaHdfbWRwOiBoYXJkd2FyZSBvYmpl Y3QgZm9yIG1kcF90b3AKICAqIEBsbV9tYXhfd2lkdGg6IGNhY2hlZCBsYXllciBtaXhlciBtYXhp bXVtIHdpZHRoCi0gKiBAcnN2cF9uZXh0X3NlcTogc2VxdWVuY2UgbnVtYmVyIGZvciBuZXh0IHJl c2VydmF0aW9uIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMKICAqIEBybV9sb2NrOiByZXNvdXJjZSBt YW5hZ2VyIG11dGV4CiAgKi8KIHN0cnVjdCBkcHVfcm0gewotCXN0cnVjdCBkcm1fZGV2aWNlICpk ZXY7Ci0Jc3RydWN0IGxpc3RfaGVhZCByc3ZwczsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGh3X2Jsa3Nb RFBVX0hXX0JMS19NQVhdOworCXVpbnQzMl90IGh3X2Jsa3NfbGVuW0RQVV9IV19CTEtfTUFYXTsK KwlzdHJ1Y3QgZHB1X3JtX2h3X2JsayAqaHdfYmxrc1tEUFVfSFdfQkxLX01BWF1bTUFYX0JMT0NL U107CisJaW50IGh3X2RybV9tYXBbRFBVX0hXX0JMS19NQVhdW01BWF9CTE9DS1NdOwogCXN0cnVj dCBkcHVfaHdfbWRwICpod19tZHA7Ci0JdWludDMyX3QgbG1fbWF4X3dpZHRoOwotCXVpbnQzMl90 IHJzdnBfbmV4dF9zZXE7CiAJc3RydWN0IG11dGV4IHJtX2xvY2s7CiB9OwogCkBAIC05MCwyMyAr NTcsMjggQEAgc3RydWN0IGRwdV9ybSB7CiBzdHJ1Y3QgZHB1X3JtX2h3X2l0ZXIgewogCXZvaWQg Kmh3OwogCXN0cnVjdCBkcHVfcm1faHdfYmxrICpibGs7Ci0JdWludDMyX3QgZW5jX2lkOworCXVp bnQzMl90IGRybV9pZDsKIAllbnVtIGRwdV9od19ibGtfdHlwZSB0eXBlOworCXVpbnQzMl90IGlu ZGV4OwogfTsKIAogLyoqCisgKiBkcHVfcm1fcHJpbnRfc3RhdGUgLSBwcmludHMgY3VycmVudCBS TSBzdGF0ZSBvbiByZXNvdXJjZSBwb29sCisgKiBAcm06IERQVSBSZXNvdXJjZSBNYW5hZ2VyIGhh bmRsZQorICovCit2b2lkIGRwdV9ybV9wcmludF9zdGF0ZShzdHJ1Y3QgZHB1X3JtICpybSk7CisK Ky8qKgogICogZHB1X3JtX2luaXQgLSBSZWFkIGhhcmR3YXJlIGNhdGFsb2cgYW5kIGNyZWF0ZSBy ZXNlcnZhdGlvbiB0cmFja2luZyBvYmplY3RzCiAgKglmb3IgYWxsIEhXIGJsb2Nrcy4KICAqIEBy bTogRFBVIFJlc291cmNlIE1hbmFnZXIgaGFuZGxlCiAgKiBAY2F0OiBQb2ludGVyIHRvIGhhcmR3 YXJlIGNhdGFsb2cKICAqIEBtbWlvOiBtYXBwZWQgcmVnaXN0ZXIgaW8gYWRkcmVzcyBvZiBNRFAK LSAqIEBkZXY6IGRldmljZSBoYW5kbGUgZm9yIGV2ZW50IGxvZ2dpbmcgcHVycG9zZXMKICAqIEBS ZXR1cm46IDAgb24gU3VjY2VzcyBvdGhlcndpc2UgLUVSUk9SCiAgKi8KIGludCBkcHVfcm1faW5p dChzdHJ1Y3QgZHB1X3JtICpybSwKIAkJc3RydWN0IGRwdV9tZHNzX2NmZyAqY2F0LAotCQl2b2lk IF9faW9tZW0gKm1taW8sCi0JCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworCQl2b2lkICptbWlv KTsKIAogLyoqCiAgKiBkcHVfcm1fZGVzdHJveSAtIEZyZWUgYWxsIG1lbW9yeSBhbGxvY2F0ZWQg YnkgZHB1X3JtX2luaXQKQEAgLTExNiw3NSArODgsNDcgQEAgaW50IGRwdV9ybV9pbml0KHN0cnVj dCBkcHVfcm0gKnJtLAogaW50IGRwdV9ybV9kZXN0cm95KHN0cnVjdCBkcHVfcm0gKnJtKTsKIAog LyoqCi0gKiBkcHVfcm1fcmVzZXJ2ZSAtIEdpdmVuIGEgQ1JUQy0+RW5jb2Rlci0+Q29ubmVjdG9y IGRpc3BsYXkgY2hhaW4sIGFuYWx5emUKLSAqCXRoZSB1c2UgY29ubmVjdGlvbnMgYW5kIHVzZXIg cmVxdWlyZW1lbnRzLCBzcGVjaWZpZWQgdGhyb3VnaCByZWxhdGVkCi0gKgl0b3BvbG9neSBjb250 cm9sIHByb3BlcnRpZXMsIGFuZCByZXNlcnZlIGhhcmR3YXJlIGJsb2NrcyB0byB0aGF0Ci0gKglk aXNwbGF5IGNoYWluLgotICoJSFcgYmxvY2tzIGNhbiB0aGVuIGJlIGFjY2Vzc2VkIHRocm91Z2gg ZHB1X3JtX2dldF8qIGZ1bmN0aW9ucy4KLSAqCUhXIFJlc2VydmF0aW9ucyBzaG91bGQgYmUgcmVs ZWFzZWQgdmlhIGRwdV9ybV9yZWxlYXNlX2h3LgorICogZHB1X3JtX3Jlc2VydmVfY3J0Y19yZXMg LSBSZXNlcnZlIEhXIGJsb2NrcyBmb3IgQ1JUQwogICogQHJtOiBEUFUgUmVzb3VyY2UgTWFuYWdl ciBoYW5kbGUKLSAqIEBkcm1fZW5jOiBEUk0gRW5jb2RlciBoYW5kbGUKLSAqIEBjcnRjX3N0YXRl OiBQcm9wb3NlZCBBdG9taWMgRFJNIENSVEMgU3RhdGUgaGFuZGxlCi0gKiBAY29ubl9zdGF0ZTog UHJvcG9zZWQgQXRvbWljIERSTSBDb25uZWN0b3IgU3RhdGUgaGFuZGxlCi0gKiBAdG9wb2xvZ3k6 IFBvaW50ZXIgdG8gdG9wb2xvZ3kgaW5mbyBmb3IgdGhlIGRpc3BsYXkKLSAqIEB0ZXN0X29ubHk6 IEF0b21pYy1UZXN0IHBoYXNlLCBkaXNjYXJkIHJlc3VsdHMgKHVubGVzcyBwcm9wZXJ0eSBvdmVy cmlkZXMpCi0gKiBAUmV0dXJuOiAwIG9uIFN1Y2Nlc3Mgb3RoZXJ3aXNlIC1FUlJPUgorICogQHN0 YXRlOiBEUFUgQ1JUQyBzdGF0ZSB0byBjYWNoZSBIVyBibG9jayBoYW5kbGVzCisgKiBAdG9wb2xv Z3k6IHRvcG9sb2d5IHJlcXVpcmVtZW50IGZvciB0aGUgZGlzcGxheQorICogQFJldHVybjogMCBv biBTdWNjZXNzIG90aGVyd2lzZSAtIEVSUk9SCiAgKi8KLWludCBkcHVfcm1fcmVzZXJ2ZShzdHJ1 Y3QgZHB1X3JtICpybSwKLQkJc3RydWN0IGRybV9lbmNvZGVyICpkcm1fZW5jLAotCQlzdHJ1Y3Qg ZHJtX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCi0JCXN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRl ICpjb25uX3N0YXRlLAotCQlzdHJ1Y3QgbXNtX2Rpc3BsYXlfdG9wb2xvZ3kgdG9wb2xvZ3ksCi0J CWJvb2wgdGVzdF9vbmx5KTsKK2ludCBkcHVfcm1fcmVzZXJ2ZV9jcnRjX3JlcyhzdHJ1Y3QgZHB1 X3JtICpybSwgc3RydWN0IGRwdV9jcnRjX3N0YXRlICpzdGF0ZSwKKwkJc3RydWN0IGRwdV9jcnRj X3RvcG9sb2d5ICp0b3BvbG9neSk7CiAKIC8qKgotICogZHB1X3JtX3Jlc2VydmUgLSBHaXZlbiB0 aGUgZW5jb2RlciBmb3IgdGhlIGRpc3BsYXkgY2hhaW4sIHJlbGVhc2UgYW55Ci0gKglIVyBibG9j a3MgcHJldmlvdXNseSByZXNlcnZlZCBmb3IgdGhhdCB1c2UgY2FzZS4KKyAqIGRwdV9ybV9yZWxl YXNlX2NydGNfcmVzIC0gUmVsZWFzZSBIVyBibG9ja3Mgb2YgdGhlIENSVEMKICAqIEBybTogRFBV IFJlc291cmNlIE1hbmFnZXIgaGFuZGxlCi0gKiBAZW5jOiBEUk0gRW5jb2RlciBoYW5kbGUKLSAq IEBSZXR1cm46IDAgb24gU3VjY2VzcyBvdGhlcndpc2UgLUVSUk9SCisgKiBAc3RhdGU6IERQVSBD UlRDIHN0YXRlIHRvIGNhY2hlIEhXIGJsb2NrIGhhbmRsZXMKKyAqIEBSZXR1cm46IDAgb24gU3Vj Y2VzcyBvdGhlcndpc2UgLSBFUlJPUgogICovCi12b2lkIGRwdV9ybV9yZWxlYXNlKHN0cnVjdCBk cHVfcm0gKnJtLCBzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuYyk7CitpbnQgZHB1X3JtX3JlbGVhc2Vf Y3J0Y19yZXMoc3RydWN0IGRwdV9ybSAqcm0sIHN0cnVjdCBkcHVfY3J0Y19zdGF0ZSAqc3RhdGUp OwogCiAvKioKLSAqIGRwdV9ybV9nZXRfbWRwIC0gUmV0cmlldmUgSFcgYmxvY2sgZm9yIE1EUCBU T1AuCi0gKglUaGlzIGlzIG5ldmVyIHJlc2VydmVkLCBhbmQgaXMgdXNhYmxlIGJ5IGFueSBkaXNw bGF5LgorICogZHB1X3JtX3Jlc2VydmVfZW5jb2Rlcl9yZXMgLSBSZXNlcnZlIEhXIGJsb2NrcyBm b3IgRW5jb2Rlci9Db25uZWN0b3IKICAqIEBybTogRFBVIFJlc291cmNlIE1hbmFnZXIgaGFuZGxl Ci0gKiBAUmV0dXJuOiBQb2ludGVyIHRvIGh3IGJsb2NrIG9yIE5VTEwKKyAqIEBzdGF0ZTogRFBV IENSVEMgc3RhdGUgdG8gY2FjaGUgSFcgYmxvY2sgaGFuZGxlcworICogQGh3X3JlczogaW50ZXJm YWNlIGJsb2NrIHJlbGF0ZWQgaW5mbworICogQFJldHVybjogMCBvbiBTdWNjZXNzIG90aGVyd2lz ZSAtIEVSUk9SCiAgKi8KLXN0cnVjdCBkcHVfaHdfbWRwICpkcHVfcm1fZ2V0X21kcChzdHJ1Y3Qg ZHB1X3JtICpybSk7CitpbnQgZHB1X3JtX3Jlc2VydmVfZW5jb2Rlcl9yZXMoc3RydWN0IGRwdV9y bSAqcm0sIHN0cnVjdCBkcHVfY3J0Y19zdGF0ZSAqc3RhdGUsCisJCXN0cnVjdCBkcHVfZW5jb2Rl cl9od19yZXNvdXJjZXMgKmh3X3Jlcyk7CiAKIC8qKgotICogZHB1X3JtX2luaXRfaHdfaXRlciAt IHNldHVwIGdpdmVuIGl0ZXJhdG9yIGZvciBuZXcgaXRlcmF0aW9uIG92ZXIgaHcgbGlzdAotICoJ dXNpbmcgZHB1X3JtX2dldF9odwotICogQGl0ZXI6IGl0ZXIgb2JqZWN0IHRvIGluaXRpYWxpemUK LSAqIEBlbmNfaWQ6IERSTSBJRCBvZiBFbmNvZGVyIGNsaWVudCB3aXNoZXMgdG8gc2VhcmNoIGZv ciwgb3IgMCBmb3IgQW55IEVuY29kZXIKLSAqIEB0eXBlOiBIYXJkd2FyZSBCbG9jayBUeXBlIGNs aWVudCB3aXNoZXMgdG8gc2VhcmNoIGZvci4KLSAqLwotdm9pZCBkcHVfcm1faW5pdF9od19pdGVy KAotCQlzdHJ1Y3QgZHB1X3JtX2h3X2l0ZXIgKml0ZXIsCi0JCXVpbnQzMl90IGVuY19pZCwKLQkJ ZW51bSBkcHVfaHdfYmxrX3R5cGUgdHlwZSk7Ci0vKioKLSAqIGRwdV9ybV9nZXRfaHcgLSByZXRy aWV2ZSByZXNlcnZlZCBodyBvYmplY3QgZ2l2ZW4gZW5jb2RlciBhbmQgaHcgdHlwZQotICoJTWVh bnQgdG8gZG8gYSBzaW5nbGUgcGFzcyB0aHJvdWdoIHRoZSBoYXJkd2FyZSBsaXN0IHRvIGl0ZXJh dGl2ZWx5Ci0gKglyZXRyaWV2ZSBoYXJkd2FyZSBibG9ja3Mgb2YgYSBnaXZlbiB0eXBlIGZvciBh IGdpdmVuIGVuY29kZXIuCi0gKglJbml0aWFsaXplIGFuIGl0ZXJhdG9yIG9iamVjdC4KLSAqCVNl dCBodyBibG9jayB0eXBlIG9mIGludGVyZXN0LiBTZXQgZW5jb2RlciBpZCBvZiBpbnRlcmVzdCwg MCBmb3IgYW55LgotICoJRnVuY3Rpb24gcmV0dXJucyBmaXJzdCBodyBvZiB0eXBlIGZvciB0aGF0 IGVuY29kZXIuCi0gKglTdWJzZXF1ZW50IGNhbGxzIHdpbGwgcmV0dXJuIHRoZSBuZXh0IHJlc2Vy dmVkIGh3IG9mIHRoYXQgdHlwZSBpbi1vcmRlci4KLSAqCUl0ZXJhdG9yIEhXIHBvaW50ZXIgd2ls bCBiZSBudWxsIG9uIGZhaWx1cmUgdG8gZmluZCBody4KKyAqIGRwdV9ybV9yZWxlYXNlX2VuY29k ZXJfcmVzIC0gUmVsZWFzZSBIVyBibG9ja3Mgb2YgdGhlIEVuY29kZXIvQ29ubmVjdG9yCiAgKiBA cm06IERQVSBSZXNvdXJjZSBNYW5hZ2VyIGhhbmRsZQotICogQGl0ZXI6IGl0ZXJhdG9yIG9iamVj dAotICogQFJldHVybjogdHJ1ZSBvbiBtYXRjaCBmb3VuZCwgZmFsc2Ugb24gbm8gbWF0Y2ggZm91 bmQKKyAqIEBzdGF0ZTogRFBVIENSVEMgc3RhdGUgdG8gY2FjaGUgSFcgYmxvY2sgaGFuZGxlcwor ICogQFJldHVybjogMCBvbiBTdWNjZXNzIG90aGVyd2lzZSAtIEVSUk9SCiAgKi8KLWJvb2wgZHB1 X3JtX2dldF9odyhzdHJ1Y3QgZHB1X3JtICpybSwgc3RydWN0IGRwdV9ybV9od19pdGVyICppdGVy KTsKK2ludCBkcHVfcm1fcmVsZWFzZV9lbmNvZGVyX3JlcyhzdHJ1Y3QgZHB1X3JtICpybSwgc3Ry dWN0IGRwdV9jcnRjX3N0YXRlICpzdGF0ZSk7CiAKIC8qKgotICogZHB1X3JtX2NoZWNrX3Byb3Bl cnR5X3RvcGN0bCAtIHZhbGlkYXRlIHByb3BlcnR5IGJpdG1hc2sgYmVmb3JlIGl0IGlzIHNldAot ICogQHZhbDogdXNlcidzIHByb3Bvc2VkIHRvcG9sb2d5IGNvbnRyb2wgYml0bWFzawotICogQFJl dHVybjogMCBvbiBzdWNjZXNzIG9yIGVycm9yCisgKiBkcHVfcm1fZ2V0X21kcCAtIFJldHJpZXZl IEhXIGJsb2NrIGZvciBNRFAgVE9QLgorICoJVGhpcyBpcyBuZXZlciByZXNlcnZlZCwgYW5kIGlz IHVzYWJsZSBieSBhbnkgZGlzcGxheS4KKyAqIEBybTogRFBVIFJlc291cmNlIE1hbmFnZXIgaGFu ZGxlCisgKiBAUmV0dXJuOiBQb2ludGVyIHRvIGh3IGJsb2NrIG9yIE5VTEwKICAqLwotaW50IGRw dV9ybV9jaGVja19wcm9wZXJ0eV90b3BjdGwodWludDY0X3QgdmFsKTsKK3N0cnVjdCBkcHVfaHdf bWRwICpkcHVfcm1fZ2V0X21kcChzdHJ1Y3QgZHB1X3JtICpybSk7CiAKICNlbmRpZiAvKiBfX0RQ VV9STV9IX18gKi8KLS0gClRoZSBRdWFsY29tbSBJbm5vdmF0aW9uIENlbnRlciwgSW5jLiBpcyBh IG1lbWJlciBvZiB0aGUgQ29kZSBBdXJvcmEgRm9ydW0sCmEgTGludXggRm91bmRhdGlvbiBDb2xs YWJvcmF0aXZlIFByb2plY3QKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fCkZyZWVkcmVubyBtYWlsaW5nIGxpc3QKRnJlZWRyZW5vQGxpc3RzLmZyZWVkZXNr dG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2Zy ZWVkcmVubwo=