From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wei Liu Subject: [PATCH 10/29] xl: split out xl_parse.[ch] Date: Fri, 24 Feb 2017 16:12:55 +0000 Message-ID: <20170224161314.22154-11-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 1chIXt-0006Za-2k for xen-devel@lists.xenproject.org; Fri, 24 Feb 2017 16:16:37 +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 TW92ZSBhbGwgcGFyc2luZyBjb2RlIGludG8geGxfcGFyc2UuYy4gRXhwb3J0IHRoZSBvbmVzIG5l ZWRlZCBpbgp4bF9wYXJzZS5oLgoKU29tZSBub3RhYmxlIGNoYW5nZXMgb3RoZXIgdGhhbiBjb2Rl IG1vdmVtZW50OgoxLiByZW5hbWUgY3B1cmFuZ2VfcGFyc2UgdG8gcGFyc2VfY3B1cmFuZ2U7CjIu IHByb3ZpZGUgYSBmdW5jdGlvbiB0byByZXR1cm4gc2h1dGRvd24gYWN0aW9uIG5hbWUuCgpTaWdu ZWQtb2ZmLWJ5OiBXZWkgTGl1IDx3ZWkubGl1MkBjaXRyaXguY29tPgotLS0KIHRvb2xzL3hsL01h a2VmaWxlICAgICB8ICAgIDIgKy0KIHRvb2xzL3hsL3hsX2NtZGltcGwuYyB8IDIzNTMgKysrKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogdG9vbHMveGwveGxf cGFyc2UuYyAgIHwgMjA1MiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysKIHRvb2xzL3hsL3hsX3BhcnNlLmggICB8ICAgNjUgKysKIDQgZmlsZXMgY2hhbmdlZCwgMjI4 OCBpbnNlcnRpb25zKCspLCAyMTg0IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHRv b2xzL3hsL3hsX3BhcnNlLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCB0b29scy94bC94bF9wYXJzZS5o CgpkaWZmIC0tZ2l0IGEvdG9vbHMveGwvTWFrZWZpbGUgYi90b29scy94bC9NYWtlZmlsZQppbmRl eCBmNWRmMzY2ZTBhLi5kN2Y3ZjAxNTQ5IDEwMDY0NAotLS0gYS90b29scy94bC9NYWtlZmlsZQor KysgYi90b29scy94bC9NYWtlZmlsZQpAQCAtMTYsNyArMTYsNyBAQCBDRkxBR1NfWEwgKz0gJChD RkxBR1NfbGlieGVubGlnaHQpCiBDRkxBR1NfWEwgKz0gLVdzaGFkb3cKIAogWExfT0JKUyA9IHhs Lm8geGxfY21kaW1wbC5vIHhsX2NtZHRhYmxlLm8geGxfc3hwLm8geGxfdXRpbHMubwotWExfT0JK UyArPSB4bF90bWVtLm8KK1hMX09CSlMgKz0geGxfdG1lbS5vIHhsX3BhcnNlLm8KIAogJChYTF9P QkpTKTogQ0ZMQUdTICs9ICQoQ0ZMQUdTX2xpYnhlbnRvb2xsb2cpCiAkKFhMX09CSlMpOiBDRkxB R1MgKz0gJChDRkxBR1NfWEwpCmRpZmYgLS1naXQgYS90b29scy94bC94bF9jbWRpbXBsLmMgYi90 b29scy94bC94bF9jbWRpbXBsLmMKaW5kZXggM2MwMzdlYjJlYy4uODEyZjU3MGQwZCAxMDA2NDQK LS0tIGEvdG9vbHMveGwveGxfY21kaW1wbC5jCisrKyBiL3Rvb2xzL3hsL3hsX2NtZGltcGwuYwpA QCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgPGxpYnhsdXRpbC5oPgogI2luY2x1ZGUgInhsLmgi CiAjaW5jbHVkZSAieGxfdXRpbHMuaCIKKyNpbmNsdWRlICJ4bF9wYXJzZS5oIgogCiBpbnQgbG9n ZmlsZSA9IDI7CiAKQEAgLTg2LDIxICs4Nyw2IEBAIHN0cnVjdCBzYXZlX2ZpbGVfaGVhZGVyIHsK ICAgICB1aW50MzJfdCBvcHRpb25hbF9kYXRhX2xlbjsgLyogc2tpcCwgb3Igc2tpcCB0YWlsLCBp ZiBub3QgdW5kZXJzdG9vZCAqLwogfTsKIAotCi1zdGF0aWMgY29uc3QgY2hhciAqYWN0aW9uX29u X3NodXRkb3duX25hbWVzW10gPSB7Ci0gICAgW0xJQlhMX0FDVElPTl9PTl9TSFVURE9XTl9ERVNU Uk9ZXSA9ICJkZXN0cm95IiwKLQotICAgIFtMSUJYTF9BQ1RJT05fT05fU0hVVERPV05fUkVTVEFS VF0gPSAicmVzdGFydCIsCi0gICAgW0xJQlhMX0FDVElPTl9PTl9TSFVURE9XTl9SRVNUQVJUX1JF TkFNRV0gPSAicmVuYW1lLXJlc3RhcnQiLAotCi0gICAgW0xJQlhMX0FDVElPTl9PTl9TSFVURE9X Tl9QUkVTRVJWRV0gPSAicHJlc2VydmUiLAotCi0gICAgW0xJQlhMX0FDVElPTl9PTl9TSFVURE9X Tl9DT1JFRFVNUF9ERVNUUk9ZXSA9ICJjb3JlZHVtcC1kZXN0cm95IiwKLSAgICBbTElCWExfQUNU SU9OX09OX1NIVVRET1dOX0NPUkVEVU1QX1JFU1RBUlRdID0gImNvcmVkdW1wLXJlc3RhcnQiLAot Ci0gICAgW0xJQlhMX0FDVElPTl9PTl9TSFVURE9XTl9TT0ZUX1JFU0VUXSA9ICJzb2Z0LXJlc2V0 IiwKLX07Ci0KIC8qIE9wdGlvbmFsIGRhdGEsIGluIG9yZGVyOgogICogICA0IGJ5dGVzIHVpbnQz Ml90ICBjb25maWcgZmlsZSBzaXplCiAgKiAgIG4gYnl0ZXMgICAgICAgICAgIGNvbmZpZyBmaWxl IGluIFVuaXggdGV4dCBmaWxlIGZvcm1hdApAQCAtMTkxLDIxODEgKzE3NywyMTYgQEAgc3RhdGlj IGludCBhY3F1aXJlX2xvY2sodm9pZCkKICAgICAgICAgcmV0dXJuIEVSUk9SX0ZBSUw7CiAgICAg fQogICAgIGlmIChmY250bChmZF9sb2NrLCBGX1NFVEZELCBGRF9DTE9FWEVDKSA8IDApIHsKLSAg ICAgICAgY2xvc2UoZmRfbG9jayk7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiY2Fubm90IHNl dCBjbG9leGVjIHRvIGxvY2tmaWxlICVzIGVycm5vPSVkXG4iLCBsb2NrZmlsZSwgZXJybm8pOwot ICAgICAgICByZXR1cm4gRVJST1JfRkFJTDsKLSAgICB9Ci1nZXRfbG9jazoKLSAgICByYyA9IGZj bnRsKGZkX2xvY2ssIEZfU0VUTEtXLCAmZmwpOwotICAgIGlmIChyYyA8IDAgJiYgZXJybm8gPT0g RUlOVFIpCi0gICAgICAgIGdvdG8gZ2V0X2xvY2s7Ci0gICAgaWYgKHJjIDwgMCkgewotICAgICAg ICBmcHJpbnRmKHN0ZGVyciwgImNhbm5vdCBhY3F1aXJlIGxvY2sgJXMgZXJybm89JWRcbiIsIGxv Y2tmaWxlLCBlcnJubyk7Ci0gICAgICAgIHJjID0gRVJST1JfRkFJTDsKLSAgICB9IGVsc2UKLSAg ICAgICAgcmMgPSAwOwotICAgIHJldHVybiByYzsKLX0KLQotc3RhdGljIGludCByZWxlYXNlX2xv Y2sodm9pZCkKLXsKLSAgICBpbnQgcmM7Ci0gICAgc3RydWN0IGZsb2NrIGZsOwotCi0gICAgLyog bG9jayBub3QgYWNxdWlyZWQgKi8KLSAgICBpZiAoZmRfbG9jayA8IDApCi0gICAgICAgIHJldHVy biBFUlJPUl9JTlZBTDsKLQotcmVsZWFzZV9sb2NrOgotICAgIGZsLmxfdHlwZSA9IEZfVU5MQ0s7 Ci0gICAgZmwubF93aGVuY2UgPSBTRUVLX1NFVDsKLSAgICBmbC5sX3N0YXJ0ID0gMDsKLSAgICBm bC5sX2xlbiA9IDA7Ci0KLSAgICByYyA9IGZjbnRsKGZkX2xvY2ssIEZfU0VUTEtXLCAmZmwpOwot ICAgIGlmIChyYyA8IDAgJiYgZXJybm8gPT0gRUlOVFIpCi0gICAgICAgIGdvdG8gcmVsZWFzZV9s b2NrOwotICAgIGlmIChyYyA8IDApIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJjYW5ub3Qg cmVsZWFzZSBsb2NrICVzLCBlcnJubz0lZFxuIiwgbG9ja2ZpbGUsIGVycm5vKTsKLSAgICAgICAg cmMgPSBFUlJPUl9GQUlMOwotICAgIH0gZWxzZQotICAgICAgICByYyA9IDA7Ci0gICAgY2xvc2Uo ZmRfbG9jayk7Ci0gICAgZmRfbG9jayA9IC0xOwotCi0gICAgcmV0dXJuIHJjOwotfQotCi0KLSNk ZWZpbmUgQVJSQVlfRVhURU5EX0lOSVRfX0NPUkUoYXJyYXksY291bnQsaW5pdGZuLG1vcmUpICAg ICAgICAgICAgICAgIFwKLSAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgdHlwZW9mKChjb3VudCkp IGFycmF5X2V4dGVuZF9vbGRfY291bnQgPSAoY291bnQpOyAgICAgICAgICAgICAgIFwKLSAgICAg ICAgKGNvdW50KSsrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKLSAgICAgICAgKGFycmF5KSA9IHhyZWFsbG9jKChhcnJheSksIHNpemVvZigq YXJyYXkpICogKGNvdW50KSk7ICAgICAgICAgIFwKLSAgICAgICAgKGluaXRmbikoJihhcnJheSlb YXJyYXlfZXh0ZW5kX29sZF9jb3VudF0pOyAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAg bW9yZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKLSAgICAgICAgJihhcnJheSlbYXJyYXlfZXh0ZW5kX29sZF9jb3VudF07ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9KQotCi0jZGVmaW5lIEFSUkFZX0VYVEVO RF9JTklUKGFycmF5LGNvdW50LGluaXRmbikgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g ICAgQVJSQVlfRVhURU5EX0lOSVRfX0NPUkUoKGFycmF5KSwoY291bnQpLChpbml0Zm4pLCAoeyAg ICAgICAgICAgICAgICBcCi0gICAgICAgIChhcnJheSlbYXJyYXlfZXh0ZW5kX29sZF9jb3VudF0u ZGV2aWQgPSBhcnJheV9leHRlbmRfb2xkX2NvdW50OyBcCi0gICAgICAgIH0pKQotCi0jZGVmaW5l IEFSUkFZX0VYVEVORF9JTklUX05PREVWSUQoYXJyYXksY291bnQsaW5pdGZuKSBcCi0gICAgQVJS QVlfRVhURU5EX0lOSVRfX0NPUkUoKGFycmF5KSwoY291bnQpLChpbml0Zm4pLCAvKiBub3RoaW5n ICovICkKLQotc3RhdGljIHlhamxfZ2VuX3N0YXR1cyBwcmludGZfaW5mb19vbmVfanNvbih5YWps X2dlbiBoYW5kLCBpbnQgZG9taWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGxpYnhsX2RvbWFpbl9jb25maWcgKmRfY29uZmlnKQotewotICAgIHlhamxfZ2Vu X3N0YXR1cyBzOwotCi0gICAgcyA9IHlhamxfZ2VuX21hcF9vcGVuKGhhbmQpOwotICAgIGlmIChz ICE9IHlhamxfZ2VuX3N0YXR1c19vaykKLSAgICAgICAgZ290byBvdXQ7Ci0KLSAgICBzID0geWFq bF9nZW5fc3RyaW5nKGhhbmQsIChjb25zdCB1bnNpZ25lZCBjaGFyICopImRvbWlkIiwKLSAgICAg ICAgICAgICAgICAgICAgICAgIHNpemVvZigiZG9taWQiKS0xKTsKLSAgICBpZiAocyAhPSB5YWps X2dlbl9zdGF0dXNfb2spCi0gICAgICAgIGdvdG8gb3V0OwotICAgIGlmIChkb21pZCAhPSAtMSkK LSAgICAgICAgcyA9IHlhamxfZ2VuX2ludGVnZXIoaGFuZCwgZG9taWQpOwotICAgIGVsc2UKLSAg ICAgICAgcyA9IHlhamxfZ2VuX251bGwoaGFuZCk7Ci0gICAgaWYgKHMgIT0geWFqbF9nZW5fc3Rh dHVzX29rKQotICAgICAgICBnb3RvIG91dDsKLQotICAgIHMgPSB5YWpsX2dlbl9zdHJpbmcoaGFu ZCwgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikiY29uZmlnIiwKLSAgICAgICAgICAgICAgICAgICAg ICAgIHNpemVvZigiY29uZmlnIiktMSk7Ci0gICAgaWYgKHMgIT0geWFqbF9nZW5fc3RhdHVzX29r KQotICAgICAgICBnb3RvIG91dDsKLSAgICBzID0gbGlieGxfZG9tYWluX2NvbmZpZ19nZW5fanNv bihoYW5kLCBkX2NvbmZpZyk7Ci0gICAgaWYgKHMgIT0geWFqbF9nZW5fc3RhdHVzX29rKQotICAg ICAgICBnb3RvIG91dDsKLQotICAgIHMgPSB5YWpsX2dlbl9tYXBfY2xvc2UoaGFuZCk7Ci0gICAg aWYgKHMgIT0geWFqbF9nZW5fc3RhdHVzX29rKQotICAgICAgICBnb3RvIG91dDsKLQotb3V0Ogot ICAgIHJldHVybiBzOwotfQotCi1zdGF0aWMgdm9pZCBwcmludGZfaW5mbyhlbnVtIG91dHB1dF9m b3JtYXQgb3V0cHV0X2Zvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBkb21pZCwK LSAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RvbWFpbl9jb25maWcgKmRfY29uZmlnLCBG SUxFICpmaCkKLXsKLSAgICBpZiAob3V0cHV0X2Zvcm1hdCA9PSBPVVRQVVRfRk9STUFUX1NYUCkK LSAgICAgICAgcmV0dXJuIHByaW50Zl9pbmZvX3NleHAoZG9taWQsIGRfY29uZmlnLCBmaCk7Ci0K LSAgICBjb25zdCBjaGFyICpidWY7Ci0gICAgbGlieGxfeWFqbF9sZW5ndGggbGVuID0gMDsKLSAg ICB5YWpsX2dlbl9zdGF0dXMgczsKLSAgICB5YWpsX2dlbiBoYW5kOwotCi0gICAgaGFuZCA9IGxp YnhsX3lhamxfZ2VuX2FsbG9jKE5VTEwpOwotICAgIGlmICghaGFuZCkgewotICAgICAgICBmcHJp bnRmKHN0ZGVyciwgInVuYWJsZSB0byBhbGxvY2F0ZSBKU09OIGdlbmVyYXRvclxuIik7Ci0gICAg ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzID0gcHJpbnRmX2luZm9fb25lX2pzb24oaGFuZCwg ZG9taWQsIGRfY29uZmlnKTsKLSAgICBpZiAocyAhPSB5YWpsX2dlbl9zdGF0dXNfb2spCi0gICAg ICAgIGdvdG8gb3V0OwotCi0gICAgcyA9IHlhamxfZ2VuX2dldF9idWYoaGFuZCwgKGNvbnN0IHVu c2lnbmVkIGNoYXIgKiopJmJ1ZiwgJmxlbik7Ci0gICAgaWYgKHMgIT0geWFqbF9nZW5fc3RhdHVz X29rKQotICAgICAgICBnb3RvIG91dDsKLQotICAgIGZwdXRzKGJ1ZiwgZmgpOwotCi1vdXQ6Ci0g ICAgeWFqbF9nZW5fZnJlZShoYW5kKTsKLQotICAgIGlmIChzICE9IHlhamxfZ2VuX3N0YXR1c19v aykKLSAgICAgICAgZnByaW50ZihzdGRlcnIsCi0gICAgICAgICAgICAgICAgInVuYWJsZSB0byBm b3JtYXQgZG9tYWluIGNvbmZpZyBhcyBKU09OIChZQUpMOiVkKVxuIiwgcyk7Ci0KLSAgICB4Zmx1 c2hfc3RyZWFtKGZoKTsKLX0KLQotc3RhdGljIGludCBkb19kYWVtb25pemUoY2hhciAqbmFtZSwg Y29uc3QgY2hhciAqcGlkZmlsZSkKLXsKLSAgICBjaGFyICpmdWxsbmFtZTsKLSAgICBwaWRfdCBj aGlsZDE7Ci0gICAgaW50IG51bGxmZCwgcmV0ID0gMDsKLQotICAgIGNoaWxkMSA9IHhsX2Zvcmso Y2hpbGRfd2FpdGRhZW1vbiwgImRvbWFpbiBtb25pdG9yaW5nIGRhZW1vbml6aW5nIGNoaWxkIik7 Ci0gICAgaWYgKGNoaWxkMSkgewotICAgICAgICByZXQgPSBjaGlsZF9yZXBvcnQoY2hpbGRfd2Fp dGRhZW1vbik7Ci0gICAgICAgIGlmIChyZXQpIGdvdG8gb3V0OwotICAgICAgICByZXQgPSAxOwot ICAgICAgICBnb3RvIG91dDsKLSAgICB9Ci0KLSAgICBwb3N0Zm9yaygpOwotCi0gICAgcmV0ID0g bGlieGxfY3JlYXRlX2xvZ2ZpbGUoY3R4LCBuYW1lLCAmZnVsbG5hbWUpOwotICAgIGlmIChyZXQp IHsKLSAgICAgICAgTE9HKCJmYWlsZWQgdG8gb3BlbiBsb2dmaWxlICVzOiAlcyIsZnVsbG5hbWUs c3RyZXJyb3IoZXJybm8pKTsKLSAgICAgICAgZXhpdCgtMSk7Ci0gICAgfQotCi0gICAgQ0hLX1NZ U0NBTEwobG9nZmlsZSA9IG9wZW4oZnVsbG5hbWUsIE9fV1JPTkxZfE9fQ1JFQVR8T19BUFBFTkQs IDA2NDQpKTsKLSAgICBmcmVlKGZ1bGxuYW1lKTsKLSAgICBhc3NlcnQobG9nZmlsZSA+PSAzKTsK LQotICAgIENIS19TWVNDQUxMKG51bGxmZCA9IG9wZW4oIi9kZXYvbnVsbCIsIE9fUkRPTkxZKSk7 Ci0gICAgYXNzZXJ0KG51bGxmZCA+PSAzKTsKLQotICAgIGR1cDIobnVsbGZkLCAwKTsKLSAgICBk dXAyKGxvZ2ZpbGUsIDEpOwotICAgIGR1cDIobG9nZmlsZSwgMik7Ci0KLSAgICBjbG9zZShudWxs ZmQpOwotCi0gICAgQ0hLX1NZU0NBTEwoZGFlbW9uKDAsIDEpKTsKLQotICAgIGlmIChwaWRmaWxl KSB7Ci0gICAgICAgIGludCBmZCA9IG9wZW4ocGlkZmlsZSwgT19SRFdSIHwgT19DUkVBVCwgU19J UlVTUnxTX0lXVVNSKTsKLSAgICAgICAgY2hhciAqcGlkID0gTlVMTDsKLQotICAgICAgICBpZiAo ZmQgPT0gLTEpIHsKLSAgICAgICAgICAgIHBlcnJvcigiVW5hYmxlIHRvIG9wZW4gcGlkZmlsZSIp OwotICAgICAgICAgICAgZXhpdCgxKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChhc3ByaW50 ZigmcGlkLCAiJWxkXG4iLCAobG9uZylnZXRwaWQoKSkgPT0gLTEpIHsKLSAgICAgICAgICAgIHBl cnJvcigiRm9ybWF0dGluZyBwaWQiKTsKLSAgICAgICAgICAgIGV4aXQoMSk7Ci0gICAgICAgIH0K LQotICAgICAgICBpZiAod3JpdGUoZmQsIHBpZCwgc3RybGVuKHBpZCkpIDwgMCkgewotICAgICAg ICAgICAgcGVycm9yKCJXcml0aW5nIHBpZCIpOwotICAgICAgICAgICAgZXhpdCgxKTsKLSAgICAg ICAgfQotCi0gICAgICAgIGlmIChjbG9zZShmZCkgPCAwKSB7Ci0gICAgICAgICAgICBwZXJyb3Io IkNsb3NpbmcgcGlkZmlsZSIpOwotICAgICAgICAgICAgZXhpdCgxKTsKLSAgICAgICAgfQotCi0g ICAgICAgIGZyZWUocGlkKTsKLSAgICB9Ci0KLW91dDoKLSAgICByZXR1cm4gcmV0OwotfQotCi1z dGF0aWMgaW50IHBhcnNlX2FjdGlvbl9vbl9zaHV0ZG93bihjb25zdCBjaGFyICpidWYsIGxpYnhs X2FjdGlvbl9vbl9zaHV0ZG93biAqYSkKLXsKLSAgICBpbnQgaTsKLSAgICBjb25zdCBjaGFyICpu OwotCi0gICAgZm9yIChpID0gMDsgaSA8IHNpemVvZihhY3Rpb25fb25fc2h1dGRvd25fbmFtZXMp IC8gc2l6ZW9mKGFjdGlvbl9vbl9zaHV0ZG93bl9uYW1lc1swXSk7IGkrKykgewotICAgICAgICBu ID0gYWN0aW9uX29uX3NodXRkb3duX25hbWVzW2ldOwotCi0gICAgICAgIGlmICghbikgY29udGlu dWU7Ci0KLSAgICAgICAgaWYgKHN0cmNtcChidWYsIG4pID09IDApIHsKLSAgICAgICAgICAgICph ID0gaTsKLSAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVy biAwOwotfQotCi0jZGVmaW5lIERTVEFURV9JTklUSUFMICAgMAotI2RlZmluZSBEU1RBVEVfVEFQ ICAgICAgIDEKLSNkZWZpbmUgRFNUQVRFX1BIWVNQQVRIICAyCi0jZGVmaW5lIERTVEFURV9WSVJU UEFUSCAgMwotI2RlZmluZSBEU1RBVEVfVklSVFRZUEUgIDQKLSNkZWZpbmUgRFNUQVRFX1JXICAg ICAgICA1Ci0jZGVmaW5lIERTVEFURV9URVJNSU5BTCAgNgotCi1zdGF0aWMgdm9pZCBwYXJzZV9k aXNrX2NvbmZpZ19tdWx0aXN0cmluZyhYTFVfQ29uZmlnICoqY29uZmlnLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5zcGVjcywgY29uc3QgY2hhciAqY29u c3QgKnNwZWNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGli eGxfZGV2aWNlX2Rpc2sgKmRpc2spCi17Ci0gICAgaW50IGU7Ci0KLSAgICBsaWJ4bF9kZXZpY2Vf ZGlza19pbml0KGRpc2spOwotCi0gICAgaWYgKCEqY29uZmlnKSB7Ci0gICAgICAgICpjb25maWcg PSB4bHVfY2ZnX2luaXQoc3RkZXJyLCAiY29tbWFuZCBsaW5lIik7Ci0gICAgICAgIGlmICghKmNv bmZpZykgeyBwZXJyb3IoInhsdV9jZmdfaW5pdCIpOyBleGl0KC0xKTsgfQotICAgIH0KLQotICAg IGUgPSB4bHVfZGlza19wYXJzZSgqY29uZmlnLCBuc3BlY3MsIHNwZWNzLCBkaXNrKTsKLSAgICBp ZiAoZSA9PSBFSU5WQUwpIGV4aXQoRVhJVF9GQUlMVVJFKTsKLSAgICBpZiAoZSkgewotICAgICAg ICBmcHJpbnRmKHN0ZGVyciwieGx1X2Rpc2tfcGFyc2UgZmFpbGVkOiAlc1xuIixzdHJlcnJvcihl cnJubykpOwotICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgfQotfQotCi1zdGF0aWMg dm9pZCBwYXJzZV9kaXNrX2NvbmZpZyhYTFVfQ29uZmlnICoqY29uZmlnLCBjb25zdCBjaGFyICpz cGVjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX2Rpc2sgKmRp c2spCi17Ci0gICAgcGFyc2VfZGlza19jb25maWdfbXVsdGlzdHJpbmcoY29uZmlnLCAxLCAmc3Bl YywgZGlzayk7Ci19Ci0KLXN0YXRpYyB2b2lkIHBhcnNlX3ZpZl9yYXRlKFhMVV9Db25maWcgKipj b25maWcsIGNvbnN0IGNoYXIgKnJhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4 bF9kZXZpY2VfbmljICpuaWMpCi17Ci0gICAgaW50IGU7Ci0KLSAgICBlID0geGx1X3ZpZl9wYXJz ZV9yYXRlKCpjb25maWcsIHJhdGUsIG5pYyk7Ci0gICAgaWYgKGUgPT0gRUlOVkFMIHx8IGUgPT0g RU9WRVJGTE9XKSBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgaWYgKGUpIHsKLSAgICAgICAgZnBy aW50ZihzdGRlcnIsInhsdV92aWZfcGFyc2VfcmF0ZSBmYWlsZWQ6ICVzXG4iLHN0cmVycm9yKGVy cm5vKSk7Ci0gICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2 b2lkIHNldF9kZWZhdWx0X25pY192YWx1ZXMobGlieGxfZGV2aWNlX25pYyAqbmljKQotewotCi0g ICAgaWYgKGRlZmF1bHRfdmlmc2NyaXB0KSB7Ci0gICAgICAgIGZyZWUobmljLT5zY3JpcHQpOwot ICAgICAgICBuaWMtPnNjcmlwdCA9IHN0cmR1cChkZWZhdWx0X3ZpZnNjcmlwdCk7Ci0gICAgfQot Ci0gICAgaWYgKGRlZmF1bHRfYnJpZGdlKSB7Ci0gICAgICAgIGZyZWUobmljLT5icmlkZ2UpOwot ICAgICAgICBuaWMtPmJyaWRnZSA9IHN0cmR1cChkZWZhdWx0X2JyaWRnZSk7Ci0gICAgfQotCi0g ICAgaWYgKGRlZmF1bHRfZ2F0ZXdheWRldikgewotICAgICAgICBmcmVlKG5pYy0+Z2F0ZXdheWRl dik7Ci0gICAgICAgIG5pYy0+Z2F0ZXdheWRldiA9IHN0cmR1cChkZWZhdWx0X2dhdGV3YXlkZXYp OwotICAgIH0KLQotICAgIGlmIChkZWZhdWx0X3ZpZmJhY2tlbmQpIHsKLSAgICAgICAgZnJlZShu aWMtPmJhY2tlbmRfZG9tbmFtZSk7Ci0gICAgICAgIG5pYy0+YmFja2VuZF9kb21uYW1lID0gc3Ry ZHVwKGRlZmF1bHRfdmlmYmFja2VuZCk7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBzcGxpdF9z dHJpbmdfaW50b19zdHJpbmdfbGlzdChjb25zdCBjaGFyICpzdHIsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpkZWxpbSwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX3N0cmluZ19saXN0ICpwc2wpCi17 Ci0gICAgY2hhciAqcywgKnNhdmVwdHI7Ci0gICAgY29uc3QgY2hhciAqcDsKLSAgICBsaWJ4bF9z dHJpbmdfbGlzdCBzbDsKLQotICAgIGludCBpID0gMCwgbnIgPSAwOwotCi0gICAgcyA9IHN0cmR1 cChzdHIpOwotICAgIGlmIChzID09IE5VTEwpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJ1 bmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IHRvIHNwbGl0IHN0cmluZ1xuIik7Ci0gICAgICAgIGV4 aXQoLTEpOwotICAgIH0KLQotICAgIC8qIENvdW50IG51bWJlciBvZiBlbnRyaWVzICovCi0gICAg cCA9IHN0cnRva19yKHMsIGRlbGltLCAmc2F2ZXB0cik7Ci0gICAgZG8gewotICAgICAgICBucisr OwotICAgIH0gd2hpbGUgKChwID0gc3RydG9rX3IoTlVMTCwgZGVsaW0sICZzYXZlcHRyKSkpOwot Ci0gICAgZnJlZShzKTsKLQotICAgIHMgPSBzdHJkdXAoc3RyKTsKLQotICAgIHNsID0gbWFsbG9j KChucisxKSAqIHNpemVvZiAoY2hhciAqKSk7Ci0gICAgaWYgKHNsID09IE5VTEwpIHsKLSAgICAg ICAgZnByaW50ZihzdGRlcnIsICJ1bmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IHRvIHNwbGl0IHN0 cmluZ1xuIik7Ci0gICAgICAgIGV4aXQoLTEpOwotICAgIH0KLQotICAgIHAgPSBzdHJ0b2tfcihz LCBkZWxpbSwgJnNhdmVwdHIpOwotICAgIGRvIHsKLSAgICAgICAgYXNzZXJ0KGkgPCBucik7Ci0g ICAgICAgIHNsW2ldID0gc3RyZHVwKHApOwotICAgICAgICBpKys7Ci0gICAgfSB3aGlsZSAoKHAg PSBzdHJ0b2tfcihOVUxMLCBkZWxpbSwgJnNhdmVwdHIpKSk7Ci0gICAgc2xbaV0gPSBOVUxMOwot Ci0gICAgKnBzbCA9IHNsOwotCi0gICAgZnJlZShzKTsKLX0KLQotLyogTkI6IHRoaXMgZm9sbG93 cyB0aGUgaW50ZXJmYWNlIHVzZWQgYnkgPGN0eXBlLmg+LiBTZWUgJ21hbiAzIGN0eXBlJwotICAg YW5kIGxvb2sgZm9yIENUWVBFIGluIGxpYnhsX2ludGVybmFsLmggKi8KLXR5cGVkZWYgaW50ICgq Y2hhcl9wcmVkaWNhdGVfdCkoY29uc3QgaW50IGMpOwotCi1zdGF0aWMgdm9pZCB0cmltKGNoYXJf cHJlZGljYXRlX3QgcHJlZGljYXRlLCBjb25zdCBjaGFyICppbnB1dCwgY2hhciAqKm91dHB1dCkK LXsKLSAgICBjb25zdCBjaGFyICpmaXJzdCwgKmFmdGVyOwotCi0gICAgZm9yIChmaXJzdCA9IGlu cHV0OwotICAgICAgICAgKmZpcnN0ICYmIHByZWRpY2F0ZSgodW5zaWduZWQgY2hhcilmaXJzdFsw XSk7Ci0gICAgICAgICBmaXJzdCsrKQotICAgICAgICA7Ci0KLSAgICBmb3IgKGFmdGVyID0gZmly c3QgKyBzdHJsZW4oZmlyc3QpOwotICAgICAgICAgYWZ0ZXIgPiBmaXJzdCAmJiBwcmVkaWNhdGUo KHVuc2lnbmVkIGNoYXIpYWZ0ZXJbLTFdKTsKLSAgICAgICAgIGFmdGVyLS0pCi0gICAgICAgIDsK LQotICAgIHNpemVfdCBsZW5fbm9ubnVsbCA9IGFmdGVyIC0gZmlyc3Q7Ci0gICAgY2hhciAqcmVz dWx0ID0geG1hbGxvYyhsZW5fbm9ubnVsbCArIDEpOwotCi0gICAgbWVtY3B5KHJlc3VsdCwgZmly c3QsIGxlbl9ub25udWxsKTsKLSAgICByZXN1bHRbbGVuX25vbm51bGxdID0gMDsKLQotICAgICpv dXRwdXQgPSByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBpbnQgc3BsaXRfc3RyaW5nX2ludG9fcGFpcihj b25zdCBjaGFyICpzdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg Y2hhciAqZGVsaW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKmEs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKmIpCi17Ci0gICAgY2hh ciAqcywgKnAsICpzYXZlcHRyLCAqYWEgPSBOVUxMLCAqYmIgPSBOVUxMOwotICAgIGludCByYyA9 IDA7Ci0KLSAgICBzID0geHN0cmR1cChzdHIpOwotCi0gICAgcCA9IHN0cnRva19yKHMsIGRlbGlt LCAmc2F2ZXB0cik7Ci0gICAgaWYgKHAgPT0gTlVMTCkgewotICAgICAgICByYyA9IEVSUk9SX0lO VkFMOwotICAgICAgICBnb3RvIG91dDsKLSAgICB9Ci0gICAgYWEgPSB4c3RyZHVwKHApOwotICAg IHAgPSBzdHJ0b2tfcihOVUxMLCBkZWxpbSwgJnNhdmVwdHIpOwotICAgIGlmIChwID09IE5VTEwp IHsKLSAgICAgICAgcmMgPSBFUlJPUl9JTlZBTDsKLSAgICAgICAgZ290byBvdXQ7Ci0gICAgfQot ICAgIGJiID0geHN0cmR1cChwKTsKLQotICAgICphID0gYWE7Ci0gICAgYWEgPSBOVUxMOwotICAg ICpiID0gYmI7Ci0gICAgYmIgPSBOVUxMOwotb3V0OgotICAgIGZyZWUocyk7Ci0gICAgZnJlZShh YSk7Ci0gICAgZnJlZShiYik7Ci0gICAgcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IHBhcnNl X3JhbmdlKGNvbnN0IGNoYXIgKnN0ciwgdW5zaWduZWQgbG9uZyAqYSwgdW5zaWduZWQgbG9uZyAq YikKLXsKLSAgICBjb25zdCBjaGFyICpuc3RyOwotICAgIGNoYXIgKmVuZHB0cjsKLQotICAgICph ID0gKmIgPSBzdHJ0b3VsKHN0ciwgJmVuZHB0ciwgMTApOwotICAgIGlmIChlbmRwdHIgPT0gc3Ry IHx8ICphID09IFVMT05HX01BWCkKLSAgICAgICAgcmV0dXJuIDE7Ci0KLSAgICBpZiAoKmVuZHB0 ciA9PSAnLScpIHsKLSAgICAgICAgbnN0ciA9IGVuZHB0ciArIDE7Ci0KLSAgICAgICAgKmIgPSBz dHJ0b3VsKG5zdHIsICZlbmRwdHIsIDEwKTsKLSAgICAgICAgaWYgKGVuZHB0ciA9PSBuc3RyIHx8 ICpiID09IFVMT05HX01BWCB8fCAqYiA8ICphKQotICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAg fQotCi0gICAgLyogVmFsaWQgdmFsdWUgb3IgcmFuZ2Ugc28gZmFyLCBidXQgd2UgYWxzbyBkb24n dCB3YW50IGp1bmsgYWZ0ZXIgdGhhdCAqLwotICAgIGlmICgqZW5kcHRyICE9ICdcMCcpCi0gICAg ICAgIHJldHVybiAxOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBBZGQgb3IgcmVtb3Zl cyBhIHNwZWNpZmljIHNldCBvZiBjcHVzIChzcGVjaWZpZWQgaW4gc3RyLCBlaXRoZXIgYXMKLSAq IHNpbmdsZSBjcHVzIG9yIGFzIGVudGlyZSBOVU1BIG5vZGVzKSB0by9mcm9tIGNwdW1hcC4KLSAq Lwotc3RhdGljIGludCB1cGRhdGVfY3B1bWFwX3JhbmdlKGNvbnN0IGNoYXIgKnN0ciwgbGlieGxf Yml0bWFwICpjcHVtYXApCi17Ci0gICAgdW5zaWduZWQgbG9uZyBpZGEsIGlkYjsKLSAgICBsaWJ4 bF9iaXRtYXAgbm9kZV9jcHVtYXA7Ci0gICAgYm9vbCBpc19ub3QgPSBmYWxzZSwgaXNfbm9kZXMg PSBmYWxzZTsKLSAgICBpbnQgcmMgPSAwOwotCi0gICAgbGlieGxfYml0bWFwX2luaXQoJm5vZGVf Y3B1bWFwKTsKLQotICAgIHJjID0gbGlieGxfbm9kZV9iaXRtYXBfYWxsb2MoY3R4LCAmbm9kZV9j cHVtYXAsIDApOwotICAgIGlmIChyYykgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImxpYnhs X25vZGVfYml0bWFwX2FsbG9jIGZhaWxlZC5cbiIpOwotICAgICAgICBnb3RvIG91dDsKLSAgICB9 Ci0KLSAgICAvKiBBcmUgd2UgYWRkaW5nIG9yIHJlbW92aW5nIGNwdXMvbm9kZXM/ICovCi0gICAg aWYgKFNUUl9TS0lQX1BSRUZJWChzdHIsICJeIikpIHsKLSAgICAgICAgaXNfbm90ID0gdHJ1ZTsK LSAgICB9Ci0KLSAgICAvKiBBcmUgd2UgZGVhbGluZyB3aXRoIGNwdXMgb3IgZnVsbCBub2Rlcz8g Ki8KLSAgICBpZiAoU1RSX1NLSVBfUFJFRklYKHN0ciwgIm5vZGU6IikgfHwgU1RSX1NLSVBfUFJF RklYKHN0ciwgIm5vZGVzOiIpKSB7Ci0gICAgICAgIGlzX25vZGVzID0gdHJ1ZTsKLSAgICB9Ci0K LSAgICBpZiAoc3RyY21wKHN0ciwgImFsbCIpID09IDApIHsKLSAgICAgICAgLyogV2UgZG8gbm90 IGFjY2VwdCAiXmFsbCIgb3IgIl5ub2RlczphbGwiICovCi0gICAgICAgIGlmIChpc19ub3QpIHsK LSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ2FuJ3QgY29tYmluZSBcIl5cIiBhbmQgXCJh bGxcIi5cbiIpOwotICAgICAgICAgICAgcmMgPSBFUlJPUl9JTlZBTDsKLSAgICAgICAgfSBlbHNl Ci0gICAgICAgICAgICBsaWJ4bF9iaXRtYXBfc2V0X2FueShjcHVtYXApOwotICAgICAgICBnb3Rv IG91dDsKLSAgICB9Ci0KLSAgICByYyA9IHBhcnNlX3JhbmdlKHN0ciwgJmlkYSwgJmlkYik7Ci0g ICAgaWYgKHJjKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBwY3B1IHJhbmdl OiAlcy5cbiIsIHN0cik7Ci0gICAgICAgIGdvdG8gb3V0OwotICAgIH0KLQotICAgIC8qIEFkZCBv ciByZW1vdmUgdGhlIHNwZWNpZmllZCBjcHVzIGluIHRoZSByYW5nZSAqLwotICAgIHdoaWxlIChp ZGEgPD0gaWRiKSB7Ci0gICAgICAgIGlmIChpc19ub2RlcykgewotICAgICAgICAgICAgLyogQWRk L1JlbW92ZSBhbGwgdGhlIGNwdXMgb2YgYSBOVU1BIG5vZGUgKi8KLSAgICAgICAgICAgIGludCBp OwotCi0gICAgICAgICAgICByYyA9IGxpYnhsX25vZGVfdG9fY3B1bWFwKGN0eCwgaWRhLCAmbm9k ZV9jcHVtYXApOwotICAgICAgICAgICAgaWYgKHJjKSB7Ci0gICAgICAgICAgICAgICAgZnByaW50 ZihzdGRlcnIsICJsaWJ4bF9ub2RlX3RvX2NwdW1hcCBmYWlsZWQuXG4iKTsKLSAgICAgICAgICAg ICAgICBnb3RvIG91dDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLyogQWRkL1JlbW92 ZSBhbGwgdGhlIGNwdXMgaW4gdGhlIG5vZGUgY3B1bWFwICovCi0gICAgICAgICAgICBsaWJ4bF9m b3JfZWFjaF9zZXRfYml0KGksIG5vZGVfY3B1bWFwKSB7Ci0gICAgICAgICAgICAgICAgaXNfbm90 ID8gbGlieGxfYml0bWFwX3Jlc2V0KGNwdW1hcCwgaSkgOgotICAgICAgICAgICAgICAgICAgICAg ICAgIGxpYnhsX2JpdG1hcF9zZXQoY3B1bWFwLCBpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg fSBlbHNlIHsKLSAgICAgICAgICAgIC8qIEFkZC9SZW1vdmUgdGhpcyBjcHUgKi8KLSAgICAgICAg ICAgIGlzX25vdCA/IGxpYnhsX2JpdG1hcF9yZXNldChjcHVtYXAsIGlkYSkgOgotICAgICAgICAg ICAgICAgICAgICAgbGlieGxfYml0bWFwX3NldChjcHVtYXAsIGlkYSk7Ci0gICAgICAgIH0KLSAg ICAgICAgaWRhKys7Ci0gICAgfQotCi0gb3V0OgotICAgIGxpYnhsX2JpdG1hcF9kaXNwb3NlKCZu b2RlX2NwdW1hcCk7Ci0gICAgcmV0dXJuIHJjOwotfQotCi0vKgotICogVGFrZXMgYSBzdHJpbmcg cmVwcmVzZW50aW5nIGEgc2V0IG9mIGNwdXMgKHNwZWNpZmllZCBlaXRoZXIgYXMKLSAqIHNpbmds ZSBjcHVzIG9yIGFzIGVpbnRpcmUgTlVNQSBub2RlcykgYW5kIHR1cm5zIGl0IGludG8gdGhlCi0g KiBjb3JyZXNwb25kaW5nIGxpYnhsX2JpdG1hcCAoaW4gY3B1bWFwKS4KLSAqLwotc3RhdGljIGlu dCBjcHVyYW5nZV9wYXJzZShjb25zdCBjaGFyICpjcHUsIGxpYnhsX2JpdG1hcCAqY3B1bWFwKQot ewotICAgIGNoYXIgKnB0ciwgKnNhdmVwdHIgPSBOVUxMLCAqYnVmID0geHN0cmR1cChjcHUpOwot ICAgIGludCByYyA9IDA7Ci0KLSAgICBmb3IgKHB0ciA9IHN0cnRva19yKGJ1ZiwgIiwiLCAmc2F2 ZXB0cik7IHB0cjsKLSAgICAgICAgIHB0ciA9IHN0cnRva19yKE5VTEwsICIsIiwgJnNhdmVwdHIp KSB7Ci0gICAgICAgIHJjID0gdXBkYXRlX2NwdW1hcF9yYW5nZShwdHIsIGNwdW1hcCk7Ci0gICAg ICAgIGlmIChyYykKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBmcmVlKGJ1Zik7Ci0K LSAgICByZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyB2b2lkIHBhcnNlX3RvcF9sZXZlbF92bmNfb3B0 aW9ucyhYTFVfQ29uZmlnICpjb25maWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbGlieGxfdm5jX2luZm8gKnZuYykKLXsKLSAgICBsb25nIGw7Ci0KLSAgICB4bHVf Y2ZnX2dldF9kZWZib29sKGNvbmZpZywgInZuYyIsICZ2bmMtPmVuYWJsZSwgMCk7Ci0gICAgeGx1 X2NmZ19yZXBsYWNlX3N0cmluZyAoY29uZmlnLCAidm5jbGlzdGVuIiwgJnZuYy0+bGlzdGVuLCAw KTsKLSAgICB4bHVfY2ZnX3JlcGxhY2Vfc3RyaW5nIChjb25maWcsICJ2bmNwYXNzd2QiLCAmdm5j LT5wYXNzd2QsIDApOwotICAgIGlmICgheGx1X2NmZ19nZXRfbG9uZyAoY29uZmlnLCAidm5jZGlz cGxheSIsICZsLCAwKSkKLSAgICAgICAgdm5jLT5kaXNwbGF5ID0gbDsKLSAgICB4bHVfY2ZnX2dl dF9kZWZib29sKGNvbmZpZywgInZuY3VudXNlZCIsICZ2bmMtPmZpbmR1bnVzZWQsIDApOwotfQot Ci1zdGF0aWMgdm9pZCBwYXJzZV90b3BfbGV2ZWxfc2RsX29wdGlvbnMoWExVX0NvbmZpZyAqY29u ZmlnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX3NkbF9p bmZvICpzZGwpCi17Ci0gICAgeGx1X2NmZ19nZXRfZGVmYm9vbChjb25maWcsICJzZGwiLCAmc2Rs LT5lbmFibGUsIDApOwotICAgIHhsdV9jZmdfZ2V0X2RlZmJvb2woY29uZmlnLCAib3BlbmdsIiwg JnNkbC0+b3BlbmdsLCAwKTsKLSAgICB4bHVfY2ZnX3JlcGxhY2Vfc3RyaW5nIChjb25maWcsICJk aXNwbGF5IiwgJnNkbC0+ZGlzcGxheSwgMCk7Ci0gICAgeGx1X2NmZ19yZXBsYWNlX3N0cmluZyAo Y29uZmlnLCAieGF1dGhvcml0eSIsICZzZGwtPnhhdXRob3JpdHksIDApOwotfQotCi1zdGF0aWMg Y2hhciAqcGFyc2VfY21kbGluZShYTFVfQ29uZmlnICpjb25maWcpCi17Ci0gICAgY2hhciAqY21k bGluZSA9IE5VTEw7Ci0gICAgY29uc3QgY2hhciAqcm9vdCA9IE5VTEwsICpleHRyYSA9IE5VTEws ICpidWYgPSBOVUxMOwotCi0gICAgeGx1X2NmZ19nZXRfc3RyaW5nIChjb25maWcsICJjbWRsaW5l IiwgJmJ1ZiwgMCk7Ci0gICAgeGx1X2NmZ19nZXRfc3RyaW5nIChjb25maWcsICJyb290IiwgJnJv b3QsIDApOwotICAgIHhsdV9jZmdfZ2V0X3N0cmluZyAoY29uZmlnLCAiZXh0cmEiLCAmZXh0cmEs IDApOwotCi0gICAgaWYgKGJ1ZikgewotICAgICAgICBjbWRsaW5lID0gc3RyZHVwKGJ1Zik7Ci0g ICAgICAgIGlmIChyb290IHx8IGV4dHJhKQotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJX YXJuaW5nOiBpZ25vcmluZyByb290PSBhbmQgZXh0cmE9ICIKLSAgICAgICAgICAgICAgICAgICAg ImluIGZhdm91ciBvZiBjbWRsaW5lPVxuIik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKHJv b3QgJiYgZXh0cmEpIHsKLSAgICAgICAgICAgIHhhc3ByaW50ZigmY21kbGluZSwgInJvb3Q9JXMg JXMiLCByb290LCBleHRyYSk7Ci0gICAgICAgIH0gZWxzZSBpZiAocm9vdCkgewotICAgICAgICAg ICAgeGFzcHJpbnRmKCZjbWRsaW5lLCAicm9vdD0lcyIsIHJvb3QpOwotICAgICAgICB9IGVsc2Ug aWYgKGV4dHJhKSB7Ci0gICAgICAgICAgICBjbWRsaW5lID0gc3RyZHVwKGV4dHJhKTsKLSAgICAg ICAgfQotICAgIH0KLQotICAgIGlmICgoYnVmIHx8IHJvb3QgfHwgZXh0cmEpICYmICFjbWRsaW5l KSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBm b3IgY21kbGluZVxuIik7Ci0gICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKLSAgICB9Ci0KLSAg ICByZXR1cm4gY21kbGluZTsKLX0KLQotc3RhdGljIHZvaWQgcGFyc2VfdmNwdV9hZmZpbml0eShs aWJ4bF9kb21haW5fYnVpbGRfaW5mbyAqYl9pbmZvLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBYTFVfQ29uZmlnTGlzdCAqY3B1cywgY29uc3QgY2hhciAqYnVmLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtX2NwdXMsIGJvb2wgaXNfaGFyZCkKLXsKLSAg ICBsaWJ4bF9iaXRtYXAgKnZjcHVfYWZmaW5pdHlfYXJyYXk7Ci0KLSAgICAvKgotICAgICAqIElm IHdlIGFyZSBoZXJlLCBhbmQgYnVmIGlzICFOVUxMLCB3ZSdyZSBkZWFsaW5nIHdpdGggYSBzdHJp bmcuIFdoYXQKLSAgICAgKiB3ZSBkbyBpbiB0aGlzIGNhc2UgaXMgcGFyc2UgaXQsIGFuZCBjb3B5 IHRoZSByZXN1bHQgaW4gX2FsbF8gKHVwIHRvCi0gICAgICogYl9pbmZvLT5tYXhfdmNwdXMpIHRo ZSBlbGVtZW50cyBvZiB0aGUgdmNwdSBhZmZpbml0eSBhcnJheS4KLSAgICAgKgotICAgICAqIElm IGJ1ZiBpcyBOVUxMLCB3ZSBoYXZlIGEgbGlzdCwgYW5kIHdoYXQgd2UgZG8gaXMgcHV0dGluZyBp biB0aGUKLSAgICAgKiBpLWV0aCBlbGVtZW50IG9mIHRoZSB2Y3B1IGFmZmluaXR5IGFycmF5IHRo ZSByZXN1bHQgb2YgdGhlIHBhcnNpbmcKLSAgICAgKiBvZiB0aGUgaS1ldGggZW50cnkgb2YgdGhl IGxpc3QuIElmIHRoZXJlIGFyZSBtb3JlIHZjcHVzIHRoYW4KLSAgICAgKiBlbnRyaWVzLCBpdCBp cyBmaW5lIHRvIGp1c3Qgbm90IHRvdWNoIHRoZSBsYXN0IGFycmF5IGVsZW1lbnRzLgotICAgICAq LwotCi0gICAgLyogU2lsZW50bHkgaWdub3JlIHZhbHVlcyBjb3JyZXNwb25kaW5nIHRvIG5vbiBl eGlzdGluZyB2Y3B1cyAqLwotICAgIGlmIChidWYgfHwgbnVtX2NwdXMgPiBiX2luZm8tPm1heF92 Y3B1cykKLSAgICAgICAgbnVtX2NwdXMgPSBiX2luZm8tPm1heF92Y3B1czsKLQotICAgIGlmIChp c19oYXJkKSB7Ci0gICAgICAgIGJfaW5mby0+bnVtX3ZjcHVfaGFyZF9hZmZpbml0eSA9IG51bV9j cHVzOwotICAgICAgICBiX2luZm8tPnZjcHVfaGFyZF9hZmZpbml0eSA9IHhtYWxsb2MobnVtX2Nw dXMgKiBzaXplb2YobGlieGxfYml0bWFwKSk7Ci0gICAgICAgIHZjcHVfYWZmaW5pdHlfYXJyYXkg PSBiX2luZm8tPnZjcHVfaGFyZF9hZmZpbml0eTsKLSAgICB9IGVsc2UgewotICAgICAgICBiX2lu Zm8tPm51bV92Y3B1X3NvZnRfYWZmaW5pdHkgPSBudW1fY3B1czsKLSAgICAgICAgYl9pbmZvLT52 Y3B1X3NvZnRfYWZmaW5pdHkgPSB4bWFsbG9jKG51bV9jcHVzICogc2l6ZW9mKGxpYnhsX2JpdG1h cCkpOwotICAgICAgICB2Y3B1X2FmZmluaXR5X2FycmF5ID0gYl9pbmZvLT52Y3B1X3NvZnRfYWZm aW5pdHk7Ci0gICAgfQotCi0gICAgaWYgKCFidWYpIHsKLSAgICAgICAgaW50IGogPSAwOwotCi0g ICAgICAgIHdoaWxlICgoYnVmID0geGx1X2NmZ19nZXRfbGlzdGl0ZW0oY3B1cywgaikpICE9IE5V TEwgJiYgaiA8IG51bV9jcHVzKSB7Ci0gICAgICAgICAgICBsaWJ4bF9iaXRtYXBfaW5pdCgmdmNw dV9hZmZpbml0eV9hcnJheVtqXSk7Ci0gICAgICAgICAgICBpZiAobGlieGxfY3B1X2JpdG1hcF9h bGxvYyhjdHgsICZ2Y3B1X2FmZmluaXR5X2FycmF5W2pdLCAwKSkgewotICAgICAgICAgICAgICAg IGZwcmludGYoc3RkZXJyLCAiVW5hYmxlIHRvIGFsbG9jYXRlIGNwdW1hcCBmb3IgdmNwdSAlZFxu Iiwgaik7Ci0gICAgICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwotICAgICAgICAgICAg fQotCi0gICAgICAgICAgICBpZiAoY3B1cmFuZ2VfcGFyc2UoYnVmLCAmdmNwdV9hZmZpbml0eV9h cnJheVtqXSkpCi0gICAgICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwotCi0gICAgICAg ICAgICBqKys7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBXZSBoYXZlIGEgbGlzdCBvZiBjcHVt YXBzLCBkaXNhYmxlIGF1dG9tYXRpYyBwbGFjZW1lbnQgKi8KLSAgICAgICAgbGlieGxfZGVmYm9v bF9zZXQoJmJfaW5mby0+bnVtYV9wbGFjZW1lbnQsIGZhbHNlKTsKLSAgICB9IGVsc2UgewotICAg ICAgICBpbnQgaTsKLQotICAgICAgICBsaWJ4bF9iaXRtYXBfaW5pdCgmdmNwdV9hZmZpbml0eV9h cnJheVswXSk7Ci0gICAgICAgIGlmIChsaWJ4bF9jcHVfYml0bWFwX2FsbG9jKGN0eCwgJnZjcHVf YWZmaW5pdHlfYXJyYXlbMF0sIDApKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlVu YWJsZSB0byBhbGxvY2F0ZSBjcHVtYXAgZm9yIHZjcHUgMFxuIik7Ci0gICAgICAgICAgICBleGl0 KEVYSVRfRkFJTFVSRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoY3B1cmFuZ2VfcGFyc2Uo YnVmLCAmdmNwdV9hZmZpbml0eV9hcnJheVswXSkpCi0gICAgICAgICAgICBleGl0KEVYSVRfRkFJ TFVSRSk7Ci0KLSAgICAgICAgZm9yIChpID0gMTsgaSA8IGJfaW5mby0+bWF4X3ZjcHVzOyBpKysp IHsKLSAgICAgICAgICAgIGxpYnhsX2JpdG1hcF9pbml0KCZ2Y3B1X2FmZmluaXR5X2FycmF5W2ld KTsKLSAgICAgICAgICAgIGlmIChsaWJ4bF9jcHVfYml0bWFwX2FsbG9jKGN0eCwgJnZjcHVfYWZm aW5pdHlfYXJyYXlbaV0sIDApKSB7Ci0gICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJV bmFibGUgdG8gYWxsb2NhdGUgY3B1bWFwIGZvciB2Y3B1ICVkXG4iLCBpKTsKLSAgICAgICAgICAg ICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBsaWJ4 bF9iaXRtYXBfY29weShjdHgsICZ2Y3B1X2FmZmluaXR5X2FycmF5W2ldLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJnZjcHVfYWZmaW5pdHlfYXJyYXlbMF0pOwotICAgICAgICB9Ci0K LSAgICAgICAgbGlieGxfZGVmYm9vbF9zZXQoJmJfaW5mby0+bnVtYV9wbGFjZW1lbnQsIGZhbHNl KTsKLSAgICB9Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIHBhcnNlX3Vsb25nKGNvbnN0IGNo YXIgKnN0cikKLXsKLSAgICBjaGFyICplbmRwdHI7Ci0gICAgdW5zaWduZWQgbG9uZyB2YWw7Ci0K LSAgICB2YWwgPSBzdHJ0b3VsKHN0ciwgJmVuZHB0ciwgMTApOwotICAgIGlmIChlbmRwdHIgPT0g c3RyIHx8IHZhbCA9PSBVTE9OR19NQVgpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJ4bDog ZmFpbGVkIHRvIGNvbnZlcnQgXCIlc1wiIHRvIG51bWJlclxuIiwgc3RyKTsKLSAgICAgICAgZXhp dChFWElUX0ZBSUxVUkUpOwotICAgIH0KLSAgICByZXR1cm4gdmFsOwotfQotCi1zdGF0aWMgdm9p ZCByZXBsYWNlX3N0cmluZyhjaGFyICoqc3RyLCBjb25zdCBjaGFyICp2YWwpCi17Ci0gICAgZnJl ZSgqc3RyKTsKLSAgICAqc3RyID0geHN0cmR1cCh2YWwpOwotfQotCi1zdGF0aWMgaW50IG1hdGNo X29wdGlvbl9zaXplKGNvbnN0IGNoYXIgKnByZWZpeCwgc2l6ZV90IGxlbiwKLSAgICAgICAgY2hh ciAqYXJnLCBjaGFyICoqYXJnb3B0KQotewotICAgIGludCByYyA9IHN0cm5jbXAocHJlZml4LCBh cmcsIGxlbik7Ci0gICAgaWYgKCFyYykgKmFyZ29wdCA9IGFyZytsZW47Ci0gICAgcmV0dXJuICFy YzsKLX0KLSNkZWZpbmUgTUFUQ0hfT1BUSU9OKHByZWZpeCwgYXJnLCBvcGFyZykgXAotICAgIG1h dGNoX29wdGlvbl9zaXplKChwcmVmaXggIj0iKSwgc2l6ZW9mKChwcmVmaXgpKSwgKGFyZyksICYo b3BhcmcpKQotCi0vKiBQYXJzZXMgbmV0d29yayBkYXRhIGFuZCBhZGRzIGluZm8gaW50byBuaWMK LSAqIFJldHVybnMgMSBpZiB0aGUgaW5wdXQgdG9rZW4gZG9lcyBub3QgbWF0Y2ggb25lIG9mIHRo ZSBrZXlzCi0gKiBvciBwYXJzZWQgdmFsdWVzIGFyZSBub3QgY29ycmVjdC4gU3VjY2Vzc2Z1bCBw YXJzZSByZXR1cm5zIDAgKi8KLXN0YXRpYyBpbnQgcGFyc2VfbmljX2NvbmZpZyhsaWJ4bF9kZXZp Y2VfbmljICpuaWMsIFhMVV9Db25maWcgKipjb25maWcsIGNoYXIgKnRva2VuKQotewotICAgIGNo YXIgKmVuZHB0ciwgKm9wYXJnOwotICAgIGludCBpOwotICAgIHVuc2lnbmVkIGludCB2YWw7Ci0K LSAgICBpZiAoTUFUQ0hfT1BUSU9OKCJ0eXBlIiwgdG9rZW4sIG9wYXJnKSkgewotICAgICAgICBp ZiAoIXN0cmNtcCgidmlmIiwgb3BhcmcpKSB7Ci0gICAgICAgICAgICBuaWMtPm5pY3R5cGUgPSBM SUJYTF9OSUNfVFlQRV9WSUY7Ci0gICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcCgiaW9lbXUiLCBv cGFyZykpIHsKLSAgICAgICAgICAgIG5pYy0+bmljdHlwZSA9IExJQlhMX05JQ19UWVBFX1ZJRl9J T0VNVTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiSW52 YWxpZCBwYXJhbWV0ZXIgYHR5cGUnLlxuIik7Ci0gICAgICAgICAgICByZXR1cm4gMTsKLSAgICAg ICAgfQotICAgIH0gZWxzZSBpZiAoTUFUQ0hfT1BUSU9OKCJtYWMiLCB0b2tlbiwgb3BhcmcpKSB7 Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCA2OyBpKyspIHsKLSAgICAgICAgICAgIHZhbCA9IHN0 cnRvdWwob3BhcmcsICZlbmRwdHIsIDE2KTsKLSAgICAgICAgICAgIGlmICgob3BhcmcgPT0gZW5k cHRyKSB8fCAodmFsID4gMjU1KSkgewotICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAi SW52YWxpZCBwYXJhbWV0ZXIgYG1hYycuXG4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gMTsK LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG5pYy0+bWFjW2ldID0gdmFsOwotICAgICAgICAg ICAgb3BhcmcgPSBlbmRwdHIgKyAxOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChNQVRDSF9P UFRJT04oImJyaWRnZSIsIHRva2VuLCBvcGFyZykpIHsKLSAgICAgICAgcmVwbGFjZV9zdHJpbmco Jm5pYy0+YnJpZGdlLCBvcGFyZyk7Ci0gICAgfSBlbHNlIGlmIChNQVRDSF9PUFRJT04oIm5ldGRl diIsIHRva2VuLCBvcGFyZykpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJ0aGUgbmV0ZGV2 IHBhcmFtZXRlciBpcyBkZXByZWNhdGVkLCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAicGxl YXNlIHVzZSBnYXRld2F5ZGV2IGluc3RlYWRcbiIpOwotICAgICAgICByZXBsYWNlX3N0cmluZygm bmljLT5nYXRld2F5ZGV2LCBvcGFyZyk7Ci0gICAgfSBlbHNlIGlmIChNQVRDSF9PUFRJT04oImdh dGV3YXlkZXYiLCB0b2tlbiwgb3BhcmcpKSB7Ci0gICAgICAgIHJlcGxhY2Vfc3RyaW5nKCZuaWMt PmdhdGV3YXlkZXYsIG9wYXJnKTsKLSAgICB9IGVsc2UgaWYgKE1BVENIX09QVElPTigiaXAiLCB0 b2tlbiwgb3BhcmcpKSB7Ci0gICAgICAgIHJlcGxhY2Vfc3RyaW5nKCZuaWMtPmlwLCBvcGFyZyk7 Ci0gICAgfSBlbHNlIGlmIChNQVRDSF9PUFRJT04oInNjcmlwdCIsIHRva2VuLCBvcGFyZykpIHsK LSAgICAgICAgcmVwbGFjZV9zdHJpbmcoJm5pYy0+c2NyaXB0LCBvcGFyZyk7Ci0gICAgfSBlbHNl IGlmIChNQVRDSF9PUFRJT04oImJhY2tlbmQiLCB0b2tlbiwgb3BhcmcpKSB7Ci0gICAgICAgIHJl cGxhY2Vfc3RyaW5nKCZuaWMtPmJhY2tlbmRfZG9tbmFtZSwgb3BhcmcpOwotICAgIH0gZWxzZSBp ZiAoTUFUQ0hfT1BUSU9OKCJ2aWZuYW1lIiwgdG9rZW4sIG9wYXJnKSkgewotICAgICAgICByZXBs YWNlX3N0cmluZygmbmljLT5pZm5hbWUsIG9wYXJnKTsKLSAgICB9IGVsc2UgaWYgKE1BVENIX09Q VElPTigibW9kZWwiLCB0b2tlbiwgb3BhcmcpKSB7Ci0gICAgICAgIHJlcGxhY2Vfc3RyaW5nKCZu aWMtPm1vZGVsLCBvcGFyZyk7Ci0gICAgfSBlbHNlIGlmIChNQVRDSF9PUFRJT04oInJhdGUiLCB0 b2tlbiwgb3BhcmcpKSB7Ci0gICAgICAgIHBhcnNlX3ZpZl9yYXRlKGNvbmZpZywgb3BhcmcsIG5p Yyk7Ci0gICAgfSBlbHNlIGlmIChNQVRDSF9PUFRJT04oImZvcndhcmRkZXYiLCB0b2tlbiwgb3Bh cmcpKSB7Ci0gICAgICAgIHJlcGxhY2Vfc3RyaW5nKCZuaWMtPmNvbG9mdF9mb3J3YXJkZGV2LCBv cGFyZyk7Ci0gICAgfSBlbHNlIGlmIChNQVRDSF9PUFRJT04oImFjY2VsIiwgdG9rZW4sIG9wYXJn KSkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInRoZSBhY2NlbCBwYXJhbWV0ZXIgZm9yIHZp ZnMgaXMgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWRcbiIpOwotICAgIH0gZWxzZSBpZiAoTUFUQ0hf T1BUSU9OKCJkZXZpZCIsIHRva2VuLCBvcGFyZykpIHsKLSAgICAgICAgbmljLT5kZXZpZCA9IHBh cnNlX3Vsb25nKG9wYXJnKTsKLSAgICB9IGVsc2UgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwg InVucmVjb2duaXplZCBhcmd1bWVudCBgJXMnXG4iLCB0b2tlbik7Ci0gICAgICAgIHJldHVybiAx OwotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgcGFyc2Vfdm51bWFfY29u ZmlnKGNvbnN0IFhMVV9Db25maWcgKmNvbmZpZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBsaWJ4bF9kb21haW5fYnVpbGRfaW5mbyAqYl9pbmZvKQotewotICAgIGxpYnhsX3BoeXNp bmZvIHBoeXNpbmZvOwotICAgIHVpbnQzMl90IG5yX25vZGVzOwotICAgIFhMVV9Db25maWdMaXN0 ICp2bnVtYTsKLSAgICBpbnQgaSwgaiwgbGVuLCBudW1fdm51bWE7Ci0gICAgdW5zaWduZWQgbG9u ZyBtYXhfdmNwdXMgPSAwLCBtYXhfbWVta2IgPSAwOwotICAgIC8qIFRlbXBvcmFyeSBzdG9yYWdl IGZvciBwYXJzZWQgdmNwdXMgaW5mb3JtYXRpb24gdG8gYXZvaWQKLSAgICAgKiBwYXJzaW5nIGNv bmZpZyB0d2ljZS4gVGhpcyBhcnJheSBoYXMgbnVtX3ZudW1hIGVsZW1lbnRzLgotICAgICAqLwot ICAgIGxpYnhsX2JpdG1hcCAqdmNwdV9wYXJzZWQ7Ci0KLSAgICBsaWJ4bF9waHlzaW5mb19pbml0 KCZwaHlzaW5mbyk7Ci0gICAgaWYgKGxpYnhsX2dldF9waHlzaW5mbyhjdHgsICZwaHlzaW5mbykg IT0gMCkgewotICAgICAgICBsaWJ4bF9waHlzaW5mb19kaXNwb3NlKCZwaHlzaW5mbyk7Ci0gICAg ICAgIGZwcmludGYoc3RkZXJyLCAibGlieGxfZ2V0X3BoeXNpbmZvIGZhaWxlZFxuIik7Ci0gICAg ICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKLSAgICB9Ci0KLSAgICBucl9ub2RlcyA9IHBoeXNpbmZv Lm5yX25vZGVzOwotICAgIGxpYnhsX3BoeXNpbmZvX2Rpc3Bvc2UoJnBoeXNpbmZvKTsKLQotICAg IGlmICh4bHVfY2ZnX2dldF9saXN0KGNvbmZpZywgInZudW1hIiwgJnZudW1hLCAmbnVtX3ZudW1h LCAxKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFudW1fdm51bWEpCi0gICAgICAgIHJl dHVybjsKLQotICAgIGJfaW5mby0+bnVtX3ZudW1hX25vZGVzID0gbnVtX3ZudW1hOwotICAgIGJf aW5mby0+dm51bWFfbm9kZXMgPSB4Y2FsbG9jKG51bV92bnVtYSwgc2l6ZW9mKGxpYnhsX3Zub2Rl X2luZm8pKTsKLSAgICB2Y3B1X3BhcnNlZCA9IHhjYWxsb2MobnVtX3ZudW1hLCBzaXplb2YobGli eGxfYml0bWFwKSk7Ci0gICAgZm9yIChpID0gMDsgaSA8IG51bV92bnVtYTsgaSsrKSB7Ci0gICAg ICAgIGxpYnhsX2JpdG1hcF9pbml0KCZ2Y3B1X3BhcnNlZFtpXSk7Ci0gICAgICAgIGlmIChsaWJ4 bF9jcHVfYml0bWFwX2FsbG9jKGN0eCwgJnZjcHVfcGFyc2VkW2ldLCBiX2luZm8tPm1heF92Y3B1 cykpIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAibGlieGxfbm9kZV9iaXRtYXBfYWxs b2MgZmFpbGVkLlxuIik7Ci0gICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgICAg IH0KLSAgICB9Ci0KLSAgICBmb3IgKGkgPSAwOyBpIDwgYl9pbmZvLT5udW1fdm51bWFfbm9kZXM7 IGkrKykgewotICAgICAgICBsaWJ4bF92bm9kZV9pbmZvICpwID0gJmJfaW5mby0+dm51bWFfbm9k ZXNbaV07Ci0KLSAgICAgICAgbGlieGxfdm5vZGVfaW5mb19pbml0KHApOwotICAgICAgICBwLT5k aXN0YW5jZXMgPSB4Y2FsbG9jKGJfaW5mby0+bnVtX3ZudW1hX25vZGVzLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHNpemVvZigqcC0+ZGlzdGFuY2VzKSk7Ci0gICAgICAgIHAtPm51 bV9kaXN0YW5jZXMgPSBiX2luZm8tPm51bV92bnVtYV9ub2RlczsKLSAgICB9Ci0KLSAgICBmb3Ig KGkgPSAwOyBpIDwgbnVtX3ZudW1hOyBpKyspIHsKLSAgICAgICAgWExVX0NvbmZpZ1ZhbHVlICp2 bm9kZV9zcGVjLCAqY29uZl9vcHRpb247Ci0gICAgICAgIFhMVV9Db25maWdMaXN0ICp2bm9kZV9j b25maWdfbGlzdDsKLSAgICAgICAgaW50IGNvbmZfY291bnQ7Ci0gICAgICAgIGxpYnhsX3Zub2Rl X2luZm8gKnAgPSAmYl9pbmZvLT52bnVtYV9ub2Rlc1tpXTsKLQotICAgICAgICB2bm9kZV9zcGVj ID0geGx1X2NmZ19nZXRfbGlzdGl0ZW0yKHZudW1hLCBpKTsKLSAgICAgICAgYXNzZXJ0KHZub2Rl X3NwZWMpOwotCi0gICAgICAgIHhsdV9jZmdfdmFsdWVfZ2V0X2xpc3QoY29uZmlnLCB2bm9kZV9z cGVjLCAmdm5vZGVfY29uZmlnX2xpc3QsIDApOwotICAgICAgICBpZiAoIXZub2RlX2NvbmZpZ19s aXN0KSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInhsOiBjYW5ub3QgZ2V0IHZub2Rl IGNvbmZpZyBvcHRpb24gbGlzdFxuIik7Ci0gICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7 Ci0gICAgICAgIH0KLQotICAgICAgICBmb3IgKGNvbmZfY291bnQgPSAwOwotICAgICAgICAgICAg IChjb25mX29wdGlvbiA9Ci0gICAgICAgICAgICAgIHhsdV9jZmdfZ2V0X2xpc3RpdGVtMih2bm9k ZV9jb25maWdfbGlzdCwgY29uZl9jb3VudCkpOwotICAgICAgICAgICAgIGNvbmZfY291bnQrKykg ewotCi0gICAgICAgICAgICBpZiAoeGx1X2NmZ192YWx1ZV90eXBlKGNvbmZfb3B0aW9uKSA9PSBY TFVfU1RSSU5HKSB7Ci0gICAgICAgICAgICAgICAgY2hhciAqYnVmLCAqb3B0aW9uX3VudHJpbW1l ZCwgKnZhbHVlX3VudHJpbW1lZDsKLSAgICAgICAgICAgICAgICBjaGFyICpvcHRpb24sICp2YWx1 ZTsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHZhbDsKLQotICAgICAgICAgICAgICAg IHhsdV9jZmdfdmFsdWVfZ2V0X3N0cmluZyhjb25maWcsIGNvbmZfb3B0aW9uLCAmYnVmLCAwKTsK LQotICAgICAgICAgICAgICAgIGlmICghYnVmKSBjb250aW51ZTsKLQotICAgICAgICAgICAgICAg IGlmIChzcGxpdF9zdHJpbmdfaW50b19wYWlyKGJ1ZiwgIj0iLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICZvcHRpb25fdW50cmltbWVkLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ2YWx1ZV91bnRyaW1tZWQpKSB7Ci0gICAg ICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAieGw6IGZhaWxlZCB0byBzcGxpdCBcIiVz XCIgaW50byBwYWlyXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1Zik7Ci0gICAg ICAgICAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKLSAgICAgICAgICAgICAgICB9Ci0g ICAgICAgICAgICAgICAgdHJpbShpc3NwYWNlLCBvcHRpb25fdW50cmltbWVkLCAmb3B0aW9uKTsK LSAgICAgICAgICAgICAgICB0cmltKGlzc3BhY2UsIHZhbHVlX3VudHJpbW1lZCwgJnZhbHVlKTsK LQotICAgICAgICAgICAgICAgIGlmICghc3RyY21wKCJwbm9kZSIsIG9wdGlvbikpIHsKLSAgICAg ICAgICAgICAgICAgICAgdmFsID0gcGFyc2VfdWxvbmcodmFsdWUpOwotICAgICAgICAgICAgICAg ICAgICBpZiAodmFsID49IG5yX25vZGVzKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmcHJp bnRmKHN0ZGVyciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInhsOiBpbnZhbGlk IHBub2RlIG51bWJlcjogJWx1XG4iLCB2YWwpOwotICAgICAgICAgICAgICAgICAgICAgICAgZXhp dChFWElUX0ZBSUxVUkUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg ICAgIHAtPnBub2RlID0gdmFsOwotICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZWZib29sX3Nl dCgmYl9pbmZvLT5udW1hX3BsYWNlbWVudCwgZmFsc2UpOwotICAgICAgICAgICAgICAgIH0gZWxz ZSBpZiAoIXN0cmNtcCgic2l6ZSIsIG9wdGlvbikpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFs ID0gcGFyc2VfdWxvbmcodmFsdWUpOwotICAgICAgICAgICAgICAgICAgICBwLT5tZW1rYiA9IHZh bCA8PCAxMDsKLSAgICAgICAgICAgICAgICAgICAgbWF4X21lbWtiICs9IHAtPm1lbWtiOwotICAg ICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcCgidmNwdXMiLCBvcHRpb24pKSB7Ci0gICAg ICAgICAgICAgICAgICAgIGxpYnhsX3N0cmluZ19saXN0IGNwdV9zcGVjX2xpc3Q7Ci0gICAgICAg ICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgcywgZTsKLQotICAgICAgICAgICAgICAgICAgICBz cGxpdF9zdHJpbmdfaW50b19zdHJpbmdfbGlzdCh2YWx1ZSwgIiwiLCAmY3B1X3NwZWNfbGlzdCk7 Ci0gICAgICAgICAgICAgICAgICAgIGxlbiA9IGxpYnhsX3N0cmluZ19saXN0X2xlbmd0aCgmY3B1 X3NwZWNfbGlzdCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGxlbjsg aisrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZV9yYW5nZShjcHVfc3BlY19saXN0 W2pdLCAmcywgJmUpOwotICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IHMgPD0gZTsgcysr KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKiBOb3RlIHRoYXQgaWYgd2UgdHJ5IHRvIHNldCBhIGJpdCBiZXlvbmQKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKiB0aGUgc2l6ZSBvZiBiaXRtYXAsIGxpYnhsX2JpdG1h cF9zZXQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBoYXMgbm8gZWZmZWN0LiBUaGUg cmVzdWx0ZWQgYml0bWFwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICogZG9lc24ndCBy ZWZsZWN0IHdoYXQgdXNlciB3YW50cy4gVGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICogZmFsbG91dCBpcyBkZWFsdCB3aXRoIGxhdGVyIGFmdGVyCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICogcGFyc2luZy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9iaXRtYXBfc2V0KCZ2Y3B1X3BhcnNlZFtp XSwgcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4X3ZjcHVzKys7Ci0gICAgICAg ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg ICAgICAgICBsaWJ4bF9zdHJpbmdfbGlzdF9kaXNwb3NlKCZjcHVfc3BlY19saXN0KTsKLSAgICAg ICAgICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoInZkaXN0YW5jZXMiLCBvcHRpb24pKSB7Ci0g ICAgICAgICAgICAgICAgICAgIGxpYnhsX3N0cmluZ19saXN0IHZkaXN0OwotCi0gICAgICAgICAg ICAgICAgICAgIHNwbGl0X3N0cmluZ19pbnRvX3N0cmluZ19saXN0KHZhbHVlLCAiLCIsICZ2ZGlz dCk7Ci0gICAgICAgICAgICAgICAgICAgIGxlbiA9IGxpYnhsX3N0cmluZ19saXN0X2xlbmd0aCgm dmRpc3QpOwotCi0gICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBsZW47IGorKykg ewotICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gcGFyc2VfdWxvbmcodmRpc3Rbal0pOwot ICAgICAgICAgICAgICAgICAgICAgICAgcC0+ZGlzdGFuY2VzW2pdID0gdmFsOwotICAgICAgICAg ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGxpYnhsX3N0cmluZ19saXN0X2Rpc3Bv c2UoJnZkaXN0KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZnJlZShvcHRp b24pOwotICAgICAgICAgICAgICAgIGZyZWUodmFsdWUpOwotICAgICAgICAgICAgICAgIGZyZWUo b3B0aW9uX3VudHJpbW1lZCk7Ci0gICAgICAgICAgICAgICAgZnJlZSh2YWx1ZV91bnRyaW1tZWQp OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyogVXNlciBoYXMgc3Bl Y2lmaWVkIG1heHZjcHVzPSAqLwotICAgIGlmIChiX2luZm8tPm1heF92Y3B1cyAhPSAwKSB7Ci0g ICAgICAgIGlmIChiX2luZm8tPm1heF92Y3B1cyAhPSBtYXhfdmNwdXMpIHsKLSAgICAgICAgICAg IGZwcmludGYoc3RkZXJyLCAieGw6IHZudW1hIHZjcHVzIGFuZCBtYXh2Y3B1cz0gbWlzbWF0Y2hc biIpOwotICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwotICAgICAgICB9Ci0gICAgfSBl bHNlIHsKLSAgICAgICAgaW50IGhvc3RfY3B1cyA9IGxpYnhsX2dldF9vbmxpbmVfY3B1cyhjdHgp OwotCi0gICAgICAgIGlmIChob3N0X2NwdXMgPCAwKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0 ZGVyciwgIkZhaWxlZCB0byBnZXQgb25saW5lIGNwdXNcbiIpOwotICAgICAgICAgICAgZXhpdChF WElUX0ZBSUxVUkUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGhvc3RfY3B1cyA8IG1heF92 Y3B1cykgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJ4bDogdm51bWEgc3BlY2lmaWVz IG1vcmUgdmNwdXMgdGhhbiBwY3B1cywgIlwKLSAgICAgICAgICAgICAgICAgICAgInVzZSBtYXh2 Y3B1cz0gdG8gb3ZlcnJpZGUgdGhpcyBjaGVjay5cbiIpOwotICAgICAgICAgICAgZXhpdChFWElU X0ZBSUxVUkUpOwotICAgICAgICB9Ci0KLSAgICAgICAgYl9pbmZvLT5tYXhfdmNwdXMgPSBtYXhf dmNwdXM7Ci0gICAgfQotCi0gICAgLyogVXNlciBoYXMgc3BlY2lmaWVkIG1heG1lbT0gKi8KLSAg ICBpZiAoYl9pbmZvLT5tYXhfbWVta2IgIT0gTElCWExfTUVNS0JfREVGQVVMVCAmJgotICAgICAg ICBiX2luZm8tPm1heF9tZW1rYiAhPSBtYXhfbWVta2IpIHsKLSAgICAgICAgZnByaW50ZihzdGRl cnIsICJ4bDogbWF4bWVtIGFuZCB2bnVtYSBtZW1vcnkgc2l6ZSBtaXNtYXRjaFxuIik7Ci0gICAg ICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKLSAgICB9IGVsc2UKLSAgICAgICAgYl9pbmZvLT5tYXhf bWVta2IgPSBtYXhfbWVta2I7Ci0KLSAgICBmb3IgKGkgPSAwOyBpIDwgYl9pbmZvLT5udW1fdm51 bWFfbm9kZXM7IGkrKykgewotICAgICAgICBsaWJ4bF92bm9kZV9pbmZvICpwID0gJmJfaW5mby0+ dm51bWFfbm9kZXNbaV07Ci0KLSAgICAgICAgbGlieGxfYml0bWFwX2NvcHlfYWxsb2MoY3R4LCAm cC0+dmNwdXMsICZ2Y3B1X3BhcnNlZFtpXSk7Ci0gICAgICAgIGxpYnhsX2JpdG1hcF9kaXNwb3Nl KCZ2Y3B1X3BhcnNlZFtpXSk7Ci0gICAgfQotCi0gICAgZnJlZSh2Y3B1X3BhcnNlZCk7Ci19Ci0K LS8qIFBhcnNlcyB1c2JjdHJsIGRhdGEgYW5kIGFkZHMgaW5mbyBpbnRvIHVzYmN0cmwKLSAqIFJl dHVybnMgMSBpZiB0aGUgaW5wdXQgdG9rZW4gZG9lcyBub3QgbWF0Y2ggb25lIG9mIHRoZSBrZXlz Ci0gKiBvciBwYXJzZWQgdmFsdWVzIGFyZSBub3QgY29ycmVjdC4gU3VjY2Vzc2Z1bCBwYXJzZSBy ZXR1cm5zIDAgKi8KLXN0YXRpYyBpbnQgcGFyc2VfdXNiY3RybF9jb25maWcobGlieGxfZGV2aWNl X3VzYmN0cmwgKnVzYmN0cmwsIGNoYXIgKnRva2VuKQotewotICAgIGNoYXIgKm9wYXJnOwotCi0g ICAgaWYgKE1BVENIX09QVElPTigidHlwZSIsIHRva2VuLCBvcGFyZykpIHsKLSAgICAgICAgaWYg KGxpYnhsX3VzYmN0cmxfdHlwZV9mcm9tX3N0cmluZyhvcGFyZywgJnVzYmN0cmwtPnR5cGUpKSB7 Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgdXNiIGNvbnRyb2xsZXIgdHlw ZSAnJXMnXG4iLCBvcGFyZyk7Ci0gICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgfQotICAg IH0gZWxzZSBpZiAoTUFUQ0hfT1BUSU9OKCJ2ZXJzaW9uIiwgdG9rZW4sIG9wYXJnKSkgewotICAg ICAgICB1c2JjdHJsLT52ZXJzaW9uID0gYXRvaShvcGFyZyk7Ci0gICAgfSBlbHNlIGlmIChNQVRD SF9PUFRJT04oInBvcnRzIiwgdG9rZW4sIG9wYXJnKSkgewotICAgICAgICB1c2JjdHJsLT5wb3J0 cyA9IGF0b2kob3BhcmcpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAi VW5rbm93biBzdHJpbmcgYCVzJyBpbiB1c2JjdHJsIHNwZWNcbiIsIHRva2VuKTsKLSAgICAgICAg cmV0dXJuIDE7Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLS8qIFBhcnNlcyB1c2JkZXYg ZGF0YSBhbmQgYWRkcyBpbmZvIGludG8gdXNiZGV2Ci0gKiBSZXR1cm5zIDEgaWYgdGhlIGlucHV0 IHRva2VuIGRvZXMgbm90IG1hdGNoIG9uZSBvZiB0aGUga2V5cwotICogb3IgcGFyc2VkIHZhbHVl cyBhcmUgbm90IGNvcnJlY3QuIFN1Y2Nlc3NmdWwgcGFyc2UgcmV0dXJucyAwICovCi1zdGF0aWMg aW50IHBhcnNlX3VzYmRldl9jb25maWcobGlieGxfZGV2aWNlX3VzYmRldiAqdXNiZGV2LCBjaGFy ICp0b2tlbikKLXsKLSAgICBjaGFyICpvcGFyZzsKLQotICAgIGlmIChNQVRDSF9PUFRJT04oInR5 cGUiLCB0b2tlbiwgb3BhcmcpKSB7Ci0gICAgICAgIGlmIChsaWJ4bF91c2JkZXZfdHlwZV9mcm9t X3N0cmluZyhvcGFyZywgJnVzYmRldi0+dHlwZSkpIHsKLSAgICAgICAgICAgIGZwcmludGYoc3Rk ZXJyLCAiSW52YWxpZCB1c2IgZGV2aWNlIHR5cGU6ICVzXG4iLCBvcHRhcmcpOwotICAgICAgICAg ICAgcmV0dXJuIDE7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKE1BVENIX09QVElPTigiaG9z dGJ1cyIsIHRva2VuLCBvcGFyZykpIHsKLSAgICAgICAgdXNiZGV2LT51Lmhvc3RkZXYuaG9zdGJ1 cyA9IHN0cnRvdWwob3BhcmcsIE5VTEwsIDApOwotICAgIH0gZWxzZSBpZiAoTUFUQ0hfT1BUSU9O KCJob3N0YWRkciIsIHRva2VuLCBvcGFyZykpIHsKLSAgICAgICAgdXNiZGV2LT51Lmhvc3RkZXYu aG9zdGFkZHIgPSBzdHJ0b3VsKG9wYXJnLCBOVUxMLCAwKTsKLSAgICB9IGVsc2UgaWYgKE1BVENI X09QVElPTigiY29udHJvbGxlciIsIHRva2VuLCBvcGFyZykpIHsKLSAgICAgICAgdXNiZGV2LT5j dHJsID0gYXRvaShvcGFyZyk7Ci0gICAgfSBlbHNlIGlmIChNQVRDSF9PUFRJT04oInBvcnQiLCB0 b2tlbiwgb3BhcmcpKSB7Ci0gICAgICAgIHVzYmRldi0+cG9ydCA9IGF0b2kob3BhcmcpOwotICAg IH0gZWxzZSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiVW5rbm93biBzdHJpbmcgYCVzJyBp biB1c2JkZXYgc3BlY1xuIiwgdG9rZW4pOwotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0KLSAg ICByZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgcGFyc2VfY29uZmlnX2RhdGEoY29uc3QgY2hh ciAqY29uZmlnX3NvdXJjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNo YXIgKmNvbmZpZ19kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvbmZp Z19sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kb21haW5fY29uZmln ICpkX2NvbmZpZykKLXsKLSAgICBjb25zdCBjaGFyICpidWY7Ci0gICAgbG9uZyBsLCB2Y3B1cyA9 IDA7Ci0gICAgWExVX0NvbmZpZyAqY29uZmlnOwotICAgIFhMVV9Db25maWdMaXN0ICpjcHVzLCAq dmJkcywgKm5pY3MsICpwY2lzLCAqY3ZmYnMsICpjcHVpZHMsICp2dHBtcywKLSAgICAgICAgICAg ICAgICAgICAqdXNiY3RybHMsICp1c2JkZXZzOwotICAgIFhMVV9Db25maWdMaXN0ICpjaGFubmVs cywgKmlvcG9ydHMsICppcnFzLCAqaW9tZW0sICp2aXJpZGlhbiwgKmR0ZGV2czsKLSAgICBpbnQg bnVtX2lvcG9ydHMsIG51bV9pcnFzLCBudW1faW9tZW0sIG51bV9jcHVzLCBudW1fdmlyaWRpYW47 Ci0gICAgaW50IHBjaV9wb3dlcl9tZ210ID0gMDsKLSAgICBpbnQgcGNpX21zaXRyYW5zbGF0ZSA9 IDA7Ci0gICAgaW50IHBjaV9wZXJtaXNzaXZlID0gMDsKLSAgICBpbnQgcGNpX3NlaXplID0gMDsK LSAgICBpbnQgaSwgZTsKLSAgICBjaGFyICprZXJuZWxfYmFzZW5hbWU7Ci0KLSAgICBsaWJ4bF9k b21haW5fY3JlYXRlX2luZm8gKmNfaW5mbyA9ICZkX2NvbmZpZy0+Y19pbmZvOwotICAgIGxpYnhs X2RvbWFpbl9idWlsZF9pbmZvICpiX2luZm8gPSAmZF9jb25maWctPmJfaW5mbzsKLQotICAgIGNv bmZpZz0geGx1X2NmZ19pbml0KHN0ZGVyciwgY29uZmlnX3NvdXJjZSk7Ci0gICAgaWYgKCFjb25m aWcpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gYWxsb2NhdGUgZm9yIGNv bmZpZ3VyYXRpb25cbiIpOwotICAgICAgICBleGl0KDEpOwotICAgIH0KLQotICAgIGU9IHhsdV9j ZmdfcmVhZGRhdGEoY29uZmlnLCBjb25maWdfZGF0YSwgY29uZmlnX2xlbik7Ci0gICAgaWYgKGUp IHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gcGFyc2UgY29uZmlnOiAlc1xu Iiwgc3RyZXJyb3IoZSkpOwotICAgICAgICBleGl0KDEpOwotICAgIH0KLQotICAgIGlmICgheGx1 X2NmZ19nZXRfc3RyaW5nIChjb25maWcsICJpbml0X3NlY2xhYmVsIiwgJmJ1ZiwgMCkpCi0gICAg ICAgIHhsdV9jZmdfcmVwbGFjZV9zdHJpbmcoY29uZmlnLCAiaW5pdF9zZWNsYWJlbCIsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNfaW5mby0+c3NpZF9sYWJlbCwgMCk7Ci0KLSAg ICBpZiAoIXhsdV9jZmdfZ2V0X3N0cmluZyAoY29uZmlnLCAic2VjbGFiZWwiLCAmYnVmLCAwKSkg ewotICAgICAgICBpZiAoY19pbmZvLT5zc2lkX2xhYmVsKQotICAgICAgICAgICAgeGx1X2NmZ19y ZXBsYWNlX3N0cmluZyhjb25maWcsICJzZWNsYWJlbCIsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICZiX2luZm8tPmV4ZWNfc3NpZF9sYWJlbCwgMCk7Ci0gICAgICAgIGVsc2UK LSAgICAgICAgICAgIHhsdV9jZmdfcmVwbGFjZV9zdHJpbmcoY29uZmlnLCAic2VjbGFiZWwiLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY19pbmZvLT5zc2lkX2xhYmVsLCAw KTsKLSAgICB9Ci0KLSAgICBsaWJ4bF9kZWZib29sX3NldCgmY19pbmZvLT5ydW5faG90cGx1Z19z Y3JpcHRzLCBydW5faG90cGx1Z19zY3JpcHRzKTsKLSAgICBjX2luZm8tPnR5cGUgPSBMSUJYTF9E T01BSU5fVFlQRV9QVjsKLSAgICBpZiAoIXhsdV9jZmdfZ2V0X3N0cmluZyAoY29uZmlnLCAiYnVp bGRlciIsICZidWYsIDApICYmCi0gICAgICAgICFzdHJuY21wKGJ1ZiwgImh2bSIsIHN0cmxlbihi dWYpKSkKLSAgICAgICAgY19pbmZvLT50eXBlID0gTElCWExfRE9NQUlOX1RZUEVfSFZNOwotCi0g ICAgeGx1X2NmZ19nZXRfZGVmYm9vbChjb25maWcsICJwdmgiLCAmY19pbmZvLT5wdmgsIDApOwot ICAgIHhsdV9jZmdfZ2V0X2RlZmJvb2woY29uZmlnLCAiaGFwIiwgJmNfaW5mby0+aGFwLCAwKTsK LQotICAgIGlmICh4bHVfY2ZnX3JlcGxhY2Vfc3RyaW5nIChjb25maWcsICJuYW1lIiwgJmNfaW5m by0+bmFtZSwgMCkpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJEb21haW4gbmFtZSBtdXN0 IGJlIHNwZWNpZmllZC5cbiIpOwotICAgICAgICBleGl0KDEpOwotICAgIH0KLQotICAgIGlmICgh eGx1X2NmZ19nZXRfc3RyaW5nIChjb25maWcsICJ1dWlkIiwgJmJ1ZiwgMCkgKSB7Ci0gICAgICAg IGlmICggbGlieGxfdXVpZF9mcm9tX3N0cmluZygmY19pbmZvLT51dWlkLCBidWYpICkgewotICAg ICAgICAgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gcGFyc2UgVVVJRDogJXNcbiIsIGJ1 Zik7Ci0gICAgICAgICAgICBleGl0KDEpOwotICAgICAgICB9Ci0gICAgfWVsc2V7Ci0gICAgICAg IGxpYnhsX3V1aWRfZ2VuZXJhdGUoJmNfaW5mby0+dXVpZCk7Ci0gICAgfQotCi0gICAgeGx1X2Nm Z19nZXRfZGVmYm9vbChjb25maWcsICJvb3MiLCAmY19pbmZvLT5vb3MsIDApOwotCi0gICAgaWYg KCF4bHVfY2ZnX2dldF9zdHJpbmcgKGNvbmZpZywgInBvb2wiLCAmYnVmLCAwKSkKLSAgICAgICAg eGx1X2NmZ19yZXBsYWNlX3N0cmluZyhjb25maWcsICJwb29sIiwgJmNfaW5mby0+cG9vbF9uYW1l LCAwKTsKLQotICAgIGxpYnhsX2RvbWFpbl9idWlsZF9pbmZvX2luaXRfdHlwZShiX2luZm8sIGNf aW5mby0+dHlwZSk7Ci0gICAgaWYgKGJsa2Rldl9zdGFydCkKLSAgICAgICAgYl9pbmZvLT5ibGtk ZXZfc3RhcnQgPSBzdHJkdXAoYmxrZGV2X3N0YXJ0KTsKLQotICAgIC8qIHRoZSBmb2xsb3dpbmcg aXMgdGhlIGFjdHVhbCBjb25maWcgcGFyc2luZyB3aXRoIG92ZXJyaWRpbmcKLSAgICAgKiB2YWx1 ZXMgaW4gdGhlIHN0cnVjdHVyZXMgKi8KLSAgICBpZiAoIXhsdV9jZmdfZ2V0X2xvbmcgKGNvbmZp ZywgImNwdV93ZWlnaHQiLCAmbCwgMCkpCi0gICAgICAgIGJfaW5mby0+c2NoZWRfcGFyYW1zLndl aWdodCA9IGw7Ci0gICAgaWYgKCF4bHVfY2ZnX2dldF9sb25nIChjb25maWcsICJjYXAiLCAmbCwg MCkpCi0gICAgICAgIGJfaW5mby0+c2NoZWRfcGFyYW1zLmNhcCA9IGw7Ci0gICAgaWYgKCF4bHVf Y2ZnX2dldF9sb25nIChjb25maWcsICJwZXJpb2QiLCAmbCwgMCkpCi0gICAgICAgIGJfaW5mby0+ c2NoZWRfcGFyYW1zLnBlcmlvZCA9IGw7Ci0gICAgaWYgKCF4bHVfY2ZnX2dldF9sb25nIChjb25m aWcsICJzbGljZSIsICZsLCAwKSkKLSAgICAgICAgYl9pbmZvLT5zY2hlZF9wYXJhbXMuc2xpY2Ug PSBsOwotICAgIGlmICgheGx1X2NmZ19nZXRfbG9uZyAoY29uZmlnLCAibGF0ZW5jeSIsICZsLCAw KSkKLSAgICAgICAgYl9pbmZvLT5zY2hlZF9wYXJhbXMubGF0ZW5jeSA9IGw7Ci0gICAgaWYgKCF4 bHVfY2ZnX2dldF9sb25nIChjb25maWcsICJleHRyYXRpbWUiLCAmbCwgMCkpCi0gICAgICAgIGJf aW5mby0+c2NoZWRfcGFyYW1zLmV4dHJhdGltZSA9IGw7Ci0KLSAgICBpZiAoIXhsdV9jZmdfZ2V0 X2xvbmcgKGNvbmZpZywgIm1lbW9yeSIsICZsLCAwKSkKLSAgICAgICAgYl9pbmZvLT50YXJnZXRf bWVta2IgPSBsICogMTAyNDsKLQotICAgIGlmICgheGx1X2NmZ19nZXRfbG9uZyAoY29uZmlnLCAi bWF4bWVtIiwgJmwsIDApKQotICAgICAgICBiX2luZm8tPm1heF9tZW1rYiA9IGwgKiAxMDI0Owot Ci0gICAgaWYgKCF4bHVfY2ZnX2dldF9sb25nIChjb25maWcsICJ2Y3B1cyIsICZsLCAwKSkgewot ICAgICAgICB2Y3B1cyA9IGw7Ci0gICAgICAgIGlmIChsaWJ4bF9jcHVfYml0bWFwX2FsbG9jKGN0 eCwgJmJfaW5mby0+YXZhaWxfdmNwdXMsIGwpKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVy ciwgIlVuYWJsZSB0byBhbGxvY2F0ZSBjcHVtYXBcbiIpOwotICAgICAgICAgICAgZXhpdCgxKTsK LSAgICAgICAgfQotICAgICAgICBsaWJ4bF9iaXRtYXBfc2V0X25vbmUoJmJfaW5mby0+YXZhaWxf dmNwdXMpOwotICAgICAgICB3aGlsZSAobC0tID4gMCkKLSAgICAgICAgICAgIGxpYnhsX2JpdG1h cF9zZXQoKCZiX2luZm8tPmF2YWlsX3ZjcHVzKSwgbCk7Ci0gICAgfQotCi0gICAgaWYgKCF4bHVf Y2ZnX2dldF9sb25nIChjb25maWcsICJtYXh2Y3B1cyIsICZsLCAwKSkKLSAgICAgICAgYl9pbmZv LT5tYXhfdmNwdXMgPSBsOwotCi0gICAgcGFyc2Vfdm51bWFfY29uZmlnKGNvbmZpZywgYl9pbmZv KTsKLQotICAgIC8qIFNldCBtYXhfbWVta2IgdG8gdGFyZ2V0X21lbWtiIGFuZCBtYXhfdmNwdXMg dG8gYXZhaWxfdmNwdXMgaWYKLSAgICAgKiB0aGV5IGFyZSBub3Qgc2V0IGJ5IHVzZXIgc3BlY2lm aWVkIGNvbmZpZyBvcHRpb24gb3Igdm51bWEuCi0gICAgICovCi0gICAgaWYgKGJfaW5mby0+bWF4 X21lbWtiID09IExJQlhMX01FTUtCX0RFRkFVTFQpCi0gICAgICAgIGJfaW5mby0+bWF4X21lbWti ID0gYl9pbmZvLT50YXJnZXRfbWVta2I7Ci0gICAgaWYgKGJfaW5mby0+bWF4X3ZjcHVzID09IDAp Ci0gICAgICAgIGJfaW5mby0+bWF4X3ZjcHVzID0gdmNwdXM7Ci0KLSAgICBpZiAoYl9pbmZvLT5t YXhfdmNwdXMgPCB2Y3B1cykgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInhsOiBtYXh2Y3B1 cyA8IHZjcHVzXG4iKTsKLSAgICAgICAgZXhpdCgxKTsKLSAgICB9Ci0KLSAgICBidWYgPSBOVUxM OwotICAgIGlmICgheGx1X2NmZ19nZXRfbGlzdCAoY29uZmlnLCAiY3B1cyIsICZjcHVzLCAmbnVt X2NwdXMsIDEpIHx8Ci0gICAgICAgICF4bHVfY2ZnX2dldF9zdHJpbmcgKGNvbmZpZywgImNwdXMi LCAmYnVmLCAwKSkKLSAgICAgICAgcGFyc2VfdmNwdV9hZmZpbml0eShiX2luZm8sIGNwdXMsIGJ1 ZiwgbnVtX2NwdXMsIC8qIGlzX2hhcmQgKi8gdHJ1ZSk7Ci0KLSAgICBidWYgPSBOVUxMOwotICAg IGlmICgheGx1X2NmZ19nZXRfbGlzdCAoY29uZmlnLCAiY3B1c19zb2Z0IiwgJmNwdXMsICZudW1f Y3B1cywgMSkgfHwKLSAgICAgICAgIXhsdV9jZmdfZ2V0X3N0cmluZyAoY29uZmlnLCAiY3B1c19z b2Z0IiwgJmJ1ZiwgMCkpCi0gICAgICAgIHBhcnNlX3ZjcHVfYWZmaW5pdHkoYl9pbmZvLCBjcHVz LCBidWYsIG51bV9jcHVzLCBmYWxzZSk7Ci0KLSAgICBsaWJ4bF9kZWZib29sX3NldCgmYl9pbmZv LT5jbGFpbV9tb2RlLCBjbGFpbV9tb2RlKTsKLQotICAgIGlmICh4bHVfY2ZnX2dldF9zdHJpbmcg KGNvbmZpZywgIm9uX3Bvd2Vyb2ZmIiwgJmJ1ZiwgMCkpCi0gICAgICAgIGJ1ZiA9ICJkZXN0cm95 IjsKLSAgICBpZiAoIXBhcnNlX2FjdGlvbl9vbl9zaHV0ZG93bihidWYsICZkX2NvbmZpZy0+b25f cG93ZXJvZmYpKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiVW5rbm93biBvbl9wb3dlcm9m ZiBhY3Rpb24gXCIlc1wiIHNwZWNpZmllZFxuIiwgYnVmKTsKLSAgICAgICAgZXhpdCgxKTsKLSAg ICB9Ci0KLSAgICBpZiAoeGx1X2NmZ19nZXRfc3RyaW5nIChjb25maWcsICJvbl9yZWJvb3QiLCAm YnVmLCAwKSkKLSAgICAgICAgYnVmID0gInJlc3RhcnQiOwotICAgIGlmICghcGFyc2VfYWN0aW9u X29uX3NodXRkb3duKGJ1ZiwgJmRfY29uZmlnLT5vbl9yZWJvb3QpKSB7Ci0gICAgICAgIGZwcmlu dGYoc3RkZXJyLCAiVW5rbm93biBvbl9yZWJvb3QgYWN0aW9uIFwiJXNcIiBzcGVjaWZpZWRcbiIs IGJ1Zik7Ci0gICAgICAgIGV4aXQoMSk7Ci0gICAgfQotCi0gICAgaWYgKHhsdV9jZmdfZ2V0X3N0 cmluZyAoY29uZmlnLCAib25fd2F0Y2hkb2ciLCAmYnVmLCAwKSkKLSAgICAgICAgYnVmID0gImRl c3Ryb3kiOwotICAgIGlmICghcGFyc2VfYWN0aW9uX29uX3NodXRkb3duKGJ1ZiwgJmRfY29uZmln LT5vbl93YXRjaGRvZykpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJVbmtub3duIG9uX3dh dGNoZG9nIGFjdGlvbiBcIiVzXCIgc3BlY2lmaWVkXG4iLCBidWYpOwotICAgICAgICBleGl0KDEp OwotICAgIH0KLQotCi0gICAgaWYgKHhsdV9jZmdfZ2V0X3N0cmluZyAoY29uZmlnLCAib25fY3Jh c2giLCAmYnVmLCAwKSkKLSAgICAgICAgYnVmID0gImRlc3Ryb3kiOwotICAgIGlmICghcGFyc2Vf YWN0aW9uX29uX3NodXRkb3duKGJ1ZiwgJmRfY29uZmlnLT5vbl9jcmFzaCkpIHsKLSAgICAgICAg ZnByaW50ZihzdGRlcnIsICJVbmtub3duIG9uX2NyYXNoIGFjdGlvbiBcIiVzXCIgc3BlY2lmaWVk XG4iLCBidWYpOwotICAgICAgICBleGl0KDEpOwotICAgIH0KLQotICAgIGlmICh4bHVfY2ZnX2dl dF9zdHJpbmcgKGNvbmZpZywgIm9uX3NvZnRfcmVzZXQiLCAmYnVmLCAwKSkKLSAgICAgICAgYnVm ID0gInNvZnQtcmVzZXQiOwotICAgIGlmICghcGFyc2VfYWN0aW9uX29uX3NodXRkb3duKGJ1Ziwg JmRfY29uZmlnLT5vbl9zb2Z0X3Jlc2V0KSkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlVu a25vd24gb25fc29mdF9yZXNldCBhY3Rpb24gXCIlc1wiIHNwZWNpZmllZFxuIiwgYnVmKTsKLSAg ICAgICAgZXhpdCgxKTsKLSAgICB9Ci0KLSAgICAvKiBsaWJ4bF9nZXRfcmVxdWlyZWRfc2hhZG93 X21lbW9yeSgpIG11c3QgYmUgY2FsbGVkIGFmdGVyIGZpbmFsIHZhbHVlcwotICAgICAqIChkZWZh dWx0IG9yIHNwZWNpZmllZCkgZm9yIHZjcHVzIGFuZCBtZW1vcnkgYXJlIHNldCwgYmVjYXVzZSB0 aGUKLSAgICAgKiBjYWxjdWxhdGlvbiBkZXBlbmRzIG9uIHRob3NlIHZhbHVlcy4gKi8KLSAgICBi X2luZm8tPnNoYWRvd19tZW1rYiA9ICF4bHVfY2ZnX2dldF9sb25nKGNvbmZpZywgInNoYWRvd19t ZW1vcnkiLCAmbCwgMCkKLSAgICAgICAgPyBsICogMTAyNAotICAgICAgICA6IGxpYnhsX2dldF9y ZXF1aXJlZF9zaGFkb3dfbWVtb3J5KGJfaW5mby0+bWF4X21lbWtiLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJfaW5mby0+bWF4X3ZjcHVzKTsKLQotICAgIHhs dV9jZmdfZ2V0X2RlZmJvb2woY29uZmlnLCAibm9taWdyYXRlIiwgJmJfaW5mby0+ZGlzYWJsZV9t aWdyYXRlLCAwKTsKLQotICAgIGlmICgheGx1X2NmZ19nZXRfbG9uZyhjb25maWcsICJ0c2NfbW9k ZSIsICZsLCAxKSkgewotICAgICAgICBjb25zdCBjaGFyICpzID0gbGlieGxfdHNjX21vZGVfdG9f c3RyaW5nKGwpOwotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIldBUk5JTkc6IHNwZWNpZnlpbmcg XCJ0c2NfbW9kZVwiIGFzIGFuIGludGVnZXIgaXMgZGVwcmVjYXRlZC4gIgotICAgICAgICAgICAg ICAgICJQbGVhc2UgdXNlIHRoZSBuYW1lZCBwYXJhbWV0ZXIgdmFyaWFudC4gJXMlcyVzXG4iLAot ICAgICAgICAgICAgICAgIHMgPyAiZS5nLiB0c2NfbW9kZT1cIiIgOiAiIiwKLSAgICAgICAgICAg ICAgICBzID8gcyA6ICIiLAotICAgICAgICAgICAgICAgIHMgPyAiXCIiIDogIiIpOwotCi0gICAg ICAgIGlmIChsIDwgTElCWExfVFNDX01PREVfREVGQVVMVCB8fAotICAgICAgICAgICAgbCA+IExJ QlhMX1RTQ19NT0RFX05BVElWRV9QQVJBVklSVCkgewotICAgICAgICAgICAgZnByaW50ZihzdGRl cnIsICJFUlJPUjogaW52YWxpZCB2YWx1ZSAlbGQgZm9yIFwidHNjX21vZGVcIlxuIiwgbCk7Ci0g ICAgICAgICAgICBleGl0ICgxKTsKLSAgICAgICAgfQotICAgICAgICBiX2luZm8tPnRzY19tb2Rl ID0gbDsKLSAgICB9IGVsc2UgaWYgKCF4bHVfY2ZnX2dldF9zdHJpbmcoY29uZmlnLCAidHNjX21v ZGUiLCAmYnVmLCAwKSkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImdvdCBhIHRzYyBtb2Rl IHN0cmluZzogXCIlc1wiXG4iLCBidWYpOwotICAgICAgICBpZiAobGlieGxfdHNjX21vZGVfZnJv bV9zdHJpbmcoYnVmLCAmYl9pbmZvLT50c2NfbW9kZSkpIHsKLSAgICAgICAgICAgIGZwcmludGYo c3RkZXJyLCAiRVJST1I6IGludmFsaWQgdmFsdWUgXCIlc1wiIGZvciBcInRzY19tb2RlXCJcbiIs Ci0gICAgICAgICAgICAgICAgICAgIGJ1Zik7Ci0gICAgICAgICAgICBleGl0ICgxKTsKLSAgICAg ICAgfQotICAgIH0KLQotICAgIGlmICgheGx1X2NmZ19nZXRfbG9uZyhjb25maWcsICJydGNfdGlt ZW9mZnNldCIsICZsLCAwKSkKLSAgICAgICAgYl9pbmZvLT5ydGNfdGltZW9mZnNldCA9IGw7Ci0K LSAgICBpZiAoIXhsdV9jZmdfZ2V0X2xvbmcoY29uZmlnLCAidm5jdmlld2VyIiwgJmwsIDApKQot ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIldBUk5JTkc6IGlnbm9yaW5nIFwidm5jdmlld2VyXCIg b3B0aW9uLiAiCi0gICAgICAgICAgICAgICAgIlVzZSBcIi1WXCIgb3B0aW9uIG9mIFwieGwgY3Jl YXRlXCIgdG8gYXV0b21hdGljYWxseSBzcGF3biB2bmN2aWV3ZXIuXG4iKTsKLQotICAgIHhsdV9j ZmdfZ2V0X2RlZmJvb2woY29uZmlnLCAibG9jYWx0aW1lIiwgJmJfaW5mby0+bG9jYWx0aW1lLCAw KTsKLQotICAgIGlmICgheGx1X2NmZ19nZXRfbG9uZyAoY29uZmlnLCAidmlkZW9yYW0iLCAmbCwg MCkpCi0gICAgICAgIGJfaW5mby0+dmlkZW9fbWVta2IgPSBsICogMTAyNDsKLQotICAgIGlmICgh eGx1X2NmZ19nZXRfbG9uZyhjb25maWcsICJtYXhfZXZlbnRfY2hhbm5lbHMiLCAmbCwgMCkpCi0g ICAgICAgIGJfaW5mby0+ZXZlbnRfY2hhbm5lbHMgPSBsOwotCi0gICAgeGx1X2NmZ19yZXBsYWNl X3N0cmluZyAoY29uZmlnLCAia2VybmVsIiwgJmJfaW5mby0+a2VybmVsLCAwKTsKLSAgICB4bHVf Y2ZnX3JlcGxhY2Vfc3RyaW5nIChjb25maWcsICJyYW1kaXNrIiwgJmJfaW5mby0+cmFtZGlzaywg MCk7Ci0gICAgeGx1X2NmZ19yZXBsYWNlX3N0cmluZyAoY29uZmlnLCAiZGV2aWNlX3RyZWUiLCAm Yl9pbmZvLT5kZXZpY2VfdHJlZSwgMCk7Ci0gICAgYl9pbmZvLT5jbWRsaW5lID0gcGFyc2VfY21k bGluZShjb25maWcpOwotCi0gICAgeGx1X2NmZ19nZXRfZGVmYm9vbChjb25maWcsICJkcml2ZXJf ZG9tYWluIiwgJmNfaW5mby0+ZHJpdmVyX2RvbWFpbiwgMCk7Ci0gICAgeGx1X2NmZ19nZXRfZGVm Ym9vbChjb25maWcsICJhY3BpIiwgJmJfaW5mby0+YWNwaSwgMCk7Ci0KLSAgICBzd2l0Y2goYl9p bmZvLT50eXBlKSB7Ci0gICAgY2FzZSBMSUJYTF9ET01BSU5fVFlQRV9IVk06Ci0gICAgICAgIGtl cm5lbF9iYXNlbmFtZSA9IGxpYnhsX2Jhc2VuYW1lKGJfaW5mby0+a2VybmVsKTsKLSAgICAgICAg aWYgKCFzdHJjbXAoa2VybmVsX2Jhc2VuYW1lLCAiaHZtbG9hZGVyIikpIHsKLSAgICAgICAgICAg IGZwcmludGYoc3RkZXJyLCAiV0FSTklORzogeW91IHNlZW0gdG8gYmUgdXNpbmcgXCJrZXJuZWxc IiAiCi0gICAgICAgICAgICAgICAgICAgICJkaXJlY3RpdmUgdG8gb3ZlcnJpZGUgSFZNIGd1ZXN0 IGZpcm13YXJlLiBJZ25vcmUgIgotICAgICAgICAgICAgICAgICAgICAidGhhdC4gVXNlIFwiZmly bXdhcmVfb3ZlcnJpZGVcIiBpbnN0ZWFkIGlmIHlvdSAiCi0gICAgICAgICAgICAgICAgICAgICJy ZWFsbHkgd2FudCBhIG5vbi1kZWZhdWx0IGZpcm13YXJlXG4iKTsKLSAgICAgICAgICAgIGJfaW5m by0+a2VybmVsID0gTlVMTDsKLSAgICAgICAgfQotICAgICAgICBmcmVlKGtlcm5lbF9iYXNlbmFt ZSk7Ci0KLSAgICAgICAgeGx1X2NmZ19yZXBsYWNlX3N0cmluZyAoY29uZmlnLCAiZmlybXdhcmVf b3ZlcnJpZGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYl9pbmZvLT51Lmh2 bS5maXJtd2FyZSwgMCk7Ci0gICAgICAgIHhsdV9jZmdfcmVwbGFjZV9zdHJpbmcgKGNvbmZpZywg ImJpb3NfcGF0aF9vdmVycmlkZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZi X2luZm8tPnUuaHZtLnN5c3RlbV9maXJtd2FyZSwgMCk7Ci0gICAgICAgIGlmICgheGx1X2NmZ19n ZXRfc3RyaW5nKGNvbmZpZywgImJpb3MiLCAmYnVmLCAwKSkgewotICAgICAgICAgICAgaWYgKGxp YnhsX2Jpb3NfdHlwZV9mcm9tX3N0cmluZyhidWYsICZiX2luZm8tPnUuaHZtLmJpb3MpKSB7Ci0g ICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogaW52YWxpZCB2YWx1ZSBcIiVz XCIgZm9yIFwiYmlvc1wiXG4iLAotICAgICAgICAgICAgICAgICAgICBidWYpOwotICAgICAgICAg ICAgICAgIGV4aXQgKDEpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKGJfaW5m by0+dS5odm0uc3lzdGVtX2Zpcm13YXJlKQotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJX QVJOSU5HOiAiCi0gICAgICAgICAgICAgICAgICAgICJiaW9zX3BhdGhfb3ZlcnJpZGUgZ2l2ZW4g d2l0aG91dCBzcGVjaWZpYyBiaW9zIG5hbWVcbiIpOwotCi0gICAgICAgIHhsdV9jZmdfZ2V0X2Rl ZmJvb2woY29uZmlnLCAicGFlIiwgJmJfaW5mby0+dS5odm0ucGFlLCAwKTsKLSAgICAgICAgeGx1 X2NmZ19nZXRfZGVmYm9vbChjb25maWcsICJhcGljIiwgJmJfaW5mby0+dS5odm0uYXBpYywgMCk7 Ci0gICAgICAgIHhsdV9jZmdfZ2V0X2RlZmJvb2woY29uZmlnLCAiYWNwaV9zMyIsICZiX2luZm8t PnUuaHZtLmFjcGlfczMsIDApOwotICAgICAgICB4bHVfY2ZnX2dldF9kZWZib29sKGNvbmZpZywg ImFjcGlfczQiLCAmYl9pbmZvLT51Lmh2bS5hY3BpX3M0LCAwKTsKLSAgICAgICAgeGx1X2NmZ19n ZXRfZGVmYm9vbChjb25maWcsICJueCIsICZiX2luZm8tPnUuaHZtLm54LCAwKTsKLSAgICAgICAg eGx1X2NmZ19nZXRfZGVmYm9vbChjb25maWcsICJocGV0IiwgJmJfaW5mby0+dS5odm0uaHBldCwg MCk7Ci0gICAgICAgIHhsdV9jZmdfZ2V0X2RlZmJvb2woY29uZmlnLCAidnB0X2FsaWduIiwgJmJf aW5mby0+dS5odm0udnB0X2FsaWduLCAwKTsKLQotICAgICAgICBzd2l0Y2ggKHhsdV9jZmdfZ2V0 X2xpc3QoY29uZmlnLCAidmlyaWRpYW4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJnZpcmlkaWFuLCAmbnVtX3ZpcmlkaWFuLCAxKSkKLSAgICAgICAgewotICAgICAgICBjYXNl IDA6IC8qIFN1Y2Nlc3MgKi8KLSAgICAgICAgICAgIGlmIChudW1fdmlyaWRpYW4pIHsKLSAgICAg ICAgICAgICAgICBsaWJ4bF9iaXRtYXBfYWxsb2MoY3R4LCAmYl9pbmZvLT51Lmh2bS52aXJpZGlh bl9lbmFibGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlhMX0JVSUxE SU5GT19IVk1fVklSSURJQU5fRU5BQkxFX0RJU0FCTEVfV0lEVEgpOwotICAgICAgICAgICAgICAg IGxpYnhsX2JpdG1hcF9hbGxvYyhjdHgsICZiX2luZm8tPnUuaHZtLnZpcmlkaWFuX2Rpc2FibGUs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlhMX0JVSUxESU5GT19IVk1f VklSSURJQU5fRU5BQkxFX0RJU0FCTEVfV0lEVEgpOwotICAgICAgICAgICAgfQotICAgICAgICAg ICAgZm9yIChpID0gMDsgaSA8IG51bV92aXJpZGlhbjsgaSsrKSB7Ci0gICAgICAgICAgICAgICAg bGlieGxfdmlyaWRpYW5fZW5saWdodGVubWVudCB2OwotCi0gICAgICAgICAgICAgICAgYnVmID0g eGx1X2NmZ19nZXRfbGlzdGl0ZW0odmlyaWRpYW4sIGkpOwotICAgICAgICAgICAgICAgIGlmIChz dHJjbXAoYnVmLCAiYWxsIikgPT0gMCkKLSAgICAgICAgICAgICAgICAgICAgbGlieGxfYml0bWFw X3NldF9hbnkoJmJfaW5mby0+dS5odm0udmlyaWRpYW5fZW5hYmxlKTsKLSAgICAgICAgICAgICAg ICBlbHNlIGlmIChzdHJjbXAoYnVmLCAiZGVmYXVsdHMiKSA9PSAwKQotICAgICAgICAgICAgICAg ICAgICBsaWJ4bF9kZWZib29sX3NldCgmYl9pbmZvLT51Lmh2bS52aXJpZGlhbiwgdHJ1ZSk7Ci0g ICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGxpYnhsX2JpdG1hcCAq cyA9ICZiX2luZm8tPnUuaHZtLnZpcmlkaWFuX2VuYWJsZTsKLSAgICAgICAgICAgICAgICAgICAg bGlieGxfYml0bWFwICpyID0gJmJfaW5mby0+dS5odm0udmlyaWRpYW5fZGlzYWJsZTsKLQotICAg ICAgICAgICAgICAgICAgICBpZiAoKmJ1ZiA9PSAnIScpIHsKLSAgICAgICAgICAgICAgICAgICAg ICAgIHMgPSAmYl9pbmZvLT51Lmh2bS52aXJpZGlhbl9kaXNhYmxlOwotICAgICAgICAgICAgICAg ICAgICAgICAgciA9ICZiX2luZm8tPnUuaHZtLnZpcmlkaWFuX2VuYWJsZTsKLSAgICAgICAgICAg ICAgICAgICAgICAgIGJ1ZisrOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg ICAgICAgICAgZSA9IGxpYnhsX3ZpcmlkaWFuX2VubGlnaHRlbm1lbnRfZnJvbV9zdHJpbmcoYnVm LCAmdik7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChlKSB7Ci0gICAgICAgICAgICAgICAgICAg ICAgICBmcHJpbnRmKHN0ZGVyciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInhs OiB1bmtub3duIHZpcmlkaWFuIGVubGlnaHRlbm1lbnQgJyVzJ1xuIiwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgYnVmKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQoLUVS Uk9SX0ZBSUwpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAg bGlieGxfYml0bWFwX3NldChzLCB2KTsKLSAgICAgICAgICAgICAgICAgICAgbGlieGxfYml0bWFw X3Jlc2V0KHIsIHYpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAg ICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVTUkNIOiBicmVhazsgLyogT3B0aW9uIG5vdCBwcmVz ZW50ICovCi0gICAgICAgIGNhc2UgRUlOVkFMOgotICAgICAgICAgICAgeGx1X2NmZ19nZXRfZGVm Ym9vbChjb25maWcsICJ2aXJpZGlhbiIsICZiX2luZm8tPnUuaHZtLnZpcmlkaWFuLCAxKTsKLSAg ICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgZnByaW50Zihz dGRlcnIsInhsOiBVbmFibGUgdG8gcGFyc2UgdmlyaWRpYW4gZW5saWdodGVubWVudHMuXG4iKTsK LSAgICAgICAgICAgIGV4aXQoLUVSUk9SX0ZBSUwpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYg KCF4bHVfY2ZnX2dldF9sb25nKGNvbmZpZywgIm1taW9faG9sZSIsICZsLCAwKSkgewotICAgICAg ICAgICAgdWludDY0X3QgbW1pb19ob2xlX3NpemU7Ci0KLSAgICAgICAgICAgIGJfaW5mby0+dS5o dm0ubW1pb19ob2xlX21lbWtiID0gbCAqIDEwMjQ7Ci0gICAgICAgICAgICBtbWlvX2hvbGVfc2l6 ZSA9IGJfaW5mby0+dS5odm0ubW1pb19ob2xlX21lbWtiICogMTAyNDsKLSAgICAgICAgICAgIGlm IChtbWlvX2hvbGVfc2l6ZSA8IEhWTV9CRUxPV180R19NTUlPX0xFTkdUSCB8fAotICAgICAgICAg ICAgICAgIG1taW9faG9sZV9zaXplID4gSFZNX0JFTE9XXzRHX01NSU9fU1RBUlQpIHsKLSAgICAg ICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJFUlJP UjogaW52YWxpZCB2YWx1ZSAlbGQgZm9yIFwibW1pb19ob2xlXCJcbiIsIGwpOwotICAgICAgICAg ICAgICAgIGV4aXQgKDEpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmICgh eGx1X2NmZ19nZXRfbG9uZyhjb25maWcsICJ0aW1lcl9tb2RlIiwgJmwsIDEpKSB7Ci0gICAgICAg ICAgICBjb25zdCBjaGFyICpzID0gbGlieGxfdGltZXJfbW9kZV90b19zdHJpbmcobCk7Ci0gICAg ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIldBUk5JTkc6IHNwZWNpZnlpbmcgXCJ0aW1lcl9tb2Rl XCIgYXMgYW4gaW50ZWdlciBpcyBkZXByZWNhdGVkLiAiCi0gICAgICAgICAgICAgICAgICAgICJQ bGVhc2UgdXNlIHRoZSBuYW1lZCBwYXJhbWV0ZXIgdmFyaWFudC4gJXMlcyVzXG4iLAotICAgICAg ICAgICAgICAgICAgICBzID8gImUuZy4gdGltZXJfbW9kZT1cIiIgOiAiIiwKLSAgICAgICAgICAg ICAgICAgICAgcyA/IHMgOiAiIiwKLSAgICAgICAgICAgICAgICAgICAgcyA/ICJcIiIgOiAiIik7 Ci0KLSAgICAgICAgICAgIGlmIChsIDwgTElCWExfVElNRVJfTU9ERV9ERUxBWV9GT1JfTUlTU0VE X1RJQ0tTIHx8Ci0gICAgICAgICAgICAgICAgbCA+IExJQlhMX1RJTUVSX01PREVfT05FX01JU1NF RF9USUNLX1BFTkRJTkcpIHsKLSAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9S OiBpbnZhbGlkIHZhbHVlICVsZCBmb3IgXCJ0aW1lcl9tb2RlXCJcbiIsIGwpOwotICAgICAgICAg ICAgICAgIGV4aXQgKDEpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYl9pbmZvLT51Lmh2 bS50aW1lcl9tb2RlID0gbDsKLSAgICAgICAgfSBlbHNlIGlmICgheGx1X2NmZ19nZXRfc3RyaW5n KGNvbmZpZywgInRpbWVyX21vZGUiLCAmYnVmLCAwKSkgewotICAgICAgICAgICAgaWYgKGxpYnhs X3RpbWVyX21vZGVfZnJvbV9zdHJpbmcoYnVmLCAmYl9pbmZvLT51Lmh2bS50aW1lcl9tb2RlKSkg ewotICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IGludmFsaWQgdmFsdWUg XCIlc1wiIGZvciBcInRpbWVyX21vZGVcIlxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGJ1 Zik7Ci0gICAgICAgICAgICAgICAgZXhpdCAoMSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K LQotICAgICAgICB4bHVfY2ZnX2dldF9kZWZib29sKGNvbmZpZywgIm5lc3RlZGh2bSIsICZiX2lu Zm8tPnUuaHZtLm5lc3RlZF9odm0sIDApOwotCi0gICAgICAgIHhsdV9jZmdfZ2V0X2RlZmJvb2wo Y29uZmlnLCAiYWx0cDJtaHZtIiwgJmJfaW5mby0+dS5odm0uYWx0cDJtLCAwKTsKLQotICAgICAg ICB4bHVfY2ZnX3JlcGxhY2Vfc3RyaW5nKGNvbmZpZywgInNtYmlvc19maXJtd2FyZSIsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJfaW5mby0+dS5odm0uc21iaW9zX2Zpcm13YXJl LCAwKTsKLSAgICAgICAgeGx1X2NmZ19yZXBsYWNlX3N0cmluZyhjb25maWcsICJhY3BpX2Zpcm13 YXJlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYl9pbmZvLT51Lmh2bS5hY3Bp X2Zpcm13YXJlLCAwKTsKLQotICAgICAgICBpZiAoIXhsdV9jZmdfZ2V0X3N0cmluZyhjb25maWcs ICJtc192bV9nZW5pZCIsICZidWYsIDApKSB7Ci0gICAgICAgICAgICBpZiAoIXN0cmNtcChidWYs ICJnZW5lcmF0ZSIpKSB7Ci0gICAgICAgICAgICAgICAgZSA9IGxpYnhsX21zX3ZtX2dlbmlkX2dl bmVyYXRlKGN0eCwgJmJfaW5mby0+dS5odm0ubXNfdm1fZ2VuaWQpOwotICAgICAgICAgICAgICAg IGlmIChlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IGZh aWxlZCB0byBnZW5lcmF0ZSBhIFZNIEdlbmVyYXRpb24gSURcbiIpOwotICAgICAgICAgICAgICAg ICAgICBleGl0KDEpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAo IXN0cmNtcChidWYsICJub25lIikpIHsKLSAgICAgICAgICAgICAgICA7Ci0gICAgICAgICAgICB9 IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBcIm1z X3ZtX2dlbmlkXCIgb3B0aW9uIG11c3QgYmUgXCJnZW5lcmF0ZVwiIG9yIFwibm9uZVwiXG4iKTsK LSAgICAgICAgICAgICAgICAgICAgZXhpdCgxKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot Ci0gICAgICAgIGlmICgheGx1X2NmZ19nZXRfbG9uZyAoY29uZmlnLCAicmRtX21lbV9ib3VuZGFy eSIsICZsLCAwKSkKLSAgICAgICAgICAgIGJfaW5mby0+dS5odm0ucmRtX21lbV9ib3VuZGFyeV9t ZW1rYiA9IGwgKiAxMDI0OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIExJQlhMX0RPTUFJTl9U WVBFX1BWOgotICAgIHsKLSAgICAgICAgeGx1X2NmZ19yZXBsYWNlX3N0cmluZyAoY29uZmlnLCAi Ym9vdGxvYWRlciIsICZiX2luZm8tPnUucHYuYm9vdGxvYWRlciwgMCk7Ci0gICAgICAgIHN3aXRj aCAoeGx1X2NmZ19nZXRfbGlzdF9hc19zdHJpbmdfbGlzdChjb25maWcsICJib290bG9hZGVyX2Fy Z3MiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYl9pbmZvLT51LnB2 LmJvb3Rsb2FkZXJfYXJncywgMSkpCi0gICAgICAgIHsKLQotICAgICAgICBjYXNlIDA6IGJyZWFr OyAvKiBTdWNjZXNzICovCi0gICAgICAgIGNhc2UgRVNSQ0g6IGJyZWFrOyAvKiBPcHRpb24gbm90 IHByZXNlbnQgKi8KLSAgICAgICAgY2FzZSBFSU5WQUw6Ci0gICAgICAgICAgICBpZiAoIXhsdV9j ZmdfZ2V0X3N0cmluZyhjb25maWcsICJib290bG9hZGVyX2FyZ3MiLCAmYnVmLCAwKSkgewotCi0g ICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJXQVJOSU5HOiBTcGVjaWZ5aW5nIFwiYm9v dGxvYWRlcl9hcmdzXCIiCi0gICAgICAgICAgICAgICAgICAgICAgICAiIGFzIGEgc3RyaW5nIGlz IGRlcHJlY2F0ZWQuICIKLSAgICAgICAgICAgICAgICAgICAgICAgICJQbGVhc2UgdXNlIGEgbGlz dCBvZiBhcmd1bWVudHMuXG4iKTsKLSAgICAgICAgICAgICAgICBzcGxpdF9zdHJpbmdfaW50b19z dHJpbmdfbGlzdChidWYsICIgXHRcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJmJfaW5mby0+dS5wdi5ib290bG9hZGVyX2FyZ3MpOwotICAgICAgICAg ICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBm cHJpbnRmKHN0ZGVyciwieGw6IFVuYWJsZSB0byBwYXJzZSBib290bG9hZGVyX2FyZ3MuXG4iKTsK LSAgICAgICAgICAgIGV4aXQoLUVSUk9SX0ZBSUwpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYg KCFiX2luZm8tPnUucHYuYm9vdGxvYWRlciAmJiAhYl9pbmZvLT5rZXJuZWwpIHsKLSAgICAgICAg ICAgIGZwcmludGYoc3RkZXJyLCAiTmVpdGhlciBrZXJuZWwgbm9yIGJvb3Rsb2FkZXIgc3BlY2lm aWVkXG4iKTsKLSAgICAgICAgICAgIGV4aXQoMSk7Ci0gICAgICAgIH0KLQotICAgICAgICBicmVh azsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYWJvcnQoKTsKLSAgICB9Ci0KLSAgICBp ZiAoIXhsdV9jZmdfZ2V0X2xpc3QoY29uZmlnLCAiaW9wb3J0cyIsICZpb3BvcnRzLCAmbnVtX2lv cG9ydHMsIDApKSB7Ci0gICAgICAgIGJfaW5mby0+bnVtX2lvcG9ydHMgPSBudW1faW9wb3J0czsK LSAgICAgICAgYl9pbmZvLT5pb3BvcnRzID0gY2FsbG9jKG51bV9pb3BvcnRzLCBzaXplb2YoKmJf aW5mby0+aW9wb3J0cykpOwotICAgICAgICBpZiAoYl9pbmZvLT5pb3BvcnRzID09IE5VTEwpIHsK LSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAidW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBm b3IgaW9wb3J0c1xuIik7Ci0gICAgICAgICAgICBleGl0KC0xKTsKLSAgICAgICAgfQotCi0gICAg ICAgIGZvciAoaSA9IDA7IGkgPCBudW1faW9wb3J0czsgaSsrKSB7Ci0gICAgICAgICAgICBjb25z dCBjaGFyICpidWYyOwotICAgICAgICAgICAgY2hhciAqZXA7Ci0gICAgICAgICAgICB1aW50MzJf dCBzdGFydCwgZW5kOwotICAgICAgICAgICAgdW5zaWduZWQgbG9uZyB1bDsKLQotICAgICAgICAg ICAgYnVmID0geGx1X2NmZ19nZXRfbGlzdGl0ZW0gKGlvcG9ydHMsIGkpOwotICAgICAgICAgICAg aWYgKCFidWYpIHsKLSAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwKLSAgICAgICAgICAg ICAgICAgICAgICAgICJ4bDogVW5hYmxlIHRvIGdldCBlbGVtZW50ICMlZCBpbiBpb3BvcnQgbGlz dFxuIiwgaSk7Ci0gICAgICAgICAgICAgICAgZXhpdCgxKTsKLSAgICAgICAgICAgIH0KLSAgICAg ICAgICAgIHVsID0gc3RydG91bChidWYsICZlcCwgMTYpOwotICAgICAgICAgICAgaWYgKGVwID09 IGJ1ZikgewotICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAieGw6IEludmFsaWQgYXJn dW1lbnQgcGFyc2luZyBpb3BvcnQ6ICVzXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgYnVm KTsKLSAgICAgICAgICAgICAgICBleGl0KDEpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg aWYgKHVsID49IFVJTlQzMl9NQVgpIHsKLSAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwg InhsOiBpb3BvcnQgJWx4IHRvbyBiaWdcbiIsIHVsKTsKLSAgICAgICAgICAgICAgICBleGl0KDEp OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc3RhcnQgPSBlbmQgPSB1bDsKLQotICAgICAg ICAgICAgaWYgKCplcCA9PSAnLScpIHsKLSAgICAgICAgICAgICAgICBidWYyID0gZXAgKyAxOwot ICAgICAgICAgICAgICAgIHVsID0gc3RydG91bChidWYyLCAmZXAsIDE2KTsKLSAgICAgICAgICAg ICAgICBpZiAoZXAgPT0gYnVmMiB8fCAqZXAgIT0gJ1wwJyB8fCBzdGFydCA+IGVuZCkgewotICAg ICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAieGw6IEludmFsaWQgYXJndW1lbnQgcGFyc2luZyBpb3BvcnQ6ICVzXG4iLCBidWYpOwot ICAgICAgICAgICAgICAgICAgICBleGl0KDEpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg ICAgICAgICBpZiAodWwgPj0gVUlOVDMyX01BWCkgewotICAgICAgICAgICAgICAgICAgICBmcHJp bnRmKHN0ZGVyciwgInhsOiBpb3BvcnQgJWx4IHRvbyBiaWdcbiIsIHVsKTsKLSAgICAgICAgICAg ICAgICAgICAgZXhpdCgxKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZW5k ID0gdWw7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKCAqZXAgIT0gJ1wwJyApCi0gICAgICAgICAg ICAgICAgZnByaW50ZihzdGRlcnIsCi0gICAgICAgICAgICAgICAgICAgICAgICAieGw6IEludmFs aWQgYXJndW1lbnQgcGFyc2luZyBpb3BvcnQ6ICVzXG4iLCBidWYpOwotICAgICAgICAgICAgYl9p bmZvLT5pb3BvcnRzW2ldLmZpcnN0ID0gc3RhcnQ7Ci0gICAgICAgICAgICBiX2luZm8tPmlvcG9y dHNbaV0ubnVtYmVyID0gZW5kIC0gc3RhcnQgKyAxOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg aWYgKCF4bHVfY2ZnX2dldF9saXN0KGNvbmZpZywgImlycXMiLCAmaXJxcywgJm51bV9pcnFzLCAw KSkgewotICAgICAgICBiX2luZm8tPm51bV9pcnFzID0gbnVtX2lycXM7Ci0gICAgICAgIGJfaW5m by0+aXJxcyA9IGNhbGxvYyhudW1faXJxcywgc2l6ZW9mKCpiX2luZm8tPmlycXMpKTsKLSAgICAg ICAgaWYgKGJfaW5mby0+aXJxcyA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVy ciwgInVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGlvcG9ydHNcbiIpOwotICAgICAgICAg ICAgZXhpdCgtMSk7Ci0gICAgICAgIH0KLSAgICAgICAgZm9yIChpID0gMDsgaSA8IG51bV9pcnFz OyBpKyspIHsKLSAgICAgICAgICAgIGNoYXIgKmVwOwotICAgICAgICAgICAgdW5zaWduZWQgbG9u ZyB1bDsKLSAgICAgICAgICAgIGJ1ZiA9IHhsdV9jZmdfZ2V0X2xpc3RpdGVtIChpcnFzLCBpKTsK LSAgICAgICAgICAgIGlmICghYnVmKSB7Ci0gICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIs Ci0gICAgICAgICAgICAgICAgICAgICAgICAieGw6IFVuYWJsZSB0byBnZXQgZWxlbWVudCAlZCBp biBpcnEgbGlzdFxuIiwgaSk7Ci0gICAgICAgICAgICAgICAgZXhpdCgxKTsKLSAgICAgICAgICAg IH0KLSAgICAgICAgICAgIHVsID0gc3RydG91bChidWYsICZlcCwgMTApOwotICAgICAgICAgICAg aWYgKGVwID09IGJ1ZiB8fCAqZXAgIT0gJ1wwJykgewotICAgICAgICAgICAgICAgIGZwcmludGYo c3RkZXJyLAotICAgICAgICAgICAgICAgICAgICAgICAgInhsOiBJbnZhbGlkIGFyZ3VtZW50IHBh cnNpbmcgaXJxOiAlc1xuIiwgYnVmKTsKLSAgICAgICAgICAgICAgICBleGl0KDEpOwotICAgICAg ICAgICAgfQotICAgICAgICAgICAgaWYgKHVsID49IFVJTlQzMl9NQVgpIHsKLSAgICAgICAgICAg ICAgICBmcHJpbnRmKHN0ZGVyciwgInhsOiBpcnEgJWx4IHRvbyBiaWdcbiIsIHVsKTsKLSAgICAg ICAgICAgICAgICBleGl0KDEpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYl9pbmZvLT5p cnFzW2ldID0gdWw7Ci0gICAgICAgIH0KKyAgICAgICAgY2xvc2UoZmRfbG9jayk7CisgICAgICAg IGZwcmludGYoc3RkZXJyLCAiY2Fubm90IHNldCBjbG9leGVjIHRvIGxvY2tmaWxlICVzIGVycm5v PSVkXG4iLCBsb2NrZmlsZSwgZXJybm8pOworICAgICAgICByZXR1cm4gRVJST1JfRkFJTDsKICAg ICB9CitnZXRfbG9jazoKKyAgICByYyA9IGZjbnRsKGZkX2xvY2ssIEZfU0VUTEtXLCAmZmwpOwor ICAgIGlmIChyYyA8IDAgJiYgZXJybm8gPT0gRUlOVFIpCisgICAgICAgIGdvdG8gZ2V0X2xvY2s7 CisgICAgaWYgKHJjIDwgMCkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImNhbm5vdCBhY3F1 aXJlIGxvY2sgJXMgZXJybm89JWRcbiIsIGxvY2tmaWxlLCBlcnJubyk7CisgICAgICAgIHJjID0g RVJST1JfRkFJTDsKKyAgICB9IGVsc2UKKyAgICAgICAgcmMgPSAwOworICAgIHJldHVybiByYzsK K30KIAotICAgIGlmICgheGx1X2NmZ19nZXRfbGlzdChjb25maWcsICJpb21lbSIsICZpb21lbSwg Jm51bV9pb21lbSwgMCkpIHsKLSAgICAgICAgaW50IHJldDsKLSAgICAgICAgYl9pbmZvLT5udW1f aW9tZW0gPSBudW1faW9tZW07Ci0gICAgICAgIGJfaW5mby0+aW9tZW0gPSBjYWxsb2MobnVtX2lv bWVtLCBzaXplb2YoKmJfaW5mby0+aW9tZW0pKTsKLSAgICAgICAgaWYgKGJfaW5mby0+aW9tZW0g PT0gTlVMTCkgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJ1bmFibGUgdG8gYWxsb2Nh dGUgbWVtb3J5IGZvciBpb21lbVxuIik7Ci0gICAgICAgICAgICBleGl0KC0xKTsKLSAgICAgICAg fQotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX2lvbWVtOyBpKyspIHsKLSAgICAgICAgICAg IGludCB1c2VkOworc3RhdGljIGludCByZWxlYXNlX2xvY2sodm9pZCkKK3sKKyAgICBpbnQgcmM7 CisgICAgc3RydWN0IGZsb2NrIGZsOwogCi0gICAgICAgICAgICBidWYgPSB4bHVfY2ZnX2dldF9s aXN0aXRlbSAoaW9tZW0sIGkpOwotICAgICAgICAgICAgaWYgKCFidWYpIHsKLSAgICAgICAgICAg ICAgICBmcHJpbnRmKHN0ZGVyciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJ4bDogVW5hYmxl IHRvIGdldCBlbGVtZW50ICVkIGluIGlvbWVtIGxpc3RcbiIsIGkpOwotICAgICAgICAgICAgICAg IGV4aXQoMSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBsaWJ4bF9pb21lbV9yYW5nZV9p bml0KCZiX2luZm8tPmlvbWVtW2ldKTsKLSAgICAgICAgICAgIHJldCA9IHNzY2FuZihidWYsICIl IiBTQ054NjQiLCUiIFNDTng2NCIlbkAlIiBTQ054NjQiJW4iLAotICAgICAgICAgICAgICAgICAg ICAgICAgICZiX2luZm8tPmlvbWVtW2ldLnN0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAg ICZiX2luZm8tPmlvbWVtW2ldLm51bWJlciwgJnVzZWQsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgJmJfaW5mby0+aW9tZW1baV0uZ2ZuLCAmdXNlZCk7Ci0gICAgICAgICAgICBpZiAocmV0IDwg MiB8fCBidWZbdXNlZF0gIT0gJ1wwJykgewotICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJy LAotICAgICAgICAgICAgICAgICAgICAgICAgInhsOiBJbnZhbGlkIGFyZ3VtZW50IHBhcnNpbmcg aW9tZW06ICVzXG4iLCBidWYpOwotICAgICAgICAgICAgICAgIGV4aXQoMSk7Ci0gICAgICAgICAg ICB9Ci0gICAgICAgIH0KLSAgICB9CisgICAgLyogbG9jayBub3QgYWNxdWlyZWQgKi8KKyAgICBp ZiAoZmRfbG9jayA8IDApCisgICAgICAgIHJldHVybiBFUlJPUl9JTlZBTDsKIAorcmVsZWFzZV9s b2NrOgorICAgIGZsLmxfdHlwZSA9IEZfVU5MQ0s7CisgICAgZmwubF93aGVuY2UgPSBTRUVLX1NF VDsKKyAgICBmbC5sX3N0YXJ0ID0gMDsKKyAgICBmbC5sX2xlbiA9IDA7CiAKKyAgICByYyA9IGZj bnRsKGZkX2xvY2ssIEZfU0VUTEtXLCAmZmwpOworICAgIGlmIChyYyA8IDAgJiYgZXJybm8gPT0g RUlOVFIpCisgICAgICAgIGdvdG8gcmVsZWFzZV9sb2NrOworICAgIGlmIChyYyA8IDApIHsKKyAg ICAgICAgZnByaW50ZihzdGRlcnIsICJjYW5ub3QgcmVsZWFzZSBsb2NrICVzLCBlcnJubz0lZFxu IiwgbG9ja2ZpbGUsIGVycm5vKTsKKyAgICAgICAgcmMgPSBFUlJPUl9GQUlMOworICAgIH0gZWxz ZQorICAgICAgICByYyA9IDA7CisgICAgY2xvc2UoZmRfbG9jayk7CisgICAgZmRfbG9jayA9IC0x OwogCi0gICAgaWYgKCF4bHVfY2ZnX2dldF9saXN0IChjb25maWcsICJkaXNrIiwgJnZiZHMsIDAs IDApKSB7Ci0gICAgICAgIGRfY29uZmlnLT5udW1fZGlza3MgPSAwOwotICAgICAgICBkX2NvbmZp Zy0+ZGlza3MgPSBOVUxMOwotICAgICAgICB3aGlsZSAoKGJ1ZiA9IHhsdV9jZmdfZ2V0X2xpc3Rp dGVtICh2YmRzLCBkX2NvbmZpZy0+bnVtX2Rpc2tzKSkgIT0gTlVMTCkgewotICAgICAgICAgICAg bGlieGxfZGV2aWNlX2Rpc2sgKmRpc2s7Ci0gICAgICAgICAgICBjaGFyICpidWYyID0gc3RyZHVw KGJ1Zik7Ci0KLSAgICAgICAgICAgIGRpc2sgPSBBUlJBWV9FWFRFTkRfSU5JVF9OT0RFVklEKGRf Y29uZmlnLT5kaXNrcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGRfY29uZmlnLT5udW1fZGlza3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfZGlza19pbml0KTsKLSAgICAgICAgICAgIHBhcnNl X2Rpc2tfY29uZmlnKCZjb25maWcsIGJ1ZjIsIGRpc2spOwotCi0gICAgICAgICAgICBmcmVlKGJ1 ZjIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCF4bHVfY2ZnX2dldF9saXN0KGNvbmZp ZywgInZ0cG0iLCAmdnRwbXMsIDAsIDApKSB7Ci0gICAgICAgIGRfY29uZmlnLT5udW1fdnRwbXMg PSAwOwotICAgICAgICBkX2NvbmZpZy0+dnRwbXMgPSBOVUxMOwotICAgICAgICB3aGlsZSAoKGJ1 ZiA9IHhsdV9jZmdfZ2V0X2xpc3RpdGVtICh2dHBtcywgZF9jb25maWctPm51bV92dHBtcykpICE9 IE5VTEwpIHsKLSAgICAgICAgICAgIGxpYnhsX2RldmljZV92dHBtICp2dHBtOwotICAgICAgICAg ICAgY2hhciAqIGJ1ZjIgPSBzdHJkdXAoYnVmKTsKLSAgICAgICAgICAgIGNoYXIgKnAsICpwMjsK LSAgICAgICAgICAgIGJvb2wgZ290X2JhY2tlbmQgPSBmYWxzZTsKLQotICAgICAgICAgICAgdnRw bSA9IEFSUkFZX0VYVEVORF9JTklUKGRfY29uZmlnLT52dHBtcywKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBkX2NvbmZpZy0+bnVtX3Z0cG1zLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV92dHBtX2luaXQpOwotCi0gICAgICAg ICAgICBwID0gc3RydG9rKGJ1ZjIsICIsIik7Ci0gICAgICAgICAgICBpZihwKSB7Ci0gICAgICAg ICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgICB3aGlsZSgqcCA9PSAnICcpCi0gICAgICAg ICAgICAgICAgICAgICArK3A7Ci0gICAgICAgICAgICAgICAgICBpZiAoKHAyID0gc3RyY2hyKHAs ICc9JykpID09IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg ICAgICAgICpwMiA9ICdcMCc7Ci0gICAgICAgICAgICAgICAgICBpZiAoIXN0cmNtcChwLCAiYmFj a2VuZCIpKSB7Ci0gICAgICAgICAgICAgICAgICAgICB2dHBtLT5iYWNrZW5kX2RvbW5hbWUgPSBz dHJkdXAocDIgKyAxKTsKLSAgICAgICAgICAgICAgICAgICAgIGdvdF9iYWNrZW5kID0gdHJ1ZTsK LSAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZighc3RyY21wKHAsICJ1dWlkIikpIHsKLSAgICAg ICAgICAgICAgICAgICAgIGlmKCBsaWJ4bF91dWlkX2Zyb21fc3RyaW5nKCZ2dHBtLT51dWlkLCBw MiArIDEpICkgewotICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAiRmFpbGVkIHRvIHBhcnNlIHZ0cG0gVVVJRDogJXNc biIsIHAyICsgMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBleGl0KDEpOwotICAgICAgICAg ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg ICAgICAgZnByaW50ZihzdGRlcnIsICJVbmtub3duIHN0cmluZyBgJXMnIGluIHZ0cG0gc3BlY1xu IiwgcCk7Ci0gICAgICAgICAgICAgICAgICAgICBleGl0KDEpOwotICAgICAgICAgICAgICAgICAg fQotICAgICAgICAgICAgICAgfSB3aGlsZSAoKHAgPSBzdHJ0b2soTlVMTCwgIiwiKSkgIT0gTlVM TCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZighZ290X2JhY2tlbmQpIHsKLSAgICAg ICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAidnRwbSBzcGVjIG1pc3NpbmcgcmVxdWlyZWQgYmFj a2VuZCBmaWVsZCFcbiIpOwotICAgICAgICAgICAgICAgZXhpdCgxKTsKLSAgICAgICAgICAgIH0K LSAgICAgICAgICAgIGZyZWUoYnVmMik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIXhs dV9jZmdfZ2V0X2xpc3QgKGNvbmZpZywgImNoYW5uZWwiLCAmY2hhbm5lbHMsIDAsIDApKSB7Ci0g ICAgICAgIGRfY29uZmlnLT5udW1fY2hhbm5lbHMgPSAwOwotICAgICAgICBkX2NvbmZpZy0+Y2hh bm5lbHMgPSBOVUxMOwotICAgICAgICB3aGlsZSAoKGJ1ZiA9IHhsdV9jZmdfZ2V0X2xpc3RpdGVt IChjaGFubmVscywKLSAgICAgICAgICAgICAgICBkX2NvbmZpZy0+bnVtX2NoYW5uZWxzKSkgIT0g TlVMTCkgewotICAgICAgICAgICAgbGlieGxfZGV2aWNlX2NoYW5uZWwgKmNobjsKLSAgICAgICAg ICAgIGxpYnhsX3N0cmluZ19saXN0IHBhaXJzOwotICAgICAgICAgICAgY2hhciAqcGF0aCA9IE5V TEw7Ci0gICAgICAgICAgICBpbnQgbGVuOwotCi0gICAgICAgICAgICBjaG4gPSBBUlJBWV9FWFRF TkRfSU5JVChkX2NvbmZpZy0+Y2hhbm5lbHMsIGRfY29uZmlnLT5udW1fY2hhbm5lbHMsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV9jaGFubmVsX2luaXQp OwotCi0gICAgICAgICAgICBzcGxpdF9zdHJpbmdfaW50b19zdHJpbmdfbGlzdChidWYsICIsIiwg JnBhaXJzKTsKLSAgICAgICAgICAgIGxlbiA9IGxpYnhsX3N0cmluZ19saXN0X2xlbmd0aCgmcGFp cnMpOwotICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0gICAgICAgICAg ICAgICAgY2hhciAqa2V5LCAqa2V5X3VudHJpbW1lZCwgKnZhbHVlLCAqdmFsdWVfdW50cmltbWVk OwotICAgICAgICAgICAgICAgIGludCByYzsKLSAgICAgICAgICAgICAgICByYyA9IHNwbGl0X3N0 cmluZ19pbnRvX3BhaXIocGFpcnNbaV0sICI9IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJmtleV91bnRyaW1tZWQsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICZ2YWx1ZV91bnRyaW1tZWQpOwotICAgICAgICAgICAgICAg IGlmIChyYyAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZmFp bGVkIHRvIHBhcnNlIGNoYW5uZWwgY29uZmlndXJhdGlvbjogJXMiLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHBhaXJzW2ldKTsKLSAgICAgICAgICAgICAgICAgICAgZXhpdCgxKTsKLSAg ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdHJpbShpc3NwYWNlLCBrZXlfdW50cmlt bWVkLCAma2V5KTsKLSAgICAgICAgICAgICAgICB0cmltKGlzc3BhY2UsIHZhbHVlX3VudHJpbW1l ZCwgJnZhbHVlKTsKLQotICAgICAgICAgICAgICAgIGlmICghc3RyY21wKGtleSwgImJhY2tlbmQi KSkgewotICAgICAgICAgICAgICAgICAgICByZXBsYWNlX3N0cmluZygmY2huLT5iYWNrZW5kX2Rv bW5hbWUsIHZhbHVlKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoa2V5LCAi bmFtZSIpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlcGxhY2Vfc3RyaW5nKCZjaG4tPm5hbWUs IHZhbHVlKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoa2V5LCAicGF0aCIp KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlcGxhY2Vfc3RyaW5nKCZwYXRoLCB2YWx1ZSk7Ci0g ICAgICAgICAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKGtleSwgImNvbm5lY3Rpb24iKSkgewot ICAgICAgICAgICAgICAgICAgICBpZiAoIXN0cmNtcCh2YWx1ZSwgInB0eSIpKSB7Ci0gICAgICAg ICAgICAgICAgICAgICAgICBjaG4tPmNvbm5lY3Rpb24gPSBMSUJYTF9DSEFOTkVMX0NPTk5FQ1RJ T05fUFRZOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJz b2NrZXQiKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgY2huLT5jb25uZWN0aW9uID0gTElC WExfQ0hBTk5FTF9DT05ORUNUSU9OX1NPQ0tFVDsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNl IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAidW5rbm93biBjaGFu bmVsIGNvbm5lY3Rpb24gJyVzJ1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dmFsdWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgZXhpdCgxKTsKLSAgICAgICAgICAgICAg ICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGZw cmludGYoc3RkZXJyLCAidW5rbm93biBjaGFubmVsIHBhcmFtZXRlciAnJXMnLCIKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAiIGlnbm9yaW5nXG4iLCBrZXkpOwotICAgICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgICAgICBmcmVlKGtleSk7Ci0gICAgICAgICAgICAgICAgZnJl ZShrZXlfdW50cmltbWVkKTsKLSAgICAgICAgICAgICAgICBmcmVlKHZhbHVlKTsKLSAgICAgICAg ICAgICAgICBmcmVlKHZhbHVlX3VudHJpbW1lZCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg ICBzd2l0Y2ggKGNobi0+Y29ubmVjdGlvbikgewotICAgICAgICAgICAgY2FzZSBMSUJYTF9DSEFO TkVMX0NPTk5FQ1RJT05fVU5LTk9XTjoKLSAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwg ImNoYW5uZWwgaGFzIHVua25vd24gJ2Nvbm5lY3Rpb24nXG4iKTsKLSAgICAgICAgICAgICAgICBl eGl0KDEpOwotICAgICAgICAgICAgY2FzZSBMSUJYTF9DSEFOTkVMX0NPTk5FQ1RJT05fU09DS0VU OgotICAgICAgICAgICAgICAgIGlmICghcGF0aCkgewotICAgICAgICAgICAgICAgICAgICBmcHJp bnRmKHN0ZGVyciwgImNoYW5uZWwgY29ubmVjdGlvbiAnc29ja2V0JyByZXF1aXJlcyBwYXRoPS4u XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgZXhpdCgxKTsKLSAgICAgICAgICAgICAgICB9Ci0g ICAgICAgICAgICAgICAgY2huLT51LnNvY2tldC5wYXRoID0geHN0cmR1cChwYXRoKTsKLSAgICAg ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgTElCWExfQ0hBTk5FTF9DT05ORUNU SU9OX1BUWToKLSAgICAgICAgICAgICAgICAvKiBOb3RoaW5nIHRvIGRvIHNpbmNlIFBUWSBoYXMg bm8gYXJndW1lbnRzICovCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZh dWx0OgotICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAidW5rbm93biBjaGFubmVsIGNv bm5lY3Rpb246ICVkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNobi0+Y29ubmVjdGlvbik7 Ci0gICAgICAgICAgICAgICAgZXhpdCgxKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxp YnhsX3N0cmluZ19saXN0X2Rpc3Bvc2UoJnBhaXJzKTsKLSAgICAgICAgICAgIGZyZWUocGF0aCk7 Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIXhsdV9jZmdfZ2V0X2xpc3QgKGNvbmZpZywg InZpZiIsICZuaWNzLCAwLCAwKSkgewotICAgICAgICBkX2NvbmZpZy0+bnVtX25pY3MgPSAwOwot ICAgICAgICBkX2NvbmZpZy0+bmljcyA9IE5VTEw7Ci0gICAgICAgIHdoaWxlICgoYnVmID0geGx1 X2NmZ19nZXRfbGlzdGl0ZW0gKG5pY3MsIGRfY29uZmlnLT5udW1fbmljcykpICE9IE5VTEwpIHsK LSAgICAgICAgICAgIGxpYnhsX2RldmljZV9uaWMgKm5pYzsKLSAgICAgICAgICAgIGNoYXIgKmJ1 ZjIgPSBzdHJkdXAoYnVmKTsKLSAgICAgICAgICAgIGNoYXIgKnA7Ci0KLSAgICAgICAgICAgIG5p YyA9IEFSUkFZX0VYVEVORF9JTklUKGRfY29uZmlnLT5uaWNzLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZF9jb25maWctPm51bV9uaWNzLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX25pY19pbml0KTsKLSAgICAgICAgICAgIHNl dF9kZWZhdWx0X25pY192YWx1ZXMobmljKTsKLQotICAgICAgICAgICAgcCA9IHN0cnRvayhidWYy LCAiLCIpOwotICAgICAgICAgICAgaWYgKCFwKQotICAgICAgICAgICAgICAgIGdvdG8gc2tpcF9u aWM7Ci0gICAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKCpwID09ICcgJykK LSAgICAgICAgICAgICAgICAgICAgcCsrOwotICAgICAgICAgICAgICAgIHBhcnNlX25pY19jb25m aWcobmljLCAmY29uZmlnLCBwKTsKLSAgICAgICAgICAgIH0gd2hpbGUgKChwID0gc3RydG9rKE5V TEwsICIsIikpICE9IE5VTEwpOwotc2tpcF9uaWM6Ci0gICAgICAgICAgICBmcmVlKGJ1ZjIpOwot ICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCF4bHVfY2ZnX2dldF9saXN0KGNvbmZpZywgInZp ZjIiLCBOVUxMLCAwLCAwKSkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIldBUk5JTkc6IHZp ZjI6IG5ldGNoYW5uZWwyIGlzIGRlcHJlY2F0ZWQgYW5kIG5vdCBzdXBwb3J0ZWQgYnkgeGxcbiIp OwotICAgIH0KLQotICAgIGRfY29uZmlnLT5udW1fdmZicyA9IDA7Ci0gICAgZF9jb25maWctPm51 bV92a2JzID0gMDsKLSAgICBkX2NvbmZpZy0+dmZicyA9IE5VTEw7Ci0gICAgZF9jb25maWctPnZr YnMgPSBOVUxMOwotCi0gICAgaWYgKCF4bHVfY2ZnX2dldF9saXN0IChjb25maWcsICJ2ZmIiLCAm Y3ZmYnMsIDAsIDApKSB7Ci0gICAgICAgIHdoaWxlICgoYnVmID0geGx1X2NmZ19nZXRfbGlzdGl0 ZW0gKGN2ZmJzLCBkX2NvbmZpZy0+bnVtX3ZmYnMpKSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBs aWJ4bF9kZXZpY2VfdmZiICp2ZmI7Ci0gICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdmtiICp2a2I7 Ci0KLSAgICAgICAgICAgIGNoYXIgKmJ1ZjIgPSBzdHJkdXAoYnVmKTsKLSAgICAgICAgICAgIGNo YXIgKnAsICpwMjsKLQotICAgICAgICAgICAgdmZiID0gQVJSQVlfRVhURU5EX0lOSVQoZF9jb25m aWctPnZmYnMsIGRfY29uZmlnLT5udW1fdmZicywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGxpYnhsX2RldmljZV92ZmJfaW5pdCk7Ci0KLSAgICAgICAgICAgIHZrYiA9IEFS UkFZX0VYVEVORF9JTklUKGRfY29uZmlnLT52a2JzLCBkX2NvbmZpZy0+bnVtX3ZrYnMsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdmtiX2luaXQpOwot Ci0gICAgICAgICAgICBwID0gc3RydG9rKGJ1ZjIsICIsIik7Ci0gICAgICAgICAgICBpZiAoIXAp Ci0gICAgICAgICAgICAgICAgZ290byBza2lwX3ZmYjsKLSAgICAgICAgICAgIGRvIHsKLSAgICAg ICAgICAgICAgICB3aGlsZSAoKnAgPT0gJyAnKQotICAgICAgICAgICAgICAgICAgICBwKys7Ci0g ICAgICAgICAgICAgICAgaWYgKChwMiA9IHN0cmNocihwLCAnPScpKSA9PSBOVUxMKQotICAgICAg ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAqcDIgPSAnXDAnOwotICAgICAg ICAgICAgICAgIGlmICghc3RyY21wKHAsICJ2bmMiKSkgewotICAgICAgICAgICAgICAgICAgICBs aWJ4bF9kZWZib29sX3NldCgmdmZiLT52bmMuZW5hYmxlLCBhdG9pKHAyICsgMSkpOwotICAgICAg ICAgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChwLCAidm5jbGlzdGVuIikpIHsKLSAgICAgICAg ICAgICAgICAgICAgZnJlZSh2ZmItPnZuYy5saXN0ZW4pOwotICAgICAgICAgICAgICAgICAgICB2 ZmItPnZuYy5saXN0ZW4gPSBzdHJkdXAocDIgKyAxKTsKLSAgICAgICAgICAgICAgICB9IGVsc2Ug aWYgKCFzdHJjbXAocCwgInZuY3Bhc3N3ZCIpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZyZWUo dmZiLT52bmMucGFzc3dkKTsKLSAgICAgICAgICAgICAgICAgICAgdmZiLT52bmMucGFzc3dkID0g c3RyZHVwKHAyICsgMSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKHAsICJ2 bmNkaXNwbGF5IikpIHsKLSAgICAgICAgICAgICAgICAgICAgdmZiLT52bmMuZGlzcGxheSA9IGF0 b2kocDIgKyAxKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAocCwgInZuY3Vu dXNlZCIpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGxpYnhsX2RlZmJvb2xfc2V0KCZ2ZmItPnZu Yy5maW5kdW51c2VkLCBhdG9pKHAyICsgMSkpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo IXN0cmNtcChwLCAia2V5bWFwIikpIHsKLSAgICAgICAgICAgICAgICAgICAgZnJlZSh2ZmItPmtl eW1hcCk7Ci0gICAgICAgICAgICAgICAgICAgIHZmYi0+a2V5bWFwID0gc3RyZHVwKHAyICsgMSk7 Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKHAsICJzZGwiKSkgewotICAgICAg ICAgICAgICAgICAgICBsaWJ4bF9kZWZib29sX3NldCgmdmZiLT5zZGwuZW5hYmxlLCBhdG9pKHAy ICsgMSkpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChwLCAib3BlbmdsIikp IHsKLSAgICAgICAgICAgICAgICAgICAgbGlieGxfZGVmYm9vbF9zZXQoJnZmYi0+c2RsLm9wZW5n bCwgYXRvaShwMiArIDEpKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAocCwg ImRpc3BsYXkiKSkgewotICAgICAgICAgICAgICAgICAgICBmcmVlKHZmYi0+c2RsLmRpc3BsYXkp OwotICAgICAgICAgICAgICAgICAgICB2ZmItPnNkbC5kaXNwbGF5ID0gc3RyZHVwKHAyICsgMSk7 Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKHAsICJ4YXV0aG9yaXR5IikpIHsK LSAgICAgICAgICAgICAgICAgICAgZnJlZSh2ZmItPnNkbC54YXV0aG9yaXR5KTsKLSAgICAgICAg ICAgICAgICAgICAgdmZiLT5zZGwueGF1dGhvcml0eSA9IHN0cmR1cChwMiArIDEpOwotICAgICAg ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gd2hpbGUgKChwID0gc3RydG9rKE5VTEwsICIsIikp ICE9IE5VTEwpOworICAgIHJldHVybiByYzsKK30KIAotc2tpcF92ZmI6Ci0gICAgICAgICAgICBm cmVlKGJ1ZjIpOwotICAgICAgICB9Ci0gICAgfQorc3RhdGljIHlhamxfZ2VuX3N0YXR1cyBwcmlu dGZfaW5mb19vbmVfanNvbih5YWpsX2dlbiBoYW5kLCBpbnQgZG9taWQsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RvbWFpbl9jb25maWcgKmRfY29u ZmlnKQoreworICAgIHlhamxfZ2VuX3N0YXR1cyBzOwogCi0gICAgaWYgKCF4bHVfY2ZnX2dldF9s b25nIChjb25maWcsICJwY2lfbXNpdHJhbnNsYXRlIiwgJmwsIDApKQotICAgICAgICBwY2lfbXNp dHJhbnNsYXRlID0gbDsKKyAgICBzID0geWFqbF9nZW5fbWFwX29wZW4oaGFuZCk7CisgICAgaWYg KHMgIT0geWFqbF9nZW5fc3RhdHVzX29rKQorICAgICAgICBnb3RvIG91dDsKIAotICAgIGlmICgh eGx1X2NmZ19nZXRfbG9uZyAoY29uZmlnLCAicGNpX3Bvd2VyX21nbXQiLCAmbCwgMCkpCi0gICAg ICAgIHBjaV9wb3dlcl9tZ210ID0gbDsKKyAgICBzID0geWFqbF9nZW5fc3RyaW5nKGhhbmQsIChj b25zdCB1bnNpZ25lZCBjaGFyICopImRvbWlkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNp emVvZigiZG9taWQiKS0xKTsKKyAgICBpZiAocyAhPSB5YWpsX2dlbl9zdGF0dXNfb2spCisgICAg ICAgIGdvdG8gb3V0OworICAgIGlmIChkb21pZCAhPSAtMSkKKyAgICAgICAgcyA9IHlhamxfZ2Vu X2ludGVnZXIoaGFuZCwgZG9taWQpOworICAgIGVsc2UKKyAgICAgICAgcyA9IHlhamxfZ2VuX251 bGwoaGFuZCk7CisgICAgaWYgKHMgIT0geWFqbF9nZW5fc3RhdHVzX29rKQorICAgICAgICBnb3Rv IG91dDsKIAotICAgIGlmICgheGx1X2NmZ19nZXRfbG9uZyAoY29uZmlnLCAicGNpX3Blcm1pc3Np dmUiLCAmbCwgMCkpCi0gICAgICAgIHBjaV9wZXJtaXNzaXZlID0gbDsKKyAgICBzID0geWFqbF9n ZW5fc3RyaW5nKGhhbmQsIChjb25zdCB1bnNpZ25lZCBjaGFyICopImNvbmZpZyIsCisgICAgICAg ICAgICAgICAgICAgICAgICBzaXplb2YoImNvbmZpZyIpLTEpOworICAgIGlmIChzICE9IHlhamxf Z2VuX3N0YXR1c19vaykKKyAgICAgICAgZ290byBvdXQ7CisgICAgcyA9IGxpYnhsX2RvbWFpbl9j b25maWdfZ2VuX2pzb24oaGFuZCwgZF9jb25maWcpOworICAgIGlmIChzICE9IHlhamxfZ2VuX3N0 YXR1c19vaykKKyAgICAgICAgZ290byBvdXQ7CiAKLSAgICBpZiAoIXhsdV9jZmdfZ2V0X2xvbmcg KGNvbmZpZywgInBjaV9zZWl6ZSIsICZsLCAwKSkKLSAgICAgICAgcGNpX3NlaXplID0gbDsKKyAg ICBzID0geWFqbF9nZW5fbWFwX2Nsb3NlKGhhbmQpOworICAgIGlmIChzICE9IHlhamxfZ2VuX3N0 YXR1c19vaykKKyAgICAgICAgZ290byBvdXQ7CiAKLSAgICAvKiBUbyBiZSByZXdvcmtlZCAoYXV0 b21hdGljYWxseSBlbmFibGVkKSBvbmNlIHRoZSBhdXRvIGJhbGxvb25pbmcKLSAgICAgKiBhZnRl ciBndWVzdCBzdGFydHMgaXMgZG9uZSAod2l0aCBQQ0kgZGV2aWNlcyBwYXNzZWQgaW4pLiAqLwot ICAgIGlmIChjX2luZm8tPnR5cGUgPT0gTElCWExfRE9NQUlOX1RZUEVfUFYpIHsKLSAgICAgICAg eGx1X2NmZ19nZXRfZGVmYm9vbChjb25maWcsICJlODIwX2hvc3QiLCAmYl9pbmZvLT51LnB2LmU4 MjBfaG9zdCwgMCk7Ci0gICAgfQorb3V0OgorICAgIHJldHVybiBzOworfQogCi0gICAgaWYgKCF4 bHVfY2ZnX2dldF9zdHJpbmcoY29uZmlnLCAicmRtIiwgJmJ1ZiwgMCkpIHsKLSAgICAgICAgbGli eGxfcmRtX3Jlc2VydmUgcmRtOwotICAgICAgICBpZiAoIXhsdV9yZG1fcGFyc2UoY29uZmlnLCAm cmRtLCBidWYpKSB7Ci0gICAgICAgICAgICBiX2luZm8tPnUuaHZtLnJkbS5zdHJhdGVneSA9IHJk bS5zdHJhdGVneTsKLSAgICAgICAgICAgIGJfaW5mby0+dS5odm0ucmRtLnBvbGljeSA9IHJkbS5w b2xpY3k7Ci0gICAgICAgIH0KLSAgICB9CitzdGF0aWMgdm9pZCBwcmludGZfaW5mbyhlbnVtIG91 dHB1dF9mb3JtYXQgb3V0cHV0X2Zvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBk b21pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RvbWFpbl9jb25maWcgKmRfY29u ZmlnLCBGSUxFICpmaCkKK3sKKyAgICBpZiAob3V0cHV0X2Zvcm1hdCA9PSBPVVRQVVRfRk9STUFU X1NYUCkKKyAgICAgICAgcmV0dXJuIHByaW50Zl9pbmZvX3NleHAoZG9taWQsIGRfY29uZmlnLCBm aCk7CiAKLSAgICBpZiAoIXhsdV9jZmdfZ2V0X2xpc3QgKGNvbmZpZywgInBjaSIsICZwY2lzLCAw LCAwKSkgewotICAgICAgICBkX2NvbmZpZy0+bnVtX3BjaWRldnMgPSAwOwotICAgICAgICBkX2Nv bmZpZy0+cGNpZGV2cyA9IE5VTEw7Ci0gICAgICAgIGZvcihpID0gMDsgKGJ1ZiA9IHhsdV9jZmdf Z2V0X2xpc3RpdGVtIChwY2lzLCBpKSkgIT0gTlVMTDsgaSsrKSB7Ci0gICAgICAgICAgICBsaWJ4 bF9kZXZpY2VfcGNpICpwY2lkZXY7CisgICAgY29uc3QgY2hhciAqYnVmOworICAgIGxpYnhsX3lh amxfbGVuZ3RoIGxlbiA9IDA7CisgICAgeWFqbF9nZW5fc3RhdHVzIHM7CisgICAgeWFqbF9nZW4g aGFuZDsKIAotICAgICAgICAgICAgcGNpZGV2ID0gQVJSQVlfRVhURU5EX0lOSVRfTk9ERVZJRChk X2NvbmZpZy0+cGNpZGV2cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZF9jb25maWctPm51bV9wY2lkZXZzLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfcGNpX2luaXQpOwotICAgICAgICAg ICAgcGNpZGV2LT5tc2l0cmFuc2xhdGUgPSBwY2lfbXNpdHJhbnNsYXRlOwotICAgICAgICAgICAg cGNpZGV2LT5wb3dlcl9tZ210ID0gcGNpX3Bvd2VyX21nbXQ7Ci0gICAgICAgICAgICBwY2lkZXYt PnBlcm1pc3NpdmUgPSBwY2lfcGVybWlzc2l2ZTsKLSAgICAgICAgICAgIHBjaWRldi0+c2VpemUg PSBwY2lfc2VpemU7Ci0gICAgICAgICAgICAvKgotICAgICAgICAgICAgICogTGlrZSBvdGhlciBw Y2kgb3B0aW9uLCB0aGUgcGVyLWRldmljZSBwb2xpY3kgYWx3YXlzIGZvbGxvd3MKLSAgICAgICAg ICAgICAqIHRoZSBnbG9iYWwgcG9saWN5IGJ5IGRlZmF1bHQuCi0gICAgICAgICAgICAgKi8KLSAg ICAgICAgICAgIHBjaWRldi0+cmRtX3BvbGljeSA9IGJfaW5mby0+dS5odm0ucmRtLnBvbGljeTsK LSAgICAgICAgICAgIGUgPSB4bHVfcGNpX3BhcnNlX2JkZihjb25maWcsIHBjaWRldiwgYnVmKTsK LSAgICAgICAgICAgIGlmIChlKSB7Ci0gICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsCi0g ICAgICAgICAgICAgICAgICAgICAgICAidW5hYmxlIHRvIHBhcnNlIFBDSSBCREYgYCVzJyBmb3Ig cGFzc3Rocm91Z2hcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBidWYpOwotICAgICAgICAg ICAgICAgIGV4aXQoLWUpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChk X2NvbmZpZy0+bnVtX3BjaWRldnMgJiYgY19pbmZvLT50eXBlID09IExJQlhMX0RPTUFJTl9UWVBF X1BWKQotICAgICAgICAgICAgbGlieGxfZGVmYm9vbF9zZXQoJmJfaW5mby0+dS5wdi5lODIwX2hv c3QsIHRydWUpOworICAgIGhhbmQgPSBsaWJ4bF95YWpsX2dlbl9hbGxvYyhOVUxMKTsKKyAgICBp ZiAoIWhhbmQpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJ1bmFibGUgdG8gYWxsb2NhdGUg SlNPTiBnZW5lcmF0b3JcbiIpOworICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCF4 bHVfY2ZnX2dldF9saXN0IChjb25maWcsICJkdGRldiIsICZkdGRldnMsIDAsIDApKSB7Ci0gICAg ICAgIGRfY29uZmlnLT5udW1fZHRkZXZzID0gMDsKLSAgICAgICAgZF9jb25maWctPmR0ZGV2cyA9 IE5VTEw7Ci0gICAgICAgIGZvciAoaSA9IDA7IChidWYgPSB4bHVfY2ZnX2dldF9saXN0aXRlbShk dGRldnMsIGkpKSAhPSBOVUxMOyBpKyspIHsKLSAgICAgICAgICAgIGxpYnhsX2RldmljZV9kdGRl diAqZHRkZXY7CisgICAgcyA9IHByaW50Zl9pbmZvX29uZV9qc29uKGhhbmQsIGRvbWlkLCBkX2Nv bmZpZyk7CisgICAgaWYgKHMgIT0geWFqbF9nZW5fc3RhdHVzX29rKQorICAgICAgICBnb3RvIG91 dDsKIAotICAgICAgICAgICAgZHRkZXYgPSBBUlJBWV9FWFRFTkRfSU5JVF9OT0RFVklEKGRfY29u ZmlnLT5kdGRldnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZF9jb25maWctPm51bV9kdGRldnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX2R0ZGV2X2luaXQpOworICAgIHMgPSB5YWpsX2dl bl9nZXRfYnVmKGhhbmQsIChjb25zdCB1bnNpZ25lZCBjaGFyICoqKSZidWYsICZsZW4pOworICAg IGlmIChzICE9IHlhamxfZ2VuX3N0YXR1c19vaykKKyAgICAgICAgZ290byBvdXQ7CiAKLSAgICAg ICAgICAgIGR0ZGV2LT5wYXRoID0gc3RyZHVwKGJ1Zik7Ci0gICAgICAgICAgICBpZiAoZHRkZXYt PnBhdGggPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAidW5hYmxl IHRvIGR1cGxpY2F0ZSBzdHJpbmcgZm9yIGR0ZGV2c1xuIik7Ci0gICAgICAgICAgICAgICAgZXhp dCgtMSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9CisgICAgZnB1dHMoYnVmLCBm aCk7CiAKLSAgICBpZiAoIXhsdV9jZmdfZ2V0X2xpc3QoY29uZmlnLCAidXNiY3RybCIsICZ1c2Jj dHJscywgMCwgMCkpIHsKLSAgICAgICAgZF9jb25maWctPm51bV91c2JjdHJscyA9IDA7Ci0gICAg ICAgIGRfY29uZmlnLT51c2JjdHJscyA9IE5VTEw7Ci0gICAgICAgIHdoaWxlICgoYnVmID0geGx1 X2NmZ19nZXRfbGlzdGl0ZW0odXNiY3RybHMsIGRfY29uZmlnLT5udW1fdXNiY3RybHMpKQotICAg ICAgICAgICAgICAgIT0gTlVMTCkgewotICAgICAgICAgICAgbGlieGxfZGV2aWNlX3VzYmN0cmwg KnVzYmN0cmw7Ci0gICAgICAgICAgICBjaGFyICpidWYyID0gc3RyZHVwKGJ1Zik7Ci0gICAgICAg ICAgICBjaGFyICpwOwotCi0gICAgICAgICAgICB1c2JjdHJsID0gQVJSQVlfRVhURU5EX0lOSVQo ZF9jb25maWctPnVzYmN0cmxzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGRfY29uZmlnLT5udW1fdXNiY3RybHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbGlieGxfZGV2aWNlX3VzYmN0cmxfaW5pdCk7Ci0gICAgICAgICAgICBwID0g c3RydG9rKGJ1ZjIsICIsIik7Ci0gICAgICAgICAgICBpZiAoIXApCi0gICAgICAgICAgICAgICAg Z290byBza2lwX3VzYmN0cmw7Ci0gICAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgd2hp bGUgKCpwID09ICcgJykKLSAgICAgICAgICAgICAgICAgICAgcCsrOwotICAgICAgICAgICAgICAg IGlmIChwYXJzZV91c2JjdHJsX2NvbmZpZyh1c2JjdHJsLCBwKSkKLSAgICAgICAgICAgICAgICAg ICAgZXhpdCgxKTsKLSAgICAgICAgICAgIH0gd2hpbGUgKChwID0gc3RydG9rKE5VTEwsICIsIikp ICE9IE5VTEwpOwotc2tpcF91c2JjdHJsOgotICAgICAgICAgICAgZnJlZShidWYyKTsKLSAgICAg ICAgfQotICAgIH0KLQotICAgIGlmICgheGx1X2NmZ19nZXRfbGlzdChjb25maWcsICJ1c2JkZXYi LCAmdXNiZGV2cywgMCwgMCkpIHsKLSAgICAgICAgZF9jb25maWctPm51bV91c2JkZXZzID0gMDsK LSAgICAgICAgZF9jb25maWctPnVzYmRldnMgPSBOVUxMOwotICAgICAgICB3aGlsZSAoKGJ1ZiA9 IHhsdV9jZmdfZ2V0X2xpc3RpdGVtKHVzYmRldnMsIGRfY29uZmlnLT5udW1fdXNiZGV2cykpCi0g ICAgICAgICAgICAgICAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdXNiZGV2 ICp1c2JkZXY7Ci0gICAgICAgICAgICBjaGFyICpidWYyID0gc3RyZHVwKGJ1Zik7Ci0gICAgICAg ICAgICBjaGFyICpwOwotCi0gICAgICAgICAgICB1c2JkZXYgPSBBUlJBWV9FWFRFTkRfSU5JVF9O T0RFVklEKGRfY29uZmlnLT51c2JkZXZzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBkX2NvbmZpZy0+bnVtX3VzYmRldnMsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV91c2JkZXZfaW5pdCk7 Ci0gICAgICAgICAgICBwID0gc3RydG9rKGJ1ZjIsICIsIik7Ci0gICAgICAgICAgICBpZiAoIXAp Ci0gICAgICAgICAgICAgICAgZ290byBza2lwX3VzYmRldjsKLSAgICAgICAgICAgIGRvIHsKLSAg ICAgICAgICAgICAgICB3aGlsZSAoKnAgPT0gJyAnKQotICAgICAgICAgICAgICAgICAgICBwKys7 Ci0gICAgICAgICAgICAgICAgaWYgKHBhcnNlX3VzYmRldl9jb25maWcodXNiZGV2LCBwKSkKLSAg ICAgICAgICAgICAgICAgICAgZXhpdCgxKTsKLSAgICAgICAgICAgIH0gd2hpbGUgKChwID0gc3Ry dG9rKE5VTEwsICIsIikpICE9IE5VTEwpOwotc2tpcF91c2JkZXY6Ci0gICAgICAgICAgICBmcmVl KGJ1ZjIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3dpdGNoICh4bHVfY2ZnX2dldF9saXN0 KGNvbmZpZywgImNwdWlkIiwgJmNwdWlkcywgMCwgMSkpIHsKLSAgICBjYXNlIDA6Ci0gICAgICAg IHsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVycnN0cjsKLQotICAgICAgICAgICAgZm9yIChp ID0gMDsgKGJ1ZiA9IHhsdV9jZmdfZ2V0X2xpc3RpdGVtKGNwdWlkcywgaSkpICE9IE5VTEw7IGkr KykgewotICAgICAgICAgICAgICAgIGUgPSBsaWJ4bF9jcHVpZF9wYXJzZV9jb25maWdfeGVuZCgm Yl9pbmZvLT5jcHVpZCwgYnVmKTsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKGUpIHsKLSAgICAg ICAgICAgICAgICBjYXNlIDA6IGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGNhc2UgMToKLSAg ICAgICAgICAgICAgICAgICAgZXJyc3RyID0gImlsbGVnYWwgbGVhZiBudW1iZXIiOwotICAgICAg ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAg ICAgICAgICAgIGVycnN0ciA9ICJpbGxlZ2FsIHN1YmxlYWYgbnVtYmVyIjsKLSAgICAgICAgICAg ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSAzOgotICAgICAgICAgICAgICAg ICAgICBlcnJzdHIgPSAibWlzc2luZyBjb2xvbiI7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFr OwotICAgICAgICAgICAgICAgIGNhc2UgNDoKLSAgICAgICAgICAgICAgICAgICAgZXJyc3RyID0g ImludmFsaWQgcmVnaXN0ZXIgbmFtZSAobXVzdCBiZSBlW2FiY2RdeCkiOwotICAgICAgICAgICAg ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIDU6Ci0gICAgICAgICAgICAgICAg ICAgIGVycnN0ciA9ICJwb2xpY3kgc3RyaW5nIG11c3QgYmUgZXhhY3RseSAzMiBjaGFyYWN0ZXJz IGxvbmciOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZh dWx0OgotICAgICAgICAgICAgICAgICAgICBlcnJzdHIgPSAidW5rbm93biBlcnJvciI7Ci0gICAg ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg ICBmcHJpbnRmKHN0ZGVyciwgIndoaWxlIHBhcnNpbmcgQ1BVSUQgbGluZTogXCIlc1wiOlxuIiwg YnVmKTsKLSAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAgZXJyb3IgIyVpOiAlc1xu IiwgZSwgZXJyc3RyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBicmVhazsK LSAgICBjYXNlIEVJTlZBTDogICAgLyogY29uZmlnIG9wdGlvbiBpcyBub3QgYSBsaXN0LCBwYXJz ZSBhcyBhIHN0cmluZyAqLwotICAgICAgICBpZiAoIXhsdV9jZmdfZ2V0X3N0cmluZyhjb25maWcs ICJjcHVpZCIsICZidWYsIDApKSB7Ci0gICAgICAgICAgICBjaGFyICpidWYyLCAqcCwgKnN0cnRv a19wdHIgPSBOVUxMOwotICAgICAgICAgICAgY29uc3QgY2hhciAqZXJyc3RyOwotCi0gICAgICAg ICAgICBidWYyID0gc3RyZHVwKGJ1Zik7Ci0gICAgICAgICAgICBwID0gc3RydG9rX3IoYnVmMiwg IiwiLCAmc3RydG9rX3B0cik7Ci0gICAgICAgICAgICBpZiAocCA9PSBOVUxMKSB7Ci0gICAgICAg ICAgICAgICAgZnJlZShidWYyKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg IH0KLSAgICAgICAgICAgIGlmIChzdHJjbXAocCwgImhvc3QiKSkgewotICAgICAgICAgICAgICAg IGZwcmludGYoc3RkZXJyLCAid2hpbGUgcGFyc2luZyBDUFVJRCBzdHJpbmc6IFwiJXNcIjpcbiIs IGJ1Zik7Ci0gICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIgIGVycm9yOiBmaXJzdCB3 b3JkIG11c3QgYmUgXCJob3N0XCJcbiIpOwotICAgICAgICAgICAgICAgIGZyZWUoYnVmMik7Ci0g ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmb3IgKHAg PSBzdHJ0b2tfcihOVUxMLCAiLCIsICZzdHJ0b2tfcHRyKTsgcCAhPSBOVUxMOwotICAgICAgICAg ICAgICAgICBwID0gc3RydG9rX3IoTlVMTCwgIiwiLCAmc3RydG9rX3B0cikpIHsKLSAgICAgICAg ICAgICAgICBlID0gbGlieGxfY3B1aWRfcGFyc2VfY29uZmlnKCZiX2luZm8tPmNwdWlkLCBwKTsK LSAgICAgICAgICAgICAgICBzd2l0Y2ggKGUpIHsKLSAgICAgICAgICAgICAgICBjYXNlIDA6IGNv bnRpbnVlOwotICAgICAgICAgICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgICAgICAgICAgZXJy c3RyID0gIm1pc3NpbmcgXCI9XCIgaW4ga2V5PXZhbHVlIjsKLSAgICAgICAgICAgICAgICAgICAg YnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSAyOgotICAgICAgICAgICAgICAgICAgICBlcnJz dHIgPSAidW5rbm93biBDUFVJRCBmbGFnIG5hbWUiOwotICAgICAgICAgICAgICAgICAgICBicmVh azsKLSAgICAgICAgICAgICAgICBjYXNlIDM6Ci0gICAgICAgICAgICAgICAgICAgIGVycnN0ciA9 ICJpbGxlZ2FsIENQVUlEIHZhbHVlIChtdXN0IGJlOiBbMHwxfHh8a3xzXSkiOwotICAgICAgICAg ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg ICAgICAgICBlcnJzdHIgPSAidW5rbm93biBlcnJvciI7Ci0gICAgICAgICAgICAgICAgICAgIGJy ZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwg IndoaWxlIHBhcnNpbmcgQ1BVSUQgZmxhZzogXCIlc1wiOlxuIiwgcCk7Ci0gICAgICAgICAgICAg ICAgZnByaW50ZihzdGRlcnIsICIgIGVycm9yICMlaTogJXNcbiIsIGUsIGVycnN0cik7Ci0gICAg ICAgICAgICB9Ci0gICAgICAgICAgICBmcmVlKGJ1ZjIpOwotICAgICAgICB9Ci0gICAgICAgIGJy ZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KK291dDoKKyAgICB5YWps X2dlbl9mcmVlKGhhbmQpOwogCi0gICAgLyogcGFyc2UgZGV2aWNlIG1vZGVsIGFyZ3VtZW50cywg dGhpcyB3b3JrcyBmb3IgcHYsIGh2bSBhbmQgc3R1YmRvbSAqLwotICAgIGlmICgheGx1X2NmZ19n ZXRfc3RyaW5nIChjb25maWcsICJkZXZpY2VfbW9kZWwiLCAmYnVmLCAwKSkgeworICAgIGlmIChz ICE9IHlhamxfZ2VuX3N0YXR1c19vaykKICAgICAgICAgZnByaW50ZihzdGRlcnIsCi0gICAgICAg ICAgICAgICAgIldBUk5JTkc6IGlnbm9yaW5nIGRldmljZV9tb2RlbCBkaXJlY3RpdmUuXG4iCi0g ICAgICAgICAgICAgICAgIldBUk5JTkc6IFVzZSBcImRldmljZV9tb2RlbF9vdmVycmlkZVwiIGlu c3RlYWQgaWYgeW91IgotICAgICAgICAgICAgICAgICIgcmVhbGx5IHdhbnQgYSBub24tZGVmYXVs dCBkZXZpY2VfbW9kZWxcbiIpOwotICAgICAgICBpZiAoc3Ryc3RyKGJ1ZiwgInN0dWJkb20tZG0i KSkgewotICAgICAgICAgICAgaWYgKGNfaW5mby0+dHlwZSA9PSBMSUJYTF9ET01BSU5fVFlQRV9I Vk0pCi0gICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJXQVJOSU5HOiBPciB1c2UiCi0g ICAgICAgICAgICAgICAgICAgICAgICAiIFwiZGV2aWNlX21vZGVsX3N0dWJkb21haW5fb3ZlcnJp ZGVcIiBpZiB5b3UgIgotICAgICAgICAgICAgICAgICAgICAgICAgIiB3YW50IHRvIGVuYWJsZSBz dHViZG9tYWluc1xuIik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZnByaW50 ZihzdGRlcnIsICJXQVJOSU5HOiBpZ25vcmluZyIKLSAgICAgICAgICAgICAgICAgICAgICAgICIg XCJkZXZpY2VfbW9kZWxfc3R1YmRvbWFpbl9vdmVycmlkZVwiIGRpcmVjdGl2ZSIKLSAgICAgICAg ICAgICAgICAgICAgICAgICIgZm9yIHB2IGd1ZXN0XG4iKTsKLSAgICAgICAgfQotICAgIH0KKyAg ICAgICAgICAgICAgICAidW5hYmxlIHRvIGZvcm1hdCBkb21haW4gY29uZmlnIGFzIEpTT04gKFlB Skw6JWQpXG4iLCBzKTsKIAorICAgIHhmbHVzaF9zdHJlYW0oZmgpOworfQogCi0gICAgeGx1X2Nm Z19yZXBsYWNlX3N0cmluZyAoY29uZmlnLCAiZGV2aWNlX21vZGVsX292ZXJyaWRlIiwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAmYl9pbmZvLT5kZXZpY2VfbW9kZWwsIDApOwotICAgIGlm ICgheGx1X2NmZ19nZXRfc3RyaW5nIChjb25maWcsICJkZXZpY2VfbW9kZWxfdmVyc2lvbiIsICZi dWYsIDApKSB7Ci0gICAgICAgIGlmICghc3RyY21wKGJ1ZiwgInFlbXUteGVuLXRyYWRpdGlvbmFs IikpIHsKLSAgICAgICAgICAgIGJfaW5mby0+ZGV2aWNlX21vZGVsX3ZlcnNpb24KLSAgICAgICAg ICAgICAgICA9IExJQlhMX0RFVklDRV9NT0RFTF9WRVJTSU9OX1FFTVVfWEVOX1RSQURJVElPTkFM OwotICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYnVmLCAicWVtdS14ZW4iKSkgewotICAgICAg ICAgICAgYl9pbmZvLT5kZXZpY2VfbW9kZWxfdmVyc2lvbgotICAgICAgICAgICAgICAgID0gTElC WExfREVWSUNFX01PREVMX1ZFUlNJT05fUUVNVV9YRU47Ci0gICAgICAgIH0gZWxzZSBpZiAoIXN0 cmNtcChidWYsICJub25lIikpIHsKLSAgICAgICAgICAgIGJfaW5mby0+ZGV2aWNlX21vZGVsX3Zl cnNpb24gPSBMSUJYTF9ERVZJQ0VfTU9ERUxfVkVSU0lPTl9OT05FOwotICAgICAgICB9IGVsc2Ug ewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsCi0gICAgICAgICAgICAgICAgICAgICJVbmtu b3duIGRldmljZV9tb2RlbF92ZXJzaW9uIFwiJXNcIiBzcGVjaWZpZWRcbiIsIGJ1Zik7Ci0gICAg ICAgICAgICBleGl0KDEpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChiX2luZm8tPmRldmlj ZV9tb2RlbCkKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJXQVJOSU5HOiBkZXZpY2UgbW9kZWwg b3ZlcnJpZGUgZ2l2ZW4gd2l0aG91dCBzcGVjaWZpYyBETSB2ZXJzaW9uXG4iKTsKLSAgICB4bHVf Y2ZnX2dldF9kZWZib29sIChjb25maWcsICJkZXZpY2VfbW9kZWxfc3R1YmRvbWFpbl9vdmVycmlk ZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJmJfaW5mby0+ZGV2aWNlX21vZGVsX3N0dWJk b21haW4sIDApOworc3RhdGljIGludCBkb19kYWVtb25pemUoY2hhciAqbmFtZSwgY29uc3QgY2hh ciAqcGlkZmlsZSkKK3sKKyAgICBjaGFyICpmdWxsbmFtZTsKKyAgICBwaWRfdCBjaGlsZDE7Cisg ICAgaW50IG51bGxmZCwgcmV0ID0gMDsKIAotICAgIGlmICgheGx1X2NmZ19nZXRfc3RyaW5nIChj b25maWcsICJkZXZpY2VfbW9kZWxfc3R1YmRvbWFpbl9zZWNsYWJlbCIsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICZidWYsIDApKQotICAgICAgICB4bHVfY2ZnX3JlcGxhY2Vfc3RyaW5n KGNvbmZpZywgImRldmljZV9tb2RlbF9zdHViZG9tYWluX3NlY2xhYmVsIiwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAmYl9pbmZvLT5kZXZpY2VfbW9kZWxfc3NpZF9sYWJlbCwgMCk7 CisgICAgY2hpbGQxID0geGxfZm9yayhjaGlsZF93YWl0ZGFlbW9uLCAiZG9tYWluIG1vbml0b3Jp bmcgZGFlbW9uaXppbmcgY2hpbGQiKTsKKyAgICBpZiAoY2hpbGQxKSB7CisgICAgICAgIHJldCA9 IGNoaWxkX3JlcG9ydChjaGlsZF93YWl0ZGFlbW9uKTsKKyAgICAgICAgaWYgKHJldCkgZ290byBv dXQ7CisgICAgICAgIHJldCA9IDE7CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KIAotICAgIHhs dV9jZmdfcmVwbGFjZV9zdHJpbmcoY29uZmlnLCAiZGV2aWNlX21vZGVsX3VzZXIiLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgJmJfaW5mby0+ZGV2aWNlX21vZGVsX3VzZXIsIDApOworICAg IHBvc3Rmb3JrKCk7CiAKLSNkZWZpbmUgcGFyc2VfZXh0cmFfYXJncyh0eXBlKSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGUgPSB4bHVfY2ZnX2dldF9s aXN0X2FzX3N0cmluZ19saXN0KGNvbmZpZywgImRldmljZV9tb2RlbF9hcmdzIiN0eXBlLCBcCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYl9pbmZvLT5leHRyYSMjdHlwZSwg MCk7ICAgICAgICAgICAgXAotICAgIGlmIChlICYmIGUgIT0gRVNSQ0gpIHsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGZwcmludGYoc3Rk ZXJyLCJ4bDogVW5hYmxlIHRvIHBhcnNlIGRldmljZV9tb2RlbF9hcmdzIiN0eXBlIi5cbiIpO1wK LSAgICAgICAgZXhpdCgtRVJST1JfRkFJTCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorICAgIHJldCA9IGxpYnhsX2NyZWF0ZV9sb2dmaWxlKGN0eCwg bmFtZSwgJmZ1bGxuYW1lKTsKKyAgICBpZiAocmV0KSB7CisgICAgICAgIExPRygiZmFpbGVkIHRv IG9wZW4gbG9nZmlsZSAlczogJXMiLGZ1bGxuYW1lLHN0cmVycm9yKGVycm5vKSk7CisgICAgICAg IGV4aXQoLTEpOwogICAgIH0KIAotICAgIC8qIHBhcnNlIGV4dHJhIGFyZ3MgZm9yIHFlbXUsIGNv bW1vbiB0byBib3RoIHB2LCBodm0gKi8KLSAgICBwYXJzZV9leHRyYV9hcmdzKCk7Ci0KLSAgICAv KiBwYXJzZSBleHRyYSBhcmdzIGRlZGljYXRlZCB0byBwdiAqLwotICAgIHBhcnNlX2V4dHJhX2Fy Z3MoX3B2KTsKKyAgICBDSEtfU1lTQ0FMTChsb2dmaWxlID0gb3BlbihmdWxsbmFtZSwgT19XUk9O TFl8T19DUkVBVHxPX0FQUEVORCwgMDY0NCkpOworICAgIGZyZWUoZnVsbG5hbWUpOworICAgIGFz c2VydChsb2dmaWxlID49IDMpOwogCi0gICAgLyogcGFyc2UgZXh0cmEgYXJncyBkZWRpY2F0ZWQg dG8gaHZtICovCi0gICAgcGFyc2VfZXh0cmFfYXJncyhfaHZtKTsKKyAgICBDSEtfU1lTQ0FMTChu dWxsZmQgPSBvcGVuKCIvZGV2L251bGwiLCBPX1JET05MWSkpOworICAgIGFzc2VydChudWxsZmQg Pj0gMyk7CiAKLSN1bmRlZiBwYXJzZV9leHRyYV9hcmdzCisgICAgZHVwMihudWxsZmQsIDApOwor ICAgIGR1cDIobG9nZmlsZSwgMSk7CisgICAgZHVwMihsb2dmaWxlLCAyKTsKIAotICAgIC8qIElm IHdlJ3ZlIGFscmVhZHkgZ290IHZmYj1bXSBmb3IgUFYgZ3Vlc3QgdGhlbiBpZ25vcmUgdG9wIGxl dmVsCi0gICAgICogVk5DIGNvbmZpZy4gKi8KLSAgICBpZiAoY19pbmZvLT50eXBlID09IExJQlhM X0RPTUFJTl9UWVBFX1BWICYmICFkX2NvbmZpZy0+bnVtX3ZmYnMpIHsKLSAgICAgICAgbG9uZyB2 bmNfZW5hYmxlZCA9IDA7CisgICAgY2xvc2UobnVsbGZkKTsKIAotICAgICAgICBpZiAoIXhsdV9j ZmdfZ2V0X2xvbmcgKGNvbmZpZywgInZuYyIsICZsLCAwKSkKLSAgICAgICAgICAgIHZuY19lbmFi bGVkID0gbDsKKyAgICBDSEtfU1lTQ0FMTChkYWVtb24oMCwgMSkpOwogCi0gICAgICAgIGlmICh2 bmNfZW5hYmxlZCkgewotICAgICAgICAgICAgbGlieGxfZGV2aWNlX3ZmYiAqdmZiOwotICAgICAg ICAgICAgbGlieGxfZGV2aWNlX3ZrYiAqdmtiOworICAgIGlmIChwaWRmaWxlKSB7CisgICAgICAg IGludCBmZCA9IG9wZW4ocGlkZmlsZSwgT19SRFdSIHwgT19DUkVBVCwgU19JUlVTUnxTX0lXVVNS KTsKKyAgICAgICAgY2hhciAqcGlkID0gTlVMTDsKIAotICAgICAgICAgICAgdmZiID0gQVJSQVlf RVhURU5EX0lOSVQoZF9jb25maWctPnZmYnMsIGRfY29uZmlnLT5udW1fdmZicywKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV92ZmJfaW5pdCk7CisgICAg ICAgIGlmIChmZCA9PSAtMSkgeworICAgICAgICAgICAgcGVycm9yKCJVbmFibGUgdG8gb3BlbiBw aWRmaWxlIik7CisgICAgICAgICAgICBleGl0KDEpOworICAgICAgICB9CiAKLSAgICAgICAgICAg IHZrYiA9IEFSUkFZX0VYVEVORF9JTklUKGRfY29uZmlnLT52a2JzLCBkX2NvbmZpZy0+bnVtX3Zr YnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2Vfdmti X2luaXQpOworICAgICAgICBpZiAoYXNwcmludGYoJnBpZCwgIiVsZFxuIiwgKGxvbmcpZ2V0cGlk KCkpID09IC0xKSB7CisgICAgICAgICAgICBwZXJyb3IoIkZvcm1hdHRpbmcgcGlkIik7CisgICAg ICAgICAgICBleGl0KDEpOworICAgICAgICB9CiAKLSAgICAgICAgICAgIHBhcnNlX3RvcF9sZXZl bF92bmNfb3B0aW9ucyhjb25maWcsICZ2ZmItPnZuYyk7Ci0gICAgICAgICAgICBwYXJzZV90b3Bf bGV2ZWxfc2RsX29wdGlvbnMoY29uZmlnLCAmdmZiLT5zZGwpOwotICAgICAgICAgICAgeGx1X2Nm Z19yZXBsYWNlX3N0cmluZyAoY29uZmlnLCAia2V5bWFwIiwgJnZmYi0+a2V5bWFwLCAwKTsKKyAg ICAgICAgaWYgKHdyaXRlKGZkLCBwaWQsIHN0cmxlbihwaWQpKSA8IDApIHsKKyAgICAgICAgICAg IHBlcnJvcigiV3JpdGluZyBwaWQiKTsKKyAgICAgICAgICAgIGV4aXQoMSk7CiAgICAgICAgIH0K LSAgICB9IGVsc2UgewotICAgICAgICBwYXJzZV90b3BfbGV2ZWxfdm5jX29wdGlvbnMoY29uZmln LCAmYl9pbmZvLT51Lmh2bS52bmMpOwotICAgICAgICBwYXJzZV90b3BfbGV2ZWxfc2RsX29wdGlv bnMoY29uZmlnLCAmYl9pbmZvLT51Lmh2bS5zZGwpOwotICAgIH0KLQotICAgIGlmIChjX2luZm8t PnR5cGUgPT0gTElCWExfRE9NQUlOX1RZUEVfSFZNKSB7Ci0gICAgICAgIGlmICgheGx1X2NmZ19n ZXRfc3RyaW5nIChjb25maWcsICJ2Z2EiLCAmYnVmLCAwKSkgewotICAgICAgICAgICAgaWYgKCFz dHJjbXAoYnVmLCAic3RkdmdhIikpIHsKLSAgICAgICAgICAgICAgICBiX2luZm8tPnUuaHZtLnZn YS5raW5kID0gTElCWExfVkdBX0lOVEVSRkFDRV9UWVBFX1NURDsKLSAgICAgICAgICAgIH0gZWxz ZSBpZiAoIXN0cmNtcChidWYsICJjaXJydXMiKSkgewotICAgICAgICAgICAgICAgIGJfaW5mby0+ dS5odm0udmdhLmtpbmQgPSBMSUJYTF9WR0FfSU5URVJGQUNFX1RZUEVfQ0lSUlVTOwotICAgICAg ICAgICAgfSBlbHNlIGlmICghc3RyY21wKGJ1ZiwgIm5vbmUiKSkgewotICAgICAgICAgICAgICAg IGJfaW5mby0+dS5odm0udmdhLmtpbmQgPSBMSUJYTF9WR0FfSU5URVJGQUNFX1RZUEVfTk9ORTsK LSAgICAgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChidWYsICJxeGwiKSkgewotICAgICAgICAg ICAgICAgIGJfaW5mby0+dS5odm0udmdhLmtpbmQgPSBMSUJYTF9WR0FfSU5URVJGQUNFX1RZUEVf UVhMOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVy ciwgIlVua25vd24gdmdhIFwiJXNcIiBzcGVjaWZpZWRcbiIsIGJ1Zik7Ci0gICAgICAgICAgICAg ICAgZXhpdCgxKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmICgheGx1X2NmZ19n ZXRfbG9uZyhjb25maWcsICJzdGR2Z2EiLCAmbCwgMCkpCi0gICAgICAgICAgICBiX2luZm8tPnUu aHZtLnZnYS5raW5kID0gbCA/IExJQlhMX1ZHQV9JTlRFUkZBQ0VfVFlQRV9TVEQgOgotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJYTF9WR0FfSU5URVJGQUNFX1RZ UEVfQ0lSUlVTOwotCi0gICAgICAgIGlmICgheGx1X2NmZ19nZXRfc3RyaW5nKGNvbmZpZywgImhk dHlwZSIsICZidWYsIDApICYmCi0gICAgICAgICAgICBsaWJ4bF9oZHR5cGVfZnJvbV9zdHJpbmco YnVmLCAmYl9pbmZvLT51Lmh2bS5oZHR5cGUpKSB7Ci0gICAgICAgICAgICAgICAgZnByaW50Zihz dGRlcnIsICJFUlJPUjogaW52YWxpZCB2YWx1ZSBcIiVzXCIgZm9yIFwiaGR0eXBlXCJcbiIsCi0g ICAgICAgICAgICAgICAgICAgIGJ1Zik7Ci0gICAgICAgICAgICAgICAgZXhpdCAoMSk7Ci0gICAg ICAgIH0KLQotICAgICAgICB4bHVfY2ZnX3JlcGxhY2Vfc3RyaW5nIChjb25maWcsICJrZXltYXAi LCAmYl9pbmZvLT51Lmh2bS5rZXltYXAsIDApOwotICAgICAgICB4bHVfY2ZnX2dldF9kZWZib29s IChjb25maWcsICJzcGljZSIsICZiX2luZm8tPnUuaHZtLnNwaWNlLmVuYWJsZSwgMCk7Ci0gICAg ICAgIGlmICgheGx1X2NmZ19nZXRfbG9uZyAoY29uZmlnLCAic3BpY2Vwb3J0IiwgJmwsIDApKQot ICAgICAgICAgICAgYl9pbmZvLT51Lmh2bS5zcGljZS5wb3J0ID0gbDsKLSAgICAgICAgaWYgKCF4 bHVfY2ZnX2dldF9sb25nIChjb25maWcsICJzcGljZXRsc19wb3J0IiwgJmwsIDApKQotICAgICAg ICAgICAgYl9pbmZvLT51Lmh2bS5zcGljZS50bHNfcG9ydCA9IGw7Ci0gICAgICAgIHhsdV9jZmdf cmVwbGFjZV9zdHJpbmcgKGNvbmZpZywgInNwaWNlaG9zdCIsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICZiX2luZm8tPnUuaHZtLnNwaWNlLmhvc3QsIDApOwotICAgICAgICB4bHVf Y2ZnX2dldF9kZWZib29sKGNvbmZpZywgInNwaWNlZGlzYWJsZV90aWNrZXRpbmciLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICZiX2luZm8tPnUuaHZtLnNwaWNlLmRpc2FibGVfdGlja2V0 aW5nLCAwKTsKLSAgICAgICAgeGx1X2NmZ19yZXBsYWNlX3N0cmluZyAoY29uZmlnLCAic3BpY2Vw YXNzd2QiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYl9pbmZvLT51Lmh2bS5z cGljZS5wYXNzd2QsIDApOwotICAgICAgICB4bHVfY2ZnX2dldF9kZWZib29sKGNvbmZpZywgInNw aWNlYWdlbnRfbW91c2UiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICZiX2luZm8tPnUu aHZtLnNwaWNlLmFnZW50X21vdXNlLCAwKTsKLSAgICAgICAgeGx1X2NmZ19nZXRfZGVmYm9vbChj b25maWcsICJzcGljZXZkYWdlbnQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICZiX2lu Zm8tPnUuaHZtLnNwaWNlLnZkYWdlbnQsIDApOwotICAgICAgICB4bHVfY2ZnX2dldF9kZWZib29s KGNvbmZpZywgInNwaWNlX2NsaXBib2FyZF9zaGFyaW5nIiwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAmYl9pbmZvLT51Lmh2bS5zcGljZS5jbGlwYm9hcmRfc2hhcmluZywgMCk7Ci0gICAg ICAgIGlmICgheGx1X2NmZ19nZXRfbG9uZyAoY29uZmlnLCAic3BpY2V1c2JyZWRpcmVjdGlvbiIs ICZsLCAwKSkKLSAgICAgICAgICAgIGJfaW5mby0+dS5odm0uc3BpY2UudXNicmVkaXJlY3Rpb24g PSBsOwotICAgICAgICB4bHVfY2ZnX3JlcGxhY2Vfc3RyaW5nIChjb25maWcsICJzcGljZV9pbWFn ZV9jb21wcmVzc2lvbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZiX2luZm8t PnUuaHZtLnNwaWNlLmltYWdlX2NvbXByZXNzaW9uLCAwKTsKLSAgICAgICAgeGx1X2NmZ19yZXBs YWNlX3N0cmluZyAoY29uZmlnLCAic3BpY2Vfc3RyZWFtaW5nX3ZpZGVvIiwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJmJfaW5mby0+dS5odm0uc3BpY2Uuc3RyZWFtaW5nX3ZpZGVv LCAwKTsKLSAgICAgICAgeGx1X2NmZ19nZXRfZGVmYm9vbChjb25maWcsICJub2dyYXBoaWMiLCAm Yl9pbmZvLT51Lmh2bS5ub2dyYXBoaWMsIDApOwotICAgICAgICBpZiAoIXhsdV9jZmdfZ2V0X2xv bmcoY29uZmlnLCAiZ2Z4X3Bhc3N0aHJ1IiwgJmwsIDEpKSB7Ci0gICAgICAgICAgICBsaWJ4bF9k ZWZib29sX3NldCgmYl9pbmZvLT51Lmh2bS5nZnhfcGFzc3RocnUsIGwpOwotICAgICAgICB9IGVs c2UgaWYgKCF4bHVfY2ZnX2dldF9zdHJpbmcoY29uZmlnLCAiZ2Z4X3Bhc3N0aHJ1IiwgJmJ1Ziwg MCkpIHsKLSAgICAgICAgICAgIGlmIChsaWJ4bF9nZnhfcGFzc3RocnVfa2luZF9mcm9tX3N0cmlu ZyhidWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJfaW5mby0+ dS5odm0uZ2Z4X3Bhc3N0aHJ1X2tpbmQpKSB7Ci0gICAgICAgICAgICAgICAgZnByaW50ZihzdGRl cnIsCi0gICAgICAgICAgICAgICAgICAgICAgICAiRVJST1I6IGludmFsaWQgdmFsdWUgXCIlc1wi IGZvciBcImdmeF9wYXNzdGhydVwiXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgYnVmKTsK LSAgICAgICAgICAgICAgICBleGl0ICgxKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxp YnhsX2RlZmJvb2xfc2V0KCZiX2luZm8tPnUuaHZtLmdmeF9wYXNzdGhydSwgdHJ1ZSk7Ci0gICAg ICAgIH0KLSAgICAgICAgc3dpdGNoICh4bHVfY2ZnX2dldF9saXN0X2FzX3N0cmluZ19saXN0KGNv bmZpZywgInNlcmlhbCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAmYl9pbmZvLT51Lmh2bS5zZXJpYWxfbGlzdCwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEpKQotICAgICAgICB7Ci0KLSAgICAgICAgY2Fz ZSAwOiBicmVhazsgLyogU3VjY2VzcyAqLwotICAgICAgICBjYXNlIEVTUkNIOiBicmVhazsgLyog T3B0aW9uIG5vdCBwcmVzZW50ICovCi0gICAgICAgIGNhc2UgRUlOVkFMOgotICAgICAgICAgICAg LyogSWYgaXQncyBub3QgYSB2YWxpZCBsaXN0LCB0cnkgcmVhZGluZyBpdCBhcyBhbiBhdG9tLAot ICAgICAgICAgICAgICogZmFsbGluZyB0aHJvdWdoIHRvIGFuIGVycm9yIGlmIGl0IGZhaWxzICov Ci0gICAgICAgICAgICBpZiAoIXhsdV9jZmdfcmVwbGFjZV9zdHJpbmcoY29uZmlnLCAic2VyaWFs IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYl9pbmZvLT51Lmh2 bS5zZXJpYWwsIDApKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgLyogRkFM TFRIUlUgKi8KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCJ4 bDogVW5hYmxlIHRvIHBhcnNlIHNlcmlhbC5cbiIpOwotICAgICAgICAgICAgZXhpdCgtRVJST1Jf RkFJTCk7Ci0gICAgICAgIH0KLSAgICAgICAgeGx1X2NmZ19yZXBsYWNlX3N0cmluZyAoY29uZmln LCAiYm9vdCIsICZiX2luZm8tPnUuaHZtLmJvb3QsIDApOwotICAgICAgICB4bHVfY2ZnX2dldF9k ZWZib29sKGNvbmZpZywgInVzYiIsICZiX2luZm8tPnUuaHZtLnVzYiwgMCk7Ci0gICAgICAgIGlm ICgheGx1X2NmZ19nZXRfbG9uZyAoY29uZmlnLCAidXNidmVyc2lvbiIsICZsLCAwKSkKLSAgICAg ICAgICAgIGJfaW5mby0+dS5odm0udXNidmVyc2lvbiA9IGw7Ci0gICAgICAgIHN3aXRjaCAoeGx1 X2NmZ19nZXRfbGlzdF9hc19zdHJpbmdfbGlzdChjb25maWcsICJ1c2JkZXZpY2UiLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJfaW5mby0+dS5odm0u dXNiZGV2aWNlX2xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAxKSkKLSAgICAgICAgewotCi0gICAgICAgIGNhc2UgMDogYnJlYWs7IC8qIFN1Y2Nl c3MgKi8KLSAgICAgICAgY2FzZSBFU1JDSDogYnJlYWs7IC8qIE9wdGlvbiBub3QgcHJlc2VudCAq LwotICAgICAgICBjYXNlIEVJTlZBTDoKLSAgICAgICAgICAgIC8qIElmIGl0J3Mgbm90IGEgdmFs aWQgbGlzdCwgdHJ5IHJlYWRpbmcgaXQgYXMgYW4gYXRvbSwKLSAgICAgICAgICAgICAqIGZhbGxp bmcgdGhyb3VnaCB0byBhbiBlcnJvciBpZiBpdCBmYWlscyAqLwotICAgICAgICAgICAgaWYgKCF4 bHVfY2ZnX3JlcGxhY2Vfc3RyaW5nKGNvbmZpZywgInVzYmRldmljZSIsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJfaW5mby0+dS5odm0udXNiZGV2aWNlLCAwKSkK LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIC8qIEZBTExUSFJVICovCi0gICAg ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwieGw6IFVuYWJsZSB0byBw YXJzZSB1c2JkZXZpY2UuXG4iKTsKLSAgICAgICAgICAgIGV4aXQoLUVSUk9SX0ZBSUwpOworCisg ICAgICAgIGlmIChjbG9zZShmZCkgPCAwKSB7CisgICAgICAgICAgICBwZXJyb3IoIkNsb3Npbmcg cGlkZmlsZSIpOworICAgICAgICAgICAgZXhpdCgxKTsKICAgICAgICAgfQotICAgICAgICB4bHVf Y2ZnX3JlcGxhY2Vfc3RyaW5nIChjb25maWcsICJzb3VuZGh3IiwgJmJfaW5mby0+dS5odm0uc291 bmRodywgMCk7Ci0gICAgICAgIHhsdV9jZmdfZ2V0X2RlZmJvb2woY29uZmlnLCAieGVuX3BsYXRm b3JtX3BjaSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJfaW5mby0+dS5odm0ueGVu X3BsYXRmb3JtX3BjaSwgMCk7CiAKLSAgICAgICAgaWYoYl9pbmZvLT51Lmh2bS52bmMubGlzdGVu Ci0gICAgICAgICAgICYmIGJfaW5mby0+dS5odm0udm5jLmRpc3BsYXkKLSAgICAgICAgICAgJiYg c3RyY2hyKGJfaW5mby0+dS5odm0udm5jLmxpc3RlbiwgJzonKSAhPSBOVUxMKSB7Ci0gICAgICAg ICAgICBmcHJpbnRmKHN0ZGVyciwKLSAgICAgICAgICAgICAgICAgICAgIkVSUk9SOiBEaXNwbGF5 IHNwZWNpZmllZCBib3RoIGluIHZuY2xpc3RlbiIKLSAgICAgICAgICAgICAgICAgICAgIiBhbmQg dm5jZGlzcGxheSFcbiIpOwotICAgICAgICAgICAgZXhpdCAoMSk7CisgICAgICAgIGZyZWUocGlk KTsKKyAgICB9CiAKLSAgICAgICAgfQorb3V0OgorICAgIHJldHVybiByZXQ7Cit9CiAKLSAgICAg ICAgaWYgKCF4bHVfY2ZnX2dldF9zdHJpbmcgKGNvbmZpZywgInZlbmRvcl9kZXZpY2UiLCAmYnVm LCAwKSkgewotICAgICAgICAgICAgbGlieGxfdmVuZG9yX2RldmljZSBkOwordm9pZCBzZXRfZGVm YXVsdF9uaWNfdmFsdWVzKGxpYnhsX2RldmljZV9uaWMgKm5pYyk7Cit2b2lkIHNldF9kZWZhdWx0 X25pY192YWx1ZXMobGlieGxfZGV2aWNlX25pYyAqbmljKQorewogCi0gICAgICAgICAgICBlID0g bGlieGxfdmVuZG9yX2RldmljZV9mcm9tX3N0cmluZyhidWYsICZkKTsKLSAgICAgICAgICAgIGlm IChlKSB7Ci0gICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsCi0gICAgICAgICAgICAgICAg ICAgICAgICAieGw6IHVua25vd24gdmVuZG9yX2RldmljZSAnJXMnXG4iLAotICAgICAgICAgICAg ICAgICAgICAgICAgYnVmKTsKLSAgICAgICAgICAgICAgICBleGl0KC1FUlJPUl9GQUlMKTsKLSAg ICAgICAgICAgIH0KKyAgICBpZiAoZGVmYXVsdF92aWZzY3JpcHQpIHsKKyAgICAgICAgZnJlZShu aWMtPnNjcmlwdCk7CisgICAgICAgIG5pYy0+c2NyaXB0ID0gc3RyZHVwKGRlZmF1bHRfdmlmc2Ny aXB0KTsKKyAgICB9CiAKLSAgICAgICAgICAgIGJfaW5mby0+dS5odm0udmVuZG9yX2RldmljZSA9 IGQ7Ci0gICAgICAgIH0KKyAgICBpZiAoZGVmYXVsdF9icmlkZ2UpIHsKKyAgICAgICAgZnJlZShu aWMtPmJyaWRnZSk7CisgICAgICAgIG5pYy0+YnJpZGdlID0gc3RyZHVwKGRlZmF1bHRfYnJpZGdl KTsKICAgICB9CiAKLSAgICBpZiAoIXhsdV9jZmdfZ2V0X3N0cmluZyAoY29uZmlnLCAiZ2ljX3Zl cnNpb24iLCAmYnVmLCAxKSkgewotICAgICAgICBlID0gbGlieGxfZ2ljX3ZlcnNpb25fZnJvbV9z dHJpbmcoYnVmLCAmYl9pbmZvLT5hcmNoX2FybS5naWNfdmVyc2lvbik7Ci0gICAgICAgIGlmIChl KSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwKLSAgICAgICAgICAgICAgICAgICAgIlVu a25vd24gZ2ljX3ZlcnNpb24gXCIlc1wiIHNwZWNpZmllZFxuIiwgYnVmKTsKLSAgICAgICAgICAg IGV4aXQoLUVSUk9SX0ZBSUwpOwotICAgICAgICB9Ci0gICAgIH0KKyAgICBpZiAoZGVmYXVsdF9n YXRld2F5ZGV2KSB7CisgICAgICAgIGZyZWUobmljLT5nYXRld2F5ZGV2KTsKKyAgICAgICAgbmlj LT5nYXRld2F5ZGV2ID0gc3RyZHVwKGRlZmF1bHRfZ2F0ZXdheWRldik7CisgICAgfQogCi0gICAg eGx1X2NmZ19kZXN0cm95KGNvbmZpZyk7CisgICAgaWYgKGRlZmF1bHRfdmlmYmFja2VuZCkgewor ICAgICAgICBmcmVlKG5pYy0+YmFja2VuZF9kb21uYW1lKTsKKyAgICAgICAgbmljLT5iYWNrZW5k X2RvbW5hbWUgPSBzdHJkdXAoZGVmYXVsdF92aWZiYWNrZW5kKTsKKyAgICB9CiB9CiAKIHN0YXRp YyB2b2lkIHJlbG9hZF9kb21haW5fY29uZmlnKHVpbnQzMl90IGRvbWlkLApAQCAtMjQ0Miw3ICs0 NjMsNyBAQCBzdGF0aWMgZG9tYWluX3Jlc3RhcnRfdHlwZSBoYW5kbGVfZG9tYWluX2RlYXRoKHVp bnQzMl90ICpyX2RvbWlkLAogCiAgICAgTE9HKCJBY3Rpb24gZm9yIHNodXRkb3duIHJlYXNvbiBj b2RlICVkIGlzICVzIiwKICAgICAgICAgZXZlbnQtPnUuZG9tYWluX3NodXRkb3duLnNodXRkb3du X3JlYXNvbiwKLSAgICAgICAgYWN0aW9uX29uX3NodXRkb3duX25hbWVzW2FjdGlvbl0pOworICAg ICAgICBnZXRfYWN0aW9uX29uX3NodXRkb3duX25hbWUoYWN0aW9uKSk7CiAKICAgICBpZiAoYWN0 aW9uID09IExJQlhMX0FDVElPTl9PTl9TSFVURE9XTl9DT1JFRFVNUF9ERVNUUk9ZIHx8IGFjdGlv biA9PSBMSUJYTF9BQ1RJT05fT05fU0hVVERPV05fQ09SRURVTVBfUkVTVEFSVCkgewogICAgICAg ICBjaGFyICpjb3JlZmlsZTsKQEAgLTMxNDksNDAgKzExNzAsNiBAQCB2b2lkIGhlbHAoY29uc3Qg Y2hhciAqY29tbWFuZCkKICAgICB9CiB9CiAKLS8qIFJldHVybnMgLTEgb24gZmFpbHVyZTsgdGhl IGFtb3VudCBvZiBtZW1vcnkgb24gc3VjY2Vzcy4gKi8KLXN0YXRpYyBpbnQ2NF90IHBhcnNlX21l bV9zaXplX2tiKGNvbnN0IGNoYXIgKm1lbSkKLXsKLSAgICBjaGFyICplbmRwdHI7Ci0gICAgaW50 NjRfdCBrYnl0ZXM7Ci0KLSAgICBrYnl0ZXMgPSBzdHJ0b2xsKG1lbSwgJmVuZHB0ciwgMTApOwot Ci0gICAgaWYgKHN0cmxlbihlbmRwdHIpID4gMSkKLSAgICAgICAgcmV0dXJuIC0xOwotCi0gICAg c3dpdGNoICh0b2xvd2VyKCh1aW50OF90KSplbmRwdHIpKSB7Ci0gICAgY2FzZSAndCc6Ci0gICAg ICAgIGtieXRlcyA8PD0gMTA7Ci0gICAgICAgIC8qIGZhbGx0aHJvdWdoICovCi0gICAgY2FzZSAn Zyc6Ci0gICAgICAgIGtieXRlcyA8PD0gMTA7Ci0gICAgICAgIC8qIGZhbGx0aHJvdWdoICovCi0g ICAgY2FzZSAnXDAnOgotICAgIGNhc2UgJ20nOgotICAgICAgICBrYnl0ZXMgPDw9IDEwOwotICAg ICAgICAvKiBmYWxsdGhyb3VnaCAqLwotICAgIGNhc2UgJ2snOgotICAgICAgICBicmVhazsKLSAg ICBjYXNlICdiJzoKLSAgICAgICAga2J5dGVzID4+PSAxMDsKLSAgICAgICAgYnJlYWs7Ci0gICAg ZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLQotICAgIHJldHVybiBrYnl0ZXM7 Ci19Ci0KIHN0YXRpYyBpbnQgc2V0X21lbW9yeV9tYXgodWludDMyX3QgZG9taWQsIGNvbnN0IGNo YXIgKm1lbSkKIHsKICAgICBpbnQ2NF90IG1lbW9yeWtiOwpAQCAtNTUyMiw3ICszNTA5LDcgQEAg aW50IG1haW5fdmNwdXBpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAgICAgICovCiAgICAgaWYg KCFzdHJjbXAoaGFyZF9zdHIsICItIikpCiAgICAgICAgIGhhcmQgPSBOVUxMOwotICAgIGVsc2Ug aWYgKGNwdXJhbmdlX3BhcnNlKGhhcmRfc3RyLCBoYXJkKSkKKyAgICBlbHNlIGlmIChwYXJzZV9j cHVyYW5nZShoYXJkX3N0ciwgaGFyZCkpCiAgICAgICAgIGdvdG8gb3V0OwogICAgIC8qCiAgICAg ICogU29mdCBhZmZpbml0eSBpcyBoYW5kbGVkIHNpbWlsYXJseS4gT25seSBkaWZmZXJlbmNlOiB3 ZSBhbHNvIHdhbnQKQEAgLTU1MzAsNyArMzUxNyw3IEBAIGludCBtYWluX3ZjcHVwaW4oaW50IGFy Z2MsIGNoYXIgKiphcmd2KQogICAgICAqLwogICAgIGlmIChhcmdjIDw9IG9wdGluZCszIHx8ICFz dHJjbXAoc29mdF9zdHIsICItIikpCiAgICAgICAgIHNvZnQgPSBOVUxMOwotICAgIGVsc2UgaWYg KGNwdXJhbmdlX3BhcnNlKHNvZnRfc3RyLCBzb2Z0KSkKKyAgICBlbHNlIGlmIChwYXJzZV9jcHVy YW5nZShzb2Z0X3N0ciwgc29mdCkpCiAgICAgICAgIGdvdG8gb3V0OwogCiAgICAgaWYgKGRyeXJ1 bl9vbmx5KSB7CkBAIC03Nzk0LDcgKzU3ODEsNyBAQCBpbnQgbWFpbl9jcHVwb29sY3JlYXRlKGlu dCBhcmdjLCBjaGFyICoqYXJndikKICAgICAgICAgICAgIG5fY3B1cysrOwogICAgICAgICB9CiAg ICAgfSBlbHNlIGlmICgheGx1X2NmZ19nZXRfc3RyaW5nKGNvbmZpZywgImNwdXMiLCAmYnVmLCAw KSkgewotICAgICAgICBpZiAoY3B1cmFuZ2VfcGFyc2UoYnVmLCAmY3B1bWFwKSkKKyAgICAgICAg aWYgKHBhcnNlX2NwdXJhbmdlKGJ1ZiwgJmNwdW1hcCkpCiAgICAgICAgICAgICBnb3RvIG91dF9j Zmc7CiAKICAgICAgICAgbl9jcHVzID0gMDsKQEAgLTc5NzUsNyArNTk2Miw3IEBAIGludCBtYWlu X2NwdXBvb2xjcHVhZGQoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogICAgIH0KIAogICAgIHBvb2wg PSBhcmd2W29wdGluZCsrXTsKLSAgICBpZiAoY3B1cmFuZ2VfcGFyc2UoYXJndltvcHRpbmRdLCAm Y3B1bWFwKSkKKyAgICBpZiAocGFyc2VfY3B1cmFuZ2UoYXJndltvcHRpbmRdLCAmY3B1bWFwKSkK ICAgICAgICAgZ290byBvdXQ7CiAKICAgICBpZiAobGlieGxfY3B1cG9vbF9xdWFsaWZpZXJfdG9f Y3B1cG9vbGlkKGN0eCwgcG9vbCwgJnBvb2xpZCwgTlVMTCkgfHwKQEAgLTgwMTMsNyArNjAwMCw3 IEBAIGludCBtYWluX2NwdXBvb2xjcHVyZW1vdmUoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogICAg IH0KIAogICAgIHBvb2wgPSBhcmd2W29wdGluZCsrXTsKLSAgICBpZiAoY3B1cmFuZ2VfcGFyc2Uo YXJndltvcHRpbmRdLCAmY3B1bWFwKSkKKyAgICBpZiAocGFyc2VfY3B1cmFuZ2UoYXJndltvcHRp bmRdLCAmY3B1bWFwKSkKICAgICAgICAgZ290byBvdXQ7CiAKICAgICBpZiAobGlieGxfY3B1cG9v bF9xdWFsaWZpZXJfdG9fY3B1cG9vbGlkKGN0eCwgcG9vbCwgJnBvb2xpZCwgTlVMTCkgfHwKZGlm ZiAtLWdpdCBhL3Rvb2xzL3hsL3hsX3BhcnNlLmMgYi90b29scy94bC94bF9wYXJzZS5jCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjFlZjBjMjcyYTgKLS0tIC9kZXYvbnVs bAorKysgYi90b29scy94bC94bF9wYXJzZS5jCkBAIC0wLDAgKzEsMjA1MiBAQAorLyoKKyAqIENv cHlyaWdodCAyMDA5LTIwMTcgQ2l0cml4IEx0ZCBhbmQgb3RoZXIgY29udHJpYnV0b3JzCisgKgor ICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorICogYnkgdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyLjEgb25seS4gd2l0aCB0aGUgc3BlY2lhbAorICogZXhj ZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIGZpbGUgTElDRU5TRS4KKyAqCisgKiBUaGlz IHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1 bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRl IDxpbnR0eXBlcy5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+Cisj aW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8eGVuL2h2bS9lODIwLmg+CisKKyNpbmNsdWRl IDxsaWJ4bC5oPgorI2luY2x1ZGUgPGxpYnhsX3V0aWxzLmg+CisjaW5jbHVkZSA8bGlieGx1dGls Lmg+CisKKyNpbmNsdWRlICJ4bC5oIgorI2luY2x1ZGUgInhsX3V0aWxzLmgiCisjaW5jbHVkZSAi eGxfcGFyc2UuaCIKKworZXh0ZXJuIHZvaWQgc2V0X2RlZmF1bHRfbmljX3ZhbHVlcyhsaWJ4bF9k ZXZpY2VfbmljICpuaWMpOworCisjZGVmaW5lIEFSUkFZX0VYVEVORF9JTklUX19DT1JFKGFycmF5 LGNvdW50LGluaXRmbixtb3JlKSAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg ICAgICAgIHR5cGVvZigoY291bnQpKSBhcnJheV9leHRlbmRfb2xkX2NvdW50ID0gKGNvdW50KTsg ICAgICAgICAgICAgICBcCisgICAgICAgIChjb3VudCkrKzsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIChhcnJheSkgPSB4cmVh bGxvYygoYXJyYXkpLCBzaXplb2YoKmFycmF5KSAqIChjb3VudCkpOyAgICAgICAgICBcCisgICAg ICAgIChpbml0Zm4pKCYoYXJyYXkpW2FycmF5X2V4dGVuZF9vbGRfY291bnRdKTsgICAgICAgICAg ICAgICAgICAgICBcCisgICAgICAgIG1vcmU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICYoYXJyYXkpW2FycmF5X2V4 dGVuZF9vbGRfY291bnRdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSkK KworI2RlZmluZSBBUlJBWV9FWFRFTkRfSU5JVChhcnJheSxjb3VudCxpbml0Zm4pICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorICAgIEFSUkFZX0VYVEVORF9JTklUX19DT1JFKChhcnJheSks KGNvdW50KSwoaW5pdGZuKSwgKHsgICAgICAgICAgICAgICAgXAorICAgICAgICAoYXJyYXkpW2Fy cmF5X2V4dGVuZF9vbGRfY291bnRdLmRldmlkID0gYXJyYXlfZXh0ZW5kX29sZF9jb3VudDsgXAor ICAgICAgICB9KSkKKworI2RlZmluZSBBUlJBWV9FWFRFTkRfSU5JVF9OT0RFVklEKGFycmF5LGNv dW50LGluaXRmbikgXAorICAgIEFSUkFZX0VYVEVORF9JTklUX19DT1JFKChhcnJheSksKGNvdW50 KSwoaW5pdGZuKSwgLyogbm90aGluZyAqLyApCisKK3N0YXRpYyBjb25zdCBjaGFyICphY3Rpb25f b25fc2h1dGRvd25fbmFtZXNbXSA9IHsKKyAgICBbTElCWExfQUNUSU9OX09OX1NIVVRET1dOX0RF U1RST1ldID0gImRlc3Ryb3kiLAorCisgICAgW0xJQlhMX0FDVElPTl9PTl9TSFVURE9XTl9SRVNU QVJUXSA9ICJyZXN0YXJ0IiwKKyAgICBbTElCWExfQUNUSU9OX09OX1NIVVRET1dOX1JFU1RBUlRf UkVOQU1FXSA9ICJyZW5hbWUtcmVzdGFydCIsCisKKyAgICBbTElCWExfQUNUSU9OX09OX1NIVVRE T1dOX1BSRVNFUlZFXSA9ICJwcmVzZXJ2ZSIsCisKKyAgICBbTElCWExfQUNUSU9OX09OX1NIVVRE T1dOX0NPUkVEVU1QX0RFU1RST1ldID0gImNvcmVkdW1wLWRlc3Ryb3kiLAorICAgIFtMSUJYTF9B Q1RJT05fT05fU0hVVERPV05fQ09SRURVTVBfUkVTVEFSVF0gPSAiY29yZWR1bXAtcmVzdGFydCIs CisKKyAgICBbTElCWExfQUNUSU9OX09OX1NIVVRET1dOX1NPRlRfUkVTRVRdID0gInNvZnQtcmVz ZXQiLAorfTsKKworY29uc3QgY2hhciAqZ2V0X2FjdGlvbl9vbl9zaHV0ZG93bl9uYW1lKGxpYnhs X2FjdGlvbl9vbl9zaHV0ZG93biBhKQoreworICAgIHJldHVybiBhY3Rpb25fb25fc2h1dGRvd25f bmFtZXNbYV07Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfYWN0aW9uX29uX3NodXRkb3duKGNvbnN0 IGNoYXIgKmJ1ZiwgbGlieGxfYWN0aW9uX29uX3NodXRkb3duICphKQoreworICAgIGludCBpOwor ICAgIGNvbnN0IGNoYXIgKm47CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGFjdGlvbl9v bl9zaHV0ZG93bl9uYW1lcykgLyBzaXplb2YoYWN0aW9uX29uX3NodXRkb3duX25hbWVzWzBdKTsg aSsrKSB7CisgICAgICAgIG4gPSBhY3Rpb25fb25fc2h1dGRvd25fbmFtZXNbaV07CisKKyAgICAg ICAgaWYgKCFuKSBjb250aW51ZTsKKworICAgICAgICBpZiAoc3RyY21wKGJ1ZiwgbikgPT0gMCkg eworICAgICAgICAgICAgKmEgPSBpOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0K KyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgRFNUQVRFX0lOSVRJQUwgICAwCisj ZGVmaW5lIERTVEFURV9UQVAgICAgICAgMQorI2RlZmluZSBEU1RBVEVfUEhZU1BBVEggIDIKKyNk ZWZpbmUgRFNUQVRFX1ZJUlRQQVRIICAzCisjZGVmaW5lIERTVEFURV9WSVJUVFlQRSAgNAorI2Rl ZmluZSBEU1RBVEVfUlcgICAgICAgIDUKKyNkZWZpbmUgRFNUQVRFX1RFUk1JTkFMICA2CisKK3Zv aWQgcGFyc2VfZGlza19jb25maWdfbXVsdGlzdHJpbmcoWExVX0NvbmZpZyAqKmNvbmZpZywKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5zcGVjcywgY29uc3QgY2hhciAq Y29uc3QgKnNwZWNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9k ZXZpY2VfZGlzayAqZGlzaykKK3sKKyAgICBpbnQgZTsKKworICAgIGxpYnhsX2RldmljZV9kaXNr X2luaXQoZGlzayk7CisKKyAgICBpZiAoISpjb25maWcpIHsKKyAgICAgICAgKmNvbmZpZyA9IHhs dV9jZmdfaW5pdChzdGRlcnIsICJjb21tYW5kIGxpbmUiKTsKKyAgICAgICAgaWYgKCEqY29uZmln KSB7IHBlcnJvcigieGx1X2NmZ19pbml0Iik7IGV4aXQoLTEpOyB9CisgICAgfQorCisgICAgZSA9 IHhsdV9kaXNrX3BhcnNlKCpjb25maWcsIG5zcGVjcywgc3BlY3MsIGRpc2spOworICAgIGlmIChl ID09IEVJTlZBTCkgZXhpdChFWElUX0ZBSUxVUkUpOworICAgIGlmIChlKSB7CisgICAgICAgIGZw cmludGYoc3RkZXJyLCJ4bHVfZGlza19wYXJzZSBmYWlsZWQ6ICVzXG4iLHN0cmVycm9yKGVycm5v KSk7CisgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICB9Cit9CisKK3ZvaWQgcGFyc2Vf ZGlza19jb25maWcoWExVX0NvbmZpZyAqKmNvbmZpZywgY29uc3QgY2hhciAqc3BlYywKKyAgICAg ICAgICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX2Rpc2sgKmRpc2spCit7CisgICAgcGFyc2Vf ZGlza19jb25maWdfbXVsdGlzdHJpbmcoY29uZmlnLCAxLCAmc3BlYywgZGlzayk7Cit9CisKK3N0 YXRpYyB2b2lkIHBhcnNlX3ZpZl9yYXRlKFhMVV9Db25maWcgKipjb25maWcsIGNvbnN0IGNoYXIg KnJhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfbmljICpuaWMp Cit7CisgICAgaW50IGU7CisKKyAgICBlID0geGx1X3ZpZl9wYXJzZV9yYXRlKCpjb25maWcsIHJh dGUsIG5pYyk7CisgICAgaWYgKGUgPT0gRUlOVkFMIHx8IGUgPT0gRU9WRVJGTE9XKSBleGl0KEVY SVRfRkFJTFVSRSk7CisgICAgaWYgKGUpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsInhsdV92 aWZfcGFyc2VfcmF0ZSBmYWlsZWQ6ICVzXG4iLHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIGV4 aXQoRVhJVF9GQUlMVVJFKTsKKyAgICB9Cit9CisKK2ludCBwYXJzZV9yYW5nZShjb25zdCBjaGFy ICpzdHIsIHVuc2lnbmVkIGxvbmcgKmEsIHVuc2lnbmVkIGxvbmcgKmIpCit7CisgICAgY29uc3Qg Y2hhciAqbnN0cjsKKyAgICBjaGFyICplbmRwdHI7CisKKyAgICAqYSA9ICpiID0gc3RydG91bChz dHIsICZlbmRwdHIsIDEwKTsKKyAgICBpZiAoZW5kcHRyID09IHN0ciB8fCAqYSA9PSBVTE9OR19N QVgpCisgICAgICAgIHJldHVybiAxOworCisgICAgaWYgKCplbmRwdHIgPT0gJy0nKSB7CisgICAg ICAgIG5zdHIgPSBlbmRwdHIgKyAxOworCisgICAgICAgICpiID0gc3RydG91bChuc3RyLCAmZW5k cHRyLCAxMCk7CisgICAgICAgIGlmIChlbmRwdHIgPT0gbnN0ciB8fCAqYiA9PSBVTE9OR19NQVgg fHwgKmIgPCAqYSkKKyAgICAgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIC8qIFZhbGlk IHZhbHVlIG9yIHJhbmdlIHNvIGZhciwgYnV0IHdlIGFsc28gZG9uJ3Qgd2FudCBqdW5rIGFmdGVy IHRoYXQgKi8KKyAgICBpZiAoKmVuZHB0ciAhPSAnXDAnKQorICAgICAgICByZXR1cm4gMTsKKwor ICAgIHJldHVybiAwOworfQorCisvKgorICogQWRkIG9yIHJlbW92ZXMgYSBzcGVjaWZpYyBzZXQg b2YgY3B1cyAoc3BlY2lmaWVkIGluIHN0ciwgZWl0aGVyIGFzCisgKiBzaW5nbGUgY3B1cyBvciBh cyBlbnRpcmUgTlVNQSBub2RlcykgdG8vZnJvbSBjcHVtYXAuCisgKi8KK3N0YXRpYyBpbnQgdXBk YXRlX2NwdW1hcF9yYW5nZShjb25zdCBjaGFyICpzdHIsIGxpYnhsX2JpdG1hcCAqY3B1bWFwKQor eworICAgIHVuc2lnbmVkIGxvbmcgaWRhLCBpZGI7CisgICAgbGlieGxfYml0bWFwIG5vZGVfY3B1 bWFwOworICAgIGJvb2wgaXNfbm90ID0gZmFsc2UsIGlzX25vZGVzID0gZmFsc2U7CisgICAgaW50 IHJjID0gMDsKKworICAgIGxpYnhsX2JpdG1hcF9pbml0KCZub2RlX2NwdW1hcCk7CisKKyAgICBy YyA9IGxpYnhsX25vZGVfYml0bWFwX2FsbG9jKGN0eCwgJm5vZGVfY3B1bWFwLCAwKTsKKyAgICBp ZiAocmMpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJsaWJ4bF9ub2RlX2JpdG1hcF9hbGxv YyBmYWlsZWQuXG4iKTsKKyAgICAgICAgZ290byBvdXQ7CisgICAgfQorCisgICAgLyogQXJlIHdl IGFkZGluZyBvciByZW1vdmluZyBjcHVzL25vZGVzPyAqLworICAgIGlmIChTVFJfU0tJUF9QUkVG SVgoc3RyLCAiXiIpKSB7CisgICAgICAgIGlzX25vdCA9IHRydWU7CisgICAgfQorCisgICAgLyog QXJlIHdlIGRlYWxpbmcgd2l0aCBjcHVzIG9yIGZ1bGwgbm9kZXM/ICovCisgICAgaWYgKFNUUl9T S0lQX1BSRUZJWChzdHIsICJub2RlOiIpIHx8IFNUUl9TS0lQX1BSRUZJWChzdHIsICJub2Rlczoi KSkgeworICAgICAgICBpc19ub2RlcyA9IHRydWU7CisgICAgfQorCisgICAgaWYgKHN0cmNtcChz dHIsICJhbGwiKSA9PSAwKSB7CisgICAgICAgIC8qIFdlIGRvIG5vdCBhY2NlcHQgIl5hbGwiIG9y ICJebm9kZXM6YWxsIiAqLworICAgICAgICBpZiAoaXNfbm90KSB7CisgICAgICAgICAgICBmcHJp bnRmKHN0ZGVyciwgIkNhbid0IGNvbWJpbmUgXCJeXCIgYW5kIFwiYWxsXCIuXG4iKTsKKyAgICAg ICAgICAgIHJjID0gRVJST1JfSU5WQUw7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbGli eGxfYml0bWFwX3NldF9hbnkoY3B1bWFwKTsKKyAgICAgICAgZ290byBvdXQ7CisgICAgfQorCisg ICAgcmMgPSBwYXJzZV9yYW5nZShzdHIsICZpZGEsICZpZGIpOworICAgIGlmIChyYykgeworICAg ICAgICBmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgcGNwdSByYW5nZTogJXMuXG4iLCBzdHIpOwor ICAgICAgICBnb3RvIG91dDsKKyAgICB9CisKKyAgICAvKiBBZGQgb3IgcmVtb3ZlIHRoZSBzcGVj aWZpZWQgY3B1cyBpbiB0aGUgcmFuZ2UgKi8KKyAgICB3aGlsZSAoaWRhIDw9IGlkYikgeworICAg ICAgICBpZiAoaXNfbm9kZXMpIHsKKyAgICAgICAgICAgIC8qIEFkZC9SZW1vdmUgYWxsIHRoZSBj cHVzIG9mIGEgTlVNQSBub2RlICovCisgICAgICAgICAgICBpbnQgaTsKKworICAgICAgICAgICAg cmMgPSBsaWJ4bF9ub2RlX3RvX2NwdW1hcChjdHgsIGlkYSwgJm5vZGVfY3B1bWFwKTsKKyAgICAg ICAgICAgIGlmIChyYykgeworICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAibGlieGxf bm9kZV90b19jcHVtYXAgZmFpbGVkLlxuIik7CisgICAgICAgICAgICAgICAgZ290byBvdXQ7Cisg ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIEFkZC9SZW1vdmUgYWxsIHRoZSBjcHVzIGlu IHRoZSBub2RlIGNwdW1hcCAqLworICAgICAgICAgICAgbGlieGxfZm9yX2VhY2hfc2V0X2JpdChp LCBub2RlX2NwdW1hcCkgeworICAgICAgICAgICAgICAgIGlzX25vdCA/IGxpYnhsX2JpdG1hcF9y ZXNldChjcHVtYXAsIGkpIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9iaXRtYXBf c2V0KGNwdW1hcCwgaSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg ICAgICAvKiBBZGQvUmVtb3ZlIHRoaXMgY3B1ICovCisgICAgICAgICAgICBpc19ub3QgPyBsaWJ4 bF9iaXRtYXBfcmVzZXQoY3B1bWFwLCBpZGEpIDoKKyAgICAgICAgICAgICAgICAgICAgIGxpYnhs X2JpdG1hcF9zZXQoY3B1bWFwLCBpZGEpOworICAgICAgICB9CisgICAgICAgIGlkYSsrOworICAg IH0KKworIG91dDoKKyAgICBsaWJ4bF9iaXRtYXBfZGlzcG9zZSgmbm9kZV9jcHVtYXApOworICAg IHJldHVybiByYzsKK30KKworLyoKKyAqIFRha2VzIGEgc3RyaW5nIHJlcHJlc2VudGluZyBhIHNl dCBvZiBjcHVzIChzcGVjaWZpZWQgZWl0aGVyIGFzCisgKiBzaW5nbGUgY3B1cyBvciBhcyBlaW50 aXJlIE5VTUEgbm9kZXMpIGFuZCB0dXJucyBpdCBpbnRvIHRoZQorICogY29ycmVzcG9uZGluZyBs aWJ4bF9iaXRtYXAgKGluIGNwdW1hcCkuCisgKi8KK2ludCBwYXJzZV9jcHVyYW5nZShjb25zdCBj aGFyICpjcHUsIGxpYnhsX2JpdG1hcCAqY3B1bWFwKQoreworICAgIGNoYXIgKnB0ciwgKnNhdmVw dHIgPSBOVUxMLCAqYnVmID0geHN0cmR1cChjcHUpOworICAgIGludCByYyA9IDA7CisKKyAgICBm b3IgKHB0ciA9IHN0cnRva19yKGJ1ZiwgIiwiLCAmc2F2ZXB0cik7IHB0cjsKKyAgICAgICAgIHB0 ciA9IHN0cnRva19yKE5VTEwsICIsIiwgJnNhdmVwdHIpKSB7CisgICAgICAgIHJjID0gdXBkYXRl X2NwdW1hcF9yYW5nZShwdHIsIGNwdW1hcCk7CisgICAgICAgIGlmIChyYykKKyAgICAgICAgICAg IGJyZWFrOworICAgIH0KKyAgICBmcmVlKGJ1Zik7CisKKyAgICByZXR1cm4gcmM7Cit9CisKK3N0 YXRpYyB2b2lkIHBhcnNlX3RvcF9sZXZlbF92bmNfb3B0aW9ucyhYTFVfQ29uZmlnICpjb25maWcs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfdm5jX2luZm8g KnZuYykKK3sKKyAgICBsb25nIGw7CisKKyAgICB4bHVfY2ZnX2dldF9kZWZib29sKGNvbmZpZywg InZuYyIsICZ2bmMtPmVuYWJsZSwgMCk7CisgICAgeGx1X2NmZ19yZXBsYWNlX3N0cmluZyAoY29u ZmlnLCAidm5jbGlzdGVuIiwgJnZuYy0+bGlzdGVuLCAwKTsKKyAgICB4bHVfY2ZnX3JlcGxhY2Vf c3RyaW5nIChjb25maWcsICJ2bmNwYXNzd2QiLCAmdm5jLT5wYXNzd2QsIDApOworICAgIGlmICgh eGx1X2NmZ19nZXRfbG9uZyAoY29uZmlnLCAidm5jZGlzcGxheSIsICZsLCAwKSkKKyAgICAgICAg dm5jLT5kaXNwbGF5ID0gbDsKKyAgICB4bHVfY2ZnX2dldF9kZWZib29sKGNvbmZpZywgInZuY3Vu dXNlZCIsICZ2bmMtPmZpbmR1bnVzZWQsIDApOworfQorCitzdGF0aWMgdm9pZCBwYXJzZV90b3Bf bGV2ZWxfc2RsX29wdGlvbnMoWExVX0NvbmZpZyAqY29uZmlnLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX3NkbF9pbmZvICpzZGwpCit7CisgICAgeGx1X2Nm Z19nZXRfZGVmYm9vbChjb25maWcsICJzZGwiLCAmc2RsLT5lbmFibGUsIDApOworICAgIHhsdV9j ZmdfZ2V0X2RlZmJvb2woY29uZmlnLCAib3BlbmdsIiwgJnNkbC0+b3BlbmdsLCAwKTsKKyAgICB4 bHVfY2ZnX3JlcGxhY2Vfc3RyaW5nIChjb25maWcsICJkaXNwbGF5IiwgJnNkbC0+ZGlzcGxheSwg MCk7CisgICAgeGx1X2NmZ19yZXBsYWNlX3N0cmluZyAoY29uZmlnLCAieGF1dGhvcml0eSIsICZz ZGwtPnhhdXRob3JpdHksIDApOworfQorCitzdGF0aWMgY2hhciAqcGFyc2VfY21kbGluZShYTFVf Q29uZmlnICpjb25maWcpCit7CisgICAgY2hhciAqY21kbGluZSA9IE5VTEw7CisgICAgY29uc3Qg Y2hhciAqcm9vdCA9IE5VTEwsICpleHRyYSA9IE5VTEwsICpidWYgPSBOVUxMOworCisgICAgeGx1 X2NmZ19nZXRfc3RyaW5nIChjb25maWcsICJjbWRsaW5lIiwgJmJ1ZiwgMCk7CisgICAgeGx1X2Nm Z19nZXRfc3RyaW5nIChjb25maWcsICJyb290IiwgJnJvb3QsIDApOworICAgIHhsdV9jZmdfZ2V0 X3N0cmluZyAoY29uZmlnLCAiZXh0cmEiLCAmZXh0cmEsIDApOworCisgICAgaWYgKGJ1Zikgewor ICAgICAgICBjbWRsaW5lID0gc3RyZHVwKGJ1Zik7CisgICAgICAgIGlmIChyb290IHx8IGV4dHJh KQorICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJXYXJuaW5nOiBpZ25vcmluZyByb290PSBh bmQgZXh0cmE9ICIKKyAgICAgICAgICAgICAgICAgICAgImluIGZhdm91ciBvZiBjbWRsaW5lPVxu Iik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKHJvb3QgJiYgZXh0cmEpIHsKKyAgICAgICAg ICAgIHhhc3ByaW50ZigmY21kbGluZSwgInJvb3Q9JXMgJXMiLCByb290LCBleHRyYSk7CisgICAg ICAgIH0gZWxzZSBpZiAocm9vdCkgeworICAgICAgICAgICAgeGFzcHJpbnRmKCZjbWRsaW5lLCAi cm9vdD0lcyIsIHJvb3QpOworICAgICAgICB9IGVsc2UgaWYgKGV4dHJhKSB7CisgICAgICAgICAg ICBjbWRsaW5lID0gc3RyZHVwKGV4dHJhKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICgo YnVmIHx8IHJvb3QgfHwgZXh0cmEpICYmICFjbWRsaW5lKSB7CisgICAgICAgIGZwcmludGYoc3Rk ZXJyLCAiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgY21kbGluZVxuIik7CisgICAgICAg IGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICB9CisKKyAgICByZXR1cm4gY21kbGluZTsKK30KKwor c3RhdGljIHZvaWQgcGFyc2VfdmNwdV9hZmZpbml0eShsaWJ4bF9kb21haW5fYnVpbGRfaW5mbyAq Yl9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYTFVfQ29uZmlnTGlzdCAq Y3B1cywgY29uc3QgY2hhciAqYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp bnQgbnVtX2NwdXMsIGJvb2wgaXNfaGFyZCkKK3sKKyAgICBsaWJ4bF9iaXRtYXAgKnZjcHVfYWZm aW5pdHlfYXJyYXk7CisKKyAgICAvKgorICAgICAqIElmIHdlIGFyZSBoZXJlLCBhbmQgYnVmIGlz ICFOVUxMLCB3ZSdyZSBkZWFsaW5nIHdpdGggYSBzdHJpbmcuIFdoYXQKKyAgICAgKiB3ZSBkbyBp biB0aGlzIGNhc2UgaXMgcGFyc2UgaXQsIGFuZCBjb3B5IHRoZSByZXN1bHQgaW4gX2FsbF8gKHVw IHRvCisgICAgICogYl9pbmZvLT5tYXhfdmNwdXMpIHRoZSBlbGVtZW50cyBvZiB0aGUgdmNwdSBh ZmZpbml0eSBhcnJheS4KKyAgICAgKgorICAgICAqIElmIGJ1ZiBpcyBOVUxMLCB3ZSBoYXZlIGEg bGlzdCwgYW5kIHdoYXQgd2UgZG8gaXMgcHV0dGluZyBpbiB0aGUKKyAgICAgKiBpLWV0aCBlbGVt ZW50IG9mIHRoZSB2Y3B1IGFmZmluaXR5IGFycmF5IHRoZSByZXN1bHQgb2YgdGhlIHBhcnNpbmcK KyAgICAgKiBvZiB0aGUgaS1ldGggZW50cnkgb2YgdGhlIGxpc3QuIElmIHRoZXJlIGFyZSBtb3Jl IHZjcHVzIHRoYW4KKyAgICAgKiBlbnRyaWVzLCBpdCBpcyBmaW5lIHRvIGp1c3Qgbm90IHRvdWNo IHRoZSBsYXN0IGFycmF5IGVsZW1lbnRzLgorICAgICAqLworCisgICAgLyogU2lsZW50bHkgaWdu b3JlIHZhbHVlcyBjb3JyZXNwb25kaW5nIHRvIG5vbiBleGlzdGluZyB2Y3B1cyAqLworICAgIGlm IChidWYgfHwgbnVtX2NwdXMgPiBiX2luZm8tPm1heF92Y3B1cykKKyAgICAgICAgbnVtX2NwdXMg PSBiX2luZm8tPm1heF92Y3B1czsKKworICAgIGlmIChpc19oYXJkKSB7CisgICAgICAgIGJfaW5m by0+bnVtX3ZjcHVfaGFyZF9hZmZpbml0eSA9IG51bV9jcHVzOworICAgICAgICBiX2luZm8tPnZj cHVfaGFyZF9hZmZpbml0eSA9IHhtYWxsb2MobnVtX2NwdXMgKiBzaXplb2YobGlieGxfYml0bWFw KSk7CisgICAgICAgIHZjcHVfYWZmaW5pdHlfYXJyYXkgPSBiX2luZm8tPnZjcHVfaGFyZF9hZmZp bml0eTsKKyAgICB9IGVsc2UgeworICAgICAgICBiX2luZm8tPm51bV92Y3B1X3NvZnRfYWZmaW5p dHkgPSBudW1fY3B1czsKKyAgICAgICAgYl9pbmZvLT52Y3B1X3NvZnRfYWZmaW5pdHkgPSB4bWFs bG9jKG51bV9jcHVzICogc2l6ZW9mKGxpYnhsX2JpdG1hcCkpOworICAgICAgICB2Y3B1X2FmZmlu aXR5X2FycmF5ID0gYl9pbmZvLT52Y3B1X3NvZnRfYWZmaW5pdHk7CisgICAgfQorCisgICAgaWYg KCFidWYpIHsKKyAgICAgICAgaW50IGogPSAwOworCisgICAgICAgIHdoaWxlICgoYnVmID0geGx1 X2NmZ19nZXRfbGlzdGl0ZW0oY3B1cywgaikpICE9IE5VTEwgJiYgaiA8IG51bV9jcHVzKSB7Cisg ICAgICAgICAgICBsaWJ4bF9iaXRtYXBfaW5pdCgmdmNwdV9hZmZpbml0eV9hcnJheVtqXSk7Cisg ICAgICAgICAgICBpZiAobGlieGxfY3B1X2JpdG1hcF9hbGxvYyhjdHgsICZ2Y3B1X2FmZmluaXR5 X2FycmF5W2pdLCAwKSkgeworICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiVW5hYmxl IHRvIGFsbG9jYXRlIGNwdW1hcCBmb3IgdmNwdSAlZFxuIiwgaik7CisgICAgICAgICAgICAgICAg ZXhpdChFWElUX0ZBSUxVUkUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAocGFy c2VfY3B1cmFuZ2UoYnVmLCAmdmNwdV9hZmZpbml0eV9hcnJheVtqXSkpCisgICAgICAgICAgICAg ICAgZXhpdChFWElUX0ZBSUxVUkUpOworCisgICAgICAgICAgICBqKys7CisgICAgICAgIH0KKwor ICAgICAgICAvKiBXZSBoYXZlIGEgbGlzdCBvZiBjcHVtYXBzLCBkaXNhYmxlIGF1dG9tYXRpYyBw bGFjZW1lbnQgKi8KKyAgICAgICAgbGlieGxfZGVmYm9vbF9zZXQoJmJfaW5mby0+bnVtYV9wbGFj ZW1lbnQsIGZhbHNlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpbnQgaTsKKworICAgICAgICBs aWJ4bF9iaXRtYXBfaW5pdCgmdmNwdV9hZmZpbml0eV9hcnJheVswXSk7CisgICAgICAgIGlmIChs aWJ4bF9jcHVfYml0bWFwX2FsbG9jKGN0eCwgJnZjcHVfYWZmaW5pdHlfYXJyYXlbMF0sIDApKSB7 CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlVuYWJsZSB0byBhbGxvY2F0ZSBjcHVtYXAg Zm9yIHZjcHUgMFxuIik7CisgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICAg IH0KKworICAgICAgICBpZiAocGFyc2VfY3B1cmFuZ2UoYnVmLCAmdmNwdV9hZmZpbml0eV9hcnJh eVswXSkpCisgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisKKyAgICAgICAgZm9yIChp ID0gMTsgaSA8IGJfaW5mby0+bWF4X3ZjcHVzOyBpKyspIHsKKyAgICAgICAgICAgIGxpYnhsX2Jp dG1hcF9pbml0KCZ2Y3B1X2FmZmluaXR5X2FycmF5W2ldKTsKKyAgICAgICAgICAgIGlmIChsaWJ4 bF9jcHVfYml0bWFwX2FsbG9jKGN0eCwgJnZjcHVfYWZmaW5pdHlfYXJyYXlbaV0sIDApKSB7Cisg ICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJVbmFibGUgdG8gYWxsb2NhdGUgY3B1bWFw IGZvciB2Y3B1ICVkXG4iLCBpKTsKKyAgICAgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7 CisgICAgICAgICAgICB9CisgICAgICAgICAgICBsaWJ4bF9iaXRtYXBfY29weShjdHgsICZ2Y3B1 X2FmZmluaXR5X2FycmF5W2ldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnZjcHVf YWZmaW5pdHlfYXJyYXlbMF0pOworICAgICAgICB9CisKKyAgICAgICAgbGlieGxfZGVmYm9vbF9z ZXQoJmJfaW5mby0+bnVtYV9wbGFjZW1lbnQsIGZhbHNlKTsKKyAgICB9Cit9CisKK3N0YXRpYyB1 bnNpZ25lZCBsb25nIHBhcnNlX3Vsb25nKGNvbnN0IGNoYXIgKnN0cikKK3sKKyAgICBjaGFyICpl bmRwdHI7CisgICAgdW5zaWduZWQgbG9uZyB2YWw7CisKKyAgICB2YWwgPSBzdHJ0b3VsKHN0ciwg JmVuZHB0ciwgMTApOworICAgIGlmIChlbmRwdHIgPT0gc3RyIHx8IHZhbCA9PSBVTE9OR19NQVgp IHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJ4bDogZmFpbGVkIHRvIGNvbnZlcnQgXCIlc1wi IHRvIG51bWJlclxuIiwgc3RyKTsKKyAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgIH0K KyAgICByZXR1cm4gdmFsOworfQorCit2b2lkIHJlcGxhY2Vfc3RyaW5nKGNoYXIgKipzdHIsIGNv bnN0IGNoYXIgKnZhbCkKK3sKKyAgICBmcmVlKCpzdHIpOworICAgICpzdHIgPSB4c3RyZHVwKHZh bCk7Cit9CisKK2ludCBtYXRjaF9vcHRpb25fc2l6ZShjb25zdCBjaGFyICpwcmVmaXgsIHNpemVf dCBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYXJnLCBjaGFyICoqYXJnb3B0KQor eworICAgIGludCByYyA9IHN0cm5jbXAocHJlZml4LCBhcmcsIGxlbik7CisgICAgaWYgKCFyYykg KmFyZ29wdCA9IGFyZytsZW47CisgICAgcmV0dXJuICFyYzsKK30KKworLyogUGFyc2VzIG5ldHdv cmsgZGF0YSBhbmQgYWRkcyBpbmZvIGludG8gbmljCisgKiBSZXR1cm5zIDEgaWYgdGhlIGlucHV0 IHRva2VuIGRvZXMgbm90IG1hdGNoIG9uZSBvZiB0aGUga2V5cworICogb3IgcGFyc2VkIHZhbHVl cyBhcmUgbm90IGNvcnJlY3QuIFN1Y2Nlc3NmdWwgcGFyc2UgcmV0dXJucyAwICovCitpbnQgcGFy c2VfbmljX2NvbmZpZyhsaWJ4bF9kZXZpY2VfbmljICpuaWMsIFhMVV9Db25maWcgKipjb25maWcs IGNoYXIgKnRva2VuKQoreworICAgIGNoYXIgKmVuZHB0ciwgKm9wYXJnOworICAgIGludCBpOwor ICAgIHVuc2lnbmVkIGludCB2YWw7CisKKyAgICBpZiAoTUFUQ0hfT1BUSU9OKCJ0eXBlIiwgdG9r ZW4sIG9wYXJnKSkgeworICAgICAgICBpZiAoIXN0cmNtcCgidmlmIiwgb3BhcmcpKSB7CisgICAg ICAgICAgICBuaWMtPm5pY3R5cGUgPSBMSUJYTF9OSUNfVFlQRV9WSUY7CisgICAgICAgIH0gZWxz ZSBpZiAoIXN0cmNtcCgiaW9lbXUiLCBvcGFyZykpIHsKKyAgICAgICAgICAgIG5pYy0+bmljdHlw ZSA9IExJQlhMX05JQ19UWVBFX1ZJRl9JT0VNVTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg ICAgIGZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBwYXJhbWV0ZXIgYHR5cGUnLlxuIik7CisgICAg ICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoTUFUQ0hfT1BUSU9O KCJtYWMiLCB0b2tlbiwgb3BhcmcpKSB7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCA2OyBpKysp IHsKKyAgICAgICAgICAgIHZhbCA9IHN0cnRvdWwob3BhcmcsICZlbmRwdHIsIDE2KTsKKyAgICAg ICAgICAgIGlmICgob3BhcmcgPT0gZW5kcHRyKSB8fCAodmFsID4gMjU1KSkgeworICAgICAgICAg ICAgICAgIGZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBwYXJhbWV0ZXIgYG1hYycuXG4iKTsKKyAg ICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG5pYy0+ bWFjW2ldID0gdmFsOworICAgICAgICAgICAgb3BhcmcgPSBlbmRwdHIgKyAxOworICAgICAgICB9 CisgICAgfSBlbHNlIGlmIChNQVRDSF9PUFRJT04oImJyaWRnZSIsIHRva2VuLCBvcGFyZykpIHsK KyAgICAgICAgcmVwbGFjZV9zdHJpbmcoJm5pYy0+YnJpZGdlLCBvcGFyZyk7CisgICAgfSBlbHNl IGlmIChNQVRDSF9PUFRJT04oIm5ldGRldiIsIHRva2VuLCBvcGFyZykpIHsKKyAgICAgICAgZnBy aW50ZihzdGRlcnIsICJ0aGUgbmV0ZGV2IHBhcmFtZXRlciBpcyBkZXByZWNhdGVkLCAiCisgICAg ICAgICAgICAgICAgICAgICAgICAicGxlYXNlIHVzZSBnYXRld2F5ZGV2IGluc3RlYWRcbiIpOwor ICAgICAgICByZXBsYWNlX3N0cmluZygmbmljLT5nYXRld2F5ZGV2LCBvcGFyZyk7CisgICAgfSBl bHNlIGlmIChNQVRDSF9PUFRJT04oImdhdGV3YXlkZXYiLCB0b2tlbiwgb3BhcmcpKSB7CisgICAg ICAgIHJlcGxhY2Vfc3RyaW5nKCZuaWMtPmdhdGV3YXlkZXYsIG9wYXJnKTsKKyAgICB9IGVsc2Ug aWYgKE1BVENIX09QVElPTigiaXAiLCB0b2tlbiwgb3BhcmcpKSB7CisgICAgICAgIHJlcGxhY2Vf c3RyaW5nKCZuaWMtPmlwLCBvcGFyZyk7CisgICAgfSBlbHNlIGlmIChNQVRDSF9PUFRJT04oInNj cmlwdCIsIHRva2VuLCBvcGFyZykpIHsKKyAgICAgICAgcmVwbGFjZV9zdHJpbmcoJm5pYy0+c2Ny aXB0LCBvcGFyZyk7CisgICAgfSBlbHNlIGlmIChNQVRDSF9PUFRJT04oImJhY2tlbmQiLCB0b2tl biwgb3BhcmcpKSB7CisgICAgICAgIHJlcGxhY2Vfc3RyaW5nKCZuaWMtPmJhY2tlbmRfZG9tbmFt ZSwgb3BhcmcpOworICAgIH0gZWxzZSBpZiAoTUFUQ0hfT1BUSU9OKCJ2aWZuYW1lIiwgdG9rZW4s IG9wYXJnKSkgeworICAgICAgICByZXBsYWNlX3N0cmluZygmbmljLT5pZm5hbWUsIG9wYXJnKTsK KyAgICB9IGVsc2UgaWYgKE1BVENIX09QVElPTigibW9kZWwiLCB0b2tlbiwgb3BhcmcpKSB7Cisg ICAgICAgIHJlcGxhY2Vfc3RyaW5nKCZuaWMtPm1vZGVsLCBvcGFyZyk7CisgICAgfSBlbHNlIGlm IChNQVRDSF9PUFRJT04oInJhdGUiLCB0b2tlbiwgb3BhcmcpKSB7CisgICAgICAgIHBhcnNlX3Zp Zl9yYXRlKGNvbmZpZywgb3BhcmcsIG5pYyk7CisgICAgfSBlbHNlIGlmIChNQVRDSF9PUFRJT04o ImZvcndhcmRkZXYiLCB0b2tlbiwgb3BhcmcpKSB7CisgICAgICAgIHJlcGxhY2Vfc3RyaW5nKCZu aWMtPmNvbG9mdF9mb3J3YXJkZGV2LCBvcGFyZyk7CisgICAgfSBlbHNlIGlmIChNQVRDSF9PUFRJ T04oImFjY2VsIiwgdG9rZW4sIG9wYXJnKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInRo ZSBhY2NlbCBwYXJhbWV0ZXIgZm9yIHZpZnMgaXMgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWRcbiIp OworICAgIH0gZWxzZSBpZiAoTUFUQ0hfT1BUSU9OKCJkZXZpZCIsIHRva2VuLCBvcGFyZykpIHsK KyAgICAgICAgbmljLT5kZXZpZCA9IHBhcnNlX3Vsb25nKG9wYXJnKTsKKyAgICB9IGVsc2Ugewor ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInVucmVjb2duaXplZCBhcmd1bWVudCBgJXMnXG4iLCB0 b2tlbik7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworc3Rh dGljIHZvaWQgcGFyc2Vfdm51bWFfY29uZmlnKGNvbnN0IFhMVV9Db25maWcgKmNvbmZpZywKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kb21haW5fYnVpbGRfaW5mbyAqYl9p bmZvKQoreworICAgIGxpYnhsX3BoeXNpbmZvIHBoeXNpbmZvOworICAgIHVpbnQzMl90IG5yX25v ZGVzOworICAgIFhMVV9Db25maWdMaXN0ICp2bnVtYTsKKyAgICBpbnQgaSwgaiwgbGVuLCBudW1f dm51bWE7CisgICAgdW5zaWduZWQgbG9uZyBtYXhfdmNwdXMgPSAwLCBtYXhfbWVta2IgPSAwOwor ICAgIC8qIFRlbXBvcmFyeSBzdG9yYWdlIGZvciBwYXJzZWQgdmNwdXMgaW5mb3JtYXRpb24gdG8g YXZvaWQKKyAgICAgKiBwYXJzaW5nIGNvbmZpZyB0d2ljZS4gVGhpcyBhcnJheSBoYXMgbnVtX3Zu dW1hIGVsZW1lbnRzLgorICAgICAqLworICAgIGxpYnhsX2JpdG1hcCAqdmNwdV9wYXJzZWQ7CisK KyAgICBsaWJ4bF9waHlzaW5mb19pbml0KCZwaHlzaW5mbyk7CisgICAgaWYgKGxpYnhsX2dldF9w aHlzaW5mbyhjdHgsICZwaHlzaW5mbykgIT0gMCkgeworICAgICAgICBsaWJ4bF9waHlzaW5mb19k aXNwb3NlKCZwaHlzaW5mbyk7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAibGlieGxfZ2V0X3Bo eXNpbmZvIGZhaWxlZFxuIik7CisgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICB9CisK KyAgICBucl9ub2RlcyA9IHBoeXNpbmZvLm5yX25vZGVzOworICAgIGxpYnhsX3BoeXNpbmZvX2Rp c3Bvc2UoJnBoeXNpbmZvKTsKKworICAgIGlmICh4bHVfY2ZnX2dldF9saXN0KGNvbmZpZywgInZu dW1hIiwgJnZudW1hLCAmbnVtX3ZudW1hLCAxKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYg KCFudW1fdm51bWEpCisgICAgICAgIHJldHVybjsKKworICAgIGJfaW5mby0+bnVtX3ZudW1hX25v ZGVzID0gbnVtX3ZudW1hOworICAgIGJfaW5mby0+dm51bWFfbm9kZXMgPSB4Y2FsbG9jKG51bV92 bnVtYSwgc2l6ZW9mKGxpYnhsX3Zub2RlX2luZm8pKTsKKyAgICB2Y3B1X3BhcnNlZCA9IHhjYWxs b2MobnVtX3ZudW1hLCBzaXplb2YobGlieGxfYml0bWFwKSk7CisgICAgZm9yIChpID0gMDsgaSA8 IG51bV92bnVtYTsgaSsrKSB7CisgICAgICAgIGxpYnhsX2JpdG1hcF9pbml0KCZ2Y3B1X3BhcnNl ZFtpXSk7CisgICAgICAgIGlmIChsaWJ4bF9jcHVfYml0bWFwX2FsbG9jKGN0eCwgJnZjcHVfcGFy c2VkW2ldLCBiX2luZm8tPm1heF92Y3B1cykpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJy LCAibGlieGxfbm9kZV9iaXRtYXBfYWxsb2MgZmFpbGVkLlxuIik7CisgICAgICAgICAgICBleGl0 KEVYSVRfRkFJTFVSRSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKGkgPSAwOyBpIDwg Yl9pbmZvLT5udW1fdm51bWFfbm9kZXM7IGkrKykgeworICAgICAgICBsaWJ4bF92bm9kZV9pbmZv ICpwID0gJmJfaW5mby0+dm51bWFfbm9kZXNbaV07CisKKyAgICAgICAgbGlieGxfdm5vZGVfaW5m b19pbml0KHApOworICAgICAgICBwLT5kaXN0YW5jZXMgPSB4Y2FsbG9jKGJfaW5mby0+bnVtX3Zu dW1hX25vZGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZigqcC0+ZGlz dGFuY2VzKSk7CisgICAgICAgIHAtPm51bV9kaXN0YW5jZXMgPSBiX2luZm8tPm51bV92bnVtYV9u b2RlczsKKyAgICB9CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX3ZudW1hOyBpKyspIHsKKyAg ICAgICAgWExVX0NvbmZpZ1ZhbHVlICp2bm9kZV9zcGVjLCAqY29uZl9vcHRpb247CisgICAgICAg IFhMVV9Db25maWdMaXN0ICp2bm9kZV9jb25maWdfbGlzdDsKKyAgICAgICAgaW50IGNvbmZfY291 bnQ7CisgICAgICAgIGxpYnhsX3Zub2RlX2luZm8gKnAgPSAmYl9pbmZvLT52bnVtYV9ub2Rlc1tp XTsKKworICAgICAgICB2bm9kZV9zcGVjID0geGx1X2NmZ19nZXRfbGlzdGl0ZW0yKHZudW1hLCBp KTsKKyAgICAgICAgYXNzZXJ0KHZub2RlX3NwZWMpOworCisgICAgICAgIHhsdV9jZmdfdmFsdWVf Z2V0X2xpc3QoY29uZmlnLCB2bm9kZV9zcGVjLCAmdm5vZGVfY29uZmlnX2xpc3QsIDApOworICAg ICAgICBpZiAoIXZub2RlX2NvbmZpZ19saXN0KSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVy ciwgInhsOiBjYW5ub3QgZ2V0IHZub2RlIGNvbmZpZyBvcHRpb24gbGlzdFxuIik7CisgICAgICAg ICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKGNvbmZf Y291bnQgPSAwOworICAgICAgICAgICAgIChjb25mX29wdGlvbiA9CisgICAgICAgICAgICAgIHhs dV9jZmdfZ2V0X2xpc3RpdGVtMih2bm9kZV9jb25maWdfbGlzdCwgY29uZl9jb3VudCkpOworICAg ICAgICAgICAgIGNvbmZfY291bnQrKykgeworCisgICAgICAgICAgICBpZiAoeGx1X2NmZ192YWx1 ZV90eXBlKGNvbmZfb3B0aW9uKSA9PSBYTFVfU1RSSU5HKSB7CisgICAgICAgICAgICAgICAgY2hh ciAqYnVmLCAqb3B0aW9uX3VudHJpbW1lZCwgKnZhbHVlX3VudHJpbW1lZDsKKyAgICAgICAgICAg ICAgICBjaGFyICpvcHRpb24sICp2YWx1ZTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25n IHZhbDsKKworICAgICAgICAgICAgICAgIHhsdV9jZmdfdmFsdWVfZ2V0X3N0cmluZyhjb25maWcs IGNvbmZfb3B0aW9uLCAmYnVmLCAwKTsKKworICAgICAgICAgICAgICAgIGlmICghYnVmKSBjb250 aW51ZTsKKworICAgICAgICAgICAgICAgIGlmIChzcGxpdF9zdHJpbmdfaW50b19wYWlyKGJ1Ziwg Ij0iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvcHRpb25f dW50cmltbWVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ2 YWx1ZV91bnRyaW1tZWQpKSB7CisgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAi eGw6IGZhaWxlZCB0byBzcGxpdCBcIiVzXCIgaW50byBwYWlyXG4iLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGJ1Zik7CisgICAgICAgICAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJF KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdHJpbShpc3NwYWNlLCBvcHRp b25fdW50cmltbWVkLCAmb3B0aW9uKTsKKyAgICAgICAgICAgICAgICB0cmltKGlzc3BhY2UsIHZh bHVlX3VudHJpbW1lZCwgJnZhbHVlKTsKKworICAgICAgICAgICAgICAgIGlmICghc3RyY21wKCJw bm9kZSIsIG9wdGlvbikpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFsID0gcGFyc2VfdWxvbmco dmFsdWUpOworICAgICAgICAgICAgICAgICAgICBpZiAodmFsID49IG5yX25vZGVzKSB7CisgICAg ICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgInhsOiBpbnZhbGlkIHBub2RlIG51bWJlcjogJWx1XG4iLCB2YWwpOworICAg ICAgICAgICAgICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgICAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgICAgIHAtPnBub2RlID0gdmFsOworICAgICAgICAgICAg ICAgICAgICBsaWJ4bF9kZWZib29sX3NldCgmYl9pbmZvLT5udW1hX3BsYWNlbWVudCwgZmFsc2Up OworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcCgic2l6ZSIsIG9wdGlvbikpIHsK KyAgICAgICAgICAgICAgICAgICAgdmFsID0gcGFyc2VfdWxvbmcodmFsdWUpOworICAgICAgICAg ICAgICAgICAgICBwLT5tZW1rYiA9IHZhbCA8PCAxMDsKKyAgICAgICAgICAgICAgICAgICAgbWF4 X21lbWtiICs9IHAtPm1lbWtiOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcCgi dmNwdXMiLCBvcHRpb24pKSB7CisgICAgICAgICAgICAgICAgICAgIGxpYnhsX3N0cmluZ19saXN0 IGNwdV9zcGVjX2xpc3Q7CisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgcywgZTsK KworICAgICAgICAgICAgICAgICAgICBzcGxpdF9zdHJpbmdfaW50b19zdHJpbmdfbGlzdCh2YWx1 ZSwgIiwiLCAmY3B1X3NwZWNfbGlzdCk7CisgICAgICAgICAgICAgICAgICAgIGxlbiA9IGxpYnhs X3N0cmluZ19saXN0X2xlbmd0aCgmY3B1X3NwZWNfbGlzdCk7CisKKyAgICAgICAgICAgICAgICAg ICAgZm9yIChqID0gMDsgaiA8IGxlbjsgaisrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBw YXJzZV9yYW5nZShjcHVfc3BlY19saXN0W2pdLCAmcywgJmUpOworICAgICAgICAgICAgICAgICAg ICAgICAgZm9yICg7IHMgPD0gZTsgcysrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBOb3RlIHRoYXQgaWYgd2UgdHJ5IHRv IHNldCBhIGJpdCBiZXlvbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB0aGUgc2l6 ZSBvZiBiaXRtYXAsIGxpYnhsX2JpdG1hcF9zZXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKiBoYXMgbm8gZWZmZWN0LiBUaGUgcmVzdWx0ZWQgYml0bWFwCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICogZG9lc24ndCByZWZsZWN0IHdoYXQgdXNlciB3YW50cy4gVGhlCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICogZmFsbG91dCBpcyBkZWFsdCB3aXRoIGxhdGVyIGFm dGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogcGFyc2luZy4KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9i aXRtYXBfc2V0KCZ2Y3B1X3BhcnNlZFtpXSwgcyk7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbWF4X3ZjcHVzKys7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg ICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBsaWJ4bF9zdHJpbmdfbGlzdF9kaXNwb3Nl KCZjcHVfc3BlY19saXN0KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoInZk aXN0YW5jZXMiLCBvcHRpb24pKSB7CisgICAgICAgICAgICAgICAgICAgIGxpYnhsX3N0cmluZ19s aXN0IHZkaXN0OworCisgICAgICAgICAgICAgICAgICAgIHNwbGl0X3N0cmluZ19pbnRvX3N0cmlu Z19saXN0KHZhbHVlLCAiLCIsICZ2ZGlzdCk7CisgICAgICAgICAgICAgICAgICAgIGxlbiA9IGxp YnhsX3N0cmluZ19saXN0X2xlbmd0aCgmdmRpc3QpOworCisgICAgICAgICAgICAgICAgICAgIGZv ciAoaiA9IDA7IGogPCBsZW47IGorKykgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0g cGFyc2VfdWxvbmcodmRpc3Rbal0pOworICAgICAgICAgICAgICAgICAgICAgICAgcC0+ZGlzdGFu Y2VzW2pdID0gdmFsOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg IGxpYnhsX3N0cmluZ19saXN0X2Rpc3Bvc2UoJnZkaXN0KTsKKyAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgICAgZnJlZShvcHRpb24pOworICAgICAgICAgICAgICAgIGZyZWUodmFsdWUp OworICAgICAgICAgICAgICAgIGZyZWUob3B0aW9uX3VudHJpbW1lZCk7CisgICAgICAgICAgICAg ICAgZnJlZSh2YWx1ZV91bnRyaW1tZWQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg fQorCisgICAgLyogVXNlciBoYXMgc3BlY2lmaWVkIG1heHZjcHVzPSAqLworICAgIGlmIChiX2lu Zm8tPm1heF92Y3B1cyAhPSAwKSB7CisgICAgICAgIGlmIChiX2luZm8tPm1heF92Y3B1cyAhPSBt YXhfdmNwdXMpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAieGw6IHZudW1hIHZjcHVz IGFuZCBtYXh2Y3B1cz0gbWlzbWF0Y2hcbiIpOworICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxV UkUpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW50IGhvc3RfY3B1cyA9IGxp YnhsX2dldF9vbmxpbmVfY3B1cyhjdHgpOworCisgICAgICAgIGlmIChob3N0X2NwdXMgPCAwKSB7 CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBnZXQgb25saW5lIGNwdXNc biIpOworICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgICAgICB9CisKKyAgICAg ICAgaWYgKGhvc3RfY3B1cyA8IG1heF92Y3B1cykgeworICAgICAgICAgICAgZnByaW50ZihzdGRl cnIsICJ4bDogdm51bWEgc3BlY2lmaWVzIG1vcmUgdmNwdXMgdGhhbiBwY3B1cywgIlwKKyAgICAg ICAgICAgICAgICAgICAgInVzZSBtYXh2Y3B1cz0gdG8gb3ZlcnJpZGUgdGhpcyBjaGVjay5cbiIp OworICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgICAgICB9CisKKyAgICAgICAg Yl9pbmZvLT5tYXhfdmNwdXMgPSBtYXhfdmNwdXM7CisgICAgfQorCisgICAgLyogVXNlciBoYXMg c3BlY2lmaWVkIG1heG1lbT0gKi8KKyAgICBpZiAoYl9pbmZvLT5tYXhfbWVta2IgIT0gTElCWExf TUVNS0JfREVGQVVMVCAmJgorICAgICAgICBiX2luZm8tPm1heF9tZW1rYiAhPSBtYXhfbWVta2Ip IHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJ4bDogbWF4bWVtIGFuZCB2bnVtYSBtZW1vcnkg c2l6ZSBtaXNtYXRjaFxuIik7CisgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICB9IGVs c2UKKyAgICAgICAgYl9pbmZvLT5tYXhfbWVta2IgPSBtYXhfbWVta2I7CisKKyAgICBmb3IgKGkg PSAwOyBpIDwgYl9pbmZvLT5udW1fdm51bWFfbm9kZXM7IGkrKykgeworICAgICAgICBsaWJ4bF92 bm9kZV9pbmZvICpwID0gJmJfaW5mby0+dm51bWFfbm9kZXNbaV07CisKKyAgICAgICAgbGlieGxf Yml0bWFwX2NvcHlfYWxsb2MoY3R4LCAmcC0+dmNwdXMsICZ2Y3B1X3BhcnNlZFtpXSk7CisgICAg ICAgIGxpYnhsX2JpdG1hcF9kaXNwb3NlKCZ2Y3B1X3BhcnNlZFtpXSk7CisgICAgfQorCisgICAg ZnJlZSh2Y3B1X3BhcnNlZCk7Cit9CisKKy8qIFBhcnNlcyB1c2JjdHJsIGRhdGEgYW5kIGFkZHMg aW5mbyBpbnRvIHVzYmN0cmwKKyAqIFJldHVybnMgMSBpZiB0aGUgaW5wdXQgdG9rZW4gZG9lcyBu b3QgbWF0Y2ggb25lIG9mIHRoZSBrZXlzCisgKiBvciBwYXJzZWQgdmFsdWVzIGFyZSBub3QgY29y cmVjdC4gU3VjY2Vzc2Z1bCBwYXJzZSByZXR1cm5zIDAgKi8KK2ludCBwYXJzZV91c2JjdHJsX2Nv bmZpZyhsaWJ4bF9kZXZpY2VfdXNiY3RybCAqdXNiY3RybCwgY2hhciAqdG9rZW4pCit7CisgICAg Y2hhciAqb3Bhcmc7CisKKyAgICBpZiAoTUFUQ0hfT1BUSU9OKCJ0eXBlIiwgdG9rZW4sIG9wYXJn KSkgeworICAgICAgICBpZiAobGlieGxfdXNiY3RybF90eXBlX2Zyb21fc3RyaW5nKG9wYXJnLCAm dXNiY3RybC0+dHlwZSkpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiSW52YWxpZCB1 c2IgY29udHJvbGxlciB0eXBlICclcydcbiIsIG9wYXJnKTsKKyAgICAgICAgICAgIHJldHVybiAx OworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChNQVRDSF9PUFRJT04oInZlcnNpb24iLCB0b2tl biwgb3BhcmcpKSB7CisgICAgICAgIHVzYmN0cmwtPnZlcnNpb24gPSBhdG9pKG9wYXJnKTsKKyAg ICB9IGVsc2UgaWYgKE1BVENIX09QVElPTigicG9ydHMiLCB0b2tlbiwgb3BhcmcpKSB7CisgICAg ICAgIHVzYmN0cmwtPnBvcnRzID0gYXRvaShvcGFyZyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg ZnByaW50ZihzdGRlcnIsICJVbmtub3duIHN0cmluZyBgJXMnIGluIHVzYmN0cmwgc3BlY1xuIiwg dG9rZW4pOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKwor LyogUGFyc2VzIHVzYmRldiBkYXRhIGFuZCBhZGRzIGluZm8gaW50byB1c2JkZXYKKyAqIFJldHVy bnMgMSBpZiB0aGUgaW5wdXQgdG9rZW4gZG9lcyBub3QgbWF0Y2ggb25lIG9mIHRoZSBrZXlzCisg KiBvciBwYXJzZWQgdmFsdWVzIGFyZSBub3QgY29ycmVjdC4gU3VjY2Vzc2Z1bCBwYXJzZSByZXR1 cm5zIDAgKi8KK2ludCBwYXJzZV91c2JkZXZfY29uZmlnKGxpYnhsX2RldmljZV91c2JkZXYgKnVz YmRldiwgY2hhciAqdG9rZW4pCit7CisgICAgY2hhciAqb3Bhcmc7CisKKyAgICBpZiAoTUFUQ0hf T1BUSU9OKCJ0eXBlIiwgdG9rZW4sIG9wYXJnKSkgeworICAgICAgICBpZiAobGlieGxfdXNiZGV2 X3R5cGVfZnJvbV9zdHJpbmcob3BhcmcsICZ1c2JkZXYtPnR5cGUpKSB7CisgICAgICAgICAgICBm cHJpbnRmKHN0ZGVyciwgIkludmFsaWQgdXNiIGRldmljZSB0eXBlOiAlc1xuIiwgb3B0YXJnKTsK KyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChNQVRDSF9P UFRJT04oImhvc3RidXMiLCB0b2tlbiwgb3BhcmcpKSB7CisgICAgICAgIHVzYmRldi0+dS5ob3N0 ZGV2Lmhvc3RidXMgPSBzdHJ0b3VsKG9wYXJnLCBOVUxMLCAwKTsKKyAgICB9IGVsc2UgaWYgKE1B VENIX09QVElPTigiaG9zdGFkZHIiLCB0b2tlbiwgb3BhcmcpKSB7CisgICAgICAgIHVzYmRldi0+ dS5ob3N0ZGV2Lmhvc3RhZGRyID0gc3RydG91bChvcGFyZywgTlVMTCwgMCk7CisgICAgfSBlbHNl IGlmIChNQVRDSF9PUFRJT04oImNvbnRyb2xsZXIiLCB0b2tlbiwgb3BhcmcpKSB7CisgICAgICAg IHVzYmRldi0+Y3RybCA9IGF0b2kob3BhcmcpOworICAgIH0gZWxzZSBpZiAoTUFUQ0hfT1BUSU9O KCJwb3J0IiwgdG9rZW4sIG9wYXJnKSkgeworICAgICAgICB1c2JkZXYtPnBvcnQgPSBhdG9pKG9w YXJnKTsKKyAgICB9IGVsc2UgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlVua25vd24gc3Ry aW5nIGAlcycgaW4gdXNiZGV2IHNwZWNcbiIsIHRva2VuKTsKKyAgICAgICAgcmV0dXJuIDE7Cisg ICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgcGFyc2VfY29uZmlnX2RhdGEoY29uc3Qg Y2hhciAqY29uZmlnX3NvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAq Y29uZmlnX2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgIGludCBjb25maWdfbGVuLAorICAg ICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kb21haW5fY29uZmlnICpkX2NvbmZpZykKK3sKKyAg ICBjb25zdCBjaGFyICpidWY7CisgICAgbG9uZyBsLCB2Y3B1cyA9IDA7CisgICAgWExVX0NvbmZp ZyAqY29uZmlnOworICAgIFhMVV9Db25maWdMaXN0ICpjcHVzLCAqdmJkcywgKm5pY3MsICpwY2lz LCAqY3ZmYnMsICpjcHVpZHMsICp2dHBtcywKKyAgICAgICAgICAgICAgICAgICAqdXNiY3RybHMs ICp1c2JkZXZzOworICAgIFhMVV9Db25maWdMaXN0ICpjaGFubmVscywgKmlvcG9ydHMsICppcnFz LCAqaW9tZW0sICp2aXJpZGlhbiwgKmR0ZGV2czsKKyAgICBpbnQgbnVtX2lvcG9ydHMsIG51bV9p cnFzLCBudW1faW9tZW0sIG51bV9jcHVzLCBudW1fdmlyaWRpYW47CisgICAgaW50IHBjaV9wb3dl cl9tZ210ID0gMDsKKyAgICBpbnQgcGNpX21zaXRyYW5zbGF0ZSA9IDA7CisgICAgaW50IHBjaV9w ZXJtaXNzaXZlID0gMDsKKyAgICBpbnQgcGNpX3NlaXplID0gMDsKKyAgICBpbnQgaSwgZTsKKyAg ICBjaGFyICprZXJuZWxfYmFzZW5hbWU7CisKKyAgICBsaWJ4bF9kb21haW5fY3JlYXRlX2luZm8g KmNfaW5mbyA9ICZkX2NvbmZpZy0+Y19pbmZvOworICAgIGxpYnhsX2RvbWFpbl9idWlsZF9pbmZv ICpiX2luZm8gPSAmZF9jb25maWctPmJfaW5mbzsKKworICAgIGNvbmZpZz0geGx1X2NmZ19pbml0 KHN0ZGVyciwgY29uZmlnX3NvdXJjZSk7CisgICAgaWYgKCFjb25maWcpIHsKKyAgICAgICAgZnBy aW50ZihzdGRlcnIsICJGYWlsZWQgdG8gYWxsb2NhdGUgZm9yIGNvbmZpZ3VyYXRpb25cbiIpOwor ICAgICAgICBleGl0KDEpOworICAgIH0KKworICAgIGU9IHhsdV9jZmdfcmVhZGRhdGEoY29uZmln LCBjb25maWdfZGF0YSwgY29uZmlnX2xlbik7CisgICAgaWYgKGUpIHsKKyAgICAgICAgZnByaW50 ZihzdGRlcnIsICJGYWlsZWQgdG8gcGFyc2UgY29uZmlnOiAlc1xuIiwgc3RyZXJyb3IoZSkpOwor ICAgICAgICBleGl0KDEpOworICAgIH0KKworICAgIGlmICgheGx1X2NmZ19nZXRfc3RyaW5nIChj b25maWcsICJpbml0X3NlY2xhYmVsIiwgJmJ1ZiwgMCkpCisgICAgICAgIHhsdV9jZmdfcmVwbGFj ZV9zdHJpbmcoY29uZmlnLCAiaW5pdF9zZWNsYWJlbCIsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJmNfaW5mby0+c3NpZF9sYWJlbCwgMCk7CisKKyAgICBpZiAoIXhsdV9jZmdfZ2V0 X3N0cmluZyAoY29uZmlnLCAic2VjbGFiZWwiLCAmYnVmLCAwKSkgeworICAgICAgICBpZiAoY19p bmZvLT5zc2lkX2xhYmVsKQorICAgICAgICAgICAgeGx1X2NmZ19yZXBsYWNlX3N0cmluZyhjb25m aWcsICJzZWNsYWJlbCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZiX2lu Zm8tPmV4ZWNfc3NpZF9sYWJlbCwgMCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHhsdV9j ZmdfcmVwbGFjZV9zdHJpbmcoY29uZmlnLCAic2VjbGFiZWwiLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAmY19pbmZvLT5zc2lkX2xhYmVsLCAwKTsKKyAgICB9CisKKyAgICBs aWJ4bF9kZWZib29sX3NldCgmY19pbmZvLT5ydW5faG90cGx1Z19zY3JpcHRzLCBydW5faG90cGx1 Z19zY3JpcHRzKTsKKyAgICBjX2luZm8tPnR5cGUgPSBMSUJYTF9ET01BSU5fVFlQRV9QVjsKKyAg ICBpZiAoIXhsdV9jZmdfZ2V0X3N0cmluZyAoY29uZmlnLCAiYnVpbGRlciIsICZidWYsIDApICYm CisgICAgICAgICFzdHJuY21wKGJ1ZiwgImh2bSIsIHN0cmxlbihidWYpKSkKKyAgICAgICAgY19p bmZvLT50eXBlID0gTElCWExfRE9NQUlOX1RZUEVfSFZNOworCisgICAgeGx1X2NmZ19nZXRfZGVm Ym9vbChjb25maWcsICJwdmgiLCAmY19pbmZvLT5wdmgsIDApOworICAgIHhsdV9jZmdfZ2V0X2Rl ZmJvb2woY29uZmlnLCAiaGFwIiwgJmNfaW5mby0+aGFwLCAwKTsKKworICAgIGlmICh4bHVfY2Zn X3JlcGxhY2Vfc3RyaW5nIChjb25maWcsICJuYW1lIiwgJmNfaW5mby0+bmFtZSwgMCkpIHsKKyAg ICAgICAgZnByaW50ZihzdGRlcnIsICJEb21haW4gbmFtZSBtdXN0IGJlIHNwZWNpZmllZC5cbiIp OworICAgICAgICBleGl0KDEpOworICAgIH0KKworICAgIGlmICgheGx1X2NmZ19nZXRfc3RyaW5n IChjb25maWcsICJ1dWlkIiwgJmJ1ZiwgMCkgKSB7CisgICAgICAgIGlmICggbGlieGxfdXVpZF9m cm9tX3N0cmluZygmY19pbmZvLT51dWlkLCBidWYpICkgeworICAgICAgICAgICAgZnByaW50Zihz dGRlcnIsICJGYWlsZWQgdG8gcGFyc2UgVVVJRDogJXNcbiIsIGJ1Zik7CisgICAgICAgICAgICBl eGl0KDEpOworICAgICAgICB9CisgICAgfWVsc2V7CisgICAgICAgIGxpYnhsX3V1aWRfZ2VuZXJh dGUoJmNfaW5mby0+dXVpZCk7CisgICAgfQorCisgICAgeGx1X2NmZ19nZXRfZGVmYm9vbChjb25m aWcsICJvb3MiLCAmY19pbmZvLT5vb3MsIDApOworCisgICAgaWYgKCF4bHVfY2ZnX2dldF9zdHJp bmcgKGNvbmZpZywgInBvb2wiLCAmYnVmLCAwKSkKKyAgICAgICAgeGx1X2NmZ19yZXBsYWNlX3N0 cmluZyhjb25maWcsICJwb29sIiwgJmNfaW5mby0+cG9vbF9uYW1lLCAwKTsKKworICAgIGxpYnhs X2RvbWFpbl9idWlsZF9pbmZvX2luaXRfdHlwZShiX2luZm8sIGNfaW5mby0+dHlwZSk7CisgICAg aWYgKGJsa2Rldl9zdGFydCkKKyAgICAgICAgYl9pbmZvLT5ibGtkZXZfc3RhcnQgPSBzdHJkdXAo YmxrZGV2X3N0YXJ0KTsKKworICAgIC8qIHRoZSBmb2xsb3dpbmcgaXMgdGhlIGFjdHVhbCBjb25m aWcgcGFyc2luZyB3aXRoIG92ZXJyaWRpbmcKKyAgICAgKiB2YWx1ZXMgaW4gdGhlIHN0cnVjdHVy ZXMgKi8KKyAgICBpZiAoIXhsdV9jZmdfZ2V0X2xvbmcgKGNvbmZpZywgImNwdV93ZWlnaHQiLCAm bCwgMCkpCisgICAgICAgIGJfaW5mby0+c2NoZWRfcGFyYW1zLndlaWdodCA9IGw7CisgICAgaWYg KCF4bHVfY2ZnX2dldF9sb25nIChjb25maWcsICJjYXAiLCAmbCwgMCkpCisgICAgICAgIGJfaW5m by0+c2NoZWRfcGFyYW1zLmNhcCA9IGw7CisgICAgaWYgKCF4bHVfY2ZnX2dldF9sb25nIChjb25m aWcsICJwZXJpb2QiLCAmbCwgMCkpCisgICAgICAgIGJfaW5mby0+c2NoZWRfcGFyYW1zLnBlcmlv ZCA9IGw7CisgICAgaWYgKCF4bHVfY2ZnX2dldF9sb25nIChjb25maWcsICJzbGljZSIsICZsLCAw KSkKKyAgICAgICAgYl9pbmZvLT5zY2hlZF9wYXJhbXMuc2xpY2UgPSBsOworICAgIGlmICgheGx1 X2NmZ19nZXRfbG9uZyAoY29uZmlnLCAibGF0ZW5jeSIsICZsLCAwKSkKKyAgICAgICAgYl9pbmZv LT5zY2hlZF9wYXJhbXMubGF0ZW5jeSA9IGw7CisgICAgaWYgKCF4bHVfY2ZnX2dldF9sb25nIChj b25maWcsICJleHRyYXRpbWUiLCAmbCwgMCkpCisgICAgICAgIGJfaW5mby0+c2NoZWRfcGFyYW1z LmV4dHJhdGltZSA9IGw7CisKKyAgICBpZiAoIXhsdV9jZmdfZ2V0X2xvbmcgKGNvbmZpZywgIm1l bW9yeSIsICZsLCAwKSkKKyAgICAgICAgYl9pbmZvLT50YXJnZXRfbWVta2IgPSBsICogMTAyNDsK KworICAgIGlmICgheGx1X2NmZ19nZXRfbG9uZyAoY29uZmlnLCAibWF4bWVtIiwgJmwsIDApKQor ICAgICAgICBiX2luZm8tPm1heF9tZW1rYiA9IGwgKiAxMDI0OworCisgICAgaWYgKCF4bHVfY2Zn X2dldF9sb25nIChjb25maWcsICJ2Y3B1cyIsICZsLCAwKSkgeworICAgICAgICB2Y3B1cyA9IGw7 CisgICAgICAgIGlmIChsaWJ4bF9jcHVfYml0bWFwX2FsbG9jKGN0eCwgJmJfaW5mby0+YXZhaWxf dmNwdXMsIGwpKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlVuYWJsZSB0byBhbGxv Y2F0ZSBjcHVtYXBcbiIpOworICAgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgfQorICAgICAg ICBsaWJ4bF9iaXRtYXBfc2V0X25vbmUoJmJfaW5mby0+YXZhaWxfdmNwdXMpOworICAgICAgICB3 aGlsZSAobC0tID4gMCkKKyAgICAgICAgICAgIGxpYnhsX2JpdG1hcF9zZXQoKCZiX2luZm8tPmF2 YWlsX3ZjcHVzKSwgbCk7CisgICAgfQorCisgICAgaWYgKCF4bHVfY2ZnX2dldF9sb25nIChjb25m aWcsICJtYXh2Y3B1cyIsICZsLCAwKSkKKyAgICAgICAgYl9pbmZvLT5tYXhfdmNwdXMgPSBsOwor CisgICAgcGFyc2Vfdm51bWFfY29uZmlnKGNvbmZpZywgYl9pbmZvKTsKKworICAgIC8qIFNldCBt YXhfbWVta2IgdG8gdGFyZ2V0X21lbWtiIGFuZCBtYXhfdmNwdXMgdG8gYXZhaWxfdmNwdXMgaWYK KyAgICAgKiB0aGV5IGFyZSBub3Qgc2V0IGJ5IHVzZXIgc3BlY2lmaWVkIGNvbmZpZyBvcHRpb24g b3Igdm51bWEuCisgICAgICovCisgICAgaWYgKGJfaW5mby0+bWF4X21lbWtiID09IExJQlhMX01F TUtCX0RFRkFVTFQpCisgICAgICAgIGJfaW5mby0+bWF4X21lbWtiID0gYl9pbmZvLT50YXJnZXRf bWVta2I7CisgICAgaWYgKGJfaW5mby0+bWF4X3ZjcHVzID09IDApCisgICAgICAgIGJfaW5mby0+ bWF4X3ZjcHVzID0gdmNwdXM7CisKKyAgICBpZiAoYl9pbmZvLT5tYXhfdmNwdXMgPCB2Y3B1cykg eworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInhsOiBtYXh2Y3B1cyA8IHZjcHVzXG4iKTsKKyAg ICAgICAgZXhpdCgxKTsKKyAgICB9CisKKyAgICBidWYgPSBOVUxMOworICAgIGlmICgheGx1X2Nm Z19nZXRfbGlzdCAoY29uZmlnLCAiY3B1cyIsICZjcHVzLCAmbnVtX2NwdXMsIDEpIHx8CisgICAg ICAgICF4bHVfY2ZnX2dldF9zdHJpbmcgKGNvbmZpZywgImNwdXMiLCAmYnVmLCAwKSkKKyAgICAg ICAgcGFyc2VfdmNwdV9hZmZpbml0eShiX2luZm8sIGNwdXMsIGJ1ZiwgbnVtX2NwdXMsIC8qIGlz X2hhcmQgKi8gdHJ1ZSk7CisKKyAgICBidWYgPSBOVUxMOworICAgIGlmICgheGx1X2NmZ19nZXRf bGlzdCAoY29uZmlnLCAiY3B1c19zb2Z0IiwgJmNwdXMsICZudW1fY3B1cywgMSkgfHwKKyAgICAg ICAgIXhsdV9jZmdfZ2V0X3N0cmluZyAoY29uZmlnLCAiY3B1c19zb2Z0IiwgJmJ1ZiwgMCkpCisg ICAgICAgIHBhcnNlX3ZjcHVfYWZmaW5pdHkoYl9pbmZvLCBjcHVzLCBidWYsIG51bV9jcHVzLCBm YWxzZSk7CisKKyAgICBsaWJ4bF9kZWZib29sX3NldCgmYl9pbmZvLT5jbGFpbV9tb2RlLCBjbGFp bV9tb2RlKTsKKworICAgIGlmICh4bHVfY2ZnX2dldF9zdHJpbmcgKGNvbmZpZywgIm9uX3Bvd2Vy b2ZmIiwgJmJ1ZiwgMCkpCisgICAgICAgIGJ1ZiA9ICJkZXN0cm95IjsKKyAgICBpZiAoIXBhcnNl X2FjdGlvbl9vbl9zaHV0ZG93bihidWYsICZkX2NvbmZpZy0+b25fcG93ZXJvZmYpKSB7CisgICAg ICAgIGZwcmludGYoc3RkZXJyLCAiVW5rbm93biBvbl9wb3dlcm9mZiBhY3Rpb24gXCIlc1wiIHNw ZWNpZmllZFxuIiwgYnVmKTsKKyAgICAgICAgZXhpdCgxKTsKKyAgICB9CisKKyAgICBpZiAoeGx1 X2NmZ19nZXRfc3RyaW5nIChjb25maWcsICJvbl9yZWJvb3QiLCAmYnVmLCAwKSkKKyAgICAgICAg YnVmID0gInJlc3RhcnQiOworICAgIGlmICghcGFyc2VfYWN0aW9uX29uX3NodXRkb3duKGJ1Ziwg JmRfY29uZmlnLT5vbl9yZWJvb3QpKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiVW5rbm93 biBvbl9yZWJvb3QgYWN0aW9uIFwiJXNcIiBzcGVjaWZpZWRcbiIsIGJ1Zik7CisgICAgICAgIGV4 aXQoMSk7CisgICAgfQorCisgICAgaWYgKHhsdV9jZmdfZ2V0X3N0cmluZyAoY29uZmlnLCAib25f d2F0Y2hkb2ciLCAmYnVmLCAwKSkKKyAgICAgICAgYnVmID0gImRlc3Ryb3kiOworICAgIGlmICgh cGFyc2VfYWN0aW9uX29uX3NodXRkb3duKGJ1ZiwgJmRfY29uZmlnLT5vbl93YXRjaGRvZykpIHsK KyAgICAgICAgZnByaW50ZihzdGRlcnIsICJVbmtub3duIG9uX3dhdGNoZG9nIGFjdGlvbiBcIiVz XCIgc3BlY2lmaWVkXG4iLCBidWYpOworICAgICAgICBleGl0KDEpOworICAgIH0KKworCisgICAg aWYgKHhsdV9jZmdfZ2V0X3N0cmluZyAoY29uZmlnLCAib25fY3Jhc2giLCAmYnVmLCAwKSkKKyAg ICAgICAgYnVmID0gImRlc3Ryb3kiOworICAgIGlmICghcGFyc2VfYWN0aW9uX29uX3NodXRkb3du KGJ1ZiwgJmRfY29uZmlnLT5vbl9jcmFzaCkpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJV bmtub3duIG9uX2NyYXNoIGFjdGlvbiBcIiVzXCIgc3BlY2lmaWVkXG4iLCBidWYpOworICAgICAg ICBleGl0KDEpOworICAgIH0KKworICAgIGlmICh4bHVfY2ZnX2dldF9zdHJpbmcgKGNvbmZpZywg Im9uX3NvZnRfcmVzZXQiLCAmYnVmLCAwKSkKKyAgICAgICAgYnVmID0gInNvZnQtcmVzZXQiOwor ICAgIGlmICghcGFyc2VfYWN0aW9uX29uX3NodXRkb3duKGJ1ZiwgJmRfY29uZmlnLT5vbl9zb2Z0 X3Jlc2V0KSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlVua25vd24gb25fc29mdF9yZXNl dCBhY3Rpb24gXCIlc1wiIHNwZWNpZmllZFxuIiwgYnVmKTsKKyAgICAgICAgZXhpdCgxKTsKKyAg ICB9CisKKyAgICAvKiBsaWJ4bF9nZXRfcmVxdWlyZWRfc2hhZG93X21lbW9yeSgpIG11c3QgYmUg Y2FsbGVkIGFmdGVyIGZpbmFsIHZhbHVlcworICAgICAqIChkZWZhdWx0IG9yIHNwZWNpZmllZCkg Zm9yIHZjcHVzIGFuZCBtZW1vcnkgYXJlIHNldCwgYmVjYXVzZSB0aGUKKyAgICAgKiBjYWxjdWxh dGlvbiBkZXBlbmRzIG9uIHRob3NlIHZhbHVlcy4gKi8KKyAgICBiX2luZm8tPnNoYWRvd19tZW1r YiA9ICF4bHVfY2ZnX2dldF9sb25nKGNvbmZpZywgInNoYWRvd19tZW1vcnkiLCAmbCwgMCkKKyAg ICAgICAgPyBsICogMTAyNAorICAgICAgICA6IGxpYnhsX2dldF9yZXF1aXJlZF9zaGFkb3dfbWVt b3J5KGJfaW5mby0+bWF4X21lbWtiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGJfaW5mby0+bWF4X3ZjcHVzKTsKKworICAgIHhsdV9jZmdfZ2V0X2RlZmJvb2wo Y29uZmlnLCAibm9taWdyYXRlIiwgJmJfaW5mby0+ZGlzYWJsZV9taWdyYXRlLCAwKTsKKworICAg IGlmICgheGx1X2NmZ19nZXRfbG9uZyhjb25maWcsICJ0c2NfbW9kZSIsICZsLCAxKSkgeworICAg ICAgICBjb25zdCBjaGFyICpzID0gbGlieGxfdHNjX21vZGVfdG9fc3RyaW5nKGwpOworICAgICAg ICBmcHJpbnRmKHN0ZGVyciwgIldBUk5JTkc6IHNwZWNpZnlpbmcgXCJ0c2NfbW9kZVwiIGFzIGFu IGludGVnZXIgaXMgZGVwcmVjYXRlZC4gIgorICAgICAgICAgICAgICAgICJQbGVhc2UgdXNlIHRo ZSBuYW1lZCBwYXJhbWV0ZXIgdmFyaWFudC4gJXMlcyVzXG4iLAorICAgICAgICAgICAgICAgIHMg PyAiZS5nLiB0c2NfbW9kZT1cIiIgOiAiIiwKKyAgICAgICAgICAgICAgICBzID8gcyA6ICIiLAor ICAgICAgICAgICAgICAgIHMgPyAiXCIiIDogIiIpOworCisgICAgICAgIGlmIChsIDwgTElCWExf VFNDX01PREVfREVGQVVMVCB8fAorICAgICAgICAgICAgbCA+IExJQlhMX1RTQ19NT0RFX05BVElW RV9QQVJBVklSVCkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogaW52YWxp ZCB2YWx1ZSAlbGQgZm9yIFwidHNjX21vZGVcIlxuIiwgbCk7CisgICAgICAgICAgICBleGl0ICgx KTsKKyAgICAgICAgfQorICAgICAgICBiX2luZm8tPnRzY19tb2RlID0gbDsKKyAgICB9IGVsc2Ug aWYgKCF4bHVfY2ZnX2dldF9zdHJpbmcoY29uZmlnLCAidHNjX21vZGUiLCAmYnVmLCAwKSkgewor ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImdvdCBhIHRzYyBtb2RlIHN0cmluZzogXCIlc1wiXG4i LCBidWYpOworICAgICAgICBpZiAobGlieGxfdHNjX21vZGVfZnJvbV9zdHJpbmcoYnVmLCAmYl9p bmZvLT50c2NfbW9kZSkpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IGlu dmFsaWQgdmFsdWUgXCIlc1wiIGZvciBcInRzY19tb2RlXCJcbiIsCisgICAgICAgICAgICAgICAg ICAgIGJ1Zik7CisgICAgICAgICAgICBleGl0ICgxKTsKKyAgICAgICAgfQorICAgIH0KKworICAg IGlmICgheGx1X2NmZ19nZXRfbG9uZyhjb25maWcsICJydGNfdGltZW9mZnNldCIsICZsLCAwKSkK KyAgICAgICAgYl9pbmZvLT5ydGNfdGltZW9mZnNldCA9IGw7CisKKyAgICBpZiAoIXhsdV9jZmdf Z2V0X2xvbmcoY29uZmlnLCAidm5jdmlld2VyIiwgJmwsIDApKQorICAgICAgICBmcHJpbnRmKHN0 ZGVyciwgIldBUk5JTkc6IGlnbm9yaW5nIFwidm5jdmlld2VyXCIgb3B0aW9uLiAiCisgICAgICAg ICAgICAgICAgIlVzZSBcIi1WXCIgb3B0aW9uIG9mIFwieGwgY3JlYXRlXCIgdG8gYXV0b21hdGlj YWxseSBzcGF3biB2bmN2aWV3ZXIuXG4iKTsKKworICAgIHhsdV9jZmdfZ2V0X2RlZmJvb2woY29u ZmlnLCAibG9jYWx0aW1lIiwgJmJfaW5mby0+bG9jYWx0aW1lLCAwKTsKKworICAgIGlmICgheGx1 X2NmZ19nZXRfbG9uZyAoY29uZmlnLCAidmlkZW9yYW0iLCAmbCwgMCkpCisgICAgICAgIGJfaW5m by0+dmlkZW9fbWVta2IgPSBsICogMTAyNDsKKworICAgIGlmICgheGx1X2NmZ19nZXRfbG9uZyhj b25maWcsICJtYXhfZXZlbnRfY2hhbm5lbHMiLCAmbCwgMCkpCisgICAgICAgIGJfaW5mby0+ZXZl bnRfY2hhbm5lbHMgPSBsOworCisgICAgeGx1X2NmZ19yZXBsYWNlX3N0cmluZyAoY29uZmlnLCAi a2VybmVsIiwgJmJfaW5mby0+a2VybmVsLCAwKTsKKyAgICB4bHVfY2ZnX3JlcGxhY2Vfc3RyaW5n IChjb25maWcsICJyYW1kaXNrIiwgJmJfaW5mby0+cmFtZGlzaywgMCk7CisgICAgeGx1X2NmZ19y ZXBsYWNlX3N0cmluZyAoY29uZmlnLCAiZGV2aWNlX3RyZWUiLCAmYl9pbmZvLT5kZXZpY2VfdHJl ZSwgMCk7CisgICAgYl9pbmZvLT5jbWRsaW5lID0gcGFyc2VfY21kbGluZShjb25maWcpOworCisg ICAgeGx1X2NmZ19nZXRfZGVmYm9vbChjb25maWcsICJkcml2ZXJfZG9tYWluIiwgJmNfaW5mby0+ ZHJpdmVyX2RvbWFpbiwgMCk7CisgICAgeGx1X2NmZ19nZXRfZGVmYm9vbChjb25maWcsICJhY3Bp IiwgJmJfaW5mby0+YWNwaSwgMCk7CisKKyAgICBzd2l0Y2goYl9pbmZvLT50eXBlKSB7CisgICAg Y2FzZSBMSUJYTF9ET01BSU5fVFlQRV9IVk06CisgICAgICAgIGtlcm5lbF9iYXNlbmFtZSA9IGxp YnhsX2Jhc2VuYW1lKGJfaW5mby0+a2VybmVsKTsKKyAgICAgICAgaWYgKCFzdHJjbXAoa2VybmVs X2Jhc2VuYW1lLCAiaHZtbG9hZGVyIikpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAi V0FSTklORzogeW91IHNlZW0gdG8gYmUgdXNpbmcgXCJrZXJuZWxcIiAiCisgICAgICAgICAgICAg ICAgICAgICJkaXJlY3RpdmUgdG8gb3ZlcnJpZGUgSFZNIGd1ZXN0IGZpcm13YXJlLiBJZ25vcmUg IgorICAgICAgICAgICAgICAgICAgICAidGhhdC4gVXNlIFwiZmlybXdhcmVfb3ZlcnJpZGVcIiBp bnN0ZWFkIGlmIHlvdSAiCisgICAgICAgICAgICAgICAgICAgICJyZWFsbHkgd2FudCBhIG5vbi1k ZWZhdWx0IGZpcm13YXJlXG4iKTsKKyAgICAgICAgICAgIGJfaW5mby0+a2VybmVsID0gTlVMTDsK KyAgICAgICAgfQorICAgICAgICBmcmVlKGtlcm5lbF9iYXNlbmFtZSk7CisKKyAgICAgICAgeGx1 X2NmZ19yZXBsYWNlX3N0cmluZyAoY29uZmlnLCAiZmlybXdhcmVfb3ZlcnJpZGUiLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAmYl9pbmZvLT51Lmh2bS5maXJtd2FyZSwgMCk7Cisg ICAgICAgIHhsdV9jZmdfcmVwbGFjZV9zdHJpbmcgKGNvbmZpZywgImJpb3NfcGF0aF9vdmVycmlk ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZiX2luZm8tPnUuaHZtLnN5c3Rl bV9maXJtd2FyZSwgMCk7CisgICAgICAgIGlmICgheGx1X2NmZ19nZXRfc3RyaW5nKGNvbmZpZywg ImJpb3MiLCAmYnVmLCAwKSkgeworICAgICAgICAgICAgaWYgKGxpYnhsX2Jpb3NfdHlwZV9mcm9t X3N0cmluZyhidWYsICZiX2luZm8tPnUuaHZtLmJpb3MpKSB7CisgICAgICAgICAgICAgICAgZnBy aW50ZihzdGRlcnIsICJFUlJPUjogaW52YWxpZCB2YWx1ZSBcIiVzXCIgZm9yIFwiYmlvc1wiXG4i LAorICAgICAgICAgICAgICAgICAgICBidWYpOworICAgICAgICAgICAgICAgIGV4aXQgKDEpOwor ICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKGJfaW5mby0+dS5odm0uc3lzdGVtX2Zp cm13YXJlKQorICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJXQVJOSU5HOiAiCisgICAgICAg ICAgICAgICAgICAgICJiaW9zX3BhdGhfb3ZlcnJpZGUgZ2l2ZW4gd2l0aG91dCBzcGVjaWZpYyBi aW9zIG5hbWVcbiIpOworCisgICAgICAgIHhsdV9jZmdfZ2V0X2RlZmJvb2woY29uZmlnLCAicGFl IiwgJmJfaW5mby0+dS5odm0ucGFlLCAwKTsKKyAgICAgICAgeGx1X2NmZ19nZXRfZGVmYm9vbChj b25maWcsICJhcGljIiwgJmJfaW5mby0+dS5odm0uYXBpYywgMCk7CisgICAgICAgIHhsdV9jZmdf Z2V0X2RlZmJvb2woY29uZmlnLCAiYWNwaV9zMyIsICZiX2luZm8tPnUuaHZtLmFjcGlfczMsIDAp OworICAgICAgICB4bHVfY2ZnX2dldF9kZWZib29sKGNvbmZpZywgImFjcGlfczQiLCAmYl9pbmZv LT51Lmh2bS5hY3BpX3M0LCAwKTsKKyAgICAgICAgeGx1X2NmZ19nZXRfZGVmYm9vbChjb25maWcs ICJueCIsICZiX2luZm8tPnUuaHZtLm54LCAwKTsKKyAgICAgICAgeGx1X2NmZ19nZXRfZGVmYm9v bChjb25maWcsICJocGV0IiwgJmJfaW5mby0+dS5odm0uaHBldCwgMCk7CisgICAgICAgIHhsdV9j ZmdfZ2V0X2RlZmJvb2woY29uZmlnLCAidnB0X2FsaWduIiwgJmJfaW5mby0+dS5odm0udnB0X2Fs aWduLCAwKTsKKworICAgICAgICBzd2l0Y2ggKHhsdV9jZmdfZ2V0X2xpc3QoY29uZmlnLCAidmly aWRpYW4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnZpcmlkaWFuLCAmbnVt X3ZpcmlkaWFuLCAxKSkKKyAgICAgICAgeworICAgICAgICBjYXNlIDA6IC8qIFN1Y2Nlc3MgKi8K KyAgICAgICAgICAgIGlmIChudW1fdmlyaWRpYW4pIHsKKyAgICAgICAgICAgICAgICBsaWJ4bF9i aXRtYXBfYWxsb2MoY3R4LCAmYl9pbmZvLT51Lmh2bS52aXJpZGlhbl9lbmFibGUsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlhMX0JVSUxESU5GT19IVk1fVklSSURJQU5f RU5BQkxFX0RJU0FCTEVfV0lEVEgpOworICAgICAgICAgICAgICAgIGxpYnhsX2JpdG1hcF9hbGxv YyhjdHgsICZiX2luZm8tPnUuaHZtLnZpcmlkaWFuX2Rpc2FibGUsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIExJQlhMX0JVSUxESU5GT19IVk1fVklSSURJQU5fRU5BQkxFX0RJ U0FCTEVfV0lEVEgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8 IG51bV92aXJpZGlhbjsgaSsrKSB7CisgICAgICAgICAgICAgICAgbGlieGxfdmlyaWRpYW5fZW5s aWdodGVubWVudCB2OworCisgICAgICAgICAgICAgICAgYnVmID0geGx1X2NmZ19nZXRfbGlzdGl0 ZW0odmlyaWRpYW4sIGkpOworICAgICAgICAgICAgICAgIGlmIChzdHJjbXAoYnVmLCAiYWxsIikg PT0gMCkKKyAgICAgICAgICAgICAgICAgICAgbGlieGxfYml0bWFwX3NldF9hbnkoJmJfaW5mby0+ dS5odm0udmlyaWRpYW5fZW5hYmxlKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChzdHJjbXAo YnVmLCAiZGVmYXVsdHMiKSA9PSAwKQorICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZWZib29s X3NldCgmYl9pbmZvLT51Lmh2bS52aXJpZGlhbiwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgZWxz ZSB7CisgICAgICAgICAgICAgICAgICAgIGxpYnhsX2JpdG1hcCAqcyA9ICZiX2luZm8tPnUuaHZt LnZpcmlkaWFuX2VuYWJsZTsKKyAgICAgICAgICAgICAgICAgICAgbGlieGxfYml0bWFwICpyID0g JmJfaW5mby0+dS5odm0udmlyaWRpYW5fZGlzYWJsZTsKKworICAgICAgICAgICAgICAgICAgICBp ZiAoKmJ1ZiA9PSAnIScpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHMgPSAmYl9pbmZvLT51 Lmh2bS52aXJpZGlhbl9kaXNhYmxlOworICAgICAgICAgICAgICAgICAgICAgICAgciA9ICZiX2lu Zm8tPnUuaHZtLnZpcmlkaWFuX2VuYWJsZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1Zisr OworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgZSA9IGxpYnhs X3ZpcmlkaWFuX2VubGlnaHRlbm1lbnRfZnJvbV9zdHJpbmcoYnVmLCAmdik7CisgICAgICAgICAg ICAgICAgICAgIGlmIChlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVy ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInhsOiB1bmtub3duIHZpcmlkaWFu IGVubGlnaHRlbm1lbnQgJyVzJ1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg YnVmKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQoLUVSUk9SX0ZBSUwpOworICAgICAg ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgbGlieGxfYml0bWFwX3NldChz LCB2KTsKKyAgICAgICAgICAgICAgICAgICAgbGlieGxfYml0bWFwX3Jlc2V0KHIsIHYpOworICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAg ICBjYXNlIEVTUkNIOiBicmVhazsgLyogT3B0aW9uIG5vdCBwcmVzZW50ICovCisgICAgICAgIGNh c2UgRUlOVkFMOgorICAgICAgICAgICAgeGx1X2NmZ19nZXRfZGVmYm9vbChjb25maWcsICJ2aXJp ZGlhbiIsICZiX2luZm8tPnUuaHZtLnZpcmlkaWFuLCAxKTsKKyAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsInhsOiBVbmFibGUg dG8gcGFyc2UgdmlyaWRpYW4gZW5saWdodGVubWVudHMuXG4iKTsKKyAgICAgICAgICAgIGV4aXQo LUVSUk9SX0ZBSUwpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCF4bHVfY2ZnX2dldF9sb25n KGNvbmZpZywgIm1taW9faG9sZSIsICZsLCAwKSkgeworICAgICAgICAgICAgdWludDY0X3QgbW1p b19ob2xlX3NpemU7CisKKyAgICAgICAgICAgIGJfaW5mby0+dS5odm0ubW1pb19ob2xlX21lbWti ID0gbCAqIDEwMjQ7CisgICAgICAgICAgICBtbWlvX2hvbGVfc2l6ZSA9IGJfaW5mby0+dS5odm0u bW1pb19ob2xlX21lbWtiICogMTAyNDsKKyAgICAgICAgICAgIGlmIChtbWlvX2hvbGVfc2l6ZSA8 IEhWTV9CRUxPV180R19NTUlPX0xFTkdUSCB8fAorICAgICAgICAgICAgICAgIG1taW9faG9sZV9z aXplID4gSFZNX0JFTE9XXzRHX01NSU9fU1RBUlQpIHsKKyAgICAgICAgICAgICAgICBmcHJpbnRm KHN0ZGVyciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJFUlJPUjogaW52YWxpZCB2YWx1ZSAl bGQgZm9yIFwibW1pb19ob2xlXCJcbiIsIGwpOworICAgICAgICAgICAgICAgIGV4aXQgKDEpOwor ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICgheGx1X2NmZ19nZXRfbG9uZyhj b25maWcsICJ0aW1lcl9tb2RlIiwgJmwsIDEpKSB7CisgICAgICAgICAgICBjb25zdCBjaGFyICpz ID0gbGlieGxfdGltZXJfbW9kZV90b19zdHJpbmcobCk7CisgICAgICAgICAgICBmcHJpbnRmKHN0 ZGVyciwgIldBUk5JTkc6IHNwZWNpZnlpbmcgXCJ0aW1lcl9tb2RlXCIgYXMgYW4gaW50ZWdlciBp cyBkZXByZWNhdGVkLiAiCisgICAgICAgICAgICAgICAgICAgICJQbGVhc2UgdXNlIHRoZSBuYW1l ZCBwYXJhbWV0ZXIgdmFyaWFudC4gJXMlcyVzXG4iLAorICAgICAgICAgICAgICAgICAgICBzID8g ImUuZy4gdGltZXJfbW9kZT1cIiIgOiAiIiwKKyAgICAgICAgICAgICAgICAgICAgcyA/IHMgOiAi IiwKKyAgICAgICAgICAgICAgICAgICAgcyA/ICJcIiIgOiAiIik7CisKKyAgICAgICAgICAgIGlm IChsIDwgTElCWExfVElNRVJfTU9ERV9ERUxBWV9GT1JfTUlTU0VEX1RJQ0tTIHx8CisgICAgICAg ICAgICAgICAgbCA+IExJQlhMX1RJTUVSX01PREVfT05FX01JU1NFRF9USUNLX1BFTkRJTkcpIHsK KyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBpbnZhbGlkIHZhbHVlICVs ZCBmb3IgXCJ0aW1lcl9tb2RlXCJcbiIsIGwpOworICAgICAgICAgICAgICAgIGV4aXQgKDEpOwor ICAgICAgICAgICAgfQorICAgICAgICAgICAgYl9pbmZvLT51Lmh2bS50aW1lcl9tb2RlID0gbDsK KyAgICAgICAgfSBlbHNlIGlmICgheGx1X2NmZ19nZXRfc3RyaW5nKGNvbmZpZywgInRpbWVyX21v ZGUiLCAmYnVmLCAwKSkgeworICAgICAgICAgICAgaWYgKGxpYnhsX3RpbWVyX21vZGVfZnJvbV9z dHJpbmcoYnVmLCAmYl9pbmZvLT51Lmh2bS50aW1lcl9tb2RlKSkgeworICAgICAgICAgICAgICAg IGZwcmludGYoc3RkZXJyLCAiRVJST1I6IGludmFsaWQgdmFsdWUgXCIlc1wiIGZvciBcInRpbWVy X21vZGVcIlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1Zik7CisgICAgICAgICAgICAg ICAgZXhpdCAoMSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB4bHVfY2Zn X2dldF9kZWZib29sKGNvbmZpZywgIm5lc3RlZGh2bSIsICZiX2luZm8tPnUuaHZtLm5lc3RlZF9o dm0sIDApOworCisgICAgICAgIHhsdV9jZmdfZ2V0X2RlZmJvb2woY29uZmlnLCAiYWx0cDJtaHZt IiwgJmJfaW5mby0+dS5odm0uYWx0cDJtLCAwKTsKKworICAgICAgICB4bHVfY2ZnX3JlcGxhY2Vf c3RyaW5nKGNvbmZpZywgInNtYmlvc19maXJtd2FyZSIsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJmJfaW5mby0+dS5odm0uc21iaW9zX2Zpcm13YXJlLCAwKTsKKyAgICAgICAgeGx1 X2NmZ19yZXBsYWNlX3N0cmluZyhjb25maWcsICJhY3BpX2Zpcm13YXJlIiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAmYl9pbmZvLT51Lmh2bS5hY3BpX2Zpcm13YXJlLCAwKTsKKwor ICAgICAgICBpZiAoIXhsdV9jZmdfZ2V0X3N0cmluZyhjb25maWcsICJtc192bV9nZW5pZCIsICZi dWYsIDApKSB7CisgICAgICAgICAgICBpZiAoIXN0cmNtcChidWYsICJnZW5lcmF0ZSIpKSB7Cisg ICAgICAgICAgICAgICAgZSA9IGxpYnhsX21zX3ZtX2dlbmlkX2dlbmVyYXRlKGN0eCwgJmJfaW5m by0+dS5odm0ubXNfdm1fZ2VuaWQpOworICAgICAgICAgICAgICAgIGlmIChlKSB7CisgICAgICAg ICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IGZhaWxlZCB0byBnZW5lcmF0ZSBh IFZNIEdlbmVyYXRpb24gSURcbiIpOworICAgICAgICAgICAgICAgICAgICBleGl0KDEpOworICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChidWYsICJub25l IikpIHsKKyAgICAgICAgICAgICAgICA7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg ICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBcIm1zX3ZtX2dlbmlkXCIgb3B0aW9u IG11c3QgYmUgXCJnZW5lcmF0ZVwiIG9yIFwibm9uZVwiXG4iKTsKKyAgICAgICAgICAgICAgICAg ICAgZXhpdCgxKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICgheGx1 X2NmZ19nZXRfbG9uZyAoY29uZmlnLCAicmRtX21lbV9ib3VuZGFyeSIsICZsLCAwKSkKKyAgICAg ICAgICAgIGJfaW5mby0+dS5odm0ucmRtX21lbV9ib3VuZGFyeV9tZW1rYiA9IGwgKiAxMDI0Owor ICAgICAgICBicmVhazsKKyAgICBjYXNlIExJQlhMX0RPTUFJTl9UWVBFX1BWOgorICAgIHsKKyAg ICAgICAgeGx1X2NmZ19yZXBsYWNlX3N0cmluZyAoY29uZmlnLCAiYm9vdGxvYWRlciIsICZiX2lu Zm8tPnUucHYuYm9vdGxvYWRlciwgMCk7CisgICAgICAgIHN3aXRjaCAoeGx1X2NmZ19nZXRfbGlz dF9hc19zdHJpbmdfbGlzdChjb25maWcsICJib290bG9hZGVyX2FyZ3MiLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAmYl9pbmZvLT51LnB2LmJvb3Rsb2FkZXJfYXJncywg MSkpCisgICAgICAgIHsKKworICAgICAgICBjYXNlIDA6IGJyZWFrOyAvKiBTdWNjZXNzICovCisg ICAgICAgIGNhc2UgRVNSQ0g6IGJyZWFrOyAvKiBPcHRpb24gbm90IHByZXNlbnQgKi8KKyAgICAg ICAgY2FzZSBFSU5WQUw6CisgICAgICAgICAgICBpZiAoIXhsdV9jZmdfZ2V0X3N0cmluZyhjb25m aWcsICJib290bG9hZGVyX2FyZ3MiLCAmYnVmLCAwKSkgeworCisgICAgICAgICAgICAgICAgZnBy aW50ZihzdGRlcnIsICJXQVJOSU5HOiBTcGVjaWZ5aW5nIFwiYm9vdGxvYWRlcl9hcmdzXCIiCisg ICAgICAgICAgICAgICAgICAgICAgICAiIGFzIGEgc3RyaW5nIGlzIGRlcHJlY2F0ZWQuICIKKyAg ICAgICAgICAgICAgICAgICAgICAgICJQbGVhc2UgdXNlIGEgbGlzdCBvZiBhcmd1bWVudHMuXG4i KTsKKyAgICAgICAgICAgICAgICBzcGxpdF9zdHJpbmdfaW50b19zdHJpbmdfbGlzdChidWYsICIg XHRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJf aW5mby0+dS5wdi5ib290bG9hZGVyX2FyZ3MpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg YnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwieGw6 IFVuYWJsZSB0byBwYXJzZSBib290bG9hZGVyX2FyZ3MuXG4iKTsKKyAgICAgICAgICAgIGV4aXQo LUVSUk9SX0ZBSUwpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFiX2luZm8tPnUucHYuYm9v dGxvYWRlciAmJiAhYl9pbmZvLT5rZXJuZWwpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJy LCAiTmVpdGhlciBrZXJuZWwgbm9yIGJvb3Rsb2FkZXIgc3BlY2lmaWVkXG4iKTsKKyAgICAgICAg ICAgIGV4aXQoMSk7CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKyAgICB9CisgICAgZGVm YXVsdDoKKyAgICAgICAgYWJvcnQoKTsKKyAgICB9CisKKyAgICBpZiAoIXhsdV9jZmdfZ2V0X2xp c3QoY29uZmlnLCAiaW9wb3J0cyIsICZpb3BvcnRzLCAmbnVtX2lvcG9ydHMsIDApKSB7CisgICAg ICAgIGJfaW5mby0+bnVtX2lvcG9ydHMgPSBudW1faW9wb3J0czsKKyAgICAgICAgYl9pbmZvLT5p b3BvcnRzID0gY2FsbG9jKG51bV9pb3BvcnRzLCBzaXplb2YoKmJfaW5mby0+aW9wb3J0cykpOwor ICAgICAgICBpZiAoYl9pbmZvLT5pb3BvcnRzID09IE5VTEwpIHsKKyAgICAgICAgICAgIGZwcmlu dGYoc3RkZXJyLCAidW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgaW9wb3J0c1xuIik7Cisg ICAgICAgICAgICBleGl0KC0xKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoaSA9IDA7IGkg PCBudW1faW9wb3J0czsgaSsrKSB7CisgICAgICAgICAgICBjb25zdCBjaGFyICpidWYyOworICAg ICAgICAgICAgY2hhciAqZXA7CisgICAgICAgICAgICB1aW50MzJfdCBzdGFydCwgZW5kOworICAg ICAgICAgICAgdW5zaWduZWQgbG9uZyB1bDsKKworICAgICAgICAgICAgYnVmID0geGx1X2NmZ19n ZXRfbGlzdGl0ZW0gKGlvcG9ydHMsIGkpOworICAgICAgICAgICAgaWYgKCFidWYpIHsKKyAgICAg ICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJ4bDog VW5hYmxlIHRvIGdldCBlbGVtZW50ICMlZCBpbiBpb3BvcnQgbGlzdFxuIiwgaSk7CisgICAgICAg ICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHVsID0gc3RydG91 bChidWYsICZlcCwgMTYpOworICAgICAgICAgICAgaWYgKGVwID09IGJ1ZikgeworICAgICAgICAg ICAgICAgIGZwcmludGYoc3RkZXJyLCAieGw6IEludmFsaWQgYXJndW1lbnQgcGFyc2luZyBpb3Bv cnQ6ICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgYnVmKTsKKyAgICAgICAgICAgICAg ICBleGl0KDEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHVsID49IFVJTlQzMl9N QVgpIHsKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInhsOiBpb3BvcnQgJWx4IHRv byBiaWdcbiIsIHVsKTsKKyAgICAgICAgICAgICAgICBleGl0KDEpOworICAgICAgICAgICAgfQor ICAgICAgICAgICAgc3RhcnQgPSBlbmQgPSB1bDsKKworICAgICAgICAgICAgaWYgKCplcCA9PSAn LScpIHsKKyAgICAgICAgICAgICAgICBidWYyID0gZXAgKyAxOworICAgICAgICAgICAgICAgIHVs ID0gc3RydG91bChidWYyLCAmZXAsIDE2KTsKKyAgICAgICAgICAgICAgICBpZiAoZXAgPT0gYnVm MiB8fCAqZXAgIT0gJ1wwJyB8fCBzdGFydCA+IGVuZCkgeworICAgICAgICAgICAgICAgICAgICBm cHJpbnRmKHN0ZGVyciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAieGw6IEludmFsaWQg YXJndW1lbnQgcGFyc2luZyBpb3BvcnQ6ICVzXG4iLCBidWYpOworICAgICAgICAgICAgICAgICAg ICBleGl0KDEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAodWwgPj0g VUlOVDMyX01BWCkgeworICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInhsOiBp b3BvcnQgJWx4IHRvbyBiaWdcbiIsIHVsKTsKKyAgICAgICAgICAgICAgICAgICAgZXhpdCgxKTsK KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZW5kID0gdWw7CisgICAgICAgICAg ICB9IGVsc2UgaWYgKCAqZXAgIT0gJ1wwJyApCisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRl cnIsCisgICAgICAgICAgICAgICAgICAgICAgICAieGw6IEludmFsaWQgYXJndW1lbnQgcGFyc2lu ZyBpb3BvcnQ6ICVzXG4iLCBidWYpOworICAgICAgICAgICAgYl9pbmZvLT5pb3BvcnRzW2ldLmZp cnN0ID0gc3RhcnQ7CisgICAgICAgICAgICBiX2luZm8tPmlvcG9ydHNbaV0ubnVtYmVyID0gZW5k IC0gc3RhcnQgKyAxOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCF4bHVfY2ZnX2dldF9s aXN0KGNvbmZpZywgImlycXMiLCAmaXJxcywgJm51bV9pcnFzLCAwKSkgeworICAgICAgICBiX2lu Zm8tPm51bV9pcnFzID0gbnVtX2lycXM7CisgICAgICAgIGJfaW5mby0+aXJxcyA9IGNhbGxvYyhu dW1faXJxcywgc2l6ZW9mKCpiX2luZm8tPmlycXMpKTsKKyAgICAgICAgaWYgKGJfaW5mby0+aXJx cyA9PSBOVUxMKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInVuYWJsZSB0byBhbGxv Y2F0ZSBtZW1vcnkgZm9yIGlvcG9ydHNcbiIpOworICAgICAgICAgICAgZXhpdCgtMSk7CisgICAg ICAgIH0KKyAgICAgICAgZm9yIChpID0gMDsgaSA8IG51bV9pcnFzOyBpKyspIHsKKyAgICAgICAg ICAgIGNoYXIgKmVwOworICAgICAgICAgICAgdW5zaWduZWQgbG9uZyB1bDsKKyAgICAgICAgICAg IGJ1ZiA9IHhsdV9jZmdfZ2V0X2xpc3RpdGVtIChpcnFzLCBpKTsKKyAgICAgICAgICAgIGlmICgh YnVmKSB7CisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsCisgICAgICAgICAgICAgICAg ICAgICAgICAieGw6IFVuYWJsZSB0byBnZXQgZWxlbWVudCAlZCBpbiBpcnEgbGlzdFxuIiwgaSk7 CisgICAgICAgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHVs ID0gc3RydG91bChidWYsICZlcCwgMTApOworICAgICAgICAgICAgaWYgKGVwID09IGJ1ZiB8fCAq ZXAgIT0gJ1wwJykgeworICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLAorICAgICAgICAg ICAgICAgICAgICAgICAgInhsOiBJbnZhbGlkIGFyZ3VtZW50IHBhcnNpbmcgaXJxOiAlc1xuIiwg YnVmKTsKKyAgICAgICAgICAgICAgICBleGl0KDEpOworICAgICAgICAgICAgfQorICAgICAgICAg ICAgaWYgKHVsID49IFVJTlQzMl9NQVgpIHsKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVy ciwgInhsOiBpcnEgJWx4IHRvbyBiaWdcbiIsIHVsKTsKKyAgICAgICAgICAgICAgICBleGl0KDEp OworICAgICAgICAgICAgfQorICAgICAgICAgICAgYl9pbmZvLT5pcnFzW2ldID0gdWw7CisgICAg ICAgIH0KKyAgICB9CisKKyAgICBpZiAoIXhsdV9jZmdfZ2V0X2xpc3QoY29uZmlnLCAiaW9tZW0i LCAmaW9tZW0sICZudW1faW9tZW0sIDApKSB7CisgICAgICAgIGludCByZXQ7CisgICAgICAgIGJf aW5mby0+bnVtX2lvbWVtID0gbnVtX2lvbWVtOworICAgICAgICBiX2luZm8tPmlvbWVtID0gY2Fs bG9jKG51bV9pb21lbSwgc2l6ZW9mKCpiX2luZm8tPmlvbWVtKSk7CisgICAgICAgIGlmIChiX2lu Zm8tPmlvbWVtID09IE5VTEwpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAidW5hYmxl IHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgaW9tZW1cbiIpOworICAgICAgICAgICAgZXhpdCgtMSk7 CisgICAgICAgIH0KKyAgICAgICAgZm9yIChpID0gMDsgaSA8IG51bV9pb21lbTsgaSsrKSB7Cisg ICAgICAgICAgICBpbnQgdXNlZDsKKworICAgICAgICAgICAgYnVmID0geGx1X2NmZ19nZXRfbGlz dGl0ZW0gKGlvbWVtLCBpKTsKKyAgICAgICAgICAgIGlmICghYnVmKSB7CisgICAgICAgICAgICAg ICAgZnByaW50ZihzdGRlcnIsCisgICAgICAgICAgICAgICAgICAgICAgICAieGw6IFVuYWJsZSB0 byBnZXQgZWxlbWVudCAlZCBpbiBpb21lbSBsaXN0XG4iLCBpKTsKKyAgICAgICAgICAgICAgICBl eGl0KDEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbGlieGxfaW9tZW1fcmFuZ2VfaW5p dCgmYl9pbmZvLT5pb21lbVtpXSk7CisgICAgICAgICAgICByZXQgPSBzc2NhbmYoYnVmLCAiJSIg U0NOeDY0IiwlIiBTQ054NjQiJW5AJSIgU0NOeDY0IiVuIiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAmYl9pbmZvLT5pb21lbVtpXS5zdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAm Yl9pbmZvLT5pb21lbVtpXS5udW1iZXIsICZ1c2VkLAorICAgICAgICAgICAgICAgICAgICAgICAg ICZiX2luZm8tPmlvbWVtW2ldLmdmbiwgJnVzZWQpOworICAgICAgICAgICAgaWYgKHJldCA8IDIg fHwgYnVmW3VzZWRdICE9ICdcMCcpIHsKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwK KyAgICAgICAgICAgICAgICAgICAgICAgICJ4bDogSW52YWxpZCBhcmd1bWVudCBwYXJzaW5nIGlv bWVtOiAlc1xuIiwgYnVmKTsKKyAgICAgICAgICAgICAgICBleGl0KDEpOworICAgICAgICAgICAg fQorICAgICAgICB9CisgICAgfQorCisKKworICAgIGlmICgheGx1X2NmZ19nZXRfbGlzdCAoY29u ZmlnLCAiZGlzayIsICZ2YmRzLCAwLCAwKSkgeworICAgICAgICBkX2NvbmZpZy0+bnVtX2Rpc2tz ID0gMDsKKyAgICAgICAgZF9jb25maWctPmRpc2tzID0gTlVMTDsKKyAgICAgICAgd2hpbGUgKChi dWYgPSB4bHVfY2ZnX2dldF9saXN0aXRlbSAodmJkcywgZF9jb25maWctPm51bV9kaXNrcykpICE9 IE5VTEwpIHsKKyAgICAgICAgICAgIGxpYnhsX2RldmljZV9kaXNrICpkaXNrOworICAgICAgICAg ICAgY2hhciAqYnVmMiA9IHN0cmR1cChidWYpOworCisgICAgICAgICAgICBkaXNrID0gQVJSQVlf RVhURU5EX0lOSVRfTk9ERVZJRChkX2NvbmZpZy0+ZGlza3MsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBkX2NvbmZpZy0+bnVtX2Rpc2tzLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX2Rpc2tfaW5p dCk7CisgICAgICAgICAgICBwYXJzZV9kaXNrX2NvbmZpZygmY29uZmlnLCBidWYyLCBkaXNrKTsK KworICAgICAgICAgICAgZnJlZShidWYyKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICgh eGx1X2NmZ19nZXRfbGlzdChjb25maWcsICJ2dHBtIiwgJnZ0cG1zLCAwLCAwKSkgeworICAgICAg ICBkX2NvbmZpZy0+bnVtX3Z0cG1zID0gMDsKKyAgICAgICAgZF9jb25maWctPnZ0cG1zID0gTlVM TDsKKyAgICAgICAgd2hpbGUgKChidWYgPSB4bHVfY2ZnX2dldF9saXN0aXRlbSAodnRwbXMsIGRf Y29uZmlnLT5udW1fdnRwbXMpKSAhPSBOVUxMKSB7CisgICAgICAgICAgICBsaWJ4bF9kZXZpY2Vf dnRwbSAqdnRwbTsKKyAgICAgICAgICAgIGNoYXIgKiBidWYyID0gc3RyZHVwKGJ1Zik7CisgICAg ICAgICAgICBjaGFyICpwLCAqcDI7CisgICAgICAgICAgICBib29sIGdvdF9iYWNrZW5kID0gZmFs c2U7CisKKyAgICAgICAgICAgIHZ0cG0gPSBBUlJBWV9FWFRFTkRfSU5JVChkX2NvbmZpZy0+dnRw bXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZF9jb25maWctPm51bV92 dHBtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2Vf dnRwbV9pbml0KTsKKworICAgICAgICAgICAgcCA9IHN0cnRvayhidWYyLCAiLCIpOworICAgICAg ICAgICAgaWYocCkgeworICAgICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgICAgd2hp bGUoKnAgPT0gJyAnKQorICAgICAgICAgICAgICAgICAgICAgKytwOworICAgICAgICAgICAgICAg ICAgaWYgKChwMiA9IHN0cmNocihwLCAnPScpKSA9PSBOVUxMKQorICAgICAgICAgICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAqcDIgPSAnXDAnOworICAgICAgICAgICAgICAg ICAgaWYgKCFzdHJjbXAocCwgImJhY2tlbmQiKSkgeworICAgICAgICAgICAgICAgICAgICAgdnRw bS0+YmFja2VuZF9kb21uYW1lID0gc3RyZHVwKHAyICsgMSk7CisgICAgICAgICAgICAgICAgICAg ICBnb3RfYmFja2VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYoIXN0cmNt cChwLCAidXVpZCIpKSB7CisgICAgICAgICAgICAgICAgICAgICBpZiggbGlieGxfdXVpZF9mcm9t X3N0cmluZygmdnRwbS0+dXVpZCwgcDIgKyAxKSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg IGZwcmludGYoc3RkZXJyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZhaWxlZCB0 byBwYXJzZSB2dHBtIFVVSUQ6ICVzXG4iLCBwMiArIDEpOworICAgICAgICAgICAgICAgICAgICAg ICAgZXhpdCgxKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgfSBl bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiVW5rbm93biBzdHJp bmcgYCVzJyBpbiB2dHBtIHNwZWNcbiIsIHApOworICAgICAgICAgICAgICAgICAgICAgZXhpdCgx KTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgIH0gd2hpbGUgKChwID0gc3Ry dG9rKE5VTEwsICIsIikpICE9IE5VTEwpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYo IWdvdF9iYWNrZW5kKSB7CisgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInZ0cG0gc3Bl YyBtaXNzaW5nIHJlcXVpcmVkIGJhY2tlbmQgZmllbGQhXG4iKTsKKyAgICAgICAgICAgICAgIGV4 aXQoMSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmcmVlKGJ1ZjIpOworICAgICAgICB9 CisgICAgfQorCisgICAgaWYgKCF4bHVfY2ZnX2dldF9saXN0IChjb25maWcsICJjaGFubmVsIiwg JmNoYW5uZWxzLCAwLCAwKSkgeworICAgICAgICBkX2NvbmZpZy0+bnVtX2NoYW5uZWxzID0gMDsK KyAgICAgICAgZF9jb25maWctPmNoYW5uZWxzID0gTlVMTDsKKyAgICAgICAgd2hpbGUgKChidWYg PSB4bHVfY2ZnX2dldF9saXN0aXRlbSAoY2hhbm5lbHMsCisgICAgICAgICAgICAgICAgZF9jb25m aWctPm51bV9jaGFubmVscykpICE9IE5VTEwpIHsKKyAgICAgICAgICAgIGxpYnhsX2RldmljZV9j aGFubmVsICpjaG47CisgICAgICAgICAgICBsaWJ4bF9zdHJpbmdfbGlzdCBwYWlyczsKKyAgICAg ICAgICAgIGNoYXIgKnBhdGggPSBOVUxMOworICAgICAgICAgICAgaW50IGxlbjsKKworICAgICAg ICAgICAgY2huID0gQVJSQVlfRVhURU5EX0lOSVQoZF9jb25maWctPmNoYW5uZWxzLCBkX2NvbmZp Zy0+bnVtX2NoYW5uZWxzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4 bF9kZXZpY2VfY2hhbm5lbF9pbml0KTsKKworICAgICAgICAgICAgc3BsaXRfc3RyaW5nX2ludG9f c3RyaW5nX2xpc3QoYnVmLCAiLCIsICZwYWlycyk7CisgICAgICAgICAgICBsZW4gPSBsaWJ4bF9z dHJpbmdfbGlzdF9sZW5ndGgoJnBhaXJzKTsKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBs ZW47IGkrKykgeworICAgICAgICAgICAgICAgIGNoYXIgKmtleSwgKmtleV91bnRyaW1tZWQsICp2 YWx1ZSwgKnZhbHVlX3VudHJpbW1lZDsKKyAgICAgICAgICAgICAgICBpbnQgcmM7CisgICAgICAg ICAgICAgICAgcmMgPSBzcGxpdF9zdHJpbmdfaW50b19wYWlyKHBhaXJzW2ldLCAiPSIsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZrZXlfdW50cmltbWVkLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdmFsdWVfdW50cmlt bWVkKTsKKyAgICAgICAgICAgICAgICBpZiAocmMgIT0gMCkgeworICAgICAgICAgICAgICAgICAg ICBmcHJpbnRmKHN0ZGVyciwgImZhaWxlZCB0byBwYXJzZSBjaGFubmVsIGNvbmZpZ3VyYXRpb246 ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWlyc1tpXSk7CisgICAgICAgICAg ICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRy aW0oaXNzcGFjZSwga2V5X3VudHJpbW1lZCwgJmtleSk7CisgICAgICAgICAgICAgICAgdHJpbShp c3NwYWNlLCB2YWx1ZV91bnRyaW1tZWQsICZ2YWx1ZSk7CisKKyAgICAgICAgICAgICAgICBpZiAo IXN0cmNtcChrZXksICJiYWNrZW5kIikpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVwbGFjZV9z dHJpbmcoJmNobi0+YmFja2VuZF9kb21uYW1lLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgfSBl bHNlIGlmICghc3RyY21wKGtleSwgIm5hbWUiKSkgeworICAgICAgICAgICAgICAgICAgICByZXBs YWNlX3N0cmluZygmY2huLT5uYW1lLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlm ICghc3RyY21wKGtleSwgInBhdGgiKSkgeworICAgICAgICAgICAgICAgICAgICByZXBsYWNlX3N0 cmluZygmcGF0aCwgdmFsdWUpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChr ZXksICJjb25uZWN0aW9uIikpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFzdHJjbXAodmFs dWUsICJwdHkiKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY2huLT5jb25uZWN0aW9uID0g TElCWExfQ0hBTk5FTF9DT05ORUNUSU9OX1BUWTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNl IGlmICghc3RyY21wKHZhbHVlLCAic29ja2V0IikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg IGNobi0+Y29ubmVjdGlvbiA9IExJQlhMX0NIQU5ORUxfQ09OTkVDVElPTl9TT0NLRVQ7CisgICAg ICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRm KHN0ZGVyciwgInVua25vd24gY2hhbm5lbCBjb25uZWN0aW9uICclcydcbiIsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4 aXQoMSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2Ugewor ICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInVua25vd24gY2hhbm5lbCBwYXJh bWV0ZXIgJyVzJywiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBpZ25vcmlu Z1xuIiwga2V5KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZnJlZShrZXkp OworICAgICAgICAgICAgICAgIGZyZWUoa2V5X3VudHJpbW1lZCk7CisgICAgICAgICAgICAgICAg ZnJlZSh2YWx1ZSk7CisgICAgICAgICAgICAgICAgZnJlZSh2YWx1ZV91bnRyaW1tZWQpOworICAg ICAgICAgICAgfQorICAgICAgICAgICAgc3dpdGNoIChjaG4tPmNvbm5lY3Rpb24pIHsKKyAgICAg ICAgICAgIGNhc2UgTElCWExfQ0hBTk5FTF9DT05ORUNUSU9OX1VOS05PV046CisgICAgICAgICAg ICAgICAgZnByaW50ZihzdGRlcnIsICJjaGFubmVsIGhhcyB1bmtub3duICdjb25uZWN0aW9uJ1xu Iik7CisgICAgICAgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgICAgIGNhc2UgTElCWExfQ0hB Tk5FTF9DT05ORUNUSU9OX1NPQ0tFVDoKKyAgICAgICAgICAgICAgICBpZiAoIXBhdGgpIHsKKyAg ICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJjaGFubmVsIGNvbm5lY3Rpb24gJ3Nv Y2tldCcgcmVxdWlyZXMgcGF0aD0uLlxuIik7CisgICAgICAgICAgICAgICAgICAgIGV4aXQoMSk7 CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNobi0+dS5zb2NrZXQucGF0aCA9 IHhzdHJkdXAocGF0aCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl IExJQlhMX0NIQU5ORUxfQ09OTkVDVElPTl9QVFk6CisgICAgICAgICAgICAgICAgLyogTm90aGlu ZyB0byBkbyBzaW5jZSBQVFkgaGFzIG5vIGFyZ3VtZW50cyAqLworICAgICAgICAgICAgICAgIGJy ZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVy ciwgInVua25vd24gY2hhbm5lbCBjb25uZWN0aW9uOiAlZCIsCisgICAgICAgICAgICAgICAgICAg ICAgICBjaG4tPmNvbm5lY3Rpb24pOworICAgICAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAg ICAgICB9CisgICAgICAgICAgICBsaWJ4bF9zdHJpbmdfbGlzdF9kaXNwb3NlKCZwYWlycyk7Cisg ICAgICAgICAgICBmcmVlKHBhdGgpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCF4bHVf Y2ZnX2dldF9saXN0IChjb25maWcsICJ2aWYiLCAmbmljcywgMCwgMCkpIHsKKyAgICAgICAgZF9j b25maWctPm51bV9uaWNzID0gMDsKKyAgICAgICAgZF9jb25maWctPm5pY3MgPSBOVUxMOworICAg ICAgICB3aGlsZSAoKGJ1ZiA9IHhsdV9jZmdfZ2V0X2xpc3RpdGVtIChuaWNzLCBkX2NvbmZpZy0+ bnVtX25pY3MpKSAhPSBOVUxMKSB7CisgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfbmljICpuaWM7 CisgICAgICAgICAgICBjaGFyICpidWYyID0gc3RyZHVwKGJ1Zik7CisgICAgICAgICAgICBjaGFy ICpwOworCisgICAgICAgICAgICBuaWMgPSBBUlJBWV9FWFRFTkRfSU5JVChkX2NvbmZpZy0+bmlj cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRfY29uZmlnLT5udW1fbmlj cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV9uaWNf aW5pdCk7CisgICAgICAgICAgICBzZXRfZGVmYXVsdF9uaWNfdmFsdWVzKG5pYyk7CisKKyAgICAg ICAgICAgIHAgPSBzdHJ0b2soYnVmMiwgIiwiKTsKKyAgICAgICAgICAgIGlmICghcCkKKyAgICAg ICAgICAgICAgICBnb3RvIHNraXBfbmljOworICAgICAgICAgICAgZG8geworICAgICAgICAgICAg ICAgIHdoaWxlICgqcCA9PSAnICcpCisgICAgICAgICAgICAgICAgICAgIHArKzsKKyAgICAgICAg ICAgICAgICBwYXJzZV9uaWNfY29uZmlnKG5pYywgJmNvbmZpZywgcCk7CisgICAgICAgICAgICB9 IHdoaWxlICgocCA9IHN0cnRvayhOVUxMLCAiLCIpKSAhPSBOVUxMKTsKK3NraXBfbmljOgorICAg ICAgICAgICAgZnJlZShidWYyKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICgheGx1X2Nm Z19nZXRfbGlzdChjb25maWcsICJ2aWYyIiwgTlVMTCwgMCwgMCkpIHsKKyAgICAgICAgZnByaW50 ZihzdGRlcnIsICJXQVJOSU5HOiB2aWYyOiBuZXRjaGFubmVsMiBpcyBkZXByZWNhdGVkIGFuZCBu b3Qgc3VwcG9ydGVkIGJ5IHhsXG4iKTsKKyAgICB9CisKKyAgICBkX2NvbmZpZy0+bnVtX3ZmYnMg PSAwOworICAgIGRfY29uZmlnLT5udW1fdmticyA9IDA7CisgICAgZF9jb25maWctPnZmYnMgPSBO VUxMOworICAgIGRfY29uZmlnLT52a2JzID0gTlVMTDsKKworICAgIGlmICgheGx1X2NmZ19nZXRf bGlzdCAoY29uZmlnLCAidmZiIiwgJmN2ZmJzLCAwLCAwKSkgeworICAgICAgICB3aGlsZSAoKGJ1 ZiA9IHhsdV9jZmdfZ2V0X2xpc3RpdGVtIChjdmZicywgZF9jb25maWctPm51bV92ZmJzKSkgIT0g TlVMTCkgeworICAgICAgICAgICAgbGlieGxfZGV2aWNlX3ZmYiAqdmZiOworICAgICAgICAgICAg bGlieGxfZGV2aWNlX3ZrYiAqdmtiOworCisgICAgICAgICAgICBjaGFyICpidWYyID0gc3RyZHVw KGJ1Zik7CisgICAgICAgICAgICBjaGFyICpwLCAqcDI7CisKKyAgICAgICAgICAgIHZmYiA9IEFS UkFZX0VYVEVORF9JTklUKGRfY29uZmlnLT52ZmJzLCBkX2NvbmZpZy0+bnVtX3ZmYnMsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdmZiX2luaXQpOwor CisgICAgICAgICAgICB2a2IgPSBBUlJBWV9FWFRFTkRfSU5JVChkX2NvbmZpZy0+dmticywgZF9j b25maWctPm51bV92a2JzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGli eGxfZGV2aWNlX3ZrYl9pbml0KTsKKworICAgICAgICAgICAgcCA9IHN0cnRvayhidWYyLCAiLCIp OworICAgICAgICAgICAgaWYgKCFwKQorICAgICAgICAgICAgICAgIGdvdG8gc2tpcF92ZmI7Cisg ICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgd2hpbGUgKCpwID09ICcgJykKKyAgICAg ICAgICAgICAgICAgICAgcCsrOworICAgICAgICAgICAgICAgIGlmICgocDIgPSBzdHJjaHIocCwg Jz0nKSkgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg ICAgKnAyID0gJ1wwJzsKKyAgICAgICAgICAgICAgICBpZiAoIXN0cmNtcChwLCAidm5jIikpIHsK KyAgICAgICAgICAgICAgICAgICAgbGlieGxfZGVmYm9vbF9zZXQoJnZmYi0+dm5jLmVuYWJsZSwg YXRvaShwMiArIDEpKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAocCwgInZu Y2xpc3RlbiIpKSB7CisgICAgICAgICAgICAgICAgICAgIGZyZWUodmZiLT52bmMubGlzdGVuKTsK KyAgICAgICAgICAgICAgICAgICAgdmZiLT52bmMubGlzdGVuID0gc3RyZHVwKHAyICsgMSk7Cisg ICAgICAgICAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKHAsICJ2bmNwYXNzd2QiKSkgeworICAg ICAgICAgICAgICAgICAgICBmcmVlKHZmYi0+dm5jLnBhc3N3ZCk7CisgICAgICAgICAgICAgICAg ICAgIHZmYi0+dm5jLnBhc3N3ZCA9IHN0cmR1cChwMiArIDEpOworICAgICAgICAgICAgICAgIH0g ZWxzZSBpZiAoIXN0cmNtcChwLCAidm5jZGlzcGxheSIpKSB7CisgICAgICAgICAgICAgICAgICAg IHZmYi0+dm5jLmRpc3BsYXkgPSBhdG9pKHAyICsgMSk7CisgICAgICAgICAgICAgICAgfSBlbHNl IGlmICghc3RyY21wKHAsICJ2bmN1bnVzZWQiKSkgeworICAgICAgICAgICAgICAgICAgICBsaWJ4 bF9kZWZib29sX3NldCgmdmZiLT52bmMuZmluZHVudXNlZCwgYXRvaShwMiArIDEpKTsKKyAgICAg ICAgICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAocCwgImtleW1hcCIpKSB7CisgICAgICAgICAg ICAgICAgICAgIGZyZWUodmZiLT5rZXltYXApOworICAgICAgICAgICAgICAgICAgICB2ZmItPmtl eW1hcCA9IHN0cmR1cChwMiArIDEpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNt cChwLCAic2RsIikpIHsKKyAgICAgICAgICAgICAgICAgICAgbGlieGxfZGVmYm9vbF9zZXQoJnZm Yi0+c2RsLmVuYWJsZSwgYXRvaShwMiArIDEpKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYg KCFzdHJjbXAocCwgIm9wZW5nbCIpKSB7CisgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RlZmJv b2xfc2V0KCZ2ZmItPnNkbC5vcGVuZ2wsIGF0b2kocDIgKyAxKSk7CisgICAgICAgICAgICAgICAg fSBlbHNlIGlmICghc3RyY21wKHAsICJkaXNwbGF5IikpIHsKKyAgICAgICAgICAgICAgICAgICAg ZnJlZSh2ZmItPnNkbC5kaXNwbGF5KTsKKyAgICAgICAgICAgICAgICAgICAgdmZiLT5zZGwuZGlz cGxheSA9IHN0cmR1cChwMiArIDEpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNt cChwLCAieGF1dGhvcml0eSIpKSB7CisgICAgICAgICAgICAgICAgICAgIGZyZWUodmZiLT5zZGwu eGF1dGhvcml0eSk7CisgICAgICAgICAgICAgICAgICAgIHZmYi0+c2RsLnhhdXRob3JpdHkgPSBz dHJkdXAocDIgKyAxKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IHdoaWxlICgo cCA9IHN0cnRvayhOVUxMLCAiLCIpKSAhPSBOVUxMKTsKKworc2tpcF92ZmI6CisgICAgICAgICAg ICBmcmVlKGJ1ZjIpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCF4bHVfY2ZnX2dldF9s b25nIChjb25maWcsICJwY2lfbXNpdHJhbnNsYXRlIiwgJmwsIDApKQorICAgICAgICBwY2lfbXNp dHJhbnNsYXRlID0gbDsKKworICAgIGlmICgheGx1X2NmZ19nZXRfbG9uZyAoY29uZmlnLCAicGNp X3Bvd2VyX21nbXQiLCAmbCwgMCkpCisgICAgICAgIHBjaV9wb3dlcl9tZ210ID0gbDsKKworICAg IGlmICgheGx1X2NmZ19nZXRfbG9uZyAoY29uZmlnLCAicGNpX3Blcm1pc3NpdmUiLCAmbCwgMCkp CisgICAgICAgIHBjaV9wZXJtaXNzaXZlID0gbDsKKworICAgIGlmICgheGx1X2NmZ19nZXRfbG9u ZyAoY29uZmlnLCAicGNpX3NlaXplIiwgJmwsIDApKQorICAgICAgICBwY2lfc2VpemUgPSBsOwor CisgICAgLyogVG8gYmUgcmV3b3JrZWQgKGF1dG9tYXRpY2FsbHkgZW5hYmxlZCkgb25jZSB0aGUg YXV0byBiYWxsb29uaW5nCisgICAgICogYWZ0ZXIgZ3Vlc3Qgc3RhcnRzIGlzIGRvbmUgKHdpdGgg UENJIGRldmljZXMgcGFzc2VkIGluKS4gKi8KKyAgICBpZiAoY19pbmZvLT50eXBlID09IExJQlhM X0RPTUFJTl9UWVBFX1BWKSB7CisgICAgICAgIHhsdV9jZmdfZ2V0X2RlZmJvb2woY29uZmlnLCAi ZTgyMF9ob3N0IiwgJmJfaW5mby0+dS5wdi5lODIwX2hvc3QsIDApOworICAgIH0KKworICAgIGlm ICgheGx1X2NmZ19nZXRfc3RyaW5nKGNvbmZpZywgInJkbSIsICZidWYsIDApKSB7CisgICAgICAg IGxpYnhsX3JkbV9yZXNlcnZlIHJkbTsKKyAgICAgICAgaWYgKCF4bHVfcmRtX3BhcnNlKGNvbmZp ZywgJnJkbSwgYnVmKSkgeworICAgICAgICAgICAgYl9pbmZvLT51Lmh2bS5yZG0uc3RyYXRlZ3kg PSByZG0uc3RyYXRlZ3k7CisgICAgICAgICAgICBiX2luZm8tPnUuaHZtLnJkbS5wb2xpY3kgPSBy ZG0ucG9saWN5OworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCF4bHVfY2ZnX2dldF9saXN0 IChjb25maWcsICJwY2kiLCAmcGNpcywgMCwgMCkpIHsKKyAgICAgICAgZF9jb25maWctPm51bV9w Y2lkZXZzID0gMDsKKyAgICAgICAgZF9jb25maWctPnBjaWRldnMgPSBOVUxMOworICAgICAgICBm b3IoaSA9IDA7IChidWYgPSB4bHVfY2ZnX2dldF9saXN0aXRlbSAocGNpcywgaSkpICE9IE5VTEw7 IGkrKykgeworICAgICAgICAgICAgbGlieGxfZGV2aWNlX3BjaSAqcGNpZGV2OworCisgICAgICAg ICAgICBwY2lkZXYgPSBBUlJBWV9FWFRFTkRfSU5JVF9OT0RFVklEKGRfY29uZmlnLT5wY2lkZXZz LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkX2NvbmZp Zy0+bnVtX3BjaWRldnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGxpYnhsX2RldmljZV9wY2lfaW5pdCk7CisgICAgICAgICAgICBwY2lkZXYtPm1zaXRy YW5zbGF0ZSA9IHBjaV9tc2l0cmFuc2xhdGU7CisgICAgICAgICAgICBwY2lkZXYtPnBvd2VyX21n bXQgPSBwY2lfcG93ZXJfbWdtdDsKKyAgICAgICAgICAgIHBjaWRldi0+cGVybWlzc2l2ZSA9IHBj aV9wZXJtaXNzaXZlOworICAgICAgICAgICAgcGNpZGV2LT5zZWl6ZSA9IHBjaV9zZWl6ZTsKKyAg ICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBMaWtlIG90aGVyIHBjaSBvcHRpb24sIHRoZSBw ZXItZGV2aWNlIHBvbGljeSBhbHdheXMgZm9sbG93cworICAgICAgICAgICAgICogdGhlIGdsb2Jh bCBwb2xpY3kgYnkgZGVmYXVsdC4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgcGNpZGV2 LT5yZG1fcG9saWN5ID0gYl9pbmZvLT51Lmh2bS5yZG0ucG9saWN5OworICAgICAgICAgICAgZSA9 IHhsdV9wY2lfcGFyc2VfYmRmKGNvbmZpZywgcGNpZGV2LCBidWYpOworICAgICAgICAgICAgaWYg KGUpIHsKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwKKyAgICAgICAgICAgICAgICAg ICAgICAgICJ1bmFibGUgdG8gcGFyc2UgUENJIEJERiBgJXMnIGZvciBwYXNzdGhyb3VnaFxuIiwK KyAgICAgICAgICAgICAgICAgICAgICAgIGJ1Zik7CisgICAgICAgICAgICAgICAgZXhpdCgtZSk7 CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGRfY29uZmlnLT5udW1fcGNp ZGV2cyAmJiBjX2luZm8tPnR5cGUgPT0gTElCWExfRE9NQUlOX1RZUEVfUFYpCisgICAgICAgICAg ICBsaWJ4bF9kZWZib29sX3NldCgmYl9pbmZvLT51LnB2LmU4MjBfaG9zdCwgdHJ1ZSk7CisgICAg fQorCisgICAgaWYgKCF4bHVfY2ZnX2dldF9saXN0IChjb25maWcsICJkdGRldiIsICZkdGRldnMs IDAsIDApKSB7CisgICAgICAgIGRfY29uZmlnLT5udW1fZHRkZXZzID0gMDsKKyAgICAgICAgZF9j b25maWctPmR0ZGV2cyA9IE5VTEw7CisgICAgICAgIGZvciAoaSA9IDA7IChidWYgPSB4bHVfY2Zn X2dldF9saXN0aXRlbShkdGRldnMsIGkpKSAhPSBOVUxMOyBpKyspIHsKKyAgICAgICAgICAgIGxp YnhsX2RldmljZV9kdGRldiAqZHRkZXY7CisKKyAgICAgICAgICAgIGR0ZGV2ID0gQVJSQVlfRVhU RU5EX0lOSVRfTk9ERVZJRChkX2NvbmZpZy0+ZHRkZXZzLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGRfY29uZmlnLT5udW1fZHRkZXZzLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV9kdGRldl9p bml0KTsKKworICAgICAgICAgICAgZHRkZXYtPnBhdGggPSBzdHJkdXAoYnVmKTsKKyAgICAgICAg ICAgIGlmIChkdGRldi0+cGF0aCA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgZnByaW50Zihz dGRlcnIsICJ1bmFibGUgdG8gZHVwbGljYXRlIHN0cmluZyBmb3IgZHRkZXZzXG4iKTsKKyAgICAg ICAgICAgICAgICBleGl0KC0xKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKwor ICAgIGlmICgheGx1X2NmZ19nZXRfbGlzdChjb25maWcsICJ1c2JjdHJsIiwgJnVzYmN0cmxzLCAw LCAwKSkgeworICAgICAgICBkX2NvbmZpZy0+bnVtX3VzYmN0cmxzID0gMDsKKyAgICAgICAgZF9j b25maWctPnVzYmN0cmxzID0gTlVMTDsKKyAgICAgICAgd2hpbGUgKChidWYgPSB4bHVfY2ZnX2dl dF9saXN0aXRlbSh1c2JjdHJscywgZF9jb25maWctPm51bV91c2JjdHJscykpCisgICAgICAgICAg ICAgICAhPSBOVUxMKSB7CisgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdXNiY3RybCAqdXNiY3Ry bDsKKyAgICAgICAgICAgIGNoYXIgKmJ1ZjIgPSBzdHJkdXAoYnVmKTsKKyAgICAgICAgICAgIGNo YXIgKnA7CisKKyAgICAgICAgICAgIHVzYmN0cmwgPSBBUlJBWV9FWFRFTkRfSU5JVChkX2NvbmZp Zy0+dXNiY3RybHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZF9j b25maWctPm51bV91c2JjdHJscywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBsaWJ4bF9kZXZpY2VfdXNiY3RybF9pbml0KTsKKyAgICAgICAgICAgIHAgPSBzdHJ0b2so YnVmMiwgIiwiKTsKKyAgICAgICAgICAgIGlmICghcCkKKyAgICAgICAgICAgICAgICBnb3RvIHNr aXBfdXNiY3RybDsKKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICB3aGlsZSAoKnAg PT0gJyAnKQorICAgICAgICAgICAgICAgICAgICBwKys7CisgICAgICAgICAgICAgICAgaWYgKHBh cnNlX3VzYmN0cmxfY29uZmlnKHVzYmN0cmwsIHApKQorICAgICAgICAgICAgICAgICAgICBleGl0 KDEpOworICAgICAgICAgICAgfSB3aGlsZSAoKHAgPSBzdHJ0b2soTlVMTCwgIiwiKSkgIT0gTlVM TCk7Citza2lwX3VzYmN0cmw6CisgICAgICAgICAgICBmcmVlKGJ1ZjIpOworICAgICAgICB9Cisg ICAgfQorCisgICAgaWYgKCF4bHVfY2ZnX2dldF9saXN0KGNvbmZpZywgInVzYmRldiIsICZ1c2Jk ZXZzLCAwLCAwKSkgeworICAgICAgICBkX2NvbmZpZy0+bnVtX3VzYmRldnMgPSAwOworICAgICAg ICBkX2NvbmZpZy0+dXNiZGV2cyA9IE5VTEw7CisgICAgICAgIHdoaWxlICgoYnVmID0geGx1X2Nm Z19nZXRfbGlzdGl0ZW0odXNiZGV2cywgZF9jb25maWctPm51bV91c2JkZXZzKSkKKyAgICAgICAg ICAgICAgICE9IE5VTEwpIHsKKyAgICAgICAgICAgIGxpYnhsX2RldmljZV91c2JkZXYgKnVzYmRl djsKKyAgICAgICAgICAgIGNoYXIgKmJ1ZjIgPSBzdHJkdXAoYnVmKTsKKyAgICAgICAgICAgIGNo YXIgKnA7CisKKyAgICAgICAgICAgIHVzYmRldiA9IEFSUkFZX0VYVEVORF9JTklUX05PREVWSUQo ZF9jb25maWctPnVzYmRldnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGRfY29uZmlnLT5udW1fdXNiZGV2cywKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX3VzYmRldl9pbml0KTsKKyAgICAg ICAgICAgIHAgPSBzdHJ0b2soYnVmMiwgIiwiKTsKKyAgICAgICAgICAgIGlmICghcCkKKyAgICAg ICAgICAgICAgICBnb3RvIHNraXBfdXNiZGV2OworICAgICAgICAgICAgZG8geworICAgICAgICAg ICAgICAgIHdoaWxlICgqcCA9PSAnICcpCisgICAgICAgICAgICAgICAgICAgIHArKzsKKyAgICAg ICAgICAgICAgICBpZiAocGFyc2VfdXNiZGV2X2NvbmZpZyh1c2JkZXYsIHApKQorICAgICAgICAg ICAgICAgICAgICBleGl0KDEpOworICAgICAgICAgICAgfSB3aGlsZSAoKHAgPSBzdHJ0b2soTlVM TCwgIiwiKSkgIT0gTlVMTCk7Citza2lwX3VzYmRldjoKKyAgICAgICAgICAgIGZyZWUoYnVmMik7 CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzd2l0Y2ggKHhsdV9jZmdfZ2V0X2xpc3QoY29uZmln LCAiY3B1aWQiLCAmY3B1aWRzLCAwLCAxKSkgeworICAgIGNhc2UgMDoKKyAgICAgICAgeworICAg ICAgICAgICAgY29uc3QgY2hhciAqZXJyc3RyOworCisgICAgICAgICAgICBmb3IgKGkgPSAwOyAo YnVmID0geGx1X2NmZ19nZXRfbGlzdGl0ZW0oY3B1aWRzLCBpKSkgIT0gTlVMTDsgaSsrKSB7Cisg ICAgICAgICAgICAgICAgZSA9IGxpYnhsX2NwdWlkX3BhcnNlX2NvbmZpZ194ZW5kKCZiX2luZm8t PmNwdWlkLCBidWYpOworICAgICAgICAgICAgICAgIHN3aXRjaCAoZSkgeworICAgICAgICAgICAg ICAgIGNhc2UgMDogY29udGludWU7CisgICAgICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAg ICAgICAgICAgICBlcnJzdHIgPSAiaWxsZWdhbCBsZWFmIG51bWJlciI7CisgICAgICAgICAgICAg ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICAg ICAgZXJyc3RyID0gImlsbGVnYWwgc3VibGVhZiBudW1iZXIiOworICAgICAgICAgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgICAgICAgIGVy cnN0ciA9ICJtaXNzaW5nIGNvbG9uIjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgICAgICAgICBlcnJzdHIgPSAiaW52YWxp ZCByZWdpc3RlciBuYW1lIChtdXN0IGJlIGVbYWJjZF14KSI7CisgICAgICAgICAgICAgICAgICAg IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgNToKKyAgICAgICAgICAgICAgICAgICAgZXJy c3RyID0gInBvbGljeSBzdHJpbmcgbXVzdCBiZSBleGFjdGx5IDMyIGNoYXJhY3RlcnMgbG9uZyI7 CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6Cisg ICAgICAgICAgICAgICAgICAgIGVycnN0ciA9ICJ1bmtub3duIGVycm9yIjsKKyAgICAgICAgICAg ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZwcmlu dGYoc3RkZXJyLCAid2hpbGUgcGFyc2luZyBDUFVJRCBsaW5lOiBcIiVzXCI6XG4iLCBidWYpOwor ICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiICBlcnJvciAjJWk6ICVzXG4iLCBlLCBl cnJzdHIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNh c2UgRUlOVkFMOiAgICAvKiBjb25maWcgb3B0aW9uIGlzIG5vdCBhIGxpc3QsIHBhcnNlIGFzIGEg c3RyaW5nICovCisgICAgICAgIGlmICgheGx1X2NmZ19nZXRfc3RyaW5nKGNvbmZpZywgImNwdWlk IiwgJmJ1ZiwgMCkpIHsKKyAgICAgICAgICAgIGNoYXIgKmJ1ZjIsICpwLCAqc3RydG9rX3B0ciA9 IE5VTEw7CisgICAgICAgICAgICBjb25zdCBjaGFyICplcnJzdHI7CisKKyAgICAgICAgICAgIGJ1 ZjIgPSBzdHJkdXAoYnVmKTsKKyAgICAgICAgICAgIHAgPSBzdHJ0b2tfcihidWYyLCAiLCIsICZz dHJ0b2tfcHRyKTsKKyAgICAgICAgICAgIGlmIChwID09IE5VTEwpIHsKKyAgICAgICAgICAgICAg ICBmcmVlKGJ1ZjIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg ICAgICAgICAgaWYgKHN0cmNtcChwLCAiaG9zdCIpKSB7CisgICAgICAgICAgICAgICAgZnByaW50 ZihzdGRlcnIsICJ3aGlsZSBwYXJzaW5nIENQVUlEIHN0cmluZzogXCIlc1wiOlxuIiwgYnVmKTsK KyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAgZXJyb3I6IGZpcnN0IHdvcmQgbXVz dCBiZSBcImhvc3RcIlxuIik7CisgICAgICAgICAgICAgICAgZnJlZShidWYyKTsKKyAgICAgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAocCA9IHN0cnRv a19yKE5VTEwsICIsIiwgJnN0cnRva19wdHIpOyBwICE9IE5VTEw7CisgICAgICAgICAgICAgICAg IHAgPSBzdHJ0b2tfcihOVUxMLCAiLCIsICZzdHJ0b2tfcHRyKSkgeworICAgICAgICAgICAgICAg IGUgPSBsaWJ4bF9jcHVpZF9wYXJzZV9jb25maWcoJmJfaW5mby0+Y3B1aWQsIHApOworICAgICAg ICAgICAgICAgIHN3aXRjaCAoZSkgeworICAgICAgICAgICAgICAgIGNhc2UgMDogY29udGludWU7 CisgICAgICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgICAgICAgICBlcnJzdHIgPSAi bWlzc2luZyBcIj1cIiBpbiBrZXk9dmFsdWUiOworICAgICAgICAgICAgICAgICAgICBicmVhazsK KyAgICAgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgICAgIGVycnN0ciA9ICJ1 bmtub3duIENQVUlEIGZsYWcgbmFtZSI7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg ICAgICAgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgICAgICAgICAgZXJyc3RyID0gImlsbGVn YWwgQ1BVSUQgdmFsdWUgKG11c3QgYmU6IFswfDF8eHxrfHNdKSI7CisgICAgICAgICAgICAgICAg ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAg IGVycnN0ciA9ICJ1bmtub3duIGVycm9yIjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAid2hpbGUg cGFyc2luZyBDUFVJRCBmbGFnOiBcIiVzXCI6XG4iLCBwKTsKKyAgICAgICAgICAgICAgICBmcHJp bnRmKHN0ZGVyciwgIiAgZXJyb3IgIyVpOiAlc1xuIiwgZSwgZXJyc3RyKTsKKyAgICAgICAgICAg IH0KKyAgICAgICAgICAgIGZyZWUoYnVmMik7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7Cisg ICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgLyogcGFyc2UgZGV2aWNl IG1vZGVsIGFyZ3VtZW50cywgdGhpcyB3b3JrcyBmb3IgcHYsIGh2bSBhbmQgc3R1YmRvbSAqLwor ICAgIGlmICgheGx1X2NmZ19nZXRfc3RyaW5nIChjb25maWcsICJkZXZpY2VfbW9kZWwiLCAmYnVm LCAwKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwKKyAgICAgICAgICAgICAgICAiV0FSTklO RzogaWdub3JpbmcgZGV2aWNlX21vZGVsIGRpcmVjdGl2ZS5cbiIKKyAgICAgICAgICAgICAgICAi V0FSTklORzogVXNlIFwiZGV2aWNlX21vZGVsX292ZXJyaWRlXCIgaW5zdGVhZCBpZiB5b3UiCisg ICAgICAgICAgICAgICAgIiByZWFsbHkgd2FudCBhIG5vbi1kZWZhdWx0IGRldmljZV9tb2RlbFxu Iik7CisgICAgICAgIGlmIChzdHJzdHIoYnVmLCAic3R1YmRvbS1kbSIpKSB7CisgICAgICAgICAg ICBpZiAoY19pbmZvLT50eXBlID09IExJQlhMX0RPTUFJTl9UWVBFX0hWTSkKKyAgICAgICAgICAg ICAgICBmcHJpbnRmKHN0ZGVyciwgIldBUk5JTkc6IE9yIHVzZSIKKyAgICAgICAgICAgICAgICAg ICAgICAgICIgXCJkZXZpY2VfbW9kZWxfc3R1YmRvbWFpbl9vdmVycmlkZVwiIGlmIHlvdSAiCisg ICAgICAgICAgICAgICAgICAgICAgICAiIHdhbnQgdG8gZW5hYmxlIHN0dWJkb21haW5zXG4iKTsK KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIldBUk5J Tkc6IGlnbm9yaW5nIgorICAgICAgICAgICAgICAgICAgICAgICAgIiBcImRldmljZV9tb2RlbF9z dHViZG9tYWluX292ZXJyaWRlXCIgZGlyZWN0aXZlIgorICAgICAgICAgICAgICAgICAgICAgICAg IiBmb3IgcHYgZ3Vlc3RcbiIpOworICAgICAgICB9CisgICAgfQorCisKKyAgICB4bHVfY2ZnX3Jl cGxhY2Vfc3RyaW5nIChjb25maWcsICJkZXZpY2VfbW9kZWxfb3ZlcnJpZGUiLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZiX2luZm8tPmRldmljZV9tb2RlbCwgMCk7CisgICAgaWYgKCF4 bHVfY2ZnX2dldF9zdHJpbmcgKGNvbmZpZywgImRldmljZV9tb2RlbF92ZXJzaW9uIiwgJmJ1Ziwg MCkpIHsKKyAgICAgICAgaWYgKCFzdHJjbXAoYnVmLCAicWVtdS14ZW4tdHJhZGl0aW9uYWwiKSkg eworICAgICAgICAgICAgYl9pbmZvLT5kZXZpY2VfbW9kZWxfdmVyc2lvbgorICAgICAgICAgICAg ICAgID0gTElCWExfREVWSUNFX01PREVMX1ZFUlNJT05fUUVNVV9YRU5fVFJBRElUSU9OQUw7Cisg ICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChidWYsICJxZW11LXhlbiIpKSB7CisgICAgICAgICAg ICBiX2luZm8tPmRldmljZV9tb2RlbF92ZXJzaW9uCisgICAgICAgICAgICAgICAgPSBMSUJYTF9E RVZJQ0VfTU9ERUxfVkVSU0lPTl9RRU1VX1hFTjsKKyAgICAgICAgfSBlbHNlIGlmICghc3RyY21w KGJ1ZiwgIm5vbmUiKSkgeworICAgICAgICAgICAgYl9pbmZvLT5kZXZpY2VfbW9kZWxfdmVyc2lv biA9IExJQlhMX0RFVklDRV9NT0RFTF9WRVJTSU9OX05PTkU7CisgICAgICAgIH0gZWxzZSB7Cisg ICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwKKyAgICAgICAgICAgICAgICAgICAgIlVua25vd24g ZGV2aWNlX21vZGVsX3ZlcnNpb24gXCIlc1wiIHNwZWNpZmllZFxuIiwgYnVmKTsKKyAgICAgICAg ICAgIGV4aXQoMSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGJfaW5mby0+ZGV2aWNlX21v ZGVsKQorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIldBUk5JTkc6IGRldmljZSBtb2RlbCBvdmVy cmlkZSBnaXZlbiB3aXRob3V0IHNwZWNpZmljIERNIHZlcnNpb25cbiIpOworICAgIHhsdV9jZmdf Z2V0X2RlZmJvb2wgKGNvbmZpZywgImRldmljZV9tb2RlbF9zdHViZG9tYWluX292ZXJyaWRlIiwK KyAgICAgICAgICAgICAgICAgICAgICAgICAmYl9pbmZvLT5kZXZpY2VfbW9kZWxfc3R1YmRvbWFp biwgMCk7CisKKyAgICBpZiAoIXhsdV9jZmdfZ2V0X3N0cmluZyAoY29uZmlnLCAiZGV2aWNlX21v ZGVsX3N0dWJkb21haW5fc2VjbGFiZWwiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm YnVmLCAwKSkKKyAgICAgICAgeGx1X2NmZ19yZXBsYWNlX3N0cmluZyhjb25maWcsICJkZXZpY2Vf bW9kZWxfc3R1YmRvbWFpbl9zZWNsYWJlbCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJmJfaW5mby0+ZGV2aWNlX21vZGVsX3NzaWRfbGFiZWwsIDApOworCisgICAgeGx1X2NmZ19y ZXBsYWNlX3N0cmluZyhjb25maWcsICJkZXZpY2VfbW9kZWxfdXNlciIsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAmYl9pbmZvLT5kZXZpY2VfbW9kZWxfdXNlciwgMCk7CisKKyNkZWZpbmUg cGFyc2VfZXh0cmFfYXJncyh0eXBlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorICAgIGUgPSB4bHVfY2ZnX2dldF9saXN0X2FzX3N0cmluZ19saXN0KGNvbmZp ZywgImRldmljZV9tb2RlbF9hcmdzIiN0eXBlLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAmYl9pbmZvLT5leHRyYSMjdHlwZSwgMCk7ICAgICAgICAgICAgXAorICAgIGlm IChlICYmIGUgIT0gRVNSQ0gpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCisgICAgICAgIGZwcmludGYoc3RkZXJyLCJ4bDogVW5hYmxlIHRvIHBhcnNl IGRldmljZV9tb2RlbF9hcmdzIiN0eXBlIi5cbiIpO1wKKyAgICAgICAgZXhpdCgtRVJST1JfRkFJ TCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg IH0KKworICAgIC8qIHBhcnNlIGV4dHJhIGFyZ3MgZm9yIHFlbXUsIGNvbW1vbiB0byBib3RoIHB2 LCBodm0gKi8KKyAgICBwYXJzZV9leHRyYV9hcmdzKCk7CisKKyAgICAvKiBwYXJzZSBleHRyYSBh cmdzIGRlZGljYXRlZCB0byBwdiAqLworICAgIHBhcnNlX2V4dHJhX2FyZ3MoX3B2KTsKKworICAg IC8qIHBhcnNlIGV4dHJhIGFyZ3MgZGVkaWNhdGVkIHRvIGh2bSAqLworICAgIHBhcnNlX2V4dHJh X2FyZ3MoX2h2bSk7CisKKyN1bmRlZiBwYXJzZV9leHRyYV9hcmdzCisKKyAgICAvKiBJZiB3ZSd2 ZSBhbHJlYWR5IGdvdCB2ZmI9W10gZm9yIFBWIGd1ZXN0IHRoZW4gaWdub3JlIHRvcCBsZXZlbAor ICAgICAqIFZOQyBjb25maWcuICovCisgICAgaWYgKGNfaW5mby0+dHlwZSA9PSBMSUJYTF9ET01B SU5fVFlQRV9QViAmJiAhZF9jb25maWctPm51bV92ZmJzKSB7CisgICAgICAgIGxvbmcgdm5jX2Vu YWJsZWQgPSAwOworCisgICAgICAgIGlmICgheGx1X2NmZ19nZXRfbG9uZyAoY29uZmlnLCAidm5j IiwgJmwsIDApKQorICAgICAgICAgICAgdm5jX2VuYWJsZWQgPSBsOworCisgICAgICAgIGlmICh2 bmNfZW5hYmxlZCkgeworICAgICAgICAgICAgbGlieGxfZGV2aWNlX3ZmYiAqdmZiOworICAgICAg ICAgICAgbGlieGxfZGV2aWNlX3ZrYiAqdmtiOworCisgICAgICAgICAgICB2ZmIgPSBBUlJBWV9F WFRFTkRfSU5JVChkX2NvbmZpZy0+dmZicywgZF9jb25maWctPm51bV92ZmJzLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX3ZmYl9pbml0KTsKKworICAg ICAgICAgICAgdmtiID0gQVJSQVlfRVhURU5EX0lOSVQoZF9jb25maWctPnZrYnMsIGRfY29uZmln LT5udW1fdmticywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2Rl dmljZV92a2JfaW5pdCk7CisKKyAgICAgICAgICAgIHBhcnNlX3RvcF9sZXZlbF92bmNfb3B0aW9u cyhjb25maWcsICZ2ZmItPnZuYyk7CisgICAgICAgICAgICBwYXJzZV90b3BfbGV2ZWxfc2RsX29w dGlvbnMoY29uZmlnLCAmdmZiLT5zZGwpOworICAgICAgICAgICAgeGx1X2NmZ19yZXBsYWNlX3N0 cmluZyAoY29uZmlnLCAia2V5bWFwIiwgJnZmYi0+a2V5bWFwLCAwKTsKKyAgICAgICAgfQorICAg IH0gZWxzZSB7CisgICAgICAgIHBhcnNlX3RvcF9sZXZlbF92bmNfb3B0aW9ucyhjb25maWcsICZi X2luZm8tPnUuaHZtLnZuYyk7CisgICAgICAgIHBhcnNlX3RvcF9sZXZlbF9zZGxfb3B0aW9ucyhj b25maWcsICZiX2luZm8tPnUuaHZtLnNkbCk7CisgICAgfQorCisgICAgaWYgKGNfaW5mby0+dHlw ZSA9PSBMSUJYTF9ET01BSU5fVFlQRV9IVk0pIHsKKyAgICAgICAgaWYgKCF4bHVfY2ZnX2dldF9z dHJpbmcgKGNvbmZpZywgInZnYSIsICZidWYsIDApKSB7CisgICAgICAgICAgICBpZiAoIXN0cmNt cChidWYsICJzdGR2Z2EiKSkgeworICAgICAgICAgICAgICAgIGJfaW5mby0+dS5odm0udmdhLmtp bmQgPSBMSUJYTF9WR0FfSU5URVJGQUNFX1RZUEVfU1REOworICAgICAgICAgICAgfSBlbHNlIGlm ICghc3RyY21wKGJ1ZiwgImNpcnJ1cyIpKSB7CisgICAgICAgICAgICAgICAgYl9pbmZvLT51Lmh2 bS52Z2Eua2luZCA9IExJQlhMX1ZHQV9JTlRFUkZBQ0VfVFlQRV9DSVJSVVM7CisgICAgICAgICAg ICB9IGVsc2UgaWYgKCFzdHJjbXAoYnVmLCAibm9uZSIpKSB7CisgICAgICAgICAgICAgICAgYl9p bmZvLT51Lmh2bS52Z2Eua2luZCA9IExJQlhMX1ZHQV9JTlRFUkZBQ0VfVFlQRV9OT05FOworICAg ICAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKGJ1ZiwgInF4bCIpKSB7CisgICAgICAgICAgICAg ICAgYl9pbmZvLT51Lmh2bS52Z2Eua2luZCA9IExJQlhMX1ZHQV9JTlRFUkZBQ0VfVFlQRV9RWEw7 CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAi VW5rbm93biB2Z2EgXCIlc1wiIHNwZWNpZmllZFxuIiwgYnVmKTsKKyAgICAgICAgICAgICAgICBl eGl0KDEpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKCF4bHVfY2ZnX2dldF9s b25nKGNvbmZpZywgInN0ZHZnYSIsICZsLCAwKSkKKyAgICAgICAgICAgIGJfaW5mby0+dS5odm0u dmdhLmtpbmQgPSBsID8gTElCWExfVkdBX0lOVEVSRkFDRV9UWVBFX1NURCA6CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlhMX1ZHQV9JTlRFUkZBQ0VfVFlQRV9D SVJSVVM7CisKKyAgICAgICAgaWYgKCF4bHVfY2ZnX2dldF9zdHJpbmcoY29uZmlnLCAiaGR0eXBl IiwgJmJ1ZiwgMCkgJiYKKyAgICAgICAgICAgIGxpYnhsX2hkdHlwZV9mcm9tX3N0cmluZyhidWYs ICZiX2luZm8tPnUuaHZtLmhkdHlwZSkpIHsKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVy ciwgIkVSUk9SOiBpbnZhbGlkIHZhbHVlIFwiJXNcIiBmb3IgXCJoZHR5cGVcIlxuIiwKKyAgICAg ICAgICAgICAgICAgICAgYnVmKTsKKyAgICAgICAgICAgICAgICBleGl0ICgxKTsKKyAgICAgICAg fQorCisgICAgICAgIHhsdV9jZmdfcmVwbGFjZV9zdHJpbmcgKGNvbmZpZywgImtleW1hcCIsICZi X2luZm8tPnUuaHZtLmtleW1hcCwgMCk7CisgICAgICAgIHhsdV9jZmdfZ2V0X2RlZmJvb2wgKGNv bmZpZywgInNwaWNlIiwgJmJfaW5mby0+dS5odm0uc3BpY2UuZW5hYmxlLCAwKTsKKyAgICAgICAg aWYgKCF4bHVfY2ZnX2dldF9sb25nIChjb25maWcsICJzcGljZXBvcnQiLCAmbCwgMCkpCisgICAg ICAgICAgICBiX2luZm8tPnUuaHZtLnNwaWNlLnBvcnQgPSBsOworICAgICAgICBpZiAoIXhsdV9j ZmdfZ2V0X2xvbmcgKGNvbmZpZywgInNwaWNldGxzX3BvcnQiLCAmbCwgMCkpCisgICAgICAgICAg ICBiX2luZm8tPnUuaHZtLnNwaWNlLnRsc19wb3J0ID0gbDsKKyAgICAgICAgeGx1X2NmZ19yZXBs YWNlX3N0cmluZyAoY29uZmlnLCAic3BpY2Vob3N0IiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJmJfaW5mby0+dS5odm0uc3BpY2UuaG9zdCwgMCk7CisgICAgICAgIHhsdV9jZmdf Z2V0X2RlZmJvb2woY29uZmlnLCAic3BpY2VkaXNhYmxlX3RpY2tldGluZyIsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJmJfaW5mby0+dS5odm0uc3BpY2UuZGlzYWJsZV90aWNrZXRpbmcs IDApOworICAgICAgICB4bHVfY2ZnX3JlcGxhY2Vfc3RyaW5nIChjb25maWcsICJzcGljZXBhc3N3 ZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZiX2luZm8tPnUuaHZtLnNwaWNl LnBhc3N3ZCwgMCk7CisgICAgICAgIHhsdV9jZmdfZ2V0X2RlZmJvb2woY29uZmlnLCAic3BpY2Vh Z2VudF9tb3VzZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJfaW5mby0+dS5odm0u c3BpY2UuYWdlbnRfbW91c2UsIDApOworICAgICAgICB4bHVfY2ZnX2dldF9kZWZib29sKGNvbmZp ZywgInNwaWNldmRhZ2VudCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJfaW5mby0+ dS5odm0uc3BpY2UudmRhZ2VudCwgMCk7CisgICAgICAgIHhsdV9jZmdfZ2V0X2RlZmJvb2woY29u ZmlnLCAic3BpY2VfY2xpcGJvYXJkX3NoYXJpbmciLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICZiX2luZm8tPnUuaHZtLnNwaWNlLmNsaXBib2FyZF9zaGFyaW5nLCAwKTsKKyAgICAgICAg aWYgKCF4bHVfY2ZnX2dldF9sb25nIChjb25maWcsICJzcGljZXVzYnJlZGlyZWN0aW9uIiwgJmws IDApKQorICAgICAgICAgICAgYl9pbmZvLT51Lmh2bS5zcGljZS51c2JyZWRpcmVjdGlvbiA9IGw7 CisgICAgICAgIHhsdV9jZmdfcmVwbGFjZV9zdHJpbmcgKGNvbmZpZywgInNwaWNlX2ltYWdlX2Nv bXByZXNzaW9uIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJfaW5mby0+dS5o dm0uc3BpY2UuaW1hZ2VfY29tcHJlc3Npb24sIDApOworICAgICAgICB4bHVfY2ZnX3JlcGxhY2Vf c3RyaW5nIChjb25maWcsICJzcGljZV9zdHJlYW1pbmdfdmlkZW8iLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAmYl9pbmZvLT51Lmh2bS5zcGljZS5zdHJlYW1pbmdfdmlkZW8sIDAp OworICAgICAgICB4bHVfY2ZnX2dldF9kZWZib29sKGNvbmZpZywgIm5vZ3JhcGhpYyIsICZiX2lu Zm8tPnUuaHZtLm5vZ3JhcGhpYywgMCk7CisgICAgICAgIGlmICgheGx1X2NmZ19nZXRfbG9uZyhj b25maWcsICJnZnhfcGFzc3RocnUiLCAmbCwgMSkpIHsKKyAgICAgICAgICAgIGxpYnhsX2RlZmJv b2xfc2V0KCZiX2luZm8tPnUuaHZtLmdmeF9wYXNzdGhydSwgbCk7CisgICAgICAgIH0gZWxzZSBp ZiAoIXhsdV9jZmdfZ2V0X3N0cmluZyhjb25maWcsICJnZnhfcGFzc3RocnUiLCAmYnVmLCAwKSkg eworICAgICAgICAgICAgaWYgKGxpYnhsX2dmeF9wYXNzdGhydV9raW5kX2Zyb21fc3RyaW5nKGJ1 ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYl9pbmZvLT51Lmh2 bS5nZnhfcGFzc3RocnVfa2luZCkpIHsKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwK KyAgICAgICAgICAgICAgICAgICAgICAgICJFUlJPUjogaW52YWxpZCB2YWx1ZSBcIiVzXCIgZm9y IFwiZ2Z4X3Bhc3N0aHJ1XCJcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBidWYpOworICAg ICAgICAgICAgICAgIGV4aXQgKDEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbGlieGxf ZGVmYm9vbF9zZXQoJmJfaW5mby0+dS5odm0uZ2Z4X3Bhc3N0aHJ1LCB0cnVlKTsKKyAgICAgICAg fQorICAgICAgICBzd2l0Y2ggKHhsdV9jZmdfZ2V0X2xpc3RfYXNfc3RyaW5nX2xpc3QoY29uZmln LCAic2VyaWFsIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICZiX2luZm8tPnUuaHZtLnNlcmlhbF9saXN0LAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgMSkpCisgICAgICAgIHsKKworICAgICAgICBjYXNlIDA6 IGJyZWFrOyAvKiBTdWNjZXNzICovCisgICAgICAgIGNhc2UgRVNSQ0g6IGJyZWFrOyAvKiBPcHRp b24gbm90IHByZXNlbnQgKi8KKyAgICAgICAgY2FzZSBFSU5WQUw6CisgICAgICAgICAgICAvKiBJ ZiBpdCdzIG5vdCBhIHZhbGlkIGxpc3QsIHRyeSByZWFkaW5nIGl0IGFzIGFuIGF0b20sCisgICAg ICAgICAgICAgKiBmYWxsaW5nIHRocm91Z2ggdG8gYW4gZXJyb3IgaWYgaXQgZmFpbHMgKi8KKyAg ICAgICAgICAgIGlmICgheGx1X2NmZ19yZXBsYWNlX3N0cmluZyhjb25maWcsICJzZXJpYWwiLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZiX2luZm8tPnUuaHZtLnNl cmlhbCwgMCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAvKiBGQUxMVEhS VSAqLworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsInhsOiBV bmFibGUgdG8gcGFyc2Ugc2VyaWFsLlxuIik7CisgICAgICAgICAgICBleGl0KC1FUlJPUl9GQUlM KTsKKyAgICAgICAgfQorICAgICAgICB4bHVfY2ZnX3JlcGxhY2Vfc3RyaW5nIChjb25maWcsICJi b290IiwgJmJfaW5mby0+dS5odm0uYm9vdCwgMCk7CisgICAgICAgIHhsdV9jZmdfZ2V0X2RlZmJv b2woY29uZmlnLCAidXNiIiwgJmJfaW5mby0+dS5odm0udXNiLCAwKTsKKyAgICAgICAgaWYgKCF4 bHVfY2ZnX2dldF9sb25nIChjb25maWcsICJ1c2J2ZXJzaW9uIiwgJmwsIDApKQorICAgICAgICAg ICAgYl9pbmZvLT51Lmh2bS51c2J2ZXJzaW9uID0gbDsKKyAgICAgICAgc3dpdGNoICh4bHVfY2Zn X2dldF9saXN0X2FzX3N0cmluZ19saXN0KGNvbmZpZywgInVzYmRldmljZSIsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYl9pbmZvLT51Lmh2bS51c2Jk ZXZpY2VfbGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDEpKQorICAgICAgICB7CisKKyAgICAgICAgY2FzZSAwOiBicmVhazsgLyogU3VjY2VzcyAq LworICAgICAgICBjYXNlIEVTUkNIOiBicmVhazsgLyogT3B0aW9uIG5vdCBwcmVzZW50ICovCisg ICAgICAgIGNhc2UgRUlOVkFMOgorICAgICAgICAgICAgLyogSWYgaXQncyBub3QgYSB2YWxpZCBs aXN0LCB0cnkgcmVhZGluZyBpdCBhcyBhbiBhdG9tLAorICAgICAgICAgICAgICogZmFsbGluZyB0 aHJvdWdoIHRvIGFuIGVycm9yIGlmIGl0IGZhaWxzICovCisgICAgICAgICAgICBpZiAoIXhsdV9j ZmdfcmVwbGFjZV9zdHJpbmcoY29uZmlnLCAidXNiZGV2aWNlIiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAmYl9pbmZvLT51Lmh2bS51c2JkZXZpY2UsIDApKQorICAg ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgLyogRkFMTFRIUlUgKi8KKyAgICAgICAg ZGVmYXVsdDoKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCJ4bDogVW5hYmxlIHRvIHBhcnNl IHVzYmRldmljZS5cbiIpOworICAgICAgICAgICAgZXhpdCgtRVJST1JfRkFJTCk7CisgICAgICAg IH0KKyAgICAgICAgeGx1X2NmZ19yZXBsYWNlX3N0cmluZyAoY29uZmlnLCAic291bmRodyIsICZi X2luZm8tPnUuaHZtLnNvdW5kaHcsIDApOworICAgICAgICB4bHVfY2ZnX2dldF9kZWZib29sKGNv bmZpZywgInhlbl9wbGF0Zm9ybV9wY2kiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICZi X2luZm8tPnUuaHZtLnhlbl9wbGF0Zm9ybV9wY2ksIDApOworCisgICAgICAgIGlmKGJfaW5mby0+ dS5odm0udm5jLmxpc3RlbgorICAgICAgICAgICAmJiBiX2luZm8tPnUuaHZtLnZuYy5kaXNwbGF5 CisgICAgICAgICAgICYmIHN0cmNocihiX2luZm8tPnUuaHZtLnZuYy5saXN0ZW4sICc6JykgIT0g TlVMTCkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsCisgICAgICAgICAgICAgICAgICAg ICJFUlJPUjogRGlzcGxheSBzcGVjaWZpZWQgYm90aCBpbiB2bmNsaXN0ZW4iCisgICAgICAgICAg ICAgICAgICAgICIgYW5kIHZuY2Rpc3BsYXkhXG4iKTsKKyAgICAgICAgICAgIGV4aXQgKDEpOwor CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXhsdV9jZmdfZ2V0X3N0cmluZyAoY29uZmlnLCAi dmVuZG9yX2RldmljZSIsICZidWYsIDApKSB7CisgICAgICAgICAgICBsaWJ4bF92ZW5kb3JfZGV2 aWNlIGQ7CisKKyAgICAgICAgICAgIGUgPSBsaWJ4bF92ZW5kb3JfZGV2aWNlX2Zyb21fc3RyaW5n KGJ1ZiwgJmQpOworICAgICAgICAgICAgaWYgKGUpIHsKKyAgICAgICAgICAgICAgICBmcHJpbnRm KHN0ZGVyciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJ4bDogdW5rbm93biB2ZW5kb3JfZGV2 aWNlICclcydcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBidWYpOworICAgICAgICAgICAg ICAgIGV4aXQoLUVSUk9SX0ZBSUwpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBiX2lu Zm8tPnUuaHZtLnZlbmRvcl9kZXZpY2UgPSBkOworICAgICAgICB9CisgICAgfQorCisgICAgaWYg KCF4bHVfY2ZnX2dldF9zdHJpbmcgKGNvbmZpZywgImdpY192ZXJzaW9uIiwgJmJ1ZiwgMSkpIHsK KyAgICAgICAgZSA9IGxpYnhsX2dpY192ZXJzaW9uX2Zyb21fc3RyaW5nKGJ1ZiwgJmJfaW5mby0+ YXJjaF9hcm0uZ2ljX3ZlcnNpb24pOworICAgICAgICBpZiAoZSkgeworICAgICAgICAgICAgZnBy aW50ZihzdGRlcnIsCisgICAgICAgICAgICAgICAgICAgICJVbmtub3duIGdpY192ZXJzaW9uIFwi JXNcIiBzcGVjaWZpZWRcbiIsIGJ1Zik7CisgICAgICAgICAgICBleGl0KC1FUlJPUl9GQUlMKTsK KyAgICAgICAgfQorICAgICB9CisKKyAgICB4bHVfY2ZnX2Rlc3Ryb3koY29uZmlnKTsKK30KKwor LyogUmV0dXJucyAtMSBvbiBmYWlsdXJlOyB0aGUgYW1vdW50IG9mIG1lbW9yeSBvbiBzdWNjZXNz LiAqLworaW50NjRfdCBwYXJzZV9tZW1fc2l6ZV9rYihjb25zdCBjaGFyICptZW0pCit7CisgICAg Y2hhciAqZW5kcHRyOworICAgIGludDY0X3Qga2J5dGVzOworCisgICAga2J5dGVzID0gc3RydG9s bChtZW0sICZlbmRwdHIsIDEwKTsKKworICAgIGlmIChzdHJsZW4oZW5kcHRyKSA+IDEpCisgICAg ICAgIHJldHVybiAtMTsKKworICAgIHN3aXRjaCAodG9sb3dlcigodWludDhfdCkqZW5kcHRyKSkg eworICAgIGNhc2UgJ3QnOgorICAgICAgICBrYnl0ZXMgPDw9IDEwOworICAgICAgICAvKiBmYWxs dGhyb3VnaCAqLworICAgIGNhc2UgJ2cnOgorICAgICAgICBrYnl0ZXMgPDw9IDEwOworICAgICAg ICAvKiBmYWxsdGhyb3VnaCAqLworICAgIGNhc2UgJ1wwJzoKKyAgICBjYXNlICdtJzoKKyAgICAg ICAga2J5dGVzIDw8PSAxMDsKKyAgICAgICAgLyogZmFsbHRocm91Z2ggKi8KKyAgICBjYXNlICdr JzoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAnYic6CisgICAgICAgIGtieXRlcyA+Pj0gMTA7 CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9 CisKKyAgICByZXR1cm4ga2J5dGVzOworfQorCisKK3ZvaWQgc3BsaXRfc3RyaW5nX2ludG9fc3Ry aW5nX2xpc3QoY29uc3QgY2hhciAqc3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBjaGFyICpkZWxpbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbGlieGxfc3RyaW5nX2xpc3QgKnBzbCkKK3sKKyAgICBjaGFyICpzLCAqc2F2ZXB0cjsKKyAg ICBjb25zdCBjaGFyICpwOworICAgIGxpYnhsX3N0cmluZ19saXN0IHNsOworCisgICAgaW50IGkg PSAwLCBuciA9IDA7CisKKyAgICBzID0gc3RyZHVwKHN0cik7CisgICAgaWYgKHMgPT0gTlVMTCkg eworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgdG8g c3BsaXQgc3RyaW5nXG4iKTsKKyAgICAgICAgZXhpdCgtMSk7CisgICAgfQorCisgICAgLyogQ291 bnQgbnVtYmVyIG9mIGVudHJpZXMgKi8KKyAgICBwID0gc3RydG9rX3IocywgZGVsaW0sICZzYXZl cHRyKTsKKyAgICBkbyB7CisgICAgICAgIG5yKys7CisgICAgfSB3aGlsZSAoKHAgPSBzdHJ0b2tf cihOVUxMLCBkZWxpbSwgJnNhdmVwdHIpKSk7CisKKyAgICBmcmVlKHMpOworCisgICAgcyA9IHN0 cmR1cChzdHIpOworCisgICAgc2wgPSBtYWxsb2MoKG5yKzEpICogc2l6ZW9mIChjaGFyICopKTsK KyAgICBpZiAoc2wgPT0gTlVMTCkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInVuYWJsZSB0 byBhbGxvY2F0ZSBtZW1vcnkgdG8gc3BsaXQgc3RyaW5nXG4iKTsKKyAgICAgICAgZXhpdCgtMSk7 CisgICAgfQorCisgICAgcCA9IHN0cnRva19yKHMsIGRlbGltLCAmc2F2ZXB0cik7CisgICAgZG8g eworICAgICAgICBhc3NlcnQoaSA8IG5yKTsKKyAgICAgICAgc2xbaV0gPSBzdHJkdXAocCk7Cisg ICAgICAgIGkrKzsKKyAgICB9IHdoaWxlICgocCA9IHN0cnRva19yKE5VTEwsIGRlbGltLCAmc2F2 ZXB0cikpKTsKKyAgICBzbFtpXSA9IE5VTEw7CisKKyAgICAqcHNsID0gc2w7CisKKyAgICBmcmVl KHMpOworfQorCit2b2lkIHRyaW0oY2hhcl9wcmVkaWNhdGVfdCBwcmVkaWNhdGUsIGNvbnN0IGNo YXIgKmlucHV0LCBjaGFyICoqb3V0cHV0KQoreworICAgIGNvbnN0IGNoYXIgKmZpcnN0LCAqYWZ0 ZXI7CisKKyAgICBmb3IgKGZpcnN0ID0gaW5wdXQ7CisgICAgICAgICAqZmlyc3QgJiYgcHJlZGlj YXRlKCh1bnNpZ25lZCBjaGFyKWZpcnN0WzBdKTsKKyAgICAgICAgIGZpcnN0KyspCisgICAgICAg IDsKKworICAgIGZvciAoYWZ0ZXIgPSBmaXJzdCArIHN0cmxlbihmaXJzdCk7CisgICAgICAgICBh ZnRlciA+IGZpcnN0ICYmIHByZWRpY2F0ZSgodW5zaWduZWQgY2hhcilhZnRlclstMV0pOworICAg ICAgICAgYWZ0ZXItLSkKKyAgICAgICAgOworCisgICAgc2l6ZV90IGxlbl9ub25udWxsID0gYWZ0 ZXIgLSBmaXJzdDsKKyAgICBjaGFyICpyZXN1bHQgPSB4bWFsbG9jKGxlbl9ub25udWxsICsgMSk7 CisKKyAgICBtZW1jcHkocmVzdWx0LCBmaXJzdCwgbGVuX25vbm51bGwpOworICAgIHJlc3VsdFts ZW5fbm9ubnVsbF0gPSAwOworCisgICAgKm91dHB1dCA9IHJlc3VsdDsKK30KKworaW50IHNwbGl0 X3N0cmluZ19pbnRvX3BhaXIoY29uc3QgY2hhciAqc3RyLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgY2hhciAqZGVsaW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFy ICoqYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipiKQoreworICAgIGNoYXIg KnMsICpwLCAqc2F2ZXB0ciwgKmFhID0gTlVMTCwgKmJiID0gTlVMTDsKKyAgICBpbnQgcmMgPSAw OworCisgICAgcyA9IHhzdHJkdXAoc3RyKTsKKworICAgIHAgPSBzdHJ0b2tfcihzLCBkZWxpbSwg JnNhdmVwdHIpOworICAgIGlmIChwID09IE5VTEwpIHsKKyAgICAgICAgcmMgPSBFUlJPUl9JTlZB TDsKKyAgICAgICAgZ290byBvdXQ7CisgICAgfQorICAgIGFhID0geHN0cmR1cChwKTsKKyAgICBw ID0gc3RydG9rX3IoTlVMTCwgZGVsaW0sICZzYXZlcHRyKTsKKyAgICBpZiAocCA9PSBOVUxMKSB7 CisgICAgICAgIHJjID0gRVJST1JfSU5WQUw7CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKyAg ICBiYiA9IHhzdHJkdXAocCk7CisKKyAgICAqYSA9IGFhOworICAgIGFhID0gTlVMTDsKKyAgICAq YiA9IGJiOworICAgIGJiID0gTlVMTDsKK291dDoKKyAgICBmcmVlKHMpOworICAgIGZyZWUoYWEp OworICAgIGZyZWUoYmIpOworICAgIHJldHVybiByYzsKK30KKworCisvKgorICogTG9jYWwgdmFy aWFibGVzOgorICogbW9kZTogQworICogYy1iYXNpYy1vZmZzZXQ6IDQKKyAqIGluZGVudC10YWJz LW1vZGU6IG5pbAorICogRW5kOgorICovCmRpZmYgLS1naXQgYS90b29scy94bC94bF9wYXJzZS5o IGIvdG9vbHMveGwveGxfcGFyc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwLi5kYjhiYzNmMDUxCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMveGwveGxfcGFyc2UuaApA QCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IDIwMDktMjAxNyBDaXRyaXggTHRkIGFu ZCBvdGhlciBjb250cmlidXRvcnMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2Fy ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlz aGVkCisgKiBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIuMSBvbmx5 LiB3aXRoIHRoZSBzcGVjaWFsCisgKiBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4g ZmlsZSBMSUNFTlNFLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBM ZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNp Zm5kZWYgWExfUEFSU0VfSAorI2RlZmluZSBYTF9QQVJTRV9ICisKKyNpbmNsdWRlIDxsaWJ4bC5o PgorCit2b2lkIHBhcnNlX2NvbmZpZ19kYXRhKGNvbnN0IGNoYXIgKmNvbmZpZ19zb3VyY2UsCisg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNvbmZpZ19kYXRhLAorICAgICAgICAg ICAgICAgICAgICAgICBpbnQgY29uZmlnX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgbGli eGxfZG9tYWluX2NvbmZpZyAqZF9jb25maWcpOworaW50IHBhcnNlX3JhbmdlKGNvbnN0IGNoYXIg KnN0ciwgdW5zaWduZWQgbG9uZyAqYSwgdW5zaWduZWQgbG9uZyAqYik7CitpbnQ2NF90IHBhcnNl X21lbV9zaXplX2tiKGNvbnN0IGNoYXIgKm1lbSk7Cit2b2lkIHBhcnNlX2Rpc2tfY29uZmlnKFhM VV9Db25maWcgKipjb25maWcsIGNvbnN0IGNoYXIgKnNwZWMsCisgICAgICAgICAgICAgICAgICAg ICAgIGxpYnhsX2RldmljZV9kaXNrICpkaXNrKTsKKwordm9pZCBwYXJzZV9kaXNrX2NvbmZpZ19t dWx0aXN0cmluZyhYTFVfQ29uZmlnICoqY29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpbnQgbnNwZWNzLCBjb25zdCBjaGFyICpjb25zdCAqc3BlY3MsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV9kaXNrICpkaXNrKTsKK2lu dCBwYXJzZV91c2JjdHJsX2NvbmZpZyhsaWJ4bF9kZXZpY2VfdXNiY3RybCAqdXNiY3RybCwgY2hh ciAqdG9rZW4pOworaW50IHBhcnNlX3VzYmRldl9jb25maWcobGlieGxfZGV2aWNlX3VzYmRldiAq dXNiZGV2LCBjaGFyICp0b2tlbik7CitpbnQgcGFyc2VfY3B1cmFuZ2UoY29uc3QgY2hhciAqY3B1 LCBsaWJ4bF9iaXRtYXAgKmNwdW1hcCk7CitpbnQgcGFyc2VfbmljX2NvbmZpZyhsaWJ4bF9kZXZp Y2VfbmljICpuaWMsIFhMVV9Db25maWcgKipjb25maWcsIGNoYXIgKnRva2VuKTsKKworCitpbnQg bWF0Y2hfb3B0aW9uX3NpemUoY29uc3QgY2hhciAqcHJlZml4LCBzaXplX3QgbGVuLAorICAgICAg ICAgICAgICAgICAgICAgIGNoYXIgKmFyZywgY2hhciAqKmFyZ29wdCk7CisjZGVmaW5lIE1BVENI X09QVElPTihwcmVmaXgsIGFyZywgb3BhcmcpIFwKKyAgICBtYXRjaF9vcHRpb25fc2l6ZSgocHJl Zml4ICI9IiksIHNpemVvZigocHJlZml4KSksIChhcmcpLCAmKG9wYXJnKSkKKworCit2b2lkIHNw bGl0X3N0cmluZ19pbnRvX3N0cmluZ19saXN0KGNvbnN0IGNoYXIgKnN0ciwgY29uc3QgY2hhciAq ZGVsaW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX3N0cmluZ19s aXN0ICpwc2wpOworaW50IHNwbGl0X3N0cmluZ19pbnRvX3BhaXIoY29uc3QgY2hhciAqc3RyLCBj b25zdCBjaGFyICpkZWxpbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiphLCBj aGFyICoqYik7Cit2b2lkIHJlcGxhY2Vfc3RyaW5nKGNoYXIgKipzdHIsIGNvbnN0IGNoYXIgKnZh bCk7CisKKy8qIE5COiB0aGlzIGZvbGxvd3MgdGhlIGludGVyZmFjZSB1c2VkIGJ5IDxjdHlwZS5o Pi4gU2VlICdtYW4gMyBjdHlwZScKKyAgIGFuZCBsb29rIGZvciBDVFlQRSBpbiBsaWJ4bF9pbnRl cm5hbC5oICovCit0eXBlZGVmIGludCAoKmNoYXJfcHJlZGljYXRlX3QpKGNvbnN0IGludCBjKTsK K3ZvaWQgdHJpbShjaGFyX3ByZWRpY2F0ZV90IHByZWRpY2F0ZSwgY29uc3QgY2hhciAqaW5wdXQs IGNoYXIgKipvdXRwdXQpOworCitjb25zdCBjaGFyICpnZXRfYWN0aW9uX29uX3NodXRkb3duX25h bWUobGlieGxfYWN0aW9uX29uX3NodXRkb3duIGEpOworCisjZW5kaWYJLyogWExfUEFSU0VfSCAq LworCisvKgorICogTG9jYWwgdmFyaWFibGVzOgorICogbW9kZTogQworICogYy1iYXNpYy1vZmZz ZXQ6IDQKKyAqIGluZGVudC10YWJzLW1vZGU6IG5pbAorICogRW5kOgorICovCi0tIAoyLjExLjAK CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2 ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHBzOi8vbGlzdHMueGVu Lm9yZy94ZW4tZGV2ZWwK