From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dhanya Pillai Subject: [PATCH] tests/kms_color:Color IGT Date: Mon, 13 Jul 2015 09:24:53 +0530 Message-ID: <1436759693-8501-1-git-send-email-dhanya.p.r@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTP id E46696E068 for ; Sun, 12 Jul 2015 20:48:21 -0700 (PDT) List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org Cc: Dhanya List-Id: intel-gfx@lists.freedesktop.org RnJvbTogRGhhbnlhIDxkaGFueWEucC5yQGludGVsLmNvbT4KClRoaXMgcGF0Y2ggd2lsbCB2ZXJp ZnkgY29sb3IgY29ycmVjdGlvbiBjYXBhYmlsaXR5IG9mIGEgZGlzcGxheSBkcml2ZXIuCkdhbW1h L0NTQy9EZS1nYW1tYSBzdXBwb3J0ZWQuCgpTaWduZWQtb2ZmLWJ5OiBEaGFueWEgPGRoYW55YS5w LnJAaW50ZWwuY29tPgotLS0KIHRlc3RzL01ha2VmaWxlLnNvdXJjZXMgfCAgIDMgKwogdGVzdHMv a21zX2NvbG9yLmMgICAgICB8IDYzOSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrCiAyIGZpbGVzIGNoYW5nZWQsIDY0MiBpbnNlcnRpb25zKCspCiBjcmVh dGUgbW9kZSAxMDA2NDQgdGVzdHMva21zX2NvbG9yLmMKCmRpZmYgLS1naXQgYS90ZXN0cy9NYWtl ZmlsZS5zb3VyY2VzIGIvdGVzdHMvTWFrZWZpbGUuc291cmNlcwppbmRleCA5OTRjMzFiLi5mNDlj Mzk2IDEwMDY0NAotLS0gYS90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCisrKyBiL3Rlc3RzL01ha2Vm aWxlLnNvdXJjZXMKQEAgLTc3LDkgKzc3LDEyIEBAIFRFU1RTX3Byb2dzX00gPSBcCiAJa21zX3Nl dG1vZGUgXAogCWttc191bml2ZXJzYWxfcGxhbmUgXAogCWttc192YmxhbmsgXAorCWttc19jb2xv ciBcCisJY29sb3ItY29ycmVjdGlvbglcCiAJa21zX2NydGNfYmFja2dyb3VuZF9jb2xvciBcCiAJ a21zX3BsYW5lX3NjYWxpbmcgXAogCWttc19wYW5lbF9maXR0aW5nIFwKKwlrbXNfcmVuZGVyX2Nv bXByZXNzaW9uIFwKIAlwbV9scHNwIFwKIAlwbV9ycG0gXAogCXBtX3JwcyBcCmRpZmYgLS1naXQg YS90ZXN0cy9rbXNfY29sb3IuYyBiL3Rlc3RzL2ttc19jb2xvci5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLjQ4ZmFkN2EKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9rbXNf Y29sb3IuYwpAQCAtMCwwICsxLDYzOSBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDE1IEludGVs IENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBv ZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0 d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiks CisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRp bmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5 LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxs IGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRo ZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xs b3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQg dGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgp IHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMg b2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFT IElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElF RCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFO VEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5G UklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdI VCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBM SUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVS V0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUg U09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJF LgorICoKKyAqLworCisjaW5jbHVkZSA8bWF0aC5oPgorI2luY2x1ZGUgImRybXRlc3QuaCIKKyNp bmNsdWRlICJpZ3RfZGVidWdmcy5oIgorI2luY2x1ZGUgImlndF9rbXMuaCIKKyNpbmNsdWRlICJp Z3RfY29yZS5oIgorI2luY2x1ZGUgImludGVsX2NoaXBzZXQuaCIKKyNpbmNsdWRlICJpZ3RfYXV4 LmgiCisjaW5jbHVkZTx1bmlzdGQuaD4KKyNpbmNsdWRlPHN0ZGxpYi5oPgorSUdUX1RFU1RfREVT Q1JJUFRJT04oIlRlc3QgQ29sb3IgRmVhdHVyZXMgYXQgUGxhbmUvUGlwZSBsZXZlbCIpOworCisK KyNkZWZpbmUgQ0hWX0NTQ19WQUxTICAgIDkKKyNkZWZpbmUgSTkxNV9QSVBFX0NTQyAgICAgICAg ICAgKDE8PDApCisjZGVmaW5lIEk5MTVfUExBTkVfQ1NDICAoMTw8MSkKKworI2RlZmluZSBDU0Nf TUFOVElTU0FfTUFYX0JJVFMgICAgMQorI2RlZmluZSBDU0NfTUFOVElTU0FfTUFYX1ZBTFVFICAg KCgxIDw8IENTQ19NQU5USVNTQV9NQVhfQklUUykgLSAxKQorI2RlZmluZSBDU0NfRlJBQ1RJT05f TUFYX0JJVFMgICAgMTAKKyNkZWZpbmUgR0FNTUFfUkVEX1NISUZUCTE2CisjZGVmaW5lIEdBTU1B X0dSRUVOX1NISUZUCTgKKyNkZWZpbmUgU1RBTkRBUkRfR0FNTUEJCQkJMi4yCisjZGVmaW5lIEk5 MTVfR0FNTUFfRkxBR19ERUdBTU1BCQkoMTw8MCkKKyNkZWZpbmUgSTkxNV9QSVBFX0dBTU1BCQko MTw8MCkKKyNkZWZpbmUgSTkxNV9QTEFORV9HQU1NQQkoMTw8MSkKKyNkZWZpbmUgSTkxNV9HQU1N QV9QUkVDSVNJT05fVU5LTk9XTgkwCisjZGVmaW5lIEk5MTVfR0FNTUFfUFJFQ0lTSU9OX0NVUlJF TlQJMHhGRkZGRkZGRgorI2RlZmluZSBJOTE1X0dBTU1BX1BSRUNJU0lPTl9MRUdBQ1kJKDE8PDAp CisjZGVmaW5lIEk5MTVfR0FNTUFfUFJFQ0lTSU9OXzEwQklUCSgxPDwxKQorI2RlZmluZSBJOTE1 X0dBTU1BX1BSRUNJU0lPTl8xMkJJVAkoMTw8MikKKyNkZWZpbmUgSTkxNV9HQU1NQV9QUkVDSVNJ T05fMTRCSVQJKDE8PDMpCisjZGVmaW5lIEk5MTVfR0FNTUFfUFJFQ0lTSU9OXzE2QklUCSgxPDw0 KQorI2RlZmluZSBDSFZfREVHQU1NQV9NQVhfSU5ERVgJNjQKKyNkZWZpbmUgQ0hWX0RFR0FNTUFf VkFMUwk2NQorI2RlZmluZSBDSFZfOEJJVF9HQU1NQV9NQVhfSU5ERVgJMjU2CisjZGVmaW5lIENI Vl84QklUX0dBTU1BX01BWF9WQUxTCUNIVl84QklUX0dBTU1BX01BWF9JTkRFWAorI2RlZmluZSBD SFZfMTBCSVRfR0FNTUFfTUFYX0lOREVYCTI1NgorI2RlZmluZSBDSFZfMTBCSVRfR0FNTUFfTUFY X1ZBTFMJKENIVl8xMEJJVF9HQU1NQV9NQVhfSU5ERVggKyAxKQorI2RlZmluZSBERUZBVUxUIDAK KyNkZWZpbmUgUkFORE9NIDEKKyNkZWZpbmUgRFJNX0lPQ1RMX01PREVfQ1JFQVRFUFJPUEJMT0IJ XAorCURSTV9JT1dSKDB4QkQsIHN0cnVjdCBkcm1fbW9kZV9jcmVhdGVfYmxvYikKKworc3RydWN0 IGRybV9pbnRlbF9jc2MgeworCXVpbnQzMl90IHZlcnNpb247CisJaW50IGNzY19tYXRyaXhbOV07 CisKK307CisKK3N0cnVjdCBDVVJWRV9TTElERVJfVkFMVUVTIHsKKwlpbnQzMl90IGJyaWdodG5l c3M7CisJaW50MzJfdCBjb250cmFzdDsKKwlmbG9hdCBnYW1tYTsKK307CisKK3N0cnVjdCByZ2Jf cGl4ZWwgeworCXVpbnQzMl90IHJlZDsKKwl1aW50MzJfdCBncmVlbjsKKwl1aW50MzJfdCBibHVl OworfTsKKworc3RydWN0IGRybV9pbnRlbF9nYW1tYSB7CisJdWludDMyX3QgdmVyc2lvbjsKKwl1 aW50MzJfdCBudW1fc2FtcGxlczsKKwlzdHJ1Y3QgcmdiX3BpeGVsIGdhbW1hX3ZhbHVlc1syNTdd OworfTsKK3N0cnVjdCBkcm1faW50ZWxfZGVnYW1tYSB7CisJdWludDMyX3QgdmVyc2lvbjsKKwl1 aW50MzJfdCBudW1fc2FtcGxlczsKKwlzdHJ1Y3QgcmdiX3BpeGVsIGRlZ2FtbWFfdmFsdWVzWzY1 XTsKK307CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX21vZGVfY3JlYXRlX2Jsb2IgeworCXVpbnQ2NF90 IGRhdGE7CisJdWludDMyX3QgbGVuZ3RoOworCXVpbnQzMl90IGJsb2JfaWQ7Cit9OworCisKK3N0 cnVjdCBkYXRhX3QgeworCWludCBmYl9pbml0aWFsOworCWludCBkcm1fZmQ7CisJaW50IHcsIGg7 CisJaWd0X2Rpc3BsYXlfdCBkaXNwbGF5OworCXN0cnVjdCBpZ3RfZmIgZmJfcHJlcDsKKwlzdHJ1 Y3QgaWd0X2ZiIGZiLCBmYjE7Cit9OworCisJc3RhdGljIHZvaWQKK3BhaW50X2NvbG9yKHN0cnVj dCBkYXRhX3QgKmQsIHN0cnVjdCBpZ3RfZmIgKmZiLCB1aW50MTZfdCB3LCB1aW50MTZfdCBoKQor eworCWNhaXJvX3QgKmNyOworCisJY3IgPSBpZ3RfZ2V0X2NhaXJvX2N0eChkLT5kcm1fZmQsIGZi KTsKKwlpZ3RfcGFpbnRfdGVzdF9wYXR0ZXJuKGNyLCB3LCBoKTsKKwljYWlyb19kZXN0cm95KGNy KTsKK30KKworaW50IGNyZWF0ZV9ibG9iKGludCBmZCwgdWludDY0X3QgKmRhdGEsIGludCBsZW5n dGgpCit7CisJc3RydWN0IGRybV9tb2RlX2NyZWF0ZV9ibG9iIGJsb2I7CisJaW50IHJldCA9IC0x OworCisJYmxvYi5kYXRhID0gKHVpbnQ2NF90KWRhdGE7CisJYmxvYi5sZW5ndGggPSBsZW5ndGg7 CisJYmxvYi5ibG9iX2lkID0gLTE7CisJcmV0ID0gaW9jdGwoZmQsIERSTV9JT0NUTF9NT0RFX0NS RUFURVBST1BCTE9CLCAmYmxvYik7CisJaWYgKCFyZXQpCisJCXJldHVybiBibG9iLmJsb2JfaWQ7 CisJcHJpbnRmKCJCbG9iIGNyZWF0aW9uIGlvY3RsIGZhaWxlZCIpOworCXJldHVybiByZXQ7Cit9 CisKK3N0YXRpYyB2b2lkIHByZXBhcmVfY3J0YyhzdHJ1Y3QgZGF0YV90ICpkYXRhLCBpZ3Rfb3V0 cHV0X3QgKm91dHB1dCwKKwkJZW51bSBwaXBlIHBpcGUsIGlndF9wbGFuZV90ICpwbGFuZSwgZHJt TW9kZU1vZGVJbmZvICptb2RlLAorCQllbnVtIGlndF9jb21taXRfc3R5bGUgcykKK3sKKwlpZ3Rf ZGlzcGxheV90ICpkaXNwbGF5ID0gJmRhdGEtPmRpc3BsYXk7CisKKwlpZ3Rfb3V0cHV0X3NldF9w aXBlKG91dHB1dCwgcGlwZSk7CisKKworCS8qIGJlZm9yZSBhbGxvY2F0aW5nLCBmcmVlIGlmIGFu eSBvbGRlciBmYiAqLworCWlmIChkYXRhLT5mYl9pbml0aWFsKSB7CisJCWlndF9yZW1vdmVfZmIo ZGF0YS0+ZHJtX2ZkLCAmZGF0YS0+ZmJfcHJlcCk7CisJCWRhdGEtPmZiX2luaXRpYWwgPSAwOwor CX0KKworCS8qIGFsbG9jYXRlIGZiIGZvciBwbGFuZSAxICovCisJZGF0YS0+ZmJfaW5pdGlhbCA9 IGlndF9jcmVhdGVfY29sb3JfZmIoZGF0YS0+ZHJtX2ZkLAorCQkJbW9kZS0+aGRpc3BsYXksIG1v ZGUtPnZkaXNwbGF5LAorCQkJRFJNX0ZPUk1BVF9YUkdCODg4OCwKKwkJCUxPQ0FMX0k5MTVfRk9S TUFUX01PRF9YX1RJTEVELCAvKiB0aWxlZCAqLworCQkJMCwgMCwgMS4wLAorCQkJJmRhdGEtPmZi X3ByZXApOworCWlndF9hc3NlcnQoZGF0YS0+ZmJfaW5pdGlhbCk7CisKKwlpZ3RfcGxhbmVfc2V0 X2ZiKHBsYW5lLCAmZGF0YS0+ZmJfcHJlcCk7CisJaWYgKHMgPT0gQ09NTUlUX0xFR0FDWSkgewor CQlpbnQgcmV0OworCisJCXJldCA9IGRybU1vZGVTZXRDcnRjKGRhdGEtPmRybV9mZCwKKwkJCQlv dXRwdXQtPmNvbmZpZy5jcnRjLT5jcnRjX2lkLAorCQkJCWRhdGEtPmZiX2luaXRpYWwsCisJCQkJ cGxhbmUtPnBhbl94LCBwbGFuZS0+cGFuX3ksCisJCQkJJm91dHB1dC0+aWQsCisJCQkJMSwKKwkJ CQltb2RlKTsKKwkJaWd0X2Fzc2VydChyZXQgPT0gMCk7CisJfSBlbHNlIHsKKwkJaWd0X2Rpc3Bs YXlfY29tbWl0MihkaXNwbGF5LCBzKTsKKwl9Cit9CitzdGF0aWMgdm9pZCBjbGVhbnVwX2ZiKHN0 cnVjdCBkYXRhX3QgKmRhdGEpCit7CisJaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSA9ICZkYXRhLT5k aXNwbGF5OworCisJaWYgKGRhdGEtPmZiX2luaXRpYWwpIHsKKwkJaWd0X3JlbW92ZV9mYihkYXRh LT5kcm1fZmQsICZkYXRhLT5mYl9wcmVwKTsKKwkJZGF0YS0+ZmJfaW5pdGlhbCA9IDA7CisJfQor CWlmIChkYXRhLT5mYi5mYl9pZCkKKwkJaWd0X3JlbW92ZV9mYihkYXRhLT5kcm1fZmQsICZkYXRh LT5mYik7CisJaWYgKGRhdGEtPmZiMS5mYl9pZCkKKwkJaWd0X3JlbW92ZV9mYihkYXRhLT5kcm1f ZmQsICZkYXRhLT5mYjEpOworCit9CitzdGF0aWMgdm9pZCBjbGVhbnVwX2NydGMoc3RydWN0IGRh dGFfdCAqZGF0YSwgaWd0X291dHB1dF90ICpvdXRwdXQsCisJCWlndF9wbGFuZV90ICpwbGFuZSkK K3sKKwlpZ3RfZGlzcGxheV90ICpkaXNwbGF5ID0gJmRhdGEtPmRpc3BsYXk7CisKKwlpZiAoIXBs YW5lLT5pc19wcmltYXJ5KSB7CisJCWlndF9wbGFuZV90ICpwcmltYXJ5OworCisJCXByaW1hcnkg PSBpZ3Rfb3V0cHV0X2dldF9wbGFuZShvdXRwdXQsIElHVF9QTEFORV9QUklNQVJZKTsKKwkJaWd0 X3BsYW5lX3NldF9mYihwcmltYXJ5LCBOVUxMKTsKKwl9CisKKwlpZ3RfcGxhbmVfc2V0X2ZiKHBs YW5lLCBOVUxMKTsKKwlpZ3Rfb3V0cHV0X3NldF9waXBlKG91dHB1dCwgUElQRV9BTlkpOworCWln dF9kaXNwbGF5X2NvbW1pdDIoZGlzcGxheSwgQ09NTUlUX0xFR0FDWSk7Cit9CisKK2ludCBjb252 ZXJ0VG9CaW5hcnlTaWduZWQoZmxvYXQgdmFsdWUpCit7CisJaW50IG1hbnRpc3NhID0gMDsKKwlp bnQgZnJhY3Rpb24gPSAwOworCWludCBzaWduID0gMDsKKwlpbnQgbG9vcDsKKwlmbG9hdCBmdG1w OworCWludCByZXQgPSAwOworCisJaWYgKHZhbHVlIDwgMCkgeworCQlzaWduID0gMTsKKwkJdmFs dWUgKj0gKC0xKTsKKwl9CisJbWFudGlzc2EgPSAoaW50KSB2YWx1ZSAvIDE7CisJbWFudGlzc2Eg Jj0gQ1NDX01BTlRJU1NBX01BWF9WQUxVRTsKKwlmdG1wID0gdmFsdWUgLSBtYW50aXNzYTsKKwlm b3IgKGxvb3AgPSAwOyBsb29wIDwgQ1NDX0ZSQUNUSU9OX01BWF9CSVRTOyBsb29wKyspIHsKKwkJ ZnRtcCA9IGZ0bXAgKiAyOworCQlpZiAoZnRtcCA+PSAxKSB7CisJCQlmcmFjdGlvbiB8PSAweDE7 CisJCQlmdG1wIC09IDEuMDsKKwkJfQorCQlpZiAobG9vcCA9PSAoQ1NDX0ZSQUNUSU9OX01BWF9C SVRTIC0gMSkpCisJCQlicmVhazsKKwkJZnJhY3Rpb24gPDw9IDE7CisKKwl9CisJZnJhY3Rpb24g Jj0gMHgzRkY7CisJcmV0ID0gKGZyYWN0aW9uIHwgKG1hbnRpc3NhIDw8IENTQ19GUkFDVElPTl9N QVhfQklUUykpOworCWlmIChzaWduKQorCQlyZXQgPSAofnJldCkgKyAxOworCXJldCB8PSAoc2ln biA8PCAxMSk7CisJcmV0ICY9IDB4RkZGOworCXJldHVybiByZXQ7Cit9Cit2b2lkIGNzY1dyaXRl KGZsb2F0ICpjc2NfdmFsLCBpbnQgKmNzY19tYXRyaXgpCit7CisJZm9yIChpbnQgaSA9IDA7IGkg PCBDSFZfQ1NDX1ZBTFM7IGkrKykKKwkJY3NjX21hdHJpeFtpXSA9ICh1aW50NjRfdCljb252ZXJ0 VG9CaW5hcnlTaWduZWQoY3NjX3ZhbFtpXSk7Cit9CisKK3ZvaWQgZ2VuZXJhdGVDdXJ2ZUZyb21T bGlkZXIoc3RydWN0IENVUlZFX1NMSURFUl9WQUxVRVMgKnBTbGlkZXIsCisJCXVpbnQzMl90ICpw Q3VydmUsIHVpbnQzMl90IG51bV9zYW1wbGVzKQoreworCWRvdWJsZSBkR2FtbWEgPSAoZG91Ymxl KXBTbGlkZXItPmdhbW1hOworCWRvdWJsZSBkQnJpZ2h0bmVzcyA9IChkb3VibGUpcFNsaWRlci0+ YnJpZ2h0bmVzcyAqIDI1NjsKKwlkb3VibGUgZENvbnRyYXN0ID0gKGRvdWJsZSlwU2xpZGVyLT5j b250cmFzdDsKKwlkb3VibGUgZFNsb3BlLCBkT3V0cHV0LCBvdXRWYWw7CisJdWludDMyX3QgaW5w dXQsIGluZGV4LCBpOworCWludCBtYXhWYWwgPSA2NTUzNTsKKworCWZvciAoaSA9IDA7IGkgPCBu dW1fc2FtcGxlcyoyOyBpKyspIHsKKwkJb3V0VmFsID0gKGRvdWJsZSkoMjU1ICogcG93KCgoZG91 YmxlKWkgLyAyNTUuMCksCisJCQkJCShTVEFOREFSRF9HQU1NQSAvIGRHYW1tYSkpKTsKKwkJb3V0 VmFsICs9IDAuNTsKKwkJaWYgKG1heFZhbCA8IG91dFZhbCkKKwkJCW91dFZhbCA9IG1heFZhbDsK KwkJcEN1cnZlW2ldID0gb3V0VmFsOworCX0KKwlkU2xvcGUgPSAxLjAgKyBkQ29udHJhc3QgLyAx MDAuMDsKKwlmb3IgKGlucHV0ID0gMDsgaW5wdXQgPCBudW1fc2FtcGxlcyoyOyBpbnB1dCsrKSB7 CisJCWRPdXRwdXQgPSBkU2xvcGUgKiBwQ3VydmVbaW5wdXRdOworCQlkT3V0cHV0ICs9IGRCcmln aHRuZXNzICsgMC41OworCQlpZiAoZE91dHB1dCA+IG1heFZhbCkKKwkJCWRPdXRwdXQgPSBtYXhW YWw7CisJCWlmIChkT3V0cHV0IDwgMCkKKwkJCWRPdXRwdXQgPSAwOworCQlwQ3VydmVbaW5wdXRd ID0gZE91dHB1dDsKKwl9Cit9Cit2b2lkIHdyaXRlQ3VydmVDc3YodWludDMyX3QgKnBDdXJ2ZURh dGEsIHVpbnQzMl90IG51bV9zYW1wbGVzLAorCQlzdHJ1Y3QgcmdiX3BpeGVsICpnYW1tYV9wdHIp Cit7CisJdWludDMyX3QgKnBSZWQsICpwR3JlZW4sICpwQmx1ZTsKKwl1aW50NjRfdCBpLCBpbmRl eDsKKworCXBSZWQgPSBwQ3VydmVEYXRhOworCXBHcmVlbiA9IHBDdXJ2ZURhdGE7CisJcEJsdWUg PSBwQ3VydmVEYXRhOworCWZvciAoaSA9IDA7IGkgPCBudW1fc2FtcGxlczsgaSsrKSB7CisJCWlu ZGV4ID0gaSAqIDI7CisJCWdhbW1hX3B0cltpXS5yZWQgPSBwUmVkW2luZGV4XTsKKwkJZ2FtbWFf cHRyW2ldLmdyZWVuID0gcEdyZWVuW2luZGV4XTsKKwkJZ2FtbWFfcHRyW2ldLmJsdWUgPSBwQmx1 ZVtpbmRleF07CisJfQorfQorCit2b2lkIGdhbW1hUGlwZShpbnQgYnJpZ2h0bmVzcywgaW50IGNv bnRyYXN0LCBmbG9hdCBnYW1tYSwKKwkJdWludDMyX3QgbnVtX3NhbXBsZXMsIHN0cnVjdCByZ2Jf cGl4ZWwgKmdhbW1hX3B0cikKK3sKKwlzdHJ1Y3QgQ1VSVkVfU0xJREVSX1ZBTFVFUyBzU2xpZGVE YXRhOworCXVpbnQzMl90IHBDdXJ2ZVsyKm51bV9zYW1wbGVzXTsKKworCXNTbGlkZURhdGEuYnJp Z2h0bmVzcyA9IGJyaWdodG5lc3M7CisJc1NsaWRlRGF0YS5jb250cmFzdCA9IGNvbnRyYXN0Owor CXNTbGlkZURhdGEuZ2FtbWEgPSBnYW1tYTsKKwlnZW5lcmF0ZUN1cnZlRnJvbVNsaWRlcigmc1Ns aWRlRGF0YSwgcEN1cnZlLCBudW1fc2FtcGxlcyk7CisJd3JpdGVDdXJ2ZUNzdihwQ3VydmUsIG51 bV9zYW1wbGVzLCBnYW1tYV9wdHIpOworfQorc3RhdGljIGludCBnZXRfY29sb3JfcHJvcGVydHko aW50IGRybV9mZCwgaW50IGlkLCBpbnQgb2JqZWN0LAorCQljaGFyICpwcm9wX25hbWUsIGludCBi bG9iX2lkKQoreworCWludCBpID0gMCwgcmV0ID0gMDsKKwl1aW50NjRfdCB2YWx1ZSA9IDA7CisJ c3RydWN0IGRybV9pbnRlbF9nYW1tYSAqZ2FtbWFfZGF0YSA9IE5VTEw7CisJZHJtTW9kZU9iamVj dFByb3BlcnRpZXNQdHIgcHJvcHMgPSBOVUxMOworCisJaWYgKGlkIDwgMCB8fCAoKG9iamVjdCAh PSBEUk1fTU9ERV9PQkpFQ1RfQ1JUQykgJiYKKwkJCQkob2JqZWN0ICE9IERSTV9NT0RFX09CSkVD VF9QTEFORSkpKQorCQlyZXR1cm4gLTE7CisJdmFsdWUgPSBibG9iX2lkOworCisJLyogR2V0IGFs bCB0aGUgcHJvcGVydGllcyBmcm9tIG9iamVjdCAqLworCXByb3BzID0gZHJtTW9kZU9iamVjdEdl dFByb3BlcnRpZXMoZHJtX2ZkLCBpZCwgb2JqZWN0KTsKKwlpZiAoIXByb3BzKQorCQlyZXR1cm4g LTE7CisJZm9yIChpID0gMDsgaSA8IHByb3BzLT5jb3VudF9wcm9wczsgaSsrKSB7CisJCWRybU1v ZGVQcm9wZXJ0eVB0ciBwcm9wID0gZHJtTW9kZUdldFByb3BlcnR5KGRybV9mZCwKKwkJCQlwcm9w cy0+cHJvcHNbaV0pOworCQlpZiAoc3RyY21wKHByb3AtPm5hbWUsIHByb3BfbmFtZSkgPT0gMCkg eworCQkJLyogRm91bmQgcHJvcGVydHksIG5vdyBzZXQgdGhlIHZhbHVlcyAqLworCQkJYmxvYl9p ZCA9IHByb3BzLT5wcm9wX3ZhbHVlc1tpXTsKKwkJCWJyZWFrOworCQl9CisJCWRybU1vZGVGcmVl UHJvcGVydHkocHJvcCk7CisJfQorCisJcmV0ID0gYmxvYl9pZDsKKwkvKiBGcmVlIHRoZSBhbGxv Y2F0ZWQgcHJvcGVydHkgKi8KKwlkcm1Nb2RlRnJlZU9iamVjdFByb3BlcnRpZXMocHJvcHMpOwor CWlmIChpID09IHByb3BzLT5jb3VudF9wcm9wcykgeworCQkvKiBQcm9wZXJ0eSBub3QgZm91bmQg Ki8KKwkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gcmV0OworfQorCisKK2ludCBzZXRfY29sb3Jf cHJvcGVydHkoaW50IGRybV9mZCwgaW50IGlkLCBpbnQgb2JqZWN0LCBjaGFyICpwcm9wX25hbWUs CisJCQkgaW50IGJsb2JfaWQpCit7CisJaW50IGkgPSAwLCByZXM7CisKKwlkcm1Nb2RlT2JqZWN0 UHJvcGVydGllc1B0ciBwcm9wcyA9IE5VTEw7CisKKwlpZiAoaWQgPCAwIHx8ICgob2JqZWN0ICE9 IERSTV9NT0RFX09CSkVDVF9DUlRDKSAmJgorCQkJKG9iamVjdCAhPSBEUk1fTU9ERV9PQkpFQ1Rf UExBTkUpKSkgeworCQlyZXR1cm4gLTE7CisJfQorCisJcHJvcHMgPSBkcm1Nb2RlT2JqZWN0R2V0 UHJvcGVydGllcyhkcm1fZmQsIGlkLCBvYmplY3QpOworCWlmICghcHJvcHMpCisJCXJldHVybiAt MTsKKwlmb3IgKGkgPSAwOyBpIDwgcHJvcHMtPmNvdW50X3Byb3BzOyBpKyspIHsKKwkJZHJtTW9k ZVByb3BlcnR5UHRyIHByb3AgPSBkcm1Nb2RlR2V0UHJvcGVydHkoZHJtX2ZkLAorCQkJCQkJCSBw cm9wcy0+cHJvcHNbaV0pOworCQlpZiAoc3RyY21wKHByb3AtPm5hbWUsIHByb3BfbmFtZSkgPT0g MCkgeworCQkJLyogRm91bmQgcHJvcGVydHksIG5vdyBzZXQgdGhlIHZhbHVlcyAqLworCQkJcmVz ID0gZHJtTW9kZU9iamVjdFNldFByb3BlcnR5KGRybV9mZCwgaWQsIG9iamVjdCwKKwkJCQkJICh1 aW50MzJfdClwcm9wLT5wcm9wX2lkLCBibG9iX2lkKTsKKworCQkJaWYgKHJlcykgeworCQkJCWRy bU1vZGVGcmVlUHJvcGVydHkocHJvcCk7CisJCQkJZHJtTW9kZUZyZWVPYmplY3RQcm9wZXJ0aWVz KHByb3BzKTsKKwkJCX0gZWxzZSB7CisJCQkJZHJtTW9kZUZyZWVQcm9wZXJ0eShwcm9wKTsKKwkJ CQlicmVhazsKKwkJCX0KKwkJfQorCisJCWRybU1vZGVGcmVlUHJvcGVydHkocHJvcCk7CisJfQor CWRybU1vZGVGcmVlT2JqZWN0UHJvcGVydGllcyhwcm9wcyk7CisJaWYgKGkgPT0gcHJvcHMtPmNv dW50X3Byb3BzKSB7CisJCS8qIFByb3BlcnR5IG5vdCBmb3VuZCAqLworCQlyZXR1cm4gLTE7CisJ fQorCXJldHVybiAwOworfQordm9pZCB0ZXN0X3BpcGVfY3NjKGlndF9kaXNwbGF5X3QgKmRpc3Bs YXksIGlndF9vdXRwdXRfdCAqb3V0cHV0LAorCQkJCSBpZ3RfcGxhbmVfdCAqcGxhbmUsIGludCB2 YWx1ZSkKK3sKKwlzdHJ1Y3QgZHJtX2ludGVsX2NzYyAqY3NjX2RhdGEgPSBOVUxMOworCisJY3Nj X2RhdGEgPSAoc3RydWN0IGRybV9pbnRlbF9jc2MgKikKKwkJIG1hbGxvYyhzaXplb2Yoc3RydWN0 IGRybV9pbnRlbF9jc2MpKTsKKwlpbnQgY3NjX21hdHJpeFtDSFZfQ1NDX1ZBTFNdOworCWZsb2F0 ICBjc2NfdmFsW0NIVl9DU0NfVkFMU107CisJaW50IGNzY19yYW5kb21bQ0hWX0NTQ19WQUxTXSA9 IHsxLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwfTsKKwlpbnQgY3NjX2RlZmF1bHRbQ0hWX0NTQ19W QUxTXSA9IHsxLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAxfTsKKwlpbnQgaSwgcmVzOworCisJY3Nj X2RhdGEtPnZlcnNpb24gPSAxOworCWlmICh2YWx1ZSA9PSBERUZBVUxUKQorCQltZW1jcHkoY3Nj X3ZhbCwgY3NjX2RlZmF1bHQsIHNpemVvZihjc2NfdmFsKSk7CisJZWxzZQorCQltZW1jcHkoY3Nj X3ZhbCwgY3NjX3JhbmRvbSwgc2l6ZW9mKGNzY192YWwpKTsKKworCWNzY1dyaXRlKGNzY192YWws IGNzY19tYXRyaXgpOworCisJZm9yIChpID0gMDsgaSA8IENIVl9DU0NfVkFMUzsgaSsrKQorCQlj c2NfZGF0YS0+Y3NjX21hdHJpeFtpXSA9IGNzY19tYXRyaXhbaV07CisKKwlpbnQgYmxvYl9pZCA9 IGNyZWF0ZV9ibG9iKGRpc3BsYXktPmRybV9mZCwKKwkJCSAoaW50ICopKGNzY19kYXRhKSwgc2l6 ZW9mKHN0cnVjdCBkcm1faW50ZWxfY3NjKSk7CisKKwlpZ3RfYXNzZXJ0KGJsb2JfaWQgPiAwKTsK KworCXJlcyA9IHNldF9jb2xvcl9wcm9wZXJ0eShkaXNwbGF5LT5kcm1fZmQsIG91dHB1dC0+Y29u ZmlnLmNydGMtPmNydGNfaWQsCisJCSBEUk1fTU9ERV9PQkpFQ1RfQ1JUQywgIkNUTSIsIGJsb2Jf aWQpOworCWlmIChyZXMgPCAwKQorCQlwcmludGYoIlNldHRpbmcgQ1NDIGZhaWxlZCEiKTsKKwlm cmVlKGNzY19kYXRhKTsKKworCit9Cit2b2lkIHRlc3RfcGlwZV9kZWdhbW1hKGlndF9kaXNwbGF5 X3QgKmRpc3BsYXksIGlndF9vdXRwdXRfdCAqb3V0cHV0LAorCSBpZ3RfcGxhbmVfdCAqcGxhbmUs IGZsb2F0IGRlZ2FtbWEsIGludCBicmlnaHRuZXNzLCBpbnQgY29udHJhc3QsCisJCQkgdWludDMy X3QgZ2FtbWFfcHJlY2lzaW9uLCB1aW50MzJfdCBudW1fc2FtcGxlcykKK3sKKwlzdHJ1Y3QgZHJt X2ludGVsX2RlZ2FtbWEgKmRlZ2FtbWFfZGF0YSA9ICBOVUxMOworCWludCByZXMsIHJldDsKKwor CWRlZ2FtbWFfZGF0YSA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IGRybV9pbnRlbF9kZWdhbW1hKSAr CisJCQkgKG51bV9zYW1wbGVzICogc2l6ZW9mKHN0cnVjdCByZ2JfcGl4ZWwpKSk7CisJZGVnYW1t YV9kYXRhLT52ZXJzaW9uID0gMTsKKwlkZWdhbW1hX2RhdGEtPm51bV9zYW1wbGVzID0gbnVtX3Nh bXBsZXM7CisJc3RydWN0IHJnYl9waXhlbCBkZWdhbW1hX3B0cltudW1fc2FtcGxlc107CisKKwln YW1tYVBpcGUoYnJpZ2h0bmVzcywgY29udHJhc3QsIGRlZ2FtbWEsIG51bV9zYW1wbGVzLCBkZWdh bW1hX3B0cik7CisJZm9yIChpbnQgaSA9IDA7IGkgPCBudW1fc2FtcGxlczsgaSsrKQorCQlkZWdh bW1hX2RhdGEtPmRlZ2FtbWFfdmFsdWVzW2ldID0gZGVnYW1tYV9wdHJbaV07CisKKwlpbnQgYmxv Yl9pZCA9IGNyZWF0ZV9ibG9iKGRpc3BsYXktPmRybV9mZCwgKHVpbnQ2NF90ICopKGRlZ2FtbWFf ZGF0YSksCisJCSBzaXplb2Yoc3RydWN0IGRybV9pbnRlbF9kZWdhbW1hKSArIChudW1fc2FtcGxl cyAqCisJCQkgc2l6ZW9mKHN0cnVjdCByZ2JfcGl4ZWwpKSk7CisKKwlpZ3RfYXNzZXJ0KGJsb2Jf aWQgPiAwKTsKKwlyZXMgPSBzZXRfY29sb3JfcHJvcGVydHkoZGlzcGxheS0+ZHJtX2ZkLCBvdXRw dXQtPmNvbmZpZy5jcnRjLT5jcnRjX2lkLAorCQkJIERSTV9NT0RFX09CSkVDVF9DUlRDLCAiUEFM RVRURV9CRUZPUkVfQ1RNIiwgYmxvYl9pZCk7CisJcmV0ID0gZ2V0X2NvbG9yX3Byb3BlcnR5KGRp c3BsYXktPmRybV9mZCwgb3V0cHV0LT5jb25maWcuY3J0Yy0+Y3J0Y19pZCwKKwkJCSBEUk1fTU9E RV9PQkpFQ1RfQ1JUQywgIlBBTEVUVEVfQkVGT1JFX0NUTSIsIGJsb2JfaWQpOworCWlmIChyZXQg PCAwKQorCQlyZXR1cm4gLTE7CisJaWYgKHJlcyA8IDApCisJCXByaW50ZigiU2V0dGluZyBHYW1t YSBmYWlsZWQhIik7CisJZnJlZShkZWdhbW1hX2RhdGEpOworfQordm9pZCB0ZXN0X3BpcGVfZ2Ft bWEoaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSwgaWd0X291dHB1dF90ICpvdXRwdXQsCisJCQkgaWd0 X3BsYW5lX3QgKnBsYW5lLCBmbG9hdCBnYW1tYSwgaW50IGJyaWdodG5lc3MsCisJCQkgaW50IGNv bnRyYXN0LCB1aW50MzJfdCBnYW1tYV9wcmVjaXNpb24sCisJCQkJIHVpbnQzMl90IG51bV9zYW1w bGVzKQoreworCXN0cnVjdCBkcm1faW50ZWxfZ2FtbWEgKmdhbW1hX2RhdGEgPSAgTlVMTDsKKwlp bnQgcmVzLCByZXQ7CisKKwlnYW1tYV9kYXRhID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgZHJtX2lu dGVsX2dhbW1hKSArCisJCQkgKG51bV9zYW1wbGVzICogc2l6ZW9mKHN0cnVjdCByZ2JfcGl4ZWwp KSk7CisJZ2FtbWFfZGF0YS0+dmVyc2lvbiA9IDE7CisJZ2FtbWFfZGF0YS0+bnVtX3NhbXBsZXMg PSBudW1fc2FtcGxlczsKKwlzdHJ1Y3QgcmdiX3BpeGVsIGdhbW1hX3B0cltudW1fc2FtcGxlc107 CisKKwlnYW1tYVBpcGUoYnJpZ2h0bmVzcywgY29udHJhc3QsIGdhbW1hLCBudW1fc2FtcGxlcywg Z2FtbWFfcHRyKTsKKwlmb3IgKGludCBpID0gMDsgaSA8IG51bV9zYW1wbGVzOyBpKyspCisJCWdh bW1hX2RhdGEtPmdhbW1hX3ZhbHVlc1tpXSA9IGdhbW1hX3B0cltpXTsKKworCisJaW50IGJsb2Jf aWQgPSBjcmVhdGVfYmxvYihkaXNwbGF5LT5kcm1fZmQsICh1aW50NjRfdCAqKShnYW1tYV9kYXRh KSwKKwkJCSBzaXplb2Yoc3RydWN0IGRybV9pbnRlbF9nYW1tYSkgKyAobnVtX3NhbXBsZXMgKgor CQkJCQlzaXplb2Yoc3RydWN0IHJnYl9waXhlbCkpKTsKKworCWlndF9hc3NlcnQoYmxvYl9pZCA+ IDApOworCXJlcyA9IHNldF9jb2xvcl9wcm9wZXJ0eShkaXNwbGF5LT5kcm1fZmQsIG91dHB1dC0+ Y29uZmlnLmNydGMtPmNydGNfaWQsCisJCQkgRFJNX01PREVfT0JKRUNUX0NSVEMsICJQQUxFVFRF X0FGVEVSX0NUTSIsIGJsb2JfaWQpOworCXJldCA9IGdldF9jb2xvcl9wcm9wZXJ0eShkaXNwbGF5 LT5kcm1fZmQsIG91dHB1dC0+Y29uZmlnLmNydGMtPmNydGNfaWQsCisJCQlEUk1fTU9ERV9PQkpF Q1RfQ1JUQywgIlBBTEVUVEVfQUZURVJfQ1RNIiwgYmxvYl9pZCk7CisJaWYgKHJldCA8IDApCisJ CXJldHVybiAtMTsKKwlpZiAocmVzIDwgMCkKKwkJcHJpbnRmKCJTZXR0aW5nIEdhbW1hIGZhaWxl ZCEiKTsKKworCWZyZWUoZ2FtbWFfZGF0YSk7Cit9Cit2b2lkIHRlc3RfcGlwZV9jb2xvcihzdHJ1 Y3QgZGF0YV90ICpkYXRhLCBjaGFyICpwcm9wX25hbWUsIGludCB2YWx1ZSkKK3sKKwlpZ3RfZGlz cGxheV90ICpkaXNwbGF5ID0gJmRhdGEtPmRpc3BsYXk7CisJaWd0X291dHB1dF90ICpvdXRwdXQ7 CisJaWd0X3BsYW5lX3QgKnBsYW5lOworCWVudW0gcGlwZSBwaXBlOworCWVudW0gaWd0X2NvbW1p dF9zdHlsZSBjb21taXQgPSBDT01NSVRfTEVHQUNZOworCWludCByZXMsIGk7CisJaW50IGZiX2lk LCBmYl9pZDE7CisJaW50IHdpZHRoLCBoZWlnaHQ7CisJdWludDMyX3QgcGl4ZWxmb3JtYXQgPSBE Uk1fRk9STUFUX1hSR0I4ODg4OworCisJZm9yX2VhY2hfY29ubmVjdGVkX291dHB1dChkaXNwbGF5 LCBvdXRwdXQpIHsKKwkJZHJtTW9kZU1vZGVJbmZvICptb2RlOworCisJCXBpcGUgPSBvdXRwdXQt PmNvbmZpZy5waXBlOworCisJCWlndF9vdXRwdXRfc2V0X3BpcGUob3V0cHV0LCBwaXBlKTsKKwkJ bW9kZSA9IGlndF9vdXRwdXRfZ2V0X21vZGUob3V0cHV0KTsKKwkJLypEcmF3IHRoZSBpbml0aWFs IHByaW1hcnkgcGxhbmUqLworCQlwbGFuZSA9IGlndF9vdXRwdXRfZ2V0X3BsYW5lKG91dHB1dCwg SUdUX1BMQU5FX1BSSU1BUlkpOworCisJCXByZXBhcmVfY3J0YyhkYXRhLCBvdXRwdXQsIHBpcGUs IHBsYW5lLCBtb2RlLCBjb21taXQpOworCQl3aWR0aCA9IDYwMDsKKwkJaGVpZ2h0ID0gNjAwOwor CisJCXBsYW5lID0gaWd0X291dHB1dF9nZXRfcGxhbmUob3V0cHV0LCBJR1RfUExBTkVfMik7CisJ CWZiX2lkID0gaWd0X2NyZWF0ZV9jb2xvcl9mYihkYXRhLT5kcm1fZmQsCisJCQkJd2lkdGgsIGhl aWdodCwKKwkJCQlwaXhlbGZvcm1hdCwKKwkJCQlMT0NBTF9EUk1fRk9STUFUX01PRF9OT05FLAor CQkJCTEuMCwKKwkJCQkwLjAsCisJCQkJMC4wLAorCQkJCSZkYXRhLT5mYik7CisJCXBsYW5lLT5j cnRjX3ggPSAxMDA7CisJCXBsYW5lLT5jcnRjX3kgPSAxMDA7CisJCXBsYW5lLT5mYl9jaGFuZ2Vk ID0gdHJ1ZTsKKwkJaWd0X3BsYW5lX3NldF9mYihwbGFuZSwgJmRhdGEtPmZiKTsKKwkJLyogc2V0 IHRoZSB3aWR0aCBhbmQgaGVpZ2h0IGZvciBzcHJpdGUgcGxhbmUgMi4gKi8KKwkJd2lkdGggPSAy MDA7CisJCWhlaWdodCA9IDIwMDsKKwkJcGxhbmUgPSBpZ3Rfb3V0cHV0X2dldF9wbGFuZShvdXRw dXQsIElHVF9QTEFORV8zKTsKKwkJZmJfaWQxID0gaWd0X2NyZWF0ZV9jb2xvcl9mYihkYXRhLT5k cm1fZmQsCisJCQkJd2lkdGgsIGhlaWdodCwKKwkJCQlwaXhlbGZvcm1hdCwKKwkJCQlMT0NBTF9E Uk1fRk9STUFUX01PRF9OT05FLAorCQkJCTEuMCwKKwkJCQkxLjAsCisJCQkJMC4wLAorCQkJCSZk YXRhLT5mYjEpOworCQlpZ3RfYXNzZXJ0KGZiX2lkMSk7CisKKwkJcGxhbmUtPmNydGNfeCA9IDMw OworCQlwbGFuZS0+Y3J0Y195ID0gMzA7CisJCXBsYW5lLT5mYl9jaGFuZ2VkID0gdHJ1ZTsKKwkJ aWd0X3BsYW5lX3NldF9mYihwbGFuZSwgJmRhdGEtPmZiMSk7CisKKwkJaWd0X2Rpc3BsYXlfY29t bWl0MihkaXNwbGF5LCBjb21taXQpOworCQl1c2xlZXAoMjAwMDAwMCk7CisJCWlmICgoc3RyY21w KHByb3BfbmFtZSwgImdhbW1hX3Byb3BlcnR5XzhiaXQiKSA9PSAwKSAmJgorCQkJCQl2YWx1ZSA9 PSBSQU5ET00peworCQkJdGVzdF9waXBlX2dhbW1hKGRpc3BsYXksIG91dHB1dCwgcGxhbmUsIDEs IDUwLCA1MCwKKwkJCQkJIEk5MTVfR0FNTUFfUFJFQ0lTSU9OX0xFR0FDWSwKKwkJCQkJCSBDSFZf OEJJVF9HQU1NQV9NQVhfVkFMUyk7CisJCX0gZWxzZSAgaWYgKChzdHJjbXAocHJvcF9uYW1lLCAi Z2FtbWFfcHJvcGVydHlfOGJpdCIpID09IDApICYmCisJCQkJCQl2YWx1ZSA9PSBERUZBVUxUKSB7 CisJCQl0ZXN0X3BpcGVfZ2FtbWEoZGlzcGxheSwgb3V0cHV0LCBwbGFuZSwgMSwgNTAsIDUwLAor CQkJCQkgSTkxNV9HQU1NQV9QUkVDSVNJT05fMTBCSVQsIDApOworCQl9IGVsc2UgIGlmICgoc3Ry Y21wKHByb3BfbmFtZSwgImdhbW1hX3Byb3BlcnR5XzEwYml0IikgPT0gMCkgJiYKKwkJCQkJdmFs dWUgPT0gREVGQVVMVCkgeworCQkJdGVzdF9waXBlX2dhbW1hKGRpc3BsYXksIG91dHB1dCwgcGxh bmUsIDEsIDUwLCA1MCwKKwkJCQkJIEk5MTVfR0FNTUFfUFJFQ0lTSU9OXzEwQklULCAwKTsKKwkJ fSBlbHNlICBpZiAoKHN0cmNtcChwcm9wX25hbWUsICJnYW1tYV9wcm9wZXJ0eV8xMGJpdCIpID09 IDApICYmCisJCQkJCSB2YWx1ZSA9PSBSQU5ET00pIHsKKwkJCXRlc3RfcGlwZV9nYW1tYShkaXNw bGF5LCBvdXRwdXQsIHBsYW5lLCAxLCA1MCwgNTAsCisJCQkJCSBJOTE1X0dBTU1BX1BSRUNJU0lP Tl8xMEJJVCwKKwkJCQkJCUNIVl8xMEJJVF9HQU1NQV9NQVhfVkFMUyk7CisKKwkJfSBlbHNlICBp ZiAoKHN0cmNtcChwcm9wX25hbWUsICJjc2NfcHJvcGVydHkiKSA9PSAwKSkgeworCQkJdGVzdF9w aXBlX2NzYyhkaXNwbGF5LCBvdXRwdXQsIHBsYW5lLCB2YWx1ZSk7CisJCX0gZWxzZSAgaWYgKChz dHJjbXAocHJvcF9uYW1lLCAiZGVnYW1tYV9wcm9wZXJ0eSIpID09IDApICYmCisJCQkJCXZhbHVl ID09IFJBTkRPTSkgeworCQkJdGVzdF9waXBlX2RlZ2FtbWEoZGlzcGxheSwgb3V0cHV0LCBwbGFu ZSwgMSwgNTAsIDUwLAorCQkJCQkgSTkxNV9HQU1NQV9QUkVDSVNJT05fMTBCSVQsIDY1KTsKKwkJ fSBlbHNlICBpZiAoKHN0cmNtcChwcm9wX25hbWUsICJkZWdhbW1hX3Byb3BlcnR5IikgPT0gMCkg JiYKKwkJCQkJdmFsdWUgPT0gREVGQVVMVCkgeworCQkJdGVzdF9waXBlX2RlZ2FtbWEoZGlzcGxh eSwgb3V0cHV0LCBwbGFuZSwgMSwgNTAsIDUwLAorCQkJCQkgSTkxNV9HQU1NQV9QUkVDSVNJT05f MTBCSVQsIDApOworCisJCX0gZWxzZSB7CisJCQlwcmludGYoIkludmFsaWQgVGVzdFxuIik7CisJ CX0KKworCQl1c2xlZXAoMjAwMDAwMCk7CisJCWNsZWFudXBfZmIoZGF0YSk7CisJCXBsYW5lID0g aWd0X291dHB1dF9nZXRfcGxhbmUob3V0cHV0LCBJR1RfUExBTkVfMyk7CisJCWNsZWFudXBfY3J0 YyhkYXRhLCBvdXRwdXQsIHBsYW5lKTsKKwkJcGxhbmUgPSBpZ3Rfb3V0cHV0X2dldF9wbGFuZShv dXRwdXQsIElHVF9QTEFORV8yKTsKKwkJY2xlYW51cF9jcnRjKGRhdGEsIG91dHB1dCwgcGxhbmUp OworCQlicmVhazsKKworCX0KK30KKworaWd0X21haW4KK3sKKwlzdHJ1Y3QgZGF0YV90IGRhdGEg PSB7fTsKKwlpbnQgZ2VuID0gMDsKKwlpbnQgcGxhbmVfaXQgPSAwLCBpdF9yb3RhdGlvbiA9IDAs IGl0X3RpbGluZyA9IDA7CisKKwlpZ3Rfc2tpcF9vbl9zaW11bGF0aW9uKCk7CisKKwlpZ3RfZml4 dHVyZXsKKwkJZGF0YS5kcm1fZmQgPSBkcm1fb3Blbl9hbnlfbWFzdGVyKCk7CisKKwkJa21zdGVz dF9zZXRfdnRfZ3JhcGhpY3NfbW9kZSgpOworCisJCWlndF9kaXNwbGF5X2luaXQoJmRhdGEuZGlz cGxheSwgZGF0YS5kcm1fZmQpOworCX0KKwlpZ3Rfc3VidGVzdF9mKCJFbmFibGVfR2FtbWFfOGJp dCIpIHsKKwkJdGVzdF9waXBlX2NvbG9yKCZkYXRhLCAiZ2FtbWFfcHJvcGVydHlfOGJpdCIsIFJB TkRPTSk7CisJfQorCWlndF9zdWJ0ZXN0X2YoIkRpc2FibGVfR2FtbWFfOGJpdCIpIHsKKwkJdGVz dF9waXBlX2NvbG9yKCZkYXRhLCAiZ2FtbWFfcHJvcGVydHlfOGJpdCIsIERFRkFVTFQpOworCX0K KwlpZ3Rfc3VidGVzdF9mKCJFbmFibGVfR2FtbWFfMTBiaXQiKSB7CisJCXRlc3RfcGlwZV9jb2xv cigmZGF0YSwgImdhbW1hX3Byb3BlcnR5XzEwYml0IiwgUkFORE9NKTsKKwl9CisJaWd0X3N1YnRl c3RfZigiRGlzYWJsZV9HYW1tYV8xMGJpdCIpIHsKKwkJdGVzdF9waXBlX2NvbG9yKCZkYXRhLCAi Z2FtbWFfcHJvcGVydHlfMTBiaXQiLCBERUZBVUxUKTsKKwl9CisKKwlpZ3Rfc3VidGVzdF9mKCJF bmFibGVfRGUtZ2FtbWEiKSB7CisJCXRlc3RfcGlwZV9jb2xvcigmZGF0YSwgImRlZ2FtbWFfcHJv cGVydHkiLCBSQU5ET00pOworCX0KKwlpZ3Rfc3VidGVzdF9mKCJFbmFibGVfRGUtZ2FtbWEiKSB7 CisJCXRlc3RfcGlwZV9jb2xvcigmZGF0YSwgImRlZ2FtbWFfcHJvcGVydHkiLCBERUZBVUxUKTsK Kwl9CisJaWd0X3N1YnRlc3RfZigiRW5hYmxlX0NTQyIpIHsKKwkJdGVzdF9waXBlX2NvbG9yKCZk YXRhLCAiY3NjX3Byb3BlcnR5IiwgUkFORE9NKTsKKwl9CisKKwlpZ3RfZml4dHVyZXsKKwkJaWd0 X2Rpc3BsYXlfZmluaSgmZGF0YS5kaXNwbGF5KTsKKwl9Cit9CisKLS0gCjEuOS4xCgpfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGlu ZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVk ZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=