From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by gabe.freedesktop.org (Postfix) with ESMTPS id ED0836E3B8 for ; Tue, 14 Jan 2020 13:35:39 +0000 (UTC) From: Kunal Joshi Date: Tue, 14 Jan 2020 19:05:04 +0530 Message-Id: <1579008904-22441-3-git-send-email-kunal1.joshi@intel.com> In-Reply-To: <1579008904-22441-1-git-send-email-kunal1.joshi@intel.com> References: <1579008904-22441-1-git-send-email-kunal1.joshi@intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t 2/2] tests/kms_color_chamelium: add subtests to validate color. 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 Cc: Kunal Joshi , ville.syrjala@intel.com, petri.latvala@intel.com, daniel.vetter@intel.com List-ID: VG8gdmFsaWRhdGUgY29sb3Igc3VidGVzdHMgdXNpbmcgY2hhbWVsaXVtLCBzdWJ0ZXN0cyBtb2Rp ZmllZAp0byBkbyBmcmFtZSBkdW1wIGNvbXBhcmlzb24gaW5zdGVhZCBvZiBjcmMgY29tcGFyaXNv bi4KVGVzdHMgcmVxdWlyZSBjaGFtZWxpdW0gYW5kIHdpbGwgdmFsaWRhdGUgY29sb3IgZmVhdHVy ZXMKYXQgcGlwZSBsZXZlbC4KClNpZ25lZC1vZmYtYnk6IEt1bmFsIEpvc2hpIDxrdW5hbDEuam9z aGlAaW50ZWwuY29tPgpTaWduZWQtb2ZmLWJ5OiBTd2F0aSBTaGFybWEgPHN3YXRpMi5zaGFybWFA aW50ZWwuY29tPgpTdWdnZXN0ZWQtYnk6IFVtYSBTaGFua2FyIDx1bWEuc2hhbmthckBpbnRlbC5j b20+Ci0tLQogdGVzdHMvTWFrZWZpbGUuYW0gICAgICAgICAgIHwgICAgMSArCiB0ZXN0cy9rbXNf Y29sb3JfY2hhbWVsaXVtLmMgfCAxMTE5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysKIHRlc3RzL21lc29uLmJ1aWxkICAgICAgICAgICB8ICAgIDEgKwogMyBmaWxl cyBjaGFuZ2VkLCAxMTIxIGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0cy9r bXNfY29sb3JfY2hhbWVsaXVtLmMKCmRpZmYgLS1naXQgYS90ZXN0cy9NYWtlZmlsZS5hbSBiL3Rl c3RzL01ha2VmaWxlLmFtCmluZGV4IDlhMzIwYmMuLjE3OTQ1NjkgMTAwNjQ0Ci0tLSBhL3Rlc3Rz L01ha2VmaWxlLmFtCisrKyBiL3Rlc3RzL01ha2VmaWxlLmFtCkBAIC0xMyw2ICsxMyw3IEBAIGVu ZGlmCiBpZiBIQVZFX0NIQU1FTElVTQogVEVTVFNfcHJvZ3MgKz0gXAogCWttc19jaGFtZWxpdW0g XAorCWttc19jb2xvcl9jaGFtZWxpdW0gXAogCSQoTlVMTCkKIGVuZGlmCiAKZGlmZiAtLWdpdCBh L3Rlc3RzL2ttc19jb2xvcl9jaGFtZWxpdW0uYyBiL3Rlc3RzL2ttc19jb2xvcl9jaGFtZWxpdW0u YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzg3YmY1Ci0tLSAvZGV2L251 bGwKKysrIGIvdGVzdHMva21zX2NvbG9yX2NoYW1lbGl1bS5jCkBAIC0wLDAgKzEsMTExOSBAQAor LyoKKyAqIENvcHlyaWdodCDCqSAyMDIwIEludGVsIENvcnBvcmF0aW9uCisgKgorICogUGVybWlz c2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0 YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVu dGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2Fy ZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0 aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0 ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFu ZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVk IHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBU aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5j bHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBj b3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisg KiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBB TlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRF RCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hB TEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5Z IENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNU SU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VU IE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhF UiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqLworCisjaW5jbHVkZSA8bWF0 aC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjaW5jbHVkZSAiZHJtLmgiCisjaW5jbHVkZSAi ZHJtdGVzdC5oIgorI2luY2x1ZGUgImlndC5oIgorCitJR1RfVEVTVF9ERVNDUklQVElPTigiVGVz dCBDb2xvciBGZWF0dXJlcyBhdCBQaXBlIGxldmVsIik7CisKKy8qIEludGVybmFsICovCit0eXBl ZGVmIHN0cnVjdCB7CisJZG91YmxlIHIsIGcsIGI7Cit9IGNvbG9yX3Q7CisKK3R5cGVkZWYgc3Ry dWN0IHsKKwlpbnQgZHJtX2ZkOworCXVpbnQzMl90IGRldmlkOworCWlndF9kaXNwbGF5X3QgZGlz cGxheTsKKworCXVpbnQzMl90IGNvbG9yX2RlcHRoOworCXVpbnQ2NF90IGRlZ2FtbWFfbHV0X3Np emU7CisJdWludDY0X3QgZ2FtbWFfbHV0X3NpemU7CisKKwlzdHJ1Y3QgY2hhbWVsaXVtICpjaGFt ZWxpdW07CisJc3RydWN0IGNoYW1lbGl1bV9wb3J0ICoqcG9ydHM7CisJaW50IHBvcnRfY291bnQ7 Cit9IGRhdGFfdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworCWludCBzaXplOworCWRvdWJsZSBjb2Vm ZnNbXTsKK30gZ2FtbWFfbHV0X3Q7CisKK3N0YXRpYyB2b2lkIHBhaW50X2dyYWRpZW50X3JlY3Rh bmdsZXMoZGF0YV90ICpkYXRhLAorCQkJCSAgICAgIGRybU1vZGVNb2RlSW5mbyAqbW9kZSwKKwkJ CQkgICAgICBjb2xvcl90ICpjb2xvcnMsCisJCQkJICAgICAgc3RydWN0IGlndF9mYiAqZmIpCit7 CisJY2Fpcm9fdCAqY3IgPSBpZ3RfZ2V0X2NhaXJvX2N0eChkYXRhLT5kcm1fZmQsIGZiKTsKKwlp bnQgaSwgbCA9IG1vZGUtPmhkaXNwbGF5IC8gMzsKKwlpbnQgcm93c19yZW1haW5pbmcgPSBtb2Rl LT5oZGlzcGxheSAlIDM7CisKKwkvKiBQYWludCAzIGdyYWRpZW50IHJlY3RhbmdsZXMgd2l0aCBy ZWQvZ3JlZW4vYmx1ZSBiZXR3ZWVuIDEuMCBhbmQKKwkgKiAwLjUuIFdlIHdhbnQgdG8gYXZvaWQg MCBzbyBlYWNoIG1heCBMVVRzIG9ubHkgYWZmZWN0IHRoZWlyIG93bgorCSAqIHJlY3RhbmdsZS4K KwkgKi8KKwlmb3IgKGkgPSAwIDsgaSA8IDM7IGkrKykgeworCQlpZ3RfcGFpbnRfY29sb3JfZ3Jh ZGllbnRfcmFuZ2UoY3IsIGkgKiBsLCAwLCBsLCBtb2RlLT52ZGlzcGxheSwKKwkJCQkJICAgICAg IGNvbG9yc1tpXS5yICE9IDAgPyAwLjIgOiAwLAorCQkJCQkgICAgICAgY29sb3JzW2ldLmcgIT0g MCA/IDAuMiA6IDAsCisJCQkJCSAgICAgICBjb2xvcnNbaV0uYiAhPSAwID8gMC4yIDogMCwKKwkJ CQkJICAgICAgIGNvbG9yc1tpXS5yLAorCQkJCQkgICAgICAgY29sb3JzW2ldLmcsCisJCQkJCSAg ICAgICBjb2xvcnNbaV0uYik7CisJfQorCisJaWYgKHJvd3NfcmVtYWluaW5nID4gMCkKKwkJaWd0 X3BhaW50X2NvbG9yX2dyYWRpZW50X3JhbmdlKGNyLCBpICogbCwgMCwgcm93c19yZW1haW5pbmcs CisJCQkJCSAgICAgICBtb2RlLT52ZGlzcGxheSwKKwkJCQkJICAgICAgIGNvbG9yc1tpLTFdLnIg IT0gMCA/IDAuMiA6IDAsCisJCQkJCSAgICAgICBjb2xvcnNbaS0xXS5nICE9IDAgPyAwLjIgOiAw LAorCQkJCQkgICAgICAgY29sb3JzW2ktMV0uYiAhPSAwID8gMC4yIDogMCwKKwkJCQkJICAgICAg IGNvbG9yc1tpLTFdLnIsCisJCQkJCSAgICAgICBjb2xvcnNbaS0xXS5nLAorCQkJCQkgICAgICAg Y29sb3JzW2ktMV0uYik7CisKKwlpZ3RfcHV0X2NhaXJvX2N0eChkYXRhLT5kcm1fZmQsIGZiLCBj cik7Cit9CisKK3N0YXRpYyB2b2lkIHBhaW50X3JlY3RhbmdsZXMoZGF0YV90ICpkYXRhLAorCQkJ ICAgICBkcm1Nb2RlTW9kZUluZm8gKm1vZGUsCisJCQkgICAgIGNvbG9yX3QgKmNvbG9ycywKKwkJ CSAgICAgc3RydWN0IGlndF9mYiAqZmIpCit7CisJY2Fpcm9fdCAqY3IgPSBpZ3RfZ2V0X2NhaXJv X2N0eChkYXRhLT5kcm1fZmQsIGZiKTsKKwlpbnQgaSwgbCA9IG1vZGUtPmhkaXNwbGF5IC8gMzsK KwlpbnQgcm93c19yZW1haW5pbmcgPSBtb2RlLT5oZGlzcGxheSAlIDM7CisKKwkvKiBQYWludCAz IHNvbGlkIHJlY3RhbmdsZXMuICovCisJZm9yIChpID0gMCA7IGkgPCAzOyBpKyspIHsKKwkJaWd0 X3BhaW50X2NvbG9yKGNyLCBpICogbCwgMCwgbCwgbW9kZS0+dmRpc3BsYXksCisJCQkJY29sb3Jz W2ldLnIsIGNvbG9yc1tpXS5nLCBjb2xvcnNbaV0uYik7CisJfQorCisJaWYgKHJvd3NfcmVtYWlu aW5nID4gMCkKKwkJaWd0X3BhaW50X2NvbG9yKGNyLCBpICogbCwgMCwgcm93c19yZW1haW5pbmcs IG1vZGUtPnZkaXNwbGF5LAorCQkJCWNvbG9yc1tpLTFdLnIsIGNvbG9yc1tpLTFdLmcsIGNvbG9y c1tpLTFdLmIpOworCisJaWd0X3B1dF9jYWlyb19jdHgoZGF0YS0+ZHJtX2ZkLCBmYiwgY3IpOwor fQorCitzdGF0aWMgZ2FtbWFfbHV0X3QgKmFsbG9jX2x1dChpbnQgbHV0X3NpemUpCit7CisJZ2Ft bWFfbHV0X3QgKmdhbW1hOworCisJaWd0X2Fzc2VydF9sdCgwLCBsdXRfc2l6ZSk7CisKKwlnYW1t YSA9IG1hbGxvYyhzaXplb2YoKmdhbW1hKSArIGx1dF9zaXplICogc2l6ZW9mKGdhbW1hLT5jb2Vm ZnNbMF0pKTsKKwlpZ3RfYXNzZXJ0KGdhbW1hKTsKKwlnYW1tYS0+c2l6ZSA9IGx1dF9zaXplOwor CisJcmV0dXJuIGdhbW1hOworfQorCitzdGF0aWMgdm9pZCBmcmVlX2x1dChnYW1tYV9sdXRfdCAq Z2FtbWEpCit7CisJaWYgKCFnYW1tYSkKKwkJcmV0dXJuOworCisJZnJlZShnYW1tYSk7Cit9CisK K3N0YXRpYyBnYW1tYV9sdXRfdCAqZ2VuZXJhdGVfdGFibGUoaW50IGx1dF9zaXplLCBkb3VibGUg ZXhwKQoreworCWdhbW1hX2x1dF90ICpnYW1tYSA9IGFsbG9jX2x1dChsdXRfc2l6ZSk7CisJaW50 IGk7CisKKwlnYW1tYS0+Y29lZmZzWzBdID0gMC4wOworCWZvciAoaSA9IDE7IGkgPCBsdXRfc2l6 ZTsgaSsrKQorCQlnYW1tYS0+Y29lZmZzW2ldID0gcG93KGkgKiAxLjAgLyAobHV0X3NpemUgLSAx KSwgZXhwKTsKKworCXJldHVybiBnYW1tYTsKK30KKworc3RhdGljIGdhbW1hX2x1dF90ICpnZW5l cmF0ZV90YWJsZV9tYXgoaW50IGx1dF9zaXplKQoreworCWdhbW1hX2x1dF90ICpnYW1tYSA9IGFs bG9jX2x1dChsdXRfc2l6ZSk7CisJaW50IGk7CisKKwlnYW1tYS0+Y29lZmZzWzBdID0gMC4wOwor CWZvciAoaSA9IDE7IGkgPCBsdXRfc2l6ZTsgaSsrKQorCQlnYW1tYS0+Y29lZmZzW2ldID0gMS4w OworCisJcmV0dXJuIGdhbW1hOworfQorCitzdGF0aWMgc3RydWN0IGRybV9jb2xvcl9sdXQgKmNv ZWZmc190b19sdXQoZGF0YV90ICpkYXRhLAorCQkJCQkgICBjb25zdCBnYW1tYV9sdXRfdCAqZ2Ft bWEsCisJCQkJCSAgIHVpbnQzMl90IGNvbG9yX2RlcHRoLAorCQkJCQkgICBpbnQgb2ZmKQorewor CXN0cnVjdCBkcm1fY29sb3JfbHV0ICpsdXQ7CisJaW50IGksIGx1dF9zaXplID0gZ2FtbWEtPnNp emU7CisJdWludDMyX3QgbWF4X3ZhbHVlID0gKDEgPDwgMTYpIC0gMTsKKwl1aW50MzJfdCBtYXNr OworCisJaWYgKGlzX2k5MTVfZGV2aWNlKGRhdGEtPmRybV9mZCkpCisJCW1hc2sgPSAoKDEgPDwg Y29sb3JfZGVwdGgpIC0gMSkgPDwgODsKKwllbHNlCisJCW1hc2sgPSBtYXhfdmFsdWU7CisKKwls dXQgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBkcm1fY29sb3JfbHV0KSAqIGx1dF9zaXplKTsKKwor CWlmIChJU19DSEVSUllWSUVXKGRhdGEtPmRldmlkKSkKKwkJbHV0X3NpemUgLT0gMTsKKwlmb3Ig KGkgPSAwOyBpIDwgbHV0X3NpemU7IGkrKykgeworCQl1aW50MzJfdCB2ID0gKGdhbW1hLT5jb2Vm ZnNbaV0gKiBtYXhfdmFsdWUpOworCisJCXYgJj0gbWFzazsKKworCQlsdXRbaV0ucmVkID0gdjsK KwkJbHV0W2ldLmdyZWVuID0gdjsKKwkJbHV0W2ldLmJsdWUgPSB2OworCX0KKworCWlmIChJU19D SEVSUllWSUVXKGRhdGEtPmRldmlkKSkKKwkJbHV0W2x1dF9zaXplXS5yZWQgPQorCQkJbHV0W2x1 dF9zaXplXS5ncmVlbiA9CisJCQlsdXRbbHV0X3NpemVdLmJsdWUgPSBsdXRbbHV0X3NpemUgLSAx XS5yZWQ7CisKKwlyZXR1cm4gbHV0OworfQorCitzdGF0aWMgdm9pZCBzZXRfZGVnYW1tYShkYXRh X3QgKmRhdGEsCisJCQlpZ3RfcGlwZV90ICpwaXBlLAorCQkJY29uc3QgZ2FtbWFfbHV0X3QgKmdh bW1hKQoreworCXNpemVfdCBzaXplID0gc2l6ZW9mKHN0cnVjdCBkcm1fY29sb3JfbHV0KSAqIGdh bW1hLT5zaXplOworCXN0cnVjdCBkcm1fY29sb3JfbHV0ICpsdXQgPSBjb2VmZnNfdG9fbHV0KGRh dGEsIGdhbW1hLAorCQkJCQkJICBkYXRhLT5jb2xvcl9kZXB0aCwgMCk7CisKKwlmcmVlKGx1dCk7 Cit9CisKK3N0YXRpYyB2b2lkIHNldF9nYW1tYShkYXRhX3QgKmRhdGEsCisJCSAgICAgIGlndF9w aXBlX3QgKnBpcGUsCisJCSAgICAgIGNvbnN0IGdhbW1hX2x1dF90ICpnYW1tYSkKK3sKKwlzaXpl X3Qgc2l6ZSA9IHNpemVvZihzdHJ1Y3QgZHJtX2NvbG9yX2x1dCkgKiBnYW1tYS0+c2l6ZTsKKwlz dHJ1Y3QgZHJtX2NvbG9yX2x1dCAqbHV0ID0gY29lZmZzX3RvX2x1dChkYXRhLCBnYW1tYSwKKwkJ CQkJCSAgZGF0YS0+Y29sb3JfZGVwdGgsIDApOworCisJaWd0X3BpcGVfb2JqX3JlcGxhY2VfcHJv cF9ibG9iKHBpcGUsIElHVF9DUlRDX0dBTU1BX0xVVCwgbHV0LCBzaXplKTsKKworCWZyZWUobHV0 KTsKK30KKworc3RhdGljIHZvaWQgc2V0X2N0bShpZ3RfcGlwZV90ICpwaXBlLCBjb25zdCBkb3Vi bGUgKmNvZWZmaWNpZW50cykKK3sKKwlzdHJ1Y3QgZHJtX2NvbG9yX2N0bSBjdG07CisJaW50IGk7 CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjdG0ubWF0cml4KTsgaSsrKSB7CisJCWlm IChjb2VmZmljaWVudHNbaV0gPCAwKSB7CisJCQljdG0ubWF0cml4W2ldID0KKwkJCQkoaW50NjRf dCkgKC1jb2VmZmljaWVudHNbaV0gKgorCQkJCSgoaW50NjRfdCkgMUwgPDwgMzIpKTsKKwkJCWN0 bS5tYXRyaXhbaV0gfD0gMVVMTCA8PCA2MzsKKwkJfSBlbHNlCisJCQljdG0ubWF0cml4W2ldID0K KwkJCQkoaW50NjRfdCkgKGNvZWZmaWNpZW50c1tpXSAqCisJCQkJKChpbnQ2NF90KSAxTCA8PCAz MikpOworCX0KKworCWlndF9waXBlX29ial9yZXBsYWNlX3Byb3BfYmxvYihwaXBlLCBJR1RfQ1JU Q19DVE0sICZjdG0sIHNpemVvZihjdG0pKTsKK30KKworc3RhdGljIHZvaWQgZGlzYWJsZV9wcm9w KGlndF9waXBlX3QgKnBpcGUsIGVudW0gaWd0X2F0b21pY19jcnRjX3Byb3BlcnRpZXMgcHJvcCkK K3sKKwlpZiAoaWd0X3BpcGVfb2JqX2hhc19wcm9wKHBpcGUsIHByb3ApKQorCQlpZ3RfcGlwZV9v YmpfcmVwbGFjZV9wcm9wX2Jsb2IocGlwZSwgcHJvcCwgTlVMTCwgMCk7Cit9CisKKyNkZWZpbmUg ZGlzYWJsZV9kZWdhbW1hKHBpcGUpIGRpc2FibGVfcHJvcChwaXBlLCBJR1RfQ1JUQ19ERUdBTU1B X0xVVCkKKyNkZWZpbmUgZGlzYWJsZV9nYW1tYShwaXBlKSBkaXNhYmxlX3Byb3AocGlwZSwgSUdU X0NSVENfR0FNTUFfTFVUKQorI2RlZmluZSBkaXNhYmxlX2N0bShwaXBlKSBkaXNhYmxlX3Byb3Ao cGlwZSwgSUdUX0NSVENfQ1RNKQorCisvKgorICogRHJhdyAzIGdyYWRpZW50IHJlY3RhbmdsZXMg aW4gcmVkLCBncmVlbiBhbmQgYmx1ZSwgd2l0aCBhIG1heGVkIG91dAorICogZGVnYW1tYSBMVVQg YW5kIHZlcmlmeSB3ZSBoYXZlIHRoZSBzYW1lIGZyYW1lIGR1bXAgYXMgZHJhd2luZyBzb2xpZCBj b2xvcgorICogcmVjdGFuZ2xlcyB3aXRoIGxpbmVhciBkZWdhbW1hIExVVC4KKyAqLworc3RhdGlj IHZvaWQgdGVzdF9waXBlX2RlZ2FtbWEoZGF0YV90ICpkYXRhLAorCQkJICAgICAgaWd0X3BsYW5l X3QgKnByaW1hcnkpCit7CisJaWd0X291dHB1dF90ICpvdXRwdXQ7CisJZ2FtbWFfbHV0X3QgKmRl Z2FtbWFfbGluZWFyLCAqZGVnYW1tYV9mdWxsOworCWdhbW1hX2x1dF90ICpnYW1tYV9saW5lYXI7 CisJY29sb3JfdCByZWRfZ3JlZW5fYmx1ZVtdID0geworCQl7IDEuMCwgMC4wLCAwLjAgfSwKKwkJ eyAwLjAsIDEuMCwgMC4wIH0sCisJCXsgMC4wLCAwLjAsIDEuMCB9CisJfTsKKworCWludCBpOwor CXN0cnVjdCBjaGFtZWxpdW1fcG9ydCAqcG9ydDsKKwljaGFyICpjb25uZWN0ZWRfcG9ydHNbNF07 CisJYm9vbCB2YWxpZF9vdXRwdXQgPSBmYWxzZTsKKworCWZvciAoaSA9IDA7IGkgPCBkYXRhLT5w b3J0X2NvdW50OyBpKyspCisJCWNvbm5lY3RlZF9wb3J0c1tpXSA9CisJCQkoY2hhciAqKSBjaGFt ZWxpdW1fcG9ydF9nZXRfbmFtZShkYXRhLT5wb3J0c1tpXSk7CisKKwlpZ3RfcmVxdWlyZShpZ3Rf cGlwZV9vYmpfaGFzX3Byb3AocHJpbWFyeS0+cGlwZSwgSUdUX0NSVENfREVHQU1NQV9MVVQpKTsK KwlpZ3RfcmVxdWlyZShpZ3RfcGlwZV9vYmpfaGFzX3Byb3AocHJpbWFyeS0+cGlwZSwgSUdUX0NS VENfR0FNTUFfTFVUKSk7CisKKwlkZWdhbW1hX2xpbmVhciA9IGdlbmVyYXRlX3RhYmxlKGRhdGEt PmRlZ2FtbWFfbHV0X3NpemUsIDEuMCk7CisJZGVnYW1tYV9mdWxsID0gZ2VuZXJhdGVfdGFibGVf bWF4KGRhdGEtPmRlZ2FtbWFfbHV0X3NpemUpOworCisJZ2FtbWFfbGluZWFyID0gZ2VuZXJhdGVf dGFibGUoZGF0YS0+Z2FtbWFfbHV0X3NpemUsIDEuMCk7CisKKwlmb3JfZWFjaF92YWxpZF9vdXRw dXRfb25fcGlwZSgmZGF0YS0+ZGlzcGxheSwKKwkJCQkgICAgICBwcmltYXJ5LT5waXBlLT5waXBl LAorCQkJCSAgICAgIG91dHB1dCkgeworCQlkcm1Nb2RlTW9kZUluZm8gKm1vZGU7CisJCXN0cnVj dCBpZ3RfZmIgZmJfbW9kZXNldCwgZmI7CisJCXN0cnVjdCBjaGFtZWxpdW1fZnJhbWVfZHVtcCAq ZnJhbWVfZnVsbGdhbW1hLCAqZnJhbWVfZnVsbGNvbG9yczsKKwkJaW50IGZiX2lkLCBmYl9tb2Rl c2V0X2lkOworCisJCWZvciAoaSA9IDA7IGkgPCBkYXRhLT5wb3J0X2NvdW50OyBpKyspCisJCQl2 YWxpZF9vdXRwdXQgfD0KKwkJCQkoc3RyY21wKG91dHB1dC0+bmFtZSwgY29ubmVjdGVkX3BvcnRz W2ldKSA9PSAwKTsKKwkJaWYgKCF2YWxpZF9vdXRwdXQpCisJCQljb250aW51ZTsKKwkJZWxzZQor CQkJZm9yIChpID0gMDsgaSA8IGRhdGEtPnBvcnRfY291bnQ7IGkrKykKKwkJCQlpZiAoc3RyY21w KG91dHB1dC0+bmFtZSwKKwkJCQkJICAgY29ubmVjdGVkX3BvcnRzW2ldKSA9PSAwKQorCQkJCQlw b3J0ID0gZGF0YS0+cG9ydHNbaV07CisKKwkJaWd0X291dHB1dF9zZXRfcGlwZShvdXRwdXQsIHBy aW1hcnktPnBpcGUtPnBpcGUpOworCQltb2RlID0gaWd0X291dHB1dF9nZXRfbW9kZShvdXRwdXQp OworCisJCS8qIENyZWF0ZSBhIGZyYW1lYnVmZmVyIGF0IHRoZSBzaXplIG9mIHRoZSBvdXRwdXQu ICovCisJCWZiX2lkID0gaWd0X2NyZWF0ZV9mYihkYXRhLT5kcm1fZmQsCisJCQkJICAgICAgbW9k ZS0+aGRpc3BsYXksCisJCQkJICAgICAgbW9kZS0+dmRpc3BsYXksCisJCQkJICAgICAgRFJNX0ZP Uk1BVF9YUkdCODg4OCwKKwkJCQkgICAgICBMT0NBTF9EUk1fRk9STUFUX01PRF9OT05FLAorCQkJ CSAgICAgICZmYik7CisJCWlndF9hc3NlcnQoZmJfaWQpOworCisJCWZiX21vZGVzZXRfaWQgPSBp Z3RfY3JlYXRlX2ZiKGRhdGEtPmRybV9mZCwKKwkJCQkJICAgICAgbW9kZS0+aGRpc3BsYXksCisJ CQkJCSAgICAgIG1vZGUtPnZkaXNwbGF5LAorCQkJCQkgICAgICBEUk1fRk9STUFUX1hSR0I4ODg4 LAorCQkJCQkgICAgICBMT0NBTF9EUk1fRk9STUFUX01PRF9OT05FLAorCQkJCQkgICAgICAmZmJf bW9kZXNldCk7CisJCWlndF9hc3NlcnQoZmJfbW9kZXNldF9pZCk7CisKKwkJaWd0X3BsYW5lX3Nl dF9mYihwcmltYXJ5LCAmZmJfbW9kZXNldCk7CisJCWRpc2FibGVfY3RtKHByaW1hcnktPnBpcGUp OworCQlkaXNhYmxlX2RlZ2FtbWEocHJpbWFyeS0+cGlwZSk7CisJCXNldF9nYW1tYShkYXRhLCBw cmltYXJ5LT5waXBlLCBnYW1tYV9saW5lYXIpOworCQlpZ3RfZGlzcGxheV9jb21taXQoJmRhdGEt PmRpc3BsYXkpOworCisJCS8qIERyYXcgc29saWQgY29sb3JzIHdpdGggbm8gZGVnYW1tYSB0cmFu c2Zvcm1hdGlvbi4gKi8KKwkJcGFpbnRfcmVjdGFuZ2xlcyhkYXRhLCBtb2RlLCByZWRfZ3JlZW5f Ymx1ZSwgJmZiKTsKKwkJaWd0X3BsYW5lX3NldF9mYihwcmltYXJ5LCAmZmIpOworCQlpZ3RfZGlz cGxheV9jb21taXQoJmRhdGEtPmRpc3BsYXkpOworCQljaGFtZWxpdW1fY2FwdHVyZShkYXRhLT5j aGFtZWxpdW0sIHBvcnQsIDAsIDAsIDAsIDAsIDEpOworCQlmcmFtZV9mdWxsZ2FtbWEgPQorCQkJ Y2hhbWVsaXVtX3JlYWRfY2FwdHVyZWRfZnJhbWUoZGF0YS0+Y2hhbWVsaXVtLCAwKTsKKworCQkv KiBEcmF3IGEgZ3JhZGllbnQgd2l0aCBkZWdhbW1hIExVVCB0byByZW1hcCBhbGwKKwkJICogdmFs dWVzIHRvIG1heCByZWQvZ3JlZW4vYmx1ZS4KKwkJICovCisJCXBhaW50X2dyYWRpZW50X3JlY3Rh bmdsZXMoZGF0YSwgbW9kZSwgcmVkX2dyZWVuX2JsdWUsICZmYik7CisJCWlndF9wbGFuZV9zZXRf ZmIocHJpbWFyeSwgJmZiKTsKKwkJc2V0X2RlZ2FtbWEoZGF0YSwgcHJpbWFyeS0+cGlwZSwgZGVn YW1tYV9mdWxsKTsKKwkJaWd0X2Rpc3BsYXlfY29tbWl0KCZkYXRhLT5kaXNwbGF5KTsKKwkJY2hh bWVsaXVtX2NhcHR1cmUoZGF0YS0+Y2hhbWVsaXVtLCBwb3J0LCAwLCAwLCAwLCAwLCAxKTsKKwkJ ZnJhbWVfZnVsbGNvbG9ycyA9CisJCQljaGFtZWxpdW1fcmVhZF9jYXB0dXJlZF9mcmFtZShkYXRh LT5jaGFtZWxpdW0sIDApOworCisJCS8qIFZlcmlmeSB0aGF0IHRoZSBmcmFtZSBkdW1wIG9mIHRo ZSBzb2Z0d2FyZSBjb21wdXRlZCBvdXRwdXQKKwkJICogaXMgZXF1YWwgdG8gdGhlIGZyYW1lIGR1 bXAgb2YgdGhlIGRlZ2FtbWEgTFVUIHRyYW5zZm9ybWF0aW9uCisJCSAqIG91dHB1dC4KKwkJICov CisJCWlndF9hc3NlcnQoY2hhbWVsaXVtX2Fzc2VydF9mcmFtZV9kdW1wX2VxKGRhdGEtPmNoYW1l bGl1bSwKKwkJCQkJCQkgIGZyYW1lX2Z1bGxnYW1tYSwKKwkJCQkJCQkgIGZyYW1lX2Z1bGxjb2xv cnMpKTsKKworCQlpZ3RfcGxhbmVfc2V0X2ZiKHByaW1hcnksIE5VTEwpOworCQlpZ3Rfb3V0cHV0 X3NldF9waXBlKG91dHB1dCwgUElQRV9OT05FKTsKKwl9CisKKwlmcmVlX2x1dChkZWdhbW1hX2xp bmVhcik7CisJZnJlZV9sdXQoZGVnYW1tYV9mdWxsKTsKKwlmcmVlX2x1dChnYW1tYV9saW5lYXIp OworfQorCisvKgorICogRHJhdyAzIGdyYWRpZW50IHJlY3RhbmdsZXMgaW4gcmVkLCBncmVlbiBh bmQgYmx1ZSwgd2l0aCBhIG1heGVkIG91dAorICogZ2FtbWEgTFVUIGFuZCB2ZXJpZnkgd2UgaGF2 ZSB0aGUgc2FtZSBmcmFtZSBkdW1wIGFzIGRyYXdpbmcgc29saWQKKyAqIGNvbG9yIHJlY3Rhbmds ZXMuCisgKi8KK3N0YXRpYyB2b2lkIHRlc3RfcGlwZV9nYW1tYShkYXRhX3QgKmRhdGEsCisJCQkg ICAgaWd0X3BsYW5lX3QgKnByaW1hcnkpCit7CisJaWd0X291dHB1dF90ICpvdXRwdXQ7CisJZ2Ft bWFfbHV0X3QgKmdhbW1hX2Z1bGw7CisJY29sb3JfdCByZWRfZ3JlZW5fYmx1ZVtdID0geworCQl7 IDEuMCwgMC4wLCAwLjAgfSwKKwkJeyAwLjAsIDEuMCwgMC4wIH0sCisJCXsgMC4wLCAwLjAsIDEu MCB9CisJfTsKKworCWludCBpOworCXN0cnVjdCBjaGFtZWxpdW1fcG9ydCAqcG9ydDsKKwljaGFy ICpjb25uZWN0ZWRfcG9ydHNbNF07CisJYm9vbCB2YWxpZF9vdXRwdXQgPSBmYWxzZTsKKworCWZv ciAoaSA9IDA7IGkgPCBkYXRhLT5wb3J0X2NvdW50OyBpKyspCisJCWNvbm5lY3RlZF9wb3J0c1tp XSA9CisJCQkoY2hhciAqKSBjaGFtZWxpdW1fcG9ydF9nZXRfbmFtZShkYXRhLT5wb3J0c1tpXSk7 CisKKwlpZ3RfcmVxdWlyZShpZ3RfcGlwZV9vYmpfaGFzX3Byb3AocHJpbWFyeS0+cGlwZSwgSUdU X0NSVENfR0FNTUFfTFVUKSk7CisKKwlnYW1tYV9mdWxsID0gZ2VuZXJhdGVfdGFibGVfbWF4KGRh dGEtPmdhbW1hX2x1dF9zaXplKTsKKworCWZvcl9lYWNoX3ZhbGlkX291dHB1dF9vbl9waXBlKCZk YXRhLT5kaXNwbGF5LAorCQkJCSAgICAgIHByaW1hcnktPnBpcGUtPnBpcGUsCisJCQkJICAgICAg b3V0cHV0KSB7CisJCWRybU1vZGVNb2RlSW5mbyAqbW9kZTsKKwkJc3RydWN0IGlndF9mYiBmYl9t b2Rlc2V0LCBmYjsKKwkJc3RydWN0IGNoYW1lbGl1bV9mcmFtZV9kdW1wICpmcmFtZV9mdWxsZ2Ft bWEsICpmcmFtZV9mdWxsY29sb3JzOworCQlpbnQgZmJfaWQsIGZiX21vZGVzZXRfaWQ7CisKKwkJ Zm9yIChpID0gMDsgaSA8IGRhdGEtPnBvcnRfY291bnQ7IGkrKykKKwkJCXZhbGlkX291dHB1dCB8 PQorCQkJCShzdHJjbXAob3V0cHV0LT5uYW1lLCBjb25uZWN0ZWRfcG9ydHNbaV0pID09IDApOwor CQlpZiAoIXZhbGlkX291dHB1dCkKKwkJCWNvbnRpbnVlOworCQllbHNlCisJCQlmb3IgKGkgPSAw OyBpIDwgZGF0YS0+cG9ydF9jb3VudDsgaSsrKQorCQkJCWlmIChzdHJjbXAob3V0cHV0LT5uYW1l LAorCQkJCQkgICBjb25uZWN0ZWRfcG9ydHNbaV0pID09IDApCisJCQkJCXBvcnQgPSBkYXRhLT5w b3J0c1tpXTsKKworCQlpZ3Rfb3V0cHV0X3NldF9waXBlKG91dHB1dCwgcHJpbWFyeS0+cGlwZS0+ cGlwZSk7CisJCW1vZGUgPSBpZ3Rfb3V0cHV0X2dldF9tb2RlKG91dHB1dCk7CisKKwkJLyogQ3Jl YXRlIGEgZnJhbWVidWZmZXIgYXQgdGhlIHNpemUgb2YgdGhlIG91dHB1dC4gKi8KKwkJZmJfaWQg PSBpZ3RfY3JlYXRlX2ZiKGRhdGEtPmRybV9mZCwKKwkJCQkgICAgICBtb2RlLT5oZGlzcGxheSwK KwkJCQkgICAgICBtb2RlLT52ZGlzcGxheSwKKwkJCQkgICAgICBEUk1fRk9STUFUX1hSR0I4ODg4 LAorCQkJCSAgICAgIExPQ0FMX0RSTV9GT1JNQVRfTU9EX05PTkUsCisJCQkJICAgICAgJmZiKTsK KwkJaWd0X2Fzc2VydChmYl9pZCk7CisKKwkJZmJfbW9kZXNldF9pZCA9IGlndF9jcmVhdGVfZmIo ZGF0YS0+ZHJtX2ZkLAorCQkJCQkgICAgICBtb2RlLT5oZGlzcGxheSwKKwkJCQkJICAgICAgbW9k ZS0+dmRpc3BsYXksCisJCQkJCSAgICAgIERSTV9GT1JNQVRfWFJHQjg4ODgsCisJCQkJCSAgICAg IExPQ0FMX0RSTV9GT1JNQVRfTU9EX05PTkUsCisJCQkJCSAgICAgICZmYl9tb2Rlc2V0KTsKKwkJ aWd0X2Fzc2VydChmYl9tb2Rlc2V0X2lkKTsKKworCQlpZ3RfcGxhbmVfc2V0X2ZiKHByaW1hcnks ICZmYl9tb2Rlc2V0KTsKKwkJZGlzYWJsZV9jdG0ocHJpbWFyeS0+cGlwZSk7CisJCWRpc2FibGVf ZGVnYW1tYShwcmltYXJ5LT5waXBlKTsKKwkJc2V0X2dhbW1hKGRhdGEsIHByaW1hcnktPnBpcGUs IGdhbW1hX2Z1bGwpOworCQlpZ3RfZGlzcGxheV9jb21taXQoJmRhdGEtPmRpc3BsYXkpOworCisJ CS8qIERyYXcgc29saWQgY29sb3JzIHdpdGggbm8gZ2FtbWEgdHJhbnNmb3JtYXRpb24uICovCisJ CXBhaW50X3JlY3RhbmdsZXMoZGF0YSwgbW9kZSwgcmVkX2dyZWVuX2JsdWUsICZmYik7CisJCWln dF9wbGFuZV9zZXRfZmIocHJpbWFyeSwgJmZiKTsKKwkJaWd0X2Rpc3BsYXlfY29tbWl0KCZkYXRh LT5kaXNwbGF5KTsKKwkJY2hhbWVsaXVtX2NhcHR1cmUoZGF0YS0+Y2hhbWVsaXVtLCBwb3J0LCAw LCAwLCAwLCAwLCAxKTsKKwkJZnJhbWVfZnVsbGdhbW1hID0KKwkJCWNoYW1lbGl1bV9yZWFkX2Nh cHR1cmVkX2ZyYW1lKGRhdGEtPmNoYW1lbGl1bSwgMCk7CisKKwkJLyogRHJhdyBhIGdyYWRpZW50 IHdpdGggZ2FtbWEgTFVUIHRvIHJlbWFwIGFsbCB2YWx1ZXMKKwkJICogdG8gbWF4IHJlZC9ncmVl bi9ibHVlLgorCQkgKi8KKwkJcGFpbnRfZ3JhZGllbnRfcmVjdGFuZ2xlcyhkYXRhLCBtb2RlLCBy ZWRfZ3JlZW5fYmx1ZSwgJmZiKTsKKwkJaWd0X3BsYW5lX3NldF9mYihwcmltYXJ5LCAmZmIpOwor CQlpZ3RfZGlzcGxheV9jb21taXQoJmRhdGEtPmRpc3BsYXkpOworCQljaGFtZWxpdW1fY2FwdHVy ZShkYXRhLT5jaGFtZWxpdW0sIHBvcnQsIDAsIDAsIDAsIDAsIDEpOworCQlmcmFtZV9mdWxsY29s b3JzID0KKwkJCWNoYW1lbGl1bV9yZWFkX2NhcHR1cmVkX2ZyYW1lKGRhdGEtPmNoYW1lbGl1bSwg MCk7CisKKwkJLyogVmVyaWZ5IHRoYXQgdGhlIGZyYW1lIGR1bXAgb2YgdGhlIHNvZnR3YXJlIGNv bXB1dGVkIG91dHB1dCBpcworCQkgKiBlcXVhbCB0byB0aGUgZnJhbWUgZHVtcCBvZiB0aGUgZGVn YW1tYSBMVVQgdHJhbnNmb3JtYXRpb24KKwkJICogb3V0cHV0LgorCQkgKi8KKwkJaWd0X2Fzc2Vy dChjaGFtZWxpdW1fYXNzZXJ0X2ZyYW1lX2R1bXBfZXEoZGF0YS0+Y2hhbWVsaXVtLAorCQkJCQkJ CSAgZnJhbWVfZnVsbGdhbW1hLAorCQkJCQkJCSAgZnJhbWVfZnVsbGNvbG9ycykpOworCisJCWln dF9wbGFuZV9zZXRfZmIocHJpbWFyeSwgTlVMTCk7CisJCWlndF9vdXRwdXRfc2V0X3BpcGUob3V0 cHV0LCBQSVBFX05PTkUpOworCX0KKworCWZyZWVfbHV0KGdhbW1hX2Z1bGwpOworfQorCisvKgor ICogRHJhdyAzIHJlY3RhbmdsZXMgdXNpbmcgYmVmb3JlIGNvbG9ycyB3aXRoIHRoZSBjdG0gbWF0 cml4IGFwcGx5IGFuZCB2ZXJpZnkKKyAqIHRoZSBmcmFtZSBkdW1wIGlzIGVxdWFsIHRvIHVzaW5n IGFmdGVyIGNvbG9ycyB3aXRoIGFuIGlkZW50aWZ5IGN0bSBtYXRyaXguCisgKi8KK3N0YXRpYyBi b29sIHRlc3RfcGlwZV9jdG0oZGF0YV90ICpkYXRhLAorCQkJICBpZ3RfcGxhbmVfdCAqcHJpbWFy eSwKKwkJCSAgY29sb3JfdCAqYmVmb3JlLAorCQkJICBjb2xvcl90ICphZnRlciwKKwkJCSAgZG91 YmxlICpjdG1fbWF0cml4KQoreworCWNvbnN0IGRvdWJsZSBjdG1faWRlbnRpdHlbXSA9IHsKKwkJ MS4wLCAwLjAsIDAuMCwKKwkJMC4wLCAxLjAsIDAuMCwKKwkJMC4wLCAwLjAsIDEuMAorCX07CisJ Z2FtbWFfbHV0X3QgKmRlZ2FtbWFfbGluZWFyLCAqZ2FtbWFfbGluZWFyOworCWlndF9vdXRwdXRf dCAqb3V0cHV0OworCisJaW50IGk7CisJYm9vbCByZXQgPSB0cnVlOworCXN0cnVjdCBjaGFtZWxp dW1fcG9ydCAqcG9ydDsKKwljaGFyICpjb25uZWN0ZWRfcG9ydHNbNF07CisJYm9vbCB2YWxpZF9v dXRwdXQgPSBmYWxzZTsKKworCWlndF9yZXF1aXJlKGlndF9waXBlX29ial9oYXNfcHJvcChwcmlt YXJ5LT5waXBlLCBJR1RfQ1JUQ19DVE0pKTsKKworCWZvciAoaSA9IDA7IGkgPCBkYXRhLT5wb3J0 X2NvdW50OyBpKyspCisJCWNvbm5lY3RlZF9wb3J0c1tpXSA9CisJCQkoY2hhciAqKSBjaGFtZWxp dW1fcG9ydF9nZXRfbmFtZShkYXRhLT5wb3J0c1tpXSk7CisKKwlkZWdhbW1hX2xpbmVhciA9IGdl bmVyYXRlX3RhYmxlKGRhdGEtPmRlZ2FtbWFfbHV0X3NpemUsIDEuMCk7CisJZ2FtbWFfbGluZWFy ID0gZ2VuZXJhdGVfdGFibGUoZGF0YS0+Z2FtbWFfbHV0X3NpemUsIDEuMCk7CisKKwlmb3JfZWFj aF92YWxpZF9vdXRwdXRfb25fcGlwZSgmZGF0YS0+ZGlzcGxheSwKKwkJCQkgICAgICBwcmltYXJ5 LT5waXBlLT5waXBlLAorCQkJCSAgICAgIG91dHB1dCkgeworCQlkcm1Nb2RlTW9kZUluZm8gKm1v ZGU7CisJCXN0cnVjdCBpZ3RfZmIgZmJfbW9kZXNldCwgZmI7CisJCXN0cnVjdCBjaGFtZWxpdW1f ZnJhbWVfZHVtcCAqZnJhbWVfc29mdHdhcmUsICpmcmFtZV9oYXJkd2FyZTsKKwkJaW50IGZiX2lk LCBmYl9tb2Rlc2V0X2lkOworCisJCWZvciAoaSA9IDA7IGkgPCBkYXRhLT5wb3J0X2NvdW50OyBp KyspCisJCQl2YWxpZF9vdXRwdXQgfD0KKwkJCQkoc3RyY21wKG91dHB1dC0+bmFtZSwgY29ubmVj dGVkX3BvcnRzW2ldKSA9PSAwKTsKKwkJaWYgKCF2YWxpZF9vdXRwdXQpCisJCQljb250aW51ZTsK KwkJZWxzZQorCQkJZm9yIChpID0gMDsgaSA8IGRhdGEtPnBvcnRfY291bnQ7IGkrKykKKwkJCQlp ZiAoc3RyY21wKG91dHB1dC0+bmFtZSwKKwkJCQkJICAgY29ubmVjdGVkX3BvcnRzW2ldKSA9PSAw KQorCQkJCQlwb3J0ID0gZGF0YS0+cG9ydHNbaV07CisKKwkJaWd0X291dHB1dF9zZXRfcGlwZShv dXRwdXQsIHByaW1hcnktPnBpcGUtPnBpcGUpOworCQltb2RlID0gaWd0X291dHB1dF9nZXRfbW9k ZShvdXRwdXQpOworCisJCS8qIENyZWF0ZSBhIGZyYW1lYnVmZmVyIGF0IHRoZSBzaXplIG9mIHRo ZSBvdXRwdXQuICovCisJCWZiX2lkID0gaWd0X2NyZWF0ZV9mYihkYXRhLT5kcm1fZmQsCisJCQkJ ICAgICAgbW9kZS0+aGRpc3BsYXksCisJCQkJICAgICAgbW9kZS0+dmRpc3BsYXksCisJCQkJICAg ICAgRFJNX0ZPUk1BVF9YUkdCODg4OCwKKwkJCQkgICAgICBMT0NBTF9EUk1fRk9STUFUX01PRF9O T05FLAorCQkJCSAgICAgICZmYik7CisJCWlndF9hc3NlcnQoZmJfaWQpOworCisJCWZiX21vZGVz ZXRfaWQgPSBpZ3RfY3JlYXRlX2ZiKGRhdGEtPmRybV9mZCwKKwkJCQkJICAgICAgbW9kZS0+aGRp c3BsYXksCisJCQkJCSAgICAgIG1vZGUtPnZkaXNwbGF5LAorCQkJCQkgICAgICBEUk1fRk9STUFU X1hSR0I4ODg4LAorCQkJCQkgICAgICBMT0NBTF9EUk1fRk9STUFUX01PRF9OT05FLAorCQkJCQkg ICAgICAmZmJfbW9kZXNldCk7CisJCWlndF9hc3NlcnQoZmJfbW9kZXNldF9pZCk7CisJCWlndF9w bGFuZV9zZXRfZmIocHJpbWFyeSwgJmZiX21vZGVzZXQpOworCisJCWlmIChtZW1jbXAoYmVmb3Jl LCBhZnRlciwgc2l6ZW9mKGNvbG9yX3QpKSkgeworCQkJc2V0X2RlZ2FtbWEoZGF0YSwgcHJpbWFy eS0+cGlwZSwgZGVnYW1tYV9saW5lYXIpOworCQkJc2V0X2dhbW1hKGRhdGEsIHByaW1hcnktPnBp cGUsIGdhbW1hX2xpbmVhcik7CisJCX0gZWxzZSB7CisJCQkvKiBEaXNhYmxlIERlZ2FtbWEgYW5k IEdhbW1hIGZvciBjdG0gbWF4IHRlc3QgKi8KKwkJCWRpc2FibGVfZGVnYW1tYShwcmltYXJ5LT5w aXBlKTsKKwkJCWRpc2FibGVfZ2FtbWEocHJpbWFyeS0+cGlwZSk7CisJCX0KKworCQlkaXNhYmxl X2N0bShwcmltYXJ5LT5waXBlKTsKKwkJaWd0X2Rpc3BsYXlfY29tbWl0KCZkYXRhLT5kaXNwbGF5 KTsKKworCQlwYWludF9yZWN0YW5nbGVzKGRhdGEsIG1vZGUsIGFmdGVyLCAmZmIpOworCQlpZ3Rf cGxhbmVfc2V0X2ZiKHByaW1hcnksICZmYik7CisJCXNldF9jdG0ocHJpbWFyeS0+cGlwZSwgY3Rt X2lkZW50aXR5KTsKKwkJaWd0X2Rpc3BsYXlfY29tbWl0KCZkYXRhLT5kaXNwbGF5KTsKKwkJY2hh bWVsaXVtX2NhcHR1cmUoZGF0YS0+Y2hhbWVsaXVtLCBwb3J0LCAwLCAwLCAwLCAwLCAxKTsKKwkJ ZnJhbWVfc29mdHdhcmUgPQorCQkJY2hhbWVsaXVtX3JlYWRfY2FwdHVyZWRfZnJhbWUoZGF0YS0+ Y2hhbWVsaXVtLCAwKTsKKworCQkvKiBXaXRoIENUTSB0cmFuc2Zvcm1hdGlvbi4gKi8KKwkJcGFp bnRfcmVjdGFuZ2xlcyhkYXRhLCBtb2RlLCBiZWZvcmUsICZmYik7CisJCWlndF9wbGFuZV9zZXRf ZmIocHJpbWFyeSwgJmZiKTsKKwkJc2V0X2N0bShwcmltYXJ5LT5waXBlLCBjdG1fbWF0cml4KTsK KwkJaWd0X2Rpc3BsYXlfY29tbWl0KCZkYXRhLT5kaXNwbGF5KTsKKwkJY2hhbWVsaXVtX2NhcHR1 cmUoZGF0YS0+Y2hhbWVsaXVtLCBwb3J0LCAwLCAwLCAwLCAwLCAxKTsKKwkJZnJhbWVfaGFyZHdh cmUgPQorCQkJY2hhbWVsaXVtX3JlYWRfY2FwdHVyZWRfZnJhbWUoZGF0YS0+Y2hhbWVsaXVtLCAw KTsKKworCQkvKiBWZXJpZnkgdGhhdCB0aGUgZnJhbWUgZHVtcCBvZiB0aGUgc29mdHdhcmUgY29t cHV0ZWQgb3V0cHV0IGlzCisJCSAqIGVxdWFsIHRvIHRoZSBmcmFtZSBkdW1wIG9mIHRoZSBDVE0g bWF0cml4IHRyYW5zZm9ybWF0aW9uCisJCSAqIG91dHB1dC4KKwkJICovCisJCXJldCAmPSBjaGFt ZWxpdW1fYXNzZXJ0X2ZyYW1lX2R1bXBfZXEoZGF0YS0+Y2hhbWVsaXVtLAorCQkJCQkJICAgICAg ZnJhbWVfc29mdHdhcmUsCisJCQkJCQkgICAgICBmcmFtZV9oYXJkd2FyZSk7CisKKwkJaWd0X3Bs YW5lX3NldF9mYihwcmltYXJ5LCBOVUxMKTsKKwkJaWd0X291dHB1dF9zZXRfcGlwZShvdXRwdXQs IFBJUEVfTk9ORSk7CisJfQorCisJZnJlZV9sdXQoZGVnYW1tYV9saW5lYXIpOworCWZyZWVfbHV0 KGdhbW1hX2xpbmVhcik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCB0ZXN0X3Bp cGVfbGltaXRlZF9yYW5nZV9jdG0oZGF0YV90ICpkYXRhLAorCQkJCQlpZ3RfcGxhbmVfdCAqcHJp bWFyeSkKK3sKKwlkb3VibGUgbGltaXRlZF9yZXN1bHQgPSAyMzUuMCAvIDI1NS4wOworCWNvbG9y X3QgcmVkX2dyZWVuX2JsdWVfbGltaXRlZFtdID0geworCQl7IGxpbWl0ZWRfcmVzdWx0LCAwLjAs IDAuMCB9LAorCQl7IDAuMCwgbGltaXRlZF9yZXN1bHQsIDAuMCB9LAorCQl7IDAuMCwgMC4wLCBs aW1pdGVkX3Jlc3VsdCB9CisJfTsKKwljb2xvcl90IHJlZF9ncmVlbl9ibHVlX2Z1bGxbXSA9IHsK KwkJeyAwLjUsIDAuMCwgMC4wIH0sCisJCXsgMC4wLCAwLjUsIDAuMCB9LAorCQl7IDAuMCwgMC4w LCAwLjUgfQorCX07CisJZG91YmxlIGN0bVtdID0geyAxLjAsIDAuMCwgMC4wLAorCQkJMC4wLCAx LjAsIDAuMCwKKwkJCTAuMCwgMC4wLCAxLjAgfTsKKwlnYW1tYV9sdXRfdCAqZGVnYW1tYV9saW5l YXIsICpnYW1tYV9saW5lYXI7CisJaWd0X291dHB1dF90ICpvdXRwdXQ7CisJYm9vbCBoYXNfYnJv YWRjYXN0X3JnYl9vdXRwdXQgPSBmYWxzZTsKKworCWludCBpOworCXN0cnVjdCBjaGFtZWxpdW1f cG9ydCAqcG9ydDsKKwljaGFyICpjb25uZWN0ZWRfcG9ydHNbNF07CisJYm9vbCB2YWxpZF9vdXRw dXQgPSBmYWxzZTsKKworCWRlZ2FtbWFfbGluZWFyID0gZ2VuZXJhdGVfdGFibGUoZGF0YS0+ZGVn YW1tYV9sdXRfc2l6ZSwgMS4wKTsKKwlnYW1tYV9saW5lYXIgPSBnZW5lcmF0ZV90YWJsZShkYXRh LT5nYW1tYV9sdXRfc2l6ZSwgMS4wKTsKKworCWZvciAoaSA9IDA7IGkgPCBkYXRhLT5wb3J0X2Nv dW50OyBpKyspCisJCWNvbm5lY3RlZF9wb3J0c1tpXSA9CisJCQkoY2hhciAqKSBjaGFtZWxpdW1f cG9ydF9nZXRfbmFtZShkYXRhLT5wb3J0c1tpXSk7CisKKwlmb3JfZWFjaF92YWxpZF9vdXRwdXRf b25fcGlwZSgmZGF0YS0+ZGlzcGxheSwKKwkJCQkgICAgICBwcmltYXJ5LT5waXBlLT5waXBlLAor CQkJCSAgICAgIG91dHB1dCkgeworCQlkcm1Nb2RlTW9kZUluZm8gKm1vZGU7CisJCXN0cnVjdCBp Z3RfZmIgZmJfbW9kZXNldCwgZmI7CisJCXN0cnVjdCBjaGFtZWxpdW1fZnJhbWVfZHVtcCAqZnJh bWVfZnVsbCwgKmZyYW1lX2xpbWl0ZWQ7CisJCWludCBmYl9pZCwgZmJfbW9kZXNldF9pZDsKKwor CQlmb3IgKGkgPSAwOyBpIDwgZGF0YS0+cG9ydF9jb3VudDsgaSsrKQorCQkJdmFsaWRfb3V0cHV0 IHw9CisJCQkJKHN0cmNtcChvdXRwdXQtPm5hbWUsIGNvbm5lY3RlZF9wb3J0c1tpXSkgPT0gMCk7 CisJCWlmICghdmFsaWRfb3V0cHV0KQorCQkJY29udGludWU7CisJCWVsc2UKKwkJCWZvciAoaSA9 IDA7IGkgPCBkYXRhLT5wb3J0X2NvdW50OyBpKyspCisJCQkJaWYgKHN0cmNtcChvdXRwdXQtPm5h bWUsCisJCQkJICAgIGNvbm5lY3RlZF9wb3J0c1tpXSkgPT0gMCkKKwkJCQkJcG9ydCA9IGRhdGEt PnBvcnRzW2ldOworCisJCWlmICghaWd0X291dHB1dF9oYXNfcHJvcChvdXRwdXQsIElHVF9DT05O RUNUT1JfQlJPQURDQVNUX1JHQikpCisJCQljb250aW51ZTsKKworCQloYXNfYnJvYWRjYXN0X3Jn Yl9vdXRwdXQgPSB0cnVlOworCisJCWlndF9vdXRwdXRfc2V0X3BpcGUob3V0cHV0LCBwcmltYXJ5 LT5waXBlLT5waXBlKTsKKwkJbW9kZSA9IGlndF9vdXRwdXRfZ2V0X21vZGUob3V0cHV0KTsKKwor CQkvKiBDcmVhdGUgYSBmcmFtZWJ1ZmZlciBhdCB0aGUgc2l6ZSBvZiB0aGUgb3V0cHV0LiAqLwor CQlmYl9pZCA9IGlndF9jcmVhdGVfZmIoZGF0YS0+ZHJtX2ZkLAorCQkJCSAgICAgIG1vZGUtPmhk aXNwbGF5LAorCQkJCSAgICAgIG1vZGUtPnZkaXNwbGF5LAorCQkJCSAgICAgIERSTV9GT1JNQVRf WFJHQjg4ODgsCisJCQkJICAgICAgTE9DQUxfRFJNX0ZPUk1BVF9NT0RfTk9ORSwKKwkJCQkgICAg ICAmZmIpOworCQlpZ3RfYXNzZXJ0KGZiX2lkKTsKKworCQlmYl9tb2Rlc2V0X2lkID0gaWd0X2Ny ZWF0ZV9mYihkYXRhLT5kcm1fZmQsCisJCQkJCSAgICAgIG1vZGUtPmhkaXNwbGF5LAorCQkJCQkg ICAgICBtb2RlLT52ZGlzcGxheSwKKwkJCQkJICAgICAgRFJNX0ZPUk1BVF9YUkdCODg4OCwKKwkJ CQkJICAgICAgTE9DQUxfRFJNX0ZPUk1BVF9NT0RfTk9ORSwKKwkJCQkJICAgICAgJmZiX21vZGVz ZXQpOworCQlpZ3RfYXNzZXJ0KGZiX21vZGVzZXRfaWQpOworCQlpZ3RfcGxhbmVfc2V0X2ZiKHBy aW1hcnksICZmYl9tb2Rlc2V0KTsKKworCQlzZXRfZGVnYW1tYShkYXRhLCBwcmltYXJ5LT5waXBl LCBkZWdhbW1hX2xpbmVhcik7CisJCXNldF9nYW1tYShkYXRhLCBwcmltYXJ5LT5waXBlLCBnYW1t YV9saW5lYXIpOworCQlzZXRfY3RtKHByaW1hcnktPnBpcGUsIGN0bSk7CisKKwkJaWd0X291dHB1 dF9zZXRfcHJvcF92YWx1ZShvdXRwdXQsCisJCQkJCSAgSUdUX0NPTk5FQ1RPUl9CUk9BRENBU1Rf UkdCLAorCQkJCQkgIEJST0FEQ0FTVF9SR0JfRlVMTCk7CisJCXBhaW50X3JlY3RhbmdsZXMoZGF0 YSwgbW9kZSwgcmVkX2dyZWVuX2JsdWVfbGltaXRlZCwgJmZiKTsKKwkJaWd0X3BsYW5lX3NldF9m YihwcmltYXJ5LCAmZmIpOworCQlpZ3RfZGlzcGxheV9jb21taXQoJmRhdGEtPmRpc3BsYXkpOwor CisJCS8qIFNldCB0aGUgb3V0cHV0IGludG8gbGltaXRlZCByYW5nZS4gKi8KKwkJaWd0X291dHB1 dF9zZXRfcHJvcF92YWx1ZShvdXRwdXQsCisJCQkJCSAgSUdUX0NPTk5FQ1RPUl9CUk9BRENBU1Rf UkdCLAorCQkJCQkgIEJST0FEQ0FTVF9SR0JfMTZfMjM1KTsKKwkJcGFpbnRfcmVjdGFuZ2xlcyhk YXRhLCBtb2RlLCByZWRfZ3JlZW5fYmx1ZV9mdWxsLCAmZmIpOworCQlpZ3RfcGxhbmVfc2V0X2Zi KHByaW1hcnksICZmYik7CisJCWlndF9kaXNwbGF5X2NvbW1pdCgmZGF0YS0+ZGlzcGxheSk7CisJ CWNoYW1lbGl1bV9jYXB0dXJlKGRhdGEtPmNoYW1lbGl1bSwgcG9ydCwgMCwgMCwgMCwgMCwgMSk7 CisJCWZyYW1lX2Z1bGwgPQorCQkJY2hhbWVsaXVtX3JlYWRfY2FwdHVyZWRfZnJhbWUoZGF0YS0+ Y2hhbWVsaXVtLCAwKTsKKworCisJCS8qIEFuZCByZXNldC4uICovCisJCWlndF9vdXRwdXRfc2V0 X3Byb3BfdmFsdWUob3V0cHV0LAorCQkJCQkgIElHVF9DT05ORUNUT1JfQlJPQURDQVNUX1JHQiwK KwkJCQkJICBCUk9BRENBU1RfUkdCX0ZVTEwpOworCQlpZ3RfcGxhbmVfc2V0X2ZiKHByaW1hcnks IE5VTEwpOworCQlpZ3Rfb3V0cHV0X3NldF9waXBlKG91dHB1dCwgUElQRV9OT05FKTsKKwkJY2hh bWVsaXVtX2NhcHR1cmUoZGF0YS0+Y2hhbWVsaXVtLCBwb3J0LCAwLCAwLCAwLCAwLCAxKTsKKwkJ ZnJhbWVfbGltaXRlZCA9CisJCQljaGFtZWxpdW1fcmVhZF9jYXB0dXJlZF9mcmFtZShkYXRhLT5j aGFtZWxpdW0sIDApOworCisKKwkJLyogVmVyaWZ5IHRoYXQgdGhlIGZyYW1lIGR1bXAgb2YgdGhl IHNvZnR3YXJlIGNvbXB1dGVkIG91dHB1dCBpcworCQkgKiBlcXVhbCB0byB0aGUgZnJhbWUgZHVt cCBvZiB0aGUgQ1RNIG1hdHJpeCB0cmFuc2Zvcm1hdGlvbgorCQkgKiBvdXRwdXQuCisJCSAqLwor CQlpZ3RfYXNzZXJ0KGNoYW1lbGl1bV9hc3NlcnRfZnJhbWVfZHVtcF9lcShkYXRhLT5jaGFtZWxp dW0sCisJCQkJCQkJICBmcmFtZV9mdWxsLAorCQkJCQkJCSAgZnJhbWVfbGltaXRlZCkpOworCX0K KworCWZyZWVfbHV0KGdhbW1hX2xpbmVhcik7CisJZnJlZV9sdXQoZGVnYW1tYV9saW5lYXIpOwor CisJaWd0X3JlcXVpcmUoaGFzX2Jyb2FkY2FzdF9yZ2Jfb3V0cHV0KTsKK30KKworc3RhdGljIHZv aWQKK3J1bl90ZXN0c19mb3JfcGlwZShkYXRhX3QgKmRhdGEsIGVudW0gcGlwZSBwKQoreworCWln dF9waXBlX3QgKnBpcGU7CisJaWd0X3BsYW5lX3QgKnByaW1hcnk7CisJZG91YmxlIGRlbHRhOwor CWludCBpOworCWNvbG9yX3QgcmVkX2dyZWVuX2JsdWVbXSA9IHsKKwkJeyAxLjAsIDAuMCwgMC4w IH0sCisJCXsgMC4wLCAxLjAsIDAuMCB9LAorCQl7IDAuMCwgMC4wLCAxLjAgfQorCX07CisKKwlp Z3RfZml4dHVyZSB7CisKKwkJaWd0X3JlcXVpcmUocCA8IGRhdGEtPmRpc3BsYXkubl9waXBlcyk7 CisKKwkJcGlwZSA9ICZkYXRhLT5kaXNwbGF5LnBpcGVzW3BdOworCQlpZ3RfcmVxdWlyZShwaXBl LT5uX3BsYW5lcyA+PSAwKTsKKworCQlwcmltYXJ5ID0gaWd0X3BpcGVfZ2V0X3BsYW5lX3R5cGUo cGlwZSwgRFJNX1BMQU5FX1RZUEVfUFJJTUFSWSk7CisKKwkJaWYgKGlndF9waXBlX29ial9oYXNf cHJvcCgmZGF0YS0+ZGlzcGxheS5waXBlc1twXSwKKwkJCQkJICBJR1RfQ1JUQ19ERUdBTU1BX0xV VF9TSVpFKSkgeworCQkJZGF0YS0+ZGVnYW1tYV9sdXRfc2l6ZSA9CisJCQkJaWd0X3BpcGVfb2Jq X2dldF9wcm9wKCZkYXRhLT5kaXNwbGF5LnBpcGVzW3BdLAorCQkJCQkJSUdUX0NSVENfREVHQU1N QV9MVVRfU0laRSk7CisJCQlpZ3RfYXNzZXJ0X2x0KDAsIGRhdGEtPmRlZ2FtbWFfbHV0X3NpemUp OworCQl9CisKKwkJaWYgKGlndF9waXBlX29ial9oYXNfcHJvcCgmZGF0YS0+ZGlzcGxheS5waXBl c1twXSwKKwkJCQkJICBJR1RfQ1JUQ19HQU1NQV9MVVRfU0laRSkpIHsKKwkJCWRhdGEtPmdhbW1h X2x1dF9zaXplID0KKwkJCQlpZ3RfcGlwZV9vYmpfZ2V0X3Byb3AoJmRhdGEtPmRpc3BsYXkucGlw ZXNbcF0sCisJCQkJCQkgICAgICBJR1RfQ1JUQ19HQU1NQV9MVVRfU0laRSk7CisJCQlpZ3RfYXNz ZXJ0X2x0KDAsIGRhdGEtPmdhbW1hX2x1dF9zaXplKTsKKwkJfQorCisJCWlndF9kaXNwbGF5X3Jl cXVpcmVfb3V0cHV0X29uX3BpcGUoJmRhdGEtPmRpc3BsYXksIHApOworCX0KKworCWRhdGEtPmNv bG9yX2RlcHRoID0gODsKKwlkZWx0YSA9IDEuMCAvICgxIDw8IGRhdGEtPmNvbG9yX2RlcHRoKTsK KworCWlndF9kZXNjcmliZSgiQ29tcGFyZSBhZnRlciBhcHBseWluZyBjdG0gbWF0cml4ICYgaWRl bnRpdHkgbWF0cml4Iik7CisJaWd0X3N1YnRlc3RfZigicGlwZS0lcy1jdG0tcmVkLXRvLWJsdWUi LCBrbXN0ZXN0X3BpcGVfbmFtZShwKSkgeworCQljb2xvcl90IGJsdWVfZ3JlZW5fYmx1ZVtdID0g eworCQkJeyAwLjAsIDAuMCwgMS4wIH0sCisJCQl7IDAuMCwgMS4wLCAwLjAgfSwKKwkJCXsgMC4w LCAwLjAsIDEuMCB9CisJCX07CisJCWRvdWJsZSBjdG1bXSA9IHsgMC4wLCAwLjAsIDAuMCwKKwkJ CQkwLjAsIDEuMCwgMC4wLAorCQkJCTEuMCwgMC4wLCAxLjAgfTsKKwkJaWd0X2Fzc2VydCh0ZXN0 X3BpcGVfY3RtKGRhdGEsIHByaW1hcnksIHJlZF9ncmVlbl9ibHVlLAorCQkJCQkgYmx1ZV9ncmVl bl9ibHVlLCBjdG0pKTsKKwl9CisKKwlpZ3RfZGVzY3JpYmUoIkNvbXBhcmUgYWZ0ZXIgYXBwbHlp bmcgY3RtIG1hdHJpeCAmIGlkZW50aXR5IG1hdHJpeCIpOworCWlndF9zdWJ0ZXN0X2YoInBpcGUt JXMtY3RtLWdyZWVuLXRvLXJlZCIsIGttc3Rlc3RfcGlwZV9uYW1lKHApKSB7CisJCWNvbG9yX3Qg cmVkX3JlZF9ibHVlW10gPSB7CisJCQl7IDEuMCwgMC4wLCAwLjAgfSwKKwkJCXsgMS4wLCAwLjAs IDAuMCB9LAorCQkJeyAwLjAsIDAuMCwgMS4wIH0KKwkJfTsKKwkJZG91YmxlIGN0bVtdID0geyAx LjAsIDEuMCwgMC4wLAorCQkJCTAuMCwgMC4wLCAwLjAsCisJCQkJMC4wLCAwLjAsIDEuMCB9Owor CQlpZ3RfYXNzZXJ0KHRlc3RfcGlwZV9jdG0oZGF0YSwgcHJpbWFyeSwgcmVkX2dyZWVuX2JsdWUs CisJCQkJCSByZWRfcmVkX2JsdWUsIGN0bSkpOworCX0KKworCWlndF9kZXNjcmliZSgiQ29tcGFy ZSBhZnRlciBhcHBseWluZyBjdG0gbWF0cml4ICYgaWRlbnRpdHkgbWF0cml4Iik7CisJaWd0X3N1 YnRlc3RfZigicGlwZS0lcy1jdG0tYmx1ZS10by1yZWQiLCBrbXN0ZXN0X3BpcGVfbmFtZShwKSkg eworCQljb2xvcl90IHJlZF9ncmVlbl9yZWRbXSA9IHsKKwkJCXsgMS4wLCAwLjAsIDAuMCB9LAor CQkJeyAwLjAsIDEuMCwgMC4wIH0sCisJCQl7IDEuMCwgMC4wLCAwLjAgfQorCQl9OworCQlkb3Vi bGUgY3RtW10gPSB7IDEuMCwgMC4wLCAxLjAsCisJCQkJMC4wLCAxLjAsIDAuMCwKKwkJCQkwLjAs IDAuMCwgMC4wIH07CisJCWlndF9hc3NlcnQodGVzdF9waXBlX2N0bShkYXRhLCBwcmltYXJ5LCBy ZWRfZ3JlZW5fYmx1ZSwKKwkJCQkJIHJlZF9ncmVlbl9yZWQsIGN0bSkpOworCX0KKworCS8qIFdl IHRlc3RzIGEgZmV3IHZhbHVlcyBhcm91bmQgdGhlIGV4cGVjdGVkIHJlc3VsdCBiZWNhdXNlCisJ ICogdGhlIGl0IGRlcGVuZHMgb24gdGhlIGhhcmR3YXJlIHdlJ3JlIGRlYWxpbmcgd2l0aCwgd2Ug Y2FuCisJICogZWl0aGVyIGdldCBjbGFtcGVkIG9yIHJvdW5kZWQgdmFsdWVzIGFuZCB3ZSBhbHNv IG5lZWQgdG8KKwkgKiBhY2NvdW50IGZvciBvZGQgbnVtYmVyIG9mIGl0ZW1zIGluIHRoZSBMVVRz LgorCSAqLworCWlndF9kZXNjcmliZSgiQ29tcGFyZSBhZnRlciBhcHBseWluZyBjdG0gbWF0cml4 ICYgaWRlbnRpdHkgbWF0cml4Iik7CisJaWd0X3N1YnRlc3RfZigicGlwZS0lcy1jdG0tMC0yNSIs IGttc3Rlc3RfcGlwZV9uYW1lKHApKSB7CisJCWNvbG9yX3QgZXhwZWN0ZWRfY29sb3JzW10gPSB7 CisJCQl7IDAuMCwgfSwgeyAwLjAsIH0sIHsgMC4wLCB9CisJCX07CisJCWRvdWJsZSBjdG1bXSA9 IHsgMC4yNSwgMC4wLCAgMC4wLAorCQkJCSAwLjAsICAwLjI1LCAwLjAsCisJCQkJIDAuMCwgIDAu MCwgIDAuMjUgfTsKKwkJYm9vbCBzdWNjZXNzID0gZmFsc2U7CisKKwkJZm9yIChpID0gMDsgaSA8 IDU7IGkrKykgeworCQkJZXhwZWN0ZWRfY29sb3JzWzBdLnIgPQorCQkJCWV4cGVjdGVkX2NvbG9y c1sxXS5nID0KKwkJCQlleHBlY3RlZF9jb2xvcnNbMl0uYiA9CisJCQkJMC4yNSArIGRlbHRhICog KGkgLSAyKTsKKwkJCXN1Y2Nlc3MgfD0gdGVzdF9waXBlX2N0bShkYXRhLCBwcmltYXJ5LAorCQkJ CQkJIHJlZF9ncmVlbl9ibHVlLAorCQkJCQkJIGV4cGVjdGVkX2NvbG9ycywgY3RtKTsKKwkJfQor CQlpZ3RfYXNzZXJ0KHN1Y2Nlc3MpOworCX0KKworCWlndF9kZXNjcmliZSgiQ29tcGFyZSBhZnRl ciBhcHBseWluZyBjdG0gbWF0cml4ICYgaWRlbnRpdHkgbWF0cml4Iik7CisJaWd0X3N1YnRlc3Rf ZigicGlwZS0lcy1jdG0tMC01Iiwga21zdGVzdF9waXBlX25hbWUocCkpIHsKKwkJY29sb3JfdCBl eHBlY3RlZF9jb2xvcnNbXSA9IHsKKwkJCXsgMC4wLCB9LCB7IDAuMCwgfSwgeyAwLjAsIH0KKwkJ fTsKKwkJZG91YmxlIGN0bVtdID0geyAwLjUsIDAuMCwgMC4wLAorCQkJCSAwLjAsIDAuNSwgMC4w LAorCQkJCSAwLjAsIDAuMCwgMC41IH07CisJCWJvb2wgc3VjY2VzcyA9IGZhbHNlOworCisJCWZv ciAoaSA9IDA7IGkgPCA1OyBpKyspIHsKKwkJCWV4cGVjdGVkX2NvbG9yc1swXS5yID0KKwkJCQll eHBlY3RlZF9jb2xvcnNbMV0uZyA9CisJCQkJZXhwZWN0ZWRfY29sb3JzWzJdLmIgPQorCQkJCTAu NSArIGRlbHRhICogKGkgLSAyKTsKKwkJCXN1Y2Nlc3MgfD0gdGVzdF9waXBlX2N0bShkYXRhLCBw cmltYXJ5LAorCQkJCQkJIHJlZF9ncmVlbl9ibHVlLAorCQkJCQkJIGV4cGVjdGVkX2NvbG9ycywg Y3RtKTsKKwkJfQorCQlpZ3RfYXNzZXJ0KHN1Y2Nlc3MpOworCX0KKworCWlndF9kZXNjcmliZSgi Q29tcGFyZSBhZnRlciBhcHBseWluZyBjdG0gbWF0cml4ICYgaWRlbnRpdHkgbWF0cml4Iik7CisJ aWd0X3N1YnRlc3RfZigicGlwZS0lcy1jdG0tMC03NSIsIGttc3Rlc3RfcGlwZV9uYW1lKHApKSB7 CisJCWNvbG9yX3QgZXhwZWN0ZWRfY29sb3JzW10gPSB7CisJCQl7IDAuMCwgfSwgeyAwLjAsIH0s IHsgMC4wLCB9CisJCX07CisJCWRvdWJsZSBjdG1bXSA9IHsgMC43NSwgMC4wLCAgMC4wLAorCQkJ CSAwLjAsICAwLjc1LCAwLjAsCisJCQkJIDAuMCwgIDAuMCwgIDAuNzUgfTsKKwkJYm9vbCBzdWNj ZXNzID0gZmFsc2U7CisKKwkJZm9yIChpID0gMDsgaSA8IDc7IGkrKykgeworCQkJZXhwZWN0ZWRf Y29sb3JzWzBdLnIgPQorCQkJCWV4cGVjdGVkX2NvbG9yc1sxXS5nID0KKwkJCQlleHBlY3RlZF9j b2xvcnNbMl0uYiA9CisJCQkJMC43NSArIGRlbHRhICogKGkgLSAzKTsKKwkJCXN1Y2Nlc3MgfD0g dGVzdF9waXBlX2N0bShkYXRhLCBwcmltYXJ5LAorCQkJCQkJIHJlZF9ncmVlbl9ibHVlLAorCQkJ CQkJIGV4cGVjdGVkX2NvbG9ycywgY3RtKTsKKwkJfQorCQlpZ3RfYXNzZXJ0KHN1Y2Nlc3MpOwor CX0KKworCWlndF9kZXNjcmliZSgiQ29tcGFyZSBhZnRlciBhcHBseWluZyBjdG0gbWF0cml4ICYg aWRlbnRpdHkgbWF0cml4Iik7CisJaWd0X3N1YnRlc3RfZigicGlwZS0lcy1jdG0tbWF4Iiwga21z dGVzdF9waXBlX25hbWUocCkpIHsKKwkJY29sb3JfdCBmdWxsX3JnYltdID0geworCQkJeyAxLjAs IDAuMCwgMC4wIH0sCisJCQl7IDAuMCwgMS4wLCAwLjAgfSwKKwkJCXsgMC4wLCAwLjAsIDEuMCB9 CisJCX07CisJCWRvdWJsZSBjdG1bXSA9IHsgMTAwLjAsICAgMC4wLCAgIDAuMCwKKwkJCQkgMC4w LCAgIDEwMC4wLCAgIDAuMCwKKwkJCQkgMC4wLCAgICAgMC4wLCAxMDAuMCB9OworCisJCS8qIENo ZXJyeVZpZXcgZ2VuZXJhdGVzIHZhbHVlcyBvbiAxMGJpdHMgdGhhdCB3ZQorCQkgKiBwcm9kdWNl IHdpdGggYW4gOCBiaXRzIHBlciBjb2xvciBmcmFtZWJ1ZmZlci4KKwkJICovCisJCWlndF9yZXF1 aXJlKCFJU19DSEVSUllWSUVXKGRhdGEtPmRldmlkKSk7CisKKwkJaWd0X2Fzc2VydCh0ZXN0X3Bp cGVfY3RtKGRhdGEsIHByaW1hcnksIHJlZF9ncmVlbl9ibHVlLAorCQkJCQkgZnVsbF9yZ2IsIGN0 bSkpOworCX0KKworCWlndF9kZXNjcmliZSgiQ29tcGFyZSBhZnRlciBhcHBseWluZyBjdG0gbWF0 cml4ICYgaWRlbnRpdHkgbWF0cml4Iik7CisJaWd0X3N1YnRlc3RfZigicGlwZS0lcy1jdG0tbmVn YXRpdmUiLCBrbXN0ZXN0X3BpcGVfbmFtZShwKSkgeworCQljb2xvcl90IGFsbF9ibGFja1tdID0g eworCQkJeyAwLjAsIDAuMCwgMC4wIH0sCisJCQl7IDAuMCwgMC4wLCAwLjAgfSwKKwkJCXsgMC4w LCAwLjAsIDAuMCB9CisJCX07CisJCWRvdWJsZSBjdG1bXSA9IHsgLTEuMCwgIDAuMCwgIDAuMCwK KwkJCQkgMC4wLCAtMS4wLCAgMC4wLAorCQkJCSAwLjAsICAwLjAsIC0xLjAgfTsKKwkJaWd0X2Fz c2VydCh0ZXN0X3BpcGVfY3RtKGRhdGEsIHByaW1hcnksIHJlZF9ncmVlbl9ibHVlLAorCQkJCQkg YWxsX2JsYWNrLCBjdG0pKTsKKwl9CisKKwlpZ3RfZGVzY3JpYmUoIkNvbXBhcmUgYWZ0ZXIgYXBw bHlpbmcgY3RtIG1hdHJpeCAmIGlkZW50aXR5IG1hdHJpeCIpOworCWlndF9zdWJ0ZXN0X2YoInBp cGUtJXMtY3RtLWxpbWl0ZWQtcmFuZ2UiLCBrbXN0ZXN0X3BpcGVfbmFtZShwKSkKKwkJdGVzdF9w aXBlX2xpbWl0ZWRfcmFuZ2VfY3RtKGRhdGEsIHByaW1hcnkpOworCisJaWd0X2Rlc2NyaWJlKCJD b21wYXJlIG1heGVkIG91dCBnYW1tYSBMVVQgYW5kIHNvbGlkIGNvbG9yIGxpbmVhciBMVVQiKTsK KwlpZ3Rfc3VidGVzdF9mKCJwaXBlLSVzLWRlZ2FtbWEiLCBrbXN0ZXN0X3BpcGVfbmFtZShwKSkK KwkJdGVzdF9waXBlX2RlZ2FtbWEoZGF0YSwgcHJpbWFyeSk7CisKKwlpZ3RfZGVzY3JpYmUoIkNv bXBhcmUgbWF4ZWQgb3V0IGdhbW1hIExVVCBhbmQgc29saWQgY29sb3IgbGluZWFyIExVVCIpOwor CWlndF9zdWJ0ZXN0X2YoInBpcGUtJXMtZ2FtbWEiLCBrbXN0ZXN0X3BpcGVfbmFtZShwKSkKKwkJ dGVzdF9waXBlX2dhbW1hKGRhdGEsIHByaW1hcnkpOworCisJaWd0X2ZpeHR1cmUgeworCQlkaXNh YmxlX2RlZ2FtbWEocHJpbWFyeS0+cGlwZSk7CisJCWRpc2FibGVfZ2FtbWEocHJpbWFyeS0+cGlw ZSk7CisJCWRpc2FibGVfY3RtKHByaW1hcnktPnBpcGUpOworCQlpZ3RfZGlzcGxheV9jb21taXQo JmRhdGEtPmRpc3BsYXkpOworCX0KK30KKworc3RhdGljIGludAorcGlwZV9zZXRfcHJvcGVydHlf YmxvYl9pZChpZ3RfcGlwZV90ICpwaXBlLAorCQkJICBlbnVtIGlndF9hdG9taWNfY3J0Y19wcm9w ZXJ0aWVzIHByb3AsCisJCQkgIHVpbnQzMl90IGJsb2JfaWQpCit7CisJaW50IHJldDsKKworCWln dF9waXBlX29ial9yZXBsYWNlX3Byb3BfYmxvYihwaXBlLCBwcm9wLCBOVUxMLCAwKTsKKworCWln dF9waXBlX29ial9zZXRfcHJvcF92YWx1ZShwaXBlLCBwcm9wLCBibG9iX2lkKTsKKworCXJldCA9 IGlndF9kaXNwbGF5X3RyeV9jb21taXQyKHBpcGUtPmRpc3BsYXksCisJCQkJICAgICAgcGlwZS0+ ZGlzcGxheS0+aXNfYXRvbWljID8KKwkJCQkgICAgICBDT01NSVRfQVRPTUlDIDogQ09NTUlUX0xF R0FDWSk7CisKKwlpZ3RfcGlwZV9vYmpfc2V0X3Byb3BfdmFsdWUocGlwZSwgcHJvcCwgMCk7CisK KwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50CitwaXBlX3NldF9wcm9wZXJ0eV9ibG9iKGln dF9waXBlX3QgKnBpcGUsCisJCSAgICAgICBlbnVtIGlndF9hdG9taWNfY3J0Y19wcm9wZXJ0aWVz IHByb3AsCisJCSAgICAgICB2b2lkICpwdHIsIHNpemVfdCBsZW5ndGgpCit7CisJaWd0X3BpcGVf b2JqX3JlcGxhY2VfcHJvcF9ibG9iKHBpcGUsIHByb3AsIHB0ciwgbGVuZ3RoKTsKKworCXJldHVy biBpZ3RfZGlzcGxheV90cnlfY29tbWl0MihwaXBlLT5kaXNwbGF5LAorCQkJCSAgICAgICBwaXBl LT5kaXNwbGF5LT5pc19hdG9taWMgPworCQkJCSAgICAgICBDT01NSVRfQVRPTUlDIDogQ09NTUlU X0xFR0FDWSk7Cit9CisKK3N0YXRpYyB2b2lkCitpbnZhbGlkX2dhbW1hX2x1dF9zaXplcyhkYXRh X3QgKmRhdGEpCit7CisJaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSA9ICZkYXRhLT5kaXNwbGF5Owor CWlndF9waXBlX3QgKnBpcGUgPSAmZGlzcGxheS0+cGlwZXNbMF07CisJc2l6ZV90IGdhbW1hX2x1 dF9zaXplID0gZGF0YS0+Z2FtbWFfbHV0X3NpemUgKgorCQkJCXNpemVvZihzdHJ1Y3QgZHJtX2Nv bG9yX2x1dCk7CisJc3RydWN0IGRybV9jb2xvcl9sdXQgKmdhbW1hX2x1dDsKKworCWlndF9yZXF1 aXJlKGlndF9waXBlX29ial9oYXNfcHJvcChwaXBlLCBJR1RfQ1JUQ19HQU1NQV9MVVQpKTsKKwor CWdhbW1hX2x1dCA9IG1hbGxvYyhnYW1tYV9sdXRfc2l6ZSAqIDIpOworCisJaWd0X2Rpc3BsYXlf Y29tbWl0MihkaXNwbGF5LAorCQkJICAgIGRpc3BsYXktPmlzX2F0b21pYyA/CisJCQkgICAgQ09N TUlUX0FUT01JQyA6IENPTU1JVF9MRUdBQ1kpOworCisJaWd0X2Fzc2VydF9lcShwaXBlX3NldF9w cm9wZXJ0eV9ibG9iKHBpcGUsCisJCQkJCSAgICAgSUdUX0NSVENfR0FNTUFfTFVULAorCQkJCQkg ICAgIGdhbW1hX2x1dCwgMSksCisJCQkJCSAgICAgLUVJTlZBTCk7CisJaWd0X2Fzc2VydF9lcShw aXBlX3NldF9wcm9wZXJ0eV9ibG9iKHBpcGUsCisJCQkJCSAgICAgSUdUX0NSVENfR0FNTUFfTFVU LAorCQkJCQkgICAgIGdhbW1hX2x1dCwgZ2FtbWFfbHV0X3NpemUgKyAxKSwKKwkJCQkJICAgICAt RUlOVkFMKTsKKwlpZ3RfYXNzZXJ0X2VxKHBpcGVfc2V0X3Byb3BlcnR5X2Jsb2IocGlwZSwKKwkJ CQkJICAgICBJR1RfQ1JUQ19HQU1NQV9MVVQsCisJCQkJCSAgICAgZ2FtbWFfbHV0LAorCQkJCQkg ICAgIGdhbW1hX2x1dF9zaXplIC0gMSksCisJCQkJCSAgICAgLUVJTlZBTCk7CisJaWd0X2Fzc2Vy dF9lcShwaXBlX3NldF9wcm9wZXJ0eV9ibG9iKHBpcGUsCisJCQkJCSAgICAgSUdUX0NSVENfR0FN TUFfTFVULAorCQkJCQkgICAgIGdhbW1hX2x1dCwKKwkJCQkJICAgICBnYW1tYV9sdXRfc2l6ZSAr CisJCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBkcm1fY29sb3JfbHV0KSksCisJCQkJCSAgICAgLUVJ TlZBTCk7CisJaWd0X2Fzc2VydF9lcShwaXBlX3NldF9wcm9wZXJ0eV9ibG9iX2lkKHBpcGUsCisJ CQkJCQlJR1RfQ1JUQ19HQU1NQV9MVVQsCisJCQkJCQlwaXBlLT5jcnRjX2lkKSwKKwkJCQkJCS1F SU5WQUwpOworCWlndF9hc3NlcnRfZXEocGlwZV9zZXRfcHJvcGVydHlfYmxvYl9pZChwaXBlLAor CQkJCQkJSUdUX0NSVENfR0FNTUFfTFVULAorCQkJCQkJNDA5NiAqIDQwOTYpLAorCQkJCQkJLUVJ TlZBTCk7CisKKwlmcmVlKGdhbW1hX2x1dCk7Cit9CisKK3N0YXRpYyB2b2lkCitpbnZhbGlkX2Rl Z2FtbWFfbHV0X3NpemVzKGRhdGFfdCAqZGF0YSkKK3sKKwlpZ3RfZGlzcGxheV90ICpkaXNwbGF5 ID0gJmRhdGEtPmRpc3BsYXk7CisJaWd0X3BpcGVfdCAqcGlwZSA9ICZkaXNwbGF5LT5waXBlc1sw XTsKKwlzaXplX3QgZGVnYW1tYV9sdXRfc2l6ZSA9IGRhdGEtPmRlZ2FtbWFfbHV0X3NpemUgKgor CQkJCSAgc2l6ZW9mKHN0cnVjdCBkcm1fY29sb3JfbHV0KTsKKwlzdHJ1Y3QgZHJtX2NvbG9yX2x1 dCAqZGVnYW1tYV9sdXQ7CisKKwlpZ3RfcmVxdWlyZShpZ3RfcGlwZV9vYmpfaGFzX3Byb3AocGlw ZSwgSUdUX0NSVENfREVHQU1NQV9MVVQpKTsKKworCWRlZ2FtbWFfbHV0ID0gbWFsbG9jKGRlZ2Ft bWFfbHV0X3NpemUgKiAyKTsKKworCWlndF9kaXNwbGF5X2NvbW1pdDIoZGlzcGxheSwKKwkJCSAg ICBkaXNwbGF5LT5pc19hdG9taWMgPworCQkJICAgIENPTU1JVF9BVE9NSUMgOiBDT01NSVRfTEVH QUNZKTsKKworCWlndF9hc3NlcnRfZXEocGlwZV9zZXRfcHJvcGVydHlfYmxvYihwaXBlLCBJR1Rf Q1JUQ19ERUdBTU1BX0xVVCwKKwkJCQkJICAgICBkZWdhbW1hX2x1dCwgMSksIC1FSU5WQUwpOwor CWlndF9hc3NlcnRfZXEocGlwZV9zZXRfcHJvcGVydHlfYmxvYihwaXBlLCBJR1RfQ1JUQ19ERUdB TU1BX0xVVCwKKwkJCQkJICAgICBkZWdhbW1hX2x1dCwgZGVnYW1tYV9sdXRfc2l6ZSArIDEpLAor CQkJCQkgICAgIC1FSU5WQUwpOworCWlndF9hc3NlcnRfZXEocGlwZV9zZXRfcHJvcGVydHlfYmxv YihwaXBlLCBJR1RfQ1JUQ19ERUdBTU1BX0xVVCwKKwkJCQkJICAgICBkZWdhbW1hX2x1dCwKKwkJ CQkJICAgICBkZWdhbW1hX2x1dF9zaXplIC0gMSksCisJCQkJCSAgICAgLUVJTlZBTCk7CisJaWd0 X2Fzc2VydF9lcShwaXBlX3NldF9wcm9wZXJ0eV9ibG9iKHBpcGUsIElHVF9DUlRDX0RFR0FNTUFf TFVULAorCQkJCQkgICAgIGRlZ2FtbWFfbHV0LAorCQkJCQkgICAgIGRlZ2FtbWFfbHV0X3NpemUg KworCQkJCQkgICAgIHNpemVvZihzdHJ1Y3QgZHJtX2NvbG9yX2x1dCkpLAorCQkJCQkgICAgIC1F SU5WQUwpOworCWlndF9hc3NlcnRfZXEocGlwZV9zZXRfcHJvcGVydHlfYmxvYl9pZChwaXBlLCBJ R1RfQ1JUQ19ERUdBTU1BX0xVVCwKKwkJCQkJCXBpcGUtPmNydGNfaWQpLCAtRUlOVkFMKTsKKwlp Z3RfYXNzZXJ0X2VxKHBpcGVfc2V0X3Byb3BlcnR5X2Jsb2JfaWQocGlwZSwgSUdUX0NSVENfREVH QU1NQV9MVVQsCisJCQkJCQk0MDk2ICogNDA5NiksIC1FSU5WQUwpOworCisJZnJlZShkZWdhbW1h X2x1dCk7Cit9CisKK3N0YXRpYyB2b2lkCitpbnZhbGlkX2N0bV9tYXRyaXhfc2l6ZXMoZGF0YV90 ICpkYXRhKQoreworCWlndF9kaXNwbGF5X3QgKmRpc3BsYXkgPSAmZGF0YS0+ZGlzcGxheTsKKwlp Z3RfcGlwZV90ICpwaXBlID0gJmRpc3BsYXktPnBpcGVzWzBdOworCXZvaWQgKnB0cjsKKworCWln dF9yZXF1aXJlKGlndF9waXBlX29ial9oYXNfcHJvcChwaXBlLCBJR1RfQ1JUQ19DVE0pKTsKKwor CXB0ciA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IGRybV9jb2xvcl9jdG0pICogNCk7CisKKwlpZ3Rf YXNzZXJ0X2VxKHBpcGVfc2V0X3Byb3BlcnR5X2Jsb2IocGlwZSwgSUdUX0NSVENfQ1RNLCBwdHIs IDEpLAorCQkJCQkgICAgIC1FSU5WQUwpOworCWlndF9hc3NlcnRfZXEocGlwZV9zZXRfcHJvcGVy dHlfYmxvYihwaXBlLCBJR1RfQ1JUQ19DVE0sIHB0ciwKKwkJCQkJICAgICBzaXplb2Yoc3RydWN0 IGRybV9jb2xvcl9jdG0pICsgMSksCisJCQkJCSAgICAgLUVJTlZBTCk7CisJaWd0X2Fzc2VydF9l cShwaXBlX3NldF9wcm9wZXJ0eV9ibG9iKHBpcGUsIElHVF9DUlRDX0NUTSwgcHRyLAorCQkJCQkg ICAgIHNpemVvZihzdHJ1Y3QgZHJtX2NvbG9yX2N0bSkgLSAxKSwKKwkJCQkJICAgICAtRUlOVkFM KTsKKwlpZ3RfYXNzZXJ0X2VxKHBpcGVfc2V0X3Byb3BlcnR5X2Jsb2IocGlwZSwgSUdUX0NSVENf Q1RNLCBwdHIsCisJCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBkcm1fY29sb3JfY3RtKSAqIDIpLAor CQkJCQkgICAgIC1FSU5WQUwpOworCWlndF9hc3NlcnRfZXEocGlwZV9zZXRfcHJvcGVydHlfYmxv Yl9pZChwaXBlLCBJR1RfQ1JUQ19DVE0sCisJCQkJCQlwaXBlLT5jcnRjX2lkKSwgLUVJTlZBTCk7 CisJaWd0X2Fzc2VydF9lcShwaXBlX3NldF9wcm9wZXJ0eV9ibG9iX2lkKHBpcGUsIElHVF9DUlRD X0NUTSwKKwkJCQkJCTQwOTYgKiA0MDk2KSwgLUVJTlZBTCk7CisKKwlmcmVlKHB0cik7Cit9CisK K2lndF9tYWluCit7CisJZGF0YV90IGRhdGEgPSB7fTsKKwllbnVtIHBpcGUgcGlwZTsKKworCWln dF9maXh0dXJlIHsKKwkJZGF0YS5kcm1fZmQgPSBkcm1fb3Blbl9kcml2ZXJfbWFzdGVyKERSSVZF Ul9BTlkpOworCQlpZiAoaXNfaTkxNV9kZXZpY2UoZGF0YS5kcm1fZmQpKQorCQkJZGF0YS5kZXZp ZCA9IGludGVsX2dldF9kcm1fZGV2aWQoZGF0YS5kcm1fZmQpOworCQlkYXRhLmNoYW1lbGl1bSA9 IGNoYW1lbGl1bV9pbml0KGRhdGEuZHJtX2ZkKTsKKwkJaWd0X3JlcXVpcmUoZGF0YS5jaGFtZWxp dW0pOworCisJCWRhdGEucG9ydHMgPSBjaGFtZWxpdW1fZ2V0X3BvcnRzKGRhdGEuY2hhbWVsaXVt LAorCQkJCQkJICZkYXRhLnBvcnRfY291bnQpOworCisJCWttc3Rlc3Rfc2V0X3Z0X2dyYXBoaWNz X21vZGUoKTsKKwkJaWd0X2Rpc3BsYXlfcmVxdWlyZSgmZGF0YS5kaXNwbGF5LCBkYXRhLmRybV9m ZCk7CisJCWlndF9yZXF1aXJlKGRhdGEuZGlzcGxheS5pc19hdG9taWMpOworCX0KKworCWZvcl9l YWNoX3BpcGVfc3RhdGljKHBpcGUpCisJCWlndF9zdWJ0ZXN0X2dyb3VwCisJCQlydW5fdGVzdHNf Zm9yX3BpcGUoJmRhdGEsIHBpcGUpOworCWlndF9kZXNjcmliZSgiTmVnYXRpdmUgdGVzdCBjYXNl IGdhbW1hIGx1dCBzaXplIik7CisJaWd0X3N1YnRlc3RfZigicGlwZS1pbnZhbGlkLWdhbW1hLWx1 dC1zaXplcyIpCisJCWludmFsaWRfZ2FtbWFfbHV0X3NpemVzKCZkYXRhKTsKKworCWlndF9kZXNj cmliZSgiTmVnYXRpdmUgdGVzdCBjYXNlIGRlZ2FtbWEgbHV0IHNpemUiKTsKKwlpZ3Rfc3VidGVz dF9mKCJwaXBlLWludmFsaWQtZGVnYW1tYS1sdXQtc2l6ZXMiKQorCQlpbnZhbGlkX2RlZ2FtbWFf bHV0X3NpemVzKCZkYXRhKTsKKworCWlndF9kZXNjcmliZSgiTmVnYXRpdmUgdGVzdCBjYXNlIGN0 bSBtYXRyaXggc2l6ZSIpOworCWlndF9zdWJ0ZXN0X2YoInBpcGUtaW52YWxpZC1jdG0tbWF0cml4 LXNpemVzIikKKwkJaW52YWxpZF9jdG1fbWF0cml4X3NpemVzKCZkYXRhKTsKKworCWlndF9maXh0 dXJlIHsKKwkJaWd0X2Rpc3BsYXlfZmluaSgmZGF0YS5kaXNwbGF5KTsKKwl9Cit9CmRpZmYgLS1n aXQgYS90ZXN0cy9tZXNvbi5idWlsZCBiL3Rlc3RzL21lc29uLmJ1aWxkCmluZGV4IDU3MGRlNTQu Ljc0YTU1NDEgMTAwNjQ0Ci0tLSBhL3Rlc3RzL21lc29uLmJ1aWxkCisrKyBiL3Rlc3RzL21lc29u LmJ1aWxkCkBAIC0yNTYsNiArMjU2LDcgQEAgZW5kaWYKIGlmIGNoYW1lbGl1bS5mb3VuZCgpCiAJ dGVzdF9wcm9ncyArPSBbCiAJCSdrbXNfY2hhbWVsaXVtJywKKwkJJ2ttc19jb2xvcl9jaGFtZWxp dW0nLAogCV0KIAl0ZXN0X2RlcHMgKz0gY2hhbWVsaXVtCiBlbmRpZgotLSAKMi43LjQKCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmlndC1kZXYgbWFpbGlu ZyBsaXN0CmlndC1kZXZAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRl c2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaWd0LWRldgo=