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 3EF9289EA9 for ; Wed, 27 Mar 2019 09:29:34 +0000 (UTC) From: Maarten Lankhorst Date: Wed, 27 Mar 2019 10:29:30 +0100 Message-Id: <20190327092930.6845-4-maarten.lankhorst@linux.intel.com> In-Reply-To: <20190327092930.6845-1-maarten.lankhorst@linux.intel.com> References: <20190327092930.6845-1-maarten.lankhorst@linux.intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t 3/3] tests/kms_yuv: Add yuv specific tests, v3. List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , 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 aXMgaGlkZGVuIGJ5IGEgY3Vyc29yIGFuZCBhIHdob2xlIDJ4MiBwaXhlbCBpcyBoaWRkZW4uCgpD aGFuZ2VzIHNpbmNlIHYxOgotIFJlc2V0IHBsYW5lIHBvc2l0aW9uIHRvIDAsMCBhdCB0aGUgc3Rh cnQgb2YgeXV2X3ZhbGlkX3dpZHRoX3BsYW5lKCkuCi0gSGFuZGxlIFN3YXRpJ3MgZmVlZGJhY2su CkNoYW5nZXMgc2luY2UgdjI6Ci0gU2tpcCA5MMKwLzI3MMKwIHJvdGF0aW9uIGluIHRlc3RzIHdo ZW4gZm9ybWF0cyBkb24ndCBzdXBwb3J0IGl0LgotIEFkZCBhbGwgbmV3IEhEUiBmb3JtYXRzIHRv IHRlc3QuCi0gVXNlIGlndF9wbGFuZV9oYXNfZm9ybWF0X21vZC4KLSBTdXBwb3J0IHRlc3RzIG9u ICFpOTE1IGJ5IGNoZWNraW5nIGlmIFgvWSB0aWxpbmcgbW9kaWZpZXJzIGFyZSBzdXBwb3J0ZWQu Ci0gRG8gbm90IGVuYWJsZSB1bnRlc3RlZCBwbGFuZXMgdG8gcHJldmVudCBleGhhdXNpbmcgbWVt b3J5IGJhbmR3aWR0aAogIGFuZCBhdmFpbGFibGUgTlYxMiBZIHBsYW5lcyBpbiB0aGUgcmdiLXN3 aXRjaC1zY2FsZWQgdGVzdC4KClNpZ25lZC1vZmYtYnk6IE1hYXJ0ZW4gTGFua2hvcnN0IDxtYWFy dGVuLmxhbmtob3JzdEBsaW51eC5pbnRlbC5jb20+Ci0tLQogdGVzdHMvTWFrZWZpbGUuc291cmNl cyB8ICAgMSArCiB0ZXN0cy9rbXNfeXV2LmMgICAgICAgIHwgODQzICsrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrCiB0ZXN0cy9tZXNvbi5idWlsZCAgICAgIHwgICAxICsK IDMgZmlsZXMgY2hhbmdlZCwgODQ1IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCB0 ZXN0cy9rbXNfeXV2LmMKCmRpZmYgLS1naXQgYS90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzIGIvdGVz dHMvTWFrZWZpbGUuc291cmNlcwppbmRleCA3MWNjZjAwYWYyNTYuLjVlYjQ2MDg3ZTM2MiAxMDA2 NDQKLS0tIGEvdGVzdHMvTWFrZWZpbGUuc291cmNlcworKysgYi90ZXN0cy9NYWtlZmlsZS5zb3Vy Y2VzCkBAIC03NCw2ICs3NCw3IEBAIFRFU1RTX3Byb2dzID0gXAogCWttc191bml2ZXJzYWxfcGxh bmUgXAogCWttc192YmxhbmsgXAogCWttc192cnIgXAorCWttc195dXYgXAogCW1ldGFfdGVzdCBc CiAJcGVyZiBcCiAJcGVyZl9wbXUgXApkaWZmIC0tZ2l0IGEvdGVzdHMva21zX3l1di5jIGIvdGVz dHMva21zX3l1di5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uY2U5 ZTRhZGUzMzRmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMva21zX3l1di5jCkBAIC0wLDAgKzEs ODQzIEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTkgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisg KiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBl cnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVk IGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhl IFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRp b24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBk aXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0 d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBm dXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgor ICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90 aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBv cnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQg IkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1Q TElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJD SEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9O SU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJ R0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAq IExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RI RVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRI RSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdB UkUuCisgKgorICogQXV0aG9yczoKKyAqICAgIE1hYXJ0ZW4gTGFua2hvcnN0IDxtYWFydGVuLmxh bmtob3JzdEBsaW51eC5pbnRlbC5jb20+CisgKi8KKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lu Y2x1ZGUgImlndC5oIgorI2luY2x1ZGUgPGNhaXJvLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNp bmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzeXMvdGlt ZS5oPgorCit0eXBlZGVmIHN0cnVjdCB7CisJaWd0X2Rpc3BsYXlfdCBkaXNwbGF5OworCisJaWd0 X3BpcGVfY3JjX3QgKnBpcGVfY3JjOworCXN0cnVjdCBpZ3RfZmIgZmJbNl07Cit9IGRhdGFfdDsK Kworc3RhdGljIHVpbnQ2NF90IHhfbW9kaWZpZXIgPSBMT0NBTF9EUk1fRk9STUFUX01PRF9OT05F Oworc3RhdGljIHVpbnQ2NF90IHlfbW9kaWZpZXIgPSBMT0NBTF9EUk1fRk9STUFUX01PRF9OT05F OworCitzdGF0aWMgYm9vbCBwaXBlX3N1cHBvcnRzX2Zvcm1hdChpZ3RfZGlzcGxheV90ICpkaXNw bGF5LCBlbnVtIHBpcGUgcGlwZSwgdWludDMyX3QgZm9ybWF0LCB1aW50NjRfdCB0aWxpbmcpCit7 CisJaWd0X3BsYW5lX3QgKnBsYW5lOworCisJZm9yX2VhY2hfcGxhbmVfb25fcGlwZShkaXNwbGF5 LCBwaXBlLCBwbGFuZSkKKwkJaWYgKGlndF9wbGFuZV9oYXNfZm9ybWF0X21vZChwbGFuZSwgZm9y bWF0LCB0aWxpbmcpKQorCQkJcmV0dXJuIHRydWU7CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0 YXRpYyB2b2lkIHJlbW92ZV9mYnMoZGF0YV90ICpkYXRhKQoreworCWludCBpOworCisJZm9yIChp ID0gMDsgaSA8IEFSUkFZX1NJWkUoZGF0YS0+ZmIpOyBpKyspCisJCWlndF9yZW1vdmVfZmIoZGF0 YS0+ZGlzcGxheS5kcm1fZmQsICZkYXRhLT5mYltpXSk7Cit9CisKK3N0YXRpYyB2b2lkIHByZXBh cmVfY3J0YyhkYXRhX3QgKmRhdGEsIGVudW0gcGlwZSBwaXBlLCBpZ3Rfb3V0cHV0X3QgKm91dHB1 dCkKK3sKKwlpZ3RfZGlzcGxheV90ICpkaXNwbGF5ID0gJmRhdGEtPmRpc3BsYXk7CisKKwlyZW1v dmVfZmJzKGRhdGEpOworCWlndF9kaXNwbGF5X3Jlc2V0KGRpc3BsYXkpOworCWlndF9vdXRwdXRf c2V0X3BpcGUob3V0cHV0LCBwaXBlKTsKKwlpZ3RfZGlzcGxheV9jb21taXQyKGRpc3BsYXksIENP TU1JVF9BVE9NSUMpOworCisJaWd0X3BpcGVfY3JjX2ZyZWUoZGF0YS0+cGlwZV9jcmMpOworCWRh dGEtPnBpcGVfY3JjID0gaWd0X3BpcGVfY3JjX25ldyhkaXNwbGF5LT5kcm1fZmQsIHBpcGUsIElO VEVMX1BJUEVfQ1JDX1NPVVJDRV9BVVRPKTsKK30KKworc3RhdGljIHZvaWQgc2V0X2ZiKGlndF9w bGFuZV90ICpwbGFuZSwgc3RydWN0IGlndF9mYiAqZmIsIGJvb2wgc2NhbGVkKQoreworCWlndF9w bGFuZV9zZXRfZmIocGxhbmUsIGZiKTsKKworCWlmIChzY2FsZWQgJiYgZmIpCisJCWlndF9mYl9z ZXRfc2l6ZShmYiwgcGxhbmUsIGZiLT53aWR0aCwgMTYpOworCisJaWYgKGZiICYmIGZiLT5tb2Rp ZmllciA9PSB5X21vZGlmaWVyKSB7IC8vIFRPRE8KKwkJaWd0X3BsYW5lX3NldF9yb3RhdGlvbihw bGFuZSwgSUdUX1JPVEFUSU9OXzkwKTsKKwkJaWd0X3BsYW5lX3NldF9zaXplKHBsYW5lLCBmYi0+ aGVpZ2h0LCBmYi0+d2lkdGgpOworCX0gZWxzZQorCQlpZ3RfcGxhbmVfc2V0X3JvdGF0aW9uKHBs YW5lLCBJR1RfUk9UQVRJT05fMCk7Cit9CisKK3N0YXRpYyB2b2lkIHl1dl9yZ2Jfc3dpdGNoKGRh dGFfdCAqZGF0YSwgZW51bSBwaXBlIHBpcGUsIGlndF9vdXRwdXRfdCAqb3V0cHV0LCBib29sIHNj YWxlZCwgdW5zaWduZWQgZm9ybWF0KQoreworCWRybU1vZGVNb2RlSW5mbyAqbW9kZSA9IGlndF9v dXRwdXRfZ2V0X21vZGUob3V0cHV0KTsKKwlpZ3RfZGlzcGxheV90ICpkaXNwbGF5ID0gJmRhdGEt PmRpc3BsYXk7CisJaWd0X3BsYW5lX3QgKnBsYW5lOworCWludCBpOworCWlndF9jcmNfdCByZWZf Y3JjWzRdLCBjcmM7CisJYm9vbCB2YWxpZFs0XSA9IHt9OworCisJcHJlcGFyZV9jcnRjKGRhdGEs IHBpcGUsIG91dHB1dCk7CisKKwlpZ3RfY3JlYXRlX3BhdHRlcm5fZmIoZGlzcGxheS0+ZHJtX2Zk LCBtb2RlLT5oZGlzcGxheSwgbW9kZS0+dmRpc3BsYXksCisJCQkgICAgICBmb3JtYXQsIHhfbW9k aWZpZXIsICZkYXRhLT5mYlswXSk7CisKKwlpZ3RfY3JlYXRlX3BhdHRlcm5fZmIoZGlzcGxheS0+ ZHJtX2ZkLCBtb2RlLT52ZGlzcGxheSwgbW9kZS0+aGRpc3BsYXksCisJCQkgICAgICBmb3JtYXQs IHlfbW9kaWZpZXIsICZkYXRhLT5mYlsxXSk7CisKKwlpZ3RfY3JlYXRlX3BhdHRlcm5fZmIoZGlz cGxheS0+ZHJtX2ZkLCBtb2RlLT5oZGlzcGxheSwgbW9kZS0+dmRpc3BsYXksCisJCQkgICAgICBE Uk1fRk9STUFUX1hSR0I4ODg4LCB4X21vZGlmaWVyLCAmZGF0YS0+ZmJbMl0pOworCisJaWd0X2Ny ZWF0ZV9wYXR0ZXJuX2ZiKGRpc3BsYXktPmRybV9mZCwgbW9kZS0+dmRpc3BsYXksIG1vZGUtPmhk aXNwbGF5LAorCQkJICAgICAgRFJNX0ZPUk1BVF9YUkdCODg4OCwgeV9tb2RpZmllciwgJmRhdGEt PmZiWzNdKTsKKworCWZvcl9lYWNoX3BsYW5lX29uX3BpcGUoZGlzcGxheSwgcGlwZSwgcGxhbmUp IHsKKwkJY29uc3QgaW50IHNlcVtdID0geworCQkJMiwgMCwgMiwgMSwgMywgMSwgMworCQl9Owor CisJCWlmICghaWd0X3BsYW5lX2hhc19mb3JtYXRfbW9kKHBsYW5lLCBmb3JtYXQsIGRhdGEtPmZi WzBdLm1vZGlmaWVyKSkKKwkJCWNvbnRpbnVlOworCisJCS8qIENvbGxlY3QgcmVmZXJlbmNlIGNy YyB3aXRoIHRvZ2dsZSBpbiBiZXR3ZWVuLiAqLworCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0la RShyZWZfY3JjKTsgaSsrKSB7CisJCQlzZXRfZmIocGxhbmUsICZkYXRhLT5mYltpXSwgc2NhbGVk KTsKKworCQkJaWYgKGkgIT0gMSkKKwkJCQlpZ3RfZGlzcGxheV9jb21taXQyKGRpc3BsYXksIENP TU1JVF9BVE9NSUMpOworCQkJZWxzZSBpZiAoaWd0X2Rpc3BsYXlfdHJ5X2NvbW1pdDIoZGlzcGxh eSwgQ09NTUlUX0FUT01JQykgPCAwKQorCQkJCWNvbnRpbnVlOworCisJCQlpZ3RfcGlwZV9jcmNf Y29sbGVjdF9jcmMoZGF0YS0+cGlwZV9jcmMsICZyZWZfY3JjW2ldKTsKKwkJCXZhbGlkW2ldID0g dHJ1ZTsKKworCQkJc2V0X2ZiKHBsYW5lLCBOVUxMLCBzY2FsZWQpOworCQkJaWd0X2Rpc3BsYXlf Y29tbWl0MihkaXNwbGF5LCBDT01NSVRfQVRPTUlDKTsKKwkJfQorCisJCWZvciAoaSA9IDA7IGkg PCBBUlJBWV9TSVpFKHNlcSk7IGkrKykgeworCQkJaW50IGogPSBzZXFbaV07CisKKwkJCWlmICgh dmFsaWRbal0pCisJCQkJY29udGludWU7CisKKwkJCXNldF9mYihwbGFuZSwgJmRhdGEtPmZiW2pd LCBzY2FsZWQpOworCQkJaWd0X2Rpc3BsYXlfY29tbWl0MihkaXNwbGF5LCBDT01NSVRfQVRPTUlD KTsKKworCQkJaWd0X3BpcGVfY3JjX2NvbGxlY3RfY3JjKGRhdGEtPnBpcGVfY3JjLCAmY3JjKTsK KwkJCWlndF9hc3NlcnRfY3JjX2VxdWFsKCZyZWZfY3JjW2pdLCAmY3JjKTsKKwkJfQorCisJCS8q IFdlIG9ubHkgaGF2ZSBmZXcgc2NhbGVycywgZG9uJ3QgdXNlIDEgZm9yIHVudXNlZCBwbGFuZXMg Ki8KKwkJaWd0X3BsYW5lX3NldF9mYihwbGFuZSwgTlVMTCk7CisJfQorfQorCisjZGVmaW5lIGFz c2VydF9jb2xsZWN0ZWRfY3JjX2VxdWFsKHBpcGVfY3JjLCBjcmMsIHJlZl9jcmMpIFwKKwlkbyB7 IFwKKwkJaWd0X3BpcGVfY3JjX2dldF9jdXJyZW50KGRpc3BsYXktPmRybV9mZCwgcGlwZV9jcmMs IGNyYyk7CVwKKwkJaWd0X2Fzc2VydF9jcmNfZXF1YWwocmVmX2NyYywgY3JjKTsJXAorCX0gd2hp bGUgKDApCisKK3N0YXRpYyB2b2lkIHNldF9zcmNfY29vcmRzKGlndF9wbGFuZV90ICpwbGFuZSwg c3RydWN0IGlndF9mYiAqZmIsCisJCQkgICBpZ3Rfcm90YXRpb25fdCByb3QsIGludCB2aXMsIGlu dCBoaWRkZW4pCit7CisJc3dpdGNoIChyb3QpIHsKKwljYXNlIElHVF9ST1RBVElPTl8wOgorCQlp Z3RfZmJfc2V0X3Bvc2l0aW9uKGZiLCBwbGFuZSwgZmItPndpZHRoIC8gMiAtIHZpcywgZmItPmhl aWdodCAvIDIgLSB2aXMpOworCQlicmVhazsKKwljYXNlIElHVF9ST1RBVElPTl85MDoKKwkJaWd0 X2ZiX3NldF9wb3NpdGlvbihmYiwgcGxhbmUsIGZiLT53aWR0aCAvIDIgLSBoaWRkZW4sIGZiLT5o ZWlnaHQgLyAyIC0gdmlzKTsKKwkJYnJlYWs7CisJY2FzZSBJR1RfUk9UQVRJT05fMTgwOgorCQlp Z3RfZmJfc2V0X3Bvc2l0aW9uKGZiLCBwbGFuZSwgZmItPndpZHRoIC8gMiAtIGhpZGRlbiwgZmIt PmhlaWdodCAvIDIgLSBoaWRkZW4pOworCQlicmVhazsKKwljYXNlIElHVF9ST1RBVElPTl8yNzA6 CisJCWlndF9mYl9zZXRfcG9zaXRpb24oZmIsIHBsYW5lLCBmYi0+d2lkdGggLyAyIC0gdmlzLCBm Yi0+aGVpZ2h0IC8gMiAtIGhpZGRlbik7CisJCWJyZWFrOworCWRlZmF1bHQ6IGlndF9hc3NlcnQo MCk7CisJfQorCWlndF9mYl9zZXRfc2l6ZShmYiwgcGxhbmUsIHZpcyArIGhpZGRlbiwgdmlzICsg aGlkZGVuKTsKK30KKworc3RhdGljIHZvaWQgeXV2X3ZhbGlkX3dpZHRoX3BsYW5lKGRhdGFfdCAq ZGF0YSwgZHJtTW9kZU1vZGVJbmZvICptb2RlLAorCQkJCSAgaWd0X3BsYW5lX3QgKnBsYW5lLCBp Z3Rfcm90YXRpb25fdCByb3QsCisJCQkJICBpZ3RfY3JjX3QgKnJlZl9jcmMpCit7CisJaWd0X2Rp c3BsYXlfdCAqZGlzcGxheSA9ICZkYXRhLT5kaXNwbGF5OworCWlndF9jcmNfdCBjcmM7CisJc3Ry dWN0IGlndF9mYiAqY2xpcF9mYiA9ICZkYXRhLT5mYlsyXTsKKwlpbnQgaSwgcmV0OworCisJLyog SnVzdCBjbGlwcGluZy4uICovCisJaWd0X3BsYW5lX3NldF9mYihwbGFuZSwgY2xpcF9mYik7CisJ aWd0X3BsYW5lX3NldF9yb3RhdGlvbihwbGFuZSwgcm90KTsKKwlpZiAocm90ICYgKElHVF9ST1RB VElPTl85MCB8IElHVF9ST1RBVElPTl8yNzApKQorCQlpZ3RfcGxhbmVfc2V0X3NpemUocGxhbmUs IGNsaXBfZmItPmhlaWdodCwgY2xpcF9mYi0+d2lkdGgpOworCWlndF9wbGFuZV9zZXRfcG9zaXRp b24ocGxhbmUsIG1vZGUtPmhkaXNwbGF5IC0gY2xpcF9mYi0+d2lkdGggLyAyLCBtb2RlLT52ZGlz cGxheSAtIGNsaXBfZmItPmhlaWdodCAvIDIpOworCWlmICgocm90ID09IElHVF9ST1RBVElPTl85 MCB8fCByb3QgPT0gSUdUX1JPVEFUSU9OXzI3MCkgJiYKKwkgICAgaWd0X2Rpc3BsYXlfdHJ5X2Nv bW1pdDIoZGlzcGxheSwgQ09NTUlUX0FUT01JQykgPCAwKSB7CisJCWlndF9kZWJ1ZygiVGhpcyBy b3RhdGlvbiBub3QgYXZhaWxhYmxlIGZvciB0aGlzIGZvcm1hdC5cbiIpOworCQlyZXR1cm47CisJ fQorCisJaWd0X2Rpc3BsYXlfY29tbWl0MihkaXNwbGF5LCBDT01NSVRfQVRPTUlDKTsKKwlhc3Nl cnRfY29sbGVjdGVkX2NyY19lcXVhbChkYXRhLT5waXBlX2NyYywgJmNyYywgcmVmX2NyYyk7CisK KwkvKiBDbGlwcGluZyBhbmQgc2NhbGluZy4gKi8KKwlpZ3RfZmJfc2V0X3Bvc2l0aW9uKGNsaXBf ZmIsIHBsYW5lLCBjbGlwX2ZiLT53aWR0aCAvIDIgLSAxNiwgY2xpcF9mYi0+aGVpZ2h0IC8gMiAt IDE2KTsKKwlpZ3RfZmJfc2V0X3NpemUoY2xpcF9mYiwgcGxhbmUsIDMyLCAzMik7CisJaWd0X2Rp c3BsYXlfY29tbWl0MihkaXNwbGF5LCBDT01NSVRfQVRPTUlDKTsKKwlhc3NlcnRfY29sbGVjdGVk X2NyY19lcXVhbChkYXRhLT5waXBlX2NyYywgJmNyYywgcmVmX2NyYyk7CisKKwkvKiBUcnkgbnZh bGlkIDwgOCBzcmMgdmlzaWJsZS4gKi8KKwlzZXRfc3JjX2Nvb3JkcyhwbGFuZSwgY2xpcF9mYiwg cm90LCA0LCA0KTsKKwlpZ3RfZGlzcGxheV90cnlfY29tbWl0MihkaXNwbGF5LCBDT01NSVRfQVRP TUlDKTsKKworCS8qIFRyeSBkaWZmZXJlbnQgYWxpZ25tZW50cyBmb3IgeC95IHRvIHNlZSBpZiBh bnkgaGl0IHVuZGVycnVucyAqLworCWZvciAoaSA9IDE7IGkgPCA0OyBpKyspIHsKKwkJc2V0X3Ny Y19jb29yZHMocGxhbmUsIGNsaXBfZmIsIHJvdCwgMTYgKyAyICogaSwgMTYgLSAyICogaSk7CisJ CWlndF9kaXNwbGF5X2NvbW1pdDIoZGlzcGxheSwgQ09NTUlUX0FUT01JQyk7CisJCWFzc2VydF9j b2xsZWN0ZWRfY3JjX2VxdWFsKGRhdGEtPnBpcGVfY3JjLCAmY3JjLCByZWZfY3JjKTsKKworCQkv KiBBbmQgYWxzbyBzaG93IG1vcmUgb2YgdGhlIHNjcmVlbiAqLworCQlzZXRfc3JjX2Nvb3Jkcyhw bGFuZSwgY2xpcF9mYiwgcm90LCAxNiArIGksIDE2ICsgaSk7CisJCXJldCA9IGlndF9kaXNwbGF5 X3RyeV9jb21taXQyKGRpc3BsYXksIENPTU1JVF9BVE9NSUMpOworCisJCWlmIChyZXQgPT0gLUVJ TlZBTCkgeworCQkJaWd0X2Fzc2VydChpICUgMiB8fCByb3QgPT0gSUdUX1JPVEFUSU9OXzI3MCB8 fCByb3QgPT0gKElHVF9ST1RBVElPTl85MCB8IElHVF9SRUZMRUNUX1gpKTsKKwkJCWNvbnRpbnVl OworCQl9IGVsc2UKKwkJCWlndF9hc3NlcnRfZXEocmV0LCAwKTsKKwkJYXNzZXJ0X2NvbGxlY3Rl ZF9jcmNfZXF1YWwoZGF0YS0+cGlwZV9jcmMsICZjcmMsIHJlZl9jcmMpOworCX0KKworCS8qCisJ ICogQXMgYSBmaW5hbCB0ZXN0LCB0cnkgd2l0aCAxNiBzcmMgdmlzaWJsZSwgYW5kIHZhcmlvdXMg aW52aXNpYmxlCisJICogY29tcG9uZW50cyB0byBjaGVjayBjbGlwcGluZyBkb2Vzbid0IGRyb3Ag dGhlIHZpc2libGUgc3JjIGJlbG93IDE2LgorCSAqLworCWZvciAoaSA9IDA7IGkgPCAxNjsgaSAr PSA0KSB7CisJCXNldF9zcmNfY29vcmRzKHBsYW5lLCBjbGlwX2ZiLCByb3QsIDE2LCBpKTsKKwkJ aWYgKHJvdCAmIChJR1RfUk9UQVRJT05fOTAgfCBJR1RfUk9UQVRJT05fMjcwKSkKKwkJCWlndF9w bGFuZV9zZXRfc2l6ZShwbGFuZSwgKGNsaXBfZmItPmhlaWdodCAvIDMyKSAqICgxNiArIGkpLAor CQkJCQkgICAoY2xpcF9mYi0+d2lkdGggLyAzMikgKiAoMTYgKyBpKSk7CisJCWVsc2UKKwkJCWln dF9wbGFuZV9zZXRfc2l6ZShwbGFuZSwgKGNsaXBfZmItPndpZHRoIC8gMzIpICogKDE2ICsgaSks CisJCQkJCSAgIChjbGlwX2ZiLT5oZWlnaHQgLyAzMikgKiAoMTYgKyBpKSk7CisJCWlndF9kaXNw bGF5X2NvbW1pdDIoZGlzcGxheSwgQ09NTUlUX0FUT01JQyk7CisJCWFzc2VydF9jb2xsZWN0ZWRf Y3JjX2VxdWFsKGRhdGEtPnBpcGVfY3JjLCAmY3JjLCByZWZfY3JjKTsKKwl9Cit9CisKK3N0YXRp YyB2b2lkIHl1dl92YWxpZF93aWR0aChkYXRhX3QgKmRhdGEsIGVudW0gcGlwZSBwaXBlLCBpZ3Rf b3V0cHV0X3QgKm91dHB1dCwgdW5zaWduZWQgZm9ybWF0KQoreworCWRybU1vZGVNb2RlSW5mbyAq bW9kZSA9IGlndF9vdXRwdXRfZ2V0X21vZGUob3V0cHV0KTsKKwlpZ3RfZGlzcGxheV90ICpkaXNw bGF5ID0gJmRhdGEtPmRpc3BsYXk7CisJaWd0X3BsYW5lX3QgKnBsYW5lOworCXN0cnVjdCBpZ3Rf ZmIgKmNsaXBfZmIgPSAmZGF0YS0+ZmJbMl07CisJc3RydWN0IGlndF9mYiAqcmVmX2ZiID0gJmRh dGEtPmZiWzNdOworCisJcHJlcGFyZV9jcnRjKGRhdGEsIHBpcGUsIG91dHB1dCk7CisKKwlpZ3Rf Y3JlYXRlX2ZiKGRpc3BsYXktPmRybV9mZCwgNjQsIDY0LCBmb3JtYXQsCisJCSAgICAgIExPQ0FM X0k5MTVfRk9STUFUX01PRF9ZX1RJTEVELCByZWZfZmIpOworCisJaWd0X2NyZWF0ZV9mYihkaXNw bGF5LT5kcm1fZmQsIDIgKiByZWZfZmItPndpZHRoLAorCQkgICAgICAyICogcmVmX2ZiLT5oZWln aHQsIGZvcm1hdCwKKwkJICAgICAgTE9DQUxfSTkxNV9GT1JNQVRfTU9EX1lfVElMRUQsIGNsaXBf ZmIpOworCisJaWd0X3BpcGVfY3JjX3N0YXJ0KGRhdGEtPnBpcGVfY3JjKTsKKworCWZvcl9lYWNo X3BsYW5lX29uX3BpcGUoZGlzcGxheSwgcGlwZSwgcGxhbmUpIHsKKwkJaWd0X2NyY190IHJlZl9j cmNbNF07CisJCWNhaXJvX3QgKmNyOworCQlzdGF0aWMgY29uc3QgZG91YmxlIGNvbG9yc1s0XVsz XSA9IHsKKwkJCXsgMS4sIDAuLCAwLiB9LAorCQkJeyAwLiwgMS4sIDAuIH0sCisJCQl7IDAuLCAw LiwgMS4gfSwKKwkJCXsgMS4sIDEuLCAxLiB9CisJCX07CisJCWludCBpOworCisJCWlmICghaWd0 X3BsYW5lX2hhc19mb3JtYXRfbW9kKHBsYW5lLCBmb3JtYXQsIGRhdGEtPmZiWzBdLm1vZGlmaWVy KSkKKwkJCWNvbnRpbnVlOworCisJCS8qIERyYXcgdGhlIEZCIHRoYXQgd2lsbCBiZSB1c2VkIGZv ciBjbGlwcGluZyB0ZXN0cy4gKi8KKwkJY3IgPSBpZ3RfZ2V0X2NhaXJvX2N0eChkaXNwbGF5LT5k cm1fZmQsIGNsaXBfZmIpOworCQlpZ3RfcGFpbnRfY29sb3IoY3IsIDAsIDAsIGNsaXBfZmItPndp ZHRoIC8gMiwgY2xpcF9mYi0+aGVpZ2h0IC8gMiwKKwkJCQljb2xvcnNbMF1bMF0sIGNvbG9yc1sw XVsxXSwgY29sb3JzWzBdWzJdKTsKKworCQlpZ3RfcGFpbnRfY29sb3IoY3IsIGNsaXBfZmItPndp ZHRoIC8gMiwgMCwKKwkJCQljbGlwX2ZiLT53aWR0aCAvIDIsIGNsaXBfZmItPmhlaWdodCAvIDIs CisJCQkJY29sb3JzWzFdWzBdLCBjb2xvcnNbMV1bMV0sIGNvbG9yc1sxXVsyXSk7CisKKwkJaWd0 X3BhaW50X2NvbG9yKGNyLCBjbGlwX2ZiLT53aWR0aCAvIDIsIGNsaXBfZmItPmhlaWdodCAvIDIs CisJCQkJY2xpcF9mYi0+d2lkdGggLyAyLCBjbGlwX2ZiLT5oZWlnaHQgLyAyLAorCQkJCWNvbG9y c1syXVswXSwgY29sb3JzWzJdWzFdLCBjb2xvcnNbMl1bMl0pOworCisJCWlndF9wYWludF9jb2xv cihjciwgMCwgY2xpcF9mYi0+aGVpZ2h0IC8gMiwKKwkJCQljbGlwX2ZiLT53aWR0aCAvIDIsIGNs aXBfZmItPmhlaWdodCAvIDIsCisJCQkJY29sb3JzWzNdWzBdLCBjb2xvcnNbM11bMV0sIGNvbG9y c1szXVsyXSk7CisKKwkJaWd0X3B1dF9jYWlyb19jdHgoZGlzcGxheS0+ZHJtX2ZkLCBjbGlwX2Zi LCBjcik7CisKKwkJLyogRHJhdyBhbGwgcmVmZXJlbmNlIEZCJ3MgdG8gY29sbGVjdCB0aGUgQ1JD LiAqLworCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCQljciA9IGlndF9nZXRfY2Fpcm9f Y3R4KGRpc3BsYXktPmRybV9mZCwgcmVmX2ZiKTsKKwkJCWlndF9wYWludF9jb2xvcihjciwgMCwg MCwgcmVmX2ZiLT53aWR0aCwgcmVmX2ZiLT5oZWlnaHQsCisJCQkJCWNvbG9yc1tpXVswXSwgY29s b3JzW2ldWzFdLCBjb2xvcnNbaV1bMl0pOworCQkJaWd0X3B1dF9jYWlyb19jdHgoZGlzcGxheS0+ ZHJtX2ZkLCAmZGF0YS0+ZmJbM10sIGNyKTsKKworCQkJaWYgKCFpKSB7CisJCQkJaWd0X3BsYW5l X3NldF9mYihwbGFuZSwgcmVmX2ZiKTsKKwkJCQlpZ3RfcGxhbmVfc2V0X3Bvc2l0aW9uKHBsYW5l LCBtb2RlLT5oZGlzcGxheSAtIHJlZl9mYi0+d2lkdGgsIG1vZGUtPnZkaXNwbGF5IC0gcmVmX2Zi LT5oZWlnaHQpOworCQkJCWlndF9kaXNwbGF5X2NvbW1pdDIoZGlzcGxheSwgQ09NTUlUX0FUT01J Qyk7CisJCQl9IGVsc2UgeworCQkJCWlndF9kaXJ0eV9mYihkaXNwbGF5LT5kcm1fZmQsIHJlZl9m Yik7CisJCQkJaWd0X3dhaXRfZm9yX3ZibGFuayhkaXNwbGF5LT5kcm1fZmQsIHBpcGUpOworCQkJ fQorCisJCQlpZ3RfcGlwZV9jcmNfZHJhaW4oZGF0YS0+cGlwZV9jcmMpOworCQkJaWd0X3BpcGVf Y3JjX2dldF9zaW5nbGUoZGF0YS0+cGlwZV9jcmMsICZyZWZfY3JjW2ldKTsKKwkJfQorCisJCWln dF9wbGFuZV9zZXRfZmIocGxhbmUsIE5VTEwpOworCQlpZ3RfcGxhbmVfc2V0X3Bvc2l0aW9uKHBs YW5lLCAwLCAwKTsKKworCQl5dXZfdmFsaWRfd2lkdGhfcGxhbmUoZGF0YSwgbW9kZSwgcGxhbmUs IElHVF9ST1RBVElPTl8wLCAmcmVmX2NyY1swXSk7CisJCXl1dl92YWxpZF93aWR0aF9wbGFuZShk YXRhLCBtb2RlLCBwbGFuZSwgSUdUX1JPVEFUSU9OXzkwLCAmcmVmX2NyY1sxXSk7CisJCXl1dl92 YWxpZF93aWR0aF9wbGFuZShkYXRhLCBtb2RlLCBwbGFuZSwgSUdUX1JPVEFUSU9OXzE4MCwgJnJl Zl9jcmNbMl0pOworCQl5dXZfdmFsaWRfd2lkdGhfcGxhbmUoZGF0YSwgbW9kZSwgcGxhbmUsIElH VF9ST1RBVElPTl8yNzAsICZyZWZfY3JjWzNdKTsKKworCQlpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5l LCBOVUxMKTsKKwl9Cit9CisKK3N0YXRpYyBib29sIHl1dl9jb21taXRfcm90YXRlZChpZ3RfZGlz cGxheV90ICpkaXNwbGF5LCBpZ3Rfcm90YXRpb25fdCByb3QpCit7CisJaWYgKGlndF9kaXNwbGF5 X3RyeV9jb21taXQyKGRpc3BsYXksIENPTU1JVF9BVE9NSUMpIDwgMCkgeworCQlpZ3RfZGVidWco IlNraXBwaW5nIHJvdGF0ZWQgdGVzdCwgYWxpZ25tZW50IGlzIHdyb25nLlxuIik7CisJCXJldHVy biBmYWxzZTsKKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQgeXV2X2Nyb3Bf c2NhbGVfYnVnX3BsYW5lKGRhdGFfdCAqZGF0YSwgZHJtTW9kZU1vZGVJbmZvICptb2RlLAorCQkJ CSAgICAgIGlndF9wbGFuZV90ICpwbGFuZSwgc3RydWN0IGlndF9mYiAqZmIsCisJCQkJICAgICAg aWd0X3JvdGF0aW9uX3Qgcm90LCBpZ3RfY3JjX3QgKnJlZl9jcmMpCit7CisJaWd0X2Rpc3BsYXlf dCAqZGlzcGxheSA9ICZkYXRhLT5kaXNwbGF5OworCWlndF9jcmNfdCBjcmM7CisJaW50IG9mc1td ID0geyAwLCAxLCAtMSwgMiwgLTIgfTsKKwlpbnQgaSwgajsKKworCWlndF9wbGFuZV9zZXRfZmIo cGxhbmUsIGZiKTsKKwlpZ3RfcGxhbmVfc2V0X3JvdGF0aW9uKHBsYW5lLCByb3QpOworCWlndF9w bGFuZV9zZXRfcG9zaXRpb24ocGxhbmUsIDY0LCA2NCk7CisJaWd0X3BsYW5lX3NldF9zaXplKHBs YW5lLCAyNTYsIDI1Nik7CisKKwlpZ3RfZmJfc2V0X3Bvc2l0aW9uKGZiLCBwbGFuZSwgZmItPndp ZHRoIC8gNCwgZmItPmhlaWdodCAvIDQpOworCWlndF9mYl9zZXRfc2l6ZShmYiwgcGxhbmUsIGZi LT53aWR0aCAvIDIsIGZiLT5oZWlnaHQgLyAyKTsKKwlpZiAoKHJvdCA9PSBJR1RfUk9UQVRJT05f OTAgfHwgcm90ID09IElHVF9ST1RBVElPTl8yNzApICYmCisJICAgIGlndF9kaXNwbGF5X3RyeV9j b21taXQyKGRpc3BsYXksIENPTU1JVF9BVE9NSUMpIDwgMCkgeworCQlpZ3RfZGVidWcoIlRoaXMg cm90YXRpb24gbm90IGF2YWlsYWJsZSBmb3IgdGhpcyBmb3JtYXQuXG4iKTsKKwkJcmV0dXJuOwor CX0KKworCWlndF9kaXNwbGF5X2NvbW1pdDIoZGlzcGxheSwgQ09NTUlUX0FUT01JQyk7CisJYXNz ZXJ0X2NvbGxlY3RlZF9jcmNfZXF1YWwoZGF0YS0+cGlwZV9jcmMsICZjcmMsIHJlZl9jcmMpOwor CisJLyogTWFrZSBzdXJlIGJvdW5kYXJpZXMgbWF0Y2ggKi8KKwlpZ3RfZmJfc2V0X3Bvc2l0aW9u KGZiLCBwbGFuZSwgZmItPndpZHRoIC8gNCAtIDIsIGZiLT5oZWlnaHQgLyA0IC0gMik7CisJaWd0 X2ZiX3NldF9zaXplKGZiLCBwbGFuZSwgZmItPndpZHRoIC8gMiArIDQsIGZiLT5oZWlnaHQgLyAy ICsgNCk7CisJaWd0X2Rpc3BsYXlfY29tbWl0MihkaXNwbGF5LCBDT01NSVRfQVRPTUlDKTsKKwlh c3NlcnRfY29sbGVjdGVkX2NyY19lcXVhbChkYXRhLT5waXBlX2NyYywgJmNyYywgcmVmX2NyYyk7 CisKKwlmb3IgKGkgPSAxOyBpIDwgQVJSQVlfU0laRShvZnMpOyBpKyspIHsKKwkJaWd0X2RlYnVn KCJUZXN0aW5nIHdpdGggcm90ICV4IGFuZCBleHRyYSAlaSBvbiB0aGUgbGVmdCBzaWRlXG4iLCBy b3QsIG9mc1tpXSk7CisJCWlndF9mYl9zZXRfcG9zaXRpb24oZmIsIHBsYW5lLCBmYi0+d2lkdGgg LyA0ICsgb2ZzW2ldLCBmYi0+aGVpZ2h0IC8gNCAtIDIpOworCQlpZ3RfZmJfc2V0X3NpemUoZmIs IHBsYW5lLCBmYi0+d2lkdGggLyAyICsgMiAtIG9mc1tpXSwgZmItPmhlaWdodCAvIDIgKyA0KTsK KwkJaWYgKHl1dl9jb21taXRfcm90YXRlZChkaXNwbGF5LCByb3QpKQorCQkJYXNzZXJ0X2NvbGxl Y3RlZF9jcmNfZXF1YWwoZGF0YS0+cGlwZV9jcmMsICZjcmMsIHJlZl9jcmMpOworCisJCWlndF9k ZWJ1ZygiVGVzdGluZyB3aXRoIHJvdCAleCBhbmQgZXh0cmEgJWkgb24gdGhlIHRvcCBzaWRlXG4i LCByb3QsIG9mc1tpXSk7CisJCWlndF9mYl9zZXRfcG9zaXRpb24oZmIsIHBsYW5lLCBmYi0+d2lk dGggLyA0IC0gMiwgZmItPmhlaWdodCAvIDQgKyBvZnNbaV0pOworCQlpZ3RfZmJfc2V0X3NpemUo ZmIsIHBsYW5lLCBmYi0+d2lkdGggLyAyICsgNCwgZmItPmhlaWdodCAvIDIgKyAyIC0gb2ZzW2ld KTsKKwkJaWYgKHl1dl9jb21taXRfcm90YXRlZChkaXNwbGF5LCByb3QpKQorCQkJYXNzZXJ0X2Nv bGxlY3RlZF9jcmNfZXF1YWwoZGF0YS0+cGlwZV9jcmMsICZjcmMsIHJlZl9jcmMpOworCisJCWln dF9kZWJ1ZygiVGVzdGluZyB3aXRoIHJvdCAleCBhbmQgZXh0cmEgJWkgb24gdGhlIHJpZ2h0IHNp ZGVcbiIsIHJvdCwgb2ZzW2ldKTsKKwkJaWd0X2ZiX3NldF9wb3NpdGlvbihmYiwgcGxhbmUsIGZi LT53aWR0aCAvIDQgLSAyLCBmYi0+aGVpZ2h0IC8gNCk7CisJCWlndF9mYl9zZXRfc2l6ZShmYiwg cGxhbmUsIGZiLT53aWR0aCAvIDIgKyAyICsgb2ZzW2ldLCBmYi0+aGVpZ2h0IC8gMik7CisJCWlm ICh5dXZfY29tbWl0X3JvdGF0ZWQoZGlzcGxheSwgcm90KSkKKwkJCWFzc2VydF9jb2xsZWN0ZWRf Y3JjX2VxdWFsKGRhdGEtPnBpcGVfY3JjLCAmY3JjLCByZWZfY3JjKTsKKworCQlpZ3RfZGVidWco IlRlc3Rpbmcgd2l0aCByb3QgJXggYW5kIGV4dHJhICVpIG9uIHRoZSBib3R0b20gc2lkZVxuIiwg cm90LCBvZnNbaV0pOworCQlpZ3RfZmJfc2V0X3Bvc2l0aW9uKGZiLCBwbGFuZSwgZmItPndpZHRo IC8gNCAtIDIsIGZiLT5oZWlnaHQgLyA0IC0gMik7CisJCWlndF9mYl9zZXRfc2l6ZShmYiwgcGxh bmUsIGZiLT53aWR0aCAvIDIgKyA0LCBmYi0+aGVpZ2h0IC8gMiArIDIgKyBvZnNbaV0pOworCQlp ZiAoeXV2X2NvbW1pdF9yb3RhdGVkKGRpc3BsYXksIHJvdCkpCisJCQlhc3NlcnRfY29sbGVjdGVk X2NyY19lcXVhbChkYXRhLT5waXBlX2NyYywgJmNyYywgcmVmX2NyYyk7CisKKwl9CisKKwlmb3Ig KGkgPSAwOyBpIDwgQVJSQVlfU0laRShvZnMpOyBpKyspCisJCWZvciAoaiA9ICFpOyBqIDwgQVJS QVlfU0laRShvZnMpOyBqKyspIHsKKwkJCWlndF9kZWJ1ZygiVGVzdGluZyB3aXRoIHJvdCAleCBh bmQgZXh0cmEgKCVpLCAlaSkgYXQgdGhlIGVkZ2VzXG4iLCByb3QsIG9mc1tpXSwgb2ZzW2pdKTsK KworCQkJaWd0X2ZiX3NldF9wb3NpdGlvbihmYiwgcGxhbmUsIGZiLT53aWR0aCAvIDQgKyBvZnNb aV0sIGZiLT5oZWlnaHQgLyA0ICsgb2ZzW2pdKTsKKwkJCWlndF9mYl9zZXRfc2l6ZShmYiwgcGxh bmUsIGZiLT53aWR0aCAvIDIgLSAyICogb2ZzW2ldLCBmYi0+aGVpZ2h0IC8gMiAtIDIgKiBvZnNb al0pOworCisJCQlpZiAoeXV2X2NvbW1pdF9yb3RhdGVkKGRpc3BsYXksIHJvdCkpCisJCQkJYXNz ZXJ0X2NvbGxlY3RlZF9jcmNfZXF1YWwoZGF0YS0+cGlwZV9jcmMsICZjcmMsIHJlZl9jcmMpOwor CQl9Cit9CisKK3N0YXRpYyB2b2lkIGRyYXdfY2xpcF9mYihpZ3RfZGlzcGxheV90ICpkaXNwbGF5 LCBzdHJ1Y3QgaWd0X2ZiICpjbGlwX2ZiKQoreworCWNhaXJvX3QgKmNyID0gaWd0X2dldF9jYWly b19jdHgoZGlzcGxheS0+ZHJtX2ZkLCBjbGlwX2ZiKTsKKworCWlndF9wYWludF9jb2xvcihjciwg MCwgMCwgY2xpcF9mYi0+d2lkdGgsIGNsaXBfZmItPmhlaWdodCwgLjAsIC4wLCAuNSk7CisJaWd0 X3BhaW50X2NvbG9yKGNyLCBjbGlwX2ZiLT53aWR0aCAvIDQgLSAyLCBjbGlwX2ZiLT5oZWlnaHQg LyA0IC0gMiwKKwkJCWNsaXBfZmItPndpZHRoIC8gMiArIDQsIGNsaXBfZmItPmhlaWdodCAvIDIg KyA0LCAxLiwgMS4sIDEuKTsKKworCWlndF9wdXRfY2Fpcm9fY3R4KGRpc3BsYXktPmRybV9mZCwg Y2xpcF9mYiwgY3IpOworfQorCitzdGF0aWMgdm9pZCB5dXZfY3JvcF9zY2FsZV9idWcoZGF0YV90 ICpkYXRhLCBlbnVtIHBpcGUgcGlwZSwgaWd0X291dHB1dF90ICpvdXRwdXQsIHVuc2lnbmVkIGZv cm1hdCkKK3sKKwlkcm1Nb2RlTW9kZUluZm8gKm1vZGUgPSBpZ3Rfb3V0cHV0X2dldF9tb2RlKG91 dHB1dCk7CisJaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSA9ICZkYXRhLT5kaXNwbGF5OworCWlndF9w bGFuZV90ICpwbGFuZSwgKnByaW1hcnkgPSBpZ3RfcGlwZV9nZXRfcGxhbmVfdHlwZSgmZGlzcGxh eS0+cGlwZXNbcGlwZV0sIERSTV9QTEFORV9UWVBFX1BSSU1BUlkpOworCXN0cnVjdCBpZ3RfZmIg KnJlZl9mYiA9ICZkYXRhLT5mYlsyXTsKKwlzdHJ1Y3QgaWd0X2ZiICpjbGlwX2ZiID0gJmRhdGEt PmZiWzNdOworCXN0cnVjdCBpZ3RfZmIgKmNsaXBfZmJfeHRpbGVkID0gJmRhdGEtPmZiWzRdOwor CXN0cnVjdCBpZ3RfZmIgKmNsaXBfZmJfeXRpbGVkID0gJmRhdGEtPmZiWzVdOworCisJcHJlcGFy ZV9jcnRjKGRhdGEsIHBpcGUsIG91dHB1dCk7CisKKwlpZ3RfY3JlYXRlX2NvbG9yX2ZiKGRpc3Bs YXktPmRybV9mZCwgbW9kZS0+aGRpc3BsYXksIG1vZGUtPnZkaXNwbGF5LAorCQkJICAgIGZvcm1h dCwgTE9DQUxfSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQsIC41LCAuNSwgLjUsICZkYXRhLT5mYlsw XSk7CisKKwlpZ3RfY3JlYXRlX2NvbG9yX2ZiKGRpc3BsYXktPmRybV9mZCwgMjU2LCAyNTYsIGZv cm1hdCwKKwkJCSAgICBMT0NBTF9JOTE1X0ZPUk1BVF9NT0RfWF9USUxFRCwgMS4sIDEuLCAxLiwg cmVmX2ZiKTsKKworCWlndF9jcmVhdGVfZmIoZGlzcGxheS0+ZHJtX2ZkLCA4MCwgMTI4LCBmb3Jt YXQsCisJCSAgICAgIExPQ0FMX0RSTV9GT1JNQVRfTU9EX05PTkUsIGNsaXBfZmIpOworCisJaWd0 X2NyZWF0ZV9mYihkaXNwbGF5LT5kcm1fZmQsIDgwLCAxMjgsIGZvcm1hdCwKKwkJICAgICAgTE9D QUxfSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQsIGNsaXBfZmJfeHRpbGVkKTsKKwlpZ3RfY3JlYXRl X2ZiKGRpc3BsYXktPmRybV9mZCwgODAsIDEyOCwgZm9ybWF0LAorCQkgICAgICBMT0NBTF9JOTE1 X0ZPUk1BVF9NT0RfWV9USUxFRCwgY2xpcF9mYl95dGlsZWQpOworCisJZHJhd19jbGlwX2ZiKGRp c3BsYXksIGNsaXBfZmIpOworCWRyYXdfY2xpcF9mYihkaXNwbGF5LCBjbGlwX2ZiX3h0aWxlZCk7 CisJZHJhd19jbGlwX2ZiKGRpc3BsYXksIGNsaXBfZmJfeXRpbGVkKTsKKworCWlndF9wbGFuZV9z ZXRfZmIocHJpbWFyeSwgJmRhdGEtPmZiWzBdKTsKKworCWZvcl9lYWNoX3BsYW5lX29uX3BpcGUo ZGlzcGxheSwgcGlwZSwgcGxhbmUpIHsKKwkJaWd0X2NyY190IHJlZl9jcmM7CisKKwkJaWYgKCFp Z3RfcGxhbmVfaGFzX2Zvcm1hdF9tb2QocGxhbmUsIGZvcm1hdCwgZGF0YS0+ZmJbMF0ubW9kaWZp ZXIpKQorCQkJY29udGludWU7CisKKwkJaWd0X3BsYW5lX3NldF9mYihwbGFuZSwgcmVmX2ZiKTsK KwkJaWd0X3BsYW5lX3NldF9wb3NpdGlvbihwbGFuZSwgNjQsIDY0KTsKKwkJaWd0X2Rpc3BsYXlf Y29tbWl0MihkaXNwbGF5LCBDT01NSVRfQVRPTUlDKTsKKworCQlpZ3RfcGlwZV9jcmNfc3RhcnQo ZGF0YS0+cGlwZV9jcmMpOworCQlpZ3RfcGlwZV9jcmNfZ2V0X3NpbmdsZShkYXRhLT5waXBlX2Ny YywgJnJlZl9jcmMpOworCisJCXl1dl9jcm9wX3NjYWxlX2J1Z19wbGFuZShkYXRhLCBtb2RlLCBw bGFuZSwgY2xpcF9mYiwgSUdUX1JPVEFUSU9OXzAsICZyZWZfY3JjKTsKKwkJeXV2X2Nyb3Bfc2Nh bGVfYnVnX3BsYW5lKGRhdGEsIG1vZGUsIHBsYW5lLCBjbGlwX2ZiX3h0aWxlZCwgSUdUX1JPVEFU SU9OXzAsICZyZWZfY3JjKTsKKwkJeXV2X2Nyb3Bfc2NhbGVfYnVnX3BsYW5lKGRhdGEsIG1vZGUs IHBsYW5lLCBjbGlwX2ZiX3l0aWxlZCwgSUdUX1JPVEFUSU9OXzAsICZyZWZfY3JjKTsKKwkJeXV2 X2Nyb3Bfc2NhbGVfYnVnX3BsYW5lKGRhdGEsIG1vZGUsIHBsYW5lLCBjbGlwX2ZiX3l0aWxlZCwg SUdUX1JPVEFUSU9OXzkwLCAmcmVmX2NyYyk7CisJCXl1dl9jcm9wX3NjYWxlX2J1Z19wbGFuZShk YXRhLCBtb2RlLCBwbGFuZSwgY2xpcF9mYiwgSUdUX1JPVEFUSU9OXzE4MCwgJnJlZl9jcmMpOwor CQl5dXZfY3JvcF9zY2FsZV9idWdfcGxhbmUoZGF0YSwgbW9kZSwgcGxhbmUsIGNsaXBfZmJfeHRp bGVkLCBJR1RfUk9UQVRJT05fMTgwLCAmcmVmX2NyYyk7CisJCXl1dl9jcm9wX3NjYWxlX2J1Z19w bGFuZShkYXRhLCBtb2RlLCBwbGFuZSwgY2xpcF9mYl95dGlsZWQsIElHVF9ST1RBVElPTl8xODAs ICZyZWZfY3JjKTsKKwkJeXV2X2Nyb3Bfc2NhbGVfYnVnX3BsYW5lKGRhdGEsIG1vZGUsIHBsYW5l LCBjbGlwX2ZiX3l0aWxlZCwgSUdUX1JPVEFUSU9OXzI3MCwgJnJlZl9jcmMpOworCisJCWlndF9w bGFuZV9zZXRfZmIocGxhbmUsIHBsYW5lICE9IHByaW1hcnkgPyBOVUxMIDogJmRhdGEtPmZiWzBd KTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZCB5dXZfY2hyb21hX3N1YnBpeGVsX2Ns aXBfcGxhbmVfd2l0aF9jdXJzb3IoZGF0YV90ICpkYXRhLAorCQkJCQkJCWlndF9wbGFuZV90ICpw bGFuZSwKKwkJCQkJCQlzdHJ1Y3QgaWd0X2ZiICpjbGlwX2ZiLAorCQkJCQkJCWlndF9wbGFuZV90 ICpjdXJzb3IsCisJCQkJCQkJc3RydWN0IGlndF9mYiAqY3Vyc29yX2ZiLAorCQkJCQkJCWlndF9j cmNfdCAqcmVmX2NyYywKKwkJCQkJCQlpbnQgY3Vyc29yX3gsIGludCBjdXJzb3JfeSkKK3sKKwlp Z3RfZGlzcGxheV90ICpkaXNwbGF5ID0gJmRhdGEtPmRpc3BsYXk7CisKKwlpZ3RfcGxhbmVfc2V0 X2ZiKHBsYW5lLCBjbGlwX2ZiKTsKKwlpZ3RfcGxhbmVfc2V0X3Bvc2l0aW9uKHBsYW5lLCA2NCwg NjQpOworCWlndF9wbGFuZV9zZXRfcm90YXRpb24ocGxhbmUsIElHVF9ST1RBVElPTl8wKTsKKwor CWlndF9wbGFuZV9zZXRfZmIoY3Vyc29yLCBjdXJzb3JfZmIpOworCWlndF9wbGFuZV9zZXRfcG9z aXRpb24oY3Vyc29yLCBjdXJzb3JfeCwgY3Vyc29yX3kpOworCWlndF9kaXNwbGF5X2NvbW1pdDIo ZGlzcGxheSwgQ09NTUlUX0FUT01JQyk7CisKKwlpZ3RfcGlwZV9jcmNfZHJhaW4oZGF0YS0+cGlw ZV9jcmMpOworCWlndF9waXBlX2NyY19nZXRfc2luZ2xlKGRhdGEtPnBpcGVfY3JjLCByZWZfY3Jj KTsKKworCWlndF9wbGFuZV9zZXRfZmIoY3Vyc29yLCBOVUxMKTsKK30KKworc3RhdGljIGJvb2wg eXV2X2Nocm9tYV9zdWJwaXhlbF9jbGlwX3BsYW5lX3JpZ2h0KGRhdGFfdCAqZGF0YSwKKwkJCQkJ CSBpZ3Rfcm90YXRpb25fdCByb3RhdGlvbiwKKwkJCQkJCSBpZ3RfcGxhbmVfdCAqcGxhbmUsCisJ CQkJCQkgc3RydWN0IGlndF9mYiAqY2xpcF9mYiwKKwkJCQkJCSBpZ3RfY3JjX3QgKnJlZl9jcmMp Cit7CisJaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSA9ICZkYXRhLT5kaXNwbGF5OworCWlndF9jcmNf dCBjcmMgPSB7fTsKKworCWlndF9wbGFuZV9zZXRfZmIocGxhbmUsIGNsaXBfZmIpOworCWlndF9w bGFuZV9zZXRfcG9zaXRpb24ocGxhbmUsIDY0LCA2NCk7CisJaWd0X3BsYW5lX3NldF9yb3RhdGlv bihwbGFuZSwgcm90YXRpb24pOworCWlndF9wbGFuZV9zZXRfc2l6ZShwbGFuZSwgY2xpcF9mYi0+ d2lkdGggLSAxLCBjbGlwX2ZiLT5oZWlnaHQpOworCisJc3dpdGNoIChyb3RhdGlvbikgeworCWNh c2UgSUdUX1JPVEFUSU9OXzE4MDoKKwkJaWd0X2ZiX3NldF9wb3NpdGlvbihjbGlwX2ZiLCBwbGFu ZSwgMSwgMCk7CisJY2FzZSBJR1RfUk9UQVRJT05fMDoKKwkJaWd0X2ZiX3NldF9zaXplKGNsaXBf ZmIsIHBsYW5lLCBjbGlwX2ZiLT53aWR0aCAtIDEsIGNsaXBfZmItPmhlaWdodCk7CisJCWJyZWFr OworCisJY2FzZSBJR1RfUk9UQVRJT05fMjcwOgorCQlpZ3RfZmJfc2V0X3Bvc2l0aW9uKGNsaXBf ZmIsIHBsYW5lLCAwLCAxKTsKKwljYXNlIElHVF9ST1RBVElPTl85MDoKKwkJaWd0X2ZiX3NldF9z aXplKGNsaXBfZmIsIHBsYW5lLCBjbGlwX2ZiLT53aWR0aCwgY2xpcF9mYi0+aGVpZ2h0IC0gMSk7 CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWlndF9hc3NlcnRfZigwLCAiVW5oYW5kbGVkIHJvdGF0 aW9uICV4XG4iLCByb3RhdGlvbik7CisJfQorCisJaWYgKGlndF9kaXNwbGF5X3RyeV9jb21taXQy KGRpc3BsYXksIENPTU1JVF9BVE9NSUMpIDwgMCkKKwkJcmV0dXJuIGZhbHNlOworCisJYXNzZXJ0 X2NvbGxlY3RlZF9jcmNfZXF1YWwoZGF0YS0+cGlwZV9jcmMsICZjcmMsIHJlZl9jcmMpOworCXJl dHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCB5dXZfY2hyb21hX3N1YnBpeGVsX2NsaXBfcGxh bmVfYm90dG9tKGRhdGFfdCAqZGF0YSwKKwkJCQkJCSAgaWd0X3JvdGF0aW9uX3Qgcm90YXRpb24s CisJCQkJCQkgIGlndF9wbGFuZV90ICpwbGFuZSwKKwkJCQkJCSAgc3RydWN0IGlndF9mYiAqY2xp cF9mYiwKKwkJCQkJCSAgaWd0X2NyY190ICpyZWZfY3JjKQoreworCWlndF9kaXNwbGF5X3QgKmRp c3BsYXkgPSAmZGF0YS0+ZGlzcGxheTsKKwlpZ3RfY3JjX3QgY3JjID0ge307CisKKwlpZ3RfcGxh bmVfc2V0X2ZiKHBsYW5lLCBjbGlwX2ZiKTsKKwlpZ3RfcGxhbmVfc2V0X3Bvc2l0aW9uKHBsYW5l LCA2NCwgNjQpOworCWlndF9wbGFuZV9zZXRfcm90YXRpb24ocGxhbmUsIHJvdGF0aW9uKTsKKwlp Z3RfcGxhbmVfc2V0X3NpemUocGxhbmUsIGNsaXBfZmItPndpZHRoLCBjbGlwX2ZiLT5oZWlnaHQg LSAxKTsKKworCXN3aXRjaCAocm90YXRpb24pIHsKKwljYXNlIElHVF9ST1RBVElPTl8xODA6CisJ CWlndF9mYl9zZXRfcG9zaXRpb24oY2xpcF9mYiwgcGxhbmUsIDAsIDEpOworCWNhc2UgSUdUX1JP VEFUSU9OXzA6CisJCWlndF9mYl9zZXRfc2l6ZShjbGlwX2ZiLCBwbGFuZSwgY2xpcF9mYi0+d2lk dGgsIGNsaXBfZmItPmhlaWdodCAtIDEpOworCQlicmVhazsKKworCWNhc2UgSUdUX1JPVEFUSU9O XzkwOgorCQlpZ3RfZmJfc2V0X3Bvc2l0aW9uKGNsaXBfZmIsIHBsYW5lLCAxLCAwKTsKKwljYXNl IElHVF9ST1RBVElPTl8yNzA6CisJCWlndF9mYl9zZXRfc2l6ZShjbGlwX2ZiLCBwbGFuZSwgY2xp cF9mYi0+d2lkdGggLSAxLCBjbGlwX2ZiLT5oZWlnaHQpOworCQlicmVhazsKKwlkZWZhdWx0Ogor CQlpZ3RfYXNzZXJ0X2YoMCwgIlVuaGFuZGxlZCByb3RhdGlvbiAleFxuIiwgcm90YXRpb24pOwor CX0KKworCWlmIChpZ3RfZGlzcGxheV90cnlfY29tbWl0MihkaXNwbGF5LCBDT01NSVRfQVRPTUlD KSA8IDApCisJCXJldHVybiBmYWxzZTsKKworCWFzc2VydF9jb2xsZWN0ZWRfY3JjX2VxdWFsKGRh dGEtPnBpcGVfY3JjLCAmY3JjLCByZWZfY3JjKTsKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGlj IGJvb2wgeXV2X2Nocm9tYV9zdWJwaXhlbF9jbGlwX3BsYW5lX2xlZnQoZGF0YV90ICpkYXRhLAor CQkJCQkJaWd0X3JvdGF0aW9uX3Qgcm90YXRpb24sCisJCQkJCQlpZ3RfcGxhbmVfdCAqcGxhbmUs CisJCQkJCQlzdHJ1Y3QgaWd0X2ZiICpjbGlwX2ZiLAorCQkJCQkJaWd0X2NyY190ICpyZWZfY3Jj KQoreworCWlndF9kaXNwbGF5X3QgKmRpc3BsYXkgPSAmZGF0YS0+ZGlzcGxheTsKKwlpZ3RfY3Jj X3QgY3JjID0ge307CisKKwlpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCBjbGlwX2ZiKTsKKwlpZ3Rf cGxhbmVfc2V0X3Bvc2l0aW9uKHBsYW5lLCA2NSwgNjQpOworCWlndF9wbGFuZV9zZXRfcm90YXRp b24ocGxhbmUsIHJvdGF0aW9uKTsKKwlpZ3RfcGxhbmVfc2V0X3NpemUocGxhbmUsIGNsaXBfZmIt PndpZHRoIC0gMSwgY2xpcF9mYi0+aGVpZ2h0KTsKKworCXN3aXRjaCAocm90YXRpb24pIHsKKwlj YXNlIElHVF9ST1RBVElPTl8wOgorCQlpZ3RfZmJfc2V0X3Bvc2l0aW9uKGNsaXBfZmIsIHBsYW5l LCAxLCAwKTsKKwljYXNlIElHVF9ST1RBVElPTl8xODA6CisJCWlndF9mYl9zZXRfc2l6ZShjbGlw X2ZiLCBwbGFuZSwgY2xpcF9mYi0+d2lkdGggLSAxLCBjbGlwX2ZiLT5oZWlnaHQpOworCQlicmVh azsKKworCWNhc2UgSUdUX1JPVEFUSU9OXzkwOgorCQlpZ3RfZmJfc2V0X3Bvc2l0aW9uKGNsaXBf ZmIsIHBsYW5lLCAwLCAxKTsKKwljYXNlIElHVF9ST1RBVElPTl8yNzA6CisJCWlndF9mYl9zZXRf c2l6ZShjbGlwX2ZiLCBwbGFuZSwgY2xpcF9mYi0+d2lkdGgsIGNsaXBfZmItPmhlaWdodCAtIDEp OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlpZ3RfYXNzZXJ0X2YoMCwgIlVuaGFuZGxlZCByb3Rh dGlvbiAleFxuIiwgcm90YXRpb24pOworCX0KKworCWlmIChpZ3RfZGlzcGxheV90cnlfY29tbWl0 MihkaXNwbGF5LCBDT01NSVRfQVRPTUlDKSA8IDApCisJCXJldHVybiBmYWxzZTsKKworCWFzc2Vy dF9jb2xsZWN0ZWRfY3JjX2VxdWFsKGRhdGEtPnBpcGVfY3JjLCAmY3JjLCByZWZfY3JjKTsKKwly ZXR1cm4gdHJ1ZTsKK30KKworCitzdGF0aWMgYm9vbCB5dXZfY2hyb21hX3N1YnBpeGVsX2NsaXBf cGxhbmVfdG9wKGRhdGFfdCAqZGF0YSwKKwkJCQkJICAgICAgaWd0X3JvdGF0aW9uX3Qgcm90YXRp b24sCisJCQkJCSAgICAgIGlndF9wbGFuZV90ICpwbGFuZSwKKwkJCQkJICAgICAgc3RydWN0IGln dF9mYiAqY2xpcF9mYiwKKwkJCQkJICAgICAgaWd0X2NyY190ICpyZWZfY3JjKQoreworCWlndF9k aXNwbGF5X3QgKmRpc3BsYXkgPSAmZGF0YS0+ZGlzcGxheTsKKwlpZ3RfY3JjX3QgY3JjID0ge307 CisKKwlpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCBjbGlwX2ZiKTsKKwlpZ3RfcGxhbmVfc2V0X3Bv c2l0aW9uKHBsYW5lLCA2NCwgNjUpOworCWlndF9wbGFuZV9zZXRfcm90YXRpb24ocGxhbmUsIHJv dGF0aW9uKTsKKwlpZ3RfcGxhbmVfc2V0X3NpemUocGxhbmUsIGNsaXBfZmItPndpZHRoLCBjbGlw X2ZiLT5oZWlnaHQgLSAxKTsKKworCXN3aXRjaCAocm90YXRpb24pIHsKKwljYXNlIElHVF9ST1RB VElPTl8wOgorCQlpZ3RfZmJfc2V0X3Bvc2l0aW9uKGNsaXBfZmIsIHBsYW5lLCAwLCAxKTsKKwlj YXNlIElHVF9ST1RBVElPTl8xODA6CisJCWlndF9mYl9zZXRfc2l6ZShjbGlwX2ZiLCBwbGFuZSwg Y2xpcF9mYi0+d2lkdGgsIGNsaXBfZmItPmhlaWdodCAtIDEpOworCQlicmVhazsKKworCWNhc2Ug SUdUX1JPVEFUSU9OXzI3MDoKKwkJaWd0X2ZiX3NldF9wb3NpdGlvbihjbGlwX2ZiLCBwbGFuZSwg MSwgMCk7CisJY2FzZSBJR1RfUk9UQVRJT05fOTA6CisJCWlndF9mYl9zZXRfc2l6ZShjbGlwX2Zi LCBwbGFuZSwgY2xpcF9mYi0+d2lkdGggLSAxLCBjbGlwX2ZiLT5oZWlnaHQpOworCQlicmVhazsK KwlkZWZhdWx0OgorCQlpZ3RfYXNzZXJ0X2YoMCwgIlVuaGFuZGxlZCByb3RhdGlvbiAleFxuIiwg cm90YXRpb24pOworCX0KKworCWlmIChpZ3RfZGlzcGxheV90cnlfY29tbWl0MihkaXNwbGF5LCBD T01NSVRfQVRPTUlDKSA8IDApCisJCXJldHVybiBmYWxzZTsKKworCWFzc2VydF9jb2xsZWN0ZWRf Y3JjX2VxdWFsKGRhdGEtPnBpcGVfY3JjLCAmY3JjLCByZWZfY3JjKTsKKwlyZXR1cm4gdHJ1ZTsK K30KKworc3RhdGljIHZvaWQgeXV2X2Nocm9tYV9zdWJwaXhlbF9jbGlwKGRhdGFfdCAqZGF0YSwg ZW51bSBwaXBlIHBpcGUsIGlndF9vdXRwdXRfdCAqb3V0cHV0LCB1bnNpZ25lZCBmb3JtYXQpCit7 CisJZHJtTW9kZU1vZGVJbmZvICptb2RlID0gaWd0X291dHB1dF9nZXRfbW9kZShvdXRwdXQpOwor CWlndF9kaXNwbGF5X3QgKmRpc3BsYXkgPSAmZGF0YS0+ZGlzcGxheTsKKwlpZ3RfcGlwZV90ICpw aXBlX29iaiA9ICZkaXNwbGF5LT5waXBlc1twaXBlXTsKKwlzdHJ1Y3QgaWd0X2ZiICpiZ19mYiA9 ICZkYXRhLT5mYlswXTsKKwlzdHJ1Y3QgaWd0X2ZiICpiZ19jdXJzb3JfZmIgPSAmZGF0YS0+ZmJb MV07CisJc3RydWN0IGlndF9mYiAqYmxhY2tfY3Vyc29yX2ZiID0gJmRhdGEtPmZiWzJdOworCXN0 cnVjdCBpZ3RfZmIgKmNsaXBfZmIgPSAmZGF0YS0+ZmJbM107CisJaWd0X3BsYW5lX3QgKnByaW1h cnkgPSBpZ3RfcGlwZV9nZXRfcGxhbmVfdHlwZShwaXBlX29iaiwgRFJNX1BMQU5FX1RZUEVfUFJJ TUFSWSk7CisJaWd0X3BsYW5lX3QgKmN1cnNvciA9IGlndF9waXBlX2dldF9wbGFuZV90eXBlKHBp cGVfb2JqLCBEUk1fUExBTkVfVFlQRV9DVVJTT1IpOworCWlndF9wbGFuZV90ICpwbGFuZTsKKwlj YWlyb190ICpjcjsKKwlib29sIHJldCA9IGZhbHNlOworCWJvb2wgdGlsZWQgPSBpZ3RfZGlzcGxh eV9oYXNfZm9ybWF0X21vZChkaXNwbGF5LCBEUk1fRk9STUFUX1hSR0I4ODg4LCBMT0NBTF9JOTE1 X0ZPUk1BVF9NT0RfWF9USUxFRCk7CisKKwlwcmVwYXJlX2NydGMoZGF0YSwgcGlwZSwgb3V0cHV0 KTsKKworCWlndF9jcmVhdGVfY29sb3JfZmIoZGlzcGxheS0+ZHJtX2ZkLCBtb2RlLT5oZGlzcGxh eSwgbW9kZS0+dmRpc3BsYXksCisJCQkgICAgRFJNX0ZPUk1BVF9YUkdCODg4OCwgdGlsZWQgPyBM T0NBTF9JOTE1X0ZPUk1BVF9NT0RfWF9USUxFRCA6IExPQ0FMX0RSTV9GT1JNQVRfTU9EX05PTkUs CisJCQkgICAgLjAsIC4wLCAxLiwgYmdfZmIpOworCisJaWd0X2NyZWF0ZV9jb2xvcl9mYihkaXNw bGF5LT5kcm1fZmQsIDI1NiwgMjU2LAorCQkgICAgICAgICAgICBEUk1fRk9STUFUX0FSR0I4ODg4 LCBMT0NBTF9EUk1fRk9STUFUX01PRF9OT05FLAorCQkJICAgIC4wLCAuMCwgMS4sIGJnX2N1cnNv cl9mYik7CisKKwlpZ3RfY3JlYXRlX2NvbG9yX2ZiKGRpc3BsYXktPmRybV9mZCwgMjU2LCAyNTYs CisJCSAgICAgICAgICAgIERSTV9GT1JNQVRfQVJHQjg4ODgsIExPQ0FMX0RSTV9GT1JNQVRfTU9E X05PTkUsCisJCQkgICAgLjAsIC4wLCAuMCwgYmxhY2tfY3Vyc29yX2ZiKTsKKworCWlndF9jcmVh dGVfZmIoZGlzcGxheS0+ZHJtX2ZkLCAyNTYsIDI1NiwKKwkJICAgICAgZm9ybWF0LCB0aWxlZCA/ IExPQ0FMX0k5MTVfRk9STUFUX01PRF9ZX1RJTEVEIDogTE9DQUxfRFJNX0ZPUk1BVF9NT0RfTk9O RSwgY2xpcF9mYik7CisKKwkvKiBEcmF3IHRoZSBGQiB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgY2xp cHBpbmcgdGhlIGNocm9tYSBzdWJwaXhlbCB0ZXN0LiAqLworCWNyID0gaWd0X2dldF9jYWlyb19j dHgoZGlzcGxheS0+ZHJtX2ZkLCBjbGlwX2ZiKTsKKworCWlndF9wYWludF9jb2xvcihjciwgMCwg MCwgY2xpcF9mYi0+d2lkdGgsIGNsaXBfZmItPmhlaWdodCwgMS4sIDAuLCAwLik7CisJaWd0X3Bh aW50X2NvbG9yKGNyLCAyLCAyLCBjbGlwX2ZiLT53aWR0aCAtIDQsIGNsaXBfZmItPmhlaWdodCAt IDQsIDAuLCAxLiwgMS4pOworCWlndF9wYWludF9jb2xvcihjciwgNCwgNCwgY2xpcF9mYi0+d2lk dGggLSA4LCBjbGlwX2ZiLT5oZWlnaHQgLSA4LCAuNzUsIC43NSwgMS4pOworCisJLyogV2hpdGUg ZG90cyBpbiB0aGUgY29ybmVycy4gKi8KKwlpZ3RfcGFpbnRfY29sb3IoY3IsIDAsIDAsIDYsIDYs IDEuLCAxLiwgMS4pOworCWlndF9wYWludF9jb2xvcihjciwgY2xpcF9mYi0+d2lkdGggLSA2LCAw LCA2LCA2LCAxLiwgMS4sIDEuKTsKKwlpZ3RfcGFpbnRfY29sb3IoY3IsIDAsIGNsaXBfZmItPmhl aWdodCAtIDYsIDYsIDYsIDEuLCAxLiwgMS4pOworCWlndF9wYWludF9jb2xvcihjciwgY2xpcF9m Yi0+d2lkdGggLSA2LCBjbGlwX2ZiLT5oZWlnaHQgLSA2LCA2LCA2LCAxLiwgMS4sIDEuKTsKKwor CWlndF9wdXRfY2Fpcm9fY3R4KGRpc3BsYXktPmRybV9mZCwgY2xpcF9mYiwgY3IpOworCisJaWd0 X3BpcGVfY3JjX3N0YXJ0KGRhdGEtPnBpcGVfY3JjKTsKKworCWlndF9wbGFuZV9zZXRfZmIocHJp bWFyeSwgYmdfZmIpOworCWZvcl9lYWNoX3BsYW5lX29uX3BpcGUoZGlzcGxheSwgcGlwZSwgcGxh bmUpIHsKKwkJc3RydWN0IGlndF9mYiAqY3Vyc29yX2ZiID0gcGxhbmUgPT0gcHJpbWFyeSA/IGJs YWNrX2N1cnNvcl9mYiA6IGJnX2N1cnNvcl9mYjsKKwkJaWd0X2NyY190IHJlZl9jcmM7CisKKwkJ aWYgKCFpZ3RfcGxhbmVfaGFzX2Zvcm1hdF9tb2QocGxhbmUsIGZvcm1hdCwgY2xpcF9mYi0+bW9k aWZpZXIpIHx8IHBsYW5lID09IGN1cnNvcikKKwkJCWNvbnRpbnVlOworCisJCXl1dl9jaHJvbWFf c3VicGl4ZWxfY2xpcF9wbGFuZV93aXRoX2N1cnNvcihkYXRhLCBwbGFuZSwgY2xpcF9mYiwgY3Vy c29yLCBjdXJzb3JfZmIsICZyZWZfY3JjLCA2MyArIGNsaXBfZmItPndpZHRoLCA2NCk7CisJCXJl dCB8PSB5dXZfY2hyb21hX3N1YnBpeGVsX2NsaXBfcGxhbmVfcmlnaHQoZGF0YSwgSUdUX1JPVEFU SU9OXzAsIHBsYW5lLCBjbGlwX2ZiLCAmcmVmX2NyYyk7CisJCXJldCB8PSB5dXZfY2hyb21hX3N1 YnBpeGVsX2NsaXBfcGxhbmVfcmlnaHQoZGF0YSwgSUdUX1JPVEFUSU9OXzkwLCBwbGFuZSwgY2xp cF9mYiwgJnJlZl9jcmMpOworCQlyZXQgfD0geXV2X2Nocm9tYV9zdWJwaXhlbF9jbGlwX3BsYW5l X3JpZ2h0KGRhdGEsIElHVF9ST1RBVElPTl8xODAsIHBsYW5lLCBjbGlwX2ZiLCAmcmVmX2NyYyk7 CisJCXJldCB8PSB5dXZfY2hyb21hX3N1YnBpeGVsX2NsaXBfcGxhbmVfcmlnaHQoZGF0YSwgSUdU X1JPVEFUSU9OXzI3MCwgcGxhbmUsIGNsaXBfZmIsICZyZWZfY3JjKTsKKworCQl5dXZfY2hyb21h X3N1YnBpeGVsX2NsaXBfcGxhbmVfd2l0aF9jdXJzb3IoZGF0YSwgcGxhbmUsIGNsaXBfZmIsIGN1 cnNvciwgY3Vyc29yX2ZiLCAmcmVmX2NyYywgNjQsIDYzICsgY2xpcF9mYi0+aGVpZ2h0KTsKKwkJ cmV0IHw9IHl1dl9jaHJvbWFfc3VicGl4ZWxfY2xpcF9wbGFuZV9ib3R0b20oZGF0YSwgSUdUX1JP VEFUSU9OXzAsIHBsYW5lLCBjbGlwX2ZiLCAmcmVmX2NyYyk7CisJCXJldCB8PSB5dXZfY2hyb21h X3N1YnBpeGVsX2NsaXBfcGxhbmVfYm90dG9tKGRhdGEsIElHVF9ST1RBVElPTl85MCwgcGxhbmUs IGNsaXBfZmIsICZyZWZfY3JjKTsKKwkJcmV0IHw9IHl1dl9jaHJvbWFfc3VicGl4ZWxfY2xpcF9w bGFuZV9ib3R0b20oZGF0YSwgSUdUX1JPVEFUSU9OXzE4MCwgcGxhbmUsIGNsaXBfZmIsICZyZWZf Y3JjKTsKKwkJcmV0IHw9IHl1dl9jaHJvbWFfc3VicGl4ZWxfY2xpcF9wbGFuZV9ib3R0b20oZGF0 YSwgSUdUX1JPVEFUSU9OXzI3MCwgcGxhbmUsIGNsaXBfZmIsICZyZWZfY3JjKTsKKworCQl5dXZf Y2hyb21hX3N1YnBpeGVsX2NsaXBfcGxhbmVfd2l0aF9jdXJzb3IoZGF0YSwgcGxhbmUsIGNsaXBf ZmIsIGN1cnNvciwgY3Vyc29yX2ZiLCAmcmVmX2NyYywgNjUgLSBjdXJzb3JfZmItPndpZHRoLCA2 NCk7CisJCXJldCB8PSB5dXZfY2hyb21hX3N1YnBpeGVsX2NsaXBfcGxhbmVfbGVmdChkYXRhLCBJ R1RfUk9UQVRJT05fMCwgcGxhbmUsIGNsaXBfZmIsICZyZWZfY3JjKTsKKwkJcmV0IHw9IHl1dl9j aHJvbWFfc3VicGl4ZWxfY2xpcF9wbGFuZV9sZWZ0KGRhdGEsIElHVF9ST1RBVElPTl85MCwgcGxh bmUsIGNsaXBfZmIsICZyZWZfY3JjKTsKKwkJcmV0IHw9IHl1dl9jaHJvbWFfc3VicGl4ZWxfY2xp cF9wbGFuZV9sZWZ0KGRhdGEsIElHVF9ST1RBVElPTl8xODAsIHBsYW5lLCBjbGlwX2ZiLCAmcmVm X2NyYyk7CisJCXJldCB8PSB5dXZfY2hyb21hX3N1YnBpeGVsX2NsaXBfcGxhbmVfbGVmdChkYXRh LCBJR1RfUk9UQVRJT05fMjcwLCBwbGFuZSwgY2xpcF9mYiwgJnJlZl9jcmMpOworCisJCXl1dl9j aHJvbWFfc3VicGl4ZWxfY2xpcF9wbGFuZV93aXRoX2N1cnNvcihkYXRhLCBwbGFuZSwgY2xpcF9m YiwgY3Vyc29yLCBjdXJzb3JfZmIsICZyZWZfY3JjLCA2NCwgNjUgLSBjdXJzb3JfZmItPmhlaWdo dCk7CisJCXJldCB8PSB5dXZfY2hyb21hX3N1YnBpeGVsX2NsaXBfcGxhbmVfdG9wKGRhdGEsIElH VF9ST1RBVElPTl8wLCBwbGFuZSwgY2xpcF9mYiwgJnJlZl9jcmMpOworCQlyZXQgfD0geXV2X2No cm9tYV9zdWJwaXhlbF9jbGlwX3BsYW5lX3RvcChkYXRhLCBJR1RfUk9UQVRJT05fOTAsIHBsYW5l LCBjbGlwX2ZiLCAmcmVmX2NyYyk7CisJCXJldCB8PSB5dXZfY2hyb21hX3N1YnBpeGVsX2NsaXBf cGxhbmVfdG9wKGRhdGEsIElHVF9ST1RBVElPTl8xODAsIHBsYW5lLCBjbGlwX2ZiLCAmcmVmX2Ny Yyk7CisJCXJldCB8PSB5dXZfY2hyb21hX3N1YnBpeGVsX2NsaXBfcGxhbmVfdG9wKGRhdGEsIElH VF9ST1RBVElPTl8yNzAsIHBsYW5lLCBjbGlwX2ZiLCAmcmVmX2NyYyk7CisKKwkJLyogUmVzZXQg dG8gZGVmYXVsdHMgKi8KKwkJaWd0X3BsYW5lX3NldF9wb3NpdGlvbihwbGFuZSwgMCwgMCk7CisJ CWlndF9wbGFuZV9zZXRfcm90YXRpb24ocGxhbmUsIElHVF9ST1RBVElPTl8wKTsKKwkJaWd0X3Bs YW5lX3NldF9mYihwbGFuZSwgcGxhbmUgPT0gcHJpbWFyeSA/IGJnX2ZiIDogTlVMTCk7CisJfQor CisJaWd0X3JlcXVpcmVfZihyZXQsICJDb3VsZCBub3QgdGVzdCBzdWJwaXhlbCBjbGlwcGluZyBp biBhbnkgY29ybmVyXG4iKTsKK30KKworc3RhdGljIHZvaWQgcnVuX3Rlc3RzX2Zvcl9waXBlKGRh dGFfdCAqZGF0YSwgZW51bSBwaXBlIHBpcGUsCisJCQkgICAgICAgY29uc3QgY2hhciAqZnN0ciwg dW5zaWduZWQgaW50IGZvcm1hdCkKK3sKKwlpZ3Rfb3V0cHV0X3QgKm91dHB1dDsKKwlpZ3RfZGlz cGxheV90ICpkaXNwbGF5ID0gJmRhdGEtPmRpc3BsYXk7CisKKwlpZ3Rfc3VidGVzdF9ncm91cCB7 CisJCWlndF9maXh0dXJlIHsKKwkJCWlndF9kaXNwbGF5X3JlcXVpcmVfb3V0cHV0X29uX3BpcGUo ZGlzcGxheSwgcGlwZSk7CisJCQlpZ3RfcmVxdWlyZShpZ3RfZmJfc3VwcG9ydGVkX2Zvcm1hdChm b3JtYXQpKTsKKwkJCWlndF9yZXF1aXJlKHBpcGVfc3VwcG9ydHNfZm9ybWF0KGRpc3BsYXksIHBp cGUsIGZvcm1hdCwgeF9tb2RpZmllcikpOworCQl9CisKKwkJaWd0X3N1YnRlc3RfZigicGlwZS0l cy0lcy1yZ2Itc3dpdGNoIiwKKwkJCWttc3Rlc3RfcGlwZV9uYW1lKHBpcGUpLCBmc3RyKQorCQkJ Zm9yX2VhY2hfdmFsaWRfb3V0cHV0X29uX3BpcGUoZGlzcGxheSwgcGlwZSwgb3V0cHV0KQorCQkJ CXl1dl9yZ2Jfc3dpdGNoKGRhdGEsIHBpcGUsIG91dHB1dCwgZmFsc2UsIGZvcm1hdCk7CisKKwkJ aWd0X3N1YnRlc3RfZigicGlwZS0lcy0lcy1yZ2Itc2NhbGVkLXN3aXRjaCIsCisJCQlrbXN0ZXN0 X3BpcGVfbmFtZShwaXBlKSwgZnN0cikKKwkJCWZvcl9lYWNoX3ZhbGlkX291dHB1dF9vbl9waXBl KGRpc3BsYXksIHBpcGUsIG91dHB1dCkKKwkJCQl5dXZfcmdiX3N3aXRjaChkYXRhLCBwaXBlLCBv dXRwdXQsIHRydWUsIGZvcm1hdCk7CisKKwkJaWd0X3N1YnRlc3RfZigicGlwZS0lcy0lcy12YWxp ZC13aWR0aCIsCisJCQlrbXN0ZXN0X3BpcGVfbmFtZShwaXBlKSwgZnN0cikKKwkJCWZvcl9lYWNo X3ZhbGlkX291dHB1dF9vbl9waXBlKGRpc3BsYXksIHBpcGUsIG91dHB1dCkKKwkJCQl5dXZfdmFs aWRfd2lkdGgoZGF0YSwgcGlwZSwgb3V0cHV0LCBmb3JtYXQpOworCisJCWlndF9zdWJ0ZXN0X2Yo InBpcGUtJXMtJXMtY3JvcC1zY2FsZS1idWciLAorCQkJa21zdGVzdF9waXBlX25hbWUocGlwZSks IGZzdHIpCisJCQlmb3JfZWFjaF92YWxpZF9vdXRwdXRfb25fcGlwZShkaXNwbGF5LCBwaXBlLCBv dXRwdXQpCisJCQkJeXV2X2Nyb3Bfc2NhbGVfYnVnKGRhdGEsIHBpcGUsIG91dHB1dCwgZm9ybWF0 KTsKKworCQlpZ3Rfc3VidGVzdF9mKCJwaXBlLSVzLSVzLWNocm9tYS1zdWJwaXhlbC1jbGlwIiwK KwkJCWttc3Rlc3RfcGlwZV9uYW1lKHBpcGUpLCBmc3RyKQorCQkJZm9yX2VhY2hfdmFsaWRfb3V0 cHV0X29uX3BpcGUoZGlzcGxheSwgcGlwZSwgb3V0cHV0KQorCQkJCXl1dl9jaHJvbWFfc3VicGl4 ZWxfY2xpcChkYXRhLCBwaXBlLCBvdXRwdXQsIGZvcm1hdCk7CisJfQorfQorCitpZ3RfbWFpbgor eworCWRhdGFfdCBkYXRhID0ge307CisJZW51bSBwaXBlIHBpcGU7CisKKwlpZ3Rfc2tpcF9vbl9z aW11bGF0aW9uKCk7CisKKwlpZ3RfZml4dHVyZSB7CisJCWRhdGEuZGlzcGxheS5kcm1fZmQgPSBk cm1fb3Blbl9kcml2ZXJfbWFzdGVyKERSSVZFUl9BTlkpOworCisJCWttc3Rlc3Rfc2V0X3Z0X2dy YXBoaWNzX21vZGUoKTsKKwkJaWd0X2Rpc3BsYXlfcmVxdWlyZSgmZGF0YS5kaXNwbGF5LCBkYXRh LmRpc3BsYXkuZHJtX2ZkKTsKKwkJaWd0X3JlcXVpcmUoZGF0YS5kaXNwbGF5LmlzX2F0b21pYyk7 CisJCWlndF9yZXF1aXJlX3BpcGVfY3JjKGRhdGEuZGlzcGxheS5kcm1fZmQpOworCisJCWlmIChp Z3RfZGlzcGxheV9oYXNfZm9ybWF0X21vZCgmZGF0YS5kaXNwbGF5LCBEUk1fRk9STUFUX1hSR0I4 ODg4LCBMT0NBTF9JOTE1X0ZPUk1BVF9NT0RfWF9USUxFRCkpCisJCQl4X21vZGlmaWVyID0gTE9D QUxfSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQ7CisKKwkJaWYgKGlndF9kaXNwbGF5X2hhc19mb3Jt YXRfbW9kKCZkYXRhLmRpc3BsYXksIERSTV9GT1JNQVRfWFJHQjg4ODgsIExPQ0FMX0k5MTVfRk9S TUFUX01PRF9ZX1RJTEVEKSkKKwkJCXlfbW9kaWZpZXIgPSBMT0NBTF9JOTE1X0ZPUk1BVF9NT0Rf WV9USUxFRDsKKwl9CisKKwlmb3JfZWFjaF9waXBlX3N0YXRpYyhwaXBlKSB7CisJCXJ1bl90ZXN0 c19mb3JfcGlwZSgmZGF0YSwgcGlwZSwgIk5WMTIiLCBEUk1fRk9STUFUX05WMTIpOworCQlydW5f dGVzdHNfZm9yX3BpcGUoJmRhdGEsIHBpcGUsICJOVjE2IiwgRFJNX0ZPUk1BVF9OVjE2KTsKKwkJ cnVuX3Rlc3RzX2Zvcl9waXBlKCZkYXRhLCBwaXBlLCAiTlYyMSIsIERSTV9GT1JNQVRfTlYyMSk7 CisJCXJ1bl90ZXN0c19mb3JfcGlwZSgmZGF0YSwgcGlwZSwgIk5WNjEiLCBEUk1fRk9STUFUX05W NjEpOworCQlydW5fdGVzdHNfZm9yX3BpcGUoJmRhdGEsIHBpcGUsICJZVVY0MjAiLCBEUk1fRk9S TUFUX1lVVjQyMCk7CisJCXJ1bl90ZXN0c19mb3JfcGlwZSgmZGF0YSwgcGlwZSwgIllVVjQyMiIs IERSTV9GT1JNQVRfWVVWNDIyKTsKKwkJcnVuX3Rlc3RzX2Zvcl9waXBlKCZkYXRhLCBwaXBlLCAi WVZVNDIwIiwgRFJNX0ZPUk1BVF9ZVlU0MjApOworCQlydW5fdGVzdHNfZm9yX3BpcGUoJmRhdGEs IHBpcGUsICJZVlU0MjIiLCBEUk1fRk9STUFUX1lWVTQyMik7CisJCXJ1bl90ZXN0c19mb3JfcGlw ZSgmZGF0YSwgcGlwZSwgIlAwMTAiLCBEUk1fRk9STUFUX1AwMTApOworCQlydW5fdGVzdHNfZm9y X3BpcGUoJmRhdGEsIHBpcGUsICJQMDEyIiwgRFJNX0ZPUk1BVF9QMDEyKTsKKwkJcnVuX3Rlc3Rz X2Zvcl9waXBlKCZkYXRhLCBwaXBlLCAiUDAxNiIsIERSTV9GT1JNQVRfUDAxNik7CisJCXJ1bl90 ZXN0c19mb3JfcGlwZSgmZGF0YSwgcGlwZSwgIllVWVYiLCBEUk1fRk9STUFUX1lVWVYpOworCQly dW5fdGVzdHNfZm9yX3BpcGUoJmRhdGEsIHBpcGUsICJZVllVIiwgRFJNX0ZPUk1BVF9ZVllVKTsK KwkJcnVuX3Rlc3RzX2Zvcl9waXBlKCZkYXRhLCBwaXBlLCAiVVlWWSIsIERSTV9GT1JNQVRfVVlW WSk7CisJCXJ1bl90ZXN0c19mb3JfcGlwZSgmZGF0YSwgcGlwZSwgIlZZVVkiLCBEUk1fRk9STUFU X1ZZVVkpOworCQlydW5fdGVzdHNfZm9yX3BpcGUoJmRhdGEsIHBpcGUsICJYWVVWODg4OCIsIERS TV9GT1JNQVRfWFlVVjg4ODgpOworCQlydW5fdGVzdHNfZm9yX3BpcGUoJmRhdGEsIHBpcGUsICJZ MjEwIiwgRFJNX0ZPUk1BVF9ZMjEwKTsKKwkJcnVuX3Rlc3RzX2Zvcl9waXBlKCZkYXRhLCBwaXBl LCAiWTIxMiIsIERSTV9GT1JNQVRfWTIxMik7CisJCXJ1bl90ZXN0c19mb3JfcGlwZSgmZGF0YSwg cGlwZSwgIlkyMTYiLCBEUk1fRk9STUFUX1kyMTYpOworCQlydW5fdGVzdHNfZm9yX3BpcGUoJmRh dGEsIHBpcGUsICJZNDEwIiwgRFJNX0ZPUk1BVF9ZNDEwKTsKKwkJcnVuX3Rlc3RzX2Zvcl9waXBl KCZkYXRhLCBwaXBlLCAiWTQxMiIsIERSTV9GT1JNQVRfWTQxMik7CisJCXJ1bl90ZXN0c19mb3Jf cGlwZSgmZGF0YSwgcGlwZSwgIlk0MTYiLCBEUk1fRk9STUFUX1k0MTYpOworCQlydW5fdGVzdHNf Zm9yX3BpcGUoJmRhdGEsIHBpcGUsICJYVjMwIiwgRFJNX0ZPUk1BVF9YVllVMjEwMTAxMCk7CisJ CXJ1bl90ZXN0c19mb3JfcGlwZSgmZGF0YSwgcGlwZSwgIlhWMzYiLCBEUk1fRk9STUFUX1hWWVUx Ml8xNjE2MTYxNik7CisJCXJ1bl90ZXN0c19mb3JfcGlwZSgmZGF0YSwgcGlwZSwgIlhWNDgiLCBE Uk1fRk9STUFUX1hWWVUxNjE2MTYxNik7CisJfQorCisJaWd0X2ZpeHR1cmUgeworCQlpZ3RfZGlz cGxheV9maW5pKCZkYXRhLmRpc3BsYXkpOworCQljbG9zZShkYXRhLmRpc3BsYXkuZHJtX2ZkKTsK Kwl9Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9tZXNvbi5idWlsZCBiL3Rlc3RzL21lc29uLmJ1aWxk CmluZGV4IDkwMTVmODA5ZWQwNS4uOGNhN2ZlNWY0OTE3IDEwMDY0NAotLS0gYS90ZXN0cy9tZXNv bi5idWlsZAorKysgYi90ZXN0cy9tZXNvbi5idWlsZApAQCAtNjEsNiArNjEsNyBAQCB0ZXN0X3By b2dzID0gWwogCSdrbXNfdW5pdmVyc2FsX3BsYW5lJywKIAkna21zX3ZibGFuaycsCiAJJ2ttc192 cnInLAorCSdrbXNfeXV2JywKIAknbWV0YV90ZXN0JywKIAkncGVyZicsCiAJJ3ByaW1lX2J1c3kn LAotLSAKMi4yMC4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwppZ3QtZGV2IG1haWxpbmcgbGlzdAppZ3QtZGV2QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpo dHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lndC1kZXY=