From mboxrd@z Thu Jan 1 00:00:00 1970 From: Bhupinder Thakur Subject: [PATCH 02/25 v7] xen/arm: vpl011: Add SBSA UART emulation in Xen Date: Mon, 7 Aug 2017 14:22:54 +0530 Message-ID: <1502095997-31219-3-git-send-email-bhupinder.thakur@linaro.org> References: <1502095997-31219-1-git-send-email-bhupinder.thakur@linaro.org> 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 1dedn7-0004GC-RN for xen-devel@lists.xenproject.org; Mon, 07 Aug 2017 08:53:38 +0000 Received: by mail-pf0-f175.google.com with SMTP id t86so31415103pfe.2 for ; Mon, 07 Aug 2017 01:53:35 -0700 (PDT) In-Reply-To: <1502095997-31219-1-git-send-email-bhupinder.thakur@linaro.org> 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: Stefano Stabellini , Wei Liu , George Dunlap , Andrew Cooper , Ian Jackson , Tim Deegan , Julien Grall , Jan Beulich , Andre Przywara List-Id: xen-devel@lists.xenproject.org QWRkIGVtdWxhdGlvbiBjb2RlIHRvIGVtdWxhdGUgcmVhZC93cml0ZSBhY2Nlc3MgdG8gcGwwMTEg cmVnaXN0ZXJzCmFuZCBwbDAxMSBpbnRlcnJ1cHRzOgoKICAgIC0gRW11bGF0ZSBEUiByZWFkL3dy aXRlIGJ5IHJlYWRpbmcgYW5kIHdyaXRpbmcgZnJvbS90byB0aGUgSU4KICAgICAgYW5kIE9VVCBy aW5nIGJ1ZmZlcnMgYW5kIHJhaXNpbmcgYW4gZXZlbnQgdG8gdGhlIGJhY2tlbmQgd2hlbgogICAg ICB0aGVyZSBpcyBkYXRhIGluIHRoZSBPVVQgcmluZyBidWZmZXIgYW5kIGluamVjdGluZyBhbiBp bnRlcnJ1cHQKICAgICAgdG8gdGhlIGd1ZXN0IHdoZW4gdGhlcmUgaXMgZGF0YSBpbiB0aGUgSU4g cmluZyBidWZmZXIKCiAgICAtIE90aGVyIHJlZ2lzdGVycyBhcmUgcmVsYXRlZCB0byBpbnRlcnJ1 cHQgbWFuYWdlbWVudCBhbmQKICAgICAgZXNzZW50aWFsbHkgY29udHJvbCB3aGVuIGludGVycnVw dHMgYXJlIGRlbGl2ZXJlZCB0byB0aGUgZ3Vlc3QKClRoaXMgcGF0Y2ggaW1wbGVtZW50cyB0aGUg U0JTQSBHZW5lcmljIFVBUlQgd2hpY2ggaXMgYSBzdWJzZXQgb2YgQVJNClBMMDExIFVBUlQuCgpU aGUgU0JTQSBHZW5lcmljIFVBUlQgaXMgY292ZXJlZCBpbiBBcHBlbmRpeCBCIG9mCmh0dHBzOi8v c3RhdGljLmRvY3MuYXJtLmNvbS9kZW4wMDI5L2EvU2VydmVyX0Jhc2VfU3lzdGVtX0FyY2hpdGVj dHVyZV92M18xX0FSTV9ERU5fMDAyOUEucGRmCgpTaWduZWQtb2ZmLWJ5OiBCaHVwaW5kZXIgVGhh a3VyIDxiaHVwaW5kZXIudGhha3VyQGxpbmFyby5vcmc+CkFja2VkLWJ5OiBKdWxpZW4gR3JhbGwg PGp1bGllbi5ncmFsbEBhcm0uY29tPgpSZXZpZXdlZC1ieTogU3RlZmFubyBTdGFiZWxsaW5pIDxz c3RhYmVsbGluaUBrZXJuZWwub3JnPgotLS0KQ0M6IEFuZHJldyBDb29wZXIgPGFuZHJldy5jb29w ZXIzQGNpdHJpeC5jb20+CkNDOiBHZW9yZ2UgRHVubGFwIDxHZW9yZ2UuRHVubGFwQGV1LmNpdHJp eC5jb20+CkNDOiBJYW4gSmFja3NvbiA8aWFuLmphY2tzb25AZXUuY2l0cml4LmNvbT4KQ0M6IEph biBCZXVsaWNoIDxqYmV1bGljaEBzdXNlLmNvbT4KQ0M6IEtvbnJhZCBSemVzenV0ZWsgV2lsayA8 a29ucmFkLndpbGtAb3JhY2xlLmNvbT4KQ0M6IFN0ZWZhbm8gU3RhYmVsbGluaSA8c3N0YWJlbGxp bmlAa2VybmVsLm9yZz4KQ0M6IFRpbSBEZWVnYW4gPHRpbUB4ZW4ub3JnPgpDQzogV2VpIExpdSA8 d2VpLmxpdTJAY2l0cml4LmNvbT4KQ0M6IEp1bGllbiBHcmFsbCA8anVsaWVuLmdyYWxsQGFybS5j b20+CkNDOiBBbmRyZSBQcnp5d2FyYSA8YW5kcmUucHJ6eXdhcmFAYXJtLmNvbT4KCkNoYW5nZXMg c2luY2UgdjY6Ci0gUmVtb3ZlZCBmcmVlaW5nIG9mIG1taW9faGFuZGxlcnMgaW4gdnBsMDExX2Rl aW5pdCgpIGFzIHRoZSBoYW5kbGVycyBnZXQgZnJlZWQgd2hlbiBhIGRvbWFpbiBpcyAKICBkZXN0 cm95ZWQuIFNpbmNlIHRoaXMgaXMgYSBtaW5vciBjaGFuZ2UsIEkgaGF2ZSBpbmNsdWRlZCB0aGUg cmV2aWV3ZWQtYnkgYW5kIGFja2VkLWJ5IHRhZ3MuCgpDaGFuZ2VzIHNpbmNlIHY1OgotIHVzZSA8 YXNtLz4gaW5zdGVhZCBvZiA8YXNtLWFybS8+IGZvciBpbmNsdWRpbmcgYXJtIHNwZWNpZmljIGhl YWRlciBmaWxlcy4KLSByZW5hbWVkIHNoYWRvd191YXJ0cmlzIHRvIHNoYWRvd191YXJ0bWlzIHRv IGluZGljYXRlIHRoYXQgaXQgaXMgbWFza2VkIGludGVycnVwdCBzdGF0dXMuCi0gdXNlIHNtcF9t YigpIGluc3RlYWQgb2Ygc21wX3JtYigpIGluIHZwbDAxMV93cml0ZV9kYXRhKCkuCgpDaGFuZ2Vz IHNpbmNlIHY0OgotIFJlbmFtZWQgdnBsMDExX3VwZGF0ZSgpIHRvIHZwbDAxMV91cGRhdGVfaW50 ZXJydXB0X3N0YXR1cygpIGFuZCBhZGRlZCBsb2dpYyB0byBhdm9pZAogIHJhaXNpbmcgc3B1cmlv dXMgaW50ZXJydXB0cy4KLSBVc2VkIGJhcnJpZXIgaW5zdHJ1Y3Rpb25zIGNvcnJlY3RseSB3aGls ZSByZWFkaW5nL3dyaXRpbmcgZGF0YSB0byB0aGUgcmluZyBidWZmZXIuCi0gUHJvcGVyIGxvY2sg dGFrZW4gYmVmb3JlIHJlYWRpbmcgcmluZyBidWZmZXIgaW5kaWNlcy4KCkNoYW5nZXMgc2luY2Ug djM6Ci0gTW92ZWQgdGhlIGNhbGwgdG8gREVGSU5FX1hFTl9GTEVYX1JJTkcgZnJvbSB2cGwwMTEu aCB0byBwdWJsaWMvY29uc29sZS5oLiBUaGlzIG1hY3JvIGRlZmluZXMKICBzdGFuZGFyZCBmdW5j dGlvbnMgdG8gb3BlcmF0ZSBvbiB0aGUgcmluZyBidWZmZXIuCi0gTG9jayB0YWtlbiB3aGlsZSB1 cGRhdGluZyB0aGUgaW50ZXJydXB0IG1hc2sgYW5kIGNsZWFyIHJlZ2lzdGVycyBpbiBtbWlvX3dy aXRlLgotIFVzZSBnZm5fdCBpbnN0ZWFkIG9mIHhlbl9wZm5fdC4KLSB2Z2ljX2ZyZWVfdmlycSBj YWxsZWQgaWYgdGhlcmUgaXMgYW55IGVycm9yIGluIHZwbDAxMSBpbml0aWFsaXphdGlvbi4KLSBt bWlvIGhhbmRsZXJzIGZyZWVkIGlmIHRoZXJlIGlzIGFueSBlcnJvciBpbiB2cGwwMTEgaW5pdGlh bGl6YXRpb24uCi0gUmVtb3ZlZCB2cGwwMTEtPmluaXRpYWxpemVkIGZsYWcgdXNhZ2UgYXMgdGhl IHNhbWUgY2hlY2sgY291bGQgYmUgZG9uZSAKICB1c2luZyB2cGwwMTEtPnJpbmctcmVmLgotIFVz ZWQgcmV0dXJuIGluc3RlYWQgb2YgYnJlYWsgaW4gdGhlIHN3aXRjaCBoYW5kbGluZyBvZiBlbXVs YXRpb24gb2YgZGlmZmVyZW50IHBsMDExIHJlZ2lzdGVycy4KLSBSZW5hbWVkIHZwbDAxMV91cGRh dGVfc3BpKCkgdG8gdnBsMDExX3VwZGF0ZSgpLgoKQ2hhbmdlcyBzaW5jZSB2MjoKLSBVc2UgZ2Vu ZXJpYyB2cmVnX3JlZyogZm9yIHJlYWQvd3JpdGUgb2YgcmVnaXN0ZXJzIGVtdWxhdGluZyBwbDAx MS4KLSBVc2UgZ2VuZXJpYyByaW5nIGJ1ZmZlciBmdW5jdGlvbnMgZGVmaW5lZCB1c2luZyBERUZJ TkVfWEVOX0ZMRVhfUklORy4KLSBSZW5hbWVkIHRoZSBTUEkgaW5qZWN0aW9uIGZ1bmN0aW9uIHRv IHZwbDAxMV91cGRhdGVfc3BpKCkgdG8gcmVmbGVjdCBsZXZlbCAKICB0cmlnZ2VyZWQgbmF0dXJl IG9mIHBsMDExIGludGVycnVwdHMuCi0gVGhlIHBsMDExIHJlZ2lzdGVyIGFjY2VzcyBhZGRyZXNz IHNob3VsZCBhbHdheXMgYmUgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUKICBjb3JyZXNwb25kaW5n IHJlZ2lzdGVyIGFzIHBlciBzZWN0aW9uIEIgb2YgdGhlIFNCU0EgZG9jdW1lbnQuIEZvciB0aGlz IHJlYXNvbiwKICB0aGUgcmVnaXN0ZXIgcmFuZ2UgYWRkcmVzcyBhY2Nlc3MgaXMgbm90IGFsbG93 ZWQuCgpDaGFuZ2VzIHNpbmNlIHYxOgotIFJlbW92ZWQgdGhlIG9wdGltaXp0aW9uIHJlbGF0ZWQg dG8gc2VuZGlpbmcgZXZlbnRzIHRvIHhlbmNvbnNvbGUgCi0gVXNlIGxvY2FsIHZhcmlhYmxlcyBh cyByaW5nIGJ1ZmZlciBpbmRpY2VzIHdoaWxlIHVzaW5nIHRoZSByaW5nIGJ1ZmZlcgoKIHhlbi9h cmNoL2FybS9LY29uZmlnICAgICAgICAgICAgIHwgICA3ICsKIHhlbi9hcmNoL2FybS9NYWtlZmls ZSAgICAgICAgICAgIHwgICAxICsKIHhlbi9hcmNoL2FybS92cGwwMTEuYyAgICAgICAgICAgIHwg NDU0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogeGVuL2luY2x1ZGUv YXNtLWFybS9kb21haW4uaCAgICAgfCAgIDYgKwogeGVuL2luY2x1ZGUvYXNtLWFybS9wbDAxMS11 YXJ0LmggfCAgIDIgKwogeGVuL2luY2x1ZGUvYXNtLWFybS92cGwwMTEuaCAgICAgfCAgNzIgKysr KysrKwogeGVuL2luY2x1ZGUvcHVibGljL2FyY2gtYXJtLmggICAgfCAgIDYgKwogNyBmaWxlcyBj aGFuZ2VkLCA1NDggaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHhlbi9hcmNoL2Fy bS92cGwwMTEuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHhlbi9pbmNsdWRlL2FzbS1hcm0vdnBsMDEx LmgKCmRpZmYgLS1naXQgYS94ZW4vYXJjaC9hcm0vS2NvbmZpZyBiL3hlbi9hcmNoL2FybS9LY29u ZmlnCmluZGV4IGQ0NmI5OGMuLmY1ODAxOWQgMTAwNjQ0Ci0tLSBhL3hlbi9hcmNoL2FybS9LY29u ZmlnCisrKyBiL3hlbi9hcmNoL2FybS9LY29uZmlnCkBAIC01MCw2ICs1MCwxMyBAQCBjb25maWcg SEFTX0lUUwogICAgICAgICBwcm9tcHQgIkdJQ3YzIElUUyBNU0kgY29udHJvbGxlciBzdXBwb3J0 IiBpZiBFWFBFUlQgPSAieSIKICAgICAgICAgZGVwZW5kcyBvbiBIQVNfR0lDVjMKIAorY29uZmln IFNCU0FfVlVBUlRfQ09OU09MRQorCWJvb2wgIkVtdWxhdGVkIFNCU0EgVUFSVCBjb25zb2xlIHN1 cHBvcnQiCisJZGVmYXVsdCB5CisJLS0taGVscC0tLQorCSAgQWxsb3dzIGEgZ3Vlc3QgdG8gdXNl IFNCU0EgR2VuZXJpYyBVQVJUIGFzIGEgY29uc29sZS4gVGhlCisJICBTQlNBIEdlbmVyaWMgVUFS VCBpbXBsZW1lbnRzIGEgc3Vic2V0IG9mIEFSTSBQTDAxMSBVQVJULgorCiBlbmRtZW51CiAKIG1l bnUgIkFSTSBlcnJhdGEgd29ya2Fyb3VuZCB2aWEgdGhlIGFsdGVybmF0aXZlIGZyYW1ld29yayIK ZGlmZiAtLWdpdCBhL3hlbi9hcmNoL2FybS9NYWtlZmlsZSBiL3hlbi9hcmNoL2FybS9NYWtlZmls ZQppbmRleCA0OWUxZmIyLi5kOWM2ZWJmIDEwMDY0NAotLS0gYS94ZW4vYXJjaC9hcm0vTWFrZWZp bGUKKysrIGIveGVuL2FyY2gvYXJtL01ha2VmaWxlCkBAIC01MCw2ICs1MCw3IEBAIG9iai0kKENP TkZJR19IQVNfR0lDVjMpICs9IHZnaWMtdjMubwogb2JqLSQoQ09ORklHX0hBU19JVFMpICs9IHZn aWMtdjMtaXRzLm8KIG9iai15ICs9IHZtX2V2ZW50Lm8KIG9iai15ICs9IHZ0aW1lci5vCitvYmot JChDT05GSUdfU0JTQV9WVUFSVF9DT05TT0xFKSArPSB2cGwwMTEubwogb2JqLXkgKz0gdnBzY2ku bwogb2JqLXkgKz0gdnVhcnQubwogCmRpZmYgLS1naXQgYS94ZW4vYXJjaC9hcm0vdnBsMDExLmMg Yi94ZW4vYXJjaC9hcm0vdnBsMDExLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MC4uNTZkOWNiZQotLS0gL2Rldi9udWxsCisrKyBiL3hlbi9hcmNoL2FybS92cGwwMTEuYwpAQCAt MCwwICsxLDQ1NCBAQAorLyoKKyAqIGFyY2gvYXJtL3ZwbDAxMS5jCisgKgorICogVmlydHVhbCBQ TDAxMSBVQVJUCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQg Y29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9u IDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAq IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1 bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICog bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3Jh bTsgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNp bmNsdWRlIDx4ZW4vZXJybm8uaD4KKyNpbmNsdWRlIDx4ZW4vZXZlbnQuaD4KKyNpbmNsdWRlIDx4 ZW4vZ3Vlc3RfYWNjZXNzLmg+CisjaW5jbHVkZSA8eGVuL2luaXQuaD4KKyNpbmNsdWRlIDx4ZW4v bGliLmg+CisjaW5jbHVkZSA8eGVuL21tLmg+CisjaW5jbHVkZSA8eGVuL3NjaGVkLmg+CisjaW5j bHVkZSA8cHVibGljL2RvbWN0bC5oPgorI2luY2x1ZGUgPHB1YmxpYy9pby9jb25zb2xlLmg+Cisj aW5jbHVkZSA8YXNtL3BsMDExLXVhcnQuaD4KKyNpbmNsdWRlIDxhc20vdmdpYy1lbXVsLmg+Cisj aW5jbHVkZSA8YXNtL3ZwbDAxMS5oPgorCisvKgorICogU2luY2UgcGwwMTEgcmVnaXN0ZXJzIGFy ZSAzMi1iaXQgcmVnaXN0ZXJzLCBhbGwgcmVnaXN0ZXJzCisgKiBhcmUgaGFuZGxlZCBzaW1pbGFy bHkgYWxsb3dpbmcgOC1iaXQsIDE2LWJpdCBhbmQgMzItYml0CisgKiBhY2Nlc3NlcyBleGNlcHQg NjQtYml0IGFjY2Vzcy4KKyAqLworc3RhdGljIGJvb2wgdnBsMDExX3JlZzMyX2NoZWNrX2FjY2Vz cyhzdHJ1Y3QgaHNyX2RhYnQgZGFidCkKK3sKKyAgICByZXR1cm4gKGRhYnQuc2l6ZSAhPSBEQUJU X0RPVUJMRV9XT1JEKTsKK30KKworc3RhdGljIHZvaWQgdnBsMDExX3VwZGF0ZV9pbnRlcnJ1cHRf c3RhdHVzKHN0cnVjdCBkb21haW4gKmQpCit7CisgICAgc3RydWN0IHZwbDAxMSAqdnBsMDExID0g JmQtPmFyY2gudnBsMDExOworICAgIHVpbnQzMl90IHVhcnRtaXMgPSB2cGwwMTEtPnVhcnRyaXMg JiB2cGwwMTEtPnVhcnRpbXNjOworCisgICAgLyoKKyAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIGV4 cGVjdGVkIHRvIGJlIGNhbGxlZCB3aXRoIHRoZSBsb2NrIHRha2VuLgorICAgICAqLworICAgIEFT U0VSVChzcGluX2lzX2xvY2tlZCgmdnBsMDExLT5sb2NrKSk7CisKKyAgICAvKgorICAgICAqIFRP RE86IFBMMDExIGludGVycnVwdHMgYXJlIGxldmVsIHRyaWdnZXJlZCB3aGljaCBtZWFucworICAg ICAqIHRoYXQgaW50ZXJydXB0IG5lZWRzIHRvIGJlIHNldC9jbGVhciBpbnN0ZWFkIG9mIGJlaW5n CisgICAgICogaW5qZWN0ZWQuIEhvd2V2ZXIsIGN1cnJlbnRseSB2R0lDIGRvZXMgbm90IGhhbmRs ZSBsZXZlbAorICAgICAqIHRyaWdnZXJlZCBpbnRlcnJ1cHRzIHByb3Blcmx5LiBUaGlzIGZ1bmN0 aW9uIG5lZWRzIHRvIGJlCisgICAgICogcmV2aXNpdGVkIG9uY2UgdkdJQyBzdGFydHMgaGFuZGxp bmcgbGV2ZWwgdHJpZ2dlcmVkCisgICAgICogaW50ZXJydXB0cy4KKyAgICAgKi8KKworICAgIC8q CisgICAgICogUmFpc2UgYW4gaW50ZXJydXB0IG9ubHkgaWYgYW55IGFkZGl0aW9uYWwgaW50ZXJy dXB0CisgICAgICogc3RhdHVzIGJpdCBoYXMgYmVlbiBzZXQgc2luY2UgdGhlIGxhc3QgdGltZS4K KyAgICAgKi8KKyAgICBpZiAoIHVhcnRtaXMgJiB+dnBsMDExLT5zaGFkb3dfdWFydG1pcyApCisg ICAgICAgIHZnaWNfdmNwdV9pbmplY3Rfc3BpKGQsIEdVRVNUX1ZQTDAxMV9TUEkpOworCisgICAg dnBsMDExLT5zaGFkb3dfdWFydG1pcyA9IHVhcnRtaXM7Cit9CisKK3N0YXRpYyB1aW50OF90IHZw bDAxMV9yZWFkX2RhdGEoc3RydWN0IGRvbWFpbiAqZCkKK3sKKyAgICB1bnNpZ25lZCBsb25nIGZs YWdzOworICAgIHVpbnQ4X3QgZGF0YSA9IDA7CisgICAgc3RydWN0IHZwbDAxMSAqdnBsMDExID0g JmQtPmFyY2gudnBsMDExOworICAgIHN0cnVjdCB4ZW5jb25zX2ludGVyZmFjZSAqaW50ZiA9IHZw bDAxMS0+cmluZ19idWY7CisgICAgWEVOQ09OU19SSU5HX0lEWCBpbl9jb25zLCBpbl9wcm9kOwor CisgICAgVlBMMDExX0xPQ0soZCwgZmxhZ3MpOworCisgICAgaW5fY29ucyA9IGludGYtPmluX2Nv bnM7CisgICAgaW5fcHJvZCA9IGludGYtPmluX3Byb2Q7CisKKyAgICBzbXBfcm1iKCk7CisKKyAg ICAvKgorICAgICAqIEl0IGlzIGV4cGVjdGVkIHRoYXQgdGhlcmUgd2lsbCBiZSBkYXRhIGluIHRo ZSByaW5nIGJ1ZmZlciB3aGVuIHRoaXMKKyAgICAgKiBmdW5jdGlvbiBpcyBjYWxsZWQgc2luY2Ug dGhlIGd1ZXN0IGlzIGV4cGVjdGVkIHRvIHJlYWQgdGhlIGRhdGEgcmVnaXN0ZXIKKyAgICAgKiBv bmx5IGlmIHRoZSBUWEZFIGZsYWcgaXMgbm90IHNldC4KKyAgICAgKiBJZiB0aGUgZ3Vlc3Qgc3Rp bGwgZG9lcyByZWFkIHdoZW4gVFhGRSBiaXQgaXMgc2V0IHRoZW4gMCB3aWxsIGJlIHJldHVybmVk LgorICAgICAqLworICAgIGlmICggeGVuY29uc19xdWV1ZWQoaW5fcHJvZCwgaW5fY29ucywgc2l6 ZW9mKGludGYtPmluKSkgPiAwICkKKyAgICB7CisgICAgICAgIGRhdGEgPSBpbnRmLT5pblt4ZW5j b25zX21hc2soaW5fY29ucywgc2l6ZW9mKGludGYtPmluKSldOworICAgICAgICBpbl9jb25zICs9 IDE7CisgICAgICAgIHNtcF9tYigpOworICAgICAgICBpbnRmLT5pbl9jb25zID0gaW5fY29uczsK KyAgICB9CisgICAgZWxzZQorICAgICAgICBncHJpbnRrKFhFTkxPR19FUlIsICJ2cGwwMTE6IFVu ZXhwZWN0ZWQgSU4gcmluZyBidWZmZXIgZW1wdHlcbiIpOworCisgICAgaWYgKCB4ZW5jb25zX3F1 ZXVlZChpbl9wcm9kLCBpbl9jb25zLCBzaXplb2YoaW50Zi0+aW4pKSA9PSAwICkKKyAgICB7Cisg ICAgICAgIHZwbDAxMS0+dWFydGZyIHw9IFJYRkU7CisgICAgICAgIHZwbDAxMS0+dWFydHJpcyAm PSB+UlhJOworICAgIH0KKworICAgIHZwbDAxMS0+dWFydGZyICY9IH5SWEZGOworCisgICAgdnBs MDExX3VwZGF0ZV9pbnRlcnJ1cHRfc3RhdHVzKGQpOworCisgICAgVlBMMDExX1VOTE9DSyhkLCBm bGFncyk7CisKKyAgICAvKgorICAgICAqIFNlbmQgYW4gZXZlbnQgdG8gY29uc29sZSBiYWNrZW5k IHRvIGluZGljYXRlIHRoYXQgZGF0YSBoYXMgYmVlbgorICAgICAqIHJlYWQgZnJvbSB0aGUgSU4g cmluZyBidWZmZXIuCisgICAgICovCisgICAgbm90aWZ5X3ZpYV94ZW5fZXZlbnRfY2hhbm5lbChk LCB2cGwwMTEtPmV2dGNobik7CisKKyAgICByZXR1cm4gZGF0YTsKK30KKworc3RhdGljIHZvaWQg dnBsMDExX3dyaXRlX2RhdGEoc3RydWN0IGRvbWFpbiAqZCwgdWludDhfdCBkYXRhKQoreworICAg IHVuc2lnbmVkIGxvbmcgZmxhZ3M7CisgICAgc3RydWN0IHZwbDAxMSAqdnBsMDExID0gJmQtPmFy Y2gudnBsMDExOworICAgIHN0cnVjdCB4ZW5jb25zX2ludGVyZmFjZSAqaW50ZiA9IHZwbDAxMS0+ cmluZ19idWY7CisgICAgWEVOQ09OU19SSU5HX0lEWCBvdXRfY29ucywgb3V0X3Byb2Q7CisKKyAg ICBWUEwwMTFfTE9DSyhkLCBmbGFncyk7CisKKyAgICBvdXRfY29ucyA9IGludGYtPm91dF9jb25z OworICAgIG91dF9wcm9kID0gaW50Zi0+b3V0X3Byb2Q7CisKKyAgICBzbXBfbWIoKTsKKworICAg IC8qCisgICAgICogSXQgaXMgZXhwZWN0ZWQgdGhhdCB0aGUgcmluZyBpcyBub3QgZnVsbCB3aGVu IHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkCisgICAgICogYXMgdGhlIGd1ZXN0IGlzIGV4cGVjdGVk IHRvIHdyaXRlIHRvIHRoZSBkYXRhIHJlZ2lzdGVyIG9ubHkgd2hlbiB0aGUKKyAgICAgKiBUWEZG IGZsYWcgaXMgbm90IHNldC4KKyAgICAgKiBJbiBjYXNlIHRoZSBndWVzdCBkb2VzIHdyaXRlIGV2 ZW4gd2hlbiB0aGUgVFhGRiBmbGFnIGlzIHNldCB0aGVuIHRoZQorICAgICAqIGRhdGEgd2lsbCBi ZSBzaWxlbnRseSBkcm9wcGVkLgorICAgICAqLworICAgIGlmICggeGVuY29uc19xdWV1ZWQob3V0 X3Byb2QsIG91dF9jb25zLCBzaXplb2YoaW50Zi0+b3V0KSkgIT0KKyAgICAgICAgIHNpemVvZiAo aW50Zi0+b3V0KSApCisgICAgeworICAgICAgICBpbnRmLT5vdXRbeGVuY29uc19tYXNrKG91dF9w cm9kLCBzaXplb2YoaW50Zi0+b3V0KSldID0gZGF0YTsKKyAgICAgICAgb3V0X3Byb2QgKz0gMTsK KyAgICAgICAgc21wX3dtYigpOworICAgICAgICBpbnRmLT5vdXRfcHJvZCA9IG91dF9wcm9kOwor ICAgIH0KKyAgICBlbHNlCisgICAgICAgIGdwcmludGsoWEVOTE9HX0VSUiwgInZwbDAxMTogVW5l eHBlY3RlZCBPVVQgcmluZyBidWZmZXIgZnVsbFxuIik7CisKKyAgICBpZiAoIHhlbmNvbnNfcXVl dWVkKG91dF9wcm9kLCBvdXRfY29ucywgc2l6ZW9mKGludGYtPm91dCkpID09CisgICAgICAgICBz aXplb2YgKGludGYtPm91dCkgKQorICAgIHsKKyAgICAgICAgdnBsMDExLT51YXJ0ZnIgfD0gVFhG RjsKKyAgICAgICAgdnBsMDExLT51YXJ0cmlzICY9IH5UWEk7CisgICAgfQorCisgICAgdnBsMDEx LT51YXJ0ZnIgfD0gQlVTWTsKKworICAgIHZwbDAxMS0+dWFydGZyICY9IH5UWEZFOworCisgICAg dnBsMDExX3VwZGF0ZV9pbnRlcnJ1cHRfc3RhdHVzKGQpOworCisgICAgVlBMMDExX1VOTE9DSyhk LCBmbGFncyk7CisKKyAgICAvKgorICAgICAqIFNlbmQgYW4gZXZlbnQgdG8gY29uc29sZSBiYWNr ZW5kIHRvIGluZGljYXRlIHRoYXQgdGhlcmUgaXMKKyAgICAgKiBkYXRhIGluIHRoZSBPVVQgcmlu ZyBidWZmZXIuCisgICAgICovCisgICAgbm90aWZ5X3ZpYV94ZW5fZXZlbnRfY2hhbm5lbChkLCB2 cGwwMTEtPmV2dGNobik7Cit9CisKK3N0YXRpYyBpbnQgdnBsMDExX21taW9fcmVhZChzdHJ1Y3Qg dmNwdSAqdiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtbWlvX2luZm9fdCAqaW5mbywK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3Rlcl90ICpyLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHZvaWQgKnByaXYpCit7CisgICAgc3RydWN0IGhzcl9kYWJ0IGRhYnQg PSBpbmZvLT5kYWJ0OworICAgIHVpbnQzMl90IHZwbDAxMV9yZWcgPSAodWludDMyX3QpKGluZm8t PmdwYSAtIEdVRVNUX1BMMDExX0JBU0UpOworICAgIHN0cnVjdCB2cGwwMTEgKnZwbDAxMSA9ICZ2 LT5kb21haW4tPmFyY2gudnBsMDExOworICAgIHN0cnVjdCBkb21haW4gKmQgPSB2LT5kb21haW47 CisgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKKworICAgIHN3aXRjaCAoIHZwbDAxMV9yZWcgKQor ICAgIHsKKyAgICBjYXNlIERSOgorICAgICAgICBpZiAoICF2cGwwMTFfcmVnMzJfY2hlY2tfYWNj ZXNzKGRhYnQpICkgZ290byBiYWRfd2lkdGg7CisKKyAgICAgICAgKnIgPSB2cmVnX3JlZzMyX2V4 dHJhY3QodnBsMDExX3JlYWRfZGF0YShkKSwgaW5mbyk7CisgICAgICAgIHJldHVybiAxOworCisg ICAgY2FzZSBSU1I6CisgICAgICAgIGlmICggIXZwbDAxMV9yZWczMl9jaGVja19hY2Nlc3MoZGFi dCkgKSBnb3RvIGJhZF93aWR0aDsKKworICAgICAgICAvKiBJdCBhbHdheXMgcmV0dXJucyAwIGFz IHRoZXJlIGFyZSBubyBwaHlzaWNhbCBlcnJvcnMuICovCisgICAgICAgICpyID0gMDsKKyAgICAg ICAgcmV0dXJuIDE7CisKKyAgICBjYXNlIEZSOgorICAgICAgICBpZiAoICF2cGwwMTFfcmVnMzJf Y2hlY2tfYWNjZXNzKGRhYnQpICkgZ290byBiYWRfd2lkdGg7CisKKyAgICAgICAgVlBMMDExX0xP Q0soZCwgZmxhZ3MpOworICAgICAgICAqciA9IHZyZWdfcmVnMzJfZXh0cmFjdCh2cGwwMTEtPnVh cnRmciwgaW5mbyk7CisgICAgICAgIFZQTDAxMV9VTkxPQ0soZCwgZmxhZ3MpOworICAgICAgICBy ZXR1cm4gMTsKKworICAgIGNhc2UgUklTOgorICAgICAgICBpZiAoICF2cGwwMTFfcmVnMzJfY2hl Y2tfYWNjZXNzKGRhYnQpICkgZ290byBiYWRfd2lkdGg7CisKKyAgICAgICAgVlBMMDExX0xPQ0so ZCwgZmxhZ3MpOworICAgICAgICAqciA9IHZyZWdfcmVnMzJfZXh0cmFjdCh2cGwwMTEtPnVhcnRy aXMsIGluZm8pOworICAgICAgICBWUEwwMTFfVU5MT0NLKGQsIGZsYWdzKTsKKyAgICAgICAgcmV0 dXJuIDE7CisKKyAgICBjYXNlIE1JUzoKKyAgICAgICAgaWYgKCAhdnBsMDExX3JlZzMyX2NoZWNr X2FjY2VzcyhkYWJ0KSApIGdvdG8gYmFkX3dpZHRoOworCisgICAgICAgIFZQTDAxMV9MT0NLKGQs IGZsYWdzKTsKKyAgICAgICAgKnIgPSB2cmVnX3JlZzMyX2V4dHJhY3QodnBsMDExLT51YXJ0cmlz ICYgdnBsMDExLT51YXJ0aW1zYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5m byk7CisgICAgICAgIFZQTDAxMV9VTkxPQ0soZCwgZmxhZ3MpOworICAgICAgICByZXR1cm4gMTsK KworICAgIGNhc2UgSU1TQzoKKyAgICAgICAgaWYgKCAhdnBsMDExX3JlZzMyX2NoZWNrX2FjY2Vz cyhkYWJ0KSApIGdvdG8gYmFkX3dpZHRoOworCisgICAgICAgIFZQTDAxMV9MT0NLKGQsIGZsYWdz KTsKKyAgICAgICAgKnIgPSB2cmVnX3JlZzMyX2V4dHJhY3QodnBsMDExLT51YXJ0aW1zYywgaW5m byk7CisgICAgICAgIFZQTDAxMV9VTkxPQ0soZCwgZmxhZ3MpOworICAgICAgICByZXR1cm4gMTsK KworICAgIGNhc2UgSUNSOgorICAgICAgICBpZiAoICF2cGwwMTFfcmVnMzJfY2hlY2tfYWNjZXNz KGRhYnQpICkgZ290byBiYWRfd2lkdGg7CisKKyAgICAgICAgLyogT25seSB3cml0ZSBpcyB2YWxp ZC4gKi8KKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBncHJpbnRr KFhFTkxPR19FUlIsICJ2cGwwMTE6IHVuaGFuZGxlZCByZWFkIHIlZCBvZmZzZXQgJSMwOHhcbiIs CisgICAgICAgICAgICAgICAgZGFidC5yZWcsIHZwbDAxMV9yZWcpOworICAgICAgICByZXR1cm4g MDsKKyAgICB9CisKKyAgICByZXR1cm4gMTsKKworYmFkX3dpZHRoOgorICAgIGdwcmludGsoWEVO TE9HX0VSUiwgInZwbDAxMTogYmFkIHJlYWQgd2lkdGggJWQgciVkIG9mZnNldCAlIzA4eFxuIiwK KyAgICAgICAgICAgIGRhYnQuc2l6ZSwgZGFidC5yZWcsIHZwbDAxMV9yZWcpOworICAgIGRvbWFp bl9jcmFzaF9zeW5jaHJvbm91cygpOworICAgIHJldHVybiAwOworCit9CisKK3N0YXRpYyBpbnQg dnBsMDExX21taW9fd3JpdGUoc3RydWN0IHZjcHUgKnYsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG1taW9faW5mb190ICppbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy ZWdpc3Rlcl90IHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnByaXYpCit7 CisgICAgc3RydWN0IGhzcl9kYWJ0IGRhYnQgPSBpbmZvLT5kYWJ0OworICAgIHVpbnQzMl90IHZw bDAxMV9yZWcgPSAodWludDMyX3QpKGluZm8tPmdwYSAtIEdVRVNUX1BMMDExX0JBU0UpOworICAg IHN0cnVjdCB2cGwwMTEgKnZwbDAxMSA9ICZ2LT5kb21haW4tPmFyY2gudnBsMDExOworICAgIHN0 cnVjdCBkb21haW4gKmQgPSB2LT5kb21haW47CisgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKKwor ICAgIHN3aXRjaCAoIHZwbDAxMV9yZWcgKQorICAgIHsKKyAgICBjYXNlIERSOgorICAgIHsKKyAg ICAgICAgdWludDMyX3QgZGF0YSA9IDA7CisKKyAgICAgICAgaWYgKCAhdnBsMDExX3JlZzMyX2No ZWNrX2FjY2VzcyhkYWJ0KSApIGdvdG8gYmFkX3dpZHRoOworCisgICAgICAgIHZyZWdfcmVnMzJf dXBkYXRlKCZkYXRhLCByLCBpbmZvKTsKKyAgICAgICAgZGF0YSAmPSAweEZGOworICAgICAgICB2 cGwwMTFfd3JpdGVfZGF0YSh2LT5kb21haW4sIGRhdGEpOworICAgICAgICByZXR1cm4gMTsKKyAg ICB9CisKKyAgICBjYXNlIFJTUjogLyogTm90aGluZyB0byBjbGVhci4gKi8KKyAgICAgICAgaWYg KCAhdnBsMDExX3JlZzMyX2NoZWNrX2FjY2VzcyhkYWJ0KSApIGdvdG8gYmFkX3dpZHRoOworCisg ICAgICAgIHJldHVybiAxOworCisgICAgY2FzZSBGUjoKKyAgICBjYXNlIFJJUzoKKyAgICBjYXNl IE1JUzoKKyAgICAgICAgZ290byB3cml0ZV9pZ25vcmU7CisKKyAgICBjYXNlIElNU0M6CisgICAg ICAgIGlmICggIXZwbDAxMV9yZWczMl9jaGVja19hY2Nlc3MoZGFidCkgKSBnb3RvIGJhZF93aWR0 aDsKKworICAgICAgICBWUEwwMTFfTE9DSyhkLCBmbGFncyk7CisgICAgICAgIHZyZWdfcmVnMzJf dXBkYXRlKCZ2cGwwMTEtPnVhcnRpbXNjLCByLCBpbmZvKTsKKyAgICAgICAgdnBsMDExX3VwZGF0 ZV9pbnRlcnJ1cHRfc3RhdHVzKHYtPmRvbWFpbik7CisgICAgICAgIFZQTDAxMV9VTkxPQ0soZCwg ZmxhZ3MpOworICAgICAgICByZXR1cm4gMTsKKworICAgIGNhc2UgSUNSOgorICAgICAgICBpZiAo ICF2cGwwMTFfcmVnMzJfY2hlY2tfYWNjZXNzKGRhYnQpICkgZ290byBiYWRfd2lkdGg7CisKKyAg ICAgICAgVlBMMDExX0xPQ0soZCwgZmxhZ3MpOworICAgICAgICB2cmVnX3JlZzMyX2NsZWFyYml0 cygmdnBsMDExLT51YXJ0cmlzLCByLCBpbmZvKTsKKyAgICAgICAgdnBsMDExX3VwZGF0ZV9pbnRl cnJ1cHRfc3RhdHVzKGQpOworICAgICAgICBWUEwwMTFfVU5MT0NLKGQsIGZsYWdzKTsKKyAgICAg ICAgcmV0dXJuIDE7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBncHJpbnRrKFhFTkxPR19FUlIs ICJ2cGwwMTE6IHVuaGFuZGxlZCB3cml0ZSByJWQgb2Zmc2V0ICUjMDh4XG4iLAorICAgICAgICAg ICAgICAgIGRhYnQucmVnLCB2cGwwMTFfcmVnKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQor Cit3cml0ZV9pZ25vcmU6CisgICAgcmV0dXJuIDE7CisKK2JhZF93aWR0aDoKKyAgICBncHJpbnRr KFhFTkxPR19FUlIsICJ2cGwwMTE6IGJhZCB3cml0ZSB3aWR0aCAlZCByJWQgb2Zmc2V0ICUjMDh4 XG4iLAorICAgICAgICAgICAgZGFidC5zaXplLCBkYWJ0LnJlZywgdnBsMDExX3JlZyk7CisgICAg ZG9tYWluX2NyYXNoX3N5bmNocm9ub3VzKCk7CisgICAgcmV0dXJuIDA7CisKK30KKworc3RhdGlj IGNvbnN0IHN0cnVjdCBtbWlvX2hhbmRsZXJfb3BzIHZwbDAxMV9tbWlvX2hhbmRsZXIgPSB7Cisg ICAgLnJlYWQgPSB2cGwwMTFfbW1pb19yZWFkLAorICAgIC53cml0ZSA9IHZwbDAxMV9tbWlvX3dy aXRlLAorfTsKKworc3RhdGljIHZvaWQgdnBsMDExX2RhdGFfYXZhaWwoc3RydWN0IGRvbWFpbiAq ZCkKK3sKKyAgICB1bnNpZ25lZCBsb25nIGZsYWdzOworICAgIHN0cnVjdCB2cGwwMTEgKnZwbDAx MSA9ICZkLT5hcmNoLnZwbDAxMTsKKyAgICBzdHJ1Y3QgeGVuY29uc19pbnRlcmZhY2UgKmludGYg PSB2cGwwMTEtPnJpbmdfYnVmOworICAgIFhFTkNPTlNfUklOR19JRFggaW5fY29ucywgaW5fcHJv ZCwgb3V0X2NvbnMsIG91dF9wcm9kOworICAgIFhFTkNPTlNfUklOR19JRFggaW5fcmluZ19xc2l6 ZSwgb3V0X3JpbmdfcXNpemU7CisKKyAgICBWUEwwMTFfTE9DSyhkLCBmbGFncyk7CisKKyAgICBp bl9jb25zID0gaW50Zi0+aW5fY29uczsKKyAgICBpbl9wcm9kID0gaW50Zi0+aW5fcHJvZDsKKyAg ICBvdXRfY29ucyA9IGludGYtPm91dF9jb25zOworICAgIG91dF9wcm9kID0gaW50Zi0+b3V0X3By b2Q7CisKKyAgICBzbXBfcm1iKCk7CisKKyAgICBpbl9yaW5nX3FzaXplID0geGVuY29uc19xdWV1 ZWQoaW5fcHJvZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5fY29ucywK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGludGYtPmluKSk7CisK KyAgICBvdXRfcmluZ19xc2l6ZSA9IHhlbmNvbnNfcXVldWVkKG91dF9wcm9kLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0X2NvbnMsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzaXplb2YoaW50Zi0+b3V0KSk7CisKKyAgICAvKiBVcGRhdGUgdGhl IHVhcnQgcnggc3RhdGUgaWYgdGhlIGJ1ZmZlciBpcyBub3QgZW1wdHkuICovCisgICAgaWYgKCBp bl9yaW5nX3FzaXplICE9IDAgKQorICAgIHsKKyAgICAgICAgdnBsMDExLT51YXJ0ZnIgJj0gflJY RkU7CisgICAgICAgIGlmICggaW5fcmluZ19xc2l6ZSA9PSBzaXplb2YoaW50Zi0+aW4pICkKKyAg ICAgICAgICAgIHZwbDAxMS0+dWFydGZyIHw9IFJYRkY7CisgICAgICAgIHZwbDAxMS0+dWFydHJp cyB8PSBSWEk7CisgICAgfQorCisgICAgLyogVXBkYXRlIHRoZSB1YXJ0IHR4IHN0YXRlIGlmIHRo ZSBidWZmZXIgaXMgbm90IGZ1bGwuICovCisgICAgaWYgKCBvdXRfcmluZ19xc2l6ZSAhPSBzaXpl b2YoaW50Zi0+b3V0KSApCisgICAgeworICAgICAgICB2cGwwMTEtPnVhcnRmciAmPSB+VFhGRjsK KyAgICAgICAgdnBsMDExLT51YXJ0cmlzIHw9IFRYSTsKKyAgICAgICAgaWYgKCBvdXRfcmluZ19x c2l6ZSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgdnBsMDExLT51YXJ0ZnIgJj0gfkJV U1k7CisgICAgICAgICAgICB2cGwwMTEtPnVhcnRmciB8PSBUWEZFOworICAgICAgICB9CisgICAg fQorCisgICAgdnBsMDExX3VwZGF0ZV9pbnRlcnJ1cHRfc3RhdHVzKGQpOworCisgICAgVlBMMDEx X1VOTE9DSyhkLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIHZwbDAxMV9ub3RpZmljYXRpb24o c3RydWN0IHZjcHUgKnYsIHVuc2lnbmVkIGludCBwb3J0KQoreworICAgIHZwbDAxMV9kYXRhX2F2 YWlsKHYtPmRvbWFpbik7Cit9CisKK2ludCBkb21haW5fdnBsMDExX2luaXQoc3RydWN0IGRvbWFp biAqZCwgc3RydWN0IHZwbDAxMV9pbml0X2luZm8gKmluZm8pCit7CisgICAgaW50IHJjOworICAg IHN0cnVjdCB2cGwwMTEgKnZwbDAxMSA9ICZkLT5hcmNoLnZwbDAxMTsKKworICAgIGlmICggdnBs MDExLT5yaW5nX2J1ZiApCisgICAgICAgIHJldHVybiAtRUlOVkFMOworCisgICAgLyogTWFwIHRo ZSBndWVzdCBQRk4gdG8gWGVuIGFkZHJlc3Mgc3BhY2UuICovCisgICAgcmMgPSAgcHJlcGFyZV9y aW5nX2Zvcl9oZWxwZXIoZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZm5f eChpbmZvLT5nZm4pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ2cGwwMTEt PnJpbmdfcGFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdnBsMDExLT5y aW5nX2J1Zik7CisgICAgaWYgKCByYyA8IDAgKQorICAgICAgICBnb3RvIG91dDsKKworICAgIHJj ID0gdmdpY19yZXNlcnZlX3ZpcnEoZCwgR1VFU1RfVlBMMDExX1NQSSk7CisgICAgaWYgKCAhcmMg KQorICAgIHsKKyAgICAgICAgcmMgPSAtRUlOVkFMOworICAgICAgICBnb3RvIG91dDE7CisgICAg fQorCisgICAgcmMgPSBhbGxvY191bmJvdW5kX3hlbl9ldmVudF9jaGFubmVsKGQsIDAsIGluZm8t PmNvbnNvbGVfZG9taWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHZwbDAxMV9ub3RpZmljYXRpb24pOworICAgIGlmICggcmMgPCAwICkKKyAgICAgICAgZ290byBv dXQyOworCisgICAgdnBsMDExLT5ldnRjaG4gPSBpbmZvLT5ldnRjaG4gPSByYzsKKworICAgIHNw aW5fbG9ja19pbml0KCZ2cGwwMTEtPmxvY2spOworCisgICAgcmVnaXN0ZXJfbW1pb19oYW5kbGVy KGQsICZ2cGwwMTFfbW1pb19oYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBHVUVT VF9QTDAxMV9CQVNFLCBHVUVTVF9QTDAxMV9TSVpFLCBOVUxMKTsKKworICAgIHJldHVybiAwOwor CitvdXQyOgorICAgIHZnaWNfZnJlZV92aXJxKGQsIEdVRVNUX1ZQTDAxMV9TUEkpOworCitvdXQx OgorICAgIGRlc3Ryb3lfcmluZ19mb3JfaGVscGVyKCZ2cGwwMTEtPnJpbmdfYnVmLCB2cGwwMTEt PnJpbmdfcGFnZSk7CisKK291dDoKKyAgICByZXR1cm4gcmM7Cit9CisKK3ZvaWQgZG9tYWluX3Zw bDAxMV9kZWluaXQoc3RydWN0IGRvbWFpbiAqZCkKK3sKKyAgICBzdHJ1Y3QgdnBsMDExICp2cGww MTEgPSAmZC0+YXJjaC52cGwwMTE7CisKKyAgICBpZiAoICF2cGwwMTEtPnJpbmdfYnVmICkKKyAg ICAgICAgcmV0dXJuOworCisgICAgZnJlZV94ZW5fZXZlbnRfY2hhbm5lbChkLCB2cGwwMTEtPmV2 dGNobik7CisgICAgZGVzdHJveV9yaW5nX2Zvcl9oZWxwZXIoJnZwbDAxMS0+cmluZ19idWYsIHZw bDAxMS0+cmluZ19wYWdlKTsKK30KKworLyoKKyAqIExvY2FsIHZhcmlhYmxlczoKKyAqIG1vZGU6 IEMKKyAqIGMtZmlsZS1zdHlsZTogIkJTRCIKKyAqIGMtYmFzaWMtb2Zmc2V0OiA0CisgKiBpbmRl bnQtdGFicy1tb2RlOiBuaWwKKyAqIEVuZDoKKyAqLwpkaWZmIC0tZ2l0IGEveGVuL2luY2x1ZGUv YXNtLWFybS9kb21haW4uaCBiL3hlbi9pbmNsdWRlL2FzbS1hcm0vZG9tYWluLmgKaW5kZXggOGRm YzFkMS4uMWExMTQ1ZCAxMDA2NDQKLS0tIGEveGVuL2luY2x1ZGUvYXNtLWFybS9kb21haW4uaAor KysgYi94ZW4vaW5jbHVkZS9hc20tYXJtL2RvbWFpbi5oCkBAIC0xMSw2ICsxMSw3IEBACiAjaW5j bHVkZSA8cHVibGljL2h2bS9wYXJhbXMuaD4KICNpbmNsdWRlIDx4ZW4vc2VyaWFsLmg+CiAjaW5j bHVkZSA8eGVuL3JidHJlZS5oPgorI2luY2x1ZGUgPGFzbS1hcm0vdnBsMDExLmg+CiAKIHN0cnVj dCBodm1fZG9tYWluCiB7CkBAIC0xNDUsNiArMTQ2LDExIEBAIHN0cnVjdCBhcmNoX2RvbWFpbgog ICAgIHN0cnVjdCB7CiAgICAgICAgIHVpbnQ4X3QgcHJpdmlsZWdlZF9jYWxsX2VuYWJsZWQgOiAx OwogICAgIH0gbW9uaXRvcjsKKworI2lmZGVmIENPTkZJR19TQlNBX1ZVQVJUX0NPTlNPTEUKKyAg ICBzdHJ1Y3QgdnBsMDExIHZwbDAxMTsKKyNlbmRpZgorCiB9ICBfX2NhY2hlbGluZV9hbGlnbmVk OwogCiBzdHJ1Y3QgYXJjaF92Y3B1CmRpZmYgLS1naXQgYS94ZW4vaW5jbHVkZS9hc20tYXJtL3Bs MDExLXVhcnQuaCBiL3hlbi9pbmNsdWRlL2FzbS1hcm0vcGwwMTEtdWFydC5oCmluZGV4IDEyM2Y0 NzcuLjU3ZTllYzcgMTAwNjQ0Ci0tLSBhL3hlbi9pbmNsdWRlL2FzbS1hcm0vcGwwMTEtdWFydC5o CisrKyBiL3hlbi9pbmNsdWRlL2FzbS1hcm0vcGwwMTEtdWFydC5oCkBAIC00OSw2ICs0OSw4IEBA CiAvKiBGUiBiaXRzICovCiAjZGVmaW5lIFRYRkUgICAoMTw8NykgLyogVFggRklGTyBlbXB0eSAq LwogI2RlZmluZSBSWEZFICAgKDE8PDQpIC8qIFJYIEZJRk8gZW1wdHkgKi8KKyNkZWZpbmUgVFhG RiAgICgxPDw1KSAvKiBUWCBGSUZPIGZ1bGwgKi8KKyNkZWZpbmUgUlhGRiAgICgxPDw2KSAvKiBS WCBGSUZPIGZ1bGwgKi8KICNkZWZpbmUgQlVTWSAgICgxPDwzKSAvKiBUcmFuc21pdCBpcyBub3Qg Y29tcGxldGUgKi8KIAogLyogTENSX0ggYml0cyAqLwpkaWZmIC0tZ2l0IGEveGVuL2luY2x1ZGUv YXNtLWFybS92cGwwMTEuaCBiL3hlbi9pbmNsdWRlL2FzbS1hcm0vdnBsMDExLmgKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI1ODNkYQotLS0gL2Rldi9udWxsCisrKyBiL3hl bi9pbmNsdWRlL2FzbS1hcm0vdnBsMDExLmgKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIGluY2x1 ZGUveGVuL3ZwbDAxMS5oCisgKgorICogVmlydHVhbCBQTDAxMSBVQVJUCisgKgorICogVGhpcyBw cm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt b2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmli dXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBX QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJ TElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgSWYgbm90LCBzZWUgPGh0dHA6Ly93 d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpZm5kZWYgX1ZQTDAxMV9IXworI2RlZmlu ZSBfVlBMMDExX0hfCisKKyNpbmNsdWRlIDxwdWJsaWMvZG9tY3RsLmg+CisjaW5jbHVkZSA8cHVi bGljL2lvL3JpbmcuaD4KKyNpbmNsdWRlIDxhc20vdnJlZy5oPgorI2luY2x1ZGUgPHhlbi9tbS5o PgorCisvKiBoZWxwZXIgbWFjcm9zICovCisjZGVmaW5lIFZQTDAxMV9MT0NLKGQsZmxhZ3MpIHNw aW5fbG9ja19pcnFzYXZlKCYoZCktPmFyY2gudnBsMDExLmxvY2ssIGZsYWdzKQorI2RlZmluZSBW UEwwMTFfVU5MT0NLKGQsZmxhZ3MpIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJihkKS0+YXJjaC52 cGwwMTEubG9jaywgZmxhZ3MpCisKK3N0cnVjdCB2cGwwMTEgeworICAgIHZvaWQgKnJpbmdfYnVm OworICAgIHN0cnVjdCBwYWdlX2luZm8gKnJpbmdfcGFnZTsKKyAgICB1aW50MzJfdCAgICB1YXJ0 ZnI7ICAgICAgICAgLyogRmxhZyByZWdpc3RlciAqLworICAgIHVpbnQzMl90ICAgIHVhcnRjcjsg ICAgICAgICAvKiBDb250cm9sIHJlZ2lzdGVyICovCisgICAgdWludDMyX3QgICAgdWFydGltc2M7 ICAgICAgIC8qIEludGVycnVwdCBtYXNrIHJlZ2lzdGVyKi8KKyAgICB1aW50MzJfdCAgICB1YXJ0 aWNyOyAgICAgICAgLyogSW50ZXJydXB0IGNsZWFyIHJlZ2lzdGVyICovCisgICAgdWludDMyX3Qg ICAgdWFydHJpczsgICAgICAgIC8qIFJhdyBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyICovCisg ICAgdWludDMyX3QgICAgc2hhZG93X3VhcnRtaXM7IC8qIHNoYWRvdyBtYXNrZWQgaW50ZXJydXB0 IHJlZ2lzdGVyICovCisgICAgc3BpbmxvY2tfdCAgbG9jazsKKyAgICBldnRjaG5fcG9ydF90IGV2 dGNobjsKK307CisKK3N0cnVjdCB2cGwwMTFfaW5pdF9pbmZvIHsKKyAgICBkb21pZF90IGNvbnNv bGVfZG9taWQ7CisgICAgZ2ZuX3QgZ2ZuOworICAgIGV2dGNobl9wb3J0X3QgZXZ0Y2huOworfTsK KworI2lmZGVmIENPTkZJR19TQlNBX1ZVQVJUX0NPTlNPTEUKK2ludCBkb21haW5fdnBsMDExX2lu aXQoc3RydWN0IGRvbWFpbiAqZCwKKyAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHZwbDAx MV9pbml0X2luZm8gKmluZm8pOwordm9pZCBkb21haW5fdnBsMDExX2RlaW5pdChzdHJ1Y3QgZG9t YWluICpkKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBkb21haW5fdnBsMDExX2luaXQoc3Ry dWN0IGRvbWFpbiAqZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1 Y3QgdnBsMDExX2luaXRfaW5mbyAqaW5mbykKK3sKKyAgICByZXR1cm4gLUVOT1NZUzsKK30KKwor c3RhdGljIGlubGluZSB2b2lkIGRvbWFpbl92cGwwMTFfZGVpbml0KHN0cnVjdCBkb21haW4gKmQp IHsgfQorI2VuZGlmCisjZW5kaWYgIC8qIF9WUEwwMTFfSF8gKi8KKworLyoKKyAqIExvY2FsIHZh cmlhYmxlczoKKyAqIG1vZGU6IEMKKyAqIGMtZmlsZS1zdHlsZTogIkJTRCIKKyAqIGMtYmFzaWMt b2Zmc2V0OiA0CisgKiBpbmRlbnQtdGFicy1tb2RlOiBuaWwKKyAqIEVuZDoKKyAqLwpkaWZmIC0t Z2l0IGEveGVuL2luY2x1ZGUvcHVibGljL2FyY2gtYXJtLmggYi94ZW4vaW5jbHVkZS9wdWJsaWMv YXJjaC1hcm0uaAppbmRleCBiZDk3NGZiLi44NWFiNjY1IDEwMDY0NAotLS0gYS94ZW4vaW5jbHVk ZS9wdWJsaWMvYXJjaC1hcm0uaAorKysgYi94ZW4vaW5jbHVkZS9wdWJsaWMvYXJjaC1hcm0uaApA QCAtNDEwLDYgKzQxMCwxMCBAQCB0eXBlZGVmIHVpbnQ2NF90IHhlbl9jYWxsYmFja190OwogI2Rl ZmluZSBHVUVTVF9BQ1BJX0JBU0UgMHgyMDAwMDAwMFVMTAogI2RlZmluZSBHVUVTVF9BQ1BJX1NJ WkUgMHgwMjAwMDAwMFVMTAogCisvKiBQTDAxMSBtYXBwaW5ncyAqLworI2RlZmluZSBHVUVTVF9Q TDAxMV9CQVNFICAgIDB4MjIwMDAwMDBVTEwKKyNkZWZpbmUgR1VFU1RfUEwwMTFfU0laRSAgICAw eDAwMDAxMDAwVUxMCisKIC8qCiAgKiAxNk1CID09IDQwOTYgcGFnZXMgcmVzZXJ2ZWQgZm9yIGd1 ZXN0IHRvIHVzZSBhcyBhIHJlZ2lvbiB0byBtYXAgaXRzCiAgKiBncmFudCB0YWJsZSBpbi4KQEAg LTQ0NCw2ICs0NDgsOCBAQCB0eXBlZGVmIHVpbnQ2NF90IHhlbl9jYWxsYmFja190OwogI2RlZmlu ZSBHVUVTVF9USU1FUl9QSFlTX05TX1BQSSAzMAogI2RlZmluZSBHVUVTVF9FVlRDSE5fUFBJICAg ICAgICAzMQogCisjZGVmaW5lIEdVRVNUX1ZQTDAxMV9TUEkgICAgICAgIDMyCisKIC8qIFBTQ0kg ZnVuY3Rpb25zICovCiAjZGVmaW5lIFBTQ0lfY3B1X3N1c3BlbmQgMAogI2RlZmluZSBQU0NJX2Nw dV9vZmYgICAgIDEKLS0gCjIuNy40CgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVu Lm9yZwpodHRwczovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==