From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: [PATCH v8 16/25] xsplice: Add support for exception tables. Date: Wed, 13 Apr 2016 17:09:47 -0400 Message-ID: <1460581796-30071-17-git-send-email-konrad.wilk@oracle.com> References: <1460581796-30071-1-git-send-email-konrad.wilk@oracle.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta6.messagelabs.com ([85.158.143.247]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1aqS3d-0006nd-Dn for xen-devel@lists.xenproject.org; Wed, 13 Apr 2016 21:10:41 +0000 In-Reply-To: <1460581796-30071-1-git-send-email-konrad.wilk@oracle.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: konrad@kernel.org, xen-devel@lists.xenproject.org, sasha.levin@oracle.com, andrew.cooper3@citrix.com, ross.lagerwall@citrix.com, mpohlack@amazon.de Cc: Keir Fraser , Jan Beulich , Konrad Rzeszutek Wilk List-Id: xen-devel@lists.xenproject.org RnJvbTogUm9zcyBMYWdlcndhbGwgPHJvc3MubGFnZXJ3YWxsQGNpdHJpeC5jb20+CgpBZGQgc3Vw cG9ydCBmb3IgZXhjZXB0aW9uIHRhYmxlcyBjb250YWluZWQgd2l0aGluIHhTcGxpY2UgcGF5bG9h ZHMuIElmIGFuCmV4Y2VwdGlvbiBvY2N1cnMgc2VhcmNoIGVpdGhlciB0aGUgbWFpbiBleGNlcHRp b24gdGFibGUgb3IgYSBwYXJ0aWN1bGFyCmFjdGl2ZSBwYXlsb2FkJ3MgZXhjZXB0aW9uIHRhYmxl IGRlcGVuZGluZyBvbiB0aGUgaW5zdHJ1Y3Rpb24gcG9pbnRlci4KCkFsc28gd2UgYWRkIGFuIHRl c3QtY2FzZSB0byBtYWtlIHN1cmUgd2UgaGF2ZSBhbiBleGNlcHRpb24gdGhhdAppcyBoYW5kbGVk LgoKVG8gbm90IGdyb3cgdGhlIGNvZGUtYmFzZSBpZiB4U3BsaWNlIGlzIG5vdCBjb21waWxlZCBp biB3ZSBhZGQKY2VydGFpbiAjZGVmaW5lIHRvIGhlbHAgaW4gZGV0ZXJtaW5pbmcgaWYgY29kZSBu ZWVkcyB0byBiZSBfX2luaXQKb3Igbm90LgoKU2lnbmVkLW9mZi1ieTogUm9zcyBMYWdlcndhbGwg PHJvc3MubGFnZXJ3YWxsQGNpdHJpeC5jb20+ClNpZ25lZC1vZmYtYnk6IEtvbnJhZCBSemVzenV0 ZWsgV2lsayA8a29ucmFkLndpbGtAb3JhY2xlLmNvbT4KUmV2aWV3ZWQtYnk6IEFuZHJldyBDb29w ZXIgPGFuZHJldy5jb29wZXIzQGNpdHJpeC5jb20+Ci0tLQpDYzogS2VpciBGcmFzZXIgPGtlaXJA eGVuLm9yZz4KQ2M6IEphbiBCZXVsaWNoIDxqYmV1bGljaEBzdXNlLmNvbT4KQ2M6IEFuZHJldyBD b29wZXIgPGFuZHJldy5jb29wZXIzQGNpdHJpeC5jb20+Cgp2MzoKIC0gcy9tb2R1bGUvcGF5bG9h ZC8KIC0gc2FuaXR5IGNoZWNrcy4KIC0gTW92ZSBjb2RlIGFyb3VuZC4KIC0gcy9tb2R1bGUvcGF5 bG9hZC8KdjQ6IFVzZSAnc3RydWN0IHZpcnR1YWxfcmVnaW9uJwp2NToKICAtIEV4cGFuZCB0ZXN0 LWNhc2UuCiAgLSBEZWFsIHdpdGggc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSBiZWluZyBj b25zdC4KdjY6CiAtIE1ha2UgdGhlIGNvZGUgaGF2ZSBfX2luaXQgaWYgbm90IGNvbXBpbGVkIHdp dGggeFNwbGljZQogLSBSZW1vdmUgbm90IG5lZWRlZCBkZWNsYXJhdGlvbnMuCnY3OgogLSBNYWtl IHRoZSBub25fY2Fub25pY2FsX2FkZHIgYmUgMHhkZWFkMDAwMDAwMDAwMDAwVUxMCiAtIFJlbW92 ZSBjYXN0cwogLSBBZGQgUmV2aWV3ZWQtYnkgZnJvbSBBbmRyZXcKIC0gQ2hhbmdlIGlmZGVmIHRv IGJlICFBUk0Kdjg6CiAtIENoYW5nZSBkcHJpbnRrIFhFTkxPR19ERUJVRyB0byBYRU5MT0dfRVJS IG9uIGRwcmludGsuCi0tLQotLS0KIHhlbi9hcmNoL3g4Ni9leHRhYmxlLmMgICAgICAgICAgICAg ICAgICAgfCAzMSArKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tCiB4ZW4vYXJjaC94ODYv dGVzdC94ZW5faGVsbG9fd29ybGRfZnVuYy5jIHwgMTEgKysrKysrKysrKysKIHhlbi9jb21tb24v eHNwbGljZS5jICAgICAgICAgICAgICAgICAgICAgfCAyNSArKysrKysrKysrKysrKysrKysrKysr KysrCiB4ZW4vaW5jbHVkZS9hc20teDg2L3VhY2Nlc3MuaCAgICAgICAgICAgIHwgIDIgKysKIHhl bi9pbmNsdWRlL3hlbi94c3BsaWNlLmggICAgICAgICAgICAgICAgfCAxNyArKysrKysrKysrKysr KysrKwogNSBmaWxlcyBjaGFuZ2VkLCA3MyBpbnNlcnRpb25zKCspLCAxMyBkZWxldGlvbnMoLSkK CmRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYvZXh0YWJsZS5jIGIveGVuL2FyY2gveDg2L2V4dGFi bGUuYwppbmRleCAyYTA2Y2NhLi5lMGJhMzVmIDEwMDY0NAotLS0gYS94ZW4vYXJjaC94ODYvZXh0 YWJsZS5jCisrKyBiL3hlbi9hcmNoL3g4Ni9leHRhYmxlLmMKQEAgLTcsNiArNyw3IEBACiAjaW5j bHVkZSA8eGVuL3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRl IDx4ZW4vdmlydHVhbF9yZWdpb24uaD4KKyNpbmNsdWRlIDx4ZW4veHNwbGljZS5oPgogCiAjZGVm aW5lIEVYX0ZJRUxEKHB0ciwgZmllbGQpICgodW5zaWduZWQgbG9uZykmKHB0ciktPmZpZWxkICsg KHB0ciktPmZpZWxkKQogCkBAIC0yMCw3ICsyMSw3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQg bG9uZyBleF9jb250KGNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKngpCiAJcmV0 dXJuIEVYX0ZJRUxEKHgsIGNvbnQpOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCBjbXBfZXgoY29u c3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKK3N0YXRpYyBpbnQgX19JTklUIGNtcF9leChjb25z dCB2b2lkICphLCBjb25zdCB2b2lkICpiKQogewogCWNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFi bGVfZW50cnkgKmwgPSBhLCAqciA9IGI7CiAJdW5zaWduZWQgbG9uZyBsaXAgPSBleF9hZGRyKGwp OwpAQCAtMzUsNyArMzYsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBjbXBfZXgoY29uc3Qgdm9pZCAq YSwgY29uc3Qgdm9pZCAqYikKIH0KIAogI2lmbmRlZiBzd2FwX2V4Ci1zdGF0aWMgdm9pZCBfX2lu aXQgc3dhcF9leCh2b2lkICphLCB2b2lkICpiLCBpbnQgc2l6ZSkKK3N0YXRpYyB2b2lkIF9fSU5J VCBzd2FwX2V4KHZvaWQgKmEsIHZvaWQgKmIsIGludCBzaXplKQogewogCXN0cnVjdCBleGNlcHRp b25fdGFibGVfZW50cnkgKmwgPSBhLCAqciA9IGIsIHRtcDsKIAlsb25nIGRlbHRhID0gYiAtIGE7 CkBAIC00OCwxOSArNDksMjMgQEAgc3RhdGljIHZvaWQgX19pbml0IHN3YXBfZXgodm9pZCAqYSwg dm9pZCAqYiwgaW50IHNpemUpCiB9CiAjZW5kaWYKIAotdm9pZCBfX2luaXQgc29ydF9leGNlcHRp b25fdGFibGVzKHZvaWQpCit2b2lkIF9fSU5JVCBzb3J0X2V4Y2VwdGlvbl90YWJsZShzdHJ1Y3Qg ZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICpzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg c3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqc3RvcCkKIHsKLSAgICBzb3J0KF9fc3RhcnRf X19leF90YWJsZSwgX19zdG9wX19fZXhfdGFibGUgLSBfX3N0YXJ0X19fZXhfdGFibGUsCi0gICAg ICAgICBzaXplb2Yoc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSksIGNtcF9leCwgc3dhcF9l eCk7Ci0gICAgc29ydChfX3N0YXJ0X19fcHJlX2V4X3RhYmxlLAotICAgICAgICAgX19zdG9wX19f cHJlX2V4X3RhYmxlIC0gX19zdGFydF9fX3ByZV9leF90YWJsZSwKKyAgICBzb3J0KHN0YXJ0LCBz dG9wIC0gc3RhcnQsCiAgICAgICAgICBzaXplb2Yoc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRy eSksIGNtcF9leCwgc3dhcF9leCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZwot c2VhcmNoX29uZV90YWJsZShjb25zdCBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICpmaXJz dCwKLSAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAq bGFzdCwKLSAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyB2YWx1ZSkKK3ZvaWQgX19pbml0 IHNvcnRfZXhjZXB0aW9uX3RhYmxlcyh2b2lkKQoreworICAgIHNvcnRfZXhjZXB0aW9uX3RhYmxl KF9fc3RhcnRfX19leF90YWJsZSwgX19zdG9wX19fZXhfdGFibGUpOworICAgIHNvcnRfZXhjZXB0 aW9uX3RhYmxlKF9fc3RhcnRfX19wcmVfZXhfdGFibGUsIF9fc3RvcF9fX3ByZV9leF90YWJsZSk7 Cit9CisKK3Vuc2lnbmVkIGxvbmcKK3NlYXJjaF9vbmVfZXh0YWJsZShjb25zdCBzdHJ1Y3QgZXhj ZXB0aW9uX3RhYmxlX2VudHJ5ICpmaXJzdCwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1 Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICpsYXN0LAorICAgICAgICAgICAgICAgICAgIHVuc2ln bmVkIGxvbmcgdmFsdWUpCiB7CiAgICAgY29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRy eSAqbWlkOwogICAgIGxvbmcgZGlmZjsKQEAgLTg1LDcgKzkwLDcgQEAgc2VhcmNoX2V4Y2VwdGlv bl90YWJsZSh1bnNpZ25lZCBsb25nIGFkZHIpCiAgICAgY29uc3Qgc3RydWN0IHZpcnR1YWxfcmVn aW9uICpyZWdpb24gPSBmaW5kX3RleHRfcmVnaW9uKGFkZHIpOwogCiAgICAgaWYgKCByZWdpb24g JiYgcmVnaW9uLT5leCApCi0gICAgICAgIHJldHVybiBzZWFyY2hfb25lX3RhYmxlKHJlZ2lvbi0+ ZXgsIHJlZ2lvbi0+ZXhfZW5kIC0gMSwgYWRkcik7CisgICAgICAgIHJldHVybiBzZWFyY2hfb25l X2V4dGFibGUocmVnaW9uLT5leCwgcmVnaW9uLT5leF9lbmQgLSAxLCBhZGRyKTsKIAogICAgIHJl dHVybiAwOwogfQpAQCAtOTQsNyArOTksNyBAQCB1bnNpZ25lZCBsb25nCiBzZWFyY2hfcHJlX2V4 Y2VwdGlvbl90YWJsZShzdHJ1Y3QgY3B1X3VzZXJfcmVncyAqcmVncykKIHsKICAgICB1bnNpZ25l ZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZylyZWdzLT5laXA7Ci0gICAgdW5zaWduZWQgbG9u ZyBmaXh1cCA9IHNlYXJjaF9vbmVfdGFibGUoCisgICAgdW5zaWduZWQgbG9uZyBmaXh1cCA9IHNl YXJjaF9vbmVfZXh0YWJsZSgKICAgICAgICAgX19zdGFydF9fX3ByZV9leF90YWJsZSwgX19zdG9w X19fcHJlX2V4X3RhYmxlLTEsIGFkZHIpOwogICAgIGlmICggZml4dXAgKQogICAgIHsKZGlmZiAt LWdpdCBhL3hlbi9hcmNoL3g4Ni90ZXN0L3hlbl9oZWxsb193b3JsZF9mdW5jLmMgYi94ZW4vYXJj aC94ODYvdGVzdC94ZW5faGVsbG9fd29ybGRfZnVuYy5jCmluZGV4IDFhZDAwMmEuLjQzMjk1NGYg MTAwNjQ0Ci0tLSBhL3hlbi9hcmNoL3g4Ni90ZXN0L3hlbl9oZWxsb193b3JsZF9mdW5jLmMKKysr IGIveGVuL2FyY2gveDg2L3Rlc3QveGVuX2hlbGxvX3dvcmxkX2Z1bmMuYwpAQCAtNSw5ICs1LDIw IEBACiAKICNpbmNsdWRlIDx4ZW4vdHlwZXMuaD4KIAorc3RhdGljIHVuc2lnbmVkIGxvbmcgKm5v bl9jYW5vbmljYWxfYWRkciA9ICh1bnNpZ25lZCBsb25nICopKDB4ZGVhZDAwMDAwMDAwMDAwMFVM TCk7CisKIC8qIE91ciByZXBsYWNlbWVudCBmdW5jdGlvbiBmb3IgeGVuX2V4dHJhX3ZlcnNpb24u ICovCiBjb25zdCBjaGFyICp4ZW5faGVsbG9fd29ybGQodm9pZCkKIHsKKyAgICB1bnNpZ25lZCBs b25nIHRtcDsKKyAgICBpbnQgcmM7CisgICAgLyoKKyAgICAgKiBBbnkgQlVHLCBvciBXQVJOX09O IHdpbGwgY29udGFpbiBzeW1ib2wgYW5kIHBheWxvYWQgbmFtZS4gRnVydGhlcm1vcmUKKyAgICAg KiBleGNlcHRpb25zIHdpbGwgYmUgY2F1Z2h0IGFuZCBwcm9jZXNzZWQgcHJvcGVybHkuCisgICAg ICovCisgICAgcmMgPSBfX2dldF91c2VyKHRtcCwgbm9uX2Nhbm9uaWNhbF9hZGRyKTsKKyAgICBC VUdfT04ocmMgIT0gLUVGQVVMVCk7CisKICAgICByZXR1cm4gIkhlbGxvIFdvcmxkIjsKIH0KIApk aWZmIC0tZ2l0IGEveGVuL2NvbW1vbi94c3BsaWNlLmMgYi94ZW4vY29tbW9uL3hzcGxpY2UuYwpp bmRleCA5N2EwNTU1Li4wODkzMjFmIDEwMDY0NAotLS0gYS94ZW4vY29tbW9uL3hzcGxpY2UuYwor KysgYi94ZW4vY29tbW9uL3hzcGxpY2UuYwpAQCAtNTMyLDYgKzUzMiwzMSBAQCBzdGF0aWMgaW50 IHByZXBhcmVfcGF5bG9hZChzdHJ1Y3QgcGF5bG9hZCAqcGF5bG9hZCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKCpyZWdpb24tPmZyYW1lW2ldLmJ1Z3MpOwog ICAgIH0KIAorI2lmbmRlZiBDT05GSUdfQVJNCisgICAgc2VjID0geHNwbGljZV9lbGZfc2VjX2J5 X25hbWUoZWxmLCAiLmV4X3RhYmxlIik7CisgICAgaWYgKCBzZWMgKQorICAgIHsKKyAgICAgICAg c3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqcywgKmU7CisKKyAgICAgICAgaWYgKCAhc2Vj LT5zZWMtPnNoX3NpemUgfHwKKyAgICAgICAgICAgICAoc2VjLT5zZWMtPnNoX3NpemUgJSBzaXpl b2YoKnJlZ2lvbi0+ZXgpKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIGRwcmludGsoWEVOTE9H X0VSUiwgWFNQTElDRSAiJXM6IFdyb25nIHNpemUgb2YgLmV4X3RhYmxlIChleHA6JWx1IHZzICVs dSkhXG4iLAorICAgICAgICAgICAgICAgICAgICBlbGYtPm5hbWUsIHNpemVvZigqcmVnaW9uLT5l eCksCisgICAgICAgICAgICAgICAgICAgIHNlYy0+c2VjLT5zaF9zaXplKTsKKyAgICAgICAgICAg IHJldHVybiAtRUlOVkFMOworICAgICAgICB9CisKKyAgICAgICAgcyA9IHNlYy0+bG9hZF9hZGRy OworICAgICAgICBlID0gc2VjLT5sb2FkX2FkZHIgKyBzZWMtPnNlYy0+c2hfc2l6ZTsKKworICAg ICAgICBzb3J0X2V4Y2VwdGlvbl90YWJsZShzICxlKTsKKworICAgICAgICByZWdpb24tPmV4ID0g czsKKyAgICAgICAgcmVnaW9uLT5leF9lbmQgPSBlOworICAgIH0KKyNlbmRpZgorCiAgICAgcmV0 dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL3hlbi9pbmNsdWRlL2FzbS14ODYvdWFjY2Vzcy5oIGIv eGVuL2luY2x1ZGUvYXNtLXg4Ni91YWNjZXNzLmgKaW5kZXggOTQ3NDcwZC4uMmM4MzlhOSAxMDA2 NDQKLS0tIGEveGVuL2luY2x1ZGUvYXNtLXg4Ni91YWNjZXNzLmgKKysrIGIveGVuL2luY2x1ZGUv YXNtLXg4Ni91YWNjZXNzLmgKQEAgLTI3Nyw1ICsyNzcsNyBAQCBleHRlcm4gc3RydWN0IGV4Y2Vw dGlvbl90YWJsZV9lbnRyeSBfX3N0b3BfX19wcmVfZXhfdGFibGVbXTsKIAogZXh0ZXJuIHVuc2ln bmVkIGxvbmcgc2VhcmNoX2V4Y2VwdGlvbl90YWJsZSh1bnNpZ25lZCBsb25nKTsKIGV4dGVybiB2 b2lkIHNvcnRfZXhjZXB0aW9uX3RhYmxlcyh2b2lkKTsKK2V4dGVybiB2b2lkIHNvcnRfZXhjZXB0 aW9uX3RhYmxlKHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKnN0YXJ0LAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqc3Rv cCk7CiAKICNlbmRpZiAvKiBfX1g4Nl9VQUNDRVNTX0hfXyAqLwpkaWZmIC0tZ2l0IGEveGVuL2lu Y2x1ZGUveGVuL3hzcGxpY2UuaCBiL3hlbi9pbmNsdWRlL3hlbi94c3BsaWNlLmgKaW5kZXggMTBl OGEzMC4uM2FmNTY0MiAxMDA2NDQKLS0tIGEveGVuL2luY2x1ZGUveGVuL3hzcGxpY2UuaAorKysg Yi94ZW4vaW5jbHVkZS94ZW4veHNwbGljZS5oCkBAIC00Myw2ICs0MywxNSBAQCBzdHJ1Y3QgeHNw bGljZV9wYXRjaF9mdW5jX2ludGVybmFsIHsKICAgICB9IHU7CiB9OwogCisvKgorICogV2UgdXNl IGFsdGVybmF0aXZlIGFuZCBleGNlcHRpb24gdGFibGUgY29kZSAtIHdoaWNoIGJ5IGRlZmF1bHQg YXJlIF9faW5pdAorICogb25seSwgaG93ZXZlciB3ZSBuZWVkIHRoZW0gZHVyaW5nIHJ1bnRpbWUu IFRoZXNlIG1hY3JvcyBhbGxvd3MgdXMgdG8gYnVpbGQKKyAqIHRoZSBpbWFnZSB3aXRoIHRoZXNl IGZ1bmN0aW9ucyBidWlsdC1pbi4gKFNlZSB0aGUgI2Vsc2UgYmVsb3cpLgorICovCisjZGVmaW5l IF9fSU5JVENPTlNUCisjZGVmaW5lIF9fSU5JVERBVEEKKyNkZWZpbmUgX19JTklUCisKIC8qIENv bnZlbmllbmNlIGRlZmluZSBmb3IgcHJpbnRrLiAqLwogI2RlZmluZSBYU1BMSUNFICJ4c3BsaWNl OiAiCiAKQEAgLTEwMSw2ICsxMTAsMTQgQEAgdm9pZCBhcmNoX3hzcGxpY2VfbWFzayh2b2lkKTsK IHZvaWQgYXJjaF94c3BsaWNlX3VubWFzayh2b2lkKTsKICNlbHNlCiAKKy8qCisgKiBJZiBub3Qg Y29tcGlsaW5nIHdpdGggeFNwbGljZSBjZXJ0YWluIGZ1bmN0aW9uYWxpdHkgc2hvdWxkIHN0YXkg YXMKKyAqIF9faW5pdC4KKyAqLworI2RlZmluZSBfX0lOSVRDT05TVCAgICBfX2luaXRjb25zdAor I2RlZmluZSBfX0lOSVREQVRBICAgICBfX2luaXRkYXRhCisjZGVmaW5lIF9fSU5JVCAgICAgICAg IF9faW5pdAorCiAjaW5jbHVkZSA8eGVuL2Vycm5vLmg+IC8qIEZvciAtRU5PU1lTICovCiBzdGF0 aWMgaW5saW5lIGludCB4c3BsaWNlX29wKHN0cnVjdCB4ZW5fc3lzY3RsX3hzcGxpY2Vfb3AgKm9w KQogewotLSAKMi41LjAKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0 dHA6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=