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 1wFh4m-005Rat-29 for pgsql-hackers@arkaria.postgresql.org; Wed, 22 Apr 2026 23:33:49 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wFh4j-00Fi5X-2b for pgsql-hackers@arkaria.postgresql.org; Wed, 22 Apr 2026 23:33:45 +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 1wFh4j-00Fi5O-0e for pgsql-hackers@lists.postgresql.org; Wed, 22 Apr 2026 23:33:45 +0000 Received: from mail-wr1-x430.google.com ([2a00:1450:4864:20::430]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wFh4g-00000002KH3-3V65 for pgsql-hackers@postgresql.org; Wed, 22 Apr 2026 23:33:44 +0000 Received: by mail-wr1-x430.google.com with SMTP id ffacd0b85a97d-43cf8d550bdso5296844f8f.0 for ; Wed, 22 Apr 2026 16:33:43 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1776900821; cv=none; d=google.com; s=arc-20240605; b=QbGRUaMn9qXr+bnz8ZIlcX2X7jAt78qBPYWj/RJhkM+zhGKXGeyUdfir8y/b+OLFaf VxhrC7YIA4PaaJ6ampqhHEMq9NlRyUE/RIxt1iE6UMkOG/cdITBy59W3Iiepsabzuvr9 rKizvxnGnrp2JMJMxdgMLmXhC9hrp0kQjf9eP9oqDFa3RcREzeaQiSKOrhizZ1H/F5Y5 2FVF/WMJZUF1wfqN85itj1ELCYtxZDDsQjEKht38hF+JTPGWHQJ0CKqEbhB64otW2zYG UQEWzm3Vb1hvj+Gr49VUtpjhRLquDHz+jjnx/vEhZqvzYoX6OJxZZAD3nK5bpHg372wz dAiA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=z3v8FxayC/5Q3otzgFslWGnAlSBo5EffaA3T2lhA9f0=; fh=fwhEmq/mwFwAqqO5QYtDklFO2aBO7bGeoiEvA/gwRR8=; b=cnUR8khrCF5wycaYMxketF4OwSvZnZb+cPYUt9895mU2g2+Hbo/agdsMtKWoLROLdy 3OmJoaDCvMeUaIVyu/Oqo3V1cSnT202KHLtngsnt7P0GSy7KsNYLpdSYrdWXfrgOIlpD b1Be36aSKJhsX7/q5kSP46KN0WsI1yc1NvoepprhOt5hVfxGVY49dmJ5uIV88xzMfDOJ oTUE0mKbnt52de4Uxa+oGepI8aXTBK8JadFvy532enOLEmY/c+Om6cl1lKjyxv6/yBAs PJ8BKf/9eeRjsi+UZI5ZYaLa5AiDQy2mSKmRF/F58lPyMMWd+fDGcbsnuLKy+4mwOQ6r J3YQ==; darn=postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1776900821; x=1777505621; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=z3v8FxayC/5Q3otzgFslWGnAlSBo5EffaA3T2lhA9f0=; b=oRHi4cMqc/BYonIwrEO927CqJTVpyI2kxV3gPFbz9HK3j9/bcrBHxJGhwKJq/dOucp FY472MsL/SngKYbJ6jdMadDynew9/E9aRcdQld6hvdCRaWKIR+iOwvWpzLZm2FEmzcMy +cP5JqryNSRhPnajN4x2Iz0rbedPxyguEwrid2QVOvbOCYZAsmR0wMr7U4653Ua16wgp eRCoSXYEae7RP/KZsUXTeKbB54m1ZhvD2LipbNa8C4MESa67P8JrAvj2uhZ/N01t9km8 mdoanhUt2njMtDkoSTD47F4cUKOiE4bm7wtfGAryPbonKSiM3L+uzE7Mvlo4yzrH/or2 haEw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776900821; x=1777505621; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=z3v8FxayC/5Q3otzgFslWGnAlSBo5EffaA3T2lhA9f0=; b=b85yFVssQ0u7/MiYArkqDBqCGqNmPnlN1rct640DFf9AQdf51Lk6/NqCzbMbwYzo2E PBTxxLGOnc47UJotM4bQk1Dzn1IbF3lUcq/Q0SflApU/btQY9v47b1jwh9s9VqRExNaG 4gETL+Oia7NZi2SRNaECVFYSi7kxCYsK2iz5VO+vOqX4itdbR7PXyHYT5RVf15DYNJo1 UFlZkI5i1+X7WtpXvbsLubZY/WPSDPeMfrfOAmuPnsSqTcXm3+G007sx4tEO5SJ9Zytx Ti4IWRa8tAlfbtSnq4ARIPWtKHbfu8rxVflvVMs0+xvkKOA0QZJWdgSeVUvxbUzD3v3q iYYg== X-Gm-Message-State: AOJu0YznZzJx1AwwLUiWqgHb0I5lTLOaeAu7hl6X8xxcMsm8XOBM60+8 QIdWXZI48eI1ydUHOeca7w+zp5nUJTHLX6wKSGioh57D/3Ub+SyB4QtSLv2elCtmaiirJ5UoH8Q Pr4QGL3q6rsP8PD7otIixdqZeQqcVgaw= X-Gm-Gg: AeBDietaJTsC/TOshp0e0UlnVMKP+b7w5pTNb381x5iKcGi15b/lwNcLZoZcFmBj3NE h1jV/c8F+9bdN+aZ77jNSo7ncMbQdQGmwfn4Rn9x9s95PZ16Jbj/Zn+H9UXqEKWrBNdw/p2lCbG E091dkYPFvvYl8aFFnsolC6QauFxlTwIcgRqqu2NjwZaulTnaP48GQ8M7OGoW4aulOOHUA9+vhn KZ1h3Xtp4YsoGvc/qmwHDZ/OLQ6N9wpHA9dE1P3UxoYTgbB7+JmzIsUg5l0rMu8JYZMEXlJ/ZpS gIShXtHRlgbQREfGYJVYiCqp3LB5Cfby2pz0JtdYKnXNB9ADO8Y6zWD+QeolN+UCrzKKAeinDuI uukrBMOs= X-Received: by 2002:a05:6000:24c3:b0:43d:dd:8ca4 with SMTP id ffacd0b85a97d-43fe3dd33d4mr39100278f8f.14.1776900820751; Wed, 22 Apr 2026 16:33:40 -0700 (PDT) MIME-Version: 1.0 References: <5CDAD4B4-6DC6-4C31-8AC1-1F45EA6ED480@outlook.com> In-Reply-To: <5CDAD4B4-6DC6-4C31-8AC1-1F45EA6ED480@outlook.com> From: David Rowley Date: Thu, 23 Apr 2026 11:33:28 +1200 X-Gm-Features: AQROBzD6xpkMWFx7x-gW9z_svAwGYk0B-6tgAy6fruuh1Z9LlYd7ceNMZgozNZY Message-ID: Subject: Re: [PATCH] Fix hashed ScalarArrayOp semantics for NULL LHS with non-strict comparators To: Chengpeng Yan Cc: PostgreSQL-development , cca5507 , Tom Lane Content-Type: multipart/mixed; boundary="00000000000038f2d6065014f618" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000038f2d6065014f618 Content-Type: text/plain; charset="UTF-8" On Mon, 20 Apr 2026 at 18:17, Chengpeng Yan wrote: > It may also be > possible to cache the NULL-LHS outcome once per expression, since the > RHS array is constant in the hashed SAOP case, which might help reduce > the cost of that fallback. Yeah, it doesn't make sense to repeatedly perform a linear search over the array to check if NULL matches anything in the array. Let's just do that once when we build the hash table and reuse that cached value whenever we see a NULL. We can skip that step with strict functions since we'll short-circuit earlier. A patch for that is attached. > ChangAo's example also seems to expose a separate correctness issue. If > the comparator can return NULL even for non-NULL inputs, then a lookup > hit seems sufficient, but a miss is no longer enough to distinguish > FALSE for IN / TRUE for NOT IN from NULL. IMO it's unrealistic to assume we can do anything sane with an equality function that always returns NULL. > A conservative fix there would again be a linear fallback after miss, > which should recover the right semantics, but that case does seem much > more performance-sensitive. I really doubt it's worth troubling over that. If we did want to do something, then it would be more efficient to probe the hash table directly after we insert a Datum and verify we can find it again. If we can't find any value we just inserted, mark the entire table as broken and have it so we check for that and do a linear search. David --00000000000038f2d6065014f618 Content-Type: application/octet-stream; name="v3-0001-Fix-incorrect-logic-for-hashed-IN-NOT-IN-with-non.patch" Content-Disposition: attachment; filename="v3-0001-Fix-incorrect-logic-for-hashed-IN-NOT-IN-with-non.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_moaosvvb0 RnJvbSA1MzViZmY4MzVlZDI1YTEwYmRkYWMxNzQzMTA3MTY0YTZiYzc3NzdiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEYXZpZCBSb3dsZXkgPGRncm93bGV5QGdtYWlsLmNvbT4KRGF0 ZTogVGh1LCAyMyBBcHIgMjAyNiAxMToyOTo0OSArMTIwMApTdWJqZWN0OiBbUEFUQ0ggdjNdIEZp eCBpbmNvcnJlY3QgbG9naWMgZm9yIGhhc2hlZCBJTiAvIE5PVCBJTiB3aXRoIG5vbi1zdHJpY3QK IG9wZXJhdG9ycwoKRXhlY0V2YWxIYXNoZWRTY2FsYXJBcnJheU9wKCksIHdoZW4gdXNpbmcgYSBz dHJpY3QgZXF1YWxpdHkgZnVuY3Rpb24sCnBlcmZvcm1zIGEgc2hvcnQtY2lyY3VpdCB3aGVuIGxv b2tpbmcgdXAgTlVMTCB2YWx1ZXMuICBXaGVuIHRoZSBmdW5jdGlvbgppcyBub24tc3RyaWN0LCB0 aGUgY29kZSBpbmNvcnJlY3RseSBsb29rZWQgdXAgdGhlIGhhc2ggdGFibGUgZm9yIGEKemVyby12 YWx1ZWQgRGF0dW0sIHdoaWNoIGNvdWxkIGhhdmUgcmVzdWx0ZWQgaW4gYW4gYWNjaWRlbnRhbCB0 cnVlCnJldHVybiBpZiB0aGUgaGFzaCB0YWJsZSBjb250YWluZWQgemVybyB2YWx1ZWQgRGF0dW0s IG9yIGNvdWxkIHJlc3VsdAppbiBhIGNyYXNoIGZvciBub24tYnl2YWwgdHlwZXMuCgpIZXJlIHdl IGZpeCB0aGlzIGJ5IGFkZGluZyBhbiBleHRyYSBzdGVwIHdoZW4gd2UgYnVpbGQgdGhlIGhhc2gg dGFibGUgdG8KY2hlY2sgd2hhdCB0aGUgcmVzdWx0IG9mIGEgTlVMTCBsb29rdXAgd291bGQgYmUu ICBUaGlzIHJlcXVpcmVzIGxvb3BpbmcKb3ZlciB0aGUgYXJyYXkgYW5kIGNoZWNraW5nIHdoYXQg dGhlIG5vbi1oYXNoZWQgdmVyc2lvbiBvZiB0aGUgY29kZQp3b3VsZCBkby4gIFdlIGNhY2hlIHRo ZSByZXN1bHRzIG9mIHRoYXQgaW4gdGhlIGV4cHJlc3Npb24gc28gdGhhdCB3ZSBjYW4KcmV1c2Ug dGhlIHJlc3VsdCBhbnkgdGltZSB3ZSdyZSBhc2tlZCB0byBzZWFyY2ggZm9yIGEgTlVMTCB2YWx1 ZS4KCkl0J3MgaW1wb3J0YW50IHRvIG5vdGUgdGhhdCBub24tc3RyaWN0IGVxdWFsaXR5IGZ1bmN0 aW9ucyBhcmUgZnJlZSB0bwp0cmVhdCBhbnkgTlVMTCB2YWx1ZSBhcyBlcXVhbCB0byBhbnkgbm9u LU5VTEwgdmFsdWUuICBGb3IgZXhhbXBsZSwKc29tZW9uZSBtYXkgd2lzaCB0byBkZXNpZ24gYSB0 eXBlIHRoYXQgdHJlYXRzIGFuIGVtcHR5IHN0cmluZyBhbmQgTlVMTAphcyBlcXVhbC4KCkFsbCBi dWlsdC1pbiB0eXBlcyBoYXZlIHN0cmljdCBlcXVhbGl0eSBmdW5jdGlvbnMsIHNvIHRoaXMgY291 bGQgYWZmZWN0CmN1c3RvbSAvIHVzZXItZGVmaW5lZCB0eXBlcy4KCkF1dGhvcjogQ2hlbmdwZW5n IFlhbiA8Y2hlbmdwZW5nX3lhbkBvdXRsb29rLmNvbT4KUmV2aWV3ZWQtYnk6IERhdmlkIFJvd2xl eSA8ZGdyb3dsZXltbEBnbWFpbC5jb20+CkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20v QTE2MTg3QUUtMjM1OS00MjY1LTlGNUUtNzFEMDE1RUMyQjJEQG91dGxvb2suY29tCi0tLQogc3Jj L2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHJJbnRlcnAuYyAgICAgfCAxMTUgKysrKysrKysrLS0t CiBzcmMvaW5jbHVkZS9leGVjdXRvci9leGVjRXhwci5oICAgICAgICAgICB8ICAgNCArCiBzcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL2V4cHJlc3Npb25zLm91dCB8IDIwMyArKysrKysrKysrKysr KysrKystLS0tCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9leHByZXNzaW9ucy5zcWwgICAgICB8IDEx NCArKysrKysrKysrLS0KIDQgZmlsZXMgY2hhbmdlZCwgMzY4IGluc2VydGlvbnMoKyksIDY4IGRl bGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHBySW50 ZXJwLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwckludGVycC5jCmluZGV4IDNjNDg0 M2NkZTg2Li5lZmM5MTA5N2IxMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhl Y0V4cHJJbnRlcnAuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwckludGVycC5j CkBAIC0xNzgsNiArMTc4LDE0IEBAIHN0YXRpYyBEYXR1bSBFeGVjSnVzdEhhc2hJbm5lclZhclZp cnQoRXhwclN0YXRlICpzdGF0ZSwgRXhwckNvbnRleHQgKmVjb250ZXh0LCBiCiBzdGF0aWMgRGF0 dW0gRXhlY0p1c3RIYXNoT3V0ZXJWYXJTdHJpY3QoRXhwclN0YXRlICpzdGF0ZSwgRXhwckNvbnRl eHQgKmVjb250ZXh0LCBib29sICppc251bGwpOwogCiAvKiBleGVjdXRpb24gaGVscGVyIGZ1bmN0 aW9ucyAqLworc3RhdGljIHBnX2F0dHJpYnV0ZV9hbHdheXNfaW5saW5lIHZvaWQgRXhlY0V2YWxB cnJheUNvbXBhcmVJbnRlcm5hbChGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbywKKwkJCQkJCQkJCQkJ CQkJCQkJQXJyYXlUeXBlICphcnIsCisJCQkJCQkJCQkJCQkJCQkJCWludDE2IHR5cGxlbiwKKwkJ CQkJCQkJCQkJCQkJCQkJYm9vbCB0eXBieXZhbCwKKwkJCQkJCQkJCQkJCQkJCQkJY2hhciB0eXBh bGlnbiwKKwkJCQkJCQkJCQkJCQkJCQkJYm9vbCB1c2VPciwKKwkJCQkJCQkJCQkJCQkJCQkJRGF0 dW0gKnJlc3VsdCwKKwkJCQkJCQkJCQkJCQkJCQkJYm9vbCAqcmVzdWx0bnVsbCk7CiBzdGF0aWMg cGdfYXR0cmlidXRlX2Fsd2F5c19pbmxpbmUgdm9pZCBFeGVjQWdnUGxhaW5UcmFuc0J5VmFsKEFn Z1N0YXRlICphZ2dzdGF0ZSwKIAkJCQkJCQkJCQkJCQkJCSAgQWdnU3RhdGVQZXJUcmFucyBwZXJ0 cmFucywKIAkJCQkJCQkJCQkJCQkJCSAgQWdnU3RhdGVQZXJHcm91cCBwZXJncm91cCwKQEAgLTQw MzEsMTMgKzQwMzksNiBAQCBFeGVjRXZhbFNjYWxhckFycmF5T3AoRXhwclN0YXRlICpzdGF0ZSwg RXhwckV2YWxTdGVwICpvcCkKIAlpbnQJCQluaXRlbXM7CiAJRGF0dW0JCXJlc3VsdDsKIAlib29s CQlyZXN1bHRudWxsOwotCWludDE2CQl0eXBsZW47Ci0JYm9vbAkJdHlwYnl2YWw7Ci0JY2hhcgkJ dHlwYWxpZ247Ci0JdWludDgJCXR5cGFsaWduYnk7Ci0JY2hhcgkgICAqczsKLQl1aW50OAkgICAq Yml0bWFwOwotCWludAkJCWJpdG1hc2s7CiAKIAkvKgogCSAqIElmIHRoZSBhcnJheSBpcyBOVUxM IHRoZW4gd2UgcmV0dXJuIE5VTEwgLS0tIGl0J3Mgbm90IHZlcnkgbWVhbmluZ2Z1bApAQCAtNDA4 NiwxNCArNDA4Nyw0MyBAQCBFeGVjRXZhbFNjYWxhckFycmF5T3AoRXhwclN0YXRlICpzdGF0ZSwg RXhwckV2YWxTdGVwICpvcCkKIAkJb3AtPmQuc2NhbGFyYXJyYXlvcC5lbGVtZW50X3R5cGUgPSBB UlJfRUxFTVRZUEUoYXJyKTsKIAl9CiAKLQl0eXBsZW4gPSBvcC0+ZC5zY2FsYXJhcnJheW9wLnR5 cGxlbjsKLQl0eXBieXZhbCA9IG9wLT5kLnNjYWxhcmFycmF5b3AudHlwYnl2YWw7Ci0JdHlwYWxp Z24gPSBvcC0+ZC5zY2FsYXJhcnJheW9wLnR5cGFsaWduOwotCXR5cGFsaWduYnkgPSB0eXBhbGln bl90b19hbGlnbmJ5KHR5cGFsaWduKTsKKwlFeGVjRXZhbEFycmF5Q29tcGFyZUludGVybmFsKGZj aW5mbywKKwkJCQkJCQkJIGFyciwKKwkJCQkJCQkJIG9wLT5kLnNjYWxhcmFycmF5b3AudHlwbGVu LAorCQkJCQkJCQkgb3AtPmQuc2NhbGFyYXJyYXlvcC50eXBieXZhbCwKKwkJCQkJCQkJIG9wLT5k LnNjYWxhcmFycmF5b3AudHlwYWxpZ24sCisJCQkJCQkJCSB1c2VPciwKKwkJCQkJCQkJICZyZXN1 bHQsCisJCQkJCQkJCSAmcmVzdWx0bnVsbCk7CisKKwkqb3AtPnJlc3ZhbHVlID0gcmVzdWx0Owor CSpvcC0+cmVzbnVsbCA9IHJlc3VsdG51bGw7Cit9CisKKy8qCisgKiBTaGFyZWQgaGVscGVyIGZv ciBFeGVjRXZhbFNjYWxhckFycmF5T3AoKSBhbmQgdGhlIE5VTEwtTEhTIGZhbGxiYWNrIGZvcgor ICogbm9uLXN0cmljdCBFeGVjRXZhbEhhc2hlZFNjYWxhckFycmF5T3AoKS4KKyAqCisgKiBDYWxs ZXJzIG11c3QgaGFuZGxlIHRoZSBzdHJpY3QgTEhTLWlzLU5VTEw7IHJldHVybiBOVUxMIGZhc3Qg cGF0aCBwcmlvciB0bworICogY2FsbGluZyB0aGlzLgorICovCitzdGF0aWMgcGdfYXR0cmlidXRl X2Fsd2F5c19pbmxpbmUgdm9pZAorRXhlY0V2YWxBcnJheUNvbXBhcmVJbnRlcm5hbChGdW5jdGlv bkNhbGxJbmZvIGZjaW5mbywgQXJyYXlUeXBlICphcnIsCisJCQkJCQkJIGludDE2IHR5cGxlbiwg Ym9vbCB0eXBieXZhbCwgY2hhciB0eXBhbGlnbiwKKwkJCQkJCQkgYm9vbCB1c2VPciwgRGF0dW0g KnJlc3VsdCwgYm9vbCAqcmVzdWx0bnVsbCkKK3sKKwl1aW50OAkJdHlwYWxpZ25ieSA9IHR5cGFs aWduX3RvX2FsaWduYnkodHlwYWxpZ24pOworCWludAkJCW5pdGVtczsKKwljaGFyCSAgICpzOwor CXVpbnQ4CSAgICpiaXRtYXA7CisJaW50CQkJYml0bWFzazsKKwlib29sCQlzdHJpY3RmdW5jID0g ZmNpbmZvLT5mbGluZm8tPmZuX3N0cmljdDsKKworCW5pdGVtcyA9IEFycmF5R2V0Tkl0ZW1zKEFS Ul9ORElNKGFyciksIEFSUl9ESU1TKGFycikpOwogCiAJLyogSW5pdGlhbGl6ZSByZXN1bHQgYXBw cm9wcmlhdGVseSBkZXBlbmRpbmcgb24gdXNlT3IgKi8KLQlyZXN1bHQgPSBCb29sR2V0RGF0dW0o IXVzZU9yKTsKLQlyZXN1bHRudWxsID0gZmFsc2U7CisJKnJlc3VsdCA9IEJvb2xHZXREYXR1bSgh dXNlT3IpOworCSpyZXN1bHRudWxsID0gZmFsc2U7CiAKIAkvKiBMb29wIG92ZXIgdGhlIGFycmF5 IGVsZW1lbnRzICovCiAJcyA9IChjaGFyICopIEFSUl9EQVRBX1BUUihhcnIpOwpAQCAtNDEyOSwx OCArNDE1OSwxOCBAQCBFeGVjRXZhbFNjYWxhckFycmF5T3AoRXhwclN0YXRlICpzdGF0ZSwgRXhw ckV2YWxTdGVwICpvcCkKIAkJZWxzZQogCQl7CiAJCQlmY2luZm8tPmlzbnVsbCA9IGZhbHNlOwot CQkJdGhpc3Jlc3VsdCA9IG9wLT5kLnNjYWxhcmFycmF5b3AuZm5fYWRkcihmY2luZm8pOworCQkJ dGhpc3Jlc3VsdCA9IGZjaW5mby0+ZmxpbmZvLT5mbl9hZGRyKGZjaW5mbyk7CiAJCX0KIAogCQkv KiBDb21iaW5lIHJlc3VsdHMgcGVyIE9SIG9yIEFORCBzZW1hbnRpY3MgKi8KIAkJaWYgKGZjaW5m by0+aXNudWxsKQotCQkJcmVzdWx0bnVsbCA9IHRydWU7CisJCQkqcmVzdWx0bnVsbCA9IHRydWU7 CiAJCWVsc2UgaWYgKHVzZU9yKQogCQl7CiAJCQlpZiAoRGF0dW1HZXRCb29sKHRoaXNyZXN1bHQp KQogCQkJewotCQkJCXJlc3VsdCA9IEJvb2xHZXREYXR1bSh0cnVlKTsKLQkJCQlyZXN1bHRudWxs ID0gZmFsc2U7CisJCQkJKnJlc3VsdCA9IEJvb2xHZXREYXR1bSh0cnVlKTsKKwkJCQkqcmVzdWx0 bnVsbCA9IGZhbHNlOwogCQkJCWJyZWFrOwkJCS8qIG5lZWRuJ3QgbG9vayBhdCBhbnkgbW9yZSBl bGVtZW50cyAqLwogCQkJfQogCQl9CkBAIC00MTQ4LDggKzQxNzgsOCBAQCBFeGVjRXZhbFNjYWxh ckFycmF5T3AoRXhwclN0YXRlICpzdGF0ZSwgRXhwckV2YWxTdGVwICpvcCkKIAkJewogCQkJaWYg KCFEYXR1bUdldEJvb2wodGhpc3Jlc3VsdCkpCiAJCQl7Ci0JCQkJcmVzdWx0ID0gQm9vbEdldERh dHVtKGZhbHNlKTsKLQkJCQlyZXN1bHRudWxsID0gZmFsc2U7CisJCQkJKnJlc3VsdCA9IEJvb2xH ZXREYXR1bShmYWxzZSk7CisJCQkJKnJlc3VsdG51bGwgPSBmYWxzZTsKIAkJCQlicmVhazsJCQkv KiBuZWVkbid0IGxvb2sgYXQgYW55IG1vcmUgZWxlbWVudHMgKi8KIAkJCX0KIAkJfQpAQCAtNDE2 NSw5ICs0MTk1LDYgQEAgRXhlY0V2YWxTY2FsYXJBcnJheU9wKEV4cHJTdGF0ZSAqc3RhdGUsIEV4 cHJFdmFsU3RlcCAqb3ApCiAJCQl9CiAJCX0KIAl9Ci0KLQkqb3AtPnJlc3ZhbHVlID0gcmVzdWx0 OwotCSpvcC0+cmVzbnVsbCA9IHJlc3VsdG51bGw7CiB9CiAKIC8qCkBAIC00MjQ2LDcgKzQyNzMs NyBAQCBFeGVjRXZhbEhhc2hlZFNjYWxhckFycmF5T3AoRXhwclN0YXRlICpzdGF0ZSwgRXhwckV2 YWxTdGVwICpvcCwgRXhwckNvbnRleHQgKmVjbwogCSAqIElmIHRoZSBzY2FsYXIgaXMgTlVMTCwg YW5kIHRoZSBmdW5jdGlvbiBpcyBzdHJpY3QsIHJldHVybiBOVUxMOyBubwogCSAqIHBvaW50IGlu IGV4ZWN1dGluZyB0aGUgc2VhcmNoLgogCSAqLwotCWlmIChmY2luZm8tPmFyZ3NbMF0uaXNudWxs ICYmIHN0cmljdGZ1bmMpCisJaWYgKHNjYWxhcl9pc251bGwgJiYgc3RyaWN0ZnVuYykKIAl7CiAJ CSpvcC0+cmVzbnVsbCA9IHRydWU7CiAJCXJldHVybjsKQEAgLTQzNDYsOCArNDM3Myw1MCBAQCBF eGVjRXZhbEhhc2hlZFNjYWxhckFycmF5T3AoRXhwclN0YXRlICpzdGF0ZSwgRXhwckV2YWxTdGVw ICpvcCwgRXhwckNvbnRleHQgKmVjbwogCQkgKiBub24tc3RyaWN0IGZ1bmN0aW9ucyB3aXRoIGEg bnVsbCBsaHMgdmFsdWUgaWYgbm8gbWF0Y2ggaXMgZm91bmQuCiAJCSAqLwogCQlvcC0+ZC5oYXNo ZWRzY2FsYXJhcnJheW9wLmhhc19udWxscyA9IGhhc19udWxsczsKKworCQkvKgorCQkgKiBXaGVu IHdlIGhhdmUgYSBub24tc3RyaWN0IGVxdWFsaXR5IGZ1bmN0aW9uLCBjaGVjayBhbmQgY2FjaGUg dGhlCisJCSAqIHJlc3VsdCBmcm9tIGxvb2tpbmcgdXAgYSBOVUxMLiAgTm9uLXN0cmljdCBmdW5j dGlvbnMgYXJlIGZyZWUgdG8KKwkJICogdHJlYXQgYSBOVUxMIGFzIGVxdWFsIHRvIGFueSBvdGhl ciB2YWx1ZSwgZS5nLiBhIDAgb3IgYW4gZW1wdHkKKwkJICogc3RyaW5nLiAgSGVyZSB3ZSBwZXJm b3JtIGEgbGluZWFyIHNlYXJjaCBvdmVyIHRoZSBhcnJheSBhbmQgY2FjaGUKKwkJICogdGhlIG91 dGNvbWUgc28gdGhhdCB3ZSBjYW4gcmVzdWx0IHRoYXQgYW55IHRpbWUgd2UgcmVjZWl2ZSBhIE5V TEwuCisJCSAqLworCQlpZiAoIXN0cmljdGZ1bmMpCisJCXsKKwkJCWJvb2wJCW51bGxfbGhzX3Jl c3VsdDsKKworCQkJZmNpbmZvLT5hcmdzWzBdLnZhbHVlID0gKERhdHVtKSAwOworCQkJZmNpbmZv LT5hcmdzWzBdLmlzbnVsbCA9IHRydWU7CisKKwkJCUV4ZWNFdmFsQXJyYXlDb21wYXJlSW50ZXJu YWwoZmNpbmZvLCBhcnIsIHR5cGxlbiwgdHlwYnl2YWwsCisJCQkJCQkJCQkJIHR5cGFsaWduLCB0 cnVlLCAmcmVzdWx0LAorCQkJCQkJCQkJCSAmcmVzdWx0bnVsbCk7CisKKwkJCW51bGxfbGhzX3Jl c3VsdCA9IERhdHVtR2V0Qm9vbChyZXN1bHQpOworCisJCQkvKiBpbnZlcnQgbm9uLU5VTEwgcmVz dWx0cyBmb3IgTk9UIElOICovCisJCQlpZiAoIXJlc3VsdG51bGwgJiYgIWluY2xhdXNlKQorCQkJ CW51bGxfbGhzX3Jlc3VsdCA9ICFudWxsX2xoc19yZXN1bHQ7CisKKwkJCW9wLT5kLmhhc2hlZHNj YWxhcmFycmF5b3AubnVsbF9saHNfaXNudWxsID0gcmVzdWx0bnVsbDsKKwkJCW9wLT5kLmhhc2hl ZHNjYWxhcmFycmF5b3AubnVsbF9saHNfcmVzdWx0ID0gbnVsbF9saHNfcmVzdWx0OworCQl9CisJ fQorCisJLyoKKwkgKiBXaGVuIGxvb2tpbmcgdXAgYW4gU1FMIE5VTEwgdmFsdWUgd2l0aCBub24t c3RyaWN0IGZ1bmN0aW9ucywgd2UgZGVmZXIKKwkgKiB0byB0aGUgdmFsdWUgd2UgY2FjaGVkIHdo ZW4gYnVpbGRpbmcgdGhlIGhhc2ggdGFibGUuCisJICovCisJaWYgKHNjYWxhcl9pc251bGwpCisJ eworCQlBc3NlcnQoIXN0cmljdGZ1bmMpOworCisJCSpvcC0+cmVzbnVsbCA9IG9wLT5kLmhhc2hl ZHNjYWxhcmFycmF5b3AubnVsbF9saHNfaXNudWxsOworCQkqb3AtPnJlc3ZhbHVlID0gQm9vbEdl dERhdHVtKG9wLT5kLmhhc2hlZHNjYWxhcmFycmF5b3AubnVsbF9saHNfcmVzdWx0KTsKKwkJcmV0 dXJuOwogCX0KIAorCiAJLyogQ2hlY2sgdGhlIGhhc2ggdG8gc2VlIGlmIHdlIGhhdmUgYSBtYXRj aC4gKi8KIAloYXNoZm91bmQgPSBOVUxMICE9IHNhb3BoYXNoX2xvb2t1cChlbGVtZW50c190YWIt Pmhhc2h0YWIsIHNjYWxhcik7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4 ZWNFeHByLmggYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjRXhwci5oCmluZGV4IGFhOWIzNjFm YTMxLi5jNjFiM2Q2MjRkNSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY0V4 cHIuaAorKysgYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjRXhwci5oCkBAIC02NDEsNiArNjQx LDEwIEBAIHR5cGVkZWYgc3RydWN0IEV4cHJFdmFsU3RlcAogCQl7CiAJCQlib29sCQloYXNfbnVs bHM7CiAJCQlib29sCQlpbmNsYXVzZTsJLyogdHJ1ZSBmb3IgSU4gYW5kIGZhbHNlIGZvciBOT1Qg SU4gKi8KKwkJCWJvb2wJCW51bGxfbGhzX3Jlc3VsdDsJLyogZm9yIG5vbi1zdHJpY3QgbG9va3Vw cywgd2UKKwkJCQkJCQkJCQkJICogY2FjaGUgd2hhdCBsb29raW5nIHVwIE5VTEwKKwkJCQkJCQkJ CQkJICogcmV0dXJucy4gKi8KKwkJCWJvb2wJCW51bGxfbGhzX2lzbnVsbDsKIAkJCXN0cnVjdCBT Y2FsYXJBcnJheU9wRXhwckhhc2hUYWJsZSAqZWxlbWVudHNfdGFiOwogCQkJRm1nckluZm8gICAq ZmluZm87CS8qIGZ1bmN0aW9uJ3MgbG9va3VwIGRhdGEgKi8KIAkJCUZ1bmN0aW9uQ2FsbEluZm8g ZmNpbmZvX2RhdGE7CS8qIGFyZ3VtZW50cyBldGMgKi8KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvZXhwcmVzc2lvbnMub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9leHByZXNzaW9ucy5vdXQKaW5kZXggOWEzYzk3YjE1YTMuLjczMGY3YmM3ZWJhIDEwMDY0NAot LS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2V4cHJlc3Npb25zLm91dAorKysgYi9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL2V4cHJlc3Npb25zLm91dApAQCAtMzg3LDQyICszODcsMTc3 IEBAIGRlZmF1bHQgZm9yIHR5cGUgbXlpbnQgdXNpbmcgaGFzaCBhcwogICBvcGVyYXRvciAgICAx ICAgPSAgKG15aW50LCBteWludCksCiAgIGZ1bmN0aW9uICAgIDEgICBteWludGhhc2gobXlpbnQp OwogY3JlYXRlIHRhYmxlIGludHRlc3QgKGEgbXlpbnQpOwotaW5zZXJ0IGludG8gaW50dGVzdCB2 YWx1ZXMoMTo6bXlpbnQpLChudWxsKTsKLS0tIHRyeSBhbiBhcnJheSB3aXRoIGVub3VnaCBlbGVt ZW50cyB0byBjYXVzZSBoYXNoaW5nCi1zZWxlY3QgKiBmcm9tIGludHRlc3Qgd2hlcmUgYSBpbiAo MTo6bXlpbnQsMjo6bXlpbnQsMzo6bXlpbnQsNDo6bXlpbnQsNTo6bXlpbnQsNjo6bXlpbnQsNzo6 bXlpbnQsODo6bXlpbnQsOTo6bXlpbnQsIG51bGwpOwotIGEgCi0tLS0KLSAxCi0gCi0oMiByb3dz KQoraW5zZXJ0IGludG8gaW50dGVzdCB2YWx1ZXMgKG51bGwpLCAoMDo6bXlpbnQpLCAoMTo6bXlp bnQpOworLS0gVGVzdCBFRU9QX0hBU0hFRF9TQ0FMQVJBUlJBWU9QIGFnYWluc3QgRUVPUF9TQ0FM QVJBUlJBWU9QLiAgRW5zdXJlIHRoZQorLS0gcmVzdWx0IG9mIG5vbi1oYXNoZWQgdnMgaGFzaGVk IGlzIHRoZSBzYW1lLgorc2VsZWN0CisgIGEsCisgIGEgaW4gKDE6Om15aW50LDI6Om15aW50LDM6 Om15aW50LDQ6Om15aW50LDU6Om15aW50LDY6Om15aW50LDc6Om15aW50LDg6Om15aW50KSBhcyBu b3RfaGFzaGVkLAorICBhIGluICgxOjpteWludCwyOjpteWludCwzOjpteWludCw0OjpteWludCw1 OjpteWludCw2OjpteWludCw3OjpteWludCw4OjpteWludCw5OjpteWludCkgYXMgaGFzaGVkCitm cm9tIGludHRlc3Q7CisgYSB8IG5vdF9oYXNoZWQgfCBoYXNoZWQgCistLS0rLS0tLS0tLS0tLS0t Ky0tLS0tLS0tCisgICB8ICAgICAgICAgICAgfCAKKyAwIHwgZiAgICAgICAgICB8IGYKKyAxIHwg dCAgICAgICAgICB8IHQKKygzIHJvd3MpCiAKLXNlbGVjdCAqIGZyb20gaW50dGVzdCB3aGVyZSBh IG5vdCBpbiAoMTo6bXlpbnQsMjo6bXlpbnQsMzo6bXlpbnQsNDo6bXlpbnQsNTo6bXlpbnQsNjo6 bXlpbnQsNzo6bXlpbnQsODo6bXlpbnQsOTo6bXlpbnQsIG51bGwpOwotIGEgCi0tLS0KLSgwIHJv d3MpCi0KLXNlbGVjdCAqIGZyb20gaW50dGVzdCB3aGVyZSBhIG5vdCBpbiAoMDo6bXlpbnQsMjo6 bXlpbnQsMzo6bXlpbnQsNDo6bXlpbnQsNTo6bXlpbnQsNjo6bXlpbnQsNzo6bXlpbnQsODo6bXlp bnQsOTo6bXlpbnQsIG51bGwpOwotIGEgCi0tLS0KLSgwIHJvd3MpCi0KLS0tIGVuc3VyZSB0aGUg cmVzdWx0IG1hdGNoZWQgd2l0aCB0aGUgbm9uLWhhc2hlZCB2ZXJzaW9uLiAgV2Ugc2ltcGx5IHJl bW92ZQotLS0gc29tZSBhcnJheSBlbGVtZW50cyBzbyB0aGF0IHdlIGRvbid0IHJlYWNoIHRoZSBo YXNoaW5nIHRocmVzaG9sZC4KLXNlbGVjdCAqIGZyb20gaW50dGVzdCB3aGVyZSBhIGluICgxOjpt eWludCwyOjpteWludCwzOjpteWludCw0OjpteWludCw1OjpteWludCwgbnVsbCk7Ci0gYSAKLS0t LQotIDEKLSAKLSgyIHJvd3MpCitzZWxlY3QKKyAgYSwKKyAgYSBpbiAobnVsbDo6bXlpbnQsMTo6 bXlpbnQsMjo6bXlpbnQsMzo6bXlpbnQsNDo6bXlpbnQsNTo6bXlpbnQsNjo6bXlpbnQsNzo6bXlp bnQpIGFzIG5vdF9oYXNoZWQsCisgIGEgaW4gKG51bGw6Om15aW50LDE6Om15aW50LDI6Om15aW50 LDM6Om15aW50LDQ6Om15aW50LDU6Om15aW50LDY6Om15aW50LDc6Om15aW50LDg6Om15aW50KSBh cyBoYXNoZWQKKyBmcm9tIGludHRlc3Q7CisgYSB8IG5vdF9oYXNoZWQgfCBoYXNoZWQgCistLS0r LS0tLS0tLS0tLS0tKy0tLS0tLS0tCisgICB8IHQgICAgICAgICAgfCB0CisgMCB8ICAgICAgICAg ICAgfCAKKyAxIHwgdCAgICAgICAgICB8IHQKKygzIHJvd3MpCiAKLXNlbGVjdCAqIGZyb20gaW50 dGVzdCB3aGVyZSBhIG5vdCBpbiAoMTo6bXlpbnQsMjo6bXlpbnQsMzo6bXlpbnQsNDo6bXlpbnQs NTo6bXlpbnQsIG51bGwpOwotIGEgCi0tLS0KLSgwIHJvd3MpCitzZWxlY3QKKyAgYSwKKyAgYSBu b3QgaW4gKDE6Om15aW50LDI6Om15aW50LDM6Om15aW50LDQ6Om15aW50LDU6Om15aW50LDY6Om15 aW50LDc6Om15aW50LDg6Om15aW50KSBhcyBub3RfaGFzaGVkLAorICBhIG5vdCBpbiAoMTo6bXlp bnQsMjo6bXlpbnQsMzo6bXlpbnQsNDo6bXlpbnQsNTo6bXlpbnQsNjo6bXlpbnQsNzo6bXlpbnQs ODo6bXlpbnQsOTo6bXlpbnQpIGFzIGhhc2hlZAorZnJvbSBpbnR0ZXN0OworIGEgfCBub3RfaGFz aGVkIHwgaGFzaGVkIAorLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLQorICAgfCAgICAgICAgICAg IHwgCisgMCB8IHQgICAgICAgICAgfCB0CisgMSB8IGYgICAgICAgICAgfCBmCisoMyByb3dzKQog Ci1zZWxlY3QgKiBmcm9tIGludHRlc3Qgd2hlcmUgYSBub3QgaW4gKDA6Om15aW50LDI6Om15aW50 LDM6Om15aW50LDQ6Om15aW50LDU6Om15aW50LCBudWxsKTsKLSBhIAotLS0tCi0oMCByb3dzKQor c2VsZWN0CisgIGEsCisgIGEgbm90IGluIChudWxsOjpteWludCwxOjpteWludCwyOjpteWludCwz OjpteWludCw0OjpteWludCw1OjpteWludCw2OjpteWludCw3OjpteWludCkgYXMgbm90X2hhc2hl ZCwKKyAgYSBub3QgaW4gKG51bGw6Om15aW50LDE6Om15aW50LDI6Om15aW50LDM6Om15aW50LDQ6 Om15aW50LDU6Om15aW50LDY6Om15aW50LDc6Om15aW50LDg6Om15aW50KSBhcyBoYXNoZWQKK2Zy b20gaW50dGVzdDsKKyBhIHwgbm90X2hhc2hlZCB8IGhhc2hlZCAKKy0tLSstLS0tLS0tLS0tLS0r LS0tLS0tLS0KKyAgIHwgZiAgICAgICAgICB8IGYKKyAwIHwgICAgICAgICAgICB8IAorIDEgfCBm ICAgICAgICAgIHwgZgorKDMgcm93cykKKworLS0gTm93IG1ha2UgdGhlIGVxdWFsIGZ1bmN0aW9u IHJldHVybiBmYWxzZSB3aGVuIGdpdmVuIHR3byBOVUxMcworY3JlYXRlIG9yIHJlcGxhY2UgZnVu Y3Rpb24gbXlpbnRlcShteWludCwgbXlpbnQpIHJldHVybnMgYm9vbCBhcyAkJAorYmVnaW4KKyAg aWYgJDEgaXMgbnVsbCBhbmQgJDIgaXMgbnVsbCB0aGVuCisgICAgcmV0dXJuIGZhbHNlOworICBl bHNlCisgICAgcmV0dXJuICQxOjppbnQgPSAkMjo6aW50OworICBlbmQgaWY7CitlbmQ7CiskJCBs YW5ndWFnZSBwbHBnc3FsIGltbXV0YWJsZTsKKy0tIEFuZCB0cnkgdGhlIHNhbWUgYWdhaW4gdG8g ZW5zdXJlIEVFT1BfSEFTSEVEX1NDQUxBUkFSUkFZT1AgZG9lcyB0aGUgc2FtZQorLS0gdGhpbmcg YXMgRUVPUF9TQ0FMQVJBUlJBWU9QLgorc2VsZWN0CisgIGEsCisgIGEgaW4gKDE6Om15aW50LDI6 Om15aW50LDM6Om15aW50LDQ6Om15aW50LDU6Om15aW50LDY6Om15aW50LDc6Om15aW50LDg6Om15 aW50KSBhcyBub3RfaGFzaGVkLAorICBhIGluICgxOjpteWludCwyOjpteWludCwzOjpteWludCw0 OjpteWludCw1OjpteWludCw2OjpteWludCw3OjpteWludCw4OjpteWludCw5OjpteWludCkgYXMg aGFzaGVkCitmcm9tIGludHRlc3Q7CisgYSB8IG5vdF9oYXNoZWQgfCBoYXNoZWQgCistLS0rLS0t LS0tLS0tLS0tKy0tLS0tLS0tCisgICB8ICAgICAgICAgICAgfCAKKyAwIHwgZiAgICAgICAgICB8 IGYKKyAxIHwgdCAgICAgICAgICB8IHQKKygzIHJvd3MpCisKK3NlbGVjdAorICBhLAorICBhIGlu IChudWxsOjpteWludCwxOjpteWludCwyOjpteWludCwzOjpteWludCw0OjpteWludCw1OjpteWlu dCw2OjpteWludCw3OjpteWludCkgYXMgbm90X2hhc2hlZCwKKyAgYSBpbiAobnVsbDo6bXlpbnQs MTo6bXlpbnQsMjo6bXlpbnQsMzo6bXlpbnQsNDo6bXlpbnQsNTo6bXlpbnQsNjo6bXlpbnQsNzo6 bXlpbnQsODo6bXlpbnQpIGFzIGhhc2hlZAorIGZyb20gaW50dGVzdDsKKyBhIHwgbm90X2hhc2hl ZCB8IGhhc2hlZCAKKy0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0KKyAgIHwgICAgICAgICAgICB8 IAorIDAgfCAgICAgICAgICAgIHwgCisgMSB8IHQgICAgICAgICAgfCB0CisoMyByb3dzKQorCitz ZWxlY3QKKyAgYSwKKyAgYSBub3QgaW4gKDE6Om15aW50LDI6Om15aW50LDM6Om15aW50LDQ6Om15 aW50LDU6Om15aW50LDY6Om15aW50LDc6Om15aW50LDg6Om15aW50KSBhcyBub3RfaGFzaGVkLAor ICBhIG5vdCBpbiAoMTo6bXlpbnQsMjo6bXlpbnQsMzo6bXlpbnQsNDo6bXlpbnQsNTo6bXlpbnQs Njo6bXlpbnQsNzo6bXlpbnQsODo6bXlpbnQsOTo6bXlpbnQpIGFzIGhhc2hlZAorZnJvbSBpbnR0 ZXN0OworIGEgfCBub3RfaGFzaGVkIHwgaGFzaGVkIAorLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0t LQorICAgfCAgICAgICAgICAgIHwgCisgMCB8IHQgICAgICAgICAgfCB0CisgMSB8IGYgICAgICAg ICAgfCBmCisoMyByb3dzKQorCitzZWxlY3QKKyAgYSwKKyAgYSBub3QgaW4gKG51bGw6Om15aW50 LDE6Om15aW50LDI6Om15aW50LDM6Om15aW50LDQ6Om15aW50LDU6Om15aW50LDY6Om15aW50LDc6 Om15aW50KSBhcyBub3RfaGFzaGVkLAorICBhIG5vdCBpbiAobnVsbDo6bXlpbnQsMTo6bXlpbnQs Mjo6bXlpbnQsMzo6bXlpbnQsNDo6bXlpbnQsNTo6bXlpbnQsNjo6bXlpbnQsNzo6bXlpbnQsODo6 bXlpbnQpIGFzIGhhc2hlZAorZnJvbSBpbnR0ZXN0OworIGEgfCBub3RfaGFzaGVkIHwgaGFzaGVk IAorLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLQorICAgfCAgICAgICAgICAgIHwgCisgMCB8ICAg ICAgICAgICAgfCAKKyAxIHwgZiAgICAgICAgICB8IGYKKygzIHJvd3MpCisKKy0tIFRyeSBhZ2Fp biB3aXRoIGFuIGVxdWFsaXR5IGZ1bmN0aW9uIHRoYXQgdHJlYXRzIE5VTExzIGFzIGVxdWFsIHRv IDAuCitjcmVhdGUgb3IgcmVwbGFjZSBmdW5jdGlvbiBteWludGVxKG15aW50LCBteWludCkgcmV0 dXJucyBib29sIGFzICQkCitiZWdpbgorICBpZiAkMSBpcyBudWxsIGFuZCAkMiBpcyBudWxsIHRo ZW4KKyAgICByZXR1cm4gZmFsc2U7CisgIGVsc2UKKyAgICByZXR1cm4gY29hbGVzY2UoJDE6Omlu dCwwKSA9IGNvYWxlc2NlKCQyOjppbnQsIDApOworICBlbmQgaWY7CitlbmQ7CiskJCBsYW5ndWFn ZSBwbHBnc3FsIGltbXV0YWJsZTsKK3NlbGVjdAorICBhLAorICBhIGluICgxOjpteWludCwyOjpt eWludCwzOjpteWludCw0OjpteWludCw1OjpteWludCw2OjpteWludCw3OjpteWludCw4OjpteWlu dCkgYXMgbm90X2hhc2hlZCwKKyAgYSBpbiAoMTo6bXlpbnQsMjo6bXlpbnQsMzo6bXlpbnQsNDo6 bXlpbnQsNTo6bXlpbnQsNjo6bXlpbnQsNzo6bXlpbnQsODo6bXlpbnQsOTo6bXlpbnQpIGFzIGhh c2hlZCwKKyAgYSBpbiAoMDo6bXlpbnQsMTo6bXlpbnQsMjo6bXlpbnQsMzo6bXlpbnQsNDo6bXlp bnQsNTo6bXlpbnQsNjo6bXlpbnQsNzo6bXlpbnQpIGFzIG5vdF9oYXNoZWRfemVybywKKyAgYSBp biAoMDo6bXlpbnQsMTo6bXlpbnQsMjo6bXlpbnQsMzo6bXlpbnQsNDo6bXlpbnQsNTo6bXlpbnQs Njo6bXlpbnQsNzo6bXlpbnQsODo6bXlpbnQpIGFzIGhhc2hlZF96ZXJvCitmcm9tIGludHRlc3Q7 CisgYSB8IG5vdF9oYXNoZWQgfCBoYXNoZWQgfCBub3RfaGFzaGVkX3plcm8gfCBoYXNoZWRfemVy byAKKy0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLQorICAgfCBmICAgICAgICAgIHwgZiAgICAgIHwgdCAgICAgICAgICAgICAgIHwgdAorIDAg fCBmICAgICAgICAgIHwgZiAgICAgIHwgdCAgICAgICAgICAgICAgIHwgdAorIDEgfCB0ICAgICAg ICAgIHwgdCAgICAgIHwgdCAgICAgICAgICAgICAgIHwgdAorKDMgcm93cykKKworc2VsZWN0Cisg IGEsCisgIGEgaW4gKG51bGw6Om15aW50LDE6Om15aW50LDI6Om15aW50LDM6Om15aW50LDQ6Om15 aW50LDU6Om15aW50LDY6Om15aW50LDc6Om15aW50KSBhcyBub3RfaGFzaGVkLAorICBhIGluIChu dWxsOjpteWludCwxOjpteWludCwyOjpteWludCwzOjpteWludCw0OjpteWludCw1OjpteWludCw2 OjpteWludCw3OjpteWludCw4OjpteWludCkgYXMgaGFzaGVkCisgZnJvbSBpbnR0ZXN0OworIGEg fCBub3RfaGFzaGVkIHwgaGFzaGVkIAorLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLQorICAgfCBm ICAgICAgICAgIHwgZgorIDAgfCB0ICAgICAgICAgIHwgdAorIDEgfCB0ICAgICAgICAgIHwgdAor KDMgcm93cykKKworc2VsZWN0CisgIGEsCisgIGEgbm90IGluICgxOjpteWludCwyOjpteWludCwz OjpteWludCw0OjpteWludCw1OjpteWludCw2OjpteWludCw3OjpteWludCw4OjpteWludCkgYXMg bm90X2hhc2hlZCwKKyAgYSBub3QgaW4gKDE6Om15aW50LDI6Om15aW50LDM6Om15aW50LDQ6Om15 aW50LDU6Om15aW50LDY6Om15aW50LDc6Om15aW50LDg6Om15aW50LDk6Om15aW50KSBhcyBoYXNo ZWQsCisgIGEgbm90IGluICgwOjpteWludCwxOjpteWludCwyOjpteWludCwzOjpteWludCw0Ojpt eWludCw1OjpteWludCw2OjpteWludCw3OjpteWludCkgYXMgbm90X2hhc2hlZF96ZXJvLAorICBh IG5vdCBpbiAoMDo6bXlpbnQsMTo6bXlpbnQsMjo6bXlpbnQsMzo6bXlpbnQsNDo6bXlpbnQsNTo6 bXlpbnQsNjo6bXlpbnQsNzo6bXlpbnQsODo6bXlpbnQpIGFzIGhhc2hlZF96ZXJvCitmcm9tIGlu dHRlc3Q7CisgYSB8IG5vdF9oYXNoZWQgfCBoYXNoZWQgfCBub3RfaGFzaGVkX3plcm8gfCBoYXNo ZWRfemVybyAKKy0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLQorICAgfCB0ICAgICAgICAgIHwgdCAgICAgIHwgZiAgICAgICAgICAgICAgIHwg ZgorIDAgfCB0ICAgICAgICAgIHwgdCAgICAgIHwgZiAgICAgICAgICAgICAgIHwgZgorIDEgfCBm ICAgICAgICAgIHwgZiAgICAgIHwgZiAgICAgICAgICAgICAgIHwgZgorKDMgcm93cykKKworc2Vs ZWN0CisgIGEsCisgIGEgbm90IGluIChudWxsOjpteWludCwxOjpteWludCwyOjpteWludCwzOjpt eWludCw0OjpteWludCw1OjpteWludCw2OjpteWludCw3OjpteWludCkgYXMgbm90X2hhc2hlZCwK KyAgYSBub3QgaW4gKG51bGw6Om15aW50LDE6Om15aW50LDI6Om15aW50LDM6Om15aW50LDQ6Om15 aW50LDU6Om15aW50LDY6Om15aW50LDc6Om15aW50LDg6Om15aW50KSBhcyBoYXNoZWQKK2Zyb20g aW50dGVzdDsKKyBhIHwgbm90X2hhc2hlZCB8IGhhc2hlZCAKKy0tLSstLS0tLS0tLS0tLS0rLS0t LS0tLS0KKyAgIHwgdCAgICAgICAgICB8IHQKKyAwIHwgZiAgICAgICAgICB8IGYKKyAxIHwgZiAg ICAgICAgICB8IGYKKygzIHJvd3MpCiAKIHJvbGxiYWNrOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qv cmVncmVzcy9zcWwvZXhwcmVzc2lvbnMuc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvZXhwcmVz c2lvbnMuc3FsCmluZGV4IGUwMmMyMWYzMzY4Li4zYjMwNDhmOTczMSAxMDA2NDQKLS0tIGEvc3Jj L3Rlc3QvcmVncmVzcy9zcWwvZXhwcmVzc2lvbnMuc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mv c3FsL2V4cHJlc3Npb25zLnNxbApAQCAtMTk2LDE2ICsxOTYsMTA4IEBAIGRlZmF1bHQgZm9yIHR5 cGUgbXlpbnQgdXNpbmcgaGFzaCBhcwogICBmdW5jdGlvbiAgICAxICAgbXlpbnRoYXNoKG15aW50 KTsKIAogY3JlYXRlIHRhYmxlIGludHRlc3QgKGEgbXlpbnQpOwotaW5zZXJ0IGludG8gaW50dGVz dCB2YWx1ZXMoMTo6bXlpbnQpLChudWxsKTsKLQotLS0gdHJ5IGFuIGFycmF5IHdpdGggZW5vdWdo IGVsZW1lbnRzIHRvIGNhdXNlIGhhc2hpbmcKLXNlbGVjdCAqIGZyb20gaW50dGVzdCB3aGVyZSBh IGluICgxOjpteWludCwyOjpteWludCwzOjpteWludCw0OjpteWludCw1OjpteWludCw2OjpteWlu dCw3OjpteWludCw4OjpteWludCw5OjpteWludCwgbnVsbCk7Ci1zZWxlY3QgKiBmcm9tIGludHRl c3Qgd2hlcmUgYSBub3QgaW4gKDE6Om15aW50LDI6Om15aW50LDM6Om15aW50LDQ6Om15aW50LDU6 Om15aW50LDY6Om15aW50LDc6Om15aW50LDg6Om15aW50LDk6Om15aW50LCBudWxsKTsKLXNlbGVj dCAqIGZyb20gaW50dGVzdCB3aGVyZSBhIG5vdCBpbiAoMDo6bXlpbnQsMjo6bXlpbnQsMzo6bXlp bnQsNDo6bXlpbnQsNTo6bXlpbnQsNjo6bXlpbnQsNzo6bXlpbnQsODo6bXlpbnQsOTo6bXlpbnQs IG51bGwpOwotLS0gZW5zdXJlIHRoZSByZXN1bHQgbWF0Y2hlZCB3aXRoIHRoZSBub24taGFzaGVk IHZlcnNpb24uICBXZSBzaW1wbHkgcmVtb3ZlCi0tLSBzb21lIGFycmF5IGVsZW1lbnRzIHNvIHRo YXQgd2UgZG9uJ3QgcmVhY2ggdGhlIGhhc2hpbmcgdGhyZXNob2xkLgotc2VsZWN0ICogZnJvbSBp bnR0ZXN0IHdoZXJlIGEgaW4gKDE6Om15aW50LDI6Om15aW50LDM6Om15aW50LDQ6Om15aW50LDU6 Om15aW50LCBudWxsKTsKLXNlbGVjdCAqIGZyb20gaW50dGVzdCB3aGVyZSBhIG5vdCBpbiAoMTo6 bXlpbnQsMjo6bXlpbnQsMzo6bXlpbnQsNDo6bXlpbnQsNTo6bXlpbnQsIG51bGwpOwotc2VsZWN0 ICogZnJvbSBpbnR0ZXN0IHdoZXJlIGEgbm90IGluICgwOjpteWludCwyOjpteWludCwzOjpteWlu dCw0OjpteWludCw1OjpteWludCwgbnVsbCk7CitpbnNlcnQgaW50byBpbnR0ZXN0IHZhbHVlcyAo bnVsbCksICgwOjpteWludCksICgxOjpteWludCk7CisKKy0tIFRlc3QgRUVPUF9IQVNIRURfU0NB TEFSQVJSQVlPUCBhZ2FpbnN0IEVFT1BfU0NBTEFSQVJSQVlPUC4gIEVuc3VyZSB0aGUKKy0tIHJl c3VsdCBvZiBub24taGFzaGVkIHZzIGhhc2hlZCBpcyB0aGUgc2FtZS4KK3NlbGVjdAorICBhLAor ICBhIGluICgxOjpteWludCwyOjpteWludCwzOjpteWludCw0OjpteWludCw1OjpteWludCw2Ojpt eWludCw3OjpteWludCw4OjpteWludCkgYXMgbm90X2hhc2hlZCwKKyAgYSBpbiAoMTo6bXlpbnQs Mjo6bXlpbnQsMzo6bXlpbnQsNDo6bXlpbnQsNTo6bXlpbnQsNjo6bXlpbnQsNzo6bXlpbnQsODo6 bXlpbnQsOTo6bXlpbnQpIGFzIGhhc2hlZAorZnJvbSBpbnR0ZXN0OworCitzZWxlY3QKKyAgYSwK KyAgYSBpbiAobnVsbDo6bXlpbnQsMTo6bXlpbnQsMjo6bXlpbnQsMzo6bXlpbnQsNDo6bXlpbnQs NTo6bXlpbnQsNjo6bXlpbnQsNzo6bXlpbnQpIGFzIG5vdF9oYXNoZWQsCisgIGEgaW4gKG51bGw6 Om15aW50LDE6Om15aW50LDI6Om15aW50LDM6Om15aW50LDQ6Om15aW50LDU6Om15aW50LDY6Om15 aW50LDc6Om15aW50LDg6Om15aW50KSBhcyBoYXNoZWQKKyBmcm9tIGludHRlc3Q7CisKK3NlbGVj dAorICBhLAorICBhIG5vdCBpbiAoMTo6bXlpbnQsMjo6bXlpbnQsMzo6bXlpbnQsNDo6bXlpbnQs NTo6bXlpbnQsNjo6bXlpbnQsNzo6bXlpbnQsODo6bXlpbnQpIGFzIG5vdF9oYXNoZWQsCisgIGEg bm90IGluICgxOjpteWludCwyOjpteWludCwzOjpteWludCw0OjpteWludCw1OjpteWludCw2Ojpt eWludCw3OjpteWludCw4OjpteWludCw5OjpteWludCkgYXMgaGFzaGVkCitmcm9tIGludHRlc3Q7 CisKK3NlbGVjdAorICBhLAorICBhIG5vdCBpbiAobnVsbDo6bXlpbnQsMTo6bXlpbnQsMjo6bXlp bnQsMzo6bXlpbnQsNDo6bXlpbnQsNTo6bXlpbnQsNjo6bXlpbnQsNzo6bXlpbnQpIGFzIG5vdF9o YXNoZWQsCisgIGEgbm90IGluIChudWxsOjpteWludCwxOjpteWludCwyOjpteWludCwzOjpteWlu dCw0OjpteWludCw1OjpteWludCw2OjpteWludCw3OjpteWludCw4OjpteWludCkgYXMgaGFzaGVk Citmcm9tIGludHRlc3Q7CisKKy0tIE5vdyBtYWtlIHRoZSBlcXVhbCBmdW5jdGlvbiByZXR1cm4g ZmFsc2Ugd2hlbiBnaXZlbiB0d28gTlVMTHMKK2NyZWF0ZSBvciByZXBsYWNlIGZ1bmN0aW9uIG15 aW50ZXEobXlpbnQsIG15aW50KSByZXR1cm5zIGJvb2wgYXMgJCQKK2JlZ2luCisgIGlmICQxIGlz IG51bGwgYW5kICQyIGlzIG51bGwgdGhlbgorICAgIHJldHVybiBmYWxzZTsKKyAgZWxzZQorICAg IHJldHVybiAkMTo6aW50ID0gJDI6OmludDsKKyAgZW5kIGlmOworZW5kOworJCQgbGFuZ3VhZ2Ug cGxwZ3NxbCBpbW11dGFibGU7CisKKy0tIEFuZCB0cnkgdGhlIHNhbWUgYWdhaW4gdG8gZW5zdXJl IEVFT1BfSEFTSEVEX1NDQUxBUkFSUkFZT1AgZG9lcyB0aGUgc2FtZQorLS0gdGhpbmcgYXMgRUVP UF9TQ0FMQVJBUlJBWU9QLgorc2VsZWN0CisgIGEsCisgIGEgaW4gKDE6Om15aW50LDI6Om15aW50 LDM6Om15aW50LDQ6Om15aW50LDU6Om15aW50LDY6Om15aW50LDc6Om15aW50LDg6Om15aW50KSBh cyBub3RfaGFzaGVkLAorICBhIGluICgxOjpteWludCwyOjpteWludCwzOjpteWludCw0OjpteWlu dCw1OjpteWludCw2OjpteWludCw3OjpteWludCw4OjpteWludCw5OjpteWludCkgYXMgaGFzaGVk Citmcm9tIGludHRlc3Q7CisKK3NlbGVjdAorICBhLAorICBhIGluIChudWxsOjpteWludCwxOjpt eWludCwyOjpteWludCwzOjpteWludCw0OjpteWludCw1OjpteWludCw2OjpteWludCw3OjpteWlu dCkgYXMgbm90X2hhc2hlZCwKKyAgYSBpbiAobnVsbDo6bXlpbnQsMTo6bXlpbnQsMjo6bXlpbnQs Mzo6bXlpbnQsNDo6bXlpbnQsNTo6bXlpbnQsNjo6bXlpbnQsNzo6bXlpbnQsODo6bXlpbnQpIGFz IGhhc2hlZAorIGZyb20gaW50dGVzdDsKKworc2VsZWN0CisgIGEsCisgIGEgbm90IGluICgxOjpt eWludCwyOjpteWludCwzOjpteWludCw0OjpteWludCw1OjpteWludCw2OjpteWludCw3OjpteWlu dCw4OjpteWludCkgYXMgbm90X2hhc2hlZCwKKyAgYSBub3QgaW4gKDE6Om15aW50LDI6Om15aW50 LDM6Om15aW50LDQ6Om15aW50LDU6Om15aW50LDY6Om15aW50LDc6Om15aW50LDg6Om15aW50LDk6 Om15aW50KSBhcyBoYXNoZWQKK2Zyb20gaW50dGVzdDsKKworc2VsZWN0CisgIGEsCisgIGEgbm90 IGluIChudWxsOjpteWludCwxOjpteWludCwyOjpteWludCwzOjpteWludCw0OjpteWludCw1Ojpt eWludCw2OjpteWludCw3OjpteWludCkgYXMgbm90X2hhc2hlZCwKKyAgYSBub3QgaW4gKG51bGw6 Om15aW50LDE6Om15aW50LDI6Om15aW50LDM6Om15aW50LDQ6Om15aW50LDU6Om15aW50LDY6Om15 aW50LDc6Om15aW50LDg6Om15aW50KSBhcyBoYXNoZWQKK2Zyb20gaW50dGVzdDsKKworLS0gVHJ5 IGFnYWluIHdpdGggYW4gZXF1YWxpdHkgZnVuY3Rpb24gdGhhdCB0cmVhdHMgTlVMTHMgYXMgZXF1 YWwgdG8gMC4KK2NyZWF0ZSBvciByZXBsYWNlIGZ1bmN0aW9uIG15aW50ZXEobXlpbnQsIG15aW50 KSByZXR1cm5zIGJvb2wgYXMgJCQKK2JlZ2luCisgIGlmICQxIGlzIG51bGwgYW5kICQyIGlzIG51 bGwgdGhlbgorICAgIHJldHVybiBmYWxzZTsKKyAgZWxzZQorICAgIHJldHVybiBjb2FsZXNjZSgk MTo6aW50LDApID0gY29hbGVzY2UoJDI6OmludCwgMCk7CisgIGVuZCBpZjsKK2VuZDsKKyQkIGxh bmd1YWdlIHBscGdzcWwgaW1tdXRhYmxlOworCitzZWxlY3QKKyAgYSwKKyAgYSBpbiAoMTo6bXlp bnQsMjo6bXlpbnQsMzo6bXlpbnQsNDo6bXlpbnQsNTo6bXlpbnQsNjo6bXlpbnQsNzo6bXlpbnQs ODo6bXlpbnQpIGFzIG5vdF9oYXNoZWQsCisgIGEgaW4gKDE6Om15aW50LDI6Om15aW50LDM6Om15 aW50LDQ6Om15aW50LDU6Om15aW50LDY6Om15aW50LDc6Om15aW50LDg6Om15aW50LDk6Om15aW50 KSBhcyBoYXNoZWQsCisgIGEgaW4gKDA6Om15aW50LDE6Om15aW50LDI6Om15aW50LDM6Om15aW50 LDQ6Om15aW50LDU6Om15aW50LDY6Om15aW50LDc6Om15aW50KSBhcyBub3RfaGFzaGVkX3plcm8s CisgIGEgaW4gKDA6Om15aW50LDE6Om15aW50LDI6Om15aW50LDM6Om15aW50LDQ6Om15aW50LDU6 Om15aW50LDY6Om15aW50LDc6Om15aW50LDg6Om15aW50KSBhcyBoYXNoZWRfemVybworZnJvbSBp bnR0ZXN0OworCitzZWxlY3QKKyAgYSwKKyAgYSBpbiAobnVsbDo6bXlpbnQsMTo6bXlpbnQsMjo6 bXlpbnQsMzo6bXlpbnQsNDo6bXlpbnQsNTo6bXlpbnQsNjo6bXlpbnQsNzo6bXlpbnQpIGFzIG5v dF9oYXNoZWQsCisgIGEgaW4gKG51bGw6Om15aW50LDE6Om15aW50LDI6Om15aW50LDM6Om15aW50 LDQ6Om15aW50LDU6Om15aW50LDY6Om15aW50LDc6Om15aW50LDg6Om15aW50KSBhcyBoYXNoZWQK KyBmcm9tIGludHRlc3Q7CisKK3NlbGVjdAorICBhLAorICBhIG5vdCBpbiAoMTo6bXlpbnQsMjo6 bXlpbnQsMzo6bXlpbnQsNDo6bXlpbnQsNTo6bXlpbnQsNjo6bXlpbnQsNzo6bXlpbnQsODo6bXlp bnQpIGFzIG5vdF9oYXNoZWQsCisgIGEgbm90IGluICgxOjpteWludCwyOjpteWludCwzOjpteWlu dCw0OjpteWludCw1OjpteWludCw2OjpteWludCw3OjpteWludCw4OjpteWludCw5OjpteWludCkg YXMgaGFzaGVkLAorICBhIG5vdCBpbiAoMDo6bXlpbnQsMTo6bXlpbnQsMjo6bXlpbnQsMzo6bXlp bnQsNDo6bXlpbnQsNTo6bXlpbnQsNjo6bXlpbnQsNzo6bXlpbnQpIGFzIG5vdF9oYXNoZWRfemVy bywKKyAgYSBub3QgaW4gKDA6Om15aW50LDE6Om15aW50LDI6Om15aW50LDM6Om15aW50LDQ6Om15 aW50LDU6Om15aW50LDY6Om15aW50LDc6Om15aW50LDg6Om15aW50KSBhcyBoYXNoZWRfemVybwor ZnJvbSBpbnR0ZXN0OworCitzZWxlY3QKKyAgYSwKKyAgYSBub3QgaW4gKG51bGw6Om15aW50LDE6 Om15aW50LDI6Om15aW50LDM6Om15aW50LDQ6Om15aW50LDU6Om15aW50LDY6Om15aW50LDc6Om15 aW50KSBhcyBub3RfaGFzaGVkLAorICBhIG5vdCBpbiAobnVsbDo6bXlpbnQsMTo6bXlpbnQsMjo6 bXlpbnQsMzo6bXlpbnQsNDo6bXlpbnQsNTo6bXlpbnQsNjo6bXlpbnQsNzo6bXlpbnQsODo6bXlp bnQpIGFzIGhhc2hlZAorZnJvbSBpbnR0ZXN0OwogCiByb2xsYmFjazsKLS0gCjIuNTEuMAoK --00000000000038f2d6065014f618--