From mboxrd@z Thu Jan 1 00:00:00 1970 From: Stefano Stabellini Subject: Re: [PATCH 03/12 v3] xen/arm: vpl011: Add pl011 uart emulation in Xen Date: Tue, 16 May 2017 15:42:38 -0700 (PDT) Message-ID: References: <1494426293-32481-1-git-send-email-bhupinder.thakur@linaro.org> <1494426293-32481-3-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.bemta5.messagelabs.com ([195.245.231.135]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dAlAx-0006vr-U4 for xen-devel@lists.xenproject.org; Tue, 16 May 2017 22:42:44 +0000 In-Reply-To: <1494426293-32481-3-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 List-Id: xen-devel@lists.xenproject.org T24gV2VkLCAxMCBNYXkgMjAxNywgQmh1cGluZGVyIFRoYWt1ciB3cm90ZToKPiBBZGQgZW11bGF0 aW9uIGNvZGUgdG8gZW11bGF0ZSByZWFkL3dyaXRlIGFjY2VzcyB0byBwbDAxMSByZWdpc3RlcnMK PiBhbmQgcGwwMTEgaW50ZXJydXB0czoKPiAKPiAgICAgLSBFbXVsYXRlIERSIHJlYWQvd3JpdGUg YnkgcmVhZGluZyBhbmQgd3JpdGluZyBmcm9tL3RvIHRoZSBJTgo+ICAgICAgIGFuZCBPVVQgcmlu ZyBidWZmZXJzIGFuZCByYWlzaW5nIGFuIGV2ZW50IHRvIHRoZSBiYWNrZW5kIHdoZW4KPiAgICAg ICB0aGVyZSBpcyBkYXRhIGluIHRoZSBPVVQgcmluZyBidWZmZXIgYW5kIGluamVjdGluZyBhbiBp bnRlcnJ1cHQKPiAgICAgICB0byB0aGUgZ3Vlc3Qgd2hlbiB0aGVyZSBpcyBkYXRhIGluIHRoZSBJ TiByaW5nIGJ1ZmZlcgo+IAo+ICAgICAtIE90aGVyIHJlZ2lzdGVycyBhcmUgcmVsYXRlZCB0byBp bnRlcnJ1cHQgbWFuYWdlbWVudCBhbmQKPiAgICAgICBlc3NlbnRpYWxseSBjb250cm9sIHdoZW4g aW50ZXJydXB0cyBhcmUgZGVsaXZlcmVkIHRvIHRoZSBndWVzdAo+IAo+IFRoZSBTQlNBIGNvbXBs aWFudCBwbDAxMSB1YXJ0IGlzIGNvdmVyZWQgaW4gQXBwZW5kaXggQiBvZgo+IGh0dHBzOi8vc3Rh dGljLmRvY3MuYXJtLmNvbS9kZW4wMDI5L2EvU2VydmVyX0Jhc2VfU3lzdGVtX0FyY2hpdGVjdHVy ZV92M18xX0FSTV9ERU5fMDAyOUEucGRmCj4gCj4gU2lnbmVkLW9mZi1ieTogQmh1cGluZGVyIFRo YWt1ciA8Ymh1cGluZGVyLnRoYWt1ckBsaW5hcm8ub3JnPgo+IC0tLQo+IAo+IENoYW5nZXMgc2lu Y2UgdjI6Cj4gCj4gLSBVc2UgZ2VuZXJpYyB2cmVnX3JlZyogZm9yIHJlYWQvd3JpdGUgb2YgcmVn aXN0ZXJzIGVtdWxhdGluZyBwbDAxMS4KPiAtIFVzZSBnZW5lcmljIHJpbmcgYnVmZmVyIGZ1bmN0 aW9ucyBkZWZpbmVkIHVzaW5nIERFRklORV9YRU5fRkxFWF9SSU5HLgo+IC0gUmVuYW1lZCB0aGUg U1BJIGluamVjdGlvbiBmdW5jdGlvbiB0byB2cGwwMTFfdXBkYXRlX3NwaSgpIHRvIHJlZmxlY3Qg bGV2ZWwgCj4gICB0cmlnZ2VyZWQgbmF0dXJlIG9mIHBsMDExIGludGVycnVwdHMuCj4gLSBUaGUg cGwwMTEgcmVnaXN0ZXIgYWNjZXNzIGFkZHJlc3Mgc2hvdWxkIGFsd2F5cyBiZSB0aGUgYmFzZSBh ZGRyZXNzIG9mIHRoZQo+ICAgY29ycmVzcG9uZGluZyByZWdpc3RlciBhcyBwZXIgc2VjdGlvbiBC IG9mIHRoZSBTQlNBIGRvY3VtZW50LiBGb3IgdGhpcyByZWFzb24sCj4gICB0aGUgcmVnaXN0ZXIg cmFuZ2UgYWRkcmVzcyBhY2Nlc3MgaXMgbm90IGFsbG93ZWQuCj4gCj4gQ2hhbmdlcyBzaW5jZSB2 MToKPiAKPiAtIFJlbW92ZWQgdGhlIG9wdGltaXp0aW9uIHJlbGF0ZWQgdG8gc2VuZGlpbmcgZXZl bnRzIHRvIHhlbmNvbnNvbGUgCj4gLSBVc2UgbG9jYWwgdmFyaWFibGVzIGFzIHJpbmcgYnVmZmVy IGluZGljZXMgd2hpbGUgdXNpbmcgdGhlIHJpbmcgYnVmZmVyCj4gCj4gIHhlbi9hcmNoL2FybS9L Y29uZmlnICAgICAgICAgICAgIHwgICA1ICsKPiAgeGVuL2FyY2gvYXJtL01ha2VmaWxlICAgICAg ICAgICAgfCAgIDEgKwo+ICB4ZW4vYXJjaC9hcm0vdnBsMDExLmMgICAgICAgICAgICB8IDM1MCAr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiAgeGVuL2luY2x1ZGUvYXNt LWFybS9kb21haW4uaCAgICAgfCAgIDYgKwo+ICB4ZW4vaW5jbHVkZS9hc20tYXJtL3BsMDExLXVh cnQuaCB8ICAgMiArCj4gIHhlbi9pbmNsdWRlL2FzbS1hcm0vdnBsMDExLmggICAgIHwgIDk0ICsr KysrKysrKysrCj4gIHhlbi9pbmNsdWRlL3B1YmxpYy9hcmNoLWFybS5oICAgIHwgICA4ICsKPiAg NyBmaWxlcyBjaGFuZ2VkLCA0NjYgaW5zZXJ0aW9ucygrKQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQg eGVuL2FyY2gvYXJtL3ZwbDAxMS5jCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCB4ZW4vaW5jbHVkZS9h c20tYXJtL3ZwbDAxMS5oCj4gCj4gZGlmZiAtLWdpdCBhL3hlbi9hcmNoL2FybS9LY29uZmlnIGIv eGVuL2FyY2gvYXJtL0tjb25maWcKPiBpbmRleCBkNDZiOThjLi5jMWEwZTdmIDEwMDY0NAo+IC0t LSBhL3hlbi9hcmNoL2FybS9LY29uZmlnCj4gKysrIGIveGVuL2FyY2gvYXJtL0tjb25maWcKPiBA QCAtNTAsNiArNTAsMTEgQEAgY29uZmlnIEhBU19JVFMKPiAgICAgICAgICBwcm9tcHQgIkdJQ3Yz IElUUyBNU0kgY29udHJvbGxlciBzdXBwb3J0IiBpZiBFWFBFUlQgPSAieSIKPiAgICAgICAgICBk ZXBlbmRzIG9uIEhBU19HSUNWMwo+ICAKPiArY29uZmlnIFZQTDAxMV9DT05TT0xFCj4gKwlib29s ICJFbXVsYXRlZCBwbDAxMSBjb25zb2xlIHN1cHBvcnQiCj4gKwlkZWZhdWx0IHkKPiArCS0tLWhl bHAtLS0KPiArCSAgQWxsb3dzIGEgZ3Vlc3QgdG8gdXNlIHBsMDExIFVBUlQgYXMgYSBjb25zb2xl Cj4gIGVuZG1lbnUKPiAgCj4gIG1lbnUgIkFSTSBlcnJhdGEgd29ya2Fyb3VuZCB2aWEgdGhlIGFs dGVybmF0aXZlIGZyYW1ld29yayIKPiBkaWZmIC0tZ2l0IGEveGVuL2FyY2gvYXJtL01ha2VmaWxl IGIveGVuL2FyY2gvYXJtL01ha2VmaWxlCj4gaW5kZXggNDllMWZiMi4uMTVlZmMxMyAxMDA2NDQK PiAtLS0gYS94ZW4vYXJjaC9hcm0vTWFrZWZpbGUKPiArKysgYi94ZW4vYXJjaC9hcm0vTWFrZWZp bGUKPiBAQCAtNTIsNiArNTIsNyBAQCBvYmoteSArPSB2bV9ldmVudC5vCj4gIG9iai15ICs9IHZ0 aW1lci5vCj4gIG9iai15ICs9IHZwc2NpLm8KPiAgb2JqLXkgKz0gdnVhcnQubwo+ICtvYmotJChD T05GSUdfVlBMMDExX0NPTlNPTEUpICs9IHZwbDAxMS5vCj4gIAo+ICAjb2JqLWJpbi15ICs9IC4u Li5vCj4gIAo+IGRpZmYgLS1naXQgYS94ZW4vYXJjaC9hcm0vdnBsMDExLmMgYi94ZW4vYXJjaC9h cm0vdnBsMDExLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLjJmNzEx NDgKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIveGVuL2FyY2gvYXJtL3ZwbDAxMS5jCj4gQEAgLTAs MCArMSwzNTAgQEAKPiArLyoKPiArICogYXJjaC9hcm0vdnBsMDExLmMKPiArICoKPiArICogVmly dHVhbCBQTDAxMSBVQVJUCj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Cj4gKyAqIHVuZGVyIHRo ZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Us Cj4gKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb24uCj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w ZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKPiArICogQU5ZIFdBUlJBTlRZOyB3aXRo b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCj4gKyAq IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBmb3IKPiArICogbW9yZSBkZXRhaWxzLgo+ICsgKgo+ICsgKiBZb3Ugc2hv dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBhbG9uZyB3aXRoCj4gKyAqIHRoaXMgcHJvZ3JhbTsgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cu Z251Lm9yZy9saWNlbnNlcy8+Lgo+ICsgKi8KPiArCj4gKyNpbmNsdWRlIDx4ZW4vZXJybm8uaD4K PiArI2luY2x1ZGUgPHhlbi9ldmVudC5oPgo+ICsjaW5jbHVkZSA8eGVuL2d1ZXN0X2FjY2Vzcy5o Pgo+ICsjaW5jbHVkZSA8eGVuL2luaXQuaD4KPiArI2luY2x1ZGUgPHhlbi9saWIuaD4KPiArI2lu Y2x1ZGUgPHhlbi9zY2hlZC5oPgo+ICsjaW5jbHVkZSA8cHVibGljL2lvL2NvbnNvbGUuaD4KPiAr I2luY2x1ZGUgPGFzbS1hcm0vcGwwMTEtdWFydC5oPgo+ICsjaW5jbHVkZSA8YXNtLWFybS92Z2lj LWVtdWwuaD4KPiArI2luY2x1ZGUgPGFzbS1hcm0vdnBsMDExLmg+Cj4gKwo+ICtzdGF0aWMgYm9v bCB2cGwwMTFfcmVnMzJfY2hlY2tfYWNjZXNzKGludCBzaXplKQo+ICt7Cj4gKyAgICByZXR1cm4g KHNpemUgPT0gREFCVF9ET1VCTEVfV09SRCk/IGZhbHNlIDogdHJ1ZTsKPiArfQo+ICsKPiArc3Rh dGljIHZvaWQgdnBsMDExX3VwZGF0ZV9zcGkoc3RydWN0IGRvbWFpbiAqZCkKPiArewo+ICsgICAg c3RydWN0IHZwbDAxMV9zICp2cGwwMTEgPSAmZC0+YXJjaC52cGwwMTE7Cj4gKwo+ICsgICAgaWYg KCB2cGwwMTEtPnVhcnRyaXMgJiB2cGwwMTEtPnVhcnRpbXNjICkKPiArICAgICAgICB2Z2ljX3Zj cHVfaW5qZWN0X3NwaShkLCBHVUVTVF9WUEwwMTFfU1BJKTsKPiArfQo+ICsKPiArc3RhdGljIHZv aWQgdnBsMDExX3JlYWRfZGF0YShzdHJ1Y3QgZG9tYWluICpkLCB1aW50OF90ICpkYXRhKQo+ICt7 Cj4gKyAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwo+ICsgICAgc3RydWN0IHZwbDAxMV9zICp2cGww MTEgPSAmZC0+YXJjaC52cGwwMTE7Cj4gKyAgICBzdHJ1Y3QgeGVuY29uc19pbnRlcmZhY2UgKmlu dGYgPSB2cGwwMTEtPnJpbmdfYnVmOwo+ICsKPiArICAgIC8qCj4gKyAgICAgKiBJbml0aWFsaXpl IHRoZSBkYXRhIHNvIHRoYXQgZXZlbiBpZiB0aGVyZSBpcyBubyBkYXRhIGluIHJpbmcgYnVmZmVy Cj4gKyAgICAgKiAwIGlzIHJldHVybmVkLgo+ICsgICAgICovCj4gKyAgICAqZGF0YSA9IDA7Cj4g Kwo+ICsgICAgVlBMMDExX0xPQ0soZCwgZmxhZ3MpOwo+ICsKPiArICAgIC8qCj4gKyAgICAgKiBJ dCBpcyBleHBlY3RlZCB0aGF0IHRoZXJlIHdpbGwgYmUgZGF0YSBpbiB0aGUgcmluZyBidWZmZXIg d2hlbiB0aGlzCj4gKyAgICAgKiBmdW5jdGlvbiBpcyBjYWxsZWQgc2luY2UgdGhlIGd1ZXN0IGlz IGV4cGVjdGVkIHRvIHJlYWQgdGhlIGRhdGEgcmVnaXN0ZXIKPiArICAgICAqIG9ubHkgaWYgdGhl IFRYRkUgZmxhZyBpcyBub3Qgc2V0Lgo+ICsgICAgICogSWYgdGhlIGd1ZXN0IHN0aWxsIGRvZXMg cmVhZCB3aGVuIFRYRkUgYml0IGlzIHNldCB0aGVuIDAgd2lsbCBiZSByZXR1cm5lZC4KPiArICAg ICAqLwo+ICsgICAgaWYgKCAhVlBMMDExX0lOX1JJTkdfRU1QVFkoaW50ZikgKQoKU2ltaWxhciB0 byB2cGwwMTFfZGF0YV9hdmFpbCwgd2UgbmVlZCB0byByZWFkIHRoZSByaW5nIGluZGV4ZXMgb25s eSBvbmNlCnRvIGxvY2FsIHZhcmlhYmxlcyB0byB2b2lkIGRlYWxpbmcgd2l0aCB0aGllciBydW50 aW1lIGNoYW5nZXMuIFNvbWV0aGluZwpsaWtlOgoKICAgIGluX3Byb2QgPSBpbnRmLT5pbl9wcm9k OwogICAgaW5fY29ucyA9IGludGYtPmluX2NvbnM7CiAgICBzbWJfcm1iKCk7CgogICAgaWYgKCB2 cGwwMTFfcXVldWVkKGluX3Byb2QsIGluX2NvbnMsIFZQTDAxMV9SSU5HX01BWF9ERVBUSChpbnRm LCBpbikpID4gMCApIHsKICAgICAgICAqZGF0YSA9IGludGYtPmluW1ZQTDAxMV9SSU5HX0lEWF9N QVNLKGluX2NvbnMsIGludGYtPmluKV07CiAgICAgICAgaW5fY29ucyArPSAxOwogICAgICAgIGlu dGYtPmluX2NvbnMgPSBpbl9jb25zOwogICAgICAgIHNtcF9tYigpOwogICAgfQoKICAgIGlmICgg dnBsMDExX3F1ZXVlZChpbl9wcm9kLCBpbl9jb25zLCBWUEwwMTFfUklOR19NQVhfREVQVEgoaW50 ZiwgaW4pKSA9PSAwICkgewoKICAgIDxyZXN0IG9mIHRoZSBjb2RlPgoKCj4gKyAgICB7Cj4gKyAg ICAgICAgWEVOQ09OU19SSU5HX0lEWCBpbl9jb25zID0gaW50Zi0+aW5fY29uczsKPiArICAgICAg ICAqZGF0YSA9IGludGYtPmluW1ZQTDAxMV9SSU5HX0lEWF9NQVNLKGluX2NvbnMsIGludGYtPmlu KV07Cj4gKyAgICAgICAgc21wX21iKCk7Cj4gKyAgICAgICAgaW50Zi0+aW5fY29ucyA9IGluX2Nv bnMgKyAxOwo+ICsgICAgfQo+ICsKPiArICAgIGlmICggVlBMMDExX0lOX1JJTkdfRU1QVFkoaW50 ZikgKQo+ICsgICAgewo+ICsgICAgICAgIHZwbDAxMS0+dWFydGZyIHw9IFJYRkU7Cj4gKyAgICAg ICAgdnBsMDExLT51YXJ0cmlzICY9IH5SWEk7Cj4gKyAgICB9Cj4gKyAgICB2cGwwMTEtPnVhcnRm ciAmPSB+UlhGRjsKPiArICAgIFZQTDAxMV9VTkxPQ0soZCwgZmxhZ3MpOwo+ICsKPiArICAgIG5v dGlmeV92aWFfeGVuX2V2ZW50X2NoYW5uZWwoZCwgdnBsMDExLT5ldnRjaG4pOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgdm9pZCB2cGwwMTFfd3JpdGVfZGF0YShzdHJ1Y3QgZG9tYWluICpkLCB1aW50OF90 IGRhdGEpCj4gK3sKPiArICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gKyAgICBzdHJ1Y3QgdnBs MDExX3MgKnZwbDAxMSA9ICZkLT5hcmNoLnZwbDAxMTsKPiArICAgIHN0cnVjdCB4ZW5jb25zX2lu dGVyZmFjZSAqaW50ZiA9IHZwbDAxMS0+cmluZ19idWY7Cj4gKwo+ICsgICAgVlBMMDExX0xPQ0so ZCwgZmxhZ3MpOwo+ICsKPiArICAgIC8qCj4gKyAgICAgKiBJdCBpcyBleHBlY3RlZCB0aGF0IHRo ZSByaW5nIGlzIG5vdCBmdWxsIHdoZW4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQKPiArICAgICAq IGFzIHRoZSBndWVzdCBpcyBleHBlY3RlZCB0byB3cml0ZSB0byB0aGUgZGF0YSByZWdpc3RlciBv bmx5IHdoZW4gdGhlCj4gKyAgICAgKiBUWEZGIGZsYWcgaXMgbm90IHNldC4KPiArICAgICAqIElu IGNhc2UgdGhlIGd1ZXN0IGRvZXMgd3JpdGUgZXZlbiB3aGVuIHRoZSBUWEZGIGZsYWcgaXMgc2V0 IHRoZW4gdGhlCj4gKyAgICAgKiBkYXRhIHdpbGwgYmUgc2lsZW50bHkgZHJvcHBlZC4KPiArICAg ICAqLwo+ICsgICAgaWYgKCAhVlBMMDExX09VVF9SSU5HX0ZVTEwoaW50ZikgKQoKU2FtZSBoZXJl OgoKICAgIG91dF9wcm9kID0gaW50Zi0+b3V0X3Byb2Q7CiAgICBvdXRfY29ucyA9IGludGYtPm91 dF9jb25zOwogICAgc21iX21iKCk7CgogICAgaWYgKCB2cGwwMTFfcXVldWVkKG91dF9wcm9kLCBv dXRfY29ucywgVlBMMDExX1JJTkdfTUFYX0RFUFRIKGludGYsIG91dCkpICE9CiAgICAgICAgVlBM MDExX1JJTkdfTUFYX0RFUFRIKGludGYsb3V0KSApIHsKICAgICAgICBpbnRmLT5vdXRbVlBMMDEx X1JJTkdfSURYX01BU0sob3V0X3Byb2QsIGludGYtPm91dCldID0gZGF0YTsKICAgICAgICBzbXBf d21iKCk7CiAgICAgICAgb3V0X3Byb2QgKz0gMTsKICAgICAgICBpbnRmLT5vdXRfcHJvZCA9IG91 dF9wcm9kOwogICAgfQogICAgaWYgKCB2cGwwMTFfcXVldWVkKG91dF9wcm9kLCBvdXRfY29ucywg VlBMMDExX1JJTkdfTUFYX0RFUFRIKGludGYsb3V0KSkgPT0KICAgICAgICBWUEwwMTFfUklOR19N QVhfREVQVEgoaW50ZixvdXQpICkgewoKICAgIDxyZXN0IG9mIHRoZSBjb2RlPgoKCj4gKyAgICB7 Cj4gKyAgICAgICAgWEVOQ09OU19SSU5HX0lEWCBvdXRfcHJvZCA9IGludGYtPm91dF9wcm9kOwo+ ICsgICAgICAgIGludGYtPm91dFtWUEwwMTFfUklOR19JRFhfTUFTSyhvdXRfcHJvZCwgaW50Zi0+ b3V0KV0gPSBkYXRhOwo+ICsgICAgICAgIHNtcF93bWIoKTsKPiArICAgICAgICBpbnRmLT5vdXRf cHJvZCA9IG91dF9wcm9kICsgMTsKPiArICAgIH0KPiArCj4gKyAgICBpZiAoIFZQTDAxMV9PVVRf UklOR19GVUxMKGludGYpICkKPiArICAgIHsKPiArICAgICAgICB2cGwwMTEtPnVhcnRmciB8PSBU WEZGOwo+ICsgICAgICAgIHZwbDAxMS0+dWFydHJpcyAmPSB+VFhJOwo+ICsgICAgfQo+ICsKPiAr ICAgIHZwbDAxMS0+dWFydGZyIHw9IEJVU1k7Cj4gKwo+ICsgICAgdnBsMDExLT51YXJ0ZnIgJj0g flRYRkU7Cj4gKwo+ICsgICAgVlBMMDExX1VOTE9DSyhkLCBmbGFncyk7Cj4gKwo+ICsgICAgbm90 aWZ5X3ZpYV94ZW5fZXZlbnRfY2hhbm5lbChkLCB2cGwwMTEtPmV2dGNobik7Cj4gK30KPiArCj4g K3N0YXRpYyBpbnQgdnBsMDExX21taW9fcmVhZChzdHJ1Y3QgdmNwdSAqdiwgbW1pb19pbmZvX3Qg KmluZm8sIHJlZ2lzdGVyX3QgKnIsIHZvaWQgKnByaXYpCj4gK3sKPiArICAgIHVpbnQ4X3QgY2g7 Cj4gKyAgICBzdHJ1Y3QgaHNyX2RhYnQgZGFidCA9IGluZm8tPmRhYnQ7Cj4gKyAgICBpbnQgdnBs MDExX3JlZyA9IChpbnQpKGluZm8tPmdwYSAtIEdVRVNUX1BMMDExX0JBU0UpOwo+ICsgICAgc3Ry dWN0IHZwbDAxMV9zICp2cGwwMTEgPSAmdi0+ZG9tYWluLT5hcmNoLnZwbDAxMTsKPiArCj4gKyAg ICBpZiAoICF2cGwwMTFfcmVnMzJfY2hlY2tfYWNjZXNzKGRhYnQuc2l6ZSkgKSBnb3RvIGJhZF93 aWR0aDsKPiArCj4gKyAgICBzd2l0Y2ggKCB2cGwwMTFfcmVnICkKPiArICAgIHsKPiArICAgIGNh c2UgRFI6Cj4gKyAgICAgICAgdnBsMDExX3JlYWRfZGF0YSh2LT5kb21haW4sICZjaCk7Cj4gKyAg ICAgICAgKnIgPSBjaDsKPiArICAgICAgICBicmVhazsKPiArCj4gKyAgICBjYXNlIFJTUjoKPiAr ICAgICAgICAvKiBJdCBhbHdheXMgcmV0dXJucyAwIGFzIHRoZXJlIGFyZSBubyBwaHlzaWNhbCBl cnJvcnMuICovCj4gKyAgICAgICAgKnIgPSAwOwo+ICsgICAgICAgIGJyZWFrOwo+ICsKPiArICAg IGNhc2UgRlI6Cj4gKyAgICAgICAgKnIgPSB2cmVnX3JlZzMyX2V4dHJhY3QodnBsMDExLT51YXJ0 ZnIsIGluZm8pOwo+ICsgICAgICAgIGJyZWFrOwo+ICsKPiArICAgIGNhc2UgUklTOgo+ICsgICAg ICAgICpyID0gdnJlZ19yZWczMl9leHRyYWN0KHZwbDAxMS0+dWFydHJpcywgaW5mbyk7Cj4gKyAg ICAgICAgYnJlYWs7Cj4gKwo+ICsgICAgY2FzZSBNSVM6Cj4gKyAgICAgICAgKnIgPSB2cmVnX3Jl ZzMyX2V4dHJhY3QodnBsMDExLT51YXJ0cmlzCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJiB2cGwwMTEtPnVhcnRpbXNjLCBpbmZvKTsKPiArICAgICAgICBicmVhazsKPiArCj4g KyAgICBjYXNlIElNU0M6Cj4gKyAgICAgICAgKnIgPSB2cmVnX3JlZzMyX2V4dHJhY3QodnBsMDEx LT51YXJ0aW1zYywgaW5mbyk7Cj4gKyAgICAgICAgYnJlYWs7Cj4gKwo+ICsgICAgY2FzZSBJQ1I6 Cj4gKyAgICAgICAgLyogT25seSB3cml0ZSBpcyB2YWxpZC4gKi8KPiArICAgICAgICByZXR1cm4g MDsKPiArCj4gKyAgICBkZWZhdWx0Ogo+ICsgICAgICAgIGdwcmludGsoWEVOTE9HX0VSUiwgInZw bDAxMTogdW5oYW5kbGVkIHJlYWQgciVkIG9mZnNldCAlIzA4eFxuIiwKPiArICAgICAgICAgICAg ICAgIGRhYnQucmVnLCB2cGwwMTFfcmVnKTsKPiArICAgICAgICByZXR1cm4gMDsKPiArICAgIH0K PiArCj4gKyAgICByZXR1cm4gMTsKPiArCj4gK2JhZF93aWR0aDoKPiArICAgIGdwcmludGsoWEVO TE9HX0VSUiwgInZwbDAxMTogYmFkIHJlYWQgd2lkdGggJWQgciVkIG9mZnNldCAlIzA4eFxuIiwK PiArICAgICAgICAgICAgZGFidC5zaXplLCBkYWJ0LnJlZywgdnBsMDExX3JlZyk7Cj4gKyAgICBk b21haW5fY3Jhc2hfc3luY2hyb25vdXMoKTsKPiArICAgIHJldHVybiAwOwo+ICsKPiArfQo+ICsK PiArc3RhdGljIGludCB2cGwwMTFfbW1pb193cml0ZShzdHJ1Y3QgdmNwdSAqdiwgbW1pb19pbmZv X3QgKmluZm8sIHJlZ2lzdGVyX3Qgciwgdm9pZCAqcHJpdikKPiArewo+ICsgICAgdWludDhfdCBj aCA9ICgoc3RydWN0IHVhcnRkcl9yZWcgKikmciktPmRhdGE7Cj4gKyAgICBzdHJ1Y3QgaHNyX2Rh YnQgZGFidCA9IGluZm8tPmRhYnQ7Cj4gKyAgICBpbnQgdnBsMDExX3JlZyA9IChpbnQpKGluZm8t PmdwYSAtIEdVRVNUX1BMMDExX0JBU0UpOwo+ICsgICAgc3RydWN0IHZwbDAxMV9zICp2cGwwMTEg PSAmdi0+ZG9tYWluLT5hcmNoLnZwbDAxMTsKPiArCj4gKyAgICBpZiAoICF2cGwwMTFfcmVnMzJf Y2hlY2tfYWNjZXNzKGRhYnQuc2l6ZSkgKSBnb3RvIGJhZF93aWR0aDsKPiArCj4gKyAgICBzd2l0 Y2ggKCB2cGwwMTFfcmVnICkKPiArICAgIHsKPiArICAgIGNhc2UgRFI6Cj4gKyAgICAgICAgdnBs MDExX3dyaXRlX2RhdGEodi0+ZG9tYWluLCBjaCk7Cj4gKyAgICAgICAgYnJlYWs7Cj4gKwo+ICsg ICAgY2FzZSBSU1I6IC8qIE5vdGhpbmcgdG8gY2xlYXIuICovCj4gKyAgICAgICAgYnJlYWs7Cj4g Kwo+ICsgICAgY2FzZSBGUjoKPiArICAgIGNhc2UgUklTOgo+ICsgICAgY2FzZSBNSVM6Cj4gKyAg ICAgICAgZ290byB3cml0ZV9pZ25vcmU7Cj4gKwo+ICsgICAgY2FzZSBJTVNDOgo+ICsgICAgICAg IHZyZWdfcmVnMzJfdXBkYXRlKCZ2cGwwMTEtPnVhcnRpbXNjLCByLCBpbmZvKTsKPiArICAgICAg ICB2cGwwMTFfdXBkYXRlX3NwaSh2LT5kb21haW4pOwo+ICsgICAgICAgIGJyZWFrOwo+ICsKPiAr ICAgIGNhc2UgSUNSOgo+ICsgICAgICAgIHZyZWdfcmVnMzJfY2xlYXJiaXRzKCZ2cGwwMTEtPnVh cnRyaXMsIHIsIGluZm8pOwo+ICsgICAgICAgIHZwbDAxMV91cGRhdGVfc3BpKHYtPmRvbWFpbik7 Cj4gKyAgICAgICAgYnJlYWs7Cj4gKwo+ICsgICAgZGVmYXVsdDoKPiArICAgICAgICBncHJpbnRr KFhFTkxPR19FUlIsICJ2cGwwMTE6IHVuaGFuZGxlZCB3cml0ZSByJWQgb2Zmc2V0ICUjMDh4XG4i LAo+ICsgICAgICAgICAgICAgICAgZGFidC5yZWcsIHZwbDAxMV9yZWcpOwo+ICsgICAgICAgIHJl dHVybiAwOwo+ICsgICAgfQo+ICsKPiArd3JpdGVfaWdub3JlOgo+ICsgICAgcmV0dXJuIDE7Cj4g Kwo+ICtiYWRfd2lkdGg6Cj4gKyAgICBncHJpbnRrKFhFTkxPR19FUlIsICJ2cGwwMTE6IGJhZCB3 cml0ZSB3aWR0aCAlZCByJWQgb2Zmc2V0ICUjMDh4XG4iLAo+ICsgICAgICAgICAgICBkYWJ0LnNp emUsIGRhYnQucmVnLCB2cGwwMTFfcmVnKTsKPiArICAgIGRvbWFpbl9jcmFzaF9zeW5jaHJvbm91 cygpOwo+ICsgICAgcmV0dXJuIDA7Cj4gKwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0 IG1taW9faGFuZGxlcl9vcHMgdnBsMDExX21taW9faGFuZGxlciA9IHsKPiArICAgIC5yZWFkID0g dnBsMDExX21taW9fcmVhZCwKPiArICAgIC53cml0ZSA9IHZwbDAxMV9tbWlvX3dyaXRlLAo+ICt9 Owo+ICsKPiAraW50IHZwbDAxMV9tYXBfZ3Vlc3RfcGFnZShzdHJ1Y3QgZG9tYWluICpkLCB4ZW5f cGZuX3QgZ2ZuKQo+ICt7Cj4gKyAgICBzdHJ1Y3QgdnBsMDExX3MgKnZwbDAxMSA9ICZkLT5hcmNo LnZwbDAxMTsKPiArCj4gKyAgICAvKiBNYXAgdGhlIGd1ZXN0IFBGTiB0byBYZW4gYWRkcmVzcyBz cGFjZS4gKi8KPiArICAgIHJldHVybiBwcmVwYXJlX3JpbmdfZm9yX2hlbHBlcihkLAo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdmbiwKPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAmdnBsMDExLT5yaW5nX3BhZ2UsCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJnZwbDAxMS0+cmluZ19idWYpOwo+ICt9Cj4gKwo+ICtzdGF0aWMg dm9pZCB2cGwwMTFfZGF0YV9hdmFpbChzdHJ1Y3QgZG9tYWluICpkKQo+ICt7Cj4gKyAgICB1bnNp Z25lZCBsb25nIGZsYWdzOwo+ICsgICAgc3RydWN0IHZwbDAxMV9zICp2cGwwMTEgPSAmZC0+YXJj aC52cGwwMTE7Cj4gKyAgICBzdHJ1Y3QgeGVuY29uc19pbnRlcmZhY2UgKmludGYgPSB2cGwwMTEt PnJpbmdfYnVmOwo+ICsgICAgUklOR19JRFggaW5fcmluZ19kZXB0aCwgb3V0X3JpbmdfZGVwdGg7 CgpQbGVhc2UgdXNlIFhFTkNPTlNfUklOR19JRFggY29uc2lzdGVudGx5LgoKCj4gKyAgICBWUEww MTFfTE9DSyhkLCBmbGFncyk7Cj4gKwo+ICsgICAgaW5fcmluZ19kZXB0aCA9IHZwbDAxMV9xdWV1 ZWQoaW50Zi0+aW5fcHJvZCwgaW50Zi0+aW5fY29ucywgc2l6ZW9mKGludGYtPmluKSk7Cj4gKyAg ICBvdXRfcmluZ19kZXB0aCA9IHZwbDAxMV9xdWV1ZWQoaW50Zi0+b3V0X3Byb2QsIGludGYtPm91 dF9jb25zLCBzaXplb2YoaW50Zi0+b3V0KSk7CgpXYXRjaCBvdXQgZm9yIGxvbmcgbGluZXMgKD4g ODAgY2hhcnMpLCBidXQgSSB0aGluayB0aGUgY29kZSBpcyBPSy4KCgoKPiArICAgIC8qIFVwZGF0 ZSB0aGUgdWFydCByeCBzdGF0ZSBpZiB0aGUgYnVmZmVyIGlzIG5vdCBlbXB0eS4gKi8KPiArICAg IGlmICggaW5fcmluZ19kZXB0aCAhPSAwICkKPiArICAgIHsKPiArICAgICAgICB2cGwwMTEtPnVh cnRmciAmPSB+UlhGRTsKPiArICAgICAgICBpZiAoIGluX3JpbmdfZGVwdGggPT0gVlBMMDExX1JJ TkdfTUFYX0RFUFRIKGludGYsIGluKSApCj4gKyAgICAgICAgICAgIHZwbDAxMS0+dWFydGZyIHw9 IFJYRkY7Cj4gKyAgICAgICAgdnBsMDExLT51YXJ0cmlzIHw9IFJYSTsKPiArICAgIH0KPiArCj4g KyAgICAvKiBVcGRhdGUgdGhlIHVhcnQgdHggc3RhdGUgaWYgdGhlIGJ1ZmZlciBpcyBub3QgZnVs bC4gKi8KPiArICAgIGlmICggb3V0X3JpbmdfZGVwdGggIT0gVlBMMDExX1JJTkdfTUFYX0RFUFRI KGludGYsIG91dCkgKQo+ICsgICAgewo+ICsgICAgICAgIHZwbDAxMS0+dWFydGZyICY9IH5UWEZG Owo+ICsgICAgICAgIHZwbDAxMS0+dWFydHJpcyB8PSBUWEk7Cj4gKyAgICAgICAgaWYgKCBvdXRf cmluZ19kZXB0aCA9PSAwICkKPiArICAgICAgICB7Cj4gKyAgICAgICAgICAgIHZwbDAxMS0+dWFy dGZyICY9IH5CVVNZOwo+ICsgICAgICAgICAgICB2cGwwMTEtPnVhcnRmciB8PSBUWEZFOwo+ICsg ICAgICAgIH0KPiArICAgIH0KPiArCj4gKyAgICBWUEwwMTFfVU5MT0NLKGQsIGZsYWdzKTsKPiAr Cj4gKyAgICB2cGwwMTFfdXBkYXRlX3NwaShkKTsKPiArfQo+ICsKPiArCj4gK3N0YXRpYyB2b2lk IHZwbDAxMV9ub3RpZmljYXRpb24oc3RydWN0IHZjcHUgKnYsIHVuc2lnbmVkIGludCBwb3J0KQo+ ICt7Cj4gKyAgICB2cGwwMTFfZGF0YV9hdmFpbCh2LT5kb21haW4pOwo+ICt9Cj4gKwo+ICtpbnQg ZG9tYWluX3ZwbDAxMV9pbml0KHN0cnVjdCBkb21haW4gKmQsCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgdWludDMyX3QgY29uc29sZV9kb21pZCwKPiArICAgICAgICAgICAgICAgICAgICAgICB4 ZW5fcGZuX3QgZ2ZuLAo+ICsgICAgICAgICAgICAgICAgICAgICAgIGV2dGNobl9wb3J0X3QgKmV2 dGNobikKPiArewo+ICsgICAgaW50IHJjOwo+ICsgICAgc3RydWN0IHZwbDAxMV9zICp2cGwwMTEg PSAmZC0+YXJjaC52cGwwMTE7Cj4gKwo+ICsgICAgcmMgPSB2cGwwMTFfbWFwX2d1ZXN0X3BhZ2Uo ZCwgZ2ZuKTsKPiArICAgIGlmICggcmMgPCAwICkKPiArICAgICAgICBnb3RvIG91dDsKPiArCj4g KyAgICByYyA9IHZnaWNfcmVzZXJ2ZV92aXJxKGQsIEdVRVNUX1ZQTDAxMV9TUEkpOwo+ICsgICAg aWYgKCAhcmMgKQo+ICsgICAgewo+ICsgICAgICAgIHJjID0gLUVJTlZBTDsKPiArICAgICAgICBn b3RvIG91dDE7Cj4gKyAgICB9Cj4gKwo+ICsgICAgcmVnaXN0ZXJfbW1pb19oYW5kbGVyKGQsICZ2 cGwwMTFfbW1pb19oYW5kbGVyLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIEdVRVNUX1BM MDExX0JBU0UsIEdVRVNUX1BMMDExX1NJWkUsIE5VTEwpOwo+ICsKPiArICAgIHNwaW5fbG9ja19p bml0KCZ2cGwwMTEtPmxvY2spOwo+ICsKPiArICAgIHJjID0gYWxsb2NfdW5ib3VuZF94ZW5fZXZl bnRfY2hhbm5lbChkLCAwLCBjb25zb2xlX2RvbWlkLAo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHZwbDAxMV9ub3RpZmljYXRpb24pOwo+ICsgICAgaWYgKHJjIDwg MCkKPiArICAgICAgICBnb3RvIG91dDI7Cj4gKwo+ICsgICAgdnBsMDExLT5ldnRjaG4gPSAqZXZ0 Y2huID0gcmM7Cj4gKwo+ICsgICAgdnBsMDExLT5pbml0aWFsaXplZCA9IHRydWU7Cj4gKwo+ICsg ICAgcmV0dXJuIDA7Cj4gKwo+ICtvdXQyOgo+ICsgICAgeGZyZWUoZC0+YXJjaC52bW1pby5oYW5k bGVycyk7Cj4gK291dDE6Cj4gKyAgICBkZXN0cm95X3JpbmdfZm9yX2hlbHBlcigmdnBsMDExLT5y aW5nX2J1ZiwgdnBsMDExLT5yaW5nX3BhZ2UpOwo+ICtvdXQ6Cj4gKyAgICByZXR1cm4gcmM7Cj4g K30KPiArCj4gK3ZvaWQgZG9tYWluX3ZwbDAxMV9kZWluaXQoc3RydWN0IGRvbWFpbiAqZCkKPiAr ewo+ICsgICAgc3RydWN0IHZwbDAxMV9zICp2cGwwMTEgPSAmZC0+YXJjaC52cGwwMTE7Cj4gKwo+ ICsgICAgaWYgKCB2cGwwMTEtPmluaXRpYWxpemVkICkKPiArICAgIHsKPiArICAgICAgICBmcmVl X3hlbl9ldmVudF9jaGFubmVsKGQsIHZwbDAxMS0+ZXZ0Y2huKTsKPiArICAgICAgICBkZXN0cm95 X3JpbmdfZm9yX2hlbHBlcigmdnBsMDExLT5yaW5nX2J1ZiwgdnBsMDExLT5yaW5nX3BhZ2UpOwo+ ICsgICAgfQo+ICsgICAgdnBsMDExLT5pbml0aWFsaXplZCA9IGZhbHNlOwo+ICt9Cj4gKwo+ICsv Kgo+ICsgKiBMb2NhbCB2YXJpYWJsZXM6Cj4gKyAqIG1vZGU6IEMKPiArICogYy1maWxlLXN0eWxl OiAiQlNEIgo+ICsgKiBjLWJhc2ljLW9mZnNldDogNAo+ICsgKiBpbmRlbnQtdGFicy1tb2RlOiBu aWwKPiArICogRW5kOgo+ICsgKi8KPiBkaWZmIC0tZ2l0IGEveGVuL2luY2x1ZGUvYXNtLWFybS9k b21haW4uaCBiL3hlbi9pbmNsdWRlL2FzbS1hcm0vZG9tYWluLmgKPiBpbmRleCA2ZGU4MDgyLi41 NDYxMWUwIDEwMDY0NAo+IC0tLSBhL3hlbi9pbmNsdWRlL2FzbS1hcm0vZG9tYWluLmgKPiArKysg Yi94ZW4vaW5jbHVkZS9hc20tYXJtL2RvbWFpbi5oCj4gQEAgLTExLDYgKzExLDcgQEAKPiAgI2lu Y2x1ZGUgPHB1YmxpYy9odm0vcGFyYW1zLmg+Cj4gICNpbmNsdWRlIDx4ZW4vc2VyaWFsLmg+Cj4g ICNpbmNsdWRlIDx4ZW4vcmJ0cmVlLmg+Cj4gKyNpbmNsdWRlIDxhc20tYXJtL3ZwbDAxMS5oPgo+ ICAKPiAgc3RydWN0IGh2bV9kb21haW4KPiAgewo+IEBAIC0xMzMsNiArMTM0LDExIEBAIHN0cnVj dCBhcmNoX2RvbWFpbgo+ICAgICAgc3RydWN0IHsKPiAgICAgICAgICB1aW50OF90IHByaXZpbGVn ZWRfY2FsbF9lbmFibGVkIDogMTsKPiAgICAgIH0gbW9uaXRvcjsKPiArCj4gKyNpZmRlZiBDT05G SUdfVlBMMDExX0NPTlNPTEUKPiArICAgIHN0cnVjdCB2cGwwMTFfcyB2cGwwMTE7Cj4gKyNlbmRp Zgo+ICsKPiAgfSAgX19jYWNoZWxpbmVfYWxpZ25lZDsKPiAgCj4gIHN0cnVjdCBhcmNoX3ZjcHUK PiBkaWZmIC0tZ2l0IGEveGVuL2luY2x1ZGUvYXNtLWFybS9wbDAxMS11YXJ0LmggYi94ZW4vaW5j bHVkZS9hc20tYXJtL3BsMDExLXVhcnQuaAo+IGluZGV4IDEyM2Y0NzcuLjU3ZTllYzcgMTAwNjQ0 Cj4gLS0tIGEveGVuL2luY2x1ZGUvYXNtLWFybS9wbDAxMS11YXJ0LmgKPiArKysgYi94ZW4vaW5j bHVkZS9hc20tYXJtL3BsMDExLXVhcnQuaAo+IEBAIC00OSw2ICs0OSw4IEBACj4gIC8qIEZSIGJp dHMgKi8KPiAgI2RlZmluZSBUWEZFICAgKDE8PDcpIC8qIFRYIEZJRk8gZW1wdHkgKi8KPiAgI2Rl ZmluZSBSWEZFICAgKDE8PDQpIC8qIFJYIEZJRk8gZW1wdHkgKi8KPiArI2RlZmluZSBUWEZGICAg KDE8PDUpIC8qIFRYIEZJRk8gZnVsbCAqLwo+ICsjZGVmaW5lIFJYRkYgICAoMTw8NikgLyogUlgg RklGTyBmdWxsICovCj4gICNkZWZpbmUgQlVTWSAgICgxPDwzKSAvKiBUcmFuc21pdCBpcyBub3Qg Y29tcGxldGUgKi8KPiAgCj4gIC8qIExDUl9IIGJpdHMgKi8KPiBkaWZmIC0tZ2l0IGEveGVuL2lu Y2x1ZGUvYXNtLWFybS92cGwwMTEuaCBiL3hlbi9pbmNsdWRlL2FzbS1hcm0vdnBsMDExLmgKPiBu ZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLmRmN2U2YjcKPiAtLS0gL2Rldi9u dWxsCj4gKysrIGIveGVuL2luY2x1ZGUvYXNtLWFybS92cGwwMTEuaAo+IEBAIC0wLDAgKzEsOTQg QEAKPiArLyoKPiArICogaW5jbHVkZS94ZW4vdnBsMDExLmgKPiArICoKPiArICogVmlydHVhbCBQ TDAxMSBVQVJUCj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Cj4gKyAqIHVuZGVyIHRoZSB0ZXJt cyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCj4gKyAq IHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24u Cj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3 aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKPiArICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2 ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCj4gKyAqIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBmb3IKPiArICogbW9yZSBkZXRhaWxzLgo+ICsgKgo+ICsgKiBZb3Ugc2hvdWxkIGhh dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9u ZyB3aXRoCj4gKyAqIHRoaXMgcHJvZ3JhbTsgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9y Zy9saWNlbnNlcy8+Lgo+ICsgKi8KPiArCj4gKyNpZm5kZWYgX1ZQTDAxMV9IXwo+ICsKPiArI2Rl ZmluZSBfVlBMMDExX0hfCj4gKwo+ICsjaW5jbHVkZSA8cHVibGljL2lvL3JpbmcuaD4KPiArI2lu Y2x1ZGUgPGFzbS1hcm0vdnJlZy5oPgo+ICsKPiArREVGSU5FX1hFTl9GTEVYX1JJTkcodnBsMDEx KTsKPiArCj4gKy8qIGhlbHBlciBtYWNyb3MgKi8KPiArI2RlZmluZSBWUEwwMTFfUklOR19JRFhf TUFTSyhpZHgsIHJpbmcpICh2cGwwMTFfbWFzayhpZHgsIHNpemVvZihyaW5nKSkpCj4gKwo+ICsj ZGVmaW5lIFZQTDAxMV9SSU5HX0RFUFRIKGludGYsZGlyKSAodnBsMDExX3F1ZXVlZCgoaW50Zikt PmRpciAjIyBfcHJvZCwgICAgXAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoaW50ZiktPmRpciAjIyBfY29ucywgICAgXAo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoKGludGYpLT5k aXIpKSkKPiArCj4gKyNkZWZpbmUgVlBMMDExX1JJTkdfTUFYX0RFUFRIKGludGYsZGlyKSAoc2l6 ZW9mKChpbnRmKS0+ZGlyKSkKPiArCj4gKyNkZWZpbmUgVlBMMDExX0lOX1JJTkdfRU1QVFkoaW50 ZikgKFZQTDAxMV9SSU5HX0RFUFRIKGludGYsIGluKSA9PSAwKQo+ICsKPiArI2RlZmluZSBWUEww MTFfT1VUX1JJTkdfRU1QVFkoaW50ZikgKFZQTDAxMV9SSU5HX0RFUFRIKGludGYsIG91dCkgPT0g MCkKPiArCj4gKyNkZWZpbmUgVlBMMDExX0lOX1JJTkdfRlVMTChpbnRmKSAoVlBMMDExX1JJTkdf REVQVEgoaW50ZiwgaW4pID09IFZQTDAxMV9SSU5HX01BWF9ERVBUSChpbnRmLCBpbikpCj4gKwo+ ICsjZGVmaW5lIFZQTDAxMV9PVVRfUklOR19GVUxMKGludGYpIChWUEwwMTFfUklOR19ERVBUSChp bnRmLCBvdXQpID09IFZQTDAxMV9SSU5HX01BWF9ERVBUSChpbnRmLG91dCkpCj4gKwo+ICsjZGVm aW5lIFZQTDAxMV9MT0NLKGQsZmxhZ3MpIHNwaW5fbG9ja19pcnFzYXZlKCYoZCktPmFyY2gudnBs MDExLmxvY2ssIGZsYWdzKQo+ICsjZGVmaW5lIFZQTDAxMV9VTkxPQ0soZCxmbGFncykgc3Bpbl91 bmxvY2tfaXJxcmVzdG9yZSgmKGQpLT5hcmNoLnZwbDAxMS5sb2NrLCBmbGFncykKPiArCj4gK3N0 cnVjdCB1YXJ0ZHJfcmVnIHsKPiArICAgIHVpbnQ4X3QgZGF0YTsKPiArICAgIHVpbnQ4X3QgZXJy b3Jfc3RhdHVzOjQ7Cj4gKyAgICB1aW50OF90IHJlc2VydmVkMTo0Owo+ICsgICAgdWludDE2X3Qg cmVzZXJ2ZWQyOwo+ICsgICAgdWludDMyX3QgcmVzZXJ2ZWQzOwo+ICt9Owo+ICsKPiArc3RydWN0 IHZwbDAxMV9zIHsKPiArICAgIHZvaWQgKnJpbmdfYnVmOwo+ICsgICAgc3RydWN0IHBhZ2VfaW5m byAqcmluZ19wYWdlOwo+ICsgICAgdWludDMyX3QgICAgdWFydGZyOyAgICAgLyogRmxhZyByZWdp c3RlciAqLwo+ICsgICAgdWludDMyX3QgICAgdWFydGNyOyAgICAgLyogQ29udHJvbCByZWdpc3Rl ciAqLwo+ICsgICAgdWludDMyX3QgICAgdWFydGltc2M7ICAgLyogSW50ZXJydXB0IG1hc2sgcmVn aXN0ZXIqLwo+ICsgICAgdWludDMyX3QgICAgdWFydGljcjsgICAgLyogSW50ZXJydXB0IGNsZWFy IHJlZ2lzdGVyICovCj4gKyAgICB1aW50MzJfdCAgICB1YXJ0cmlzOyAgICAvKiBSYXcgaW50ZXJy dXB0IHN0YXR1cyByZWdpc3RlciAqLwo+ICsgICAgdWludDMyX3QgICAgdWFydG1pczsgICAgLyog TWFza2VkIGludGVycnVwdCByZWdpc3RlciAqLwo+ICsgICAgc3BpbmxvY2tfdCAgbG9jazsKPiAr ICAgIGV2dGNobl9wb3J0X3QgZXZ0Y2huOwo+ICsgICAgYm9vbCAgICAgICAgaW5pdGlhbGl6ZWQ7 IC8qIEZsYWcgd2hpY2ggdGVsbHMgd2hldGhlciB2cGwwMTEgaXMgaW5pdGlhbGl6ZWQgKi8KPiAr fTsKPiArCj4gKyNpZmRlZiBDT05GSUdfVlBMMDExX0NPTlNPTEUKPiAraW50IGRvbWFpbl92cGww MTFfaW5pdChzdHJ1Y3QgZG9tYWluICpkLAo+ICsgICAgICAgICAgICAgICAgICAgICAgIHVpbnQz Ml90IGNvbnNvbGVfZG9taWQsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgeGVuX3Bmbl90IGdm biwKPiArICAgICAgICAgICAgICAgICAgICAgICBldnRjaG5fcG9ydF90ICpldnRjaG4pOwo+ICt2 b2lkIGRvbWFpbl92cGwwMTFfZGVpbml0KHN0cnVjdCBkb21haW4gKmQpOwo+ICsjZWxzZQo+ICtp bnQgZG9tYWluX3ZwbDAxMV9pbml0KHN0cnVjdCBkb21haW4gKmQsCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgdWludDMyX3QgY29uc29sZV9kb21pZCwKPiArICAgICAgICAgICAgICAgICAgICAg ICB4ZW5fcGZuX3QgZ2ZuLAo+ICsgICAgICAgICAgICAgICAgICAgICAgIGV2dGNobl9wb3J0X3Qg KmV2dGNobikgeyByZXR1cm4gLUVOT1NZUzsgfQo+ICsKPiArc3RhdGljIGlubGluZSB2b2lkIGRv bWFpbl92cGwwMTFfZGVpbml0KHN0cnVjdCBkb21haW4gKmQpIHsgfQo+ICsjZW5kaWYKPiArCj4g KyNlbmRpZgo+ICsKPiArLyoKPiArICogTG9jYWwgdmFyaWFibGVzOgo+ICsgKiBtb2RlOiBDCj4g KyAqIGMtZmlsZS1zdHlsZTogIkJTRCIKPiArICogYy1iYXNpYy1vZmZzZXQ6IDQKPiArICogaW5k ZW50LXRhYnMtbW9kZTogbmlsCj4gKyAqIEVuZDoKPiArICovCj4gZGlmZiAtLWdpdCBhL3hlbi9p bmNsdWRlL3B1YmxpYy9hcmNoLWFybS5oIGIveGVuL2luY2x1ZGUvcHVibGljL2FyY2gtYXJtLmgK PiBpbmRleCBiZDk3NGZiLi41ZjkxMjA3IDEwMDY0NAo+IC0tLSBhL3hlbi9pbmNsdWRlL3B1Ymxp Yy9hcmNoLWFybS5oCj4gKysrIGIveGVuL2luY2x1ZGUvcHVibGljL2FyY2gtYXJtLmgKPiBAQCAt MzIyLDYgKzMyMiw4IEBAIHN0cnVjdCB4ZW5fYXJjaF9kb21haW5jb25maWcgewo+ICAgICAgICoK PiAgICAgICAqLwo+ICAgICAgdWludDMyX3QgY2xvY2tfZnJlcXVlbmN5Owo+ICsKPiArICAgIHVp bnQzMl90IGNvbnNvbGVfZG9taWQ7Cj4gIH07Cj4gICNlbmRpZiAvKiBfX1hFTl9fIHx8IF9fWEVO X1RPT0xTX18gKi8KPiAgCj4gQEAgLTQxMCw2ICs0MTIsMTAgQEAgdHlwZWRlZiB1aW50NjRfdCB4 ZW5fY2FsbGJhY2tfdDsKPiAgI2RlZmluZSBHVUVTVF9BQ1BJX0JBU0UgMHgyMDAwMDAwMFVMTAo+ ICAjZGVmaW5lIEdVRVNUX0FDUElfU0laRSAweDAyMDAwMDAwVUxMCj4gIAo+ICsvKiBQTDAxMSBt YXBwaW5ncyAqLwo+ICsjZGVmaW5lIEdVRVNUX1BMMDExX0JBU0UgICAgMHgyMjAwMDAwMFVMTAo+ ICsjZGVmaW5lIEdVRVNUX1BMMDExX1NJWkUgICAgMHgwMDAwMTAwMFVMTAo+ICsKPiAgLyoKPiAg ICogMTZNQiA9PSA0MDk2IHBhZ2VzIHJlc2VydmVkIGZvciBndWVzdCB0byB1c2UgYXMgYSByZWdp b24gdG8gbWFwIGl0cwo+ICAgKiBncmFudCB0YWJsZSBpbi4KPiBAQCAtNDQ0LDYgKzQ1MCw4IEBA IHR5cGVkZWYgdWludDY0X3QgeGVuX2NhbGxiYWNrX3Q7Cj4gICNkZWZpbmUgR1VFU1RfVElNRVJf UEhZU19OU19QUEkgMzAKPiAgI2RlZmluZSBHVUVTVF9FVlRDSE5fUFBJICAgICAgICAzMQo+ICAK PiArI2RlZmluZSBHVUVTVF9WUEwwMTFfU1BJICAgICAgICAzMgo+ICsKPiAgLyogUFNDSSBmdW5j dGlvbnMgKi8KPiAgI2RlZmluZSBQU0NJX2NwdV9zdXNwZW5kIDAKPiAgI2RlZmluZSBQU0NJX2Nw dV9vZmYgICAgIDEKPiAtLSAKPiAyLjcuNAo+IAoKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlz dHMueGVuLm9yZwpodHRwczovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==