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 1p5MER-0003Ku-6A for pgsql-hackers@arkaria.postgresql.org; Wed, 14 Dec 2022 07:31:11 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1p5MEP-00044b-Ht for pgsql-hackers@arkaria.postgresql.org; Wed, 14 Dec 2022 07:31:09 +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 1p5MEP-00044C-50 for pgsql-hackers@lists.postgresql.org; Wed, 14 Dec 2022 07:31:09 +0000 Received: from new2-smtp.messagingengine.com ([66.111.4.224]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1p5MEM-0005Zi-AT for pgsql-hackers@postgresql.org; Wed, 14 Dec 2022 07:31:08 +0000 Received: from compute2.internal (compute2.nyi.internal [10.202.2.46]) by mailnew.nyi.internal (Postfix) with ESMTP id 53AD75808B0 for ; Wed, 14 Dec 2022 02:31:04 -0500 (EST) Received: from mailfrontend2 ([10.202.2.163]) by compute2.internal (MEProxy); Wed, 14 Dec 2022 02:31:04 -0500 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=fm2; t=1671003064; x= 1671010264; bh=599thaSzHsOwoJoUTeJQUdtJbc0JxUa/Q0SQX5yX2NA=; b=d Ol+BABFslblAhW2R6DFcBEkvbf6Z0o4YsXOJUZ57yIG2zlqfRb5En6zXuKivyqSV zfrnigHbC7HRB0Av0PQ6rcGfNlujcR+wUvTMsp4W7w+EBAo03InQRWnoiKrsocRI in8+Dx56Rp2tnmhLR/nPqni0dtk6CCHNEPhdi0ribXjJGr3VZY4YK6bheIPjUTgk FSDMt8qXj4Rkqjs+hMS1XDQj5ze7wLwgLsgawFjqgStceNMYdebyI9Tfsmwoxwfj mC+YW1Dw59DbBjEM5sWS1T5E/dkTEy6cGG32TdFwNmk3lgejMgxQPiuStrd+g3PP dmF2SbFx7uTRn+EHCm9Sg== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvhedrfedvgddutdejucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucenucfjughrpegtkfffgggfhffuvfesmhdtreertd efjeenucfhrhhomheprfgvthgvrhcugfhishgvnhhtrhgruhhtuceophgvthgvrhdrvghi shgvnhhtrhgruhhtsegvnhhtvghrphhrihhsvggusgdrtghomheqnecuggftrfgrthhtvg hrnhepteevuedvieekieeghfevfffhhfdvjeevleelfeeikeeikedvffegteekuddtfeel necuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomhepphgvth gvrhdrvghishgvnhhtrhgruhhtsegvnhhtvghrphhrihhsvggusgdrtghomh X-ME-Proxy: Feedback-ID: i131946ab:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA for ; Wed, 14 Dec 2022 02:31:03 -0500 (EST) Content-Type: multipart/mixed; boundary="------------1jC9apeBDDFZfMW4utmJ0TSn" Message-ID: <5238bbed-0b01-83a6-d4b2-7eb0562a054e@enterprisedb.com> Date: Wed, 14 Dec 2022 08:31:02 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Thunderbird/102.5.1 Content-Language: en-US From: Peter Eisentraut Subject: Common function for percent placeholder replacement 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. --------------1jC9apeBDDFZfMW4utmJ0TSn Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit There are a number of places where a shell command is constructed with percent-placeholders (like %x). First, it's obviously cumbersome to have to open-code this several times. Second, each of those pieces of code silently encodes some edge case behavior, such as what to do with unrecognized placeholders. (I remember when I last did one of these, I stared very hard at the existing code instances to figure out what they would do.) We now also have a newer instance in basebackup_to_shell.c that has different behavior in such cases. (Maybe it's better, but it would be good to be explicit and consistent about this.) This patch factors out this logic into a separate function. I have documented to "old" error handling (which is to not handle them) and brutally converted basebackup_to_shell.c to use that. We could also adopt the new behavior; now there is only a single place to change for that. Note that this is only used for shell commands with placeholders, not for other places with placeholders, such as prompts and log line prefixes, which would (IMO) need a different API that wouldn't be quite as compact. This is explained in the code comments. --------------1jC9apeBDDFZfMW4utmJ0TSn Content-Type: text/plain; charset=UTF-8; name="v1-0001-Common-function-for-percent-placeholder-replaceme.patch" Content-Disposition: attachment; filename*0="v1-0001-Common-function-for-percent-placeholder-replaceme.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBlMGU0NGRiZmZhZmE1MGJmMTViY2E2YTAzZTk4NzgzYTgyY2UwNzJjIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBFaXNlbnRyYXV0IDxwZXRlckBlaXNlbnRy YXV0Lm9yZz4KRGF0ZTogV2VkLCAxNCBEZWMgMjAyMiAwODoxNzoyNSArMDEwMApTdWJqZWN0 OiBbUEFUQ0ggdjFdIENvbW1vbiBmdW5jdGlvbiBmb3IgcGVyY2VudCBwbGFjZWhvbGRlciBy ZXBsYWNlbWVudAoKVGhlcmUgYXJlIGEgbnVtYmVyIG9mIHBsYWNlcyB3aGVyZSBhIHNoZWxs IGNvbW1hbmQgaXMgY29uc3RydWN0ZWQgd2l0aApwZXJjZW50LXBsYWNlaG9sZGVycyAobGlr ZSAleCkuICBJdCdzIGN1bWJlcnNvbWUgdG8gaGF2ZSB0byBvcGVuLWNvZGUKdGhpcyBzZXZl cmFsIHRpbWVzLiAgVGhpcyBmYWN0b3JzIG91dCB0aGlzIGxvZ2ljIGludG8gYSBzZXBhcmF0 ZQpmdW5jdGlvbi4gIFRoaXMgYWxzbyBhbGxvd3MgdXMgdG8gZW5zdXJlIGNvbnNpc3RlbmN5 IGZvciBhbmQgZG9jdW1lbnQKc29tZSBzdWJ0bGUgYmVoYXZpb3JzLCBzdWNoIGFzIHdoYXQg dG8gZG8gd2l0aCB1bnJlY29nbml6ZWQKcGxhY2Vob2xkZXJzLgotLS0KIC4uLi9iYXNlYmFj a3VwX3RvX3NoZWxsL2Jhc2ViYWNrdXBfdG9fc2hlbGwuYyB8ICA1NSArLS0tLS0tLS0KIHNy Yy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dhcmNoaXZlLmMgICAgICB8ICA0NSArLS0t LS0tLQogc3JjL2JhY2tlbmQvbGlicHEvYmUtc2VjdXJlLWNvbW1vbi5jICAgICAgICAgIHwg IDM4ICsrLS0tLQogc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9zaGVsbF9hcmNoaXZlLmMgICAg ICAgIHwgIDU5ICsrLS0tLS0tLS0KIHNyYy9jb21tb24vTWFrZWZpbGUgICAgICAgICAgICAg ICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvY29tbW9uL2FyY2hpdmUuYyAgICAgICAgICAg ICAgICAgICAgICAgICAgfCAgODEgKystLS0tLS0tLS0tLQogc3JjL2NvbW1vbi9tZXNvbi5i dWlsZCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9jb21tb24vcGVyY2Vu dHJlcGwuYyAgICAgICAgICAgICAgICAgICAgICB8IDEwOCArKysrKysrKysrKysrKysrKysK IHNyYy9pbmNsdWRlL2NvbW1vbi9wZXJjZW50cmVwbC5oICAgICAgICAgICAgICB8ICAxOCAr KysKIDkgZmlsZXMgY2hhbmdlZCwgMTYxIGluc2VydGlvbnMoKyksIDI0NSBkZWxldGlvbnMo LSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvY29tbW9uL3BlcmNlbnRyZXBsLmMKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBzcmMvaW5jbHVkZS9jb21tb24vcGVyY2VudHJlcGwuaAoKZGlmZiAt LWdpdCBhL2NvbnRyaWIvYmFzZWJhY2t1cF90b19zaGVsbC9iYXNlYmFja3VwX3RvX3NoZWxs LmMgYi9jb250cmliL2Jhc2ViYWNrdXBfdG9fc2hlbGwvYmFzZWJhY2t1cF90b19zaGVsbC5j CmluZGV4IGJkYWY2N2E0YzguLjlhM2Q1N2M2NGIgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvYmFz ZWJhY2t1cF90b19zaGVsbC9iYXNlYmFja3VwX3RvX3NoZWxsLmMKKysrIGIvY29udHJpYi9i YXNlYmFja3VwX3RvX3NoZWxsL2Jhc2ViYWNrdXBfdG9fc2hlbGwuYwpAQCAtMTIsNiArMTIs NyBAQAogCiAjaW5jbHVkZSAiYWNjZXNzL3hhY3QuaCIKICNpbmNsdWRlICJiYWNrdXAvYmFz ZWJhY2t1cF90YXJnZXQuaCIKKyNpbmNsdWRlICJjb21tb24vcGVyY2VudHJlcGwuaCIKICNp bmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJzdG9yYWdlL2ZkLmgiCiAjaW5jbHVk ZSAidXRpbHMvYWNsLmgiCkBAIC0yMDgsNTkgKzIwOSw3IEBAIHN0YXRpYyBjaGFyICoKIHNo ZWxsX2NvbnN0cnVjdF9jb21tYW5kKGNvbnN0IGNoYXIgKmJhc2VfY29tbWFuZCwgY29uc3Qg Y2hhciAqZmlsZW5hbWUsCiAJCQkJCQljb25zdCBjaGFyICp0YXJnZXRfZGV0YWlsKQogewot CVN0cmluZ0luZm9EYXRhIGJ1ZjsKLQljb25zdCBjaGFyICpjOwotCi0JaW5pdFN0cmluZ0lu Zm8oJmJ1Zik7Ci0JZm9yIChjID0gYmFzZV9jb21tYW5kOyAqYyAhPSAnXDAnOyArK2MpCi0J ewotCQkvKiBBbnl0aGluZyBvdGhlciB0aGFuICclJyBpcyBjb3BpZWQgdmVyYmF0aW0uICov Ci0JCWlmICgqYyAhPSAnJScpCi0JCXsKLQkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZidWYs ICpjKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJLyogQW55IHRpbWUgd2Ugc2VlICclJyB3 ZSBlYXQgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXIgYXMgd2VsbC4gKi8KLQkJKytjOwotCi0J CS8qCi0JCSAqIFRoZSBmb2xsb3dpbmcgY2hhcmFjdGVyIGRldGVybWluZXMgd2hhdCB3ZSBp bnNlcnQgaGVyZSwgb3IgbWF5Ci0JCSAqIGNhdXNlIHVzIHRvIHRocm93IGFuIGVycm9yLgot CQkgKi8KLQkJaWYgKCpjID09ICclJykKLQkJewotCQkJLyogJyUlJyBpcyByZXBsYWNlZCBi eSBhIHNpbmdsZSAnJScgKi8KLQkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZidWYsICclJyk7 Ci0JCX0KLQkJZWxzZSBpZiAoKmMgPT0gJ2YnKQotCQl7Ci0JCQkvKiAnJWYnIGlzIHJlcGxh Y2VkIGJ5IHRoZSBmaWxlbmFtZSAqLwotCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmYnVm LCBmaWxlbmFtZSk7Ci0JCX0KLQkJZWxzZSBpZiAoKmMgPT0gJ2QnKQotCQl7Ci0JCQkvKiAn JWQnIGlzIHJlcGxhY2VkIGJ5IHRoZSB0YXJnZXQgZGV0YWlsICovCi0JCQlhcHBlbmRTdHJp bmdJbmZvU3RyaW5nKCZidWYsIHRhcmdldF9kZXRhaWwpOwotCQl9Ci0JCWVsc2UgaWYgKCpj ID09ICdcMCcpCi0JCXsKLQkJCS8qIEluY29tcGxldGUgZXNjYXBlIHNlcXVlbmNlLCBleHBl Y3RlZCBhIGNoYXJhY3RlciBhZnRlcndhcmQgKi8KLQkJCWVyZXBvcnQoRVJST1IsCi0JCQkJ CWVycmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJST1IpLAotCQkJCQllcnJtc2coInNoZWxsIGNv bW1hbmQgZW5kcyB1bmV4cGVjdGVkbHkgYWZ0ZXIgZXNjYXBlIGNoYXJhY3RlciBcIiUlXCIi KSk7Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQkvKiBVbmtub3duIGVzY2FwZSBzZXF1ZW5jZSAq LwotCQkJZXJlcG9ydChFUlJPUiwKLQkJCQkJZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJP UiksCi0JCQkJCWVycm1zZygic2hlbGwgY29tbWFuZCBjb250YWlucyB1bmV4cGVjdGVkIGVz Y2FwZSBzZXF1ZW5jZSBcIiVjXCIiLAotCQkJCQkJICAgKmMpKTsKLQkJfQotCX0KLQotCXJl dHVybiBidWYuZGF0YTsKKwlyZXR1cm4gcmVwbGFjZV9wZXJjZW50X3BsYWNlaG9sZGVycyhi YXNlX2NvbW1hbmQsICJkZiIsIChjb25zdCBjaGFyICpbXSl7dGFyZ2V0X2RldGFpbCwgZmls ZW5hbWV9KTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFu c2FtL3hsb2dhcmNoaXZlLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nYXJj aGl2ZS5jCmluZGV4IGUyYjcxNzZmMmYuLjBmNzRjY2I0OWMgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dhcmNoaXZlLmMKKysrIGIvc3JjL2JhY2tlbmQv YWNjZXNzL3RyYW5zYW0veGxvZ2FyY2hpdmUuYwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1 ZGUgImFjY2Vzcy94bG9nX2ludGVybmFsLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3hsb2dhcmNo aXZlLmgiCiAjaW5jbHVkZSAiY29tbW9uL2FyY2hpdmUuaCIKKyNpbmNsdWRlICJjb21tb24v cGVyY2VudHJlcGwuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJwZ3N0 YXQuaCIKICNpbmNsdWRlICJwb3N0bWFzdGVyL3N0YXJ0dXAuaCIKQEAgLTI5MSwxMSArMjky LDggQEAgdm9pZAogRXhlY3V0ZVJlY292ZXJ5Q29tbWFuZChjb25zdCBjaGFyICpjb21tYW5k LCBjb25zdCBjaGFyICpjb21tYW5kTmFtZSwKIAkJCQkJICAgYm9vbCBmYWlsT25TaWduYWws IHVpbnQzMiB3YWl0X2V2ZW50X2luZm8pCiB7Ci0JY2hhcgkJeGxvZ1JlY292ZXJ5Q21kW01B WFBHUEFUSF07CisJY2hhcgkgICAqeGxvZ1JlY292ZXJ5Q21kOwogCWNoYXIJCWxhc3RSZXN0 YXJ0UG9pbnRGbmFtZVtNQVhQR1BBVEhdOwotCWNoYXIJICAgKmRwOwotCWNoYXIJICAgKmVu ZHA7Ci0JY29uc3QgY2hhciAqc3A7CiAJaW50CQkJcmM7CiAJWExvZ1NlZ05vCXJlc3RhcnRT ZWdObzsKIAlYTG9nUmVjUHRyCXJlc3RhcnRSZWRvUHRyOwpAQCAtMzE2LDQyICszMTQsNyBA QCBFeGVjdXRlUmVjb3ZlcnlDb21tYW5kKGNvbnN0IGNoYXIgKmNvbW1hbmQsIGNvbnN0IGNo YXIgKmNvbW1hbmROYW1lLAogCS8qCiAJICogY29uc3RydWN0IHRoZSBjb21tYW5kIHRvIGJl IGV4ZWN1dGVkCiAJICovCi0JZHAgPSB4bG9nUmVjb3ZlcnlDbWQ7Ci0JZW5kcCA9IHhsb2dS ZWNvdmVyeUNtZCArIE1BWFBHUEFUSCAtIDE7Ci0JKmVuZHAgPSAnXDAnOwotCi0JZm9yIChz cCA9IGNvbW1hbmQ7ICpzcDsgc3ArKykKLQl7Ci0JCWlmICgqc3AgPT0gJyUnKQotCQl7Ci0J CQlzd2l0Y2ggKHNwWzFdKQotCQkJewotCQkJCWNhc2UgJ3InOgotCQkJCQkvKiAlcjogZmls ZW5hbWUgb2YgbGFzdCByZXN0YXJ0cG9pbnQgKi8KLQkJCQkJc3ArKzsKLQkJCQkJc3RybGNw eShkcCwgbGFzdFJlc3RhcnRQb2ludEZuYW1lLCBlbmRwIC0gZHApOwotCQkJCQlkcCArPSBz dHJsZW4oZHApOwotCQkJCQlicmVhazsKLQkJCQljYXNlICclJzoKLQkJCQkJLyogY29udmVy dCAlJSB0byBhIHNpbmdsZSAlICovCi0JCQkJCXNwKys7Ci0JCQkJCWlmIChkcCA8IGVuZHAp Ci0JCQkJCQkqZHArKyA9ICpzcDsKLQkJCQkJYnJlYWs7Ci0JCQkJZGVmYXVsdDoKLQkJCQkJ Lyogb3RoZXJ3aXNlIHRyZWF0IHRoZSAlIGFzIG5vdCBzcGVjaWFsICovCi0JCQkJCWlmIChk cCA8IGVuZHApCi0JCQkJCQkqZHArKyA9ICpzcDsKLQkJCQkJYnJlYWs7Ci0JCQl9Ci0JCX0K LQkJZWxzZQotCQl7Ci0JCQlpZiAoZHAgPCBlbmRwKQotCQkJCSpkcCsrID0gKnNwOwotCQl9 Ci0JfQotCSpkcCA9ICdcMCc7CisJeGxvZ1JlY292ZXJ5Q21kID0gcmVwbGFjZV9wZXJjZW50 X3BsYWNlaG9sZGVycyhjb21tYW5kLCAiciIsIChjb25zdCBjaGFyICpbXSl7bGFzdFJlc3Rh cnRQb2ludEZuYW1lfSk7CiAKIAllcmVwb3J0KERFQlVHMywKIAkJCShlcnJtc2dfaW50ZXJu YWwoImV4ZWN1dGluZyAlcyBcIiVzXCIiLCBjb21tYW5kTmFtZSwgY29tbWFuZCkpKTsKQEAg LTM2NCw2ICszMjcsOCBAQCBFeGVjdXRlUmVjb3ZlcnlDb21tYW5kKGNvbnN0IGNoYXIgKmNv bW1hbmQsIGNvbnN0IGNoYXIgKmNvbW1hbmROYW1lLAogCXJjID0gc3lzdGVtKHhsb2dSZWNv dmVyeUNtZCk7CiAJcGdzdGF0X3JlcG9ydF93YWl0X2VuZCgpOwogCisJcGZyZWUoeGxvZ1Jl Y292ZXJ5Q21kKTsKKwogCWlmIChyYyAhPSAwKQogCXsKIAkJLyoKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2xpYnBxL2JlLXNlY3VyZS1jb21tb24uYyBiL3NyYy9iYWNrZW5kL2xpYnBx L2JlLXNlY3VyZS1jb21tb24uYwppbmRleCAyNzE5Y2UxNDAzLi45MTJmMTJkMTNlIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9saWJwcS9iZS1zZWN1cmUtY29tbW9uLmMKKysrIGIvc3Jj L2JhY2tlbmQvbGlicHEvYmUtc2VjdXJlLWNvbW1vbi5jCkBAIC0yMiw2ICsyMiw3IEBACiAj aW5jbHVkZSA8c3lzL3N0YXQuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KIAorI2luY2x1ZGUg ImNvbW1vbi9wZXJjZW50cmVwbC5oIgogI2luY2x1ZGUgImNvbW1vbi9zdHJpbmcuaCIKICNp bmNsdWRlICJsaWJwcS9saWJwcS5oIgogI2luY2x1ZGUgInN0b3JhZ2UvZmQuaCIKQEAgLTM5 LDggKzQwLDcgQEAgaW50CiBydW5fc3NsX3Bhc3NwaHJhc2VfY29tbWFuZChjb25zdCBjaGFy ICpwcm9tcHQsIGJvb2wgaXNfc2VydmVyX3N0YXJ0LCBjaGFyICpidWYsIGludCBzaXplKQog ewogCWludAkJCWxvZ2xldmVsID0gaXNfc2VydmVyX3N0YXJ0ID8gRVJST1IgOiBMT0c7Ci0J U3RyaW5nSW5mb0RhdGEgY29tbWFuZDsKLQljaGFyCSAgICpwOworCWNoYXIJICAgKmNvbW1h bmQ7CiAJRklMRQkgICAqZmg7CiAJaW50CQkJcGNsb3NlX3JjOwogCXNpemVfdAkJbGVuID0g MDsKQEAgLTQ5LDM3ICs0OSwxNSBAQCBydW5fc3NsX3Bhc3NwaHJhc2VfY29tbWFuZChjb25z dCBjaGFyICpwcm9tcHQsIGJvb2wgaXNfc2VydmVyX3N0YXJ0LCBjaGFyICpidWYsCiAJQXNz ZXJ0KHNpemUgPiAwKTsKIAlidWZbMF0gPSAnXDAnOwogCi0JaW5pdFN0cmluZ0luZm8oJmNv bW1hbmQpOworCWNvbW1hbmQgPSByZXBsYWNlX3BlcmNlbnRfcGxhY2Vob2xkZXJzKHNzbF9w YXNzcGhyYXNlX2NvbW1hbmQsICJwIiwgKGNvbnN0IGNoYXIgKltdKXtwcm9tcHR9KTsKIAot CWZvciAocCA9IHNzbF9wYXNzcGhyYXNlX2NvbW1hbmQ7ICpwOyBwKyspCi0JewotCQlpZiAo cFswXSA9PSAnJScpCi0JCXsKLQkJCXN3aXRjaCAocFsxXSkKLQkJCXsKLQkJCQljYXNlICdw JzoKLQkJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmY29tbWFuZCwgcHJvbXB0KTsKLQkJ CQkJcCsrOwotCQkJCQlicmVhazsKLQkJCQljYXNlICclJzoKLQkJCQkJYXBwZW5kU3RyaW5n SW5mb0NoYXIoJmNvbW1hbmQsICclJyk7Ci0JCQkJCXArKzsKLQkJCQkJYnJlYWs7Ci0JCQkJ ZGVmYXVsdDoKLQkJCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJmNvbW1hbmQsIHBbMF0pOwot CQkJfQotCQl9Ci0JCWVsc2UKLQkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZjb21tYW5kLCBw WzBdKTsKLQl9Ci0KLQlmaCA9IE9wZW5QaXBlU3RyZWFtKGNvbW1hbmQuZGF0YSwgInIiKTsK KwlmaCA9IE9wZW5QaXBlU3RyZWFtKGNvbW1hbmQsICJyIik7CiAJaWYgKGZoID09IE5VTEwp CiAJewogCQllcmVwb3J0KGxvZ2xldmVsLAogCQkJCShlcnJjb2RlX2Zvcl9maWxlX2FjY2Vz cygpLAogCQkJCSBlcnJtc2coImNvdWxkIG5vdCBleGVjdXRlIGNvbW1hbmQgXCIlc1wiOiAl bSIsCi0JCQkJCQljb21tYW5kLmRhdGEpKSk7CisJCQkJCQljb21tYW5kKSkpOwogCQlnb3Rv IGVycm9yOwogCX0KIApAQCAtOTEsNyArNjksNyBAQCBydW5fc3NsX3Bhc3NwaHJhc2VfY29t bWFuZChjb25zdCBjaGFyICpwcm9tcHQsIGJvb2wgaXNfc2VydmVyX3N0YXJ0LCBjaGFyICpi dWYsCiAJCQllcmVwb3J0KGxvZ2xldmVsLAogCQkJCQkoZXJyY29kZV9mb3JfZmlsZV9hY2Nl c3MoKSwKIAkJCQkJIGVycm1zZygiY291bGQgbm90IHJlYWQgZnJvbSBjb21tYW5kIFwiJXNc IjogJW0iLAotCQkJCQkJCWNvbW1hbmQuZGF0YSkpKTsKKwkJCQkJCQljb21tYW5kKSkpOwog CQkJZ290byBlcnJvcjsKIAkJfQogCX0KQEAgLTExMSw3ICs4OSw3IEBAIHJ1bl9zc2xfcGFz c3BocmFzZV9jb21tYW5kKGNvbnN0IGNoYXIgKnByb21wdCwgYm9vbCBpc19zZXJ2ZXJfc3Rh cnQsIGNoYXIgKmJ1ZiwKIAkJZXJlcG9ydChsb2dsZXZlbCwKIAkJCQkoZXJyY29kZV9mb3Jf ZmlsZV9hY2Nlc3MoKSwKIAkJCQkgZXJybXNnKCJjb21tYW5kIFwiJXNcIiBmYWlsZWQiLAot CQkJCQkJY29tbWFuZC5kYXRhKSwKKwkJCQkJCWNvbW1hbmQpLAogCQkJCSBlcnJkZXRhaWxf aW50ZXJuYWwoIiVzIiwgd2FpdF9yZXN1bHRfdG9fc3RyKHBjbG9zZV9yYykpKSk7CiAJCWdv dG8gZXJyb3I7CiAJfQpAQCAtMTIwLDcgKzk4LDcgQEAgcnVuX3NzbF9wYXNzcGhyYXNlX2Nv bW1hbmQoY29uc3QgY2hhciAqcHJvbXB0LCBib29sIGlzX3NlcnZlcl9zdGFydCwgY2hhciAq YnVmLAogCWxlbiA9IHBnX3N0cmlwX2NybGYoYnVmKTsKIAogZXJyb3I6Ci0JcGZyZWUoY29t bWFuZC5kYXRhKTsKKwlwZnJlZShjb21tYW5kKTsKIAlyZXR1cm4gbGVuOwogfQogCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3NoZWxsX2FyY2hpdmUuYyBiL3NyYy9i YWNrZW5kL3Bvc3RtYXN0ZXIvc2hlbGxfYXJjaGl2ZS5jCmluZGV4IDcxZDU2NzA2NWEuLjc3 YzdiMzQ1MzUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvc2hlbGxfYXJj aGl2ZS5jCisrKyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvc2hlbGxfYXJjaGl2ZS5jCkBA IC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSA8c3lzL3dhaXQuaD4KIAogI2luY2x1ZGUgImFj Y2Vzcy94bG9nLmgiCisjaW5jbHVkZSAiY29tbW9uL3BlcmNlbnRyZXBsLmgiCiAjaW5jbHVk ZSAicGdzdGF0LmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rlci9wZ2FyY2guaCIKIApAQCAtNDQs NTggKzQ1LDE4IEBAIHNoZWxsX2FyY2hpdmVfY29uZmlndXJlZCh2b2lkKQogc3RhdGljIGJv b2wKIHNoZWxsX2FyY2hpdmVfZmlsZShjb25zdCBjaGFyICpmaWxlLCBjb25zdCBjaGFyICpw YXRoKQogewotCWNoYXIJCXhsb2dhcmNoY21kW01BWFBHUEFUSF07Ci0JY2hhcgkgICAqZHA7 Ci0JY2hhcgkgICAqZW5kcDsKLQljb25zdCBjaGFyICpzcDsKKwljaGFyCSAgICp4bG9nYXJj aGNtZDsKKwljaGFyCSAgICpuYXRpdmVQYXRoID0gTlVMTDsKIAlpbnQJCQlyYzsKIAotCS8q Ci0JICogY29uc3RydWN0IHRoZSBjb21tYW5kIHRvIGJlIGV4ZWN1dGVkCi0JICovCi0JZHAg PSB4bG9nYXJjaGNtZDsKLQllbmRwID0geGxvZ2FyY2hjbWQgKyBNQVhQR1BBVEggLSAxOwot CSplbmRwID0gJ1wwJzsKLQotCWZvciAoc3AgPSBYTG9nQXJjaGl2ZUNvbW1hbmQ7ICpzcDsg c3ArKykKKwlpZiAocGF0aCkKIAl7Ci0JCWlmICgqc3AgPT0gJyUnKQotCQl7Ci0JCQlzd2l0 Y2ggKHNwWzFdKQotCQkJewotCQkJCWNhc2UgJ3AnOgotCQkJCQkvKiAlcDogcmVsYXRpdmUg cGF0aCBvZiBzb3VyY2UgZmlsZSAqLwotCQkJCQlzcCsrOwotCQkJCQlzdHJsY3B5KGRwLCBw YXRoLCBlbmRwIC0gZHApOwotCQkJCQltYWtlX25hdGl2ZV9wYXRoKGRwKTsKLQkJCQkJZHAg Kz0gc3RybGVuKGRwKTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSAnZic6Ci0JCQkJCS8qICVm OiBmaWxlbmFtZSBvZiBzb3VyY2UgZmlsZSAqLwotCQkJCQlzcCsrOwotCQkJCQlzdHJsY3B5 KGRwLCBmaWxlLCBlbmRwIC0gZHApOwotCQkJCQlkcCArPSBzdHJsZW4oZHApOwotCQkJCQli cmVhazsKLQkJCQljYXNlICclJzoKLQkJCQkJLyogY29udmVydCAlJSB0byBhIHNpbmdsZSAl ICovCi0JCQkJCXNwKys7Ci0JCQkJCWlmIChkcCA8IGVuZHApCi0JCQkJCQkqZHArKyA9ICpz cDsKLQkJCQkJYnJlYWs7Ci0JCQkJZGVmYXVsdDoKLQkJCQkJLyogb3RoZXJ3aXNlIHRyZWF0 IHRoZSAlIGFzIG5vdCBzcGVjaWFsICovCi0JCQkJCWlmIChkcCA8IGVuZHApCi0JCQkJCQkq ZHArKyA9ICpzcDsKLQkJCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQlp ZiAoZHAgPCBlbmRwKQotCQkJCSpkcCsrID0gKnNwOwotCQl9CisJCW5hdGl2ZVBhdGggPSBw c3RyZHVwKHBhdGgpOworCQltYWtlX25hdGl2ZV9wYXRoKG5hdGl2ZVBhdGgpOwogCX0KLQkq ZHAgPSAnXDAnOworCisJeGxvZ2FyY2hjbWQgPSByZXBsYWNlX3BlcmNlbnRfcGxhY2Vob2xk ZXJzKFhMb2dBcmNoaXZlQ29tbWFuZCwgImZwIiwKKwkJCQkJCQkJCQkJICAgKGNvbnN0IGNo YXIgKltdKXtmaWxlLCBuYXRpdmVQYXRofSk7CiAKIAllcmVwb3J0KERFQlVHMywKIAkJCShl cnJtc2dfaW50ZXJuYWwoImV4ZWN1dGluZyBhcmNoaXZlIGNvbW1hbmQgXCIlc1wiIiwKQEAg LTE1NSw2ICsxMTYsOCBAQCBzaGVsbF9hcmNoaXZlX2ZpbGUoY29uc3QgY2hhciAqZmlsZSwg Y29uc3QgY2hhciAqcGF0aCkKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAorCXBmcmVlKHhsb2dh cmNoY21kKTsKKwogCWVsb2coREVCVUcxLCAiYXJjaGl2ZWQgd3JpdGUtYWhlYWQgbG9nIGZp bGUgXCIlc1wiIiwgZmlsZSk7CiAJcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9zcmMv Y29tbW9uL01ha2VmaWxlIGIvc3JjL2NvbW1vbi9NYWtlZmlsZQppbmRleCBlOWFmNzM0NmM5 Li5kODhhM2JmOTQ1IDEwMDY0NAotLS0gYS9zcmMvY29tbW9uL01ha2VmaWxlCisrKyBiL3Ny Yy9jb21tb24vTWFrZWZpbGUKQEAgLTY1LDYgKzY1LDcgQEAgT0JKU19DT01NT04gPSBcCiAJ a3dsb29rdXAubyBcCiAJbGluay1jYW5hcnkubyBcCiAJbWQ1X2NvbW1vbi5vIFwKKwlwZXJj ZW50cmVwbC5vIFwKIAlwZ19nZXRfbGluZS5vIFwKIAlwZ19semNvbXByZXNzLm8gXAogCXBn X3BybmcubyBcCmRpZmYgLS1naXQgYS9zcmMvY29tbW9uL2FyY2hpdmUuYyBiL3NyYy9jb21t b24vYXJjaGl2ZS5jCmluZGV4IDQ3ZmM4NzdjOTAuLmEzMDE0NjkzNGQgMTAwNjQ0Ci0tLSBh L3NyYy9jb21tb24vYXJjaGl2ZS5jCisrKyBiL3NyYy9jb21tb24vYXJjaGl2ZS5jCkBAIC0y MCw3ICsyMCw3IEBACiAjZW5kaWYKIAogI2luY2x1ZGUgImNvbW1vbi9hcmNoaXZlLmgiCi0j aW5jbHVkZSAibGliL3N0cmluZ2luZm8uaCIKKyNpbmNsdWRlICJjb21tb24vcGVyY2VudHJl cGwuaCIKIAogLyoKICAqIEJ1aWxkUmVzdG9yZUNvbW1hbmQKQEAgLTQxLDgxICs0MSwxNCBA QCBCdWlsZFJlc3RvcmVDb21tYW5kKGNvbnN0IGNoYXIgKnJlc3RvcmVDb21tYW5kLAogCQkJ CQljb25zdCBjaGFyICp4bG9nZm5hbWUsCiAJCQkJCWNvbnN0IGNoYXIgKmxhc3RSZXN0YXJ0 UG9pbnRGbmFtZSkKIHsKLQlTdHJpbmdJbmZvRGF0YSByZXN1bHQ7Ci0JY29uc3QgY2hhciAq c3A7CisJY2hhcgkgICAqbmF0aXZlUGF0aCA9IE5VTEw7CiAKLQkvKgotCSAqIEJ1aWxkIHRo ZSBjb21tYW5kIHRvIGJlIGV4ZWN1dGVkLgotCSAqLwotCWluaXRTdHJpbmdJbmZvKCZyZXN1 bHQpOwotCi0JZm9yIChzcCA9IHJlc3RvcmVDb21tYW5kOyAqc3A7IHNwKyspCisJaWYgKHhs b2dwYXRoKQogCXsKLQkJaWYgKCpzcCA9PSAnJScpCi0JCXsKLQkJCXN3aXRjaCAoc3BbMV0p Ci0JCQl7Ci0JCQkJY2FzZSAncCc6Ci0JCQkJCXsKLQkJCQkJCWNoYXIJICAgKm5hdGl2ZVBh dGg7Ci0KLQkJCQkJCS8qICVwOiByZWxhdGl2ZSBwYXRoIG9mIHRhcmdldCBmaWxlICovCi0J CQkJCQlpZiAoeGxvZ3BhdGggPT0gTlVMTCkKLQkJCQkJCXsKLQkJCQkJCQlwZnJlZShyZXN1 bHQuZGF0YSk7Ci0JCQkJCQkJcmV0dXJuIE5VTEw7Ci0JCQkJCQl9Ci0JCQkJCQlzcCsrOwot Ci0JCQkJCQkvKgotCQkJCQkJICogVGhpcyBuZWVkcyB0byB1c2UgYSBwbGFjZWhvbGRlciB0 byBub3QgbW9kaWZ5IHRoZQotCQkJCQkJICogaW5wdXQgd2l0aCB0aGUgY29udmVyc2lvbiBk b25lIHZpYQotCQkJCQkJICogbWFrZV9uYXRpdmVfcGF0aCgpLgotCQkJCQkJICovCi0JCQkJ CQluYXRpdmVQYXRoID0gcHN0cmR1cCh4bG9ncGF0aCk7Ci0JCQkJCQltYWtlX25hdGl2ZV9w YXRoKG5hdGl2ZVBhdGgpOwotCQkJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmcmVzdWx0 LAotCQkJCQkJCQkJCQkgICBuYXRpdmVQYXRoKTsKLQkJCQkJCXBmcmVlKG5hdGl2ZVBhdGgp OwotCQkJCQkJYnJlYWs7Ci0JCQkJCX0KLQkJCQljYXNlICdmJzoKLQkJCQkJLyogJWY6IGZp bGVuYW1lIG9mIGRlc2lyZWQgZmlsZSAqLwotCQkJCQlpZiAoeGxvZ2ZuYW1lID09IE5VTEwp Ci0JCQkJCXsKLQkJCQkJCXBmcmVlKHJlc3VsdC5kYXRhKTsKLQkJCQkJCXJldHVybiBOVUxM OwotCQkJCQl9Ci0JCQkJCXNwKys7Ci0JCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJnJl c3VsdCwgeGxvZ2ZuYW1lKTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSAncic6Ci0JCQkJCS8q ICVyOiBmaWxlbmFtZSBvZiBsYXN0IHJlc3RhcnRwb2ludCAqLwotCQkJCQlpZiAobGFzdFJl c3RhcnRQb2ludEZuYW1lID09IE5VTEwpCi0JCQkJCXsKLQkJCQkJCXBmcmVlKHJlc3VsdC5k YXRhKTsKLQkJCQkJCXJldHVybiBOVUxMOwotCQkJCQl9Ci0JCQkJCXNwKys7Ci0JCQkJCWFw cGVuZFN0cmluZ0luZm9TdHJpbmcoJnJlc3VsdCwKLQkJCQkJCQkJCQkgICBsYXN0UmVzdGFy dFBvaW50Rm5hbWUpOwotCQkJCQlicmVhazsKLQkJCQljYXNlICclJzoKLQkJCQkJLyogY29u dmVydCAlJSB0byBhIHNpbmdsZSAlICovCi0JCQkJCXNwKys7Ci0JCQkJCWFwcGVuZFN0cmlu Z0luZm9DaGFyKCZyZXN1bHQsICpzcCk7Ci0JCQkJCWJyZWFrOwotCQkJCWRlZmF1bHQ6Ci0J CQkJCS8qIG90aGVyd2lzZSB0cmVhdCB0aGUgJSBhcyBub3Qgc3BlY2lhbCAqLwotCQkJCQlh cHBlbmRTdHJpbmdJbmZvQ2hhcigmcmVzdWx0LCAqc3ApOwotCQkJCQlicmVhazsKLQkJCX0K LQkJfQotCQllbHNlCi0JCXsKLQkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZyZXN1bHQsICpz cCk7Ci0JCX0KKwkJbmF0aXZlUGF0aCA9IHBzdHJkdXAoeGxvZ3BhdGgpOworCQltYWtlX25h dGl2ZV9wYXRoKG5hdGl2ZVBhdGgpOwogCX0KIAotCXJldHVybiByZXN1bHQuZGF0YTsKKwly ZXR1cm4gcmVwbGFjZV9wZXJjZW50X3BsYWNlaG9sZGVycyhyZXN0b3JlQ29tbWFuZCwgImZy cCIsCisJCQkJCQkJCQkJKGNvbnN0IGNoYXIgKltdKXt4bG9nZm5hbWUsIGxhc3RSZXN0YXJ0 UG9pbnRGbmFtZSwgbmF0aXZlUGF0aH0pOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbW1vbi9t ZXNvbi5idWlsZCBiL3NyYy9jb21tb24vbWVzb24uYnVpbGQKaW5kZXggZjY5ZDc1ZTljNi4u ZTBmNjBlZTQ4ZSAxMDA2NDQKLS0tIGEvc3JjL2NvbW1vbi9tZXNvbi5idWlsZAorKysgYi9z cmMvY29tbW9uL21lc29uLmJ1aWxkCkBAIC0xNSw2ICsxNSw3IEBAIGNvbW1vbl9zb3VyY2Vz ID0gZmlsZXMoCiAgICdrd2xvb2t1cC5jJywKICAgJ2xpbmstY2FuYXJ5LmMnLAogICAnbWQ1 X2NvbW1vbi5jJywKKyAgJ3BlcmNlbnRyZXBsLmMnLAogICAncGdfZ2V0X2xpbmUuYycsCiAg ICdwZ19semNvbXByZXNzLmMnLAogICAncGdfcHJuZy5jJywKZGlmZiAtLWdpdCBhL3NyYy9j b21tb24vcGVyY2VudHJlcGwuYyBiL3NyYy9jb21tb24vcGVyY2VudHJlcGwuYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5kMjU5MGE3OTg2Ci0tLSAvZGV2L251 bGwKKysrIGIvc3JjL2NvbW1vbi9wZXJjZW50cmVwbC5jCkBAIC0wLDAgKzEsMTA4IEBACisv Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwZXJjZW50cmVwbC5jCisgKgkgIENvbW1v biByb3V0aW5lcyB0byByZXBsYWNlIHBlcmNlbnQgcGxhY2Vob2xkZXJzIGluIHN0cmluZ3MK KyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyMiwgUG9zdGdyZVNRTCBH bG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5 NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICoKKyAq IElERU5USUZJQ0FUSU9OCisgKgkgIHNyYy9jb21tb24vcGVyY2VudHJlcGwuYworICoKKyAq LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpZm5kZWYgRlJPTlRFTkQKKyNpbmNsdWRl ICJwb3N0Z3Jlcy5oIgorI2Vsc2UKKyNpbmNsdWRlICJwb3N0Z3Jlc19mZS5oIgorI2VuZGlm CisKKyNpbmNsdWRlICJjb21tb24vcGVyY2VudHJlcGwuaCIKKyNpbmNsdWRlICJsaWIvc3Ry aW5naW5mby5oIgorCisvKgorICogcmVwbGFjZV9wZXJjZW50X3BsYWNlaG9sZGVycworICoK KyAqIFJlcGxhY2UgcGVyY2VudC1sZXR0ZXIgcGxhY2Vob2xkZXJzIGluIGlucHV0IHN0cmlu ZyB3aXRoIHRoZSBzdXBwbGllZAorICogdmFsdWVzLiAgRm9yIGV4YW1wbGUsIHRvIHJlcGxh Y2UgJWYgd2l0aCBmb28gYW5kICViIHdpdGggYmFyLCBjYWxsCisgKgorICogcmVwbGFjZV9w ZXJjZW50X3BsYWNlaG9sZGVycyhpbnN0ciwgImJmIiwgKGNvbnN0IGNoYXIgKltdKXtiYXIs IGZvb30pOworICoKKyAqIFRoZSByZXR1cm4gdmFsdWUgaXMgcGFsbG9jJ2QuCisgKgorICog IiUlIiBpcyByZXBsYWNlZCBieSBhIHNpbmdsZSAiJSIuCisgKgorICogQmVoYXZpb3IgZm9y IGVycm9uZW91cyBpbnB1dCBzdHJpbmdzOgorICoKKyAqIC0gQW4gdW5zdXBwb3J0ZWQgbGV0 dGVyIChlLmcuLCAiJXgiKSBpcyBsZWZ0IHVuY2hhbmdlZCAob3V0cHV0cyAiJXgiKS4KKyAq CisgKiAtIEEgIiUiIGF0IHRoZSBlbmQgb2YgdGhlIGlucHV0IHN0cmluZyBpcyBjb3BpZWQg dG8gdGhlIG91dHB1dCBzdHJpbmcuCisgKgorICogKFRoaXMgaXMganVzdCB0aGUgd2F5IGl0 J3MgYWx3YXlzIGJlZW4uICBPdGhlciBiZWhhdmlvcnMgbWlnaHQgYmUKKyAqIHNlbnNpYmxl LikKKyAqCisgKiBBIHZhbHVlIG1heSBiZSBOVUxMLiAgSWYgdGhlIGNvcnJlc3BvbmRpbmcg cGxhY2Vob2xkZXIgaXMgZm91bmQgaW4gdGhlCisgKiBpbnB1dCBzdHJpbmcsIHRoZSB3aG9s ZSBmdW5jdGlvbiByZXR1cm5zIE5VTEwuCisgKgorICogVGhpcyBmdW5jdGlvbnMgaXMgbWVh bnQgZm9yIGNhc2VzIHdoZXJlIGFsbCB0aGUgdmFsdWVzIGFyZSByZWFkaWx5CisgKiBhdmFp bGFibGUgb3IgY2hlYXAgdG8gY29tcHV0ZSBhbmQgbW9zdCBpbnZvY2F0aW9ucyB3aWxsIHVz ZSBtb3N0IHZhbHVlcworICogKGZvciBleGFtcGxlIGZvciBhcmNoaXZlX2NvbW1hbmQpLiAg QWxzbywgaXQgcmVxdWlyZXMgdGhhdCBhbGwgdmFsdWVzIGFyZQorICogc3RyaW5ncy4gIEl0 IHdvbid0IGJlIGEgZ29vZCBtYXRjaCBmb3IgdGhpbmdzIGxpa2UgbG9nIHByZWZpeGVzIG9y IHByb21wdHMKKyAqIHRoYXQgdXNlIGEgbWl4IG9mIGRhdGEgdHlwZXMgYW5kIGFueSBpbnZv Y2F0aW9uIHdpbGwgb25seSB1c2UgYSBmZXcgb2YgdGhlCisgKiBwb3NzaWJsZSB2YWx1ZXMu CisgKi8KK2NoYXIgKgorcmVwbGFjZV9wZXJjZW50X3BsYWNlaG9sZGVycyhjb25zdCBjaGFy ICppbnN0ciwgY29uc3QgY2hhciAqbGV0dGVycywgY29uc3QgY2hhciAqdmFsdWVzW10pCit7 CisJU3RyaW5nSW5mb0RhdGEgcmVzdWx0OworCisJaW5pdFN0cmluZ0luZm8oJnJlc3VsdCk7 CisKKwlmb3IgKGNvbnN0IGNoYXIgKnNwID0gaW5zdHI7ICpzcDsgc3ArKykKKwl7CisJCWlm ICgqc3AgPT0gJyUnKQorCQl7CisJCQlpZiAoc3BbMV0gPT0gJyUnKQorCQkJeworCQkJCS8q IGNvbnZlcnQgJSUgdG8gYSBzaW5nbGUgJSAqLworCQkJCXNwKys7CisJCQkJYXBwZW5kU3Ry aW5nSW5mb0NoYXIoJnJlc3VsdCwgKnNwKTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQli b29sCQlmb3VuZCA9IGZhbHNlOworCisJCQkJZm9yIChjb25zdCBjaGFyICpscCA9IGxldHRl cnM7ICpscDsgbHArKykKKwkJCQl7CisJCQkJCWlmIChzcFsxXSA9PSAqbHApCisJCQkJCXsK KwkJCQkJCWludAkJCW51bSA9IGxwIC0gbGV0dGVyczsKKworCQkJCQkJaWYgKCF2YWx1ZXNb bnVtXSkKKwkJCQkJCXsKKwkJCQkJCQlwZnJlZShyZXN1bHQuZGF0YSk7CisJCQkJCQkJcmV0 dXJuIE5VTEw7CisJCQkJCQl9CisJCQkJCQlzcCsrOworCQkJCQkJYXBwZW5kU3RyaW5nSW5m b1N0cmluZygmcmVzdWx0LCB2YWx1ZXNbbnVtXSk7CisJCQkJCQlmb3VuZCA9IHRydWU7CisJ CQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCQlpZiAoIWZvdW5kKQorCQkJCXsKKwkJ CQkJLyogb3RoZXJ3aXNlIHRyZWF0IHRoZSAlIGFzIG5vdCBzcGVjaWFsICovCisJCQkJCWFw cGVuZFN0cmluZ0luZm9DaGFyKCZyZXN1bHQsICpzcCk7CisJCQkJfQorCQkJfQorCQl9CisJ CWVsc2UKKwkJeworCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJnJlc3VsdCwgKnNwKTsKKwkJ fQorCX0KKworCXJldHVybiByZXN1bHQuZGF0YTsKK30KZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL2NvbW1vbi9wZXJjZW50cmVwbC5oIGIvc3JjL2luY2x1ZGUvY29tbW9uL3BlcmNlbnRy ZXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uNzk0ZGE0ZTA1 OQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbmNsdWRlL2NvbW1vbi9wZXJjZW50cmVwbC5o CkBAIC0wLDAgKzEsMTggQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHBlcmNl bnRyZXBsLmgKKyAqCSAgQ29tbW9uIHJvdXRpbmVzIHRvIHJlcGxhY2UgcGVyY2VudCBwbGFj ZWhvbGRlcnMgaW4gc3RyaW5ncworICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5 Ni0yMDIyLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlv bnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENh bGlmb3JuaWEKKyAqCisgKiBzcmMvaW5jbHVkZS9jb21tb24vcGVyY2VudHJlcGwuaAorICoK KyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVmIFBFUkNFTlRSRVBMX0gKKyNk ZWZpbmUgUEVSQ0VOVFJFUExfSAorCitleHRlcm4gY2hhciAqcmVwbGFjZV9wZXJjZW50X3Bs YWNlaG9sZGVycyhjb25zdCBjaGFyICppbnN0ciwgY29uc3QgY2hhciAqbGV0dGVycywgY29u c3QgY2hhciAqdmFsdWVzW10pOworCisjZW5kaWYJCQkJCQkJLyogUEVSQ0VOVFJFUExfSCAq LwoKYmFzZS1jb21taXQ6IDYwNjg0ZGQ4MzRhMjIyZmVmZWRkNDliMTlkMWYwYTYxODljMTYz MmUKLS0gCjIuMzguMQoK --------------1jC9apeBDDFZfMW4utmJ0TSn--