From mboxrd@z Thu Jan 1 00:00:00 1970 From: Yi Sun Subject: [PATCH 1/3] x86: refactor psr implementation in hypervisor. Date: Thu, 25 Aug 2016 13:22:17 +0800 Message-ID: <1472102537-7155-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 1bcnA9-0007hr-LY for xen-devel@lists.xenproject.org; Thu, 25 Aug 2016 05:25:13 +0000 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.y.sun@linux.intel.com, jbeulich@suse.com, chao.p.peng@linux.intel.com List-Id: xen-devel@lists.xenproject.org Q3VycmVudCBwc3IuYyBpcyBkZXNpZ25lZCBmb3Igc3VwcG9ydGluZyBMMyBDQVQvQ0RQLiBJdCBo YXMgbWFueQpsaW1pdGF0aW9ucyB0byBhZGQgbmV3IGZlYXR1cmUuIENvbnNpZGVyaW5nIHRvIHN1 cHBvcnQgbW9yZSBQU1IKZmVhdHVyZXMsIHdlIG5lZWQgcmVmYWN0b3IgUFNSIGltcGxlbWVudGF0 aW9uIHRvIG1ha2UgaXQgbW9yZQpmbGV4aWJsZSBhbmQgZnVsZmlsbCB0aGUgcHJpbmNpcGxlLCBv cGVuIGZvciBleHRlbnNpb24gYnV0IGNsb3NlZApmb3IgbW9kaWZpY2F0aW9uLgoKVGhlIGNvcmUg b2YgdGhlIHJlZmFjdG9yaW5nIGlzIHRvIGFic3RyYWN0IHRoZSBjb21tb24gYWN0aW9ucyBhbmQK ZW5jYXBzdWxhdGUgdGhlbSBpbnRvICJzdHJ1Y3QgZmVhdF9vcHMiLiBUaGUgZGV0YWlsZWQgc3Rl cHMgdG8gYWRkCmEgbmV3IGZlYXR1cmUgYXJlIGRlc2NyaWJlZCBhdCB0aGUgaGVhZCBvZiBwc3Iu Yy4KClNpZ25lZC1vZmYtYnk6IFlpIFN1biA8eWkueS5zdW5AbGludXguaW50ZWwuY29tPgotLS0K IHhlbi9hcmNoL3g4Ni9kb21jdGwuYyAgICAgfCAgIDM2ICstCiB4ZW4vYXJjaC94ODYvcHNyLmMg ICAgICAgIHwgMTEyMSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0t LS0KIHhlbi9hcmNoL3g4Ni9zeXNjdGwuYyAgICAgfCAgICA5ICstCiB4ZW4vaW5jbHVkZS9hc20t eDg2L3Bzci5oIHwgICAyMSArLQogNCBmaWxlcyBjaGFuZ2VkLCA5MTIgaW5zZXJ0aW9ucygrKSwg Mjc1IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3hlbi9hcmNoL3g4Ni9kb21jdGwuYyBiL3hl bi9hcmNoL3g4Ni9kb21jdGwuYwppbmRleCBiZWQ3MGFhLi5hNTFlZDJjIDEwMDY0NAotLS0gYS94 ZW4vYXJjaC94ODYvZG9tY3RsLmMKKysrIGIveGVuL2FyY2gveDg2L2RvbWN0bC5jCkBAIC0xMzU4 LDQxICsxMzU4LDQxIEBAIGxvbmcgYXJjaF9kb19kb21jdGwoCiAgICAgICAgIHN3aXRjaCAoIGRv bWN0bC0+dS5wc3JfY2F0X29wLmNtZCApCiAgICAgICAgIHsKICAgICAgICAgY2FzZSBYRU5fRE9N Q1RMX1BTUl9DQVRfT1BfU0VUX0wzX0NCTToKLSAgICAgICAgICAgIHJldCA9IHBzcl9zZXRfbDNf Y2JtKGQsIGRvbWN0bC0+dS5wc3JfY2F0X29wLnRhcmdldCwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGRvbWN0bC0+dS5wc3JfY2F0X29wLmRhdGEsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQU1JfQ0JNX1RZUEVfTDMpOworICAgICAgICAgICAgcmV0ID0gcHNy X3NldF92YWwoZCwgZG9tY3RsLT51LnBzcl9jYXRfb3AudGFyZ2V0LAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZG9tY3RsLT51LnBzcl9jYXRfb3AuZGF0YSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFBTUl9NQVNLX1RZUEVfTDNfQ0JNKTsKICAgICAgICAgICAgIGJyZWFr OwogCiAgICAgICAgIGNhc2UgWEVOX0RPTUNUTF9QU1JfQ0FUX09QX1NFVF9MM19DT0RFOgotICAg ICAgICAgICAgcmV0ID0gcHNyX3NldF9sM19jYm0oZCwgZG9tY3RsLT51LnBzcl9jYXRfb3AudGFy Z2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tY3RsLT51LnBzcl9jYXRf b3AuZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBTUl9DQk1fVFlQRV9M M19DT0RFKTsKKyAgICAgICAgICAgIHJldCA9IHBzcl9zZXRfdmFsKGQsIGRvbWN0bC0+dS5wc3Jf Y2F0X29wLnRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbWN0bC0+dS5w c3JfY2F0X29wLmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQU1JfTUFTS19U WVBFX0wzX0NPREUpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBYRU5fRE9N Q1RMX1BTUl9DQVRfT1BfU0VUX0wzX0RBVEE6Ci0gICAgICAgICAgICByZXQgPSBwc3Jfc2V0X2wz X2NibShkLCBkb21jdGwtPnUucHNyX2NhdF9vcC50YXJnZXQsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBkb21jdGwtPnUucHNyX2NhdF9vcC5kYXRhLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUFNSX0NCTV9UWVBFX0wzX0RBVEEpOworICAgICAgICAgICAgcmV0 ID0gcHNyX3NldF92YWwoZCwgZG9tY3RsLT51LnBzcl9jYXRfb3AudGFyZ2V0LAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZG9tY3RsLT51LnBzcl9jYXRfb3AuZGF0YSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFBTUl9NQVNLX1RZUEVfTDNfREFUQSk7CiAgICAgICAgICAg ICBicmVhazsKIAogICAgICAgICBjYXNlIFhFTl9ET01DVExfUFNSX0NBVF9PUF9HRVRfTDNfQ0JN OgotICAgICAgICAgICAgcmV0ID0gcHNyX2dldF9sM19jYm0oZCwgZG9tY3RsLT51LnBzcl9jYXRf b3AudGFyZ2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRvbWN0bC0+dS5w c3JfY2F0X29wLmRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQU1JfQ0JN X1RZUEVfTDMpOworICAgICAgICAgICAgcmV0ID0gcHNyX2dldF92YWwoZCwgZG9tY3RsLT51LnBz cl9jYXRfb3AudGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRvbWN0bC0+ dS5wc3JfY2F0X29wLmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQU1JfTUFT S19UWVBFX0wzX0NCTSk7CiAgICAgICAgICAgICBjb3B5YmFjayA9IDE7CiAgICAgICAgICAgICBi cmVhazsKIAogICAgICAgICBjYXNlIFhFTl9ET01DVExfUFNSX0NBVF9PUF9HRVRfTDNfQ09ERToK LSAgICAgICAgICAgIHJldCA9IHBzcl9nZXRfbDNfY2JtKGQsIGRvbWN0bC0+dS5wc3JfY2F0X29w LnRhcmdldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkb21jdGwtPnUucHNy X2NhdF9vcC5kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFNSX0NCTV9U WVBFX0wzX0NPREUpOworICAgICAgICAgICAgcmV0ID0gcHNyX2dldF92YWwoZCwgZG9tY3RsLT51 LnBzcl9jYXRfb3AudGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRvbWN0 bC0+dS5wc3JfY2F0X29wLmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQU1Jf TUFTS19UWVBFX0wzX0NPREUpOwogICAgICAgICAgICAgY29weWJhY2sgPSAxOwogICAgICAgICAg ICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBYRU5fRE9NQ1RMX1BTUl9DQVRfT1BfR0VUX0wzX0RB VEE6Ci0gICAgICAgICAgICByZXQgPSBwc3JfZ2V0X2wzX2NibShkLCBkb21jdGwtPnUucHNyX2Nh dF9vcC50YXJnZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZG9tY3RsLT51 LnBzcl9jYXRfb3AuZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBTUl9D Qk1fVFlQRV9MM19EQVRBKTsKKyAgICAgICAgICAgIHJldCA9IHBzcl9nZXRfdmFsKGQsIGRvbWN0 bC0+dS5wc3JfY2F0X29wLnRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZk b21jdGwtPnUucHNyX2NhdF9vcC5kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UFNSX01BU0tfVFlQRV9MM19EQVRBKTsKICAgICAgICAgICAgIGNvcHliYWNrID0gMTsKICAgICAg ICAgICAgIGJyZWFrOwogCmRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYvcHNyLmMgYi94ZW4vYXJj aC94ODYvcHNyLmMKaW5kZXggMGI1MDczYy4uYTc3YjU1YSAxMDA2NDQKLS0tIGEveGVuL2FyY2gv eDg2L3Bzci5jCisrKyBiL3hlbi9hcmNoL3g4Ni9wc3IuYwpAQCAtMjMsMjIgKzIzLDExNiBAQAog I2RlZmluZSBQU1JfQ0FUICAgICAgICAoMTw8MSkKICNkZWZpbmUgUFNSX0NEUCAgICAgICAgKDE8 PDIpCiAKLXN0cnVjdCBwc3JfY2F0X2NibSB7Ci0gICAgdW5pb24gewotICAgICAgICB1aW50NjRf dCBjYm07Ci0gICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICB1aW50NjRfdCBjb2RlOwotICAg ICAgICAgICAgdWludDY0X3QgZGF0YTsKLSAgICAgICAgfTsKLSAgICB9OworLyoKKyAqIFRvIGFk ZCBhIG5ldyBQU1IgZmVhdHVyZSwgcGxlYXNlIGZvbGxvdyBiZWxvdyBzdGVwczoKKyAqIDEuIElt cGxlbWVudCBmZWF0dXJlIHNwZWNpZmljIGNhbGxiYWNrIGZ1bmN0aW9ucyBsaXN0ZWQgaW4KKyAq ICAgICJzdHJ1Y3QgZmVhdF9vcHMiOworICogMi4gSW1wbGVtZW50IGEgZmVhdHVyZSBzcGVjaWZp YyAic3RydWN0IGZlYXRfb3BzIiBvYmplY3QgYW5kIHJlZ2lzdGVyCisgKiAgICBmZWF0dXJlIHNw ZWNpZmljIGNhbGxiYWNrIGZ1bmN0aW9ucyBpbnRvIGl0OworICogMy4gRGVsY2FyZSBmZWF0X2xp c3Qgb2JqZWN0IGZvciB0aGUgZmVhdHVyZSBhbmQgbWFsbG9jIG1lbW9yeSBmb3IgaXQKKyAqICAg IGluIGludGVybmFsX2NwdV9wcmVwYXJlKCkuIENvcnJlc3BvbmRpbmdseSwgZnJlZSB0aGVtIGlu CisgKiAgICBmcmVlX2ZlYXR1cmUoKTsKKyAqIDQuIEFkZCBmZWF0dXJlIGluaXRpYWxpemF0aW9u IGNvZGVzIGluIGludGVybmFsX2NwdV9pbml0KCkuCisgKi8KKworc3RydWN0IGZlYXRfbGlzdDsK K3N0cnVjdCBwc3Jfc29ja2V0X2FsbG9jX2luZm87CisKKy8qIEV2ZXJ5IGZlYXR1cmUgZW5hYmxl ZCBzaG91bGQgaW1wbGVtZW50IHN1Y2ggb3BzIGFuZCBjYWxsYmFjayBmdW5jdGlvbnMuICovCitz dHJ1Y3QgZmVhdF9vcHMgeworICAgIC8qCisgICAgICogaW5pdF9mZWF0dXJlIGlzIHVzZWQgaW4g Y3B1IGluaXRpYWxpemF0aW9uIHByb2Nlc3MgdG8gZG8gZmVhdHVyZQorICAgICAqIHNwZWNpZmlj IGluaXRpYWxpemF0aW9uIHdvcmtzLgorICAgICAqLworICAgIHZvaWQgKCppbml0X2ZlYXR1cmUp KHVuc2lnbmVkIGludCBlYXgsIHVuc2lnbmVkIGludCBlYngsCisgICAgICAgICAgICAgICAgICAg ICAgICAgdW5zaWduZWQgaW50IGVjeCwgdW5zaWduZWQgaW50IGVkeCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICBzdHJ1Y3QgZmVhdF9saXN0ICpwRmVhdCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICBzdHJ1Y3QgcHNyX3NvY2tldF9hbGxvY19pbmZvICppbmZvKTsKKyAgICAvKgorICAgICAq IGdldF9vbGRfc2V0X25ldyBpcyB1c2VkIGluIHNldCB2YWx1ZSBwcm9jZXNzIHRvIGdldCBhbGwg ZmVhdHVyZXMnCisgICAgICogQ09TIHJlZ2lzdGVycyB2YWx1ZXMgYWNjb3JkaW5nIHRvIG9yaWdp bmFsIGNvcyBpZCBvZiB0aGUgZG9tYWluLgorICAgICAqIFRoZW4sIGFzc2VtYmxlIHRoZW0gaW50 byBhbiBtYXNrIGFycmF5IGFzIGZlYXR1cmUgbGlzdCBvcmRlci4KKyAgICAgKiBUaGVuLCBzZXQg dGhlIG5ldyBmZWF0dXJlIHZhbHVlIGludG8gZmVhdHVyZSBjb3JyZXNwb25kaW5nIHBvc2l0aW9u CisgICAgICogaW4gdGhlIGFycmF5LiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFpciB3aXRo IGNvbXBhcmVfbWFzay4KKyAgICAgKi8KKyAgICBpbnQgKCpnZXRfb2xkX3NldF9uZXcpKHVpbnQ2 NF90ICptYXNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGZlYXRfbGlzdCAq cEZlYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgb2xkX2NvcywK KyAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gbWFza190eXBlIHR5cGUsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCBtKTsKKyAgICAvKgorICAgICAqIGNvbXBhcmVf bWFzayBpcyB1c2VkIHRvIGluIHNldCB2YWx1ZSBwcm9jZXNzIHRvIGNvbXBhcmUgaWYgdGhlCisg ICAgICogaW5wdXQgbWFzayBhcnJheSBjYW4gbWF0Y2ggYWxsIHRoZSBmZWF0dXJlcycgQ09TIHJl Z2lzdGVycyB2YWx1ZXMKKyAgICAgKiBhY2NvcmRpbmcgdG8gaW5wdXQgY29zIGlkLgorICAgICAq LworICAgIGludCAoKmNvbXBhcmVfbWFzaykodWludDY0X3QgKm1hc2ssIHN0cnVjdCBmZWF0X2xp c3QgKnBGZWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGNvcywgYm9v bF90ICpmb3VuZCk7CisgICAgLyoKKyAgICAgKiBnZXRfY29zX21heF9hc190eXBlIGlzIHVzZWQg dG8gZ2V0IHRoZSBjb3NfbWF4IHZhbHVlIG9mIHRoZSBmZWF0dXJlCisgICAgICogYWNjb3JkaW5n IHRvIGlucHV0IG1hc2tfdHlwZS4KKyAgICAgKi8KKyAgICB1bnNpZ25lZCBpbnQgKCpnZXRfY29z X21heF9hc190eXBlKShzdHJ1Y3QgZmVhdF9saXN0ICpwRmVhdCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBlbnVtIG1hc2tfdHlwZSB0eXBlKTsKKyAgICAvKgorICAg ICAqIGV4Y2VlZF9yYW5nZSBpcyB1c2VkIHRvIGNoZWNrIGlmIHRoZSBpbnB1dCBjb3MgaWQgZXhj ZWVkcyB0aGUKKyAgICAgKiBmZWF0dXJlJ3MgY29zX21heCBhbmQgaWYgdGhlIGlucHV0IG1hc2sg dmFsdWUgaXMgbm90IHRoZSBkZWZhdWx0IG9uZS4KKyAgICAgKiBFdmVuIGlmIHRoZSBhc3NvY2lh dGVkIGNvcyBleGNlZWRzIHRoZSBjb3NfbWF4LCBIVyBjYW4gd29yayBhcyBkZWZhdWx0CisgICAg ICogdmFsdWUuIFRoYXQgaXMgdGhlIHJlYXNvbiB3ZSBuZWVkIGNoZWNrIGlzIG1hc2sgdmFsdWUg aXMgZGVmYXVsdCBvbmUuCisgICAgICogSWYgYm90aCBjcml0ZXJpYSBhcmUgZnVsZmlsbGVkLCB0 aGF0IG1lYW5zIHRoZSBpbnB1dCBleGNlZWRzIHRoZQorICAgICAqIHJhbmdlLgorICAgICAqLwor ICAgIHVuc2lnbmVkIGludCAoKmV4Y2VlZF9yYW5nZSkodWludDY0X3QgKm1hc2ssIHN0cnVjdCBm ZWF0X2xpc3QgKnBGZWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu ZWQgaW50IGNvcyk7CisgICAgLyoKKyAgICAgKiB3cml0ZV9tc3IgaXMgdXNlZCB0byB3cml0ZSBm ZWF0dXJlIHNwZWNpZmljIE1TUiByZWdpc3RlcnMuCisgICAgICovCisgICAgaW50ICgqd3JpdGVf bXNyKSh1bnNpZ25lZCBpbnQgY29zLCB1aW50NjRfdCAqbWFzaywKKyAgICAgICAgICAgICAgICAg ICAgIHN0cnVjdCBmZWF0X2xpc3QgKnBGZWF0KTsKKyAgICAvKgorICAgICAqIGdldF92YWwgaXMg dXNlZCB0byBnZXQgZmVhdHVyZSBzcGVjaWZpYyBDT1MgcmVnaXN0ZXIgdmFsdWUuCisgICAgICov CisgICAgaW50ICgqZ2V0X3ZhbCkoc3RydWN0IGZlYXRfbGlzdCAqcEZlYXQsIHVuc2lnbmVkIGlu dCBjb3MsCisgICAgICAgICAgICAgICAgICAgZW51bSBtYXNrX3R5cGUgdHlwZSwgdWludDY0X3Qg KnZhbCk7CisgICAgLyoKKyAgICAgKiBnZXRfZmVhdF9pbmZvIGlzIHVzZWQgdG8gZ2V0IGZlYXR1 cmUgc3BlY2lmaWMgSFcgaW5mby4KKyAgICAgKi8KKyAgICBpbnQgKCpnZXRfZmVhdF9pbmZvKShz dHJ1Y3QgZmVhdF9saXN0ICpwRmVhdCwgZW51bSBtYXNrX3R5cGUgdHlwZSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICB1aW50MzJfdCAqZGF0MCwgdWludDMyX3QgKmRhdDEsCisgICAgICAgICAg ICAgICAgICAgICAgICAgdWludDMyX3QgKmRhdDIpOworICAgIC8qCisgICAgICogZ2V0X21heF9j b3NfbWF4IGlzIHVzZWQgdG8gZ2V0IGZlYXR1cmUncyBjb3NfbWF4LgorICAgICAqLworICAgIHVu c2lnbmVkIGludCAoKmdldF9tYXhfY29zX21heCkoc3RydWN0IGZlYXRfbGlzdCAqcEZlYXQpOwor fTsKKworI2RlZmluZSBNQVhfRkVBVF9JTkZPX1NJWkUgOAorI2RlZmluZSBNQVhfQ09TX1JFR19O VU0gIDEyOAorCitzdHJ1Y3QgZmVhdF9saXN0IHsKKyAgICB1bnNpZ25lZCBpbnQgZmVhdHVyZTsK KyAgICBzdHJ1Y3QgZmVhdF9vcHMgb3BzOworICAgIHVuc2lnbmVkIGludCBmZWF0X2luZm9bTUFY X0ZFQVRfSU5GT19TSVpFXTsKKyAgICB1aW50NjRfdCBjb3NfcmVnX3ZhbFtNQVhfQ09TX1JFR19O VU1dOworICAgIHN0cnVjdCBmZWF0X2xpc3QgKnBOZXh0OworfTsKKworc3RydWN0IHBzcl9yZWYg ewogICAgIHVuc2lnbmVkIGludCByZWY7CiB9OwogCi1zdHJ1Y3QgcHNyX2NhdF9zb2NrZXRfaW5m byB7Ci0gICAgdW5zaWduZWQgaW50IGNibV9sZW47Ci0gICAgdW5zaWduZWQgaW50IGNvc19tYXg7 Ci0gICAgc3RydWN0IHBzcl9jYXRfY2JtICpjb3NfdG9fY2JtOwotICAgIHNwaW5sb2NrX3QgY2Jt X2xvY2s7CisKKyNkZWZpbmUgUFNSX1NPQ0tFVF9MM19DQVQgMAorI2RlZmluZSBQU1JfU09DS0VU X0wzX0NEUCAxCisKK3N0cnVjdCBwc3Jfc29ja2V0X2FsbG9jX2luZm8geworICAgIC8qCisgICAg ICogYml0IDF+MDogWzAxXS0+TDMgQ0FULW9ubHksIFsxMF0tPkwzIENEUAorICAgICAqLworICAg IHVuc2lnbmVkIGludCBmZWF0dXJlczsKKyAgICB1bnNpZ25lZCBpbnQgbnJfZmVhdDsKKyAgICBz dHJ1Y3QgZmVhdF9saXN0ICpwRmVhdDsKKyAgICBzdHJ1Y3QgcHNyX3JlZiAqY29zX3JlZjsKKyAg ICBzcGlubG9ja190IG1hc2tfbG9jazsKIH07CiAKIHN0cnVjdCBwc3JfYXNzb2MgewpAQCAtNDgs OSArMTQyLDcgQEAgc3RydWN0IHBzcl9hc3NvYyB7CiAKIHN0cnVjdCBwc3JfY210ICpfX3JlYWRf bW9zdGx5IHBzcl9jbXQ7CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nICpfX3JlYWRfbW9zdGx5IGNh dF9zb2NrZXRfZW5hYmxlOwotc3RhdGljIHN0cnVjdCBwc3JfY2F0X3NvY2tldF9pbmZvICpfX3Jl YWRfbW9zdGx5IGNhdF9zb2NrZXRfaW5mbzsKLXN0YXRpYyB1bnNpZ25lZCBsb25nICpfX3JlYWRf bW9zdGx5IGNkcF9zb2NrZXRfZW5hYmxlOworc3RhdGljIHN0cnVjdCBwc3Jfc29ja2V0X2FsbG9j X2luZm8gKl9fcmVhZF9tb3N0bHkgc29ja2V0X2FsbG9jX2luZm87CiAKIHN0YXRpYyB1bnNpZ25l ZCBpbnQgb3B0X3BzcjsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgX19pbml0ZGF0YSBvcHRfcm1pZF9t YXggPSAyNTU7CkBAIC01OCw4ICsxNTAsNDI3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgX19yZWFk X21vc3RseSBvcHRfY29zX21heCA9IDI1NTsKIHN0YXRpYyB1aW50NjRfdCBybWlkX21hc2s7CiBz dGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHBzcl9hc3NvYywgcHNyX2Fzc29jKTsKIAotc3Rh dGljIHN0cnVjdCBwc3JfY2F0X2NibSAqdGVtcF9jb3NfdG9fY2JtOworc3RhdGljIHN0cnVjdCBw c3JfcmVmICp0ZW1wX2Nvc19yZWY7CisvKiBFdmVyeSBmZWF0dXJlIGhhcyBpdHMgb3duIG9iamVj dC4gKi8KK3N0cnVjdCBmZWF0X2xpc3QgKnBMM0NBVDsKKworLyogQ29tbW9uIGZ1bmN0aW9ucyBm b3Igc3VwcG9ydGluZyBmZWF0dXJlIGNhbGxiYWNrIGZ1bmN0aW9ucy4gKi8KK3N0YXRpYyB2b2lk IGFkZF9mZWF0dXJlKHN0cnVjdCBmZWF0X2xpc3QgKnBIZWFkLCBzdHJ1Y3QgZmVhdF9saXN0ICpw VG1wKQoreworICAgIGlmICggTlVMTCA9PSBwSGVhZCB8fCBOVUxMID09IHBUbXAgKQorICAgICAg ICByZXR1cm47CisKKyAgICB3aGlsZSAoIHBIZWFkLT5wTmV4dCApCisgICAgICAgIHBIZWFkID0g cEhlYWQtPnBOZXh0OworCisgICAgcEhlYWQtPnBOZXh0ID0gcFRtcDsKK30KKworc3RhdGljIHZv aWQgZnJlZV9mZWF0dXJlKHN0cnVjdCBwc3Jfc29ja2V0X2FsbG9jX2luZm8gKmluZm8pCit7Cisg ICAgc3RydWN0IGZlYXRfbGlzdCAqcFRtcDsKKyAgICBzdHJ1Y3QgZmVhdF9saXN0ICpwUHJldjsK KworICAgIGlmICggTlVMTCA9PSBpbmZvICkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCBO VUxMID09IGluZm8tPnBGZWF0ICkKKyAgICAgICAgcmV0dXJuOworCisgICAgcFRtcCA9IGluZm8t PnBGZWF0LT5wTmV4dDsKKyAgICB3aGlsZSAoIHBUbXAgKQorICAgIHsKKyAgICAgICAgcFByZXYg PSBwVG1wOworICAgICAgICBwVG1wID0gcFRtcC0+cE5leHQ7CisgICAgICAgIGNsZWFyX2JpdChw UHJldi0+ZmVhdHVyZSwgJihpbmZvLT5mZWF0dXJlcykpOworICAgICAgICB4ZnJlZShwUHJldik7 CisgICAgICAgIHBQcmV2ID0gTlVMTDsKKyAgICB9Cit9CisKK3N0YXRpYyBib29sX3QgcHNyX2No ZWNrX2NibSh1bnNpZ25lZCBpbnQgY2JtX2xlbiwgdWludDY0X3QgY2JtKQoreworICAgIHVuc2ln bmVkIGludCBmaXJzdF9iaXQsIHplcm9fYml0OworCisgICAgLyogU2V0IGJpdHMgc2hvdWxkIG9u bHkgaW4gdGhlIHJhbmdlIG9mIFswLCBjYm1fbGVuKS4gKi8KKyAgICBpZiAoIGNibSAmICh+MHVs bCA8PCBjYm1fbGVuKSApCisgICAgICAgIHJldHVybiAwOworCisgICAgLyogQXQgbGVhc3Qgb25l IGJpdCBuZWVkIHRvIGJlIHNldC4gKi8KKyAgICBpZiAoIGNibSA9PSAwICkKKyAgICAgICAgcmV0 dXJuIDA7CisKKyAgICBmaXJzdF9iaXQgPSBmaW5kX2ZpcnN0X2JpdCgmY2JtLCBjYm1fbGVuKTsK KyAgICB6ZXJvX2JpdCA9IGZpbmRfbmV4dF96ZXJvX2JpdCgmY2JtLCBjYm1fbGVuLCBmaXJzdF9i aXQpOworCisgICAgLyogU2V0IGJpdHMgc2hvdWxkIGJlIGNvbnRpZ3VvdXMuICovCisgICAgaWYg KCB6ZXJvX2JpdCA8IGNibV9sZW4gJiYKKyAgICAgICAgIGZpbmRfbmV4dF9iaXQoJmNibSwgY2Jt X2xlbiwgemVyb19iaXQpIDwgY2JtX2xlbiApCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0 dXJuIDE7Cit9CisKKy8qCisgKiBGZWF0dXJlcyBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMuCisg Ki8KKworLyogQ0FUL0NEUCBkYXRhIHN0cnVjdHVyZSBhbmQgY2FsbGJhY2sgZnVuY3Rpb25zIGlt cGxlbWVudGF0aW9uLiAqLworc3RydWN0IHBzcl9jYXRfbHZsX2luZm8geworICAgIHVuc2lnbmVk IGludCBjYm1fbGVuOworICAgIHVuc2lnbmVkIGludCBjb3NfbWF4OworfTsKKworc3RhdGljIHZv aWQgbDNfY2F0X2luaXRfZmVhdHVyZSh1bnNpZ25lZCBpbnQgZWF4LCB1bnNpZ25lZCBpbnQgZWJ4 LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZWN4LCB1bnNp Z25lZCBpbnQgZWR4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZmVh dF9saXN0ICpwRmVhdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHBz cl9zb2NrZXRfYWxsb2NfaW5mbyAqaW5mbykKK3sKKyAgICBzdHJ1Y3QgcHNyX2NhdF9sdmxfaW5m byBsM19jYXQ7CisgICAgdW5zaWduZWQgaW50IHNvY2tldDsKKyAgICB1aW50NjRfdCB2YWw7CisK KyAgICBpZiAoIE1BWF9GRUFUX0lORk9fU0laRSA8IHNpemVvZihzdHJ1Y3QgcHNyX2NhdF9sdmxf aW5mbykgKQorICAgICAgICByZXR1cm47CisKKyAgICAvKiBObyB2YWxpZCB2YWx1ZSBzbyBkbyBu b3QgZW5hYmxlIGZlYXR1cmUuICovCisgICAgaWYgKCAwID09IGVheCB8fCAwID09IGVkeCApCisg ICAgICAgIHJldHVybjsKKworICAgIGwzX2NhdC5jYm1fbGVuID0gKGVheCAmIDB4MWYpICsgMTsK KyAgICBsM19jYXQuY29zX21heCA9IG1pbihvcHRfY29zX21heCwgZWR4ICYgMHhmZmZmKTsKIAor ICAgIC8qIGNvcz0wIGlzIHJlc2VydmVkIGFzIGRlZmF1bHQgY2JtKGFsbCBvbmVzKS4gKi8KKyAg ICBwRmVhdC0+Y29zX3JlZ192YWxbMF0gPSAoMXVsbCA8PCBsM19jYXQuY2JtX2xlbikgLSAxOwor CisgICAgcEZlYXQtPmZlYXR1cmUgPSBQU1JfU09DS0VUX0wzX0NBVDsKKyAgICBzZXRfYml0KFBT Ul9TT0NLRVRfTDNfQ0FULCAmKGluZm8tPmZlYXR1cmVzKSk7CisKKyAgICBpZiAoIChlY3ggJiBQ U1JfQ0FUX0NEUF9DQVBBQklMSVRZKSAmJiAob3B0X3BzciAmIFBTUl9DRFApICYmCisgICAgICAg ICAhdGVzdF9iaXQoUFNSX1NPQ0tFVF9MM19DRFAsICYoaW5mby0+ZmVhdHVyZXMpKSApCisgICAg eworICAgICAgICAvKiBEYXRhICovCisgICAgICAgIHBGZWF0LT5jb3NfcmVnX3ZhbFswXSA9ICgx dWxsIDw8IGwzX2NhdC5jYm1fbGVuKSAtIDE7CisgICAgICAgIC8qIENvZGUgKi8KKyAgICAgICAg cEZlYXQtPmNvc19yZWdfdmFsWzFdID0gKDF1bGwgPDwgbDNfY2F0LmNibV9sZW4pIC0gMTsKKwor ICAgICAgICAvKiBXZSBvbmx5IHdyaXRlIG1hc2sxIHNpbmNlIG1hc2swIGlzIGFsd2F5cyBhbGwg b25lcyBieSBkZWZhdWx0LiAqLworICAgICAgICB3cm1zcmwoTVNSX0lBMzJfUFNSX0wzX01BU0so MSksCisgICAgICAgICAgICAgICAoMXVsbCA8PCBsM19jYXQuY2JtX2xlbikgLSAxKTsKKyAgICAg ICAgcmRtc3JsKE1TUl9JQTMyX1BTUl9MM19RT1NfQ0ZHLCB2YWwpOworICAgICAgICB3cm1zcmwo TVNSX0lBMzJfUFNSX0wzX1FPU19DRkcsIHZhbCB8ICgxIDw8IFBTUl9MM19RT1NfQ0RQX0VOQUJM RV9CSVQpKTsKKworICAgICAgICAvKiBDdXQgaGFsZiBvZiBjb3NfbWF4IHdoZW4gQ0RQIGlzIGVu YWJsZWQuICovCisgICAgICAgIGwzX2NhdC5jb3NfbWF4ID4+PSAxOworCisgICAgICAgIHBGZWF0 LT5mZWF0dXJlID0gUFNSX1NPQ0tFVF9MM19DRFA7CisgICAgICAgIHNldF9iaXQoUFNSX1NPQ0tF VF9MM19DRFAsICYoaW5mby0+ZmVhdHVyZXMpKTsKKyAgICAgICAgY2xlYXJfYml0KFBTUl9TT0NL RVRfTDNfQ0FULCAmKGluZm8tPmZlYXR1cmVzKSk7CisgICAgfQorCisgICAgbWVtY3B5KHBGZWF0 LT5mZWF0X2luZm8sICZsM19jYXQsIHNpemVvZihzdHJ1Y3QgcHNyX2NhdF9sdmxfaW5mbykpOwor CisgICAgaW5mby0+bnJfZmVhdCsrOworCisgICAgLyogQWRkIHRoaXMgZmVhdHVyZSBpbnRvIGxp c3QuICovCisgICAgYWRkX2ZlYXR1cmUoaW5mby0+cEZlYXQsIHBGZWF0KTsKKworICAgIHNvY2tl dCA9IGNwdV90b19zb2NrZXQoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKyAgICBwcmludGsoWEVOTE9H X0lORk8gIkwzIENBVDogZW5hYmxlZCBvbiBzb2NrZXQgJXUsIGNvc19tYXg6JXUsIGNibV9sZW46 JXUsIENEUDolc1xuIiwKKyAgICAgICAgICAgc29ja2V0LCBwRmVhdC0+ZmVhdF9pbmZvWzFdLCBw RmVhdC0+ZmVhdF9pbmZvWzBdLAorICAgICAgICAgICB0ZXN0X2JpdChQU1JfU09DS0VUX0wzX0NE UCwgJihpbmZvLT5mZWF0dXJlcykpID8gIm9uIiA6ICJvZmYiKTsKK30KKworc3RhdGljIGludCBs M19jYXRfY29tcGFyZV9tYXNrKHVpbnQ2NF90ICptYXNrLCBzdHJ1Y3QgZmVhdF9saXN0ICpwRmVh dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY29zLCBib29s X3QgKmZvdW5kKQoreworICAgIHN0cnVjdCBwc3JfY2F0X2x2bF9pbmZvIGNhdF9pbmZvOworICAg IHVpbnQ2NF90IGwzX2RlZl9jYm07CisKKyAgICBtZW1jcHkoJmNhdF9pbmZvLCBwRmVhdC0+ZmVh dF9pbmZvLCBzaXplb2Yoc3RydWN0IHBzcl9jYXRfbHZsX2luZm8pKTsKKyAgICBsM19kZWZfY2Jt ID0gKDF1bGwgPDwgY2F0X2luZm8uY2JtX2xlbikgLSAxOworCisgICAgLyogQ0RQICovCisgICAg aWYgKCBwRmVhdC0+ZmVhdHVyZSA9PSBQU1JfU09DS0VUX0wzX0NEUCApCisgICAgeworICAgICAg ICBpZiAoIGNvcyA+IGNhdF9pbmZvLmNvc19tYXggKQorICAgICAgICB7CisgICAgICAgICAgICBp ZiAoIG1hc2tbMF0gIT0gbDNfZGVmX2NibSB8fAorICAgICAgICAgICAgICAgICBtYXNrWzFdICE9 IGwzX2RlZl9jYm0gKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICpmb3VuZCA9IDA7 CisgICAgICAgICAgICAgICAgcHJpbnRrKFhFTkxPR19FUlIgIkNEUCBleGNlZWQgY29zIG1heC5c biIpOworICAgICAgICAgICAgICAgIHJldHVybiAtRU5PRU5UOworICAgICAgICAgICAgfQorICAg ICAgICAgICAgKmZvdW5kID0gMTsKKyAgICAgICAgICAgIHJldHVybiAyOworICAgICAgICB9CisK KyAgICAgICAgaWYgKCBtYXNrWzBdID09IHBGZWF0LT5jb3NfcmVnX3ZhbFtjb3MgKiAyXSAmJgor ICAgICAgICAgICAgIG1hc2tbMV0gPT0gcEZlYXQtPmNvc19yZWdfdmFsW2NvcyAqIDIgKyAxXSkK KyAgICAgICAgICAgICpmb3VuZCA9IDE7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICpmb3Vu ZCA9IDA7CisKKyAgICAgICAgcmV0dXJuIDI7CisgICAgfQorCisgICAgLyogQ0FUICovCisgICAg aWYgKCBjb3MgPiBjYXRfaW5mby5jb3NfbWF4ICkKKyAgICB7CisgICAgICAgIGlmICggbWFza1sw XSAhPSBsM19kZWZfY2JtICkKKyAgICAgICAgeworICAgICAgICAgICAgKmZvdW5kID0gMDsKKyAg ICAgICAgICAgIHByaW50ayhYRU5MT0dfRVJSICJDQVQgZXhjZWVkIGNvcyBtYXguXG4iKTsKKyAg ICAgICAgICAgIHJldHVybiAtRU5PRU5UOworICAgICAgICB9CisgICAgICAgICpmb3VuZCA9IDE7 CisgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIGlmICggbWFza1swXSA9PSBwRmVhdC0+ Y29zX3JlZ192YWxbY29zXSApCisgICAgICAgICpmb3VuZCA9IDE7CisgICAgZWxzZQorICAgICAg ICAqZm91bmQgPSAwOworCisgICAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQg bDNfY2F0X2dldF9jb3NfbWF4X2FzX3R5cGUoc3RydWN0IGZlYXRfbGlzdCAqcEZlYXQsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gbWFza190eXBl IHR5cGUpCit7CisgICAgc3RydWN0IHBzcl9jYXRfbHZsX2luZm8gY2F0X2luZm87CisKKyAgICBp ZiAoIHR5cGUgIT0gUFNSX01BU0tfVFlQRV9MM19EQVRBICYmCisgICAgICAgICB0eXBlICE9IFBT Ul9NQVNLX1RZUEVfTDNfQ09ERSAmJgorICAgICAgICAgdHlwZSAhPSBQU1JfTUFTS19UWVBFX0wz X0NCTSApCisgICAgICAgIHJldHVybiAwOworCisgICAgbWVtY3B5KCZjYXRfaW5mbywgcEZlYXQt PmZlYXRfaW5mbywgc2l6ZW9mKHN0cnVjdCBwc3JfY2F0X2x2bF9pbmZvKSk7CisgICAgcmV0dXJu IGNhdF9pbmZvLmNvc19tYXg7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbDNfY2F0X2V4Y2Vl ZF9yYW5nZSh1aW50NjRfdCAqbWFzaywgc3RydWN0IGZlYXRfbGlzdCAqcEZlYXQsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGNvcykKK3sKKyAg ICBzdHJ1Y3QgcHNyX2NhdF9sdmxfaW5mbyBjYXRfaW5mbzsKKyAgICB1aW50NjRfdCBsM19kZWZf Y2JtOworCisgICAgbWVtY3B5KCZjYXRfaW5mbywgcEZlYXQtPmZlYXRfaW5mbywgc2l6ZW9mKHN0 cnVjdCBwc3JfY2F0X2x2bF9pbmZvKSk7CisgICAgbDNfZGVmX2NibSA9ICgxdWxsIDw8IGNhdF9p bmZvLmNibV9sZW4pIC0gMTsKKworICAgIC8qIENEUCAqLworICAgIGlmICggcEZlYXQtPmZlYXR1 cmUgPT0gUFNSX1NPQ0tFVF9MM19DRFAgKQorICAgIHsKKyAgICAgICAgaWYgKCBjb3MgPiBjYXRf aW5mby5jb3NfbWF4ICkKKyAgICAgICAgICAgIGlmICggbWFza1swXSAhPSBsM19kZWZfY2JtIHx8 CisgICAgICAgICAgICAgICAgIG1hc2tbMV0gIT0gbDNfZGVmX2NibSApCisgICAgICAgICAgICAg ICAgLyoKKyAgICAgICAgICAgICAgICAgKiBFeGNlZWQgY29zX21heCBhbmQgdmFsdWUgdG8gc2V0 IGlzIG5vdCBkZWZhdWx0LAorICAgICAgICAgICAgICAgICAqIHJldHVybiBlcnJvci4KKyAgICAg ICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICByZXR1 cm4gMjsKKyAgICB9CisKKyAgICAvKiBDQVQgKi8KKyAgICBpZiAoIGNvcyA+IGNhdF9pbmZvLmNv c19tYXggKQorICAgICAgICBpZiAoIG1hc2tbMF0gIT0gbDNfZGVmX2NibSApCisgICAgICAgICAg ICAvKgorICAgICAgICAgICAgICogRXhjZWVkIGNvc19tYXggYW5kIHZhbHVlIHRvIHNldCBpcyBu b3QgZGVmYXVsdCwKKyAgICAgICAgICAgICAqIHJldHVybiBlcnJvci4KKyAgICAgICAgICAgICAq LworICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gMTsKK30KKworc3RhdGljIGlu dCBsM19jYXRfd3JpdGVfbXNyKHVuc2lnbmVkIGludCBjb3MsIHVpbnQ2NF90ICptYXNrLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBmZWF0X2xpc3QgKnBGZWF0KQoreworICAg IHN0cnVjdCBwc3JfY2F0X2x2bF9pbmZvIGNhdF9pbmZvOworCisgICAgbWVtY3B5KCZjYXRfaW5m bywgcEZlYXQtPmZlYXRfaW5mbywgc2l6ZW9mKHN0cnVjdCBwc3JfY2F0X2x2bF9pbmZvKSk7CisK KyAgICAvKiBDRFAgKi8KKyAgICBpZiAoIHBGZWF0LT5mZWF0dXJlID09IFBTUl9TT0NLRVRfTDNf Q0RQICkKKyAgICB7CisgICAgICAgIC8qCisgICAgICAgICAqIElmIGlucHV0IGNvcyBpcyBtb3Jl IHRoYW4gdGhlIGNvc19tYXggb2YgdGhlIGZlYXR1cmUsIHdlIHNob3VsZAorICAgICAgICAgKiBu b3Qgc2V0IHRoZSB2YWx1ZS4KKyAgICAgICAgICovCisgICAgICAgIGlmICggY29zID4gY2F0X2lu Zm8uY29zX21heCApCisgICAgICAgICAgICByZXR1cm4gMjsKKworICAgICAgICAvKiBEYXRhICov CisgICAgICAgIHBGZWF0LT5jb3NfcmVnX3ZhbFtjb3MgKiAyXSA9IG1hc2tbMF07CisgICAgICAg IC8qIENvZGUgKi8KKyAgICAgICAgcEZlYXQtPmNvc19yZWdfdmFsW2NvcyAqIDIgKyAxXSA9IG1h c2tbMV07CisKKyAgICAgICAgd3Jtc3JsKE1TUl9JQTMyX1BTUl9MM19NQVNLX0RBVEEoY29zKSwg bWFza1swXSk7CisgICAgICAgIHdybXNybChNU1JfSUEzMl9QU1JfTDNfTUFTS19DT0RFKGNvcyks IG1hc2tbMV0pOworICAgICAgICByZXR1cm4gMjsKKyAgICB9CisKKyAgICAvKiBDQVQgKi8KKyAg ICBpZiAoIGNvcyA+IGNhdF9pbmZvLmNvc19tYXggKQorICAgICAgICByZXR1cm4gMTsKKworICAg IHBGZWF0LT5jb3NfcmVnX3ZhbFtjb3NdID0gbWFza1swXTsKKyAgICB3cm1zcmwoTVNSX0lBMzJf UFNSX0wzX01BU0soY29zKSwgbWFza1swXSk7CisgICAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBp bnQgbDNfY2F0X2dldF9vbGRfc2V0X25ldyh1aW50NjRfdCAqbWFzaywKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZmVhdF9saXN0ICpwRmVhdCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgb2xkX2NvcywKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBlbnVtIG1hc2tfdHlwZSB0eXBlLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IG0pCit7CisgICAgc3RydWN0IHBzcl9jYXRf bHZsX2luZm8gY2F0X2luZm87CisKKyAgICBtZW1jcHkoJmNhdF9pbmZvLCBwRmVhdC0+ZmVhdF9p bmZvLCBzaXplb2Yoc3RydWN0IHBzcl9jYXRfbHZsX2luZm8pKTsKKworICAgIGlmICggdHlwZSA9 PSBQU1JfTUFTS19UWVBFX0wzX0RBVEEgfHwKKyAgICAgICAgIHR5cGUgPT0gUFNSX01BU0tfVFlQ RV9MM19DT0RFIHx8CisgICAgICAgICB0eXBlID09IFBTUl9NQVNLX1RZUEVfTDNfQ0JNICkKKyAg ICB7CisgICAgICAgIGlmICggIXBzcl9jaGVja19jYm0oY2F0X2luZm8uY2JtX2xlbiwgbSkgKQor ICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgfQorCisgICAgaWYgKCAoIHR5cGUgPT0g UFNSX01BU0tfVFlQRV9MM19EQVRBIHx8CisgICAgICAgICB0eXBlID09IFBTUl9NQVNLX1RZUEVf TDNfQ09ERSApICYmCisgICAgICAgICBwRmVhdC0+ZmVhdHVyZSAhPSBQU1JfU09DS0VUX0wzX0NE UCApCisgICAgICAgIHJldHVybiAtRU5YSU87CisKKyAgICAvKiBDRFAgKi8KKyAgICBpZiAoIHBG ZWF0LT5mZWF0dXJlID09IFBTUl9TT0NLRVRfTDNfQ0RQICkKKyAgICB7CisgICAgICAgIGlmICgg b2xkX2NvcyA+IGNhdF9pbmZvLmNvc19tYXggKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBE YXRhICovCisgICAgICAgICAgICBtYXNrWzBdID0gcEZlYXQtPmNvc19yZWdfdmFsWzBdOworICAg ICAgICAgICAgLyogQ29kZSAqLworICAgICAgICAgICAgbWFza1sxXSA9IHBGZWF0LT5jb3NfcmVn X3ZhbFsxXTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAg IC8qIERhdGEgKi8KKyAgICAgICAgICAgIG1hc2tbMF0gPSBwRmVhdC0+Y29zX3JlZ192YWxbb2xk X2NvcyAqIDJdOworICAgICAgICAgICAgLyogQ29kZSAqLworICAgICAgICAgICAgbWFza1sxXSA9 IHBGZWF0LT5jb3NfcmVnX3ZhbFtvbGRfY29zICogMiArIDFdOworICAgICAgICB9CisKKyAgICAg ICAgLyogU2V0IG5ldyBtYXNrICovCisgICAgICAgIGlmICggdHlwZSA9PSBQU1JfTUFTS19UWVBF X0wzX0RBVEEgKQorICAgICAgICAgICAgbWFza1swXSA9IG07CisgICAgICAgIGlmICggdHlwZSA9 PSBQU1JfTUFTS19UWVBFX0wzX0NPREUgKQorICAgICAgICAgICAgbWFza1sxXSA9IG07CisKKyAg ICAgICAgcmV0dXJuIDI7CisgICAgfQorCisgICAgLyogQ0FUICovCisgICAgaWYgKCBvbGRfY29z ID4gY2F0X2luZm8uY29zX21heCApCisgICAgICAgIG1hc2tbMF0gPSAgcEZlYXQtPmNvc19yZWdf dmFsWzBdOworICAgIGVsc2UKKyAgICAgICAgbWFza1swXSA9ICBwRmVhdC0+Y29zX3JlZ192YWxb b2xkX2Nvc107CisKKyAgICBpZiAoIHR5cGUgPT0gUFNSX01BU0tfVFlQRV9MM19DQk0gKQorICAg ICAgICBtYXNrWzBdID0gbTsKKworICAgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50IGwzX2Nh dF9nZXRfdmFsKHN0cnVjdCBmZWF0X2xpc3QgKnBGZWF0LCB1bnNpZ25lZCBpbnQgY29zLAorICAg ICAgICAgICAgICAgICAgICAgICAgICBlbnVtIG1hc2tfdHlwZSB0eXBlLCB1aW50NjRfdCAqdmFs KQoreworICAgIHN0cnVjdCBwc3JfY2F0X2x2bF9pbmZvIGNhdF9pbmZvOworCisgICAgaWYgKCB0 eXBlICE9IFBTUl9NQVNLX1RZUEVfTDNfREFUQSAmJgorICAgICAgICAgdHlwZSAhPSBQU1JfTUFT S19UWVBFX0wzX0NPREUgJiYKKyAgICAgICAgIHR5cGUgIT0gUFNSX01BU0tfVFlQRV9MM19DQk0g KQorICAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoICggdHlwZSA9PSBQU1JfTUFTS19UWVBF X0wzX0RBVEEgfHwKKyAgICAgICAgIHR5cGUgPT0gUFNSX01BU0tfVFlQRV9MM19DT0RFICkgJiYK KyAgICAgICAgIHBGZWF0LT5mZWF0dXJlICE9IFBTUl9TT0NLRVRfTDNfQ0RQICkKKyAgICAgICAg cmV0dXJuIC1FTlhJTzsKKworICAgIG1lbWNweSgmY2F0X2luZm8sIHBGZWF0LT5mZWF0X2luZm8s IHNpemVvZihzdHJ1Y3QgcHNyX2NhdF9sdmxfaW5mbykpOworCisgICAgLyogQ0RQICovCisgICAg aWYgKCBwRmVhdC0+ZmVhdHVyZSA9PSBQU1JfU09DS0VUX0wzX0NEUCApCisgICAgeworICAgICAg ICBpZiAoIGNvcyA+IGNhdF9pbmZvLmNvc19tYXggKQorICAgICAgICAgICAgKnZhbCA9IHBGZWF0 LT5jb3NfcmVnX3ZhbFswXTsKKyAgICAgICAgZWxzZSBpZiAoIHR5cGUgPT0gUFNSX01BU0tfVFlQ RV9MM19EQVRBICkKKyAgICAgICAgICAgICp2YWwgPSBwRmVhdC0+Y29zX3JlZ192YWxbY29zICog Ml07CisgICAgICAgIGVsc2UgaWYgKCB0eXBlID09IFBTUl9NQVNLX1RZUEVfTDNfQ09ERSApCisg ICAgICAgICAgICAqdmFsID0gcEZlYXQtPmNvc19yZWdfdmFsW2NvcyAqIDIgKyAxXTsKKworICAg ICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICAvKiBDQVQgKi8KKyAgICBpZiAoIGNvcyA+IGNh dF9pbmZvLmNvc19tYXggKQorICAgICAgICAqdmFsID0gIHBGZWF0LT5jb3NfcmVnX3ZhbFswXTsK KyAgICBlbHNlCisgICAgICAgICp2YWwgPSAgcEZlYXQtPmNvc19yZWdfdmFsW2Nvc107CisKKyAg ICByZXR1cm4gMTsKK30KKworc3RhdGljIGludCBsM19jYXRfZ2V0X2ZlYXRfaW5mbyhzdHJ1Y3Qg ZmVhdF9saXN0ICpwRmVhdCwgZW51bSBtYXNrX3R5cGUgdHlwZSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdWludDMyX3QgKmRhdDAsIHVpbnQzMl90ICpkYXQxLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAqZGF0MikKK3sKKyAgICBzdHJ1Y3QgcHNy X2NhdF9sdmxfaW5mbyBjYXRfaW5mbzsKKworICAgIGlmICggdHlwZSAhPSBQU1JfTUFTS19UWVBF X0wzX0RBVEEgJiYKKyAgICAgICAgIHR5cGUgIT0gUFNSX01BU0tfVFlQRV9MM19DT0RFICYmCisg ICAgICAgICB0eXBlICE9IFBTUl9NQVNLX1RZUEVfTDNfQ0JNICkKKyAgICAgICAgcmV0dXJuIDA7 CisKKyAgICBtZW1jcHkoJmNhdF9pbmZvLCBwRmVhdC0+ZmVhdF9pbmZvLCBzaXplb2Yoc3RydWN0 IHBzcl9jYXRfbHZsX2luZm8pKTsKKworICAgICpkYXQwID0gY2F0X2luZm8uY2JtX2xlbjsKKyAg ICAqZGF0MSA9IGNhdF9pbmZvLmNvc19tYXg7CisKKyAgICBpZiAoIHBGZWF0LT5mZWF0dXJlID09 IFBTUl9TT0NLRVRfTDNfQ0RQICkKKyAgICAgICAgKmRhdDIgfD0gWEVOX1NZU0NUTF9QU1JfQ0FU X0wzX0NEUDsKKyAgICBlbHNlCisgICAgICAgICpkYXQyID0gMDsKKworICAgIHJldHVybiAxOwor fQorCitzdGF0aWMgdW5zaWduZWQgaW50IGwzX2NhdF9nZXRfbWF4X2Nvc19tYXgoc3RydWN0IGZl YXRfbGlzdCAqcEZlYXQpCit7CisgICAgc3RydWN0IHBzcl9jYXRfbHZsX2luZm8gY2F0X2luZm87 CisKKyAgICBtZW1jcHkoJmNhdF9pbmZvLCBwRmVhdC0+ZmVhdF9pbmZvLCBzaXplb2Yoc3RydWN0 IHBzcl9jYXRfbHZsX2luZm8pKTsKKworICAgIHJldHVybiBjYXRfaW5mby5jb3NfbWF4OworfQor CitzdHJ1Y3QgZmVhdF9vcHMgbDNfY2F0X29wcyA9IHsKKyAgICAuaW5pdF9mZWF0dXJlID0gbDNf Y2F0X2luaXRfZmVhdHVyZSwKKyAgICAuZ2V0X29sZF9zZXRfbmV3ID0gbDNfY2F0X2dldF9vbGRf c2V0X25ldywKKyAgICAuY29tcGFyZV9tYXNrID0gbDNfY2F0X2NvbXBhcmVfbWFzaywKKyAgICAu Z2V0X2Nvc19tYXhfYXNfdHlwZSA9IGwzX2NhdF9nZXRfY29zX21heF9hc190eXBlLAorICAgIC5l eGNlZWRfcmFuZ2UgPSBsM19jYXRfZXhjZWVkX3JhbmdlLAorICAgIC53cml0ZV9tc3IgPSBsM19j YXRfd3JpdGVfbXNyLAorICAgIC5nZXRfdmFsID0gbDNfY2F0X2dldF92YWwsCisgICAgLmdldF9m ZWF0X2luZm8gPSBsM19jYXRfZ2V0X2ZlYXRfaW5mbywKKyAgICAuZ2V0X21heF9jb3NfbWF4ID0g bDNfY2F0X2dldF9tYXhfY29zX21heCwKK307CisKKy8qCisgKiBDb21tb24gZnVuY3Rpb25zIGlt cGxlbWVudGF0aW9uCisgKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X3NvY2tldF9jcHUodW5z aWduZWQgaW50IHNvY2tldCkKIHsKICAgICBpZiAoIGxpa2VseShzb2NrZXQgPCBucl9zb2NrZXRz KSApCkBAIC0yMDksMTcgKzcyMCwzOSBAQCB2b2lkIHBzcl9mcmVlX3JtaWQoc3RydWN0IGRvbWFp biAqZCkKICAgICBkLT5hcmNoLnBzcl9ybWlkID0gMDsKIH0KIAorc3RhdGljIGlubGluZSB1bnNp Z25lZCBpbnQgZ2V0X21heF9jb3NfbWF4KHN0cnVjdCBwc3Jfc29ja2V0X2FsbG9jX2luZm8gKmlu Zm8pCit7CisgICAgc3RydWN0IGZlYXRfbGlzdCAqcFRtcDsKKyAgICB1bnNpZ25lZCBpbnQgY29z X21heCA9IDA7CisKKyAgICBpZiAoIE5VTEwgPT0gaW5mby0+cEZlYXQgfHwgTlVMTCA9PSBpbmZv LT5wRmVhdC0+cE5leHQgKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHBUbXAgPSBpbmZvLT5w RmVhdC0+cE5leHQ7CisgICAgd2hpbGUgKCBwVG1wICkKKyAgICB7CisgICAgICAgIGNvc19tYXgg PSBtYXgocFRtcC0+b3BzLmdldF9tYXhfY29zX21heChwVG1wKSwgY29zX21heCk7CisgICAgICAg IHBUbXAgPSBwVG1wLT5wTmV4dDsKKyAgICB9CisKKyAgICByZXR1cm4gY29zX21heDsKK30KKwog c3RhdGljIGlubGluZSB2b2lkIHBzcl9hc3NvY19pbml0KHZvaWQpCiB7CiAgICAgc3RydWN0IHBz cl9hc3NvYyAqcHNyYSA9ICZ0aGlzX2NwdShwc3JfYXNzb2MpOworICAgIHN0cnVjdCBwc3Jfc29j a2V0X2FsbG9jX2luZm8gKmluZm87CisgICAgdW5zaWduZWQgaW50IGNvc19tYXg7CisgICAgdW5z aWduZWQgaW50IHNvY2tldDsKIAotICAgIGlmICggY2F0X3NvY2tldF9pbmZvICkKKyAgICBpZiAo IHNvY2tldF9hbGxvY19pbmZvICkKICAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGludCBzb2NrZXQg PSBjcHVfdG9fc29ja2V0KHNtcF9wcm9jZXNzb3JfaWQoKSk7CisgICAgICAgIHNvY2tldCA9IGNw dV90b19zb2NrZXQoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKyAgICAgICAgaW5mbyA9IHNvY2tldF9h bGxvY19pbmZvICsgc29ja2V0OworICAgICAgICBjb3NfbWF4ID0gZ2V0X21heF9jb3NfbWF4KGlu Zm8pOwogCi0gICAgICAgIGlmICggdGVzdF9iaXQoc29ja2V0LCBjYXRfc29ja2V0X2VuYWJsZSkg KQotICAgICAgICAgICAgcHNyYS0+Y29zX21hc2sgPSAoKDF1bGwgPDwgZ2V0X2NvdW50X29yZGVy KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRfc29ja2V0X2luZm9bc29ja2V0XS5j b3NfbWF4KSkgLSAxKSA8PCAzMjsKKyAgICAgICAgaWYgKCBpbmZvLT5mZWF0dXJlcyApCisgICAg ICAgICAgICBwc3JhLT5jb3NfbWFzayA9ICgoMXVsbCA8PCBnZXRfY291bnRfb3JkZXIoY29zX21h eCkpIC0gMSkgPDwgMzI7CiAgICAgfQogCiAgICAgaWYgKCBwc3JfY210X2VuYWJsZWQoKSB8fCBw c3JhLT5jb3NfbWFzayApCkBAIC0yNTYsMjcwICs3ODksMzU5IEBAIHZvaWQgcHNyX2N0eHRfc3dp dGNoX3RvKHN0cnVjdCBkb21haW4gKmQpCiAgICAgICAgIHBzcmEtPnZhbCA9IHJlZzsKICAgICB9 CiB9Ci1zdGF0aWMgc3RydWN0IHBzcl9jYXRfc29ja2V0X2luZm8gKmdldF9jYXRfc29ja2V0X2lu Zm8odW5zaWduZWQgaW50IHNvY2tldCkKKworc3RhdGljIHN0cnVjdCBwc3Jfc29ja2V0X2FsbG9j X2luZm8gKmdldF9zb2NrZXRfYWxsb2NfaW5mbyh1bnNpZ25lZCBpbnQgc29ja2V0KQogewotICAg IGlmICggIWNhdF9zb2NrZXRfaW5mbyApCisgICAgc3RydWN0IHBzcl9zb2NrZXRfYWxsb2NfaW5m byAqaW5mbzsKKworICAgIGlmICggIXNvY2tldF9hbGxvY19pbmZvICkKICAgICAgICAgcmV0dXJu IEVSUl9QVFIoLUVOT0RFVik7CiAKICAgICBpZiAoIHNvY2tldCA+PSBucl9zb2NrZXRzICkKICAg ICAgICAgcmV0dXJuIEVSUl9QVFIoLUVOT1RTT0NLKTsKIAotICAgIGlmICggIXRlc3RfYml0KHNv Y2tldCwgY2F0X3NvY2tldF9lbmFibGUpICkKLSAgICAgICAgcmV0dXJuIEVSUl9QVFIoLUVOT0VO VCk7CisgICAgaW5mbyA9IHNvY2tldF9hbGxvY19pbmZvICsgc29ja2V0OwogCi0gICAgcmV0dXJu IGNhdF9zb2NrZXRfaW5mbyArIHNvY2tldDsKLX0KKyAgICBpZiAoICFpbmZvLT5mZWF0dXJlcyAp CisgICAgICAgIHJldHVybiBFUlJfUFRSKC1FTk9FTlQpOwogCi1zdGF0aWMgaW5saW5lIGJvb2xf dCBjZHBfaXNfZW5hYmxlZCh1bnNpZ25lZCBpbnQgc29ja2V0KQotewotICAgIHJldHVybiBjZHBf c29ja2V0X2VuYWJsZSAmJiB0ZXN0X2JpdChzb2NrZXQsIGNkcF9zb2NrZXRfZW5hYmxlKTsKKyAg ICByZXR1cm4gaW5mbzsKIH0KIAotaW50IHBzcl9nZXRfY2F0X2wzX2luZm8odW5zaWduZWQgaW50 IHNvY2tldCwgdWludDMyX3QgKmNibV9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICB1aW50 MzJfdCAqY29zX21heCwgdWludDMyX3QgKmZsYWdzKQoraW50IHBzcl9nZXRfaW5mbyh1bnNpZ25l ZCBpbnQgc29ja2V0LCBlbnVtIG1hc2tfdHlwZSB0eXBlLAorICAgICAgICAgICAgICAgICB1aW50 MzJfdCAqZGF0MCwgdWludDMyX3QgKmRhdDEsCisgICAgICAgICAgICAgICAgIHVpbnQzMl90ICpk YXQyKQogewotICAgIHN0cnVjdCBwc3JfY2F0X3NvY2tldF9pbmZvICppbmZvID0gZ2V0X2NhdF9z b2NrZXRfaW5mbyhzb2NrZXQpOworICAgIHN0cnVjdCBwc3Jfc29ja2V0X2FsbG9jX2luZm8gKmlu Zm8gPSBnZXRfc29ja2V0X2FsbG9jX2luZm8oc29ja2V0KTsKKyAgICBzdHJ1Y3QgZmVhdF9saXN0 ICpwVG1wOwogCiAgICAgaWYgKCBJU19FUlIoaW5mbykgKQogICAgICAgICByZXR1cm4gUFRSX0VS UihpbmZvKTsKIAotICAgICpjYm1fbGVuID0gaW5mby0+Y2JtX2xlbjsKLSAgICAqY29zX21heCA9 IGluZm8tPmNvc19tYXg7CisgICAgaWYgKCBOVUxMID09IGluZm8tPnBGZWF0IHx8IE5VTEwgPT0g aW5mby0+cEZlYXQtPnBOZXh0KQorICAgICAgIHJldHVybiAtRU5PREVWOwogCi0gICAgKmZsYWdz ID0gMDsKLSAgICBpZiAoIGNkcF9pc19lbmFibGVkKHNvY2tldCkgKQotICAgICAgICAqZmxhZ3Mg fD0gWEVOX1NZU0NUTF9QU1JfQ0FUX0wzX0NEUDsKKyAgICBwVG1wID0gaW5mby0+cEZlYXQtPnBO ZXh0OworICAgIHdoaWxlICggcFRtcCApCisgICAgeworICAgICAgICBpZiAoIHBUbXAtPm9wcy5n ZXRfZmVhdF9pbmZvKHBUbXAsIHR5cGUsIGRhdDAsIGRhdDEsIGRhdDIpICkKKyAgICAgICAgICAg IHJldHVybiAwOwogCi0gICAgcmV0dXJuIDA7CisgICAgICAgIHBUbXAgPSBwVG1wLT5wTmV4dDsK KyAgICB9CisKKyAgICByZXR1cm4gLUVOT0RFVjsKIH0KIAotaW50IHBzcl9nZXRfbDNfY2JtKHN0 cnVjdCBkb21haW4gKmQsIHVuc2lnbmVkIGludCBzb2NrZXQsCi0gICAgICAgICAgICAgICAgICAg dWludDY0X3QgKmNibSwgZW51bSBjYm1fdHlwZSB0eXBlKQorc3RhdGljIGludCBnZXRfb2xkX3Nl dF9uZXcodWludDY0X3QgKm1hc2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg cHNyX3NvY2tldF9hbGxvY19pbmZvICppbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg dW5zaWduZWQgaW50IG9sZF9jb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIG1h c2tfdHlwZSB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgbSkKIHsK LSAgICBzdHJ1Y3QgcHNyX2NhdF9zb2NrZXRfaW5mbyAqaW5mbyA9IGdldF9jYXRfc29ja2V0X2lu Zm8oc29ja2V0KTsKLSAgICBib29sX3QgY2RwX2VuYWJsZWQgPSBjZHBfaXNfZW5hYmxlZChzb2Nr ZXQpOwotCi0gICAgaWYgKCBJU19FUlIoaW5mbykgKQotICAgICAgICByZXR1cm4gUFRSX0VSUihp bmZvKTsKKyAgICBzdHJ1Y3QgZmVhdF9saXN0ICpwVG1wOworICAgIGludCByZXQ7CiAKLSAgICBz d2l0Y2ggKCB0eXBlICkKLSAgICB7Ci0gICAgY2FzZSBQU1JfQ0JNX1RZUEVfTDM6Ci0gICAgICAg IGlmICggY2RwX2VuYWJsZWQgKQotICAgICAgICAgICAgcmV0dXJuIC1FWERFVjsKLSAgICAgICAg KmNibSA9IGluZm8tPmNvc190b19jYm1bZC0+YXJjaC5wc3JfY29zX2lkc1tzb2NrZXRdXS5jYm07 Ci0gICAgICAgIGJyZWFrOworICAgIGlmICggIW1hc2sgKQorICAgICAgICByZXR1cm4gLUVJTlZB TDsKIAotICAgIGNhc2UgUFNSX0NCTV9UWVBFX0wzX0NPREU6Ci0gICAgICAgIGlmICggIWNkcF9l bmFibGVkICkKLSAgICAgICAgICAgICpjYm0gPSBpbmZvLT5jb3NfdG9fY2JtW2QtPmFyY2gucHNy X2Nvc19pZHNbc29ja2V0XV0uY2JtOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICAqY2JtID0g aW5mby0+Y29zX3RvX2NibVtkLT5hcmNoLnBzcl9jb3NfaWRzW3NvY2tldF1dLmNvZGU7Ci0gICAg ICAgIGJyZWFrOworICAgIGlmICggIWluZm8gfHwgIWluZm8tPnBGZWF0ICkKKyAgICAgICAgcmV0 dXJuIC1FTk9ERVY7CiAKLSAgICBjYXNlIFBTUl9DQk1fVFlQRV9MM19EQVRBOgotICAgICAgICBp ZiAoICFjZHBfZW5hYmxlZCApCi0gICAgICAgICAgICAqY2JtID0gaW5mby0+Y29zX3RvX2NibVtk LT5hcmNoLnBzcl9jb3NfaWRzW3NvY2tldF1dLmNibTsKLSAgICAgICAgZWxzZQotICAgICAgICAg ICAgKmNibSA9IGluZm8tPmNvc190b19jYm1bZC0+YXJjaC5wc3JfY29zX2lkc1tzb2NrZXRdXS5k YXRhOwotICAgICAgICBicmVhazsKKyAgICBwVG1wID0gaW5mby0+cEZlYXQtPnBOZXh0OworICAg IHdoaWxlICggcFRtcCApCisgICAgeworICAgICAgICAvKiBtYXNrIGdldHRpbmcgYW5kIHNldHRp bmcgb3JkZXIgaXMgc2FtZSBhcyBmZWF0dXJlIGxpc3QgKi8KKyAgICAgICAgcmV0ID0gcFRtcC0+ b3BzLmdldF9vbGRfc2V0X25ldyhtYXNrLCBwVG1wLCBvbGRfY29zLCB0eXBlLCBtKTsKKyAgICAg ICAgaWYgKCByZXQgPCAwICkKKyAgICAgICAgICAgIHJldHVybiByZXQ7CiAKLSAgICBkZWZhdWx0 OgotICAgICAgICBBU1NFUlRfVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgbWFzayArPSByZXQ7Cisg ICAgICAgIHBUbXAgPSBwVG1wLT5wTmV4dDsKICAgICB9CiAKICAgICByZXR1cm4gMDsKIH0KIAot c3RhdGljIGJvb2xfdCBwc3JfY2hlY2tfY2JtKHVuc2lnbmVkIGludCBjYm1fbGVuLCB1aW50NjRf dCBjYm0pCitpbnQgcHNyX2dldF92YWwoc3RydWN0IGRvbWFpbiAqZCwgdW5zaWduZWQgaW50IHNv Y2tldCwKKyAgICAgICAgICAgICAgICB1aW50NjRfdCAqdmFsLCBlbnVtIG1hc2tfdHlwZSB0eXBl KQogewotICAgIHVuc2lnbmVkIGludCBmaXJzdF9iaXQsIHplcm9fYml0OwotCi0gICAgLyogU2V0 IGJpdHMgc2hvdWxkIG9ubHkgaW4gdGhlIHJhbmdlIG9mIFswLCBjYm1fbGVuKS4gKi8KLSAgICBp ZiAoIGNibSAmICh+MHVsbCA8PCBjYm1fbGVuKSApCi0gICAgICAgIHJldHVybiAwOworICAgIHN0 cnVjdCBwc3Jfc29ja2V0X2FsbG9jX2luZm8gKmluZm8gPSBnZXRfc29ja2V0X2FsbG9jX2luZm8o c29ja2V0KTsKKyAgICB1bnNpZ25lZCBpbnQgY29zID0gZC0+YXJjaC5wc3JfY29zX2lkc1tzb2Nr ZXRdOworICAgIHN0cnVjdCBmZWF0X2xpc3QgKnBUbXA7CisgICAgaW50IHJldDsKIAotICAgIC8q IEF0IGxlYXN0IG9uZSBiaXQgbmVlZCB0byBiZSBzZXQuICovCi0gICAgaWYgKCBjYm0gPT0gMCAp Ci0gICAgICAgIHJldHVybiAwOworICAgIGlmICggSVNfRVJSKGluZm8pICkKKyAgICAgICAgcmV0 dXJuIFBUUl9FUlIoaW5mbyk7CiAKLSAgICBmaXJzdF9iaXQgPSBmaW5kX2ZpcnN0X2JpdCgmY2Jt LCBjYm1fbGVuKTsKLSAgICB6ZXJvX2JpdCA9IGZpbmRfbmV4dF96ZXJvX2JpdCgmY2JtLCBjYm1f bGVuLCBmaXJzdF9iaXQpOworICAgIGlmICggTlVMTCA9PSBpbmZvLT5wRmVhdCB8fCBOVUxMID09 IGluZm8tPnBGZWF0LT5wTmV4dCApCisgICAgICAgIHJldHVybiAtRU5PREVWOwogCi0gICAgLyog U2V0IGJpdHMgc2hvdWxkIGJlIGNvbnRpZ3VvdXMuICovCi0gICAgaWYgKCB6ZXJvX2JpdCA8IGNi bV9sZW4gJiYKLSAgICAgICAgIGZpbmRfbmV4dF9iaXQoJmNibSwgY2JtX2xlbiwgemVyb19iaXQp IDwgY2JtX2xlbiApCi0gICAgICAgIHJldHVybiAwOworICAgIHBUbXAgPSBpbmZvLT5wRmVhdC0+ cE5leHQ7CisgICAgd2hpbGUgKCBwVG1wICkKKyAgICB7CisgICAgICAgIHJldCA9IHBUbXAtPm9w cy5nZXRfdmFsKHBUbXAsIGNvcywgdHlwZSwgdmFsKTsKKyAgICAgICAgaWYgKCByZXQgPCAwICkK KyAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgICAgICBlbHNlIGlmICggcmV0ID4gMCAp CisgICAgICAgICAgICAvKiBGb3VuZCAqLworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg cFRtcCA9IHBUbXAtPnBOZXh0OworICAgIH0KIAotICAgIHJldHVybiAxOworICAgIHJldHVybiAw OwogfQogCi1zdHJ1Y3QgY29zX2NibV9pbmZvCitzdHJ1Y3QgY29zX21hc2tfaW5mbwogewogICAg IHVuc2lnbmVkIGludCBjb3M7Ci0gICAgYm9vbF90IGNkcDsKLSAgICB1aW50NjRfdCBjYm1fY29k ZTsKLSAgICB1aW50NjRfdCBjYm1fZGF0YTsKKyAgICBzdHJ1Y3QgZmVhdF9saXN0ICpwRmVhdDsK KyAgICB1aW50NjRfdCAqbWFzazsKIH07CiAKLXN0YXRpYyB2b2lkIGRvX3dyaXRlX2wzX2NibSh2 b2lkICpkYXRhKQorc3RhdGljIHZvaWQgZG9fd3JpdGVfcHNyX3JlZih2b2lkICpkYXRhKQogewot ICAgIHN0cnVjdCBjb3NfY2JtX2luZm8gKmluZm8gPSBkYXRhOworICAgIHN0cnVjdCBjb3NfbWFz a19pbmZvICppbmZvID0gKHN0cnVjdCBjb3NfbWFza19pbmZvICopZGF0YTsKKyAgICB1bnNpZ25l ZCBpbnQgY29zICAgICAgICAgICA9IGluZm8tPmNvczsKKyAgICBzdHJ1Y3QgZmVhdF9saXN0ICpw RmVhdCAgICA9IGluZm8tPnBGZWF0OworICAgIHVpbnQ2NF90ICptYXNrICAgICAgICAgICAgID0g aW5mby0+bWFzazsKKyAgICBzdHJ1Y3QgZmVhdF9saXN0ICpwVG1wOworICAgIGludCByZXQ7CisK KyAgICBpZiAoIE5VTEwgPT0gcEZlYXQgfHwgTlVMTCA9PSBwRmVhdC0+cE5leHQpCisgICAgICAg IHJldHVybjsKIAotICAgIGlmICggaW5mby0+Y2RwICkKKyAgICBwVG1wID0gcEZlYXQtPnBOZXh0 OworICAgIHdoaWxlICggcFRtcCApCiAgICAgewotICAgICAgICB3cm1zcmwoTVNSX0lBMzJfUFNS X0wzX01BU0tfQ09ERShpbmZvLT5jb3MpLCBpbmZvLT5jYm1fY29kZSk7Ci0gICAgICAgIHdybXNy bChNU1JfSUEzMl9QU1JfTDNfTUFTS19EQVRBKGluZm8tPmNvcyksIGluZm8tPmNibV9kYXRhKTsK KyAgICAgICAgcmV0ID0gcFRtcC0+b3BzLndyaXRlX21zcihjb3MsIG1hc2ssIHBUbXApOworICAg ICAgICBpZiAoIHJldCA8PSAwKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIG1hc2sg Kz0gcmV0OworICAgICAgICBwVG1wID0gcFRtcC0+cE5leHQ7CiAgICAgfQotICAgIGVsc2UKLSAg ICAgICAgd3Jtc3JsKE1TUl9JQTMyX1BTUl9MM19NQVNLKGluZm8tPmNvcyksIGluZm8tPmNibV9j b2RlKTsKIH0KIAotc3RhdGljIGludCB3cml0ZV9sM19jYm0odW5zaWduZWQgaW50IHNvY2tldCwg dW5zaWduZWQgaW50IGNvcywKLSAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IGNibV9j b2RlLCB1aW50NjRfdCBjYm1fZGF0YSwgYm9vbF90IGNkcCkKK3N0YXRpYyBpbnQgd3JpdGVfcHNy X3JlZih1bnNpZ25lZCBpbnQgc29ja2V0LCB1bnNpZ25lZCBpbnQgY29zLAorICAgICAgICAgICAg ICAgICAgICAgICAgICB1aW50NjRfdCAqbWFzaykKIHsKLSAgICBzdHJ1Y3QgY29zX2NibV9pbmZv IGluZm8gPQorICAgIHN0cnVjdCBwc3Jfc29ja2V0X2FsbG9jX2luZm8gKmluZm8gPSBnZXRfc29j a2V0X2FsbG9jX2luZm8oc29ja2V0KTsKKworICAgIHN0cnVjdCBjb3NfbWFza19pbmZvIGRhdGEg PQogICAgIHsKICAgICAgICAgLmNvcyA9IGNvcywKLSAgICAgICAgLmNibV9jb2RlID0gY2JtX2Nv ZGUsCi0gICAgICAgIC5jYm1fZGF0YSA9IGNibV9kYXRhLAotICAgICAgICAuY2RwID0gY2RwLAor ICAgICAgICAucEZlYXQgPSBpbmZvLT5wRmVhdCwKKyAgICAgICAgLm1hc2sgPSBtYXNrLAogICAg IH07CiAKICAgICBpZiAoIHNvY2tldCA9PSBjcHVfdG9fc29ja2V0KHNtcF9wcm9jZXNzb3JfaWQo KSkgKQotICAgICAgICBkb193cml0ZV9sM19jYm0oJmluZm8pOworICAgICAgICBkb193cml0ZV9w c3JfcmVmKCZkYXRhKTsKICAgICBlbHNlCiAgICAgewogICAgICAgICB1bnNpZ25lZCBpbnQgY3B1 ID0gZ2V0X3NvY2tldF9jcHUoc29ja2V0KTsKIAogICAgICAgICBpZiAoIGNwdSA+PSBucl9jcHVf aWRzICkKICAgICAgICAgICAgIHJldHVybiAtRU5PVFNPQ0s7Ci0gICAgICAgIG9uX3NlbGVjdGVk X2NwdXMoY3B1bWFza19vZihjcHUpLCBkb193cml0ZV9sM19jYm0sICZpbmZvLCAxKTsKKyAgICAg ICAgb25fc2VsZWN0ZWRfY3B1cyhjcHVtYXNrX29mKGNwdSksIGRvX3dyaXRlX3Bzcl9yZWYsICZk YXRhLCAxKTsKICAgICB9CiAKICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBmaW5kX2Nv cyhzdHJ1Y3QgcHNyX2NhdF9jYm0gKm1hcCwgdW5zaWduZWQgaW50IGNvc19tYXgsCi0gICAgICAg ICAgICAgICAgICAgIHVpbnQ2NF90IGNibV9jb2RlLCB1aW50NjRfdCBjYm1fZGF0YSwgYm9vbF90 IGNkcF9lbmFibGVkKQorc3RhdGljIGludCBmaW5kX2Nvcyh1aW50NjRfdCAqbWFzaywgZW51bSBt YXNrX3R5cGUgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgc3RydWN0IHBzcl9zb2NrZXRfYWxs b2NfaW5mbyAqaW5mbykKIHsKICAgICB1bnNpZ25lZCBpbnQgY29zOworICAgIHN0cnVjdCBwc3Jf cmVmICptYXAgPSBpbmZvLT5jb3NfcmVmOworICAgIHN0cnVjdCBmZWF0X2xpc3QgKnBUbXA7Cisg ICAgdWludDY0X3QgKnBNYXNrID0gbWFzazsKKyAgICBpbnQgcmV0OworICAgIGJvb2xfdCBmb3Vu ZCA9IDA7CisgICAgdW5zaWduZWQgaW50IGNvc19tYXggPSAwOworCisgICAgLyogY29zX21heCBp cyB0aGUgbWF4IENPUyBvZiB0aGUgZmVhdHVyZSB0byBiZSBzZXQuICovCisgICAgcFRtcCA9IGlu Zm8tPnBGZWF0LT5wTmV4dDsKKyAgICB3aGlsZSAoIHBUbXAgKQorICAgIHsKKyAgICAgICAgY29z X21heCA9IHBUbXAtPm9wcy5nZXRfY29zX21heF9hc190eXBlKHBUbXAsIHR5cGUpOworICAgICAg ICBpZiAoIGNvc19tYXggPiAwICkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIHBUbXAg PSBwVG1wLT5wTmV4dDsKKyAgICB9CiAKKyAgICBwVG1wID0gaW5mby0+cEZlYXQtPnBOZXh0Owog ICAgIGZvciAoIGNvcyA9IDA7IGNvcyA8PSBjb3NfbWF4OyBjb3MrKyApCiAgICAgewotICAgICAg ICBpZiAoIChtYXBbY29zXS5yZWYgfHwgY29zID09IDApICYmCi0gICAgICAgICAgICAgKCghY2Rw X2VuYWJsZWQgJiYgbWFwW2Nvc10uY2JtID09IGNibV9jb2RlKSB8fAotICAgICAgICAgICAgICAo Y2RwX2VuYWJsZWQgJiYgbWFwW2Nvc10uY29kZSA9PSBjYm1fY29kZSAmJgotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbWFwW2Nvc10uZGF0YSA9PSBjYm1fZGF0YSkpICkKKyAgICAgICAg aWYgKCAwICE9IGNvcyAmJiAwID09IG1hcFtjb3NdLnJlZiApCisgICAgICAgICAgICBjb250aW51 ZTsKKworICAgICAgICB3aGlsZSAoIHBUbXAgKQorICAgICAgICB7CisgICAgICAgICAgICAvKgor ICAgICAgICAgICAgICogQ29tcGFyZSBtYXNrIGFjY29yZGluZyB0byBmZWF0dXJlIGxpc3Qgb3Jk ZXIuCisgICAgICAgICAgICAgKiBXZSBtdXN0IGZvbGxvdyB0aGlzIG9yZGVyIGJlY2F1c2UgbWFz ayBpcyBhc3NlbWJsZWQKKyAgICAgICAgICAgICAqIGFzIHRoaXMgb3JkZXIgaW4gZ2V0X29sZF9z ZXRfbmV3KCkuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHJldCA9IHBUbXAtPm9wcy5j b21wYXJlX21hc2socE1hc2ssIHBUbXAsIGNvcywgJmZvdW5kKTsKKyAgICAgICAgICAgIGlmICgg cmV0IDwgMCApCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKKworICAgICAgICAgICAgLyog SWYgZmFpbCB0byBtYXRjaCwgZ28gdG8gbmV4dCBjb3MgdG8gY29tcGFyZS4gKi8KKyAgICAgICAg ICAgIGlmICggIWZvdW5kICkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAg cE1hc2sgKz0gcmV0OworICAgICAgICAgICAgcFRtcCA9IHBUbXAtPnBOZXh0OworICAgICAgICB9 CisKKyAgICAgICAgLyogRXZlcnkgZmVhdHVyZSBjYW4gbWF0Y2gsIHRoaXMgY29zIGlzIHdoYXQg d2UgZmluZC4gKi8KKyAgICAgICAgaWYgKCBmb3VuZCApCiAgICAgICAgICAgICByZXR1cm4gY29z OworCisgICAgICAgIC8qIE5vdCBmb3VuZCwgbmVlZCBmaW5kIGFnYWluIGZyb20gYmVnaW5uaW5n LiAqLworICAgICAgICBwVG1wID0gaW5mby0+cEZlYXQtPnBOZXh0OworICAgICAgICBwTWFzayA9 IG1hc2s7CiAgICAgfQogCisgICAgcHJpbnRrKFhFTkxPR19JTkZPICIlczogY2Fubm90IGZpbmQg Y29zLlxuIiwgX19mdW5jX18pOwogICAgIHJldHVybiAtRU5PRU5UOwogfQogCi1zdGF0aWMgaW50 IHBpY2tfYXZhaWxfY29zKHN0cnVjdCBwc3JfY2F0X2NibSAqbWFwLCB1bnNpZ25lZCBpbnQgY29z X21heCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG9sZF9jb3MpCitz dGF0aWMgaW50IGNoZWNrX2V4Y2VlZF9yYW5nZSh1aW50NjRfdCAqbWFzaywgc3RydWN0IGZlYXRf bGlzdCAqcFRtcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBj b3MpCiB7CisgICAgdW5zaWduZWQgaW50IHJldCA9IDA7CisKKyAgICB3aGlsZSAoIHBUbXAgKQor ICAgIHsKKyAgICAgICAgcmV0ID0gcFRtcC0+b3BzLmV4Y2VlZF9yYW5nZShtYXNrLCBwVG1wLCBj b3MpOworICAgICAgICBpZiAoIDAgPT0gcmV0ICkKKyAgICAgICAgICAgIHJldHVybiAtRU5PRU5U OworCisgICAgICAgIG1hc2sgKz0gcmV0OworICAgICAgICBwVG1wID0gcFRtcC0+cE5leHQ7Cisg ICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWxsb2NfbmV3X2NvcyhzdHJ1 Y3QgcHNyX3NvY2tldF9hbGxvY19pbmZvICppbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAg IHVpbnQ2NF90ICptYXNrLCB1bnNpZ25lZCBpbnQgb2xkX2NvcywKKyAgICAgICAgICAgICAgICAg ICAgICAgICBlbnVtIG1hc2tfdHlwZSB0eXBlKQoreworICAgIHVuc2lnbmVkIGludCBjb3NfbWF4 ID0gMDsKKyAgICBzdHJ1Y3QgZmVhdF9saXN0ICpwVG1wOwogICAgIHVuc2lnbmVkIGludCBjb3M7 CisgICAgc3RydWN0IHBzcl9yZWYgKm1hcCA9IGluZm8tPmNvc19yZWY7CisKKyAgICAvKgorICAg ICAqIGNvc19tYXggaXMgdGhlIG1heCBDT1Mgb2YgdGhlIGZlYXR1cmUgdG8gYmUgc2V0LgorICAg ICAqLworICAgIHBUbXAgPSBpbmZvLT5wRmVhdC0+cE5leHQ7CisgICAgd2hpbGUgKCBwVG1wICkK KyAgICB7CisgICAgICAgIGNvc19tYXggPSBwVG1wLT5vcHMuZ2V0X2Nvc19tYXhfYXNfdHlwZShw VG1wLCB0eXBlKTsKKyAgICAgICAgaWYgKCBjb3NfbWF4ID4gMCApCisgICAgICAgICAgICBicmVh azsKKworICAgICAgICBwVG1wID0gcFRtcC0+cE5leHQ7CisgICAgfQorCisgICAgaWYgKCAhY29z X21heCApCisgICAgICAgIHJldHVybiAtRU5PRU5UOwogCiAgICAgLyogSWYgb2xkIGNvcyBpcyBy ZWZlcnJlZCBvbmx5IGJ5IHRoZSBkb21haW4sIHRoZW4gdXNlIGl0LiAqLwogICAgIGlmICggbWFw W29sZF9jb3NdLnJlZiA9PSAxICYmIG9sZF9jb3MgIT0gMCApCisgICAgeworICAgICAgICBwVG1w ID0gaW5mby0+cEZlYXQtPnBOZXh0OworICAgICAgICBpZiAoIGNoZWNrX2V4Y2VlZF9yYW5nZSht YXNrLCBwVG1wLCBvbGRfY29zKSApCisgICAgICAgICAgICBnb3RvIGZpbmRfbmV3OworCiAgICAg ICAgIHJldHVybiBvbGRfY29zOworICAgIH0KIAorZmluZF9uZXc6CiAgICAgLyogRmluZCBhbiB1 bnVzZWQgb25lIG90aGVyIHRoYW4gY29zMC4gKi8KICAgICBmb3IgKCBjb3MgPSAxOyBjb3MgPD0g Y29zX21heDsgY29zKysgKQorICAgICAgICAvKgorICAgICAgICAgKiByZWYgaXMgMCBtZWFucyB0 aGlzIENPUyBpcyBub3Qgb2NjdXBpZWQgYnkgb3RoZXIgZG9tYWluIGFuZAorICAgICAgICAgKiBj YW4gYmUgdXNlZCBmb3IgY3VycmVudCBzZXR0aW5nLgorICAgICAgICAgKi8KICAgICAgICAgaWYg KCBtYXBbY29zXS5yZWYgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIHBUbXAgPSBpbmZv LT5wRmVhdC0+cE5leHQ7CisgICAgICAgICAgICBpZiAoIGNoZWNrX2V4Y2VlZF9yYW5nZShtYXNr LCBwVG1wLCBjb3MpICkKKyAgICAgICAgICAgICAgICByZXR1cm4gLUVOT0VOVDsKKwogICAgICAg ICAgICAgcmV0dXJuIGNvczsKKyAgICAgICAgfQogCisgICAgcHJpbnRrKFhFTkxPR19JTkZPICIl czogYWxsIENPU3MgaGF2ZSBiZWVuIG9jY3VwaWVkLlxuIiwgX19mdW5jX18pOwogICAgIHJldHVy biAtRU5PRU5UOwogfQogCi1pbnQgcHNyX3NldF9sM19jYm0oc3RydWN0IGRvbWFpbiAqZCwgdW5z aWduZWQgaW50IHNvY2tldCwKLSAgICAgICAgICAgICAgICAgICB1aW50NjRfdCBjYm0sIGVudW0g Y2JtX3R5cGUgdHlwZSkKK2ludCBwc3Jfc2V0X3ZhbChzdHJ1Y3QgZG9tYWluICpkLCB1bnNpZ25l ZCBpbnQgc29ja2V0LAorICAgICAgICAgICAgICAgIHVpbnQ2NF90IHZhbCwgZW51bSBtYXNrX3R5 cGUgdHlwZSkKIHsKLSAgICB1bnNpZ25lZCBpbnQgb2xkX2NvcywgY29zX21heDsKKyAgICB1bnNp Z25lZCBpbnQgb2xkX2NvczsKICAgICBpbnQgY29zLCByZXQ7Ci0gICAgdWludDY0X3QgY2JtX2Rh dGEsIGNibV9jb2RlOwotICAgIGJvb2xfdCBjZHBfZW5hYmxlZCA9IGNkcF9pc19lbmFibGVkKHNv Y2tldCk7Ci0gICAgc3RydWN0IHBzcl9jYXRfY2JtICptYXA7Ci0gICAgc3RydWN0IHBzcl9jYXRf c29ja2V0X2luZm8gKmluZm8gPSBnZXRfY2F0X3NvY2tldF9pbmZvKHNvY2tldCk7CisgICAgc3Ry dWN0IHBzcl9yZWYgKm1hcDsKKyAgICB1aW50NjRfdCAqbWFzazsKKyAgICBzdHJ1Y3QgcHNyX3Nv Y2tldF9hbGxvY19pbmZvICppbmZvID0gZ2V0X3NvY2tldF9hbGxvY19pbmZvKHNvY2tldCk7CiAK ICAgICBpZiAoIElTX0VSUihpbmZvKSApCiAgICAgICAgIHJldHVybiBQVFJfRVJSKGluZm8pOwog Ci0gICAgaWYgKCAhcHNyX2NoZWNrX2NibShpbmZvLT5jYm1fbGVuLCBjYm0pICkKLSAgICAgICAg cmV0dXJuIC1FSU5WQUw7Ci0KLSAgICBpZiAoICFjZHBfZW5hYmxlZCAmJiAodHlwZSA9PSBQU1Jf Q0JNX1RZUEVfTDNfQ09ERSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlID09IFBT Ul9DQk1fVFlQRV9MM19EQVRBKSApCi0gICAgICAgIHJldHVybiAtRU5YSU87Ci0KLSAgICBjb3Nf bWF4ID0gaW5mby0+Y29zX21heDsKKyAgICBtYXAgPSBpbmZvLT5jb3NfcmVmOwogICAgIG9sZF9j b3MgPSBkLT5hcmNoLnBzcl9jb3NfaWRzW3NvY2tldF07Ci0gICAgbWFwID0gaW5mby0+Y29zX3Rv X2NibTsKLQotICAgIHN3aXRjaCAoIHR5cGUgKQotICAgIHsKLSAgICBjYXNlIFBTUl9DQk1fVFlQ RV9MMzoKLSAgICAgICAgY2JtX2NvZGUgPSBjYm07Ci0gICAgICAgIGNibV9kYXRhID0gY2JtOwot ICAgICAgICBicmVhazsKLQotICAgIGNhc2UgUFNSX0NCTV9UWVBFX0wzX0NPREU6Ci0gICAgICAg IGNibV9jb2RlID0gY2JtOwotICAgICAgICBjYm1fZGF0YSA9IG1hcFtvbGRfY29zXS5kYXRhOwot ICAgICAgICBicmVhazsKLQotICAgIGNhc2UgUFNSX0NCTV9UWVBFX0wzX0RBVEE6Ci0gICAgICAg IGNibV9jb2RlID0gbWFwW29sZF9jb3NdLmNvZGU7Ci0gICAgICAgIGNibV9kYXRhID0gY2JtOwot ICAgICAgICBicmVhazsKIAotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9VTlJFQUNIQUJM RSgpOwotICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSAgICB9CisgICAgLyogQ29uc2lkZXJpbmcg Q0RQIGxpa2luZyBmZWF0dXJlcyAqLworICAgIG1hc2sgPSB4emFsbG9jX2FycmF5KHVpbnQ2NF90 LCBpbmZvLT5ucl9mZWF0ICogMik7CisgICAgaWYgKCAocmV0ID0gZ2V0X29sZF9zZXRfbmV3KG1h c2ssIGluZm8sIG9sZF9jb3MsIHR5cGUsIHZhbCkpICE9IDAgKQorICAgICAgICByZXR1cm4gcmV0 OwogCi0gICAgc3Bpbl9sb2NrKCZpbmZvLT5jYm1fbG9jayk7Ci0gICAgY29zID0gZmluZF9jb3Mo bWFwLCBjb3NfbWF4LCBjYm1fY29kZSwgY2JtX2RhdGEsIGNkcF9lbmFibGVkKTsKKyAgICBzcGlu X2xvY2soJmluZm8tPm1hc2tfbG9jayk7CisgICAgY29zID0gZmluZF9jb3MobWFzaywgdHlwZSwg aW5mbyk7CiAgICAgaWYgKCBjb3MgPj0gMCApCiAgICAgewogICAgICAgICBpZiAoIGNvcyA9PSBv bGRfY29zICkKICAgICAgICAgewotICAgICAgICAgICAgc3Bpbl91bmxvY2soJmluZm8tPmNibV9s b2NrKTsKKyAgICAgICAgICAgIHNwaW5fdW5sb2NrKCZpbmZvLT5tYXNrX2xvY2spOworICAgICAg ICAgICAgeGZyZWUobWFzayk7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQogICAg IH0KICAgICBlbHNlCiAgICAgewotICAgICAgICBjb3MgPSBwaWNrX2F2YWlsX2NvcyhtYXAsIGNv c19tYXgsIG9sZF9jb3MpOworICAgICAgICBjb3MgPSBhbGxvY19uZXdfY29zKGluZm8sIG1hc2ss IG9sZF9jb3MsIHR5cGUpOwogICAgICAgICBpZiAoIGNvcyA8IDAgKQogICAgICAgICB7Ci0gICAg ICAgICAgICBzcGluX3VubG9jaygmaW5mby0+Y2JtX2xvY2spOworICAgICAgICAgICAgc3Bpbl91 bmxvY2soJmluZm8tPm1hc2tfbG9jayk7CisgICAgICAgICAgICB4ZnJlZShtYXNrKTsKICAgICAg ICAgICAgIHJldHVybiBjb3M7CiAgICAgICAgIH0KIAotICAgICAgICAvKiBXZSB0cnkgdG8gYXZv aWQgd3JpdGluZyBNU1IuICovCi0gICAgICAgIGlmICggKGNkcF9lbmFibGVkICYmCi0gICAgICAg ICAgICAgKG1hcFtjb3NdLmNvZGUgIT0gY2JtX2NvZGUgfHwgbWFwW2Nvc10uZGF0YSAhPSBjYm1f ZGF0YSkpIHx8Ci0gICAgICAgICAgICAgKCFjZHBfZW5hYmxlZCAmJiBtYXBbY29zXS5jYm0gIT0g Y2JtX2NvZGUpICkKKyAgICAgICAgLyogV3JpdGUgYWxsIGZlYXR1cmVzIG1hc2sgTVNScyBjb3Jy ZXNwb25kaW5nIHRvIHRoZSBDT1MgKi8KKyAgICAgICAgcmV0ID0gd3JpdGVfcHNyX3JlZihzb2Nr ZXQsIGNvcywgbWFzayk7CisgICAgICAgIGlmICggcmV0ICkKICAgICAgICAgewotICAgICAgICAg ICAgcmV0ID0gd3JpdGVfbDNfY2JtKHNvY2tldCwgY29zLCBjYm1fY29kZSwgY2JtX2RhdGEsIGNk cF9lbmFibGVkKTsKLSAgICAgICAgICAgIGlmICggcmV0ICkKLSAgICAgICAgICAgIHsKLSAgICAg ICAgICAgICAgICBzcGluX3VubG9jaygmaW5mby0+Y2JtX2xvY2spOwotICAgICAgICAgICAgICAg IHJldHVybiByZXQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtYXBbY29zXS5jb2RlID0g Y2JtX2NvZGU7Ci0gICAgICAgICAgICBtYXBbY29zXS5kYXRhID0gY2JtX2RhdGE7CisgICAgICAg ICAgICBzcGluX3VubG9jaygmaW5mby0+bWFza19sb2NrKTsKKyAgICAgICAgICAgIHhmcmVlKG1h c2spOworICAgICAgICAgICAgcmV0dXJuIHJldDsKICAgICAgICAgfQogICAgIH0KIAogICAgIG1h cFtjb3NdLnJlZisrOwogICAgIG1hcFtvbGRfY29zXS5yZWYtLTsKLSAgICBzcGluX3VubG9jaygm aW5mby0+Y2JtX2xvY2spOworCisgICAgc3Bpbl91bmxvY2soJmluZm8tPm1hc2tfbG9jayk7CiAK ICAgICBkLT5hcmNoLnBzcl9jb3NfaWRzW3NvY2tldF0gPSBjb3M7CisgICAgeGZyZWUobWFzayk7 CisgICAgbWFzayA9IE5VTEw7CiAKICAgICByZXR1cm4gMDsKIH0KQEAgLTUyOSwyMCArMTE1MSwy MyBAQCBzdGF0aWMgdm9pZCBwc3JfZnJlZV9jb3Moc3RydWN0IGRvbWFpbiAqZCkKIHsKICAgICB1 bnNpZ25lZCBpbnQgc29ja2V0OwogICAgIHVuc2lnbmVkIGludCBjb3M7Ci0gICAgc3RydWN0IHBz cl9jYXRfc29ja2V0X2luZm8gKmluZm87CisgICAgc3RydWN0IHBzcl9zb2NrZXRfYWxsb2NfaW5m byAqaW5mbzsKIAogICAgIGlmKCAhZC0+YXJjaC5wc3JfY29zX2lkcyApCiAgICAgICAgIHJldHVy bjsKIAotICAgIGZvcl9lYWNoX3NldF9iaXQoc29ja2V0LCBjYXRfc29ja2V0X2VuYWJsZSwgbnJf c29ja2V0cykKKyAgICBmb3IoIHNvY2tldCA9IDA7IHNvY2tldCA8IG5yX3NvY2tldHM7IHNvY2tl dCsrKQogICAgIHsKICAgICAgICAgaWYgKCAoY29zID0gZC0+YXJjaC5wc3JfY29zX2lkc1tzb2Nr ZXRdKSA9PSAwICkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGluZm8gPSBjYXRf c29ja2V0X2luZm8gKyBzb2NrZXQ7Ci0gICAgICAgIHNwaW5fbG9jaygmaW5mby0+Y2JtX2xvY2sp OwotICAgICAgICBpbmZvLT5jb3NfdG9fY2JtW2Nvc10ucmVmLS07Ci0gICAgICAgIHNwaW5fdW5s b2NrKCZpbmZvLT5jYm1fbG9jayk7CisgICAgICAgIGluZm8gPSBnZXRfc29ja2V0X2FsbG9jX2lu Zm8oc29ja2V0KTsKKyAgICAgICAgaWYgKCBJU19FUlIoaW5mbykgKQorICAgICAgICAgICAgY29u dGludWU7CisKKyAgICAgICAgc3Bpbl9sb2NrKCZpbmZvLT5tYXNrX2xvY2spOworICAgICAgICBp bmZvLT5jb3NfcmVmW2Nvc10ucmVmLS07CisgICAgICAgIHNwaW5fdW5sb2NrKCZpbmZvLT5tYXNr X2xvY2spOwogICAgIH0KIAogICAgIHhmcmVlKGQtPmFyY2gucHNyX2Nvc19pZHMpOwpAQCAtNTUx LDcgKzExNzYsNyBAQCBzdGF0aWMgdm9pZCBwc3JfZnJlZV9jb3Moc3RydWN0IGRvbWFpbiAqZCkK IAogaW50IHBzcl9kb21haW5faW5pdChzdHJ1Y3QgZG9tYWluICpkKQogewotICAgIGlmICggY2F0 X3NvY2tldF9pbmZvICkKKyAgICBpZiAoIHNvY2tldF9hbGxvY19pbmZvICkKICAgICB7CiAgICAg ICAgIGQtPmFyY2gucHNyX2Nvc19pZHMgPSB4emFsbG9jX2FycmF5KHVuc2lnbmVkIGludCwgbnJf c29ja2V0cyk7CiAgICAgICAgIGlmICggIWQtPmFyY2gucHNyX2Nvc19pZHMgKQpAQCAtNTY3LDEz NyArMTE5MiwxNDcgQEAgdm9pZCBwc3JfZG9tYWluX2ZyZWUoc3RydWN0IGRvbWFpbiAqZCkKICAg ICBwc3JfZnJlZV9jb3MoZCk7CiB9CiAKLXN0YXRpYyBpbnQgY2F0X2NwdV9wcmVwYXJlKHVuc2ln bmVkIGludCBjcHUpCitzdGF0aWMgaW50IGludGVybmFsX2NwdV9wcmVwYXJlKHVuc2lnbmVkIGlu dCBjcHUpCiB7Ci0gICAgaWYgKCAhY2F0X3NvY2tldF9pbmZvICkKKyAgICBpZiAoICFzb2NrZXRf YWxsb2NfaW5mbyApCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgaWYgKCB0ZW1wX2Nvc190b19j Ym0gPT0gTlVMTCAmJgotICAgICAgICAgKHRlbXBfY29zX3RvX2NibSA9IHh6YWxsb2NfYXJyYXko c3RydWN0IHBzcl9jYXRfY2JtLAorICAgIGlmICggdGVtcF9jb3NfcmVmID09IE5VTEwgJiYKKyAg ICAgICAgICh0ZW1wX2Nvc19yZWYgPSB4emFsbG9jX2FycmF5KHN0cnVjdCBwc3JfcmVmLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0X2Nvc19tYXggKyAxVUwp KSA9PSBOVUxMICkKICAgICAgICAgcmV0dXJuIC1FTk9NRU07CiAKKyAgICAvKiBNYWxsb2MgbWVt b3J5IGZvciB0aGUgZ2xvYmFsIGZlYXR1cmUgaGVhZCBoZXJlLiAqLworICAgIGlmICggcEwzQ0FU ID09IE5VTEwgJiYKKyAgICAgICAgIChwTDNDQVQgPSB4emFsbG9jKHN0cnVjdCBmZWF0X2xpc3Qp KSA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuIC1FTk9NRU07CisKICAgICByZXR1cm4gMDsKIH0K IAotc3RhdGljIHZvaWQgY2F0X2NwdV9pbml0KHZvaWQpCitzdGF0aWMgdm9pZCBpbnRlcm5hbF9j cHVfaW5pdCh2b2lkKQogewogICAgIHVuc2lnbmVkIGludCBlYXgsIGVieCwgZWN4LCBlZHg7Ci0g ICAgc3RydWN0IHBzcl9jYXRfc29ja2V0X2luZm8gKmluZm87CisgICAgc3RydWN0IHBzcl9zb2Nr ZXRfYWxsb2NfaW5mbyAqaW5mbzsKICAgICB1bnNpZ25lZCBpbnQgc29ja2V0OwogICAgIHVuc2ln bmVkIGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0gICAgdWludDY0X3QgdmFsOwogICAg IGNvbnN0IHN0cnVjdCBjcHVpbmZvX3g4NiAqYyA9IGNwdV9kYXRhICsgY3B1OworICAgIHN0cnVj dCBmZWF0X2xpc3QgKnBUbXA7CiAKICAgICBpZiAoICFjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX1BR RSkgfHwgYy0+Y3B1aWRfbGV2ZWwgPCBQU1JfQ1BVSURfTEVWRUxfQ0FUICkKICAgICAgICAgcmV0 dXJuOwogCiAgICAgc29ja2V0ID0gY3B1X3RvX3NvY2tldChjcHUpOwotICAgIGlmICggdGVzdF9i aXQoc29ja2V0LCBjYXRfc29ja2V0X2VuYWJsZSkgKQorICAgIGluZm8gPSBzb2NrZXRfYWxsb2Nf aW5mbyArIHNvY2tldDsKKyAgICBpZiAoIGluZm8tPmZlYXR1cmVzICkKICAgICAgICAgcmV0dXJu OwogCiAgICAgY3B1aWRfY291bnQoUFNSX0NQVUlEX0xFVkVMX0NBVCwgMCwgJmVheCwgJmVieCwg JmVjeCwgJmVkeCk7CiAgICAgaWYgKCBlYnggJiBQU1JfUkVTT1VSQ0VfVFlQRV9MMyApCiAgICAg ewotICAgICAgICBjcHVpZF9jb3VudChQU1JfQ1BVSURfTEVWRUxfQ0FULCAxLCAmZWF4LCAmZWJ4 LCAmZWN4LCAmZWR4KTsKLSAgICAgICAgaW5mbyA9IGNhdF9zb2NrZXRfaW5mbyArIHNvY2tldDsK LSAgICAgICAgaW5mby0+Y2JtX2xlbiA9IChlYXggJiAweDFmKSArIDE7Ci0gICAgICAgIGluZm8t PmNvc19tYXggPSBtaW4ob3B0X2Nvc19tYXgsIGVkeCAmIDB4ZmZmZik7Ci0KLSAgICAgICAgaW5m by0+Y29zX3RvX2NibSA9IHRlbXBfY29zX3RvX2NibTsKLSAgICAgICAgdGVtcF9jb3NfdG9fY2Jt ID0gTlVMTDsKLSAgICAgICAgLyogY29zPTAgaXMgcmVzZXJ2ZWQgYXMgZGVmYXVsdCBjYm0oYWxs IG9uZXMpLiAqLwotICAgICAgICBpbmZvLT5jb3NfdG9fY2JtWzBdLmNibSA9ICgxdWxsIDw8IGlu Zm8tPmNibV9sZW4pIC0gMTsKKyAgICAgICAgcFRtcCA9IHBMM0NBVDsKKyAgICAgICAgaWYgKCAh cFRtcCApCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHBMM0NBVCA9IE5VTEw7CiAKLSAg ICAgICAgc3Bpbl9sb2NrX2luaXQoJmluZm8tPmNibV9sb2NrKTsKLQotICAgICAgICBzZXRfYml0 KHNvY2tldCwgY2F0X3NvY2tldF9lbmFibGUpOwotCi0gICAgICAgIGlmICggKGVjeCAmIFBTUl9D QVRfQ0RQX0NBUEFCSUxJVFkpICYmIChvcHRfcHNyICYgUFNSX0NEUCkgJiYKLSAgICAgICAgICAg ICBjZHBfc29ja2V0X2VuYWJsZSAmJiAhdGVzdF9iaXQoc29ja2V0LCBjZHBfc29ja2V0X2VuYWJs ZSkgKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbmZvLT5jb3NfdG9fY2JtWzBdLmNvZGUgPSAo MXVsbCA8PCBpbmZvLT5jYm1fbGVuKSAtIDE7Ci0gICAgICAgICAgICBpbmZvLT5jb3NfdG9fY2Jt WzBdLmRhdGEgPSAoMXVsbCA8PCBpbmZvLT5jYm1fbGVuKSAtIDE7Ci0KLSAgICAgICAgICAgIC8q IFdlIG9ubHkgd3JpdGUgbWFzazEgc2luY2UgbWFzazAgaXMgYWx3YXlzIGFsbCBvbmVzIGJ5IGRl ZmF1bHQuICovCi0gICAgICAgICAgICB3cm1zcmwoTVNSX0lBMzJfUFNSX0wzX01BU0soMSksICgx dWxsIDw8IGluZm8tPmNibV9sZW4pIC0gMSk7Ci0KLSAgICAgICAgICAgIHJkbXNybChNU1JfSUEz Ml9QU1JfTDNfUU9TX0NGRywgdmFsKTsKLSAgICAgICAgICAgIHdybXNybChNU1JfSUEzMl9QU1Jf TDNfUU9TX0NGRywgdmFsIHwgKDEgPDwgUFNSX0wzX1FPU19DRFBfRU5BQkxFX0JJVCkpOwotCi0g ICAgICAgICAgICAvKiBDdXQgaGFsZiBvZiBjb3NfbWF4IHdoZW4gQ0RQIGlzIGVuYWJsZWQuICov Ci0gICAgICAgICAgICBpbmZvLT5jb3NfbWF4ID4+PSAxOwotCi0gICAgICAgICAgICBzZXRfYml0 KHNvY2tldCwgY2RwX3NvY2tldF9lbmFibGUpOwotICAgICAgICB9Ci0gICAgICAgIHByaW50ayhY RU5MT0dfSU5GTyAiQ0FUOiBlbmFibGVkIG9uIHNvY2tldCAldSwgY29zX21heDoldSwgY2JtX2xl bjoldSwgQ0RQOiVzXG4iLAotICAgICAgICAgICAgICAgc29ja2V0LCBpbmZvLT5jb3NfbWF4LCBp bmZvLT5jYm1fbGVuLAotICAgICAgICAgICAgICAgY2RwX2lzX2VuYWJsZWQoc29ja2V0KSA/ICJv biIgOiAib2ZmIik7CisgICAgICAgIC8qIEluaXRpYWxpemUgdGhpcyBmZWF0dXJlIGFjY29yZGlu ZyB0byBDUFVJRC4gKi8KKyAgICAgICAgY3B1aWRfY291bnQoUFNSX0NQVUlEX0xFVkVMX0NBVCwg MSwgJmVheCwgJmVieCwgJmVjeCwgJmVkeCk7CisgICAgICAgIHBUbXAtPm9wcyA9IGwzX2NhdF9v cHM7CisgICAgICAgIHBUbXAtPm9wcy5pbml0X2ZlYXR1cmUoZWF4LCBlYngsIGVjeCwgZWR4LCBw VG1wLCBpbmZvKTsKICAgICB9CiB9CiAKLXN0YXRpYyB2b2lkIGNhdF9jcHVfZmluaSh1bnNpZ25l ZCBpbnQgY3B1KQorc3RhdGljIHZvaWQgaW50ZXJuYWxfY3B1X2ZpbmkodW5zaWduZWQgaW50IGNw dSkKIHsKICAgICB1bnNpZ25lZCBpbnQgc29ja2V0ID0gY3B1X3RvX3NvY2tldChjcHUpOwogCiAg ICAgaWYgKCAhc29ja2V0X2NwdW1hc2tbc29ja2V0XSB8fCBjcHVtYXNrX2VtcHR5KHNvY2tldF9j cHVtYXNrW3NvY2tldF0pICkKICAgICB7Ci0gICAgICAgIHN0cnVjdCBwc3JfY2F0X3NvY2tldF9p bmZvICppbmZvID0gY2F0X3NvY2tldF9pbmZvICsgc29ja2V0OworICAgICAgICBzdHJ1Y3QgcHNy X3NvY2tldF9hbGxvY19pbmZvICppbmZvID0gZ2V0X3NvY2tldF9hbGxvY19pbmZvKHNvY2tldCk7 CisKKyAgICAgICAgZnJlZV9mZWF0dXJlKGluZm8pOwogCi0gICAgICAgIGlmICggaW5mby0+Y29z X3RvX2NibSApCisgICAgICAgIGlmICggaW5mby0+Y29zX3JlZiApCiAgICAgICAgIHsKLSAgICAg ICAgICAgIHhmcmVlKGluZm8tPmNvc190b19jYm0pOwotICAgICAgICAgICAgaW5mby0+Y29zX3Rv X2NibSA9IE5VTEw7CisgICAgICAgICAgICB4ZnJlZShpbmZvLT5jb3NfcmVmKTsKKyAgICAgICAg ICAgIGluZm8tPmNvc19yZWYgPSBOVUxMOwogICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCBjZHBf aXNfZW5hYmxlZChzb2NrZXQpICkKLSAgICAgICAgICAgIGNsZWFyX2JpdChzb2NrZXQsIGNkcF9z b2NrZXRfZW5hYmxlKTsKLQotICAgICAgICBjbGVhcl9iaXQoc29ja2V0LCBjYXRfc29ja2V0X2Vu YWJsZSk7CiAgICAgfQogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQgcHNyX2NhdF9mcmVlKHZvaWQp CitzdGF0aWMgdm9pZCBfX2luaXQgcHNyX2ZyZWUodm9pZCkKIHsKLSAgICB4ZnJlZShjYXRfc29j a2V0X2VuYWJsZSk7Ci0gICAgY2F0X3NvY2tldF9lbmFibGUgPSBOVUxMOwotICAgIHhmcmVlKGNh dF9zb2NrZXRfaW5mbyk7Ci0gICAgY2F0X3NvY2tldF9pbmZvID0gTlVMTDsKKyAgICBpbnQgaTsK KworICAgIGZvciAoIGkgPSAwOyBpIDwgbnJfc29ja2V0czsgaSsrICkKKyAgICB7CisgICAgICAg IGZyZWVfZmVhdHVyZSgmc29ja2V0X2FsbG9jX2luZm9baV0pOworICAgICAgICB4ZnJlZShzb2Nr ZXRfYWxsb2NfaW5mb1tpXS5wRmVhdCk7CisgICAgICAgIHNvY2tldF9hbGxvY19pbmZvW2ldLnBG ZWF0ID0gTlVMTDsKKyAgICB9CisKKyAgICB4ZnJlZShzb2NrZXRfYWxsb2NfaW5mbyk7CisgICAg c29ja2V0X2FsbG9jX2luZm8gPSBOVUxMOwogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQgaW5pdF9w c3JfY2F0KHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgaW5pdF9wc3Iodm9pZCkKIHsKKyAgICBp bnQgaTsKKwogICAgIGlmICggb3B0X2Nvc19tYXggPCAxICkKICAgICB7CiAgICAgICAgIHByaW50 ayhYRU5MT0dfSU5GTyAiQ0FUOiBkaXNhYmxlZCwgY29zX21heCBpcyB0b28gc21hbGxcbiIpOwog ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgY2F0X3NvY2tldF9lbmFibGUgPSB4emFsbG9j X2FycmF5KHVuc2lnbmVkIGxvbmcsIEJJVFNfVE9fTE9OR1MobnJfc29ja2V0cykpOwotICAgIGNh dF9zb2NrZXRfaW5mbyA9IHh6YWxsb2NfYXJyYXkoc3RydWN0IHBzcl9jYXRfc29ja2V0X2luZm8s IG5yX3NvY2tldHMpOwotICAgIGNkcF9zb2NrZXRfZW5hYmxlID0geHphbGxvY19hcnJheSh1bnNp Z25lZCBsb25nLCBCSVRTX1RPX0xPTkdTKG5yX3NvY2tldHMpKTsKKyAgICBzb2NrZXRfYWxsb2Nf aW5mbyA9IHh6YWxsb2NfYXJyYXkoc3RydWN0IHBzcl9zb2NrZXRfYWxsb2NfaW5mbywgbnJfc29j a2V0cyk7CisKKyAgICBpZiAoICFzb2NrZXRfYWxsb2NfaW5mbyApCisgICAgeworICAgICAgICBw cmludGsoWEVOTE9HX0lORk8gIkZhaWwgdG8gYWxsb2Mgc29ja2V0X2FsbG9jX2luZm8hXG4iKTsK KyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGlmICggIWNhdF9zb2NrZXRfZW5hYmxlIHx8 ICFjYXRfc29ja2V0X2luZm8gKQotICAgICAgICBwc3JfY2F0X2ZyZWUoKTsKKyAgICBmb3IgKCBp ID0gMDsgaSA8IG5yX3NvY2tldHM7IGkrKyApCisgICAgeworICAgICAgICBzb2NrZXRfYWxsb2Nf aW5mb1tpXS5wRmVhdCA9ICB4emFsbG9jKHN0cnVjdCBmZWF0X2xpc3QpOworICAgICAgICBpZiAo IE5VTEwgPT0gc29ja2V0X2FsbG9jX2luZm9baV0ucEZlYXQgKQorICAgICAgICB7CisgICAgICAg ICAgICBwcmludGsoWEVOTE9HX0lORk8gIkZhaWwgdG8gYWxsb2MgcEZlYXQhXG4iKTsKKyAgICAg ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBzb2NrZXRfYWxsb2NfaW5mb1tpXS5w RmVhdC0+cE5leHQgPSBOVUxMOworICAgIH0KIH0KIAogc3RhdGljIGludCBwc3JfY3B1X3ByZXBh cmUodW5zaWduZWQgaW50IGNwdSkKIHsKLSAgICByZXR1cm4gY2F0X2NwdV9wcmVwYXJlKGNwdSk7 CisgICAgcmV0dXJuIGludGVybmFsX2NwdV9wcmVwYXJlKGNwdSk7CiB9CiAKIHN0YXRpYyB2b2lk IHBzcl9jcHVfaW5pdCh2b2lkKQogewotICAgIGlmICggY2F0X3NvY2tldF9pbmZvICkKLSAgICAg ICAgY2F0X2NwdV9pbml0KCk7CisgICAgdW5zaWduZWQgaW50IHNvY2tldDsKKyAgICBzdHJ1Y3Qg cHNyX3NvY2tldF9hbGxvY19pbmZvICppbmZvOworCisgICAgaWYgKCBzb2NrZXRfYWxsb2NfaW5m byApCisgICAgeworICAgICAgICBzb2NrZXQgPSBjcHVfdG9fc29ja2V0KHNtcF9wcm9jZXNzb3Jf aWQoKSk7CisgICAgICAgIGluZm8gPSBzb2NrZXRfYWxsb2NfaW5mbyArIHNvY2tldDsKKyAgICAg ICAgaW5mby0+Y29zX3JlZiA9IHRlbXBfY29zX3JlZjsKKyAgICAgICAgdGVtcF9jb3NfcmVmID0g TlVMTDsKKyAgICAgICAgc3Bpbl9sb2NrX2luaXQoJmluZm8tPm1hc2tfbG9jayk7CisKKyAgICAg ICAgaW50ZXJuYWxfY3B1X2luaXQoKTsKKyAgICB9CiAKICAgICBwc3JfYXNzb2NfaW5pdCgpOwog fQogCiBzdGF0aWMgdm9pZCBwc3JfY3B1X2ZpbmkodW5zaWduZWQgaW50IGNwdSkKIHsKLSAgICBp ZiAoIGNhdF9zb2NrZXRfaW5mbyApCi0gICAgICAgIGNhdF9jcHVfZmluaShjcHUpOworICAgIGlm ICggc29ja2V0X2FsbG9jX2luZm8gKQorICAgICAgICBpbnRlcm5hbF9jcHVfZmluaShjcHUpOwog fQogCiBzdGF0aWMgaW50IGNwdV9jYWxsYmFjaygKQEAgLTczOSwxMyArMTM3NCwxMyBAQCBzdGF0 aWMgaW50IF9faW5pdCBwc3JfcHJlc21wX2luaXQodm9pZCkKICAgICAgICAgaW5pdF9wc3JfY210 KG9wdF9ybWlkX21heCk7CiAKICAgICBpZiAoIG9wdF9wc3IgJiBQU1JfQ0FUICkKLSAgICAgICAg aW5pdF9wc3JfY2F0KCk7CisgICAgICAgIGluaXRfcHNyKCk7CiAKICAgICBpZiAoIHBzcl9jcHVf cHJlcGFyZSgwKSApCi0gICAgICAgIHBzcl9jYXRfZnJlZSgpOworICAgICAgICBwc3JfZnJlZSgp OwogCiAgICAgcHNyX2NwdV9pbml0KCk7Ci0gICAgaWYgKCBwc3JfY210X2VuYWJsZWQoKSB8fCBj YXRfc29ja2V0X2luZm8gKQorICAgIGlmICggcHNyX2NtdF9lbmFibGVkKCkgfHwgc29ja2V0X2Fs bG9jX2luZm8gKQogICAgICAgICByZWdpc3Rlcl9jcHVfbm90aWZpZXIoJmNwdV9uZmIpOwogCiAg ICAgcmV0dXJuIDA7CmRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYvc3lzY3RsLmMgYi94ZW4vYXJj aC94ODYvc3lzY3RsLmMKaW5kZXggMTRlN2RjNy4uYTE0M2U3YSAxMDA2NDQKLS0tIGEveGVuL2Fy Y2gveDg2L3N5c2N0bC5jCisrKyBiL3hlbi9hcmNoL3g4Ni9zeXNjdGwuYwpAQCAtMTc2LDEwICsx NzYsMTEgQEAgbG9uZyBhcmNoX2RvX3N5c2N0bCgKICAgICAgICAgc3dpdGNoICggc3lzY3RsLT51 LnBzcl9jYXRfb3AuY21kICkKICAgICAgICAgewogICAgICAgICBjYXNlIFhFTl9TWVNDVExfUFNS X0NBVF9nZXRfbDNfaW5mbzoKLSAgICAgICAgICAgIHJldCA9IHBzcl9nZXRfY2F0X2wzX2luZm8o c3lzY3RsLT51LnBzcl9jYXRfb3AudGFyZ2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAmc3lzY3RsLT51LnBzcl9jYXRfb3AudS5sM19pbmZvLmNibV9sZW4sCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzeXNjdGwtPnUucHNyX2NhdF9vcC51 LmwzX2luZm8uY29zX21heCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg JnN5c2N0bC0+dS5wc3JfY2F0X29wLnUubDNfaW5mby5mbGFncyk7CisgICAgICAgICAgICByZXQg PSBwc3JfZ2V0X2luZm8oc3lzY3RsLT51LnBzcl9jYXRfb3AudGFyZ2V0LAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFBTUl9NQVNLX1RZUEVfTDNfQ0JNLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICZzeXNjdGwtPnUucHNyX2NhdF9vcC51LmwzX2luZm8uY2JtX2xlbiwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3lzY3RsLT51LnBzcl9jYXRfb3AudS5s M19pbmZvLmNvc19tYXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN5c2N0bC0+ dS5wc3JfY2F0X29wLnUubDNfaW5mby5mbGFncyk7CiAKICAgICAgICAgICAgIGlmICggIXJldCAm JiBfX2NvcHlfZmllbGRfdG9fZ3Vlc3QodV9zeXNjdGwsIHN5c2N0bCwgdS5wc3JfY2F0X29wKSAp CiAgICAgICAgICAgICAgICAgcmV0ID0gLUVGQVVMVDsKZGlmZiAtLWdpdCBhL3hlbi9pbmNsdWRl L2FzbS14ODYvcHNyLmggYi94ZW4vaW5jbHVkZS9hc20teDg2L3Bzci5oCmluZGV4IDU3ZjQ3ZTku LjA5OTM4NjMgMTAwNjQ0Ci0tLSBhL3hlbi9pbmNsdWRlL2FzbS14ODYvcHNyLmgKKysrIGIveGVu L2luY2x1ZGUvYXNtLXg4Ni9wc3IuaApAQCAtNDYsMTAgKzQ2LDEwIEBAIHN0cnVjdCBwc3JfY210 IHsKICAgICBzdHJ1Y3QgcHNyX2NtdF9sMyBsMzsKIH07CiAKLWVudW0gY2JtX3R5cGUgewotICAg IFBTUl9DQk1fVFlQRV9MMywKLSAgICBQU1JfQ0JNX1RZUEVfTDNfQ09ERSwKLSAgICBQU1JfQ0JN X1RZUEVfTDNfREFUQSwKK2VudW0gbWFza190eXBlIHsKKyAgICBQU1JfTUFTS19UWVBFX0wzX0NC TSwKKyAgICBQU1JfTUFTS19UWVBFX0wzX0NPREUsCisgICAgUFNSX01BU0tfVFlQRV9MM19EQVRB LAogfTsKIAogZXh0ZXJuIHN0cnVjdCBwc3JfY210ICpwc3JfY210OwpAQCAtNjMsMTIgKzYzLDEz IEBAIGludCBwc3JfYWxsb2Nfcm1pZChzdHJ1Y3QgZG9tYWluICpkKTsKIHZvaWQgcHNyX2ZyZWVf cm1pZChzdHJ1Y3QgZG9tYWluICpkKTsKIHZvaWQgcHNyX2N0eHRfc3dpdGNoX3RvKHN0cnVjdCBk b21haW4gKmQpOwogCi1pbnQgcHNyX2dldF9jYXRfbDNfaW5mbyh1bnNpZ25lZCBpbnQgc29ja2V0 LCB1aW50MzJfdCAqY2JtX2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICpj b3NfbWF4LCB1aW50MzJfdCAqZmxhZ3MpOwotaW50IHBzcl9nZXRfbDNfY2JtKHN0cnVjdCBkb21h aW4gKmQsIHVuc2lnbmVkIGludCBzb2NrZXQsCi0gICAgICAgICAgICAgICAgICAgdWludDY0X3Qg KmNibSwgZW51bSBjYm1fdHlwZSB0eXBlKTsKLWludCBwc3Jfc2V0X2wzX2NibShzdHJ1Y3QgZG9t YWluICpkLCB1bnNpZ25lZCBpbnQgc29ja2V0LAotICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90 IGNibSwgZW51bSBjYm1fdHlwZSB0eXBlKTsKK2ludCBwc3JfZ2V0X2luZm8odW5zaWduZWQgaW50 IHNvY2tldCwgZW51bSBtYXNrX3R5cGUgdHlwZSwKKyAgICAgICAgICAgICAgICAgdWludDMyX3Qg KmRhdDAsIHVpbnQzMl90ICpkYXQxLAorICAgICAgICAgICAgICAgICB1aW50MzJfdCAqZGF0Mik7 CitpbnQgcHNyX2dldF92YWwoc3RydWN0IGRvbWFpbiAqZCwgdW5zaWduZWQgaW50IHNvY2tldCwK KyAgICAgICAgICAgICAgICB1aW50NjRfdCAqdmFsLCBlbnVtIG1hc2tfdHlwZSB0eXBlKTsKK2lu dCBwc3Jfc2V0X3ZhbChzdHJ1Y3QgZG9tYWluICpkLCB1bnNpZ25lZCBpbnQgc29ja2V0LAorICAg ICAgICAgICAgICAgIHVpbnQ2NF90IHZhbCwgZW51bSBtYXNrX3R5cGUgdHlwZSk7CiAKIGludCBw c3JfZG9tYWluX2luaXQoc3RydWN0IGRvbWFpbiAqZCk7CiB2b2lkIHBzcl9kb21haW5fZnJlZShz dHJ1Y3QgZG9tYWluICpkKTsKLS0gCjEuOS4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlz dHMueGVuLm9yZwpodHRwczovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==