From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wei Liu Subject: [PATCH 23/29] xl: split out functions to print out information Date: Fri, 24 Feb 2017 16:13:08 +0000 Message-ID: <20170224161314.22154-24-wei.liu2@citrix.com> References: <20170224161314.22154-1-wei.liu2@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta3.messagelabs.com ([195.245.230.39]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1chIY4-00070Q-5h for xen-devel@lists.xenproject.org; Fri, 24 Feb 2017 16:16:48 +0000 In-Reply-To: <20170224161314.22154-1-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: Wei Liu , Ian Jackson List-Id: xen-devel@lists.xenproject.org U2lnbmVkLW9mZi1ieTogV2VpIExpdSA8d2VpLmxpdTJAY2l0cml4LmNvbT4KLS0tCiB0b29scy94 bC9NYWtlZmlsZSAgICAgfCAgIDIgKy0KIHRvb2xzL3hsL3hsX2NtZGltcGwuYyB8IDg4MyArLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogdG9vbHMveGwveGxf aW5mby5jICAgIHwgOTI1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrCiAzIGZpbGVzIGNoYW5nZWQsIDkyOSBpbnNlcnRpb25zKCspLCA4ODEgZGVsZXRp b25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgdG9vbHMveGwveGxfaW5mby5jCgpkaWZmIC0tZ2l0 IGEvdG9vbHMveGwvTWFrZWZpbGUgYi90b29scy94bC9NYWtlZmlsZQppbmRleCBmZGI2NGZlZDFk Li5jNTExMDZlNDllIDEwMDY0NAotLS0gYS90b29scy94bC9NYWtlZmlsZQorKysgYi90b29scy94 bC9NYWtlZmlsZQpAQCAtMTksNyArMTksNyBAQCBYTF9PQkpTID0geGwubyB4bF9jbWRpbXBsLm8g eGxfY21kdGFibGUubyB4bF9zeHAubyB4bF91dGlscy5vCiBYTF9PQkpTICs9IHhsX3RtZW0ubyB4 bF9wYXJzZS5vIHhsX2NwdXBvb2wubyB4bF9mbGFzay5vCiBYTF9PQkpTICs9IHhsX3Z0cG0ubyB4 bF9ibG9jay5vIHhsX25pYy5vIHhsX3VzYi5vCiBYTF9PQkpTICs9IHhsX3NjaGVkLm8geGxfcGNp Lm8geGxfdmNwdS5vIHhsX2NkLm8geGxfbWVtLm8KLVhMX09CSlMgKz0geGxfcHNyLm8KK1hMX09C SlMgKz0geGxfcHNyLm8geGxfaW5mby5vCiAKICQoWExfT0JKUyk6IENGTEFHUyArPSAkKENGTEFH U19saWJ4ZW50b29sbG9nKQogJChYTF9PQkpTKTogQ0ZMQUdTICs9ICQoQ0ZMQUdTX1hMKQpkaWZm IC0tZ2l0IGEvdG9vbHMveGwveGxfY21kaW1wbC5jIGIvdG9vbHMveGwveGxfY21kaW1wbC5jCmlu ZGV4IGY2OTQyZmZiZTguLjFkZTU0NDVlN2YgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3hsL3hsX2NtZGlt cGwuYworKysgYi90b29scy94bC94bF9jbWRpbXBsLmMKQEAgLTIyMiw4MCArMjIyLDYgQEAgcmVs ZWFzZV9sb2NrOgogICAgIHJldHVybiByYzsKIH0KIAotc3RhdGljIHlhamxfZ2VuX3N0YXR1cyBw cmludGZfaW5mb19vbmVfanNvbih5YWpsX2dlbiBoYW5kLCBpbnQgZG9taWQsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RvbWFpbl9jb25maWcgKmRf Y29uZmlnKQotewotICAgIHlhamxfZ2VuX3N0YXR1cyBzOwotCi0gICAgcyA9IHlhamxfZ2VuX21h cF9vcGVuKGhhbmQpOwotICAgIGlmIChzICE9IHlhamxfZ2VuX3N0YXR1c19vaykKLSAgICAgICAg Z290byBvdXQ7Ci0KLSAgICBzID0geWFqbF9nZW5fc3RyaW5nKGhhbmQsIChjb25zdCB1bnNpZ25l ZCBjaGFyICopImRvbWlkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZigiZG9taWQi KS0xKTsKLSAgICBpZiAocyAhPSB5YWpsX2dlbl9zdGF0dXNfb2spCi0gICAgICAgIGdvdG8gb3V0 OwotICAgIGlmIChkb21pZCAhPSAtMSkKLSAgICAgICAgcyA9IHlhamxfZ2VuX2ludGVnZXIoaGFu ZCwgZG9taWQpOwotICAgIGVsc2UKLSAgICAgICAgcyA9IHlhamxfZ2VuX251bGwoaGFuZCk7Ci0g ICAgaWYgKHMgIT0geWFqbF9nZW5fc3RhdHVzX29rKQotICAgICAgICBnb3RvIG91dDsKLQotICAg IHMgPSB5YWpsX2dlbl9zdHJpbmcoaGFuZCwgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikiY29uZmln IiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZigiY29uZmlnIiktMSk7Ci0gICAgaWYg KHMgIT0geWFqbF9nZW5fc3RhdHVzX29rKQotICAgICAgICBnb3RvIG91dDsKLSAgICBzID0gbGli eGxfZG9tYWluX2NvbmZpZ19nZW5fanNvbihoYW5kLCBkX2NvbmZpZyk7Ci0gICAgaWYgKHMgIT0g eWFqbF9nZW5fc3RhdHVzX29rKQotICAgICAgICBnb3RvIG91dDsKLQotICAgIHMgPSB5YWpsX2dl bl9tYXBfY2xvc2UoaGFuZCk7Ci0gICAgaWYgKHMgIT0geWFqbF9nZW5fc3RhdHVzX29rKQotICAg ICAgICBnb3RvIG91dDsKLQotb3V0OgotICAgIHJldHVybiBzOwotfQotCi1zdGF0aWMgdm9pZCBw cmludGZfaW5mbyhlbnVtIG91dHB1dF9mb3JtYXQgb3V0cHV0X2Zvcm1hdCwKLSAgICAgICAgICAg ICAgICAgICAgICAgIGludCBkb21pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2Rv bWFpbl9jb25maWcgKmRfY29uZmlnLCBGSUxFICpmaCkKLXsKLSAgICBpZiAob3V0cHV0X2Zvcm1h dCA9PSBPVVRQVVRfRk9STUFUX1NYUCkKLSAgICAgICAgcmV0dXJuIHByaW50Zl9pbmZvX3NleHAo ZG9taWQsIGRfY29uZmlnLCBmaCk7Ci0KLSAgICBjb25zdCBjaGFyICpidWY7Ci0gICAgbGlieGxf eWFqbF9sZW5ndGggbGVuID0gMDsKLSAgICB5YWpsX2dlbl9zdGF0dXMgczsKLSAgICB5YWpsX2dl biBoYW5kOwotCi0gICAgaGFuZCA9IGxpYnhsX3lhamxfZ2VuX2FsbG9jKE5VTEwpOwotICAgIGlm ICghaGFuZCkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInVuYWJsZSB0byBhbGxvY2F0ZSBK U09OIGdlbmVyYXRvclxuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzID0gcHJp bnRmX2luZm9fb25lX2pzb24oaGFuZCwgZG9taWQsIGRfY29uZmlnKTsKLSAgICBpZiAocyAhPSB5 YWpsX2dlbl9zdGF0dXNfb2spCi0gICAgICAgIGdvdG8gb3V0OwotCi0gICAgcyA9IHlhamxfZ2Vu X2dldF9idWYoaGFuZCwgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKiopJmJ1ZiwgJmxlbik7Ci0gICAg aWYgKHMgIT0geWFqbF9nZW5fc3RhdHVzX29rKQotICAgICAgICBnb3RvIG91dDsKLQotICAgIGZw dXRzKGJ1ZiwgZmgpOwotCi1vdXQ6Ci0gICAgeWFqbF9nZW5fZnJlZShoYW5kKTsKLQotICAgIGlm IChzICE9IHlhamxfZ2VuX3N0YXR1c19vaykKLSAgICAgICAgZnByaW50ZihzdGRlcnIsCi0gICAg ICAgICAgICAgICAgInVuYWJsZSB0byBmb3JtYXQgZG9tYWluIGNvbmZpZyBhcyBKU09OIChZQUpM OiVkKVxuIiwgcyk7Ci0KLSAgICB4Zmx1c2hfc3RyZWFtKGZoKTsKLX0KLQogc3RhdGljIGludCBk b19kYWVtb25pemUoY2hhciAqbmFtZSwgY29uc3QgY2hhciAqcGlkZmlsZSkKIHsKICAgICBjaGFy ICpmdWxsbmFtZTsKQEAgLTEzMjAsMTY1ICsxMjQ2LDYgQEAgc3RhdGljIHZvaWQgcmVib290X2Rv bWFpbih1aW50MzJfdCBkb21pZCwgbGlieGxfZXZnZW5fZG9tYWluX2RlYXRoICoqZGVhdGh3LAog ICAgIH0KIH0KIAotc3RhdGljIHZvaWQgbGlzdF9kb21haW5zX2RldGFpbHMoY29uc3QgbGlieGxf ZG9taW5mbyAqaW5mbywgaW50IG5iX2RvbWFpbikKLXsKLSAgICBsaWJ4bF9kb21haW5fY29uZmln IGRfY29uZmlnOwotCi0gICAgaW50IGksIHJjOwotCi0gICAgeWFqbF9nZW4gaGFuZCA9IE5VTEw7 Ci0gICAgeWFqbF9nZW5fc3RhdHVzIHM7Ci0gICAgY29uc3QgY2hhciAqYnVmOwotICAgIGxpYnhs X3lhamxfbGVuZ3RoIHlhamxfbGVuID0gMDsKLQotICAgIGlmIChkZWZhdWx0X291dHB1dF9mb3Jt YXQgPT0gT1VUUFVUX0ZPUk1BVF9KU09OKSB7Ci0gICAgICAgIGhhbmQgPSBsaWJ4bF95YWpsX2dl bl9hbGxvYyhOVUxMKTsKLSAgICAgICAgaWYgKCFoYW5kKSB7Ci0gICAgICAgICAgICBmcHJpbnRm KHN0ZGVyciwgInVuYWJsZSB0byBhbGxvY2F0ZSBKU09OIGdlbmVyYXRvclxuIik7Ci0gICAgICAg ICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBzID0geWFqbF9nZW5fYXJyYXlfb3Bl bihoYW5kKTsKLSAgICAgICAgaWYgKHMgIT0geWFqbF9nZW5fc3RhdHVzX29rKQotICAgICAgICAg ICAgZ290byBvdXQ7Ci0gICAgfSBlbHNlCi0gICAgICAgIHMgPSB5YWpsX2dlbl9zdGF0dXNfb2s7 Ci0KLSAgICBmb3IgKGkgPSAwOyBpIDwgbmJfZG9tYWluOyBpKyspIHsKLSAgICAgICAgbGlieGxf ZG9tYWluX2NvbmZpZ19pbml0KCZkX2NvbmZpZyk7Ci0gICAgICAgIHJjID0gbGlieGxfcmV0cmll dmVfZG9tYWluX2NvbmZpZ3VyYXRpb24oY3R4LCBpbmZvW2ldLmRvbWlkLCAmZF9jb25maWcpOwot ICAgICAgICBpZiAocmMpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGRlZmF1 bHRfb3V0cHV0X2Zvcm1hdCA9PSBPVVRQVVRfRk9STUFUX0pTT04pCi0gICAgICAgICAgICBzID0g cHJpbnRmX2luZm9fb25lX2pzb24oaGFuZCwgaW5mb1tpXS5kb21pZCwgJmRfY29uZmlnKTsKLSAg ICAgICAgZWxzZQotICAgICAgICAgICAgcHJpbnRmX2luZm9fc2V4cChpbmZvW2ldLmRvbWlkLCAm ZF9jb25maWcsIHN0ZG91dCk7Ci0gICAgICAgIGxpYnhsX2RvbWFpbl9jb25maWdfZGlzcG9zZSgm ZF9jb25maWcpOwotICAgICAgICBpZiAocyAhPSB5YWpsX2dlbl9zdGF0dXNfb2spCi0gICAgICAg ICAgICBnb3RvIG91dDsKLSAgICB9Ci0KLSAgICBpZiAoZGVmYXVsdF9vdXRwdXRfZm9ybWF0ID09 IE9VVFBVVF9GT1JNQVRfSlNPTikgewotICAgICAgICBzID0geWFqbF9nZW5fYXJyYXlfY2xvc2Uo aGFuZCk7Ci0gICAgICAgIGlmIChzICE9IHlhamxfZ2VuX3N0YXR1c19vaykKLSAgICAgICAgICAg IGdvdG8gb3V0OwotCi0gICAgICAgIHMgPSB5YWpsX2dlbl9nZXRfYnVmKGhhbmQsIChjb25zdCB1 bnNpZ25lZCBjaGFyICoqKSZidWYsICZ5YWpsX2xlbik7Ci0gICAgICAgIGlmIChzICE9IHlhamxf Z2VuX3N0YXR1c19vaykKLSAgICAgICAgICAgIGdvdG8gb3V0OwotCi0gICAgICAgIHB1dHMoYnVm KTsKLSAgICB9Ci0KLW91dDoKLSAgICBpZiAoZGVmYXVsdF9vdXRwdXRfZm9ybWF0ID09IE9VVFBV VF9GT1JNQVRfSlNPTikgewotICAgICAgICB5YWpsX2dlbl9mcmVlKGhhbmQpOwotICAgICAgICBp ZiAocyAhPSB5YWpsX2dlbl9zdGF0dXNfb2spCi0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwK LSAgICAgICAgICAgICAgICAgICAgInVuYWJsZSB0byBmb3JtYXQgZG9tYWluIGNvbmZpZyBhcyBK U09OIChZQUpMOiVkKVxuIiwgcyk7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBsaXN0X2RvbWFp bnMoYm9vbCB2ZXJib3NlLCBib29sIGNvbnRleHQsIGJvb2wgY2xhaW0sIGJvb2wgbnVtYSwKLSAg ICAgICAgICAgICAgICAgICAgICAgICBib29sIGNwdXBvb2wsIGNvbnN0IGxpYnhsX2RvbWluZm8g KmluZm8sIGludCBuYl9kb21haW4pCi17Ci0gICAgaW50IGk7Ci0gICAgc3RhdGljIGNvbnN0IGNo YXIgc2h1dGRvd25fcmVhc29uX2xldHRlcnNbXT0gIi1yc2N3UyI7Ci0gICAgbGlieGxfYml0bWFw IG5vZGVtYXA7Ci0gICAgbGlieGxfcGh5c2luZm8gcGh5c2luZm87Ci0KLSAgICBsaWJ4bF9iaXRt YXBfaW5pdCgmbm9kZW1hcCk7Ci0gICAgbGlieGxfcGh5c2luZm9faW5pdCgmcGh5c2luZm8pOwot Ci0gICAgcHJpbnRmKCJOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IElEICAgTWVtIFZDUFVzXHRTdGF0ZVx0VGltZShzKSIpOwotICAgIGlmICh2ZXJib3NlKSBwcmlu dGYoIiAgIFVVSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhc29uLUNvZGVcdFNlY3Vy aXR5IExhYmVsIik7Ci0gICAgaWYgKGNvbnRleHQgJiYgIXZlcmJvc2UpIHByaW50ZigiICAgU2Vj dXJpdHkgTGFiZWwiKTsKLSAgICBpZiAoY2xhaW0pIHByaW50ZigiICBDbGFpbWVkIik7Ci0gICAg aWYgKGNwdXBvb2wpIHByaW50ZigiICAgICAgICAgQ3B1cG9vbCIpOwotICAgIGlmIChudW1hKSB7 Ci0gICAgICAgIGlmIChsaWJ4bF9ub2RlX2JpdG1hcF9hbGxvYyhjdHgsICZub2RlbWFwLCAwKSkg ewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJsaWJ4bF9ub2RlX2JpdG1hcF9hbGxvY19m YWlsZWQuXG4iKTsKLSAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKLSAgICAgICAgfQot ICAgICAgICBpZiAobGlieGxfZ2V0X3BoeXNpbmZvKGN0eCwgJnBoeXNpbmZvKSAhPSAwKSB7Ci0g ICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImxpYnhsX3BoeXNpbmZvIGZhaWxlZC5cbiIpOwot ICAgICAgICAgICAgbGlieGxfYml0bWFwX2Rpc3Bvc2UoJm5vZGVtYXApOwotICAgICAgICAgICAg ZXhpdChFWElUX0ZBSUxVUkUpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpbnRmKCIgTk9ERSBB ZmZpbml0eSIpOwotICAgIH0KLSAgICBwcmludGYoIlxuIik7Ci0gICAgZm9yIChpID0gMDsgaSA8 IG5iX2RvbWFpbjsgaSsrKSB7Ci0gICAgICAgIGNoYXIgKmRvbW5hbWU7Ci0gICAgICAgIGxpYnhs X3NodXRkb3duX3JlYXNvbiBzaHV0ZG93bl9yZWFzb247Ci0gICAgICAgIGRvbW5hbWUgPSBsaWJ4 bF9kb21pZF90b19uYW1lKGN0eCwgaW5mb1tpXS5kb21pZCk7Ci0gICAgICAgIHNodXRkb3duX3Jl YXNvbiA9IGluZm9baV0uc2h1dGRvd24gPyBpbmZvW2ldLnNodXRkb3duX3JlYXNvbiA6IDA7Ci0g ICAgICAgIHByaW50ZigiJS00MHMgJTVkICU1bHUgJTVkICAgICAlYyVjJWMlYyVjJWMgICU4LjFm IiwKLSAgICAgICAgICAgICAgICBkb21uYW1lLAotICAgICAgICAgICAgICAgIGluZm9baV0uZG9t aWQsCi0gICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpICgoaW5mb1tpXS5jdXJyZW50X21l bWtiICsKLSAgICAgICAgICAgICAgICAgICAgaW5mb1tpXS5vdXRzdGFuZGluZ19tZW1rYikvIDEw MjQpLAotICAgICAgICAgICAgICAgIGluZm9baV0udmNwdV9vbmxpbmUsCi0gICAgICAgICAgICAg ICAgaW5mb1tpXS5ydW5uaW5nID8gJ3InIDogJy0nLAotICAgICAgICAgICAgICAgIGluZm9baV0u YmxvY2tlZCA/ICdiJyA6ICctJywKLSAgICAgICAgICAgICAgICBpbmZvW2ldLnBhdXNlZCA/ICdw JyA6ICctJywKLSAgICAgICAgICAgICAgICBpbmZvW2ldLnNodXRkb3duID8gJ3MnIDogJy0nLAot ICAgICAgICAgICAgICAgIChzaHV0ZG93bl9yZWFzb24gPj0gMCAmJgotICAgICAgICAgICAgICAg ICBzaHV0ZG93bl9yZWFzb24gPCBzaXplb2Yoc2h1dGRvd25fcmVhc29uX2xldHRlcnMpLTEKLSAg ICAgICAgICAgICAgICAgPyBzaHV0ZG93bl9yZWFzb25fbGV0dGVyc1tzaHV0ZG93bl9yZWFzb25d IDogJz8nKSwKLSAgICAgICAgICAgICAgICBpbmZvW2ldLmR5aW5nID8gJ2QnIDogJy0nLAotICAg ICAgICAgICAgICAgICgoZmxvYXQpaW5mb1tpXS5jcHVfdGltZSAvIDFlOSkpOwotICAgICAgICBm cmVlKGRvbW5hbWUpOwotICAgICAgICBpZiAodmVyYm9zZSkgewotICAgICAgICAgICAgcHJpbnRm KCIgIiBMSUJYTF9VVUlEX0ZNVCwgTElCWExfVVVJRF9CWVRFUyhpbmZvW2ldLnV1aWQpKTsKLSAg ICAgICAgICAgIGlmIChpbmZvW2ldLnNodXRkb3duKSBwcmludGYoIiAlOHgiLCBzaHV0ZG93bl9y ZWFzb24pOwotICAgICAgICAgICAgZWxzZSBwcmludGYoIiAlOHMiLCAiLSIpOwotICAgICAgICB9 Ci0gICAgICAgIGlmIChjbGFpbSkKLSAgICAgICAgICAgIHByaW50ZigiICU1bHUiLCAodW5zaWdu ZWQgbG9uZylpbmZvW2ldLm91dHN0YW5kaW5nX21lbWtiIC8gMTAyNCk7Ci0gICAgICAgIGlmICh2 ZXJib3NlIHx8IGNvbnRleHQpCi0gICAgICAgICAgICBwcmludGYoIiAlMTZzIiwgaW5mb1tpXS5z c2lkX2xhYmVsID8gOiAiLSIpOwotICAgICAgICBpZiAoY3B1cG9vbCkgewotICAgICAgICAgICAg Y2hhciAqcG9vbG5hbWUgPSBsaWJ4bF9jcHVwb29saWRfdG9fbmFtZShjdHgsIGluZm9baV0uY3B1 cG9vbCk7Ci0gICAgICAgICAgICBwcmludGYoIiUxNnMiLCBwb29sbmFtZSk7Ci0gICAgICAgICAg ICBmcmVlKHBvb2xuYW1lKTsKLSAgICAgICAgfQotICAgICAgICBpZiAobnVtYSkgewotICAgICAg ICAgICAgbGlieGxfZG9tYWluX2dldF9ub2RlYWZmaW5pdHkoY3R4LCBpbmZvW2ldLmRvbWlkLCAm bm9kZW1hcCk7Ci0KLSAgICAgICAgICAgIHB1dGNoYXIoJyAnKTsKLSAgICAgICAgICAgIHByaW50 X2JpdG1hcChub2RlbWFwLm1hcCwgcGh5c2luZm8ubnJfbm9kZXMsIHN0ZG91dCk7Ci0gICAgICAg IH0KLSAgICAgICAgcHV0Y2hhcignXG4nKTsKLSAgICB9Ci0KLSAgICBsaWJ4bF9iaXRtYXBfZGlz cG9zZSgmbm9kZW1hcCk7Ci0gICAgbGlieGxfcGh5c2luZm9fZGlzcG9zZSgmcGh5c2luZm8pOwot fQotCi1zdGF0aWMgdm9pZCBsaXN0X3ZtKHZvaWQpCi17Ci0gICAgbGlieGxfdm1pbmZvICppbmZv OwotICAgIGNoYXIgKmRvbW5hbWU7Ci0gICAgaW50IG5iX3ZtLCBpOwotCi0gICAgaW5mbyA9IGxp YnhsX2xpc3Rfdm0oY3R4LCAmbmJfdm0pOwotCi0gICAgaWYgKCFpbmZvKSB7Ci0gICAgICAgIGZw cmludGYoc3RkZXJyLCAibGlieGxfbGlzdF92bSBmYWlsZWQuXG4iKTsKLSAgICAgICAgZXhpdChF WElUX0ZBSUxVUkUpOwotICAgIH0KLSAgICBwcmludGYoIlVVSUQgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgSUQgICAgbmFtZVxuIik7Ci0gICAgZm9yIChpID0gMDsgaSA8IG5iX3Zt OyBpKyspIHsKLSAgICAgICAgZG9tbmFtZSA9IGxpYnhsX2RvbWlkX3RvX25hbWUoY3R4LCBpbmZv W2ldLmRvbWlkKTsKLSAgICAgICAgcHJpbnRmKExJQlhMX1VVSURfRk1UICIgICVkICAgICUtMzBz XG4iLCBMSUJYTF9VVUlEX0JZVEVTKGluZm9baV0udXVpZCksCi0gICAgICAgICAgICBpbmZvW2ld LmRvbWlkLCBkb21uYW1lKTsKLSAgICAgICAgZnJlZShkb21uYW1lKTsKLSAgICB9Ci0gICAgbGli eGxfdm1pbmZvX2xpc3RfZnJlZShpbmZvLCBuYl92bSk7Ci19Ci0KIHN0YXRpYyB2b2lkIGNvcmVf ZHVtcF9kb21haW4odWludDMyX3QgZG9taWQsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQogewogICAg IGludCByYzsKQEAgLTI0MTIsOTkgKzIxNzksNiBAQCBpbnQgbWFpbl9yZWJvb3QoaW50IGFyZ2Ms IGNoYXIgKiphcmd2KQogICAgIHJldHVybiBtYWluX3NodXRkb3duX29yX3JlYm9vdCgxLCBhcmdj LCBhcmd2KTsKIH0KIAotaW50IG1haW5fbGlzdChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi17Ci0g ICAgaW50IG9wdDsKLSAgICBib29sIHZlcmJvc2UgPSBmYWxzZTsKLSAgICBib29sIGNvbnRleHQg PSBmYWxzZTsKLSAgICBib29sIGRldGFpbHMgPSBmYWxzZTsKLSAgICBib29sIGNwdXBvb2wgPSBm YWxzZTsKLSAgICBib29sIG51bWEgPSBmYWxzZTsKLSAgICBzdGF0aWMgc3RydWN0IG9wdGlvbiBv cHRzW10gPSB7Ci0gICAgICAgIHsibG9uZyIsIDAsIDAsICdsJ30sCi0gICAgICAgIHsidmVyYm9z ZSIsIDAsIDAsICd2J30sCi0gICAgICAgIHsiY29udGV4dCIsIDAsIDAsICdaJ30sCi0gICAgICAg IHsiY3B1cG9vbCIsIDAsIDAsICdjJ30sCi0gICAgICAgIHsibnVtYSIsIDAsIDAsICduJ30sCi0g ICAgICAgIENPTU1PTl9MT05HX09QVFMKLSAgICB9OwotCi0gICAgbGlieGxfZG9taW5mbyBpbmZv X2J1ZjsKLSAgICBsaWJ4bF9kb21pbmZvICppbmZvLCAqaW5mb19mcmVlPTA7Ci0gICAgaW50IG5i X2RvbWFpbiwgcmM7Ci0KLSAgICBTV0lUQ0hfRk9SRUFDSF9PUFQob3B0LCAibHZoWmNuIiwgb3B0 cywgImxpc3QiLCAwKSB7Ci0gICAgY2FzZSAnbCc6Ci0gICAgICAgIGRldGFpbHMgPSB0cnVlOwot ICAgICAgICBicmVhazsKLSAgICBjYXNlICd2JzoKLSAgICAgICAgdmVyYm9zZSA9IHRydWU7Ci0g ICAgICAgIGJyZWFrOwotICAgIGNhc2UgJ1onOgotICAgICAgICBjb250ZXh0ID0gdHJ1ZTsKLSAg ICAgICAgYnJlYWs7Ci0gICAgY2FzZSAnYyc6Ci0gICAgICAgIGNwdXBvb2wgPSB0cnVlOwotICAg ICAgICBicmVhazsKLSAgICBjYXNlICduJzoKLSAgICAgICAgbnVtYSA9IHRydWU7Ci0gICAgICAg IGJyZWFrOwotICAgIH0KLQotICAgIGxpYnhsX2RvbWluZm9faW5pdCgmaW5mb19idWYpOwotCi0g ICAgaWYgKG9wdGluZCA+PSBhcmdjKSB7Ci0gICAgICAgIGluZm8gPSBsaWJ4bF9saXN0X2RvbWFp bihjdHgsICZuYl9kb21haW4pOwotICAgICAgICBpZiAoIWluZm8pIHsKLSAgICAgICAgICAgIGZw cmludGYoc3RkZXJyLCAibGlieGxfbGlzdF9kb21haW4gZmFpbGVkLlxuIik7Ci0gICAgICAgICAg ICByZXR1cm4gRVhJVF9GQUlMVVJFOwotICAgICAgICB9Ci0gICAgICAgIGluZm9fZnJlZSA9IGlu Zm87Ci0gICAgfSBlbHNlIGlmIChvcHRpbmQgPT0gYXJnYy0xKSB7Ci0gICAgICAgIHVpbnQzMl90 IGRvbWlkID0geGZpbmRfZG9tYWluKGFyZ3Zbb3B0aW5kXSk7Ci0gICAgICAgIHJjID0gbGlieGxf ZG9tYWluX2luZm8oY3R4LCAmaW5mb19idWYsIGRvbWlkKTsKLSAgICAgICAgaWYgKHJjID09IEVS Uk9SX0RPTUFJTl9OT1RGT1VORCkgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJv cjogRG9tYWluIFwnJXNcJyBkb2VzIG5vdCBleGlzdC5cbiIsCi0gICAgICAgICAgICAgICAgYXJn dltvcHRpbmRdKTsKLSAgICAgICAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7Ci0gICAgICAgIH0K LSAgICAgICAgaWYgKHJjKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImxpYnhsX2Rv bWFpbl9pbmZvIGZhaWxlZCAoY29kZSAlZCkuXG4iLCByYyk7Ci0gICAgICAgICAgICByZXR1cm4g RVhJVF9GQUlMVVJFOwotICAgICAgICB9Ci0gICAgICAgIGluZm8gPSAmaW5mb19idWY7Ci0gICAg ICAgIG5iX2RvbWFpbiA9IDE7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaGVscCgibGlzdCIpOwot ICAgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOwotICAgIH0KLQotICAgIGlmIChkZXRhaWxzKQot ICAgICAgICBsaXN0X2RvbWFpbnNfZGV0YWlscyhpbmZvLCBuYl9kb21haW4pOwotICAgIGVsc2UK LSAgICAgICAgbGlzdF9kb21haW5zKHZlcmJvc2UsIGNvbnRleHQsIGZhbHNlIC8qIGNsYWltICov LCBudW1hLCBjcHVwb29sLAotICAgICAgICAgICAgICAgICAgICAgaW5mbywgbmJfZG9tYWluKTsK LQotICAgIGlmIChpbmZvX2ZyZWUpCi0gICAgICAgIGxpYnhsX2RvbWluZm9fbGlzdF9mcmVlKGlu Zm8sIG5iX2RvbWFpbik7Ci0KLSAgICBsaWJ4bF9kb21pbmZvX2Rpc3Bvc2UoJmluZm9fYnVmKTsK LQotICAgIHJldHVybiBFWElUX1NVQ0NFU1M7Ci19Ci0KLWludCBtYWluX3ZtX2xpc3QoaW50IGFy Z2MsIGNoYXIgKiphcmd2KQotewotICAgIGludCBvcHQ7Ci0KLSAgICBTV0lUQ0hfRk9SRUFDSF9P UFQob3B0LCAiIiwgTlVMTCwgInZtLWxpc3QiLCAwKSB7Ci0gICAgICAgIC8qIE5vIG9wdGlvbnMg Ki8KLSAgICB9Ci0KLSAgICBsaXN0X3ZtKCk7Ci0gICAgcmV0dXJuIEVYSVRfU1VDQ0VTUzsKLX0K LQogaW50IG1haW5fY3JlYXRlKGludCBhcmdjLCBjaGFyICoqYXJndikKIHsKICAgICBjb25zdCBj aGFyICpmaWxlbmFtZSA9IE5VTEw7CkBAIC0yNjAwLDYgKzIyNzQsOSBAQCBpbnQgbWFpbl9jcmVh dGUoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogICAgIHJldHVybiAwOwogfQogCitleHRlcm4gdm9p ZCBwcmludGZfaW5mbyhlbnVtIG91dHB1dF9mb3JtYXQgb3V0cHV0X2Zvcm1hdCwKKyAgICAgICAg ICAgICAgICAgICAgICAgIGludCBkb21pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhs X2RvbWFpbl9jb25maWcgKmRfY29uZmlnLCBGSUxFICpmaCk7CiBpbnQgbWFpbl9jb25maWdfdXBk YXRlKGludCBhcmdjLCBjaGFyICoqYXJndikKIHsKICAgICB1aW50MzJfdCBkb21pZDsKQEAgLTI3 MzcsMzA5ICsyNDE0LDYgQEAgaW50IG1haW5fYnV0dG9uX3ByZXNzKGludCBhcmdjLCBjaGFyICoq YXJndikKICAgICByZXR1cm4gMDsKIH0KIAotLyogUG9zc2libHkgc2VsZWN0IGEgc3BlY2lmaWMg cGllY2Ugb2YgYHhsIGluZm9gIHRvIHByaW50LiAqLwotc3RhdGljIGNvbnN0IGNoYXIgKmluZm9f bmFtZTsKLXN0YXRpYyBpbnQgbWF5YmVfcHJpbnRmKGNvbnN0IGNoYXIgKmZtdCwgLi4uKSBfX2F0 dHJpYnV0ZV9fKChmb3JtYXQocHJpbnRmLDEsMikpKTsKLXN0YXRpYyBpbnQgbWF5YmVfcHJpbnRm KGNvbnN0IGNoYXIgKmZtdCwgLi4uKQotewotICAgIHZhX2xpc3QgYXA7Ci0gICAgY2hhciAqc3Ry OwotICAgIGludCBjb3VudCA9IDA7Ci0KLSAgICB2YV9zdGFydChhcCwgZm10KTsKLSAgICBpZiAo dmFzcHJpbnRmKCZzdHIsIGZtdCwgYXApICE9IC0xKSB7Ci0gICAgICAgIGlmIChpbmZvX25hbWUp IHsKLSAgICAgICAgICAgIGNoYXIgKnM7Ci0KLSAgICAgICAgICAgIGlmICghc3RybmNtcChzdHIs IGluZm9fbmFtZSwgc3RybGVuKGluZm9fbmFtZSkpICYmCi0gICAgICAgICAgICAgICAgKHMgPSBz dHJjaHIoc3RyLCAnOicpKSAmJiBzWzFdID09ICcgJykKLSAgICAgICAgICAgICAgICBjb3VudCA9 IGZwdXRzKCZzWzJdLCBzdGRvdXQpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGNvdW50 ID0gZnB1dHMoc3RyLCBzdGRvdXQpOwotCi0gICAgICAgIGZyZWUoc3RyKTsKLSAgICB9Ci0gICAg dmFfZW5kKGFwKTsKLQotICAgIHJldHVybiBjb3VudDsKLX0KLQotc3RhdGljIHZvaWQgb3V0cHV0 X3hlbmluZm8odm9pZCkKLXsKLSAgICBjb25zdCBsaWJ4bF92ZXJzaW9uX2luZm8gKmluZm87Ci0g ICAgbGlieGxfc2NoZWR1bGVyIHNjaGVkOwotICAgIGludCByYzsKLQotICAgIGlmICghKGluZm8g PSBsaWJ4bF9nZXRfdmVyc2lvbl9pbmZvKGN0eCkpKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJy LCAibGlieGxfZ2V0X3ZlcnNpb25faW5mbyBmYWlsZWQuXG4iKTsKLSAgICAgICAgcmV0dXJuOwot ICAgIH0KLQotICAgIHJjID0gbGlieGxfZ2V0X3NjaGVkdWxlcihjdHgpOwotICAgIGlmIChyYyA8 IDApIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJnZXRfc2NoZWR1bGVyIHN5c2N0bCBmYWls ZWQuXG4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzY2hlZCA9IHJjOwotCi0gICAg bWF5YmVfcHJpbnRmKCJ4ZW5fbWFqb3IgICAgICAgICAgICAgIDogJWRcbiIsIGluZm8tPnhlbl92 ZXJzaW9uX21ham9yKTsKLSAgICBtYXliZV9wcmludGYoInhlbl9taW5vciAgICAgICAgICAgICAg OiAlZFxuIiwgaW5mby0+eGVuX3ZlcnNpb25fbWlub3IpOwotICAgIG1heWJlX3ByaW50ZigieGVu X2V4dHJhICAgICAgICAgICAgICA6ICVzXG4iLCBpbmZvLT54ZW5fdmVyc2lvbl9leHRyYSk7Ci0g ICAgbWF5YmVfcHJpbnRmKCJ4ZW5fdmVyc2lvbiAgICAgICAgICAgIDogJWQuJWQlc1xuIiwgaW5m by0+eGVuX3ZlcnNpb25fbWFqb3IsCi0gICAgICAgICAgIGluZm8tPnhlbl92ZXJzaW9uX21pbm9y LCBpbmZvLT54ZW5fdmVyc2lvbl9leHRyYSk7Ci0gICAgbWF5YmVfcHJpbnRmKCJ4ZW5fY2FwcyAg ICAgICAgICAgICAgIDogJXNcbiIsIGluZm8tPmNhcGFiaWxpdGllcyk7Ci0gICAgbWF5YmVfcHJp bnRmKCJ4ZW5fc2NoZWR1bGVyICAgICAgICAgIDogJXNcbiIsIGxpYnhsX3NjaGVkdWxlcl90b19z dHJpbmcoc2NoZWQpKTsKLSAgICBtYXliZV9wcmludGYoInhlbl9wYWdlc2l6ZSAgICAgICAgICAg OiAldVxuIiwgaW5mby0+cGFnZXNpemUpOwotICAgIG1heWJlX3ByaW50ZigicGxhdGZvcm1fcGFy YW1zICAgICAgICA6IHZpcnRfc3RhcnQ9MHglIlBSSXg2NCJcbiIsIGluZm8tPnZpcnRfc3RhcnQp OwotICAgIG1heWJlX3ByaW50ZigieGVuX2NoYW5nZXNldCAgICAgICAgICA6ICVzXG4iLCBpbmZv LT5jaGFuZ2VzZXQpOwotICAgIG1heWJlX3ByaW50ZigieGVuX2NvbW1hbmRsaW5lICAgICAgICA6 ICVzXG4iLCBpbmZvLT5jb21tYW5kbGluZSk7Ci0gICAgbWF5YmVfcHJpbnRmKCJjY19jb21waWxl ciAgICAgICAgICAgIDogJXNcbiIsIGluZm8tPmNvbXBpbGVyKTsKLSAgICBtYXliZV9wcmludGYo ImNjX2NvbXBpbGVfYnkgICAgICAgICAgOiAlc1xuIiwgaW5mby0+Y29tcGlsZV9ieSk7Ci0gICAg bWF5YmVfcHJpbnRmKCJjY19jb21waWxlX2RvbWFpbiAgICAgIDogJXNcbiIsIGluZm8tPmNvbXBp bGVfZG9tYWluKTsKLSAgICBtYXliZV9wcmludGYoImNjX2NvbXBpbGVfZGF0ZSAgICAgICAgOiAl c1xuIiwgaW5mby0+Y29tcGlsZV9kYXRlKTsKLSAgICBtYXliZV9wcmludGYoImJ1aWxkX2lkICAg ICAgICAgICAgICAgOiAlc1xuIiwgaW5mby0+YnVpbGRfaWQpOwotCi0gICAgcmV0dXJuOwotfQot Ci1zdGF0aWMgdm9pZCBvdXRwdXRfbm9kZWluZm8odm9pZCkKLXsKLSAgICBzdHJ1Y3QgdXRzbmFt ZSB1dHNidWY7Ci0KLSAgICBpZiAodW5hbWUoJnV0c2J1ZikgPCAwKQotICAgICAgICByZXR1cm47 Ci0KLSAgICBtYXliZV9wcmludGYoImhvc3QgICAgICAgICAgICAgICAgICAgOiAlc1xuIiwgdXRz YnVmLm5vZGVuYW1lKTsKLSAgICBtYXliZV9wcmludGYoInJlbGVhc2UgICAgICAgICAgICAgICAg OiAlc1xuIiwgdXRzYnVmLnJlbGVhc2UpOwotICAgIG1heWJlX3ByaW50ZigidmVyc2lvbiAgICAg ICAgICAgICAgICA6ICVzXG4iLCB1dHNidWYudmVyc2lvbik7Ci0gICAgbWF5YmVfcHJpbnRmKCJt YWNoaW5lICAgICAgICAgICAgICAgIDogJXNcbiIsIHV0c2J1Zi5tYWNoaW5lKTsKLX0KLQotc3Rh dGljIHZvaWQgb3V0cHV0X3BoeXNpbmZvKHZvaWQpCi17Ci0gICAgbGlieGxfcGh5c2luZm8gaW5m bzsKLSAgICBjb25zdCBsaWJ4bF92ZXJzaW9uX2luZm8gKnZpbmZvOwotICAgIHVuc2lnbmVkIGlu dCBpOwotICAgIGxpYnhsX2JpdG1hcCBjcHVtYXA7Ci0gICAgaW50IG4gPSAwOwotCi0gICAgaWYg KGxpYnhsX2dldF9waHlzaW5mbyhjdHgsICZpbmZvKSAhPSAwKSB7Ci0gICAgICAgIGZwcmludGYo c3RkZXJyLCAibGlieGxfcGh5c2luZm8gZmFpbGVkLlxuIik7Ci0gICAgICAgIHJldHVybjsKLSAg ICB9Ci0gICAgbWF5YmVfcHJpbnRmKCJucl9jcHVzICAgICAgICAgICAgICAgIDogJWRcbiIsIGlu Zm8ubnJfY3B1cyk7Ci0gICAgbWF5YmVfcHJpbnRmKCJtYXhfY3B1X2lkICAgICAgICAgICAgIDog JWRcbiIsIGluZm8ubWF4X2NwdV9pZCk7Ci0gICAgbWF5YmVfcHJpbnRmKCJucl9ub2RlcyAgICAg ICAgICAgICAgIDogJWRcbiIsIGluZm8ubnJfbm9kZXMpOwotICAgIG1heWJlX3ByaW50ZigiY29y ZXNfcGVyX3NvY2tldCAgICAgICA6ICVkXG4iLCBpbmZvLmNvcmVzX3Blcl9zb2NrZXQpOwotICAg IG1heWJlX3ByaW50ZigidGhyZWFkc19wZXJfY29yZSAgICAgICA6ICVkXG4iLCBpbmZvLnRocmVh ZHNfcGVyX2NvcmUpOwotICAgIG1heWJlX3ByaW50ZigiY3B1X21oeiAgICAgICAgICAgICAgICA6 ICVkXG4iLCBpbmZvLmNwdV9raHogLyAxMDAwKTsKLQotICAgIG1heWJlX3ByaW50ZigiaHdfY2Fw cyAgICAgICAgICAgICAgICA6ICUwOHg6JTA4eDolMDh4OiUwOHg6JTA4eDolMDh4OiUwOHg6JTA4 eFxuIiwKLSAgICAgICAgIGluZm8uaHdfY2FwWzBdLCBpbmZvLmh3X2NhcFsxXSwgaW5mby5od19j YXBbMl0sIGluZm8uaHdfY2FwWzNdLAotICAgICAgICAgaW5mby5od19jYXBbNF0sIGluZm8uaHdf Y2FwWzVdLCBpbmZvLmh3X2NhcFs2XSwgaW5mby5od19jYXBbN10KLSAgICAgICAgKTsKLQotICAg IG1heWJlX3ByaW50ZigidmlydF9jYXBzICAgICAgICAgICAgICA6JXMlc1xuIiwKLSAgICAgICAg IGluZm8uY2FwX2h2bSA/ICIgaHZtIiA6ICIiLAotICAgICAgICAgaW5mby5jYXBfaHZtX2RpcmVj dGlvID8gIiBodm1fZGlyZWN0aW8iIDogIiIKLSAgICAgICAgKTsKLQotICAgIHZpbmZvID0gbGli eGxfZ2V0X3ZlcnNpb25faW5mbyhjdHgpOwotICAgIGlmICh2aW5mbykgewotICAgICAgICBpID0g KDEgPDwgMjApIC8gdmluZm8tPnBhZ2VzaXplOwotICAgICAgICBtYXliZV9wcmludGYoInRvdGFs X21lbW9yeSAgICAgICAgICAgOiAlIlBSSXU2NCJcbiIsIGluZm8udG90YWxfcGFnZXMgLyBpKTsK LSAgICAgICAgbWF5YmVfcHJpbnRmKCJmcmVlX21lbW9yeSAgICAgICAgICAgIDogJSJQUkl1NjQi XG4iLCAoaW5mby5mcmVlX3BhZ2VzIC0gaW5mby5vdXRzdGFuZGluZ19wYWdlcykgLyBpKTsKLSAg ICAgICAgbWF5YmVfcHJpbnRmKCJzaGFyaW5nX2ZyZWVkX21lbW9yeSAgIDogJSJQUkl1NjQiXG4i LCBpbmZvLnNoYXJpbmdfZnJlZWRfcGFnZXMgLyBpKTsKLSAgICAgICAgbWF5YmVfcHJpbnRmKCJz aGFyaW5nX3VzZWRfbWVtb3J5ICAgIDogJSJQUkl1NjQiXG4iLCBpbmZvLnNoYXJpbmdfdXNlZF9m cmFtZXMgLyBpKTsKLSAgICAgICAgbWF5YmVfcHJpbnRmKCJvdXRzdGFuZGluZ19jbGFpbXMgICAg IDogJSJQUkl1NjQiXG4iLCBpbmZvLm91dHN0YW5kaW5nX3BhZ2VzIC8gaSk7Ci0gICAgfQotICAg IGlmICghbGlieGxfZ2V0X2ZyZWVjcHVzKGN0eCwgJmNwdW1hcCkpIHsKLSAgICAgICAgbGlieGxf Zm9yX2VhY2hfYml0KGksIGNwdW1hcCkKLSAgICAgICAgICAgIGlmIChsaWJ4bF9iaXRtYXBfdGVz dCgmY3B1bWFwLCBpKSkKLSAgICAgICAgICAgICAgICBuKys7Ci0gICAgICAgIG1heWJlX3ByaW50 ZigiZnJlZV9jcHVzICAgICAgICAgICAgICA6ICVkXG4iLCBuKTsKLSAgICAgICAgZnJlZShjcHVt YXAubWFwKTsKLSAgICB9Ci0gICAgbGlieGxfcGh5c2luZm9fZGlzcG9zZSgmaW5mbyk7Ci0gICAg cmV0dXJuOwotfQotCi1zdGF0aWMgdm9pZCBvdXRwdXRfbnVtYWluZm8odm9pZCkKLXsKLSAgICBs aWJ4bF9udW1haW5mbyAqaW5mbzsKLSAgICBpbnQgaSwgaiwgbnI7Ci0KLSAgICBpbmZvID0gbGli eGxfZ2V0X251bWFpbmZvKGN0eCwgJm5yKTsKLSAgICBpZiAoaW5mbyA9PSBOVUxMKSB7Ci0gICAg ICAgIGZwcmludGYoc3RkZXJyLCAibGlieGxfZ2V0X251bWFpbmZvIGZhaWxlZC5cbiIpOwotICAg ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgcHJpbnRmKCJudW1hX2luZm8gICAgICAgICAgICAg IDpcbiIpOwotICAgIHByaW50Zigibm9kZTogICAgbWVtc2l6ZSAgICBtZW1mcmVlICAgIGRpc3Rh bmNlc1xuIik7Ci0KLSAgICBmb3IgKGkgPSAwOyBpIDwgbnI7IGkrKykgewotICAgICAgICBpZiAo aW5mb1tpXS5zaXplICE9IExJQlhMX05VTUFJTkZPX0lOVkFMSURfRU5UUlkpIHsKLSAgICAgICAg ICAgIHByaW50ZigiJTRkOiAgICAlNiJQUkl1NjQiICAgICAlNiJQUkl1NjQiICAgICAgJWQiLCBp LAotICAgICAgICAgICAgICAgICAgIGluZm9baV0uc2l6ZSA+PiAyMCwgaW5mb1tpXS5mcmVlID4+ IDIwLAotICAgICAgICAgICAgICAgICAgIGluZm9baV0uZGlzdHNbMF0pOwotICAgICAgICAgICAg Zm9yIChqID0gMTsgaiA8IGluZm9baV0ubnVtX2Rpc3RzOyBqKyspCi0gICAgICAgICAgICAgICAg cHJpbnRmKCIsJWQiLCBpbmZvW2ldLmRpc3RzW2pdKTsKLSAgICAgICAgICAgIHByaW50ZigiXG4i KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGxpYnhsX251bWFpbmZvX2xpc3RfZnJlZShpbmZv LCBucik7Ci0KLSAgICByZXR1cm47Ci19Ci0KLXN0YXRpYyB2b2lkIG91dHB1dF90b3BvbG9neWlu Zm8odm9pZCkKLXsKLSAgICBsaWJ4bF9jcHV0b3BvbG9neSAqY3B1aW5mbzsKLSAgICBpbnQgaSwg bnI7Ci0gICAgbGlieGxfcGNpdG9wb2xvZ3kgKnBjaWluZm87Ci0gICAgaW50IHZhbGlkX2RldnMg PSAwOwotCi0KLSAgICBjcHVpbmZvID0gbGlieGxfZ2V0X2NwdV90b3BvbG9neShjdHgsICZucik7 Ci0gICAgaWYgKGNwdWluZm8gPT0gTlVMTCkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImxp YnhsX2dldF9jcHVfdG9wb2xvZ3kgZmFpbGVkLlxuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9 Ci0KLSAgICBwcmludGYoImNwdV90b3BvbG9neSAgICAgICAgICAgOlxuIik7Ci0gICAgcHJpbnRm KCJjcHU6ICAgIGNvcmUgICAgc29ja2V0ICAgICBub2RlXG4iKTsKLQotICAgIGZvciAoaSA9IDA7 IGkgPCBucjsgaSsrKSB7Ci0gICAgICAgIGlmIChjcHVpbmZvW2ldLmNvcmUgIT0gTElCWExfQ1BV VE9QT0xPR1lfSU5WQUxJRF9FTlRSWSkKLSAgICAgICAgICAgIHByaW50ZigiJTNkOiAgICAlNGQg ICAgICU0ZCAgICAgJTRkXG4iLCBpLAotICAgICAgICAgICAgICAgICAgIGNwdWluZm9baV0uY29y ZSwgY3B1aW5mb1tpXS5zb2NrZXQsIGNwdWluZm9baV0ubm9kZSk7Ci0gICAgfQotCi0gICAgbGli eGxfY3B1dG9wb2xvZ3lfbGlzdF9mcmVlKGNwdWluZm8sIG5yKTsKLQotICAgIHBjaWluZm8gPSBs aWJ4bF9nZXRfcGNpX3RvcG9sb2d5KGN0eCwgJm5yKTsKLSAgICBpZiAocGNpaW5mbyA9PSBOVUxM KSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAibGlieGxfZ2V0X3BjaV90b3BvbG9neSBmYWls ZWQuXG4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHByaW50ZigiZGV2aWNlIHRv cG9sb2d5ICAgICAgICA6XG4iKTsKLSAgICBwcmludGYoImRldmljZSAgICAgICAgICAgbm9kZVxu Iik7Ci0gICAgZm9yIChpID0gMDsgaSA8IG5yOyBpKyspIHsKLSAgICAgICAgaWYgKHBjaWluZm9b aV0ubm9kZSAhPSBMSUJYTF9QQ0lUT1BPTE9HWV9JTlZBTElEX0VOVFJZKSB7Ci0gICAgICAgICAg ICBwcmludGYoIiUwNHg6JTAyeDolMDJ4LiUwMXggICAgICAlZFxuIiwgcGNpaW5mb1tpXS5zZWcs Ci0gICAgICAgICAgICAgICAgICAgcGNpaW5mb1tpXS5idXMsCi0gICAgICAgICAgICAgICAgICAg KChwY2lpbmZvW2ldLmRldmZuID4+IDMpICYgMHgxZiksIChwY2lpbmZvW2ldLmRldmZuICYgNyks Ci0gICAgICAgICAgICAgICAgICAgcGNpaW5mb1tpXS5ub2RlKTsKLSAgICAgICAgICAgIHZhbGlk X2RldnMrKzsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICh2YWxpZF9kZXZzID09IDApCi0g ICAgICAgIHByaW50ZigiTm8gZGV2aWNlIHRvcG9sb2d5IGRhdGEgYXZhaWxhYmxlXG4iKTsKLQot ICAgIGxpYnhsX3BjaXRvcG9sb2d5X2xpc3RfZnJlZShwY2lpbmZvLCBucik7Ci0KLSAgICByZXR1 cm47Ci19Ci0KLXN0YXRpYyB2b2lkIHByaW50X2luZm8oaW50IG51bWEpCi17Ci0gICAgb3V0cHV0 X25vZGVpbmZvKCk7Ci0KLSAgICBvdXRwdXRfcGh5c2luZm8oKTsKLQotICAgIGlmIChudW1hKSB7 Ci0gICAgICAgIG91dHB1dF90b3BvbG9neWluZm8oKTsKLSAgICAgICAgb3V0cHV0X251bWFpbmZv KCk7Ci0gICAgfQotICAgIG91dHB1dF94ZW5pbmZvKCk7Ci0KLSAgICBtYXliZV9wcmludGYoInhl bmRfY29uZmlnX2Zvcm1hdCAgICAgOiA0XG4iKTsKLQotICAgIHJldHVybjsKLX0KLQotaW50IG1h aW5faW5mbyhpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi17Ci0gICAgaW50IG9wdDsKLSAgICBzdGF0 aWMgc3RydWN0IG9wdGlvbiBvcHRzW10gPSB7Ci0gICAgICAgIHsibnVtYSIsIDAsIDAsICduJ30s Ci0gICAgICAgIENPTU1PTl9MT05HX09QVFMKLSAgICB9OwotICAgIGludCBudW1hID0gMDsKLQot ICAgIFNXSVRDSF9GT1JFQUNIX09QVChvcHQsICJuIiwgb3B0cywgImluZm8iLCAwKSB7Ci0gICAg Y2FzZSAnbic6Ci0gICAgICAgIG51bWEgPSAxOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAg ICAvKgotICAgICAqIElmIGFuIGV4dHJhIGFyZ3VtZW50IGlzIHByb3ZpZGVkLCBmaWx0ZXIgb3V0 IGEgc3BlY2lmaWMgcGllY2Ugb2YKLSAgICAgKiBpbmZvcm1hdGlvbi4KLSAgICAgKi8KLSAgICBp ZiAobnVtYSA9PSAwICYmIGFyZ2MgPiBvcHRpbmQpCi0gICAgICAgIGluZm9fbmFtZSA9IGFyZ3Zb b3B0aW5kXTsKLQotICAgIHByaW50X2luZm8obnVtYSk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWlu dCBtYWluX2RvbWlkKGludCBhcmdjLCBjaGFyICoqYXJndikKLXsKLSAgICB1aW50MzJfdCBkb21p ZDsKLSAgICBpbnQgb3B0OwotICAgIGNvbnN0IGNoYXIgKmRvbW5hbWUgPSBOVUxMOwotCi0gICAg U1dJVENIX0ZPUkVBQ0hfT1BUKG9wdCwgIiIsIE5VTEwsICJkb21pZCIsIDEpIHsKLSAgICAgICAg LyogTm8gb3B0aW9ucyAqLwotICAgIH0KLQotICAgIGRvbW5hbWUgPSBhcmd2W29wdGluZF07Ci0K LSAgICBpZiAobGlieGxfbmFtZV90b19kb21pZChjdHgsIGRvbW5hbWUsICZkb21pZCkpIHsKLSAg ICAgICAgZnByaW50ZihzdGRlcnIsICJDYW4ndCBnZXQgZG9taWQgb2YgZG9tYWluIG5hbWUgJyVz JywgbWF5YmUgdGhpcyBkb21haW4gZG9lcyBub3QgZXhpc3QuXG4iLCBkb21uYW1lKTsKLSAgICAg ICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKLSAgICB9Ci0KLSAgICBwcmludGYoIiV1XG4iLCBkb21p ZCk7Ci0KLSAgICByZXR1cm4gRVhJVF9TVUNDRVNTOwotfQotCi1pbnQgbWFpbl9kb21uYW1lKGlu dCBhcmdjLCBjaGFyICoqYXJndikKLXsKLSAgICB1aW50MzJfdCBkb21pZDsKLSAgICBpbnQgb3B0 OwotICAgIGNoYXIgKmRvbW5hbWUgPSBOVUxMOwotICAgIGNoYXIgKmVuZHB0ciA9IE5VTEw7Ci0K LSAgICBTV0lUQ0hfRk9SRUFDSF9PUFQob3B0LCAiIiwgTlVMTCwgImRvbW5hbWUiLCAxKSB7Ci0g ICAgICAgIC8qIE5vIG9wdGlvbnMgKi8KLSAgICB9Ci0KLSAgICBkb21pZCA9IHN0cnRvbChhcmd2 W29wdGluZF0sICZlbmRwdHIsIDEwKTsKLSAgICBpZiAoZG9taWQgPT0gMCAmJiAhc3RyY21wKGVu ZHB0ciwgYXJndltvcHRpbmRdKSkgewotICAgICAgICAvKm5vIGRpZ2l0cyBhdCBhbGwqLwotICAg ICAgICBmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgZG9tYWluIGlkLlxuXG4iKTsKLSAgICAgICAg cmV0dXJuIEVYSVRfRkFJTFVSRTsKLSAgICB9Ci0KLSAgICBkb21uYW1lID0gbGlieGxfZG9taWRf dG9fbmFtZShjdHgsIGRvbWlkKTsKLSAgICBpZiAoIWRvbW5hbWUpIHsKLSAgICAgICAgZnByaW50 ZihzdGRlcnIsICJDYW4ndCBnZXQgZG9tYWluIG5hbWUgb2YgZG9tYWluIGlkICcldScsIG1heWJl IHRoaXMgZG9tYWluIGRvZXMgbm90IGV4aXN0LlxuIiwgZG9taWQpOwotICAgICAgICByZXR1cm4g RVhJVF9GQUlMVVJFOwotICAgIH0KLQotICAgIHByaW50ZigiJXNcbiIsIGRvbW5hbWUpOwotICAg IGZyZWUoZG9tbmFtZSk7Ci0KLSAgICByZXR1cm4gRVhJVF9TVUNDRVNTOwotfQotCiBpbnQgbWFp bl9yZW5hbWUoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogewogICAgIHVpbnQzMl90IGRvbWlkOwpA QCAtMzE0MCw0MyArMjUxNCw2IEBAIGludCBtYWluX2RlYnVnX2tleXMoaW50IGFyZ2MsIGNoYXIg Kiphcmd2KQogICAgIHJldHVybiBFWElUX1NVQ0NFU1M7CiB9CiAKLWludCBtYWluX2RtZXNnKGlu dCBhcmdjLCBjaGFyICoqYXJndikKLXsKLSAgICB1bnNpZ25lZCBpbnQgY2xlYXIgPSAwOwotICAg IGxpYnhsX3hlbl9jb25zb2xlX3JlYWRlciAqY3I7Ci0gICAgY2hhciAqbGluZTsKLSAgICBpbnQg b3B0LCByZXQgPSAxOwotCi0gICAgU1dJVENIX0ZPUkVBQ0hfT1BUKG9wdCwgImMiLCBOVUxMLCAi ZG1lc2ciLCAwKSB7Ci0gICAgY2FzZSAnYyc6Ci0gICAgICAgIGNsZWFyID0gMTsKLSAgICAgICAg YnJlYWs7Ci0gICAgfQotCi0gICAgY3IgPSBsaWJ4bF94ZW5fY29uc29sZV9yZWFkX3N0YXJ0KGN0 eCwgY2xlYXIpOwotICAgIGlmICghY3IpCi0gICAgICAgIGdvdG8gZmluaXNoOwotCi0gICAgd2hp bGUgKChyZXQgPSBsaWJ4bF94ZW5fY29uc29sZV9yZWFkX2xpbmUoY3R4LCBjciwgJmxpbmUpKSA+ IDApCi0gICAgICAgIHByaW50ZigiJXMiLCBsaW5lKTsKLQotZmluaXNoOgotICAgIGlmIChjcikK LSAgICAgICAgbGlieGxfeGVuX2NvbnNvbGVfcmVhZF9maW5pc2goY3R4LCBjcik7Ci0gICAgcmV0 dXJuIHJldCA/IEVYSVRfRkFJTFVSRSA6IEVYSVRfU1VDQ0VTUzsKLX0KLQotaW50IG1haW5fdG9w KGludCBhcmdjLCBjaGFyICoqYXJndikKLXsKLSAgICBpbnQgb3B0OwotCi0gICAgU1dJVENIX0ZP UkVBQ0hfT1BUKG9wdCwgIiIsIE5VTEwsICJ0b3AiLCAwKSB7Ci0gICAgICAgIC8qIE5vIG9wdGlv bnMgKi8KLSAgICB9Ci0KLSAgICByZXR1cm4gc3lzdGVtKCJ4ZW50b3AiKTsKLX0KLQogaW50IG1h aW5fY2hhbm5lbGxpc3QoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogewogICAgIGludCBvcHQ7CkBA IC0zMjIxLDIyMCArMjU1OCw2IEBAIGludCBtYWluX2NoYW5uZWxsaXN0KGludCBhcmdjLCBjaGFy ICoqYXJndikKICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIGNoYXIgKnVwdGltZV90b19zdHJp bmcodW5zaWduZWQgbG9uZyB1cHRpbWUsIGludCBzaG9ydF9tb2RlKQotewotICAgIGludCBzZWMs IG1pbiwgaG91ciwgZGF5OwotICAgIGNoYXIgKnRpbWVfc3RyaW5nOwotCi0gICAgZGF5ID0gKGlu dCkodXB0aW1lIC8gODY0MDApOwotICAgIHVwdGltZSAtPSAoZGF5ICogODY0MDApOwotICAgIGhv dXIgPSAoaW50KSh1cHRpbWUgLyAzNjAwKTsKLSAgICB1cHRpbWUgLT0gKGhvdXIgKiAzNjAwKTsK LSAgICBtaW4gPSAoaW50KSh1cHRpbWUgLyA2MCk7Ci0gICAgdXB0aW1lIC09IChtaW4gKiA2MCk7 Ci0gICAgc2VjID0gdXB0aW1lOwotCi0gICAgaWYgKHNob3J0X21vZGUpCi0gICAgICAgIGlmIChk YXkgPiAxKQotICAgICAgICAgICAgeGFzcHJpbnRmKCZ0aW1lX3N0cmluZywgIiVkIGRheXMsICUy ZDolMDJkIiwgZGF5LCBob3VyLCBtaW4pOwotICAgICAgICBlbHNlIGlmIChkYXkgPT0gMSkKLSAg ICAgICAgICAgIHhhc3ByaW50ZigmdGltZV9zdHJpbmcsICIlZCBkYXksICUyZDolMDJkIiwgZGF5 LCBob3VyLCBtaW4pOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB4YXNwcmludGYoJnRpbWVf c3RyaW5nLCAiJTJkOiUwMmQiLCBob3VyLCBtaW4pOwotICAgIGVsc2UKLSAgICAgICAgaWYgKGRh eSA+IDEpCi0gICAgICAgICAgICB4YXNwcmludGYoJnRpbWVfc3RyaW5nLCAiJWQgZGF5cywgJTJk OiUwMmQ6JTAyZCIsIGRheSwgaG91ciwgbWluLCBzZWMpOwotICAgICAgICBlbHNlIGlmIChkYXkg PT0gMSkKLSAgICAgICAgICAgIHhhc3ByaW50ZigmdGltZV9zdHJpbmcsICIlZCBkYXksICUyZDol MDJkOiUwMmQiLCBkYXksIGhvdXIsIG1pbiwgc2VjKTsKLSAgICAgICAgZWxzZQotICAgICAgICAg ICAgeGFzcHJpbnRmKCZ0aW1lX3N0cmluZywgIiUyZDolMDJkOiUwMmQiLCBob3VyLCBtaW4sIHNl Yyk7Ci0KLSAgICByZXR1cm4gdGltZV9zdHJpbmc7Ci19Ci0KLWludCBtYWluX2NsYWltcyhpbnQg YXJnYywgY2hhciAqKmFyZ3YpCi17Ci0gICAgbGlieGxfZG9taW5mbyAqaW5mbzsKLSAgICBpbnQg b3B0OwotICAgIGludCBuYl9kb21haW47Ci0KLSAgICBTV0lUQ0hfRk9SRUFDSF9PUFQob3B0LCAi IiwgTlVMTCwgImNsYWltcyIsIDApIHsKLSAgICAgICAgLyogTm8gb3B0aW9ucyAqLwotICAgIH0K LQotICAgIGlmICghY2xhaW1fbW9kZSkKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJjbGFpbV9t b2RlIG5vdCBlbmFibGVkIChzZWUgbWFuIHhsLmNvbmYpLlxuIik7Ci0KLSAgICBpbmZvID0gbGli eGxfbGlzdF9kb21haW4oY3R4LCAmbmJfZG9tYWluKTsKLSAgICBpZiAoIWluZm8pIHsKLSAgICAg ICAgZnByaW50ZihzdGRlcnIsICJsaWJ4bF9saXN0X2RvbWFpbiBmYWlsZWQuXG4iKTsKLSAgICAg ICAgcmV0dXJuIDE7Ci0gICAgfQotCi0gICAgbGlzdF9kb21haW5zKGZhbHNlIC8qIHZlcmJvc2Ug Ki8sIGZhbHNlIC8qIGNvbnRleHQgKi8sIHRydWUgLyogY2xhaW0gKi8sCi0gICAgICAgICAgICAg ICAgIGZhbHNlIC8qIG51bWEgKi8sIGZhbHNlIC8qIGNwdXBvb2wgKi8sIGluZm8sIG5iX2RvbWFp bik7Ci0KLSAgICBsaWJ4bF9kb21pbmZvX2xpc3RfZnJlZShpbmZvLCBuYl9kb21haW4pOwotICAg IHJldHVybiAwOwotfQotCi1zdGF0aWMgY2hhciAqY3VycmVudF90aW1lX3RvX3N0cmluZyh0aW1l X3Qgbm93KQotewotICAgIGNoYXIgbm93X3N0clsxMDBdOwotICAgIHN0cnVjdCB0bSAqdG1wOwot Ci0gICAgdG1wID0gbG9jYWx0aW1lKCZub3cpOwotICAgIGlmICh0bXAgPT0gTlVMTCkgewotICAg ICAgICBmcHJpbnRmKHN0ZGVyciwgIkdldCBsb2NhbHRpbWUgZXJyb3IiKTsKLSAgICAgICAgZXhp dCgtMSk7Ci0gICAgfQotICAgIGlmIChzdHJmdGltZShub3dfc3RyLCBzaXplb2Yobm93X3N0ciks ICIlSDolTTolUyIsIHRtcCkgPT0gMCkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInN0cmZ0 aW1lIHJldHVybmVkIDAiKTsKLSAgICAgICAgZXhpdCgtMSk7Ci0gICAgfQotICAgIHJldHVybiBz dHJkdXAobm93X3N0cik7Ci19Ci0KLXN0YXRpYyB2b2lkIHByaW50X2RvbTBfdXB0aW1lKGludCBz aG9ydF9tb2RlLCB0aW1lX3Qgbm93KQotewotICAgIGludCBmZDsKLSAgICBzc2l6ZV90IG5yOwot ICAgIGNoYXIgYnVmWzUxMl07Ci0gICAgdWludDMyX3QgdXB0aW1lID0gMDsKLSAgICBjaGFyICp1 cHRpbWVfc3RyID0gTlVMTDsKLSAgICBjaGFyICpub3dfc3RyID0gTlVMTDsKLSAgICBjaGFyICpk b21uYW1lOwotCi0gICAgZmQgPSBvcGVuKCIvcHJvYy91cHRpbWUiLCBPX1JET05MWSk7Ci0gICAg aWYgKGZkID09IC0xKQotICAgICAgICBnb3RvIGVycjsKLQotICAgIG5yID0gcmVhZChmZCwgYnVm LCBzaXplb2YoYnVmKSAtIDEpOwotICAgIGlmIChuciA9PSAtMSkgewotICAgICAgICBjbG9zZShm ZCk7Ci0gICAgICAgIGdvdG8gZXJyOwotICAgIH0KLSAgICBjbG9zZShmZCk7Ci0KLSAgICBidWZb bnJdID0gJ1wwJzsKLQotICAgIHN0cnRvayhidWYsICIgIik7Ci0gICAgdXB0aW1lID0gc3RydG91 bChidWYsIE5VTEwsIDEwKTsKLQotICAgIGRvbW5hbWUgPSBsaWJ4bF9kb21pZF90b19uYW1lKGN0 eCwgMCk7Ci0gICAgaWYgKHNob3J0X21vZGUpCi0gICAgewotICAgICAgICBub3dfc3RyID0gY3Vy cmVudF90aW1lX3RvX3N0cmluZyhub3cpOwotICAgICAgICB1cHRpbWVfc3RyID0gdXB0aW1lX3Rv X3N0cmluZyh1cHRpbWUsIDEpOwotICAgICAgICBwcmludGYoIiAlcyB1cCAlcywgJXMgKCVkKVxu Iiwgbm93X3N0ciwgdXB0aW1lX3N0ciwKLSAgICAgICAgICAgICAgIGRvbW5hbWUsIDApOwotICAg IH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBub3dfc3RyID0gTlVMTDsKLSAgICAgICAgdXB0 aW1lX3N0ciA9IHVwdGltZV90b19zdHJpbmcodXB0aW1lLCAwKTsKLSAgICAgICAgcHJpbnRmKCIl LTMzcyAlNGQgJXNcbiIsIGRvbW5hbWUsCi0gICAgICAgICAgICAgICAwLCB1cHRpbWVfc3RyKTsK LSAgICB9Ci0KLSAgICBmcmVlKG5vd19zdHIpOwotICAgIGZyZWUodXB0aW1lX3N0cik7Ci0gICAg ZnJlZShkb21uYW1lKTsKLSAgICByZXR1cm47Ci1lcnI6Ci0gICAgZnByaW50ZihzdGRlcnIsICJD YW4gbm90IGdldCBEb20wIHVwdGltZS5cbiIpOwotICAgIGV4aXQoLTEpOwotfQotCi1zdGF0aWMg dm9pZCBwcmludF9kb21VX3VwdGltZSh1aW50MzJfdCBkb211aWQsIGludCBzaG9ydF9tb2RlLCB0 aW1lX3Qgbm93KQotewotICAgIHVpbnQzMl90IHNfdGltZSA9IDA7Ci0gICAgdWludDMyX3QgdXB0 aW1lID0gMDsKLSAgICBjaGFyICp1cHRpbWVfc3RyID0gTlVMTDsKLSAgICBjaGFyICpub3dfc3Ry ID0gTlVMTDsKLSAgICBjaGFyICpkb21uYW1lOwotCi0gICAgc190aW1lID0gbGlieGxfdm1fZ2V0 X3N0YXJ0X3RpbWUoY3R4LCBkb211aWQpOwotICAgIGlmIChzX3RpbWUgPT0gLTEpCi0gICAgICAg IHJldHVybjsKLSAgICB1cHRpbWUgPSBub3cgLSBzX3RpbWU7Ci0gICAgZG9tbmFtZSA9IGxpYnhs X2RvbWlkX3RvX25hbWUoY3R4LCBkb211aWQpOwotICAgIGlmIChzaG9ydF9tb2RlKQotICAgIHsK LSAgICAgICAgbm93X3N0ciA9IGN1cnJlbnRfdGltZV90b19zdHJpbmcobm93KTsKLSAgICAgICAg dXB0aW1lX3N0ciA9IHVwdGltZV90b19zdHJpbmcodXB0aW1lLCAxKTsKLSAgICAgICAgcHJpbnRm KCIgJXMgdXAgJXMsICVzICglZClcbiIsIG5vd19zdHIsIHVwdGltZV9zdHIsCi0gICAgICAgICAg ICAgICBkb21uYW1lLCBkb211aWQpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBu b3dfc3RyID0gTlVMTDsKLSAgICAgICAgdXB0aW1lX3N0ciA9IHVwdGltZV90b19zdHJpbmcodXB0 aW1lLCAwKTsKLSAgICAgICAgcHJpbnRmKCIlLTMzcyAlNGQgJXNcbiIsIGRvbW5hbWUsCi0gICAg ICAgICAgICAgICBkb211aWQsIHVwdGltZV9zdHIpOwotICAgIH0KLQotICAgIGZyZWUoZG9tbmFt ZSk7Ci0gICAgZnJlZShub3dfc3RyKTsKLSAgICBmcmVlKHVwdGltZV9zdHIpOwotICAgIHJldHVy bjsKLX0KLQotc3RhdGljIHZvaWQgcHJpbnRfdXB0aW1lKGludCBzaG9ydF9tb2RlLCB1aW50MzJf dCBkb21zW10sIGludCBuYl9kb21zKQotewotICAgIGxpYnhsX3ZtaW5mbyAqaW5mbzsKLSAgICB0 aW1lX3Qgbm93OwotICAgIGludCBuYl92bSwgaTsKLQotICAgIG5vdyA9IHRpbWUoTlVMTCk7Ci0K LSAgICBpZiAoIXNob3J0X21vZGUpCi0gICAgICAgIHByaW50ZigiJS0zM3MgJTRzICVzXG4iLCAi TmFtZSIsICJJRCIsICJVcHRpbWUiKTsKLQotICAgIGlmIChuYl9kb21zID09IDApIHsKLSAgICAg ICAgcHJpbnRfZG9tMF91cHRpbWUoc2hvcnRfbW9kZSwgbm93KTsKLSAgICAgICAgaW5mbyA9IGxp YnhsX2xpc3Rfdm0oY3R4LCAmbmJfdm0pOwotICAgICAgICBpZiAoaW5mbyA9PSBOVUxMKSB7Ci0g ICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkIG5vdCBsaXN0IHZtcy5cbiIpOwotICAg ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBuYl92 bTsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAoaW5mb1tpXS5kb21pZCA9PSAwKSBjb250aW51ZTsK LSAgICAgICAgICAgIHByaW50X2RvbVVfdXB0aW1lKGluZm9baV0uZG9taWQsIHNob3J0X21vZGUs IG5vdyk7Ci0gICAgICAgIH0KLSAgICAgICAgbGlieGxfdm1pbmZvX2xpc3RfZnJlZShpbmZvLCBu Yl92bSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IG5iX2RvbXM7IGkr KykgewotICAgICAgICAgICAgaWYgKGRvbXNbaV0gPT0gMCkKLSAgICAgICAgICAgICAgICBwcmlu dF9kb20wX3VwdGltZShzaG9ydF9tb2RlLCBub3cpOwotICAgICAgICAgICAgZWxzZQotICAgICAg ICAgICAgICAgIHByaW50X2RvbVVfdXB0aW1lKGRvbXNbaV0sIHNob3J0X21vZGUsIG5vdyk7Ci0g ICAgICAgIH0KLSAgICB9Ci19Ci0KLWludCBtYWluX3VwdGltZShpbnQgYXJnYywgY2hhciAqKmFy Z3YpCi17Ci0gICAgY29uc3QgY2hhciAqZG9tOwotICAgIGludCBzaG9ydF9tb2RlID0gMDsKLSAg ICB1aW50MzJfdCBkb21haW5zWzEwMF07Ci0gICAgaW50IG5iX2RvbXMgPSAwOwotICAgIGludCBv cHQ7Ci0KLSAgICBTV0lUQ0hfRk9SRUFDSF9PUFQob3B0LCAicyIsIE5VTEwsICJ1cHRpbWUiLCAw KSB7Ci0gICAgY2FzZSAncyc6Ci0gICAgICAgIHNob3J0X21vZGUgPSAxOwotICAgICAgICBicmVh azsKLSAgICB9Ci0KLSAgICBmb3IgKDsoZG9tID0gYXJndltvcHRpbmRdKSAhPSBOVUxMOyBuYl9k b21zKyssb3B0aW5kKyspCi0gICAgICAgIGRvbWFpbnNbbmJfZG9tc10gPSB4ZmluZF9kb21haW4o ZG9tKTsKLQotICAgIHByaW50X3VwdGltZShzaG9ydF9tb2RlLCBkb21haW5zLCBuYl9kb21zKTsK LQotICAgIHJldHVybiAwOwotfQotCiAjaWZuZGVmIExJQlhMX0hBVkVfTk9fU1VTUEVORF9SRVNV TUUKIGludCBtYWluX3JlbXVzKGludCBhcmdjLCBjaGFyICoqYXJndikKIHsKZGlmZiAtLWdpdCBh L3Rvb2xzL3hsL3hsX2luZm8uYyBiL3Rvb2xzL3hsL3hsX2luZm8uYwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwLi5lNWQ1YTQxZTQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdG9v bHMveGwveGxfaW5mby5jCkBAIC0wLDAgKzEsOTI1IEBACisvKgorICogQ29weXJpZ2h0IDIwMDkt MjAxNyBDaXRyaXggTHRkIGFuZCBvdGhlciBjb250cmlidXRvcnMKKyAqCisgKiBUaGlzIHByb2dy YW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlm eQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgYXMgcHVibGlzaGVkCisgKiBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u OyB2ZXJzaW9uIDIuMSBvbmx5LiB3aXRoIHRoZSBzcGVjaWFsCisgKiBleGNlcHRpb24gb24gbGlu a2luZyBkZXNjcmliZWQgaW4gZmlsZSBMSUNFTlNFLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBk aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g IFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk ZXRhaWxzLgorICovCisKKyNkZWZpbmUgX0dOVV9TT1VSQ0UKKworI2luY2x1ZGUgPGZjbnRsLmg+ CisjaW5jbHVkZSA8aW50dHlwZXMuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxz eXMvc3RhdC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy91dHNuYW1l Lmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjaW5jbHVkZSA8 bGlieGwuaD4KKyNpbmNsdWRlIDxsaWJ4bF9qc29uLmg+CisjaW5jbHVkZSA8bGlieGxfdXRpbHMu aD4KKyNpbmNsdWRlIDxsaWJ4bHV0aWwuaD4KKworI2luY2x1ZGUgInhsLmgiCisjaW5jbHVkZSAi eGxfdXRpbHMuaCIKKworLyogUG9zc2libHkgc2VsZWN0IGEgc3BlY2lmaWMgcGllY2Ugb2YgYHhs IGluZm9gIHRvIHByaW50LiAqLworc3RhdGljIGNvbnN0IGNoYXIgKmluZm9fbmFtZTsKK3N0YXRp YyBpbnQgbWF5YmVfcHJpbnRmKGNvbnN0IGNoYXIgKmZtdCwgLi4uKSBfX2F0dHJpYnV0ZV9fKChm b3JtYXQocHJpbnRmLDEsMikpKTsKK3N0YXRpYyBpbnQgbWF5YmVfcHJpbnRmKGNvbnN0IGNoYXIg KmZtdCwgLi4uKQoreworICAgIHZhX2xpc3QgYXA7CisgICAgY2hhciAqc3RyOworICAgIGludCBj b3VudCA9IDA7CisKKyAgICB2YV9zdGFydChhcCwgZm10KTsKKyAgICBpZiAodmFzcHJpbnRmKCZz dHIsIGZtdCwgYXApICE9IC0xKSB7CisgICAgICAgIGlmIChpbmZvX25hbWUpIHsKKyAgICAgICAg ICAgIGNoYXIgKnM7CisKKyAgICAgICAgICAgIGlmICghc3RybmNtcChzdHIsIGluZm9fbmFtZSwg c3RybGVuKGluZm9fbmFtZSkpICYmCisgICAgICAgICAgICAgICAgKHMgPSBzdHJjaHIoc3RyLCAn OicpKSAmJiBzWzFdID09ICcgJykKKyAgICAgICAgICAgICAgICBjb3VudCA9IGZwdXRzKCZzWzJd LCBzdGRvdXQpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGNvdW50ID0gZnB1dHMoc3Ry LCBzdGRvdXQpOworCisgICAgICAgIGZyZWUoc3RyKTsKKyAgICB9CisgICAgdmFfZW5kKGFwKTsK KworICAgIHJldHVybiBjb3VudDsKK30KKworc3RhdGljIHlhamxfZ2VuX3N0YXR1cyBwcmludGZf aW5mb19vbmVfanNvbih5YWpsX2dlbiBoYW5kLCBpbnQgZG9taWQsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RvbWFpbl9jb25maWcgKmRfY29uZmln KQoreworICAgIHlhamxfZ2VuX3N0YXR1cyBzOworCisgICAgcyA9IHlhamxfZ2VuX21hcF9vcGVu KGhhbmQpOworICAgIGlmIChzICE9IHlhamxfZ2VuX3N0YXR1c19vaykKKyAgICAgICAgZ290byBv dXQ7CisKKyAgICBzID0geWFqbF9nZW5fc3RyaW5nKGhhbmQsIChjb25zdCB1bnNpZ25lZCBjaGFy ICopImRvbWlkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZigiZG9taWQiKS0xKTsK KyAgICBpZiAocyAhPSB5YWpsX2dlbl9zdGF0dXNfb2spCisgICAgICAgIGdvdG8gb3V0OworICAg IGlmIChkb21pZCAhPSAtMSkKKyAgICAgICAgcyA9IHlhamxfZ2VuX2ludGVnZXIoaGFuZCwgZG9t aWQpOworICAgIGVsc2UKKyAgICAgICAgcyA9IHlhamxfZ2VuX251bGwoaGFuZCk7CisgICAgaWYg KHMgIT0geWFqbF9nZW5fc3RhdHVzX29rKQorICAgICAgICBnb3RvIG91dDsKKworICAgIHMgPSB5 YWpsX2dlbl9zdHJpbmcoaGFuZCwgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikiY29uZmlnIiwKKyAg ICAgICAgICAgICAgICAgICAgICAgIHNpemVvZigiY29uZmlnIiktMSk7CisgICAgaWYgKHMgIT0g eWFqbF9nZW5fc3RhdHVzX29rKQorICAgICAgICBnb3RvIG91dDsKKyAgICBzID0gbGlieGxfZG9t YWluX2NvbmZpZ19nZW5fanNvbihoYW5kLCBkX2NvbmZpZyk7CisgICAgaWYgKHMgIT0geWFqbF9n ZW5fc3RhdHVzX29rKQorICAgICAgICBnb3RvIG91dDsKKworICAgIHMgPSB5YWpsX2dlbl9tYXBf Y2xvc2UoaGFuZCk7CisgICAgaWYgKHMgIT0geWFqbF9nZW5fc3RhdHVzX29rKQorICAgICAgICBn b3RvIG91dDsKKworb3V0OgorICAgIHJldHVybiBzOworfQorCit2b2lkIHByaW50Zl9pbmZvKGVu dW0gb3V0cHV0X2Zvcm1hdCBvdXRwdXRfZm9ybWF0LAorICAgICAgICAgICAgICAgICBpbnQgZG9t aWQsCisgICAgICAgICAgICAgICAgIGxpYnhsX2RvbWFpbl9jb25maWcgKmRfY29uZmlnLCBGSUxF ICpmaCk7Cit2b2lkIHByaW50Zl9pbmZvKGVudW0gb3V0cHV0X2Zvcm1hdCBvdXRwdXRfZm9ybWF0 LAorICAgICAgICAgICAgICAgICBpbnQgZG9taWQsCisgICAgICAgICAgICAgICAgIGxpYnhsX2Rv bWFpbl9jb25maWcgKmRfY29uZmlnLCBGSUxFICpmaCkKK3sKKyAgICBpZiAob3V0cHV0X2Zvcm1h dCA9PSBPVVRQVVRfRk9STUFUX1NYUCkKKyAgICAgICAgcmV0dXJuIHByaW50Zl9pbmZvX3NleHAo ZG9taWQsIGRfY29uZmlnLCBmaCk7CisKKyAgICBjb25zdCBjaGFyICpidWY7CisgICAgbGlieGxf eWFqbF9sZW5ndGggbGVuID0gMDsKKyAgICB5YWpsX2dlbl9zdGF0dXMgczsKKyAgICB5YWpsX2dl biBoYW5kOworCisgICAgaGFuZCA9IGxpYnhsX3lhamxfZ2VuX2FsbG9jKE5VTEwpOworICAgIGlm ICghaGFuZCkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInVuYWJsZSB0byBhbGxvY2F0ZSBK U09OIGdlbmVyYXRvclxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzID0gcHJp bnRmX2luZm9fb25lX2pzb24oaGFuZCwgZG9taWQsIGRfY29uZmlnKTsKKyAgICBpZiAocyAhPSB5 YWpsX2dlbl9zdGF0dXNfb2spCisgICAgICAgIGdvdG8gb3V0OworCisgICAgcyA9IHlhamxfZ2Vu X2dldF9idWYoaGFuZCwgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKiopJmJ1ZiwgJmxlbik7CisgICAg aWYgKHMgIT0geWFqbF9nZW5fc3RhdHVzX29rKQorICAgICAgICBnb3RvIG91dDsKKworICAgIGZw dXRzKGJ1ZiwgZmgpOworCitvdXQ6CisgICAgeWFqbF9nZW5fZnJlZShoYW5kKTsKKworICAgIGlm IChzICE9IHlhamxfZ2VuX3N0YXR1c19vaykKKyAgICAgICAgZnByaW50ZihzdGRlcnIsCisgICAg ICAgICAgICAgICAgInVuYWJsZSB0byBmb3JtYXQgZG9tYWluIGNvbmZpZyBhcyBKU09OIChZQUpM OiVkKVxuIiwgcyk7CisKKyAgICB4Zmx1c2hfc3RyZWFtKGZoKTsKK30KKworc3RhdGljIHZvaWQg b3V0cHV0X3hlbmluZm8odm9pZCkKK3sKKyAgICBjb25zdCBsaWJ4bF92ZXJzaW9uX2luZm8gKmlu Zm87CisgICAgbGlieGxfc2NoZWR1bGVyIHNjaGVkOworICAgIGludCByYzsKKworICAgIGlmICgh KGluZm8gPSBsaWJ4bF9nZXRfdmVyc2lvbl9pbmZvKGN0eCkpKSB7CisgICAgICAgIGZwcmludGYo c3RkZXJyLCAibGlieGxfZ2V0X3ZlcnNpb25faW5mbyBmYWlsZWQuXG4iKTsKKyAgICAgICAgcmV0 dXJuOworICAgIH0KKworICAgIHJjID0gbGlieGxfZ2V0X3NjaGVkdWxlcihjdHgpOworICAgIGlm IChyYyA8IDApIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJnZXRfc2NoZWR1bGVyIHN5c2N0 bCBmYWlsZWQuXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBzY2hlZCA9IHJjOwor CisgICAgbWF5YmVfcHJpbnRmKCJ4ZW5fbWFqb3IgICAgICAgICAgICAgIDogJWRcbiIsIGluZm8t Pnhlbl92ZXJzaW9uX21ham9yKTsKKyAgICBtYXliZV9wcmludGYoInhlbl9taW5vciAgICAgICAg ICAgICAgOiAlZFxuIiwgaW5mby0+eGVuX3ZlcnNpb25fbWlub3IpOworICAgIG1heWJlX3ByaW50 ZigieGVuX2V4dHJhICAgICAgICAgICAgICA6ICVzXG4iLCBpbmZvLT54ZW5fdmVyc2lvbl9leHRy YSk7CisgICAgbWF5YmVfcHJpbnRmKCJ4ZW5fdmVyc2lvbiAgICAgICAgICAgIDogJWQuJWQlc1xu IiwgaW5mby0+eGVuX3ZlcnNpb25fbWFqb3IsCisgICAgICAgICAgIGluZm8tPnhlbl92ZXJzaW9u X21pbm9yLCBpbmZvLT54ZW5fdmVyc2lvbl9leHRyYSk7CisgICAgbWF5YmVfcHJpbnRmKCJ4ZW5f Y2FwcyAgICAgICAgICAgICAgIDogJXNcbiIsIGluZm8tPmNhcGFiaWxpdGllcyk7CisgICAgbWF5 YmVfcHJpbnRmKCJ4ZW5fc2NoZWR1bGVyICAgICAgICAgIDogJXNcbiIsIGxpYnhsX3NjaGVkdWxl cl90b19zdHJpbmcoc2NoZWQpKTsKKyAgICBtYXliZV9wcmludGYoInhlbl9wYWdlc2l6ZSAgICAg ICAgICAgOiAldVxuIiwgaW5mby0+cGFnZXNpemUpOworICAgIG1heWJlX3ByaW50ZigicGxhdGZv cm1fcGFyYW1zICAgICAgICA6IHZpcnRfc3RhcnQ9MHglIlBSSXg2NCJcbiIsIGluZm8tPnZpcnRf c3RhcnQpOworICAgIG1heWJlX3ByaW50ZigieGVuX2NoYW5nZXNldCAgICAgICAgICA6ICVzXG4i LCBpbmZvLT5jaGFuZ2VzZXQpOworICAgIG1heWJlX3ByaW50ZigieGVuX2NvbW1hbmRsaW5lICAg ICAgICA6ICVzXG4iLCBpbmZvLT5jb21tYW5kbGluZSk7CisgICAgbWF5YmVfcHJpbnRmKCJjY19j b21waWxlciAgICAgICAgICAgIDogJXNcbiIsIGluZm8tPmNvbXBpbGVyKTsKKyAgICBtYXliZV9w cmludGYoImNjX2NvbXBpbGVfYnkgICAgICAgICAgOiAlc1xuIiwgaW5mby0+Y29tcGlsZV9ieSk7 CisgICAgbWF5YmVfcHJpbnRmKCJjY19jb21waWxlX2RvbWFpbiAgICAgIDogJXNcbiIsIGluZm8t PmNvbXBpbGVfZG9tYWluKTsKKyAgICBtYXliZV9wcmludGYoImNjX2NvbXBpbGVfZGF0ZSAgICAg ICAgOiAlc1xuIiwgaW5mby0+Y29tcGlsZV9kYXRlKTsKKyAgICBtYXliZV9wcmludGYoImJ1aWxk X2lkICAgICAgICAgICAgICAgOiAlc1xuIiwgaW5mby0+YnVpbGRfaWQpOworCisgICAgcmV0dXJu OworfQorCitzdGF0aWMgdm9pZCBvdXRwdXRfbm9kZWluZm8odm9pZCkKK3sKKyAgICBzdHJ1Y3Qg dXRzbmFtZSB1dHNidWY7CisKKyAgICBpZiAodW5hbWUoJnV0c2J1ZikgPCAwKQorICAgICAgICBy ZXR1cm47CisKKyAgICBtYXliZV9wcmludGYoImhvc3QgICAgICAgICAgICAgICAgICAgOiAlc1xu IiwgdXRzYnVmLm5vZGVuYW1lKTsKKyAgICBtYXliZV9wcmludGYoInJlbGVhc2UgICAgICAgICAg ICAgICAgOiAlc1xuIiwgdXRzYnVmLnJlbGVhc2UpOworICAgIG1heWJlX3ByaW50ZigidmVyc2lv biAgICAgICAgICAgICAgICA6ICVzXG4iLCB1dHNidWYudmVyc2lvbik7CisgICAgbWF5YmVfcHJp bnRmKCJtYWNoaW5lICAgICAgICAgICAgICAgIDogJXNcbiIsIHV0c2J1Zi5tYWNoaW5lKTsKK30K Kworc3RhdGljIHZvaWQgb3V0cHV0X3BoeXNpbmZvKHZvaWQpCit7CisgICAgbGlieGxfcGh5c2lu Zm8gaW5mbzsKKyAgICBjb25zdCBsaWJ4bF92ZXJzaW9uX2luZm8gKnZpbmZvOworICAgIHVuc2ln bmVkIGludCBpOworICAgIGxpYnhsX2JpdG1hcCBjcHVtYXA7CisgICAgaW50IG4gPSAwOworCisg ICAgaWYgKGxpYnhsX2dldF9waHlzaW5mbyhjdHgsICZpbmZvKSAhPSAwKSB7CisgICAgICAgIGZw cmludGYoc3RkZXJyLCAibGlieGxfcGh5c2luZm8gZmFpbGVkLlxuIik7CisgICAgICAgIHJldHVy bjsKKyAgICB9CisgICAgbWF5YmVfcHJpbnRmKCJucl9jcHVzICAgICAgICAgICAgICAgIDogJWRc biIsIGluZm8ubnJfY3B1cyk7CisgICAgbWF5YmVfcHJpbnRmKCJtYXhfY3B1X2lkICAgICAgICAg ICAgIDogJWRcbiIsIGluZm8ubWF4X2NwdV9pZCk7CisgICAgbWF5YmVfcHJpbnRmKCJucl9ub2Rl cyAgICAgICAgICAgICAgIDogJWRcbiIsIGluZm8ubnJfbm9kZXMpOworICAgIG1heWJlX3ByaW50 ZigiY29yZXNfcGVyX3NvY2tldCAgICAgICA6ICVkXG4iLCBpbmZvLmNvcmVzX3Blcl9zb2NrZXQp OworICAgIG1heWJlX3ByaW50ZigidGhyZWFkc19wZXJfY29yZSAgICAgICA6ICVkXG4iLCBpbmZv LnRocmVhZHNfcGVyX2NvcmUpOworICAgIG1heWJlX3ByaW50ZigiY3B1X21oeiAgICAgICAgICAg ICAgICA6ICVkXG4iLCBpbmZvLmNwdV9raHogLyAxMDAwKTsKKworICAgIG1heWJlX3ByaW50Zigi aHdfY2FwcyAgICAgICAgICAgICAgICA6ICUwOHg6JTA4eDolMDh4OiUwOHg6JTA4eDolMDh4OiUw OHg6JTA4eFxuIiwKKyAgICAgICAgIGluZm8uaHdfY2FwWzBdLCBpbmZvLmh3X2NhcFsxXSwgaW5m by5od19jYXBbMl0sIGluZm8uaHdfY2FwWzNdLAorICAgICAgICAgaW5mby5od19jYXBbNF0sIGlu Zm8uaHdfY2FwWzVdLCBpbmZvLmh3X2NhcFs2XSwgaW5mby5od19jYXBbN10KKyAgICAgICAgKTsK KworICAgIG1heWJlX3ByaW50ZigidmlydF9jYXBzICAgICAgICAgICAgICA6JXMlc1xuIiwKKyAg ICAgICAgIGluZm8uY2FwX2h2bSA/ICIgaHZtIiA6ICIiLAorICAgICAgICAgaW5mby5jYXBfaHZt X2RpcmVjdGlvID8gIiBodm1fZGlyZWN0aW8iIDogIiIKKyAgICAgICAgKTsKKworICAgIHZpbmZv ID0gbGlieGxfZ2V0X3ZlcnNpb25faW5mbyhjdHgpOworICAgIGlmICh2aW5mbykgeworICAgICAg ICBpID0gKDEgPDwgMjApIC8gdmluZm8tPnBhZ2VzaXplOworICAgICAgICBtYXliZV9wcmludGYo InRvdGFsX21lbW9yeSAgICAgICAgICAgOiAlIlBSSXU2NCJcbiIsIGluZm8udG90YWxfcGFnZXMg LyBpKTsKKyAgICAgICAgbWF5YmVfcHJpbnRmKCJmcmVlX21lbW9yeSAgICAgICAgICAgIDogJSJQ Ukl1NjQiXG4iLCAoaW5mby5mcmVlX3BhZ2VzIC0gaW5mby5vdXRzdGFuZGluZ19wYWdlcykgLyBp KTsKKyAgICAgICAgbWF5YmVfcHJpbnRmKCJzaGFyaW5nX2ZyZWVkX21lbW9yeSAgIDogJSJQUkl1 NjQiXG4iLCBpbmZvLnNoYXJpbmdfZnJlZWRfcGFnZXMgLyBpKTsKKyAgICAgICAgbWF5YmVfcHJp bnRmKCJzaGFyaW5nX3VzZWRfbWVtb3J5ICAgIDogJSJQUkl1NjQiXG4iLCBpbmZvLnNoYXJpbmdf dXNlZF9mcmFtZXMgLyBpKTsKKyAgICAgICAgbWF5YmVfcHJpbnRmKCJvdXRzdGFuZGluZ19jbGFp bXMgICAgIDogJSJQUkl1NjQiXG4iLCBpbmZvLm91dHN0YW5kaW5nX3BhZ2VzIC8gaSk7CisgICAg fQorICAgIGlmICghbGlieGxfZ2V0X2ZyZWVjcHVzKGN0eCwgJmNwdW1hcCkpIHsKKyAgICAgICAg bGlieGxfZm9yX2VhY2hfYml0KGksIGNwdW1hcCkKKyAgICAgICAgICAgIGlmIChsaWJ4bF9iaXRt YXBfdGVzdCgmY3B1bWFwLCBpKSkKKyAgICAgICAgICAgICAgICBuKys7CisgICAgICAgIG1heWJl X3ByaW50ZigiZnJlZV9jcHVzICAgICAgICAgICAgICA6ICVkXG4iLCBuKTsKKyAgICAgICAgZnJl ZShjcHVtYXAubWFwKTsKKyAgICB9CisgICAgbGlieGxfcGh5c2luZm9fZGlzcG9zZSgmaW5mbyk7 CisgICAgcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBvdXRwdXRfbnVtYWluZm8odm9pZCkKK3sK KyAgICBsaWJ4bF9udW1haW5mbyAqaW5mbzsKKyAgICBpbnQgaSwgaiwgbnI7CisKKyAgICBpbmZv ID0gbGlieGxfZ2V0X251bWFpbmZvKGN0eCwgJm5yKTsKKyAgICBpZiAoaW5mbyA9PSBOVUxMKSB7 CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAibGlieGxfZ2V0X251bWFpbmZvIGZhaWxlZC5cbiIp OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgcHJpbnRmKCJudW1hX2luZm8gICAgICAg ICAgICAgIDpcbiIpOworICAgIHByaW50Zigibm9kZTogICAgbWVtc2l6ZSAgICBtZW1mcmVlICAg IGRpc3RhbmNlc1xuIik7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgbnI7IGkrKykgeworICAgICAg ICBpZiAoaW5mb1tpXS5zaXplICE9IExJQlhMX05VTUFJTkZPX0lOVkFMSURfRU5UUlkpIHsKKyAg ICAgICAgICAgIHByaW50ZigiJTRkOiAgICAlNiJQUkl1NjQiICAgICAlNiJQUkl1NjQiICAgICAg JWQiLCBpLAorICAgICAgICAgICAgICAgICAgIGluZm9baV0uc2l6ZSA+PiAyMCwgaW5mb1tpXS5m cmVlID4+IDIwLAorICAgICAgICAgICAgICAgICAgIGluZm9baV0uZGlzdHNbMF0pOworICAgICAg ICAgICAgZm9yIChqID0gMTsgaiA8IGluZm9baV0ubnVtX2Rpc3RzOyBqKyspCisgICAgICAgICAg ICAgICAgcHJpbnRmKCIsJWQiLCBpbmZvW2ldLmRpc3RzW2pdKTsKKyAgICAgICAgICAgIHByaW50 ZigiXG4iKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGxpYnhsX251bWFpbmZvX2xpc3RfZnJl ZShpbmZvLCBucik7CisKKyAgICByZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIG91dHB1dF90b3Bv bG9neWluZm8odm9pZCkKK3sKKyAgICBsaWJ4bF9jcHV0b3BvbG9neSAqY3B1aW5mbzsKKyAgICBp bnQgaSwgbnI7CisgICAgbGlieGxfcGNpdG9wb2xvZ3kgKnBjaWluZm87CisgICAgaW50IHZhbGlk X2RldnMgPSAwOworCisKKyAgICBjcHVpbmZvID0gbGlieGxfZ2V0X2NwdV90b3BvbG9neShjdHgs ICZucik7CisgICAgaWYgKGNwdWluZm8gPT0gTlVMTCkgeworICAgICAgICBmcHJpbnRmKHN0ZGVy ciwgImxpYnhsX2dldF9jcHVfdG9wb2xvZ3kgZmFpbGVkLlxuIik7CisgICAgICAgIHJldHVybjsK KyAgICB9CisKKyAgICBwcmludGYoImNwdV90b3BvbG9neSAgICAgICAgICAgOlxuIik7CisgICAg cHJpbnRmKCJjcHU6ICAgIGNvcmUgICAgc29ja2V0ICAgICBub2RlXG4iKTsKKworICAgIGZvciAo aSA9IDA7IGkgPCBucjsgaSsrKSB7CisgICAgICAgIGlmIChjcHVpbmZvW2ldLmNvcmUgIT0gTElC WExfQ1BVVE9QT0xPR1lfSU5WQUxJRF9FTlRSWSkKKyAgICAgICAgICAgIHByaW50ZigiJTNkOiAg ICAlNGQgICAgICU0ZCAgICAgJTRkXG4iLCBpLAorICAgICAgICAgICAgICAgICAgIGNwdWluZm9b aV0uY29yZSwgY3B1aW5mb1tpXS5zb2NrZXQsIGNwdWluZm9baV0ubm9kZSk7CisgICAgfQorCisg ICAgbGlieGxfY3B1dG9wb2xvZ3lfbGlzdF9mcmVlKGNwdWluZm8sIG5yKTsKKworICAgIHBjaWlu Zm8gPSBsaWJ4bF9nZXRfcGNpX3RvcG9sb2d5KGN0eCwgJm5yKTsKKyAgICBpZiAocGNpaW5mbyA9 PSBOVUxMKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAibGlieGxfZ2V0X3BjaV90b3BvbG9n eSBmYWlsZWQuXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHByaW50ZigiZGV2 aWNlIHRvcG9sb2d5ICAgICAgICA6XG4iKTsKKyAgICBwcmludGYoImRldmljZSAgICAgICAgICAg bm9kZVxuIik7CisgICAgZm9yIChpID0gMDsgaSA8IG5yOyBpKyspIHsKKyAgICAgICAgaWYgKHBj aWluZm9baV0ubm9kZSAhPSBMSUJYTF9QQ0lUT1BPTE9HWV9JTlZBTElEX0VOVFJZKSB7CisgICAg ICAgICAgICBwcmludGYoIiUwNHg6JTAyeDolMDJ4LiUwMXggICAgICAlZFxuIiwgcGNpaW5mb1tp XS5zZWcsCisgICAgICAgICAgICAgICAgICAgcGNpaW5mb1tpXS5idXMsCisgICAgICAgICAgICAg ICAgICAgKChwY2lpbmZvW2ldLmRldmZuID4+IDMpICYgMHgxZiksIChwY2lpbmZvW2ldLmRldmZu ICYgNyksCisgICAgICAgICAgICAgICAgICAgcGNpaW5mb1tpXS5ub2RlKTsKKyAgICAgICAgICAg IHZhbGlkX2RldnMrKzsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICh2YWxpZF9kZXZzID09 IDApCisgICAgICAgIHByaW50ZigiTm8gZGV2aWNlIHRvcG9sb2d5IGRhdGEgYXZhaWxhYmxlXG4i KTsKKworICAgIGxpYnhsX3BjaXRvcG9sb2d5X2xpc3RfZnJlZShwY2lpbmZvLCBucik7CisKKyAg ICByZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X2luZm8oaW50IG51bWEpCit7CisgICAg b3V0cHV0X25vZGVpbmZvKCk7CisKKyAgICBvdXRwdXRfcGh5c2luZm8oKTsKKworICAgIGlmIChu dW1hKSB7CisgICAgICAgIG91dHB1dF90b3BvbG9neWluZm8oKTsKKyAgICAgICAgb3V0cHV0X251 bWFpbmZvKCk7CisgICAgfQorICAgIG91dHB1dF94ZW5pbmZvKCk7CisKKyAgICBtYXliZV9wcmlu dGYoInhlbmRfY29uZmlnX2Zvcm1hdCAgICAgOiA0XG4iKTsKKworICAgIHJldHVybjsKK30KKwor c3RhdGljIHZvaWQgbGlzdF92bSh2b2lkKQoreworICAgIGxpYnhsX3ZtaW5mbyAqaW5mbzsKKyAg ICBjaGFyICpkb21uYW1lOworICAgIGludCBuYl92bSwgaTsKKworICAgIGluZm8gPSBsaWJ4bF9s aXN0X3ZtKGN0eCwgJm5iX3ZtKTsKKworICAgIGlmICghaW5mbykgeworICAgICAgICBmcHJpbnRm KHN0ZGVyciwgImxpYnhsX2xpc3Rfdm0gZmFpbGVkLlxuIik7CisgICAgICAgIGV4aXQoRVhJVF9G QUlMVVJFKTsKKyAgICB9CisgICAgcHJpbnRmKCJVVUlEICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIElEICAgIG5hbWVcbiIpOworICAgIGZvciAoaSA9IDA7IGkgPCBuYl92bTsgaSsr KSB7CisgICAgICAgIGRvbW5hbWUgPSBsaWJ4bF9kb21pZF90b19uYW1lKGN0eCwgaW5mb1tpXS5k b21pZCk7CisgICAgICAgIHByaW50ZihMSUJYTF9VVUlEX0ZNVCAiICAlZCAgICAlLTMwc1xuIiwg TElCWExfVVVJRF9CWVRFUyhpbmZvW2ldLnV1aWQpLAorICAgICAgICAgICAgaW5mb1tpXS5kb21p ZCwgZG9tbmFtZSk7CisgICAgICAgIGZyZWUoZG9tbmFtZSk7CisgICAgfQorICAgIGxpYnhsX3Zt aW5mb19saXN0X2ZyZWUoaW5mbywgbmJfdm0pOworfQorCitzdGF0aWMgdm9pZCBsaXN0X2RvbWFp bnMoYm9vbCB2ZXJib3NlLCBib29sIGNvbnRleHQsIGJvb2wgY2xhaW0sIGJvb2wgbnVtYSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICBib29sIGNwdXBvb2wsIGNvbnN0IGxpYnhsX2RvbWluZm8g KmluZm8sIGludCBuYl9kb21haW4pCit7CisgICAgaW50IGk7CisgICAgc3RhdGljIGNvbnN0IGNo YXIgc2h1dGRvd25fcmVhc29uX2xldHRlcnNbXT0gIi1yc2N3UyI7CisgICAgbGlieGxfYml0bWFw IG5vZGVtYXA7CisgICAgbGlieGxfcGh5c2luZm8gcGh5c2luZm87CisKKyAgICBsaWJ4bF9iaXRt YXBfaW5pdCgmbm9kZW1hcCk7CisgICAgbGlieGxfcGh5c2luZm9faW5pdCgmcGh5c2luZm8pOwor CisgICAgcHJpbnRmKCJOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IElEICAgTWVtIFZDUFVzXHRTdGF0ZVx0VGltZShzKSIpOworICAgIGlmICh2ZXJib3NlKSBwcmlu dGYoIiAgIFVVSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhc29uLUNvZGVcdFNlY3Vy aXR5IExhYmVsIik7CisgICAgaWYgKGNvbnRleHQgJiYgIXZlcmJvc2UpIHByaW50ZigiICAgU2Vj dXJpdHkgTGFiZWwiKTsKKyAgICBpZiAoY2xhaW0pIHByaW50ZigiICBDbGFpbWVkIik7CisgICAg aWYgKGNwdXBvb2wpIHByaW50ZigiICAgICAgICAgQ3B1cG9vbCIpOworICAgIGlmIChudW1hKSB7 CisgICAgICAgIGlmIChsaWJ4bF9ub2RlX2JpdG1hcF9hbGxvYyhjdHgsICZub2RlbWFwLCAwKSkg eworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJsaWJ4bF9ub2RlX2JpdG1hcF9hbGxvY19m YWlsZWQuXG4iKTsKKyAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgICAgfQor ICAgICAgICBpZiAobGlieGxfZ2V0X3BoeXNpbmZvKGN0eCwgJnBoeXNpbmZvKSAhPSAwKSB7Cisg ICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImxpYnhsX3BoeXNpbmZvIGZhaWxlZC5cbiIpOwor ICAgICAgICAgICAgbGlieGxfYml0bWFwX2Rpc3Bvc2UoJm5vZGVtYXApOworICAgICAgICAgICAg ZXhpdChFWElUX0ZBSUxVUkUpOworICAgICAgICB9CisKKyAgICAgICAgcHJpbnRmKCIgTk9ERSBB ZmZpbml0eSIpOworICAgIH0KKyAgICBwcmludGYoIlxuIik7CisgICAgZm9yIChpID0gMDsgaSA8 IG5iX2RvbWFpbjsgaSsrKSB7CisgICAgICAgIGNoYXIgKmRvbW5hbWU7CisgICAgICAgIGxpYnhs X3NodXRkb3duX3JlYXNvbiBzaHV0ZG93bl9yZWFzb247CisgICAgICAgIGRvbW5hbWUgPSBsaWJ4 bF9kb21pZF90b19uYW1lKGN0eCwgaW5mb1tpXS5kb21pZCk7CisgICAgICAgIHNodXRkb3duX3Jl YXNvbiA9IGluZm9baV0uc2h1dGRvd24gPyBpbmZvW2ldLnNodXRkb3duX3JlYXNvbiA6IDA7Cisg ICAgICAgIHByaW50ZigiJS00MHMgJTVkICU1bHUgJTVkICAgICAlYyVjJWMlYyVjJWMgICU4LjFm IiwKKyAgICAgICAgICAgICAgICBkb21uYW1lLAorICAgICAgICAgICAgICAgIGluZm9baV0uZG9t aWQsCisgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpICgoaW5mb1tpXS5jdXJyZW50X21l bWtiICsKKyAgICAgICAgICAgICAgICAgICAgaW5mb1tpXS5vdXRzdGFuZGluZ19tZW1rYikvIDEw MjQpLAorICAgICAgICAgICAgICAgIGluZm9baV0udmNwdV9vbmxpbmUsCisgICAgICAgICAgICAg ICAgaW5mb1tpXS5ydW5uaW5nID8gJ3InIDogJy0nLAorICAgICAgICAgICAgICAgIGluZm9baV0u YmxvY2tlZCA/ICdiJyA6ICctJywKKyAgICAgICAgICAgICAgICBpbmZvW2ldLnBhdXNlZCA/ICdw JyA6ICctJywKKyAgICAgICAgICAgICAgICBpbmZvW2ldLnNodXRkb3duID8gJ3MnIDogJy0nLAor ICAgICAgICAgICAgICAgIChzaHV0ZG93bl9yZWFzb24gPj0gMCAmJgorICAgICAgICAgICAgICAg ICBzaHV0ZG93bl9yZWFzb24gPCBzaXplb2Yoc2h1dGRvd25fcmVhc29uX2xldHRlcnMpLTEKKyAg ICAgICAgICAgICAgICAgPyBzaHV0ZG93bl9yZWFzb25fbGV0dGVyc1tzaHV0ZG93bl9yZWFzb25d IDogJz8nKSwKKyAgICAgICAgICAgICAgICBpbmZvW2ldLmR5aW5nID8gJ2QnIDogJy0nLAorICAg ICAgICAgICAgICAgICgoZmxvYXQpaW5mb1tpXS5jcHVfdGltZSAvIDFlOSkpOworICAgICAgICBm cmVlKGRvbW5hbWUpOworICAgICAgICBpZiAodmVyYm9zZSkgeworICAgICAgICAgICAgcHJpbnRm KCIgIiBMSUJYTF9VVUlEX0ZNVCwgTElCWExfVVVJRF9CWVRFUyhpbmZvW2ldLnV1aWQpKTsKKyAg ICAgICAgICAgIGlmIChpbmZvW2ldLnNodXRkb3duKSBwcmludGYoIiAlOHgiLCBzaHV0ZG93bl9y ZWFzb24pOworICAgICAgICAgICAgZWxzZSBwcmludGYoIiAlOHMiLCAiLSIpOworICAgICAgICB9 CisgICAgICAgIGlmIChjbGFpbSkKKyAgICAgICAgICAgIHByaW50ZigiICU1bHUiLCAodW5zaWdu ZWQgbG9uZylpbmZvW2ldLm91dHN0YW5kaW5nX21lbWtiIC8gMTAyNCk7CisgICAgICAgIGlmICh2 ZXJib3NlIHx8IGNvbnRleHQpCisgICAgICAgICAgICBwcmludGYoIiAlMTZzIiwgaW5mb1tpXS5z c2lkX2xhYmVsID8gOiAiLSIpOworICAgICAgICBpZiAoY3B1cG9vbCkgeworICAgICAgICAgICAg Y2hhciAqcG9vbG5hbWUgPSBsaWJ4bF9jcHVwb29saWRfdG9fbmFtZShjdHgsIGluZm9baV0uY3B1 cG9vbCk7CisgICAgICAgICAgICBwcmludGYoIiUxNnMiLCBwb29sbmFtZSk7CisgICAgICAgICAg ICBmcmVlKHBvb2xuYW1lKTsKKyAgICAgICAgfQorICAgICAgICBpZiAobnVtYSkgeworICAgICAg ICAgICAgbGlieGxfZG9tYWluX2dldF9ub2RlYWZmaW5pdHkoY3R4LCBpbmZvW2ldLmRvbWlkLCAm bm9kZW1hcCk7CisKKyAgICAgICAgICAgIHB1dGNoYXIoJyAnKTsKKyAgICAgICAgICAgIHByaW50 X2JpdG1hcChub2RlbWFwLm1hcCwgcGh5c2luZm8ubnJfbm9kZXMsIHN0ZG91dCk7CisgICAgICAg IH0KKyAgICAgICAgcHV0Y2hhcignXG4nKTsKKyAgICB9CisKKyAgICBsaWJ4bF9iaXRtYXBfZGlz cG9zZSgmbm9kZW1hcCk7CisgICAgbGlieGxfcGh5c2luZm9fZGlzcG9zZSgmcGh5c2luZm8pOwor fQorCitzdGF0aWMgdm9pZCBsaXN0X2RvbWFpbnNfZGV0YWlscyhjb25zdCBsaWJ4bF9kb21pbmZv ICppbmZvLCBpbnQgbmJfZG9tYWluKQoreworICAgIGxpYnhsX2RvbWFpbl9jb25maWcgZF9jb25m aWc7CisKKyAgICBpbnQgaSwgcmM7CisKKyAgICB5YWpsX2dlbiBoYW5kID0gTlVMTDsKKyAgICB5 YWpsX2dlbl9zdGF0dXMgczsKKyAgICBjb25zdCBjaGFyICpidWY7CisgICAgbGlieGxfeWFqbF9s ZW5ndGggeWFqbF9sZW4gPSAwOworCisgICAgaWYgKGRlZmF1bHRfb3V0cHV0X2Zvcm1hdCA9PSBP VVRQVVRfRk9STUFUX0pTT04pIHsKKyAgICAgICAgaGFuZCA9IGxpYnhsX3lhamxfZ2VuX2FsbG9j KE5VTEwpOworICAgICAgICBpZiAoIWhhbmQpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJy LCAidW5hYmxlIHRvIGFsbG9jYXRlIEpTT04gZ2VuZXJhdG9yXG4iKTsKKyAgICAgICAgICAgIHJl dHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHMgPSB5YWpsX2dlbl9hcnJheV9vcGVuKGhhbmQp OworICAgICAgICBpZiAocyAhPSB5YWpsX2dlbl9zdGF0dXNfb2spCisgICAgICAgICAgICBnb3Rv IG91dDsKKyAgICB9IGVsc2UKKyAgICAgICAgcyA9IHlhamxfZ2VuX3N0YXR1c19vazsKKworICAg IGZvciAoaSA9IDA7IGkgPCBuYl9kb21haW47IGkrKykgeworICAgICAgICBsaWJ4bF9kb21haW5f Y29uZmlnX2luaXQoJmRfY29uZmlnKTsKKyAgICAgICAgcmMgPSBsaWJ4bF9yZXRyaWV2ZV9kb21h aW5fY29uZmlndXJhdGlvbihjdHgsIGluZm9baV0uZG9taWQsICZkX2NvbmZpZyk7CisgICAgICAg IGlmIChyYykKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoZGVmYXVsdF9vdXRw dXRfZm9ybWF0ID09IE9VVFBVVF9GT1JNQVRfSlNPTikKKyAgICAgICAgICAgIHMgPSBwcmludGZf aW5mb19vbmVfanNvbihoYW5kLCBpbmZvW2ldLmRvbWlkLCAmZF9jb25maWcpOworICAgICAgICBl bHNlCisgICAgICAgICAgICBwcmludGZfaW5mb19zZXhwKGluZm9baV0uZG9taWQsICZkX2NvbmZp Zywgc3Rkb3V0KTsKKyAgICAgICAgbGlieGxfZG9tYWluX2NvbmZpZ19kaXNwb3NlKCZkX2NvbmZp Zyk7CisgICAgICAgIGlmIChzICE9IHlhamxfZ2VuX3N0YXR1c19vaykKKyAgICAgICAgICAgIGdv dG8gb3V0OworICAgIH0KKworICAgIGlmIChkZWZhdWx0X291dHB1dF9mb3JtYXQgPT0gT1VUUFVU X0ZPUk1BVF9KU09OKSB7CisgICAgICAgIHMgPSB5YWpsX2dlbl9hcnJheV9jbG9zZShoYW5kKTsK KyAgICAgICAgaWYgKHMgIT0geWFqbF9nZW5fc3RhdHVzX29rKQorICAgICAgICAgICAgZ290byBv dXQ7CisKKyAgICAgICAgcyA9IHlhamxfZ2VuX2dldF9idWYoaGFuZCwgKGNvbnN0IHVuc2lnbmVk IGNoYXIgKiopJmJ1ZiwgJnlhamxfbGVuKTsKKyAgICAgICAgaWYgKHMgIT0geWFqbF9nZW5fc3Rh dHVzX29rKQorICAgICAgICAgICAgZ290byBvdXQ7CisKKyAgICAgICAgcHV0cyhidWYpOworICAg IH0KKworb3V0OgorICAgIGlmIChkZWZhdWx0X291dHB1dF9mb3JtYXQgPT0gT1VUUFVUX0ZPUk1B VF9KU09OKSB7CisgICAgICAgIHlhamxfZ2VuX2ZyZWUoaGFuZCk7CisgICAgICAgIGlmIChzICE9 IHlhamxfZ2VuX3N0YXR1c19vaykKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLAorICAgICAg ICAgICAgICAgICAgICAidW5hYmxlIHRvIGZvcm1hdCBkb21haW4gY29uZmlnIGFzIEpTT04gKFlB Skw6JWQpXG4iLCBzKTsKKyAgICB9Cit9CisKKworaW50IG1haW5fbGlzdChpbnQgYXJnYywgY2hh ciAqKmFyZ3YpCit7CisgICAgaW50IG9wdDsKKyAgICBib29sIHZlcmJvc2UgPSBmYWxzZTsKKyAg ICBib29sIGNvbnRleHQgPSBmYWxzZTsKKyAgICBib29sIGRldGFpbHMgPSBmYWxzZTsKKyAgICBi b29sIGNwdXBvb2wgPSBmYWxzZTsKKyAgICBib29sIG51bWEgPSBmYWxzZTsKKyAgICBzdGF0aWMg c3RydWN0IG9wdGlvbiBvcHRzW10gPSB7CisgICAgICAgIHsibG9uZyIsIDAsIDAsICdsJ30sCisg ICAgICAgIHsidmVyYm9zZSIsIDAsIDAsICd2J30sCisgICAgICAgIHsiY29udGV4dCIsIDAsIDAs ICdaJ30sCisgICAgICAgIHsiY3B1cG9vbCIsIDAsIDAsICdjJ30sCisgICAgICAgIHsibnVtYSIs IDAsIDAsICduJ30sCisgICAgICAgIENPTU1PTl9MT05HX09QVFMKKyAgICB9OworCisgICAgbGli eGxfZG9taW5mbyBpbmZvX2J1ZjsKKyAgICBsaWJ4bF9kb21pbmZvICppbmZvLCAqaW5mb19mcmVl PTA7CisgICAgaW50IG5iX2RvbWFpbiwgcmM7CisKKyAgICBTV0lUQ0hfRk9SRUFDSF9PUFQob3B0 LCAibHZoWmNuIiwgb3B0cywgImxpc3QiLCAwKSB7CisgICAgY2FzZSAnbCc6CisgICAgICAgIGRl dGFpbHMgPSB0cnVlOworICAgICAgICBicmVhazsKKyAgICBjYXNlICd2JzoKKyAgICAgICAgdmVy Ym9zZSA9IHRydWU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgJ1onOgorICAgICAgICBjb250 ZXh0ID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAnYyc6CisgICAgICAgIGNwdXBv b2wgPSB0cnVlOworICAgICAgICBicmVhazsKKyAgICBjYXNlICduJzoKKyAgICAgICAgbnVtYSA9 IHRydWU7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGxpYnhsX2RvbWluZm9faW5pdCgm aW5mb19idWYpOworCisgICAgaWYgKG9wdGluZCA+PSBhcmdjKSB7CisgICAgICAgIGluZm8gPSBs aWJ4bF9saXN0X2RvbWFpbihjdHgsICZuYl9kb21haW4pOworICAgICAgICBpZiAoIWluZm8pIHsK KyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAibGlieGxfbGlzdF9kb21haW4gZmFpbGVkLlxu Iik7CisgICAgICAgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOworICAgICAgICB9CisgICAgICAg IGluZm9fZnJlZSA9IGluZm87CisgICAgfSBlbHNlIGlmIChvcHRpbmQgPT0gYXJnYy0xKSB7Cisg ICAgICAgIHVpbnQzMl90IGRvbWlkID0geGZpbmRfZG9tYWluKGFyZ3Zbb3B0aW5kXSk7CisgICAg ICAgIHJjID0gbGlieGxfZG9tYWluX2luZm8oY3R4LCAmaW5mb19idWYsIGRvbWlkKTsKKyAgICAg ICAgaWYgKHJjID09IEVSUk9SX0RPTUFJTl9OT1RGT1VORCkgeworICAgICAgICAgICAgZnByaW50 ZihzdGRlcnIsICJFcnJvcjogRG9tYWluIFwnJXNcJyBkb2VzIG5vdCBleGlzdC5cbiIsCisgICAg ICAgICAgICAgICAgYXJndltvcHRpbmRdKTsKKyAgICAgICAgICAgIHJldHVybiBFWElUX0ZBSUxV UkU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJjKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0 ZGVyciwgImxpYnhsX2RvbWFpbl9pbmZvIGZhaWxlZCAoY29kZSAlZCkuXG4iLCByYyk7CisgICAg ICAgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOworICAgICAgICB9CisgICAgICAgIGluZm8gPSAm aW5mb19idWY7CisgICAgICAgIG5iX2RvbWFpbiA9IDE7CisgICAgfSBlbHNlIHsKKyAgICAgICAg aGVscCgibGlzdCIpOworICAgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOworICAgIH0KKworICAg IGlmIChkZXRhaWxzKQorICAgICAgICBsaXN0X2RvbWFpbnNfZGV0YWlscyhpbmZvLCBuYl9kb21h aW4pOworICAgIGVsc2UKKyAgICAgICAgbGlzdF9kb21haW5zKHZlcmJvc2UsIGNvbnRleHQsIGZh bHNlIC8qIGNsYWltICovLCBudW1hLCBjcHVwb29sLAorICAgICAgICAgICAgICAgICAgICAgaW5m bywgbmJfZG9tYWluKTsKKworICAgIGlmIChpbmZvX2ZyZWUpCisgICAgICAgIGxpYnhsX2RvbWlu Zm9fbGlzdF9mcmVlKGluZm8sIG5iX2RvbWFpbik7CisKKyAgICBsaWJ4bF9kb21pbmZvX2Rpc3Bv c2UoJmluZm9fYnVmKTsKKworICAgIHJldHVybiBFWElUX1NVQ0NFU1M7Cit9CisKK2ludCBtYWlu X3ZtX2xpc3QoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICAgIGludCBvcHQ7CisKKyAgICBT V0lUQ0hfRk9SRUFDSF9PUFQob3B0LCAiIiwgTlVMTCwgInZtLWxpc3QiLCAwKSB7CisgICAgICAg IC8qIE5vIG9wdGlvbnMgKi8KKyAgICB9CisKKyAgICBsaXN0X3ZtKCk7CisgICAgcmV0dXJuIEVY SVRfU1VDQ0VTUzsKK30KKworaW50IG1haW5faW5mbyhpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7 CisgICAgaW50IG9wdDsKKyAgICBzdGF0aWMgc3RydWN0IG9wdGlvbiBvcHRzW10gPSB7CisgICAg ICAgIHsibnVtYSIsIDAsIDAsICduJ30sCisgICAgICAgIENPTU1PTl9MT05HX09QVFMKKyAgICB9 OworICAgIGludCBudW1hID0gMDsKKworICAgIFNXSVRDSF9GT1JFQUNIX09QVChvcHQsICJuIiwg b3B0cywgImluZm8iLCAwKSB7CisgICAgY2FzZSAnbic6CisgICAgICAgIG51bWEgPSAxOworICAg ICAgICBicmVhazsKKyAgICB9CisKKyAgICAvKgorICAgICAqIElmIGFuIGV4dHJhIGFyZ3VtZW50 IGlzIHByb3ZpZGVkLCBmaWx0ZXIgb3V0IGEgc3BlY2lmaWMgcGllY2Ugb2YKKyAgICAgKiBpbmZv cm1hdGlvbi4KKyAgICAgKi8KKyAgICBpZiAobnVtYSA9PSAwICYmIGFyZ2MgPiBvcHRpbmQpCisg ICAgICAgIGluZm9fbmFtZSA9IGFyZ3Zbb3B0aW5kXTsKKworICAgIHByaW50X2luZm8obnVtYSk7 CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBtYWluX2RvbWlkKGludCBhcmdjLCBjaGFyICoqYXJn dikKK3sKKyAgICB1aW50MzJfdCBkb21pZDsKKyAgICBpbnQgb3B0OworICAgIGNvbnN0IGNoYXIg KmRvbW5hbWUgPSBOVUxMOworCisgICAgU1dJVENIX0ZPUkVBQ0hfT1BUKG9wdCwgIiIsIE5VTEws ICJkb21pZCIsIDEpIHsKKyAgICAgICAgLyogTm8gb3B0aW9ucyAqLworICAgIH0KKworICAgIGRv bW5hbWUgPSBhcmd2W29wdGluZF07CisKKyAgICBpZiAobGlieGxfbmFtZV90b19kb21pZChjdHgs IGRvbW5hbWUsICZkb21pZCkpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDYW4ndCBnZXQg ZG9taWQgb2YgZG9tYWluIG5hbWUgJyVzJywgbWF5YmUgdGhpcyBkb21haW4gZG9lcyBub3QgZXhp c3QuXG4iLCBkb21uYW1lKTsKKyAgICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKKyAgICB9CisK KyAgICBwcmludGYoIiV1XG4iLCBkb21pZCk7CisKKyAgICByZXR1cm4gRVhJVF9TVUNDRVNTOwor fQorCitpbnQgbWFpbl9kb21uYW1lKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgICB1aW50 MzJfdCBkb21pZDsKKyAgICBpbnQgb3B0OworICAgIGNoYXIgKmRvbW5hbWUgPSBOVUxMOworICAg IGNoYXIgKmVuZHB0ciA9IE5VTEw7CisKKyAgICBTV0lUQ0hfRk9SRUFDSF9PUFQob3B0LCAiIiwg TlVMTCwgImRvbW5hbWUiLCAxKSB7CisgICAgICAgIC8qIE5vIG9wdGlvbnMgKi8KKyAgICB9CisK KyAgICBkb21pZCA9IHN0cnRvbChhcmd2W29wdGluZF0sICZlbmRwdHIsIDEwKTsKKyAgICBpZiAo ZG9taWQgPT0gMCAmJiAhc3RyY21wKGVuZHB0ciwgYXJndltvcHRpbmRdKSkgeworICAgICAgICAv Km5vIGRpZ2l0cyBhdCBhbGwqLworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgZG9t YWluIGlkLlxuXG4iKTsKKyAgICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKKyAgICB9CisKKyAg ICBkb21uYW1lID0gbGlieGxfZG9taWRfdG9fbmFtZShjdHgsIGRvbWlkKTsKKyAgICBpZiAoIWRv bW5hbWUpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDYW4ndCBnZXQgZG9tYWluIG5hbWUg b2YgZG9tYWluIGlkICcldScsIG1heWJlIHRoaXMgZG9tYWluIGRvZXMgbm90IGV4aXN0LlxuIiwg ZG9taWQpOworICAgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOworICAgIH0KKworICAgIHByaW50 ZigiJXNcbiIsIGRvbW5hbWUpOworICAgIGZyZWUoZG9tbmFtZSk7CisKKyAgICByZXR1cm4gRVhJ VF9TVUNDRVNTOworfQorCitzdGF0aWMgY2hhciAqdXB0aW1lX3RvX3N0cmluZyh1bnNpZ25lZCBs b25nIHVwdGltZSwgaW50IHNob3J0X21vZGUpCit7CisgICAgaW50IHNlYywgbWluLCBob3VyLCBk YXk7CisgICAgY2hhciAqdGltZV9zdHJpbmc7CisKKyAgICBkYXkgPSAoaW50KSh1cHRpbWUgLyA4 NjQwMCk7CisgICAgdXB0aW1lIC09IChkYXkgKiA4NjQwMCk7CisgICAgaG91ciA9IChpbnQpKHVw dGltZSAvIDM2MDApOworICAgIHVwdGltZSAtPSAoaG91ciAqIDM2MDApOworICAgIG1pbiA9IChp bnQpKHVwdGltZSAvIDYwKTsKKyAgICB1cHRpbWUgLT0gKG1pbiAqIDYwKTsKKyAgICBzZWMgPSB1 cHRpbWU7CisKKyAgICBpZiAoc2hvcnRfbW9kZSkKKyAgICAgICAgaWYgKGRheSA+IDEpCisgICAg ICAgICAgICB4YXNwcmludGYoJnRpbWVfc3RyaW5nLCAiJWQgZGF5cywgJTJkOiUwMmQiLCBkYXks IGhvdXIsIG1pbik7CisgICAgICAgIGVsc2UgaWYgKGRheSA9PSAxKQorICAgICAgICAgICAgeGFz cHJpbnRmKCZ0aW1lX3N0cmluZywgIiVkIGRheSwgJTJkOiUwMmQiLCBkYXksIGhvdXIsIG1pbik7 CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHhhc3ByaW50ZigmdGltZV9zdHJpbmcsICIlMmQ6 JTAyZCIsIGhvdXIsIG1pbik7CisgICAgZWxzZQorICAgICAgICBpZiAoZGF5ID4gMSkKKyAgICAg ICAgICAgIHhhc3ByaW50ZigmdGltZV9zdHJpbmcsICIlZCBkYXlzLCAlMmQ6JTAyZDolMDJkIiwg ZGF5LCBob3VyLCBtaW4sIHNlYyk7CisgICAgICAgIGVsc2UgaWYgKGRheSA9PSAxKQorICAgICAg ICAgICAgeGFzcHJpbnRmKCZ0aW1lX3N0cmluZywgIiVkIGRheSwgJTJkOiUwMmQ6JTAyZCIsIGRh eSwgaG91ciwgbWluLCBzZWMpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB4YXNwcmludGYo JnRpbWVfc3RyaW5nLCAiJTJkOiUwMmQ6JTAyZCIsIGhvdXIsIG1pbiwgc2VjKTsKKworICAgIHJl dHVybiB0aW1lX3N0cmluZzsKK30KKworaW50IG1haW5fY2xhaW1zKGludCBhcmdjLCBjaGFyICoq YXJndikKK3sKKyAgICBsaWJ4bF9kb21pbmZvICppbmZvOworICAgIGludCBvcHQ7CisgICAgaW50 IG5iX2RvbWFpbjsKKworICAgIFNXSVRDSF9GT1JFQUNIX09QVChvcHQsICIiLCBOVUxMLCAiY2xh aW1zIiwgMCkgeworICAgICAgICAvKiBObyBvcHRpb25zICovCisgICAgfQorCisgICAgaWYgKCFj bGFpbV9tb2RlKQorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImNsYWltX21vZGUgbm90IGVuYWJs ZWQgKHNlZSBtYW4geGwuY29uZikuXG4iKTsKKworICAgIGluZm8gPSBsaWJ4bF9saXN0X2RvbWFp bihjdHgsICZuYl9kb21haW4pOworICAgIGlmICghaW5mbykgeworICAgICAgICBmcHJpbnRmKHN0 ZGVyciwgImxpYnhsX2xpc3RfZG9tYWluIGZhaWxlZC5cbiIpOworICAgICAgICByZXR1cm4gMTsK KyAgICB9CisKKyAgICBsaXN0X2RvbWFpbnMoZmFsc2UgLyogdmVyYm9zZSAqLywgZmFsc2UgLyog Y29udGV4dCAqLywgdHJ1ZSAvKiBjbGFpbSAqLywKKyAgICAgICAgICAgICAgICAgZmFsc2UgLyog bnVtYSAqLywgZmFsc2UgLyogY3B1cG9vbCAqLywgaW5mbywgbmJfZG9tYWluKTsKKworICAgIGxp YnhsX2RvbWluZm9fbGlzdF9mcmVlKGluZm8sIG5iX2RvbWFpbik7CisgICAgcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyBjaGFyICpjdXJyZW50X3RpbWVfdG9fc3RyaW5nKHRpbWVfdCBub3cpCit7Cisg ICAgY2hhciBub3dfc3RyWzEwMF07CisgICAgc3RydWN0IHRtICp0bXA7CisKKyAgICB0bXAgPSBs b2NhbHRpbWUoJm5vdyk7CisgICAgaWYgKHRtcCA9PSBOVUxMKSB7CisgICAgICAgIGZwcmludGYo c3RkZXJyLCAiR2V0IGxvY2FsdGltZSBlcnJvciIpOworICAgICAgICBleGl0KC0xKTsKKyAgICB9 CisgICAgaWYgKHN0cmZ0aW1lKG5vd19zdHIsIHNpemVvZihub3dfc3RyKSwgIiVIOiVNOiVTIiwg dG1wKSA9PSAwKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAic3RyZnRpbWUgcmV0dXJuZWQg MCIpOworICAgICAgICBleGl0KC0xKTsKKyAgICB9CisgICAgcmV0dXJuIHN0cmR1cChub3dfc3Ry KTsKK30KKworc3RhdGljIHZvaWQgcHJpbnRfZG9tMF91cHRpbWUoaW50IHNob3J0X21vZGUsIHRp bWVfdCBub3cpCit7CisgICAgaW50IGZkOworICAgIHNzaXplX3QgbnI7CisgICAgY2hhciBidWZb NTEyXTsKKyAgICB1aW50MzJfdCB1cHRpbWUgPSAwOworICAgIGNoYXIgKnVwdGltZV9zdHIgPSBO VUxMOworICAgIGNoYXIgKm5vd19zdHIgPSBOVUxMOworICAgIGNoYXIgKmRvbW5hbWU7CisKKyAg ICBmZCA9IG9wZW4oIi9wcm9jL3VwdGltZSIsIE9fUkRPTkxZKTsKKyAgICBpZiAoZmQgPT0gLTEp CisgICAgICAgIGdvdG8gZXJyOworCisgICAgbnIgPSByZWFkKGZkLCBidWYsIHNpemVvZihidWYp IC0gMSk7CisgICAgaWYgKG5yID09IC0xKSB7CisgICAgICAgIGNsb3NlKGZkKTsKKyAgICAgICAg Z290byBlcnI7CisgICAgfQorICAgIGNsb3NlKGZkKTsKKworICAgIGJ1Zltucl0gPSAnXDAnOwor CisgICAgc3RydG9rKGJ1ZiwgIiAiKTsKKyAgICB1cHRpbWUgPSBzdHJ0b3VsKGJ1ZiwgTlVMTCwg MTApOworCisgICAgZG9tbmFtZSA9IGxpYnhsX2RvbWlkX3RvX25hbWUoY3R4LCAwKTsKKyAgICBp ZiAoc2hvcnRfbW9kZSkKKyAgICB7CisgICAgICAgIG5vd19zdHIgPSBjdXJyZW50X3RpbWVfdG9f c3RyaW5nKG5vdyk7CisgICAgICAgIHVwdGltZV9zdHIgPSB1cHRpbWVfdG9fc3RyaW5nKHVwdGlt ZSwgMSk7CisgICAgICAgIHByaW50ZigiICVzIHVwICVzLCAlcyAoJWQpXG4iLCBub3dfc3RyLCB1 cHRpbWVfc3RyLAorICAgICAgICAgICAgICAgZG9tbmFtZSwgMCk7CisgICAgfQorICAgIGVsc2UK KyAgICB7CisgICAgICAgIG5vd19zdHIgPSBOVUxMOworICAgICAgICB1cHRpbWVfc3RyID0gdXB0 aW1lX3RvX3N0cmluZyh1cHRpbWUsIDApOworICAgICAgICBwcmludGYoIiUtMzNzICU0ZCAlc1xu IiwgZG9tbmFtZSwKKyAgICAgICAgICAgICAgIDAsIHVwdGltZV9zdHIpOworICAgIH0KKworICAg IGZyZWUobm93X3N0cik7CisgICAgZnJlZSh1cHRpbWVfc3RyKTsKKyAgICBmcmVlKGRvbW5hbWUp OworICAgIHJldHVybjsKK2VycjoKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkNhbiBub3QgZ2V0IERv bTAgdXB0aW1lLlxuIik7CisgICAgZXhpdCgtMSk7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X2Rv bVVfdXB0aW1lKHVpbnQzMl90IGRvbXVpZCwgaW50IHNob3J0X21vZGUsIHRpbWVfdCBub3cpCit7 CisgICAgdWludDMyX3Qgc190aW1lID0gMDsKKyAgICB1aW50MzJfdCB1cHRpbWUgPSAwOworICAg IGNoYXIgKnVwdGltZV9zdHIgPSBOVUxMOworICAgIGNoYXIgKm5vd19zdHIgPSBOVUxMOworICAg IGNoYXIgKmRvbW5hbWU7CisKKyAgICBzX3RpbWUgPSBsaWJ4bF92bV9nZXRfc3RhcnRfdGltZShj dHgsIGRvbXVpZCk7CisgICAgaWYgKHNfdGltZSA9PSAtMSkKKyAgICAgICAgcmV0dXJuOworICAg IHVwdGltZSA9IG5vdyAtIHNfdGltZTsKKyAgICBkb21uYW1lID0gbGlieGxfZG9taWRfdG9fbmFt ZShjdHgsIGRvbXVpZCk7CisgICAgaWYgKHNob3J0X21vZGUpCisgICAgeworICAgICAgICBub3df c3RyID0gY3VycmVudF90aW1lX3RvX3N0cmluZyhub3cpOworICAgICAgICB1cHRpbWVfc3RyID0g dXB0aW1lX3RvX3N0cmluZyh1cHRpbWUsIDEpOworICAgICAgICBwcmludGYoIiAlcyB1cCAlcywg JXMgKCVkKVxuIiwgbm93X3N0ciwgdXB0aW1lX3N0ciwKKyAgICAgICAgICAgICAgIGRvbW5hbWUs IGRvbXVpZCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG5vd19zdHIgPSBOVUxM OworICAgICAgICB1cHRpbWVfc3RyID0gdXB0aW1lX3RvX3N0cmluZyh1cHRpbWUsIDApOworICAg ICAgICBwcmludGYoIiUtMzNzICU0ZCAlc1xuIiwgZG9tbmFtZSwKKyAgICAgICAgICAgICAgIGRv bXVpZCwgdXB0aW1lX3N0cik7CisgICAgfQorCisgICAgZnJlZShkb21uYW1lKTsKKyAgICBmcmVl KG5vd19zdHIpOworICAgIGZyZWUodXB0aW1lX3N0cik7CisgICAgcmV0dXJuOworfQorCitzdGF0 aWMgdm9pZCBwcmludF91cHRpbWUoaW50IHNob3J0X21vZGUsIHVpbnQzMl90IGRvbXNbXSwgaW50 IG5iX2RvbXMpCit7CisgICAgbGlieGxfdm1pbmZvICppbmZvOworICAgIHRpbWVfdCBub3c7Cisg ICAgaW50IG5iX3ZtLCBpOworCisgICAgbm93ID0gdGltZShOVUxMKTsKKworICAgIGlmICghc2hv cnRfbW9kZSkKKyAgICAgICAgcHJpbnRmKCIlLTMzcyAlNHMgJXNcbiIsICJOYW1lIiwgIklEIiwg IlVwdGltZSIpOworCisgICAgaWYgKG5iX2RvbXMgPT0gMCkgeworICAgICAgICBwcmludF9kb20w X3VwdGltZShzaG9ydF9tb2RlLCBub3cpOworICAgICAgICBpbmZvID0gbGlieGxfbGlzdF92bShj dHgsICZuYl92bSk7CisgICAgICAgIGlmIChpbmZvID09IE5VTEwpIHsKKyAgICAgICAgICAgIGZw cmludGYoc3RkZXJyLCAiQ291bGQgbm90IGxpc3Qgdm1zLlxuIik7CisgICAgICAgICAgICByZXR1 cm47CisgICAgICAgIH0KKyAgICAgICAgZm9yIChpID0gMDsgaSA8IG5iX3ZtOyBpKyspIHsKKyAg ICAgICAgICAgIGlmIChpbmZvW2ldLmRvbWlkID09IDApIGNvbnRpbnVlOworICAgICAgICAgICAg cHJpbnRfZG9tVV91cHRpbWUoaW5mb1tpXS5kb21pZCwgc2hvcnRfbW9kZSwgbm93KTsKKyAgICAg ICAgfQorICAgICAgICBsaWJ4bF92bWluZm9fbGlzdF9mcmVlKGluZm8sIG5iX3ZtKTsKKyAgICB9 IGVsc2UgeworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbmJfZG9tczsgaSsrKSB7CisgICAgICAg ICAgICBpZiAoZG9tc1tpXSA9PSAwKQorICAgICAgICAgICAgICAgIHByaW50X2RvbTBfdXB0aW1l KHNob3J0X21vZGUsIG5vdyk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcHJp bnRfZG9tVV91cHRpbWUoZG9tc1tpXSwgc2hvcnRfbW9kZSwgbm93KTsKKyAgICAgICAgfQorICAg IH0KK30KKworaW50IG1haW5fdXB0aW1lKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgICBj b25zdCBjaGFyICpkb207CisgICAgaW50IHNob3J0X21vZGUgPSAwOworICAgIHVpbnQzMl90IGRv bWFpbnNbMTAwXTsKKyAgICBpbnQgbmJfZG9tcyA9IDA7CisgICAgaW50IG9wdDsKKworICAgIFNX SVRDSF9GT1JFQUNIX09QVChvcHQsICJzIiwgTlVMTCwgInVwdGltZSIsIDApIHsKKyAgICBjYXNl ICdzJzoKKyAgICAgICAgc2hvcnRfbW9kZSA9IDE7CisgICAgICAgIGJyZWFrOworICAgIH0KKwor ICAgIGZvciAoOyhkb20gPSBhcmd2W29wdGluZF0pICE9IE5VTEw7IG5iX2RvbXMrKyxvcHRpbmQr KykKKyAgICAgICAgZG9tYWluc1tuYl9kb21zXSA9IHhmaW5kX2RvbWFpbihkb20pOworCisgICAg cHJpbnRfdXB0aW1lKHNob3J0X21vZGUsIGRvbWFpbnMsIG5iX2RvbXMpOworCisgICAgcmV0dXJu IDA7Cit9CisKK2ludCBtYWluX2RtZXNnKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgICB1 bnNpZ25lZCBpbnQgY2xlYXIgPSAwOworICAgIGxpYnhsX3hlbl9jb25zb2xlX3JlYWRlciAqY3I7 CisgICAgY2hhciAqbGluZTsKKyAgICBpbnQgb3B0LCByZXQgPSAxOworCisgICAgU1dJVENIX0ZP UkVBQ0hfT1BUKG9wdCwgImMiLCBOVUxMLCAiZG1lc2ciLCAwKSB7CisgICAgY2FzZSAnYyc6Cisg ICAgICAgIGNsZWFyID0gMTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY3IgPSBsaWJ4 bF94ZW5fY29uc29sZV9yZWFkX3N0YXJ0KGN0eCwgY2xlYXIpOworICAgIGlmICghY3IpCisgICAg ICAgIGdvdG8gZmluaXNoOworCisgICAgd2hpbGUgKChyZXQgPSBsaWJ4bF94ZW5fY29uc29sZV9y ZWFkX2xpbmUoY3R4LCBjciwgJmxpbmUpKSA+IDApCisgICAgICAgIHByaW50ZigiJXMiLCBsaW5l KTsKKworZmluaXNoOgorICAgIGlmIChjcikKKyAgICAgICAgbGlieGxfeGVuX2NvbnNvbGVfcmVh ZF9maW5pc2goY3R4LCBjcik7CisgICAgcmV0dXJuIHJldCA/IEVYSVRfRkFJTFVSRSA6IEVYSVRf U1VDQ0VTUzsKK30KKworaW50IG1haW5fdG9wKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAg ICBpbnQgb3B0OworCisgICAgU1dJVENIX0ZPUkVBQ0hfT1BUKG9wdCwgIiIsIE5VTEwsICJ0b3Ai LCAwKSB7CisgICAgICAgIC8qIE5vIG9wdGlvbnMgKi8KKyAgICB9CisKKyAgICByZXR1cm4gc3lz dGVtKCJ4ZW50b3AiKTsKK30KKworCisvKgorICogTG9jYWwgdmFyaWFibGVzOgorICogbW9kZTog QworICogYy1iYXNpYy1vZmZzZXQ6IDQKKyAqIGluZGVudC10YWJzLW1vZGU6IG5pbAorICogRW5k OgorICovCi0tIAoyLjExLjAKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3Jn Cmh0dHBzOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK