From mboxrd@z Thu Jan 1 00:00:00 1970 From: Julien Grall Subject: [PATCH v3 09/16] xen/arm: Introduce alternative runtime patching Date: Tue, 7 Jun 2016 17:06:16 +0100 Message-ID: <1465315583-1278-10-git-send-email-julien.grall@arm.com> References: <1465315583-1278-1-git-send-email-julien.grall@arm.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1465315583-1278-1-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: xen-devel@lists.xen.org Cc: andre.przywara@arm.com, Julien Grall , sstabellini@kernel.org, wei.chen@arm.com, steve.capper@arm.com List-Id: xen-devel@lists.xenproject.org U29tZSBvZiB0aGUgcHJvY2Vzc29yIGVycmF0dW0gd2lsbCByZXF1aXJlIHRvIG1vZGlmeSBjb2Rl IHNlcXVlbmNlLgpBcyB0aG9zZSBtb2RpZmljYXRpb25zIG1heSBpbXBhY3QgdGhlIHBlcmZvcm1h bmNlLCB0aGV5IHNob3VsZCBvbmx5CmJlIGVuYWJsZWQgb24gYWZmZWN0ZWQgY29yZXMuIEZ1cnRo ZXJtb3JlLCBYZW4gbWF5IGFsc28gd2FudCB0byB0YWtlCmFkdmFudGFnZSBvZiBuZXcgaGFyZHdh cmUgZmVhdHVyZXMgY29taW5nIHVwIHdpdGggdjguMSBhbmQgdjguMi4KClRoaXMgcGF0Y2ggYWRk cyBhbiBpbmZyYXN0cnVjdHVyZSB0byBwYXRjaCBYZW4gZHVyaW5nIGJvb3QgdGltZQpkZXBlbmRp bmcgb24gdGhlICJmZWF0dXJlcyIgYXZhaWxhYmxlIG9uIHRoZSBwbGF0Zm9ybS4KClRoaXMgY29k ZSBpcyBiYXNlZCBvbiB0aGUgZmlsZSBhcmNoL2FybTY0L2tlcm5lbC9hbHRlcm5hdGl2ZS5jIGlu CkxpbnV4IDQuNi1yYzMuIEFueSByZWZlcmVuY2VzIHRvIGFybTY0IGhhdmUgYmVlbiBkcm9wcGVk IHRvIG1ha2UgdGhlCmNvZGUgYXMgZ2VuZXJpYyBhcyBwb3NzaWJsZS4KCldoZW4gWGVuIGlzIGNy ZWF0aW5nIHRoZSBwYWdlIHRhYmxlcywgYWxsIHRoZSBleGVjdXRhYmxlIHNlY3Rpb25zCigudGV4 dCBhbmQgLmluaXQudGV4dCkgd2lsbCBiZSBtYXJrZWQgcmVhZC1vbmx5IGFuZCB0aGVuIGVuZm9y Y2VkIGJ5CnNldHRpbmcgU0NUTFIuV05YLgoKV2hpbHN0IGl0IG1pZ2h0IGJlIHBvc3NpYmxlIHRv IG1hcmsgdGhvc2UgZW50cmllcyByZWFkLW9ubHkgYWZ0ZXIKWGVuIGhhcyBiZWVuIHBhdGNoZWQs IHdlIHdvdWxkIG5lZWQgZXh0cmEgY2FyZSB0byBhdm9pZCBwb3NzaWJsZQpUTEJzIGNvbmZsaWN0 cyAoc2VlIEQ0LTE3MzIgaW4gQVJNIERESSAwNDg3QS5pKSBhcyBhbGwKcGh5c2ljYWwgQ1BVcyB3 aWxsIGJlIHJ1bm5pbmcuCgpBbGwgdGhlIHBoeXNpY2FsIENQVXMgaGF2ZSB0byBiZSBicm91Z2h0 IHVwIGJlZm9yZSBwYXRjaGluZyBYZW4gYmVjYXVzZQplYWNoIGNvcmVzIG1heSBoYXZlIGRpZmZl cmVudCBlcnJhdGEvZmVhdHVyZXMgd2hpY2ggcmVxdWlyZSBjb2RlCnBhdGNoaW5nLiBUaGUgb25s eSB3YXkgdG8gZmluZCB0aGVtIGlzIHRvIHByb2JlIHN5c3RlbSByZWdpc3RlcnMgb24KZWFjaCBD UFUuCgpUbyBhdm9pZCBleHRyYSBjb21wbGV4aXR5LCBpdCBpcyBwb3NzaWJsZSB0byBjcmVhdGUg YSB0ZW1wb3JhcnkKd3JpdGVhYmxlIG1hcHBpbmcgd2l0aCB2bWFwLiBUaGlzIG1hcHBpbmcgd2ls bCBiZSB1c2VkIHRvIHdyaXRlIHRoZQpuZXcgaW5zdHJ1Y3Rpb25zLgoKTGFzdGx5LCBydW50aW1l IHBhdGNoaW5nIGlzIGN1cnJlbnRseSBub3QgbmVjZXNzYXJ5IGZvciBBUk0zMi4gU28gdGhlCmNv ZGUgaXMgb25seSBlbmFibGVkIGZvciBBUk02NC4KClNpZ25lZC1vZmYtYnk6IEp1bGllbiBHcmFs bCA8anVsaWVuLmdyYWxsQGFybS5jb20+CgotLS0KICAgIENoYW5nZXMgaW4gdjI6CiAgICAgICAg LSBVc2UgaGFyZCB0YWJzIGluIEtjb25maWcKICAgICAgICAtIFVwZGF0ZSB0aGUgY29weXJpZ2h0 IHllYXIKICAgICAgICAtIFVwZGF0ZSB0aGUgY29tbWl0IG1lc3NhZ2UgdG8gZXhwbGFpbiB0aGUg ZXh0cmEgbWFwcGluZwoKICAgIENoYW5nZXMgaW4gdjM6CiAgICAgICAgLSAuYWx0aW5zdHJfcmVw bGFjZW1lbnQgc2hvdWxkIGxpdmUgaW4gaW5pdC50ZXh0CiAgICAgICAgLSBBZGQgYSBjb21tZW50 IHRvIGV4cGxhaW4gd2hlbiBhcHBseV9hbHRlcm5hdGl2ZXNfYWxsIHNob3VsZCBiZQogICAgICAg IGNhbGxlZC4KLS0tCiB4ZW4vYXJjaC9hcm0vS2NvbmZpZyAgICAgICAgICAgICAgfCAgIDUgKwog eGVuL2FyY2gvYXJtL01ha2VmaWxlICAgICAgICAgICAgIHwgICAxICsKIHhlbi9hcmNoL2FybS9h bHRlcm5hdGl2ZS5jICAgICAgICB8IDIyMSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKwogeGVuL2FyY2gvYXJtL3NldHVwLmMgICAgICAgICAgICAgIHwgICA3ICsrCiB4ZW4v YXJjaC9hcm0veGVuLmxkcy5TICAgICAgICAgICAgfCAgMTAgKysKIHhlbi9pbmNsdWRlL2FzbS1h cm0vYWx0ZXJuYXRpdmUuaCB8IDE2NSArKysrKysrKysrKysrKysrKysrKysrKysrKysrCiB4ZW4v aW5jbHVkZS9hc20tYXJtL2FybTY0L2luc24uaCAgfCAgMTYgKysrCiA3IGZpbGVzIGNoYW5nZWQs IDQyNSBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgeGVuL2FyY2gvYXJtL2FsdGVy bmF0aXZlLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCB4ZW4vaW5jbHVkZS9hc20tYXJtL2FsdGVybmF0 aXZlLmgKCmRpZmYgLS1naXQgYS94ZW4vYXJjaC9hcm0vS2NvbmZpZyBiL3hlbi9hcmNoL2FybS9L Y29uZmlnCmluZGV4IDYyMzFjZDUuLjAxNDFiZDkgMTAwNjQ0Ci0tLSBhL3hlbi9hcmNoL2FybS9L Y29uZmlnCisrKyBiL3hlbi9hcmNoL2FybS9LY29uZmlnCkBAIC0xNCw2ICsxNCw3IEBAIGNvbmZp ZyBBUk1fNjQKIAlkZWZfYm9vbCB5CiAJZGVwZW5kcyBvbiA2NEJJVAogCXNlbGVjdCBIQVNfR0lD VjMKKwlzZWxlY3QgQUxURVJOQVRJVkUKIAogY29uZmlnIEFSTQogCWRlZl9ib29sIHkKQEAgLTQ2 LDYgKzQ3LDEwIEBAIGNvbmZpZyBBQ1BJCiBjb25maWcgSEFTX0dJQ1YzCiAJYm9vbAogCisjIFNl bGVjdCBBTFRFUk5BVElWRSBpZiB0aGUgYXJjaGl0ZWN0dXJlIHN1cHBvcnRzIHJ1bnRpbWUgcGF0 Y2hpbmcKK2NvbmZpZyBBTFRFUk5BVElWRQorCWJvb2wKKwogZW5kbWVudQogCiBzb3VyY2UgImNv bW1vbi9LY29uZmlnIgpkaWZmIC0tZ2l0IGEveGVuL2FyY2gvYXJtL01ha2VmaWxlIGIveGVuL2Fy Y2gvYXJtL01ha2VmaWxlCmluZGV4IGI5NWQ5MjQuLjY3Y2NjNDMgMTAwNjQ0Ci0tLSBhL3hlbi9h cmNoL2FybS9NYWtlZmlsZQorKysgYi94ZW4vYXJjaC9hcm0vTWFrZWZpbGUKQEAgLTQsNiArNCw3 IEBAIHN1YmRpci15ICs9IHBsYXRmb3Jtcwogc3ViZGlyLSQoQ09ORklHX0FSTV82NCkgKz0gZWZp CiBzdWJkaXItJChDT05GSUdfQUNQSSkgKz0gYWNwaQogCitvYmotJChDT05GSUdfQUxURVJOQVRJ VkUpICs9IGFsdGVybmF0aXZlLm8KIG9iai15ICs9IGJvb3RmZHQubwogb2JqLXkgKz0gY3B1Lm8K IG9iai15ICs9IGNwdWZlYXR1cmUubwpkaWZmIC0tZ2l0IGEveGVuL2FyY2gvYXJtL2FsdGVybmF0 aXZlLmMgYi94ZW4vYXJjaC9hcm0vYWx0ZXJuYXRpdmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwLi5kMDBmOThlCi0tLSAvZGV2L251bGwKKysrIGIveGVuL2FyY2gvYXJtL2Fs dGVybmF0aXZlLmMKQEAgLTAsMCArMSwyMjEgQEAKKy8qCisgKiBhbHRlcm5hdGl2ZSBydW50aW1l IHBhdGNoaW5nCisgKiBpbnNwaXJlZCBieSB0aGUgeDg2IHZlcnNpb24KKyAqCisgKiBDb3B5cmln aHQgKEMpIDIwMTQtMjAxNiBBUk0gTHRkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRl ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBh cworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICog VGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1 c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5 IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHBy b2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8K KworI2luY2x1ZGUgPHhlbi9jb25maWcuaD4KKyNpbmNsdWRlIDx4ZW4vaW5pdC5oPgorI2luY2x1 ZGUgPHhlbi90eXBlcy5oPgorI2luY2x1ZGUgPHhlbi9rZXJuZWwuaD4KKyNpbmNsdWRlIDx4ZW4v bW0uaD4KKyNpbmNsdWRlIDx4ZW4vdm1hcC5oPgorI2luY2x1ZGUgPHhlbi9zbXAuaD4KKyNpbmNs dWRlIDx4ZW4vc3RvcF9tYWNoaW5lLmg+CisjaW5jbHVkZSA8YXNtL2FsdGVybmF0aXZlLmg+Cisj aW5jbHVkZSA8YXNtL2F0b21pYy5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKyNpbmNs dWRlIDxhc20vY3B1ZmVhdHVyZS5oPgorI2luY2x1ZGUgPGFzbS9pbnNuLmg+CisjaW5jbHVkZSA8 YXNtL3BhZ2UuaD4KKworI2RlZmluZSBfX0FMVF9QVFIoYSxmKSAgICAgICh1MzIgKikoKHZvaWQg KikmKGEpLT5mICsgKGEpLT5mKQorI2RlZmluZSBBTFRfT1JJR19QVFIoYSkgICAgIF9fQUxUX1BU UihhLCBvcmlnX29mZnNldCkKKyNkZWZpbmUgQUxUX1JFUExfUFRSKGEpICAgICBfX0FMVF9QVFIo YSwgYWx0X29mZnNldCkKKworZXh0ZXJuIGNvbnN0IHN0cnVjdCBhbHRfaW5zdHIgX19hbHRfaW5z dHJ1Y3Rpb25zW10sIF9fYWx0X2luc3RydWN0aW9uc19lbmRbXTsKKworc3RydWN0IGFsdF9yZWdp b24geworICAgIGNvbnN0IHN0cnVjdCBhbHRfaW5zdHIgKmJlZ2luOworICAgIGNvbnN0IHN0cnVj dCBhbHRfaW5zdHIgKmVuZDsKK307CisKKy8qCisgKiBDaGVjayBpZiB0aGUgdGFyZ2V0IFBDIGlz IHdpdGhpbiBhbiBhbHRlcm5hdGl2ZSBibG9jay4KKyAqLworc3RhdGljIGJvb2xfdCBicmFuY2hf aW5zbl9yZXF1aXJlc191cGRhdGUoY29uc3Qgc3RydWN0IGFsdF9pbnN0ciAqYWx0LAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBwYykKK3sK KyAgICB1bnNpZ25lZCBsb25nIHJlcGxwdHI7CisKKyAgICBpZiAoIGlzX2FjdGl2ZV9rZXJuZWxf dGV4dChwYykgKQorICAgICAgICByZXR1cm4gMTsKKworICAgIHJlcGxwdHIgPSAodW5zaWduZWQg bG9uZylBTFRfUkVQTF9QVFIoYWx0KTsKKyAgICBpZiAoIHBjID49IHJlcGxwdHIgJiYgcGMgPD0g KHJlcGxwdHIgKyBhbHQtPmFsdF9sZW4pICkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvKgor ICAgICAqIEJyYW5jaGluZyBpbnRvICphbm90aGVyKiBhbHRlcm5hdGUgc2VxdWVuY2UgaXMgZG9v bWVkLCBhbmQKKyAgICAgKiB3ZSdyZSBub3QgZXZlbiB0cnlpbmcgdG8gZml4IGl0IHVwLgorICAg ICAqLworICAgIEJVRygpOworfQorCitzdGF0aWMgdTMyIGdldF9hbHRfaW5zbihjb25zdCBzdHJ1 Y3QgYWx0X2luc3RyICphbHQsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1MzIgKmlu c25wdHIsIGNvbnN0IHUzMiAqYWx0aW5zbnB0cikKK3sKKyAgICB1MzIgaW5zbjsKKworICAgIGlu c24gPSBsZTMyX3RvX2NwdSgqYWx0aW5zbnB0cik7CisKKyAgICBpZiAoIGluc25faXNfYnJhbmNo X2ltbShpbnNuKSApCisgICAgeworICAgICAgICBzMzIgb2Zmc2V0ID0gaW5zbl9nZXRfYnJhbmNo X29mZnNldChpbnNuKTsKKyAgICAgICAgdW5zaWduZWQgbG9uZyB0YXJnZXQ7CisKKyAgICAgICAg dGFyZ2V0ID0gKHVuc2lnbmVkIGxvbmcpYWx0aW5zbnB0ciArIG9mZnNldDsKKworICAgICAgICAv KgorICAgICAgICAgKiBJZiB3ZSdyZSBicmFuY2hpbmcgaW5zaWRlIHRoZSBhbHRlcm5hdGUgc2Vx dWVuY2UsCisgICAgICAgICAqIGRvIG5vdCByZXdyaXRlIHRoZSBpbnN0cnVjdGlvbiwgYXMgaXQg aXMgYWxyZWFkeQorICAgICAgICAgKiBjb3JyZWN0LiBPdGhlcndpc2UsIGdlbmVyYXRlIHRoZSBu ZXcgaW5zdHJ1Y3Rpb24uCisgICAgICAgICAqLworICAgICAgICBpZiAoIGJyYW5jaF9pbnNuX3Jl cXVpcmVzX3VwZGF0ZShhbHQsIHRhcmdldCkgKQorICAgICAgICB7CisgICAgICAgICAgICBvZmZz ZXQgPSB0YXJnZXQgLSAodW5zaWduZWQgbG9uZylpbnNucHRyOworICAgICAgICAgICAgaW5zbiA9 IGluc25fc2V0X2JyYW5jaF9vZmZzZXQoaW5zbiwgb2Zmc2V0KTsKKyAgICAgICAgfQorICAgIH0K KworICAgIHJldHVybiBpbnNuOworfQorCitzdGF0aWMgaW50IF9fYXBwbHlfYWx0ZXJuYXRpdmVz KGNvbnN0IHN0cnVjdCBhbHRfcmVnaW9uICpyZWdpb24pCit7CisgICAgY29uc3Qgc3RydWN0IGFs dF9pbnN0ciAqYWx0OworICAgIGNvbnN0IHUzMiAqb3JpZ3B0ciwgKnJlcGxwdHI7CisgICAgdTMy ICp3cml0ZXB0ciwgKndyaXRlbWFwOworICAgIG1mbl90IHRleHRfbWZuID0gX21mbih2aXJ0X3Rv X21mbihfc3RleHQpKTsKKyAgICB1bnNpZ25lZCBpbnQgdGV4dF9vcmRlciA9IGdldF9vcmRlcl9m cm9tX2J5dGVzKF9lbmQgLSBfc3RhcnQpOworCisgICAgcHJpbnRrKCJQYXRjaGluZyBrZXJuZWwg Y29kZVxuIik7CisKKyAgICAvKgorICAgICAqIFRoZSB0ZXh0IHNlY3Rpb24gaXMgcmVhZC1vbmx5 LiBTbyByZS1tYXAgWGVuIHRvIGJlIGFibGUgdG8gcGF0Y2gKKyAgICAgKiB0aGUgY29kZS4KKyAg ICAgKi8KKyAgICB3cml0ZW1hcCA9IF9fdm1hcCgmdGV4dF9tZm4sIDEgPDwgdGV4dF9vcmRlciwg MSwgMSwgUEFHRV9IWVBFUlZJU09SLAorICAgICAgICAgICAgICAgICAgICAgIFZNQVBfREVGQVVM VCk7CisgICAgaWYgKCAhd3JpdGVtYXAgKQorICAgIHsKKyAgICAgICAgcHJpbnRrKCJhbHRlcm5h dGl2ZXM6IFVuYWJsZSB0byBtYXAgdGhlIHRleHQgc2VjdGlvblxuIik7CisgICAgICAgIHJldHVy biAtRU5PTUVNOworICAgIH0KKworICAgIGZvciAoIGFsdCA9IHJlZ2lvbi0+YmVnaW47IGFsdCA8 IHJlZ2lvbi0+ZW5kOyBhbHQrKyApCisgICAgeworICAgICAgICB1MzIgaW5zbjsKKyAgICAgICAg aW50IGksIG5yX2luc3Q7CisKKyAgICAgICAgaWYgKCAhY3B1c19oYXZlX2NhcChhbHQtPmNwdWZl YXR1cmUpICkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIEJVR19PTihhbHQtPmFs dF9sZW4gIT0gYWx0LT5vcmlnX2xlbik7CisKKyAgICAgICAgb3JpZ3B0ciA9IEFMVF9PUklHX1BU UihhbHQpOworICAgICAgICB3cml0ZXB0ciA9IG9yaWdwdHIgLSAodTMyICopX3N0YXJ0ICsgd3Jp dGVtYXA7CisgICAgICAgIHJlcGxwdHIgPSBBTFRfUkVQTF9QVFIoYWx0KTsKKworICAgICAgICBu cl9pbnN0ID0gYWx0LT5hbHRfbGVuIC8gc2l6ZW9mKGluc24pOworCisgICAgICAgIGZvciAoIGkg PSAwOyBpIDwgbnJfaW5zdDsgaSsrICkKKyAgICAgICAgeworICAgICAgICAgICAgaW5zbiA9IGdl dF9hbHRfaW5zbihhbHQsIG9yaWdwdHIgKyBpLCByZXBscHRyICsgaSk7CisgICAgICAgICAgICAq KHdyaXRlcHRyICsgaSkgPSBjcHVfdG9fbGUzMihpbnNuKTsKKyAgICAgICAgfQorCisgICAgICAg IC8qIEVuc3VyZSB0aGUgbmV3IGluc3RydWN0aW9ucyByZWFjaGVkIHRoZSBtZW1vcnkgYW5kIG51 a2UgKi8KKyAgICAgICAgY2xlYW5fYW5kX2ludmFsaWRhdGVfZGNhY2hlX3ZhX3JhbmdlKHdyaXRl cHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNpemVv ZiAoKndyaXRlcHRyKSAqIG5yX2luc3QpKTsKKyAgICB9CisKKyAgICAvKiBOdWtlIHRoZSBpbnN0 cnVjdGlvbiBjYWNoZSAqLworICAgIGludmFsaWRhdGVfaWNhY2hlKCk7CisKKyAgICB2dW5tYXAo d3JpdGVtYXApOworCisgICAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiBXZSBtaWdodCBiZSBwYXRj aGluZyB0aGUgc3RvcF9tYWNoaW5lIHN0YXRlIG1hY2hpbmUsIHNvIGltcGxlbWVudCBhCisgKiBy ZWFsbHkgc2ltcGxlIHBvbGxpbmcgcHJvdG9jb2wgaGVyZS4KKyAqLworc3RhdGljIGludCBfX2Fw cGx5X2FsdGVybmF0aXZlc19tdWx0aV9zdG9wKHZvaWQgKnVudXNlZCkKK3sKKyAgICBzdGF0aWMg aW50IHBhdGNoZWQgPSAwOworICAgIHN0cnVjdCBhbHRfcmVnaW9uIHJlZ2lvbiA9IHsKKyAgICAg ICAgLmJlZ2luID0gX19hbHRfaW5zdHJ1Y3Rpb25zLAorICAgICAgICAuZW5kID0gX19hbHRfaW5z dHJ1Y3Rpb25zX2VuZCwKKyAgICB9OworCisgICAgLyogV2UgYWx3YXlzIGhhdmUgYSBDUFUgMCBh dCB0aGlzIHBvaW50IChfX2luaXQpICovCisgICAgaWYgKCBzbXBfcHJvY2Vzc29yX2lkKCkgKQor ICAgIHsKKyAgICAgICAgd2hpbGUgKCAhcmVhZF9hdG9taWMoJnBhdGNoZWQpICkKKyAgICAgICAg ICAgIGNwdV9yZWxheCgpOworICAgICAgICBpc2IoKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsK KyAgICAgICAgaW50IHJldDsKKworICAgICAgICBCVUdfT04ocGF0Y2hlZCk7CisgICAgICAgIHJl dCA9IF9fYXBwbHlfYWx0ZXJuYXRpdmVzKCZyZWdpb24pOworICAgICAgICAvKiBUaGUgcGF0Y2hp bmcgaXMgbm90IGV4cGVjdGVkIHRvIGZhaWwgZHVyaW5nIGJvb3QuICovCisgICAgICAgIEJVR19P TihyZXQgIT0gMCk7CisKKyAgICAgICAgLyogQmFycmllcnMgcHJvdmlkZWQgYnkgdGhlIGNhY2hl IGZsdXNoaW5nICovCisgICAgICAgIHdyaXRlX2F0b21pYygmcGF0Y2hlZCwgMSk7CisgICAgfQor CisgICAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBvbmx5IGJl IGNhbGxlZCBkdXJpbmcgYm9vdCBhbmQgYmVmb3JlIENQVTAganVtcAorICogaW50byB0aGUgaWRs ZV9sb29wLgorICovCit2b2lkIF9faW5pdCBhcHBseV9hbHRlcm5hdGl2ZXNfYWxsKHZvaWQpCit7 CisgICAgaW50IHJldDsKKworCS8qIGJldHRlciBub3QgdHJ5IGNvZGUgcGF0Y2hpbmcgb24gYSBs aXZlIFNNUCBzeXN0ZW0gKi8KKyAgICByZXQgPSBzdG9wX21hY2hpbmVfcnVuKF9fYXBwbHlfYWx0 ZXJuYXRpdmVzX211bHRpX3N0b3AsIE5VTEwsIE5SX0NQVVMpOworCisgICAgLyogc3RvcF9tYWNo aW5lX3J1biBzaG91bGQgbmV2ZXIgZmFpbCBhdCB0aGlzIHN0YWdlIG9mIHRoZSBib290ICovCisg ICAgQlVHX09OKHJldCk7Cit9CisKK2ludCBhcHBseV9hbHRlcm5hdGl2ZXModm9pZCAqc3RhcnQs IHNpemVfdCBsZW5ndGgpCit7CisgICAgc3RydWN0IGFsdF9yZWdpb24gcmVnaW9uID0geworICAg ICAgICAuYmVnaW4gPSBzdGFydCwKKyAgICAgICAgLmVuZCA9IHN0YXJ0ICsgbGVuZ3RoLAorICAg IH07CisKKyAgICByZXR1cm4gX19hcHBseV9hbHRlcm5hdGl2ZXMoJnJlZ2lvbik7Cit9CisKKy8q CisgKiBMb2NhbCB2YXJpYWJsZXM6CisgKiBtb2RlOiBDCisgKiBjLWZpbGUtc3R5bGU6ICJCU0Qi CisgKiBjLWJhc2ljLW9mZnNldDogNAorICogaW5kZW50LXRhYnMtbW9kZTogbmlsCisgKiBFbmQ6 CisgKi8KZGlmZiAtLWdpdCBhL3hlbi9hcmNoL2FybS9zZXR1cC5jIGIveGVuL2FyY2gvYXJtL3Nl dHVwLmMKaW5kZXggOWJjMTFjNC4uMDFlMjkwMCAxMDA2NDQKLS0tIGEveGVuL2FyY2gvYXJtL3Nl dHVwLmMKKysrIGIveGVuL2FyY2gvYXJtL3NldHVwLmMKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNs dWRlIDx4ZW4vdm1hcC5oPgogI2luY2x1ZGUgPHhlbi9saWJmZHQvbGliZmR0Lmg+CiAjaW5jbHVk ZSA8eGVuL2FjcGkuaD4KKyNpbmNsdWRlIDxhc20vYWx0ZXJuYXRpdmUuaD4KICNpbmNsdWRlIDxh c20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9jdXJyZW50Lmg+CiAjaW5jbHVkZSA8YXNtL3NldHVw Lmg+CkBAIC04MzUsNiArODM2LDEyIEBAIHZvaWQgX19pbml0IHN0YXJ0X3hlbih1bnNpZ25lZCBs b25nIGJvb3RfcGh5c19vZmZzZXQsCiAKICAgICBkb19pbml0Y2FsbHMoKTsKIAorICAgIC8qCisg ICAgICogSXQgbmVlZHMgdG8gYmUgY2FsbGVkIGFmdGVyIGRvX2luaXRjYWxscyB0byBiZSBhYmxl IHRvIHVzZQorICAgICAqIHN0b3BfbWFjaGluZSAodGFza2xldHMgaW5pdGlhbGl6ZWQgdmlhIGFu IGluaXRjYWxsKS4KKyAgICAgKi8KKyAgICBhcHBseV9hbHRlcm5hdGl2ZXNfYWxsKCk7CisKICAg ICAvKiBDcmVhdGUgaW5pdGlhbCBkb21haW4gMC4gKi8KICAgICAvKiBUaGUgdkdJQyBmb3IgRE9N MCBpcyBleGFjdGx5IGVtdWxhdGluZyB0aGUgaGFyZHdhcmUgR0lDICovCiAgICAgY29uZmlnLmdp Y192ZXJzaW9uID0gWEVOX0RPTUNUTF9DT05GSUdfR0lDX05BVElWRTsKZGlmZiAtLWdpdCBhL3hl bi9hcmNoL2FybS94ZW4ubGRzLlMgYi94ZW4vYXJjaC9hcm0veGVuLmxkcy5TCmluZGV4IDFmMDEw YmQuLjQ5NWY5ZDggMTAwNjQ0Ci0tLSBhL3hlbi9hcmNoL2FybS94ZW4ubGRzLlMKKysrIGIveGVu L2FyY2gvYXJtL3hlbi5sZHMuUwpAQCAtMTI5LDYgKzEyOSw5IEBAIFNFQ1RJT05TCiAgICAgICAg X3Npbml0dGV4dCA9IC47CiAgICAgICAgKiguaW5pdC50ZXh0KQogICAgICAgIF9laW5pdHRleHQg PSAuOworI2lmZGVmIENPTkZJR19BTFRFUk5BVElWRQorICAgICAgICooLmFsdGluc3RyX3JlcGxh Y2VtZW50KQorI2VuZGlmCiAgIH0gOnRleHQKICAgLiA9IEFMSUdOKFBBR0VfU0laRSk7CiAgIC5p bml0LmRhdGEgOiB7CkBAIC0xNjcsNiArMTcwLDEzIEBAIFNFQ1RJT05TCiAgICAgICAgKigueHNt X2luaXRjYWxsLmluaXQpCiAgICAgICAgX194c21faW5pdGNhbGxfZW5kID0gLjsKICAgfSA6dGV4 dAorI2lmZGVmIENPTkZJR19BTFRFUk5BVElWRQorICAuaW5pdC5hbHRlcm5hdGl2ZXMgOiB7Cisg ICAgICBfX2FsdF9pbnN0cnVjdGlvbnMgPSAuOworICAgICAgKiguYWx0aW5zdHJ1Y3Rpb25zKQor ICAgICAgX19hbHRfaW5zdHJ1Y3Rpb25zX2VuZCA9IC47CisgIH0KKyNlbmRpZgogICBfX2luaXRf ZW5kX2VmaSA9IC47CiAgIC4gPSBBTElHTihTVEFDS19TSVpFKTsKICAgX19pbml0X2VuZCA9IC47 CmRpZmYgLS1naXQgYS94ZW4vaW5jbHVkZS9hc20tYXJtL2FsdGVybmF0aXZlLmggYi94ZW4vaW5j bHVkZS9hc20tYXJtL2FsdGVybmF0aXZlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMC4uN2UzYTYxMAotLS0gL2Rldi9udWxsCisrKyBiL3hlbi9pbmNsdWRlL2FzbS1hcm0vYWx0 ZXJuYXRpdmUuaApAQCAtMCwwICsxLDE2NSBAQAorI2lmbmRlZiBfX0FTTV9BTFRFUk5BVElWRV9I CisjZGVmaW5lIF9fQVNNX0FMVEVSTkFUSVZFX0gKKworI2luY2x1ZGUgPGFzbS9jcHVmZWF0dXJl Lmg+CisjaW5jbHVkZSA8eGVuL2NvbmZpZy5oPgorI2luY2x1ZGUgPHhlbi9rY29uZmlnLmg+CisK KyNpZmRlZiBDT05GSUdfQUxURVJOQVRJVkUKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworI2lu Y2x1ZGUgPHhlbi9pbml0Lmg+CisjaW5jbHVkZSA8eGVuL3R5cGVzLmg+CisjaW5jbHVkZSA8eGVu L3N0cmluZ2lmeS5oPgorCitzdHJ1Y3QgYWx0X2luc3RyIHsKKwlzMzIgb3JpZ19vZmZzZXQ7CS8q IG9mZnNldCB0byBvcmlnaW5hbCBpbnN0cnVjdGlvbiAqLworCXMzMiBhbHRfb2Zmc2V0OwkJLyog b2Zmc2V0IHRvIHJlcGxhY2VtZW50IGluc3RydWN0aW9uICovCisJdTE2IGNwdWZlYXR1cmU7CQkv KiBjcHVmZWF0dXJlIGJpdCBzZXQgZm9yIHJlcGxhY2VtZW50ICovCisJdTggIG9yaWdfbGVuOwkJ Lyogc2l6ZSBvZiBvcmlnaW5hbCBpbnN0cnVjdGlvbihzKSAqLworCXU4ICBhbHRfbGVuOwkJLyog c2l6ZSBvZiBuZXcgaW5zdHJ1Y3Rpb24ocyksIDw9IG9yaWdfbGVuICovCit9OworCit2b2lkIF9f aW5pdCBhcHBseV9hbHRlcm5hdGl2ZXNfYWxsKHZvaWQpOworaW50IGFwcGx5X2FsdGVybmF0aXZl cyh2b2lkICpzdGFydCwgc2l6ZV90IGxlbmd0aCk7CisKKyNkZWZpbmUgQUxUSU5TVFJfRU5UUlko ZmVhdHVyZSkJCQkJCQkgICAgICBcCisJIiAud29yZCA2NjFiIC0gLlxuIgkJCQkvKiBsYWJlbCAg ICAgICAgICAgKi8gXAorCSIgLndvcmQgNjYzZiAtIC5cbiIJCQkJLyogbmV3IGluc3RydWN0aW9u ICovIFwKKwkiIC5od29yZCAiIF9fc3RyaW5naWZ5KGZlYXR1cmUpICJcbiIJCS8qIGZlYXR1cmUg Yml0ICAgICAqLyBcCisJIiAuYnl0ZSA2NjJiLTY2MWJcbiIJCQkJLyogc291cmNlIGxlbiAgICAg ICovIFwKKwkiIC5ieXRlIDY2NGYtNjYzZlxuIgkJCQkvKiByZXBsYWNlbWVudCBsZW4gKi8KKwor LyoKKyAqIGFsdGVybmF0aXZlIGFzc2VtYmx5IHByaW1pdGl2ZToKKyAqCisgKiBJZiBhbnkgb2Yg dGhlc2UgLm9yZyBkaXJlY3RpdmUgZmFpbCwgaXQgbWVhbnMgdGhhdCBpbnNuMSBhbmQgaW5zbjIK KyAqIGRvbid0IGhhdmUgdGhlIHNhbWUgbGVuZ3RoLiBUaGlzIHVzZWQgdG8gYmUgd3JpdHRlbiBh cworICoKKyAqIC5pZiAoKDY2NGItNjYzYikgIT0gKDY2MmItNjYxYikpCisgKiAJLmVycm9yICJB bHRlcm5hdGl2ZXMgaW5zdHJ1Y3Rpb24gbGVuZ3RoIG1pc21hdGNoIgorICogLmVuZGlmCisgKgor ICogYnV0IG1vc3QgYXNzZW1ibGVycyBkaWUgaWYgaW5zbjEgb3IgaW5zbjIgaGF2ZSBhIC5pbnN0 LiBUaGlzIHNob3VsZAorICogYmUgZml4ZWQgaW4gYSBiaW51dGlscyByZWxlYXNlIHBvc3Rlcmlv ciB0byAyLjI1LjUxLjAuMiAoYW55dGhpbmcKKyAqIGNvbnRhaW5pbmcgY29tbWl0IDRlNGQwOGNm NzM5OWI2MDYgb3IgYzFiYWFkZGY4ODYxKS4KKyAqLworI2RlZmluZSBfX0FMVEVSTkFUSVZFX0NG RyhvbGRpbnN0ciwgbmV3aW5zdHIsIGZlYXR1cmUsIGNmZ19lbmFibGVkKQlcCisJIi5pZiAiX19z dHJpbmdpZnkoY2ZnX2VuYWJsZWQpIiA9PSAxXG4iCQkJCVwKKwkiNjYxOlxuXHQiCQkJCQkJCVwK KwlvbGRpbnN0ciAiXG4iCQkJCQkJCVwKKwkiNjYyOlxuIgkJCQkJCQlcCisJIi5wdXNoc2VjdGlv biAuYWx0aW5zdHJ1Y3Rpb25zLFwiYVwiXG4iCQkJCVwKKwlBTFRJTlNUUl9FTlRSWShmZWF0dXJl KQkJCQkJCVwKKwkiLnBvcHNlY3Rpb25cbiIJCQkJCQkJXAorCSIucHVzaHNlY3Rpb24gLmFsdGlu c3RyX3JlcGxhY2VtZW50LCBcImFcIlxuIgkJCVwKKwkiNjYzOlxuXHQiCQkJCQkJCVwKKwluZXdp bnN0ciAiXG4iCQkJCQkJCVwKKwkiNjY0OlxuXHQiCQkJCQkJCVwKKwkiLnBvcHNlY3Rpb25cblx0 IgkJCQkJCVwKKwkiLm9yZwkuIC0gKDY2NGItNjYzYikgKyAoNjYyYi02NjFiKVxuXHQiCQkJXAor CSIub3JnCS4gLSAoNjYyYi02NjFiKSArICg2NjRiLTY2M2IpXG4iCQkJXAorCSIuZW5kaWZcbiIK KworI2RlZmluZSBfQUxURVJOQVRJVkVfQ0ZHKG9sZGluc3RyLCBuZXdpbnN0ciwgZmVhdHVyZSwg Y2ZnLCAuLi4pCVwKKwlfX0FMVEVSTkFUSVZFX0NGRyhvbGRpbnN0ciwgbmV3aW5zdHIsIGZlYXR1 cmUsIElTX0VOQUJMRUQoY2ZnKSkKKworI2Vsc2UKKworI2luY2x1ZGUgPGFzbS9hc21fZGVmbnMu aD4KKworLm1hY3JvIGFsdGluc3RydWN0aW9uX2VudHJ5IG9yaWdfb2Zmc2V0IGFsdF9vZmZzZXQg ZmVhdHVyZSBvcmlnX2xlbiBhbHRfbGVuCisJLndvcmQgXG9yaWdfb2Zmc2V0IC0gLgorCS53b3Jk IFxhbHRfb2Zmc2V0IC0gLgorCS5od29yZCBcZmVhdHVyZQorCS5ieXRlIFxvcmlnX2xlbgorCS5i eXRlIFxhbHRfbGVuCisuZW5kbQorCisubWFjcm8gYWx0ZXJuYXRpdmVfaW5zbiBpbnNuMSwgaW5z bjIsIGNhcCwgZW5hYmxlID0gMQorCS5pZiBcZW5hYmxlCis2NjE6CVxpbnNuMQorNjYyOgkucHVz aHNlY3Rpb24gLmFsdGluc3RydWN0aW9ucywgImEiCisJYWx0aW5zdHJ1Y3Rpb25fZW50cnkgNjYx YiwgNjYzZiwgXGNhcCwgNjYyYi02NjFiLCA2NjRmLTY2M2YKKwkucG9wc2VjdGlvbgorCS5wdXNo c2VjdGlvbiAuYWx0aW5zdHJfcmVwbGFjZW1lbnQsICJheCIKKzY2MzoJXGluc24yCis2NjQ6CS5w b3BzZWN0aW9uCisJLm9yZwkuIC0gKDY2NGItNjYzYikgKyAoNjYyYi02NjFiKQorCS5vcmcJLiAt ICg2NjJiLTY2MWIpICsgKDY2NGItNjYzYikKKwkuZW5kaWYKKy5lbmRtCisKKy8qCisgKiBCZWdp biBhbiBhbHRlcm5hdGl2ZSBjb2RlIHNlcXVlbmNlLgorICoKKyAqIFRoZSBjb2RlIHRoYXQgZm9s bG93cyB0aGlzIG1hY3JvIHdpbGwgYmUgYXNzZW1ibGVkIGFuZCBsaW5rZWQgYXMKKyAqIG5vcm1h bC4gVGhlcmUgYXJlIG5vIHJlc3RyaWN0aW9ucyBvbiB0aGlzIGNvZGUuCisgKi8KKy5tYWNybyBh bHRlcm5hdGl2ZV9pZl9ub3QgY2FwLCBlbmFibGUgPSAxCisJLmlmIFxlbmFibGUKKwkucHVzaHNl Y3Rpb24gLmFsdGluc3RydWN0aW9ucywgImEiCisJYWx0aW5zdHJ1Y3Rpb25fZW50cnkgNjYxZiwg NjYzZiwgXGNhcCwgNjYyZi02NjFmLCA2NjRmLTY2M2YKKwkucG9wc2VjdGlvbgorNjYxOgorCS5l bmRpZgorLmVuZG0KKworLyoKKyAqIFByb3ZpZGUgdGhlIGFsdGVybmF0aXZlIGNvZGUgc2VxdWVu Y2UuCisgKgorICogVGhlIGNvZGUgdGhhdCBmb2xsb3dzIHRoaXMgbWFjcm8gaXMgYXNzZW1ibGVk IGludG8gYSBzcGVjaWFsCisgKiBzZWN0aW9uIHRvIGJlIHVzZWQgZm9yIGR5bmFtaWMgcGF0Y2hp bmcuIENvZGUgdGhhdCBmb2xsb3dzIHRoaXMKKyAqIG1hY3JvIG11c3Q6CisgKgorICogMS4gQmUg ZXhhY3RseSB0aGUgc2FtZSBsZW5ndGggKGluIGJ5dGVzKSBhcyB0aGUgZGVmYXVsdCBjb2RlCisg KiAgICBzZXF1ZW5jZS4KKyAqCisgKiAyLiBOb3QgY29udGFpbiBhIGJyYW5jaCB0YXJnZXQgdGhh dCBpcyB1c2VkIG91dHNpZGUgb2YgdGhlCisgKiAgICBhbHRlcm5hdGl2ZSBzZXF1ZW5jZSBpdCBp cyBkZWZpbmVkIGluIChicmFuY2hlcyBpbnRvIGFuCisgKiAgICBhbHRlcm5hdGl2ZSBzZXF1ZW5j ZSBhcmUgbm90IGZpeGVkIHVwKS4KKyAqLworLm1hY3JvIGFsdGVybmF0aXZlX2Vsc2UKKzY2MjoJ LnB1c2hzZWN0aW9uIC5hbHRpbnN0cl9yZXBsYWNlbWVudCwgImF4IgorNjYzOgorLmVuZG0KKwor LyoKKyAqIENvbXBsZXRlIGFuIGFsdGVybmF0aXZlIGNvZGUgc2VxdWVuY2UuCisgKi8KKy5tYWNy byBhbHRlcm5hdGl2ZV9lbmRpZgorNjY0OgkucG9wc2VjdGlvbgorCS5vcmcJLiAtICg2NjRiLTY2 M2IpICsgKDY2MmItNjYxYikKKwkub3JnCS4gLSAoNjYyYi02NjFiKSArICg2NjRiLTY2M2IpCisu ZW5kbQorCisjZGVmaW5lIF9BTFRFUk5BVElWRV9DRkcoaW5zbjEsIGluc24yLCBjYXAsIGNmZywg Li4uKQlcCisJYWx0ZXJuYXRpdmVfaW5zbiBpbnNuMSwgaW5zbjIsIGNhcCwgSVNfRU5BQkxFRChj ZmcpCisKKyNlbmRpZiAgLyogIF9fQVNTRU1CTFlfXyAgKi8KKworLyoKKyAqIFVzYWdlOiBhc20o QUxURVJOQVRJVkUob2xkaW5zdHIsIG5ld2luc3RyLCBmZWF0dXJlKSk7CisgKgorICogVXNhZ2U6 IGFzbShBTFRFUk5BVElWRShvbGRpbnN0ciwgbmV3aW5zdHIsIGZlYXR1cmUsIENPTkZJR19GT08p KTsKKyAqIE4uQi4gSWYgQ09ORklHX0ZPTyBpcyBzcGVjaWZpZWQsIGJ1dCBub3Qgc2VsZWN0ZWQs IHRoZSB3aG9sZSBibG9jaworICogICAgICB3aWxsIGJlIG9taXR0ZWQsIGluY2x1ZGluZyBvbGRp bnN0ci4KKyAqLworI2RlZmluZSBBTFRFUk5BVElWRShvbGRpbnN0ciwgbmV3aW5zdHIsIC4uLikg ICBcCisJX0FMVEVSTkFUSVZFX0NGRyhvbGRpbnN0ciwgbmV3aW5zdHIsIF9fVkFfQVJHU19fLCAx KQorCisjZWxzZSAvKiAhQ09ORklHX0FMVEVSTkFUSVZFICovCisKK3N0YXRpYyBpbmxpbmUgdm9p ZCBhcHBseV9hbHRlcm5hdGl2ZXNfYWxsKHZvaWQpCit7Cit9CisKK2ludCBhcHBseV9hbHRlcm5h dGl2ZXModm9pZCAqc3RhcnQsIHNpemVfdCBsZW5naHQpCit7CisgICAgcmV0dXJuIDA7Cit9CisK KyNlbmRpZgorCisjZW5kaWYgLyogX19BU01fQUxURVJOQVRJVkVfSCAqLwpkaWZmIC0tZ2l0IGEv eGVuL2luY2x1ZGUvYXNtLWFybS9hcm02NC9pbnNuLmggYi94ZW4vaW5jbHVkZS9hc20tYXJtL2Fy bTY0L2luc24uaAppbmRleCBjZmNkYmU5Li42Y2UzN2JlIDEwMDY0NAotLS0gYS94ZW4vaW5jbHVk ZS9hc20tYXJtL2FybTY0L2luc24uaAorKysgYi94ZW4vaW5jbHVkZS9hc20tYXJtL2FybTY0L2lu c24uaApAQCAtNjEsNiArNjEsMjIgQEAgdTMyIGFhcmNoNjRfaW5zbl9lbmNvZGVfaW1tZWRpYXRl KGVudW0gYWFyY2g2NF9pbnNuX2ltbV90eXBlIHR5cGUsCiBzMzIgYWFyY2g2NF9nZXRfYnJhbmNo X29mZnNldCh1MzIgaW5zbik7CiB1MzIgYWFyY2g2NF9zZXRfYnJhbmNoX29mZnNldCh1MzIgaW5z biwgczMyIG9mZnNldCk7CiAKKy8qIFdyYXBwZXIgZm9yIGNvbW1vbiBjb2RlICovCitzdGF0aWMg aW5saW5lIGJvb2wgaW5zbl9pc19icmFuY2hfaW1tKHUzMiBpbnNuKQoreworICAgIHJldHVybiBh YXJjaDY0X2luc25faXNfYnJhbmNoX2ltbShpbnNuKTsKK30KKworc3RhdGljIGlubGluZSBzMzIg aW5zbl9nZXRfYnJhbmNoX29mZnNldCh1MzIgaW5zbikKK3sKKyAgICByZXR1cm4gYWFyY2g2NF9n ZXRfYnJhbmNoX29mZnNldChpbnNuKTsKK30KKworc3RhdGljIGlubGluZSB1MzIgaW5zbl9zZXRf YnJhbmNoX29mZnNldCh1MzIgaW5zbiwgczMyIG9mZnNldCkKK3sKKyAgICByZXR1cm4gYWFyY2g2 NF9zZXRfYnJhbmNoX29mZnNldChpbnNuLCBvZmZzZXQpOworfQorCiAjZW5kaWYgLyogIV9fQVJD SF9BUk1fQVJNNjRfSU5TTiAqLwogLyoKICAqIExvY2FsIHZhcmlhYmxlczoKLS0gCjEuOS4xCgoK X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVs IG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwOi8vbGlzdHMueGVuLm9y Zy94ZW4tZGV2ZWwK