From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: Re: [RFC 10/16] xen/arm: Introduce alternative runtime patching Date: Fri, 13 May 2016 16:26:01 -0400 Message-ID: <20160513202601.GB20323@char.us.oracle.com> References: <1462466065-30212-1-git-send-email-julien.grall@arm.com> <1462466065-30212-11-git-send-email-julien.grall@arm.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <1462466065-30212-11-git-send-email-julien.grall@arm.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Julien Grall Cc: andre.przywara@arm.com, sstabellini@kernel.org, steve.capper@arm.com, wei.chen@arm.com, xen-devel@lists.xen.org List-Id: xen-devel@lists.xenproject.org T24gVGh1LCBNYXkgMDUsIDIwMTYgYXQgMDU6MzQ6MTlQTSArMDEwMCwgSnVsaWVuIEdyYWxsIHdy b3RlOgo+IFNvbWUgb2YgdGhlIHByb2Nlc3NvciBlcnJhdHVtIHdpbGwgcmVxdWlyZSB0byBtb2Rp ZnkgY29kZSBzZXF1ZW5jZS4KPiBBcyB0aG9zZSBtb2RpZmljYXRpb25zIG1heSBpbXBhY3QgdGhl IHBlcmZvcm1hbmNlLCB0aGV5IHNob3VsZCBvbmx5Cj4gYmUgZW5hYmxlZCBvbiBhZmZlY3RlZCBj b3Jlcy4gRnVydGhlcm1vcmUsIFhlbiBtYXkgYWxzbyB3YW50IHRvIHRha2UKPiBhZHZhbnRhZ2Ug b2YgbmV3IGhhcmR3YXJlIGZlYXR1cmVzIGNvbWluZyB1cCB3aXRoIHY4LjEgYW5kIHY4LjIuCj4g Cj4gVGhpcyBwYXRjaCBhZGRzIGFuIGluZnJhc3RydWN0dXJlIHRvIHBhdGNoIFhlbiBkdXJpbmcg Ym9vdCB0aW1lCj4gZGVwZW5kaW5nIG9uIHRoZSAiZmVhdHVyZXMiIGF2YWlsYWJsZSBvbiB0aGUg cGxhdGZvcm0uCj4gCj4gVGhpcyBjb2RlIGlzIGJhc2VkIG9uIHRoZSBmaWxlIGFyY2gvYXJtNjQv a2VybmVsL2FsdGVybmF0aXZlLmMgaW4KPiBMaW51eCA0LjYtcmMzLiBBbnkgcmVmZXJlbmNlcyB0 byBhcm02NCBoYXZlIGJlZW4gZHJvcHBlZCB0byBtYWtlIHRoZQo+IGNvZGUgYXMgZ2VuZXJpYyBh cyBwb3NzaWJsZS4KPiAKPiBGdXJ0aGVybW9yZSwgaW4gWGVuIHRoZSBleGVjdXRhYmxlIHNlY3Rp b25zICgudGV4dCBhbmQgLmluaXQudGV4dCkKPiBhcmUgYWx3YXlzIG1hcHBlZCByZWFkLW9ubHkg YW5kIGVuZm9yY2VkIGJ5IFNDVExSLldOWC4gU28gaXQgaXMgbm90Cj4gcG9zc2libGUgdG8gZGly ZWN0bHkgcGF0Y2ggWGVuLgoKSXMgaXQgbm90IHBvc3NpYmxlIHRvIHRlbXBvcmFyaWx5ICd1bmVu Zm9yY2UnIHRoZSBTQ1RMUi5XTlg/Cgo+IAo+IFRvIGJ5LXBhc3MgdGhpcyByZXN0cmljdGlvbiwg YSB0ZW1wb3Jhcnkgd3JpdGVhYmxlIG1hcHBpbmcgaXMgbWFkZSB3aXRoCj4gdm1hcC4gVGhpcyBt YXBwaW5nIHdpbGwgYmUgdXNlZCB0byB3cml0ZSB0aGUgbmV3IGluc3RydWN0aW9ucy4KPiAKPiBM YXN0bHksIHJ1bnRpbWUgcGF0Y2hpbmcgaXMgY3VycmVudGx5IG5vdCBuZWNlc3NhcnkgZm9yIEFS TTMyLiBTbyB0aGUKPiBjb2RlIGlzIG9ubHkgZW5hYmxlZCBmb3IgQVJNNjQuCj4gCj4gU2lnbmVk LW9mZi1ieTogSnVsaWVuIEdyYWxsIDxqdWxpZW4uZ3JhbGxAYXJtLmNvbT4KPiAtLS0KPiAgeGVu L2FyY2gvYXJtL0tjb25maWcgICAgICAgICAgICAgIHwgICA1ICsKPiAgeGVuL2FyY2gvYXJtL01h a2VmaWxlICAgICAgICAgICAgIHwgICAxICsKPiAgeGVuL2FyY2gvYXJtL2FsdGVybmF0aXZlLmMg ICAgICAgIHwgMjE3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gIHhl bi9hcmNoL2FybS9zZXR1cC5jICAgICAgICAgICAgICB8ICAgOCArKwo+ICB4ZW4vYXJjaC9hcm0v eGVuLmxkcy5TICAgICAgICAgICAgfCAgIDcgKysKPiAgeGVuL2luY2x1ZGUvYXNtLWFybS9hbHRl cm5hdGl2ZS5oIHwgMTY1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gIHhlbi9pbmNs dWRlL2FzbS1hcm0vYXJtNjQvaW5zbi5oICB8ICAxNiArKysKPiAgNyBmaWxlcyBjaGFuZ2VkLCA0 MTkgaW5zZXJ0aW9ucygrKQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgeGVuL2FyY2gvYXJtL2FsdGVy bmF0aXZlLmMKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IHhlbi9pbmNsdWRlL2FzbS1hcm0vYWx0ZXJu YXRpdmUuaAo+IAo+IGRpZmYgLS1naXQgYS94ZW4vYXJjaC9hcm0vS2NvbmZpZyBiL3hlbi9hcmNo L2FybS9LY29uZmlnCj4gaW5kZXggNjIzMWNkNS4uOWIzZTY2YiAxMDA2NDQKPiAtLS0gYS94ZW4v YXJjaC9hcm0vS2NvbmZpZwo+ICsrKyBiL3hlbi9hcmNoL2FybS9LY29uZmlnCj4gQEAgLTE0LDYg KzE0LDcgQEAgY29uZmlnIEFSTV82NAo+ICAJZGVmX2Jvb2wgeQo+ICAJZGVwZW5kcyBvbiA2NEJJ VAo+ICAJc2VsZWN0IEhBU19HSUNWMwo+ICsgICAgc2VsZWN0IEFMVEVSTkFUSVZFCgpIYXJkIHRh YnMsIG5vdCBzcGFjZXMuCj4gIAo+ICBjb25maWcgQVJNCj4gIAlkZWZfYm9vbCB5Cj4gQEAgLTQ2 LDYgKzQ3LDEwIEBAIGNvbmZpZyBBQ1BJCj4gIGNvbmZpZyBIQVNfR0lDVjMKPiAgCWJvb2wKPiAg Cj4gKyMgU2VsZWN0IEFMVEVSTkFUSVZFIGlmIHRoZSBhcmNoaXRlY3R1cmUgc3VwcG9ydHMgcnVu dGltZSBwYXRjaGluZwo+ICtjb25maWcgQUxURVJOQVRJVkUKPiArICAgIGJvb2wKCkRpdHRvLiAK PiArCj4gIGVuZG1lbnUKPiAgCj4gIHNvdXJjZSAiY29tbW9uL0tjb25maWciCj4gZGlmZiAtLWdp dCBhL3hlbi9hcmNoL2FybS9NYWtlZmlsZSBiL3hlbi9hcmNoL2FybS9NYWtlZmlsZQo+IGluZGV4 IDkxMjJmNzguLjJkMzMwYWEgMTAwNjQ0Cj4gLS0tIGEveGVuL2FyY2gvYXJtL01ha2VmaWxlCj4g KysrIGIveGVuL2FyY2gvYXJtL01ha2VmaWxlCj4gQEAgLTQsNiArNCw3IEBAIHN1YmRpci15ICs9 IHBsYXRmb3Jtcwo+ICBzdWJkaXItJChDT05GSUdfQVJNXzY0KSArPSBlZmkKPiAgc3ViZGlyLSQo Q09ORklHX0FDUEkpICs9IGFjcGkKPiAgCj4gK29iai0kKENPTkZJR19BTFRFUk5BVElWRSkgKz0g YWx0ZXJuYXRpdmUubwoKVGhpcyBwcm9iYWJseSBuZWVkcyB0byBiZSBhbHRlcm5hdGl2ZS5pbml0 Lm8gPwo+ICBvYmoteSArPSBib290ZmR0Lm8KPiAgb2JqLXkgKz0gY3B1Lm8KPiAgb2JqLXkgKz0g Y3B1ZmVhdHVyZS5vCj4gZGlmZiAtLWdpdCBhL3hlbi9hcmNoL2FybS9hbHRlcm5hdGl2ZS5jIGIv eGVuL2FyY2gvYXJtL2FsdGVybmF0aXZlLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4 IDAwMDAwMDAuLjBhNWQxYzgKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIveGVuL2FyY2gvYXJtL2Fs dGVybmF0aXZlLmMKPiBAQCAtMCwwICsxLDIxNyBAQAo+ICsvKgo+ICsgKiBhbHRlcm5hdGl2ZSBy dW50aW1lIHBhdGNoaW5nCj4gKyAqIGluc3BpcmVkIGJ5IHRoZSB4ODYgdmVyc2lvbgo+ICsgKgo+ ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQVJNIEx0ZC4KCk5vdCAyMDE2PwoKPiArICoKPiArICog VGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu ZC9vciBtb2RpZnkKPiArICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKPiArICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb24uCj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRl ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+ICsgKiBidXQgV0lUSE9VVCBB TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+ICsgKiBN RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg dGhlCj4gKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCj4g KyAqCj4gKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlCj4gKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90 LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+Lgo+ICsgKi8KPiArCj4gKyNpbmNs dWRlIDx4ZW4vY29uZmlnLmg+Cj4gKyNpbmNsdWRlIDx4ZW4vaW5pdC5oPgo+ICsjaW5jbHVkZSA8 eGVuL3R5cGVzLmg+Cj4gKyNpbmNsdWRlIDx4ZW4va2VybmVsLmg+Cj4gKyNpbmNsdWRlIDx4ZW4v bW0uaD4KPiArI2luY2x1ZGUgPHhlbi92bWFwLmg+Cj4gKyNpbmNsdWRlIDx4ZW4vc21wLmg+Cj4g KyNpbmNsdWRlIDx4ZW4vc3RvcF9tYWNoaW5lLmg+Cj4gKyNpbmNsdWRlIDxhc20vYWx0ZXJuYXRp dmUuaD4KPiArI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KPiArI2luY2x1ZGUgPGFzbS9ieXRlb3Jk ZXIuaD4KPiArI2luY2x1ZGUgPGFzbS9jcHVmZWF0dXJlLmg+Cj4gKyNpbmNsdWRlIDxhc20vaW5z bi5oPgo+ICsjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KPiArCj4gKyNkZWZpbmUgX19BTFRfUFRSKGEs ZikgICAgICAodTMyICopKCh2b2lkICopJihhKS0+ZiArIChhKS0+ZikKPiArI2RlZmluZSBBTFRf T1JJR19QVFIoYSkgICAgIF9fQUxUX1BUUihhLCBvcmlnX29mZnNldCkKPiArI2RlZmluZSBBTFRf UkVQTF9QVFIoYSkgICAgIF9fQUxUX1BUUihhLCBhbHRfb2Zmc2V0KQo+ICsKPiArZXh0ZXJuIGNv bnN0IHN0cnVjdCBhbHRfaW5zdHIgX19hbHRfaW5zdHJ1Y3Rpb25zW10sIF9fYWx0X2luc3RydWN0 aW9uc19lbmRbXTsKPiArCj4gK3N0cnVjdCBhbHRfcmVnaW9uIHsKPiArICAgIGNvbnN0IHN0cnVj dCBhbHRfaW5zdHIgKmJlZ2luOwo+ICsgICAgY29uc3Qgc3RydWN0IGFsdF9pbnN0ciAqZW5kOwo+ ICt9Owo+ICsKPiArLyoKPiArICogQ2hlY2sgaWYgdGhlIHRhcmdldCBQQyBpcyB3aXRoaW4gYW4g YWx0ZXJuYXRpdmUgYmxvY2suCj4gKyAqLwo+ICtzdGF0aWMgYm9vbF90IGJyYW5jaF9pbnNuX3Jl cXVpcmVzX3VwZGF0ZShjb25zdCBzdHJ1Y3QgYWx0X2luc3RyICphbHQsCgpfX2luaXQ/Cj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgcGMp Cj4gK3sKPiArICAgIHVuc2lnbmVkIGxvbmcgcmVwbHB0cjsKPiArCj4gKyAgICBpZiAoIGlzX2Fj dGl2ZV9rZXJuZWxfdGV4dChwYykgKQo+ICsgICAgICAgIHJldHVybiAxOwo+ICsKPiArICAgIHJl cGxwdHIgPSAodW5zaWduZWQgbG9uZylBTFRfUkVQTF9QVFIoYWx0KTsKPiArICAgIGlmICggcGMg Pj0gcmVwbHB0ciAmJiBwYyA8PSAocmVwbHB0ciArIGFsdC0+YWx0X2xlbikgKQo+ICsgICAgICAg IHJldHVybiAwOwo+ICsKPiArICAgIC8qCj4gKyAgICAgKiBCcmFuY2hpbmcgaW50byAqYW5vdGhl ciogYWx0ZXJuYXRlIHNlcXVlbmNlIGlzIGRvb21lZCwgYW5kCj4gKyAgICAgKiB3ZSdyZSBub3Qg ZXZlbiB0cnlpbmcgdG8gZml4IGl0IHVwLgo+ICsgICAgICovCj4gKyAgICBCVUcoKTsKPiArfQo+ ICsKPiArc3RhdGljIHUzMiBnZXRfYWx0X2luc24oY29uc3Qgc3RydWN0IGFsdF9pbnN0ciAqYWx0 LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1MzIgKmluc25wdHIsIGNvbnN0IHUz MiAqYWx0aW5zbnB0cikKPiArewo+ICsgICAgdTMyIGluc247Cj4gKwo+ICsgICAgaW5zbiA9IGxl MzJfdG9fY3B1KCphbHRpbnNucHRyKTsKPiArCj4gKyAgICBpZiAoIGluc25faXNfYnJhbmNoX2lt bShpbnNuKSApCj4gKyAgICB7Cj4gKyAgICAgICAgczMyIG9mZnNldCA9IGluc25fZ2V0X2JyYW5j aF9vZmZzZXQoaW5zbik7Cj4gKyAgICAgICAgdW5zaWduZWQgbG9uZyB0YXJnZXQ7Cj4gKwo+ICsg ICAgICAgIHRhcmdldCA9ICh1bnNpZ25lZCBsb25nKWFsdGluc25wdHIgKyBvZmZzZXQ7Cj4gKwo+ ICsgICAgICAgIC8qCj4gKyAgICAgICAgICogSWYgd2UncmUgYnJhbmNoaW5nIGluc2lkZSB0aGUg YWx0ZXJuYXRlIHNlcXVlbmNlLAo+ICsgICAgICAgICAqIGRvIG5vdCByZXdyaXRlIHRoZSBpbnN0 cnVjdGlvbiwgYXMgaXQgaXMgYWxyZWFkeQo+ICsgICAgICAgICAqIGNvcnJlY3QuIE90aGVyd2lz ZSwgZ2VuZXJhdGUgdGhlIG5ldyBpbnN0cnVjdGlvbi4KPiArICAgICAgICAgKi8KPiArICAgICAg ICBpZiAoIGJyYW5jaF9pbnNuX3JlcXVpcmVzX3VwZGF0ZShhbHQsIHRhcmdldCkgKQo+ICsgICAg ICAgIHsKPiArICAgICAgICAgICAgb2Zmc2V0ID0gdGFyZ2V0IC0gKHVuc2lnbmVkIGxvbmcpaW5z bnB0cjsKPiArICAgICAgICAgICAgaW5zbiA9IGluc25fc2V0X2JyYW5jaF9vZmZzZXQoaW5zbiwg b2Zmc2V0KTsKPiArICAgICAgICB9Cj4gKyAgICB9Cj4gKwo+ICsgICAgcmV0dXJuIGluc247Cj4g K30KPiArCj4gK3N0YXRpYyBpbnQgX19hcHBseV9hbHRlcm5hdGl2ZXMoY29uc3Qgc3RydWN0IGFs dF9yZWdpb24gKnJlZ2lvbikKCl9faW5pdD8KPiArewo+ICsgICAgY29uc3Qgc3RydWN0IGFsdF9p bnN0ciAqYWx0Owo+ICsgICAgY29uc3QgdTMyICpvcmlncHRyLCAqcmVwbHB0cjsKPiArICAgIHUz MiAqd3JpdGVwdHIsICp3cml0ZW1hcDsKPiArICAgIG1mbl90IHRleHRfbWZuID0gX21mbih2aXJ0 X3RvX21mbihfc3RleHQpKTsKPiArICAgIHVuc2lnbmVkIGludCB0ZXh0X29yZGVyID0gZ2V0X29y ZGVyX2Zyb21fYnl0ZXMoX2VuZCAtIF9zdGFydCk7Cj4gKwo+ICsgICAgcHJpbnRrKCJQYXRjaGlu ZyBrZXJuZWwgY29kZVxuIik7Cj4gKwo+ICsgICAgLyoKPiArICAgICAqIFRoZSB0ZXh0IHNlY3Rp b24gaXMgcmVhZC1vbmx5LiBTbyByZS1tYXAgWGVuIHRvIGJlIGFibGUgdG8gcGF0Y2gKPiArICAg ICAqIHRoZSBjb2RlLgo+ICsgICAgICovCj4gKyAgICB3cml0ZW1hcCA9IF9fdm1hcCgmdGV4dF9t Zm4sIDEgPDwgdGV4dF9vcmRlciwgMSwgMSwgUEFHRV9IWVBFUlZJU09SLAo+ICsgICAgICAgICAg ICAgICAgICAgICAgVk1BUF9ERUZBVUxUKTsKPiArICAgIGlmICggIXdyaXRlbWFwICkKPiArICAg IHsKPiArICAgICAgICBwcmludGsoImFsdGVybmF0aXZlczogVW5hYmxlIHRvIG1hcCB0aGUgdGV4 dCBzZWN0aW9uXG4iKTsKPiArICAgICAgICByZXR1cm4gLUVOT01FTTsKPiArICAgIH0KPiArCj4g KyAgICBmb3IgKCBhbHQgPSByZWdpb24tPmJlZ2luOyBhbHQgPCByZWdpb24tPmVuZDsgYWx0Kysg KQo+ICsgICAgewo+ICsgICAgICAgIHUzMiBpbnNuOwo+ICsgICAgICAgIGludCBpLCBucl9pbnN0 Owo+ICsKPiArICAgICAgICBpZiAoICFjcHVzX2hhdmVfY2FwKGFsdC0+Y3B1ZmVhdHVyZSkgKQo+ ICsgICAgICAgICAgICBjb250aW51ZTsKPiArCj4gKyAgICAgICAgQlVHX09OKGFsdC0+YWx0X2xl biAhPSBhbHQtPm9yaWdfbGVuKTsKPiArCj4gKyAgICAgICAgb3JpZ3B0ciA9IEFMVF9PUklHX1BU UihhbHQpOwo+ICsgICAgICAgIHdyaXRlcHRyID0gb3JpZ3B0ciAtICh1MzIgKilfc3RhcnQgKyB3 cml0ZW1hcDsKPiArICAgICAgICByZXBscHRyID0gQUxUX1JFUExfUFRSKGFsdCk7Cj4gKwo+ICsg ICAgICAgIG5yX2luc3QgPSBhbHQtPmFsdF9sZW4gLyBzaXplb2YoaW5zbik7Cj4gKwo+ICsgICAg ICAgIGZvciAoIGkgPSAwOyBpIDwgbnJfaW5zdDsgaSsrICkKPiArICAgICAgICB7Cj4gKyAgICAg ICAgICAgIGluc24gPSBnZXRfYWx0X2luc24oYWx0LCBvcmlncHRyICsgaSwgcmVwbHB0ciArIGkp Owo+ICsgICAgICAgICAgICAqKHdyaXRlcHRyICsgaSkgPSBjcHVfdG9fbGUzMihpbnNuKTsKPiAr ICAgICAgICB9Cj4gKwo+ICsgICAgICAgIC8qIEVuc3VyZSB0aGUgbmV3IGluc3RydWN0aW9ucyBy ZWFjaGVkIHRoZSBtZW1vcnkgYW5kIG51a2UgKi8KPiArICAgICAgICBjbGVhbl9hbmRfaW52YWxp ZGF0ZV9kY2FjaGVfdmFfcmFuZ2Uod3JpdGVwdHIsCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChzaXplb2YgKCp3cml0ZXB0cikgKiBucl9pbnN0KSk7Cj4g KyAgICB9Cj4gKwo+ICsgICAgLyogTnVrZSB0aGUgaW5zdHJ1Y3Rpb24gY2FjaGUgKi8KPiArICAg IGludmFsaWRhdGVfaWNhY2hlKCk7Cj4gKwo+ICsgICAgdnVubWFwKHdyaXRlbWFwKTsKPiArCj4g KyAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArLyoKPiArICogV2UgbWlnaHQgYmUgcGF0Y2hpbmcg dGhlIHN0b3BfbWFjaGluZSBzdGF0ZSBtYWNoaW5lLCBzbyBpbXBsZW1lbnQgYQo+ICsgKiByZWFs bHkgc2ltcGxlIHBvbGxpbmcgcHJvdG9jb2wgaGVyZS4KPiArICovCj4gK3N0YXRpYyBpbnQgX19h cHBseV9hbHRlcm5hdGl2ZXNfbXVsdGlfc3RvcCh2b2lkICp1bnVzZWQpCgpfX2luaXQgPwo+ICt7 Cj4gKyAgICBzdGF0aWMgaW50IHBhdGNoZWQgPSAwOwo+ICsgICAgc3RydWN0IGFsdF9yZWdpb24g cmVnaW9uID0gewoKY29uc3QgPwo+ICsgICAgICAgIC5iZWdpbiA9IF9fYWx0X2luc3RydWN0aW9u cywKPiArICAgICAgICAuZW5kID0gX19hbHRfaW5zdHJ1Y3Rpb25zX2VuZCwKPiArICAgIH07Cj4g Kwo+ICsgICAgLyogV2UgYWx3YXlzIGhhdmUgYSBDUFUgMCBhdCB0aGlzIHBvaW50IChfX2luaXQp ICovCj4gKyAgICBpZiAoIHNtcF9wcm9jZXNzb3JfaWQoKSApCj4gKyAgICB7Cj4gKyAgICAgICAg d2hpbGUgKCAhcmVhZF9hdG9taWMoJnBhdGNoZWQpICkKPiArICAgICAgICAgICAgY3B1X3JlbGF4 KCk7Cj4gKyAgICAgICAgaXNiKCk7Cj4gKyAgICB9Cj4gKyAgICBlbHNlCj4gKyAgICB7Cj4gKyAg ICAgICAgaW50IHJldDsKPiArCj4gKyAgICAgICAgQlVHX09OKHBhdGNoZWQpOwo+ICsgICAgICAg IHJldCA9IF9fYXBwbHlfYWx0ZXJuYXRpdmVzKCZyZWdpb24pOwo+ICsgICAgICAgIC8qIFRoZSBw YXRjaGluZyBpcyBub3QgZXhwZWN0ZWQgdG8gZmFpbCBkdXJpbmcgYm9vdC4gKi8KPiArICAgICAg ICBCVUdfT04ocmV0ICE9IDApOwo+ICsKPiArICAgICAgICAvKiBCYXJyaWVycyBwcm92aWRlZCBi eSB0aGUgY2FjaGUgZmx1c2hpbmcgKi8KPiArICAgICAgICB3cml0ZV9hdG9taWMoJnBhdGNoZWQs IDEpOwo+ICsgICAgfQo+ICsKPiArICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICt2b2lkIF9faW5p dCBhcHBseV9hbHRlcm5hdGl2ZXNfYWxsKHZvaWQpCj4gK3sKPiArICAgIGludCByZXQ7Cj4gKwo+ ICsJLyogYmV0dGVyIG5vdCB0cnkgY29kZSBwYXRjaGluZyBvbiBhIGxpdmUgU01QIHN5c3RlbSAq Lwo+ICsgICAgcmV0ID0gc3RvcF9tYWNoaW5lX3J1bihfX2FwcGx5X2FsdGVybmF0aXZlc19tdWx0 aV9zdG9wLCBOVUxMLCBOUl9DUFVTKTsKCk5SX0NQVVM/IE5vdCAnbnVtX29ubGluZV9jcHVzJyA/ CgpBbmQgSSBhbSBiaXQgY29uZnVzZWQuIFRoZSBjb21tZW50IHNheXMgdGhhdCAnc3RvcF9tYWNo aW5lJyBzdGF0ZSBtYWNoaW5lCm1heSBiZSBwYXRjaGVkLCBidXQgaGVyZSB5b3UgdXNlIHRoZSBz dG9wX21hY2hpbmVfcnVuIHdoaWNoIGlzIHBhcnQgb2YKc3RvcF9tYWNoaW5lPyEKCj4gKwo+ICsg ICAgLyogc3RvcF9tYWNoaW5lX3J1biBzaG91bGQgbmV2ZXIgZmFpbCBhdCB0aGlzIHN0YWdlIG9m IHRoZSBib290ICovCj4gKyAgICBCVUdfT04ocmV0KTsKPiArfQo+ICsKPiAraW50IGFwcGx5X2Fs dGVybmF0aXZlcyh2b2lkICpzdGFydCwgc2l6ZV90IGxlbmd0aCkKCmNvbnN0IHZvaWQgKnN0YXJ0 Pwo+ICt7Cgpjb25zdCA/Cj4gKyAgICBzdHJ1Y3QgYWx0X3JlZ2lvbiByZWdpb24gPSB7Cj4gKyAg ICAgICAgLmJlZ2luID0gc3RhcnQsCj4gKyAgICAgICAgLmVuZCA9IHN0YXJ0ICsgbGVuZ3RoLAo+ ICsgICAgfTsKPiArCj4gKyAgICByZXR1cm4gX19hcHBseV9hbHRlcm5hdGl2ZXMoJnJlZ2lvbik7 Cj4gK30KPiArCj4gKy8qCj4gKyAqIExvY2FsIHZhcmlhYmxlczoKPiArICogbW9kZTogQwo+ICsg KiBjLWZpbGUtc3R5bGU6ICJCU0QiCj4gKyAqIGMtYmFzaWMtb2Zmc2V0OiA0Cj4gKyAqIGluZGVu dC10YWJzLW1vZGU6IG5pbAo+ICsgKiBFbmQ6Cj4gKyAqLwo+IGRpZmYgLS1naXQgYS94ZW4vYXJj aC9hcm0vc2V0dXAuYyBiL3hlbi9hcmNoL2FybS9zZXR1cC5jCj4gaW5kZXggMDlmZjFlYS4uYzQz ODllZiAxMDA2NDQKPiAtLS0gYS94ZW4vYXJjaC9hcm0vc2V0dXAuYwo+ICsrKyBiL3hlbi9hcmNo L2FybS9zZXR1cC5jCj4gQEAgLTM4LDYgKzM4LDcgQEAKPiAgI2luY2x1ZGUgPHhlbi92bWFwLmg+ Cj4gICNpbmNsdWRlIDx4ZW4vbGliZmR0L2xpYmZkdC5oPgo+ICAjaW5jbHVkZSA8eGVuL2FjcGku aD4KPiArI2luY2x1ZGUgPGFzbS9hbHRlcm5hdGl2ZS5oPgo+ICAjaW5jbHVkZSA8YXNtL3BhZ2Uu aD4KPiAgI2luY2x1ZGUgPGFzbS9jdXJyZW50Lmg+Cj4gICNpbmNsdWRlIDxhc20vc2V0dXAuaD4K PiBAQCAtODM0LDYgKzgzNSwxMyBAQCB2b2lkIF9faW5pdCBzdGFydF94ZW4odW5zaWduZWQgbG9u ZyBib290X3BoeXNfb2Zmc2V0LAo+ICAKPiAgICAgIGRvX2luaXRjYWxscygpOwo+ICAKPiArICAg IC8qCj4gKyAgICAgKiBJdCBuZWVkcyB0byBiZSBjYWxsZWQgYWZ0ZXIgZG9faW5pdGNhbGxzIHRv IGJlIGFibGUgdG8gdXNlCj4gKyAgICAgKiBzdG9wX21hY2hpbmUgKHRhc2tsZXRzIGluaXRpYWxp emVkIHZpYSBhbiBpbml0Y2FsbCkuCj4gKyAgICAgKiBYWFg6IElzIGl0IHRvbyBsYXRlPwoKV2hh dCBlbHNlIGlzIGdvaW5nIHRvIHJ1biBpbiBpbml0Y2FsbHM/IFdoeSBjYW4ndCB0aGlzIHBhdGNo aW5nIGJlIGRvbmUKd2hlbiB5b3Ugb25seSBoYXZlIG9uZSBDUFU/Cgo+ICsgICAgICovCj4gKyAg ICBhcHBseV9hbHRlcm5hdGl2ZXNfYWxsKCk7Cj4gKwo+ICAgICAgLyogQ3JlYXRlIGluaXRpYWwg ZG9tYWluIDAuICovCj4gICAgICAvKiBUaGUgdkdJQyBmb3IgRE9NMCBpcyBleGFjdGx5IGVtdWxh dGluZyB0aGUgaGFyZHdhcmUgR0lDICovCj4gICAgICBjb25maWcuZ2ljX3ZlcnNpb24gPSBYRU5f RE9NQ1RMX0NPTkZJR19HSUNfTkFUSVZFOwo+IGRpZmYgLS1naXQgYS94ZW4vYXJjaC9hcm0veGVu Lmxkcy5TIGIveGVuL2FyY2gvYXJtL3hlbi5sZHMuUwo+IGluZGV4IDFmMDEwYmQuLjgwZDk3MDMg MTAwNjQ0Cj4gLS0tIGEveGVuL2FyY2gvYXJtL3hlbi5sZHMuUwo+ICsrKyBiL3hlbi9hcmNoL2Fy bS94ZW4ubGRzLlMKPiBAQCAtMTY3LDYgKzE2NywxMyBAQCBTRUNUSU9OUwo+ICAgICAgICAgKigu eHNtX2luaXRjYWxsLmluaXQpCj4gICAgICAgICBfX3hzbV9pbml0Y2FsbF9lbmQgPSAuOwo+ICAg IH0gOnRleHQKPiArI2lmZGVmIENPTkZJR19BTFRFUk5BVElWRQo+ICsgIC5pbml0LmFsdGVybmF0 aXZlcyA6IHsKPiArICAgICAgX19hbHRfaW5zdHJ1Y3Rpb25zID0gLjsKPiArICAgICAgKiguYWx0 aW5zdHJ1Y3Rpb25zKQo+ICsgICAgICBfX2FsdF9pbnN0cnVjdGlvbnNfZW5kID0gLjsKPiArICB9 Cj4gKyNlbmRpZgo+ICAgIF9faW5pdF9lbmRfZWZpID0gLjsKPiAgICAuID0gQUxJR04oU1RBQ0tf U0laRSk7Cj4gICAgX19pbml0X2VuZCA9IC47Cj4gZGlmZiAtLWdpdCBhL3hlbi9pbmNsdWRlL2Fz bS1hcm0vYWx0ZXJuYXRpdmUuaCBiL3hlbi9pbmNsdWRlL2FzbS1hcm0vYWx0ZXJuYXRpdmUuaAo+ IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uN2UzYTYxMAo+IC0tLSAvZGV2 L251bGwKPiArKysgYi94ZW4vaW5jbHVkZS9hc20tYXJtL2FsdGVybmF0aXZlLmgKPiBAQCAtMCww ICsxLDE2NSBAQAo+ICsjaWZuZGVmIF9fQVNNX0FMVEVSTkFUSVZFX0gKPiArI2RlZmluZSBfX0FT TV9BTFRFUk5BVElWRV9ICj4gKwo+ICsjaW5jbHVkZSA8YXNtL2NwdWZlYXR1cmUuaD4KPiArI2lu Y2x1ZGUgPHhlbi9jb25maWcuaD4KPiArI2luY2x1ZGUgPHhlbi9rY29uZmlnLmg+Cj4gKwo+ICsj aWZkZWYgQ09ORklHX0FMVEVSTkFUSVZFCj4gKwo+ICsjaWZuZGVmIF9fQVNTRU1CTFlfXwo+ICsK PiArI2luY2x1ZGUgPHhlbi9pbml0Lmg+Cj4gKyNpbmNsdWRlIDx4ZW4vdHlwZXMuaD4KPiArI2lu Y2x1ZGUgPHhlbi9zdHJpbmdpZnkuaD4KPiArCj4gK3N0cnVjdCBhbHRfaW5zdHIgewo+ICsJczMy IG9yaWdfb2Zmc2V0OwkvKiBvZmZzZXQgdG8gb3JpZ2luYWwgaW5zdHJ1Y3Rpb24gKi8KPiArCXMz MiBhbHRfb2Zmc2V0OwkJLyogb2Zmc2V0IHRvIHJlcGxhY2VtZW50IGluc3RydWN0aW9uICovCj4g Kwl1MTYgY3B1ZmVhdHVyZTsJCS8qIGNwdWZlYXR1cmUgYml0IHNldCBmb3IgcmVwbGFjZW1lbnQg Ki8KPiArCXU4ICBvcmlnX2xlbjsJCS8qIHNpemUgb2Ygb3JpZ2luYWwgaW5zdHJ1Y3Rpb24ocykg Ki8KPiArCXU4ICBhbHRfbGVuOwkJLyogc2l6ZSBvZiBuZXcgaW5zdHJ1Y3Rpb24ocyksIDw9IG9y aWdfbGVuICovCj4gK307Cj4gKwo+ICt2b2lkIF9faW5pdCBhcHBseV9hbHRlcm5hdGl2ZXNfYWxs KHZvaWQpOwo+ICtpbnQgYXBwbHlfYWx0ZXJuYXRpdmVzKHZvaWQgKnN0YXJ0LCBzaXplX3QgbGVu Z3RoKTsKPiArCj4gKyNkZWZpbmUgQUxUSU5TVFJfRU5UUlkoZmVhdHVyZSkJCQkJCQkgICAgICBc Cj4gKwkiIC53b3JkIDY2MWIgLSAuXG4iCQkJCS8qIGxhYmVsICAgICAgICAgICAqLyBcCj4gKwki IC53b3JkIDY2M2YgLSAuXG4iCQkJCS8qIG5ldyBpbnN0cnVjdGlvbiAqLyBcCj4gKwkiIC5od29y ZCAiIF9fc3RyaW5naWZ5KGZlYXR1cmUpICJcbiIJCS8qIGZlYXR1cmUgYml0ICAgICAqLyBcCj4g KwkiIC5ieXRlIDY2MmItNjYxYlxuIgkJCQkvKiBzb3VyY2UgbGVuICAgICAgKi8gXAo+ICsJIiAu Ynl0ZSA2NjRmLTY2M2ZcbiIJCQkJLyogcmVwbGFjZW1lbnQgbGVuICovCj4gKwo+ICsvKgo+ICsg KiBhbHRlcm5hdGl2ZSBhc3NlbWJseSBwcmltaXRpdmU6Cj4gKyAqCj4gKyAqIElmIGFueSBvZiB0 aGVzZSAub3JnIGRpcmVjdGl2ZSBmYWlsLCBpdCBtZWFucyB0aGF0IGluc24xIGFuZCBpbnNuMgo+ ICsgKiBkb24ndCBoYXZlIHRoZSBzYW1lIGxlbmd0aC4gVGhpcyB1c2VkIHRvIGJlIHdyaXR0ZW4g YXMKPiArICoKPiArICogLmlmICgoNjY0Yi02NjNiKSAhPSAoNjYyYi02NjFiKSkKPiArICogCS5l cnJvciAiQWx0ZXJuYXRpdmVzIGluc3RydWN0aW9uIGxlbmd0aCBtaXNtYXRjaCIKPiArICogLmVu ZGlmCj4gKyAqCj4gKyAqIGJ1dCBtb3N0IGFzc2VtYmxlcnMgZGllIGlmIGluc24xIG9yIGluc24y IGhhdmUgYSAuaW5zdC4gVGhpcyBzaG91bGQKPiArICogYmUgZml4ZWQgaW4gYSBiaW51dGlscyBy ZWxlYXNlIHBvc3RlcmlvciB0byAyLjI1LjUxLjAuMiAoYW55dGhpbmcKPiArICogY29udGFpbmlu ZyBjb21taXQgNGU0ZDA4Y2Y3Mzk5YjYwNiBvciBjMWJhYWRkZjg4NjEpLgo+ICsgKi8KPiArI2Rl ZmluZSBfX0FMVEVSTkFUSVZFX0NGRyhvbGRpbnN0ciwgbmV3aW5zdHIsIGZlYXR1cmUsIGNmZ19l bmFibGVkKQlcCj4gKwkiLmlmICJfX3N0cmluZ2lmeShjZmdfZW5hYmxlZCkiID09IDFcbiIJCQkJ XAo+ICsJIjY2MTpcblx0IgkJCQkJCQlcCj4gKwlvbGRpbnN0ciAiXG4iCQkJCQkJCVwKPiArCSI2 NjI6XG4iCQkJCQkJCVwKPiArCSIucHVzaHNlY3Rpb24gLmFsdGluc3RydWN0aW9ucyxcImFcIlxu IgkJCQlcCj4gKwlBTFRJTlNUUl9FTlRSWShmZWF0dXJlKQkJCQkJCVwKPiArCSIucG9wc2VjdGlv blxuIgkJCQkJCQlcCj4gKwkiLnB1c2hzZWN0aW9uIC5hbHRpbnN0cl9yZXBsYWNlbWVudCwgXCJh XCJcbiIJCQlcCj4gKwkiNjYzOlxuXHQiCQkJCQkJCVwKPiArCW5ld2luc3RyICJcbiIJCQkJCQkJ XAo+ICsJIjY2NDpcblx0IgkJCQkJCQlcCj4gKwkiLnBvcHNlY3Rpb25cblx0IgkJCQkJCVwKPiAr CSIub3JnCS4gLSAoNjY0Yi02NjNiKSArICg2NjJiLTY2MWIpXG5cdCIJCQlcCj4gKwkiLm9yZwku IC0gKDY2MmItNjYxYikgKyAoNjY0Yi02NjNiKVxuIgkJCVwKPiArCSIuZW5kaWZcbiIKPiArCj4g KyNkZWZpbmUgX0FMVEVSTkFUSVZFX0NGRyhvbGRpbnN0ciwgbmV3aW5zdHIsIGZlYXR1cmUsIGNm ZywgLi4uKQlcCj4gKwlfX0FMVEVSTkFUSVZFX0NGRyhvbGRpbnN0ciwgbmV3aW5zdHIsIGZlYXR1 cmUsIElTX0VOQUJMRUQoY2ZnKSkKPiArCj4gKyNlbHNlCj4gKwo+ICsjaW5jbHVkZSA8YXNtL2Fz bV9kZWZucy5oPgo+ICsKPiArLm1hY3JvIGFsdGluc3RydWN0aW9uX2VudHJ5IG9yaWdfb2Zmc2V0 IGFsdF9vZmZzZXQgZmVhdHVyZSBvcmlnX2xlbiBhbHRfbGVuCj4gKwkud29yZCBcb3JpZ19vZmZz ZXQgLSAuCj4gKwkud29yZCBcYWx0X29mZnNldCAtIC4KPiArCS5od29yZCBcZmVhdHVyZQo+ICsJ LmJ5dGUgXG9yaWdfbGVuCj4gKwkuYnl0ZSBcYWx0X2xlbgo+ICsuZW5kbQo+ICsKPiArLm1hY3Jv IGFsdGVybmF0aXZlX2luc24gaW5zbjEsIGluc24yLCBjYXAsIGVuYWJsZSA9IDEKPiArCS5pZiBc ZW5hYmxlCj4gKzY2MToJXGluc24xCj4gKzY2MjoJLnB1c2hzZWN0aW9uIC5hbHRpbnN0cnVjdGlv bnMsICJhIgo+ICsJYWx0aW5zdHJ1Y3Rpb25fZW50cnkgNjYxYiwgNjYzZiwgXGNhcCwgNjYyYi02 NjFiLCA2NjRmLTY2M2YKPiArCS5wb3BzZWN0aW9uCj4gKwkucHVzaHNlY3Rpb24gLmFsdGluc3Ry X3JlcGxhY2VtZW50LCAiYXgiCj4gKzY2MzoJXGluc24yCj4gKzY2NDoJLnBvcHNlY3Rpb24KPiAr CS5vcmcJLiAtICg2NjRiLTY2M2IpICsgKDY2MmItNjYxYikKPiArCS5vcmcJLiAtICg2NjJiLTY2 MWIpICsgKDY2NGItNjYzYikKPiArCS5lbmRpZgo+ICsuZW5kbQo+ICsKPiArLyoKPiArICogQmVn aW4gYW4gYWx0ZXJuYXRpdmUgY29kZSBzZXF1ZW5jZS4KPiArICoKPiArICogVGhlIGNvZGUgdGhh dCBmb2xsb3dzIHRoaXMgbWFjcm8gd2lsbCBiZSBhc3NlbWJsZWQgYW5kIGxpbmtlZCBhcwo+ICsg KiBub3JtYWwuIFRoZXJlIGFyZSBubyByZXN0cmljdGlvbnMgb24gdGhpcyBjb2RlLgo+ICsgKi8K PiArLm1hY3JvIGFsdGVybmF0aXZlX2lmX25vdCBjYXAsIGVuYWJsZSA9IDEKPiArCS5pZiBcZW5h YmxlCj4gKwkucHVzaHNlY3Rpb24gLmFsdGluc3RydWN0aW9ucywgImEiCj4gKwlhbHRpbnN0cnVj dGlvbl9lbnRyeSA2NjFmLCA2NjNmLCBcY2FwLCA2NjJmLTY2MWYsIDY2NGYtNjYzZgo+ICsJLnBv cHNlY3Rpb24KPiArNjYxOgo+ICsJLmVuZGlmCj4gKy5lbmRtCj4gKwo+ICsvKgo+ICsgKiBQcm92 aWRlIHRoZSBhbHRlcm5hdGl2ZSBjb2RlIHNlcXVlbmNlLgo+ICsgKgo+ICsgKiBUaGUgY29kZSB0 aGF0IGZvbGxvd3MgdGhpcyBtYWNybyBpcyBhc3NlbWJsZWQgaW50byBhIHNwZWNpYWwKPiArICog c2VjdGlvbiB0byBiZSB1c2VkIGZvciBkeW5hbWljIHBhdGNoaW5nLiBDb2RlIHRoYXQgZm9sbG93 cyB0aGlzCj4gKyAqIG1hY3JvIG11c3Q6Cj4gKyAqCj4gKyAqIDEuIEJlIGV4YWN0bHkgdGhlIHNh bWUgbGVuZ3RoIChpbiBieXRlcykgYXMgdGhlIGRlZmF1bHQgY29kZQo+ICsgKiAgICBzZXF1ZW5j ZS4KPiArICoKPiArICogMi4gTm90IGNvbnRhaW4gYSBicmFuY2ggdGFyZ2V0IHRoYXQgaXMgdXNl ZCBvdXRzaWRlIG9mIHRoZQo+ICsgKiAgICBhbHRlcm5hdGl2ZSBzZXF1ZW5jZSBpdCBpcyBkZWZp bmVkIGluIChicmFuY2hlcyBpbnRvIGFuCj4gKyAqICAgIGFsdGVybmF0aXZlIHNlcXVlbmNlIGFy ZSBub3QgZml4ZWQgdXApLgo+ICsgKi8KPiArLm1hY3JvIGFsdGVybmF0aXZlX2Vsc2UKPiArNjYy OgkucHVzaHNlY3Rpb24gLmFsdGluc3RyX3JlcGxhY2VtZW50LCAiYXgiCj4gKzY2MzoKPiArLmVu ZG0KPiArCj4gKy8qCj4gKyAqIENvbXBsZXRlIGFuIGFsdGVybmF0aXZlIGNvZGUgc2VxdWVuY2Uu Cj4gKyAqLwo+ICsubWFjcm8gYWx0ZXJuYXRpdmVfZW5kaWYKPiArNjY0OgkucG9wc2VjdGlvbgo+ ICsJLm9yZwkuIC0gKDY2NGItNjYzYikgKyAoNjYyYi02NjFiKQo+ICsJLm9yZwkuIC0gKDY2MmIt NjYxYikgKyAoNjY0Yi02NjNiKQo+ICsuZW5kbQo+ICsKPiArI2RlZmluZSBfQUxURVJOQVRJVkVf Q0ZHKGluc24xLCBpbnNuMiwgY2FwLCBjZmcsIC4uLikJXAo+ICsJYWx0ZXJuYXRpdmVfaW5zbiBp bnNuMSwgaW5zbjIsIGNhcCwgSVNfRU5BQkxFRChjZmcpCj4gKwo+ICsjZW5kaWYgIC8qICBfX0FT U0VNQkxZX18gICovCj4gKwo+ICsvKgo+ICsgKiBVc2FnZTogYXNtKEFMVEVSTkFUSVZFKG9sZGlu c3RyLCBuZXdpbnN0ciwgZmVhdHVyZSkpOwo+ICsgKgo+ICsgKiBVc2FnZTogYXNtKEFMVEVSTkFU SVZFKG9sZGluc3RyLCBuZXdpbnN0ciwgZmVhdHVyZSwgQ09ORklHX0ZPTykpOwo+ICsgKiBOLkIu IElmIENPTkZJR19GT08gaXMgc3BlY2lmaWVkLCBidXQgbm90IHNlbGVjdGVkLCB0aGUgd2hvbGUg YmxvY2sKPiArICogICAgICB3aWxsIGJlIG9taXR0ZWQsIGluY2x1ZGluZyBvbGRpbnN0ci4KPiAr ICovCj4gKyNkZWZpbmUgQUxURVJOQVRJVkUob2xkaW5zdHIsIG5ld2luc3RyLCAuLi4pICAgXAo+ ICsJX0FMVEVSTkFUSVZFX0NGRyhvbGRpbnN0ciwgbmV3aW5zdHIsIF9fVkFfQVJHU19fLCAxKQo+ ICsKPiArI2Vsc2UgLyogIUNPTkZJR19BTFRFUk5BVElWRSAqLwo+ICsKPiArc3RhdGljIGlubGlu ZSB2b2lkIGFwcGx5X2FsdGVybmF0aXZlc19hbGwodm9pZCkKPiArewo+ICt9Cj4gKwo+ICtpbnQg YXBwbHlfYWx0ZXJuYXRpdmVzKHZvaWQgKnN0YXJ0LCBzaXplX3QgbGVuZ2h0KQo+ICt7Cj4gKyAg ICByZXR1cm4gMDsKPiArfQo+ICsKPiArI2VuZGlmCj4gKwo+ICsjZW5kaWYgLyogX19BU01fQUxU RVJOQVRJVkVfSCAqLwo+IGRpZmYgLS1naXQgYS94ZW4vaW5jbHVkZS9hc20tYXJtL2FybTY0L2lu c24uaCBiL3hlbi9pbmNsdWRlL2FzbS1hcm0vYXJtNjQvaW5zbi5oCj4gaW5kZXggY2ZjZGJlOS4u NmNlMzdiZSAxMDA2NDQKPiAtLS0gYS94ZW4vaW5jbHVkZS9hc20tYXJtL2FybTY0L2luc24uaAo+ ICsrKyBiL3hlbi9pbmNsdWRlL2FzbS1hcm0vYXJtNjQvaW5zbi5oCj4gQEAgLTYxLDYgKzYxLDIy IEBAIHUzMiBhYXJjaDY0X2luc25fZW5jb2RlX2ltbWVkaWF0ZShlbnVtIGFhcmNoNjRfaW5zbl9p bW1fdHlwZSB0eXBlLAo+ICBzMzIgYWFyY2g2NF9nZXRfYnJhbmNoX29mZnNldCh1MzIgaW5zbik7 Cj4gIHUzMiBhYXJjaDY0X3NldF9icmFuY2hfb2Zmc2V0KHUzMiBpbnNuLCBzMzIgb2Zmc2V0KTsK PiAgCj4gKy8qIFdyYXBwZXIgZm9yIGNvbW1vbiBjb2RlICovCj4gK3N0YXRpYyBpbmxpbmUgYm9v bCBpbnNuX2lzX2JyYW5jaF9pbW0odTMyIGluc24pCj4gK3sKPiArICAgIHJldHVybiBhYXJjaDY0 X2luc25faXNfYnJhbmNoX2ltbShpbnNuKTsKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSBzMzIg aW5zbl9nZXRfYnJhbmNoX29mZnNldCh1MzIgaW5zbikKPiArewo+ICsgICAgcmV0dXJuIGFhcmNo NjRfZ2V0X2JyYW5jaF9vZmZzZXQoaW5zbik7Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUgdTMy IGluc25fc2V0X2JyYW5jaF9vZmZzZXQodTMyIGluc24sIHMzMiBvZmZzZXQpCj4gK3sKPiArICAg IHJldHVybiBhYXJjaDY0X3NldF9icmFuY2hfb2Zmc2V0KGluc24sIG9mZnNldCk7Cj4gK30KPiAr Cj4gICNlbmRpZiAvKiAhX19BUkNIX0FSTV9BUk02NF9JTlNOICovCj4gIC8qCj4gICAqIExvY2Fs IHZhcmlhYmxlczoKPiAtLSAKPiAxLjkuMQo+IAo+IAo+IF9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fCj4gWGVuLWRldmVsIG1haWxpbmcgbGlzdAo+IFhlbi1k ZXZlbEBsaXN0cy54ZW4ub3JnCj4gaHR0cDovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCgpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFp bGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHA6Ly9saXN0cy54ZW4ub3JnL3hl bi1kZXZlbAo=