From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: [PATH i-g-t v12 2/2] tests: add slice power programming test Date: Tue, 11 Sep 2018 15:42:10 +0100 Message-ID: <20180911144210.16613-1-tvrtko.ursulin@linux.intel.com> References: <151852f9-36b4-cdec-58c0-d7b5e30cfc2e@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm0-x243.google.com (mail-wm0-x243.google.com [IPv6:2a00:1450:400c:c09::243]) by gabe.freedesktop.org (Postfix) with ESMTPS id 1C2756E04D for ; Tue, 11 Sep 2018 14:42:18 +0000 (UTC) Received: by mail-wm0-x243.google.com with SMTP id n11-v6so1283420wmc.2 for ; Tue, 11 Sep 2018 07:42:18 -0700 (PDT) In-Reply-To: <151852f9-36b4-cdec-58c0-d7b5e30cfc2e@linux.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: igt-dev@lists.freedesktop.org Cc: Intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org RnJvbTogTGlvbmVsIExhbmR3ZXJsaW4gPGxpb25lbC5nLmxhbmR3ZXJsaW5AaW50ZWwuY29tPgoK VmVyaWZpZXMgdGhhdCB0aGUga2VybmVsIHByb2dyYW1zIHNsaWNlcyBjb3JyZWN0bHkgYmFzZWQg YnkgcmVhZGluZwp0aGUgdmFsdWUgb2YgUFdSX0NMS19TVEFURSByZWdpc3RlciBvciBNSV9TRVRf UFJFRElDQVRFIG9uIHBsYXRmb3JtcwpiZWZvcmUgQ2Fubm9ubGFrZS4KCnYyOiBBZGQgc3Vic2xp Y2UgdGVzdHMgKExpb25lbCkKICAgIFVzZSBNSV9TRVRfUFJFRElDQVRFIGZvciBmdXJ0aGVyIHZl cmlmaWNhdGlvbiB3aGVuIGF2YWlsYWJsZSAoTGlvbmVsKQoKdjM6IFJlbmFtZSB0byBnZW1fY3R4 X3JwY3MgKExpb25lbCkKCnY0OiBVcGRhdGUga2VybmVsIEFQSSAoTGlvbmVsKQogICAgQWRkIDAg dmFsdWUgdGVzdCAoTGlvbmVsKQogICAgRXhlcmNpc2UgaW52YWxpZCB2YWx1ZXMgKExpb25lbCkK CnY1OiBBZGQgcGVyZiB0ZXN0cyAoTGlvbmVsKQoKdjY6IEFkZCBuZXcgc3lzZnMgZW50cnkgdGVz dHMgKExpb25lbCkKCnY3OiBUZXN0IHJzdmQgZmllbGRzCiAgICBVcGRhdGUgZm9yIGtlcm5lbCBz ZXJpZXMgY2hhbmdlcwoKdjg6IERyb3AgdGVzdF9ub19zc2V1X3N1cHBvcnQoKSB0ZXN0IChLZWx2 aW4pCiAgICBEcm9wIGRybV9pbnRlbF8qKCkgYXBpcyAoQ2hyaXMpCgp2OTogYnkgQ2hyaXM6CiAg ICBEcm9wIGFsbCBkb19pb2N0bC9kb19pb2N0bF9lcnIoKQogICAgVXNlIGdlbV9jb250ZXh0X1tn c11ldF9wYXJhbSgpCiAgICBVc2UgZ2VtX3JlYWQoKSBpbnN0ZWFkIG9mIG1hcHBpbmcgbWVtb3J5 CiAgICBieSBMaW9uZWw6CiAgICBUZXN0IGR5bmFtaWMgc3NldSBvbi9vZmYgbW9yZQoKVHZydGtv IFVyc3VsaW46Cgp2MTA6CiAqIFZhcmlvdXMgc3R5bGUgdHdlYWtzIGFuZCByZWZhY3RvcmluZ3Mu CiAqIE5ldyB0ZXN0IGNvdmVyYWdlLgoKdjExOgogKiBDaGFuZ2UgcGxhdGZvcm0gc3VwcG9ydCB0 byBqdXN0IEdlbjExLgogKiBTaW1wbGlmeSBhdmFpbGFiaWxpdHkgdGVzdC4gKENocmlzIFdpbHNv bikKICogTW9yZSBpbnZhbGlkIHBvaW50ZXIgdGVzdHMuIChDaHJpcyBXaWxzb24pCgp2MTI6CiAq IEZpeCBNQVBfRklYRUQgdXNlIChkb2ghKS4KICogRml4IGdldC9zZXQgY29weSZwYXN0ZSBlcnJv cnMuCiAqIERyb3Agc3VwcG9ydGVkIHBsYXRmb3JtIHRlc3QuIChDaHJpcyBXaWxzb24pCiAqIEFk ZCBtbWFwX19ndHQgdGVzdC4gKENocmlzIFdpbHNvbikKClNpZ25lZC1vZmYtYnk6IExpb25lbCBM YW5kd2VybGluIDxsaW9uZWwuZy5sYW5kd2VybGluQGludGVsLmNvbT4KU2lnbmVkLW9mZi1ieTog VHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KLS0tCiB0ZXN0cy9NYWtl ZmlsZS5hbSAgICAgIHwgICAgMSArCiB0ZXN0cy9NYWtlZmlsZS5zb3VyY2VzIHwgICAgMSArCiB0 ZXN0cy9nZW1fY3R4X3BhcmFtLmMgIHwgICAgNCArLQogdGVzdHMvZ2VtX2N0eF9zc2V1LmMgICB8 IDExMjggKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogdGVzdHMvbWVz b24uYnVpbGQgICAgICB8ICAgIDcgKwogNSBmaWxlcyBjaGFuZ2VkLCAxMTQwIGluc2VydGlvbnMo KyksIDEgZGVsZXRpb24oLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0cy9nZW1fY3R4X3NzZXUu YwoKZGlmZiAtLWdpdCBhL3Rlc3RzL01ha2VmaWxlLmFtIGIvdGVzdHMvTWFrZWZpbGUuYW0KaW5k ZXggZWU1YTdjNWU4M2I4Li42YjY3YmQyY2MxN2EgMTAwNjQ0Ci0tLSBhL3Rlc3RzL01ha2VmaWxl LmFtCisrKyBiL3Rlc3RzL01ha2VmaWxlLmFtCkBAIC0xMDcsNiArMTA3LDcgQEAgZ2VtX2Nsb3Nl X3JhY2VfQ0ZMQUdTID0gJChBTV9DRkxBR1MpICQoVEhSRUFEX0NGTEFHUykKIGdlbV9jbG9zZV9y YWNlX0xEQUREID0gJChMREFERCkgLWxwdGhyZWFkCiBnZW1fY3R4X3RocmFzaF9DRkxBR1MgPSAk KEFNX0NGTEFHUykgJChUSFJFQURfQ0ZMQUdTKQogZ2VtX2N0eF90aHJhc2hfTERBREQgPSAkKExE QUREKSAtbHB0aHJlYWQKK2dlbV9jdHhfc3NldV9MREFERCA9ICQoTERBREQpICQodG9wX2J1aWxk ZGlyKS9saWIvbGliaWd0X3BlcmYubGEKIGdlbV9leGVjX3BhcmFsbGVsX0NGTEFHUyA9ICQoQU1f Q0ZMQUdTKSAkKFRIUkVBRF9DRkxBR1MpCiBnZW1fZXhlY19wYXJhbGxlbF9MREFERCA9ICQoTERB REQpIC1scHRocmVhZAogZ2VtX2ZlbmNlX3RocmFzaF9DRkxBR1MgPSAkKEFNX0NGTEFHUykgJChU SFJFQURfQ0ZMQUdTKQpkaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUuc291cmNlcyBiL3Rlc3Rz L01ha2VmaWxlLnNvdXJjZXMKaW5kZXggYzg0OTMzZjFkOTcxLi5mOGYyYzhkNjdkNzIgMTAwNjQ0 Ci0tLSBhL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKKysrIGIvdGVzdHMvTWFrZWZpbGUuc291cmNl cwpAQCAtNTYsNiArNTYsNyBAQCBURVNUU19wcm9ncyA9IFwKIAlnZW1fY3R4X2V4ZWMgXAogCWdl bV9jdHhfaXNvbGF0aW9uIFwKIAlnZW1fY3R4X3BhcmFtIFwKKwlnZW1fY3R4X3NzZXUgXAogCWdl bV9jdHhfc3dpdGNoIFwKIAlnZW1fY3R4X3RocmFzaCBcCiAJZ2VtX2RvdWJsZV9pcnFfbG9vcCBc CmRpZmYgLS1naXQgYS90ZXN0cy9nZW1fY3R4X3BhcmFtLmMgYi90ZXN0cy9nZW1fY3R4X3BhcmFt LmMKaW5kZXggYzQ2ZmQ3MDliMGQ3Li5hZjFhZmVhYTJmMmYgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2dl bV9jdHhfcGFyYW0uYworKysgYi90ZXN0cy9nZW1fY3R4X3BhcmFtLmMKQEAgLTI5NCwxMSArMjk0 LDEzIEBAIGlndF9tYWluCiAJCQlzZXRfcHJpb3JpdHkoZmQpOwogCX0KIAorCS8qIEk5MTVfQ09O VEVYVF9QQVJBTV9TU0VVIHRlc3RzIGFyZSBsb2NhdGVkIGluIGdlbV9jdHhfc3NldS5jICovCisK IAkvKiBOT1RFOiBUaGlzIHRlc3RjYXNlIGludGVudGlvbmFsbHkgdGVzdHMgZm9yIHRoZSBuZXh0 IGZyZWUgcGFyYW1ldGVyCiAJICogdG8gY2F0Y2ggQUJJIGV4dGVuc2lvbnMuIERvbid0ICJmaXgi IHRoaXMgdGVzdGNhc2Ugd2l0aG91dCBhZGRpbmcgYWxsCiAJICogdGhlIHRlc3RzIGZvciB0aGUg bmV3IHBhcmFtIGZpcnN0LgogCSAqLwotCWFyZy5wYXJhbSA9IEk5MTVfQ09OVEVYVF9QQVJBTV9Q UklPUklUWSArIDE7CisJYXJnLnBhcmFtID0gSTkxNV9DT05URVhUX1BBUkFNX1NTRVUgKyAxOwog CiAJaWd0X3N1YnRlc3QoImludmFsaWQtcGFyYW0tZ2V0IikgewogCQlhcmcuY3R4X2lkID0gY3R4 OwpkaWZmIC0tZ2l0IGEvdGVzdHMvZ2VtX2N0eF9zc2V1LmMgYi90ZXN0cy9nZW1fY3R4X3NzZXUu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmIzOGIxZTUyNzc2Nwot LS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2dlbV9jdHhfc3NldS5jCkBAIC0wLDAgKzEsMTEyOCBA QAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDE3LTIwMTggSW50ZWwgQ29ycG9yYXRpb24KKyAqCisg KiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBl cnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVk IGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhl IFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRp b24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBk aXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0 d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBm dXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgor ICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90 aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQg aW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJl LgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJB TlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5P VCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBF VkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxF IEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJ TiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBG Uk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNF IE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczoK KyAqICAgIExpb25lbCBMYW5kd2VybGluIDxsaW9uZWwuZy5sYW5kd2VybGluQGludGVsLmNvbT4K KyAqCisgKi8KKworI2luY2x1ZGUgImlndC5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVk ZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+Cisj aW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDxlcnJuby5o PgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDxzeXMvbW1hbi5oPgorI2luY2x1ZGUgPHN5 cy93YWl0Lmg+CisKKyNpbmNsdWRlICJpZ3RfZHVtbXlsb2FkLmgiCisjaW5jbHVkZSAiaWd0X3Bl cmYuaCIKKyNpbmNsdWRlICJpZ3Rfc3lzZnMuaCIKKyNpbmNsdWRlICJpb2N0bF93cmFwcGVycy5o IgorCitJR1RfVEVTVF9ERVNDUklQVElPTigiVGVzdCBjb250ZXh0IHJlbmRlciBwb3dlcmdhdGlu ZyBwcm9ncmFtbWluZy4iKTsKKworI2RlZmluZSBNSV9TVE9SRV9SRUdJU1RFUl9NRU0gKDB4MjQg PDwgMjMpCisKKyNkZWZpbmUgTUlfU0VUX1BSRURJQ0FURSAgICAgICgweDEgPDwgMjMpCisjZGVm aW5lICBNSV9TRVRfUFJFRElDQVRFX05PT1BfTkVWRVIgICAgICAgICAoMCkKKyNkZWZpbmUgIE1J X1NFVF9QUkVESUNBVEVfTk9PUF9SRVNVTFQyX0NMRUFSICgxKQorI2RlZmluZSAgTUlfU0VUX1BS RURJQ0FURV9OT09QX1JFU1VMVDJfU0VUICAgKDIpCisjZGVmaW5lICBNSV9TRVRfUFJFRElDQVRF X05PT1BfUkVTVUxUX0NMRUFSICAoMykKKyNkZWZpbmUgIE1JX1NFVF9QUkVESUNBVEVfTk9PUF9S RVNVTFRfU0VUICAgICg0KQorI2RlZmluZSAgTUlfU0VUX1BSRURJQ0FURV8xX1NMSUNFUyAgICAg ICAgICAgKDUpCisjZGVmaW5lICBNSV9TRVRfUFJFRElDQVRFXzJfU0xJQ0VTICAgICAgICAgICAo NikKKyNkZWZpbmUgIE1JX1NFVF9QUkVESUNBVEVfM19TTElDRVMgICAgICAgICAgICg3KQorCisj ZGVmaW5lIEdFTjhfUl9QV1JfQ0xLX1NUQVRFCQkweDIwQzgKKyNkZWZpbmUgICBHRU44X1JQQ1Nf RU5BQkxFCQkoMSA8PCAzMSkKKyNkZWZpbmUgICBHRU44X1JQQ1NfU19DTlRfRU5BQkxFCSgxIDw8 IDE4KQorI2RlZmluZSAgIEdFTjhfUlBDU19TX0NOVF9TSElGVAkJMTUKKyNkZWZpbmUgICBHRU44 X1JQQ1NfU19DTlRfTUFTSwkJKDB4NyA8PCBHRU44X1JQQ1NfU19DTlRfU0hJRlQpCisjZGVmaW5l ICAgR0VOMTFfUlBDU19TX0NOVF9TSElGVAkxMgorI2RlZmluZSAgIEdFTjExX1JQQ1NfU19DTlRf TUFTSwkJKDB4M2YgPDwgR0VOMTFfUlBDU19TX0NOVF9TSElGVCkKKyNkZWZpbmUgICBHRU44X1JQ Q1NfU1NfQ05UX0VOQUJMRQkoMSA8PCAxMSkKKyNkZWZpbmUgICBHRU44X1JQQ1NfU1NfQ05UX1NI SUZUCTgKKyNkZWZpbmUgICBHRU44X1JQQ1NfU1NfQ05UX01BU0sJCSgweDcgPDwgR0VOOF9SUENT X1NTX0NOVF9TSElGVCkKKyNkZWZpbmUgICBHRU44X1JQQ1NfRVVfTUFYX1NISUZUCTQKKyNkZWZp bmUgICBHRU44X1JQQ1NfRVVfTUFYX01BU0sJCSgweGYgPDwgR0VOOF9SUENTX0VVX01BWF9TSElG VCkKKyNkZWZpbmUgICBHRU44X1JQQ1NfRVVfTUlOX1NISUZUCTAKKyNkZWZpbmUgICBHRU44X1JQ Q1NfRVVfTUlOX01BU0sJCSgweGYgPDwgR0VOOF9SUENTX0VVX01JTl9TSElGVCkKKworI2RlZmlu ZSBSQ1NfVElNRVNUQU1QICgweDIwMDAgKyAweDM1OCkKKworc3RhdGljIHVuc2lnbmVkIGludCBf X2ludGVsX2dlbl9fLCBfX2ludGVsX2RldmlkX187CitzdGF0aWMgdWludDY0X3QgX19zbGljZV9t YXNrX18sIF9fc3Vic2xpY2VfbWFza19fOworc3RhdGljIHVuc2lnbmVkIGludCBfX3NsaWNlX2Nv dW50X18sIF9fc3Vic2xpY2VfY291bnRfXzsKKworc3RhdGljIHVpbnQ2NF90IG1hc2tfbWludXNf b25lKHVpbnQ2NF90IG1hc2spCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBp IDwgKHNpemVvZihtYXNrKSAqIDggLSAxKTsgaSsrKSB7CisJCWlmICgoMVVMTCA8PCBpKSAmIG1h c2spCisJCQlyZXR1cm4gbWFzayAmIH4oMVVMTCA8PCBpKTsKKwl9CisKKwlpZ3RfYXNzZXJ0KDAp OworCXJldHVybiAwOworfQorCitzdGF0aWMgdWludDY0X3QgbWFza19wbHVzX29uZSh1aW50NjRf dCBtYXNrKQoreworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IChzaXplb2Yo bWFzaykgKiA4IC0gMSk7IGkrKykgeworCQlpZiAoKCgxVUxMIDw8IGkpICYgbWFzaykgPT0gMCkK KwkJCXJldHVybiBtYXNrIHwgKDFVTEwgPDwgaSk7CisJfQorCisJaWd0X2Fzc2VydCgwKTsKKwly ZXR1cm4gMDsKK30KKworc3RhdGljIHVpbnQ2NF90IG1hc2tfbWludXModWludDY0X3QgbWFzaywg aW50IG4pCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQor CQltYXNrID0gbWFza19taW51c19vbmUobWFzayk7CisKKwlyZXR1cm4gbWFzazsKK30KKworc3Rh dGljIHVpbnQ2NF90IG1hc2tfcGx1cyh1aW50NjRfdCBtYXNrLCBpbnQgbikKK3sKKwl1bnNpZ25l ZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspCisJCW1hc2sgPSBtYXNrX3BsdXNf b25lKG1hc2spOworCisJcmV0dXJuIG1hc2s7Cit9CisKK3N0YXRpYyB1aW50MzJfdCAqCitmaWxs X3JlbG9jYXRpb24odWludDMyX3QgKmJhdGNoLAorCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlbG9j YXRpb25fZW50cnkgKnJlbG9jLAorCQl1aW50MzJfdCBnZW1faGFuZGxlLCB1aW50MzJfdCBkZWx0 YSwgLyogaW4gYnl0ZXMgKi8KKwkJdWludDMyX3Qgb2Zmc2V0LCAvKiBpbiBkd29yZHMgKi8KKwkJ dWludDMyX3QgcmVhZF9kb21haW5zLCB1aW50MzJfdCB3cml0ZV9kb21haW5zKQoreworCXJlbG9j LT50YXJnZXRfaGFuZGxlID0gZ2VtX2hhbmRsZTsKKwlyZWxvYy0+ZGVsdGEgPSBkZWx0YTsKKwly ZWxvYy0+b2Zmc2V0ID0gb2Zmc2V0ICogc2l6ZW9mKHVpbnQzMl90KTsKKwlyZWxvYy0+cHJlc3Vt ZWRfb2Zmc2V0ID0gMDsKKwlyZWxvYy0+cmVhZF9kb21haW5zID0gcmVhZF9kb21haW5zOworCXJl bG9jLT53cml0ZV9kb21haW4gPSB3cml0ZV9kb21haW5zOworCisJKmJhdGNoKysgPSBkZWx0YTsK KwkqYmF0Y2grKyA9IDA7CisKKwlyZXR1cm4gYmF0Y2g7Cit9CisKKworc3RhdGljIHVpbnQzMl90 CityZWFkX3JwY3NfcmVnKGludCBmZCwgdWludDMyX3QgY3R4LCB1aW50MzJfdCBleHBlY3RlZF9z bGljZXMsIGlndF9zcGluX3QgKnNwaW4pCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVm ZmVyMiBleGVjYnVmID0geyB9OworCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRy eSByZWxvY3NbMl07CisJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgb2JqWzJdOwor CXVpbnQzMl90ICpiYXRjaCwgKmIsIGRhdGFbMl07CisJdW5zaWduZWQgaW50IG5fcmVsb2NzID0g MDsKKwl1aW50MzJfdCBycGNzOworCisJbWVtc2V0KG9iaiwgMCwgc2l6ZW9mKG9iaikpOworCW9i alswXS5oYW5kbGUgPSBnZW1fY3JlYXRlKGZkLCA0MDk2KTsKKwlvYmpbMV0uaGFuZGxlID0gZ2Vt X2NyZWF0ZShmZCwgNDA5Nik7CisKKwliYXRjaCA9IGIgPQorCSAgICAgIGdlbV9tbWFwX19jcHUo ZmQsIG9ialsxXS5oYW5kbGUsIDAsIDQwOTYsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUpOworCisJ aWYgKGV4cGVjdGVkX3NsaWNlcyAhPSAwICYmIF9faW50ZWxfZ2VuX18gPCAxMCkKKwkJKmIrKyA9 IE1JX1NFVF9QUkVESUNBVEUgfCAoMSAtIDEpIHwKKwkJICAgICAgIChNSV9TRVRfUFJFRElDQVRF XzFfU0xJQ0VTICsgZXhwZWN0ZWRfc2xpY2VzIC0gMSk7CisKKwkqYisrID0gTUlfU1RPUkVfUkVH SVNURVJfTUVNIHwgKDQgLSAyKTsKKwkqYisrID0gUkNTX1RJTUVTVEFNUDsKKwliID0gZmlsbF9y ZWxvY2F0aW9uKGIsICZyZWxvY3Nbbl9yZWxvY3MrK10sIG9ialswXS5oYW5kbGUsCisJCQkgICAg MCwgYiAtIGJhdGNoLAorCQkJICAgIEk5MTVfR0VNX0RPTUFJTl9SRU5ERVIsIEk5MTVfR0VNX0RP TUFJTl9SRU5ERVIpOworCisJKmIrKyA9IE1JX1NUT1JFX1JFR0lTVEVSX01FTSB8ICg0IC0gMik7 CisJKmIrKyA9IEdFTjhfUl9QV1JfQ0xLX1NUQVRFOworCWIgPSBmaWxsX3JlbG9jYXRpb24oYiwg JnJlbG9jc1tuX3JlbG9jcysrXSwgb2JqWzBdLmhhbmRsZSwKKwkJCSAgICA0LCBiIC0gYmF0Y2gs CisJCQkgICAgSTkxNV9HRU1fRE9NQUlOX1JFTkRFUiwgSTkxNV9HRU1fRE9NQUlOX1JFTkRFUik7 CisKKwlpZiAoZXhwZWN0ZWRfc2xpY2VzICE9IDAgJiYgX19pbnRlbF9nZW5fXyA8IDEwKQorCQkq YisrID0gTUlfU0VUX1BSRURJQ0FURSB8ICgxIC0gMSkgfCBNSV9TRVRfUFJFRElDQVRFX05PT1Bf TkVWRVI7CisKKwkqYisrID0gTUlfQkFUQ0hfQlVGRkVSX0VORDsKKworCWdlbV9tdW5tYXAoYmF0 Y2gsIDQwOTYpOworCisJb2JqWzFdLnJlbG9jYXRpb25fY291bnQgPSBuX3JlbG9jczsKKwlvYmpb MV0ucmVsb2NzX3B0ciA9IHRvX3VzZXJfcG9pbnRlcihyZWxvY3MpOworCisJZXhlY2J1Zi5idWZm ZXJzX3B0ciA9IHRvX3VzZXJfcG9pbnRlcihvYmopOworCWV4ZWNidWYuYnVmZmVyX2NvdW50ID0g QVJSQVlfU0laRShvYmopOworCWk5MTVfZXhlY2J1ZmZlcjJfc2V0X2NvbnRleHRfaWQoZXhlY2J1 ZiwgY3R4KTsKKworCWdlbV9leGVjYnVmKGZkLCAmZXhlY2J1Zik7CisKKwlpZiAoc3BpbikKKwkJ aWd0X3NwaW5fYmF0Y2hfZW5kKHNwaW4pOworCisJZ2VtX3JlYWQoZmQsIG9ialswXS5oYW5kbGUs IDAsIGRhdGEsIHNpemVvZihkYXRhKSk7CisKKwlycGNzID0gZGF0YVsxXTsKKworCWlndF9kZWJ1 ZygicmNzX3RpbWVzdGFtcD0weCV4IHJwY3M9MHgleFxuIiwgZGF0YVswXSwgZGF0YVsxXSk7CisK KwlnZW1fY2xvc2UoZmQsIG9ialswXS5oYW5kbGUpOworCWdlbV9jbG9zZShmZCwgb2JqWzFdLmhh bmRsZSk7CisKKwlyZXR1cm4gcnBjczsKK30KKwordHlwZWRlZiB1aW50MzJfdCAoKnJlYWRfc2xp Y2VfY291bnRfZikoaW50IGZkLCB1aW50MzJfdCBjdHgsIHVpbnQzMl90IGV4cGVjdGVkLAorCQkJ CSAgICAgICBpZ3Rfc3Bpbl90ICpzcGluKTsKKworc3RhdGljIHJlYWRfc2xpY2VfY291bnRfZiBf X3JlYWRfc2xpY2VfY291bnQ7CisKK3N0YXRpYyB1aW50MzJfdAorcmVhZF9zbGljZV9jb3VudChp bnQgZmQsIHVpbnQzMl90IGN0eCwgdWludDMyX3QgZXhwZWN0ZWRfc2xpY2VfY291bnQpCit7CisJ cmV0dXJuIF9fcmVhZF9zbGljZV9jb3VudChmZCwgY3R4LCBleHBlY3RlZF9zbGljZV9jb3VudCwg TlVMTCk7Cit9CisKK3N0YXRpYyB1aW50MzJfdAorZ2VuOF9yZWFkX3NsaWNlX2NvdW50KGludCBm ZCwgdWludDMyX3QgY3R4LCB1aW50MzJfdCBleHBlY3RlZF9zbGljZV9jb3VudCwKKwkJICAgICAg aWd0X3NwaW5fdCAqc3BpbikKK3sKKwlyZXR1cm4gKHJlYWRfcnBjc19yZWcoZmQsIGN0eCwgZXhw ZWN0ZWRfc2xpY2VfY291bnQsIHNwaW4pICYKKwkJR0VOOF9SUENTX1NfQ05UX01BU0spID4+IEdF TjhfUlBDU19TX0NOVF9TSElGVDsKK30KKworc3RhdGljIHVpbnQzMl90CitnZW4xMV9yZWFkX3Ns aWNlX2NvdW50KGludCBmZCwgdWludDMyX3QgY3R4LCB1aW50MzJfdCBleHBlY3RlZF9zbGljZV9j b3VudCwKKwkJICAgICAgIGlndF9zcGluX3QgKnNwaW4pCit7CisJcmV0dXJuIChyZWFkX3JwY3Nf cmVnKGZkLCBjdHgsIGV4cGVjdGVkX3NsaWNlX2NvdW50LCBzcGluKSAmCisJCUdFTjExX1JQQ1Nf U19DTlRfTUFTSykgPj4gR0VOMTFfUlBDU19TX0NOVF9TSElGVDsKK30KKworc3RhdGljIHVpbnQz Ml90CityZWFkX3N1YnNsaWNlX2NvdW50KGludCBmZCwgdWludDMyX3QgY3R4KQoreworCXJldHVy biAocmVhZF9ycGNzX3JlZyhmZCwgY3R4LCAwLCBOVUxMKSAmIEdFTjhfUlBDU19TU19DTlRfTUFT SykgPj4KKwkgICAgICAgR0VOOF9SUENTX1NTX0NOVF9TSElGVDsKK30KKworc3RhdGljIGJvb2wK K2tlcm5lbF9oYXNfcGVyX2NvbnRleHRfc3NldV9zdXBwb3J0KGludCBmZCkKK3sKKwlzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX2NvbnRleHRfcGFyYW1fc3NldSBzc2V1ID0geyB9OworCXN0cnVjdCBkcm1f aTkxNV9nZW1fY29udGV4dF9wYXJhbSBhcmcgPQorCQl7CisJCSAgLnBhcmFtID0gSTkxNV9DT05U RVhUX1BBUkFNX1NTRVUsCisJCSAgLnNpemUgPSBzaXplb2Yoc3NldSksCisJCSAgLnZhbHVlID0g dG9fdXNlcl9wb2ludGVyKCZzc2V1KSwKKwkJfTsKKwlpbnQgcmV0OworCisJaWYgKF9fZ2VtX2Nv bnRleHRfZ2V0X3BhcmFtKGZkLCAmYXJnKSkKKwkJcmV0dXJuIGZhbHNlOworCisJYXJnLnZhbHVl ID0gdG9fdXNlcl9wb2ludGVyKCZzc2V1KTsKKworCXJldCA9IF9fZ2VtX2NvbnRleHRfc2V0X3Bh cmFtKGZkLCAmYXJnKTsKKworCWlndF9hc3NlcnQocmV0ID09IDAgfHwgcmV0ID09IC1FTk9ERVYg fHwgcmV0ID09IC1FSU5WQUwpOworCisJcmV0dXJuIHJldCA9PSAwOworfQorCitzdGF0aWMgdm9p ZAorY29udGV4dF9nZXRfc3NldV9tYXNrcyhpbnQgZmQsIHVpbnQzMl90IGN0eCwKKwkJICAgICAg IHVpbnQ2NF90ICpzbGljZV9tYXNrLAorCQkgICAgICAgdWludDY0X3QgKnN1YnNsaWNlX21hc2sp Cit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9jb250ZXh0X3BhcmFtX3NzZXUgc3NldSA9IHsgfTsK KwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2NvbnRleHRfcGFyYW0gYXJnID0KKwkJeyAucGFyYW0gPSBJ OTE1X0NPTlRFWFRfUEFSQU1fU1NFVSwKKwkJICAuY3R4X2lkID0gY3R4LAorCQkgIC5zaXplID0g c2l6ZW9mKHNzZXUpLAorCQkgIC52YWx1ZSA9IHRvX3VzZXJfcG9pbnRlcigmc3NldSkgfTsKKwor CWdlbV9jb250ZXh0X2dldF9wYXJhbShmZCwgJmFyZyk7CisKKwlpZiAoc2xpY2VfbWFzaykKKwkJ KnNsaWNlX21hc2sgPSBzc2V1LnNsaWNlX21hc2s7CisKKwlpZiAoc3Vic2xpY2VfbWFzaykKKwkJ KnN1YnNsaWNlX21hc2sgPSBzc2V1LnN1YnNsaWNlX21hc2s7Cit9CisKK3N0YXRpYyB2b2lkCitj b250ZXh0X3NldF9zbGljZV9tYXNrKGludCBmZCwgdWludDMyX3QgY3R4LCB1aW50NjRfdCBzbGlj ZV9tYXNrKQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1fY29udGV4dF9wYXJhbV9zc2V1IHNzZXUg PSB7IH07CisJc3RydWN0IGRybV9pOTE1X2dlbV9jb250ZXh0X3BhcmFtIGFyZyA9CisJCXsgLnBh cmFtID0gSTkxNV9DT05URVhUX1BBUkFNX1NTRVUsCisJCSAgLmN0eF9pZCA9IGN0eCwKKwkJICAu c2l6ZSA9IHNpemVvZihzc2V1KSwKKwkJICAudmFsdWUgPSB0b191c2VyX3BvaW50ZXIoJnNzZXUp IH07CisKKwlnZW1fY29udGV4dF9nZXRfcGFyYW0oZmQsICZhcmcpOworCXNzZXUuc2xpY2VfbWFz ayA9IHNsaWNlX21hc2s7CisJZ2VtX2NvbnRleHRfc2V0X3BhcmFtKGZkLCAmYXJnKTsKK30KKwor c3RhdGljIHZvaWQKK2NvbnRleHRfc2V0X3N1YnNsaWNlX21hc2soaW50IGZkLCB1aW50MzJfdCBj dHgsIHVpbnQ2NF90IHN1YnNsaWNlX21hc2spCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9jb250 ZXh0X3BhcmFtX3NzZXUgc3NldSA9IHsgfTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2NvbnRleHRf cGFyYW0gYXJnID0KKwkJeyAucGFyYW0gPSBJOTE1X0NPTlRFWFRfUEFSQU1fU1NFVSwKKwkJICAu Y3R4X2lkID0gY3R4LAorCQkgIC5zaXplID0gc2l6ZW9mKHNzZXUpLAorCQkgIC52YWx1ZSA9IHRv X3VzZXJfcG9pbnRlcigmc3NldSkgfTsKKworCWdlbV9jb250ZXh0X2dldF9wYXJhbShmZCwgJmFy Zyk7CisJc3NldS5zdWJzbGljZV9tYXNrID0gc3Vic2xpY2VfbWFzazsKKwlnZW1fY29udGV4dF9z ZXRfcGFyYW0oZmQsICZhcmcpOworfQorCisvKgorICogVmVyaWZ5IHRoYXQgd2UgY2FuIHByb2dy YW0gdGhlIHNsaWNlIGNvdW50LgorICovCitzdGF0aWMgdm9pZAordGVzdF9zbGljZV9wZyhpbnQg ZmQsIHVpbnQzMl90IHBnX3NsaWNlX2NvdW50KQoreworCXVpbnQ2NF90IHBnX3NsaWNlX21hc2sg PSBtYXNrX21pbnVzKF9fc2xpY2VfbWFza19fLCBwZ19zbGljZV9jb3VudCk7CisJdW5zaWduZWQg aW50IHNsaWNlX2NvdW50ID0gX19zbGljZV9jb3VudF9fIC0gcGdfc2xpY2VfY291bnQ7CisJdWlu dDY0X3Qgc2xpY2VfbWFzazsKKwl1aW50MzJfdCBjdHg7CisKKwlpZ3RfYXNzZXJ0X2VxKHNsaWNl X2NvdW50LCBfX2J1aWx0aW5fcG9wY291bnQocGdfc2xpY2VfbWFzaykpOworCisJY3R4ID0gZ2Vt X2NvbnRleHRfY3JlYXRlKGZkKTsKKwljb250ZXh0X3NldF9zbGljZV9tYXNrKGZkLCBjdHgsIHBn X3NsaWNlX21hc2spOworCWNvbnRleHRfZ2V0X3NzZXVfbWFza3MoZmQsIGN0eCwgJnNsaWNlX21h c2ssIE5VTEwpOworCWlndF9hc3NlcnRfZXEocGdfc2xpY2VfbWFzaywgc2xpY2VfbWFzayk7CisK KwkvKgorCSAqIFRlc3QgZmFsc2UgcG9zaXRpdmVzIHdpdGggcHJlZGljYXRlcyAob25seSBhdmFp bGFibGUgb24KKwkgKiBiZWZvcmUgR2VuMTApLgorCSAqLworCWlmIChfX2ludGVsX2dlbl9fIDwg MTApCisJCWlndF9hc3NlcnRfZXEocmVhZF9zbGljZV9jb3VudChmZCwgY3R4LCBfX3NsaWNlX2Nv dW50X18pLCAwKTsKKworCWlndF9hc3NlcnRfZXEocmVhZF9zbGljZV9jb3VudChmZCwgY3R4LCAw KSwgc2xpY2VfY291bnQpOworCisJZ2VtX2NvbnRleHRfZGVzdHJveShmZCwgY3R4KTsKK30KKwor LyoKKyAqIFZlcmlmeSB0aGF0IHdlIGNhbiBwcm9ncmFtIHRoZSBzdWJzbGljZSBjb3VudC4KKyAq Lworc3RhdGljIHZvaWQKK3Rlc3Rfc3Vic2xpY2VfcGcoaW50IGZkLCBpbnQgcGdfc3Vic2xpY2Vf Y291bnQpCit7CisJdWludDY0X3QgcGdfc3Vic2xpY2VfbWFzayA9CisJCW1hc2tfbWludXMoX19z dWJzbGljZV9tYXNrX18sIHBnX3N1YnNsaWNlX2NvdW50KTsKKwl1bnNpZ25lZCBpbnQgc3Vic2xp Y2VfY291bnQgPSBfX3N1YnNsaWNlX2NvdW50X18gLSBwZ19zdWJzbGljZV9jb3VudDsKKwl1aW50 NjRfdCBzdWJzbGljZV9tYXNrOworCXVpbnQzMl90IGN0eDsKKworCWlndF9hc3NlcnRfZXEoc3Vi c2xpY2VfY291bnQsIF9fYnVpbHRpbl9wb3Bjb3VudChwZ19zdWJzbGljZV9tYXNrKSk7CisKKwlj dHggPSBnZW1fY29udGV4dF9jcmVhdGUoZmQpOworCWNvbnRleHRfc2V0X3N1YnNsaWNlX21hc2so ZmQsIGN0eCwgcGdfc3Vic2xpY2VfbWFzayk7CisJY29udGV4dF9nZXRfc3NldV9tYXNrcyhmZCwg Y3R4LCBOVUxMLCAmc3Vic2xpY2VfbWFzayk7CisJaWd0X2Fzc2VydF9lcShwZ19zdWJzbGljZV9t YXNrLCBzdWJzbGljZV9tYXNrKTsKKworCWlndF9hc3NlcnRfZXEocmVhZF9zdWJzbGljZV9jb3Vu dChmZCwgY3R4KSwgc3Vic2xpY2VfY291bnQpOworCisJZ2VtX2NvbnRleHRfZGVzdHJveShmZCwg Y3R4KTsKK30KKworc3RhdGljIGJvb2wgaGFzX2VuZ2luZShpbnQgZmQsIHVuc2lnbmVkIGludCBj bGFzcywgdW5zaWduZWQgaW50IGluc3RhbmNlKQoreworCWludCBwbXUgPSBwZXJmX2k5MTVfb3Bl bihJOTE1X1BNVV9FTkdJTkVfQlVTWShjbGFzcywgaW5zdGFuY2UpKTsKKworCWlmIChwbXUgPj0g MCkKKwkJY2xvc2UocG11KTsKKworCXJldHVybiBwbXUgPj0gMDsKK30KKworc3RhdGljIGJvb2wK K2VuZ2luZV9zdXBwb3J0c19zc2V1KGludCBmZCwgdW5zaWduZWQgaW50IGNsYXNzLCB1bnNpZ25l ZCBpbnQgaW5zdGFuY2UpCit7CisJcmV0dXJuIF9faW50ZWxfZ2VuX18gPj0gOCAmJgorCSAgICAg ICBjbGFzcyA9PSBJOTE1X0VOR0lORV9DTEFTU19SRU5ERVIgJiYgaW5zdGFuY2UgPT0gMCA/CisJ ICAgICAgIHRydWUgOiBmYWxzZTsKK30KKworLyoKKyAqIFZlcmlmeSB0aGF0IGludmFsaWQgZW5n aW5lcyBhcmUgcmVqZWN0ZWQgYW5kIHZhbGlkIG9uZXMgYXJlIGFjY2VwdGVkLgorICovCitzdGF0 aWMgdm9pZCB0ZXN0X2VuZ2luZXMoaW50IGZkKQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1fY29u dGV4dF9wYXJhbV9zc2V1IHNzZXUgPSB7IH07CisJc3RydWN0IGRybV9pOTE1X2dlbV9jb250ZXh0 X3BhcmFtIGFyZyA9CisJCXsgLnBhcmFtID0gSTkxNV9DT05URVhUX1BBUkFNX1NTRVUsCisJCSAg LmN0eF9pZCA9IGdlbV9jb250ZXh0X2NyZWF0ZShmZCksCisJCSAgLnNpemUgPSBzaXplb2Yoc3Nl dSksCisJCSAgLnZhbHVlID0gdG9fdXNlcl9wb2ludGVyKCZzc2V1KSB9OworCXVuc2lnbmVkIGlu dCBjbGFzcywgaW5zdGFuY2U7CisJaW50IGxhc3Rfd2l0aF9lbmdpbmVzOworCisJLyogZ2V0X3Bh cmFtICovCisKKwlzc2V1Lmluc3RhbmNlID0gLTE7IC8qIEFzc3VtZWQgaW52YWxpZC4gKi8KKwlp Z3RfYXNzZXJ0X2VxKF9fZ2VtX2NvbnRleHRfZ2V0X3BhcmFtKGZkLCAmYXJnKSwgLUVJTlZBTCk7 CisKKwlzc2V1LmNsYXNzID0gSTkxNV9FTkdJTkVfQ0xBU1NfSU5WQUxJRDsgLyogQm90aCBpbnZh bGlkLiAqLworCWlndF9hc3NlcnRfZXEoX19nZW1fY29udGV4dF9nZXRfcGFyYW0oZmQsICZhcmcp LCAtRUlOVkFMKTsKKworCXNzZXUuaW5zdGFuY2UgPSAwOyAvKiBDbGFzcyBpbnZhbGlkLiAqLwor CWlndF9hc3NlcnRfZXEoX19nZW1fY29udGV4dF9nZXRfcGFyYW0oZmQsICZhcmcpLCAtRUlOVkFM KTsKKwlzc2V1LmNsYXNzID0gSTkxNV9FTkdJTkVfQ0xBU1NfUkVOREVSOworCisJbGFzdF93aXRo X2VuZ2luZXMgPSAtMTsKKwlmb3IgKGNsYXNzID0gMDsgY2xhc3MgPCB+MDsgY2xhc3MrKykgewor CQlmb3IgKGluc3RhbmNlID0gMDsgaW5zdGFuY2UgPCB+MDsgaW5zdGFuY2UrKykgeworCQkJaW50 IHJldDsKKworCQkJc3NldS5jbGFzcyA9IGNsYXNzOworCQkJc3NldS5pbnN0YW5jZSA9IGluc3Rh bmNlOworCisJCQlyZXQgPSBfX2dlbV9jb250ZXh0X2dldF9wYXJhbShmZCwgJmFyZyk7CisKKwkJ CWlmIChoYXNfZW5naW5lKGZkLCBjbGFzcywgaW5zdGFuY2UpKSB7CisJCQkJaWd0X2Fzc2VydF9l cShyZXQsIDApOworCQkJCWxhc3Rfd2l0aF9lbmdpbmVzID0gY2xhc3M7CisJCQl9IGVsc2Ugewor CQkJCWlndF9hc3NlcnRfZXEocmV0LCAtRUlOVkFMKTsKKwkJCQlpZiAoaW5zdGFuY2UgPiA4KSAv KiBTa2lwIG92ZXIgc29tZSBpbnN0YW5jZSBob2xlcy4gKi8KKwkJCQkJYnJlYWs7CisJCQl9CisJ CX0KKworCQlpZiAoY2xhc3MgLSBsYXN0X3dpdGhfZW5naW5lcyA+IDgpIC8qIFNraXAgb3ZlciBz b21lIGNsYXNzIGhvbGVzLiAqLworCQkJYnJlYWs7CisJfQorCisJLyoKKwkgKiBHZXQgc29tZSBw cm9wZXIgdmFsdWVzIGJlZm9yZSB0cnlpbmcgdG8gcmVwcm9ncmFtIHRoZW0gb250bworCSAqIGFu IGludmFsaWQgZW5naW5lLgorCSAqLworCXNzZXUuY2xhc3MgPSAwOworCXNzZXUuaW5zdGFuY2Ug PSAwOworCWdlbV9jb250ZXh0X2dldF9wYXJhbShmZCwgJmFyZyk7CisKKwkvKiBzZXRfcGFyYW0g Ki8KKworCXNzZXUuaW5zdGFuY2UgPSAtMTsgLyogQXNzdW1lZCBpbnZhbGlkLiAqLworCWlndF9h c3NlcnRfZXEoX19nZW1fY29udGV4dF9zZXRfcGFyYW0oZmQsICZhcmcpLCAtRUlOVkFMKTsKKwor CXNzZXUuY2xhc3MgPSBJOTE1X0VOR0lORV9DTEFTU19JTlZBTElEOyAvKiBCb3RoIGludmFsaWQu ICovCisJaWd0X2Fzc2VydF9lcShfX2dlbV9jb250ZXh0X3NldF9wYXJhbShmZCwgJmFyZyksIC1F SU5WQUwpOworCisJc3NldS5pbnN0YW5jZSA9IDA7IC8qIENsYXNzIGludmFsaWQuICovCisJaWd0 X2Fzc2VydF9lcShfX2dlbV9jb250ZXh0X3NldF9wYXJhbShmZCwgJmFyZyksIC1FSU5WQUwpOwor CisJbGFzdF93aXRoX2VuZ2luZXMgPSAtMTsKKwlmb3IgKGNsYXNzID0gMDsgY2xhc3MgPCB+MDsg Y2xhc3MrKykgeworCQlmb3IgKGluc3RhbmNlID0gMDsgaW5zdGFuY2UgPCB+MDsgaW5zdGFuY2Ur KykgeworCQkJaW50IHJldDsKKworCQkJc3NldS5jbGFzcyA9IGNsYXNzOworCQkJc3NldS5pbnN0 YW5jZSA9IGluc3RhbmNlOworCisJCQlyZXQgPSBfX2dlbV9jb250ZXh0X3NldF9wYXJhbShmZCwg JmFyZyk7CisKKwkJCWlmIChoYXNfZW5naW5lKGZkLCBjbGFzcywgaW5zdGFuY2UpKSB7CisJCQkJ aWYgKGVuZ2luZV9zdXBwb3J0c19zc2V1KGZkLCBjbGFzcywgaW5zdGFuY2UpKQorCQkJCQlpZ3Rf YXNzZXJ0X2VxKHJldCwgMCk7CisJCQkJZWxzZQorCQkJCQlpZ3RfYXNzZXJ0X2VxKHJldCwgLUVO T0RFVik7CisKKwkJCQlsYXN0X3dpdGhfZW5naW5lcyA9IGNsYXNzOworCQkJfSBlbHNlIHsKKwkJ CQlpZ3RfYXNzZXJ0X2VxKHJldCwgLUVJTlZBTCk7CisJCQkJaWYgKGluc3RhbmNlID4gOCkgLyog U2tpcCBvdmVyIHNvbWUgaW5zdGFuY2UgaG9sZXMuICovCisJCQkJCWJyZWFrOworCQkJfQorCQl9 CisKKwkJaWYgKGNsYXNzIC0gbGFzdF93aXRoX2VuZ2luZXMgPiA4KSAvKiBTa2lwIG92ZXIgc29t ZSBjbGFzcyBob2xlcy4gKi8KKwkJCWJyZWFrOworCX0KKworCWdlbV9jb250ZXh0X2Rlc3Ryb3ko ZmQsIGFyZy5jdHhfaWQpOworfQorCisvKgorICogVmVyaWZ5IHRoYXQgaW52YWxpZCBhcmd1bWVu dHMgYXJlIHJlamVjdGVkLgorICovCitzdGF0aWMgdm9pZAordGVzdF9pbnZhbGlkX2FyZ3MoaW50 IGZkKQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1fY29udGV4dF9wYXJhbSBhcmcgPQorCQl7IC5w YXJhbSA9IEk5MTVfQ09OVEVYVF9QQVJBTV9TU0VVLAorCQkgIC5jdHhfaWQgPSBnZW1fY29udGV4 dF9jcmVhdGUoZmQpLAorCQl9OworCXN0cnVjdCBkcm1faTkxNV9nZW1fY29udGV4dF9wYXJhbV9z c2V1IHNzZXUgPSB7IH07CisJdW5zaWduZWQgY2hhciAqcGFnZVsyXTsKKwl1bnNpZ25lZCBjaGFy ICphZGRyOworCXVuc2lnbmVkIGludCBzejsKKworCS8qIGdldCBwYXJhbSAqLworCisJLyogSW52 YWxpZCBzaXplLiAqLworCWFyZy5zaXplID0gMTsKKwlpZ3RfYXNzZXJ0X2VxKF9fZ2VtX2NvbnRl eHRfZ2V0X3BhcmFtKGZkLCAmYXJnKSwgLUVJTlZBTCk7CisKKwkvKiBRdWVyeSBzaXplLiAqLwor CWFyZy5zaXplID0gMDsKKwlpZ3RfYXNzZXJ0X2VxKF9fZ2VtX2NvbnRleHRfZ2V0X3BhcmFtKGZk LCAmYXJnKSwgMCk7CisJc3ogPSBhcmcuc2l6ZTsKKworCS8qIEJhZCBwb2ludGVycy4gKi8KKwlp Z3RfYXNzZXJ0X2VxKF9fZ2VtX2NvbnRleHRfZ2V0X3BhcmFtKGZkLCAmYXJnKSwgLUVGQVVMVCk7 CisJYXJnLnZhbHVlID0gLTE7CisJaWd0X2Fzc2VydF9lcShfX2dlbV9jb250ZXh0X2dldF9wYXJh bShmZCwgJmFyZyksIC1FRkFVTFQpOworCWFyZy52YWx1ZSA9IDE7CisJaWd0X2Fzc2VydF9lcShf X2dlbV9jb250ZXh0X2dldF9wYXJhbShmZCwgJmFyZyksIC1FRkFVTFQpOworCisJLyogVW5tYXBw ZWQuICovCisJcGFnZVswXSA9IG1tYXAoMCwgNDA5NiwgUFJPVF9XUklURSwgTUFQX1BSSVZBVEUg fCBNQVBfQU5PTiwgLTEsIDApOworCWlndF9hc3NlcnQocGFnZVswXSAhPSBNQVBfRkFJTEVEKTsK KwltZW1zZXQocGFnZVswXSwgMCwgc2l6ZW9mKHNzZXUpKTsKKwltdW5tYXAocGFnZVswXSwgNDA5 Nik7CisJYXJnLnZhbHVlID0gdG9fdXNlcl9wb2ludGVyKHBhZ2VbMF0pOworCWlndF9hc3NlcnRf ZXEoX19nZW1fY29udGV4dF9nZXRfcGFyYW0oZmQsICZhcmcpLCAtRUZBVUxUKTsKKworCS8qIFN0 cmFkZGxlIGludG8gdW5tYXBwZWQgYXJlYS4gKi8KKwlwYWdlWzBdID0gbW1hcCgwLCA4MTkyLCBQ Uk9UX1dSSVRFLCBNQVBfUFJJVkFURSB8IE1BUF9BTk9OLCAtMSwgMCk7CisJaWd0X2Fzc2VydChw YWdlWzBdICE9IE1BUF9GQUlMRUQpOworCW11bm1hcChwYWdlWzBdLCA4MTkyKTsKKwlwYWdlWzBd ID0gbW1hcChwYWdlWzBdLCA0MDk2LAorCQkgICAgICAgUFJPVF9XUklURSwgTUFQX1BSSVZBVEUg fCBNQVBfQU5PTiB8IE1BUF9GSVhFRCwgLTEsIDApOworCWlndF9hc3NlcnQocGFnZVswXSAhPSBN QVBfRkFJTEVEKTsKKwltZW1zZXQocGFnZVswXSwgMCwgc2l6ZW9mKHNzZXUpKTsKKwlwYWdlWzFd ID0gbW1hcCgodm9pZCAqKSgodW5zaWduZWQgbG9uZylwYWdlWzBdICsgNDA5NiksIDQwOTYsCisJ CSAgICAgICBQUk9UX1dSSVRFLCBNQVBfUFJJVkFURSB8IE1BUF9BTk9OIHwgTUFQX0ZJWEVELCAt MSwgMCk7CisJaWd0X2Fzc2VydChwYWdlWzFdICE9IE1BUF9GQUlMRUQpOworCW1lbXNldChwYWdl WzFdLCAwLCBzaXplb2Yoc3NldSkpOworCW11bm1hcChwYWdlWzFdLCA0MDk2KTsKKwlhcmcudmFs dWUgPSB0b191c2VyX3BvaW50ZXIocGFnZVsxXSkgLQorCQkgICAgc2l6ZW9mKHN0cnVjdCBkcm1f aTkxNV9nZW1fY29udGV4dF9wYXJhbV9zc2V1KSArIDQ7CisJaWd0X2Fzc2VydF9lcShfX2dlbV9j b250ZXh0X2dldF9wYXJhbShmZCwgJmFyZyksIC1FRkFVTFQpOworCW11bm1hcChwYWdlWzBdLCA0 MDk2KTsKKworCS8qIFN0cmFkZGxlIGludG8gcmVhZC1vbmx5IGFyZWEuICovCisJcGFnZVswXSA9 IG1tYXAoMCwgODE5MiwgUFJPVF9XUklURSwgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTiwgLTEsIDAp OworCWlndF9hc3NlcnQocGFnZVswXSAhPSBNQVBfRkFJTEVEKTsKKwltdW5tYXAocGFnZVswXSwg ODE5Mik7CisJcGFnZVswXSA9IG1tYXAocGFnZVswXSwgNDA5NiwKKwkJICAgICAgIFBST1RfV1JJ VEUsIE1BUF9QUklWQVRFIHwgTUFQX0FOT04gfCBNQVBfRklYRUQsIC0xLCAwKTsKKwlpZ3RfYXNz ZXJ0KHBhZ2VbMF0gIT0gTUFQX0ZBSUxFRCk7CisJbWVtc2V0KHBhZ2VbMF0sIDAsIHNpemVvZihz c2V1KSk7CisJcGFnZVsxXSA9IG1tYXAoKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpcGFnZVswXSAr IDQwOTYpLCA0MDk2LAorCQkgICAgICAgUFJPVF9XUklURSwgTUFQX1BSSVZBVEUgfCBNQVBfQU5P TiB8IE1BUF9GSVhFRCwgLTEsIDApOworCWlndF9hc3NlcnQocGFnZVsxXSAhPSBNQVBfRkFJTEVE KTsKKwltZW1zZXQocGFnZVsxXSwgMCwgc2l6ZW9mKHNzZXUpKTsKKwlpZ3RfYXNzZXJ0KG1wcm90 ZWN0KHBhZ2VbMV0sIDQwOTYsIFBST1RfUkVBRCkgPT0gMCk7CisJYXJnLnZhbHVlID0gdG9fdXNl cl9wb2ludGVyKHBhZ2VbMV0gLSBzaXplb2Yoc3NldSkgKyA0KTsKKwlpZ3RfYXNzZXJ0X2VxKF9f Z2VtX2NvbnRleHRfZ2V0X3BhcmFtKGZkLCAmYXJnKSwgLUVGQVVMVCk7CisJbXVubWFwKHBhZ2Vb MF0sIDQwOTYpOworCW11bm1hcChwYWdlWzFdLCA0MDk2KTsKKworCS8qIHNldCBwYXJhbSAqLwor CisJLyogSW52YWxpZCBzaXplcy4gKi8KKwlhcmcuc2l6ZSA9IDE7CisJaWd0X2Fzc2VydF9lcShf X2dlbV9jb250ZXh0X3NldF9wYXJhbShmZCwgJmFyZyksIC1FSU5WQUwpOworCisJYXJnLnNpemUg PSAwOworCWlndF9hc3NlcnRfZXEoX19nZW1fY29udGV4dF9zZXRfcGFyYW0oZmQsICZhcmcpLCAt RUlOVkFMKTsKKwlhcmcuc2l6ZSA9IHN6OworCisJLyogQmFkIHBvaW50ZXJzLiAqLworCWFyZy52 YWx1ZSA9IDA7CisJaWd0X2Fzc2VydF9lcShfX2dlbV9jb250ZXh0X3NldF9wYXJhbShmZCwgJmFy ZyksIC1FRkFVTFQpOworCWFyZy52YWx1ZSA9IC0xOworCWlndF9hc3NlcnRfZXEoX19nZW1fY29u dGV4dF9zZXRfcGFyYW0oZmQsICZhcmcpLCAtRUZBVUxUKTsKKwlhcmcudmFsdWUgPSAxOworCWln dF9hc3NlcnRfZXEoX19nZW1fY29udGV4dF9zZXRfcGFyYW0oZmQsICZhcmcpLCAtRUZBVUxUKTsK KworCS8qIEdldCB2YWxpZCBTU0VVLiAqLworCWFyZy52YWx1ZSA9IHRvX3VzZXJfcG9pbnRlcigm c3NldSk7CisJaWd0X2Fzc2VydF9lcShfX2dlbV9jb250ZXh0X2dldF9wYXJhbShmZCwgJmFyZyks IDApOworCisJLyogVW5tYXBwZWQuICovCisJcGFnZVswXSA9IG1tYXAoMCwgNDA5NiwgUFJPVF9X UklURSwgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTiwgLTEsIDApOworCWlndF9hc3NlcnQocGFnZVsw XSAhPSBNQVBfRkFJTEVEKTsKKwltZW1jcHkocGFnZVswXSwgJnNzZXUsIHNpemVvZihzc2V1KSk7 CisJbXVubWFwKHBhZ2VbMF0sIDQwOTYpOworCWFyZy52YWx1ZSA9IHRvX3VzZXJfcG9pbnRlcihw YWdlWzBdKTsKKwlpZ3RfYXNzZXJ0X2VxKF9fZ2VtX2NvbnRleHRfc2V0X3BhcmFtKGZkLCAmYXJn KSwgLUVGQVVMVCk7CisKKwkvKiBTdHJhZGRsZSBpbnRvIHVubWFwcGVkIGFyZWEuICovCisJcGFn ZVswXSA9IG1tYXAoMCwgODE5MiwgUFJPVF9XUklURSwgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTiwg LTEsIDApOworCWlndF9hc3NlcnQocGFnZVswXSAhPSBNQVBfRkFJTEVEKTsKKwltdW5tYXAocGFn ZVswXSwgODE5Mik7CisJcGFnZVswXSA9IG1tYXAocGFnZVswXSwgNDA5NiwKKwkJICAgICAgIFBS T1RfV1JJVEUsIE1BUF9QUklWQVRFIHwgTUFQX0FOT04gfCBNQVBfRklYRUQsIC0xLCAwKTsKKwlp Z3RfYXNzZXJ0KHBhZ2VbMF0gIT0gTUFQX0ZBSUxFRCk7CisJcGFnZVsxXSA9IG1tYXAoKHZvaWQg KikoKHVuc2lnbmVkIGxvbmcpcGFnZVswXSArIDQwOTYpLCA0MDk2LAorCQkgICAgICAgUFJPVF9X UklURSwgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTiB8IE1BUF9GSVhFRCwgLTEsIDApOworCWlndF9h c3NlcnQocGFnZVsxXSAhPSBNQVBfRkFJTEVEKTsKKwlhZGRyID0gcGFnZVsxXSAtIHNpemVvZihz c2V1KSArIDQ7CisJbWVtY3B5KGFkZHIsICZzc2V1LCBzaXplb2Yoc3NldSkpOworCW11bm1hcChw YWdlWzFdLCA0MDk2KTsKKwlhcmcudmFsdWUgPSB0b191c2VyX3BvaW50ZXIoYWRkcik7CisJaWd0 X2Fzc2VydF9lcShfX2dlbV9jb250ZXh0X3NldF9wYXJhbShmZCwgJmFyZyksIC1FRkFVTFQpOwor CW11bm1hcChwYWdlWzBdLCA0MDk2KTsKKworCWdlbV9jb250ZXh0X2Rlc3Ryb3koZmQsIGFyZy5j dHhfaWQpOworfQorCisvKgorICogVmVyaWZ5IHRoYXQgZ2d0dCBtYXBwZWQgYXJlYSBjYW4gYmUg dXNlZCBhcyB0aGUgc3NldSBwb2ludGVyLgorICovCitzdGF0aWMgdm9pZAordGVzdF9nZ3R0X2Fy Z3MoaW50IGZkKQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1fY29udGV4dF9wYXJhbV9zc2V1ICpz c2V1OworCXN0cnVjdCBkcm1faTkxNV9nZW1fY29udGV4dF9wYXJhbSBhcmcgPQorCQl7IC5wYXJh bSA9IEk5MTVfQ09OVEVYVF9QQVJBTV9TU0VVLAorCQkgIC5jdHhfaWQgPSBnZW1fY29udGV4dF9j cmVhdGUoZmQpLAorCQkgIC5zaXplID0gc2l6ZW9mKCpzc2V1KSwKKwkJfTsKKwl1aW50MzJfdCBi bzsKKworCWJvID0gZ2VtX2NyZWF0ZShmZCwgNDA5Nik7CisJYXJnLnZhbHVlID0gdG9fdXNlcl9w b2ludGVyKGdlbV9tbWFwX19ndHQoZmQsIGJvLCA0MDk2LAorCQkJCQkJICBQUk9UX1JFQUQgfCBQ Uk9UX1dSSVRFKSk7CisKKwlpZ3RfYXNzZXJ0X2VxKF9fZ2VtX2NvbnRleHRfZ2V0X3BhcmFtKGZk LCAmYXJnKSwgMCk7CisJaWd0X2Fzc2VydF9lcShfX2dlbV9jb250ZXh0X3NldF9wYXJhbShmZCwg JmFyZyksIDApOworCisJbXVubWFwKCh2b2lkICopYXJnLnZhbHVlLCA0MDk2KTsKKwlnZW1fY2xv c2UoZmQsIGJvKTsKKwlnZW1fY29udGV4dF9kZXN0cm95KGZkLCBhcmcuY3R4X2lkKTsKK30KKwor LyoKKyAqIFZlcmlmeSB0aGF0IGludmFsaWQgU1NFVSB2YWx1ZXMgYXJlIHJlamVjdGVkLgorICov CitzdGF0aWMgdm9pZAordGVzdF9pbnZhbGlkX3NzZXUoaW50IGZkKQoreworCXN0cnVjdCBkcm1f aTkxNV9nZW1fY29udGV4dF9wYXJhbV9zc2V1IGRlZmF1bHRfc3NldSA9IHsgfTsKKwlzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX2NvbnRleHRfcGFyYW1fc3NldSBzc2V1ID0geyB9OworCXN0cnVjdCBkcm1f aTkxNV9nZW1fY29udGV4dF9wYXJhbSBhcmcgPQorCQl7IC5wYXJhbSA9IEk5MTVfQ09OVEVYVF9Q QVJBTV9TU0VVLAorCQkgIC5jdHhfaWQgPSBnZW1fY29udGV4dF9jcmVhdGUoZmQpLAorCQkgIC5z aXplID0gc2l6ZW9mKHNzZXUpLAorCQl9OworCXVuc2lnbmVkIGludCBpOworCisJLyogRmV0Y2gg dGhlIGRldmljZSBkZWZhdWx0cy4gKi8KKwlhcmcudmFsdWUgPSB0b191c2VyX3BvaW50ZXIoJmRl ZmF1bHRfc3NldSk7CisJZ2VtX2NvbnRleHRfZ2V0X3BhcmFtKGZkLCAmYXJnKTsKKworCWFyZy52 YWx1ZSA9IHRvX3VzZXJfcG9pbnRlcigmc3NldSk7CisKKwkvKiBUcnkgYWxsIHNsaWNlIG1hc2tz IGtub3duIHRvIGJlIGludmFsaWQuICovCisJc3NldSA9IGRlZmF1bHRfc3NldTsKKwlmb3IgKGkg PSAxOyBpIDw9ICg4IC0gX19zbGljZV9jb3VudF9fKTsgaSsrKSB7CisJCXNzZXUuc2xpY2VfbWFz ayA9IG1hc2tfcGx1cyhfX3NsaWNlX21hc2tfXywgaSk7CisJCWlndF9hc3NlcnRfZXEoX19nZW1f Y29udGV4dF9zZXRfcGFyYW0oZmQsICZhcmcpLCAtRUlOVkFMKTsKKwl9CisKKwkvKiAwIHNsaWNl cy4gKi8KKwlzc2V1LnNsaWNlX21hc2sgPSAwOworCWlndF9hc3NlcnRfZXEoLUVJTlZBTCwgX19n ZW1fY29udGV4dF9zZXRfcGFyYW0oZmQsICZhcmcpKTsKKworCS8qIFRyeSBhbGwgc3Vic2xpY2Ug bWFza3Mga25vd24gdG8gYmUgaW52YWxpZC4gKi8KKwlzc2V1ID0gZGVmYXVsdF9zc2V1OworCWZv ciAoaSA9IDE7IGkgPD0gKDggLSBfX3N1YnNsaWNlX2NvdW50X18pOyBpKyspIHsKKwkJc3NldS5z dWJzbGljZV9tYXNrID0gbWFza19wbHVzKF9fc3Vic2xpY2VfbWFza19fLCBpKTsKKwkJaWd0X2Fz c2VydF9lcShfX2dlbV9jb250ZXh0X3NldF9wYXJhbShmZCwgJmFyZyksIC1FSU5WQUwpOworCX0K KworCS8qIDAgc3Vic2xpY2VzLiAqLworCXNzZXUuc3Vic2xpY2VfbWFzayA9IDA7CisJaWd0X2Fz c2VydF9lcShfX2dlbV9jb250ZXh0X3NldF9wYXJhbShmZCwgJmFyZyksIC1FSU5WQUwpOworCisJ LyogVHJ5IG51bWJlciBvZiBFVXMgc3VwZXJpb3IgdG8gdGhlIG1heCBhdmFpbGFibGUuICovCisJ c3NldSA9IGRlZmF1bHRfc3NldTsKKwlzc2V1Lm1pbl9ldXNfcGVyX3N1YnNsaWNlID0gZGVmYXVs dF9zc2V1Lm1heF9ldXNfcGVyX3N1YnNsaWNlICsgMTsKKwlpZ3RfYXNzZXJ0X2VxKF9fZ2VtX2Nv bnRleHRfc2V0X3BhcmFtKGZkLCAmYXJnKSwgLUVJTlZBTCk7CisKKwlzc2V1ID0gZGVmYXVsdF9z c2V1OworCXNzZXUubWF4X2V1c19wZXJfc3Vic2xpY2UgPSBkZWZhdWx0X3NzZXUubWF4X2V1c19w ZXJfc3Vic2xpY2UgKyAxOworCWlndF9hc3NlcnRfZXEoX19nZW1fY29udGV4dF9zZXRfcGFyYW0o ZmQsICZhcmcpLCAtRUlOVkFMKTsKKworCS8qIFRyeSB0byBwcm9ncmFtIDAgbWF4IEVVcy4gKi8K Kwlzc2V1ID0gZGVmYXVsdF9zc2V1OworCXNzZXUubWF4X2V1c19wZXJfc3Vic2xpY2UgPSAwOwor CWlndF9hc3NlcnRfZXEoX19nZW1fY29udGV4dF9zZXRfcGFyYW0oZmQsICZhcmcpLCAtRUlOVkFM KTsKKworCS8qIE1pbiA+IG1heCAqLworCXNzZXUgPSBkZWZhdWx0X3NzZXU7CisJc3NldS5taW5f ZXVzX3Blcl9zdWJzbGljZSA9IHNzZXUubWF4X2V1c19wZXJfc3Vic2xpY2U7CisJc3NldS5tYXhf ZXVzX3Blcl9zdWJzbGljZSA9IDE7CisJaWd0X2Fzc2VydF9lcShfX2dlbV9jb250ZXh0X3NldF9w YXJhbShmZCwgJmFyZyksIC1FSU5WQUwpOworCisJaWYgKF9faW50ZWxfZ2VuX18gIT0gMTEpCisJ CWdvdG8gb3V0OworCisJLyogU3Vic2V0IG9mIHN1YnNsaWNlcyBidXQgc2xpY2UgbWFzayBncmVh dGVyIHRoYW4gb25lLiAqLworCWlmIChfX3NsaWNlX2NvdW50X18gPiAxKSB7CisJCXNzZXUgPSBk ZWZhdWx0X3NzZXU7CisJCXNzZXUuc3Vic2xpY2VfbWFzayA9IG1hc2tfbWludXNfb25lKHNzZXUu c3Vic2xpY2VfbWFzayk7CisJCWlndF9hc3NlcnRfZXEoX19nZW1fY29udGV4dF9zZXRfcGFyYW0o ZmQsICZhcmcpLCAtRUlOVkFMKTsKKwl9CisKKwkvKiBPZGQgc3Vic2xpY2VzIGFib3ZlIGZvdXIu ICovCisJc3NldSA9IGRlZmF1bHRfc3NldTsKKwlzc2V1LnNsaWNlX21hc2sgPSAweDE7CisJc3Nl dS5zdWJzbGljZV9tYXNrID0gbWFza19taW51c19vbmUoc3NldS5zdWJzbGljZV9tYXNrKTsKKwlp Z3RfYXNzZXJ0X2VxKF9fZ2VtX2NvbnRleHRfc2V0X3BhcmFtKGZkLCAmYXJnKSwgLUVJTlZBTCk7 CisKKwkvKiBNb3JlIHRoYW4gaGFsZiBzdWJzbGljZXMgd2l0aCBvbmUgc2xpY2UuICovCisJc3Nl dSA9IGRlZmF1bHRfc3NldTsKKwlzc2V1LnNsaWNlX21hc2sgPSAweDE7CisJc3NldS5zdWJzbGlj ZV9tYXNrID0gbWFza19taW51cyhzc2V1LnN1YnNsaWNlX21hc2ssCisJCQkJCV9fc3Vic2xpY2Vf Y291bnRfXyAvIDIgLSAxKTsKKwlpZ3RfYXNzZXJ0X2VxKF9fZ2VtX2NvbnRleHRfc2V0X3BhcmFt KGZkLCAmYXJnKSwgLUVJTlZBTCk7CisKK291dDoKKwlnZW1fY29udGV4dF9kZXN0cm95KGZkLCBh cmcuY3R4X2lkKTsKK30KKworLyogVmVyaWZ5IHRoYXQgdGhlIGtlcm5lbCByZXR1cm5zIGEgY29y cmVjdCBlcnJvciB2YWx1ZSBvbiBHZW4gPCA4LiAqLworc3RhdGljIHZvaWQKK2luaXRfY29udGV4 dHMoaW50IGZkLCB1aW50MzJfdCAqY3R4LCB1bnNpZ25lZCBpbnQgbnVtLAorCSAgICAgIHVpbnQ2 NF90IG1hc2swLCB1aW50NjRfdCBtYXNrMSkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWlndF9h c3NlcnRfZXEobnVtLCAyKTsKKworCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykKKwkJY3R4W2ld ID0gZ2VtX2NvbnRleHRfY3JlYXRlKGZkKTsKKworCWNvbnRleHRfc2V0X3NsaWNlX21hc2soZmQs IGN0eFswXSwgbWFzazApOworCWNvbnRleHRfc2V0X3NsaWNlX21hc2soZmQsIGN0eFsxXSwgbWFz azEpOworfQorCisvKgorICogVmVyaWZ5IHRoYXQgcG93ZXJnYXRpbmcgc2V0dGluZ3MgYXJlIHB1 dCBvbiBob2xkIHdoaWxlIGk5MTUvcGVyZiBpcworICogYWN0aXZlLgorICovCitzdGF0aWMgdm9p ZAordGVzdF9wZXJmX29hKGludCBmZCkKK3sKKwl1aW50NjRfdCBwcm9wZXJ0aWVzW10gPSB7CisJ CS8qIEluY2x1ZGUgT0EgcmVwb3J0cyBpbiBzYW1wbGVzICovCisJCURSTV9JOTE1X1BFUkZfUFJP UF9TQU1QTEVfT0EsIHRydWUsCisKKwkJLyogT0EgdW5pdCBjb25maWd1cmF0aW9uICovCisJCURS TV9JOTE1X1BFUkZfUFJPUF9PQV9NRVRSSUNTX1NFVCwgMSwgLyogdGVzdCBtZXRyaWMgKi8KKwkJ RFJNX0k5MTVfUEVSRl9QUk9QX09BX0ZPUk1BVCwgSTkxNV9PQV9GT1JNQVRfQTMydTQwX0E0dTMy X0I4X0M4LAorCQlEUk1fSTkxNV9QRVJGX1BST1BfT0FfRVhQT05FTlQsIDIwLAorCX07CisJc3Ry dWN0IGRybV9pOTE1X3BlcmZfb3Blbl9wYXJhbSBwYXJhbSA9IHsKKwkJLmZsYWdzID0gSTkxNV9Q RVJGX0ZMQUdfRkRfQ0xPRVhFQyB8CisJCUk5MTVfUEVSRl9GTEFHX0ZEX05PTkJMT0NLLAorCQku bnVtX3Byb3BlcnRpZXMgPSBBUlJBWV9TSVpFKHByb3BlcnRpZXMpIC8gMiwKKwkJLnByb3BlcnRp ZXNfcHRyID0gdG9fdXNlcl9wb2ludGVyKHByb3BlcnRpZXMpLAorCX07CisJdWludDY0X3QgcGdf c2xpY2VfbWFzayA9IG1hc2tfbWludXNfb25lKF9fc2xpY2VfbWFza19fKTsKKwl1bnNpZ25lZCBp bnQgc2xpY2VfY291bnQgPSBfX3NsaWNlX2NvdW50X18gLSAxOworCXVpbnQzMl90IGN0eFsyXTsK Kwl1bnNpZ25lZCBpbnQgaTsKKwlpbnQgcGVyZl9mZDsKKworCWluaXRfY29udGV4dHMoZmQsIGN0 eCwgQVJSQVlfU0laRShjdHgpLCBfX3NsaWNlX21hc2tfXywgcGdfc2xpY2VfbWFzayk7CisKKwkv KgorCSAqIFRlc3QgZmFsc2UgcG9zaXRpdmVzIHdpdGggcHJlZGljYXRlcyAob25seSBhdmFpbGFi bGUgb24KKwkgKiBiZWZvcmUgR2VuMTApLgorCSAqLworCWlmIChfX2ludGVsX2dlbl9fIDwgMTAp CisJCWlndF9hc3NlcnRfZXEocmVhZF9zbGljZV9jb3VudChmZCwgY3R4WzFdLCBfX3NsaWNlX2Nv dW50X18pLAorCQkJICAgICAgMCk7CisKKwlpZ3RfYXNzZXJ0X2VxKHJlYWRfc2xpY2VfY291bnQo ZmQsIGN0eFswXSwgMCksIF9fc2xpY2VfY291bnRfXyk7CisJaWd0X2Fzc2VydF9lcShyZWFkX3Ns aWNlX2NvdW50KGZkLCBjdHhbMV0sIDApLCBzbGljZV9jb3VudCk7CisKKwkvKgorCSAqIE5vdyBv cGVuIGk5MTUvcGVyZiBhbmQgdmVyaWZ5IHRoYXQgYWxsIGNvbnRleHRzIGhhdmUgYmVlbgorCSAq IHJlY29uZmlndXJlZCB0byB0aGUgZGV2aWNlJ3MgZGVmYXVsdC4KKwkgKi8KKwlwZXJmX2ZkID0g aWd0X2lvY3RsKGZkLCBEUk1fSU9DVExfSTkxNV9QRVJGX09QRU4sICZwYXJhbSk7CisJaWd0X2Fz c2VydF9mZChwZXJmX2ZkKTsKKworCWlmIChfX2ludGVsX2dlbl9fICE9IDExKSB7CisJCWlmIChf X2ludGVsX2dlbl9fIDwgMTApCisJCQlpZ3RfYXNzZXJ0X2VxKHJlYWRfc2xpY2VfY291bnQoZmQs IGN0eFsxXSwgc2xpY2VfY291bnQpLAorCQkJCSAgICAgIDApOworCisJCWlndF9hc3NlcnRfZXEo cmVhZF9zbGljZV9jb3VudChmZCwgY3R4WzBdLCAwKSwgX19zbGljZV9jb3VudF9fKTsKKwkJaWd0 X2Fzc2VydF9lcShyZWFkX3NsaWNlX2NvdW50KGZkLCBjdHhbMV0sIDApLCBfX3NsaWNlX2NvdW50 X18pOworCX0gZWxzZSB7CisJCWlndF9hc3NlcnRfZXEocmVhZF9zbGljZV9jb3VudChmZCwgY3R4 WzBdLCAwKSwgMSk7CisJCWlndF9hc3NlcnRfZXEocmVhZF9zbGljZV9jb3VudChmZCwgY3R4WzFd LCAwKSwgMSk7CisJCWlndF9hc3NlcnRfZXEocmVhZF9zdWJzbGljZV9jb3VudChmZCwgY3R4WzBd KSwKKwkJCSAgICAgIF9fc3Vic2xpY2VfY291bnRfXyAvIDIpOworCQlpZ3RfYXNzZXJ0X2VxKHJl YWRfc3Vic2xpY2VfY291bnQoZmQsIGN0eFsxXSksCisJCQkgICAgICBfX3N1YnNsaWNlX2NvdW50 X18gLyAyKTsKKwl9CisKKwljbG9zZShwZXJmX2ZkKTsKKworCS8qCisJICogQWZ0ZXIgY2xvc2lu ZyB0aGUgcGVyZiBzdHJlYW0sIGNvbmZpZ3VyYXRpb25zIHNob3VsZCBiZQorCSAqIGJhY2sgdG8g dGhlIHByb2dyYW1tZWQgdmFsdWVzLgorCSAqLworCWlmIChfX2ludGVsX2dlbl9fIDwgMTApCisJ CWlndF9hc3NlcnRfZXEocmVhZF9zbGljZV9jb3VudChmZCwgY3R4WzFdLCBfX3NsaWNlX2NvdW50 X18pLCAwKTsKKwlpZ3RfYXNzZXJ0X2VxKHJlYWRfc2xpY2VfY291bnQoZmQsIGN0eFswXSwgMCks IF9fc2xpY2VfY291bnRfXyk7CisJaWd0X2Fzc2VydF9lcShyZWFkX3NsaWNlX2NvdW50KGZkLCBj dHhbMV0sIDApLCBzbGljZV9jb3VudCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShj dHgpOyBpKyspCisJCWdlbV9jb250ZXh0X2Rlc3Ryb3koZmQsIGN0eFtpXSk7CisKKwkvKgorCSAq IE9wZW4gaTkxNS9wZXJmIGZpcnN0IGFuZCB2ZXJpZnkgdGhhdCBhbGwgY29udGV4dHMgY3JlYXRl ZAorCSAqIGFmdGVyd2FyZCBhcmUgY29uZmlndXJlZCB0byB0aGUgZGV2aWNlJ3MgZGVmYXVsdC4K KwkgKi8KKwlwZXJmX2ZkID0gaWd0X2lvY3RsKGZkLCBEUk1fSU9DVExfSTkxNV9QRVJGX09QRU4s ICZwYXJhbSk7CisJaWd0X2Fzc2VydF9mZChwZXJmX2ZkKTsKKworCWluaXRfY29udGV4dHMoZmQs IGN0eCwgQVJSQVlfU0laRShjdHgpLCBfX3NsaWNlX21hc2tfXywgcGdfc2xpY2VfbWFzayk7CisK KwkvKgorCSAqIENoZWNrIHRoZSBkZXZpY2UncyBkZWZhdWx0IHZhbHVlcywgZGVzcGl0ZSBzZXR0 aW5nCisJICogb3RoZXJ3aXNlLgorCSAqLworCWlmIChfX2ludGVsX2dlbl9fICE9IDExKSB7CisJ CWlmIChfX2ludGVsX2dlbl9fIDwgMTApCisJCQlpZ3RfYXNzZXJ0X2VxKHJlYWRfc2xpY2VfY291 bnQoZmQsIGN0eFsxXSwKKwkJCQkJCSAgICAgICBzbGljZV9jb3VudCksIDApOworCisJCWlndF9h c3NlcnRfZXEocmVhZF9zbGljZV9jb3VudChmZCwgY3R4WzBdLCAwKSwgX19zbGljZV9jb3VudF9f KTsKKwkJaWd0X2Fzc2VydF9lcShyZWFkX3NsaWNlX2NvdW50KGZkLCBjdHhbMV0sIDApLCBfX3Ns aWNlX2NvdW50X18pOworCX0gZWxzZSB7CisJCWlndF9hc3NlcnRfZXEocmVhZF9zbGljZV9jb3Vu dChmZCwgY3R4WzBdLCAwKSwgMSk7CisJCWlndF9hc3NlcnRfZXEocmVhZF9zbGljZV9jb3VudChm ZCwgY3R4WzFdLCAwKSwgMSk7CisJCWlndF9hc3NlcnRfZXEocmVhZF9zdWJzbGljZV9jb3VudChm ZCwgY3R4WzBdKSwKKwkJCSAgICAgIF9fc3Vic2xpY2VfY291bnRfXyAvIDIpOworCQlpZ3RfYXNz ZXJ0X2VxKHJlYWRfc3Vic2xpY2VfY291bnQoZmQsIGN0eFsxXSksCisJCQkgICAgICBfX3N1YnNs aWNlX2NvdW50X18gLyAyKTsKKwl9CisKKwljbG9zZShwZXJmX2ZkKTsKKworCS8qCisJICogQWZ0 ZXIgY2xvc2luZyB0aGUgcGVyZiBzdHJlYW0sIGNvbmZpZ3VyYXRpb25zIHNob3VsZCBiZQorCSAq IGJhY2sgdG8gdGhlIHByb2dyYW1tZWQgdmFsdWVzLgorCSAqLworCWlmIChfX2ludGVsX2dlbl9f IDwgMTApCisJCWlndF9hc3NlcnRfZXEocmVhZF9zbGljZV9jb3VudChmZCwgY3R4WzFdLCBfX3Ns aWNlX2NvdW50X18pLAorCQkJICAgICAgMCk7CisKKwlpZ3RfYXNzZXJ0X2VxKHJlYWRfc2xpY2Vf Y291bnQoZmQsIGN0eFswXSwgMCksIF9fc2xpY2VfY291bnRfXyk7CisJaWd0X2Fzc2VydF9lcShy ZWFkX3NsaWNlX2NvdW50KGZkLCBjdHhbMV0sIDApLCBzbGljZV9jb3VudCk7CisKKwlmb3IgKGkg PSAwOyBpIDwgQVJSQVlfU0laRShjdHgpOyBpKyspCisJCWdlbV9jb250ZXh0X2Rlc3Ryb3koZmQs IGN0eFtpXSk7Cit9CisKK3N0YXRpYyBpZ3Rfc3Bpbl90ICogX19zcGluX3BvbGwoaW50IGZkLCB1 aW50MzJfdCBjdHgsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJc3RydWN0IGlndF9zcGluX2Zh Y3Rvcnkgb3B0cyA9IHsKKwkJLmN0eCA9IGN0eCwKKwkJLmVuZ2luZSA9IGZsYWdzLAorCX07CisK KwlpZiAoZ2VtX2Nhbl9zdG9yZV9kd29yZChmZCwgZmxhZ3MpKQorCQlvcHRzLmZsYWdzIHw9IElH VF9TUElOX1BPTExfUlVOOworCisJcmV0dXJuIF9faWd0X3NwaW5fYmF0Y2hfZmFjdG9yeShmZCwg Jm9wdHMpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBfX3NwaW5fd2FpdChpbnQgZmQsIGln dF9zcGluX3QgKnNwaW4pCit7CisJc3RydWN0IHRpbWVzcGVjIHN0YXJ0ID0geyB9OworCisJaWd0 X25zZWNfZWxhcHNlZCgmc3RhcnQpOworCisJaWYgKHNwaW4tPnJ1bm5pbmcpIHsKKwkJdW5zaWdu ZWQgbG9uZyB0aW1lb3V0ID0gMDsKKworCQl3aGlsZSAoIVJFQURfT05DRSgqc3Bpbi0+cnVubmlu ZykpIHsKKwkJCXVuc2lnbmVkIGxvbmcgdCA9IGlndF9uc2VjX2VsYXBzZWQoJnN0YXJ0KTsKKwor CQkJaWYgKCh0IC0gdGltZW91dCkgPiAyNTBlNikgeworCQkJCXRpbWVvdXQgPSB0OworCQkJCWln dF93YXJuKCJTcGlubmVyIG5vdCBydW5uaW5nIGFmdGVyICUuMmZtc1xuIiwKKwkJCQkJIChkb3Vi bGUpdCAvIDFlNik7CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQlpZ3RfZGVidWcoIl9fc3Bpbl93 YWl0IC0gdXNsZWVwIG1vZGVcbiIpOworCQl1c2xlZXAoNTAwZTMpOyAvKiBCZXR0ZXIgdGhhbiBu b3RoaW5nISAqLworCX0KKworCXJldHVybiBpZ3RfbnNlY19lbGFwc2VkKCZzdGFydCk7Cit9CisK K3N0YXRpYyBpZ3Rfc3Bpbl90ICogX19zcGluX3N5bmMoaW50IGZkLCB1aW50MzJfdCBjdHgsIHVu c2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJaWd0X3NwaW5fdCAqc3BpbiA9IF9fc3Bpbl9wb2xsKGZk LCBjdHgsIGZsYWdzKTsKKworCV9fc3Bpbl93YWl0KGZkLCBzcGluKTsKKworCXJldHVybiBzcGlu OworfQorCitzdGF0aWMgdWludDMyX3QKK3JlYWRfc2xpY2VfY291bnRfYnVzeShpbnQgZmQsIHVp bnQzMl90IGNvbnRleHQsIHVpbnQzMl90IGV4cGVjdGVkLAorCQkgICAgICBpZ3Rfc3Bpbl90ICpz cGluKQoreworCXJldHVybiBfX3JlYWRfc2xpY2VfY291bnQoZmQsIGNvbnRleHQsIGV4cGVjdGVk LCBzcGluKTsKK30KKworI2RlZmluZSBURVNUX0lETEUgKDEpCisjZGVmaW5lIFRFU1RfQlVTWSAo MikKKworLyoKKyAqIFRlc3QgY29udGV4dCByZS1jb25maWd1cmF0aW9uIHdpdGggZWl0aGVyIGlk bGUgb3IgYnVzeSBjb250ZXh0cy4KKyAqLworc3RhdGljIHZvaWQKK3Rlc3RfZHluYW1pYyhpbnQg ZmQsIHVuc2lnbmVkIGludCBmbGFncykKK3sKKwl1aW50NjRfdCBwZ19zbGljZV9tYXNrID0gbWFz a19taW51c19vbmUoX19zbGljZV9tYXNrX18pOworCXVuc2lnbmVkIGludCBwZ19zbGljZV9jb3Vu dCA9IF9fc2xpY2VfY291bnRfXyAtIDE7CisJc3RydWN0IGRybV9pOTE1X2dlbV9jb250ZXh0X3Bh cmFtX3NzZXUgc3NldSA9IHsgfTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2NvbnRleHRfcGFyYW0g YXJnID0KKwkJeyAucGFyYW0gPSBJOTE1X0NPTlRFWFRfUEFSQU1fU1NFVSwKKwkJICAuY3R4X2lk ID0gZ2VtX2NvbnRleHRfY3JlYXRlKGZkKSwKKwkJICAuc2l6ZSA9IHNpemVvZihzc2V1KSwKKwkJ ICAudmFsdWUgPSB0b191c2VyX3BvaW50ZXIoJnNzZXUpIH07CisJaWd0X3NwaW5fdCAqc3BpbiA9 IE5VTEw7CisKKwlnZW1fY29udGV4dF9nZXRfcGFyYW0oZmQsICZhcmcpOworCisJLyogRmlyc3Qg c2V0IHRoZSBkZWZhdWx0IG1hc2sgKi8KKwlpZiAoZmxhZ3MgJiBURVNUX0JVU1kpCisJCXNwaW4g PSBfX3NwaW5fc3luYyhmZCwgYXJnLmN0eF9pZCwgSTkxNV9FWEVDX1JFTkRFUik7CisKKwlzc2V1 LnNsaWNlX21hc2sgPSBfX3NsaWNlX21hc2tfXzsKKwlnZW1fY29udGV4dF9zZXRfcGFyYW0oZmQs ICZhcmcpOworCisJaWd0X2Fzc2VydF9lcShyZWFkX3NsaWNlX2NvdW50X2J1c3koZmQsIGFyZy5j dHhfaWQsIDAsIHNwaW4pLAorCQkgICAgICBfX3NsaWNlX2NvdW50X18pOworCWlndF9hc3NlcnRf ZXEocmVhZF9zbGljZV9jb3VudChmZCwgMCwgMCksIF9fc2xpY2VfY291bnRfXyk7CisKKwlpZiAo c3BpbikgeworCQlpZ3Rfc3Bpbl9iYXRjaF9mcmVlKGZkLCBzcGluKTsKKwkJc3BpbiA9IE5VTEw7 CisJfQorCisJaWYgKGZsYWdzICYgVEVTVF9JRExFKQorCQlpZ3RfZHJvcF9jYWNoZXNfc2V0KGZk LCBEUk9QX1JFVElSRSB8IERST1BfSURMRSB8IERST1BfQUNUSVZFKTsKKworCS8qIFRoZW4gc2V0 IGEgcG93ZXJnYXRlZCBjb25maWd1cmF0aW9uICovCisJaWYgKGZsYWdzICYgVEVTVF9CVVNZKQor CQlzcGluID0gX19zcGluX3N5bmMoZmQsIGFyZy5jdHhfaWQsIEk5MTVfRVhFQ19SRU5ERVIpOwor CisJc3NldS5zbGljZV9tYXNrID0gcGdfc2xpY2VfbWFzazsKKwlnZW1fY29udGV4dF9zZXRfcGFy YW0oZmQsICZhcmcpOworCisJaWd0X2Fzc2VydF9lcShyZWFkX3NsaWNlX2NvdW50X2J1c3koZmQs IGFyZy5jdHhfaWQsIDAsIHNwaW4pLAorCQkgICAgICBwZ19zbGljZV9jb3VudCk7CisJaWd0X2Fz c2VydF9lcShyZWFkX3NsaWNlX2NvdW50KGZkLCAwLCAwKSwgX19zbGljZV9jb3VudF9fKTsKKwor CWlmIChzcGluKSB7CisJCWlndF9zcGluX2JhdGNoX2ZyZWUoZmQsIHNwaW4pOworCQlzcGluID0g TlVMTDsKKwl9CisKKwlpZiAoZmxhZ3MgJiBURVNUX0lETEUpCisJCWlndF9kcm9wX2NhY2hlc19z ZXQoZmQsIERST1BfUkVUSVJFIHwgRFJPUF9JRExFIHwgRFJPUF9BQ1RJVkUpOworCisJLyogUHV0 IHRoZSBkZXZpY2UncyBkZWZhdWx0IGJhY2sgYWdhaW4gKi8KKwlpZiAoZmxhZ3MgJiBURVNUX0JV U1kpCisJCXNwaW4gPSBfX3NwaW5fc3luYyhmZCwgYXJnLmN0eF9pZCwgSTkxNV9FWEVDX1JFTkRF Uik7CisKKwlzc2V1LnNsaWNlX21hc2sgPSBfX3NsaWNlX21hc2tfXzsKKwlnZW1fY29udGV4dF9z ZXRfcGFyYW0oZmQsICZhcmcpOworCisJaWd0X2Fzc2VydF9lcShyZWFkX3NsaWNlX2NvdW50X2J1 c3koZmQsIGFyZy5jdHhfaWQsIDAsIHNwaW4pLAorCQkgICAgICBfX3NsaWNlX2NvdW50X18pOwor CWlndF9hc3NlcnRfZXEocmVhZF9zbGljZV9jb3VudChmZCwgMCwgMCksIF9fc2xpY2VfY291bnRf Xyk7CisKKwlpZiAoc3BpbikgeworCQlpZ3Rfc3Bpbl9iYXRjaF9mcmVlKGZkLCBzcGluKTsKKwkJ c3BpbiA9IE5VTEw7CisJfQorCisJaWYgKGZsYWdzICYgVEVTVF9JRExFKQorCQlpZ3RfZHJvcF9j YWNoZXNfc2V0KGZkLCBEUk9QX1JFVElSRSB8IERST1BfSURMRSB8IERST1BfQUNUSVZFKTsKKwor CS8qIE9uZSBsYXN0IHBvd2VyZ2F0ZWQgY29uZmlnIGZvciB0aGUgcm9hZC4uLiAqLworCWlmIChm bGFncyAmIFRFU1RfQlVTWSkKKwkJc3BpbiA9IF9fc3Bpbl9zeW5jKGZkLCBhcmcuY3R4X2lkLCBJ OTE1X0VYRUNfUkVOREVSKTsKKworCXNzZXUuc2xpY2VfbWFzayA9IHBnX3NsaWNlX21hc2s7CisJ Z2VtX2NvbnRleHRfc2V0X3BhcmFtKGZkLCAmYXJnKTsKKworCWlndF9hc3NlcnRfZXEocmVhZF9z bGljZV9jb3VudF9idXN5KGZkLCBhcmcuY3R4X2lkLCAwLCBzcGluKSwKKwkJICAgICAgcGdfc2xp Y2VfY291bnQpOworCWlndF9hc3NlcnRfZXEocmVhZF9zbGljZV9jb3VudChmZCwgMCwgMCksIF9f c2xpY2VfY291bnRfXyk7CisKKwlpZiAoc3BpbikgeworCQlpZ3Rfc3Bpbl9iYXRjaF9mcmVlKGZk LCBzcGluKTsKKwkJc3BpbiA9IE5VTEw7CisJfQorCisJZ2VtX2NvbnRleHRfZGVzdHJveShmZCwg YXJnLmN0eF9pZCk7Cit9CisKK2lndF9tYWluCit7CisJdW5zaWduZWQgaW50IG1heF9zbGljZXMg PSAzLCBtYXhfc3Vic2xpY2VzID0gMzsKKwl1bnNpZ25lZCBpbnQgaTsKKwlpbnQgZmQ7CisKKwlp Z3RfZml4dHVyZSB7CisJCWZkID0gZHJtX29wZW5fZHJpdmVyKERSSVZFUl9JTlRFTCk7CisJCWln dF9yZXF1aXJlX2dlbShmZCk7CisKKwkJX19pbnRlbF9kZXZpZF9fID0gaW50ZWxfZ2V0X2RybV9k ZXZpZChmZCk7CisJCV9faW50ZWxfZ2VuX18gPSBpbnRlbF9nZW4oX19pbnRlbF9kZXZpZF9fKTsK KworCQlpZ3RfcmVxdWlyZShrZXJuZWxfaGFzX3Blcl9jb250ZXh0X3NzZXVfc3VwcG9ydChmZCkp OworCisJCWlmIChfX2ludGVsX2dlbl9fID49IDExKQorCQkJX19yZWFkX3NsaWNlX2NvdW50ID0g Z2VuMTFfcmVhZF9zbGljZV9jb3VudDsKKwkJZWxzZQorCQkJX19yZWFkX3NsaWNlX2NvdW50ID0g Z2VuOF9yZWFkX3NsaWNlX2NvdW50OworCX0KKworCWlndF9zdWJ0ZXN0X2dyb3VwIHsKKwkJaWd0 X2ZpeHR1cmUgeworCQkJZHJtX2k5MTVfZ2V0cGFyYW1fdCBncDsKKworCQkJZ3AucGFyYW0gPSBJ OTE1X1BBUkFNX1NMSUNFX01BU0s7CisJCQlncC52YWx1ZSA9IChpbnQgKikgJl9fc2xpY2VfbWFz a19fOworCQkJZG9faW9jdGwoZmQsIERSTV9JT0NUTF9JOTE1X0dFVFBBUkFNLCAmZ3ApOworCQkJ X19zbGljZV9jb3VudF9fID0gX19idWlsdGluX3BvcGNvdW50KF9fc2xpY2VfbWFza19fKTsKKwor CQkJZ3AucGFyYW0gPSBJOTE1X1BBUkFNX1NVQlNMSUNFX01BU0s7CisJCQlncC52YWx1ZSA9IChp bnQgKikgJl9fc3Vic2xpY2VfbWFza19fOworCQkJZG9faW9jdGwoZmQsIERSTV9JT0NUTF9JOTE1 X0dFVFBBUkFNLCAmZ3ApOworCQkJX19zdWJzbGljZV9jb3VudF9fID0KKwkJCQlfX2J1aWx0aW5f cG9wY291bnQoX19zdWJzbGljZV9tYXNrX18pOworCQl9CisKKwkJaWd0X3N1YnRlc3QoImludmFs aWQtYXJncyIpCisJCQl0ZXN0X2ludmFsaWRfYXJncyhmZCk7CisKKwkJaWd0X3N1YnRlc3QoImlu dmFsaWQtc3NldSIpCisJCQl0ZXN0X2ludmFsaWRfc3NldShmZCk7CisKKwkJaWd0X3N1YnRlc3Qo ImdndHQtYXJncyIpCisJCQl0ZXN0X2dndHRfYXJncyhmZCk7CisKKwkJaWd0X3N1YnRlc3QoImVu Z2luZXMiKQorCQkJdGVzdF9lbmdpbmVzKGZkKTsKKworCQlmb3IgKGkgPSAxOyBpIDwgbWF4X3Ns aWNlczsgaSsrKSB7CisJCQlpZ3Rfc3VidGVzdF9mKCJzbGljZS1wZy0laSIsIGkpIHsKKwkJCQlp Z3RfcmVxdWlyZShfX3NsaWNlX2NvdW50X18gPiBpKTsKKworCQkJCXRlc3Rfc2xpY2VfcGcoZmQs IGkpOworCQkJfQorCQl9CisKKwkJZm9yIChpID0gMTsgaSA8IG1heF9zdWJzbGljZXM7IGkrKykg eworCQkJaWd0X3N1YnRlc3RfZigic3Vic2xpY2UtcGctJWkiLCBpKSB7CisJCQkJaWd0X3JlcXVp cmUoX19zdWJzbGljZV9jb3VudF9fID49IDIpOworCisJCQkJLyoKKwkJCQkgKiBPbmx5IGF2YWls YWJsZSBvbiBzb21lIEF0b20gcGxhdGZvcm1zIGFuZAorCQkJCSAqIEdlbjEwKy4KKwkJCQkgKi8K KwkJCQlpZ3RfcmVxdWlyZShJU19CUk9YVE9OKF9faW50ZWxfZGV2aWRfXykgfHwKKwkJCQkJICAg IElTX0dFTUlOSUxBS0UoX19pbnRlbF9kZXZpZF9fKSB8fAorCQkJCQkgICAgX19pbnRlbF9nZW5f XyA+PSAxMCk7CisKKwkJCQl0ZXN0X3N1YnNsaWNlX3BnKGZkLCBpKTsKKwkJCX0KKwkJfQorCisJ CWlndF9zdWJ0ZXN0KCJzc2V1LXBlcmYtb2EiKSB7CisJCQlpZ3RfcmVxdWlyZShfX3NsaWNlX2Nv dW50X18gPiAxKTsKKworCQkJdGVzdF9wZXJmX29hKGZkKTsKKwkJfQorCisJCWlndF9zdWJ0ZXN0 KCJkeW5hbWljIikgeworCQkJaWd0X3JlcXVpcmUoX19zbGljZV9jb3VudF9fID4gMSk7CisKKwkJ CXRlc3RfZHluYW1pYyhmZCwgMCk7CisJCX0KKworCQlpZ3Rfc3VidGVzdCgiZHluYW1pYy1idXN5 IikgeworCQkJaWd0X3JlcXVpcmUoX19zbGljZV9jb3VudF9fID4gMSk7CisKKwkJCXRlc3RfZHlu YW1pYyhmZCwgVEVTVF9CVVNZKTsKKwkJfQorCisJCWlndF9zdWJ0ZXN0KCJkeW5hbWljLWlkbGUi KSB7CisJCQlpZ3RfcmVxdWlyZShfX3NsaWNlX2NvdW50X18gPiAxKTsKKworCQkJdGVzdF9keW5h bWljKGZkLCBURVNUX0lETEUpOworCQl9CisJfQorCisJaWd0X2ZpeHR1cmUgeworCQljbG9zZShm ZCk7CisJfQorfQpkaWZmIC0tZ2l0IGEvdGVzdHMvbWVzb24uYnVpbGQgYi90ZXN0cy9tZXNvbi5i dWlsZAppbmRleCAxN2RlYjk0NWVjOTUuLjkzMTlmYTRlMTliNCAxMDA2NDQKLS0tIGEvdGVzdHMv bWVzb24uYnVpbGQKKysrIGIvdGVzdHMvbWVzb24uYnVpbGQKQEAgLTI0OSw2ICsyNDksMTMgQEAg Zm9yZWFjaCBwcm9nIDogdGVzdF9wcm9ncwogCQkgICBpbnN0YWxsIDogdHJ1ZSkKIGVuZGZvcmVh Y2gKIAordGVzdF9leGVjdXRhYmxlcyArPSBleGVjdXRhYmxlKCdnZW1fY3R4X3NzZXUnLCAnZ2Vt X2N0eF9zc2V1LmMnLAorCSAgIGRlcGVuZGVuY2llcyA6IHRlc3RfZGVwcyArIFsgbGliX2lndF9w ZXJmIF0sCisJICAgaW5zdGFsbF9kaXIgOiBsaWJleGVjZGlyLAorCSAgIGluc3RhbGxfcnBhdGgg OiBsaWJleGVjZGlyX3JwYXRoZGlyLAorCSAgIGluc3RhbGwgOiB0cnVlKQordGVzdF9wcm9ncyAr PSAnZ2VtX2N0eF9zc2V1JworCiB0ZXN0X2V4ZWN1dGFibGVzICs9IGV4ZWN1dGFibGUoJ2dlbV9l aW8nLCAnZ2VtX2Vpby5jJywKIAkgICBkZXBlbmRlbmNpZXMgOiB0ZXN0X2RlcHMgKyBbIHJlYWx0 aW1lIF0sCiAJICAgaW5zdGFsbF9kaXIgOiBsaWJleGVjZGlyLAotLSAKMi4xNy4xCgpfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGlu ZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVl ZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK