From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wei Liu Subject: [PATCH for-next v3 05/22] x86/pv: clean up emulate.c Date: Thu, 18 May 2017 18:09:47 +0100 Message-ID: <20170518171004.27204-6-wei.liu2@citrix.com> References: <20170518171004.27204-1-wei.liu2@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dBOwJ-0002nU-2h for xen-devel@lists.xenproject.org; Thu, 18 May 2017 17:10:15 +0000 In-Reply-To: <20170518171004.27204-1-wei.liu2@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Xen-devel Cc: Andrew Cooper , Wei Liu , Jan Beulich List-Id: xen-devel@lists.xenproject.org Rml4IGNvZGluZyBzdHlsZSBpc3N1ZXMuIFJlcGxhY2UgYm9vbF90IHdpdGggYm9vbC4gQWRkIHNw YWNlcyBhcm91bmQKYmluYXJ5IG9wcy4gVXNlIHVuc2lnbmVkIGludGVnZXIgZm9yIHNoaWZ0aW5n LiBFbGltaW5hdGUgVE9HR0xFX01PREUuCgpTaWduZWQtb2ZmLWJ5OiBXZWkgTGl1IDx3ZWkubGl1 MkBjaXRyaXguY29tPgpTaWduZWQtb2ZmLWJ5OiBBbmRyZXcgQ29vcGVyIDxhbmRyZXcuY29vcGVy M0BjaXRyaXguY29tPgotLS0KIHhlbi9hcmNoL3g4Ni9wdi9lbXVsYXRlLmMgfCAxMjMgKysrKysr KysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQs IDYzIGluc2VydGlvbnMoKyksIDYwIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3hlbi9hcmNo L3g4Ni9wdi9lbXVsYXRlLmMgYi94ZW4vYXJjaC94ODYvcHYvZW11bGF0ZS5jCmluZGV4IGUyNjFh ZWIwZjcuLmNhZTZjOWUzNTAgMTAwNjQ0Ci0tLSBhL3hlbi9hcmNoL3g4Ni9wdi9lbXVsYXRlLmMK KysrIGIveGVuL2FyY2gveDg2L3B2L2VtdWxhdGUuYwpAQCAtNjEsNyArNjEsNyBAQCBzdGF0aWMg aW50IHJlYWRfZGVzY3JpcHRvcih1bnNpZ25lZCBpbnQgc2VsLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgdW5zaWduZWQgbG9uZyAqYmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg IHVuc2lnbmVkIGxvbmcgKmxpbWl0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu ZWQgaW50ICphciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xfdCBpbnNuX2ZldGNo KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpbnNuX2ZldGNoKQogewogICAgIHN0 cnVjdCBkZXNjX3N0cnVjdCBkZXNjOwogCkBAIC0xMjYsNyArMTI2LDcgQEAgc3RydWN0IHByaXZf b3BfY3R4dCB7CiAjZGVmaW5lIFRTQ19BVVggMgogfTsKIAotLyogSS9PIGVtdWxhdGlvbiBzdXBw b3J0LiBIZWxwZXIgcm91dGluZXMgZm9yLCBhbmQgdHlwZSBvZiwgdGhlIHN0YWNrIHN0dWIuKi8K Ky8qIEkvTyBlbXVsYXRpb24gc3VwcG9ydC4gSGVscGVyIHJvdXRpbmVzIGZvciwgYW5kIHR5cGUg b2YsIHRoZSBzdGFjayBzdHViLiAqLwogdm9pZCBob3N0X3RvX2d1ZXN0X2dwcl9zd2l0Y2goc3Ry dWN0IGNwdV91c2VyX3JlZ3MgKik7CiB1bnNpZ25lZCBsb25nIGd1ZXN0X3RvX2hvc3RfZ3ByX3N3 aXRjaCh1bnNpZ25lZCBsb25nKTsKIApAQCAtMTY5LDcgKzE2OSw3IEBAIHN0YXRpYyBpb19lbXVs X3N0dWJfdCAqaW9fZW11bF9zdHViX3NldHVwKHN0cnVjdCBwcml2X29wX2N0eHQgKmN0eHQsIHU4 IG9wY29kZSwKIAogCiAvKiBQZXJmb3JtIElPUEwgY2hlY2sgYmV0d2VlbiB0aGUgdmNwdSdzIHNo YWRvd2VkIElPUEwsIGFuZCB0aGUgYXNzdW1lZCBjcGwuICovCi1zdGF0aWMgYm9vbF90IGlvcGxf b2soY29uc3Qgc3RydWN0IHZjcHUgKnYsIGNvbnN0IHN0cnVjdCBjcHVfdXNlcl9yZWdzICpyZWdz KQorc3RhdGljIGJvb2wgaW9wbF9vayhjb25zdCBzdHJ1Y3QgdmNwdSAqdiwgY29uc3Qgc3RydWN0 IGNwdV91c2VyX3JlZ3MgKnJlZ3MpCiB7CiAgICAgdW5zaWduZWQgaW50IGNwbCA9IGd1ZXN0X2tl cm5lbF9tb2RlKHYsIHJlZ3MpID8KICAgICAgICAgKFZNX0FTU0lTVCh2LT5kb21haW4sIGFyY2hp dGVjdHVyYWxfaW9wbCkgPyAwIDogMSkgOiAzOwpAQCAtMTgwLDE2ICsxODAsMTQgQEAgc3RhdGlj IGJvb2xfdCBpb3BsX29rKGNvbnN0IHN0cnVjdCB2Y3B1ICp2LCBjb25zdCBzdHJ1Y3QgY3B1X3Vz ZXJfcmVncyAqcmVncykKIH0KIAogLyogSGFzIHRoZSBndWVzdCByZXF1ZXN0ZWQgc3VmZmljaWVu dCBwZXJtaXNzaW9uIGZvciB0aGlzIEkvTyBhY2Nlc3M/ICovCi1zdGF0aWMgaW50IGd1ZXN0X2lv X29rYXkoCi0gICAgdW5zaWduZWQgaW50IHBvcnQsIHVuc2lnbmVkIGludCBieXRlcywKLSAgICBz dHJ1Y3QgdmNwdSAqdiwgc3RydWN0IGNwdV91c2VyX3JlZ3MgKnJlZ3MpCitzdGF0aWMgYm9vbCBn dWVzdF9pb19va2F5KHVuc2lnbmVkIGludCBwb3J0LCB1bnNpZ25lZCBpbnQgYnl0ZXMsCisgICAg ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2Y3B1ICp2LCBzdHJ1Y3QgY3B1X3VzZXJfcmVn cyAqcmVncykKIHsKICAgICAvKiBJZiBpbiB1c2VyIG1vZGUsIHN3aXRjaCB0byBrZXJuZWwgbW9k ZSBqdXN0IHRvIHJlYWQgSS9PIGJpdG1hcC4gKi8KLSAgICBpbnQgdXNlcl9tb2RlID0gISh2LT5h cmNoLmZsYWdzICYgVEZfa2VybmVsX21vZGUpOwotI2RlZmluZSBUT0dHTEVfTU9ERSgpIGlmICgg dXNlcl9tb2RlICkgdG9nZ2xlX2d1ZXN0X21vZGUodikKKyAgICBjb25zdCBib29sIHVzZXJfbW9k ZSA9ICEodi0+YXJjaC5mbGFncyAmIFRGX2tlcm5lbF9tb2RlKTsKIAogICAgIGlmICggaW9wbF9v ayh2LCByZWdzKSApCi0gICAgICAgIHJldHVybiAxOworICAgICAgICByZXR1cm4gdHJ1ZTsKIAog ICAgIGlmICggdi0+YXJjaC5wdl92Y3B1LmlvYm1wX2xpbWl0ID4gKHBvcnQgKyBieXRlcykgKQog ICAgIHsKQEAgLTE5OSw5ICsxOTcsMTEgQEAgc3RhdGljIGludCBndWVzdF9pb19va2F5KAogICAg ICAgICAgKiBHcmFiIHBlcm1pc3Npb24gYnl0ZXMgZnJvbSBndWVzdCBzcGFjZS4gSW5hY2Nlc3Np YmxlIGJ5dGVzIGFyZQogICAgICAgICAgKiByZWFkIGFzIDB4ZmYgKG5vIGFjY2VzcyBhbGxvd2Vk KS4KICAgICAgICAgICovCi0gICAgICAgIFRPR0dMRV9NT0RFKCk7CisgICAgICAgIGlmICggdXNl cl9tb2RlICkKKyAgICAgICAgICAgIHRvZ2dsZV9ndWVzdF9tb2RlKHYpOworCiAgICAgICAgIHN3 aXRjaCAoIF9fY29weV9mcm9tX2d1ZXN0X29mZnNldCh4LmJ5dGVzLCB2LT5hcmNoLnB2X3ZjcHUu aW9ibXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0Pj4z LCAyKSApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0ID4+ IDMsIDIpICkKICAgICAgICAgewogICAgICAgICBkZWZhdWx0OiB4LmJ5dGVzWzBdID0gfjA7CiAg ICAgICAgICAgICAvKiBmYWxsdGhyb3VnaCAqLwpAQCAtMjA5LDQzICsyMDksNDUgQEAgc3RhdGlj IGludCBndWVzdF9pb19va2F5KAogICAgICAgICAgICAgLyogZmFsbHRocm91Z2ggKi8KICAgICAg ICAgY2FzZSAwOiAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgVE9HR0xFX01PREUoKTsKIAot ICAgICAgICBpZiAoICh4Lm1hc2sgJiAoKCgxPDxieXRlcyktMSkgPDwgKHBvcnQmNykpKSA9PSAw ICkKLSAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICBpZiAoIHVzZXJfbW9kZSApCisgICAg ICAgICAgICB0b2dnbGVfZ3Vlc3RfbW9kZSh2KTsKKworICAgICAgICBpZiAoICh4Lm1hc2sgJiAo KCgxIDw8IGJ5dGVzKS0xKSA8PCAocG9ydCAmIDcpKSkgPT0gMCApCisgICAgICAgICAgICByZXR1 cm4gdHJ1ZTsKICAgICB9CiAKLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAK IC8qIEhhcyB0aGUgYWRtaW5pc3RyYXRvciBncmFudGVkIHN1ZmZpY2llbnQgcGVybWlzc2lvbiBm b3IgdGhpcyBJL08gYWNjZXNzPyAqLwotc3RhdGljIGJvb2xfdCBhZG1pbl9pb19va2F5KHVuc2ln bmVkIGludCBwb3J0LCB1bnNpZ25lZCBpbnQgYnl0ZXMsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3Qgc3RydWN0IGRvbWFpbiAqZCkKK3N0YXRpYyBib29sIGFkbWluX2lvX29rYXko dW5zaWduZWQgaW50IHBvcnQsIHVuc2lnbmVkIGludCBieXRlcywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3Qgc3RydWN0IGRvbWFpbiAqZCkKIHsKICAgICAvKgogICAgICAqIFBvcnQg MHhjZjggKENPTkZJR19BRERSRVNTKSBpcyBvbmx5IHZpc2libGUgZm9yIERXT1JEIGFjY2Vzc2Vz LgogICAgICAqIFdlIG5ldmVyIHBlcm1pdCBkaXJlY3QgYWNjZXNzIHRvIHRoYXQgcmVnaXN0ZXIu CiAgICAgICovCiAgICAgaWYgKCAocG9ydCA9PSAweGNmOCkgJiYgKGJ5dGVzID09IDQpICkKLSAg ICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8qIFdlIGFsc28g bmV2ZXIgcGVybWl0IGRpcmVjdCBhY2Nlc3MgdG8gdGhlIFJUQy9DTU9TIHJlZ2lzdGVycy4gKi8K ICAgICBpZiAoICgocG9ydCAmIH4xKSA9PSBSVENfUE9SVCgwKSkgKQotICAgICAgICByZXR1cm4g MDsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIGlvcG9ydHNfYWNjZXNzX3Bl cm1pdHRlZChkLCBwb3J0LCBwb3J0ICsgYnl0ZXMgLSAxKTsKIH0KIAotc3RhdGljIGJvb2xfdCBw Y2lfY2ZnX29rKHN0cnVjdCBkb21haW4gKmN1cnJkLCB1bnNpZ25lZCBpbnQgc3RhcnQsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNpemUsIHVpbnQzMl90ICp3cml0ZSkK K3N0YXRpYyBib29sIHBjaV9jZmdfb2soc3RydWN0IGRvbWFpbiAqY3VycmQsIHVuc2lnbmVkIGlu dCBzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNpemUsIHVpbnQz Ml90ICp3cml0ZSkKIHsKICAgICB1aW50MzJfdCBtYWNoaW5lX2JkZjsKIAogICAgIGlmICggIWlz X2hhcmR3YXJlX2RvbWFpbihjdXJyZCkgKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0 dXJuIGZhbHNlOwogCiAgICAgaWYgKCAhQ0Y4X0VOQUJMRUQoY3VycmQtPmFyY2gucGNpX2NmOCkg KQotICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBtYWNoaW5l X2JkZiA9IENGOF9CREYoY3VycmQtPmFyY2gucGNpX2NmOCk7CiAgICAgaWYgKCB3cml0ZSApCkBA IC0yNTMsNyArMjU1LDcgQEAgc3RhdGljIGJvb2xfdCBwY2lfY2ZnX29rKHN0cnVjdCBkb21haW4g KmN1cnJkLCB1bnNpZ25lZCBpbnQgc3RhcnQsCiAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcg KnJvX21hcCA9IHBjaV9nZXRfcm9fbWFwKDApOwogCiAgICAgICAgIGlmICggcm9fbWFwICYmIHRl c3RfYml0KG1hY2hpbmVfYmRmLCByb19tYXApICkKLSAgICAgICAgICAgIHJldHVybiAwOworICAg ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBzdGFydCB8PSBDRjhfQUREUl9MTyhj dXJyZC0+YXJjaC5wY2lfY2Y4KTsKICAgICAvKiBBTUQgZXh0ZW5kZWQgY29uZmlndXJhdGlvbiBz cGFjZSBhY2Nlc3M/ICovCkBAIC0yNjQsNyArMjY2LDcgQEAgc3RhdGljIGJvb2xfdCBwY2lfY2Zn X29rKHN0cnVjdCBkb21haW4gKmN1cnJkLCB1bnNpZ25lZCBpbnQgc3RhcnQsCiAgICAgICAgIHVp bnQ2NF90IG1zcl92YWw7CiAKICAgICAgICAgaWYgKCByZG1zcl9zYWZlKE1TUl9BTUQ2NF9OQl9D RkcsIG1zcl92YWwpICkKLSAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0dXJu IGZhbHNlOwogICAgICAgICBpZiAoIG1zcl92YWwgJiAoMVVMTCA8PCBBTUQ2NF9OQl9DRkdfQ0Y4 X0VYVF9FTkFCTEVfQklUKSApCiAgICAgICAgICAgICBzdGFydCB8PSBDRjhfQUREUl9ISShjdXJy ZC0+YXJjaC5wY2lfY2Y4KTsKICAgICB9CkBAIC0zNDEsNyArMzQzLDggQEAgdWludDMyX3QgZ3Vl c3RfaW9fcmVhZCh1bnNpZ25lZCBpbnQgcG9ydCwgdW5zaWduZWQgaW50IGJ5dGVzLAogfQogCiBz dGF0aWMgdW5zaWduZWQgaW50IGNoZWNrX2d1ZXN0X2lvX2JyZWFrcG9pbnQoc3RydWN0IHZjcHUg KnYsCi0gICAgdW5zaWduZWQgaW50IHBvcnQsIHVuc2lnbmVkIGludCBsZW4pCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHBvcnQsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50 IGxlbikKIHsKICAgICB1bnNpZ25lZCBpbnQgd2lkdGgsIGksIG1hdGNoID0gMDsKICAgICB1bnNp Z25lZCBsb25nIHN0YXJ0OwpAQCAtMzY5LDcgKzM3Miw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQg Y2hlY2tfZ3Vlc3RfaW9fYnJlYWtwb2ludChzdHJ1Y3QgdmNwdSAqdiwKICAgICAgICAgfQogCiAg ICAgICAgIGlmICggKHN0YXJ0IDwgKHBvcnQgKyBsZW4pKSAmJiAoKHN0YXJ0ICsgd2lkdGgpID4g cG9ydCkgKQotICAgICAgICAgICAgbWF0Y2ggfD0gMSA8PCBpOworICAgICAgICAgICAgbWF0Y2gg fD0gMXUgPDwgaTsKICAgICB9CiAKICAgICByZXR1cm4gbWF0Y2g7CkBAIC00MTAsNyArNDEzLDgg QEAgdm9pZCBndWVzdF9pb193cml0ZSh1bnNpZ25lZCBpbnQgcG9ydCwgdW5zaWduZWQgaW50IGJ5 dGVzLCB1aW50MzJfdCBkYXRhLAogewogICAgIGlmICggYWRtaW5faW9fb2theShwb3J0LCBieXRl cywgY3VycmQpICkKICAgICB7Ci0gICAgICAgIHN3aXRjaCAoIGJ5dGVzICkgeworICAgICAgICBz d2l0Y2ggKCBieXRlcyApCisgICAgICAgIHsKICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAg b3V0YigodWludDhfdClkYXRhLCBwb3J0KTsKICAgICAgICAgICAgIGlmICggcHZfcG9zdF9vdXRi X2hvb2sgKQpAQCAtODA4LDcgKzgxMiw3IEBAIHN0YXRpYyBpbnQgcHJpdl9vcF93cml0ZV9jcih1 bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBsb25nIHZhbCwKICAgICAgICAgaWYgKCAodmFsIF4g cmVhZF9jcjAoKSkgJiB+WDg2X0NSMF9UUyApCiAgICAgICAgIHsKICAgICAgICAgICAgIGdkcHJp bnRrKFhFTkxPR19XQVJOSU5HLAotICAgICAgICAgICAgICAgICAgICAiQXR0ZW1wdCB0byBjaGFu Z2UgdW5tb2RpZmlhYmxlIENSMCBmbGFnc1xuIik7CisgICAgICAgICAgICAgICAgICAgICAiQXR0 ZW1wdCB0byBjaGFuZ2UgdW5tb2RpZmlhYmxlIENSMCBmbGFnc1xuIik7CiAgICAgICAgICAgICBi cmVhazsKICAgICAgICAgfQogICAgICAgICBkb19mcHVfdGFza3N3aXRjaCghISh2YWwgJiBYODZf Q1IwX1RTKSk7CkBAIC05MjEsMTEgKzkyNSwxMSBAQCBzdGF0aWMgaW50IHByaXZfb3BfcmVhZF9t c3IodW5zaWduZWQgaW50IHJlZywgdWludDY0X3QgKnZhbCwKICAgICAgICAgKnZhbCA9IGN1cnIt PmFyY2gucHZfdmNwdS5nc19iYXNlX3VzZXI7CiAgICAgICAgIHJldHVybiBYODZFTVVMX09LQVk7 CiAKLSAgICAvKgotICAgICAqIEluIG9yZGVyIHRvIGZ1bGx5IHJldGFpbiBvcmlnaW5hbCBiZWhh dmlvciwgZGVmZXIgY2FsbGluZwotICAgICAqIHB2X3NvZnRfcmR0c2MoKSB1bnRpbCBhZnRlciBl bXVsYXRpb24uIFRoaXMgbWF5IHdhbnQvbmVlZCB0byBiZQotICAgICAqIHJlY29uc2lkZXJlZC4K LSAgICAgKi8KKyAgICAgICAgLyoKKyAgICAgICAgICogSW4gb3JkZXIgdG8gZnVsbHkgcmV0YWlu IG9yaWdpbmFsIGJlaGF2aW9yLCBkZWZlciBjYWxsaW5nCisgICAgICAgICAqIHB2X3NvZnRfcmR0 c2MoKSB1bnRpbCBhZnRlciBlbXVsYXRpb24uIFRoaXMgbWF5IHdhbnQvbmVlZCB0byBiZQorICAg ICAgICAgKiByZWNvbnNpZGVyZWQuCisgICAgICAgICAqLwogICAgIGNhc2UgTVNSX0lBMzJfVFND OgogICAgICAgICBwb2MtPnRzYyB8PSBUU0NfQkFTRTsKICAgICAgICAgZ290byBub3JtYWw7CkBA IC0xMDE1LDE2ICsxMDE5LDE2IEBAIHN0YXRpYyBpbnQgcHJpdl9vcF9yZWFkX21zcih1bnNpZ25l ZCBpbnQgcmVnLCB1aW50NjRfdCAqdmFsLAogICAgICAgICAgICAgKnZhbCB8PSBNU1JfTUlTQ19G RUFUVVJFU19DUFVJRF9GQVVMVElORzsKICAgICAgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKIAot ICAgIGNhc2UgTVNSX1A2X1BFUkZDVFIoMCkuLi5NU1JfUDZfUEVSRkNUUig3KToKLSAgICBjYXNl IE1TUl9QNl9FVk5UU0VMKDApLi4uTVNSX1A2X0VWTlRTRUwoMyk6Ci0gICAgY2FzZSBNU1JfQ09S RV9QRVJGX0ZJWEVEX0NUUjAuLi5NU1JfQ09SRV9QRVJGX0ZJWEVEX0NUUjI6Ci0gICAgY2FzZSBN U1JfQ09SRV9QRVJGX0ZJWEVEX0NUUl9DVFJMLi4uTVNSX0NPUkVfUEVSRl9HTE9CQUxfT1ZGX0NU Ukw6CisgICAgY2FzZSBNU1JfUDZfUEVSRkNUUigwKSAuLi4gTVNSX1A2X1BFUkZDVFIoNyk6Cisg ICAgY2FzZSBNU1JfUDZfRVZOVFNFTCgwKSAuLi4gTVNSX1A2X0VWTlRTRUwoMyk6CisgICAgY2Fz ZSBNU1JfQ09SRV9QRVJGX0ZJWEVEX0NUUjAgLi4uIE1TUl9DT1JFX1BFUkZfRklYRURfQ1RSMjoK KyAgICBjYXNlIE1TUl9DT1JFX1BFUkZfRklYRURfQ1RSX0NUUkwgLi4uIE1TUl9DT1JFX1BFUkZf R0xPQkFMX09WRl9DVFJMOgogICAgICAgICBpZiAoIGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciA9 PSBYODZfVkVORE9SX0lOVEVMICkKICAgICAgICAgewogICAgICAgICAgICAgdnBtdV9tc3IgPSB0 cnVlOwogICAgICAgICAgICAgLyogZmFsbCB0aHJvdWdoICovCi0gICAgY2FzZSBNU1JfQU1EX0ZB TTE1SF9FVk5UU0VMMC4uLk1TUl9BTURfRkFNMTVIX1BFUkZDVFI1OgotICAgIGNhc2UgTVNSX0s3 X0VWTlRTRUwwLi4uTVNSX0s3X1BFUkZDVFIzOgorICAgIGNhc2UgTVNSX0FNRF9GQU0xNUhfRVZO VFNFTDAgLi4uIE1TUl9BTURfRkFNMTVIX1BFUkZDVFI1OgorICAgIGNhc2UgTVNSX0s3X0VWTlRT RUwwIC4uLiBNU1JfSzdfUEVSRkNUUjM6CiAgICAgICAgICAgICBpZiAoIHZwbXVfbXNyIHx8IChi b290X2NwdV9kYXRhLng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9BTUQpICkKICAgICAgICAgICAg IHsKICAgICAgICAgICAgICAgICBpZiAoIHZwbXVfZG9fcmRtc3IocmVnLCB2YWwpICkKQEAgLTEy MjAsMTUgKzEyMjQsMTUgQEAgc3RhdGljIGludCBwcml2X29wX3dyaXRlX21zcih1bnNpZ25lZCBp bnQgcmVnLCB1aW50NjRfdCB2YWwsCiAgICAgICAgIGN1cnItPmFyY2guY3B1aWRfZmF1bHRpbmcg PSAhISh2YWwgJiBNU1JfTUlTQ19GRUFUVVJFU19DUFVJRF9GQVVMVElORyk7CiAgICAgICAgIHJl dHVybiBYODZFTVVMX09LQVk7CiAKLSAgICBjYXNlIE1TUl9QNl9QRVJGQ1RSKDApLi4uTVNSX1A2 X1BFUkZDVFIoNyk6Ci0gICAgY2FzZSBNU1JfUDZfRVZOVFNFTCgwKS4uLk1TUl9QNl9FVk5UU0VM KDMpOgotICAgIGNhc2UgTVNSX0NPUkVfUEVSRl9GSVhFRF9DVFIwLi4uTVNSX0NPUkVfUEVSRl9G SVhFRF9DVFIyOgotICAgIGNhc2UgTVNSX0NPUkVfUEVSRl9GSVhFRF9DVFJfQ1RSTC4uLk1TUl9D T1JFX1BFUkZfR0xPQkFMX09WRl9DVFJMOgorICAgIGNhc2UgTVNSX1A2X1BFUkZDVFIoMCkgLi4u IE1TUl9QNl9QRVJGQ1RSKDcpOgorICAgIGNhc2UgTVNSX1A2X0VWTlRTRUwoMCkgLi4uIE1TUl9Q Nl9FVk5UU0VMKDMpOgorICAgIGNhc2UgTVNSX0NPUkVfUEVSRl9GSVhFRF9DVFIwIC4uLiBNU1Jf Q09SRV9QRVJGX0ZJWEVEX0NUUjI6CisgICAgY2FzZSBNU1JfQ09SRV9QRVJGX0ZJWEVEX0NUUl9D VFJMIC4uLiBNU1JfQ09SRV9QRVJGX0dMT0JBTF9PVkZfQ1RSTDoKICAgICAgICAgaWYgKCBib290 X2NwdV9kYXRhLng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9JTlRFTCApCiAgICAgICAgIHsKICAg ICAgICAgICAgIHZwbXVfbXNyID0gdHJ1ZTsKLSAgICBjYXNlIE1TUl9BTURfRkFNMTVIX0VWTlRT RUwwLi4uTVNSX0FNRF9GQU0xNUhfUEVSRkNUUjU6Ci0gICAgY2FzZSBNU1JfSzdfRVZOVFNFTDAu Li5NU1JfSzdfUEVSRkNUUjM6CisgICAgY2FzZSBNU1JfQU1EX0ZBTTE1SF9FVk5UU0VMMCAuLi4g TVNSX0FNRF9GQU0xNUhfUEVSRkNUUjU6CisgICAgY2FzZSBNU1JfSzdfRVZOVFNFTDAgLi4uIE1T Ul9LN19QRVJGQ1RSMzoKICAgICAgICAgICAgIGlmICggdnBtdV9tc3IgfHwgKGJvb3RfY3B1X2Rh dGEueDg2X3ZlbmRvciA9PSBYODZfVkVORE9SX0FNRCkgKQogICAgICAgICAgICAgewogICAgICAg ICAgICAgICAgIGlmICggKHZwbXVfbW9kZSAmIFhFTlBNVV9NT0RFX0FMTCkgJiYKQEAgLTE0ODQs NyArMTQ4OCw2IEBAIHN0YXRpYyBpbnQgcmVhZF9nYXRlX2Rlc2NyaXB0b3IodW5zaWduZWQgaW50 IGdhdGVfc2VsLAogICAgIHN0cnVjdCBkZXNjX3N0cnVjdCBkZXNjOwogICAgIGNvbnN0IHN0cnVj dCBkZXNjX3N0cnVjdCAqcGRlc2M7CiAKLQogICAgIHBkZXNjID0gKGNvbnN0IHN0cnVjdCBkZXNj X3N0cnVjdCAqKQogICAgICAgICAoIShnYXRlX3NlbCAmIDQpID8gR0RUX1ZJUlRfU1RBUlQodikg OiBMRFRfVklSVF9TVEFSVCh2KSkKICAgICAgICAgKyAoZ2F0ZV9zZWwgPj4gMyk7CkBAIC0xNTMx LDggKzE1MzQsOCBAQCBzdGF0aWMgaW50IHJlYWRfZ2F0ZV9kZXNjcmlwdG9yKHVuc2lnbmVkIGlu dCBnYXRlX3NlbCwKICAgICByZXR1cm4gMTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgY2hlY2tf c3RhY2tfbGltaXQodW5zaWduZWQgaW50IGFyLCB1bnNpZ25lZCBpbnQgbGltaXQsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZXNwLCB1bnNpZ25lZCBp bnQgZGVjcikKK3N0YXRpYyBpbmxpbmUgYm9vbCBjaGVja19zdGFja19saW1pdCh1bnNpZ25lZCBp bnQgYXIsIHVuc2lnbmVkIGludCBsaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB1bnNpZ25lZCBpbnQgZXNwLCB1bnNpZ25lZCBpbnQgZGVjcikKIHsKICAgICByZXR1 cm4gKCgoZXNwIC0gZGVjcikgPCAoZXNwIC0gMSkpICYmCiAgICAgICAgICAgICAoIShhciAmIF9T RUdNRU5UX0VDKSA/IChlc3AgLSAxKSA8PSBsaW1pdCA6IChlc3AgLSBkZWNyKSA+IGxpbWl0KSk7 CkBAIC0xNzQ1LDE3ICsxNzQ4LDE3IEBAIHZvaWQgZW11bGF0ZV9nYXRlX29wKHN0cnVjdCBjcHVf dXNlcl9yZWdzICpyZWdzKQogICAgIHsKICAgICAgICAgdW5zaWduZWQgaW50IHNzLCBlc3AsICpz dGtwOwogICAgICAgICBpbnQgcmM7Ci0jZGVmaW5lIHB1c2goaXRlbSkgZG8gXAotICAgICAgICB7 IFwKLSAgICAgICAgICAgIC0tc3RrcDsgXAotICAgICAgICAgICAgZXNwIC09IDQ7IFwKLSAgICAg ICAgICAgIHJjID0gX19wdXRfdXNlcihpdGVtLCBzdGtwKTsgXAotICAgICAgICAgICAgaWYgKCBy YyApIFwKLSAgICAgICAgICAgIHsgXAotICAgICAgICAgICAgICAgIHB2X2luamVjdF9wYWdlX2Zh dWx0KFBGRUNfd3JpdGVfYWNjZXNzLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKHVuc2lnbmVkIGxvbmcpKHN0a3AgKyAxKSAtIHJjKTsgXAotICAgICAgICAgICAgICAg IHJldHVybjsgXAotICAgICAgICAgICAgfSBcCisjZGVmaW5lIHB1c2goaXRlbSkgZG8gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCisgICAgICAgICAgICAtLXN0a3A7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBlc3AgLT0gNDsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBy YyA9IF9fcHV0X3VzZXIoaXRlbSwgc3RrcCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCisgICAgICAgICAgICBpZiAoIHJjICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAg cHZfaW5qZWN0X3BhZ2VfZmF1bHQoUEZFQ193cml0ZV9hY2Nlc3MsICAgICAgICAgICAgICAgICBc CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpKHN0 a3AgKyAxKSAtIHJjKTsgICBcCisgICAgICAgICAgICAgICAgcmV0dXJuOyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICB9ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAg ICAgICAgIH0gd2hpbGUgKCAwICkKIAogICAgICAgICBpZiAoICgoYXIgPj4gMTMpICYgMykgPCAo cmVncy0+Y3MgJiAzKSApCi0tIAoyLjExLjAKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0 cy54ZW4ub3JnCmh0dHBzOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK