From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wei Liu Subject: [PATCH RFC v2 5/7] tools/fuzz: introduce x86 instruction emulator target Date: Fri, 9 Dec 2016 12:23:23 +0000 Message-ID: <1481286205-4373-6-git-send-email-wei.liu2@citrix.com> References: <1481286205-4373-1-git-send-email-wei.liu2@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cFKD5-0007sR-Gj for xen-devel@lists.xenproject.org; Fri, 09 Dec 2016 12:23:31 +0000 In-Reply-To: <1481286205-4373-1-git-send-email-wei.liu2@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Xen-devel Cc: Stefano Stabellini , Wei Liu , George Dunlap , Andrew Cooper , Ian Jackson , George Dunlap , Tim Deegan , Jan Beulich List-Id: xen-devel@lists.xenproject.org SW5zdHJ1Y3Rpb24gZW11bGF0b3IgZnV6emluZyBjb2RlIGlzIGZyb20gY29kZSBwcmV2aW91cyB3 cml0dGVuIGJ5CkFuZHJldyBhbmQgR2VvcmdlLiBBZGFwdGVkIHRvIGxsdm0gZnV6emVyIGFuZCBo b29rIHVwIHRoZSBidWlsZCBzeXN0ZW0uCgpTaWduZWQtb2ZmLWJ5OiBBbmRyZXcgQ29vcGVyIDxh bmRyZXcuY29vcGVyM0BjaXRyaXguY29tPgpTaWduZWQtb2ZmLWJ5OiBHZW9yZ2UgRHVubGFwIDxn ZW9yZ2UuZHVubGFwQGNpdHJpeC5jb20+ClNpZ25lZC1vZmYtYnk6IFdlaSBMaXUgPHdlaS5saXUy QGNpdHJpeC5jb20+Ci0tLQpDYzogQW5kcmV3IENvb3BlciA8YW5kcmV3LmNvb3BlcjNAY2l0cml4 LmNvbT4KQ2M6IEdlb3JnZSBEdW5sYXAgPEdlb3JnZS5EdW5sYXBAZXUuY2l0cml4LmNvbT4KQ2M6 IElhbiBKYWNrc29uIDxpYW4uamFja3NvbkBldS5jaXRyaXguY29tPgpDYzogSmFuIEJldWxpY2gg PGpiZXVsaWNoQHN1c2UuY29tPgpDYzogS29ucmFkIFJ6ZXN6dXRlayBXaWxrIDxrb25yYWQud2ls a0BvcmFjbGUuY29tPgpDYzogU3RlZmFubyBTdGFiZWxsaW5pIDxzc3RhYmVsbGluaUBrZXJuZWwu b3JnPgpDYzogVGltIERlZWdhbiA8dGltQHhlbi5vcmc+CkNjOiBXZWkgTGl1IDx3ZWkubGl1MkBj aXRyaXguY29tPgotLS0KIC5naXRpZ25vcmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHwgICAxICsKIHRvb2xzL2Z1enoveDg2X2luc3RydWN0aW9uX2VtdWxhdG9yL01h a2VmaWxlICAgICAgIHwgIDMxICsrKwogLi4uL3g4Ni1pbnNuLWVtdWxhdG9yLWZ1enplci5jICAg ICAgICAgICAgICAgICAgICAgfCAyNjIgKysrKysrKysrKysrKysrKysrKysrCiAzIGZpbGVzIGNo YW5nZWQsIDI5NCBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgdG9vbHMvZnV6ei94 ODZfaW5zdHJ1Y3Rpb25fZW11bGF0b3IvTWFrZWZpbGUKIGNyZWF0ZSBtb2RlIDEwMDY0NCB0b29s cy9mdXp6L3g4Nl9pbnN0cnVjdGlvbl9lbXVsYXRvci94ODYtaW5zbi1lbXVsYXRvci1mdXp6ZXIu YwoKZGlmZiAtLWdpdCBhLy5naXRpZ25vcmUgYi8uZ2l0aWdub3JlCmluZGV4IGEyZjM0YTEuLmQ1 MDcyNDMgMTAwNjQ0Ci0tLSBhLy5naXRpZ25vcmUKKysrIGIvLmdpdGlnbm9yZQpAQCAtMTQ1LDYg KzE0NSw3IEBAIHRvb2xzL2ZsYXNrL3V0aWxzL2ZsYXNrLWxvYWRwb2xpY3kKIHRvb2xzL2ZsYXNr L3V0aWxzL2ZsYXNrLXNldGVuZm9yY2UKIHRvb2xzL2ZsYXNrL3V0aWxzL2ZsYXNrLXNldC1ib29s CiB0b29scy9mbGFzay91dGlscy9mbGFzay1sYWJlbC1wY2kKK3Rvb2xzL2Z1enoveDg2X2luc3Ry dWN0aW9uX2VtdWxhdG9yL3g4Nl9lbXVsYXRlKgogdG9vbHMvaGVscGVycy9fcGF0aHMuaAogdG9v bHMvaGVscGVycy9pbml0LXhlbnN0b3JlLWRvbWFpbgogdG9vbHMvaGVscGVycy94ZW4taW5pdC1k b20wCmRpZmYgLS1naXQgYS90b29scy9mdXp6L3g4Nl9pbnN0cnVjdGlvbl9lbXVsYXRvci9NYWtl ZmlsZSBiL3Rvb2xzL2Z1enoveDg2X2luc3RydWN0aW9uX2VtdWxhdG9yL01ha2VmaWxlCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiMTQ3YWMKLS0tIC9kZXYvbnVsbAorKysg Yi90b29scy9mdXp6L3g4Nl9pbnN0cnVjdGlvbl9lbXVsYXRvci9NYWtlZmlsZQpAQCAtMCwwICsx LDMxIEBACitYRU5fUk9PVD0kKENVUkRJUikvLi4vLi4vLi4KK2luY2x1ZGUgJChYRU5fUk9PVCkv dG9vbHMvUnVsZXMubWsKKworeDg2LWluc3RydWN0aW9uLWVtdWxhdG9yLWZ1enplci1hbGw6IHg4 Ni1pbnNuLWVtdWxhdG9yLmEgeDg2LWluc24tZW11bGF0b3ItZnV6emVyLm8KKworeDg2X2VtdWxh dGUveDg2X2VtdWxhdGUuYyB4ODZfZW11bGF0ZS94ODZfZW11bGF0ZS5oOgorCVsgLUwgeDg2X2Vt dWxhdGUgXSB8fCBsbiAtc2YgJChYRU5fUk9PVCkveGVuL2FyY2gveDg2L3g4Nl9lbXVsYXRlIC4K KworeDg2X2VtdWxhdGUuYyB4ODZfZW11bGF0ZS5oOiAlOgorCVsgLUwgJCogXSB8fCBsbiAtc2Yg JChYRU5fUk9PVCkvdG9vbHMvdGVzdHMveDg2X2VtdWxhdG9yLyQqCisKK0NGTEFHUyArPSAkKENG TEFHU194ZW5pbmNsdWRlKQorCit4ODZfZW11bGF0ZS5vOiB4ODZfZW11bGF0ZS5jIHg4Nl9lbXVs YXRlLmggeDg2X2VtdWxhdGUveDg2X2VtdWxhdGUuYyB4ODZfZW11bGF0ZS94ODZfZW11bGF0ZS5o CisKK3g4Ni1pbnNuLWVtdWxhdG9yLmE6IHg4Nl9lbXVsYXRlLm8KKwkkKEFSKSByYyAkQCAkXgor Cit4ODYtaW5zbi1lbXVsYXRvci1mdXp6ZXIubzogeDg2LWluc24tZW11bGF0b3ItZnV6emVyLmMK KworIyBDb21tb24gdGFyZ2V0cworLlBIT05ZOiBhbGwKK2FsbDogeDg2LWluc3RydWN0aW9uLWVt dWxhdG9yLWZ1enplci1hbGwKKworLlBIT05ZOiBkaXN0Y2xlYW4KK2Rpc3RjbGVhbjogY2xlYW4K KwlybSAtZiB4ODZfZW11bGF0ZSB4ODZfZW11bGF0ZS5jIHg4Nl9lbXVsYXRlLmgKKworLlBIT05Z OiBjbGVhbgorY2xlYW46CisJcm0gLWYgKi5hICoubwpkaWZmIC0tZ2l0IGEvdG9vbHMvZnV6ei94 ODZfaW5zdHJ1Y3Rpb25fZW11bGF0b3IveDg2LWluc24tZW11bGF0b3ItZnV6emVyLmMgYi90b29s cy9mdXp6L3g4Nl9pbnN0cnVjdGlvbl9lbXVsYXRvci94ODYtaW5zbi1lbXVsYXRvci1mdXp6ZXIu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDAwNmJjCi0tLSAvZGV2L251 bGwKKysrIGIvdG9vbHMvZnV6ei94ODZfaW5zdHJ1Y3Rpb25fZW11bGF0b3IveDg2LWluc24tZW11 bGF0b3ItZnV6emVyLmMKQEAgLTAsMCArMSwyNjIgQEAKKyNpbmNsdWRlIDxlcnJuby5oPgorI2lu Y2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxzdGRpby5o PgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0 ZGludC5oPgorI2luY2x1ZGUgPGludHR5cGVzLmg+CisjaW5jbHVkZSA8eGVuL3hlbi5oPgorI2lu Y2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHN5cy90eXBl cy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRl IDxzeXMvbW1hbi5oPgorCisjaW5jbHVkZSAieDg2X2VtdWxhdGUuaCIKKworc3RhdGljIHVuc2ln bmVkIGNoYXIgZGF0YVs0MDk2XTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZGF0YV9pbmRleCA9IDA7 CitzdGF0aWMgdW5zaWduZWQgaW50IGRhdGFfbWF4OworCitzdGF0aWMgaW50IGRhdGFfcmVhZChj b25zdCBjaGFyICp3aHksIHZvaWQgKmRzdCwgdW5zaWduZWQgaW50IGJ5dGVzKQoreworICAgIHVu c2lnbmVkIGk7CisKKyAgICBpZiAoIGRhdGFfaW5kZXggKyBieXRlcyA+IGRhdGFfbWF4ICkKKyAg ICAgICAgcmV0dXJuIFg4NkVNVUxfRVhDRVBUSU9OOworCisgICAgbWVtY3B5KGRzdCwgIGRhdGEr ZGF0YV9pbmRleCwgYnl0ZXMpOworICAgIGRhdGFfaW5kZXggKz0gYnl0ZXM7CisKKyAgICBwcmlu dGYoIiVzOiAiLCB3aHkpOworICAgIGZvciAoaT0wOyBpPGJ5dGVzOyBpKyspIHsKKyAgICAgICAg cHJpbnRmKCIgJTAyeCIsICh1bnNpZ25lZCBpbnQpKih1bnNpZ25lZCBjaGFyICopKGRzdCtpKSk7 CisgICAgfQorICAgIHByaW50ZigiXG4iKTsKKworICAgIHJldHVybiBYODZFTVVMX09LQVk7Cit9 CisKK3N0YXRpYyBpbnQgZnV6el9yZWFkKAorICAgIHVuc2lnbmVkIGludCBzZWcsCisgICAgdW5z aWduZWQgbG9uZyBvZmZzZXQsCisgICAgdm9pZCAqcF9kYXRhLAorICAgIHVuc2lnbmVkIGludCBi eXRlcywKKyAgICBzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCkKK3sKKyAgICByZXR1cm4g ZGF0YV9yZWFkKCJyZWFkIiwgcF9kYXRhLCBieXRlcyk7Cit9CisKK3N0YXRpYyBpbnQgZnV6el9m ZXRjaCgKKyAgICB1bnNpZ25lZCBpbnQgc2VnLAorICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAor ICAgIHZvaWQgKnBfZGF0YSwKKyAgICB1bnNpZ25lZCBpbnQgYnl0ZXMsCisgICAgc3RydWN0IHg4 Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCit7CisgICAgcmV0dXJuIGRhdGFfcmVhZCgiZmV0Y2giLCBw X2RhdGEsIGJ5dGVzKTsKK30KKworc3RhdGljIGludCBmdXp6X3dyaXRlKAorICAgIHVuc2lnbmVk IGludCBzZWcsCisgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsCisgICAgdm9pZCAqcF9kYXRhLAor ICAgIHVuc2lnbmVkIGludCBieXRlcywKKyAgICBzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4 dCkKK3sKKyAgICByZXR1cm4gWDg2RU1VTF9PS0FZOworfQorCitzdGF0aWMgaW50IGZ1enpfY21w eGNoZygKKyAgICB1bnNpZ25lZCBpbnQgc2VnLAorICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAor ICAgIHZvaWQgKm9sZCwKKyAgICB2b2lkICpuZXcsCisgICAgdW5zaWduZWQgaW50IGJ5dGVzLAor ICAgIHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KQoreworICAgIHJldHVybiBYODZFTVVM X09LQVk7Cit9CisKK3N0YXRpYyBpbnQgZnV6el9jcHVpZCgKKyAgICB1bnNpZ25lZCBpbnQgKmVh eCwKKyAgICB1bnNpZ25lZCBpbnQgKmVieCwKKyAgICB1bnNpZ25lZCBpbnQgKmVjeCwKKyAgICB1 bnNpZ25lZCBpbnQgKmVkeCwKKyAgICBzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCkKK3sK KyAgICByZXR1cm4gZW11bF90ZXN0X2NwdWlkKGVheCwgZWJ4LCBlY3gsIGVkeCwgY3R4dCk7Cit9 CisKKyNkZWZpbmUgY3B1X2hhc19tbXggKHsgXAorICAgIHVuc2lnbmVkIGludCBlYXggPSAxLCBl Y3ggPSAwLCBlZHg7IFwKKyAgICBmdXp6X2NwdWlkKCZlYXgsICZlY3gsICZlY3gsICZlZHgsIE5V TEwpOyBcCisgICAgKGVkeCAmICgxVSA8PCAyMykpICE9IDA7IFwKK30pCisKKyNkZWZpbmUgY3B1 X2hhc19zc2UgKHsgXAorICAgIHVuc2lnbmVkIGludCBlYXggPSAxLCBlY3ggPSAwLCBlZHg7IFwK KyAgICBmdXp6X2NwdWlkKCZlYXgsICZlY3gsICZlY3gsICZlZHgsIE5VTEwpOyBcCisgICAgKGVk eCAmICgxVSA8PCAyNSkpICE9IDA7IFwKK30pCisKK3N0YXRpYyBpbmxpbmUgdWludDY0X3QgeGdl dGJ2KHVpbnQzMl90IHhjcikKK3sKKyAgICB1aW50MzJfdCBsbywgaGk7CisKKyAgICBhc20gKCAi LmJ5dGUgMHgwZiwgMHgwMSwgMHhkMCIgOiAiPWEiIChsbyksICI9ZCIgKGhpKSA6ICJjIiAoeGNy KSApOworCisgICAgcmV0dXJuICgodWludDY0X3QpaGkgPDwgMzIpIHwgbG87Cit9CisKKyNkZWZp bmUgY3B1X2hhc19hdnggKHsgXAorICAgIHVuc2lnbmVkIGludCBlYXggPSAxLCBlY3ggPSAwOyBc CisgICAgZnV6el9jcHVpZCgmZWF4LCAmZWF4LCAmZWN4LCAmZWF4LCBOVUxMKTsgXAorICAgIGlm ICggIShlY3ggJiAoMVUgPDwgMjcpKSB8fCAoKHhnZXRidigwKSAmIDYpICE9IDYpICkgXAorICAg ICAgICBlY3ggPSAwOyBcCisgICAgKGVjeCAmICgxVSA8PCAyOCkpICE9IDA7IFwKK30pCisKK3N0 YXRpYyBpbnQgZnV6el9yZWFkX2NyKAorICAgIHVuc2lnbmVkIGludCByZWcsCisgICAgdW5zaWdu ZWQgbG9uZyAqdmFsLAorICAgIHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KQoreworICAg IHJldHVybiBlbXVsX3Rlc3RfcmVhZF9jcihyZWcsIHZhbCwgY3R4dCk7Cit9CisKK3N0YXRpYyBp bnQgZnV6el9nZXRfZnB1KAorICAgIHZvaWQgKCpleGNlcHRpb25fY2FsbGJhY2spKHZvaWQgKiwg c3RydWN0IGNwdV91c2VyX3JlZ3MgKiksCisgICAgdm9pZCAqZXhjZXB0aW9uX2NhbGxiYWNrX2Fy ZywKKyAgICBlbnVtIHg4Nl9lbXVsYXRlX2ZwdV90eXBlIHR5cGUsCisgICAgc3RydWN0IHg4Nl9l bXVsYXRlX2N0eHQgKmN0eHQpCit7CisgICAgc3dpdGNoICggdHlwZSApCisgICAgeworICAgIGNh c2UgWDg2RU1VTF9GUFVfZnB1OgorICAgICAgICBicmVhazsKKyAgICBjYXNlIFg4NkVNVUxfRlBV X21teDoKKyAgICAgICAgaWYgKCBjcHVfaGFzX21teCApCisgICAgICAgICAgICBicmVhazsKKyAg ICBjYXNlIFg4NkVNVUxfRlBVX3htbToKKyAgICAgICAgaWYgKCBjcHVfaGFzX3NzZSApCisgICAg ICAgICAgICBicmVhazsKKyAgICBjYXNlIFg4NkVNVUxfRlBVX3ltbToKKyAgICAgICAgaWYgKCBj cHVfaGFzX2F2eCApCisgICAgICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBy ZXR1cm4gWDg2RU1VTF9VTkhBTkRMRUFCTEU7CisgICAgfQorICAgIHJldHVybiBYODZFTVVMX09L QVk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgeDg2X2VtdWxhdGVfb3BzIGZ1enpfZW11bG9wcyA9IHsK KyAgICAucmVhZCAgICAgICA9IGZ1enpfcmVhZCwKKyAgICAuaW5zbl9mZXRjaCA9IGZ1enpfZmV0 Y2gsCisgICAgLndyaXRlICAgICAgPSBmdXp6X3dyaXRlLAorICAgIC5jbXB4Y2hnICAgID0gZnV6 el9jbXB4Y2hnLAorICAgIC5jcHVpZCAgICAgID0gZnV6el9jcHVpZCwKKyAgICAucmVhZF9jciAg ICA9IGZ1enpfcmVhZF9jciwKKyAgICAuZ2V0X2ZwdSAgICA9IGZ1enpfZ2V0X2ZwdSwKK307CisK KyNkZWZpbmUgQ0FOT05JQ0FMSVpFKHgpICAgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgdWludDY0X3QgX3kgPSAoeCk7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmICggX3kgJiAoMVVMTDw8 NDcpICkgeyAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgX3kgfD0gKH4wVUxM KTw8NDg7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gZWxzZSB7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIF95ICY9ICgx VUxMPDw0OCktMTsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHByaW50Zigi Q2Fub25pY2FsaXplZCAlIiBQUkl4NjQgIiB0byAlIiBQUkl4NjQgIlxuIiwgeCwgX3kpOyAgICBc CisgICAgICAgICh4KSA9IF95OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKKyAgICB9IHdoaWxlKDApCisKKyNkZWZpbmUgQUREUl9TSVpFX1NISUZUIDYwCisjZGVmaW5l IEFERFJfU0laRV82NCAoMlVMTDw8QUREUl9TSVpFX1NISUZUKQorI2RlZmluZSBBRERSX1NJWkVf MzIgKDFVTEw8PEFERFJfU0laRV9TSElGVCkKKyNkZWZpbmUgQUREUl9TSVpFXzE2ICgwKQorCitp bnQgTExWTUZ1enplclRlc3RPbmVJbnB1dChjb25zdCB1aW50OF90ICpkYXRhX3AsIHNpemVfdCBz aXplKQoreworICAgIGJvb2wgc3RhY2tfZXhlYzsKKyAgICBzdHJ1Y3QgY3B1X3VzZXJfcmVncyBy ZWdzID0ge307CisgICAgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgY3R4dCA9CisgICAgICAgIHsK KyAgICAgICAgICAgIC5yZWdzID0gJnJlZ3MsCisgICAgICAgICAgICAuYWRkcl9zaXplID0gOCAq IHNpemVvZih2b2lkICopLAorICAgICAgICAgICAgLnNwX3NpemUgPSA4ICogc2l6ZW9mKHZvaWQg KiksCisgICAgICAgIH07CisKKyAgICBpbnQgbnIgPSAwOworICAgIGludCByYzsKKyAgICB1bnNp Z25lZCB4OworICAgIGNvbnN0IHVpbnQ4X3QgKnAgPSBkYXRhX3A7CisKKyAgICBzdGFja19leGVj ID0gZW11bF90ZXN0X21ha2Vfc3RhY2tfZXhlY3V0YWJsZSgpOworICAgIGlmICghc3RhY2tfZXhl YykKKyAgICAgICAgcHJpbnRmKCJXYXJuaW5nOiBTdGFjayBjb3VsZCBub3QgYmUgbWFkZSBleGVj dXRhYmxlICglZCkuXG4iLCBlcnJubyk7CisKKyAgICAvKiBSZXNldCBhbGwgZ2xvYmFsIHN0YXRl cyAqLworICAgIG1lbXNldChkYXRhLCAwLCBzaXplb2YoZGF0YSkpOworICAgIGRhdGFfaW5kZXgg PSAwOworICAgIGRhdGFfbWF4ID0gMDsKKworICAgIG5yID0gc2l6ZSA8IHNpemVvZihyZWdzKSA/ IHNpemUgOiBzaXplb2YocmVncyk7CisKKyAgICBtZW1jcHkoJnJlZ3MsIHAsIG5yKTsKKyAgICBw ICs9IHNpemVvZihyZWdzKTsKKyAgICBuciArPSBzaXplb2YocmVncyk7CisKKyAgICBpZiAobnIg PD0gc2l6ZSkgeworICAgICAgICBtZW1jcHkoZGF0YSwgcCwgc2l6ZSAtIG5yKTsKKyAgICAgICAg ZGF0YV9tYXggPSBzaXplIC0gbnI7CisgICAgfQorCisgICAgY3R4dC5mb3JjZV93cml0ZWJhY2sg PSAwOworCisgICAgLyogWmVybyAncHJpdmF0ZScgZW50cmllcyAqLworICAgIHJlZ3MuZXJyb3Jf Y29kZSA9IDA7CisgICAgcmVncy5lbnRyeV92ZWN0b3IgPSAwOworCisgICAgLyogVXNlIHRoZSB1 cHBlciBiaXRzIG9mIHJlZ3MuZWlwIHRvIGRldGVybWluZSBhZGRyX3NpemUgKi8KKyAgICB4ID0g KHJlZ3MucmlwID4+IEFERFJfU0laRV9TSElGVCkgJiAweDM7CisgICAgaWYgKHggPT0gMykKKyAg ICAgICAgeCA9IDI7CisgICAgY3R4dC5hZGRyX3NpemUgPSAxNiA8PCB4OworICAgIHByaW50Zigi YWRkcl9zaXplOiAlZFxuIiwgY3R4dC5hZGRyX3NpemUpOworCisgICAgLyogVXNlIHRoZSB1cHBl ciBiaXQgb2YgcmVncy5yc3AgdG8gZGV0ZXJtaW5lIHNwX3NpemUgKGlmIGFwcHJvcHJpYXRlKSAq LworICAgIGlmICggY3R4dC5hZGRyX3NpemUgPT0gNjQpIHsKKyAgICAgICAgY3R4dC5zcF9zaXpl ID0gNjQ7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLyogSWYgYWRkcl9zaXplIGlzbid0IDY0LWJp dHMsIHNwX3NpemUgY2FuIG9ubHkgYmUgMTYgb3IgMzIgYml0cyAqLworICAgICAgICB4ID0gKHJl Z3MucnNwID4+IEFERFJfU0laRV9TSElGVCkgJiAweDE7CisgICAgICAgIGN0eHQuc3Bfc2l6ZSA9 IDE2IDw8IHg7CisgICAgfQorICAgIHByaW50Zigic3Bfc2l6ZTogJWRcbiIsIGN0eHQuc3Bfc2l6 ZSk7CisgICAgQ0FOT05JQ0FMSVpFKHJlZ3MucmlwKTsKKyAgICBDQU5PTklDQUxJWkUocmVncy5y c3ApOworICAgIENBTk9OSUNBTElaRShyZWdzLnJicCk7CisKKyAgICAvKiBaZXJvIGFsbCBzZWdt ZW50cyBmb3Igbm93ICovCisgICAgcmVncy5jcyA9IHJlZ3Muc3MgPSByZWdzLmVzID0gcmVncy5k cyA9IHJlZ3MuZnMgPSByZWdzLmdzID0gMDsKKworICAgIGRvIHsKKyAgICAgICAgcmMgPSB4ODZf ZW11bGF0ZSgmY3R4dCwgJmZ1enpfZW11bG9wcyk7CisgICAgICAgIHByaW50ZigiRW11bGF0aW9u IHJlc3VsdDogJWRcbiIsIHJjKTsKKyAgICB9IHdoaWxlIChyYyA9PSBYODZFTVVMX09LQVkpOwor CisgICAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiBMb2NhbCB2YXJpYWJsZXM6CisgKiBtb2RlOiBD CisgKiBjLWZpbGUtc3R5bGU6ICJCU0QiCisgKiBjLWJhc2ljLW9mZnNldDogNAorICogaW5kZW50 LXRhYnMtbW9kZTogbmlsCisgKiBFbmQ6CisgKi8KLS0gCjIuMS40CgoKX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApY ZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==