From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alex Deucher Subject: [PATCH 45/57] drm/amdgpu/vg20:Restruct uvd.inst to support multiple instances Date: Tue, 15 May 2018 09:59:21 -0500 Message-ID: <20180515145933.12063-46-alexander.deucher@amd.com> References: <20180515145933.12063-1-alexander.deucher@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180515145933.12063-1-alexander.deucher-5C7GfCeVMHo@public.gmane.org> List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Cc: Alex Deucher , James Zhu RnJvbTogSmFtZXMgWmh1IDxKYW1lcy5aaHVAYW1kLmNvbT4KClZlZ2EyMCBoYXMgZHVhbC1VVkQu IE5lZWQgYWRkIG11bHRpcGxlIGluc3RhbmNlcyBzdXBwb3J0IGZvciB1dmQuClJlc3RydWN0IHV2 ZC5pbnN0LCB1c2luZyB1dmQuaW5zdFswXSB0byByZXBsYWNlIHV2ZC5pbnN0LT4uClJlcHVycG9z ZSBhbWRncHVfcmluZzo6bWUgZm9yIGluc3RhbmNlIGluZGV4LCBhbmQgaW5pdGlhbGl6ZSB0byAw LgpUaGVyZSBhcmUgbm8gYW55IGxvZ2ljYWwgY2hhbmdlcyBoZXJlLgoKU2lnbmVkLW9mZi1ieTog SmFtZXMgWmh1IDxKYW1lcy5aaHVAYW1kLmNvbT4KUmV2aWV3ZWQtYnk6IEFsZXggRGV1Y2hlciA8 YWxleGFuZGVyLmRldWNoZXJAYW1kLmNvbT4KU2lnbmVkLW9mZi1ieTogQWxleCBEZXVjaGVyIDxh bGV4YW5kZXIuZGV1Y2hlckBhbWQuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1 L2FtZGdwdV9mZW5jZS5jIHwgICAgNiArLQogZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1k Z3B1X2ttcy5jICAgfCAgIDEyICstCiBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVf cmluZy5jICB8ICAgIDEgKwogZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3V2ZC5j ICAgfCAgMjI5ICsrKy0tLS0KIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L3V2ZF92N18wLmMg ICAgIHwgMTAwMiArKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLQogNSBmaWxlcyBjaGFuZ2Vk LCA2NjAgaW5zZXJ0aW9ucygrKSwgNTkwIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9mZW5jZS5jIGIvZHJpdmVycy9ncHUvZHJtL2Ft ZC9hbWRncHUvYW1kZ3B1X2ZlbmNlLmMKaW5kZXggMTA3MGY0MDQyY2JiLi4zOWVjNmI4ODkwYTEg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9mZW5jZS5jCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9mZW5jZS5jCkBAIC0zNzYsMTQg KzM3NiwxNCBAQCBpbnQgYW1kZ3B1X2ZlbmNlX2RyaXZlcl9zdGFydF9yaW5nKHN0cnVjdCBhbWRn cHVfcmluZyAqcmluZywKIAlzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiA9IHJpbmctPmFkZXY7 CiAJdWludDY0X3QgaW5kZXg7CiAKLQlpZiAocmluZyAhPSAmYWRldi0+dXZkLmluc3QtPnJpbmcp IHsKKwlpZiAocmluZyAhPSAmYWRldi0+dXZkLmluc3RbcmluZy0+bWVdLnJpbmcpIHsKIAkJcmlu Zy0+ZmVuY2VfZHJ2LmNwdV9hZGRyID0gJmFkZXYtPndiLndiW3JpbmctPmZlbmNlX29mZnNdOwog CQlyaW5nLT5mZW5jZV9kcnYuZ3B1X2FkZHIgPSBhZGV2LT53Yi5ncHVfYWRkciArIChyaW5nLT5m ZW5jZV9vZmZzICogNCk7CiAJfSBlbHNlIHsKIAkJLyogcHV0IGZlbmNlIGRpcmVjdGx5IGJlaGlu ZCBmaXJtd2FyZSAqLwogCQlpbmRleCA9IEFMSUdOKGFkZXYtPnV2ZC5mdy0+c2l6ZSwgOCk7Ci0J CXJpbmctPmZlbmNlX2Rydi5jcHVfYWRkciA9IGFkZXYtPnV2ZC5pbnN0LT5jcHVfYWRkciArIGlu ZGV4OwotCQlyaW5nLT5mZW5jZV9kcnYuZ3B1X2FkZHIgPSBhZGV2LT51dmQuaW5zdC0+Z3B1X2Fk ZHIgKyBpbmRleDsKKwkJcmluZy0+ZmVuY2VfZHJ2LmNwdV9hZGRyID0gYWRldi0+dXZkLmluc3Rb cmluZy0+bWVdLmNwdV9hZGRyICsgaW5kZXg7CisJCXJpbmctPmZlbmNlX2Rydi5ncHVfYWRkciA9 IGFkZXYtPnV2ZC5pbnN0W3JpbmctPm1lXS5ncHVfYWRkciArIGluZGV4OwogCX0KIAlhbWRncHVf ZmVuY2Vfd3JpdGUocmluZywgYXRvbWljX3JlYWQoJnJpbmctPmZlbmNlX2Rydi5sYXN0X3NlcSkp OwogCWFtZGdwdV9pcnFfZ2V0KGFkZXYsIGlycV9zcmMsIGlycV90eXBlKTsKZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9rbXMuYyBiL2RyaXZlcnMvZ3B1L2Ry bS9hbWQvYW1kZ3B1L2FtZGdwdV9rbXMuYwppbmRleCAxYTJhMGU5M2IyOTAuLmNhMjE1NDkwYTg4 MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2ttcy5jCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9rbXMuYwpAQCAtMjg2LDcgKzI4 Niw3IEBAIHN0YXRpYyBpbnQgYW1kZ3B1X2luZm9faW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRl diwgdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlCiAJc3RydWN0IGRybV9jcnRjICpjcnRjOwog CXVpbnQzMl90IHVpMzIgPSAwOwogCXVpbnQ2NF90IHVpNjQgPSAwOwotCWludCBpLCBmb3VuZDsK KwlpbnQgaSwgaiwgZm91bmQ7CiAJaW50IHVpMzJfc2l6ZSA9IHNpemVvZih1aTMyKTsKIAogCWlm ICghaW5mby0+cmV0dXJuX3NpemUgfHwgIWluZm8tPnJldHVybl9wb2ludGVyKQpAQCAtMzQ4LDcg KzM0OCw4IEBAIHN0YXRpYyBpbnQgYW1kZ3B1X2luZm9faW9jdGwoc3RydWN0IGRybV9kZXZpY2Ug KmRldiwgdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlCiAJCQlicmVhazsKIAkJY2FzZSBBTURH UFVfSFdfSVBfVVZEOgogCQkJdHlwZSA9IEFNRF9JUF9CTE9DS19UWVBFX1VWRDsKLQkJCXJpbmdf bWFzayA9IGFkZXYtPnV2ZC5pbnN0LT5yaW5nLnJlYWR5ID8gMSA6IDA7CisJCQlmb3IgKGkgPSAw OyBpIDwgYWRldi0+dXZkLm51bV91dmRfaW5zdDsgaSsrKQorCQkJCXJpbmdfbWFzayB8PSAoKGFk ZXYtPnV2ZC5pbnN0W2ldLnJpbmcucmVhZHkgPyAxIDogMCkgPDwgaSk7CiAJCQlpYl9zdGFydF9h bGlnbm1lbnQgPSBBTURHUFVfR1BVX1BBR0VfU0laRTsKIAkJCWliX3NpemVfYWxpZ25tZW50ID0g MTY7CiAJCQlicmVhazsKQEAgLTM2MSw4ICszNjIsMTEgQEAgc3RhdGljIGludCBhbWRncHVfaW5m b19pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2Zp bGUKIAkJCWJyZWFrOwogCQljYXNlIEFNREdQVV9IV19JUF9VVkRfRU5DOgogCQkJdHlwZSA9IEFN RF9JUF9CTE9DS19UWVBFX1VWRDsKLQkJCWZvciAoaSA9IDA7IGkgPCBhZGV2LT51dmQubnVtX2Vu Y19yaW5nczsgaSsrKQotCQkJCXJpbmdfbWFzayB8PSAoKGFkZXYtPnV2ZC5pbnN0LT5yaW5nX2Vu Y1tpXS5yZWFkeSA/IDEgOiAwKSA8PCBpKTsKKwkJCWZvciAoaSA9IDA7IGkgPCBhZGV2LT51dmQu bnVtX3V2ZF9pbnN0OyBpKyspCisJCQkJZm9yIChqID0gMDsgaiA8IGFkZXYtPnV2ZC5udW1fZW5j X3JpbmdzOyBqKyspCisJCQkJCXJpbmdfbWFzayB8PQorCQkJCQkoKGFkZXYtPnV2ZC5pbnN0W2ld LnJpbmdfZW5jW2pdLnJlYWR5ID8gMSA6IDApIDw8CisJCQkJCShqICsgaSAqIGFkZXYtPnV2ZC5u dW1fZW5jX3JpbmdzKSk7CiAJCQlpYl9zdGFydF9hbGlnbm1lbnQgPSBBTURHUFVfR1BVX1BBR0Vf U0laRTsKIAkJCWliX3NpemVfYWxpZ25tZW50ID0gMTsKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3JpbmcuYyBiL2RyaXZlcnMvZ3B1L2Ry bS9hbWQvYW1kZ3B1L2FtZGdwdV9yaW5nLmMKaW5kZXggNDljYWQwOGI1YzE2Li5jNjg1MGI2Mjlk MGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9yaW5nLmMK KysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3JpbmcuYwpAQCAtMzYyLDYg KzM2Miw3IEBAIHZvaWQgYW1kZ3B1X3JpbmdfZmluaShzdHJ1Y3QgYW1kZ3B1X3JpbmcgKnJpbmcp CiAKIAlkbWFfZmVuY2VfcHV0KHJpbmctPnZtaWRfd2FpdCk7CiAJcmluZy0+dm1pZF93YWl0ID0g TlVMTDsKKwlyaW5nLT5tZSA9IDA7CiAKIAlyaW5nLT5hZGV2LT5yaW5nc1tyaW5nLT5pZHhdID0g TlVMTDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV91 dmQuYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV91dmQuYwppbmRleCAxOGMx MDk2Njg2ZjguLjA4M2UzYmRiNTRlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9h bWRncHUvYW1kZ3B1X3V2ZC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdw dV91dmQuYwpAQCAtMTI3LDcgKzEyNyw3IEBAIGludCBhbWRncHVfdXZkX3N3X2luaXQoc3RydWN0 IGFtZGdwdV9kZXZpY2UgKmFkZXYpCiAJY29uc3QgY2hhciAqZndfbmFtZTsKIAljb25zdCBzdHJ1 Y3QgY29tbW9uX2Zpcm13YXJlX2hlYWRlciAqaGRyOwogCXVuc2lnbmVkIHZlcnNpb25fbWFqb3Is IHZlcnNpb25fbWlub3IsIGZhbWlseV9pZDsKLQlpbnQgaSwgcjsKKwlpbnQgaSwgaiwgcjsKIAog CUlOSVRfREVMQVlFRF9XT1JLKCZhZGV2LT51dmQuaW5zdC0+aWRsZV93b3JrLCBhbWRncHVfdXZk X2lkbGVfd29ya19oYW5kbGVyKTsKIApAQCAtMjM2LDI4ICsyMzYsMzAgQEAgaW50IGFtZGdwdV91 dmRfc3dfaW5pdChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKIAlpZiAoYWRldi0+ZmlybXdh cmUubG9hZF90eXBlICE9IEFNREdQVV9GV19MT0FEX1BTUCkKIAkJYm9fc2l6ZSArPSBBTURHUFVf R1BVX1BBR0VfQUxJR04obGUzMl90b19jcHUoaGRyLT51Y29kZV9zaXplX2J5dGVzKSArIDgpOwog Ci0JciA9IGFtZGdwdV9ib19jcmVhdGVfa2VybmVsKGFkZXYsIGJvX3NpemUsIFBBR0VfU0laRSwK LQkJCQkgICAgQU1ER1BVX0dFTV9ET01BSU5fVlJBTSwgJmFkZXYtPnV2ZC5pbnN0LT52Y3B1X2Jv LAotCQkJCSAgICAmYWRldi0+dXZkLmluc3QtPmdwdV9hZGRyLCAmYWRldi0+dXZkLmluc3QtPmNw dV9hZGRyKTsKLQlpZiAocikgewotCQlkZXZfZXJyKGFkZXYtPmRldiwgIiglZCkgZmFpbGVkIHRv IGFsbG9jYXRlIFVWRCBib1xuIiwgcik7Ci0JCXJldHVybiByOwotCX0KKwlmb3IgKGogPSAwOyBq IDwgYWRldi0+dXZkLm51bV91dmRfaW5zdDsgaisrKSB7CiAKLQlyaW5nID0gJmFkZXYtPnV2ZC5p bnN0LT5yaW5nOwotCXJxID0gJnJpbmctPnNjaGVkLnNjaGVkX3JxW0RSTV9TQ0hFRF9QUklPUklU WV9OT1JNQUxdOwotCXIgPSBkcm1fc2NoZWRfZW50aXR5X2luaXQoJnJpbmctPnNjaGVkLCAmYWRl di0+dXZkLmluc3QtPmVudGl0eSwKLQkJCQkgIHJxLCBhbWRncHVfc2NoZWRfam9icywgTlVMTCk7 Ci0JaWYgKHIgIT0gMCkgewotCQlEUk1fRVJST1IoIkZhaWxlZCBzZXR0aW5nIHVwIFVWRCBydW4g cXVldWUuXG4iKTsKLQkJcmV0dXJuIHI7Ci0JfQorCQlyID0gYW1kZ3B1X2JvX2NyZWF0ZV9rZXJu ZWwoYWRldiwgYm9fc2l6ZSwgUEFHRV9TSVpFLAorCQkJCQkgICAgQU1ER1BVX0dFTV9ET01BSU5f VlJBTSwgJmFkZXYtPnV2ZC5pbnN0W2pdLnZjcHVfYm8sCisJCQkJCSAgICAmYWRldi0+dXZkLmlu c3Rbal0uZ3B1X2FkZHIsICZhZGV2LT51dmQuaW5zdFtqXS5jcHVfYWRkcik7CisJCWlmIChyKSB7 CisJCQlkZXZfZXJyKGFkZXYtPmRldiwgIiglZCkgZmFpbGVkIHRvIGFsbG9jYXRlIFVWRCBib1xu Iiwgcik7CisJCQlyZXR1cm4gcjsKKwkJfQogCi0JZm9yIChpID0gMDsgaSA8IGFkZXYtPnV2ZC5t YXhfaGFuZGxlczsgKytpKSB7Ci0JCWF0b21pY19zZXQoJmFkZXYtPnV2ZC5pbnN0LT5oYW5kbGVz W2ldLCAwKTsKLQkJYWRldi0+dXZkLmluc3QtPmZpbHBbaV0gPSBOVUxMOwotCX0KKwkJcmluZyA9 ICZhZGV2LT51dmQuaW5zdFtqXS5yaW5nOworCQlycSA9ICZyaW5nLT5zY2hlZC5zY2hlZF9ycVtE Uk1fU0NIRURfUFJJT1JJVFlfTk9STUFMXTsKKwkJciA9IGRybV9zY2hlZF9lbnRpdHlfaW5pdCgm cmluZy0+c2NoZWQsICZhZGV2LT51dmQuaW5zdFtqXS5lbnRpdHksCisJCQkJCSAgcnEsIGFtZGdw dV9zY2hlZF9qb2JzLCBOVUxMKTsKKwkJaWYgKHIgIT0gMCkgeworCQkJRFJNX0VSUk9SKCJGYWls ZWQgc2V0dGluZyB1cCBVVkQoJWQpIHJ1biBxdWV1ZS5cbiIsIGopOworCQkJcmV0dXJuIHI7CisJ CX0KIAorCQlmb3IgKGkgPSAwOyBpIDwgYWRldi0+dXZkLm1heF9oYW5kbGVzOyArK2kpIHsKKwkJ CWF0b21pY19zZXQoJmFkZXYtPnV2ZC5pbnN0W2pdLmhhbmRsZXNbaV0sIDApOworCQkJYWRldi0+ dXZkLmluc3Rbal0uZmlscFtpXSA9IE5VTEw7CisJCX0KKwl9CiAJLyogZnJvbSB1dmQgdjUuMCBI VyBhZGRyZXNzaW5nIGNhcGFjaXR5IGluY3JlYXNlZCB0byA2NCBiaXRzICovCiAJaWYgKCFhbWRn cHVfZGV2aWNlX2lwX2Jsb2NrX3ZlcnNpb25fY21wKGFkZXYsIEFNRF9JUF9CTE9DS19UWVBFX1VW RCwgNSwgMCkpCiAJCWFkZXYtPnV2ZC5hZGRyZXNzXzY0X2JpdCA9IHRydWU7CkBAIC0yODQsMjAg KzI4NiwyMiBAQCBpbnQgYW1kZ3B1X3V2ZF9zd19pbml0KHN0cnVjdCBhbWRncHVfZGV2aWNlICph ZGV2KQogCiBpbnQgYW1kZ3B1X3V2ZF9zd19maW5pKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2 KQogewotCWludCBpOwotCWtmcmVlKGFkZXYtPnV2ZC5pbnN0LT5zYXZlZF9ibyk7CisJaW50IGks IGo7CiAKLQlkcm1fc2NoZWRfZW50aXR5X2ZpbmkoJmFkZXYtPnV2ZC5pbnN0LT5yaW5nLnNjaGVk LCAmYWRldi0+dXZkLmluc3QtPmVudGl0eSk7CisJZm9yIChqID0gMDsgaiA8IGFkZXYtPnV2ZC5u dW1fdXZkX2luc3Q7ICsraikgeworCQlrZnJlZShhZGV2LT51dmQuaW5zdFtqXS5zYXZlZF9ibyk7 CiAKLQlhbWRncHVfYm9fZnJlZV9rZXJuZWwoJmFkZXYtPnV2ZC5pbnN0LT52Y3B1X2JvLAotCQkJ ICAgICAgJmFkZXYtPnV2ZC5pbnN0LT5ncHVfYWRkciwKLQkJCSAgICAgICh2b2lkICoqKSZhZGV2 LT51dmQuaW5zdC0+Y3B1X2FkZHIpOworCQlkcm1fc2NoZWRfZW50aXR5X2ZpbmkoJmFkZXYtPnV2 ZC5pbnN0W2pdLnJpbmcuc2NoZWQsICZhZGV2LT51dmQuaW5zdFtqXS5lbnRpdHkpOwogCi0JYW1k Z3B1X3JpbmdfZmluaSgmYWRldi0+dXZkLmluc3QtPnJpbmcpOworCQlhbWRncHVfYm9fZnJlZV9r ZXJuZWwoJmFkZXYtPnV2ZC5pbnN0W2pdLnZjcHVfYm8sCisJCQkJICAgICAgJmFkZXYtPnV2ZC5p bnN0W2pdLmdwdV9hZGRyLAorCQkJCSAgICAgICh2b2lkICoqKSZhZGV2LT51dmQuaW5zdFtqXS5j cHVfYWRkcik7CiAKLQlmb3IgKGkgPSAwOyBpIDwgQU1ER1BVX01BWF9VVkRfRU5DX1JJTkdTOyAr K2kpCi0JCWFtZGdwdV9yaW5nX2ZpbmkoJmFkZXYtPnV2ZC5pbnN0LT5yaW5nX2VuY1tpXSk7CisJ CWFtZGdwdV9yaW5nX2ZpbmkoJmFkZXYtPnV2ZC5pbnN0W2pdLnJpbmcpOwogCisJCWZvciAoaSA9 IDA7IGkgPCBBTURHUFVfTUFYX1VWRF9FTkNfUklOR1M7ICsraSkKKwkJCWFtZGdwdV9yaW5nX2Zp bmkoJmFkZXYtPnV2ZC5pbnN0W2pdLnJpbmdfZW5jW2ldKTsKKwl9CiAJcmVsZWFzZV9maXJtd2Fy ZShhZGV2LT51dmQuZncpOwogCiAJcmV0dXJuIDA7CkBAIC0zMDcsMzIgKzMxMSwzMyBAQCBpbnQg YW1kZ3B1X3V2ZF9zdXNwZW5kKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQogewogCXVuc2ln bmVkIHNpemU7CiAJdm9pZCAqcHRyOwotCWludCBpOworCWludCBpLCBqOwogCi0JaWYgKGFkZXYt PnV2ZC5pbnN0LT52Y3B1X2JvID09IE5VTEwpCi0JCXJldHVybiAwOworCWZvciAoaiA9IDA7IGog PCBhZGV2LT51dmQubnVtX3V2ZF9pbnN0OyArK2opIHsKKwkJaWYgKGFkZXYtPnV2ZC5pbnN0W2pd LnZjcHVfYm8gPT0gTlVMTCkKKwkJCWNvbnRpbnVlOwogCi0JY2FuY2VsX2RlbGF5ZWRfd29ya19z eW5jKCZhZGV2LT51dmQuaW5zdC0+aWRsZV93b3JrKTsKKwkJY2FuY2VsX2RlbGF5ZWRfd29ya19z eW5jKCZhZGV2LT51dmQuaW5zdFtqXS5pZGxlX3dvcmspOwogCi0JLyogb25seSB2YWxpZCBmb3Ig cGh5c2ljYWwgbW9kZSAqLwotCWlmIChhZGV2LT5hc2ljX3R5cGUgPCBDSElQX1BPTEFSSVMxMCkg ewotCQlmb3IgKGkgPSAwOyBpIDwgYWRldi0+dXZkLm1heF9oYW5kbGVzOyArK2kpCi0JCQlpZiAo YXRvbWljX3JlYWQoJmFkZXYtPnV2ZC5pbnN0LT5oYW5kbGVzW2ldKSkKLQkJCQlicmVhazsKKwkJ Lyogb25seSB2YWxpZCBmb3IgcGh5c2ljYWwgbW9kZSAqLworCQlpZiAoYWRldi0+YXNpY190eXBl IDwgQ0hJUF9QT0xBUklTMTApIHsKKwkJCWZvciAoaSA9IDA7IGkgPCBhZGV2LT51dmQubWF4X2hh bmRsZXM7ICsraSkKKwkJCQlpZiAoYXRvbWljX3JlYWQoJmFkZXYtPnV2ZC5pbnN0W2pdLmhhbmRs ZXNbaV0pKQorCQkJCQlicmVhazsKIAotCQlpZiAoaSA9PSBhZGV2LT51dmQubWF4X2hhbmRsZXMp Ci0JCQlyZXR1cm4gMDsKLQl9Ci0KLQlzaXplID0gYW1kZ3B1X2JvX3NpemUoYWRldi0+dXZkLmlu c3QtPnZjcHVfYm8pOwotCXB0ciA9IGFkZXYtPnV2ZC5pbnN0LT5jcHVfYWRkcjsKKwkJCWlmIChp ID09IGFkZXYtPnV2ZC5tYXhfaGFuZGxlcykKKwkJCQljb250aW51ZTsKKwkJfQogCi0JYWRldi0+ dXZkLmluc3QtPnNhdmVkX2JvID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWFk ZXYtPnV2ZC5pbnN0LT5zYXZlZF9ibykKLQkJcmV0dXJuIC1FTk9NRU07CisJCXNpemUgPSBhbWRn cHVfYm9fc2l6ZShhZGV2LT51dmQuaW5zdFtqXS52Y3B1X2JvKTsKKwkJcHRyID0gYWRldi0+dXZk Lmluc3Rbal0uY3B1X2FkZHI7CiAKLQltZW1jcHlfZnJvbWlvKGFkZXYtPnV2ZC5pbnN0LT5zYXZl ZF9ibywgcHRyLCBzaXplKTsKKwkJYWRldi0+dXZkLmluc3Rbal0uc2F2ZWRfYm8gPSBrbWFsbG9j KHNpemUsIEdGUF9LRVJORUwpOworCQlpZiAoIWFkZXYtPnV2ZC5pbnN0W2pdLnNhdmVkX2JvKQor CQkJcmV0dXJuIC1FTk9NRU07CiAKKwkJbWVtY3B5X2Zyb21pbyhhZGV2LT51dmQuaW5zdFtqXS5z YXZlZF9ibywgcHRyLCBzaXplKTsKKwl9CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM0MCw1OSArMzQ1 LDY1IEBAIGludCBhbWRncHVfdXZkX3Jlc3VtZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikK IHsKIAl1bnNpZ25lZCBzaXplOwogCXZvaWQgKnB0cjsKKwlpbnQgaTsKIAotCWlmIChhZGV2LT51 dmQuaW5zdC0+dmNwdV9ibyA9PSBOVUxMKQotCQlyZXR1cm4gLUVJTlZBTDsKKwlmb3IgKGkgPSAw OyBpIDwgYWRldi0+dXZkLm51bV91dmRfaW5zdDsgaSsrKSB7CisJCWlmIChhZGV2LT51dmQuaW5z dFtpXS52Y3B1X2JvID09IE5VTEwpCisJCQlyZXR1cm4gLUVJTlZBTDsKIAotCXNpemUgPSBhbWRn cHVfYm9fc2l6ZShhZGV2LT51dmQuaW5zdC0+dmNwdV9ibyk7Ci0JcHRyID0gYWRldi0+dXZkLmlu c3QtPmNwdV9hZGRyOworCQlzaXplID0gYW1kZ3B1X2JvX3NpemUoYWRldi0+dXZkLmluc3RbaV0u dmNwdV9ibyk7CisJCXB0ciA9IGFkZXYtPnV2ZC5pbnN0W2ldLmNwdV9hZGRyOwogCi0JaWYgKGFk ZXYtPnV2ZC5pbnN0LT5zYXZlZF9ibyAhPSBOVUxMKSB7Ci0JCW1lbWNweV90b2lvKHB0ciwgYWRl di0+dXZkLmluc3QtPnNhdmVkX2JvLCBzaXplKTsKLQkJa2ZyZWUoYWRldi0+dXZkLmluc3QtPnNh dmVkX2JvKTsKLQkJYWRldi0+dXZkLmluc3QtPnNhdmVkX2JvID0gTlVMTDsKLQl9IGVsc2Ugewot CQljb25zdCBzdHJ1Y3QgY29tbW9uX2Zpcm13YXJlX2hlYWRlciAqaGRyOwotCQl1bnNpZ25lZCBv ZmZzZXQ7Ci0KLQkJaGRyID0gKGNvbnN0IHN0cnVjdCBjb21tb25fZmlybXdhcmVfaGVhZGVyICop YWRldi0+dXZkLmZ3LT5kYXRhOwotCQlpZiAoYWRldi0+ZmlybXdhcmUubG9hZF90eXBlICE9IEFN REdQVV9GV19MT0FEX1BTUCkgewotCQkJb2Zmc2V0ID0gbGUzMl90b19jcHUoaGRyLT51Y29kZV9h cnJheV9vZmZzZXRfYnl0ZXMpOwotCQkJbWVtY3B5X3RvaW8oYWRldi0+dXZkLmluc3QtPmNwdV9h ZGRyLCBhZGV2LT51dmQuZnctPmRhdGEgKyBvZmZzZXQsCi0JCQkJICAgIGxlMzJfdG9fY3B1KGhk ci0+dWNvZGVfc2l6ZV9ieXRlcykpOwotCQkJc2l6ZSAtPSBsZTMyX3RvX2NwdShoZHItPnVjb2Rl X3NpemVfYnl0ZXMpOwotCQkJcHRyICs9IGxlMzJfdG9fY3B1KGhkci0+dWNvZGVfc2l6ZV9ieXRl cyk7CisJCWlmIChhZGV2LT51dmQuaW5zdFtpXS5zYXZlZF9ibyAhPSBOVUxMKSB7CisJCQltZW1j cHlfdG9pbyhwdHIsIGFkZXYtPnV2ZC5pbnN0W2ldLnNhdmVkX2JvLCBzaXplKTsKKwkJCWtmcmVl KGFkZXYtPnV2ZC5pbnN0W2ldLnNhdmVkX2JvKTsKKwkJCWFkZXYtPnV2ZC5pbnN0W2ldLnNhdmVk X2JvID0gTlVMTDsKKwkJfSBlbHNlIHsKKwkJCWNvbnN0IHN0cnVjdCBjb21tb25fZmlybXdhcmVf aGVhZGVyICpoZHI7CisJCQl1bnNpZ25lZCBvZmZzZXQ7CisKKwkJCWhkciA9IChjb25zdCBzdHJ1 Y3QgY29tbW9uX2Zpcm13YXJlX2hlYWRlciAqKWFkZXYtPnV2ZC5mdy0+ZGF0YTsKKwkJCWlmIChh ZGV2LT5maXJtd2FyZS5sb2FkX3R5cGUgIT0gQU1ER1BVX0ZXX0xPQURfUFNQKSB7CisJCQkJb2Zm c2V0ID0gbGUzMl90b19jcHUoaGRyLT51Y29kZV9hcnJheV9vZmZzZXRfYnl0ZXMpOworCQkJCW1l bWNweV90b2lvKGFkZXYtPnV2ZC5pbnN0W2ldLmNwdV9hZGRyLCBhZGV2LT51dmQuZnctPmRhdGEg KyBvZmZzZXQsCisJCQkJCSAgICBsZTMyX3RvX2NwdShoZHItPnVjb2RlX3NpemVfYnl0ZXMpKTsK KwkJCQlzaXplIC09IGxlMzJfdG9fY3B1KGhkci0+dWNvZGVfc2l6ZV9ieXRlcyk7CisJCQkJcHRy ICs9IGxlMzJfdG9fY3B1KGhkci0+dWNvZGVfc2l6ZV9ieXRlcyk7CisJCQl9CisJCQltZW1zZXRf aW8ocHRyLCAwLCBzaXplKTsKKwkJCS8qIHRvIHJlc3RvcmUgdXZkIGZlbmNlIHNlcSAqLworCQkJ YW1kZ3B1X2ZlbmNlX2RyaXZlcl9mb3JjZV9jb21wbGV0aW9uKCZhZGV2LT51dmQuaW5zdFtpXS5y aW5nKTsKIAkJfQotCQltZW1zZXRfaW8ocHRyLCAwLCBzaXplKTsKLQkJLyogdG8gcmVzdG9yZSB1 dmQgZmVuY2Ugc2VxICovCi0JCWFtZGdwdV9mZW5jZV9kcml2ZXJfZm9yY2VfY29tcGxldGlvbigm YWRldi0+dXZkLmluc3QtPnJpbmcpOwogCX0KLQogCXJldHVybiAwOwogfQogCiB2b2lkIGFtZGdw dV91dmRfZnJlZV9oYW5kbGVzKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LCBzdHJ1Y3QgZHJt X2ZpbGUgKmZpbHApCiB7Ci0Jc3RydWN0IGFtZGdwdV9yaW5nICpyaW5nID0gJmFkZXYtPnV2ZC5p bnN0LT5yaW5nOwotCWludCBpLCByOworCXN0cnVjdCBhbWRncHVfcmluZyAqcmluZzsKKwlpbnQg aSwgaiwgcjsKIAotCWZvciAoaSA9IDA7IGkgPCBhZGV2LT51dmQubWF4X2hhbmRsZXM7ICsraSkg ewotCQl1aW50MzJfdCBoYW5kbGUgPSBhdG9taWNfcmVhZCgmYWRldi0+dXZkLmluc3QtPmhhbmRs ZXNbaV0pOwotCQlpZiAoaGFuZGxlICE9IDAgJiYgYWRldi0+dXZkLmluc3QtPmZpbHBbaV0gPT0g ZmlscCkgewotCQkJc3RydWN0IGRtYV9mZW5jZSAqZmVuY2U7Ci0KLQkJCXIgPSBhbWRncHVfdXZk X2dldF9kZXN0cm95X21zZyhyaW5nLCBoYW5kbGUsCi0JCQkJCQkgICAgICAgZmFsc2UsICZmZW5j ZSk7Ci0JCQlpZiAocikgewotCQkJCURSTV9FUlJPUigiRXJyb3IgZGVzdHJveWluZyBVVkQgKCVk KSFcbiIsIHIpOwotCQkJCWNvbnRpbnVlOwotCQkJfQorCWZvciAoaiA9IDA7IGogPCBhZGV2LT51 dmQubnVtX3V2ZF9pbnN0OyBqKyspIHsKKwkJcmluZyA9ICZhZGV2LT51dmQuaW5zdFtqXS5yaW5n OwogCi0JCQlkbWFfZmVuY2Vfd2FpdChmZW5jZSwgZmFsc2UpOwotCQkJZG1hX2ZlbmNlX3B1dChm ZW5jZSk7CisJCWZvciAoaSA9IDA7IGkgPCBhZGV2LT51dmQubWF4X2hhbmRsZXM7ICsraSkgewor CQkJdWludDMyX3QgaGFuZGxlID0gYXRvbWljX3JlYWQoJmFkZXYtPnV2ZC5pbnN0W2pdLmhhbmRs ZXNbaV0pOworCQkJaWYgKGhhbmRsZSAhPSAwICYmIGFkZXYtPnV2ZC5pbnN0W2pdLmZpbHBbaV0g PT0gZmlscCkgeworCQkJCXN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlOworCisJCQkJciA9IGFtZGdw dV91dmRfZ2V0X2Rlc3Ryb3lfbXNnKHJpbmcsIGhhbmRsZSwKKwkJCQkJCQkgICAgICAgZmFsc2Us ICZmZW5jZSk7CisJCQkJaWYgKHIpIHsKKwkJCQkJRFJNX0VSUk9SKCJFcnJvciBkZXN0cm95aW5n IFVWRCglZCkgJWQhXG4iLCBqLCByKTsKKwkJCQkJY29udGludWU7CisJCQkJfQogCi0JCQlhZGV2 LT51dmQuaW5zdC0+ZmlscFtpXSA9IE5VTEw7Ci0JCQlhdG9taWNfc2V0KCZhZGV2LT51dmQuaW5z dC0+aGFuZGxlc1tpXSwgMCk7CisJCQkJZG1hX2ZlbmNlX3dhaXQoZmVuY2UsIGZhbHNlKTsKKwkJ CQlkbWFfZmVuY2VfcHV0KGZlbmNlKTsKKworCQkJCWFkZXYtPnV2ZC5pbnN0W2pdLmZpbHBbaV0g PSBOVUxMOworCQkJCWF0b21pY19zZXQoJmFkZXYtPnV2ZC5pbnN0W2pdLmhhbmRsZXNbaV0sIDAp OworCQkJfQogCQl9CiAJfQogfQpAQCAtNjY3LDE1ICs2NzgsMTYgQEAgc3RhdGljIGludCBhbWRn cHVfdXZkX2NzX21zZyhzdHJ1Y3QgYW1kZ3B1X3V2ZF9jc19jdHggKmN0eCwKIAl2b2lkICpwdHI7 CiAJbG9uZyByOwogCWludCBpOworCXVpbnQzMl90IGlwX2luc3RhbmNlID0gY3R4LT5wYXJzZXIt PmpvYi0+cmluZy0+bWU7CiAKIAlpZiAob2Zmc2V0ICYgMHgzRikgewotCQlEUk1fRVJST1IoIlVW RCBtZXNzYWdlcyBtdXN0IGJlIDY0IGJ5dGUgYWxpZ25lZCFcbiIpOworCQlEUk1fRVJST1IoIlVW RCglZCkgbWVzc2FnZXMgbXVzdCBiZSA2NCBieXRlIGFsaWduZWQhXG4iLCBpcF9pbnN0YW5jZSk7 CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCXIgPSBhbWRncHVfYm9fa21hcChibywgJnB0cik7 CiAJaWYgKHIpIHsKLQkJRFJNX0VSUk9SKCJGYWlsZWQgbWFwcGluZyB0aGUgVVZEIG1lc3NhZ2Ug KCVsZCkhXG4iLCByKTsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgbWFwcGluZyB0aGUgVVZEKCVkKSBt ZXNzYWdlICglbGQpIVxuIiwgaXBfaW5zdGFuY2UsIHIpOwogCQlyZXR1cm4gcjsKIAl9CiAKQEAg LTY4NSw3ICs2OTcsNyBAQCBzdGF0aWMgaW50IGFtZGdwdV91dmRfY3NfbXNnKHN0cnVjdCBhbWRn cHVfdXZkX2NzX2N0eCAqY3R4LAogCWhhbmRsZSA9IG1zZ1syXTsKIAogCWlmIChoYW5kbGUgPT0g MCkgewotCQlEUk1fRVJST1IoIkludmFsaWQgVVZEIGhhbmRsZSFcbiIpOworCQlEUk1fRVJST1Io IkludmFsaWQgVVZEKCVkKSBoYW5kbGUhXG4iLCBpcF9pbnN0YW5jZSk7CiAJCXJldHVybiAtRUlO VkFMOwogCX0KIApAQCAtNjk2LDE4ICs3MDgsMTggQEAgc3RhdGljIGludCBhbWRncHVfdXZkX2Nz X21zZyhzdHJ1Y3QgYW1kZ3B1X3V2ZF9jc19jdHggKmN0eCwKIAogCQkvKiB0cnkgdG8gYWxsb2Mg YSBuZXcgaGFuZGxlICovCiAJCWZvciAoaSA9IDA7IGkgPCBhZGV2LT51dmQubWF4X2hhbmRsZXM7 ICsraSkgewotCQkJaWYgKGF0b21pY19yZWFkKCZhZGV2LT51dmQuaW5zdC0+aGFuZGxlc1tpXSkg PT0gaGFuZGxlKSB7Ci0JCQkJRFJNX0VSUk9SKCJIYW5kbGUgMHgleCBhbHJlYWR5IGluIHVzZSFc biIsIGhhbmRsZSk7CisJCQlpZiAoYXRvbWljX3JlYWQoJmFkZXYtPnV2ZC5pbnN0W2lwX2luc3Rh bmNlXS5oYW5kbGVzW2ldKSA9PSBoYW5kbGUpIHsKKwkJCQlEUk1fRVJST1IoIiglZClIYW5kbGUg MHgleCBhbHJlYWR5IGluIHVzZSFcbiIsIGlwX2luc3RhbmNlLCBoYW5kbGUpOwogCQkJCXJldHVy biAtRUlOVkFMOwogCQkJfQogCi0JCQlpZiAoIWF0b21pY19jbXB4Y2hnKCZhZGV2LT51dmQuaW5z dC0+aGFuZGxlc1tpXSwgMCwgaGFuZGxlKSkgewotCQkJCWFkZXYtPnV2ZC5pbnN0LT5maWxwW2ld ID0gY3R4LT5wYXJzZXItPmZpbHA7CisJCQlpZiAoIWF0b21pY19jbXB4Y2hnKCZhZGV2LT51dmQu aW5zdFtpcF9pbnN0YW5jZV0uaGFuZGxlc1tpXSwgMCwgaGFuZGxlKSkgeworCQkJCWFkZXYtPnV2 ZC5pbnN0W2lwX2luc3RhbmNlXS5maWxwW2ldID0gY3R4LT5wYXJzZXItPmZpbHA7CiAJCQkJcmV0 dXJuIDA7CiAJCQl9CiAJCX0KIAotCQlEUk1fRVJST1IoIk5vIG1vcmUgZnJlZSBVVkQgaGFuZGxl cyFcbiIpOworCQlEUk1fRVJST1IoIk5vIG1vcmUgZnJlZSBVVkQoJWQpIGhhbmRsZXMhXG4iLCBp cF9pbnN0YW5jZSk7CiAJCXJldHVybiAtRU5PU1BDOwogCiAJY2FzZSAxOgpAQCAtNzE5LDI3ICs3 MzEsMjcgQEAgc3RhdGljIGludCBhbWRncHVfdXZkX2NzX21zZyhzdHJ1Y3QgYW1kZ3B1X3V2ZF9j c19jdHggKmN0eCwKIAogCQkvKiB2YWxpZGF0ZSB0aGUgaGFuZGxlICovCiAJCWZvciAoaSA9IDA7 IGkgPCBhZGV2LT51dmQubWF4X2hhbmRsZXM7ICsraSkgewotCQkJaWYgKGF0b21pY19yZWFkKCZh ZGV2LT51dmQuaW5zdC0+aGFuZGxlc1tpXSkgPT0gaGFuZGxlKSB7Ci0JCQkJaWYgKGFkZXYtPnV2 ZC5pbnN0LT5maWxwW2ldICE9IGN0eC0+cGFyc2VyLT5maWxwKSB7Ci0JCQkJCURSTV9FUlJPUigi VVZEIGhhbmRsZSBjb2xsaXNpb24gZGV0ZWN0ZWQhXG4iKTsKKwkJCWlmIChhdG9taWNfcmVhZCgm YWRldi0+dXZkLmluc3RbaXBfaW5zdGFuY2VdLmhhbmRsZXNbaV0pID09IGhhbmRsZSkgeworCQkJ CWlmIChhZGV2LT51dmQuaW5zdFtpcF9pbnN0YW5jZV0uZmlscFtpXSAhPSBjdHgtPnBhcnNlci0+ ZmlscCkgeworCQkJCQlEUk1fRVJST1IoIlVWRCglZCkgaGFuZGxlIGNvbGxpc2lvbiBkZXRlY3Rl ZCFcbiIsIGlwX2luc3RhbmNlKTsKIAkJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQkJfQogCQkJCXJl dHVybiAwOwogCQkJfQogCQl9CiAKLQkJRFJNX0VSUk9SKCJJbnZhbGlkIFVWRCBoYW5kbGUgMHgl eCFcbiIsIGhhbmRsZSk7CisJCURSTV9FUlJPUigiSW52YWxpZCBVVkQoJWQpIGhhbmRsZSAweCV4 IVxuIiwgaXBfaW5zdGFuY2UsIGhhbmRsZSk7CiAJCXJldHVybiAtRU5PRU5UOwogCiAJY2FzZSAy OgogCQkvKiBpdCdzIGEgZGVzdHJveSBtc2csIGZyZWUgdGhlIGhhbmRsZSAqLwogCQlmb3IgKGkg PSAwOyBpIDwgYWRldi0+dXZkLm1heF9oYW5kbGVzOyArK2kpCi0JCQlhdG9taWNfY21weGNoZygm YWRldi0+dXZkLmluc3QtPmhhbmRsZXNbaV0sIGhhbmRsZSwgMCk7CisJCQlhdG9taWNfY21weGNo ZygmYWRldi0+dXZkLmluc3RbaXBfaW5zdGFuY2VdLmhhbmRsZXNbaV0sIGhhbmRsZSwgMCk7CiAJ CWFtZGdwdV9ib19rdW5tYXAoYm8pOwogCQlyZXR1cm4gMDsKIAogCWRlZmF1bHQ6Ci0JCURSTV9F UlJPUigiSWxsZWdhbCBVVkQgbWVzc2FnZSB0eXBlICglZCkhXG4iLCBtc2dfdHlwZSk7CisJCURS TV9FUlJPUigiSWxsZWdhbCBVVkQoJWQpIG1lc3NhZ2UgdHlwZSAoJWQpIVxuIiwgaXBfaW5zdGFu Y2UsIG1zZ190eXBlKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCUJVRygpOwpAQCAtMTA0Myw3 ICsxMDU1LDcgQEAgc3RhdGljIGludCBhbWRncHVfdXZkX3NlbmRfbXNnKHN0cnVjdCBhbWRncHVf cmluZyAqcmluZywgc3RydWN0IGFtZGdwdV9ibyAqYm8sCiAJCWlmIChyKQogCQkJZ290byBlcnJf ZnJlZTsKIAotCQlyID0gYW1kZ3B1X2pvYl9zdWJtaXQoam9iLCByaW5nLCAmYWRldi0+dXZkLmlu c3QtPmVudGl0eSwKKwkJciA9IGFtZGdwdV9qb2Jfc3VibWl0KGpvYiwgcmluZywgJmFkZXYtPnV2 ZC5pbnN0W3JpbmctPm1lXS5lbnRpdHksCiAJCQkJICAgICAgQU1ER1BVX0ZFTkNFX09XTkVSX1VO REVGSU5FRCwgJmYpOwogCQlpZiAocikKIAkJCWdvdG8gZXJyX2ZyZWU7CkBAIC0xMTg5LDI3ICsx MjAxLDI4IEBAIGludCBhbWRncHVfdXZkX3JpbmdfdGVzdF9pYihzdHJ1Y3QgYW1kZ3B1X3Jpbmcg KnJpbmcsIGxvbmcgdGltZW91dCkKIHsKIAlzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZTsKIAlsb25n IHI7CisJdWludDMyX3QgaXBfaW5zdGFuY2UgPSByaW5nLT5tZTsKIAogCXIgPSBhbWRncHVfdXZk X2dldF9jcmVhdGVfbXNnKHJpbmcsIDEsIE5VTEwpOwogCWlmIChyKSB7Ci0JCURSTV9FUlJPUigi YW1kZ3B1OiBmYWlsZWQgdG8gZ2V0IGNyZWF0ZSBtc2cgKCVsZCkuXG4iLCByKTsKKwkJRFJNX0VS Uk9SKCJhbWRncHU6ICglZClmYWlsZWQgdG8gZ2V0IGNyZWF0ZSBtc2cgKCVsZCkuXG4iLCBpcF9p bnN0YW5jZSwgcik7CiAJCWdvdG8gZXJyb3I7CiAJfQogCiAJciA9IGFtZGdwdV91dmRfZ2V0X2Rl c3Ryb3lfbXNnKHJpbmcsIDEsIHRydWUsICZmZW5jZSk7CiAJaWYgKHIpIHsKLQkJRFJNX0VSUk9S KCJhbWRncHU6IGZhaWxlZCB0byBnZXQgZGVzdHJveSBpYiAoJWxkKS5cbiIsIHIpOworCQlEUk1f RVJST1IoImFtZGdwdTogKCVkKWZhaWxlZCB0byBnZXQgZGVzdHJveSBpYiAoJWxkKS5cbiIsIGlw X2luc3RhbmNlLCByKTsKIAkJZ290byBlcnJvcjsKIAl9CiAKIAlyID0gZG1hX2ZlbmNlX3dhaXRf dGltZW91dChmZW5jZSwgZmFsc2UsIHRpbWVvdXQpOwogCWlmIChyID09IDApIHsKLQkJRFJNX0VS Uk9SKCJhbWRncHU6IElCIHRlc3QgdGltZWQgb3V0LlxuIik7CisJCURSTV9FUlJPUigiYW1kZ3B1 OiAoJWQpSUIgdGVzdCB0aW1lZCBvdXQuXG4iLCBpcF9pbnN0YW5jZSk7CiAJCXIgPSAtRVRJTUVE T1VUOwogCX0gZWxzZSBpZiAociA8IDApIHsKLQkJRFJNX0VSUk9SKCJhbWRncHU6IGZlbmNlIHdh aXQgZmFpbGVkICglbGQpLlxuIiwgcik7CisJCURSTV9FUlJPUigiYW1kZ3B1OiAoJWQpZmVuY2Ug d2FpdCBmYWlsZWQgKCVsZCkuXG4iLCBpcF9pbnN0YW5jZSwgcik7CiAJfSBlbHNlIHsKLQkJRFJN X0RFQlVHKCJpYiB0ZXN0IG9uIHJpbmcgJWQgc3VjY2VlZGVkXG4iLCByaW5nLT5pZHgpOworCQlE Uk1fREVCVUcoImliIHRlc3Qgb24gKCVkKXJpbmcgJWQgc3VjY2VlZGVkXG4iLCBpcF9pbnN0YW5j ZSwgcmluZy0+aWR4KTsKIAkJciA9IDA7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vYW1kL2FtZGdwdS91dmRfdjdfMC5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvdXZk X3Y3XzAuYwppbmRleCA1NWIyMDJiZTMzNDUuLjhlYzk4YjBiYjQyZCAxMDA2NDQKLS0tIGEvZHJp dmVycy9ncHUvZHJtL2FtZC9hbWRncHUvdXZkX3Y3XzAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0v YW1kL2FtZGdwdS91dmRfdjdfMC5jCkBAIC01OCw3ICs1OCw3IEBAIHN0YXRpYyB1aW50NjRfdCB1 dmRfdjdfMF9yaW5nX2dldF9ycHRyKHN0cnVjdCBhbWRncHVfcmluZyAqcmluZykKIHsKIAlzdHJ1 Y3QgYW1kZ3B1X2RldmljZSAqYWRldiA9IHJpbmctPmFkZXY7CiAKLQlyZXR1cm4gUlJFRzMyX1NP QzE1KFVWRCwgMCwgbW1VVkRfUkJDX1JCX1JQVFIpOworCXJldHVybiBSUkVHMzJfU09DMTUoVVZE LCByaW5nLT5tZSwgbW1VVkRfUkJDX1JCX1JQVFIpOwogfQogCiAvKioKQEAgLTcyLDEwICs3Miwx MCBAQCBzdGF0aWMgdWludDY0X3QgdXZkX3Y3XzBfZW5jX3JpbmdfZ2V0X3JwdHIoc3RydWN0IGFt ZGdwdV9yaW5nICpyaW5nKQogewogCXN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0gcmluZy0+ YWRldjsKIAotCWlmIChyaW5nID09ICZhZGV2LT51dmQuaW5zdC0+cmluZ19lbmNbMF0pCi0JCXJl dHVybiBSUkVHMzJfU09DMTUoVVZELCAwLCBtbVVWRF9SQl9SUFRSKTsKKwlpZiAocmluZyA9PSAm YWRldi0+dXZkLmluc3RbcmluZy0+bWVdLnJpbmdfZW5jWzBdKQorCQlyZXR1cm4gUlJFRzMyX1NP QzE1KFVWRCwgcmluZy0+bWUsIG1tVVZEX1JCX1JQVFIpOwogCWVsc2UKLQkJcmV0dXJuIFJSRUcz Ml9TT0MxNShVVkQsIDAsIG1tVVZEX1JCX1JQVFIyKTsKKwkJcmV0dXJuIFJSRUczMl9TT0MxNShV VkQsIHJpbmctPm1lLCBtbVVWRF9SQl9SUFRSMik7CiB9CiAKIC8qKgpAQCAtODksNyArODksNyBA QCBzdGF0aWMgdWludDY0X3QgdXZkX3Y3XzBfcmluZ19nZXRfd3B0cihzdHJ1Y3QgYW1kZ3B1X3Jp bmcgKnJpbmcpCiB7CiAJc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSByaW5nLT5hZGV2Owog Ci0JcmV0dXJuIFJSRUczMl9TT0MxNShVVkQsIDAsIG1tVVZEX1JCQ19SQl9XUFRSKTsKKwlyZXR1 cm4gUlJFRzMyX1NPQzE1KFVWRCwgcmluZy0+bWUsIG1tVVZEX1JCQ19SQl9XUFRSKTsKIH0KIAog LyoqCkBAIC0xMDYsMTAgKzEwNiwxMCBAQCBzdGF0aWMgdWludDY0X3QgdXZkX3Y3XzBfZW5jX3Jp bmdfZ2V0X3dwdHIoc3RydWN0IGFtZGdwdV9yaW5nICpyaW5nKQogCWlmIChyaW5nLT51c2VfZG9v cmJlbGwpCiAJCXJldHVybiBhZGV2LT53Yi53YltyaW5nLT53cHRyX29mZnNdOwogCi0JaWYgKHJp bmcgPT0gJmFkZXYtPnV2ZC5pbnN0LT5yaW5nX2VuY1swXSkKLQkJcmV0dXJuIFJSRUczMl9TT0Mx NShVVkQsIDAsIG1tVVZEX1JCX1dQVFIpOworCWlmIChyaW5nID09ICZhZGV2LT51dmQuaW5zdFty aW5nLT5tZV0ucmluZ19lbmNbMF0pCisJCXJldHVybiBSUkVHMzJfU09DMTUoVVZELCByaW5nLT5t ZSwgbW1VVkRfUkJfV1BUUik7CiAJZWxzZQotCQlyZXR1cm4gUlJFRzMyX1NPQzE1KFVWRCwgMCwg bW1VVkRfUkJfV1BUUjIpOworCQlyZXR1cm4gUlJFRzMyX1NPQzE1KFVWRCwgcmluZy0+bWUsIG1t VVZEX1JCX1dQVFIyKTsKIH0KIAogLyoqCkBAIC0xMjMsNyArMTIzLDcgQEAgc3RhdGljIHZvaWQg dXZkX3Y3XzBfcmluZ19zZXRfd3B0cihzdHJ1Y3QgYW1kZ3B1X3JpbmcgKnJpbmcpCiB7CiAJc3Ry dWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSByaW5nLT5hZGV2OwogCi0JV1JFRzMyX1NPQzE1KFVW RCwgMCwgbW1VVkRfUkJDX1JCX1dQVFIsIGxvd2VyXzMyX2JpdHMocmluZy0+d3B0cikpOworCVdS RUczMl9TT0MxNShVVkQsIHJpbmctPm1lLCBtbVVWRF9SQkNfUkJfV1BUUiwgbG93ZXJfMzJfYml0 cyhyaW5nLT53cHRyKSk7CiB9CiAKIC8qKgpAQCAtMTQ0LDExICsxNDQsMTEgQEAgc3RhdGljIHZv aWQgdXZkX3Y3XzBfZW5jX3Jpbmdfc2V0X3dwdHIoc3RydWN0IGFtZGdwdV9yaW5nICpyaW5nKQog CQlyZXR1cm47CiAJfQogCi0JaWYgKHJpbmcgPT0gJmFkZXYtPnV2ZC5pbnN0LT5yaW5nX2VuY1sw XSkKLQkJV1JFRzMyX1NPQzE1KFVWRCwgMCwgbW1VVkRfUkJfV1BUUiwKKwlpZiAocmluZyA9PSAm YWRldi0+dXZkLmluc3RbcmluZy0+bWVdLnJpbmdfZW5jWzBdKQorCQlXUkVHMzJfU09DMTUoVVZE LCByaW5nLT5tZSwgbW1VVkRfUkJfV1BUUiwKIAkJCWxvd2VyXzMyX2JpdHMocmluZy0+d3B0cikp OwogCWVsc2UKLQkJV1JFRzMyX1NPQzE1KFVWRCwgMCwgbW1VVkRfUkJfV1BUUjIsCisJCVdSRUcz Ml9TT0MxNShVVkQsIHJpbmctPm1lLCBtbVVWRF9SQl9XUFRSMiwKIAkJCWxvd2VyXzMyX2JpdHMo cmluZy0+d3B0cikpOwogfQogCkBAIC0zODcsMTkgKzM4NywyMSBAQCBzdGF0aWMgaW50IHV2ZF92 N18wX3N3X2luaXQodm9pZCAqaGFuZGxlKQogewogCXN0cnVjdCBhbWRncHVfcmluZyAqcmluZzsK IAlzdHJ1Y3QgZHJtX3NjaGVkX3JxICpycTsKLQlpbnQgaSwgcjsKKwlpbnQgaSwgaiwgcjsKIAlz dHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiA9IChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqKWhhbmRs ZTsKIAotCS8qIFVWRCBUUkFQICovCi0JciA9IGFtZGdwdV9pcnFfYWRkX2lkKGFkZXYsIFNPQzE1 X0lIX0NMSUVOVElEX1VWRCwgMTI0LCAmYWRldi0+dXZkLmluc3QtPmlycSk7Ci0JaWYgKHIpCi0J CXJldHVybiByOwotCi0JLyogVVZEIEVOQyBUUkFQICovCi0JZm9yIChpID0gMDsgaSA8IGFkZXYt PnV2ZC5udW1fZW5jX3JpbmdzOyArK2kpIHsKLQkJciA9IGFtZGdwdV9pcnFfYWRkX2lkKGFkZXYs IFNPQzE1X0lIX0NMSUVOVElEX1VWRCwgaSArIDExOSwgJmFkZXYtPnV2ZC5pbnN0LT5pcnEpOwor CWZvciAoaiA9IDA7IGogPCBhZGV2LT51dmQubnVtX3V2ZF9pbnN0OyBqKyspIHsKKwkJLyogVVZE IFRSQVAgKi8KKwkJciA9IGFtZGdwdV9pcnFfYWRkX2lkKGFkZXYsIFNPQzE1X0lIX0NMSUVOVElE X1VWRCwgMTI0LCAmYWRldi0+dXZkLmluc3Rbal0uaXJxKTsKIAkJaWYgKHIpCiAJCQlyZXR1cm4g cjsKKworCQkvKiBVVkQgRU5DIFRSQVAgKi8KKwkJZm9yIChpID0gMDsgaSA8IGFkZXYtPnV2ZC5u dW1fZW5jX3JpbmdzOyArK2kpIHsKKwkJCXIgPSBhbWRncHVfaXJxX2FkZF9pZChhZGV2LCBTT0Mx NV9JSF9DTElFTlRJRF9VVkQsIGkgKyAxMTksICZhZGV2LT51dmQuaW5zdFtqXS5pcnEpOworCQkJ aWYgKHIpCisJCQkJcmV0dXJuIHI7CisJCX0KIAl9CiAKIAlyID0gYW1kZ3B1X3V2ZF9zd19pbml0 KGFkZXYpOwpAQCAtNDE2LDQzICs0MTgsNDggQEAgc3RhdGljIGludCB1dmRfdjdfMF9zd19pbml0 KHZvaWQgKmhhbmRsZSkKIAkJRFJNX0lORk8oIlBTUCBsb2FkaW5nIFVWRCBmaXJtd2FyZVxuIik7 CiAJfQogCi0JcmluZyA9ICZhZGV2LT51dmQuaW5zdC0+cmluZ19lbmNbMF07Ci0JcnEgPSAmcmlu Zy0+c2NoZWQuc2NoZWRfcnFbRFJNX1NDSEVEX1BSSU9SSVRZX05PUk1BTF07Ci0JciA9IGRybV9z Y2hlZF9lbnRpdHlfaW5pdCgmcmluZy0+c2NoZWQsICZhZGV2LT51dmQuaW5zdC0+ZW50aXR5X2Vu YywKLQkJCQkgIHJxLCBhbWRncHVfc2NoZWRfam9icywgTlVMTCk7Ci0JaWYgKHIpIHsKLQkJRFJN X0VSUk9SKCJGYWlsZWQgc2V0dGluZyB1cCBVVkQgRU5DIHJ1biBxdWV1ZS5cbiIpOwotCQlyZXR1 cm4gcjsKKwlmb3IgKGogPSAwOyBqIDwgYWRldi0+dXZkLm51bV91dmRfaW5zdDsgaisrKSB7CisJ CXJpbmcgPSAmYWRldi0+dXZkLmluc3Rbal0ucmluZ19lbmNbMF07CisJCXJxID0gJnJpbmctPnNj aGVkLnNjaGVkX3JxW0RSTV9TQ0hFRF9QUklPUklUWV9OT1JNQUxdOworCQlyID0gZHJtX3NjaGVk X2VudGl0eV9pbml0KCZyaW5nLT5zY2hlZCwgJmFkZXYtPnV2ZC5pbnN0W2pdLmVudGl0eV9lbmMs CisJCQkJCSAgcnEsIGFtZGdwdV9zY2hlZF9qb2JzLCBOVUxMKTsKKwkJaWYgKHIpIHsKKwkJCURS TV9FUlJPUigiKCVkKUZhaWxlZCBzZXR0aW5nIHVwIFVWRCBFTkMgcnVuIHF1ZXVlLlxuIiwgaik7 CisJCQlyZXR1cm4gcjsKKwkJfQogCX0KIAogCXIgPSBhbWRncHVfdXZkX3Jlc3VtZShhZGV2KTsK IAlpZiAocikKIAkJcmV0dXJuIHI7Ci0JaWYgKCFhbWRncHVfc3Jpb3ZfdmYoYWRldikpIHsKLQkJ cmluZyA9ICZhZGV2LT51dmQuaW5zdC0+cmluZzsKLQkJc3ByaW50ZihyaW5nLT5uYW1lLCAidXZk Iik7Ci0JCXIgPSBhbWRncHVfcmluZ19pbml0KGFkZXYsIHJpbmcsIDUxMiwgJmFkZXYtPnV2ZC5p bnN0LT5pcnEsIDApOwotCQlpZiAocikKLQkJCXJldHVybiByOwotCX0KIAotCWZvciAoaSA9IDA7 IGkgPCBhZGV2LT51dmQubnVtX2VuY19yaW5nczsgKytpKSB7Ci0JCXJpbmcgPSAmYWRldi0+dXZk Lmluc3QtPnJpbmdfZW5jW2ldOwotCQlzcHJpbnRmKHJpbmctPm5hbWUsICJ1dmRfZW5jJWQiLCBp KTsKLQkJaWYgKGFtZGdwdV9zcmlvdl92ZihhZGV2KSkgewotCQkJcmluZy0+dXNlX2Rvb3JiZWxs ID0gdHJ1ZTsKLQotCQkJLyogY3VycmVudGx5IG9ubHkgdXNlIHRoZSBmaXJzdCBlbmNvbmRpbmcg cmluZyBmb3IKLQkJCSAqIHNyaW92LCBzbyBzZXQgdW51c2VkIGxvY2F0aW9uIGZvciBvdGhlciB1 bnVzZWQgcmluZ3MuCi0JCQkgKi8KLQkJCWlmIChpID09IDApCi0JCQkJcmluZy0+ZG9vcmJlbGxf aW5kZXggPSBBTURHUFVfRE9PUkJFTEw2NF9VVkRfUklORzBfMSAqIDI7Ci0JCQllbHNlCi0JCQkJ cmluZy0+ZG9vcmJlbGxfaW5kZXggPSBBTURHUFVfRE9PUkJFTEw2NF9VVkRfUklORzJfMyAqIDIg KyAxOworCWZvciAoaiA9IDA7IGogPCBhZGV2LT51dmQubnVtX3V2ZF9pbnN0OyBqKyspIHsKKwkJ aWYgKCFhbWRncHVfc3Jpb3ZfdmYoYWRldikpIHsKKwkJCXJpbmcgPSAmYWRldi0+dXZkLmluc3Rb al0ucmluZzsKKwkJCXNwcmludGYocmluZy0+bmFtZSwgInV2ZDwlZD4iLCBqKTsKKwkJCXIgPSBh bWRncHVfcmluZ19pbml0KGFkZXYsIHJpbmcsIDUxMiwgJmFkZXYtPnV2ZC5pbnN0W2pdLmlycSwg MCk7CisJCQlpZiAocikKKwkJCQlyZXR1cm4gcjsKKwkJfQorCisJCWZvciAoaSA9IDA7IGkgPCBh ZGV2LT51dmQubnVtX2VuY19yaW5nczsgKytpKSB7CisJCQlyaW5nID0gJmFkZXYtPnV2ZC5pbnN0 W2pdLnJpbmdfZW5jW2ldOworCQkJc3ByaW50ZihyaW5nLT5uYW1lLCAidXZkX2VuYyVkPCVkPiIs IGksIGopOworCQkJaWYgKGFtZGdwdV9zcmlvdl92ZihhZGV2KSkgeworCQkJCXJpbmctPnVzZV9k b29yYmVsbCA9IHRydWU7CisKKwkJCQkvKiBjdXJyZW50bHkgb25seSB1c2UgdGhlIGZpcnN0IGVu Y29uZGluZyByaW5nIGZvcgorCQkJCSAqIHNyaW92LCBzbyBzZXQgdW51c2VkIGxvY2F0aW9uIGZv ciBvdGhlciB1bnVzZWQgcmluZ3MuCisJCQkJICovCisJCQkJaWYgKGkgPT0gMCkKKwkJCQkJcmlu Zy0+ZG9vcmJlbGxfaW5kZXggPSBBTURHUFVfRE9PUkJFTEw2NF9VVkRfUklORzBfMSAqIDI7CisJ CQkJZWxzZQorCQkJCQlyaW5nLT5kb29yYmVsbF9pbmRleCA9IEFNREdQVV9ET09SQkVMTDY0X1VW RF9SSU5HMl8zICogMiArIDE7CisJCQl9CisJCQlyID0gYW1kZ3B1X3JpbmdfaW5pdChhZGV2LCBy aW5nLCA1MTIsICZhZGV2LT51dmQuaW5zdFtqXS5pcnEsIDApOworCQkJaWYgKHIpCisJCQkJcmV0 dXJuIHI7CiAJCX0KLQkJciA9IGFtZGdwdV9yaW5nX2luaXQoYWRldiwgcmluZywgNTEyLCAmYWRl di0+dXZkLmluc3QtPmlycSwgMCk7Ci0JCWlmIChyKQotCQkJcmV0dXJuIHI7CiAJfQogCiAJciA9 IGFtZGdwdV92aXJ0X2FsbG9jX21tX3RhYmxlKGFkZXYpOwpAQCAtNDY0LDcgKzQ3MSw3IEBAIHN0 YXRpYyBpbnQgdXZkX3Y3XzBfc3dfaW5pdCh2b2lkICpoYW5kbGUpCiAKIHN0YXRpYyBpbnQgdXZk X3Y3XzBfc3dfZmluaSh2b2lkICpoYW5kbGUpCiB7Ci0JaW50IGksIHI7CisJaW50IGksIGosIHI7 CiAJc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSAoc3RydWN0IGFtZGdwdV9kZXZpY2UgKilo YW5kbGU7CiAKIAlhbWRncHVfdmlydF9mcmVlX21tX3RhYmxlKGFkZXYpOwpAQCAtNDczLDExICs0 ODAsMTIgQEAgc3RhdGljIGludCB1dmRfdjdfMF9zd19maW5pKHZvaWQgKmhhbmRsZSkKIAlpZiAo cikKIAkJcmV0dXJuIHI7CiAKLQlkcm1fc2NoZWRfZW50aXR5X2ZpbmkoJmFkZXYtPnV2ZC5pbnN0 LT5yaW5nX2VuY1swXS5zY2hlZCwgJmFkZXYtPnV2ZC5pbnN0LT5lbnRpdHlfZW5jKTsKLQotCWZv ciAoaSA9IDA7IGkgPCBhZGV2LT51dmQubnVtX2VuY19yaW5nczsgKytpKQotCQlhbWRncHVfcmlu Z19maW5pKCZhZGV2LT51dmQuaW5zdC0+cmluZ19lbmNbaV0pOworCWZvciAoaiA9IDA7IGogPCBh ZGV2LT51dmQubnVtX3V2ZF9pbnN0OyArK2opIHsKKwkJZHJtX3NjaGVkX2VudGl0eV9maW5pKCZh ZGV2LT51dmQuaW5zdFtqXS5yaW5nX2VuY1swXS5zY2hlZCwgJmFkZXYtPnV2ZC5pbnN0W2pdLmVu dGl0eV9lbmMpOwogCisJCWZvciAoaSA9IDA7IGkgPCBhZGV2LT51dmQubnVtX2VuY19yaW5nczsg KytpKQorCQkJYW1kZ3B1X3JpbmdfZmluaSgmYWRldi0+dXZkLmluc3Rbal0ucmluZ19lbmNbaV0p OworCX0KIAlyZXR1cm4gYW1kZ3B1X3V2ZF9zd19maW5pKGFkZXYpOwogfQogCkBAIC00OTEsOSAr NDk5LDkgQEAgc3RhdGljIGludCB1dmRfdjdfMF9zd19maW5pKHZvaWQgKmhhbmRsZSkKIHN0YXRp YyBpbnQgdXZkX3Y3XzBfaHdfaW5pdCh2b2lkICpoYW5kbGUpCiB7CiAJc3RydWN0IGFtZGdwdV9k ZXZpY2UgKmFkZXYgPSAoc3RydWN0IGFtZGdwdV9kZXZpY2UgKiloYW5kbGU7Ci0Jc3RydWN0IGFt ZGdwdV9yaW5nICpyaW5nID0gJmFkZXYtPnV2ZC5pbnN0LT5yaW5nOworCXN0cnVjdCBhbWRncHVf cmluZyAqcmluZzsKIAl1aW50MzJfdCB0bXA7Ci0JaW50IGksIHI7CisJaW50IGksIGosIHI7CiAK IAlpZiAoYW1kZ3B1X3NyaW92X3ZmKGFkZXYpKQogCQlyID0gdXZkX3Y3XzBfc3Jpb3Zfc3RhcnQo YWRldik7CkBAIC01MDIsNTcgKzUxMCw2MCBAQCBzdGF0aWMgaW50IHV2ZF92N18wX2h3X2luaXQo dm9pZCAqaGFuZGxlKQogCWlmIChyKQogCQlnb3RvIGRvbmU7CiAKLQlpZiAoIWFtZGdwdV9zcmlv dl92ZihhZGV2KSkgewotCQlyaW5nLT5yZWFkeSA9IHRydWU7Ci0JCXIgPSBhbWRncHVfcmluZ190 ZXN0X3JpbmcocmluZyk7Ci0JCWlmIChyKSB7Ci0JCQlyaW5nLT5yZWFkeSA9IGZhbHNlOwotCQkJ Z290byBkb25lOworCWZvciAoaiA9IDA7IGogPCBhZGV2LT51dmQubnVtX3V2ZF9pbnN0OyArK2op IHsKKwkJcmluZyA9ICZhZGV2LT51dmQuaW5zdFtqXS5yaW5nOworCisJCWlmICghYW1kZ3B1X3Ny aW92X3ZmKGFkZXYpKSB7CisJCQlyaW5nLT5yZWFkeSA9IHRydWU7CisJCQlyID0gYW1kZ3B1X3Jp bmdfdGVzdF9yaW5nKHJpbmcpOworCQkJaWYgKHIpIHsKKwkJCQlyaW5nLT5yZWFkeSA9IGZhbHNl OworCQkJCWdvdG8gZG9uZTsKKwkJCX0KKworCQkJciA9IGFtZGdwdV9yaW5nX2FsbG9jKHJpbmcs IDEwKTsKKwkJCWlmIChyKSB7CisJCQkJRFJNX0VSUk9SKCJhbWRncHU6ICglZClyaW5nIGZhaWxl ZCB0byBsb2NrIFVWRCByaW5nICglZCkuXG4iLCBqLCByKTsKKwkJCQlnb3RvIGRvbmU7CisJCQl9 CisKKwkJCXRtcCA9IFBBQ0tFVDAoU09DMTVfUkVHX09GRlNFVChVVkQsIGosCisJCQkJbW1VVkRf U0VNQV9XQUlUX0ZBVUxUX1RJTUVPVVRfQ05UTCksIDApOworCQkJYW1kZ3B1X3Jpbmdfd3JpdGUo cmluZywgdG1wKTsKKwkJCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIDB4RkZGRkYpOworCisJCQl0 bXAgPSBQQUNLRVQwKFNPQzE1X1JFR19PRkZTRVQoVVZELCBqLAorCQkJCW1tVVZEX1NFTUFfV0FJ VF9JTkNPTVBMRVRFX1RJTUVPVVRfQ05UTCksIDApOworCQkJYW1kZ3B1X3Jpbmdfd3JpdGUocmlu ZywgdG1wKTsKKwkJCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIDB4RkZGRkYpOworCisJCQl0bXAg PSBQQUNLRVQwKFNPQzE1X1JFR19PRkZTRVQoVVZELCBqLAorCQkJCW1tVVZEX1NFTUFfU0lHTkFM X0lOQ09NUExFVEVfVElNRU9VVF9DTlRMKSwgMCk7CisJCQlhbWRncHVfcmluZ193cml0ZShyaW5n LCB0bXApOworCQkJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgMHhGRkZGRik7CisKKwkJCS8qIENs ZWFyIHRpbWVvdXQgc3RhdHVzIGJpdHMgKi8KKwkJCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIFBB Q0tFVDAoU09DMTVfUkVHX09GRlNFVChVVkQsIGosCisJCQkJbW1VVkRfU0VNQV9USU1FT1VUX1NU QVRVUyksIDApKTsKKwkJCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIDB4OCk7CisKKwkJCWFtZGdw dV9yaW5nX3dyaXRlKHJpbmcsIFBBQ0tFVDAoU09DMTVfUkVHX09GRlNFVChVVkQsIGosCisJCQkJ bW1VVkRfU0VNQV9DTlRMKSwgMCkpOworCQkJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgMyk7CisK KwkJCWFtZGdwdV9yaW5nX2NvbW1pdChyaW5nKTsKIAkJfQogCi0JCXIgPSBhbWRncHVfcmluZ19h bGxvYyhyaW5nLCAxMCk7Ci0JCWlmIChyKSB7Ci0JCQlEUk1fRVJST1IoImFtZGdwdTogcmluZyBm YWlsZWQgdG8gbG9jayBVVkQgcmluZyAoJWQpLlxuIiwgcik7Ci0JCQlnb3RvIGRvbmU7CisJCWZv ciAoaSA9IDA7IGkgPCBhZGV2LT51dmQubnVtX2VuY19yaW5nczsgKytpKSB7CisJCQlyaW5nID0g JmFkZXYtPnV2ZC5pbnN0W2pdLnJpbmdfZW5jW2ldOworCQkJcmluZy0+cmVhZHkgPSB0cnVlOwor CQkJciA9IGFtZGdwdV9yaW5nX3Rlc3RfcmluZyhyaW5nKTsKKwkJCWlmIChyKSB7CisJCQkJcmlu Zy0+cmVhZHkgPSBmYWxzZTsKKwkJCQlnb3RvIGRvbmU7CisJCQl9CiAJCX0KLQotCQl0bXAgPSBQ QUNLRVQwKFNPQzE1X1JFR19PRkZTRVQoVVZELCAwLAotCQkJbW1VVkRfU0VNQV9XQUlUX0ZBVUxU X1RJTUVPVVRfQ05UTCksIDApOwotCQlhbWRncHVfcmluZ193cml0ZShyaW5nLCB0bXApOwotCQlh bWRncHVfcmluZ193cml0ZShyaW5nLCAweEZGRkZGKTsKLQotCQl0bXAgPSBQQUNLRVQwKFNPQzE1 X1JFR19PRkZTRVQoVVZELCAwLAotCQkJbW1VVkRfU0VNQV9XQUlUX0lOQ09NUExFVEVfVElNRU9V VF9DTlRMKSwgMCk7Ci0JCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIHRtcCk7Ci0JCWFtZGdwdV9y aW5nX3dyaXRlKHJpbmcsIDB4RkZGRkYpOwotCi0JCXRtcCA9IFBBQ0tFVDAoU09DMTVfUkVHX09G RlNFVChVVkQsIDAsCi0JCQltbVVWRF9TRU1BX1NJR05BTF9JTkNPTVBMRVRFX1RJTUVPVVRfQ05U TCksIDApOwotCQlhbWRncHVfcmluZ193cml0ZShyaW5nLCB0bXApOwotCQlhbWRncHVfcmluZ193 cml0ZShyaW5nLCAweEZGRkZGKTsKLQotCQkvKiBDbGVhciB0aW1lb3V0IHN0YXR1cyBiaXRzICov Ci0JCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIFBBQ0tFVDAoU09DMTVfUkVHX09GRlNFVChVVkQs IDAsCi0JCQltbVVWRF9TRU1BX1RJTUVPVVRfU1RBVFVTKSwgMCkpOwotCQlhbWRncHVfcmluZ193 cml0ZShyaW5nLCAweDgpOwotCi0JCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIFBBQ0tFVDAoU09D MTVfUkVHX09GRlNFVChVVkQsIDAsCi0JCQltbVVWRF9TRU1BX0NOVEwpLCAwKSk7Ci0JCWFtZGdw dV9yaW5nX3dyaXRlKHJpbmcsIDMpOwotCi0JCWFtZGdwdV9yaW5nX2NvbW1pdChyaW5nKTsKIAl9 Ci0KLQlmb3IgKGkgPSAwOyBpIDwgYWRldi0+dXZkLm51bV9lbmNfcmluZ3M7ICsraSkgewotCQly aW5nID0gJmFkZXYtPnV2ZC5pbnN0LT5yaW5nX2VuY1tpXTsKLQkJcmluZy0+cmVhZHkgPSB0cnVl OwotCQlyID0gYW1kZ3B1X3JpbmdfdGVzdF9yaW5nKHJpbmcpOwotCQlpZiAocikgewotCQkJcmlu Zy0+cmVhZHkgPSBmYWxzZTsKLQkJCWdvdG8gZG9uZTsKLQkJfQotCX0KLQogZG9uZToKIAlpZiAo IXIpCiAJCURSTV9JTkZPKCJVVkQgYW5kIFVWRCBFTkMgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5 LlxuIik7CkBAIC01NzAsNyArNTgxLDcgQEAgc3RhdGljIGludCB1dmRfdjdfMF9od19pbml0KHZv aWQgKmhhbmRsZSkKIHN0YXRpYyBpbnQgdXZkX3Y3XzBfaHdfZmluaSh2b2lkICpoYW5kbGUpCiB7 CiAJc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSAoc3RydWN0IGFtZGdwdV9kZXZpY2UgKilo YW5kbGU7Ci0Jc3RydWN0IGFtZGdwdV9yaW5nICpyaW5nID0gJmFkZXYtPnV2ZC5pbnN0LT5yaW5n OworCWludCBpOwogCiAJaWYgKCFhbWRncHVfc3Jpb3ZfdmYoYWRldikpCiAJCXV2ZF92N18wX3N0 b3AoYWRldik7CkBAIC01NzksNyArNTkwLDggQEAgc3RhdGljIGludCB1dmRfdjdfMF9od19maW5p KHZvaWQgKmhhbmRsZSkKIAkJRFJNX0RFQlVHKCJGb3IgU1JJT1YgY2xpZW50LCBzaG91bGRuJ3Qg ZG8gYW55dGhpbmcuXG4iKTsKIAl9CiAKLQlyaW5nLT5yZWFkeSA9IGZhbHNlOworCWZvciAoaSA9 IDA7IGkgPCBhZGV2LT51dmQubnVtX3V2ZF9pbnN0OyArK2kpCisJCWFkZXYtPnV2ZC5pbnN0W2ld LnJpbmcucmVhZHkgPSBmYWxzZTsKIAogCXJldHVybiAwOwogfQpAQCAtNjE5LDQ4ICs2MzEsNTEg QEAgc3RhdGljIHZvaWQgdXZkX3Y3XzBfbWNfcmVzdW1lKHN0cnVjdCBhbWRncHVfZGV2aWNlICph ZGV2KQogewogCXVpbnQzMl90IHNpemUgPSBBTURHUFVfVVZEX0ZJUk1XQVJFX1NJWkUoYWRldik7 CiAJdWludDMyX3Qgb2Zmc2V0OworCWludCBpOwogCi0JaWYgKGFkZXYtPmZpcm13YXJlLmxvYWRf dHlwZSA9PSBBTURHUFVfRldfTE9BRF9QU1ApIHsKLQkJV1JFRzMyX1NPQzE1KFVWRCwgMCwgbW1V VkRfTE1JX1ZDUFVfQ0FDSEVfNjRCSVRfQkFSX0xPVywKLQkJCWxvd2VyXzMyX2JpdHMoYWRldi0+ ZmlybXdhcmUudWNvZGVbQU1ER1BVX1VDT0RFX0lEX1VWRF0ubWNfYWRkcikpOwotCQlXUkVHMzJf U09DMTUoVVZELCAwLCBtbVVWRF9MTUlfVkNQVV9DQUNIRV82NEJJVF9CQVJfSElHSCwKLQkJCXVw cGVyXzMyX2JpdHMoYWRldi0+ZmlybXdhcmUudWNvZGVbQU1ER1BVX1VDT0RFX0lEX1VWRF0ubWNf YWRkcikpOwotCQlvZmZzZXQgPSAwOwotCX0gZWxzZSB7Ci0JCVdSRUczMl9TT0MxNShVVkQsIDAs IG1tVVZEX0xNSV9WQ1BVX0NBQ0hFXzY0QklUX0JBUl9MT1csCi0JCQlsb3dlcl8zMl9iaXRzKGFk ZXYtPnV2ZC5pbnN0LT5ncHVfYWRkcikpOwotCQlXUkVHMzJfU09DMTUoVVZELCAwLCBtbVVWRF9M TUlfVkNQVV9DQUNIRV82NEJJVF9CQVJfSElHSCwKLQkJCXVwcGVyXzMyX2JpdHMoYWRldi0+dXZk Lmluc3QtPmdwdV9hZGRyKSk7Ci0JCW9mZnNldCA9IHNpemU7Ci0JfQorCWZvciAoaSA9IDA7IGkg PCBhZGV2LT51dmQubnVtX3V2ZF9pbnN0OyArK2kpIHsKKwkJaWYgKGFkZXYtPmZpcm13YXJlLmxv YWRfdHlwZSA9PSBBTURHUFVfRldfTE9BRF9QU1ApIHsKKwkJCVdSRUczMl9TT0MxNShVVkQsIGks IG1tVVZEX0xNSV9WQ1BVX0NBQ0hFXzY0QklUX0JBUl9MT1csCisJCQkJbG93ZXJfMzJfYml0cyhh ZGV2LT5maXJtd2FyZS51Y29kZVtBTURHUFVfVUNPREVfSURfVVZEXS5tY19hZGRyKSk7CisJCQlX UkVHMzJfU09DMTUoVVZELCBpLCBtbVVWRF9MTUlfVkNQVV9DQUNIRV82NEJJVF9CQVJfSElHSCwK KwkJCQl1cHBlcl8zMl9iaXRzKGFkZXYtPmZpcm13YXJlLnVjb2RlW0FNREdQVV9VQ09ERV9JRF9V VkRdLm1jX2FkZHIpKTsKKwkJCW9mZnNldCA9IDA7CisJCX0gZWxzZSB7CisJCQlXUkVHMzJfU09D MTUoVVZELCBpLCBtbVVWRF9MTUlfVkNQVV9DQUNIRV82NEJJVF9CQVJfTE9XLAorCQkJCWxvd2Vy XzMyX2JpdHMoYWRldi0+dXZkLmluc3RbaV0uZ3B1X2FkZHIpKTsKKwkJCVdSRUczMl9TT0MxNShV VkQsIGksIG1tVVZEX0xNSV9WQ1BVX0NBQ0hFXzY0QklUX0JBUl9ISUdILAorCQkJCXVwcGVyXzMy X2JpdHMoYWRldi0+dXZkLmluc3RbaV0uZ3B1X2FkZHIpKTsKKwkJCW9mZnNldCA9IHNpemU7CisJ CX0KIAotCVdSRUczMl9TT0MxNShVVkQsIDAsIG1tVVZEX1ZDUFVfQ0FDSEVfT0ZGU0VUMCwKLQkJ CQlBTURHUFVfVVZEX0ZJUk1XQVJFX09GRlNFVCA+PiAzKTsKLQlXUkVHMzJfU09DMTUoVVZELCAw LCBtbVVWRF9WQ1BVX0NBQ0hFX1NJWkUwLCBzaXplKTsKLQotCVdSRUczMl9TT0MxNShVVkQsIDAs IG1tVVZEX0xNSV9WQ1BVX0NBQ0hFMV82NEJJVF9CQVJfTE9XLAotCQkJbG93ZXJfMzJfYml0cyhh ZGV2LT51dmQuaW5zdC0+Z3B1X2FkZHIgKyBvZmZzZXQpKTsKLQlXUkVHMzJfU09DMTUoVVZELCAw LCBtbVVWRF9MTUlfVkNQVV9DQUNIRTFfNjRCSVRfQkFSX0hJR0gsCi0JCQl1cHBlcl8zMl9iaXRz KGFkZXYtPnV2ZC5pbnN0LT5ncHVfYWRkciArIG9mZnNldCkpOwotCVdSRUczMl9TT0MxNShVVkQs IDAsIG1tVVZEX1ZDUFVfQ0FDSEVfT0ZGU0VUMSwgKDEgPDwgMjEpKTsKLQlXUkVHMzJfU09DMTUo VVZELCAwLCBtbVVWRF9WQ1BVX0NBQ0hFX1NJWkUxLCBBTURHUFVfVVZEX0hFQVBfU0laRSk7Ci0K LQlXUkVHMzJfU09DMTUoVVZELCAwLCBtbVVWRF9MTUlfVkNQVV9DQUNIRTJfNjRCSVRfQkFSX0xP VywKLQkJCWxvd2VyXzMyX2JpdHMoYWRldi0+dXZkLmluc3QtPmdwdV9hZGRyICsgb2Zmc2V0ICsg QU1ER1BVX1VWRF9IRUFQX1NJWkUpKTsKLQlXUkVHMzJfU09DMTUoVVZELCAwLCBtbVVWRF9MTUlf VkNQVV9DQUNIRTJfNjRCSVRfQkFSX0hJR0gsCi0JCQl1cHBlcl8zMl9iaXRzKGFkZXYtPnV2ZC5p bnN0LT5ncHVfYWRkciArIG9mZnNldCArIEFNREdQVV9VVkRfSEVBUF9TSVpFKSk7Ci0JV1JFRzMy X1NPQzE1KFVWRCwgMCwgbW1VVkRfVkNQVV9DQUNIRV9PRkZTRVQyLCAoMiA8PCAyMSkpOwotCVdS RUczMl9TT0MxNShVVkQsIDAsIG1tVVZEX1ZDUFVfQ0FDSEVfU0laRTIsCi0JCQlBTURHUFVfVVZE X1NUQUNLX1NJWkUgKyAoQU1ER1BVX1VWRF9TRVNTSU9OX1NJWkUgKiA0MCkpOwotCi0JV1JFRzMy X1NPQzE1KFVWRCwgMCwgbW1VVkRfVURFQ19BRERSX0NPTkZJRywKLQkJCWFkZXYtPmdmeC5jb25m aWcuZ2JfYWRkcl9jb25maWcpOwotCVdSRUczMl9TT0MxNShVVkQsIDAsIG1tVVZEX1VERUNfREJf QUREUl9DT05GSUcsCi0JCQlhZGV2LT5nZnguY29uZmlnLmdiX2FkZHJfY29uZmlnKTsKLQlXUkVH MzJfU09DMTUoVVZELCAwLCBtbVVWRF9VREVDX0RCV19BRERSX0NPTkZJRywKLQkJCWFkZXYtPmdm eC5jb25maWcuZ2JfYWRkcl9jb25maWcpOwotCi0JV1JFRzMyX1NPQzE1KFVWRCwgMCwgbW1VVkRf R1BfU0NSQVRDSDQsIGFkZXYtPnV2ZC5tYXhfaGFuZGxlcyk7CisJCVdSRUczMl9TT0MxNShVVkQs IGksIG1tVVZEX1ZDUFVfQ0FDSEVfT0ZGU0VUMCwKKwkJCQkJQU1ER1BVX1VWRF9GSVJNV0FSRV9P RkZTRVQgPj4gMyk7CisJCVdSRUczMl9TT0MxNShVVkQsIGksIG1tVVZEX1ZDUFVfQ0FDSEVfU0la RTAsIHNpemUpOworCisJCVdSRUczMl9TT0MxNShVVkQsIGksIG1tVVZEX0xNSV9WQ1BVX0NBQ0hF MV82NEJJVF9CQVJfTE9XLAorCQkJCWxvd2VyXzMyX2JpdHMoYWRldi0+dXZkLmluc3RbaV0uZ3B1 X2FkZHIgKyBvZmZzZXQpKTsKKwkJV1JFRzMyX1NPQzE1KFVWRCwgaSwgbW1VVkRfTE1JX1ZDUFVf Q0FDSEUxXzY0QklUX0JBUl9ISUdILAorCQkJCXVwcGVyXzMyX2JpdHMoYWRldi0+dXZkLmluc3Rb aV0uZ3B1X2FkZHIgKyBvZmZzZXQpKTsKKwkJV1JFRzMyX1NPQzE1KFVWRCwgaSwgbW1VVkRfVkNQ VV9DQUNIRV9PRkZTRVQxLCAoMSA8PCAyMSkpOworCQlXUkVHMzJfU09DMTUoVVZELCBpLCBtbVVW RF9WQ1BVX0NBQ0hFX1NJWkUxLCBBTURHUFVfVVZEX0hFQVBfU0laRSk7CisKKwkJV1JFRzMyX1NP QzE1KFVWRCwgaSwgbW1VVkRfTE1JX1ZDUFVfQ0FDSEUyXzY0QklUX0JBUl9MT1csCisJCQkJbG93 ZXJfMzJfYml0cyhhZGV2LT51dmQuaW5zdFtpXS5ncHVfYWRkciArIG9mZnNldCArIEFNREdQVV9V VkRfSEVBUF9TSVpFKSk7CisJCVdSRUczMl9TT0MxNShVVkQsIGksIG1tVVZEX0xNSV9WQ1BVX0NB Q0hFMl82NEJJVF9CQVJfSElHSCwKKwkJCQl1cHBlcl8zMl9iaXRzKGFkZXYtPnV2ZC5pbnN0W2ld LmdwdV9hZGRyICsgb2Zmc2V0ICsgQU1ER1BVX1VWRF9IRUFQX1NJWkUpKTsKKwkJV1JFRzMyX1NP QzE1KFVWRCwgaSwgbW1VVkRfVkNQVV9DQUNIRV9PRkZTRVQyLCAoMiA8PCAyMSkpOworCQlXUkVH MzJfU09DMTUoVVZELCBpLCBtbVVWRF9WQ1BVX0NBQ0hFX1NJWkUyLAorCQkJCUFNREdQVV9VVkRf U1RBQ0tfU0laRSArIChBTURHUFVfVVZEX1NFU1NJT05fU0laRSAqIDQwKSk7CisKKwkJV1JFRzMy X1NPQzE1KFVWRCwgaSwgbW1VVkRfVURFQ19BRERSX0NPTkZJRywKKwkJCQlhZGV2LT5nZnguY29u ZmlnLmdiX2FkZHJfY29uZmlnKTsKKwkJV1JFRzMyX1NPQzE1KFVWRCwgaSwgbW1VVkRfVURFQ19E Ql9BRERSX0NPTkZJRywKKwkJCQlhZGV2LT5nZnguY29uZmlnLmdiX2FkZHJfY29uZmlnKTsKKwkJ V1JFRzMyX1NPQzE1KFVWRCwgaSwgbW1VVkRfVURFQ19EQldfQUREUl9DT05GSUcsCisJCQkJYWRl di0+Z2Z4LmNvbmZpZy5nYl9hZGRyX2NvbmZpZyk7CisKKwkJV1JFRzMyX1NPQzE1KFVWRCwgaSwg bW1VVkRfR1BfU0NSQVRDSDQsIGFkZXYtPnV2ZC5tYXhfaGFuZGxlcyk7CisJfQogfQogCiBzdGF0 aWMgaW50IHV2ZF92N18wX21tc2NoX3N0YXJ0KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LApA QCAtNjcwLDYgKzY4NSw3IEBAIHN0YXRpYyBpbnQgdXZkX3Y3XzBfbW1zY2hfc3RhcnQoc3RydWN0 IGFtZGdwdV9kZXZpY2UgKmFkZXYsCiAJdWludDY0X3QgYWRkciA9IHRhYmxlLT5ncHVfYWRkcjsK IAlzdHJ1Y3QgbW1zY2hfdjFfMF9pbml0X2hlYWRlciAqaGVhZGVyID0gKHN0cnVjdCBtbXNjaF92 MV8wX2luaXRfaGVhZGVyICopdGFibGUtPmNwdV9hZGRyOwogCXVpbnQzMl90IHNpemU7CisJaW50 IGk7CiAKIAlzaXplID0gaGVhZGVyLT5oZWFkZXJfc2l6ZSArIGhlYWRlci0+dmNlX3RhYmxlX3Np emUgKyBoZWFkZXItPnV2ZF90YWJsZV9zaXplOwogCkBAIC02ODksMTEgKzcwNSwxMiBAQCBzdGF0 aWMgaW50IHV2ZF92N18wX21tc2NoX3N0YXJ0KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAog CS8qIDQsIHNldCByZXNwIHRvIHplcm8gKi8KIAlXUkVHMzJfU09DMTUoVkNFLCAwLCBtbVZDRV9N TVNDSF9WRl9NQUlMQk9YX1JFU1AsIDApOwogCi0JV0RPT1JCRUxMMzIoYWRldi0+dXZkLmluc3Qt PnJpbmdfZW5jWzBdLmRvb3JiZWxsX2luZGV4LCAwKTsKLQlhZGV2LT53Yi53YlthZGV2LT51dmQu aW5zdC0+cmluZ19lbmNbMF0ud3B0cl9vZmZzXSA9IDA7Ci0JYWRldi0+dXZkLmluc3QtPnJpbmdf ZW5jWzBdLndwdHIgPSAwOwotCWFkZXYtPnV2ZC5pbnN0LT5yaW5nX2VuY1swXS53cHRyX29sZCA9 IDA7Ci0KKwlmb3IgKGkgPSAwOyBpIDwgYWRldi0+dXZkLm51bV91dmRfaW5zdDsgKytpKSB7CisJ CVdET09SQkVMTDMyKGFkZXYtPnV2ZC5pbnN0W2ldLnJpbmdfZW5jWzBdLmRvb3JiZWxsX2luZGV4 LCAwKTsKKwkJYWRldi0+d2Iud2JbYWRldi0+dXZkLmluc3RbaV0ucmluZ19lbmNbMF0ud3B0cl9v ZmZzXSA9IDA7CisJCWFkZXYtPnV2ZC5pbnN0W2ldLnJpbmdfZW5jWzBdLndwdHIgPSAwOworCQlh ZGV2LT51dmQuaW5zdFtpXS5yaW5nX2VuY1swXS53cHRyX29sZCA9IDA7CisJfQogCS8qIDUsIGtp Y2sgb2ZmIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgd2FpdCB1bnRpbCBWQ0VfTU1TQ0hfVkZfTUFJ TEJPWF9SRVNQIGJlY29tZXMgbm9uLXplcm8gKi8KIAlXUkVHMzJfU09DMTUoVkNFLCAwLCBtbVZD RV9NTVNDSF9WRl9NQUlMQk9YX0hPU1QsIDB4MTAwMDAwMDEpOwogCkBAIC03MjYsNiArNzQzLDcg QEAgc3RhdGljIGludCB1dmRfdjdfMF9zcmlvdl9zdGFydChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAq YWRldikKIAlzdHJ1Y3QgbW1zY2hfdjFfMF9jbWRfZW5kIGVuZCA9IHsgezB9IH07CiAJdWludDMy X3QgKmluaXRfdGFibGUgPSBhZGV2LT52aXJ0Lm1tX3RhYmxlLmNwdV9hZGRyOwogCXN0cnVjdCBt bXNjaF92MV8wX2luaXRfaGVhZGVyICpoZWFkZXIgPSAoc3RydWN0IG1tc2NoX3YxXzBfaW5pdF9o ZWFkZXIgKilpbml0X3RhYmxlOworCXVpbnQ4X3QgaSA9IDA7CiAKIAlkaXJlY3Rfd3QuY21kX2hl YWRlci5jb21tYW5kX3R5cGUgPSBNTVNDSF9DT01NQU5EX19ESVJFQ1RfUkVHX1dSSVRFOwogCWRp cmVjdF9yZF9tb2Rfd3QuY21kX2hlYWRlci5jb21tYW5kX3R5cGUgPSBNTVNDSF9DT01NQU5EX19E SVJFQ1RfUkVHX1JFQURfTU9ESUZZX1dSSVRFOwpAQCAtNzQzLDEyMCArNzYxLDEyMSBAQCBzdGF0 aWMgaW50IHV2ZF92N18wX3NyaW92X3N0YXJ0KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQog CiAJCWluaXRfdGFibGUgKz0gaGVhZGVyLT51dmRfdGFibGVfb2Zmc2V0OwogCi0JCXJpbmcgPSAm YWRldi0+dXZkLmluc3QtPnJpbmc7Ci0JCXJpbmctPndwdHIgPSAwOwotCQlzaXplID0gQU1ER1BV X0dQVV9QQUdFX0FMSUdOKGFkZXYtPnV2ZC5mdy0+c2l6ZSArIDQpOwotCi0JCU1NU0NIX1YxXzBf SU5TRVJUX0RJUkVDVF9SRF9NT0RfV1QoU09DMTVfUkVHX09GRlNFVChVVkQsIDAsIG1tVVZEX1NU QVRVUyksCi0JCQkJCQkgICAweEZGRkZGRkZGLCAweDAwMDAwMDA0KTsKLQkJLyogbWMgcmVzdW1l Ki8KLQkJaWYgKGFkZXYtPmZpcm13YXJlLmxvYWRfdHlwZSA9PSBBTURHUFVfRldfTE9BRF9QU1Ap IHsKLQkJCU1NU0NIX1YxXzBfSU5TRVJUX0RJUkVDVF9XVChTT0MxNV9SRUdfT0ZGU0VUKFVWRCwg MCwgbW1VVkRfTE1JX1ZDUFVfQ0FDSEVfNjRCSVRfQkFSX0xPVyksCi0JCQkJCQkgICAgbG93ZXJf MzJfYml0cyhhZGV2LT5maXJtd2FyZS51Y29kZVtBTURHUFVfVUNPREVfSURfVVZEXS5tY19hZGRy KSk7Ci0JCQlNTVNDSF9WMV8wX0lOU0VSVF9ESVJFQ1RfV1QoU09DMTVfUkVHX09GRlNFVChVVkQs IDAsIG1tVVZEX0xNSV9WQ1BVX0NBQ0hFXzY0QklUX0JBUl9ISUdIKSwKLQkJCQkJCSAgICB1cHBl cl8zMl9iaXRzKGFkZXYtPmZpcm13YXJlLnVjb2RlW0FNREdQVV9VQ09ERV9JRF9VVkRdLm1jX2Fk ZHIpKTsKLQkJCW9mZnNldCA9IDA7Ci0JCX0gZWxzZSB7Ci0JCQlNTVNDSF9WMV8wX0lOU0VSVF9E SVJFQ1RfV1QoU09DMTVfUkVHX09GRlNFVChVVkQsIDAsIG1tVVZEX0xNSV9WQ1BVX0NBQ0hFXzY0 QklUX0JBUl9MT1cpLAotCQkJCQkJICAgIGxvd2VyXzMyX2JpdHMoYWRldi0+dXZkLmluc3QtPmdw dV9hZGRyKSk7Ci0JCQlNTVNDSF9WMV8wX0lOU0VSVF9ESVJFQ1RfV1QoU09DMTVfUkVHX09GRlNF VChVVkQsIDAsIG1tVVZEX0xNSV9WQ1BVX0NBQ0hFXzY0QklUX0JBUl9ISUdIKSwKLQkJCQkJCSAg ICB1cHBlcl8zMl9iaXRzKGFkZXYtPnV2ZC5pbnN0LT5ncHVfYWRkcikpOwotCQkJb2Zmc2V0ID0g c2l6ZTsKKwkJZm9yIChpID0gMDsgaSA8IGFkZXYtPnV2ZC5udW1fdXZkX2luc3Q7ICsraSkgewor CQkJcmluZyA9ICZhZGV2LT51dmQuaW5zdFtpXS5yaW5nOworCQkJcmluZy0+d3B0ciA9IDA7CisJ CQlzaXplID0gQU1ER1BVX0dQVV9QQUdFX0FMSUdOKGFkZXYtPnV2ZC5mdy0+c2l6ZSArIDQpOwor CisJCQlNTVNDSF9WMV8wX0lOU0VSVF9ESVJFQ1RfUkRfTU9EX1dUKFNPQzE1X1JFR19PRkZTRVQo VVZELCBpLCBtbVVWRF9TVEFUVVMpLAorCQkJCQkJCSAgIDB4RkZGRkZGRkYsIDB4MDAwMDAwMDQp OworCQkJLyogbWMgcmVzdW1lKi8KKwkJCWlmIChhZGV2LT5maXJtd2FyZS5sb2FkX3R5cGUgPT0g QU1ER1BVX0ZXX0xPQURfUFNQKSB7CisJCQkJTU1TQ0hfVjFfMF9JTlNFUlRfRElSRUNUX1dUKFNP QzE1X1JFR19PRkZTRVQoVVZELCBpLCBtbVVWRF9MTUlfVkNQVV9DQUNIRV82NEJJVF9CQVJfTE9X KSwKKwkJCQkJCQkgICAgbG93ZXJfMzJfYml0cyhhZGV2LT5maXJtd2FyZS51Y29kZVtBTURHUFVf VUNPREVfSURfVVZEXS5tY19hZGRyKSk7CisJCQkJTU1TQ0hfVjFfMF9JTlNFUlRfRElSRUNUX1dU KFNPQzE1X1JFR19PRkZTRVQoVVZELCBpLCBtbVVWRF9MTUlfVkNQVV9DQUNIRV82NEJJVF9CQVJf SElHSCksCisJCQkJCQkJICAgIHVwcGVyXzMyX2JpdHMoYWRldi0+ZmlybXdhcmUudWNvZGVbQU1E R1BVX1VDT0RFX0lEX1VWRF0ubWNfYWRkcikpOworCQkJCW9mZnNldCA9IDA7CisJCQl9IGVsc2Ug eworCQkJCU1NU0NIX1YxXzBfSU5TRVJUX0RJUkVDVF9XVChTT0MxNV9SRUdfT0ZGU0VUKFVWRCwg aSwgbW1VVkRfTE1JX1ZDUFVfQ0FDSEVfNjRCSVRfQkFSX0xPVyksCisJCQkJCQkJICAgIGxvd2Vy XzMyX2JpdHMoYWRldi0+dXZkLmluc3RbaV0uZ3B1X2FkZHIpKTsKKwkJCQlNTVNDSF9WMV8wX0lO U0VSVF9ESVJFQ1RfV1QoU09DMTVfUkVHX09GRlNFVChVVkQsIGksIG1tVVZEX0xNSV9WQ1BVX0NB Q0hFXzY0QklUX0JBUl9ISUdIKSwKKwkJCQkJCQkgICAgdXBwZXJfMzJfYml0cyhhZGV2LT51dmQu aW5zdFtpXS5ncHVfYWRkcikpOworCQkJCW9mZnNldCA9IHNpemU7CisJCQl9CisKKwkJCU1NU0NI X1YxXzBfSU5TRVJUX0RJUkVDVF9XVChTT0MxNV9SRUdfT0ZGU0VUKFVWRCwgaSwgbW1VVkRfVkNQ VV9DQUNIRV9PRkZTRVQwKSwKKwkJCQkJCSAgICBBTURHUFVfVVZEX0ZJUk1XQVJFX09GRlNFVCA+ PiAzKTsKKwkJCU1NU0NIX1YxXzBfSU5TRVJUX0RJUkVDVF9XVChTT0MxNV9SRUdfT0ZGU0VUKFVW RCwgaSwgbW1VVkRfVkNQVV9DQUNIRV9TSVpFMCksIHNpemUpOworCisJCQlNTVNDSF9WMV8wX0lO U0VSVF9ESVJFQ1RfV1QoU09DMTVfUkVHX09GRlNFVChVVkQsIGksIG1tVVZEX0xNSV9WQ1BVX0NB Q0hFMV82NEJJVF9CQVJfTE9XKSwKKwkJCQkJCSAgICBsb3dlcl8zMl9iaXRzKGFkZXYtPnV2ZC5p bnN0W2ldLmdwdV9hZGRyICsgb2Zmc2V0KSk7CisJCQlNTVNDSF9WMV8wX0lOU0VSVF9ESVJFQ1Rf V1QoU09DMTVfUkVHX09GRlNFVChVVkQsIGksIG1tVVZEX0xNSV9WQ1BVX0NBQ0hFMV82NEJJVF9C QVJfSElHSCksCisJCQkJCQkgICAgdXBwZXJfMzJfYml0cyhhZGV2LT51dmQuaW5zdFtpXS5ncHVf YWRkciArIG9mZnNldCkpOworCQkJTU1TQ0hfVjFfMF9JTlNFUlRfRElSRUNUX1dUKFNPQzE1X1JF R19PRkZTRVQoVVZELCBpLCBtbVVWRF9WQ1BVX0NBQ0hFX09GRlNFVDEpLCAoMSA8PCAyMSkpOwor CQkJTU1TQ0hfVjFfMF9JTlNFUlRfRElSRUNUX1dUKFNPQzE1X1JFR19PRkZTRVQoVVZELCBpLCBt bVVWRF9WQ1BVX0NBQ0hFX1NJWkUxKSwgQU1ER1BVX1VWRF9IRUFQX1NJWkUpOworCisJCQlNTVND SF9WMV8wX0lOU0VSVF9ESVJFQ1RfV1QoU09DMTVfUkVHX09GRlNFVChVVkQsIGksIG1tVVZEX0xN SV9WQ1BVX0NBQ0hFMl82NEJJVF9CQVJfTE9XKSwKKwkJCQkJCSAgICBsb3dlcl8zMl9iaXRzKGFk ZXYtPnV2ZC5pbnN0W2ldLmdwdV9hZGRyICsgb2Zmc2V0ICsgQU1ER1BVX1VWRF9IRUFQX1NJWkUp KTsKKwkJCU1NU0NIX1YxXzBfSU5TRVJUX0RJUkVDVF9XVChTT0MxNV9SRUdfT0ZGU0VUKFVWRCwg aSwgbW1VVkRfTE1JX1ZDUFVfQ0FDSEUyXzY0QklUX0JBUl9ISUdIKSwKKwkJCQkJCSAgICB1cHBl cl8zMl9iaXRzKGFkZXYtPnV2ZC5pbnN0W2ldLmdwdV9hZGRyICsgb2Zmc2V0ICsgQU1ER1BVX1VW RF9IRUFQX1NJWkUpKTsKKwkJCU1NU0NIX1YxXzBfSU5TRVJUX0RJUkVDVF9XVChTT0MxNV9SRUdf T0ZGU0VUKFVWRCwgaSwgbW1VVkRfVkNQVV9DQUNIRV9PRkZTRVQyKSwgKDIgPDwgMjEpKTsKKwkJ CU1NU0NIX1YxXzBfSU5TRVJUX0RJUkVDVF9XVChTT0MxNV9SRUdfT0ZGU0VUKFVWRCwgaSwgbW1V VkRfVkNQVV9DQUNIRV9TSVpFMiksCisJCQkJCQkgICAgQU1ER1BVX1VWRF9TVEFDS19TSVpFICsg KEFNREdQVV9VVkRfU0VTU0lPTl9TSVpFICogNDApKTsKKworCQkJTU1TQ0hfVjFfMF9JTlNFUlRf RElSRUNUX1dUKFNPQzE1X1JFR19PRkZTRVQoVVZELCBpLCBtbVVWRF9HUF9TQ1JBVENINCksIGFk ZXYtPnV2ZC5tYXhfaGFuZGxlcyk7CisJCQkvKiBtYyByZXN1bWUgZW5kKi8KKworCQkJLyogZGlz YWJsZSBjbG9jayBnYXRpbmcgKi8KKwkJCU1NU0NIX1YxXzBfSU5TRVJUX0RJUkVDVF9SRF9NT0Rf V1QoU09DMTVfUkVHX09GRlNFVChVVkQsIGksIG1tVVZEX0NHQ19DVFJMKSwKKwkJCQkJCQkgICB+ VVZEX0NHQ19DVFJMX19EWU5fQ0xPQ0tfTU9ERV9NQVNLLCAwKTsKKworCQkJLyogZGlzYWJsZSBp bnRlcnVwdCAqLworCQkJTU1TQ0hfVjFfMF9JTlNFUlRfRElSRUNUX1JEX01PRF9XVChTT0MxNV9S RUdfT0ZGU0VUKFVWRCwgaSwgbW1VVkRfTUFTVElOVF9FTiksCisJCQkJCQkJICAgflVWRF9NQVNU SU5UX0VOX19WQ1BVX0VOX01BU0ssIDApOworCisJCQkvKiBzdGFsbCBVTUMgYW5kIHJlZ2lzdGVy IGJ1cyBiZWZvcmUgcmVzZXR0aW5nIFZDUFUgKi8KKwkJCU1NU0NIX1YxXzBfSU5TRVJUX0RJUkVD VF9SRF9NT0RfV1QoU09DMTVfUkVHX09GRlNFVChVVkQsIGksIG1tVVZEX0xNSV9DVFJMMiksCisJ CQkJCQkJICAgflVWRF9MTUlfQ1RSTDJfX1NUQUxMX0FSQl9VTUNfTUFTSywKKwkJCQkJCQkgICBV VkRfTE1JX0NUUkwyX19TVEFMTF9BUkJfVU1DX01BU0spOworCisJCQkvKiBwdXQgTE1JLCBWQ1BV LCBSQkMgZXRjLi4uIGludG8gcmVzZXQgKi8KKwkJCU1NU0NIX1YxXzBfSU5TRVJUX0RJUkVDVF9X VChTT0MxNV9SRUdfT0ZGU0VUKFVWRCwgaSwgbW1VVkRfU09GVF9SRVNFVCksCisJCQkJCQkgICAg KHVpbnQzMl90KShVVkRfU09GVF9SRVNFVF9fTE1JX1NPRlRfUkVTRVRfTUFTSyB8CisJCQkJCQkJ ICAgICAgIFVWRF9TT0ZUX1JFU0VUX19WQ1BVX1NPRlRfUkVTRVRfTUFTSyB8CisJCQkJCQkJICAg ICAgIFVWRF9TT0ZUX1JFU0VUX19MQlNJX1NPRlRfUkVTRVRfTUFTSyB8CisJCQkJCQkJICAgICAg IFVWRF9TT0ZUX1JFU0VUX19SQkNfU09GVF9SRVNFVF9NQVNLIHwKKwkJCQkJCQkgICAgICAgVVZE X1NPRlRfUkVTRVRfX0NTTV9TT0ZUX1JFU0VUX01BU0sgfAorCQkJCQkJCSAgICAgICBVVkRfU09G VF9SRVNFVF9fQ1hXX1NPRlRfUkVTRVRfTUFTSyB8CisJCQkJCQkJICAgICAgIFVWRF9TT0ZUX1JF U0VUX19UQVBfU09GVF9SRVNFVF9NQVNLIHwKKwkJCQkJCQkgICAgICAgVVZEX1NPRlRfUkVTRVRf X0xNSV9VTUNfU09GVF9SRVNFVF9NQVNLKSk7CisKKwkJCS8qIGluaXRpYWxpemUgVVZEIG1lbW9y eSBjb250cm9sbGVyICovCisJCQlNTVNDSF9WMV8wX0lOU0VSVF9ESVJFQ1RfV1QoU09DMTVfUkVH X09GRlNFVChVVkQsIGksIG1tVVZEX0xNSV9DVFJMKSwKKwkJCQkJCSAgICAodWludDMyX3QpKCgw eDQwIDw8IFVWRF9MTUlfQ1RSTF9fV1JJVEVfQ0xFQU5fVElNRVJfX1NISUZUKSB8CisJCQkJCQkJ ICAgICAgIFVWRF9MTUlfQ1RSTF9fV1JJVEVfQ0xFQU5fVElNRVJfRU5fTUFTSyB8CisJCQkJCQkJ ICAgICAgIFVWRF9MTUlfQ1RSTF9fREFUQV9DT0hFUkVOQ1lfRU5fTUFTSyB8CisJCQkJCQkJICAg ICAgIFVWRF9MTUlfQ1RSTF9fVkNQVV9EQVRBX0NPSEVSRU5DWV9FTl9NQVNLIHwKKwkJCQkJCQkg ICAgICAgVVZEX0xNSV9DVFJMX19SRVFfTU9ERV9NQVNLIHwKKwkJCQkJCQkgICAgICAgMHgwMDEw MDAwMEwpKTsKKworCQkJLyogdGFrZSBhbGwgc3ViYmxvY2tzIG91dCBvZiByZXNldCwgZXhjZXB0 IFZDUFUgKi8KKwkJCU1NU0NIX1YxXzBfSU5TRVJUX0RJUkVDVF9XVChTT0MxNV9SRUdfT0ZGU0VU KFVWRCwgaSwgbW1VVkRfU09GVF9SRVNFVCksCisJCQkJCQkgICAgVVZEX1NPRlRfUkVTRVRfX1ZD UFVfU09GVF9SRVNFVF9NQVNLKTsKKworCQkJLyogZW5hYmxlIFZDUFUgY2xvY2sgKi8KKwkJCU1N U0NIX1YxXzBfSU5TRVJUX0RJUkVDVF9XVChTT0MxNV9SRUdfT0ZGU0VUKFVWRCwgaSwgbW1VVkRf VkNQVV9DTlRMKSwKKwkJCQkJCSAgICBVVkRfVkNQVV9DTlRMX19DTEtfRU5fTUFTSyk7CisKKwkJ CS8qIGVuYWJsZSBtYXN0ZXIgaW50ZXJydXB0ICovCisJCQlNTVNDSF9WMV8wX0lOU0VSVF9ESVJF Q1RfUkRfTU9EX1dUKFNPQzE1X1JFR19PRkZTRVQoVVZELCBpLCBtbVVWRF9NQVNUSU5UX0VOKSwK KwkJCQkJCQkgICB+KFVWRF9NQVNUSU5UX0VOX19WQ1BVX0VOX01BU0t8VVZEX01BU1RJTlRfRU5f X1NZU19FTl9NQVNLKSwKKwkJCQkJCQkgICAoVVZEX01BU1RJTlRfRU5fX1ZDUFVfRU5fTUFTS3xV VkRfTUFTVElOVF9FTl9fU1lTX0VOX01BU0spKTsKKworCQkJLyogY2xlYXIgdGhlIGJpdCA0IG9m IFVWRF9TVEFUVVMgKi8KKwkJCU1NU0NIX1YxXzBfSU5TRVJUX0RJUkVDVF9SRF9NT0RfV1QoU09D MTVfUkVHX09GRlNFVChVVkQsIGksIG1tVVZEX1NUQVRVUyksCisJCQkJCQkJICAgfigyIDw8IFVW RF9TVEFUVVNfX1ZDUFVfUkVQT1JUX19TSElGVCksIDApOworCisJCQkvKiBmb3JjZSBSQkMgaW50 byBpZGxlIHN0YXRlICovCisJCQlzaXplID0gb3JkZXJfYmFzZV8yKHJpbmctPnJpbmdfc2l6ZSk7 CisJCQl0bXAgPSBSRUdfU0VUX0ZJRUxEKDAsIFVWRF9SQkNfUkJfQ05UTCwgUkJfQlVGU1osIHNp emUpOworCQkJdG1wID0gUkVHX1NFVF9GSUVMRCh0bXAsIFVWRF9SQkNfUkJfQ05UTCwgUkJfTk9f RkVUQ0gsIDEpOworCQkJTU1TQ0hfVjFfMF9JTlNFUlRfRElSRUNUX1dUKFNPQzE1X1JFR19PRkZT RVQoVVZELCBpLCBtbVVWRF9SQkNfUkJfQ05UTCksIHRtcCk7CisKKwkJCXJpbmcgPSAmYWRldi0+ dXZkLmluc3RbaV0ucmluZ19lbmNbMF07CisJCQlyaW5nLT53cHRyID0gMDsKKwkJCU1NU0NIX1Yx XzBfSU5TRVJUX0RJUkVDVF9XVChTT0MxNV9SRUdfT0ZGU0VUKFVWRCwgaSwgbW1VVkRfUkJfQkFT RV9MTyksIHJpbmctPmdwdV9hZGRyKTsKKwkJCU1NU0NIX1YxXzBfSU5TRVJUX0RJUkVDVF9XVChT T0MxNV9SRUdfT0ZGU0VUKFVWRCwgaSwgbW1VVkRfUkJfQkFTRV9ISSksIHVwcGVyXzMyX2JpdHMo cmluZy0+Z3B1X2FkZHIpKTsKKwkJCU1NU0NIX1YxXzBfSU5TRVJUX0RJUkVDVF9XVChTT0MxNV9S RUdfT0ZGU0VUKFVWRCwgaSwgbW1VVkRfUkJfU0laRSksIHJpbmctPnJpbmdfc2l6ZSAvIDQpOwor CisJCQkvKiBib290IHVwIHRoZSBWQ1BVICovCisJCQlNTVNDSF9WMV8wX0lOU0VSVF9ESVJFQ1Rf V1QoU09DMTVfUkVHX09GRlNFVChVVkQsIGksIG1tVVZEX1NPRlRfUkVTRVQpLCAwKTsKKworCQkJ LyogZW5hYmxlIFVNQyAqLworCQkJTU1TQ0hfVjFfMF9JTlNFUlRfRElSRUNUX1JEX01PRF9XVChT T0MxNV9SRUdfT0ZGU0VUKFVWRCwgaSwgbW1VVkRfTE1JX0NUUkwyKSwKKwkJCQkJCQkJCQkJICAg flVWRF9MTUlfQ1RSTDJfX1NUQUxMX0FSQl9VTUNfTUFTSywgMCk7CisKKwkJCU1NU0NIX1YxXzBf SU5TRVJUX0RJUkVDVF9QT0xMKFNPQzE1X1JFR19PRkZTRVQoVVZELCBpLCBtbVVWRF9TVEFUVVMp LCAweDAyLCAweDAyKTsKIAkJfQotCi0JCU1NU0NIX1YxXzBfSU5TRVJUX0RJUkVDVF9XVChTT0Mx NV9SRUdfT0ZGU0VUKFVWRCwgMCwgbW1VVkRfVkNQVV9DQUNIRV9PRkZTRVQwKSwKLQkJCQkJICAg IEFNREdQVV9VVkRfRklSTVdBUkVfT0ZGU0VUID4+IDMpOwotCQlNTVNDSF9WMV8wX0lOU0VSVF9E SVJFQ1RfV1QoU09DMTVfUkVHX09GRlNFVChVVkQsIDAsIG1tVVZEX1ZDUFVfQ0FDSEVfU0laRTAp LCBzaXplKTsKLQotCQlNTVNDSF9WMV8wX0lOU0VSVF9ESVJFQ1RfV1QoU09DMTVfUkVHX09GRlNF VChVVkQsIDAsIG1tVVZEX0xNSV9WQ1BVX0NBQ0hFMV82NEJJVF9CQVJfTE9XKSwKLQkJCQkJICAg IGxvd2VyXzMyX2JpdHMoYWRldi0+dXZkLmluc3QtPmdwdV9hZGRyICsgb2Zmc2V0KSk7Ci0JCU1N U0NIX1YxXzBfSU5TRVJUX0RJUkVDVF9XVChTT0MxNV9SRUdfT0ZGU0VUKFVWRCwgMCwgbW1VVkRf TE1JX1ZDUFVfQ0FDSEUxXzY0QklUX0JBUl9ISUdIKSwKLQkJCQkJICAgIHVwcGVyXzMyX2JpdHMo YWRldi0+dXZkLmluc3QtPmdwdV9hZGRyICsgb2Zmc2V0KSk7Ci0JCU1NU0NIX1YxXzBfSU5TRVJU X0RJUkVDVF9XVChTT0MxNV9SRUdfT0ZGU0VUKFVWRCwgMCwgbW1VVkRfVkNQVV9DQUNIRV9PRkZT RVQxKSwgKDEgPDwgMjEpKTsKLQkJTU1TQ0hfVjFfMF9JTlNFUlRfRElSRUNUX1dUKFNPQzE1X1JF R19PRkZTRVQoVVZELCAwLCBtbVVWRF9WQ1BVX0NBQ0hFX1NJWkUxKSwgQU1ER1BVX1VWRF9IRUFQ X1NJWkUpOwotCi0JCU1NU0NIX1YxXzBfSU5TRVJUX0RJUkVDVF9XVChTT0MxNV9SRUdfT0ZGU0VU KFVWRCwgMCwgbW1VVkRfTE1JX1ZDUFVfQ0FDSEUyXzY0QklUX0JBUl9MT1cpLAotCQkJCQkgICAg bG93ZXJfMzJfYml0cyhhZGV2LT51dmQuaW5zdC0+Z3B1X2FkZHIgKyBvZmZzZXQgKyBBTURHUFVf VVZEX0hFQVBfU0laRSkpOwotCQlNTVNDSF9WMV8wX0lOU0VSVF9ESVJFQ1RfV1QoU09DMTVfUkVH X09GRlNFVChVVkQsIDAsIG1tVVZEX0xNSV9WQ1BVX0NBQ0hFMl82NEJJVF9CQVJfSElHSCksCi0J CQkJCSAgICB1cHBlcl8zMl9iaXRzKGFkZXYtPnV2ZC5pbnN0LT5ncHVfYWRkciArIG9mZnNldCAr IEFNREdQVV9VVkRfSEVBUF9TSVpFKSk7Ci0JCU1NU0NIX1YxXzBfSU5TRVJUX0RJUkVDVF9XVChT T0MxNV9SRUdfT0ZGU0VUKFVWRCwgMCwgbW1VVkRfVkNQVV9DQUNIRV9PRkZTRVQyKSwgKDIgPDwg MjEpKTsKLQkJTU1TQ0hfVjFfMF9JTlNFUlRfRElSRUNUX1dUKFNPQzE1X1JFR19PRkZTRVQoVVZE LCAwLCBtbVVWRF9WQ1BVX0NBQ0hFX1NJWkUyKSwKLQkJCQkJICAgIEFNREdQVV9VVkRfU1RBQ0tf U0laRSArIChBTURHUFVfVVZEX1NFU1NJT05fU0laRSAqIDQwKSk7Ci0KLQkJTU1TQ0hfVjFfMF9J TlNFUlRfRElSRUNUX1dUKFNPQzE1X1JFR19PRkZTRVQoVVZELCAwLCBtbVVWRF9HUF9TQ1JBVENI NCksIGFkZXYtPnV2ZC5tYXhfaGFuZGxlcyk7Ci0JCS8qIG1jIHJlc3VtZSBlbmQqLwotCi0JCS8q IGRpc2FibGUgY2xvY2sgZ2F0aW5nICovCi0JCU1NU0NIX1YxXzBfSU5TRVJUX0RJUkVDVF9SRF9N T0RfV1QoU09DMTVfUkVHX09GRlNFVChVVkQsIDAsIG1tVVZEX0NHQ19DVFJMKSwKLQkJCQkJCSAg IH5VVkRfQ0dDX0NUUkxfX0RZTl9DTE9DS19NT0RFX01BU0ssIDApOwotCi0JCS8qIGRpc2FibGUg aW50ZXJ1cHQgKi8KLQkJTU1TQ0hfVjFfMF9JTlNFUlRfRElSRUNUX1JEX01PRF9XVChTT0MxNV9S RUdfT0ZGU0VUKFVWRCwgMCwgbW1VVkRfTUFTVElOVF9FTiksCi0JCQkJCQkgICB+VVZEX01BU1RJ TlRfRU5fX1ZDUFVfRU5fTUFTSywgMCk7Ci0KLQkJLyogc3RhbGwgVU1DIGFuZCByZWdpc3RlciBi dXMgYmVmb3JlIHJlc2V0dGluZyBWQ1BVICovCi0JCU1NU0NIX1YxXzBfSU5TRVJUX0RJUkVDVF9S RF9NT0RfV1QoU09DMTVfUkVHX09GRlNFVChVVkQsIDAsIG1tVVZEX0xNSV9DVFJMMiksCi0JCQkJ CQkgICB+VVZEX0xNSV9DVFJMMl9fU1RBTExfQVJCX1VNQ19NQVNLLAotCQkJCQkJICAgVVZEX0xN SV9DVFJMMl9fU1RBTExfQVJCX1VNQ19NQVNLKTsKLQotCQkvKiBwdXQgTE1JLCBWQ1BVLCBSQkMg ZXRjLi4uIGludG8gcmVzZXQgKi8KLQkJTU1TQ0hfVjFfMF9JTlNFUlRfRElSRUNUX1dUKFNPQzE1 X1JFR19PRkZTRVQoVVZELCAwLCBtbVVWRF9TT0ZUX1JFU0VUKSwKLQkJCQkJICAgICh1aW50MzJf dCkoVVZEX1NPRlRfUkVTRVRfX0xNSV9TT0ZUX1JFU0VUX01BU0sgfAotCQkJCQkJICAgICAgIFVW RF9TT0ZUX1JFU0VUX19WQ1BVX1NPRlRfUkVTRVRfTUFTSyB8Ci0JCQkJCQkgICAgICAgVVZEX1NP RlRfUkVTRVRfX0xCU0lfU09GVF9SRVNFVF9NQVNLIHwKLQkJCQkJCSAgICAgICBVVkRfU09GVF9S RVNFVF9fUkJDX1NPRlRfUkVTRVRfTUFTSyB8Ci0JCQkJCQkgICAgICAgVVZEX1NPRlRfUkVTRVRf X0NTTV9TT0ZUX1JFU0VUX01BU0sgfAotCQkJCQkJICAgICAgIFVWRF9TT0ZUX1JFU0VUX19DWFdf U09GVF9SRVNFVF9NQVNLIHwKLQkJCQkJCSAgICAgICBVVkRfU09GVF9SRVNFVF9fVEFQX1NPRlRf UkVTRVRfTUFTSyB8Ci0JCQkJCQkgICAgICAgVVZEX1NPRlRfUkVTRVRfX0xNSV9VTUNfU09GVF9S RVNFVF9NQVNLKSk7Ci0KLQkJLyogaW5pdGlhbGl6ZSBVVkQgbWVtb3J5IGNvbnRyb2xsZXIgKi8K LQkJTU1TQ0hfVjFfMF9JTlNFUlRfRElSRUNUX1dUKFNPQzE1X1JFR19PRkZTRVQoVVZELCAwLCBt bVVWRF9MTUlfQ1RSTCksCi0JCQkJCSAgICAodWludDMyX3QpKCgweDQwIDw8IFVWRF9MTUlfQ1RS TF9fV1JJVEVfQ0xFQU5fVElNRVJfX1NISUZUKSB8Ci0JCQkJCQkgICAgICAgVVZEX0xNSV9DVFJM X19XUklURV9DTEVBTl9USU1FUl9FTl9NQVNLIHwKLQkJCQkJCSAgICAgICBVVkRfTE1JX0NUUkxf X0RBVEFfQ09IRVJFTkNZX0VOX01BU0sgfAotCQkJCQkJICAgICAgIFVWRF9MTUlfQ1RSTF9fVkNQ VV9EQVRBX0NPSEVSRU5DWV9FTl9NQVNLIHwKLQkJCQkJCSAgICAgICBVVkRfTE1JX0NUUkxfX1JF UV9NT0RFX01BU0sgfAotCQkJCQkJICAgICAgIDB4MDAxMDAwMDBMKSk7Ci0KLQkJLyogdGFrZSBh bGwgc3ViYmxvY2tzIG91dCBvZiByZXNldCwgZXhjZXB0IFZDUFUgKi8KLQkJTU1TQ0hfVjFfMF9J TlNFUlRfRElSRUNUX1dUKFNPQzE1X1JFR19PRkZTRVQoVVZELCAwLCBtbVVWRF9TT0ZUX1JFU0VU KSwKLQkJCQkJICAgIFVWRF9TT0ZUX1JFU0VUX19WQ1BVX1NPRlRfUkVTRVRfTUFTSyk7Ci0KLQkJ LyogZW5hYmxlIFZDUFUgY2xvY2sgKi8KLQkJTU1TQ0hfVjFfMF9JTlNFUlRfRElSRUNUX1dUKFNP QzE1X1JFR19PRkZTRVQoVVZELCAwLCBtbVVWRF9WQ1BVX0NOVEwpLAotCQkJCQkgICAgVVZEX1ZD UFVfQ05UTF9fQ0xLX0VOX01BU0spOwotCi0JCS8qIGVuYWJsZSBtYXN0ZXIgaW50ZXJydXB0ICov Ci0JCU1NU0NIX1YxXzBfSU5TRVJUX0RJUkVDVF9SRF9NT0RfV1QoU09DMTVfUkVHX09GRlNFVChV VkQsIDAsIG1tVVZEX01BU1RJTlRfRU4pLAotCQkJCQkJICAgfihVVkRfTUFTVElOVF9FTl9fVkNQ VV9FTl9NQVNLfFVWRF9NQVNUSU5UX0VOX19TWVNfRU5fTUFTSyksCi0JCQkJCQkgICAoVVZEX01B U1RJTlRfRU5fX1ZDUFVfRU5fTUFTS3xVVkRfTUFTVElOVF9FTl9fU1lTX0VOX01BU0spKTsKLQot CQkvKiBjbGVhciB0aGUgYml0IDQgb2YgVVZEX1NUQVRVUyAqLwotCQlNTVNDSF9WMV8wX0lOU0VS VF9ESVJFQ1RfUkRfTU9EX1dUKFNPQzE1X1JFR19PRkZTRVQoVVZELCAwLCBtbVVWRF9TVEFUVVMp LAotCQkJCQkJICAgfigyIDw8IFVWRF9TVEFUVVNfX1ZDUFVfUkVQT1JUX19TSElGVCksIDApOwot Ci0JCS8qIGZvcmNlIFJCQyBpbnRvIGlkbGUgc3RhdGUgKi8KLQkJc2l6ZSA9IG9yZGVyX2Jhc2Vf MihyaW5nLT5yaW5nX3NpemUpOwotCQl0bXAgPSBSRUdfU0VUX0ZJRUxEKDAsIFVWRF9SQkNfUkJf Q05UTCwgUkJfQlVGU1osIHNpemUpOwotCQl0bXAgPSBSRUdfU0VUX0ZJRUxEKHRtcCwgVVZEX1JC Q19SQl9DTlRMLCBSQl9OT19GRVRDSCwgMSk7Ci0JCU1NU0NIX1YxXzBfSU5TRVJUX0RJUkVDVF9X VChTT0MxNV9SRUdfT0ZGU0VUKFVWRCwgMCwgbW1VVkRfUkJDX1JCX0NOVEwpLCB0bXApOwotCi0J CXJpbmcgPSAmYWRldi0+dXZkLmluc3QtPnJpbmdfZW5jWzBdOwotCQlyaW5nLT53cHRyID0gMDsK LQkJTU1TQ0hfVjFfMF9JTlNFUlRfRElSRUNUX1dUKFNPQzE1X1JFR19PRkZTRVQoVVZELCAwLCBt bVVWRF9SQl9CQVNFX0xPKSwgcmluZy0+Z3B1X2FkZHIpOwotCQlNTVNDSF9WMV8wX0lOU0VSVF9E SVJFQ1RfV1QoU09DMTVfUkVHX09GRlNFVChVVkQsIDAsIG1tVVZEX1JCX0JBU0VfSEkpLCB1cHBl cl8zMl9iaXRzKHJpbmctPmdwdV9hZGRyKSk7Ci0JCU1NU0NIX1YxXzBfSU5TRVJUX0RJUkVDVF9X VChTT0MxNV9SRUdfT0ZGU0VUKFVWRCwgMCwgbW1VVkRfUkJfU0laRSksIHJpbmctPnJpbmdfc2l6 ZSAvIDQpOwotCi0JCS8qIGJvb3QgdXAgdGhlIFZDUFUgKi8KLQkJTU1TQ0hfVjFfMF9JTlNFUlRf RElSRUNUX1dUKFNPQzE1X1JFR19PRkZTRVQoVVZELCAwLCBtbVVWRF9TT0ZUX1JFU0VUKSwgMCk7 Ci0KLQkJLyogZW5hYmxlIFVNQyAqLwotCQlNTVNDSF9WMV8wX0lOU0VSVF9ESVJFQ1RfUkRfTU9E X1dUKFNPQzE1X1JFR19PRkZTRVQoVVZELCAwLCBtbVVWRF9MTUlfQ1RSTDIpLAotCQkJCQkJCQkJ CSAgIH5VVkRfTE1JX0NUUkwyX19TVEFMTF9BUkJfVU1DX01BU0ssIDApOwotCi0JCU1NU0NIX1Yx XzBfSU5TRVJUX0RJUkVDVF9QT0xMKFNPQzE1X1JFR19PRkZTRVQoVVZELCAwLCBtbVVWRF9TVEFU VVMpLCAweDAyLCAweDAyKTsKLQogCQkvKiBhZGQgZW5kIHBhY2tldCAqLwogCQltZW1jcHkoKHZv aWQgKilpbml0X3RhYmxlLCAmZW5kLCBzaXplb2Yoc3RydWN0IG1tc2NoX3YxXzBfY21kX2VuZCkp OwogCQl0YWJsZV9zaXplICs9IHNpemVvZihzdHJ1Y3QgbW1zY2hfdjFfMF9jbWRfZW5kKSAvIDQ7 CkBAIC04NzUsMTUgKzg5NCwxNyBAQCBzdGF0aWMgaW50IHV2ZF92N18wX3NyaW92X3N0YXJ0KHN0 cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQogICovCiBzdGF0aWMgaW50IHV2ZF92N18wX3N0YXJ0 KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQogewotCXN0cnVjdCBhbWRncHVfcmluZyAqcmlu ZyA9ICZhZGV2LT51dmQuaW5zdC0+cmluZzsKKwlzdHJ1Y3QgYW1kZ3B1X3JpbmcgKnJpbmc7CiAJ dWludDMyX3QgcmJfYnVmc3osIHRtcDsKIAl1aW50MzJfdCBsbWlfc3dhcF9jbnRsOwogCXVpbnQz Ml90IG1wX3N3YXBfY250bDsKLQlpbnQgaSwgaiwgcjsKKwlpbnQgaSwgaiwgaywgcjsKIAotCS8q IGRpc2FibGUgRFBHICovCi0JV1JFRzMyX1AoU09DMTVfUkVHX09GRlNFVChVVkQsIDAsIG1tVVZE X1BPV0VSX1NUQVRVUyksIDAsCi0JCQl+VVZEX1BPV0VSX1NUQVRVU19fVVZEX1BHX01PREVfTUFT Syk7CisJZm9yIChrID0gMDsgayA8IGFkZXYtPnV2ZC5udW1fdXZkX2luc3Q7ICsraykgeworCQkv KiBkaXNhYmxlIERQRyAqLworCQlXUkVHMzJfUChTT0MxNV9SRUdfT0ZGU0VUKFVWRCwgaywgbW1V VkRfUE9XRVJfU1RBVFVTKSwgMCwKKwkJCQl+VVZEX1BPV0VSX1NUQVRVU19fVVZEX1BHX01PREVf TUFTSyk7CisJfQogCiAJLyogZGlzYWJsZSBieXRlIHN3YXBwaW5nICovCiAJbG1pX3N3YXBfY250 bCA9IDA7CkBAIC04OTEsMTU3ICs5MTIsMTU5IEBAIHN0YXRpYyBpbnQgdXZkX3Y3XzBfc3RhcnQo c3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCiAKIAl1dmRfdjdfMF9tY19yZXN1bWUoYWRldik7 CiAKLQkvKiBkaXNhYmxlIGNsb2NrIGdhdGluZyAqLwotCVdSRUczMl9QKFNPQzE1X1JFR19PRkZT RVQoVVZELCAwLCBtbVVWRF9DR0NfQ1RSTCksIDAsCi0JCQl+VVZEX0NHQ19DVFJMX19EWU5fQ0xP Q0tfTU9ERV9NQVNLKTsKLQotCS8qIGRpc2FibGUgaW50ZXJ1cHQgKi8KLQlXUkVHMzJfUChTT0Mx NV9SRUdfT0ZGU0VUKFVWRCwgMCwgbW1VVkRfTUFTVElOVF9FTiksIDAsCi0JCQl+VVZEX01BU1RJ TlRfRU5fX1ZDUFVfRU5fTUFTSyk7Ci0KLQkvKiBzdGFsbCBVTUMgYW5kIHJlZ2lzdGVyIGJ1cyBi ZWZvcmUgcmVzZXR0aW5nIFZDUFUgKi8KLQlXUkVHMzJfUChTT0MxNV9SRUdfT0ZGU0VUKFVWRCwg MCwgbW1VVkRfTE1JX0NUUkwyKSwKLQkJCVVWRF9MTUlfQ1RSTDJfX1NUQUxMX0FSQl9VTUNfTUFT SywKLQkJCX5VVkRfTE1JX0NUUkwyX19TVEFMTF9BUkJfVU1DX01BU0spOwotCW1kZWxheSgxKTsK LQotCS8qIHB1dCBMTUksIFZDUFUsIFJCQyBldGMuLi4gaW50byByZXNldCAqLwotCVdSRUczMl9T T0MxNShVVkQsIDAsIG1tVVZEX1NPRlRfUkVTRVQsCi0JCVVWRF9TT0ZUX1JFU0VUX19MTUlfU09G VF9SRVNFVF9NQVNLIHwKLQkJVVZEX1NPRlRfUkVTRVRfX1ZDUFVfU09GVF9SRVNFVF9NQVNLIHwK LQkJVVZEX1NPRlRfUkVTRVRfX0xCU0lfU09GVF9SRVNFVF9NQVNLIHwKLQkJVVZEX1NPRlRfUkVT RVRfX1JCQ19TT0ZUX1JFU0VUX01BU0sgfAotCQlVVkRfU09GVF9SRVNFVF9fQ1NNX1NPRlRfUkVT RVRfTUFTSyB8Ci0JCVVWRF9TT0ZUX1JFU0VUX19DWFdfU09GVF9SRVNFVF9NQVNLIHwKLQkJVVZE X1NPRlRfUkVTRVRfX1RBUF9TT0ZUX1JFU0VUX01BU0sgfAotCQlVVkRfU09GVF9SRVNFVF9fTE1J X1VNQ19TT0ZUX1JFU0VUX01BU0spOwotCW1kZWxheSg1KTsKKwlmb3IgKGsgPSAwOyBrIDwgYWRl di0+dXZkLm51bV91dmRfaW5zdDsgKytrKSB7CisJCXJpbmcgPSAmYWRldi0+dXZkLmluc3Rba10u cmluZzsKKwkJLyogZGlzYWJsZSBjbG9jayBnYXRpbmcgKi8KKwkJV1JFRzMyX1AoU09DMTVfUkVH X09GRlNFVChVVkQsIGssIG1tVVZEX0NHQ19DVFJMKSwgMCwKKwkJCQl+VVZEX0NHQ19DVFJMX19E WU5fQ0xPQ0tfTU9ERV9NQVNLKTsKIAotCS8qIGluaXRpYWxpemUgVVZEIG1lbW9yeSBjb250cm9s bGVyICovCi0JV1JFRzMyX1NPQzE1KFVWRCwgMCwgbW1VVkRfTE1JX0NUUkwsCi0JCSgweDQwIDw8 IFVWRF9MTUlfQ1RSTF9fV1JJVEVfQ0xFQU5fVElNRVJfX1NISUZUKSB8Ci0JCVVWRF9MTUlfQ1RS TF9fV1JJVEVfQ0xFQU5fVElNRVJfRU5fTUFTSyB8Ci0JCVVWRF9MTUlfQ1RSTF9fREFUQV9DT0hF UkVOQ1lfRU5fTUFTSyB8Ci0JCVVWRF9MTUlfQ1RSTF9fVkNQVV9EQVRBX0NPSEVSRU5DWV9FTl9N QVNLIHwKLQkJVVZEX0xNSV9DVFJMX19SRVFfTU9ERV9NQVNLIHwKLQkJMHgwMDEwMDAwMEwpOwor CQkvKiBkaXNhYmxlIGludGVydXB0ICovCisJCVdSRUczMl9QKFNPQzE1X1JFR19PRkZTRVQoVVZE LCBrLCBtbVVWRF9NQVNUSU5UX0VOKSwgMCwKKwkJCQl+VVZEX01BU1RJTlRfRU5fX1ZDUFVfRU5f TUFTSyk7CisKKwkJLyogc3RhbGwgVU1DIGFuZCByZWdpc3RlciBidXMgYmVmb3JlIHJlc2V0dGlu ZyBWQ1BVICovCisJCVdSRUczMl9QKFNPQzE1X1JFR19PRkZTRVQoVVZELCBrLCBtbVVWRF9MTUlf Q1RSTDIpLAorCQkJCVVWRF9MTUlfQ1RSTDJfX1NUQUxMX0FSQl9VTUNfTUFTSywKKwkJCQl+VVZE X0xNSV9DVFJMMl9fU1RBTExfQVJCX1VNQ19NQVNLKTsKKwkJbWRlbGF5KDEpOworCisJCS8qIHB1 dCBMTUksIFZDUFUsIFJCQyBldGMuLi4gaW50byByZXNldCAqLworCQlXUkVHMzJfU09DMTUoVVZE LCBrLCBtbVVWRF9TT0ZUX1JFU0VULAorCQkJVVZEX1NPRlRfUkVTRVRfX0xNSV9TT0ZUX1JFU0VU X01BU0sgfAorCQkJVVZEX1NPRlRfUkVTRVRfX1ZDUFVfU09GVF9SRVNFVF9NQVNLIHwKKwkJCVVW RF9TT0ZUX1JFU0VUX19MQlNJX1NPRlRfUkVTRVRfTUFTSyB8CisJCQlVVkRfU09GVF9SRVNFVF9f UkJDX1NPRlRfUkVTRVRfTUFTSyB8CisJCQlVVkRfU09GVF9SRVNFVF9fQ1NNX1NPRlRfUkVTRVRf TUFTSyB8CisJCQlVVkRfU09GVF9SRVNFVF9fQ1hXX1NPRlRfUkVTRVRfTUFTSyB8CisJCQlVVkRf U09GVF9SRVNFVF9fVEFQX1NPRlRfUkVTRVRfTUFTSyB8CisJCQlVVkRfU09GVF9SRVNFVF9fTE1J X1VNQ19TT0ZUX1JFU0VUX01BU0spOworCQltZGVsYXkoNSk7CisKKwkJLyogaW5pdGlhbGl6ZSBV VkQgbWVtb3J5IGNvbnRyb2xsZXIgKi8KKwkJV1JFRzMyX1NPQzE1KFVWRCwgaywgbW1VVkRfTE1J X0NUUkwsCisJCQkoMHg0MCA8PCBVVkRfTE1JX0NUUkxfX1dSSVRFX0NMRUFOX1RJTUVSX19TSElG VCkgfAorCQkJVVZEX0xNSV9DVFJMX19XUklURV9DTEVBTl9USU1FUl9FTl9NQVNLIHwKKwkJCVVW RF9MTUlfQ1RSTF9fREFUQV9DT0hFUkVOQ1lfRU5fTUFTSyB8CisJCQlVVkRfTE1JX0NUUkxfX1ZD UFVfREFUQV9DT0hFUkVOQ1lfRU5fTUFTSyB8CisJCQlVVkRfTE1JX0NUUkxfX1JFUV9NT0RFX01B U0sgfAorCQkJMHgwMDEwMDAwMEwpOwogCiAjaWZkZWYgX19CSUdfRU5ESUFOCi0JLyogc3dhcCAo OCBpbiAzMikgUkIgYW5kIElCICovCi0JbG1pX3N3YXBfY250bCA9IDB4YTsKLQltcF9zd2FwX2Nu dGwgPSAwOworCQkvKiBzd2FwICg4IGluIDMyKSBSQiBhbmQgSUIgKi8KKwkJbG1pX3N3YXBfY250 bCA9IDB4YTsKKwkJbXBfc3dhcF9jbnRsID0gMDsKICNlbmRpZgotCVdSRUczMl9TT0MxNShVVkQs IDAsIG1tVVZEX0xNSV9TV0FQX0NOVEwsIGxtaV9zd2FwX2NudGwpOwotCVdSRUczMl9TT0MxNShV VkQsIDAsIG1tVVZEX01QX1NXQVBfQ05UTCwgbXBfc3dhcF9jbnRsKTsKLQotCVdSRUczMl9TT0Mx NShVVkQsIDAsIG1tVVZEX01QQ19TRVRfTVVYQTAsIDB4NDBjMjA0MCk7Ci0JV1JFRzMyX1NPQzE1 KFVWRCwgMCwgbW1VVkRfTVBDX1NFVF9NVVhBMSwgMHgwKTsKLQlXUkVHMzJfU09DMTUoVVZELCAw LCBtbVVWRF9NUENfU0VUX01VWEIwLCAweDQwYzIwNDApOwotCVdSRUczMl9TT0MxNShVVkQsIDAs IG1tVVZEX01QQ19TRVRfTVVYQjEsIDB4MCk7Ci0JV1JFRzMyX1NPQzE1KFVWRCwgMCwgbW1VVkRf TVBDX1NFVF9BTFUsIDApOwotCVdSRUczMl9TT0MxNShVVkQsIDAsIG1tVVZEX01QQ19TRVRfTVVY LCAweDg4KTsKLQotCS8qIHRha2UgYWxsIHN1YmJsb2NrcyBvdXQgb2YgcmVzZXQsIGV4Y2VwdCBW Q1BVICovCi0JV1JFRzMyX1NPQzE1KFVWRCwgMCwgbW1VVkRfU09GVF9SRVNFVCwKLQkJCVVWRF9T T0ZUX1JFU0VUX19WQ1BVX1NPRlRfUkVTRVRfTUFTSyk7Ci0JbWRlbGF5KDUpOworCQlXUkVHMzJf U09DMTUoVVZELCBrLCBtbVVWRF9MTUlfU1dBUF9DTlRMLCBsbWlfc3dhcF9jbnRsKTsKKwkJV1JF RzMyX1NPQzE1KFVWRCwgaywgbW1VVkRfTVBfU1dBUF9DTlRMLCBtcF9zd2FwX2NudGwpOwogCi0J LyogZW5hYmxlIFZDUFUgY2xvY2sgKi8KLQlXUkVHMzJfU09DMTUoVVZELCAwLCBtbVVWRF9WQ1BV X0NOVEwsCi0JCQlVVkRfVkNQVV9DTlRMX19DTEtfRU5fTUFTSyk7CisJCVdSRUczMl9TT0MxNShV VkQsIGssIG1tVVZEX01QQ19TRVRfTVVYQTAsIDB4NDBjMjA0MCk7CisJCVdSRUczMl9TT0MxNShV VkQsIGssIG1tVVZEX01QQ19TRVRfTVVYQTEsIDB4MCk7CisJCVdSRUczMl9TT0MxNShVVkQsIGss IG1tVVZEX01QQ19TRVRfTVVYQjAsIDB4NDBjMjA0MCk7CisJCVdSRUczMl9TT0MxNShVVkQsIGss IG1tVVZEX01QQ19TRVRfTVVYQjEsIDB4MCk7CisJCVdSRUczMl9TT0MxNShVVkQsIGssIG1tVVZE X01QQ19TRVRfQUxVLCAwKTsKKwkJV1JFRzMyX1NPQzE1KFVWRCwgaywgbW1VVkRfTVBDX1NFVF9N VVgsIDB4ODgpOwogCi0JLyogZW5hYmxlIFVNQyAqLwotCVdSRUczMl9QKFNPQzE1X1JFR19PRkZT RVQoVVZELCAwLCBtbVVWRF9MTUlfQ1RSTDIpLCAwLAotCQkJflVWRF9MTUlfQ1RSTDJfX1NUQUxM X0FSQl9VTUNfTUFTSyk7CisJCS8qIHRha2UgYWxsIHN1YmJsb2NrcyBvdXQgb2YgcmVzZXQsIGV4 Y2VwdCBWQ1BVICovCisJCVdSRUczMl9TT0MxNShVVkQsIGssIG1tVVZEX1NPRlRfUkVTRVQsCisJ CQkJVVZEX1NPRlRfUkVTRVRfX1ZDUFVfU09GVF9SRVNFVF9NQVNLKTsKKwkJbWRlbGF5KDUpOwog Ci0JLyogYm9vdCB1cCB0aGUgVkNQVSAqLwotCVdSRUczMl9TT0MxNShVVkQsIDAsIG1tVVZEX1NP RlRfUkVTRVQsIDApOwotCW1kZWxheSgxMCk7CisJCS8qIGVuYWJsZSBWQ1BVIGNsb2NrICovCisJ CVdSRUczMl9TT0MxNShVVkQsIGssIG1tVVZEX1ZDUFVfQ05UTCwKKwkJCQlVVkRfVkNQVV9DTlRM X19DTEtfRU5fTUFTSyk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgMTA7ICsraSkgewotCQl1aW50MzJf dCBzdGF0dXM7CisJCS8qIGVuYWJsZSBVTUMgKi8KKwkJV1JFRzMyX1AoU09DMTVfUkVHX09GRlNF VChVVkQsIGssIG1tVVZEX0xNSV9DVFJMMiksIDAsCisJCQkJflVWRF9MTUlfQ1RSTDJfX1NUQUxM X0FSQl9VTUNfTUFTSyk7CiAKLQkJZm9yIChqID0gMDsgaiA8IDEwMDsgKytqKSB7Ci0JCQlzdGF0 dXMgPSBSUkVHMzJfU09DMTUoVVZELCAwLCBtbVVWRF9TVEFUVVMpOworCQkvKiBib290IHVwIHRo ZSBWQ1BVICovCisJCVdSRUczMl9TT0MxNShVVkQsIGssIG1tVVZEX1NPRlRfUkVTRVQsIDApOwor CQltZGVsYXkoMTApOworCisJCWZvciAoaSA9IDA7IGkgPCAxMDsgKytpKSB7CisJCQl1aW50MzJf dCBzdGF0dXM7CisKKwkJCWZvciAoaiA9IDA7IGogPCAxMDA7ICsraikgeworCQkJCXN0YXR1cyA9 IFJSRUczMl9TT0MxNShVVkQsIGssIG1tVVZEX1NUQVRVUyk7CisJCQkJaWYgKHN0YXR1cyAmIDIp CisJCQkJCWJyZWFrOworCQkJCW1kZWxheSgxMCk7CisJCQl9CisJCQlyID0gMDsKIAkJCWlmIChz dGF0dXMgJiAyKQogCQkJCWJyZWFrOworCisJCQlEUk1fRVJST1IoIlVWRCglZCkgbm90IHJlc3Bv bmRpbmcsIHRyeWluZyB0byByZXNldCB0aGUgVkNQVSEhIVxuIiwgayk7CisJCQlXUkVHMzJfUChT T0MxNV9SRUdfT0ZGU0VUKFVWRCwgaywgbW1VVkRfU09GVF9SRVNFVCksCisJCQkJCVVWRF9TT0ZU X1JFU0VUX19WQ1BVX1NPRlRfUkVTRVRfTUFTSywKKwkJCQkJflVWRF9TT0ZUX1JFU0VUX19WQ1BV X1NPRlRfUkVTRVRfTUFTSyk7CisJCQltZGVsYXkoMTApOworCQkJV1JFRzMyX1AoU09DMTVfUkVH X09GRlNFVChVVkQsIGssIG1tVVZEX1NPRlRfUkVTRVQpLCAwLAorCQkJCQl+VVZEX1NPRlRfUkVT RVRfX1ZDUFVfU09GVF9SRVNFVF9NQVNLKTsKIAkJCW1kZWxheSgxMCk7CisJCQlyID0gLTE7CiAJ CX0KLQkJciA9IDA7Ci0JCWlmIChzdGF0dXMgJiAyKQotCQkJYnJlYWs7CiAKLQkJRFJNX0VSUk9S KCJVVkQgbm90IHJlc3BvbmRpbmcsIHRyeWluZyB0byByZXNldCB0aGUgVkNQVSEhIVxuIik7Ci0J CVdSRUczMl9QKFNPQzE1X1JFR19PRkZTRVQoVVZELCAwLCBtbVVWRF9TT0ZUX1JFU0VUKSwKLQkJ CQlVVkRfU09GVF9SRVNFVF9fVkNQVV9TT0ZUX1JFU0VUX01BU0ssCi0JCQkJflVWRF9TT0ZUX1JF U0VUX19WQ1BVX1NPRlRfUkVTRVRfTUFTSyk7Ci0JCW1kZWxheSgxMCk7Ci0JCVdSRUczMl9QKFNP QzE1X1JFR19PRkZTRVQoVVZELCAwLCBtbVVWRF9TT0ZUX1JFU0VUKSwgMCwKLQkJCQl+VVZEX1NP RlRfUkVTRVRfX1ZDUFVfU09GVF9SRVNFVF9NQVNLKTsKLQkJbWRlbGF5KDEwKTsKLQkJciA9IC0x OwotCX0KLQotCWlmIChyKSB7Ci0JCURSTV9FUlJPUigiVVZEIG5vdCByZXNwb25kaW5nLCBnaXZp bmcgdXAhISFcbiIpOwotCQlyZXR1cm4gcjsKLQl9Ci0JLyogZW5hYmxlIG1hc3RlciBpbnRlcnJ1 cHQgKi8KLQlXUkVHMzJfUChTT0MxNV9SRUdfT0ZGU0VUKFVWRCwgMCwgbW1VVkRfTUFTVElOVF9F TiksCi0JCShVVkRfTUFTVElOVF9FTl9fVkNQVV9FTl9NQVNLfFVWRF9NQVNUSU5UX0VOX19TWVNf RU5fTUFTSyksCi0JCX4oVVZEX01BU1RJTlRfRU5fX1ZDUFVfRU5fTUFTS3xVVkRfTUFTVElOVF9F Tl9fU1lTX0VOX01BU0spKTsKLQotCS8qIGNsZWFyIHRoZSBiaXQgNCBvZiBVVkRfU1RBVFVTICov Ci0JV1JFRzMyX1AoU09DMTVfUkVHX09GRlNFVChVVkQsIDAsIG1tVVZEX1NUQVRVUyksIDAsCi0J CQl+KDIgPDwgVVZEX1NUQVRVU19fVkNQVV9SRVBPUlRfX1NISUZUKSk7Ci0KLQkvKiBmb3JjZSBS QkMgaW50byBpZGxlIHN0YXRlICovCi0JcmJfYnVmc3ogPSBvcmRlcl9iYXNlXzIocmluZy0+cmlu Z19zaXplKTsKLQl0bXAgPSBSRUdfU0VUX0ZJRUxEKDAsIFVWRF9SQkNfUkJfQ05UTCwgUkJfQlVG U1osIHJiX2J1ZnN6KTsKLQl0bXAgPSBSRUdfU0VUX0ZJRUxEKHRtcCwgVVZEX1JCQ19SQl9DTlRM LCBSQl9CTEtTWiwgMSk7Ci0JdG1wID0gUkVHX1NFVF9GSUVMRCh0bXAsIFVWRF9SQkNfUkJfQ05U TCwgUkJfTk9fRkVUQ0gsIDEpOwotCXRtcCA9IFJFR19TRVRfRklFTEQodG1wLCBVVkRfUkJDX1JC X0NOVEwsIFJCX1dQVFJfUE9MTF9FTiwgMCk7Ci0JdG1wID0gUkVHX1NFVF9GSUVMRCh0bXAsIFVW RF9SQkNfUkJfQ05UTCwgUkJfTk9fVVBEQVRFLCAxKTsKLQl0bXAgPSBSRUdfU0VUX0ZJRUxEKHRt cCwgVVZEX1JCQ19SQl9DTlRMLCBSQl9SUFRSX1dSX0VOLCAxKTsKLQlXUkVHMzJfU09DMTUoVVZE LCAwLCBtbVVWRF9SQkNfUkJfQ05UTCwgdG1wKTsKLQotCS8qIHNldCB0aGUgd3JpdGUgcG9pbnRl ciBkZWxheSAqLwotCVdSRUczMl9TT0MxNShVVkQsIDAsIG1tVVZEX1JCQ19SQl9XUFRSX0NOVEws IDApOwotCi0JLyogc2V0IHRoZSB3YiBhZGRyZXNzICovCi0JV1JFRzMyX1NPQzE1KFVWRCwgMCwg bW1VVkRfUkJDX1JCX1JQVFJfQUREUiwKLQkJCSh1cHBlcl8zMl9iaXRzKHJpbmctPmdwdV9hZGRy KSA+PiAyKSk7Ci0KLQkvKiBwcm9ncmFtbSB0aGUgUkJfQkFTRSBmb3IgcmluZyBidWZmZXIgKi8K LQlXUkVHMzJfU09DMTUoVVZELCAwLCBtbVVWRF9MTUlfUkJDX1JCXzY0QklUX0JBUl9MT1csCi0J CQlsb3dlcl8zMl9iaXRzKHJpbmctPmdwdV9hZGRyKSk7Ci0JV1JFRzMyX1NPQzE1KFVWRCwgMCwg bW1VVkRfTE1JX1JCQ19SQl82NEJJVF9CQVJfSElHSCwKLQkJCXVwcGVyXzMyX2JpdHMocmluZy0+ Z3B1X2FkZHIpKTsKLQotCS8qIEluaXRpYWxpemUgdGhlIHJpbmcgYnVmZmVyJ3MgcmVhZCBhbmQg d3JpdGUgcG9pbnRlcnMgKi8KLQlXUkVHMzJfU09DMTUoVVZELCAwLCBtbVVWRF9SQkNfUkJfUlBU UiwgMCk7Ci0KLQlyaW5nLT53cHRyID0gUlJFRzMyX1NPQzE1KFVWRCwgMCwgbW1VVkRfUkJDX1JC X1JQVFIpOwotCVdSRUczMl9TT0MxNShVVkQsIDAsIG1tVVZEX1JCQ19SQl9XUFRSLAotCQkJbG93 ZXJfMzJfYml0cyhyaW5nLT53cHRyKSk7Ci0KLQlXUkVHMzJfUChTT0MxNV9SRUdfT0ZGU0VUKFVW RCwgMCwgbW1VVkRfUkJDX1JCX0NOVEwpLCAwLAotCQkJflVWRF9SQkNfUkJfQ05UTF9fUkJfTk9f RkVUQ0hfTUFTSyk7Ci0KLQlyaW5nID0gJmFkZXYtPnV2ZC5pbnN0LT5yaW5nX2VuY1swXTsKLQlX UkVHMzJfU09DMTUoVVZELCAwLCBtbVVWRF9SQl9SUFRSLCBsb3dlcl8zMl9iaXRzKHJpbmctPndw dHIpKTsKLQlXUkVHMzJfU09DMTUoVVZELCAwLCBtbVVWRF9SQl9XUFRSLCBsb3dlcl8zMl9iaXRz KHJpbmctPndwdHIpKTsKLQlXUkVHMzJfU09DMTUoVVZELCAwLCBtbVVWRF9SQl9CQVNFX0xPLCBy aW5nLT5ncHVfYWRkcik7Ci0JV1JFRzMyX1NPQzE1KFVWRCwgMCwgbW1VVkRfUkJfQkFTRV9ISSwg dXBwZXJfMzJfYml0cyhyaW5nLT5ncHVfYWRkcikpOwotCVdSRUczMl9TT0MxNShVVkQsIDAsIG1t VVZEX1JCX1NJWkUsIHJpbmctPnJpbmdfc2l6ZSAvIDQpOworCQlpZiAocikgeworCQkJRFJNX0VS Uk9SKCJVVkQoJWQpIG5vdCByZXNwb25kaW5nLCBnaXZpbmcgdXAhISFcbiIsIGspOworCQkJcmV0 dXJuIHI7CisJCX0KKwkJLyogZW5hYmxlIG1hc3RlciBpbnRlcnJ1cHQgKi8KKwkJV1JFRzMyX1Ao U09DMTVfUkVHX09GRlNFVChVVkQsIGssIG1tVVZEX01BU1RJTlRfRU4pLAorCQkJKFVWRF9NQVNU SU5UX0VOX19WQ1BVX0VOX01BU0t8VVZEX01BU1RJTlRfRU5fX1NZU19FTl9NQVNLKSwKKwkJCX4o VVZEX01BU1RJTlRfRU5fX1ZDUFVfRU5fTUFTS3xVVkRfTUFTVElOVF9FTl9fU1lTX0VOX01BU0sp KTsKIAotCXJpbmcgPSAmYWRldi0+dXZkLmluc3QtPnJpbmdfZW5jWzFdOwotCVdSRUczMl9TT0Mx NShVVkQsIDAsIG1tVVZEX1JCX1JQVFIyLCBsb3dlcl8zMl9iaXRzKHJpbmctPndwdHIpKTsKLQlX UkVHMzJfU09DMTUoVVZELCAwLCBtbVVWRF9SQl9XUFRSMiwgbG93ZXJfMzJfYml0cyhyaW5nLT53 cHRyKSk7Ci0JV1JFRzMyX1NPQzE1KFVWRCwgMCwgbW1VVkRfUkJfQkFTRV9MTzIsIHJpbmctPmdw dV9hZGRyKTsKLQlXUkVHMzJfU09DMTUoVVZELCAwLCBtbVVWRF9SQl9CQVNFX0hJMiwgdXBwZXJf MzJfYml0cyhyaW5nLT5ncHVfYWRkcikpOwotCVdSRUczMl9TT0MxNShVVkQsIDAsIG1tVVZEX1JC X1NJWkUyLCByaW5nLT5yaW5nX3NpemUgLyA0KTsKKwkJLyogY2xlYXIgdGhlIGJpdCA0IG9mIFVW RF9TVEFUVVMgKi8KKwkJV1JFRzMyX1AoU09DMTVfUkVHX09GRlNFVChVVkQsIGssIG1tVVZEX1NU QVRVUyksIDAsCisJCQkJfigyIDw8IFVWRF9TVEFUVVNfX1ZDUFVfUkVQT1JUX19TSElGVCkpOwog CisJCS8qIGZvcmNlIFJCQyBpbnRvIGlkbGUgc3RhdGUgKi8KKwkJcmJfYnVmc3ogPSBvcmRlcl9i YXNlXzIocmluZy0+cmluZ19zaXplKTsKKwkJdG1wID0gUkVHX1NFVF9GSUVMRCgwLCBVVkRfUkJD X1JCX0NOVEwsIFJCX0JVRlNaLCByYl9idWZzeik7CisJCXRtcCA9IFJFR19TRVRfRklFTEQodG1w LCBVVkRfUkJDX1JCX0NOVEwsIFJCX0JMS1NaLCAxKTsKKwkJdG1wID0gUkVHX1NFVF9GSUVMRCh0 bXAsIFVWRF9SQkNfUkJfQ05UTCwgUkJfTk9fRkVUQ0gsIDEpOworCQl0bXAgPSBSRUdfU0VUX0ZJ RUxEKHRtcCwgVVZEX1JCQ19SQl9DTlRMLCBSQl9XUFRSX1BPTExfRU4sIDApOworCQl0bXAgPSBS RUdfU0VUX0ZJRUxEKHRtcCwgVVZEX1JCQ19SQl9DTlRMLCBSQl9OT19VUERBVEUsIDEpOworCQl0 bXAgPSBSRUdfU0VUX0ZJRUxEKHRtcCwgVVZEX1JCQ19SQl9DTlRMLCBSQl9SUFRSX1dSX0VOLCAx KTsKKwkJV1JFRzMyX1NPQzE1KFVWRCwgaywgbW1VVkRfUkJDX1JCX0NOVEwsIHRtcCk7CisKKwkJ Lyogc2V0IHRoZSB3cml0ZSBwb2ludGVyIGRlbGF5ICovCisJCVdSRUczMl9TT0MxNShVVkQsIGss IG1tVVZEX1JCQ19SQl9XUFRSX0NOVEwsIDApOworCisJCS8qIHNldCB0aGUgd2IgYWRkcmVzcyAq LworCQlXUkVHMzJfU09DMTUoVVZELCBrLCBtbVVWRF9SQkNfUkJfUlBUUl9BRERSLAorCQkJCSh1 cHBlcl8zMl9iaXRzKHJpbmctPmdwdV9hZGRyKSA+PiAyKSk7CisKKwkJLyogcHJvZ3JhbW0gdGhl IFJCX0JBU0UgZm9yIHJpbmcgYnVmZmVyICovCisJCVdSRUczMl9TT0MxNShVVkQsIGssIG1tVVZE X0xNSV9SQkNfUkJfNjRCSVRfQkFSX0xPVywKKwkJCQlsb3dlcl8zMl9iaXRzKHJpbmctPmdwdV9h ZGRyKSk7CisJCVdSRUczMl9TT0MxNShVVkQsIGssIG1tVVZEX0xNSV9SQkNfUkJfNjRCSVRfQkFS X0hJR0gsCisJCQkJdXBwZXJfMzJfYml0cyhyaW5nLT5ncHVfYWRkcikpOworCisJCS8qIEluaXRp YWxpemUgdGhlIHJpbmcgYnVmZmVyJ3MgcmVhZCBhbmQgd3JpdGUgcG9pbnRlcnMgKi8KKwkJV1JF RzMyX1NPQzE1KFVWRCwgaywgbW1VVkRfUkJDX1JCX1JQVFIsIDApOworCisJCXJpbmctPndwdHIg PSBSUkVHMzJfU09DMTUoVVZELCBrLCBtbVVWRF9SQkNfUkJfUlBUUik7CisJCVdSRUczMl9TT0Mx NShVVkQsIGssIG1tVVZEX1JCQ19SQl9XUFRSLAorCQkJCWxvd2VyXzMyX2JpdHMocmluZy0+d3B0 cikpOworCisJCVdSRUczMl9QKFNPQzE1X1JFR19PRkZTRVQoVVZELCBrLCBtbVVWRF9SQkNfUkJf Q05UTCksIDAsCisJCQkJflVWRF9SQkNfUkJfQ05UTF9fUkJfTk9fRkVUQ0hfTUFTSyk7CisKKwkJ cmluZyA9ICZhZGV2LT51dmQuaW5zdFtrXS5yaW5nX2VuY1swXTsKKwkJV1JFRzMyX1NPQzE1KFVW RCwgaywgbW1VVkRfUkJfUlBUUiwgbG93ZXJfMzJfYml0cyhyaW5nLT53cHRyKSk7CisJCVdSRUcz Ml9TT0MxNShVVkQsIGssIG1tVVZEX1JCX1dQVFIsIGxvd2VyXzMyX2JpdHMocmluZy0+d3B0cikp OworCQlXUkVHMzJfU09DMTUoVVZELCBrLCBtbVVWRF9SQl9CQVNFX0xPLCByaW5nLT5ncHVfYWRk cik7CisJCVdSRUczMl9TT0MxNShVVkQsIGssIG1tVVZEX1JCX0JBU0VfSEksIHVwcGVyXzMyX2Jp dHMocmluZy0+Z3B1X2FkZHIpKTsKKwkJV1JFRzMyX1NPQzE1KFVWRCwgaywgbW1VVkRfUkJfU0la RSwgcmluZy0+cmluZ19zaXplIC8gNCk7CisKKwkJcmluZyA9ICZhZGV2LT51dmQuaW5zdFtrXS5y aW5nX2VuY1sxXTsKKwkJV1JFRzMyX1NPQzE1KFVWRCwgaywgbW1VVkRfUkJfUlBUUjIsIGxvd2Vy XzMyX2JpdHMocmluZy0+d3B0cikpOworCQlXUkVHMzJfU09DMTUoVVZELCBrLCBtbVVWRF9SQl9X UFRSMiwgbG93ZXJfMzJfYml0cyhyaW5nLT53cHRyKSk7CisJCVdSRUczMl9TT0MxNShVVkQsIGss IG1tVVZEX1JCX0JBU0VfTE8yLCByaW5nLT5ncHVfYWRkcik7CisJCVdSRUczMl9TT0MxNShVVkQs IGssIG1tVVZEX1JCX0JBU0VfSEkyLCB1cHBlcl8zMl9iaXRzKHJpbmctPmdwdV9hZGRyKSk7CisJ CVdSRUczMl9TT0MxNShVVkQsIGssIG1tVVZEX1JCX1NJWkUyLCByaW5nLT5yaW5nX3NpemUgLyA0 KTsKKwl9CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEwNTQsMjYgKzEwNzcsMzAgQEAgc3RhdGljIGlu dCB1dmRfdjdfMF9zdGFydChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKICAqLwogc3RhdGlj IHZvaWQgdXZkX3Y3XzBfc3RvcChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKIHsKLQkvKiBm b3JjZSBSQkMgaW50byBpZGxlIHN0YXRlICovCi0JV1JFRzMyX1NPQzE1KFVWRCwgMCwgbW1VVkRf UkJDX1JCX0NOVEwsIDB4MTEwMTAxMDEpOwotCi0JLyogU3RhbGwgVU1DIGFuZCByZWdpc3RlciBi dXMgYmVmb3JlIHJlc2V0dGluZyBWQ1BVICovCi0JV1JFRzMyX1AoU09DMTVfUkVHX09GRlNFVChV VkQsIDAsIG1tVVZEX0xNSV9DVFJMMiksCi0JCQlVVkRfTE1JX0NUUkwyX19TVEFMTF9BUkJfVU1D X01BU0ssCi0JCQl+VVZEX0xNSV9DVFJMMl9fU1RBTExfQVJCX1VNQ19NQVNLKTsKLQltZGVsYXko MSk7Ci0KLQkvKiBwdXQgVkNQVSBpbnRvIHJlc2V0ICovCi0JV1JFRzMyX1NPQzE1KFVWRCwgMCwg bW1VVkRfU09GVF9SRVNFVCwKLQkJCVVWRF9TT0ZUX1JFU0VUX19WQ1BVX1NPRlRfUkVTRVRfTUFT Syk7Ci0JbWRlbGF5KDUpOworCXVpbnQ4X3QgaSA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgYWRl di0+dXZkLm51bV91dmRfaW5zdDsgKytpKSB7CisJCS8qIGZvcmNlIFJCQyBpbnRvIGlkbGUgc3Rh dGUgKi8KKwkJV1JFRzMyX1NPQzE1KFVWRCwgaSwgbW1VVkRfUkJDX1JCX0NOVEwsIDB4MTEwMTAx MDEpOwogCi0JLyogZGlzYWJsZSBWQ1BVIGNsb2NrICovCi0JV1JFRzMyX1NPQzE1KFVWRCwgMCwg bW1VVkRfVkNQVV9DTlRMLCAweDApOworCQkvKiBTdGFsbCBVTUMgYW5kIHJlZ2lzdGVyIGJ1cyBi ZWZvcmUgcmVzZXR0aW5nIFZDUFUgKi8KKwkJV1JFRzMyX1AoU09DMTVfUkVHX09GRlNFVChVVkQs IGksIG1tVVZEX0xNSV9DVFJMMiksCisJCQkJVVZEX0xNSV9DVFJMMl9fU1RBTExfQVJCX1VNQ19N QVNLLAorCQkJCX5VVkRfTE1JX0NUUkwyX19TVEFMTF9BUkJfVU1DX01BU0spOworCQltZGVsYXko MSk7CiAKLQkvKiBVbnN0YWxsIFVNQyBhbmQgcmVnaXN0ZXIgYnVzICovCi0JV1JFRzMyX1AoU09D MTVfUkVHX09GRlNFVChVVkQsIDAsIG1tVVZEX0xNSV9DVFJMMiksIDAsCi0JCQl+VVZEX0xNSV9D VFJMMl9fU1RBTExfQVJCX1VNQ19NQVNLKTsKKwkJLyogcHV0IFZDUFUgaW50byByZXNldCAqLwor CQlXUkVHMzJfU09DMTUoVVZELCBpLCBtbVVWRF9TT0ZUX1JFU0VULAorCQkJCVVWRF9TT0ZUX1JF U0VUX19WQ1BVX1NPRlRfUkVTRVRfTUFTSyk7CisJCW1kZWxheSg1KTsKKworCQkvKiBkaXNhYmxl IFZDUFUgY2xvY2sgKi8KKwkJV1JFRzMyX1NPQzE1KFVWRCwgaSwgbW1VVkRfVkNQVV9DTlRMLCAw eDApOworCisJCS8qIFVuc3RhbGwgVU1DIGFuZCByZWdpc3RlciBidXMgKi8KKwkJV1JFRzMyX1Ao U09DMTVfUkVHX09GRlNFVChVVkQsIGksIG1tVVZEX0xNSV9DVFJMMiksIDAsCisJCQkJflVWRF9M TUlfQ1RSTDJfX1NUQUxMX0FSQl9VTUNfTUFTSyk7CisJfQogfQogCiAvKioKQEAgLTEwOTIsMjYg KzExMTksMjYgQEAgc3RhdGljIHZvaWQgdXZkX3Y3XzBfcmluZ19lbWl0X2ZlbmNlKHN0cnVjdCBh bWRncHVfcmluZyAqcmluZywgdTY0IGFkZHIsIHU2NCBzZXEKIAlXQVJOX09OKGZsYWdzICYgQU1E R1BVX0ZFTkNFX0ZMQUdfNjRCSVQpOwogCiAJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywKLQkJUEFD S0VUMChTT0MxNV9SRUdfT0ZGU0VUKFVWRCwgMCwgbW1VVkRfQ09OVEVYVF9JRCksIDApKTsKKwkJ UEFDS0VUMChTT0MxNV9SRUdfT0ZGU0VUKFVWRCwgcmluZy0+bWUsIG1tVVZEX0NPTlRFWFRfSUQp LCAwKSk7CiAJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgc2VxKTsKIAlhbWRncHVfcmluZ193cml0 ZShyaW5nLAotCQlQQUNLRVQwKFNPQzE1X1JFR19PRkZTRVQoVVZELCAwLCBtbVVWRF9HUENPTV9W Q1BVX0RBVEEwKSwgMCkpOworCQlQQUNLRVQwKFNPQzE1X1JFR19PRkZTRVQoVVZELCByaW5nLT5t ZSwgbW1VVkRfR1BDT01fVkNQVV9EQVRBMCksIDApKTsKIAlhbWRncHVfcmluZ193cml0ZShyaW5n LCBhZGRyICYgMHhmZmZmZmZmZik7CiAJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywKLQkJUEFDS0VU MChTT0MxNV9SRUdfT0ZGU0VUKFVWRCwgMCwgbW1VVkRfR1BDT01fVkNQVV9EQVRBMSksIDApKTsK KwkJUEFDS0VUMChTT0MxNV9SRUdfT0ZGU0VUKFVWRCwgcmluZy0+bWUsIG1tVVZEX0dQQ09NX1ZD UFVfREFUQTEpLCAwKSk7CiAJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgdXBwZXJfMzJfYml0cyhh ZGRyKSAmIDB4ZmYpOwogCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsCi0JCVBBQ0tFVDAoU09DMTVf UkVHX09GRlNFVChVVkQsIDAsIG1tVVZEX0dQQ09NX1ZDUFVfQ01EKSwgMCkpOworCQlQQUNLRVQw KFNPQzE1X1JFR19PRkZTRVQoVVZELCByaW5nLT5tZSwgbW1VVkRfR1BDT01fVkNQVV9DTUQpLCAw KSk7CiAJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgMCk7CiAKIAlhbWRncHVfcmluZ193cml0ZShy aW5nLAotCQlQQUNLRVQwKFNPQzE1X1JFR19PRkZTRVQoVVZELCAwLCBtbVVWRF9HUENPTV9WQ1BV X0RBVEEwKSwgMCkpOworCQlQQUNLRVQwKFNPQzE1X1JFR19PRkZTRVQoVVZELCByaW5nLT5tZSwg bW1VVkRfR1BDT01fVkNQVV9EQVRBMCksIDApKTsKIAlhbWRncHVfcmluZ193cml0ZShyaW5nLCAw KTsKIAlhbWRncHVfcmluZ193cml0ZShyaW5nLAotCQlQQUNLRVQwKFNPQzE1X1JFR19PRkZTRVQo VVZELCAwLCBtbVVWRF9HUENPTV9WQ1BVX0RBVEExKSwgMCkpOworCQlQQUNLRVQwKFNPQzE1X1JF R19PRkZTRVQoVVZELCByaW5nLT5tZSwgbW1VVkRfR1BDT01fVkNQVV9EQVRBMSksIDApKTsKIAlh bWRncHVfcmluZ193cml0ZShyaW5nLCAwKTsKIAlhbWRncHVfcmluZ193cml0ZShyaW5nLAotCQlQ QUNLRVQwKFNPQzE1X1JFR19PRkZTRVQoVVZELCAwLCBtbVVWRF9HUENPTV9WQ1BVX0NNRCksIDAp KTsKKwkJUEFDS0VUMChTT0MxNV9SRUdfT0ZGU0VUKFVWRCwgcmluZy0+bWUsIG1tVVZEX0dQQ09N X1ZDUFVfQ01EKSwgMCkpOwogCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIDIpOwogfQogCkBAIC0x MTYwLDcgKzExODcsNyBAQCBzdGF0aWMgaW50IHV2ZF92N18wX3JpbmdfdGVzdF9yaW5nKHN0cnVj dCBhbWRncHVfcmluZyAqcmluZykKIAl1bnNpZ25lZCBpOwogCWludCByOwogCi0JV1JFRzMyX1NP QzE1KFVWRCwgMCwgbW1VVkRfQ09OVEVYVF9JRCwgMHhDQUZFREVBRCk7CisJV1JFRzMyX1NPQzE1 KFVWRCwgcmluZy0+bWUsIG1tVVZEX0NPTlRFWFRfSUQsIDB4Q0FGRURFQUQpOwogCXIgPSBhbWRn cHVfcmluZ19hbGxvYyhyaW5nLCAzKTsKIAlpZiAocikgewogCQlEUk1fRVJST1IoImFtZGdwdTog KCVkKWNwIGZhaWxlZCB0byBsb2NrIHJpbmcgJWQgKCVkKS5cbiIsCkBAIC0xMTY4LDExICsxMTk1 LDExIEBAIHN0YXRpYyBpbnQgdXZkX3Y3XzBfcmluZ190ZXN0X3Jpbmcoc3RydWN0IGFtZGdwdV9y aW5nICpyaW5nKQogCQlyZXR1cm4gcjsKIAl9CiAJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywKLQkJ UEFDS0VUMChTT0MxNV9SRUdfT0ZGU0VUKFVWRCwgMCwgbW1VVkRfQ09OVEVYVF9JRCksIDApKTsK KwkJUEFDS0VUMChTT0MxNV9SRUdfT0ZGU0VUKFVWRCwgcmluZy0+bWUsIG1tVVZEX0NPTlRFWFRf SUQpLCAwKSk7CiAJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgMHhERUFEQkVFRik7CiAJYW1kZ3B1 X3JpbmdfY29tbWl0KHJpbmcpOwogCWZvciAoaSA9IDA7IGkgPCBhZGV2LT51c2VjX3RpbWVvdXQ7 IGkrKykgewotCQl0bXAgPSBSUkVHMzJfU09DMTUoVVZELCAwLCBtbVVWRF9DT05URVhUX0lEKTsK KwkJdG1wID0gUlJFRzMyX1NPQzE1KFVWRCwgcmluZy0+bWUsIG1tVVZEX0NPTlRFWFRfSUQpOwog CQlpZiAodG1wID09IDB4REVBREJFRUYpCiAJCQlicmVhazsKIAkJRFJNX1VERUxBWSgxKTsKQEAg LTEyMDQsMTcgKzEyMzEsMTcgQEAgc3RhdGljIHZvaWQgdXZkX3Y3XzBfcmluZ19lbWl0X2liKHN0 cnVjdCBhbWRncHVfcmluZyAqcmluZywKIAlzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiA9IHJp bmctPmFkZXY7CiAKIAlhbWRncHVfcmluZ193cml0ZShyaW5nLAotCQlQQUNLRVQwKFNPQzE1X1JF R19PRkZTRVQoVVZELCAwLCBtbVVWRF9MTUlfUkJDX0lCX1ZNSUQpLCAwKSk7CisJCVBBQ0tFVDAo U09DMTVfUkVHX09GRlNFVChVVkQsIHJpbmctPm1lLCBtbVVWRF9MTUlfUkJDX0lCX1ZNSUQpLCAw KSk7CiAJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgdm1pZCk7CiAKIAlhbWRncHVfcmluZ193cml0 ZShyaW5nLAotCQlQQUNLRVQwKFNPQzE1X1JFR19PRkZTRVQoVVZELCAwLCBtbVVWRF9MTUlfUkJD X0lCXzY0QklUX0JBUl9MT1cpLCAwKSk7CisJCVBBQ0tFVDAoU09DMTVfUkVHX09GRlNFVChVVkQs IHJpbmctPm1lLCBtbVVWRF9MTUlfUkJDX0lCXzY0QklUX0JBUl9MT1cpLCAwKSk7CiAJYW1kZ3B1 X3Jpbmdfd3JpdGUocmluZywgbG93ZXJfMzJfYml0cyhpYi0+Z3B1X2FkZHIpKTsKIAlhbWRncHVf cmluZ193cml0ZShyaW5nLAotCQlQQUNLRVQwKFNPQzE1X1JFR19PRkZTRVQoVVZELCAwLCBtbVVW RF9MTUlfUkJDX0lCXzY0QklUX0JBUl9ISUdIKSwgMCkpOworCQlQQUNLRVQwKFNPQzE1X1JFR19P RkZTRVQoVVZELCByaW5nLT5tZSwgbW1VVkRfTE1JX1JCQ19JQl82NEJJVF9CQVJfSElHSCksIDAp KTsKIAlhbWRncHVfcmluZ193cml0ZShyaW5nLCB1cHBlcl8zMl9iaXRzKGliLT5ncHVfYWRkcikp OwogCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsCi0JCVBBQ0tFVDAoU09DMTVfUkVHX09GRlNFVChV VkQsIDAsIG1tVVZEX1JCQ19JQl9TSVpFKSwgMCkpOworCQlQQUNLRVQwKFNPQzE1X1JFR19PRkZT RVQoVVZELCByaW5nLT5tZSwgbW1VVkRfUkJDX0lCX1NJWkUpLCAwKSk7CiAJYW1kZ3B1X3Jpbmdf d3JpdGUocmluZywgaWItPmxlbmd0aF9kdyk7CiB9CiAKQEAgLTEyNDIsMTMgKzEyNjksMTMgQEAg c3RhdGljIHZvaWQgdXZkX3Y3XzBfcmluZ19lbWl0X3dyZWcoc3RydWN0IGFtZGdwdV9yaW5nICpy aW5nLAogCXN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0gcmluZy0+YWRldjsKIAogCWFtZGdw dV9yaW5nX3dyaXRlKHJpbmcsCi0JCVBBQ0tFVDAoU09DMTVfUkVHX09GRlNFVChVVkQsIDAsIG1t VVZEX0dQQ09NX1ZDUFVfREFUQTApLCAwKSk7CisJCVBBQ0tFVDAoU09DMTVfUkVHX09GRlNFVChV VkQsIHJpbmctPm1lLCBtbVVWRF9HUENPTV9WQ1BVX0RBVEEwKSwgMCkpOwogCWFtZGdwdV9yaW5n X3dyaXRlKHJpbmcsIHJlZyA8PCAyKTsKIAlhbWRncHVfcmluZ193cml0ZShyaW5nLAotCQlQQUNL RVQwKFNPQzE1X1JFR19PRkZTRVQoVVZELCAwLCBtbVVWRF9HUENPTV9WQ1BVX0RBVEExKSwgMCkp OworCQlQQUNLRVQwKFNPQzE1X1JFR19PRkZTRVQoVVZELCByaW5nLT5tZSwgbW1VVkRfR1BDT01f VkNQVV9EQVRBMSksIDApKTsKIAlhbWRncHVfcmluZ193cml0ZShyaW5nLCB2YWwpOwogCWFtZGdw dV9yaW5nX3dyaXRlKHJpbmcsCi0JCVBBQ0tFVDAoU09DMTVfUkVHX09GRlNFVChVVkQsIDAsIG1t VVZEX0dQQ09NX1ZDUFVfQ01EKSwgMCkpOworCQlQQUNLRVQwKFNPQzE1X1JFR19PRkZTRVQoVVZE LCByaW5nLT5tZSwgbW1VVkRfR1BDT01fVkNQVV9DTUQpLCAwKSk7CiAJYW1kZ3B1X3Jpbmdfd3Jp dGUocmluZywgOCk7CiB9CiAKQEAgLTEyNTgsMTYgKzEyODUsMTYgQEAgc3RhdGljIHZvaWQgdXZk X3Y3XzBfcmluZ19lbWl0X3JlZ193YWl0KHN0cnVjdCBhbWRncHVfcmluZyAqcmluZywgdWludDMy X3QgcmVnLAogCXN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0gcmluZy0+YWRldjsKIAogCWFt ZGdwdV9yaW5nX3dyaXRlKHJpbmcsCi0JCVBBQ0tFVDAoU09DMTVfUkVHX09GRlNFVChVVkQsIDAs IG1tVVZEX0dQQ09NX1ZDUFVfREFUQTApLCAwKSk7CisJCVBBQ0tFVDAoU09DMTVfUkVHX09GRlNF VChVVkQsIHJpbmctPm1lLCBtbVVWRF9HUENPTV9WQ1BVX0RBVEEwKSwgMCkpOwogCWFtZGdwdV9y aW5nX3dyaXRlKHJpbmcsIHJlZyA8PCAyKTsKIAlhbWRncHVfcmluZ193cml0ZShyaW5nLAotCQlQ QUNLRVQwKFNPQzE1X1JFR19PRkZTRVQoVVZELCAwLCBtbVVWRF9HUENPTV9WQ1BVX0RBVEExKSwg MCkpOworCQlQQUNLRVQwKFNPQzE1X1JFR19PRkZTRVQoVVZELCByaW5nLT5tZSwgbW1VVkRfR1BD T01fVkNQVV9EQVRBMSksIDApKTsKIAlhbWRncHVfcmluZ193cml0ZShyaW5nLCB2YWwpOwogCWFt ZGdwdV9yaW5nX3dyaXRlKHJpbmcsCi0JCVBBQ0tFVDAoU09DMTVfUkVHX09GRlNFVChVVkQsIDAs IG1tVVZEX0dQX1NDUkFUQ0g4KSwgMCkpOworCQlQQUNLRVQwKFNPQzE1X1JFR19PRkZTRVQoVVZE LCByaW5nLT5tZSwgbW1VVkRfR1BfU0NSQVRDSDgpLCAwKSk7CiAJYW1kZ3B1X3Jpbmdfd3JpdGUo cmluZywgbWFzayk7CiAJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywKLQkJUEFDS0VUMChTT0MxNV9S RUdfT0ZGU0VUKFVWRCwgMCwgbW1VVkRfR1BDT01fVkNQVV9DTUQpLCAwKSk7CisJCVBBQ0tFVDAo U09DMTVfUkVHX09GRlNFVChVVkQsIHJpbmctPm1lLCBtbVVWRF9HUENPTV9WQ1BVX0NNRCksIDAp KTsKIAlhbWRncHVfcmluZ193cml0ZShyaW5nLCAxMik7CiB9CiAKQEAgLTEyOTIsNyArMTMxOSw3 IEBAIHN0YXRpYyB2b2lkIHV2ZF92N18wX3JpbmdfaW5zZXJ0X25vcChzdHJ1Y3QgYW1kZ3B1X3Jp bmcgKnJpbmcsIHVpbnQzMl90IGNvdW50KQogCXN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0g cmluZy0+YWRldjsKIAogCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotCQlhbWRncHVfcmlu Z193cml0ZShyaW5nLCBQQUNLRVQwKFNPQzE1X1JFR19PRkZTRVQoVVZELCAwLCBtbVVWRF9OT19P UCksIDApKTsKKwkJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgUEFDS0VUMChTT0MxNV9SRUdfT0ZG U0VUKFVWRCwgcmluZy0+bWUsIG1tVVZEX05PX09QKSwgMCkpOwogCiB9CiAKQEAgLTEzNjAsMTYg KzEzODcsMTYgQEAgc3RhdGljIGJvb2wgdXZkX3Y3XzBfY2hlY2tfc29mdF9yZXNldCh2b2lkICpo YW5kbGUpCiAKIAlpZiAoUkVHX0dFVF9GSUVMRCh0bXAsIFNSQk1fU1RBVFVTLCBVVkRfUlFfUEVO RElORykgfHwKIAkgICAgUkVHX0dFVF9GSUVMRCh0bXAsIFNSQk1fU1RBVFVTLCBVVkRfQlVTWSkg fHwKLQkgICAgKFJSRUczMl9TT0MxNShVVkQsIDAsIG1tVVZEX1NUQVRVUykgJgorCSAgICAoUlJF RzMyX1NPQzE1KFVWRCwgcmluZy0+bWUsIG1tVVZEX1NUQVRVUykgJgogCQkgICAgQU1ER1BVX1VW RF9TVEFUVVNfQlVTWV9NQVNLKSkKIAkJc3JibV9zb2Z0X3Jlc2V0ID0gUkVHX1NFVF9GSUVMRChz cmJtX3NvZnRfcmVzZXQsCiAJCQkJU1JCTV9TT0ZUX1JFU0VULCBTT0ZUX1JFU0VUX1VWRCwgMSk7 CiAKIAlpZiAoc3JibV9zb2Z0X3Jlc2V0KSB7Ci0JCWFkZXYtPnV2ZC5pbnN0LT5zcmJtX3NvZnRf cmVzZXQgPSBzcmJtX3NvZnRfcmVzZXQ7CisJCWFkZXYtPnV2ZC5pbnN0W3JpbmctPm1lXS5zcmJt X3NvZnRfcmVzZXQgPSBzcmJtX3NvZnRfcmVzZXQ7CiAJCXJldHVybiB0cnVlOwogCX0gZWxzZSB7 Ci0JCWFkZXYtPnV2ZC5pbnN0LT5zcmJtX3NvZnRfcmVzZXQgPSAwOworCQlhZGV2LT51dmQuaW5z dFtyaW5nLT5tZV0uc3JibV9zb2Z0X3Jlc2V0ID0gMDsKIAkJcmV0dXJuIGZhbHNlOwogCX0KIH0K QEAgLTEzNzgsNyArMTQwNSw3IEBAIHN0YXRpYyBpbnQgdXZkX3Y3XzBfcHJlX3NvZnRfcmVzZXQo dm9pZCAqaGFuZGxlKQogewogCXN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0gKHN0cnVjdCBh bWRncHVfZGV2aWNlICopaGFuZGxlOwogCi0JaWYgKCFhZGV2LT51dmQuaW5zdC0+c3JibV9zb2Z0 X3Jlc2V0KQorCWlmICghYWRldi0+dXZkLmluc3RbcmluZy0+bWVdLnNyYm1fc29mdF9yZXNldCkK IAkJcmV0dXJuIDA7CiAKIAl1dmRfdjdfMF9zdG9wKGFkZXYpOwpAQCAtMTM5MCw5ICsxNDE3LDkg QEAgc3RhdGljIGludCB1dmRfdjdfMF9zb2Z0X3Jlc2V0KHZvaWQgKmhhbmRsZSkKIAlzdHJ1Y3Qg YW1kZ3B1X2RldmljZSAqYWRldiA9IChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqKWhhbmRsZTsKIAl1 MzIgc3JibV9zb2Z0X3Jlc2V0OwogCi0JaWYgKCFhZGV2LT51dmQuaW5zdC0+c3JibV9zb2Z0X3Jl c2V0KQorCWlmICghYWRldi0+dXZkLmluc3RbcmluZy0+bWVdLnNyYm1fc29mdF9yZXNldCkKIAkJ cmV0dXJuIDA7Ci0Jc3JibV9zb2Z0X3Jlc2V0ID0gYWRldi0+dXZkLmluc3QtPnNyYm1fc29mdF9y ZXNldDsKKwlzcmJtX3NvZnRfcmVzZXQgPSBhZGV2LT51dmQuaW5zdFtyaW5nLT5tZV0uc3JibV9z b2Z0X3Jlc2V0OwogCiAJaWYgKHNyYm1fc29mdF9yZXNldCkgewogCQl1MzIgdG1wOwpAQCAtMTQy MCw3ICsxNDQ3LDcgQEAgc3RhdGljIGludCB1dmRfdjdfMF9wb3N0X3NvZnRfcmVzZXQodm9pZCAq aGFuZGxlKQogewogCXN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0gKHN0cnVjdCBhbWRncHVf ZGV2aWNlICopaGFuZGxlOwogCi0JaWYgKCFhZGV2LT51dmQuaW5zdC0+c3JibV9zb2Z0X3Jlc2V0 KQorCWlmICghYWRldi0+dXZkLmluc3RbcmluZy0+bWVdLnNyYm1fc29mdF9yZXNldCkKIAkJcmV0 dXJuIDA7CiAKIAltZGVsYXkoNSk7CkBAIC0xNDQyLDE3ICsxNDY5LDI5IEBAIHN0YXRpYyBpbnQg dXZkX3Y3XzBfcHJvY2Vzc19pbnRlcnJ1cHQoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCiAJ CQkJICAgICAgc3RydWN0IGFtZGdwdV9pcnFfc3JjICpzb3VyY2UsCiAJCQkJICAgICAgc3RydWN0 IGFtZGdwdV9pdl9lbnRyeSAqZW50cnkpCiB7CisJdWludDMyX3QgaXBfaW5zdGFuY2U7CisKKwlz d2l0Y2ggKGVudHJ5LT5jbGllbnRfaWQpIHsKKwljYXNlIFNPQzE1X0lIX0NMSUVOVElEX1VWRDoK KwkJaXBfaW5zdGFuY2UgPSAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlEUk1fRVJST1IoIlVu aGFuZGxlZCBjbGllbnQgaWQ6ICVkXG4iLCBlbnRyeS0+Y2xpZW50X2lkKTsKKwkJcmV0dXJuIDA7 CisJfQorCiAJRFJNX0RFQlVHKCJJSDogVVZEIFRSQVBcbiIpOworCiAJc3dpdGNoIChlbnRyeS0+ c3JjX2lkKSB7CiAJY2FzZSAxMjQ6Ci0JCWFtZGdwdV9mZW5jZV9wcm9jZXNzKCZhZGV2LT51dmQu aW5zdC0+cmluZyk7CisJCWFtZGdwdV9mZW5jZV9wcm9jZXNzKCZhZGV2LT51dmQuaW5zdFtpcF9p bnN0YW5jZV0ucmluZyk7CiAJCWJyZWFrOwogCWNhc2UgMTE5OgotCQlhbWRncHVfZmVuY2VfcHJv Y2VzcygmYWRldi0+dXZkLmluc3QtPnJpbmdfZW5jWzBdKTsKKwkJYW1kZ3B1X2ZlbmNlX3Byb2Nl c3MoJmFkZXYtPnV2ZC5pbnN0W2lwX2luc3RhbmNlXS5yaW5nX2VuY1swXSk7CiAJCWJyZWFrOwog CWNhc2UgMTIwOgogCQlpZiAoIWFtZGdwdV9zcmlvdl92ZihhZGV2KSkKLQkJCWFtZGdwdV9mZW5j ZV9wcm9jZXNzKCZhZGV2LT51dmQuaW5zdC0+cmluZ19lbmNbMV0pOworCQkJYW1kZ3B1X2ZlbmNl X3Byb2Nlc3MoJmFkZXYtPnV2ZC5pbnN0W2lwX2luc3RhbmNlXS5yaW5nX2VuY1sxXSk7CiAJCWJy ZWFrOwogCWRlZmF1bHQ6CiAJCURSTV9FUlJPUigiVW5oYW5kbGVkIGludGVycnVwdDogJWQgJWRc biIsCkBAIC0xNDY4LDkgKzE1MDcsOSBAQCBzdGF0aWMgdm9pZCB1dmRfdjdfMF9zZXRfc3dfY2xv Y2tfZ2F0aW5nKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQogewogCXVpbnQzMl90IGRhdGEs IGRhdGExLCBkYXRhMiwgc3V2ZF9mbGFnczsKIAotCWRhdGEgPSBSUkVHMzJfU09DMTUoVVZELCAw LCBtbVVWRF9DR0NfQ1RSTCk7Ci0JZGF0YTEgPSBSUkVHMzJfU09DMTUoVVZELCAwLCBtbVVWRF9T VVZEX0NHQ19HQVRFKTsKLQlkYXRhMiA9IFJSRUczMl9TT0MxNShVVkQsIDAsIG1tVVZEX1NVVkRf Q0dDX0NUUkwpOworCWRhdGEgPSBSUkVHMzJfU09DMTUoVVZELCByaW5nLT5tZSwgbW1VVkRfQ0dD X0NUUkwpOworCWRhdGExID0gUlJFRzMyX1NPQzE1KFVWRCwgcmluZy0+bWUsIG1tVVZEX1NVVkRf Q0dDX0dBVEUpOworCWRhdGEyID0gUlJFRzMyX1NPQzE1KFVWRCwgcmluZy0+bWUsIG1tVVZEX1NV VkRfQ0dDX0NUUkwpOwogCiAJZGF0YSAmPSB+KFVWRF9DR0NfQ1RSTF9fQ0xLX09GRl9ERUxBWV9N QVNLIHwKIAkJICBVVkRfQ0dDX0NUUkxfX0NMS19HQVRFX0RMWV9USU1FUl9NQVNLKTsKQEAgLTE1 MTQsMTggKzE1NTMsMTggQEAgc3RhdGljIHZvaWQgdXZkX3Y3XzBfc2V0X3N3X2Nsb2NrX2dhdGlu ZyhzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKIAkJCVVWRF9TVVZEX0NHQ19DVFJMX19TREJf TU9ERV9NQVNLKTsKIAlkYXRhMSB8PSBzdXZkX2ZsYWdzOwogCi0JV1JFRzMyX1NPQzE1KFVWRCwg MCwgbW1VVkRfQ0dDX0NUUkwsIGRhdGEpOwotCVdSRUczMl9TT0MxNShVVkQsIDAsIG1tVVZEX0NH Q19HQVRFLCAwKTsKLQlXUkVHMzJfU09DMTUoVVZELCAwLCBtbVVWRF9TVVZEX0NHQ19HQVRFLCBk YXRhMSk7Ci0JV1JFRzMyX1NPQzE1KFVWRCwgMCwgbW1VVkRfU1VWRF9DR0NfQ1RSTCwgZGF0YTIp OworCVdSRUczMl9TT0MxNShVVkQsIHJpbmctPm1lLCBtbVVWRF9DR0NfQ1RSTCwgZGF0YSk7CisJ V1JFRzMyX1NPQzE1KFVWRCwgcmluZy0+bWUsIG1tVVZEX0NHQ19HQVRFLCAwKTsKKwlXUkVHMzJf U09DMTUoVVZELCByaW5nLT5tZSwgbW1VVkRfU1VWRF9DR0NfR0FURSwgZGF0YTEpOworCVdSRUcz Ml9TT0MxNShVVkQsIHJpbmctPm1lLCBtbVVWRF9TVVZEX0NHQ19DVFJMLCBkYXRhMik7CiB9CiAK IHN0YXRpYyB2b2lkIHV2ZF92N18wX3NldF9od19jbG9ja19nYXRpbmcoc3RydWN0IGFtZGdwdV9k ZXZpY2UgKmFkZXYpCiB7CiAJdWludDMyX3QgZGF0YSwgZGF0YTEsIGNnY19mbGFncywgc3V2ZF9m bGFnczsKIAotCWRhdGEgPSBSUkVHMzJfU09DMTUoVVZELCAwLCBtbVVWRF9DR0NfR0FURSk7Ci0J ZGF0YTEgPSBSUkVHMzJfU09DMTUoVVZELCAwLCBtbVVWRF9TVVZEX0NHQ19HQVRFKTsKKwlkYXRh ID0gUlJFRzMyX1NPQzE1KFVWRCwgcmluZy0+bWUsIG1tVVZEX0NHQ19HQVRFKTsKKwlkYXRhMSA9 IFJSRUczMl9TT0MxNShVVkQsIHJpbmctPm1lLCBtbVVWRF9TVVZEX0NHQ19HQVRFKTsKIAogCWNn Y19mbGFncyA9IFVWRF9DR0NfR0FURV9fU1lTX01BU0sgfAogCQlVVkRfQ0dDX0dBVEVfX1VERUNf TUFTSyB8CkBAIC0xNTU3LDggKzE1OTYsOCBAQCBzdGF0aWMgdm9pZCB1dmRfdjdfMF9zZXRfaHdf Y2xvY2tfZ2F0aW5nKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQogCWRhdGEgfD0gY2djX2Zs YWdzOwogCWRhdGExIHw9IHN1dmRfZmxhZ3M7CiAKLQlXUkVHMzJfU09DMTUoVVZELCAwLCBtbVVW RF9DR0NfR0FURSwgZGF0YSk7Ci0JV1JFRzMyX1NPQzE1KFVWRCwgMCwgbW1VVkRfU1VWRF9DR0Nf R0FURSwgZGF0YTEpOworCVdSRUczMl9TT0MxNShVVkQsIHJpbmctPm1lLCBtbVVWRF9DR0NfR0FU RSwgZGF0YSk7CisJV1JFRzMyX1NPQzE1KFVWRCwgcmluZy0+bWUsIG1tVVZEX1NVVkRfQ0dDX0dB VEUsIGRhdGExKTsKIH0KIAogc3RhdGljIHZvaWQgdXZkX3Y3XzBfc2V0X2J5cGFzc19tb2RlKHN0 cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LCBib29sIGVuYWJsZSkKQEAgLTE2MTcsNyArMTY1Niw3 IEBAIHN0YXRpYyBpbnQgdXZkX3Y3XzBfc2V0X3Bvd2VyZ2F0aW5nX3N0YXRlKHZvaWQgKmhhbmRs ZSwKIAlpZiAoIShhZGV2LT5wZ19mbGFncyAmIEFNRF9QR19TVVBQT1JUX1VWRCkpCiAJCXJldHVy biAwOwogCi0JV1JFRzMyX1NPQzE1KFVWRCwgMCwgbW1VVkRfUE9XRVJfU1RBVFVTLCBVVkRfUE9X RVJfU1RBVFVTX19VVkRfUEdfRU5fTUFTSyk7CisJV1JFRzMyX1NPQzE1KFVWRCwgcmluZy0+bWUs IG1tVVZEX1BPV0VSX1NUQVRVUywgVVZEX1BPV0VSX1NUQVRVU19fVVZEX1BHX0VOX01BU0spOwog CiAJaWYgKHN0YXRlID09IEFNRF9QR19TVEFURV9HQVRFKSB7CiAJCXV2ZF92N18wX3N0b3AoYWRl dik7CkBAIC0xNzIwLDE4ICsxNzU5LDI3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYW1kZ3B1X3Jp bmdfZnVuY3MgdXZkX3Y3XzBfZW5jX3Jpbmdfdm1fZnVuY3MgPSB7CiAKIHN0YXRpYyB2b2lkIHV2 ZF92N18wX3NldF9yaW5nX2Z1bmNzKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQogewotCWFk ZXYtPnV2ZC5pbnN0LT5yaW5nLmZ1bmNzID0gJnV2ZF92N18wX3Jpbmdfdm1fZnVuY3M7Ci0JRFJN X0lORk8oIlVWRCBpcyBlbmFibGVkIGluIFZNIG1vZGVcbiIpOworCWludCBpOworCisJZm9yIChp ID0gMDsgaSA8IGFkZXYtPnV2ZC5udW1fdXZkX2luc3Q7IGkrKykgeworCQlhZGV2LT51dmQuaW5z dFtpXS5yaW5nLmZ1bmNzID0gJnV2ZF92N18wX3Jpbmdfdm1fZnVuY3M7CisJCWFkZXYtPnV2ZC5p bnN0W2ldLnJpbmcubWUgPSBpOworCQlEUk1fSU5GTygiVVZEKCVkKSBpcyBlbmFibGVkIGluIFZN IG1vZGVcbiIsIGkpOworCX0KIH0KIAogc3RhdGljIHZvaWQgdXZkX3Y3XzBfc2V0X2VuY19yaW5n X2Z1bmNzKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQogewotCWludCBpOworCWludCBpLCBq OwogCi0JZm9yIChpID0gMDsgaSA8IGFkZXYtPnV2ZC5udW1fZW5jX3JpbmdzOyArK2kpCi0JCWFk ZXYtPnV2ZC5pbnN0LT5yaW5nX2VuY1tpXS5mdW5jcyA9ICZ1dmRfdjdfMF9lbmNfcmluZ192bV9m dW5jczsKKwlmb3IgKGogPSAwOyBqIDwgYWRldi0+dXZkLm51bV91dmRfaW5zdDsgaisrKSB7CisJ CWZvciAoaSA9IDA7IGkgPCBhZGV2LT51dmQubnVtX2VuY19yaW5nczsgKytpKSB7CisJCQlhZGV2 LT51dmQuaW5zdFtqXS5yaW5nX2VuY1tpXS5mdW5jcyA9ICZ1dmRfdjdfMF9lbmNfcmluZ192bV9m dW5jczsKKwkJCWFkZXYtPnV2ZC5pbnN0W2pdLnJpbmdfZW5jW2ldLm1lID0gajsKKwkJfQogCi0J RFJNX0lORk8oIlVWRCBFTkMgaXMgZW5hYmxlZCBpbiBWTSBtb2RlXG4iKTsKKwkJRFJNX0lORk8o IlVWRCglZCkgRU5DIGlzIGVuYWJsZWQgaW4gVk0gbW9kZVxuIiwgaik7CisJfQogfQogCiBzdGF0 aWMgY29uc3Qgc3RydWN0IGFtZGdwdV9pcnFfc3JjX2Z1bmNzIHV2ZF92N18wX2lycV9mdW5jcyA9 IHsKQEAgLTE3NDEsOCArMTc4OSwxMiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGFtZGdwdV9pcnFf c3JjX2Z1bmNzIHV2ZF92N18wX2lycV9mdW5jcyA9IHsKIAogc3RhdGljIHZvaWQgdXZkX3Y3XzBf c2V0X2lycV9mdW5jcyhzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKIHsKLQlhZGV2LT51dmQu aW5zdC0+aXJxLm51bV90eXBlcyA9IGFkZXYtPnV2ZC5udW1fZW5jX3JpbmdzICsgMTsKLQlhZGV2 LT51dmQuaW5zdC0+aXJxLmZ1bmNzID0gJnV2ZF92N18wX2lycV9mdW5jczsKKwlpbnQgaTsKKwor CWZvciAoaSA9IDA7IGkgPCBhZGV2LT51dmQubnVtX3V2ZF9pbnN0OyBpKyspIHsKKwkJYWRldi0+ dXZkLmluc3RbaV0uaXJxLm51bV90eXBlcyA9IGFkZXYtPnV2ZC5udW1fZW5jX3JpbmdzICsgMTsK KwkJYWRldi0+dXZkLmluc3RbaV0uaXJxLmZ1bmNzID0gJnV2ZF92N18wX2lycV9mdW5jczsKKwl9 CiB9CiAKIGNvbnN0IHN0cnVjdCBhbWRncHVfaXBfYmxvY2tfdmVyc2lvbiB1dmRfdjdfMF9pcF9i bG9jayA9Ci0tIAoyLjEzLjYKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fCmFtZC1nZnggbWFpbGluZyBsaXN0CmFtZC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Au b3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vYW1kLWdm eAo=