From mboxrd@z Thu Jan 1 00:00:00 1970 From: Anthony PERARD Subject: [PATCH v5 05/14] libxl: Load guest BIOS from file Date: Wed, 22 Jun 2016 18:15:36 +0100 Message-ID: <20160622171545.5304-6-anthony.perard@citrix.com> References: <20160622171545.5304-1-anthony.perard@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20160622171545.5304-1-anthony.perard@citrix.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: Anthony PERARD , Wei Liu , Ian Jackson List-Id: xen-devel@lists.xenproject.org VGhlIHBhdGggdG8gdGhlIEJJT1MgYmxvYiBjYW4gYmUgb3ZlcnJpZGVuIGJ5IHRoZSB4bCdzCmJp b3NfcGF0aF9vdmVycmlkZSBvcHRpb24sIG9yIHByb3ZpZGVkIGJ5IHUuaHZtLmJpb3NfZmlybXdh cmUgaW4gdGhlCmRvbWFpbl9idWlsZF9pbmZvIHN0cnVjdCBieSBvdGhlciBsaWJ4bCB1c2VyLgoK U2lnbmVkLW9mZi1ieTogQW50aG9ueSBQRVJBUkQgPGFudGhvbnkucGVyYXJkQGNpdHJpeC5jb20+ CgotLS0KQ2hhbmdlcyBpbiBWNToKLSBtYW4gcGFnZSwgdXNlIEI8PiB0byBoaWdobGlnaHQgY29u ZmlnIG9wdGlvbiBpbiBkZXNjcmlwdGlvbi4KLSByZW5hbWUgY29uZmlnIG9wdGlvbiBmcm9tIGBi aW9zX292ZXJyaWRlYCB0byBgYmlvc19wYXRoX292ZXJyaWRlYAotIHN0b3JlIGxpYnhsX3JlYWRf ZmlsZV9jb250ZW50cygpIHJldHVybiB2YWx1ZSBpbnRvIHIgaW5zdGVhZCBvZiBlCiAgKGp1c3Qg cmVuYW1lZCB0aGUgdmFyaWFibGUpCi0gcmVuYW1lIGRvbWFpbl9idWlsZF9pbmZvLnUuaHZtLmJp b3NfZmlybXdhcmUgdG8gc3lzdGVtX2Zpcm13YXJlCgpDaGFuZ2VzIGluIFY0OgotIHVwZGF0aW5n IG1hbiBwYWdlIHRvIGhhdmUgYmlvc19vdmVycmlkZSBkZXNjcmliZWQuCi0gcmV0dXJuIEVSUk9S X0lOVkFMIGluIGxpYnhsX19sb2FkX2h2bV9maXJtd2FyZV9tb2R1bGUgd2hlbiB0aGUgZmlsZSBp cwogIGVtcHR5LgoKQ2hhbmdlcyBpbiBWMzoKLSBtb3ZlIHNlYWJpb3NfcGF0aCBhbmQgb3ZtZl9w YXRoIHRvIGxpYnhsX3BhdGguYyAod2l0aCByZW5hbWluZykKLSBmaXggc29tZSBjb2Rpbmcgc3R5 bGUKLSB3YXJuIGZvciBlbXB0eSBmaWxlCi0gcmVtb3ZlIHJvbWJpb3Mgc3R1ZmYgKHdpbGwgc3Rp bGwgYmUgYnVpbHQtaW4gaHZtbG9hZGVyKQotIHJlbmFtZSBmaWVsZCBiaW9zX2ZpbGVuYW1lIGlu IGRvbWFpbl9idWlsZF9pbmZvIHRvIGJpb3NfZmlybXdhcmUgdG8KICBmb2xsb3cgbmFtaW5nIG9m IGFjcGkgYW5kIHNtYmlvcy4KLSBsb2cgYW4gZXJyb3IgYWZ0ZXIgbGlieGxfcmVhZF9maWxlX2Nv bnRlbnRzKCkgb25seSB3aGVuIGl0IHJldHVybiBFTk9FTlQKLSByZXR1cm4gYW4gZXJyb3Igb24g ZW1wdHkgZmlsZS4KLSBhZGRlZCAjZGVmaW5lIExJQlhMX0hBVkVfQlVJTERJTkZPX0hWTV9CSU9T X0ZJUk1XQVJFCi0tLQogZG9jcy9tYW4veGwuY2ZnLnBvZC41LmluICAgICB8ICA5ICsrKysrKysK IHRvb2xzL2xpYnhsL2xpYnhsLmggICAgICAgICAgfCAgOCArKysrKysrCiB0b29scy9saWJ4bC9s aWJ4bF9kb20uYyAgICAgIHwgNTcgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysKIHRvb2xzL2xpYnhsL2xpYnhsX2ludGVybmFsLmggfCAgMiArKwogdG9vbHMvbGli eGwvbGlieGxfcGF0aHMuYyAgICB8IDEwICsrKysrKysrCiB0b29scy9saWJ4bC9saWJ4bF90eXBl cy5pZGwgIHwgIDEgKwogdG9vbHMvbGlieGwveGxfY21kaW1wbC5jICAgICB8IDExICsrKysrKy0t LQogNyBmaWxlcyBjaGFuZ2VkLCA5NSBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQoKZGlm ZiAtLWdpdCBhL2RvY3MvbWFuL3hsLmNmZy5wb2QuNS5pbiBiL2RvY3MvbWFuL3hsLmNmZy5wb2Qu NS5pbgppbmRleCAzYmIyN2QwLi5hNjg1YjgzIDEwMDY0NAotLS0gYS9kb2NzL21hbi94bC5jZmcu cG9kLjUuaW4KKysrIGIvZG9jcy9tYW4veGwuY2ZnLnBvZC41LmluCkBAIC0xMjEyLDYgKzEyMTIs MTUgQEAgUmVxdWlyZXMgZGV2aWNlX21vZGVsX3ZlcnNpb249cWVtdS14ZW4uCiAKID1iYWNrCiAK Kz1pdGVtIEI8Ymlvc19wYXRoX292ZXJyaWRlPSJQQVRIIj4KKworT3ZlcnJpZGUgdGhlIHBhdGgg dG8gdGhlIGJsb2IgdG8gYmUgdXNlZCBhcyBCSU9TLiBUaGUgYmxvYiBwcm92aWRlZCBoZXJlIE1V U1QKK2JlIGNvbnNpc3RlbnQgd2l0aCB0aGUgQjxiaW9zPT4gd2hpY2ggeW91IGhhdmUgc3BlY2lm aWVkLiBZb3Ugc2hvdWxkIG5vdAorbm9ybWFsbHkgbmVlZCB0byBzcGVjaWZ5IHRoaXMgb3B0aW9u LgorCitUaGlzIG9wdGlvbnMgZG9lcyBub3QgaGF2ZSBhbnkgZWZmZWN0IGlmIHVzaW5nIEI8Ymlv cz0icm9tYmlvcyI+IG9yCitCPGRldmljZV9tb2RlbF92ZXJzaW9uPSJxZW11LXhlbi10cmFkaXRp b25hbCI+LgorCiA9aXRlbSBCPHBhZT1CT09MRUFOPgogCiBIaWRlIG9yIGV4cG9zZSB0aGUgSUEz MiBQaHlzaWNhbCBBZGRyZXNzIEV4dGVuc2lvbnMuIFRoZXNlIGV4dGVuc2lvbnMKZGlmZiAtLWdp dCBhL3Rvb2xzL2xpYnhsL2xpYnhsLmggYi90b29scy9saWJ4bC9saWJ4bC5oCmluZGV4IDJjMGY4 NjguLjJiMWY2NzggMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYnhsL2xpYnhsLmgKKysrIGIvdG9vbHMv bGlieGwvbGlieGwuaApAQCAtOTI4LDYgKzkyOCwxNCBAQCB2b2lkIGxpYnhsX21hY19jb3B5KGxp YnhsX2N0eCAqY3R4LCBsaWJ4bF9tYWMgKmRzdCwgbGlieGxfbWFjICpzcmMpOwogI2RlZmluZSBM SUJYTF9IQVZFX0NIRUNLUE9JTlRFRF9TVFJFQU0gMQogCiAvKgorICogTElCWExfSEFWRV9CVUlM RElORk9fSFZNX1NZU1RFTV9GSVJNV0FSRQorICoKKyAqIGxpYnhsX2RvbWFpbl9idWlsZF9pbmZv IGhhcyB1Lmh2bS5zeXN0ZW1fZmlybXdhcmUgZmllbGQgd2hpY2ggY2FuIGJlIHVzZQorICogdG8g cHJvdmlkZSBhIGRpZmZlcmVudCBmaXJtd2FyZSBibG9iIChsaWtlIFNlYUJJT1Mgb3IgT1ZNRiku CisgKi8KKyNkZWZpbmUgTElCWExfSEFWRV9CVUlMRElORk9fSFZNX1NZU1RFTV9GSVJNV0FSRQor CisvKgogICogRVJST1JfUkVNVVNfWFhYIGVycm9yIGNvZGUgb25seSBleGlzdHMgZnJvbSBYZW4g NC41LCBYZW4gNC42IGFuZCBpdAogICogaXMgY2hhbmdlZCB0byBFUlJPUl9DSEVDS1BPSU5UX1hY WCBpbiBYZW4gNC43CiAgKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhsL2xpYnhsX2RvbS5jIGIv dG9vbHMvbGlieGwvbGlieGxfZG9tLmMKaW5kZXggZWMyOTA2MC4uYzM0MWEyOSAxMDA2NDQKLS0t IGEvdG9vbHMvbGlieGwvbGlieGxfZG9tLmMKKysrIGIvdG9vbHMvbGlieGwvbGlieGxfZG9tLmMK QEAgLTg2Miw2ICs4NjIsMzggQEAgZXJyOgogICAgIHJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBp bnQgbGlieGxfX2xvYWRfaHZtX2Zpcm13YXJlX21vZHVsZShsaWJ4bF9fZ2MgKmdjLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1l LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIg KndoYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0 IHhjX2h2bV9maXJtd2FyZV9tb2R1bGUgKm0pCit7CisgICAgaW50IGRhdGFsZW4gPSAwOworICAg IHZvaWQgKmRhdGEgPSBOVUxMOworICAgIGludCByOworCisgICAgTE9HKERFQlVHLCAiTG9hZGlu ZyAlczogJXMiLCB3aGF0LCBmaWxlbmFtZSk7CisgICAgciA9IGxpYnhsX3JlYWRfZmlsZV9jb250 ZW50cyhDVFgsIGZpbGVuYW1lLCAmZGF0YSwgJmRhdGFsZW4pOworICAgIGlmIChyKSB7CisgICAg ICAgIC8qCisgICAgICAgICAqIFByaW50IGEgbWVzc2FnZSBvbmx5IG9uIEVOT0VOVCwgb3RoZXIg ZXJyb3JzIGFyZSBsb2dnZWQgYnkgdGhlCisgICAgICAgICAqIGZ1bmN0aW9uIGxpYnhsX3JlYWRf ZmlsZV9jb250ZW50cygpLgorICAgICAgICAgKi8KKyAgICAgICAgaWYgKHIgPT0gRU5PRU5UKQor ICAgICAgICAgICAgTE9HRVYoRVJST1IsIHIsICJmYWlsZWQgdG8gcmVhZCAlcyBmaWxlIiwgd2hh dCk7CisgICAgICAgIHJldHVybiBFUlJPUl9GQUlMOworICAgIH0KKyAgICBsaWJ4bF9fcHRyX2Fk ZChnYywgZGF0YSk7CisgICAgaWYgKGRhdGFsZW4pIHsKKyAgICAgICAgLyogT25seSBhY2NlcHQg bm9uLWVtcHR5IGZpbGVzICovCisgICAgICAgIG0tPmRhdGEgPSBkYXRhOworICAgICAgICBtLT5s ZW5ndGggPSBkYXRhbGVuOworICAgIH0gZWxzZSB7CisgICAgICAgIExPRyhFUlJPUiwgImZpbGUg JXMgZm9yICVzIGlzIGVtcHR5IiwgZmlsZW5hbWUsIHdoYXQpOworICAgICAgICByZXR1cm4gRVJS T1JfSU5WQUw7CisgICAgfQorICAgIHJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGxpYnhsX19k b21haW5fZmlybXdhcmUobGlieGxfX2djICpnYywKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBsaWJ4bF9kb21haW5fYnVpbGRfaW5mbyAqaW5mbywKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzdHJ1Y3QgeGNfZG9tX2ltYWdlICpkb20pCkBAIC04NzEsNiArOTAz LDcgQEAgc3RhdGljIGludCBsaWJ4bF9fZG9tYWluX2Zpcm13YXJlKGxpYnhsX19nYyAqZ2MsCiAg ICAgaW50IGUsIHJjOwogICAgIGludCBkYXRhbGVuID0gMDsKICAgICB2b2lkICpkYXRhOworICAg IGNvbnN0IGNoYXIgKmJpb3NfZmlsZW5hbWUgPSBOVUxMOwogCiAgICAgaWYgKGluZm8tPnUuaHZt LmZpcm13YXJlKQogICAgICAgICBmaXJtd2FyZSA9IGluZm8tPnUuaHZtLmZpcm13YXJlOwpAQCAt OTE0LDYgKzk0NywzMCBAQCBzdGF0aWMgaW50IGxpYnhsX19kb21haW5fZmlybXdhcmUobGlieGxf X2djICpnYywKICAgICAgICAgZ290byBvdXQ7CiAgICAgfQogCisgICAgaWYgKGluZm8tPmRldmlj ZV9tb2RlbF92ZXJzaW9uID09IExJQlhMX0RFVklDRV9NT0RFTF9WRVJTSU9OX1FFTVVfWEVOKSB7 CisgICAgICAgIGlmIChpbmZvLT51Lmh2bS5zeXN0ZW1fZmlybXdhcmUpIHsKKyAgICAgICAgICAg IGJpb3NfZmlsZW5hbWUgPSBpbmZvLT51Lmh2bS5zeXN0ZW1fZmlybXdhcmU7CisgICAgICAgIH0g ZWxzZSB7CisgICAgICAgICAgICBzd2l0Y2ggKGluZm8tPnUuaHZtLmJpb3MpIHsKKyAgICAgICAg ICAgIGNhc2UgTElCWExfQklPU19UWVBFX1NFQUJJT1M6CisgICAgICAgICAgICAgICAgYmlvc19m aWxlbmFtZSA9IGxpYnhsX19zZWFiaW9zX3BhdGgoKTsKKyAgICAgICAgICAgICAgICBicmVhazsK KyAgICAgICAgICAgIGNhc2UgTElCWExfQklPU19UWVBFX09WTUY6CisgICAgICAgICAgICAgICAg Ymlvc19maWxlbmFtZSA9IGxpYnhsX19vdm1mX3BhdGgoKTsKKyAgICAgICAgICAgICAgICBicmVh azsKKyAgICAgICAgICAgIGNhc2UgTElCWExfQklPU19UWVBFX1JPTUJJT1M6CisgICAgICAgICAg ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGFib3J0KCk7CisgICAgICAgICAgICB9CisgICAg ICAgIH0KKyAgICB9CisKKyAgICBpZiAoYmlvc19maWxlbmFtZSkgeworICAgICAgICByYyA9IGxp YnhsX19sb2FkX2h2bV9maXJtd2FyZV9tb2R1bGUoZ2MsIGJpb3NfZmlsZW5hbWUsICJCSU9TIiwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkb20tPnN5c3Rl bV9maXJtd2FyZV9tb2R1bGUpOworICAgICAgICBpZiAocmMpIGdvdG8gb3V0OworICAgIH0KKwog ICAgIGlmIChpbmZvLT51Lmh2bS5zbWJpb3NfZmlybXdhcmUpIHsKICAgICAgICAgZGF0YSA9IE5V TEw7CiAgICAgICAgIGUgPSBsaWJ4bF9yZWFkX2ZpbGVfY29udGVudHMoY3R4LCBpbmZvLT51Lmh2 bS5zbWJpb3NfZmlybXdhcmUsCmRpZmYgLS1naXQgYS90b29scy9saWJ4bC9saWJ4bF9pbnRlcm5h bC5oIGIvdG9vbHMvbGlieGwvbGlieGxfaW50ZXJuYWwuaAppbmRleCBlN2FiODVkLi5lNmExOTli IDEwMDY0NAotLS0gYS90b29scy9saWJ4bC9saWJ4bF9pbnRlcm5hbC5oCisrKyBiL3Rvb2xzL2xp YnhsL2xpYnhsX2ludGVybmFsLmgKQEAgLTIzMTcsNiArMjMxNyw4IEBAIF9oaWRkZW4gY29uc3Qg Y2hhciAqbGlieGxfX3hlbl9jb25maWdfZGlyX3BhdGgodm9pZCk7CiBfaGlkZGVuIGNvbnN0IGNo YXIgKmxpYnhsX194ZW5fc2NyaXB0X2Rpcl9wYXRoKHZvaWQpOwogX2hpZGRlbiBjb25zdCBjaGFy ICpsaWJ4bF9fbG9ja19kaXJfcGF0aCh2b2lkKTsKIF9oaWRkZW4gY29uc3QgY2hhciAqbGlieGxf X3J1bl9kaXJfcGF0aCh2b2lkKTsKK19oaWRkZW4gY29uc3QgY2hhciAqbGlieGxfX3NlYWJpb3Nf cGF0aCh2b2lkKTsKK19oaWRkZW4gY29uc3QgY2hhciAqbGlieGxfX292bWZfcGF0aCh2b2lkKTsK IAogLyotLS0tLSBzdWJwcm9jZXNzIGV4ZWN1dGlvbiB3aXRoIHRpbWVvdXQgLS0tLS0qLwogCmRp ZmYgLS1naXQgYS90b29scy9saWJ4bC9saWJ4bF9wYXRocy5jIGIvdG9vbHMvbGlieGwvbGlieGxf cGF0aHMuYwppbmRleCA5YjdiMGQ1Li42OTcyYjkwIDEwMDY0NAotLS0gYS90b29scy9saWJ4bC9s aWJ4bF9wYXRocy5jCisrKyBiL3Rvb2xzL2xpYnhsL2xpYnhsX3BhdGhzLmMKQEAgLTM1LDYgKzM1 LDE2IEBAIGNvbnN0IGNoYXIgKmxpYnhsX19ydW5fZGlyX3BhdGgodm9pZCkKICAgICByZXR1cm4g WEVOX1JVTl9ESVI7CiB9CiAKK2NvbnN0IGNoYXIgKmxpYnhsX19zZWFiaW9zX3BhdGgodm9pZCkK K3sKKyAgICByZXR1cm4gU0VBQklPU19QQVRIOworfQorCitjb25zdCBjaGFyICpsaWJ4bF9fb3Zt Zl9wYXRoKHZvaWQpCit7CisgICAgcmV0dXJuIE9WTUZfUEFUSDsKK30KKwogLyoKICAqIExvY2Fs IHZhcmlhYmxlczoKICAqIG1vZGU6IEMKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhsL2xpYnhsX3R5 cGVzLmlkbCBiL3Rvb2xzL2xpYnhsL2xpYnhsX3R5cGVzLmlkbAppbmRleCBlZjYxNGJlLi45OGJm YzNhIDEwMDY0NAotLS0gYS90b29scy9saWJ4bC9saWJ4bF90eXBlcy5pZGwKKysrIGIvdG9vbHMv bGlieGwvbGlieGxfdHlwZXMuaWRsCkBAIC01MTMsNiArNTEzLDcgQEAgbGlieGxfZG9tYWluX2J1 aWxkX2luZm8gPSBTdHJ1Y3QoImRvbWFpbl9idWlsZF9pbmZvIixbCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoInRpbWVyX21vZGUiLCAgICAgICBsaWJ4bF90aW1lcl9t b2RlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgibmVzdGVkX2h2 bSIsICAgICAgIGxpYnhsX2RlZmJvb2wpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKCJhbHRwMm0iLCAgICAgICAgICAgbGlieGxfZGVmYm9vbCksCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoInN5c3RlbV9maXJtd2FyZSIsICBzdHJpbmcp LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJzbWJpb3NfZmlybXdh cmUiLCAgc3RyaW5nKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgi YWNwaV9maXJtd2FyZSIsICAgIHN0cmluZyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoImhkdHlwZSIsICAgICAgICAgICBsaWJ4bF9oZHR5cGUpLApkaWZmIC0tZ2l0 IGEvdG9vbHMvbGlieGwveGxfY21kaW1wbC5jIGIvdG9vbHMvbGlieGwveGxfY21kaW1wbC5jCmlu ZGV4IDY0NTllZWMuLjE4ZGE3YWIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYnhsL3hsX2NtZGltcGwu YworKysgYi90b29scy9saWJ4bC94bF9jbWRpbXBsLmMKQEAgLTE1NjIsMTIgKzE1NjIsMTcgQEAg c3RhdGljIHZvaWQgcGFyc2VfY29uZmlnX2RhdGEoY29uc3QgY2hhciAqY29uZmlnX3NvdXJjZSwK IAogICAgICAgICB4bHVfY2ZnX3JlcGxhY2Vfc3RyaW5nIChjb25maWcsICJmaXJtd2FyZV9vdmVy cmlkZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZiX2luZm8tPnUuaHZtLmZp cm13YXJlLCAwKTsKLSAgICAgICAgaWYgKCF4bHVfY2ZnX2dldF9zdHJpbmcoY29uZmlnLCAiYmlv cyIsICZidWYsIDApICYmCi0gICAgICAgICAgICBsaWJ4bF9iaW9zX3R5cGVfZnJvbV9zdHJpbmco YnVmLCAmYl9pbmZvLT51Lmh2bS5iaW9zKSkgeworICAgICAgICB4bHVfY2ZnX3JlcGxhY2Vfc3Ry aW5nIChjb25maWcsICJiaW9zX3BhdGhfb3ZlcnJpZGUiLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAmYl9pbmZvLT51Lmh2bS5zeXN0ZW1fZmlybXdhcmUsIDApOworICAgICAgICBp ZiAoIXhsdV9jZmdfZ2V0X3N0cmluZyhjb25maWcsICJiaW9zIiwgJmJ1ZiwgMCkpIHsKKyAgICAg ICAgICAgIGlmIChsaWJ4bF9iaW9zX3R5cGVfZnJvbV9zdHJpbmcoYnVmLCAmYl9pbmZvLT51Lmh2 bS5iaW9zKSkgewogICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IGludmFs aWQgdmFsdWUgXCIlc1wiIGZvciBcImJpb3NcIlxuIiwKICAgICAgICAgICAgICAgICAgICAgYnVm KTsKICAgICAgICAgICAgICAgICBleGl0ICgxKTsKLSAgICAgICAgfQorICAgICAgICAgICAgfQor ICAgICAgICB9IGVsc2UgaWYgKGJfaW5mby0+dS5odm0uc3lzdGVtX2Zpcm13YXJlKQorICAgICAg ICAgICAgZnByaW50ZihzdGRlcnIsICJXQVJOSU5HOiAiCisgICAgICAgICAgICAgICAgICAgICJi aW9zX3BhdGhfb3ZlcnJpZGUgZ2l2ZW4gd2l0aG91dCBzcGVjaWZpYyBiaW9zIG5hbWVcbiIpOwog CiAgICAgICAgIHhsdV9jZmdfZ2V0X2RlZmJvb2woY29uZmlnLCAicGFlIiwgJmJfaW5mby0+dS5o dm0ucGFlLCAwKTsKICAgICAgICAgeGx1X2NmZ19nZXRfZGVmYm9vbChjb25maWcsICJhcGljIiwg JmJfaW5mby0+dS5odm0uYXBpYywgMCk7Ci0tIApBbnRob255IFBFUkFSRAoKCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxp c3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0cDovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVs Cg==