From mboxrd@z Thu Jan 1 00:00:00 1970 From: Vitaly Kuznetsov Subject: [RFC PATCH KERNEL 1/4] x86/xen: start untangling PV and PVHVM guest support code Date: Mon, 14 Nov 2016 18:17:46 +0100 Message-ID: <1479143869-27611-2-git-send-email-vkuznets@redhat.com> References: <1479143869-27611-1-git-send-email-vkuznets@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta3.messagelabs.com ([195.245.230.39]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1c6KtK-0003rM-9V for xen-devel@lists.xenproject.org; Mon, 14 Nov 2016 17:17:58 +0000 In-Reply-To: <1479143869-27611-1-git-send-email-vkuznets@redhat.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org Cc: Juergen Gross , Boris Ostrovsky , x86@kernel.org, Andrew Jones , David Vrabel List-Id: xen-devel@lists.xenproject.org SW50cm9kdWNlIENPTkZJR19YRU5fUFYgY29uZmlnIG9wdGlvbiBhbmQgc3BsaXQgZW5saWdodGVu LmMgaW50bwozIGZpbGVzLiBUZW1wb3JhcnkgYWRkICNpZmRlZiBDT05GSUdfWEVOX1BWIHRvIHNt cC5jIGFuZCBtbXUuYyB0bwpub3QgYnJlYWsgdGhlIGJ1aWxkIGFuZCBub3QgbWFrZSB0aGUgcGF0 Y2ggZXZlbiBiaWdnZXIuCgp4ZW5fY3B1X3VwX3ByZXBhcmUqL3hlbl9jcHVfZGllIGhvb2tzIHJl cXVpcmUgc2VwYXJhdGlvbiB0byBzdXBwb3J0CmZ1dHVyZSB4ZW5fc21wX2ludHJfaW5pdCgpIHNw bGl0LgoKU2lnbmVkLW9mZi1ieTogVml0YWx5IEt1em5ldHNvdiA8dmt1em5ldHNAcmVkaGF0LmNv bT4KLS0tCiBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9oeXBlcnZpc29yLmggfCAgIDMgKy0KIGFyY2gv eDg2L2tlcm5lbC9jcHUvaHlwZXJ2aXNvci5jICB8ICAgNyArLQogYXJjaC94ODYva2VybmVsL3By b2Nlc3NfNjQuYyAgICAgIHwgICAyICstCiBhcmNoL3g4Ni94ZW4vS2NvbmZpZyAgICAgICAgICAg ICAgfCAgMjUgKystCiBhcmNoL3g4Ni94ZW4vTWFrZWZpbGUgICAgICAgICAgICAgfCAgIDcgKy0K IGFyY2gveDg2L3hlbi9lbmxpZ2h0ZW4uYyAgICAgICAgICB8IDM4OCArKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogYXJjaC94ODYveGVuL2VubGlnaHRlbl9jb21tb24uYyAg IHwgMjE2ICsrKysrKysrKysrKysrKysrKysrKwogYXJjaC94ODYveGVuL2VubGlnaHRlbl9odm0u YyAgICAgIHwgMjAyICsrKysrKysrKysrKysrKysrKysrCiBhcmNoL3g4Ni94ZW4vbW11LmMgICAg ICAgICAgICAgICAgfCAgIDIgKwogYXJjaC94ODYveGVuL3NtcC5jICAgICAgICAgICAgICAgIHwg IDQwICsrLS0KIGFyY2gveDg2L3hlbi9zdXNwZW5kLmMgICAgICAgICAgICB8ICAgNCArCiBhcmNo L3g4Ni94ZW4veGVuLWhlYWQuUyAgICAgICAgICAgfCAgIDQgKwogYXJjaC94ODYveGVuL3hlbi1v cHMuaCAgICAgICAgICAgIHwgICAyICsKIGluY2x1ZGUveGVuL3hlbi1vcHMuaCAgICAgICAgICAg ICB8ICAgNyArCiAxNCBmaWxlcyBjaGFuZ2VkLCA1MTAgaW5zZXJ0aW9ucygrKSwgMzk5IGRlbGV0 aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGFyY2gveDg2L3hlbi9lbmxpZ2h0ZW5fY29tbW9u LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBhcmNoL3g4Ni94ZW4vZW5saWdodGVuX2h2bS5jCgpkaWZm IC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaHlwZXJ2aXNvci5oIGIvYXJjaC94ODYvaW5j bHVkZS9hc20vaHlwZXJ2aXNvci5oCmluZGV4IDY3OTQyYjYuLjRmYWExMmQgMTAwNjQ0Ci0tLSBh L2FyY2gveDg2L2luY2x1ZGUvYXNtL2h5cGVydmlzb3IuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRl L2FzbS9oeXBlcnZpc29yLmgKQEAgLTUzLDcgKzUzLDggQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBo eXBlcnZpc29yX3g4NiAqeDg2X2h5cGVyOwogLyogUmVjb2duaXplZCBoeXBlcnZpc29ycyAqLwog ZXh0ZXJuIGNvbnN0IHN0cnVjdCBoeXBlcnZpc29yX3g4NiB4ODZfaHlwZXJfdm13YXJlOwogZXh0 ZXJuIGNvbnN0IHN0cnVjdCBoeXBlcnZpc29yX3g4NiB4ODZfaHlwZXJfbXNfaHlwZXJ2OwotZXh0 ZXJuIGNvbnN0IHN0cnVjdCBoeXBlcnZpc29yX3g4NiB4ODZfaHlwZXJfeGVuOworZXh0ZXJuIGNv bnN0IHN0cnVjdCBoeXBlcnZpc29yX3g4NiB4ODZfaHlwZXJfeGVuX3B2OworZXh0ZXJuIGNvbnN0 IHN0cnVjdCBoeXBlcnZpc29yX3g4NiB4ODZfaHlwZXJfeGVuX3B2aHZtOwogZXh0ZXJuIGNvbnN0 IHN0cnVjdCBoeXBlcnZpc29yX3g4NiB4ODZfaHlwZXJfa3ZtOwogCiBleHRlcm4gdm9pZCBpbml0 X2h5cGVydmlzb3Ioc3RydWN0IGNwdWluZm9feDg2ICpjKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2 L2tlcm5lbC9jcHUvaHlwZXJ2aXNvci5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9oeXBlcnZpc29y LmMKaW5kZXggMzU2OTFhNi4uZGQ2OGIwMyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2Nw dS9oeXBlcnZpc29yLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9oeXBlcnZpc29yLmMKQEAg LTI4LDggKzI4LDExIEBACiAKIHN0YXRpYyBjb25zdCBfX2luaXRjb25zdCBzdHJ1Y3QgaHlwZXJ2 aXNvcl94ODYgKiBjb25zdCBoeXBlcnZpc29yc1tdID0KIHsKLSNpZmRlZiBDT05GSUdfWEVOCi0J Jng4Nl9oeXBlcl94ZW4sCisjaWZkZWYgQ09ORklHX1hFTl9QVgorCSZ4ODZfaHlwZXJfeGVuX3B2 LAorI2VuZGlmCisjaWZkZWYgQ09ORklHX1hFTl9QVkhWTQorCSZ4ODZfaHlwZXJfeGVuX3B2aHZt LAogI2VuZGlmCiAJJng4Nl9oeXBlcl92bXdhcmUsCiAJJng4Nl9oeXBlcl9tc19oeXBlcnYsCmRp ZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc182NC5jIGIvYXJjaC94ODYva2VybmVs L3Byb2Nlc3NfNjQuYwppbmRleCBiMzc2MGIzLi40ZTkxYTAyIDEwMDY0NAotLS0gYS9hcmNoL3g4 Ni9rZXJuZWwvcHJvY2Vzc182NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzY0LmMK QEAgLTQzNCw3ICs0MzQsNyBAQCBfX3N3aXRjaF90byhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXZf cCwgc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0X3ApCiAJCSAgICAgdGFza190aHJlYWRfaW5mbyhw cmV2X3ApLT5mbGFncyAmIF9USUZfV09SS19DVFhTV19QUkVWKSkKIAkJX19zd2l0Y2hfdG9feHRy YShwcmV2X3AsIG5leHRfcCwgdHNzKTsKIAotI2lmZGVmIENPTkZJR19YRU4KKyNpZmRlZiBDT05G SUdfWEVOX1BWCiAJLyoKIAkgKiBPbiBYZW4gUFYsIElPUEwgYml0cyBpbiBwdF9yZWdzLT5mbGFn cyBoYXZlIG5vIGVmZmVjdCwgYW5kCiAJICogY3VycmVudF9wdF9yZWdzKCktPmZsYWdzIG1heSBu b3QgbWF0Y2ggdGhlIGN1cnJlbnQgdGFzaydzCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni94ZW4vS2Nv bmZpZyBiL2FyY2gveDg2L3hlbi9LY29uZmlnCmluZGV4IGM3YjE1ZjMuLjgyOTgzNzggMTAwNjQ0 Ci0tLSBhL2FyY2gveDg2L3hlbi9LY29uZmlnCisrKyBiL2FyY2gveDg2L3hlbi9LY29uZmlnCkBA IC02LDcgKzYsNiBAQCBjb25maWcgWEVOCiAJYm9vbCAiWGVuIGd1ZXN0IHN1cHBvcnQiCiAJZGVw ZW5kcyBvbiBQQVJBVklSVAogCXNlbGVjdCBQQVJBVklSVF9DTE9DSwotCXNlbGVjdCBYRU5fSEFW RV9QVk1NVQogCXNlbGVjdCBYRU5fSEFWRV9WUE1VCiAJZGVwZW5kcyBvbiBYODZfNjQgfHwgKFg4 Nl8zMiAmJiBYODZfUEFFKQogCWRlcGVuZHMgb24gWDg2X0xPQ0FMX0FQSUMgJiYgWDg2X1RTQwpA QCAtMTUsMTggKzE0LDMyIEBAIGNvbmZpZyBYRU4KIAkgIGtlcm5lbCB0byBib290IGluIGEgcGFy YXZpcnR1YWxpemVkIGVudmlyb25tZW50IHVuZGVyIHRoZQogCSAgWGVuIGh5cGVydmlzb3IuCiAK K2NvbmZpZyBYRU5fUFYKKwlib29sICJYZW4gUFYgZ3Vlc3Qgc3VwcG9ydCIKKwlkZWZhdWx0IHkK KwlkZXBlbmRzIG9uIFhFTgorCWhlbHAKKwkgIFN1cHBvcnQgcnVubmluZyBhcyBhIFhlbiBQViBn dWVzdC4KKwogY29uZmlnIFhFTl9ET00wCi0JZGVmX2Jvb2wgeQotCWRlcGVuZHMgb24gWEVOICYm IFBDSV9YRU4gJiYgU1dJT1RMQl9YRU4KKwlib29sICJYZW4gUFYgRG9tMCBzdXBwb3J0IgorCWRl ZmF1bHQgeQorCWRlcGVuZHMgb24gWEVOX1BWICYmIFBDSV9YRU4gJiYgU1dJT1RMQl9YRU4KIAlk ZXBlbmRzIG9uIFg4Nl9JT19BUElDICYmIEFDUEkgJiYgUENJCisJc2VsZWN0IFhFTl9IQVZFX1BW TU1VCisJaGVscAorCSAgU3VwcG9ydCBydW5uaW5nIGFzIGEgWGVuIFBWIERvbTAgZ3Vlc3QuCiAK IGNvbmZpZyBYRU5fUFZIVk0KLQlkZWZfYm9vbCB5CisJYm9vbCAiWGVuIFBWSFZNIGd1ZXN0IHN1 cHBvcnQiCisJZGVmYXVsdCB5CiAJZGVwZW5kcyBvbiBYRU4gJiYgUENJICYmIFg4Nl9MT0NBTF9B UElDCisJaGVscAorCSAgU3VwcG9ydCBydW5uaW5nIGFzIGEgWGVuIFBWSFZNIGd1ZXN0LgogCiBj b25maWcgWEVOXzUxMkdCCiAJYm9vbCAiTGltaXQgWGVuIHB2LWRvbWFpbiBtZW1vcnkgdG8gNTEy R0IiCi0JZGVwZW5kcyBvbiBYRU4gJiYgWDg2XzY0CisJZGVwZW5kcyBvbiBYRU5fUFYgJiYgWDg2 XzY0CiAJZGVmYXVsdCB5CiAJaGVscAogCSAgTGltaXQgcGFyYXZpcnR1YWxpemVkIHVzZXIgZG9t YWlucyB0byA1MTJHQiBvZiBSQU0uCkBAIC01Myw1ICs2Niw1IEBAIGNvbmZpZyBYRU5fREVCVUdf RlMKIAogY29uZmlnIFhFTl9QVkgKIAlib29sICJTdXBwb3J0IGZvciBydW5uaW5nIGFzIGEgUFZI IGd1ZXN0IgotCWRlcGVuZHMgb24gWDg2XzY0ICYmIFhFTiAmJiBYRU5fUFZIVk0KKwlkZXBlbmRz IG9uIFg4Nl82NCAmJiBYRU5fUFYgJiYgWEVOX1BWSFZNCiAJZGVmX2Jvb2wgbgpkaWZmIC0tZ2l0 IGEvYXJjaC94ODYveGVuL01ha2VmaWxlIGIvYXJjaC94ODYveGVuL01ha2VmaWxlCmluZGV4IGU0 N2U1MjcuLmU2MGZjOTMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3hlbi9NYWtlZmlsZQorKysgYi9h cmNoL3g4Ni94ZW4vTWFrZWZpbGUKQEAgLTEwLDExICsxMCwxNCBAQCBub3N0YWNrcCA6PSAkKGNh bGwgY2Mtb3B0aW9uLCAtZm5vLXN0YWNrLXByb3RlY3RvcikKIENGTEFHU19lbmxpZ2h0ZW4ubwkJ Oj0gJChub3N0YWNrcCkKIENGTEFHU19tbXUubwkJCTo9ICQobm9zdGFja3ApCiAKLW9iai15CQk6 PSBlbmxpZ2h0ZW4ubyBzZXR1cC5vIG11bHRpY2FsbHMubyBtbXUubyBpcnEubyBcCi0JCQl0aW1l Lm8geGVuLWFzbS5vIHhlbi1hc21fJChCSVRTKS5vIFwKK29iai15CQk6PSBlbmxpZ2h0ZW5fY29t bW9uLm8gc2V0dXAubyBtdWx0aWNhbGxzLm8gXAorCQkJbW11Lm8gaXJxLm8gdGltZS5vIHhlbi1h c20ubyB4ZW4tYXNtXyQoQklUUykubyBcCiAJCQlncmFudC10YWJsZS5vIHN1c3BlbmQubyBwbGF0 Zm9ybS1wY2ktdW5wbHVnLm8gXAogCQkJcDJtLm8gYXBpYy5vIHBtdS5vCiAKK29iai0kKENPTkZJ R19YRU5fUFYpCQkrPSBlbmxpZ2h0ZW4ubworb2JqLSQoQ09ORklHX1hFTl9QVkhWTSkJCSs9IGVu bGlnaHRlbl9odm0ubworCiBvYmotJChDT05GSUdfRVZFTlRfVFJBQ0lORykgKz0gdHJhY2Uubwog CiBvYmotJChDT05GSUdfU01QKQkJKz0gc21wLm8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi9l bmxpZ2h0ZW4uYyBiL2FyY2gveDg2L3hlbi9lbmxpZ2h0ZW4uYwppbmRleCBiZGQ4NTU2Li4wODZj MzM5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94ZW4vZW5saWdodGVuLmMKKysrIGIvYXJjaC94ODYv eGVuL2VubGlnaHRlbi5jCkBAIC05MCw3OCArOTAsMTMgQEAKICNpbmNsdWRlICJtdWx0aWNhbGxz LmgiCiAjaW5jbHVkZSAicG11LmgiCiAKLUVYUE9SVF9TWU1CT0xfR1BMKGh5cGVyY2FsbF9wYWdl KTsKLQotLyoKLSAqIFBvaW50ZXIgdG8gdGhlIHhlbl92Y3B1X2luZm8gc3RydWN0dXJlIG9yCi0g KiAmSFlQRVJWSVNPUl9zaGFyZWRfaW5mby0+dmNwdV9pbmZvW2NwdV0uIFNlZSB4ZW5faHZtX2lu aXRfc2hhcmVkX2luZm8KLSAqIGFuZCB4ZW5fdmNwdV9zZXR1cCBmb3IgZGV0YWlscy4gQnkgZGVm YXVsdCBpdCBwb2ludHMgdG8gc2hhcmVfaW5mby0+dmNwdV9pbmZvCi0gKiBidXQgaWYgdGhlIGh5 cGVydmlzb3Igc3VwcG9ydHMgVkNQVU9QX3JlZ2lzdGVyX3ZjcHVfaW5mbyB0aGVuIGl0IGNhbiBw b2ludAotICogdG8geGVuX3ZjcHVfaW5mby4gVGhlIHBvaW50ZXIgaXMgdXNlZCBpbiBfX3hlbl9l dnRjaG5fZG9fdXBjYWxsIHRvCi0gKiBhY2tub3dsZWRnZSBwZW5kaW5nIGV2ZW50cy4KLSAqIEFs c28gbW9yZSBzdWJ0bHkgaXQgaXMgdXNlZCBieSB0aGUgcGF0Y2hlZCB2ZXJzaW9uIG9mIGlycSBl bmFibGUvZGlzYWJsZQotICogZS5nLiB4ZW5faXJxX2VuYWJsZV9kaXJlY3QgYW5kIHhlbl9pcmV0 IGluIFBWIG1vZGUuCi0gKgotICogVGhlIGRlc2lyZSB0byBiZSBhYmxlIHRvIGRvIHRob3NlIG1h c2svdW5tYXNrIG9wZXJhdGlvbnMgYXMgYSBzaW5nbGUKLSAqIGluc3RydWN0aW9uIGJ5IHVzaW5n IHRoZSBwZXItY3B1IG9mZnNldCBoZWxkIGluICVncyBpcyB0aGUgcmVhbCByZWFzb24KLSAqIHZj cHUgaW5mbyBpcyBpbiBhIHBlci1jcHUgcG9pbnRlciBhbmQgdGhlIG9yaWdpbmFsIHJlYXNvbiBm b3IgdGhpcwotICogaHlwZXJjYWxsLgotICoKLSAqLwotREVGSU5FX1BFUl9DUFUoc3RydWN0IHZj cHVfaW5mbyAqLCB4ZW5fdmNwdSk7Ci0KLS8qCi0gKiBQZXIgQ1BVIHBhZ2VzIHVzZWQgaWYgaHlw ZXJ2aXNvciBzdXBwb3J0cyBWQ1BVT1BfcmVnaXN0ZXJfdmNwdV9pbmZvCi0gKiBoeXBlcmNhbGwu IFRoaXMgY2FuIGJlIHVzZWQgYm90aCBpbiBQViBhbmQgUFZIVk0gbW9kZS4gVGhlIHN0cnVjdHVy ZQotICogb3ZlcnJpZGVzIHRoZSBkZWZhdWx0IHBlcl9jcHUoeGVuX3ZjcHUsIGNwdSkgdmFsdWUu Ci0gKi8KLURFRklORV9QRVJfQ1BVKHN0cnVjdCB2Y3B1X2luZm8sIHhlbl92Y3B1X2luZm8pOwot Ci0vKiBMaW51eCA8LT4gWGVuIHZDUFUgaWQgbWFwcGluZyAqLwotREVGSU5FX1BFUl9DUFUodWlu dDMyX3QsIHhlbl92Y3B1X2lkKTsKLUVYUE9SVF9QRVJfQ1BVX1NZTUJPTCh4ZW5fdmNwdV9pZCk7 Ci0KLWVudW0geGVuX2RvbWFpbl90eXBlIHhlbl9kb21haW5fdHlwZSA9IFhFTl9OQVRJVkU7Ci1F WFBPUlRfU1lNQk9MX0dQTCh4ZW5fZG9tYWluX3R5cGUpOwotCi11bnNpZ25lZCBsb25nICptYWNo aW5lX3RvX3BoeXNfbWFwcGluZyA9ICh2b2lkICopTUFDSDJQSFlTX1ZJUlRfU1RBUlQ7Ci1FWFBP UlRfU1lNQk9MKG1hY2hpbmVfdG9fcGh5c19tYXBwaW5nKTsKLXVuc2lnbmVkIGxvbmcgIG1hY2hp bmVfdG9fcGh5c19ucjsKLUVYUE9SVF9TWU1CT0wobWFjaGluZV90b19waHlzX25yKTsKLQotc3Ry dWN0IHN0YXJ0X2luZm8gKnhlbl9zdGFydF9pbmZvOwotRVhQT1JUX1NZTUJPTF9HUEwoeGVuX3N0 YXJ0X2luZm8pOwotCi1zdHJ1Y3Qgc2hhcmVkX2luZm8geGVuX2R1bW15X3NoYXJlZF9pbmZvOwog CiB2b2lkICp4ZW5faW5pdGlhbF9nZHQ7CiAKIFJFU0VSVkVfQlJLKHNoYXJlZF9pbmZvX3BhZ2Vf YnJrLCBQQUdFX1NJWkUpOwogCi1zdGF0aWMgaW50IHhlbl9jcHVfdXBfcHJlcGFyZSh1bnNpZ25l ZCBpbnQgY3B1KTsKLXN0YXRpYyBpbnQgeGVuX2NwdV91cF9vbmxpbmUodW5zaWduZWQgaW50IGNw dSk7Ci1zdGF0aWMgaW50IHhlbl9jcHVfZGVhZCh1bnNpZ25lZCBpbnQgY3B1KTsKLQotLyoKLSAq IFBvaW50IGF0IHNvbWUgZW1wdHkgbWVtb3J5IHRvIHN0YXJ0IHdpdGguIFdlIG1hcCB0aGUgcmVh bCBzaGFyZWRfaW5mbwotICogcGFnZSBhcyBzb29uIGFzIGZpeG1hcCBpcyB1cCBhbmQgcnVubmlu Zy4KLSAqLwotc3RydWN0IHNoYXJlZF9pbmZvICpIWVBFUlZJU09SX3NoYXJlZF9pbmZvID0gJnhl bl9kdW1teV9zaGFyZWRfaW5mbzsKLQotLyoKLSAqIEZsYWcgdG8gZGV0ZXJtaW5lIHdoZXRoZXIg dmNwdSBpbmZvIHBsYWNlbWVudCBpcyBhdmFpbGFibGUgb24gYWxsCi0gKiBWQ1BVcy4gIFdlIGFz c3VtZSBpdCBpcyB0byBzdGFydCB3aXRoLCBhbmQgdGhlbiBzZXQgaXQgdG8gemVybyBvbgotICog dGhlIGZpcnN0IGZhaWx1cmUuICBUaGlzIGlzIGJlY2F1c2UgaXQgY2FuIHN1Y2NlZWQgb24gc29t ZSBWQ1BVcwotICogYW5kIG5vdCBvdGhlcnMsIHNpbmNlIGl0IGNhbiBpbnZvbHZlIGh5cGVydmlz b3IgbWVtb3J5IGFsbG9jYXRpb24sCi0gKiBvciBiZWNhdXNlIHRoZSBndWVzdCBmYWlsZWQgdG8g Z3VhcmFudGVlIGFsbCB0aGUgYXBwcm9wcmlhdGUKLSAqIGNvbnN0cmFpbnRzIG9uIGFsbCBWQ1BV cyAoaWUgYnVmZmVyIGNhbid0IGNyb3NzIGEgcGFnZSBib3VuZGFyeSkuCi0gKgotICogTm90ZSB0 aGF0IGFueSBwYXJ0aWN1bGFyIENQVSBtYXkgYmUgdXNpbmcgYSBwbGFjZWQgdmNwdSBzdHJ1Y3R1 cmUsCi0gKiBidXQgd2UgY2FuIG9ubHkgb3B0aW1pc2UgaWYgdGhlIGFsbCBhcmUuCi0gKgotICog MDogbm90IGF2YWlsYWJsZSwgMTogYXZhaWxhYmxlCi0gKi8KLXN0YXRpYyBpbnQgaGF2ZV92Y3B1 X2luZm9fcGxhY2VtZW50ID0gMTsKK3N0YXRpYyBpbnQgeGVuX2NwdV91cF9wcmVwYXJlX3B2KHVu c2lnbmVkIGludCBjcHUpOworc3RhdGljIGludCB4ZW5fY3B1X2RlYWRfcHYodW5zaWduZWQgaW50 IGNwdSk7CiAKIHN0cnVjdCB0bHNfZGVzY3MgewogCXN0cnVjdCBkZXNjX3N0cnVjdCBkZXNjWzNd OwpAQCAtMTc2LDczICsxMTEsNiBAQCBzdHJ1Y3QgdGxzX2Rlc2NzIHsKICAqLwogc3RhdGljIERF RklORV9QRVJfQ1BVKHN0cnVjdCB0bHNfZGVzY3MsIHNoYWRvd190bHNfZGVzYyk7CiAKLXN0YXRp YyB2b2lkIGNsYW1wX21heF9jcHVzKHZvaWQpCi17Ci0jaWZkZWYgQ09ORklHX1NNUAotCWlmIChz ZXR1cF9tYXhfY3B1cyA+IE1BWF9WSVJUX0NQVVMpCi0JCXNldHVwX21heF9jcHVzID0gTUFYX1ZJ UlRfQ1BVUzsKLSNlbmRpZgotfQotCi12b2lkIHhlbl92Y3B1X3NldHVwKGludCBjcHUpCi17Ci0J c3RydWN0IHZjcHVfcmVnaXN0ZXJfdmNwdV9pbmZvIGluZm87Ci0JaW50IGVycjsKLQlzdHJ1Y3Qg dmNwdV9pbmZvICp2Y3B1cDsKLQotCUJVR19PTihIWVBFUlZJU09SX3NoYXJlZF9pbmZvID09ICZ4 ZW5fZHVtbXlfc2hhcmVkX2luZm8pOwotCi0JLyoKLQkgKiBUaGlzIHBhdGggaXMgY2FsbGVkIHR3 aWNlIG9uIFBWSFZNIC0gZmlyc3QgZHVyaW5nIGJvb3R1cCB2aWEKLQkgKiBzbXBfaW5pdCAtPiB4 ZW5faHZtX2NwdV9ub3RpZnksIGFuZCB0aGVuIGlmIHRoZSBWQ1BVIGlzIGJlaW5nCi0JICogaG90 cGx1Z2dlZDogY3B1X3VwIC0+IHhlbl9odm1fY3B1X25vdGlmeS4KLQkgKiBBcyB3ZSBjYW4gb25s eSBkbyB0aGUgVkNQVU9QX3JlZ2lzdGVyX3ZjcHVfaW5mbyBvbmNlIGxldHMKLQkgKiBub3Qgb3Zl ci13cml0ZSBpdHMgcmVzdWx0LgotCSAqCi0JICogRm9yIFBWIGl0IGlzIGNhbGxlZCBkdXJpbmcg cmVzdG9yZSAoeGVuX3ZjcHVfcmVzdG9yZSkgYW5kIGJvb3R1cAotCSAqICh4ZW5fc2V0dXBfdmNw dV9pbmZvX3BsYWNlbWVudCkuIFRoZSBob3RwbHVnIG1lY2hhbmlzbSBkb2VzIG5vdAotCSAqIHVz ZSB0aGlzIGZ1bmN0aW9uLgotCSAqLwotCWlmICh4ZW5faHZtX2RvbWFpbigpKSB7Ci0JCWlmIChw ZXJfY3B1KHhlbl92Y3B1LCBjcHUpID09ICZwZXJfY3B1KHhlbl92Y3B1X2luZm8sIGNwdSkpCi0J CQlyZXR1cm47Ci0JfQotCWlmICh4ZW5fdmNwdV9ucihjcHUpIDwgTUFYX1ZJUlRfQ1BVUykKLQkJ cGVyX2NwdSh4ZW5fdmNwdSwgY3B1KSA9Ci0JCQkmSFlQRVJWSVNPUl9zaGFyZWRfaW5mby0+dmNw dV9pbmZvW3hlbl92Y3B1X25yKGNwdSldOwotCi0JaWYgKCFoYXZlX3ZjcHVfaW5mb19wbGFjZW1l bnQpIHsKLQkJaWYgKGNwdSA+PSBNQVhfVklSVF9DUFVTKQotCQkJY2xhbXBfbWF4X2NwdXMoKTsK LQkJcmV0dXJuOwotCX0KLQotCXZjcHVwID0gJnBlcl9jcHUoeGVuX3ZjcHVfaW5mbywgY3B1KTsK LQlpbmZvLm1mbiA9IGFyYml0cmFyeV92aXJ0X3RvX21mbih2Y3B1cCk7Ci0JaW5mby5vZmZzZXQg PSBvZmZzZXRfaW5fcGFnZSh2Y3B1cCk7Ci0KLQkvKiBDaGVjayB0byBzZWUgaWYgdGhlIGh5cGVy dmlzb3Igd2lsbCBwdXQgdGhlIHZjcHVfaW5mbwotCSAgIHN0cnVjdHVyZSB3aGVyZSB3ZSB3YW50 IGl0LCB3aGljaCBhbGxvd3MgZGlyZWN0IGFjY2VzcyB2aWEKLQkgICBhIHBlcmNwdS12YXJpYWJs ZS4KLQkgICBOLkIuIFRoaXMgaHlwZXJjYWxsIGNhbiBfb25seV8gYmUgY2FsbGVkIG9uY2UgcGVy IENQVS4gU3Vic2VxdWVudAotCSAgIGNhbGxzIHdpbGwgZXJyb3Igb3V0IHdpdGggLUVJTlZBTC4g VGhpcyBpcyBkdWUgdG8gdGhlIGZhY3QgdGhhdAotCSAgIGh5cGVydmlzb3IgaGFzIG5vIHVucmVn aXN0ZXIgdmFyaWFudCBhbmQgdGhpcyBoeXBlcmNhbGwgZG9lcyBub3QKLQkgICBhbGxvdyB0byBv dmVyLXdyaXRlIGluZm8ubWZuIGFuZCBpbmZvLm9mZnNldC4KLQkgKi8KLQllcnIgPSBIWVBFUlZJ U09SX3ZjcHVfb3AoVkNQVU9QX3JlZ2lzdGVyX3ZjcHVfaW5mbywgeGVuX3ZjcHVfbnIoY3B1KSwK LQkJCQkgJmluZm8pOwotCi0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9ERUJVRyAicmVnaXN0 ZXJfdmNwdV9pbmZvIGZhaWxlZDogZXJyPSVkXG4iLCBlcnIpOwotCQloYXZlX3ZjcHVfaW5mb19w bGFjZW1lbnQgPSAwOwotCQljbGFtcF9tYXhfY3B1cygpOwotCX0gZWxzZSB7Ci0JCS8qIFRoaXMg Y3B1IGlzIHVzaW5nIHRoZSByZWdpc3RlcmVkIHZjcHUgaW5mbywgZXZlbiBpZgotCQkgICBsYXRl ciBvbmVzIGZhaWwgdG8uICovCi0JCXBlcl9jcHUoeGVuX3ZjcHUsIGNwdSkgPSB2Y3B1cDsKLQl9 Ci19Ci0KIC8qCiAgKiBPbiByZXN0b3JlLCBzZXQgdGhlIHZjcHUgcGxhY2VtZW50IHVwIGFnYWlu LgogICogSWYgaXQgZmFpbHMsIHRoZW4gd2UncmUgaW4gYSBiYWQgc3RhdGUsIHNpbmNlCkBAIC0x MjkxLDE4ICsxMTU5LDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBwdl9jcHVfb3BzIHhlbl9jcHVf b3BzIF9faW5pdGNvbnN0ID0gewogCS5lbmRfY29udGV4dF9zd2l0Y2ggPSB4ZW5fZW5kX2NvbnRl eHRfc3dpdGNoLAogfTsKIAotc3RhdGljIHZvaWQgeGVuX3JlYm9vdChpbnQgcmVhc29uKQotewot CXN0cnVjdCBzY2hlZF9zaHV0ZG93biByID0geyAucmVhc29uID0gcmVhc29uIH07Ci0JaW50IGNw dTsKLQotCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KQotCQl4ZW5fcG11X2ZpbmlzaChjcHUpOwot Ci0JaWYgKEhZUEVSVklTT1Jfc2NoZWRfb3AoU0NIRURPUF9zaHV0ZG93biwgJnIpKQotCQlCVUco KTsKLX0KLQogc3RhdGljIHZvaWQgeGVuX3Jlc3RhcnQoY2hhciAqbXNnKQogewogCXhlbl9yZWJv b3QoU0hVVERPV05fcmVib290KTsKQEAgLTEzMzAsMjUgKzExODYsNiBAQCBzdGF0aWMgdm9pZCB4 ZW5fY3Jhc2hfc2h1dGRvd24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiAJeGVuX3JlYm9vdChTSFVU RE9XTl9jcmFzaCk7CiB9CiAKLXN0YXRpYyBpbnQKLXhlbl9wYW5pY19ldmVudChzdHJ1Y3Qgbm90 aWZpZXJfYmxvY2sgKnRoaXMsIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKnB0cikKLXsKLQlp ZiAoIWtleGVjX2NyYXNoX2xvYWRlZCgpKQotCQl4ZW5fcmVib290KFNIVVRET1dOX2NyYXNoKTsK LQlyZXR1cm4gTk9USUZZX0RPTkU7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sg eGVuX3BhbmljX2Jsb2NrID0gewotCS5ub3RpZmllcl9jYWxsPSB4ZW5fcGFuaWNfZXZlbnQsCi0J LnByaW9yaXR5ID0gSU5UX01JTgotfTsKLQotaW50IHhlbl9wYW5pY19oYW5kbGVyX2luaXQodm9p ZCkKLXsKLQlhdG9taWNfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJnBhbmljX25vdGlmaWVyX2xp c3QsICZ4ZW5fcGFuaWNfYmxvY2spOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgY29uc3Qgc3Ry dWN0IG1hY2hpbmVfb3BzIHhlbl9tYWNoaW5lX29wcyBfX2luaXRjb25zdCA9IHsKIAkucmVzdGFy dCA9IHhlbl9yZXN0YXJ0LAogCS5oYWx0ID0geGVuX21hY2hpbmVfaGFsdCwKQEAgLTE1MzcsMjQg KzEzNzQsNiBAQCBzdGF0aWMgdm9pZCBfX2luaXQgeGVuX2RvbTBfc2V0X2xlZ2FjeV9mZWF0dXJl cyh2b2lkKQogCXg4Nl9wbGF0Zm9ybS5sZWdhY3kucnRjID0gMTsKIH0KIAotc3RhdGljIGludCB4 ZW5fY3B1aHBfc2V0dXAodm9pZCkKLXsKLQlpbnQgcmM7Ci0KLQlyYyA9IGNwdWhwX3NldHVwX3N0 YXRlX25vY2FsbHMoQ1BVSFBfWEVOX1BSRVBBUkUsCi0JCQkJICAgICAgICJYRU5fSFZNX0dVRVNU X1BSRVBBUkUiLAotCQkJCSAgICAgICB4ZW5fY3B1X3VwX3ByZXBhcmUsIHhlbl9jcHVfZGVhZCk7 Ci0JaWYgKHJjID49IDApIHsKLQkJcmMgPSBjcHVocF9zZXR1cF9zdGF0ZV9ub2NhbGxzKENQVUhQ X0FQX09OTElORV9EWU4sCi0JCQkJCSAgICAgICAiWEVOX0hWTV9HVUVTVF9PTkxJTkUiLAotCQkJ CQkgICAgICAgeGVuX2NwdV91cF9vbmxpbmUsIE5VTEwpOwotCQlpZiAocmMgPCAwKQotCQkJY3B1 aHBfcmVtb3ZlX3N0YXRlX25vY2FsbHMoQ1BVSFBfWEVOX1BSRVBBUkUpOwotCX0KLQotCXJldHVy biByYyA+PSAwID8gMCA6IHJjOwotfQotCiAvKiBGaXJzdCBDIGZ1bmN0aW9uIHRvIGJlIGNhbGxl ZCBvbiBYZW4gYm9vdCAqLwogYXNtbGlua2FnZSBfX3Zpc2libGUgdm9pZCBfX2luaXQgeGVuX3N0 YXJ0X2tlcm5lbCh2b2lkKQogewpAQCAtMTY1Niw3ICsxNDc1LDcgQEAgYXNtbGlua2FnZSBfX3Zp c2libGUgdm9pZCBfX2luaXQgeGVuX3N0YXJ0X2tlcm5lbCh2b2lkKQogCSAgIHBvc3NpYmxlIG1h cCBhbmQgYSBub24tZHVtbXkgc2hhcmVkX2luZm8uICovCiAJcGVyX2NwdSh4ZW5fdmNwdSwgMCkg PSAmSFlQRVJWSVNPUl9zaGFyZWRfaW5mby0+dmNwdV9pbmZvWzBdOwogCi0JV0FSTl9PTih4ZW5f Y3B1aHBfc2V0dXAoKSk7CisJV0FSTl9PTih4ZW5fY3B1aHBfc2V0dXAoeGVuX2NwdV91cF9wcmVw YXJlX3B2LCB4ZW5fY3B1X2RlYWRfcHYpKTsKIAogCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAJZWFy bHlfYm9vdF9pcnFzX2Rpc2FibGVkID0gdHJ1ZTsKQEAgLTE3NzEsOTUgKzE1OTAsMTAgQEAgYXNt bGlua2FnZSBfX3Zpc2libGUgdm9pZCBfX2luaXQgeGVuX3N0YXJ0X2tlcm5lbCh2b2lkKQogI2Vu ZGlmCiB9CiAKLXZvaWQgX19yZWYgeGVuX2h2bV9pbml0X3NoYXJlZF9pbmZvKHZvaWQpCi17Ci0J aW50IGNwdTsKLQlzdHJ1Y3QgeGVuX2FkZF90b19waHlzbWFwIHhhdHA7Ci0Jc3RhdGljIHN0cnVj dCBzaGFyZWRfaW5mbyAqc2hhcmVkX2luZm9fcGFnZSA9IDA7Ci0KLQlpZiAoIXNoYXJlZF9pbmZv X3BhZ2UpCi0JCXNoYXJlZF9pbmZvX3BhZ2UgPSAoc3RydWN0IHNoYXJlZF9pbmZvICopCi0JCQll eHRlbmRfYnJrKFBBR0VfU0laRSwgUEFHRV9TSVpFKTsKLQl4YXRwLmRvbWlkID0gRE9NSURfU0VM RjsKLQl4YXRwLmlkeCA9IDA7Ci0JeGF0cC5zcGFjZSA9IFhFTk1BUFNQQUNFX3NoYXJlZF9pbmZv OwotCXhhdHAuZ3BmbiA9IF9fcGEoc2hhcmVkX2luZm9fcGFnZSkgPj4gUEFHRV9TSElGVDsKLQlp ZiAoSFlQRVJWSVNPUl9tZW1vcnlfb3AoWEVOTUVNX2FkZF90b19waHlzbWFwLCAmeGF0cCkpCi0J CUJVRygpOwotCi0JSFlQRVJWSVNPUl9zaGFyZWRfaW5mbyA9IChzdHJ1Y3Qgc2hhcmVkX2luZm8g KilzaGFyZWRfaW5mb19wYWdlOwotCi0JLyogeGVuX3ZjcHUgaXMgYSBwb2ludGVyIHRvIHRoZSB2 Y3B1X2luZm8gc3RydWN0IGluIHRoZSBzaGFyZWRfaW5mbwotCSAqIHBhZ2UsIHdlIHVzZSBpdCBp biB0aGUgZXZlbnQgY2hhbm5lbCB1cGNhbGwgYW5kIGluIHNvbWUgcHZjbG9jawotCSAqIHJlbGF0 ZWQgZnVuY3Rpb25zLiBXZSBkb24ndCBuZWVkIHRoZSB2Y3B1X2luZm8gcGxhY2VtZW50Ci0JICog b3B0aW1pemF0aW9ucyBiZWNhdXNlIHdlIGRvbid0IHVzZSBhbnkgcHZfbW11IG9yIHB2X2lycSBv cCBvbgotCSAqIEhWTS4KLQkgKiBXaGVuIHhlbl9odm1faW5pdF9zaGFyZWRfaW5mbyBpcyBydW4g YXQgYm9vdCB0aW1lIG9ubHkgdmNwdSAwIGlzCi0JICogb25saW5lIGJ1dCB4ZW5faHZtX2luaXRf c2hhcmVkX2luZm8gaXMgcnVuIGF0IHJlc3VtZSB0aW1lIHRvbyBhbmQKLQkgKiBpbiB0aGF0IGNh c2UgbXVsdGlwbGUgdmNwdXMgbWlnaHQgYmUgb25saW5lLiAqLwotCWZvcl9lYWNoX29ubGluZV9j cHUoY3B1KSB7Ci0JCS8qIExlYXZlIGl0IHRvIGJlIE5VTEwuICovCi0JCWlmICh4ZW5fdmNwdV9u cihjcHUpID49IE1BWF9WSVJUX0NQVVMpCi0JCQljb250aW51ZTsKLQkJcGVyX2NwdSh4ZW5fdmNw dSwgY3B1KSA9Ci0JCQkmSFlQRVJWSVNPUl9zaGFyZWRfaW5mby0+dmNwdV9pbmZvW3hlbl92Y3B1 X25yKGNwdSldOwotCX0KLX0KLQotI2lmZGVmIENPTkZJR19YRU5fUFZIVk0KLXN0YXRpYyB2b2lk IF9faW5pdCBpbml0X2h2bV9wdl9pbmZvKHZvaWQpCi17Ci0JaW50IG1ham9yLCBtaW5vcjsKLQl1 aW50MzJfdCBlYXgsIGVieCwgZWN4LCBlZHgsIHBhZ2VzLCBtc3IsIGJhc2U7Ci0JdTY0IHBmbjsK LQotCWJhc2UgPSB4ZW5fY3B1aWRfYmFzZSgpOwotCWNwdWlkKGJhc2UgKyAxLCAmZWF4LCAmZWJ4 LCAmZWN4LCAmZWR4KTsKLQotCW1ham9yID0gZWF4ID4+IDE2OwotCW1pbm9yID0gZWF4ICYgMHhm ZmZmOwotCXByaW50ayhLRVJOX0lORk8gIlhlbiB2ZXJzaW9uICVkLiVkLlxuIiwgbWFqb3IsIG1p bm9yKTsKLQotCWNwdWlkKGJhc2UgKyAyLCAmcGFnZXMsICZtc3IsICZlY3gsICZlZHgpOwotCi0J cGZuID0gX19wYShoeXBlcmNhbGxfcGFnZSk7Ci0Jd3Jtc3Jfc2FmZShtc3IsICh1MzIpcGZuLCAo dTMyKShwZm4gPj4gMzIpKTsKLQotCXhlbl9zZXR1cF9mZWF0dXJlcygpOwotCi0JY3B1aWQoYmFz ZSArIDQsICZlYXgsICZlYngsICZlY3gsICZlZHgpOwotCWlmIChlYXggJiBYRU5fSFZNX0NQVUlE X1ZDUFVfSURfUFJFU0VOVCkKLQkJdGhpc19jcHVfd3JpdGUoeGVuX3ZjcHVfaWQsIGVieCk7Ci0J ZWxzZQotCQl0aGlzX2NwdV93cml0ZSh4ZW5fdmNwdV9pZCwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsK LQotCXB2X2luZm8ubmFtZSA9ICJYZW4gSFZNIjsKLQotCXhlbl9kb21haW5fdHlwZSA9IFhFTl9I Vk1fRE9NQUlOOwotfQotI2VuZGlmCi0KLXN0YXRpYyBpbnQgeGVuX2NwdV91cF9wcmVwYXJlKHVu c2lnbmVkIGludCBjcHUpCitzdGF0aWMgaW50IHhlbl9jcHVfdXBfcHJlcGFyZV9wdih1bnNpZ25l ZCBpbnQgY3B1KQogewogCWludCByYzsKIAotCWlmICh4ZW5faHZtX2RvbWFpbigpKSB7Ci0JCS8q Ci0JCSAqIFRoaXMgY2FuIGhhcHBlbiBpZiBDUFUgd2FzIG9mZmxpbmVkIGVhcmxpZXIgYW5kCi0J CSAqIG9mZmxpbmluZyB0aW1lZCBvdXQgaW4gY29tbW9uX2NwdV9kaWUoKS4KLQkJICovCi0JCWlm IChjcHVfcmVwb3J0X3N0YXRlKGNwdSkgPT0gQ1BVX0RFQURfRlJPWkVOKSB7Ci0JCQl4ZW5fc21w X2ludHJfZnJlZShjcHUpOwotCQkJeGVuX3VuaW5pdF9sb2NrX2NwdShjcHUpOwotCQl9Ci0KLQkJ aWYgKGNwdV9hY3BpX2lkKGNwdSkgIT0gVTMyX01BWCkKLQkJCXBlcl9jcHUoeGVuX3ZjcHVfaWQs IGNwdSkgPSBjcHVfYWNwaV9pZChjcHUpOwotCQllbHNlCi0JCQlwZXJfY3B1KHhlbl92Y3B1X2lk LCBjcHUpID0gY3B1OwotCQl4ZW5fdmNwdV9zZXR1cChjcHUpOwotCX0KLQogCWlmICh4ZW5fcHZf ZG9tYWluKCkgfHwgeGVuX2ZlYXR1cmUoWEVORkVBVF9odm1fc2FmZV9wdmNsb2NrKSkKIAkJeGVu X3NldHVwX3RpbWVyKGNwdSk7CiAKQEAgLTE4NzIsNyArMTYwNiw3IEBAIHN0YXRpYyBpbnQgeGVu X2NwdV91cF9wcmVwYXJlKHVuc2lnbmVkIGludCBjcHUpCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRp YyBpbnQgeGVuX2NwdV9kZWFkKHVuc2lnbmVkIGludCBjcHUpCitzdGF0aWMgaW50IHhlbl9jcHVf ZGVhZF9wdih1bnNpZ25lZCBpbnQgY3B1KQogewogCXhlbl9zbXBfaW50cl9mcmVlKGNwdSk7CiAK QEAgLTE4ODIsODQgKzE2MTYsNiBAQCBzdGF0aWMgaW50IHhlbl9jcHVfZGVhZCh1bnNpZ25lZCBp bnQgY3B1KQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHhlbl9jcHVfdXBfb25saW5lKHVu c2lnbmVkIGludCBjcHUpCi17Ci0JeGVuX2luaXRfbG9ja19jcHUoY3B1KTsKLQlyZXR1cm4gMDsK LX0KLQotI2lmZGVmIENPTkZJR19YRU5fUFZIVk0KLSNpZmRlZiBDT05GSUdfS0VYRUNfQ09SRQot c3RhdGljIHZvaWQgeGVuX2h2bV9zaHV0ZG93bih2b2lkKQotewotCW5hdGl2ZV9tYWNoaW5lX3No dXRkb3duKCk7Ci0JaWYgKGtleGVjX2luX3Byb2dyZXNzKQotCQl4ZW5fcmVib290KFNIVVRET1dO X3NvZnRfcmVzZXQpOwotfQotCi1zdGF0aWMgdm9pZCB4ZW5faHZtX2NyYXNoX3NodXRkb3duKHN0 cnVjdCBwdF9yZWdzICpyZWdzKQotewotCW5hdGl2ZV9tYWNoaW5lX2NyYXNoX3NodXRkb3duKHJl Z3MpOwotCXhlbl9yZWJvb3QoU0hVVERPV05fc29mdF9yZXNldCk7Ci19Ci0jZW5kaWYKLQotc3Rh dGljIHZvaWQgX19pbml0IHhlbl9odm1fZ3Vlc3RfaW5pdCh2b2lkKQotewotCWlmICh4ZW5fcHZf ZG9tYWluKCkpCi0JCXJldHVybjsKLQotCWluaXRfaHZtX3B2X2luZm8oKTsKLQotCXhlbl9odm1f aW5pdF9zaGFyZWRfaW5mbygpOwotCi0JeGVuX3BhbmljX2hhbmRsZXJfaW5pdCgpOwotCi0JQlVH X09OKCF4ZW5fZmVhdHVyZShYRU5GRUFUX2h2bV9jYWxsYmFja192ZWN0b3IpKTsKLQotCXhlbl9o dm1fc21wX2luaXQoKTsKLQlXQVJOX09OKHhlbl9jcHVocF9zZXR1cCgpKTsKLQl4ZW5fdW5wbHVn X2VtdWxhdGVkX2RldmljZXMoKTsKLQl4ODZfaW5pdC5pcnFzLmludHJfaW5pdCA9IHhlbl9pbml0 X0lSUTsKLQl4ZW5faHZtX2luaXRfdGltZV9vcHMoKTsKLQl4ZW5faHZtX2luaXRfbW11X29wcygp OwotI2lmZGVmIENPTkZJR19LRVhFQ19DT1JFCi0JbWFjaGluZV9vcHMuc2h1dGRvd24gPSB4ZW5f aHZtX3NodXRkb3duOwotCW1hY2hpbmVfb3BzLmNyYXNoX3NodXRkb3duID0geGVuX2h2bV9jcmFz aF9zaHV0ZG93bjsKLSNlbmRpZgotfQotI2VuZGlmCi0KLXN0YXRpYyBib29sIHhlbl9ub3B2ID0g ZmFsc2U7Ci1zdGF0aWMgX19pbml0IGludCB4ZW5fcGFyc2Vfbm9wdihjaGFyICphcmcpCi17Ci0g ICAgICAgeGVuX25vcHYgPSB0cnVlOwotICAgICAgIHJldHVybiAwOwotfQotZWFybHlfcGFyYW0o Inhlbl9ub3B2IiwgeGVuX3BhcnNlX25vcHYpOwotCi1zdGF0aWMgdWludDMyX3QgX19pbml0IHhl bl9wbGF0Zm9ybSh2b2lkKQotewotCWlmICh4ZW5fbm9wdikKLQkJcmV0dXJuIDA7Ci0KLQlyZXR1 cm4geGVuX2NwdWlkX2Jhc2UoKTsKLX0KLQotYm9vbCB4ZW5faHZtX25lZWRfbGFwaWModm9pZCkK LXsKLQlpZiAoeGVuX25vcHYpCi0JCXJldHVybiBmYWxzZTsKLQlpZiAoeGVuX3B2X2RvbWFpbigp KQotCQlyZXR1cm4gZmFsc2U7Ci0JaWYgKCF4ZW5faHZtX2RvbWFpbigpKQotCQlyZXR1cm4gZmFs c2U7Ci0JaWYgKHhlbl9mZWF0dXJlKFhFTkZFQVRfaHZtX3BpcnFzKSkKLQkJcmV0dXJuIGZhbHNl OwotCXJldHVybiB0cnVlOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoeGVuX2h2bV9uZWVkX2xhcGlj KTsKLQogc3RhdGljIHZvaWQgeGVuX3NldF9jcHVfZmVhdHVyZXMoc3RydWN0IGNwdWluZm9feDg2 ICpjKQogewogCWlmICh4ZW5fcHZfZG9tYWluKCkpIHsKQEAgLTIwMDcsMjggKzE2NjMsMTggQEAg c3RhdGljIHZvaWQgeGVuX3Bpbl92Y3B1KGludCBjcHUpCiAJfQogfQogCi1jb25zdCBzdHJ1Y3Qg aHlwZXJ2aXNvcl94ODYgeDg2X2h5cGVyX3hlbiA9IHsKLQkubmFtZQkJCT0gIlhlbiIsCi0JLmRl dGVjdAkJCT0geGVuX3BsYXRmb3JtLAotI2lmZGVmIENPTkZJR19YRU5fUFZIVk0KLQkuaW5pdF9w bGF0Zm9ybQkJPSB4ZW5faHZtX2d1ZXN0X2luaXQsCi0jZW5kaWYKLQkueDJhcGljX2F2YWlsYWJs ZQk9IHhlbl94MmFwaWNfcGFyYV9hdmFpbGFibGUsCi0JLnNldF9jcHVfZmVhdHVyZXMgICAgICAg PSB4ZW5fc2V0X2NwdV9mZWF0dXJlcywKLQkucGluX3ZjcHUgICAgICAgICAgICAgICA9IHhlbl9w aW5fdmNwdSwKLX07Ci1FWFBPUlRfU1lNQk9MKHg4Nl9oeXBlcl94ZW4pOwotCi0jaWZkZWYgQ09O RklHX0hPVFBMVUdfQ1BVCi12b2lkIHhlbl9hcmNoX3JlZ2lzdGVyX2NwdShpbnQgbnVtKQordWlu dDMyX3QgX19pbml0IHhlbl9wbGF0Zm9ybV9wdih2b2lkKQogewotCWFyY2hfcmVnaXN0ZXJfY3B1 KG51bSk7Ci19Ci1FWFBPUlRfU1lNQk9MKHhlbl9hcmNoX3JlZ2lzdGVyX2NwdSk7CisJaWYgKHhl bl9wdl9kb21haW4oKSkKKwkJcmV0dXJuIHhlbl9jcHVpZF9iYXNlKCk7CiAKLXZvaWQgeGVuX2Fy Y2hfdW5yZWdpc3Rlcl9jcHUoaW50IG51bSkKLXsKLQlhcmNoX3VucmVnaXN0ZXJfY3B1KG51bSk7 CisJcmV0dXJuIDA7CiB9Ci1FWFBPUlRfU1lNQk9MKHhlbl9hcmNoX3VucmVnaXN0ZXJfY3B1KTsK LSNlbmRpZgorCitjb25zdCBzdHJ1Y3QgaHlwZXJ2aXNvcl94ODYgeDg2X2h5cGVyX3hlbl9wdiA9 IHsKKwkubmFtZQkJCT0gIlhlbiBQViIsCisJLmRldGVjdAkJCT0geGVuX3BsYXRmb3JtX3B2LAor CS5zZXRfY3B1X2ZlYXR1cmVzICAgICAgID0geGVuX3NldF9jcHVfZmVhdHVyZXMsCisJLnBpbl92 Y3B1ICAgICAgICAgICAgICAgPSB4ZW5fcGluX3ZjcHUsCit9OworRVhQT1JUX1NZTUJPTCh4ODZf aHlwZXJfeGVuX3B2KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi9lbmxpZ2h0ZW5fY29tbW9u LmMgYi9hcmNoL3g4Ni94ZW4vZW5saWdodGVuX2NvbW1vbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAuLmI4YTdiZTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni94ZW4v ZW5saWdodGVuX2NvbW1vbi5jCkBAIC0wLDAgKzEsMjE2IEBACisjaW5jbHVkZSA8bGludXgvY3B1 Lmg+CisjaW5jbHVkZSA8bGludXgva2V4ZWMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQu aD4KKworI2luY2x1ZGUgPHhlbi9mZWF0dXJlcy5oPgorCisjaW5jbHVkZSA8YXNtL3hlbi9oeXBl cmNhbGwuaD4KKyNpbmNsdWRlIDxhc20veGVuL2h5cGVydmlzb3IuaD4KKyNpbmNsdWRlIDxhc20v eGVuL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vY3B1Lmg+CisKKyNpbmNsdWRlICJ4ZW4tb3BzLmgi CisjaW5jbHVkZSAicG11LmgiCisjaW5jbHVkZSAic21wLmgiCisKK0VYUE9SVF9TWU1CT0xfR1BM KGh5cGVyY2FsbF9wYWdlKTsKKworLyoKKyAqIFBvaW50ZXIgdG8gdGhlIHhlbl92Y3B1X2luZm8g c3RydWN0dXJlIG9yCisgKiAmSFlQRVJWSVNPUl9zaGFyZWRfaW5mby0+dmNwdV9pbmZvW2NwdV0u IFNlZSB4ZW5faHZtX2luaXRfc2hhcmVkX2luZm8KKyAqIGFuZCB4ZW5fdmNwdV9zZXR1cCBmb3Ig ZGV0YWlscy4gQnkgZGVmYXVsdCBpdCBwb2ludHMgdG8gc2hhcmVfaW5mby0+dmNwdV9pbmZvCisg KiBidXQgaWYgdGhlIGh5cGVydmlzb3Igc3VwcG9ydHMgVkNQVU9QX3JlZ2lzdGVyX3ZjcHVfaW5m byB0aGVuIGl0IGNhbiBwb2ludAorICogdG8geGVuX3ZjcHVfaW5mby4gVGhlIHBvaW50ZXIgaXMg dXNlZCBpbiBfX3hlbl9ldnRjaG5fZG9fdXBjYWxsIHRvCisgKiBhY2tub3dsZWRnZSBwZW5kaW5n IGV2ZW50cy4KKyAqIEFsc28gbW9yZSBzdWJ0bHkgaXQgaXMgdXNlZCBieSB0aGUgcGF0Y2hlZCB2 ZXJzaW9uIG9mIGlycSBlbmFibGUvZGlzYWJsZQorICogZS5nLiB4ZW5faXJxX2VuYWJsZV9kaXJl Y3QgYW5kIHhlbl9pcmV0IGluIFBWIG1vZGUuCisgKgorICogVGhlIGRlc2lyZSB0byBiZSBhYmxl IHRvIGRvIHRob3NlIG1hc2svdW5tYXNrIG9wZXJhdGlvbnMgYXMgYSBzaW5nbGUKKyAqIGluc3Ry dWN0aW9uIGJ5IHVzaW5nIHRoZSBwZXItY3B1IG9mZnNldCBoZWxkIGluICVncyBpcyB0aGUgcmVh bCByZWFzb24KKyAqIHZjcHUgaW5mbyBpcyBpbiBhIHBlci1jcHUgcG9pbnRlciBhbmQgdGhlIG9y aWdpbmFsIHJlYXNvbiBmb3IgdGhpcworICogaHlwZXJjYWxsLgorICoKKyAqLworREVGSU5FX1BF Ul9DUFUoc3RydWN0IHZjcHVfaW5mbyAqLCB4ZW5fdmNwdSk7CisKKy8qCisgKiBQZXIgQ1BVIHBh Z2VzIHVzZWQgaWYgaHlwZXJ2aXNvciBzdXBwb3J0cyBWQ1BVT1BfcmVnaXN0ZXJfdmNwdV9pbmZv CisgKiBoeXBlcmNhbGwuIFRoaXMgY2FuIGJlIHVzZWQgYm90aCBpbiBQViBhbmQgUFZIVk0gbW9k ZS4gVGhlIHN0cnVjdHVyZQorICogb3ZlcnJpZGVzIHRoZSBkZWZhdWx0IHBlcl9jcHUoeGVuX3Zj cHUsIGNwdSkgdmFsdWUuCisgKi8KK0RFRklORV9QRVJfQ1BVKHN0cnVjdCB2Y3B1X2luZm8sIHhl bl92Y3B1X2luZm8pOworCisvKiBMaW51eCA8LT4gWGVuIHZDUFUgaWQgbWFwcGluZyAqLworREVG SU5FX1BFUl9DUFUodWludDMyX3QsIHhlbl92Y3B1X2lkKTsKK0VYUE9SVF9QRVJfQ1BVX1NZTUJP TCh4ZW5fdmNwdV9pZCk7CisKK2VudW0geGVuX2RvbWFpbl90eXBlIHhlbl9kb21haW5fdHlwZSA9 IFhFTl9OQVRJVkU7CitFWFBPUlRfU1lNQk9MX0dQTCh4ZW5fZG9tYWluX3R5cGUpOworCit1bnNp Z25lZCBsb25nICptYWNoaW5lX3RvX3BoeXNfbWFwcGluZyA9ICh2b2lkICopTUFDSDJQSFlTX1ZJ UlRfU1RBUlQ7CitFWFBPUlRfU1lNQk9MKG1hY2hpbmVfdG9fcGh5c19tYXBwaW5nKTsKK3Vuc2ln bmVkIGxvbmcgIG1hY2hpbmVfdG9fcGh5c19ucjsKK0VYUE9SVF9TWU1CT0wobWFjaGluZV90b19w aHlzX25yKTsKKworc3RydWN0IHN0YXJ0X2luZm8gKnhlbl9zdGFydF9pbmZvOworRVhQT1JUX1NZ TUJPTF9HUEwoeGVuX3N0YXJ0X2luZm8pOworCitzdHJ1Y3Qgc2hhcmVkX2luZm8geGVuX2R1bW15 X3NoYXJlZF9pbmZvOworCisvKgorICogUG9pbnQgYXQgc29tZSBlbXB0eSBtZW1vcnkgdG8gc3Rh cnQgd2l0aC4gV2UgbWFwIHRoZSByZWFsIHNoYXJlZF9pbmZvCisgKiBwYWdlIGFzIHNvb24gYXMg Zml4bWFwIGlzIHVwIGFuZCBydW5uaW5nLgorICovCitzdHJ1Y3Qgc2hhcmVkX2luZm8gKkhZUEVS VklTT1Jfc2hhcmVkX2luZm8gPSAmeGVuX2R1bW15X3NoYXJlZF9pbmZvOworCisvKgorICogRmxh ZyB0byBkZXRlcm1pbmUgd2hldGhlciB2Y3B1IGluZm8gcGxhY2VtZW50IGlzIGF2YWlsYWJsZSBv biBhbGwKKyAqIFZDUFVzLiAgV2UgYXNzdW1lIGl0IGlzIHRvIHN0YXJ0IHdpdGgsIGFuZCB0aGVu IHNldCBpdCB0byB6ZXJvIG9uCisgKiB0aGUgZmlyc3QgZmFpbHVyZS4gIFRoaXMgaXMgYmVjYXVz ZSBpdCBjYW4gc3VjY2VlZCBvbiBzb21lIFZDUFVzCisgKiBhbmQgbm90IG90aGVycywgc2luY2Ug aXQgY2FuIGludm9sdmUgaHlwZXJ2aXNvciBtZW1vcnkgYWxsb2NhdGlvbiwKKyAqIG9yIGJlY2F1 c2UgdGhlIGd1ZXN0IGZhaWxlZCB0byBndWFyYW50ZWUgYWxsIHRoZSBhcHByb3ByaWF0ZQorICog Y29uc3RyYWludHMgb24gYWxsIFZDUFVzIChpZSBidWZmZXIgY2FuJ3QgY3Jvc3MgYSBwYWdlIGJv dW5kYXJ5KS4KKyAqCisgKiBOb3RlIHRoYXQgYW55IHBhcnRpY3VsYXIgQ1BVIG1heSBiZSB1c2lu ZyBhIHBsYWNlZCB2Y3B1IHN0cnVjdHVyZSwKKyAqIGJ1dCB3ZSBjYW4gb25seSBvcHRpbWlzZSBp ZiB0aGUgYWxsIGFyZS4KKyAqCisgKiAwOiBub3QgYXZhaWxhYmxlLCAxOiBhdmFpbGFibGUKKyAq LworaW50IGhhdmVfdmNwdV9pbmZvX3BsYWNlbWVudCA9IDE7CisKK3N0YXRpYyBpbnQgeGVuX2Nw dV91cF9vbmxpbmUodW5zaWduZWQgaW50IGNwdSkKK3sKKwl4ZW5faW5pdF9sb2NrX2NwdShjcHUp OworCXJldHVybiAwOworfQorCitpbnQgeGVuX2NwdWhwX3NldHVwKGludCAoKmNwdV91cF9wcmVw YXJlX2NiKSh1bnNpZ25lZCBpbnQpLAorCQkgICAgaW50ICgqY3B1X2RlYWRfY2IpKHVuc2lnbmVk IGludCkpCit7CisJaW50IHJjOworCisJcmMgPSBjcHVocF9zZXR1cF9zdGF0ZV9ub2NhbGxzKENQ VUhQX1hFTl9QUkVQQVJFLAorCQkJCSAgICAgICAiWEVOX0hWTV9HVUVTVF9QUkVQQVJFIiwKKwkJ CQkgICAgICAgY3B1X3VwX3ByZXBhcmVfY2IsIGNwdV9kZWFkX2NiKTsKKwlpZiAocmMgPj0gMCkg eworCQlyYyA9IGNwdWhwX3NldHVwX3N0YXRlX25vY2FsbHMoQ1BVSFBfQVBfT05MSU5FX0RZTiwK KwkJCQkJICAgICAgICJYRU5fSFZNX0dVRVNUX09OTElORSIsCisJCQkJCSAgICAgICB4ZW5fY3B1 X3VwX29ubGluZSwgTlVMTCk7CisJCWlmIChyYyA8IDApCisJCQljcHVocF9yZW1vdmVfc3RhdGVf bm9jYWxscyhDUFVIUF9YRU5fUFJFUEFSRSk7CisJfQorCisJcmV0dXJuIHJjID49IDAgPyAwIDog cmM7Cit9CisKK3N0YXRpYyB2b2lkIGNsYW1wX21heF9jcHVzKHZvaWQpCit7CisjaWZkZWYgQ09O RklHX1NNUAorCWlmIChzZXR1cF9tYXhfY3B1cyA+IE1BWF9WSVJUX0NQVVMpCisJCXNldHVwX21h eF9jcHVzID0gTUFYX1ZJUlRfQ1BVUzsKKyNlbmRpZgorfQorCit2b2lkIHhlbl92Y3B1X3NldHVw KGludCBjcHUpCit7CisJc3RydWN0IHZjcHVfcmVnaXN0ZXJfdmNwdV9pbmZvIGluZm87CisJaW50 IGVycjsKKwlzdHJ1Y3QgdmNwdV9pbmZvICp2Y3B1cDsKKworCUJVR19PTihIWVBFUlZJU09SX3No YXJlZF9pbmZvID09ICZ4ZW5fZHVtbXlfc2hhcmVkX2luZm8pOworCisJLyoKKwkgKiBUaGlzIHBh dGggaXMgY2FsbGVkIHR3aWNlIG9uIFBWSFZNIC0gZmlyc3QgZHVyaW5nIGJvb3R1cCB2aWEKKwkg KiBzbXBfaW5pdCAtPiB4ZW5faHZtX2NwdV9ub3RpZnksIGFuZCB0aGVuIGlmIHRoZSBWQ1BVIGlz IGJlaW5nCisJICogaG90cGx1Z2dlZDogY3B1X3VwIC0+IHhlbl9odm1fY3B1X25vdGlmeS4KKwkg KiBBcyB3ZSBjYW4gb25seSBkbyB0aGUgVkNQVU9QX3JlZ2lzdGVyX3ZjcHVfaW5mbyBvbmNlIGxl dHMKKwkgKiBub3Qgb3Zlci13cml0ZSBpdHMgcmVzdWx0LgorCSAqCisJICogRm9yIFBWIGl0IGlz IGNhbGxlZCBkdXJpbmcgcmVzdG9yZSAoeGVuX3ZjcHVfcmVzdG9yZSkgYW5kIGJvb3R1cAorCSAq ICh4ZW5fc2V0dXBfdmNwdV9pbmZvX3BsYWNlbWVudCkuIFRoZSBob3RwbHVnIG1lY2hhbmlzbSBk b2VzIG5vdAorCSAqIHVzZSB0aGlzIGZ1bmN0aW9uLgorCSAqLworCWlmICh4ZW5faHZtX2RvbWFp bigpKSB7CisJCWlmIChwZXJfY3B1KHhlbl92Y3B1LCBjcHUpID09ICZwZXJfY3B1KHhlbl92Y3B1 X2luZm8sIGNwdSkpCisJCQlyZXR1cm47CisJfQorCWlmICh4ZW5fdmNwdV9ucihjcHUpIDwgTUFY X1ZJUlRfQ1BVUykKKwkJcGVyX2NwdSh4ZW5fdmNwdSwgY3B1KSA9CisJCQkmSFlQRVJWSVNPUl9z aGFyZWRfaW5mby0+dmNwdV9pbmZvW3hlbl92Y3B1X25yKGNwdSldOworCisJaWYgKCFoYXZlX3Zj cHVfaW5mb19wbGFjZW1lbnQpIHsKKwkJaWYgKGNwdSA+PSBNQVhfVklSVF9DUFVTKQorCQkJY2xh bXBfbWF4X2NwdXMoKTsKKwkJcmV0dXJuOworCX0KKworCXZjcHVwID0gJnBlcl9jcHUoeGVuX3Zj cHVfaW5mbywgY3B1KTsKKwlpbmZvLm1mbiA9IGFyYml0cmFyeV92aXJ0X3RvX21mbih2Y3B1cCk7 CisJaW5mby5vZmZzZXQgPSBvZmZzZXRfaW5fcGFnZSh2Y3B1cCk7CisKKwkvKiBDaGVjayB0byBz ZWUgaWYgdGhlIGh5cGVydmlzb3Igd2lsbCBwdXQgdGhlIHZjcHVfaW5mbworCSAgIHN0cnVjdHVy ZSB3aGVyZSB3ZSB3YW50IGl0LCB3aGljaCBhbGxvd3MgZGlyZWN0IGFjY2VzcyB2aWEKKwkgICBh IHBlcmNwdS12YXJpYWJsZS4KKwkgICBOLkIuIFRoaXMgaHlwZXJjYWxsIGNhbiBfb25seV8gYmUg Y2FsbGVkIG9uY2UgcGVyIENQVS4gU3Vic2VxdWVudAorCSAgIGNhbGxzIHdpbGwgZXJyb3Igb3V0 IHdpdGggLUVJTlZBTC4gVGhpcyBpcyBkdWUgdG8gdGhlIGZhY3QgdGhhdAorCSAgIGh5cGVydmlz b3IgaGFzIG5vIHVucmVnaXN0ZXIgdmFyaWFudCBhbmQgdGhpcyBoeXBlcmNhbGwgZG9lcyBub3QK KwkgICBhbGxvdyB0byBvdmVyLXdyaXRlIGluZm8ubWZuIGFuZCBpbmZvLm9mZnNldC4KKwkgKi8K KwllcnIgPSBIWVBFUlZJU09SX3ZjcHVfb3AoVkNQVU9QX3JlZ2lzdGVyX3ZjcHVfaW5mbywgeGVu X3ZjcHVfbnIoY3B1KSwKKwkJCQkgJmluZm8pOworCisJaWYgKGVycikgeworCQlwcmludGsoS0VS Tl9ERUJVRyAicmVnaXN0ZXJfdmNwdV9pbmZvIGZhaWxlZDogZXJyPSVkXG4iLCBlcnIpOworCQlo YXZlX3ZjcHVfaW5mb19wbGFjZW1lbnQgPSAwOworCQljbGFtcF9tYXhfY3B1cygpOworCX0gZWxz ZSB7CisJCS8qIFRoaXMgY3B1IGlzIHVzaW5nIHRoZSByZWdpc3RlcmVkIHZjcHUgaW5mbywgZXZl biBpZgorCQkgICBsYXRlciBvbmVzIGZhaWwgdG8uICovCisJCXBlcl9jcHUoeGVuX3ZjcHUsIGNw dSkgPSB2Y3B1cDsKKwl9Cit9CisKK3ZvaWQgeGVuX3JlYm9vdChpbnQgcmVhc29uKQoreworCXN0 cnVjdCBzY2hlZF9zaHV0ZG93biByID0geyAucmVhc29uID0gcmVhc29uIH07CisJaW50IGNwdTsK KworCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KQorCQl4ZW5fcG11X2ZpbmlzaChjcHUpOworCisJ aWYgKEhZUEVSVklTT1Jfc2NoZWRfb3AoU0NIRURPUF9zaHV0ZG93biwgJnIpKQorCQlCVUcoKTsK K30KKworc3RhdGljIGludAoreGVuX3BhbmljX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAq dGhpcywgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHRyKQoreworCWlmICgha2V4ZWNfY3Jh c2hfbG9hZGVkKCkpCisJCXhlbl9yZWJvb3QoU0hVVERPV05fY3Jhc2gpOworCXJldHVybiBOT1RJ RllfRE9ORTsKK30KKworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayB4ZW5fcGFuaWNfYmxv Y2sgPSB7CisJLm5vdGlmaWVyX2NhbGwgPSB4ZW5fcGFuaWNfZXZlbnQsCisJLnByaW9yaXR5ID0g SU5UX01JTgorfTsKKworaW50IHhlbl9wYW5pY19oYW5kbGVyX2luaXQodm9pZCkKK3sKKwlhdG9t aWNfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJnBhbmljX25vdGlmaWVyX2xpc3QsICZ4ZW5fcGFu aWNfYmxvY2spOworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCit2 b2lkIHhlbl9hcmNoX3JlZ2lzdGVyX2NwdShpbnQgbnVtKQoreworCWFyY2hfcmVnaXN0ZXJfY3B1 KG51bSk7Cit9CitFWFBPUlRfU1lNQk9MKHhlbl9hcmNoX3JlZ2lzdGVyX2NwdSk7CisKK3ZvaWQg eGVuX2FyY2hfdW5yZWdpc3Rlcl9jcHUoaW50IG51bSkKK3sKKwlhcmNoX3VucmVnaXN0ZXJfY3B1 KG51bSk7Cit9CitFWFBPUlRfU1lNQk9MKHhlbl9hcmNoX3VucmVnaXN0ZXJfY3B1KTsKKyNlbmRp ZgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYveGVuL2VubGlnaHRlbl9odm0uYyBiL2FyY2gveDg2L3hl bi9lbmxpZ2h0ZW5faHZtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNThi OWU0NAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L3hlbi9lbmxpZ2h0ZW5faHZtLmMKQEAg LTAsMCArMSwyMDIgQEAKKyNpbmNsdWRlIDxsaW51eC9jcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9r ZXhlYy5oPgorCisjaW5jbHVkZSA8eGVuL2ZlYXR1cmVzLmg+CisjaW5jbHVkZSA8eGVuL2V2ZW50 cy5oPgorI2luY2x1ZGUgPHhlbi9pbnRlcmZhY2UvbWVtb3J5Lmg+CisKKyNpbmNsdWRlIDxhc20v cmVib290Lmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL2h5cGVydmlz b3IuaD4KKworI2luY2x1ZGUgPGFzbS94ZW4vY3B1aWQuaD4KKyNpbmNsdWRlIDxhc20veGVuL2h5 cGVydmlzb3IuaD4KKworI2luY2x1ZGUgInhlbi1vcHMuaCIKKyNpbmNsdWRlICJtbXUuaCIKKyNp bmNsdWRlICJzbXAuaCIKKwordm9pZCBfX3JlZiB4ZW5faHZtX2luaXRfc2hhcmVkX2luZm8odm9p ZCkKK3sKKwlpbnQgY3B1OworCXN0cnVjdCB4ZW5fYWRkX3RvX3BoeXNtYXAgeGF0cDsKKwlzdGF0 aWMgc3RydWN0IHNoYXJlZF9pbmZvICpzaGFyZWRfaW5mb19wYWdlOworCisJaWYgKCFzaGFyZWRf aW5mb19wYWdlKQorCQlzaGFyZWRfaW5mb19wYWdlID0gKHN0cnVjdCBzaGFyZWRfaW5mbyAqKQor CQkJZXh0ZW5kX2JyayhQQUdFX1NJWkUsIFBBR0VfU0laRSk7CisJeGF0cC5kb21pZCA9IERPTUlE X1NFTEY7CisJeGF0cC5pZHggPSAwOworCXhhdHAuc3BhY2UgPSBYRU5NQVBTUEFDRV9zaGFyZWRf aW5mbzsKKwl4YXRwLmdwZm4gPSBfX3BhKHNoYXJlZF9pbmZvX3BhZ2UpID4+IFBBR0VfU0hJRlQ7 CisJaWYgKEhZUEVSVklTT1JfbWVtb3J5X29wKFhFTk1FTV9hZGRfdG9fcGh5c21hcCwgJnhhdHAp KQorCQlCVUcoKTsKKworCUhZUEVSVklTT1Jfc2hhcmVkX2luZm8gPSAoc3RydWN0IHNoYXJlZF9p bmZvICopc2hhcmVkX2luZm9fcGFnZTsKKworCS8qIHhlbl92Y3B1IGlzIGEgcG9pbnRlciB0byB0 aGUgdmNwdV9pbmZvIHN0cnVjdCBpbiB0aGUgc2hhcmVkX2luZm8KKwkgKiBwYWdlLCB3ZSB1c2Ug aXQgaW4gdGhlIGV2ZW50IGNoYW5uZWwgdXBjYWxsIGFuZCBpbiBzb21lIHB2Y2xvY2sKKwkgKiBy ZWxhdGVkIGZ1bmN0aW9ucy4gV2UgZG9uJ3QgbmVlZCB0aGUgdmNwdV9pbmZvIHBsYWNlbWVudAor CSAqIG9wdGltaXphdGlvbnMgYmVjYXVzZSB3ZSBkb24ndCB1c2UgYW55IHB2X21tdSBvciBwdl9p cnEgb3Agb24KKwkgKiBIVk0uCisJICogV2hlbiB4ZW5faHZtX2luaXRfc2hhcmVkX2luZm8gaXMg cnVuIGF0IGJvb3QgdGltZSBvbmx5IHZjcHUgMCBpcworCSAqIG9ubGluZSBidXQgeGVuX2h2bV9p bml0X3NoYXJlZF9pbmZvIGlzIHJ1biBhdCByZXN1bWUgdGltZSB0b28gYW5kCisJICogaW4gdGhh dCBjYXNlIG11bHRpcGxlIHZjcHVzIG1pZ2h0IGJlIG9ubGluZS4gKi8KKwlmb3JfZWFjaF9vbmxp bmVfY3B1KGNwdSkgeworCQkvKiBMZWF2ZSBpdCB0byBiZSBOVUxMLiAqLworCQlpZiAoeGVuX3Zj cHVfbnIoY3B1KSA+PSBNQVhfVklSVF9DUFVTKQorCQkJY29udGludWU7CisJCXBlcl9jcHUoeGVu X3ZjcHUsIGNwdSkgPQorCQkJJkhZUEVSVklTT1Jfc2hhcmVkX2luZm8tPnZjcHVfaW5mb1t4ZW5f dmNwdV9ucihjcHUpXTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBpbml0X2h2bV9wdl9p bmZvKHZvaWQpCit7CisJaW50IG1ham9yLCBtaW5vcjsKKwl1aW50MzJfdCBlYXgsIGVieCwgZWN4 LCBlZHgsIHBhZ2VzLCBtc3IsIGJhc2U7CisJdTY0IHBmbjsKKworCWJhc2UgPSB4ZW5fY3B1aWRf YmFzZSgpOworCWNwdWlkKGJhc2UgKyAxLCAmZWF4LCAmZWJ4LCAmZWN4LCAmZWR4KTsKKworCW1h am9yID0gZWF4ID4+IDE2OworCW1pbm9yID0gZWF4ICYgMHhmZmZmOworCXByaW50ayhLRVJOX0lO Rk8gIlhlbiB2ZXJzaW9uICVkLiVkLlxuIiwgbWFqb3IsIG1pbm9yKTsKKworCWNwdWlkKGJhc2Ug KyAyLCAmcGFnZXMsICZtc3IsICZlY3gsICZlZHgpOworCisJcGZuID0gX19wYShoeXBlcmNhbGxf cGFnZSk7CisJd3Jtc3Jfc2FmZShtc3IsICh1MzIpcGZuLCAodTMyKShwZm4gPj4gMzIpKTsKKwor CXhlbl9zZXR1cF9mZWF0dXJlcygpOworCisJY3B1aWQoYmFzZSArIDQsICZlYXgsICZlYngsICZl Y3gsICZlZHgpOworCWlmIChlYXggJiBYRU5fSFZNX0NQVUlEX1ZDUFVfSURfUFJFU0VOVCkKKwkJ dGhpc19jcHVfd3JpdGUoeGVuX3ZjcHVfaWQsIGVieCk7CisJZWxzZQorCQl0aGlzX2NwdV93cml0 ZSh4ZW5fdmNwdV9pZCwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKworCXB2X2luZm8ubmFtZSA9ICJY ZW4gSFZNIjsKKworCXhlbl9kb21haW5fdHlwZSA9IFhFTl9IVk1fRE9NQUlOOworfQorCisjaWZk ZWYgQ09ORklHX0tFWEVDX0NPUkUKK3N0YXRpYyB2b2lkIHhlbl9odm1fc2h1dGRvd24odm9pZCkK K3sKKwluYXRpdmVfbWFjaGluZV9zaHV0ZG93bigpOworCWlmIChrZXhlY19pbl9wcm9ncmVzcykK KwkJeGVuX3JlYm9vdChTSFVURE9XTl9zb2Z0X3Jlc2V0KTsKK30KKworc3RhdGljIHZvaWQgeGVu X2h2bV9jcmFzaF9zaHV0ZG93bihzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwluYXRpdmVfbWFj aGluZV9jcmFzaF9zaHV0ZG93bihyZWdzKTsKKwl4ZW5fcmVib290KFNIVVRET1dOX3NvZnRfcmVz ZXQpOworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgeGVuX2NwdV91cF9wcmVwYXJlX2h2bSh1bnNp Z25lZCBpbnQgY3B1KQoreworCWludCByYzsKKworCS8qCisJICogVGhpcyBjYW4gaGFwcGVuIGlm IENQVSB3YXMgb2ZmbGluZWQgZWFybGllciBhbmQKKwkgKiBvZmZsaW5pbmcgdGltZWQgb3V0IGlu IGNvbW1vbl9jcHVfZGllKCkuCisJICovCisJaWYgKGNwdV9yZXBvcnRfc3RhdGUoY3B1KSA9PSBD UFVfREVBRF9GUk9aRU4pIHsKKwkJeGVuX3NtcF9pbnRyX2ZyZWUoY3B1KTsKKwkJeGVuX3VuaW5p dF9sb2NrX2NwdShjcHUpOworCX0KKworCWlmIChjcHVfYWNwaV9pZChjcHUpICE9IFUzMl9NQVgp CisJCXBlcl9jcHUoeGVuX3ZjcHVfaWQsIGNwdSkgPSBjcHVfYWNwaV9pZChjcHUpOworCWVsc2UK KwkJcGVyX2NwdSh4ZW5fdmNwdV9pZCwgY3B1KSA9IGNwdTsKKwl4ZW5fdmNwdV9zZXR1cChjcHUp OworCisJaWYgKHhlbl9mZWF0dXJlKFhFTkZFQVRfaHZtX3NhZmVfcHZjbG9jaykpCisJCXhlbl9z ZXR1cF90aW1lcihjcHUpOworCisJcmMgPSB4ZW5fc21wX2ludHJfaW5pdChjcHUpOworCWlmIChy YykgeworCQlXQVJOKDEsICJ4ZW5fc21wX2ludHJfaW5pdCgpIGZvciBDUFUgJWQgZmFpbGVkOiAl ZFxuIiwKKwkJICAgICBjcHUsIHJjKTsKKwkJcmV0dXJuIHJjOworCX0KKwlyZXR1cm4gMDsKK30K Kworc3RhdGljIGludCB4ZW5fY3B1X2RlYWRfaHZtKHVuc2lnbmVkIGludCBjcHUpCit7CisJeGVu X3NtcF9pbnRyX2ZyZWUoY3B1KTsKKworCWlmICh4ZW5fZmVhdHVyZShYRU5GRUFUX2h2bV9zYWZl X3B2Y2xvY2spKQorCQl4ZW5fdGVhcmRvd25fdGltZXIoY3B1KTsKKworCXJldHVybiAwOworfQor Cit2b2lkIF9faW5pdCB4ZW5faHZtX2d1ZXN0X2luaXQodm9pZCkKK3sKKwlpZiAoeGVuX3B2X2Rv bWFpbigpKQorCQlyZXR1cm47CisKKwlpbml0X2h2bV9wdl9pbmZvKCk7CisKKwl4ZW5faHZtX2lu aXRfc2hhcmVkX2luZm8oKTsKKworCXhlbl9wYW5pY19oYW5kbGVyX2luaXQoKTsKKworCUJVR19P TigheGVuX2ZlYXR1cmUoWEVORkVBVF9odm1fY2FsbGJhY2tfdmVjdG9yKSk7CisKKwl4ZW5faHZt X3NtcF9pbml0KCk7CisJV0FSTl9PTih4ZW5fY3B1aHBfc2V0dXAoeGVuX2NwdV91cF9wcmVwYXJl X2h2bSwgeGVuX2NwdV9kZWFkX2h2bSkpOworCXhlbl91bnBsdWdfZW11bGF0ZWRfZGV2aWNlcygp OworCXg4Nl9pbml0LmlycXMuaW50cl9pbml0ID0geGVuX2luaXRfSVJROworCXhlbl9odm1faW5p dF90aW1lX29wcygpOworCXhlbl9odm1faW5pdF9tbXVfb3BzKCk7CisjaWZkZWYgQ09ORklHX0tF WEVDX0NPUkUKKwltYWNoaW5lX29wcy5zaHV0ZG93biA9IHhlbl9odm1fc2h1dGRvd247CisJbWFj aGluZV9vcHMuY3Jhc2hfc2h1dGRvd24gPSB4ZW5faHZtX2NyYXNoX3NodXRkb3duOworI2VuZGlm Cit9CisKK2Jvb2wgeGVuX2h2bV9uZWVkX2xhcGljKHZvaWQpCit7CisJaWYgKHhlbl9ub3B2KQor CQlyZXR1cm4gZmFsc2U7CisJaWYgKHhlbl9wdl9kb21haW4oKSkKKwkJcmV0dXJuIGZhbHNlOwor CWlmICgheGVuX2h2bV9kb21haW4oKSkKKwkJcmV0dXJuIGZhbHNlOworCWlmICh4ZW5fZmVhdHVy ZShYRU5GRUFUX2h2bV9waXJxcykpCisJCXJldHVybiBmYWxzZTsKKwlyZXR1cm4gdHJ1ZTsKK30K K0VYUE9SVF9TWU1CT0xfR1BMKHhlbl9odm1fbmVlZF9sYXBpYyk7CisKK2Jvb2wgeGVuX25vcHY7 CitzdGF0aWMgX19pbml0IGludCB4ZW5fcGFyc2Vfbm9wdihjaGFyICphcmcpCit7CisJeGVuX25v cHYgPSB0cnVlOworCXJldHVybiAwOworfQorZWFybHlfcGFyYW0oInhlbl9ub3B2IiwgeGVuX3Bh cnNlX25vcHYpOworCit1aW50MzJfdCBfX2luaXQgeGVuX3BsYXRmb3JtX2h2bSh2b2lkKQorewor CWlmICh4ZW5fcHZfZG9tYWluKCkgfHwgeGVuX25vcHYpCisJCXJldHVybiAwOworCisJcmV0dXJu IHhlbl9jcHVpZF9iYXNlKCk7Cit9CisKK2NvbnN0IHN0cnVjdCBoeXBlcnZpc29yX3g4NiB4ODZf aHlwZXJfeGVuX3B2aHZtID0geworCS5uYW1lCQkJPSAiWGVuIiwKKwkuZGV0ZWN0CQkJPSB4ZW5f cGxhdGZvcm1faHZtLAorCS5pbml0X3BsYXRmb3JtCQk9IHhlbl9odm1fZ3Vlc3RfaW5pdCwKKwku eDJhcGljX2F2YWlsYWJsZQk9IHhlbl94MmFwaWNfcGFyYV9hdmFpbGFibGUsCit9OworRVhQT1JU X1NZTUJPTCh4ODZfaHlwZXJfeGVuX3B2aHZtKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi9t bXUuYyBiL2FyY2gveDg2L3hlbi9tbXUuYwppbmRleCA3ZDVhZmRiLi42NWUxODRiIDEwMDY0NAot LS0gYS9hcmNoL3g4Ni94ZW4vbW11LmMKKysrIGIvYXJjaC94ODYveGVuL21tdS5jCkBAIC0xMjk1 LDcgKzEyOTUsOSBAQCBzdGF0aWMgdm9pZCBfX2luaXQgeGVuX3BhZ2V0YWJsZV9pbml0KHZvaWQp CiAJaWYgKCF4ZW5fZmVhdHVyZShYRU5GRUFUX2F1dG9fdHJhbnNsYXRlZF9waHlzbWFwKSkKIAkJ eGVuX3JlbWFwX21lbW9yeSgpOwogCisjaWZkZWYgQ09ORklHX1hFTl9QVgogCXhlbl9zZXR1cF9z aGFyZWRfaW5mbygpOworI2VuZGlmCiB9CiBzdGF0aWMgdm9pZCB4ZW5fd3JpdGVfY3IyKHVuc2ln bmVkIGxvbmcgY3IyKQogewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYveGVuL3NtcC5jIGIvYXJjaC94 ODYveGVuL3NtcC5jCmluZGV4IDlmYTI3Y2UuLmJkYjBkOWMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2 L3hlbi9zbXAuYworKysgYi9hcmNoL3g4Ni94ZW4vc21wLmMKQEAgLTI1Myw2ICsyNTMsNyBAQCBp bnQgeGVuX3NtcF9pbnRyX2luaXQodW5zaWduZWQgaW50IGNwdSkKIAlyZXR1cm4gcmM7CiB9CiAK KyNpZmRlZiBDT05GSUdfWEVOX1BWCiBzdGF0aWMgdm9pZCBfX2luaXQgeGVuX2ZpbGxfcG9zc2li bGVfbWFwKHZvaWQpCiB7CiAJaW50IGksIHJjOwpAQCAtMzA0LDYgKzMwNSw3IEBAIHN0YXRpYyB2 b2lkIF9faW5pdCB4ZW5fZmlsdGVyX2NwdV9tYXBzKHZvaWQpCiAjZW5kaWYKIAogfQorI2VuZGlm CiAKIHN0YXRpYyB2b2lkIF9faW5pdCB4ZW5fc21wX3ByZXBhcmVfYm9vdF9jcHUodm9pZCkKIHsK QEAgLTMxMSw2ICszMTMsNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgeGVuX3NtcF9wcmVwYXJlX2Jv b3RfY3B1KHZvaWQpCiAJbmF0aXZlX3NtcF9wcmVwYXJlX2Jvb3RfY3B1KCk7CiAKIAlpZiAoeGVu X3B2X2RvbWFpbigpKSB7CisjaWZkZWYgQ09ORklHX1hFTl9QVgogCQlpZiAoIXhlbl9mZWF0dXJl KFhFTkZFQVRfd3JpdGFibGVfcGFnZV90YWJsZXMpKQogCQkJLyogV2UndmUgc3dpdGNoZWQgdG8g dGhlICJyZWFsIiBwZXItY3B1IGdkdCwgc28gbWFrZQogCQkJICogc3VyZSB0aGUgb2xkIG1lbW9y eSBjYW4gYmUgcmVjeWNsZWQuICovCkBAIC0zMjcsNiArMzMwLDcgQEAgc3RhdGljIHZvaWQgX19p bml0IHhlbl9zbXBfcHJlcGFyZV9ib290X2NwdSh2b2lkKQogCiAJCXhlbl9maWx0ZXJfY3B1X21h cHMoKTsKIAkJeGVuX3NldHVwX3ZjcHVfaW5mb19wbGFjZW1lbnQoKTsKKyNlbmRpZgogCX0KIAog CS8qCkBAIC0zNDQsNiArMzQ4LDcgQEAgc3RhdGljIHZvaWQgX19pbml0IHhlbl9zbXBfcHJlcGFy ZV9ib290X2NwdSh2b2lkKQogCXhlbl9pbml0X3NwaW5sb2NrcygpOwogfQogCisjaWZkZWYgQ09O RklHX1hFTl9QVgogc3RhdGljIHZvaWQgX19pbml0IHhlbl9zbXBfcHJlcGFyZV9jcHVzKHVuc2ln bmVkIGludCBtYXhfY3B1cykKIHsKIAl1bnNpZ25lZCBjcHU7CkBAIC01MjUsMjIgKzUzMCw2IEBA IHN0YXRpYyBpbnQgeGVuX2NwdV9kaXNhYmxlKHZvaWQpCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRp YyB2b2lkIHhlbl9jcHVfZGllKHVuc2lnbmVkIGludCBjcHUpCi17Ci0Jd2hpbGUgKHhlbl9wdl9k b21haW4oKSAmJiBIWVBFUlZJU09SX3ZjcHVfb3AoVkNQVU9QX2lzX3VwLAotCQkJCQkJICAgICB4 ZW5fdmNwdV9ucihjcHUpLCBOVUxMKSkgewotCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5J TlRFUlJVUFRJQkxFKTsKLQkJc2NoZWR1bGVfdGltZW91dChIWi8xMCk7Ci0JfQotCi0JaWYgKGNv bW1vbl9jcHVfZGllKGNwdSkgPT0gMCkgewotCQl4ZW5fc21wX2ludHJfZnJlZShjcHUpOwotCQl4 ZW5fdW5pbml0X2xvY2tfY3B1KGNwdSk7Ci0JCXhlbl90ZWFyZG93bl90aW1lcihjcHUpOwotCQl4 ZW5fcG11X2ZpbmlzaChjcHUpOwotCX0KLX0KLQogc3RhdGljIHZvaWQgeGVuX3BsYXlfZGVhZCh2 b2lkKSAvKiB1c2VkIG9ubHkgd2l0aCBIT1RQTFVHX0NQVSAqLwogewogCXBsYXlfZGVhZF9jb21t b24oKTsKQEAgLTU5Miw2ICs1ODEsMjMgQEAgc3RhdGljIHZvaWQgeGVuX3N0b3Bfb3RoZXJfY3B1 cyhpbnQgd2FpdCkKIHsKIAlzbXBfY2FsbF9mdW5jdGlvbihzdG9wX3NlbGYsIE5VTEwsIHdhaXQp OwogfQorI2VuZGlmIC8qIENPTkZJR19YRU5fUFYgKi8KKworc3RhdGljIHZvaWQgeGVuX2NwdV9k aWUodW5zaWduZWQgaW50IGNwdSkKK3sKKwl3aGlsZSAoeGVuX3B2X2RvbWFpbigpICYmIEhZUEVS VklTT1JfdmNwdV9vcChWQ1BVT1BfaXNfdXAsCisJCQkJCQkgICAgIHhlbl92Y3B1X25yKGNwdSks IE5VTEwpKSB7CisJCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpOwor CQlzY2hlZHVsZV90aW1lb3V0KEhaLzEwKTsKKwl9CisKKwlpZiAoY29tbW9uX2NwdV9kaWUoY3B1 KSA9PSAwKSB7CisJCXhlbl9zbXBfaW50cl9mcmVlKGNwdSk7CisJCXhlbl91bmluaXRfbG9ja19j cHUoY3B1KTsKKwkJeGVuX3RlYXJkb3duX3RpbWVyKGNwdSk7CisJCXhlbl9wbXVfZmluaXNoKGNw dSk7CisJfQorfQogCiBzdGF0aWMgdm9pZCB4ZW5fc21wX3NlbmRfcmVzY2hlZHVsZShpbnQgY3B1 KQogewpAQCAtNzM4LDYgKzc0NCw3IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCB4ZW5faXJxX3dvcmtf aW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9 CiAKKyNpZmRlZiBDT05GSUdfWEVOX1BWCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNtcF9vcHMgeGVu X3NtcF9vcHMgX19pbml0Y29uc3QgPSB7CiAJLnNtcF9wcmVwYXJlX2Jvb3RfY3B1ID0geGVuX3Nt cF9wcmVwYXJlX2Jvb3RfY3B1LAogCS5zbXBfcHJlcGFyZV9jcHVzID0geGVuX3NtcF9wcmVwYXJl X2NwdXMsCkBAIC03NjAsNiArNzY3LDcgQEAgdm9pZCBfX2luaXQgeGVuX3NtcF9pbml0KHZvaWQp CiAJc21wX29wcyA9IHhlbl9zbXBfb3BzOwogCXhlbl9maWxsX3Bvc3NpYmxlX21hcCgpOwogfQor I2VuZGlmCiAKIHN0YXRpYyB2b2lkIF9faW5pdCB4ZW5faHZtX3NtcF9wcmVwYXJlX2NwdXModW5z aWduZWQgaW50IG1heF9jcHVzKQogewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYveGVuL3N1c3BlbmQu YyBiL2FyY2gveDg2L3hlbi9zdXNwZW5kLmMKaW5kZXggN2Y2NjRjNC4uMzdmNjM0ZiAxMDA2NDQK LS0tIGEvYXJjaC94ODYveGVuL3N1c3BlbmQuYworKysgYi9hcmNoL3g4Ni94ZW4vc3VzcGVuZC5j CkBAIC0xNiw2ICsxNiw3IEBACiAKIHN0YXRpYyB2b2lkIHhlbl9wdl9wcmVfc3VzcGVuZCh2b2lk KQogeworI2lmZGVmIENPTkZJR19YRU5fUFYKIAl4ZW5fbW1fcGluX2FsbCgpOwogCiAJeGVuX3N0 YXJ0X2luZm8tPnN0b3JlX21mbiA9IG1mbl90b19wZm4oeGVuX3N0YXJ0X2luZm8tPnN0b3JlX21m bik7CkBAIC0yOCw2ICsyOSw3IEBAIHN0YXRpYyB2b2lkIHhlbl9wdl9wcmVfc3VzcGVuZCh2b2lk KQogCWlmIChIWVBFUlZJU09SX3VwZGF0ZV92YV9tYXBwaW5nKGZpeF90b192aXJ0KEZJWF9QQVJB VklSVF9CT09UTUFQKSwKIAkJCQkJIF9fcHRlX21hKDApLCAwKSkKIAkJQlVHKCk7CisjZW5kaWYK IH0KIAogc3RhdGljIHZvaWQgeGVuX2h2bV9wb3N0X3N1c3BlbmQoaW50IHN1c3BlbmRfY2FuY2Vs bGVkKQpAQCAtNDgsNiArNTAsNyBAQCBzdGF0aWMgdm9pZCB4ZW5faHZtX3Bvc3Rfc3VzcGVuZChp bnQgc3VzcGVuZF9jYW5jZWxsZWQpCiAKIHN0YXRpYyB2b2lkIHhlbl9wdl9wb3N0X3N1c3BlbmQo aW50IHN1c3BlbmRfY2FuY2VsbGVkKQogeworI2lmZGVmIENPTkZJR19YRU5fUFYKIAl4ZW5fYnVp bGRfbWZuX2xpc3RfbGlzdCgpOwogCiAJeGVuX3NldHVwX3NoYXJlZF9pbmZvKCk7CkBAIC02Niw2 ICs2OSw3IEBAIHN0YXRpYyB2b2lkIHhlbl9wdl9wb3N0X3N1c3BlbmQoaW50IHN1c3BlbmRfY2Fu Y2VsbGVkKQogCX0KIAogCXhlbl9tbV91bnBpbl9hbGwoKTsKKyNlbmRpZgogfQogCiB2b2lkIHhl bl9hcmNoX3ByZV9zdXNwZW5kKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni94ZW4veGVuLWhl YWQuUyBiL2FyY2gveDg2L3hlbi94ZW4taGVhZC5TCmluZGV4IDdmOGQ4YWIuLmIwMDE2YjMgMTAw NjQ0Ci0tLSBhL2FyY2gveDg2L3hlbi94ZW4taGVhZC5TCisrKyBiL2FyY2gveDg2L3hlbi94ZW4t aGVhZC5TCkBAIC0zNSw2ICszNSw3IEBACiAjZGVmaW5lIFBWSF9GRUFUVVJFUyAoMCkKICNlbmRp ZgogCisjaWZkZWYgQ09ORklHX1hFTl9QVgogCV9fSU5JVAogRU5UUlkoc3RhcnR1cF94ZW4pCiAJ Y2xkCkBAIC01Myw2ICs1NCw3IEBAIEVOVFJZKHN0YXJ0dXBfeGVuKQogCWptcCB4ZW5fc3RhcnRf a2VybmVsCiAKIAlfX0ZJTklUCisjZW5kaWYKIAogI2lmZGVmIENPTkZJR19YRU5fUFZICiAvKgpA QCAtMTEyLDcgKzExNCw5IEBAIEVOVFJZKGh5cGVyY2FsbF9wYWdlKQogCS8qIE1hcCB0aGUgcDJt IHRhYmxlIHRvIGEgNTEyR0ItYWxpZ25lZCB1c2VyIGFkZHJlc3MuICovCiAJRUxGTk9URShYZW4s IFhFTl9FTEZOT1RFX0lOSVRfUDJNLCAgICAgICAucXVhZCBQR0RJUl9TSVpFKQogI2VuZGlmCisj aWZkZWYgQ09ORklHX1hFTl9QVgogCUVMRk5PVEUoWGVuLCBYRU5fRUxGTk9URV9FTlRSWSwgICAg ICAgICAgX0FTTV9QVFIgc3RhcnR1cF94ZW4pCisjZW5kaWYKIAlFTEZOT1RFKFhlbiwgWEVOX0VM Rk5PVEVfSFlQRVJDQUxMX1BBR0UsIF9BU01fUFRSIGh5cGVyY2FsbF9wYWdlKQogCUVMRk5PVEUo WGVuLCBYRU5fRUxGTk9URV9GRUFUVVJFUywgICAgICAgLmFzY2lpICIhd3JpdGFibGVfcGFnZV90 YWJsZXN8cGFlX3BnZGlyX2Fib3ZlXzRnYiI7IC5hc2NpeiBQVkhfRkVBVFVSRVNfU1RSKQogCUVM Rk5PVEUoWGVuLCBYRU5fRUxGTk9URV9TVVBQT1JURURfRkVBVFVSRVMsIC5sb25nIChQVkhfRkVB VFVSRVMpIHwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi94ZW4tb3BzLmggYi9hcmNoL3g4Ni94 ZW4veGVuLW9wcy5oCmluZGV4IDNjYmNlM2IuLmI0ZTFkMzUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2 L3hlbi94ZW4tb3BzLmgKKysrIGIvYXJjaC94ODYveGVuL3hlbi1vcHMuaApAQCAtNzYsNiArNzYs OCBAQCBpcnFyZXR1cm5fdCB4ZW5fZGVidWdfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9p ZCk7CiAKIGJvb2wgeGVuX3ZjcHVfc3RvbGVuKGludCB2Y3B1KTsKIAorZXh0ZXJuIGludCBoYXZl X3ZjcHVfaW5mb19wbGFjZW1lbnQ7CisKIHZvaWQgeGVuX3ZjcHVfc2V0dXAoaW50IGNwdSk7CiB2 b2lkIHhlbl9zZXR1cF92Y3B1X2luZm9fcGxhY2VtZW50KHZvaWQpOwogCmRpZmYgLS1naXQgYS9p bmNsdWRlL3hlbi94ZW4tb3BzLmggYi9pbmNsdWRlL3hlbi94ZW4tb3BzLmgKaW5kZXggYjU0ODZl Ni4uYmNmOTBlZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS94ZW4veGVuLW9wcy5oCisrKyBiL2luY2x1 ZGUveGVuL3hlbi1vcHMuaApAQCAtMTUsNiArMTUsOCBAQCBzdGF0aWMgaW5saW5lIHVpbnQzMl90 IHhlbl92Y3B1X25yKGludCBjcHUpCiAJcmV0dXJuIHBlcl9jcHUoeGVuX3ZjcHVfaWQsIGNwdSk7 CiB9CiAKK2V4dGVybiBib29sIHhlbl9ub3B2OworCiB2b2lkIHhlbl9hcmNoX3ByZV9zdXNwZW5k KHZvaWQpOwogdm9pZCB4ZW5fYXJjaF9wb3N0X3N1c3BlbmQoaW50IHN1c3BlbmRfY2FuY2VsbGVk KTsKIApAQCAtMzMsNiArMzUsMTEgQEAgdTY0IHhlbl9zdGVhbF9jbG9jayhpbnQgY3B1KTsKIAog aW50IHhlbl9zZXR1cF9zaHV0ZG93bl9ldmVudCh2b2lkKTsKIAoraW50IHhlbl9jcHVocF9zZXR1 cChpbnQgKCpjcHVfdXBfcHJlcGFyZV9jYikodW5zaWduZWQgaW50KSwKKwkJICAgIGludCAoKmNw dV9kZWFkX2NiKSh1bnNpZ25lZCBpbnQpKTsKKwordm9pZCB4ZW5fcmVib290KGludCByZWFzb24p OworCiBleHRlcm4gdW5zaWduZWQgbG9uZyAqeGVuX2NvbnRpZ3VvdXNfYml0bWFwOwogaW50IHhl bl9jcmVhdGVfY29udGlndW91c19yZWdpb24ocGh5c19hZGRyX3QgcHN0YXJ0LCB1bnNpZ25lZCBp bnQgb3JkZXIsCiAJCQkJdW5zaWduZWQgaW50IGFkZHJlc3NfYml0cywKLS0gCjIuNy40CgoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1h aWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczovL2xpc3RzLnhlbi5vcmcv eGVuLWRldmVsCg==