From mboxrd@z Thu Jan 1 00:00:00 1970 From: Stefano Stabellini Subject: Re: [PATCH 04/17 v5] xen/arm: vpl011: Add SBSA UART emulation in Xen Date: Thu, 22 Jun 2017 15:53:59 -0700 (PDT) Message-ID: References: <1498117132-27139-1-git-send-email-bhupinder.thakur@linaro.org> <1498117132-27139-5-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 1dOAzE-000884-Eb for xen-devel@lists.xenproject.org; Thu, 22 Jun 2017 22:54:04 +0000 In-Reply-To: <1498117132-27139-5-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: Bhupinder Thakur Cc: xen-devel@lists.xenproject.org, Julien Grall , Stefano Stabellini , Andre Przywara List-Id: xen-devel@lists.xenproject.org T24gVGh1LCAyMiBKdW4gMjAxNywgQmh1cGluZGVyIFRoYWt1ciB3cm90ZToKPiBBZGQgZW11bGF0 aW9uIGNvZGUgdG8gZW11bGF0ZSByZWFkL3dyaXRlIGFjY2VzcyB0byBwbDAxMSByZWdpc3RlcnMK PiBhbmQgcGwwMTEgaW50ZXJydXB0czoKPiAKPiAgICAgLSBFbXVsYXRlIERSIHJlYWQvd3JpdGUg YnkgcmVhZGluZyBhbmQgd3JpdGluZyBmcm9tL3RvIHRoZSBJTgo+ICAgICAgIGFuZCBPVVQgcmlu ZyBidWZmZXJzIGFuZCByYWlzaW5nIGFuIGV2ZW50IHRvIHRoZSBiYWNrZW5kIHdoZW4KPiAgICAg ICB0aGVyZSBpcyBkYXRhIGluIHRoZSBPVVQgcmluZyBidWZmZXIgYW5kIGluamVjdGluZyBhbiBp bnRlcnJ1cHQKPiAgICAgICB0byB0aGUgZ3Vlc3Qgd2hlbiB0aGVyZSBpcyBkYXRhIGluIHRoZSBJ TiByaW5nIGJ1ZmZlcgo+IAo+ICAgICAtIE90aGVyIHJlZ2lzdGVycyBhcmUgcmVsYXRlZCB0byBp bnRlcnJ1cHQgbWFuYWdlbWVudCBhbmQKPiAgICAgICBlc3NlbnRpYWxseSBjb250cm9sIHdoZW4g aW50ZXJydXB0cyBhcmUgZGVsaXZlcmVkIHRvIHRoZSBndWVzdAo+IAo+IFRoaXMgcGF0Y2ggaW1w bGVtZW50cyB0aGUgU0JTQSBHZW5lcmljIFVBUlQgd2hpY2ggaXMgYSBzdWJzZXQgb2YgQVJNCj4g UEwwMTEgVUFSVC4KPiAKPiBUaGUgU0JTQSBHZW5lcmljIFVBUlQgaXMgY292ZXJlZCBpbiBBcHBl bmRpeCBCIG9mCj4gaHR0cHM6Ly9zdGF0aWMuZG9jcy5hcm0uY29tL2RlbjAwMjkvYS9TZXJ2ZXJf QmFzZV9TeXN0ZW1fQXJjaGl0ZWN0dXJlX3YzXzFfQVJNX0RFTl8wMDI5QS5wZGYKPiAKPiBTaWdu ZWQtb2ZmLWJ5OiBCaHVwaW5kZXIgVGhha3VyIDxiaHVwaW5kZXIudGhha3VyQGxpbmFyby5vcmc+ Cj4gLS0tCj4gQ0M6IFN0ZWZhbm8gU3RhYmVsbGluaSA8c3N0YWJlbGxpbmlAa2VybmVsLm9yZz4K PiBDQzogSnVsaWVuIEdyYWxsIDxqdWxpZW4uZ3JhbGxAYXJtLmNvbT4KPiBDQzogQW5kcmUgUHJ6 eXdhcmEgPGFuZHJlLnByenl3YXJhQGFybS5jb20+Cj4gCj4gQ2hhbmdlcyBzaW5jZSB2NDoKPiAt IFJlbmFtZWQgdnBsMDExX3VwZGF0ZSgpIHRvIHZwbDAxMV91cGRhdGVfaW50ZXJydXB0X3N0YXR1 cygpIGFuZCBhZGRlZCBsb2dpYyB0byBhdm9pZAo+ICAgcmFpc2luZyBzcHVyaW91cyBpbnRlcnJ1 cHRzLgo+IC0gVXNlZCBiYXJyaWVyIGluc3RydWN0aW9ucyBjb3JyZWN0bHkgd2hpbGUgcmVhZGlu Zy93cml0aW5nIGRhdGEgdG8gdGhlIHJpbmcgYnVmZmVyLgo+IC0gUHJvcGVyIGxvY2sgdGFrZW4g YmVmb3JlIHJlYWRpbmcgcmluZyBidWZmZXIgaW5kaWNlcy4KPiAKPiBDaGFuZ2VzIHNpbmNlIHYz Ogo+IC0gTW92ZWQgdGhlIGNhbGwgdG8gREVGSU5FX1hFTl9GTEVYX1JJTkcgZnJvbSB2cGwwMTEu aCB0byBwdWJsaWMvY29uc29sZS5oLiBUaGlzIG1hY3JvIGRlZmluZXMKPiAgIHN0YW5kYXJkIGZ1 bmN0aW9ucyB0byBvcGVyYXRlIG9uIHRoZSByaW5nIGJ1ZmZlci4KPiAtIExvY2sgdGFrZW4gd2hp bGUgdXBkYXRpbmcgdGhlIGludGVycnVwdCBtYXNrIGFuZCBjbGVhciByZWdpc3RlcnMgaW4gbW1p b193cml0ZS4KPiAtIFVzZSBnZm5fdCBpbnN0ZWFkIG9mIHhlbl9wZm5fdC4KPiAtIHZnaWNfZnJl ZV92aXJxIGNhbGxlZCBpZiB0aGVyZSBpcyBhbnkgZXJyb3IgaW4gdnBsMDExIGluaXRpYWxpemF0 aW9uLgo+IC0gbW1pbyBoYW5kbGVycyBmcmVlZCBpZiB0aGVyZSBpcyBhbnkgZXJyb3IgaW4gdnBs MDExIGluaXRpYWxpemF0aW9uLgo+IC0gUmVtb3ZlZCB2cGwwMTEtPmluaXRpYWxpemVkIGZsYWcg dXNhZ2UgYXMgdGhlIHNhbWUgY2hlY2sgY291bGQgYmUgZG9uZSAKPiAgIHVzaW5nIHZwbDAxMS0+ cmluZy1yZWYuCj4gLSBVc2VkIHJldHVybiBpbnN0ZWFkIG9mIGJyZWFrIGluIHRoZSBzd2l0Y2gg aGFuZGxpbmcgb2YgZW11bGF0aW9uIG9mIGRpZmZlcmVudCBwbDAxMSByZWdpc3RlcnMuCj4gLSBS ZW5hbWVkIHZwbDAxMV91cGRhdGVfc3BpKCkgdG8gdnBsMDExX3VwZGF0ZSgpLgo+IAo+IENoYW5n ZXMgc2luY2UgdjI6Cj4gLSBVc2UgZ2VuZXJpYyB2cmVnX3JlZyogZm9yIHJlYWQvd3JpdGUgb2Yg cmVnaXN0ZXJzIGVtdWxhdGluZyBwbDAxMS4KPiAtIFVzZSBnZW5lcmljIHJpbmcgYnVmZmVyIGZ1 bmN0aW9ucyBkZWZpbmVkIHVzaW5nIERFRklORV9YRU5fRkxFWF9SSU5HLgo+IC0gUmVuYW1lZCB0 aGUgU1BJIGluamVjdGlvbiBmdW5jdGlvbiB0byB2cGwwMTFfdXBkYXRlX3NwaSgpIHRvIHJlZmxl Y3QgbGV2ZWwgCj4gICB0cmlnZ2VyZWQgbmF0dXJlIG9mIHBsMDExIGludGVycnVwdHMuCj4gLSBU aGUgcGwwMTEgcmVnaXN0ZXIgYWNjZXNzIGFkZHJlc3Mgc2hvdWxkIGFsd2F5cyBiZSB0aGUgYmFz ZSBhZGRyZXNzIG9mIHRoZQo+ICAgY29ycmVzcG9uZGluZyByZWdpc3RlciBhcyBwZXIgc2VjdGlv biBCIG9mIHRoZSBTQlNBIGRvY3VtZW50LiBGb3IgdGhpcyByZWFzb24sCj4gICB0aGUgcmVnaXN0 ZXIgcmFuZ2UgYWRkcmVzcyBhY2Nlc3MgaXMgbm90IGFsbG93ZWQuCj4gCj4gQ2hhbmdlcyBzaW5j ZSB2MToKPiAtIFJlbW92ZWQgdGhlIG9wdGltaXp0aW9uIHJlbGF0ZWQgdG8gc2VuZGlpbmcgZXZl bnRzIHRvIHhlbmNvbnNvbGUgCj4gLSBVc2UgbG9jYWwgdmFyaWFibGVzIGFzIHJpbmcgYnVmZmVy IGluZGljZXMgd2hpbGUgdXNpbmcgdGhlIHJpbmcgYnVmZmVyCj4gCj4gIHhlbi9hcmNoL2FybS9L Y29uZmlnICAgICAgICAgICAgIHwgICA3ICsKPiAgeGVuL2FyY2gvYXJtL01ha2VmaWxlICAgICAg ICAgICAgfCAgIDEgKwo+ICB4ZW4vYXJjaC9hcm0vdnBsMDExLmMgICAgICAgICAgICB8IDQ0OSAr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiAgeGVuL2luY2x1ZGUvYXNt LWFybS9kb21haW4uaCAgICAgfCAgIDYgKwo+ICB4ZW4vaW5jbHVkZS9hc20tYXJtL3BsMDExLXVh cnQuaCB8ICAgMiArCj4gIHhlbi9pbmNsdWRlL2FzbS1hcm0vdnBsMDExLmggICAgIHwgIDczICsr KysrKysKPiAgeGVuL2luY2x1ZGUvcHVibGljL2FyY2gtYXJtLmggICAgfCAgIDYgKwo+ICA3IGZp bGVzIGNoYW5nZWQsIDU0NCBpbnNlcnRpb25zKCspCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCB4ZW4v YXJjaC9hcm0vdnBsMDExLmMKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IHhlbi9pbmNsdWRlL2FzbS1h cm0vdnBsMDExLmgKPiAKPiBkaWZmIC0tZ2l0IGEveGVuL2FyY2gvYXJtL0tjb25maWcgYi94ZW4v YXJjaC9hcm0vS2NvbmZpZwo+IGluZGV4IGQ0NmI5OGMuLmY1ODAxOWQgMTAwNjQ0Cj4gLS0tIGEv eGVuL2FyY2gvYXJtL0tjb25maWcKPiArKysgYi94ZW4vYXJjaC9hcm0vS2NvbmZpZwo+IEBAIC01 MCw2ICs1MCwxMyBAQCBjb25maWcgSEFTX0lUUwo+ICAgICAgICAgIHByb21wdCAiR0lDdjMgSVRT IE1TSSBjb250cm9sbGVyIHN1cHBvcnQiIGlmIEVYUEVSVCA9ICJ5Igo+ICAgICAgICAgIGRlcGVu ZHMgb24gSEFTX0dJQ1YzCj4gIAo+ICtjb25maWcgU0JTQV9WVUFSVF9DT05TT0xFCj4gKwlib29s ICJFbXVsYXRlZCBTQlNBIFVBUlQgY29uc29sZSBzdXBwb3J0Igo+ICsJZGVmYXVsdCB5Cj4gKwkt LS1oZWxwLS0tCj4gKwkgIEFsbG93cyBhIGd1ZXN0IHRvIHVzZSBTQlNBIEdlbmVyaWMgVUFSVCBh cyBhIGNvbnNvbGUuIFRoZQo+ICsJICBTQlNBIEdlbmVyaWMgVUFSVCBpbXBsZW1lbnRzIGEgc3Vi c2V0IG9mIEFSTSBQTDAxMSBVQVJULgo+ICsKPiAgZW5kbWVudQo+ICAKPiAgbWVudSAiQVJNIGVy cmF0YSB3b3JrYXJvdW5kIHZpYSB0aGUgYWx0ZXJuYXRpdmUgZnJhbWV3b3JrIgo+IGRpZmYgLS1n aXQgYS94ZW4vYXJjaC9hcm0vTWFrZWZpbGUgYi94ZW4vYXJjaC9hcm0vTWFrZWZpbGUKPiBpbmRl eCA0OWUxZmIyLi5kOWM2ZWJmIDEwMDY0NAo+IC0tLSBhL3hlbi9hcmNoL2FybS9NYWtlZmlsZQo+ ICsrKyBiL3hlbi9hcmNoL2FybS9NYWtlZmlsZQo+IEBAIC01MCw2ICs1MCw3IEBAIG9iai0kKENP TkZJR19IQVNfR0lDVjMpICs9IHZnaWMtdjMubwo+ICBvYmotJChDT05GSUdfSEFTX0lUUykgKz0g dmdpYy12My1pdHMubwo+ICBvYmoteSArPSB2bV9ldmVudC5vCj4gIG9iai15ICs9IHZ0aW1lci5v Cj4gK29iai0kKENPTkZJR19TQlNBX1ZVQVJUX0NPTlNPTEUpICs9IHZwbDAxMS5vCj4gIG9iai15 ICs9IHZwc2NpLm8KPiAgb2JqLXkgKz0gdnVhcnQubwo+ICAKPiBkaWZmIC0tZ2l0IGEveGVuL2Fy Y2gvYXJtL3ZwbDAxMS5jIGIveGVuL2FyY2gvYXJtL3ZwbDAxMS5jCj4gbmV3IGZpbGUgbW9kZSAx MDA2NDQKPiBpbmRleCAwMDAwMDAwLi5kYjg2NTFjCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL3hl bi9hcmNoL2FybS92cGwwMTEuYwo+IEBAIC0wLDAgKzEsNDQ5IEBACj4gKy8qCj4gKyAqIGFyY2gv YXJtL3ZwbDAxMS5jCj4gKyAqCj4gKyAqIFZpcnR1YWwgUEwwMTEgVUFSVAo+ICsgKgo+ICsgKiBU aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yIG1vZGlmeSBpdAo+ICsgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAo+ICsgKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hl ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgo+ICsgKgo+ICsgKiBUaGlzIHByb2dy YW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRI T1VUCj4gKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5 IG9mIE1FUkNIQU5UQUJJTElUWSBvcgo+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCj4gKyAqIG1vcmUg ZGV0YWlscy4KPiArICoKPiArICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAo+ICsgKiB0aGlzIHByb2dy YW07IElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KPiArICovCj4g Kwo+ICsjaW5jbHVkZSA8eGVuL2Vycm5vLmg+Cj4gKyNpbmNsdWRlIDx4ZW4vZXZlbnQuaD4KPiAr I2luY2x1ZGUgPHhlbi9ndWVzdF9hY2Nlc3MuaD4KPiArI2luY2x1ZGUgPHhlbi9pbml0Lmg+Cj4g KyNpbmNsdWRlIDx4ZW4vbGliLmg+Cj4gKyNpbmNsdWRlIDx4ZW4vbW0uaD4KPiArI2luY2x1ZGUg PHhlbi9zY2hlZC5oPgo+ICsjaW5jbHVkZSA8cHVibGljL2RvbWN0bC5oPgo+ICsjaW5jbHVkZSA8 cHVibGljL2lvL2NvbnNvbGUuaD4KPiArI2luY2x1ZGUgPGFzbS1hcm0vcGwwMTEtdWFydC5oPgo+ ICsjaW5jbHVkZSA8YXNtLWFybS92Z2ljLWVtdWwuaD4KPiArI2luY2x1ZGUgPGFzbS92cGwwMTEu aD4KPiArCj4gKy8qCj4gKyAqIFNpbmNlIHBsMDExIHJlZ2lzdGVycyBhcmUgMzItYml0IHJlZ2lz dGVycywgYWxsIHJlZ2lzdGVycwo+ICsgKiBhcmUgaGFuZGxlZCBzaW1pbGFybHkgYWxsb3dpbmcg OC1iaXQsIDE2LWJpdCBhbmQgMzItYml0Cj4gKyAqIGFjY2Vzc2VzIGV4Y2VwdCA2NC1iaXQgYWNj ZXNzLgo+ICsgKi8KPiArc3RhdGljIGJvb2wgdnBsMDExX3JlZzMyX2NoZWNrX2FjY2VzcyhzdHJ1 Y3QgaHNyX2RhYnQgZGFidCkKPiArewo+ICsgICAgcmV0dXJuIChkYWJ0LnNpemUgIT0gREFCVF9E T1VCTEVfV09SRCk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHZwbDAxMV91cGRhdGVfaW50ZXJy dXB0X3N0YXR1cyhzdHJ1Y3QgZG9tYWluICpkKQo+ICt7Cj4gKyAgICBzdHJ1Y3QgdnBsMDExICp2 cGwwMTEgPSAmZC0+YXJjaC52cGwwMTE7Cj4gKyAgICB1aW50MzJfdCBpbnRlcnJ1cHRfc3RhdHVz ID0gdnBsMDExLT51YXJ0cmlzICYgdnBsMDExLT51YXJ0aW1zYzsKPiArCj4gKyAgICAvKgo+ICsg ICAgICogVE9ETzogUEwwMTEgaW50ZXJydXB0cyBhcmUgbGV2ZWwgdHJpZ2dlcmVkIHdoaWNoIG1l YW5zCj4gKyAgICAgKiB0aGF0IGludGVycnVwdCBuZWVkcyB0byBiZSBzZXQvY2xlYXIgaW5zdGVh ZCBvZiBiZWluZwo+ICsgICAgICogaW5qZWN0ZWQuIEhvd2V2ZXIsIGN1cnJlbnRseSB2R0lDIGRv ZXMgbm90IGhhbmRsZSBsZXZlbAo+ICsgICAgICogdHJpZ2dlcmVkIGludGVycnVwdHMgcHJvcGVy bHkuIFRoaXMgZnVuY3Rpb24gbmVlZHMgdG8gYmUKPiArICAgICAqIHJldmlzaXRlZCBvbmNlIHZH SUMgc3RhcnRzIGhhbmRsaW5nIGxldmVsIHRyaWdnZXJlZAo+ICsgICAgICogaW50ZXJydXB0cy4K PiArICAgICAqLwo+ICsKPiArICAgIC8qCj4gKyAgICAgKiBSYWlzZSBhbiBpbnRlcnJ1cHQgb25s eSBpZiBhbnkgYWRkaXRpb25hbCBpbnRlcnJ1cHQKPiArICAgICAqIHN0YXR1cyBiaXQgaGFzIGJl ZW4gc2V0IHNpbmNlIHRoZSBsYXN0IHRpbWUuCj4gKyAgICAgKi8KPiArICAgIGlmICggaW50ZXJy dXB0X3N0YXR1cyAmIH52cGwwMTEtPnNoYWRvd191YXJ0cmlzICkKPiArICAgICAgICB2Z2ljX3Zj cHVfaW5qZWN0X3NwaShkLCBHVUVTVF9WUEwwMTFfU1BJKTsKPiArCj4gKyAgICB2cGwwMTEtPnNo YWRvd191YXJ0cmlzID0gaW50ZXJydXB0X3N0YXR1czsKPiArfQo+ICsKPiArc3RhdGljIHVpbnQ4 X3QgdnBsMDExX3JlYWRfZGF0YShzdHJ1Y3QgZG9tYWluICpkKQo+ICt7Cj4gKyAgICB1bnNpZ25l ZCBsb25nIGZsYWdzOwo+ICsgICAgdWludDhfdCBkYXRhID0gMDsKPiArICAgIHN0cnVjdCB2cGww MTEgKnZwbDAxMSA9ICZkLT5hcmNoLnZwbDAxMTsKPiArICAgIHN0cnVjdCB4ZW5jb25zX2ludGVy ZmFjZSAqaW50ZiA9IHZwbDAxMS0+cmluZ19idWY7Cj4gKyAgICBYRU5DT05TX1JJTkdfSURYIGlu X2NvbnMsIGluX3Byb2Q7Cj4gKwo+ICsgICAgVlBMMDExX0xPQ0soZCwgZmxhZ3MpOwo+ICsKPiAr ICAgIGluX2NvbnMgPSBpbnRmLT5pbl9jb25zOwo+ICsgICAgaW5fcHJvZCA9IGludGYtPmluX3By b2Q7Cj4gKwo+ICsgICAgc21wX3JtYigpOwo+ICsKPiArICAgIC8qCj4gKyAgICAgKiBJdCBpcyBl eHBlY3RlZCB0aGF0IHRoZXJlIHdpbGwgYmUgZGF0YSBpbiB0aGUgcmluZyBidWZmZXIgd2hlbiB0 aGlzCj4gKyAgICAgKiBmdW5jdGlvbiBpcyBjYWxsZWQgc2luY2UgdGhlIGd1ZXN0IGlzIGV4cGVj dGVkIHRvIHJlYWQgdGhlIGRhdGEgcmVnaXN0ZXIKPiArICAgICAqIG9ubHkgaWYgdGhlIFRYRkUg ZmxhZyBpcyBub3Qgc2V0Lgo+ICsgICAgICogSWYgdGhlIGd1ZXN0IHN0aWxsIGRvZXMgcmVhZCB3 aGVuIFRYRkUgYml0IGlzIHNldCB0aGVuIDAgd2lsbCBiZSByZXR1cm5lZC4KPiArICAgICAqLwo+ ICsgICAgaWYgKCB4ZW5jb25zX3F1ZXVlZChpbl9wcm9kLCBpbl9jb25zLCBzaXplb2YoaW50Zi0+ aW4pKSA+IDAgKQo+ICsgICAgewo+ICsgICAgICAgIGRhdGEgPSBpbnRmLT5pblt4ZW5jb25zX21h c2soaW5fY29ucywgc2l6ZW9mKGludGYtPmluKSldOwo+ICsgICAgICAgIGluX2NvbnMgKz0gMTsK PiArICAgICAgICBzbXBfbWIoKTsKPiArICAgICAgICBpbnRmLT5pbl9jb25zID0gaW5fY29uczsK PiArICAgIH0KPiArICAgIGVsc2UKPiArICAgICAgICBncHJpbnRrKFhFTkxPR19FUlIsICJ2cGww MTE6IFVuZXhwZWN0ZWQgSU4gcmluZyBidWZmZXIgZW1wdHlcbiIpOwo+ICsKPiArICAgIGlmICgg eGVuY29uc19xdWV1ZWQoaW5fcHJvZCwgaW5fY29ucywgc2l6ZW9mKGludGYtPmluKSkgPT0gMCAp Cj4gKyAgICB7Cj4gKyAgICAgICAgdnBsMDExLT51YXJ0ZnIgfD0gUlhGRTsKPiArICAgICAgICB2 cGwwMTEtPnVhcnRyaXMgJj0gflJYSTsKPiArICAgIH0KPiArCj4gKyAgICB2cGwwMTEtPnVhcnRm ciAmPSB+UlhGRjsKPiArCj4gKyAgICB2cGwwMTFfdXBkYXRlX2ludGVycnVwdF9zdGF0dXMoZCk7 Cj4gKwo+ICsgICAgVlBMMDExX1VOTE9DSyhkLCBmbGFncyk7Cj4gKwo+ICsgICAgLyoKPiArICAg ICAqIFNlbmQgYW4gZXZlbnQgdG8gY29uc29sZSBiYWNrZW5kIHRvIGluZGljYXRlIHRoYXQgZGF0 YSBoYXMgYmVlbgo+ICsgICAgICogcmVhZCBmcm9tIHRoZSBJTiByaW5nIGJ1ZmZlci4KPiArICAg ICAqLwo+ICsgICAgbm90aWZ5X3ZpYV94ZW5fZXZlbnRfY2hhbm5lbChkLCB2cGwwMTEtPmV2dGNo bik7Cj4gKwo+ICsgICAgcmV0dXJuIGRhdGE7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHZwbDAx MV93cml0ZV9kYXRhKHN0cnVjdCBkb21haW4gKmQsIHVpbnQ4X3QgZGF0YSkKPiArewo+ICsgICAg dW5zaWduZWQgbG9uZyBmbGFnczsKPiArICAgIHN0cnVjdCB2cGwwMTEgKnZwbDAxMSA9ICZkLT5h cmNoLnZwbDAxMTsKPiArICAgIHN0cnVjdCB4ZW5jb25zX2ludGVyZmFjZSAqaW50ZiA9IHZwbDAx MS0+cmluZ19idWY7Cj4gKyAgICBYRU5DT05TX1JJTkdfSURYIG91dF9jb25zLCBvdXRfcHJvZDsK PiArCj4gKyAgICBWUEwwMTFfTE9DSyhkLCBmbGFncyk7Cj4gKwo+ICsgICAgb3V0X2NvbnMgPSBp bnRmLT5vdXRfY29uczsKPiArICAgIG91dF9wcm9kID0gaW50Zi0+b3V0X3Byb2Q7Cj4gKwo+ICsg ICAgc21wX3JtYigpOwoKVGhpcyBzaG91bGQgYmUKICAgICAgIHNtcF9tYigpOwoKQXNpZGUgZnJv bSB0aGlzLCB0aGUgcGF0Y2ggbG9va3MgZ29vZCB0byBtZS4KCgo+ICsgICAgLyoKPiArICAgICAq IEl0IGlzIGV4cGVjdGVkIHRoYXQgdGhlIHJpbmcgaXMgbm90IGZ1bGwgd2hlbiB0aGlzIGZ1bmN0 aW9uIGlzIGNhbGxlZAo+ICsgICAgICogYXMgdGhlIGd1ZXN0IGlzIGV4cGVjdGVkIHRvIHdyaXRl IHRvIHRoZSBkYXRhIHJlZ2lzdGVyIG9ubHkgd2hlbiB0aGUKPiArICAgICAqIFRYRkYgZmxhZyBp cyBub3Qgc2V0Lgo+ICsgICAgICogSW4gY2FzZSB0aGUgZ3Vlc3QgZG9lcyB3cml0ZSBldmVuIHdo ZW4gdGhlIFRYRkYgZmxhZyBpcyBzZXQgdGhlbiB0aGUKPiArICAgICAqIGRhdGEgd2lsbCBiZSBz aWxlbnRseSBkcm9wcGVkLgo+ICsgICAgICovCj4gKyAgICBpZiAoIHhlbmNvbnNfcXVldWVkKG91 dF9wcm9kLCBvdXRfY29ucywgc2l6ZW9mKGludGYtPm91dCkpICE9Cj4gKyAgICAgICAgIHNpemVv ZiAoaW50Zi0+b3V0KSApCj4gKyAgICB7Cj4gKyAgICAgICAgaW50Zi0+b3V0W3hlbmNvbnNfbWFz ayhvdXRfcHJvZCwgc2l6ZW9mKGludGYtPm91dCkpXSA9IGRhdGE7Cj4gKyAgICAgICAgb3V0X3By b2QgKz0gMTsKPiArICAgICAgICBzbXBfd21iKCk7Cj4gKyAgICAgICAgaW50Zi0+b3V0X3Byb2Qg PSBvdXRfcHJvZDsKPiArICAgIH0KPiArICAgIGVsc2UKPiArICAgICAgICBncHJpbnRrKFhFTkxP R19FUlIsICJ2cGwwMTE6IFVuZXhwZWN0ZWQgT1VUIHJpbmcgYnVmZmVyIGZ1bGxcbiIpOwo+ICsK PiArICAgIGlmICggeGVuY29uc19xdWV1ZWQob3V0X3Byb2QsIG91dF9jb25zLCBzaXplb2YoaW50 Zi0+b3V0KSkgPT0KPiArICAgICAgICAgc2l6ZW9mIChpbnRmLT5vdXQpICkKPiArICAgIHsKPiAr ICAgICAgICB2cGwwMTEtPnVhcnRmciB8PSBUWEZGOwo+ICsgICAgICAgIHZwbDAxMS0+dWFydHJp cyAmPSB+VFhJOwo+ICsgICAgfQo+ICsKPiArICAgIHZwbDAxMS0+dWFydGZyIHw9IEJVU1k7Cj4g Kwo+ICsgICAgdnBsMDExLT51YXJ0ZnIgJj0gflRYRkU7Cj4gKwo+ICsgICAgdnBsMDExX3VwZGF0 ZV9pbnRlcnJ1cHRfc3RhdHVzKGQpOwo+ICsKPiArICAgIFZQTDAxMV9VTkxPQ0soZCwgZmxhZ3Mp Owo+ICsKPiArICAgIC8qCj4gKyAgICAgKiBTZW5kIGFuIGV2ZW50IHRvIGNvbnNvbGUgYmFja2Vu ZCB0byBpbmRpY2F0ZSB0aGF0IHRoZXJlIGlzCj4gKyAgICAgKiBkYXRhIGluIHRoZSBPVVQgcmlu ZyBidWZmZXIuCj4gKyAgICAgKi8KPiArICAgIG5vdGlmeV92aWFfeGVuX2V2ZW50X2NoYW5uZWwo ZCwgdnBsMDExLT5ldnRjaG4pOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHZwbDAxMV9tbWlvX3Jl YWQoc3RydWN0IHZjcHUgKnYsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtbWlvX2lu Zm9fdCAqaW5mbywKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyX3QgKnIs Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwcml2KQo+ICt7Cj4gKyAgICBz dHJ1Y3QgaHNyX2RhYnQgZGFidCA9IGluZm8tPmRhYnQ7Cj4gKyAgICB1aW50MzJfdCB2cGwwMTFf cmVnID0gKHVpbnQzMl90KShpbmZvLT5ncGEgLSBHVUVTVF9QTDAxMV9CQVNFKTsKPiArICAgIHN0 cnVjdCB2cGwwMTEgKnZwbDAxMSA9ICZ2LT5kb21haW4tPmFyY2gudnBsMDExOwo+ICsgICAgc3Ry dWN0IGRvbWFpbiAqZCA9IHYtPmRvbWFpbjsKPiArICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4g Kwo+ICsgICAgc3dpdGNoICggdnBsMDExX3JlZyApCj4gKyAgICB7Cj4gKyAgICBjYXNlIERSOgo+ ICsgICAgICAgIGlmICggIXZwbDAxMV9yZWczMl9jaGVja19hY2Nlc3MoZGFidCkgKSBnb3RvIGJh ZF93aWR0aDsKPiArCj4gKyAgICAgICAgKnIgPSB2cmVnX3JlZzMyX2V4dHJhY3QodnBsMDExX3Jl YWRfZGF0YShkKSwgaW5mbyk7Cj4gKyAgICAgICAgcmV0dXJuIDE7Cj4gKwo+ICsgICAgY2FzZSBS U1I6Cj4gKyAgICAgICAgaWYgKCAhdnBsMDExX3JlZzMyX2NoZWNrX2FjY2VzcyhkYWJ0KSApIGdv dG8gYmFkX3dpZHRoOwo+ICsKPiArICAgICAgICAvKiBJdCBhbHdheXMgcmV0dXJucyAwIGFzIHRo ZXJlIGFyZSBubyBwaHlzaWNhbCBlcnJvcnMuICovCj4gKyAgICAgICAgKnIgPSAwOwo+ICsgICAg ICAgIHJldHVybiAxOwo+ICsKPiArICAgIGNhc2UgRlI6Cj4gKyAgICAgICAgaWYgKCAhdnBsMDEx X3JlZzMyX2NoZWNrX2FjY2VzcyhkYWJ0KSApIGdvdG8gYmFkX3dpZHRoOwo+ICsKPiArICAgICAg ICBWUEwwMTFfTE9DSyhkLCBmbGFncyk7Cj4gKyAgICAgICAgKnIgPSB2cmVnX3JlZzMyX2V4dHJh Y3QodnBsMDExLT51YXJ0ZnIsIGluZm8pOwo+ICsgICAgICAgIFZQTDAxMV9VTkxPQ0soZCwgZmxh Z3MpOwo+ICsgICAgICAgIHJldHVybiAxOwo+ICsKPiArICAgIGNhc2UgUklTOgo+ICsgICAgICAg IGlmICggIXZwbDAxMV9yZWczMl9jaGVja19hY2Nlc3MoZGFidCkgKSBnb3RvIGJhZF93aWR0aDsK PiArCj4gKyAgICAgICAgVlBMMDExX0xPQ0soZCwgZmxhZ3MpOwo+ICsgICAgICAgICpyID0gdnJl Z19yZWczMl9leHRyYWN0KHZwbDAxMS0+dWFydHJpcywgaW5mbyk7Cj4gKyAgICAgICAgVlBMMDEx X1VOTE9DSyhkLCBmbGFncyk7Cj4gKyAgICAgICAgcmV0dXJuIDE7Cj4gKwo+ICsgICAgY2FzZSBN SVM6Cj4gKyAgICAgICAgaWYgKCAhdnBsMDExX3JlZzMyX2NoZWNrX2FjY2VzcyhkYWJ0KSApIGdv dG8gYmFkX3dpZHRoOwo+ICsKPiArICAgICAgICBWUEwwMTFfTE9DSyhkLCBmbGFncyk7Cj4gKyAg ICAgICAgKnIgPSB2cmVnX3JlZzMyX2V4dHJhY3QodnBsMDExLT51YXJ0cmlzICYgdnBsMDExLT51 YXJ0aW1zYywKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvKTsKPiArICAg ICAgICBWUEwwMTFfVU5MT0NLKGQsIGZsYWdzKTsKPiArICAgICAgICByZXR1cm4gMTsKPiArCj4g KyAgICBjYXNlIElNU0M6Cj4gKyAgICAgICAgaWYgKCAhdnBsMDExX3JlZzMyX2NoZWNrX2FjY2Vz cyhkYWJ0KSApIGdvdG8gYmFkX3dpZHRoOwo+ICsKPiArICAgICAgICBWUEwwMTFfTE9DSyhkLCBm bGFncyk7Cj4gKyAgICAgICAgKnIgPSB2cmVnX3JlZzMyX2V4dHJhY3QodnBsMDExLT51YXJ0aW1z YywgaW5mbyk7Cj4gKyAgICAgICAgVlBMMDExX1VOTE9DSyhkLCBmbGFncyk7Cj4gKyAgICAgICAg cmV0dXJuIDE7Cj4gKwo+ICsgICAgY2FzZSBJQ1I6Cj4gKyAgICAgICAgaWYgKCAhdnBsMDExX3Jl ZzMyX2NoZWNrX2FjY2VzcyhkYWJ0KSApIGdvdG8gYmFkX3dpZHRoOwo+ICsKPiArICAgICAgICAv KiBPbmx5IHdyaXRlIGlzIHZhbGlkLiAqLwo+ICsgICAgICAgIHJldHVybiAwOwo+ICsKPiArICAg IGRlZmF1bHQ6Cj4gKyAgICAgICAgZ3ByaW50ayhYRU5MT0dfRVJSLCAidnBsMDExOiB1bmhhbmRs ZWQgcmVhZCByJWQgb2Zmc2V0ICUjMDh4XG4iLAo+ICsgICAgICAgICAgICAgICAgZGFidC5yZWcs IHZwbDAxMV9yZWcpOwo+ICsgICAgICAgIHJldHVybiAwOwo+ICsgICAgfQo+ICsKPiArICAgIHJl dHVybiAxOwo+ICsKPiArYmFkX3dpZHRoOgo+ICsgICAgZ3ByaW50ayhYRU5MT0dfRVJSLCAidnBs MDExOiBiYWQgcmVhZCB3aWR0aCAlZCByJWQgb2Zmc2V0ICUjMDh4XG4iLAo+ICsgICAgICAgICAg ICBkYWJ0LnNpemUsIGRhYnQucmVnLCB2cGwwMTFfcmVnKTsKPiArICAgIGRvbWFpbl9jcmFzaF9z eW5jaHJvbm91cygpOwo+ICsgICAgcmV0dXJuIDA7Cj4gKwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50 IHZwbDAxMV9tbWlvX3dyaXRlKHN0cnVjdCB2Y3B1ICp2LAo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIG1taW9faW5mb190ICppbmZvLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHJlZ2lzdGVyX3QgciwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpw cml2KQo+ICt7Cj4gKyAgICBzdHJ1Y3QgaHNyX2RhYnQgZGFidCA9IGluZm8tPmRhYnQ7Cj4gKyAg ICB1aW50MzJfdCB2cGwwMTFfcmVnID0gKHVpbnQzMl90KShpbmZvLT5ncGEgLSBHVUVTVF9QTDAx MV9CQVNFKTsKPiArICAgIHN0cnVjdCB2cGwwMTEgKnZwbDAxMSA9ICZ2LT5kb21haW4tPmFyY2gu dnBsMDExOwo+ICsgICAgc3RydWN0IGRvbWFpbiAqZCA9IHYtPmRvbWFpbjsKPiArICAgIHVuc2ln bmVkIGxvbmcgZmxhZ3M7Cj4gKwo+ICsgICAgc3dpdGNoICggdnBsMDExX3JlZyApCj4gKyAgICB7 Cj4gKyAgICBjYXNlIERSOgo+ICsgICAgewo+ICsgICAgICAgIHVpbnQzMl90IGRhdGEgPSAwOwo+ ICsKPiArICAgICAgICBpZiAoICF2cGwwMTFfcmVnMzJfY2hlY2tfYWNjZXNzKGRhYnQpICkgZ290 byBiYWRfd2lkdGg7Cj4gKwo+ICsgICAgICAgIHZyZWdfcmVnMzJfdXBkYXRlKCZkYXRhLCByLCBp bmZvKTsKPiArICAgICAgICB2cGwwMTFfd3JpdGVfZGF0YSh2LT5kb21haW4sIGRhdGEpOwo+ICsg ICAgICAgIHJldHVybiAxOwo+ICsgICAgfQo+ICsgICAgY2FzZSBSU1I6IC8qIE5vdGhpbmcgdG8g Y2xlYXIuICovCj4gKyAgICAgICAgaWYgKCAhdnBsMDExX3JlZzMyX2NoZWNrX2FjY2VzcyhkYWJ0 KSApIGdvdG8gYmFkX3dpZHRoOwo+ICsKPiArICAgICAgICByZXR1cm4gMTsKPiArCj4gKyAgICBj YXNlIEZSOgo+ICsgICAgY2FzZSBSSVM6Cj4gKyAgICBjYXNlIE1JUzoKPiArICAgICAgICBnb3Rv IHdyaXRlX2lnbm9yZTsKPiArCj4gKyAgICBjYXNlIElNU0M6Cj4gKyAgICAgICAgaWYgKCAhdnBs MDExX3JlZzMyX2NoZWNrX2FjY2VzcyhkYWJ0KSApIGdvdG8gYmFkX3dpZHRoOwo+ICsKPiArICAg ICAgICBWUEwwMTFfTE9DSyhkLCBmbGFncyk7Cj4gKyAgICAgICAgdnJlZ19yZWczMl91cGRhdGUo JnZwbDAxMS0+dWFydGltc2MsIHIsIGluZm8pOwo+ICsgICAgICAgIHZwbDAxMV91cGRhdGVfaW50 ZXJydXB0X3N0YXR1cyh2LT5kb21haW4pOwo+ICsgICAgICAgIFZQTDAxMV9VTkxPQ0soZCwgZmxh Z3MpOwo+ICsgICAgICAgIHJldHVybiAxOwo+ICsKPiArICAgIGNhc2UgSUNSOgo+ICsgICAgICAg IGlmICggIXZwbDAxMV9yZWczMl9jaGVja19hY2Nlc3MoZGFidCkgKSBnb3RvIGJhZF93aWR0aDsK PiArCj4gKyAgICAgICAgVlBMMDExX0xPQ0soZCwgZmxhZ3MpOwo+ICsgICAgICAgIHZyZWdfcmVn MzJfY2xlYXJiaXRzKCZ2cGwwMTEtPnVhcnRyaXMsIHIsIGluZm8pOwo+ICsgICAgICAgIHZwbDAx MV91cGRhdGVfaW50ZXJydXB0X3N0YXR1cyhkKTsKPiArICAgICAgICBWUEwwMTFfVU5MT0NLKGQs IGZsYWdzKTsKPiArICAgICAgICByZXR1cm4gMTsKPiArCj4gKyAgICBkZWZhdWx0Ogo+ICsgICAg ICAgIGdwcmludGsoWEVOTE9HX0VSUiwgInZwbDAxMTogdW5oYW5kbGVkIHdyaXRlIHIlZCBvZmZz ZXQgJSMwOHhcbiIsCj4gKyAgICAgICAgICAgICAgICBkYWJ0LnJlZywgdnBsMDExX3JlZyk7Cj4g KyAgICAgICAgcmV0dXJuIDA7Cj4gKyAgICB9Cj4gKwo+ICt3cml0ZV9pZ25vcmU6Cj4gKyAgICBy ZXR1cm4gMTsKPiArCj4gK2JhZF93aWR0aDoKPiArICAgIGdwcmludGsoWEVOTE9HX0VSUiwgInZw bDAxMTogYmFkIHdyaXRlIHdpZHRoICVkIHIlZCBvZmZzZXQgJSMwOHhcbiIsCj4gKyAgICAgICAg ICAgIGRhYnQuc2l6ZSwgZGFidC5yZWcsIHZwbDAxMV9yZWcpOwo+ICsgICAgZG9tYWluX2NyYXNo X3N5bmNocm9ub3VzKCk7Cj4gKyAgICByZXR1cm4gMDsKPiArCj4gK30KPiArCj4gK3N0YXRpYyBj b25zdCBzdHJ1Y3QgbW1pb19oYW5kbGVyX29wcyB2cGwwMTFfbW1pb19oYW5kbGVyID0gewo+ICsg ICAgLnJlYWQgPSB2cGwwMTFfbW1pb19yZWFkLAo+ICsgICAgLndyaXRlID0gdnBsMDExX21taW9f d3JpdGUsCj4gK307Cj4gKwo+ICtzdGF0aWMgdm9pZCB2cGwwMTFfZGF0YV9hdmFpbChzdHJ1Y3Qg ZG9tYWluICpkKQo+ICt7Cj4gKyAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwo+ICsgICAgc3RydWN0 IHZwbDAxMSAqdnBsMDExID0gJmQtPmFyY2gudnBsMDExOwo+ICsgICAgc3RydWN0IHhlbmNvbnNf aW50ZXJmYWNlICppbnRmID0gdnBsMDExLT5yaW5nX2J1ZjsKPiArICAgIFhFTkNPTlNfUklOR19J RFggaW5fY29ucywgaW5fcHJvZCwgb3V0X2NvbnMsIG91dF9wcm9kOwo+ICsgICAgWEVOQ09OU19S SU5HX0lEWCBpbl9yaW5nX3FzaXplLCBvdXRfcmluZ19xc2l6ZTsKPiArCj4gKyAgICBWUEwwMTFf TE9DSyhkLCBmbGFncyk7Cj4gKwo+ICsgICAgaW5fY29ucyA9IGludGYtPmluX2NvbnM7Cj4gKyAg ICBpbl9wcm9kID0gaW50Zi0+aW5fcHJvZDsKPiArICAgIG91dF9jb25zID0gaW50Zi0+b3V0X2Nv bnM7Cj4gKyAgICBvdXRfcHJvZCA9IGludGYtPm91dF9wcm9kOwo+ICsKPiArICAgIHNtcF9ybWIo KTsKPiArCj4gKyAgICBpbl9yaW5nX3FzaXplID0geGVuY29uc19xdWV1ZWQoaW5fcHJvZCwKPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbl9jb25zLAo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihpbnRmLT5pbikpOwo+ICsKPiArICAgIG91 dF9yaW5nX3FzaXplID0geGVuY29uc19xdWV1ZWQob3V0X3Byb2QsCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG91dF9jb25zLAo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzaXplb2YoaW50Zi0+b3V0KSk7Cj4gKwo+ICsgICAgLyogVXBkYXRlIHRo ZSB1YXJ0IHJ4IHN0YXRlIGlmIHRoZSBidWZmZXIgaXMgbm90IGVtcHR5LiAqLwo+ICsgICAgaWYg KCBpbl9yaW5nX3FzaXplICE9IDAgKQo+ICsgICAgewo+ICsgICAgICAgIHZwbDAxMS0+dWFydGZy ICY9IH5SWEZFOwo+ICsgICAgICAgIGlmICggaW5fcmluZ19xc2l6ZSA9PSBzaXplb2YoaW50Zi0+ aW4pICkKPiArICAgICAgICAgICAgdnBsMDExLT51YXJ0ZnIgfD0gUlhGRjsKPiArICAgICAgICB2 cGwwMTEtPnVhcnRyaXMgfD0gUlhJOwo+ICsgICAgfQo+ICsKPiArICAgIC8qIFVwZGF0ZSB0aGUg dWFydCB0eCBzdGF0ZSBpZiB0aGUgYnVmZmVyIGlzIG5vdCBmdWxsLiAqLwo+ICsgICAgaWYgKCBv dXRfcmluZ19xc2l6ZSAhPSBzaXplb2YoaW50Zi0+b3V0KSApCj4gKyAgICB7Cj4gKyAgICAgICAg dnBsMDExLT51YXJ0ZnIgJj0gflRYRkY7Cj4gKyAgICAgICAgdnBsMDExLT51YXJ0cmlzIHw9IFRY STsKPiArICAgICAgICBpZiAoIG91dF9yaW5nX3FzaXplID09IDAgKQo+ICsgICAgICAgIHsKPiAr ICAgICAgICAgICAgdnBsMDExLT51YXJ0ZnIgJj0gfkJVU1k7Cj4gKyAgICAgICAgICAgIHZwbDAx MS0+dWFydGZyIHw9IFRYRkU7Cj4gKyAgICAgICAgfQo+ICsgICAgfQo+ICsKPiArICAgIHZwbDAx MV91cGRhdGVfaW50ZXJydXB0X3N0YXR1cyhkKTsKPiArCj4gKyAgICBWUEwwMTFfVU5MT0NLKGQs IGZsYWdzKTsKPiArfQo+ICsKPiArCj4gK3N0YXRpYyB2b2lkIHZwbDAxMV9ub3RpZmljYXRpb24o c3RydWN0IHZjcHUgKnYsIHVuc2lnbmVkIGludCBwb3J0KQo+ICt7Cj4gKyAgICB2cGwwMTFfZGF0 YV9hdmFpbCh2LT5kb21haW4pOwo+ICt9Cj4gKwo+ICtpbnQgZG9tYWluX3ZwbDAxMV9pbml0KHN0 cnVjdCBkb21haW4gKmQsIHN0cnVjdCB2cGwwMTFfaW5pdF9pbmZvICppbmZvKQo+ICt7Cj4gKyAg ICBpbnQgcmM7Cj4gKyAgICBzdHJ1Y3QgdnBsMDExICp2cGwwMTEgPSAmZC0+YXJjaC52cGwwMTE7 Cj4gKwo+ICsgICAgaWYgKCB2cGwwMTEtPnJpbmdfYnVmICkKPiArICAgICAgICByZXR1cm4gLUVJ TlZBTDsKPiArCj4gKyAgICAvKiBNYXAgdGhlIGd1ZXN0IFBGTiB0byBYZW4gYWRkcmVzcyBzcGFj ZS4gKi8KPiArICAgIHJjID0gIHByZXBhcmVfcmluZ19mb3JfaGVscGVyKGQsCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBnZm5feChpbmZvLT5nZm4pLAo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJnZwbDAxMS0+cmluZ19wYWdlLAo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJnZwbDAxMS0+cmluZ19idWYpOwo+ICsgICAgaWYgKCBy YyA8IDAgKQo+ICsgICAgICAgIGdvdG8gb3V0Owo+ICsKPiArICAgIHJjID0gdmdpY19yZXNlcnZl X3ZpcnEoZCwgR1VFU1RfVlBMMDExX1NQSSk7Cj4gKyAgICBpZiAoICFyYyApCj4gKyAgICB7Cj4g KyAgICAgICAgcmMgPSAtRUlOVkFMOwo+ICsgICAgICAgIGdvdG8gb3V0MTsKPiArICAgIH0KPiAr Cj4gKyAgICByYyA9IGFsbG9jX3VuYm91bmRfeGVuX2V2ZW50X2NoYW5uZWwoZCwgMCwgaW5mby0+ Y29uc29sZV9kb21pZCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB2cGwwMTFfbm90aWZpY2F0aW9uKTsKPiArICAgIGlmICggcmMgPCAwICkKPiArICAgICAgICBn b3RvIG91dDI7Cj4gKwo+ICsgICAgdnBsMDExLT5ldnRjaG4gPSBpbmZvLT5ldnRjaG4gPSByYzsK PiArCj4gKyAgICBzcGluX2xvY2tfaW5pdCgmdnBsMDExLT5sb2NrKTsKPiArCj4gKyAgICByZWdp c3Rlcl9tbWlvX2hhbmRsZXIoZCwgJnZwbDAxMV9tbWlvX2hhbmRsZXIsCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgR1VFU1RfUEwwMTFfQkFTRSwgR1VFU1RfUEwwMTFfU0laRSwgTlVMTCk7 Cj4gKwo+ICsgICAgcmV0dXJuIDA7Cj4gKwo+ICtvdXQyOgo+ICsgICAgdmdpY19mcmVlX3ZpcnEo ZCwgR1VFU1RfVlBMMDExX1NQSSk7Cj4gKwo+ICtvdXQxOgo+ICsgICAgZGVzdHJveV9yaW5nX2Zv cl9oZWxwZXIoJnZwbDAxMS0+cmluZ19idWYsIHZwbDAxMS0+cmluZ19wYWdlKTsKPiArCj4gK291 dDoKPiArICAgIHJldHVybiByYzsKPiArfQo+ICsKPiArdm9pZCBkb21haW5fdnBsMDExX2RlaW5p dChzdHJ1Y3QgZG9tYWluICpkKQo+ICt7Cj4gKyAgICBzdHJ1Y3QgdnBsMDExICp2cGwwMTEgPSAm ZC0+YXJjaC52cGwwMTE7Cj4gKwo+ICsgICAgaWYgKCAhdnBsMDExLT5yaW5nX2J1ZiApCj4gKyAg ICAgICAgcmV0dXJuOwo+ICsKPiArICAgIGZyZWVfeGVuX2V2ZW50X2NoYW5uZWwoZCwgdnBsMDEx LT5ldnRjaG4pOwo+ICsgICAgZGVzdHJveV9yaW5nX2Zvcl9oZWxwZXIoJnZwbDAxMS0+cmluZ19i dWYsIHZwbDAxMS0+cmluZ19wYWdlKTsKPiArICAgIHhmcmVlKGQtPmFyY2gudm1taW8uaGFuZGxl cnMpOwo+ICt9Cj4gKwo+ICsvKgo+ICsgKiBMb2NhbCB2YXJpYWJsZXM6Cj4gKyAqIG1vZGU6IEMK PiArICogYy1maWxlLXN0eWxlOiAiQlNEIgo+ICsgKiBjLWJhc2ljLW9mZnNldDogNAo+ICsgKiBp bmRlbnQtdGFicy1tb2RlOiBuaWwKPiArICogRW5kOgo+ICsgKi8KPiBkaWZmIC0tZ2l0IGEveGVu L2luY2x1ZGUvYXNtLWFybS9kb21haW4uaCBiL3hlbi9pbmNsdWRlL2FzbS1hcm0vZG9tYWluLmgK PiBpbmRleCA4ZGZjMWQxLi4xYTExNDVkIDEwMDY0NAo+IC0tLSBhL3hlbi9pbmNsdWRlL2FzbS1h cm0vZG9tYWluLmgKPiArKysgYi94ZW4vaW5jbHVkZS9hc20tYXJtL2RvbWFpbi5oCj4gQEAgLTEx LDYgKzExLDcgQEAKPiAgI2luY2x1ZGUgPHB1YmxpYy9odm0vcGFyYW1zLmg+Cj4gICNpbmNsdWRl IDx4ZW4vc2VyaWFsLmg+Cj4gICNpbmNsdWRlIDx4ZW4vcmJ0cmVlLmg+Cj4gKyNpbmNsdWRlIDxh c20tYXJtL3ZwbDAxMS5oPgo+ICAKPiAgc3RydWN0IGh2bV9kb21haW4KPiAgewo+IEBAIC0xNDUs NiArMTQ2LDExIEBAIHN0cnVjdCBhcmNoX2RvbWFpbgo+ICAgICAgc3RydWN0IHsKPiAgICAgICAg ICB1aW50OF90IHByaXZpbGVnZWRfY2FsbF9lbmFibGVkIDogMTsKPiAgICAgIH0gbW9uaXRvcjsK PiArCj4gKyNpZmRlZiBDT05GSUdfU0JTQV9WVUFSVF9DT05TT0xFCj4gKyAgICBzdHJ1Y3QgdnBs MDExIHZwbDAxMTsKPiArI2VuZGlmCj4gKwo+ICB9ICBfX2NhY2hlbGluZV9hbGlnbmVkOwo+ICAK PiAgc3RydWN0IGFyY2hfdmNwdQo+IGRpZmYgLS1naXQgYS94ZW4vaW5jbHVkZS9hc20tYXJtL3Bs MDExLXVhcnQuaCBiL3hlbi9pbmNsdWRlL2FzbS1hcm0vcGwwMTEtdWFydC5oCj4gaW5kZXggMTIz ZjQ3Ny4uNTdlOWVjNyAxMDA2NDQKPiAtLS0gYS94ZW4vaW5jbHVkZS9hc20tYXJtL3BsMDExLXVh cnQuaAo+ICsrKyBiL3hlbi9pbmNsdWRlL2FzbS1hcm0vcGwwMTEtdWFydC5oCj4gQEAgLTQ5LDYg KzQ5LDggQEAKPiAgLyogRlIgYml0cyAqLwo+ICAjZGVmaW5lIFRYRkUgICAoMTw8NykgLyogVFgg RklGTyBlbXB0eSAqLwo+ICAjZGVmaW5lIFJYRkUgICAoMTw8NCkgLyogUlggRklGTyBlbXB0eSAq Lwo+ICsjZGVmaW5lIFRYRkYgICAoMTw8NSkgLyogVFggRklGTyBmdWxsICovCj4gKyNkZWZpbmUg UlhGRiAgICgxPDw2KSAvKiBSWCBGSUZPIGZ1bGwgKi8KPiAgI2RlZmluZSBCVVNZICAgKDE8PDMp IC8qIFRyYW5zbWl0IGlzIG5vdCBjb21wbGV0ZSAqLwo+ICAKPiAgLyogTENSX0ggYml0cyAqLwo+ IGRpZmYgLS1naXQgYS94ZW4vaW5jbHVkZS9hc20tYXJtL3ZwbDAxMS5oIGIveGVuL2luY2x1ZGUv YXNtLWFybS92cGwwMTEuaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4u ZjFjNjcxNgo+IC0tLSAvZGV2L251bGwKPiArKysgYi94ZW4vaW5jbHVkZS9hc20tYXJtL3ZwbDAx MS5oCj4gQEAgLTAsMCArMSw3MyBAQAo+ICsvKgo+ICsgKiBpbmNsdWRlL3hlbi92cGwwMTEuaAo+ ICsgKgo+ICsgKiBWaXJ0dWFsIFBMMDExIFVBUlQKPiArICoKPiArICogVGhpcyBwcm9ncmFtIGlz IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQK PiArICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSwKPiArICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbi4KPiArICoKPiArICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1 dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAo+ICsgKiBBTlkg V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFC SUxJVFkgb3IKPiArICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgo+ICsgKiBtb3JlIGRldGFpbHMuCj4gKyAq Cj4gKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKPiArICogdGhpcyBwcm9ncmFtOyBJZiBub3QsIHNl ZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCj4gKyAqLwo+ICsKPiArI2lmbmRlZiBf VlBMMDExX0hfCj4gKyNkZWZpbmUgX1ZQTDAxMV9IXwo+ICsKPiArI2luY2x1ZGUgPHB1YmxpYy9k b21jdGwuaD4KPiArI2luY2x1ZGUgPHB1YmxpYy9pby9yaW5nLmg+Cj4gKyNpbmNsdWRlIDxhc20t YXJtL3ZyZWcuaD4KPiArI2luY2x1ZGUgPHhlbi9tbS5oPgo+ICsKPiArLyogaGVscGVyIG1hY3Jv cyAqLwo+ICsjZGVmaW5lIFZQTDAxMV9MT0NLKGQsZmxhZ3MpIHNwaW5fbG9ja19pcnFzYXZlKCYo ZCktPmFyY2gudnBsMDExLmxvY2ssIGZsYWdzKQo+ICsjZGVmaW5lIFZQTDAxMV9VTkxPQ0soZCxm bGFncykgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmKGQpLT5hcmNoLnZwbDAxMS5sb2NrLCBmbGFn cykKPiArCj4gK3N0cnVjdCB2cGwwMTEgewo+ICsgICAgdm9pZCAqcmluZ19idWY7Cj4gKyAgICBz dHJ1Y3QgcGFnZV9pbmZvICpyaW5nX3BhZ2U7Cj4gKyAgICB1aW50MzJfdCAgICB1YXJ0ZnI7ICAg ICAgICAgLyogRmxhZyByZWdpc3RlciAqLwo+ICsgICAgdWludDMyX3QgICAgdWFydGNyOyAgICAg ICAgIC8qIENvbnRyb2wgcmVnaXN0ZXIgKi8KPiArICAgIHVpbnQzMl90ICAgIHVhcnRpbXNjOyAg ICAgICAvKiBJbnRlcnJ1cHQgbWFzayByZWdpc3RlciovCj4gKyAgICB1aW50MzJfdCAgICB1YXJ0 aWNyOyAgICAgICAgLyogSW50ZXJydXB0IGNsZWFyIHJlZ2lzdGVyICovCj4gKyAgICB1aW50MzJf dCAgICB1YXJ0cmlzOyAgICAgICAgLyogUmF3IGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIgKi8K PiArICAgIHVpbnQzMl90ICAgIHNoYWRvd191YXJ0cmlzOyAvKiBzaGFkb3dlZCBSYXcgaW50ZXJy dXB0IHN0YXR1cyByZWdpc3RlciAqLwo+ICsgICAgdWludDMyX3QgICAgdWFydG1pczsgICAgICAg IC8qIE1hc2tlZCBpbnRlcnJ1cHQgcmVnaXN0ZXIgKi8KPiArICAgIHNwaW5sb2NrX3QgIGxvY2s7 Cj4gKyAgICBldnRjaG5fcG9ydF90IGV2dGNobjsKPiArfTsKPiArCj4gK3N0cnVjdCB2cGwwMTFf aW5pdF9pbmZvIHsKPiArICAgIHVpbnQzMl90IGNvbnNvbGVfZG9taWQ7Cj4gKyAgICBnZm5fdCBn Zm47Cj4gKyAgICBldnRjaG5fcG9ydF90IGV2dGNobjsKPiArfTsKPiArCj4gKyNpZmRlZiBDT05G SUdfU0JTQV9WVUFSVF9DT05TT0xFCj4gK2ludCBkb21haW5fdnBsMDExX2luaXQoc3RydWN0IGRv bWFpbiAqZCwKPiArICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdnBsMDExX2luaXRfaW5m byAqaW5mbyk7Cj4gK3ZvaWQgZG9tYWluX3ZwbDAxMV9kZWluaXQoc3RydWN0IGRvbWFpbiAqZCk7 Cj4gKyNlbHNlCj4gK3N0YXRpYyBpbmxpbmUgaW50IGRvbWFpbl92cGwwMTFfaW5pdChzdHJ1Y3Qg ZG9tYWluICpkLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0 IHZwbDAxMV9pbml0X2luZm8gKmluZm8pCj4gK3sKPiArICAgIHJldHVybiAtRU5PU1lTOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHZvaWQgZG9tYWluX3ZwbDAxMV9kZWluaXQoc3RydWN0IGRv bWFpbiAqZCkgeyB9Cj4gKyNlbmRpZgo+ICsjZW5kaWYKPiArCj4gKy8qCj4gKyAqIExvY2FsIHZh cmlhYmxlczoKPiArICogbW9kZTogQwo+ICsgKiBjLWZpbGUtc3R5bGU6ICJCU0QiCj4gKyAqIGMt YmFzaWMtb2Zmc2V0OiA0Cj4gKyAqIGluZGVudC10YWJzLW1vZGU6IG5pbAo+ICsgKiBFbmQ6Cj4g KyAqLwo+IGRpZmYgLS1naXQgYS94ZW4vaW5jbHVkZS9wdWJsaWMvYXJjaC1hcm0uaCBiL3hlbi9p bmNsdWRlL3B1YmxpYy9hcmNoLWFybS5oCj4gaW5kZXggYmQ5NzRmYi4uODVhYjY2NSAxMDA2NDQK PiAtLS0gYS94ZW4vaW5jbHVkZS9wdWJsaWMvYXJjaC1hcm0uaAo+ICsrKyBiL3hlbi9pbmNsdWRl L3B1YmxpYy9hcmNoLWFybS5oCj4gQEAgLTQxMCw2ICs0MTAsMTAgQEAgdHlwZWRlZiB1aW50NjRf dCB4ZW5fY2FsbGJhY2tfdDsKPiAgI2RlZmluZSBHVUVTVF9BQ1BJX0JBU0UgMHgyMDAwMDAwMFVM TAo+ICAjZGVmaW5lIEdVRVNUX0FDUElfU0laRSAweDAyMDAwMDAwVUxMCj4gIAo+ICsvKiBQTDAx MSBtYXBwaW5ncyAqLwo+ICsjZGVmaW5lIEdVRVNUX1BMMDExX0JBU0UgICAgMHgyMjAwMDAwMFVM TAo+ICsjZGVmaW5lIEdVRVNUX1BMMDExX1NJWkUgICAgMHgwMDAwMTAwMFVMTAo+ICsKPiAgLyoK PiAgICogMTZNQiA9PSA0MDk2IHBhZ2VzIHJlc2VydmVkIGZvciBndWVzdCB0byB1c2UgYXMgYSBy ZWdpb24gdG8gbWFwIGl0cwo+ICAgKiBncmFudCB0YWJsZSBpbi4KPiBAQCAtNDQ0LDYgKzQ0OCw4 IEBAIHR5cGVkZWYgdWludDY0X3QgeGVuX2NhbGxiYWNrX3Q7Cj4gICNkZWZpbmUgR1VFU1RfVElN RVJfUEhZU19OU19QUEkgMzAKPiAgI2RlZmluZSBHVUVTVF9FVlRDSE5fUFBJICAgICAgICAzMQo+ ICAKPiArI2RlZmluZSBHVUVTVF9WUEwwMTFfU1BJICAgICAgICAzMgo+ICsKPiAgLyogUFNDSSBm dW5jdGlvbnMgKi8KPiAgI2RlZmluZSBQU0NJX2NwdV9zdXNwZW5kIDAKPiAgI2RlZmluZSBQU0NJ X2NwdV9vZmYgICAgIDEKPiAtLSAKPiAyLjcuNAo+IAoKX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxA bGlzdHMueGVuLm9yZwpodHRwczovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==