From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mblankhorst.nl (mblankhorst.nl [141.105.120.124]) by gabe.freedesktop.org (Postfix) with ESMTPS id 0964F6E609 for ; Tue, 27 Feb 2018 08:52:35 +0000 (UTC) From: Maarten Lankhorst Date: Tue, 27 Feb 2018 09:52:31 +0100 Message-Id: <20180227085232.54025-4-maarten.lankhorst@linux.intel.com> In-Reply-To: <20180227085232.54025-1-maarten.lankhorst@linux.intel.com> References: <20180227085232.54025-1-maarten.lankhorst@linux.intel.com> Subject: [igt-dev] [PATCH i-g-t v3 3/4] tests/kms_frontbuffer_tracking: Convert test to use igt_display, v3. List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: igt-dev@lists.freedesktop.org List-ID: U3RyYWlnaHQgY29udmVyc2lvbiwgbm8gYmVoYXZpb3JhbCBjaGFuZ2VzIHlldC4KCkNoYW5nZXMg c2luY2UgdjE6Ci0gSGFuZGxlIDJ4IG91dHB1dHMgY29ycmVjdGx5LgpDaGFuZ2VzIHNpbmNlIHYy OgotIFNldCBjb3JyZWN0IHBhcmFtZXRlcnMgaW4gc2V0X21vZGVfZm9yX3BhcmFtcywgc28gYXRv bWljIGNvbW1pdCBmb3IKICAyeCBvdXRwdXRzIGRvZXNuJ3Qgc2NhbGUuCi0gRml4IGFjY2lkZW50 YWwgc2NhbGluZyBpbiBzZXRfcHJpbV9wbGFuZV9mb3JfcGFyYW1zLgoKU2lnbmVkLW9mZi1ieTog TWFhcnRlbiBMYW5raG9yc3QgPG1hYXJ0ZW4ubGFua2hvcnN0QGxpbnV4LmludGVsLmNvbT4KLS0t CiB0ZXN0cy9rbXNfZnJvbnRidWZmZXJfdHJhY2tpbmcuYyB8IDc4OSArKysrKysrKysrKysrKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAyNzcgaW5zZXJ0aW9ucygr KSwgNTEyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3Rlc3RzL2ttc19mcm9udGJ1ZmZlcl90 cmFja2luZy5jIGIvdGVzdHMva21zX2Zyb250YnVmZmVyX3RyYWNraW5nLmMKaW5kZXggMTQ4M2My MjgwNDRlLi4xOWE2OWNjYTViMzcgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2ttc19mcm9udGJ1ZmZlcl90 cmFja2luZy5jCisrKyBiL3Rlc3RzL2ttc19mcm9udGJ1ZmZlcl90cmFja2luZy5jCkBAIC0xNTEs MTggKzE1MSwxMSBAQCBzdHJ1Y3QgcmVjdCB7CiAJdWludDMyX3QgY29sb3I7CiB9OwogCi0jZGVm aW5lIE1BWF9DT05ORUNUT1JTIDMyCi0jZGVmaW5lIE1BWF9QTEFORVMgMzIKLSNkZWZpbmUgTUFY X0VOQ09ERVJTIDMyCiBzdHJ1Y3QgewogCWludCBmZDsKIAlpbnQgZGVidWdmczsKLQlkcm1Nb2Rl UmVzUHRyIHJlczsKLQlkcm1Nb2RlQ29ubmVjdG9yUHRyIGNvbm5lY3RvcnNbTUFYX0NPTk5FQ1RP UlNdOwotCWRybU1vZGVFbmNvZGVyUHRyIGVuY29kZXJzW01BWF9FTkNPREVSU107Ci0JZHJtTW9k ZVBsYW5lUmVzUHRyIHBsYW5lX3JlczsKLQlkcm1Nb2RlUGxhbmVQdHIgcGxhbmVzW01BWF9QTEFO RVNdOwotCXVpbnQ2NF90IHBsYW5lX3R5cGVzW01BWF9QTEFORVNdOworCWlndF9kaXNwbGF5X3Qg ZGlzcGxheTsKKwogCWRybV9pbnRlbF9idWZtZ3IgKmJ1Zm1ncjsKIH0gZHJtOwogCkBAIC0yMjIs NiArMjE1LDcgQEAgc3RydWN0IHsKICAqIGhhdmUgYSBiaWcgZnJhbWVidWZmZXIgYW5kIHRoZSBD UlRDIGlzIGp1c3QgZGlzcGxheWluZyBhIHN1YnJlZ2lvbiBvZiB0aGlzCiAgKiBiaWcgRkIuICov CiBzdHJ1Y3QgZmJfcmVnaW9uIHsKKwlpZ3RfcGxhbmVfdCAqcGxhbmU7CiAJc3RydWN0IGlndF9m YiAqZmI7CiAJaW50IHg7CiAJaW50IHk7CkBAIC0yNzcsMTcgKzI3MSwxOCBAQCBzdHJ1Y3Qgewog fTsKIAogc3RydWN0IG1vZGVzZXRfcGFyYW1zIHsKLQl1aW50MzJfdCBjcnRjX2lkOwotCXVpbnQz Ml90IGNvbm5lY3Rvcl9pZDsKLQl1aW50MzJfdCBzcHJpdGVfaWQ7Ci0JZHJtTW9kZU1vZGVJbmZv UHRyIG1vZGU7Ci0Jc3RydWN0IGZiX3JlZ2lvbiBmYjsKKwllbnVtIHBpcGUgcGlwZTsKKwlpZ3Rf b3V0cHV0X3QgKm91dHB1dDsKKwlkcm1Nb2RlTW9kZUluZm8gbW9kZV9jb3B5LCAqbW9kZTsKKwor CXN0cnVjdCBmYl9yZWdpb24gcHJpbWFyeTsKIAlzdHJ1Y3QgZmJfcmVnaW9uIGN1cnNvcjsKIAlz dHJ1Y3QgZmJfcmVnaW9uIHNwcml0ZTsKIH07CiAKIHN0cnVjdCBtb2Rlc2V0X3BhcmFtcyBwcmlt X21vZGVfcGFyYW1zOwogc3RydWN0IG1vZGVzZXRfcGFyYW1zIHNjbmRfbW9kZV9wYXJhbXM7CisK IHN0cnVjdCBmYl9yZWdpb24gb2Zmc2NyZWVuX2ZiOwogc3RydWN0IHNjcmVlbl9mYnMgewogCWJv b2wgaW5pdGlhbGl6ZWQ7CkBAIC0zMzcsMTMgKzMzMiwxNCBAQCBkcm1Nb2RlTW9kZUluZm8gc3Rk XzEwMjRfbW9kZSA9IHsKIAkubmFtZSA9ICJDdXN0b20gMTAyNHg3NjgiLAogfTsKIAotc3RhdGlj IGRybU1vZGVNb2RlSW5mb1B0ciBnZXRfY29ubmVjdG9yX3NtYWxsZXN0X21vZGUoZHJtTW9kZUNv bm5lY3RvclB0ciBjKQorc3RhdGljIGRybU1vZGVNb2RlSW5mbyAqZ2V0X2Nvbm5lY3Rvcl9zbWFs bGVzdF9tb2RlKGlndF9vdXRwdXRfdCAqb3V0cHV0KQogeworCWRybU1vZGVDb25uZWN0b3IgKmMg PSBvdXRwdXQtPmNvbmZpZy5jb25uZWN0b3I7CisJZHJtTW9kZU1vZGVJbmZvICpzbWFsbGVzdCA9 IE5VTEw7CiAJaW50IGk7Ci0JZHJtTW9kZU1vZGVJbmZvUHRyIHNtYWxsZXN0ID0gTlVMTDsKIAog CWZvciAoaSA9IDA7IGkgPCBjLT5jb3VudF9tb2RlczsgaSsrKSB7Ci0JCWRybU1vZGVNb2RlSW5m b1B0ciBtb2RlID0gJmMtPm1vZGVzW2ldOworCQlkcm1Nb2RlTW9kZUluZm8gKm1vZGUgPSAmYy0+ bW9kZXNbaV07CiAKIAkJaWYgKCFzbWFsbGVzdCkKIAkJCXNtYWxsZXN0ID0gbW9kZTsKQEAgLTM1 OSw3MSArMzU1LDUzIEBAIHN0YXRpYyBkcm1Nb2RlTW9kZUluZm9QdHIgZ2V0X2Nvbm5lY3Rvcl9z bWFsbGVzdF9tb2RlKGRybU1vZGVDb25uZWN0b3JQdHIgYykKIAlyZXR1cm4gc21hbGxlc3Q7CiB9 CiAKLXN0YXRpYyBkcm1Nb2RlQ29ubmVjdG9yUHRyIGdldF9jb25uZWN0b3IodWludDMyX3QgaWQp CitzdGF0aWMgZHJtTW9kZU1vZGVJbmZvICpjb25uZWN0b3JfZ2V0X21vZGUoaWd0X291dHB1dF90 ICpvdXRwdXQpCiB7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgZHJtLnJlcy0+Y291bnRf Y29ubmVjdG9yczsgaSsrKQotCQlpZiAoZHJtLnJlcy0+Y29ubmVjdG9yc1tpXSA9PSBpZCkKLQkJ CXJldHVybiBkcm0uY29ubmVjdG9yc1tpXTsKKwlkcm1Nb2RlTW9kZUluZm8gKm1vZGUgPSBOVUxM OwogCi0JaWd0X2Fzc2VydChmYWxzZSk7Ci19Ci0KLXN0YXRpYyBkcm1Nb2RlRW5jb2RlclB0ciBn ZXRfZW5jb2Rlcih1aW50MzJfdCBpZCkKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBk cm0ucmVzLT5jb3VudF9lbmNvZGVyczsgaSsrKQotCQlpZiAoZHJtLnJlcy0+ZW5jb2RlcnNbaV0g PT0gaWQpCi0JCQlyZXR1cm4gZHJtLmVuY29kZXJzW2ldOwotCi0JaWd0X2Fzc2VydChmYWxzZSk7 Ci19CisJaWYgKG9wdC5zbWFsbF9tb2RlcykKKwkJbW9kZSA9IGdldF9jb25uZWN0b3Jfc21hbGxl c3RfbW9kZShvdXRwdXQpOworCWVsc2UKKwkJbW9kZSA9ICZvdXRwdXQtPmNvbmZpZy5kZWZhdWx0 X21vZGU7CiAKLXN0YXRpYyB2b2lkIHByaW50X21vZGVfaW5mbyhjb25zdCBjaGFyICpzY3JlZW4s IHN0cnVjdCBtb2Rlc2V0X3BhcmFtcyAqcGFyYW1zKQotewotCWRybU1vZGVDb25uZWN0b3JQdHIg YyA9IGdldF9jb25uZWN0b3IocGFyYW1zLT5jb25uZWN0b3JfaWQpOworCSAvKiBPbiBIU1cgdGhl IENSQyBXQSBpcyBzbyBhd2Z1bCB0aGF0IGl0IG1ha2VzIHlvdSB0aGluayBldmVyeXRoaW5nIGlz CisJICAqIGJ1Z2dlZC4gKi8KKwlpZiAoSVNfSEFTV0VMTChpbnRlbF9nZXRfZHJtX2RldmlkKGRy bS5mZCkpICYmCisJICAgIG91dHB1dC0+Y29uZmlnLmNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5cGUg PT0gRFJNX01PREVfQ09OTkVDVE9SX2VEUCkKKwkJbW9kZSA9ICZzdGRfMTAyNF9tb2RlOwogCi0J aWd0X2luZm8oIiVzIHNjcmVlbjogJXMgJXMsIGNydGMgJWRcbiIsCi0JCSBzY3JlZW4sCi0JCSBr bXN0ZXN0X2Nvbm5lY3Rvcl90eXBlX3N0cihjLT5jb25uZWN0b3JfdHlwZSksCi0JCSBwYXJhbXMt Pm1vZGUtPm5hbWUsCi0JCSBrbXN0ZXN0X2dldF9jcnRjX2lkeChkcm0ucmVzLCBwYXJhbXMtPmNy dGNfaWQpKTsKKwlyZXR1cm4gbW9kZTsKIH0KIAotc3RhdGljIHZvaWQgaW5pdF9tb2RlX3BhcmFt cyhzdHJ1Y3QgbW9kZXNldF9wYXJhbXMgKnBhcmFtcywgdWludDMyX3QgY3J0Y19pZCwKLQkJCSAg ICAgZHJtTW9kZUNvbm5lY3RvclB0ciBjb25uZWN0b3IsCi0JCQkgICAgIGRybU1vZGVNb2RlSW5m b1B0ciBtb2RlKQorc3RhdGljIHZvaWQgaW5pdF9tb2RlX3BhcmFtcyhzdHJ1Y3QgbW9kZXNldF9w YXJhbXMgKnBhcmFtcywKKwkJCSAgICAgaWd0X291dHB1dF90ICpvdXRwdXQsIGVudW0gcGlwZSBw aXBlKQogewotCXVpbnQzMl90IG92ZXJsYXlfcGxhbmVfaWQgPSAwOwotCWludCBjcnRjX2lkeCA9 IGttc3Rlc3RfZ2V0X2NydGNfaWR4KGRybS5yZXMsIGNydGNfaWQpOwotCWludCBpOworCWRybU1v ZGVNb2RlSW5mbyAqbW9kZTsKIAotCWZvciAoaSA9IDA7IGkgPCBkcm0ucGxhbmVfcmVzLT5jb3Vu dF9wbGFuZXM7IGkrKykKLQkJaWYgKChkcm0ucGxhbmVzW2ldLT5wb3NzaWJsZV9jcnRjcyAmICgx IDw8IGNydGNfaWR4KSkgJiYKLQkJICAgIGRybS5wbGFuZV90eXBlc1tpXSA9PSBEUk1fUExBTkVf VFlQRV9PVkVSTEFZKSB7Ci0JCQlvdmVybGF5X3BsYW5lX2lkID0gZHJtLnBsYW5lc1tpXS0+cGxh bmVfaWQ7Ci0JCQlicmVhazsKLQkJfQorCWlndF9vdXRwdXRfb3ZlcnJpZGVfbW9kZShvdXRwdXQs IE5VTEwpOworCW1vZGUgPSBjb25uZWN0b3JfZ2V0X21vZGUob3V0cHV0KTsKIAotCWlndF9yZXF1 aXJlKG92ZXJsYXlfcGxhbmVfaWQpOworCXBhcmFtcy0+cGlwZSA9IHBpcGU7CisJcGFyYW1zLT5v dXRwdXQgPSBvdXRwdXQ7CisJcGFyYW1zLT5tb2RlX2NvcHkgPSAqbW9kZTsKKwlwYXJhbXMtPm1v ZGUgPSAmcGFyYW1zLT5tb2RlX2NvcHk7CiAKLQlwYXJhbXMtPmNydGNfaWQgPSBjcnRjX2lkOwot CXBhcmFtcy0+Y29ubmVjdG9yX2lkID0gY29ubmVjdG9yLT5jb25uZWN0b3JfaWQ7Ci0JcGFyYW1z LT5tb2RlID0gbW9kZTsKLQlwYXJhbXMtPnNwcml0ZV9pZCA9IG92ZXJsYXlfcGxhbmVfaWQ7Ci0K LQlwYXJhbXMtPmZiLmZiID0gTlVMTDsKLQlwYXJhbXMtPmZiLncgPSBtb2RlLT5oZGlzcGxheTsK LQlwYXJhbXMtPmZiLmggPSBtb2RlLT52ZGlzcGxheTsKKwlwYXJhbXMtPnByaW1hcnkucGxhbmUg PSBpZ3RfcGlwZV9nZXRfcGxhbmVfdHlwZSgmZHJtLmRpc3BsYXkucGlwZXNbcGlwZV0sIERSTV9Q TEFORV9UWVBFX1BSSU1BUlkpOworCXBhcmFtcy0+cHJpbWFyeS5mYiA9IE5VTEw7CisJcGFyYW1z LT5wcmltYXJ5LnggPSAwOworCXBhcmFtcy0+cHJpbWFyeS55ID0gMDsKKwlwYXJhbXMtPnByaW1h cnkudyA9IG1vZGUtPmhkaXNwbGF5OworCXBhcmFtcy0+cHJpbWFyeS5oID0gbW9kZS0+dmRpc3Bs YXk7CiAKKwlwYXJhbXMtPmN1cnNvci5wbGFuZSA9IGlndF9waXBlX2dldF9wbGFuZV90eXBlKCZk cm0uZGlzcGxheS5waXBlc1twaXBlXSwgRFJNX1BMQU5FX1RZUEVfQ1VSU09SKTsKIAlwYXJhbXMt PmN1cnNvci5mYiA9IE5VTEw7CiAJcGFyYW1zLT5jdXJzb3IueCA9IDA7CiAJcGFyYW1zLT5jdXJz b3IueSA9IDA7CiAJcGFyYW1zLT5jdXJzb3IudyA9IDY0OwogCXBhcmFtcy0+Y3Vyc29yLmggPSA2 NDsKIAorCXBhcmFtcy0+c3ByaXRlLnBsYW5lID0gaWd0X3BpcGVfZ2V0X3BsYW5lX3R5cGUoJmRy bS5kaXNwbGF5LnBpcGVzW3BpcGVdLCBEUk1fUExBTkVfVFlQRV9PVkVSTEFZKTsKKwlpZ3RfcmVx dWlyZShwYXJhbXMtPnNwcml0ZS5wbGFuZSk7CiAJcGFyYW1zLT5zcHJpdGUuZmIgPSBOVUxMOwog CXBhcmFtcy0+c3ByaXRlLnggPSAwOwogCXBhcmFtcy0+c3ByaXRlLnkgPSAwOwpAQCAtNDMxLDYz ICs0MDksMzIgQEAgc3RhdGljIHZvaWQgaW5pdF9tb2RlX3BhcmFtcyhzdHJ1Y3QgbW9kZXNldF9w YXJhbXMgKnBhcmFtcywgdWludDMyX3QgY3J0Y19pZCwKIAlwYXJhbXMtPnNwcml0ZS5oID0gNjQ7 CiB9CiAKLXN0YXRpYyBib29sIGNvbm5lY3Rvcl9nZXRfbW9kZShkcm1Nb2RlQ29ubmVjdG9yUHRy IGMsIGRybU1vZGVNb2RlSW5mb1B0ciAqbW9kZSkKK3N0YXRpYyBib29sIGZpbmRfY29ubmVjdG9y KGJvb2wgZWRwX29ubHksIGJvb2wgcGlwZV9hLAorCQkJICAgaWd0X291dHB1dF90ICpmb3JiaWRk ZW5fb3V0cHV0LAorCQkJICAgZW51bSBwaXBlIGZvcmJpZGRlbl9waXBlLAorCQkJICAgaWd0X291 dHB1dF90ICoqcmV0X291dHB1dCwKKwkJCSAgIGVudW0gcGlwZSAqcmV0X3BpcGUpCiB7Ci0JKm1v ZGUgPSBOVUxMOworCWlndF9vdXRwdXRfdCAqb3V0cHV0OworCWVudW0gcGlwZSBwaXBlOwogCi0J aWYgKGMtPmNvbm5lY3Rpb24gIT0gRFJNX01PREVfQ09OTkVDVEVEIHx8ICFjLT5jb3VudF9tb2Rl cykKLQkJcmV0dXJuIGZhbHNlOwotCi0JaWYgKGMtPmNvbm5lY3Rvcl90eXBlID09IERSTV9NT0RF X0NPTk5FQ1RPUl9lRFAgJiYgb3B0Lm5vX2VkcCkKLQkJcmV0dXJuIGZhbHNlOwotCi0JaWYgKG9w dC5zbWFsbF9tb2RlcykKLQkJKm1vZGUgPSBnZXRfY29ubmVjdG9yX3NtYWxsZXN0X21vZGUoYyk7 Ci0JZWxzZQotCQkqbW9kZSA9ICZjLT5tb2Rlc1swXTsKLQotCSAvKiBPbiBIU1cgdGhlIENSQyBX QSBpcyBzbyBhd2Z1bCB0aGF0IGl0IG1ha2VzIHlvdSB0aGluayBldmVyeXRoaW5nIGlzCi0JICAq IGJ1Z2dlZC4gKi8KLQlpZiAoSVNfSEFTV0VMTChpbnRlbF9nZXRfZHJtX2RldmlkKGRybS5mZCkp ICYmCi0JICAgIGMtPmNvbm5lY3Rvcl90eXBlID09IERSTV9NT0RFX0NPTk5FQ1RPUl9lRFApCi0J CSptb2RlID0gJnN0ZF8xMDI0X21vZGU7Ci0KLQlyZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGJv b2wgY29ubmVjdG9yX3N1cHBvcnRzX3BpcGVfYShkcm1Nb2RlQ29ubmVjdG9yUHRyIGNvbm5lY3Rv cikKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBjb25uZWN0b3ItPmNvdW50X2VuY29k ZXJzOyBpKyspCi0JCWlmIChnZXRfZW5jb2Rlcihjb25uZWN0b3ItPmVuY29kZXJzW2ldKS0+cG9z c2libGVfY3J0Y3MgJiAxKQotCQkJcmV0dXJuIHRydWU7Ci0KLQlyZXR1cm4gZmFsc2U7Ci19Ci0K LXN0YXRpYyBib29sIGZpbmRfY29ubmVjdG9yKGJvb2wgZWRwX29ubHksIGJvb2wgcGlwZV9hLCB1 aW50MzJfdCBmb3JiaWRkZW5faWQsCi0JCQkgICBkcm1Nb2RlQ29ubmVjdG9yUHRyICpyZXRfY29u bmVjdG9yLAotCQkJICAgZHJtTW9kZU1vZGVJbmZvUHRyICpyZXRfbW9kZSkKLXsKLQlkcm1Nb2Rl Q29ubmVjdG9yUHRyIGMgPSBOVUxMOwotCWRybU1vZGVNb2RlSW5mb1B0ciBtb2RlID0gTlVMTDsK LQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBkcm0ucmVzLT5jb3VudF9jb25uZWN0b3JzOyBp KyspIHsKLQkJYyA9IGRybS5jb25uZWN0b3JzW2ldOworCWZvcl9lYWNoX3BpcGVfd2l0aF92YWxp ZF9vdXRwdXQoJmRybS5kaXNwbGF5LCBwaXBlLCBvdXRwdXQpIHsKKwkJZHJtTW9kZUNvbm5lY3Rv clB0ciBjID0gb3V0cHV0LT5jb25maWcuY29ubmVjdG9yOwogCiAJCWlmIChlZHBfb25seSAmJiBj LT5jb25uZWN0b3JfdHlwZSAhPSBEUk1fTU9ERV9DT05ORUNUT1JfZURQKQogCQkJY29udGludWU7 Ci0JCWlmIChwaXBlX2EgJiYgIWNvbm5lY3Rvcl9zdXBwb3J0c19waXBlX2EoYykpCisKKwkJaWYg KHBpcGVfYSAmJiBwaXBlICE9IFBJUEVfQSkKIAkJCWNvbnRpbnVlOwotCQlpZiAoYy0+Y29ubmVj dG9yX2lkID09IGZvcmJpZGRlbl9pZCkKKworCQlpZiAob3V0cHV0ID09IGZvcmJpZGRlbl9vdXRw dXQgfHwgcGlwZSA9PSBmb3JiaWRkZW5fcGlwZSkKIAkJCWNvbnRpbnVlOwotCQlpZiAoIWNvbm5l Y3Rvcl9nZXRfbW9kZShjLCAmbW9kZSkpCisKKwkJaWYgKGMtPmNvbm5lY3Rvcl90eXBlID09IERS TV9NT0RFX0NPTk5FQ1RPUl9lRFAgJiYgb3B0Lm5vX2VkcCkKIAkJCWNvbnRpbnVlOwogCi0JCSpy ZXRfY29ubmVjdG9yID0gYzsKLQkJKnJldF9tb2RlID0gbW9kZTsKKwkJKnJldF9vdXRwdXQgPSBv dXRwdXQ7CisJCSpyZXRfcGlwZSA9IHBpcGU7CiAJCXJldHVybiB0cnVlOwogCX0KIApAQCAtNDk2 LDkgKzQ0Myw4IEBAIHN0YXRpYyBib29sIGZpbmRfY29ubmVjdG9yKGJvb2wgZWRwX29ubHksIGJv b2wgcGlwZV9hLCB1aW50MzJfdCBmb3JiaWRkZW5faWQsCiAKIHN0YXRpYyBib29sIGluaXRfbW9k ZXNldF9jYWNoZWRfcGFyYW1zKHZvaWQpCiB7Ci0JZHJtTW9kZUNvbm5lY3RvclB0ciBwcmltX2Nv bm5lY3RvciA9IE5VTEwsIHNjbmRfY29ubmVjdG9yID0gTlVMTDsKLQlkcm1Nb2RlTW9kZUluZm9Q dHIgcHJpbV9tb2RlID0gTlVMTCwgc2NuZF9tb2RlID0gTlVMTDsKLQl1aW50MzJfdCBwcmltX2Ny dGNfaWQsIHNjbmRfY3J0Y19pZDsKKwlpZ3Rfb3V0cHV0X3QgKnByaW1fb3V0cHV0ID0gTlVMTCwg KnNjbmRfb3V0cHV0ID0gTlVMTDsKKwllbnVtIHBpcGUgcHJpbV9waXBlLCBzY25kX3BpcGU7CiAK IAkvKgogCSAqIFdlIGhhdmUgdGhpcyBwcm9ibGVtIHdoZXJlIFBTUiBpcyBvbmx5IHByZXNlbnQg b24gZURQIG1vbml0b3JzIGFuZApAQCAtNTA4LDM5ICs0NTQsMjkgQEAgc3RhdGljIGJvb2wgaW5p dF9tb2Rlc2V0X2NhY2hlZF9wYXJhbXModm9pZCkKIAkgKiBUT0RPOiByZWZhY3RvciB0aGUgY29k ZSBpbiBhIHdheSB0aGF0IGFsbG93cyB1cyB0byBoYXZlIGRpZmZlcmVudAogCSAqIHNldHMgb2Yg cHJpbS9zY25kIHN0cnVjdHMgZm9yIGRpZmZlcmVudCBmZWF0dXJlcy4KIAkgKi8KLQlmaW5kX2Nv bm5lY3Rvcih0cnVlLCB0cnVlLCAwLCAmcHJpbV9jb25uZWN0b3IsICZwcmltX21vZGUpOwotCWlm ICghcHJpbV9jb25uZWN0b3IpCi0JCWZpbmRfY29ubmVjdG9yKHRydWUsIGZhbHNlLCAwLCAmcHJp bV9jb25uZWN0b3IsICZwcmltX21vZGUpOwotCWlmICghcHJpbV9jb25uZWN0b3IpCi0JCWZpbmRf Y29ubmVjdG9yKGZhbHNlLCB0cnVlLCAwLCAmcHJpbV9jb25uZWN0b3IsICZwcmltX21vZGUpOwot CWlmICghcHJpbV9jb25uZWN0b3IpCi0JCWZpbmRfY29ubmVjdG9yKGZhbHNlLCBmYWxzZSwgMCwg JnByaW1fY29ubmVjdG9yLCAmcHJpbV9tb2RlKTsKLQotCWlmICghcHJpbV9jb25uZWN0b3IpCisJ ZmluZF9jb25uZWN0b3IodHJ1ZSwgdHJ1ZSwgTlVMTCwgUElQRV9OT05FLCAmcHJpbV9vdXRwdXQs ICZwcmltX3BpcGUpOworCWlmICghcHJpbV9vdXRwdXQpCisJCWZpbmRfY29ubmVjdG9yKHRydWUs IGZhbHNlLCBOVUxMLCBQSVBFX05PTkUsICZwcmltX291dHB1dCwgJnByaW1fcGlwZSk7CisJaWYg KCFwcmltX291dHB1dCkKKwkJZmluZF9jb25uZWN0b3IoZmFsc2UsIHRydWUsIE5VTEwsIFBJUEVf Tk9ORSwgJnByaW1fb3V0cHV0LCAmcHJpbV9waXBlKTsKKwlpZiAoIXByaW1fb3V0cHV0KQorCQlm aW5kX2Nvbm5lY3RvcihmYWxzZSwgZmFsc2UsIE5VTEwsIFBJUEVfTk9ORSwgJnByaW1fb3V0cHV0 LCAmcHJpbV9waXBlKTsKKworCWlmICghcHJpbV9vdXRwdXQpCiAJCXJldHVybiBmYWxzZTsKIAot CWZpbmRfY29ubmVjdG9yKGZhbHNlLCBmYWxzZSwgcHJpbV9jb25uZWN0b3ItPmNvbm5lY3Rvcl9p ZCwKLQkJICAgICAgICZzY25kX2Nvbm5lY3RvciwgJnNjbmRfbW9kZSk7CisJZmluZF9jb25uZWN0 b3IoZmFsc2UsIGZhbHNlLCBwcmltX291dHB1dCwgcHJpbV9waXBlLAorCQkgICAgICAgJnNjbmRf b3V0cHV0LCAmc2NuZF9waXBlKTsKIAotCXByaW1fY3J0Y19pZCA9IGttc3Rlc3RfZmluZF9jcnRj X2Zvcl9jb25uZWN0b3IoZHJtLmZkLCBkcm0ucmVzLAotCQkJCQkJICAgICAgIHByaW1fY29ubmVj dG9yLCAwKTsKLQlpbml0X21vZGVfcGFyYW1zKCZwcmltX21vZGVfcGFyYW1zLCBwcmltX2NydGNf aWQsCi0JCQkgcHJpbV9jb25uZWN0b3IsIHByaW1fbW9kZSk7Ci0JcHJpbnRfbW9kZV9pbmZvKCJQ cmltYXJ5IiwgJnByaW1fbW9kZV9wYXJhbXMpOworCWluaXRfbW9kZV9wYXJhbXMoJnByaW1fbW9k ZV9wYXJhbXMsIHByaW1fb3V0cHV0LCBwcmltX3BpcGUpOwogCi0JaWYgKCFzY25kX2Nvbm5lY3Rv cikgewotCQlzY25kX21vZGVfcGFyYW1zLmNvbm5lY3Rvcl9pZCA9IDA7CisJaWYgKCFzY25kX291 dHB1dCkgeworCQlzY25kX21vZGVfcGFyYW1zLnBpcGUgPSBQSVBFX05PTkU7CisJCXNjbmRfbW9k ZV9wYXJhbXMub3V0cHV0ID0gTlVMTDsKIAkJcmV0dXJuIHRydWU7CiAJfQogCi0JaWd0X3JlcXVp cmUoZHJtLnJlcy0+Y291bnRfY3J0Y3MgPj0gMik7Ci0Jc2NuZF9jcnRjX2lkID0ga21zdGVzdF9m aW5kX2NydGNfZm9yX2Nvbm5lY3Rvcihkcm0uZmQsIGRybS5yZXMsCi0JCQkJCQkgICAgICBzY25k X2Nvbm5lY3RvciwKLQkJCTEgPDwga21zdGVzdF9nZXRfY3J0Y19pZHgoZHJtLnJlcywgcHJpbV9j cnRjX2lkKSk7Ci0JaW5pdF9tb2RlX3BhcmFtcygmc2NuZF9tb2RlX3BhcmFtcywgc2NuZF9jcnRj X2lkLAotCQkJIHNjbmRfY29ubmVjdG9yLCBzY25kX21vZGUpOwotCXByaW50X21vZGVfaW5mbygi U2Vjb25kYXJ5IiwgJnNjbmRfbW9kZV9wYXJhbXMpOwotCisJaW5pdF9tb2RlX3BhcmFtcygmc2Nu ZF9tb2RlX3BhcmFtcywgc2NuZF9vdXRwdXQsIHNjbmRfcGlwZSk7CiAJcmV0dXJuIHRydWU7CiB9 CiAKQEAgLTY5OSw3ICs2MzUsNyBAQCBzdGF0aWMgdm9pZCBjcmVhdGVfc2hhcmVkX2ZiKGVudW0g cGl4ZWxfZm9ybWF0IGZvcm1hdCkKIAlwcmltX3cgPSBwcmltX21vZGVfcGFyYW1zLm1vZGUtPmhk aXNwbGF5OwogCXByaW1faCA9IHByaW1fbW9kZV9wYXJhbXMubW9kZS0+dmRpc3BsYXk7CiAKLQlp ZiAoc2NuZF9tb2RlX3BhcmFtcy5jb25uZWN0b3JfaWQpIHsKKwlpZiAoc2NuZF9tb2RlX3BhcmFt cy5vdXRwdXQpIHsKIAkJc2NuZF93ID0gc2NuZF9tb2RlX3BhcmFtcy5tb2RlLT5oZGlzcGxheTsK IAkJc2NuZF9oID0gc2NuZF9tb2RlX3BhcmFtcy5tb2RlLT52ZGlzcGxheTsKIAl9IGVsc2UgewpA QCAtNzI4LDcgKzY2NCw3IEBAIHN0YXRpYyB2b2lkIGRlc3Ryb3lfZmJzKGVudW0gcGl4ZWxfZm9y bWF0IGZvcm1hdCkKIAlpZiAoIXMtPmluaXRpYWxpemVkKQogCQlyZXR1cm47CiAKLQlpZiAoc2Nu ZF9tb2RlX3BhcmFtcy5jb25uZWN0b3JfaWQpIHsKKwlpZiAoc2NuZF9tb2RlX3BhcmFtcy5vdXRw dXQpIHsKIAkJaWd0X3JlbW92ZV9mYihkcm0uZmQsICZzLT5zY25kX3ByaSk7CiAJCWlndF9yZW1v dmVfZmIoZHJtLmZkLCAmcy0+c2NuZF9jdXIpOwogCQlpZ3RfcmVtb3ZlX2ZiKGRybS5mZCwgJnMt PnNjbmRfc3ByKTsKQEAgLTc2NCw3ICs3MDAsNyBAQCBzdGF0aWMgdm9pZCBjcmVhdGVfZmJzKGVu dW0gcGl4ZWxfZm9ybWF0IGZvcm1hdCkKIAogCWNyZWF0ZV9zaGFyZWRfZmIoZm9ybWF0KTsKIAot CWlmICghc2NuZF9tb2RlX3BhcmFtcy5jb25uZWN0b3JfaWQpCisJaWYgKCFzY25kX21vZGVfcGFy YW1zLm91dHB1dCkKIAkJcmV0dXJuOwogCiAJY3JlYXRlX2ZiKGZvcm1hdCwgc2NuZF9tb2RlX3Bh cmFtcy5tb2RlLT5oZGlzcGxheSwKQEAgLTc3NiwxNCArNzEyLDI5IEBAIHN0YXRpYyB2b2lkIGNy ZWF0ZV9mYnMoZW51bSBwaXhlbF9mb3JtYXQgZm9ybWF0KQogCQkgIG9wdC50aWxpbmcsIFBMQU5F X1NQUiwgJnMtPnNjbmRfc3ByKTsKIH0KIAotc3RhdGljIGJvb2wgc2V0X21vZGVfZm9yX3BhcmFt cyhzdHJ1Y3QgbW9kZXNldF9wYXJhbXMgKnBhcmFtcykKK3N0YXRpYyB2b2lkIF9fc2V0X3ByaW1f cGxhbmVfZm9yX3BhcmFtcyhzdHJ1Y3QgbW9kZXNldF9wYXJhbXMgKnBhcmFtcykKIHsKLQlpbnQg cmM7CisJaWd0X3BsYW5lX3NldF9mYihwYXJhbXMtPnByaW1hcnkucGxhbmUsIHBhcmFtcy0+cHJp bWFyeS5mYik7CisJaWd0X3BsYW5lX3NldF9wb3NpdGlvbihwYXJhbXMtPnByaW1hcnkucGxhbmUs IDAsIDApOworCWlndF9wbGFuZV9zZXRfc2l6ZShwYXJhbXMtPnByaW1hcnkucGxhbmUsIHBhcmFt cy0+bW9kZS0+aGRpc3BsYXksIHBhcmFtcy0+bW9kZS0+dmRpc3BsYXkpOworCWlndF9mYl9zZXRf cG9zaXRpb24ocGFyYW1zLT5wcmltYXJ5LmZiLCBwYXJhbXMtPnByaW1hcnkucGxhbmUsCisJCQkg ICAgcGFyYW1zLT5wcmltYXJ5LngsIHBhcmFtcy0+cHJpbWFyeS55KTsKKwlpZ3RfZmJfc2V0X3Np emUocGFyYW1zLT5wcmltYXJ5LmZiLCBwYXJhbXMtPnByaW1hcnkucGxhbmUsCisJCQlwYXJhbXMt Pm1vZGUtPmhkaXNwbGF5LCBwYXJhbXMtPm1vZGUtPnZkaXNwbGF5KTsKK30KIAotCXJjID0gZHJt TW9kZVNldENydGMoZHJtLmZkLCBwYXJhbXMtPmNydGNfaWQsIHBhcmFtcy0+ZmIuZmItPmZiX2lk LAotCQkJICAgIHBhcmFtcy0+ZmIueCwgcGFyYW1zLT5mYi55LAotCQkJICAgICZwYXJhbXMtPmNv bm5lY3Rvcl9pZCwgMSwgcGFyYW1zLT5tb2RlKTsKLQlyZXR1cm4gKHJjID09IDApOworc3RhdGlj IHZvaWQgX19zZXRfbW9kZV9mb3JfcGFyYW1zKHN0cnVjdCBtb2Rlc2V0X3BhcmFtcyAqcGFyYW1z KQoreworCWlndF9vdXRwdXRfb3ZlcnJpZGVfbW9kZShwYXJhbXMtPm91dHB1dCwgcGFyYW1zLT5t b2RlKTsKKwlpZ3Rfb3V0cHV0X3NldF9waXBlKHBhcmFtcy0+b3V0cHV0LCBwYXJhbXMtPnBpcGUp OworCisJX19zZXRfcHJpbV9wbGFuZV9mb3JfcGFyYW1zKHBhcmFtcyk7Cit9CisKK3N0YXRpYyB2 b2lkIHNldF9tb2RlX2Zvcl9wYXJhbXMoc3RydWN0IG1vZGVzZXRfcGFyYW1zICpwYXJhbXMpCit7 CisJX19zZXRfbW9kZV9mb3JfcGFyYW1zKHBhcmFtcyk7CisJaWd0X2Rpc3BsYXlfY29tbWl0KCZk cm0uZGlzcGxheSk7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZGVidWdmc19yZWFkKGNvbnN0IGNoYXIg KnBhcmFtLCBjaGFyICpidWYsIGludCBsZW4pCkBAIC04MzAsNyArNzgxLDcgQEAgc3RhdGljIHZv aWQgcHNyX3ByaW50X3N0YXR1cyh2b2lkKQogCWlndF9pbmZvKCJQU1Igc3RhdHVzOlxuJXNcbiIs IGJ1Zik7CiB9CiAKLXZvaWQgZHJyc19zZXQodW5zaWduZWQgaW50IHZhbCkKK3N0YXRpYyB2b2lk IGRycnNfc2V0KHVuc2lnbmVkIGludCB2YWwpCiB7CiAJY2hhciBidWZbMl07CiAJaW50IHJldDsK QEAgLTEyMzgsMjIgKzExODksOCBAQCBzdGF0aWMgdm9pZCBmaWxsX2ZiX3JlZ2lvbihzdHJ1Y3Qg ZmJfcmVnaW9uICpyZWdpb24sIGVudW0gY29sb3IgZWNvbG9yKQogCiBzdGF0aWMgdm9pZCB1bnNl dF9hbGxfY3J0Y3Modm9pZCkKIHsKLQlpbnQgaSwgcmM7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgZHJt LnJlcy0+Y291bnRfY3J0Y3M7IGkrKykgewotCQlyYyA9IGRybU1vZGVTZXRDcnRjKGRybS5mZCwg ZHJtLnJlcy0+Y3J0Y3NbaV0sIC0xLCAwLCAwLCBOVUxMLAotCQkJCSAgICAwLCBOVUxMKTsKLQkJ aWd0X2Fzc2VydF9lcShyYywgMCk7Ci0KLQkJcmMgPSBkcm1Nb2RlU2V0Q3Vyc29yKGRybS5mZCwg ZHJtLnJlcy0+Y3J0Y3NbaV0sIDAsIDAsIDApOwotCQlpZ3RfYXNzZXJ0X2VxKHJjLCAwKTsKLQl9 Ci0KLQlmb3IgKGkgPSAwOyBpIDwgZHJtLnBsYW5lX3Jlcy0+Y291bnRfcGxhbmVzOyBpKyspIHsK LQkJcmMgPSBkcm1Nb2RlU2V0UGxhbmUoZHJtLmZkLCBkcm0ucGxhbmVfcmVzLT5wbGFuZXNbaV0s IDAsIDAsIDAsCi0JCQkJICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwKTsKLQkJaWd0X2Fzc2Vy dF9lcShyYywgMCk7Ci0JfQorCWlndF9kaXNwbGF5X3Jlc2V0KCZkcm0uZGlzcGxheSk7CisJaWd0 X2Rpc3BsYXlfY29tbWl0KCZkcm0uZGlzcGxheSk7CiB9CiAKIHN0YXRpYyB2b2lkIGRpc2FibGVf ZmVhdHVyZXMoY29uc3Qgc3RydWN0IHRlc3RfbW9kZSAqdCkKQEAgLTEzMjUsMTAgKzEyNjIsMTEg QEAgc3RhdGljIHZvaWQgY29sbGVjdF9jcmNzKHN0cnVjdCBib3RoX2NyY3MgKmNyY3MsIGJvb2wg bWFuZGF0b3J5X3NpbmtfY3JjKQogCWdldF9zaW5rX2NyYygmY3Jjcy0+c2luaywgbWFuZGF0b3J5 X3NpbmtfY3JjKTsKIH0KIAorc3RhdGljIHZvaWQgc2V0dXBfc2lua19jcmModm9pZCk7CisKIHN0 YXRpYyB2b2lkIGluaXRfYmx1ZV9jcmMoZW51bSBwaXhlbF9mb3JtYXQgZm9ybWF0LCBib29sIG1h bmRhdG9yeV9zaW5rX2NyYykKIHsKIAlzdHJ1Y3QgaWd0X2ZiIGJsdWU7Ci0JaW50IHJjOwogCiAJ aWYgKGJsdWVfY3Jjc1tmb3JtYXRdLmluaXRpYWxpemVkKQogCQlyZXR1cm47CkBAIC0xMzM5LDEw ICsxMjc3LDE4IEBAIHN0YXRpYyB2b2lkIGluaXRfYmx1ZV9jcmMoZW51bSBwaXhlbF9mb3JtYXQg Zm9ybWF0LCBib29sIG1hbmRhdG9yeV9zaW5rX2NyYykKIAogCWZpbGxfZmIoJmJsdWUsIENPTE9S X1BSSU1fQkcpOwogCi0JcmMgPSBkcm1Nb2RlU2V0Q3J0Yyhkcm0uZmQsIHByaW1fbW9kZV9wYXJh bXMuY3J0Y19pZCwKLQkJCSAgICBibHVlLmZiX2lkLCAwLCAwLCAmcHJpbV9tb2RlX3BhcmFtcy5j b25uZWN0b3JfaWQsIDEsCi0JCQkgICAgcHJpbV9tb2RlX3BhcmFtcy5tb2RlKTsKLQlpZ3RfYXNz ZXJ0X2VxKHJjLCAwKTsKKwlpZ3Rfb3V0cHV0X3NldF9waXBlKHByaW1fbW9kZV9wYXJhbXMub3V0 cHV0LCBwcmltX21vZGVfcGFyYW1zLnBpcGUpOworCWlndF9vdXRwdXRfb3ZlcnJpZGVfbW9kZShw cmltX21vZGVfcGFyYW1zLm91dHB1dCwgcHJpbV9tb2RlX3BhcmFtcy5tb2RlKTsKKwlpZ3RfcGxh bmVfc2V0X2ZiKHByaW1fbW9kZV9wYXJhbXMucHJpbWFyeS5wbGFuZSwgJmJsdWUpOworCWlndF9k aXNwbGF5X2NvbW1pdCgmZHJtLmRpc3BsYXkpOworCisJaWYgKCFwaXBlX2NyYykgeworCQlwaXBl X2NyYyA9IGlndF9waXBlX2NyY19uZXcoZHJtLmZkLCBwcmltX21vZGVfcGFyYW1zLnBpcGUsIElO VEVMX1BJUEVfQ1JDX1NPVVJDRV9BVVRPKTsKKwkJaWd0X2Fzc2VydChwaXBlX2NyYyk7CisKKwkJ c2V0dXBfc2lua19jcmMoKTsKKwl9CisKIAljb2xsZWN0X2NyY3MoJmJsdWVfY3Jjc1tmb3JtYXRd LmNyYywgbWFuZGF0b3J5X3NpbmtfY3JjKTsKIAogCXByaW50X2NyYygiQmx1ZSBDUkM6ICAiLCAm Ymx1ZV9jcmNzW2Zvcm1hdF0uY3JjKTsKQEAgLTEzNTgsNyArMTMwNCw3IEBAIHN0YXRpYyB2b2lk IGluaXRfY3JjcyhlbnVtIHBpeGVsX2Zvcm1hdCBmb3JtYXQsCiAJCSAgICAgIHN0cnVjdCBkcmF3 X3BhdHRlcm5faW5mbyAqcGF0dGVybiwKIAkJICAgICAgYm9vbCBtYW5kYXRvcnlfc2lua19jcmMp CiB7Ci0JaW50IHIsIHJfLCByYzsKKwlpbnQgciwgcl87CiAJc3RydWN0IGlndF9mYiB0bXBfZmJz W3BhdHRlcm4tPm5fcmVjdHNdOwogCiAJaWYgKHBhdHRlcm4tPmluaXRpYWxpemVkW2Zvcm1hdF0p CkBAIC0xMzg2LDEyICsxMzMyLDExIEBAIHN0YXRpYyB2b2lkIGluaXRfY3JjcyhlbnVtIHBpeGVs X2Zvcm1hdCBmb3JtYXQsCiAJCQkJCSByKTsKIAl9CiAKKwlpZ3Rfb3V0cHV0X3NldF9waXBlKHBy aW1fbW9kZV9wYXJhbXMub3V0cHV0LCBwcmltX21vZGVfcGFyYW1zLnBpcGUpOwogCWZvciAociA9 IDA7IHIgPCBwYXR0ZXJuLT5uX3JlY3RzOyByKyspIHsKLQkJcmMgPSBkcm1Nb2RlU2V0Q3J0Yyhk cm0uZmQsIHByaW1fbW9kZV9wYXJhbXMuY3J0Y19pZCwKLQkJCQkgICB0bXBfZmJzW3JdLmZiX2lk LCAwLCAwLAotCQkJCSAgICZwcmltX21vZGVfcGFyYW1zLmNvbm5lY3Rvcl9pZCwgMSwKLQkJCQkg ICBwcmltX21vZGVfcGFyYW1zLm1vZGUpOwotCQlpZ3RfYXNzZXJ0X2VxKHJjLCAwKTsKKwkJaWd0 X3BsYW5lX3NldF9mYihwcmltX21vZGVfcGFyYW1zLnByaW1hcnkucGxhbmUsICZ0bXBfZmJzW3Jd KTsKKwkJaWd0X2Rpc3BsYXlfY29tbWl0KCZkcm0uZGlzcGxheSk7CisKIAkJY29sbGVjdF9jcmNz KCZwYXR0ZXJuLT5jcmNzW2Zvcm1hdF1bcl0sIG1hbmRhdG9yeV9zaW5rX2NyYyk7CiAJfQogCkBA IC0xNDA4LDUwICsxMzUzLDEzIEBAIHN0YXRpYyB2b2lkIGluaXRfY3JjcyhlbnVtIHBpeGVsX2Zv cm1hdCBmb3JtYXQsCiAJcGF0dGVybi0+aW5pdGlhbGl6ZWRbZm9ybWF0XSA9IHRydWU7CiB9CiAK LXN0YXRpYyB1aW50NjRfdCBnZXRfcGxhbmVfdHlwZSh1aW50MzJfdCBwbGFuZV9pZCkKLXsKLQli b29sIGZvdW5kOwotCXVpbnQ2NF90IHByb3BfdmFsdWU7Ci0JZHJtTW9kZVByb3BlcnR5UHRyIHBy b3A7Ci0KLQlmb3VuZCA9IGttc3Rlc3RfZ2V0X3Byb3BlcnR5KGRybS5mZCwgcGxhbmVfaWQsIERS TV9NT0RFX09CSkVDVF9QTEFORSwKLQkJCQkgICAgICJ0eXBlIiwgTlVMTCwgJnByb3BfdmFsdWUs ICZwcm9wKTsKLQlpZ3RfYXNzZXJ0KGZvdW5kKTsKLQlpZ3RfYXNzZXJ0KHByb3AtPmZsYWdzICYg RFJNX01PREVfUFJPUF9FTlVNKTsKLQlpZ3RfYXNzZXJ0KHByb3BfdmFsdWUgPCBwcm9wLT5jb3Vu dF9lbnVtcyk7Ci0KLQlkcm1Nb2RlRnJlZVByb3BlcnR5KHByb3ApOwotCXJldHVybiBwcm9wX3Zh bHVlOwotfQotCiBzdGF0aWMgdm9pZCBzZXR1cF9kcm0odm9pZCkKIHsKLQlpbnQgaSwgcmM7Ci0K IAlkcm0uZmQgPSBkcm1fb3Blbl9kcml2ZXJfbWFzdGVyKERSSVZFUl9JTlRFTCk7CiAJZHJtLmRl YnVnZnMgPSBpZ3RfZGVidWdmc19kaXIoZHJtLmZkKTsKIAotCWRybS5yZXMgPSBkcm1Nb2RlR2V0 UmVzb3VyY2VzKGRybS5mZCk7Ci0JaWd0X2Fzc2VydChkcm0ucmVzLT5jb3VudF9jb25uZWN0b3Jz IDw9IE1BWF9DT05ORUNUT1JTKTsKLQlpZ3RfYXNzZXJ0KGRybS5yZXMtPmNvdW50X2VuY29kZXJz IDw9IE1BWF9FTkNPREVSUyk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgZHJtLnJlcy0+Y291bnRfY29u bmVjdG9yczsgaSsrKQotCQlkcm0uY29ubmVjdG9yc1tpXSA9IGRybU1vZGVHZXRDb25uZWN0b3JD dXJyZW50KGRybS5mZCwKLQkJCQkJCWRybS5yZXMtPmNvbm5lY3RvcnNbaV0pOwotCWZvciAoaSA9 IDA7IGkgPCBkcm0ucmVzLT5jb3VudF9lbmNvZGVyczsgaSsrKQotCQlkcm0uZW5jb2RlcnNbaV0g PSBkcm1Nb2RlR2V0RW5jb2Rlcihkcm0uZmQsCi0JCQkJCQkgICAgZHJtLnJlcy0+ZW5jb2RlcnNb aV0pOwotCi0JcmMgPSBkcm1TZXRDbGllbnRDYXAoZHJtLmZkLCBEUk1fQ0xJRU5UX0NBUF9VTklW RVJTQUxfUExBTkVTLCAxKTsKLQlpZ3RfcmVxdWlyZShyYyA9PSAwKTsKLQotCWRybS5wbGFuZV9y ZXMgPSBkcm1Nb2RlR2V0UGxhbmVSZXNvdXJjZXMoZHJtLmZkKTsKLQlpZ3RfYXNzZXJ0KGRybS5w bGFuZV9yZXMtPmNvdW50X3BsYW5lcyA8PSBNQVhfUExBTkVTKTsKLQotCWZvciAoaSA9IDA7IGkg PCBkcm0ucGxhbmVfcmVzLT5jb3VudF9wbGFuZXM7IGkrKykgewotCQlkcm0ucGxhbmVzW2ldID0g ZHJtTW9kZUdldFBsYW5lKGRybS5mZCwgZHJtLnBsYW5lX3Jlcy0+cGxhbmVzW2ldKTsKLQkJZHJt LnBsYW5lX3R5cGVzW2ldID0gZ2V0X3BsYW5lX3R5cGUoZHJtLnBsYW5lX3Jlcy0+cGxhbmVzW2ld KTsKLQl9CisJa21zdGVzdF9zZXRfdnRfZ3JhcGhpY3NfbW9kZSgpOworCWlndF9kaXNwbGF5X2lu aXQoJmRybS5kaXNwbGF5LCBkcm0uZmQpOwogCiAJZHJtLmJ1Zm1nciA9IGRybV9pbnRlbF9idWZt Z3JfZ2VtX2luaXQoZHJtLmZkLCA0MDk2KTsKIAlpZ3RfYXNzZXJ0KGRybS5idWZtZ3IpOwpAQCAt MTQ2MCwyMCArMTM2OCw4IEBAIHN0YXRpYyB2b2lkIHNldHVwX2RybSh2b2lkKQogCiBzdGF0aWMg dm9pZCB0ZWFyZG93bl9kcm0odm9pZCkKIHsKLQlpbnQgaTsKLQogCWRybV9pbnRlbF9idWZtZ3Jf ZGVzdHJveShkcm0uYnVmbWdyKTsKLQotCWZvciAoaSA9IDA7IGkgPCBkcm0ucGxhbmVfcmVzLT5j b3VudF9wbGFuZXM7IGkrKykKLQkJZHJtTW9kZUZyZWVQbGFuZShkcm0ucGxhbmVzW2ldKTsKLQlk cm1Nb2RlRnJlZVBsYW5lUmVzb3VyY2VzKGRybS5wbGFuZV9yZXMpOwotCi0JZm9yIChpID0gMDsg aSA8IGRybS5yZXMtPmNvdW50X2VuY29kZXJzOyBpKyspCi0JCWRybU1vZGVGcmVlRW5jb2Rlcihk cm0uZW5jb2RlcnNbaV0pOwotCWZvciAoaSA9IDA7IGkgPCBkcm0ucmVzLT5jb3VudF9jb25uZWN0 b3JzOyBpKyspCi0JCWRybU1vZGVGcmVlQ29ubmVjdG9yKGRybS5jb25uZWN0b3JzW2ldKTsKLQot CWRybU1vZGVGcmVlUmVzb3VyY2VzKGRybS5yZXMpOworCWlndF9kaXNwbGF5X2ZpbmkoJmRybS5k aXNwbGF5KTsKIAljbG9zZShkcm0uZmQpOwogfQogCkBAIC0xNDg0LDcgKzEzODAsNiBAQCBzdGF0 aWMgdm9pZCBzZXR1cF9tb2Rlc2V0KHZvaWQpCiAJb2Zmc2NyZWVuX2ZiLncgPSAxMDI0OwogCW9m ZnNjcmVlbl9mYi5oID0gMTAyNDsKIAljcmVhdGVfZmJzKEZPUk1BVF9ERUZBVUxUKTsKLQlrbXN0 ZXN0X3NldF92dF9ncmFwaGljc19tb2RlKCk7CiB9CiAKIHN0YXRpYyB2b2lkIHRlYXJkb3duX21v ZGVzZXQodm9pZCkKQEAgLTE1MDAsNyArMTM5NSw3IEBAIHN0YXRpYyB2b2lkIHNldHVwX3Npbmtf Y3JjKHZvaWQpCiAJc2lua19jcmNfdCBjcmM7CiAJZHJtTW9kZUNvbm5lY3RvclB0ciBjOwogCi0J YyA9IGdldF9jb25uZWN0b3IocHJpbV9tb2RlX3BhcmFtcy5jb25uZWN0b3JfaWQpOworCWMgPSBw cmltX21vZGVfcGFyYW1zLm91dHB1dC0+Y29uZmlnLmNvbm5lY3RvcjsKIAlpZiAoYy0+Y29ubmVj dG9yX3R5cGUgIT0gRFJNX01PREVfQ09OTkVDVE9SX2VEUCkgewogCQlpZ3RfaW5mbygiU2luayBD UkMgbm90IHN1cHBvcnRlZDogcHJpbWFyeSBzY3JlZW4gaXMgbm90IGVEUFxuIik7CiAJCXNpbmtf Y3JjLnN1cHBvcnRlZCA9IGZhbHNlOwpAQCAtMTUxMCw5ICsxNDA1LDkgQEAgc3RhdGljIHZvaWQg c2V0dXBfc2lua19jcmModm9pZCkKIAkvKiBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGVyZSdzIGEg bW9kZSBzZXQgb24gdGhlIGVEUCBzY3JlZW4gYW5kIGl0J3MKIAkgKiBub3Qgb24gRFBNUyBzdGF0 ZSwgb3RoZXJ3aXNlIHdlIGZhbGwgaW50byB0aGUgIlVuZXhwZWN0ZWQgc2luayBDUkMKIAkgKiBl cnJvciIgY2FzZS4gKi8KLQlwcmltX21vZGVfcGFyYW1zLmZiLmZiID0gJmZic1tGT1JNQVRfREVG QVVMVF0ucHJpbV9wcmk7Ci0JcHJpbV9tb2RlX3BhcmFtcy5mYi54ID0gcHJpbV9tb2RlX3BhcmFt cy5mYi55ID0gMDsKLQlmaWxsX2ZiX3JlZ2lvbigmcHJpbV9tb2RlX3BhcmFtcy5mYiwgQ09MT1Jf UFJJTV9CRyk7CisJcHJpbV9tb2RlX3BhcmFtcy5wcmltYXJ5LmZiID0gJmZic1tGT1JNQVRfREVG QVVMVF0ucHJpbV9wcmk7CisJcHJpbV9tb2RlX3BhcmFtcy5wcmltYXJ5LnggPSBwcmltX21vZGVf cGFyYW1zLnByaW1hcnkueSA9IDA7CisJZmlsbF9mYl9yZWdpb24oJnByaW1fbW9kZV9wYXJhbXMu cHJpbWFyeSwgQ09MT1JfUFJJTV9CRyk7CiAJc2V0X21vZGVfZm9yX3BhcmFtcygmcHJpbV9tb2Rl X3BhcmFtcyk7CiAKIAlzaW5rX2NyYy5mZCA9IG9wZW5hdChkcm0uZGVidWdmcywgImk5MTVfc2lu a19jcmNfZURQMSIsIE9fUkRPTkxZKTsKQEAgLTE1MjUsMTEgKzE0MjAsNiBAQCBzdGF0aWMgdm9p ZCBzZXR1cF9zaW5rX2NyYyh2b2lkKQogc3RhdGljIHZvaWQgc2V0dXBfY3Jjcyh2b2lkKQogewog CWVudW0gcGl4ZWxfZm9ybWF0IGY7Ci0JaW50IGNydGNfaWR4ID0ga21zdGVzdF9nZXRfY3J0Y19p ZHgoZHJtLnJlcywgcHJpbV9tb2RlX3BhcmFtcy5jcnRjX2lkKTsKLQotCXBpcGVfY3JjID0gaWd0 X3BpcGVfY3JjX25ldyhkcm0uZmQsIGNydGNfaWR4LCBJTlRFTF9QSVBFX0NSQ19TT1VSQ0VfQVVU Tyk7Ci0KLQlzZXR1cF9zaW5rX2NyYygpOwogCiAJZm9yIChmID0gMDsgZiA8IEZPUk1BVF9DT1VO VDsgZisrKQogCQlibHVlX2NyY3NbZl0uaW5pdGlhbGl6ZWQgPSBmYWxzZTsKQEAgLTE2MDEsNyAr MTQ5MSw2IEBAIHN0YXRpYyBib29sIGZiY19zdXBwb3J0ZWRfb25fY2hpcHNldCh2b2lkKQogCiBz dGF0aWMgdm9pZCBzZXR1cF9mYmModm9pZCkKIHsKLQlkcm1Nb2RlQ29ubmVjdG9yUHRyIGMgPSBn ZXRfY29ubmVjdG9yKHByaW1fbW9kZV9wYXJhbXMuY29ubmVjdG9yX2lkKTsKIAlpbnQgZGV2aWQg PSBpbnRlbF9nZXRfZHJtX2RldmlkKGRybS5mZCk7CiAKIAlpZiAoIWZiY19zdXBwb3J0ZWRfb25f Y2hpcHNldCgpKSB7CkBAIC0xNjE0LDcgKzE1MDMsNyBAQCBzdGF0aWMgdm9pZCBzZXR1cF9mYmMo dm9pZCkKIAkgKiBpcyBub3QgcHJlcGFyZWQgZm9yIHRoYXQgeWV0LgogCSAqIFRPRE86IHNvbHZl IHRoaXMuCiAJICovCi0JaWYgKCFjb25uZWN0b3Jfc3VwcG9ydHNfcGlwZV9hKGMpKSB7CisJaWYg KHByaW1fbW9kZV9wYXJhbXMucGlwZSAhPSBQSVBFX0EpIHsKIAkJaWd0X2luZm8oIkNhbid0IHRl c3QgRkJDOiBwcmltYXJ5IGNvbm5lY3RvciBkb2Vzbid0IHN1cHBvcnQgIgogCQkJICJwaXBlIEFc biIpOwogCQlyZXR1cm47CkBAIC0xNjQ2LDcgKzE1MzUsNyBAQCBzdGF0aWMgYm9vbCBwc3Jfc2lu a19oYXNfc3VwcG9ydCh2b2lkKQogCiBzdGF0aWMgdm9pZCBzZXR1cF9wc3Iodm9pZCkKIHsKLQlp ZiAoZ2V0X2Nvbm5lY3RvcihwcmltX21vZGVfcGFyYW1zLmNvbm5lY3Rvcl9pZCktPmNvbm5lY3Rv cl90eXBlICE9CisJaWYgKHByaW1fbW9kZV9wYXJhbXMub3V0cHV0LT5jb25maWcuY29ubmVjdG9y LT5jb25uZWN0b3JfdHlwZSAhPQogCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfZURQKSB7CiAJCWln dF9pbmZvKCJDYW4ndCB0ZXN0IFBTUjogbm8gdXNhYmxlIGVEUCBzY3JlZW4uXG4iKTsKIAkJcmV0 dXJuOwpAQCAtMTY2NSw3ICsxNTU0LDcgQEAgc3RhdGljIHZvaWQgdGVhcmRvd25fcHNyKHZvaWQp CiAKIHN0YXRpYyB2b2lkIHNldHVwX2RycnModm9pZCkKIHsKLQlpZiAoZ2V0X2Nvbm5lY3Rvcihw cmltX21vZGVfcGFyYW1zLmNvbm5lY3Rvcl9pZCktPmNvbm5lY3Rvcl90eXBlICE9CisJaWYgKHBy aW1fbW9kZV9wYXJhbXMub3V0cHV0LT5jb25maWcuY29ubmVjdG9yLT5jb25uZWN0b3JfdHlwZSAh PQogCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfZURQKSB7CiAJCWlndF9pbmZvKCJDYW4ndCB0ZXN0 IERSUlM6IG5vIHVzYWJsZSBlRFAgc2NyZWVuLlxuIik7CiAJCXJldHVybjsKQEAgLTE3MzQsNyAr MTYyMyw3IEBAIHN0YXRpYyBzdHJ1Y3QgZmJfcmVnaW9uICpwaWNrX3RhcmdldChjb25zdCBzdHJ1 Y3QgdGVzdF9tb2RlICp0LAogCiAJc3dpdGNoICh0LT5wbGFuZSkgewogCWNhc2UgUExBTkVfUFJJ OgotCQlyZXR1cm4gJnBhcmFtcy0+ZmI7CisJCXJldHVybiAmcGFyYW1zLT5wcmltYXJ5OwogCWNh c2UgUExBTkVfQ1VSOgogCQlyZXR1cm4gJnBhcmFtcy0+Y3Vyc29yOwogCWNhc2UgUExBTkVfU1BS OgpAQCAtMTkwNCw3ICsxNzkzLDcgQEAgc3RhdGljIHZvaWQgX19kb19hc3NlcnRpb25zKGNvbnN0 IHN0cnVjdCB0ZXN0X21vZGUgKnQsIGludCBmbGFncywKIAogc3RhdGljIHZvaWQgZW5hYmxlX3By aW1fc2NyZWVuX2FuZF93YWl0KGNvbnN0IHN0cnVjdCB0ZXN0X21vZGUgKnQpCiB7Ci0JZmlsbF9m Yl9yZWdpb24oJnByaW1fbW9kZV9wYXJhbXMuZmIsIENPTE9SX1BSSU1fQkcpOworCWZpbGxfZmJf cmVnaW9uKCZwcmltX21vZGVfcGFyYW1zLnByaW1hcnksIENPTE9SX1BSSU1fQkcpOwogCXNldF9t b2RlX2Zvcl9wYXJhbXMoJnByaW1fbW9kZV9wYXJhbXMpOwogCiAJd2FudGVkX2NyYyA9ICZibHVl X2NyY3NbdC0+Zm9ybWF0XS5jcmM7CkBAIC0xOTE1LDQ1ICsxODA0LDIzIEBAIHN0YXRpYyB2b2lk IGVuYWJsZV9wcmltX3NjcmVlbl9hbmRfd2FpdChjb25zdCBzdHJ1Y3QgdGVzdF9tb2RlICp0KQog CiBzdGF0aWMgdm9pZCBlbmFibGVfc2NuZF9zY3JlZW5fYW5kX3dhaXQoY29uc3Qgc3RydWN0IHRl c3RfbW9kZSAqdCkKIHsKLQlmaWxsX2ZiX3JlZ2lvbigmc2NuZF9tb2RlX3BhcmFtcy5mYiwgQ09M T1JfU0NORF9CRyk7CisJZmlsbF9mYl9yZWdpb24oJnNjbmRfbW9kZV9wYXJhbXMucHJpbWFyeSwg Q09MT1JfU0NORF9CRyk7CiAJc2V0X21vZGVfZm9yX3BhcmFtcygmc2NuZF9tb2RlX3BhcmFtcyk7 CiAKIAlkb19hc3NlcnRpb25zKEFTU0VSVF9OT19BQ1RJT05fQ0hBTkdFKTsKIH0KIAotc3RhdGlj IHZvaWQgc2V0X2N1cnNvcl9mb3JfdGVzdChjb25zdCBzdHJ1Y3QgdGVzdF9tb2RlICp0LAotCQkJ CXN0cnVjdCBtb2Rlc2V0X3BhcmFtcyAqcGFyYW1zKQorc3RhdGljIHZvaWQgc2V0X3JlZ2lvbl9m b3JfdGVzdChjb25zdCBzdHJ1Y3QgdGVzdF9tb2RlICp0LAorCQkJCXN0cnVjdCBmYl9yZWdpb24g KnJlZykKIHsKLQlpbnQgcmM7Ci0KLQlmaWxsX2ZiX3JlZ2lvbigmcGFyYW1zLT5jdXJzb3IsIENP TE9SX1BSSU1fQkcpOwotCi0JcmMgPSBkcm1Nb2RlTW92ZUN1cnNvcihkcm0uZmQsIHBhcmFtcy0+ Y3J0Y19pZCwgMCwgMCk7Ci0JaWd0X2Fzc2VydF9lcShyYywgMCk7CisJZmlsbF9mYl9yZWdpb24o cmVnLCBDT0xPUl9QUklNX0JHKTsKIAotCXJjID0gZHJtTW9kZVNldEN1cnNvcihkcm0uZmQsIHBh cmFtcy0+Y3J0Y19pZCwKLQkJCSAgICAgIHBhcmFtcy0+Y3Vyc29yLmZiLT5nZW1faGFuZGxlLAot CQkJICAgICAgcGFyYW1zLT5jdXJzb3IudywKLQkJCSAgICAgIHBhcmFtcy0+Y3Vyc29yLmgpOwot CWlndF9hc3NlcnRfZXEocmMsIDApOwotCi0JZG9fYXNzZXJ0aW9ucyhBU1NFUlRfTk9fQUNUSU9O X0NIQU5HRSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNldF9zcHJpdGVfZm9yX3Rlc3QoY29uc3Qgc3Ry dWN0IHRlc3RfbW9kZSAqdCwKLQkJCQlzdHJ1Y3QgbW9kZXNldF9wYXJhbXMgKnBhcmFtcykKLXsK LQlpbnQgcmM7Ci0KLQlmaWxsX2ZiX3JlZ2lvbigmcGFyYW1zLT5zcHJpdGUsIENPTE9SX1BSSU1f QkcpOwotCi0JcmMgPSBkcm1Nb2RlU2V0UGxhbmUoZHJtLmZkLCBwYXJhbXMtPnNwcml0ZV9pZCwg cGFyYW1zLT5jcnRjX2lkLAotCQkJICAgICBwYXJhbXMtPnNwcml0ZS5mYi0+ZmJfaWQsIDAsIDAs IDAsCi0JCQkgICAgIHBhcmFtcy0+c3ByaXRlLncsIHBhcmFtcy0+c3ByaXRlLmgsCi0JCQkgICAg IDAsIDAsIHBhcmFtcy0+c3ByaXRlLncgPDwgMTYsCi0JCQkgICAgIHBhcmFtcy0+c3ByaXRlLmgg PDwgMTYpOwotCWlndF9hc3NlcnRfZXEocmMsIDApOworCWlndF9wbGFuZV9zZXRfZmIocmVnLT5w bGFuZSwgcmVnLT5mYik7CisJaWd0X3BsYW5lX3NldF9wb3NpdGlvbihyZWctPnBsYW5lLCAwLCAw KTsKKwlpZ3RfcGxhbmVfc2V0X3NpemUocmVnLT5wbGFuZSwgcmVnLT53LCByZWctPmgpOworCWln dF9mYl9zZXRfc2l6ZShyZWctPmZiLCByZWctPnBsYW5lLCByZWctPncsIHJlZy0+aCk7CiAKKwlp Z3RfZGlzcGxheV9jb21taXQoJmRybS5kaXNwbGF5KTsKIAlkb19hc3NlcnRpb25zKEFTU0VSVF9O T19BQ1RJT05fQ0hBTkdFKTsKIH0KIApAQCAtMTk3Myw3ICsxODQwLDcgQEAgc3RhdGljIHZvaWQg ZW5hYmxlX2ZlYXR1cmVzX2Zvcl90ZXN0KGNvbnN0IHN0cnVjdCB0ZXN0X21vZGUgKnQpCiBzdGF0 aWMgdm9pZCBjaGVja190ZXN0X3JlcXVpcmVtZW50cyhjb25zdCBzdHJ1Y3QgdGVzdF9tb2RlICp0 KQogewogCWlmICh0LT5waXBlcyA9PSBQSVBFX0RVQUwpCi0JCWlndF9yZXF1aXJlX2Yoc2NuZF9t b2RlX3BhcmFtcy5jb25uZWN0b3JfaWQsCisJCWlndF9yZXF1aXJlX2Yoc2NuZF9tb2RlX3BhcmFt cy5vdXRwdXQsCiAJCQkgICAgIkNhbid0IHRlc3QgZHVhbCBwaXBlcyB3aXRoIHRoZSBjdXJyZW50 IG91dHB1dHNcbiIpOwogCiAJaWYgKHQtPmZlYXR1cmUgJiBGRUFUVVJFX0ZCQykKQEAgLTIwMTEs MzIgKzE4NzgsMzIgQEAgc3RhdGljIHZvaWQgc2V0X2NydGNfZmJzKGNvbnN0IHN0cnVjdCB0ZXN0 X21vZGUgKnQpCiAKIAlzd2l0Y2ggKHQtPmZicykgewogCWNhc2UgRkJTX0lORElWSURVQUw6Ci0J CXByaW1fbW9kZV9wYXJhbXMuZmIuZmIgPSAmcy0+cHJpbV9wcmk7Ci0JCXNjbmRfbW9kZV9wYXJh bXMuZmIuZmIgPSAmcy0+c2NuZF9wcmk7CisJCXByaW1fbW9kZV9wYXJhbXMucHJpbWFyeS5mYiA9 ICZzLT5wcmltX3ByaTsKKwkJc2NuZF9tb2RlX3BhcmFtcy5wcmltYXJ5LmZiID0gJnMtPnNjbmRf cHJpOwogCQlvZmZzY3JlZW5fZmIuZmIgPSAmcy0+b2Zmc2NyZWVuOwogCi0JCXByaW1fbW9kZV9w YXJhbXMuZmIueCA9IDA7Ci0JCXNjbmRfbW9kZV9wYXJhbXMuZmIueCA9IDA7CisJCXByaW1fbW9k ZV9wYXJhbXMucHJpbWFyeS54ID0gMDsKKwkJc2NuZF9tb2RlX3BhcmFtcy5wcmltYXJ5LnggPSAw OwogCQlvZmZzY3JlZW5fZmIueCA9IDA7CiAKLQkJcHJpbV9tb2RlX3BhcmFtcy5mYi55ID0gMDsK LQkJc2NuZF9tb2RlX3BhcmFtcy5mYi55ID0gMDsKKwkJcHJpbV9tb2RlX3BhcmFtcy5wcmltYXJ5 LnkgPSAwOworCQlzY25kX21vZGVfcGFyYW1zLnByaW1hcnkueSA9IDA7CiAJCW9mZnNjcmVlbl9m Yi55ID0gMDsKIAkJYnJlYWs7CiAJY2FzZSBGQlNfU0hBUkVEOgogCQkvKiBQbGVhc2Ugc2VlIHRo ZSBjb21tZW50IGF0IHRoZSB0b3Agb2YgY3JlYXRlX3NoYXJlZF9mYigpLiAqLwotCQlwcmltX21v ZGVfcGFyYW1zLmZiLmZiID0gJnMtPmJpZzsKLQkJc2NuZF9tb2RlX3BhcmFtcy5mYi5mYiA9ICZz LT5iaWc7CisJCXByaW1fbW9kZV9wYXJhbXMucHJpbWFyeS5mYiA9ICZzLT5iaWc7CisJCXNjbmRf bW9kZV9wYXJhbXMucHJpbWFyeS5mYiA9ICZzLT5iaWc7CiAJCW9mZnNjcmVlbl9mYi5mYiA9ICZz LT5iaWc7CiAKLQkJcHJpbV9tb2RlX3BhcmFtcy5mYi54ID0gb3B0LnNoYXJlZF9mYl94X29mZnNl dDsKLQkJc2NuZF9tb2RlX3BhcmFtcy5mYi54ID0gb3B0LnNoYXJlZF9mYl94X29mZnNldDsKKwkJ cHJpbV9tb2RlX3BhcmFtcy5wcmltYXJ5LnggPSBvcHQuc2hhcmVkX2ZiX3hfb2Zmc2V0OworCQlz Y25kX21vZGVfcGFyYW1zLnByaW1hcnkueCA9IG9wdC5zaGFyZWRfZmJfeF9vZmZzZXQ7CiAJCW9m ZnNjcmVlbl9mYi54ID0gb3B0LnNoYXJlZF9mYl94X29mZnNldDsKIAotCQlwcmltX21vZGVfcGFy YW1zLmZiLnkgPSBvcHQuc2hhcmVkX2ZiX3lfb2Zmc2V0OwotCQlzY25kX21vZGVfcGFyYW1zLmZi LnkgPSBwcmltX21vZGVfcGFyYW1zLmZiLnkgKwotCQkJCQlwcmltX21vZGVfcGFyYW1zLmZiLmg7 Ci0JCW9mZnNjcmVlbl9mYi55ID0gc2NuZF9tb2RlX3BhcmFtcy5mYi55ICsgc2NuZF9tb2RlX3Bh cmFtcy5mYi5oOworCQlwcmltX21vZGVfcGFyYW1zLnByaW1hcnkueSA9IG9wdC5zaGFyZWRfZmJf eV9vZmZzZXQ7CisJCXNjbmRfbW9kZV9wYXJhbXMucHJpbWFyeS55ID0gcHJpbV9tb2RlX3BhcmFt cy5wcmltYXJ5LnkgKworCQkJCQlwcmltX21vZGVfcGFyYW1zLnByaW1hcnkuaDsKKwkJb2Zmc2Ny ZWVuX2ZiLnkgPSBzY25kX21vZGVfcGFyYW1zLnByaW1hcnkueSArIHNjbmRfbW9kZV9wYXJhbXMu cHJpbWFyeS5oOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlpZ3RfYXNzZXJ0KGZhbHNlKTsKQEAg LTIwNzUsOSArMTk0Miw5IEBAIHN0YXRpYyB2b2lkIHByZXBhcmVfc3VidGVzdF9zY3JlZW5zKGNv bnN0IHN0cnVjdCB0ZXN0X21vZGUgKnQpCiAJZW5hYmxlX3ByaW1fc2NyZWVuX2FuZF93YWl0KHQp OwogCWlmICh0LT5zY3JlZW4gPT0gU0NSRUVOX1BSSU0pIHsKIAkJaWYgKHQtPnBsYW5lID09IFBM QU5FX0NVUikKLQkJCXNldF9jdXJzb3JfZm9yX3Rlc3QodCwgJnByaW1fbW9kZV9wYXJhbXMpOwor CQkJc2V0X3JlZ2lvbl9mb3JfdGVzdCh0LCAmcHJpbV9tb2RlX3BhcmFtcy5jdXJzb3IpOwogCQlp ZiAodC0+cGxhbmUgPT0gUExBTkVfU1BSKQotCQkJc2V0X3Nwcml0ZV9mb3JfdGVzdCh0LCAmcHJp bV9tb2RlX3BhcmFtcyk7CisJCQlzZXRfcmVnaW9uX2Zvcl90ZXN0KHQsICZwcmltX21vZGVfcGFy YW1zLnNwcml0ZSk7CiAJfQogCiAJaWYgKHQtPnBpcGVzID09IFBJUEVfU0lOR0xFKQpAQCAtMjA4 Niw5ICsxOTUzLDkgQEAgc3RhdGljIHZvaWQgcHJlcGFyZV9zdWJ0ZXN0X3NjcmVlbnMoY29uc3Qg c3RydWN0IHRlc3RfbW9kZSAqdCkKIAllbmFibGVfc2NuZF9zY3JlZW5fYW5kX3dhaXQodCk7CiAJ aWYgKHQtPnNjcmVlbiA9PSBTQ1JFRU5fU0NORCkgewogCQlpZiAodC0+cGxhbmUgPT0gUExBTkVf Q1VSKQotCQkJc2V0X2N1cnNvcl9mb3JfdGVzdCh0LCAmc2NuZF9tb2RlX3BhcmFtcyk7CisJCQlz ZXRfcmVnaW9uX2Zvcl90ZXN0KHQsICZzY25kX21vZGVfcGFyYW1zLmN1cnNvcik7CiAJCWlmICh0 LT5wbGFuZSA9PSBQTEFORV9TUFIpCi0JCQlzZXRfc3ByaXRlX2Zvcl90ZXN0KHQsICZzY25kX21v ZGVfcGFyYW1zKTsKKwkJCXNldF9yZWdpb25fZm9yX3Rlc3QodCwgJnNjbmRfbW9kZV9wYXJhbXMu c3ByaXRlKTsKIAl9CiB9CiAKQEAgLTIxMjMsMTUgKzE5OTAsMTUgQEAgc3RhdGljIHZvaWQgcnRl X3N1YnRlc3QoY29uc3Qgc3RydWN0IHRlc3RfbW9kZSAqdCkKIAkJICAgICAgRE9OVF9BU1NFUlRf Q1JDIHwgQVNTRVJUX0RSUlNfSU5BQ1RJVkUpOwogCiAJZW5hYmxlX3ByaW1fc2NyZWVuX2FuZF93 YWl0KHQpOwotCXNldF9jdXJzb3JfZm9yX3Rlc3QodCwgJnByaW1fbW9kZV9wYXJhbXMpOwotCXNl dF9zcHJpdGVfZm9yX3Rlc3QodCwgJnByaW1fbW9kZV9wYXJhbXMpOworCXNldF9yZWdpb25fZm9y X3Rlc3QodCwgJnByaW1fbW9kZV9wYXJhbXMuY3Vyc29yKTsKKwlzZXRfcmVnaW9uX2Zvcl90ZXN0 KHQsICZwcmltX21vZGVfcGFyYW1zLnNwcml0ZSk7CiAKIAlpZiAodC0+cGlwZXMgPT0gUElQRV9T SU5HTEUpCiAJCXJldHVybjsKIAogCWVuYWJsZV9zY25kX3NjcmVlbl9hbmRfd2FpdCh0KTsKLQlz ZXRfY3Vyc29yX2Zvcl90ZXN0KHQsICZzY25kX21vZGVfcGFyYW1zKTsKLQlzZXRfc3ByaXRlX2Zv cl90ZXN0KHQsICZzY25kX21vZGVfcGFyYW1zKTsKKwlzZXRfcmVnaW9uX2Zvcl90ZXN0KHQsICZz Y25kX21vZGVfcGFyYW1zLmN1cnNvcik7CisJc2V0X3JlZ2lvbl9mb3JfdGVzdCh0LCAmc2NuZF9t b2RlX3BhcmFtcy5zcHJpdGUpOwogfQogCiBzdGF0aWMgdm9pZCB1cGRhdGVfd2FudGVkX2NyYyhj b25zdCBzdHJ1Y3QgdGVzdF9tb2RlICp0LCBzdHJ1Y3QgYm90aF9jcmNzICpjcmMpCkBAIC0yMzYw LDcgKzIyMjcsNyBAQCBzdGF0aWMgdm9pZCBiYWRmb3JtYXRfc3VidGVzdChjb25zdCBzdHJ1Y3Qg dGVzdF9tb2RlICp0KQogCiAJcHJlcGFyZV9zdWJ0ZXN0X2RhdGEodCwgTlVMTCk7CiAKLQlmaWxs X2ZiX3JlZ2lvbigmcHJpbV9tb2RlX3BhcmFtcy5mYiwgQ09MT1JfUFJJTV9CRyk7CisJZmlsbF9m Yl9yZWdpb24oJnByaW1fbW9kZV9wYXJhbXMucHJpbWFyeSwgQ09MT1JfUFJJTV9CRyk7CiAJc2V0 X21vZGVfZm9yX3BhcmFtcygmcHJpbV9tb2RlX3BhcmFtcyk7CiAKIAl3YW50ZWRfY3JjID0gJmJs dWVfY3Jjc1t0LT5mb3JtYXRdLmNyYzsKQEAgLTI0NzIsMjMgKzIzMzksOCBAQCBzdGF0aWMgdm9p ZCB3YWl0X2ZsaXBfZXZlbnQodm9pZCkKIAogc3RhdGljIHZvaWQgc2V0X3ByaW1fcGxhbmVfZm9y X3BhcmFtcyhzdHJ1Y3QgbW9kZXNldF9wYXJhbXMgKnBhcmFtcykKIHsKLQlpbnQgcmMsIGk7Ci0J aW50IGNydGNfaWR4ID0ga21zdGVzdF9nZXRfY3J0Y19pZHgoZHJtLnJlcywgcGFyYW1zLT5jcnRj X2lkKTsKLQl1aW50MzJfdCBwbGFuZV9pZCA9IDA7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgZHJtLnBs YW5lX3Jlcy0+Y291bnRfcGxhbmVzOyBpKyspCi0JCWlmICgoZHJtLnBsYW5lc1tpXS0+cG9zc2li bGVfY3J0Y3MgJiAoMSA8PCBjcnRjX2lkeCkpICYmCi0JCSAgICBkcm0ucGxhbmVfdHlwZXNbaV0g PT0gRFJNX1BMQU5FX1RZUEVfUFJJTUFSWSkKLQkJCXBsYW5lX2lkID0gZHJtLnBsYW5lc1tpXS0+ cGxhbmVfaWQ7Ci0JaWd0X2Fzc2VydChwbGFuZV9pZCk7Ci0KLQlyYyA9IGRybU1vZGVTZXRQbGFu ZShkcm0uZmQsIHBsYW5lX2lkLCBwYXJhbXMtPmNydGNfaWQsCi0JCQkgICAgIHBhcmFtcy0+ZmIu ZmItPmZiX2lkLCAwLCAwLCAwLAotCQkJICAgICBwYXJhbXMtPm1vZGUtPmhkaXNwbGF5LAotCQkJ ICAgICBwYXJhbXMtPm1vZGUtPnZkaXNwbGF5LAotCQkJICAgICBwYXJhbXMtPmZiLnggPDwgMTYs IHBhcmFtcy0+ZmIueSA8PCAxNiwKLQkJCSAgICAgcGFyYW1zLT5mYi53IDw8IDE2LCBwYXJhbXMt PmZiLmggPDwgMTYpOwotCWlndF9hc3NlcnQocmMgPT0gMCk7CisJX19zZXRfcHJpbV9wbGFuZV9m b3JfcGFyYW1zKHBhcmFtcyk7CisJaWd0X2Rpc3BsYXlfY29tbWl0MigmZHJtLmRpc3BsYXksIENP TU1JVF9VTklWRVJTQUwpOwogfQogCiBzdGF0aWMgdm9pZCBwYWdlX2ZsaXBfZm9yX3BhcmFtcyhz dHJ1Y3QgbW9kZXNldF9wYXJhbXMgKnBhcmFtcywKQEAgLTI0OTgsOCArMjM1MCw4IEBAIHN0YXRp YyB2b2lkIHBhZ2VfZmxpcF9mb3JfcGFyYW1zKHN0cnVjdCBtb2Rlc2V0X3BhcmFtcyAqcGFyYW1z LAogCiAJc3dpdGNoICh0eXBlKSB7CiAJY2FzZSBGTElQX1BBR0VGTElQOgotCQlyYyA9IGRybU1v ZGVQYWdlRmxpcChkcm0uZmQsIHBhcmFtcy0+Y3J0Y19pZCwKLQkJCQkgICAgIHBhcmFtcy0+ZmIu ZmItPmZiX2lkLAorCQlyYyA9IGRybU1vZGVQYWdlRmxpcChkcm0uZmQsIGRybS5kaXNwbGF5LnBp cGVzW3BhcmFtcy0+cGlwZV0uY3J0Y19pZCwKKwkJCQkgICAgIHBhcmFtcy0+cHJpbWFyeS5mYi0+ ZmJfaWQsCiAJCQkJICAgICBEUk1fTU9ERV9QQUdFX0ZMSVBfRVZFTlQsIE5VTEwpOwogCQlpZ3Rf YXNzZXJ0X2VxKHJjLCAwKTsKIAkJd2FpdF9mbGlwX2V2ZW50KCk7CkBAIC0yNTU0LDE3ICsyNDA2 LDE3IEBAIHN0YXRpYyB2b2lkIGZsaXBfc3VidGVzdChjb25zdCBzdHJ1Y3QgdGVzdF9tb2RlICp0 KQogCiAJcHJlcGFyZV9zdWJ0ZXN0KHQsIHBhdHRlcm4pOwogCi0JY3JlYXRlX2ZiKHQtPmZvcm1h dCwgcGFyYW1zLT5mYi5mYi0+d2lkdGgsIHBhcmFtcy0+ZmIuZmItPmhlaWdodCwKKwljcmVhdGVf ZmIodC0+Zm9ybWF0LCBwYXJhbXMtPnByaW1hcnkuZmItPndpZHRoLCBwYXJhbXMtPnByaW1hcnku ZmItPmhlaWdodCwKIAkJICBvcHQudGlsaW5nLCB0LT5wbGFuZSwgJmZiMik7CiAJZmlsbF9mYigm ZmIyLCBiZ19jb2xvcik7Ci0Jb3JpZ19mYiA9IHBhcmFtcy0+ZmIuZmI7CisJb3JpZ19mYiA9IHBh cmFtcy0+cHJpbWFyeS5mYjsKIAogCWZvciAociA9IDA7IHIgPCBwYXR0ZXJuLT5uX3JlY3RzOyBy KyspIHsKLQkJcGFyYW1zLT5mYi5mYiA9IChyICUgMiA9PSAwKSA/ICZmYjIgOiBvcmlnX2ZiOwor CQlwYXJhbXMtPnByaW1hcnkuZmIgPSAociAlIDIgPT0gMCkgPyAmZmIyIDogb3JpZ19mYjsKIAog CQlpZiAociAhPSAwKQotCQkJZHJhd19yZWN0KHBhdHRlcm4sICZwYXJhbXMtPmZiLCB0LT5tZXRo b2QsIHIgLSAxKTsKLQkJZHJhd19yZWN0KHBhdHRlcm4sICZwYXJhbXMtPmZiLCB0LT5tZXRob2Qs IHIpOworCQkJZHJhd19yZWN0KHBhdHRlcm4sICZwYXJhbXMtPnByaW1hcnksIHQtPm1ldGhvZCwg ciAtIDEpOworCQlkcmF3X3JlY3QocGF0dGVybiwgJnBhcmFtcy0+cHJpbWFyeSwgdC0+bWV0aG9k LCByKTsKIAkJdXBkYXRlX3dhbnRlZF9jcmModCwgJnBhdHRlcm4tPmNyY3NbdC0+Zm9ybWF0XVty XSk7CiAKIAkJcGFnZV9mbGlwX2Zvcl9wYXJhbXMocGFyYW1zLCB0LT5mbGlwKTsKQEAgLTI2MDAs MjEgKzI0NTIsMjEgQEAgc3RhdGljIHZvaWQgZmxpcHRyYWNrX3N1YnRlc3QoY29uc3Qgc3RydWN0 IHRlc3RfbW9kZSAqdCwgZW51bSBmbGlwX3R5cGUgdHlwZSkKIAogCXByZXBhcmVfc3VidGVzdCh0 LCBwYXR0ZXJuKTsKIAotCWNyZWF0ZV9mYih0LT5mb3JtYXQsIHBhcmFtcy0+ZmIuZmItPndpZHRo LCBwYXJhbXMtPmZiLmZiLT5oZWlnaHQsCisJY3JlYXRlX2ZiKHQtPmZvcm1hdCwgcGFyYW1zLT5w cmltYXJ5LmZiLT53aWR0aCwgcGFyYW1zLT5wcmltYXJ5LmZiLT5oZWlnaHQsCiAJCSAgb3B0LnRp bGluZywgdC0+cGxhbmUsICZmYjIpOwogCWZpbGxfZmIoJmZiMiwgQ09MT1JfUFJJTV9CRyk7Ci0J b3JpZ19mYiA9IHBhcmFtcy0+ZmIuZmI7CisJb3JpZ19mYiA9IHBhcmFtcy0+cHJpbWFyeS5mYjsK IAogCWZvciAociA9IDA7IHIgPCBwYXR0ZXJuLT5uX3JlY3RzOyByKyspIHsKLQkJcGFyYW1zLT5m Yi5mYiA9IChyICUgMiA9PSAwKSA/ICZmYjIgOiBvcmlnX2ZiOworCQlwYXJhbXMtPnByaW1hcnku ZmIgPSAociAlIDIgPT0gMCkgPyAmZmIyIDogb3JpZ19mYjsKIAogCQlpZiAociAhPSAwKQotCQkJ ZHJhd19yZWN0KHBhdHRlcm4sICZwYXJhbXMtPmZiLCB0LT5tZXRob2QsIHIgLSAxKTsKKwkJCWRy YXdfcmVjdChwYXR0ZXJuLCAmcGFyYW1zLT5wcmltYXJ5LCB0LT5tZXRob2QsIHIgLSAxKTsKIAog CQlwYWdlX2ZsaXBfZm9yX3BhcmFtcyhwYXJhbXMsIHR5cGUpOwogCQlkb19hc3NlcnRpb25zKDAp OwogCi0JCWRyYXdfcmVjdChwYXR0ZXJuLCAmcGFyYW1zLT5mYiwgdC0+bWV0aG9kLCByKTsKKwkJ ZHJhd19yZWN0KHBhdHRlcm4sICZwYXJhbXMtPnByaW1hcnksIHQtPm1ldGhvZCwgcik7CiAJCXVw ZGF0ZV93YW50ZWRfY3JjKHQsICZwYXR0ZXJuLT5jcmNzW3QtPmZvcm1hdF1bcl0pOwogCiAJCWRv X2Fzc2VydGlvbnMoQVNTRVJUX1BTUl9ESVNBQkxFRCk7CkBAIC0yNjM5LDQxICsyNDkxLDMwIEBA IHN0YXRpYyB2b2lkIGZsaXB0cmFja19zdWJ0ZXN0KGNvbnN0IHN0cnVjdCB0ZXN0X21vZGUgKnQs IGVudW0gZmxpcF90eXBlIHR5cGUpCiAgKi8KIHN0YXRpYyB2b2lkIG1vdmVfc3VidGVzdChjb25z dCBzdHJ1Y3QgdGVzdF9tb2RlICp0KQogewotCWludCByLCByYzsKKwlpbnQgcjsKIAlpbnQgYXNz ZXJ0aW9ucyA9IEFTU0VSVF9OT19BQ1RJT05fQ0hBTkdFOwogCXN0cnVjdCBtb2Rlc2V0X3BhcmFt cyAqcGFyYW1zID0gcGlja19wYXJhbXModCk7CiAJc3RydWN0IGRyYXdfcGF0dGVybl9pbmZvICpw YXR0ZXJuID0gJnBhdHRlcm4zOworCXN0cnVjdCBmYl9yZWdpb24gKnJlZyA9IHBpY2tfdGFyZ2V0 KHQsIHBhcmFtcyk7CiAJYm9vbCByZXBlYXQgPSBmYWxzZTsKIAogCXByZXBhcmVfc3VidGVzdCh0 LCBwYXR0ZXJuKTsKIAogCS8qIEp1c3QgcGFpbnQgdGhlIHJpZ2h0IGNvbG9yIHNpbmNlIHdlIHN0 YXJ0IGF0IDB4MC4gKi8KLQlkcmF3X3JlY3QocGF0dGVybiwgcGlja190YXJnZXQodCwgcGFyYW1z KSwgdC0+bWV0aG9kLCAwKTsKKwlkcmF3X3JlY3QocGF0dGVybiwgcmVnLCB0LT5tZXRob2QsIDAp OwogCXVwZGF0ZV93YW50ZWRfY3JjKHQsICZwYXR0ZXJuLT5jcmNzW3QtPmZvcm1hdF1bMF0pOwog CiAJZG9fYXNzZXJ0aW9ucyhhc3NlcnRpb25zKTsKIAogCWZvciAociA9IDE7IHIgPCBwYXR0ZXJu LT5uX3JlY3RzOyByKyspIHsKLQkJc3RydWN0IHJlY3QgcmVjdCA9IHBhdHRlcm4tPmdldF9yZWN0 KCZwYXJhbXMtPmZiLCByKTsKLQotCQlzd2l0Y2ggKHQtPnBsYW5lKSB7Ci0JCWNhc2UgUExBTkVf Q1VSOgotCQkJcmMgPSBkcm1Nb2RlTW92ZUN1cnNvcihkcm0uZmQsIHBhcmFtcy0+Y3J0Y19pZCwg cmVjdC54LAotCQkJCQkgICAgICAgcmVjdC55KTsKLQkJCWlndF9hc3NlcnRfZXEocmMsIDApOwot CQkJYnJlYWs7Ci0JCWNhc2UgUExBTkVfU1BSOgotCQkJcmMgPSBkcm1Nb2RlU2V0UGxhbmUoZHJt LmZkLCBwYXJhbXMtPnNwcml0ZV9pZCwKLQkJCQkJICAgICBwYXJhbXMtPmNydGNfaWQsCi0JCQkJ CSAgICAgcGFyYW1zLT5zcHJpdGUuZmItPmZiX2lkLCAwLAotCQkJCQkgICAgIHJlY3QueCwgcmVj dC55LCByZWN0LncsCi0JCQkJCSAgICAgcmVjdC5oLCAwLCAwLCByZWN0LncgPDwgMTYsCi0JCQkJ CSAgICAgcmVjdC5oIDw8IDE2KTsKLQkJCWlndF9hc3NlcnRfZXEocmMsIDApOwotCQkJYnJlYWs7 Ci0JCWRlZmF1bHQ6Ci0JCQlpZ3RfYXNzZXJ0KGZhbHNlKTsKLQkJfQorCQlzdHJ1Y3QgcmVjdCBy ZWN0ID0gcGF0dGVybi0+Z2V0X3JlY3QoJnBhcmFtcy0+cHJpbWFyeSwgcik7CisKKwkJaWd0X3Bs YW5lX3NldF9mYihyZWctPnBsYW5lLCByZWctPmZiKTsKKwkJaWd0X3BsYW5lX3NldF9wb3NpdGlv bihyZWctPnBsYW5lLCByZWN0LngsIHJlY3QueSk7CisJCWlndF9wbGFuZV9zZXRfc2l6ZShyZWct PnBsYW5lLCByZWN0LncsIHJlY3QuaCk7CisJCWlndF9mYl9zZXRfc2l6ZShyZWctPmZiLCByZWct PnBsYW5lLCByZWN0LncsIHJlY3QuaCk7CisJCWlndF9kaXNwbGF5X2NvbW1pdDIoJmRybS5kaXNw bGF5LCBDT01NSVRfVU5JVkVSU0FMKTsKKwogCQl1cGRhdGVfd2FudGVkX2NyYyh0LCAmcGF0dGVy bi0+Y3Jjc1t0LT5mb3JtYXRdW3JdKTsKIAogCQlkb19hc3NlcnRpb25zKGFzc2VydGlvbnMpOwpA QCAtMjcwMyw3ICsyNTQ0LDcgQEAgc3RhdGljIHZvaWQgbW92ZV9zdWJ0ZXN0KGNvbnN0IHN0cnVj dCB0ZXN0X21vZGUgKnQpCiAgKi8KIHN0YXRpYyB2b2lkIG9ub2ZmX3N1YnRlc3QoY29uc3Qgc3Ry dWN0IHRlc3RfbW9kZSAqdCkKIHsKLQlpbnQgciwgcmM7CisJaW50IHI7CiAJaW50IGFzc2VydGlv bnMgPSBBU1NFUlRfTk9fQUNUSU9OX0NIQU5HRTsKIAlzdHJ1Y3QgbW9kZXNldF9wYXJhbXMgKnBh cmFtcyA9IHBpY2tfcGFyYW1zKHQpOwogCXN0cnVjdCBkcmF3X3BhdHRlcm5faW5mbyAqcGF0dGVy biA9ICZwYXR0ZXJuMzsKQEAgLTI3MTYsNDkgKzI1NTcsMjEgQEAgc3RhdGljIHZvaWQgb25vZmZf c3VidGVzdChjb25zdCBzdHJ1Y3QgdGVzdF9tb2RlICp0KQogCWRvX2Fzc2VydGlvbnMoYXNzZXJ0 aW9ucyk7CiAKIAlmb3IgKHIgPSAwOyByIDwgNDsgcisrKSB7CisJCXN0cnVjdCBmYl9yZWdpb24g KnJlZyA9IHBpY2tfdGFyZ2V0KHQsIHBhcmFtcyk7CisKIAkJaWYgKHIgJSAyID09IDApIHsKLQkJ CXN3aXRjaCAodC0+cGxhbmUpIHsKLQkJCWNhc2UgUExBTkVfQ1VSOgotCQkJCXJjID0gZHJtTW9k ZVNldEN1cnNvcihkcm0uZmQsIHBhcmFtcy0+Y3J0Y19pZCwKLQkJCQkJCSAgICAgIDAsIDAsIDAp OwotCQkJCWlndF9hc3NlcnRfZXEocmMsIDApOwotCQkJCWJyZWFrOwotCQkJY2FzZSBQTEFORV9T UFI6Ci0JCQkJcmMgPSBkcm1Nb2RlU2V0UGxhbmUoZHJtLmZkLCBwYXJhbXMtPnNwcml0ZV9pZCwK LQkJCQkJCSAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKLQkJCQkJCSAgICAgMCwgMCk7 Ci0JCQkJaWd0X2Fzc2VydF9lcShyYywgMCk7Ci0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJ CWlndF9hc3NlcnQoZmFsc2UpOwotCQkJfQorCQkJaWd0X3BsYW5lX3NldF9mYihyZWctPnBsYW5l LCBOVUxMKTsKKwkJCWlndF9kaXNwbGF5X2NvbW1pdCgmZHJtLmRpc3BsYXkpOworCiAJCQl1cGRh dGVfd2FudGVkX2NyYyh0LCAmYmx1ZV9jcmNzW3QtPmZvcm1hdF0uY3JjKTsKIAogCQl9IGVsc2Ug ewotCQkJc3dpdGNoICh0LT5wbGFuZSkgewotCQkJY2FzZSBQTEFORV9DVVI6Ci0JCQkJcmMgPSBk cm1Nb2RlU2V0Q3Vyc29yKGRybS5mZCwgcGFyYW1zLT5jcnRjX2lkLAotCQkJCQkJICBwYXJhbXMt PmN1cnNvci5mYi0+Z2VtX2hhbmRsZSwKLQkJCQkJCSAgcGFyYW1zLT5jdXJzb3IudywKLQkJCQkJ CSAgcGFyYW1zLT5jdXJzb3IuaCk7Ci0JCQkJaWd0X2Fzc2VydF9lcShyYywgMCk7Ci0JCQkJYnJl YWs7Ci0JCQljYXNlIFBMQU5FX1NQUjoKLQkJCQlyYyA9IGRybU1vZGVTZXRQbGFuZShkcm0uZmQs IHBhcmFtcy0+c3ByaXRlX2lkLAotCQkJCQkJICAgICBwYXJhbXMtPmNydGNfaWQsCi0JCQkJCQkg ICAgIHBhcmFtcy0+c3ByaXRlLmZiLT5mYl9pZCwKLQkJCQkJCSAgICAgMCwgMCwgMCwgcGFyYW1z LT5zcHJpdGUudywKLQkJCQkJCSAgICAgcGFyYW1zLT5zcHJpdGUuaCwgMCwKLQkJCQkJCSAgICAg MCwKLQkJCQkJCSAgICAgcGFyYW1zLT5zcHJpdGUudyA8PCAxNiwKLQkJCQkJCSAgICAgcGFyYW1z LT5zcHJpdGUuaCA8PCAxNik7Ci0JCQkJaWd0X2Fzc2VydF9lcShyYywgMCk7Ci0JCQkJYnJlYWs7 Ci0JCQlkZWZhdWx0OgotCQkJCWlndF9hc3NlcnQoZmFsc2UpOwotCQkJfQotCQkJdXBkYXRlX3dh bnRlZF9jcmModCwgJnBhdHRlcm4tPmNyY3NbdC0+Zm9ybWF0XVswXSk7CisJCQlpZ3RfcGxhbmVf c2V0X2ZiKHJlZy0+cGxhbmUsIHJlZy0+ZmIpOworCQkJaWd0X3BsYW5lX3NldF9zaXplKHJlZy0+ cGxhbmUsIHJlZy0+dywgcmVnLT5oKTsKKwkJCWlndF9mYl9zZXRfc2l6ZShyZWctPmZiLCByZWct PnBsYW5lLCByZWctPncsIHJlZy0+aCk7CisJCQlpZ3RfZGlzcGxheV9jb21taXQoJmRybS5kaXNw bGF5KTsKIAorCQkJdXBkYXRlX3dhbnRlZF9jcmModCwgJnBhdHRlcm4tPmNyY3NbdC0+Zm9ybWF0 XVswXSk7CiAJCX0KIAogCQlkb19hc3NlcnRpb25zKGFzc2VydGlvbnMpOwpAQCAtMjc2NywyNCAr MjU4MCwxMSBAQCBzdGF0aWMgdm9pZCBvbm9mZl9zdWJ0ZXN0KGNvbnN0IHN0cnVjdCB0ZXN0X21v ZGUgKnQpCiAKIHN0YXRpYyBib29sIHByaW1fcGxhbmVfZGlzYWJsZWQodm9pZCkKIHsKLQlpbnQg aSwgcmM7Ci0JYm9vbCBkaXNhYmxlZCwgZm91bmQgPSBmYWxzZTsKLQlpbnQgY3J0Y19pZHggPSBr bXN0ZXN0X2dldF9jcnRjX2lkeChkcm0ucmVzLCBwcmltX21vZGVfcGFyYW1zLmNydGNfaWQpOwot Ci0JZm9yIChpID0gMDsgaSA8IGRybS5wbGFuZV9yZXMtPmNvdW50X3BsYW5lczsgaSsrKSB7Ci0J CWlmICgoZHJtLnBsYW5lc1tpXS0+cG9zc2libGVfY3J0Y3MgJiAoMSA8PCBjcnRjX2lkeCkpICYm Ci0JCSAgICBkcm0ucGxhbmVfdHlwZXNbaV0gPT0gRFJNX1BMQU5FX1RZUEVfUFJJTUFSWSkgewot CQkJZm91bmQgPSB0cnVlOwotCQkJZGlzYWJsZWQgPSAoZHJtLnBsYW5lc1tpXS0+Y3J0Y19pZCA9 PSAwKTsKLQkJfQotCX0KLQotCWlndF9hc3NlcnQoZm91bmQpOwotCi0JcmMgPSBkcm1TZXRDbGll bnRDYXAoZHJtLmZkLCBEUk1fQ0xJRU5UX0NBUF9VTklWRVJTQUxfUExBTkVTLCAwKTsKLQlpZ3Rf YXNzZXJ0X2VxKHJjLCAwKTsKLQotCXJldHVybiBkaXNhYmxlZDsKKwkvKgorCSAqIENhbm5vdCB1 c2UgaWd0X3BsYW5lX2dldF9wcm9wIGhlcmUgdG8gcmV0cmlldmUgZmJfaWQsCisJICogdGhlIHRl c3RzdWl0ZSBkb2Vzbid0IHJlcXVpcmUgQVRPTUlDLgorCSAqLworCXJldHVybiAhcHJpbV9tb2Rl X3BhcmFtcy5wcmltYXJ5LnBsYW5lLT52YWx1ZXNbSUdUX1BMQU5FX0ZCX0lEXTsKIH0KIAogLyoK QEAgLTI4MDcsMTEgKzI2MDcsMTAgQEAgc3RhdGljIHZvaWQgZnVsbHNjcmVlbl9wbGFuZV9zdWJ0 ZXN0KGNvbnN0IHN0cnVjdCB0ZXN0X21vZGUgKnQpCiAJc3RydWN0IHJlY3QgcmVjdDsKIAlzdHJ1 Y3QgbW9kZXNldF9wYXJhbXMgKnBhcmFtcyA9IHBpY2tfcGFyYW1zKHQpOwogCWludCBhc3NlcnRp b25zOwotCWludCByYzsKIAogCXByZXBhcmVfc3VidGVzdCh0LCBwYXR0ZXJuKTsKIAotCXJlY3Qg PSBwYXR0ZXJuLT5nZXRfcmVjdCgmcGFyYW1zLT5mYiwgMCk7CisJcmVjdCA9IHBhdHRlcm4tPmdl dF9yZWN0KCZwYXJhbXMtPnByaW1hcnksIDApOwogCWNyZWF0ZV9mYih0LT5mb3JtYXQsIHJlY3Qu dywgcmVjdC5oLCBvcHQudGlsaW5nLCB0LT5wbGFuZSwKIAkJICAmZnVsbHNjcmVlbl9mYik7CiAJ LyogQ2FsbCBwaWNrX2NvbG9yKCkgYWdhaW4gc2luY2UgUFJJIGFuZCBTUFIgbWF5IG5vdCBzdXBw b3J0IHRoZSBzYW1lCkBAIC0yODE5LDEyICsyNjE4LDggQEAgc3RhdGljIHZvaWQgZnVsbHNjcmVl bl9wbGFuZV9zdWJ0ZXN0KGNvbnN0IHN0cnVjdCB0ZXN0X21vZGUgKnQpCiAJcmVjdC5jb2xvciA9 IHBpY2tfY29sb3IoJmZ1bGxzY3JlZW5fZmIsIENPTE9SX0dSRUVOKTsKIAlpZ3RfZHJhd19maWxs X2ZiKGRybS5mZCwgJmZ1bGxzY3JlZW5fZmIsIHJlY3QuY29sb3IpOwogCi0JcmMgPSBkcm1Nb2Rl U2V0UGxhbmUoZHJtLmZkLCBwYXJhbXMtPnNwcml0ZV9pZCwgcGFyYW1zLT5jcnRjX2lkLAotCQkJ ICAgICBmdWxsc2NyZWVuX2ZiLmZiX2lkLCAwLCAwLCAwLCBmdWxsc2NyZWVuX2ZiLndpZHRoLAot CQkJICAgICBmdWxsc2NyZWVuX2ZiLmhlaWdodCwgMCwgMCwKLQkJCSAgICAgZnVsbHNjcmVlbl9m Yi53aWR0aCA8PCAxNiwKLQkJCSAgICAgZnVsbHNjcmVlbl9mYi5oZWlnaHQgPDwgMTYpOwotCWln dF9hc3NlcnRfZXEocmMsIDApOworCWlndF9wbGFuZV9zZXRfZmIocGFyYW1zLT5zcHJpdGUucGxh bmUsICZmdWxsc2NyZWVuX2ZiKTsKKwlpZ3RfZGlzcGxheV9jb21taXQoJmRybS5kaXNwbGF5KTsK IAl1cGRhdGVfd2FudGVkX2NyYyh0LCAmcGF0dGVybi0+Y3Jjc1t0LT5mb3JtYXRdWzBdKTsKIAog CXN3aXRjaCAodC0+c2NyZWVuKSB7CkBAIC0yODQyLDkgKzI2MzcsOCBAQCBzdGF0aWMgdm9pZCBm dWxsc2NyZWVuX3BsYW5lX3N1YnRlc3QoY29uc3Qgc3RydWN0IHRlc3RfbW9kZSAqdCkKIAl9CiAJ ZG9fYXNzZXJ0aW9ucyhhc3NlcnRpb25zKTsKIAotCXJjID0gZHJtTW9kZVNldFBsYW5lKGRybS5m ZCwgcGFyYW1zLT5zcHJpdGVfaWQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCi0JCQkgICAgIDAs IDAsIDApOwotCWlndF9hc3NlcnRfZXEocmMsIDApOworCWlndF9wbGFuZV9zZXRfZmIocGFyYW1z LT5zcHJpdGUucGxhbmUsIE5VTEwpOworCWlndF9kaXNwbGF5X2NvbW1pdCgmZHJtLmRpc3BsYXkp OwogCiAJaWYgKHQtPnNjcmVlbiA9PSBTQ1JFRU5fUFJJTSkKIAkJYXNzZXJ0aW9ucyA9IEFTU0VS VF9MQVNUX0FDVElPTl9DSEFOR0VEOwpAQCAtMjg3OCw5OCArMjY3Miw2OSBAQCBzdGF0aWMgdm9p ZCBzY2FsZWRwcmltYXJ5X3N1YnRlc3QoY29uc3Qgc3RydWN0IHRlc3RfbW9kZSAqdCkKIHsKIAlz dHJ1Y3QgaWd0X2ZiIG5ld19mYiwgKm9sZF9mYjsKIAlzdHJ1Y3QgbW9kZXNldF9wYXJhbXMgKnBh cmFtcyA9IHBpY2tfcGFyYW1zKHQpOwotCWludCBpLCByYzsKLQl1aW50MzJfdCBwbGFuZV9pZDsK LQlpbnQgcHJpbV9jcnRjX2lkeCA9IGttc3Rlc3RfZ2V0X2NydGNfaWR4KGRybS5yZXMsCi0JCQkJ CQkgcHJpbV9tb2RlX3BhcmFtcy5jcnRjX2lkKTsKKwlzdHJ1Y3QgZmJfcmVnaW9uICpyZWcgPSAm cGFyYW1zLT5wcmltYXJ5OwogCiAJaWd0X3JlcXVpcmVfZihpbnRlbF9nZW4oaW50ZWxfZ2V0X2Ry bV9kZXZpZChkcm0uZmQpKSA+PSA5LAogCQkgICAgICAiQ2FuJ3QgdGVzdCBwcmltYXJ5IHBsYW5l IHNjYWxpbmcgYmVmb3JlIGdlbiA5XG4iKTsKIAogCXByZXBhcmVfc3VidGVzdCh0LCBOVUxMKTsK IAotCW9sZF9mYiA9IHBhcmFtcy0+ZmIuZmI7CisJb2xkX2ZiID0gcmVnLT5mYjsKIAotCWNyZWF0 ZV9mYih0LT5mb3JtYXQsIHBhcmFtcy0+ZmIuZmItPndpZHRoLCBwYXJhbXMtPmZiLmZiLT5oZWln aHQsCisJY3JlYXRlX2ZiKHQtPmZvcm1hdCwgcmVnLT5mYi0+d2lkdGgsIHJlZy0+ZmItPmhlaWdo dCwKIAkJICBvcHQudGlsaW5nLCB0LT5wbGFuZSwgJm5ld19mYik7CiAJZmlsbF9mYigmbmV3X2Zi LCBDT0xPUl9CTFVFKTsKIAogCWlndF9kcmF3X3JlY3RfZmIoZHJtLmZkLCBkcm0uYnVmbWdyLCBO VUxMLCAmbmV3X2ZiLCB0LT5tZXRob2QsCi0JCQkgcGFyYW1zLT5mYi54LCBwYXJhbXMtPmZiLnks Ci0JCQkgcGFyYW1zLT5mYi53IC8gMiwgcGFyYW1zLT5mYi5oIC8gMiwKKwkJCSByZWctPngsIHJl Zy0+eSwgcmVnLT53IC8gMiwgcmVnLT5oIC8gMiwKIAkJCSBwaWNrX2NvbG9yKCZuZXdfZmIsIENP TE9SX0dSRUVOKSk7CiAJaWd0X2RyYXdfcmVjdF9mYihkcm0uZmQsIGRybS5idWZtZ3IsIE5VTEws ICZuZXdfZmIsIHQtPm1ldGhvZCwKLQkJCSBwYXJhbXMtPmZiLnggKyBwYXJhbXMtPmZiLncgLyAy LAotCQkJIHBhcmFtcy0+ZmIueSArIHBhcmFtcy0+ZmIuaCAvIDIsCi0JCQkgcGFyYW1zLT5mYi53 IC8gMiwgcGFyYW1zLT5mYi5oIC8gMiwKKwkJCSByZWctPnggKyByZWctPncgLyAyLCByZWctPnkg KyByZWctPmggLyAyLAorCQkJIHJlZy0+dyAvIDIsIHJlZy0+aCAvIDIsCiAJCQkgcGlja19jb2xv cigmbmV3X2ZiLCBDT0xPUl9SRUQpKTsKIAlpZ3RfZHJhd19yZWN0X2ZiKGRybS5mZCwgZHJtLmJ1 Zm1nciwgTlVMTCwgJm5ld19mYiwgdC0+bWV0aG9kLAotCQkJIHBhcmFtcy0+ZmIueCArIHBhcmFt cy0+ZmIudyAvIDIsCi0JCQkgcGFyYW1zLT5mYi55ICsgcGFyYW1zLT5mYi5oIC8gMiwKLQkJCSBw YXJhbXMtPmZiLncgLyA0LCBwYXJhbXMtPmZiLmggLyA0LAorCQkJIHJlZy0+eCArIHJlZy0+dyAv IDIsIHJlZy0+eSArIHJlZy0+aCAvIDIsCisJCQkgcmVnLT53IC8gNCwgcmVnLT5oIC8gNCwKIAkJ CSBwaWNrX2NvbG9yKCZuZXdfZmIsIENPTE9SX01BR0VOVEEpKTsKIAotCWZvciAoaSA9IDA7IGkg PCBkcm0ucGxhbmVfcmVzLT5jb3VudF9wbGFuZXM7IGkrKykKLQkJaWYgKChkcm0ucGxhbmVzW2ld LT5wb3NzaWJsZV9jcnRjcyAmICgxIDw8IHByaW1fY3J0Y19pZHgpKSAmJgotCQkgICAgZHJtLnBs YW5lX3R5cGVzW2ldID09IERSTV9QTEFORV9UWVBFX1BSSU1BUlkpCi0JCQlwbGFuZV9pZCA9IGRy bS5wbGFuZXNbaV0tPnBsYW5lX2lkOwotCiAJLyogTm8gc2NhbGluZy4gKi8KLQlyYyA9IGRybU1v ZGVTZXRQbGFuZShkcm0uZmQsIHBsYW5lX2lkLCBwYXJhbXMtPmNydGNfaWQsCi0JCQkgICAgIG5l d19mYi5mYl9pZCwgMCwKLQkJCSAgICAgMCwgMCwKLQkJCSAgICAgcGFyYW1zLT5tb2RlLT5oZGlz cGxheSwgcGFyYW1zLT5tb2RlLT52ZGlzcGxheSwKLQkJCSAgICAgcGFyYW1zLT5mYi54IDw8IDE2 LCBwYXJhbXMtPmZiLnkgPDwgMTYsCi0JCQkgICAgIHBhcmFtcy0+ZmIudyA8PCAxNiwgcGFyYW1z LT5mYi5oIDw8IDE2KTsKLQlpZ3RfYXNzZXJ0KHJjID09IDApOworCWlndF9wbGFuZV9zZXRfZmIo cmVnLT5wbGFuZSwgJm5ld19mYik7CisJaWd0X2ZiX3NldF9wb3NpdGlvbigmbmV3X2ZiLCByZWct PnBsYW5lLCByZWctPngsIHJlZy0+eSk7CisJaWd0X2ZiX3NldF9zaXplKCZuZXdfZmIsIHJlZy0+ cGxhbmUsIHJlZy0+dywgcmVnLT5oKTsKKwlpZ3RfcGxhbmVfc2V0X3NpemUocmVnLT5wbGFuZSwg cGFyYW1zLT5tb2RlLT5oZGlzcGxheSwgcGFyYW1zLT5tb2RlLT52ZGlzcGxheSk7CisJaWd0X2Rp c3BsYXlfY29tbWl0MigmZHJtLmRpc3BsYXksIENPTU1JVF9VTklWRVJTQUwpOwogCWRvX2Fzc2Vy dGlvbnMoRE9OVF9BU1NFUlRfQ1JDKTsKIAogCS8qIFNvdXJjZSB1cHNjYWxpbmcuICovCi0JcmMg PSBkcm1Nb2RlU2V0UGxhbmUoZHJtLmZkLCBwbGFuZV9pZCwgcGFyYW1zLT5jcnRjX2lkLAotCQkJ ICAgICBuZXdfZmIuZmJfaWQsIDAsCi0JCQkgICAgIDAsIDAsCi0JCQkgICAgIHBhcmFtcy0+bW9k ZS0+aGRpc3BsYXksIHBhcmFtcy0+bW9kZS0+dmRpc3BsYXksCi0JCQkgICAgIHBhcmFtcy0+ZmIu eCA8PCAxNiwgcGFyYW1zLT5mYi55IDw8IDE2LAotCQkJICAgICAocGFyYW1zLT5mYi53IC8gMikg PDwgMTYsCi0JCQkgICAgIChwYXJhbXMtPmZiLmggLyAyKSA8PCAxNik7Ci0JaWd0X2Fzc2VydChy YyA9PSAwKTsKKwlpZ3RfZmJfc2V0X3NpemUoJm5ld19mYiwgcmVnLT5wbGFuZSwgcmVnLT53IC8g MiwgcmVnLT5oIC8gMik7CisJaWd0X2Rpc3BsYXlfY29tbWl0MigmZHJtLmRpc3BsYXksIENPTU1J VF9VTklWRVJTQUwpOwogCWRvX2Fzc2VydGlvbnMoRE9OVF9BU1NFUlRfQ1JDKTsKIAogCS8qIERl c3RpbmF0aW9uIGRvZXNuJ3QgZmlsbCB0aGUgZW50aXJlIENSVEMsIG5vIHNjYWxpbmcuICovCi0J cmMgPSBkcm1Nb2RlU2V0UGxhbmUoZHJtLmZkLCBwbGFuZV9pZCwgcGFyYW1zLT5jcnRjX2lkLAot CQkJICAgICBuZXdfZmIuZmJfaWQsIDAsCi0JCQkgICAgIHBhcmFtcy0+bW9kZS0+aGRpc3BsYXkg LyA0LAotCQkJICAgICBwYXJhbXMtPm1vZGUtPnZkaXNwbGF5IC8gNCwKLQkJCSAgICAgcGFyYW1z LT5tb2RlLT5oZGlzcGxheSAvIDIsCi0JCQkgICAgIHBhcmFtcy0+bW9kZS0+dmRpc3BsYXkgLyAy LAotCQkJICAgICBwYXJhbXMtPmZiLnggPDwgMTYsIHBhcmFtcy0+ZmIueSA8PCAxNiwKLQkJCSAg ICAgKHBhcmFtcy0+ZmIudyAvIDIpIDw8IDE2LAotCQkJICAgICAocGFyYW1zLT5mYi5oIC8gMikg PDwgMTYpOwotCWlndF9hc3NlcnQocmMgPT0gMCk7CisJaWd0X2ZiX3NldF9zaXplKCZuZXdfZmIs IHJlZy0+cGxhbmUsIHJlZy0+dyAvIDIsIHJlZy0+aCAvIDIpOworCWlndF9wbGFuZV9zZXRfcG9z aXRpb24ocmVnLT5wbGFuZSwKKwkJCSAgICAgICBwYXJhbXMtPm1vZGUtPmhkaXNwbGF5IC8gNCwK KwkJCSAgICAgICBwYXJhbXMtPm1vZGUtPnZkaXNwbGF5IC8gNCk7CisJaWd0X3BsYW5lX3NldF9z aXplKHJlZy0+cGxhbmUsCisJCQkgICBwYXJhbXMtPm1vZGUtPmhkaXNwbGF5IC8gMiwKKwkJCSAg IHBhcmFtcy0+bW9kZS0+dmRpc3BsYXkgLyAyKTsKKwlpZ3RfZGlzcGxheV9jb21taXQyKCZkcm0u ZGlzcGxheSwgQ09NTUlUX1VOSVZFUlNBTCk7CiAJZG9fYXNzZXJ0aW9ucyhET05UX0FTU0VSVF9D UkMpOwogCiAJLyogRGVzdGluYXRpb24gZG9lc24ndCBmaWxsIHRoZSBlbnRpcmUgQ1JUQywgdXBz Y2FsaW5nLiAqLwotCXJjID0gZHJtTW9kZVNldFBsYW5lKGRybS5mZCwgcGxhbmVfaWQsIHBhcmFt cy0+Y3J0Y19pZCwKLQkJCSAgICAgbmV3X2ZiLmZiX2lkLCAwLAotCQkJICAgICBwYXJhbXMtPm1v ZGUtPmhkaXNwbGF5IC8gNCwKLQkJCSAgICAgcGFyYW1zLT5tb2RlLT52ZGlzcGxheSAvIDQsCi0J CQkgICAgIHBhcmFtcy0+bW9kZS0+aGRpc3BsYXkgLyAyLAotCQkJICAgICBwYXJhbXMtPm1vZGUt PnZkaXNwbGF5IC8gMiwKLQkJCSAgICAgKHBhcmFtcy0+ZmIueCArIHBhcmFtcy0+ZmIudyAvIDIp IDw8IDE2LAotCQkJICAgICAocGFyYW1zLT5mYi55ICsgcGFyYW1zLT5mYi5oIC8gMikgPDwgMTYs Ci0JCQkgICAgIChwYXJhbXMtPmZiLncgLyA0KSA8PCAxNiwKLQkJCSAgICAgKHBhcmFtcy0+ZmIu aCAvIDQpIDw8IDE2KTsKLQlpZ3RfYXNzZXJ0KHJjID09IDApOworCWlndF9mYl9zZXRfcG9zaXRp b24oJm5ld19mYiwgcmVnLT5wbGFuZSwKKwkJCSAgICByZWctPnggKyByZWctPncgLyA0LCByZWct PnkgKyByZWctPmggLyA0KTsKKwlpZ3RfZmJfc2V0X3NpemUoJm5ld19mYiwgcmVnLT5wbGFuZSwg cmVnLT53IC8gMiwgcmVnLT5oIC8gMik7CisJaWd0X2Rpc3BsYXlfY29tbWl0MigmZHJtLmRpc3Bs YXksIENPTU1JVF9VTklWRVJTQUwpOwogCWRvX2Fzc2VydGlvbnMoRE9OVF9BU1NFUlRfQ1JDKTsK IAogCS8qIEJhY2sgdG8gdGhlIGdvb2QgYW5kIG9sZCBibHVlIGZiLiAqLwotCXJjID0gZHJtTW9k ZVNldFBsYW5lKGRybS5mZCwgcGxhbmVfaWQsIHBhcmFtcy0+Y3J0Y19pZCwKLQkJCSAgICAgb2xk X2ZiLT5mYl9pZCwgMCwKLQkJCSAgICAgMCwgMCwKLQkJCSAgICAgcGFyYW1zLT5tb2RlLT5oZGlz cGxheSwgcGFyYW1zLT5tb2RlLT52ZGlzcGxheSwKLQkJCSAgICAgcGFyYW1zLT5mYi54IDw8IDE2 LCBwYXJhbXMtPmZiLnkgPDwgMTYsCi0JCQkgICAgIHBhcmFtcy0+ZmIudyA8PCAxNiwgcGFyYW1z LT5mYi5oIDw8IDE2KTsKLQlpZ3RfYXNzZXJ0KHJjID09IDApOworCWlndF9wbGFuZV9zZXRfZmIo cmVnLT5wbGFuZSwgb2xkX2ZiKTsKKwlpZ3RfcGxhbmVfc2V0X3Bvc2l0aW9uKHBhcmFtcy0+cHJp bWFyeS5wbGFuZSwgMCwgMCk7CisJaWd0X3BsYW5lX3NldF9zaXplKHJlZy0+cGxhbmUsIHBhcmFt cy0+bW9kZS0+aGRpc3BsYXksIHBhcmFtcy0+bW9kZS0+dmRpc3BsYXkpOworCWlndF9mYl9zZXRf cG9zaXRpb24ocmVnLT5mYiwgcmVnLT5wbGFuZSwgcmVnLT54LCByZWctPnkpOworCWlndF9mYl9z ZXRfc2l6ZShyZWctPmZiLCByZWctPnBsYW5lLCByZWctPncsIHJlZy0+aCk7CisJaWd0X2Rpc3Bs YXlfY29tbWl0MigmZHJtLmRpc3BsYXksIENPTU1JVF9VTklWRVJTQUwpOwogCWRvX2Fzc2VydGlv bnMoMCk7CiAKIAlpZ3RfcmVtb3ZlX2ZiKGRybS5mZCwgJm5ld19mYik7CkBAIC0yOTk5LDE1ICsy NzY0LDE1IEBAIHN0YXRpYyB2b2lkIG1vZGVzZXRmcm9tYnVzeV9zdWJ0ZXN0KGNvbnN0IHN0cnVj dCB0ZXN0X21vZGUgKnQpCiAKIAlwcmVwYXJlX3N1YnRlc3QodCwgTlVMTCk7CiAKLQljcmVhdGVf ZmIodC0+Zm9ybWF0LCBwYXJhbXMtPmZiLmZiLT53aWR0aCwgcGFyYW1zLT5mYi5mYi0+aGVpZ2h0 LAorCWNyZWF0ZV9mYih0LT5mb3JtYXQsIHBhcmFtcy0+cHJpbWFyeS5mYi0+d2lkdGgsIHBhcmFt cy0+cHJpbWFyeS5mYi0+aGVpZ2h0LAogCQkgIG9wdC50aWxpbmcsIHQtPnBsYW5lLCAmZmIyKTsK IAlmaWxsX2ZiKCZmYjIsIENPTE9SX1BSSU1fQkcpOwogCi0Jc3RhcnRfYnVzeV90aHJlYWQocGFy YW1zLT5mYi5mYik7CisJc3RhcnRfYnVzeV90aHJlYWQocGFyYW1zLT5wcmltYXJ5LmZiKTsKIAl1 c2xlZXAoMTAwMDApOwogCiAJdW5zZXRfYWxsX2NydGNzKCk7Ci0JcGFyYW1zLT5mYi5mYiA9ICZm YjI7CisJcGFyYW1zLT5wcmltYXJ5LmZiID0gJmZiMjsKIAlzZXRfbW9kZV9mb3JfcGFyYW1zKHBh cmFtcyk7CiAKIAlkb19hc3NlcnRpb25zKDApOwpAQCAtMzEwOSw5ICsyODc0LDkgQEAgc3RhdGlj IHZvaWQgZmFyZnJvbWZlbmNlX3N1YnRlc3QoY29uc3Qgc3RydWN0IHRlc3RfbW9kZSAqdCkKIAog CWZpbGxfZmIoJnRhbGxfZmIsIENPTE9SX1BSSU1fQkcpOwogCi0JcGFyYW1zLT5mYi5mYiA9ICZ0 YWxsX2ZiOwotCXBhcmFtcy0+ZmIueCA9IDA7Ci0JcGFyYW1zLT5mYi55ID0gbWF4X2hlaWdodCAt IHBhcmFtcy0+bW9kZS0+dmRpc3BsYXk7CisJcGFyYW1zLT5wcmltYXJ5LmZiID0gJnRhbGxfZmI7 CisJcGFyYW1zLT5wcmltYXJ5LnggPSAwOworCXBhcmFtcy0+cHJpbWFyeS55ID0gbWF4X2hlaWdo dCAtIHBhcmFtcy0+bW9kZS0+dmRpc3BsYXk7CiAJc2V0X21vZGVfZm9yX3BhcmFtcyhwYXJhbXMp OwogCWRvX2Fzc2VydGlvbnMoYXNzZXJ0aW9ucyk7CiAKQEAgLTMxNzcsMzAgKzI5NDIsMzAgQEAg c3RhdGljIHZvaWQgYmFkc3RyaWRlX3N1YnRlc3QoY29uc3Qgc3RydWN0IHRlc3RfbW9kZSAqdCkK IAogCXByZXBhcmVfc3VidGVzdCh0LCBOVUxMKTsKIAotCW9sZF9mYiA9IHBhcmFtcy0+ZmIuZmI7 CisJb2xkX2ZiID0gcGFyYW1zLT5wcmltYXJ5LmZiOwogCi0JY3JlYXRlX2ZiKHQtPmZvcm1hdCwg cGFyYW1zLT5mYi5mYi0+d2lkdGggKyA0MDk2LCBwYXJhbXMtPmZiLmZiLT5oZWlnaHQsCisJY3Jl YXRlX2ZiKHQtPmZvcm1hdCwgcGFyYW1zLT5wcmltYXJ5LmZiLT53aWR0aCArIDQwOTYsIHBhcmFt cy0+cHJpbWFyeS5mYi0+aGVpZ2h0LAogCQkgIG9wdC50aWxpbmcsIHQtPnBsYW5lLCAmd2lkZV9m Yik7CiAJaWd0X2Fzc2VydCh3aWRlX2ZiLnN0cmlkZSA+IDE2Mzg0KTsKIAogCWZpbGxfZmIoJndp ZGVfZmIsIENPTE9SX1BSSU1fQkcpOwogCiAJLyogVHJ5IGEgc2ltcGxlIG1vZGVzZXQgd2l0aCB0 aGUgbmV3IGZiLiAqLwotCXBhcmFtcy0+ZmIuZmIgPSAmd2lkZV9mYjsKKwlwYXJhbXMtPnByaW1h cnkuZmIgPSAmd2lkZV9mYjsKIAlzZXRfbW9kZV9mb3JfcGFyYW1zKHBhcmFtcyk7CiAJZG9fYXNz ZXJ0aW9ucyhBU1NFUlRfRkJDX0RJU0FCTEVEKTsKIAogCS8qIEdvIGJhY2sgdG8gdGhlIG9sZCBm YiBzbyBGQkMgd29ya3MgYWdhaW4uICovCi0JcGFyYW1zLT5mYi5mYiA9IG9sZF9mYjsKKwlwYXJh bXMtPnByaW1hcnkuZmIgPSBvbGRfZmI7CiAJc2V0X21vZGVfZm9yX3BhcmFtcyhwYXJhbXMpOwog CWRvX2Fzc2VydGlvbnMoMCk7CiAKIAkvKiBXZSdyZSBkb2luZyB0aGUgZXF1aXZhbGVudCBvZiBh IG1vZGVzZXQsIGJ1dCB3aXRoIHRoZSBwbGFuZXMgQVBJLiAqLwotCXBhcmFtcy0+ZmIuZmIgPSAm d2lkZV9mYjsKKwlwYXJhbXMtPnByaW1hcnkuZmIgPSAmd2lkZV9mYjsKIAlzZXRfcHJpbV9wbGFu ZV9mb3JfcGFyYW1zKHBhcmFtcyk7CiAJZG9fYXNzZXJ0aW9ucyhBU1NFUlRfRkJDX0RJU0FCTEVE KTsKIAotCXBhcmFtcy0+ZmIuZmIgPSBvbGRfZmI7CisJcGFyYW1zLT5wcmltYXJ5LmZiID0gb2xk X2ZiOwogCXNldF9tb2RlX2Zvcl9wYXJhbXMocGFyYW1zKTsKIAlkb19hc3NlcnRpb25zKDApOwog CkBAIC0zMjA5LDcgKzI5NzQsNyBAQCBzdGF0aWMgdm9pZCBiYWRzdHJpZGVfc3VidGVzdChjb25z dCBzdHJ1Y3QgdGVzdF9tb2RlICp0KQogCSAqIHdpdGggYSBkaWZmZXJlbnQgc3RyaWRlLiBXaXRo IHRoZSBhdG9taWMgcGFnZSBmbGlwIGhlbHBlciB3ZSBjYW4sCiAJICogc28gYWxsb3cgcGFnZSBm bGlwIHRvIGZhaWwgYW5kIHN1Y2NlZWQuCiAJICovCi0JcmMgPSBkcm1Nb2RlUGFnZUZsaXAoZHJt LmZkLCBwYXJhbXMtPmNydGNfaWQsIHdpZGVfZmIuZmJfaWQsIDAsIE5VTEwpOworCXJjID0gZHJt TW9kZVBhZ2VGbGlwKGRybS5mZCwgZHJtLmRpc3BsYXkucGlwZXNbcGFyYW1zLT5waXBlXS5jcnRj X2lkLCB3aWRlX2ZiLmZiX2lkLCAwLCBOVUxMKTsKIAlpZ3RfYXNzZXJ0KHJjID09IC1FSU5WQUwg fHwgcmMgPT0gMCk7CiAJZG9fYXNzZXJ0aW9ucyhyYyA9PSAwID8gQVNTRVJUX0ZCQ19ESVNBQkxF RCA6IDApOwogCkBAIC0zMjQ0LDkgKzMwMDksOSBAQCBzdGF0aWMgdm9pZCBzdHJpZGVjaGFuZ2Vf c3VidGVzdChjb25zdCBzdHJ1Y3QgdGVzdF9tb2RlICp0KQogCiAJcHJlcGFyZV9zdWJ0ZXN0KHQs IE5VTEwpOwogCi0Jb2xkX2ZiID0gcGFyYW1zLT5mYi5mYjsKKwlvbGRfZmIgPSBwYXJhbXMtPnBy aW1hcnkuZmI7CiAKLQljcmVhdGVfZmIodC0+Zm9ybWF0LCBwYXJhbXMtPmZiLmZiLT53aWR0aCAr IDUxMiwgcGFyYW1zLT5mYi5mYi0+aGVpZ2h0LAorCWNyZWF0ZV9mYih0LT5mb3JtYXQsIHBhcmFt cy0+cHJpbWFyeS5mYi0+d2lkdGggKyA1MTIsIHBhcmFtcy0+cHJpbWFyeS5mYi0+aGVpZ2h0LAog CQkgIG9wdC50aWxpbmcsIHQtPnBsYW5lLCAmbmV3X2ZiKTsKIAlmaWxsX2ZiKCZuZXdfZmIsIENP TE9SX1BSSU1fQkcpOwogCkBAIC0zMjU0LDIxICszMDE5LDIxIEBAIHN0YXRpYyB2b2lkIHN0cmlk ZWNoYW5nZV9zdWJ0ZXN0KGNvbnN0IHN0cnVjdCB0ZXN0X21vZGUgKnQpCiAKIAkvKiBXZSBjYW4n dCBhc3NlcnQgdGhhdCBGQkMgd2lsbCBiZSBlbmFibGVkIHNpbmNlIHRoZXJlIG1heSBub3QgYmUK IAkgKiBlbm91Z2ggc3BhY2UgZm9yIHRoZSBDRkIsIGJ1dCB3ZSBjYW4gY2hlY2sgdGhlIENSQy4g Ki8KLQlwYXJhbXMtPmZiLmZiID0gJm5ld19mYjsKKwlwYXJhbXMtPnByaW1hcnkuZmIgPSAmbmV3 X2ZiOwogCXNldF9tb2RlX2Zvcl9wYXJhbXMocGFyYW1zKTsKIAlkb19hc3NlcnRpb25zKERPTlRf QVNTRVJUX0ZFQVRVUkVfU1RBVFVTKTsKIAogCS8qIEdvIGJhY2sgdG8gdGhlIGZiIHRoYXQgY2Fu IGhhdmUgRkJDLiAqLwotCXBhcmFtcy0+ZmIuZmIgPSBvbGRfZmI7CisJcGFyYW1zLT5wcmltYXJ5 LmZiID0gb2xkX2ZiOwogCXNldF9tb2RlX2Zvcl9wYXJhbXMocGFyYW1zKTsKIAlkb19hc3NlcnRp b25zKDApOwogCiAJLyogVGhpcyBvcGVyYXRpb24gaXMgdGhlIHNhbWUgYXMgYWJvdmUsIGJ1dCB3 aXRoIHRoZSBwbGFuZXMgQVBJLiAqLwotCXBhcmFtcy0+ZmIuZmIgPSAmbmV3X2ZiOworCXBhcmFt cy0+cHJpbWFyeS5mYiA9ICZuZXdfZmI7CiAJc2V0X3ByaW1fcGxhbmVfZm9yX3BhcmFtcyhwYXJh bXMpOwogCWRvX2Fzc2VydGlvbnMoRE9OVF9BU1NFUlRfRkVBVFVSRV9TVEFUVVMpOwogCi0JcGFy YW1zLT5mYi5mYiA9IG9sZF9mYjsKKwlwYXJhbXMtPnByaW1hcnkuZmIgPSBvbGRfZmI7CiAJc2V0 X3ByaW1fcGxhbmVfZm9yX3BhcmFtcyhwYXJhbXMpOwogCWRvX2Fzc2VydGlvbnMoMCk7CiAKQEAg LTMyNzYsNyArMzA0MSw3IEBAIHN0YXRpYyB2b2lkIHN0cmlkZWNoYW5nZV9zdWJ0ZXN0KGNvbnN0 IHN0cnVjdCB0ZXN0X21vZGUgKnQpCiAJICogVHJ5IHRvIHNldCBhIG5ldyBzdHJpZGUuIHdpdGgg dGhlIHBhZ2UgZmxpcCBhcGkuIFRoaXMgaXMgYWxsb3dlZAogCSAqIHdpdGggdGhlIGF0b21pYyBw YWdlIGZsaXAgaGVscGVyLCBidXQgbm90IHdpdGggdGhlIGxlZ2FjeSBwYWdlIGZsaXAuCiAJICov Ci0JcmMgPSBkcm1Nb2RlUGFnZUZsaXAoZHJtLmZkLCBwYXJhbXMtPmNydGNfaWQsIG5ld19mYi5m Yl9pZCwgMCwgTlVMTCk7CisJcmMgPSBkcm1Nb2RlUGFnZUZsaXAoZHJtLmZkLCBkcm0uZGlzcGxh eS5waXBlc1twYXJhbXMtPnBpcGVdLmNydGNfaWQsIG5ld19mYi5mYl9pZCwgMCwgTlVMTCk7CiAJ aWd0X2Fzc2VydChyYyA9PSAtRUlOVkFMIHx8IHJjID09IDApOwogCWRvX2Fzc2VydGlvbnMoMCk7 CiAKQEAgLTMzMDcsOSArMzA3Miw5IEBAIHN0YXRpYyB2b2lkIHRpbGluZ2NoYW5nZV9zdWJ0ZXN0 KGNvbnN0IHN0cnVjdCB0ZXN0X21vZGUgKnQpCiAKIAlwcmVwYXJlX3N1YnRlc3QodCwgTlVMTCk7 CiAKLQlvbGRfZmIgPSBwYXJhbXMtPmZiLmZiOworCW9sZF9mYiA9IHBhcmFtcy0+cHJpbWFyeS5m YjsKIAotCWNyZWF0ZV9mYih0LT5mb3JtYXQsIHBhcmFtcy0+ZmIuZmItPndpZHRoLCBwYXJhbXMt PmZiLmZiLT5oZWlnaHQsCisJY3JlYXRlX2ZiKHQtPmZvcm1hdCwgcGFyYW1zLT5wcmltYXJ5LmZi LT53aWR0aCwgcGFyYW1zLT5wcmltYXJ5LmZiLT5oZWlnaHQsCiAJCSAgTE9DQUxfRFJNX0ZPUk1B VF9NT0RfTk9ORSwgdC0+cGxhbmUsICZuZXdfZmIpOwogCWZpbGxfZmIoJm5ld19mYiwgQ09MT1Jf UFJJTV9CRyk7CiAKQEAgLTMzMTcsMTIgKzMwODIsMTIgQEAgc3RhdGljIHZvaWQgdGlsaW5nY2hh bmdlX3N1YnRlc3QoY29uc3Qgc3RydWN0IHRlc3RfbW9kZSAqdCkKIAkJaWd0X2RlYnVnKCJGbGlw IHR5cGU6ICVkXG4iLCBmbGlwX3R5cGUpOwogCiAJCS8qIFNldCBhIGJ1ZmZlciB3aXRoIG5vIHRp bGluZy4gKi8KLQkJcGFyYW1zLT5mYi5mYiA9ICZuZXdfZmI7CisJCXBhcmFtcy0+cHJpbWFyeS5m YiA9ICZuZXdfZmI7CiAJCXBhZ2VfZmxpcF9mb3JfcGFyYW1zKHBhcmFtcywgZmxpcF90eXBlKTsK IAkJZG9fYXNzZXJ0aW9ucyhBU1NFUlRfRkJDX0RJU0FCTEVEKTsKIAogCQkvKiBQdXQgRkJDIGJh Y2sgaW4gYSB3b3JraW5nIHN0YXRlLiAqLwotCQlwYXJhbXMtPmZiLmZiID0gb2xkX2ZiOworCQlw YXJhbXMtPnByaW1hcnkuZmIgPSBvbGRfZmI7CiAJCXBhZ2VfZmxpcF9mb3JfcGFyYW1zKHBhcmFt cywgZmxpcF90eXBlKTsKIAkJZG9fYXNzZXJ0aW9ucygwKTsKIAl9CkBAIC0zMzY1LDE1ICszMTMw LDE1IEBAIHN0YXRpYyB2b2lkIGJhc2ljX3N1YnRlc3QoY29uc3Qgc3RydWN0IHRlc3RfbW9kZSAq dCkKIAogCXByZXBhcmVfc3VidGVzdCh0LCBwYXR0ZXJuKTsKIAotCWNyZWF0ZV9mYih0LT5mb3Jt YXQsIHBhcmFtcy0+ZmIuZmItPndpZHRoLCBwYXJhbXMtPmZiLmZiLT5oZWlnaHQsCisJY3JlYXRl X2ZiKHQtPmZvcm1hdCwgcGFyYW1zLT5wcmltYXJ5LmZiLT53aWR0aCwgcGFyYW1zLT5wcmltYXJ5 LmZiLT5oZWlnaHQsCiAJCSAgb3B0LnRpbGluZywgdC0+cGxhbmUsICZmYjIpOwotCWZiMSA9IHBh cmFtcy0+ZmIuZmI7CisJZmIxID0gcGFyYW1zLT5wcmltYXJ5LmZiOwogCiAJZm9yIChyID0gMCwg bWV0aG9kID0gMDsgbWV0aG9kIDwgSUdUX0RSQVdfTUVUSE9EX0NPVU5UOyBtZXRob2QrKywgcisr KSB7CiAJCWlmIChyID09IHBhdHRlcm4tPm5fcmVjdHMpIHsKLQkJCXBhcmFtcy0+ZmIuZmIgPSAo cGFyYW1zLT5mYi5mYiA9PSBmYjEpID8gJmZiMiA6IGZiMTsKKwkJCXBhcmFtcy0+cHJpbWFyeS5m YiA9IChwYXJhbXMtPnByaW1hcnkuZmIgPT0gZmIxKSA/ICZmYjIgOiBmYjE7CiAKLQkJCWZpbGxf ZmJfcmVnaW9uKCZwYXJhbXMtPmZiLCBDT0xPUl9QUklNX0JHKTsKKwkJCWZpbGxfZmJfcmVnaW9u KCZwYXJhbXMtPnByaW1hcnksIENPTE9SX1BSSU1fQkcpOwogCQkJdXBkYXRlX3dhbnRlZF9jcmMo dCwgJmJsdWVfY3Jjc1t0LT5mb3JtYXRdLmNyYyk7CiAKIAkJCXBhZ2VfZmxpcF9mb3JfcGFyYW1z KHBhcmFtcywgdC0+ZmxpcCk7CkBAIC0zMzgyLDcgKzMxNDcsNyBAQCBzdGF0aWMgdm9pZCBiYXNp Y19zdWJ0ZXN0KGNvbnN0IHN0cnVjdCB0ZXN0X21vZGUgKnQpCiAJCQlyID0gMDsKIAkJfQogCi0J CWRyYXdfcmVjdChwYXR0ZXJuLCAmcGFyYW1zLT5mYiwgbWV0aG9kLCByKTsKKwkJZHJhd19yZWN0 KHBhdHRlcm4sICZwYXJhbXMtPnByaW1hcnksIG1ldGhvZCwgcik7CiAJCXVwZGF0ZV93YW50ZWRf Y3JjKHQsICZwYXR0ZXJuLT5jcmNzW3QtPmZvcm1hdF1bcl0pOwogCQlkb19hc3NlcnRpb25zKGFz c2VydGlvbnMpOwogCX0KLS0gCjIuMTYuMgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KaWd0LWRldiBtYWlsaW5nIGxpc3QKaWd0LWRldkBsaXN0cy5mcmVl ZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5m by9pZ3QtZGV2Cg==