From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dongwon Kim Subject: [RFC PATCH v2 5/9] hyper_dmabuf: default backend for XEN hypervisor Date: Tue, 13 Feb 2018 17:50:04 -0800 Message-ID: <20180214015008.9513-6-dongwon.kim__10293.7069758356$1518573050$gmane$org@intel.com> References: <20180214015008.9513-1-dongwon.kim@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1elmEp-0007Iq-LM for xen-devel@lists.xenproject.org; Wed, 14 Feb 2018 01:51:59 +0000 In-Reply-To: <20180214015008.9513-1-dongwon.kim@intel.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: linux-kernel@vger.kernel.org, linaro-mm-sig@lists.linaro.org, xen-devel@lists.xenproject.org Cc: sumit.semwal@linaro.org, dongwon.kim@intel.com, dri-devel@lists.freedesktop.org, mateuszx.potrola@intel.com List-Id: xen-devel@lists.xenproject.org RnJvbTogIk1hdHVlc3ogUG9scm9sYSIgPG1hdGV1c3p4LnBvdHJvbGFAaW50ZWwuY29tPgoKVGhl IGRlZmF1bHQgYmFja2VuZCBmb3IgWEVOIGh5cGVydmlzb3IuIFRoaXMgYmFja2VuZCBjb250YWlu cyBhY3R1YWwKaW1wbGVtZW50YXRpb24gb2YgaW5kaXZpZHVhbCBtZXRob2RzIGRlZmluZWQgaW4g InN0cnVjdCBoeXBlcl9kbWFidWZfYmtuZF9vcHMiCmRlZmluZWQgYXM6CgpzdHJ1Y3QgaHlwZXJf ZG1hYnVmX2JrbmRfb3BzIHsKICAgICAgICAvKiBiYWNrZW5kIGluaXRpYWxpemF0aW9uIHJvdXRp bmUgKG9wdGlvbmFsKSAqLwogICAgICAgIGludCAoKmluaXQpKHZvaWQpOwoKICAgICAgICAvKiBi YWNrZW5kIGNsZWFudXAgcm91dGluZSAob3B0aW9uYWwpICovCiAgICAgICAgaW50ICgqY2xlYW51 cCkodm9pZCk7CgogICAgICAgIC8qIHJldHJlaXZpbmcgaWQgb2YgY3VycmVudCB2aXJ0dWFsIG1h Y2hpbmUgKi8KICAgICAgICBpbnQgKCpnZXRfdm1faWQpKHZvaWQpOwoKICAgICAgICAvKiBnZXQg cGFnZXMgc2hhcmVkIHZpYSBoeXBlcnZpc29yLXNwZWNpZmljIG1ldGhvZCAqLwogICAgICAgIGlu dCAoKnNoYXJlX3BhZ2VzKShzdHJ1Y3QgcGFnZSAqKiwgaW50LCBpbnQsIHZvaWQgKiopOwoKICAg ICAgICAvKiBtYWtlIHNoYXJlZCBwYWdlcyB1bnNoYXJlZCB2aWEgaHlwZXJ2aXNvciBzcGVjaWZp YyBtZXRob2QgKi8KICAgICAgICBpbnQgKCp1bnNoYXJlX3BhZ2VzKSh2b2lkICoqLCBpbnQpOwoK ICAgICAgICAvKiBtYXAgcmVtb3RlbHkgc2hhcmVkIHBhZ2VzIG9uIGltcG9ydGVyJ3Mgc2lkZSB2 aWEKICAgICAgICAgKiBoeXBlcnZpc29yLXNwZWNpZmljIG1ldGhvZAogICAgICAgICAqLwogICAg ICAgIHN0cnVjdCBwYWdlICoqICgqbWFwX3NoYXJlZF9wYWdlcykodW5zaWduZWQgbG9uZywgaW50 LCBpbnQsIHZvaWQgKiopOwoKICAgICAgICAvKiB1bm1hcCBhbmQgZnJlZSBzaGFyZWQgcGFnZXMg b24gaW1wb3J0ZXIncyBzaWRlIHZpYQogICAgICAgICAqIGh5cGVydmlzb3Itc3BlY2lmaWMgbWV0 aG9kCiAgICAgICAgICovCiAgICAgICAgaW50ICgqdW5tYXBfc2hhcmVkX3BhZ2VzKSh2b2lkICoq LCBpbnQpOwoKICAgICAgICAvKiBpbml0aWFsaXplIGNvbW11bmljYXRpb24gZW52aXJvbm1lbnQg Ki8KICAgICAgICBpbnQgKCppbml0X2NvbW1fZW52KSh2b2lkKTsKCiAgICAgICAgdm9pZCAoKmRl c3Ryb3lfY29tbSkodm9pZCk7CgogICAgICAgIC8qIHVwc3RyZWFtIGNoIHNldHVwIChyZWNlaXZp bmcgYW5kIHJlc3BvbmRpbmcpICovCiAgICAgICAgaW50ICgqaW5pdF9yeF9jaCkoaW50KTsKCiAg ICAgICAgLyogZG93bnN0cmVhbSBjaCBzZXR1cCAodHJhbnNtaXR0aW5nIGFuZCBwYXJzaW5nIHJl c3BvbnNlcykgKi8KICAgICAgICBpbnQgKCppbml0X3R4X2NoKShpbnQpOwoKICAgICAgICBpbnQg KCpzZW5kX3JlcSkoaW50LCBzdHJ1Y3QgaHlwZXJfZG1hYnVmX3JlcSAqLCBpbnQpOwp9OwoKRmly c3QgdHdvIG1ldGhvZHMgYXJlIGZvciBleHRyYSBpbml0aWFsaXphdGlvbiBvciBjbGVhbmluZyB1 cCBwb3NzaWJseQpyZXF1aXJlZCBmb3IgdGhlIGN1cnJlbnQgSHlwZXJ2aXNvciAob3B0aW9uYWwp LiBUaGlyZCBtZXRob2QKKC5nZXRfdm1faWQpIHByb3ZpZGVzIGEgd2F5IHRvIGdldCBjdXJyZW50 IFZNJ3MgaWQsIHdoaWNoIHdpbGwgYmUgdXNlZAphcyBhbiBpZGVudGljYXRpb24gb2Ygc291cmNl IFZNIG9mIHNoYXJlZCBoeXBlcl9ETUFCVUYgbGF0ZXIuCgpBbGwgb3RoZXIgbWV0aG9kcyBhcmUg cmVsYXRlZCB0byBlaXRoZXIgbWVtb3J5IHNoYXJpbmcgb3IgaW50ZXItVk0KY29tbXVuaWNhdGlv biwgd2hpY2ggYXJlIG1pbmltdW0gcmVxdWlyZW1lbnQgZm9yIGh5cGVyX0RNQUJVRiBkcml2ZXIu CihCcmllZiBkZXNjcmlwdGlvbiBvZiByb2xlIG9mIGVhY2ggbWV0aG9kIGlzIGVtYmVkZGVkIGFz IGEgY29tbWVudCBpbiB0aGUKZGVmaW5pdGlvbiBvZiB0aGUgc3RydWN0dXJlIGFib3ZlIGFuZCBo ZWFkZXIgZmlsZS4pCgpBY3R1YWwgaW1wbGVtZW50YXRpb24gb2YgZWFjaCBvZiB0aGVzZSBtZXRo b2RzIHNwZWNpZmljIHRvIFhFTiBpcyB1bmRlcgpiYWNrZW5kcy94ZW4vLiBUaGVpciBtYXBwaW5n cyBhcmUgZG9uZSBhcyBmb2xsb3dlZDoKCnN0cnVjdCBoeXBlcl9kbWFidWZfYmtuZF9vcHMgeGVu X2JrbmRfb3BzID0gewogICAgICAgIC5pbml0ID0gTlVMTCwgLyogbm90IG5lZWRlZCBmb3IgeGVu ICovCiAgICAgICAgLmNsZWFudXAgPSBOVUxMLCAvKiBub3QgbmVlZGVkIGZvciB4ZW4gKi8KICAg ICAgICAuZ2V0X3ZtX2lkID0geGVuX2JlX2dldF9kb21pZCwKICAgICAgICAuc2hhcmVfcGFnZXMg PSB4ZW5fYmVfc2hhcmVfcGFnZXMsCiAgICAgICAgLnVuc2hhcmVfcGFnZXMgPSB4ZW5fYmVfdW5z aGFyZV9wYWdlcywKICAgICAgICAubWFwX3NoYXJlZF9wYWdlcyA9ICh2b2lkICopeGVuX2JlX21h cF9zaGFyZWRfcGFnZXMsCiAgICAgICAgLnVubWFwX3NoYXJlZF9wYWdlcyA9IHhlbl9iZV91bm1h cF9zaGFyZWRfcGFnZXMsCiAgICAgICAgLmluaXRfY29tbV9lbnYgPSB4ZW5fYmVfaW5pdF9jb21t X2VudiwKICAgICAgICAuZGVzdHJveV9jb21tID0geGVuX2JlX2Rlc3Ryb3lfY29tbSwKICAgICAg ICAuaW5pdF9yeF9jaCA9IHhlbl9iZV9pbml0X3J4X3JidWYsCiAgICAgICAgLmluaXRfdHhfY2gg PSB4ZW5fYmVfaW5pdF90eF9yYnVmLAogICAgICAgIC5zZW5kX3JlcSA9IHhlbl9iZV9zZW5kX3Jl cSwKfTsKCkEgc2VjdGlvbiBmb3IgSHlwZXJ2aXNvciBCYWNrZW5kIGhhcyBiZWVuIGFkZGVkIHRv CgoiRG9jdW1lbnRhdGlvbi9oeXBlci1kbWFidWYtc2hhcmluZy50eHQiIGFjY29yZGluZ2x5CgpT aWduZWQtb2ZmLWJ5OiBEb25nd29uIEtpbSA8ZG9uZ3dvbi5raW1AaW50ZWwuY29tPgpTaWduZWQt b2ZmLWJ5OiBNYXRldXN6IFBvbHJvbGEgPG1hdGV1c3p4LnBvdHJvbGFAaW50ZWwuY29tPgotLS0K IGRyaXZlcnMvZG1hLWJ1Zi9oeXBlcl9kbWFidWYvS2NvbmZpZyAgICAgICAgICAgICAgIHwgICA3 ICsKIGRyaXZlcnMvZG1hLWJ1Zi9oeXBlcl9kbWFidWYvTWFrZWZpbGUgICAgICAgICAgICAgIHwg ICA3ICsKIC4uLi9iYWNrZW5kcy94ZW4vaHlwZXJfZG1hYnVmX3hlbl9jb21tLmMgICAgICAgICAg IHwgOTQxICsrKysrKysrKysrKysrKysrKysrKwogLi4uL2JhY2tlbmRzL3hlbi9oeXBlcl9kbWFi dWZfeGVuX2NvbW0uaCAgICAgICAgICAgfCAgNzggKysKIC4uLi9iYWNrZW5kcy94ZW4vaHlwZXJf ZG1hYnVmX3hlbl9jb21tX2xpc3QuYyAgICAgIHwgMTU4ICsrKysKIC4uLi9iYWNrZW5kcy94ZW4v aHlwZXJfZG1hYnVmX3hlbl9jb21tX2xpc3QuaCAgICAgIHwgIDY3ICsrCiAuLi4vYmFja2VuZHMv eGVuL2h5cGVyX2RtYWJ1Zl94ZW5fZHJ2LmMgICAgICAgICAgICB8ICA0NiArCiAuLi4vYmFja2Vu ZHMveGVuL2h5cGVyX2RtYWJ1Zl94ZW5fZHJ2LmggICAgICAgICAgICB8ICA1MyArKwogLi4uL2Jh Y2tlbmRzL3hlbi9oeXBlcl9kbWFidWZfeGVuX3NobS5jICAgICAgICAgICAgfCA1MjUgKysrKysr KysrKysrCiAuLi4vYmFja2VuZHMveGVuL2h5cGVyX2RtYWJ1Zl94ZW5fc2htLmggICAgICAgICAg ICB8ICA0NiArCiBkcml2ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9kcnYu YyAgICB8ICAxMCArCiAxMSBmaWxlcyBjaGFuZ2VkLCAxOTM4IGluc2VydGlvbnMoKykKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVmL2JhY2tlbmRzL3hlbi9o eXBlcl9kbWFidWZfeGVuX2NvbW0uYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZG1hLWJ1 Zi9oeXBlcl9kbWFidWYvYmFja2VuZHMveGVuL2h5cGVyX2RtYWJ1Zl94ZW5fY29tbS5oCiBjcmVh dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9kbWEtYnVmL2h5cGVyX2RtYWJ1Zi9iYWNrZW5kcy94ZW4v aHlwZXJfZG1hYnVmX3hlbl9jb21tX2xpc3QuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv ZG1hLWJ1Zi9oeXBlcl9kbWFidWYvYmFja2VuZHMveGVuL2h5cGVyX2RtYWJ1Zl94ZW5fY29tbV9s aXN0LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVmL2Jh Y2tlbmRzL3hlbi9oeXBlcl9kbWFidWZfeGVuX2Rydi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy9kbWEtYnVmL2h5cGVyX2RtYWJ1Zi9iYWNrZW5kcy94ZW4vaHlwZXJfZG1hYnVmX3hlbl9k cnYuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZG1hLWJ1Zi9oeXBlcl9kbWFidWYvYmFj a2VuZHMveGVuL2h5cGVyX2RtYWJ1Zl94ZW5fc2htLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2 ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVmL2JhY2tlbmRzL3hlbi9oeXBlcl9kbWFidWZfeGVuX3No bS5oCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEtYnVmL2h5cGVyX2RtYWJ1Zi9LY29uZmlnIGIv ZHJpdmVycy9kbWEtYnVmL2h5cGVyX2RtYWJ1Zi9LY29uZmlnCmluZGV4IDVlYmY1MTZkNjVlYi4u NjhmM2Q2Y2UyYzFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVmL0tj b25maWcKKysrIGIvZHJpdmVycy9kbWEtYnVmL2h5cGVyX2RtYWJ1Zi9LY29uZmlnCkBAIC0yMCw0 ICsyMCwxMSBAQCBjb25maWcgSFlQRVJfRE1BQlVGX1NZU0ZTCiAKIAkgIFRoZSBsb2NhdGlvbiBv ZiBzeXNmcyBpcyB1bmRlciAiLi4uLiIKIAorY29uZmlnIEhZUEVSX0RNQUJVRl9YRU4KKyAgICAg ICAgYm9vbCAiQ29uZmlndXJlIGh5cGVyX2RtYWJ1ZiBmb3IgWEVOIGh5cGVydmlzb3IiCisgICAg ICAgIGRlZmF1bHQgeQorICAgICAgICBkZXBlbmRzIG9uIEhZUEVSX0RNQUJVRiAmJiBYRU4gJiYg WEVORlMKKyAgICAgICAgaGVscAorICAgICAgICAgIEVuYWJsaW5nIEh5cGVyX0RNQUJVRiBCYWNr ZW5kIGZvciBYRU4gaHlwZXJ2aXNvcgorCiBlbmRtZW51CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Rt YS1idWYvaHlwZXJfZG1hYnVmL01ha2VmaWxlIGIvZHJpdmVycy9kbWEtYnVmL2h5cGVyX2RtYWJ1 Zi9NYWtlZmlsZQppbmRleCAzOTA4NTIyYjM5NmEuLmI5YWI0ZWVjYTZmMiAxMDA2NDQKLS0tIGEv ZHJpdmVycy9kbWEtYnVmL2h5cGVyX2RtYWJ1Zi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2RtYS1i dWYvaHlwZXJfZG1hYnVmL01ha2VmaWxlCkBAIC0xMCw2ICsxMCwxMyBAQCBpZm5lcSAoJChLRVJO RUxSRUxFQVNFKSwpCiAJCQkJIGh5cGVyX2RtYWJ1Zl9tc2cubyBcCiAJCQkJIGh5cGVyX2RtYWJ1 Zl9pZC5vIFwKIAoraWZlcSAoJChDT05GSUdfSFlQRVJfRE1BQlVGX1hFTiksIHkpCisJJChUQVJH RVRfTU9EVUxFKS1vYmpzICs9IGJhY2tlbmRzL3hlbi9oeXBlcl9kbWFidWZfeGVuX2NvbW0ubyBc CisJCQkJIGJhY2tlbmRzL3hlbi9oeXBlcl9kbWFidWZfeGVuX2NvbW1fbGlzdC5vIFwKKwkJCQkg YmFja2VuZHMveGVuL2h5cGVyX2RtYWJ1Zl94ZW5fc2htLm8gXAorCQkJCSBiYWNrZW5kcy94ZW4v aHlwZXJfZG1hYnVmX3hlbl9kcnYubworZW5kaWYKKwogb2JqLSQoQ09ORklHX0hZUEVSX0RNQUJV RikgOj0gJChUQVJHRVRfTU9EVUxFKS5vCiAKICMgSWYgd2UgYXJlIHJ1bm5pbmcgd2l0aG91dCBr ZXJuZWwgYnVpbGQgc3lzdGVtCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS1idWYvaHlwZXJfZG1h YnVmL2JhY2tlbmRzL3hlbi9oeXBlcl9kbWFidWZfeGVuX2NvbW0uYyBiL2RyaXZlcnMvZG1hLWJ1 Zi9oeXBlcl9kbWFidWYvYmFja2VuZHMveGVuL2h5cGVyX2RtYWJ1Zl94ZW5fY29tbS5jCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMzBiYzRiNjMwNGFjCi0tLSAvZGV2 L251bGwKKysrIGIvZHJpdmVycy9kbWEtYnVmL2h5cGVyX2RtYWJ1Zi9iYWNrZW5kcy94ZW4vaHlw ZXJfZG1hYnVmX3hlbl9jb21tLmMKQEAgLTAsMCArMSw5NDEgQEAKKy8qCisgKiBDb3B5cmlnaHQg wqkgMjAxOCBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdy YW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5 IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhl ICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmlj dGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2Us IGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisg KiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNv bnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVj dCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdo dCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAor ICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50 aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElT IFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Mg T1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJ RVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9S UyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBP UiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwg VE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNU SU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElO IFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOgorICogICAgRG9uZ3dvbiBLaW0gPGRvbmd3 b24ua2ltQGludGVsLmNvbT4KKyAqICAgIE1hdGV1c3ogUG9scm9sYSA8bWF0ZXVzengucG90cm9s YUBpbnRlbC5jb20+CisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1 ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRl IDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPHhlbi9ncmFudF90YWJsZS5oPgorI2luY2x1ZGUg PHhlbi9ldmVudHMuaD4KKyNpbmNsdWRlIDx4ZW4veGVuYnVzLmg+CisjaW5jbHVkZSA8YXNtL3hl bi9wYWdlLmg+CisjaW5jbHVkZSAiaHlwZXJfZG1hYnVmX3hlbl9jb21tLmgiCisjaW5jbHVkZSAi aHlwZXJfZG1hYnVmX3hlbl9jb21tX2xpc3QuaCIKKyNpbmNsdWRlICIuLi8uLi9oeXBlcl9kbWFi dWZfZHJ2LmgiCisKK3N0YXRpYyBpbnQgZXhwb3J0X3JlcV9pZDsKKworc3RydWN0IGh5cGVyX2Rt YWJ1Zl9yZXEgcmVxX3BlbmRpbmcgPSB7MH07CisKK3N0YXRpYyB2b2lkIHhlbl9nZXRfZG9taWRf ZGVsYXllZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKnVudXNlZCk7CitzdGF0aWMgdm9pZCB4ZW5faW5p dF9jb21tX2Vudl9kZWxheWVkKHN0cnVjdCB3b3JrX3N0cnVjdCAqdW51c2VkKTsKKworc3RhdGlj IERFQ0xBUkVfREVMQVlFRF9XT1JLKGdldF92bV9pZF93b3JrLCB4ZW5fZ2V0X2RvbWlkX2RlbGF5 ZWQpOworc3RhdGljIERFQ0xBUkVfREVMQVlFRF9XT1JLKHhlbl9pbml0X2NvbW1fZW52X3dvcmss IHhlbl9pbml0X2NvbW1fZW52X2RlbGF5ZWQpOworCisvKiBDcmVhdGVzIGVudHJ5IGluIHhlbiBz dG9yZSB0aGF0IHdpbGwga2VlcCBkZXRhaWxzIG9mIGFsbAorICogZXhwb3J0ZXIgcmluZ3MgY3Jl YXRlZCBieSB0aGlzIGRvbWFpbgorICovCitzdGF0aWMgaW50IHhlbl9jb21tX3NldHVwX2RhdGFf ZGlyKHZvaWQpCit7CisJY2hhciBidWZbMjU1XTsKKworCXNwcmludGYoYnVmLCAiL2xvY2FsL2Rv bWFpbi8lZC9kYXRhL2h5cGVyX2RtYWJ1ZiIsCisJCWh5X2Rydl9wcml2LT5kb21pZCk7CisKKwly ZXR1cm4geGVuYnVzX21rZGlyKFhCVF9OSUwsIGJ1ZiwgIiIpOworfQorCisvKiBSZW1vdmVzIGVu dHJ5IGZyb20geGVuc3RvcmUgd2l0aCBleHBvcnRlciByaW5nIGRldGFpbHMuCisgKiBPdGhlciBk b21haW5zIHRoYXQgaGFzIGNvbm5lY3RlZCB0byBhbnkgb2YgZXhwb3J0ZXIgcmluZ3MKKyAqIGNy ZWF0ZWQgYnkgdGhpcyBkb21haW4sIHdpbGwgYmUgbm90aWZpZWQgYWJvdXQgcmVtb3ZhbCBvZgor ICogdGhpcyBlbnRyeSBhbmQgd2lsbCB0cmVhdCB0aGF0IGFzIHNpZ25hbCB0byBjbGVhbnVwIGlt cG9ydGVyCisgKiByaW5ncyBjcmVhdGVkIGZvciB0aGlzIGRvbWFpbgorICovCitzdGF0aWMgaW50 IHhlbl9jb21tX2Rlc3Ryb3lfZGF0YV9kaXIodm9pZCkKK3sKKwljaGFyIGJ1ZlsyNTVdOworCisJ c3ByaW50ZihidWYsICIvbG9jYWwvZG9tYWluLyVkL2RhdGEvaHlwZXJfZG1hYnVmIiwKKwkJaHlf ZHJ2X3ByaXYtPmRvbWlkKTsKKworCXJldHVybiB4ZW5idXNfcm0oWEJUX05JTCwgYnVmLCAiIik7 Cit9CisKKy8qIEFkZHMgeGVuc3RvcmUgZW50cmllcyB3aXRoIGRldGFpbHMgb2YgZXhwb3J0ZXIg cmluZyBjcmVhdGVkCisgKiBmb3IgZ2l2ZW4gcmVtb3RlIGRvbWFpbi4gSXQgcmVxdWlyZXMgc3Bl Y2lhbCBkYWVtb24gcnVubmluZworICogaW4gZG9tMCB0byBtYWtlIHN1cmUgdGhhdCBnaXZlbiBy ZW1vdGUgZG9tYWluIHdpbGwgaGF2ZSByaWdodAorICogcGVybWlzc2lvbnMgdG8gYWNjZXNzIHRo YXQgZGF0YS4KKyAqLworc3RhdGljIGludCB4ZW5fY29tbV9leHBvc2VfcmluZ19kZXRhaWxzKGlu dCBkb21pZCwgaW50IHJkb21pZCwKKwkJCQkJaW50IGdyZWYsIGludCBwb3J0KQoreworCWNoYXIg YnVmWzI1NV07CisJaW50IHJldDsKKworCXNwcmludGYoYnVmLCAiL2xvY2FsL2RvbWFpbi8lZC9k YXRhL2h5cGVyX2RtYWJ1Zi8lZCIsCisJCWRvbWlkLCByZG9taWQpOworCisJcmV0ID0geGVuYnVz X3ByaW50ZihYQlRfTklMLCBidWYsICJncmVmaWQiLCAiJWQiLCBncmVmKTsKKworCWlmIChyZXQp IHsKKwkJZGV2X2VycihoeV9kcnZfcHJpdi0+ZGV2LAorCQkJIkZhaWxlZCB0byB3cml0ZSB4ZW5i dXMgZW50cnkgJXM6ICVkXG4iLAorCQkJYnVmLCByZXQpOworCisJCXJldHVybiByZXQ7CisJfQor CisJcmV0ID0geGVuYnVzX3ByaW50ZihYQlRfTklMLCBidWYsICJwb3J0IiwgIiVkIiwgcG9ydCk7 CisKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoaHlfZHJ2X3ByaXYtPmRldiwKKwkJCSJGYWlsZWQg dG8gd3JpdGUgeGVuYnVzIGVudHJ5ICVzOiAlZFxuIiwKKwkJCWJ1ZiwgcmV0KTsKKworCQlyZXR1 cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogUXVlcmllcyBkZXRhaWxzIG9m IHJpbmcgZXhwb3NlZCBieSByZW1vdGUgZG9tYWluLgorICovCitzdGF0aWMgaW50IHhlbl9jb21t X2dldF9yaW5nX2RldGFpbHMoaW50IGRvbWlkLCBpbnQgcmRvbWlkLAorCQkJCSAgICAgaW50ICpn cmVmaWQsIGludCAqcG9ydCkKK3sKKwljaGFyIGJ1ZlsyNTVdOworCWludCByZXQ7CisKKwlzcHJp bnRmKGJ1ZiwgIi9sb2NhbC9kb21haW4vJWQvZGF0YS9oeXBlcl9kbWFidWYvJWQiLAorCQlyZG9t aWQsIGRvbWlkKTsKKworCXJldCA9IHhlbmJ1c19zY2FuZihYQlRfTklMLCBidWYsICJncmVmaWQi LCAiJWQiLCBncmVmaWQpOworCisJaWYgKHJldCA8PSAwKSB7CisJCWRldl9lcnIoaHlfZHJ2X3By aXYtPmRldiwKKwkJCSJGYWlsZWQgdG8gcmVhZCB4ZW5idXMgZW50cnkgJXM6ICVkXG4iLAorCQkJ YnVmLCByZXQpOworCisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0geGVuYnVzX3NjYW5mKFhC VF9OSUwsIGJ1ZiwgInBvcnQiLCAiJWQiLCBwb3J0KTsKKworCWlmIChyZXQgPD0gMCkgeworCQlk ZXZfZXJyKGh5X2Rydl9wcml2LT5kZXYsCisJCQkiRmFpbGVkIHRvIHJlYWQgeGVuYnVzIGVudHJ5 ICVzOiAlZFxuIiwKKwkJCWJ1ZiwgcmV0KTsKKworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVy biAocmV0IDw9IDAgPyAxIDogMCk7Cit9CisKK3N0YXRpYyB2b2lkIHhlbl9nZXRfZG9taWRfZGVs YXllZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKnVudXNlZCkKK3sKKwlzdHJ1Y3QgeGVuYnVzX3RyYW5z YWN0aW9uIHhidDsKKwlpbnQgZG9taWQsIHJldDsKKworCS8qIHNjaGVkdWxpbmcgYW5vdGhlciBp ZiBkcml2ZXIgaXMgc3RpbGwgcnVubmluZworCSAqIGFuZCB4ZW5zdG9yZSBoYXMgbm90IGJlZW4g aW5pdGlhbGl6ZWQKKwkgKi8KKwlpZiAobGlrZWx5KHhlbnN0b3JlZF9yZWFkeSA9PSAwKSkgewor CQlkZXZfZGJnKGh5X2Rydl9wcml2LT5kZXYsCisJCQkiWGVuc3RvcmUgaXMgbm90IHJlYWR5IHll dC4gV2lsbCByZXRyeSBpbiA1MDBtc1xuIik7CisJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmZ2V0 X3ZtX2lkX3dvcmssIG1zZWNzX3RvX2ppZmZpZXMoNTAwKSk7CisJfSBlbHNlIHsKKwkJeGVuYnVz X3RyYW5zYWN0aW9uX3N0YXJ0KCZ4YnQpOworCisJCXJldCA9IHhlbmJ1c19zY2FuZih4YnQsICJk b21pZCIsICIiLCAiJWQiLCAmZG9taWQpOworCisJCWlmIChyZXQgPD0gMCkKKwkJCWRvbWlkID0g LTE7CisKKwkJeGVuYnVzX3RyYW5zYWN0aW9uX2VuZCh4YnQsIDApOworCisJCS8qIHRyeSBhZ2Fp biBzaW5jZSAtMSBpcyBhbiBpbnZhbGlkIGlkIGZvciBkb21haW4KKwkJICogKGJ1dCBvbmx5IGlm IGRyaXZlciBpcyBzdGlsbCBydW5uaW5nKQorCQkgKi8KKwkJaWYgKHVubGlrZWx5KGRvbWlkID09 IC0xKSkgeworCQkJZGV2X2RiZyhoeV9kcnZfcHJpdi0+ZGV2LAorCQkJCSJkb21pZD09LTEgaXMg aW52YWxpZC4gV2lsbCByZXRyeSBpdCBpbiA1MDBtc1xuIik7CisJCQlzY2hlZHVsZV9kZWxheWVk X3dvcmsoJmdldF92bV9pZF93b3JrLAorCQkJCQkgICAgICBtc2Vjc190b19qaWZmaWVzKDUwMCkp OworCQl9IGVsc2UgeworCQkJZGV2X2luZm8oaHlfZHJ2X3ByaXYtPmRldiwKKwkJCQkgIlN1Y2Nl c3NmdWxseSByZXRyaWV2ZWQgZG9taWQgZnJvbSBYZW5zdG9yZTolZFxuIiwKKwkJCQkgZG9taWQp OworCQkJaHlfZHJ2X3ByaXYtPmRvbWlkID0gZG9taWQ7CisJCX0KKwl9Cit9CisKK2ludCB4ZW5f YmVfZ2V0X2RvbWlkKHZvaWQpCit7CisJc3RydWN0IHhlbmJ1c190cmFuc2FjdGlvbiB4YnQ7CisJ aW50IGRvbWlkOworCisJaWYgKHVubGlrZWx5KHhlbnN0b3JlZF9yZWFkeSA9PSAwKSkgeworCQl4 ZW5fZ2V0X2RvbWlkX2RlbGF5ZWQoTlVMTCk7CisJCXJldHVybiAtMTsKKwl9CisKKwl4ZW5idXNf dHJhbnNhY3Rpb25fc3RhcnQoJnhidCk7CisKKwlpZiAoIXhlbmJ1c19zY2FuZih4YnQsICJkb21p ZCIsICIiLCAiJWQiLCAmZG9taWQpKQorCQlkb21pZCA9IC0xOworCisJeGVuYnVzX3RyYW5zYWN0 aW9uX2VuZCh4YnQsIDApOworCisJcmV0dXJuIGRvbWlkOworfQorCitzdGF0aWMgaW50IHhlbl9j b21tX25leHRfcmVxX2lkKHZvaWQpCit7CisJZXhwb3J0X3JlcV9pZCsrOworCXJldHVybiBleHBv cnRfcmVxX2lkOworfQorCisvKiBGb3Igbm93IGNhY2hlIGxhdGFzdCByaW5ncyBhcyBnbG9iYWwg dmFyaWFibGVzIFRPRE86IGtlZXAgdGhlbSBpbiBsaXN0Ki8KK3N0YXRpYyBpcnFyZXR1cm5fdCBm cm9udF9yaW5nX2lzcihpbnQgaXJxLCB2b2lkICppbmZvKTsKK3N0YXRpYyBpcnFyZXR1cm5fdCBi YWNrX3JpbmdfaXNyKGludCBpcnEsIHZvaWQgKmluZm8pOworCisvKiBDYWxsYmFjayBmdW5jdGlv biB0aGF0IHdpbGwgYmUgY2FsbGVkIG9uIGFueSBjaGFuZ2Ugb2YgeGVuYnVzIHBhdGgKKyAqIGJl aW5nIHdhdGNoZWQuIFVzZWQgZm9yIGRldGVjdGluZyBjcmVhdGlvbi9kZXN0cnVjdGlvbiBvZiBy ZW1vdGUKKyAqIGRvbWFpbiBleHBvcnRlciByaW5nLgorICoKKyAqIFdoZW4gcmVtb3RlIGRvbWFp bidzIGV4cG9ydGVyIHJpbmcgd2lsbCBiZSBkZXRlY3RlZCwgaW1wb3J0ZXIgcmluZworICogb24g dGhpcyBkb21haW4gd2lsbCBiZSBjcmVhdGVkLgorICoKKyAqIFdoZW4gcmVtb3RlIGRvbWFpbidz IGV4cG9ydGVyIHJpbmcgZGVzdHJ1Y3Rpb24gd2lsbCBiZSBkZXRlY3RlZCBpdAorICogd2lsbCBj ZWxhbnVwIHRoaXMgZG9tYWluIGltcG9ydGVyIHJpbmcuCisgKgorICogRGVzdHJ1Y3Rpb24gY2Fu IGJlIGNhdXNlZCBieSB1bmxvYWRpbmcgbW9kdWxlIGJ5IHJlbW90ZSBkb21haW4gb3IKKyAqIGl0 J3MgY3Jhc2gvZm9yY2Ugc2h1dGRvd24uCisgKi8KK3N0YXRpYyB2b2lkIHJlbW90ZV9kb21fZXhw b3J0ZXJfd2F0Y2hfY2Ioc3RydWN0IHhlbmJ1c193YXRjaCAqd2F0Y2gsCisJCQkJCSBjb25zdCBj aGFyICpwYXRoLCBjb25zdCBjaGFyICp0b2tlbikKK3sKKwlpbnQgcmRvbSwgcmV0OworCXVpbnQz Ml90IGdyZWZpZCwgcG9ydDsKKwlzdHJ1Y3QgeGVuX2NvbW1fcnhfcmluZ19pbmZvICpyaW5nX2lu Zm87CisKKwkvKiBDaGVjayB3aGljaCBkb21haW4gaGFzIGNoYW5nZWQgaXRzIGV4cG9ydGVyIHJp bmdzICovCisJcmV0ID0gc3NjYW5mKHdhdGNoLT5ub2RlLCAiL2xvY2FsL2RvbWFpbi8lZC8iLCAm cmRvbSk7CisJaWYgKHJldCA8PSAwKQorCQlyZXR1cm47CisKKwkvKiBDaGVjayBpZiB3ZSBoYXZl IGltcG9ydGVyIHJpbmcgZm9yIGdpdmVuIHJlbW90ZSBkb21haW4gYWxyZWFkeQorCSAqIGNyZWF0 ZWQKKwkgKi8KKwlyaW5nX2luZm8gPSB4ZW5fY29tbV9maW5kX3J4X3JpbmcocmRvbSk7CisKKwkv KiBUcnkgdG8gcXVlcnkgcmVtb3RlIGRvbWFpbiBleHBvcnRlciByaW5nIGRldGFpbHMgLSBpZgor CSAqIHRoYXQgd2lsbCBmYWlsIGFuZCB3ZSBoYXZlIGltcG9ydGVyIHJpbmcgdGhhdCBtZWFucyBy ZW1vdGUKKwkgKiBkb21haW5zIGhhcyBjbGVhbnVwIGl0cyBleHBvcnRlciByaW5nLCBzbyBvdXIg aW1wb3J0ZXIgcmluZworCSAqIGlzIG5vIGxvbmdlciB1c2VmdWwuCisJICoKKwkgKiBJZiBxdWVy eWluZyBkZXRhaWxzIHdpbGwgc3VjY2VlZCBhbmQgd2UgZG9uJ3QgaGF2ZSBpbXBvcnRlciByaW5n LAorCSAqIGl0IG1lYW5zIHRoYXQgcmVtb3RlIGRvbWFpbiBoYXMgc2V0dXAgaXQgZm9yIHVzIGFu ZCB3ZSBzaG91bGQKKwkgKiBjb25uZWN0IHRvIGl0LgorCSAqLworCisJcmV0ID0geGVuX2NvbW1f Z2V0X3JpbmdfZGV0YWlscyh4ZW5fYmVfZ2V0X2RvbWlkKCksCisJCQkJCXJkb20sICZncmVmaWQs ICZwb3J0KTsKKworCWlmIChyaW5nX2luZm8gJiYgcmV0ICE9IDApIHsKKwkJZGV2X2luZm8oaHlf ZHJ2X3ByaXYtPmRldiwKKwkJCSAiUmVtb3RlIGV4cG9ydGVyIGNsb3NlZCwgY2xlYW5pbnVwIGlt cG9ydGVyXG4iKTsKKwkJeGVuX2JlX2NsZWFudXBfcnhfcmJ1ZihyZG9tKTsKKwl9IGVsc2UgaWYg KCFyaW5nX2luZm8gJiYgcmV0ID09IDApIHsKKwkJZGV2X2luZm8oaHlfZHJ2X3ByaXYtPmRldiwK KwkJCSAiUmVnaXN0ZXJpbmcgaW1wb3J0ZXJcbiIpOworCQl4ZW5fYmVfaW5pdF9yeF9yYnVmKHJk b20pOworCX0KK30KKworLyogZXhwb3J0ZXIgbmVlZHMgdG8gZ2VuZXJhdGVkIGluZm8gZm9yIHBh Z2Ugc2hhcmluZyAqLworaW50IHhlbl9iZV9pbml0X3R4X3JidWYoaW50IGRvbWlkKQoreworCXN0 cnVjdCB4ZW5fY29tbV90eF9yaW5nX2luZm8gKnJpbmdfaW5mbzsKKwlzdHJ1Y3QgeGVuX2NvbW1f c3JpbmcgKnNyaW5nOworCXN0cnVjdCBldnRjaG5fYWxsb2NfdW5ib3VuZCBhbGxvY191bmJvdW5k OworCXN0cnVjdCBldnRjaG5fY2xvc2UgY2xvc2U7CisKKwl2b2lkICpzaGFyZWRfcmluZzsKKwlp bnQgcmV0OworCisJLyogY2hlY2sgaWYgdGhlcmUncyBhbnkgZXhpc3RpbmcgdHggY2hhbm5lbCBp biB0aGUgdGFibGUgKi8KKwlyaW5nX2luZm8gPSB4ZW5fY29tbV9maW5kX3R4X3JpbmcoZG9taWQp OworCisJaWYgKHJpbmdfaW5mbykgeworCQlkZXZfaW5mbyhoeV9kcnZfcHJpdi0+ZGV2LAorCQkJ ICJ0eCByaW5nIGNoIHRvIGRvbWlkID0gJWQgYWxyZWFkeSBleGlzdFxuZ3JlZiA9ICVkLCBwb3J0 ID0gJWRcbiIsCisJCXJpbmdfaW5mby0+cmRvbWFpbiwgcmluZ19pbmZvLT5ncmVmX3JpbmcsIHJp bmdfaW5mby0+cG9ydCk7CisJCXJldHVybiAwOworCX0KKworCXJpbmdfaW5mbyA9IGttYWxsb2Mo c2l6ZW9mKCpyaW5nX2luZm8pLCBHRlBfS0VSTkVMKTsKKworCWlmICghcmluZ19pbmZvKQorCQly ZXR1cm4gLUVOT01FTTsKKworCS8qIGZyb20gZXhwb3J0ZXIgdG8gaW1wb3J0ZXIgKi8KKwlzaGFy ZWRfcmluZyA9ICh2b2lkICopX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMLCAxKTsKKwlpZiAo c2hhcmVkX3JpbmcgPT0gMCkgeworCQlrZnJlZShyaW5nX2luZm8pOworCQlyZXR1cm4gLUVOT01F TTsKKwl9CisKKwlzcmluZyA9IChzdHJ1Y3QgeGVuX2NvbW1fc3JpbmcgKikgc2hhcmVkX3Jpbmc7 CisKKwlTSEFSRURfUklOR19JTklUKHNyaW5nKTsKKworCUZST05UX1JJTkdfSU5JVCgmKHJpbmdf aW5mby0+cmluZ19mcm9udCksIHNyaW5nLCBQQUdFX1NJWkUpOworCisJcmluZ19pbmZvLT5ncmVm X3JpbmcgPSBnbnR0YWJfZ3JhbnRfZm9yZWlnbl9hY2Nlc3MoZG9taWQsCisJCQkJCQl2aXJ0X3Rv X21mbihzaGFyZWRfcmluZyksCisJCQkJCQkwKTsKKwlpZiAocmluZ19pbmZvLT5ncmVmX3Jpbmcg PCAwKSB7CisJCS8qIGZhaWwgdG8gZ2V0IGdyZWYgKi8KKwkJa2ZyZWUocmluZ19pbmZvKTsKKwkJ cmV0dXJuIC1FRkFVTFQ7CisJfQorCisJYWxsb2NfdW5ib3VuZC5kb20gPSBET01JRF9TRUxGOwor CWFsbG9jX3VuYm91bmQucmVtb3RlX2RvbSA9IGRvbWlkOworCXJldCA9IEhZUEVSVklTT1JfZXZl bnRfY2hhbm5lbF9vcChFVlRDSE5PUF9hbGxvY191bmJvdW5kLAorCQkJCQkgICZhbGxvY191bmJv dW5kKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoaHlfZHJ2X3ByaXYtPmRldiwKKwkJCSJDYW5u b3QgYWxsb2NhdGUgZXZlbnQgY2hhbm5lbFxuIik7CisJCWtmcmVlKHJpbmdfaW5mbyk7CisJCXJl dHVybiAtRUlPOworCX0KKworCS8qIHNldHRpbmcgdXAgaW50ZXJydXB0ICovCisJcmV0ID0gYmlu ZF9ldnRjaG5fdG9faXJxaGFuZGxlcihhbGxvY191bmJvdW5kLnBvcnQsCisJCQkJCWZyb250X3Jp bmdfaXNyLCAwLAorCQkJCQlOVUxMLCAodm9pZCAqKSByaW5nX2luZm8pOworCisJaWYgKHJldCA8 IDApIHsKKwkJZGV2X2VycihoeV9kcnZfcHJpdi0+ZGV2LAorCQkJIkZhaWxlZCB0byBzZXR1cCBl dmVudCBjaGFubmVsXG4iKTsKKwkJY2xvc2UucG9ydCA9IGFsbG9jX3VuYm91bmQucG9ydDsKKwkJ SFlQRVJWSVNPUl9ldmVudF9jaGFubmVsX29wKEVWVENITk9QX2Nsb3NlLCAmY2xvc2UpOworCQln bnR0YWJfZW5kX2ZvcmVpZ25fYWNjZXNzKHJpbmdfaW5mby0+Z3JlZl9yaW5nLCAwLAorCQkJCQl2 aXJ0X3RvX21mbihzaGFyZWRfcmluZykpOworCQlrZnJlZShyaW5nX2luZm8pOworCQlyZXR1cm4g LUVJTzsKKwl9CisKKwlyaW5nX2luZm8tPnJkb21haW4gPSBkb21pZDsKKwlyaW5nX2luZm8tPmly cSA9IHJldDsKKwlyaW5nX2luZm8tPnBvcnQgPSBhbGxvY191bmJvdW5kLnBvcnQ7CisKKwltdXRl eF9pbml0KCZyaW5nX2luZm8tPmxvY2spOworCisJZGV2X2RiZyhoeV9kcnZfcHJpdi0+ZGV2LAor CQkiJXM6IGFsbG9jYXRlZCBldmVudGNoYW5uZWwgZ3JlZiAlZCAgcG9ydDogJWQgIGlycTogJWRc biIsCisJCV9fZnVuY19fLAorCQlyaW5nX2luZm8tPmdyZWZfcmluZywKKwkJcmluZ19pbmZvLT5w b3J0LAorCQlyaW5nX2luZm8tPmlycSk7CisKKwlyZXQgPSB4ZW5fY29tbV9hZGRfdHhfcmluZyhy aW5nX2luZm8pOworCisJcmV0ID0geGVuX2NvbW1fZXhwb3NlX3JpbmdfZGV0YWlscyh4ZW5fYmVf Z2V0X2RvbWlkKCksCisJCQkJCSAgIGRvbWlkLAorCQkJCQkgICByaW5nX2luZm8tPmdyZWZfcmlu ZywKKwkJCQkJICAgcmluZ19pbmZvLT5wb3J0KTsKKworCS8qIFJlZ2lzdGVyIHdhdGNoIGZvciBy ZW1vdGUgZG9tYWluIGV4cG9ydGVyIHJpbmcuCisJICogV2hlbiByZW1vdGUgZG9tYWluIHdpbGwg c2V0dXAgaXRzIGV4cG9ydGVyIHJpbmcsCisJICogd2Ugd2lsbCBhdXRvbWF0aWNhbGx5IGNvbm5l Y3Qgb3VyIGltcG9ydGVyIHJpbmcgdG8gaXQuCisJICovCisJcmluZ19pbmZvLT53YXRjaC5jYWxs YmFjayA9IHJlbW90ZV9kb21fZXhwb3J0ZXJfd2F0Y2hfY2I7CisJcmluZ19pbmZvLT53YXRjaC5u b2RlID0ga21hbGxvYygyNTUsIEdGUF9LRVJORUwpOworCisJaWYgKCFyaW5nX2luZm8tPndhdGNo Lm5vZGUpIHsKKwkJa2ZyZWUocmluZ19pbmZvKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJ c3ByaW50ZigoY2hhciAqKXJpbmdfaW5mby0+d2F0Y2gubm9kZSwKKwkJIi9sb2NhbC9kb21haW4v JWQvZGF0YS9oeXBlcl9kbWFidWYvJWQvcG9ydCIsCisJCWRvbWlkLCB4ZW5fYmVfZ2V0X2RvbWlk KCkpOworCisJcmVnaXN0ZXJfeGVuYnVzX3dhdGNoKCZyaW5nX2luZm8tPndhdGNoKTsKKworCXJl dHVybiByZXQ7Cit9CisKKy8qIGNsZWFucyB1cCBleHBvcnRlciByaW5nIGNyZWF0ZWQgZm9yIGdp dmVuIHJlbW90ZSBkb21haW4gKi8KK3ZvaWQgeGVuX2JlX2NsZWFudXBfdHhfcmJ1ZihpbnQgZG9t aWQpCit7CisJc3RydWN0IHhlbl9jb21tX3R4X3JpbmdfaW5mbyAqcmluZ19pbmZvOworCXN0cnVj dCB4ZW5fY29tbV9yeF9yaW5nX2luZm8gKnJ4X3JpbmdfaW5mbzsKKworCS8qIGNoZWNrIGlmIHdl IGF0IGFsbCBoYXZlIGV4cG9ydGVyIHJpbmcgZm9yIGdpdmVuIHJkb21haW4gKi8KKwlyaW5nX2lu Zm8gPSB4ZW5fY29tbV9maW5kX3R4X3JpbmcoZG9taWQpOworCisJaWYgKCFyaW5nX2luZm8pCisJ CXJldHVybjsKKworCXhlbl9jb21tX3JlbW92ZV90eF9yaW5nKGRvbWlkKTsKKworCXVucmVnaXN0 ZXJfeGVuYnVzX3dhdGNoKCZyaW5nX2luZm8tPndhdGNoKTsKKwlrZnJlZShyaW5nX2luZm8tPndh dGNoLm5vZGUpOworCisJLyogTm8gbmVlZCB0byBjbG9zZSBjb21tdW5pY2F0aW9uIGNoYW5uZWws IHdpbGwgYmUgZG9uZSBieQorCSAqIHRoaXMgZnVuY3Rpb24KKwkgKi8KKwl1bmJpbmRfZnJvbV9p cnFoYW5kbGVyKHJpbmdfaW5mby0+aXJxLCAodm9pZCAqKSByaW5nX2luZm8pOworCisJLyogTm8g bmVlZCB0byBmcmVlIHNyaW5nIHBhZ2UsIHdpbGwgYmUgZnJlZWQgYnkgdGhpcyBmdW5jdGlvbgor CSAqIHdoZW4gb3RoZXIgc2lkZSB3aWxsIGVuZCBpdHMgYWNjZXNzCisJICovCisJZ250dGFiX2Vu ZF9mb3JlaWduX2FjY2VzcyhyaW5nX2luZm8tPmdyZWZfcmluZywgMCwKKwkJCQkgICh1bnNpZ25l ZCBsb25nKSByaW5nX2luZm8tPnJpbmdfZnJvbnQuc3JpbmcpOworCisJa2ZyZWUocmluZ19pbmZv KTsKKworCXJ4X3JpbmdfaW5mbyA9IHhlbl9jb21tX2ZpbmRfcnhfcmluZyhkb21pZCk7CisJaWYg KCFyeF9yaW5nX2luZm8pCisJCXJldHVybjsKKworCUJBQ0tfUklOR19JTklUKCYocnhfcmluZ19p bmZvLT5yaW5nX2JhY2spLAorCQkgICAgICAgcnhfcmluZ19pbmZvLT5yaW5nX2JhY2suc3Jpbmcs CisJCSAgICAgICBQQUdFX1NJWkUpOworfQorCisvKiBpbXBvcnRlciBuZWVkcyB0byBrbm93IGFi b3V0IHNoYXJlZCBwYWdlIGFuZCBwb3J0IG51bWJlcnMgZm9yCisgKiByaW5nIGJ1ZmZlciBhbmQg ZXZlbnQgY2hhbm5lbAorICovCitpbnQgeGVuX2JlX2luaXRfcnhfcmJ1ZihpbnQgZG9taWQpCit7 CisJc3RydWN0IHhlbl9jb21tX3J4X3JpbmdfaW5mbyAqcmluZ19pbmZvOworCXN0cnVjdCB4ZW5f Y29tbV9zcmluZyAqc3Jpbmc7CisKKwlzdHJ1Y3QgcGFnZSAqc2hhcmVkX3Jpbmc7CisKKwlzdHJ1 Y3QgZ250dGFiX21hcF9ncmFudF9yZWYgKm1hcF9vcHM7CisKKwlpbnQgcmV0OworCWludCByeF9n cmVmLCByeF9wb3J0OworCisJLyogY2hlY2sgaWYgdGhlcmUncyBleGlzdGluZyByeCByaW5nIGNo YW5uZWwgKi8KKwlyaW5nX2luZm8gPSB4ZW5fY29tbV9maW5kX3J4X3JpbmcoZG9taWQpOworCisJ aWYgKHJpbmdfaW5mbykgeworCQlkZXZfaW5mbyhoeV9kcnZfcHJpdi0+ZGV2LAorCQkJICJyeCBy aW5nIGNoIGZyb20gZG9taWQgPSAlZCBhbHJlYWR5IGV4aXN0XG4iLAorCQkJIHJpbmdfaW5mby0+ c2RvbWFpbik7CisKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0ID0geGVuX2NvbW1fZ2V0X3Jpbmdf ZGV0YWlscyh4ZW5fYmVfZ2V0X2RvbWlkKCksIGRvbWlkLAorCQkJCQkmcnhfZ3JlZiwgJnJ4X3Bv cnQpOworCisJaWYgKHJldCkgeworCQlkZXZfZXJyKGh5X2Rydl9wcml2LT5kZXYsCisJCQkiRG9t YWluICVkIGhhcyBub3QgY3JlYXRlZCBleHBvcnRlciByaW5nIGZvciBjdXJyZW50IGRvbWFpblxu IiwKKwkJCWRvbWlkKTsKKworCQlyZXR1cm4gcmV0OworCX0KKworCXJpbmdfaW5mbyA9IGttYWxs b2Moc2l6ZW9mKCpyaW5nX2luZm8pLCBHRlBfS0VSTkVMKTsKKworCWlmICghcmluZ19pbmZvKQor CQlyZXR1cm4gLUVOT01FTTsKKworCXJpbmdfaW5mby0+c2RvbWFpbiA9IGRvbWlkOworCXJpbmdf aW5mby0+ZXZ0Y2huID0gcnhfcG9ydDsKKworCW1hcF9vcHMgPSBrbWFsbG9jKHNpemVvZigqbWFw X29wcyksIEdGUF9LRVJORUwpOworCisJaWYgKCFtYXBfb3BzKSB7CisJCXJldCA9IC1FTk9NRU07 CisJCWdvdG8gZmFpbF9ub19tYXBfb3BzOworCX0KKworCWlmIChnbnR0YWJfYWxsb2NfcGFnZXMo MSwgJnNoYXJlZF9yaW5nKSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGZhaWxfb3RoZXJz OworCX0KKworCWdudHRhYl9zZXRfbWFwX29wKCZtYXBfb3BzWzBdLAorCQkJICAodW5zaWduZWQg bG9uZylwZm5fdG9fa2FkZHIoCisJCQkJCXBhZ2VfdG9fcGZuKHNoYXJlZF9yaW5nKSksCisJCQkg IEdOVE1BUF9ob3N0X21hcCwgcnhfZ3JlZiwgZG9taWQpOworCisJZ250dGFiX3NldF91bm1hcF9v cCgmcmluZ19pbmZvLT51bm1hcF9vcCwKKwkJCSAgICAodW5zaWduZWQgbG9uZylwZm5fdG9fa2Fk ZHIoCisJCQkJCXBhZ2VfdG9fcGZuKHNoYXJlZF9yaW5nKSksCisJCQkgICAgR05UTUFQX2hvc3Rf bWFwLCAtMSk7CisKKwlyZXQgPSBnbnR0YWJfbWFwX3JlZnMobWFwX29wcywgTlVMTCwgJnNoYXJl ZF9yaW5nLCAxKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGh5X2Rydl9wcml2LT5kZXYs ICJDYW5ub3QgbWFwIHJpbmdcbiIpOworCQlyZXQgPSAtRUZBVUxUOworCQlnb3RvIGZhaWxfb3Ro ZXJzOworCX0KKworCWlmIChtYXBfb3BzWzBdLnN0YXR1cykgeworCQlkZXZfZXJyKGh5X2Rydl9w cml2LT5kZXYsICJSaW5nIG1hcHBpbmcgZmFpbGVkXG4iKTsKKwkJcmV0ID0gLUVGQVVMVDsKKwkJ Z290byBmYWlsX290aGVyczsKKwl9IGVsc2UgeworCQlyaW5nX2luZm8tPnVubWFwX29wLmhhbmRs ZSA9IG1hcF9vcHNbMF0uaGFuZGxlOworCX0KKworCWtmcmVlKG1hcF9vcHMpOworCisJc3Jpbmcg PSAoc3RydWN0IHhlbl9jb21tX3NyaW5nICopcGZuX3RvX2thZGRyKHBhZ2VfdG9fcGZuKHNoYXJl ZF9yaW5nKSk7CisKKwlCQUNLX1JJTkdfSU5JVCgmcmluZ19pbmZvLT5yaW5nX2JhY2ssIHNyaW5n LCBQQUdFX1NJWkUpOworCisJcmV0ID0gYmluZF9pbnRlcmRvbWFpbl9ldnRjaG5fdG9faXJxKGRv bWlkLCByeF9wb3J0KTsKKworCWlmIChyZXQgPCAwKSB7CisJCXJldCA9IC1FSU87CisJCWdvdG8g ZmFpbF9vdGhlcnM7CisJfQorCisJcmluZ19pbmZvLT5pcnEgPSByZXQ7CisKKwlkZXZfZGJnKGh5 X2Rydl9wcml2LT5kZXYsCisJCSIlczogYm91bmQgdG8gZXZlbnRjaGFubmVsIHBvcnQ6ICVkICBp cnE6ICVkXG4iLCBfX2Z1bmNfXywKKwkJcnhfcG9ydCwKKwkJcmluZ19pbmZvLT5pcnEpOworCisJ cmV0ID0geGVuX2NvbW1fYWRkX3J4X3JpbmcocmluZ19pbmZvKTsKKworCS8qIFNldHVwIGNvbW11 bmNhdGlvbiBjaGFubmVsIGluIG9wcG9zaXRlIGRpcmVjdGlvbiAqLworCWlmICgheGVuX2NvbW1f ZmluZF90eF9yaW5nKGRvbWlkKSkKKwkJcmV0ID0geGVuX2JlX2luaXRfdHhfcmJ1Zihkb21pZCk7 CisKKwlyZXQgPSByZXF1ZXN0X2lycShyaW5nX2luZm8tPmlycSwKKwkJCSAgYmFja19yaW5nX2lz ciwgMCwKKwkJCSAgTlVMTCwgKHZvaWQgKilyaW5nX2luZm8pOworCisJcmV0dXJuIHJldDsKKwor ZmFpbF9vdGhlcnM6CisJa2ZyZWUobWFwX29wcyk7CisKK2ZhaWxfbm9fbWFwX29wczoKKwlrZnJl ZShyaW5nX2luZm8pOworCisJcmV0dXJuIHJldDsKK30KKworLyogY2xlbmFzIHVwIGltcG9ydGVy IHJpbmcgY3JlYXRlIGZvciBnaXZlbiBzb3VyY2UgZG9tYWluICovCit2b2lkIHhlbl9iZV9jbGVh bnVwX3J4X3JidWYoaW50IGRvbWlkKQoreworCXN0cnVjdCB4ZW5fY29tbV9yeF9yaW5nX2luZm8g KnJpbmdfaW5mbzsKKwlzdHJ1Y3QgeGVuX2NvbW1fdHhfcmluZ19pbmZvICp0eF9yaW5nX2luZm87 CisJc3RydWN0IHBhZ2UgKnNoYXJlZF9yaW5nOworCisJLyogY2hlY2sgaWYgd2UgaGF2ZSBpbXBv cnRlciByaW5nIGNyZWF0ZWQgZm9yIGdpdmVuIHNkb21haW4gKi8KKwlyaW5nX2luZm8gPSB4ZW5f Y29tbV9maW5kX3J4X3JpbmcoZG9taWQpOworCisJaWYgKCFyaW5nX2luZm8pCisJCXJldHVybjsK KworCXhlbl9jb21tX3JlbW92ZV9yeF9yaW5nKGRvbWlkKTsKKworCS8qIG5vIG5lZWQgdG8gY2xv c2UgZXZlbnQgY2hhbm5lbCwgd2lsbCBiZSBkb25lIGJ5IHRoYXQgZnVuY3Rpb24gKi8KKwl1bmJp bmRfZnJvbV9pcnFoYW5kbGVyKHJpbmdfaW5mby0+aXJxLCAodm9pZCAqKXJpbmdfaW5mbyk7CisK KwkvKiB1bm1hcHBpbmcgc2hhcmVkIHJpbmcgcGFnZSAqLworCXNoYXJlZF9yaW5nID0gdmlydF90 b19wYWdlKHJpbmdfaW5mby0+cmluZ19iYWNrLnNyaW5nKTsKKwlnbnR0YWJfdW5tYXBfcmVmcygm cmluZ19pbmZvLT51bm1hcF9vcCwgTlVMTCwgJnNoYXJlZF9yaW5nLCAxKTsKKwlnbnR0YWJfZnJl ZV9wYWdlcygxLCAmc2hhcmVkX3JpbmcpOworCisJa2ZyZWUocmluZ19pbmZvKTsKKworCXR4X3Jp bmdfaW5mbyA9IHhlbl9jb21tX2ZpbmRfdHhfcmluZyhkb21pZCk7CisJaWYgKCF0eF9yaW5nX2lu Zm8pCisJCXJldHVybjsKKworCVNIQVJFRF9SSU5HX0lOSVQodHhfcmluZ19pbmZvLT5yaW5nX2Zy b250LnNyaW5nKTsKKwlGUk9OVF9SSU5HX0lOSVQoJih0eF9yaW5nX2luZm8tPnJpbmdfZnJvbnQp LAorCQkJdHhfcmluZ19pbmZvLT5yaW5nX2Zyb250LnNyaW5nLAorCQkJUEFHRV9TSVpFKTsKK30K KworI2lmZGVmIENPTkZJR19IWVBFUl9ETUFCVUZfWEVOX0FVVE9fUlhfQ0hfQURECisKK3N0YXRp YyB2b2lkIHhlbl9yeF9jaF9hZGRfZGVsYXllZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKnVudXNlZCk7 CisKK3N0YXRpYyBERUNMQVJFX0RFTEFZRURfV09SSyh4ZW5fcnhfY2hfYXV0b19hZGRfd29yaywg eGVuX3J4X2NoX2FkZF9kZWxheWVkKTsKKworI2RlZmluZSBET01JRF9TQ0FOX1NUQVJUCTEJLyog IGRvbWlkID0gMSAqLworI2RlZmluZSBET01JRF9TQ0FOX0VORAkJMTAJLyogZG9taWQgPSAxMCAq LworCitzdGF0aWMgdm9pZCB4ZW5fcnhfY2hfYWRkX2RlbGF5ZWQoc3RydWN0IHdvcmtfc3RydWN0 ICp1bnVzZWQpCit7CisJaW50IHJldDsKKwljaGFyIGJ1ZlsxMjhdOworCWludCBpLCBkdW1teTsK KworCWRldl9kYmcoaHlfZHJ2X3ByaXYtPmRldiwKKwkJIlNjYW5uaW5nIG5ldyB0eCBjaGFubmVs IGNvbW1pbmcgZnJvbSBhbm90aGVyIGRvbWFpblxuIik7CisKKwkvKiBjaGVjayBvdGhlciBkb21h aW5zIGFuZCBzY2hlZHVsZSBhbm90aGVyIHdvcmsgaWYgZHJpdmVyCisJICogaXMgc3RpbGwgcnVu bmluZyBhbmQgYmFja2VuZCBpcyB2YWxpZAorCSAqLworCWlmIChoeV9kcnZfcHJpdiAmJgorCSAg ICBoeV9kcnZfcHJpdi0+aW5pdGlhbGl6ZWQpIHsKKwkJZm9yIChpID0gRE9NSURfU0NBTl9TVEFS VDsgaSA8IERPTUlEX1NDQU5fRU5EICsgMTsgaSsrKSB7CisJCQlpZiAoaSA9PSBoeV9kcnZfcHJp di0+ZG9taWQpCisJCQkJY29udGludWU7CisKKwkJCXNwcmludGYoYnVmLCAiL2xvY2FsL2RvbWFp bi8lZC9kYXRhL2h5cGVyX2RtYWJ1Zi8lZCIsCisJCQkJaSwgaHlfZHJ2X3ByaXYtPmRvbWlkKTsK KworCQkJcmV0ID0geGVuYnVzX3NjYW5mKFhCVF9OSUwsIGJ1ZiwgInBvcnQiLCAiJWQiLCAmZHVt bXkpOworCisJCQlpZiAocmV0ID4gMCkgeworCQkJCWlmICh4ZW5fY29tbV9maW5kX3J4X3Jpbmco aSkgIT0gTlVMTCkKKwkJCQkJY29udGludWU7CisKKwkJCQlyZXQgPSB4ZW5fYmVfaW5pdF9yeF9y YnVmKGkpOworCisJCQkJaWYgKCFyZXQpCisJCQkJCWRldl9pbmZvKGh5X2Rydl9wcml2LT5kZXYs CisJCQkJCQkgIkRvbmUgcnggY2ggaW5pdCBmb3IgVk0gJWRcbiIsCisJCQkJCQkgaSk7CisJCQl9 CisJCX0KKworCQkvKiBjaGVjayBldmVyeSAxMCBzZWNvbmRzICovCisJCXNjaGVkdWxlX2RlbGF5 ZWRfd29yaygmeGVuX3J4X2NoX2F1dG9fYWRkX3dvcmssCisJCQkJICAgICAgbXNlY3NfdG9famlm ZmllcygxMDAwMCkpOworCX0KK30KKworI2VuZGlmIC8qIENPTkZJR19IWVBFUl9ETUFCVUZfWEVO X0FVVE9fUlhfQ0hfQUREICovCisKK3ZvaWQgeGVuX2luaXRfY29tbV9lbnZfZGVsYXllZChzdHJ1 Y3Qgd29ya19zdHJ1Y3QgKnVudXNlZCkKK3sKKwlpbnQgcmV0OworCisJLyogc2NoZWR1bGluZyBh bm90aGVyIHdvcmsgaWYgZHJpdmVyIGlzIHN0aWxsIHJ1bm5pbmcKKwkgKiBhbmQgeGVuc3RvcmUg aGFzbid0IGJlZW4gaW5pdGlhbGl6ZWQgb3IgZG9tX2lkIGhhc24ndAorCSAqIGJlZW4gY29ycmVj dGx5IHJldHJpZXZlZC4KKwkgKi8KKwlpZiAobGlrZWx5KHhlbnN0b3JlZF9yZWFkeSA9PSAwIHx8 CisJICAgIGh5X2Rydl9wcml2LT5kb21pZCA9PSAtMSkpIHsKKwkJZGV2X2RiZyhoeV9kcnZfcHJp di0+ZGV2LAorCQkJIlhlbnN0b3JlIG5vdCByZWFkeSBXaWxsIHJlLXRyeSBpbiA1MDBtc1xuIik7 CisJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmeGVuX2luaXRfY29tbV9lbnZfd29yaywKKwkJCQkg ICAgICBtc2Vjc190b19qaWZmaWVzKDUwMCkpOworCX0gZWxzZSB7CisJCXJldCA9IHhlbl9jb21t X3NldHVwX2RhdGFfZGlyKCk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlkZXZfZXJyKGh5X2Rydl9w cml2LT5kZXYsCisJCQkJIkZhaWxlZCB0byBjcmVhdGUgZGF0YSBkaXIgaW4gWGVuc3RvcmVcbiIp OworCQl9IGVsc2UgeworCQkJZGV2X2luZm8oaHlfZHJ2X3ByaXYtPmRldiwKKwkJCQkiU3VjY2Vz c2Z1bGx5IGZpbmlzaGVkIGNvbW0gZW52IGluaXRcbiIpOworCQkJaHlfZHJ2X3ByaXYtPmluaXRp YWxpemVkID0gdHJ1ZTsKKworI2lmZGVmIENPTkZJR19IWVBFUl9ETUFCVUZfWEVOX0FVVE9fUlhf Q0hfQURECisJCQl4ZW5fcnhfY2hfYWRkX2RlbGF5ZWQoTlVMTCk7CisjZW5kaWYgLyogQ09ORklH X0hZUEVSX0RNQUJVRl9YRU5fQVVUT19SWF9DSF9BREQgKi8KKwkJfQorCX0KK30KKworaW50IHhl bl9iZV9pbml0X2NvbW1fZW52KHZvaWQpCit7CisJaW50IHJldDsKKworCXhlbl9jb21tX3Jpbmdf dGFibGVfaW5pdCgpOworCisJaWYgKHVubGlrZWx5KHhlbnN0b3JlZF9yZWFkeSA9PSAwIHx8CisJ ICAgIGh5X2Rydl9wcml2LT5kb21pZCA9PSAtMSkpIHsKKwkJeGVuX2luaXRfY29tbV9lbnZfZGVs YXllZChOVUxMKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldCA9IHhlbl9jb21tX3NldHVwX2Rh dGFfZGlyKCk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihoeV9kcnZfcHJpdi0+ZGV2LAor CQkJIkZhaWxlZCB0byBjcmVhdGUgZGF0YSBkaXIgaW4gWGVuc3RvcmVcbiIpOworCX0gZWxzZSB7 CisJCWRldl9pbmZvKGh5X2Rydl9wcml2LT5kZXYsCisJCQkiU3VjY2Vzc2Z1bGx5IGZpbmlzaGVk IGNvbW0gZW52IGluaXRpYWxpemF0aW9uXG4iKTsKKworCQloeV9kcnZfcHJpdi0+aW5pdGlhbGl6 ZWQgPSB0cnVlOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qIGNsZWFucyB1cCBhbGwgdHgv cnggcmluZ3MgKi8KK3N0YXRpYyB2b2lkIHhlbl9iZV9jbGVhbnVwX2FsbF9yYnVmcyh2b2lkKQor eworCXhlbl9jb21tX2ZvcmVhY2hfdHhfcmluZyh4ZW5fYmVfY2xlYW51cF90eF9yYnVmKTsKKwl4 ZW5fY29tbV9mb3JlYWNoX3J4X3JpbmcoeGVuX2JlX2NsZWFudXBfcnhfcmJ1Zik7Cit9CisKK3Zv aWQgeGVuX2JlX2Rlc3Ryb3lfY29tbSh2b2lkKQoreworCXhlbl9iZV9jbGVhbnVwX2FsbF9yYnVm cygpOworCXhlbl9jb21tX2Rlc3Ryb3lfZGF0YV9kaXIoKTsKK30KKworaW50IHhlbl9iZV9zZW5k X3JlcShpbnQgZG9taWQsIHN0cnVjdCBoeXBlcl9kbWFidWZfcmVxICpyZXEsCisJCQkgICAgICBp bnQgd2FpdCkKK3sKKwlzdHJ1Y3QgeGVuX2NvbW1fZnJvbnRfcmluZyAqcmluZzsKKwlzdHJ1Y3Qg aHlwZXJfZG1hYnVmX3JlcSAqbmV3X3JlcTsKKwlzdHJ1Y3QgeGVuX2NvbW1fdHhfcmluZ19pbmZv ICpyaW5nX2luZm87CisJaW50IG5vdGlmeTsKKworCXN0cnVjdCB0aW1ldmFsIHR2X3N0YXJ0LCB0 dl9lbmQ7CisJc3RydWN0IHRpbWV2YWwgdHZfZGlmZjsKKworCWludCB0aW1lb3V0ID0gMTAwMDsK KworCS8qIGZpbmQgYSByaW5nIGluZm8gZm9yIHRoZSBjaGFubmVsICovCisJcmluZ19pbmZvID0g eGVuX2NvbW1fZmluZF90eF9yaW5nKGRvbWlkKTsKKwlpZiAoIXJpbmdfaW5mbykgeworCQlkZXZf ZXJyKGh5X2Rydl9wcml2LT5kZXYsCisJCQkiQ2FuJ3QgZmluZCByaW5nIGluZm8gZm9yIHRoZSBj aGFubmVsXG4iKTsKKwkJcmV0dXJuIC1FTk9FTlQ7CisJfQorCisKKwlyaW5nID0gJnJpbmdfaW5m by0+cmluZ19mcm9udDsKKworCWRvX2dldHRpbWVvZmRheSgmdHZfc3RhcnQpOworCisJd2hpbGUg KFJJTkdfRlVMTChyaW5nKSkgeworCQlkZXZfZGJnKGh5X2Rydl9wcml2LT5kZXYsICJSSU5HX0ZV TExcbiIpOworCisJCWlmICh0aW1lb3V0ID09IDApIHsKKwkJCWRldl9lcnIoaHlfZHJ2X3ByaXYt PmRldiwKKwkJCQkiVGltZW91dCB3aGlsZSB3YWl0aW5nIGZvciBhbiBlbnRyeSBpbiB0aGUgcmlu Z1xuIik7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCQl1c2xlZXBfcmFuZ2UoMTAwLCAxMjApOwor CQl0aW1lb3V0LS07CisJfQorCisJdGltZW91dCA9IDEwMDA7CisKKwltdXRleF9sb2NrKCZyaW5n X2luZm8tPmxvY2spOworCisJbmV3X3JlcSA9IFJJTkdfR0VUX1JFUVVFU1QocmluZywgcmluZy0+ cmVxX3Byb2RfcHZ0KTsKKwlpZiAoIW5ld19yZXEpIHsKKwkJbXV0ZXhfdW5sb2NrKCZyaW5nX2lu Zm8tPmxvY2spOworCQlkZXZfZXJyKGh5X2Rydl9wcml2LT5kZXYsCisJCQkiTlVMTCBSRVFVRVNU XG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJcmVxLT5yZXFfaWQgPSB4ZW5fY29tbV9uZXh0 X3JlcV9pZCgpOworCisJLyogdXBkYXRlIHJlcV9wZW5kaW5nIHdpdGggY3VycmVudCByZXF1ZXN0 ICovCisJbWVtY3B5KCZyZXFfcGVuZGluZywgcmVxLCBzaXplb2YocmVxX3BlbmRpbmcpKTsKKwor CS8qIHBhc3MgY3VycmVudCByZXF1ZXN0IHRvIHRoZSByaW5nICovCisJbWVtY3B5KG5ld19yZXEs IHJlcSwgc2l6ZW9mKCpuZXdfcmVxKSk7CisKKwlyaW5nLT5yZXFfcHJvZF9wdnQrKzsKKworCVJJ TkdfUFVTSF9SRVFVRVNUU19BTkRfQ0hFQ0tfTk9USUZZKHJpbmcsIG5vdGlmeSk7CisJaWYgKG5v dGlmeSkKKwkJbm90aWZ5X3JlbW90ZV92aWFfaXJxKHJpbmdfaW5mby0+aXJxKTsKKworCWlmICh3 YWl0KSB7CisJCXdoaWxlICh0aW1lb3V0LS0pIHsKKwkJCWlmIChyZXFfcGVuZGluZy5zdGF0ICE9 CisJCQkgICAgSFlQRVJfRE1BQlVGX1JFUV9OT1RfUkVTUE9OREVEKQorCQkJCWJyZWFrOworCQkJ dXNsZWVwX3JhbmdlKDEwMCwgMTIwKTsKKwkJfQorCisJCWlmICh0aW1lb3V0IDwgMCkgeworCQkJ bXV0ZXhfdW5sb2NrKCZyaW5nX2luZm8tPmxvY2spOworCQkJZGV2X2VycihoeV9kcnZfcHJpdi0+ ZGV2LAorCQkJCSJyZXF1ZXN0IHRpbWVkLW91dFxuIik7CisJCQlyZXR1cm4gLUVCVVNZOworCQl9 CisKKwkJbXV0ZXhfdW5sb2NrKCZyaW5nX2luZm8tPmxvY2spOworCQlkb19nZXR0aW1lb2ZkYXko JnR2X2VuZCk7CisKKwkJLyogY2hlY2tpbmcgdGltZSBkdXJhdGlvbiBmb3Igcm91bmQtdHJpcCBv ZiBhIHJlcXVlc3QKKwkJICogZm9yIGRlYnVnZ2luZworCQkgKi8KKwkJaWYgKHR2X2VuZC50dl91 c2VjID49IHR2X3N0YXJ0LnR2X3VzZWMpIHsKKwkJCXR2X2RpZmYudHZfc2VjID0gdHZfZW5kLnR2 X3NlYy10dl9zdGFydC50dl9zZWM7CisJCQl0dl9kaWZmLnR2X3VzZWMgPSB0dl9lbmQudHZfdXNl Yy10dl9zdGFydC50dl91c2VjOworCQl9IGVsc2UgeworCQkJdHZfZGlmZi50dl9zZWMgPSB0dl9l bmQudHZfc2VjLXR2X3N0YXJ0LnR2X3NlYy0xOworCQkJdHZfZGlmZi50dl91c2VjID0gdHZfZW5k LnR2X3VzZWMrMTAwMDAwMC0KKwkJCQkJICB0dl9zdGFydC50dl91c2VjOworCQl9CisKKwkJaWYg KHR2X2RpZmYudHZfc2VjICE9IDAgJiYgdHZfZGlmZi50dl91c2VjID4gMTYwMDApCisJCQlkZXZf ZGJnKGh5X2Rydl9wcml2LT5kZXYsCisJCQkJInNlbmRfcmVxOnRpbWUgZGlmZjogJWxkIHNlYywg JWxkIHVzZWNcbiIsCisJCQkJdHZfZGlmZi50dl9zZWMsIHR2X2RpZmYudHZfdXNlYyk7CisJfQor CisJbXV0ZXhfdW5sb2NrKCZyaW5nX2luZm8tPmxvY2spOworCisJcmV0dXJuIDA7Cit9CisKKy8q IElTUiBmb3IgaGFuZGxpbmcgcmVxdWVzdCAqLworc3RhdGljIGlycXJldHVybl90IGJhY2tfcmlu Z19pc3IoaW50IGlycSwgdm9pZCAqaW5mbykKK3sKKwlSSU5HX0lEWCByYywgcnA7CisJc3RydWN0 IGh5cGVyX2RtYWJ1Zl9yZXEgcmVxOworCXN0cnVjdCBoeXBlcl9kbWFidWZfcmVzcCByZXNwOwor CisJaW50IG5vdGlmeSwgbW9yZV90b19kbzsKKwlpbnQgcmV0OworCisJc3RydWN0IHhlbl9jb21t X3J4X3JpbmdfaW5mbyAqcmluZ19pbmZvOworCXN0cnVjdCB4ZW5fY29tbV9iYWNrX3JpbmcgKnJp bmc7CisKKwlyaW5nX2luZm8gPSAoc3RydWN0IHhlbl9jb21tX3J4X3JpbmdfaW5mbyAqKWluZm87 CisJcmluZyA9ICZyaW5nX2luZm8tPnJpbmdfYmFjazsKKworCWRldl9kYmcoaHlfZHJ2X3ByaXYt PmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwlkbyB7CisJCXJjID0gcmluZy0+cmVxX2NvbnM7 CisJCXJwID0gcmluZy0+c3JpbmctPnJlcV9wcm9kOworCQltb3JlX3RvX2RvID0gMDsKKwkJd2hp bGUgKHJjICE9IHJwKSB7CisJCQlpZiAoUklOR19SRVFVRVNUX0NPTlNfT1ZFUkZMT1cocmluZywg cmMpKQorCQkJCWJyZWFrOworCisJCQltZW1jcHkoJnJlcSwgUklOR19HRVRfUkVRVUVTVChyaW5n LCByYyksIHNpemVvZihyZXEpKTsKKwkJCXJpbmctPnJlcV9jb25zID0gKytyYzsKKworCQkJcmV0 ID0gaHlwZXJfZG1hYnVmX21zZ19wYXJzZShyaW5nX2luZm8tPnNkb21haW4sICZyZXEpOworCisJ CQlpZiAocmV0ID4gMCkgeworCQkJCS8qIHByZXBhcmluZyBhIHJlc3BvbnNlIGZvciB0aGUgcmVx dWVzdCBhbmQKKwkJCQkgKiBzZW5kIGl0IHRvIHRoZSByZXF1ZXN0ZXIKKwkJCQkgKi8KKwkJCQlt ZW1jcHkoJnJlc3AsICZyZXEsIHNpemVvZihyZXNwKSk7CisJCQkJbWVtY3B5KFJJTkdfR0VUX1JF U1BPTlNFKHJpbmcsCisJCQkJCQkJIHJpbmctPnJzcF9wcm9kX3B2dCksCisJCQkJCQkJICZyZXNw LCBzaXplb2YocmVzcCkpOworCQkJCXJpbmctPnJzcF9wcm9kX3B2dCsrOworCisJCQkJZGV2X2Ri ZyhoeV9kcnZfcHJpdi0+ZGV2LAorCQkJCQkicmVzcG9uZGluZyB0byBleHBvcnRlciBmb3IgcmVx OiVkXG4iLAorCQkJCQlyZXNwLnJlc3BfaWQpOworCisJCQkJUklOR19QVVNIX1JFU1BPTlNFU19B TkRfQ0hFQ0tfTk9USUZZKHJpbmcsCisJCQkJCQkJCSAgICAgbm90aWZ5KTsKKworCQkJCWlmIChu b3RpZnkpCisJCQkJCW5vdGlmeV9yZW1vdGVfdmlhX2lycShyaW5nX2luZm8tPmlycSk7CisJCQl9 CisKKwkJCVJJTkdfRklOQUxfQ0hFQ0tfRk9SX1JFUVVFU1RTKHJpbmcsIG1vcmVfdG9fZG8pOwor CQl9CisJfSB3aGlsZSAobW9yZV90b19kbyk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisK Ky8qIElTUiBmb3IgaGFuZGxpbmcgcmVzcG9uc2VzICovCitzdGF0aWMgaXJxcmV0dXJuX3QgZnJv bnRfcmluZ19pc3IoaW50IGlycSwgdm9pZCAqaW5mbykKK3sKKwkvKiBmcm9udCByaW5nIG9ubHkg Y2FyZSBhYm91dCByZXNwb25zZSBmcm9tIGJhY2sgKi8KKwlzdHJ1Y3QgaHlwZXJfZG1hYnVmX3Jl c3AgKnJlc3A7CisJUklOR19JRFggaSwgcnA7CisJaW50IG1vcmVfdG9fZG8sIHJldDsKKworCXN0 cnVjdCB4ZW5fY29tbV90eF9yaW5nX2luZm8gKnJpbmdfaW5mbzsKKwlzdHJ1Y3QgeGVuX2NvbW1f ZnJvbnRfcmluZyAqcmluZzsKKworCXJpbmdfaW5mbyA9IChzdHJ1Y3QgeGVuX2NvbW1fdHhfcmlu Z19pbmZvICopaW5mbzsKKwlyaW5nID0gJnJpbmdfaW5mby0+cmluZ19mcm9udDsKKworCWRldl9k YmcoaHlfZHJ2X3ByaXYtPmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwlkbyB7CisJCW1vcmVf dG9fZG8gPSAwOworCQlycCA9IHJpbmctPnNyaW5nLT5yc3BfcHJvZDsKKwkJZm9yIChpID0gcmlu Zy0+cnNwX2NvbnM7IGkgIT0gcnA7IGkrKykgeworCQkJcmVzcCA9IFJJTkdfR0VUX1JFU1BPTlNF KHJpbmcsIGkpOworCisJCQkvKiB1cGRhdGUgcGVuZGluZyByZXF1ZXN0J3Mgc3RhdHVzIHdpdGgg d2hhdCBpcworCQkJICogaW4gdGhlIHJlc3BvbnNlCisJCQkgKi8KKworCQkJZGV2X2RiZyhoeV9k cnZfcHJpdi0+ZGV2LAorCQkJCSJnZXR0aW5nIHJlc3BvbnNlIGZyb20gaW1wb3J0ZXJcbiIpOwor CisJCQlpZiAocmVxX3BlbmRpbmcucmVxX2lkID09IHJlc3AtPnJlc3BfaWQpCisJCQkJcmVxX3Bl bmRpbmcuc3RhdCA9IHJlc3AtPnN0YXQ7CisKKwkJCWlmIChyZXNwLT5zdGF0ID09IEhZUEVSX0RN QUJVRl9SRVFfTkVFRFNfRk9MTE9XX1VQKSB7CisJCQkJLyogcGFyc2luZyByZXNwb25zZSAqLwor CQkJCXJldCA9IGh5cGVyX2RtYWJ1Zl9tc2dfcGFyc2UocmluZ19pbmZvLT5yZG9tYWluLAorCQkJ CQkoc3RydWN0IGh5cGVyX2RtYWJ1Zl9yZXEgKilyZXNwKTsKKworCQkJCWlmIChyZXQgPCAwKSB7 CisJCQkJCWRldl9lcnIoaHlfZHJ2X3ByaXYtPmRldiwKKwkJCQkJCSJlcnIgd2hpbGUgcGFyc2lu ZyByZXNwXG4iKTsKKwkJCQl9CisJCQl9IGVsc2UgaWYgKHJlc3AtPnN0YXQgPT0gSFlQRVJfRE1B QlVGX1JFUV9QUk9DRVNTRUQpIHsKKwkJCQkvKiBmb3IgZGVidWdnaW5nIGRtYV9idWYgcmVtb3Rl IHN5bmNoICovCisJCQkJZGV2X2RiZyhoeV9kcnZfcHJpdi0+ZGV2LAorCQkJCQkib3JpZ2luYWwg cmVxdWVzdCA9IDB4JXhcbiIsIHJlc3AtPmNtZCk7CisJCQkJZGV2X2RiZyhoeV9kcnZfcHJpdi0+ ZGV2LAorCQkJCQkiZ290IEhZUEVSX0RNQUJVRl9SRVFfUFJPQ0VTU0VEXG4iKTsKKwkJCX0gZWxz ZSBpZiAocmVzcC0+c3RhdCA9PSBIWVBFUl9ETUFCVUZfUkVRX0VSUk9SKSB7CisJCQkJLyogZm9y IGRlYnVnZ2luZyBkbWFfYnVmIHJlbW90ZSBzeW5jaCAqLworCQkJCWRldl9kYmcoaHlfZHJ2X3By aXYtPmRldiwKKwkJCQkJIm9yaWdpbmFsIHJlcXVlc3QgPSAweCV4XG4iLCByZXNwLT5jbWQpOwor CQkJCWRldl9kYmcoaHlfZHJ2X3ByaXYtPmRldiwKKwkJCQkJImdvdCBIWVBFUl9ETUFCVUZfUkVR X0VSUk9SXG4iKTsKKwkJCX0KKwkJfQorCisJCXJpbmctPnJzcF9jb25zID0gaTsKKworCQlpZiAo aSAhPSByaW5nLT5yZXFfcHJvZF9wdnQpCisJCQlSSU5HX0ZJTkFMX0NIRUNLX0ZPUl9SRVNQT05T RVMocmluZywgbW9yZV90b19kbyk7CisJCWVsc2UKKwkJCXJpbmctPnNyaW5nLT5yc3BfZXZlbnQg PSBpKzE7CisKKwl9IHdoaWxlIChtb3JlX3RvX2RvKTsKKworCXJldHVybiBJUlFfSEFORExFRDsK K30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hLWJ1Zi9oeXBlcl9kbWFidWYvYmFja2VuZHMveGVu L2h5cGVyX2RtYWJ1Zl94ZW5fY29tbS5oIGIvZHJpdmVycy9kbWEtYnVmL2h5cGVyX2RtYWJ1Zi9i YWNrZW5kcy94ZW4vaHlwZXJfZG1hYnVmX3hlbl9jb21tLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAwLi5jMGQzMTM5YWNlNTkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2 ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVmL2JhY2tlbmRzL3hlbi9oeXBlcl9kbWFidWZfeGVuX2Nv bW0uaApAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTggSW50ZWwgQ29y cG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNo YXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJl IGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAq IHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3 aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1l cmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29w aWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisg KiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2lu ZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlz IHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hh bGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0 aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMi LCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJ TkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ TElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5H RU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhP TERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJ TElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNF LCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZU V0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisg KgorICovCisKKyNpZm5kZWYgX19IWVBFUl9ETUFCVUZfWEVOX0NPTU1fSF9fCisjZGVmaW5lIF9f SFlQRVJfRE1BQlVGX1hFTl9DT01NX0hfXworCisjaW5jbHVkZSAieGVuL2ludGVyZmFjZS9pby9y aW5nLmgiCisjaW5jbHVkZSAieGVuL3hlbmJ1cy5oIgorI2luY2x1ZGUgIi4uLy4uL2h5cGVyX2Rt YWJ1Zl9tc2cuaCIKKworZXh0ZXJuIGludCB4ZW5zdG9yZWRfcmVhZHk7CisKK0RFRklORV9SSU5H X1RZUEVTKHhlbl9jb21tLCBzdHJ1Y3QgaHlwZXJfZG1hYnVmX3JlcSwgc3RydWN0IGh5cGVyX2Rt YWJ1Zl9yZXNwKTsKKworc3RydWN0IHhlbl9jb21tX3R4X3JpbmdfaW5mbyB7CisJc3RydWN0IHhl bl9jb21tX2Zyb250X3JpbmcgcmluZ19mcm9udDsKKwlpbnQgcmRvbWFpbjsKKwlpbnQgZ3JlZl9y aW5nOworCWludCBpcnE7CisJaW50IHBvcnQ7CisJc3RydWN0IG11dGV4IGxvY2s7CisJc3RydWN0 IHhlbmJ1c193YXRjaCB3YXRjaDsKK307CisKK3N0cnVjdCB4ZW5fY29tbV9yeF9yaW5nX2luZm8g eworCWludCBzZG9tYWluOworCWludCBpcnE7CisJaW50IGV2dGNobjsKKwlzdHJ1Y3QgeGVuX2Nv bW1fYmFja19yaW5nIHJpbmdfYmFjazsKKwlzdHJ1Y3QgZ250dGFiX3VubWFwX2dyYW50X3JlZiB1 bm1hcF9vcDsKK307CisKK2ludCB4ZW5fYmVfZ2V0X2RvbWlkKHZvaWQpOworCitpbnQgeGVuX2Jl X2luaXRfY29tbV9lbnYodm9pZCk7CisKKy8qIGV4cG9ydGVyIG5lZWRzIHRvIGdlbmVyYXRlZCBp bmZvIGZvciBwYWdlIHNoYXJpbmcgKi8KK2ludCB4ZW5fYmVfaW5pdF90eF9yYnVmKGludCBkb21p ZCk7CisKKy8qIGltcG9ydGVyIG5lZWRzIHRvIGtub3cgYWJvdXQgc2hhcmVkIHBhZ2UgYW5kIHBv cnQgbnVtYmVycworICogZm9yIHJpbmcgYnVmZmVyIGFuZCBldmVudCBjaGFubmVsCisgKi8KK2lu dCB4ZW5fYmVfaW5pdF9yeF9yYnVmKGludCBkb21pZCk7CisKKy8qIGNsZWFucyB1cCBleHBvcnRl ciByaW5nIGNyZWF0ZWQgZm9yIGdpdmVuIGRvbWFpbiAqLwordm9pZCB4ZW5fYmVfY2xlYW51cF90 eF9yYnVmKGludCBkb21pZCk7CisKKy8qIGNsZWFucyB1cCBpbXBvcnRlciByaW5nIGNyZWF0ZWQg Zm9yIGdpdmVuIGRvbWFpbiAqLwordm9pZCB4ZW5fYmVfY2xlYW51cF9yeF9yYnVmKGludCBkb21p ZCk7CisKK3ZvaWQgeGVuX2JlX2Rlc3Ryb3lfY29tbSh2b2lkKTsKKworLyogc2VuZCByZXF1ZXN0 IHRvIHRoZSByZW1vdGUgZG9tYWluICovCitpbnQgeGVuX2JlX3NlbmRfcmVxKGludCBkb21pZCwg c3RydWN0IGh5cGVyX2RtYWJ1Zl9yZXEgKnJlcSwKKwkJICAgIGludCB3YWl0KTsKKworI2VuZGlm IC8qIF9fSFlQRVJfRE1BQlVGX1hFTl9DT01NX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9k bWEtYnVmL2h5cGVyX2RtYWJ1Zi9iYWNrZW5kcy94ZW4vaHlwZXJfZG1hYnVmX3hlbl9jb21tX2xp c3QuYyBiL2RyaXZlcnMvZG1hLWJ1Zi9oeXBlcl9kbWFidWYvYmFja2VuZHMveGVuL2h5cGVyX2Rt YWJ1Zl94ZW5fY29tbV9saXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAwLi41YThlOWQ5YjczN2YKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2RtYS1idWYvaHlw ZXJfZG1hYnVmL2JhY2tlbmRzL3hlbi9oeXBlcl9kbWFidWZfeGVuX2NvbW1fbGlzdC5jCkBAIC0w LDAgKzEsMTU4IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTggSW50ZWwgQ29ycG9yYXRpb24K KyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8g YW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3Nv Y2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwg aW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxp bWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJs aXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRo ZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2Fy ZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRp b25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Np b24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5j bHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNv ZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VU IFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcg QlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAq IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJ TiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUg TElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hF VEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5H CisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBU SEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0 aG9yczoKKyAqICAgIERvbmd3b24gS2ltIDxkb25nd29uLmtpbUBpbnRlbC5jb20+CisgKiAgICBN YXRldXN6IFBvbHJvbGEgPG1hdGV1c3p4LnBvdHJvbGFAaW50ZWwuY29tPgorICoKKyAqLworCisj aW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNs dWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvY2Rldi5oPgorI2luY2x1ZGUgPGxp bnV4L2hhc2h0YWJsZS5oPgorI2luY2x1ZGUgPHhlbi9ncmFudF90YWJsZS5oPgorI2luY2x1ZGUg Ii4uLy4uL2h5cGVyX2RtYWJ1Zl9kcnYuaCIKKyNpbmNsdWRlICJoeXBlcl9kbWFidWZfeGVuX2Nv bW0uaCIKKyNpbmNsdWRlICJoeXBlcl9kbWFidWZfeGVuX2NvbW1fbGlzdC5oIgorCitERUNMQVJF X0hBU0hUQUJMRSh4ZW5fY29tbV90eF9yaW5nX2hhc2gsIE1BWF9FTlRSWV9UWF9SSU5HKTsKK0RF Q0xBUkVfSEFTSFRBQkxFKHhlbl9jb21tX3J4X3JpbmdfaGFzaCwgTUFYX0VOVFJZX1JYX1JJTkcp OworCit2b2lkIHhlbl9jb21tX3JpbmdfdGFibGVfaW5pdCh2b2lkKQoreworCWhhc2hfaW5pdCh4 ZW5fY29tbV9yeF9yaW5nX2hhc2gpOworCWhhc2hfaW5pdCh4ZW5fY29tbV90eF9yaW5nX2hhc2gp OworfQorCitpbnQgeGVuX2NvbW1fYWRkX3R4X3Jpbmcoc3RydWN0IHhlbl9jb21tX3R4X3Jpbmdf aW5mbyAqcmluZ19pbmZvKQoreworCXN0cnVjdCB4ZW5fY29tbV90eF9yaW5nX2luZm9fZW50cnkg KmluZm9fZW50cnk7CisKKwlpbmZvX2VudHJ5ID0ga21hbGxvYyhzaXplb2YoKmluZm9fZW50cnkp LCBHRlBfS0VSTkVMKTsKKworCWlmICghaW5mb19lbnRyeSkKKwkJcmV0dXJuIC1FTk9NRU07CisK KwlpbmZvX2VudHJ5LT5pbmZvID0gcmluZ19pbmZvOworCisJaGFzaF9hZGQoeGVuX2NvbW1fdHhf cmluZ19oYXNoLCAmaW5mb19lbnRyeS0+bm9kZSwKKwkJaW5mb19lbnRyeS0+aW5mby0+cmRvbWFp bik7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHhlbl9jb21tX2FkZF9yeF9yaW5nKHN0cnVjdCB4 ZW5fY29tbV9yeF9yaW5nX2luZm8gKnJpbmdfaW5mbykKK3sKKwlzdHJ1Y3QgeGVuX2NvbW1fcnhf cmluZ19pbmZvX2VudHJ5ICppbmZvX2VudHJ5OworCisJaW5mb19lbnRyeSA9IGttYWxsb2Moc2l6 ZW9mKCppbmZvX2VudHJ5KSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIWluZm9fZW50cnkpCisJCXJl dHVybiAtRU5PTUVNOworCisJaW5mb19lbnRyeS0+aW5mbyA9IHJpbmdfaW5mbzsKKworCWhhc2hf YWRkKHhlbl9jb21tX3J4X3JpbmdfaGFzaCwgJmluZm9fZW50cnktPm5vZGUsCisJCWluZm9fZW50 cnktPmluZm8tPnNkb21haW4pOworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCB4ZW5fY29tbV90 eF9yaW5nX2luZm8gKnhlbl9jb21tX2ZpbmRfdHhfcmluZyhpbnQgZG9taWQpCit7CisJc3RydWN0 IHhlbl9jb21tX3R4X3JpbmdfaW5mb19lbnRyeSAqaW5mb19lbnRyeTsKKwlpbnQgYmt0OworCisJ aGFzaF9mb3JfZWFjaCh4ZW5fY29tbV90eF9yaW5nX2hhc2gsIGJrdCwgaW5mb19lbnRyeSwgbm9k ZSkKKwkJaWYgKGluZm9fZW50cnktPmluZm8tPnJkb21haW4gPT0gZG9taWQpCisJCQlyZXR1cm4g aW5mb19lbnRyeS0+aW5mbzsKKworCXJldHVybiBOVUxMOworfQorCitzdHJ1Y3QgeGVuX2NvbW1f cnhfcmluZ19pbmZvICp4ZW5fY29tbV9maW5kX3J4X3JpbmcoaW50IGRvbWlkKQoreworCXN0cnVj dCB4ZW5fY29tbV9yeF9yaW5nX2luZm9fZW50cnkgKmluZm9fZW50cnk7CisJaW50IGJrdDsKKwor CWhhc2hfZm9yX2VhY2goeGVuX2NvbW1fcnhfcmluZ19oYXNoLCBia3QsIGluZm9fZW50cnksIG5v ZGUpCisJCWlmIChpbmZvX2VudHJ5LT5pbmZvLT5zZG9tYWluID09IGRvbWlkKQorCQkJcmV0dXJu IGluZm9fZW50cnktPmluZm87CisKKwlyZXR1cm4gTlVMTDsKK30KKworaW50IHhlbl9jb21tX3Jl bW92ZV90eF9yaW5nKGludCBkb21pZCkKK3sKKwlzdHJ1Y3QgeGVuX2NvbW1fdHhfcmluZ19pbmZv X2VudHJ5ICppbmZvX2VudHJ5OworCWludCBia3Q7CisKKwloYXNoX2Zvcl9lYWNoKHhlbl9jb21t X3R4X3JpbmdfaGFzaCwgYmt0LCBpbmZvX2VudHJ5LCBub2RlKQorCQlpZiAoaW5mb19lbnRyeS0+ aW5mby0+cmRvbWFpbiA9PSBkb21pZCkgeworCQkJaGFzaF9kZWwoJmluZm9fZW50cnktPm5vZGUp OworCQkJa2ZyZWUoaW5mb19lbnRyeSk7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJcmV0dXJuIC1F Tk9FTlQ7Cit9CisKK2ludCB4ZW5fY29tbV9yZW1vdmVfcnhfcmluZyhpbnQgZG9taWQpCit7CisJ c3RydWN0IHhlbl9jb21tX3J4X3JpbmdfaW5mb19lbnRyeSAqaW5mb19lbnRyeTsKKwlpbnQgYmt0 OworCisJaGFzaF9mb3JfZWFjaCh4ZW5fY29tbV9yeF9yaW5nX2hhc2gsIGJrdCwgaW5mb19lbnRy eSwgbm9kZSkKKwkJaWYgKGluZm9fZW50cnktPmluZm8tPnNkb21haW4gPT0gZG9taWQpIHsKKwkJ CWhhc2hfZGVsKCZpbmZvX2VudHJ5LT5ub2RlKTsKKwkJCWtmcmVlKGluZm9fZW50cnkpOworCQkJ cmV0dXJuIDA7CisJCX0KKworCXJldHVybiAtRU5PRU5UOworfQorCit2b2lkIHhlbl9jb21tX2Zv cmVhY2hfdHhfcmluZyh2b2lkICgqZnVuYykoaW50IGRvbWlkKSkKK3sKKwlzdHJ1Y3QgeGVuX2Nv bW1fdHhfcmluZ19pbmZvX2VudHJ5ICppbmZvX2VudHJ5OworCXN0cnVjdCBobGlzdF9ub2RlICp0 bXA7CisJaW50IGJrdDsKKworCWhhc2hfZm9yX2VhY2hfc2FmZSh4ZW5fY29tbV90eF9yaW5nX2hh c2gsIGJrdCwgdG1wLAorCQkJICAgaW5mb19lbnRyeSwgbm9kZSkgeworCQlmdW5jKGluZm9fZW50 cnktPmluZm8tPnJkb21haW4pOworCX0KK30KKwordm9pZCB4ZW5fY29tbV9mb3JlYWNoX3J4X3Jp bmcodm9pZCAoKmZ1bmMpKGludCBkb21pZCkpCit7CisJc3RydWN0IHhlbl9jb21tX3J4X3Jpbmdf aW5mb19lbnRyeSAqaW5mb19lbnRyeTsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqdG1wOworCWludCBi a3Q7CisKKwloYXNoX2Zvcl9lYWNoX3NhZmUoeGVuX2NvbW1fcnhfcmluZ19oYXNoLCBia3QsIHRt cCwKKwkJCSAgIGluZm9fZW50cnksIG5vZGUpIHsKKwkJZnVuYyhpbmZvX2VudHJ5LT5pbmZvLT5z ZG9tYWluKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVm L2JhY2tlbmRzL3hlbi9oeXBlcl9kbWFidWZfeGVuX2NvbW1fbGlzdC5oIGIvZHJpdmVycy9kbWEt YnVmL2h5cGVyX2RtYWJ1Zi9iYWNrZW5kcy94ZW4vaHlwZXJfZG1hYnVmX3hlbl9jb21tX2xpc3Qu aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjhkNGI1MmJkNDFiMAot LS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZG1hLWJ1Zi9oeXBlcl9kbWFidWYvYmFja2VuZHMv eGVuL2h5cGVyX2RtYWJ1Zl94ZW5fY29tbV9saXN0LmgKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAq IENvcHlyaWdodCDCqSAyMDE4IEludGVsIENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lvbiBp cyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5n IGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9u IGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRo b3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmln aHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3Vi bGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBw ZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRv IHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJv dmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5n IHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMg b3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUg U09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lO RCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBU SEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAq IFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlN LCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9G IENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9S IElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFM SU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqLworCisjaWZuZGVmIF9fSFlQRVJfRE1B QlVGX1hFTl9DT01NX0xJU1RfSF9fCisjZGVmaW5lIF9fSFlQRVJfRE1BQlVGX1hFTl9DT01NX0xJ U1RfSF9fCisKKy8qIG51bWJlciBvZiBiaXRzIHRvIGJlIHVzZWQgZm9yIGV4cG9ydGVkIGRtYWJ1 ZnMgaGFzaCB0YWJsZSAqLworI2RlZmluZSBNQVhfRU5UUllfVFhfUklORyA3CisvKiBudW1iZXIg b2YgYml0cyB0byBiZSB1c2VkIGZvciBpbXBvcnRlZCBkbWFidWZzIGhhc2ggdGFibGUgKi8KKyNk ZWZpbmUgTUFYX0VOVFJZX1JYX1JJTkcgNworCitzdHJ1Y3QgeGVuX2NvbW1fdHhfcmluZ19pbmZv X2VudHJ5IHsKKwlzdHJ1Y3QgeGVuX2NvbW1fdHhfcmluZ19pbmZvICppbmZvOworCXN0cnVjdCBo bGlzdF9ub2RlIG5vZGU7Cit9OworCitzdHJ1Y3QgeGVuX2NvbW1fcnhfcmluZ19pbmZvX2VudHJ5 IHsKKwlzdHJ1Y3QgeGVuX2NvbW1fcnhfcmluZ19pbmZvICppbmZvOworCXN0cnVjdCBobGlzdF9u b2RlIG5vZGU7Cit9OworCit2b2lkIHhlbl9jb21tX3JpbmdfdGFibGVfaW5pdCh2b2lkKTsKKwor aW50IHhlbl9jb21tX2FkZF90eF9yaW5nKHN0cnVjdCB4ZW5fY29tbV90eF9yaW5nX2luZm8gKnJp bmdfaW5mbyk7CisKK2ludCB4ZW5fY29tbV9hZGRfcnhfcmluZyhzdHJ1Y3QgeGVuX2NvbW1fcnhf cmluZ19pbmZvICpyaW5nX2luZm8pOworCitpbnQgeGVuX2NvbW1fcmVtb3ZlX3R4X3JpbmcoaW50 IGRvbWlkKTsKKworaW50IHhlbl9jb21tX3JlbW92ZV9yeF9yaW5nKGludCBkb21pZCk7CisKK3N0 cnVjdCB4ZW5fY29tbV90eF9yaW5nX2luZm8gKnhlbl9jb21tX2ZpbmRfdHhfcmluZyhpbnQgZG9t aWQpOworCitzdHJ1Y3QgeGVuX2NvbW1fcnhfcmluZ19pbmZvICp4ZW5fY29tbV9maW5kX3J4X3Jp bmcoaW50IGRvbWlkKTsKKworLyogaXRlcmF0ZXMgb3ZlciBhbGwgZXhwb3J0ZXIgcmluZ3MgYW5k IGNhbGxzIHByb3ZpZGVkCisgKiBmdW5jdGlvbiBmb3IgZWFjaCBvZiB0aGVtCisgKi8KK3ZvaWQg eGVuX2NvbW1fZm9yZWFjaF90eF9yaW5nKHZvaWQgKCpmdW5jKShpbnQgZG9taWQpKTsKKworLyog aXRlcmF0ZXMgb3ZlciBhbGwgaW1wb3J0ZXIgcmluZ3MgYW5kIGNhbGxzIHByb3ZpZGVkCisgKiBm dW5jdGlvbiBmb3IgZWFjaCBvZiB0aGVtCisgKi8KK3ZvaWQgeGVuX2NvbW1fZm9yZWFjaF9yeF9y aW5nKHZvaWQgKCpmdW5jKShpbnQgZG9taWQpKTsKKworI2VuZGlmIC8vIF9fSFlQRVJfRE1BQlVG X1hFTl9DT01NX0xJU1RfSF9fCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS1idWYvaHlwZXJfZG1h YnVmL2JhY2tlbmRzL3hlbi9oeXBlcl9kbWFidWZfeGVuX2Rydi5jIGIvZHJpdmVycy9kbWEtYnVm L2h5cGVyX2RtYWJ1Zi9iYWNrZW5kcy94ZW4vaHlwZXJfZG1hYnVmX3hlbl9kcnYuYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjgxMjJkYzE1YjRjYgotLS0gL2Rldi9u dWxsCisrKyBiL2RyaXZlcnMvZG1hLWJ1Zi9oeXBlcl9kbWFidWYvYmFja2VuZHMveGVuL2h5cGVy X2RtYWJ1Zl94ZW5fZHJ2LmMKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAy MDE4IEludGVsIENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRl ZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2Yg dGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNv ZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9u LCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29w eSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFu ZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0 byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRv IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5v dGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBw YXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwg cG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJP VklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgor ICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBP RiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB TkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9S IENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9U SEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JU IE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04g V0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhF IFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6CisgKiAgICBEb25nd29uIEtpbSA8ZG9uZ3dvbi5r aW1AaW50ZWwuY29tPgorICogICAgTWF0ZXVzeiBQb2xyb2xhIDxtYXRldXN6eC5wb3Ryb2xhQGlu dGVsLmNvbT4KKyAqCisgKi8KKworI2luY2x1ZGUgIi4uLy4uL2h5cGVyX2RtYWJ1Zl9kcnYuaCIK KyNpbmNsdWRlICJoeXBlcl9kbWFidWZfeGVuX2NvbW0uaCIKKyNpbmNsdWRlICJoeXBlcl9kbWFi dWZfeGVuX3NobS5oIgorCitzdHJ1Y3QgaHlwZXJfZG1hYnVmX2JrbmRfb3BzIHhlbl9ia25kX29w cyA9IHsKKwkuaW5pdCA9IE5VTEwsIC8qIG5vdCBuZWVkZWQgZm9yIHhlbiAqLworCS5jbGVhbnVw ID0gTlVMTCwgLyogbm90IG5lZWRlZCBmb3IgeGVuICovCisJLmdldF92bV9pZCA9IHhlbl9iZV9n ZXRfZG9taWQsCisJLnNoYXJlX3BhZ2VzID0geGVuX2JlX3NoYXJlX3BhZ2VzLAorCS51bnNoYXJl X3BhZ2VzID0geGVuX2JlX3Vuc2hhcmVfcGFnZXMsCisJLm1hcF9zaGFyZWRfcGFnZXMgPSAodm9p ZCAqKXhlbl9iZV9tYXBfc2hhcmVkX3BhZ2VzLAorCS51bm1hcF9zaGFyZWRfcGFnZXMgPSB4ZW5f YmVfdW5tYXBfc2hhcmVkX3BhZ2VzLAorCS5pbml0X2NvbW1fZW52ID0geGVuX2JlX2luaXRfY29t bV9lbnYsCisJLmRlc3Ryb3lfY29tbSA9IHhlbl9iZV9kZXN0cm95X2NvbW0sCisJLmluaXRfcnhf Y2ggPSB4ZW5fYmVfaW5pdF9yeF9yYnVmLAorCS5pbml0X3R4X2NoID0geGVuX2JlX2luaXRfdHhf cmJ1ZiwKKwkuc2VuZF9yZXEgPSB4ZW5fYmVfc2VuZF9yZXEsCit9OwpkaWZmIC0tZ2l0IGEvZHJp dmVycy9kbWEtYnVmL2h5cGVyX2RtYWJ1Zi9iYWNrZW5kcy94ZW4vaHlwZXJfZG1hYnVmX3hlbl9k cnYuaCBiL2RyaXZlcnMvZG1hLWJ1Zi9oeXBlcl9kbWFidWYvYmFja2VuZHMveGVuL2h5cGVyX2Rt YWJ1Zl94ZW5fZHJ2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5j OTdkYzFjNWQwNDIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2RtYS1idWYvaHlwZXJfZG1h YnVmL2JhY2tlbmRzL3hlbi9oeXBlcl9kbWFidWZfeGVuX2Rydi5oCkBAIC0wLDAgKzEsNTMgQEAK Ky8qCisgKiBDb3B5cmlnaHQgwqkgMjAxOCBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1p c3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9i dGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1l bnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdh cmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICog dGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1 dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBh bmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hl ZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICog VGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGlu Y2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwg Y29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgor ICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0Yg QU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlU RUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNI QUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFO WSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFD VElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9V VCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RI RVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKi8KKworI2lmbmRlZiBfX0hZ UEVSX0RNQUJVRl9YRU5fRFJWX0hfXworI2RlZmluZSBfX0hZUEVSX0RNQUJVRl9YRU5fRFJWX0hf XworI2luY2x1ZGUgPHhlbi9pbnRlcmZhY2UvZ3JhbnRfdGFibGUuaD4KKworZXh0ZXJuIHN0cnVj dCBoeXBlcl9kbWFidWZfYmtuZF9vcHMgeGVuX2JrbmRfb3BzOworCisvKiBNYWluIHB1cnBvc2Ug b2YgdGhpcyBzdHJ1Y3R1cmUgaXMgdG8ga2VlcAorICogYWxsIHJlZmVyZW5jZXMgY3JlYXRlZCBv ciBhY3F1aXJlZCBmb3Igc2hhcmluZworICogcGFnZXMgd2l0aCBhbm90aGVyIGRvbWFpbiBmb3Ig ZnJlZWluZyB0aG9zZSBsYXRlcgorICogd2hlbiB1bnNoYXJpbmcuCisgKi8KK3N0cnVjdCB4ZW5f c2hhcmVkX3BhZ2VzX2luZm8geworCS8qIHRvcCBsZXZlbCByZWZpZCAqLworCWdyYW50X3JlZl90 IGx2bDNfZ3JlZjsKKworCS8qIHBhZ2Ugb2YgdG9wIGxldmVsIGFkZHJlc3NpbmcsIGl0IGNvbnRh aW5zIHJlZmlkcyBvZiAybmQgbHZsIHBhZ2VzICovCisJZ3JhbnRfcmVmX3QgKmx2bDNfdGFibGU7 CisKKwkvKiB0YWJsZSBvZiAybmQgbGV2ZWwgcGFnZXMsIHRoYXQgY29udGFpbnMgcmVmaWRzIHRv IGRhdGEgcGFnZXMgKi8KKwlncmFudF9yZWZfdCAqbHZsMl90YWJsZTsKKworCS8qIHVubWFwIG9w cyBmb3IgbWFwcGVkIHBhZ2VzICovCisJc3RydWN0IGdudHRhYl91bm1hcF9ncmFudF9yZWYgKnVu bWFwX29wczsKKworCS8qIGRhdGEgcGFnZXMgdG8gYmUgdW5tYXBwZWQgKi8KKwlzdHJ1Y3QgcGFn ZSAqKmRhdGFfcGFnZXM7Cit9OworCisjZW5kaWYgLy8gX19IWVBFUl9ETUFCVUZfWEVOX0NPTU1f SF9fCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVmL2JhY2tlbmRzL3hl bi9oeXBlcl9kbWFidWZfeGVuX3NobS5jIGIvZHJpdmVycy9kbWEtYnVmL2h5cGVyX2RtYWJ1Zi9i YWNrZW5kcy94ZW4vaHlwZXJfZG1hYnVmX3hlbl9zaG0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMDAuLmIyZGNlZjM0ZTEwZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZl cnMvZG1hLWJ1Zi9oeXBlcl9kbWFidWYvYmFja2VuZHMveGVuL2h5cGVyX2RtYWJ1Zl94ZW5fc2ht LmMKQEAgLTAsMCArMSw1MjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAxOCBJbnRlbCBDb3Jw b3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hh cmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUg YW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICog dG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdp dGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVy Z2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3Bp ZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAq IFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5n IGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMg cGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFs bCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRo ZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIs IFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElO Q0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM SVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdF TUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9M REVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklM SVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0Us IEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRX QVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAq CisgKiBBdXRob3JzOgorICogICAgRG9uZ3dvbiBLaW0gPGRvbmd3b24ua2ltQGludGVsLmNvbT4K KyAqICAgIE1hdGV1c3ogUG9scm9sYSA8bWF0ZXVzengucG90cm9sYUBpbnRlbC5jb20+CisgKgor ICovCisKKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8eGVuL2dyYW50X3RhYmxl Lmg+CisjaW5jbHVkZSA8YXNtL3hlbi9wYWdlLmg+CisjaW5jbHVkZSAiaHlwZXJfZG1hYnVmX3hl bl9kcnYuaCIKKyNpbmNsdWRlICIuLi8uLi9oeXBlcl9kbWFidWZfZHJ2LmgiCisKKyNkZWZpbmUg UkVGU19QRVJfUEFHRSAoUEFHRV9TSVpFL3NpemVvZihncmFudF9yZWZfdCkpCisKKy8qCisgKiBD cmVhdGVzIDIgbGV2ZWwgcGFnZSBkaXJlY3Rvcnkgc3RydWN0dXJlIGZvciByZWZlcmVuY2luZyBz aGFyZWQgcGFnZXMuCisgKiBUb3AgbGV2ZWwgcGFnZSBpcyBhIHNpbmdsZSBwYWdlIHRoYXQgY29u dGFpbnMgdXAgdG8gMTAyNCByZWZpZHMgdGhhdAorICogcG9pbnQgdG8gMm5kIGxldmVsIHBhZ2Vz LgorICoKKyAqIEVhY2ggMm5kIGxldmVsIHBhZ2UgY29udGFpbnMgdXAgdG8gMTAyNCByZWZpZHMg dGhhdCBwb2ludCB0byBzaGFyZWQKKyAqIGRhdGEgcGFnZXMuCisgKgorICogVGhlcmUgd2lsbCBh bHdheXMgYmUgb25lIHRvcCBsZXZlbCBwYWdlIGFuZCBudW1iZXIgb2YgMm5kIGxldmVsIHBhZ2Vz CisgKiBkZXBlbmRzIG9uIG51bWJlciBvZiBzaGFyZWQgZGF0YSBwYWdlcy4KKyAqCisgKiAgICAg IDNyZCBsZXZlbCBwYWdlICAgICAgICAgICAgICAgIDJuZCBsZXZlbCBwYWdlcyAgICAgICAgICAg IERhdGEgcGFnZXMKKyAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgIOKUjD4rLS0tLS0t LS0tLS0tLS0tLS0tLS0rIOKUjD4rLS0tLS0tLS0tLS0tKworICogfDJuZCBsZXZlbCBwYWdlIDAg cmVmaWQgICB8LS0t4pSYIHxEYXRhIHBhZ2UgMCByZWZpZCAgIHwt4pSYIHxEYXRhIHBhZ2UgMCB8 CisgKiB8Mm5kIGxldmVsIHBhZ2UgMSByZWZpZCAgIHwtLS3ilJAgfERhdGEgcGFnZSAxIHJlZmlk ICAgfC3ilJAgKy0tLS0tLS0tLS0tLSsKKyAqIHwgICAgICAgICAgIC4uLiAgICAgICAgICAgfCAg IHwgfCAgICAgLi4uLiAgICAgICAgICAgfCB8CisgKiB8Mm5kIGxldmVsIHBhZ2UgMTAyMyByZWZp ZHwt4pSQIHwgfERhdGEgcGFnZSAxMDIzIHJlZmlkfCDilJQ+Ky0tLS0tLS0tLS0tLSsKKyAqICst LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyB8IHwgKy0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgIHxE YXRhIHBhZ2UgMSB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8ICAgICAgICAg ICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tKworICogICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHwg4pSUPistLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAqICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB8ICAgfERhdGEgcGFnZSAxMDI0IHJlZmlkfAorICogICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHwgICB8RGF0YSBwYWdlIDEwMjUgcmVmaWR8CisgKiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgfCAgIHwgICAgICAgLi4uICAgICAgICAgIHwKKyAqICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB8ICAgfERhdGEgcGFnZSAyMDQ3IHJlZmlkfAorICogICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHwgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgKiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg ICAgICAgIC4uLi4uCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pSULS0+Ky0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8 RGF0YSBwYWdlIDEwNDc1NTIgcmVmaWR8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHxEYXRhIHBhZ2UgMTA0NzU1MyByZWZpZHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgfCAgICAgICAuLi4gICAgICAgICAgICAgfAorICogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB8RGF0YSBwYWdlIDEwNDg1NzUgcmVmaWR8CisgKiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAqCisgKiBVc2lu ZyBzdWNoIDIgbGV2ZWwgc3RydWN0dXJlIGl0IGlzIHBvc3NpYmxlIHRvIHJlZmVyZW5jZSB1cCB0 byA0R0Igb2YKKyAqIHNoYXJlZCBkYXRhIHVzaW5nIHNpbmdsZSByZWZpZCBwb2ludGluZyB0byB0 b3AgbGV2ZWwgcGFnZS4KKyAqCisgKiBSZXR1cm5zIHJlZmlkIG9mIHRvcCBsZXZlbCBwYWdlLgor ICovCitpbnQgeGVuX2JlX3NoYXJlX3BhZ2VzKHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCBkb21p ZCwgaW50IG5lbnRzLAorCQkgICAgICAgdm9pZCAqKnJlZnNfaW5mbykKK3sKKwlncmFudF9yZWZf dCBsdmwzX2dyZWY7CisJZ3JhbnRfcmVmX3QgKmx2bDJfdGFibGU7CisJZ3JhbnRfcmVmX3QgKmx2 bDNfdGFibGU7CisKKwkvKgorCSAqIENhbGN1bGF0ZSBudW1iZXIgb2YgcGFnZXMgbmVlZGVkIGZv ciAybmQgbGV2ZWwgYWRkcmVzaW5nOgorCSAqLworCWludCBuX2x2bDJfZ3JlZnMgPSAobmVudHMv UkVGU19QRVJfUEFHRSArCisJCQkgICAoKG5lbnRzICUgUkVGU19QRVJfUEFHRSkgPyAxIDogMCkp OworCisJc3RydWN0IHhlbl9zaGFyZWRfcGFnZXNfaW5mbyAqc2hfcGFnZXNfaW5mbzsKKwlpbnQg aTsKKworCWx2bDNfdGFibGUgPSAoZ3JhbnRfcmVmX3QgKilfX2dldF9mcmVlX3BhZ2VzKEdGUF9L RVJORUwsIDEpOworCWx2bDJfdGFibGUgPSAoZ3JhbnRfcmVmX3QgKilfX2dldF9mcmVlX3BhZ2Vz KEdGUF9LRVJORUwsIG5fbHZsMl9ncmVmcyk7CisKKwlzaF9wYWdlc19pbmZvID0ga21hbGxvYyhz aXplb2YoKnNoX3BhZ2VzX2luZm8pLCBHRlBfS0VSTkVMKTsKKworCWlmICghc2hfcGFnZXNfaW5m bykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkqcmVmc19pbmZvID0gKHZvaWQgKilzaF9wYWdlc19p bmZvOworCisJLyogc2hhcmUgZGF0YSBwYWdlcyBpbiByZWFkb25seSBtb2RlIGZvciBzZWN1cml0 eSAqLworCWZvciAoaSA9IDA7IGkgPCBuZW50czsgaSsrKSB7CisJCWx2bDJfdGFibGVbaV0gPSBn bnR0YWJfZ3JhbnRfZm9yZWlnbl9hY2Nlc3MoZG9taWQsCisJCQkJCXBmbl90b19tZm4ocGFnZV90 b19wZm4ocGFnZXNbaV0pKSwKKwkJCQkJdHJ1ZSAvKiByZWFkIG9ubHkgKi8pOworCQlpZiAobHZs Ml90YWJsZVtpXSA9PSAtRU5PU1BDKSB7CisJCQlkZXZfZXJyKGh5X2Rydl9wcml2LT5kZXYsCisJ CQkJIk5vIG1vcmUgc3BhY2UgbGVmdCBpbiBncmFudCB0YWJsZVxuIik7CisKKwkJCS8qIFVuc2hh cmUgYWxsIGFscmVhZHkgc2hhcmVkIHBhZ2VzIGZvciBsdmwyICovCisJCQl3aGlsZSAoaS0tKSB7 CisJCQkJZ250dGFiX2VuZF9mb3JlaWduX2FjY2Vzc19yZWYobHZsMl90YWJsZVtpXSwgMCk7CisJ CQkJZ250dGFiX2ZyZWVfZ3JhbnRfcmVmZXJlbmNlKGx2bDJfdGFibGVbaV0pOworCQkJfQorCQkJ Z290byBlcnJfY2xlYW51cDsKKwkJfQorCX0KKworCS8qIFNoYXJlIDJuZCBsZXZlbCBhZGRyZXNz aW5nIHBhZ2VzIGluIHJlYWRvbmx5IG1vZGUqLworCWZvciAoaSA9IDA7IGkgPCBuX2x2bDJfZ3Jl ZnM7IGkrKykgeworCQlsdmwzX3RhYmxlW2ldID0gZ250dGFiX2dyYW50X2ZvcmVpZ25fYWNjZXNz KGRvbWlkLAorCQkJCQl2aXJ0X3RvX21mbigKKwkJCQkJKHVuc2lnbmVkIGxvbmcpbHZsMl90YWJs ZStpKlBBR0VfU0laRSksCisJCQkJCXRydWUpOworCisJCWlmIChsdmwzX3RhYmxlW2ldID09IC1F Tk9TUEMpIHsKKwkJCWRldl9lcnIoaHlfZHJ2X3ByaXYtPmRldiwKKwkJCQkiTm8gbW9yZSBzcGFj ZSBsZWZ0IGluIGdyYW50IHRhYmxlXG4iKTsKKworCQkJLyogVW5zaGFyZSBhbGwgYWxyZWFkeSBz aGFyZWQgcGFnZXMgZm9yIGx2bDMgKi8KKwkJCXdoaWxlIChpLS0pIHsKKwkJCQlnbnR0YWJfZW5k X2ZvcmVpZ25fYWNjZXNzX3JlZihsdmwzX3RhYmxlW2ldLCAxKTsKKwkJCQlnbnR0YWJfZnJlZV9n cmFudF9yZWZlcmVuY2UobHZsM190YWJsZVtpXSk7CisJCQl9CisKKwkJCS8qIFVuc2hhcmUgYWxs IHBhZ2VzIGZvciBsdmwyICovCisJCQl3aGlsZSAobmVudHMtLSkgeworCQkJCWdudHRhYl9lbmRf Zm9yZWlnbl9hY2Nlc3NfcmVmKAorCQkJCQkJCWx2bDJfdGFibGVbbmVudHNdLCAwKTsKKwkJCQln bnR0YWJfZnJlZV9ncmFudF9yZWZlcmVuY2UobHZsMl90YWJsZVtuZW50c10pOworCQkJfQorCisJ CQlnb3RvIGVycl9jbGVhbnVwOworCQl9CisJfQorCisJLyogU2hhcmUgbHZsM190YWJsZSBpbiBy ZWFkb25seSBtb2RlKi8KKwlsdmwzX2dyZWYgPSBnbnR0YWJfZ3JhbnRfZm9yZWlnbl9hY2Nlc3Mo ZG9taWQsCisJCQl2aXJ0X3RvX21mbigodW5zaWduZWQgbG9uZylsdmwzX3RhYmxlKSwKKwkJCXRy dWUpOworCisJaWYgKGx2bDNfZ3JlZiA9PSAtRU5PU1BDKSB7CisJCWRldl9lcnIoaHlfZHJ2X3By aXYtPmRldiwKKwkJCSJObyBtb3JlIHNwYWNlIGxlZnQgaW4gZ3JhbnQgdGFibGVcbiIpOworCisJ CS8qIFVuc2hhcmUgYWxsIHBhZ2VzIGZvciBsdmwzICovCisJCXdoaWxlIChpLS0pIHsKKwkJCWdu dHRhYl9lbmRfZm9yZWlnbl9hY2Nlc3NfcmVmKGx2bDNfdGFibGVbaV0sIDEpOworCQkJZ250dGFi X2ZyZWVfZ3JhbnRfcmVmZXJlbmNlKGx2bDNfdGFibGVbaV0pOworCQl9CisKKwkJLyogVW5zaGFy ZSBhbGwgcGFnZXMgZm9yIGx2bDIgKi8KKwkJd2hpbGUgKG5lbnRzLS0pIHsKKwkJCWdudHRhYl9l bmRfZm9yZWlnbl9hY2Nlc3NfcmVmKGx2bDJfdGFibGVbbmVudHNdLCAwKTsKKwkJCWdudHRhYl9m cmVlX2dyYW50X3JlZmVyZW5jZShsdmwyX3RhYmxlW25lbnRzXSk7CisJCX0KKworCQlnb3RvIGVy cl9jbGVhbnVwOworCX0KKworCS8qIFN0b3JlIGx2bDNfdGFibGUgcGFnZSB0byBiZSBmcmVlZCBs YXRlciAqLworCXNoX3BhZ2VzX2luZm8tPmx2bDNfdGFibGUgPSBsdmwzX3RhYmxlOworCisJLyog U3RvcmUgbHZsMl90YWJsZSBwYWdlcyB0byBiZSBmcmVlZCBsYXRlciAqLworCXNoX3BhZ2VzX2lu Zm8tPmx2bDJfdGFibGUgPSBsdmwyX3RhYmxlOworCisKKwkvKiBTdG9yZSBleHBvcnRlZCBwYWdl cyByZWZpZCB0byBiZSB1bnNoYXJlZCBsYXRlciAqLworCXNoX3BhZ2VzX2luZm8tPmx2bDNfZ3Jl ZiA9IGx2bDNfZ3JlZjsKKworCWRldl9kYmcoaHlfZHJ2X3ByaXYtPmRldiwgIiVzIGV4aXRcbiIs IF9fZnVuY19fKTsKKwlyZXR1cm4gbHZsM19ncmVmOworCitlcnJfY2xlYW51cDoKKwlmcmVlX3Bh Z2VzKCh1bnNpZ25lZCBsb25nKWx2bDJfdGFibGUsIG5fbHZsMl9ncmVmcyk7CisJZnJlZV9wYWdl cygodW5zaWduZWQgbG9uZylsdmwzX3RhYmxlLCAxKTsKKworCXJldHVybiAtRU5PU1BDOworfQor CitpbnQgeGVuX2JlX3Vuc2hhcmVfcGFnZXModm9pZCAqKnJlZnNfaW5mbywgaW50IG5lbnRzKQor eworCXN0cnVjdCB4ZW5fc2hhcmVkX3BhZ2VzX2luZm8gKnNoX3BhZ2VzX2luZm87CisJaW50IG5f bHZsMl9ncmVmcyA9IChuZW50cy9SRUZTX1BFUl9QQUdFICsKKwkJCSAgICAoKG5lbnRzICUgUkVG U19QRVJfUEFHRSkgPyAxIDogMCkpOworCWludCBpOworCisJZGV2X2RiZyhoeV9kcnZfcHJpdi0+ ZGV2LCAiJXMgZW50cnlcbiIsIF9fZnVuY19fKTsKKwlzaF9wYWdlc19pbmZvID0gKHN0cnVjdCB4 ZW5fc2hhcmVkX3BhZ2VzX2luZm8gKikoKnJlZnNfaW5mbyk7CisKKwlpZiAoc2hfcGFnZXNfaW5m by0+bHZsM190YWJsZSA9PSBOVUxMIHx8CisJICAgIHNoX3BhZ2VzX2luZm8tPmx2bDJfdGFibGUg PT0gIE5VTEwgfHwKKwkgICAgc2hfcGFnZXNfaW5mby0+bHZsM19ncmVmID09IC0xKSB7CisJCWRl dl93YXJuKGh5X2Rydl9wcml2LT5kZXYsCisJCQkgImdyZWYgdGFibGUgZm9yIGh5cGVyX2RtYWJ1 ZiBhbHJlYWR5IGNsZWFuZWQgdXBcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBFbmQgZm9y ZWlnbiBhY2Nlc3MgZm9yIGRhdGEgcGFnZXMsIGJ1dCBkbyBub3QgZnJlZSB0aGVtICovCisJZm9y IChpID0gMDsgaSA8IG5lbnRzOyBpKyspIHsKKwkJaWYgKGdudHRhYl9xdWVyeV9mb3JlaWduX2Fj Y2VzcyhzaF9wYWdlc19pbmZvLT5sdmwyX3RhYmxlW2ldKSkKKwkJCWRldl93YXJuKGh5X2Rydl9w cml2LT5kZXYsICJyZWZpZCBub3Qgc2hhcmVkICEhXG4iKTsKKworCQlnbnR0YWJfZW5kX2ZvcmVp Z25fYWNjZXNzX3JlZihzaF9wYWdlc19pbmZvLT5sdmwyX3RhYmxlW2ldLCAwKTsKKwkJZ250dGFi X2ZyZWVfZ3JhbnRfcmVmZXJlbmNlKHNoX3BhZ2VzX2luZm8tPmx2bDJfdGFibGVbaV0pOworCX0K KworCS8qIEVuZCBmb3JlaWduIGFjY2VzcyBmb3IgMm5kIGxldmVsIGFkZHJlc3NpbmcgcGFnZXMg Ki8KKwlmb3IgKGkgPSAwOyBpIDwgbl9sdmwyX2dyZWZzOyBpKyspIHsKKwkJaWYgKGdudHRhYl9x dWVyeV9mb3JlaWduX2FjY2VzcyhzaF9wYWdlc19pbmZvLT5sdmwzX3RhYmxlW2ldKSkKKwkJCWRl dl93YXJuKGh5X2Rydl9wcml2LT5kZXYsICJyZWZpZCBub3Qgc2hhcmVkICEhXG4iKTsKKworCQlp ZiAoIWdudHRhYl9lbmRfZm9yZWlnbl9hY2Nlc3NfcmVmKAorCQkJCQlzaF9wYWdlc19pbmZvLT5s dmwzX3RhYmxlW2ldLCAxKSkKKwkJCWRldl93YXJuKGh5X2Rydl9wcml2LT5kZXYsICJyZWZpZCBz dGlsbCBpbiB1c2UhISFcbiIpOworCisJCWdudHRhYl9mcmVlX2dyYW50X3JlZmVyZW5jZShzaF9w YWdlc19pbmZvLT5sdmwzX3RhYmxlW2ldKTsKKwl9CisKKwkvKiBFbmQgZm9yZWlnbiBhY2Nlc3Mg Zm9yIHRvcCBsZXZlbCBhZGRyZXNzaW5nIHBhZ2UgKi8KKwlpZiAoZ250dGFiX3F1ZXJ5X2ZvcmVp Z25fYWNjZXNzKHNoX3BhZ2VzX2luZm8tPmx2bDNfZ3JlZikpCisJCWRldl93YXJuKGh5X2Rydl9w cml2LT5kZXYsICJncmVmIG5vdCBzaGFyZWQgISFcbiIpOworCisJZ250dGFiX2VuZF9mb3JlaWdu X2FjY2Vzc19yZWYoc2hfcGFnZXNfaW5mby0+bHZsM19ncmVmLCAxKTsKKwlnbnR0YWJfZnJlZV9n cmFudF9yZWZlcmVuY2Uoc2hfcGFnZXNfaW5mby0+bHZsM19ncmVmKTsKKworCS8qIGZyZWVpbmcg YWxsIHBhZ2VzIHVzZWQgZm9yIDIgbGV2ZWwgYWRkcmVzc2luZyAqLworCWZyZWVfcGFnZXMoKHVu c2lnbmVkIGxvbmcpc2hfcGFnZXNfaW5mby0+bHZsMl90YWJsZSwgbl9sdmwyX2dyZWZzKTsKKwlm cmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKXNoX3BhZ2VzX2luZm8tPmx2bDNfdGFibGUsIDEpOwor CisJc2hfcGFnZXNfaW5mby0+bHZsM19ncmVmID0gLTE7CisJc2hfcGFnZXNfaW5mby0+bHZsMl90 YWJsZSA9IE5VTEw7CisJc2hfcGFnZXNfaW5mby0+bHZsM190YWJsZSA9IE5VTEw7CisJa2ZyZWUo c2hfcGFnZXNfaW5mbyk7CisJc2hfcGFnZXNfaW5mbyA9IE5VTEw7CisKKwlkZXZfZGJnKGh5X2Ry dl9wcml2LT5kZXYsICIlcyBleGl0XG4iLCBfX2Z1bmNfXyk7CisJcmV0dXJuIDA7Cit9CisKKy8q IE1hcHMgcHJvdmlkZWQgdG9wIGxldmVsIHJlZiBpZCBhbmQgdGhlbiByZXR1cm4gYXJyYXkgb2Yg cGFnZXMKKyAqIGNvbnRhaW5pbmcgZGF0YSByZWZzLgorICovCitzdHJ1Y3QgcGFnZSAqKnhlbl9i ZV9tYXBfc2hhcmVkX3BhZ2VzKHVuc2lnbmVkIGxvbmcgbHZsM19ncmVmLCBpbnQgZG9taWQsCisJ CQkJICAgICAgaW50IG5lbnRzLCB2b2lkICoqcmVmc19pbmZvKQoreworCXN0cnVjdCBwYWdlICps dmwzX3RhYmxlX3BhZ2U7CisJc3RydWN0IHBhZ2UgKipsdmwyX3RhYmxlX3BhZ2VzOworCXN0cnVj dCBwYWdlICoqZGF0YV9wYWdlczsKKwlzdHJ1Y3QgeGVuX3NoYXJlZF9wYWdlc19pbmZvICpzaF9w YWdlc19pbmZvOworCisJZ3JhbnRfcmVmX3QgKmx2bDNfdGFibGU7CisJZ3JhbnRfcmVmX3QgKmx2 bDJfdGFibGU7CisKKwlzdHJ1Y3QgZ250dGFiX21hcF9ncmFudF9yZWYgbHZsM19tYXBfb3BzOwor CXN0cnVjdCBnbnR0YWJfdW5tYXBfZ3JhbnRfcmVmIGx2bDNfdW5tYXBfb3BzOworCisJc3RydWN0 IGdudHRhYl9tYXBfZ3JhbnRfcmVmICpsdmwyX21hcF9vcHM7CisJc3RydWN0IGdudHRhYl91bm1h cF9ncmFudF9yZWYgKmx2bDJfdW5tYXBfb3BzOworCisJc3RydWN0IGdudHRhYl9tYXBfZ3JhbnRf cmVmICpkYXRhX21hcF9vcHM7CisJc3RydWN0IGdudHRhYl91bm1hcF9ncmFudF9yZWYgKmRhdGFf dW5tYXBfb3BzOworCisJLyogIyBvZiBncmVmcyBpbiB0aGUgbGFzdCBwYWdlIG9mIGx2bDIgdGFi bGUgKi8KKwlpbnQgbmVudHNfbGFzdCA9IChuZW50cyAtIDEpICUgUkVGU19QRVJfUEFHRSArIDE7 CisJaW50IG5fbHZsMl9ncmVmcyA9IChuZW50cyAvIFJFRlNfUEVSX1BBR0UpICsKKwkJCSAgICgo bmVudHNfbGFzdCA+IDApID8gMSA6IDApIC0KKwkJCSAgIChuZW50c19sYXN0ID09IFJFRlNfUEVS X1BBR0UpOworCWludCBpLCBqLCBrOworCisJZGV2X2RiZyhoeV9kcnZfcHJpdi0+ZGV2LCAiJXMg ZW50cnlcbiIsIF9fZnVuY19fKTsKKworCXNoX3BhZ2VzX2luZm8gPSBrbWFsbG9jKHNpemVvZigq c2hfcGFnZXNfaW5mbyksIEdGUF9LRVJORUwpOworCSpyZWZzX2luZm8gPSAodm9pZCAqKSBzaF9w YWdlc19pbmZvOworCisJbHZsMl90YWJsZV9wYWdlcyA9IGtjYWxsb2Mobl9sdmwyX2dyZWZzLCBz aXplb2Yoc3RydWN0IHBhZ2UgKiksCisJCQkJICAgR0ZQX0tFUk5FTCk7CisKKwlkYXRhX3BhZ2Vz ID0ga2NhbGxvYyhuZW50cywgc2l6ZW9mKHN0cnVjdCBwYWdlICopLCBHRlBfS0VSTkVMKTsKKwor CWx2bDJfbWFwX29wcyA9IGtjYWxsb2Mobl9sdmwyX2dyZWZzLCBzaXplb2YoKmx2bDJfbWFwX29w cyksCisJCQkgICAgICAgR0ZQX0tFUk5FTCk7CisKKwlsdmwyX3VubWFwX29wcyA9IGtjYWxsb2Mo bl9sdmwyX2dyZWZzLCBzaXplb2YoKmx2bDJfdW5tYXBfb3BzKSwKKwkJCQkgR0ZQX0tFUk5FTCk7 CisKKwlkYXRhX21hcF9vcHMgPSBrY2FsbG9jKG5lbnRzLCBzaXplb2YoKmRhdGFfbWFwX29wcyks IEdGUF9LRVJORUwpOworCWRhdGFfdW5tYXBfb3BzID0ga2NhbGxvYyhuZW50cywgc2l6ZW9mKCpk YXRhX3VubWFwX29wcyksIEdGUF9LRVJORUwpOworCisJLyogTWFwIHRvcCBsZXZlbCBhZGRyZXNz aW5nIHBhZ2UgKi8KKwlpZiAoZ250dGFiX2FsbG9jX3BhZ2VzKDEsICZsdmwzX3RhYmxlX3BhZ2Up KSB7CisJCWRldl9lcnIoaHlfZHJ2X3ByaXYtPmRldiwgIkNhbm5vdCBhbGxvY2F0ZSBwYWdlc1xu Iik7CisJCXJldHVybiBOVUxMOworCX0KKworCWx2bDNfdGFibGUgPSAoZ3JhbnRfcmVmX3QgKilw Zm5fdG9fa2FkZHIocGFnZV90b19wZm4obHZsM190YWJsZV9wYWdlKSk7CisKKwlnbnR0YWJfc2V0 X21hcF9vcCgmbHZsM19tYXBfb3BzLCAodW5zaWduZWQgbG9uZylsdmwzX3RhYmxlLAorCQkJICBH TlRNQVBfaG9zdF9tYXAgfCBHTlRNQVBfcmVhZG9ubHksCisJCQkgIChncmFudF9yZWZfdClsdmwz X2dyZWYsIGRvbWlkKTsKKworCWdudHRhYl9zZXRfdW5tYXBfb3AoJmx2bDNfdW5tYXBfb3BzLCAo dW5zaWduZWQgbG9uZylsdmwzX3RhYmxlLAorCQkJICAgIEdOVE1BUF9ob3N0X21hcCB8IEdOVE1B UF9yZWFkb25seSwgLTEpOworCisJaWYgKGdudHRhYl9tYXBfcmVmcygmbHZsM19tYXBfb3BzLCBO VUxMLCAmbHZsM190YWJsZV9wYWdlLCAxKSkgeworCQlkZXZfZXJyKGh5X2Rydl9wcml2LT5kZXYs CisJCQkiSFlQRVJWSVNPUiBtYXAgZ3JhbnQgcmVmIGZhaWxlZCIpOworCQlyZXR1cm4gTlVMTDsK Kwl9CisKKwlpZiAobHZsM19tYXBfb3BzLnN0YXR1cykgeworCQlkZXZfZXJyKGh5X2Rydl9wcml2 LT5kZXYsCisJCQkiSFlQRVJWSVNPUiBtYXAgZ3JhbnQgcmVmIGZhaWxlZCBzdGF0dXMgPSAlZCIs CisJCQlsdmwzX21hcF9vcHMuc3RhdHVzKTsKKworCQlnb3RvIGVycm9yX2NsZWFudXBfbHZsMzsK Kwl9IGVsc2UgeworCQlsdmwzX3VubWFwX29wcy5oYW5kbGUgPSBsdmwzX21hcF9vcHMuaGFuZGxl OworCX0KKworCS8qIE1hcCBhbGwgc2Vjb25kIGxldmVsIHBhZ2VzICovCisJaWYgKGdudHRhYl9h bGxvY19wYWdlcyhuX2x2bDJfZ3JlZnMsIGx2bDJfdGFibGVfcGFnZXMpKSB7CisJCWRldl9lcnIo aHlfZHJ2X3ByaXYtPmRldiwgIkNhbm5vdCBhbGxvY2F0ZSBwYWdlc1xuIik7CisJCWdvdG8gZXJy b3JfY2xlYW51cF9sdmwzOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBuX2x2bDJfZ3JlZnM7IGkr KykgeworCQlsdmwyX3RhYmxlID0gKGdyYW50X3JlZl90ICopcGZuX3RvX2thZGRyKAorCQkJCQlw YWdlX3RvX3BmbihsdmwyX3RhYmxlX3BhZ2VzW2ldKSk7CisJCWdudHRhYl9zZXRfbWFwX29wKCZs dmwyX21hcF9vcHNbaV0sCisJCQkJICAodW5zaWduZWQgbG9uZylsdmwyX3RhYmxlLCBHTlRNQVBf aG9zdF9tYXAgfAorCQkJCSAgR05UTUFQX3JlYWRvbmx5LAorCQkJCSAgbHZsM190YWJsZVtpXSwg ZG9taWQpOworCQlnbnR0YWJfc2V0X3VubWFwX29wKCZsdmwyX3VubWFwX29wc1tpXSwKKwkJCQkg ICAgKHVuc2lnbmVkIGxvbmcpbHZsMl90YWJsZSwgR05UTUFQX2hvc3RfbWFwIHwKKwkJCQkgICAg R05UTUFQX3JlYWRvbmx5LCAtMSk7CisJfQorCisJLyogVW5tYXAgdG9wIGxldmVsIHBhZ2UsIGFz IGl0IHdvbid0IGJlIG5lZWRlZCBhbnkgbG9uZ2VyICovCisJaWYgKGdudHRhYl91bm1hcF9yZWZz KCZsdmwzX3VubWFwX29wcywgTlVMTCwKKwkJCSAgICAgICZsdmwzX3RhYmxlX3BhZ2UsIDEpKSB7 CisJCWRldl9lcnIoaHlfZHJ2X3ByaXYtPmRldiwKKwkJCSJ4ZW46IGNhbm5vdCB1bm1hcCB0b3Ag bGV2ZWwgcGFnZVxuIik7CisJCXJldHVybiBOVUxMOworCX0KKworCS8qIE1hcmsgdGhhdCBwYWdl IHdhcyB1bm1hcHBlZCAqLworCWx2bDNfdW5tYXBfb3BzLmhhbmRsZSA9IC0xOworCisJaWYgKGdu dHRhYl9tYXBfcmVmcyhsdmwyX21hcF9vcHMsIE5VTEwsCisJCQkgICAgbHZsMl90YWJsZV9wYWdl cywgbl9sdmwyX2dyZWZzKSkgeworCQlkZXZfZXJyKGh5X2Rydl9wcml2LT5kZXYsCisJCQkiSFlQ RVJWSVNPUiBtYXAgZ3JhbnQgcmVmIGZhaWxlZCIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkv KiBDaGVja3MgaWYgcGFnZXMgd2VyZSBtYXBwZWQgY29ycmVjdGx5ICovCisJZm9yIChpID0gMDsg aSA8IG5fbHZsMl9ncmVmczsgaSsrKSB7CisJCWlmIChsdmwyX21hcF9vcHNbaV0uc3RhdHVzKSB7 CisJCQlkZXZfZXJyKGh5X2Rydl9wcml2LT5kZXYsCisJCQkJIkhZUEVSVklTT1IgbWFwIGdyYW50 IHJlZiBmYWlsZWQgc3RhdHVzID0gJWQiLAorCQkJCWx2bDJfbWFwX29wc1tpXS5zdGF0dXMpOwor CQkJZ290byBlcnJvcl9jbGVhbnVwX2x2bDI7CisJCX0gZWxzZSB7CisJCQlsdmwyX3VubWFwX29w c1tpXS5oYW5kbGUgPSBsdmwyX21hcF9vcHNbaV0uaGFuZGxlOworCQl9CisJfQorCisJaWYgKGdu dHRhYl9hbGxvY19wYWdlcyhuZW50cywgZGF0YV9wYWdlcykpIHsKKwkJZGV2X2VycihoeV9kcnZf cHJpdi0+ZGV2LAorCQkJIkNhbm5vdCBhbGxvY2F0ZSBwYWdlc1xuIik7CisJCWdvdG8gZXJyb3Jf Y2xlYW51cF9sdmwyOworCX0KKworCWsgPSAwOworCisJZm9yIChpID0gMDsgaSA8IG5fbHZsMl9n cmVmcyAtIDE7IGkrKykgeworCQlsdmwyX3RhYmxlID0gcGZuX3RvX2thZGRyKHBhZ2VfdG9fcGZu KGx2bDJfdGFibGVfcGFnZXNbaV0pKTsKKwkJZm9yIChqID0gMDsgaiA8IFJFRlNfUEVSX1BBR0U7 IGorKykgeworCQkJZ250dGFiX3NldF9tYXBfb3AoJmRhdGFfbWFwX29wc1trXSwKKwkJCQkodW5z aWduZWQgbG9uZylwZm5fdG9fa2FkZHIoCisJCQkJCQlwYWdlX3RvX3BmbihkYXRhX3BhZ2VzW2td KSksCisJCQkJR05UTUFQX2hvc3RfbWFwIHwgR05UTUFQX3JlYWRvbmx5LAorCQkJCWx2bDJfdGFi bGVbal0sIGRvbWlkKTsKKworCQkJZ250dGFiX3NldF91bm1hcF9vcCgmZGF0YV91bm1hcF9vcHNb a10sCisJCQkJKHVuc2lnbmVkIGxvbmcpcGZuX3RvX2thZGRyKAorCQkJCQkJcGFnZV90b19wZm4o ZGF0YV9wYWdlc1trXSkpLAorCQkJCUdOVE1BUF9ob3N0X21hcCB8IEdOVE1BUF9yZWFkb25seSwg LTEpOworCQkJaysrOworCQl9CisJfQorCisJLyogZm9yIGdyZWZzIGluIHRoZSBsYXN0IGx2bDIg dGFibGUgcGFnZSAqLworCWx2bDJfdGFibGUgPSBwZm5fdG9fa2FkZHIocGFnZV90b19wZm4oCisJ CQkJbHZsMl90YWJsZV9wYWdlc1tuX2x2bDJfZ3JlZnMgLSAxXSkpOworCisJZm9yIChqID0gMDsg aiA8IG5lbnRzX2xhc3Q7IGorKykgeworCQlnbnR0YWJfc2V0X21hcF9vcCgmZGF0YV9tYXBfb3Bz W2tdLAorCQkJKHVuc2lnbmVkIGxvbmcpcGZuX3RvX2thZGRyKHBhZ2VfdG9fcGZuKGRhdGFfcGFn ZXNba10pKSwKKwkJCUdOVE1BUF9ob3N0X21hcCB8IEdOVE1BUF9yZWFkb25seSwKKwkJCWx2bDJf dGFibGVbal0sIGRvbWlkKTsKKworCQlnbnR0YWJfc2V0X3VubWFwX29wKCZkYXRhX3VubWFwX29w c1trXSwKKwkJCSh1bnNpZ25lZCBsb25nKXBmbl90b19rYWRkcihwYWdlX3RvX3BmbihkYXRhX3Bh Z2VzW2tdKSksCisJCQlHTlRNQVBfaG9zdF9tYXAgfCBHTlRNQVBfcmVhZG9ubHksIC0xKTsKKwkJ aysrOworCX0KKworCWlmIChnbnR0YWJfbWFwX3JlZnMoZGF0YV9tYXBfb3BzLCBOVUxMLAorCQkJ ICAgIGRhdGFfcGFnZXMsIG5lbnRzKSkgeworCQlkZXZfZXJyKGh5X2Rydl9wcml2LT5kZXYsCisJ CQkiSFlQRVJWSVNPUiBtYXAgZ3JhbnQgcmVmIGZhaWxlZFxuIik7CisJCXJldHVybiBOVUxMOwor CX0KKworCS8qIHVubWFwcGluZyBsdmwyIHRhYmxlIHBhZ2VzICovCisJaWYgKGdudHRhYl91bm1h cF9yZWZzKGx2bDJfdW5tYXBfb3BzLAorCQkJICAgICAgTlVMTCwgbHZsMl90YWJsZV9wYWdlcywK KwkJCSAgICAgIG5fbHZsMl9ncmVmcykpIHsKKwkJZGV2X2VycihoeV9kcnZfcHJpdi0+ZGV2LAor CQkJIkNhbm5vdCB1bm1hcCAybmQgbGV2ZWwgcmVmc1xuIik7CisJCXJldHVybiBOVUxMOworCX0K KworCS8qIE1hcmsgdGhhdCBwYWdlcyB3ZXJlIHVubWFwcGVkICovCisJZm9yIChpID0gMDsgaSA8 IG5fbHZsMl9ncmVmczsgaSsrKQorCQlsdmwyX3VubWFwX29wc1tpXS5oYW5kbGUgPSAtMTsKKwor CWZvciAoaSA9IDA7IGkgPCBuZW50czsgaSsrKSB7CisJCWlmIChkYXRhX21hcF9vcHNbaV0uc3Rh dHVzKSB7CisJCQlkZXZfZXJyKGh5X2Rydl9wcml2LT5kZXYsCisJCQkJIkhZUEVSVklTT1IgbWFw IGdyYW50IHJlZiBmYWlsZWQgc3RhdHVzID0gJWRcbiIsCisJCQkJZGF0YV9tYXBfb3BzW2ldLnN0 YXR1cyk7CisJCQlnb3RvIGVycm9yX2NsZWFudXBfZGF0YTsKKwkJfSBlbHNlIHsKKwkJCWRhdGFf dW5tYXBfb3BzW2ldLmhhbmRsZSA9IGRhdGFfbWFwX29wc1tpXS5oYW5kbGU7CisJCX0KKwl9CisK KwkvKiBzdG9yZSB0aGVzZSByZWZlcmVuY2VzIGZvciB1bm1hcHBpbmcgaW4gdGhlIGZ1dHVyZSAq LworCXNoX3BhZ2VzX2luZm8tPnVubWFwX29wcyA9IGRhdGFfdW5tYXBfb3BzOworCXNoX3BhZ2Vz X2luZm8tPmRhdGFfcGFnZXMgPSBkYXRhX3BhZ2VzOworCisJZ250dGFiX2ZyZWVfcGFnZXMoMSwg Jmx2bDNfdGFibGVfcGFnZSk7CisJZ250dGFiX2ZyZWVfcGFnZXMobl9sdmwyX2dyZWZzLCBsdmwy X3RhYmxlX3BhZ2VzKTsKKwlrZnJlZShsdmwyX3RhYmxlX3BhZ2VzKTsKKwlrZnJlZShsdmwyX21h cF9vcHMpOworCWtmcmVlKGx2bDJfdW5tYXBfb3BzKTsKKwlrZnJlZShkYXRhX21hcF9vcHMpOwor CisJZGV2X2RiZyhoeV9kcnZfcHJpdi0+ZGV2LCAiJXMgZXhpdFxuIiwgX19mdW5jX18pOworCXJl dHVybiBkYXRhX3BhZ2VzOworCitlcnJvcl9jbGVhbnVwX2RhdGE6CisJZ250dGFiX3VubWFwX3Jl ZnMoZGF0YV91bm1hcF9vcHMsIE5VTEwsIGRhdGFfcGFnZXMsCisJCQkgIG5lbnRzKTsKKworCWdu dHRhYl9mcmVlX3BhZ2VzKG5lbnRzLCBkYXRhX3BhZ2VzKTsKKworZXJyb3JfY2xlYW51cF9sdmwy OgorCWlmIChsdmwyX3VubWFwX29wc1swXS5oYW5kbGUgIT0gLTEpCisJCWdudHRhYl91bm1hcF9y ZWZzKGx2bDJfdW5tYXBfb3BzLCBOVUxMLAorCQkJCSAgbHZsMl90YWJsZV9wYWdlcywgbl9sdmwy X2dyZWZzKTsKKwlnbnR0YWJfZnJlZV9wYWdlcyhuX2x2bDJfZ3JlZnMsIGx2bDJfdGFibGVfcGFn ZXMpOworCitlcnJvcl9jbGVhbnVwX2x2bDM6CisJaWYgKGx2bDNfdW5tYXBfb3BzLmhhbmRsZSAh PSAtMSkKKwkJZ250dGFiX3VubWFwX3JlZnMoJmx2bDNfdW5tYXBfb3BzLCBOVUxMLAorCQkJCSAg Jmx2bDNfdGFibGVfcGFnZSwgMSk7CisJZ250dGFiX2ZyZWVfcGFnZXMoMSwgJmx2bDNfdGFibGVf cGFnZSk7CisKKwlrZnJlZShsdmwyX3RhYmxlX3BhZ2VzKTsKKwlrZnJlZShsdmwyX21hcF9vcHMp OworCWtmcmVlKGx2bDJfdW5tYXBfb3BzKTsKKwlrZnJlZShkYXRhX21hcF9vcHMpOworCisKKwly ZXR1cm4gTlVMTDsKK30KKworaW50IHhlbl9iZV91bm1hcF9zaGFyZWRfcGFnZXModm9pZCAqKnJl ZnNfaW5mbywgaW50IG5lbnRzKQoreworCXN0cnVjdCB4ZW5fc2hhcmVkX3BhZ2VzX2luZm8gKnNo X3BhZ2VzX2luZm87CisKKwlkZXZfZGJnKGh5X2Rydl9wcml2LT5kZXYsICIlcyBlbnRyeVxuIiwg X19mdW5jX18pOworCisJc2hfcGFnZXNfaW5mbyA9IChzdHJ1Y3QgeGVuX3NoYXJlZF9wYWdlc19p bmZvICopKCpyZWZzX2luZm8pOworCisJaWYgKHNoX3BhZ2VzX2luZm8tPnVubWFwX29wcyA9PSBO VUxMIHx8CisJICAgIHNoX3BhZ2VzX2luZm8tPmRhdGFfcGFnZXMgPT0gTlVMTCkgeworCQlkZXZf d2FybihoeV9kcnZfcHJpdi0+ZGV2LAorCQkJICJwYWdlcyBhbHJlYWR5IGNsZWFuZWQgdXAgb3Ig YnVmZmVyIG5vdCBpbXBvcnRlZCB5ZXRcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoZ250 dGFiX3VubWFwX3JlZnMoc2hfcGFnZXNfaW5mby0+dW5tYXBfb3BzLCBOVUxMLAorCQkJICAgICAg c2hfcGFnZXNfaW5mby0+ZGF0YV9wYWdlcywgbmVudHMpKSB7CisJCWRldl9lcnIoaHlfZHJ2X3By aXYtPmRldiwgIkNhbm5vdCB1bm1hcCBkYXRhIHBhZ2VzXG4iKTsKKwkJcmV0dXJuIC1FRkFVTFQ7 CisJfQorCisJZ250dGFiX2ZyZWVfcGFnZXMobmVudHMsIHNoX3BhZ2VzX2luZm8tPmRhdGFfcGFn ZXMpOworCisJa2ZyZWUoc2hfcGFnZXNfaW5mby0+ZGF0YV9wYWdlcyk7CisJa2ZyZWUoc2hfcGFn ZXNfaW5mby0+dW5tYXBfb3BzKTsKKwlzaF9wYWdlc19pbmZvLT51bm1hcF9vcHMgPSBOVUxMOwor CXNoX3BhZ2VzX2luZm8tPmRhdGFfcGFnZXMgPSBOVUxMOworCWtmcmVlKHNoX3BhZ2VzX2luZm8p OworCXNoX3BhZ2VzX2luZm8gPSBOVUxMOworCisJZGV2X2RiZyhoeV9kcnZfcHJpdi0+ZGV2LCAi JXMgZXhpdFxuIiwgX19mdW5jX18pOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9kbWEtYnVmL2h5cGVyX2RtYWJ1Zi9iYWNrZW5kcy94ZW4vaHlwZXJfZG1hYnVmX3hlbl9zaG0u aCBiL2RyaXZlcnMvZG1hLWJ1Zi9oeXBlcl9kbWFidWYvYmFja2VuZHMveGVuL2h5cGVyX2RtYWJ1 Zl94ZW5fc2htLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5jMzlm MjQxMzUxZjgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVm L2JhY2tlbmRzL3hlbi9oeXBlcl9kbWFidWZfeGVuX3NobS5oCkBAIC0wLDAgKzEsNDYgQEAKKy8q CisgKiBDb3B5cmlnaHQgwqkgMjAxOCBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Np b24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFp bmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRh dGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUg d2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhl IHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUs IHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQg dG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0 byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhl IGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1 ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29w aWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICog VEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5Z IEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQg VE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxM CisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBD TEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElP TiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBP RiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIg REVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKi8KKworI2lmbmRlZiBfX0hZUEVS X0RNQUJVRl9YRU5fU0hNX0hfXworI2RlZmluZSBfX0hZUEVSX0RNQUJVRl9YRU5fU0hNX0hfXwor CisvKiBUaGlzIGNvbGxlY3RzIGFsbCByZWZlcmVuY2UgbnVtYmVycyBmb3IgMm5kIGxldmVsIHNo YXJlZCBwYWdlcyBhbmQKKyAqIGNyZWF0ZSBhIHRhYmxlIHdpdGggdGhvc2UgaW4gMXN0IGxldmVs IHNoYXJlZCBwYWdlcyB0aGVuIHJldHVybiByZWZlcmVuY2UKKyAqIG51bWJlcnMgZm9yIHRoaXMg dG9wIGxldmVsIHRhYmxlLgorICovCitpbnQgeGVuX2JlX3NoYXJlX3BhZ2VzKHN0cnVjdCBwYWdl ICoqcGFnZXMsIGludCBkb21pZCwgaW50IG5lbnRzLAorCQkgICAgdm9pZCAqKnJlZnNfaW5mbyk7 CisKK2ludCB4ZW5fYmVfdW5zaGFyZV9wYWdlcyh2b2lkICoqcmVmc19pbmZvLCBpbnQgbmVudHMp OworCisvKiBNYXBzIHByb3ZpZGVkIHRvcCBsZXZlbCByZWYgaWQgYW5kIHRoZW4gcmV0dXJuIGFy cmF5IG9mIHBhZ2VzIGNvbnRhaW5pbmcKKyAqIGRhdGEgcmVmcy4KKyAqLworc3RydWN0IHBhZ2Ug Kip4ZW5fYmVfbWFwX3NoYXJlZF9wYWdlcyh1bnNpZ25lZCBsb25nIGx2bDNfZ3JlZiwgaW50IGRv bWlkLAorCQkJCSAgICAgIGludCBuZW50cywKKwkJCQkgICAgICB2b2lkICoqcmVmc19pbmZvKTsK KworaW50IHhlbl9iZV91bm1hcF9zaGFyZWRfcGFnZXModm9pZCAqKnJlZnNfaW5mbywgaW50IG5l bnRzKTsKKworI2VuZGlmIC8qIF9fSFlQRVJfRE1BQlVGX1hFTl9TSE1fSF9fICovCmRpZmYgLS1n aXQgYS9kcml2ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9kcnYuYyBiL2Ry aXZlcnMvZG1hLWJ1Zi9oeXBlcl9kbWFidWYvaHlwZXJfZG1hYnVmX2Rydi5jCmluZGV4IDE4YzFj ZDczNWVhMi4uMzMyMGY5ZGNjNzY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS1idWYvaHlwZXJf ZG1hYnVmL2h5cGVyX2RtYWJ1Zl9kcnYuYworKysgYi9kcml2ZXJzL2RtYS1idWYvaHlwZXJfZG1h YnVmL2h5cGVyX2RtYWJ1Zl9kcnYuYwpAQCAtNDIsNiArNDIsMTAgQEAKICNpbmNsdWRlICJoeXBl cl9kbWFidWZfbGlzdC5oIgogI2luY2x1ZGUgImh5cGVyX2RtYWJ1Zl9pZC5oIgogCisjaWZkZWYg Q09ORklHX0hZUEVSX0RNQUJVRl9YRU4KKyNpbmNsdWRlICJiYWNrZW5kcy94ZW4vaHlwZXJfZG1h YnVmX3hlbl9kcnYuaCIKKyNlbmRpZgorCiBNT0RVTEVfTElDRU5TRSgiR1BMIGFuZCBhZGRpdGlv bmFsIHJpZ2h0cyIpOwogTU9EVUxFX0FVVEhPUigiSW50ZWwgQ29ycG9yYXRpb24iKTsKIApAQCAt MTQ1LDcgKzE0OSwxMyBAQCBzdGF0aWMgaW50IF9faW5pdCBoeXBlcl9kbWFidWZfZHJ2X2luaXQo dm9pZCkKIAkJcmV0dXJuIHJldDsKIAl9CiAKKy8qIGN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIFhF TiBoeXBlcnZpc29yICovCisjaWZkZWYgQ09ORklHX0hZUEVSX0RNQUJVRl9YRU4KKwloeV9kcnZf cHJpdi0+YmtuZF9vcHMgPSAmeGVuX2JrbmRfb3BzOworI2Vsc2UKIAloeV9kcnZfcHJpdi0+Ymtu ZF9vcHMgPSBOVUxMOworCXByX2VycigiaHlwZXJfZG1hYnVmIGRydiBjdXJyZW50bHkgc3VwcG9y dHMgWEVOIG9ubHkuXG4iKTsKKyNlbmRpZgogCiAJaWYgKGh5X2Rydl9wcml2LT5ia25kX29wcyA9 PSBOVUxMKSB7CiAJCXByX2VycigiSHlwZXJfZG1hYnVmOiBubyBiYWNrZW5kIGZvdW5kXG4iKTsK LS0gCjIuMTYuMQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3Jn Cmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby94ZW4tZGV2ZWw=