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 264A76E7A5 for ; Mon, 13 May 2019 16:53:51 +0000 (UTC) From: Maarten Lankhorst Date: Mon, 13 May 2019 18:53:47 +0200 Message-Id: <20190513165347.29108-1-maarten.lankhorst@linux.intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t] tests/kms_yuv: Add yuv specific tests, v6. 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 aXRjaC1zY2FsZWQgdGVzdC4KQ2hhbmdlcyBzaW5jZSB2MzoKLSBBZGQgYSBzYW5pdHkgdGVzdCB0 byBzYW5pdHkgdGVzdCBZVVYgY29udmVyc2lvbiBwYXRocywgb24gYWxsIHBsYW5lcyBhbmQgcGlw ZXMuCi0gRHluYW1pY2FsbHkgZ2VuZXJhdGUgbGlzdCBvZiBZVVYgdGVzdHMgdGhyb3VnaCBpZ3Rf Zm9ybWF0X2FycmF5X2ZpbGwuCkNoYW5nZXMgc2luY2UgdjQ6Ci0gRGVjcmVhc2Ugc2l6ZSB0byA2 NHg2NCB0byByZWR1Y2UgdGVzdCBleGVjdXRpb24gdGltZSBldmVuIG1vcmUsCiAgc29tZSBZVVYg Y29udmVyc2lvbiByb3V0aW5lcyBhcmUgc2xvdy4KLSBEb24ndCBjbGVhciBkZWdhbW1hL2N0bSwg dGhpcyBpcyBkb25lIGluIGNvcmUgbm93LgpDaGFuZ2VzIHNpbmNlIHY1OgotIEZpeCBtaW5vciBj b21waWxlIGVycm9yLgotIEFkZCBtaXNzaW5nIGlndF9zdWJ0ZXN0X2dyb3VwCgpTaWduZWQtb2Zm LWJ5OiBNYWFydGVuIExhbmtob3JzdCA8bWFhcnRlbi5sYW5raG9yc3RAbGludXguaW50ZWwuY29t PgotLS0KIHRlc3RzL01ha2VmaWxlLnNvdXJjZXMgfCAgIDEgKwogdGVzdHMva21zX3l1di5jICAg ICAgICB8IDkzNyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogdGVz dHMvbWVzb24uYnVpbGQgICAgICB8ICAgMSArCiAzIGZpbGVzIGNoYW5nZWQsIDkzOSBpbnNlcnRp b25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdHMva21zX3l1di5jCgpkaWZmIC0tZ2l0IGEv dGVzdHMvTWFrZWZpbGUuc291cmNlcyBiL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKaW5kZXggN2Y5 MjFmNmM1OTg4Li41NzQ4NjFiMmUzMGYgMTAwNjQ0Ci0tLSBhL3Rlc3RzL01ha2VmaWxlLnNvdXJj ZXMKKysrIGIvdGVzdHMvTWFrZWZpbGUuc291cmNlcwpAQCAtNzUsNiArNzUsNyBAQCBURVNUU19w cm9ncyA9IFwKIAlrbXNfdW5pdmVyc2FsX3BsYW5lIFwKIAlrbXNfdmJsYW5rIFwKIAlrbXNfdnJy IFwKKwlrbXNfeXV2IFwKIAltZXRhX3Rlc3QgXAogCXBlcmYgXAogCXBlcmZfcG11IFwKZGlmZiAt LWdpdCBhL3Rlc3RzL2ttc195dXYuYyBiL3Rlc3RzL2ttc195dXYuYwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjZjZjY5YjA1MDRmOAotLS0gL2Rldi9udWxsCisrKyBi L3Rlc3RzL2ttc195dXYuYwpAQCAtMCwwICsxLDkzNyBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAy MDE5IEludGVsIENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRl ZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2Yg dGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNv ZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9u LCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29w eSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFu ZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0 byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRv IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5v dGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICog YWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgor ICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0Yg QU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlU RUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hB TEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5Z IENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNU SU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VU IE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhF UiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6CisgKiAgICBN YWFydGVuIExhbmtob3JzdCA8bWFhcnRlbi5sYW5raG9yc3RAbGludXguaW50ZWwuY29tPgorICov CisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJpZ3QuaCIKKyNpbmNsdWRlIDxjYWly by5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8 dW5pc3RkLmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKwordHlwZWRlZiBzdHJ1Y3QgeworCWln dF9kaXNwbGF5X3QgZGlzcGxheTsKKworCWlndF9waXBlX2NyY190ICpwaXBlX2NyYzsKKwlzdHJ1 Y3QgaWd0X2ZiIGZiWzZdOworfSBkYXRhX3Q7CisKK3N0YXRpYyB1aW50NjRfdCB4X21vZGlmaWVy ID0gTE9DQUxfRFJNX0ZPUk1BVF9NT0RfTk9ORTsKK3N0YXRpYyB1aW50NjRfdCB5X21vZGlmaWVy ID0gTE9DQUxfRFJNX0ZPUk1BVF9NT0RfTk9ORTsKK3N0YXRpYyB1aW50MzJfdCAqZm9ybWF0cywg Y291bnRfZm9ybWF0czsKKworc3RhdGljIGJvb2wgcGlwZV9zdXBwb3J0c19mb3JtYXQoaWd0X2Rp c3BsYXlfdCAqZGlzcGxheSwgZW51bSBwaXBlIHBpcGUsCisJCQkJIHVpbnQzMl90IGZvcm1hdCwg dWludDY0X3QgdGlsaW5nKQoreworCWlndF9wbGFuZV90ICpwbGFuZTsKKworCWZvcl9lYWNoX3Bs YW5lX29uX3BpcGUoZGlzcGxheSwgcGlwZSwgcGxhbmUpCisJCWlmIChpZ3RfcGxhbmVfaGFzX2Zv cm1hdF9tb2QocGxhbmUsIGZvcm1hdCwgdGlsaW5nKSkKKwkJCXJldHVybiB0cnVlOworCisJcmV0 dXJuIGZhbHNlOworfQorCisKK3N0YXRpYyB2b2lkIHJlbW92ZV9mYnMoZGF0YV90ICpkYXRhKQor eworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZGF0YS0+ZmIpOyBpKysp CisJCWlndF9yZW1vdmVfZmIoZGF0YS0+ZGlzcGxheS5kcm1fZmQsICZkYXRhLT5mYltpXSk7Cit9 CisKK3N0YXRpYyB2b2lkIHByZXBhcmVfY3J0YyhkYXRhX3QgKmRhdGEsIGVudW0gcGlwZSBwaXBl LCBpZ3Rfb3V0cHV0X3QgKm91dHB1dCkKK3sKKwlpZ3RfZGlzcGxheV90ICpkaXNwbGF5ID0gJmRh dGEtPmRpc3BsYXk7CisKKwlyZW1vdmVfZmJzKGRhdGEpOworCWlndF9kaXNwbGF5X3Jlc2V0KGRp c3BsYXkpOworCWlndF9vdXRwdXRfc2V0X3BpcGUob3V0cHV0LCBwaXBlKTsKKwlpZ3RfZGlzcGxh eV9jb21taXQyKGRpc3BsYXksIENPTU1JVF9BVE9NSUMpOworCisJaWd0X3BpcGVfY3JjX2ZyZWUo ZGF0YS0+cGlwZV9jcmMpOworCWRhdGEtPnBpcGVfY3JjID0gaWd0X3BpcGVfY3JjX25ldyhkaXNw bGF5LT5kcm1fZmQsIHBpcGUsCisJCQkJCSAgSU5URUxfUElQRV9DUkNfU09VUkNFX0FVVE8pOwor fQorCitzdGF0aWMgdm9pZCBmdWRnZV9sdXQoZGF0YV90ICpkYXRhLCBlbnVtIHBpcGUgcGlwZSwg dWludDE2X3QgbWFzaykKK3sKKwlpZ3RfcGlwZV90ICpwaXBlX29iaiA9ICZkYXRhLT5kaXNwbGF5 LnBpcGVzW3BpcGVdOworCXVpbnQxNl90ICpsdXQ7CisJaW50IGksIGx1dF9zaXplOworCisJaWYg KCFpZ3RfcGlwZV9vYmpfaGFzX3Byb3AocGlwZV9vYmosIElHVF9DUlRDX0dBTU1BX0xVVF9TSVpF KSkKKwkJcmV0dXJuOworCisJbHV0X3NpemUgPSBpZ3RfcGlwZV9vYmpfZ2V0X3Byb3AocGlwZV9v YmosIElHVF9DUlRDX0dBTU1BX0xVVF9TSVpFKTsKKworCWx1dCA9IG1hbGxvYyhzaXplb2YodWlu dDE2X3QpICogbHV0X3NpemUpOworCWZvciAoaSA9IDA7IGkgPCBsdXRfc2l6ZTsgaSsrKQorCQls dXRbaV0gPSAoaSAqIDB4ZmZmZiAvIChsdXRfc2l6ZSAtIDEpKSAmIG1hc2s7CisKKwlpZ3RfcGlw ZV9vYmpfcmVwbGFjZV9wcm9wX2Jsb2IocGlwZV9vYmosIElHVF9DUlRDX0dBTU1BX0xVVCwgbHV0 LCBsdXRfc2l6ZSAqIHNpemVvZih1aW50MTZfdCkpOworCWZyZWUobHV0KTsKK30KKworc3RhdGlj IHZvaWQgdW5mdWRnZV9sdXQoZGF0YV90ICpkYXRhLCBlbnVtIHBpcGUgcGlwZSkKK3sKKwlpZ3Rf cGlwZV90ICpwaXBlX29iaiA9ICZkYXRhLT5kaXNwbGF5LnBpcGVzW3BpcGVdOworCisJaWYgKGln dF9waXBlX29ial9oYXNfcHJvcChwaXBlX29iaiwgSUdUX0NSVENfR0FNTUFfTFVUKSkKKwkJaWd0 X3BpcGVfb2JqX3JlcGxhY2VfcHJvcF9ibG9iKHBpcGVfb2JqLCBJR1RfQ1JUQ19HQU1NQV9MVVQs IE5VTEwsIDApOworfQorCisvKgorICogVGVzdCB0aGF0IHdlIGluaXRpYWxpemUgYSBZVVYgZmIg YXMgYmxhY2sgY29ycmVjdGx5LAorICogdGhhdCB3aGVuIHdlIHdyaXRlIGEgYmxhY2sgRkIgaXQg d2lsbCBnZXQgdGhlIHNhbWUgQ1JDLCBhbmQgdGhhdAorICogYWxsIGNvbG9ycyB3ZSB0ZXN0IHdp bGwgZ2l2ZSB0aGUgc2FtZSBDUkMgb24gYWxsIGZvcm1hdHMuCisgKi8KK3N0YXRpYyB2b2lkIHl1 dl9zYW5pdHkoZGF0YV90ICpkYXRhLCBlbnVtIHBpcGUgcGlwZSwgaWd0X291dHB1dF90ICpvdXRw dXQpCit7CisJaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSA9ICZkYXRhLT5kaXNwbGF5OworCWlndF9w bGFuZV90ICpwbGFuZTsKKwlpZ3RfY3JjX3QgYmxhY2tfY3JjLCBjb2xvcl9jcmMsIGNyYzsKKwli b29sIGZpcnN0ID0gdHJ1ZTsKKworCXByZXBhcmVfY3J0YyhkYXRhLCBwaXBlLCBvdXRwdXQpOwor CisJZm9yX2VhY2hfcGxhbmVfb25fcGlwZShkaXNwbGF5LCBwaXBlLCBwbGFuZSkgeworCQlmb3Ig KGludCBpID0gMDsgaSA8IGNvdW50X2Zvcm1hdHM7IGkrKykgeworCQkJc3RydWN0IGlndF9mYiAq ZmIgPSAmZGF0YS0+ZmJbMF07CisJCQljYWlyb190ICpjcjsKKworCQkJaWYgKCFpZ3RfZm9ybWF0 X2lzX3l1dihmb3JtYXRzW2ldKSB8fAorCQkJICAgICFpZ3RfcGxhbmVfaGFzX2Zvcm1hdF9tb2Qo cGxhbmUsIGZvcm1hdHNbaV0sIHhfbW9kaWZpZXIpKQorCQkJCWNvbnRpbnVlOworCisJCQlpZ3Rf ZGVidWcoIlRlc3RpbmcgZm9ybWF0ICUuNHMgb24gcGxhbmUgJWlcbiIsCisJCQkJIChjaGFyICop JmZvcm1hdHNbaV0sIHBsYW5lLT5pbmRleCk7CisJCQlpZ3RfY3JlYXRlX2ZiKGRpc3BsYXktPmRy bV9mZCwgNjQsIDY0LCBmb3JtYXRzW2ldLAorCQkJCSAgICAgIHhfbW9kaWZpZXIsIGZiKTsKKwor CQkJaWd0X3BsYW5lX3NldF9mYihwbGFuZSwgZmIpOworCQkJaWd0X2Rpc3BsYXlfY29tbWl0Mihk aXNwbGF5LCBDT01NSVRfQVRPTUlDKTsKKwkJCWlmICghZmlyc3QpIHsKKwkJCQlpZ3RfcGlwZV9j cmNfY29sbGVjdF9jcmMoZGF0YS0+cGlwZV9jcmMsICZjcmMpOworCQkJCWlndF9hc3NlcnRfY3Jj X2VxdWFsKCZibGFja19jcmMsICZjcmMpOworCQkJfSBlbHNlIHsKKwkJCQlpZ3RfcGlwZV9jcmNf Y29sbGVjdF9jcmMoZGF0YS0+cGlwZV9jcmMsICZibGFja19jcmMpOworCQkJfQorCisJCQkvKiBD b21wYXJlIGluaXRpYWwgYmxhY2sgZmIgd2l0aCByZWZlcmVuY2UgcGFpbnRlZCBibGFjayBjb2xv ciAqLworCQkJY3IgPSBpZ3RfZ2V0X2NhaXJvX2N0eChkaXNwbGF5LT5kcm1fZmQsIGZiKTsKKwkJ CWlndF9wYWludF9jb2xvcihjciwgMCwgMCwgZmItPndpZHRoLCBmYi0+aGVpZ2h0LCAwLiwgMC4s IDAuKTsKKwkJCWlndF9wdXRfY2Fpcm9fY3R4KGRpc3BsYXktPmRybV9mZCwgZmIsIGNyKTsKKwkJ CWlndF9kaXJ0eV9mYihkaXNwbGF5LT5kcm1fZmQsIGZiKTsKKwkJCWlndF93YWl0X2Zvcl92Ymxh bmsoZGlzcGxheS0+ZHJtX2ZkLCBwaXBlKTsKKwkJCWlndF9waXBlX2NyY19jb2xsZWN0X2NyYyhk YXRhLT5waXBlX2NyYywgJmNyYyk7CisJCQlpZ3RfYXNzZXJ0X2NyY19lcXVhbCgmYmxhY2tfY3Jj LCAmY3JjKTsKKworCisJCQkvKiBXcml0ZSBhIGNvbG9yIGZiICovCisJCQljciA9IGlndF9nZXRf Y2Fpcm9fY3R4KGRpc3BsYXktPmRybV9mZCwgZmIpOworCQkJaWd0X3BhaW50X2NvbG9yKGNyLCAw LCAwLCBmYi0+d2lkdGgsIGZiLT5oZWlnaHQsIDEuLCAxLiwgMC4pOworCQkJaWd0X3B1dF9jYWly b19jdHgoZGlzcGxheS0+ZHJtX2ZkLCBmYiwgY3IpOworCQkJZnVkZ2VfbHV0KGRhdGEsIHBpcGUs IDB4ZmMwMCk7CisJCQlpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCBmYik7CisJCQlpZ3RfZGlzcGxh eV9jb21taXQyKGRpc3BsYXksIENPTU1JVF9BVE9NSUMpOworCisJCQlpZiAoIWZpcnN0KSB7CisJ CQkJaWd0X3BpcGVfY3JjX2NvbGxlY3RfY3JjKGRhdGEtPnBpcGVfY3JjLCAmY3JjKTsKKwkJCQlp Z3RfYXNzZXJ0X2NyY19lcXVhbCgmY29sb3JfY3JjLCAmY3JjKTsKKwkJCX0gZWxzZSB7CisJCQkJ aWd0X3BpcGVfY3JjX2NvbGxlY3RfY3JjKGRhdGEtPnBpcGVfY3JjLCAmY29sb3JfY3JjKTsKKwkJ CQlmaXJzdCA9IGZhbHNlOworCQkJfQorCisJCQkvKiBDb252ZXJ0IGZyb20gWVVWLCBiYWNrIHRv IFlVViwgdG8gZXhwb3NlIGJ1Z3MgaW4gY29udmVyc2lvbiByb3V0aW5lcyAqLworCQkJY3IgPSBp Z3RfZ2V0X2NhaXJvX2N0eChkaXNwbGF5LT5kcm1fZmQsIGZiKTsKKwkJCWlndF9wdXRfY2Fpcm9f Y3R4KGRpc3BsYXktPmRybV9mZCwgZmIsIGNyKTsKKwkJCWlndF9kaXJ0eV9mYihkaXNwbGF5LT5k cm1fZmQsIGZiKTsKKwkJCWlndF93YWl0X2Zvcl92YmxhbmsoZGlzcGxheS0+ZHJtX2ZkLCBwaXBl KTsKKwkJCWlndF9waXBlX2NyY19jb2xsZWN0X2NyYyhkYXRhLT5waXBlX2NyYywgJmNyYyk7CisJ CQlpZ3RfYXNzZXJ0X2NyY19lcXVhbCgmY29sb3JfY3JjLCAmY3JjKTsKKworCQkJdW5mdWRnZV9s dXQoZGF0YSwgcGlwZSk7CisJCQlpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCBOVUxMKTsKKwkJCWln dF9yZW1vdmVfZmIoZGlzcGxheS0+ZHJtX2ZkLCAmZGF0YS0+ZmJbMF0pOworCQl9CisJfQorfQor CitzdGF0aWMgdm9pZCBzZXRfZmIoaWd0X3BsYW5lX3QgKnBsYW5lLCBzdHJ1Y3QgaWd0X2ZiICpm YiwKKwkJICAgYm9vbCBzY2FsZWQsIGlndF9yb3RhdGlvbl90IHJvdCkKK3sKKwlpZ3RfcGxhbmVf c2V0X2ZiKHBsYW5lLCBmYik7CisKKwlpZiAoc2NhbGVkICYmIGZiKQorCQlpZ3RfZmJfc2V0X3Np emUoZmIsIHBsYW5lLCBmYi0+d2lkdGgsIDE2KTsKKworCWlndF9wbGFuZV9zZXRfcm90YXRpb24o cGxhbmUsIHJvdCk7CisJaWYgKGZiICYmIChyb3QgPT0gSUdUX1JPVEFUSU9OXzkwIHx8IHJvdCA9 PSBJR1RfUk9UQVRJT05fMjcwKSkKKwkJaWd0X3BsYW5lX3NldF9zaXplKHBsYW5lLCBmYi0+aGVp Z2h0LCBmYi0+d2lkdGgpOworfQorCitzdGF0aWMgdm9pZCB5dXZfcmdiX3N3aXRjaChkYXRhX3Qg KmRhdGEsIGVudW0gcGlwZSBwaXBlLAorCQkJICAgaWd0X291dHB1dF90ICpvdXRwdXQsIGJvb2wg c2NhbGVkLCB1bnNpZ25lZCBmb3JtYXQpCit7CisJZHJtTW9kZU1vZGVJbmZvICptb2RlID0gaWd0 X291dHB1dF9nZXRfbW9kZShvdXRwdXQpOworCWlndF9kaXNwbGF5X3QgKmRpc3BsYXkgPSAmZGF0 YS0+ZGlzcGxheTsKKwlpZ3RfcGxhbmVfdCAqcGxhbmU7CisJaW50IGk7CisJaWd0X2NyY190IHJl Zl9jcmNbNF0sIGNyYzsKKwlib29sIHZhbGlkWzRdID0ge307CisKKwlwcmVwYXJlX2NydGMoZGF0 YSwgcGlwZSwgb3V0cHV0KTsKKworCWlndF9jcmVhdGVfcGF0dGVybl9mYihkaXNwbGF5LT5kcm1f ZmQsIG1vZGUtPmhkaXNwbGF5LCBtb2RlLT52ZGlzcGxheSwKKwkJCSAgICAgIGZvcm1hdCwgeF9t b2RpZmllciwgJmRhdGEtPmZiWzBdKTsKKworCWlndF9jcmVhdGVfcGF0dGVybl9mYihkaXNwbGF5 LT5kcm1fZmQsIG1vZGUtPnZkaXNwbGF5LCBtb2RlLT5oZGlzcGxheSwKKwkJCSAgICAgIGZvcm1h dCwgeV9tb2RpZmllciwgJmRhdGEtPmZiWzFdKTsKKworCWlndF9jcmVhdGVfcGF0dGVybl9mYihk aXNwbGF5LT5kcm1fZmQsIG1vZGUtPmhkaXNwbGF5LCBtb2RlLT52ZGlzcGxheSwKKwkJCSAgICAg IERSTV9GT1JNQVRfWFJHQjg4ODgsIHhfbW9kaWZpZXIsICZkYXRhLT5mYlsyXSk7CisKKwlpZ3Rf Y3JlYXRlX3BhdHRlcm5fZmIoZGlzcGxheS0+ZHJtX2ZkLCBtb2RlLT52ZGlzcGxheSwgbW9kZS0+ aGRpc3BsYXksCisJCQkgICAgICBEUk1fRk9STUFUX1hSR0I4ODg4LCB5X21vZGlmaWVyLCAmZGF0 YS0+ZmJbM10pOworCisJZm9yX2VhY2hfcGxhbmVfb25fcGlwZShkaXNwbGF5LCBwaXBlLCBwbGFu ZSkgeworCQljb25zdCBpbnQgc2VxW10gPSB7CisJCQkyLCAwLCAyLCAxLCAzLCAxLCAzCisJCX07 CisKKwkJaWYgKCFpZ3RfcGxhbmVfaGFzX2Zvcm1hdF9tb2QocGxhbmUsIGZvcm1hdCwgZGF0YS0+ ZmJbMF0ubW9kaWZpZXIpKQorCQkJY29udGludWU7CisKKwkJLyogQ29sbGVjdCByZWZlcmVuY2Ug Y3JjIHdpdGggdG9nZ2xlIGluIGJldHdlZW4uICovCisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9T SVpFKHJlZl9jcmMpOyBpKyspIHsKKwkJCWlndF9yb3RhdGlvbl90IHJvdCA9IChpID09IDEgfHwg aSA9PSAzKSA/CisJCQkJSUdUX1JPVEFUSU9OXzkwIDogSUdUX1JPVEFUSU9OXzA7CisKKwkJCXNl dF9mYihwbGFuZSwgJmRhdGEtPmZiW2ldLCBzY2FsZWQsIHJvdCk7CisKKwkJCWlndF9kaXNwbGF5 X2NvbW1pdDIoZGlzcGxheSwgQ09NTUlUX0FUT01JQyk7CisJCQlpZ3RfcGlwZV9jcmNfY29sbGVj dF9jcmMoZGF0YS0+cGlwZV9jcmMsICZyZWZfY3JjW2ldKTsKKwkJCXZhbGlkW2ldID0gdHJ1ZTsK KworCQkJc2V0X2ZiKHBsYW5lLCBOVUxMLCBzY2FsZWQsIHJvdCk7CisJCQlpZ3RfZGlzcGxheV9j b21taXQyKGRpc3BsYXksIENPTU1JVF9BVE9NSUMpOworCQl9CisKKwkJZm9yIChpID0gMDsgaSA8 IEFSUkFZX1NJWkUoc2VxKTsgaSsrKSB7CisJCQlpbnQgaiA9IHNlcVtpXTsKKwkJCWlndF9yb3Rh dGlvbl90IHJvdCA9IChqID09IDEgfHwgaiA9PSAzKSA/CisJCQkJSUdUX1JPVEFUSU9OXzkwIDog SUdUX1JPVEFUSU9OXzA7CisKKwkJCWlmICghdmFsaWRbal0pCisJCQkJY29udGludWU7CisKKwkJ CXNldF9mYihwbGFuZSwgJmRhdGEtPmZiW2pdLCBzY2FsZWQsIHJvdCk7CisJCQlpZ3RfZGlzcGxh eV9jb21taXQyKGRpc3BsYXksIENPTU1JVF9BVE9NSUMpOworCisJCQlpZ3RfcGlwZV9jcmNfY29s bGVjdF9jcmMoZGF0YS0+cGlwZV9jcmMsICZjcmMpOworCQkJaWd0X2Fzc2VydF9jcmNfZXF1YWwo JnJlZl9jcmNbal0sICZjcmMpOworCQl9CisKKwkJLyogV2Ugb25seSBoYXZlIGZldyBzY2FsZXJz LCBkb24ndCB1c2UgMSBmb3IgdW51c2VkIHBsYW5lcyAqLworCQlpZ3RfcGxhbmVfc2V0X2ZiKHBs YW5lLCBOVUxMKTsKKwl9Cit9CisKKyNkZWZpbmUgYXNzZXJ0X2NvbGxlY3RlZF9jcmNfZXF1YWwo cGlwZV9jcmMsIGNyYywgcmVmX2NyYykgXAorCWRvIHsgXAorCQlpZ3RfcGlwZV9jcmNfZ2V0X2N1 cnJlbnQoZGlzcGxheS0+ZHJtX2ZkLCBwaXBlX2NyYywgY3JjKTsJXAorCQlpZ3RfYXNzZXJ0X2Ny Y19lcXVhbChyZWZfY3JjLCBjcmMpOwlcCisJfSB3aGlsZSAoMCkKKworc3RhdGljIHZvaWQgc2V0 X3NyY19jb29yZHMoaWd0X3BsYW5lX3QgKnBsYW5lLCBzdHJ1Y3QgaWd0X2ZiICpmYiwKKwkJCSAg IGlndF9yb3RhdGlvbl90IHJvdCwgaW50IHZpcywgaW50IGhpZGRlbikKK3sKKwlzd2l0Y2ggKHJv dCkgeworCWNhc2UgSUdUX1JPVEFUSU9OXzA6CisJCWlndF9mYl9zZXRfcG9zaXRpb24oZmIsIHBs YW5lLCBmYi0+d2lkdGggLyAyIC0gdmlzLCBmYi0+aGVpZ2h0IC8gMiAtIHZpcyk7CisJCWJyZWFr OworCWNhc2UgSUdUX1JPVEFUSU9OXzkwOgorCQlpZ3RfZmJfc2V0X3Bvc2l0aW9uKGZiLCBwbGFu ZSwgZmItPndpZHRoIC8gMiAtIGhpZGRlbiwgZmItPmhlaWdodCAvIDIgLSB2aXMpOworCQlicmVh azsKKwljYXNlIElHVF9ST1RBVElPTl8xODA6CisJCWlndF9mYl9zZXRfcG9zaXRpb24oZmIsIHBs YW5lLCBmYi0+d2lkdGggLyAyIC0gaGlkZGVuLCBmYi0+aGVpZ2h0IC8gMiAtIGhpZGRlbik7CisJ CWJyZWFrOworCWNhc2UgSUdUX1JPVEFUSU9OXzI3MDoKKwkJaWd0X2ZiX3NldF9wb3NpdGlvbihm YiwgcGxhbmUsIGZiLT53aWR0aCAvIDIgLSB2aXMsIGZiLT5oZWlnaHQgLyAyIC0gaGlkZGVuKTsK KwkJYnJlYWs7CisJZGVmYXVsdDogaWd0X2Fzc2VydCgwKTsKKwl9CisJaWd0X2ZiX3NldF9zaXpl KGZiLCBwbGFuZSwgdmlzICsgaGlkZGVuLCB2aXMgKyBoaWRkZW4pOworfQorCitzdGF0aWMgdm9p ZCB5dXZfdmFsaWRfd2lkdGhfcGxhbmUoZGF0YV90ICpkYXRhLCBkcm1Nb2RlTW9kZUluZm8gKm1v ZGUsCisJCQkJICBpZ3RfcGxhbmVfdCAqcGxhbmUsIGlndF9yb3RhdGlvbl90IHJvdCwKKwkJCQkg IGlndF9jcmNfdCAqcmVmX2NyYykKK3sKKwlpZ3RfZGlzcGxheV90ICpkaXNwbGF5ID0gJmRhdGEt PmRpc3BsYXk7CisJaWd0X2NyY190IGNyYzsKKwlzdHJ1Y3QgaWd0X2ZiICpjbGlwX2ZiID0gJmRh dGEtPmZiWzJdOworCWludCBpLCByZXQ7CisKKwkvKiBKdXN0IGNsaXBwaW5nLi4gKi8KKwlpZ3Rf cGxhbmVfc2V0X2ZiKHBsYW5lLCBjbGlwX2ZiKTsKKwlpZ3RfcGxhbmVfc2V0X3JvdGF0aW9uKHBs YW5lLCByb3QpOworCWlmIChyb3QgJiAoSUdUX1JPVEFUSU9OXzkwIHwgSUdUX1JPVEFUSU9OXzI3 MCkpCisJCWlndF9wbGFuZV9zZXRfc2l6ZShwbGFuZSwgY2xpcF9mYi0+aGVpZ2h0LCBjbGlwX2Zi LT53aWR0aCk7CisJaWd0X3BsYW5lX3NldF9wb3NpdGlvbihwbGFuZSwgbW9kZS0+aGRpc3BsYXkg LSBjbGlwX2ZiLT53aWR0aCAvIDIsIG1vZGUtPnZkaXNwbGF5IC0gY2xpcF9mYi0+aGVpZ2h0IC8g Mik7CisJaWYgKChyb3QgPT0gSUdUX1JPVEFUSU9OXzkwIHx8IHJvdCA9PSBJR1RfUk9UQVRJT05f MjcwKSAmJgorCSAgICBpZ3RfZGlzcGxheV90cnlfY29tbWl0MihkaXNwbGF5LCBDT01NSVRfQVRP TUlDKSA8IDApIHsKKwkJaWd0X2RlYnVnKCJUaGlzIHJvdGF0aW9uIG5vdCBhdmFpbGFibGUgZm9y IHRoaXMgZm9ybWF0LlxuIik7CisJCXJldHVybjsKKwl9CisKKwlpZ3RfZGlzcGxheV9jb21taXQy KGRpc3BsYXksIENPTU1JVF9BVE9NSUMpOworCWFzc2VydF9jb2xsZWN0ZWRfY3JjX2VxdWFsKGRh dGEtPnBpcGVfY3JjLCAmY3JjLCByZWZfY3JjKTsKKworCS8qIENsaXBwaW5nIGFuZCBzY2FsaW5n LiAqLworCWlndF9mYl9zZXRfcG9zaXRpb24oY2xpcF9mYiwgcGxhbmUsIGNsaXBfZmItPndpZHRo IC8gMiAtIDE2LCBjbGlwX2ZiLT5oZWlnaHQgLyAyIC0gMTYpOworCWlndF9mYl9zZXRfc2l6ZShj bGlwX2ZiLCBwbGFuZSwgMzIsIDMyKTsKKwlpZ3RfZGlzcGxheV9jb21taXQyKGRpc3BsYXksIENP TU1JVF9BVE9NSUMpOworCWFzc2VydF9jb2xsZWN0ZWRfY3JjX2VxdWFsKGRhdGEtPnBpcGVfY3Jj LCAmY3JjLCByZWZfY3JjKTsKKworCS8qIFRyeSBudmFsaWQgPCA4IHNyYyB2aXNpYmxlLiAqLwor CXNldF9zcmNfY29vcmRzKHBsYW5lLCBjbGlwX2ZiLCByb3QsIDQsIDQpOworCWlndF9kaXNwbGF5 X3RyeV9jb21taXQyKGRpc3BsYXksIENPTU1JVF9BVE9NSUMpOworCisJLyogVHJ5IGRpZmZlcmVu dCBhbGlnbm1lbnRzIGZvciB4L3kgdG8gc2VlIGlmIGFueSBoaXQgdW5kZXJydW5zICovCisJZm9y IChpID0gMTsgaSA8IDQ7IGkrKykgeworCQlzZXRfc3JjX2Nvb3JkcyhwbGFuZSwgY2xpcF9mYiwg cm90LCAxNiArIDIgKiBpLCAxNiAtIDIgKiBpKTsKKwkJaWd0X2Rpc3BsYXlfY29tbWl0MihkaXNw bGF5LCBDT01NSVRfQVRPTUlDKTsKKwkJYXNzZXJ0X2NvbGxlY3RlZF9jcmNfZXF1YWwoZGF0YS0+ cGlwZV9jcmMsICZjcmMsIHJlZl9jcmMpOworCisJCS8qIEFuZCBhbHNvIHNob3cgbW9yZSBvZiB0 aGUgc2NyZWVuICovCisJCXNldF9zcmNfY29vcmRzKHBsYW5lLCBjbGlwX2ZiLCByb3QsIDE2ICsg aSwgMTYgKyBpKTsKKwkJcmV0ID0gaWd0X2Rpc3BsYXlfdHJ5X2NvbW1pdDIoZGlzcGxheSwgQ09N TUlUX0FUT01JQyk7CisKKwkJaWYgKHJldCA9PSAtRUlOVkFMKSB7CisJCQlpZ3RfYXNzZXJ0KGkg JSAyIHx8IHJvdCA9PSBJR1RfUk9UQVRJT05fMjcwIHx8IHJvdCA9PSAoSUdUX1JPVEFUSU9OXzkw IHwgSUdUX1JFRkxFQ1RfWCkpOworCQkJY29udGludWU7CisJCX0gZWxzZQorCQkJaWd0X2Fzc2Vy dF9lcShyZXQsIDApOworCQlhc3NlcnRfY29sbGVjdGVkX2NyY19lcXVhbChkYXRhLT5waXBlX2Ny YywgJmNyYywgcmVmX2NyYyk7CisJfQorCisJLyoKKwkgKiBBcyBhIGZpbmFsIHRlc3QsIHRyeSB3 aXRoIDE2IHNyYyB2aXNpYmxlLCBhbmQgdmFyaW91cyBpbnZpc2libGUKKwkgKiBjb21wb25lbnRz IHRvIGNoZWNrIGNsaXBwaW5nIGRvZXNuJ3QgZHJvcCB0aGUgdmlzaWJsZSBzcmMgYmVsb3cgMTYu CisJICovCisJZm9yIChpID0gMDsgaSA8IDE2OyBpICs9IDQpIHsKKwkJc2V0X3NyY19jb29yZHMo cGxhbmUsIGNsaXBfZmIsIHJvdCwgMTYsIGkpOworCQlpZiAocm90ICYgKElHVF9ST1RBVElPTl85 MCB8IElHVF9ST1RBVElPTl8yNzApKQorCQkJaWd0X3BsYW5lX3NldF9zaXplKHBsYW5lLCAoY2xp cF9mYi0+aGVpZ2h0IC8gMzIpICogKDE2ICsgaSksCisJCQkJCSAgIChjbGlwX2ZiLT53aWR0aCAv IDMyKSAqICgxNiArIGkpKTsKKwkJZWxzZQorCQkJaWd0X3BsYW5lX3NldF9zaXplKHBsYW5lLCAo Y2xpcF9mYi0+d2lkdGggLyAzMikgKiAoMTYgKyBpKSwKKwkJCQkJICAgKGNsaXBfZmItPmhlaWdo dCAvIDMyKSAqICgxNiArIGkpKTsKKwkJaWd0X2Rpc3BsYXlfY29tbWl0MihkaXNwbGF5LCBDT01N SVRfQVRPTUlDKTsKKwkJYXNzZXJ0X2NvbGxlY3RlZF9jcmNfZXF1YWwoZGF0YS0+cGlwZV9jcmMs ICZjcmMsIHJlZl9jcmMpOworCX0KK30KKworc3RhdGljIHZvaWQgeXV2X3ZhbGlkX3dpZHRoKGRh dGFfdCAqZGF0YSwgZW51bSBwaXBlIHBpcGUsIGlndF9vdXRwdXRfdCAqb3V0cHV0LCB1bnNpZ25l ZCBmb3JtYXQpCit7CisJZHJtTW9kZU1vZGVJbmZvICptb2RlID0gaWd0X291dHB1dF9nZXRfbW9k ZShvdXRwdXQpOworCWlndF9kaXNwbGF5X3QgKmRpc3BsYXkgPSAmZGF0YS0+ZGlzcGxheTsKKwlp Z3RfcGxhbmVfdCAqcGxhbmU7CisJc3RydWN0IGlndF9mYiAqY2xpcF9mYiA9ICZkYXRhLT5mYlsy XTsKKwlzdHJ1Y3QgaWd0X2ZiICpyZWZfZmIgPSAmZGF0YS0+ZmJbM107CisKKwlwcmVwYXJlX2Ny dGMoZGF0YSwgcGlwZSwgb3V0cHV0KTsKKworCWlndF9jcmVhdGVfZmIoZGlzcGxheS0+ZHJtX2Zk LCA2NCwgNjQsIGZvcm1hdCwgeV9tb2RpZmllciwgcmVmX2ZiKTsKKworCWlndF9jcmVhdGVfZmIo ZGlzcGxheS0+ZHJtX2ZkLCAyICogcmVmX2ZiLT53aWR0aCwKKwkJICAgICAgMiAqIHJlZl9mYi0+ aGVpZ2h0LCBmb3JtYXQsIHlfbW9kaWZpZXIsIGNsaXBfZmIpOworCisJaWd0X3BpcGVfY3JjX3N0 YXJ0KGRhdGEtPnBpcGVfY3JjKTsKKworCWZvcl9lYWNoX3BsYW5lX29uX3BpcGUoZGlzcGxheSwg cGlwZSwgcGxhbmUpIHsKKwkJaWd0X2NyY190IHJlZl9jcmNbNF07CisJCWNhaXJvX3QgKmNyOwor CQlzdGF0aWMgY29uc3QgZG91YmxlIGNvbG9yc1s0XVszXSA9IHsKKwkJCXsgMS4sIDAuLCAwLiB9 LAorCQkJeyAwLiwgMS4sIDAuIH0sCisJCQl7IDAuLCAwLiwgMS4gfSwKKwkJCXsgMS4sIDEuLCAx LiB9CisJCX07CisJCWludCBpOworCisJCWlmICghaWd0X3BsYW5lX2hhc19mb3JtYXRfbW9kKHBs YW5lLCBmb3JtYXQsIGRhdGEtPmZiWzBdLm1vZGlmaWVyKSkKKwkJCWNvbnRpbnVlOworCisJCS8q IERyYXcgdGhlIEZCIHRoYXQgd2lsbCBiZSB1c2VkIGZvciBjbGlwcGluZyB0ZXN0cy4gKi8KKwkJ Y3IgPSBpZ3RfZ2V0X2NhaXJvX2N0eChkaXNwbGF5LT5kcm1fZmQsIGNsaXBfZmIpOworCQlpZ3Rf cGFpbnRfY29sb3IoY3IsIDAsIDAsIGNsaXBfZmItPndpZHRoIC8gMiwgY2xpcF9mYi0+aGVpZ2h0 IC8gMiwKKwkJCQljb2xvcnNbMF1bMF0sIGNvbG9yc1swXVsxXSwgY29sb3JzWzBdWzJdKTsKKwor CQlpZ3RfcGFpbnRfY29sb3IoY3IsIGNsaXBfZmItPndpZHRoIC8gMiwgMCwKKwkJCQljbGlwX2Zi LT53aWR0aCAvIDIsIGNsaXBfZmItPmhlaWdodCAvIDIsCisJCQkJY29sb3JzWzFdWzBdLCBjb2xv cnNbMV1bMV0sIGNvbG9yc1sxXVsyXSk7CisKKwkJaWd0X3BhaW50X2NvbG9yKGNyLCBjbGlwX2Zi LT53aWR0aCAvIDIsIGNsaXBfZmItPmhlaWdodCAvIDIsCisJCQkJY2xpcF9mYi0+d2lkdGggLyAy LCBjbGlwX2ZiLT5oZWlnaHQgLyAyLAorCQkJCWNvbG9yc1syXVswXSwgY29sb3JzWzJdWzFdLCBj b2xvcnNbMl1bMl0pOworCisJCWlndF9wYWludF9jb2xvcihjciwgMCwgY2xpcF9mYi0+aGVpZ2h0 IC8gMiwKKwkJCQljbGlwX2ZiLT53aWR0aCAvIDIsIGNsaXBfZmItPmhlaWdodCAvIDIsCisJCQkJ Y29sb3JzWzNdWzBdLCBjb2xvcnNbM11bMV0sIGNvbG9yc1szXVsyXSk7CisKKwkJaWd0X3B1dF9j YWlyb19jdHgoZGlzcGxheS0+ZHJtX2ZkLCBjbGlwX2ZiLCBjcik7CisKKwkJLyogRHJhdyBhbGwg cmVmZXJlbmNlIEZCJ3MgdG8gY29sbGVjdCB0aGUgQ1JDLiAqLworCQlmb3IgKGkgPSAwOyBpIDwg NDsgaSsrKSB7CisJCQljciA9IGlndF9nZXRfY2Fpcm9fY3R4KGRpc3BsYXktPmRybV9mZCwgcmVm X2ZiKTsKKwkJCWlndF9wYWludF9jb2xvcihjciwgMCwgMCwgcmVmX2ZiLT53aWR0aCwgcmVmX2Zi LT5oZWlnaHQsCisJCQkJCWNvbG9yc1tpXVswXSwgY29sb3JzW2ldWzFdLCBjb2xvcnNbaV1bMl0p OworCQkJaWd0X3B1dF9jYWlyb19jdHgoZGlzcGxheS0+ZHJtX2ZkLCAmZGF0YS0+ZmJbM10sIGNy KTsKKworCQkJaWYgKCFpKSB7CisJCQkJaWd0X3BsYW5lX3NldF9mYihwbGFuZSwgcmVmX2ZiKTsK KwkJCQlpZ3RfcGxhbmVfc2V0X3Bvc2l0aW9uKHBsYW5lLCBtb2RlLT5oZGlzcGxheSAtIHJlZl9m Yi0+d2lkdGgsIG1vZGUtPnZkaXNwbGF5IC0gcmVmX2ZiLT5oZWlnaHQpOworCQkJCWlndF9kaXNw bGF5X2NvbW1pdDIoZGlzcGxheSwgQ09NTUlUX0FUT01JQyk7CisJCQl9IGVsc2UgeworCQkJCWln dF9kaXJ0eV9mYihkaXNwbGF5LT5kcm1fZmQsIHJlZl9mYik7CisJCQkJaWd0X3dhaXRfZm9yX3Zi bGFuayhkaXNwbGF5LT5kcm1fZmQsIHBpcGUpOworCQkJfQorCisJCQlpZ3RfcGlwZV9jcmNfZHJh aW4oZGF0YS0+cGlwZV9jcmMpOworCQkJaWd0X3BpcGVfY3JjX2dldF9zaW5nbGUoZGF0YS0+cGlw ZV9jcmMsICZyZWZfY3JjW2ldKTsKKwkJfQorCisJCWlndF9wbGFuZV9zZXRfZmIocGxhbmUsIE5V TEwpOworCQlpZ3RfcGxhbmVfc2V0X3Bvc2l0aW9uKHBsYW5lLCAwLCAwKTsKKworCQl5dXZfdmFs aWRfd2lkdGhfcGxhbmUoZGF0YSwgbW9kZSwgcGxhbmUsIElHVF9ST1RBVElPTl8wLCAmcmVmX2Ny Y1swXSk7CisJCXl1dl92YWxpZF93aWR0aF9wbGFuZShkYXRhLCBtb2RlLCBwbGFuZSwgSUdUX1JP VEFUSU9OXzkwLCAmcmVmX2NyY1sxXSk7CisJCXl1dl92YWxpZF93aWR0aF9wbGFuZShkYXRhLCBt b2RlLCBwbGFuZSwgSUdUX1JPVEFUSU9OXzE4MCwgJnJlZl9jcmNbMl0pOworCQl5dXZfdmFsaWRf d2lkdGhfcGxhbmUoZGF0YSwgbW9kZSwgcGxhbmUsIElHVF9ST1RBVElPTl8yNzAsICZyZWZfY3Jj WzNdKTsKKworCQlpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCBOVUxMKTsKKwl9Cit9CisKK3N0YXRp YyBib29sIHl1dl9jb21taXRfcm90YXRlZChpZ3RfZGlzcGxheV90ICpkaXNwbGF5LCBpZ3Rfcm90 YXRpb25fdCByb3QpCit7CisJaWYgKGlndF9kaXNwbGF5X3RyeV9jb21taXQyKGRpc3BsYXksIENP TU1JVF9BVE9NSUMpIDwgMCkgeworCQlpZ3RfZGVidWcoIlNraXBwaW5nIHJvdGF0ZWQgdGVzdCwg YWxpZ25tZW50IGlzIHdyb25nLlxuIik7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlyZXR1cm4g dHJ1ZTsKK30KKworc3RhdGljIHZvaWQgeXV2X2Nyb3Bfc2NhbGVfYnVnX3BsYW5lKGRhdGFfdCAq ZGF0YSwgZHJtTW9kZU1vZGVJbmZvICptb2RlLAorCQkJCSAgICAgIGlndF9wbGFuZV90ICpwbGFu ZSwgc3RydWN0IGlndF9mYiAqZmIsCisJCQkJICAgICAgaWd0X3JvdGF0aW9uX3Qgcm90LCBpZ3Rf Y3JjX3QgKnJlZl9jcmMpCit7CisJaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSA9ICZkYXRhLT5kaXNw bGF5OworCWlndF9jcmNfdCBjcmM7CisJaW50IG9mc1tdID0geyAwLCAxLCAtMSwgMiwgLTIgfTsK KwlpbnQgaSwgajsKKworCWlndF9wbGFuZV9zZXRfZmIocGxhbmUsIGZiKTsKKwlpZ3RfcGxhbmVf c2V0X3JvdGF0aW9uKHBsYW5lLCByb3QpOworCWlndF9wbGFuZV9zZXRfcG9zaXRpb24ocGxhbmUs IDY0LCA2NCk7CisJaWd0X3BsYW5lX3NldF9zaXplKHBsYW5lLCAyNTYsIDI1Nik7CisKKwlpZ3Rf ZmJfc2V0X3Bvc2l0aW9uKGZiLCBwbGFuZSwgZmItPndpZHRoIC8gNCwgZmItPmhlaWdodCAvIDQp OworCWlndF9mYl9zZXRfc2l6ZShmYiwgcGxhbmUsIGZiLT53aWR0aCAvIDIsIGZiLT5oZWlnaHQg LyAyKTsKKwlpZiAoKHJvdCA9PSBJR1RfUk9UQVRJT05fOTAgfHwgcm90ID09IElHVF9ST1RBVElP Tl8yNzApICYmCisJICAgIGlndF9kaXNwbGF5X3RyeV9jb21taXQyKGRpc3BsYXksIENPTU1JVF9B VE9NSUMpIDwgMCkgeworCQlpZ3RfZGVidWcoIlRoaXMgcm90YXRpb24gbm90IGF2YWlsYWJsZSBm b3IgdGhpcyBmb3JtYXQuXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWlndF9kaXNwbGF5X2NvbW1p dDIoZGlzcGxheSwgQ09NTUlUX0FUT01JQyk7CisJYXNzZXJ0X2NvbGxlY3RlZF9jcmNfZXF1YWwo ZGF0YS0+cGlwZV9jcmMsICZjcmMsIHJlZl9jcmMpOworCisJLyogTWFrZSBzdXJlIGJvdW5kYXJp ZXMgbWF0Y2ggKi8KKwlpZ3RfZmJfc2V0X3Bvc2l0aW9uKGZiLCBwbGFuZSwgZmItPndpZHRoIC8g NCAtIDIsIGZiLT5oZWlnaHQgLyA0IC0gMik7CisJaWd0X2ZiX3NldF9zaXplKGZiLCBwbGFuZSwg ZmItPndpZHRoIC8gMiArIDQsIGZiLT5oZWlnaHQgLyAyICsgNCk7CisJaWd0X2Rpc3BsYXlfY29t bWl0MihkaXNwbGF5LCBDT01NSVRfQVRPTUlDKTsKKwlhc3NlcnRfY29sbGVjdGVkX2NyY19lcXVh bChkYXRhLT5waXBlX2NyYywgJmNyYywgcmVmX2NyYyk7CisKKwlmb3IgKGkgPSAxOyBpIDwgQVJS QVlfU0laRShvZnMpOyBpKyspIHsKKwkJaWd0X2RlYnVnKCJUZXN0aW5nIHdpdGggcm90ICV4IGFu ZCBleHRyYSAlaSBvbiB0aGUgbGVmdCBzaWRlXG4iLCByb3QsIG9mc1tpXSk7CisJCWlndF9mYl9z ZXRfcG9zaXRpb24oZmIsIHBsYW5lLCBmYi0+d2lkdGggLyA0ICsgb2ZzW2ldLCBmYi0+aGVpZ2h0 IC8gNCAtIDIpOworCQlpZ3RfZmJfc2V0X3NpemUoZmIsIHBsYW5lLCBmYi0+d2lkdGggLyAyICsg MiAtIG9mc1tpXSwgZmItPmhlaWdodCAvIDIgKyA0KTsKKwkJaWYgKHl1dl9jb21taXRfcm90YXRl ZChkaXNwbGF5LCByb3QpKQorCQkJYXNzZXJ0X2NvbGxlY3RlZF9jcmNfZXF1YWwoZGF0YS0+cGlw ZV9jcmMsICZjcmMsIHJlZl9jcmMpOworCisJCWlndF9kZWJ1ZygiVGVzdGluZyB3aXRoIHJvdCAl eCBhbmQgZXh0cmEgJWkgb24gdGhlIHRvcCBzaWRlXG4iLCByb3QsIG9mc1tpXSk7CisJCWlndF9m Yl9zZXRfcG9zaXRpb24oZmIsIHBsYW5lLCBmYi0+d2lkdGggLyA0IC0gMiwgZmItPmhlaWdodCAv IDQgKyBvZnNbaV0pOworCQlpZ3RfZmJfc2V0X3NpemUoZmIsIHBsYW5lLCBmYi0+d2lkdGggLyAy ICsgNCwgZmItPmhlaWdodCAvIDIgKyAyIC0gb2ZzW2ldKTsKKwkJaWYgKHl1dl9jb21taXRfcm90 YXRlZChkaXNwbGF5LCByb3QpKQorCQkJYXNzZXJ0X2NvbGxlY3RlZF9jcmNfZXF1YWwoZGF0YS0+ cGlwZV9jcmMsICZjcmMsIHJlZl9jcmMpOworCisJCWlndF9kZWJ1ZygiVGVzdGluZyB3aXRoIHJv dCAleCBhbmQgZXh0cmEgJWkgb24gdGhlIHJpZ2h0IHNpZGVcbiIsIHJvdCwgb2ZzW2ldKTsKKwkJ aWd0X2ZiX3NldF9wb3NpdGlvbihmYiwgcGxhbmUsIGZiLT53aWR0aCAvIDQgLSAyLCBmYi0+aGVp Z2h0IC8gNCk7CisJCWlndF9mYl9zZXRfc2l6ZShmYiwgcGxhbmUsIGZiLT53aWR0aCAvIDIgKyAy ICsgb2ZzW2ldLCBmYi0+aGVpZ2h0IC8gMik7CisJCWlmICh5dXZfY29tbWl0X3JvdGF0ZWQoZGlz cGxheSwgcm90KSkKKwkJCWFzc2VydF9jb2xsZWN0ZWRfY3JjX2VxdWFsKGRhdGEtPnBpcGVfY3Jj LCAmY3JjLCByZWZfY3JjKTsKKworCQlpZ3RfZGVidWcoIlRlc3Rpbmcgd2l0aCByb3QgJXggYW5k IGV4dHJhICVpIG9uIHRoZSBib3R0b20gc2lkZVxuIiwgcm90LCBvZnNbaV0pOworCQlpZ3RfZmJf c2V0X3Bvc2l0aW9uKGZiLCBwbGFuZSwgZmItPndpZHRoIC8gNCAtIDIsIGZiLT5oZWlnaHQgLyA0 IC0gMik7CisJCWlndF9mYl9zZXRfc2l6ZShmYiwgcGxhbmUsIGZiLT53aWR0aCAvIDIgKyA0LCBm Yi0+aGVpZ2h0IC8gMiArIDIgKyBvZnNbaV0pOworCQlpZiAoeXV2X2NvbW1pdF9yb3RhdGVkKGRp c3BsYXksIHJvdCkpCisJCQlhc3NlcnRfY29sbGVjdGVkX2NyY19lcXVhbChkYXRhLT5waXBlX2Ny YywgJmNyYywgcmVmX2NyYyk7CisKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShv ZnMpOyBpKyspCisJCWZvciAoaiA9ICFpOyBqIDwgQVJSQVlfU0laRShvZnMpOyBqKyspIHsKKwkJ CWlndF9kZWJ1ZygiVGVzdGluZyB3aXRoIHJvdCAleCBhbmQgZXh0cmEgKCVpLCAlaSkgYXQgdGhl IGVkZ2VzXG4iLCByb3QsIG9mc1tpXSwgb2ZzW2pdKTsKKworCQkJaWd0X2ZiX3NldF9wb3NpdGlv bihmYiwgcGxhbmUsIGZiLT53aWR0aCAvIDQgKyBvZnNbaV0sIGZiLT5oZWlnaHQgLyA0ICsgb2Zz W2pdKTsKKwkJCWlndF9mYl9zZXRfc2l6ZShmYiwgcGxhbmUsIGZiLT53aWR0aCAvIDIgLSAyICog b2ZzW2ldLCBmYi0+aGVpZ2h0IC8gMiAtIDIgKiBvZnNbal0pOworCisJCQlpZiAoeXV2X2NvbW1p dF9yb3RhdGVkKGRpc3BsYXksIHJvdCkpCisJCQkJYXNzZXJ0X2NvbGxlY3RlZF9jcmNfZXF1YWwo ZGF0YS0+cGlwZV9jcmMsICZjcmMsIHJlZl9jcmMpOworCQl9Cit9CisKK3N0YXRpYyB2b2lkIGRy YXdfY2xpcF9mYihpZ3RfZGlzcGxheV90ICpkaXNwbGF5LCBzdHJ1Y3QgaWd0X2ZiICpjbGlwX2Zi KQoreworCWNhaXJvX3QgKmNyID0gaWd0X2dldF9jYWlyb19jdHgoZGlzcGxheS0+ZHJtX2ZkLCBj bGlwX2ZiKTsKKworCWlndF9wYWludF9jb2xvcihjciwgMCwgMCwgY2xpcF9mYi0+d2lkdGgsIGNs aXBfZmItPmhlaWdodCwgLjAsIC4wLCAuNSk7CisJaWd0X3BhaW50X2NvbG9yKGNyLCBjbGlwX2Zi LT53aWR0aCAvIDQgLSAyLCBjbGlwX2ZiLT5oZWlnaHQgLyA0IC0gMiwKKwkJCWNsaXBfZmItPndp ZHRoIC8gMiArIDQsIGNsaXBfZmItPmhlaWdodCAvIDIgKyA0LCAxLiwgMS4sIDEuKTsKKworCWln dF9wdXRfY2Fpcm9fY3R4KGRpc3BsYXktPmRybV9mZCwgY2xpcF9mYiwgY3IpOworfQorCitzdGF0 aWMgdm9pZCB5dXZfY3JvcF9zY2FsZV9idWcoZGF0YV90ICpkYXRhLCBlbnVtIHBpcGUgcGlwZSwg aWd0X291dHB1dF90ICpvdXRwdXQsIHVuc2lnbmVkIGZvcm1hdCkKK3sKKwlkcm1Nb2RlTW9kZUlu Zm8gKm1vZGUgPSBpZ3Rfb3V0cHV0X2dldF9tb2RlKG91dHB1dCk7CisJaWd0X2Rpc3BsYXlfdCAq ZGlzcGxheSA9ICZkYXRhLT5kaXNwbGF5OworCWlndF9wbGFuZV90ICpwbGFuZSwgKnByaW1hcnkg PSBpZ3RfcGlwZV9nZXRfcGxhbmVfdHlwZSgmZGlzcGxheS0+cGlwZXNbcGlwZV0sIERSTV9QTEFO RV9UWVBFX1BSSU1BUlkpOworCXN0cnVjdCBpZ3RfZmIgKnJlZl9mYiA9ICZkYXRhLT5mYlsyXTsK KwlzdHJ1Y3QgaWd0X2ZiICpjbGlwX2ZiID0gJmRhdGEtPmZiWzNdOworCXN0cnVjdCBpZ3RfZmIg KmNsaXBfZmJfeHRpbGVkID0gJmRhdGEtPmZiWzRdOworCXN0cnVjdCBpZ3RfZmIgKmNsaXBfZmJf eXRpbGVkID0gJmRhdGEtPmZiWzVdOworCisJcHJlcGFyZV9jcnRjKGRhdGEsIHBpcGUsIG91dHB1 dCk7CisKKwlpZ3RfY3JlYXRlX2NvbG9yX2ZiKGRpc3BsYXktPmRybV9mZCwgbW9kZS0+aGRpc3Bs YXksIG1vZGUtPnZkaXNwbGF5LAorCQkJICAgIGZvcm1hdCwgeF9tb2RpZmllciwgLjUsIC41LCAu NSwgJmRhdGEtPmZiWzBdKTsKKworCWlndF9jcmVhdGVfY29sb3JfZmIoZGlzcGxheS0+ZHJtX2Zk LCAyNTYsIDI1NiwgZm9ybWF0LAorCQkJICAgIHhfbW9kaWZpZXIsIDEuLCAxLiwgMS4sIHJlZl9m Yik7CisKKwlpZ3RfY3JlYXRlX2ZiKGRpc3BsYXktPmRybV9mZCwgODAsIDEyOCwgZm9ybWF0LAor CQkgICAgICBMT0NBTF9EUk1fRk9STUFUX01PRF9OT05FLCBjbGlwX2ZiKTsKKworCWlndF9jcmVh dGVfZmIoZGlzcGxheS0+ZHJtX2ZkLCA4MCwgMTI4LCBmb3JtYXQsCisJCSAgICAgIHhfbW9kaWZp ZXIsIGNsaXBfZmJfeHRpbGVkKTsKKwlpZ3RfY3JlYXRlX2ZiKGRpc3BsYXktPmRybV9mZCwgODAs IDEyOCwgZm9ybWF0LAorCQkgICAgICB5X21vZGlmaWVyLCBjbGlwX2ZiX3l0aWxlZCk7CisKKwlk cmF3X2NsaXBfZmIoZGlzcGxheSwgY2xpcF9mYik7CisJZHJhd19jbGlwX2ZiKGRpc3BsYXksIGNs aXBfZmJfeHRpbGVkKTsKKwlkcmF3X2NsaXBfZmIoZGlzcGxheSwgY2xpcF9mYl95dGlsZWQpOwor CisJaWd0X3BsYW5lX3NldF9mYihwcmltYXJ5LCAmZGF0YS0+ZmJbMF0pOworCisJZm9yX2VhY2hf cGxhbmVfb25fcGlwZShkaXNwbGF5LCBwaXBlLCBwbGFuZSkgeworCQlpZ3RfY3JjX3QgcmVmX2Ny YzsKKworCQlpZiAoIWlndF9wbGFuZV9oYXNfZm9ybWF0X21vZChwbGFuZSwgZm9ybWF0LCBkYXRh LT5mYlswXS5tb2RpZmllcikpCisJCQljb250aW51ZTsKKworCQlpZ3RfcGxhbmVfc2V0X2ZiKHBs YW5lLCByZWZfZmIpOworCQlpZ3RfcGxhbmVfc2V0X3Bvc2l0aW9uKHBsYW5lLCA2NCwgNjQpOwor CQlpZ3RfZGlzcGxheV9jb21taXQyKGRpc3BsYXksIENPTU1JVF9BVE9NSUMpOworCisJCWlndF9w aXBlX2NyY19zdGFydChkYXRhLT5waXBlX2NyYyk7CisJCWlndF9waXBlX2NyY19nZXRfc2luZ2xl KGRhdGEtPnBpcGVfY3JjLCAmcmVmX2NyYyk7CisKKwkJeXV2X2Nyb3Bfc2NhbGVfYnVnX3BsYW5l KGRhdGEsIG1vZGUsIHBsYW5lLCBjbGlwX2ZiLCBJR1RfUk9UQVRJT05fMCwgJnJlZl9jcmMpOwor CQl5dXZfY3JvcF9zY2FsZV9idWdfcGxhbmUoZGF0YSwgbW9kZSwgcGxhbmUsIGNsaXBfZmJfeHRp bGVkLCBJR1RfUk9UQVRJT05fMCwgJnJlZl9jcmMpOworCQl5dXZfY3JvcF9zY2FsZV9idWdfcGxh bmUoZGF0YSwgbW9kZSwgcGxhbmUsIGNsaXBfZmJfeXRpbGVkLCBJR1RfUk9UQVRJT05fMCwgJnJl Zl9jcmMpOworCQl5dXZfY3JvcF9zY2FsZV9idWdfcGxhbmUoZGF0YSwgbW9kZSwgcGxhbmUsIGNs aXBfZmJfeXRpbGVkLCBJR1RfUk9UQVRJT05fOTAsICZyZWZfY3JjKTsKKwkJeXV2X2Nyb3Bfc2Nh bGVfYnVnX3BsYW5lKGRhdGEsIG1vZGUsIHBsYW5lLCBjbGlwX2ZiLCBJR1RfUk9UQVRJT05fMTgw LCAmcmVmX2NyYyk7CisJCXl1dl9jcm9wX3NjYWxlX2J1Z19wbGFuZShkYXRhLCBtb2RlLCBwbGFu ZSwgY2xpcF9mYl94dGlsZWQsIElHVF9ST1RBVElPTl8xODAsICZyZWZfY3JjKTsKKwkJeXV2X2Ny b3Bfc2NhbGVfYnVnX3BsYW5lKGRhdGEsIG1vZGUsIHBsYW5lLCBjbGlwX2ZiX3l0aWxlZCwgSUdU X1JPVEFUSU9OXzE4MCwgJnJlZl9jcmMpOworCQl5dXZfY3JvcF9zY2FsZV9idWdfcGxhbmUoZGF0 YSwgbW9kZSwgcGxhbmUsIGNsaXBfZmJfeXRpbGVkLCBJR1RfUk9UQVRJT05fMjcwLCAmcmVmX2Ny Yyk7CisKKwkJaWd0X3BsYW5lX3NldF9mYihwbGFuZSwgcGxhbmUgIT0gcHJpbWFyeSA/IE5VTEwg OiAmZGF0YS0+ZmJbMF0pOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHl1dl9jaHJv bWFfc3VicGl4ZWxfY2xpcF9wbGFuZV93aXRoX2N1cnNvcihkYXRhX3QgKmRhdGEsCisJCQkJCQkJ aWd0X3BsYW5lX3QgKnBsYW5lLAorCQkJCQkJCXN0cnVjdCBpZ3RfZmIgKmNsaXBfZmIsCisJCQkJ CQkJaWd0X3BsYW5lX3QgKmN1cnNvciwKKwkJCQkJCQlzdHJ1Y3QgaWd0X2ZiICpjdXJzb3JfZmIs CisJCQkJCQkJaWd0X2NyY190ICpyZWZfY3JjLAorCQkJCQkJCWludCBjdXJzb3JfeCwgaW50IGN1 cnNvcl95KQoreworCWlndF9kaXNwbGF5X3QgKmRpc3BsYXkgPSAmZGF0YS0+ZGlzcGxheTsKKwor CWlndF9wbGFuZV9zZXRfZmIocGxhbmUsIGNsaXBfZmIpOworCWlndF9wbGFuZV9zZXRfcG9zaXRp b24ocGxhbmUsIDY0LCA2NCk7CisJaWd0X3BsYW5lX3NldF9yb3RhdGlvbihwbGFuZSwgSUdUX1JP VEFUSU9OXzApOworCisJaWd0X3BsYW5lX3NldF9mYihjdXJzb3IsIGN1cnNvcl9mYik7CisJaWd0 X3BsYW5lX3NldF9wb3NpdGlvbihjdXJzb3IsIGN1cnNvcl94LCBjdXJzb3JfeSk7CisJaWd0X2Rp c3BsYXlfY29tbWl0MihkaXNwbGF5LCBDT01NSVRfQVRPTUlDKTsKKworCWlndF9waXBlX2NyY19k cmFpbihkYXRhLT5waXBlX2NyYyk7CisJaWd0X3BpcGVfY3JjX2dldF9zaW5nbGUoZGF0YS0+cGlw ZV9jcmMsIHJlZl9jcmMpOworCisJaWd0X3BsYW5lX3NldF9mYihjdXJzb3IsIE5VTEwpOworfQor CitzdGF0aWMgYm9vbCB5dXZfY2hyb21hX3N1YnBpeGVsX2NsaXBfcGxhbmVfcmlnaHQoZGF0YV90 ICpkYXRhLAorCQkJCQkJIGlndF9yb3RhdGlvbl90IHJvdGF0aW9uLAorCQkJCQkJIGlndF9wbGFu ZV90ICpwbGFuZSwKKwkJCQkJCSBzdHJ1Y3QgaWd0X2ZiICpjbGlwX2ZiLAorCQkJCQkJIGlndF9j cmNfdCAqcmVmX2NyYykKK3sKKwlpZ3RfZGlzcGxheV90ICpkaXNwbGF5ID0gJmRhdGEtPmRpc3Bs YXk7CisJaWd0X2NyY190IGNyYyA9IHt9OworCisJaWd0X3BsYW5lX3NldF9mYihwbGFuZSwgY2xp cF9mYik7CisJaWd0X3BsYW5lX3NldF9wb3NpdGlvbihwbGFuZSwgNjQsIDY0KTsKKwlpZ3RfcGxh bmVfc2V0X3JvdGF0aW9uKHBsYW5lLCByb3RhdGlvbik7CisJaWd0X3BsYW5lX3NldF9zaXplKHBs YW5lLCBjbGlwX2ZiLT53aWR0aCAtIDEsIGNsaXBfZmItPmhlaWdodCk7CisKKwlzd2l0Y2ggKHJv dGF0aW9uKSB7CisJY2FzZSBJR1RfUk9UQVRJT05fMTgwOgorCQlpZ3RfZmJfc2V0X3Bvc2l0aW9u KGNsaXBfZmIsIHBsYW5lLCAxLCAwKTsKKwljYXNlIElHVF9ST1RBVElPTl8wOgorCQlpZ3RfZmJf c2V0X3NpemUoY2xpcF9mYiwgcGxhbmUsIGNsaXBfZmItPndpZHRoIC0gMSwgY2xpcF9mYi0+aGVp Z2h0KTsKKwkJYnJlYWs7CisKKwljYXNlIElHVF9ST1RBVElPTl8yNzA6CisJCWlndF9mYl9zZXRf cG9zaXRpb24oY2xpcF9mYiwgcGxhbmUsIDAsIDEpOworCWNhc2UgSUdUX1JPVEFUSU9OXzkwOgor CQlpZ3RfZmJfc2V0X3NpemUoY2xpcF9mYiwgcGxhbmUsIGNsaXBfZmItPndpZHRoLCBjbGlwX2Zi LT5oZWlnaHQgLSAxKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJaWd0X2Fzc2VydF9mKDAsICJV bmhhbmRsZWQgcm90YXRpb24gJXhcbiIsIHJvdGF0aW9uKTsKKwl9CisKKwlpZiAoaWd0X2Rpc3Bs YXlfdHJ5X2NvbW1pdDIoZGlzcGxheSwgQ09NTUlUX0FUT01JQykgPCAwKQorCQlyZXR1cm4gZmFs c2U7CisKKwlhc3NlcnRfY29sbGVjdGVkX2NyY19lcXVhbChkYXRhLT5waXBlX2NyYywgJmNyYywg cmVmX2NyYyk7CisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIHl1dl9jaHJvbWFfc3Vi cGl4ZWxfY2xpcF9wbGFuZV9ib3R0b20oZGF0YV90ICpkYXRhLAorCQkJCQkJICBpZ3Rfcm90YXRp b25fdCByb3RhdGlvbiwKKwkJCQkJCSAgaWd0X3BsYW5lX3QgKnBsYW5lLAorCQkJCQkJICBzdHJ1 Y3QgaWd0X2ZiICpjbGlwX2ZiLAorCQkJCQkJICBpZ3RfY3JjX3QgKnJlZl9jcmMpCit7CisJaWd0 X2Rpc3BsYXlfdCAqZGlzcGxheSA9ICZkYXRhLT5kaXNwbGF5OworCWlndF9jcmNfdCBjcmMgPSB7 fTsKKworCWlndF9wbGFuZV9zZXRfZmIocGxhbmUsIGNsaXBfZmIpOworCWlndF9wbGFuZV9zZXRf cG9zaXRpb24ocGxhbmUsIDY0LCA2NCk7CisJaWd0X3BsYW5lX3NldF9yb3RhdGlvbihwbGFuZSwg cm90YXRpb24pOworCWlndF9wbGFuZV9zZXRfc2l6ZShwbGFuZSwgY2xpcF9mYi0+d2lkdGgsIGNs aXBfZmItPmhlaWdodCAtIDEpOworCisJc3dpdGNoIChyb3RhdGlvbikgeworCWNhc2UgSUdUX1JP VEFUSU9OXzE4MDoKKwkJaWd0X2ZiX3NldF9wb3NpdGlvbihjbGlwX2ZiLCBwbGFuZSwgMCwgMSk7 CisJY2FzZSBJR1RfUk9UQVRJT05fMDoKKwkJaWd0X2ZiX3NldF9zaXplKGNsaXBfZmIsIHBsYW5l LCBjbGlwX2ZiLT53aWR0aCwgY2xpcF9mYi0+aGVpZ2h0IC0gMSk7CisJCWJyZWFrOworCisJY2Fz ZSBJR1RfUk9UQVRJT05fOTA6CisJCWlndF9mYl9zZXRfcG9zaXRpb24oY2xpcF9mYiwgcGxhbmUs IDEsIDApOworCWNhc2UgSUdUX1JPVEFUSU9OXzI3MDoKKwkJaWd0X2ZiX3NldF9zaXplKGNsaXBf ZmIsIHBsYW5lLCBjbGlwX2ZiLT53aWR0aCAtIDEsIGNsaXBfZmItPmhlaWdodCk7CisJCWJyZWFr OworCWRlZmF1bHQ6CisJCWlndF9hc3NlcnRfZigwLCAiVW5oYW5kbGVkIHJvdGF0aW9uICV4XG4i LCByb3RhdGlvbik7CisJfQorCisJaWYgKGlndF9kaXNwbGF5X3RyeV9jb21taXQyKGRpc3BsYXks IENPTU1JVF9BVE9NSUMpIDwgMCkKKwkJcmV0dXJuIGZhbHNlOworCisJYXNzZXJ0X2NvbGxlY3Rl ZF9jcmNfZXF1YWwoZGF0YS0+cGlwZV9jcmMsICZjcmMsIHJlZl9jcmMpOworCXJldHVybiB0cnVl OworfQorCitzdGF0aWMgYm9vbCB5dXZfY2hyb21hX3N1YnBpeGVsX2NsaXBfcGxhbmVfbGVmdChk YXRhX3QgKmRhdGEsCisJCQkJCQlpZ3Rfcm90YXRpb25fdCByb3RhdGlvbiwKKwkJCQkJCWlndF9w bGFuZV90ICpwbGFuZSwKKwkJCQkJCXN0cnVjdCBpZ3RfZmIgKmNsaXBfZmIsCisJCQkJCQlpZ3Rf Y3JjX3QgKnJlZl9jcmMpCit7CisJaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSA9ICZkYXRhLT5kaXNw bGF5OworCWlndF9jcmNfdCBjcmMgPSB7fTsKKworCWlndF9wbGFuZV9zZXRfZmIocGxhbmUsIGNs aXBfZmIpOworCWlndF9wbGFuZV9zZXRfcG9zaXRpb24ocGxhbmUsIDY1LCA2NCk7CisJaWd0X3Bs YW5lX3NldF9yb3RhdGlvbihwbGFuZSwgcm90YXRpb24pOworCWlndF9wbGFuZV9zZXRfc2l6ZShw bGFuZSwgY2xpcF9mYi0+d2lkdGggLSAxLCBjbGlwX2ZiLT5oZWlnaHQpOworCisJc3dpdGNoIChy b3RhdGlvbikgeworCWNhc2UgSUdUX1JPVEFUSU9OXzA6CisJCWlndF9mYl9zZXRfcG9zaXRpb24o Y2xpcF9mYiwgcGxhbmUsIDEsIDApOworCWNhc2UgSUdUX1JPVEFUSU9OXzE4MDoKKwkJaWd0X2Zi X3NldF9zaXplKGNsaXBfZmIsIHBsYW5lLCBjbGlwX2ZiLT53aWR0aCAtIDEsIGNsaXBfZmItPmhl aWdodCk7CisJCWJyZWFrOworCisJY2FzZSBJR1RfUk9UQVRJT05fOTA6CisJCWlndF9mYl9zZXRf cG9zaXRpb24oY2xpcF9mYiwgcGxhbmUsIDAsIDEpOworCWNhc2UgSUdUX1JPVEFUSU9OXzI3MDoK KwkJaWd0X2ZiX3NldF9zaXplKGNsaXBfZmIsIHBsYW5lLCBjbGlwX2ZiLT53aWR0aCwgY2xpcF9m Yi0+aGVpZ2h0IC0gMSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWlndF9hc3NlcnRfZigwLCAi VW5oYW5kbGVkIHJvdGF0aW9uICV4XG4iLCByb3RhdGlvbik7CisJfQorCisJaWYgKGlndF9kaXNw bGF5X3RyeV9jb21taXQyKGRpc3BsYXksIENPTU1JVF9BVE9NSUMpIDwgMCkKKwkJcmV0dXJuIGZh bHNlOworCisJYXNzZXJ0X2NvbGxlY3RlZF9jcmNfZXF1YWwoZGF0YS0+cGlwZV9jcmMsICZjcmMs IHJlZl9jcmMpOworCXJldHVybiB0cnVlOworfQorCisKK3N0YXRpYyBib29sIHl1dl9jaHJvbWFf c3VicGl4ZWxfY2xpcF9wbGFuZV90b3AoZGF0YV90ICpkYXRhLAorCQkJCQkgICAgICBpZ3Rfcm90 YXRpb25fdCByb3RhdGlvbiwKKwkJCQkJICAgICAgaWd0X3BsYW5lX3QgKnBsYW5lLAorCQkJCQkg ICAgICBzdHJ1Y3QgaWd0X2ZiICpjbGlwX2ZiLAorCQkJCQkgICAgICBpZ3RfY3JjX3QgKnJlZl9j cmMpCit7CisJaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSA9ICZkYXRhLT5kaXNwbGF5OworCWlndF9j cmNfdCBjcmMgPSB7fTsKKworCWlndF9wbGFuZV9zZXRfZmIocGxhbmUsIGNsaXBfZmIpOworCWln dF9wbGFuZV9zZXRfcG9zaXRpb24ocGxhbmUsIDY0LCA2NSk7CisJaWd0X3BsYW5lX3NldF9yb3Rh dGlvbihwbGFuZSwgcm90YXRpb24pOworCWlndF9wbGFuZV9zZXRfc2l6ZShwbGFuZSwgY2xpcF9m Yi0+d2lkdGgsIGNsaXBfZmItPmhlaWdodCAtIDEpOworCisJc3dpdGNoIChyb3RhdGlvbikgewor CWNhc2UgSUdUX1JPVEFUSU9OXzA6CisJCWlndF9mYl9zZXRfcG9zaXRpb24oY2xpcF9mYiwgcGxh bmUsIDAsIDEpOworCWNhc2UgSUdUX1JPVEFUSU9OXzE4MDoKKwkJaWd0X2ZiX3NldF9zaXplKGNs aXBfZmIsIHBsYW5lLCBjbGlwX2ZiLT53aWR0aCwgY2xpcF9mYi0+aGVpZ2h0IC0gMSk7CisJCWJy ZWFrOworCisJY2FzZSBJR1RfUk9UQVRJT05fMjcwOgorCQlpZ3RfZmJfc2V0X3Bvc2l0aW9uKGNs aXBfZmIsIHBsYW5lLCAxLCAwKTsKKwljYXNlIElHVF9ST1RBVElPTl85MDoKKwkJaWd0X2ZiX3Nl dF9zaXplKGNsaXBfZmIsIHBsYW5lLCBjbGlwX2ZiLT53aWR0aCAtIDEsIGNsaXBfZmItPmhlaWdo dCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWlndF9hc3NlcnRfZigwLCAiVW5oYW5kbGVkIHJv dGF0aW9uICV4XG4iLCByb3RhdGlvbik7CisJfQorCisJaWYgKGlndF9kaXNwbGF5X3RyeV9jb21t aXQyKGRpc3BsYXksIENPTU1JVF9BVE9NSUMpIDwgMCkKKwkJcmV0dXJuIGZhbHNlOworCisJYXNz ZXJ0X2NvbGxlY3RlZF9jcmNfZXF1YWwoZGF0YS0+cGlwZV9jcmMsICZjcmMsIHJlZl9jcmMpOwor CXJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZCB5dXZfY2hyb21hX3N1YnBpeGVsX2NsaXAo ZGF0YV90ICpkYXRhLCBlbnVtIHBpcGUgcGlwZSwgaWd0X291dHB1dF90ICpvdXRwdXQsIHVuc2ln bmVkIGZvcm1hdCkKK3sKKwlkcm1Nb2RlTW9kZUluZm8gKm1vZGUgPSBpZ3Rfb3V0cHV0X2dldF9t b2RlKG91dHB1dCk7CisJaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSA9ICZkYXRhLT5kaXNwbGF5Owor CWlndF9waXBlX3QgKnBpcGVfb2JqID0gJmRpc3BsYXktPnBpcGVzW3BpcGVdOworCXN0cnVjdCBp Z3RfZmIgKmJnX2ZiID0gJmRhdGEtPmZiWzBdOworCXN0cnVjdCBpZ3RfZmIgKmJnX2N1cnNvcl9m YiA9ICZkYXRhLT5mYlsxXTsKKwlzdHJ1Y3QgaWd0X2ZiICpibGFja19jdXJzb3JfZmIgPSAmZGF0 YS0+ZmJbMl07CisJc3RydWN0IGlndF9mYiAqY2xpcF9mYiA9ICZkYXRhLT5mYlszXTsKKwlpZ3Rf cGxhbmVfdCAqcHJpbWFyeSA9IGlndF9waXBlX2dldF9wbGFuZV90eXBlKHBpcGVfb2JqLCBEUk1f UExBTkVfVFlQRV9QUklNQVJZKTsKKwlpZ3RfcGxhbmVfdCAqY3Vyc29yID0gaWd0X3BpcGVfZ2V0 X3BsYW5lX3R5cGUocGlwZV9vYmosIERSTV9QTEFORV9UWVBFX0NVUlNPUik7CisJaWd0X3BsYW5l X3QgKnBsYW5lOworCWNhaXJvX3QgKmNyOworCWJvb2wgcmV0ID0gZmFsc2U7CisKKwlwcmVwYXJl X2NydGMoZGF0YSwgcGlwZSwgb3V0cHV0KTsKKworCWlndF9jcmVhdGVfY29sb3JfZmIoZGlzcGxh eS0+ZHJtX2ZkLCBtb2RlLT5oZGlzcGxheSwgbW9kZS0+dmRpc3BsYXksCisJCQkgICAgRFJNX0ZP Uk1BVF9YUkdCODg4OCwgeF9tb2RpZmllciwKKwkJCSAgICAuMCwgLjAsIDEuLCBiZ19mYik7CisK KwlpZ3RfY3JlYXRlX2NvbG9yX2ZiKGRpc3BsYXktPmRybV9mZCwgMjU2LCAyNTYsCisJCSAgICAg ICAgICAgIERSTV9GT1JNQVRfQVJHQjg4ODgsIExPQ0FMX0RSTV9GT1JNQVRfTU9EX05PTkUsCisJ CQkgICAgLjAsIC4wLCAxLiwgYmdfY3Vyc29yX2ZiKTsKKworCWlndF9jcmVhdGVfY29sb3JfZmIo ZGlzcGxheS0+ZHJtX2ZkLCAyNTYsIDI1NiwKKwkJICAgICAgICAgICAgRFJNX0ZPUk1BVF9BUkdC ODg4OCwgTE9DQUxfRFJNX0ZPUk1BVF9NT0RfTk9ORSwKKwkJCSAgICAuMCwgLjAsIC4wLCBibGFj a19jdXJzb3JfZmIpOworCisJaWd0X2NyZWF0ZV9mYihkaXNwbGF5LT5kcm1fZmQsIDI1NiwgMjU2 LAorCQkgICAgICBmb3JtYXQsIHlfbW9kaWZpZXIsIGNsaXBfZmIpOworCisJLyogRHJhdyB0aGUg RkIgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIGNsaXBwaW5nIHRoZSBjaHJvbWEgc3VicGl4ZWwgdGVz dC4gKi8KKwljciA9IGlndF9nZXRfY2Fpcm9fY3R4KGRpc3BsYXktPmRybV9mZCwgY2xpcF9mYik7 CisKKwlpZ3RfcGFpbnRfY29sb3IoY3IsIDAsIDAsIGNsaXBfZmItPndpZHRoLCBjbGlwX2ZiLT5o ZWlnaHQsIDEuLCAwLiwgMC4pOworCWlndF9wYWludF9jb2xvcihjciwgMiwgMiwgY2xpcF9mYi0+ d2lkdGggLSA0LCBjbGlwX2ZiLT5oZWlnaHQgLSA0LCAwLiwgMS4sIDEuKTsKKwlpZ3RfcGFpbnRf Y29sb3IoY3IsIDQsIDQsIGNsaXBfZmItPndpZHRoIC0gOCwgY2xpcF9mYi0+aGVpZ2h0IC0gOCwg Ljc1LCAuNzUsIDEuKTsKKworCS8qIFdoaXRlIGRvdHMgaW4gdGhlIGNvcm5lcnMuICovCisJaWd0 X3BhaW50X2NvbG9yKGNyLCAwLCAwLCA2LCA2LCAxLiwgMS4sIDEuKTsKKwlpZ3RfcGFpbnRfY29s b3IoY3IsIGNsaXBfZmItPndpZHRoIC0gNiwgMCwgNiwgNiwgMS4sIDEuLCAxLik7CisJaWd0X3Bh aW50X2NvbG9yKGNyLCAwLCBjbGlwX2ZiLT5oZWlnaHQgLSA2LCA2LCA2LCAxLiwgMS4sIDEuKTsK KwlpZ3RfcGFpbnRfY29sb3IoY3IsIGNsaXBfZmItPndpZHRoIC0gNiwgY2xpcF9mYi0+aGVpZ2h0 IC0gNiwgNiwgNiwgMS4sIDEuLCAxLik7CisKKwlpZ3RfcHV0X2NhaXJvX2N0eChkaXNwbGF5LT5k cm1fZmQsIGNsaXBfZmIsIGNyKTsKKworCWlndF9waXBlX2NyY19zdGFydChkYXRhLT5waXBlX2Ny Yyk7CisKKwlpZ3RfcGxhbmVfc2V0X2ZiKHByaW1hcnksIGJnX2ZiKTsKKwlmb3JfZWFjaF9wbGFu ZV9vbl9waXBlKGRpc3BsYXksIHBpcGUsIHBsYW5lKSB7CisJCXN0cnVjdCBpZ3RfZmIgKmN1cnNv cl9mYiA9IHBsYW5lID09IHByaW1hcnkgPyBibGFja19jdXJzb3JfZmIgOiBiZ19jdXJzb3JfZmI7 CisJCWlndF9jcmNfdCByZWZfY3JjOworCisJCWlmICghaWd0X3BsYW5lX2hhc19mb3JtYXRfbW9k KHBsYW5lLCBmb3JtYXQsIGNsaXBfZmItPm1vZGlmaWVyKSB8fCBwbGFuZSA9PSBjdXJzb3IpCisJ CQljb250aW51ZTsKKworCQl5dXZfY2hyb21hX3N1YnBpeGVsX2NsaXBfcGxhbmVfd2l0aF9jdXJz b3IoZGF0YSwgcGxhbmUsIGNsaXBfZmIsIGN1cnNvciwgY3Vyc29yX2ZiLCAmcmVmX2NyYywgNjMg KyBjbGlwX2ZiLT53aWR0aCwgNjQpOworCQlyZXQgfD0geXV2X2Nocm9tYV9zdWJwaXhlbF9jbGlw X3BsYW5lX3JpZ2h0KGRhdGEsIElHVF9ST1RBVElPTl8wLCBwbGFuZSwgY2xpcF9mYiwgJnJlZl9j cmMpOworCQlyZXQgfD0geXV2X2Nocm9tYV9zdWJwaXhlbF9jbGlwX3BsYW5lX3JpZ2h0KGRhdGEs IElHVF9ST1RBVElPTl85MCwgcGxhbmUsIGNsaXBfZmIsICZyZWZfY3JjKTsKKwkJcmV0IHw9IHl1 dl9jaHJvbWFfc3VicGl4ZWxfY2xpcF9wbGFuZV9yaWdodChkYXRhLCBJR1RfUk9UQVRJT05fMTgw LCBwbGFuZSwgY2xpcF9mYiwgJnJlZl9jcmMpOworCQlyZXQgfD0geXV2X2Nocm9tYV9zdWJwaXhl bF9jbGlwX3BsYW5lX3JpZ2h0KGRhdGEsIElHVF9ST1RBVElPTl8yNzAsIHBsYW5lLCBjbGlwX2Zi LCAmcmVmX2NyYyk7CisKKwkJeXV2X2Nocm9tYV9zdWJwaXhlbF9jbGlwX3BsYW5lX3dpdGhfY3Vy c29yKGRhdGEsIHBsYW5lLCBjbGlwX2ZiLCBjdXJzb3IsIGN1cnNvcl9mYiwgJnJlZl9jcmMsIDY0 LCA2MyArIGNsaXBfZmItPmhlaWdodCk7CisJCXJldCB8PSB5dXZfY2hyb21hX3N1YnBpeGVsX2Ns aXBfcGxhbmVfYm90dG9tKGRhdGEsIElHVF9ST1RBVElPTl8wLCBwbGFuZSwgY2xpcF9mYiwgJnJl Zl9jcmMpOworCQlyZXQgfD0geXV2X2Nocm9tYV9zdWJwaXhlbF9jbGlwX3BsYW5lX2JvdHRvbShk YXRhLCBJR1RfUk9UQVRJT05fOTAsIHBsYW5lLCBjbGlwX2ZiLCAmcmVmX2NyYyk7CisJCXJldCB8 PSB5dXZfY2hyb21hX3N1YnBpeGVsX2NsaXBfcGxhbmVfYm90dG9tKGRhdGEsIElHVF9ST1RBVElP Tl8xODAsIHBsYW5lLCBjbGlwX2ZiLCAmcmVmX2NyYyk7CisJCXJldCB8PSB5dXZfY2hyb21hX3N1 YnBpeGVsX2NsaXBfcGxhbmVfYm90dG9tKGRhdGEsIElHVF9ST1RBVElPTl8yNzAsIHBsYW5lLCBj bGlwX2ZiLCAmcmVmX2NyYyk7CisKKwkJeXV2X2Nocm9tYV9zdWJwaXhlbF9jbGlwX3BsYW5lX3dp dGhfY3Vyc29yKGRhdGEsIHBsYW5lLCBjbGlwX2ZiLCBjdXJzb3IsIGN1cnNvcl9mYiwgJnJlZl9j cmMsIDY1IC0gY3Vyc29yX2ZiLT53aWR0aCwgNjQpOworCQlyZXQgfD0geXV2X2Nocm9tYV9zdWJw aXhlbF9jbGlwX3BsYW5lX2xlZnQoZGF0YSwgSUdUX1JPVEFUSU9OXzAsIHBsYW5lLCBjbGlwX2Zi LCAmcmVmX2NyYyk7CisJCXJldCB8PSB5dXZfY2hyb21hX3N1YnBpeGVsX2NsaXBfcGxhbmVfbGVm dChkYXRhLCBJR1RfUk9UQVRJT05fOTAsIHBsYW5lLCBjbGlwX2ZiLCAmcmVmX2NyYyk7CisJCXJl dCB8PSB5dXZfY2hyb21hX3N1YnBpeGVsX2NsaXBfcGxhbmVfbGVmdChkYXRhLCBJR1RfUk9UQVRJ T05fMTgwLCBwbGFuZSwgY2xpcF9mYiwgJnJlZl9jcmMpOworCQlyZXQgfD0geXV2X2Nocm9tYV9z dWJwaXhlbF9jbGlwX3BsYW5lX2xlZnQoZGF0YSwgSUdUX1JPVEFUSU9OXzI3MCwgcGxhbmUsIGNs aXBfZmIsICZyZWZfY3JjKTsKKworCQl5dXZfY2hyb21hX3N1YnBpeGVsX2NsaXBfcGxhbmVfd2l0 aF9jdXJzb3IoZGF0YSwgcGxhbmUsIGNsaXBfZmIsIGN1cnNvciwgY3Vyc29yX2ZiLCAmcmVmX2Ny YywgNjQsIDY1IC0gY3Vyc29yX2ZiLT5oZWlnaHQpOworCQlyZXQgfD0geXV2X2Nocm9tYV9zdWJw aXhlbF9jbGlwX3BsYW5lX3RvcChkYXRhLCBJR1RfUk9UQVRJT05fMCwgcGxhbmUsIGNsaXBfZmIs ICZyZWZfY3JjKTsKKwkJcmV0IHw9IHl1dl9jaHJvbWFfc3VicGl4ZWxfY2xpcF9wbGFuZV90b3Ao ZGF0YSwgSUdUX1JPVEFUSU9OXzkwLCBwbGFuZSwgY2xpcF9mYiwgJnJlZl9jcmMpOworCQlyZXQg fD0geXV2X2Nocm9tYV9zdWJwaXhlbF9jbGlwX3BsYW5lX3RvcChkYXRhLCBJR1RfUk9UQVRJT05f MTgwLCBwbGFuZSwgY2xpcF9mYiwgJnJlZl9jcmMpOworCQlyZXQgfD0geXV2X2Nocm9tYV9zdWJw aXhlbF9jbGlwX3BsYW5lX3RvcChkYXRhLCBJR1RfUk9UQVRJT05fMjcwLCBwbGFuZSwgY2xpcF9m YiwgJnJlZl9jcmMpOworCisJCS8qIFJlc2V0IHRvIGRlZmF1bHRzICovCisJCWlndF9wbGFuZV9z ZXRfcG9zaXRpb24ocGxhbmUsIDAsIDApOworCQlpZ3RfcGxhbmVfc2V0X3JvdGF0aW9uKHBsYW5l LCBJR1RfUk9UQVRJT05fMCk7CisJCWlndF9wbGFuZV9zZXRfZmIocGxhbmUsIHBsYW5lID09IHBy aW1hcnkgPyBiZ19mYiA6IE5VTEwpOworCX0KKworCWlndF9yZXF1aXJlX2YocmV0LCAiQ291bGQg bm90IHRlc3Qgc3VicGl4ZWwgY2xpcHBpbmcgaW4gYW55IGNvcm5lclxuIik7Cit9CisKK3N0YXRp YyBjb25zdCBjaGFyICpwcmV0dGlmeSh1aW50MzJfdCBmb3VyY2MpCit7CisJc3RhdGljIGNoYXIg c3RyWzVdOworCisJbWVtY3B5KHN0ciwgJmZvdXJjYywgNCk7CisJc3RyWzRdID0gMDsKKwlyZXR1 cm4gc3RyOworfQorCitzdGF0aWMgdm9pZCBydW5fdGVzdHNfZm9yX2Zvcm1hdChkYXRhX3QgKmRh dGEsIGVudW0gcGlwZSBwaXBlLCBpZ3Rfb3V0cHV0X3QgKm91dHB1dCwgdW5zaWduZWQgaW50IGZv cm1hdCkKK3sKKwlpZ3RfZGlzcGxheV90ICpkaXNwbGF5ID0gJmRhdGEtPmRpc3BsYXk7CisJY29u c3QgY2hhciAqZnN0ciA9IHByZXR0aWZ5KGZvcm1hdCk7CisKKwlpZ3RfZml4dHVyZQorCQlpZ3Rf cmVxdWlyZShwaXBlX3N1cHBvcnRzX2Zvcm1hdChkaXNwbGF5LCBwaXBlLCBmb3JtYXQsIHhfbW9k aWZpZXIpKTsKKworCWlndF9zdWJ0ZXN0X2YoInBpcGUtJXMtJXMtcmdiLXN3aXRjaCIsIGttc3Rl c3RfcGlwZV9uYW1lKHBpcGUpLCBmc3RyKQorCQl5dXZfcmdiX3N3aXRjaChkYXRhLCBwaXBlLCBv dXRwdXQsIGZhbHNlLCBmb3JtYXQpOworCisJaWd0X3N1YnRlc3RfZigicGlwZS0lcy0lcy1yZ2It c2NhbGVkLXN3aXRjaCIsIGttc3Rlc3RfcGlwZV9uYW1lKHBpcGUpLCBmc3RyKQorCQl5dXZfcmdi X3N3aXRjaChkYXRhLCBwaXBlLCBvdXRwdXQsIHRydWUsIGZvcm1hdCk7CisKKwlpZ3Rfc3VidGVz dF9mKCJwaXBlLSVzLSVzLXZhbGlkLXdpZHRoIiwga21zdGVzdF9waXBlX25hbWUocGlwZSksIGZz dHIpCisJCXl1dl92YWxpZF93aWR0aChkYXRhLCBwaXBlLCBvdXRwdXQsIGZvcm1hdCk7CisKKwlp Z3Rfc3VidGVzdF9mKCJwaXBlLSVzLSVzLWNyb3Atc2NhbGUtYnVnIiwga21zdGVzdF9waXBlX25h bWUocGlwZSksIGZzdHIpCisJCXl1dl9jcm9wX3NjYWxlX2J1ZyhkYXRhLCBwaXBlLCBvdXRwdXQs IGZvcm1hdCk7CisKKwlpZ3Rfc3VidGVzdF9mKCJwaXBlLSVzLSVzLWNocm9tYS1zdWJwaXhlbC1j bGlwIiwga21zdGVzdF9waXBlX25hbWUocGlwZSksIGZzdHIpCisJCXl1dl9jaHJvbWFfc3VicGl4 ZWxfY2xpcChkYXRhLCBwaXBlLCBvdXRwdXQsIGZvcm1hdCk7Cit9CisKK3N0YXRpYyB2b2lkIHJ1 bl90ZXN0c19mb3JfcGlwZShkYXRhX3QgKmRhdGEsIGVudW0gcGlwZSBwaXBlKQoreworCWlndF9v dXRwdXRfdCAqb3V0cHV0ID0gTlVMTDsKKworCWlndF9maXh0dXJlCisJCWlndF9yZXF1aXJlKChv dXRwdXQgPSBpZ3RfZ2V0X3NpbmdsZV9vdXRwdXRfZm9yX3BpcGUoJmRhdGEtPmRpc3BsYXksIHBp cGUpKSk7CisKKwlpZ3Rfc3VidGVzdF9mKCJwaXBlLSVzLXl1di1zYW5pdHktY3JjIiwga21zdGVz dF9waXBlX25hbWUocGlwZSkpCisJCXl1dl9zYW5pdHkoZGF0YSwgcGlwZSwgb3V0cHV0KTsKKwor CWZvciAoaW50IGkgPSAwOyBpIDwgY291bnRfZm9ybWF0czsgaSsrKQorCQlpZiAoaWd0X2Zvcm1h dF9pc195dXYoZm9ybWF0c1tpXSkpCisJCQlpZ3Rfc3VidGVzdF9ncm91cAorCQkJCXJ1bl90ZXN0 c19mb3JfZm9ybWF0KGRhdGEsIHBpcGUsIG91dHB1dCwgZm9ybWF0c1tpXSk7Cit9CisKK2lndF9t YWluCit7CisJZGF0YV90IGRhdGEgPSB7fTsKKwllbnVtIHBpcGUgcGlwZTsKKworCWlndF9za2lw X29uX3NpbXVsYXRpb24oKTsKKworCWlndF9maXh0dXJlIHsKKwkJZGF0YS5kaXNwbGF5LmRybV9m ZCA9IGRybV9vcGVuX2RyaXZlcl9tYXN0ZXIoRFJJVkVSX0FOWSk7CisKKwkJa21zdGVzdF9zZXRf dnRfZ3JhcGhpY3NfbW9kZSgpOworCQlpZ3RfZGlzcGxheV9yZXF1aXJlKCZkYXRhLmRpc3BsYXks IGRhdGEuZGlzcGxheS5kcm1fZmQpOworCQlpZ3RfcmVxdWlyZShkYXRhLmRpc3BsYXkuaXNfYXRv bWljKTsKKwkJaWd0X3JlcXVpcmVfcGlwZV9jcmMoZGF0YS5kaXNwbGF5LmRybV9mZCk7CisKKwkJ aWYgKGlndF9kaXNwbGF5X2hhc19mb3JtYXRfbW9kKCZkYXRhLmRpc3BsYXksIERSTV9GT1JNQVRf WFJHQjg4ODgsIExPQ0FMX0k5MTVfRk9STUFUX01PRF9YX1RJTEVEKSkKKwkJCXhfbW9kaWZpZXIg PSBMT0NBTF9JOTE1X0ZPUk1BVF9NT0RfWF9USUxFRDsKKworCQlpZiAoaWd0X2Rpc3BsYXlfaGFz X2Zvcm1hdF9tb2QoJmRhdGEuZGlzcGxheSwgRFJNX0ZPUk1BVF9YUkdCODg4OCwgTE9DQUxfSTkx NV9GT1JNQVRfTU9EX1lfVElMRUQpKQorCQkJeV9tb2RpZmllciA9IExPQ0FMX0k5MTVfRk9STUFU X01PRF9ZX1RJTEVEOworCX0KKworCWlndF9mb3JtYXRfYXJyYXlfZmlsbCgmZm9ybWF0cywgJmNv dW50X2Zvcm1hdHMsIHRydWUpOworCisJZm9yX2VhY2hfcGlwZV9zdGF0aWMocGlwZSkKKwkJaWd0 X3N1YnRlc3RfZ3JvdXAKKwkJCXJ1bl90ZXN0c19mb3JfcGlwZSgmZGF0YSwgcGlwZSk7CisKKwlp Z3RfZml4dHVyZSB7CisJCWlndF9kaXNwbGF5X2ZpbmkoJmRhdGEuZGlzcGxheSk7CisJCWNsb3Nl KGRhdGEuZGlzcGxheS5kcm1fZmQpOworCX0KK30KZGlmZiAtLWdpdCBhL3Rlc3RzL21lc29uLmJ1 aWxkIGIvdGVzdHMvbWVzb24uYnVpbGQKaW5kZXggMzUxNTk0ZmE3MmYwLi5mYzY5ZWM2NzdlNDcg MTAwNjQ0Ci0tLSBhL3Rlc3RzL21lc29uLmJ1aWxkCisrKyBiL3Rlc3RzL21lc29uLmJ1aWxkCkBA IC02Miw2ICs2Miw3IEBAIHRlc3RfcHJvZ3MgPSBbCiAJJ2ttc191bml2ZXJzYWxfcGxhbmUnLAog CSdrbXNfdmJsYW5rJywKIAkna21zX3ZycicsCisJJ2ttc195dXYnLAogCSdtZXRhX3Rlc3QnLAog CSdwYW5mcm9zdF9nZXRfcGFyYW0nLAogCSdwYW5mcm9zdF9nZW1fbmV3JywKLS0gCjIuMjAuMQoK X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KaWd0LWRldiBt YWlsaW5nIGxpc3QKaWd0LWRldkBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5m cmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pZ3QtZGV2