Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1oRDwN-0002MO-1o for pgsql-hackers@arkaria.postgresql.org; Thu, 25 Aug 2022 14:34:39 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1oRDwL-0000vP-T2 for pgsql-hackers@arkaria.postgresql.org; Thu, 25 Aug 2022 14:34:37 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1oRDwK-0000vF-QQ for pgsql-hackers@lists.postgresql.org; Thu, 25 Aug 2022 14:34:37 +0000 Received: from out4-smtp.messagingengine.com ([66.111.4.28]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1oRDwF-0008UJ-Mk for pgsql-hackers@postgresql.org; Thu, 25 Aug 2022 14:34:36 +0000 Received: from compute5.internal (compute5.nyi.internal [10.202.2.45]) by mailout.nyi.internal (Postfix) with ESMTP id 8F3635C0100 for ; Thu, 25 Aug 2022 10:34:28 -0400 (EDT) Received: from mailfrontend1 ([10.202.2.162]) by compute5.internal (MEProxy); Thu, 25 Aug 2022 10:34:28 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-type:date:date:feedback-id :feedback-id:from:from:in-reply-to:message-id:mime-version :reply-to:sender:subject:subject:to:to:x-me-proxy:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm1; t=1661438068; x= 1661524468; bh=NKuJuKambkXrVEobcAxZWmOoWgRwYbH2Ca/QFI8UI64=; b=Y hUlFJoLUQZIk47Y0DaILzrpWOJ8h7v61OBCanbMPB9n302bswBKYk8Q4y5VCSmAK mC5R9e9T87bl5LaheOQikhqipGX/8bXRDMf2QFDXEMrVeUOrC9CicGiuJtf5PvzN eMWPu0BHHEHYchnht4FwCeehlNoULhlEf89ymzUbHMedFe7evEigRTupRDrK8uUD UAyJQ0EaXc+EFNqtksbR0TOCZ30NzNkHeF6Q7Muon8GkikV+cdTNZ7b3UQgMKtmJ 2mFmH0U0cxF4uiupbwCauegOKElOXa6XtiqUozB1ZSM+JgLjjQW9HjUP2bfBq03F iCmrI/6FkEZt9gvf0fQ0w== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvfedrvdejfedgjeeiucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucenucfjughrpegtkfffgggfhffuvfesmhdtreertd efjeenucfhrhhomheprfgvthgvrhcugfhishgvnhhtrhgruhhtuceophgvthgvrhdrvghi shgvnhhtrhgruhhtsegvnhhtvghrphhrihhsvggusgdrtghomheqnecuggftrfgrthhtvg hrnhepteevuedvieekieeghfevfffhhfdvjeevleelfeeikeeikedvffegteekuddtfeel necuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomhepphgvth gvrhdrvghishgvnhhtrhgruhhtsegvnhhtvghrphhrihhsvggusgdrtghomh X-ME-Proxy: Feedback-ID: i131946ab:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA for ; Thu, 25 Aug 2022 10:34:27 -0400 (EDT) Content-Type: multipart/mixed; boundary="------------CINrYwT0tzwMrlP3v0VE2Krz" Message-ID: <7c0232ef-7b44-68db-599d-b327d0640a77@enterprisedb.com> Date: Thu, 25 Aug 2022 16:34:26 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:91.0) Gecko/20100101 Thunderbird/91.12.0 Content-Language: en-US From: Peter Eisentraut Subject: libpq error message refactoring To: pgsql-hackers List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------CINrYwT0tzwMrlP3v0VE2Krz Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit libpq now contains a mix of error message strings that end with newlines and don't end with newlines, due to some newer code paths with new ways of passing errors around. This has now gotten me confused a few too many times both during development and translation. So I looked into whether we can unify this, similar to how we have done elsewhere (e.g., pg_upgrade). I came up with the attached patch. It's not complete, but it shows the idea and it looks like a nice simplification to me. Thoughts on this approach? --------------CINrYwT0tzwMrlP3v0VE2Krz Content-Type: text/plain; charset=UTF-8; name="v1-0001-WIP-libpq_append_error.patch" Content-Disposition: attachment; filename="v1-0001-WIP-libpq_append_error.patch" Content-Transfer-Encoding: base64 RnJvbSBlNTQ3ZDk5OTMyMzJlMjBjOWU2OTZiZDdmYWNiY2IzZGU0YWZkZDZjIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBFaXNlbnRyYXV0IDxwZXRlckBlaXNlbnRy YXV0Lm9yZz4KRGF0ZTogVGh1LCA0IEF1ZyAyMDIyIDIzOjMxOjU4ICswMzAwClN1YmplY3Q6 IFtQQVRDSCB2MV0gV0lQOiBsaWJwcV9hcHBlbmRfZXJyb3IKCi0tLQogc3JjL2ludGVyZmFj ZXMvbGlicHEvZmUtY29ubmVjdC5jICB8IDI3MSArKysrKysrKysrKy0tLS0tLS0tLS0tLS0t LS0tLQogc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtZXhlYy5jICAgICB8IDEwOSArKysrLS0t LS0tLS0KIHNyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLW1pc2MuYyAgICAgfCAgMTUgKysKIHNy Yy9pbnRlcmZhY2VzL2xpYnBxL2xpYnBxLWludC5oICAgfCAgIDIgKwogc3JjL2ludGVyZmFj ZXMvbGlicHEvbmxzLm1rICAgICAgICB8ICAgNCArLQogc3JjL2ludGVyZmFjZXMvbGlicHEv cHFleHBidWZmZXIuYyB8ICAyNyArKy0KIHNyYy9pbnRlcmZhY2VzL2xpYnBxL3BxZXhwYnVm ZmVyLmggfCAgIDIgKwogNyBmaWxlcyBjaGFuZ2VkLCAxODYgaW5zZXJ0aW9ucygrKSwgMjQ0 IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWNv bm5lY3QuYyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWNvbm5lY3QuYwppbmRleCA4Y2Vm ZWYyMGQxLi43OWI5MzkyODU4IDEwMDY0NAotLS0gYS9zcmMvaW50ZXJmYWNlcy9saWJwcS9m ZS1jb25uZWN0LmMKKysrIGIvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtY29ubmVjdC5jCkBA IC04OTYsOCArODk2LDcgQEAgZmlsbFBHY29ubihQR2Nvbm4gKmNvbm4sIFBRY29ubmluZm9P cHRpb24gKmNvbm5PcHRpb25zKQogCQkJCSpjb25ubWVtYmVyID0gc3RyZHVwKHRtcCk7CiAJ CQkJaWYgKCpjb25ubWVtYmVyID09IE5VTEwpCiAJCQkJewotCQkJCQlhcHBlbmRQUUV4cEJ1 ZmZlclN0cigmY29ubi0+ZXJyb3JNZXNzYWdlLAotCQkJCQkJCQkJCSBsaWJwcV9nZXR0ZXh0 KCJvdXQgb2YgbWVtb3J5XG4iKSk7CisJCQkJCWxpYnBxX2FwcGVuZF9lcnJvcihjb25uLCAi b3V0IG9mIG1lbW9yeSIpOwogCQkJCQlyZXR1cm4gZmFsc2U7CiAJCQkJfQogCQkJfQpAQCAt MTA3OSw5ICsxMDc4LDggQEAgY29ubmVjdE9wdGlvbnMyKFBHY29ubiAqY29ubikKIAkJaWYg KG1vcmUgfHwgaSAhPSBjb25uLT5uY29ubmhvc3QpCiAJCXsKIAkJCWNvbm4tPnN0YXR1cyA9 IENPTk5FQ1RJT05fQkFEOwotCQkJYXBwZW5kUFFFeHBCdWZmZXIoJmNvbm4tPmVycm9yTWVz c2FnZSwKLQkJCQkJCQkgIGxpYnBxX2dldHRleHQoImNvdWxkIG5vdCBtYXRjaCAlZCBob3N0 IG5hbWVzIHRvICVkIGhvc3RhZGRyIHZhbHVlc1xuIiksCi0JCQkJCQkJICBjb3VudF9jb21t YV9zZXBhcmF0ZWRfZWxlbXMoY29ubi0+cGdob3N0KSwgY29ubi0+bmNvbm5ob3N0KTsKKwkJ CWxpYnBxX2FwcGVuZF9lcnJvcihjb25uLCAiY291bGQgbm90IG1hdGNoICVkIGhvc3QgbmFt ZXMgdG8gJWQgaG9zdGFkZHIgdmFsdWVzIiwKKwkJCQkJCQkgICBjb3VudF9jb21tYV9zZXBh cmF0ZWRfZWxlbXMoY29ubi0+cGdob3N0KSwgY29ubi0+bmNvbm5ob3N0KTsKIAkJCXJldHVy biBmYWxzZTsKIAkJfQogCX0KQEAgLTExNjAsOSArMTE1OCw4IEBAIGNvbm5lY3RPcHRpb25z MihQR2Nvbm4gKmNvbm4pCiAJCWVsc2UgaWYgKG1vcmUgfHwgaSAhPSBjb25uLT5uY29ubmhv c3QpCiAJCXsKIAkJCWNvbm4tPnN0YXR1cyA9IENPTk5FQ1RJT05fQkFEOwotCQkJYXBwZW5k UFFFeHBCdWZmZXIoJmNvbm4tPmVycm9yTWVzc2FnZSwKLQkJCQkJCQkgIGxpYnBxX2dldHRl eHQoImNvdWxkIG5vdCBtYXRjaCAlZCBwb3J0IG51bWJlcnMgdG8gJWQgaG9zdHNcbiIpLAot CQkJCQkJCSAgY291bnRfY29tbWFfc2VwYXJhdGVkX2VsZW1zKGNvbm4tPnBncG9ydCksIGNv bm4tPm5jb25uaG9zdCk7CisJCQlsaWJwcV9hcHBlbmRfZXJyb3IoY29ubiwgImNvdWxkIG5v dCBtYXRjaCAlZCBwb3J0IG51bWJlcnMgdG8gJWQgaG9zdHMiLAorCQkJCQkJCSAgIGNvdW50 X2NvbW1hX3NlcGFyYXRlZF9lbGVtcyhjb25uLT5wZ3BvcnQpLCBjb25uLT5uY29ubmhvc3Qp OwogCQkJcmV0dXJuIGZhbHNlOwogCQl9CiAJfQpAQCAtMTI1MCw5ICsxMjQ3LDggQEAgY29u bmVjdE9wdGlvbnMyKFBHY29ubiAqY29ubikKIAkJCSYmIHN0cmNtcChjb25uLT5jaGFubmVs X2JpbmRpbmcsICJyZXF1aXJlIikgIT0gMCkKIAkJewogCQkJY29ubi0+c3RhdHVzID0gQ09O TkVDVElPTl9CQUQ7Ci0JCQlhcHBlbmRQUUV4cEJ1ZmZlcigmY29ubi0+ZXJyb3JNZXNzYWdl LAotCQkJCQkJCSAgbGlicHFfZ2V0dGV4dCgiaW52YWxpZCAlcyB2YWx1ZTogXCIlc1wiXG4i KSwKLQkJCQkJCQkgICJjaGFubmVsX2JpbmRpbmciLCBjb25uLT5jaGFubmVsX2JpbmRpbmcp OworCQkJbGlicHFfYXBwZW5kX2Vycm9yKGNvbm4sICJpbnZhbGlkICVzIHZhbHVlOiBcIiVz XCIiLAorCQkJCQkJCSAgICJjaGFubmVsX2JpbmRpbmciLCBjb25uLT5jaGFubmVsX2JpbmRp bmcpOwogCQkJcmV0dXJuIGZhbHNlOwogCQl9CiAJfQpAQCAtMTI3Niw5ICsxMjcyLDggQEAg Y29ubmVjdE9wdGlvbnMyKFBHY29ubiAqY29ubikKIAkJCSYmIHN0cmNtcChjb25uLT5zc2xt b2RlLCAidmVyaWZ5LWZ1bGwiKSAhPSAwKQogCQl7CiAJCQljb25uLT5zdGF0dXMgPSBDT05O RUNUSU9OX0JBRDsKLQkJCWFwcGVuZFBRRXhwQnVmZmVyKCZjb25uLT5lcnJvck1lc3NhZ2Us Ci0JCQkJCQkJICBsaWJwcV9nZXR0ZXh0KCJpbnZhbGlkICVzIHZhbHVlOiBcIiVzXCJcbiIp LAotCQkJCQkJCSAgInNzbG1vZGUiLCBjb25uLT5zc2xtb2RlKTsKKwkJCWxpYnBxX2FwcGVu ZF9lcnJvcihjb25uLCAiaW52YWxpZCAlcyB2YWx1ZTogXCIlc1wiIiwKKwkJCQkJCQkgICAi c3NsbW9kZSIsIGNvbm4tPnNzbG1vZGUpOwogCQkJcmV0dXJuIGZhbHNlOwogCQl9CiAKQEAg LTEyOTcsOSArMTI5Miw4IEBAIGNvbm5lY3RPcHRpb25zMihQR2Nvbm4gKmNvbm4pCiAJCQlj YXNlICdyJzoJCQkvKiAicmVxdWlyZSIgKi8KIAkJCWNhc2UgJ3YnOgkJCS8qICJ2ZXJpZnkt Y2EiIG9yICJ2ZXJpZnktZnVsbCIgKi8KIAkJCQljb25uLT5zdGF0dXMgPSBDT05ORUNUSU9O X0JBRDsKLQkJCQlhcHBlbmRQUUV4cEJ1ZmZlcigmY29ubi0+ZXJyb3JNZXNzYWdlLAotCQkJ CQkJCQkgIGxpYnBxX2dldHRleHQoInNzbG1vZGUgdmFsdWUgXCIlc1wiIGludmFsaWQgd2hl biBTU0wgc3VwcG9ydCBpcyBub3QgY29tcGlsZWQgaW5cbiIpLAotCQkJCQkJCQkgIGNvbm4t PnNzbG1vZGUpOworCQkJCWxpYnBxX2FwcGVuZF9lcnJvcihjb25uLCAic3NsbW9kZSB2YWx1 ZSBcIiVzXCIgaW52YWxpZCB3aGVuIFNTTCBzdXBwb3J0IGlzIG5vdCBjb21waWxlZCBpbiIs CisJCQkJCQkJCSAgIGNvbm4tPnNzbG1vZGUpOwogCQkJCXJldHVybiBmYWxzZTsKIAkJfQog I2VuZGlmCkBAIC0xMzE4LDE5ICsxMzEyLDE3IEBAIGNvbm5lY3RPcHRpb25zMihQR2Nvbm4g KmNvbm4pCiAJaWYgKCFzc2xWZXJpZnlQcm90b2NvbFZlcnNpb24oY29ubi0+c3NsX21pbl9w cm90b2NvbF92ZXJzaW9uKSkKIAl7CiAJCWNvbm4tPnN0YXR1cyA9IENPTk5FQ1RJT05fQkFE OwotCQlhcHBlbmRQUUV4cEJ1ZmZlcigmY29ubi0+ZXJyb3JNZXNzYWdlLAotCQkJCQkJICBs aWJwcV9nZXR0ZXh0KCJpbnZhbGlkICVzIHZhbHVlOiBcIiVzXCJcbiIpLAotCQkJCQkJICAi c3NsX21pbl9wcm90b2NvbF92ZXJzaW9uIiwKLQkJCQkJCSAgY29ubi0+c3NsX21pbl9wcm90 b2NvbF92ZXJzaW9uKTsKKwkJbGlicHFfYXBwZW5kX2Vycm9yKGNvbm4sICJpbnZhbGlkICVz IHZhbHVlOiBcIiVzXCIiLAorCQkJCQkJICAgInNzbF9taW5fcHJvdG9jb2xfdmVyc2lvbiIs CisJCQkJCQkgICBjb25uLT5zc2xfbWluX3Byb3RvY29sX3ZlcnNpb24pOwogCQlyZXR1cm4g ZmFsc2U7CiAJfQogCWlmICghc3NsVmVyaWZ5UHJvdG9jb2xWZXJzaW9uKGNvbm4tPnNzbF9t YXhfcHJvdG9jb2xfdmVyc2lvbikpCiAJewogCQljb25uLT5zdGF0dXMgPSBDT05ORUNUSU9O X0JBRDsKLQkJYXBwZW5kUFFFeHBCdWZmZXIoJmNvbm4tPmVycm9yTWVzc2FnZSwKLQkJCQkJ CSAgbGlicHFfZ2V0dGV4dCgiaW52YWxpZCAlcyB2YWx1ZTogXCIlc1wiXG4iKSwKLQkJCQkJ CSAgInNzbF9tYXhfcHJvdG9jb2xfdmVyc2lvbiIsCi0JCQkJCQkgIGNvbm4tPnNzbF9tYXhf cHJvdG9jb2xfdmVyc2lvbik7CisJCWxpYnBxX2FwcGVuZF9lcnJvcihjb25uLCAiaW52YWxp ZCAlcyB2YWx1ZTogXCIlc1wiIiwKKwkJCQkJCSAgICJzc2xfbWF4X3Byb3RvY29sX3ZlcnNp b24iLAorCQkJCQkJICAgY29ubi0+c3NsX21heF9wcm90b2NvbF92ZXJzaW9uKTsKIAkJcmV0 dXJuIGZhbHNlOwogCX0KIApAQCAtMTM0NSw4ICsxMzM3LDcgQEAgY29ubmVjdE9wdGlvbnMy KFBHY29ubiAqY29ubikKIAkJCQkJCQkJY29ubi0+c3NsX21heF9wcm90b2NvbF92ZXJzaW9u KSkKIAl7CiAJCWNvbm4tPnN0YXR1cyA9IENPTk5FQ1RJT05fQkFEOwotCQlhcHBlbmRQUUV4 cEJ1ZmZlclN0cigmY29ubi0+ZXJyb3JNZXNzYWdlLAotCQkJCQkJCSBsaWJwcV9nZXR0ZXh0 KCJpbnZhbGlkIFNTTCBwcm90b2NvbCB2ZXJzaW9uIHJhbmdlXG4iKSk7CisJCWxpYnBxX2Fw cGVuZF9lcnJvcihjb25uLCAiaW52YWxpZCBTU0wgcHJvdG9jb2wgdmVyc2lvbiByYW5nZSIp OwogCQlyZXR1cm4gZmFsc2U7CiAJfQogCkBAIC0xMzYwLDE5ICsxMzUxLDE1IEBAIGNvbm5l Y3RPcHRpb25zMihQR2Nvbm4gKmNvbm4pCiAJCQlzdHJjbXAoY29ubi0+Z3NzZW5jbW9kZSwg InJlcXVpcmUiKSAhPSAwKQogCQl7CiAJCQljb25uLT5zdGF0dXMgPSBDT05ORUNUSU9OX0JB RDsKLQkJCWFwcGVuZFBRRXhwQnVmZmVyKCZjb25uLT5lcnJvck1lc3NhZ2UsCi0JCQkJCQkJ ICBsaWJwcV9nZXR0ZXh0KCJpbnZhbGlkICVzIHZhbHVlOiBcIiVzXCJcbiIpLAotCQkJCQkJ CSAgImdzc2VuY21vZGUiLAotCQkJCQkJCSAgY29ubi0+Z3NzZW5jbW9kZSk7CisJCQlsaWJw cV9hcHBlbmRfZXJyb3IoY29ubiwgImludmFsaWQgJXMgdmFsdWU6IFwiJXNcIiIsICJnc3Nl bmNtb2RlIiwgY29ubi0+Z3NzZW5jbW9kZSk7CiAJCQlyZXR1cm4gZmFsc2U7CiAJCX0KICNp Zm5kZWYgRU5BQkxFX0dTUwogCQlpZiAoc3RyY21wKGNvbm4tPmdzc2VuY21vZGUsICJyZXF1 aXJlIikgPT0gMCkKIAkJewogCQkJY29ubi0+c3RhdHVzID0gQ09OTkVDVElPTl9CQUQ7Ci0J CQlhcHBlbmRQUUV4cEJ1ZmZlcigmY29ubi0+ZXJyb3JNZXNzYWdlLAotCQkJCQkJCSAgbGli cHFfZ2V0dGV4dCgiZ3NzZW5jbW9kZSB2YWx1ZSBcIiVzXCIgaW52YWxpZCB3aGVuIEdTU0FQ SSBzdXBwb3J0IGlzIG5vdCBjb21waWxlZCBpblxuIiksCi0JCQkJCQkJICBjb25uLT5nc3Nl bmNtb2RlKTsKKwkJCWxpYnBxX2FwcGVuZF9lcnJvcihjb25uLCAiZ3NzZW5jbW9kZSB2YWx1 ZSBcIiVzXCIgaW52YWxpZCB3aGVuIEdTU0FQSSBzdXBwb3J0IGlzIG5vdCBjb21waWxlZCBp biIsCisJCQkJCQkJICAgY29ubi0+Z3NzZW5jbW9kZSk7CiAJCQlyZXR1cm4gZmFsc2U7CiAJ CX0KICNlbmRpZgpAQCAtMTQwNCwxMCArMTM5MSw5IEBAIGNvbm5lY3RPcHRpb25zMihQR2Nv bm4gKmNvbm4pCiAJCWVsc2UKIAkJewogCQkJY29ubi0+c3RhdHVzID0gQ09OTkVDVElPTl9C QUQ7Ci0JCQlhcHBlbmRQUUV4cEJ1ZmZlcigmY29ubi0+ZXJyb3JNZXNzYWdlLAotCQkJCQkJ CSAgbGlicHFfZ2V0dGV4dCgiaW52YWxpZCAlcyB2YWx1ZTogXCIlc1wiXG4iKSwKLQkJCQkJ CQkgICJ0YXJnZXRfc2Vzc2lvbl9hdHRycyIsCi0JCQkJCQkJICBjb25uLT50YXJnZXRfc2Vz c2lvbl9hdHRycyk7CisJCQlsaWJwcV9hcHBlbmRfZXJyb3IoY29ubiwgImludmFsaWQgJXMg dmFsdWU6IFwiJXNcIiIsCisJCQkJCQkJICAgInRhcmdldF9zZXNzaW9uX2F0dHJzIiwKKwkJ CQkJCQkgICBjb25uLT50YXJnZXRfc2Vzc2lvbl9hdHRycyk7CiAJCQlyZXR1cm4gZmFsc2U7 CiAJCX0KIAl9CkBAIC0xNDM3LDggKzE0MjMsNyBAQCBjb25uZWN0T3B0aW9uczIoUEdjb25u ICpjb25uKQogCiBvb21fZXJyb3I6CiAJY29ubi0+c3RhdHVzID0gQ09OTkVDVElPTl9CQUQ7 Ci0JYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNvbm4tPmVycm9yTWVzc2FnZSwKLQkJCQkJCSBs aWJwcV9nZXR0ZXh0KCJvdXQgb2YgbWVtb3J5XG4iKSk7CisJbGlicHFfYXBwZW5kX2Vycm9y KGNvbm4sICJvdXQgb2YgbWVtb3J5Iik7CiAJcmV0dXJuIGZhbHNlOwogfQogCkBAIC0xNjAw LDggKzE1ODUsNyBAQCBQUXNldGRiTG9naW4oY29uc3QgY2hhciAqcGdob3N0LCBjb25zdCBj aGFyICpwZ3BvcnQsIGNvbnN0IGNoYXIgKnBnb3B0aW9ucywKIAogb29tX2Vycm9yOgogCWNv bm4tPnN0YXR1cyA9IENPTk5FQ1RJT05fQkFEOwotCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZj b25uLT5lcnJvck1lc3NhZ2UsCi0JCQkJCQkgbGlicHFfZ2V0dGV4dCgib3V0IG9mIG1lbW9y eVxuIikpOworCWxpYnBxX2FwcGVuZF9lcnJvcihjb25uLCAib3V0IG9mIG1lbW9yeSIpOwog CXJldHVybiBjb25uOwogfQogCkBAIC0xNjI0LDkgKzE2MDgsOCBAQCBjb25uZWN0Tm9EZWxh eShQR2Nvbm4gKmNvbm4pCiAJewogCQljaGFyCQlzZWJ1ZltQR19TVFJFUlJPUl9SX0JVRkxF Tl07CiAKLQkJYXBwZW5kUFFFeHBCdWZmZXIoJmNvbm4tPmVycm9yTWVzc2FnZSwKLQkJCQkJ CSAgbGlicHFfZ2V0dGV4dCgiY291bGQgbm90IHNldCBzb2NrZXQgdG8gVENQIG5vIGRlbGF5 IG1vZGU6ICVzXG4iKSwKLQkJCQkJCSAgU09DS19TVFJFUlJPUihTT0NLX0VSUk5PLCBzZWJ1 Ziwgc2l6ZW9mKHNlYnVmKSkpOworCQlsaWJwcV9hcHBlbmRfZXJyb3IoY29ubiwgImNvdWxk IG5vdCBzZXQgc29ja2V0IHRvIFRDUCBubyBkZWxheSBtb2RlOiAlcyIsCisJCQkJCQkgICBT T0NLX1NUUkVSUk9SKFNPQ0tfRVJSTk8sIHNlYnVmLCBzaXplb2Yoc2VidWYpKSk7CiAJCXJl dHVybiAwOwogCX0KICNlbmRpZgpAQCAtMTc0MCwxMSArMTcyMyw5IEBAIGNvbm5lY3RGYWls dXJlTWVzc2FnZShQR2Nvbm4gKmNvbm4sIGludCBlcnJvcm5vKQogCQkJCQkgIFNPQ0tfU1RS RVJST1IoZXJyb3Jubywgc2VidWYsIHNpemVvZihzZWJ1ZikpKTsKIAogCWlmIChjb25uLT5y YWRkci5hZGRyLnNzX2ZhbWlseSA9PSBBRl9VTklYKQotCQlhcHBlbmRQUUV4cEJ1ZmZlclN0 cigmY29ubi0+ZXJyb3JNZXNzYWdlLAotCQkJCQkJCSBsaWJwcV9nZXR0ZXh0KCJcdElzIHRo ZSBzZXJ2ZXIgcnVubmluZyBsb2NhbGx5IGFuZCBhY2NlcHRpbmcgY29ubmVjdGlvbnMgb24g dGhhdCBzb2NrZXQ/XG4iKSk7CisJCWxpYnBxX2FwcGVuZF9lcnJvcihjb25uLCAiXHRJcyB0 aGUgc2VydmVyIHJ1bm5pbmcgbG9jYWxseSBhbmQgYWNjZXB0aW5nIGNvbm5lY3Rpb25zIG9u IHRoYXQgc29ja2V0PyIpOwogCWVsc2UKLQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNvbm4t PmVycm9yTWVzc2FnZSwKLQkJCQkJCQkgbGlicHFfZ2V0dGV4dCgiXHRJcyB0aGUgc2VydmVy IHJ1bm5pbmcgb24gdGhhdCBob3N0IGFuZCBhY2NlcHRpbmcgVENQL0lQIGNvbm5lY3Rpb25z P1xuIikpOworCQlsaWJwcV9hcHBlbmRfZXJyb3IoY29ubiwgIlx0SXMgdGhlIHNlcnZlciBy dW5uaW5nIG9uIHRoYXQgaG9zdCBhbmQgYWNjZXB0aW5nIFRDUC9JUCBjb25uZWN0aW9ucz8i KTsKIH0KIAogLyoKQEAgLTE4MDcsOSArMTc4OCw4IEBAIHBhcnNlX2ludF9wYXJhbShjb25z dCBjaGFyICp2YWx1ZSwgaW50ICpyZXN1bHQsIFBHY29ubiAqY29ubiwKIAlyZXR1cm4gdHJ1 ZTsKIAogZXJyb3I6Ci0JYXBwZW5kUFFFeHBCdWZmZXIoJmNvbm4tPmVycm9yTWVzc2FnZSwK LQkJCQkJICBsaWJwcV9nZXR0ZXh0KCJpbnZhbGlkIGludGVnZXIgdmFsdWUgXCIlc1wiIGZv ciBjb25uZWN0aW9uIG9wdGlvbiBcIiVzXCJcbiIpLAotCQkJCQkgIHZhbHVlLCBjb250ZXh0 KTsKKwlsaWJwcV9hcHBlbmRfZXJyb3IoY29ubiwgImludmFsaWQgaW50ZWdlciB2YWx1ZSBc IiVzXCIgZm9yIGNvbm5lY3Rpb24gb3B0aW9uIFwiJXNcIiIsCisJCQkJCSAgIHZhbHVlLCBj b250ZXh0KTsKIAlyZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTE4MzcsMTEgKzE4MTcsMTAgQEAg c2V0S2VlcGFsaXZlc0lkbGUoUEdjb25uICpjb25uKQogCXsKIAkJY2hhcgkJc2VidWZbUEdf U1RSRVJST1JfUl9CVUZMRU5dOwogCi0JCWFwcGVuZFBRRXhwQnVmZmVyKCZjb25uLT5lcnJv ck1lc3NhZ2UsCi0JCQkJCQkgIGxpYnBxX2dldHRleHQoIiVzKCVzKSBmYWlsZWQ6ICVzXG4i KSwKLQkJCQkJCSAgInNldHNvY2tvcHQiLAotCQkJCQkJICBQR19UQ1BfS0VFUEFMSVZFX0lE TEVfU1RSLAotCQkJCQkJICBTT0NLX1NUUkVSUk9SKFNPQ0tfRVJSTk8sIHNlYnVmLCBzaXpl b2Yoc2VidWYpKSk7CisJCWxpYnBxX2FwcGVuZF9lcnJvcihjb25uLCAiJXMoJXMpIGZhaWxl ZDogJXMiLAorCQkJCQkJICAgInNldHNvY2tvcHQiLAorCQkJCQkJICAgUEdfVENQX0tFRVBB TElWRV9JRExFX1NUUiwKKwkJCQkJCSAgIFNPQ0tfU1RSRVJST1IoU09DS19FUlJOTywgc2Vi dWYsIHNpemVvZihzZWJ1ZikpKTsKIAkJcmV0dXJuIDA7CiAJfQogI2VuZGlmCkBAIC0xODcy LDExICsxODUxLDEwIEBAIHNldEtlZXBhbGl2ZXNJbnRlcnZhbChQR2Nvbm4gKmNvbm4pCiAJ ewogCQljaGFyCQlzZWJ1ZltQR19TVFJFUlJPUl9SX0JVRkxFTl07CiAKLQkJYXBwZW5kUFFF eHBCdWZmZXIoJmNvbm4tPmVycm9yTWVzc2FnZSwKLQkJCQkJCSAgbGlicHFfZ2V0dGV4dCgi JXMoJXMpIGZhaWxlZDogJXNcbiIpLAotCQkJCQkJICAic2V0c29ja29wdCIsCi0JCQkJCQkg ICJUQ1BfS0VFUElOVFZMIiwKLQkJCQkJCSAgU09DS19TVFJFUlJPUihTT0NLX0VSUk5PLCBz ZWJ1Ziwgc2l6ZW9mKHNlYnVmKSkpOworCQlsaWJwcV9hcHBlbmRfZXJyb3IoY29ubiwgIiVz KCVzKSBmYWlsZWQ6ICVzIiwKKwkJCQkJCSAgICJzZXRzb2Nrb3B0IiwKKwkJCQkJCSAgICJU Q1BfS0VFUElOVFZMIiwKKwkJCQkJCSAgIFNPQ0tfU1RSRVJST1IoU09DS19FUlJOTywgc2Vi dWYsIHNpemVvZihzZWJ1ZikpKTsKIAkJcmV0dXJuIDA7CiAJfQogI2VuZGlmCkBAIC0xOTA4 LDExICsxODg2LDEwIEBAIHNldEtlZXBhbGl2ZXNDb3VudChQR2Nvbm4gKmNvbm4pCiAJewog CQljaGFyCQlzZWJ1ZltQR19TVFJFUlJPUl9SX0JVRkxFTl07CiAKLQkJYXBwZW5kUFFFeHBC dWZmZXIoJmNvbm4tPmVycm9yTWVzc2FnZSwKLQkJCQkJCSAgbGlicHFfZ2V0dGV4dCgiJXMo JXMpIGZhaWxlZDogJXNcbiIpLAotCQkJCQkJICAic2V0c29ja29wdCIsCi0JCQkJCQkgICJU Q1BfS0VFUENOVCIsCi0JCQkJCQkgIFNPQ0tfU1RSRVJST1IoU09DS19FUlJOTywgc2VidWYs IHNpemVvZihzZWJ1ZikpKTsKKwkJbGlicHFfYXBwZW5kX2Vycm9yKGNvbm4sICIlcyglcykg ZmFpbGVkOiAlcyIsCisJCQkJCQkgICAic2V0c29ja29wdCIsCisJCQkJCQkgICAiVENQX0tF RVBDTlQiLAorCQkJCQkJICAgU09DS19TVFJFUlJPUihTT0NLX0VSUk5PLCBzZWJ1Ziwgc2l6 ZW9mKHNlYnVmKSkpOwogCQlyZXR1cm4gMDsKIAl9CiAjZW5kaWYKQEAgLTE5NzMsOCArMTk1 MCw3IEBAIHByZXBLZWVwYWxpdmVzV2luMzIoUEdjb25uICpjb25uKQogCiAJaWYgKCFzZXRL ZWVwYWxpdmVzV2luMzIoY29ubi0+c29jaywgaWRsZSwgaW50ZXJ2YWwpKQogCXsKLQkJYXBw ZW5kUFFFeHBCdWZmZXIoJmNvbm4tPmVycm9yTWVzc2FnZSwKLQkJCQkJCSAgbGlicHFfZ2V0 dGV4dCgiJXMoJXMpIGZhaWxlZDogZXJyb3IgY29kZSAlZFxuIiksCisJCWxpYnBxX2FwcGVu ZF9lcnJvcihjb25uLCAiJXMoJXMpIGZhaWxlZDogZXJyb3IgY29kZSAlZCIsCiAJCQkJCQkg ICJXU0FJb2N0bCIsICJTSU9fS0VFUEFMSVZFX1ZBTFMiLAogCQkJCQkJICBXU0FHZXRMYXN0 RXJyb3IoKSk7CiAJCXJldHVybiAwOwpAQCAtMjAwOCwxMSArMTk4NCwxMCBAQCBzZXRUQ1BV c2VyVGltZW91dChQR2Nvbm4gKmNvbm4pCiAJewogCQljaGFyCQlzZWJ1ZlsyNTZdOwogCi0J CWFwcGVuZFBRRXhwQnVmZmVyKCZjb25uLT5lcnJvck1lc3NhZ2UsCi0JCQkJCQkgIGxpYnBx X2dldHRleHQoIiVzKCVzKSBmYWlsZWQ6ICVzXG4iKSwKLQkJCQkJCSAgInNldHNvY2tvcHQi LAotCQkJCQkJICAiVENQX1VTRVJfVElNRU9VVCIsCi0JCQkJCQkgIFNPQ0tfU1RSRVJST1Io U09DS19FUlJOTywgc2VidWYsIHNpemVvZihzZWJ1ZikpKTsKKwkJbGlicHFfYXBwZW5kX2Vy cm9yKGNvbm4sICIlcyglcykgZmFpbGVkOiAlcyIsCisJCQkJCQkgICAic2V0c29ja29wdCIs CisJCQkJCQkgICAiVENQX1VTRVJfVElNRU9VVCIsCisJCQkJCQkgICBTT0NLX1NUUkVSUk9S KFNPQ0tfRVJSTk8sIHNlYnVmLCBzaXplb2Yoc2VidWYpKSk7CiAJCXJldHVybiAwOwogCX0K ICNlbmRpZgpAQCAtMjI4OCw4ICsyMjYzLDcgQEAgUFFjb25uZWN0UG9sbChQR2Nvbm4gKmNv bm4pCiAJCQlicmVhazsKIAogCQlkZWZhdWx0OgotCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIo JmNvbm4tPmVycm9yTWVzc2FnZSwKLQkJCQkJCQkJIGxpYnBxX2dldHRleHQoImludmFsaWQg Y29ubmVjdGlvbiBzdGF0ZSwgcHJvYmFibHkgaW5kaWNhdGl2ZSBvZiBtZW1vcnkgY29ycnVw dGlvblxuIikpOworCQkJbGlicHFfYXBwZW5kX2Vycm9yKGNvbm4sICJpbnZhbGlkIGNvbm5l Y3Rpb24gc3RhdGUsIHByb2JhYmx5IGluZGljYXRpdmUgb2YgbWVtb3J5IGNvcnJ1cHRpb24i KTsKIAkJCWdvdG8gZXJyb3JfcmV0dXJuOwogCX0KIApAQCAtMjM2Nyw5ICsyMzQxLDcgQEAg UFFjb25uZWN0UG9sbChQR2Nvbm4gKmNvbm4pCiAKIAkJCWlmICh0aGlzcG9ydCA8IDEgfHwg dGhpc3BvcnQgPiA2NTUzNSkKIAkJCXsKLQkJCQlhcHBlbmRQUUV4cEJ1ZmZlcigmY29ubi0+ ZXJyb3JNZXNzYWdlLAotCQkJCQkJCQkgIGxpYnBxX2dldHRleHQoImludmFsaWQgcG9ydCBu dW1iZXI6IFwiJXNcIlxuIiksCi0JCQkJCQkJCSAgY2gtPnBvcnQpOworCQkJCWxpYnBxX2Fw cGVuZF9lcnJvcihjb25uLCAiaW52YWxpZCBwb3J0IG51bWJlcjogXCIlc1wiIiwgY2gtPnBv cnQpOwogCQkJCWdvdG8ga2VlcF9nb2luZzsKIAkJCX0KIAkJfQpAQCAtMjM4Myw5ICsyMzU1 LDggQEAgUFFjb25uZWN0UG9sbChQR2Nvbm4gKmNvbm4pCiAJCQkJCQkJCQkJICZjb25uLT5h ZGRybGlzdCk7CiAJCQkJaWYgKHJldCB8fCAhY29ubi0+YWRkcmxpc3QpCiAJCQkJewotCQkJ CQlhcHBlbmRQUUV4cEJ1ZmZlcigmY29ubi0+ZXJyb3JNZXNzYWdlLAotCQkJCQkJCQkJICBs aWJwcV9nZXR0ZXh0KCJjb3VsZCBub3QgdHJhbnNsYXRlIGhvc3QgbmFtZSBcIiVzXCIgdG8g YWRkcmVzczogJXNcbiIpLAotCQkJCQkJCQkJICBjaC0+aG9zdCwgZ2FpX3N0cmVycm9yKHJl dCkpOworCQkJCQlsaWJwcV9hcHBlbmRfZXJyb3IoY29ubiwgImNvdWxkIG5vdCB0cmFuc2xh dGUgaG9zdCBuYW1lIFwiJXNcIiB0byBhZGRyZXNzOiAlcyIsCisJCQkJCQkJCQkgICBjaC0+ aG9zdCwgZ2FpX3N0cmVycm9yKHJldCkpOwogCQkJCQlnb3RvIGtlZXBfZ29pbmc7CiAJCQkJ fQogCQkJCWJyZWFrOwpAQCAtMjM5Niw5ICsyMzY3LDggQEAgUFFjb25uZWN0UG9sbChQR2Nv bm4gKmNvbm4pCiAJCQkJCQkJCQkJICZjb25uLT5hZGRybGlzdCk7CiAJCQkJaWYgKHJldCB8 fCAhY29ubi0+YWRkcmxpc3QpCiAJCQkJewotCQkJCQlhcHBlbmRQUUV4cEJ1ZmZlcigmY29u bi0+ZXJyb3JNZXNzYWdlLAotCQkJCQkJCQkJICBsaWJwcV9nZXR0ZXh0KCJjb3VsZCBub3Qg cGFyc2UgbmV0d29yayBhZGRyZXNzIFwiJXNcIjogJXNcbiIpLAotCQkJCQkJCQkJICBjaC0+ aG9zdGFkZHIsIGdhaV9zdHJlcnJvcihyZXQpKTsKKwkJCQkJbGlicHFfYXBwZW5kX2Vycm9y KGNvbm4sICJjb3VsZCBub3QgcGFyc2UgbmV0d29yayBhZGRyZXNzIFwiJXNcIjogJXMiLAor CQkJCQkJCQkJICAgY2gtPmhvc3RhZGRyLCBnYWlfc3RyZXJyb3IocmV0KSk7CiAJCQkJCWdv dG8ga2VlcF9nb2luZzsKIAkJCQl9CiAJCQkJYnJlYWs7CkBAIC0yNDA4LDEwICsyMzc4LDkg QEAgUFFjb25uZWN0UG9sbChQR2Nvbm4gKmNvbm4pCiAJCQkJVU5JWFNPQ0tfUEFUSChwb3J0 c3RyLCB0aGlzcG9ydCwgY2gtPmhvc3QpOwogCQkJCWlmIChzdHJsZW4ocG9ydHN0cikgPj0g VU5JWFNPQ0tfUEFUSF9CVUZMRU4pCiAJCQkJewotCQkJCQlhcHBlbmRQUUV4cEJ1ZmZlcigm Y29ubi0+ZXJyb3JNZXNzYWdlLAotCQkJCQkJCQkJICBsaWJwcV9nZXR0ZXh0KCJVbml4LWRv bWFpbiBzb2NrZXQgcGF0aCBcIiVzXCIgaXMgdG9vIGxvbmcgKG1heGltdW0gJWQgYnl0ZXMp XG4iKSwKLQkJCQkJCQkJCSAgcG9ydHN0ciwKLQkJCQkJCQkJCSAgKGludCkgKFVOSVhTT0NL X1BBVEhfQlVGTEVOIC0gMSkpOworCQkJCQlsaWJwcV9hcHBlbmRfZXJyb3IoY29ubiwgIlVu aXgtZG9tYWluIHNvY2tldCBwYXRoIFwiJXNcIiBpcyB0b28gbG9uZyAobWF4aW11bSAlZCBi eXRlcykiLAorCQkJCQkJCQkJICAgcG9ydHN0ciwKKwkJCQkJCQkJCSAgIChpbnQpIChVTklY U09DS19QQVRIX0JVRkxFTiAtIDEpKTsKIAkJCQkJZ290byBrZWVwX2dvaW5nOwogCQkJCX0K IApAQCAtMjQyMyw5ICsyMzkyLDggQEAgUFFjb25uZWN0UG9sbChQR2Nvbm4gKmNvbm4pCiAJ CQkJCQkJCQkJICZjb25uLT5hZGRybGlzdCk7CiAJCQkJaWYgKHJldCB8fCAhY29ubi0+YWRk cmxpc3QpCiAJCQkJewotCQkJCQlhcHBlbmRQUUV4cEJ1ZmZlcigmY29ubi0+ZXJyb3JNZXNz YWdlLAotCQkJCQkJCQkJICBsaWJwcV9nZXR0ZXh0KCJjb3VsZCBub3QgdHJhbnNsYXRlIFVu aXgtZG9tYWluIHNvY2tldCBwYXRoIFwiJXNcIiB0byBhZGRyZXNzOiAlc1xuIiksCi0JCQkJ CQkJCQkgIHBvcnRzdHIsIGdhaV9zdHJlcnJvcihyZXQpKTsKKwkJCQkJbGlicHFfYXBwZW5k X2Vycm9yKGNvbm4sICJjb3VsZCBub3QgdHJhbnNsYXRlIFVuaXgtZG9tYWluIHNvY2tldCBw YXRoIFwiJXNcIiB0byBhZGRyZXNzOiAlcyIsCisJCQkJCQkJCQkgICBwb3J0c3RyLCBnYWlf c3RyZXJyb3IocmV0KSk7CiAJCQkJCWdvdG8ga2VlcF9nb2luZzsKIAkJCQl9CiAJCQkJYnJl YWs7CkBAIC0yNTQ2LDkgKzI1MTQsOCBAQCBQUWNvbm5lY3RQb2xsKFBHY29ubiAqY29ubikK IAkJCQkJCQlnb3RvIGtlZXBfZ29pbmc7CiAJCQkJCQl9CiAJCQkJCQllbWl0SG9zdElkZW50 aXR5SW5mbyhjb25uLCBob3N0X2FkZHIpOwotCQkJCQkJYXBwZW5kUFFFeHBCdWZmZXIoJmNv bm4tPmVycm9yTWVzc2FnZSwKLQkJCQkJCQkJCQkgIGxpYnBxX2dldHRleHQoImNvdWxkIG5v dCBjcmVhdGUgc29ja2V0OiAlc1xuIiksCi0JCQkJCQkJCQkJICBTT0NLX1NUUkVSUk9SKGVy cm9ybm8sIHNlYnVmLCBzaXplb2Yoc2VidWYpKSk7CisJCQkJCQlsaWJwcV9hcHBlbmRfZXJy b3IoY29ubiwgImNvdWxkIG5vdCBjcmVhdGUgc29ja2V0OiAlcyIsCisJCQkJCQkJCQkJICAg U09DS19TVFJFUlJPUihlcnJvcm5vLCBzZWJ1Ziwgc2l6ZW9mKHNlYnVmKSkpOwogCQkJCQkJ Z290byBlcnJvcl9yZXR1cm47CiAJCQkJCX0KIApAQCAtMjU3Nyw5ICsyNTQ0LDggQEAgUFFj b25uZWN0UG9sbChQR2Nvbm4gKmNvbm4pCiAJCQkJCX0KIAkJCQkJaWYgKCFwZ19zZXRfbm9i bG9jayhjb25uLT5zb2NrKSkKIAkJCQkJewotCQkJCQkJYXBwZW5kUFFFeHBCdWZmZXIoJmNv bm4tPmVycm9yTWVzc2FnZSwKLQkJCQkJCQkJCQkgIGxpYnBxX2dldHRleHQoImNvdWxkIG5v dCBzZXQgc29ja2V0IHRvIG5vbmJsb2NraW5nIG1vZGU6ICVzXG4iKSwKLQkJCQkJCQkJCQkg IFNPQ0tfU1RSRVJST1IoU09DS19FUlJOTywgc2VidWYsIHNpemVvZihzZWJ1ZikpKTsKKwkJ CQkJCWxpYnBxX2FwcGVuZF9lcnJvcihjb25uLCAiY291bGQgbm90IHNldCBzb2NrZXQgdG8g bm9uYmxvY2tpbmcgbW9kZTogJXMiLAorCQkJCQkJCQkJCSAgIFNPQ0tfU1RSRVJST1IoU09D S19FUlJOTywgc2VidWYsIHNpemVvZihzZWJ1ZikpKTsKIAkJCQkJCWNvbm4tPnRyeV9uZXh0 X2FkZHIgPSB0cnVlOwogCQkJCQkJZ290byBrZWVwX2dvaW5nOwogCQkJCQl9CkBAIC0yNTg3 LDkgKzI1NTMsOCBAQCBQUWNvbm5lY3RQb2xsKFBHY29ubiAqY29ubikKICNpZmRlZiBGX1NF VEZECiAJCQkJCWlmIChmY250bChjb25uLT5zb2NrLCBGX1NFVEZELCBGRF9DTE9FWEVDKSA9 PSAtMSkKIAkJCQkJewotCQkJCQkJYXBwZW5kUFFFeHBCdWZmZXIoJmNvbm4tPmVycm9yTWVz c2FnZSwKLQkJCQkJCQkJCQkgIGxpYnBxX2dldHRleHQoImNvdWxkIG5vdCBzZXQgc29ja2V0 IHRvIGNsb3NlLW9uLWV4ZWMgbW9kZTogJXNcbiIpLAotCQkJCQkJCQkJCSAgU09DS19TVFJF UlJPUihTT0NLX0VSUk5PLCBzZWJ1Ziwgc2l6ZW9mKHNlYnVmKSkpOworCQkJCQkJbGlicHFf YXBwZW5kX2Vycm9yKGNvbm4sICJjb3VsZCBub3Qgc2V0IHNvY2tldCB0byBjbG9zZS1vbi1l eGVjIG1vZGU6ICVzIiwKKwkJCQkJCQkJCQkgICBTT0NLX1NUUkVSUk9SKFNPQ0tfRVJSTk8s IHNlYnVmLCBzaXplb2Yoc2VidWYpKSk7CiAJCQkJCQljb25uLT50cnlfbmV4dF9hZGRyID0g dHJ1ZTsKIAkJCQkJCWdvdG8ga2VlcF9nb2luZzsKIAkJCQkJfQpAQCAtMjYwNSw4ICsyNTcw LDcgQEAgUFFjb25uZWN0UG9sbChQR2Nvbm4gKmNvbm4pCiAKIAkJCQkJCWlmICh1c2VrZWVw YWxpdmVzIDwgMCkKIAkJCQkJCXsKLQkJCQkJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY29u bi0+ZXJyb3JNZXNzYWdlLAotCQkJCQkJCQkJCQkJIGxpYnBxX2dldHRleHQoImtlZXBhbGl2 ZXMgcGFyYW1ldGVyIG11c3QgYmUgYW4gaW50ZWdlclxuIikpOworCQkJCQkJCWxpYnBxX2Fw cGVuZF9lcnJvcihjb25uLCAia2VlcGFsaXZlcyBwYXJhbWV0ZXIgbXVzdCBiZSBhbiBpbnRl Z2VyIik7CiAJCQkJCQkJZXJyID0gMTsKIAkJCQkJCX0KIAkJCQkJCWVsc2UgaWYgKHVzZWtl ZXBhbGl2ZXMgPT0gMCkKQEAgLTI2MTgsMTEgKzI1ODIsMTAgQEAgUFFjb25uZWN0UG9sbChQ R2Nvbm4gKmNvbm4pCiAJCQkJCQkJCQkJCVNPTF9TT0NLRVQsIFNPX0tFRVBBTElWRSwKIAkJ CQkJCQkJCQkJKGNoYXIgKikgJm9uLCBzaXplb2Yob24pKSA8IDApCiAJCQkJCQl7Ci0JCQkJ CQkJYXBwZW5kUFFFeHBCdWZmZXIoJmNvbm4tPmVycm9yTWVzc2FnZSwKLQkJCQkJCQkJCQkJ ICBsaWJwcV9nZXR0ZXh0KCIlcyglcykgZmFpbGVkOiAlc1xuIiksCi0JCQkJCQkJCQkJCSAg InNldHNvY2tvcHQiLAotCQkJCQkJCQkJCQkgICJTT19LRUVQQUxJVkUiLAotCQkJCQkJCQkJ CQkgIFNPQ0tfU1RSRVJST1IoU09DS19FUlJOTywgc2VidWYsIHNpemVvZihzZWJ1ZikpKTsK KwkJCQkJCQlsaWJwcV9hcHBlbmRfZXJyb3IoY29ubiwgIiVzKCVzKSBmYWlsZWQ6ICVzIiwK KwkJCQkJCQkJCQkJICAgInNldHNvY2tvcHQiLAorCQkJCQkJCQkJCQkgICAiU09fS0VFUEFM SVZFIiwKKwkJCQkJCQkJCQkJICAgU09DS19TVFJFUlJPUihTT0NLX0VSUk5PLCBzZWJ1Ziwg c2l6ZW9mKHNlYnVmKSkpOwogCQkJCQkJCWVyciA9IDE7CiAJCQkJCQl9CiAJCQkJCQllbHNl IGlmICghc2V0S2VlcGFsaXZlc0lkbGUoY29ubikKQEAgLTI3NDYsOSArMjcwOSw4IEBAIFBR Y29ubmVjdFBvbGwoUEdjb25uICpjb25uKQogCQkJCWlmIChnZXRzb2Nrb3B0KGNvbm4tPnNv Y2ssIFNPTF9TT0NLRVQsIFNPX0VSUk9SLAogCQkJCQkJCSAgIChjaGFyICopICZvcHR2YWws ICZvcHRsZW4pID09IC0xKQogCQkJCXsKLQkJCQkJYXBwZW5kUFFFeHBCdWZmZXIoJmNvbm4t PmVycm9yTWVzc2FnZSwKLQkJCQkJCQkJCSAgbGlicHFfZ2V0dGV4dCgiY291bGQgbm90IGdl dCBzb2NrZXQgZXJyb3Igc3RhdHVzOiAlc1xuIiksCi0JCQkJCQkJCQkgIFNPQ0tfU1RSRVJS T1IoU09DS19FUlJOTywgc2VidWYsIHNpemVvZihzZWJ1ZikpKTsKKwkJCQkJbGlicHFfYXBw ZW5kX2Vycm9yKGNvbm4sICJjb3VsZCBub3QgZ2V0IHNvY2tldCBlcnJvciBzdGF0dXM6ICVz IiwKKwkJCQkJCQkJCSAgIFNPQ0tfU1RSRVJST1IoU09DS19FUlJOTywgc2VidWYsIHNpemVv ZihzZWJ1ZikpKTsKIAkJCQkJZ290byBlcnJvcl9yZXR1cm47CiAJCQkJfQogCQkJCWVsc2Ug aWYgKG9wdHZhbCAhPSAwKQpAQCAtMjc3NCw5ICsyNzM2LDggQEAgUFFjb25uZWN0UG9sbChQ R2Nvbm4gKmNvbm4pCiAJCQkJCQkJCShzdHJ1Y3Qgc29ja2FkZHIgKikgJmNvbm4tPmxhZGRy LmFkZHIsCiAJCQkJCQkJCSZjb25uLT5sYWRkci5zYWxlbikgPCAwKQogCQkJCXsKLQkJCQkJ YXBwZW5kUFFFeHBCdWZmZXIoJmNvbm4tPmVycm9yTWVzc2FnZSwKLQkJCQkJCQkJCSAgbGli cHFfZ2V0dGV4dCgiY291bGQgbm90IGdldCBjbGllbnQgYWRkcmVzcyBmcm9tIHNvY2tldDog JXNcbiIpLAotCQkJCQkJCQkJICBTT0NLX1NUUkVSUk9SKFNPQ0tfRVJSTk8sIHNlYnVmLCBz aXplb2Yoc2VidWYpKSk7CisJCQkJCWxpYnBxX2FwcGVuZF9lcnJvcihjb25uLCAiY291bGQg bm90IGdldCBjbGllbnQgYWRkcmVzcyBmcm9tIHNvY2tldDogJXMiLAorCQkJCQkJCQkJICAg U09DS19TVFJFUlJPUihTT0NLX0VSUk5PLCBzZWJ1Ziwgc2l6ZW9mKHNlYnVmKSkpOwogCQkJ CQlnb3RvIGVycm9yX3JldHVybjsKIAkJCQl9CiAKQEAgLTI4MTMsMTIgKzI3NzQsMTAgQEAg UFFjb25uZWN0UG9sbChQR2Nvbm4gKmNvbm4pCiAJCQkJCQkgKiBzdHViCiAJCQkJCQkgKi8K IAkJCQkJCWlmIChlcnJubyA9PSBFTk9TWVMpCi0JCQkJCQkJYXBwZW5kUFFFeHBCdWZmZXJT dHIoJmNvbm4tPmVycm9yTWVzc2FnZSwKLQkJCQkJCQkJCQkJCSBsaWJwcV9nZXR0ZXh0KCJy ZXF1aXJlcGVlciBwYXJhbWV0ZXIgaXMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3Jt XG4iKSk7CisJCQkJCQkJbGlicHFfYXBwZW5kX2Vycm9yKGNvbm4sICJyZXF1aXJlcGVlciBw YXJhbWV0ZXIgaXMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtIik7CiAJCQkJCQll bHNlCi0JCQkJCQkJYXBwZW5kUFFFeHBCdWZmZXIoJmNvbm4tPmVycm9yTWVzc2FnZSwKLQkJ CQkJCQkJCQkJICBsaWJwcV9nZXR0ZXh0KCJjb3VsZCBub3QgZ2V0IHBlZXIgY3JlZGVudGlh bHM6ICVzXG4iKSwKLQkJCQkJCQkJCQkJICBzdHJlcnJvcl9yKGVycm5vLCBzZWJ1Ziwgc2l6 ZW9mKHNlYnVmKSkpOworCQkJCQkJCWxpYnBxX2FwcGVuZF9lcnJvcihjb25uLCAiY291bGQg bm90IGdldCBwZWVyIGNyZWRlbnRpYWxzOiAlcyIsCisJCQkJCQkJCQkJCSAgIHN0cmVycm9y X3IoZXJybm8sIHNlYnVmLCBzaXplb2Yoc2VidWYpKSk7CiAJCQkJCQlnb3RvIGVycm9yX3Jl dHVybjsKIAkJCQkJfQogCkBAIC0yODMwLDkgKzI3ODksOCBAQCBQUWNvbm5lY3RQb2xsKFBH Y29ubiAqY29ubikKIAogCQkJCQlpZiAoc3RyY21wKHJlbW90ZV91c2VybmFtZSwgY29ubi0+ cmVxdWlyZXBlZXIpICE9IDApCiAJCQkJCXsKLQkJCQkJCWFwcGVuZFBRRXhwQnVmZmVyKCZj b25uLT5lcnJvck1lc3NhZ2UsCi0JCQkJCQkJCQkJICBsaWJwcV9nZXR0ZXh0KCJyZXF1aXJl cGVlciBzcGVjaWZpZXMgXCIlc1wiLCBidXQgYWN0dWFsIHBlZXIgdXNlciBuYW1lIGlzIFwi JXNcIlxuIiksCi0JCQkJCQkJCQkJICBjb25uLT5yZXF1aXJlcGVlciwgcmVtb3RlX3VzZXJu YW1lKTsKKwkJCQkJCWxpYnBxX2FwcGVuZF9lcnJvcihjb25uLCAicmVxdWlyZXBlZXIgc3Bl Y2lmaWVzIFwiJXNcIiwgYnV0IGFjdHVhbCBwZWVyIHVzZXIgbmFtZSBpcyBcIiVzXCIiLAor CQkJCQkJCQkJCSAgIGNvbm4tPnJlcXVpcmVwZWVyLCByZW1vdGVfdXNlcm5hbWUpOwogCQkJ CQkJZnJlZShyZW1vdGVfdXNlcm5hbWUpOwogCQkJCQkJZ290byBlcnJvcl9yZXR1cm47CiAJ CQkJCX0KQEAgLTI4NzIsOSArMjgzMCw4IEBAIFBRY29ubmVjdFBvbGwoUEdjb25uICpjb25u KQogCiAJCQkJCWlmIChwcVBhY2tldFNlbmQoY29ubiwgMCwgJnB2LCBzaXplb2YocHYpKSAh PSBTVEFUVVNfT0spCiAJCQkJCXsKLQkJCQkJCWFwcGVuZFBRRXhwQnVmZmVyKCZjb25uLT5l cnJvck1lc3NhZ2UsCi0JCQkJCQkJCQkJICBsaWJwcV9nZXR0ZXh0KCJjb3VsZCBub3Qgc2Vu ZCBHU1NBUEkgbmVnb3RpYXRpb24gcGFja2V0OiAlc1xuIiksCi0JCQkJCQkJCQkJICBTT0NL X1NUUkVSUk9SKFNPQ0tfRVJSTk8sIHNlYnVmLCBzaXplb2Yoc2VidWYpKSk7CisJCQkJCQls aWJwcV9hcHBlbmRfZXJyb3IoY29ubiwgImNvdWxkIG5vdCBzZW5kIEdTU0FQSSBuZWdvdGlh dGlvbiBwYWNrZXQ6ICVzIiwKKwkJCQkJCQkJCQkgICBTT0NLX1NUUkVSUk9SKFNPQ0tfRVJS Tk8sIHNlYnVmLCBzaXplb2Yoc2VidWYpKSk7CiAJCQkJCQlnb3RvIGVycm9yX3JldHVybjsK IAkJCQkJfQogCkBAIC0yODg0LDggKzI4NDEsOCBAQCBQUWNvbm5lY3RQb2xsKFBHY29ubiAq Y29ubikKIAkJCQl9CiAJCQkJZWxzZSBpZiAoIWNvbm4tPmdjdHggJiYgY29ubi0+Z3NzZW5j bW9kZVswXSA9PSAncicpCiAJCQkJewotCQkJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY29u bi0+ZXJyb3JNZXNzYWdlLAotCQkJCQkJCQkJCSBsaWJwcV9nZXR0ZXh0KCJHU1NBUEkgZW5j cnlwdGlvbiByZXF1aXJlZCBidXQgd2FzIGltcG9zc2libGUgKHBvc3NpYmx5IG5vIGNyZWRl bnRpYWwgY2FjaGUsIG5vIHNlcnZlciBzdXBwb3J0LCBvciB1c2luZyBhIGxvY2FsIHNvY2tl dClcbiIpKTsKKwkJCQkJbGlicHFfYXBwZW5kX2Vycm9yKGNvbm4sCisJCQkJCQkJCQkgICAi R1NTQVBJIGVuY3J5cHRpb24gcmVxdWlyZWQgYnV0IHdhcyBpbXBvc3NpYmxlIChwb3NzaWJs eSBubyBjcmVkZW50aWFsIGNhY2hlLCBubyBzZXJ2ZXIgc3VwcG9ydCwgb3IgdXNpbmcgYSBs b2NhbCBzb2NrZXQpIik7CiAJCQkJCWdvdG8gZXJyb3JfcmV0dXJuOwogCQkJCX0KICNlbmRp ZgpAQCAtMjkyNiw5ICsyODgzLDggQEAgUFFjb25uZWN0UG9sbChQR2Nvbm4gKmNvbm4pCiAJ CQkJCXB2ID0gcGdfaHRvbjMyKE5FR09USUFURV9TU0xfQ09ERSk7CiAJCQkJCWlmIChwcVBh Y2tldFNlbmQoY29ubiwgMCwgJnB2LCBzaXplb2YocHYpKSAhPSBTVEFUVVNfT0spCiAJCQkJ CXsKLQkJCQkJCWFwcGVuZFBRRXhwQnVmZmVyKCZjb25uLT5lcnJvck1lc3NhZ2UsCi0JCQkJ CQkJCQkJICBsaWJwcV9nZXR0ZXh0KCJjb3VsZCBub3Qgc2VuZCBTU0wgbmVnb3RpYXRpb24g cGFja2V0OiAlc1xuIiksCi0JCQkJCQkJCQkJICBTT0NLX1NUUkVSUk9SKFNPQ0tfRVJSTk8s IHNlYnVmLCBzaXplb2Yoc2VidWYpKSk7CisJCQkJCQlsaWJwcV9hcHBlbmRfZXJyb3IoY29u biwgImNvdWxkIG5vdCBzZW5kIFNTTCBuZWdvdGlhdGlvbiBwYWNrZXQ6ICVzIiwKKwkJCQkJ CQkJCQkgICBTT0NLX1NUUkVSUk9SKFNPQ0tfRVJSTk8sIHNlYnVmLCBzaXplb2Yoc2VidWYp KSk7CiAJCQkJCQlnb3RvIGVycm9yX3JldHVybjsKIAkJCQkJfQogCQkJCQkvKiBPaywgd2Fp dCBmb3IgcmVzcG9uc2UgKi8KQEAgLTI5NDQsOCArMjkwMCw3IEBAIFBRY29ubmVjdFBvbGwo UEdjb25uICpjb25uKQogCQkJCQkJCQkJCQkJCUVudmlyb25tZW50T3B0aW9ucyk7CiAJCQkJ aWYgKCFzdGFydHBhY2tldCkKIAkJCQl7Ci0JCQkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZj b25uLT5lcnJvck1lc3NhZ2UsCi0JCQkJCQkJCQkJIGxpYnBxX2dldHRleHQoIm91dCBvZiBt ZW1vcnlcbiIpKTsKKwkJCQkJbGlicHFfYXBwZW5kX2Vycm9yKGNvbm4sICJvdXQgb2YgbWVt b3J5Iik7CiAJCQkJCWdvdG8gZXJyb3JfcmV0dXJuOwogCQkJCX0KIApAQCAtMjk1Nyw5ICsy OTEyLDggQEAgUFFjb25uZWN0UG9sbChQR2Nvbm4gKmNvbm4pCiAJCQkJICovCiAJCQkJaWYg KHBxUGFja2V0U2VuZChjb25uLCAwLCBzdGFydHBhY2tldCwgcGFja2V0bGVuKSAhPSBTVEFU VVNfT0spCiAJCQkJewotCQkJCQlhcHBlbmRQUUV4cEJ1ZmZlcigmY29ubi0+ZXJyb3JNZXNz YWdlLAotCQkJCQkJCQkJICBsaWJwcV9nZXR0ZXh0KCJjb3VsZCBub3Qgc2VuZCBzdGFydHVw IHBhY2tldDogJXNcbiIpLAotCQkJCQkJCQkJICBTT0NLX1NUUkVSUk9SKFNPQ0tfRVJSTk8s IHNlYnVmLCBzaXplb2Yoc2VidWYpKSk7CisJCQkJCWxpYnBxX2FwcGVuZF9lcnJvcihjb25u LCAiY291bGQgbm90IHNlbmQgc3RhcnR1cCBwYWNrZXQ6ICVzIiwKKwkJCQkJCQkJCSAgIFNP Q0tfU1RSRVJST1IoU09DS19FUlJOTywgc2VidWYsIHNpemVvZihzZWJ1ZikpKTsKIAkJCQkJ ZnJlZShzdGFydHBhY2tldCk7CiAJCQkJCWdvdG8gZXJyb3JfcmV0dXJuOwogCQkJCX0KQEAg LTMwMzMsOCArMjk4Nyw3IEBAIFBRY29ubmVjdFBvbGwoUEdjb25uICpjb25uKQogCQkJCQkJ CQkJCQkJCQkgKiAidmVyaWZ5LWZ1bGwiICovCiAJCQkJCQl7CiAJCQkJCQkJLyogUmVxdWly ZSBTU0wsIGJ1dCBzZXJ2ZXIgZG9lcyBub3Qgd2FudCBpdCAqLwotCQkJCQkJCWFwcGVuZFBR RXhwQnVmZmVyU3RyKCZjb25uLT5lcnJvck1lc3NhZ2UsCi0JCQkJCQkJCQkJCQkgbGlicHFf Z2V0dGV4dCgic2VydmVyIGRvZXMgbm90IHN1cHBvcnQgU1NMLCBidXQgU1NMIHdhcyByZXF1 aXJlZFxuIikpOworCQkJCQkJCWxpYnBxX2FwcGVuZF9lcnJvcihjb25uLCAic2VydmVyIGRv ZXMgbm90IHN1cHBvcnQgU1NMLCBidXQgU1NMIHdhcyByZXF1aXJlZCIpOwogCQkJCQkJCWdv dG8gZXJyb3JfcmV0dXJuOwogCQkJCQkJfQogCQkJCQkJLyogT3RoZXJ3aXNlLCBwcm9jZWVk IHdpdGggbm9ybWFsIHN0YXJ0dXAgKi8KQEAgLTMwNjAsOSArMzAxMyw4IEBAIFBRY29ubmVj dFBvbGwoUEdjb25uICpjb25uKQogCQkJCQl9CiAJCQkJCWVsc2UKIAkJCQkJewotCQkJCQkJ YXBwZW5kUFFFeHBCdWZmZXIoJmNvbm4tPmVycm9yTWVzc2FnZSwKLQkJCQkJCQkJCQkgIGxp YnBxX2dldHRleHQoInJlY2VpdmVkIGludmFsaWQgcmVzcG9uc2UgdG8gU1NMIG5lZ290aWF0 aW9uOiAlY1xuIiksCi0JCQkJCQkJCQkJICBTU0xvayk7CisJCQkJCQlsaWJwcV9hcHBlbmRf ZXJyb3IoY29ubiwgInJlY2VpdmVkIGludmFsaWQgcmVzcG9uc2UgdG8gU1NMIG5lZ290aWF0 aW9uOiAlYyIsCisJCQkJCQkJCQkJICAgU1NMb2spOwogCQkJCQkJZ290byBlcnJvcl9yZXR1 cm47CiAJCQkJCX0KIAkJCQl9CkBAIC0zMDgxLDggKzMwMzMsNyBAQCBQUWNvbm5lY3RQb2xs KFBHY29ubiAqY29ubikKIAkJCQkJICovCiAJCQkJCWlmIChjb25uLT5pbkN1cnNvciAhPSBj b25uLT5pbkVuZCkKIAkJCQkJewotCQkJCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNvbm4t PmVycm9yTWVzc2FnZSwKLQkJCQkJCQkJCQkJIGxpYnBxX2dldHRleHQoInJlY2VpdmVkIHVu ZW5jcnlwdGVkIGRhdGEgYWZ0ZXIgU1NMIHJlc3BvbnNlXG4iKSk7CisJCQkJCQlsaWJwcV9h cHBlbmRfZXJyb3IoY29ubiwgInJlY2VpdmVkIHVuZW5jcnlwdGVkIGRhdGEgYWZ0ZXIgU1NM IHJlc3BvbnNlIik7CiAJCQkJCQlnb3RvIGVycm9yX3JldHVybjsKIAkJCQkJfQogCkBAIC0z MTYyLDggKzMxMTMsNyBAQCBQUWNvbm5lY3RQb2xsKFBHY29ubiAqY29ubikKIAkJCQkJCS8q IFNlcnZlciBkb2Vzbid0IHdhbnQgR1NTQVBJOyBmYWxsIGJhY2sgaWYgd2UgY2FuICovCiAJ CQkJCQlpZiAoY29ubi0+Z3NzZW5jbW9kZVswXSA9PSAncicpCiAJCQkJCQl7Ci0JCQkJCQkJ YXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNvbm4tPmVycm9yTWVzc2FnZSwKLQkJCQkJCQkJCQkJ CSBsaWJwcV9nZXR0ZXh0KCJzZXJ2ZXIgZG9lc24ndCBzdXBwb3J0IEdTU0FQSSBlbmNyeXB0 aW9uLCBidXQgaXQgd2FzIHJlcXVpcmVkXG4iKSk7CisJCQkJCQkJbGlicHFfYXBwZW5kX2Vy cm9yKGNvbm4sICJzZXJ2ZXIgZG9lc24ndCBzdXBwb3J0IEdTU0FQSSBlbmNyeXB0aW9uLCBi dXQgaXQgd2FzIHJlcXVpcmVkIik7CiAJCQkJCQkJZ290byBlcnJvcl9yZXR1cm47CiAJCQkJ CQl9CiAKQEAgLTMxNzQsOSArMzEyNCw4IEBAIFBRY29ubmVjdFBvbGwoUEdjb25uICpjb25u KQogCQkJCQl9CiAJCQkJCWVsc2UgaWYgKGdzc19vayAhPSAnRycpCiAJCQkJCXsKLQkJCQkJ CWFwcGVuZFBRRXhwQnVmZmVyKCZjb25uLT5lcnJvck1lc3NhZ2UsCi0JCQkJCQkJCQkJICBs aWJwcV9nZXR0ZXh0KCJyZWNlaXZlZCBpbnZhbGlkIHJlc3BvbnNlIHRvIEdTU0FQSSBuZWdv dGlhdGlvbjogJWNcbiIpLAotCQkJCQkJCQkJCSAgZ3NzX29rKTsKKwkJCQkJCWxpYnBxX2Fw cGVuZF9lcnJvcihjb25uLCAicmVjZWl2ZWQgaW52YWxpZCByZXNwb25zZSB0byBHU1NBUEkg bmVnb3RpYXRpb246ICVjIiwKKwkJCQkJCQkJCQkgICBnc3Nfb2spOwogCQkJCQkJZ290byBl cnJvcl9yZXR1cm47CiAJCQkJCX0KIAkJCQl9CkBAIC0zMTkzLDggKzMxNDIsNyBAQCBQUWNv bm5lY3RQb2xsKFBHY29ubiAqY29ubikKIAkJCQkJICovCiAJCQkJCWlmIChjb25uLT5pbkN1 cnNvciAhPSBjb25uLT5pbkVuZCkKIAkJCQkJewotCQkJCQkJYXBwZW5kUFFFeHBCdWZmZXJT dHIoJmNvbm4tPmVycm9yTWVzc2FnZSwKLQkJCQkJCQkJCQkJIGxpYnBxX2dldHRleHQoInJl Y2VpdmVkIHVuZW5jcnlwdGVkIGRhdGEgYWZ0ZXIgR1NTQVBJIGVuY3J5cHRpb24gcmVzcG9u c2VcbiIpKTsKKwkJCQkJCWxpYnBxX2FwcGVuZF9lcnJvcihjb25uLCAicmVjZWl2ZWQgdW5l bmNyeXB0ZWQgZGF0YSBhZnRlciBHU1NBUEkgZW5jcnlwdGlvbiByZXNwb25zZSIpOwogCQkJ CQkJZ290byBlcnJvcl9yZXR1cm47CiAJCQkJCX0KIApAQCAtMzI1Myw5ICszMjAxLDggQEAg UFFjb25uZWN0UG9sbChQR2Nvbm4gKmNvbm4pCiAJCQkJICovCiAJCQkJaWYgKCEoYmVyZXNw ID09ICdSJyB8fCBiZXJlc3AgPT0gJ0UnKSkKIAkJCQl7Ci0JCQkJCWFwcGVuZFBRRXhwQnVm ZmVyKCZjb25uLT5lcnJvck1lc3NhZ2UsCi0JCQkJCQkJCQkgIGxpYnBxX2dldHRleHQoImV4 cGVjdGVkIGF1dGhlbnRpY2F0aW9uIHJlcXVlc3QgZnJvbSBzZXJ2ZXIsIGJ1dCByZWNlaXZl ZCAlY1xuIiksCi0JCQkJCQkJCQkgIGJlcmVzcCk7CisJCQkJCWxpYnBxX2FwcGVuZF9lcnJv cihjb25uLCAiZXhwZWN0ZWQgYXV0aGVudGljYXRpb24gcmVxdWVzdCBmcm9tIHNlcnZlciwg YnV0IHJlY2VpdmVkICVjIiwKKwkJCQkJCQkJCSAgIGJlcmVzcCk7CiAJCQkJCWdvdG8gZXJy b3JfcmV0dXJuOwogCQkJCX0KIApAQCAtMzI3OCw5ICszMjI1LDggQEAgUFFjb25uZWN0UG9s bChQR2Nvbm4gKmNvbm4pCiAJCQkJICovCiAJCQkJaWYgKGJlcmVzcCA9PSAnUicgJiYgKG1z Z0xlbmd0aCA8IDggfHwgbXNnTGVuZ3RoID4gMjAwMCkpCiAJCQkJewotCQkJCQlhcHBlbmRQ UUV4cEJ1ZmZlcigmY29ubi0+ZXJyb3JNZXNzYWdlLAotCQkJCQkJCQkJICBsaWJwcV9nZXR0 ZXh0KCJleHBlY3RlZCBhdXRoZW50aWNhdGlvbiByZXF1ZXN0IGZyb20gc2VydmVyLCBidXQg cmVjZWl2ZWQgJWNcbiIpLAotCQkJCQkJCQkJICBiZXJlc3ApOworCQkJCQlsaWJwcV9hcHBl bmRfZXJyb3IoY29ubiwgImV4cGVjdGVkIGF1dGhlbnRpY2F0aW9uIHJlcXVlc3QgZnJvbSBz ZXJ2ZXIsIGJ1dCByZWNlaXZlZCAlYyIsCisJCQkJCQkJCQkgICBiZXJlc3ApOwogCQkJCQln b3RvIGVycm9yX3JldHVybjsKIAkJCQl9CiAKQEAgLTM0ODUsOCArMzQzMSw3IEBAIFBRY29u bmVjdFBvbGwoUEdjb25uICpjb25uKQogCQkJCWlmIChyZXMpCiAJCQkJewogCQkJCQlpZiAo cmVzLT5yZXN1bHRTdGF0dXMgIT0gUEdSRVNfRkFUQUxfRVJST1IpCi0JCQkJCQlhcHBlbmRQ UUV4cEJ1ZmZlclN0cigmY29ubi0+ZXJyb3JNZXNzYWdlLAotCQkJCQkJCQkJCQkgbGlicHFf Z2V0dGV4dCgidW5leHBlY3RlZCBtZXNzYWdlIGZyb20gc2VydmVyIGR1cmluZyBzdGFydHVw XG4iKSk7CisJCQkJCQlsaWJwcV9hcHBlbmRfZXJyb3IoY29ubiwgInVuZXhwZWN0ZWQgbWVz c2FnZSBmcm9tIHNlcnZlciBkdXJpbmcgc3RhcnR1cCIpOwogCQkJCQllbHNlIGlmIChjb25u LT5zZW5kX2FwcG5hbWUgJiYKIAkJCQkJCQkgKGNvbm4tPmFwcG5hbWUgfHwgY29ubi0+ZmJh cHBuYW1lKSkKIAkJCQkJewpAQCAtMzU3NywxMSArMzUyMiw5IEBAIFBRY29ubmVjdFBvbGwo UEdjb25uICpjb25uKQogCQkJCQl7CiAJCQkJCQkvKiBXcm9uZyBzZXJ2ZXIgc3RhdGUsIHJl amVjdCBhbmQgdHJ5IHRoZSBuZXh0IGhvc3QgKi8KIAkJCQkJCWlmIChjb25uLT50YXJnZXRf c2VydmVyX3R5cGUgPT0gU0VSVkVSX1RZUEVfUkVBRF9XUklURSkKLQkJCQkJCQlhcHBlbmRQ UUV4cEJ1ZmZlclN0cigmY29ubi0+ZXJyb3JNZXNzYWdlLAotCQkJCQkJCQkJCQkJIGxpYnBx X2dldHRleHQoInNlc3Npb24gaXMgcmVhZC1vbmx5XG4iKSk7CisJCQkJCQkJbGlicHFfYXBw ZW5kX2Vycm9yKGNvbm4sICJzZXNzaW9uIGlzIHJlYWQtb25seSIpOwogCQkJCQkJZWxzZQot CQkJCQkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjb25uLT5lcnJvck1lc3NhZ2UsCi0JCQkJ CQkJCQkJCQkgbGlicHFfZ2V0dGV4dCgic2Vzc2lvbiBpcyBub3QgcmVhZC1vbmx5XG4iKSk7 CisJCQkJCQkJbGlicHFfYXBwZW5kX2Vycm9yKGNvbm4sICJzZXNzaW9uIGlzIG5vdCByZWFk LW9ubHkiKTsKIAogCQkJCQkJLyogQ2xvc2UgY29ubmVjdGlvbiBwb2xpdGVseS4gKi8KIAkJ CQkJCWNvbm4tPnN0YXR1cyA9IENPTk5FQ1RJT05fT0s7CkBAIC0zNjM0LDExICszNTc3LDkg QEAgUFFjb25uZWN0UG9sbChQR2Nvbm4gKmNvbm4pCiAJCQkJCXsKIAkJCQkJCS8qIFdyb25n IHNlcnZlciBzdGF0ZSwgcmVqZWN0IGFuZCB0cnkgdGhlIG5leHQgaG9zdCAqLwogCQkJCQkJ aWYgKGNvbm4tPnRhcmdldF9zZXJ2ZXJfdHlwZSA9PSBTRVJWRVJfVFlQRV9QUklNQVJZKQot CQkJCQkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjb25uLT5lcnJvck1lc3NhZ2UsCi0JCQkJ CQkJCQkJCQkgbGlicHFfZ2V0dGV4dCgic2VydmVyIGlzIGluIGhvdCBzdGFuZGJ5IG1vZGVc biIpKTsKKwkJCQkJCQlsaWJwcV9hcHBlbmRfZXJyb3IoY29ubiwgInNlcnZlciBpcyBpbiBo b3Qgc3RhbmRieSBtb2RlIik7CiAJCQkJCQllbHNlCi0JCQkJCQkJYXBwZW5kUFFFeHBCdWZm ZXJTdHIoJmNvbm4tPmVycm9yTWVzc2FnZSwKLQkJCQkJCQkJCQkJCSBsaWJwcV9nZXR0ZXh0 KCJzZXJ2ZXIgaXMgbm90IGluIGhvdCBzdGFuZGJ5IG1vZGVcbiIpKTsKKwkJCQkJCQlsaWJw cV9hcHBlbmRfZXJyb3IoY29ubiwgInNlcnZlciBpcyBub3QgaW4gaG90IHN0YW5kYnkgbW9k ZSIpOwogCiAJCQkJCQkvKiBDbG9zZSBjb25uZWN0aW9uIHBvbGl0ZWx5LiAqLwogCQkJCQkJ Y29ubi0+c3RhdHVzID0gQ09OTkVDVElPTl9PSzsKZGlmZiAtLWdpdCBhL3NyYy9pbnRlcmZh Y2VzL2xpYnBxL2ZlLWV4ZWMuYyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWV4ZWMuYwpp bmRleCBiYjg3NGY3ZjUwLi4yOGJlZTJjYmVkIDEwMDY0NAotLS0gYS9zcmMvaW50ZXJmYWNl cy9saWJwcS9mZS1leGVjLmMKKysrIGIvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtZXhlYy5j CkBAIC0xMzE2LDggKzEzMTYsNyBAQCBwcUFsbG9jQ21kUXVldWVFbnRyeShQR2Nvbm4gKmNv bm4pCiAJCWVudHJ5ID0gKFBHY21kUXVldWVFbnRyeSAqKSBtYWxsb2Moc2l6ZW9mKFBHY21k UXVldWVFbnRyeSkpOwogCQlpZiAoZW50cnkgPT0gTlVMTCkKIAkJewotCQkJYXBwZW5kUFFF eHBCdWZmZXJTdHIoJmNvbm4tPmVycm9yTWVzc2FnZSwKLQkJCQkJCQkJIGxpYnBxX2dldHRl eHQoIm91dCBvZiBtZW1vcnlcbiIpKTsKKwkJCWxpYnBxX2FwcGVuZF9lcnJvcihjb25uLCAi b3V0IG9mIG1lbW9yeSIpOwogCQkJcmV0dXJuIE5VTEw7CiAJCX0KIAl9CkBAIC0xNDQxLDgg KzE0NDAsNyBAQCBQUXNlbmRRdWVyeUludGVybmFsKFBHY29ubiAqY29ubiwgY29uc3QgY2hh ciAqcXVlcnksIGJvb2wgbmV3UXVlcnkpCiAJLyogY2hlY2sgdGhlIGFyZ3VtZW50ICovCiAJ aWYgKCFxdWVyeSkKIAl7Ci0JCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjb25uLT5lcnJvck1l c3NhZ2UsCi0JCQkJCQkJIGxpYnBxX2dldHRleHQoImNvbW1hbmQgc3RyaW5nIGlzIGEgbnVs bCBwb2ludGVyXG4iKSk7CisJCWxpYnBxX2FwcGVuZF9lcnJvcihjb25uLCAiY29tbWFuZCBz dHJpbmcgaXMgYSBudWxsIHBvaW50ZXIiKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0xNTY3 LDE1ICsxNTY1LDEzIEBAIFBRc2VuZFF1ZXJ5UGFyYW1zKFBHY29ubiAqY29ubiwKIAkvKiBj aGVjayB0aGUgYXJndW1lbnRzICovCiAJaWYgKCFjb21tYW5kKQogCXsKLQkJYXBwZW5kUFFF eHBCdWZmZXJTdHIoJmNvbm4tPmVycm9yTWVzc2FnZSwKLQkJCQkJCQkgbGlicHFfZ2V0dGV4 dCgiY29tbWFuZCBzdHJpbmcgaXMgYSBudWxsIHBvaW50ZXJcbiIpKTsKKwkJbGlicHFfYXBw ZW5kX2Vycm9yKGNvbm4sICJjb21tYW5kIHN0cmluZyBpcyBhIG51bGwgcG9pbnRlciIpOwog CQlyZXR1cm4gMDsKIAl9CiAJaWYgKG5QYXJhbXMgPCAwIHx8IG5QYXJhbXMgPiBQUV9RVUVS WV9QQVJBTV9NQVhfTElNSVQpCiAJewotCQlhcHBlbmRQUUV4cEJ1ZmZlcigmY29ubi0+ZXJy b3JNZXNzYWdlLAotCQkJCQkJICBsaWJwcV9nZXR0ZXh0KCJudW1iZXIgb2YgcGFyYW1ldGVy cyBtdXN0IGJlIGJldHdlZW4gMCBhbmQgJWRcbiIpLAotCQkJCQkJICBQUV9RVUVSWV9QQVJB TV9NQVhfTElNSVQpOworCQlsaWJwcV9hcHBlbmRfZXJyb3IoY29ubiwgIm51bWJlciBvZiBw YXJhbWV0ZXJzIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAlZCIsCisJCQkJCQkgICBQUV9RVUVS WV9QQVJBTV9NQVhfTElNSVQpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTE2MTAsMjEgKzE2 MDYsMTggQEAgUFFzZW5kUHJlcGFyZShQR2Nvbm4gKmNvbm4sCiAJLyogY2hlY2sgdGhlIGFy Z3VtZW50cyAqLwogCWlmICghc3RtdE5hbWUpCiAJewotCQlhcHBlbmRQUUV4cEJ1ZmZlclN0 cigmY29ubi0+ZXJyb3JNZXNzYWdlLAotCQkJCQkJCSBsaWJwcV9nZXR0ZXh0KCJzdGF0ZW1l bnQgbmFtZSBpcyBhIG51bGwgcG9pbnRlclxuIikpOworCQlsaWJwcV9hcHBlbmRfZXJyb3Io Y29ubiwgInN0YXRlbWVudCBuYW1lIGlzIGEgbnVsbCBwb2ludGVyIik7CiAJCXJldHVybiAw OwogCX0KIAlpZiAoIXF1ZXJ5KQogCXsKLQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNvbm4t PmVycm9yTWVzc2FnZSwKLQkJCQkJCQkgbGlicHFfZ2V0dGV4dCgiY29tbWFuZCBzdHJpbmcg aXMgYSBudWxsIHBvaW50ZXJcbiIpKTsKKwkJbGlicHFfYXBwZW5kX2Vycm9yKGNvbm4sICJj b21tYW5kIHN0cmluZyBpcyBhIG51bGwgcG9pbnRlciIpOwogCQlyZXR1cm4gMDsKIAl9CiAJ aWYgKG5QYXJhbXMgPCAwIHx8IG5QYXJhbXMgPiBQUV9RVUVSWV9QQVJBTV9NQVhfTElNSVQp CiAJewotCQlhcHBlbmRQUUV4cEJ1ZmZlcigmY29ubi0+ZXJyb3JNZXNzYWdlLAotCQkJCQkJ ICBsaWJwcV9nZXR0ZXh0KCJudW1iZXIgb2YgcGFyYW1ldGVycyBtdXN0IGJlIGJldHdlZW4g MCBhbmQgJWRcbiIpLAotCQkJCQkJICBQUV9RVUVSWV9QQVJBTV9NQVhfTElNSVQpOworCQls aWJwcV9hcHBlbmRfZXJyb3IoY29ubiwgIm51bWJlciBvZiBwYXJhbWV0ZXJzIG11c3QgYmUg YmV0d2VlbiAwIGFuZCAlZCIsCisJCQkJCQkgICBQUV9RVUVSWV9QQVJBTV9NQVhfTElNSVQp OwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTE3MTIsMTUgKzE3MDUsMTMgQEAgUFFzZW5kUXVl cnlQcmVwYXJlZChQR2Nvbm4gKmNvbm4sCiAJLyogY2hlY2sgdGhlIGFyZ3VtZW50cyAqLwog CWlmICghc3RtdE5hbWUpCiAJewotCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY29ubi0+ZXJy b3JNZXNzYWdlLAotCQkJCQkJCSBsaWJwcV9nZXR0ZXh0KCJzdGF0ZW1lbnQgbmFtZSBpcyBh IG51bGwgcG9pbnRlclxuIikpOworCQlsaWJwcV9hcHBlbmRfZXJyb3IoY29ubiwgInN0YXRl bWVudCBuYW1lIGlzIGEgbnVsbCBwb2ludGVyIik7CiAJCXJldHVybiAwOwogCX0KIAlpZiAo blBhcmFtcyA8IDAgfHwgblBhcmFtcyA+IFBRX1FVRVJZX1BBUkFNX01BWF9MSU1JVCkKIAl7 Ci0JCWFwcGVuZFBRRXhwQnVmZmVyKCZjb25uLT5lcnJvck1lc3NhZ2UsCi0JCQkJCQkgIGxp YnBxX2dldHRleHQoIm51bWJlciBvZiBwYXJhbWV0ZXJzIG11c3QgYmUgYmV0d2VlbiAwIGFu ZCAlZFxuIiksCi0JCQkJCQkgIFBRX1FVRVJZX1BBUkFNX01BWF9MSU1JVCk7CisJCWxpYnBx X2FwcGVuZF9lcnJvcihjb25uLCAibnVtYmVyIG9mIHBhcmFtZXRlcnMgbXVzdCBiZSBiZXR3 ZWVuIDAgYW5kICVkIiwKKwkJCQkJCSAgIFBRX1FVRVJZX1BBUkFNX01BWF9MSU1JVCk7CiAJ CXJldHVybiAwOwogCX0KIApAQCAtMTc1Niw4ICsxNzQ3LDcgQEAgUFFzZW5kUXVlcnlTdGFy dChQR2Nvbm4gKmNvbm4sIGJvb2wgbmV3UXVlcnkpCiAJLyogRG9uJ3QgdHJ5IHRvIHNlbmQg aWYgd2Uga25vdyB0aGVyZSdzIG5vIGxpdmUgY29ubmVjdGlvbi4gKi8KIAlpZiAoY29ubi0+ c3RhdHVzICE9IENPTk5FQ1RJT05fT0spCiAJewotCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigm Y29ubi0+ZXJyb3JNZXNzYWdlLAotCQkJCQkJCSBsaWJwcV9nZXR0ZXh0KCJubyBjb25uZWN0 aW9uIHRvIHRoZSBzZXJ2ZXJcbiIpKTsKKwkJbGlicHFfYXBwZW5kX2Vycm9yKGNvbm4sICJu byBjb25uZWN0aW9uIHRvIHRoZSBzZXJ2ZXIiKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KIApA QCAtMTc2NSw4ICsxNzU1LDcgQEAgUFFzZW5kUXVlcnlTdGFydChQR2Nvbm4gKmNvbm4sIGJv b2wgbmV3UXVlcnkpCiAJaWYgKGNvbm4tPmFzeW5jU3RhdHVzICE9IFBHQVNZTkNfSURMRSAm JgogCQljb25uLT5waXBlbGluZVN0YXR1cyA9PSBQUV9QSVBFTElORV9PRkYpCiAJewotCQlh cHBlbmRQUUV4cEJ1ZmZlclN0cigmY29ubi0+ZXJyb3JNZXNzYWdlLAotCQkJCQkJCSBsaWJw cV9nZXR0ZXh0KCJhbm90aGVyIGNvbW1hbmQgaXMgYWxyZWFkeSBpbiBwcm9ncmVzc1xuIikp OworCQlsaWJwcV9hcHBlbmRfZXJyb3IoY29ubiwgImFub3RoZXIgY29tbWFuZCBpcyBhbHJl YWR5IGluIHByb2dyZXNzIik7CiAJCXJldHVybiBmYWxzZTsKIAl9CiAKQEAgLTE3OTYsOCAr MTc4NSw3IEBAIFBRc2VuZFF1ZXJ5U3RhcnQoUEdjb25uICpjb25uLCBib29sIG5ld1F1ZXJ5 KQogCQkJY2FzZSBQR0FTWU5DX0NPUFlfSU46CiAJCQljYXNlIFBHQVNZTkNfQ09QWV9PVVQ6 CiAJCQljYXNlIFBHQVNZTkNfQ09QWV9CT1RIOgotCQkJCWFwcGVuZFBRRXhwQnVmZmVyU3Ry KCZjb25uLT5lcnJvck1lc3NhZ2UsCi0JCQkJCQkJCQkgbGlicHFfZ2V0dGV4dCgiY2Fubm90 IHF1ZXVlIGNvbW1hbmRzIGR1cmluZyBDT1BZXG4iKSk7CisJCQkJbGlicHFfYXBwZW5kX2Vy cm9yKGNvbm4sICJjYW5ub3QgcXVldWUgY29tbWFuZHMgZHVyaW5nIENPUFkiKTsKIAkJCQly ZXR1cm4gZmFsc2U7CiAJCX0KIAl9CkBAIC0xOTE0LDggKzE5MDIsNyBAQCBQUXNlbmRRdWVy eUd1dHMoUEdjb25uICpjb25uLAogCQkJCQluYnl0ZXMgPSBwYXJhbUxlbmd0aHNbaV07CiAJ CQkJZWxzZQogCQkJCXsKLQkJCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNvbm4tPmVycm9y TWVzc2FnZSwKLQkJCQkJCQkJCQkgbGlicHFfZ2V0dGV4dCgibGVuZ3RoIG11c3QgYmUgZ2l2 ZW4gZm9yIGJpbmFyeSBwYXJhbWV0ZXJcbiIpKTsKKwkJCQkJbGlicHFfYXBwZW5kX2Vycm9y KGNvbm4sICJsZW5ndGggbXVzdCBiZSBnaXZlbiBmb3IgYmluYXJ5IHBhcmFtZXRlciIpOwog CQkJCQlnb3RvIHNlbmRGYWlsZWQ7CiAJCQkJfQogCQkJfQpAQCAtMjIzNyw5ICsyMjI0LDcg QEAgUFFnZXRSZXN1bHQoUEdjb25uICpjb25uKQogCQkJcmVzID0gZ2V0Q29weVJlc3VsdChj b25uLCBQR1JFU19DT1BZX0JPVEgpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlhcHBl bmRQUUV4cEJ1ZmZlcigmY29ubi0+ZXJyb3JNZXNzYWdlLAotCQkJCQkJCSAgbGlicHFfZ2V0 dGV4dCgidW5leHBlY3RlZCBhc3luY1N0YXR1czogJWRcbiIpLAotCQkJCQkJCSAgKGludCkg Y29ubi0+YXN5bmNTdGF0dXMpOworCQkJbGlicHFfYXBwZW5kX2Vycm9yKGNvbm4sICJ1bmV4 cGVjdGVkIGFzeW5jU3RhdHVzOiAlZCIsIChpbnQpIGNvbm4tPmFzeW5jU3RhdHVzKTsKIAkJ CXBxU2F2ZUVycm9yUmVzdWx0KGNvbm4pOwogCQkJY29ubi0+YXN5bmNTdGF0dXMgPSBQR0FT WU5DX0lETEU7CS8qIHRyeSB0byByZXN0b3JlIHZhbGlkIHN0YXRlICovCiAJCQlyZXMgPSBw cVByZXBhcmVBc3luY1Jlc3VsdChjb25uKTsKQEAgLTI0MTEsOCArMjM5Niw3IEBAIFBRZXhl Y1N0YXJ0KFBHY29ubiAqY29ubikKIAogCWlmIChjb25uLT5waXBlbGluZVN0YXR1cyAhPSBQ UV9QSVBFTElORV9PRkYpCiAJewotCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY29ubi0+ZXJy b3JNZXNzYWdlLAotCQkJCQkJCSBsaWJwcV9nZXR0ZXh0KCJzeW5jaHJvbm91cyBjb21tYW5k IGV4ZWN1dGlvbiBmdW5jdGlvbnMgYXJlIG5vdCBhbGxvd2VkIGluIHBpcGVsaW5lIG1vZGVc biIpKTsKKwkJbGlicHFfYXBwZW5kX2Vycm9yKGNvbm4sICJzeW5jaHJvbm91cyBjb21tYW5k IGV4ZWN1dGlvbiBmdW5jdGlvbnMgYXJlIG5vdCBhbGxvd2VkIGluIHBpcGVsaW5lIG1vZGUi KTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KIApAQCAtMjQ0NSw4ICsyNDI5LDcgQEAgUFFleGVj U3RhcnQoUEdjb25uICpjb25uKQogCQllbHNlIGlmIChyZXN1bHRTdGF0dXMgPT0gUEdSRVNf Q09QWV9CT1RIKQogCQl7CiAJCQkvKiBXZSBkb24ndCBhbGxvdyBQUWV4ZWMgZHVyaW5nIENP UFkgQk9USCAqLwotCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNvbm4tPmVycm9yTWVzc2Fn ZSwKLQkJCQkJCQkJIGxpYnBxX2dldHRleHQoIlBRZXhlYyBub3QgYWxsb3dlZCBkdXJpbmcg Q09QWSBCT1RIXG4iKSk7CisJCQlsaWJwcV9hcHBlbmRfZXJyb3IoY29ubiwgIlBRZXhlYyBu b3QgYWxsb3dlZCBkdXJpbmcgQ09QWSBCT1RIIik7CiAJCQlyZXR1cm4gZmFsc2U7CiAJCX0K IAkJLyogY2hlY2sgZm9yIGxvc3Mgb2YgY29ubmVjdGlvbiwgdG9vICovCkBAIC0yNjcyLDgg KzI2NTUsNyBAQCBQUXB1dENvcHlEYXRhKFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqYnVm ZmVyLCBpbnQgbmJ5dGVzKQogCWlmIChjb25uLT5hc3luY1N0YXR1cyAhPSBQR0FTWU5DX0NP UFlfSU4gJiYKIAkJY29ubi0+YXN5bmNTdGF0dXMgIT0gUEdBU1lOQ19DT1BZX0JPVEgpCiAJ ewotCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY29ubi0+ZXJyb3JNZXNzYWdlLAotCQkJCQkJ CSBsaWJwcV9nZXR0ZXh0KCJubyBDT1BZIGluIHByb2dyZXNzXG4iKSk7CisJCWxpYnBxX2Fw cGVuZF9lcnJvcihjb25uLCAibm8gQ09QWSBpbiBwcm9ncmVzcyIpOwogCQlyZXR1cm4gLTE7 CiAJfQogCkBAIC0yNzI4LDggKzI3MTAsNyBAQCBQUXB1dENvcHlFbmQoUEdjb25uICpjb25u LCBjb25zdCBjaGFyICplcnJvcm1zZykKIAlpZiAoY29ubi0+YXN5bmNTdGF0dXMgIT0gUEdB U1lOQ19DT1BZX0lOICYmCiAJCWNvbm4tPmFzeW5jU3RhdHVzICE9IFBHQVNZTkNfQ09QWV9C T1RIKQogCXsKLQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNvbm4tPmVycm9yTWVzc2FnZSwK LQkJCQkJCQkgbGlicHFfZ2V0dGV4dCgibm8gQ09QWSBpbiBwcm9ncmVzc1xuIikpOworCQls aWJwcV9hcHBlbmRfZXJyb3IoY29ubiwgIm5vIENPUFkgaW4gcHJvZ3Jlc3MiKTsKIAkJcmV0 dXJuIC0xOwogCX0KIApAQCAtMjc5Nyw4ICsyNzc4LDcgQEAgUFFnZXRDb3B5RGF0YShQR2Nv bm4gKmNvbm4sIGNoYXIgKipidWZmZXIsIGludCBhc3luYykKIAlpZiAoY29ubi0+YXN5bmNT dGF0dXMgIT0gUEdBU1lOQ19DT1BZX09VVCAmJgogCQljb25uLT5hc3luY1N0YXR1cyAhPSBQ R0FTWU5DX0NPUFlfQk9USCkKIAl7Ci0JCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjb25uLT5l cnJvck1lc3NhZ2UsCi0JCQkJCQkJIGxpYnBxX2dldHRleHQoIm5vIENPUFkgaW4gcHJvZ3Jl c3NcbiIpKTsKKwkJbGlicHFfYXBwZW5kX2Vycm9yKGNvbm4sICJubyBDT1BZIGluIHByb2dy ZXNzIik7CiAJCXJldHVybiAtMjsKIAl9CiAJcmV0dXJuIHBxR2V0Q29weURhdGEzKGNvbm4s IGJ1ZmZlciwgYXN5bmMpOwpAQCAtMjk3NywxNiArMjk1NywxNCBAQCBQUWZuKFBHY29ubiAq Y29ubiwKIAogCWlmIChjb25uLT5waXBlbGluZVN0YXR1cyAhPSBQUV9QSVBFTElORV9PRkYp CiAJewotCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY29ubi0+ZXJyb3JNZXNzYWdlLAotCQkJ CQkJCSBsaWJwcV9nZXR0ZXh0KCJQUWZuIG5vdCBhbGxvd2VkIGluIHBpcGVsaW5lIG1vZGVc biIpKTsKKwkJbGlicHFfYXBwZW5kX2Vycm9yKGNvbm4sICJQUWZuIG5vdCBhbGxvd2VkIGlu IHBpcGVsaW5lIG1vZGUiKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCiAJaWYgKGNvbm4tPnNv Y2sgPT0gUEdJTlZBTElEX1NPQ0tFVCB8fCBjb25uLT5hc3luY1N0YXR1cyAhPSBQR0FTWU5D X0lETEUgfHwKIAkJcGdIYXZlUGVuZGluZ1Jlc3VsdChjb25uKSkKIAl7Ci0JCWFwcGVuZFBR RXhwQnVmZmVyU3RyKCZjb25uLT5lcnJvck1lc3NhZ2UsCi0JCQkJCQkJIGxpYnBxX2dldHRl eHQoImNvbm5lY3Rpb24gaW4gd3Jvbmcgc3RhdGVcbiIpKTsKKwkJbGlicHFfYXBwZW5kX2Vy cm9yKGNvbm4sICJjb25uZWN0aW9uIGluIHdyb25nIHN0YXRlIik7CiAJCXJldHVybiBOVUxM OwogCX0KIApAQCAtMzAyOSw4ICszMDA3LDcgQEAgUFFlbnRlclBpcGVsaW5lTW9kZShQR2Nv bm4gKmNvbm4pCiAKIAlpZiAoY29ubi0+YXN5bmNTdGF0dXMgIT0gUEdBU1lOQ19JRExFKQog CXsKLQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNvbm4tPmVycm9yTWVzc2FnZSwKLQkJCQkJ CQkgbGlicHFfZ2V0dGV4dCgiY2Fubm90IGVudGVyIHBpcGVsaW5lIG1vZGUsIGNvbm5lY3Rp b24gbm90IGlkbGVcbiIpKTsKKwkJbGlicHFfYXBwZW5kX2Vycm9yKGNvbm4sICJjYW5ub3Qg ZW50ZXIgcGlwZWxpbmUgbW9kZSwgY29ubmVjdGlvbiBub3QgaWRsZSIpOwogCQlyZXR1cm4g MDsKIAl9CiAKQEAgLTMwNjYsMTMgKzMwNDMsMTEgQEAgUFFleGl0UGlwZWxpbmVNb2RlKFBH Y29ubiAqY29ubikKIAkJY2FzZSBQR0FTWU5DX1JFQURZOgogCQljYXNlIFBHQVNZTkNfUkVB RFlfTU9SRToKIAkJCS8qIHRoZXJlIGFyZSBzb21lIHVuY29sbGVjdGVkIHJlc3VsdHMgKi8K LQkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjb25uLT5lcnJvck1lc3NhZ2UsCi0JCQkJCQkJ CSBsaWJwcV9nZXR0ZXh0KCJjYW5ub3QgZXhpdCBwaXBlbGluZSBtb2RlIHdpdGggdW5jb2xs ZWN0ZWQgcmVzdWx0c1xuIikpOworCQkJbGlicHFfYXBwZW5kX2Vycm9yKGNvbm4sICJjYW5u b3QgZXhpdCBwaXBlbGluZSBtb2RlIHdpdGggdW5jb2xsZWN0ZWQgcmVzdWx0cyIpOwogCQkJ cmV0dXJuIDA7CiAKIAkJY2FzZSBQR0FTWU5DX0JVU1k6Ci0JCQlhcHBlbmRQUUV4cEJ1ZmZl clN0cigmY29ubi0+ZXJyb3JNZXNzYWdlLAotCQkJCQkJCQkgbGlicHFfZ2V0dGV4dCgiY2Fu bm90IGV4aXQgcGlwZWxpbmUgbW9kZSB3aGlsZSBidXN5XG4iKSk7CisJCQlsaWJwcV9hcHBl bmRfZXJyb3IoY29ubiwgImNhbm5vdCBleGl0IHBpcGVsaW5lIG1vZGUgd2hpbGUgYnVzeSIp OwogCQkJcmV0dXJuIDA7CiAKIAkJY2FzZSBQR0FTWU5DX0lETEU6CkBAIC0zMDgzLDE1ICsz MDU4LDEzIEBAIFBRZXhpdFBpcGVsaW5lTW9kZShQR2Nvbm4gKmNvbm4pCiAJCWNhc2UgUEdB U1lOQ19DT1BZX0lOOgogCQljYXNlIFBHQVNZTkNfQ09QWV9PVVQ6CiAJCWNhc2UgUEdBU1lO Q19DT1BZX0JPVEg6Ci0JCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY29ubi0+ZXJyb3JNZXNz YWdlLAotCQkJCQkJCQkgbGlicHFfZ2V0dGV4dCgiY2Fubm90IGV4aXQgcGlwZWxpbmUgbW9k ZSB3aGlsZSBpbiBDT1BZXG4iKSk7CisJCQlsaWJwcV9hcHBlbmRfZXJyb3IoY29ubiwgImNh bm5vdCBleGl0IHBpcGVsaW5lIG1vZGUgd2hpbGUgaW4gQ09QWSIpOwogCX0KIAogCS8qIHN0 aWxsIHdvcmsgdG8gcHJvY2VzcyAqLwogCWlmIChjb25uLT5jbWRfcXVldWVfaGVhZCAhPSBO VUxMKQogCXsKLQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNvbm4tPmVycm9yTWVzc2FnZSwK LQkJCQkJCQkgbGlicHFfZ2V0dGV4dCgiY2Fubm90IGV4aXQgcGlwZWxpbmUgbW9kZSB3aXRo IHVuY29sbGVjdGVkIHJlc3VsdHNcbiIpKTsKKwkJbGlicHFfYXBwZW5kX2Vycm9yKGNvbm4s ICJjYW5ub3QgZXhpdCBwaXBlbGluZSBtb2RlIHdpdGggdW5jb2xsZWN0ZWQgcmVzdWx0cyIp OwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTMyMDYsOCArMzE3OSw3IEBAIHBxUGlwZWxpbmVQ cm9jZXNzUXVldWUoUEdjb25uICpjb25uKQogCQljb25uLT5yZXN1bHQgPSBQUW1ha2VFbXB0 eVBHcmVzdWx0KGNvbm4sIFBHUkVTX1BJUEVMSU5FX0FCT1JURUQpOwogCQlpZiAoIWNvbm4t PnJlc3VsdCkKIAkJewotCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNvbm4tPmVycm9yTWVz c2FnZSwKLQkJCQkJCQkJIGxpYnBxX2dldHRleHQoIm91dCBvZiBtZW1vcnlcbiIpKTsKKwkJ CWxpYnBxX2FwcGVuZF9lcnJvcihjb25uLCAib3V0IG9mIG1lbW9yeSIpOwogCQkJcHFTYXZl RXJyb3JSZXN1bHQoY29ubik7CiAJCQlyZXR1cm47CiAJCX0KQEAgLTMyNTAsOCArMzIyMiw3 IEBAIFBRcGlwZWxpbmVTeW5jKFBHY29ubiAqY29ubikKIAogCWlmIChjb25uLT5waXBlbGlu ZVN0YXR1cyA9PSBQUV9QSVBFTElORV9PRkYpCiAJewotCQlhcHBlbmRQUUV4cEJ1ZmZlclN0 cigmY29ubi0+ZXJyb3JNZXNzYWdlLAotCQkJCQkJCSBsaWJwcV9nZXR0ZXh0KCJjYW5ub3Qg c2VuZCBwaXBlbGluZSB3aGVuIG5vdCBpbiBwaXBlbGluZSBtb2RlXG4iKSk7CisJCWxpYnBx X2FwcGVuZF9lcnJvcihjb25uLCAiY2Fubm90IHNlbmQgcGlwZWxpbmUgd2hlbiBub3QgaW4g cGlwZWxpbmUgbW9kZSIpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTMzMTcsOCArMzI4OCw3 IEBAIFBRc2VuZEZsdXNoUmVxdWVzdChQR2Nvbm4gKmNvbm4pCiAJLyogRG9uJ3QgdHJ5IHRv IHNlbmQgaWYgd2Uga25vdyB0aGVyZSdzIG5vIGxpdmUgY29ubmVjdGlvbi4gKi8KIAlpZiAo Y29ubi0+c3RhdHVzICE9IENPTk5FQ1RJT05fT0spCiAJewotCQlhcHBlbmRQUUV4cEJ1ZmZl clN0cigmY29ubi0+ZXJyb3JNZXNzYWdlLAotCQkJCQkJCSBsaWJwcV9nZXR0ZXh0KCJubyBj b25uZWN0aW9uIHRvIHRoZSBzZXJ2ZXJcbiIpKTsKKwkJbGlicHFfYXBwZW5kX2Vycm9yKGNv bm4sICJubyBjb25uZWN0aW9uIHRvIHRoZSBzZXJ2ZXIiKTsKIAkJcmV0dXJuIDA7CiAJfQog CkBAIC0zMzI2LDggKzMyOTYsNyBAQCBQUXNlbmRGbHVzaFJlcXVlc3QoUEdjb25uICpjb25u KQogCWlmIChjb25uLT5hc3luY1N0YXR1cyAhPSBQR0FTWU5DX0lETEUgJiYKIAkJY29ubi0+ cGlwZWxpbmVTdGF0dXMgPT0gUFFfUElQRUxJTkVfT0ZGKQogCXsKLQkJYXBwZW5kUFFFeHBC dWZmZXJTdHIoJmNvbm4tPmVycm9yTWVzc2FnZSwKLQkJCQkJCQkgbGlicHFfZ2V0dGV4dCgi YW5vdGhlciBjb21tYW5kIGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3NcbiIpKTsKKwkJbGlicHFf YXBwZW5kX2Vycm9yKGNvbm4sICJhbm90aGVyIGNvbW1hbmQgaXMgYWxyZWFkeSBpbiBwcm9n cmVzcyIpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTQwNjMsOCArNDAzMiw3IEBAIFBRZXNj YXBlU3RyaW5nSW50ZXJuYWwoUEdjb25uICpjb25uLAogCQkJaWYgKGVycm9yKQogCQkJCSpl cnJvciA9IDE7CiAJCQlpZiAoY29ubikKLQkJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY29u bi0+ZXJyb3JNZXNzYWdlLAotCQkJCQkJCQkJIGxpYnBxX2dldHRleHQoImluY29tcGxldGUg bXVsdGlieXRlIGNoYXJhY3RlclxuIikpOworCQkJCWxpYnBxX2FwcGVuZF9lcnJvcihjb25u LCAiaW5jb21wbGV0ZSBtdWx0aWJ5dGUgY2hhcmFjdGVyIik7CiAJCQlmb3IgKDsgaSA8IGxl bjsgaSsrKQogCQkJewogCQkJCWlmICgoKHNpemVfdCkgKHRhcmdldCAtIHRvKSkgLyAyID49 IGxlbmd0aCkKQEAgLTQxNTQsOCArNDEyMiw3IEBAIFBRZXNjYXBlSW50ZXJuYWwoUEdjb25u ICpjb25uLCBjb25zdCBjaGFyICpzdHIsIHNpemVfdCBsZW4sIGJvb2wgYXNfaWRlbnQpCiAJ CQkvKiBNdWx0aWJ5dGUgY2hhcmFjdGVyIG92ZXJydW5zIGFsbG93YWJsZSBsZW5ndGguICov CiAJCQlpZiAoKHMgLSBzdHIpICsgY2hhcmxlbiA+IGxlbiB8fCBtZW1jaHIocywgMCwgY2hh cmxlbikgIT0gTlVMTCkKIAkJCXsKLQkJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY29ubi0+ ZXJyb3JNZXNzYWdlLAotCQkJCQkJCQkJIGxpYnBxX2dldHRleHQoImluY29tcGxldGUgbXVs dGlieXRlIGNoYXJhY3RlclxuIikpOworCQkJCWxpYnBxX2FwcGVuZF9lcnJvcihjb25uLCAi aW5jb21wbGV0ZSBtdWx0aWJ5dGUgY2hhcmFjdGVyIik7CiAJCQkJcmV0dXJuIE5VTEw7CiAJ CQl9CiAKQEAgLTQxNzIsOCArNDEzOSw3IEBAIFBRZXNjYXBlSW50ZXJuYWwoUEdjb25uICpj b25uLCBjb25zdCBjaGFyICpzdHIsIHNpemVfdCBsZW4sIGJvb2wgYXNfaWRlbnQpCiAJcmVz dWx0ID0gcnAgPSAoY2hhciAqKSBtYWxsb2MocmVzdWx0X3NpemUpOwogCWlmIChycCA9PSBO VUxMKQogCXsKLQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNvbm4tPmVycm9yTWVzc2FnZSwK LQkJCQkJCQkgbGlicHFfZ2V0dGV4dCgib3V0IG9mIG1lbW9yeVxuIikpOworCQlsaWJwcV9h cHBlbmRfZXJyb3IoY29ubiwgIm91dCBvZiBtZW1vcnkiKTsKIAkJcmV0dXJuIE5VTEw7CiAJ fQogCkBAIC00MzM3LDggKzQzMDMsNyBAQCBQUWVzY2FwZUJ5dGVhSW50ZXJuYWwoUEdjb25u ICpjb25uLAogCWlmIChycCA9PSBOVUxMKQogCXsKIAkJaWYgKGNvbm4pCi0JCQlhcHBlbmRQ UUV4cEJ1ZmZlclN0cigmY29ubi0+ZXJyb3JNZXNzYWdlLAotCQkJCQkJCQkgbGlicHFfZ2V0 dGV4dCgib3V0IG9mIG1lbW9yeVxuIikpOworCQkJbGlicHFfYXBwZW5kX2Vycm9yKGNvbm4s ICJvdXQgb2YgbWVtb3J5Iik7CiAJCXJldHVybiBOVUxMOwogCX0KIApkaWZmIC0tZ2l0IGEv c3JjL2ludGVyZmFjZXMvbGlicHEvZmUtbWlzYy5jIGIvc3JjL2ludGVyZmFjZXMvbGlicHEv ZmUtbWlzYy5jCmluZGV4IDc5NTUwMGM1OTMuLmY1MzI0NDAxZWUgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbnRlcmZhY2VzL2xpYnBxL2ZlLW1pc2MuYworKysgYi9zcmMvaW50ZXJmYWNlcy9saWJw cS9mZS1taXNjLmMKQEAgLTEyNzcsNCArMTI3NywxOSBAQCBsaWJwcV9uZ2V0dGV4dChjb25z dCBjaGFyICptc2dpZCwgY29uc3QgY2hhciAqbXNnaWRfcGx1cmFsLCB1bnNpZ25lZCBsb25n IG4pCiAJcmV0dXJuIGRuZ2V0dGV4dChQR19URVhURE9NQUlOKCJsaWJwcSIpLCBtc2dpZCwg bXNnaWRfcGx1cmFsLCBuKTsKIH0KIAordm9pZAorbGlicHFfYXBwZW5kX2Vycm9yKFBHY29u biAqY29ubiwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdAkJYXJnczsKKwor CUFzc2VydChmbXRbc3RybGVuKGZtdCkgLSAxXSAhPSAnXG4nKTsKKworCXZhX3N0YXJ0KGFy Z3MsIGZtdCk7CisKKwlhcHBlbmRQUUV4cEJ1ZmZlclZBKCZjb25uLT5lcnJvck1lc3NhZ2Us IGxpYnBxX2dldHRleHQoZm10KSwgYXJncyk7CisJYXBwZW5kUFFFeHBCdWZmZXJDaGFyKCZj b25uLT5lcnJvck1lc3NhZ2UsICdcbicpOworCisJdmFfZW5kKGFyZ3MpOworfQorCiAjZW5k aWYJCQkJCQkJLyogRU5BQkxFX05MUyAqLwpkaWZmIC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMv bGlicHEvbGlicHEtaW50LmggYi9zcmMvaW50ZXJmYWNlcy9saWJwcS9saWJwcS1pbnQuaApp bmRleCAxZWI3NTJhODJkLi4yMWJlY2Y5OGNjIDEwMDY0NAotLS0gYS9zcmMvaW50ZXJmYWNl cy9saWJwcS9saWJwcS1pbnQuaAorKysgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS9saWJwcS1p bnQuaApAQCAtODgyLDYgKzg4Miw4IEBAIGV4dGVybiBjaGFyICpsaWJwcV9uZ2V0dGV4dChj b25zdCBjaGFyICptc2dpZCwgY29uc3QgY2hhciAqbXNnaWRfcGx1cmFsLCB1bnNpZ25lCiAj ZGVmaW5lIGxpYnBxX25nZXR0ZXh0KHMsIHAsIG4pICgobikgPT0gMSA/IChzKSA6IChwKSkK ICNlbmRpZgogCitleHRlcm4gdm9pZCBsaWJwcV9hcHBlbmRfZXJyb3IoUEdjb25uICpjb25u LCBjb25zdCBjaGFyICpmbXQsIC4uLikgcGdfYXR0cmlidXRlX3ByaW50ZigyLCAzKTsKKwog LyoKICAqIFRoZXNlIG1hY3JvcyBhcmUgbmVlZGVkIHRvIGxldCBlcnJvci1oYW5kbGluZyBj b2RlIGJlIHBvcnRhYmxlIGJldHdlZW4KICAqIFVuaXggYW5kIFdpbmRvd3MuICAodWdoKQpk aWZmIC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMvbGlicHEvbmxzLm1rIGIvc3JjL2ludGVyZmFj ZXMvbGlicHEvbmxzLm1rCmluZGV4IDkyNTZiNDI2YzEuLjlkOTk0YWMxOTYgMTAwNjQ0Ci0t LSBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxL25scy5taworKysgYi9zcmMvaW50ZXJmYWNlcy9s aWJwcS9ubHMubWsKQEAgLTEsNSArMSw1IEBACiAjIHNyYy9pbnRlcmZhY2VzL2xpYnBxL25s cy5tawogQ0FUQUxPR19OQU1FICAgICA9IGxpYnBxCiBHRVRURVhUX0ZJTEVTICAgID0gZmUt YXV0aC5jIGZlLWF1dGgtc2NyYW0uYyBmZS1jb25uZWN0LmMgZmUtZXhlYy5jIGZlLWdzc2Fw aS1jb21tb24uYyBmZS1sb2JqLmMgZmUtbWlzYy5jIGZlLXByb3RvY29sMy5jIGZlLXNlY3Vy ZS5jIGZlLXNlY3VyZS1jb21tb24uYyBmZS1zZWN1cmUtZ3NzYXBpLmMgZmUtc2VjdXJlLW9w ZW5zc2wuYyB3aW4zMi5jIC4uLy4uL3BvcnQvdGhyZWFkLmMKLUdFVFRFWFRfVFJJR0dFUlMg PSBsaWJwcV9nZXR0ZXh0IHBxSW50ZXJuYWxOb3RpY2U6MgotR0VUVEVYVF9GTEFHUyAgICA9 IGxpYnBxX2dldHRleHQ6MTpwYXNzLWMtZm9ybWF0IHBxSW50ZXJuYWxOb3RpY2U6MjpjLWZv cm1hdAorR0VUVEVYVF9UUklHR0VSUyA9IGxpYnBxX2FwcGVuZF9lcnJvcjoyIGxpYnBxX2dl dHRleHQgcHFJbnRlcm5hbE5vdGljZToyCitHRVRURVhUX0ZMQUdTICAgID0gbGlicHFfYXBw ZW5kX2Vycm9yOjIgbGlicHFfZ2V0dGV4dDoxOnBhc3MtYy1mb3JtYXQgcHFJbnRlcm5hbE5v dGljZToyOmMtZm9ybWF0CmRpZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNlcy9saWJwcS9wcWV4 cGJ1ZmZlci5jIGIvc3JjL2ludGVyZmFjZXMvbGlicHEvcHFleHBidWZmZXIuYwppbmRleCBl YjUxZTZkMDg4Li42NTYyMWVjM2IxIDEwMDY0NAotLS0gYS9zcmMvaW50ZXJmYWNlcy9saWJw cS9wcWV4cGJ1ZmZlci5jCisrKyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL3BxZXhwYnVmZmVy LmMKQEAgLTQwLDcgKzQwLDcgQEAgc3RhdGljIGNvbnN0IGNoYXIgb29tX2J1ZmZlclsxXSA9 ICIiOwogLyogTmVlZCBhIGNoYXIgKiBmb3IgdW5jb25zdGlmeSgpIGNvbXBhdGliaWxpdHkg Ki8KIHN0YXRpYyBjb25zdCBjaGFyICpvb21fYnVmZmVyX3B0ciA9IG9vbV9idWZmZXI7CiAK LXN0YXRpYyBib29sIGFwcGVuZFBRRXhwQnVmZmVyVkEoUFFFeHBCdWZmZXIgc3RyLCBjb25z dCBjaGFyICpmbXQsIHZhX2xpc3QgYXJncykgcGdfYXR0cmlidXRlX3ByaW50ZigyLCAwKTsK K3N0YXRpYyBib29sIGFwcGVuZFBRRXhwQnVmZmVyVkFfaW50ZXJuYWwoUFFFeHBCdWZmZXIg c3RyLCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXJncykgcGdfYXR0cmlidXRlX3ByaW50 ZigyLCAwKTsKIAogCiAvKgpAQCAtMjUwLDcgKzI1MCw3IEBAIHByaW50ZlBRRXhwQnVmZmVy KFBRRXhwQnVmZmVyIHN0ciwgY29uc3QgY2hhciAqZm10LC4uLikKIAl7CiAJCWVycm5vID0g c2F2ZV9lcnJubzsKIAkJdmFfc3RhcnQoYXJncywgZm10KTsKLQkJZG9uZSA9IGFwcGVuZFBR RXhwQnVmZmVyVkEoc3RyLCBmbXQsIGFyZ3MpOworCQlkb25lID0gYXBwZW5kUFFFeHBCdWZm ZXJWQV9pbnRlcm5hbChzdHIsIGZtdCwgYXJncyk7CiAJCXZhX2VuZChhcmdzKTsKIAl9IHdo aWxlICghZG9uZSk7CiB9CkBAIC0yNzgsMTMgKzI3OCwzMCBAQCBhcHBlbmRQUUV4cEJ1ZmZl cihQUUV4cEJ1ZmZlciBzdHIsIGNvbnN0IGNoYXIgKmZtdCwuLi4pCiAJewogCQllcnJubyA9 IHNhdmVfZXJybm87CiAJCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7Ci0JCWRvbmUgPSBhcHBlbmRQ UUV4cEJ1ZmZlclZBKHN0ciwgZm10LCBhcmdzKTsKKwkJZG9uZSA9IGFwcGVuZFBRRXhwQnVm ZmVyVkFfaW50ZXJuYWwoc3RyLCBmbXQsIGFyZ3MpOwogCQl2YV9lbmQoYXJncyk7CiAJfSB3 aGlsZSAoIWRvbmUpOwogfQogCit2b2lkCithcHBlbmRQUUV4cEJ1ZmZlclZBKFBRRXhwQnVm ZmVyIHN0ciwgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFyZ3MpCit7CisJaW50CQkJc2F2 ZV9lcnJubyA9IGVycm5vOworCWJvb2wJCWRvbmU7CisKKwlpZiAoUFFFeHBCdWZmZXJCcm9r ZW4oc3RyKSkKKwkJcmV0dXJuOwkJCQkJLyogYWxyZWFkeSBmYWlsZWQgKi8KKworCS8qIExv b3AgaW4gY2FzZSB3ZSBoYXZlIHRvIHJldHJ5IGFmdGVyIGVubGFyZ2luZyB0aGUgYnVmZmVy LiAqLworCWRvCisJeworCQllcnJubyA9IHNhdmVfZXJybm87CisJCWRvbmUgPSBhcHBlbmRQ UUV4cEJ1ZmZlclZBX2ludGVybmFsKHN0ciwgZm10LCBhcmdzKTsKKwl9IHdoaWxlICghZG9u ZSk7Cit9CisKIC8qCi0gKiBhcHBlbmRQUUV4cEJ1ZmZlclZBCisgKiBhcHBlbmRQUUV4cEJ1 ZmZlclZBX2ludGVybmFsCiAgKiBTaGFyZWQgZ3V0cyBvZiBwcmludGZQUUV4cEJ1ZmZlci9h cHBlbmRQUUV4cEJ1ZmZlci4KICAqIEF0dGVtcHQgdG8gZm9ybWF0IGRhdGEgYW5kIGFwcGVu ZCBpdCB0byBzdHIuICBSZXR1cm5zIHRydWUgaWYgZG9uZQogICogKGVpdGhlciBzdWNjZXNz ZnVsIG9yIGhhcmQgZmFpbHVyZSksIGZhbHNlIGlmIG5lZWQgdG8gcmV0cnkuCkBAIC0yOTMs NyArMzEwLDcgQEAgYXBwZW5kUFFFeHBCdWZmZXIoUFFFeHBCdWZmZXIgc3RyLCBjb25zdCBj aGFyICpmbXQsLi4uKQogICogd2hlbiBsb29waW5nLCBpbiBjYXNlIHRoZSBmbXQgY29udGFp bnMgIiVtIi4KICAqLwogc3RhdGljIGJvb2wKLWFwcGVuZFBRRXhwQnVmZmVyVkEoUFFFeHBC dWZmZXIgc3RyLCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXJncykKK2FwcGVuZFBRRXhw QnVmZmVyVkFfaW50ZXJuYWwoUFFFeHBCdWZmZXIgc3RyLCBjb25zdCBjaGFyICpmbXQsIHZh X2xpc3QgYXJncykKIHsKIAlzaXplX3QJCWF2YWlsOwogCXNpemVfdAkJbmVlZGVkOwpkaWZm IC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMvbGlicHEvcHFleHBidWZmZXIuaCBiL3NyYy9pbnRl cmZhY2VzL2xpYnBxL3BxZXhwYnVmZmVyLmgKaW5kZXggZWZkNjUyYzgwYS4uYjgyMTZiOGE3 YiAxMDA2NDQKLS0tIGEvc3JjL2ludGVyZmFjZXMvbGlicHEvcHFleHBidWZmZXIuaAorKysg Yi9zcmMvaW50ZXJmYWNlcy9saWJwcS9wcWV4cGJ1ZmZlci5oCkBAIC0xNTcsNiArMTU3LDgg QEAgZXh0ZXJuIHZvaWQgcHJpbnRmUFFFeHBCdWZmZXIoUFFFeHBCdWZmZXIgc3RyLCBjb25z dCBjaGFyICpmbXQsLi4uKSBwZ19hdHRyaWJ1dGUKICAqLwogZXh0ZXJuIHZvaWQgYXBwZW5k UFFFeHBCdWZmZXIoUFFFeHBCdWZmZXIgc3RyLCBjb25zdCBjaGFyICpmbXQsLi4uKSBwZ19h dHRyaWJ1dGVfcHJpbnRmKDIsIDMpOwogCitleHRlcm4gdm9pZCBhcHBlbmRQUUV4cEJ1ZmZl clZBKFBRRXhwQnVmZmVyIHN0ciwgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFyZ3MpIHBn X2F0dHJpYnV0ZV9wcmludGYoMiwgMCk7CisKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CiAgKiBhcHBlbmRQUUV4cEJ1ZmZlclN0cgogICogQXBwZW5kIHRoZSBnaXZlbiBzdHJpbmcg dG8gYSBQUUV4cEJ1ZmZlciwgYWxsb2NhdGluZyBtb3JlIHNwYWNlCi0tIAoyLjM3LjEKCg== --------------CINrYwT0tzwMrlP3v0VE2Krz--