Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tAlah-00011p-VW for pgsql-hackers@arkaria.postgresql.org; Tue, 12 Nov 2024 07:45:35 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1tAlaf-003xVv-Dy for pgsql-hackers@arkaria.postgresql.org; Tue, 12 Nov 2024 07:45:34 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tAlae-003xVm-3T for pgsql-hackers@lists.postgresql.org; Tue, 12 Nov 2024 07:45:33 +0000 Received: from fout-b2-smtp.messagingengine.com ([202.12.124.145]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tAlaa-001Rbu-AP for pgsql-hackers@postgresql.org; Tue, 12 Nov 2024 07:45:31 +0000 Received: from phl-compute-10.internal (phl-compute-10.phl.internal [10.202.2.50]) by mailfout.stl.internal (Postfix) with ESMTP id 3DF5A1140187; Tue, 12 Nov 2024 02:45:27 -0500 (EST) Received: from phl-mailfrontend-01 ([10.202.2.162]) by phl-compute-10.internal (MEProxy); Tue, 12 Nov 2024 02:45:27 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=eisentraut.org; h=cc:cc:content-type:content-type:date:date:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to; s=fm2; t=1731397527; x= 1731483927; bh=2RnUouTej+1TENoiHQoKj1kEqQ9ALYHJoBu6LhWtbjc=; b=L 8ZyTU5ycLIHiwdJHyZV/qeFLyNt8hmywE6PVa8k0KZvm5Rx7M7ooZ1UUuhpd5QIE VePvlYl/4r5eainzMXTQ1gEuKUaMD3w2u014znmZDk+cJ7ybmDQDN/80Dx8WdWzK QDfJoqQC4HIWfjP7ITlP3Dfehi2V6DOuodfGCzsa4266xirlZecrj2toGbZ6nOBE YwbCB/B0rbvdJMHERtWORyow8bV53mjtv9kGSUFldPE/TCxaG5aS+Z5dzV3e3Z6N klp+/tZNZDOkIax4z3zhl2t1DaKOSvYr58ScofEw3jsf4SjeMsxAgcr2TAeEqD1A NnVOAFUO5d/0CEjEkGepQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-type:content-type:date:date :feedback-id:feedback-id:from:from:in-reply-to:in-reply-to :message-id:mime-version:references:reply-to:subject:subject:to :to:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm3; t= 1731397527; x=1731483927; bh=2RnUouTej+1TENoiHQoKj1kEqQ9ALYHJoBu 6LhWtbjc=; b=nnWmicHXBnGjP/x1VJY+5vHiG88VdNyIjF33maaXnD2kCs8N0dn YKbva2K1yqzosobuBtirCbKpBbolyWHWcTRvZGyG8Zt6kSljeAwff5dXjmsa0300 uiTqRFHG0y+8YN71WkXBQZBG5ng+KgmWbXJCnPu34BYozwGz7J+r1BmsZ1PNdn2n bcdUY++01o28jxD4zq8EFvTm8NjY/JTCOakVOXn1OcPwCSsDG6vGkzo7Npgp3qxv F4fnkzs5ZGDDudHtTE5iG7BPxBK3pzMk6rOGuRoeOYfqXNb5IBv1BwLorc9Ycgec 0efvTiw8RsA0Vov7zlWmjUEuW5R7mvnjICQ== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeefuddrudefgdduuddtucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdggtfgfnhhsuhgsshgtrhhisggvpdfu rfetoffkrfgpnffqhgenuceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnh htshculddquddttddmnecujfgurheptgfkffggfgfuvfevfhfhjgesmhdtreertddvjeen ucfhrhhomheprfgvthgvrhcugfhishgvnhhtrhgruhhtuceophgvthgvrhesvghishgvnh htrhgruhhtrdhorhhgqeenucggtffrrghtthgvrhhnpeektdeutdfhvdfhveeigfffteeg vdejvdfhhfevfeevgfdtgfelgeehieevhffgieenucevlhhushhtvghrufhiiigvpedtne curfgrrhgrmhepmhgrihhlfhhrohhmpehpvghtvghrsegvihhsvghnthhrrghuthdrohhr ghdpnhgspghrtghpthhtohephedpmhhouggvpehsmhhtphhouhhtpdhrtghpthhtohephh hlihhnnhgrkhgrsehikhhirdhfihdprhgtphhtthhopehjrggtohgsrdgthhgrmhhpihho nhesvghnthgvrhhprhhishgvuggsrdgtohhmpdhrtghpthhtohepphhgshhqlhdqhhgrtg hkvghrshesphhoshhtghhrvghsqhhlrdhorhhgpdhrtghpthhtohepuggrnhhivghlsehm rghnihhtohhuqdhmrghilhdrohhrghdprhgtphhtthhopehpjhesihhllhhumhhinhgrth gvuggtohhmphhuthhinhhgrdgtohhm X-ME-Proxy: Feedback-ID: ie0a040ee:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Tue, 12 Nov 2024 02:45:25 -0500 (EST) Content-Type: multipart/mixed; boundary="------------jqBbp4Mo0tJlYGc10l8amHix" Message-ID: <62156cde-b2c5-4375-b47a-9730aa8f7b5e@eisentraut.org> Date: Tue, 12 Nov 2024 08:45:23 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Support LIKE with nondeterministic collations To: Heikki Linnakangas , Jacob Champion Cc: pgsql-hackers , Daniel Verite , Paul A Jungwirth References: <3104729e-1fbf-4368-ac21-1f670062de28@eisentraut.org> <0ca761b5-7b62-42a1-bffd-8bedefad48dd@eisentraut.org> Content-Language: en-US From: Peter Eisentraut In-Reply-To: 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. --------------jqBbp4Mo0tJlYGc10l8amHix Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 11.11.24 14:25, Heikki Linnakangas wrote: > Sadly the algorithm is O(n^2) with non-deterministic collations.Is there > any way this could be optimized? We make no claims on how expensive any > functions or operators are, so I suppose a slow implementation is > nevertheless better than throwing an error. Yeah, maybe someone comes up with new ideas in the future. > Let's at least add some CHECK_FOR_INTERRUPTS(). For example, this takes > a very long time and is uninterruptible: > >  SELECT repeat('x', 100000) LIKE '%xxxy%' COLLATE ignore_accents; Good idea. Here is a new patch version with an interrupt check. --------------jqBbp4Mo0tJlYGc10l8amHix Content-Type: text/plain; charset=UTF-8; name="v7-0001-Support-LIKE-with-nondeterministic-collations.patch" Content-Disposition: attachment; filename*0="v7-0001-Support-LIKE-with-nondeterministic-collations.patch" Content-Transfer-Encoding: base64 RnJvbSBiYzk2MmEzYWQwOWY5ZGRhYTZlOWJjMzQ1Mzc2ZjI2ZDE2NDcxNjEyIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBFaXNlbnRyYXV0IDxwZXRlckBlaXNlbnRy YXV0Lm9yZz4KRGF0ZTogVHVlLCAxMiBOb3YgMjAyNCAwODo0MzoyNyArMDEwMApTdWJqZWN0 OiBbUEFUQ0ggdjddIFN1cHBvcnQgTElLRSB3aXRoIG5vbmRldGVybWluaXN0aWMgY29sbGF0 aW9ucwpNSU1FLVZlcnNpb246IDEuMApDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJz ZXQ9VVRGLTgKQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAoKVGhpcyBhbGxvd3Mg Zm9yIGV4YW1wbGUgdXNpbmcgTElLRSB3aXRoIGNhc2UtaW5zZW5zaXRpdmUgY29sbGF0aW9u cy4KVGhlcmUgd2FzIHByZXZpb3VzbHkgbm8gaW50ZXJuYWwgaW1wbGVtZW50YXRpb24gb2Yg dGhpcywgc28gaXQgd2FzIG1ldAp3aXRoIGEgbm90LXN1cHBvcnRlZCBlcnJvci4gIFRoaXMg YWRkcyB0aGUgaW50ZXJuYWwgaW1wbGVtZW50YXRpb24gYW5kCnJlbW92ZXMgdGhlIGVycm9y LiAgVGhlIGltcGxlbWVudGF0aW9uIGZvbGxvd3MgdGhlIHNwZWNpZmljYXRpb24gb2YKdGhl IFNRTCBzdGFuZGFyZCBmb3IgdGhpcy4KClVubGlrZSB3aXRoIGRldGVybWluaXN0aWMgY29s bGF0aW9ucywgdGhlIExJS0UgbWF0Y2hpbmcgY2Fubm90IGdvCmNoYXJhY3RlciBieSBjaGFy YWN0ZXIgYnV0IGhhcyB0byBnbyBzdWJzdHJpbmcgYnkgc3Vic3RyaW5nLiAgRm9yCmV4YW1w bGUsIGlmIHdlIGFyZSBtYXRjaGluZyBhZ2FpbnN0IExJS0UgJ2ZvbyViYXInLCB3ZSBjYW4n dCBzdGFydCBieQpsb29raW5nIGZvciBhbiAnZicsIHRoZW4gYW4gJ28nLCBidXQgaW5zdGVh ZCB3aXRoIGhhdmUgdG8gZmluZApzb21ldGhpbmcgdGhhdCBtYXRjaGVzICdmb28nLiAgVGhp cyBpcyBiZWNhdXNlIHRoZSBjb2xsYXRpb24gY291bGQKY29uc2lkZXIgc3Vic3RyaW5ncyBv ZiBkaWZmZXJlbnQgbGVuZ3RocyB0byBiZSBlcXVhbC4gIFRoaXMgaXMgYWxsCmludGVybmFs IHRvIE1hdGNoVGV4dCgpIGluIGxpa2VfbWF0Y2guYy4KClRoZSBjaGFuZ2VzIGluIEdlbmVy aWNNYXRjaFRleHQoKSBpbiBsaWtlLmMganVzdCBwYXNzIHRocm91Z2ggdGhlCmxvY2FsZSBp bmZvcm1hdGlvbiB0byBNYXRjaFRleHQoKSwgd2hpY2ggd2FzIHByZXZpb3VzbHkgbm90IG5l ZWRlZC4KVGhpcyBtYXRjaGVzIGV4YWN0bHkgR2VuZXJpY19UZXh0X0lDX2xpa2UoKSBiZWxv dy4KCklMSUtFIGlzIG5vdCBhZmZlY3RlZC4gIChJdCdzIHVuY2xlYXIgd2hldGhlciBJTElL RSBtYWtlcyBzZW5zZSB1bmRlcgpub25kZXRlcm1pbmlzdGljIGNvbGxhdGlvbnMuKQoKVGhp cyBhbHNvIHVwZGF0ZXMgbWF0Y2hfcGF0dGVybl9wcmVmaXgoKSBpbiBsaWtlX3N1cHBvcnQu YyB0byBzdXBwb3J0Cm9wdGltaXppbmcgdGhlIGNhc2Ugb2YgYW4gZXhhY3QgcGF0dGVybiB3 aXRoIG5vbmRldGVybWluaXN0aWMKY29sbGF0aW9ucy4gIFRoaXMgd2FzIGFscmVhZHkgYWxs dWRlZCB0byBpbiB0aGUgcHJldmlvdXMgY29kZS4KCihpbmNsdWRlcyBkb2N1bWVudGF0aW9u IGV4YW1wbGVzIGZyb20gRGFuaWVsIFbDqXJpdMOpIGFuZCB0ZXN0IGNhc2VzCmZyb20gUGF1 bCBBIEp1bmd3aXJ0aCkKCkRpc2N1c3Npb246IGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3Jn L21lc3NhZ2UtaWQvZmxhdC83MDBkMmU4Ni1iZjc1LTQ2MDctOWNmMi1mNWI3ODAyZjZlODhA ZWlzZW50cmF1dC5vcmcKLS0tCiBkb2Mvc3JjL3NnbWwvY2hhcnNldC5zZ21sICAgICAgICAg ICAgICAgICAgICAgfCAgIDIgKy0KIGRvYy9zcmMvc2dtbC9mdW5jLnNnbWwgICAgICAgICAg ICAgICAgICAgICAgICB8ICA1MSArKysrLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2xpa2Uu YyAgICAgICAgICAgICAgICAgIHwgIDI2ICsrLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2xp a2VfbWF0Y2guYyAgICAgICAgICAgIHwgMTMwICsrKysrKysrKysrLQogc3JjL2JhY2tlbmQv dXRpbHMvYWR0L2xpa2Vfc3VwcG9ydC5jICAgICAgICAgIHwgIDI5ICsrLQogLi4uL3JlZ3Jl c3MvZXhwZWN0ZWQvY29sbGF0ZS5pY3UudXRmOC5vdXQgICAgIHwgMTg5ICsrKysrKysrKysr KysrKysrLQogc3JjL3Rlc3QvcmVncmVzcy9zcWwvY29sbGF0ZS5pY3UudXRmOC5zcWwgICAg IHwgIDU1ICsrKystCiA3IGZpbGVzIGNoYW5nZWQsIDQzOCBpbnNlcnRpb25zKCspLCA0NCBk ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvY2hhcnNldC5zZ21sIGIv ZG9jL3NyYy9zZ21sL2NoYXJzZXQuc2dtbAppbmRleCBmNWUxMTVlOGQ2ZS4uMDBlMTk4Njg0 OWEgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9jaGFyc2V0LnNnbWwKKysrIGIvZG9jL3Ny Yy9zZ21sL2NoYXJzZXQuc2dtbApAQCAtMTE5Nyw3ICsxMTk3LDcgQEAgPHRpdGxlPk5vbmRl dGVybWluaXN0aWMgQ29sbGF0aW9uczwvdGl0bGU+CiAgICAgIHRvIGEgcGVyZm9ybWFuY2Ug cGVuYWx0eS4gIE5vdGUsIGluIHBhcnRpY3VsYXIsIHRoYXQgQi10cmVlIGNhbm5vdCB1c2UK ICAgICAgZGVkdXBsaWNhdGlvbiB3aXRoIGluZGV4ZXMgdGhhdCB1c2UgYSBub25kZXRlcm1p bmlzdGljIGNvbGxhdGlvbi4gIEFsc28sCiAgICAgIGNlcnRhaW4gb3BlcmF0aW9ucyBhcmUg bm90IHBvc3NpYmxlIHdpdGggbm9uZGV0ZXJtaW5pc3RpYyBjb2xsYXRpb25zLAotICAgICBz dWNoIGFzIHBhdHRlcm4gbWF0Y2hpbmcgb3BlcmF0aW9ucy4gIFRoZXJlZm9yZSwgdGhleSBz aG91bGQgYmUgdXNlZAorICAgICBzdWNoIGFzIHNvbWUgcGF0dGVybiBtYXRjaGluZyBvcGVy YXRpb25zLiAgVGhlcmVmb3JlLCB0aGV5IHNob3VsZCBiZSB1c2VkCiAgICAgIG9ubHkgaW4g Y2FzZXMgd2hlcmUgdGhleSBhcmUgc3BlY2lmaWNhbGx5IHdhbnRlZC4KICAgICA8L3BhcmE+ CiAKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9mdW5jLnNnbWwgYi9kb2Mvc3JjL3NnbWwv ZnVuYy5zZ21sCmluZGV4IDczOTc5ZjIwZmZmLi40ZmMyOTM3OWRlNCAxMDA2NDQKLS0tIGEv ZG9jL3NyYy9zZ21sL2Z1bmMuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvZnVuYy5zZ21sCkBA IC01NDE0LDkgKzU0MTQsMTAgQEAgPHRpdGxlPlBhdHRlcm4gTWF0Y2hpbmc8L3RpdGxlPgog ICAgPC9jYXV0aW9uPgogCiAgICA8cGFyYT4KLSAgICBUaGUgcGF0dGVybiBtYXRjaGluZyBv cGVyYXRvcnMgb2YgYWxsIHRocmVlIGtpbmRzIGRvIG5vdCBzdXBwb3J0Ci0gICAgbm9uZGV0 ZXJtaW5pc3RpYyBjb2xsYXRpb25zLiAgSWYgcmVxdWlyZWQsIGFwcGx5IGEgZGlmZmVyZW50 IGNvbGxhdGlvbiB0bwotICAgIHRoZSBleHByZXNzaW9uIHRvIHdvcmsgYXJvdW5kIHRoaXMg bGltaXRhdGlvbi4KKyAgICA8ZnVuY3Rpb24+U0lNSUxBUiBUTzwvZnVuY3Rpb24+IGFuZCA8 YWNyb255bT5QT1NJWDwvYWNyb255bT4tc3R5bGUgcmVndWxhcgorICAgIGV4cHJlc3Npb25z IGRvIG5vdCBzdXBwb3J0IG5vbmRldGVybWluaXN0aWMgY29sbGF0aW9ucy4gIElmIHJlcXVp cmVkLCB1c2UKKyAgICA8ZnVuY3Rpb24+TElLRTwvZnVuY3Rpb24+IG9yIGFwcGx5IGEgZGlm ZmVyZW50IGNvbGxhdGlvbiB0byB0aGUgZXhwcmVzc2lvbgorICAgIHRvIHdvcmsgYXJvdW5k IHRoaXMgbGltaXRhdGlvbi4KICAgIDwvcGFyYT4KIAogICA8c2VjdDIgaWQ9ImZ1bmN0aW9u cy1saWtlIj4KQEAgLTU0NjIsNiArNTQ2Myw0NSBAQCA8dGl0bGU+PGZ1bmN0aW9uPkxJS0U8 L2Z1bmN0aW9uPjwvdGl0bGU+CiA8L3Byb2dyYW1saXN0aW5nPgogICAgPC9wYXJhPgogCisg ICA8cGFyYT4KKyAgICA8ZnVuY3Rpb24+TElLRTwvZnVuY3Rpb24+IHBhdHRlcm4gbWF0Y2hp bmcgc3VwcG9ydHMgbm9uZGV0ZXJtaW5pc3RpYworICAgIGNvbGxhdGlvbnMgKHNlZSA8eHJl ZiBsaW5rZW5kPSJjb2xsYXRpb24tbm9uZGV0ZXJtaW5pc3RpYyIvPiksIHN1Y2ggYXMKKyAg ICBjYXNlLWluc2Vuc2l0aXZlIGNvbGxhdGlvbnMgb3IgY29sbGF0aW9ucyB0aGF0LCBzYXks IGlnbm9yZSBwdW5jdHVhdGlvbi4KKyAgICBTbyB3aXRoIGEgY2FzZS1pbnNlbnNpdGl2ZSBj b2xsYXRpb24sIG9uZSBjb3VsZCBoYXZlOgorPHByb2dyYW1saXN0aW5nPgorJ0FiQycgTElL RSAnYWJjJyBDT0xMQVRFIGNhc2VfaW5zZW5zaXRpdmUgICAgPGxpbmVhbm5vdGF0aW9uPnRy dWU8L2xpbmVhbm5vdGF0aW9uPgorJ0FiQycgTElLRSAnYSUnIENPTExBVEUgY2FzZV9pbnNl bnNpdGl2ZSAgICAgPGxpbmVhbm5vdGF0aW9uPnRydWU8L2xpbmVhbm5vdGF0aW9uPgorPC9w cm9ncmFtbGlzdGluZz4KKyAgICBXaXRoIGNvbGxhdGlvbnMgdGhhdCBpZ25vcmUgY2VydGFp biBjaGFyYWN0ZXJzIG9yIGluIGdlbmVyYWwgdGhhdCBjb25zaWRlcgorICAgIHN0cmluZ3Mg b2YgZGlmZmVyZW50IGxlbmd0aHMgZXF1YWwsIHRoZSBzZW1hbnRpY3MgY2FuIGJlY29tZSBh IGJpdCBtb3JlCisgICAgY29tcGxpY2F0ZWQuICBDb25zaWRlciB0aGVzZSBleGFtcGxlczoK Kzxwcm9ncmFtbGlzdGluZz4KKycuZm9vLicgTElLRSAnZm9vJyBDT0xMQVRFIGlnbl9wdW5j dCAgICA8bGluZWFubm90YXRpb24+dHJ1ZTwvbGluZWFubm90YXRpb24+CisnLmZvby4nIExJ S0UgJ2ZfbycgQ09MTEFURSBpZ25fcHVuY3QgICAgPGxpbmVhbm5vdGF0aW9uPnRydWU8L2xp bmVhbm5vdGF0aW9uPgorJy5mb28uJyBMSUtFICdfb28nIENPTExBVEUgaWduX3B1bmN0ICAg IDxsaW5lYW5ub3RhdGlvbj5mYWxzZTwvbGluZWFubm90YXRpb24+Cis8L3Byb2dyYW1saXN0 aW5nPgorICAgIFRoZSB3YXkgdGhlIG1hdGNoaW5nIHdvcmtzIGlzIHRoYXQgdGhlIHBhdHRl cm4gaXMgcGFydGl0aW9uZWQgaW50bworICAgIHNlcXVlbmNlcyBvZiB3aWxkY2FyZHMgYW5k IG5vbi13aWxkY2FyZCBzdHJpbmdzLiAgRm9yIGV4YW1wbGUsIHRoZSBwYXR0ZXJuCisgICAg PGxpdGVyYWw+Zl9vPC9saXRlcmFsPiBpcyBwYXJ0aXRpb25lZCBpbnRvIDxsaXRlcmFsPmYs IF8sIG88L2xpdGVyYWw+LCB0aGUKKyAgICBwYXR0ZXJuIDxsaXRlcmFsPl9vbzwvbGl0ZXJh bD4gaXMgcGFydGl0aW9uZWQgaW50byA8bGl0ZXJhbD5fLAorICAgIG9vPC9saXRlcmFsPi4g IFRoZSBpbnB1dCBzdHJpbmcgbWF0Y2hlcyB0aGUgcGF0dGVybiBpZiBpdCBjYW4gYmUKKyAg ICBwYXJ0aXRpb25lZCBpbiBzdWNoIGEgd2F5IHRoYXQgdGhlIHdpbGRjYXJkcyBtYXRjaCBv bmUgY2hhcmFjdGVyIG9yIGFueQorICAgIG51bWJlciBvZiBjaGFyYWN0ZXJzIHJlc3BlY3Rp dmVseSBhbmQgdGhlIG5vbi13aWxkY2FyZCBwYXJ0aXRpb25zIGFyZQorICAgIGVxdWFsIHVu ZGVyIHRoZSBhcHBsaWNhYmxlIGNvbGxhdGlvbi4gIFNvIGZvciBleGFtcGxlLCA8bGl0ZXJh bD4nLmZvby4nCisgICAgTElLRSAnZl9vJyBDT0xMQVRFIGlnbl9wdW5jdDwvbGl0ZXJhbD4g aXMgdHJ1ZSBiZWNhdXNlIG9uZSBjYW4gcGFydGl0aW9uCisgICAgPGxpdGVyYWw+LmZvby48 L2xpdGVyYWw+IGludG8gPGxpdGVyYWw+LmYsIG8sIG8uPC9saXRlcmFsPiwgYW5kIHRoZW4K KyAgICA8bGl0ZXJhbD4nLmYnID0gJ2YnIENPTExBVEUgaWduX3B1bmN0PC9saXRlcmFsPiwg PGxpdGVyYWw+J28nPC9saXRlcmFsPgorICAgIG1hdGNoZXMgdGhlIDxsaXRlcmFsPl88L2xp dGVyYWw+IHdpbGRjYXJkLCBhbmQgPGxpdGVyYWw+J28uJyA9ICdvJyBDT0xMQVRFCisgICAg aWduX3B1bmN0PC9saXRlcmFsPi4gIEJ1dCA8bGl0ZXJhbD4nLmZvby4nIExJS0UgJ19vbycg Q09MTEFURQorICAgIGlnbl9wdW5jdDwvbGl0ZXJhbD4gaXMgZmFsc2UgYmVjYXVzZSA8bGl0 ZXJhbD4uZm9vLjwvbGl0ZXJhbD4gY2Fubm90IGJlCisgICAgcGFydGl0aW9uZWQgaW4gYSB3 YXkgdGhhdCB0aGUgZmlyc3QgY2hhcmFjdGVyIGlzIGFueSBjaGFyYWN0ZXIgYW5kIHRoZQor ICAgIHJlc3Qgb2YgdGhlIHN0cmluZyBjb21wYXJlcyBlcXVhbCB0byA8bGl0ZXJhbD5vbzwv bGl0ZXJhbD4uICAoTm90ZSB0aGF0CisgICAgdGhlIHNpbmdsZS1jaGFyYWN0ZXIgd2lsZGNh cmQgYWx3YXlzIG1hdGNoZXMgZXhhY3RseSBvbmUgY2hhcmFjdGVyLAorICAgIGluZGVwZW5k ZW50IG9mIHRoZSBjb2xsYXRpb24uICBTbyBpbiB0aGlzIGV4YW1wbGUsIHRoZQorICAgIDxs aXRlcmFsPl88L2xpdGVyYWw+IHdvdWxkIG1hdGNoIDxsaXRlcmFsPi48L2xpdGVyYWw+LCBi dXQgdGhlbiB0aGUgcmVzdAorICAgIG9mIHRoZSBpbnB1dCBzdHJpbmcgd29uJ3QgbWF0Y2gg dGhlIHJlc3Qgb2YgdGhlIHBhdHRlcm4uKQorICAgPC9wYXJhPgorCiAgICA8cGFyYT4KICAg ICA8ZnVuY3Rpb24+TElLRTwvZnVuY3Rpb24+IHBhdHRlcm4gbWF0Y2hpbmcgYWx3YXlzIGNv dmVycyB0aGUgZW50aXJlCiAgICAgc3RyaW5nLiAgVGhlcmVmb3JlLCBpZiBpdCdzIGRlc2ly ZWQgdG8gbWF0Y2ggYSBzZXF1ZW5jZSBhbnl3aGVyZSB3aXRoaW4KQEAgLTU1MDMsOCArNTU0 Myw5IEBAIDx0aXRsZT48ZnVuY3Rpb24+TElLRTwvZnVuY3Rpb24+PC90aXRsZT4KIAogICAg PHBhcmE+CiAgICAgVGhlIGtleSB3b3JkIDx0b2tlbj5JTElLRTwvdG9rZW4+IGNhbiBiZSB1 c2VkIGluc3RlYWQgb2YKLSAgICA8dG9rZW4+TElLRTwvdG9rZW4+IHRvIG1ha2UgdGhlIG1h dGNoIGNhc2UtaW5zZW5zaXRpdmUgYWNjb3JkaW5nCi0gICAgdG8gdGhlIGFjdGl2ZSBsb2Nh bGUuICBUaGlzIGlzIG5vdCBpbiB0aGUgPGFjcm9ueW0+U1FMPC9hY3JvbnltPiBzdGFuZGFy ZCBidXQgaXMgYQorICAgIDx0b2tlbj5MSUtFPC90b2tlbj4gdG8gbWFrZSB0aGUgbWF0Y2gg Y2FzZS1pbnNlbnNpdGl2ZSBhY2NvcmRpbmcgdG8gdGhlCisgICAgYWN0aXZlIGxvY2FsZS4g IChCdXQgdGhpcyBkb2VzIG5vdCBzdXBwb3J0IG5vbmRldGVybWluaXN0aWMgY29sbGF0aW9u cy4pCisgICAgVGhpcyBpcyBub3QgaW4gdGhlIDxhY3JvbnltPlNRTDwvYWNyb255bT4gc3Rh bmRhcmQgYnV0IGlzIGEKICAgICA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5h bWU+IGV4dGVuc2lvbi4KICAgIDwvcGFyYT4KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv dXRpbHMvYWR0L2xpa2UuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9saWtlLmMKaW5kZXgg MDE1MjcyM2IyYTYuLjdiM2QxYjViZTcxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGls cy9hZHQvbGlrZS5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9saWtlLmMKQEAgLTE0 NywyMiArMTQ3LDI4IEBAIFNCX2xvd2VyX2NoYXIodW5zaWduZWQgY2hhciBjLCBwZ19sb2Nh bGVfdCBsb2NhbGUpCiBzdGF0aWMgaW5saW5lIGludAogR2VuZXJpY01hdGNoVGV4dChjb25z dCBjaGFyICpzLCBpbnQgc2xlbiwgY29uc3QgY2hhciAqcCwgaW50IHBsZW4sIE9pZCBjb2xs YXRpb24pCiB7Ci0JaWYgKGNvbGxhdGlvbikKLQl7Ci0JCXBnX2xvY2FsZV90IGxvY2FsZSA9 IHBnX25ld2xvY2FsZV9mcm9tX2NvbGxhdGlvbihjb2xsYXRpb24pOworCXBnX2xvY2FsZV90 IGxvY2FsZTsKIAotCQlpZiAoIWxvY2FsZS0+ZGV0ZXJtaW5pc3RpYykKLQkJCWVyZXBvcnQo RVJST1IsCi0JCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwK LQkJCQkJIGVycm1zZygibm9uZGV0ZXJtaW5pc3RpYyBjb2xsYXRpb25zIGFyZSBub3Qgc3Vw cG9ydGVkIGZvciBMSUtFIikpKTsKKwlpZiAoIU9pZElzVmFsaWQoY29sbGF0aW9uKSkKKwl7 CisJCS8qCisJCSAqIFRoaXMgdHlwaWNhbGx5IG1lYW5zIHRoYXQgdGhlIHBhcnNlciBjb3Vs ZCBub3QgcmVzb2x2ZSBhIGNvbmZsaWN0CisJCSAqIG9mIGltcGxpY2l0IGNvbGxhdGlvbnMs IHNvIHJlcG9ydCBpdCB0aGF0IHdheS4KKwkJICovCisJCWVyZXBvcnQoRVJST1IsCisJCQkJ KGVycmNvZGUoRVJSQ09ERV9JTkRFVEVSTUlOQVRFX0NPTExBVElPTiksCisJCQkJIGVycm1z ZygiY291bGQgbm90IGRldGVybWluZSB3aGljaCBjb2xsYXRpb24gdG8gdXNlIGZvciBMSUtF IiksCisJCQkJIGVycmhpbnQoIlVzZSB0aGUgQ09MTEFURSBjbGF1c2UgdG8gc2V0IHRoZSBj b2xsYXRpb24gZXhwbGljaXRseS4iKSkpOwogCX0KIAorCWxvY2FsZSA9IHBnX25ld2xvY2Fs ZV9mcm9tX2NvbGxhdGlvbihjb2xsYXRpb24pOworCiAJaWYgKHBnX2RhdGFiYXNlX2VuY29k aW5nX21heF9sZW5ndGgoKSA9PSAxKQotCQlyZXR1cm4gU0JfTWF0Y2hUZXh0KHMsIHNsZW4s IHAsIHBsZW4sIDApOworCQlyZXR1cm4gU0JfTWF0Y2hUZXh0KHMsIHNsZW4sIHAsIHBsZW4s IGxvY2FsZSk7CiAJZWxzZSBpZiAoR2V0RGF0YWJhc2VFbmNvZGluZygpID09IFBHX1VURjgp Ci0JCXJldHVybiBVVEY4X01hdGNoVGV4dChzLCBzbGVuLCBwLCBwbGVuLCAwKTsKKwkJcmV0 dXJuIFVURjhfTWF0Y2hUZXh0KHMsIHNsZW4sIHAsIHBsZW4sIGxvY2FsZSk7CiAJZWxzZQot CQlyZXR1cm4gTUJfTWF0Y2hUZXh0KHMsIHNsZW4sIHAsIHBsZW4sIDApOworCQlyZXR1cm4g TUJfTWF0Y2hUZXh0KHMsIHNsZW4sIHAsIHBsZW4sIGxvY2FsZSk7CiB9CiAKIHN0YXRpYyBp bmxpbmUgaW50CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvbGlrZV9tYXRj aC5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2xpa2VfbWF0Y2guYwppbmRleCBmNTYxY2Mx NWU0Yy4uZjNjYTRkMzA4MjMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9s aWtlX21hdGNoLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2xpa2VfbWF0Y2guYwpA QCAtMTU3LDcgKzE1Nyw5IEBAIE1hdGNoVGV4dChjb25zdCBjaGFyICp0LCBpbnQgdGxlbiwg Y29uc3QgY2hhciAqcCwgaW50IHBsZW4sIHBnX2xvY2FsZV90IGxvY2FsZSkKIAkJCSAqIHRo ZSBmaXJzdCBwYXR0ZXJuIGJ5dGUgdG8gZWFjaCB0ZXh0IGJ5dGUgdG8gYXZvaWQgcmVjdXJz aW5nCiAJCQkgKiBtb3JlIHRoYW4gd2UgaGF2ZSB0by4gIFRoaXMgZmFjdCBhbHNvIGd1YXJh bnRlZXMgdGhhdCB3ZSBkb24ndAogCQkJICogaGF2ZSB0byBjb25zaWRlciBhIG1hdGNoIHRv IHRoZSB6ZXJvLWxlbmd0aCBzdWJzdHJpbmcgYXQgdGhlCi0JCQkgKiBlbmQgb2YgdGhlIHRl eHQuCisJCQkgKiBlbmQgb2YgdGhlIHRleHQuICBXaXRoIGEgbm9uZGV0ZXJtaW5pc3RpYyBj b2xsYXRpb24sIHdlIGNhbid0CisJCQkgKiByZWx5IG9uIHRoZSBmaXJzdCBieXRlcyBiZWlu ZyBlcXVhbCwgc28gd2UgaGF2ZSB0byByZWN1cnNlIGluCisJCQkgKiBhbnkgY2FzZS4KIAkJ CSAqLwogCQkJaWYgKCpwID09ICdcXCcpCiAJCQl7CkBAIC0xNzIsNyArMTc0LDcgQEAgTWF0 Y2hUZXh0KGNvbnN0IGNoYXIgKnQsIGludCB0bGVuLCBjb25zdCBjaGFyICpwLCBpbnQgcGxl biwgcGdfbG9jYWxlX3QgbG9jYWxlKQogCiAJCQl3aGlsZSAodGxlbiA+IDApCiAJCQl7Ci0J CQkJaWYgKEdFVENIQVIoKnQsIGxvY2FsZSkgPT0gZmlyc3RwYXQpCisJCQkJaWYgKEdFVENI QVIoKnQsIGxvY2FsZSkgPT0gZmlyc3RwYXQgfHwgKGxvY2FsZSAmJiAhbG9jYWxlLT5kZXRl cm1pbmlzdGljKSkKIAkJCQl7CiAJCQkJCWludAkJCW1hdGNoZWQgPSBNYXRjaFRleHQodCwg dGxlbiwgcCwgcGxlbiwgbG9jYWxlKTsKIApAQCAtMTk2LDYgKzE5OCwxMzAgQEAgTWF0Y2hU ZXh0KGNvbnN0IGNoYXIgKnQsIGludCB0bGVuLCBjb25zdCBjaGFyICpwLCBpbnQgcGxlbiwg cGdfbG9jYWxlX3QgbG9jYWxlKQogCQkJTmV4dEJ5dGUocCwgcGxlbik7CiAJCQljb250aW51 ZTsKIAkJfQorCQllbHNlIGlmIChsb2NhbGUgJiYgIWxvY2FsZS0+ZGV0ZXJtaW5pc3RpYykK KwkJeworCQkJLyoKKwkJCSAqIEZvciBub25kZXRlcm1pbmlzdGljIGxvY2FsZXMsIHdlIGZp bmQgdGhlIG5leHQgc3Vic3RyaW5nIG9mIHRoZQorCQkJICogcGF0dGVybiB0aGF0IGRvZXMg bm90IGNvbnRhaW4gd2lsZGNhcmRzIGFuZCB0cnkgdG8gZmluZCBhCisJCQkgKiBtYXRjaGlu ZyBzdWJzdHJpbmcgaW4gdGhlIHRleHQuICBDcnVjaWFsbHksIHdlIGNhbm5vdCBkbyB0aGlz CisJCQkgKiBjaGFyYWN0ZXIgYnkgY2hhcmFjdGVyLCBhcyBpbiB0aGUgbm9ybWFsIGNhc2Us IGJ1dCBtdXN0IGRvIGl0CisJCQkgKiBzdWJzdHJpbmcgYnkgc3Vic3RyaW5nLCBwYXJ0aXRp b25lZCBieSB0aGUgd2lsZGNhcmQgY2hhcmFjdGVycy4KKwkJCSAqLworCQkJY29uc3QgY2hh ciAqcDE7CisJCQlzaXplX3QJCXAxbGVuOworCQkJY29uc3QgY2hhciAqdDE7CisJCQlzaXpl X3QJCXQxbGVuOworCQkJYm9vbAkJZm91bmRfZXNjYXBlOworCQkJY29uc3QgY2hhciAqc3Vi cGF0OworCQkJc2l6ZV90CQlzdWJwYXRsZW47CisJCQljaGFyCSAgICpidWYgPSBOVUxMOwor CisJCQkvKgorCQkJICogRGV0ZXJtaW5lIG5leHQgc3Vic3RyaW5nIG9mIHBhdHRlcm4gd2l0 aG91dCB3aWxkY2FyZHMuICBwIGlzCisJCQkgKiB0aGUgc3RhcnQgb2YgdGhlIHN1YnBhdHRl cm4sIHAxIGlzIG9uZSBwYXN0IHRoZSBsYXN0IGJ5dGUuIEFsc28KKwkJCSAqIHRyYWNrIGlm IHdlIGZvdW5kIGFuIGVzY2FwZSBjaGFyYWN0ZXIuCisJCQkgKi8KKwkJCXAxID0gcDsKKwkJ CXAxbGVuID0gcGxlbjsKKwkJCWZvdW5kX2VzY2FwZSA9IGZhbHNlOworCQkJd2hpbGUgKHAx bGVuID4gMCkKKwkJCXsKKwkJCQlpZiAoKnAxID09ICdcXCcpCisJCQkJeworCQkJCQlmb3Vu ZF9lc2NhcGUgPSB0cnVlOworCQkJCQlOZXh0Qnl0ZShwMSwgcDFsZW4pOworCQkJCQlpZiAo cDFsZW4gPT0gMCkKKwkJCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkJCShlcnJjb2RlKEVS UkNPREVfSU5WQUxJRF9FU0NBUEVfU0VRVUVOQ0UpLAorCQkJCQkJCQkgZXJybXNnKCJMSUtF IHBhdHRlcm4gbXVzdCBub3QgZW5kIHdpdGggZXNjYXBlIGNoYXJhY3RlciIpKSk7CisJCQkJ fQorCQkJCWVsc2UgaWYgKCpwMSA9PSAnXycgfHwgKnAxID09ICclJykKKwkJCQkJYnJlYWs7 CisJCQkJTmV4dEJ5dGUocDEsIHAxbGVuKTsKKwkJCX0KKworCQkJLyoKKwkJCSAqIElmIHdl IGZvdW5kIGFuIGVzY2FwZSBjaGFyYWN0ZXIsIHRoZW4gbWFrZSBhbiB1bmVzY2FwZWQgY29w eSBvZgorCQkJICogdGhlIHN1YnBhdHRlcm4uCisJCQkgKi8KKwkJCWlmIChmb3VuZF9lc2Nh cGUpCisJCQl7CisJCQkJY2hhcgkgICAqYjsKKworCQkJCWIgPSBidWYgPSBwYWxsb2MocDEg LSBwKTsKKwkJCQlmb3IgKGNvbnN0IGNoYXIgKmMgPSBwOyBjIDwgcDE7IGMrKykKKwkJCQl7 CisJCQkJCWlmICgqYyA9PSAnXFwnKQorCQkJCQkJOworCQkJCQllbHNlCisJCQkJCQkqKGIr KykgPSAqYzsKKwkJCQl9CisKKwkJCQlzdWJwYXQgPSBidWY7CisJCQkJc3VicGF0bGVuID0g YiAtIGJ1ZjsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlzdWJwYXQgPSBwOworCQkJCXN1 YnBhdGxlbiA9IHAxIC0gcDsKKwkJCX0KKworCQkJLyoKKwkJCSAqIE5vdyBidWlsZCBhIHN1 YnN0cmluZyBvZiB0aGUgdGV4dCBhbmQgdHJ5IHRvIG1hdGNoIGl0IGFnYWluc3QKKwkJCSAq IHRoZSBzdWJwYXR0ZXJuLiAgdCBpcyB0aGUgc3RhcnQgb2YgdGhlIHRleHQsIHQxIGlzIG9u ZSBwYXN0IHRoZQorCQkJICogbGFzdCBieXRlLiAgV2Ugc3RhcnQgd2l0aCBhIHplcm8tbGVu Z3RoIHN0cmluZy4KKwkJCSAqLworCQkJdDEgPSB0OworCQkJdDFsZW4gPSB0bGVuOworCQkJ Zm9yICg7OykKKwkJCXsKKwkJCQlpbnQJCQljbXA7CisKKwkJCQlDSEVDS19GT1JfSU5URVJS VVBUUygpOworCisJCQkJY21wID0gcGdfc3RybmNvbGwoc3VicGF0LCBzdWJwYXRsZW4sIHQs ICh0MSAtIHQpLCBsb2NhbGUpOworCisJCQkJLyoKKwkJCQkgKiBJZiB3ZSBmb3VuZCBhIG1h dGNoLCB3ZSBoYXZlIHRvIHRlc3QgaWYgdGhlIHJlc3Qgb2YgcGF0dGVybgorCQkJCSAqIGNh biBtYXRjaCBhZ2FpbnN0IHRoZSByZXN0IG9mIHRoZSBzdHJpbmcuICBPdGhlcndpc2Ugd2UK KwkJCQkgKiBoYXZlIHRvIGNvbnRpbnVlIGhlcmUgdHJ5IG1hdGNoaW5nIHdpdGggYSBsb25n ZXIgc3Vic3RyaW5nLgorCQkJCSAqIChUaGlzIGlzIHNpbWlsYXIgdG8gdGhlIHJlY3Vyc2lv biBmb3IgdGhlICclJyB3aWxkY2FyZAorCQkJCSAqIGFib3ZlLikKKwkJCQkgKgorCQkJCSAq IE5vdGUgdGhhdCB3ZSBjYW4ndCBqdXN0IHdpbmQgZm9yd2FyZCBwIGFuZCB0IGFuZCBjb250 aW51ZQorCQkJCSAqIHdpdGggdGhlIG1haW4gbG9vcC4gIFRoaXMgd291bGQgZmFpbCBmb3Ig ZXhhbXBsZSB3aXRoCisJCQkJICoKKwkJCQkgKiBVJidcMDA2MVwwMzA4YmMnIExJS0UgVSYn XDAwRTRfYycgQ09MTEFURSBpZ25vcmVfYWNjZW50cworCQkJCSAqCisJCQkJICogWW91J2Qg ZmluZCB0aGF0IHQ9XDAwNjEgbWF0Y2hlcyBwPVwwMEU0LCBidXQgdGhlbiB0aGUgcmVzdAor CQkJCSAqIHdvbid0IG1hdGNoOyBidXQgdD1cMDA2MVwwMzA4IGFsc28gbWF0Y2hlcyBwPVww MEU0LCBhbmQKKwkJCQkgKiB0aGVuIHRoZSByZXN0IHdpbGwgbWF0Y2guCisJCQkJICovCisJ CQkJaWYgKGNtcCA9PSAwKQorCQkJCXsKKwkJCQkJaW50CQkJbWF0Y2hlZCA9IE1hdGNoVGV4 dCh0MSwgdDFsZW4sIHAxLCBwMWxlbiwgbG9jYWxlKTsKKworCQkJCQlpZiAobWF0Y2hlZCA9 PSBMSUtFX1RSVUUpCisJCQkJCXsKKwkJCQkJCWlmIChidWYpCisJCQkJCQkJcGZyZWUoYnVm KTsKKwkJCQkJCXJldHVybiBtYXRjaGVkOworCQkJCQl9CisJCQkJfQorCisJCQkJLyoKKwkJ CQkgKiBEaWRuJ3QgbWF0Y2guICBJZiB3ZSB1c2VkIHVwIHRoZSB3aG9sZSB0ZXh0LCB0aGVu IHRoZSBtYXRjaAorCQkJCSAqIGZhaWxzLiAgT3RoZXJ3aXNlLCB0cnkgYWdhaW4gd2l0aCBh IGxvbmdlciBzdWJzdHJpbmcuCisJCQkJICovCisJCQkJaWYgKHQxbGVuID09IDApCisJCQkJ CXJldHVybiBMSUtFX0ZBTFNFOworCQkJCWVsc2UKKwkJCQkJTmV4dENoYXIodDEsIHQxbGVu KTsKKwkJCX0KKwkJCWlmIChidWYpCisJCQkJcGZyZWUoYnVmKTsKKwkJCWNvbnRpbnVlOwor CQl9CiAJCWVsc2UgaWYgKEdFVENIQVIoKnAsIGxvY2FsZSkgIT0gR0VUQ0hBUigqdCwgbG9j YWxlKSkKIAkJewogCQkJLyogbm9uLXdpbGRjYXJkIHBhdHRlcm4gY2hhciBmYWlscyB0byBt YXRjaCB0ZXh0IGNoYXIgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9s aWtlX3N1cHBvcnQuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9saWtlX3N1cHBvcnQuYwpp bmRleCA4YjE1NTA5YTNiZi4uZWU3MWNhODlmZmQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3V0aWxzL2FkdC9saWtlX3N1cHBvcnQuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQv bGlrZV9zdXBwb3J0LmMKQEAgLTI3MiwyMiArMjcyLDYgQEAgbWF0Y2hfcGF0dGVybl9wcmVm aXgoTm9kZSAqbGVmdG9wLAogCQlyZXR1cm4gTklMOwogCXBhdHQgPSAoQ29uc3QgKikgcmln aHRvcDsKIAotCS8qCi0JICogTm90IHN1cHBvcnRlZCBpZiB0aGUgZXhwcmVzc2lvbiBjb2xs YXRpb24gaXMgbm9uZGV0ZXJtaW5pc3RpYy4gIFRoZQotCSAqIG9wdGltaXplZCBlcXVhbGl0 eSBvciBwcmVmaXggdGVzdHMgdXNlIGJ5dGV3aXNlIGNvbXBhcmlzb25zLCB3aGljaCBpcwot CSAqIG5vdCBjb25zaXN0ZW50IHdpdGggbm9uZGV0ZXJtaW5pc3RpYyBjb2xsYXRpb25zLiAg VGhlIGFjdHVhbAotCSAqIHBhdHRlcm4tbWF0Y2hpbmcgaW1wbGVtZW50YXRpb24gZnVuY3Rp b25zIHdpbGwgbGF0ZXIgZXJyb3Igb3V0IHRoYXQKLQkgKiBwYXR0ZXJuLW1hdGNoaW5nIGlz IG5vdCBzdXBwb3J0ZWQgd2l0aCBub25kZXRlcm1pbmlzdGljIGNvbGxhdGlvbnMuIChXZQot CSAqIGNvdWxkIGFsc28gZXJyb3Igb3V0IGhlcmUsIGJ1dCBieSBkb2luZyBpdCBsYXRlciB3 ZSBnZXQgbW9yZSBwcmVjaXNlCi0JICogZXJyb3IgbWVzc2FnZXMuKSAgKEl0IHNob3VsZCBi ZSBwb3NzaWJsZSB0byBzdXBwb3J0IGF0IGxlYXN0Ci0JICogUGF0dGVybl9QcmVmaXhfRXhh Y3QsIGJ1dCBubyBwb2ludCBhcyBsb25nIGFzIHRoZSBhY3R1YWwKLQkgKiBwYXR0ZXJuLW1h dGNoaW5nIGltcGxlbWVudGF0aW9ucyBkb24ndCBzdXBwb3J0IGl0LikKLQkgKgotCSAqIGV4 cHJfY29sbCBpcyBub3Qgc2V0IGZvciBhIG5vbi1jb2xsYXRpb24tYXdhcmUgZGF0YSB0eXBl IHN1Y2ggYXMgYnl0ZWEuCi0JICovCi0JaWYgKGV4cHJfY29sbCAmJiAhZ2V0X2NvbGxhdGlv bl9pc2RldGVybWluaXN0aWMoZXhwcl9jb2xsKSkKLQkJcmV0dXJuIE5JTDsKLQogCS8qCiAJ ICogVHJ5IHRvIGV4dHJhY3QgYSBmaXhlZCBwcmVmaXggZnJvbSB0aGUgcGF0dGVybi4KIAkg Ki8KQEAgLTQwNCw2ICszODgsOCBAQCBtYXRjaF9wYXR0ZXJuX3ByZWZpeChOb2RlICpsZWZ0 b3AsCiAJewogCQlpZiAoIW9wX2luX29wZmFtaWx5KGVxb3ByLCBvcGZhbWlseSkpCiAJCQly ZXR1cm4gTklMOworCQlpZiAoaW5kZXhjb2xsYXRpb24gIT0gZXhwcl9jb2xsKQorCQkJcmV0 dXJuIE5JTDsKIAkJZXhwciA9IG1ha2Vfb3BjbGF1c2UoZXFvcHIsIEJPT0xPSUQsIGZhbHNl LAogCQkJCQkJCSAoRXhwciAqKSBsZWZ0b3AsIChFeHByICopIHByZWZpeCwKIAkJCQkJCQkg SW52YWxpZE9pZCwgaW5kZXhjb2xsYXRpb24pOwpAQCAtNDExLDYgKzM5NywxNyBAQCBtYXRj aF9wYXR0ZXJuX3ByZWZpeChOb2RlICpsZWZ0b3AsCiAJCXJldHVybiByZXN1bHQ7CiAJfQog CisJLyoKKwkgKiBBbnl0aGluZyBvdGhlciB0aGFuIFBhdHRlcm5fUHJlZml4X0V4YWN0IGlz IG5vdCBzdXBwb3J0ZWQgaWYgdGhlCisJICogZXhwcmVzc2lvbiBjb2xsYXRpb24gaXMgbm9u ZGV0ZXJtaW5pc3RpYy4gIFRoZSBvcHRpbWl6ZWQgZXF1YWxpdHkgb3IKKwkgKiBwcmVmaXgg dGVzdHMgdXNlIGJ5dGV3aXNlIGNvbXBhcmlzb25zLCB3aGljaCBpcyBub3QgY29uc2lzdGVu dCB3aXRoCisJICogbm9uZGV0ZXJtaW5pc3RpYyBjb2xsYXRpb25zLgorCSAqCisJICogZXhw cl9jb2xsIGlzIG5vdCBzZXQgZm9yIGEgbm9uLWNvbGxhdGlvbi1hd2FyZSBkYXRhIHR5cGUg c3VjaCBhcyBieXRlYS4KKwkgKi8KKwlpZiAoZXhwcl9jb2xsICYmICFnZXRfY29sbGF0aW9u X2lzZGV0ZXJtaW5pc3RpYyhleHByX2NvbGwpKQorCQlyZXR1cm4gTklMOworCiAJLyoKIAkg KiBPdGhlcndpc2UsIHdlIGhhdmUgYSBub25lbXB0eSByZXF1aXJlZCBwcmVmaXggb2YgdGhl IHZhbHVlcy4gIFNvbWUKIAkgKiBvcGNsYXNzZXMgc3VwcG9ydCBwcmVmaXggY2hlY2tzIGRp cmVjdGx5LCBvdGhlcndpc2Ugd2UnbGwgdHJ5IHRvCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL2NvbGxhdGUuaWN1LnV0Zjgub3V0IGIvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9jb2xsYXRlLmljdS51dGY4Lm91dAppbmRleCA2ZmEzMmFlMzY0OS4uMmU3 OTI4ZTFiMzUgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY29sbGF0 ZS5pY3UudXRmOC5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jb2xsYXRl LmljdS51dGY4Lm91dApAQCAtMTI3NCw2ICsxMjc0LDMwIEBAIENSRUFURSBDT0xMQVRJT04g Y3Rlc3RfZGV0IChwcm92aWRlciA9IGljdSwgbG9jYWxlID0gJycsIGRldGVybWluaXN0aWMg PSB0cnVlKTsKIE5PVElDRTogIHVzaW5nIHN0YW5kYXJkIGZvcm0gInVuZCIgZm9yIElDVSBs b2NhbGUgIiIKIENSRUFURSBDT0xMQVRJT04gY3Rlc3Rfbm9uZGV0IChwcm92aWRlciA9IGlj dSwgbG9jYWxlID0gJycsIGRldGVybWluaXN0aWMgPSBmYWxzZSk7CiBOT1RJQ0U6ICB1c2lu ZyBzdGFuZGFyZCBmb3JtICJ1bmQiIGZvciBJQ1UgbG9jYWxlICIiCitTRUxFQ1QgJ2FiYycg TElLRSAnYWJjJyBDT0xMQVRFIGN0ZXN0X2RldDsKKyA/Y29sdW1uPyAKKy0tLS0tLS0tLS0K KyB0CisoMSByb3cpCisKK1NFTEVDVCAnYWJjJyBMSUtFICdhXGJjJyBDT0xMQVRFIGN0ZXN0 X2RldDsKKyA/Y29sdW1uPyAKKy0tLS0tLS0tLS0KKyB0CisoMSByb3cpCisKK1NFTEVDVCAn YWJjJyBMSUtFICdhYmMnIENPTExBVEUgY3Rlc3Rfbm9uZGV0OworID9jb2x1bW4/IAorLS0t LS0tLS0tLQorIHQKKygxIHJvdykKKworU0VMRUNUICdhYmMnIExJS0UgJ2FcYmMnIENPTExB VEUgY3Rlc3Rfbm9uZGV0OworID9jb2x1bW4/IAorLS0tLS0tLS0tLQorIHQKKygxIHJvdykK KwogQ1JFQVRFIFRBQkxFIHRlc3Q2IChhIGludCwgYiB0ZXh0KTsKIC0tIHNhbWUgc3RyaW5n IGluIGRpZmZlcmVudCBub3JtYWwgZm9ybXMKIElOU0VSVCBJTlRPIHRlc3Q2IFZBTFVFUyAo MSwgVSYnXDAwRTRiYycpOwpAQCAtMTI5OCw2ICsxMzIyLDE5IEBAIFNFTEVDVCAqIEZST00g dGVzdDYgV0hFUkUgYiA9ICfDpGJjJyBDT0xMQVRFIGN0ZXN0X25vbmRldDsKICAyIHwgYcyI YmMKICgyIHJvd3MpCiAKK1NFTEVDVCAqIEZST00gdGVzdDYgV0hFUkUgYiBMSUtFICfDpGJj JyBDT0xMQVRFIGN0ZXN0X2RldDsKKyBhIHwgIGIgIAorLS0tKy0tLS0tCisgMSB8IMOkYmMK KygxIHJvdykKKworU0VMRUNUICogRlJPTSB0ZXN0NiBXSEVSRSBiIExJS0UgJ8OkYmMnIENP TExBVEUgY3Rlc3Rfbm9uZGV0OworIGEgfCAgYiAgCistLS0rLS0tLS0KKyAxIHwgw6RiYwor IDIgfCBhzIhiYworKDIgcm93cykKKwogLS0gc2FtZSB3aXRoIGFycmF5cwogQ1JFQVRFIFRB QkxFIHRlc3Q2YSAoYSBpbnQsIGIgdGV4dFtdKTsKIElOU0VSVCBJTlRPIHRlc3Q2YSBWQUxV RVMgKDEsIEFSUkFZW1UmJ1wwMEU0YmMnXSk7CkBAIC0xNTE0LDcgKzE1NTEsMTIgQEAgU0VM RUNUIHggRlJPTSB0ZXN0M2NpIFdIRVJFIHggPD4gJ2FiYyc7CiAoMiByb3dzKQogCiBTRUxF Q1QgeCBGUk9NIHRlc3QzY2kgV0hFUkUgeCBMSUtFICdhJSc7Ci1FUlJPUjogIG5vbmRldGVy bWluaXN0aWMgY29sbGF0aW9ucyBhcmUgbm90IHN1cHBvcnRlZCBmb3IgTElLRQorICB4ICAK Ky0tLS0tCisgYWJjCisgQUJDCisoMiByb3dzKQorCiBTRUxFQ1QgeCBGUk9NIHRlc3QzY2kg V0hFUkUgeCBJTElLRSAnYSUnOwogRVJST1I6ICBub25kZXRlcm1pbmlzdGljIGNvbGxhdGlv bnMgYXJlIG5vdCBzdXBwb3J0ZWQgZm9yIElMSUtFCiBTRUxFQ1QgeCBGUk9NIHRlc3QzY2kg V0hFUkUgeCBTSU1JTEFSIFRPICdhJSc7CkBAIC0xNjMyLDcgKzE2NzQsMTIgQEAgU0VMRUNU IHggRlJPTSB0ZXN0M2JwY2kgV0hFUkUgeCA8PiAnYWJjJzsKICgyIHJvd3MpCiAKIFNFTEVD VCB4IEZST00gdGVzdDNicGNpIFdIRVJFIHggTElLRSAnYSUnOwotRVJST1I6ICBub25kZXRl cm1pbmlzdGljIGNvbGxhdGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQgZm9yIExJS0UKKyAgeCAg CistLS0tLQorIGFiYworIEFCQworKDIgcm93cykKKwogU0VMRUNUIHggRlJPTSB0ZXN0M2Jw Y2kgV0hFUkUgeCBJTElLRSAnYSUnOwogRVJST1I6ICBub25kZXRlcm1pbmlzdGljIGNvbGxh dGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQgZm9yIElMSUtFCiBTRUxFQ1QgeCBGUk9NIHRlc3Qz YnBjaSBXSEVSRSB4IFNJTUlMQVIgVE8gJ2ElJzsKQEAgLTE3MjksNyArMTc3Niw3IEBAIFNF TEVDVCBzdHJpbmdfdG9fYXJyYXkoJ0FCQ0RFRkdISSc6OmNoYXIoOSkgQ09MTEFURSBjYXNl X2luc2Vuc2l0aXZlLCBOVUxMLCAnYicpCiAtLSBUaGlzIHRlc3RzIHRoZSBpc3N1ZSBkZXNj cmliZWQgaW4gbWF0Y2hfcGF0dGVybl9wcmVmaXgoKS4gIEluIHRoZQogLS0gYWJzZW5jZSBv ZiB0aGF0IGNoZWNrLCB0aGUgY2FzZV9pbnNlbnNpdGl2ZSB0ZXN0cyBiZWxvdyB3b3VsZAog LS0gcmV0dXJuIG5vIHJvd3Mgd2hlcmUgdGhleSBzaG91bGQgbG9naWNhbGx5IHJldHVybiBv bmUuCi1DUkVBVEUgVEFCTEUgdGVzdDRjICh4IHRleHQgQ09MTEFURSAiQyIpOworQ1JFQVRF IFRBQkxFIHRlc3Q0YyAoeCB0ZXh0IENPTExBVEUgY2FzZV9pbnNlbnNpdGl2ZSk7CiBJTlNF UlQgSU5UTyB0ZXN0NGMgVkFMVUVTICgnYWJjJyk7CiBDUkVBVEUgSU5ERVggT04gdGVzdDRj ICh4KTsKIFNFVCBlbmFibGVfc2Vxc2NhbiA9IG9mZjsKQEAgLTE3NDMsMTAgKzE3OTAsMTgg QEAgU0VMRUNUIHggRlJPTSB0ZXN0NGMgV0hFUkUgeCBMSUtFICdBQkMlJyBDT0xMQVRFIGNh c2Vfc2Vuc2l0aXZlOyAgLS0gb2ssIG5vIHJvd3MKIC0tLQogKDAgcm93cykKIAotU0VMRUNU IHggRlJPTSB0ZXN0NGMgV0hFUkUgeCBMSUtFICdBQkMnIENPTExBVEUgY2FzZV9pbnNlbnNp dGl2ZTsgIC0tIGVycm9yCi1FUlJPUjogIG5vbmRldGVybWluaXN0aWMgY29sbGF0aW9ucyBh cmUgbm90IHN1cHBvcnRlZCBmb3IgTElLRQotU0VMRUNUIHggRlJPTSB0ZXN0NGMgV0hFUkUg eCBMSUtFICdBQkMlJyBDT0xMQVRFIGNhc2VfaW5zZW5zaXRpdmU7ICAtLSBlcnJvcgotRVJS T1I6ICBub25kZXRlcm1pbmlzdGljIGNvbGxhdGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQgZm9y IExJS0UKK1NFTEVDVCB4IEZST00gdGVzdDRjIFdIRVJFIHggTElLRSAnQUJDJyBDT0xMQVRF IGNhc2VfaW5zZW5zaXRpdmU7ICAtLSBvaworICB4ICAKKy0tLS0tCisgYWJjCisoMSByb3cp CisKK1NFTEVDVCB4IEZST00gdGVzdDRjIFdIRVJFIHggTElLRSAnQUJDJScgQ09MTEFURSBj YXNlX2luc2Vuc2l0aXZlOyAgLS0gb2sKKyAgeCAgCistLS0tLQorIGFiYworKDEgcm93KQor CiBSRVNFVCBlbmFibGVfc2Vxc2NhbjsKIC0tIFVuaWNvZGUgc3BlY2lhbCBjYXNlOiBkaWZm ZXJlbnQgdmFyaWFudHMgb2YgR3JlZWsgbG93ZXIgY2FzZSBzaWdtYS4KIC0tIEEgbmFpdmUg aW1wbGVtZW50YXRpb24gbGlrZSBjaXRleHQgdGhhdCBqdXN0IGRvZXMgbG93ZXIoeCkgPQpA QCAtMTg0MCw2ICsxODk1LDEyNiBAQCBTRUxFQ1QgKiBGUk9NIHRlc3Q0IFdIRVJFIGIgPSAn Q290ZScgQ09MTEFURSBjYXNlX2luc2Vuc2l0aXZlOwogIDEgfCBjb3RlCiAoMSByb3cpCiAK Ky0tIFRoaXMgaXMgYSB0cmlja3kgb25lLiAgQSBuYWl2ZSBpbXBsZW1lbnRhdGlvbiB3b3Vs ZCBmaXJzdCB0ZXN0CistLSBcMDBFNCBtYXRjaGVzIFwwMDYxLCB3aGljaCBpcyB0cnVlIHVu ZGVyIGlnbm9yZV9hY2NlbnRzLCBidXQgdGhlbgorLS0gdGhlIHJlc3Qgb2YgdGhlIHN0cmlu ZyB3b24ndCBtYXRjaCBhbnltb3JlLiAgVGhlcmVmb3JlLCB0aGUKKy0tIGFsZ29yaXRobSBo YXMgdG8gdGVzdCB3aGV0aGVyIHRoZSByZXN0IG9mIHRoZSBzdHJpbmcgbWF0Y2hlcywgYW5k CistLSBpZiBub3QgdHJ5IG1hdGNoaW5nIFwwMEU0IGFnYWluc3QgYSBsb25nZXIgc3Vic3Ry aW5nIGxpa2UKKy0tIFwwMDYxXDAzMDgsIHdoaWNoIHdpbGwgdGhlbiB3b3JrIG91dC4KK1NF TEVDVCBVJidcMDA2MVwwMzA4YmMnIExJS0UgVSYnXDAwRTRfYycgQ09MTEFURSBpZ25vcmVf YWNjZW50czsKKyA/Y29sdW1uPyAKKy0tLS0tLS0tLS0KKyB0CisoMSByb3cpCisKKy0tIGFu ZCBpbiByZXZlcnNlOgorU0VMRUNUIFUmJ1wwMEU0YmMnIExJS0UgVSYnXDAwNjFcMDMwOF9j JyBDT0xMQVRFIGlnbm9yZV9hY2NlbnRzOworID9jb2x1bW4/IAorLS0tLS0tLS0tLQorIHQK KygxIHJvdykKKworLS0gaW5uZXIgJSBtYXRjaGVzIGI6CitTRUxFQ1QgVSYnXDAwNjFcMDMw OGJjJyBMSUtFIFUmJ1wwMEU0JWMnIENPTExBVEUgaWdub3JlX2FjY2VudHM7CisgP2NvbHVt bj8gCistLS0tLS0tLS0tCisgdAorKDEgcm93KQorCistLSBpbm5lciAlJSBtYXRjaGVzIGIg dGhlbiB6ZXJvOgorU0VMRUNUIFUmJ1wwMDYxXDAzMDhiYycgTElLRSBVJidcMDBFNCUlYycg Q09MTEFURSBpZ25vcmVfYWNjZW50czsKKyA/Y29sdW1uPyAKKy0tLS0tLS0tLS0KKyB0Ciso MSByb3cpCisKKy0tIGlubmVyICUlIG1hdGNoZXMgYiB0aGVuIHplcm86CitTRUxFQ1QgVSYn Y2JcMDA2MVwwMzA4JyBMSUtFIFUmJ2MlJVwwMEU0JyBDT0xMQVRFIGlnbm9yZV9hY2NlbnRz OworID9jb2x1bW4/IAorLS0tLS0tLS0tLQorIHQKKygxIHJvdykKKworLS0gdHJhaWxpbmcg XyBtYXRjaGVzIHR3byBjb2RlcG9pbnRzIHRoYXQgZm9ybSBvbmUgZ3JhcGhlbWU6CitTRUxF Q1QgVSYnY2JcMDA2MVwwMzA4JyBMSUtFIFUmJ2NiXycgQ09MTEFURSBpZ25vcmVfYWNjZW50 czsKKyA/Y29sdW1uPyAKKy0tLS0tLS0tLS0KKyBmCisoMSByb3cpCisKKy0tIHRyYWlsaW5n IF9fIG1hdGNoZXMgdHdvIGNvZGVwb2ludHMgdGhhdCBmb3JtIG9uZSBncmFwaGVtZToKK1NF TEVDVCBVJidjYlwwMDYxXDAzMDgnIExJS0UgVSYnY2JfXycgQ09MTEFURSBpZ25vcmVfYWNj ZW50czsKKyA/Y29sdW1uPyAKKy0tLS0tLS0tLS0KKyB0CisoMSByb3cpCisKKy0tIGxlYWRp bmcgJSBtYXRjaGVzIHplcm86CitTRUxFQ1QgVSYnXDAwNjFcMDMwOGJjJyBMSUtFIFUmJyVc MDBFNGJjJyBDT0xMQVRFIGlnbm9yZV9hY2NlbnRzOworID9jb2x1bW4/IAorLS0tLS0tLS0t LQorIHQKKygxIHJvdykKKworLS0gbGVhZGluZyAlIG1hdGNoZXMgemVybyAod2l0aCBsYXRl ciAlKToKK1NFTEVDVCBVJidcMDA2MVwwMzA4YmMnIExJS0UgVSYnJVwwMEU0JWMnIENPTExB VEUgaWdub3JlX2FjY2VudHM7CisgP2NvbHVtbj8gCistLS0tLS0tLS0tCisgdAorKDEgcm93 KQorCistLSB0cmFpbGluZyAlIG1hdGNoZXMgemVybzoKK1NFTEVDVCBVJidcMDA2MVwwMzA4 YmMnIExJS0UgVSYnXDAwRTRiYyUnIENPTExBVEUgaWdub3JlX2FjY2VudHM7CisgP2NvbHVt bj8gCistLS0tLS0tLS0tCisgdAorKDEgcm93KQorCistLSB0cmFpbGluZyAlIG1hdGNoZXMg emVybyAod2l0aCBwcmV2aW91cyAlKToKK1NFTEVDVCBVJidcMDA2MVwwMzA4YmMnIExJS0Ug VSYnXDAwRTQlYyUnIENPTExBVEUgaWdub3JlX2FjY2VudHM7CisgP2NvbHVtbj8gCistLS0t LS0tLS0tCisgdAorKDEgcm93KQorCistLSBfIHZlcnN1cyB0d28gY29kZXBvaW50cyB0aGF0 IGZvcm0gb25lIGdyYXBoZW1lOgorU0VMRUNUIFUmJ1wwMDYxXDAzMDhiYycgTElLRSBVJidf YmMnIENPTExBVEUgaWdub3JlX2FjY2VudHM7CisgP2NvbHVtbj8gCistLS0tLS0tLS0tCisg dAorKDEgcm93KQorCistLSAoYWN0dWFsbHkgdGhpcyBtYXRjaGVzIGJlY2F1c2UpCitTRUxF Q1QgVSYnXDAzMDhiYycgPSAnYmMnIENPTExBVEUgaWdub3JlX2FjY2VudHM7CisgP2NvbHVt bj8gCistLS0tLS0tLS0tCisgdAorKDEgcm93KQorCistLSBfXyBtYXRjaGVzIHR3byBjb2Rl cG9pbnRzIHRoYXQgZm9ybSBvbmUgZ3JhcGhlbWU6CitTRUxFQ1QgVSYnXDAwNjFcMDMwOGJj JyBMSUtFIFUmJ19fYmMnIENPTExBVEUgaWdub3JlX2FjY2VudHM7CisgP2NvbHVtbj8gCist LS0tLS0tLS0tCisgdAorKDEgcm93KQorCistLSBfIG1hdGNoZXMgb25lIGNvZGVwb2ludCB0 aGF0IGZvcm1zIGhhbGYgYSBncmFwaGVtZToKK1NFTEVDVCBVJidcMDA2MVwwMzA4YmMnIExJ S0UgVSYnX1wwMzA4YmMnIENPTExBVEUgaWdub3JlX2FjY2VudHM7CisgP2NvbHVtbj8gCist LS0tLS0tLS0tCisgdAorKDEgcm93KQorCistLSBkb2Vzbid0IG1hdGNoIGJlY2F1c2UgXDAw ZTQgZG9lc24ndCBtYXRjaCBvbmx5IFwwMzA4CitTRUxFQ1QgVSYnXDAwNjFcMDMwOGJjJyBM SUtFIFUmJ19cMDBlNGJjJyBDT0xMQVRFIGlnbm9yZV9hY2NlbnRzOworID9jb2x1bW4/IAor LS0tLS0tLS0tLQorIGYKKygxIHJvdykKKworLS0gZXNjYXBlIGNoYXJhY3RlciBhdCBlbmQg b2YgcGF0dGVybgorU0VMRUNUICdmb294JyBMSUtFICdmb29cJyBDT0xMQVRFIGlnbm9yZV9h Y2NlbnRzOworRVJST1I6ICBMSUtFIHBhdHRlcm4gbXVzdCBub3QgZW5kIHdpdGggZXNjYXBl IGNoYXJhY3RlcgogLS0gZm9yZWlnbiBrZXlzIChzaG91bGQgdXNlIGNvbGxhdGlvbiBvZiBw cmltYXJ5IGtleSkKIC0tIFBLIGlzIGNhc2Utc2Vuc2l0aXZlLCBGSyBpcyBjYXNlLWluc2Vu c2l0aXZlCiBDUkVBVEUgVEFCTEUgdGVzdDEwcGsgKHggdGV4dCBDT0xMQVRFIGNhc2Vfc2Vu c2l0aXZlIFBSSU1BUlkgS0VZKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3Fs L2NvbGxhdGUuaWN1LnV0Zjguc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvY29sbGF0ZS5p Y3UudXRmOC5zcWwKaW5kZXggNDlmYTk3NThiNDAuLjc0NjI4ZWMwNmEyIDEwMDY0NAotLS0g YS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9jb2xsYXRlLmljdS51dGY4LnNxbAorKysgYi9zcmMv dGVzdC9yZWdyZXNzL3NxbC9jb2xsYXRlLmljdS51dGY4LnNxbApAQCAtNTE0LDYgKzUxNCwx MiBAQCBDUkVBVEUgQ09MTEFUSU9OIHRlc3Rjb2xsX3J1bGVzeCAocHJvdmlkZXIgPSBpY3Us IGxvY2FsZSA9ICcnLCBydWxlcyA9ICchIXdyb25nIQogQ1JFQVRFIENPTExBVElPTiBjdGVz dF9kZXQgKHByb3ZpZGVyID0gaWN1LCBsb2NhbGUgPSAnJywgZGV0ZXJtaW5pc3RpYyA9IHRy dWUpOwogQ1JFQVRFIENPTExBVElPTiBjdGVzdF9ub25kZXQgKHByb3ZpZGVyID0gaWN1LCBs b2NhbGUgPSAnJywgZGV0ZXJtaW5pc3RpYyA9IGZhbHNlKTsKIAorU0VMRUNUICdhYmMnIExJ S0UgJ2FiYycgQ09MTEFURSBjdGVzdF9kZXQ7CitTRUxFQ1QgJ2FiYycgTElLRSAnYVxiYycg Q09MTEFURSBjdGVzdF9kZXQ7CisKK1NFTEVDVCAnYWJjJyBMSUtFICdhYmMnIENPTExBVEUg Y3Rlc3Rfbm9uZGV0OworU0VMRUNUICdhYmMnIExJS0UgJ2FcYmMnIENPTExBVEUgY3Rlc3Rf bm9uZGV0OworCiBDUkVBVEUgVEFCTEUgdGVzdDYgKGEgaW50LCBiIHRleHQpOwogLS0gc2Ft ZSBzdHJpbmcgaW4gZGlmZmVyZW50IG5vcm1hbCBmb3JtcwogSU5TRVJUIElOVE8gdGVzdDYg VkFMVUVTICgxLCBVJidcMDBFNGJjJyk7CkBAIC01MjIsNiArNTI4LDkgQEAgQ1JFQVRFIFRB QkxFIHRlc3Q2IChhIGludCwgYiB0ZXh0KTsKIFNFTEVDVCAqIEZST00gdGVzdDYgV0hFUkUg YiA9ICfDpGJjJyBDT0xMQVRFIGN0ZXN0X2RldDsKIFNFTEVDVCAqIEZST00gdGVzdDYgV0hF UkUgYiA9ICfDpGJjJyBDT0xMQVRFIGN0ZXN0X25vbmRldDsKIAorU0VMRUNUICogRlJPTSB0 ZXN0NiBXSEVSRSBiIExJS0UgJ8OkYmMnIENPTExBVEUgY3Rlc3RfZGV0OworU0VMRUNUICog RlJPTSB0ZXN0NiBXSEVSRSBiIExJS0UgJ8OkYmMnIENPTExBVEUgY3Rlc3Rfbm9uZGV0Owor CiAtLSBzYW1lIHdpdGggYXJyYXlzCiBDUkVBVEUgVEFCTEUgdGVzdDZhIChhIGludCwgYiB0 ZXh0W10pOwogSU5TRVJUIElOVE8gdGVzdDZhIFZBTFVFUyAoMSwgQVJSQVlbVSYnXDAwRTRi YyddKTsKQEAgLTYzNywxNCArNjQ2LDE0IEBAIENSRUFURSBVTklRVUUgSU5ERVggT04gdGVz dDNicGNpICh4KTsgIC0tIGVycm9yCiAtLSBUaGlzIHRlc3RzIHRoZSBpc3N1ZSBkZXNjcmli ZWQgaW4gbWF0Y2hfcGF0dGVybl9wcmVmaXgoKS4gIEluIHRoZQogLS0gYWJzZW5jZSBvZiB0 aGF0IGNoZWNrLCB0aGUgY2FzZV9pbnNlbnNpdGl2ZSB0ZXN0cyBiZWxvdyB3b3VsZAogLS0g cmV0dXJuIG5vIHJvd3Mgd2hlcmUgdGhleSBzaG91bGQgbG9naWNhbGx5IHJldHVybiBvbmUu Ci1DUkVBVEUgVEFCTEUgdGVzdDRjICh4IHRleHQgQ09MTEFURSAiQyIpOworQ1JFQVRFIFRB QkxFIHRlc3Q0YyAoeCB0ZXh0IENPTExBVEUgY2FzZV9pbnNlbnNpdGl2ZSk7CiBJTlNFUlQg SU5UTyB0ZXN0NGMgVkFMVUVTICgnYWJjJyk7CiBDUkVBVEUgSU5ERVggT04gdGVzdDRjICh4 KTsKIFNFVCBlbmFibGVfc2Vxc2NhbiA9IG9mZjsKIFNFTEVDVCB4IEZST00gdGVzdDRjIFdI RVJFIHggTElLRSAnQUJDJyBDT0xMQVRFIGNhc2Vfc2Vuc2l0aXZlOyAgLS0gb2ssIG5vIHJv d3MKIFNFTEVDVCB4IEZST00gdGVzdDRjIFdIRVJFIHggTElLRSAnQUJDJScgQ09MTEFURSBj YXNlX3NlbnNpdGl2ZTsgIC0tIG9rLCBubyByb3dzCi1TRUxFQ1QgeCBGUk9NIHRlc3Q0YyBX SEVSRSB4IExJS0UgJ0FCQycgQ09MTEFURSBjYXNlX2luc2Vuc2l0aXZlOyAgLS0gZXJyb3IK LVNFTEVDVCB4IEZST00gdGVzdDRjIFdIRVJFIHggTElLRSAnQUJDJScgQ09MTEFURSBjYXNl X2luc2Vuc2l0aXZlOyAgLS0gZXJyb3IKK1NFTEVDVCB4IEZST00gdGVzdDRjIFdIRVJFIHgg TElLRSAnQUJDJyBDT0xMQVRFIGNhc2VfaW5zZW5zaXRpdmU7ICAtLSBvaworU0VMRUNUIHgg RlJPTSB0ZXN0NGMgV0hFUkUgeCBMSUtFICdBQkMlJyBDT0xMQVRFIGNhc2VfaW5zZW5zaXRp dmU7ICAtLSBvawogUkVTRVQgZW5hYmxlX3NlcXNjYW47CiAKIC0tIFVuaWNvZGUgc3BlY2lh bCBjYXNlOiBkaWZmZXJlbnQgdmFyaWFudHMgb2YgR3JlZWsgbG93ZXIgY2FzZSBzaWdtYS4K QEAgLTY4Nyw2ICs2OTYsNDYgQEAgQ1JFQVRFIFRBQkxFIHRlc3Q0IChhIGludCwgYiB0ZXh0 KTsKIFNFTEVDVCAqIEZST00gdGVzdDQgV0hFUkUgYiA9ICdDb3RlJyBDT0xMQVRFIGlnbm9y ZV9hY2NlbnRzOyAgLS0gc3RpbGwgY2FzZS1zZW5zaXRpdmUKIFNFTEVDVCAqIEZST00gdGVz dDQgV0hFUkUgYiA9ICdDb3RlJyBDT0xMQVRFIGNhc2VfaW5zZW5zaXRpdmU7CiAKKy0tIFRo aXMgaXMgYSB0cmlja3kgb25lLiAgQSBuYWl2ZSBpbXBsZW1lbnRhdGlvbiB3b3VsZCBmaXJz dCB0ZXN0CistLSBcMDBFNCBtYXRjaGVzIFwwMDYxLCB3aGljaCBpcyB0cnVlIHVuZGVyIGln bm9yZV9hY2NlbnRzLCBidXQgdGhlbgorLS0gdGhlIHJlc3Qgb2YgdGhlIHN0cmluZyB3b24n dCBtYXRjaCBhbnltb3JlLiAgVGhlcmVmb3JlLCB0aGUKKy0tIGFsZ29yaXRobSBoYXMgdG8g dGVzdCB3aGV0aGVyIHRoZSByZXN0IG9mIHRoZSBzdHJpbmcgbWF0Y2hlcywgYW5kCistLSBp ZiBub3QgdHJ5IG1hdGNoaW5nIFwwMEU0IGFnYWluc3QgYSBsb25nZXIgc3Vic3RyaW5nIGxp a2UKKy0tIFwwMDYxXDAzMDgsIHdoaWNoIHdpbGwgdGhlbiB3b3JrIG91dC4KK1NFTEVDVCBV JidcMDA2MVwwMzA4YmMnIExJS0UgVSYnXDAwRTRfYycgQ09MTEFURSBpZ25vcmVfYWNjZW50 czsKKy0tIGFuZCBpbiByZXZlcnNlOgorU0VMRUNUIFUmJ1wwMEU0YmMnIExJS0UgVSYnXDAw NjFcMDMwOF9jJyBDT0xMQVRFIGlnbm9yZV9hY2NlbnRzOworLS0gaW5uZXIgJSBtYXRjaGVz IGI6CitTRUxFQ1QgVSYnXDAwNjFcMDMwOGJjJyBMSUtFIFUmJ1wwMEU0JWMnIENPTExBVEUg aWdub3JlX2FjY2VudHM7CistLSBpbm5lciAlJSBtYXRjaGVzIGIgdGhlbiB6ZXJvOgorU0VM RUNUIFUmJ1wwMDYxXDAzMDhiYycgTElLRSBVJidcMDBFNCUlYycgQ09MTEFURSBpZ25vcmVf YWNjZW50czsKKy0tIGlubmVyICUlIG1hdGNoZXMgYiB0aGVuIHplcm86CitTRUxFQ1QgVSYn Y2JcMDA2MVwwMzA4JyBMSUtFIFUmJ2MlJVwwMEU0JyBDT0xMQVRFIGlnbm9yZV9hY2NlbnRz OworLS0gdHJhaWxpbmcgXyBtYXRjaGVzIHR3byBjb2RlcG9pbnRzIHRoYXQgZm9ybSBvbmUg Z3JhcGhlbWU6CitTRUxFQ1QgVSYnY2JcMDA2MVwwMzA4JyBMSUtFIFUmJ2NiXycgQ09MTEFU RSBpZ25vcmVfYWNjZW50czsKKy0tIHRyYWlsaW5nIF9fIG1hdGNoZXMgdHdvIGNvZGVwb2lu dHMgdGhhdCBmb3JtIG9uZSBncmFwaGVtZToKK1NFTEVDVCBVJidjYlwwMDYxXDAzMDgnIExJ S0UgVSYnY2JfXycgQ09MTEFURSBpZ25vcmVfYWNjZW50czsKKy0tIGxlYWRpbmcgJSBtYXRj aGVzIHplcm86CitTRUxFQ1QgVSYnXDAwNjFcMDMwOGJjJyBMSUtFIFUmJyVcMDBFNGJjJyBD T0xMQVRFIGlnbm9yZV9hY2NlbnRzOworLS0gbGVhZGluZyAlIG1hdGNoZXMgemVybyAod2l0 aCBsYXRlciAlKToKK1NFTEVDVCBVJidcMDA2MVwwMzA4YmMnIExJS0UgVSYnJVwwMEU0JWMn IENPTExBVEUgaWdub3JlX2FjY2VudHM7CistLSB0cmFpbGluZyAlIG1hdGNoZXMgemVybzoK K1NFTEVDVCBVJidcMDA2MVwwMzA4YmMnIExJS0UgVSYnXDAwRTRiYyUnIENPTExBVEUgaWdu b3JlX2FjY2VudHM7CistLSB0cmFpbGluZyAlIG1hdGNoZXMgemVybyAod2l0aCBwcmV2aW91 cyAlKToKK1NFTEVDVCBVJidcMDA2MVwwMzA4YmMnIExJS0UgVSYnXDAwRTQlYyUnIENPTExB VEUgaWdub3JlX2FjY2VudHM7CistLSBfIHZlcnN1cyB0d28gY29kZXBvaW50cyB0aGF0IGZv cm0gb25lIGdyYXBoZW1lOgorU0VMRUNUIFUmJ1wwMDYxXDAzMDhiYycgTElLRSBVJidfYmMn IENPTExBVEUgaWdub3JlX2FjY2VudHM7CistLSAoYWN0dWFsbHkgdGhpcyBtYXRjaGVzIGJl Y2F1c2UpCitTRUxFQ1QgVSYnXDAzMDhiYycgPSAnYmMnIENPTExBVEUgaWdub3JlX2FjY2Vu dHM7CistLSBfXyBtYXRjaGVzIHR3byBjb2RlcG9pbnRzIHRoYXQgZm9ybSBvbmUgZ3JhcGhl bWU6CitTRUxFQ1QgVSYnXDAwNjFcMDMwOGJjJyBMSUtFIFUmJ19fYmMnIENPTExBVEUgaWdu b3JlX2FjY2VudHM7CistLSBfIG1hdGNoZXMgb25lIGNvZGVwb2ludCB0aGF0IGZvcm1zIGhh bGYgYSBncmFwaGVtZToKK1NFTEVDVCBVJidcMDA2MVwwMzA4YmMnIExJS0UgVSYnX1wwMzA4 YmMnIENPTExBVEUgaWdub3JlX2FjY2VudHM7CistLSBkb2Vzbid0IG1hdGNoIGJlY2F1c2Ug XDAwZTQgZG9lc24ndCBtYXRjaCBvbmx5IFwwMzA4CitTRUxFQ1QgVSYnXDAwNjFcMDMwOGJj JyBMSUtFIFUmJ19cMDBlNGJjJyBDT0xMQVRFIGlnbm9yZV9hY2NlbnRzOworLS0gZXNjYXBl IGNoYXJhY3RlciBhdCBlbmQgb2YgcGF0dGVybgorU0VMRUNUICdmb294JyBMSUtFICdmb29c JyBDT0xMQVRFIGlnbm9yZV9hY2NlbnRzOworCiAtLSBmb3JlaWduIGtleXMgKHNob3VsZCB1 c2UgY29sbGF0aW9uIG9mIHByaW1hcnkga2V5KQogCiAtLSBQSyBpcyBjYXNlLXNlbnNpdGl2 ZSwgRksgaXMgY2FzZS1pbnNlbnNpdGl2ZQoKYmFzZS1jb21taXQ6IGRiMjJiOTAwMjQ0ZDNj NTE5MThhY2NlNDRjYmU1YmI2ZjY1MDdkMzIKLS0gCjIuNDcuMAoK --------------jqBbp4Mo0tJlYGc10l8amHix--