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 1vf4ie-003oAL-2b for pgsql-hackers@arkaria.postgresql.org; Sun, 11 Jan 2026 23:19:38 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vf4ic-00CVI0-0x for pgsql-hackers@arkaria.postgresql.org; Sun, 11 Jan 2026 23:19:35 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vf4ib-00CVHU-2c for pgsql-hackers@lists.postgresql.org; Sun, 11 Jan 2026 23:19:34 +0000 Received: from mail-qk1-x743.google.com ([2607:f8b0:4864:20::743]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vf4iZ-0064Wa-27 for pgsql-hackers@lists.postgresql.org; Sun, 11 Jan 2026 23:19:33 +0000 Received: by mail-qk1-x743.google.com with SMTP id af79cd13be357-8bb6a27d390so367693185a.3 for ; Sun, 11 Jan 2026 15:19:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768173569; x=1768778369; darn=lists.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=ROfM+7diY6YRgWLk4Wnzt9nnu0qYJzRbbTGzsC6ciGE=; b=ljt/+B6NOvUvGIl6DkhuohlMHqiLSvG6NNbvjBQdL5RV7BZ1WodaevGTzQp5RlvB3l RHLPR8oosyQwi92Y8H4u3Kq45OyEfq4NyFqeK4xoFEuFdDBj8IGJ4Fl3CTNjmGO+a9oV Ymx/mmdeddNq5bCMR03OpRfG80ybn5rSf5gUgPUeovPXKWg31CfuLQs87F1q5w/a1Lzg a+s2aC1eUDeawLpEOlW5NCjOZusqJTgOyTaKYZ9fgY7WGo39oiXJ/2KTbO5yrkKgSeHP p5lFeHuAx6jICVFFRhmD/7h55XIDzyaAUWq+wYUVCMRs4H1dowSyUjvjr8QmbPM7I7J1 SlXg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768173569; x=1768778369; 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=ROfM+7diY6YRgWLk4Wnzt9nnu0qYJzRbbTGzsC6ciGE=; b=gtZDV1X6uNibyQcrwg/vs7kbVq52xN4fXJuf2G1jryil7NePOPD3oD061If8q2RUwh b9DZb+4jQ2Wvm24mv9AFQ7DasRucFNAo1nDG+9ubFqfeUIOszj1yRVhQ3Vf2KQJPq0cV OP4UO2hyibqmY479NiSHizQwBvFRAKUBp9AouqZk1dBRbpjE2dwSm0J+fwGm9A8aoDLh D36gfiIoNnqAs2CsAJnOLZ0m+BZ4atdG+mNxm0umhpcgdccQ4BGWUH+fYrG4ZEuqqFAA R3DQwApEvv4brKEDw1KMawNufjfcli2J6V4BUCJjSZNEBF6i5aziEetKbE+LymYFY5FS wUpQ== X-Gm-Message-State: AOJu0Yx388dfvEZMBz+ZJaKj/7HQWJtOsHQlr4a/+y4LxgYqQwkYqxhz Ol7JFFiVHJjsKIqM/zlxqwtkHrZtYDxgVhUuEgN+b1IYvJGaLB5mH5ECqnPqKpArmlUSplERVlV qfXiBPu9CdTrG4sdLd+nnNR/2f4NeQ0LMLFJ3 X-Gm-Gg: AY/fxX7edna+tp38wuha0Vq40ujugLzaElck4AP9LDMu+edVhOKSgwGa+mUH276BHaX jNMoKepau/4E5Wj8dR2phV0I3frrFHtP6riwQIua1UfgdMFnnLIjI44AzgaMYmLdoYuekqsXaHJ Tqc+3HkRaWzvxAdW2w2c1siaDXfaY/cyRd1jwGxMvtjUZpd8L5yEpfyqjLWIVDX6iowoz8NKS40 fgtcfFvL498yip0GBvu6VrfKWfDRY05w+QKy9BDyNv5opemcBKJnLmTD+HeCSUe9wnX6BZkPmwF u8jC+RjqwX2h2npAsvz+nmWtLT1pbIO+h5aug8xwqBgpKjRuEAUwelfvpgHuE206a7DKDEOH13p KMVACv5lmFPcT0RQ= X-Google-Smtp-Source: AGHT+IEQIIU0QMzx68cI0/vB9In3OIiOOLXR0peUCmTfw09ZaWT8CjslOoJi6jd8PxfeIJ1XWVnGHmZrx/1Z1Q8PCkc= X-Received: by 2002:a05:622a:4249:b0:4f4:c150:7d1c with SMTP id d75a77b69052e-4ffb4a44a6bmr249699751cf.53.1768173569478; Sun, 11 Jan 2026 15:19:29 -0800 (PST) MIME-Version: 1.0 References: <20250911054220.3784-1-root@ip-172-31-36-228.ec2.internal> In-Reply-To: From: John Naylor Date: Mon, 12 Jan 2026 06:19:18 +0700 X-Gm-Features: AZwV_Qi25Q2oGll4crpFyiucNbysFLsb3pNnxOvX1pG4QyU9Jel49-uP7JhN1C4 Message-ID: Subject: Re: Proposal for enabling auto-vectorization for checksum calculations To: Andrew Kim Cc: pgsql-hackers@lists.postgresql.org, Oleg Tselebrovskiy Content-Type: multipart/mixed; boundary="0000000000008367d7064824fd6b" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000008367d7064824fd6b Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Thu, Nov 6, 2025 at 6:50=E2=80=AFAM Andrew Kim w= rote: > The v9 patch series is attached. Sorry for the delay. I found some issues last month and needed to consider the tradeoffs. First, apparently it has gone unnoticed by everyone, myself included, that no version has passed Meson CI since v6: https://cirrus-ci.com/github/postgresql-cfbot/postgresql/cf%2F5726 That's because `ninja -C build -t missingdeps` gives: Missing dep: src/port/libpgport_shlib_checksum.a.p/checksum.c.o uses src/include/utils/errcodes.h (generated by CUSTOM_COMMAND) Missing dep: src/port/libpgport_checksum.a.p/checksum.c.o uses src/include/utils/errcodes.h (generated by CUSTOM_COMMAND) Processed 2561 nodes. Error: There are 2 missing dependency paths. 2 targets had depfile dependencies on 1 distinct generated inputs (from 1 rules) without a non-depfile dep path to the generator. There might be build flakiness if any of the targets listed above are built alone, or not late enough, in a clean output directory. In the back of my mind I was worried of consequences of something in src/port depending on backend types, but hadn't seen any in my local builds. It seems the proximate cause is the removal of this stanza with no equivalent replacement: --- a/src/backend/storage/page/meson.build +++ b/src/backend/storage/page/meson.build @@ -1,14 +1,5 @@ # Copyright (c) 2022-2025, PostgreSQL Global Development Group -checksum_backend_lib =3D static_library('checksum_backend_lib', - 'checksum.c', - dependencies: backend_build_deps, - kwargs: internal_lib_args, - c_args: vectorize_cflags + unroll_loops_cflags, -) - -backend_link_with +=3D checksum_backend_lib The low-level algorithm doesn't care about database pages, only integers, so first I tried to surgically isolate the concepts, but that was too messy. In the attached v10-0003, I went back to something more similar to v6, but incorporated Andrew's idea of using PG_CHECKSUM_INTERNAL to allow for flexibility. Now pg_filedump compiles without any changes, so that's a plus. > - Provides public interfaces wrapping the basic implementation > - No code duplication (checksum.c includes checksum_impl.h) Upthread I mentioned "thin wrappers", but so far I haven't seen it in any patch versions, so I don't think this term means the same thing to you as it does to me (I saw pretty clear duplication in v9). It then occurred to me that with function attribute targets, doing the naive thing throws a compiler error IIRC -- namely just have a notional function call that then gets inlined and re-targeted. So in v10 I separated the body of checksum_block to a semi-private header to provide hardware-specific definitions for core code, while also maintaining the same one that external code expects. For this to be commitable, I think (and I think Oleg agrees) that the feature detection should go in src/port. Some of us have been thinking of refactoring and centralizing the feature detection, and now may be a good time to do it. Before going that far, I wanted to see what people think of v10. -- John Naylor Amazon Web Services --0000000000008367d7064824fd6b Content-Type: application/x-patch; name="v10-0003-Enable-autovectorizing-pg_checksum_block-with-AV.patch" Content-Disposition: attachment; filename="v10-0003-Enable-autovectorizing-pg_checksum_block-with-AV.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mk9him780 RnJvbSAxNzgzYjRlZmMyMzczNjRhNWVjZjNmYTVjYjE3ZWJiNDViNzNhOWVmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKb2huIE5heWxvciA8am9obi5uYXlsb3JAcG9zdGdyZXNxbC5v cmc+CkRhdGU6IFRodSwgOCBKYW4gMjAyNiAxODozMDoyMCArMDcwMApTdWJqZWN0OiBbUEFUQ0gg djEwIDMvM10gRW5hYmxlIGF1dG92ZWN0b3JpemluZyBwZ19jaGVja3N1bV9ibG9jayB3aXRoIEFW WDIKIHJ1bnRpbWUgZGV0ZWN0aW9uCgpbdG9kbyBtb3JlIGhlcmVdCgpDby1hdXRob3JlZC1ieTog TWF0dGhldyBTdGVycmV0dCA8bWF0dGhld3N0ZXJyZXR0MkBnbWFpbC5jb20+CkNvLWF1dGhvcmVk LWJ5OiBBbmRyZXcgS2ltIDxhbmRyZXcua2ltQGludGVsLmNvbT4KUmV2aWV3ZWQtYnk6IE9sZWcg VHNlbGVicm92c2tpeSA8by50c2VsZWJyb3Zza2l5QHBvc3RncmVzcHJvLnJ1PgpEaXNjdXNzaW9u OiBodHRwczovL3Bvc3Rnci5lcy9tL0NBJTJCdkE4NV81R1R1JTJCSEhuaVNidnZQJTJCOGszJTNE eFpPJTNEV0U4NE5Qd2lLeXh6dHF2cGZaM1ElNDBtYWlsLmdtYWlsLmNvbQpEaXNjdXNzaW9uOiBo dHRwczovL3Bvc3Rnci5lcy9tLzIwMjUwOTExMDU0MjIwLjM3ODQtMS1yb290JTQwaXAtMTcyLTMx LTM2LTIyOC5lYzIuaW50ZXJuYWwKLS0tCiBjb25maWcvYy1jb21waWxlci5tNCAgICAgICAgICAg ICAgICAgICAgICAgICAgfCAgMjYgKysrKwogY29uZmlndXJlICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHwgIDUyICsrKysrKysrCiBjb25maWd1cmUuYWMgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgfCAgIDkgKysKIG1lc29uLmJ1aWxkICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB8ICAzMCArKysrKwogc3JjL2JhY2tlbmQvc3RvcmFnZS9wYWdl L2NoZWNrc3VtLmMgICAgICAgICAgIHwgMTEyICsrKysrKysrKysrKysrKysrLQogc3JjL2luY2x1 ZGUvcGdfY29uZmlnLmguaW4gICAgICAgICAgICAgICAgICAgIHwgICAzICsKIHNyYy9pbmNsdWRl L3N0b3JhZ2UvY2hlY2tzdW1fYmxvY2tfaW50ZXJuYWwuaCB8ICA0MiArKysrKysrCiBzcmMvaW5j bHVkZS9zdG9yYWdlL2NoZWNrc3VtX2ltcGwuaCAgICAgICAgICAgfCAgNDggKysrLS0tLS0KIDgg ZmlsZXMgY2hhbmdlZCwgMjg4IGluc2VydGlvbnMoKyksIDM0IGRlbGV0aW9ucygtKQogY3JlYXRl IG1vZGUgMTAwNjQ0IHNyYy9pbmNsdWRlL3N0b3JhZ2UvY2hlY2tzdW1fYmxvY2tfaW50ZXJuYWwu aAoKZGlmZiAtLWdpdCBhL2NvbmZpZy9jLWNvbXBpbGVyLm00IGIvY29uZmlnL2MtY29tcGlsZXIu bTQKaW5kZXggMTUwOWRiZmEyYWIuLjFmM2UzMWZjMmQzIDEwMDY0NAotLS0gYS9jb25maWcvYy1j b21waWxlci5tNAorKysgYi9jb25maWcvYy1jb21waWxlci5tNApAQCAtNjEzLDYgKzYxMywzMiBA QCBmaQogdW5kZWZpbmUoW0FjX2NhY2hldmFyXSlkbmwKIF0pIyBQR0FDX1NTRTQyX0NSQzMyX0lO VFJJTlNJQ1MKIAorIyBQR0FDX0FWWDJfU1VQUE9SVAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyMgQ2hlY2sgaWYgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIEFWWDIgdGFyZ2V0IGF0dHJp YnV0ZS4KKyMgVGhpcyBpcyB1c2VkIGZvciBvcHRpbWl6ZWQgY2hlY2tzdW0gY2FsY3VsYXRpb25z IHdpdGggcnVudGltZSBkZXRlY3Rpb24uCisjCisjIElmIEFWWDIgdGFyZ2V0IGF0dHJpYnV0ZSBp cyBzdXBwb3J0ZWQsIHNldHMgcGdhY19hdngyX3N1cHBvcnQuCitBQ19ERUZVTihbUEdBQ19BVlgy X1NVUFBPUlRdLAorW2RlZmluZShbQWNfY2FjaGV2YXJdLCBbQVNfVFJfU0goW3BnYWNfY3ZfYXZ4 Ml9zdXBwb3J0XSldKWRubAorQUNfQ0FDSEVfQ0hFQ0soW2ZvciBBVlgyIHRhcmdldCBhdHRyaWJ1 dGUgc3VwcG9ydF0sIFtBY19jYWNoZXZhcl0sCitbQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdf UFJPR1JBTShbI2luY2x1ZGUgPHN0ZGludC5oPgorICAgICNpZiBkZWZpbmVkKF9faGFzX2F0dHJp YnV0ZSkgJiYgX19oYXNfYXR0cmlidXRlICh0YXJnZXQpCisgICAgX19hdHRyaWJ1dGVfXygodGFy Z2V0KCJhdngyIikpKQorICAgIHN0YXRpYyBpbnQgYXZ4Ml90ZXN0KHZvaWQpCisgICAgeworICAg ICAgcmV0dXJuIDA7CisgICAgfQorICAgICNlbmRpZl0sCisgIFtyZXR1cm4gYXZ4Ml90ZXN0KCk7 XSldLAorICBbQWNfY2FjaGV2YXI9eWVzXSwKKyAgW0FjX2NhY2hldmFyPW5vXSldKQoraWYgdGVz dCB4IiRBY19jYWNoZXZhciIgPSB4InllcyI7IHRoZW4KKyAgcGdhY19hdngyX3N1cHBvcnQ9eWVz CitmaQordW5kZWZpbmUoW0FjX2NhY2hldmFyXSlkbmwKK10pIyBQR0FDX0FWWDJfU1VQUE9SVAor CiAjIFBHQUNfQVZYNTEyX1BDTE1VTF9JTlRSSU5TSUNTCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQogIyBDaGVjayBpZiB0aGUgY29tcGlsZXIgc3VwcG9ydHMgQVZYLTUxMiBjYXJyeWxl c3MgbXVsdGlwbGljYXRpb24KZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQppbmRl eCAwNDVjOTEzODY1ZC4uYjg5YzQ0ZjgxYzAgMTAwNzU1Ci0tLSBhL2NvbmZpZ3VyZQorKysgYi9j b25maWd1cmUKQEAgLTE3NjYyLDYgKzE3NjYyLDU4IEBAICRhc19lY2hvICIjZGVmaW5lIEhBVkVf WFNBVkVfSU5UUklOU0lDUyAxIiA+PmNvbmZkZWZzLmgKIAogZmkKIAorIyBDaGVjayBmb3IgQVZY MiB0YXJnZXQgYW5kIGludHJpbnNpYyBzdXBwb3J0CisjCitpZiB0ZXN0IHgiJGhvc3RfY3B1IiA9 IHgieDg2XzY0IjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVO T306IGNoZWNraW5nIGZvciBBVlgyIHN1cHBvcnQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcg Zm9yIEFWWDIgc3VwcG9ydC4uLiAiID4mNjsgfQoraWYgJHtwZ2FjX2N2X2F2eDJfc3VwcG9ydCs6 fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNh dCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVm cy5oLiAgKi8KKyNpbmNsdWRlIDxpbW1pbnRyaW4uaD4KKyAgICAjaW5jbHVkZSA8c3RkaW50Lmg+ CisgICAgI2lmIGRlZmluZWQoX19oYXNfYXR0cmlidXRlKSAmJiBfX2hhc19hdHRyaWJ1dGUgKHRh cmdldCkKKyAgICBfX2F0dHJpYnV0ZV9fKCh0YXJnZXQoImF2eDIiKSkpCisgICAgI2VuZGlmCisg ICAgc3RhdGljIGludCBhdngyX3Rlc3Qodm9pZCkKKyAgICB7CisgICAgICBjb25zdCBjaGFyIGJ1 ZltzaXplb2YoX19tMjU2aSldOworICAgICAgX19tMjU2aSBhY2N1bSA9IF9tbTI1Nl9sb2FkdV9z aTI1NigoY29uc3QgX19tMjU2aSAqKSBidWYpOworCSAgYWNjdW0gPSBfbW0yNTZfYWRkX2VwaTMy KGFjY3VtLCBhY2N1bSk7CisgICAgICBpbnQgcmVzdWx0ID0gX21tMjU2X2V4dHJhY3RfZXBpMzIo YWNjdW0sIDApOworICAgICAgcmV0dXJuIChpbnQpIHJlc3VsdDsKKyAgICB9CitpbnQKK21haW4g KCkKK3sKK3JldHVybiBhdngyX3Rlc3QoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgor aWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBwZ2FjX2N2X2F2eDJfc3Vw cG9ydD15ZXMKK2Vsc2UKKyAgcGdhY19jdl9hdngyX3N1cHBvcnQ9bm8KK2ZpCitybSAtZiBjb3Jl IGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVl eHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0k TElORU5PfTogcmVzdWx0OiAkcGdhY19jdl9hdngyX3N1cHBvcnQiID4mNQorJGFzX2VjaG8gIiRw Z2FjX2N2X2F2eDJfc3VwcG9ydCIgPiY2OyB9CitpZiB0ZXN0IHgiJHBnYWNfY3ZfYXZ4Ml9zdXBw b3J0IiA9IHgieWVzIjsgdGhlbgorICBwZ2FjX2F2eDJfc3VwcG9ydD15ZXMKK2ZpCisKKyAgaWYg dGVzdCB4IiRwZ2FjX2F2eDJfc3VwcG9ydCIgPSB4InllcyI7IHRoZW4KKworJGFzX2VjaG8gIiNk ZWZpbmUgVVNFX0FWWDJfV0lUSF9SVU5USU1FX0NIRUNLIDEiID4+Y29uZmRlZnMuaAorCisgIGZp CitmaQorCiAjIENoZWNrIGZvciBBVlgtNTEyIHBvcGNvdW50IGludHJpbnNpY3MKICMKIGlmIHRl c3QgeCIkaG9zdF9jcHUiID0geCJ4ODZfNjQiOyB0aGVuCmRpZmYgLS1naXQgYS9jb25maWd1cmUu YWMgYi9jb25maWd1cmUuYWMKaW5kZXggMTQ1MTk3ZTZiZDYuLmJiNzQ1NmU0NDc4IDEwMDY0NAot LS0gYS9jb25maWd1cmUuYWMKKysrIGIvY29uZmlndXJlLmFjCkBAIC0yMDc0LDYgKzIwNzQsMTUg QEAgZWxzZQogICBmaQogZmkKIAorIyBDaGVjayBmb3IgQVZYMiB0YXJnZXQgYW5kIGludHJpbnNp YyBzdXBwb3J0CisjCitpZiB0ZXN0IHgiJGhvc3RfY3B1IiA9IHgieDg2XzY0IjsgdGhlbgorICBQ R0FDX0FWWDJfU1VQUE9SVCgpCisgIGlmIHRlc3QgeCIkcGdhY19hdngyX3N1cHBvcnQiID0geCJ5 ZXMiOyB0aGVuCisgICAgQUNfREVGSU5FKFVTRV9BVlgyX1dJVEhfUlVOVElNRV9DSEVDSywgMSwg W0RlZmluZSB0byAxIHRvIHVzZSBBVlgyIGluc3RydWN0aW9ucyB3aXRoIGEgcnVudGltZSBjaGVj ay5dKQorICBmaQorZmkKKwogIyBDaGVjayBmb3IgWFNBVkUgaW50cmluc2ljcwogIwogUEdBQ19Y U0FWRV9JTlRSSU5TSUNTKCkKZGlmZiAtLWdpdCBhL21lc29uLmJ1aWxkIGIvbWVzb24uYnVpbGQK aW5kZXggMjA2NGQxYjBhOGQuLjc3NmFiZjEyNDlkIDEwMDY0NAotLS0gYS9tZXNvbi5idWlsZAor KysgYi9tZXNvbi5idWlsZApAQCAtMjMyMiw2ICsyMzIyLDM2IEBAIGludCBtYWluKHZvaWQpCiBl bmRpZgogCiAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIworIyBDaGVjayBmb3IgdGhlIGF2YWlsYWJpbGl0eSBvZiBBVlgyIHN1 cHBvcnQKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIworCitpZiBob3N0X2NwdSA9PSAneDg2XzY0JworCisgIHByb2cgPSAnJycK KyNpbmNsdWRlIDxpbW1pbnRyaW4uaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpZiBkZWZpbmVk KF9faGFzX2F0dHJpYnV0ZSkgJiYgX19oYXNfYXR0cmlidXRlICh0YXJnZXQpCitfX2F0dHJpYnV0 ZV9fKCh0YXJnZXQoImF2eDIiKSkpCisjZW5kaWYKK3N0YXRpYyBpbnQgYXZ4Ml90ZXN0KHZvaWQp Cit7CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBtYWluKHZvaWQpCit7CisgICAgcmV0dXJuIGF2 eDJfdGVzdCgpOworfQorJycnCisKKyAgaWYgY2MubGlua3MocHJvZywgbmFtZTogJ0FWWDIgc3Vw cG9ydCcsIGFyZ3M6IHRlc3RfY19hcmdzKQorICAgIGNkYXRhLnNldCgnVVNFX0FWWDJfV0lUSF9S VU5USU1FX0NIRUNLJywgMSkKKyAgZW5kaWYKKworZW5kaWYKKworCiAjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMgQ2hlY2sg Zm9yIHRoZSBhdmFpbGFiaWxpdHkgb2YgQVZYLTUxMiBwb3Bjb3VudCBpbnRyaW5zaWNzLgogIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL3BhZ2UvY2hlY2tzdW0uYyBiL3Ny Yy9iYWNrZW5kL3N0b3JhZ2UvcGFnZS9jaGVja3N1bS5jCmluZGV4IDg3MTY2NTFjOGI1Li41NWVi ZTk4ODQxMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9wYWdlL2NoZWNrc3VtLmMK KysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9wYWdlL2NoZWNrc3VtLmMKQEAgLTEzLDEwICsxMywx MjAgQEAKICAqLwogI2luY2x1ZGUgInBvc3RncmVzLmgiCiAKKyNpZiBkZWZpbmVkKEhBVkVfX0dF VF9DUFVJRCkgfHwgZGVmaW5lZChIQVZFX19HRVRfQ1BVSURfQ09VTlQpCisjaW5jbHVkZSA8Y3B1 aWQuaD4KKyNlbmRpZgorCisjaWYgZGVmaW5lZChIQVZFX19DUFVJRCkgfHwgZGVmaW5lZChIQVZF X19DUFVJREVYKQorI2luY2x1ZGUgPGludHJpbi5oPgorI2VuZGlmCisKKyNpZmRlZiBIQVZFX1hT QVZFX0lOVFJJTlNJQ1MKKyNpbmNsdWRlIDxpbW1pbnRyaW4uaD4KKyNlbmRpZgorCiAjaW5jbHVk ZSAic3RvcmFnZS9jaGVja3N1bS5oIgorCiAvKgogICogVGhlIGFjdHVhbCBjb2RlIGlzIGluIHN0 b3JhZ2UvY2hlY2tzdW1faW1wbC5oLiAgVGhpcyBpcyBkb25lIHNvIHRoYXQKICAqIGV4dGVybmFs IHByb2dyYW1zIGNhbiBpbmNvcnBvcmF0ZSB0aGUgY2hlY2tzdW0gY29kZSBieSAjaW5jbHVkZSdp bmcKLSAqIHRoYXQgZmlsZSBmcm9tIHRoZSBleHBvcnRlZCBQb3N0Z3JlcyBoZWFkZXJzLiAgKENv bXBhcmUgb3VyIENSQyBjb2RlLikKKyAqIHRoYXQgZmlsZSBmcm9tIHRoZSBleHBvcnRlZCBQb3N0 Z3JlcyBoZWFkZXJzLiAgKENvbXBhcmUgb3VyIGxlZ2FjeQorICogQ1JDIGNvZGUgaW4gcGdfY3Jj LmguKQorICogVGhlIFBHX0NIRUNLU1VNX0lOVEVSTkFMIHN5bWJvbCBhbGxvd3MgY29yZSB0byB1 c2UgaGFyZHdhcmUtc3BlY2lmaWMKKyAqIGNvZGluZyB3aXRob3V0IGFmZmVjdGluZyBleHRlcm5h bCBwcm9ncmFtcy4KICAqLworI2RlZmluZSBQR19DSEVDS1NVTV9JTlRFUk5BTAogI2luY2x1ZGUg InN0b3JhZ2UvY2hlY2tzdW1faW1wbC5oIgkvKiBJV1lVIHByYWdtYToga2VlcCAqLworCisKKy8q IFdJUDogdGhlIGZlYXR1cmUgZGV0ZWN0aW9uIHNob3VsZCBnbyBpbiBzcmMvcG9ydCAqLworCisv KgorICogRG9lcyBDUFVJRCBzYXkgdGhlcmUncyBzdXBwb3J0IGZvciBYU0FWRSBpbnN0cnVjdGlv bnM/CisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbAoreHNhdmVfYXZhaWxhYmxlKHZvaWQpCit7CisJ dW5zaWduZWQgaW50IGV4eFs0XSA9IHswLCAwLCAwLCAwfTsKKworI2lmIGRlZmluZWQoSEFWRV9f R0VUX0NQVUlEKQorCV9fZ2V0X2NwdWlkKDEsICZleHhbMF0sICZleHhbMV0sICZleHhbMl0sICZl eHhbM10pOworI2VsaWYgZGVmaW5lZChIQVZFX19DUFVJRCkKKwlfX2NwdWlkKGV4eCwgMSk7Cisj ZW5kaWYKKwlyZXR1cm4gKGV4eFsyXSAmICgxIDw8IDI3KSkgIT0gMDsJLyogb3N4c2F2ZSAqLwor fQorCisvKgorICogRG9lcyBYR0VUQlYgc2F5IHRoZSBZTU0gcmVnaXN0ZXJzIGFyZSBlbmFibGVk PworICoKKyAqIE5COiBDYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIHZlcmlmeWluZyB0aGF0IHhz YXZlX2F2YWlsYWJsZSgpIHJldHVybnMgdHJ1ZQorICogYmVmb3JlIGNhbGxpbmcgdGhpcy4KKyAq LworI2lmZGVmIEhBVkVfWFNBVkVfSU5UUklOU0lDUworcGdfYXR0cmlidXRlX3RhcmdldCgieHNh dmUiKQorI2VuZGlmCitzdGF0aWMgaW5saW5lIGJvb2wKK3ltbV9yZWdzX2F2YWlsYWJsZSh2b2lk KQoreworI2lmZGVmIEhBVkVfWFNBVkVfSU5UUklOU0lDUworCXJldHVybiAoX3hnZXRidigwKSAm IDB4MDYpID09IDB4MDY7CisjZWxzZQorCXJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCisvKgor ICogQ2hlY2sgZm9yIEFWWDIgc3VwcG9ydCB1c2luZyBDUFVJRCBkZXRlY3Rpb24KKyAqLworc3Rh dGljIGlubGluZSBib29sCithdngyX2F2YWlsYWJsZSh2b2lkKQoreworCXVuc2lnbmVkIGludCBl eHhbNF0gPSB7MCwgMCwgMCwgMH07CisKKyNpZiBkZWZpbmVkKEhBVkVfX0dFVF9DUFVJRF9DT1VO VCkKKwlfX2dldF9jcHVpZF9jb3VudCg3LCAwLCAmZXh4WzBdLCAmZXh4WzFdLCAmZXh4WzJdLCAm ZXh4WzNdKTsKKyNlbGlmIGRlZmluZWQoSEFWRV9fQ1BVSURFWCkKKwlfX2NwdWlkZXgoZXh4LCA3 LCAwKTsKKyNlbmRpZgorCisJcmV0dXJuIChleHhbMV0gJiAoMSA8PCA1KSkgIT0gMDsJLyogYXZ4 MiAqLworfQorCitzdGF0aWMgdWludDMyCitwZ19jaGVja3N1bV9ibG9ja19mYWxsYmFjayhjb25z dCBQR0NoZWNrc3VtbWFibGVQYWdlICpwYWdlKQoreworI2luY2x1ZGUgInN0b3JhZ2UvY2hlY2tz dW1fYmxvY2tfaW50ZXJuYWwuaCIKK30KKworLyoKKyAqIEFWWDItb3B0aW1pemVkIGJsb2NrIGNo ZWNrc3VtIGFsZ29yaXRobS4KKyAqLworI2lmZGVmIFVTRV9BVlgyX1dJVEhfUlVOVElNRV9DSEVD SworcGdfYXR0cmlidXRlX3RhcmdldCgiYXZ4MiIpCitzdGF0aWMgdWludDMyCitwZ19jaGVja3N1 bV9ibG9ja19hdngyKGNvbnN0IFBHQ2hlY2tzdW1tYWJsZVBhZ2UgKnBhZ2UpCit7CisjaW5jbHVk ZSAic3RvcmFnZS9jaGVja3N1bV9ibG9ja19pbnRlcm5hbC5oIgorfQorI2VuZGlmCQkJCQkJCS8q IFVTRV9BVlgyX1dJVEhfUlVOVElNRV9DSEVDSyAqLworCisvKgorICogQ2hvb3NlIHRoZSBiZXN0 IGF2YWlsYWJsZSBjaGVja3N1bSBpbXBsZW1lbnRhdGlvbi4KKyAqLworc3RhdGljIHVpbnQzMgor cGdfY2hlY2tzdW1fY2hvb3NlKGNvbnN0IFBHQ2hlY2tzdW1tYWJsZVBhZ2UgKnBhZ2UpCit7Cisj aWZkZWYgVVNFX0FWWDJfV0lUSF9SVU5USU1FX0NIRUNLCisJaWYgKHhzYXZlX2F2YWlsYWJsZSgp ICYmCisJCXltbV9yZWdzX2F2YWlsYWJsZSgpICYmCisJCWF2eDJfYXZhaWxhYmxlKCkpCisJCXBn X2NoZWNrc3VtX2Jsb2NrID0gcGdfY2hlY2tzdW1fYmxvY2tfYXZ4MjsKKwllbHNlCisjZW5kaWYK KwkJcGdfY2hlY2tzdW1fYmxvY2sgPSBwZ19jaGVja3N1bV9ibG9ja19mYWxsYmFjazsKKworCXJl dHVybiBwZ19jaGVja3N1bV9ibG9jayhwYWdlKTsKK30KKworc3RhdGljIHVpbnQzMiAoKnBnX2No ZWNrc3VtX2Jsb2NrKSAoY29uc3QgUEdDaGVja3N1bW1hYmxlUGFnZSAqcGFnZSkgPSBwZ19jaGVj a3N1bV9jaG9vc2U7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9wZ19jb25maWcuaC5pbiBiL3Ny Yy9pbmNsdWRlL3BnX2NvbmZpZy5oLmluCmluZGV4IDEwZmE4NWU3OGMyLi40NDRkMmZjMWFmZSAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcGdfY29uZmlnLmguaW4KKysrIGIvc3JjL2luY2x1ZGUv cGdfY29uZmlnLmguaW4KQEAgLTY2NSw2ICs2NjUsOSBAQAogLyogRGVmaW5lIHRvIDEgdG8gdXNl IEFWWC01MTIgQ1JDIGFsZ29yaXRobXMgd2l0aCBhIHJ1bnRpbWUgY2hlY2suICovCiAjdW5kZWYg VVNFX0FWWDUxMl9DUkMzMkNfV0lUSF9SVU5USU1FX0NIRUNLCiAKKy8qIERlZmluZSB0byAxIHRv IHVzZSBBVlgyIGluc3RydWN0aW9ucyB3aXRoIGEgcnVudGltZSBjaGVjay4gKi8KKyN1bmRlZiBV U0VfQVZYMl9XSVRIX1JVTlRJTUVfQ0hFQ0sKKwogLyogRGVmaW5lIHRvIDEgdG8gdXNlIEFWWC01 MTIgcG9wY291bnQgaW5zdHJ1Y3Rpb25zIHdpdGggYSBydW50aW1lIGNoZWNrLiAqLwogI3VuZGVm IFVTRV9BVlg1MTJfUE9QQ05UX1dJVEhfUlVOVElNRV9DSEVDSwogCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9zdG9yYWdlL2NoZWNrc3VtX2Jsb2NrX2ludGVybmFsLmggYi9zcmMvaW5jbHVkZS9z dG9yYWdlL2NoZWNrc3VtX2Jsb2NrX2ludGVybmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAuLmI0ZTY5ODdkNmI1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2luY2x1 ZGUvc3RvcmFnZS9jaGVja3N1bV9ibG9ja19pbnRlcm5hbC5oCkBAIC0wLDAgKzEsNDIgQEAKKy8q LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGNoZWNrc3VtX2Jsb2NrX2ludGVybmFsLmgKKyAqCSAg Q29yZSBhbGdvcml0aG0gZm9yIHBhZ2UgY2hlY2tzdW1zICwgc2VtaSBwcml2YXRlIHRvIGNoZWNr c3VtX2ltcGwuaAorICoJICBhbmQgY2hlY2tzdW0uYy4KKyAqCisgKiBQb3J0aW9ucyBDb3B5cmln aHQgKGMpIDE5OTYtMjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAq IFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBv ZiBDYWxpZm9ybmlhCisgKgorICogc3JjL2luY2x1ZGUvc3RvcmFnZS9jaGVja3N1bV9ibG9ja19p bnRlcm5hbC5oCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworLyogdGhlcmUgaXMgZGVs aWJlcmF0ZWx5IG5vdCBhbiAjaWZuZGVmIENIRUNLU1VNX0JMT0NLX0lOVEVSTkFMX0ggaGVyZSAq LworCit1aW50MzIJCXN1bXNbTl9TVU1TXTsKK3VpbnQzMgkJcmVzdWx0ID0gMDsKK3VpbnQzMgkJ aSwKKwkJCWo7CisKKy8qIGVuc3VyZSB0aGF0IHRoZSBzaXplIGlzIGNvbXBhdGlibGUgd2l0aCB0 aGUgYWxnb3JpdGhtICovCitBc3NlcnQoc2l6ZW9mKFBHQ2hlY2tzdW1tYWJsZVBhZ2UpID09IEJM Q0tTWik7CisKKy8qIGluaXRpYWxpemUgcGFydGlhbCBjaGVja3N1bXMgdG8gdGhlaXIgY29ycmVz cG9uZGluZyBvZmZzZXRzICovCittZW1jcHkoc3VtcywgY2hlY2tzdW1CYXNlT2Zmc2V0cywgc2l6 ZW9mKGNoZWNrc3VtQmFzZU9mZnNldHMpKTsKKworLyogbWFpbiBjaGVja3N1bSBjYWxjdWxhdGlv biAqLworZm9yIChpID0gMDsgaSA8ICh1aW50MzIpIChCTENLU1ogLyAoc2l6ZW9mKHVpbnQzMikg KiBOX1NVTVMpKTsgaSsrKQorCWZvciAoaiA9IDA7IGogPCBOX1NVTVM7IGorKykKKwkJQ0hFQ0tT VU1fQ09NUChzdW1zW2pdLCBwYWdlLT5kYXRhW2ldW2pdKTsKKworLyogZmluYWxseSBhZGQgaW4g dHdvIHJvdW5kcyBvZiB6ZXJvZXMgZm9yIGFkZGl0aW9uYWwgbWl4aW5nICovCitmb3IgKGkgPSAw OyBpIDwgMjsgaSsrKQorCWZvciAoaiA9IDA7IGogPCBOX1NVTVM7IGorKykKKwkJQ0hFQ0tTVU1f Q09NUChzdW1zW2pdLCAwKTsKKworLyogeG9yIGZvbGQgcGFydGlhbCBjaGVja3N1bXMgdG9nZXRo ZXIgKi8KK2ZvciAoaSA9IDA7IGkgPCBOX1NVTVM7IGkrKykKKwlyZXN1bHQgXj0gc3Vtc1tpXTsK KworcmV0dXJuIHJlc3VsdDsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvY2hlY2tz dW1faW1wbC5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9jaGVja3N1bV9pbXBsLmgKaW5kZXggNWMy ZGNiYzYzZTcuLjhhMzA4ZTQyM2MzIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2No ZWNrc3VtX2ltcGwuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2NoZWNrc3VtX2ltcGwuaApA QCAtNzMsMTEgKzczLDEwIEBACiAgKiAyZS0xNiBmYWxzZSBwb3NpdGl2ZSByYXRlIHdpdGhpbiBt YXJnaW4gb2YgZXJyb3IuCiAgKgogICogVmVjdG9yaXphdGlvbiBvZiB0aGUgYWxnb3JpdGhtIHJl cXVpcmVzIDMyYml0IHggMzJiaXQgLT4gMzJiaXQgaW50ZWdlcgotICogbXVsdGlwbGljYXRpb24g aW5zdHJ1Y3Rpb24uIEFzIG9mIDIwMTMgdGhlIGNvcnJlc3BvbmRpbmcgaW5zdHJ1Y3Rpb24gaXMK LSAqIGF2YWlsYWJsZSBvbiB4ODYgU1NFNC4xIGV4dGVuc2lvbnMgKHBtdWxsZCkgYW5kIEFSTSBO RU9OICh2bXVsLmkzMikuCi0gKiBWZWN0b3JpemF0aW9uIHJlcXVpcmVzIGEgY29tcGlsZXIgdG8g ZG8gdGhlIHZlY3Rvcml6YXRpb24gZm9yIHVzLiBGb3IgcmVjZW50Ci0gKiBHQ0MgdmVyc2lvbnMg dGhlIGZsYWdzIC1tc3NlNC4xIC1mdW5yb2xsLWxvb3BzIC1mdHJlZS12ZWN0b3JpemUgYXJlIGVu b3VnaAotICogdG8gYWNoaWV2ZSB2ZWN0b3JpemF0aW9uLgorICogbXVsdGlwbGljYXRpb24gaW5z dHJ1Y3Rpb24uIEV4YW1wbGVzIGluY2x1ZGUgeDg2IEFWWDIgZXh0ZW5zaW9ucyAodnBtdWxsZCkK KyAqIGFuZCBBUk0gTkVPTiAodm11bC5pMzIpLiBGb3Igc2ltcGxpY2l0eSB3ZSByZWx5IG9uIHRo ZSBjb21waWxlciB0byBkbyB0aGUKKyAqIHZlY3Rvcml6YXRpb24gZm9yIHVzLiBGb3IgR0NDIGFu ZCBjbGFuZyB0aGUgZmxhZ3MgLWZ1bnJvbGwtbG9vcHMKKyAqIC1mdHJlZS12ZWN0b3JpemUgYXJl IGVub3VnaCB0byBhY2hpZXZlIHZlY3Rvcml6YXRpb24uCiAgKgogICogVGhlIG9wdGltYWwgYW1v dW50IG9mIHBhcmFsbGVsaXNtIHRvIHVzZSBkZXBlbmRzIG9uIENQVSBzcGVjaWZpYyBpbnN0cnVj dGlvbgogICogbGF0ZW5jeSwgU0lNRCBpbnN0cnVjdGlvbiB3aWR0aCwgdGhyb3VnaHB1dCBhbmQg dGhlIGFtb3VudCBvZiByZWdpc3RlcnMKQEAgLTg5LDggKzg4LDkgQEAKICAqCiAgKiBUaGUgcGFy YWxsZWxpc20gbnVtYmVyIDMyIHdhcyBjaG9zZW4gYmFzZWQgb24gdGhlIGZhY3QgdGhhdCBpdCBp cyB0aGUKICAqIGxhcmdlc3Qgc3RhdGUgdGhhdCBmaXRzIGludG8gYXJjaGl0ZWN0dXJhbGx5IHZp c2libGUgeDg2IFNTRSByZWdpc3RlcnMgd2hpbGUKLSAqIGxlYXZpbmcgc29tZSBmcmVlIHJlZ2lz dGVycyBmb3IgaW50ZXJtZWRpYXRlIHZhbHVlcy4gRm9yIGZ1dHVyZSBwcm9jZXNzb3JzCi0gKiB3 aXRoIDI1NmJpdCB2ZWN0b3IgcmVnaXN0ZXJzIHRoaXMgd2lsbCBsZWF2ZSBzb21lIHBlcmZvcm1h bmNlIG9uIHRoZSB0YWJsZS4KKyAqIGxlYXZpbmcgc29tZSBmcmVlIHJlZ2lzdGVycyBmb3IgaW50 ZXJtZWRpYXRlIHZhbHVlcy4gRm9yIHByb2Nlc3NvcnMKKyAqIHdpdGggMjU2Yml0IHZlY3RvciBy ZWdpc3RlcnMgdGhpcyBsZWF2ZXMgc29tZSBwZXJmb3JtYW5jZSBvbiB0aGUgdGFibGUuCisgKgog ICogV2hlbiB2ZWN0b3JpemF0aW9uIGlzIG5vdCBhdmFpbGFibGUgaXQgbWlnaHQgYmUgYmVuZWZp Y2lhbCB0byByZXN0cnVjdHVyZQogICogdGhlIGNvbXB1dGF0aW9uIHRvIGNhbGN1bGF0ZSBhIHN1 YnNldCBvZiB0aGUgY29sdW1ucyBhdCBhIHRpbWUgYW5kIHBlcmZvcm0KICAqIG11bHRpcGxlIHBh c3NlcyB0byBhdm9pZCByZWdpc3RlciBzcGlsbGluZy4gVGhpcyBvcHRpbWl6YXRpb24gb3Bwb3J0 dW5pdHkKQEAgLTEzOCw2ICsxMzgsOSBAQCBkbyB7IFwKIAkoY2hlY2tzdW0pID0gX190bXAgKiBG TlZfUFJJTUUgXiAoX190bXAgPj4gMTcpOyBcCiB9IHdoaWxlICgwKQogCisvKiBQcm92aWRlIGEg c3RhdGljIGRlZmluaXRpb24gZm9yIGV4dGVybmFsIHByb2dyYW1zICovCisjaWZuZGVmIFBHX0NI RUNLU1VNX0lOVEVSTkFMCisKIC8qCiAgKiBCbG9jayBjaGVja3N1bSBhbGdvcml0aG0uICBUaGUg cGFnZSBtdXN0IGJlIGFkZXF1YXRlbHkgYWxpZ25lZAogICogKGF0IGxlYXN0IG9uIDQtYnl0ZSBi b3VuZGFyeSkuCkBAIC0xNDUsMzQgKzE0OCwxMyBAQCBkbyB7IFwKIHN0YXRpYyB1aW50MzIKIHBn X2NoZWNrc3VtX2Jsb2NrKGNvbnN0IFBHQ2hlY2tzdW1tYWJsZVBhZ2UgKnBhZ2UpCiB7Ci0JdWlu dDMyCQlzdW1zW05fU1VNU107Ci0JdWludDMyCQlyZXN1bHQgPSAwOwotCXVpbnQzMgkJaSwKLQkJ CQlqOwotCi0JLyogZW5zdXJlIHRoYXQgdGhlIHNpemUgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBh bGdvcml0aG0gKi8KLQlBc3NlcnQoc2l6ZW9mKFBHQ2hlY2tzdW1tYWJsZVBhZ2UpID09IEJMQ0tT Wik7Ci0KLQkvKiBpbml0aWFsaXplIHBhcnRpYWwgY2hlY2tzdW1zIHRvIHRoZWlyIGNvcnJlc3Bv bmRpbmcgb2Zmc2V0cyAqLwotCW1lbWNweShzdW1zLCBjaGVja3N1bUJhc2VPZmZzZXRzLCBzaXpl b2YoY2hlY2tzdW1CYXNlT2Zmc2V0cykpOwotCi0JLyogbWFpbiBjaGVja3N1bSBjYWxjdWxhdGlv biAqLwotCWZvciAoaSA9IDA7IGkgPCAodWludDMyKSAoQkxDS1NaIC8gKHNpemVvZih1aW50MzIp ICogTl9TVU1TKSk7IGkrKykKLQkJZm9yIChqID0gMDsgaiA8IE5fU1VNUzsgaisrKQotCQkJQ0hF Q0tTVU1fQ09NUChzdW1zW2pdLCBwYWdlLT5kYXRhW2ldW2pdKTsKLQotCS8qIGZpbmFsbHkgYWRk IGluIHR3byByb3VuZHMgb2YgemVyb2VzIGZvciBhZGRpdGlvbmFsIG1peGluZyAqLwotCWZvciAo aSA9IDA7IGkgPCAyOyBpKyspCi0JCWZvciAoaiA9IDA7IGogPCBOX1NVTVM7IGorKykKLQkJCUNI RUNLU1VNX0NPTVAoc3Vtc1tqXSwgMCk7Ci0KLQkvKiB4b3IgZm9sZCBwYXJ0aWFsIGNoZWNrc3Vt cyB0b2dldGhlciAqLwotCWZvciAoaSA9IDA7IGkgPCBOX1NVTVM7IGkrKykKLQkJcmVzdWx0IF49 IHN1bXNbaV07Ci0KLQlyZXR1cm4gcmVzdWx0OworI2luY2x1ZGUgInN0b3JhZ2UvY2hlY2tzdW1f YmxvY2tfaW50ZXJuYWwuaCIKIH0KIAorI2Vsc2UKK3N0YXRpYyB1aW50MzIgKCpwZ19jaGVja3N1 bV9ibG9jaykgKGNvbnN0IFBHQ2hlY2tzdW1tYWJsZVBhZ2UgKnBhZ2UpOworI2VuZGlmCisKIC8q CiAgKiBDb21wdXRlIHRoZSBjaGVja3N1bSBmb3IgYSBQb3N0Z3JlcyBwYWdlLgogICoKLS0gCjIu NTIuMAoK --0000000000008367d7064824fd6b Content-Type: application/x-patch; name="v10-0002-Adjust-benchmark-to-use-core-checksum.patch" Content-Disposition: attachment; filename="v10-0002-Adjust-benchmark-to-use-core-checksum.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mk9him7n1 RnJvbSAxZTExNjg3ZGQ5Nzc4Y2FhZWViM2M3M2UzYWI3YjUyNmM5ZThlNzdhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKb2huIE5heWxvciA8am9obi5uYXlsb3JAcG9zdGdyZXNxbC5v cmc+CkRhdGU6IEZyaSwgOSBKYW4gMjAyNiAxNzowNzozNyArMDcwMApTdWJqZWN0OiBbUEFUQ0gg djEwIDIvM10gQWRqdXN0IGJlbmNobWFyayB0byB1c2UgY29yZSBjaGVja3N1bQoKLS0tCiBjb250 cmliL3BnX2NoZWNrc3VtX2JlbmNoL3BnX2NoZWNrc3VtX2JlbmNoLmMgfCAxNSArKysrKysrLS0t LS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCA3IGluc2VydGlvbnMoKyksIDggZGVsZXRpb25zKC0pCgpk aWZmIC0tZ2l0IGEvY29udHJpYi9wZ19jaGVja3N1bV9iZW5jaC9wZ19jaGVja3N1bV9iZW5jaC5j IGIvY29udHJpYi9wZ19jaGVja3N1bV9iZW5jaC9wZ19jaGVja3N1bV9iZW5jaC5jCmluZGV4IGRj MjAzOTVhNTkwLi42MWRhNjY0ZTcyMyAxMDA2NDQKLS0tIGEvY29udHJpYi9wZ19jaGVja3N1bV9i ZW5jaC9wZ19jaGVja3N1bV9iZW5jaC5jCisrKyBiL2NvbnRyaWIvcGdfY2hlY2tzdW1fYmVuY2gv cGdfY2hlY2tzdW1fYmVuY2guYwpAQCAtMSw3ICsxLDYgQEAKICNpbmNsdWRlICJwb3N0Z3Jlcy5o IgogI2luY2x1ZGUgImZtZ3IuaCIKLSNpbmNsdWRlICJwb3J0L2NoZWNrc3VtLmgiCi0jaW5jbHVk ZSAicG9ydC9jaGVja3N1bV9pbXBsLmgiCisjaW5jbHVkZSAic3RvcmFnZS9jaGVja3N1bS5oIgog CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxhc3NlcnQuaD4KQEAgLTE1LDIzICsxNCwy MyBAQCBEYXR1bQogZHJpdmVfcGdfY2hlY2tzdW0oUEdfRlVOQ1RJT05fQVJHUykKIHsKIAlpbnQJ CQlwYWdlX2NvdW50ID0gUEdfR0VUQVJHX0lOVDMyKDApOwotCVBHQ2hlY2tzdW1tYWJsZVBhZ2Ug KnBhZ2VzOworCWNoYXIgKnBhZ2VzOwogCWludAkJCWk7CiAJc2l6ZV90CQlqOwogCi0JcGFnZXMg PSBwYWxsb2MocGFnZV9jb3VudCAqIHNpemVvZihQR0NoZWNrc3VtbWFibGVQYWdlKSk7CisJcGFn ZXMgPSBwYWxsb2MocGFnZV9jb3VudCAqIEJMQ0tTWik7CiAJc3JhbmQoMCk7Ci0JZm9yIChqID0g MDsgaiA8IHBhZ2VfY291bnQgKiBzaXplb2YoUEdDaGVja3N1bW1hYmxlUGFnZSk7IGorKykKKwlm b3IgKGogPSAwOyBqIDwgcGFnZV9jb3VudCAqIEJMQ0tTWjsgaisrKQogCXsKLQkJY2hhcgkgICAq Ynl0ZV9wdHIgPSAoY2hhciAqKSBwYWdlczsKKwkJY2hhcgkgICAqYnl0ZV9wdHIgPSAgcGFnZXM7 CiAKIAkJYnl0ZV9wdHJbal0gPSByYW5kKCkgJSAyNTY7CiAJfQogCiAJZm9yIChpID0gMDsgaSA8 IFJFUEVBVFM7IGkrKykKIAl7Ci0JCWNvbnN0IFBHQ2hlY2tzdW1tYWJsZVBhZ2UgKnRlc3RfcGFn ZSA9IHBhZ2VzICsgKGkgJSBwYWdlX2NvdW50KTsKLQkJdm9sYXRpbGUgdWludDMyIHJlc3VsdCA9 IHBnX2NoZWNrc3VtX2Jsb2NrX2Nob29zZSgoY29uc3QgY2hhciAqKSB0ZXN0X3BhZ2UpOworCQlj aGFyICp0ZXN0X3BhZ2UgPSBwYWdlcyArIChpICUgcGFnZV9jb3VudCk7CisJCXZvbGF0aWxlIHVp bnQzMiByZXN1bHQgPSBwZ19jaGVja3N1bV9wYWdlKChjaGFyICopIHRlc3RfcGFnZSwgMCk7CiAK IAkJKHZvaWQpIHJlc3VsdDsKIAl9Ci0tIAoyLjUyLjAKCg== --0000000000008367d7064824fd6b Content-Type: application/x-patch; name="v10-0001-Benchmark-code-for-postgres-checksums.patch" Content-Disposition: attachment; filename="v10-0001-Benchmark-code-for-postgres-checksums.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mk9him7q2 RnJvbSA3YTNhZmVhNTZiMjUzOTgyZDI4YjgxMjNhMzU0NjZmYzkzZWU1MWQyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXcgS2ltIDxhbmRyZXcua2ltQGludGVsLmNvbT4KRGF0 ZTogV2VkLCA1IE5vdiAyMDI1IDE0OjM3OjI5IC0wODAwClN1YmplY3Q6IFtQQVRDSCB2MTAgMS8z XSBCZW5jaG1hcmsgY29kZSBmb3IgcG9zdGdyZXMgY2hlY2tzdW1zCgpBZGQgcGdfY2hlY2tzdW1f YmVuY2ggZXh0ZW5zaW9uIGZvciBwZXJmb3JtYW5jZSB0ZXN0aW5nIG9mIGNoZWNrc3VtCmltcGxl bWVudGF0aW9ucyB3aXRoIEFWWDIgb3B0aW1pemF0aW9uLgoKS2V5IGZlYXR1cmVzOgotIFBvc3Rn cmVTUUwgZXh0ZW5zaW9uIGZvciBiZW5jaG1hcmtpbmcgY2hlY2tzdW0gcGVyZm9ybWFuY2UKLSBU ZXN0cyBwZ19jaGVja3N1bV9ibG9ja19jaG9vc2UoKSB3aXRoIHJ1bnRpbWUgQVZYMiBkaXNwYXRj aAotLS0KIGNvbnRyaWIvbWVzb24uYnVpbGQgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAx ICsKIGNvbnRyaWIvcGdfY2hlY2tzdW1fYmVuY2gvbWVzb24uYnVpbGQgICAgICAgICB8IDIzICsr KysrKysrKysKIC4uLi9wZ19jaGVja3N1bV9iZW5jaC0tMS4wLnNxbCAgICAgICAgICAgICAgICB8 ICA4ICsrKysKIGNvbnRyaWIvcGdfY2hlY2tzdW1fYmVuY2gvcGdfY2hlY2tzdW1fYmVuY2guYyB8 IDQyICsrKysrKysrKysrKysrKysrKysKIC4uLi9wZ19jaGVja3N1bV9iZW5jaC5jb250cm9sICAg ICAgICAgICAgICAgICB8ICA0ICsrCiAuLi4vc3FsL3BnX2NoZWNrc3VtX2JlbmNoLnNxbCAgICAg ICAgICAgICAgICAgfCAxNyArKysrKysrKwogNiBmaWxlcyBjaGFuZ2VkLCA5NSBpbnNlcnRpb25z KCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19jaGVja3N1bV9iZW5jaC9tZXNvbi5i dWlsZAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfY2hlY2tzdW1fYmVuY2gvcGdfY2hl Y2tzdW1fYmVuY2gtLTEuMC5zcWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX2NoZWNr c3VtX2JlbmNoL3BnX2NoZWNrc3VtX2JlbmNoLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmli L3BnX2NoZWNrc3VtX2JlbmNoL3BnX2NoZWNrc3VtX2JlbmNoLmNvbnRyb2wKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBjb250cmliL3BnX2NoZWNrc3VtX2JlbmNoL3NxbC9wZ19jaGVja3N1bV9iZW5jaC5z cWwKCmRpZmYgLS1naXQgYS9jb250cmliL21lc29uLmJ1aWxkIGIvY29udHJpYi9tZXNvbi5idWls ZAppbmRleCBkZWYxMzI1N2NiZS4uOThmZTQ3YjViOWIgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvbWVz b24uYnVpbGQKKysrIGIvY29udHJpYi9tZXNvbi5idWlsZApAQCAtMTIsNiArMTIsNyBAQCBjb250 cmliX2RvY19hcmdzID0gewogICAnaW5zdGFsbF9kaXInOiBjb250cmliX2RvY19kaXIsCiB9CiAK K3N1YmRpcigncGdfY2hlY2tzdW1fYmVuY2gnKQogc3ViZGlyKCdhbWNoZWNrJykKIHN1YmRpcign YXV0aF9kZWxheScpCiBzdWJkaXIoJ2F1dG9fZXhwbGFpbicpCmRpZmYgLS1naXQgYS9jb250cmli L3BnX2NoZWNrc3VtX2JlbmNoL21lc29uLmJ1aWxkIGIvY29udHJpYi9wZ19jaGVja3N1bV9iZW5j aC9tZXNvbi5idWlsZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMzJj Y2Q5ZWZhMGYKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX2NoZWNrc3VtX2JlbmNoL21l c29uLmJ1aWxkCkBAIC0wLDAgKzEsMjMgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDIyLTIwMjUsIFBv c3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisKK3BnX2NoZWNrc3VtX2JlbmNoX3Nv dXJjZXMgPSBmaWxlcygKKyAgJ3BnX2NoZWNrc3VtX2JlbmNoLmMnLAorKQorCitpZiBob3N0X3N5 c3RlbSA9PSAnd2luZG93cycKKyAgcGdfY2hlY2tzdW1fYmVuY2hfc291cmNlcyArPSByY19saWJf Z2VuLnByb2Nlc3Mod2luMzJ2ZXJfcmMsIGV4dHJhX2FyZ3M6IFsKKyAgICAnLS1OQU1FJywgJ3Bn X2NoZWNrc3VtX2JlbmNoJywKKyAgICAnLS1GSUxFREVTQycsICdwZ19jaGVja3N1bV9iZW5jaCcs XSkKK2VuZGlmCisKK3BnX2NoZWNrc3VtX2JlbmNoID0gc2hhcmVkX21vZHVsZSgncGdfY2hlY2tz dW1fYmVuY2gnLAorICBwZ19jaGVja3N1bV9iZW5jaF9zb3VyY2VzLAorICBrd2FyZ3M6IGNvbnRy aWJfbW9kX2FyZ3MsCispCitjb250cmliX3RhcmdldHMgKz0gcGdfY2hlY2tzdW1fYmVuY2gKKwor aW5zdGFsbF9kYXRhKAorICAncGdfY2hlY2tzdW1fYmVuY2gtLTEuMC5zcWwnLAorICAncGdfY2hl Y2tzdW1fYmVuY2guY29udHJvbCcsCisgIGt3YXJnczogY29udHJpYl9kYXRhX2FyZ3MsCispCmRp ZmYgLS1naXQgYS9jb250cmliL3BnX2NoZWNrc3VtX2JlbmNoL3BnX2NoZWNrc3VtX2JlbmNoLS0x LjAuc3FsIGIvY29udHJpYi9wZ19jaGVja3N1bV9iZW5jaC9wZ19jaGVja3N1bV9iZW5jaC0tMS4w LnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNWYxM2NiZTNjNWUK LS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX2NoZWNrc3VtX2JlbmNoL3BnX2NoZWNrc3Vt X2JlbmNoLS0xLjAuc3FsCkBAIC0wLDAgKzEsOCBAQAorLyogY29udHJpYi9wZ19jaGVja3N1bV9i ZW5jaC9wZ19jaGVja3N1bV9iZW5jaC0tMS4wLnNxbCAqLworCistLSBjb21wbGFpbiBpZiBzY3Jp cHQgaXMgc291cmNlZCBpbiBwc3FsLCByYXRoZXIgdGhhbiB2aWEgQ1JFQVRFIEVYVEVOU0lPTgor LS0gXGVjaG8gVXNlICJDUkVBVEUgRVhURU5TSU9OIHBnX2NoZWNrc3VtX2JlbmNoIiB0byBsb2Fk IHRoaXMgZmlsZS4gXHF1aXQKKworQ1JFQVRFIEZVTkNUSU9OIGRyaXZlX3BnX2NoZWNrc3VtKHBh Z2VfY291bnQgaW50KQorCVJFVFVSTlMgcGdfY2F0YWxvZy52b2lkCisJQVMgJ01PRFVMRV9QQVRI TkFNRScgTEFOR1VBR0UgQzsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfY2hlY2tzdW1fYmVuY2gv cGdfY2hlY2tzdW1fYmVuY2guYyBiL2NvbnRyaWIvcGdfY2hlY2tzdW1fYmVuY2gvcGdfY2hlY2tz dW1fYmVuY2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZGMyMDM5 NWE1OTAKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX2NoZWNrc3VtX2JlbmNoL3BnX2No ZWNrc3VtX2JlbmNoLmMKQEAgLTAsMCArMSw0MiBAQAorI2luY2x1ZGUgInBvc3RncmVzLmgiCisj aW5jbHVkZSAiZm1nci5oIgorI2luY2x1ZGUgInBvcnQvY2hlY2tzdW0uaCIKKyNpbmNsdWRlICJw b3J0L2NoZWNrc3VtX2ltcGwuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8YXNz ZXJ0Lmg+CisKK1BHX01PRFVMRV9NQUdJQzsKKworI2RlZmluZSBSRVBFQVRTIDEwMDAwMDAKKwor UEdfRlVOQ1RJT05fSU5GT19WMShkcml2ZV9wZ19jaGVja3N1bSk7CitEYXR1bQorZHJpdmVfcGdf Y2hlY2tzdW0oUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlpbnQJCQlwYWdlX2NvdW50ID0gUEdfR0VU QVJHX0lOVDMyKDApOworCVBHQ2hlY2tzdW1tYWJsZVBhZ2UgKnBhZ2VzOworCWludAkJCWk7CisJ c2l6ZV90CQlqOworCisJcGFnZXMgPSBwYWxsb2MocGFnZV9jb3VudCAqIHNpemVvZihQR0NoZWNr c3VtbWFibGVQYWdlKSk7CisJc3JhbmQoMCk7CisJZm9yIChqID0gMDsgaiA8IHBhZ2VfY291bnQg KiBzaXplb2YoUEdDaGVja3N1bW1hYmxlUGFnZSk7IGorKykKKwl7CisJCWNoYXIJICAgKmJ5dGVf cHRyID0gKGNoYXIgKikgcGFnZXM7CisKKwkJYnl0ZV9wdHJbal0gPSByYW5kKCkgJSAyNTY7CisJ fQorCisJZm9yIChpID0gMDsgaSA8IFJFUEVBVFM7IGkrKykKKwl7CisJCWNvbnN0IFBHQ2hlY2tz dW1tYWJsZVBhZ2UgKnRlc3RfcGFnZSA9IHBhZ2VzICsgKGkgJSBwYWdlX2NvdW50KTsKKwkJdm9s YXRpbGUgdWludDMyIHJlc3VsdCA9IHBnX2NoZWNrc3VtX2Jsb2NrX2Nob29zZSgoY29uc3QgY2hh ciAqKSB0ZXN0X3BhZ2UpOworCisJCSh2b2lkKSByZXN1bHQ7CisJfQorCisJcGZyZWUoKHZvaWQg KikgcGFnZXMpOworCisJUEdfUkVUVVJOX1ZPSUQoKTsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIv cGdfY2hlY2tzdW1fYmVuY2gvcGdfY2hlY2tzdW1fYmVuY2guY29udHJvbCBiL2NvbnRyaWIvcGdf Y2hlY2tzdW1fYmVuY2gvcGdfY2hlY2tzdW1fYmVuY2guY29udHJvbApuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNGE0ZTJjOTM2M2MKLS0tIC9kZXYvbnVsbAorKysgYi9j b250cmliL3BnX2NoZWNrc3VtX2JlbmNoL3BnX2NoZWNrc3VtX2JlbmNoLmNvbnRyb2wKQEAgLTAs MCArMSw0IEBACitjb21tZW50ID0gJ3BnX2NoZWNrc3VtIGJlbmNobWFyaycKK2RlZmF1bHRfdmVy c2lvbiA9ICcxLjAnCittb2R1bGVfcGF0aG5hbWUgPSAnJGxpYmRpci9wZ19jaGVja3N1bV9iZW5j aCcKK3JlbG9jYXRhYmxlID0gdHJ1ZQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19jaGVja3N1bV9i ZW5jaC9zcWwvcGdfY2hlY2tzdW1fYmVuY2guc3FsIGIvY29udHJpYi9wZ19jaGVja3N1bV9iZW5j aC9zcWwvcGdfY2hlY2tzdW1fYmVuY2guc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAwLi40YjM0NzY5OTk1MwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfY2hl Y2tzdW1fYmVuY2gvc3FsL3BnX2NoZWNrc3VtX2JlbmNoLnNxbApAQCAtMCwwICsxLDE3IEBACitD UkVBVEUgRVhURU5TSU9OIHBnX2NoZWNrc3VtX2JlbmNoOworCitTRUxFQ1QgZHJpdmVfcGdfY2hl Y2tzdW0oLTEpOworCitcdGltaW5nIG9uCisKK1NFTEVDVCBkcml2ZV9wZ19jaGVja3N1bSgxKTsK K1NFTEVDVCBkcml2ZV9wZ19jaGVja3N1bSgyKTsKK1NFTEVDVCBkcml2ZV9wZ19jaGVja3N1bSg0 KTsKK1NFTEVDVCBkcml2ZV9wZ19jaGVja3N1bSg4KTsKK1NFTEVDVCBkcml2ZV9wZ19jaGVja3N1 bSgxNik7CitTRUxFQ1QgZHJpdmVfcGdfY2hlY2tzdW0oMzIpOworU0VMRUNUIGRyaXZlX3BnX2No ZWNrc3VtKDY0KTsKK1NFTEVDVCBkcml2ZV9wZ19jaGVja3N1bSgxMjgpOworU0VMRUNUIGRyaXZl X3BnX2NoZWNrc3VtKDI1Nik7CitTRUxFQ1QgZHJpdmVfcGdfY2hlY2tzdW0oNTEyKTsKK1NFTEVD VCBkcml2ZV9wZ19jaGVja3N1bSgxMDI0KTsKLS0gCjIuNTIuMAoK --0000000000008367d7064824fd6b--