From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dhanya Pillai Subject: [PATCH i-g-t] tests/kms_color:Color i-g-t Date: Tue, 22 Dec 2015 15:53:27 +0530 Message-ID: <1450779807-14630-1-git-send-email-dhanya.p.r@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTP id 1F8556E58C for ; Tue, 22 Dec 2015 02:22:00 -0800 (PST) List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org Cc: jesse.barnes@intel.com, Dhanya List-Id: intel-gfx@lists.freedesktop.org RnJvbTogRGhhbnlhIDxkaGFueWEucC5yQGludGVsLmNvbT4KCglUaGlzIHBhdGNoIHdpbGwgdmVy aWZ5IGNvbG9yIGNvcnJlY3Rpb24gY2FwYWJpbGl0eSBvZiBhIGRpc3BsYXkgZHJpdmVyLgoJR2Ft bWEvQ1NDL0RlLWdhbW1hIGZvciBTS0wvQlhUIHN1cHBvcnRlZC4KClNpZ25lZC1vZmYtYnk6IERo YW55YSA8ZGhhbnlhLnAuckBpbnRlbC5jb20+Ci0tLQogdGVzdHMvLmdpdGlnbm9yZSAgICAgICB8 ICAgIDEgKwogdGVzdHMvTWFrZWZpbGUuc291cmNlcyB8ICAgIDEgKwogdGVzdHMva21zX2NvbG9y LmMgICAgICB8IDEwMzcgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrCiAzIGZpbGVzIGNoYW5nZWQsIDEwMzkgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUg MTAwNjQ0IHRlc3RzL2ttc19jb2xvci5jCgpkaWZmIC0tZ2l0IGEvdGVzdHMvLmdpdGlnbm9yZSBi L3Rlc3RzLy5naXRpZ25vcmUKaW5kZXggN2YyMGYyYi4uNmZjNDc4MiAxMDA2NDQKLS0tIGEvdGVz dHMvLmdpdGlnbm9yZQorKysgYi90ZXN0cy8uZ2l0aWdub3JlCkBAIC0xMzAsNiArMTMwLDcgQEAg Z2VuN19mb3JjZXdha2VfbXQKIGttc18zZAoga21zX2FkZGZiX2Jhc2ljCiBrbXNfYXRvbWljCitr bXNfY29sb3IKIGttc19jcnRjX2JhY2tncm91bmRfY29sb3IKIGttc19jdXJzb3JfY3JjCiBrbXNf ZHJhd19jcmMKZGlmZiAtLWdpdCBhL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMgYi90ZXN0cy9NYWtl ZmlsZS5zb3VyY2VzCmluZGV4IGQ1OTQwMzguLmYyYWY2NDggMTAwNjQ0Ci0tLSBhL3Rlc3RzL01h a2VmaWxlLnNvdXJjZXMKKysrIGIvdGVzdHMvTWFrZWZpbGUuc291cmNlcwpAQCAtNjgsNiArNjgs NyBAQCBURVNUU19wcm9nc19NID0gXAogCWdlbV93cml0ZV9yZWFkX3Jpbmdfc3dpdGNoIFwKIAlr bXNfYWRkZmJfYmFzaWMgXAogCWttc19hdG9taWMgXAorCWttc19jb2xvciBcCiAJa21zX2N1cnNv cl9jcmMgXAogCWttc19kcmF3X2NyYyBcCiAJa21zX2ZiY19jcmMgXApkaWZmIC0tZ2l0IGEvdGVz dHMva21zX2NvbG9yLmMgYi90ZXN0cy9rbXNfY29sb3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwLi4xNmNmZDQ0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMva21zX2NvbG9y LmMKQEAgLTAsMCArMSwxMDM3IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTUgSW50ZWwgQ29y cG9yYXRpb24KKyAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBj aGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2Fy ZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisg KiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcg d2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBt ZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNv cGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQor ICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dp bmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhp cyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNo YWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2Yg dGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElT IiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwg SU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC SUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklO R0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBI T0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFC SUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lT RSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09G VFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgor ICoKKyAqLworCisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMu aD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxt YXRoLmg+CisjaW5jbHVkZSAiZHJtdGVzdC5oIgorI2luY2x1ZGUgImRybS5oIgorI2luY2x1ZGUg ImlndF9kZWJ1Z2ZzLmgiCisjaW5jbHVkZSAiaWd0X2ttcy5oIgorI2luY2x1ZGUgImlndF9jb3Jl LmgiCisjaW5jbHVkZSAiaW50ZWxfaW8uaCIKKyNpbmNsdWRlICJpbnRlbF9jaGlwc2V0LmgiCisj aW5jbHVkZSAiaWd0X2F1eC5oIgorCisKK0lHVF9URVNUX0RFU0NSSVBUSU9OKCJUZXN0IENvbG9y IEZlYXR1cmVzIGF0IFBpcGUgbGV2ZWwiKTsKKy8qCisKK1RoaXMgdG9vbCB0ZXN0cyB0aGUgZm9s bG93aW5nIGNvbG9yIGZlYXR1cmVzOgorCUNUTSwgR0FNTUEoOC8xMC8xMi9zcGxpdC9sZWdhY3kp IGFuZCBEZS1nYW1tYS4KK0ZldyBuZWdhdGl2ZSB0ZXN0IGNhc2VzIGFyZSBhbHNvIGluY2x1ZGVk CisKK1Rlc3RzIHdpbGxsIGVuYWJsZSBvbmUgcHJpbWFyeSBhbmQgb25lIHNwcml0ZSBwbGFuZSBh bmQgYXBwbHkKK3RoZSBzcGVjaWZpYyBjb2xvciBmZWF0dXJlIGFuZCBkbyB0aGUgdmVyaWZpY2F0 aW9uIGJ5IENSQyBjaGVja3MuCisqLworCisjZGVmaW5lIENTQ19NQVhfVkFMUyAgICA5CisjZGVm aW5lIEJEV19TUExJVEdBTU1BX01BWF9WQUxTICAgICAgICAgICAgICAgIDUxMgorI2RlZmluZSBC RFdfOEJJVF9HQU1NQV9NQVhfVkFMUyAgICAgICAgICAgICAgICAyNTYKKyNkZWZpbmUgQkRXXzEw QklUX0dBTU1BX01BWF9WQUxTICAgICAgICAgICAgICAgMTAyNAorI2RlZmluZSBCRFdfMTJCSVRf R0FNTUFfTUFYX1ZBTFMgICAgICAgICAgICAgICA1MTMKKyNkZWZpbmUgQkRXX01BWF9HQU1NQSAg ICAgICAgICAgICAgICAgICAgICAgICAoKDEgPDwgMjQpIC0gMSkKKyNkZWZpbmUgQkRXX01JTl9H QU1NQQkJCQkwCisKKyNkZWZpbmUgUkVEX0ZCIDAKKyNkZWZpbmUgR1JFRU5fRkIgMQorI2RlZmlu ZSBCTFVFX0ZCIDIKKworI2lmbmRlZiBkcm1fcjMyZzMyYjMyCitzdHJ1Y3QgZHJtX3IzMmczMmIz MiB7CisJX191MzIgcjMyOworCV9fdTMyIGczMjsKKwlfX3UzMiBiMzI7CisJX191MzIgcmVzZXJ2 ZWQ7Cit9OworI2VuZGlmCisjaWZuZGVmIGRybV9wYWxldHRlCitzdHJ1Y3QgZHJtX3BhbGV0dGUg eworCXN0cnVjdCBkcm1fcjMyZzMyYjMyIGx1dFswXTsKK307CisjZW5kaWYKKyNpZm5kZWYgZHJt X2N0bQorCXN0cnVjdCBkcm1fY3RtIHsKKwlfX3M2NCBjdG1fY29lZmZbOV07Cit9OworI2VuZGlm CisjaWZuZGVmIGRybV9wYWxldHRlX2NhcHMKK3N0cnVjdCBkcm1fcGFsZXR0ZV9jYXBzIHsKKwlf X3UzMiB2ZXJzaW9uOworCV9fdTMyIHJlc2VydmVkOworCV9fdTMyIG51bV9zYW1wbGVzX2JlZm9y ZV9jdG07CisJX191MzIgbnVtX3NhbXBsZXNfYWZ0ZXJfY3RtOworfTsKKyNlbmRpZgorCitlbnVt IGN0bV9jb2xvciB7CisJUkVELAorCUdSRUVOLAorCUJMVUUsCisJUkVWRVJTRSwKKwlORUdBVElW RSwKKwlGUkFDVElPTgorfTsKKworZW51bSBibG9iIHsKKwlJTlZBTElEX0JMT0JfSUQsCisJSU5W QUxJRF9CTE9CX0RBVEEsCisJSU5WQUxJRF9CTE9CX0xFTkdUSCwKKwlJTlZBTElEX0JMT0JfSURf U01BTEwsCisJSU5WQUxJRF9CTE9CX05VTEwKK307CisKK2VudW0gY29sb3JfcHJvcGVydHkgewor CWN0bV9wcm9wZXJ0eSwKKwlsZWdhY3lfZ2FtbWEsCisJZ2FtbWFfcHJvcGVydHlfOGJpdCwKKwln YW1tYV9wcm9wZXJ0eV8xMGJpdCwKKwlnYW1tYV9wcm9wZXJ0eV8xMmJpdCwKKwlnYW1tYV9wcm9w ZXJ0eV9zcGxpdAorfTsKK3N0YXRpYyBjb25zdCBmbG9hdCBjdG1fcmVkWzldID0gezEsIDEsIDEs IDAsIDAsIDAsIDAsIDAsIDB9Oworc3RhdGljIGNvbnN0IGZsb2F0IGN0bV9ncmVlbls5XSA9IHsw LCAwLCAwLCAxLCAxLCAxLCAwLCAwLCAwfTsKK3N0YXRpYyBjb25zdCBmbG9hdCBjdG1fYmx1ZVs5 XSA9IHswLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAxfTsKK3N0YXRpYyBjb25zdCBmbG9hdCBjdG1f aWRlbnRpdHlbOV0gPSB7MSwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMX07CitzdGF0aWMgY29uc3Qg ZmxvYXQgY3RtX3JldmVyc2VbOV0gPSB7MCwgMCwgMSwgMCwgMSwgMCwgMSwgMCwgMH07CitzdGF0 aWMgY29uc3QgZmxvYXQgY3RtX25lZ2F0aXZlWzldID0gey0xLCAtMSwgLTEsIC0xLCAtMSwgLTEs IC0xLCAtMSwgLTF9Oworc3RhdGljIGNvbnN0IGZsb2F0IGN0bV9mcmFjdGlvbls5XSA9IHsxMjM0 NTY3Ljc2NTIsIDAuMTIzMzQsIDAuOTg5ODk4OSwgMC40NTQ1NDU0NSwgMC4xMjEyMTIxMiwgMC4y MzIzMjMsIDMuOTg3NjgsIDAuMDAwMDAsIDEuMjIzNDV9OworCisKK3N0cnVjdCBmcmFtZWJ1ZmZl cl9jb2xvciB7CisJaW50IHJlZDsKKwlpbnQgZ3JlZW47CisJaW50IGJsdWU7Cit9Oworc3RydWN0 IGZyYW1lYnVmZmVyX2NvbG9yIGZiX2NvbG9yID0geyAwLCAwLCAwfTsKKworCitzdHJ1Y3QgZGF0 YV90IHsKKwlpbnQgZmJfaW5pdGlhbDsKKwlpbnQgZHJtX2ZkOworCWludCBnZW47CisJaW50IHcs IGg7CisJaWd0X2Rpc3BsYXlfdCBkaXNwbGF5OworCXN0cnVjdCBpZ3RfZmIgZmJfcHJlcDsKKwlz dHJ1Y3QgaWd0X2ZiIGZiLCBmYjE7CisJaWd0X3BpcGVfY3JjX3QgKnBpcGVfY3JjOworCWVudW0g cGlwZSBwaXBlOworCit9OworCisKK3N0YXRpYyBpbnQgY3JlYXRlX2Jsb2IoaW50IGZkLCB1aW50 NjRfdCAqZGF0YSwgaW50IGxlbmd0aCkKK3sKKwlzdHJ1Y3QgZHJtX21vZGVfY3JlYXRlX2Jsb2Ig YmxvYjsKKwlpbnQgcmV0ID0gLTE7CisKKwlibG9iLmRhdGEgPSAodWludDY0X3QpZGF0YTsKKwli bG9iLmxlbmd0aCA9IGxlbmd0aDsKKwlibG9iLmJsb2JfaWQgPSAtMTsKKwlyZXQgPSBpb2N0bChm ZCwgRFJNX0lPQ1RMX01PREVfQ1JFQVRFUFJPUEJMT0IsICZibG9iKTsKKwlpZiAoIXJldCkKKwkJ cmV0dXJuIGJsb2IuYmxvYl9pZDsKKwlpZ3RfZmFpbChJR1RfRVhJVF9GQUlMVVJFKTsKKwlyZXR1 cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBwcmVwYXJlX2NydGMoc3RydWN0IGRhdGFfdCAqZGF0 YSwgaWd0X291dHB1dF90ICpvdXRwdXQsCisJCQkgZW51bSBwaXBlIHBpcGUxLCBpZ3RfcGxhbmVf dCAqcGxhbmUsIGRybU1vZGVNb2RlSW5mbyAqbW9kZSwKKwkJCSBlbnVtIGlndF9jb21taXRfc3R5 bGUgcykKK3sKKwlpZ3RfZGlzcGxheV90ICpkaXNwbGF5ID0gJmRhdGEtPmRpc3BsYXk7CisKKwlp Z3Rfb3V0cHV0X3NldF9waXBlKG91dHB1dCwgcGlwZTEpOworCWlndF9waXBlX2NyY19mcmVlKGRh dGEtPnBpcGVfY3JjKTsKKwlkYXRhLT5waXBlX2NyYyA9IGlndF9waXBlX2NyY19uZXcocGlwZTEs IElOVEVMX1BJUEVfQ1JDX1NPVVJDRV9BVVRPKTsKKwkvKiBiZWZvcmUgYWxsb2NhdGluZywgZnJl ZSBpZiBhbnkgb2xkZXIgZmIgKi8KKwlpZiAoZGF0YS0+ZmJfaW5pdGlhbCkgeworCQlpZ3RfcmVt b3ZlX2ZiKGRhdGEtPmRybV9mZCwgJmRhdGEtPmZiX3ByZXApOworCQlkYXRhLT5mYl9pbml0aWFs ID0gMDsKKwl9CisKKwkvKiBhbGxvY2F0ZSBmYiBmb3IgcGxhbmUgMSAqLworCWRhdGEtPmZiX2lu aXRpYWwgPSBpZ3RfY3JlYXRlX2NvbG9yX2ZiKGRhdGEtPmRybV9mZCwKKwkJCQkJICAgICAgIG1v ZGUtPmhkaXNwbGF5LCBtb2RlLT52ZGlzcGxheSwKKwkJCQkJICAgICAgIERSTV9GT1JNQVRfWFJH Qjg4ODgsCisJCQkJCSAgICAgICBMT0NBTF9JOTE1X0ZPUk1BVF9NT0RfWF9USUxFRCwgLyogdGls ZWQgKi8KKwkJCQkJICAgICAgIGZiX2NvbG9yLnJlZCwgZmJfY29sb3IuZ3JlZW4sIGZiX2NvbG9y LmJsdWUsCisJCQkJCSAgICAgICAmZGF0YS0+ZmJfcHJlcCk7CisJaWd0X2Fzc2VydChkYXRhLT5m Yl9pbml0aWFsKTsKKworCWlndF9wbGFuZV9zZXRfZmIocGxhbmUsICZkYXRhLT5mYl9wcmVwKTsK KworCWlndF9kaXNwbGF5X2NvbW1pdDIoZGlzcGxheSwgcyk7Cit9CisKK3N0YXRpYyB2b2lkIGNs ZWFudXBfZmIoc3RydWN0IGRhdGFfdCAqZGF0YSkKK3sKKworCWlmIChkYXRhLT5mYl9pbml0aWFs KSB7CisJCWlndF9yZW1vdmVfZmIoZGF0YS0+ZHJtX2ZkLCAmZGF0YS0+ZmJfcHJlcCk7CisJCWRh dGEtPmZiX2luaXRpYWwgPSAwOworCX0KKwlpZiAoZGF0YS0+ZmIuZmJfaWQpCisJCWlndF9yZW1v dmVfZmIoZGF0YS0+ZHJtX2ZkLCAmZGF0YS0+ZmIpOworCit9CisKK3N0YXRpYyB2b2lkIGNsZWFu dXBfY3J0YyhzdHJ1Y3QgZGF0YV90ICpkYXRhLCBpZ3Rfb3V0cHV0X3QgKm91dHB1dCwKKwkJCSBp Z3RfcGxhbmVfdCAqcGxhbmUpCit7CisJaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSA9ICZkYXRhLT5k aXNwbGF5OworCisJaWYgKCFwbGFuZS0+aXNfcHJpbWFyeSkgeworCQlpZ3RfcGxhbmVfdCAqcHJp bWFyeTsKKworCQlwcmltYXJ5ID0gaWd0X291dHB1dF9nZXRfcGxhbmUob3V0cHV0LCBJR1RfUExB TkVfUFJJTUFSWSk7CisJCWlndF9wbGFuZV9zZXRfZmIocHJpbWFyeSwgTlVMTCk7CisJfQorCWln dF9wbGFuZV9zZXRfZmIocGxhbmUsIE5VTEwpOworCWlndF9vdXRwdXRfc2V0X3BpcGUob3V0cHV0 LCBQSVBFX0FOWSk7CisJaWd0X2Rpc3BsYXlfY29tbWl0MihkaXNwbGF5LCBDT01NSVRfVU5JVkVS U0FMKTsKKworfQorCitzdGF0aWMgaW50IGdldF9jb2xvcl9wcm9wZXJ0eShpbnQgZHJtX2ZkLCBp bnQgaWQsIGludCBvYmplY3QsIGNvbnN0IGNoYXIgKnByb3BfbmFtZSkKKworeworCWludCBpID0g MCwgcmV0ID0gMDsKKwlpbnQgYmxvYl9pZCA9IC0xOworCWRybU1vZGVPYmplY3RQcm9wZXJ0aWVz UHRyIHByb3BzID0gTlVMTDsKKwlpZ3RfZmFpbF9vbl9mKGlkIDwgMCB8fCAoKG9iamVjdCAhPSBE Uk1fTU9ERV9PQkpFQ1RfQ1JUQykgJiYKKwkJICAgICAgKG9iamVjdCAhPSBEUk1fTU9ERV9PQkpF Q1RfUExBTkUpKSwgIkludmFsaWQgaW5wdXQgdG8gZ2V0IGNvbG9yIHByb3BlcnR5ICVkIiwgaWQp OworCisJcHJvcHMgPSBkcm1Nb2RlT2JqZWN0R2V0UHJvcGVydGllcyhkcm1fZmQsIGlkLCBvYmpl Y3QpOworCWlndF9mYWlsX29uX2YoIXByb3BzLCAiXG5ObyBwcm9wZXJ0eSBmb3Igb2JqZWN0IGlk PSVkXG4iLCBpZCk7CisJZm9yIChpID0gMDsgaSA8IHByb3BzLT5jb3VudF9wcm9wczsgaSsrKSB7 CisJCWRybU1vZGVQcm9wZXJ0eVB0ciBwcm9wID0gZHJtTW9kZUdldFByb3BlcnR5KGRybV9mZCwK KwkJCQkJCQkgICAgIHByb3BzLT5wcm9wc1tpXSk7CisJCWlmIChzdHJjbXAocHJvcC0+bmFtZSwg cHJvcF9uYW1lKSA9PSAwKSB7CisJCQlibG9iX2lkID0gcHJvcHMtPnByb3BfdmFsdWVzW2ldOwor CisJCQlicmVhazsKKwkJfQorCQlkcm1Nb2RlRnJlZVByb3BlcnR5KHByb3ApOworCX0KKwlyZXQg PSBibG9iX2lkOworCWRybU1vZGVGcmVlT2JqZWN0UHJvcGVydGllcyhwcm9wcyk7CisJaWd0X2Zh aWxfb25fZihpID09IHByb3BzLT5jb3VudF9wcm9wcywgIiVzIE5vIHN1Y2ggcHJvcGVydHlcbiIs IHByb3BfbmFtZSk7CisJcmV0dXJuIHJldDsKK30KKworCitzdGF0aWMgaW50IHNldF9jb2xvcl9w cm9wZXJ0eShpbnQgZHJtX2ZkLCBpbnQgaWQsIGludCBvYmplY3QsIGNvbnN0IGNoYXIgKnByb3Bf bmFtZSwgaW50IGJsb2JfaWQpCit7CisJaW50IGkgPSAwLCByZXMgPSAtMTsKKworCWRybU1vZGVP YmplY3RQcm9wZXJ0aWVzUHRyIHByb3BzID0gTlVMTDsKKwlpZ3RfZmFpbF9vbl9mKGlkIDwgMCB8 fCAoKG9iamVjdCAhPSBEUk1fTU9ERV9PQkpFQ1RfQ1JUQykgJiYKKwkJCShvYmplY3QgIT0gRFJN X01PREVfT0JKRUNUX1BMQU5FKSksICJJbnZhbGlkIGlucHV0IHRvIGdldCBjb2xvciBwcm9wZXJ0 eSAlZCIsIGlkKTsKKworCisJcHJvcHMgPSBkcm1Nb2RlT2JqZWN0R2V0UHJvcGVydGllcyhkcm1f ZmQsIGlkLCBvYmplY3QpOworCWlndF9mYWlsX29uX2YoIXByb3BzLCAiXG5ObyBwcm9wZXJ0eSBm b3Igb2JqZWN0IGlkPSVkXG4iLCBpZCk7CisJZm9yIChpID0gMDsgaSA8IHByb3BzLT5jb3VudF9w cm9wczsgaSsrKSB7CisJCWRybU1vZGVQcm9wZXJ0eVB0ciBwcm9wID0gZHJtTW9kZUdldFByb3Bl cnR5KGRybV9mZCwKKwkJCQkJCQkgICAgIHByb3BzLT5wcm9wc1tpXSk7CisJCWlmIChzdHJjbXAo cHJvcC0+bmFtZSwgcHJvcF9uYW1lKSA9PSAwKSB7CisJCQlyZXMgPSBkcm1Nb2RlT2JqZWN0U2V0 UHJvcGVydHkoZHJtX2ZkLCBpZCwgb2JqZWN0LAorCQkJCQkJICAgICAgICh1aW50MzJfdClwcm9w LT5wcm9wX2lkLCBibG9iX2lkKTsKKworCQkJaWYgKHJlcykgeworCQkJCWRybU1vZGVGcmVlUHJv cGVydHkocHJvcCk7CisJCQl9IGVsc2UgeworCQkJCWRybU1vZGVGcmVlUHJvcGVydHkocHJvcCk7 CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCX0KKwlkcm1Nb2RlRnJlZU9iamVjdFByb3BlcnRp ZXMocHJvcHMpOworCWlndF9mYWlsX29uX2YoaSA9PSBwcm9wcy0+Y291bnRfcHJvcHMsICIlcyBO byBzdWNoIHByb3BlcnR5XG4iLCBwcm9wX25hbWUpOworCXJldHVybiByZXM7Cit9CisKK3N0YXRp YyBpbnQ2NF90ICBjb252ZXJ0RmxvYXRUb0JpbmFyeShkb3VibGUgaW5wdXQpCit7CisKKwlpbnQg aW50ZWdlcl9wYXJ0LCBjb3VudCA9IDA7CisJdWludDMyX3QgdGVtcF9pcCwgZnJhY192YWwgPSAw eDAwMDAwMDAwOworCXVpbnQ2NF90IGludGVnZXJfdmFsID0gMHgwMDAwMDAwMDsKKwlpbnQ2NF90 ICB2YWx1ZSA9IDB4MDAwMDAwMDAwMDAwMDAwMDsKKwlmbG9hdCBmcmFjdGlvbmFsX3BhcnQsIGlw OworCWludGVnZXJfcGFydCA9IChpbnQpaW5wdXQ7CisJZnJhY3Rpb25hbF9wYXJ0ID0gaW5wdXQg LSBpbnRlZ2VyX3BhcnQ7CisJd2hpbGUgKGZyYWN0aW9uYWxfcGFydCAhPSAwLjAwMDAwMCkgewor CQlpcCA9IGZyYWN0aW9uYWxfcGFydCAqIDE2OworCQl0ZW1wX2lwID0gKGludCkoZnJhY3Rpb25h bF9wYXJ0ICogMTYpOworCQlmcmFjX3ZhbCA9IGZyYWNfdmFsIHwgKHRlbXBfaXAgPDwgKDI4IC0g Y291bnQgKiA0KSk7CisJCWNvdW50Kys7CisJCWZyYWN0aW9uYWxfcGFydCA9IGlwIC0gdGVtcF9p cDsKKwl9CisJaW50ZWdlcl92YWwgPSBpbnRlZ2VyX3BhcnQ7CisJdmFsdWUgPSB2YWx1ZSB8ICgo aW50ZWdlcl92YWwpICogKChpbnQ2NF90KTFMIDw8IDMyKSk7CisJdmFsdWUgPSB2YWx1ZSB8IGZy YWNfdmFsOworCXJldHVybiB2YWx1ZTsKKworCit9CisKK3N0YXRpYyB2b2lkIHdyaXRlX2dhbW1h X2x1dCh1aW50MzJfdCBudW1fc2FtcGxlcywgc3RydWN0IGRybV9yMzJnMzJiMzIgKmdhbW1hX3B0 ciwgaW50IHVuaXRfZ2FtbWEpCit7CisJdW5zaWduZWQgc2hvcnQgUmVkLCBHcmVlbiwgQmx1ZTsK Kwl1aW50MzJfdCByMzIsIGIzMiwgZzMyOworCXVpbnQ2NF90IGk7CisKKwlmb3IgKGkgPSAwOyBp IDwgbnVtX3NhbXBsZXM7IGkrKykgeworCQlpZiAodW5pdF9nYW1tYSA9PSAwKSB7CisJCQlCbHVl ID0gQkRXX01BWF9HQU1NQTsKKwkJCUdyZWVuID0gQkRXX01BWF9HQU1NQTsKKwkJCVJlZCA9IEJE V19NQVhfR0FNTUE7CisJCX0gZWxzZSB7CisJCQlCbHVlID0gQkRXX01JTl9HQU1NQTsKKwkJCUdy ZWVuID0gQkRXX01JTl9HQU1NQTsKKwkJCVJlZCA9IEJEV19NSU5fR0FNTUE7CisJCX0KKwkJcjMy ID0gUmVkOworCQlnMzIgPSBHcmVlbjsKKwkJYjMyID0gQmx1ZTsKKwkJcjMyIDw8PSA4OworCQln MzIgPDw9IDg7CisJCWIzMiA8PD0gODsKKwkJZ2FtbWFfcHRyW2ldLnIzMiA9IHIzMjsKKwkJZ2Ft bWFfcHRyW2ldLmczMiA9IGczMjsKKwkJZ2FtbWFfcHRyW2ldLmIzMiA9IGIzMjsKKwl9Cit9CisK K3N0YXRpYyB1aW50NjRfdCBnZXRfYmxvYihpbnQgZmQsIGludCBibG9iX2lkLCBpbnQgbGVuZ3Ro KQoreworCXN0cnVjdCBkcm1fbW9kZV9nZXRfYmxvYiBibG9iOworCWludCByZXQgPSAwOworCisJ YmxvYi5ibG9iX2lkID0gYmxvYl9pZDsKKwlibG9iLmxlbmd0aCA9IGxlbmd0aDsKKwlibG9iLmRh dGEgPSAgKHVpbnQ2NF90KW1hbGxvYyhibG9iLmxlbmd0aCk7CisJcmV0ID0gaW9jdGwoZmQsIERS TV9JT0NUTF9NT0RFX0dFVFBST1BCTE9CLCAmYmxvYik7CisKKwlpZiAocmV0KQorCQlpZ3RfaW5m bygiR0VUIEJMT0IgRmFpbGVkXG4iKTsKKworCXJldHVybiBibG9iLmRhdGE7Cit9CisKK3N0YXRp YyB2b2lkIGVuYWJsZV9wbGFuZShzdHJ1Y3QgZGF0YV90ICpkYXRhLCBpZ3RfZGlzcGxheV90ICpk aXNwbGF5LCBpZ3Rfb3V0cHV0X3QgKm91dHB1dCwgaW50IHBpcGUxKQoreworCWVudW0gaWd0X2Nv bW1pdF9zdHlsZSBjb21taXQ7CisJZW51bSBwaXBlIHBpcGUyOworCWludCB3aWR0aCwgaGVpZ2h0 OworCXVpbnQzMl90IHBpeGVsZm9ybWF0ID0gRFJNX0ZPUk1BVF9YUkdCODg4ODsKKworCWNvbW1p dCA9IENPTU1JVF9VTklWRVJTQUw7CisJZm9yX2VhY2hfY29ubmVjdGVkX291dHB1dChkaXNwbGF5 LCBvdXRwdXQpIHsKKwkJZHJtTW9kZU1vZGVJbmZvICptb2RlOworCQlpZ3RfcGxhbmVfdCAqcGxh bmU7CisJCXBpcGUyID0gb3V0cHV0LT5jb25maWcucGlwZTsKKworCQlpZiAocGlwZTIgIT0gcGlw ZTEpCisJCQlicmVhazsKKwkJaWd0X291dHB1dF9zZXRfcGlwZShvdXRwdXQsIHBpcGUyKTsKKwkJ bW9kZSA9IGlndF9vdXRwdXRfZ2V0X21vZGUob3V0cHV0KTsKKwkJLypEcmF3IHRoZSBpbml0aWFs IHByaW1hcnkgcGxhbmUqLworCQlwbGFuZSA9IGlndF9vdXRwdXRfZ2V0X3BsYW5lKG91dHB1dCwg SUdUX1BMQU5FX1BSSU1BUlkpOworCisJCXByZXBhcmVfY3J0YyhkYXRhLCBvdXRwdXQsIHBpcGUy LCBwbGFuZSwgbW9kZSwgY29tbWl0KTsKKwkJLypSYW5kb20gU2l6ZSAgQnVmZmVyIENyZWF0aW9u ICovCisJCXdpZHRoID0gNjAwOworCQloZWlnaHQgPSA2MDA7CisKKwkJcGxhbmUgPSBpZ3Rfb3V0 cHV0X2dldF9wbGFuZShvdXRwdXQsIElHVF9QTEFORV8yKTsKKwkJaWd0X2NyZWF0ZV9jb2xvcl9m YihkYXRhLT5kcm1fZmQsCisJCQkJCSAgICB3aWR0aCwgaGVpZ2h0LAorCQkJCQkgICAgcGl4ZWxm b3JtYXQsCisJCQkJCSAgICBMT0NBTF9EUk1fRk9STUFUX01PRF9OT05FLAorCQkJCQkgICAgZmJf Y29sb3IucmVkLCBmYl9jb2xvci5ncmVlbiwgZmJfY29sb3IuYmx1ZSwKKwkJCQkJICAgICZkYXRh LT5mYik7CisJCWlndF9wbGFuZV9zZXRfcG9zaXRpb24ocGxhbmUsIDEwMCwgMTAwKTsKKworCQlp Z3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCAmZGF0YS0+ZmIpOworCQlpZ3RfZGlzcGxheV9jb21taXQy KGRpc3BsYXksIGNvbW1pdCk7CisJfQorCit9CisKK3N0YXRpYyB2b2lkIGFwcGx5X2N0bShpZ3Rf ZGlzcGxheV90ICpkaXNwbGF5LCBpZ3Rfb3V0cHV0X3QgKm91dHB1dCwgY29uc3QgZmxvYXQgKmN0 bSkKK3sKKwlpbnQgcmVzLCBpLCBibG9iX2lkOworCXVpbnQ2NF90IGJsb2JfYWRkcmVzczsKKwlz dHJ1Y3QgZHJtX2N0bSAqY3RtX2RhdGEgPSBOVUxMOworCWN0bV9kYXRhID0gKHN0cnVjdCBkcm1f Y3RtICopCisJCW1hbGxvYyhzaXplb2Yoc3RydWN0IGRybV9jdG0pKTsKKworCWZvciAoaSA9IDA7 IGkgPCBDU0NfTUFYX1ZBTFM7IGkrKykgeworCQljdG1fZGF0YS0+Y3RtX2NvZWZmW2ldID0gY29u dmVydEZsb2F0VG9CaW5hcnkoKihjdG0gKyBpKSk7CisJfQorCisJYmxvYl9pZCA9IGNyZWF0ZV9i bG9iKGRpc3BsYXktPmRybV9mZCwKKwkJCQkoaW50ICopKGN0bV9kYXRhKSwgc2l6ZW9mKHN0cnVj dCBkcm1fY3RtKSk7CisJaWd0X2ZhaWxfb25fZiAoYmxvYl9pZCA8IDAsICJDVE06QkxPQiBJT0NU TCBGYWlsXG4iKTsKKwlyZXMgPSBzZXRfY29sb3JfcHJvcGVydHkoZGlzcGxheS0+ZHJtX2ZkLCBv dXRwdXQtPmNvbmZpZy5jcnRjLT5jcnRjX2lkLAorCQkJCURSTV9NT0RFX09CSkVDVF9DUlRDLCAi Q1RNIiwgYmxvYl9pZCk7CisJaWd0X2ZhaWxfb25fZiAocmVzIDwgMCwgIkNUTTpTZXQgUHJvcGVy dHkgRmFpbGVkXG4iKTsKKwlyZXMgPSBnZXRfY29sb3JfcHJvcGVydHkoZGlzcGxheS0+ZHJtX2Zk LCBvdXRwdXQtPmNvbmZpZy5jcnRjLT5jcnRjX2lkLCBEUk1fTU9ERV9PQkpFQ1RfQ1JUQywgIkNU TSIpOworCWlndF9mYWlsX29uX2YgKHJlcyA8IDAsICJDVE06R2V0IFByb3BlcnR5IEZhaWxlZFxu Iik7CisJYmxvYl9hZGRyZXNzID0gZ2V0X2Jsb2IoZGlzcGxheS0+ZHJtX2ZkLCByZXMsIHNpemVv ZihzdHJ1Y3QgZHJtX2N0bSkpOworCWN0bV9kYXRhID0gKHN0cnVjdCBkcm1fY3RtICopIChpbnRw dHJfdCkgYmxvYl9hZGRyZXNzOworCit9CisKK3N0YXRpYyB2b2lkIHRlc3RfcGlwZV9jdG1faW52 YWxpZF90ZXN0cyhzdHJ1Y3QgZGF0YV90ICpkYXRhLCBlbnVtIGJsb2Igb3ApCit7CisKKwlpbnQg cmVzLCBpLCBsZW5ndGg7CisJc3RydWN0IGRybV9jdG0gKmN0bV9kYXRhID0gTlVMTDsKKwlzdHJ1 Y3QgZHJtX21vZGVfY3JlYXRlX2Jsb2IgYmxvYjsKKwlzdHJ1Y3QgZHJtX21vZGVfY3JlYXRlX2Js b2IgZW1wdHlfYmxvYjsKKwllbnVtIHBpcGUgcGlwZTE7CisJaW50IHJldCA9IC0xOworCXN0cnVj dCBkcm1fY3RtICppbnZhbGlkX2N0bV9kYXRhID0gTlVMTDsKKwlpZ3RfZGlzcGxheV90ICpkaXNw bGF5ID0gJmRhdGEtPmRpc3BsYXk7CisJaWd0X291dHB1dF90ICpvdXRwdXQ7CisKKwljdG1fZGF0 YSA9IChzdHJ1Y3QgZHJtX2N0bSAqKW1hbGxvYyhzaXplb2Yoc3RydWN0IGRybV9jdG0pKTsKKwlm b3IgKGkgPSAwOyBpIDwgQ1NDX01BWF9WQUxTOyBpKyspIHsKKwkJY3RtX2RhdGEtPmN0bV9jb2Vm ZltpXSA9IDFMOworCX0KKworCWxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgZHJtX2N0bSk7CisJYmxv Yi5kYXRhID0gKHVpbnQ2NF90KWN0bV9kYXRhOworCWJsb2IubGVuZ3RoID0gbGVuZ3RoOworCWJs b2IuYmxvYl9pZCA9IC0xOworCisJaWYgKG9wID09IElOVkFMSURfQkxPQl9MRU5HVEgpCisJCWJs b2IubGVuZ3RoID0gMTA7CisJcmV0ID0gaW9jdGwoZGlzcGxheS0+ZHJtX2ZkLCBEUk1fSU9DVExf TU9ERV9DUkVBVEVQUk9QQkxPQiwgJmJsb2IpOworCWlndF9mYWlsX29uX2YgKHJldCA8IDAsICJH QU1NQTpCTE9CIElPQ1RMIEZhaWxcbiIpOworCisJaWYgKG9wID09IElOVkFMSURfQkxPQl9JRCkK KwkJYmxvYi5ibG9iX2lkID0gNDA5Nio0MDk2OworCWlmIChvcCA9PSBJTlZBTElEX0JMT0JfTlVM TCkKKwkJYmxvYiA9IGVtcHR5X2Jsb2I7CisJZm9yX2VhY2hfY29ubmVjdGVkX291dHB1dChkaXNw bGF5LCBvdXRwdXQpIHsKKwkJcGlwZTEgPSBvdXRwdXQtPmNvbmZpZy5waXBlOworCQlpZ3Rfb3V0 cHV0X3NldF9waXBlKG91dHB1dCwgcGlwZTEpOworCisJcmVzID0gc2V0X2NvbG9yX3Byb3BlcnR5 KGRpc3BsYXktPmRybV9mZCwgb3V0cHV0LT5jb25maWcuY3J0Yy0+Y3J0Y19pZCwKKwkJCQlEUk1f TU9ERV9PQkpFQ1RfQ1JUQywgIkNUTSIsIGJsb2IuYmxvYl9pZCk7CisJZnJlZShjdG1fZGF0YSk7 CisJZnJlZShpbnZhbGlkX2N0bV9kYXRhKTsKKwlpZ3RfZmFpbF9vbl9mIChyZXMgPj0gMCwgIkNU TTpJbnZhbGlkIFRlc3RzIEZhaWxlZCAlZFxuIiwgcmVzKTsKKwl9CisKK30KK3N0YXRpYyB2b2lk IHRlc3RfcGlwZV9jdG1fZnJhY3Rpb24oc3RydWN0IGRhdGFfdCAqZGF0YSwgaWd0X2Rpc3BsYXlf dCAqZGlzcGxheSwgaWd0X291dHB1dF90ICpvdXRwdXQsCisJCQkJZW51bSBjdG1fY29sb3IgdmFs dWUsIGludCBwaXBlMSkKK3sKKworCS8qRW5hYmxlIHJlZCBwbGFuZXMgKi8KKwlmYl9jb2xvci5y ZWQgID0gMTsKKwlmYl9jb2xvci5ncmVlbiA9IDA7CisJZmJfY29sb3IuYmx1ZSA9IDA7CisJZW5h YmxlX3BsYW5lKGRhdGEsIGRpc3BsYXksIG91dHB1dCwgcGlwZTEpOworCisJLypBcHBseSBmcmFj dGlvbmFsIGN0bSovCisJYXBwbHlfY3RtKGRpc3BsYXksIG91dHB1dCwgY3RtX2ZyYWN0aW9uKTsK KwllbmFibGVfcGxhbmUoZGF0YSwgZGlzcGxheSwgb3V0cHV0LCBwaXBlMSk7CisJLypSZXN0b3Jl IElkZW50aXR5IE1hdHJpeCovCisJYXBwbHlfY3RtKGRpc3BsYXksIG91dHB1dCwgY3RtX2lkZW50 aXR5KTsKKwllbmFibGVfcGxhbmUoZGF0YSwgZGlzcGxheSwgb3V0cHV0LCBwaXBlMSk7CisKKwor fQorCitzdGF0aWMgdm9pZCB0ZXN0X3BpcGVfY3RtX25lZ2F0aXZlKHN0cnVjdCBkYXRhX3QgKmRh dGEsIGlndF9kaXNwbGF5X3QgKmRpc3BsYXksIGlndF9vdXRwdXRfdCAqb3V0cHV0LAorCQkJCQll bnVtIGN0bV9jb2xvciB2YWx1ZSwgaW50IHBpcGUxKQoreworCWlndF9jcmNfdCBjcmNfYmxhY2ss IGNyY19yZWZlcmVuY2VfYmxhY2s7CisKKwkvKkVuYWJsZSBibGFjayBwbGFuZXMgYW5kIGNhcHR1 cmUgIHJlZmVyZW5jZSBjcmMqLworCWZiX2NvbG9yLnJlZCAgPSAwOworCWZiX2NvbG9yLmdyZWVu ID0gMDsKKwlmYl9jb2xvci5ibHVlID0gMDsKKwllbmFibGVfcGxhbmUoZGF0YSwgZGlzcGxheSwg b3V0cHV0LCBwaXBlMSk7CisJaWd0X3BpcGVfY3JjX2NvbGxlY3RfY3JjKGRhdGEtPnBpcGVfY3Jj LCAmY3JjX3JlZmVyZW5jZV9ibGFjayk7CisKKwkvKkVuYWJsZSByZWQgcGxhbmVzICovCisJZmJf Y29sb3IucmVkICA9IDE7CisJZmJfY29sb3IuZ3JlZW4gPSAwOworCWZiX2NvbG9yLmJsdWUgPSAw OworCWVuYWJsZV9wbGFuZShkYXRhLCBkaXNwbGF5LCBvdXRwdXQsIHBpcGUxKTsKKworCS8qQXBw bHkgbmVnYXRpdmUgY3RtKi8KKwlhcHBseV9jdG0oZGlzcGxheSwgb3V0cHV0LCBjdG1fbmVnYXRp dmUpOworCWVuYWJsZV9wbGFuZShkYXRhLCBkaXNwbGF5LCBvdXRwdXQsIHBpcGUxKTsKKwlpZ3Rf cGlwZV9jcmNfY29sbGVjdF9jcmMoZGF0YS0+cGlwZV9jcmMsICZjcmNfYmxhY2spOworCisJLypD b21wYXJlIENSQ1MqLworCWlndF9hc3NlcnRfY3JjX2VxdWFsKCZjcmNfcmVmZXJlbmNlX2JsYWNr LCAmY3JjX2JsYWNrKTsKKworCS8qUmVzdG9yaW5nIElkZW50aXR5IG1hdHJpeCovCisJYXBwbHlf Y3RtKGRpc3BsYXksIG91dHB1dCwgY3RtX2lkZW50aXR5KTsKKwllbmFibGVfcGxhbmUoZGF0YSwg ZGlzcGxheSwgb3V0cHV0LCBwaXBlMSk7CisKK30KKworc3RhdGljIHZvaWQgdGVzdF9waXBlX2N0 bV9yZXZlcnNlKHN0cnVjdCBkYXRhX3QgKmRhdGEsIGlndF9kaXNwbGF5X3QgKmRpc3BsYXksIGln dF9vdXRwdXRfdCAqb3V0cHV0LAorCQkJCQllbnVtIGN0bV9jb2xvciB2YWx1ZSwgaW50IHBpcGUx KQoreworCWlndF9jcmNfdCBjcmNfcmVmZXJlbmNlX3JlZCwgY3JjX3JlZmVyZW5jZV9ibHVlOwor CWlndF9jcmNfdCBjcmNfcmV2ZXJzZV9yZWQsIGNyY19yZXZlcnNlX2JsdWUsIGNyY19pZGVudGl0 eV9yZWQsIGNyY19pZGVudGl0eV9ibHVlOworCisJLypFbmFibGUgcmVkIHBsYW5lcyBhbmQgY2Fw dHVyZSAgcmVmZXJlbmNlIGNyYyovCisJZmJfY29sb3IucmVkICA9IDE7CisJZmJfY29sb3IuZ3Jl ZW4gPSAwOworCWZiX2NvbG9yLmJsdWUgPSAwOworCWVuYWJsZV9wbGFuZShkYXRhLCBkaXNwbGF5 LCBvdXRwdXQsIHBpcGUxKTsKKwlpZ3RfcGlwZV9jcmNfY29sbGVjdF9jcmMoZGF0YS0+cGlwZV9j cmMsICZjcmNfcmVmZXJlbmNlX3JlZCk7CisJLypBcHBseSByZXZlcnNlIGN0bSBtYXRyaXggb24g cmVkIHBsYW5lKi8KKwlhcHBseV9jdG0oZGlzcGxheSwgb3V0cHV0LCBjdG1fcmV2ZXJzZSk7CisJ ZW5hYmxlX3BsYW5lKGRhdGEsIGRpc3BsYXksIG91dHB1dCwgcGlwZTEpOworCWlndF9waXBlX2Ny Y19jb2xsZWN0X2NyYyhkYXRhLT5waXBlX2NyYywgJmNyY19yZXZlcnNlX3JlZCk7CisKKwkvKkFw cGx5IGlkZW50aXR5IGN0bSBtYXRyaXggb24gcmVkIHBsYW5lKi8KKwlhcHBseV9jdG0oZGlzcGxh eSwgb3V0cHV0LCBjdG1faWRlbnRpdHkpOworCWVuYWJsZV9wbGFuZShkYXRhLCBkaXNwbGF5LCBv dXRwdXQsIHBpcGUxKTsKKwlpZ3RfcGlwZV9jcmNfY29sbGVjdF9jcmMoZGF0YS0+cGlwZV9jcmMs ICZjcmNfaWRlbnRpdHlfcmVkKTsKKworCS8qRW5hYmxlICBibHVlIHBsYW5lcyBhbmQgY2FwdHVy ZSByZWZlcmVuY2UgY3JjKi8KKwlmYl9jb2xvci5yZWQgID0gMDsKKwlmYl9jb2xvci5ncmVlbiA9 IDA7CisJZmJfY29sb3IuYmx1ZSA9IDE7CisKKwllbmFibGVfcGxhbmUoZGF0YSwgZGlzcGxheSwg b3V0cHV0LCBwaXBlMSk7CisJaWd0X3BpcGVfY3JjX2NvbGxlY3RfY3JjKGRhdGEtPnBpcGVfY3Jj LCAmY3JjX3JlZmVyZW5jZV9ibHVlKTsKKworCS8qQXBwbHkgcmV2ZXJzZSBjdG0gbWF0cml4IG9u IGJsdWUgcGxhbmUqLworCWFwcGx5X2N0bShkaXNwbGF5LCBvdXRwdXQsIGN0bV9yZXZlcnNlKTsK KwllbmFibGVfcGxhbmUoZGF0YSwgZGlzcGxheSwgb3V0cHV0LCBwaXBlMSk7CisJaWd0X3BpcGVf Y3JjX2NvbGxlY3RfY3JjKGRhdGEtPnBpcGVfY3JjLCAmY3JjX3JldmVyc2VfYmx1ZSk7CisKKwkv KkFwcGx5IGlkZW50aXR5IGN0bSBtYXRyaXggb24gYmx1ZSBwbGFuZSovCisJYXBwbHlfY3RtKGRp c3BsYXksIG91dHB1dCwgY3RtX2lkZW50aXR5KTsKKwllbmFibGVfcGxhbmUoZGF0YSwgZGlzcGxh eSwgb3V0cHV0LCBwaXBlMSk7CisJaWd0X3BpcGVfY3JjX2NvbGxlY3RfY3JjKGRhdGEtPnBpcGVf Y3JjLCAmY3JjX2lkZW50aXR5X2JsdWUpOworCisJLypDb21wYXJlIGNyYyovCisKKwlpZ3RfYXNz ZXJ0X2NyY19lcXVhbCgmY3JjX3JlZmVyZW5jZV9yZWQsICZjcmNfaWRlbnRpdHlfcmVkKTsKKwlp Z3RfYXNzZXJ0X2NyY19lcXVhbCgmY3JjX3JlZmVyZW5jZV9ibHVlLCAmY3JjX2lkZW50aXR5X2Js dWUpOworCWlndF9hc3NlcnRfY3JjX2VxdWFsKCZjcmNfcmV2ZXJzZV9ibHVlLCAmY3JjX2lkZW50 aXR5X3JlZCk7CisJaWd0X2Fzc2VydF9jcmNfZXF1YWwoJmNyY19yZXZlcnNlX3JlZCwgJmNyY19p ZGVudGl0eV9ibHVlKTsKKwkvKlJlc3RvcmluZyBJZGVudGl0eSBNYXRyaXgqLworCWFwcGx5X2N0 bShkaXNwbGF5LCBvdXRwdXQsIGN0bV9pZGVudGl0eSk7CisJZW5hYmxlX3BsYW5lKGRhdGEsIGRp c3BsYXksIG91dHB1dCwgcGlwZTEpOworfQorCisvKgorVGhpcyBmdW5jdGlvbiB2ZXJpZnkgY3Rt IGZlYXR1cmUgdXNpbmcgYm90aCBDUkMgY2hlY2suCitTdGVwcyBmb2xsb3dlZCBhcmU6CisxLkVu YWJsZSBwbGFuZSBmb3IgY2FwdHVyaW5nIHJlZmVyZW5jZSBDUkMKKzIuQ2FwdHVyZSBSZWZlcmVu Y2UgQ1JDCiszLkFwcGx5IENTQyBvbiBQaXBlCis0LkVuYWJsZSBQbGFuZSAuQ1NDIHdpbGwgYmUg YXBwbGllZCBvbiB0aGlzIHBsYW5lcy4KKzUuQ2FwdHVyZSBDUkMgYW5kIGNvbXBhcmUgd2l0aCBy ZWZlcmVuY2UgQ1JDCis2LiBSZWdpc3RlciBWYWxpZGF0aW9uIGZvciBDUkMKKyovCisKK3N0YXRp YyB2b2lkIHRlc3RfcGlwZV9jdG0oc3RydWN0IGRhdGFfdCAqZGF0YSwgaWd0X2Rpc3BsYXlfdCAq ZGlzcGxheSwgaWd0X291dHB1dF90ICpvdXRwdXQsCisJCQkgIGVudW0gY3RtX2NvbG9yIHZhbHVl LCBpbnQgcGlwZTEpCit7CisKKwljb25zdCBmbG9hdCAqY3RtOworCWlndF9jcmNfdCAgY3JjX2N1 cnJlbnQsIGNyY19yZWZlcmVuY2UsIGNyY19yZWZlcmVuY2Vfd2hpdGU7CisJZmJfY29sb3IucmVk ICA9IDE7CisJZmJfY29sb3IuZ3JlZW4gPSAxOworCWZiX2NvbG9yLmJsdWUgPSAxOworCisJc3dp dGNoICh2YWx1ZSkgeworCWNhc2UgUkVEOgorCQljdG0gPSBjdG1fcmVkOworCQlmYl9jb2xvci5y ZWQgID0gMTsKKwkJZmJfY29sb3IuZ3JlZW4gPSAwOworCQlmYl9jb2xvci5ibHVlID0gMDsKKwkJ YnJlYWs7CisJY2FzZSBHUkVFTjoKKwkJY3RtID0gY3RtX2dyZWVuOworCQlmYl9jb2xvci5yZWQg ID0gMDsKKwkJZmJfY29sb3IuZ3JlZW4gPSAxOworCQlmYl9jb2xvci5ibHVlID0gMDsKKwkJYnJl YWs7CisJY2FzZSBCTFVFOgorCQljdG0gPSBjdG1fYmx1ZTsKKwkJZmJfY29sb3IucmVkICA9IDA7 CisJCWZiX2NvbG9yLmdyZWVuID0gMDsKKwkJZmJfY29sb3IuYmx1ZSA9IDE7CisKKwkJYnJlYWs7 CisJZGVmYXVsdDoKKwkJY3RtID0gY3RtX2lkZW50aXR5OworCQlicmVhazsKKwl9CisKKwkvKkVu YWJsZSBwbGFuZXMgYW5kIGNhcHR1cmUgcmVmZXJlbmNlIGNyYyovCisJZW5hYmxlX3BsYW5lKGRh dGEsIGRpc3BsYXksIG91dHB1dCwgcGlwZTEpOworCWlndF9waXBlX2NyY19jb2xsZWN0X2NyYyhk YXRhLT5waXBlX2NyYywgJmNyY19yZWZlcmVuY2UpOworCisJLypXaGl0ZSBQbGFuZSBFbmFibGlu ZyovCisJZmJfY29sb3IucmVkICA9IDE7CisJZmJfY29sb3IuZ3JlZW4gPSAxOworCWZiX2NvbG9y LmJsdWUgPSAxOworCisJZW5hYmxlX3BsYW5lKGRhdGEsIGRpc3BsYXksIG91dHB1dCwgcGlwZTEp OworCWlndF9waXBlX2NyY19jb2xsZWN0X2NyYyhkYXRhLT5waXBlX2NyYywgJmNyY19yZWZlcmVu Y2Vfd2hpdGUpOworCisJLypBcHBseSBDU0MqLworCWFwcGx5X2N0bShkaXNwbGF5LCBvdXRwdXQs IGN0bSk7CisJZW5hYmxlX3BsYW5lKGRhdGEsIGRpc3BsYXksIG91dHB1dCwgcGlwZTEpOworCWln dF9waXBlX2NyY19jb2xsZWN0X2NyYyhkYXRhLT5waXBlX2NyYywgJmNyY19jdXJyZW50KTsKKwlp Z3RfYXNzZXJ0X2NyY19lcXVhbCgmY3JjX3JlZmVyZW5jZSwgJmNyY19jdXJyZW50KTsKKworCS8q UmVzdG9yaW5nIHRoZSBVbml0IENTQyovCisJYXBwbHlfY3RtKGRpc3BsYXksIG91dHB1dCwgY3Rt X2lkZW50aXR5KTsKKwllbmFibGVfcGxhbmUoZGF0YSwgZGlzcGxheSwgb3V0cHV0LCBwaXBlMSk7 CisJaWd0X3BpcGVfY3JjX2NvbGxlY3RfY3JjKGRhdGEtPnBpcGVfY3JjLCAmY3JjX2N1cnJlbnQp OworCWlndF9hc3NlcnRfY3JjX2VxdWFsKCZjcmNfcmVmZXJlbmNlX3doaXRlLCAmY3JjX2N1cnJl bnQpOworfQorCitzdGF0aWMgdm9pZCBhcHBseV9nYW1tYShzdHJ1Y3QgZGF0YV90ICpkYXRhLCBp Z3RfZGlzcGxheV90ICpkaXNwbGF5LCBpZ3Rfb3V0cHV0X3QgKm91dHB1dCwgdWludDMyX3QgbnVt X3NhbXBsZXMsIGludCB1bml0X2dhbW1hKQoreworCXN0cnVjdCBkcm1fcGFsZXR0ZSAqZ2FtbWFf ZGF0YSA9ICBOVUxMOworCXN0cnVjdCBkcm1fcGFsZXR0ZSAqZGVnYW1tYV9kYXRhID0gIE5VTEw7 CisJaW50ICByZXQsIHJlcywgYmxvYl9pZF9nYW1tYSwgIGJsb2JfbGVuZ3RoX2dhbW1hOworCWlu dCAgYmxvYl9pZF9kZWdhbW1hLCAgYmxvYl9sZW5ndGhfZGVnYW1tYTsKKwl1aW50NjRfdCBudW1f c2FtcGxlc19nYW1tYSwgbnVtX3NhbXBsZXNfZGVnYW1tYTsKKwludW1fc2FtcGxlc19nYW1tYSA9 IG51bV9zYW1wbGVzOworCisJaWYgKG51bV9zYW1wbGVzID09IEJEV19TUExJVEdBTU1BX01BWF9W QUxTKSB7CisKKwkJa21zdGVzdF9nZXRfcHJvcGVydHkoZGlzcGxheS0+ZHJtX2ZkLCAgb3V0cHV0 LT5jb25maWcuY3J0Yy0+Y3J0Y19pZCwgRFJNX01PREVfT0JKRUNUX0NSVEMsICJDT0VGRklDSUVO VFNfQkVGT1JFX0NUTSIsIE5VTEwsICZudW1fc2FtcGxlc19kZWdhbW1hLCBOVUxMKTsKKwkJa21z dGVzdF9nZXRfcHJvcGVydHkoZGlzcGxheS0+ZHJtX2ZkLCAgb3V0cHV0LT5jb25maWcuY3J0Yy0+ Y3J0Y19pZCwgRFJNX01PREVfT0JKRUNUX0NSVEMsICJDT0VGRklDSUVOVFNfQUZURVJfQ1RNIiwg TlVMTCwgJm51bV9zYW1wbGVzX2dhbW1hLCBOVUxMKTsKKworCQlibG9iX2xlbmd0aF9kZWdhbW1h ID0gKHNpemVvZihzdHJ1Y3QgZHJtX3BhbGV0dGUpICsgKG51bV9zYW1wbGVzX2RlZ2FtbWEgKiBz aXplb2Yoc3RydWN0IGRybV9yMzJnMzJiMzIpKSk7CisJCWRlZ2FtbWFfZGF0YSA9IG1hbGxvYyhi bG9iX2xlbmd0aF9kZWdhbW1hKTsKKwkJd3JpdGVfZ2FtbWFfbHV0KG51bV9zYW1wbGVzX2RlZ2Ft bWEsIGRlZ2FtbWFfZGF0YS0+bHV0LCB1bml0X2dhbW1hKTsKKwkJYmxvYl9pZF9kZWdhbW1hID0g Y3JlYXRlX2Jsb2IoZGlzcGxheS0+ZHJtX2ZkLCAodWludDY0X3QgKikoZGVnYW1tYV9kYXRhKSwg YmxvYl9sZW5ndGhfZGVnYW1tYSk7CisJCWlmIChibG9iX2lkX2RlZ2FtbWEgPCAwKQorCQkJZnJl ZShkZWdhbW1hX2RhdGEpOworCQlpZ3RfZmFpbF9vbl9mIChibG9iX2lkX2RlZ2FtbWEgPCAwLCAi RGVHQU1NQTpCTE9CIElPQ1RMIEZhaWxcbiIpOworCisJfQorCisJaWYgKG51bV9zYW1wbGVzID09 IDApCisJCWJsb2JfbGVuZ3RoX2dhbW1hID0gMTsKKwllbHNlCisJCWJsb2JfbGVuZ3RoX2dhbW1h ID0gKHNpemVvZihzdHJ1Y3QgZHJtX3BhbGV0dGUpICsgKG51bV9zYW1wbGVzX2dhbW1hICogc2l6 ZW9mKHN0cnVjdCBkcm1fcjMyZzMyYjMyKSkpOworCisJZ2FtbWFfZGF0YSA9IG1hbGxvYyhibG9i X2xlbmd0aF9nYW1tYSk7CisJaWYgKG51bV9zYW1wbGVzID09IDApCisJCXdyaXRlX2dhbW1hX2x1 dCgwLCBnYW1tYV9kYXRhLT5sdXQsIHVuaXRfZ2FtbWEpOworCWVsc2UKKwkJd3JpdGVfZ2FtbWFf bHV0KG51bV9zYW1wbGVzX2dhbW1hLCBnYW1tYV9kYXRhLT5sdXQsIHVuaXRfZ2FtbWEpOworCisJ YmxvYl9pZF9nYW1tYSA9IGNyZWF0ZV9ibG9iKGRpc3BsYXktPmRybV9mZCwgKHVpbnQ2NF90ICop KGdhbW1hX2RhdGEpLCBibG9iX2xlbmd0aF9nYW1tYSk7CisJaWYgKGJsb2JfaWRfZ2FtbWEgPCAw KQorCQlmcmVlKGdhbW1hX2RhdGEpOworCWlndF9mYWlsX29uX2YgKGJsb2JfaWRfZ2FtbWEgPCAw LCAiR0FNTUE6QkxPQiBJT0NUTCBGYWlsXG4iKTsKKworCS8qRGlzYWJsaW5nIGRlZ2FtbWEqLwor CWlmICh1bml0X2dhbW1hID09IDIpIHsKKwkJYmxvYl9sZW5ndGhfZGVnYW1tYSA9IDE7CisJCWRl Z2FtbWFfZGF0YSA9IG1hbGxvYyhibG9iX2xlbmd0aF9kZWdhbW1hKTsKKwkJd3JpdGVfZ2FtbWFf bHV0KDAsIGRlZ2FtbWFfZGF0YS0+bHV0LCB1bml0X2dhbW1hKTsKKwkJYmxvYl9pZF9kZWdhbW1h ID0gY3JlYXRlX2Jsb2IoZGlzcGxheS0+ZHJtX2ZkLCAodWludDY0X3QgKikoZGVnYW1tYV9kYXRh KSwgYmxvYl9sZW5ndGhfZGVnYW1tYSk7CisJCWlmIChibG9iX2lkX2RlZ2FtbWEgPCAwKQorCQkJ ZnJlZShkZWdhbW1hX2RhdGEpOworCQlpZ3RfZmFpbF9vbl9mIChibG9iX2lkX2RlZ2FtbWEgPCAw LCAiRGVHQU1NQTpCTE9CIElPQ1RMIEZhaWxcbiIpOworCisJCXJlcyA9IHNldF9jb2xvcl9wcm9w ZXJ0eShkaXNwbGF5LT5kcm1fZmQsIG91dHB1dC0+Y29uZmlnLmNydGMtPmNydGNfaWQsCisJCQkJ RFJNX01PREVfT0JKRUNUX0NSVEMsICJQQUxFVFRFX0JFRk9SRV9DVE0iLCBibG9iX2lkX2RlZ2Ft bWEpOworCQlyZXQgPSBnZXRfY29sb3JfcHJvcGVydHkoZGlzcGxheS0+ZHJtX2ZkLCBvdXRwdXQt PmNvbmZpZy5jcnRjLT5jcnRjX2lkLAorCQkJCURSTV9NT0RFX09CSkVDVF9DUlRDLCAiUEFMRVRU RV9CRUZPUkVfQ1RNIik7CisJCWlmIChyZXMgPCAwKQorCQkJZnJlZShkZWdhbW1hX2RhdGEpOwor CQlpZ3RfZmFpbF9vbl9mIChyZXMgPCAwLCAiUEFMRVRURV9CRUZPUkVfQ1RNOlNldCBQcm9wZXJ0 eSBGYWlsZWRcbiIpOworCQlpZ3RfZmFpbF9vbl9mIChyZXQgPCAwLCAiUEFMRVRURV9CRUZPUkVf Q1RNOlNldCBQcm9wZXJ0eSBGYWlsZWRcbiIpOworCisJfQorCisJaWYgKG51bV9zYW1wbGVzID09 IEJEV19TUExJVEdBTU1BX01BWF9WQUxTKSB7CisKKwkJcmVzID0gc2V0X2NvbG9yX3Byb3BlcnR5 KGRpc3BsYXktPmRybV9mZCwgb3V0cHV0LT5jb25maWcuY3J0Yy0+Y3J0Y19pZCwKKwkJCQlEUk1f TU9ERV9PQkpFQ1RfQ1JUQywgIlBBTEVUVEVfQkVGT1JFX0NUTSIsIGJsb2JfaWRfZGVnYW1tYSk7 CisJCXJldCA9IGdldF9jb2xvcl9wcm9wZXJ0eShkaXNwbGF5LT5kcm1fZmQsIG91dHB1dC0+Y29u ZmlnLmNydGMtPmNydGNfaWQsCisJCQkJRFJNX01PREVfT0JKRUNUX0NSVEMsICJQQUxFVFRFX0JF Rk9SRV9DVE0iKTsKKwkJaWYgKHJlcyA8IDApCisJCQlmcmVlKGRlZ2FtbWFfZGF0YSk7CisJCWln dF9mYWlsX29uX2YgKHJlcyA8IDAsICJQQUxFVFRFX0JFRk9SRV9DVE06U2V0IFByb3BlcnR5IEZh aWxlZFxuIik7CisJCWlndF9mYWlsX29uX2YgKHJldCA8IDAsICJQQUxFVFRFX0JFRk9SRV9DVE06 U2V0IFByb3BlcnR5IEZhaWxlZFxuIik7CisJCWZyZWUoZGVnYW1tYV9kYXRhKTsKKwl9CisJcmVz ID0gc2V0X2NvbG9yX3Byb3BlcnR5KGRpc3BsYXktPmRybV9mZCwgb3V0cHV0LT5jb25maWcuY3J0 Yy0+Y3J0Y19pZCwKKwkJCURSTV9NT0RFX09CSkVDVF9DUlRDLCAiUEFMRVRURV9BRlRFUl9DVE0i LCBibG9iX2lkX2dhbW1hKTsKKworCWlmIChyZXMgPCAwKQorCQlmcmVlKGdhbW1hX2RhdGEpOwor CWlndF9mYWlsX29uX2YgKHJlcyA8IDAsICJQQUxFVFRFX0FGVEVSX0NUTTpTZXQgUHJvcGVydHkg RmFpbGVkXG4iKTsKKworCXJldCA9IGdldF9jb2xvcl9wcm9wZXJ0eShkaXNwbGF5LT5kcm1fZmQs IG91dHB1dC0+Y29uZmlnLmNydGMtPmNydGNfaWQsCisJCQlEUk1fTU9ERV9PQkpFQ1RfQ1JUQywg IlBBTEVUVEVfQUZURVJfQ1RNIik7CisKKwlmcmVlKGdhbW1hX2RhdGEpOworCWlndF9mYWlsX29u X2YgKHJldCA8IDAsICJQQUxFVFRFX0JFRk9SRV9DVE06U2V0IFByb3BlcnR5IEZhaWxlZFxuIik7 Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RfcGlwZV9nYW1tYV9pbnZhbGlkX3Rlc3RzKHN0cnVjdCBk YXRhX3QgKmRhdGEsIHVpbnQzMl90IG51bV9zYW1wbGVzLCBlbnVtIGJsb2Igb3ApCit7CisJaW50 IHJlcywgYmxvYl9sZW5ndGg7CisJc3RydWN0IGRybV9wYWxldHRlICpnYW1tYV9kYXRhID0gIE5V TEw7CisJc3RydWN0IGRybV9tb2RlX2NyZWF0ZV9ibG9iIGJsb2I7CisJc3RydWN0IGRybV9tb2Rl X2NyZWF0ZV9ibG9iIGVtcHR5X2Jsb2I7CisJZW51bSBwaXBlIHBpcGUxOworCWludCByZXQgPSAt MTsKKworCWlndF9kaXNwbGF5X3QgKmRpc3BsYXkgPSAmZGF0YS0+ZGlzcGxheTsKKwlpZ3Rfb3V0 cHV0X3QgKm91dHB1dDsKKwlpZiAobnVtX3NhbXBsZXMgPT0gMCkKKwkJYmxvYl9sZW5ndGggPSAx OworCWVsc2UKKwkJYmxvYl9sZW5ndGggPSAoc2l6ZW9mKHN0cnVjdCBkcm1fcGFsZXR0ZSkgKyAo bnVtX3NhbXBsZXMgKiBzaXplb2Yoc3RydWN0IGRybV9yMzJnMzJiMzIpKSk7CisKKwlnYW1tYV9k YXRhID0gbWFsbG9jKGJsb2JfbGVuZ3RoKTsKKwlpZiAob3AgPT0gSU5WQUxJRF9CTE9CX0RBVEEp CisJCXdyaXRlX2dhbW1hX2x1dCgwLCBnYW1tYV9kYXRhLT5sdXQsIDEpOworCWVsc2UKKwkJd3Jp dGVfZ2FtbWFfbHV0KG51bV9zYW1wbGVzLCBnYW1tYV9kYXRhLT5sdXQsIDEpOworCWJsb2IuZGF0 YSA9ICh1aW50NjRfdClnYW1tYV9kYXRhOworCWJsb2IubGVuZ3RoID0gYmxvYl9sZW5ndGg7CisJ YmxvYi5ibG9iX2lkID0gLTE7CisKKwlpZiAob3AgPT0gSU5WQUxJRF9CTE9CX0xFTkdUSCkKKwkJ YmxvYi5sZW5ndGggPSAxMDsKKworCXJldCA9IGlvY3RsKGRpc3BsYXktPmRybV9mZCwgRFJNX0lP Q1RMX01PREVfQ1JFQVRFUFJPUEJMT0IsICZibG9iKTsKKwlpZ3RfZmFpbF9vbl9mIChyZXQgPCAw LCAiR0FNTUE6QkxPQiBJT0NUTCBGYWlsXG4iKTsKKworCWlmIChvcCA9PSBJTlZBTElEX0JMT0Jf SUQpCisJCWJsb2IuYmxvYl9pZCA9IDQwOTYqNDA5NjsKKwlpZiAob3AgPT0gSU5WQUxJRF9CTE9C X05VTEwpCisJCWJsb2IgPSBlbXB0eV9ibG9iOworCWZvcl9lYWNoX2Nvbm5lY3RlZF9vdXRwdXQo ZGlzcGxheSwgb3V0cHV0KSB7CisJCXBpcGUxID0gb3V0cHV0LT5jb25maWcucGlwZTsKKwkJaWd0 X291dHB1dF9zZXRfcGlwZShvdXRwdXQsIHBpcGUxKTsKKworCXJlcyA9IHNldF9jb2xvcl9wcm9w ZXJ0eShkaXNwbGF5LT5kcm1fZmQsIG91dHB1dC0+Y29uZmlnLmNydGMtPmNydGNfaWQsCisJCQkJ RFJNX01PREVfT0JKRUNUX0NSVEMsICJQQUxFVFRFX0FGVEVSX0NUTSIsIGJsb2IuYmxvYl9pZCk7 CisJZnJlZShnYW1tYV9kYXRhKTsKKwlpZiAob3AgPT0gSU5WQUxJRF9CTE9CX0RBVEEpCisJCWln dF9mYWlsX29uX2YgKHJlcyA8IDAsICJHQU1NQTpJbnZhbGlkIERhdGEgVGVzdHMgRmFpbGVkICVk XG4iLCByZXMpOworCWVsc2UKKwkJaWd0X2ZhaWxfb25fZiAocmVzID49IDAsICJHQU1NQTpJbnZh bGlkIFRlc3RzIEZhaWxlZCAlZFxuIiwgcmVzKTsKKwlhcHBseV9nYW1tYShkYXRhLCBkaXNwbGF5 LCBvdXRwdXQsIDAsIDEpOworCX0KK30KKworc3RhdGljIHZvaWQgdGVzdF9waXBlX2RlZ2FtbWFf aW52YWxpZF90ZXN0cyhzdHJ1Y3QgZGF0YV90ICpkYXRhLCB1aW50MzJfdCBudW1fc2FtcGxlcywg ZW51bSBibG9iIG9wKQoreworCisJaW50IHJlcywgYmxvYl9sZW5ndGg7CisJc3RydWN0IGRybV9w YWxldHRlICpkZWdhbW1hX2RhdGEgPSAgTlVMTDsKKwlzdHJ1Y3QgZHJtX21vZGVfY3JlYXRlX2Js b2IgYmxvYjsKKwlzdHJ1Y3QgZHJtX21vZGVfY3JlYXRlX2Jsb2IgZW1wdHlfYmxvYjsKKwllbnVt IHBpcGUgcGlwZTE7CisJaW50IHJldCA9IC0xOworCisJaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSA9 ICZkYXRhLT5kaXNwbGF5OworCWlndF9vdXRwdXRfdCAqb3V0cHV0OworCisJaWYgKG51bV9zYW1w bGVzID09IDApCisJCWJsb2JfbGVuZ3RoID0gMTsKKwllbHNlCisJCWJsb2JfbGVuZ3RoID0gKHNp emVvZihzdHJ1Y3QgZHJtX3BhbGV0dGUpICsgKG51bV9zYW1wbGVzICogc2l6ZW9mKHN0cnVjdCBk cm1fcjMyZzMyYjMyKSkpOworCWRlZ2FtbWFfZGF0YSA9IG1hbGxvYyhibG9iX2xlbmd0aCk7CisJ aWYgKG9wID09IElOVkFMSURfQkxPQl9EQVRBKQorCQl3cml0ZV9nYW1tYV9sdXQoMCwgZGVnYW1t YV9kYXRhLT5sdXQsIDEpOworCWVsc2UKKwkJd3JpdGVfZ2FtbWFfbHV0KG51bV9zYW1wbGVzLCBk ZWdhbW1hX2RhdGEtPmx1dCwgMSk7CisKKwlibG9iLmRhdGEgPSAodWludDY0X3QpZGVnYW1tYV9k YXRhOworCWJsb2IubGVuZ3RoID0gYmxvYl9sZW5ndGg7CisJYmxvYi5ibG9iX2lkID0gLTE7CisK KwlpZiAob3AgPT0gSU5WQUxJRF9CTE9CX0xFTkdUSCkKKwkJYmxvYi5sZW5ndGggPSAxMDsKKwor CXJldCA9IGlvY3RsKGRpc3BsYXktPmRybV9mZCwgRFJNX0lPQ1RMX01PREVfQ1JFQVRFUFJPUEJM T0IsICZibG9iKTsKKwlpZ3RfZmFpbF9vbl9mIChyZXQgPCAwLCAiR0FNTUE6QkxPQiBJT0NUTCBG YWlsXG4iKTsKKworCWlmIChvcCA9PSBJTlZBTElEX0JMT0JfSUQpCisJCWJsb2IuYmxvYl9pZCA9 IDQwOTYqNDA5NjsKKwlpZiAob3AgPT0gSU5WQUxJRF9CTE9CX05VTEwpCisJCWJsb2IgPSBlbXB0 eV9ibG9iOworCWZvcl9lYWNoX2Nvbm5lY3RlZF9vdXRwdXQoZGlzcGxheSwgb3V0cHV0KSB7CisJ CXBpcGUxID0gb3V0cHV0LT5jb25maWcucGlwZTsKKwkJaWd0X291dHB1dF9zZXRfcGlwZShvdXRw dXQsIHBpcGUxKTsKKworCXJlcyA9IHNldF9jb2xvcl9wcm9wZXJ0eShkaXNwbGF5LT5kcm1fZmQs IG91dHB1dC0+Y29uZmlnLmNydGMtPmNydGNfaWQsCisJCQkJRFJNX01PREVfT0JKRUNUX0NSVEMs ICJQQUxFVFRFX0JFRk9SRV9DVE0iLCBibG9iLmJsb2JfaWQpOworCWZyZWUoZGVnYW1tYV9kYXRh KTsKKwlpZiAob3AgPT0gSU5WQUxJRF9CTE9CX0RBVEEpCisJCWlndF9mYWlsX29uX2YgKHJlcyA8 IDAsICJERUdBTU1BOkludmFsaWQgRGF0YSBUZXN0cyBGYWlsZWQgJWRcbiIsIHJlcyk7CisJZWxz ZQorCQlpZ3RfZmFpbF9vbl9mIChyZXMgPj0gMCwgIkRFR0FNTUE6SW52YWxpZCBUZXN0cyBGYWls ZWQgJWRcbiIsIHJlcyk7CisJYXBwbHlfZ2FtbWEoZGF0YSwgZGlzcGxheSwgb3V0cHV0LCAwLCAx KTsKKwl9CisKKworfQorLyoKK1RoaXMgZnVuY3Rpb24gdmVyaWZ5IGN0bSBmZWF0dXJlIHVzaW5n IGJvdGggQ1JDIGNoZWNrLgorU3RlcHMgZm9sbG93ZWQgYXJlOgorCTEuRW5hYmxlIEJsYWNrIHBs YW5lIGFuZCBjYXB0dXJlIENSQ19SRUZFUkVOQ0VfQkxBQ0suCisJMi5FbmFibGUgV2hpdGUgcGxh bmUgYW5kIGNhcHR1cmUgQ1JTX1JFRkVSRU5DRV9XSElURQorCTMuRW5hYmxlIFJlZCBwbGFuZS4K Kwk0LkFwcGx5IExPVyBHYW1tYS4KKwk1LkNhcHR1cmUgQ1JDX0JsYWNrLgorCTYuQXBwbHkgSGln aCBHYW1tYSBhbmQgY2FwdHVyZSBDUkNfV2hpdGUuCisJNy5DUkNfQmxhY2sgc2hvdWxkIGJlIGVx dWl2YWxlbnQgdG8gQ1JDX1JFRkVSRU5DRV9CTEFDSworCTguQ1JDX1doaXRlIHNob3VsZCBiZSBl cXVpdmFsZW50IHRvIENSQ19SRUZFUkVOQ0VfV0hpdGUuCisKKworKi8KK3N0YXRpYyB2b2lkIHRl c3RfcGlwZV9nYW1tYShzdHJ1Y3QgZGF0YV90ICpkYXRhLCBpZ3RfZGlzcGxheV90ICpkaXNwbGF5 LCBpZ3Rfb3V0cHV0X3QgKm91dHB1dCwKKwkJCQl1aW50MzJfdCBudW1fc2FtcGxlcywgaW50IHZh bHVlcywgaW50IHBpcGUxKQoreworCWludCB1bml0X2dhbW1hLCBkaXNhYmxlX2dhbW1hOworCWln dF9jcmNfdCBjcmNfYmxhY2ssIGNyY193aGl0ZSwgY3JjX3JlZmVyZW5jZV93aGl0ZSwgY3JjX3Jl ZmVyZW5jZV9ibGFjazsKKworCisJLypFbmFibGUgYmxhY2sgcGxhbmVzIGFuZCBjYXB0dXJlIHJl ZmVyZW5jZSBjcmMqLworCisJZmJfY29sb3IucmVkID0gMDsKKwlmYl9jb2xvci5ncmVlbiA9IDA7 CisJZmJfY29sb3IuYmx1ZSA9IDA7CisJZW5hYmxlX3BsYW5lKGRhdGEsIGRpc3BsYXksIG91dHB1 dCwgcGlwZTEpOworCWlndF9waXBlX2NyY19jb2xsZWN0X2NyYyhkYXRhLT5waXBlX2NyYywgJmNy Y19yZWZlcmVuY2VfYmxhY2spOworCS8qRW5hYmxlIHdoaXRlIHBsYW5lIGFuZCBjYXB0dXJlIHJl ZmVybmNlIGNyYyovCisJZmJfY29sb3IucmVkID0gMTsKKwlmYl9jb2xvci5ncmVlbiA9IDE7CisJ ZmJfY29sb3IuYmx1ZSA9IDE7CisJZW5hYmxlX3BsYW5lKGRhdGEsIGRpc3BsYXksIG91dHB1dCwg cGlwZTEpOworCWlndF9waXBlX2NyY19jb2xsZWN0X2NyYyhkYXRhLT5waXBlX2NyYywgJmNyY19y ZWZlcmVuY2Vfd2hpdGUpOworCisJLypFbmFibGUgcmVkIHBsYW5lcyBhbmQgYXBwbHkgdW5pdCBn YW1tYSovCisJZmJfY29sb3IucmVkID0gMTsKKwlmYl9jb2xvci5ncmVlbiA9IDA7CisJZmJfY29s b3IuYmx1ZSA9IDA7CisJdW5pdF9nYW1tYSA9IDA7IC8qMCAtPiB3aGl0ZSAxLT5ibGFjayovCisJ YXBwbHlfZ2FtbWEoZGF0YSwgZGlzcGxheSwgb3V0cHV0LCBudW1fc2FtcGxlcywgdW5pdF9nYW1t YSk7CisJZW5hYmxlX3BsYW5lKGRhdGEsIGRpc3BsYXksIG91dHB1dCwgcGlwZTEpOworCWlndF9w aXBlX2NyY19jb2xsZWN0X2NyYyhkYXRhLT5waXBlX2NyYywgJmNyY193aGl0ZSk7CisKKwkvKiBB cHBseSAweDAgZ2FtbWEgKi8KKwl1bml0X2dhbW1hID0gIDE7CisKKwlhcHBseV9nYW1tYShkYXRh LCBkaXNwbGF5LCBvdXRwdXQsIG51bV9zYW1wbGVzLCB1bml0X2dhbW1hKTsKKwllbmFibGVfcGxh bmUoZGF0YSwgZGlzcGxheSwgb3V0cHV0LCBwaXBlMSk7CisJaWd0X3BpcGVfY3JjX2NvbGxlY3Rf Y3JjKGRhdGEtPnBpcGVfY3JjLCAmY3JjX2JsYWNrKTsKKwlpZ3RfYXNzZXJ0X2NyY19lcXVhbCgm Y3JjX3JlZmVyZW5jZV9ibGFjaywgJmNyY19ibGFjayk7CisJaWd0X2Fzc2VydF9jcmNfZXF1YWwo JmNyY19yZWZlcmVuY2Vfd2hpdGUsICZjcmNfd2hpdGUpOworCisJLypEaXNhYmxpbmcgZ2FtbWEq LworCWlmIChudW1fc2FtcGxlcyA9PSBCRFdfU1BMSVRHQU1NQV9NQVhfVkFMUykgeworCQlkaXNh YmxlX2dhbW1hID0gMjsKKwkJYXBwbHlfZ2FtbWEoZGF0YSwgZGlzcGxheSwgb3V0cHV0LCAwLCBk aXNhYmxlX2dhbW1hKTsKKwl9IGVsc2UgeworCQlhcHBseV9nYW1tYShkYXRhLCBkaXNwbGF5LCBv dXRwdXQsIDAsIHVuaXRfZ2FtbWEpOworCX0KKworfQorCitzdGF0aWMgdm9pZCB0ZXN0X2xlZ2Fj eV9nYW1tYSAoc3RydWN0IGRhdGFfdCAqZGF0YSwgaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSwgaWd0 X291dHB1dF90ICpvdXRwdXQsIGludCBwaXBlMSkKK3sKKwlpbnQgcmV0LCBpOworCXVpbnQxNl90 ICp2YWwgPSBtYWxsb2Moc2l6ZW9mKHVpbnQxNl90KSAqIDI1Nik7CisJZmxvYXQgZ2FtbWExID0g MS4wOworCWZiX2NvbG9yLnJlZCA9IDE7CisJZmJfY29sb3IuZ3JlZW4gPSAxOworCWZiX2NvbG9y LmJsdWUgPSAxOworCWVuYWJsZV9wbGFuZShkYXRhLCBkaXNwbGF5LCBvdXRwdXQsIHBpcGUxKTsK Kwlmb3IgKGkgPSAwOyBpIDwgMjU2IDsgaSsrKSB7CisJCXZhbFtpXSA9IDB4ZmZmZiAqIHBvdygo aS8yNTUpLCBnYW1tYTEpOworCisJfQorCWZvcl9lYWNoX2Nvbm5lY3RlZF9vdXRwdXQgKGRpc3Bs YXksIG91dHB1dCkgeworCQlyZXQgPSBkcm1Nb2RlQ3J0Y1NldEdhbW1hIChkaXNwbGF5LT5kcm1f ZmQsIG91dHB1dC0+Y29uZmlnLmNydGMtPmNydGNfaWQsIDI1NiwgdmFsLCB2YWwsIHZhbCk7CisJ CWlndF9hc3NlcnRfbHRlKDAsIHJldCk7CisKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RfcGlw ZV9jb2xvcihzdHJ1Y3QgZGF0YV90ICpkYXRhLCBlbnVtIGNvbG9yX3Byb3BlcnR5IHByb3BfbmFt ZSwgaW50IHZhbHVlKQoreworCWlndF9kaXNwbGF5X3QgKmRpc3BsYXkgPSAmZGF0YS0+ZGlzcGxh eTsKKwlpZ3Rfb3V0cHV0X3QgKm91dHB1dDsKKwlpZ3RfcGxhbmVfdCAqcGxhbmU7CisJZW51bSBw aXBlIHBpcGUxOworCWludCByZXM7CisKKwlmb3JfZWFjaF9jb25uZWN0ZWRfb3V0cHV0KGRpc3Bs YXksIG91dHB1dCkgeworCQlwaXBlMSA9IG91dHB1dC0+Y29uZmlnLnBpcGU7CisJCWlndF9vdXRw dXRfc2V0X3BpcGUob3V0cHV0LCBwaXBlMSk7CisJCXJlcyA9IGdldF9jb2xvcl9wcm9wZXJ0eShk aXNwbGF5LT5kcm1fZmQsIG91dHB1dC0+Y29uZmlnLmNydGMtPmNydGNfaWQsIERSTV9NT0RFX09C SkVDVF9DUlRDLCAiQ1RNIik7CisJCWlndF9yZXF1aXJlIChyZXMgPj0gMCk7CisJCXJlcyA9IGdl dF9jb2xvcl9wcm9wZXJ0eShkaXNwbGF5LT5kcm1fZmQsIG91dHB1dC0+Y29uZmlnLmNydGMtPmNy dGNfaWQsIERSTV9NT0RFX09CSkVDVF9DUlRDLCAiUEFMRVRURV9CRUZPUkVfQ1RNIik7CisJCWln dF9yZXF1aXJlIChyZXMgPj0gMCk7CisJCXJlcyA9IGdldF9jb2xvcl9wcm9wZXJ0eShkaXNwbGF5 LT5kcm1fZmQsIG91dHB1dC0+Y29uZmlnLmNydGMtPmNydGNfaWQsIERSTV9NT0RFX09CSkVDVF9D UlRDLCAiUEFMRVRURV9BRlRFUl9DVE0iKTsKKwkJaWd0X3JlcXVpcmUgKHJlcyA+PSAwKTsKKwor CQlzd2l0Y2ggKHByb3BfbmFtZSkgeworCQljYXNlIGdhbW1hX3Byb3BlcnR5XzhiaXQ6CisJCQl0 ZXN0X3BpcGVfZ2FtbWEoZGF0YSwgZGlzcGxheSwgb3V0cHV0LAorCQkJCQlCRFdfOEJJVF9HQU1N QV9NQVhfVkFMUywgdmFsdWUsIHBpcGUxKTsKKwkJCWJyZWFrOworCQljYXNlIGxlZ2FjeV9nYW1t YToKKwkJCXRlc3RfbGVnYWN5X2dhbW1hKGRhdGEsIGRpc3BsYXksIG91dHB1dCwgcGlwZTEpOwor CQkJYnJlYWs7CisJCWNhc2UgZ2FtbWFfcHJvcGVydHlfMTBiaXQ6CisJCQl0ZXN0X3BpcGVfZ2Ft bWEoZGF0YSwgZGlzcGxheSwgb3V0cHV0LCBCRFdfMTBCSVRfR0FNTUFfTUFYX1ZBTFMsIHZhbHVl LCBwaXBlMSk7CisJCQlicmVhazsKKwkJY2FzZSBjdG1fcHJvcGVydHk6CisJCQlzd2l0Y2ggKHZh bHVlKSB7CisJCQljYXNlIFJFVkVSU0U6CisJCQkJdGVzdF9waXBlX2N0bV9yZXZlcnNlKGRhdGEs IGRpc3BsYXksIG91dHB1dCwgdmFsdWUsIHBpcGUxKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgTkVH QVRJVkU6CisJCQkJdGVzdF9waXBlX2N0bV9uZWdhdGl2ZShkYXRhLCBkaXNwbGF5LCBvdXRwdXQs IHZhbHVlLCBwaXBlMSk7CisJCQkJYnJlYWs7CisJCQljYXNlIEZSQUNUSU9OOgorCQkJCXRlc3Rf cGlwZV9jdG1fZnJhY3Rpb24oZGF0YSwgZGlzcGxheSwgb3V0cHV0LCB2YWx1ZSwgcGlwZTEpOwor CQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQl0ZXN0X3BpcGVfY3RtKGRhdGEsIGRpc3BsYXks IG91dHB1dCwgdmFsdWUsIHBpcGUxKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWJyZWFrOworCQlj YXNlIGdhbW1hX3Byb3BlcnR5X3NwbGl0OgorCQkJdGVzdF9waXBlX2dhbW1hKGRhdGEsIGRpc3Bs YXksIG91dHB1dCwKKwkJCQkJQkRXX1NQTElUR0FNTUFfTUFYX1ZBTFMsIHZhbHVlLCBwaXBlMSk7 CisJCQlicmVhazsKKwkJY2FzZSBnYW1tYV9wcm9wZXJ0eV8xMmJpdDoKKwkJCXRlc3RfcGlwZV9n YW1tYShkYXRhLCBkaXNwbGF5LCBvdXRwdXQsCisJCQkJCUJEV18xMkJJVF9HQU1NQV9NQVhfVkFM UywgdmFsdWUsIHBpcGUxKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJaWd0X2luZm8oIklu dmFsaWQgVGVzdFxuIik7CisJCQlicmVhazsKKwkJfQorCQljbGVhbnVwX2ZiKGRhdGEpOworCQlw bGFuZSA9IGlndF9vdXRwdXRfZ2V0X3BsYW5lKG91dHB1dCwgSUdUX1BMQU5FXzIpOworCQljbGVh bnVwX2NydGMoZGF0YSwgb3V0cHV0LCBwbGFuZSk7CisJfQorfQorCisKK2lndF9tYWluCit7CisJ c3RydWN0IGRhdGFfdCBkYXRhID0ge307CisJaW50IHZhbHVlcyA9IDE7CisJaWd0X3NraXBfb25f c2ltdWxhdGlvbigpOworCWlndF9maXh0dXJleworCQlkYXRhLmRybV9mZCA9IGRybV9vcGVuX2Ry aXZlcl9tYXN0ZXIoRFJJVkVSX0lOVEVMKTsKKwkJa21zdGVzdF9zZXRfdnRfZ3JhcGhpY3NfbW9k ZSgpOworCQlpZ3RfZGlzcGxheV9pbml0KCZkYXRhLmRpc3BsYXksIGRhdGEuZHJtX2ZkKTsKKwkJ aWd0X3JlcXVpcmVfcGlwZV9jcmMoKTsKKwl9CisKKwlpZ3Rfc3VidGVzdCgiY3RtLXJlZCIpCisJ CXRlc3RfcGlwZV9jb2xvcigmZGF0YSwgY3RtX3Byb3BlcnR5LCBSRUQpOworCWlndF9zdWJ0ZXN0 KCJjdG0tZ3JlZW4iKQorCQl0ZXN0X3BpcGVfY29sb3IoJmRhdGEsIGN0bV9wcm9wZXJ0eSwgR1JF RU4pOworCWlndF9zdWJ0ZXN0KCJjdG0tYmx1ZSIpCisJCXRlc3RfcGlwZV9jb2xvcigmZGF0YSwg Y3RtX3Byb3BlcnR5LCBCTFVFKTsKKwlpZ3Rfc3VidGVzdCgiY3RtLXJldmVyc2UiKQorCQl0ZXN0 X3BpcGVfY29sb3IoJmRhdGEsIGN0bV9wcm9wZXJ0eSwgUkVWRVJTRSk7CisJaWd0X3N1YnRlc3Qo ImN0bS1uZWdhdGl2ZSIpCisJCXRlc3RfcGlwZV9jb2xvcigmZGF0YSwgY3RtX3Byb3BlcnR5LCBO RUdBVElWRSk7CisJaWd0X3N1YnRlc3QoImN0bS1mcmFjdGlvbiIpCisJCXRlc3RfcGlwZV9jb2xv cigmZGF0YSwgY3RtX3Byb3BlcnR5LCBGUkFDVElPTik7CisJaWd0X3N1YnRlc3QoImN0bS1pbnZh bGlkLWJsb2ItaWQiKQorCQl0ZXN0X3BpcGVfY3RtX2ludmFsaWRfdGVzdHMoJmRhdGEsIElOVkFM SURfQkxPQl9JRCk7CisJaWd0X3N1YnRlc3QoImN0bS1pbnZhbGlkLWJsb2ItbnVsbCIpCisJCXRl c3RfcGlwZV9jdG1faW52YWxpZF90ZXN0cygmZGF0YSwgSU5WQUxJRF9CTE9CX05VTEwpOworCWln dF9zdWJ0ZXN0KCJjdG0taW52YWxpZC1ibG9iLWxlbmd0aCIpCisJCXRlc3RfcGlwZV9jdG1faW52 YWxpZF90ZXN0cygmZGF0YSwgSU5WQUxJRF9CTE9CX0xFTkdUSCk7CisJaWd0X3N1YnRlc3QoImdh bW1hLWxlZ2FjeSIpCisJCXRlc3RfcGlwZV9jb2xvcigmZGF0YSwgbGVnYWN5X2dhbW1hLCB2YWx1 ZXMpOworCWlndF9zdWJ0ZXN0KCJnYW1tYS04Yml0IikKKwkJdGVzdF9waXBlX2NvbG9yKCZkYXRh LCBnYW1tYV9wcm9wZXJ0eV84Yml0LCB2YWx1ZXMpOworCWlndF9zdWJ0ZXN0KCJnYW1tYS0xMGJp dCIpCisJCXRlc3RfcGlwZV9jb2xvcigmZGF0YSwgZ2FtbWFfcHJvcGVydHlfMTBiaXQsIHZhbHVl cyk7CisJaWd0X3N1YnRlc3QoImdhbW1hLTEyYml0IikKKwkJdGVzdF9waXBlX2NvbG9yKCZkYXRh LCBnYW1tYV9wcm9wZXJ0eV8xMmJpdCwgdmFsdWVzKTsKKwlpZ3Rfc3VidGVzdCgiZ2FtbWEtc3Bs aXQiKQorCQl0ZXN0X3BpcGVfY29sb3IoJmRhdGEsIGdhbW1hX3Byb3BlcnR5X3NwbGl0LCB2YWx1 ZXMpOworCWlndF9zdWJ0ZXN0KCJnYW1tYS1pbnZhbGlkLWJsb2ItaWQiKQorCQl0ZXN0X3BpcGVf Z2FtbWFfaW52YWxpZF90ZXN0cygmZGF0YSwgQkRXXzEyQklUX0dBTU1BX01BWF9WQUxTLCBJTlZB TElEX0JMT0JfSUQpOworCWlndF9zdWJ0ZXN0KCJnYW1tYS1pbnZhbGlkLWJsb2ItbnVsbCIpCisJ CXRlc3RfcGlwZV9nYW1tYV9pbnZhbGlkX3Rlc3RzKCZkYXRhLCBCRFdfMTJCSVRfR0FNTUFfTUFY X1ZBTFMsIElOVkFMSURfQkxPQl9OVUxMKTsKKwlpZ3Rfc3VidGVzdCgiZ2FtbWEtaW52YWxpZC1i bG9iLWxlbmd0aCIpCisJCXRlc3RfcGlwZV9nYW1tYV9pbnZhbGlkX3Rlc3RzKCZkYXRhLCBCRFdf MTJCSVRfR0FNTUFfTUFYX1ZBTFMsIElOVkFMSURfQkxPQl9MRU5HVEgpOworCWlndF9zdWJ0ZXN0 KCJnYW1tYS04Yml0LWludmFsaWQtYmxvYi1kYXRhIikKKwkJdGVzdF9waXBlX2dhbW1hX2ludmFs aWRfdGVzdHMoJmRhdGEsIEJEV184QklUX0dBTU1BX01BWF9WQUxTLCBJTlZBTElEX0JMT0JfREFU QSk7CisJaWd0X3N1YnRlc3QoImdhbW1hLTEwYml0LWludmFsaWQtYmxvYi1kYXRhIikKKwkJdGVz dF9waXBlX2dhbW1hX2ludmFsaWRfdGVzdHMoJmRhdGEsIEJEV18xMEJJVF9HQU1NQV9NQVhfVkFM UywgSU5WQUxJRF9CTE9CX0RBVEEpOworCWlndF9zdWJ0ZXN0KCJnYW1tYS0xMmJpdC1pbnZhbGlk LWJsb2ItZGF0YSIpCisJCXRlc3RfcGlwZV9nYW1tYV9pbnZhbGlkX3Rlc3RzKCZkYXRhLCBCRFdf MTJCSVRfR0FNTUFfTUFYX1ZBTFMsIElOVkFMSURfQkxPQl9EQVRBKTsKKwlpZ3Rfc3VidGVzdCgi ZGVnYW1tYS1pbnZhbGlkLWJsb2ItaWQiKQorCQl0ZXN0X3BpcGVfZGVnYW1tYV9pbnZhbGlkX3Rl c3RzKCZkYXRhLCBCRFdfMTJCSVRfR0FNTUFfTUFYX1ZBTFMsIElOVkFMSURfQkxPQl9JRCk7CisJ aWd0X3N1YnRlc3QoImRlZ2FtbWEtaW52YWxpZC1ibG9iLW51bGwiKQorCQl0ZXN0X3BpcGVfZGVn YW1tYV9pbnZhbGlkX3Rlc3RzKCZkYXRhLCBCRFdfMTJCSVRfR0FNTUFfTUFYX1ZBTFMsIElOVkFM SURfQkxPQl9OVUxMKTsKKwlpZ3Rfc3VidGVzdCgiZGVnYW1tYS1pbnZhbGlkLWJsb2ItbGVuZ3Ro IikKKwkJdGVzdF9waXBlX2RlZ2FtbWFfaW52YWxpZF90ZXN0cygmZGF0YSwgQkRXXzEyQklUX0dB TU1BX01BWF9WQUxTLCBJTlZBTElEX0JMT0JfTEVOR1RIKTsKKwlpZ3Rfc3VidGVzdCgiZGVnYW1t YS04Yml0LWludmFsaWQtYmxvYi1kYXRhIikKKwkJdGVzdF9waXBlX2RlZ2FtbWFfaW52YWxpZF90 ZXN0cygmZGF0YSwgQkRXXzhCSVRfR0FNTUFfTUFYX1ZBTFMsIElOVkFMSURfQkxPQl9EQVRBKTsK KwlpZ3Rfc3VidGVzdCgiZGVnYW1tYS0xMGJpdC1pbnZhbGlkLWJsb2ItZGF0YSIpCisJCXRlc3Rf cGlwZV9kZWdhbW1hX2ludmFsaWRfdGVzdHMoJmRhdGEsIEJEV18xMEJJVF9HQU1NQV9NQVhfVkFM UywgSU5WQUxJRF9CTE9CX0RBVEEpOworCWlndF9zdWJ0ZXN0KCJkZWdhbW1hLTEyYml0LWludmFs aWQtYmxvYi1kYXRhIikKKwkJdGVzdF9waXBlX2RlZ2FtbWFfaW52YWxpZF90ZXN0cygmZGF0YSwg QkRXXzEyQklUX0dBTU1BX01BWF9WQUxTLCBJTlZBTElEX0JMT0JfREFUQSk7CisKKwlpZ3RfZml4 dHVyZXsKKwkJaWd0X2Rpc3BsYXlfZmluaSgmZGF0YS5kaXNwbGF5KTsKKwl9Cit9CisKLS0gCjEu OS4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRl bC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDov L2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=