From mboxrd@z Thu Jan 1 00:00:00 1970 From: Yi Sun Subject: [PATCH v3 11/15] x86: refactor psr: Implement set value callback function. Date: Tue, 25 Oct 2016 11:40:59 +0800 Message-ID: <1477366863-5246-12-git-send-email-yi.y.sun@linux.intel.com> References: <1477366863-5246-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 1byrZ7-0004a4-42 for xen-devel@lists.xenproject.org; Tue, 25 Oct 2016 02:34:13 +0000 In-Reply-To: <1477366863-5246-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: wei.liu2@citrix.com, he.chen@linux.intel.com, andrew.cooper3@citrix.com, ian.jackson@eu.citrix.com, Yi Sun , jbeulich@suse.com, chao.p.peng@linux.intel.com List-Id: xen-devel@lists.xenproject.org VGhpcyBwYXRjaCBtb2RpZmllcyB0aGUgc2V0IHZhbHVlIGludGVyZmFjZSBwcm92aWRlZCBieSBw c3IuYy4KSXQgbWFrZXMgaXQgYmUgZ2VuZXJhbCBhbmQgY2hhbmdlIHRoZSBsb2dpYyBpbiB0aGUg ZnVuY3Rpb24gdG8KbWFrZSBpdCBiZSBjb21wYXRpYmxlIGZvciBzdXBwb3J0aW5nIG11bHRpcGxl IGZlYXR1cmVzLiBJdAppbmNsdWRlcyBiZWxvdyBzdGVwczoKMS4gQXNzZW1ibGUgYSB2YWx1ZSBh cnJheSB0byBzdG9yZSBhbGwgZmVhdHVyZXMgY3VycmVudCB2YWx1ZQogICBpbiBpdCBhbmQgcmVw bGFjZSB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZmVhdHVyZSB3aGljaCBpcwogICBiZWluZyBz ZXQgdG8gdGhlIG5ldyBpbnB1dCB2YWx1ZS4KMi4gRmluZCBpZiB0aGVyZSBpcyBhbHJlYWR5IGEg Q09TIElEIG9uIHdoaWNoIGFsbCBmZWF0dXJlcycKICAgdmFsdWVzIGFyZSBzYW1lIGFzIHRoZSBh cnJheS4gVGhlbiwgd2UgY2FuIHJldXNlIHRoaXMgQ09TCiAgIElELgozLiBJZiBmYWlsIHRvIGZp bmQsIHdlIG5lZWQgYWxsb2NhdGUgYSBuZXcgQ09TIElELgo0LiBXcml0ZSBhbGwgZmVhdHVyZXMg TVNScyBjb3JyZXNwb25kaW5nIHRvIHRoZSBDT1MgSUQuCgpTbywgc29tZSBmdW5jdGlvbnMgYXJl IGFic3RyYWN0ZWQgYW5kIHRoZSBjYWxsYmFjayBmdW5jdGlvbnMKb2YgTDMgQ0FUL0NEUCBhcmUg aW1wbGVtZW50ZWQuCgpGdXJ0aGVybW9yZSwgdGhlIGRvbWN0bCBpbnRlcmZhY2UgaXMgYWxzbyBt b2RpZmllZCB0byBtYWtlIGl0CmdlbmVyYWwuCgpIZXJlIGlzIGFuIGV4YW1wbGUgdG8gdW5kZXJz dGFuZCB0aGUgcHJvY2Vzcy4gVGhlIENQVSBzdXBwb3J0cwp0d28gZmVhdHVlcnMsIGUuZy4gTDMg Q0FUIGFuZCBMMiBDQVQuIHVzZXIgd2FudHMgdG8gc2V0IEwzIENBVApvZiBEb20xIHRvIDB4MWZm LiBUaGUgb2xkX2NvcyBvZiBEb20xIGlzIDAuIEwzIENBVCBpcyB0aGUgZmlyc3QKZWxlbWVudCBv ZiBmZWF0dXJlIGxpc3QuIFRoZSBDT1MgcmVnaXN0ZXJzIHZhbHVlcyBhcmUgYmVsb3cgYXQKdGhp cyB0aW1lLgogICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICB8 IENPUyAwIHwgQ09TIDEgfCBDT1MgMiB8IC4uLiB8CiAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQpMMyBDQVQgIHwgMHg3ZmYgfCAuLi4gICB8IC4uLiAgIHwgLi4uIHwKICAg ICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkwyIENBVCAgfCAweGZmICB8IC4u LiAgIHwgLi4uICAgfCAuLi4gfAogICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KClRoZSB2YWx1ZSBhcnJheSBhc3NlbWJsZWQgaXM6CnZhbFswXTogMHgxZmYKdmFsWzFdOiAw eGZmCgpJdCBjYW5ub3QgZmluZCBhIG1hdGNoaW5nIENPUyBzbyBhbGxvY2F0ZSBDT1MgMSB0byBz dG9yZSB0aGUKdmFsdWUgc2V0LiBUaGUgQ09TIHJlZ2lzdGVycyB2YWx1ZXMgYXJlIGNoYW5nZWQg dG8gYmVsb3cgbm93LgogICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAg ICAgICB8IENPUyAwIHwgQ09TIDEgfCBDT1MgMiB8IC4uLiB8CiAgICAgICAgLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQpMMyBDQVQgIHwgMHg3ZmYgfCAweDFmZiB8IC4uLiAgIHwgLi4u IHwKICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkwyIENBVCAgfCAweGZm ICB8IDB4ZmYgIHwgLi4uICAgfCAuLi4gfAogICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KClRoZW4sIHVzZXIgd2FudHMgdG8gc2V0IEwzIENBVCBvZiBEb20yIHRvIDB4MWZm IHRvby4gVGhlIG9sZF9jb3MKb2YgRG9tMiBpcyAwIHRvby4KClRoZSB2YWwgYXJyYXkgYXNzZW1i bGVkIGlzOgp2YWxbMF06IDB4MWZmCnZhbFsxXTogMHhmZgoKU28sIGl0IGNhbiBmaW5kIGEgbWF0 Y2hpbmcgQ09TLCBDT1MgMS4gVGhlbiwgaXQgY2FuIHJldXNlIENPUyAxCmZvciBEb20yLgoKU2ln bmVkLW9mZi1ieTogWWkgU3VuIDx5aS55LnN1bkBsaW51eC5pbnRlbC5jb20+Ci0tLQogeGVuL2Fy Y2gveDg2L2RvbWN0bC5jICAgICB8ICAxOCArLQogeGVuL2FyY2gveDg2L3Bzci5jICAgICAgICB8 IDY3OSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tCiB4ZW4v aW5jbHVkZS9hc20teDg2L3Bzci5oIHwgICA0ICstCiAzIGZpbGVzIGNoYW5nZWQsIDU2NiBpbnNl cnRpb25zKCspLCAxMzUgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEveGVuL2FyY2gveDg2L2Rv bWN0bC5jIGIveGVuL2FyY2gveDg2L2RvbWN0bC5jCmluZGV4IDNkN2ZjMzQuLjhlNTUwMmEgMTAw NjQ0Ci0tLSBhL3hlbi9hcmNoL3g4Ni9kb21jdGwuYworKysgYi94ZW4vYXJjaC94ODYvZG9tY3Rs LmMKQEAgLTEzODYsMjEgKzEzODYsMjEgQEAgbG9uZyBhcmNoX2RvX2RvbWN0bCgKICAgICAgICAg c3dpdGNoICggZG9tY3RsLT51LnBzcl9jYXRfb3AuY21kICkKICAgICAgICAgewogICAgICAgICBj YXNlIFhFTl9ET01DVExfUFNSX0NBVF9PUF9TRVRfTDNfQ0JNOgotICAgICAgICAgICAgcmV0ID0g cHNyX3NldF9sM19jYm0oZCwgZG9tY3RsLT51LnBzcl9jYXRfb3AudGFyZ2V0LAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZG9tY3RsLT51LnBzcl9jYXRfb3AuZGF0YSwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBTUl9DQk1fVFlQRV9MMyk7CisgICAgICAgICAg ICByZXQgPSBwc3Jfc2V0X3ZhbChkLCBkb21jdGwtPnUucHNyX2NhdF9vcC50YXJnZXQsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBkb21jdGwtPnUucHNyX2NhdF9vcC5kYXRhLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUFNSX0NCTV9UWVBFX0wzKTsKICAgICAgICAgICAg IGJyZWFrOwogCiAgICAgICAgIGNhc2UgWEVOX0RPTUNUTF9QU1JfQ0FUX09QX1NFVF9MM19DT0RF OgotICAgICAgICAgICAgcmV0ID0gcHNyX3NldF9sM19jYm0oZCwgZG9tY3RsLT51LnBzcl9jYXRf b3AudGFyZ2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tY3RsLT51LnBz cl9jYXRfb3AuZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBTUl9DQk1f VFlQRV9MM19DT0RFKTsKKyAgICAgICAgICAgIHJldCA9IHBzcl9zZXRfdmFsKGQsIGRvbWN0bC0+ dS5wc3JfY2F0X29wLnRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbWN0 bC0+dS5wc3JfY2F0X29wLmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQU1Jf Q0JNX1RZUEVfTDNfQ09ERSk7CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIFhF Tl9ET01DVExfUFNSX0NBVF9PUF9TRVRfTDNfREFUQToKLSAgICAgICAgICAgIHJldCA9IHBzcl9z ZXRfbDNfY2JtKGQsIGRvbWN0bC0+dS5wc3JfY2F0X29wLnRhcmdldCwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGRvbWN0bC0+dS5wc3JfY2F0X29wLmRhdGEsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBQU1JfQ0JNX1RZUEVfTDNfREFUQSk7CisgICAgICAgICAg ICByZXQgPSBwc3Jfc2V0X3ZhbChkLCBkb21jdGwtPnUucHNyX2NhdF9vcC50YXJnZXQsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBkb21jdGwtPnUucHNyX2NhdF9vcC5kYXRhLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUFNSX0NCTV9UWVBFX0wzX0RBVEEpOwogICAgICAg ICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBYRU5fRE9NQ1RMX1BTUl9DQVRfT1BfR0VUX0wz X0NCTToKZGlmZiAtLWdpdCBhL3hlbi9hcmNoL3g4Ni9wc3IuYyBiL3hlbi9hcmNoL3g4Ni9wc3Iu YwppbmRleCBmZGY0ZTNhLi4zMmY4OTlhIDEwMDY0NAotLS0gYS94ZW4vYXJjaC94ODYvcHNyLmMK KysrIGIveGVuL2FyY2gveDg2L3Bzci5jCkBAIC0zOSw2ICszOSwxNyBAQCBlbnVtIHBzcl9mZWF0 X3R5cGUgewogc3RydWN0IGZlYXRfbm9kZTsKIHN0cnVjdCBwc3JfY2F0X3NvY2tldF9pbmZvOwog CisvKgorICogVG8gYWRkIGEgbmV3IFBTUiBmZWF0dXJlLCBwbGVhc2UgZm9sbG93IGJlbG93IHN0 ZXBzOgorICogMS4gSW1wbGVtZW50IGZlYXR1cmUgc3BlY2lmaWMgY2FsbGJhY2sgZnVuY3Rpb25z IGxpc3RlZCBpbgorICogICAgInN0cnVjdCBmZWF0X29wcyI7CisgKiAyLiBJbXBsZW1lbnQgYSAi c3RydWN0IGZlYXRfb3BzIiBpbnN0YW5jZSBmb3IgdGhlIGZlYXR1cmUgYW5kIHJlZ2lzdGVyCisg KiAgICB0aGUgZmVhdHVyZSBjYWxsYmFjayBmdW5jdGlvbnMgaW50byBpdDsKKyAqIDMuIERlbGNh cmUgZmVhdF9ub2RlIGluc3RhbmNlIGZvciB0aGUgZmVhdHVyZSBhbmQgbWFsbG9jIG1lbW9yeSBm b3IgaXQKKyAqICAgIGluIGNhdF9jcHVfcHJlcGFyZSgpLiBDb3JyZXNwb25kaW5nbHksIGZyZWUg aXQgaW4gZnJlZV9mZWF0dXJlKCk7CisgKiA0LiBBZGQgZmVhdHVyZSBpbml0aWFsaXphdGlvbiBj b2RlcyBpbiBjYXRfY3B1X2luaXQoKS4KKyAqLworCiAvKiBFdmVyeSBmZWF0dXJlIGVuYWJsZWQg TVVTVCBpbXBsZW1lbnQgc3VjaCBvcHMgYW5kIGNhbGxiYWNrIGZ1bmN0aW9ucy4gKi8KIHN0cnVj dCBmZWF0X29wcyB7CiAgICAgLyoKQEAgLTU3LDYgKzY4LDc0IEBAIHN0cnVjdCBmZWF0X29wcyB7 CiAgICAgICAgICAgICAgICAgICAgZW51bSBjYm1fdHlwZSB0eXBlLCB1aW50NjRfdCAqdmFsKTsK ICAgICAvKiBnZXRfbWF4X2Nvc19tYXggaXMgdXNlZCB0byBnZXQgZmVhdHVyZSdzIGNvc19tYXgu ICovCiAgICAgdW5zaWduZWQgaW50ICgqZ2V0X21heF9jb3NfbWF4KShjb25zdCBzdHJ1Y3QgZmVh dF9ub2RlICpmZWF0KTsKKyAgICAvKgorICAgICAqIGdldF9jb3NfbnVtIGlzIHVzZWQgdG8gZ2V0 IHRoZSBDT1MgcmVnaXN0ZXJzIGFtb3VudCB1c2VkIGJ5IHRoZQorICAgICAqIGZlYXR1cmUgZm9y IG9uZSBzZXR0aW5nLCBlLmcuIENEUCB1c2VzIDIgQ09TcyBidXQgQ0FUIHVzZXMgMS4KKyAgICAg Ki8KKyAgICB1bnNpZ25lZCBpbnQgKCpnZXRfY29zX251bSkoY29uc3Qgc3RydWN0IGZlYXRfbm9k ZSAqZmVhdCk7CisgICAgLyoKKyAgICAgKiBnZXRfb2xkX3ZhbCBhbmQgc2V0X25ld192YWwgYXJl IGEgcGFpciBvZiBmdW5jdGlvbnMgY2FsbGVkIHRvZ2V0aGVyLgorICAgICAqIFRoZSBjYWxsZXIg d2lsbCB0cmF2ZXJzZSBhbGwgZmVhdHVyZXMgaW4gdGhlIGxpc3QgYW5kIGNhbGwgYm90aAorICAg ICAqIGZ1bmN0aW9ucyBmb3IgZXZlcnkgZmVhdHVyZSB0byBkbyBiZWxvdyB0d28gdGhpbmdzOgor ICAgICAqIDEuIGdldCBvbGRfY29zIHJlZ2lzdGVyIHZhbHVlIG9mIGFsbCBzdXBwb3J0ZWQgZmVh dHVyZXMgYW5kCisgICAgICogMi4gc2V0IHRoZSBuZXcgdmFsdWUgZm9yIHRoZSBmZWF0dXJlLgor ICAgICAqCisgICAgICogQWxsIHRoZSB2YWx1ZXMgYXJlIHNldCBpbnRvIHZhbHVlIGFycmF5IGFj Y29yZGluZyB0aGUgdHJhdmVyc2FsIG9yZGVyLAorICAgICAqIG1lYW5pbmcgdGhlIHNhbWUgb3Jk ZXIgb2YgZmVhdHVyZSBsaXN0IG1lbWJlcnMuCisgICAgICoKKyAgICAgKiBUaGUgcmV0dXJuIHZh bHVlIGlzIHRoZSBhbW91bnQgb2YgZW50cmllcyB0byBza2lwIGluIHRoZSB2YWx1ZSBhcnJheQor ICAgICAqIG9yIGVycm9yLgorICAgICAqIDEgLSBvbmUgZW50cnkgaW4gdmFsdWUgYXJyYXkuCisg ICAgICogMiAtIHR3byBlbnRyaWVzIGluIHZhbHVlIGFycmF5LCBlLmcuIENEUCB1c2VzIHR3byBl bnRyaWVzLgorICAgICAqIG5lZ2F0aXZlIC0gZXJyb3IuCisgICAgICovCisgICAgaW50ICgqZ2V0 X29sZF92YWwpKHVpbnQ2NF90IHZhbFtdLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBz dHJ1Y3QgZmVhdF9ub2RlICpmZWF0LAorICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBp bnQgb2xkX2Nvcyk7CisgICAgaW50ICgqc2V0X25ld192YWwpKHVpbnQ2NF90IHZhbFtdLAorICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgZmVhdF9ub2RlICpmZWF0LAorICAgICAg ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgb2xkX2NvcywKKyAgICAgICAgICAgICAgICAg ICAgICAgZW51bSBjYm1fdHlwZSB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRf dCBtKTsKKyAgICAvKgorICAgICAqIGNvbXBhcmVfdmFsIGlzIHVzZWQgaW4gc2V0IHZhbHVlIHBy b2Nlc3MgdG8gY29tcGFyZSBpZiB0aGUKKyAgICAgKiBpbnB1dCB2YWx1ZSBhcnJheSBjYW4gbWF0 Y2ggYWxsIHRoZSBmZWF0dXJlcycgQ09TIHJlZ2lzdGVycyB2YWx1ZXMKKyAgICAgKiBhY2NvcmRp bmcgdG8gaW5wdXQgY29zIGlkLgorICAgICAqCisgICAgICogVGhlIHJldHVybiB2YWx1ZSBpcyB0 aGUgYW1vdW50IG9mIGVudHJpZXMgdG8gc2tpcCBpbiB0aGUgdmFsdWUgYXJyYXkKKyAgICAgKiBv ciBlcnJvci4KKyAgICAgKiAxIC0gb25lIGVudHJ5IGluIHZhbHVlIGFycmF5LgorICAgICAqIDIg LSB0d28gZW50cmllcyBpbiB2YWx1ZSBhcnJheSwgZS5nLiBDRFAgdXNlcyB0d28gZW50cmllcy4K KyAgICAgKiBuZWdhdGl2ZSAtIGVycm9yLgorICAgICAqLworICAgIGludCAoKmNvbXBhcmVfdmFs KShjb25zdCB1aW50NjRfdCB2YWxbXSwgY29uc3Qgc3RydWN0IGZlYXRfbm9kZSAqZmVhdCwKKyAg ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBjb3MsIGJvb2wgKmZvdW5kKTsKKyAg ICAvKgorICAgICAqIGdldF9jb3NfbWF4X2Zyb21fdHlwZSBpcyB1c2VkIHRvIGdldCB0aGUgY29z X21heCB2YWx1ZSBvZiB0aGUgZmVhdHVyZQorICAgICAqIGFjY29yZGluZyB0byBpbnB1dCB0eXBl LgorICAgICAqLworICAgIHVuc2lnbmVkIGludCAoKmdldF9jb3NfbWF4X2Zyb21fdHlwZSkoY29u c3Qgc3RydWN0IGZlYXRfbm9kZSAqZmVhdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGVudW0gY2JtX3R5cGUgdHlwZSk7CisgICAgLyoKKyAgICAgKiBleGNlZWRz X2Nvc19tYXggaXMgdXNlZCB0byBjaGVjayBpZiB0aGUgaW5wdXQgY29zIGlkIGV4Y2VlZHMgdGhl CisgICAgICogZmVhdHVyZSdzIGNvc19tYXggYW5kIGlmIHRoZSBpbnB1dCB2YWx1ZSBpcyBub3Qg dGhlIGRlZmF1bHQgb25lLgorICAgICAqIEV2ZW4gaWYgdGhlIGFzc29jaWF0ZWQgY29zIGV4Y2Vl ZHMgdGhlIGNvc19tYXgsIEhXIGNhbiB3b3JrIHdpdGggZGVmYXVsdAorICAgICAqIHZhbHVlLiBU aGF0IGlzIHRoZSByZWFzb24gd2UgbmVlZCBjaGVjayBpZiBpbnB1dCB2YWx1ZSBpcyBkZWZhdWx0 IG9uZS4KKyAgICAgKiBJZiBib3RoIGNyaXRlcmlhIGFyZSBmdWxmaWxsZWQsIHRoYXQgbWVhbnMg dGhlIGlucHV0IGV4Y2VlZHMgdGhlCisgICAgICogcmFuZ2UuCisgICAgICoKKyAgICAgKiBUaGUg cmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiBtZWFucyB0aGUgbnVtYmVyIG9mIHRoZSB2YWx1 ZSBhcnJheQorICAgICAqIGVudHJpZXMgdG8gc2tpcCBvciBlcnJvci4KKyAgICAgKiAxIC0gb25l IGVudHJ5IGluIHZhbHVlIGFycmF5LgorICAgICAqIDIgLSB0d28gZW50cmllcyBpbiB2YWx1ZSBh cnJheSwgZS5nLiBDRFAgdXNlcyB0d28gZW50cmllcy4KKyAgICAgKiAwIC0gZXJyb3IsIGV4Y2Vl ZCBjb3NfbWF4IGFuZCB0aGUgaW5wdXQgdmFsdWUgaXMgbm90IGRlZmF1bHQuCisgICAgICovCisg ICAgdW5zaWduZWQgaW50ICgqZXhjZWVkc19jb3NfbWF4KShjb25zdCB1aW50NjRfdCB2YWxbXSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBmZWF0X25v ZGUgKmZlYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBp bnQgY29zKTsKKyAgICAvKiB3cml0ZV9tc3IgaXMgdXNlZCB0byB3cml0ZSBvdXQgZmVhdHVyZSBN U1IgcmVnaXN0ZXIuICovCisgICAgaW50ICgqd3JpdGVfbXNyKSh1bnNpZ25lZCBpbnQgY29zLCBj b25zdCB1aW50NjRfdCB2YWxbXSwKKyAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBmZWF0X25v ZGUgKmZlYXQpOwogfTsKIAogLyogQ0FUL0NEUCBIVyBpbmZvIGRhdGEgc3RydWN0dXJlLiAqLwpA QCAtMTI4LDE4ICsyMDcsNyBAQCBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHBzcl9hc3Nv YywgcHNyX2Fzc29jKTsKIC8qIEZlYXR1cmUgbGlzdCBlbnRyeSBvZiBmZWF0dXJlIEwzIENBVC9D RFAuICovCiBzdGF0aWMgc3RydWN0IGZlYXRfbm9kZSAqZmVhdF9sMzsKIAotc3RhdGljIHN0cnVj dCBmZWF0X25vZGUgKmdldF9mZWF0X2wzKHN0cnVjdCBwc3JfY2F0X3NvY2tldF9pbmZvICppbmZv KQotewotICAgIHN0cnVjdCBmZWF0X25vZGUgKmZlYXRfdG1wOwotCi0gICAgbGlzdF9mb3JfZWFj aF9lbnRyeShmZWF0X3RtcCwgJmluZm8tPmZlYXRfbGlzdCwgbGlzdCkKLSAgICAgICAgaWYgKCBm ZWF0X3RtcC0+ZmVhdHVyZSA9PSBQU1JfU09DS0VUX0wzX0NBVCB8fAotICAgICAgICAgICAgIGZl YXRfdG1wLT5mZWF0dXJlID09IFBTUl9TT0NLRVRfTDNfQ0RQICkKLSAgICAgICAgICAgIHJldHVy biBmZWF0X3RtcDsKLQotICAgIHJldHVybiBOVUxMOwotfQotCisvKiBDb21tb24gZnVuY3Rpb25z LiAqLwogc3RhdGljIHZvaWQgZnJlZV9mZWF0dXJlKHN0cnVjdCBwc3JfY2F0X3NvY2tldF9pbmZv ICppbmZvKQogewogICAgIHN0cnVjdCBmZWF0X25vZGUgKmZlYXRfdG1wOwpAQCAtMTYyLDYgKzIz MCwyOSBAQCBzdGF0aWMgdm9pZCBmcmVlX2ZlYXR1cmUoc3RydWN0IHBzcl9jYXRfc29ja2V0X2lu Zm8gKmluZm8pCiAgICAgfQogfQogCitzdGF0aWMgYm9vbF90IHBzcl9jaGVja19jYm0odW5zaWdu ZWQgaW50IGNibV9sZW4sIHVpbnQ2NF90IGNibSkKK3sKKyAgICB1bnNpZ25lZCBpbnQgZmlyc3Rf Yml0LCB6ZXJvX2JpdDsKKworICAgIC8qIFNldCBiaXRzIHNob3VsZCBvbmx5IGluIHRoZSByYW5n ZSBvZiBbMCwgY2JtX2xlbikuICovCisgICAgaWYgKCBjYm0gJiAofjB1bGwgPDwgY2JtX2xlbikg KQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8qIEF0IGxlYXN0IG9uZSBiaXQgbmVlZCB0byBi ZSBzZXQuICovCisgICAgaWYgKCBjYm0gPT0gMCApCisgICAgICAgIHJldHVybiAwOworCisgICAg Zmlyc3RfYml0ID0gZmluZF9maXJzdF9iaXQoJmNibSwgY2JtX2xlbik7CisgICAgemVyb19iaXQg PSBmaW5kX25leHRfemVyb19iaXQoJmNibSwgY2JtX2xlbiwgZmlyc3RfYml0KTsKKworICAgIC8q IFNldCBiaXRzIHNob3VsZCBiZSBjb250aWd1b3VzLiAqLworICAgIGlmICggemVyb19iaXQgPCBj Ym1fbGVuICYmCisgICAgICAgICBmaW5kX25leHRfYml0KCZjYm0sIGNibV9sZW4sIHplcm9fYml0 KSA8IGNibV9sZW4gKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiAxOworfQorCiAv KiBMMyBDQVQvQ0RQIGNhbGxiYWNrIGZ1bmN0aW9ucyBpbXBsZW1lbnRhdGlvbi4gKi8KIHN0YXRp YyB2b2lkIGwzX2NhdF9pbml0X2ZlYXR1cmUodW5zaWduZWQgaW50IGVheCwgdW5zaWduZWQgaW50 IGVieCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGVjeCwg dW5zaWduZWQgaW50IGVkeCwKQEAgLTI4NiwxMSArMzc3LDIzNSBAQCBzdGF0aWMgdW5zaWduZWQg aW50IGwzX2NhdF9nZXRfbWF4X2Nvc19tYXgoY29uc3Qgc3RydWN0IGZlYXRfbm9kZSAqZmVhdCkK ICAgICByZXR1cm4gZmVhdC0+aW5mby5jb3NfbWF4OwogfQogCitzdGF0aWMgdW5zaWduZWQgaW50 IGwzX2NhdF9nZXRfY29zX251bShjb25zdCBzdHJ1Y3QgZmVhdF9ub2RlICpmZWF0KQoreworICAg IGlmICggZmVhdC0+ZmVhdHVyZSA9PSBQU1JfU09DS0VUX0wzX0NEUCApCisgICAgICAgIHJldHVy biAyOworCisgICAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgbDNfY2F0X2dldF9vbGRfdmFs KHVpbnQ2NF90IHZhbFtdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3Ry dWN0IGZlYXRfbm9kZSAqZmVhdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln bmVkIGludCBvbGRfY29zKQoreworICAgIGlmICggb2xkX2NvcyA+IGZlYXQtPmluZm8uY29zX21h eCApCisgICAgICAgIC8qIFVzZSBkZWZhdWx0IHZhbHVlLiAqLworICAgICAgICBvbGRfY29zID0g MDsKKworICAgIC8qIENEUCAqLworICAgIGlmICggZmVhdC0+ZmVhdHVyZSA9PSBQU1JfU09DS0VU X0wzX0NEUCApCisgICAgeworICAgICAgICAvKiBEYXRhICovCisgICAgICAgIHZhbFswXSA9IGdl dF9jZHBfZGF0YShmZWF0LCBvbGRfY29zKTsKKyAgICAgICAgLyogQ29kZSAqLworICAgICAgICB2 YWxbMV0gPSBnZXRfY2RwX2NvZGUoZmVhdCwgb2xkX2Nvcyk7CisKKyAgICAgICAgLyogQ0RQIHVz ZXMgdHdvIENPU3MsIG9uZSBmb3IgZGF0YSwgb25lIGZvciBjb2RlLiAqLworICAgICAgICByZXR1 cm4gMjsKKyAgICB9CisKKyAgICAvKiBDQVQgKi8KKyAgICB2YWxbMF0gPSAgZmVhdC0+Y29zX3Jl Z192YWxbb2xkX2Nvc107CisKKyAgICAvKiBMMyBDQVQgdXNlcyBvbmUgQ09TLiAqLworICAgIHJl dHVybiAxOworfQorCitzdGF0aWMgaW50IGwzX2NhdF9zZXRfbmV3X3ZhbCh1aW50NjRfdCB2YWxb XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBmZWF0X25vZGUg KmZlYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgb2xkX2Nv cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gY2JtX3R5cGUgdHlwZSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IG0pCit7CisgICAgLyogTDMgQ0FU IHVzZXMgb25lIENPUy4gKi8KKyAgICB1bnNpZ25lZCBpbnQgcmV0ID0gMTsKKworICAgIHN3aXRj aCAoIHR5cGUgKSB7CisgICAgLyogQ0RQIHVzZXMgdHdvIENPUywgb25lIGZvciBkYXRhLCBvbmUg Zm9yIGNvZGUuICovCisgICAgY2FzZSBQU1JfQ0JNX1RZUEVfTDNfREFUQToKKyAgICBjYXNlIFBT Ul9DQk1fVFlQRV9MM19DT0RFOgorICAgICAgICBpZiAoIGZlYXQtPmZlYXR1cmUgIT0gUFNSX1NP Q0tFVF9MM19DRFAgKQorICAgICAgICAgICAgcmV0dXJuIC1FTlhJTzsKKworICAgICAgICBpZiAo ICFwc3JfY2hlY2tfY2JtKGZlYXQtPmluZm8uY2JtX2xlbiwgbSkgKQorICAgICAgICAgICAgcmV0 dXJuIC1FSU5WQUw7CisKKyAgICAgICAgaWYgKCB0eXBlID09IFBTUl9DQk1fVFlQRV9MM19EQVRB ICkKKyAgICAgICAgICAgIHZhbFswXSA9IG07CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHZh bFsxXSA9IG07CisKKyAgICAgICAgcmV0PSAyOworICAgICAgICBicmVhazsKKworICAgIC8qIENB VCAqLworICAgIGNhc2UgUFNSX0NCTV9UWVBFX0wzOgorICAgICAgICBpZiAoICFwc3JfY2hlY2tf Y2JtKGZlYXQtPmluZm8uY2JtX2xlbiwgbSkgKQorICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7 CisKKyAgICAgICAgdmFsWzBdID0gbTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0Ogor ICAgICAgICBpZiAoIGZlYXQtPmZlYXR1cmUgPT0gUFNSX1NPQ0tFVF9MM19DRFAgKQorICAgICAg ICAgICAgLyogQ0RQIHVzZXMgdHdvIENPUywgb25lIGZvciBkYXRhLCBvbmUgZm9yIGNvZGUuICov CisgICAgICAgICAgICByZXQgPSAyOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1 cm4gcmV0OworfQorCitzdGF0aWMgaW50IGwzX2NhdF9jb21wYXJlX3ZhbChjb25zdCB1aW50NjRf dCB2YWxbXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBmZWF0 X25vZGUgKmZlYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQg Y29zLCBib29sICpmb3VuZCkKK3sKKyAgICB1aW50NjRfdCBsM19kZWZfY2JtOworCisgICAgbDNf ZGVmX2NibSA9ICgxdWxsIDw8IGZlYXQtPmluZm8uY2JtX2xlbikgLSAxOworCisgICAgLyogQ0RQ ICovCisgICAgaWYgKCBmZWF0LT5mZWF0dXJlID09IFBTUl9TT0NLRVRfTDNfQ0RQICkKKyAgICB7 CisgICAgICAgIGlmICggY29zID4gZmVhdC0+aW5mby5jb3NfbWF4ICkKKyAgICAgICAgeworICAg ICAgICAgICAgaWYgKCB2YWxbMF0gIT0gbDNfZGVmX2NibSB8fAorICAgICAgICAgICAgICAgICB2 YWxbMV0gIT0gbDNfZGVmX2NibSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgKmZv dW5kID0gZmFsc2U7CisgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9FTlQ7CisgICAgICAgICAg ICB9CisgICAgICAgICAgICAqZm91bmQgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGVsc2UK KyAgICAgICAgICAgICpmb3VuZCA9ICh2YWxbMF0gPT0gZ2V0X2NkcF9kYXRhKGZlYXQsIGNvcykg JiYKKyAgICAgICAgICAgICAgICAgICAgICB2YWxbMV0gPT0gZ2V0X2NkcF9jb2RlKGZlYXQsIGNv cykpOworCisgICAgICAgIC8qIENEUCB1c2VzIHR3byBDT1MsIG9uZSBmb3IgZGF0YSwgb25lIGZv ciBjb2RlLiAqLworICAgICAgICByZXR1cm4gMjsKKyAgICB9CisKKyAgICAvKiBDQVQgKi8KKyAg ICBpZiAoIGNvcyA+IGZlYXQtPmluZm8uY29zX21heCApCisgICAgeworICAgICAgICBpZiAoIHZh bFswXSAhPSBsM19kZWZfY2JtICkKKyAgICAgICAgeworICAgICAgICAgICAgKmZvdW5kID0gZmFs c2U7CisgICAgICAgICAgICByZXR1cm4gLUVOT0VOVDsKKyAgICAgICAgfQorICAgICAgICAqZm91 bmQgPSB0cnVlOworICAgIH0KKyAgICBlbHNlCisgICAgICAgICpmb3VuZCA9ICh2YWxbMF0gPT0g ZmVhdC0+Y29zX3JlZ192YWxbY29zXSk7CisKKyAgICAvKiBMMyBDQVQgdXNlcyBvbmUgQ09TLiAq LworICAgIHJldHVybiAxOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGwzX2NhdF9nZXRfY29z X21heF9mcm9tX3R5cGUoY29uc3Qgc3RydWN0IGZlYXRfbm9kZSAqZmVhdCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIGNibV90eXBlIHR5cGUp Cit7CisgICAgaWYgKCB0eXBlICE9IFBTUl9DQk1fVFlQRV9MM19EQVRBICYmCisgICAgICAgICB0 eXBlICE9IFBTUl9DQk1fVFlQRV9MM19DT0RFICYmCisgICAgICAgICB0eXBlICE9IFBTUl9DQk1f VFlQRV9MMyApCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGZlYXQtPmluZm8uY29z X21heDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBsM19jYXRfZXhjZWVkc19jb3NfbWF4KGNv bnN0IHVpbnQ2NF90IHZhbFtdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IHN0cnVjdCBmZWF0X25vZGUgKmZlYXQsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGNvcykKK3sKKyAgICB1aW50NjRf dCBsM19kZWZfY2JtOworCisgICAgbDNfZGVmX2NibSA9ICgxdWxsIDw8IGZlYXQtPmluZm8uY2Jt X2xlbikgLSAxOworCisgICAgLyogQ0RQICovCisgICAgaWYgKCBmZWF0LT5mZWF0dXJlID09IFBT Ul9TT0NLRVRfTDNfQ0RQICkKKyAgICB7CisgICAgICAgIGlmICggY29zID4gZmVhdC0+aW5mby5j b3NfbWF4ICYmCisgICAgICAgICAgICAgKHZhbFswXSAhPSBsM19kZWZfY2JtIHx8IHZhbFsxXSAh PSBsM19kZWZfY2JtKSApCisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiBF eGNlZWQgY29zX21heCBhbmQgdmFsdWUgdG8gc2V0IGlzIG5vdCBkZWZhdWx0LAorICAgICAgICAg ICAgICAgICAqIHJldHVybiBlcnJvci4KKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAg ICAgICByZXR1cm4gMDsKKworICAgICAgICAvKiBDRFAgdXNlcyB0d28gQ09TLCBvbmUgZm9yIGRh dGEsIG9uZSBmb3IgY29kZS4gKi8KKyAgICAgICAgcmV0dXJuIDI7CisgICAgfQorCisgICAgLyog Q0FUICovCisgICAgaWYgKCBjb3MgPiBmZWF0LT5pbmZvLmNvc19tYXggJiYKKyAgICAgICAgIHZh bFswXSAhPSBsM19kZWZfY2JtICkKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBFeGNl ZWQgY29zX21heCBhbmQgdmFsdWUgdG8gc2V0IGlzIG5vdCBkZWZhdWx0LAorICAgICAgICAgICAg ICogcmV0dXJuIGVycm9yLgorICAgICAgICAgICAgICovCisgICAgICAgICAgICByZXR1cm4gMDsK KworICAgIC8qIEwzIENBVCB1c2VzIG9uZSBDT1MuICovCisgICAgcmV0dXJuIDE7Cit9CisKK3N0 YXRpYyBpbnQgbDNfY2F0X3dyaXRlX21zcih1bnNpZ25lZCBpbnQgY29zLCBjb25zdCB1aW50NjRf dCB2YWxbXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZmVhdF9ub2RlICpm ZWF0KQoreworICAgIC8qIENEUCAqLworICAgIGlmICggZmVhdC0+ZmVhdHVyZSA9PSBQU1JfU09D S0VUX0wzX0NEUCApCisgICAgeworICAgICAgICAvKgorICAgICAgICAgKiBJZiBpbnB1dCBjb3Mg aXMgbW9yZSB0aGFuIHRoZSBjb3NfbWF4IG9mIHRoZSBmZWF0dXJlLCB3ZSBzaG91bGQKKyAgICAg ICAgICogbm90IHNldCB0aGUgdmFsdWUuCisgICAgICAgICAqLworICAgICAgICBpZiAoIGNvcyA+ IGZlYXQtPmluZm8uY29zX21heCApCisgICAgICAgICAgICAvKiBDRFAgdXNlcyB0d28gQ09TLCBv bmUgZm9yIGRhdGEsIG9uZSBmb3IgY29kZS4gKi8KKyAgICAgICAgICAgIHJldHVybiAyOworCisg ICAgICAgIC8qIERhdGEgKi8KKyAgICAgICAgaWYgKCBnZXRfY2RwX2RhdGEoZmVhdCwgY29zKSAh PSB2YWxbMF0gKQorICAgICAgICB7CisgICAgICAgICAgICBnZXRfY2RwX2RhdGEoZmVhdCwgY29z KSA9IHZhbFswXTsKKyAgICAgICAgICAgIHdybXNybChNU1JfSUEzMl9QU1JfTDNfTUFTS19EQVRB KGNvcyksIHZhbFswXSk7CisgICAgICAgIH0KKyAgICAgICAgLyogQ29kZSAqLworICAgICAgICBp ZiAoIGdldF9jZHBfY29kZShmZWF0LCBjb3MpICE9IHZhbFsxXSApCisgICAgICAgIHsKKyAgICAg ICAgICAgIGdldF9jZHBfY29kZShmZWF0LCBjb3MpID0gdmFsWzFdOworICAgICAgICAgICAgd3Jt c3JsKE1TUl9JQTMyX1BTUl9MM19NQVNLX0NPREUoY29zKSwgdmFsWzFdKTsKKyAgICAgICAgfQor ICAgICAgICAvKiBDRFAgdXNlcyB0d28gQ09TLCBvbmUgZm9yIGRhdGEsIG9uZSBmb3IgY29kZS4g Ki8KKyAgICAgICAgcmV0dXJuIDI7CisgICAgfQorCisgICAgLyogQ0FUICovCisgICAgaWYgKCBj b3MgPiBmZWF0LT5pbmZvLmNvc19tYXggKQorICAgICAgICAvKiBMMyBDQVQgdXNlcyBvbmUgQ09T LiAqLworICAgICAgICByZXR1cm4gMTsKKworICAgIGlmICggZmVhdC0+Y29zX3JlZ192YWxbY29z XSAhPSB2YWxbMF0gKQorICAgIHsKKyAgICAgICAgZmVhdC0+Y29zX3JlZ192YWxbY29zXSA9IHZh bFswXTsKKyAgICAgICAgd3Jtc3JsKE1TUl9JQTMyX1BTUl9MM19NQVNLKGNvcyksIHZhbFswXSk7 CisgICAgfQorICAgIC8qIEwzIENBVCB1c2VzIG9uZSBDT1MuICovCisgICAgcmV0dXJuIDE7Cit9 CisKIHN0cnVjdCBmZWF0X29wcyBsM19jYXRfb3BzID0gewogICAgIC5pbml0X2ZlYXR1cmUgPSBs M19jYXRfaW5pdF9mZWF0dXJlLAogICAgIC5nZXRfZmVhdF9pbmZvID0gbDNfY2F0X2dldF9mZWF0 X2luZm8sCiAgICAgLmdldF92YWwgPSBsM19jYXRfZ2V0X3ZhbCwKICAgICAuZ2V0X21heF9jb3Nf bWF4ID0gbDNfY2F0X2dldF9tYXhfY29zX21heCwKKyAgICAuZ2V0X2Nvc19udW0gPSBsM19jYXRf Z2V0X2Nvc19udW0sCisgICAgLmdldF9vbGRfdmFsID0gbDNfY2F0X2dldF9vbGRfdmFsLAorICAg IC5zZXRfbmV3X3ZhbCA9IGwzX2NhdF9zZXRfbmV3X3ZhbCwKKyAgICAuY29tcGFyZV92YWwgPSBs M19jYXRfY29tcGFyZV92YWwsCisgICAgLmdldF9jb3NfbWF4X2Zyb21fdHlwZSA9IGwzX2NhdF9n ZXRfY29zX21heF9mcm9tX3R5cGUsCisgICAgLmV4Y2VlZHNfY29zX21heCA9IGwzX2NhdF9leGNl ZWRzX2Nvc19tYXgsCisgICAgLndyaXRlX21zciA9IGwzX2NhdF93cml0ZV9tc3IsCiB9OwogCiBz dGF0aWMgdW5zaWduZWQgaW50IGdldF9zb2NrZXRfY3B1KHVuc2lnbmVkIGludCBzb2NrZXQpCkBA IC01MTYsMTEgKzgzMSw2IEBAIHN0YXRpYyBzdHJ1Y3QgcHNyX2NhdF9zb2NrZXRfaW5mbyAqZ2V0 X2NhdF9zb2NrZXRfaW5mbyh1bnNpZ25lZCBpbnQgc29ja2V0KQogICAgIHJldHVybiBjYXRfc29j a2V0X2luZm8gKyBzb2NrZXQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbF90IGNkcF9pc19lbmFi bGVkKHVuc2lnbmVkIGludCBzb2NrZXQpCi17Ci0gICAgcmV0dXJuIHRlc3RfYml0KFBTUl9TT0NL RVRfTDNfQ0RQLCAmY2F0X3NvY2tldF9pbmZvW3NvY2tldF0uZmVhdF9tYXNrKTsKLX0KLQogaW50 IHBzcl9nZXRfaW5mbyh1bnNpZ25lZCBpbnQgc29ja2V0LCBlbnVtIGNibV90eXBlIHR5cGUsCiAg ICAgICAgICAgICAgICAgIHVpbnQzMl90IGRhdFtdLCB1aW50MzJfdCBhcnJheV9sZW4pCiB7CkBA IC01NjIsMTk0ICs4NzIsMzE0IEBAIGludCBwc3JfZ2V0X3ZhbChzdHJ1Y3QgZG9tYWluICpkLCB1 bnNpZ25lZCBpbnQgc29ja2V0LAogICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgYm9vbF90IHBz cl9jaGVja19jYm0odW5zaWduZWQgaW50IGNibV9sZW4sIHVpbnQ2NF90IGNibSkKLXsKLSAgICB1 bnNpZ25lZCBpbnQgZmlyc3RfYml0LCB6ZXJvX2JpdDsKLQotICAgIC8qIFNldCBiaXRzIHNob3Vs ZCBvbmx5IGluIHRoZSByYW5nZSBvZiBbMCwgY2JtX2xlbikuICovCi0gICAgaWYgKCBjYm0gJiAo fjB1bGwgPDwgY2JtX2xlbikgKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIC8qIEF0IGxlYXN0 IG9uZSBiaXQgbmVlZCB0byBiZSBzZXQuICovCi0gICAgaWYgKCBjYm0gPT0gMCApCi0gICAgICAg IHJldHVybiAwOwotCi0gICAgZmlyc3RfYml0ID0gZmluZF9maXJzdF9iaXQoJmNibSwgY2JtX2xl bik7Ci0gICAgemVyb19iaXQgPSBmaW5kX25leHRfemVyb19iaXQoJmNibSwgY2JtX2xlbiwgZmly c3RfYml0KTsKLQotICAgIC8qIFNldCBiaXRzIHNob3VsZCBiZSBjb250aWd1b3VzLiAqLwotICAg IGlmICggemVyb19iaXQgPCBjYm1fbGVuICYmCi0gICAgICAgICBmaW5kX25leHRfYml0KCZjYm0s IGNibV9sZW4sIHplcm9fYml0KSA8IGNibV9sZW4gKQotICAgICAgICByZXR1cm4gMDsKLQotICAg IHJldHVybiAxOwotfQotCi1zdHJ1Y3QgY29zX2NibV9pbmZvCitzdHJ1Y3QgY29zX3dyaXRlX2lu Zm8KIHsKICAgICB1bnNpZ25lZCBpbnQgY29zOwotICAgIGJvb2xfdCBjZHA7Ci0gICAgdWludDY0 X3QgY2JtX2NvZGU7Ci0gICAgdWludDY0X3QgY2JtX2RhdGE7CisgICAgc3RydWN0IGxpc3RfaGVh ZCAqZmVhdF9saXN0OworICAgIGNvbnN0IHVpbnQ2NF90ICp2YWw7CiB9OwogCi1zdGF0aWMgdm9p ZCBkb193cml0ZV9sM19jYm0odm9pZCAqZGF0YSkKK3N0YXRpYyB2b2lkIGRvX3dyaXRlX3Bzcl9t c3Iodm9pZCAqZGF0YSkKIHsKLSAgICBzdHJ1Y3QgY29zX2NibV9pbmZvICppbmZvID0gZGF0YTsK KyAgICBzdHJ1Y3QgY29zX3dyaXRlX2luZm8gKmluZm8gPSAoc3RydWN0IGNvc193cml0ZV9pbmZv ICopZGF0YTsKKyAgICB1bnNpZ25lZCBpbnQgY29zICAgICAgICAgICA9IGluZm8tPmNvczsKKyAg ICBzdHJ1Y3QgbGlzdF9oZWFkICpmZWF0X2xpc3Q9IGluZm8tPmZlYXRfbGlzdDsKKyAgICBjb25z dCB1aW50NjRfdCAqdmFsICAgICAgICA9IGluZm8tPnZhbDsKKyAgICBzdHJ1Y3QgZmVhdF9ub2Rl ICpmZWF0X3RtcDsKKyAgICBpbnQgcmV0OworCisgICAgaWYgKCAhZmVhdF9saXN0ICkKKyAgICAg ICAgcmV0dXJuOwogCi0gICAgaWYgKCBpbmZvLT5jZHAgKQorICAgIGxpc3RfZm9yX2VhY2hfZW50 cnkoZmVhdF90bXAsIGZlYXRfbGlzdCwgbGlzdCkKICAgICB7Ci0gICAgICAgIHdybXNybChNU1Jf SUEzMl9QU1JfTDNfTUFTS19DT0RFKGluZm8tPmNvcyksIGluZm8tPmNibV9jb2RlKTsKLSAgICAg ICAgd3Jtc3JsKE1TUl9JQTMyX1BTUl9MM19NQVNLX0RBVEEoaW5mby0+Y29zKSwgaW5mby0+Y2Jt X2RhdGEpOworICAgICAgICByZXQgPSBmZWF0X3RtcC0+b3BzLndyaXRlX21zcihjb3MsIHZhbCwg ZmVhdF90bXApOworICAgICAgICBpZiAoIHJldCA8PSAwKQorICAgICAgICAgICAgcmV0dXJuOwor CisgICAgICAgIHZhbCArPSByZXQ7CiAgICAgfQotICAgIGVsc2UKLSAgICAgICAgd3Jtc3JsKE1T Ul9JQTMyX1BTUl9MM19NQVNLKGluZm8tPmNvcyksIGluZm8tPmNibV9jb2RlKTsKIH0KIAotc3Rh dGljIGludCB3cml0ZV9sM19jYm0odW5zaWduZWQgaW50IHNvY2tldCwgdW5zaWduZWQgaW50IGNv cywKLSAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IGNibV9jb2RlLCB1aW50NjRfdCBj Ym1fZGF0YSwgYm9vbF90IGNkcCkKK3N0YXRpYyBpbnQgd3JpdGVfcHNyX21zcih1bnNpZ25lZCBp bnQgc29ja2V0LCB1bnNpZ25lZCBpbnQgY29zLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IHVpbnQ2NF90ICp2YWwpCiB7Ci0gICAgc3RydWN0IGNvc19jYm1faW5mbyBpbmZvID0KKyAg ICBzdHJ1Y3QgcHNyX2NhdF9zb2NrZXRfaW5mbyAqaW5mbyA9IGdldF9jYXRfc29ja2V0X2luZm8o c29ja2V0KTsKKworICAgIHN0cnVjdCBjb3Nfd3JpdGVfaW5mbyBkYXRhID0KICAgICB7CiAgICAg ICAgIC5jb3MgPSBjb3MsCi0gICAgICAgIC5jYm1fY29kZSA9IGNibV9jb2RlLAotICAgICAgICAu Y2JtX2RhdGEgPSBjYm1fZGF0YSwKLSAgICAgICAgLmNkcCA9IGNkcCwKKyAgICAgICAgLmZlYXRf bGlzdCA9ICZpbmZvLT5mZWF0X2xpc3QsCisgICAgICAgIC52YWwgPSB2YWwsCiAgICAgfTsKIAog ICAgIGlmICggc29ja2V0ID09IGNwdV90b19zb2NrZXQoc21wX3Byb2Nlc3Nvcl9pZCgpKSApCi0g ICAgICAgIGRvX3dyaXRlX2wzX2NibSgmaW5mbyk7CisgICAgICAgIGRvX3dyaXRlX3Bzcl9tc3Io JmRhdGEpOwogICAgIGVsc2UKICAgICB7CiAgICAgICAgIHVuc2lnbmVkIGludCBjcHUgPSBnZXRf c29ja2V0X2NwdShzb2NrZXQpOwogCiAgICAgICAgIGlmICggY3B1ID49IG5yX2NwdV9pZHMgKQog ICAgICAgICAgICAgcmV0dXJuIC1FTk9UU09DSzsKLSAgICAgICAgb25fc2VsZWN0ZWRfY3B1cyhj cHVtYXNrX29mKGNwdSksIGRvX3dyaXRlX2wzX2NibSwgJmluZm8sIDEpOworICAgICAgICBvbl9z ZWxlY3RlZF9jcHVzKGNwdW1hc2tfb2YoY3B1KSwgZG9fd3JpdGVfcHNyX21zciwgJmRhdGEsIDEp OwogICAgIH0KIAogICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGZpbmRfY29zKHN0cnVj dCBmZWF0X25vZGUgKmZlYXQsIHVuc2lnbmVkIGludCAqcmVmLAotICAgICAgICAgICAgICAgICAg ICB1bnNpZ25lZCBpbnQgY29zX21heCwKLSAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgY2Jt X2NvZGUsIHVpbnQ2NF90IGNibV9kYXRhLCBib29sX3QgY2RwX2VuYWJsZWQpCitzdGF0aWMgdW5z aWduZWQgaW50IGdldF9jb3NfbnVtKGNvbnN0IHN0cnVjdCBwc3JfY2F0X3NvY2tldF9pbmZvICpp bmZvKQoreworICAgIGNvbnN0IHN0cnVjdCBmZWF0X25vZGUgKmZlYXRfdG1wOworICAgIHVuc2ln bmVkIGludCBudW0gPSAwOworCisgICAgbGlzdF9mb3JfZWFjaF9lbnRyeShmZWF0X3RtcCwgJmlu Zm8tPmZlYXRfbGlzdCwgbGlzdCkKKyAgICAgICAgbnVtICs9IGZlYXRfdG1wLT5vcHMuZ2V0X2Nv c19udW0oZmVhdF90bXApOworCisgICAgcmV0dXJuIG51bTsKK30KKworc3RhdGljIGludCBnZXRf b2xkX3NldF9uZXcodWludDY0X3QgKnZhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVp bnQzMl90IGFycmF5X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVj dCBwc3JfY2F0X3NvY2tldF9pbmZvICppbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg dW5zaWduZWQgaW50IG9sZF9jb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIGNi bV90eXBlIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCBtKQorewor ICAgIGNvbnN0IHN0cnVjdCBmZWF0X25vZGUgKmZlYXRfdG1wOworICAgIGludCByZXQ7CisgICAg dWludDY0X3QgKnZhbF90bXAgPSB2YWw7CisKKyAgICBpZiAoICF2YWwgKQorICAgICAgICByZXR1 cm4gLUVJTlZBTDsKKworICAgIC8qIEdldCBhbGwgZmVhdHVyZXMgY3VycmVudCB2YWx1ZXMgYWNj b3JkaW5nIHRvIG9sZF9jb3MuICovCisgICAgbGlzdF9mb3JfZWFjaF9lbnRyeShmZWF0X3RtcCwg JmluZm8tPmZlYXRfbGlzdCwgbGlzdCkKKyAgICB7CisgICAgICAgIC8qIHZhbHVlIGdldHRpbmcg b3JkZXIgaXMgc2FtZSBhcyBmZWF0dXJlIGxpc3QgKi8KKyAgICAgICAgcmV0ID0gZmVhdF90bXAt Pm9wcy5nZXRfb2xkX3ZhbCh2YWxfdG1wLCBmZWF0X3RtcCwgb2xkX2Nvcyk7CisKKyAgICAgICAg dmFsX3RtcCArPSByZXQ7CisgICAgICAgIGlmICggdmFsX3RtcCAtIHZhbCA+IGFycmF5X2xlbikK KyAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgIH0KKworICAgIC8qIFNldCBuZXcgdmFs dWUgaW50byBhcnJheSBhY2NvcmRpbmcgdG8gZmVhdHVyZSdzIHBvc2l0aW9uIGluIGFycmF5LiAq LworICAgIHZhbF90bXAgPSB2YWw7CisgICAgbGlzdF9mb3JfZWFjaF9lbnRyeShmZWF0X3RtcCwg JmluZm8tPmZlYXRfbGlzdCwgbGlzdCkKKyAgICB7CisgICAgICAgIC8qIHZhbHVlIHNldHRpbmcg b3JkZXIgaXMgc2FtZSBhcyBmZWF0dXJlIGxpc3QgKi8KKyAgICAgICAgcmV0ID0gZmVhdF90bXAt Pm9wcy5zZXRfbmV3X3ZhbCh2YWxfdG1wLCBmZWF0X3RtcCwgb2xkX2NvcywgdHlwZSwgbSk7Cisg ICAgICAgIGlmICggcmV0IDwgMCApCisgICAgICAgICAgICByZXR1cm4gcmV0OworCisgICAgICAg IHZhbF90bXAgKz0gcmV0OworICAgICAgICBpZiAoIHZhbF90bXAgLSB2YWwgPiBhcnJheV9sZW4p CisgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30K Kworc3RhdGljIGludCBmaW5kX2Nvcyhjb25zdCB1aW50NjRfdCAqdmFsLCB1aW50MzJfdCBhcnJh eV9sZW4sCisgICAgICAgICAgICAgICAgICAgIGVudW0gY2JtX3R5cGUgdHlwZSwKKyAgICAgICAg ICAgICAgICAgICAgY29uc3Qgc3RydWN0IHBzcl9jYXRfc29ja2V0X2luZm8gKmluZm8pCiB7CiAg ICAgdW5zaWduZWQgaW50IGNvczsKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgKnJlZiA9IGluZm8t PmNvc19yZWY7CisgICAgY29uc3Qgc3RydWN0IGZlYXRfbm9kZSAqZmVhdF90bXA7CisgICAgY29u c3QgdWludDY0X3QgKnZhbF90bXAgPSB2YWw7CisgICAgaW50IHJldDsKKyAgICBib29sIGZvdW5k ID0gZmFsc2U7CisgICAgdW5zaWduZWQgaW50IGNvc19tYXggPSAwOworCisgICAgLyogY29zX21h eCBpcyB0aGUgb25lIG9mIHRoZSBmZWF0dXJlIHdoaWNoIGlzIGJlaW5nIHNldC4gKi8KKyAgICBs aXN0X2Zvcl9lYWNoX2VudHJ5KGZlYXRfdG1wLCAmaW5mby0+ZmVhdF9saXN0LCBsaXN0KQorICAg IHsKKyAgICAgICAgY29zX21heCA9IGZlYXRfdG1wLT5vcHMuZ2V0X2Nvc19tYXhfZnJvbV90eXBl KGZlYXRfdG1wLCB0eXBlKTsKKyAgICAgICAgaWYgKCBjb3NfbWF4ID4gMCApCisgICAgICAgICAg ICBicmVhazsKKyAgICB9CiAKICAgICBmb3IgKCBjb3MgPSAwOyBjb3MgPD0gY29zX21heDsgY29z KysgKQogICAgIHsKLSAgICAgICAgaWYgKCAocmVmW2Nvc10gfHwgY29zID09IDApICYmCi0gICAg ICAgICAgICAgKCghY2RwX2VuYWJsZWQgJiYgZmVhdC0+Y29zX3JlZ192YWxbY29zXSA9PSBjYm1f Y29kZSkgfHwKLSAgICAgICAgICAgICAgKGNkcF9lbmFibGVkICYmIGdldF9jZHBfY29kZShmZWF0 LCBjb3MpID09IGNibV9jb2RlICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRf Y2RwX2RhdGEoZmVhdCwgY29zKSA9PSBjYm1fZGF0YSkpICkKKyAgICAgICAgaWYgKCBjb3MgJiYg IXJlZltjb3NdICkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIC8qIE5vdCBmb3Vu ZCwgbmVlZCBmaW5kIGFnYWluIGZyb20gYmVnaW5uaW5nLiAqLworICAgICAgICB2YWxfdG1wID0g dmFsOworICAgICAgICBsaXN0X2Zvcl9lYWNoX2VudHJ5KGZlYXRfdG1wLCAmaW5mby0+ZmVhdF9s aXN0LCBsaXN0KQorICAgICAgICB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogQ29t cGFyZSB2YWx1ZSBhY2NvcmRpbmcgdG8gZmVhdHVyZSBsaXN0IG9yZGVyLgorICAgICAgICAgICAg ICogV2UgbXVzdCBmb2xsb3cgdGhpcyBvcmRlciBiZWNhdXNlIHZhbHVlIGFycmF5IGlzIGFzc2Vt YmxlZAorICAgICAgICAgICAgICogYXMgdGhpcyBvcmRlciBpbiBnZXRfb2xkX3NldF9uZXcoKS4K KyAgICAgICAgICAgICAqLworICAgICAgICAgICAgcmV0ID0gZmVhdF90bXAtPm9wcy5jb21wYXJl X3ZhbCh2YWxfdG1wLCBmZWF0X3RtcCwgY29zLCAmZm91bmQpOworICAgICAgICAgICAgaWYgKCBy ZXQgPCAwICkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0OworCisgICAgICAgICAgICAvKiBJ ZiBmYWlsIHRvIG1hdGNoLCBnbyB0byBuZXh0IGNvcyB0byBjb21wYXJlLiAqLworICAgICAgICAg ICAgaWYgKCAhZm91bmQgKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICB2 YWxfdG1wICs9IHJldDsKKyAgICAgICAgICAgIGlmICggdmFsX3RtcCAtIHZhbCA+IGFycmF5X2xl biApCisgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgICAgIH0KKworICAgICAg ICAvKgorICAgICAgICAgKiBXaXRoIHRoaXMgY29zIGlkLCBldmVyeSBlbnRyeSBvZiB2YWx1ZSBh cnJheSBjYW4gbWF0Y2guIFRoaXMgY29zCisgICAgICAgICAqIGlzIHdoYXQgd2UgZmluZC4KKyAg ICAgICAgICovCisgICAgICAgIGlmICggZm91bmQgKQogICAgICAgICAgICAgcmV0dXJuIGNvczsK ICAgICB9CiAKICAgICByZXR1cm4gLUVOT0VOVDsKIH0KIAotc3RhdGljIGludCBwaWNrX2F2YWls X2Nvcyh1bnNpZ25lZCBpbnQgKnJlZiwgdW5zaWduZWQgaW50IGNvc19tYXgsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBvbGRfY29zKQorc3RhdGljIGJvb2wgZXhjZWVk c19jb3NfbWF4KGNvbnN0IHVpbnQ2NF90ICp2YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdWludDMyX3QgYXJyYXlfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IHN0cnVjdCBwc3JfY2F0X3NvY2tldF9pbmZvICppbmZvLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHVuc2lnbmVkIGludCBjb3MpCit7CisgICAgdW5zaWduZWQgaW50IHJldDsKKyAgICBj b25zdCB1aW50NjRfdCAqdmFsX3RtcCA9IHZhbDsKKyAgICBjb25zdCBzdHJ1Y3QgZmVhdF9ub2Rl ICpmZWF0X3RtcDsKKworICAgIGxpc3RfZm9yX2VhY2hfZW50cnkoZmVhdF90bXAsICZpbmZvLT5m ZWF0X2xpc3QsIGxpc3QpCisgICAgeworICAgICAgICByZXQgPSBmZWF0X3RtcC0+b3BzLmV4Y2Vl ZHNfY29zX21heCh2YWxfdG1wLCBmZWF0X3RtcCwgY29zKTsKKyAgICAgICAgaWYgKCAhcmV0ICkK KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICB2YWxfdG1wICs9IHJldDsKKyAg ICAgICAgaWYgKCB2YWxfdG1wIC0gdmFsID4gYXJyYXlfbGVuICkKKyAgICAgICAgICAgIHJldHVy biBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGludCBhbGxv Y19uZXdfY29zKGNvbnN0IHN0cnVjdCBwc3JfY2F0X3NvY2tldF9pbmZvICppbmZvLAorICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ2NF90ICp2YWwsIHVpbnQzMl90IGFycmF5X2xl biwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgb2xkX2NvcywKKyAgICAg ICAgICAgICAgICAgICAgICAgICBlbnVtIGNibV90eXBlIHR5cGUpCiB7CiAgICAgdW5zaWduZWQg aW50IGNvczsKKyAgICB1bnNpZ25lZCBpbnQgY29zX21heCA9IDA7CisgICAgY29uc3Qgc3RydWN0 IGZlYXRfbm9kZSAqZmVhdF90bXA7CisgICAgY29uc3QgdW5zaWduZWQgaW50ICpyZWYgPSBpbmZv LT5jb3NfcmVmOworCisgICAgLyoKKyAgICAgKiBjb3NfbWF4IGlzIHRoZSBvbmUgb2YgdGhlIGZl YXR1cmUgd2hpY2ggaXMgYmVpbmcgc2V0LgorICAgICAqLworICAgIGxpc3RfZm9yX2VhY2hfZW50 cnkoZmVhdF90bXAsICZpbmZvLT5mZWF0X2xpc3QsIGxpc3QpCisgICAgeworICAgICAgICBjb3Nf bWF4ID0gZmVhdF90bXAtPm9wcy5nZXRfY29zX21heF9mcm9tX3R5cGUoZmVhdF90bXAsIHR5cGUp OworICAgICAgICBpZiAoIGNvc19tYXggPiAwICkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0K KworICAgIGlmICggIWNvc19tYXggKQorICAgICAgICByZXR1cm4gLUVOT0VOVDsKIAogICAgIC8q IElmIG9sZCBjb3MgaXMgcmVmZXJyZWQgb25seSBieSB0aGUgZG9tYWluLCB0aGVuIHVzZSBpdC4g Ki8KLSAgICBpZiAoIHJlZltvbGRfY29zXSA9PSAxICYmIG9sZF9jb3MgIT0gMCApCi0gICAgICAg IHJldHVybiBvbGRfY29zOworICAgIGlmICggcmVmW29sZF9jb3NdID09IDEgJiYgb2xkX2NvcyAp CisgICAgICAgIGlmICggZXhjZWVkc19jb3NfbWF4KHZhbCwgYXJyYXlfbGVuLCBpbmZvLCBvbGRf Y29zKSApCisgICAgICAgICAgICByZXR1cm4gb2xkX2NvczsKIAogICAgIC8qIEZpbmQgYW4gdW51 c2VkIG9uZSBvdGhlciB0aGFuIGNvczAuICovCiAgICAgZm9yICggY29zID0gMTsgY29zIDw9IGNv c19tYXg7IGNvcysrICkKLSAgICAgICAgaWYgKCByZWZbY29zXSA9PSAwICkKKyAgICAgICAgLyoK KyAgICAgICAgICogcmVmIGlzIDAgbWVhbnMgdGhpcyBDT1MgaXMgbm90IHVzZWQgYnkgb3RoZXIg ZG9tYWluIGFuZAorICAgICAgICAgKiBjYW4gYmUgdXNlZCBmb3IgY3VycmVudCBzZXR0aW5nLgor ICAgICAgICAgKi8KKyAgICAgICAgaWYgKCAhcmVmW2Nvc10gKQorICAgICAgICB7CisgICAgICAg ICAgICBpZiAoICFleGNlZWRzX2Nvc19tYXgodmFsLCBhcnJheV9sZW4sIGluZm8sIGNvcykgKQor ICAgICAgICAgICAgICAgIHJldHVybiAtRU5PRU5UOworCiAgICAgICAgICAgICByZXR1cm4gY29z OworICAgICAgICB9CiAKICAgICByZXR1cm4gLUVOT0VOVDsKIH0KIAotaW50IHBzcl9zZXRfbDNf Y2JtKHN0cnVjdCBkb21haW4gKmQsIHVuc2lnbmVkIGludCBzb2NrZXQsCi0gICAgICAgICAgICAg ICAgICAgdWludDY0X3QgY2JtLCBlbnVtIGNibV90eXBlIHR5cGUpCitpbnQgcHNyX3NldF92YWwo c3RydWN0IGRvbWFpbiAqZCwgdW5zaWduZWQgaW50IHNvY2tldCwKKyAgICAgICAgICAgICAgICB1 aW50NjRfdCB2YWwsIGVudW0gY2JtX3R5cGUgdHlwZSkKIHsKLSAgICB1bnNpZ25lZCBpbnQgb2xk X2NvcywgY29zX21heDsKKyAgICB1bnNpZ25lZCBpbnQgb2xkX2NvczsKICAgICBpbnQgY29zLCBy ZXQ7Ci0gICAgdWludDY0X3QgY2JtX2RhdGEsIGNibV9jb2RlOwotICAgIGJvb2xfdCBjZHBfZW5h YmxlZCA9IGNkcF9pc19lbmFibGVkKHNvY2tldCk7Ci0gICAgc3RydWN0IHBzcl9jYXRfc29ja2V0 X2luZm8gKmluZm8gPSBnZXRfY2F0X3NvY2tldF9pbmZvKHNvY2tldCk7CiAgICAgdW5zaWduZWQg aW50ICpyZWY7Ci0gICAgc3RydWN0IGZlYXRfbm9kZSAqZmVhdF90bXA7CisgICAgdWludDY0X3Qg KnZhbF9hcnJheTsKKyAgICBzdHJ1Y3QgcHNyX2NhdF9zb2NrZXRfaW5mbyAqaW5mbyA9IGdldF9j YXRfc29ja2V0X2luZm8oc29ja2V0KTsKKyAgICB1aW50MzJfdCBhcnJheV9sZW47CiAKICAgICBp ZiAoIElTX0VSUihpbmZvKSApCiAgICAgICAgIHJldHVybiBQVFJfRVJSKGluZm8pOwogCi0gICAg ZmVhdF90bXAgPSBnZXRfZmVhdF9sMyhpbmZvKTsKLSAgICBpZiAoICFmZWF0X3RtcCApCi0gICAg ICAgIHJldHVybiAtRU5PRU5UOwotCi0gICAgaWYgKCAhcHNyX2NoZWNrX2NibShmZWF0X3RtcC0+ aW5mby5jYm1fbGVuLCBjYm0pICkKLSAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0KLSAgICBpZiAo ICFjZHBfZW5hYmxlZCAmJiAodHlwZSA9PSBQU1JfQ0JNX1RZUEVfTDNfQ09ERSB8fAotICAgICAg ICAgICAgICAgICAgICAgICAgICB0eXBlID09IFBTUl9DQk1fVFlQRV9MM19EQVRBKSApCi0gICAg ICAgIHJldHVybiAtRU5YSU87Ci0KLSAgICBjb3NfbWF4ID0gZmVhdF90bXAtPmluZm8uY29zX21h eDsKICAgICBvbGRfY29zID0gZC0+YXJjaC5wc3JfY29zX2lkc1tzb2NrZXRdOwogICAgIHJlZiA9 IGluZm8tPmNvc19yZWY7CiAKLSAgICBzd2l0Y2ggKCB0eXBlICkKLSAgICB7Ci0gICAgY2FzZSBQ U1JfQ0JNX1RZUEVfTDM6Ci0gICAgICAgIGNibV9jb2RlID0gY2JtOwotICAgICAgICBjYm1fZGF0 YSA9IGNibTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFBTUl9DQk1fVFlQRV9MM19DT0RF OgotICAgICAgICBjYm1fY29kZSA9IGNibTsKLSAgICAgICAgY2JtX2RhdGEgPSBnZXRfY2RwX2Rh dGEoZmVhdF90bXAsIG9sZF9jb3MpOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgUFNSX0NC TV9UWVBFX0wzX0RBVEE6Ci0gICAgICAgIGNibV9jb2RlID0gZ2V0X2NkcF9jb2RlKGZlYXRfdG1w LCBvbGRfY29zKTsKLSAgICAgICAgY2JtX2RhdGEgPSBjYm07Ci0gICAgICAgIGJyZWFrOworICAg IC8qCisgICAgICogQXNzZW1sZSBhIHZhbHVlIGFycmF5IHRvIHN0b3JlIGFsbCBmZWF0dWVzIGNv c19yZWdfdmFsW29sZF9jb3NdLgorICAgICAqIEFuZCwgc2V0IHRoZSBpbnB1dCB2YWwgaW50byBh cnJheSBhY2NvcmRpbmcgdG8gdGhlIGZlYXR1cmUncworICAgICAqIHBvc2l0aW9uIGluIGFycmF5 LgorICAgICAqLworICAgIGFycmF5X2xlbiA9IGdldF9jb3NfbnVtKChjb25zdCBzdHJ1Y3QgcHNy X2NhdF9zb2NrZXRfaW5mbyAqKWluZm8pOworICAgIHZhbF9hcnJheSA9IHh6YWxsb2NfYXJyYXko dWludDY0X3QsIGFycmF5X2xlbik7CisgICAgaWYgKCAhdmFsX2FycmF5ICkKKyAgICAgICAgcmV0 dXJuIC1FTk9NRU07CiAKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfVU5SRUFDSEFCTEUo KTsKLSAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgaWYgKCAocmV0ID0gZ2V0X29sZF9zZXRf bmV3KHZhbF9hcnJheSwgYXJyYXlfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoY29uc3Qgc3RydWN0IHBzcl9jYXRfc29ja2V0X2luZm8gKilpbmZvLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBvbGRfY29zLCB0eXBlLCB2YWwpKSAhPSAwICkKKyAgICB7Cisg ICAgICAgIHhmcmVlKHZhbF9hcnJheSk7CisgICAgICAgIHJldHVybiByZXQ7CiAgICAgfQogCisg ICAgLyoKKyAgICAgKiBMb2NrIGhlcmUgdG8gbWFrZSBzdXJlIHRoZSByZWYgaXMgbm90IGNoYW5n ZWQgZHVyaW5nIGZpbmQgYW5kCisgICAgICogd3JpdGUgcHJvY2Vzcy4KKyAgICAgKi8KICAgICBz cGluX2xvY2soJmluZm8tPnJlZl9sb2NrKTsKLSAgICBjb3MgPSBmaW5kX2NvcyhmZWF0X3RtcCwg cmVmLCBjb3NfbWF4LCBjYm1fY29kZSwgY2JtX2RhdGEsIGNkcF9lbmFibGVkKTsKKyAgICAvKgor ICAgICAqIFRyeSB0byBmaW5kIGlmIHRoZXJlIGlzIGFscmVhZHkgYSBDT1MgSUQgb24gd2hpY2gg YWxsIGZlYXR1cmVzJyB2YWx1ZXMKKyAgICAgKiBhcmUgc2FtZSBhcyB0aGUgYXJyYXkuIFRoZW4s IHdlIGNhbiByZXVzZSB0aGlzIENPUyBJRC4KKyAgICAgKi8KKyAgICBjb3MgPSBmaW5kX2Nvcygo Y29uc3QgdWludDY0X3QgKil2YWxfYXJyYXksIGFycmF5X2xlbiwgdHlwZSwKKyAgICAgICAgICAg ICAgICAgICAoY29uc3Qgc3RydWN0IHBzcl9jYXRfc29ja2V0X2luZm8gKilpbmZvKTsKICAgICBp ZiAoIGNvcyA+PSAwICkKICAgICB7CiAgICAgICAgIGlmICggY29zID09IG9sZF9jb3MgKQogICAg ICAgICB7CiAgICAgICAgICAgICBzcGluX3VubG9jaygmaW5mby0+cmVmX2xvY2spOworICAgICAg ICAgICAgeGZyZWUodmFsX2FycmF5KTsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9 CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAgIGNvcyA9IHBpY2tfYXZhaWxfY29zKHJl ZiwgY29zX21heCwgb2xkX2Nvcyk7CisgICAgICAgIC8qIElmIGZhaWwgdG8gZmluZCwgd2UgbmVl ZCBhbGxvY2F0ZSBhIG5ldyBDT1MgSUQuICovCisgICAgICAgIGNvcyA9IGFsbG9jX25ld19jb3Mo KGNvbnN0IHN0cnVjdCBwc3JfY2F0X3NvY2tldF9pbmZvICopaW5mbywKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoY29uc3QgdWludDY0X3QgKil2YWxfYXJyYXksIGFycmF5X2xlbiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICBvbGRfY29zLCB0eXBlKTsKICAgICAgICAgaWYgKCBj b3MgPCAwICkKICAgICAgICAgewogICAgICAgICAgICAgc3Bpbl91bmxvY2soJmluZm8tPnJlZl9s b2NrKTsKKyAgICAgICAgICAgIHhmcmVlKHZhbF9hcnJheSk7CiAgICAgICAgICAgICByZXR1cm4g Y29zOwogICAgICAgICB9CiAKLSAgICAgICAgLyogV2UgdHJ5IHRvIGF2b2lkIHdyaXRpbmcgTVNS LiAqLwotICAgICAgICBpZiAoIChjZHBfZW5hYmxlZCAmJgotICAgICAgICAgICAgIChnZXRfY2Rw X2NvZGUoZmVhdF90bXAsIGNvcykgIT0gY2JtX2NvZGUgfHwKLSAgICAgICAgICAgICAgZ2V0X2Nk cF9kYXRhKGZlYXRfdG1wLCBjb3MpICE9IGNibV9kYXRhKSkgfHwKLSAgICAgICAgICAgICAoIWNk cF9lbmFibGVkICYmIGZlYXRfdG1wLT5jb3NfcmVnX3ZhbFtjb3NdICE9IGNibV9jb2RlKSApCisg ICAgICAgIC8qIFdyaXRlIGFsbCBmZWF0dXJlcyBNU1JzIGFjY29yZGluZyB0byB0aGUgQ09TIElE LiAqLworICAgICAgICByZXQgPSB3cml0ZV9wc3JfbXNyKHNvY2tldCwgY29zLCAoY29uc3QgdWlu dDY0X3QgKil2YWxfYXJyYXkpOworICAgICAgICBpZiAoIHJldCApCiAgICAgICAgIHsKLSAgICAg ICAgICAgIHJldCA9IHdyaXRlX2wzX2NibShzb2NrZXQsIGNvcywgY2JtX2NvZGUsIGNibV9kYXRh LCBjZHBfZW5hYmxlZCk7Ci0gICAgICAgICAgICBpZiAoIHJldCApCi0gICAgICAgICAgICB7Ci0g ICAgICAgICAgICAgICAgc3Bpbl91bmxvY2soJmluZm8tPnJlZl9sb2NrKTsKLSAgICAgICAgICAg ICAgICByZXR1cm4gcmV0OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZ2V0X2NkcF9jb2Rl KGZlYXRfdG1wLCBjb3MpID0gY2JtX2NvZGU7Ci0gICAgICAgICAgICBnZXRfY2RwX2RhdGEoZmVh dF90bXAsIGNvcykgPSBjYm1fZGF0YTsKKyAgICAgICAgICAgIHNwaW5fdW5sb2NrKCZpbmZvLT5y ZWZfbG9jayk7CisgICAgICAgICAgICB4ZnJlZSh2YWxfYXJyYXkpOworICAgICAgICAgICAgcmV0 dXJuIHJldDsKICAgICAgICAgfQogICAgIH0KIApAQCAtNzU4LDYgKzExODgsNyBAQCBpbnQgcHNy X3NldF9sM19jYm0oc3RydWN0IGRvbWFpbiAqZCwgdW5zaWduZWQgaW50IHNvY2tldCwKICAgICBz cGluX3VubG9jaygmaW5mby0+cmVmX2xvY2spOwogCiAgICAgZC0+YXJjaC5wc3JfY29zX2lkc1tz b2NrZXRdID0gY29zOworICAgIHhmcmVlKHZhbF9hcnJheSk7CiAKICAgICByZXR1cm4gMDsKIH0K ZGlmZiAtLWdpdCBhL3hlbi9pbmNsdWRlL2FzbS14ODYvcHNyLmggYi94ZW4vaW5jbHVkZS9hc20t eDg2L3Bzci5oCmluZGV4IGYyODcyYTIuLjE3ZWU2ZjMgMTAwNjQ0Ci0tLSBhL3hlbi9pbmNsdWRl L2FzbS14ODYvcHNyLmgKKysrIGIveGVuL2luY2x1ZGUvYXNtLXg4Ni9wc3IuaApAQCAtNjcsOCAr NjcsOCBAQCBpbnQgcHNyX2dldF9pbmZvKHVuc2lnbmVkIGludCBzb2NrZXQsIGVudW0gY2JtX3R5 cGUgdHlwZSwKICAgICAgICAgICAgICAgICAgdWludDMyX3QgZGF0W10sIHVpbnQzMl90IGFycmF5 X2xlbik7CiBpbnQgcHNyX2dldF92YWwoc3RydWN0IGRvbWFpbiAqZCwgdW5zaWduZWQgaW50IHNv Y2tldCwKICAgICAgICAgICAgICAgICB1aW50NjRfdCAqdmFsLCBlbnVtIGNibV90eXBlIHR5cGUp OwotaW50IHBzcl9zZXRfbDNfY2JtKHN0cnVjdCBkb21haW4gKmQsIHVuc2lnbmVkIGludCBzb2Nr ZXQsCi0gICAgICAgICAgICAgICAgICAgdWludDY0X3QgY2JtLCBlbnVtIGNibV90eXBlIHR5cGUp OworaW50IHBzcl9zZXRfdmFsKHN0cnVjdCBkb21haW4gKmQsIHVuc2lnbmVkIGludCBzb2NrZXQs CisgICAgICAgICAgICAgICAgdWludDY0X3QgdmFsLCBlbnVtIGNibV90eXBlIHR5cGUpOwogCiBp bnQgcHNyX2RvbWFpbl9pbml0KHN0cnVjdCBkb21haW4gKmQpOwogdm9pZCBwc3JfZG9tYWluX2Zy ZWUoc3RydWN0IGRvbWFpbiAqZCk7Ci0tIAoyLjcuNAoKCl9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVs QGxpc3RzLnhlbi5vcmcKaHR0cHM6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=