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.96) (envelope-from ) id 1wVVWu-0020m2-2u for pgsql-bugs@arkaria.postgresql.org; Fri, 05 Jun 2026 14:28:13 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wVVVu-00Cpzd-0f for pgsql-bugs@arkaria.postgresql.org; Fri, 05 Jun 2026 14:27:10 +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.96) (envelope-from ) id 1wVVVt-00Cpyx-1Q for pgsql-bugs@lists.postgresql.org; Fri, 05 Jun 2026 14:27:09 +0000 Received: from mail-wm1-x336.google.com ([2a00:1450:4864:20::336]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wVVVq-00000001FYG-01Xi for pgsql-bugs@lists.postgresql.org; Fri, 05 Jun 2026 14:27:08 +0000 Received: by mail-wm1-x336.google.com with SMTP id 5b1f17b1804b1-49068493267so15113315e9.1 for ; Fri, 05 Jun 2026 07:27:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1780669623; x=1781274423; darn=lists.postgresql.org; h=content-language:cc:to:subject:from:user-agent:mime-version:date :message-id:from:to:cc:subject:date:message-id:reply-to; bh=I03e7VC658DiyP2jCbuK/uifRCourAo1CP2odfvl8ro=; b=Dt8x0aJWOCmqEN5uTHJvG5YyQA8dOmdivMpiwKq59qMqz95W7lVKGdlj2r1IU1FuRX pA7j1ebpQLQFnC+EQ1ojBgbSjH3ITu+HVeOiyeje+s2+hDjWNZld0uSw4rxG4e2gbpgh V8sBnq684UNRTrOjswuo6Fmxh6g1NPF//JxpHBQ5BUFqCE2WM+W815zvXDzTzZioa67g 9TZIQPG/WqYDtSHVT+9bYDZ3hmAKF3OyMUo69d4Z+7wv4iJ5tO/7Bogj6FwMXCellW4h hOtKWxwjBoq0GTVDpbUnBA+RjFcyevNGUbLHZNPDfa9WMIjRxnmmWwzQGebi1qLT+jim QpzA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780669623; x=1781274423; h=content-language:cc:to:subject:from:user-agent:mime-version:date :message-id:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=I03e7VC658DiyP2jCbuK/uifRCourAo1CP2odfvl8ro=; b=XNBSkuay94zCy4+Sto5R5vCL/kc4k4XrAYbd/58OSSPisdOn0u983hoUlvfABTlP+A skp11Uq8EBnztSmVszGGFA92P4T2YjtNpJmdBrKp/k+VDH4MoZagtVEgY5HFEmDO2kZl CJCfmkpGGvZY0gXNWPWJeBy7owjHBQ/eU2C/e+mbuFAZJxy/3O3wcJuY8y0xwxq50+ii F8TCyqjPvVWPfmMwMRaoEGKj3Bus+rf38zg8Mvf8iWcCDOB/ixoKqJWMIi5MdYgeiNvT j/A8YcYaynKXhheqS5X5mrgtvMH0ZpYjBqE8B0KsvFzTIuiu8us8Nzueg9aiz6nJxof7 scBg== X-Gm-Message-State: AOJu0YwhRXzT4ZysnCI5XAUdKLDxkmQ0JSevGDbLnZroimBk8UeesLfb +FpkqDuIJwWPQo+bk/BZQYCjjmMin3mCZwpKSI+4Uot/mei/JvfLRWD7oJwNlA== X-Gm-Gg: Acq92OGnPLtrhHMPP/g5nYKjx5IIvrReFFWFUv2JRqNMPFsyT1d/VUfGGOygXSo05Ex g25lvmgpDGwvkK43O/4KYztDQltqovS8HDfI0ysejVXhlCDOW+Mgj1l77GyKdJLWlXzBP7NDzS0 8YOybymCCL6KPSK8IazKxMbeUy1umXad2aW2RTUiNu836DGfMk5jeHri6131FMwZhXIkYvVTBf4 4083q4OWKxAWQx4Lw8DeU0kv6kHdnXiMg5xAOgfhy03I6SNKflj4WwnjVEcXXaswnTneJSyx/rq 8NAmSMYUAkGT5TzWAANYU4LAf6odzsJq4zopd7lSpYbUiI7c81tn/kSPlU79RVvq0iXuxayRDPQ hX2S7R346s+9Pj+Tcze/8hrtpTrR3mAXkmilWke+UdrWoQFQinn9AWQSvGi2FFocORKPQ5dngTB N6NAzKJAcxaqeK2a8QvfAnSuP5D3CYibb5DGuBXZpcIjkkbXuB X-Received: by 2002:a05:600c:a012:b0:490:b9c3:6c49 with SMTP id 5b1f17b1804b1-490c2610c3bmr65064715e9.29.1780669623207; Fri, 05 Jun 2026 07:27:03 -0700 (PDT) Received: from [192.168.15.177] ([80.251.191.198]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-4601f2dcbe3sm25296442f8f.8.2026.06.05.07.27.01 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 05 Jun 2026 07:27:01 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------BDGvpDwy6ZKtu5sGY8N06XaK" Message-ID: Date: Fri, 5 Jun 2026 16:27:00 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird From: Andrei Lepikhov Subject: Hashed SAOP on composite type with non-hashable column errors at runtime To: pgsql-bugs@lists.postgresql.org Cc: Peter Eisentraut , Tom Lane Content-Language: en-US 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. --------------BDGvpDwy6ZKtu5sGY8N06XaK Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Hi, There is an issue when we use a record-based array operation in SQL: EXPLAIN (ANALYZE, COSTS OFF, TIMING OFF, BUFFERS OFF, SUMMARY OFF) SELECT count(*) FROM test WHERE (a,b) = ANY (ARRAY[ (1, 'w1'::tsvector), (2, 'w2'::tsvector), (3, 'w3'::tsvector), (4, 'w4'::tsvector), (5, 'w5'::tsvector), (6, 'w6'::tsvector), (7, 'w7'::tsvector), (8, 'w8'::tsvector), (9, 'w9'::tsvector) ]); ERROR: could not identify a hash function for type tsvector See the attachment for the full reproduction script. This happens because the hashability check for the record and array types misses the op_hashjoinable() test. With fewer than 9 elements the query executes successfully. Patch 0001 (attached) fixes this bug. It is a natural follow-up to 17da9d4c282, the hashing of record types itself was introduced by 01e658fa74c. It deserves a back-patch down to v14. More interesting is that EXPLAIN doesn't expose whether the executor used the hashed or the plain search strategy. That might be acceptable, since we know hashing is always used from nine elements on. But it forces the user first to read the source code, and then to inspect the catalog, to find out whether the clause has a hash function. For a SubPlan we do have this information — so let's take a look at v0-0002, which introduces a 'hashed' flag. It would be too prosaic a bug fix if there weren't a nice corner case with the anonymous record type. Consider the following: EXPLAIN (ANALYZE, COSTS OFF, TIMING OFF) SELECT count(*) FROM (SELECT g x, -g y FROM generate_series(1,300000) g) t WHERE (x, y) = ANY (array[(1,-1),(2,-2),(1,-1),(2,-2),(1,-1),(2,-2),(1,-1),(2,-2),(64,-64)]); /* -- Before the fix: Aggregate (actual rows=1.00 loops=1) Buffers: shared hit=63 read=5, temp read=513 written=513 -> Function Scan on generate_series g (actual rows=3.00 loops=1) Filter: (ROW(g, (- g)) = ANY ('{"(1,-1)","(2,-2)","(1,-1)","(2,-2)","(1,-1)","(2,-2)","(1,-1)","(2,-2)","(64,-64)"}'::record[])) Rows Removed by Filter: 299997 Buffers: shared hit=63 read=5, temp read=513 written=513 Planning: Buffers: shared hit=45 read=16 Planning Time: 2.923 ms Execution Time: 62.969 ms (10 rows) -- After the fix: Aggregate (actual rows=1.00 loops=1) Buffers: shared hit=42, temp read=513 written=513 -> Function Scan on generate_series g (actual rows=3.00 loops=1) Filter: (ROW(g, (- g)) = ANY ('{"(1,-1)","(2,-2)","(1,-1)","(2,-2)","(1,-1)","(2,-2)","(1,-1)","(2,-2)","(64,-64)"}'::record[])) Rows Removed by Filter: 299997 Buffers: shared hit=42, temp read=513 written=513 Planning: Buffers: shared hit=88 Planning Time: 0.837 ms Execution Time: 745.897 ms (10 rows) */ You can see a regression here: a legitimate hashed SAOP is no longer hashed. The fix for that is not so simple — we have to check every element of the array before deciding whether the hashing strategy is possible. This is quite an expensive operation, so I sketched a solution in patch 0003, but I'm not sure it is worth developing: checking an anonymous type might simply be too expensive. Should it be done only once, conditionally, with a size limit and result caching? -- regards, Andrei Lepikhov, pgEdge --------------BDGvpDwy6ZKtu5sGY8N06XaK Content-Type: text/plain; charset=UTF-8; name="v0-0001-Don-t-hash-a-record-array-SAOP-whose-input-type-i.patch" Content-Disposition: attachment; filename*0="v0-0001-Don-t-hash-a-record-array-SAOP-whose-input-type-i.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBkODFkOTVhMGZjMDhkZjMwYTcxYTMzYmNjOTkyMDY2ZDhmOTVhMWNhIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZWkgTGVwaWtob3YgPGFuZHJlaS5sZXBpa2hv dkBwZ2VkZ2UuY29tPgpEYXRlOiBGcmksIDUgSnVuIDIwMjYgMDc6MTE6NTQgKzAwMDAKU3Vi amVjdDogW1BBVENIIHYwIDEvM10gRG9uJ3QgaGFzaCBhIHJlY29yZC9hcnJheSBTQU9QIHdo b3NlIGlucHV0IHR5cGUgaXNuJ3QKIGhhc2hhYmxlCgpjb252ZXJ0X3Nhb3BfdG9faGFzaGVk X3Nhb3Bfd2Fsa2VyKCkgZGVjaWRlZCB0byBldmFsdWF0ZSBhClNjYWxhckFycmF5T3BFeHBy IHdpdGggYSBoYXNoIHRhYmxlIHdoZW5ldmVyIGdldF9vcF9oYXNoX2Z1bmN0aW9ucygpCnJl cG9ydGVkIHRoZSBvcGVyYXRvciBhcyBoYXNoYWJsZS4gIFRoYXQgZnVuY3Rpb24gb25seSBw ZXJmb3JtcyBhCnBnX2Ftb3AgbWVtYmVyc2hpcCB0ZXN0LCBhbmQgc2luY2UgMDFlNjU4ZmE3 NGMgYWRkZWQgaGFzaC9yZWNvcmRfb3BzLAppdCByZXR1cm5zIHRydWUgZm9yIHJlY29yZF9l cSB1bmNvbmRpdGlvbmFsbHkuICBCdXQgcmVjb3JkX2VxIChsaWtlCmFycmF5X2VxKSBpcyBv bmx5IGFjdHVhbGx5IGhhc2hhYmxlIHdoZW4gZXZlcnkgY29sdW1uL2VsZW1lbnQgdHlwZSBo YXMKYSBoYXNoIGZ1bmN0aW9uLiAgRm9yIGEgY29tcG9zaXRlIHR5cGUgd2l0aCBhIG5vbi1o YXNoYWJsZSBjb2x1bW4gdHlwZQooZS5nLiB0c3ZlY3RvcikgYW5kIGFuIGFycmF5IG9mIGF0 IGxlYXN0IE1JTl9BUlJBWV9TSVpFX0ZPUl9IQVNIRURfU0FPUApjb25zdGFudCBlbGVtZW50 cywgdGhlIHBsYW5uZXIgdGhlcmVmb3JlIGVuYWJsZWQgaGFzaGluZyBhbmQgdGhlIGV4ZWN1 dG9yCmZhaWxlZCBhdCBydW50aW1lLgoKVGhpcyBpcyB0aGUgc2FtZSB0cmFwIHRoYXQgaGFz aF9va19vcGVyYXRvcigpIGZlbGwgaW50byBhbmQgdGhhdAoxN2RhOWQ0YzI4MiBmaXhlZCBm b3Igc3VicGxhbiBoYXNoaW5nLiBHaXZlIHRoZSBTQU9QIHBsYW5uZXIgZ2F0ZSB0aGUgc2Ft ZQp0cmVhdG1lbnQuCi0tLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvY2xhdXNlcy5j ICAgICAgfCAyNiArKysrKysrKysrKysrKysrKysrKystLQogc3JjL2JhY2tlbmQvdXRpbHMv Y2FjaGUvbHN5c2NhY2hlLmMgICAgICAgfCAgNiArKystLS0KIHNyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvZXhwcmVzc2lvbnMub3V0IHwgMjUgKysrKysrKysrKysrKysrKysrKysrKwog c3JjL3Rlc3QvcmVncmVzcy9zcWwvZXhwcmVzc2lvbnMuc3FsICAgICAgfCAyMCArKysrKysr KysrKysrKysrKwogNCBmaWxlcyBjaGFuZ2VkLCA3MiBpbnNlcnRpb25zKCspLCA1IGRlbGV0 aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL2NsYXVz ZXMuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL2NsYXVzZXMuYwppbmRleCBjZDg2 MzExYmIwYi4uZDQ0ZjY3NGRjNzYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXpl ci91dGlsL2NsYXVzZXMuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9jbGF1 c2VzLmMKQEAgLTI1MzUsNiArMjUzNSwyNCBAQCBjb252ZXJ0X3Nhb3BfdG9faGFzaGVkX3Nh b3AoTm9kZSAqbm9kZSkKIAkodm9pZCkgY29udmVydF9zYW9wX3RvX2hhc2hlZF9zYW9wX3dh bGtlcihub2RlLCBOVUxMKTsKIH0KIAorLyoKKyAqIHNhb3BfaGFzaGFibGVfZm9yX3R5cGUK KyAqCQlDYW4gYSBoYXNoZWQgU2NhbGFyQXJyYXlPcEV4cHIgc2FmZWx5IHVzZSBlcXVhbGl0 eSBvcGVyYXRvciAnZXFvcCcKKyAqCQlmb3IgbGVmdC1oYW5kIGlucHV0IHR5cGUgJ2xlZnR0 eXBlJz8KKyAqCisgKiBnZXRfb3BfaGFzaF9mdW5jdGlvbnMoKSByZXBvcnRzIHJlY29yZF9l cSBhbmQgYXJyYXlfZXEgYXMgaGFzaGFibGUKKyAqIHVuY29uZGl0aW9uYWxseS4gIEJ1dCBo YXNoYWJpbGl0eSBhY3R1YWxseSBkZXBlbmRzIG9uIHRoZSBzcGVjaWZpYyBpbnB1dAorICog dHlwZTogZXZlcnkgY29sdW1uL2VsZW1lbnQgdHlwZSBtdXN0IGl0c2VsZiBiZSBoYXNoYWJs ZS4gIFJlLWNoZWNrIHN1Y2gKKyAqIG9wZXJhdG9ycyB0aHJvdWdoIG9wX2hhc2hqb2luYWJs ZSgpLgorICovCitzdGF0aWMgYm9vbAorc2FvcF9oYXNoYWJsZV9mb3JfdHlwZShPaWQgZXFv cCwgT2lkIGxlZnR0eXBlKQoreworCWlmIChlcW9wID09IFJFQ09SRF9FUV9PUCB8fCBlcW9w ID09IEFSUkFZX0VRX09QKQorCQlyZXR1cm4gb3BfaGFzaGpvaW5hYmxlKGVxb3AsIGxlZnR0 eXBlKTsKKwlyZXR1cm4gdHJ1ZTsKK30KKwogc3RhdGljIGJvb2wKIGNvbnZlcnRfc2FvcF90 b19oYXNoZWRfc2FvcF93YWxrZXIoTm9kZSAqbm9kZSwgdm9pZCAqY29udGV4dCkKIHsKQEAg LTI1NTQsNyArMjU3Miw5IEBAIGNvbnZlcnRfc2FvcF90b19oYXNoZWRfc2FvcF93YWxrZXIo Tm9kZSAqbm9kZSwgdm9pZCAqY29udGV4dCkKIAkJCWlmIChzYW9wLT51c2VPcikKIAkJCXsK IAkJCQlpZiAoZ2V0X29wX2hhc2hfZnVuY3Rpb25zKHNhb3AtPm9wbm8sICZsZWZ0aGFzaGZ1 bmMsICZyaWdodGhhc2hmdW5jKSAmJgotCQkJCQlsZWZ0aGFzaGZ1bmMgPT0gcmlnaHRoYXNo ZnVuYykKKwkJCQkJbGVmdGhhc2hmdW5jID09IHJpZ2h0aGFzaGZ1bmMgJiYKKwkJCQkJc2Fv cF9oYXNoYWJsZV9mb3JfdHlwZShzYW9wLT5vcG5vLAorCQkJCQkJCQkJCSAgIGV4cHJUeXBl KGxpbml0aWFsKHNhb3AtPmFyZ3MpKSkpCiAJCQkJewogCQkJCQlEYXR1bQkJYXJyZGF0dW0g PSAoKENvbnN0ICopIGFycmF5YXJnKS0+Y29uc3R2YWx1ZTsKIAkJCQkJQXJyYXlUeXBlICAq YXJyID0gKEFycmF5VHlwZSAqKSBEYXR1bUdldFBvaW50ZXIoYXJyZGF0dW0pOwpAQCAtMjU4 Niw3ICsyNjA2LDkgQEAgY29udmVydF9zYW9wX3RvX2hhc2hlZF9zYW9wX3dhbGtlcihOb2Rl ICpub2RlLCB2b2lkICpjb250ZXh0KQogCQkJCSAqLwogCQkJCWlmIChPaWRJc1ZhbGlkKG5l Z2F0b3IpICYmCiAJCQkJCWdldF9vcF9oYXNoX2Z1bmN0aW9ucyhuZWdhdG9yLCAmbGVmdGhh c2hmdW5jLCAmcmlnaHRoYXNoZnVuYykgJiYKLQkJCQkJbGVmdGhhc2hmdW5jID09IHJpZ2h0 aGFzaGZ1bmMpCisJCQkJCWxlZnRoYXNoZnVuYyA9PSByaWdodGhhc2hmdW5jICYmCisJCQkJ CXNhb3BfaGFzaGFibGVfZm9yX3R5cGUobmVnYXRvciwKKwkJCQkJCQkJCQkgICBleHByVHlw ZShsaW5pdGlhbChzYW9wLT5hcmdzKSkpKQogCQkJCXsKIAkJCQkJRGF0dW0JCWFycmRhdHVt ID0gKChDb25zdCAqKSBhcnJheWFyZyktPmNvbnN0dmFsdWU7CiAJCQkJCUFycmF5VHlwZSAg KmFyciA9IChBcnJheVR5cGUgKikgRGF0dW1HZXRQb2ludGVyKGFycmRhdHVtKTsKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL2xzeXNjYWNoZS5jIGIvc3JjL2JhY2tl bmQvdXRpbHMvY2FjaGUvbHN5c2NhY2hlLmMKaW5kZXggMDM2MDg2MDU3ZDcuLjNjN2ZlY2Y1 MjZkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9sc3lzY2FjaGUuYwor KysgYi9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9sc3lzY2FjaGUuYwpAQCAtMTY1OSw5ICsx NjU5LDkgQEAgb3BfbWVyZ2Vqb2luYWJsZShPaWQgb3BubywgT2lkIGlucHV0dHlwZSkKICAq IFJldHVybnMgdHJ1ZSBpZiB0aGUgb3BlcmF0b3IgaXMgaGFzaGpvaW5hYmxlLiAgKFRoZXJl IG11c3QgYmUgYSBzdWl0YWJsZQogICogaGFzaCBvcGZhbWlseSBlbnRyeSBmb3IgdGhpcyBv cGVyYXRvciBpZiBpdCBpcyBzbyBtYXJrZWQuKQogICoKLSAqIEluIHNvbWUgY2FzZXMgKGN1 cnJlbnRseSBvbmx5IGFycmF5X2VxKSwgaGFzaGpvaW5hYmlsaXR5IGRlcGVuZHMgb24gdGhl Ci0gKiBzcGVjaWZpYyBpbnB1dCBkYXRhIHR5cGUgdGhlIG9wZXJhdG9yIGlzIGludm9rZWQg Zm9yLCBzbyB0aGF0IG11c3QgYmUKLSAqIHBhc3NlZCBhcyB3ZWxsLiAgV2UgY3VycmVudGx5 IGFzc3VtZSB0aGF0IG9ubHkgb25lIGlucHV0J3MgdHlwZSBpcyBuZWVkZWQKKyAqIEluIHNv bWUgY2FzZXMgKGN1cnJlbnRseSBhcnJheV9lcSBhbmQgcmVjb3JkX2VxKSwgaGFzaGpvaW5h YmlsaXR5IGRlcGVuZHMKKyAqIG9uIHRoZSBzcGVjaWZpYyBpbnB1dCBkYXRhIHR5cGUgdGhl IG9wZXJhdG9yIGlzIGludm9rZWQgZm9yLCBzbyB0aGF0IG11c3QKKyAqIGJlIHBhc3NlZCBh cyB3ZWxsLiAgV2UgY3VycmVudGx5IGFzc3VtZSB0aGF0IG9ubHkgb25lIGlucHV0J3MgdHlw ZSBpcyBuZWVkZWQKICAqIHRvIGNoZWNrIHRoaXMgLS0tIGJ5IGNvbnZlbnRpb24sIHBhc3Mg dGhlIGxlZnQgaW5wdXQncyBkYXRhIHR5cGUuCiAgKi8KIGJvb2wKZGlmZiAtLWdpdCBhL3Ny Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZXhwcmVzc2lvbnMub3V0IGIvc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9leHByZXNzaW9ucy5vdXQKaW5kZXggNzMwZjdiYzdlYmEuLmMzNTU4 M2NiMmVhIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2V4cHJlc3Np b25zLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2V4cHJlc3Npb25zLm91 dApAQCAtNTYxLDMgKzU2MSwyOCBAQCBmcm9tIGludHRlc3Q7CiAoMyByb3dzKQogCiByb2xs YmFjazsKKy0tCistLSBIYXNoZWQgU0FPUCBtdXN0IG5vdCBiZSBzZWxlY3RlZCBmb3IgYSBj b21wb3NpdGUgdHlwZSB0aGF0IGlzIG5vdCBhY3R1YWxseQorLS0gaGFzaGFibGUuCistLQor Q1JFQVRFIFRBQkxFIGhhc2hlZF9zYW9wX3RibCAoYSBpbnQsIGIgdHN2ZWN0b3IpOworSU5T RVJUIElOVE8gaGFzaGVkX3Nhb3BfdGJsCisgIFNFTEVDVCBnLCAoJ3cnIHx8IGcpOjp0c3Zl Y3RvciBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMDAwKSBnOworQU5BTFlaRSBoYXNoZWRf c2FvcF90Ymw7CistLSBUaHJvd3MgYW4gRVJST1IgaWYgdGhlIGhhc2hlZCBzdHJhdGVneSBo YXMgYmVlbiBjaG9zZW4KK0VYUExBSU4gKEFOQUxZWkUsIENPU1RTIE9GRiwgVElNSU5HIE9G RiwgQlVGRkVSUyBPRkYsIFNVTU1BUlkgT0ZGKQorU0VMRUNUIGNvdW50KCopIEZST00gaGFz aGVkX3Nhb3BfdGJsCitXSEVSRSAoYSxiKSA9IEFOWSAoQVJSQVlbCisgICgxLCAndzEnOjp0 c3ZlY3RvciksICgyLCAndzInOjp0c3ZlY3RvciksICgzLCAndzMnOjp0c3ZlY3RvciksCisg ICg0LCAndzQnOjp0c3ZlY3RvciksICg1LCAndzUnOjp0c3ZlY3RvciksICg2LCAndzYnOjp0 c3ZlY3RvciksCisgICg3LCAndzcnOjp0c3ZlY3RvciksICg4LCAndzgnOjp0c3ZlY3Rvciks ICg5LCAndzknOjp0c3ZlY3RvcikKKyAgXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEFnZ3JlZ2F0 ZSAoYWN0dWFsIHJvd3M9MS4wMCBsb29wcz0xKQorICAgLT4gIFNlcSBTY2FuIG9uIGhhc2hl ZF9zYW9wX3RibCAoYWN0dWFsIHJvd3M9OS4wMCBsb29wcz0xKQorICAgICAgICAgRmlsdGVy OiAoUk9XKGEsIGIpID0gQU5ZICgneyIoMSwnJ3cxJycpIiwiKDIsJyd3MicnKSIsIigzLCcn dzMnJykiLCIoNCwnJ3c0JycpIiwiKDUsJyd3NScnKSIsIig2LCcndzYnJykiLCIoNywnJ3c3 JycpIiwiKDgsJyd3OCcnKSIsIig5LCcndzknJykifSc6OnJlY29yZFtdKSkKKyAgICAgICAg IFJvd3MgUmVtb3ZlZCBieSBGaWx0ZXI6IDk5MQorKDQgcm93cykKKworRFJPUCBUQUJMRSBo YXNoZWRfc2FvcF90Ymw7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9leHBy ZXNzaW9ucy5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9leHByZXNzaW9ucy5zcWwKaW5k ZXggM2IzMDQ4Zjk3MzEuLjA4NjkxODc3OTAyIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdy ZXNzL3NxbC9leHByZXNzaW9ucy5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvZXhw cmVzc2lvbnMuc3FsCkBAIC0zMDEsMyArMzAxLDIzIEBAIHNlbGVjdAogZnJvbSBpbnR0ZXN0 OwogCiByb2xsYmFjazsKKworLS0KKy0tIEhhc2hlZCBTQU9QIG11c3Qgbm90IGJlIHNlbGVj dGVkIGZvciBhIGNvbXBvc2l0ZSB0eXBlIHRoYXQgaXMgbm90IGFjdHVhbGx5CistLSBoYXNo YWJsZS4KKy0tCisKK0NSRUFURSBUQUJMRSBoYXNoZWRfc2FvcF90YmwgKGEgaW50LCBiIHRz dmVjdG9yKTsKK0lOU0VSVCBJTlRPIGhhc2hlZF9zYW9wX3RibAorICBTRUxFQ1QgZywgKCd3 JyB8fCBnKTo6dHN2ZWN0b3IgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwMCkgZzsKK0FO QUxZWkUgaGFzaGVkX3Nhb3BfdGJsOworCistLSBUaHJvd3MgYW4gRVJST1IgaWYgdGhlIGhh c2hlZCBzdHJhdGVneSBoYXMgYmVlbiBjaG9zZW4KK0VYUExBSU4gKEFOQUxZWkUsIENPU1RT IE9GRiwgVElNSU5HIE9GRiwgQlVGRkVSUyBPRkYsIFNVTU1BUlkgT0ZGKQorU0VMRUNUIGNv dW50KCopIEZST00gaGFzaGVkX3Nhb3BfdGJsCitXSEVSRSAoYSxiKSA9IEFOWSAoQVJSQVlb CisgICgxLCAndzEnOjp0c3ZlY3RvciksICgyLCAndzInOjp0c3ZlY3RvciksICgzLCAndzMn Ojp0c3ZlY3RvciksCisgICg0LCAndzQnOjp0c3ZlY3RvciksICg1LCAndzUnOjp0c3ZlY3Rv ciksICg2LCAndzYnOjp0c3ZlY3RvciksCisgICg3LCAndzcnOjp0c3ZlY3RvciksICg4LCAn dzgnOjp0c3ZlY3RvciksICg5LCAndzknOjp0c3ZlY3RvcikKKyAgXSk7CitEUk9QIFRBQkxF IGhhc2hlZF9zYW9wX3RibDsKLS0gCjIuNTQuMAoK --------------BDGvpDwy6ZKtu5sGY8N06XaK Content-Type: text/plain; charset=UTF-8; name="v0-0002-Show-hashed-ScalarArrayOpExpr-decision-in-EXPLAIN.patch" Content-Disposition: attachment; filename*0="v0-0002-Show-hashed-ScalarArrayOpExpr-decision-in-EXPLAIN.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSAyNDFkZWU4NWYxMDk0Y2U3OTc4NjFjZDFkMDgyNjkxZmQ3ZWM0MWFiIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiAiQW5kcmVpIFYuIExlcGlraG92IiA8bGVwaWhvdkBn bWFpbC5jb20+CkRhdGU6IEZyaSwgNSBKdW4gMjAyNiAxMTowNzoyMSArMDIwMApTdWJqZWN0 OiBbUEFUQ0ggdjAgMi8zXSBTaG93IGhhc2hlZCBTY2FsYXJBcnJheU9wRXhwciBkZWNpc2lv biBpbiBFWFBMQUlOCgpXaGVuIHRoZSBwbGFubmVyIGNvbnZlcnRzIGEgU2NhbGFyQXJyYXlP cEV4cHIgdG8gaGFzaC10YWJsZSBldmFsdWF0aW9uCihjb252ZXJ0X3Nhb3BfdG9faGFzaGVk X3Nhb3ApLCB0aGUgcmVzdWx0aW5nIG5vZGUgZGVwYXJzZXMgaWRlbnRpY2FsbHkKdG8gYSBs aW5lYXIgb25lLCBzbyBFWFBMQUlOIGdpdmVzIG5vIGluZGljYXRpb24gb2Ygd2hpY2ggc3Ry YXRlZ3kgdGhlCmV4ZWN1dG9yIHdpbGwgdXNlLiAgVGhhdCBtYWRlIHRoZSBoYXNoZWQgcGF0 aCBpbnZpc2libGUgYW5kIGF3a3dhcmQgdG8KdGVzdC4KLS0tCiBzcmMvYmFja2VuZC91dGls cy9hZHQvcnVsZXV0aWxzLmMgICAgICAgICB8IDEwICsrKysrKysrKy0KIHNyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvZXhwcmVzc2lvbnMub3V0IHwgIDkgKysrKysrKysrCiBzcmMvdGVz dC9yZWdyZXNzL3NxbC9leHByZXNzaW9ucy5zcWwgICAgICB8ICAzICsrKwogMyBmaWxlcyBj aGFuZ2VkLCAyMSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCgpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMv YWR0L3J1bGV1dGlscy5jCmluZGV4IDg4ZGU1YzA0ODFjLi4wNTY3YmEwODg2YSAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jCisrKyBiL3NyYy9iYWNr ZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYwpAQCAtOTk4OSwxMCArOTk4OSwxOCBAQCBnZXRf cnVsZV9leHByKE5vZGUgKm5vZGUsIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCwKIAkJCQlp ZiAoIVBSRVRUWV9QQVJFTihjb250ZXh0KSkKIAkJCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIo YnVmLCAnKCcpOwogCQkJCWdldF9ydWxlX2V4cHJfcGFyZW4oYXJnMSwgY29udGV4dCwgdHJ1 ZSwgbm9kZSk7Ci0JCQkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIgJXMgJXMgKCIsCisKKwkJ CQkvKgorCQkJCSAqIFN1cmZhY2UgaGFzaGVkIGRlY2lzaW9uIGluIEVYUExBSU4uCisJCQkJ ICogaGFzaGZ1bmNpZCBpcyBvbmx5IGV2ZXIgc2V0IGluIGEgZmluaXNoZWQgcGxhbiB0cmVl LCBzbyB0aGlzCisJCQkJICogbmV2ZXIgYXBwZWFycyBpbiBkZXBhcnNlZCB2aWV3cywgcnVs ZXMsIG9yIG90aGVyIHN0b3JlZAorCQkJCSAqIGV4cHJlc3Npb25zLgorCQkJCSAqLworCQkJ CWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiICVzICVzJXMgKCIsCiAJCQkJCQkJCSBnZW5lcmF0 ZV9vcGVyYXRvcl9uYW1lKGV4cHItPm9wbm8sCiAJCQkJCQkJCQkJCQkJCWV4cHJUeXBlKGFy ZzEpLAogCQkJCQkJCQkJCQkJCQlnZXRfYmFzZV9lbGVtZW50X3R5cGUoZXhwclR5cGUoYXJn MikpKSwKKwkJCQkJCQkJIE9pZElzVmFsaWQoZXhwci0+aGFzaGZ1bmNpZCkgPyAiaGFzaGVk ICIgOiAiIiwKIAkJCQkJCQkJIGV4cHItPnVzZU9yID8gIkFOWSIgOiAiQUxMIik7CiAJCQkJ Z2V0X3J1bGVfZXhwcl9wYXJlbihhcmcyLCBjb250ZXh0LCB0cnVlLCBub2RlKTsKIApkaWZm IC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9leHByZXNzaW9ucy5vdXQgYi9z cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2V4cHJlc3Npb25zLm91dAppbmRleCBjMzU1ODNj YjJlYS4uOWQ0ZGI5YzNiMmEgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvZXhwcmVzc2lvbnMub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZXhw cmVzc2lvbnMub3V0CkBAIC0zMjcsNiArMzI3LDE1IEBAIHNlbGVjdCByZXR1cm5fdGV4dF9p bnB1dCgnYScpIG5vdCBpbiAoJ2EnLCAnYicsICdjJywgJ2QnLCAnZScsICdmJywgJ2cnLCAn aCcsICdpCiAgZgogKDEgcm93KQogCistLSBDaGVjayB0aGEgZXhwbGFpbiBtYXJrcyB0aGUg aGFzaGVkIGRlY2lzaW9uLgorZXhwbGFpbiAodmVyYm9zZSwgY29zdHMgb2ZmKQorc2VsZWN0 IHJldHVybl9pbnRfaW5wdXQoMSkgaW4gKDEwLCA5LCAyLCA4LCAzLCA3LCA0LCA2LCA1LCAx KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgUmVzdWx0CisgICBPdXRwdXQ6IChyZXR1cm5faW50X2lucHV0KDEp ID0gaGFzaGVkIEFOWSAoJ3sxMCw5LDIsOCwzLDcsNCw2LDUsMX0nOjppbnRlZ2VyW10pKQor KDIgcm93cykKKwogcm9sbGJhY2s7CiAtLSBUZXN0IHdpdGggbm9uLXN0cmljdCBlcXVhbGl0 eSBmdW5jdGlvbi4KIC0tIFdlIG5lZWQgdG8gY3JlYXRlIG91ciBvd24gdHlwZSBmb3IgdGhp cy4KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2V4cHJlc3Npb25zLnNxbCBi L3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2V4cHJlc3Npb25zLnNxbAppbmRleCAwODY5MTg3Nzkw Mi4uZmU5YzMzMDM2MWIgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2V4cHJl c3Npb25zLnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9leHByZXNzaW9ucy5zcWwK QEAgLTEzMSw2ICsxMzEsOSBAQCBzZWxlY3QgcmV0dXJuX2ludF9pbnB1dCgxKSBub3QgaW4g KG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bAogc2VsZWN0 IHJldHVybl9pbnRfaW5wdXQobnVsbDo6aW50KSBub3QgaW4gKDEwLCA5LCAyLCA4LCAzLCA3 LCA0LCA2LCA1LCAxKTsKIHNlbGVjdCByZXR1cm5faW50X2lucHV0KG51bGw6OmludCkgbm90 IGluICgxMCwgOSwgMiwgOCwgMywgNywgNCwgNiwgNSwgbnVsbCk7CiBzZWxlY3QgcmV0dXJu X3RleHRfaW5wdXQoJ2EnKSBub3QgaW4gKCdhJywgJ2InLCAnYycsICdkJywgJ2UnLCAnZics ICdnJywgJ2gnLCAnaScsICdqJyk7CistLSBDaGVjayB0aGEgZXhwbGFpbiBtYXJrcyB0aGUg aGFzaGVkIGRlY2lzaW9uLgorZXhwbGFpbiAodmVyYm9zZSwgY29zdHMgb2ZmKQorc2VsZWN0 IHJldHVybl9pbnRfaW5wdXQoMSkgaW4gKDEwLCA5LCAyLCA4LCAzLCA3LCA0LCA2LCA1LCAx KTsKIAogcm9sbGJhY2s7CiAKLS0gCjIuNTQuMAoK --------------BDGvpDwy6ZKtu5sGY8N06XaK Content-Type: text/plain; charset=UTF-8; name="v0-0003-Recover-hashed-SAOP-for-anonymous-records-with-ha.patch" Content-Disposition: attachment; filename*0="v0-0003-Recover-hashed-SAOP-for-anonymous-records-with-ha.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSAzZDY3ZDBiMjExNGIwYzBhYTI3MTYwNjc2N2FkNmU4YjMzYzQ4ZDEwIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiAiQW5kcmVpIFYuIExlcGlraG92IiA8bGVwaWhvdkBn bWFpbC5jb20+CkRhdGU6IEZyaSwgNSBKdW4gMjAyNiAxNDoxNDoxNSArMDAwMApTdWJqZWN0 OiBbUEFUQ0ggdjAgMy8zXSBSZWNvdmVyIGhhc2hlZCBTQU9QIGZvciBhbm9ueW1vdXMgcmVj b3JkcyB3aXRoCiBoYXNoYWJsZSBjb2x1bW5zCgpUaGUgcHJldmlvdXMgY29tbWl0IHJvdXRl ZCByZWNvcmRfZXEgdGhyb3VnaCBvcF9oYXNoam9pbmFibGUoKSwgd2hpY2gKZml4ZWQgdGhl IHJ1bnRpbWUgZmFpbHVyZSBvbiBjb21wb3NpdGVzIHdpdGggbm9uLWhhc2hhYmxlIGNvbHVt bnMgYnV0CmFsc28gZGlzYWJsZWQgaGFzaGluZyBmb3IgYWxsIGFub255bW91cy1SRUNPUkQg U0FPUHM6IHRoZSB0eXBjYWNoZQpyZWZ1c2VzIHRvIHZvdWNoIGZvciBiYXJlIFJFQ09SRCwg c28gb3BfaGFzaGpvaW5hYmxlKCkgcmV0dXJucyBmYWxzZQpldmVuIHdoZW4gZXZlcnkgY29s dW1uIGlzIGhhc2hhYmxlLiAgVGhlIGNvbW1vbiAiKGEsIGIpID0gQU5ZICguLi4pIgppZGlv bSB0aHVzIHJlZ3Jlc3NlZCB0byBhIGxpbmVhciBzZWFyY2guCgpBIGhhc2hlZCBTQU9QIGFs d2F5cyBoYXMgdGhlIGFycmF5IGFzIGEgQ29uc3QsIHNvIHVubGlrZSB0aGUgc3ViLVNFTEVD VApjYXNlIGluIGhhc2hfb2tfb3BlcmF0b3IoKSB3ZSBjYW4gZXhhbWluZSB0aGUgYWN0dWFs IGRhdGE6IHJlc29sdmUgdGhlCmNvbmNyZXRlIHJvd3R5cGUgb2YgZXZlcnkgYXJyYXkgZWxl bWVudCBhbmQgcmUtZW5hYmxlIGhhc2hpbmcgd2hlbiBhbGwKdGhlaXIgY29sdW1uIHR5cGVz IGFyZSBoYXNoYWJsZS4gIFRoZSByb3d0eXBlIGlzIGxvb2tlZCB1cCB3aXRoIHRoZQpuby1l cnJvciB2YXJpYW50IHNvIGFuIHVucmVnaXN0ZXJlZCB0eXBtb2QgZGVncmFkZXMgdG8gYSBs aW5lYXIgc2VhcmNoCnJhdGhlciB0aGFuIGFuIEVSUk9SLgotLS0KIHNyYy9iYWNrZW5kL29w dGltaXplci91dGlsL2NsYXVzZXMuYyAgICAgIHwgMTI4ICsrKysrKysrKysrKysrKysrKysr Ky0KIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZXhwcmVzc2lvbnMub3V0IHwgIDEwICsr CiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9leHByZXNzaW9ucy5zcWwgICAgICB8ICAgNSArCiAz IGZpbGVzIGNoYW5nZWQsIDEzOCBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQoKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL2NsYXVzZXMuYyBiL3NyYy9i YWNrZW5kL29wdGltaXplci91dGlsL2NsYXVzZXMuYwppbmRleCBkNDRmNjc0ZGM3Ni4uYmJi OGI3YzNiNTkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL2NsYXVz ZXMuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9jbGF1c2VzLmMKQEAgLTUy LDYgKzUyLDcgQEAKICNpbmNsdWRlICJyZXdyaXRlL3Jld3JpdGVNYW5pcC5oIgogI2luY2x1 ZGUgInRjb3AvdGNvcHByb3QuaCIKICNpbmNsdWRlICJ1dGlscy9hY2wuaCIKKyNpbmNsdWRl ICJ1dGlscy9hcnJheS5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVk ZSAidXRpbHMvZGF0dW0uaCIKICNpbmNsdWRlICJ1dGlscy9mbWdyb2lkcy5oIgpAQCAtMjUz NSwyMSArMjUzNiwxMzYgQEAgY29udmVydF9zYW9wX3RvX2hhc2hlZF9zYW9wKE5vZGUgKm5v ZGUpCiAJKHZvaWQpIGNvbnZlcnRfc2FvcF90b19oYXNoZWRfc2FvcF93YWxrZXIobm9kZSwg TlVMTCk7CiB9CiAKKy8qCisgKiByZWNvcmRfY29uc3RfYXJyYXlfaXNfaGFzaGFibGUKKyAq CQlBcmUgYWxsIGNvbHVtbiB0eXBlcyBvZiBldmVyeSBlbGVtZW50IG9mIGEgY29uc3RhbnQg cmVjb3JkW10gYXJyYXkKKyAqCQloYXNoYWJsZT8KKyAqCisgKiBVc2VkIHRvIHJlY292ZXIg aGFzaGluZyBmb3IgYW4gYW5vbnltb3VzLVJFQ09SRCBTY2FsYXJBcnJheU9wRXhwci4gIFRo ZQorICogdHlwY2FjaGUgZGVsaWJlcmF0ZWx5IHJlZnVzZXMgdG8gcmVwb3J0IGJhcmUgUkVD T1JEIGFzIGZpZWxkLWhhc2hhYmxlCisgKiBiZWNhdXNlIGl0IGNhbm5vdCBrbm93IHRoZSBj b2x1bW5zIG9mIGFuIGFyYml0cmFyeSBhbm9ueW1vdXMgcmVjb3JkIChzZWUKKyAqIGNhY2hl X3JlY29yZF9maWVsZF9wcm9wZXJ0aWVzKCkpLiAgQnV0IGEgaGFzaGVkIFNBT1AgYWx3YXlz IGhhcyB0aGUgYXJyYXkKKyAqIGFzIGEgQ29uc3QsIHNvIGhlcmUgd2UgZG8gaGF2ZSB0aGUg Y29uY3JldGUgcmVjb3JkcyBpbiBoYW5kOiByZXNvbHZlIGVhY2gKKyAqIGVsZW1lbnQncyBh Y3R1YWwgcm93dHlwZSBhbmQgY2hlY2sgdGhhdCBldmVyeSAobm9uLWRyb3BwZWQpIGNvbHVt biB0eXBlIGhhcworICogYSBoYXNoIGZ1bmN0aW9uLiAgSWYgc28sIGhhc2hfcmVjb3JkKCkg Y2Fubm90IGZhaWwgb24gdGhpcyBhcnJheS4KKyAqCisgKiBXZSBleGFtaW5lIGV2ZXJ5IGVs ZW1lbnQsIG5vdCBqdXN0IHRoZSBmaXJzdDogYW4gYXJyYXkgb2YgUkVDT1JEIGlzIHVuaWZv cm0KKyAqIG9ubHkgaW4gZWxlbWVudCB0eXBlLCBhbmQgaW5kaXZpZHVhbCBlbGVtZW50cyBt YXkgY2FycnkgZGlmZmVyZW50IGJsZXNzZWQKKyAqIHJvd3R5cGVzIChkaWZmZXJlbnQgdHlw bW9kcykuICBBIGxhdGVyIGVsZW1lbnQgd2l0aCBhIG5vbi1oYXNoYWJsZSBjb2x1bW4KKyAq IHdvdWxkIG90aGVyd2lzZSB0cmlwIHRoZSB2ZXJ5IGZhaWx1cmUgdGhpcyBndWFyZHMgYWdh aW5zdC4KKyAqCisgKiBUaGUgbGVmdC1oYW5kIGlucHV0IG5lZWQgbm90IGJlIGV4YW1pbmVk IHNlcGFyYXRlbHkuICByZWNvcmRfZXEoKSBjb21wYXJlcworICogYnkgcGh5c2ljYWwgY29s dW1ucyBhbmQgZXJyb3JzIG91dCBvbiBkaXNzaW1pbGFyIGNvbHVtbiB0eXBlcywgc28gYXQg cnVudGltZQorICogdGhlIExIUyByZWNvcmQgZWl0aGVyIHNoYXJlcyB0aGUgYXJyYXkgZWxl bWVudHMnIGNvbHVtbiBsYXlvdXQgKGhlbmNlIGlzCisgKiBlcXVhbGx5IGhhc2hhYmxlKSBv ciB0aGUgY29tcGFyaXNvbiBlcnJvcnMgcmVnYXJkbGVzcyBvZiBoYXNoaW5nLgorICovCitz dGF0aWMgYm9vbAorcmVjb3JkX2NvbnN0X2FycmF5X2lzX2hhc2hhYmxlKENvbnN0ICphcnJh eUNvbnN0KQoreworCUFycmF5VHlwZSAgKmFycjsKKwlpbnQxNgkJZWxtbGVuOworCWJvb2wJ CWVsbWJ5dmFsOworCWNoYXIJCWVsbWFsaWduOworCURhdHVtCSAgICplbGVtczsKKwlib29s CSAgICpudWxsczsKKwlpbnQJCQluZWxlbXM7CisJYm9vbAkJcmVzdWx0ID0gdHJ1ZTsKKwlp bnQzMgkJbGFzdFR5cG1vZCA9IC0xOworCU9pZAkJCWxhc3RUeXBlID0gSW52YWxpZE9pZDsK KworCUFzc2VydChhcnJheUNvbnN0ICE9IE5VTEwgJiYgIWFycmF5Q29uc3QtPmNvbnN0aXNu dWxsKTsKKworCWFyciA9IERhdHVtR2V0QXJyYXlUeXBlUChhcnJheUNvbnN0LT5jb25zdHZh bHVlKTsKKwlpZiAoQVJSX0VMRU1UWVBFKGFycikgIT0gUkVDT1JET0lEKQorCQlyZXR1cm4g ZmFsc2U7CisKKwlnZXRfdHlwbGVuYnl2YWxhbGlnbihSRUNPUkRPSUQsICZlbG1sZW4sICZl bG1ieXZhbCwgJmVsbWFsaWduKTsKKwlkZWNvbnN0cnVjdF9hcnJheShhcnIsIFJFQ09SRE9J RCwgZWxtbGVuLCBlbG1ieXZhbCwgZWxtYWxpZ24sCisJCQkJCSAgJmVsZW1zLCAmbnVsbHMs ICZuZWxlbXMpOworCisJZm9yIChpbnQgaSA9IDA7IGkgPCBuZWxlbXMgJiYgcmVzdWx0OyBp KyspCisJeworCQlIZWFwVHVwbGVIZWFkZXIgcmVjOworCQlPaWQJCQl0dXBUeXBlOworCQlp bnQzMgkJdHVwVHlwbW9kOworCQlUdXBsZURlc2MJdHVwZGVzYzsKKworCQlpZiAobnVsbHNb aV0pCisJCQljb250aW51ZTsKKworCQlyZWMgPSBEYXR1bUdldEhlYXBUdXBsZUhlYWRlcihl bGVtc1tpXSk7CisJCXR1cFR5cGUgPSBIZWFwVHVwbGVIZWFkZXJHZXRUeXBlSWQocmVjKTsK KwkJdHVwVHlwbW9kID0gSGVhcFR1cGxlSGVhZGVyR2V0VHlwTW9kKHJlYyk7CisKKwkJLyog U2tpcCB0aGUgcm93dHlwZSBsb29rdXAgd2hlbiB0aGlzIGVsZW1lbnQgbWF0Y2hlcyB0aGUg cHJldmlvdXMgb25lICovCisJCWlmICh0dXBUeXBlID09IGxhc3RUeXBlICYmIHR1cFR5cG1v ZCA9PSBsYXN0VHlwbW9kKQorCQkJY29udGludWU7CisJCWxhc3RUeXBlID0gdHVwVHlwZTsK KwkJbGFzdFR5cG1vZCA9IHR1cFR5cG1vZDsKKworCQkvKgorCQkgKiBVc2UgdGhlIG5vLWVy cm9yIHZhcmlhbnQ6IGFuIHVucmVnaXN0ZXJlZCBibGVzc2VkIHR5cG1vZCBtdXN0IG5ldmVy CisJCSAqIHR1cm4gdGhpcyBwbGFubmVyLXRpbWUgb3B0aW1pemF0aW9uIGRlY2lzaW9uIGlu dG8gYW4gRVJST1IuICBUcmVhdCBhCisJCSAqIG1pc3NpbmcgdHVwZGVzYyBhcyAibm90IGhh c2hhYmxlIiBhbmQgZmFsbCBiYWNrIHRvIGEgbGluZWFyIHNlYXJjaC4KKwkJICovCisJCXR1 cGRlc2MgPSBsb29rdXBfcm93dHlwZV90dXBkZXNjX25vZXJyb3IodHVwVHlwZSwgdHVwVHlw bW9kLCB0cnVlKTsKKwkJaWYgKHR1cGRlc2MgPT0gTlVMTCkKKwkJeworCQkJcmVzdWx0ID0g ZmFsc2U7CisJCQlicmVhazsKKwkJfQorCQlmb3IgKGludCBqID0gMDsgaiA8IHR1cGRlc2Mt Pm5hdHRzOyBqKyspCisJCXsKKwkJCUZvcm1fcGdfYXR0cmlidXRlIGF0dCA9IFR1cGxlRGVz Y0F0dHIodHVwZGVzYywgaik7CisJCQlUeXBlQ2FjaGVFbnRyeSAqZmllbGRlbnRyeTsKKwor CQkJaWYgKGF0dC0+YXR0aXNkcm9wcGVkKQorCQkJCWNvbnRpbnVlOworCQkJZmllbGRlbnRy eSA9IGxvb2t1cF90eXBlX2NhY2hlKGF0dC0+YXR0dHlwaWQsIFRZUEVDQUNIRV9IQVNIX1BS T0MpOworCQkJaWYgKCFPaWRJc1ZhbGlkKGZpZWxkZW50cnktPmhhc2hfcHJvYykpCisJCQl7 CisJCQkJcmVzdWx0ID0gZmFsc2U7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJUmVsZWFz ZVR1cGxlRGVzYyh0dXBkZXNjKTsKKwl9CisKKwlwZnJlZShlbGVtcyk7CisJcGZyZWUobnVs bHMpOworCXJldHVybiByZXN1bHQ7Cit9CisKIC8qCiAgKiBzYW9wX2hhc2hhYmxlX2Zvcl90 eXBlCiAgKgkJQ2FuIGEgaGFzaGVkIFNjYWxhckFycmF5T3BFeHByIHNhZmVseSB1c2UgZXF1 YWxpdHkgb3BlcmF0b3IgJ2Vxb3AnCi0gKgkJZm9yIGxlZnQtaGFuZCBpbnB1dCB0eXBlICds ZWZ0dHlwZSc/CisgKgkJZm9yIGxlZnQtaGFuZCBpbnB1dCB0eXBlICdsZWZ0dHlwZScgb3Zl ciBjb25zdGFudCBhcnJheSAnYXJyYXlDb25zdCc/CiAgKgogICogZ2V0X29wX2hhc2hfZnVu Y3Rpb25zKCkgcmVwb3J0cyByZWNvcmRfZXEgYW5kIGFycmF5X2VxIGFzIGhhc2hhYmxlCiAg KiB1bmNvbmRpdGlvbmFsbHkuICBCdXQgaGFzaGFiaWxpdHkgYWN0dWFsbHkgZGVwZW5kcyBv biB0aGUgc3BlY2lmaWMgaW5wdXQKICAqIHR5cGU6IGV2ZXJ5IGNvbHVtbi9lbGVtZW50IHR5 cGUgbXVzdCBpdHNlbGYgYmUgaGFzaGFibGUuICBSZS1jaGVjayBzdWNoCiAgKiBvcGVyYXRv cnMgdGhyb3VnaCBvcF9oYXNoam9pbmFibGUoKS4KKyAqCisgKiBvcF9oYXNoam9pbmFibGUo KSBjb25zZXJ2YXRpdmVseSByZXR1cm5zIGZhbHNlIGZvciBhbm9ueW1vdXMgUkVDT1JELCBz aW5jZQorICogdGhlIHR5cGNhY2hlIGNhbm5vdCBpbnNwZWN0IGFuIGFyYml0cmFyeSByZWNv cmQncyBjb2x1bW5zLiAgSW4gdGhhdCBvbmUgY2FzZQorICogd2UgaGF2ZSBtb3JlIGluZm9y bWF0aW9uIHRoYW4gdGhlIHR5cGNhY2hlIC0tIHRoZSBjb25zdGFudCBhcnJheSBpdHNlbGYg LS0KKyAqIHNvIHdlIGV4YW1pbmUgdGhlIGFjdHVhbCBlbGVtZW50IHJvd3R5cGVzIGFuZCBh bGxvdyBoYXNoaW5nIHdoZW4gdGhleSBhcmUKKyAqIGFsbCBoYXNoYWJsZS4KICAqLwogc3Rh dGljIGJvb2wKLXNhb3BfaGFzaGFibGVfZm9yX3R5cGUoT2lkIGVxb3AsIE9pZCBsZWZ0dHlw ZSkKK3Nhb3BfaGFzaGFibGVfZm9yX3R5cGUoT2lkIGVxb3AsIE9pZCBsZWZ0dHlwZSwgQ29u c3QgKmFycmF5Q29uc3QpCiB7Ci0JaWYgKGVxb3AgPT0gUkVDT1JEX0VRX09QIHx8IGVxb3Ag PT0gQVJSQVlfRVFfT1ApCisJaWYgKGVxb3AgPT0gQVJSQVlfRVFfT1ApCiAJCXJldHVybiBv cF9oYXNoam9pbmFibGUoZXFvcCwgbGVmdHR5cGUpOworCWlmIChlcW9wID09IFJFQ09SRF9F UV9PUCkKKwl7CisJCWlmIChvcF9oYXNoam9pbmFibGUoZXFvcCwgbGVmdHR5cGUpKQorCQkJ cmV0dXJuIHRydWU7CisJCS8qIFJlY292ZXIgaGFzaGluZyBmb3IgYW5vbnltb3VzIFJFQ09S RCB3aXRoIGhhc2hhYmxlIGNvbHVtbnMuICovCisJCWlmIChsZWZ0dHlwZSA9PSBSRUNPUkRP SUQpCisJCQlyZXR1cm4gcmVjb3JkX2NvbnN0X2FycmF5X2lzX2hhc2hhYmxlKGFycmF5Q29u c3QpOworCQlyZXR1cm4gZmFsc2U7CisJfQogCXJldHVybiB0cnVlOwogfQogCkBAIC0yNTc0 LDcgKzI2OTAsOCBAQCBjb252ZXJ0X3Nhb3BfdG9faGFzaGVkX3Nhb3Bfd2Fsa2VyKE5vZGUg Km5vZGUsIHZvaWQgKmNvbnRleHQpCiAJCQkJaWYgKGdldF9vcF9oYXNoX2Z1bmN0aW9ucyhz YW9wLT5vcG5vLCAmbGVmdGhhc2hmdW5jLCAmcmlnaHRoYXNoZnVuYykgJiYKIAkJCQkJbGVm dGhhc2hmdW5jID09IHJpZ2h0aGFzaGZ1bmMgJiYKIAkJCQkJc2FvcF9oYXNoYWJsZV9mb3Jf dHlwZShzYW9wLT5vcG5vLAotCQkJCQkJCQkJCSAgIGV4cHJUeXBlKGxpbml0aWFsKHNhb3At PmFyZ3MpKSkpCisJCQkJCQkJCQkJICAgZXhwclR5cGUobGluaXRpYWwoc2FvcC0+YXJncykp LAorCQkJCQkJCQkJCSAgIChDb25zdCAqKSBhcnJheWFyZykpCiAJCQkJewogCQkJCQlEYXR1 bQkJYXJyZGF0dW0gPSAoKENvbnN0ICopIGFycmF5YXJnKS0+Y29uc3R2YWx1ZTsKIAkJCQkJ QXJyYXlUeXBlICAqYXJyID0gKEFycmF5VHlwZSAqKSBEYXR1bUdldFBvaW50ZXIoYXJyZGF0 dW0pOwpAQCAtMjYwOCw3ICsyNzI1LDggQEAgY29udmVydF9zYW9wX3RvX2hhc2hlZF9zYW9w X3dhbGtlcihOb2RlICpub2RlLCB2b2lkICpjb250ZXh0KQogCQkJCQlnZXRfb3BfaGFzaF9m dW5jdGlvbnMobmVnYXRvciwgJmxlZnRoYXNoZnVuYywgJnJpZ2h0aGFzaGZ1bmMpICYmCiAJ CQkJCWxlZnRoYXNoZnVuYyA9PSByaWdodGhhc2hmdW5jICYmCiAJCQkJCXNhb3BfaGFzaGFi bGVfZm9yX3R5cGUobmVnYXRvciwKLQkJCQkJCQkJCQkgICBleHByVHlwZShsaW5pdGlhbChz YW9wLT5hcmdzKSkpKQorCQkJCQkJCQkJCSAgIGV4cHJUeXBlKGxpbml0aWFsKHNhb3AtPmFy Z3MpKSwKKwkJCQkJCQkJCQkgICAoQ29uc3QgKikgYXJyYXlhcmcpKQogCQkJCXsKIAkJCQkJ RGF0dW0JCWFycmRhdHVtID0gKChDb25zdCAqKSBhcnJheWFyZyktPmNvbnN0dmFsdWU7CiAJ CQkJCUFycmF5VHlwZSAgKmFyciA9IChBcnJheVR5cGUgKikgRGF0dW1HZXRQb2ludGVyKGFy cmRhdHVtKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZXhwcmVz c2lvbnMub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9leHByZXNzaW9ucy5vdXQK aW5kZXggOWQ0ZGI5YzNiMmEuLjk1OGQ5MmUwOTU2IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL2V4cHJlc3Npb25zLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL2V4cHJlc3Npb25zLm91dApAQCAtMzM1LDYgKzMzNSwxNiBAQCBzZWxlY3Qg cmV0dXJuX2ludF9pbnB1dCgxKSBpbiAoMTAsIDksIDIsIDgsIDMsIDcsIDQsIDYsIDUsIDEp OwogIFJlc3VsdAogICAgT3V0cHV0OiAocmV0dXJuX2ludF9pbnB1dCgxKSA9IGhhc2hlZCBB TlkgKCd7MTAsOSwyLDgsMyw3LDQsNiw1LDF9Jzo6aW50ZWdlcltdKSkKICgyIHJvd3MpCist LSBBbiBhbm9ueW1vdXMtcmVjb3JkIFNBT1Agd2hvc2UgY29sdW1ucyBhcmUgYWxsIGhhc2hh YmxlIGFsc28gaGFzaGVzOiB0aGUKKy0tIHBsYW5uZXIgY2Fubm90IHJlbHkgb24gdGhlIHR5 cGNhY2hlIGZvciBiYXJlIFJFQ09SRCwgc28gaXQgaW5zcGVjdHMgdGhlCistLSBjb25zdGFu dCBhcnJheSdzIGFjdHVhbCByb3d0eXBlIGFuZCByZWNvdmVycyB0aGUgaGFzaGVkIHBsYW4u CitleHBsYWluICh2ZXJib3NlLCBjb3N0cyBvZmYpCitzZWxlY3QgKHJldHVybl9pbnRfaW5w dXQoMSksIHJldHVybl9pbnRfaW5wdXQoMikpID0gYW55IChhcnJheVsoMSwyKSwoMyw0KSwo NSw2KSwoNyw4KSwoOSwxMCksKDExLDEyKSwoMTMsMTQpLCgxNSwxNiksKDE3LDE4KV0pOwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIFJlc3VsdAorICAgT3V0cHV0OiAoUk9XKHJldHVybl9pbnRf aW5wdXQoMSksIHJldHVybl9pbnRfaW5wdXQoMikpID0gaGFzaGVkIEFOWSAoJ3siKDEsMiki LCIoMyw0KSIsIig1LDYpIiwiKDcsOCkiLCIoOSwxMCkiLCIoMTEsMTIpIiwiKDEzLDE0KSIs IigxNSwxNikiLCIoMTcsMTgpIn0nOjpyZWNvcmRbXSkpCisoMiByb3dzKQogCiByb2xsYmFj azsKIC0tIFRlc3Qgd2l0aCBub24tc3RyaWN0IGVxdWFsaXR5IGZ1bmN0aW9uLgpkaWZmIC0t Z2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvZXhwcmVzc2lvbnMuc3FsIGIvc3JjL3Rlc3Qv cmVncmVzcy9zcWwvZXhwcmVzc2lvbnMuc3FsCmluZGV4IGZlOWMzMzAzNjFiLi5hOGRhZjE0 ZmZjNCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvZXhwcmVzc2lvbnMuc3Fs CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2V4cHJlc3Npb25zLnNxbApAQCAtMTM0LDYg KzEzNCwxMSBAQCBzZWxlY3QgcmV0dXJuX3RleHRfaW5wdXQoJ2EnKSBub3QgaW4gKCdhJywg J2InLCAnYycsICdkJywgJ2UnLCAnZicsICdnJywgJ2gnLCAnaQogLS0gQ2hlY2sgdGhhIGV4 cGxhaW4gbWFya3MgdGhlIGhhc2hlZCBkZWNpc2lvbi4KIGV4cGxhaW4gKHZlcmJvc2UsIGNv c3RzIG9mZikKIHNlbGVjdCByZXR1cm5faW50X2lucHV0KDEpIGluICgxMCwgOSwgMiwgOCwg MywgNywgNCwgNiwgNSwgMSk7CistLSBBbiBhbm9ueW1vdXMtcmVjb3JkIFNBT1Agd2hvc2Ug Y29sdW1ucyBhcmUgYWxsIGhhc2hhYmxlIGFsc28gaGFzaGVzOiB0aGUKKy0tIHBsYW5uZXIg Y2Fubm90IHJlbHkgb24gdGhlIHR5cGNhY2hlIGZvciBiYXJlIFJFQ09SRCwgc28gaXQgaW5z cGVjdHMgdGhlCistLSBjb25zdGFudCBhcnJheSdzIGFjdHVhbCByb3d0eXBlIGFuZCByZWNv dmVycyB0aGUgaGFzaGVkIHBsYW4uCitleHBsYWluICh2ZXJib3NlLCBjb3N0cyBvZmYpCitz ZWxlY3QgKHJldHVybl9pbnRfaW5wdXQoMSksIHJldHVybl9pbnRfaW5wdXQoMikpID0gYW55 IChhcnJheVsoMSwyKSwoMyw0KSwoNSw2KSwoNyw4KSwoOSwxMCksKDExLDEyKSwoMTMsMTQp LCgxNSwxNiksKDE3LDE4KV0pOwogCiByb2xsYmFjazsKIAotLSAKMi41NC4wCgo= --------------BDGvpDwy6ZKtu5sGY8N06XaK Content-Type: text/plain; charset=UTF-8; name="bug-hashed-saop.sql" Content-Disposition: attachment; filename="bug-hashed-saop.sql" Content-Transfer-Encoding: base64 CkNSRUFURSBUQUJMRSB0ZXN0IChhIGludCwgYiB0c3ZlY3Rvcik7CklOU0VSVCBJTlRPIHRl c3QgU0VMRUNUIGcsICgndycgfHwgZyk6OnRzdmVjdG9yIEZST00gZ2VuZXJhdGVfc2VyaWVz KDEsIDEwMDApIGc7CkFOQUxZWkUgdGVzdDsKCkVYUExBSU4gKEFOQUxZWkUsIENPU1RTIE9G RiwgVElNSU5HIE9GRiwgQlVGRkVSUyBPRkYsIFNVTU1BUlkgT0ZGKQpTRUxFQ1QgY291bnQo KikgRlJPTSB0ZXN0CldIRVJFIChhLGIpID0gQU5ZIChBUlJBWVsoMSwgJ3cxJzo6dHN2ZWN0 b3IpLCAoMiwgJ3cyJzo6dHN2ZWN0b3IpXSk7CgpFWFBMQUlOIChBTkFMWVpFLCBDT1NUUyBP RkYsIFRJTUlORyBPRkYsIEJVRkZFUlMgT0ZGLCBTVU1NQVJZIE9GRikKU0VMRUNUIGNvdW50 KCopIEZST00gdGVzdApXSEVSRSAoYSxiKSA9IEFOWSAoQVJSQVlbCiAgKDEsICd3MSc6OnRz dmVjdG9yKSwgKDIsICd3Mic6OnRzdmVjdG9yKSwgKDMsICd3Myc6OnRzdmVjdG9yKSwKICAo NCwgJ3c0Jzo6dHN2ZWN0b3IpLCAoNSwgJ3c1Jzo6dHN2ZWN0b3IpLCAoNiwgJ3c2Jzo6dHN2 ZWN0b3IpLAogICg3LCAndzcnOjp0c3ZlY3RvciksICg4LCAndzgnOjp0c3ZlY3RvciksICg5 LCAndzknOjp0c3ZlY3RvcikKICBdKTsKCi8qCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBBZ2dyZWdhdGUgKGFjdHVhbCByb3dzPTEuMDAgbG9v cHM9MSkKICAgLT4gIFNlcSBTY2FuIG9uIHRlc3QgKGFjdHVhbCByb3dzPTIuMDAgbG9vcHM9 MSkKICAgICAgICAgRmlsdGVyOiAoUk9XKGEsIGIpID0gQU5ZICgneyIoMSwnJ3cxJycpIiwi KDIsJyd3MicnKSJ9Jzo6cmVjb3JkW10pKQogICAgICAgICBSb3dzIFJlbW92ZWQgYnkgRmls dGVyOiA5OTgKIFBsYW5uaW5nIFRpbWU6IDAuMTE5IG1zCiBFeGVjdXRpb24gVGltZTogMC44 NTQgbXMKKDYgcm93cykKCkVSUk9SOiAgY291bGQgbm90IGlkZW50aWZ5IGEgaGFzaCBmdW5j dGlvbiBmb3IgdHlwZSB0c3ZlY3RvcgoqLw== --------------BDGvpDwy6ZKtu5sGY8N06XaK--