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 1w55XB-002skA-01 for pgsql-hackers@arkaria.postgresql.org; Tue, 24 Mar 2026 17:27:17 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w55X9-008BZ5-1I for pgsql-hackers@arkaria.postgresql.org; Tue, 24 Mar 2026 17:27:15 +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 1w55X8-008BYw-2o for pgsql-hackers@lists.postgresql.org; Tue, 24 Mar 2026 17:27:15 +0000 Received: from mail-lf1-x133.google.com ([2a00:1450:4864:20::133]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w55X7-00000000pGf-1WlP for pgsql-hackers@postgresql.org; Tue, 24 Mar 2026 17:27:14 +0000 Received: by mail-lf1-x133.google.com with SMTP id 2adb3069b0e04-5a12cd0bd79so1736284e87.2 for ; Tue, 24 Mar 2026 10:27:13 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1774373232; cv=none; d=google.com; s=arc-20240605; b=Lfo271aAHYrKy4GC9oooCJJSeAIUpI8WkTDNdb071Dd0SMgFlU7mLMhAOl1GR56yfB MK1qF+QCT1ZStIznTLADiSzBM8UNps/Rnwlmwlu6jMhYFx+neAMKzFPF6Fo/Xc/5VGGv Mwrg0lfQiMqjHx5pT3qFCeZlr17jUkw145YOO4QzTKDAmspFW6+wsTIBJe9sr+wlDnh6 JliiUl1FB9PZzBiCS6/mSYwvogTzzee29m0aT4DID18gPVLL04wHSZLX393kl0qqNnrZ ZVnnSuw2+k/ZgoX4pZpicUT80ygT6jnw9udZlLRjYo2U5CFYat0kbP05/QSgcK7ev5yA kh+w== 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=JwTT7NDX21YuAwVUx69Oc03xgHCAAPeRWbGKBZL8dX8=; fh=oFidAb/VDZ3iqpeh5ga0sDBfEh8gz6MYWNFm0RRdUTk=; b=D8z/9nauFs+ruapghQ1AsOhd2CSfj+UHyLmDGR06Kin5w4ClU+dmA5qA55+s6Fc47R AvCLe0zbzItIpc7q09mCHwmSJbyNoDAxksqUd9w55fStjNASFIpSrzIxyzocSB+1eTyA z1BtQCSvs/zROwWibccXX4TwGWxuMz+G5fpN8qyTR6xFn69D1amemkHur85Z3LqFKzG2 scPxnqmEwNl2A9r5SCdEBGmpxsSyvaDB2POSIySeWBbNhTomTEsO42aY4T2rCqqnhHuj Ymf27EpERmYIszjV1XiXvz7vzfM89XSvt2Lx+e78oH0lDq0dDM1uZY+Q6jj3MVphLVcL eDSQ==; 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=1774373232; x=1774978032; 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=JwTT7NDX21YuAwVUx69Oc03xgHCAAPeRWbGKBZL8dX8=; b=klh+RnbK2ym9VitkUJbgkW7npS+Iy8WqkdVR6JAKBjrn44ZUHEEuD5Am8redDSmQ1U yz+4EyLCwoTgAuUCeL1wwPT30rgN4yq4aQ2VRr0xNrmhyPXO6Xf0G09Vuf0NuQ7fSlUm B0QBwWnBk5rhMlZ66KZ68RLXvGfBkmGUwib5ho6AFTeXnyWR26+sRr21Xzo/MFB3GJ9J BAsHFe4ooBnhmvjbUuFDXfTGHY207NtYqfR6J8uAhG6c3nhG02yLbmpVkWjtQO1uQdF4 8uYE9mIs8QWMIRf144XwqLjXQ86nAbjIR+6nh3F7s+ZYiNvUFuZy0Ny0daAAYGYwzerS PTJw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774373232; x=1774978032; 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=JwTT7NDX21YuAwVUx69Oc03xgHCAAPeRWbGKBZL8dX8=; b=ra6NvLliJi5aiI5ROqkPhT0H9lGG4ugvvCRCEiacGe1vkPYOdFzAJybsCNkyUAZwP/ QGXRZDI1oWK3HlhcMxLlMg1/GAMwE5t2Nz1XBH3Sp466nfJlTTOO7zFhK+dstZa3Bjl1 NgEFGJbPFYgt8Um2hL/TZgEnH+vYWuxiR8+HTet/sI4kb2kx3QW77/M7teawh3ZUEALh RX8bJ+YFoUgTGh59v7BE8gyAY/pffkXaVHePQdXeU+5cfP2BYBE+KHng8evfx3TpGob4 MX5acT7YNVD7Dm35tizDqt3ttXcLX6+RRoc5EQqMuvLO12pKRhtAhHiX0yB8boRspYnn 58Dg== X-Gm-Message-State: AOJu0YzH3JNInMJPDMtLwPcM//FdOtG5QY8/7F7JzT2NG68ZiYDIXkut BSf9QCHUPgUaxxl23jM5O4Db/skFDWHlxREdI27bi763egKTMx7vc85qxUH/1SGrk0vneVKAPef +Gq3nBF4p81mwgi2clq61SLUuMdzL45s= X-Gm-Gg: ATEYQzwkOfFwg8jobZxN7uw+wc0NYgQLdr/N1p1Jwtm8fGCztP3gyB4nIAV9c5ilM4M m2bnYqcESYvuRwm7OJSrYw5JncTz2AFArzawwWXcqLSp7CBXCNqvCxQbbyz/9FuKyTaPNybZBd7 Tw/C4wMrHgPlkDhjOouWGKUKigz7p7sG4dn+ZiJzqK45QWTnlJcxZnQWg729+xSzCtWvz8HFx0f slTJZaUPpmgY9pv4s7h0/JT9qWi5OCjQsyxRlsbQZwhBrq1YH0JE9nM9K2aDsWW8tih83Dj5DTf 4ix2NrnRoMbTlubxbOAadpTFzwhIKiMCLSs/3xArRLx9p4GxLw== X-Received: by 2002:a05:6512:2306:b0:5a1:7e29:c10b with SMTP id 2adb3069b0e04-5a29b9814a9mr141204e87.18.1774373231402; Tue, 24 Mar 2026 10:27:11 -0700 (PDT) MIME-Version: 1.0 References: <1791665551.452444.1761209220211.ref@mail.yahoo.com> <1895971769.8343.1761240853939@mail.yahoo.com> <574624399.175025.1761290201491@mail.yahoo.com> <953203149.383019.1761345585325@mail.yahoo.com> <6F76FA61-E2DC-44EF-9504-889D9BDB4EBD@yandex-team.ru> <1154454839.957923.1761604611424@mail.yahoo.com> <87ldkv8cog.fsf@wibble.ilmari.org> <87ikfz7zcu.fsf@wibble.ilmari.org> <9CB824CC-70DC-4165-AC6A-9664F47209EE@yandex-team.ru> <878qbn51kb.fsf@wibble.ilmari.org> <1F13AF7E-B90A-40FB-B47C-DC38FBB08353@gmail.com> In-Reply-To: From: Masahiko Sawada Date: Tue, 24 Mar 2026 10:26:34 -0700 X-Gm-Features: AQROBzCkBZpggiFamPZ6D-sCuxtimD-HWc02ZoTKm9SOoljbdE8RorN25no_viE Message-ID: Subject: Re: Add uuid_to_base32hex() and base32hex_to_uuid() built-in functions To: Aleksander Alekseev Cc: pgsql-hackers , Chao Li , =?UTF-8?Q?Dagfinn_Ilmari_Manns=C3=A5ker?= , Andrey Borodin Content-Type: multipart/mixed; boundary="000000000000284a53064dc87659" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000284a53064dc87659 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Tue, Mar 24, 2026 at 8:31=E2=80=AFAM Aleksander Alekseev wrote: > > Hi, > > > > The patch looks basically good to me. I've made some changes to the > > > regression test part as I want to have round-trip tests. I've merged > > > the tests checking the sortability to the existing tests and added > > > round-trip tests. With this change, we can test round-trip tests and > > > sortability tests with random UUID value in every test run while > > > minimizing the test time. Feedback is very welcome. > > v11 looks good to me. > > > It looks like leading, trailing, and embedded whitespace are all ignore= d. But I don=E2=80=99t see a test case covering this behavior, so maybe it = would be good to add one. > > I intentionally didn't include this test because the code is trivial: > > `` > /* Skip whitespace */ > if (c =3D=3D ' ' || c =3D=3D '\t' || c =3D=3D '\n' || c =3D=3D '\= r') > continue; > ``` > > And also because we never tested it for base64. If we want to start > testing it we should add tests both for base64 and base32hex which IMO > should be a separate patch. Agreed. I've attached the updated version patch that includes the following points: - changed the order of encodings in the doc and the hint message to maintain alphabetical order. - changed the query example to extract data from the encoded UUID value to use rtrim() as it's more intuitive. - added some regression tests for decoding unpadded inputs. I'm going to push the patch unless there are comments on these changes. Regards, --=20 Masahiko Sawada Amazon Web Services: https://aws.amazon.com --000000000000284a53064dc87659 Content-Type: application/octet-stream; name="v12-0001-Add-base32hex-support-to-encode-and-decode-funct.patch" Content-Disposition: attachment; filename="v12-0001-Add-base32hex-support-to-encode-and-decode-funct.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn4vtoik0 RnJvbSAyNDM0MDQ0MjZhMGIzNjdkODFiM2M1NmFmMTJhYjU5ODU4YTY0YmY2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXkgQm9yb2RpbiA8YW1ib3JvZGluQGFjbS5vcmc+CkRh dGU6IFdlZCwgMjkgT2N0IDIwMjUgMTU6NTM6MTIgKzA0MDAKU3ViamVjdDogW1BBVENIIHYxMl0g QWRkIGJhc2UzMmhleCBzdXBwb3J0IHRvIGVuY29kZSgpIGFuZCBkZWNvZGUoKSBmdW5jdGlvbnMu Ck1JTUUtVmVyc2lvbjogMS4wCkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYt OApDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CgpUaGlzIGFkZHMgc3VwcG9ydCBmb3Ig YmFzZTMyaGV4IGVuY29kaW5nIGFuZCBkZWNvZGluZywgYXMgZGVmaW5lZCBpbgpSRkMgNDY0OCBT ZWN0aW9uIDcuIFVubGlrZSBzdGFuZGFyZCBiYXNlMzIsIGJhc2UzMmhleCB1c2VzIHRoZQpleHRl bmRlZCBoZXggYWxwaGFiZXQgKDAtOSwgQS1WKSB3aGljaCBwcmVzZXJ2ZXMgdGhlIGxleGljb2dy YXBoaWNhbApvcmRlciBvZiB0aGUgZW5jb2RlZCBkYXRhLgoKVGhpcyBpcyBwYXJ0aWN1bGFybHkg dXNlZnVsIGZvciByZXByZXNlbnRpbmcgVVVJRHY3IHZhbHVlcyBpbiBhCmNvbXBhY3Qgc3RyaW5n IGZvcm1hdCB3aGlsZSBtYWludGFpbmluZyB0aGVpciB0aW1lLW9yZGVyZWQgc29ydApwcm9wZXJ0 eS4KClRoZSBlbmNvZGUoKSBmdW5jdGlvbiBwcm9kdWNlcyBvdXRwdXQgcGFkZGVkIHdpdGggJz0n LCB3aGlsZSBkZWNvZGUoKQphY2NlcHRzIGJvdGggcGFkZGVkIGFuZCB1bnBhZGRlZCBpbnB1dC4g Rm9sbG93aW5nIHRoZSBiZWhhdmlvciBvZgpvdGhlciBlbmNvZGluZyB0eXBlcywgZGVjb2Rpbmcg aXMgY2FzZS1pbnNlbnNpdGl2ZS4KClN1Z2dlc3RlZC1ieTogU2VyZ2V5IFByb2tob3JlbmtvIDxz ZXJnZXlwcm9raG9yZW5rb0B5YWhvby5jb20uYXU+CkF1dGhvcjogQW5kcmV5IEJvcm9kaW4gPHg0 bW1tQHlhbmRleC10ZWFtLnJ1PgpDby1hdXRob3JlZC1ieTogQWxla3NhbmRlciBBbGVrc2VldiA8 YWxla3NhbmRlckB0aWdlcmRhdGEuY29tPgpSZXZpZXdlZC1ieTogTWFzYWhpa28gU2F3YWRhIDxz YXdhZGEubXNoa0BnbWFpbC5jb20+ClJldmlld2VkLWJ5OiDQmNC70YzRjyDQp9C10YDQtNCw0LrQ vtCyIDxpLmNoZXJkYWtvdi5wZ0BnbWFpbC5jb20+ClJldmlld2VkLWJ5OiBDaGVuZ3hpIFN1biA8 Y2hlbmd4aXN1bjkyQGdtYWlsLmNvbT4KUmV2aWV3ZWQtYnk6IENoYW8gTGkgPGxpLmV2YW4uY2hh b0BnbWFpbC5jb20+CkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vQ0FKN2M2VE9yYW1y MVVUTGN5QjEyOExXTXFpdGExWTclM0RhcnEzS0hhVSUzRHFpa2Y1eUtPUSU0MG1haWwuZ21haWwu Y29tCi0tLQogZG9jL3NyYy9zZ21sL2Z1bmMvZnVuYy1iaW5hcnlzdHJpbmcuc2dtbCB8ICAyNyAr KysrCiBzcmMvYmFja2VuZC91dGlscy9hZHQvZW5jb2RlLmMgICAgICAgICAgIHwgMTUzICsrKysr KysrKysrKysrKysrKysrKy0KIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3RyaW5ncy5vdXQg ICAgfCAxNjAgKysrKysrKysrKysrKysrKysrKysrKy0KIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvdXVpZC5vdXQgICAgICAgfCAgMTggKystCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9zdHJpbmdz LnNxbCAgICAgICAgIHwgIDU2ICsrKysrKystCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC91dWlkLnNx bCAgICAgICAgICAgIHwgICA4ICstCiA2IGZpbGVzIGNoYW5nZWQsIDQwOSBpbnNlcnRpb25zKCsp LCAxMyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvZnVuYy9mdW5jLWJp bmFyeXN0cmluZy5zZ21sIGIvZG9jL3NyYy9zZ21sL2Z1bmMvZnVuYy1iaW5hcnlzdHJpbmcuc2dt bAppbmRleCBiMjU2MzgxZTAxZi4uMGFhZjliYzY4ZjEgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dt bC9mdW5jL2Z1bmMtYmluYXJ5c3RyaW5nLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2Z1bmMvZnVu Yy1iaW5hcnlzdHJpbmcuc2dtbApAQCAtNzI3LDYgKzcyNyw3IEBACiAgICAgICA8cGFyYT4KICAg ICAgICBFbmNvZGVzIGJpbmFyeSBkYXRhIGludG8gYSB0ZXh0dWFsIHJlcHJlc2VudGF0aW9uOyBz dXBwb3J0ZWQKICAgICAgICA8cGFyYW1ldGVyPmZvcm1hdDwvcGFyYW1ldGVyPiB2YWx1ZXMgYXJl OgorICAgICAgIDxsaW5rIGxpbmtlbmQ9ImVuY29kZS1mb3JtYXQtYmFzZTMyaGV4Ij48bGl0ZXJh bD5iYXNlMzJoZXg8L2xpdGVyYWw+PC9saW5rPiwKICAgICAgICA8bGluayBsaW5rZW5kPSJlbmNv ZGUtZm9ybWF0LWJhc2U2NCI+PGxpdGVyYWw+YmFzZTY0PC9saXRlcmFsPjwvbGluaz4sCiAgICAg ICAgPGxpbmsgbGlua2VuZD0iZW5jb2RlLWZvcm1hdC1iYXNlNjR1cmwiPjxsaXRlcmFsPmJhc2U2 NHVybDwvbGl0ZXJhbD48L2xpbms+LAogICAgICAgIDxsaW5rIGxpbmtlbmQ9ImVuY29kZS1mb3Jt YXQtZXNjYXBlIj48bGl0ZXJhbD5lc2NhcGU8L2xpdGVyYWw+PC9saW5rPiwKQEAgLTc2Niw2ICs3 NjcsMzIgQEAKICAgIGZ1bmN0aW9ucyBzdXBwb3J0IHRoZSBmb2xsb3dpbmcgdGV4dHVhbCBmb3Jt YXRzOgogCiAgICA8dmFyaWFibGVsaXN0PgorICAgIDx2YXJsaXN0ZW50cnkgaWQ9ImVuY29kZS1m b3JtYXQtYmFzZTMyaGV4Ij4KKyAgICAgPHRlcm0+YmFzZTMyaGV4CisgICAgICA8aW5kZXh0ZXJt PgorICAgICAgIDxwcmltYXJ5PmJhc2UzMmhleCBmb3JtYXQ8L3ByaW1hcnk+CisgICAgICA8L2lu ZGV4dGVybT48L3Rlcm0+CisgICAgIDxsaXN0aXRlbT4KKyAgICAgIDxwYXJhPgorICAgICAgIFRo ZSA8bGl0ZXJhbD5iYXNlMzJoZXg8L2xpdGVyYWw+IGZvcm1hdCBpcyB0aGF0IG9mCisgICAgICAg PHVsaW5rIHVybD0iaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM0NjQ4 I3NlY3Rpb24tNyI+CisgICAgICAgUkZDIDQ2NDggU2VjdGlvbiA3PC91bGluaz4uICBJdCB1c2Vz IHRoZSBleHRlbmRlZCBoZXggYWxwaGFiZXQKKyAgICAgICAoPGxpdGVyYWw+MDwvbGl0ZXJhbD4t PGxpdGVyYWw+OTwvbGl0ZXJhbD4gYW5kCisgICAgICAgPGxpdGVyYWw+QTwvbGl0ZXJhbD4tPGxp dGVyYWw+VjwvbGl0ZXJhbD4pIHdoaWNoIHByZXNlcnZlcyB0aGUgbGV4aWNvZ3JhcGhpY2FsCisg ICAgICAgc29ydCBvcmRlciBvZiB0aGUgZW5jb2RlZCBkYXRhLiBUaGUgPGZ1bmN0aW9uPmVuY29k ZTwvZnVuY3Rpb24+IGZ1bmN0aW9uCisgICAgICAgcHJvZHVjZXMgb3V0cHV0IHBhZGRlZCB3aXRo IDxsaXRlcmFsPic9JzwvbGl0ZXJhbD4sIHdoaWxlIDxmdW5jdGlvbj5kZWNvZGU8L2Z1bmN0aW9u PgorICAgICAgIGFjY2VwdHMgYm90aCBwYWRkZWQgYW5kIHVucGFkZGVkIGlucHV0LiBEZWNvZGlu ZyBpcyBjYXNlLWluc2Vuc2l0aXZlIGFuZCBpZ25vcmVzCisgICAgICAgd2hpdGVzcGFjZSBjaGFy YWN0ZXJzLgorICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+CisgICAgICAgVGhpcyBmb3JtYXQg aXMgdXNlZnVsIGZvciBlbmNvZGluZyBVVUlEcyBpbiBhIGNvbXBhY3QsIHNvcnRhYmxlIGZvcm1h dDoKKyAgICAgICA8bGl0ZXJhbD5ydHJpbShlbmNvZGUodXVpZF92YWx1ZTo6Ynl0ZWEsICdiYXNl MzJoZXgnKSwgJz0nKTwvbGl0ZXJhbD4KKyAgICAgICBwcm9kdWNlcyBhIDI2LWNoYXJhY3RlciBz dHJpbmcgY29tcGFyZWQgdG8gdGhlIHN0YW5kYXJkIDM2LWNoYXJhY3RlcgorICAgICAgIFVVSUQg cmVwcmVzZW50YXRpb24uCisgICAgICA8L3BhcmE+CisgICAgIDwvbGlzdGl0ZW0+CisgICAgPC92 YXJsaXN0ZW50cnk+CisKICAgICA8dmFybGlzdGVudHJ5IGlkPSJlbmNvZGUtZm9ybWF0LWJhc2U2 NCI+CiAgICAgIDx0ZXJtPmJhc2U2NAogICAgICA8aW5kZXh0ZXJtPgpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvdXRpbHMvYWR0L2VuY29kZS5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2VuY29k ZS5jCmluZGV4IGY1ZjgzNWU5NDRhLi41ZjE2NDVlOGIxNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvdXRpbHMvYWR0L2VuY29kZS5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9lbmNvZGUu YwpAQCAtNjUsOCArNjUsOCBAQCBiaW5hcnlfZW5jb2RlKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCWVy ZXBvcnQoRVJST1IsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxV RSksCiAJCQkJIGVycm1zZygidW5yZWNvZ25pemVkIGVuY29kaW5nOiBcIiVzXCIiLCBuYW1lYnVm KSwKLQkJCQkgZXJyaGludCgiVmFsaWQgZW5jb2RpbmdzIGFyZSBcIiVzXCIsIFwiJXNcIiwgXCIl c1wiLCBhbmQgXCIlc1wiLiIsCi0JCQkJCQkgImJhc2U2NCIsICJiYXNlNjR1cmwiLCAiZXNjYXBl IiwgImhleCIpKSk7CisJCQkJIGVycmhpbnQoIlZhbGlkIGVuY29kaW5ncyBhcmUgXCIlc1wiLCBc IiVzXCIsIFwiJXNcIiwgXCIlc1wiLCBhbmQgXCIlc1wiLiIsCisJCQkJCQkgImJhc2UzMmhleCIs ICJiYXNlNjQiLCAiYmFzZTY0dXJsIiwgImVzY2FwZSIsICJoZXgiKSkpOwogCiAJZGF0YXB0ciA9 IFZBUkRBVEFfQU5ZKGRhdGEpOwogCWRhdGFsZW4gPSBWQVJTSVpFX0FOWV9FWEhEUihkYXRhKTsK QEAgLTExNSw4ICsxMTUsOCBAQCBiaW5hcnlfZGVjb2RlKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCWVy ZXBvcnQoRVJST1IsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxV RSksCiAJCQkJIGVycm1zZygidW5yZWNvZ25pemVkIGVuY29kaW5nOiBcIiVzXCIiLCBuYW1lYnVm KSwKLQkJCQkgZXJyaGludCgiVmFsaWQgZW5jb2RpbmdzIGFyZSBcIiVzXCIsIFwiJXNcIiwgXCIl c1wiLCBhbmQgXCIlc1wiLiIsCi0JCQkJCQkgImJhc2U2NCIsICJiYXNlNjR1cmwiLCAiZXNjYXBl IiwgImhleCIpKSk7CisJCQkJIGVycmhpbnQoIlZhbGlkIGVuY29kaW5ncyBhcmUgXCIlc1wiLCBc IiVzXCIsIFwiJXNcIiwgXCIlc1wiLCBhbmQgXCIlc1wiLiIsCisJCQkJCQkgImJhc2UzMmhleCIs ICJiYXNlNjQiLCAiYmFzZTY0dXJsIiwgImVzY2FwZSIsICJoZXgiKSkpOwogCiAJZGF0YXB0ciA9 IFZBUkRBVEFfQU5ZKGRhdGEpOwogCWRhdGFsZW4gPSBWQVJTSVpFX0FOWV9FWEhEUihkYXRhKTsK QEAgLTgyNSw2ICs4MjUsMTQ1IEBAIGVzY19kZWNfbGVuKGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90 IHNyY2xlbikKIAlyZXR1cm4gbGVuOwogfQogCisvKgorICogQkFTRTMySEVYCisgKi8KKworc3Rh dGljIGNvbnN0IGNoYXIgYmFzZTMyaGV4X3RhYmxlW10gPSAiMDEyMzQ1Njc4OUFCQ0RFRkdISUpL TE1OT1BRUlNUVVYiOworCitzdGF0aWMgdWludDY0CitiYXNlMzJoZXhfZW5jX2xlbihjb25zdCBj aGFyICpzcmMsIHNpemVfdCBzcmNsZW4pCit7CisJLyogNSBieXRlcyBlbmNvZGUgdG8gOCBjaGFy YWN0ZXJzLCByb3VuZCB1cCB0byBtdWx0aXBsZSBvZiA4IGZvciBwYWRkaW5nICovCisJcmV0dXJu ICgodWludDY0KSBzcmNsZW4gKyA0KSAvIDUgKiA4OworfQorCitzdGF0aWMgdWludDY0CitiYXNl MzJoZXhfZGVjX2xlbihjb25zdCBjaGFyICpzcmMsIHNpemVfdCBzcmNsZW4pCit7CisJLyogRWFj aCA4IGNoYXJhY3RlcnMgb2YgaW5wdXQgcHJvZHVjZXMgYXQgbW9zdCA1IGJ5dGVzIG9mIG91dHB1 dCAqLworCXJldHVybiAoKHVpbnQ2NCkgc3JjbGVuICogNSkgLyA4OworfQorCitzdGF0aWMgdWlu dDY0CitiYXNlMzJoZXhfZW5jb2RlKGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IHNyY2xlbiwgY2hh ciAqZHN0KQoreworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEgPSAoY29uc3QgdW5zaWduZWQg Y2hhciAqKSBzcmM7CisJdWludDMyCQliaXRzX2J1ZmZlciA9IDA7CisJaW50CQkJYml0c19pbl9i dWZmZXIgPSAwOworCXVpbnQ2NAkJb3V0cHV0X3BvcyA9IDA7CisJc2l6ZV90CQlpOworCisJZm9y IChpID0gMDsgaSA8IHNyY2xlbjsgaSsrKQorCXsKKwkJLyogQWRkIDggYml0cyB0byB0aGUgYnVm ZmVyICovCisJCWJpdHNfYnVmZmVyID0gKGJpdHNfYnVmZmVyIDw8IDgpIHwgZGF0YVtpXTsKKwkJ Yml0c19pbl9idWZmZXIgKz0gODsKKworCQkvKiBFeHRyYWN0IDUtYml0IGNodW5rcyB3aGlsZSB3 ZSBoYXZlIGVub3VnaCBiaXRzICovCisJCXdoaWxlIChiaXRzX2luX2J1ZmZlciA+PSA1KQorCQl7 CisJCQliaXRzX2luX2J1ZmZlciAtPSA1OworCQkJLyogRXh0cmFjdCB0b3AgNSBiaXRzICovCisJ CQlkc3Rbb3V0cHV0X3BvcysrXSA9IGJhc2UzMmhleF90YWJsZVsoYml0c19idWZmZXIgPj4gYml0 c19pbl9idWZmZXIpICYgMHgxRl07CisJCQkvKiBDbGVhciB0aGUgZXh0cmFjdGVkIGJpdHMgYnkg bWFza2luZyAqLworCQkJYml0c19idWZmZXIgJj0gKCgxVSA8PCBiaXRzX2luX2J1ZmZlcikgLSAx KTsKKwkJfQorCX0KKworCS8qIEhhbmRsZSByZW1haW5pbmcgYml0cyAoaWYgYW55KSAqLworCWlm IChiaXRzX2luX2J1ZmZlciA+IDApCisJCWRzdFtvdXRwdXRfcG9zKytdID0gYmFzZTMyaGV4X3Rh YmxlWyhiaXRzX2J1ZmZlciA8PCAoNSAtIGJpdHNfaW5fYnVmZmVyKSkgJiAweDFGXTsKKworCS8q IEFkZCBwYWRkaW5nIHRvIG1ha2UgbGVuZ3RoIGEgbXVsdGlwbGUgb2YgOCAocGVyIFJGQyA0NjQ4 KSAqLworCXdoaWxlIChvdXRwdXRfcG9zICUgOCAhPSAwKQorCQlkc3Rbb3V0cHV0X3BvcysrXSA9 ICc9JzsKKworCXJldHVybiBvdXRwdXRfcG9zOworfQorCitzdGF0aWMgdWludDY0CitiYXNlMzJo ZXhfZGVjb2RlKGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IHNyY2xlbiwgY2hhciAqZHN0KQorewor CWNvbnN0IGNoYXIgKnNyY2VuZCA9IHNyYyArIHNyY2xlbiwKKwkJCSAgICpzID0gc3JjOworCXVp bnQzMgkJYml0c19idWZmZXIgPSAwOworCWludAkJCWJpdHNfaW5fYnVmZmVyID0gMDsKKwl1aW50 NjQJCW91dHB1dF9wb3MgPSAwOworCWludAkJCXBvcyA9IDA7CQkvKiBwb3NpdGlvbiB3aXRoaW4g OC1jaGFyYWN0ZXIgZ3JvdXAgKDAtNykgKi8KKwlib29sCQllbmQgPSBmYWxzZTsJLyogaGF2ZSB3 ZSBzZWVuIHBhZGRpbmc/ICovCisKKwl3aGlsZSAocyA8IHNyY2VuZCkKKwl7CisJCWNoYXIJCWMg PSAqcysrOworCQlpbnQJCQl2YWw7CisKKwkJLyogU2tpcCB3aGl0ZXNwYWNlICovCisJCWlmIChj ID09ICcgJyB8fCBjID09ICdcdCcgfHwgYyA9PSAnXG4nIHx8IGMgPT0gJ1xyJykKKwkJCWNvbnRp bnVlOworCisJCWlmIChjID09ICc9JykKKwkJeworCQkJLyoKKwkJCSAqIFRoZSBmaXJzdCBwYWRk aW5nIGlzIG9ubHkgdmFsaWQgYXQgcG9zaXRpb25zIDIsIDQsIDUsIG9yIDcKKwkJCSAqIHdpdGhp biBhbiA4LWNoYXJhY3RlciBncm91cCAoY29ycmVzcG9uZGluZyB0byAxLCAyLCAzLCBvciA0CisJ CQkgKiBpbnB1dCBieXRlcykuIFdlIG9ubHkgY2hlY2sgdGhlIHBvc2l0aW9uIGZvciB0aGUgZmly c3QgJz0nCisJCQkgKiBjaGFyYWN0ZXIuCisJCQkgKi8KKwkJCWlmICghZW5kKQorCQkJeworCQkJ CWlmIChwb3MgIT0gMiAmJiBwb3MgIT0gNCAmJiBwb3MgIT0gNSAmJiBwb3MgIT0gNykKKwkJCQkJ ZXJlcG9ydChFUlJPUiwKKwkJCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVS X1ZBTFVFKSwKKwkJCQkJCQkgZXJybXNnKCJ1bmV4cGVjdGVkIFwiPVwiIHdoaWxlIGRlY29kaW5n IGJhc2UzMmhleCBzZXF1ZW5jZSIpKSk7CisJCQkJZW5kID0gdHJ1ZTsKKwkJCX0KKwkJCXBvcysr OworCQkJY29udGludWU7CisJCX0KKworCQkvKiBObyBkYXRhIGNoYXJhY3RlcnMgYWxsb3dlZCBh ZnRlciBwYWRkaW5nICovCisJCWlmIChlbmQpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJy Y29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJIGVycm1zZygiaW52 YWxpZCBzeW1ib2wgXCIlLipzXCIgZm91bmQgd2hpbGUgZGVjb2RpbmcgYmFzZTMyaGV4IHNlcXVl bmNlIiwKKwkJCQkJCQlwZ19tYmxlbl9yYW5nZShzIC0gMSwgc3JjZW5kKSwgcyAtIDEpKSk7CisK KwkJLyogRGVjb2RlIGJhc2UzMmhleCBjaGFyYWN0ZXIgKDAtOSwgQS1WLCBjYXNlLWluc2Vuc2l0 aXZlKSAqLworCQlpZiAoYyA+PSAnMCcgJiYgYyA8PSAnOScpCisJCQl2YWwgPSBjIC0gJzAnOwor CQllbHNlIGlmIChjID49ICdBJyAmJiBjIDw9ICdWJykKKwkJCXZhbCA9IGMgLSAnQScgKyAxMDsK KwkJZWxzZSBpZiAoYyA+PSAnYScgJiYgYyA8PSAndicpCisJCQl2YWwgPSBjIC0gJ2EnICsgMTA7 CisJCWVsc2UKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJ RF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkgZXJybXNnKCJpbnZhbGlkIHN5bWJvbCBcIiUuKnNc IiBmb3VuZCB3aGlsZSBkZWNvZGluZyBiYXNlMzJoZXggc2VxdWVuY2UiLAorCQkJCQkJCXBnX21i bGVuX3JhbmdlKHMgLSAxLCBzcmNlbmQpLCBzIC0gMSkpKTsKKworCQkvKiBBZGQgNSBiaXRzIHRv IGJ1ZmZlciAqLworCQliaXRzX2J1ZmZlciA9IChiaXRzX2J1ZmZlciA8PCA1KSB8IHZhbDsKKwkJ Yml0c19pbl9idWZmZXIgKz0gNTsKKwkJcG9zKys7CisKKwkJLyogRXh0cmFjdCA4LWJpdCBieXRl cyB3aGVuIHdlIGhhdmUgZW5vdWdoIGJpdHMgKi8KKwkJd2hpbGUgKGJpdHNfaW5fYnVmZmVyID49 IDgpCisJCXsKKwkJCWJpdHNfaW5fYnVmZmVyIC09IDg7CisJCQlkc3Rbb3V0cHV0X3BvcysrXSA9 ICh1bnNpZ25lZCBjaGFyKSAoYml0c19idWZmZXIgPj4gYml0c19pbl9idWZmZXIpOworCQkJLyog Q2xlYXIgdGhlIGV4dHJhY3RlZCBiaXRzICovCisJCQliaXRzX2J1ZmZlciAmPSAoKDFVIDw8IGJp dHNfaW5fYnVmZmVyKSAtIDEpOworCQl9CisKKwkJLyogUmVzZXQgcG9zaXRpb24gYWZ0ZXIgZWFj aCBjb21wbGV0ZSA4LWNoYXJhY3RlciBncm91cCAqLworCQlpZiAocG9zID09IDgpCisJCQlwb3Mg PSAwOworCX0KKworCXJldHVybiBvdXRwdXRfcG9zOworfQorCiAvKgogICogQ29tbW9uCiAgKi8K QEAgLTg1NCw2ICs5OTMsMTIgQEAgc3RhdGljIGNvbnN0IHN0cnVjdAogCQkJcGdfYmFzZTY0dXJs X2VuY19sZW4sIHBnX2Jhc2U2NHVybF9kZWNfbGVuLCBwZ19iYXNlNjR1cmxfZW5jb2RlLCBwZ19i YXNlNjR1cmxfZGVjb2RlCiAJCX0KIAl9LAorCXsKKwkJImJhc2UzMmhleCIsCisJCXsKKwkJCWJh c2UzMmhleF9lbmNfbGVuLCBiYXNlMzJoZXhfZGVjX2xlbiwgYmFzZTMyaGV4X2VuY29kZSwgYmFz ZTMyaGV4X2RlY29kZQorCQl9CisJfSwKIAl7CiAJCSJlc2NhcGUiLAogCQl7CmRpZmYgLS1naXQg YS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N0cmluZ3Mub3V0IGIvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9zdHJpbmdzLm91dAppbmRleCBmMzg2ODhiNWMzNy4uY2M4ZGU5OGE3NGEgMTAw NjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3RyaW5ncy5vdXQKKysrIGIvc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zdHJpbmdzLm91dApAQCAtMjYwMCwxNCArMjYwMCwxNjgg QEAgU0VMRUNUIGRlY29kZShlbmNvZGUoJ1x4MTIzNDU2Nzg5MGFiY2RlZjAwJywgJ2VzY2FwZScp LCAnZXNjYXBlJyk7CiAtLSByZXBvcnQgYW4gZXJyb3Igd2l0aCBhIGhpbnQgbGlzdGluZyB2YWxp ZCBlbmNvZGluZ3Mgd2hlbiBhbiBpbnZhbGlkIGVuY29kaW5nIGlzIHNwZWNpZmllZAogU0VMRUNU IGVuY29kZSgnXHgwMSc6OmJ5dGVhLCAnaW52YWxpZCcpOyAgLS0gZXJyb3IKIEVSUk9SOiAgdW5y ZWNvZ25pemVkIGVuY29kaW5nOiAiaW52YWxpZCIKLUhJTlQ6ICBWYWxpZCBlbmNvZGluZ3MgYXJl ICJiYXNlNjQiLCAiYmFzZTY0dXJsIiwgImVzY2FwZSIsIGFuZCAiaGV4Ii4KK0hJTlQ6ICBWYWxp ZCBlbmNvZGluZ3MgYXJlICJiYXNlMzJoZXgiLCAiYmFzZTY0IiwgImJhc2U2NHVybCIsICJlc2Nh cGUiLCBhbmQgImhleCIuCiBTRUxFQ1QgZGVjb2RlKCcwMCcsICdpbnZhbGlkJyk7ICAgICAgICAg ICAtLSBlcnJvcgogRVJST1I6ICB1bnJlY29nbml6ZWQgZW5jb2Rpbmc6ICJpbnZhbGlkIgotSElO VDogIFZhbGlkIGVuY29kaW5ncyBhcmUgImJhc2U2NCIsICJiYXNlNjR1cmwiLCAiZXNjYXBlIiwg YW5kICJoZXgiLgorSElOVDogIFZhbGlkIGVuY29kaW5ncyBhcmUgImJhc2UzMmhleCIsICJiYXNl NjQiLCAiYmFzZTY0dXJsIiwgImVzY2FwZSIsIGFuZCAiaGV4Ii4KIC0tCi0tLSBiYXNlNjR1cmwg ZW5jb2RpbmcvZGVjb2RpbmcKKy0tIGJhc2UzMmhleCBlbmNvZGluZy9kZWNvZGluZwogLS0KIFNF VCBieXRlYV9vdXRwdXQgVE8gaGV4OworU0VMRUNUIGVuY29kZSgnJywgJ2Jhc2UzMmhleCcpOyAg LS0gJycKKyBlbmNvZGUgCistLS0tLS0tLQorIAorKDEgcm93KQorCitTRUxFQ1QgZW5jb2RlKCdc eDExJywgJ2Jhc2UzMmhleCcpOyAgLS0gJzI0PT09PT09JworICBlbmNvZGUgIAorLS0tLS0tLS0t LQorIDI0PT09PT09CisoMSByb3cpCisKK1NFTEVDVCBlbmNvZGUoJ1x4MTEyMicsICdiYXNlMzJo ZXgnKTsgIC0tICcyNEgwPT09PScKKyAgZW5jb2RlICAKKy0tLS0tLS0tLS0KKyAyNEgwPT09PQor KDEgcm93KQorCitTRUxFQ1QgZW5jb2RlKCdceDExMjIzMycsICdiYXNlMzJoZXgnKTsgIC0tICcy NEgzNj09PScKKyAgZW5jb2RlICAKKy0tLS0tLS0tLS0KKyAyNEgzNj09PQorKDEgcm93KQorCitT RUxFQ1QgZW5jb2RlKCdceDExMjIzMzQ0JywgJ2Jhc2UzMmhleCcpOyAgLS0gJzI0SDM2SDA9Jwor ICBlbmNvZGUgIAorLS0tLS0tLS0tLQorIDI0SDM2SDA9CisoMSByb3cpCisKK1NFTEVDVCBlbmNv ZGUoJ1x4MTEyMjMzNDQ1NScsICdiYXNlMzJoZXgnKTsgIC0tICcyNEgzNkgyTCcKKyAgZW5jb2Rl ICAKKy0tLS0tLS0tLS0KKyAyNEgzNkgyTAorKDEgcm93KQorCitTRUxFQ1QgZW5jb2RlKCdceDEx MjIzMzQ0NTU2NicsICdiYXNlMzJoZXgnKTsgIC0tICcyNEgzNkgyTENPPT09PT09JworICAgICAg ZW5jb2RlICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0KKyAyNEgzNkgyTENPPT09PT09CisoMSBy b3cpCisKK1NFTEVDVCBkZWNvZGUoJycsICdiYXNlMzJoZXgnKTsgIC0tICcnCisgZGVjb2RlIAor LS0tLS0tLS0KKyBceAorKDEgcm93KQorCitTRUxFQ1QgZGVjb2RlKCcyND09PT09PScsICdiYXNl MzJoZXgnKTsgIC0tIFx4MTEKKyBkZWNvZGUgCistLS0tLS0tLQorIFx4MTEKKygxIHJvdykKKwor U0VMRUNUIGRlY29kZSgnMjRIMD09PT0nLCAnYmFzZTMyaGV4Jyk7ICAtLSBceDExMjIKKyBkZWNv ZGUgCistLS0tLS0tLQorIFx4MTEyMgorKDEgcm93KQorCitTRUxFQ1QgZGVjb2RlKCcyNEgzNj09 PScsICdiYXNlMzJoZXgnKTsgIC0tIFx4MTEyMjMzCisgIGRlY29kZSAgCistLS0tLS0tLS0tCisg XHgxMTIyMzMKKygxIHJvdykKKworU0VMRUNUIGRlY29kZSgnMjRIMzZIMD0nLCAnYmFzZTMyaGV4 Jyk7ICAtLSBceDExMjIzMzQ0CisgICBkZWNvZGUgICAKKy0tLS0tLS0tLS0tLQorIFx4MTEyMjMz NDQKKygxIHJvdykKKworU0VMRUNUIGRlY29kZSgnMjRIMzZIMkwnLCAnYmFzZTMyaGV4Jyk7ICAt LSBceDExMjIzMzQ0NTUKKyAgICBkZWNvZGUgICAgCistLS0tLS0tLS0tLS0tLQorIFx4MTEyMjMz NDQ1NQorKDEgcm93KQorCitTRUxFQ1QgZGVjb2RlKCcyNEgzNkgyTENPPT09PT09JywgJ2Jhc2Uz MmhleCcpOyAgLS0gXHgxMTIyMzM0NDU1NjYKKyAgICAgZGVjb2RlICAgICAKKy0tLS0tLS0tLS0t LS0tLS0KKyBceDExMjIzMzQ0NTU2NgorKDEgcm93KQorCistLSBUZXN0cyBmb3IgZGVjb2Rpbmcg dW5wYWRkZWQgYmFzZTMyaGV4IHN0cmluZ3MuIFBhZGRpbmcgJz0nIGFyZSBvcHRpb25hbC4KK1NF TEVDVCBkZWNvZGUoJzI0JywgJ2Jhc2UzMmhleCcpOworIGRlY29kZSAKKy0tLS0tLS0tCisgXHgx MQorKDEgcm93KQorCitTRUxFQ1QgZGVjb2RlKCcyNEgnLCAnYmFzZTMyaGV4Jyk7CisgZGVjb2Rl IAorLS0tLS0tLS0KKyBceDExCisoMSByb3cpCisKK1NFTEVDVCBkZWNvZGUoJzI0SDM2JywgJ2Jh c2UzMmhleCcpOworICBkZWNvZGUgIAorLS0tLS0tLS0tLQorIFx4MTEyMjMzCisoMSByb3cpCisK K1NFTEVDVCBkZWNvZGUoJzI0SDM2SDAnLCAnYmFzZTMyaGV4Jyk7CisgICBkZWNvZGUgICAKKy0t LS0tLS0tLS0tLQorIFx4MTEyMjMzNDQKKygxIHJvdykKKworU0VMRUNUIGRlY29kZSgnMicsICdi YXNlMzJoZXgnKTsgLS0gXHgsIDUgYml0cyBpc24ndCBlbm91Z2ggZm9yIGEgYnl0ZSwgc28gbm90 aGluZyBpcyBlbWl0dGVkCisgZGVjb2RlIAorLS0tLS0tLS0KKyBceAorKDEgcm93KQorCitTRUxF Q1QgZGVjb2RlKCcxMT0nLCAnYmFzZTMyaGV4Jyk7ICAtLSBPSywgbm9uLXplcm8gcGFkZGluZyBi aXRzIGFyZSBhY2NlcHRlZCAoY29uc2lzdGVudCB3aXRoIGJhc2U2NCkKKyBkZWNvZGUgCistLS0t LS0tLQorIFx4MDgKKygxIHJvdykKKworU0VMRUNUIGRlY29kZSgnMjRoMzZoMmxjbycsICdiYXNl MzJoZXgnKTsgIC0tIE9LLCB0aGUgZW5jb2RpbmcgaXMgY2FzZS1pbnNlbnNpdGl2ZQorICAgICBk ZWNvZGUgICAgIAorLS0tLS0tLS0tLS0tLS0tLQorIFx4MTEyMjMzNDQ1NTY2CisoMSByb3cpCisK K1NFTEVDVCBkZWNvZGUoJz0nLCAnYmFzZTMyaGV4Jyk7ICAtLSBlcnJvcgorRVJST1I6ICB1bmV4 cGVjdGVkICI9IiB3aGlsZSBkZWNvZGluZyBiYXNlMzJoZXggc2VxdWVuY2UKK1NFTEVDVCBkZWNv ZGUoJ1cnLCAnYmFzZTMyaGV4Jyk7ICAtLSBlcnJvcgorRVJST1I6ICBpbnZhbGlkIHN5bWJvbCAi VyIgZm91bmQgd2hpbGUgZGVjb2RpbmcgYmFzZTMyaGV4IHNlcXVlbmNlCitTRUxFQ1QgZGVjb2Rl KCcyNEgzNkgwPTI0JywgJ2Jhc2UzMmhleCcpOyAtLSBlcnJvcgorRVJST1I6ICBpbnZhbGlkIHN5 bWJvbCAiMiIgZm91bmQgd2hpbGUgZGVjb2RpbmcgYmFzZTMyaGV4IHNlcXVlbmNlCistLSBDaGVj ayByb3VuZC10cmlwIGNhcGFiaWxpdHkgb2YgYmFzZTMyaGV4IGVuY29kaW5nIGZvciBtdWx0aXBs ZSByYW5kb20gVVVJRHMuCitETyAkJAorREVDTEFSRQorICB2MSB1dWlkOworICB2MiB1dWlkOwor QkVHSU4KKyAgRk9SIGkgSU4gMS4uMTAgTE9PUAorICAgIHYxIDo9IGdlbl9yYW5kb21fdXVpZCgp OworICAgIHYyIDo9IGRlY29kZShlbmNvZGUodjE6OmJ5dGVhLCAnYmFzZTMyaGV4JyksICdiYXNl MzJoZXgnKTo6dXVpZDsKKworICAgIElGIHYxICE9IHYyIFRIRU4KKyAgICAgIFJBSVNFIEVYQ0VQ VElPTiAnYmFzZTMyaGV4IGVuY29kaW5nIHJvdW5kLXRyaXAgZmFpbGVkLCBleHBlY3RlZCAlIGdv dCAlJywgdjEsIHYyOworICAgIEVORCBJRjsKKyAgRU5EIExPT1A7CisgIFJBSVNFIE5PVElDRSAn T0snOworRU5EOworJCQ7CitOT1RJQ0U6ICBPSworLS0KKy0tIGJhc2U2NHVybCBlbmNvZGluZy9k ZWNvZGluZworLS0KIC0tIFNpbXBsZSBlbmNvZGluZy9kZWNvZGluZwogU0VMRUNUIGVuY29kZSgn XHg2OWI3M2VmZicsICdiYXNlNjR1cmwnKTsgIC0tIGFiYy1fdwogIGVuY29kZSAKZGlmZiAtLWdp dCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvdXVpZC5vdXQgYi9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL3V1aWQub3V0CmluZGV4IGQxNTdlZjdkMGIzLi4xNDJjNTI5ZTY5MyAxMDA2NDQK LS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC91dWlkLm91dAorKysgYi9zcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL3V1aWQub3V0CkBAIC0xMyw3ICsxMyw4IEBAIENSRUFURSBUQUJMRSBn dWlkMgogQ1JFQVRFIFRBQkxFIGd1aWQzCiAoCiAJaWQgU0VSSUFMLAotCWd1aWRfZmllbGQgVVVJ RAorCWd1aWRfZmllbGQgVVVJRCwKKwlndWlkX2VuY29kZWQgdGV4dCBHRU5FUkFURUQgQUxXQVlT IEFTIChlbmNvZGUoZ3VpZF9maWVsZDo6Ynl0ZWEsICdiYXNlMzJoZXgnKSkgU1RPUkVECiApOwog LS0gaW5zZXJ0aW5nIGludmFsaWQgZGF0YSB0ZXN0cwogLS0gdG9vIGxvbmcKQEAgLTIyNiwxMSAr MjI3LDIwIEBAIFNFTEVDVCBjb3VudChESVNUSU5DVCBndWlkX2ZpZWxkKSBGUk9NIGd1aWQxOwog KDEgcm93KQogCiAtLSB0ZXN0IHNvcnRhYmlsaXR5IG9mIHY3CitJTlNFUlQgSU5UTyBndWlkMyAo Z3VpZF9maWVsZCkgVkFMVUVTICgnMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAw Jzo6dXVpZCk7CiBJTlNFUlQgSU5UTyBndWlkMyAoZ3VpZF9maWVsZCkgU0VMRUNUIHV1aWR2Nygp IEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwKTsKK0lOU0VSVCBJTlRPIGd1aWQzIChndWlkX2Zp ZWxkKSBWQUxVRVMgKCdmZmZmZmZmZi1mZmZmLWZmZmYtZmZmZi1mZmZmZmZmZmZmZmYnOjp1dWlk KTsKIFNFTEVDVCBhcnJheV9hZ2coaWQgT1JERVIgQlkgZ3VpZF9maWVsZCkgRlJPTSBndWlkMzsK LSAgICAgICBhcnJheV9hZ2cgICAgICAgIAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gezEs MiwzLDQsNSw2LDcsOCw5LDEwfQorICAgICAgICAgIGFycmF5X2FnZyAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB7MSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTJ9 CisoMSByb3cpCisKKy0tIG1ha2Ugc3VyZSBiYXNlMzJoZXggZW5jb2Rpbmcgd29ya3Mgd2l0aCBV VUlEcyBhbmQgcHJlc2VydmVzIG9yZGVyaW5nCitTRUxFQ1QgYXJyYXlfYWdnKGlkIE9SREVSIEJZ IGd1aWRfZW5jb2RlZCkgRlJPTSBndWlkMzsKKyAgICAgICAgICBhcnJheV9hZ2cgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgezEsMiwzLDQsNSw2LDcsOCw5LDEw LDExLDEyfQogKDEgcm93KQogCiAtLSBDaGVjayB0aGUgdGltZXN0YW1wIG9mZnNldHMgZm9yIHY3 LgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvc3RyaW5ncy5zcWwgYi9zcmMvdGVz dC9yZWdyZXNzL3NxbC9zdHJpbmdzLnNxbAppbmRleCBkOGEwOTczNzY2OC4uYzFkMjQwY2VhNmMg MTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3N0cmluZ3Muc3FsCisrKyBiL3NyYy90 ZXN0L3JlZ3Jlc3Mvc3FsL3N0cmluZ3Muc3FsCkBAIC04MzUsMTAgKzgzNSw2NCBAQCBTRUxFQ1Qg ZW5jb2RlKCdceDAxJzo6Ynl0ZWEsICdpbnZhbGlkJyk7ICAtLSBlcnJvcgogU0VMRUNUIGRlY29k ZSgnMDAnLCAnaW52YWxpZCcpOyAgICAgICAgICAgLS0gZXJyb3IKIAogLS0KLS0tIGJhc2U2NHVy bCBlbmNvZGluZy9kZWNvZGluZworLS0gYmFzZTMyaGV4IGVuY29kaW5nL2RlY29kaW5nCiAtLQog U0VUIGJ5dGVhX291dHB1dCBUTyBoZXg7CiAKK1NFTEVDVCBlbmNvZGUoJycsICdiYXNlMzJoZXgn KTsgIC0tICcnCitTRUxFQ1QgZW5jb2RlKCdceDExJywgJ2Jhc2UzMmhleCcpOyAgLS0gJzI0PT09 PT09JworU0VMRUNUIGVuY29kZSgnXHgxMTIyJywgJ2Jhc2UzMmhleCcpOyAgLS0gJzI0SDA9PT09 JworU0VMRUNUIGVuY29kZSgnXHgxMTIyMzMnLCAnYmFzZTMyaGV4Jyk7ICAtLSAnMjRIMzY9PT0n CitTRUxFQ1QgZW5jb2RlKCdceDExMjIzMzQ0JywgJ2Jhc2UzMmhleCcpOyAgLS0gJzI0SDM2SDA9 JworU0VMRUNUIGVuY29kZSgnXHgxMTIyMzM0NDU1JywgJ2Jhc2UzMmhleCcpOyAgLS0gJzI0SDM2 SDJMJworU0VMRUNUIGVuY29kZSgnXHgxMTIyMzM0NDU1NjYnLCAnYmFzZTMyaGV4Jyk7ICAtLSAn MjRIMzZIMkxDTz09PT09PScKKworU0VMRUNUIGRlY29kZSgnJywgJ2Jhc2UzMmhleCcpOyAgLS0g JycKK1NFTEVDVCBkZWNvZGUoJzI0PT09PT09JywgJ2Jhc2UzMmhleCcpOyAgLS0gXHgxMQorU0VM RUNUIGRlY29kZSgnMjRIMD09PT0nLCAnYmFzZTMyaGV4Jyk7ICAtLSBceDExMjIKK1NFTEVDVCBk ZWNvZGUoJzI0SDM2PT09JywgJ2Jhc2UzMmhleCcpOyAgLS0gXHgxMTIyMzMKK1NFTEVDVCBkZWNv ZGUoJzI0SDM2SDA9JywgJ2Jhc2UzMmhleCcpOyAgLS0gXHgxMTIyMzM0NAorU0VMRUNUIGRlY29k ZSgnMjRIMzZIMkwnLCAnYmFzZTMyaGV4Jyk7ICAtLSBceDExMjIzMzQ0NTUKK1NFTEVDVCBkZWNv ZGUoJzI0SDM2SDJMQ089PT09PT0nLCAnYmFzZTMyaGV4Jyk7ICAtLSBceDExMjIzMzQ0NTU2Ngor CistLSBUZXN0cyBmb3IgZGVjb2RpbmcgdW5wYWRkZWQgYmFzZTMyaGV4IHN0cmluZ3MuIFBhZGRp bmcgJz0nIGFyZSBvcHRpb25hbC4KK1NFTEVDVCBkZWNvZGUoJzI0JywgJ2Jhc2UzMmhleCcpOwor U0VMRUNUIGRlY29kZSgnMjRIJywgJ2Jhc2UzMmhleCcpOworU0VMRUNUIGRlY29kZSgnMjRIMzYn LCAnYmFzZTMyaGV4Jyk7CitTRUxFQ1QgZGVjb2RlKCcyNEgzNkgwJywgJ2Jhc2UzMmhleCcpOwor CitTRUxFQ1QgZGVjb2RlKCcyJywgJ2Jhc2UzMmhleCcpOyAtLSBceCwgNSBiaXRzIGlzbid0IGVu b3VnaCBmb3IgYSBieXRlLCBzbyBub3RoaW5nIGlzIGVtaXR0ZWQKKworU0VMRUNUIGRlY29kZSgn MTE9JywgJ2Jhc2UzMmhleCcpOyAgLS0gT0ssIG5vbi16ZXJvIHBhZGRpbmcgYml0cyBhcmUgYWNj ZXB0ZWQgKGNvbnNpc3RlbnQgd2l0aCBiYXNlNjQpCitTRUxFQ1QgZGVjb2RlKCcyNGgzNmgybGNv JywgJ2Jhc2UzMmhleCcpOyAgLS0gT0ssIHRoZSBlbmNvZGluZyBpcyBjYXNlLWluc2Vuc2l0aXZl CisKK1NFTEVDVCBkZWNvZGUoJz0nLCAnYmFzZTMyaGV4Jyk7ICAtLSBlcnJvcgorU0VMRUNUIGRl Y29kZSgnVycsICdiYXNlMzJoZXgnKTsgIC0tIGVycm9yCitTRUxFQ1QgZGVjb2RlKCcyNEgzNkgw PTI0JywgJ2Jhc2UzMmhleCcpOyAtLSBlcnJvcgorCistLSBDaGVjayByb3VuZC10cmlwIGNhcGFi aWxpdHkgb2YgYmFzZTMyaGV4IGVuY29kaW5nIGZvciBtdWx0aXBsZSByYW5kb20gVVVJRHMuCitE TyAkJAorREVDTEFSRQorICB2MSB1dWlkOworICB2MiB1dWlkOworQkVHSU4KKyAgRk9SIGkgSU4g MS4uMTAgTE9PUAorICAgIHYxIDo9IGdlbl9yYW5kb21fdXVpZCgpOworICAgIHYyIDo9IGRlY29k ZShlbmNvZGUodjE6OmJ5dGVhLCAnYmFzZTMyaGV4JyksICdiYXNlMzJoZXgnKTo6dXVpZDsKKwor ICAgIElGIHYxICE9IHYyIFRIRU4KKyAgICAgIFJBSVNFIEVYQ0VQVElPTiAnYmFzZTMyaGV4IGVu Y29kaW5nIHJvdW5kLXRyaXAgZmFpbGVkLCBleHBlY3RlZCAlIGdvdCAlJywgdjEsIHYyOworICAg IEVORCBJRjsKKyAgRU5EIExPT1A7CisgIFJBSVNFIE5PVElDRSAnT0snOworRU5EOworJCQ7CisK KworLS0KKy0tIGJhc2U2NHVybCBlbmNvZGluZy9kZWNvZGluZworLS0KKwogLS0gU2ltcGxlIGVu Y29kaW5nL2RlY29kaW5nCiBTRUxFQ1QgZW5jb2RlKCdceDY5YjczZWZmJywgJ2Jhc2U2NHVybCcp OyAgLS0gYWJjLV93CiBTRUxFQ1QgZGVjb2RlKCdhYmMtX3cnLCAnYmFzZTY0dXJsJyk7ICAgICAg LS0gXHg2OWI3M2VmZgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvdXVpZC5zcWwg Yi9zcmMvdGVzdC9yZWdyZXNzL3NxbC91dWlkLnNxbAppbmRleCBmNTEyZjRkZWExZC4uZjJmZjAw ZjVkZGQgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3V1aWQuc3FsCisrKyBiL3Ny Yy90ZXN0L3JlZ3Jlc3Mvc3FsL3V1aWQuc3FsCkBAIC0xMyw3ICsxMyw4IEBAIENSRUFURSBUQUJM RSBndWlkMgogQ1JFQVRFIFRBQkxFIGd1aWQzCiAoCiAJaWQgU0VSSUFMLAotCWd1aWRfZmllbGQg VVVJRAorCWd1aWRfZmllbGQgVVVJRCwKKwlndWlkX2VuY29kZWQgdGV4dCBHRU5FUkFURUQgQUxX QVlTIEFTIChlbmNvZGUoZ3VpZF9maWVsZDo6Ynl0ZWEsICdiYXNlMzJoZXgnKSkgU1RPUkVECiAp OwogCiAtLSBpbnNlcnRpbmcgaW52YWxpZCBkYXRhIHRlc3RzCkBAIC0xMTYsOSArMTE3LDE0IEBA IElOU0VSVCBJTlRPIGd1aWQxIChndWlkX2ZpZWxkKSBWQUxVRVMgKHV1aWR2NyhJTlRFUlZBTCAn MSBkYXknKSk7CiBTRUxFQ1QgY291bnQoRElTVElOQ1QgZ3VpZF9maWVsZCkgRlJPTSBndWlkMTsK IAogLS0gdGVzdCBzb3J0YWJpbGl0eSBvZiB2NworSU5TRVJUIElOVE8gZ3VpZDMgKGd1aWRfZmll bGQpIFZBTFVFUyAoJzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMCc6OnV1aWQp OwogSU5TRVJUIElOVE8gZ3VpZDMgKGd1aWRfZmllbGQpIFNFTEVDVCB1dWlkdjcoKSBGUk9NIGdl bmVyYXRlX3NlcmllcygxLCAxMCk7CitJTlNFUlQgSU5UTyBndWlkMyAoZ3VpZF9maWVsZCkgVkFM VUVTICgnZmZmZmZmZmYtZmZmZi1mZmZmLWZmZmYtZmZmZmZmZmZmZmZmJzo6dXVpZCk7CiBTRUxF Q1QgYXJyYXlfYWdnKGlkIE9SREVSIEJZIGd1aWRfZmllbGQpIEZST00gZ3VpZDM7CiAKKy0tIG1h a2Ugc3VyZSBiYXNlMzJoZXggZW5jb2Rpbmcgd29ya3Mgd2l0aCBVVUlEcyBhbmQgcHJlc2VydmVz IG9yZGVyaW5nCitTRUxFQ1QgYXJyYXlfYWdnKGlkIE9SREVSIEJZIGd1aWRfZW5jb2RlZCkgRlJP TSBndWlkMzsKKwogLS0gQ2hlY2sgdGhlIHRpbWVzdGFtcCBvZmZzZXRzIGZvciB2Ny4KIC0tCiAt LSBnZW5lcmF0ZSBVVUlEdjcgdmFsdWVzIHdpdGggdGltZXN0YW1wcyByYW5naW5nIGZyb20gMTk3 MCAodGhlIFVuaXggZXBvY2ggeWVhcikKLS0gCjIuNDcuMwoK --000000000000284a53064dc87659--