From mboxrd@z Thu Jan 1 00:00:00 1970 From: Yi Sun Subject: [PATCH v8 02/24] x86: refactor psr: remove L3 CAT/CDP codes. Date: Wed, 15 Feb 2017 16:49:17 +0800 Message-ID: <1487148579-7243-3-git-send-email-yi.y.sun@linux.intel.com> References: <1487148579-7243-1-git-send-email-yi.y.sun@linux.intel.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 1cdvKd-0007BF-Qb for xen-devel@lists.xenproject.org; Wed, 15 Feb 2017 08:52:59 +0000 In-Reply-To: <1487148579-7243-1-git-send-email-yi.y.sun@linux.intel.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: kevin.tian@intel.com, wei.liu2@citrix.com, andrew.cooper3@citrix.com, dario.faggioli@citrix.com, he.chen@linux.intel.com, ian.jackson@eu.citrix.com, Yi Sun , mengxu@cis.upenn.edu, jbeulich@suse.com, chao.p.peng@linux.intel.com List-Id: xen-devel@lists.xenproject.org VGhlIGN1cnJlbnQgY2FjaGUgYWxsb2NhdGlvbiBjb2RlcyBpbiBwc3IuYyBkbyBub3QgY29uc2lk ZXIKZnV0dXJlIGZlYXR1cmVzIGFkZGl0aW9uIGFuZCBhcmUgbm90IGZyaWVuZGx5IHRvIGV4dGVu ZC4KClRvIG1ha2UgcHNyLmMgYmUgbW9yZSBmbGV4aWJsZSB0byBhZGQgbmV3IGZlYXR1cmVzIGFu ZCBmdWxmaWxsCnRoZSBwcm9ncmFtIHByaW5jaXBsZSwgb3BlbiBmb3IgZXh0ZW5zaW9uIGJ1dCBj bG9zZWQgZm9yCm1vZGlmaWNhdGlvbiwgd2UgaGF2ZSB0byByZWZhY3RvciB0aGUgcHNyLmM6CjEu IEFuYWx5emUgY2FjaGUgYWxsb2NhdGlvbiBmZWF0dXJlcyBhbmQgYWJzdHJhY3QgZ2VuZXJhbCBk YXRhCiAgIHN0cnVjdHVyZXMuCjIuIEFuYWx5emUgdGhlIGluaXQgYW5kIGFsbCBvdGhlciBmdW5j dGlvbnMgZmxvdywgYWJzdHJhY3QgYWxsCiAgIHN0ZXBzIHRoYXQgZGlmZmVyZW50IGZlYXR1cmVz IG1heSBoYXZlIGRpZmZlcmVudCBpbXBsZW1lbnRhdGlvbnMuCiAgIE1ha2UgdGhlc2Ugc3RlcHMg YmUgY2FsbGJhY2sgZnVuY3Rpb25zIGFuZCByZWdpc3RlciBmZWF0dXJlCiAgIHNwZWNpZmljIGZ1 Y3Rpb25zLiBUaGVuLCB0aGUgbWFpbiBwcm9jZXNzZXMgd2lsbCBub3QgYmUgY2hhbmdlZAogICB3 aGVuIGludHJvZHVjaW5nIGEgbmV3IGZlYXR1cmUuCgpCZWNhdXNlIHRoZSBxdWFudGl0eSBvZiBy ZWZhY3RvciBjb2RlcyBpcyBiaWcgYW5kIHRoZSBsb2dpY3MgYXJlCmNoYW5nZWQgYSBsb3QsIGl0 IHdpbGwgY2F1c2UgcmV2aWV3ZXJzIGNvbmZ1c2VkIGlmIGp1c3QgY2hhbmdlCm9sZCBjb2Rlcy4g UmV2aWV3ZXJzIGhhdmUgdG8gdW5kZXJzdGFuZCBib3RoIG9sZCBjb2RlcyBhbmQgbmV3CmltcGxl bWVudGF0aW9ucy4gQWZ0ZXIgcmV2aWV3IGl0ZXJhdGlvbnMgZnJvbSBWMSB0byBWMywgSmFuIGhh cwpwcm9wb3NlZCB0byByZW1vdmUgYWxsIG9sZCBjYWNoZSBhbGxvY2F0aW9uIGNvZGVzIGZpcnN0 bHksIHRoZW4KaW1wbGVtZW50IG5ldyBjb2RlcyBzdGVwIGJ5IHN0ZXAuIFRoaXMgd2lsbCBoZWxw IHRvIG1ha2UgY29kZXMKYmUgbW9yZSBlYXNpbHkgcmV2aWV3YWJsZS4KClRoZXJlIGlzIG5vIGNv bnN0cnVjdGlvbiB3aXRob3V0IGRlc3RydWN0aW9uLiBTbywgdGhpcyBwYXRjaApyZW1vdmVzIGFs bCBjdXJyZW50IEwzIENBVC9DRFAgY29kZXMgaW4gcHNyLmMuIFRoZSBmb2xsb3dpbmcKcGF0Y2hl cyB3aWxsIGludHJvZHVjZSB0aGUgbmV3IG1lY2hhbmlzbS4KClNpZ25lZC1vZmYtYnk6IFlpIFN1 biA8eWkueS5zdW5AbGludXguaW50ZWwuY29tPgpBY2tlZC1ieTogSmFuIEJldWxpY2ggPGpiZXVs aWNoQHN1c2UuY29tPgpSZXZpZXdlZC1ieTogS29ucmFkIFJ6ZXN6dXRlayBXaWxrIDxrb25yYWQu d2lsa0BvcmFjbGUuY29tPgotLS0KIHhlbi9hcmNoL3g4Ni9wc3IuYyB8IDQ3MCArLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5n ZWQsIDUgaW5zZXJ0aW9ucygrKSwgNDY1IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3hlbi9h cmNoL3g4Ni9wc3IuYyBiL3hlbi9hcmNoL3g4Ni9wc3IuYwppbmRleCAwYjUwNzNjLi45NmE4NTg5 IDEwMDY0NAotLS0gYS94ZW4vYXJjaC94ODYvcHNyLmMKKysrIGIveGVuL2FyY2gveDg2L3Bzci5j CkBAIC0yMywyNCArMjMsNiBAQAogI2RlZmluZSBQU1JfQ0FUICAgICAgICAoMTw8MSkKICNkZWZp bmUgUFNSX0NEUCAgICAgICAgKDE8PDIpCiAKLXN0cnVjdCBwc3JfY2F0X2NibSB7Ci0gICAgdW5p b24gewotICAgICAgICB1aW50NjRfdCBjYm07Ci0gICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAg ICB1aW50NjRfdCBjb2RlOwotICAgICAgICAgICAgdWludDY0X3QgZGF0YTsKLSAgICAgICAgfTsK LSAgICB9OwotICAgIHVuc2lnbmVkIGludCByZWY7Ci19OwotCi1zdHJ1Y3QgcHNyX2NhdF9zb2Nr ZXRfaW5mbyB7Ci0gICAgdW5zaWduZWQgaW50IGNibV9sZW47Ci0gICAgdW5zaWduZWQgaW50IGNv c19tYXg7Ci0gICAgc3RydWN0IHBzcl9jYXRfY2JtICpjb3NfdG9fY2JtOwotICAgIHNwaW5sb2Nr X3QgY2JtX2xvY2s7Ci19OwotCiBzdHJ1Y3QgcHNyX2Fzc29jIHsKICAgICB1aW50NjRfdCB2YWw7 CiAgICAgdWludDY0X3QgY29zX21hc2s7CkBAIC00OCwyNiArMzAsMTEgQEAgc3RydWN0IHBzcl9h c3NvYyB7CiAKIHN0cnVjdCBwc3JfY210ICpfX3JlYWRfbW9zdGx5IHBzcl9jbXQ7CiAKLXN0YXRp YyB1bnNpZ25lZCBsb25nICpfX3JlYWRfbW9zdGx5IGNhdF9zb2NrZXRfZW5hYmxlOwotc3RhdGlj IHN0cnVjdCBwc3JfY2F0X3NvY2tldF9pbmZvICpfX3JlYWRfbW9zdGx5IGNhdF9zb2NrZXRfaW5m bzsKLXN0YXRpYyB1bnNpZ25lZCBsb25nICpfX3JlYWRfbW9zdGx5IGNkcF9zb2NrZXRfZW5hYmxl OwotCiBzdGF0aWMgdW5zaWduZWQgaW50IG9wdF9wc3I7CiBzdGF0aWMgdW5zaWduZWQgaW50IF9f aW5pdGRhdGEgb3B0X3JtaWRfbWF4ID0gMjU1Owotc3RhdGljIHVuc2lnbmVkIGludCBfX3JlYWRf bW9zdGx5IG9wdF9jb3NfbWF4ID0gMjU1Owogc3RhdGljIHVpbnQ2NF90IHJtaWRfbWFzazsKIHN0 YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcHNyX2Fzc29jLCBwc3JfYXNzb2MpOwogCi1zdGF0 aWMgc3RydWN0IHBzcl9jYXRfY2JtICp0ZW1wX2Nvc190b19jYm07Ci0KLXN0YXRpYyB1bnNpZ25l ZCBpbnQgZ2V0X3NvY2tldF9jcHUodW5zaWduZWQgaW50IHNvY2tldCkKLXsKLSAgICBpZiAoIGxp a2VseShzb2NrZXQgPCBucl9zb2NrZXRzKSApCi0gICAgICAgIHJldHVybiBjcHVtYXNrX2FueShz b2NrZXRfY3B1bWFza1tzb2NrZXRdKTsKLQotICAgIHJldHVybiBucl9jcHVfaWRzOwotfQotCiBz dGF0aWMgdm9pZCBfX2luaXQgcGFyc2VfcHNyX2Jvb2woY2hhciAqcywgY2hhciAqdmFsdWUsIGNo YXIgKmZlYXR1cmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg aW50IG1hc2spCiB7CkBAIC0xMDcsOSArNzQsNiBAQCBzdGF0aWMgdm9pZCBfX2luaXQgcGFyc2Vf cHNyX3BhcmFtKGNoYXIgKnMpCiAgICAgICAgIGlmICggdmFsX3N0ciAmJiAhc3RyY21wKHMsICJy bWlkX21heCIpICkKICAgICAgICAgICAgIG9wdF9ybWlkX21heCA9IHNpbXBsZV9zdHJ0b3VsKHZh bF9zdHIsIE5VTEwsIDApOwogCi0gICAgICAgIGlmICggdmFsX3N0ciAmJiAhc3RyY21wKHMsICJj b3NfbWF4IikgKQotICAgICAgICAgICAgb3B0X2Nvc19tYXggPSBzaW1wbGVfc3RydG91bCh2YWxf c3RyLCBOVUxMLCAwKTsKLQogICAgICAgICBzID0gc3MgKyAxOwogICAgIH0gd2hpbGUgKCBzcyAp OwogfQpAQCAtMjEzLDE2ICsxNzcsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcHNyX2Fzc29jX2lu aXQodm9pZCkKIHsKICAgICBzdHJ1Y3QgcHNyX2Fzc29jICpwc3JhID0gJnRoaXNfY3B1KHBzcl9h c3NvYyk7CiAKLSAgICBpZiAoIGNhdF9zb2NrZXRfaW5mbyApCi0gICAgewotICAgICAgICB1bnNp Z25lZCBpbnQgc29ja2V0ID0gY3B1X3RvX3NvY2tldChzbXBfcHJvY2Vzc29yX2lkKCkpOwotCi0g ICAgICAgIGlmICggdGVzdF9iaXQoc29ja2V0LCBjYXRfc29ja2V0X2VuYWJsZSkgKQotICAgICAg ICAgICAgcHNyYS0+Y29zX21hc2sgPSAoKDF1bGwgPDwgZ2V0X2NvdW50X29yZGVyKAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjYXRfc29ja2V0X2luZm9bc29ja2V0XS5jb3NfbWF4KSkg LSAxKSA8PCAzMjsKLSAgICB9Ci0KLSAgICBpZiAoIHBzcl9jbXRfZW5hYmxlZCgpIHx8IHBzcmEt PmNvc19tYXNrICkKKyAgICBpZiAoIHBzcl9jbXRfZW5hYmxlZCgpICkKICAgICAgICAgcmRtc3Js KE1TUl9JQTMyX1BTUl9BU1NPQywgcHNyYS0+dmFsKTsKIH0KIApAQCAtMjMxLDEyICsxODYsNiBA QCBzdGF0aWMgaW5saW5lIHZvaWQgcHNyX2Fzc29jX3JtaWQodWludDY0X3QgKnJlZywgdW5zaWdu ZWQgaW50IHJtaWQpCiAgICAgKnJlZyA9ICgqcmVnICYgfnJtaWRfbWFzaykgfCAocm1pZCAmIHJt aWRfbWFzayk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBwc3JfYXNzb2NfY29zKHVpbnQ2NF90 ICpyZWcsIHVuc2lnbmVkIGludCBjb3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB1aW50NjRfdCBjb3NfbWFzaykKLXsKLSAgICAqcmVnID0gKCpyZWcgJiB+Y29zX21hc2spIHwg KCgodWludDY0X3QpY29zIDw8IDMyKSAmIGNvc19tYXNrKTsKLX0KLQogdm9pZCBwc3JfY3R4dF9z d2l0Y2hfdG8oc3RydWN0IGRvbWFpbiAqZCkKIHsKICAgICBzdHJ1Y3QgcHNyX2Fzc29jICpwc3Jh ID0gJnRoaXNfY3B1KHBzcl9hc3NvYyk7CkBAIC0yNDUsNDU5ICsxOTQsNTQgQEAgdm9pZCBwc3Jf Y3R4dF9zd2l0Y2hfdG8oc3RydWN0IGRvbWFpbiAqZCkKICAgICBpZiAoIHBzcl9jbXRfZW5hYmxl ZCgpICkKICAgICAgICAgcHNyX2Fzc29jX3JtaWQoJnJlZywgZC0+YXJjaC5wc3Jfcm1pZCk7CiAK LSAgICBpZiAoIHBzcmEtPmNvc19tYXNrICkKLSAgICAgICAgcHNyX2Fzc29jX2NvcygmcmVnLCBk LT5hcmNoLnBzcl9jb3NfaWRzID8KLSAgICAgICAgICAgICAgICAgICAgICBkLT5hcmNoLnBzcl9j b3NfaWRzW2NwdV90b19zb2NrZXQoc21wX3Byb2Nlc3Nvcl9pZCgpKV0gOgotICAgICAgICAgICAg ICAgICAgICAgIDAsIHBzcmEtPmNvc19tYXNrKTsKLQogICAgIGlmICggcmVnICE9IHBzcmEtPnZh bCApCiAgICAgewogICAgICAgICB3cm1zcmwoTVNSX0lBMzJfUFNSX0FTU09DLCByZWcpOwogICAg ICAgICBwc3JhLT52YWwgPSByZWc7CiAgICAgfQogfQotc3RhdGljIHN0cnVjdCBwc3JfY2F0X3Nv Y2tldF9pbmZvICpnZXRfY2F0X3NvY2tldF9pbmZvKHVuc2lnbmVkIGludCBzb2NrZXQpCi17Ci0g ICAgaWYgKCAhY2F0X3NvY2tldF9pbmZvICkKLSAgICAgICAgcmV0dXJuIEVSUl9QVFIoLUVOT0RF Vik7Ci0KLSAgICBpZiAoIHNvY2tldCA+PSBucl9zb2NrZXRzICkKLSAgICAgICAgcmV0dXJuIEVS Ul9QVFIoLUVOT1RTT0NLKTsKLQotICAgIGlmICggIXRlc3RfYml0KHNvY2tldCwgY2F0X3NvY2tl dF9lbmFibGUpICkKLSAgICAgICAgcmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7Ci0KLSAgICByZXR1 cm4gY2F0X3NvY2tldF9pbmZvICsgc29ja2V0OwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2xfdCBj ZHBfaXNfZW5hYmxlZCh1bnNpZ25lZCBpbnQgc29ja2V0KQotewotICAgIHJldHVybiBjZHBfc29j a2V0X2VuYWJsZSAmJiB0ZXN0X2JpdChzb2NrZXQsIGNkcF9zb2NrZXRfZW5hYmxlKTsKLX0KIAog aW50IHBzcl9nZXRfY2F0X2wzX2luZm8odW5zaWduZWQgaW50IHNvY2tldCwgdWludDMyX3QgKmNi bV9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAqY29zX21heCwgdWludDMy X3QgKmZsYWdzKQogewotICAgIHN0cnVjdCBwc3JfY2F0X3NvY2tldF9pbmZvICppbmZvID0gZ2V0 X2NhdF9zb2NrZXRfaW5mbyhzb2NrZXQpOwotCi0gICAgaWYgKCBJU19FUlIoaW5mbykgKQotICAg ICAgICByZXR1cm4gUFRSX0VSUihpbmZvKTsKLQotICAgICpjYm1fbGVuID0gaW5mby0+Y2JtX2xl bjsKLSAgICAqY29zX21heCA9IGluZm8tPmNvc19tYXg7Ci0KLSAgICAqZmxhZ3MgPSAwOwotICAg IGlmICggY2RwX2lzX2VuYWJsZWQoc29ja2V0KSApCi0gICAgICAgICpmbGFncyB8PSBYRU5fU1lT Q1RMX1BTUl9DQVRfTDNfQ0RQOwotCiAgICAgcmV0dXJuIDA7CiB9CiAKIGludCBwc3JfZ2V0X2wz X2NibShzdHJ1Y3QgZG9tYWluICpkLCB1bnNpZ25lZCBpbnQgc29ja2V0LAogICAgICAgICAgICAg ICAgICAgIHVpbnQ2NF90ICpjYm0sIGVudW0gY2JtX3R5cGUgdHlwZSkKIHsKLSAgICBzdHJ1Y3Qg cHNyX2NhdF9zb2NrZXRfaW5mbyAqaW5mbyA9IGdldF9jYXRfc29ja2V0X2luZm8oc29ja2V0KTsK LSAgICBib29sX3QgY2RwX2VuYWJsZWQgPSBjZHBfaXNfZW5hYmxlZChzb2NrZXQpOwotCi0gICAg aWYgKCBJU19FUlIoaW5mbykgKQotICAgICAgICByZXR1cm4gUFRSX0VSUihpbmZvKTsKLQotICAg IHN3aXRjaCAoIHR5cGUgKQotICAgIHsKLSAgICBjYXNlIFBTUl9DQk1fVFlQRV9MMzoKLSAgICAg ICAgaWYgKCBjZHBfZW5hYmxlZCApCi0gICAgICAgICAgICByZXR1cm4gLUVYREVWOwotICAgICAg ICAqY2JtID0gaW5mby0+Y29zX3RvX2NibVtkLT5hcmNoLnBzcl9jb3NfaWRzW3NvY2tldF1dLmNi bTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFBTUl9DQk1fVFlQRV9MM19DT0RFOgotICAg ICAgICBpZiAoICFjZHBfZW5hYmxlZCApCi0gICAgICAgICAgICAqY2JtID0gaW5mby0+Y29zX3Rv X2NibVtkLT5hcmNoLnBzcl9jb3NfaWRzW3NvY2tldF1dLmNibTsKLSAgICAgICAgZWxzZQotICAg ICAgICAgICAgKmNibSA9IGluZm8tPmNvc190b19jYm1bZC0+YXJjaC5wc3JfY29zX2lkc1tzb2Nr ZXRdXS5jb2RlOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgUFNSX0NCTV9UWVBFX0wzX0RB VEE6Ci0gICAgICAgIGlmICggIWNkcF9lbmFibGVkICkKLSAgICAgICAgICAgICpjYm0gPSBpbmZv LT5jb3NfdG9fY2JtW2QtPmFyY2gucHNyX2Nvc19pZHNbc29ja2V0XV0uY2JtOwotICAgICAgICBl bHNlCi0gICAgICAgICAgICAqY2JtID0gaW5mby0+Y29zX3RvX2NibVtkLT5hcmNoLnBzcl9jb3Nf aWRzW3NvY2tldF1dLmRhdGE7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgZGVmYXVsdDoKLSAgICAg ICAgQVNTRVJUX1VOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0 YXRpYyBib29sX3QgcHNyX2NoZWNrX2NibSh1bnNpZ25lZCBpbnQgY2JtX2xlbiwgdWludDY0X3Qg Y2JtKQotewotICAgIHVuc2lnbmVkIGludCBmaXJzdF9iaXQsIHplcm9fYml0OwotCi0gICAgLyog U2V0IGJpdHMgc2hvdWxkIG9ubHkgaW4gdGhlIHJhbmdlIG9mIFswLCBjYm1fbGVuKS4gKi8KLSAg ICBpZiAoIGNibSAmICh+MHVsbCA8PCBjYm1fbGVuKSApCi0gICAgICAgIHJldHVybiAwOwotCi0g ICAgLyogQXQgbGVhc3Qgb25lIGJpdCBuZWVkIHRvIGJlIHNldC4gKi8KLSAgICBpZiAoIGNibSA9 PSAwICkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBmaXJzdF9iaXQgPSBmaW5kX2ZpcnN0X2Jp dCgmY2JtLCBjYm1fbGVuKTsKLSAgICB6ZXJvX2JpdCA9IGZpbmRfbmV4dF96ZXJvX2JpdCgmY2Jt LCBjYm1fbGVuLCBmaXJzdF9iaXQpOwotCi0gICAgLyogU2V0IGJpdHMgc2hvdWxkIGJlIGNvbnRp Z3VvdXMuICovCi0gICAgaWYgKCB6ZXJvX2JpdCA8IGNibV9sZW4gJiYKLSAgICAgICAgIGZpbmRf bmV4dF9iaXQoJmNibSwgY2JtX2xlbiwgemVyb19iaXQpIDwgY2JtX2xlbiApCi0gICAgICAgIHJl dHVybiAwOwotCi0gICAgcmV0dXJuIDE7Ci19Ci0KLXN0cnVjdCBjb3NfY2JtX2luZm8KLXsKLSAg ICB1bnNpZ25lZCBpbnQgY29zOwotICAgIGJvb2xfdCBjZHA7Ci0gICAgdWludDY0X3QgY2JtX2Nv ZGU7Ci0gICAgdWludDY0X3QgY2JtX2RhdGE7Ci19OwotCi1zdGF0aWMgdm9pZCBkb193cml0ZV9s M19jYm0odm9pZCAqZGF0YSkKLXsKLSAgICBzdHJ1Y3QgY29zX2NibV9pbmZvICppbmZvID0gZGF0 YTsKLQotICAgIGlmICggaW5mby0+Y2RwICkKLSAgICB7Ci0gICAgICAgIHdybXNybChNU1JfSUEz Ml9QU1JfTDNfTUFTS19DT0RFKGluZm8tPmNvcyksIGluZm8tPmNibV9jb2RlKTsKLSAgICAgICAg d3Jtc3JsKE1TUl9JQTMyX1BTUl9MM19NQVNLX0RBVEEoaW5mby0+Y29zKSwgaW5mby0+Y2JtX2Rh dGEpOwotICAgIH0KLSAgICBlbHNlCi0gICAgICAgIHdybXNybChNU1JfSUEzMl9QU1JfTDNfTUFT SyhpbmZvLT5jb3MpLCBpbmZvLT5jYm1fY29kZSk7Ci19Ci0KLXN0YXRpYyBpbnQgd3JpdGVfbDNf Y2JtKHVuc2lnbmVkIGludCBzb2NrZXQsIHVuc2lnbmVkIGludCBjb3MsCi0gICAgICAgICAgICAg ICAgICAgICAgICB1aW50NjRfdCBjYm1fY29kZSwgdWludDY0X3QgY2JtX2RhdGEsIGJvb2xfdCBj ZHApCi17Ci0gICAgc3RydWN0IGNvc19jYm1faW5mbyBpbmZvID0KLSAgICB7Ci0gICAgICAgIC5j b3MgPSBjb3MsCi0gICAgICAgIC5jYm1fY29kZSA9IGNibV9jb2RlLAotICAgICAgICAuY2JtX2Rh dGEgPSBjYm1fZGF0YSwKLSAgICAgICAgLmNkcCA9IGNkcCwKLSAgICB9OwotCi0gICAgaWYgKCBz b2NrZXQgPT0gY3B1X3RvX3NvY2tldChzbXBfcHJvY2Vzc29yX2lkKCkpICkKLSAgICAgICAgZG9f d3JpdGVfbDNfY2JtKCZpbmZvKTsKLSAgICBlbHNlCi0gICAgewotICAgICAgICB1bnNpZ25lZCBp bnQgY3B1ID0gZ2V0X3NvY2tldF9jcHUoc29ja2V0KTsKLQotICAgICAgICBpZiAoIGNwdSA+PSBu cl9jcHVfaWRzICkKLSAgICAgICAgICAgIHJldHVybiAtRU5PVFNPQ0s7Ci0gICAgICAgIG9uX3Nl bGVjdGVkX2NwdXMoY3B1bWFza19vZihjcHUpLCBkb193cml0ZV9sM19jYm0sICZpbmZvLCAxKTsK LSAgICB9Ci0KICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBmaW5kX2NvcyhzdHJ1Y3Qg cHNyX2NhdF9jYm0gKm1hcCwgdW5zaWduZWQgaW50IGNvc19tYXgsCi0gICAgICAgICAgICAgICAg ICAgIHVpbnQ2NF90IGNibV9jb2RlLCB1aW50NjRfdCBjYm1fZGF0YSwgYm9vbF90IGNkcF9lbmFi bGVkKQotewotICAgIHVuc2lnbmVkIGludCBjb3M7Ci0KLSAgICBmb3IgKCBjb3MgPSAwOyBjb3Mg PD0gY29zX21heDsgY29zKysgKQotICAgIHsKLSAgICAgICAgaWYgKCAobWFwW2Nvc10ucmVmIHx8 IGNvcyA9PSAwKSAmJgotICAgICAgICAgICAgICgoIWNkcF9lbmFibGVkICYmIG1hcFtjb3NdLmNi bSA9PSBjYm1fY29kZSkgfHwKLSAgICAgICAgICAgICAgKGNkcF9lbmFibGVkICYmIG1hcFtjb3Nd LmNvZGUgPT0gY2JtX2NvZGUgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcFtj b3NdLmRhdGEgPT0gY2JtX2RhdGEpKSApCi0gICAgICAgICAgICByZXR1cm4gY29zOwotICAgIH0K LQotICAgIHJldHVybiAtRU5PRU5UOwotfQotCi1zdGF0aWMgaW50IHBpY2tfYXZhaWxfY29zKHN0 cnVjdCBwc3JfY2F0X2NibSAqbWFwLCB1bnNpZ25lZCBpbnQgY29zX21heCwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG9sZF9jb3MpCi17Ci0gICAgdW5zaWduZWQgaW50 IGNvczsKLQotICAgIC8qIElmIG9sZCBjb3MgaXMgcmVmZXJyZWQgb25seSBieSB0aGUgZG9tYWlu LCB0aGVuIHVzZSBpdC4gKi8KLSAgICBpZiAoIG1hcFtvbGRfY29zXS5yZWYgPT0gMSAmJiBvbGRf Y29zICE9IDAgKQotICAgICAgICByZXR1cm4gb2xkX2NvczsKLQotICAgIC8qIEZpbmQgYW4gdW51 c2VkIG9uZSBvdGhlciB0aGFuIGNvczAuICovCi0gICAgZm9yICggY29zID0gMTsgY29zIDw9IGNv c19tYXg7IGNvcysrICkKLSAgICAgICAgaWYgKCBtYXBbY29zXS5yZWYgPT0gMCApCi0gICAgICAg ICAgICByZXR1cm4gY29zOwotCi0gICAgcmV0dXJuIC1FTk9FTlQ7Ci19Ci0KIGludCBwc3Jfc2V0 X2wzX2NibShzdHJ1Y3QgZG9tYWluICpkLCB1bnNpZ25lZCBpbnQgc29ja2V0LAogICAgICAgICAg ICAgICAgICAgIHVpbnQ2NF90IGNibSwgZW51bSBjYm1fdHlwZSB0eXBlKQogewotICAgIHVuc2ln bmVkIGludCBvbGRfY29zLCBjb3NfbWF4OwotICAgIGludCBjb3MsIHJldDsKLSAgICB1aW50NjRf dCBjYm1fZGF0YSwgY2JtX2NvZGU7Ci0gICAgYm9vbF90IGNkcF9lbmFibGVkID0gY2RwX2lzX2Vu YWJsZWQoc29ja2V0KTsKLSAgICBzdHJ1Y3QgcHNyX2NhdF9jYm0gKm1hcDsKLSAgICBzdHJ1Y3Qg cHNyX2NhdF9zb2NrZXRfaW5mbyAqaW5mbyA9IGdldF9jYXRfc29ja2V0X2luZm8oc29ja2V0KTsK LQotICAgIGlmICggSVNfRVJSKGluZm8pICkKLSAgICAgICAgcmV0dXJuIFBUUl9FUlIoaW5mbyk7 Ci0KLSAgICBpZiAoICFwc3JfY2hlY2tfY2JtKGluZm8tPmNibV9sZW4sIGNibSkgKQotICAgICAg ICByZXR1cm4gLUVJTlZBTDsKLQotICAgIGlmICggIWNkcF9lbmFibGVkICYmICh0eXBlID09IFBT Ul9DQk1fVFlQRV9MM19DT0RFIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPT0g UFNSX0NCTV9UWVBFX0wzX0RBVEEpICkKLSAgICAgICAgcmV0dXJuIC1FTlhJTzsKLQotICAgIGNv c19tYXggPSBpbmZvLT5jb3NfbWF4OwotICAgIG9sZF9jb3MgPSBkLT5hcmNoLnBzcl9jb3NfaWRz W3NvY2tldF07Ci0gICAgbWFwID0gaW5mby0+Y29zX3RvX2NibTsKLQotICAgIHN3aXRjaCAoIHR5 cGUgKQotICAgIHsKLSAgICBjYXNlIFBTUl9DQk1fVFlQRV9MMzoKLSAgICAgICAgY2JtX2NvZGUg PSBjYm07Ci0gICAgICAgIGNibV9kYXRhID0gY2JtOwotICAgICAgICBicmVhazsKLQotICAgIGNh c2UgUFNSX0NCTV9UWVBFX0wzX0NPREU6Ci0gICAgICAgIGNibV9jb2RlID0gY2JtOwotICAgICAg ICBjYm1fZGF0YSA9IG1hcFtvbGRfY29zXS5kYXRhOwotICAgICAgICBicmVhazsKLQotICAgIGNh c2UgUFNSX0NCTV9UWVBFX0wzX0RBVEE6Ci0gICAgICAgIGNibV9jb2RlID0gbWFwW29sZF9jb3Nd LmNvZGU7Ci0gICAgICAgIGNibV9kYXRhID0gY2JtOwotICAgICAgICBicmVhazsKLQotICAgIGRl ZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9VTlJFQUNIQUJMRSgpOwotICAgICAgICByZXR1cm4gLUVJ TlZBTDsKLSAgICB9Ci0KLSAgICBzcGluX2xvY2soJmluZm8tPmNibV9sb2NrKTsKLSAgICBjb3Mg PSBmaW5kX2NvcyhtYXAsIGNvc19tYXgsIGNibV9jb2RlLCBjYm1fZGF0YSwgY2RwX2VuYWJsZWQp OwotICAgIGlmICggY29zID49IDAgKQotICAgIHsKLSAgICAgICAgaWYgKCBjb3MgPT0gb2xkX2Nv cyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHNwaW5fdW5sb2NrKCZpbmZvLT5jYm1fbG9jayk7 Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAg ewotICAgICAgICBjb3MgPSBwaWNrX2F2YWlsX2NvcyhtYXAsIGNvc19tYXgsIG9sZF9jb3MpOwot ICAgICAgICBpZiAoIGNvcyA8IDAgKQotICAgICAgICB7Ci0gICAgICAgICAgICBzcGluX3VubG9j aygmaW5mby0+Y2JtX2xvY2spOwotICAgICAgICAgICAgcmV0dXJuIGNvczsKLSAgICAgICAgfQot Ci0gICAgICAgIC8qIFdlIHRyeSB0byBhdm9pZCB3cml0aW5nIE1TUi4gKi8KLSAgICAgICAgaWYg KCAoY2RwX2VuYWJsZWQgJiYKLSAgICAgICAgICAgICAobWFwW2Nvc10uY29kZSAhPSBjYm1fY29k ZSB8fCBtYXBbY29zXS5kYXRhICE9IGNibV9kYXRhKSkgfHwKLSAgICAgICAgICAgICAoIWNkcF9l bmFibGVkICYmIG1hcFtjb3NdLmNibSAhPSBjYm1fY29kZSkgKQotICAgICAgICB7Ci0gICAgICAg ICAgICByZXQgPSB3cml0ZV9sM19jYm0oc29ja2V0LCBjb3MsIGNibV9jb2RlLCBjYm1fZGF0YSwg Y2RwX2VuYWJsZWQpOwotICAgICAgICAgICAgaWYgKCByZXQgKQotICAgICAgICAgICAgewotICAg ICAgICAgICAgICAgIHNwaW5fdW5sb2NrKCZpbmZvLT5jYm1fbG9jayk7Ci0gICAgICAgICAgICAg ICAgcmV0dXJuIHJldDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1hcFtjb3NdLmNvZGUg PSBjYm1fY29kZTsKLSAgICAgICAgICAgIG1hcFtjb3NdLmRhdGEgPSBjYm1fZGF0YTsKLSAgICAg ICAgfQotICAgIH0KLQotICAgIG1hcFtjb3NdLnJlZisrOwotICAgIG1hcFtvbGRfY29zXS5yZWYt LTsKLSAgICBzcGluX3VubG9jaygmaW5mby0+Y2JtX2xvY2spOwotCi0gICAgZC0+YXJjaC5wc3Jf Y29zX2lkc1tzb2NrZXRdID0gY29zOwotCiAgICAgcmV0dXJuIDA7CiB9CiAKLS8qIENhbGxlZCB3 aXRoIGRvbWFpbiBsb2NrIGhlbGQsIG5vIGV4dHJhIGxvY2sgbmVlZGVkIGZvciAncHNyX2Nvc19p ZHMnICovCi1zdGF0aWMgdm9pZCBwc3JfZnJlZV9jb3Moc3RydWN0IGRvbWFpbiAqZCkKLXsKLSAg ICB1bnNpZ25lZCBpbnQgc29ja2V0OwotICAgIHVuc2lnbmVkIGludCBjb3M7Ci0gICAgc3RydWN0 IHBzcl9jYXRfc29ja2V0X2luZm8gKmluZm87Ci0KLSAgICBpZiggIWQtPmFyY2gucHNyX2Nvc19p ZHMgKQotICAgICAgICByZXR1cm47Ci0KLSAgICBmb3JfZWFjaF9zZXRfYml0KHNvY2tldCwgY2F0 X3NvY2tldF9lbmFibGUsIG5yX3NvY2tldHMpCi0gICAgewotICAgICAgICBpZiAoIChjb3MgPSBk LT5hcmNoLnBzcl9jb3NfaWRzW3NvY2tldF0pID09IDAgKQotICAgICAgICAgICAgY29udGludWU7 Ci0KLSAgICAgICAgaW5mbyA9IGNhdF9zb2NrZXRfaW5mbyArIHNvY2tldDsKLSAgICAgICAgc3Bp bl9sb2NrKCZpbmZvLT5jYm1fbG9jayk7Ci0gICAgICAgIGluZm8tPmNvc190b19jYm1bY29zXS5y ZWYtLTsKLSAgICAgICAgc3Bpbl91bmxvY2soJmluZm8tPmNibV9sb2NrKTsKLSAgICB9Ci0KLSAg ICB4ZnJlZShkLT5hcmNoLnBzcl9jb3NfaWRzKTsKLSAgICBkLT5hcmNoLnBzcl9jb3NfaWRzID0g TlVMTDsKLX0KLQogaW50IHBzcl9kb21haW5faW5pdChzdHJ1Y3QgZG9tYWluICpkKQogewotICAg IGlmICggY2F0X3NvY2tldF9pbmZvICkKLSAgICB7Ci0gICAgICAgIGQtPmFyY2gucHNyX2Nvc19p ZHMgPSB4emFsbG9jX2FycmF5KHVuc2lnbmVkIGludCwgbnJfc29ja2V0cyk7Ci0gICAgICAgIGlm ICggIWQtPmFyY2gucHNyX2Nvc19pZHMgKQotICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07Ci0g ICAgfQotCiAgICAgcmV0dXJuIDA7CiB9CiAKIHZvaWQgcHNyX2RvbWFpbl9mcmVlKHN0cnVjdCBk b21haW4gKmQpCiB7CiAgICAgcHNyX2ZyZWVfcm1pZChkKTsKLSAgICBwc3JfZnJlZV9jb3MoZCk7 Ci19Ci0KLXN0YXRpYyBpbnQgY2F0X2NwdV9wcmVwYXJlKHVuc2lnbmVkIGludCBjcHUpCi17Ci0g ICAgaWYgKCAhY2F0X3NvY2tldF9pbmZvICkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAo IHRlbXBfY29zX3RvX2NibSA9PSBOVUxMICYmCi0gICAgICAgICAodGVtcF9jb3NfdG9fY2JtID0g eHphbGxvY19hcnJheShzdHJ1Y3QgcHNyX2NhdF9jYm0sCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBvcHRfY29zX21heCArIDFVTCkpID09IE5VTEwgKQotICAgICAg ICByZXR1cm4gLUVOT01FTTsKLQotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBjYXRf Y3B1X2luaXQodm9pZCkKLXsKLSAgICB1bnNpZ25lZCBpbnQgZWF4LCBlYngsIGVjeCwgZWR4Owot ICAgIHN0cnVjdCBwc3JfY2F0X3NvY2tldF9pbmZvICppbmZvOwotICAgIHVuc2lnbmVkIGludCBz b2NrZXQ7Ci0gICAgdW5zaWduZWQgaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLSAgICB1 aW50NjRfdCB2YWw7Ci0gICAgY29uc3Qgc3RydWN0IGNwdWluZm9feDg2ICpjID0gY3B1X2RhdGEg KyBjcHU7Ci0KLSAgICBpZiAoICFjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX1BRRSkgfHwgYy0+Y3B1 aWRfbGV2ZWwgPCBQU1JfQ1BVSURfTEVWRUxfQ0FUICkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg c29ja2V0ID0gY3B1X3RvX3NvY2tldChjcHUpOwotICAgIGlmICggdGVzdF9iaXQoc29ja2V0LCBj YXRfc29ja2V0X2VuYWJsZSkgKQotICAgICAgICByZXR1cm47Ci0KLSAgICBjcHVpZF9jb3VudChQ U1JfQ1BVSURfTEVWRUxfQ0FULCAwLCAmZWF4LCAmZWJ4LCAmZWN4LCAmZWR4KTsKLSAgICBpZiAo IGVieCAmIFBTUl9SRVNPVVJDRV9UWVBFX0wzICkKLSAgICB7Ci0gICAgICAgIGNwdWlkX2NvdW50 KFBTUl9DUFVJRF9MRVZFTF9DQVQsIDEsICZlYXgsICZlYngsICZlY3gsICZlZHgpOwotICAgICAg ICBpbmZvID0gY2F0X3NvY2tldF9pbmZvICsgc29ja2V0OwotICAgICAgICBpbmZvLT5jYm1fbGVu ID0gKGVheCAmIDB4MWYpICsgMTsKLSAgICAgICAgaW5mby0+Y29zX21heCA9IG1pbihvcHRfY29z X21heCwgZWR4ICYgMHhmZmZmKTsKLQotICAgICAgICBpbmZvLT5jb3NfdG9fY2JtID0gdGVtcF9j b3NfdG9fY2JtOwotICAgICAgICB0ZW1wX2Nvc190b19jYm0gPSBOVUxMOwotICAgICAgICAvKiBj b3M9MCBpcyByZXNlcnZlZCBhcyBkZWZhdWx0IGNibShhbGwgb25lcykuICovCi0gICAgICAgIGlu Zm8tPmNvc190b19jYm1bMF0uY2JtID0gKDF1bGwgPDwgaW5mby0+Y2JtX2xlbikgLSAxOwotCi0g ICAgICAgIHNwaW5fbG9ja19pbml0KCZpbmZvLT5jYm1fbG9jayk7Ci0KLSAgICAgICAgc2V0X2Jp dChzb2NrZXQsIGNhdF9zb2NrZXRfZW5hYmxlKTsKLQotICAgICAgICBpZiAoIChlY3ggJiBQU1Jf Q0FUX0NEUF9DQVBBQklMSVRZKSAmJiAob3B0X3BzciAmIFBTUl9DRFApICYmCi0gICAgICAgICAg ICAgY2RwX3NvY2tldF9lbmFibGUgJiYgIXRlc3RfYml0KHNvY2tldCwgY2RwX3NvY2tldF9lbmFi bGUpICkKLSAgICAgICAgewotICAgICAgICAgICAgaW5mby0+Y29zX3RvX2NibVswXS5jb2RlID0g KDF1bGwgPDwgaW5mby0+Y2JtX2xlbikgLSAxOwotICAgICAgICAgICAgaW5mby0+Y29zX3RvX2Ni bVswXS5kYXRhID0gKDF1bGwgPDwgaW5mby0+Y2JtX2xlbikgLSAxOwotCi0gICAgICAgICAgICAv KiBXZSBvbmx5IHdyaXRlIG1hc2sxIHNpbmNlIG1hc2swIGlzIGFsd2F5cyBhbGwgb25lcyBieSBk ZWZhdWx0LiAqLwotICAgICAgICAgICAgd3Jtc3JsKE1TUl9JQTMyX1BTUl9MM19NQVNLKDEpLCAo MXVsbCA8PCBpbmZvLT5jYm1fbGVuKSAtIDEpOwotCi0gICAgICAgICAgICByZG1zcmwoTVNSX0lB MzJfUFNSX0wzX1FPU19DRkcsIHZhbCk7Ci0gICAgICAgICAgICB3cm1zcmwoTVNSX0lBMzJfUFNS X0wzX1FPU19DRkcsIHZhbCB8ICgxIDw8IFBTUl9MM19RT1NfQ0RQX0VOQUJMRV9CSVQpKTsKLQot ICAgICAgICAgICAgLyogQ3V0IGhhbGYgb2YgY29zX21heCB3aGVuIENEUCBpcyBlbmFibGVkLiAq LwotICAgICAgICAgICAgaW5mby0+Y29zX21heCA+Pj0gMTsKLQotICAgICAgICAgICAgc2V0X2Jp dChzb2NrZXQsIGNkcF9zb2NrZXRfZW5hYmxlKTsKLSAgICAgICAgfQotICAgICAgICBwcmludGso WEVOTE9HX0lORk8gIkNBVDogZW5hYmxlZCBvbiBzb2NrZXQgJXUsIGNvc19tYXg6JXUsIGNibV9s ZW46JXUsIENEUDolc1xuIiwKLSAgICAgICAgICAgICAgIHNvY2tldCwgaW5mby0+Y29zX21heCwg aW5mby0+Y2JtX2xlbiwKLSAgICAgICAgICAgICAgIGNkcF9pc19lbmFibGVkKHNvY2tldCkgPyAi b24iIDogIm9mZiIpOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgY2F0X2NwdV9maW5pKHVuc2ln bmVkIGludCBjcHUpCi17Ci0gICAgdW5zaWduZWQgaW50IHNvY2tldCA9IGNwdV90b19zb2NrZXQo Y3B1KTsKLQotICAgIGlmICggIXNvY2tldF9jcHVtYXNrW3NvY2tldF0gfHwgY3B1bWFza19lbXB0 eShzb2NrZXRfY3B1bWFza1tzb2NrZXRdKSApCi0gICAgewotICAgICAgICBzdHJ1Y3QgcHNyX2Nh dF9zb2NrZXRfaW5mbyAqaW5mbyA9IGNhdF9zb2NrZXRfaW5mbyArIHNvY2tldDsKLQotICAgICAg ICBpZiAoIGluZm8tPmNvc190b19jYm0gKQotICAgICAgICB7Ci0gICAgICAgICAgICB4ZnJlZShp bmZvLT5jb3NfdG9fY2JtKTsKLSAgICAgICAgICAgIGluZm8tPmNvc190b19jYm0gPSBOVUxMOwot ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCBjZHBfaXNfZW5hYmxlZChzb2NrZXQpICkKLSAgICAg ICAgICAgIGNsZWFyX2JpdChzb2NrZXQsIGNkcF9zb2NrZXRfZW5hYmxlKTsKLQotICAgICAgICBj bGVhcl9iaXQoc29ja2V0LCBjYXRfc29ja2V0X2VuYWJsZSk7Ci0gICAgfQotfQotCi1zdGF0aWMg dm9pZCBfX2luaXQgcHNyX2NhdF9mcmVlKHZvaWQpCi17Ci0gICAgeGZyZWUoY2F0X3NvY2tldF9l bmFibGUpOwotICAgIGNhdF9zb2NrZXRfZW5hYmxlID0gTlVMTDsKLSAgICB4ZnJlZShjYXRfc29j a2V0X2luZm8pOwotICAgIGNhdF9zb2NrZXRfaW5mbyA9IE5VTEw7Ci19Ci0KLXN0YXRpYyB2b2lk IF9faW5pdCBpbml0X3Bzcl9jYXQodm9pZCkKLXsKLSAgICBpZiAoIG9wdF9jb3NfbWF4IDwgMSAp Ci0gICAgewotICAgICAgICBwcmludGsoWEVOTE9HX0lORk8gIkNBVDogZGlzYWJsZWQsIGNvc19t YXggaXMgdG9vIHNtYWxsXG4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNhdF9z b2NrZXRfZW5hYmxlID0geHphbGxvY19hcnJheSh1bnNpZ25lZCBsb25nLCBCSVRTX1RPX0xPTkdT KG5yX3NvY2tldHMpKTsKLSAgICBjYXRfc29ja2V0X2luZm8gPSB4emFsbG9jX2FycmF5KHN0cnVj dCBwc3JfY2F0X3NvY2tldF9pbmZvLCBucl9zb2NrZXRzKTsKLSAgICBjZHBfc29ja2V0X2VuYWJs ZSA9IHh6YWxsb2NfYXJyYXkodW5zaWduZWQgbG9uZywgQklUU19UT19MT05HUyhucl9zb2NrZXRz KSk7Ci0KLSAgICBpZiAoICFjYXRfc29ja2V0X2VuYWJsZSB8fCAhY2F0X3NvY2tldF9pbmZvICkK LSAgICAgICAgcHNyX2NhdF9mcmVlKCk7CiB9CiAKIHN0YXRpYyBpbnQgcHNyX2NwdV9wcmVwYXJl KHVuc2lnbmVkIGludCBjcHUpCiB7Ci0gICAgcmV0dXJuIGNhdF9jcHVfcHJlcGFyZShjcHUpOwor ICAgIHJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBwc3JfY3B1X2luaXQodm9pZCkKIHsKLSAg ICBpZiAoIGNhdF9zb2NrZXRfaW5mbyApCi0gICAgICAgIGNhdF9jcHVfaW5pdCgpOwotCiAgICAg cHNyX2Fzc29jX2luaXQoKTsKIH0KIAogc3RhdGljIHZvaWQgcHNyX2NwdV9maW5pKHVuc2lnbmVk IGludCBjcHUpCiB7Ci0gICAgaWYgKCBjYXRfc29ja2V0X2luZm8gKQotICAgICAgICBjYXRfY3B1 X2ZpbmkoY3B1KTsKKyAgICByZXR1cm47CiB9CiAKIHN0YXRpYyBpbnQgY3B1X2NhbGxiYWNrKApA QCAtNzM4LDE0ICsyODIsMTAgQEAgc3RhdGljIGludCBfX2luaXQgcHNyX3ByZXNtcF9pbml0KHZv aWQpCiAgICAgaWYgKCAob3B0X3BzciAmIFBTUl9DTVQpICYmIG9wdF9ybWlkX21heCApCiAgICAg ICAgIGluaXRfcHNyX2NtdChvcHRfcm1pZF9tYXgpOwogCi0gICAgaWYgKCBvcHRfcHNyICYgUFNS X0NBVCApCi0gICAgICAgIGluaXRfcHNyX2NhdCgpOwotCi0gICAgaWYgKCBwc3JfY3B1X3ByZXBh cmUoMCkgKQotICAgICAgICBwc3JfY2F0X2ZyZWUoKTsKKyAgICBwc3JfY3B1X3ByZXBhcmUoMCk7 CiAKICAgICBwc3JfY3B1X2luaXQoKTsKLSAgICBpZiAoIHBzcl9jbXRfZW5hYmxlZCgpIHx8IGNh dF9zb2NrZXRfaW5mbyApCisgICAgaWYgKCBwc3JfY210X2VuYWJsZWQoKSApCiAgICAgICAgIHJl Z2lzdGVyX2NwdV9ub3RpZmllcigmY3B1X25mYik7CiAKICAgICByZXR1cm4gMDsKLS0gCjEuOS4x CgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRl dmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczovL2xpc3RzLnhl bi5vcmcveGVuLWRldmVsCg==