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 1oasEY-0001lK-Jj for pgsql-hackers@arkaria.postgresql.org; Wed, 21 Sep 2022 05:25:18 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1oasEX-0007vr-E6 for pgsql-hackers@arkaria.postgresql.org; Wed, 21 Sep 2022 05:25:17 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1oasEW-0007vh-SR for pgsql-hackers@lists.postgresql.org; Wed, 21 Sep 2022 05:25:17 +0000 Received: from oss.nttdata.com ([49.212.34.109]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1oasET-0006hU-6z for pgsql-hackers@postgresql.org; Wed, 21 Sep 2022 05:25:15 +0000 Received: from [10.6.216.42] (unknown [203.180.48.65]) by oss.nttdata.com (Postfix) with ESMTPSA id F3E5D6010C; Wed, 21 Sep 2022 14:25:08 +0900 (JST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.7 at oss.nttdata.com Content-Type: multipart/mixed; boundary="------------pISc0MZ2oTZP3UclaIOeKB9L" Message-ID: <5ed05370-d694-1ea3-045f-01dce952b326@oss.nttdata.com> Date: Wed, 21 Sep 2022 14:25:08 +0900 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:91.0) Gecko/20100101 Thunderbird/91.13.0 Subject: Re: [PATCH]Feature improvement for MERGE tab completion Content-Language: en-US To: Alvaro Herrera Cc: bt22kawamotok , Shinya Kato , pgsql-hackers@postgresql.org References: <20220920155105.y7rb57pb5fpoxmln@alvherre.pgsql> From: Fujii Masao In-Reply-To: <20220920155105.y7rb57pb5fpoxmln@alvherre.pgsql> 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. --------------pISc0MZ2oTZP3UclaIOeKB9L Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 2022/09/21 0:51, Alvaro Herrera wrote: > The rules starting at line 4111 make me a bit nervous, since nowhere > we're restricting them to operating only on MERGE lines. I don't think > it's a real problem since USING is not terribly common anyway. Likewise > for the ones with WHEN [NOT] MATCHED. I kinda wish we had a way to > search for stuff like "keyword MERGE appears earlier in the command", > but we don't have that. Yeah, I was thinking the same when updating the patch. How about adding something like PartialMatches() that checks whether the keywords are included in the input string or not? If so, we can restrict some tab-completion rules to operating only on MERGE, as follows. I attached the WIP patch (0002 patch) that introduces PartialMatches(). Is this approach over-complicated? Thought? + else if (PartialMatches("MERGE", "INTO", MatchAny, "USING") || + PartialMatches("MERGE", "INTO", MatchAny, "AS", MatchAny, "USING") || + PartialMatches("MERGE", "INTO", MatchAny, MatchAny, "USING")) + { + /* Complete MERGE INTO ... ON with target table attributes */ + if (TailMatches("INTO", MatchAny, "USING", MatchAny, "ON")) + COMPLETE_WITH_ATTR(prev4_wd); + else if (TailMatches("INTO", MatchAny, "AS", MatchAny, "USING", MatchAny, "AS", MatchAny, "ON")) + COMPLETE_WITH_ATTR(prev8_wd); + else if (TailMatches("INTO", MatchAny, MatchAny, "USING", MatchAny, MatchAny, "ON")) + COMPLETE_WITH_ATTR(prev6_wd); Regards, -- Fujii Masao Advanced Computing Technology Center Research and Development Headquarters NTT DATA CORPORATION --------------pISc0MZ2oTZP3UclaIOeKB9L Content-Type: text/plain; charset=UTF-8; name="v9-0001-psql-Improve-tab-completion-for-MERGE.patch" Content-Disposition: attachment; filename="v9-0001-psql-Improve-tab-completion-for-MERGE.patch" Content-Transfer-Encoding: base64 RnJvbSA2NzFiNGRmZjJlMjU5YjRkMTQ4ZGNiZmFlZTA2MTFmYzJiZGRjZTg1IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBGdWppaSBNYXNhbyA8ZnVqaWlAcG9zdGdyZXNxbC5v cmc+CkRhdGU6IFdlZCwgMjEgU2VwIDIwMjIgMTE6NDY6NTkgKzA5MDAKU3ViamVjdDogW1BB VENIIDEvMl0gcHNxbDogSW1wcm92ZSB0YWItY29tcGxldGlvbiBmb3IgTUVSR0UuCgotLS0K IHNyYy9iaW4vcHNxbC90YWItY29tcGxldGUuYyB8IDEwMiArKysrKysrKysrKysrKysrKysr KysrKy0tLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCA2NyBpbnNlcnRpb25zKCspLCAz NSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmluL3BzcWwvdGFiLWNvbXBsZXRl LmMgYi9zcmMvYmluL3BzcWwvdGFiLWNvbXBsZXRlLmMKaW5kZXggZjM0NjVhZGI4NS4uODIw ZjQ3ZDIzYSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wc3FsL3RhYi1jb21wbGV0ZS5jCisrKyBi L3NyYy9iaW4vcHNxbC90YWItY29tcGxldGUuYwpAQCAtMTY2OSw3ICsxNjY5LDcgQEAgcHNx bF9jb21wbGV0aW9uKGNvbnN0IGNoYXIgKnRleHQsIGludCBzdGFydCwgaW50IGVuZCkKIAkJ IkNPTU1FTlQiLCAiQ09NTUlUIiwgIkNPUFkiLCAiQ1JFQVRFIiwgIkRFQUxMT0NBVEUiLCAi REVDTEFSRSIsCiAJCSJERUxFVEUgRlJPTSIsICJESVNDQVJEIiwgIkRPIiwgIkRST1AiLCAi RU5EIiwgIkVYRUNVVEUiLCAiRVhQTEFJTiIsCiAJCSJGRVRDSCIsICJHUkFOVCIsICJJTVBP UlQgRk9SRUlHTiBTQ0hFTUEiLCAiSU5TRVJUIElOVE8iLCAiTElTVEVOIiwgIkxPQUQiLCAi TE9DSyIsCi0JCSJNRVJHRSIsICJNT1ZFIiwgIk5PVElGWSIsICJQUkVQQVJFIiwKKwkJIk1F UkdFIElOVE8iLCAiTU9WRSIsICJOT1RJRlkiLCAiUFJFUEFSRSIsCiAJCSJSRUFTU0lHTiIs ICJSRUZSRVNIIE1BVEVSSUFMSVpFRCBWSUVXIiwgIlJFSU5ERVgiLCAiUkVMRUFTRSIsCiAJ CSJSRVNFVCIsICJSRVZPS0UiLCAiUk9MTEJBQ0siLAogCQkiU0FWRVBPSU5UIiwgIlNFQ1VS SVRZIExBQkVMIiwgIlNFTEVDVCIsICJTRVQiLCAiU0hPVyIsICJTVEFSVCIsCkBAIC0zNjQx LDcgKzM2NDEsNyBAQCBwc3FsX2NvbXBsZXRpb24oY29uc3QgY2hhciAqdGV4dCwgaW50IHN0 YXJ0LCBpbnQgZW5kKQogICovCiAJZWxzZSBpZiAoTWF0Y2hlcygiRVhQTEFJTiIpKQogCQlD T01QTEVURV9XSVRIKCJTRUxFQ1QiLCAiSU5TRVJUIElOVE8iLCAiREVMRVRFIEZST00iLCAi VVBEQVRFIiwgIkRFQ0xBUkUiLAotCQkJCQkgICJNRVJHRSIsICJFWEVDVVRFIiwgIkFOQUxZ WkUiLCAiVkVSQk9TRSIpOworCQkJCQkgICJNRVJHRSBJTlRPIiwgIkVYRUNVVEUiLCAiQU5B TFlaRSIsICJWRVJCT1NFIik7CiAJZWxzZSBpZiAoSGVhZE1hdGNoZXMoIkVYUExBSU4iLCAi KCoiKSAmJgogCQkJICFIZWFkTWF0Y2hlcygiRVhQTEFJTiIsICIoKikiKSkKIAl7CkBAIC0z NjYwLDEyICszNjYwLDEyIEBAIHBzcWxfY29tcGxldGlvbihjb25zdCBjaGFyICp0ZXh0LCBp bnQgc3RhcnQsIGludCBlbmQpCiAJfQogCWVsc2UgaWYgKE1hdGNoZXMoIkVYUExBSU4iLCAi QU5BTFlaRSIpKQogCQlDT01QTEVURV9XSVRIKCJTRUxFQ1QiLCAiSU5TRVJUIElOVE8iLCAi REVMRVRFIEZST00iLCAiVVBEQVRFIiwgIkRFQ0xBUkUiLAotCQkJCQkgICJNRVJHRSIsICJF WEVDVVRFIiwgIlZFUkJPU0UiKTsKKwkJCQkJICAiTUVSR0UgSU5UTyIsICJFWEVDVVRFIiwg IlZFUkJPU0UiKTsKIAllbHNlIGlmIChNYXRjaGVzKCJFWFBMQUlOIiwgIigqKSIpIHx8CiAJ CQkgTWF0Y2hlcygiRVhQTEFJTiIsICJWRVJCT1NFIikgfHwKIAkJCSBNYXRjaGVzKCJFWFBM QUlOIiwgIkFOQUxZWkUiLCAiVkVSQk9TRSIpKQogCQlDT01QTEVURV9XSVRIKCJTRUxFQ1Qi LCAiSU5TRVJUIElOVE8iLCAiREVMRVRFIEZST00iLCAiVVBEQVRFIiwgIkRFQ0xBUkUiLAot CQkJCQkgICJNRVJHRSIsICJFWEVDVVRFIik7CisJCQkJCSAgIk1FUkdFIElOVE8iLCAiRVhF Q1VURSIpOwogCiAvKiBGRVRDSCAmJiBNT1ZFICovCiAKQEAgLTQwNjUsNTggKzQwNjUsOTAg QEAgcHNxbF9jb21wbGV0aW9uKGNvbnN0IGNoYXIgKnRleHQsIGludCBzdGFydCwgaW50IGVu ZCkKIAllbHNlIGlmIChIZWFkTWF0Y2hlcygiTE9DSyIpICYmIFRhaWxNYXRjaGVzKCJJTiIs ICJTSEFSRSIpKQogCQlDT01QTEVURV9XSVRIKCJNT0RFIiwgIlJPVyBFWENMVVNJVkUgTU9E RSIsCiAJCQkJCSAgIlVQREFURSBFWENMVVNJVkUgTU9ERSIpOworCisJLyogQ29tcGxldGUg TE9DSyBbVEFCTEVdIFtPTkxZXSA8dGFibGU+IFtJTiBsb2NrbW9kZSBNT0RFXSB3aXRoICJO T1dBSVQiICovCisJZWxzZSBpZiAoSGVhZE1hdGNoZXMoIkxPQ0siKSAmJiBUYWlsTWF0Y2hl cygiTU9ERSIpKQorCQlDT01QTEVURV9XSVRIKCJOT1dBSVQiKTsKKwogLyogTUVSR0UgLS0t IGNhbiBiZSBpbnNpZGUgRVhQTEFJTiAqLwogCWVsc2UgaWYgKFRhaWxNYXRjaGVzKCJNRVJH RSIpKQogCQlDT01QTEVURV9XSVRIKCJJTlRPIik7CiAJZWxzZSBpZiAoVGFpbE1hdGNoZXMo Ik1FUkdFIiwgIklOVE8iKSkKIAkJQ09NUExFVEVfV0lUSF9TQ0hFTUFfUVVFUlkoUXVlcnlf Zm9yX2xpc3Rfb2ZfbWVyZ2V0YXJnZXRzKTsKKworCS8qIENvbXBsZXRlIE1FUkdFIElOVE8g PHRhYmxlPiBbW0FTXSA8YWxpYXM+XSB3aXRoIFVTSU5HICovCiAJZWxzZSBpZiAoVGFpbE1h dGNoZXMoIk1FUkdFIiwgIklOVE8iLCBNYXRjaEFueSkpCiAJCUNPTVBMRVRFX1dJVEgoIlVT SU5HIiwgIkFTIik7Ci0JZWxzZSBpZiAoVGFpbE1hdGNoZXMoIk1FUkdFIiwgIklOVE8iLCBN YXRjaEFueSwgIlVTSU5HIikpCi0JCUNPTVBMRVRFX1dJVEhfU0NIRU1BX1FVRVJZKFF1ZXJ5 X2Zvcl9saXN0X29mX3RhYmxlcyk7Ci0JLyogd2l0aCBbQVNdIGFsaWFzICovCi0JZWxzZSBp ZiAoVGFpbE1hdGNoZXMoIk1FUkdFIiwgIklOVE8iLCBNYXRjaEFueSwgIkFTIiwgTWF0Y2hB bnkpKQotCQlDT01QTEVURV9XSVRIKCJVU0lORyIpOwotCWVsc2UgaWYgKFRhaWxNYXRjaGVz KCJNRVJHRSIsICJJTlRPIiwgTWF0Y2hBbnksIE1hdGNoQW55KSkKKwllbHNlIGlmIChUYWls TWF0Y2hlcygiTUVSR0UiLCAiSU5UTyIsIE1hdGNoQW55LCAiQVMiLCBNYXRjaEFueSkgfHwK KwkJCSBUYWlsTWF0Y2hlcygiTUVSR0UiLCAiSU5UTyIsIE1hdGNoQW55LCBNYXRjaEFueUV4 Y2VwdCgiVVNJTkd8QVMiKSkpCiAJCUNPTVBMRVRFX1dJVEgoIlVTSU5HIik7Ci0JZWxzZSBp ZiAoVGFpbE1hdGNoZXMoIk1FUkdFIiwgIklOVE8iLCBNYXRjaEFueSwgIkFTIiwgTWF0Y2hB bnksICJVU0lORyIpKQotCQlDT01QTEVURV9XSVRIX1NDSEVNQV9RVUVSWShRdWVyeV9mb3Jf bGlzdF9vZl90YWJsZXMpOwotCWVsc2UgaWYgKFRhaWxNYXRjaGVzKCJNRVJHRSIsICJJTlRP IiwgTWF0Y2hBbnksIE1hdGNoQW55LCAiVVNJTkciKSkKLQkJQ09NUExFVEVfV0lUSF9TQ0hF TUFfUVVFUlkoUXVlcnlfZm9yX2xpc3Rfb2ZfdGFibGVzKTsKLQkvKiBPTiAqLwotCWVsc2Ug aWYgKFRhaWxNYXRjaGVzKCJNRVJHRSIsICJJTlRPIiwgTWF0Y2hBbnksICJVU0lORyIsIE1h dGNoQW55KSkKLQkJQ09NUExFVEVfV0lUSCgiT04iKTsKLQllbHNlIGlmIChUYWlsTWF0Y2hl cygiSU5UTyIsIE1hdGNoQW55LCAiQVMiLCBNYXRjaEFueSwgIlVTSU5HIiwgTWF0Y2hBbnks ICJBUyIsIE1hdGNoQW55KSkKLQkJQ09NUExFVEVfV0lUSCgiT04iKTsKLQllbHNlIGlmIChU YWlsTWF0Y2hlcygiSU5UTyIsIE1hdGNoQW55LCBNYXRjaEFueSwgIlVTSU5HIiwgTWF0Y2hB bnksIE1hdGNoQW55KSkKKworCS8qCisJICogQ29tcGxldGUgTUVSR0UgSU5UTyAuLi4gVVNJ Tkcgd2l0aCBhIGxpc3Qgb2YgcmVsYXRpb25zIHN1cHBvcnRpbmcKKwkgKiBTRUxFQ1QKKwkg Ki8KKwllbHNlIGlmIChUYWlsTWF0Y2hlcygiTUVSR0UiLCAiSU5UTyIsIE1hdGNoQW55LCAi VVNJTkciKSB8fAorCQkJIFRhaWxNYXRjaGVzKCJNRVJHRSIsICJJTlRPIiwgTWF0Y2hBbnks ICJBUyIsIE1hdGNoQW55LCAiVVNJTkciKSB8fAorCQkJIFRhaWxNYXRjaGVzKCJNRVJHRSIs ICJJTlRPIiwgTWF0Y2hBbnksIE1hdGNoQW55LCAiVVNJTkciKSkKKwkJQ09NUExFVEVfV0lU SF9TQ0hFTUFfUVVFUlkoUXVlcnlfZm9yX2xpc3Rfb2Zfc2VsZWN0YWJsZXMpOworCisJLyoK KwkgKiBDb21wbGV0ZSBNRVJHRSBJTlRPIDx0YWJsZT4gW1tBU10gPGFsaWFzPl0gVVNJTkcg PHJlbGF0aW9ucz4gW1tBU10KKwkgKiBhbGlhc10gd2l0aCBPTgorCSAqLworCWVsc2UgaWYg KFRhaWxNYXRjaGVzKCJNRVJHRSIsICJJTlRPIiwgTWF0Y2hBbnksICJVU0lORyIsIE1hdGNo QW55KSB8fAorCQkJIFRhaWxNYXRjaGVzKCJNRVJHRSIsICJJTlRPIiwgTWF0Y2hBbnksICJB UyIsIE1hdGNoQW55LCAiVVNJTkciLCBNYXRjaEFueSkgfHwKKwkJCSBUYWlsTWF0Y2hlcygi TUVSR0UiLCAiSU5UTyIsIE1hdGNoQW55LCBNYXRjaEFueSwgIlVTSU5HIiwgTWF0Y2hBbnkp KQorCQlDT01QTEVURV9XSVRIKCJBUyIsICJPTiIpOworCWVsc2UgaWYgKFRhaWxNYXRjaGVz KCJNRVJHRSIsICJJTlRPIiwgTWF0Y2hBbnksICJVU0lORyIsIE1hdGNoQW55LCAiQVMiLCBN YXRjaEFueSkgfHwKKwkJCSBUYWlsTWF0Y2hlcygiTUVSR0UiLCAiSU5UTyIsIE1hdGNoQW55 LCAiQVMiLCBNYXRjaEFueSwgIlVTSU5HIiwgTWF0Y2hBbnksICJBUyIsIE1hdGNoQW55KSB8 fAorCQkJIFRhaWxNYXRjaGVzKCJNRVJHRSIsICJJTlRPIiwgTWF0Y2hBbnksIE1hdGNoQW55 LCAiVVNJTkciLCBNYXRjaEFueSwgIkFTIiwgTWF0Y2hBbnkpIHx8CisJCQkgVGFpbE1hdGNo ZXMoIk1FUkdFIiwgIklOVE8iLCBNYXRjaEFueSwgIlVTSU5HIiwgTWF0Y2hBbnksIE1hdGNo QW55RXhjZXB0KCJPTnxBUyIpKSB8fAorCQkJIFRhaWxNYXRjaGVzKCJNRVJHRSIsICJJTlRP IiwgTWF0Y2hBbnksICJBUyIsIE1hdGNoQW55LCAiVVNJTkciLCBNYXRjaEFueSwgTWF0Y2hB bnlFeGNlcHQoIk9OfEFTIikpIHx8CisJCQkgVGFpbE1hdGNoZXMoIk1FUkdFIiwgIklOVE8i LCBNYXRjaEFueSwgTWF0Y2hBbnksICJVU0lORyIsIE1hdGNoQW55LCBNYXRjaEFueUV4Y2Vw dCgiT058QVMiKSkpCiAJCUNPTVBMRVRFX1dJVEgoIk9OIik7Ci0JLyogT04gY29uZGl0aW9u ICovCisKKwkvKiBDb21wbGV0ZSBNRVJHRSBJTlRPIC4uLiBPTiB3aXRoIHRhcmdldCB0YWJs ZSBhdHRyaWJ1dGVzICovCiAJZWxzZSBpZiAoVGFpbE1hdGNoZXMoIklOVE8iLCBNYXRjaEFu eSwgIlVTSU5HIiwgTWF0Y2hBbnksICJPTiIpKQogCQlDT01QTEVURV9XSVRIX0FUVFIocHJl djRfd2QpOwogCWVsc2UgaWYgKFRhaWxNYXRjaGVzKCJJTlRPIiwgTWF0Y2hBbnksICJBUyIs IE1hdGNoQW55LCAiVVNJTkciLCBNYXRjaEFueSwgIkFTIiwgTWF0Y2hBbnksICJPTiIpKQog CQlDT01QTEVURV9XSVRIX0FUVFIocHJldjhfd2QpOwogCWVsc2UgaWYgKFRhaWxNYXRjaGVz KCJJTlRPIiwgTWF0Y2hBbnksIE1hdGNoQW55LCAiVVNJTkciLCBNYXRjaEFueSwgTWF0Y2hB bnksICJPTiIpKQogCQlDT01QTEVURV9XSVRIX0FUVFIocHJldjZfd2QpOwotCS8qIFdIRU4g W05PVF0gTUFUQ0hFRCAqLwotCWVsc2UgaWYgKFRhaWxNYXRjaGVzKCJVU0lORyIsIE1hdGNo QW55LCAiT04iLCBNYXRjaEFueSkpCi0JCUNPTVBMRVRFX1dJVEgoIldIRU4gTUFUQ0hFRCIs ICJXSEVOIE5PVCBNQVRDSEVEIik7Ci0JZWxzZSBpZiAoVGFpbE1hdGNoZXMoIlVTSU5HIiwg TWF0Y2hBbnksICJBUyIsIE1hdGNoQW55LCAiT04iLCBNYXRjaEFueSkpCi0JCUNPTVBMRVRF X1dJVEgoIldIRU4gTUFUQ0hFRCIsICJXSEVOIE5PVCBNQVRDSEVEIik7Ci0JZWxzZSBpZiAo VGFpbE1hdGNoZXMoIlVTSU5HIiwgTWF0Y2hBbnksIE1hdGNoQW55LCAiT04iLCBNYXRjaEFu eSkpCisKKwkvKgorCSAqIENvbXBsZXRlIC4uLiBVU0lORyA8cmVsYXRpb24+IFtbQVNdIGFs aWFzXSBPTiBqb2luIGNvbmRpdGlvbgorCSAqIChjb25zaXN0aW5nIG9mIG9uZSBvciB0aHJl ZSB3b3JkcyB0eXBpY2FsbHkgdXNlZCkgd2l0aCBXSEVOIFtOT1RdCisJICogTUFUQ0hFRAor CSAqLworCWVsc2UgaWYgKFRhaWxNYXRjaGVzKCJVU0lORyIsIE1hdGNoQW55LCAiT04iLCBN YXRjaEFueSkgfHwKKwkJCSBUYWlsTWF0Y2hlcygiVVNJTkciLCBNYXRjaEFueSwgIkFTIiwg TWF0Y2hBbnksICJPTiIsIE1hdGNoQW55KSB8fAorCQkJIFRhaWxNYXRjaGVzKCJVU0lORyIs IE1hdGNoQW55LCBNYXRjaEFueSwgIk9OIiwgTWF0Y2hBbnkpIHx8CisJCQkgVGFpbE1hdGNo ZXMoIlVTSU5HIiwgTWF0Y2hBbnksICJPTiIsIE1hdGNoQW55LCBNYXRjaEFueUV4Y2VwdCgi V0hFTiIpLCBNYXRjaEFueUV4Y2VwdCgiV0hFTiIpKSB8fAorCQkJIFRhaWxNYXRjaGVzKCJV U0lORyIsIE1hdGNoQW55LCAiQVMiLCBNYXRjaEFueSwgIk9OIiwgTWF0Y2hBbnksIE1hdGNo QW55RXhjZXB0KCJXSEVOIiksIE1hdGNoQW55RXhjZXB0KCJXSEVOIikpIHx8CisJCQkgVGFp bE1hdGNoZXMoIlVTSU5HIiwgTWF0Y2hBbnksIE1hdGNoQW55LCAiT04iLCBNYXRjaEFueSwg TWF0Y2hBbnlFeGNlcHQoIldIRU4iKSwgTWF0Y2hBbnlFeGNlcHQoIldIRU4iKSkpCiAJCUNP TVBMRVRFX1dJVEgoIldIRU4gTUFUQ0hFRCIsICJXSEVOIE5PVCBNQVRDSEVEIik7Ci0JZWxz ZSBpZiAoVGFpbE1hdGNoZXMoIldIRU4iLCAiTUFUQ0hFRCIpKQotCQlDT01QTEVURV9XSVRI KCJUSEVOIiwgIkFORCIpOwotCWVsc2UgaWYgKFRhaWxNYXRjaGVzKCJXSEVOIiwgIk5PVCIs ICJNQVRDSEVEIikpCisJZWxzZSBpZiAoVGFpbE1hdGNoZXMoIlVTSU5HIiwgTWF0Y2hBbnks ICJPTiIsIE1hdGNoQW55LCAiV0hFTiIpIHx8CisJCQkgVGFpbE1hdGNoZXMoIlVTSU5HIiwg TWF0Y2hBbnksICJBUyIsIE1hdGNoQW55LCAiT04iLCBNYXRjaEFueSwgIldIRU4iKSB8fAor CQkJIFRhaWxNYXRjaGVzKCJVU0lORyIsIE1hdGNoQW55LCBNYXRjaEFueSwgIk9OIiwgTWF0 Y2hBbnksICJXSEVOIikgfHwKKwkJCSBUYWlsTWF0Y2hlcygiVVNJTkciLCBNYXRjaEFueSwg Ik9OIiwgTWF0Y2hBbnksIE1hdGNoQW55LCBNYXRjaEFueSwgIldIRU4iKSB8fAorCQkJIFRh aWxNYXRjaGVzKCJVU0lORyIsIE1hdGNoQW55LCAiQVMiLCBNYXRjaEFueSwgIk9OIiwgTWF0 Y2hBbnksIE1hdGNoQW55LCBNYXRjaEFueSwgIldIRU4iKSB8fAorCQkJIFRhaWxNYXRjaGVz KCJVU0lORyIsIE1hdGNoQW55LCBNYXRjaEFueSwgIk9OIiwgTWF0Y2hBbnksIE1hdGNoQW55 LCBNYXRjaEFueSwgIldIRU4iKSkKKwkJQ09NUExFVEVfV0lUSCgiTUFUQ0hFRCIsICJOT1Qg TUFUQ0hFRCIpOworCisJLyogQ29tcGxldGUgLi4uIFdIRU4gW05PVF0gTUFUQ0hFRCB3aXRo IFRIRU4vQU5EICovCisJZWxzZSBpZiAoVGFpbE1hdGNoZXMoIldIRU4iLCAiTUFUQ0hFRCIp IHx8CisJCQkgVGFpbE1hdGNoZXMoIldIRU4iLCAiTk9UIiwgIk1BVENIRUQiKSkKIAkJQ09N UExFVEVfV0lUSCgiVEhFTiIsICJBTkQiKTsKKworCS8qIENvbXBsZXRlIC4uLiBXSEVOIE1B VENIRUQgVEhFTiB3aXRoIFVQREFURSBTRVQvREVMRVRFL0RPIE5PVEhJTkcgKi8KIAllbHNl IGlmIChUYWlsTWF0Y2hlcygiV0hFTiIsICJNQVRDSEVEIiwgIlRIRU4iKSkKLQkJQ09NUExF VEVfV0lUSCgiVVBEQVRFIiwgIkRFTEVURSIpOworCQlDT01QTEVURV9XSVRIKCJVUERBVEUg U0VUIiwgIkRFTEVURSIsICJETyBOT1RISU5HIik7CisKKwkvKiBDb21wbGV0ZSAuLi4gV0hF TiBOT1QgTUFUQ0hFRCBUSEVOIHdpdGggSU5TRVJUL0RPIE5PVEhJTkcgKi8KIAllbHNlIGlm IChUYWlsTWF0Y2hlcygiV0hFTiIsICJOT1QiLCAiTUFUQ0hFRCIsICJUSEVOIikpCiAJCUNP TVBMRVRFX1dJVEgoIklOU0VSVCIsICJETyBOT1RISU5HIik7CiAKLQkvKiBDb21wbGV0ZSBM T0NLIFtUQUJMRV0gW09OTFldIDx0YWJsZT4gW0lOIGxvY2ttb2RlIE1PREVdIHdpdGggIk5P V0FJVCIgKi8KLQllbHNlIGlmIChIZWFkTWF0Y2hlcygiTE9DSyIpICYmIFRhaWxNYXRjaGVz KCJNT0RFIikpCi0JCUNPTVBMRVRFX1dJVEgoIk5PV0FJVCIpOwotCiAvKiBOT1RJRlkgLS0t IGNhbiBiZSBpbnNpZGUgRVhQTEFJTiwgUlVMRSwgZXRjICovCiAJZWxzZSBpZiAoVGFpbE1h dGNoZXMoIk5PVElGWSIpKQogCQlDT01QTEVURV9XSVRIX1FVRVJZKFF1ZXJ5X2Zvcl9saXN0 X29mX2NoYW5uZWxzKTsKLS0gCjIuMzcuMQoK --------------pISc0MZ2oTZP3UclaIOeKB9L Content-Type: text/plain; charset=UTF-8; name="v9-0002-psql-Add-PartialMatches-macro-for-better-tab-complet.patch" Content-Disposition: attachment; filename*0="v9-0002-psql-Add-PartialMatches-macro-for-better-tab-complet"; filename*1=".patch" Content-Transfer-Encoding: base64 RnJvbSA4YzdlMjVlNGEyZDkzOWEzMjc1MWJkOWEwZDQ4N2M1MTBlYzY2MTkxIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBGdWppaSBNYXNhbyA8ZnVqaWlAcG9zdGdyZXNxbC5v cmc+CkRhdGU6IFdlZCwgMjEgU2VwIDIwMjIgMTM6NTg6NTAgKzA5MDAKU3ViamVjdDogW1BB VENIIDIvMl0gcHNxbDogQWRkIFBhcnRpYWxNYXRjaGVzKCkgbWFjcm8gZm9yIGJldHRlcgog dGFiLWNvbXBsZXRpb24uCgotLS0KIHNyYy9iaW4vcHNxbC90YWItY29tcGxldGUuYyB8IDE1 MiArKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2Vk LCAxMTMgaW5zZXJ0aW9ucygrKSwgMzkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3Jj L2Jpbi9wc3FsL3RhYi1jb21wbGV0ZS5jIGIvc3JjL2Jpbi9wc3FsL3RhYi1jb21wbGV0ZS5j CmluZGV4IDgyMGY0N2QyM2EuLjBiOGMyNTI2MTUgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcHNx bC90YWItY29tcGxldGUuYworKysgYi9zcmMvYmluL3BzcWwvdGFiLWNvbXBsZXRlLmMKQEAg LTE1ODIsNiArMTU4Miw2NSBAQCBIZWFkTWF0Y2hlc0ltcGwoYm9vbCBjYXNlX3NlbnNpdGl2 ZSwKIAlyZXR1cm4gdHJ1ZTsKIH0KIAorLyoKKyAqIEltcGxlbWVudGF0aW9uIG9mIFBhcnRp YWxNYXRjaGVzIGFuZCBQYXJ0aWFsTWF0Y2hlc0NTIG1hY3JvczogZG8gcGFydHMgb2YKKyAq IHRoZSB3b3JkcyBpbiBwcmV2aW91c193b3JkcyBtYXRjaCB0aGUgdmFyaWFkaWMgYXJndW1l bnRzPworICovCitzdGF0aWMgYm9vbAorUGFydGlhbE1hdGNoZXNJbXBsKGJvb2wgY2FzZV9z ZW5zaXRpdmUsCisJCQkJICAgaW50IHByZXZpb3VzX3dvcmRzX2NvdW50LCBjaGFyICoqcHJl dmlvdXNfd29yZHMsCisJCQkJICAgaW50IG5hcmcsLi4uKQoreworCXZhX2xpc3QJCWFyZ3M7 CisJY2hhcgkgICAqZmlyc3RhcmcgPSBOVUxMOworCisJaWYgKHByZXZpb3VzX3dvcmRzX2Nv dW50IDwgbmFyZykKKwkJcmV0dXJuIGZhbHNlOworCisJZm9yIChpbnQgc3RhcnRwb3MgPSAw OyBzdGFydHBvcyA8IHByZXZpb3VzX3dvcmRzX2NvdW50OyBzdGFydHBvcysrKQorCXsKKwkJ aW50CQkJYXJnbm87CisKKwkJaWYgKGZpcnN0YXJnID09IE5VTEwpCisJCXsKKwkJCXZhX3N0 YXJ0KGFyZ3MsIG5hcmcpOworCQkJZmlyc3RhcmcgPSB2YV9hcmcoYXJncywgY2hhciAqKTsK KwkJfQorCisJCWlmICghd29yZF9tYXRjaGVzKGZpcnN0YXJnLAorCQkJCQkJICBwcmV2aW91 c193b3Jkc1twcmV2aW91c193b3Jkc19jb3VudCAtIHN0YXJ0cG9zIC0gMV0sCisJCQkJCQkg IGNhc2Vfc2Vuc2l0aXZlKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChwcmV2aW91c193b3Jk c19jb3VudCAtIHN0YXJ0cG9zIDwgbmFyZykKKwkJeworCQkJdmFfZW5kKGFyZ3MpOworCQkJ cmV0dXJuIGZhbHNlOworCQl9CisKKwkJZm9yIChhcmdubyA9IDE7IGFyZ25vIDwgbmFyZzsg YXJnbm8rKykKKwkJeworCQkJY29uc3QgY2hhciAqYXJnID0gdmFfYXJnKGFyZ3MsIGNvbnN0 IGNoYXIgKik7CisKKwkJCWlmICghd29yZF9tYXRjaGVzKGFyZywKKwkJCQkJCQkgIHByZXZp b3VzX3dvcmRzW3ByZXZpb3VzX3dvcmRzX2NvdW50IC0gYXJnbm8gLSBzdGFydHBvcyAtIDFd LAorCQkJCQkJCSAgY2FzZV9zZW5zaXRpdmUpKQorCQkJCWJyZWFrOworCQl9CisKKwkJdmFf ZW5kKGFyZ3MpOworCQlmaXJzdGFyZyA9IE5VTEw7CisKKwkJaWYgKGFyZ25vID09IG5hcmcp CisJCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlpZiAoZmlyc3RhcmcgIT0gTlVMTCkKKwkJdmFf ZW5kKGFyZ3MpOworCisJcmV0dXJuIGZhbHNlOworfQorCiAvKgogICogQ2hlY2sgaWYgdGhl IGZpbmFsIGNoYXJhY3RlciBvZiAncycgaXMgJ2MnLgogICovCkBAIC0xNjYzLDYgKzE3MjIs MTYgQEAgcHNxbF9jb21wbGV0aW9uKGNvbnN0IGNoYXIgKnRleHQsIGludCBzdGFydCwgaW50 IGVuZCkKIAlIZWFkTWF0Y2hlc0ltcGwodHJ1ZSwgcHJldmlvdXNfd29yZHNfY291bnQsIHBy ZXZpb3VzX3dvcmRzLCBcCiAJCQkJCVZBX0FSR1NfTkFSR1MoX19WQV9BUkdTX18pLCBfX1ZB X0FSR1NfXykKIAorCS8qIE1hdGNoIE4gd29yZHMgb24gdGhlIGxpbmUgcGFydGlhbGx5LCBj YXNlLWluc2Vuc2l0aXZlbHkuICovCisjZGVmaW5lIFBhcnRpYWxNYXRjaGVzKC4uLikJXAor CVBhcnRpYWxNYXRjaGVzSW1wbChmYWxzZSwgcHJldmlvdXNfd29yZHNfY291bnQsIHByZXZp b3VzX3dvcmRzLCBcCisJCQkJCVZBX0FSR1NfTkFSR1MoX19WQV9BUkdTX18pLCBfX1ZBX0FS R1NfXykKKworCS8qIE1hdGNoIE4gd29yZHMgb24gdGhlIGxpbmUgcGFydGlhbGx5LCBjYXNl LXNlbnNpdGl2ZWx5LiAqLworI2RlZmluZSBQYXJ0aWFsTWF0Y2hlc0NTKC4uLikJXAorCVBh cnRpYWxNYXRjaGVzSW1wbCh0cnVlLCBwcmV2aW91c193b3Jkc19jb3VudCwgcHJldmlvdXNf d29yZHMsIFwKKwkJCQkJVkFfQVJHU19OQVJHUyhfX1ZBX0FSR1NfXyksIF9fVkFfQVJHU19f KQorCiAJLyogS25vd24gY29tbWFuZC1zdGFydGluZyBrZXl3b3Jkcy4gKi8KIAlzdGF0aWMg Y29uc3QgY2hhciAqY29uc3Qgc3FsX2NvbW1hbmRzW10gPSB7CiAJCSJBQk9SVCIsICJBTFRF UiIsICJBTkFMWVpFIiwgIkJFR0lOIiwgIkNBTEwiLCAiQ0hFQ0tQT0lOVCIsICJDTE9TRSIs ICJDTFVTVEVSIiwKQEAgLTQxMDgsNDYgKzQxNzcsNTEgQEAgcHNxbF9jb21wbGV0aW9uKGNv bnN0IGNoYXIgKnRleHQsIGludCBzdGFydCwgaW50IGVuZCkKIAkJCSBUYWlsTWF0Y2hlcygi TUVSR0UiLCAiSU5UTyIsIE1hdGNoQW55LCBNYXRjaEFueSwgIlVTSU5HIiwgTWF0Y2hBbnks IE1hdGNoQW55RXhjZXB0KCJPTnxBUyIpKSkKIAkJQ09NUExFVEVfV0lUSCgiT04iKTsKIAot CS8qIENvbXBsZXRlIE1FUkdFIElOVE8gLi4uIE9OIHdpdGggdGFyZ2V0IHRhYmxlIGF0dHJp YnV0ZXMgKi8KLQllbHNlIGlmIChUYWlsTWF0Y2hlcygiSU5UTyIsIE1hdGNoQW55LCAiVVNJ TkciLCBNYXRjaEFueSwgIk9OIikpCi0JCUNPTVBMRVRFX1dJVEhfQVRUUihwcmV2NF93ZCk7 Ci0JZWxzZSBpZiAoVGFpbE1hdGNoZXMoIklOVE8iLCBNYXRjaEFueSwgIkFTIiwgTWF0Y2hB bnksICJVU0lORyIsIE1hdGNoQW55LCAiQVMiLCBNYXRjaEFueSwgIk9OIikpCi0JCUNPTVBM RVRFX1dJVEhfQVRUUihwcmV2OF93ZCk7Ci0JZWxzZSBpZiAoVGFpbE1hdGNoZXMoIklOVE8i LCBNYXRjaEFueSwgTWF0Y2hBbnksICJVU0lORyIsIE1hdGNoQW55LCBNYXRjaEFueSwgIk9O IikpCi0JCUNPTVBMRVRFX1dJVEhfQVRUUihwcmV2Nl93ZCk7CisJZWxzZSBpZiAoUGFydGlh bE1hdGNoZXMoIk1FUkdFIiwgIklOVE8iLCBNYXRjaEFueSwgIlVTSU5HIikgfHwKKwkJCSBQ YXJ0aWFsTWF0Y2hlcygiTUVSR0UiLCAiSU5UTyIsIE1hdGNoQW55LCAiQVMiLCBNYXRjaEFu eSwgIlVTSU5HIikgfHwKKwkJCSBQYXJ0aWFsTWF0Y2hlcygiTUVSR0UiLCAiSU5UTyIsIE1h dGNoQW55LCBNYXRjaEFueSwgIlVTSU5HIikpCisJeworCQkvKiBDb21wbGV0ZSBNRVJHRSBJ TlRPIC4uLiBPTiB3aXRoIHRhcmdldCB0YWJsZSBhdHRyaWJ1dGVzICovCisJCWlmIChUYWls TWF0Y2hlcygiSU5UTyIsIE1hdGNoQW55LCAiVVNJTkciLCBNYXRjaEFueSwgIk9OIikpCisJ CQlDT01QTEVURV9XSVRIX0FUVFIocHJldjRfd2QpOworCQllbHNlIGlmIChUYWlsTWF0Y2hl cygiSU5UTyIsIE1hdGNoQW55LCAiQVMiLCBNYXRjaEFueSwgIlVTSU5HIiwgTWF0Y2hBbnks ICJBUyIsIE1hdGNoQW55LCAiT04iKSkKKwkJCUNPTVBMRVRFX1dJVEhfQVRUUihwcmV2OF93 ZCk7CisJCWVsc2UgaWYgKFRhaWxNYXRjaGVzKCJJTlRPIiwgTWF0Y2hBbnksIE1hdGNoQW55 LCAiVVNJTkciLCBNYXRjaEFueSwgTWF0Y2hBbnksICJPTiIpKQorCQkJQ09NUExFVEVfV0lU SF9BVFRSKHByZXY2X3dkKTsKIAotCS8qCi0JICogQ29tcGxldGUgLi4uIFVTSU5HIDxyZWxh dGlvbj4gW1tBU10gYWxpYXNdIE9OIGpvaW4gY29uZGl0aW9uCi0JICogKGNvbnNpc3Rpbmcg b2Ygb25lIG9yIHRocmVlIHdvcmRzIHR5cGljYWxseSB1c2VkKSB3aXRoIFdIRU4gW05PVF0K LQkgKiBNQVRDSEVECi0JICovCi0JZWxzZSBpZiAoVGFpbE1hdGNoZXMoIlVTSU5HIiwgTWF0 Y2hBbnksICJPTiIsIE1hdGNoQW55KSB8fAotCQkJIFRhaWxNYXRjaGVzKCJVU0lORyIsIE1h dGNoQW55LCAiQVMiLCBNYXRjaEFueSwgIk9OIiwgTWF0Y2hBbnkpIHx8Ci0JCQkgVGFpbE1h dGNoZXMoIlVTSU5HIiwgTWF0Y2hBbnksIE1hdGNoQW55LCAiT04iLCBNYXRjaEFueSkgfHwK LQkJCSBUYWlsTWF0Y2hlcygiVVNJTkciLCBNYXRjaEFueSwgIk9OIiwgTWF0Y2hBbnksIE1h dGNoQW55RXhjZXB0KCJXSEVOIiksIE1hdGNoQW55RXhjZXB0KCJXSEVOIikpIHx8Ci0JCQkg VGFpbE1hdGNoZXMoIlVTSU5HIiwgTWF0Y2hBbnksICJBUyIsIE1hdGNoQW55LCAiT04iLCBN YXRjaEFueSwgTWF0Y2hBbnlFeGNlcHQoIldIRU4iKSwgTWF0Y2hBbnlFeGNlcHQoIldIRU4i KSkgfHwKLQkJCSBUYWlsTWF0Y2hlcygiVVNJTkciLCBNYXRjaEFueSwgTWF0Y2hBbnksICJP TiIsIE1hdGNoQW55LCBNYXRjaEFueUV4Y2VwdCgiV0hFTiIpLCBNYXRjaEFueUV4Y2VwdCgi V0hFTiIpKSkKLQkJQ09NUExFVEVfV0lUSCgiV0hFTiBNQVRDSEVEIiwgIldIRU4gTk9UIE1B VENIRUQiKTsKLQllbHNlIGlmIChUYWlsTWF0Y2hlcygiVVNJTkciLCBNYXRjaEFueSwgIk9O IiwgTWF0Y2hBbnksICJXSEVOIikgfHwKLQkJCSBUYWlsTWF0Y2hlcygiVVNJTkciLCBNYXRj aEFueSwgIkFTIiwgTWF0Y2hBbnksICJPTiIsIE1hdGNoQW55LCAiV0hFTiIpIHx8Ci0JCQkg VGFpbE1hdGNoZXMoIlVTSU5HIiwgTWF0Y2hBbnksIE1hdGNoQW55LCAiT04iLCBNYXRjaEFu eSwgIldIRU4iKSB8fAotCQkJIFRhaWxNYXRjaGVzKCJVU0lORyIsIE1hdGNoQW55LCAiT04i LCBNYXRjaEFueSwgTWF0Y2hBbnksIE1hdGNoQW55LCAiV0hFTiIpIHx8Ci0JCQkgVGFpbE1h dGNoZXMoIlVTSU5HIiwgTWF0Y2hBbnksICJBUyIsIE1hdGNoQW55LCAiT04iLCBNYXRjaEFu eSwgTWF0Y2hBbnksIE1hdGNoQW55LCAiV0hFTiIpIHx8Ci0JCQkgVGFpbE1hdGNoZXMoIlVT SU5HIiwgTWF0Y2hBbnksIE1hdGNoQW55LCAiT04iLCBNYXRjaEFueSwgTWF0Y2hBbnksIE1h dGNoQW55LCAiV0hFTiIpKQotCQlDT01QTEVURV9XSVRIKCJNQVRDSEVEIiwgIk5PVCBNQVRD SEVEIik7Ci0KLQkvKiBDb21wbGV0ZSAuLi4gV0hFTiBbTk9UXSBNQVRDSEVEIHdpdGggVEhF Ti9BTkQgKi8KLQllbHNlIGlmIChUYWlsTWF0Y2hlcygiV0hFTiIsICJNQVRDSEVEIikgfHwK LQkJCSBUYWlsTWF0Y2hlcygiV0hFTiIsICJOT1QiLCAiTUFUQ0hFRCIpKQotCQlDT01QTEVU RV9XSVRIKCJUSEVOIiwgIkFORCIpOwotCi0JLyogQ29tcGxldGUgLi4uIFdIRU4gTUFUQ0hF RCBUSEVOIHdpdGggVVBEQVRFIFNFVC9ERUxFVEUvRE8gTk9USElORyAqLwotCWVsc2UgaWYg KFRhaWxNYXRjaGVzKCJXSEVOIiwgIk1BVENIRUQiLCAiVEhFTiIpKQotCQlDT01QTEVURV9X SVRIKCJVUERBVEUgU0VUIiwgIkRFTEVURSIsICJETyBOT1RISU5HIik7Ci0KLQkvKiBDb21w bGV0ZSAuLi4gV0hFTiBOT1QgTUFUQ0hFRCBUSEVOIHdpdGggSU5TRVJUL0RPIE5PVEhJTkcg Ki8KLQllbHNlIGlmIChUYWlsTWF0Y2hlcygiV0hFTiIsICJOT1QiLCAiTUFUQ0hFRCIsICJU SEVOIikpCi0JCUNPTVBMRVRFX1dJVEgoIklOU0VSVCIsICJETyBOT1RISU5HIik7CisJCS8q CisJCSAqIENvbXBsZXRlIC4uLiBVU0lORyA8cmVsYXRpb24+IFtbQVNdIGFsaWFzXSBPTiBq b2luIGNvbmRpdGlvbgorCQkgKiAoY29uc2lzdGluZyBvZiBvbmUgb3IgdGhyZWUgd29yZHMg dHlwaWNhbGx5IHVzZWQpIHdpdGggV0hFTiBbTk9UXQorCQkgKiBNQVRDSEVECisJCSAqLwor CQllbHNlIGlmIChUYWlsTWF0Y2hlcygiVVNJTkciLCBNYXRjaEFueSwgIk9OIiwgTWF0Y2hB bnkpIHx8CisJCQkJIFRhaWxNYXRjaGVzKCJVU0lORyIsIE1hdGNoQW55LCAiQVMiLCBNYXRj aEFueSwgIk9OIiwgTWF0Y2hBbnkpIHx8CisJCQkJIFRhaWxNYXRjaGVzKCJVU0lORyIsIE1h dGNoQW55LCBNYXRjaEFueSwgIk9OIiwgTWF0Y2hBbnkpIHx8CisJCQkJIFRhaWxNYXRjaGVz KCJVU0lORyIsIE1hdGNoQW55LCAiT04iLCBNYXRjaEFueSwgTWF0Y2hBbnlFeGNlcHQoIldI RU4iKSwgTWF0Y2hBbnlFeGNlcHQoIldIRU4iKSkgfHwKKwkJCQkgVGFpbE1hdGNoZXMoIlVT SU5HIiwgTWF0Y2hBbnksICJBUyIsIE1hdGNoQW55LCAiT04iLCBNYXRjaEFueSwgTWF0Y2hB bnlFeGNlcHQoIldIRU4iKSwgTWF0Y2hBbnlFeGNlcHQoIldIRU4iKSkgfHwKKwkJCQkgVGFp bE1hdGNoZXMoIlVTSU5HIiwgTWF0Y2hBbnksIE1hdGNoQW55LCAiT04iLCBNYXRjaEFueSwg TWF0Y2hBbnlFeGNlcHQoIldIRU4iKSwgTWF0Y2hBbnlFeGNlcHQoIldIRU4iKSkpCisJCQlD T01QTEVURV9XSVRIKCJXSEVOIE1BVENIRUQiLCAiV0hFTiBOT1QgTUFUQ0hFRCIpOworCQll bHNlIGlmIChUYWlsTWF0Y2hlcygiVVNJTkciLCBNYXRjaEFueSwgIk9OIiwgTWF0Y2hBbnks ICJXSEVOIikgfHwKKwkJCQkgVGFpbE1hdGNoZXMoIlVTSU5HIiwgTWF0Y2hBbnksICJBUyIs IE1hdGNoQW55LCAiT04iLCBNYXRjaEFueSwgIldIRU4iKSB8fAorCQkJCSBUYWlsTWF0Y2hl cygiVVNJTkciLCBNYXRjaEFueSwgTWF0Y2hBbnksICJPTiIsIE1hdGNoQW55LCAiV0hFTiIp IHx8CisJCQkJIFRhaWxNYXRjaGVzKCJVU0lORyIsIE1hdGNoQW55LCAiT04iLCBNYXRjaEFu eSwgTWF0Y2hBbnksIE1hdGNoQW55LCAiV0hFTiIpIHx8CisJCQkJIFRhaWxNYXRjaGVzKCJV U0lORyIsIE1hdGNoQW55LCAiQVMiLCBNYXRjaEFueSwgIk9OIiwgTWF0Y2hBbnksIE1hdGNo QW55LCBNYXRjaEFueSwgIldIRU4iKSB8fAorCQkJCSBUYWlsTWF0Y2hlcygiVVNJTkciLCBN YXRjaEFueSwgTWF0Y2hBbnksICJPTiIsIE1hdGNoQW55LCBNYXRjaEFueSwgTWF0Y2hBbnks ICJXSEVOIikpCisJCQlDT01QTEVURV9XSVRIKCJNQVRDSEVEIiwgIk5PVCBNQVRDSEVEIik7 CisKKwkJLyogQ29tcGxldGUgLi4uIFdIRU4gW05PVF0gTUFUQ0hFRCB3aXRoIFRIRU4vQU5E ICovCisJCWVsc2UgaWYgKFRhaWxNYXRjaGVzKCJXSEVOIiwgIk1BVENIRUQiKSB8fAorCQkJ CSBUYWlsTWF0Y2hlcygiV0hFTiIsICJOT1QiLCAiTUFUQ0hFRCIpKQorCQkJQ09NUExFVEVf V0lUSCgiVEhFTiIsICJBTkQiKTsKKworCQkvKiBDb21wbGV0ZSAuLi4gV0hFTiBNQVRDSEVE IFRIRU4gd2l0aCBVUERBVEUgU0VUL0RFTEVURS9ETyBOT1RISU5HICovCisJCWVsc2UgaWYg KFRhaWxNYXRjaGVzKCJXSEVOIiwgIk1BVENIRUQiLCAiVEhFTiIpKQorCQkJQ09NUExFVEVf V0lUSCgiVVBEQVRFIFNFVCIsICJERUxFVEUiLCAiRE8gTk9USElORyIpOworCisJCS8qIENv bXBsZXRlIC4uLiBXSEVOIE5PVCBNQVRDSEVEIFRIRU4gd2l0aCBJTlNFUlQvRE8gTk9USElO RyAqLworCQllbHNlIGlmIChUYWlsTWF0Y2hlcygiV0hFTiIsICJOT1QiLCAiTUFUQ0hFRCIs ICJUSEVOIikpCisJCQlDT01QTEVURV9XSVRIKCJJTlNFUlQiLCAiRE8gTk9USElORyIpOwor CX0KIAogLyogTk9USUZZIC0tLSBjYW4gYmUgaW5zaWRlIEVYUExBSU4sIFJVTEUsIGV0YyAq LwogCWVsc2UgaWYgKFRhaWxNYXRjaGVzKCJOT1RJRlkiKSkKLS0gCjIuMzcuMQoK --------------pISc0MZ2oTZP3UclaIOeKB9L--