From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wei Liu Subject: [PATCH 08/29] xl: move some helper functions to xl_utils.c Date: Fri, 24 Feb 2017 16:12:53 +0000 Message-ID: <20170224161314.22154-9-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.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1chIUj-0004Xv-Sk for xen-devel@lists.xenproject.org; Fri, 24 Feb 2017 16:13:22 +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 TW92ZSBzb21lIGNvbW1vbmx5IHVzZWQgZnVuY3Rpb25zIHRvIGEgbmV3IGZpbGUuIFByZXBlbmQg IngiIHRvCmZ1bmN0aW9uIG5hbWVzIHRvIHN0aWNrIHRvIGNvbnNpc3RlbnQgbmFtaW5nIHNjaGVt ZS4KClNpZ25lZC1vZmYtYnk6IFdlaSBMaXUgPHdlaS5saXUyQGNpdHJpeC5jb20+Ci0tLQogdG9v bHMveGwvTWFrZWZpbGUgICAgIHwgICAyICstCiB0b29scy94bC94bF9jbWRpbXBsLmMgfCAzNDMg KysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHRvb2xz L3hsL3hsX3V0aWxzLmMgICB8IDI1OCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrCiB0b29scy94bC94bF91dGlscy5oICAgfCAgMzMgKysrKy0KIDQgZmlsZXMgY2hhbmdlZCwg MzUxIGluc2VydGlvbnMoKyksIDI4NSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCB0 b29scy94bC94bF91dGlscy5jCgpkaWZmIC0tZ2l0IGEvdG9vbHMveGwvTWFrZWZpbGUgYi90b29s cy94bC9NYWtlZmlsZQppbmRleCA3MTA2MDA5ZDY2Li4yZjc0MGI0Nzg5IDEwMDY0NAotLS0gYS90 b29scy94bC9NYWtlZmlsZQorKysgYi90b29scy94bC9NYWtlZmlsZQpAQCAtMTUsNyArMTUsNyBA QCBMREZMQUdTICs9ICQoUFRIUkVBRF9MREZMQUdTKQogQ0ZMQUdTX1hMICs9ICQoQ0ZMQUdTX2xp YnhlbmxpZ2h0KQogQ0ZMQUdTX1hMICs9IC1Xc2hhZG93CiAKLVhMX09CSlMgPSB4bC5vIHhsX2Nt ZGltcGwubyB4bF9jbWR0YWJsZS5vIHhsX3N4cC5vCitYTF9PQkpTID0geGwubyB4bF9jbWRpbXBs Lm8geGxfY21kdGFibGUubyB4bF9zeHAubyB4bF91dGlscy5vCiAkKFhMX09CSlMpOiBDRkxBR1Mg Kz0gJChDRkxBR1NfbGlieGVudG9vbGxvZykKICQoWExfT0JKUyk6IENGTEFHUyArPSAkKENGTEFH U19YTCkKICQoWExfT0JKUyk6IENGTEFHUyArPSAtaW5jbHVkZSAkKFhFTl9ST09UKS90b29scy9j b25maWcuaCAjIGxpYnhsX2pzb24uaCBuZWVkcyBpdC4KZGlmZiAtLWdpdCBhL3Rvb2xzL3hsL3hs X2NtZGltcGwuYyBiL3Rvb2xzL3hsL3hsX2NtZGltcGwuYwppbmRleCBkOWQ5NDc4MjdkLi5jNDVm ZmU5NDNmIDEwMDY0NAotLS0gYS90b29scy94bC94bF9jbWRpbXBsLmMKKysrIGIvdG9vbHMveGwv eGxfY21kaW1wbC5jCkBAIC0xOSw3ICsxOSw2IEBACiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5j bHVkZSA8dW5pc3RkLmg+CiAjaW5jbHVkZSA8dGltZS5oPgotI2luY2x1ZGUgPGdldG9wdC5oPgog I2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CiAjaW5jbHVkZSA8 c3lzL3RpbWUuaD4KQEAgLTQ4LDcgKzQ3LDcgQEAgbGlieGxfY3R4ICpjdHg7CiAKIHhsY2hpbGQg Y2hpbGRyZW5bY2hpbGRfbWF4XTsKIAotc3RhdGljIGNvbnN0IGNoYXIgKmNvbW1vbl9kb21uYW1l OworY29uc3QgY2hhciAqY29tbW9uX2RvbW5hbWU7CiBzdGF0aWMgaW50IGZkX2xvY2sgPSAtMTsK IAogc3RhdGljIGNvbnN0IGNoYXIgc2F2ZWZpbGVoZWFkZXJfbWFnaWNbMzJdPQpAQCAtMTI5LDIy ICsxMjgsNiBAQCBzdHJ1Y3QgZG9tYWluX2NyZWF0ZSB7CiAgICAgY2hhciAqKm1pZ3JhdGlvbl9k b21uYW1lX3I7IC8qIGZyb20gbWFsbG9jICovCiB9OwogCi0KLXN0YXRpYyB1aW50MzJfdCBmaW5k X2RvbWFpbihjb25zdCBjaGFyICpwKSBfX2F0dHJpYnV0ZV9fKCh3YXJuX3VudXNlZF9yZXN1bHQp KTsKLXN0YXRpYyB1aW50MzJfdCBmaW5kX2RvbWFpbihjb25zdCBjaGFyICpwKQotewotICAgIHVp bnQzMl90IGRvbWlkOwotICAgIGludCByYzsKLQotICAgIHJjID0gbGlieGxfZG9tYWluX3F1YWxp Zmllcl90b19kb21pZChjdHgsIHAsICZkb21pZCk7Ci0gICAgaWYgKHJjKSB7Ci0gICAgICAgIGZw cmludGYoc3RkZXJyLCAiJXMgaXMgYW4gaW52YWxpZCBkb21haW4gaWRlbnRpZmllciAocmM9JWQp XG4iLCBwLCByYyk7Ci0gICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKLSAgICB9Ci0gICAgY29t bW9uX2RvbW5hbWUgPSBsaWJ4bF9kb21pZF90b19uYW1lKGN0eCwgZG9taWQpOwotICAgIHJldHVy biBkb21pZDsKLX0KLQogaW50IGNoaWxkX3JlcG9ydCh4bGNoaWxkbnVtIGNoaWxkKQogewogICAg IGludCBzdGF0dXM7CkBAIC0yNTMsNDcgKzIzNiw2IEBAIHJlbGVhc2VfbG9jazoKICAgICByZXR1 cm4gcmM7CiB9CiAKLXN0YXRpYyB2b2lkICp4bWFsbG9jKHNpemVfdCBzeikgewotICAgIHZvaWQg KnI7Ci0gICAgciA9IG1hbGxvYyhzeik7Ci0gICAgaWYgKCFyKSB7IGZwcmludGYoc3RkZXJyLCJ4 bDogVW5hYmxlIHRvIG1hbGxvYyAlbHUgYnl0ZXMuXG4iLAotICAgICAgICAgICAgICAgICAgICAg ICh1bnNpZ25lZCBsb25nKXN6KTsgZXhpdCgtRVJST1JfRkFJTCk7IH0KLSAgICByZXR1cm4gcjsK LX0KLQotc3RhdGljIHZvaWQgKnhjYWxsb2Moc2l6ZV90IG4sIHNpemVfdCBzeikgX19hdHRyaWJ1 dGVfXygodW51c2VkKSk7Ci1zdGF0aWMgdm9pZCAqeGNhbGxvYyhzaXplX3Qgbiwgc2l6ZV90IHN6 KSB7Ci0gICAgdm9pZCAqciA9IGNhbGxvYyhuLCBzeik7Ci0gICAgaWYgKCFyKSB7Ci0gICAgICAg IGZwcmludGYoc3RkZXJyLCJ4bDogVW5hYmxlIHRvIGNhbGxvYyAlenUgYnl0ZXMuXG4iLCBzeipu KTsKLSAgICAgICAgZXhpdCgtRVJST1JfRkFJTCk7Ci0gICAgfQotICAgIHJldHVybiByOwotfQot Ci1zdGF0aWMgdm9pZCAqeHJlYWxsb2Modm9pZCAqcHRyLCBzaXplX3Qgc3opIHsKLSAgICB2b2lk ICpyOwotICAgIGlmICghc3opIHsgZnJlZShwdHIpOyByZXR1cm4gMDsgfQotICAgICAgLyogcmVh bGxvYyhub24tMCwgMCkgaGFzIGEgdXNlbGVzcyByZXR1cm4gdmFsdWU7Ci0gICAgICAgKiBidXQg eHJlYWxsb2MoYW55dGhpbmcsIDApIGlzIGxpa2UgZnJlZQotICAgICAgICovCi0gICAgciA9IHJl YWxsb2MocHRyLCBzeik7Ci0gICAgaWYgKCFyKSB7IGZwcmludGYoc3RkZXJyLCJ4bDogVW5hYmxl IHRvIHJlYWxsb2MgdG8gJWx1IGJ5dGVzLlxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAodW5z aWduZWQgbG9uZylzeik7IGV4aXQoLUVSUk9SX0ZBSUwpOyB9Ci0gICAgcmV0dXJuIHI7Ci19Ci0K LXN0YXRpYyBjaGFyICp4c3RyZHVwKGNvbnN0IGNoYXIgKngpCi17Ci0gICAgY2hhciAqcjsKLSAg ICByID0gc3RyZHVwKHgpOwotICAgIGlmICghcikgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwg InhsOiBVbmFibGUgdG8gc3RyZHVwIGEgc3RyaW5nIG9mIGxlbmd0aCAlenUuXG4iLAotICAgICAg ICAgICAgICAgIHN0cmxlbih4KSk7Ci0gICAgICAgIGV4aXQoLUVSUk9SX0ZBSUwpOwotICAgIH0K LSAgICByZXR1cm4gcjsKLX0KIAogI2RlZmluZSBBUlJBWV9FWFRFTkRfSU5JVF9fQ09SRShhcnJh eSxjb3VudCxpbml0Zm4sbW9yZSkgICAgICAgICAgICAgICAgXAogICAgICh7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApA QCAtMzEzLDQ2ICsyNTUsNiBAQCBzdGF0aWMgY2hhciAqeHN0cmR1cChjb25zdCBjaGFyICp4KQog I2RlZmluZSBBUlJBWV9FWFRFTkRfSU5JVF9OT0RFVklEKGFycmF5LGNvdW50LGluaXRmbikgXAog ICAgIEFSUkFZX0VYVEVORF9JTklUX19DT1JFKChhcnJheSksKGNvdW50KSwoaW5pdGZuKSwgLyog bm90aGluZyAqLyApCiAKLXN0YXRpYyB2b2lkIGRvbG9nKGNvbnN0IGNoYXIgKmZpbGUsIGludCBs aW5lLCBjb25zdCBjaGFyICpmdW5jLCBjaGFyICpmbXQsIC4uLikKLSAgICAgX19hdHRyaWJ1dGVf XygoZm9ybWF0KHByaW50Ziw0LDUpKSk7Ci0KLXN0YXRpYyB2b2lkIGRvbG9nKGNvbnN0IGNoYXIg KmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICpmdW5jLCBjaGFyICpmbXQsIC4uLikKLXsKLSAg ICB2YV9saXN0IGFwOwotICAgIGNoYXIgKnMgPSBOVUxMOwotICAgIGludCByYzsKLQotICAgIHZh X3N0YXJ0KGFwLCBmbXQpOwotICAgIHJjID0gdmFzcHJpbnRmKCZzLCBmbXQsIGFwKTsKLSAgICB2 YV9lbmQoYXApOwotICAgIGlmIChyYyA+PSAwKQotICAgICAgICAvKiB3ZSBpZ25vcmUgd3JpdGUg ZXJyb3JzIHNpbmNlIHdlIGhhdmUgbm8gd2F5IHRvIHJlcG9ydCB0aGVtOwotICAgICAgICAgKiB0 aGUgYWx0ZXJuYXRpdmUgd291bGQgYmUgdG8gYWJvcnQgdGhlIHdob2xlIHByb2dyYW0gKi8KLSAg ICAgICAgbGlieGxfd3JpdGVfZXhhY3RseShOVUxMLCBsb2dmaWxlLCBzLCByYywgTlVMTCwgTlVM TCk7Ci0gICAgZnJlZShzKTsKLX0KLQotc3RhdGljIHZvaWQgeHZhc3ByaW50ZihjaGFyICoqc3Ry cCwgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFwKQotICAgIF9fYXR0cmlidXRlX18oKGZvcm1h dChwcmludGYsMiwwKSkpOwotc3RhdGljIHZvaWQgeHZhc3ByaW50ZihjaGFyICoqc3RycCwgY29u c3QgY2hhciAqZm10LCB2YV9saXN0IGFwKQotewotICAgIGludCByID0gdmFzcHJpbnRmKHN0cnAs IGZtdCwgYXApOwotICAgIGlmIChyID09IC0xKSB7Ci0gICAgICAgIHBlcnJvcigiYXNwcmludGYg ZmFpbGVkIik7Ci0gICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKLSAgICB9Ci19Ci0KLXN0YXRp YyB2b2lkIHhhc3ByaW50ZihjaGFyICoqc3RycCwgY29uc3QgY2hhciAqZm10LCAuLi4pCi0gICAg X19hdHRyaWJ1dGVfXygoZm9ybWF0KHByaW50ZiwyLDMpKSk7Ci1zdGF0aWMgdm9pZCB4YXNwcmlu dGYoY2hhciAqKnN0cnAsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQotewotICAgIHZhX2xpc3QgYXA7 Ci0gICAgdmFfc3RhcnQoYXAsIGZtdCk7Ci0gICAgeHZhc3ByaW50ZihzdHJwLCBmbXQsIGFwKTsK LSAgICB2YV9lbmQoYXApOwotfQotCiBzdGF0aWMgeWFqbF9nZW5fc3RhdHVzIHByaW50Zl9pbmZv X29uZV9qc29uKHlhamxfZ2VuIGhhbmQsIGludCBkb21pZCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfZG9tYWluX2NvbmZpZyAqZF9jb25maWcpCiB7 CkBAIC0zODksMTkgKzI5MSw2IEBAIG91dDoKICAgICByZXR1cm4gczsKIH0KIAotc3RhdGljIHZv aWQgZmx1c2hfc3RyZWFtKEZJTEUgKmZoKQotewotICAgIGNvbnN0IGNoYXIgKmZoX25hbWUgPQot ICAgICAgICBmaCA9PSBzdGRvdXQgPyAic3Rkb3V0IiA6Ci0gICAgICAgIGZoID09IHN0ZGVyciA/ ICJzdGRlcnIiIDoKLSAgICAgICAgKGFib3J0KCksIChjb25zdCBjaGFyKikwKTsKLQotICAgIGlm IChmZXJyb3IoZmgpIHx8IGZmbHVzaChmaCkpIHsKLSAgICAgICAgcGVycm9yKGZoX25hbWUpOwot ICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgfQotfQotCiBzdGF0aWMgdm9pZCBwcmlu dGZfaW5mbyhlbnVtIG91dHB1dF9mb3JtYXQgb3V0cHV0X2Zvcm1hdCwKICAgICAgICAgICAgICAg ICAgICAgICAgIGludCBkb21pZCwKICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RvbWFp bl9jb25maWcgKmRfY29uZmlnLCBGSUxFICpmaCkKQEAgLTQzNyw3ICszMjYsNyBAQCBvdXQ6CiAg ICAgICAgIGZwcmludGYoc3RkZXJyLAogICAgICAgICAgICAgICAgICJ1bmFibGUgdG8gZm9ybWF0 IGRvbWFpbiBjb25maWcgYXMgSlNPTiAoWUFKTDolZClcbiIsIHMpOwogCi0gICAgZmx1c2hfc3Ry ZWFtKGZoKTsKKyAgICB4Zmx1c2hfc3RyZWFtKGZoKTsKIH0KIAogc3RhdGljIGludCBkb19kYWVt b25pemUoY2hhciAqbmFtZSwgY29uc3QgY2hhciAqcGlkZmlsZSkKQEAgLTI5NDIsNyArMjgzMSw3 IEBAIHN0YXRpYyBpbnQgY3JlYXRlX2RvbWFpbihzdHJ1Y3QgZG9tYWluX2NyZWF0ZSAqZG9tX2lu Zm8pCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBmcHV0cyhqc29uLCBjZmdfcHJpbnRfZmgp OwogICAgICAgICAgICAgZnJlZShqc29uKTsKLSAgICAgICAgICAgIGZsdXNoX3N0cmVhbShjZmdf cHJpbnRfZmgpOworICAgICAgICAgICAgeGZsdXNoX3N0cmVhbShjZmdfcHJpbnRfZmgpOwogICAg ICAgICB9CiAgICAgfQogCkBAIC0zMjk0LDQ4ICszMTgzLDYgQEAgc3RhdGljIGludDY0X3QgcGFy c2VfbWVtX3NpemVfa2IoY29uc3QgY2hhciAqbWVtKQogICAgIHJldHVybiBrYnl0ZXM7CiB9CiAK LS8qCi0gKiBDYWxsZXJzIHNob3VsZCB1c2UgU1dJVENIX0ZPUkVBQ0hfT1BUIGluIHByZWZlcmVu Y2UgdG8gY2FsbGluZyB0aGlzCi0gKiBkaXJlY3RseS4KLSAqLwotc3RhdGljIGludCBkZWZfZ2V0 b3B0KGludCBhcmdjLCBjaGFyICogY29uc3QgYXJndltdLAotICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IGNoYXIgKm9wdHN0cmluZywKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1 Y3Qgb3B0aW9uICpsb25nb3B0cywKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBo ZWxwc3RyLCBpbnQgcmVxYXJncykKLXsKLSAgICBpbnQgb3B0OwotICAgIGNvbnN0IHN0cnVjdCBv cHRpb24gZGVmX29wdGlvbnNbXSA9IHsKLSAgICAgICAgQ09NTU9OX0xPTkdfT1BUUwotICAgIH07 Ci0KLSAgICBpZiAoIWxvbmdvcHRzKQotICAgICAgICBsb25nb3B0cyA9IGRlZl9vcHRpb25zOwot Ci0gICAgb3B0ZXJyID0gMDsKLSAgICB3aGlsZSAoKG9wdCA9IGdldG9wdF9sb25nKGFyZ2MsIGFy Z3YsIG9wdHN0cmluZywgbG9uZ29wdHMsIE5VTEwpKSA9PSAnPycpIHsKLSAgICAgICAgaWYgKG9w dG9wdCA9PSAnaCcpIHsKLSAgICAgICAgICAgIGhlbHAoaGVscHN0cik7Ci0gICAgICAgICAgICBl eGl0KDApOwotICAgICAgICB9Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAib3B0aW9uIGAlYycg bm90IHN1cHBvcnRlZC5cbiIsIG9wdG9wdCk7Ci0gICAgICAgIGV4aXQoMik7Ci0gICAgfQotICAg IGlmIChvcHQgPT0gJ2gnKSB7Ci0gICAgICAgIGhlbHAoaGVscHN0cik7Ci0gICAgICAgIGV4aXQo MCk7Ci0gICAgfQotICAgIGlmIChvcHQgIT0gLTEpCi0gICAgICAgIHJldHVybiBvcHQ7Ci0KLSAg ICBpZiAoYXJnYyAtIG9wdGluZCA8PSByZXFhcmdzIC0gMSkgewotICAgICAgICBmcHJpbnRmKHN0 ZGVyciwgIid4bCAlcycgcmVxdWlyZXMgYXQgbGVhc3QgJWQgYXJndW1lbnQlcy5cblxuIiwKLSAg ICAgICAgICAgICAgICBoZWxwc3RyLCByZXFhcmdzLCByZXFhcmdzID4gMSA/ICJzIiA6ICIiKTsK LSAgICAgICAgaGVscChoZWxwc3RyKTsKLSAgICAgICAgZXhpdCgyKTsKLSAgICB9Ci0gICAgcmV0 dXJuIC0xOwotfQotCiBzdGF0aWMgaW50IHNldF9tZW1vcnlfbWF4KHVpbnQzMl90IGRvbWlkLCBj b25zdCBjaGFyICptZW0pCiB7CiAgICAgaW50NjRfdCBtZW1vcnlrYjsKQEAgLTMzNjQsNyArMzIx MSw3IEBAIGludCBtYWluX21lbW1heChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAgICAgICAgIC8q IE5vIG9wdGlvbnMgKi8KICAgICB9CiAKLSAgICBkb21pZCA9IGZpbmRfZG9tYWluKGFyZ3Zbb3B0 aW5kXSk7CisgICAgZG9taWQgPSB4ZmluZF9kb21haW4oYXJndltvcHRpbmRdKTsKICAgICBtZW0g PSBhcmd2W29wdGluZCArIDFdOwogCiAgICAgcmV0dXJuIHNldF9tZW1vcnlfbWF4KGRvbWlkLCBt ZW0pOwpAQCAtMzM5OCw3ICszMjQ1LDcgQEAgaW50IG1haW5fbWVtc2V0KGludCBhcmdjLCBjaGFy ICoqYXJndikKICAgICAgICAgLyogTm8gb3B0aW9ucyAqLwogICAgIH0KIAotICAgIGRvbWlkID0g ZmluZF9kb21haW4oYXJndltvcHRpbmRdKTsKKyAgICBkb21pZCA9IHhmaW5kX2RvbWFpbihhcmd2 W29wdGluZF0pOwogICAgIG1lbSA9IGFyZ3Zbb3B0aW5kICsgMV07CiAKICAgICByZXR1cm4gc2V0 X21lbW9yeV90YXJnZXQoZG9taWQsIG1lbSk7CkBAIC0zNDU0LDcgKzMzMDEsNyBAQCBpbnQgbWFp bl9jZF9lamVjdChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAgICAgICAgIC8qIE5vIG9wdGlvbnMg Ki8KICAgICB9CiAKLSAgICBkb21pZCA9IGZpbmRfZG9tYWluKGFyZ3Zbb3B0aW5kXSk7CisgICAg ZG9taWQgPSB4ZmluZF9kb21haW4oYXJndltvcHRpbmRdKTsKICAgICB2aXJ0ZGV2ID0gYXJndltv cHRpbmQgKyAxXTsKIAogICAgIGlmIChjZF9pbnNlcnQoZG9taWQsIHZpcnRkZXYsIE5VTEwpKQpA QCAtMzQ3NCw3ICszMzIxLDcgQEAgaW50IG1haW5fY2RfaW5zZXJ0KGludCBhcmdjLCBjaGFyICoq YXJndikKICAgICAgICAgLyogTm8gb3B0aW9ucyAqLwogICAgIH0KIAotICAgIGRvbWlkID0gZmlu ZF9kb21haW4oYXJndltvcHRpbmRdKTsKKyAgICBkb21pZCA9IHhmaW5kX2RvbWFpbihhcmd2W29w dGluZF0pOwogICAgIHZpcnRkZXYgPSBhcmd2W29wdGluZCArIDFdOwogICAgIGZpbGUgPSBhcmd2 W29wdGluZCArIDJdOwogCkBAIC0zNDk0LDcgKzMzNDEsNyBAQCBpbnQgbWFpbl91c2JjdHJsX2F0 dGFjaChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAgICAgICAgIC8qIE5vIG9wdGlvbnMgKi8KICAg ICB9CiAKLSAgICBkb21pZCA9IGZpbmRfZG9tYWluKGFyZ3Zbb3B0aW5kKytdKTsKKyAgICBkb21p ZCA9IHhmaW5kX2RvbWFpbihhcmd2W29wdGluZCsrXSk7CiAKICAgICBsaWJ4bF9kZXZpY2VfdXNi Y3RybF9pbml0KCZ1c2JjdHJsKTsKIApAQCAtMzUyMyw3ICszMzcwLDcgQEAgaW50IG1haW5fdXNi Y3RybF9kZXRhY2goaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogICAgICAgICAvKiBObyBvcHRpb25z ICovCiAgICAgfQogCi0gICAgZG9taWQgPSBmaW5kX2RvbWFpbihhcmd2W29wdGluZF0pOworICAg IGRvbWlkID0geGZpbmRfZG9tYWluKGFyZ3Zbb3B0aW5kXSk7CiAgICAgZGV2aWQgPSBhdG9pKGFy Z3Zbb3B0aW5kKzFdKTsKIAogICAgIGxpYnhsX2RldmljZV91c2JjdHJsX2luaXQoJnVzYmN0cmwp OwpAQCAtMzU1NSw3ICszNDAyLDcgQEAgaW50IG1haW5fdXNiZGV2X2F0dGFjaChpbnQgYXJnYywg Y2hhciAqKmFyZ3YpCiAKICAgICBsaWJ4bF9kZXZpY2VfdXNiZGV2X2luaXQoJnVzYmRldik7CiAK LSAgICBkb21pZCA9IGZpbmRfZG9tYWluKGFyZ3Zbb3B0aW5kKytdKTsKKyAgICBkb21pZCA9IHhm aW5kX2RvbWFpbihhcmd2W29wdGluZCsrXSk7CiAKICAgICBmb3IgKGFyZ3YgKz0gb3B0aW5kLCBh cmdjIC09IG9wdGluZDsgYXJnYyA+IDA7ICsrYXJndiwgLS1hcmdjKSB7CiAgICAgICAgIGlmIChw YXJzZV91c2JkZXZfY29uZmlnKCZ1c2JkZXYsICphcmd2KSkKQEAgLTM1ODMsNyArMzQzMCw3IEBA IGludCBtYWluX3VzYmRldl9kZXRhY2goaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogICAgICAgICAv KiBObyBvcHRpb25zICovCiAgICAgfQogCi0gICAgZG9taWQgPSBmaW5kX2RvbWFpbihhcmd2W29w dGluZF0pOworICAgIGRvbWlkID0geGZpbmRfZG9tYWluKGFyZ3Zbb3B0aW5kXSk7CiAgICAgY3Ry bCA9IGF0b2koYXJndltvcHRpbmQrMV0pOwogICAgIHBvcnQgPSBhdG9pKGFyZ3Zbb3B0aW5kKzJd KTsKIApAQCAtMzYyMCw3ICszNDY3LDcgQEAgaW50IG1haW5fdXNibGlzdChpbnQgYXJnYywgY2hh ciAqKmFyZ3YpCiAgICAgICAgIC8qIE5vIG9wdGlvbnMgKi8KICAgICB9CiAKLSAgICBkb21pZCA9 IGZpbmRfZG9tYWluKGFyZ3Zbb3B0aW5kKytdKTsKKyAgICBkb21pZCA9IHhmaW5kX2RvbWFpbihh cmd2W29wdGluZCsrXSk7CiAKICAgICBpZiAoYXJnYyA+IG9wdGluZCkgewogICAgICAgICBmcHJp bnRmKHN0ZGVyciwgIkludmFsaWQgYXJndW1lbnRzLlxuIik7CkBAIC0zNjk2LDcgKzM1NDMsNyBA QCBpbnQgbWFpbl9jb25zb2xlKGludCBhcmdjLCBjaGFyICoqYXJndikKICAgICAgICAgYnJlYWs7 CiAgICAgfQogCi0gICAgZG9taWQgPSBmaW5kX2RvbWFpbihhcmd2W29wdGluZF0pOworICAgIGRv bWlkID0geGZpbmRfZG9tYWluKGFyZ3Zbb3B0aW5kXSk7CiAgICAgaWYgKCF0eXBlKQogICAgICAg ICBsaWJ4bF9wcmltYXJ5X2NvbnNvbGVfZXhlYyhjdHgsIGRvbWlkLCAtMSk7CiAgICAgZWxzZQpA QCAtMzcyMSw3ICszNTY4LDcgQEAgaW50IG1haW5fdm5jdmlld2VyKGludCBhcmdjLCBjaGFyICoq YXJndikKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgZG9taWQgPSBmaW5kX2RvbWFpbihh cmd2W29wdGluZF0pOworICAgIGRvbWlkID0geGZpbmRfZG9tYWluKGFyZ3Zbb3B0aW5kXSk7CiAK ICAgICBpZiAodm5jdmlld2VyKGRvbWlkLCBhdXRvcGFzcykpCiAgICAgICAgIHJldHVybiBFWElU X0ZBSUxVUkU7CkBAIC0zNzU1LDcgKzM2MDIsNyBAQCBpbnQgbWFpbl9wY2lsaXN0KGludCBhcmdj LCBjaGFyICoqYXJndikKICAgICAgICAgLyogTm8gb3B0aW9ucyAqLwogICAgIH0KIAotICAgIGRv bWlkID0gZmluZF9kb21haW4oYXJndltvcHRpbmRdKTsKKyAgICBkb21pZCA9IHhmaW5kX2RvbWFp bihhcmd2W29wdGluZF0pOwogCiAgICAgcGNpbGlzdChkb21pZCk7CiAgICAgcmV0dXJuIDA7CkBA IC0zODAzLDcgKzM2NTAsNyBAQCBpbnQgbWFpbl9wY2lkZXRhY2goaW50IGFyZ2MsIGNoYXIgKiph cmd2KQogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBkb21pZCA9IGZpbmRfZG9tYWluKGFy Z3Zbb3B0aW5kXSk7CisgICAgZG9taWQgPSB4ZmluZF9kb21haW4oYXJndltvcHRpbmRdKTsKICAg ICBiZGYgPSBhcmd2W29wdGluZCArIDFdOwogCiAgICAgaWYgKHBjaWRldGFjaChkb21pZCwgYmRm LCBmb3JjZSkpCkBAIC0zODQ3LDcgKzM2OTQsNyBAQCBpbnQgbWFpbl9wY2lhdHRhY2goaW50IGFy Z2MsIGNoYXIgKiphcmd2KQogICAgICAgICAvKiBObyBvcHRpb25zICovCiAgICAgfQogCi0gICAg ZG9taWQgPSBmaW5kX2RvbWFpbihhcmd2W29wdGluZF0pOworICAgIGRvbWlkID0geGZpbmRfZG9t YWluKGFyZ3Zbb3B0aW5kXSk7CiAgICAgYmRmID0gYXJndltvcHRpbmQgKyAxXTsKIAogICAgIGlm IChvcHRpbmQgKyAxIDwgYXJnYykKQEAgLTQxNTUsNTYgKzQwMDIsNiBAQCBvdXQ6CiAgICAgfQog fQogCi1zdGF0aWMgdm9pZCBwcmludF9iaXRtYXAodWludDhfdCAqbWFwLCBpbnQgbWFwbGVuLCBG SUxFICpzdHJlYW0pCi17Ci0gICAgaW50IGk7Ci0gICAgdWludDhfdCBwbWFwID0gMCwgYml0bWFz ayA9IDA7Ci0gICAgaW50IGZpcnN0c2V0ID0gMCwgc3RhdGUgPSAwOwotCi0gICAgZm9yIChpID0g MDsgaSA8IG1hcGxlbjsgaSsrKSB7Ci0gICAgICAgIGlmIChpICUgOCA9PSAwKSB7Ci0gICAgICAg ICAgICBwbWFwID0gKm1hcCsrOwotICAgICAgICAgICAgYml0bWFzayA9IDE7Ci0gICAgICAgIH0g ZWxzZSBiaXRtYXNrIDw8PSAxOwotCi0gICAgICAgIHN3aXRjaCAoc3RhdGUpIHsKLSAgICAgICAg Y2FzZSAwOgotICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICBpZiAoKHBtYXAgJiBiaXRtYXNr KSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgZmlyc3RzZXQgPSBpOwotICAgICAgICAgICAgICAg IHN0YXRlKys7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg Y2FzZSAxOgotICAgICAgICBjYXNlIDM6Ci0gICAgICAgICAgICBpZiAoKHBtYXAgJiBiaXRtYXNr KSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgZnByaW50ZihzdHJlYW0sICIlcyVkIiwgc3RhdGUg PiAxID8gIiwiIDogIiIsIGZpcnN0c2V0KTsKLSAgICAgICAgICAgICAgICBpZiAoaSAtIDEgPiBm aXJzdHNldCkKLSAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdHJlYW0sICItJWQiLCBpIC0g MSk7Ci0gICAgICAgICAgICAgICAgc3RhdGUgPSAyOwotICAgICAgICAgICAgfQotICAgICAgICAg ICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgc3dpdGNoIChzdGF0ZSkgewotICAg ICAgICBjYXNlIDA6Ci0gICAgICAgICAgICBmcHJpbnRmKHN0cmVhbSwgIm5vbmUiKTsKLSAgICAg ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg ICAgY2FzZSAxOgotICAgICAgICAgICAgaWYgKGZpcnN0c2V0ID09IDApIHsKLSAgICAgICAgICAg ICAgICBmcHJpbnRmKHN0cmVhbSwgImFsbCIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg ICAgICAgICAgfQotICAgICAgICBjYXNlIDM6Ci0gICAgICAgICAgICBmcHJpbnRmKHN0cmVhbSwg IiVzJWQiLCBzdGF0ZSA+IDEgPyAiLCIgOiAiIiwgZmlyc3RzZXQpOwotICAgICAgICAgICAgaWYg KGkgLSAxID4gZmlyc3RzZXQpCi0gICAgICAgICAgICAgICAgZnByaW50ZihzdHJlYW0sICItJWQi LCBpIC0gMSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KIHN0YXRpYyB2b2lkIGxp c3RfZG9tYWlucyhib29sIHZlcmJvc2UsIGJvb2wgY29udGV4dCwgYm9vbCBjbGFpbSwgYm9vbCBu dW1hLAogICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY3B1cG9vbCwgY29uc3QgbGlieGxf ZG9taW5mbyAqaW5mbywgaW50IG5iX2RvbWFpbikKIHsKQEAgLTUwMjMsNyArNDgyMCw3IEBAIGlu dCBtYWluX3NhdmUoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogICAgICAgICByZXR1cm4gRVhJVF9G QUlMVVJFOwogICAgIH0KIAotICAgIGRvbWlkID0gZmluZF9kb21haW4oYXJndltvcHRpbmRdKTsK KyAgICBkb21pZCA9IHhmaW5kX2RvbWFpbihhcmd2W29wdGluZF0pOwogICAgIGZpbGVuYW1lID0g YXJndltvcHRpbmQgKyAxXTsKICAgICBpZiAoIGFyZ2MgLSBvcHRpbmQgPj0gMyApCiAgICAgICAg IGNvbmZpZ19maWxlbmFtZSA9IGFyZ3Zbb3B0aW5kICsgMl07CkBAIC01MDcxLDcgKzQ4NjgsNyBA QCBpbnQgbWFpbl9taWdyYXRlKGludCBhcmdjLCBjaGFyICoqYXJndikKICAgICAgICAgYnJlYWs7 CiAgICAgfQogCi0gICAgZG9taWQgPSBmaW5kX2RvbWFpbihhcmd2W29wdGluZF0pOworICAgIGRv bWlkID0geGZpbmRfZG9tYWluKGFyZ3Zbb3B0aW5kXSk7CiAgICAgaG9zdCA9IGFyZ3Zbb3B0aW5k ICsgMV07CiAKICAgICBib29sIHBhc3NfdHR5X2FyZyA9IHByb2dyZXNzX3VzZV9jciB8fCAoaXNh dHR5KDIpID4gMCk7CkBAIC01MTEyLDcgKzQ5MDksNyBAQCBpbnQgbWFpbl9kdW1wX2NvcmUoaW50 IGFyZ2MsIGNoYXIgKiphcmd2KQogICAgICAgICAvKiBObyBvcHRpb25zICovCiAgICAgfQogCi0g ICAgY29yZV9kdW1wX2RvbWFpbihmaW5kX2RvbWFpbihhcmd2W29wdGluZF0pLCBhcmd2W29wdGlu ZCArIDFdKTsKKyAgICBjb3JlX2R1bXBfZG9tYWluKHhmaW5kX2RvbWFpbihhcmd2W29wdGluZF0p LCBhcmd2W29wdGluZCArIDFdKTsKICAgICByZXR1cm4gRVhJVF9TVUNDRVNTOwogfQogCkBAIC01 MTI0LDcgKzQ5MjEsNyBAQCBpbnQgbWFpbl9wYXVzZShpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAg ICAgICAgIC8qIE5vIG9wdGlvbnMgKi8KICAgICB9CiAKLSAgICBwYXVzZV9kb21haW4oZmluZF9k b21haW4oYXJndltvcHRpbmRdKSk7CisgICAgcGF1c2VfZG9tYWluKHhmaW5kX2RvbWFpbihhcmd2 W29wdGluZF0pKTsKIAogICAgIHJldHVybiBFWElUX1NVQ0NFU1M7CiB9CkBAIC01MTM3LDcgKzQ5 MzQsNyBAQCBpbnQgbWFpbl91bnBhdXNlKGludCBhcmdjLCBjaGFyICoqYXJndikKICAgICAgICAg LyogTm8gb3B0aW9ucyAqLwogICAgIH0KIAotICAgIHVucGF1c2VfZG9tYWluKGZpbmRfZG9tYWlu KGFyZ3Zbb3B0aW5kXSkpOworICAgIHVucGF1c2VfZG9tYWluKHhmaW5kX2RvbWFpbihhcmd2W29w dGluZF0pKTsKIAogICAgIHJldHVybiBFWElUX1NVQ0NFU1M7CiB9CkBAIC01MTUzLDcgKzQ5NTAs NyBAQCBpbnQgbWFpbl9kZXN0cm95KGludCBhcmdjLCBjaGFyICoqYXJndikKICAgICAgICAgYnJl YWs7CiAgICAgfQogCi0gICAgZGVzdHJveV9kb21haW4oZmluZF9kb21haW4oYXJndltvcHRpbmRd KSwgZm9yY2UpOworICAgIGRlc3Ryb3lfZG9tYWluKHhmaW5kX2RvbWFpbihhcmd2W29wdGluZF0p LCBmb3JjZSk7CiAgICAgcmV0dXJuIEVYSVRfU1VDQ0VTUzsKIH0KIApAQCAtNTIxNiw3ICs1MDEz LDcgQEAgc3RhdGljIGludCBtYWluX3NodXRkb3duX29yX3JlYm9vdChpbnQgZG9fcmVib290LCBp bnQgYXJnYywgY2hhciAqKmFyZ3YpCiAgICAgICAgIGxpYnhsX2RvbWluZm9fbGlzdF9mcmVlKGRv bWluZm8sIG5iX2RvbWFpbik7CiAgICAgfSBlbHNlIHsKICAgICAgICAgbGlieGxfZXZnZW5fZG9t YWluX2RlYXRoICpkZWF0aHcgPSBOVUxMOwotICAgICAgICB1aW50MzJfdCBkb21pZCA9IGZpbmRf ZG9tYWluKGFyZ3Zbb3B0aW5kXSk7CisgICAgICAgIHVpbnQzMl90IGRvbWlkID0geGZpbmRfZG9t YWluKGFyZ3Zbb3B0aW5kXSk7CiAKICAgICAgICAgZm4oZG9taWQsIHdhaXRfZm9yX2l0ID8gJmRl YXRodyA6IE5VTEwsIDAsIGZhbGxiYWNrX3RyaWdnZXIpOwogCkBAIC01Mjg3LDcgKzUwODQsNyBA QCBpbnQgbWFpbl9saXN0KGludCBhcmdjLCBjaGFyICoqYXJndikKICAgICAgICAgfQogICAgICAg ICBpbmZvX2ZyZWUgPSBpbmZvOwogICAgIH0gZWxzZSBpZiAob3B0aW5kID09IGFyZ2MtMSkgewot ICAgICAgICB1aW50MzJfdCBkb21pZCA9IGZpbmRfZG9tYWluKGFyZ3Zbb3B0aW5kXSk7CisgICAg ICAgIHVpbnQzMl90IGRvbWlkID0geGZpbmRfZG9tYWluKGFyZ3Zbb3B0aW5kXSk7CiAgICAgICAg IHJjID0gbGlieGxfZG9tYWluX2luZm8oY3R4LCAmaW5mb19idWYsIGRvbWlkKTsKICAgICAgICAg aWYgKHJjID09IEVSUk9SX0RPTUFJTl9OT1RGT1VORCkgewogICAgICAgICAgICAgZnByaW50Zihz dGRlcnIsICJFcnJvcjogRG9tYWluIFwnJXNcJyBkb2VzIG5vdCBleGlzdC5cbiIsCkBAIC01MzMx LDIyICs1MTI4LDYgQEAgaW50IG1haW5fdm1fbGlzdChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAg ICAgcmV0dXJuIEVYSVRfU1VDQ0VTUzsKIH0KIAotc3RhdGljIHZvaWQgc3RyaW5nX3JlYWxsb2Nf YXBwZW5kKGNoYXIgKiphY2N1bXVsYXRlLCBjb25zdCBjaGFyICptb3JlKQotewotICAgIC8qIEFw cGVuZHMgbW9yZSB0byBhY2N1bXVsYXRlLiAgQWNjdW11bGF0ZSBpcyBlaXRoZXIgTlVMTCwgb3IK LSAgICAgKiBwb2ludHMgKGFsd2F5cykgdG8gYSBtYWxsb2MnZCBudWwtdGVybWluYXRlZCBzdHJp bmcuICovCi0KLSAgICBzaXplX3Qgb2xkbGVuID0gKmFjY3VtdWxhdGUgPyBzdHJsZW4oKmFjY3Vt dWxhdGUpIDogMDsKLSAgICBzaXplX3QgbW9yZWxlbiA9IHN0cmxlbihtb3JlKSArIDEvKm51bCov OwotICAgIGlmIChvbGRsZW4gPiBTU0laRV9NQVggfHwgbW9yZWxlbiA+IFNTSVpFX01BWCAtIG9s ZGxlbikgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwiQWRkaXRpb25hbCBjb25maWcgZGF0YSBm YXIgdG9vIGxhcmdlXG4iKTsKLSAgICAgICAgZXhpdCgtRVJST1JfRkFJTCk7Ci0gICAgfQotCi0g ICAgKmFjY3VtdWxhdGUgPSB4cmVhbGxvYygqYWNjdW11bGF0ZSwgb2xkbGVuICsgbW9yZWxlbik7 Ci0gICAgbWVtY3B5KCphY2N1bXVsYXRlICsgb2xkbGVuLCBtb3JlLCBtb3JlbGVuKTsKLX0KLQog aW50IG1haW5fY3JlYXRlKGludCBhcmdjLCBjaGFyICoqYXJndikKIHsKICAgICBjb25zdCBjaGFy ICpmaWxlbmFtZSA9IE5VTEw7CkBAIC01NDA4LDggKzUxODksOCBAQCBpbnQgbWFpbl9jcmVhdGUo aW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCiAgICAgZm9yICg7IG9wdGluZCA8IGFyZ2M7IG9wdGlu ZCsrKSB7CiAgICAgICAgIGlmIChzdHJjaHIoYXJndltvcHRpbmRdLCAnPScpICE9IE5VTEwpIHsK LSAgICAgICAgICAgIHN0cmluZ19yZWFsbG9jX2FwcGVuZCgmZG9tX2luZm8uZXh0cmFfY29uZmln LCBhcmd2W29wdGluZF0pOwotICAgICAgICAgICAgc3RyaW5nX3JlYWxsb2NfYXBwZW5kKCZkb21f aW5mby5leHRyYV9jb25maWcsICJcbiIpOworICAgICAgICAgICAgeHN0cmluZ19yZWFsbG9jX2Fw cGVuZCgmZG9tX2luZm8uZXh0cmFfY29uZmlnLCBhcmd2W29wdGluZF0pOworICAgICAgICAgICAg eHN0cmluZ19yZWFsbG9jX2FwcGVuZCgmZG9tX2luZm8uZXh0cmFfY29uZmlnLCAiXG4iKTsKICAg ICAgICAgfSBlbHNlIGlmICghZmlsZW5hbWUpIHsKICAgICAgICAgICAgIGZpbGVuYW1lID0gYXJn dltvcHRpbmRdOwogICAgICAgICB9IGVsc2UgewpAQCAtNTQ2Niw3ICs1MjQ3LDcgQEAgaW50IG1h aW5fY29uZmlnX3VwZGF0ZShpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAgICAgZnByaW50ZihzdGRl cnIsICJXQVJOSU5HOiB4bCBub3cgaGFzIGJldHRlciBjYXBhYmlsaXR5IHRvIG1hbmFnZSBkb21h aW4gY29uZmlndXJhdGlvbiwgIgogICAgICAgICAgICAgImF2b2lkIHVzaW5nIHRoaXMgY29tbWFu ZCB3aGVuIHBvc3NpYmxlXG4iKTsKIAotICAgIGRvbWlkID0gZmluZF9kb21haW4oYXJndlsxXSk7 CisgICAgZG9taWQgPSB4ZmluZF9kb21haW4oYXJndlsxXSk7CiAgICAgYXJnYy0tOyBhcmd2Kys7 CiAKICAgICBpZiAoYXJndlsxXSAmJiBhcmd2WzFdWzBdICE9ICctJyAmJiAhc3RyY2hyKGFyZ3Zb MV0sICc9JykpIHsKQEAgLTU0ODUsOCArNTI2Niw4IEBAIGludCBtYWluX2NvbmZpZ191cGRhdGUo aW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCiAgICAgZm9yICg7IG9wdGluZCA8IGFyZ2M7IG9wdGlu ZCsrKSB7CiAgICAgICAgIGlmIChzdHJjaHIoYXJndltvcHRpbmRdLCAnPScpICE9IE5VTEwpIHsK LSAgICAgICAgICAgIHN0cmluZ19yZWFsbG9jX2FwcGVuZCgmZXh0cmFfY29uZmlnLCBhcmd2W29w dGluZF0pOwotICAgICAgICAgICAgc3RyaW5nX3JlYWxsb2NfYXBwZW5kKCZleHRyYV9jb25maWcs ICJcbiIpOworICAgICAgICAgICAgeHN0cmluZ19yZWFsbG9jX2FwcGVuZCgmZXh0cmFfY29uZmln LCBhcmd2W29wdGluZF0pOworICAgICAgICAgICAgeHN0cmluZ19yZWFsbG9jX2FwcGVuZCgmZXh0 cmFfY29uZmlnLCAiXG4iKTsKICAgICAgICAgfSBlbHNlIGlmICghZmlsZW5hbWUpIHsKICAgICAg ICAgICAgIGZpbGVuYW1lID0gYXJndltvcHRpbmRdOwogICAgICAgICB9IGVsc2UgewpAQCAtNTU3 NCw3ICs1MzU1LDcgQEAgaW50IG1haW5fYnV0dG9uX3ByZXNzKGludCBhcmdjLCBjaGFyICoqYXJn dikKICAgICAgICAgLyogTm8gb3B0aW9ucyAqLwogICAgIH0KIAotICAgIGJ1dHRvbl9wcmVzcyhm aW5kX2RvbWFpbihhcmd2W29wdGluZF0pLCBhcmd2W29wdGluZCArIDFdKTsKKyAgICBidXR0b25f cHJlc3MoeGZpbmRfZG9tYWluKGFyZ3Zbb3B0aW5kXSksIGFyZ3Zbb3B0aW5kICsgMV0pOwogCiAg ICAgcmV0dXJuIDA7CiB9CkBAIC01NjUxLDcgKzU0MzIsNyBAQCBzdGF0aWMgdm9pZCB2Y3B1bGlz dChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAgICAgICAgIGxpYnhsX2RvbWluZm9fbGlzdF9mcmVl KGRvbWluZm8sIG5iX2RvbWFpbik7CiAgICAgfSBlbHNlIHsKICAgICAgICAgZm9yICg7IGFyZ2Mg PiAwOyArK2FyZ3YsIC0tYXJnYykgewotICAgICAgICAgICAgdWludDMyX3QgZG9taWQgPSBmaW5k X2RvbWFpbigqYXJndik7CisgICAgICAgICAgICB1aW50MzJfdCBkb21pZCA9IHhmaW5kX2RvbWFp bigqYXJndik7CiAgICAgICAgICAgICBwcmludF9kb21haW5fdmNwdWluZm8oZG9taWQsIHBoeXNp bmZvLm5yX2NwdXMpOwogICAgICAgICB9CiAgICAgfQpAQCAtNTcwMiw3ICs1NDgzLDcgQEAgaW50 IG1haW5fdmNwdXBpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAgICAgICAgIGJyZWFrOwogICAg IH0KIAotICAgIGRvbWlkID0gZmluZF9kb21haW4oYXJndltvcHRpbmRdKTsKKyAgICBkb21pZCA9 IHhmaW5kX2RvbWFpbihhcmd2W29wdGluZF0pOwogICAgIHZjcHUgPSBhcmd2W29wdGluZCsxXTsK ICAgICBoYXJkX3N0ciA9IGFyZ3Zbb3B0aW5kKzJdOwogICAgIHNvZnRfc3RyID0gKGFyZ2MgPiBv cHRpbmQrMykgPyBhcmd2W29wdGluZCszXSA6IE5VTEw7CkBAIC01ODc5LDcgKzU2NjAsNyBAQCBp bnQgbWFpbl92Y3B1c2V0KGludCBhcmdjLCBjaGFyICoqYXJndikKICAgICAgICAgYnJlYWs7CiAg ICAgfQogCi0gICAgaWYgKHZjcHVzZXQoZmluZF9kb21haW4oYXJndltvcHRpbmRdKSwgYXJndltv cHRpbmQgKyAxXSwgY2hlY2tfaG9zdCkpCisgICAgaWYgKHZjcHVzZXQoeGZpbmRfZG9tYWluKGFy Z3Zbb3B0aW5kXSksIGFyZ3Zbb3B0aW5kICsgMV0sIGNoZWNrX2hvc3QpKQogICAgICAgICByZXR1 cm4gRVhJVF9GQUlMVVJFOwogCiAgICAgcmV0dXJuIEVYSVRfU1VDQ0VTUzsKQEAgLTYxNzYsNyAr NTk1Nyw3IEBAIGludCBtYWluX3NoYXJpbmcoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogICAgICAg ICB9CiAgICAgICAgIGluZm9fZnJlZSA9IGluZm87CiAgICAgfSBlbHNlIGlmIChvcHRpbmQgPT0g YXJnYy0xKSB7Ci0gICAgICAgIHVpbnQzMl90IGRvbWlkID0gZmluZF9kb21haW4oYXJndltvcHRp bmRdKTsKKyAgICAgICAgdWludDMyX3QgZG9taWQgPSB4ZmluZF9kb21haW4oYXJndltvcHRpbmRd KTsKICAgICAgICAgcmMgPSBsaWJ4bF9kb21haW5faW5mbyhjdHgsICZpbmZvX2J1ZiwgZG9taWQp OwogICAgICAgICBpZiAocmMgPT0gRVJST1JfRE9NQUlOX05PVEZPVU5EKSB7CiAgICAgICAgICAg ICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yOiBEb21haW4gXCclc1wnIGRvZXMgbm90IGV4aXN0Llxu IiwKQEAgLTY3NDEsNyArNjUyMiw3IEBAIGludCBtYWluX3NjaGVkX2NyZWRpdChpbnQgYXJnYywg Y2hhciAqKmFyZ3YpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNwdXBvb2wpKQog ICAgICAgICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKICAgICB9IGVsc2UgewotICAgICAgICB1 aW50MzJfdCBkb21pZCA9IGZpbmRfZG9tYWluKGRvbSk7CisgICAgICAgIHVpbnQzMl90IGRvbWlk ID0geGZpbmRfZG9tYWluKGRvbSk7CiAKICAgICAgICAgaWYgKCFvcHRfdyAmJiAhb3B0X2MpIHsg Lyogb3V0cHV0IGNyZWRpdCBzY2hlZHVsZXIgaW5mbyAqLwogICAgICAgICAgICAgc2NoZWRfY3Jl ZGl0X2RvbWFpbl9vdXRwdXQoLTEpOwpAQCAtNjg0Miw3ICs2NjIzLDcgQEAgaW50IG1haW5fc2No ZWRfY3JlZGl0MihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNwdXBvb2wpKQogICAgICAgICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKICAg ICB9IGVsc2UgewotICAgICAgICB1aW50MzJfdCBkb21pZCA9IGZpbmRfZG9tYWluKGRvbSk7Cisg ICAgICAgIHVpbnQzMl90IGRvbWlkID0geGZpbmRfZG9tYWluKGRvbSk7CiAKICAgICAgICAgaWYg KCFvcHRfdykgeyAvKiBvdXRwdXQgY3JlZGl0MiBzY2hlZHVsZXIgaW5mbyAqLwogICAgICAgICAg ICAgc2NoZWRfY3JlZGl0Ml9kb21haW5fb3V0cHV0KC0xKTsKQEAgLTY5OTMsNyArNjc3NCw3IEBA IGludCBtYWluX3NjaGVkX3J0ZHMoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogICAgICAgICAgICAg Z290byBvdXQ7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICB1aW50MzJfdCBkb21p ZCA9IGZpbmRfZG9tYWluKGRvbSk7CisgICAgICAgIHVpbnQzMl90IGRvbWlkID0geGZpbmRfZG9t YWluKGRvbSk7CiAgICAgICAgIGlmICghb3B0X3YgJiYgIW9wdF9hbGwpIHsgLyogb3V0cHV0IGRl ZmF1bHQgc2NoZWR1bGluZyBwYXJhbWV0ZXJzICovCiAgICAgICAgICAgICBzY2hlZF9ydGRzX2Rv bWFpbl9vdXRwdXQoLTEpOwogICAgICAgICAgICAgcmMgPSAtc2NoZWRfcnRkc19kb21haW5fb3V0 cHV0KGRvbWlkKTsKQEAgLTcxMjUsNyArNjkwNiw3IEBAIGludCBtYWluX3JlbmFtZShpbnQgYXJn YywgY2hhciAqKmFyZ3YpCiAgICAgZG9tID0gYXJndltvcHRpbmQrK107CiAgICAgbmV3X25hbWUg PSBhcmd2W29wdGluZF07CiAKLSAgICBkb21pZCA9IGZpbmRfZG9tYWluKGRvbSk7CisgICAgZG9t aWQgPSB4ZmluZF9kb21haW4oZG9tKTsKICAgICBpZiAobGlieGxfZG9tYWluX3JlbmFtZShjdHgs IGRvbWlkLCBjb21tb25fZG9tbmFtZSwgbmV3X25hbWUpKSB7CiAgICAgICAgIGZwcmludGYoc3Rk ZXJyLCAiQ2FuJ3QgcmVuYW1lIGRvbWFpbiAnJXMnLlxuIiwgZG9tKTsKICAgICAgICAgcmV0dXJu IDE7CkBAIC03MTQ3LDcgKzY5MjgsNyBAQCBpbnQgbWFpbl90cmlnZ2VyKGludCBhcmdjLCBjaGFy ICoqYXJndikKICAgICAgICAgLyogTm8gb3B0aW9ucyAqLwogICAgIH0KIAotICAgIGRvbWlkID0g ZmluZF9kb21haW4oYXJndltvcHRpbmQrK10pOworICAgIGRvbWlkID0geGZpbmRfZG9tYWluKGFy Z3Zbb3B0aW5kKytdKTsKIAogICAgIHRyaWdnZXJfbmFtZSA9IGFyZ3Zbb3B0aW5kKytdOwogICAg IGlmIChsaWJ4bF90cmlnZ2VyX2Zyb21fc3RyaW5nKHRyaWdnZXJfbmFtZSwgJnRyaWdnZXIpKSB7 CkBAIC03MTc4LDcgKzY5NTksNyBAQCBpbnQgbWFpbl9zeXNycShpbnQgYXJnYywgY2hhciAqKmFy Z3YpCiAgICAgICAgIC8qIE5vIG9wdGlvbnMgKi8KICAgICB9CiAKLSAgICBkb21pZCA9IGZpbmRf ZG9tYWluKGFyZ3Zbb3B0aW5kKytdKTsKKyAgICBkb21pZCA9IHhmaW5kX2RvbWFpbihhcmd2W29w dGluZCsrXSk7CiAKICAgICBzeXNycSA9IGFyZ3Zbb3B0aW5kXTsKIApAQCAtNzI2MCw3ICs3MDQx LDcgQEAgaW50IG1haW5fbmV0d29ya2F0dGFjaChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAgICAg ICAgIC8qIE5vIG9wdGlvbnMgKi8KICAgICB9CiAKLSAgICBkb21pZCA9IGZpbmRfZG9tYWluKGFy Z3Zbb3B0aW5kXSk7CisgICAgZG9taWQgPSB4ZmluZF9kb21haW4oYXJndltvcHRpbmRdKTsKIAog ICAgIGNvbmZpZz0geGx1X2NmZ19pbml0KHN0ZGVyciwgImNvbW1hbmQgbGluZSIpOwogICAgIGlm ICghY29uZmlnKSB7CkBAIC03MzA5LDcgKzcwOTAsNyBAQCBpbnQgbWFpbl9uZXR3b3JrbGlzdChp bnQgYXJnYywgY2hhciAqKmFyZ3YpCiAgICAgcHJpbnRmKCIlLTNzICUtMnMgJS0xN3MgJS02cyAl LTVzICUtNnMgJTVzLyUtNXMgJS0zMHNcbiIsCiAgICAgICAgICAgICJJZHgiLCAiQkUiLCAiTWFj IEFkZHIuIiwgImhhbmRsZSIsICJzdGF0ZSIsICJldnQtY2giLCAidHgtIiwgInJ4LXJpbmctcmVm IiwgIkJFLXBhdGgiKTsKICAgICBmb3IgKGFyZ3YgKz0gb3B0aW5kLCBhcmdjIC09IG9wdGluZDsg YXJnYyA+IDA7IC0tYXJnYywgKythcmd2KSB7Ci0gICAgICAgIHVpbnQzMl90IGRvbWlkID0gZmlu ZF9kb21haW4oKmFyZ3YpOworICAgICAgICB1aW50MzJfdCBkb21pZCA9IHhmaW5kX2RvbWFpbigq YXJndik7CiAgICAgICAgIG5pY3MgPSBsaWJ4bF9kZXZpY2VfbmljX2xpc3QoY3R4LCBkb21pZCwg Jm5iKTsKICAgICAgICAgaWYgKCFuaWNzKSB7CiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTcz NDMsNyArNzEyNCw3IEBAIGludCBtYWluX25ldHdvcmtkZXRhY2goaW50IGFyZ2MsIGNoYXIgKiph cmd2KQogICAgICAgICAvKiBObyBvcHRpb25zICovCiAgICAgfQogCi0gICAgZG9taWQgPSBmaW5k X2RvbWFpbihhcmd2W29wdGluZF0pOworICAgIGRvbWlkID0geGZpbmRfZG9tYWluKGFyZ3Zbb3B0 aW5kXSk7CiAKICAgICBpZiAoIXN0cmNocihhcmd2W29wdGluZCsxXSwgJzonKSkgewogICAgICAg ICBpZiAobGlieGxfZGV2aWRfdG9fZGV2aWNlX25pYyhjdHgsIGRvbWlkLCBhdG9pKGFyZ3Zbb3B0 aW5kKzFdKSwgJm5pYykpIHsKQEAgLTczNzksNyArNzE2MCw3IEBAIGludCBtYWluX2NoYW5uZWxs aXN0KGludCBhcmdjLCBjaGFyICoqYXJndikKICAgICBwcmludGYoIiUtM3MgJS0ycyAlLTVzICUt NnMgJThzICUtMTBzICUtMzBzXG4iLAogICAgICAgICAgICAiSWR4IiwgIkJFIiwgInN0YXRlIiwg ImV2dC1jaCIsICJyaW5nLXJlZiIsICJjb25uZWN0aW9uIiwgIiIpOwogICAgIGZvciAoYXJndiAr PSBvcHRpbmQsIGFyZ2MgLT0gb3B0aW5kOyBhcmdjID4gMDsgLS1hcmdjLCArK2FyZ3YpIHsKLSAg ICAgICAgdWludDMyX3QgZG9taWQgPSBmaW5kX2RvbWFpbigqYXJndik7CisgICAgICAgIHVpbnQz Ml90IGRvbWlkID0geGZpbmRfZG9tYWluKCphcmd2KTsKICAgICAgICAgY2hhbm5lbHMgPSBsaWJ4 bF9kZXZpY2VfY2hhbm5lbF9saXN0KGN0eCwgZG9taWQsICZuYik7CiAgICAgICAgIGlmICghY2hh bm5lbHMpCiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTc0OTEsNyArNzI3Miw3IEBAIGludCBt YWluX2Jsb2NrZGV0YWNoKGludCBhcmdjLCBjaGFyICoqYXJndikKICAgICAgICAgLyogTm8gb3B0 aW9ucyAqLwogICAgIH0KIAotICAgIGRvbWlkID0gZmluZF9kb21haW4oYXJndltvcHRpbmRdKTsK KyAgICBkb21pZCA9IHhmaW5kX2RvbWFpbihhcmd2W29wdGluZF0pOwogCiAgICAgaWYgKGxpYnhs X3ZkZXZfdG9fZGV2aWNlX2Rpc2soY3R4LCBkb21pZCwgYXJndltvcHRpbmQrMV0sICZkaXNrKSkg ewogICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yOiBEZXZpY2UgJXMgbm90IGNvbm5lY3Rl ZC5cbiIsIGFyZ3Zbb3B0aW5kKzFdKTsKQEAgLTc2MDcsNyArNzM4OCw3IEBAIGludCBtYWluX3Z0 cG1kZXRhY2goaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogICAgICAgICAvKiBObyBvcHRpb25zICov CiAgICAgfQogCi0gICAgZG9taWQgPSBmaW5kX2RvbWFpbihhcmd2W29wdGluZF0pOworICAgIGRv bWlkID0geGZpbmRfZG9tYWluKGFyZ3Zbb3B0aW5kXSk7CiAKICAgICBpZiAoIGxpYnhsX3V1aWRf ZnJvbV9zdHJpbmcoJnV1aWQsIGFyZ3Zbb3B0aW5kKzFdKSkgewogICAgICAgICBpZiAobGlieGxf ZGV2aWRfdG9fZGV2aWNlX3Z0cG0oY3R4LCBkb21pZCwgYXRvaShhcmd2W29wdGluZCsxXSksICZ2 dHBtKSkgewpAQCAtNzgzNiw3ICs3NjE3LDcgQEAgaW50IG1haW5fdXB0aW1lKGludCBhcmdjLCBj aGFyICoqYXJndikKICAgICB9CiAKICAgICBmb3IgKDsoZG9tID0gYXJndltvcHRpbmRdKSAhPSBO VUxMOyBuYl9kb21zKyssb3B0aW5kKyspCi0gICAgICAgIGRvbWFpbnNbbmJfZG9tc10gPSBmaW5k X2RvbWFpbihkb20pOworICAgICAgICBkb21haW5zW25iX2RvbXNdID0geGZpbmRfZG9tYWluKGRv bSk7CiAKICAgICBwcmludF91cHRpbWUoc2hvcnRfbW9kZSwgZG9tYWlucywgbmJfZG9tcyk7CiAK QEAgLTc4NzEsNyArNzY1Miw3IEBAIGludCBtYWluX3RtZW1fbGlzdChpbnQgYXJnYywgY2hhciAq KmFyZ3YpCiAgICAgaWYgKGFsbCkKICAgICAgICAgZG9taWQgPSBJTlZBTElEX0RPTUlEOwogICAg IGVsc2UKLSAgICAgICAgZG9taWQgPSBmaW5kX2RvbWFpbihkb20pOworICAgICAgICBkb21pZCA9 IHhmaW5kX2RvbWFpbihkb20pOwogCiAgICAgYnVmID0gbGlieGxfdG1lbV9saXN0KGN0eCwgZG9t aWQsIHVzZV9sb25nKTsKICAgICBpZiAoYnVmID09IE5VTEwpCkBAIC03OTA1LDcgKzc2ODYsNyBA QCBpbnQgbWFpbl90bWVtX2ZyZWV6ZShpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAgICAgaWYgKGFs bCkKICAgICAgICAgZG9taWQgPSBJTlZBTElEX0RPTUlEOwogICAgIGVsc2UKLSAgICAgICAgZG9t aWQgPSBmaW5kX2RvbWFpbihkb20pOworICAgICAgICBkb21pZCA9IHhmaW5kX2RvbWFpbihkb20p OwogCiAgICAgaWYgKGxpYnhsX3RtZW1fZnJlZXplKGN0eCwgZG9taWQpIDwgMCkKICAgICAgICAg cmV0dXJuIEVYSVRfRkFJTFVSRTsKQEAgLTc5MzYsNyArNzcxNyw3IEBAIGludCBtYWluX3RtZW1f dGhhdyhpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAgICAgaWYgKGFsbCkKICAgICAgICAgZG9taWQg PSBJTlZBTElEX0RPTUlEOwogICAgIGVsc2UKLSAgICAgICAgZG9taWQgPSBmaW5kX2RvbWFpbihk b20pOworICAgICAgICBkb21pZCA9IHhmaW5kX2RvbWFpbihkb20pOwogCiAgICAgaWYgKGxpYnhs X3RtZW1fdGhhdyhjdHgsIGRvbWlkKSA8IDApCiAgICAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7 CkBAIC03OTgyLDcgKzc3NjMsNyBAQCBpbnQgbWFpbl90bWVtX3NldChpbnQgYXJnYywgY2hhciAq KmFyZ3YpCiAgICAgaWYgKGFsbCkKICAgICAgICAgZG9taWQgPSBJTlZBTElEX0RPTUlEOwogICAg IGVsc2UKLSAgICAgICAgZG9taWQgPSBmaW5kX2RvbWFpbihkb20pOworICAgICAgICBkb21pZCA9 IHhmaW5kX2RvbWFpbihkb20pOwogCiAgICAgaWYgKCFvcHRfdyAmJiAhb3B0X2MgJiYgIW9wdF9w KSB7CiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiTm8gc2V0IHZhbHVlIHNwZWNpZmllZC5cblxu Iik7CkBAIC04MDM2LDcgKzc4MTcsNyBAQCBpbnQgbWFpbl90bWVtX3NoYXJlZF9hdXRoKGludCBh cmdjLCBjaGFyICoqYXJndikKICAgICBpZiAoYWxsKQogICAgICAgICBkb21pZCA9IElOVkFMSURf RE9NSUQ7CiAgICAgZWxzZQotICAgICAgICBkb21pZCA9IGZpbmRfZG9tYWluKGRvbSk7CisgICAg ICAgIGRvbWlkID0geGZpbmRfZG9tYWluKGRvbSk7CiAKICAgICBpZiAodXVpZCA9PSBOVUxMIHx8 IGF1dGhhcmcgPT0gTlVMTCkgewogICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIk5vIHV1aWQgb3Ig YXV0aCBzcGVjaWZpZWQuXG5cbiIpOwpAQCAtODExNSw4ICs3ODk2LDggQEAgaW50IG1haW5fY3B1 cG9vbGNyZWF0ZShpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAKICAgICB3aGlsZSAob3B0aW5kIDwg YXJnYykgewogICAgICAgICBpZiAoKHAgPSBzdHJjaHIoYXJndltvcHRpbmRdLCAnPScpKSkgewot ICAgICAgICAgICAgc3RyaW5nX3JlYWxsb2NfYXBwZW5kKCZleHRyYV9jb25maWcsICJcbiIpOwot ICAgICAgICAgICAgc3RyaW5nX3JlYWxsb2NfYXBwZW5kKCZleHRyYV9jb25maWcsIGFyZ3Zbb3B0 aW5kXSk7CisgICAgICAgICAgICB4c3RyaW5nX3JlYWxsb2NfYXBwZW5kKCZleHRyYV9jb25maWcs ICJcbiIpOworICAgICAgICAgICAgeHN0cmluZ19yZWFsbG9jX2FwcGVuZCgmZXh0cmFfY29uZmln LCBhcmd2W29wdGluZF0pOwogICAgICAgICB9IGVsc2UgaWYgKCFmaWxlbmFtZSkgewogICAgICAg ICAgICAgZmlsZW5hbWUgPSBhcmd2W29wdGluZF07CiAgICAgICAgIH0gZWxzZSB7CkBAIC04ODMw LDcgKzg2MTEsNyBAQCBpbnQgbWFpbl9yZW11cyhpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAgICAg ICAgIGxpYnhsX2RlZmJvb2xfc2V0KCZyX2luZm8uY29sbywgdHJ1ZSk7CiAgICAgfQogCi0gICAg ZG9taWQgPSBmaW5kX2RvbWFpbihhcmd2W29wdGluZF0pOworICAgIGRvbWlkID0geGZpbmRfZG9t YWluKGFyZ3Zbb3B0aW5kXSk7CiAgICAgaG9zdCA9IGFyZ3Zbb3B0aW5kICsgMV07CiAKICAgICAv KiBEZWZhdWx0cyAqLwpAQCAtOTE3OSw3ICs4OTYwLDcgQEAgaW50IG1haW5fcHNyX2NtdF9hdHRh Y2goaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogICAgICAgICAvKiBObyBvcHRpb25zICovCiAgICAg fQogCi0gICAgZG9taWQgPSBmaW5kX2RvbWFpbihhcmd2W29wdGluZF0pOworICAgIGRvbWlkID0g eGZpbmRfZG9tYWluKGFyZ3Zbb3B0aW5kXSk7CiAgICAgcmV0ID0gbGlieGxfcHNyX2NtdF9hdHRh Y2goY3R4LCBkb21pZCk7CiAKICAgICByZXR1cm4gcmV0OwpAQCAtOTE5NCw3ICs4OTc1LDcgQEAg aW50IG1haW5fcHNyX2NtdF9kZXRhY2goaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogICAgICAgICAv KiBObyBvcHRpb25zICovCiAgICAgfQogCi0gICAgZG9taWQgPSBmaW5kX2RvbWFpbihhcmd2W29w dGluZF0pOworICAgIGRvbWlkID0geGZpbmRfZG9tYWluKGFyZ3Zbb3B0aW5kXSk7CiAgICAgcmV0 ID0gbGlieGxfcHNyX2NtdF9kZXRhY2goY3R4LCBkb21pZCk7CiAKICAgICByZXR1cm4gcmV0OwpA QCAtOTIyNCw3ICs5MDA1LDcgQEAgaW50IG1haW5fcHNyX2NtdF9zaG93KGludCBhcmdjLCBjaGFy ICoqYXJndikKICAgICBpZiAob3B0aW5kICsgMSA+PSBhcmdjKQogICAgICAgICBkb21pZCA9IElO VkFMSURfRE9NSUQ7CiAgICAgZWxzZSBpZiAob3B0aW5kICsgMSA9PSBhcmdjIC0gMSkKLSAgICAg ICAgZG9taWQgPSBmaW5kX2RvbWFpbihhcmd2W29wdGluZCArIDFdKTsKKyAgICAgICAgZG9taWQg PSB4ZmluZF9kb21haW4oYXJndltvcHRpbmQgKyAxXSk7CiAgICAgZWxzZSB7CiAgICAgICAgIGhl bHAoInBzci1jbXQtc2hvdyIpOwogICAgICAgICByZXR1cm4gMjsKQEAgLTk0NDAsNyArOTIyMSw3 IEBAIGludCBtYWluX3Bzcl9jYXRfY2JtX3NldChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAgICAg ICAgIHJldHVybiAyOwogICAgIH0KIAotICAgIGRvbWlkID0gZmluZF9kb21haW4oYXJndltvcHRp bmRdKTsKKyAgICBkb21pZCA9IHhmaW5kX2RvbWFpbihhcmd2W29wdGluZF0pOwogICAgIGNibSA9 IHN0cnRvbGwoYXJndltvcHRpbmQgKyAxXSwgTlVMTCAsIDApOwogCiAgICAgcmV0ID0gbGlieGxf cHNyX2NhdF9zZXRfY2JtKGN0eCwgZG9taWQsIHR5cGUsICZ0YXJnZXRfbWFwLCBjYm0pOwpAQCAt OTQ2MSw3ICs5MjQyLDcgQEAgaW50IG1haW5fcHNyX2NhdF9zaG93KGludCBhcmdjLCBjaGFyICoq YXJndikKICAgICBpZiAob3B0aW5kID49IGFyZ2MpCiAgICAgICAgIGRvbWlkID0gSU5WQUxJRF9E T01JRDsKICAgICBlbHNlIGlmIChvcHRpbmQgPT0gYXJnYyAtIDEpCi0gICAgICAgIGRvbWlkID0g ZmluZF9kb21haW4oYXJndltvcHRpbmRdKTsKKyAgICAgICAgZG9taWQgPSB4ZmluZF9kb21haW4o YXJndltvcHRpbmRdKTsKICAgICBlbHNlIHsKICAgICAgICAgaGVscCgicHNyLWNhdC1zaG93Iik7 CiAgICAgICAgIHJldHVybiAyOwpAQCAtOTUxMiw3ICs5MjkzLDcgQEAgaW50IG1haW5fcWVtdV9t b25pdG9yX2NvbW1hbmQoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogICAgICAgICAvKiBObyBvcHRp b25zICovCiAgICAgfQogCi0gICAgZG9taWQgPSBmaW5kX2RvbWFpbihhcmd2W29wdGluZF0pOwor ICAgIGRvbWlkID0geGZpbmRfZG9tYWluKGFyZ3Zbb3B0aW5kXSk7CiAgICAgY21kID0gYXJndltv cHRpbmQgKyAxXTsKIAogICAgIGlmIChhcmdjIC0gb3B0aW5kID4gMikgewpkaWZmIC0tZ2l0IGEv dG9vbHMveGwveGxfdXRpbHMuYyBiL3Rvb2xzL3hsL3hsX3V0aWxzLmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uZTBiNGNiMjU0NwotLS0gL2Rldi9udWxsCisrKyBiL3Rv b2xzL3hsL3hsX3V0aWxzLmMKQEAgLTAsMCArMSwyNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAw OS0yMDE3IENpdHJpeCBMdGQgYW5kIG90aGVyIGNvbnRyaWJ1dG9ycworICoKKyAqIFRoaXMgcHJv Z3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k aWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKyAqIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b247IHZlcnNpb24gMi4xIG9ubHkuIHdpdGggdGhlIHNwZWNpYWwKKyAqIGV4Y2VwdGlvbiBvbiBs aW5raW5nIGRlc2NyaWJlZCBpbiBmaWxlIExJQ0VOU0UuCisgKgorICogVGhpcyBwcm9ncmFtIGlz IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl IGRldGFpbHMuCisgKi8KKworI2RlZmluZSBfR05VX1NPVVJDRQorCisjaW5jbHVkZSA8bGltaXRz Lmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpbmNsdWRl IDxsaWJ4bC5oPgorI2luY2x1ZGUgPGxpYnhsX3V0aWxzLmg+CisKKyNpbmNsdWRlICJ4bC5oIgor I2luY2x1ZGUgInhsX3V0aWxzLmgiCisKK2V4dGVybiBpbnQgbG9nZmlsZTsKK2V4dGVybiBjb25z dCBjaGFyICpjb21tb25fZG9tbmFtZTsKKwordm9pZCBkb2xvZyhjb25zdCBjaGFyICpmaWxlLCBp bnQgbGluZSwgY29uc3QgY2hhciAqZnVuYywgY2hhciAqZm10LCAuLi4pCit7CisgICAgdmFfbGlz dCBhcDsKKyAgICBjaGFyICpzID0gTlVMTDsKKyAgICBpbnQgcmM7CisKKyAgICB2YV9zdGFydChh cCwgZm10KTsKKyAgICByYyA9IHZhc3ByaW50ZigmcywgZm10LCBhcCk7CisgICAgdmFfZW5kKGFw KTsKKyAgICBpZiAocmMgPj0gMCkKKyAgICAgICAgLyogd2UgaWdub3JlIHdyaXRlIGVycm9ycyBz aW5jZSB3ZSBoYXZlIG5vIHdheSB0byByZXBvcnQgdGhlbTsKKyAgICAgICAgICogdGhlIGFsdGVy bmF0aXZlIHdvdWxkIGJlIHRvIGFib3J0IHRoZSB3aG9sZSBwcm9ncmFtICovCisgICAgICAgIGxp YnhsX3dyaXRlX2V4YWN0bHkoTlVMTCwgbG9nZmlsZSwgcywgcmMsIE5VTEwsIE5VTEwpOworICAg IGZyZWUocyk7Cit9CisKK3ZvaWQgeHZhc3ByaW50ZihjaGFyICoqc3RycCwgY29uc3QgY2hhciAq Zm10LCB2YV9saXN0IGFwKQoreworICAgIGludCByID0gdmFzcHJpbnRmKHN0cnAsIGZtdCwgYXAp OworICAgIGlmIChyID09IC0xKSB7CisgICAgICAgIHBlcnJvcigiYXNwcmludGYgZmFpbGVkIik7 CisgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICB9Cit9CisKK3ZvaWQgeGFzcHJpbnRm KGNoYXIgKipzdHJwLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKyAgICB2YV9saXN0IGFwOwor ICAgIHZhX3N0YXJ0KGFwLCBmbXQpOworICAgIHh2YXNwcmludGYoc3RycCwgZm10LCBhcCk7Cisg ICAgdmFfZW5kKGFwKTsKK30KKwordm9pZCAqeG1hbGxvYyhzaXplX3Qgc3opCit7CisgICAgdm9p ZCAqcjsKKyAgICByID0gbWFsbG9jKHN6KTsKKyAgICBpZiAoIXIpIHsKKyAgICAgICAgZnByaW50 ZihzdGRlcnIsInhsOiBVbmFibGUgdG8gbWFsbG9jICVsdSBieXRlcy5cbiIsCisgICAgICAgICAg ICAgICAgKHVuc2lnbmVkIGxvbmcpc3opOworICAgICAgICBleGl0KC1FUlJPUl9GQUlMKTsKKyAg ICB9CisgICAgcmV0dXJuIHI7Cit9CisKK3ZvaWQgKnhjYWxsb2Moc2l6ZV90IG4sIHNpemVfdCBz eikKK3sKKyAgICB2b2lkICpyID0gY2FsbG9jKG4sIHN6KTsKKyAgICBpZiAoIXIpIHsKKyAgICAg ICAgZnByaW50ZihzdGRlcnIsInhsOiBVbmFibGUgdG8gY2FsbG9jICV6dSBieXRlcy5cbiIsIHN6 Km4pOworICAgICAgICBleGl0KC1FUlJPUl9GQUlMKTsKKyAgICB9CisgICAgcmV0dXJuIHI7Cit9 CisKK3ZvaWQgKnhyZWFsbG9jKHZvaWQgKnB0ciwgc2l6ZV90IHN6KQoreworICAgIHZvaWQgKnI7 CisgICAgaWYgKCFzeikgeworICAgICAgICBmcmVlKHB0cik7CisgICAgICAgIHJldHVybiAwOwor ICAgIH0KKyAgICAvKiByZWFsbG9jKG5vbi0wLCAwKSBoYXMgYSB1c2VsZXNzIHJldHVybiB2YWx1 ZTsKKyAgICAgKiBidXQgeHJlYWxsb2MoYW55dGhpbmcsIDApIGlzIGxpa2UgZnJlZQorICAgICAq LworICAgIHIgPSByZWFsbG9jKHB0ciwgc3opOworICAgIGlmICghcikgeworICAgICAgICBmcHJp bnRmKHN0ZGVyciwieGw6IFVuYWJsZSB0byByZWFsbG9jIHRvICVsdSBieXRlcy5cbiIsCisgICAg ICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpc3opOworICAgICAgICBleGl0KC1FUlJPUl9GQUlM KTsKKyAgICB9CisgICAgcmV0dXJuIHI7Cit9CisKK2NoYXIgKnhzdHJkdXAoY29uc3QgY2hhciAq eCkKK3sKKyAgICBjaGFyICpyOworICAgIHIgPSBzdHJkdXAoeCk7CisgICAgaWYgKCFyKSB7Cisg ICAgICAgIGZwcmludGYoc3RkZXJyLCAieGw6IFVuYWJsZSB0byBzdHJkdXAgYSBzdHJpbmcgb2Yg bGVuZ3RoICV6dS5cbiIsCisgICAgICAgICAgICAgICAgc3RybGVuKHgpKTsKKyAgICAgICAgZXhp dCgtRVJST1JfRkFJTCk7CisgICAgfQorICAgIHJldHVybiByOworfQorCit2b2lkIHhmbHVzaF9z dHJlYW0oRklMRSAqZmgpCit7CisgICAgY29uc3QgY2hhciAqZmhfbmFtZSA9CisgICAgICAgIGZo ID09IHN0ZG91dCA/ICJzdGRvdXQiIDoKKyAgICAgICAgZmggPT0gc3RkZXJyID8gInN0ZGVyciIg OgorICAgICAgICAoYWJvcnQoKSwgKGNvbnN0IGNoYXIqKTApOworCisgICAgaWYgKGZlcnJvcihm aCkgfHwgZmZsdXNoKGZoKSkgeworICAgICAgICBwZXJyb3IoZmhfbmFtZSk7CisgICAgICAgIGV4 aXQoRVhJVF9GQUlMVVJFKTsKKyAgICB9Cit9CisKK3VpbnQzMl90IHhmaW5kX2RvbWFpbihjb25z dCBjaGFyICpwKQoreworICAgIHVpbnQzMl90IGRvbWlkOworICAgIGludCByYzsKKworICAgIHJj ID0gbGlieGxfZG9tYWluX3F1YWxpZmllcl90b19kb21pZChjdHgsIHAsICZkb21pZCk7CisgICAg aWYgKHJjKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXMgaXMgYW4gaW52YWxpZCBkb21h aW4gaWRlbnRpZmllciAocmM9JWQpXG4iLCBwLCByYyk7CisgICAgICAgIGV4aXQoRVhJVF9GQUlM VVJFKTsKKyAgICB9CisgICAgY29tbW9uX2RvbW5hbWUgPSBsaWJ4bF9kb21pZF90b19uYW1lKGN0 eCwgZG9taWQpOworICAgIHJldHVybiBkb21pZDsKK30KKworLyoKKyAqIENhbGxlcnMgc2hvdWxk IHVzZSBTV0lUQ0hfRk9SRUFDSF9PUFQgaW4gcHJlZmVyZW5jZSB0byBjYWxsaW5nIHRoaXMKKyAq IGRpcmVjdGx5LgorICovCitpbnQgeGRlZl9nZXRvcHQoaW50IGFyZ2MsIGNoYXIgKiBjb25zdCBh cmd2W10sCisgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqb3B0c3RyaW5nLAorICAgICAgICAg ICAgICAgIGNvbnN0IHN0cnVjdCBvcHRpb24gKmxvbmdvcHRzLAorICAgICAgICAgICAgICAgIGNv bnN0IGNoYXIqIGhlbHBzdHIsIGludCByZXFhcmdzKQoreworICAgIGludCBvcHQ7CisgICAgY29u c3Qgc3RydWN0IG9wdGlvbiBkZWZfb3B0aW9uc1tdID0geworICAgICAgICBDT01NT05fTE9OR19P UFRTCisgICAgfTsKKworICAgIGlmICghbG9uZ29wdHMpCisgICAgICAgIGxvbmdvcHRzID0gZGVm X29wdGlvbnM7CisKKyAgICBvcHRlcnIgPSAwOworICAgIHdoaWxlICgob3B0ID0gZ2V0b3B0X2xv bmcoYXJnYywgYXJndiwgb3B0c3RyaW5nLCBsb25nb3B0cywgTlVMTCkpID09ICc/JykgeworICAg ICAgICBpZiAob3B0b3B0ID09ICdoJykgeworICAgICAgICAgICAgaGVscChoZWxwc3RyKTsKKyAg ICAgICAgICAgIGV4aXQoMCk7CisgICAgICAgIH0KKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJv cHRpb24gYCVjJyBub3Qgc3VwcG9ydGVkLlxuIiwgb3B0b3B0KTsKKyAgICAgICAgZXhpdCgyKTsK KyAgICB9CisgICAgaWYgKG9wdCA9PSAnaCcpIHsKKyAgICAgICAgaGVscChoZWxwc3RyKTsKKyAg ICAgICAgZXhpdCgwKTsKKyAgICB9CisgICAgaWYgKG9wdCAhPSAtMSkKKyAgICAgICAgcmV0dXJu IG9wdDsKKworICAgIGlmIChhcmdjIC0gb3B0aW5kIDw9IHJlcWFyZ3MgLSAxKSB7CisgICAgICAg IGZwcmludGYoc3RkZXJyLCAiJ3hsICVzJyByZXF1aXJlcyBhdCBsZWFzdCAlZCBhcmd1bWVudCVz LlxuXG4iLAorICAgICAgICAgICAgICAgIGhlbHBzdHIsIHJlcWFyZ3MsIHJlcWFyZ3MgPiAxID8g InMiIDogIiIpOworICAgICAgICBoZWxwKGhlbHBzdHIpOworICAgICAgICBleGl0KDIpOworICAg IH0KKyAgICByZXR1cm4gLTE7Cit9CisKK3ZvaWQgeHN0cmluZ19yZWFsbG9jX2FwcGVuZChjaGFy ICoqYWNjdW11bGF0ZSwgY29uc3QgY2hhciAqbW9yZSkKK3sKKyAgICAvKiBBcHBlbmRzIG1vcmUg dG8gYWNjdW11bGF0ZS4gIEFjY3VtdWxhdGUgaXMgZWl0aGVyIE5VTEwsIG9yCisgICAgICogcG9p bnRzIChhbHdheXMpIHRvIGEgbWFsbG9jJ2QgbnVsLXRlcm1pbmF0ZWQgc3RyaW5nLiAqLworCisg ICAgc2l6ZV90IG9sZGxlbiA9ICphY2N1bXVsYXRlID8gc3RybGVuKCphY2N1bXVsYXRlKSA6IDA7 CisgICAgc2l6ZV90IG1vcmVsZW4gPSBzdHJsZW4obW9yZSkgKyAxLypudWwqLzsKKyAgICBpZiAo b2xkbGVuID4gU1NJWkVfTUFYIHx8IG1vcmVsZW4gPiBTU0laRV9NQVggLSBvbGRsZW4pIHsKKyAg ICAgICAgZnByaW50ZihzdGRlcnIsIkFkZGl0aW9uYWwgY29uZmlnIGRhdGEgZmFyIHRvbyBsYXJn ZVxuIik7CisgICAgICAgIGV4aXQoLUVSUk9SX0ZBSUwpOworICAgIH0KKworICAgICphY2N1bXVs YXRlID0geHJlYWxsb2MoKmFjY3VtdWxhdGUsIG9sZGxlbiArIG1vcmVsZW4pOworICAgIG1lbWNw eSgqYWNjdW11bGF0ZSArIG9sZGxlbiwgbW9yZSwgbW9yZWxlbik7Cit9CisKK3ZvaWQgcHJpbnRf Yml0bWFwKHVpbnQ4X3QgKm1hcCwgaW50IG1hcGxlbiwgRklMRSAqc3RyZWFtKQoreworICAgIGlu dCBpOworICAgIHVpbnQ4X3QgcG1hcCA9IDAsIGJpdG1hc2sgPSAwOworICAgIGludCBmaXJzdHNl dCA9IDAsIHN0YXRlID0gMDsKKworICAgIGZvciAoaSA9IDA7IGkgPCBtYXBsZW47IGkrKykgewor ICAgICAgICBpZiAoaSAlIDggPT0gMCkgeworICAgICAgICAgICAgcG1hcCA9ICptYXArKzsKKyAg ICAgICAgICAgIGJpdG1hc2sgPSAxOworICAgICAgICB9IGVsc2UgYml0bWFzayA8PD0gMTsKKwor ICAgICAgICBzd2l0Y2ggKHN0YXRlKSB7CisgICAgICAgIGNhc2UgMDoKKyAgICAgICAgY2FzZSAy OgorICAgICAgICAgICAgaWYgKChwbWFwICYgYml0bWFzaykgIT0gMCkgeworICAgICAgICAgICAg ICAgIGZpcnN0c2V0ID0gaTsKKyAgICAgICAgICAgICAgICBzdGF0ZSsrOworICAgICAgICAgICAg fQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgY2FzZSAz OgorICAgICAgICAgICAgaWYgKChwbWFwICYgYml0bWFzaykgPT0gMCkgeworICAgICAgICAgICAg ICAgIGZwcmludGYoc3RyZWFtLCAiJXMlZCIsIHN0YXRlID4gMSA/ICIsIiA6ICIiLCBmaXJzdHNl dCk7CisgICAgICAgICAgICAgICAgaWYgKGkgLSAxID4gZmlyc3RzZXQpCisgICAgICAgICAgICAg ICAgICAgIGZwcmludGYoc3RyZWFtLCAiLSVkIiwgaSAtIDEpOworICAgICAgICAgICAgICAgIHN0 YXRlID0gMjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9 CisgICAgfQorICAgIHN3aXRjaCAoc3RhdGUpIHsKKyAgICAgICAgY2FzZSAwOgorICAgICAgICAg ICAgZnByaW50ZihzdHJlYW0sICJub25lIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg Y2FzZSAyOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAg IGlmIChmaXJzdHNldCA9PSAwKSB7CisgICAgICAgICAgICAgICAgZnByaW50ZihzdHJlYW0sICJh bGwiKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgY2Fz ZSAzOgorICAgICAgICAgICAgZnByaW50ZihzdHJlYW0sICIlcyVkIiwgc3RhdGUgPiAxID8gIiwi IDogIiIsIGZpcnN0c2V0KTsKKyAgICAgICAgICAgIGlmIChpIC0gMSA+IGZpcnN0c2V0KQorICAg ICAgICAgICAgICAgIGZwcmludGYoc3RyZWFtLCAiLSVkIiwgaSAtIDEpOworICAgICAgICAgICAg YnJlYWs7CisgICAgfQorfQorCisKKy8qCisgKiBMb2NhbCB2YXJpYWJsZXM6CisgKiBtb2RlOiBD CisgKiBjLWJhc2ljLW9mZnNldDogNAorICogaW5kZW50LXRhYnMtbW9kZTogbmlsCisgKiBFbmQ6 CisgKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3hsL3hsX3V0aWxzLmggYi90b29scy94bC94bF91dGls cy5oCmluZGV4IGViYjkzMDViN2MuLjI3ODZmN2MzY2QgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3hsL3hs X3V0aWxzLmgKKysrIGIvdG9vbHMveGwveGxfdXRpbHMuaApAQCAtMTUsNiArMTUsOCBAQAogI2lm bmRlZiBYTF9VVElMU19ICiAjZGVmaW5lIFhMX1VUSUxTX0gKIAorI2luY2x1ZGUgPGdldG9wdC5o PgorCiAvKiBGb3IgY2FsbHMgd2hpY2ggcmV0dXJuIGFuIGVycm5vIG9uIGZhaWx1cmUgKi8KICNk ZWZpbmUgQ0hLX0VSUk5PVkFMKCBjYWxsICkgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKICAgICAgICAgaW50IGNoa19lcnJub3ZhbCA9IChjYWxsKTsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTU1LDcgKzU3LDcgQEAKICNkZWZp bmUgTE9HKF9mLCBfYS4uLikgICBkb2xvZyhfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fLCBf ZiAiXG4iLCAjI19hKQogCiAvKgotICogV3JhcHMgZGVmX2dldG9wdCBpbnRvIGEgY29udmVuaWVu dCBsb29wK3N3aXRjaCB0byBwcm9jZXNzIGFsbAorICogV3JhcHMgeGRlZl9nZXRvcHQgaW50byBh IGNvbnZlbmllbnQgbG9vcCtzd2l0Y2ggdG8gcHJvY2VzcyBhbGwKICAqIGFyZ3VtZW50cy4gVGhp cyBtYWNybyBpcyBpbnRlbmRlZCB0byBiZSBjYWxsZWQgZnJvbSBtYWluX1hYWCgpLgogICoKICAq ICAgU1dJVENIX0ZPUkVBQ0hfT1BUKGludCAqb3B0LCAiT1BUUyIsCkBAIC0xMTAsMTQgKzExMiwz OSBAQAogICovCiAjZGVmaW5lIFNXSVRDSF9GT1JFQUNIX09QVChvcHQsIG9wdHMsIGxvbmdvcHRz LCAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b21tYW5kbmFtZSwgbnVtX3JlcXVpcmVkX29wdHMpICAgICAgICAgICAgICBcCi0gICAgd2hpbGUg KCgob3B0KSA9IGRlZl9nZXRvcHQoYXJnYywgYXJndiwgImgiIG9wdHMsIChsb25nb3B0cyksICAg ICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbW1hbmRuYW1lKSwgKG51 bV9yZXF1aXJlZF9vcHRzKSkpICE9IC0xKSBcCisgICAgd2hpbGUgKCgob3B0KSA9IHhkZWZfZ2V0 b3B0KGFyZ2MsIGFyZ3YsICJoIiBvcHRzLCAobG9uZ29wdHMpLCAgICAgICBcCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChjb21tYW5kbmFtZSksIChudW1fcmVxdWlyZWRfb3B0cykp KSAhPSAtMSkgXAogICAgICAgICBzd2l0Y2ggKG9wdCkKIAogLyogTXVzdCBiZSBsYXN0IGluIGxp c3QgKi8KICNkZWZpbmUgQ09NTU9OX0xPTkdfT1BUUyB7ImhlbHAiLCAwLCAwLCAnaCd9LCBcCiAg ICAgICAgICAgICAgICAgICAgICAgICAgezAsIDAsIDAsIDB9CiAKK2ludCB4ZGVmX2dldG9wdChp bnQgYXJnYywgY2hhciAqIGNvbnN0IGFyZ3ZbXSwKKyAgICAgICAgICAgICAgICBjb25zdCBjaGFy ICpvcHRzdHJpbmcsCisgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IG9wdGlvbiAqbG9uZ29w dHMsCisgICAgICAgICAgICAgICAgY29uc3QgY2hhciogaGVscHN0ciwgaW50IHJlcWFyZ3MpOwor Cit2b2lkIGRvbG9nKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICpmdW5j LCBjaGFyICpmbXQsIC4uLikKKwlfX2F0dHJpYnV0ZV9fKChmb3JtYXQocHJpbnRmLDQsNSkpKTsK Kwordm9pZCB4dmFzcHJpbnRmKGNoYXIgKipzdHJwLCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3Qg YXApCisJX19hdHRyaWJ1dGVfXygoZm9ybWF0KHByaW50ZiwyLDApKSk7CisKK3ZvaWQgeGFzcHJp bnRmKGNoYXIgKipzdHJwLCBjb25zdCBjaGFyICpmbXQsIC4uLikKKwlfX2F0dHJpYnV0ZV9fKChm b3JtYXQocHJpbnRmLDIsMykpKTsKKwordm9pZCAqeG1hbGxvYyhzaXplX3Qgc3opOwordm9pZCAq eGNhbGxvYyhzaXplX3Qgbiwgc2l6ZV90IHN6KTsKK3ZvaWQgKnhyZWFsbG9jKHZvaWQgKnB0ciwg c2l6ZV90IHN6KTsKK2NoYXIgKnhzdHJkdXAoY29uc3QgY2hhciAqeCk7Cit2b2lkIHhzdHJpbmdf cmVhbGxvY19hcHBlbmQoY2hhciAqKmFjY3VtdWxhdGUsIGNvbnN0IGNoYXIgKm1vcmUpOworCit2 b2lkIHhmbHVzaF9zdHJlYW0oRklMRSAqZmgpOwordWludDMyX3QgeGZpbmRfZG9tYWluKGNvbnN0 IGNoYXIgKnApIF9fYXR0cmlidXRlX18oKHdhcm5fdW51c2VkX3Jlc3VsdCkpOworCit2b2lkIHBy aW50X2JpdG1hcCh1aW50OF90ICptYXAsIGludCBtYXBsZW4sIEZJTEUgKnN0cmVhbSk7CisKICNl bmRpZiAvKiBYTF9VVElMU19IICovCiAKIC8qCi0tIAoyLjExLjAKCgpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhl bi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHBzOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK