From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mblankhorst.nl (mblankhorst.nl [IPv6:2a02:2308::216:3eff:fe92:dfa3]) by gabe.freedesktop.org (Postfix) with ESMTPS id 18D486E952 for ; Thu, 14 Feb 2019 15:29:12 +0000 (UTC) Date: Thu, 14 Feb 2019 16:29:08 +0100 Message-Id: <20190214152908.32606-1-maarten.lankhorst@linux.intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t] tests/kms_yuv: Add yuv specific tests. List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , From: Maarten Lankhorst via igt-dev Reply-To: Maarten Lankhorst 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: QWRkIHRlc3RzIGV4Y2VyY2lzaW5nIHN3aXRjaGluZyBiZXR3ZWVuIHZhcmlvdXMgc2NhbGVkL3Vu c2NhbGVkCnRyYW5zaXRpb25zIHRvIGFuZCBmcm9tIHZhcmlvdXMgbnYxMiBmb3JtYXRzLCBzaW5j ZSBzb21lIG9mIHRoZQp3b3JrYXJvdW5kcyBtZW50aW9uIHRoaXMgbWF5IGZhaWwuCgpXZSBhbHNv IGFkZCBOVjEyIHNwZWNpZmljIGNsaXBwaW5nL3NjYWxpbmcgdGVzdHMsIHRvIG1ha2Ugc3VyZQp0 aGF0IFlVViBzcmMgY29vcmRpbmF0ZXMgYXJlIGFsd2F5cyBwcm9ncmFtbWVkIGFzIGEgbXVsdGlw bGUgb2YgMgpjb3JyZWN0bHksIGFuZCB2ZXJpZnkgc2NhbGluZy9jbGlwcGluZyB3b3JrcyB3aXRo IENSQyB0ZXN0cy4KCmNyb3Atc2NhbGUtYnVnIHNob3dzIGEgY29ycnVwdGlvbiB3aGVuIHNjYWxp bmcgYW5kIGNyb3BwaW5nIGF0IHRoZQpzYW1lIHRpbWUuCgpUaGUgc3VicGl4ZWwgY2xpcCB0ZXN0 IHJvdGF0ZXMgYW5kIGNsaXBzIGEgcmVjdGFuZ2xlIG9uIGVhY2ggc2lkZSwKd2hpY2ggc2hvdWxk IHByb2R1Y2UgdGhlIHNhbWUgQ1JDIGFzIHdoZW4gdGhhdCBwYXJ0IG9mIHRoZSByZWN0YW5nbGUK aXMgaGlkZGVuIGJ5IGEgY3Vyc29yIGFuZCBhIHdob2xlIDJ4MiBwaXhlbCBpcyBoaWRkZW4uCgpT aWduZWQtb2ZmLWJ5OiBNYWFydGVuIExhbmtob3JzdCA8bWFhcnRlbi5sYW5raG9yc3RAbGludXgu aW50ZWwuY29tPgotLS0KIHRlc3RzL01ha2VmaWxlLnNvdXJjZXMgfCAgIDEgKwogdGVzdHMva21z X3l1di5jICAgICAgICB8IDg0NSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKwogdGVzdHMvbWVzb24uYnVpbGQgICAgICB8ICAgMSArCiAzIGZpbGVzIGNoYW5nZWQsIDg0 NyBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdHMva21zX3l1di5jCgpkaWZm IC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUuc291cmNlcyBiL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMK aW5kZXggYTIzNGZhNWRkNTUzLi5kOGViNThhODVlZDIgMTAwNjQ0Ci0tLSBhL3Rlc3RzL01ha2Vm aWxlLnNvdXJjZXMKKysrIGIvdGVzdHMvTWFrZWZpbGUuc291cmNlcwpAQCAtNzIsNiArNzIsNyBA QCBURVNUU19wcm9ncyA9IFwKIAlrbXNfdW5pdmVyc2FsX3BsYW5lIFwKIAlrbXNfdmJsYW5rIFwK IAlrbXNfdnJyIFwKKwlrbXNfeXV2IFwKIAlrbXNfc2VxdWVuY2UgXAogCW1ldGFfdGVzdCBcCiAJ cGVyZiBcCmRpZmYgLS1naXQgYS90ZXN0cy9rbXNfeXV2LmMgYi90ZXN0cy9rbXNfeXV2LmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi45YTA0ODNmMTYzMWUKLS0tIC9k ZXYvbnVsbAorKysgYi90ZXN0cy9rbXNfeXV2LmMKQEAgLTAsMCArMSw4NDUgQEAKKy8qCisgKiBD b3B5cmlnaHQgwqkgMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMg aGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBh CisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBm aWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91 dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0 cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1Ymxp Y2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVy bWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBz bywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3Zl IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5j bHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNv ZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VU IFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcg QlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAq IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElO IE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBM SUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVU SEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcK KyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRI RSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRo b3JzOgorICogICAgTWFhcnRlbiBMYW5raG9yc3QgPG1hYXJ0ZW4ubGFua2hvcnN0QGxpbnV4Lmlu dGVsLmNvbT4KKyAqLworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiaWd0LmgiCisj aW5jbHVkZSA8Y2Fpcm8uaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGludC5o PgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisKK3R5cGVkZWYg c3RydWN0IHsKKwlpZ3RfZGlzcGxheV90IGRpc3BsYXk7CisKKwlpZ3RfcGlwZV9jcmNfdCAqcGlw ZV9jcmM7CisJc3RydWN0IGlndF9mYiBmYls2XTsKK30gZGF0YV90OworCitzdGF0aWMgYm9vbCBw bGFuZV9zdXBwb3J0c19mb3JtYXQoaWd0X3BsYW5lX3QgKnBsYW5lLCB1aW50MzJfdCBmb3JtYXQp Cit7CisJaW50IGk7CisKKwlpZiAoIWlndF9mYl9zdXBwb3J0ZWRfZm9ybWF0KGZvcm1hdCkpCisJ CXJldHVybiBmYWxzZTsKKworCWZvciAoaSA9IDA7IGkgPCBwbGFuZS0+ZHJtX3BsYW5lLT5jb3Vu dF9mb3JtYXRzOyBpKyspCisJCWlmIChwbGFuZS0+ZHJtX3BsYW5lLT5mb3JtYXRzW2ldID09IGZv cm1hdCkKKwkJCXJldHVybiB0cnVlOworCisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgYm9v bCBwaXBlX3N1cHBvcnRzX2Zvcm1hdChpZ3RfZGlzcGxheV90ICpkaXNwbGF5LCBlbnVtIHBpcGUg cGlwZSwgdWludDMyX3QgZm9ybWF0KQoreworCWlndF9wbGFuZV90ICpwbGFuZTsKKworCWZvcl9l YWNoX3BsYW5lX29uX3BpcGUoZGlzcGxheSwgcGlwZSwgcGxhbmUpCisJCWlmIChwbGFuZV9zdXBw b3J0c19mb3JtYXQocGxhbmUsIGZvcm1hdCkpCisJCQlyZXR1cm4gdHJ1ZTsKKworCXJldHVybiBm YWxzZTsKK30KKworc3RhdGljIHZvaWQgcmVtb3ZlX2ZicyhkYXRhX3QgKmRhdGEpCit7CisJaW50 IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkYXRhLT5mYik7IGkrKykKKwkJaWd0 X3JlbW92ZV9mYihkYXRhLT5kaXNwbGF5LmRybV9mZCwgJmRhdGEtPmZiW2ldKTsKK30KKworc3Rh dGljIHZvaWQgcHJlcGFyZV9jcnRjKGRhdGFfdCAqZGF0YSwgZW51bSBwaXBlIHBpcGUsIGlndF9v dXRwdXRfdCAqb3V0cHV0KQoreworCWlndF9kaXNwbGF5X3QgKmRpc3BsYXkgPSAmZGF0YS0+ZGlz cGxheTsKKworCXJlbW92ZV9mYnMoZGF0YSk7CisJaWd0X2Rpc3BsYXlfcmVzZXQoZGlzcGxheSk7 CisJaWd0X291dHB1dF9zZXRfcGlwZShvdXRwdXQsIHBpcGUpOworCWlndF9kaXNwbGF5X2NvbW1p dDIoZGlzcGxheSwgQ09NTUlUX0FUT01JQyk7CisKKwlpZ3RfcGlwZV9jcmNfZnJlZShkYXRhLT5w aXBlX2NyYyk7CisJZGF0YS0+cGlwZV9jcmMgPSBpZ3RfcGlwZV9jcmNfbmV3KGRpc3BsYXktPmRy bV9mZCwgcGlwZSwgSU5URUxfUElQRV9DUkNfU09VUkNFX0FVVE8pOworfQorCitzdGF0aWMgdm9p ZCBzZXRfZmIoaWd0X3BsYW5lX3QgKnBsYW5lLCBzdHJ1Y3QgaWd0X2ZiICpmYiwgYm9vbCBzY2Fs ZWQpCit7CisJaWd0X3BsYW5lX3NldF9mYihwbGFuZSwgZmIpOworCisJaWYgKHNjYWxlZCAmJiBm YikKKwkJaWd0X2ZiX3NldF9zaXplKGZiLCBwbGFuZSwgZmItPndpZHRoLCAxNik7CisKKwlpZiAo ZmIgJiYgZmItPnRpbGluZyA9PSBMT0NBTF9JOTE1X0ZPUk1BVF9NT0RfWV9USUxFRCkgeworCQlp Z3RfcGxhbmVfc2V0X3JvdGF0aW9uKHBsYW5lLCBJR1RfUk9UQVRJT05fOTApOworCQlpZ3RfcGxh bmVfc2V0X3NpemUocGxhbmUsIGZiLT5oZWlnaHQsIGZiLT53aWR0aCk7CisJfSBlbHNlCisJCWln dF9wbGFuZV9zZXRfcm90YXRpb24ocGxhbmUsIElHVF9ST1RBVElPTl8wKTsKK30KKworc3RhdGlj IHZvaWQgeXV2X3JnYl9zd2l0Y2goZGF0YV90ICpkYXRhLCBlbnVtIHBpcGUgcGlwZSwgaWd0X291 dHB1dF90ICpvdXRwdXQsIGJvb2wgc2NhbGVkLCB1bnNpZ25lZCBmb3JtYXQpCit7CisJZHJtTW9k ZU1vZGVJbmZvICptb2RlID0gaWd0X291dHB1dF9nZXRfbW9kZShvdXRwdXQpOworCWlndF9kaXNw bGF5X3QgKmRpc3BsYXkgPSAmZGF0YS0+ZGlzcGxheTsKKwlpZ3RfcGxhbmVfdCAqcGxhbmU7CisJ aW50IGk7CisJaWd0X2NyY190IHJlZl9jcmNbNF0sIGNyYzsKKworCXByZXBhcmVfY3J0YyhkYXRh LCBwaXBlLCBvdXRwdXQpOworCisJaWd0X2NyZWF0ZV9wYXR0ZXJuX2ZiKGRpc3BsYXktPmRybV9m ZCwgbW9kZS0+aGRpc3BsYXksIG1vZGUtPnZkaXNwbGF5LAorCQkJICAgICAgZm9ybWF0LCBMT0NB TF9JOTE1X0ZPUk1BVF9NT0RfWF9USUxFRCwKKwkJCSAgICAgICZkYXRhLT5mYlswXSk7CisKKwlp Z3RfY3JlYXRlX3BhdHRlcm5fZmIoZGlzcGxheS0+ZHJtX2ZkLCBtb2RlLT52ZGlzcGxheSwgbW9k ZS0+aGRpc3BsYXksCisJCQkgICAgICBmb3JtYXQsIExPQ0FMX0k5MTVfRk9STUFUX01PRF9ZX1RJ TEVELAorCQkJICAgICAgJmRhdGEtPmZiWzFdKTsKKworCWlndF9jcmVhdGVfcGF0dGVybl9mYihk aXNwbGF5LT5kcm1fZmQsIG1vZGUtPmhkaXNwbGF5LCBtb2RlLT52ZGlzcGxheSwKKwkJCSAgICAg IERSTV9GT1JNQVRfWFJHQjg4ODgsIExPQ0FMX0k5MTVfRk9STUFUX01PRF9YX1RJTEVELAorCQkJ ICAgICAgJmRhdGEtPmZiWzJdKTsKKworCWlndF9jcmVhdGVfcGF0dGVybl9mYihkaXNwbGF5LT5k cm1fZmQsIG1vZGUtPnZkaXNwbGF5LCBtb2RlLT5oZGlzcGxheSwKKwkJCSAgICAgIERSTV9GT1JN QVRfWFJHQjg4ODgsIExPQ0FMX0k5MTVfRk9STUFUX01PRF9ZX1RJTEVELAorCQkJICAgICAgJmRh dGEtPmZiWzNdKTsKKworCWZvcl9lYWNoX3BsYW5lX29uX3BpcGUoZGlzcGxheSwgcGlwZSwgcGxh bmUpIHsKKwkJaWYgKCFwbGFuZV9zdXBwb3J0c19mb3JtYXQocGxhbmUsIERSTV9GT1JNQVRfWFJH Qjg4ODgpKQorCQkJY29udGludWU7CisKKwkJLyogV2Ugb25seSBoYXZlIGZldyBzY2FsZXJzLCBk b24ndCB1c2UgMSBmb3IgdW51c2VkIHBsYW5lcyAqLworCQlpZiAocGxhbmUtPnR5cGUgIT0gRFJN X1BMQU5FX1RZUEVfQ1VSU09SICYmICFzY2FsZWQpCisJCQlzZXRfZmIocGxhbmUsICZkYXRhLT5m YlszXSwgZmFsc2UpOworCX0KKworCWZvcl9lYWNoX3BsYW5lX29uX3BpcGUoZGlzcGxheSwgcGlw ZSwgcGxhbmUpIHsKKwkJY29uc3QgaW50IHNlcVtdID0geworCQkJMiwgMCwgMiwgMSwgMywgMSwg MworCQl9OworCisJCWlmICghcGxhbmVfc3VwcG9ydHNfZm9ybWF0KHBsYW5lLCBmb3JtYXQpKQor CQkJY29udGludWU7CisKKwkJLyogQ29sbGVjdCByZWZlcmVuY2UgY3JjIHdpdGggdG9nZ2xlIGlu IGJldHdlZW4uICovCisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJlZl9jcmMpOyBpKysp IHsKKwkJCXNldF9mYihwbGFuZSwgJmRhdGEtPmZiW2ldLCBzY2FsZWQpOworCQkJaWd0X2Rpc3Bs YXlfY29tbWl0MihkaXNwbGF5LCBDT01NSVRfQVRPTUlDKTsKKworCQkJaWd0X3BpcGVfY3JjX2Nv bGxlY3RfY3JjKGRhdGEtPnBpcGVfY3JjLCAmcmVmX2NyY1tpXSk7CisKKwkJCXNldF9mYihwbGFu ZSwgTlVMTCwgc2NhbGVkKTsKKwkJCWlndF9kaXNwbGF5X2NvbW1pdDIoZGlzcGxheSwgQ09NTUlU X0FUT01JQyk7CisJCX0KKworCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzZXEpOyBpKysp IHsKKwkJCWludCBqID0gc2VxW2ldOworCisJCQlzZXRfZmIocGxhbmUsICZkYXRhLT5mYltqXSwg c2NhbGVkKTsKKwkJCWlndF9kaXNwbGF5X2NvbW1pdDIoZGlzcGxheSwgQ09NTUlUX0FUT01JQyk7 CisKKwkJCWlndF9waXBlX2NyY19jb2xsZWN0X2NyYyhkYXRhLT5waXBlX2NyYywgJmNyYyk7CisJ CQlpZ3RfYXNzZXJ0X2NyY19lcXVhbCgmcmVmX2NyY1tqXSwgJmNyYyk7CisJCX0KKworCQkvKiBX ZSBvbmx5IGhhdmUgZmV3IHNjYWxlcnMsIGRvbid0IHVzZSAxIGZvciB1bnVzZWQgcGxhbmVzICov CisJCWlmIChzY2FsZWQpCisJCQlpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCBOVUxMKTsKKwl9Cit9 CisKKyNkZWZpbmUgYXNzZXJ0X2NvbGxlY3RlZF9jcmNfZXF1YWwocGlwZV9jcmMsIGNyYywgcmVm X2NyYykgXAorCWRvIHsgXAorCQlpZ3RfcGlwZV9jcmNfZ2V0X2N1cnJlbnQoZGlzcGxheS0+ZHJt X2ZkLCBwaXBlX2NyYywgY3JjKTsJXAorCQlpZ3RfYXNzZXJ0X2NyY19lcXVhbChyZWZfY3JjLCBj cmMpOwlcCisJfSB3aGlsZSAoMCkKKworc3RhdGljIHZvaWQgc2V0X3NyY19jb29yZHMoaWd0X3Bs YW5lX3QgKnBsYW5lLCBzdHJ1Y3QgaWd0X2ZiICpmYiwKKwkJCSAgIGlndF9yb3RhdGlvbl90IHJv dCwgaW50IHZpcywgaW50IGhpZGRlbikKK3sKKwlzd2l0Y2ggKHJvdCkgeworCWNhc2UgSUdUX1JP VEFUSU9OXzA6CisJCWlndF9mYl9zZXRfcG9zaXRpb24oZmIsIHBsYW5lLCBmYi0+d2lkdGggLyAy IC0gdmlzLCBmYi0+aGVpZ2h0IC8gMiAtIHZpcyk7CisJCWJyZWFrOworCWNhc2UgSUdUX1JPVEFU SU9OXzkwOgorCQlpZ3RfZmJfc2V0X3Bvc2l0aW9uKGZiLCBwbGFuZSwgZmItPndpZHRoIC8gMiAt IGhpZGRlbiwgZmItPmhlaWdodCAvIDIgLSB2aXMpOworCQlicmVhazsKKwljYXNlIElHVF9ST1RB VElPTl8xODA6CisJCWlndF9mYl9zZXRfcG9zaXRpb24oZmIsIHBsYW5lLCBmYi0+d2lkdGggLyAy IC0gaGlkZGVuLCBmYi0+aGVpZ2h0IC8gMiAtIGhpZGRlbik7CisJCWJyZWFrOworCWNhc2UgSUdU X1JPVEFUSU9OXzI3MDoKKwkJaWd0X2ZiX3NldF9wb3NpdGlvbihmYiwgcGxhbmUsIGZiLT53aWR0 aCAvIDIgLSB2aXMsIGZiLT5oZWlnaHQgLyAyIC0gaGlkZGVuKTsKKwkJYnJlYWs7CisJZGVmYXVs dDogaWd0X2Fzc2VydCgwKTsKKwl9CisJaWd0X2ZiX3NldF9zaXplKGZiLCBwbGFuZSwgdmlzICsg aGlkZGVuLCB2aXMgKyBoaWRkZW4pOworfQorCitzdGF0aWMgdm9pZCB5dXZfdmFsaWRfd2lkdGhf cGxhbmUoZGF0YV90ICpkYXRhLCBkcm1Nb2RlTW9kZUluZm8gKm1vZGUsCisJCQkJICAgaWd0X3Bs YW5lX3QgKnBsYW5lLCBzdHJ1Y3QgaWd0X2ZiICpmYiwKKwkJCQkgICBpZ3Rfcm90YXRpb25fdCBy b3QsIGlndF9jcmNfdCAqcmVmX2NyYykKK3sKKwlpZ3RfZGlzcGxheV90ICpkaXNwbGF5ID0gJmRh dGEtPmRpc3BsYXk7CisJaWd0X2NyY190IGNyYzsKKwlzdHJ1Y3QgaWd0X2ZiICpjbGlwX2ZiID0g JmRhdGEtPmZiWzJdOworCWludCBpLCByZXQ7CisKKwlpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCBm Yik7CisJaWd0X3BsYW5lX3NldF9yb3RhdGlvbihwbGFuZSwgcm90KTsKKwlpZiAocm90ICYgKElH VF9ST1RBVElPTl85MCB8IElHVF9ST1RBVElPTl8yNzApKQorCQlpZ3RfcGxhbmVfc2V0X3NpemUo cGxhbmUsIGZiLT5oZWlnaHQsIGZiLT53aWR0aCk7CisJaWd0X2Rpc3BsYXlfY29tbWl0MihkaXNw bGF5LCBDT01NSVRfQVRPTUlDKTsKKworCS8qIEp1c3QgY2xpcHBpbmcuLiAqLworCWlndF9wbGFu ZV9zZXRfZmIocGxhbmUsIGNsaXBfZmIpOworCWlmIChyb3QgJiAoSUdUX1JPVEFUSU9OXzkwIHwg SUdUX1JPVEFUSU9OXzI3MCkpCisJCWlndF9wbGFuZV9zZXRfc2l6ZShwbGFuZSwgY2xpcF9mYi0+ aGVpZ2h0LCBjbGlwX2ZiLT53aWR0aCk7CisJaWd0X3BsYW5lX3NldF9wb3NpdGlvbihwbGFuZSwg bW9kZS0+aGRpc3BsYXkgLSBjbGlwX2ZiLT53aWR0aCAvIDIsIG1vZGUtPnZkaXNwbGF5IC0gY2xp cF9mYi0+aGVpZ2h0IC8gMik7CisJaWd0X2Rpc3BsYXlfY29tbWl0MihkaXNwbGF5LCBDT01NSVRf QVRPTUlDKTsKKwlhc3NlcnRfY29sbGVjdGVkX2NyY19lcXVhbChkYXRhLT5waXBlX2NyYywgJmNy YywgcmVmX2NyYyk7CisKKwkvKiBDbGlwcGluZyBhbmQgc2NhbGluZy4gKi8KKwlpZ3RfZmJfc2V0 X3Bvc2l0aW9uKGNsaXBfZmIsIHBsYW5lLCBjbGlwX2ZiLT53aWR0aCAvIDIgLSAxNiwgY2xpcF9m Yi0+aGVpZ2h0IC8gMiAtIDE2KTsKKwlpZ3RfZmJfc2V0X3NpemUoY2xpcF9mYiwgcGxhbmUsIDMy LCAzMik7CisJaWd0X2Rpc3BsYXlfY29tbWl0MihkaXNwbGF5LCBDT01NSVRfQVRPTUlDKTsKKwlh c3NlcnRfY29sbGVjdGVkX2NyY19lcXVhbChkYXRhLT5waXBlX2NyYywgJmNyYywgcmVmX2NyYyk7 CisKKwkvKiBUcnkgbnZhbGlkIDwgOCBzcmMgdmlzaWJsZS4gKi8KKwlzZXRfc3JjX2Nvb3Jkcyhw bGFuZSwgY2xpcF9mYiwgcm90LCA0LCA0KTsKKwlpZ3RfZGlzcGxheV90cnlfY29tbWl0MihkaXNw bGF5LCBDT01NSVRfQVRPTUlDKTsKKworCS8qIFRyeSBkaWZmZXJlbnQgYWxpZ25tZW50cyBmb3Ig eC95IHRvIHNlZSBpZiBhbnkgaGl0IHVuZGVycnVucyAqLworCWZvciAoaSA9IDE7IGkgPCA0OyBp KyspIHsKKwkJc2V0X3NyY19jb29yZHMocGxhbmUsIGNsaXBfZmIsIHJvdCwgMTYgKyAyICogaSwg MTYgLSAyICogaSk7CisJCWlndF9kaXNwbGF5X2NvbW1pdDIoZGlzcGxheSwgQ09NTUlUX0FUT01J Qyk7CisJCWFzc2VydF9jb2xsZWN0ZWRfY3JjX2VxdWFsKGRhdGEtPnBpcGVfY3JjLCAmY3JjLCBy ZWZfY3JjKTsKKworCQkvKiBBbmQgYWxzbyBzaG93IG1vcmUgb2YgdGhlIHNjcmVlbiAqLworCQlz ZXRfc3JjX2Nvb3JkcyhwbGFuZSwgY2xpcF9mYiwgcm90LCAxNiArIGksIDE2ICsgaSk7CisJCXJl dCA9IGlndF9kaXNwbGF5X3RyeV9jb21taXQyKGRpc3BsYXksIENPTU1JVF9BVE9NSUMpOworCisJ CWlmIChyZXQgPT0gLUVJTlZBTCkgeworCQkJaWd0X2Fzc2VydChpICUgMiB8fCByb3QgPT0gSUdU X1JPVEFUSU9OXzI3MCB8fCByb3QgPT0gKElHVF9ST1RBVElPTl85MCB8IElHVF9SRUZMRUNUX1gp KTsKKwkJCWNvbnRpbnVlOworCQl9IGVsc2UKKwkJCWlndF9hc3NlcnRfZXEocmV0LCAwKTsKKwkJ YXNzZXJ0X2NvbGxlY3RlZF9jcmNfZXF1YWwoZGF0YS0+cGlwZV9jcmMsICZjcmMsIHJlZl9jcmMp OworCX0KKworCS8qCisJICogQXMgYSBmaW5hbCB0ZXN0LCB0cnkgd2l0aCAxNiBzcmMgdmlzaWJs ZSwgYW5kIHZhcmlvdXMgaW52aXNpYmxlCisJICogY29tcG9uZW50cyB0byBjaGVjayBjbGlwcGlu ZyBkb2Vzbid0IGRyb3AgdGhlIHZpc2libGUgc3JjIGJlbG93IDE2LgorCSAqLworCWZvciAoaSA9 IDA7IGkgPCAxNjsgaSArPSA0KSB7CisJCXNldF9zcmNfY29vcmRzKHBsYW5lLCBjbGlwX2ZiLCBy b3QsIDE2LCBpKTsKKwkJaWYgKHJvdCAmIChJR1RfUk9UQVRJT05fOTAgfCBJR1RfUk9UQVRJT05f MjcwKSkKKwkJCWlndF9wbGFuZV9zZXRfc2l6ZShwbGFuZSwgKGNsaXBfZmItPmhlaWdodCAvIDMy KSAqICgxNiArIGkpLAorCQkJCQkgICAoY2xpcF9mYi0+d2lkdGggLyAzMikgKiAoMTYgKyBpKSk7 CisJCWVsc2UKKwkJCWlndF9wbGFuZV9zZXRfc2l6ZShwbGFuZSwgKGNsaXBfZmItPndpZHRoIC8g MzIpICogKDE2ICsgaSksCisJCQkJCSAgIChjbGlwX2ZiLT5oZWlnaHQgLyAzMikgKiAoMTYgKyBp KSk7CisJCWlndF9kaXNwbGF5X2NvbW1pdDIoZGlzcGxheSwgQ09NTUlUX0FUT01JQyk7CisJCWFz c2VydF9jb2xsZWN0ZWRfY3JjX2VxdWFsKGRhdGEtPnBpcGVfY3JjLCAmY3JjLCByZWZfY3JjKTsK Kwl9Cit9CisKK3N0YXRpYyB2b2lkIHl1dl92YWxpZF93aWR0aChkYXRhX3QgKmRhdGEsIGVudW0g cGlwZSBwaXBlLCBpZ3Rfb3V0cHV0X3QgKm91dHB1dCwgdW5zaWduZWQgZm9ybWF0KQoreworCWRy bU1vZGVNb2RlSW5mbyAqbW9kZSA9IGlndF9vdXRwdXRfZ2V0X21vZGUob3V0cHV0KTsKKwlpZ3Rf ZGlzcGxheV90ICpkaXNwbGF5ID0gJmRhdGEtPmRpc3BsYXk7CisJaWd0X3BsYW5lX3QgKnBsYW5l OworCXN0cnVjdCBpZ3RfZmIgKmNsaXBfZmIgPSAmZGF0YS0+ZmJbMl07CisJc3RydWN0IGlndF9m YiAqcmVmX2ZiID0gJmRhdGEtPmZiWzNdOworCisJcHJlcGFyZV9jcnRjKGRhdGEsIHBpcGUsIG91 dHB1dCk7CisKKwlpZ3RfY3JlYXRlX3BhdHRlcm5fZmIoZGlzcGxheS0+ZHJtX2ZkLCBtb2RlLT5o ZGlzcGxheSwgbW9kZS0+dmRpc3BsYXksCisJCQkgICAgICBmb3JtYXQsIExPQ0FMX0k5MTVfRk9S TUFUX01PRF9YX1RJTEVELAorCQkJICAgICAgJmRhdGEtPmZiWzBdKTsKKworCWlndF9jcmVhdGVf cGF0dGVybl9mYihkaXNwbGF5LT5kcm1fZmQsIG1vZGUtPnZkaXNwbGF5LCBtb2RlLT5oZGlzcGxh eSwKKwkJCSAgICAgIGZvcm1hdCwgTE9DQUxfSTkxNV9GT1JNQVRfTU9EX1lfVElMRUQsCisJCQkg ICAgICAmZGF0YS0+ZmJbMV0pOworCisJaWd0X2NyZWF0ZV9mYihkaXNwbGF5LT5kcm1fZmQsIDY0 LCA2NCwgZm9ybWF0LAorCQkgICAgICBMT0NBTF9JOTE1X0ZPUk1BVF9NT0RfWV9USUxFRCwgcmVm X2ZiKTsKKworCWlndF9jcmVhdGVfZmIoZGlzcGxheS0+ZHJtX2ZkLCAyICogcmVmX2ZiLT53aWR0 aCwKKwkJICAgICAgMiAqIHJlZl9mYi0+aGVpZ2h0LCBmb3JtYXQsCisJCSAgICAgIExPQ0FMX0k5 MTVfRk9STUFUX01PRF9ZX1RJTEVELCBjbGlwX2ZiKTsKKworCWlndF9waXBlX2NyY19zdGFydChk YXRhLT5waXBlX2NyYyk7CisKKwlmb3JfZWFjaF9wbGFuZV9vbl9waXBlKGRpc3BsYXksIHBpcGUs IHBsYW5lKSB7CisJCWlndF9jcmNfdCByZWZfY3JjWzRdOworCQljYWlyb190ICpjcjsKKwkJc3Rh dGljIGNvbnN0IGRvdWJsZSBjb2xvcnNbNF1bM10gPSB7CisJCQl7IDEuLCAwLiwgMC4gfSwKKwkJ CXsgMC4sIDEuLCAwLiB9LAorCQkJeyAwLiwgMC4sIDEuIH0sCisJCQl7IDEuLCAxLiwgMS4gfQor CQl9OworCQlpbnQgaTsKKworCQlpZiAoIXBsYW5lX3N1cHBvcnRzX2Zvcm1hdChwbGFuZSwgZm9y bWF0KSkKKwkJCWNvbnRpbnVlOworCisJCS8qIERyYXcgdGhlIEZCIHRoYXQgd2lsbCBiZSB1c2Vk IGZvciBjbGlwcGluZyB0ZXN0cy4gKi8KKwkJY3IgPSBpZ3RfZ2V0X2NhaXJvX2N0eChkaXNwbGF5 LT5kcm1fZmQsIGNsaXBfZmIpOworCQlpZ3RfcGFpbnRfY29sb3IoY3IsIDAsIDAsIGNsaXBfZmIt PndpZHRoIC8gMiwgY2xpcF9mYi0+aGVpZ2h0IC8gMiwKKwkJCQljb2xvcnNbMF1bMF0sIGNvbG9y c1swXVsxXSwgY29sb3JzWzBdWzJdKTsKKworCQlpZ3RfcGFpbnRfY29sb3IoY3IsIGNsaXBfZmIt PndpZHRoIC8gMiwgMCwKKwkJCQljbGlwX2ZiLT53aWR0aCAvIDIsIGNsaXBfZmItPmhlaWdodCAv IDIsCisJCQkJY29sb3JzWzFdWzBdLCBjb2xvcnNbMV1bMV0sIGNvbG9yc1sxXVsyXSk7CisKKwkJ aWd0X3BhaW50X2NvbG9yKGNyLCBjbGlwX2ZiLT53aWR0aCAvIDIsIGNsaXBfZmItPmhlaWdodCAv IDIsCisJCQkJY2xpcF9mYi0+d2lkdGggLyAyLCBjbGlwX2ZiLT5oZWlnaHQgLyAyLAorCQkJCWNv bG9yc1syXVswXSwgY29sb3JzWzJdWzFdLCBjb2xvcnNbMl1bMl0pOworCisJCWlndF9wYWludF9j b2xvcihjciwgMCwgY2xpcF9mYi0+aGVpZ2h0IC8gMiwKKwkJCQljbGlwX2ZiLT53aWR0aCAvIDIs IGNsaXBfZmItPmhlaWdodCAvIDIsCisJCQkJY29sb3JzWzNdWzBdLCBjb2xvcnNbM11bMV0sIGNv bG9yc1szXVsyXSk7CisKKwkJaWd0X3B1dF9jYWlyb19jdHgoZGlzcGxheS0+ZHJtX2ZkLCBjbGlw X2ZiLCBjcik7CisKKwkJLyogRHJhdyBhbGwgcmVmZXJlbmNlIEZCJ3MgdG8gY29sbGVjdCB0aGUg Q1JDLiAqLworCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCQljciA9IGlndF9nZXRfY2Fp cm9fY3R4KGRpc3BsYXktPmRybV9mZCwgcmVmX2ZiKTsKKwkJCWlndF9wYWludF9jb2xvcihjciwg MCwgMCwgcmVmX2ZiLT53aWR0aCwgcmVmX2ZiLT5oZWlnaHQsCisJCQkJCWNvbG9yc1tpXVswXSwg Y29sb3JzW2ldWzFdLCBjb2xvcnNbaV1bMl0pOworCQkJaWd0X3B1dF9jYWlyb19jdHgoZGlzcGxh eS0+ZHJtX2ZkLCAmZGF0YS0+ZmJbM10sIGNyKTsKKworCQkJaWYgKCFpKSB7CisJCQkJaWd0X3Bs YW5lX3NldF9mYihwbGFuZSwgcmVmX2ZiKTsKKwkJCQlpZ3RfcGxhbmVfc2V0X3Bvc2l0aW9uKHBs YW5lLCBtb2RlLT5oZGlzcGxheSAtIHJlZl9mYi0+d2lkdGgsIG1vZGUtPnZkaXNwbGF5IC0gcmVm X2ZiLT5oZWlnaHQpOworCQkJCWlndF9kaXNwbGF5X2NvbW1pdDIoZGlzcGxheSwgQ09NTUlUX0FU T01JQyk7CisJCQl9IGVsc2UgeworCQkJCWlndF9kaXJ0eV9mYihkaXNwbGF5LT5kcm1fZmQsIHJl Zl9mYik7CisJCQkJaWd0X3dhaXRfZm9yX3ZibGFuayhkaXNwbGF5LT5kcm1fZmQsIHBpcGUpOwor CQkJfQorCisJCQlpZ3RfcGlwZV9jcmNfZHJhaW4oZGF0YS0+cGlwZV9jcmMpOworCQkJaWd0X3Bp cGVfY3JjX2dldF9zaW5nbGUoZGF0YS0+cGlwZV9jcmMsICZyZWZfY3JjW2ldKTsKKwkJfQorCisJ CWlndF9wbGFuZV9zZXRfZmIocGxhbmUsIE5VTEwpOworCQlpZ3RfcGxhbmVfc2V0X3Bvc2l0aW9u KHBsYW5lLCAwLCAwKTsKKworCQl5dXZfdmFsaWRfd2lkdGhfcGxhbmUoZGF0YSwgbW9kZSwgcGxh bmUsICZkYXRhLT5mYlswXSwgSUdUX1JPVEFUSU9OXzAsICZyZWZfY3JjWzBdKTsKKwkJeXV2X3Zh bGlkX3dpZHRoX3BsYW5lKGRhdGEsIG1vZGUsIHBsYW5lLCAmZGF0YS0+ZmJbMV0sIElHVF9ST1RB VElPTl85MCwgJnJlZl9jcmNbMV0pOworCQl5dXZfdmFsaWRfd2lkdGhfcGxhbmUoZGF0YSwgbW9k ZSwgcGxhbmUsICZkYXRhLT5mYlswXSwgSUdUX1JPVEFUSU9OXzE4MCwgJnJlZl9jcmNbMl0pOwor CQl5dXZfdmFsaWRfd2lkdGhfcGxhbmUoZGF0YSwgbW9kZSwgcGxhbmUsICZkYXRhLT5mYlsxXSwg SUdUX1JPVEFUSU9OXzI3MCwgJnJlZl9jcmNbM10pOworCisJCWlndF9wbGFuZV9zZXRfZmIocGxh bmUsIE5VTEwpOworCX0KK30KKworc3RhdGljIGJvb2wgeXV2X2NvbW1pdF9yb3RhdGVkKGlndF9k aXNwbGF5X3QgKmRpc3BsYXksIGlndF9yb3RhdGlvbl90IHJvdCkKK3sKKwlpZiAoaWd0X2Rpc3Bs YXlfdHJ5X2NvbW1pdDIoZGlzcGxheSwgQ09NTUlUX0FUT01JQykgPCAwKSB7CisJCWlndF9kZWJ1 ZygiU2tpcHBpbmcgcm90YXRlZCB0ZXN0LCBhbGlnbm1lbnQgaXMgd3JvbmcuXG4iKTsKKwkJcmV0 dXJuIGZhbHNlOworCX0KKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZCB5dXZfY3Jv cF9zY2FsZV9idWdfcGxhbmUoZGF0YV90ICpkYXRhLCBkcm1Nb2RlTW9kZUluZm8gKm1vZGUsCisJ CQkJICAgICAgaWd0X3BsYW5lX3QgKnBsYW5lLCBzdHJ1Y3QgaWd0X2ZiICpmYiwKKwkJCQkgICAg ICBpZ3Rfcm90YXRpb25fdCByb3QsIGlndF9jcmNfdCAqcmVmX2NyYykKK3sKKwlpZ3RfZGlzcGxh eV90ICpkaXNwbGF5ID0gJmRhdGEtPmRpc3BsYXk7CisJaWd0X2NyY190IGNyYzsKKwlpbnQgb2Zz W10gPSB7IDAsIDEsIC0xLCAyLCAtMiB9OworCWludCBpLCBqOworCisJaWd0X3BsYW5lX3NldF9m YihwbGFuZSwgZmIpOworCWlndF9wbGFuZV9zZXRfcm90YXRpb24ocGxhbmUsIHJvdCk7CisKKwlp Z3RfcGxhbmVfc2V0X3Bvc2l0aW9uKHBsYW5lLCA2NCwgNjQpOworCWlndF9wbGFuZV9zZXRfc2l6 ZShwbGFuZSwgMjU2LCAyNTYpOworCisJaWd0X2ZiX3NldF9wb3NpdGlvbihmYiwgcGxhbmUsIGZi LT53aWR0aCAvIDQsIGZiLT5oZWlnaHQgLyA0KTsKKwlpZ3RfZmJfc2V0X3NpemUoZmIsIHBsYW5l LCBmYi0+d2lkdGggLyAyLCBmYi0+aGVpZ2h0IC8gMik7CisJaWd0X2Rpc3BsYXlfY29tbWl0Mihk aXNwbGF5LCBDT01NSVRfQVRPTUlDKTsKKwlhc3NlcnRfY29sbGVjdGVkX2NyY19lcXVhbChkYXRh LT5waXBlX2NyYywgJmNyYywgcmVmX2NyYyk7CisKKwkvKiBNYWtlIHN1cmUgYm91bmRhcmllcyBt YXRjaCAqLworCWlndF9mYl9zZXRfcG9zaXRpb24oZmIsIHBsYW5lLCBmYi0+d2lkdGggLyA0IC0g MiwgZmItPmhlaWdodCAvIDQgLSAyKTsKKwlpZ3RfZmJfc2V0X3NpemUoZmIsIHBsYW5lLCBmYi0+ d2lkdGggLyAyICsgNCwgZmItPmhlaWdodCAvIDIgKyA0KTsKKwlpZ3RfZGlzcGxheV9jb21taXQy KGRpc3BsYXksIENPTU1JVF9BVE9NSUMpOworCWFzc2VydF9jb2xsZWN0ZWRfY3JjX2VxdWFsKGRh dGEtPnBpcGVfY3JjLCAmY3JjLCByZWZfY3JjKTsKKworCWZvciAoaSA9IDE7IGkgPCBBUlJBWV9T SVpFKG9mcyk7IGkrKykgeworCQlpZ3RfZGVidWcoIlRlc3Rpbmcgd2l0aCByb3QgJXggYW5kIGV4 dHJhICVpIG9uIHRoZSBsZWZ0IHNpZGVcbiIsIHJvdCwgb2ZzW2ldKTsKKwkJaWd0X2ZiX3NldF9w b3NpdGlvbihmYiwgcGxhbmUsIGZiLT53aWR0aCAvIDQgKyBvZnNbaV0sIGZiLT5oZWlnaHQgLyA0 IC0gMik7CisJCWlndF9mYl9zZXRfc2l6ZShmYiwgcGxhbmUsIGZiLT53aWR0aCAvIDIgKyAyIC0g b2ZzW2ldLCBmYi0+aGVpZ2h0IC8gMiArIDQpOworCQlpZiAoeXV2X2NvbW1pdF9yb3RhdGVkKGRp c3BsYXksIHJvdCkpCisJCQlhc3NlcnRfY29sbGVjdGVkX2NyY19lcXVhbChkYXRhLT5waXBlX2Ny YywgJmNyYywgcmVmX2NyYyk7CisKKwkJaWd0X2RlYnVnKCJUZXN0aW5nIHdpdGggcm90ICV4IGFu ZCBleHRyYSAlaSBvbiB0aGUgdG9wIHNpZGVcbiIsIHJvdCwgb2ZzW2ldKTsKKwkJaWd0X2ZiX3Nl dF9wb3NpdGlvbihmYiwgcGxhbmUsIGZiLT53aWR0aCAvIDQgLSAyLCBmYi0+aGVpZ2h0IC8gNCAr IG9mc1tpXSk7CisJCWlndF9mYl9zZXRfc2l6ZShmYiwgcGxhbmUsIGZiLT53aWR0aCAvIDIgKyA0 LCBmYi0+aGVpZ2h0IC8gMiArIDIgLSBvZnNbaV0pOworCQlpZiAoeXV2X2NvbW1pdF9yb3RhdGVk KGRpc3BsYXksIHJvdCkpCisJCQlhc3NlcnRfY29sbGVjdGVkX2NyY19lcXVhbChkYXRhLT5waXBl X2NyYywgJmNyYywgcmVmX2NyYyk7CisKKwkJaWd0X2RlYnVnKCJUZXN0aW5nIHdpdGggcm90ICV4 IGFuZCBleHRyYSAlaSBvbiB0aGUgcmlnaHQgc2lkZVxuIiwgcm90LCBvZnNbaV0pOworCQlpZ3Rf ZmJfc2V0X3Bvc2l0aW9uKGZiLCBwbGFuZSwgZmItPndpZHRoIC8gNCAtIDIsIGZiLT5oZWlnaHQg LyA0KTsKKwkJaWd0X2ZiX3NldF9zaXplKGZiLCBwbGFuZSwgZmItPndpZHRoIC8gMiArIDIgKyBv ZnNbaV0sIGZiLT5oZWlnaHQgLyAyKTsKKwkJaWYgKHl1dl9jb21taXRfcm90YXRlZChkaXNwbGF5 LCByb3QpKQorCQkJYXNzZXJ0X2NvbGxlY3RlZF9jcmNfZXF1YWwoZGF0YS0+cGlwZV9jcmMsICZj cmMsIHJlZl9jcmMpOworCisJCWlndF9kZWJ1ZygiVGVzdGluZyB3aXRoIHJvdCAleCBhbmQgZXh0 cmEgJWkgb24gdGhlIGJvdHRvbSBzaWRlXG4iLCByb3QsIG9mc1tpXSk7CisJCWlndF9mYl9zZXRf cG9zaXRpb24oZmIsIHBsYW5lLCBmYi0+d2lkdGggLyA0IC0gMiwgZmItPmhlaWdodCAvIDQgLSAy KTsKKwkJaWd0X2ZiX3NldF9zaXplKGZiLCBwbGFuZSwgZmItPndpZHRoIC8gMiArIDQsIGZiLT5o ZWlnaHQgLyAyICsgMiArIG9mc1tpXSk7CisJCWlmICh5dXZfY29tbWl0X3JvdGF0ZWQoZGlzcGxh eSwgcm90KSkKKwkJCWFzc2VydF9jb2xsZWN0ZWRfY3JjX2VxdWFsKGRhdGEtPnBpcGVfY3JjLCAm Y3JjLCByZWZfY3JjKTsKKworCX0KKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG9mcyk7 IGkrKykKKwkJZm9yIChqID0gIWk7IGogPCBBUlJBWV9TSVpFKG9mcyk7IGorKykgeworCQkJaWd0 X2RlYnVnKCJUZXN0aW5nIHdpdGggcm90ICV4IGFuZCBleHRyYSAoJWksICVpKSBhdCB0aGUgZWRn ZXNcbiIsIHJvdCwgb2ZzW2ldLCBvZnNbal0pOworCisJCQlpZ3RfZmJfc2V0X3Bvc2l0aW9uKGZi LCBwbGFuZSwgZmItPndpZHRoIC8gNCArIG9mc1tpXSwgZmItPmhlaWdodCAvIDQgKyBvZnNbal0p OworCQkJaWd0X2ZiX3NldF9zaXplKGZiLCBwbGFuZSwgZmItPndpZHRoIC8gMiAtIDIgKiBvZnNb aV0sIGZiLT5oZWlnaHQgLyAyIC0gMiAqIG9mc1tqXSk7CisKKwkJCWlmICh5dXZfY29tbWl0X3Jv dGF0ZWQoZGlzcGxheSwgcm90KSkKKwkJCQlhc3NlcnRfY29sbGVjdGVkX2NyY19lcXVhbChkYXRh LT5waXBlX2NyYywgJmNyYywgcmVmX2NyYyk7CisJCX0KK30KKworc3RhdGljIHZvaWQgZHJhd19j bGlwX2ZiKGlndF9kaXNwbGF5X3QgKmRpc3BsYXksIHN0cnVjdCBpZ3RfZmIgKmNsaXBfZmIpCit7 CisJY2Fpcm9fdCAqY3IgPSBpZ3RfZ2V0X2NhaXJvX2N0eChkaXNwbGF5LT5kcm1fZmQsIGNsaXBf ZmIpOworCisJaWd0X3BhaW50X2NvbG9yKGNyLCAwLCAwLCBjbGlwX2ZiLT53aWR0aCwgY2xpcF9m Yi0+aGVpZ2h0LCAuMCwgLjAsIC41KTsKKwlpZ3RfcGFpbnRfY29sb3IoY3IsIGNsaXBfZmItPndp ZHRoIC8gNCAtIDIsIGNsaXBfZmItPmhlaWdodCAvIDQgLSAyLAorCQkJY2xpcF9mYi0+d2lkdGgg LyAyICsgNCwgY2xpcF9mYi0+aGVpZ2h0IC8gMiArIDQsIDEuLCAxLiwgMS4pOworCisJaWd0X3B1 dF9jYWlyb19jdHgoZGlzcGxheS0+ZHJtX2ZkLCBjbGlwX2ZiLCBjcik7Cit9CisKK3N0YXRpYyB2 b2lkIHl1dl9jcm9wX3NjYWxlX2J1ZyhkYXRhX3QgKmRhdGEsIGVudW0gcGlwZSBwaXBlLCBpZ3Rf b3V0cHV0X3QgKm91dHB1dCwgdW5zaWduZWQgZm9ybWF0KQoreworCWRybU1vZGVNb2RlSW5mbyAq bW9kZSA9IGlndF9vdXRwdXRfZ2V0X21vZGUob3V0cHV0KTsKKwlpZ3RfZGlzcGxheV90ICpkaXNw bGF5ID0gJmRhdGEtPmRpc3BsYXk7CisJaWd0X3BsYW5lX3QgKnBsYW5lLCAqcHJpbWFyeSA9IGln dF9waXBlX2dldF9wbGFuZV90eXBlKCZkaXNwbGF5LT5waXBlc1twaXBlXSwgRFJNX1BMQU5FX1RZ UEVfUFJJTUFSWSk7CisJc3RydWN0IGlndF9mYiAqcmVmX2ZiID0gJmRhdGEtPmZiWzJdOworCXN0 cnVjdCBpZ3RfZmIgKmNsaXBfZmIgPSAmZGF0YS0+ZmJbM107CisJc3RydWN0IGlndF9mYiAqY2xp cF9mYl94dGlsZWQgPSAmZGF0YS0+ZmJbNF07CisJc3RydWN0IGlndF9mYiAqY2xpcF9mYl95dGls ZWQgPSAmZGF0YS0+ZmJbNV07CisKKwlwcmVwYXJlX2NydGMoZGF0YSwgcGlwZSwgb3V0cHV0KTsK KworCWlndF9jcmVhdGVfY29sb3JfZmIoZGlzcGxheS0+ZHJtX2ZkLCBtb2RlLT5oZGlzcGxheSwg bW9kZS0+dmRpc3BsYXksCisJCQkgICAgZm9ybWF0LCBMT0NBTF9JOTE1X0ZPUk1BVF9NT0RfWF9U SUxFRCwgLjUsIC41LCAuNSwgJmRhdGEtPmZiWzBdKTsKKworCWlndF9jcmVhdGVfY29sb3JfZmIo ZGlzcGxheS0+ZHJtX2ZkLCAyNTYsIDI1NiwgZm9ybWF0LAorCQkJICAgIExPQ0FMX0k5MTVfRk9S TUFUX01PRF9YX1RJTEVELCAxLiwgMS4sIDEuLCByZWZfZmIpOworCisJaWd0X2NyZWF0ZV9mYihk aXNwbGF5LT5kcm1fZmQsIDgwLCAxMjgsIGZvcm1hdCwKKwkJICAgICAgTE9DQUxfRFJNX0ZPUk1B VF9NT0RfTk9ORSwgY2xpcF9mYik7CisKKwlpZ3RfY3JlYXRlX2ZiKGRpc3BsYXktPmRybV9mZCwg ODAsIDEyOCwgZm9ybWF0LAorCQkgICAgICBMT0NBTF9JOTE1X0ZPUk1BVF9NT0RfWF9USUxFRCwg Y2xpcF9mYl94dGlsZWQpOworCWlndF9jcmVhdGVfZmIoZGlzcGxheS0+ZHJtX2ZkLCA4MCwgMTI4 LCBmb3JtYXQsCisJCSAgICAgIExPQ0FMX0k5MTVfRk9STUFUX01PRF9ZX1RJTEVELCBjbGlwX2Zi X3l0aWxlZCk7CisKKwlkcmF3X2NsaXBfZmIoZGlzcGxheSwgY2xpcF9mYik7CisJZHJhd19jbGlw X2ZiKGRpc3BsYXksIGNsaXBfZmJfeHRpbGVkKTsKKwlkcmF3X2NsaXBfZmIoZGlzcGxheSwgY2xp cF9mYl95dGlsZWQpOworCisJaWd0X3BsYW5lX3NldF9mYihwcmltYXJ5LCAmZGF0YS0+ZmJbMF0p OworCisJZm9yX2VhY2hfcGxhbmVfb25fcGlwZShkaXNwbGF5LCBwaXBlLCBwbGFuZSkgeworCQlp Z3RfY3JjX3QgcmVmX2NyYzsKKworCQlpZiAoIXBsYW5lX3N1cHBvcnRzX2Zvcm1hdChwbGFuZSwg Zm9ybWF0KSkKKwkJCWNvbnRpbnVlOworCisJCWlndF9wbGFuZV9zZXRfZmIocGxhbmUsIHJlZl9m Yik7CisJCWlndF9wbGFuZV9zZXRfcG9zaXRpb24ocGxhbmUsIDY0LCA2NCk7CisJCWlndF9kaXNw bGF5X2NvbW1pdDIoZGlzcGxheSwgQ09NTUlUX0FUT01JQyk7CisKKwkJaWd0X3BpcGVfY3JjX3N0 YXJ0KGRhdGEtPnBpcGVfY3JjKTsKKwkJaWd0X3BpcGVfY3JjX2dldF9zaW5nbGUoZGF0YS0+cGlw ZV9jcmMsICZyZWZfY3JjKTsKKworCQl5dXZfY3JvcF9zY2FsZV9idWdfcGxhbmUoZGF0YSwgbW9k ZSwgcGxhbmUsIGNsaXBfZmIsIElHVF9ST1RBVElPTl8wLCAmcmVmX2NyYyk7CisJCXl1dl9jcm9w X3NjYWxlX2J1Z19wbGFuZShkYXRhLCBtb2RlLCBwbGFuZSwgY2xpcF9mYl94dGlsZWQsIElHVF9S T1RBVElPTl8wLCAmcmVmX2NyYyk7CisJCXl1dl9jcm9wX3NjYWxlX2J1Z19wbGFuZShkYXRhLCBt b2RlLCBwbGFuZSwgY2xpcF9mYl95dGlsZWQsIElHVF9ST1RBVElPTl8wLCAmcmVmX2NyYyk7CisJ CXl1dl9jcm9wX3NjYWxlX2J1Z19wbGFuZShkYXRhLCBtb2RlLCBwbGFuZSwgY2xpcF9mYl95dGls ZWQsIElHVF9ST1RBVElPTl85MCwgJnJlZl9jcmMpOworCQl5dXZfY3JvcF9zY2FsZV9idWdfcGxh bmUoZGF0YSwgbW9kZSwgcGxhbmUsIGNsaXBfZmIsIElHVF9ST1RBVElPTl8xODAsICZyZWZfY3Jj KTsKKwkJeXV2X2Nyb3Bfc2NhbGVfYnVnX3BsYW5lKGRhdGEsIG1vZGUsIHBsYW5lLCBjbGlwX2Zi X3h0aWxlZCwgSUdUX1JPVEFUSU9OXzE4MCwgJnJlZl9jcmMpOworCQl5dXZfY3JvcF9zY2FsZV9i dWdfcGxhbmUoZGF0YSwgbW9kZSwgcGxhbmUsIGNsaXBfZmJfeXRpbGVkLCBJR1RfUk9UQVRJT05f MTgwLCAmcmVmX2NyYyk7CisJCXl1dl9jcm9wX3NjYWxlX2J1Z19wbGFuZShkYXRhLCBtb2RlLCBw bGFuZSwgY2xpcF9mYl95dGlsZWQsIElHVF9ST1RBVElPTl8yNzAsICZyZWZfY3JjKTsKKworCQlp Z3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCBwbGFuZSAhPSBwcmltYXJ5ID8gTlVMTCA6ICZkYXRhLT5m YlswXSk7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQgeXV2X2Nocm9tYV9zdWJwaXhl bF9jbGlwX3BsYW5lX3dpdGhfY3Vyc29yKGRhdGFfdCAqZGF0YSwKKwkJCQkJCQlpZ3RfcGxhbmVf dCAqcGxhbmUsCisJCQkJCQkJc3RydWN0IGlndF9mYiAqY2xpcF9mYiwKKwkJCQkJCQlpZ3RfcGxh bmVfdCAqY3Vyc29yLAorCQkJCQkJCXN0cnVjdCBpZ3RfZmIgKmN1cnNvcl9mYiwKKwkJCQkJCQlp Z3RfY3JjX3QgKnJlZl9jcmMsCisJCQkJCQkJaW50IGN1cnNvcl94LCBpbnQgY3Vyc29yX3kpCit7 CisJaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSA9ICZkYXRhLT5kaXNwbGF5OworCisJaWd0X3BsYW5l X3NldF9mYihwbGFuZSwgY2xpcF9mYik7CisJaWd0X3BsYW5lX3NldF9wb3NpdGlvbihwbGFuZSwg NjQsIDY0KTsKKwlpZ3RfcGxhbmVfc2V0X3JvdGF0aW9uKHBsYW5lLCBJR1RfUk9UQVRJT05fMCk7 CisKKwlpZ3RfcGxhbmVfc2V0X2ZiKGN1cnNvciwgY3Vyc29yX2ZiKTsKKwlpZ3RfcGxhbmVfc2V0 X3Bvc2l0aW9uKGN1cnNvciwgY3Vyc29yX3gsIGN1cnNvcl95KTsKKwlpZ3RfZGlzcGxheV9jb21t aXQyKGRpc3BsYXksIENPTU1JVF9BVE9NSUMpOworCisJaWd0X3BpcGVfY3JjX2RyYWluKGRhdGEt PnBpcGVfY3JjKTsKKwlpZ3RfcGlwZV9jcmNfZ2V0X3NpbmdsZShkYXRhLT5waXBlX2NyYywgcmVm X2NyYyk7CisKKwlpZ3RfcGxhbmVfc2V0X2ZiKGN1cnNvciwgTlVMTCk7Cit9CisKK3N0YXRpYyBi b29sIHl1dl9jaHJvbWFfc3VicGl4ZWxfY2xpcF9wbGFuZV9yaWdodChkYXRhX3QgKmRhdGEsCisJ CQkJCQkgaWd0X3JvdGF0aW9uX3Qgcm90YXRpb24sCisJCQkJCQkgaWd0X3BsYW5lX3QgKnBsYW5l LAorCQkJCQkJIHN0cnVjdCBpZ3RfZmIgKmNsaXBfZmIsCisJCQkJCQkgaWd0X2NyY190ICpyZWZf Y3JjKQoreworCWlndF9kaXNwbGF5X3QgKmRpc3BsYXkgPSAmZGF0YS0+ZGlzcGxheTsKKwlpZ3Rf Y3JjX3QgY3JjID0ge307CisKKwlpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCBjbGlwX2ZiKTsKKwlp Z3RfcGxhbmVfc2V0X3Bvc2l0aW9uKHBsYW5lLCA2NCwgNjQpOworCWlndF9wbGFuZV9zZXRfcm90 YXRpb24ocGxhbmUsIHJvdGF0aW9uKTsKKwlpZ3RfcGxhbmVfc2V0X3NpemUocGxhbmUsIGNsaXBf ZmItPndpZHRoIC0gMSwgY2xpcF9mYi0+aGVpZ2h0KTsKKworCXN3aXRjaCAocm90YXRpb24pIHsK KwljYXNlIElHVF9ST1RBVElPTl8xODA6CisJCWlndF9mYl9zZXRfcG9zaXRpb24oY2xpcF9mYiwg cGxhbmUsIDEsIDApOworCWNhc2UgSUdUX1JPVEFUSU9OXzA6CisJCWlndF9mYl9zZXRfc2l6ZShj bGlwX2ZiLCBwbGFuZSwgY2xpcF9mYi0+d2lkdGggLSAxLCBjbGlwX2ZiLT5oZWlnaHQpOworCQli cmVhazsKKworCWNhc2UgSUdUX1JPVEFUSU9OXzI3MDoKKwkJaWd0X2ZiX3NldF9wb3NpdGlvbihj bGlwX2ZiLCBwbGFuZSwgMCwgMSk7CisJY2FzZSBJR1RfUk9UQVRJT05fOTA6CisJCWlndF9mYl9z ZXRfc2l6ZShjbGlwX2ZiLCBwbGFuZSwgY2xpcF9mYi0+d2lkdGgsIGNsaXBfZmItPmhlaWdodCAt IDEpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlpZ3RfYXNzZXJ0X2YoMCwgIlVuaGFuZGxlZCBy b3RhdGlvbiAleFxuIiwgcm90YXRpb24pOworCX0KKworCWlmIChpZ3RfZGlzcGxheV90cnlfY29t bWl0MihkaXNwbGF5LCBDT01NSVRfQVRPTUlDKSA8IDApCisJCXJldHVybiBmYWxzZTsKKworCWFz c2VydF9jb2xsZWN0ZWRfY3JjX2VxdWFsKGRhdGEtPnBpcGVfY3JjLCAmY3JjLCByZWZfY3JjKTsK KwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgeXV2X2Nocm9tYV9zdWJwaXhlbF9jbGlw X3BsYW5lX2JvdHRvbShkYXRhX3QgKmRhdGEsCisJCQkJCQkgIGlndF9yb3RhdGlvbl90IHJvdGF0 aW9uLAorCQkJCQkJICBpZ3RfcGxhbmVfdCAqcGxhbmUsCisJCQkJCQkgIHN0cnVjdCBpZ3RfZmIg KmNsaXBfZmIsCisJCQkJCQkgIGlndF9jcmNfdCAqcmVmX2NyYykKK3sKKwlpZ3RfZGlzcGxheV90 ICpkaXNwbGF5ID0gJmRhdGEtPmRpc3BsYXk7CisJaWd0X2NyY190IGNyYyA9IHt9OworCisJaWd0 X3BsYW5lX3NldF9mYihwbGFuZSwgY2xpcF9mYik7CisJaWd0X3BsYW5lX3NldF9wb3NpdGlvbihw bGFuZSwgNjQsIDY0KTsKKwlpZ3RfcGxhbmVfc2V0X3JvdGF0aW9uKHBsYW5lLCByb3RhdGlvbik7 CisJaWd0X3BsYW5lX3NldF9zaXplKHBsYW5lLCBjbGlwX2ZiLT53aWR0aCwgY2xpcF9mYi0+aGVp Z2h0IC0gMSk7CisKKwlzd2l0Y2ggKHJvdGF0aW9uKSB7CisJY2FzZSBJR1RfUk9UQVRJT05fMTgw OgorCQlpZ3RfZmJfc2V0X3Bvc2l0aW9uKGNsaXBfZmIsIHBsYW5lLCAwLCAxKTsKKwljYXNlIElH VF9ST1RBVElPTl8wOgorCQlpZ3RfZmJfc2V0X3NpemUoY2xpcF9mYiwgcGxhbmUsIGNsaXBfZmIt PndpZHRoLCBjbGlwX2ZiLT5oZWlnaHQgLSAxKTsKKwkJYnJlYWs7CisKKwljYXNlIElHVF9ST1RB VElPTl85MDoKKwkJaWd0X2ZiX3NldF9wb3NpdGlvbihjbGlwX2ZiLCBwbGFuZSwgMSwgMCk7CisJ Y2FzZSBJR1RfUk9UQVRJT05fMjcwOgorCQlpZ3RfZmJfc2V0X3NpemUoY2xpcF9mYiwgcGxhbmUs IGNsaXBfZmItPndpZHRoIC0gMSwgY2xpcF9mYi0+aGVpZ2h0KTsKKwkJYnJlYWs7CisJZGVmYXVs dDoKKwkJaWd0X2Fzc2VydF9mKDAsICJVbmhhbmRsZWQgcm90YXRpb24gJXhcbiIsIHJvdGF0aW9u KTsKKwl9CisKKwlpZiAoaWd0X2Rpc3BsYXlfdHJ5X2NvbW1pdDIoZGlzcGxheSwgQ09NTUlUX0FU T01JQykgPCAwKQorCQlyZXR1cm4gZmFsc2U7CisKKwlhc3NlcnRfY29sbGVjdGVkX2NyY19lcXVh bChkYXRhLT5waXBlX2NyYywgJmNyYywgcmVmX2NyYyk7CisJcmV0dXJuIHRydWU7Cit9CisKK3N0 YXRpYyBib29sIHl1dl9jaHJvbWFfc3VicGl4ZWxfY2xpcF9wbGFuZV9sZWZ0KGRhdGFfdCAqZGF0 YSwKKwkJCQkJCWlndF9yb3RhdGlvbl90IHJvdGF0aW9uLAorCQkJCQkJaWd0X3BsYW5lX3QgKnBs YW5lLAorCQkJCQkJc3RydWN0IGlndF9mYiAqY2xpcF9mYiwKKwkJCQkJCWlndF9jcmNfdCAqcmVm X2NyYykKK3sKKwlpZ3RfZGlzcGxheV90ICpkaXNwbGF5ID0gJmRhdGEtPmRpc3BsYXk7CisJaWd0 X2NyY190IGNyYyA9IHt9OworCisJaWd0X3BsYW5lX3NldF9mYihwbGFuZSwgY2xpcF9mYik7CisJ aWd0X3BsYW5lX3NldF9wb3NpdGlvbihwbGFuZSwgNjUsIDY0KTsKKwlpZ3RfcGxhbmVfc2V0X3Jv dGF0aW9uKHBsYW5lLCByb3RhdGlvbik7CisJaWd0X3BsYW5lX3NldF9zaXplKHBsYW5lLCBjbGlw X2ZiLT53aWR0aCAtIDEsIGNsaXBfZmItPmhlaWdodCk7CisKKwlzd2l0Y2ggKHJvdGF0aW9uKSB7 CisJY2FzZSBJR1RfUk9UQVRJT05fMDoKKwkJaWd0X2ZiX3NldF9wb3NpdGlvbihjbGlwX2ZiLCBw bGFuZSwgMSwgMCk7CisJY2FzZSBJR1RfUk9UQVRJT05fMTgwOgorCQlpZ3RfZmJfc2V0X3NpemUo Y2xpcF9mYiwgcGxhbmUsIGNsaXBfZmItPndpZHRoIC0gMSwgY2xpcF9mYi0+aGVpZ2h0KTsKKwkJ YnJlYWs7CisKKwljYXNlIElHVF9ST1RBVElPTl85MDoKKwkJaWd0X2ZiX3NldF9wb3NpdGlvbihj bGlwX2ZiLCBwbGFuZSwgMCwgMSk7CisJY2FzZSBJR1RfUk9UQVRJT05fMjcwOgorCQlpZ3RfZmJf c2V0X3NpemUoY2xpcF9mYiwgcGxhbmUsIGNsaXBfZmItPndpZHRoLCBjbGlwX2ZiLT5oZWlnaHQg LSAxKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJaWd0X2Fzc2VydF9mKDAsICJVbmhhbmRsZWQg cm90YXRpb24gJXhcbiIsIHJvdGF0aW9uKTsKKwl9CisKKwlpZiAoaWd0X2Rpc3BsYXlfdHJ5X2Nv bW1pdDIoZGlzcGxheSwgQ09NTUlUX0FUT01JQykgPCAwKQorCQlyZXR1cm4gZmFsc2U7CisKKwlh c3NlcnRfY29sbGVjdGVkX2NyY19lcXVhbChkYXRhLT5waXBlX2NyYywgJmNyYywgcmVmX2NyYyk7 CisJcmV0dXJuIHRydWU7Cit9CisKKworc3RhdGljIGJvb2wgeXV2X2Nocm9tYV9zdWJwaXhlbF9j bGlwX3BsYW5lX3RvcChkYXRhX3QgKmRhdGEsCisJCQkJCSAgICAgIGlndF9yb3RhdGlvbl90IHJv dGF0aW9uLAorCQkJCQkgICAgICBpZ3RfcGxhbmVfdCAqcGxhbmUsCisJCQkJCSAgICAgIHN0cnVj dCBpZ3RfZmIgKmNsaXBfZmIsCisJCQkJCSAgICAgIGlndF9jcmNfdCAqcmVmX2NyYykKK3sKKwlp Z3RfZGlzcGxheV90ICpkaXNwbGF5ID0gJmRhdGEtPmRpc3BsYXk7CisJaWd0X2NyY190IGNyYyA9 IHt9OworCisJaWd0X3BsYW5lX3NldF9mYihwbGFuZSwgY2xpcF9mYik7CisJaWd0X3BsYW5lX3Nl dF9wb3NpdGlvbihwbGFuZSwgNjQsIDY1KTsKKwlpZ3RfcGxhbmVfc2V0X3JvdGF0aW9uKHBsYW5l LCByb3RhdGlvbik7CisJaWd0X3BsYW5lX3NldF9zaXplKHBsYW5lLCBjbGlwX2ZiLT53aWR0aCwg Y2xpcF9mYi0+aGVpZ2h0IC0gMSk7CisKKwlzd2l0Y2ggKHJvdGF0aW9uKSB7CisJY2FzZSBJR1Rf Uk9UQVRJT05fMDoKKwkJaWd0X2ZiX3NldF9wb3NpdGlvbihjbGlwX2ZiLCBwbGFuZSwgMCwgMSk7 CisJY2FzZSBJR1RfUk9UQVRJT05fMTgwOgorCQlpZ3RfZmJfc2V0X3NpemUoY2xpcF9mYiwgcGxh bmUsIGNsaXBfZmItPndpZHRoLCBjbGlwX2ZiLT5oZWlnaHQgLSAxKTsKKwkJYnJlYWs7CisKKwlj YXNlIElHVF9ST1RBVElPTl8yNzA6CisJCWlndF9mYl9zZXRfcG9zaXRpb24oY2xpcF9mYiwgcGxh bmUsIDEsIDApOworCWNhc2UgSUdUX1JPVEFUSU9OXzkwOgorCQlpZ3RfZmJfc2V0X3NpemUoY2xp cF9mYiwgcGxhbmUsIGNsaXBfZmItPndpZHRoIC0gMSwgY2xpcF9mYi0+aGVpZ2h0KTsKKwkJYnJl YWs7CisJZGVmYXVsdDoKKwkJaWd0X2Fzc2VydF9mKDAsICJVbmhhbmRsZWQgcm90YXRpb24gJXhc biIsIHJvdGF0aW9uKTsKKwl9CisKKwlpZiAoaWd0X2Rpc3BsYXlfdHJ5X2NvbW1pdDIoZGlzcGxh eSwgQ09NTUlUX0FUT01JQykgPCAwKQorCQlyZXR1cm4gZmFsc2U7CisKKwlhc3NlcnRfY29sbGVj dGVkX2NyY19lcXVhbChkYXRhLT5waXBlX2NyYywgJmNyYywgcmVmX2NyYyk7CisJcmV0dXJuIHRy dWU7Cit9CisKK3N0YXRpYyB2b2lkIHl1dl9jaHJvbWFfc3VicGl4ZWxfY2xpcChkYXRhX3QgKmRh dGEsIGVudW0gcGlwZSBwaXBlLCBpZ3Rfb3V0cHV0X3QgKm91dHB1dCwgdW5zaWduZWQgZm9ybWF0 KQoreworCWRybU1vZGVNb2RlSW5mbyAqbW9kZSA9IGlndF9vdXRwdXRfZ2V0X21vZGUob3V0cHV0 KTsKKwlpZ3RfZGlzcGxheV90ICpkaXNwbGF5ID0gJmRhdGEtPmRpc3BsYXk7CisJaWd0X3BpcGVf dCAqcGlwZV9vYmogPSAmZGlzcGxheS0+cGlwZXNbcGlwZV07CisJc3RydWN0IGlndF9mYiAqYmdf ZmIgPSAmZGF0YS0+ZmJbMF07CisJc3RydWN0IGlndF9mYiAqYmdfY3Vyc29yX2ZiID0gJmRhdGEt PmZiWzFdOworCXN0cnVjdCBpZ3RfZmIgKmJsYWNrX2N1cnNvcl9mYiA9ICZkYXRhLT5mYlsyXTsK KwlzdHJ1Y3QgaWd0X2ZiICpjbGlwX2ZiID0gJmRhdGEtPmZiWzNdOworCWlndF9wbGFuZV90ICpw cmltYXJ5ID0gaWd0X3BpcGVfZ2V0X3BsYW5lX3R5cGUocGlwZV9vYmosIERSTV9QTEFORV9UWVBF X1BSSU1BUlkpOworCWlndF9wbGFuZV90ICpjdXJzb3IgPSBpZ3RfcGlwZV9nZXRfcGxhbmVfdHlw ZShwaXBlX29iaiwgRFJNX1BMQU5FX1RZUEVfQ1VSU09SKTsKKwlpZ3RfcGxhbmVfdCAqcGxhbmU7 CisJY2Fpcm9fdCAqY3I7CisJYm9vbCByZXQgPSBmYWxzZTsKKworCXByZXBhcmVfY3J0YyhkYXRh LCBwaXBlLCBvdXRwdXQpOworCisJaWd0X2NyZWF0ZV9jb2xvcl9mYihkaXNwbGF5LT5kcm1fZmQs IG1vZGUtPmhkaXNwbGF5LCBtb2RlLT52ZGlzcGxheSwKKwkJCSAgICBEUk1fRk9STUFUX1hSR0I4 ODg4LCBMT0NBTF9JOTE1X0ZPUk1BVF9NT0RfWF9USUxFRCwKKwkJCSAgICAuMCwgLjAsIDEuLCBi Z19mYik7CisKKwlpZ3RfY3JlYXRlX2NvbG9yX2ZiKGRpc3BsYXktPmRybV9mZCwgMjU2LCAyNTYs CisJCSAgICAgICAgICAgIERSTV9GT1JNQVRfQVJHQjg4ODgsIExPQ0FMX0RSTV9GT1JNQVRfTU9E X05PTkUsCisJCQkgICAgLjAsIC4wLCAxLiwgYmdfY3Vyc29yX2ZiKTsKKworCWlndF9jcmVhdGVf Y29sb3JfZmIoZGlzcGxheS0+ZHJtX2ZkLCAyNTYsIDI1NiwKKwkJICAgICAgICAgICAgRFJNX0ZP Uk1BVF9BUkdCODg4OCwgTE9DQUxfRFJNX0ZPUk1BVF9NT0RfTk9ORSwKKwkJCSAgICAuMCwgLjAs IC4wLCBibGFja19jdXJzb3JfZmIpOworCisJaWd0X2NyZWF0ZV9mYihkaXNwbGF5LT5kcm1fZmQs IDI1NiwgMjU2LAorCQkgICAgICBmb3JtYXQsIExPQ0FMX0k5MTVfRk9STUFUX01PRF9ZX1RJTEVE LCBjbGlwX2ZiKTsKKworCS8qIERyYXcgdGhlIEZCIHRoYXQgd2lsbCBiZSB1c2VkIGZvciBjbGlw cGluZyB0aGUgY2hyb21hIHN1YnBpeGVsIHRlc3QuICovCisJY3IgPSBpZ3RfZ2V0X2NhaXJvX2N0 eChkaXNwbGF5LT5kcm1fZmQsIGNsaXBfZmIpOworCisJaWd0X3BhaW50X2NvbG9yKGNyLCAwLCAw LCBjbGlwX2ZiLT53aWR0aCwgY2xpcF9mYi0+aGVpZ2h0LCAxLiwgMC4sIDAuKTsKKwlpZ3RfcGFp bnRfY29sb3IoY3IsIDIsIDIsIGNsaXBfZmItPndpZHRoIC0gNCwgY2xpcF9mYi0+aGVpZ2h0IC0g NCwgMC4sIDEuLCAxLik7CisJaWd0X3BhaW50X2NvbG9yKGNyLCA0LCA0LCBjbGlwX2ZiLT53aWR0 aCAtIDgsIGNsaXBfZmItPmhlaWdodCAtIDgsIC43NSwgLjc1LCAxLik7CisKKwkvKiBXaGl0ZSBk b3RzIGluIHRoZSBjb3JuZXJzLiAqLworCWlndF9wYWludF9jb2xvcihjciwgMCwgMCwgNiwgNiwg MS4sIDEuLCAxLik7CisJaWd0X3BhaW50X2NvbG9yKGNyLCBjbGlwX2ZiLT53aWR0aCAtIDYsIDAs IDYsIDYsIDEuLCAxLiwgMS4pOworCWlndF9wYWludF9jb2xvcihjciwgMCwgY2xpcF9mYi0+aGVp Z2h0IC0gNiwgNiwgNiwgMS4sIDEuLCAxLik7CisJaWd0X3BhaW50X2NvbG9yKGNyLCBjbGlwX2Zi LT53aWR0aCAtIDYsIGNsaXBfZmItPmhlaWdodCAtIDYsIDYsIDYsIDEuLCAxLiwgMS4pOworCisJ aWd0X3B1dF9jYWlyb19jdHgoZGlzcGxheS0+ZHJtX2ZkLCBjbGlwX2ZiLCBjcik7CisKKwlpZ3Rf cGlwZV9jcmNfc3RhcnQoZGF0YS0+cGlwZV9jcmMpOworCisJaWd0X3BsYW5lX3NldF9mYihwcmlt YXJ5LCBiZ19mYik7CisJZm9yX2VhY2hfcGxhbmVfb25fcGlwZShkaXNwbGF5LCBwaXBlLCBwbGFu ZSkgeworCQlzdHJ1Y3QgaWd0X2ZiICpjdXJzb3JfZmIgPSBwbGFuZSA9PSBwcmltYXJ5ID8gYmxh Y2tfY3Vyc29yX2ZiIDogYmdfY3Vyc29yX2ZiOworCQlpZ3RfY3JjX3QgcmVmX2NyYzsKKworCQlp ZiAoIXBsYW5lX3N1cHBvcnRzX2Zvcm1hdChwbGFuZSwgZm9ybWF0KSB8fCBwbGFuZSA9PSBjdXJz b3IpCisJCQljb250aW51ZTsKKworCQl5dXZfY2hyb21hX3N1YnBpeGVsX2NsaXBfcGxhbmVfd2l0 aF9jdXJzb3IoZGF0YSwgcGxhbmUsIGNsaXBfZmIsIGN1cnNvciwgY3Vyc29yX2ZiLCAmcmVmX2Ny YywgNjMgKyBjbGlwX2ZiLT53aWR0aCwgNjQpOworCQlyZXQgfD0geXV2X2Nocm9tYV9zdWJwaXhl bF9jbGlwX3BsYW5lX3JpZ2h0KGRhdGEsIElHVF9ST1RBVElPTl8wLCBwbGFuZSwgY2xpcF9mYiwg JnJlZl9jcmMpOworCQlyZXQgfD0geXV2X2Nocm9tYV9zdWJwaXhlbF9jbGlwX3BsYW5lX3JpZ2h0 KGRhdGEsIElHVF9ST1RBVElPTl85MCwgcGxhbmUsIGNsaXBfZmIsICZyZWZfY3JjKTsKKwkJcmV0 IHw9IHl1dl9jaHJvbWFfc3VicGl4ZWxfY2xpcF9wbGFuZV9yaWdodChkYXRhLCBJR1RfUk9UQVRJ T05fMTgwLCBwbGFuZSwgY2xpcF9mYiwgJnJlZl9jcmMpOworCQlyZXQgfD0geXV2X2Nocm9tYV9z dWJwaXhlbF9jbGlwX3BsYW5lX3JpZ2h0KGRhdGEsIElHVF9ST1RBVElPTl8yNzAsIHBsYW5lLCBj bGlwX2ZiLCAmcmVmX2NyYyk7CisKKwkJeXV2X2Nocm9tYV9zdWJwaXhlbF9jbGlwX3BsYW5lX3dp dGhfY3Vyc29yKGRhdGEsIHBsYW5lLCBjbGlwX2ZiLCBjdXJzb3IsIGN1cnNvcl9mYiwgJnJlZl9j cmMsIDY0LCA2MyArIGNsaXBfZmItPmhlaWdodCk7CisJCXJldCB8PSB5dXZfY2hyb21hX3N1YnBp eGVsX2NsaXBfcGxhbmVfYm90dG9tKGRhdGEsIElHVF9ST1RBVElPTl8wLCBwbGFuZSwgY2xpcF9m YiwgJnJlZl9jcmMpOworCQlyZXQgfD0geXV2X2Nocm9tYV9zdWJwaXhlbF9jbGlwX3BsYW5lX2Jv dHRvbShkYXRhLCBJR1RfUk9UQVRJT05fOTAsIHBsYW5lLCBjbGlwX2ZiLCAmcmVmX2NyYyk7CisJ CXJldCB8PSB5dXZfY2hyb21hX3N1YnBpeGVsX2NsaXBfcGxhbmVfYm90dG9tKGRhdGEsIElHVF9S T1RBVElPTl8xODAsIHBsYW5lLCBjbGlwX2ZiLCAmcmVmX2NyYyk7CisJCXJldCB8PSB5dXZfY2hy b21hX3N1YnBpeGVsX2NsaXBfcGxhbmVfYm90dG9tKGRhdGEsIElHVF9ST1RBVElPTl8yNzAsIHBs YW5lLCBjbGlwX2ZiLCAmcmVmX2NyYyk7CisKKwkJeXV2X2Nocm9tYV9zdWJwaXhlbF9jbGlwX3Bs YW5lX3dpdGhfY3Vyc29yKGRhdGEsIHBsYW5lLCBjbGlwX2ZiLCBjdXJzb3IsIGN1cnNvcl9mYiwg JnJlZl9jcmMsIDY1IC0gY3Vyc29yX2ZiLT53aWR0aCwgNjQpOworCQlyZXQgfD0geXV2X2Nocm9t YV9zdWJwaXhlbF9jbGlwX3BsYW5lX2xlZnQoZGF0YSwgSUdUX1JPVEFUSU9OXzAsIHBsYW5lLCBj bGlwX2ZiLCAmcmVmX2NyYyk7CisJCXJldCB8PSB5dXZfY2hyb21hX3N1YnBpeGVsX2NsaXBfcGxh bmVfbGVmdChkYXRhLCBJR1RfUk9UQVRJT05fOTAsIHBsYW5lLCBjbGlwX2ZiLCAmcmVmX2NyYyk7 CisJCXJldCB8PSB5dXZfY2hyb21hX3N1YnBpeGVsX2NsaXBfcGxhbmVfbGVmdChkYXRhLCBJR1Rf Uk9UQVRJT05fMTgwLCBwbGFuZSwgY2xpcF9mYiwgJnJlZl9jcmMpOworCQlyZXQgfD0geXV2X2No cm9tYV9zdWJwaXhlbF9jbGlwX3BsYW5lX2xlZnQoZGF0YSwgSUdUX1JPVEFUSU9OXzI3MCwgcGxh bmUsIGNsaXBfZmIsICZyZWZfY3JjKTsKKworCQl5dXZfY2hyb21hX3N1YnBpeGVsX2NsaXBfcGxh bmVfd2l0aF9jdXJzb3IoZGF0YSwgcGxhbmUsIGNsaXBfZmIsIGN1cnNvciwgY3Vyc29yX2ZiLCAm cmVmX2NyYywgNjQsIDY1IC0gY3Vyc29yX2ZiLT5oZWlnaHQpOworCQlyZXQgfD0geXV2X2Nocm9t YV9zdWJwaXhlbF9jbGlwX3BsYW5lX3RvcChkYXRhLCBJR1RfUk9UQVRJT05fMCwgcGxhbmUsIGNs aXBfZmIsICZyZWZfY3JjKTsKKwkJcmV0IHw9IHl1dl9jaHJvbWFfc3VicGl4ZWxfY2xpcF9wbGFu ZV90b3AoZGF0YSwgSUdUX1JPVEFUSU9OXzkwLCBwbGFuZSwgY2xpcF9mYiwgJnJlZl9jcmMpOwor CQlyZXQgfD0geXV2X2Nocm9tYV9zdWJwaXhlbF9jbGlwX3BsYW5lX3RvcChkYXRhLCBJR1RfUk9U QVRJT05fMTgwLCBwbGFuZSwgY2xpcF9mYiwgJnJlZl9jcmMpOworCQlyZXQgfD0geXV2X2Nocm9t YV9zdWJwaXhlbF9jbGlwX3BsYW5lX3RvcChkYXRhLCBJR1RfUk9UQVRJT05fMjcwLCBwbGFuZSwg Y2xpcF9mYiwgJnJlZl9jcmMpOworCisJCS8qIFJlc2V0IHRvIGRlZmF1bHRzICovCisJCWlndF9w bGFuZV9zZXRfcG9zaXRpb24ocGxhbmUsIDAsIDApOworCQlpZ3RfcGxhbmVfc2V0X3JvdGF0aW9u KHBsYW5lLCBJR1RfUk9UQVRJT05fMCk7CisJCWlndF9wbGFuZV9zZXRfZmIocGxhbmUsIHBsYW5l ID09IHByaW1hcnkgPyBiZ19mYiA6IE5VTEwpOworCX0KKworCWlndF9yZXF1aXJlX2YocmV0LCAi Q291bGQgbm90IHRlc3Qgc3VicGl4ZWwgY2xpcHBpbmcgaW4gYW55IGNvcm5lclxuIik7Cit9CisK K3N0YXRpYyB2b2lkIHJ1bl90ZXN0c19mb3JfcGlwZShkYXRhX3QgKmRhdGEsIGVudW0gcGlwZSBw aXBlLAorCQkJY29uc3QgY2hhciAqZnN0ciwgdW5zaWduZWQgaW50IGZvcm1hdCkKK3sKKwlpZ3Rf b3V0cHV0X3QgKm91dHB1dDsKKwlpZ3RfZGlzcGxheV90ICpkaXNwbGF5ID0gJmRhdGEtPmRpc3Bs YXk7CisKKwlpZ3Rfc3VidGVzdF9ncm91cCB7CisJCWlndF9maXh0dXJlIHsKKwkJCWlndF9kaXNw bGF5X3JlcXVpcmVfb3V0cHV0X29uX3BpcGUoZGlzcGxheSwgcGlwZSk7CisJCQlpZ3RfcmVxdWly ZShpZ3RfZmJfc3VwcG9ydGVkX2Zvcm1hdChmb3JtYXQpKTsKKwkJCWlndF9yZXF1aXJlKHBpcGVf c3VwcG9ydHNfZm9ybWF0KGRpc3BsYXksIHBpcGUsIGZvcm1hdCkpOworCQl9CisKKwkJaWd0X3N1 YnRlc3RfZigicGlwZS0lcy0lcy1yZ2Itc3dpdGNoIiwKKwkJCWttc3Rlc3RfcGlwZV9uYW1lKHBp cGUpLCBmc3RyKQorCQkJZm9yX2VhY2hfdmFsaWRfb3V0cHV0X29uX3BpcGUoZGlzcGxheSwgcGlw ZSwgb3V0cHV0KQorCQkJCXl1dl9yZ2Jfc3dpdGNoKGRhdGEsIHBpcGUsIG91dHB1dCwgZmFsc2Us IGZvcm1hdCk7CisKKwkJaWd0X3N1YnRlc3RfZigicGlwZS0lcy0lcy1yZ2Itc2NhbGVkLXN3aXRj aCIsCisJCQlrbXN0ZXN0X3BpcGVfbmFtZShwaXBlKSwgZnN0cikKKwkJCWZvcl9lYWNoX3ZhbGlk X291dHB1dF9vbl9waXBlKGRpc3BsYXksIHBpcGUsIG91dHB1dCkKKwkJCQl5dXZfcmdiX3N3aXRj aChkYXRhLCBwaXBlLCBvdXRwdXQsIHRydWUsIGZvcm1hdCk7CisKKwkJaWd0X3N1YnRlc3RfZigi cGlwZS0lcy0lcy12YWxpZC13aWR0aCIsCisJCQlrbXN0ZXN0X3BpcGVfbmFtZShwaXBlKSwgZnN0 cikKKwkJCWZvcl9lYWNoX3ZhbGlkX291dHB1dF9vbl9waXBlKGRpc3BsYXksIHBpcGUsIG91dHB1 dCkKKwkJCQl5dXZfdmFsaWRfd2lkdGgoZGF0YSwgcGlwZSwgb3V0cHV0LCBmb3JtYXQpOworCisJ CWlndF9zdWJ0ZXN0X2YoInBpcGUtJXMtJXMtY3JvcC1zY2FsZS1idWciLAorCQkJa21zdGVzdF9w aXBlX25hbWUocGlwZSksIGZzdHIpCisJCQlmb3JfZWFjaF92YWxpZF9vdXRwdXRfb25fcGlwZShk aXNwbGF5LCBwaXBlLCBvdXRwdXQpCisJCQkJeXV2X2Nyb3Bfc2NhbGVfYnVnKGRhdGEsIHBpcGUs IG91dHB1dCwgZm9ybWF0KTsKKworCQlpZ3Rfc3VidGVzdF9mKCJwaXBlLSVzLSVzLWNocm9tYS1z dWJwaXhlbC1jbGlwIiwKKwkJCWttc3Rlc3RfcGlwZV9uYW1lKHBpcGUpLCBmc3RyKQorCQkJZm9y X2VhY2hfdmFsaWRfb3V0cHV0X29uX3BpcGUoZGlzcGxheSwgcGlwZSwgb3V0cHV0KQorCQkJCXl1 dl9jaHJvbWFfc3VicGl4ZWxfY2xpcChkYXRhLCBwaXBlLCBvdXRwdXQsIGZvcm1hdCk7CisJfQor fQorCitpZ3RfbWFpbgoreworCWRhdGFfdCBkYXRhID0ge307CisJZW51bSBwaXBlIHBpcGU7CisK KwlpZ3Rfc2tpcF9vbl9zaW11bGF0aW9uKCk7CisKKwlpZ3RfZml4dHVyZSB7CisJCWRhdGEuZGlz cGxheS5kcm1fZmQgPSBkcm1fb3Blbl9kcml2ZXJfbWFzdGVyKERSSVZFUl9BTlkpOworCisJCWtt c3Rlc3Rfc2V0X3Z0X2dyYXBoaWNzX21vZGUoKTsKKwkJaWd0X2Rpc3BsYXlfcmVxdWlyZSgmZGF0 YS5kaXNwbGF5LCBkYXRhLmRpc3BsYXkuZHJtX2ZkKTsKKwkJaWd0X3JlcXVpcmUoZGF0YS5kaXNw bGF5LmlzX2F0b21pYyk7CisJCWlndF9yZXF1aXJlX3BpcGVfY3JjKGRhdGEuZGlzcGxheS5kcm1f ZmQpOworCX0KKworCWZvcl9lYWNoX3BpcGVfc3RhdGljKHBpcGUpIHsKKwkJcnVuX3Rlc3RzX2Zv cl9waXBlKCZkYXRhLCBwaXBlLCAiTlYxMiIsIERSTV9GT1JNQVRfTlYxMik7CisJCXJ1bl90ZXN0 c19mb3JfcGlwZSgmZGF0YSwgcGlwZSwgIk5WMTYiLCBEUk1fRk9STUFUX05WMTYpOworCQlydW5f dGVzdHNfZm9yX3BpcGUoJmRhdGEsIHBpcGUsICJOVjIxIiwgRFJNX0ZPUk1BVF9OVjIxKTsKKwkJ cnVuX3Rlc3RzX2Zvcl9waXBlKCZkYXRhLCBwaXBlLCAiTlY2MSIsIERSTV9GT1JNQVRfTlY2MSk7 CisJCXJ1bl90ZXN0c19mb3JfcGlwZSgmZGF0YSwgcGlwZSwgIllVVjQyMCIsIERSTV9GT1JNQVRf WVVWNDIwKTsKKwkJcnVuX3Rlc3RzX2Zvcl9waXBlKCZkYXRhLCBwaXBlLCAiWVVWNDIyIiwgRFJN X0ZPUk1BVF9ZVVY0MjIpOworCQlydW5fdGVzdHNfZm9yX3BpcGUoJmRhdGEsIHBpcGUsICJZVlU0 MjAiLCBEUk1fRk9STUFUX1lWVTQyMCk7CisJCXJ1bl90ZXN0c19mb3JfcGlwZSgmZGF0YSwgcGlw ZSwgIllWVTQyMiIsIERSTV9GT1JNQVRfWVZVNDIyKTsKKwkJcnVuX3Rlc3RzX2Zvcl9waXBlKCZk YXRhLCBwaXBlLCAiUDAxMCIsIERSTV9GT1JNQVRfUDAxMCk7CisJCXJ1bl90ZXN0c19mb3JfcGlw ZSgmZGF0YSwgcGlwZSwgIlAwMTIiLCBEUk1fRk9STUFUX1AwMTIpOworCQlydW5fdGVzdHNfZm9y X3BpcGUoJmRhdGEsIHBpcGUsICJQMDE2IiwgRFJNX0ZPUk1BVF9QMDE2KTsKKwkJcnVuX3Rlc3Rz X2Zvcl9waXBlKCZkYXRhLCBwaXBlLCAiWVVZViIsIERSTV9GT1JNQVRfWVVZVik7CisJCXJ1bl90 ZXN0c19mb3JfcGlwZSgmZGF0YSwgcGlwZSwgIllWWVUiLCBEUk1fRk9STUFUX1lWWVUpOworCQly dW5fdGVzdHNfZm9yX3BpcGUoJmRhdGEsIHBpcGUsICJVWVZZIiwgRFJNX0ZPUk1BVF9VWVZZKTsK KwkJcnVuX3Rlc3RzX2Zvcl9waXBlKCZkYXRhLCBwaXBlLCAiVllVWSIsIERSTV9GT1JNQVRfVllV WSk7CisJCXJ1bl90ZXN0c19mb3JfcGlwZSgmZGF0YSwgcGlwZSwgIlhZVVY4ODg4IiwgRFJNX0ZP Uk1BVF9YWVVWODg4OCk7CisJfQorCisJaWd0X2ZpeHR1cmUgeworCQlpZ3RfZGlzcGxheV9maW5p KCZkYXRhLmRpc3BsYXkpOworCQljbG9zZShkYXRhLmRpc3BsYXkuZHJtX2ZkKTsKKwl9Cit9CmRp ZmYgLS1naXQgYS90ZXN0cy9tZXNvbi5idWlsZCBiL3Rlc3RzL21lc29uLmJ1aWxkCmluZGV4IDBm MTJkZjI2ZDlmYi4uYjQ0YjVhN2M0YzRmIDEwMDY0NAotLS0gYS90ZXN0cy9tZXNvbi5idWlsZAor KysgYi90ZXN0cy9tZXNvbi5idWlsZApAQCAtNjAsNiArNjAsNyBAQCB0ZXN0X3Byb2dzID0gWwog CSdrbXNfdW5pdmVyc2FsX3BsYW5lJywKIAkna21zX3ZibGFuaycsCiAJJ2ttc192cnInLAorCSdr bXNfeXV2JywKIAknbWV0YV90ZXN0JywKIAkncGVyZicsCiAJJ3BtX2JhY2tsaWdodCcsCi0tIAoy LjIwLjEKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmln dC1kZXYgbWFpbGluZyBsaXN0CmlndC1kZXZAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8v bGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaWd0LWRldg==