Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1vGo77-004QCJ-BZ for pgsql-hackers@arkaria.postgresql.org; Thu, 06 Nov 2025 00:44:33 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1vGnGQ-004Xyc-0Q for pgsql-hackers@arkaria.postgresql.org; Wed, 05 Nov 2025 23:50:05 +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.94.2) (envelope-from ) id 1vGnGP-004XyT-J9 for pgsql-hackers@lists.postgresql.org; Wed, 05 Nov 2025 23:50:04 +0000 Received: from mail-ed1-x52d.google.com ([2a00:1450:4864:20::52d]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vGnGM-006CC3-1M for pgsql-hackers@lists.postgresql.org; Wed, 05 Nov 2025 23:50:04 +0000 Received: by mail-ed1-x52d.google.com with SMTP id 4fb4d7f45d1cf-6317348fa4fso54341a12.3 for ; Wed, 05 Nov 2025 15:50:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1762386601; x=1762991401; 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=V4/X/6o3dpbcy9Iv4IRvfzrRa8HOgmlPsUfHP7W+Tvk=; b=AtAZvXiRlnUBVyCD0cEyR7uHC+5lpyshJIy0z6UWA4ntrXdODiH+y+8/zdOWO+wIP9 n8rMCop5bl8Jg3Ef54TRUlM4HxEAxfFHngiro7K2hWO3PDiNsN3GvO7IOYHoP9+fzDmp po0MYBtxSXvio8sNmj67EHtq3sreocpFm51xz0ZQ2WF1I26HLKaLKOWyJNGoRFSBeZto c7WKqkRggfgpzLW35Vmjv7HYeL9/JCMnXat9nW1LI/bLupanx1Y6LIisxfDviefE2tEE PQDifJrQ3LZ2ZsNakyMt14/4lVH5Rstrf8w403IvFg/EkfexytkD2zo/BnM6Gnk8MwmP XvJA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762386601; x=1762991401; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=V4/X/6o3dpbcy9Iv4IRvfzrRa8HOgmlPsUfHP7W+Tvk=; b=ib+lzIFhodi7SQmkeTkiZd3QGofYbepVuWyifLq1uPumF4VZob0UA/V0PgT4WumKLo mM8hkVIfF4eeKEtVZeDtHe0YeB34UwNL5UZIWF2NAZtLLZu7fo91o0kMk7QEn7v1whlU Nv2Og/9HFnf8BZJtGEzaxF+qpz7uk0dGJ2BEflQ8Ft2MW+IUl/1v9l6EV/PwhKd5Zo1D TkM5oWWWAL3mHIELFCc7BFxJI9hLmexUHt5xh9IALndb6NMCyzzYi7XYu0+0g/CoWqZK W1TLFz0OdY9YKgPbjV/tqOGoXzQqVpjjNNJ/1X1nzQdyObCDqxlYZQKEVS+TojNfBeeH lSbQ== X-Gm-Message-State: AOJu0YznYEzgMi3M0iopVRVppa4FWbjrYC+JEGc+2XFCb1RCY9hu8dc7 gQ8eM9W410FkwInh3wYUj7w2t5NH9tbIA2rOL9+MlklNbg9z/E3muoknJkjMxvWQGwETZudJRaV erFNrTel0ZawbzenAdHGCu2NcCasBhrkOTAO2 X-Gm-Gg: ASbGnct71VidhCX8iuCJ/c5DpjD2ds50mCMa9WpBY1WqYAI44G2ZHie7VrdzpC4cpIK b6Vg9Q0fbW/9BtiyGCi0TdDVM1yjKd+RKR+1rlxvAfezPySMNHiqUbzs0PwtZDe1nDwKIaTzygK X6XOZQ4PG/DoreldvAQ5Oa0nEgl2lxItpssmtMVl5NGzlj8FnAYCTNAJsTh9Cx9XEsU2FygIHJy sI1iDomcAovFdorkTj/UodymhYtCyGJZVNCAL4cuddlPfUAQM0li3J3jvyr/w== X-Google-Smtp-Source: AGHT+IEcz8cO27useayAC7m7R6Td/sGzKu+NPXQ3tWWjbdmudNgNMD9MXwonGv4YTfkhWbidrrCXg3j+q8XQ+9z/AAU= X-Received: by 2002:a05:6402:13c4:b0:63c:1d4a:afcb with SMTP id 4fb4d7f45d1cf-6410568783amr2436527a12.0.1762386601193; Wed, 05 Nov 2025 15:50:01 -0800 (PST) MIME-Version: 1.0 References: <20250911054220.3784-1-root@ip-172-31-36-228.ec2.internal> In-Reply-To: From: Andrew Kim Date: Wed, 5 Nov 2025 15:49:47 -0800 X-Gm-Features: AWmQ_bms_SSAHYrlsx0WaTLm_HDXBdNZ40M5_Qc5yIt5QsGunS9KEwDczdU59YQ Message-ID: Subject: Re: Proposal for enabling auto-vectorization for checksum calculations To: John Naylor Cc: pgsql-hackers@lists.postgresql.org, Oleg Tselebrovskiy Content-Type: multipart/mixed; boundary="00000000000052880f0642e19bda" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000052880f0642e19bda Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi John, Thank you for reviewing and bringing this up regarding checksum architectur= e. On Tue, Oct 28, 2025 at 7:50=E2=80=AFPM John Naylor wrote: > > On Fri, Oct 24, 2025 at 2:49=E2=80=AFPM Andrew Kim wrote: > > The function signatures (pg_checksum_block, pg_checksum_page) remain > > identical, and checksum_impl.h still contains the complete > > implementation that external programs can include. The runtime > > dispatch only affects internal PostgreSQL usage. > > I don't quite understand the architecture here -- all > platform-specific definitions were put in the "checksum_impl.h" > header. My thinking was that checksum.c would have all that, with thin > wrappers around the functions included from that header. The v9 patch series is attached. I've implemented the architecture as you described. checksum_impl.h -No platform-specific code (removed all AVX2, CPUID, intrinsics) -External programs get a clean, portable standalone implementation -Uses #ifndef PG_CHECKSUM_INTERNAL guard to prevent conflicts checksum.c (full implementation for checksum): -Includes checksum_impl.h for the basic implementation and common definitio= ns -Contains all platform-specific code (AVX2, CPUID detection, runtime dispat= ch) -Implements thin wrapper functions that provide the public interface -Uses #define PG_CHECKSUM_INTERNAL before including the header > > -- > John Naylor > Amazon Web Services Thanks Andrew --00000000000052880f0642e19bda Content-Type: application/octet-stream; name="v9-0001-Move-checksum-functions-from-backend-storage-to-port.patch" Content-Disposition: attachment; filename="v9-0001-Move-checksum-functions-from-backend-storage-to-port.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mhmngh1x0 RnJvbSBiYzU4ZmIzZDNjNWU1YTBmNTkyODM5MTJlMDU0OGNhMTViZTE2YWZiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXcgS2ltIDxhbmRyZXcua2ltQGludGVsLmNvbT4KRGF0 ZTogVHVlLCA0IE5vdiAyMDI1IDE4OjM0OjQ5IC0wODAwClN1YmplY3Q6IFtQQVRDSCAxLzNdIE1v dmUgY2hlY2tzdW0gZnVuY3Rpb25zIGZyb20gYmFja2VuZCBzdG9yYWdlIHRvIHBvcnQKClRoaXMg cmVmYWN0b3JpbmcgbW92ZXMgY2hlY2tzdW0gaW1wbGVtZW50YXRpb24gZnJvbSBzcmMvYmFja2Vu ZC9zdG9yYWdlL3BhZ2UvIHRvIHNyYy9wb3J0LwotLS0KIGNvbnRyaWIvcGFnZWluc3BlY3QvcmF3 cGFnZS5jICAgICAgICAgICAgICAgICB8IDIgKy0KIHNyYy9iYWNrZW5kL2JhY2t1cC9iYXNlYmFj a3VwLmMgICAgICAgICAgICAgICB8IDIgKy0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvcGFnZS9NYWtl ZmlsZSAgICAgICAgICAgICB8IDYgKy0tLS0tCiBzcmMvYmFja2VuZC9zdG9yYWdlL3BhZ2UvYnVm cGFnZS5jICAgICAgICAgICAgfCAyICstCiBzcmMvYmFja2VuZC9zdG9yYWdlL3BhZ2UvbWVzb24u YnVpbGQgICAgICAgICAgfCA5IC0tLS0tLS0tLQogc3JjL2Jpbi9wZ19jaGVja3N1bXMvcGdfY2hl Y2tzdW1zLmMgICAgICAgICAgIHwgMyArLS0KIHNyYy9iaW4vcGdfdXBncmFkZS9maWxlLmMgICAg ICAgICAgICAgICAgICAgICB8IDMgKy0tCiBzcmMvaW5jbHVkZS97c3RvcmFnZSA9PiBwb3J0fS9j aGVja3N1bS5oICAgICAgfCAyICstCiBzcmMvaW5jbHVkZS97c3RvcmFnZSA9PiBwb3J0fS9jaGVj a3N1bV9pbXBsLmggfCA0ICsrLS0KIHNyYy9wb3J0L01ha2VmaWxlICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB8IDYgKysrKysrCiBzcmMve2JhY2tlbmQvc3RvcmFnZS9wYWdlID0+IHBvcnR9 L2NoZWNrc3VtLmMgfCA4ICsrKystLS0tCiBzcmMvcG9ydC9tZXNvbi5idWlsZCAgICAgICAgICAg ICAgICAgICAgICAgICAgfCA0ICsrLS0KIHNyYy90ZXN0L21vZHVsZXMvdGVzdF9haW8vdGVzdF9h aW8uYyAgICAgICAgICB8IDIgKy0KIDEzIGZpbGVzIGNoYW5nZWQsIDIyIGluc2VydGlvbnMoKyks IDMxIGRlbGV0aW9ucygtKQogcmVuYW1lIHNyYy9pbmNsdWRlL3tzdG9yYWdlID0+IHBvcnR9L2No ZWNrc3VtLmggKDk0JSkKIHJlbmFtZSBzcmMvaW5jbHVkZS97c3RvcmFnZSA9PiBwb3J0fS9jaGVj a3N1bV9pbXBsLmggKDk4JSkKIHJlbmFtZSBzcmMve2JhY2tlbmQvc3RvcmFnZS9wYWdlID0+IHBv cnR9L2NoZWNrc3VtLmMgKDczJSkKCmRpZmYgLS1naXQgYS9jb250cmliL3BhZ2VpbnNwZWN0L3Jh d3BhZ2UuYyBiL2NvbnRyaWIvcGFnZWluc3BlY3QvcmF3cGFnZS5jCmluZGV4IGFlZjQ0MmI1ZGIz Li43YmViNzc2NWRhOSAxMDA2NDQKLS0tIGEvY29udHJpYi9wYWdlaW5zcGVjdC9yYXdwYWdlLmMK KysrIGIvY29udHJpYi9wYWdlaW5zcGVjdC9yYXdwYWdlLmMKQEAgLTIzLDcgKzIzLDcgQEAKICNp bmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJwYWdlaW5zcGVjdC5oIgogI2luY2x1ZGUg InN0b3JhZ2UvYnVmbWdyLmgiCi0jaW5jbHVkZSAic3RvcmFnZS9jaGVja3N1bS5oIgorI2luY2x1 ZGUgInBvcnQvY2hlY2tzdW0uaCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1 ZGUgInV0aWxzL3BnX2xzbi5oIgogI2luY2x1ZGUgInV0aWxzL3JlbC5oIgpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvYmFja3VwL2Jhc2ViYWNrdXAuYyBiL3NyYy9iYWNrZW5kL2JhY2t1cC9iYXNl YmFja3VwLmMKaW5kZXggYmI3ZDkwYWE1ZDkuLmQ4NGNlZDRiNDdjIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9iYWNrdXAvYmFzZWJhY2t1cC5jCisrKyBiL3NyYy9iYWNrZW5kL2JhY2t1cC9iYXNl YmFja3VwLmMKQEAgLTM5LDcgKzM5LDcgQEAKICNpbmNsdWRlICJyZXBsaWNhdGlvbi93YWxzZW5k ZXIuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi93YWxzZW5kZXJfcHJpdmF0ZS5oIgogI2luY2x1 ZGUgInN0b3JhZ2UvYnVmcGFnZS5oIgotI2luY2x1ZGUgInN0b3JhZ2UvY2hlY2tzdW0uaCIKKyNp bmNsdWRlICJwb3J0L2NoZWNrc3VtLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9kc21faW1wbC5oIgog I2luY2x1ZGUgInN0b3JhZ2UvaXBjLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9yZWluaXQuaCIKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvcGFnZS9NYWtlZmlsZSBiL3NyYy9iYWNrZW5k L3N0b3JhZ2UvcGFnZS9NYWtlZmlsZQppbmRleCBkYTUzOWIxMTNhNi4uNzg4ZmVlNDAzZjYgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvcGFnZS9NYWtlZmlsZQorKysgYi9zcmMvYmFj a2VuZC9zdG9yYWdlL3BhZ2UvTWFrZWZpbGUKQEAgLTEyLDEyICsxMiw4IEBAIHN1YmRpciA9IHNy Yy9iYWNrZW5kL3N0b3JhZ2UvcGFnZQogdG9wX2J1aWxkZGlyID0gLi4vLi4vLi4vLi4KIGluY2x1 ZGUgJCh0b3BfYnVpbGRkaXIpL3NyYy9NYWtlZmlsZS5nbG9iYWwKIAotT0JKUyA9ICBcCitPQkpT ID0gXAogCWJ1ZnBhZ2UubyBcCi0JY2hlY2tzdW0ubyBcCiAJaXRlbXB0ci5vCiAKIGluY2x1ZGUg JCh0b3Bfc3JjZGlyKS9zcmMvYmFja2VuZC9jb21tb24ubWsKLQotIyBQcm92aWRlIHNwZWNpYWwg b3B0aW1pemF0aW9uIGZsYWdzIGZvciBjaGVja3N1bS5jCi1jaGVja3N1bS5vOiBDRkxBR1MgKz0g JHtDRkxBR1NfVU5ST0xMX0xPT1BTfSAke0NGTEFHU19WRUNUT1JJWkV9CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9zdG9yYWdlL3BhZ2UvYnVmcGFnZS5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9w YWdlL2J1ZnBhZ2UuYwppbmRleCBhYWM2ZTY5NTk1NC4uNzNmNDJkYzBjNDkgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3N0b3JhZ2UvcGFnZS9idWZwYWdlLmMKKysrIGIvc3JjL2JhY2tlbmQvc3Rv cmFnZS9wYWdlL2J1ZnBhZ2UuYwpAQCAtMTgsNyArMTgsNyBAQAogI2luY2x1ZGUgImFjY2Vzcy9p dHVwLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3hsb2cuaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKLSNp bmNsdWRlICJzdG9yYWdlL2NoZWNrc3VtLmgiCisjaW5jbHVkZSAicG9ydC9jaGVja3N1bS5oIgog I2luY2x1ZGUgInV0aWxzL21lbWRlYnVnLmgiCiAjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIK IApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9wYWdlL21lc29uLmJ1aWxkIGIvc3Jj L2JhY2tlbmQvc3RvcmFnZS9wYWdlL21lc29uLmJ1aWxkCmluZGV4IDExMmYwMGZmMzY1Li5jZjky YThmNTVmMCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9wYWdlL21lc29uLmJ1aWxk CisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvcGFnZS9tZXNvbi5idWlsZApAQCAtMSwxNCArMSw1 IEBACiAjIENvcHlyaWdodCAoYykgMjAyMi0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9w bWVudCBHcm91cAogCi1jaGVja3N1bV9iYWNrZW5kX2xpYiA9IHN0YXRpY19saWJyYXJ5KCdjaGVj a3N1bV9iYWNrZW5kX2xpYicsCi0gICdjaGVja3N1bS5jJywKLSAgZGVwZW5kZW5jaWVzOiBiYWNr ZW5kX2J1aWxkX2RlcHMsCi0gIGt3YXJnczogaW50ZXJuYWxfbGliX2FyZ3MsCi0gIGNfYXJnczog dmVjdG9yaXplX2NmbGFncyArIHVucm9sbF9sb29wc19jZmxhZ3MsCi0pCi0KLWJhY2tlbmRfbGlu a193aXRoICs9IGNoZWNrc3VtX2JhY2tlbmRfbGliCi0KIGJhY2tlbmRfc291cmNlcyArPSBmaWxl cygKICAgJ2J1ZnBhZ2UuYycsCiAgICdpdGVtcHRyLmMnLApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9w Z19jaGVja3N1bXMvcGdfY2hlY2tzdW1zLmMgYi9zcmMvYmluL3BnX2NoZWNrc3Vtcy9wZ19jaGVj a3N1bXMuYwppbmRleCA0NmNiMmYzNmVmYS4uMmUwMjEyYzAyOWMgMTAwNjQ0Ci0tLSBhL3NyYy9i aW4vcGdfY2hlY2tzdW1zL3BnX2NoZWNrc3Vtcy5jCisrKyBiL3NyYy9iaW4vcGdfY2hlY2tzdW1z L3BnX2NoZWNrc3Vtcy5jCkBAIC0yOSw4ICsyOSw3IEBACiAjaW5jbHVkZSAiZ2V0b3B0X2xvbmcu aCIKICNpbmNsdWRlICJwZ19nZXRvcHQuaCIKICNpbmNsdWRlICJzdG9yYWdlL2J1ZnBhZ2UuaCIK LSNpbmNsdWRlICJzdG9yYWdlL2NoZWNrc3VtLmgiCi0jaW5jbHVkZSAic3RvcmFnZS9jaGVja3N1 bV9pbXBsLmgiCisjaW5jbHVkZSAicG9ydC9jaGVja3N1bS5oIgogCiAKIHN0YXRpYyBpbnQ2NCBm aWxlc19zY2FubmVkID0gMDsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfdXBncmFkZS9maWxlLmMg Yi9zcmMvYmluL3BnX3VwZ3JhZGUvZmlsZS5jCmluZGV4IDkxZWQxNmFjYjA4Li5mOWE1ZWQwMmVl NCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ191cGdyYWRlL2ZpbGUuYworKysgYi9zcmMvYmluL3Bn X3VwZ3JhZGUvZmlsZS5jCkBAIC0yNCw4ICsyNCw3IEBACiAjaW5jbHVkZSAiY29tbW9uL2ZpbGVf cGVybS5oIgogI2luY2x1ZGUgInBnX3VwZ3JhZGUuaCIKICNpbmNsdWRlICJzdG9yYWdlL2J1ZnBh Z2UuaCIKLSNpbmNsdWRlICJzdG9yYWdlL2NoZWNrc3VtLmgiCi0jaW5jbHVkZSAic3RvcmFnZS9j aGVja3N1bV9pbXBsLmgiCisjaW5jbHVkZSAicG9ydC9jaGVja3N1bS5oIgogCiAKIC8qCmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2NoZWNrc3VtLmggYi9zcmMvaW5jbHVkZS9wb3J0 L2NoZWNrc3VtLmgKc2ltaWxhcml0eSBpbmRleCA5NCUKcmVuYW1lIGZyb20gc3JjL2luY2x1ZGUv c3RvcmFnZS9jaGVja3N1bS5oCnJlbmFtZSB0byBzcmMvaW5jbHVkZS9wb3J0L2NoZWNrc3VtLmgK aW5kZXggMjVkMTNhNzk4ZDEuLmMyZmFlZDgzZWRlIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9z dG9yYWdlL2NoZWNrc3VtLmgKKysrIGIvc3JjL2luY2x1ZGUvcG9ydC9jaGVja3N1bS5oCkBAIC02 LDcgKzYsNyBAQAogICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjUsIFBvc3RncmVT UUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCiAgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5 OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQogICoKLSAqIHNyYy9p bmNsdWRlL3N0b3JhZ2UvY2hlY2tzdW0uaAorICogc3JjL2luY2x1ZGUvcG9ydC9jaGVja3N1bS5o CiAgKgogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0 b3JhZ2UvY2hlY2tzdW1faW1wbC5oIGIvc3JjL2luY2x1ZGUvcG9ydC9jaGVja3N1bV9pbXBsLmgK c2ltaWxhcml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20gc3JjL2luY2x1ZGUvc3RvcmFnZS9jaGVj a3N1bV9pbXBsLmgKcmVuYW1lIHRvIHNyYy9pbmNsdWRlL3BvcnQvY2hlY2tzdW1faW1wbC5oCmlu ZGV4IGRhODdkNjFiYTUyLi4wMGNiMDU0OWYyNCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3Rv cmFnZS9jaGVja3N1bV9pbXBsLmgKKysrIGIvc3JjL2luY2x1ZGUvcG9ydC9jaGVja3N1bV9pbXBs LmgKQEAgLTUsMTMgKzUsMTMgQEAKICAqCiAgKiBUaGlzIGZpbGUgZXhpc3RzIGZvciB0aGUgYmVu ZWZpdCBvZiBleHRlcm5hbCBwcm9ncmFtcyB0aGF0IG1heSB3aXNoIHRvCiAgKiBjaGVjayBQb3N0 Z3JlcyBwYWdlIGNoZWNrc3Vtcy4gIFRoZXkgY2FuICNpbmNsdWRlIHRoaXMgdG8gZ2V0IHRoZSBj b2RlCi0gKiByZWZlcmVuY2VkIGJ5IHN0b3JhZ2UvY2hlY2tzdW0uaC4gIChOb3RlOiB5b3UgbWF5 IG5lZWQgdG8gcmVkZWZpbmUKKyAqIHJlZmVyZW5jZWQgYnkgcG9ydC9jaGVja3N1bS5oLiAgKE5v dGU6IHlvdSBtYXkgbmVlZCB0byByZWRlZmluZQogICogQXNzZXJ0KCkgYXMgZW1wdHkgdG8gY29t cGlsZSB0aGlzIHN1Y2Nlc3NmdWxseSBleHRlcm5hbGx5LikKICAqCiAgKiBQb3J0aW9ucyBDb3B5 cmlnaHQgKGMpIDE5OTYtMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAK ICAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0 eSBvZiBDYWxpZm9ybmlhCiAgKgotICogc3JjL2luY2x1ZGUvc3RvcmFnZS9jaGVja3N1bV9pbXBs LmgKKyAqIHNyYy9pbmNsdWRlL3BvcnQvY2hlY2tzdW1faW1wbC5oCiAgKgogICotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCiAgKi8KZGlmZiAtLWdpdCBhL3NyYy9wb3J0L01ha2VmaWxlIGIvc3JjL3BvcnQvTWFr ZWZpbGUKaW5kZXggNDI3NDk0OWRmYTQuLjRmMWY0NjBiZmYyIDEwMDY0NAotLS0gYS9zcmMvcG9y dC9NYWtlZmlsZQorKysgYi9zcmMvcG9ydC9NYWtlZmlsZQpAQCAtMzksNiArMzksNyBAQCBPQkpT ID0gXAogCSQoTElCT0JKUykgXAogCSQoUEdfQ1JDMzJDX09CSlMpIFwKIAlic2VhcmNoX2FyZy5v IFwKKwljaGVja3N1bS5vIFwKIAljaGtsb2NhbGUubyBcCiAJaW5ldF9uZXRfbnRvcC5vIFwKIAlu b2Jsb2NrLm8gXApAQCAtOTAsNiArOTEsMTEgQEAgcGdfY3JjMzJjX2FybXY4Lm86IENGTEFHUys9 JChDRkxBR1NfQ1JDKQogcGdfY3JjMzJjX2FybXY4X3NobGliLm86IENGTEFHUys9JChDRkxBR1Nf Q1JDKQogcGdfY3JjMzJjX2FybXY4X3Nydi5vOiBDRkxBR1MrPSQoQ0ZMQUdTX0NSQykKIAorIyBQ cm92aWRlIHNwZWNpYWwgb3B0aW1pemF0aW9uIGZsYWdzIGZvciBjaGVja3N1bS5jCitjaGVja3N1 bS5vOiBDRkxBR1MgKz0gJHtDRkxBR1NfVU5ST0xMX0xPT1BTfSAke0NGTEFHU19WRUNUT1JJWkV9 CitjaGVja3N1bV9zaGxpYi5vOiBDRkxBR1MgKz0gJHtDRkxBR1NfVU5ST0xMX0xPT1BTfSAke0NG TEFHU19WRUNUT1JJWkV9CitjaGVja3N1bV9zcnYubzogQ0ZMQUdTICs9ICR7Q0ZMQUdTX1VOUk9M TF9MT09QU30gJHtDRkxBR1NfVkVDVE9SSVpFfQorCiAjCiAjIFNoYXJlZCBsaWJyYXJ5IHZlcnNp b25zIG9mIG9iamVjdCBmaWxlcwogIwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9w YWdlL2NoZWNrc3VtLmMgYi9zcmMvcG9ydC9jaGVja3N1bS5jCnNpbWlsYXJpdHkgaW5kZXggNzMl CnJlbmFtZSBmcm9tIHNyYy9iYWNrZW5kL3N0b3JhZ2UvcGFnZS9jaGVja3N1bS5jCnJlbmFtZSB0 byBzcmMvcG9ydC9jaGVja3N1bS5jCmluZGV4IGM5MTM0NTliNWEzLi5kZTYxYTQ2MjMxZCAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9wYWdlL2NoZWNrc3VtLmMKKysrIGIvc3JjL3Bv cnQvY2hlY2tzdW0uYwpAQCAtNywxNiArNywxNiBAQAogICogUG9ydGlvbnMgQ29weXJpZ2h0IChj KSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKICAqCiAgKiBJ REVOVElGSUNBVElPTgotICoJICBzcmMvYmFja2VuZC9zdG9yYWdlL3BhZ2UvY2hlY2tzdW0uYwor ICoJICBzcmMvcG9ydC9jaGVja3N1bS5jCiAgKgogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KICNp bmNsdWRlICJwb3N0Z3Jlcy5oIgogCi0jaW5jbHVkZSAic3RvcmFnZS9jaGVja3N1bS5oIgorI2lu Y2x1ZGUgInBvcnQvY2hlY2tzdW0uaCIKIC8qCi0gKiBUaGUgYWN0dWFsIGNvZGUgaXMgaW4gc3Rv cmFnZS9jaGVja3N1bV9pbXBsLmguICBUaGlzIGlzIGRvbmUgc28gdGhhdAorICogVGhlIGFjdHVh bCBjb2RlIGlzIGluIHBvcnQvY2hlY2tzdW1faW1wbC5oLiAgVGhpcyBpcyBkb25lIHNvIHRoYXQK ICAqIGV4dGVybmFsIHByb2dyYW1zIGNhbiBpbmNvcnBvcmF0ZSB0aGUgY2hlY2tzdW0gY29kZSBi eSAjaW5jbHVkZSdpbmcKICAqIHRoYXQgZmlsZSBmcm9tIHRoZSBleHBvcnRlZCBQb3N0Z3JlcyBo ZWFkZXJzLiAgKENvbXBhcmUgb3VyIENSQyBjb2RlLikKICAqLwotI2luY2x1ZGUgInN0b3JhZ2Uv Y2hlY2tzdW1faW1wbC5oIgkvKiBJV1lVIHByYWdtYToga2VlcCAqLworI2luY2x1ZGUgInBvcnQv Y2hlY2tzdW1faW1wbC5oIgkJLyogSVdZVSBwcmFnbWE6IGtlZXAgKi8KZGlmZiAtLWdpdCBhL3Ny Yy9wb3J0L21lc29uLmJ1aWxkIGIvc3JjL3BvcnQvbWVzb24uYnVpbGQKaW5kZXggZmM3YjA1OWZl ZTUuLmQzZTYzYmNlOWU3IDEwMDY0NAotLS0gYS9zcmMvcG9ydC9tZXNvbi5idWlsZAorKysgYi9z cmMvcG9ydC9tZXNvbi5idWlsZApAQCAtMTA0LDggKzEwNCw4IEBAIHJlcGxhY2VfZnVuY3NfcG9z ID0gWwogICBbJ3BnX2NyYzMyY19zYjgnLCAnVVNFX1NMSUNJTkdfQllfOF9DUkMzMkMnXSwKIF0K IAotcGdwb3J0X2NmbGFncyA9IHsnY3JjJzogY2ZsYWdzX2NyY30KLXBncG9ydF9zb3VyY2VzX2Nm bGFncyA9IHsnY3JjJzogW119CitwZ3BvcnRfY2ZsYWdzID0geydjcmMnOiBjZmxhZ3NfY3JjLCAn Y2hlY2tzdW0nOiB2ZWN0b3JpemVfY2ZsYWdzICsgdW5yb2xsX2xvb3BzX2NmbGFnc30KK3BncG9y dF9zb3VyY2VzX2NmbGFncyA9IHsnY3JjJzogW10sICdjaGVja3N1bSc6IFtmaWxlcygnY2hlY2tz dW0uYycpXX0KIAogZm9yZWFjaCBmIDogcmVwbGFjZV9mdW5jc19uZWcKICAgZnVuYyA9IGYuZ2V0 KDApCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL3Rlc3RfYWlvLmMgYi9z cmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL3Rlc3RfYWlvLmMKaW5kZXggYzU1Y2Y2YzBhYWMuLjE3 NWU0OTFjMGJjIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL3Rlc3RfYWlv LmMKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby90ZXN0X2Fpby5jCkBAIC0yNCw3ICsy NCw3IEBACiAjaW5jbHVkZSAic3RvcmFnZS9haW9faW50ZXJuYWwuaCIKICNpbmNsdWRlICJzdG9y YWdlL2J1Zl9pbnRlcm5hbHMuaCIKICNpbmNsdWRlICJzdG9yYWdlL2J1Zm1nci5oIgotI2luY2x1 ZGUgInN0b3JhZ2UvY2hlY2tzdW0uaCIKKyNpbmNsdWRlICJwb3J0L2NoZWNrc3VtLmgiCiAjaW5j bHVkZSAic3RvcmFnZS9pcGMuaCIKICNpbmNsdWRlICJzdG9yYWdlL2x3bG9jay5oIgogI2luY2x1 ZGUgInV0aWxzL2J1aWx0aW5zLmgiCi0tIAoyLjQzLjAKCg== --00000000000052880f0642e19bda Content-Type: application/octet-stream; name="v9-0002-Move-platform-specific-checksum-code-from-header-to-.patch" Content-Disposition: attachment; filename="v9-0002-Move-platform-specific-checksum-code-from-header-to-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mhmngp4c1 RnJvbSBmOWFlNDIyYmVjNzliOTY1ZTU4MzgyYTIwZGExNDYyMWMxMGQyYzE5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXcgS2ltIDxhbmRyZXcua2ltQGludGVsLmNvbT4KRGF0 ZTogV2VkLCA1IE5vdiAyMDI1IDAwOjAwOjIwIC0wODAwClN1YmplY3Q6IFtQQVRDSCAxLzJdIE1v dmUgcGxhdGZvcm0tc3BlY2lmaWMgY2hlY2tzdW0gY29kZSBmcm9tIGhlYWRlciB0bwogc291cmNl CgpLZXkgYXJjaGl0ZWN0dXJhbCBjaGFuZ2VzOgoKY2hlY2tzdW1faW1wbC5oIChzaW1wbGlmaWVk IGZvciBleHRlcm5hbCBwcm9ncmFtcyk6Ci0gQ29udGFpbnMgb25seSBiYXNpYyBGTlYtMWEgaW1w bGVtZW50YXRpb24KLSBObyBwbGF0Zm9ybS1zcGVjaWZpYyBjb2RlIChBVlgyLCBDUFVJRCwgaW50 cmluc2ljcykKLSBFeHRlcm5hbCBwcm9ncmFtcyBnZXQgcG9ydGFibGUgc3RhbmRhbG9uZSBpbXBs ZW1lbnRhdGlvbgotIFVzZXMgc3RhdGljIGZ1bmN0aW9ucyAobm8gc3ltYm9sIGNvbmZsaWN0cyB3 aXRoIGNoZWNrc3VtLmMpCgpjaGVja3N1bS5jIChmdWxsIGltcGxlbWVudGF0aW9uIGZvciBQb3N0 Z3JlU1FMKToKLSBJbmNsdWRlcyBjaGVja3N1bV9pbXBsLmggZm9yIGNvbW1vbiBkZWZpbml0aW9u cwotIENvbnRhaW5zIGFsbCBwbGF0Zm9ybS1zcGVjaWZpYyBjb2RlIChBVlgyLCBDUFVJRCBkZXRl Y3Rpb24pCi0gSW1wbGVtZW50cyBydW50aW1lIGRpc3BhdGNoIGJhc2VkIG9uIENQVSBmZWF0dXJl cwotIFByb3ZpZGVzIHB1YmxpYyBpbnRlcmZhY2VzIHdyYXBwaW5nIHRoZSBiYXNpYyBpbXBsZW1l bnRhdGlvbgoKQXJjaGl0ZWN0dXJlIGJlbmVmaXRzOgotIEZvbGxvd3MgUG9zdGdyZVNRTCBwcmlu Y2lwbGU6IHBsYXRmb3JtIGNvZGUgYmVsb25ncyBpbiAuYyBmaWxlcwotIE5vIGNvZGUgZHVwbGlj YXRpb24gKGNoZWNrc3VtLmMgaW5jbHVkZXMgY2hlY2tzdW1faW1wbC5oKQotIENsZWFuIHNlcGFy YXRpb246IGV4dGVybmFsIHByb2dyYW1zIHZzIGludGVybmFsIG9wdGltaXphdGlvbgotIE1haW50 YWlucyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGZvciBleHRlcm5hbCB0b29scwoKVHJhZGUtb2Zm czoKLSBFeHRlcm5hbCBwcm9ncmFtcyB1c2UgYmFzaWMgaW1wbGVtZW50YXRpb24gb25seSAobm8g QVZYMikKLSBQb3N0Z3JlU1FMIGludGVybmFsIGNvZGUgZ2V0cyBmdWxsIG9wdGltaXphdGlvbgot LS0KIGNvbmZpZy9jLWNvbXBpbGVyLm00ICAgICAgICAgICAgIHwgIDI2ICsrKysKIGNvbmZpZ3Vy ZSAgICAgICAgICAgICAgICAgICAgICAgIHwgIDUyICsrKysrKysrCiBjb25maWd1cmUuYWMgICAg ICAgICAgICAgICAgICAgICB8ICAgOSArKwogbWVzb24uYnVpbGQgICAgICAgICAgICAgICAgICAg ICAgfCAgMzAgKysrKysKIHNyYy9pbmNsdWRlL3BnX2NvbmZpZy5oLmluICAgICAgIHwgICAzICsK IHNyYy9pbmNsdWRlL3BvcnQvY2hlY2tzdW0uaCAgICAgIHwgICA2ICsKIHNyYy9pbmNsdWRlL3Bv cnQvY2hlY2tzdW1faW1wbC5oIHwgIDEzICstCiBzcmMvcG9ydC9jaGVja3N1bS5jICAgICAgICAg ICAgICB8IDIwMCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKystCiA4IGZpbGVzIGNoYW5n ZWQsIDMzMSBpbnNlcnRpb25zKCspLCA4IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2NvbmZp Zy9jLWNvbXBpbGVyLm00IGIvY29uZmlnL2MtY29tcGlsZXIubTQKaW5kZXggMjM2YTU5ZTg1MzYu LjQwOTI3ZDU2ZTZhIDEwMDY0NAotLS0gYS9jb25maWcvYy1jb21waWxlci5tNAorKysgYi9jb25m aWcvYy1jb21waWxlci5tNApAQCAtNTgxLDYgKzU4MSwzMiBAQCBmaQogdW5kZWZpbmUoW0FjX2Nh Y2hldmFyXSlkbmwKIF0pIyBQR0FDX1NTRTQyX0NSQzMyX0lOVFJJTlNJQ1MKIAorIyBQR0FDX0FW WDJfU1VQUE9SVAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2sgaWYgdGhl IGNvbXBpbGVyIHN1cHBvcnRzIEFWWDIgdGFyZ2V0IGF0dHJpYnV0ZS4KKyMgVGhpcyBpcyB1c2Vk IGZvciBvcHRpbWl6ZWQgY2hlY2tzdW0gY2FsY3VsYXRpb25zIHdpdGggcnVudGltZSBkZXRlY3Rp b24uCisjCisjIElmIEFWWDIgdGFyZ2V0IGF0dHJpYnV0ZSBpcyBzdXBwb3J0ZWQsIHNldHMgcGdh Y19hdngyX3N1cHBvcnQuCitBQ19ERUZVTihbUEdBQ19BVlgyX1NVUFBPUlRdLAorW2RlZmluZShb QWNfY2FjaGV2YXJdLCBbQVNfVFJfU0goW3BnYWNfY3ZfYXZ4Ml9zdXBwb3J0XSldKWRubAorQUNf Q0FDSEVfQ0hFQ0soW2ZvciBBVlgyIHRhcmdldCBhdHRyaWJ1dGUgc3VwcG9ydF0sIFtBY19jYWNo ZXZhcl0sCitbQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbI2luY2x1ZGUgPHN0 ZGludC5oPgorICAgICNpZiBkZWZpbmVkKF9faGFzX2F0dHJpYnV0ZSkgJiYgX19oYXNfYXR0cmli dXRlICh0YXJnZXQpCisgICAgX19hdHRyaWJ1dGVfXygodGFyZ2V0KCJhdngyIikpKQorICAgIHN0 YXRpYyBpbnQgYXZ4Ml90ZXN0KHZvaWQpCisgICAgeworICAgICAgcmV0dXJuIDA7CisgICAgfQor ICAgICNlbmRpZl0sCisgIFtyZXR1cm4gYXZ4Ml90ZXN0KCk7XSldLAorICBbQWNfY2FjaGV2YXI9 eWVzXSwKKyAgW0FjX2NhY2hldmFyPW5vXSldKQoraWYgdGVzdCB4IiRBY19jYWNoZXZhciIgPSB4 InllcyI7IHRoZW4KKyAgcGdhY19hdngyX3N1cHBvcnQ9eWVzCitmaQordW5kZWZpbmUoW0FjX2Nh Y2hldmFyXSlkbmwKK10pIyBQR0FDX0FWWDJfU1VQUE9SVAorCiAjIFBHQUNfQVZYNTEyX1BDTE1V TF9JTlRSSU5TSUNTCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBDaGVjayBpZiB0 aGUgY29tcGlsZXIgc3VwcG9ydHMgQVZYLTUxMiBjYXJyeWxlc3MgbXVsdGlwbGljYXRpb24KZGlm ZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQppbmRleCBmN2MyNGM4ZjU3Ni4uMDhhMDQ2 MTkyODQgMTAwNzU1Ci0tLSBhL2NvbmZpZ3VyZQorKysgYi9jb25maWd1cmUKQEAgLTE3NTUyLDYg KzE3NTUyLDU4IEBAICRhc19lY2hvICIjZGVmaW5lIEhBVkVfWFNBVkVfSU5UUklOU0lDUyAxIiA+ PmNvbmZkZWZzLmgKIAogZmkKIAorIyBDaGVjayBmb3IgQVZYMiB0YXJnZXQgYW5kIGludHJpbnNp YyBzdXBwb3J0CisjCitpZiB0ZXN0IHgiJGhvc3RfY3B1IiA9IHgieDg2XzY0IjsgdGhlbgorICB7 ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBBVlgy IHN1cHBvcnQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIEFWWDIgc3VwcG9ydC4uLiAi ID4mNjsgfQoraWYgJHtwZ2FjX2N2X2F2eDJfc3VwcG9ydCs6fSBmYWxzZTsgdGhlbiA6CisgICRh c19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNF T0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxp bW1pbnRyaW4uaD4KKyAgICAjaW5jbHVkZSA8c3RkaW50Lmg+CisgICAgI2lmIGRlZmluZWQoX19o YXNfYXR0cmlidXRlKSAmJiBfX2hhc19hdHRyaWJ1dGUgKHRhcmdldCkKKyAgICBfX2F0dHJpYnV0 ZV9fKCh0YXJnZXQoImF2eDIiKSkpCisgICAgI2VuZGlmCisgICAgc3RhdGljIGludCBhdngyX3Rl c3Qodm9pZCkKKyAgICB7CisgICAgICBjb25zdCBjaGFyIGJ1ZltzaXplb2YoX19tMjU2aSldOwor ICAgICAgX19tMjU2aSBhY2N1bSA9IF9tbTI1Nl9sb2FkdV9zaTI1NigoY29uc3QgX19tMjU2aSAq KSBidWYpOworCSAgYWNjdW0gPSBfbW0yNTZfYWRkX2VwaTMyKGFjY3VtLCBhY2N1bSk7CisgICAg ICBpbnQgcmVzdWx0ID0gX21tMjU2X2V4dHJhY3RfZXBpMzIoYWNjdW0sIDApOworICAgICAgcmV0 dXJuIChpbnQpIHJlc3VsdDsKKyAgICB9CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBhdngyX3Rl c3QoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAi JExJTkVOTyI7IHRoZW4gOgorICBwZ2FjX2N2X2F2eDJfc3VwcG9ydD15ZXMKK2Vsc2UKKyAgcGdh Y19jdl9hdngyX3N1cHBvcnQ9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVz dC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAor ZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkcGdh Y19jdl9hdngyX3N1cHBvcnQiID4mNQorJGFzX2VjaG8gIiRwZ2FjX2N2X2F2eDJfc3VwcG9ydCIg PiY2OyB9CitpZiB0ZXN0IHgiJHBnYWNfY3ZfYXZ4Ml9zdXBwb3J0IiA9IHgieWVzIjsgdGhlbgor ICBwZ2FjX2F2eDJfc3VwcG9ydD15ZXMKK2ZpCisKKyAgaWYgdGVzdCB4IiRwZ2FjX2F2eDJfc3Vw cG9ydCIgPSB4InllcyI7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgVVNFX0FWWDJfV0lUSF9S VU5USU1FX0NIRUNLIDEiID4+Y29uZmRlZnMuaAorCisgIGZpCitmaQorCiAjIENoZWNrIGZvciBB VlgtNTEyIHBvcGNvdW50IGludHJpbnNpY3MKICMKIGlmIHRlc3QgeCIkaG9zdF9jcHUiID0geCJ4 ODZfNjQiOyB0aGVuCmRpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKaW5k ZXggNmM4MDJkZWFhY2IuLjAwYTcwMWRiMWYyIDEwMDY0NAotLS0gYS9jb25maWd1cmUuYWMKKysr IGIvY29uZmlndXJlLmFjCkBAIC0yMDc3LDYgKzIwNzcsMTUgQEAgZWxzZQogICBmaQogZmkKIAor IyBDaGVjayBmb3IgQVZYMiB0YXJnZXQgYW5kIGludHJpbnNpYyBzdXBwb3J0CisjCitpZiB0ZXN0 IHgiJGhvc3RfY3B1IiA9IHgieDg2XzY0IjsgdGhlbgorICBQR0FDX0FWWDJfU1VQUE9SVCgpCisg IGlmIHRlc3QgeCIkcGdhY19hdngyX3N1cHBvcnQiID0geCJ5ZXMiOyB0aGVuCisgICAgQUNfREVG SU5FKFVTRV9BVlgyX1dJVEhfUlVOVElNRV9DSEVDSywgMSwgW0RlZmluZSB0byAxIHRvIHVzZSBB VlgyIGluc3RydWN0aW9ucyB3aXRoIGEgcnVudGltZSBjaGVjay5dKQorICBmaQorZmkKKwogIyBD aGVjayBmb3IgWFNBVkUgaW50cmluc2ljcwogIwogUEdBQ19YU0FWRV9JTlRSSU5TSUNTKCkKZGlm ZiAtLWdpdCBhL21lc29uLmJ1aWxkIGIvbWVzb24uYnVpbGQKaW5kZXggMGY2MWZmNmE3MDAuLjU1 YjI2ODE0ZWZjIDEwMDY0NAotLS0gYS9tZXNvbi5idWlsZAorKysgYi9tZXNvbi5idWlsZApAQCAt MjI5Myw2ICsyMjkzLDM2IEBAIGludCBtYWluKHZvaWQpCiBlbmRpZgogCiAKKyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBD aGVjayBmb3IgdGhlIGF2YWlsYWJpbGl0eSBvZiBBVlgyIHN1cHBvcnQKKyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitpZiBo b3N0X2NwdSA9PSAneDg2XzY0JworCisgIHByb2cgPSAnJycKKyNpbmNsdWRlIDxpbW1pbnRyaW4u aD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpZiBkZWZpbmVkKF9faGFzX2F0dHJpYnV0ZSkgJiYg X19oYXNfYXR0cmlidXRlICh0YXJnZXQpCitfX2F0dHJpYnV0ZV9fKCh0YXJnZXQoImF2eDIiKSkp CisjZW5kaWYKK3N0YXRpYyBpbnQgYXZ4Ml90ZXN0KHZvaWQpCit7CisgICAgcmV0dXJuIDA7Cit9 CisKK2ludCBtYWluKHZvaWQpCit7CisgICAgcmV0dXJuIGF2eDJfdGVzdCgpOworfQorJycnCisK KyAgaWYgY2MubGlua3MocHJvZywgbmFtZTogJ0FWWDIgc3VwcG9ydCcsIGFyZ3M6IHRlc3RfY19h cmdzKQorICAgIGNkYXRhLnNldCgnVVNFX0FWWDJfV0lUSF9SVU5USU1FX0NIRUNLJywgMSkKKyAg ZW5kaWYKKworZW5kaWYKKworCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMgQ2hlY2sgZm9yIHRoZSBhdmFpbGFiaWxpdHkg b2YgQVZYLTUxMiBwb3Bjb3VudCBpbnRyaW5zaWNzLgogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9wZ19jb25maWcuaC5pbiBiL3NyYy9pbmNsdWRlL3BnX2NvbmZpZy5oLmluCmluZGV4 IGY1MmYxNGNjNTY2Li42NjU1Njk4NWE2MyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcGdfY29u ZmlnLmguaW4KKysrIGIvc3JjL2luY2x1ZGUvcGdfY29uZmlnLmguaW4KQEAgLTY3OCw2ICs2Nzgs OSBAQAogLyogRGVmaW5lIHRvIDEgdG8gdXNlIEFWWC01MTIgQ1JDIGFsZ29yaXRobXMgd2l0aCBh IHJ1bnRpbWUgY2hlY2suICovCiAjdW5kZWYgVVNFX0FWWDUxMl9DUkMzMkNfV0lUSF9SVU5USU1F X0NIRUNLCiAKKy8qIERlZmluZSB0byAxIHRvIHVzZSBBVlgyIGluc3RydWN0aW9ucyB3aXRoIGEg cnVudGltZSBjaGVjay4gKi8KKyN1bmRlZiBVU0VfQVZYMl9XSVRIX1JVTlRJTUVfQ0hFQ0sKKwog LyogRGVmaW5lIHRvIDEgdG8gdXNlIEFWWC01MTIgcG9wY291bnQgaW5zdHJ1Y3Rpb25zIHdpdGgg YSBydW50aW1lIGNoZWNrLiAqLwogI3VuZGVmIFVTRV9BVlg1MTJfUE9QQ05UX1dJVEhfUlVOVElN RV9DSEVDSwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9wb3J0L2NoZWNrc3VtLmggYi9zcmMv aW5jbHVkZS9wb3J0L2NoZWNrc3VtLmgKaW5kZXggYzJmYWVkODNlZGUuLjUzMWM5NDQwNGY4IDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9wb3J0L2NoZWNrc3VtLmgKKysrIGIvc3JjL2luY2x1ZGUv cG9ydC9jaGVja3N1bS5oCkBAIC0yMSw0ICsyMSwxMCBAQAogICovCiBleHRlcm4gdWludDE2IHBn X2NoZWNrc3VtX3BhZ2UoY2hhciAqcGFnZSwgQmxvY2tOdW1iZXIgYmxrbm8pOwogCisvKgorICog Q2hvb3NlIHRoZSBiZXN0IGF2YWlsYWJsZSBjaGVja3N1bSBpbXBsZW1lbnRhdGlvbiBhbmQgY29t cHV0ZSBjaGVja3N1bQorICogZm9yIGEgc2luZ2xlIGJsb2NrLgorICovCitleHRlcm4gdWludDMy IHBnX2NoZWNrc3VtX2Jsb2NrX2Nob29zZShjb25zdCBjaGFyICpkYXRhKTsKKwogI2VuZGlmCQkJ CQkJCS8qIENIRUNLU1VNX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3BvcnQvY2hlY2tz dW1faW1wbC5oIGIvc3JjL2luY2x1ZGUvcG9ydC9jaGVja3N1bV9pbXBsLmgKaW5kZXggMDBjYjA1 NDlmMjQuLjc5OTNkYTkyMzI1IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9wb3J0L2NoZWNrc3Vt X2ltcGwuaAorKysgYi9zcmMvaW5jbHVkZS9wb3J0L2NoZWNrc3VtX2ltcGwuaApAQCAtMSw3ICsx LDcgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICoKICAqIGNoZWNrc3VtX2ltcGwuaAotICoJICBD aGVja3N1bSBpbXBsZW1lbnRhdGlvbiBmb3IgZGF0YSBwYWdlcy4KKyAqCQlDaGVja3N1bSBpbXBs ZW1lbnRhdGlvbiBmb3IgZGF0YSBwYWdlcy4KICAqCiAgKiBUaGlzIGZpbGUgZXhpc3RzIGZvciB0 aGUgYmVuZWZpdCBvZiBleHRlcm5hbCBwcm9ncmFtcyB0aGF0IG1heSB3aXNoIHRvCiAgKiBjaGVj ayBQb3N0Z3JlcyBwYWdlIGNoZWNrc3Vtcy4gIFRoZXkgY2FuICNpbmNsdWRlIHRoaXMgdG8gZ2V0 IHRoZSBjb2RlCkBAIC0xNzMsNiArMTczLDggQEAgcGdfY2hlY2tzdW1fYmxvY2soY29uc3QgUEdD aGVja3N1bW1hYmxlUGFnZSAqcGFnZSkKIAlyZXR1cm4gcmVzdWx0OwogfQogCisjaWZuZGVmIFBH X0NIRUNLU1VNX0lOVEVSTkFMCisKIC8qCiAgKiBDb21wdXRlIHRoZSBjaGVja3N1bSBmb3IgYSBQ b3N0Z3JlcyBwYWdlLgogICoKQEAgLTE4Miw2ICsxODQsOSBAQCBwZ19jaGVja3N1bV9ibG9jayhj b25zdCBQR0NoZWNrc3VtbWFibGVQYWdlICpwYWdlKQogICogVGhlIGNoZWNrc3VtIGluY2x1ZGVz IHRoZSBibG9jayBudW1iZXIgKHRvIGRldGVjdCB0aGUgY2FzZSB3aGVyZSBhIHBhZ2UgaXMKICAq IHNvbWVob3cgbW92ZWQgdG8gYSBkaWZmZXJlbnQgbG9jYXRpb24pLCB0aGUgcGFnZSBoZWFkZXIg KGV4Y2x1ZGluZyB0aGUKICAqIGNoZWNrc3VtIGl0c2VsZiksIGFuZCB0aGUgcGFnZSBkYXRhLgor ICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgb25seSBkZWZpbmVkIHdoZW4gaW5jbHVkZWQgYnkgZXh0 ZXJuYWwgcHJvZ3JhbXMuCisgKiBQb3N0Z3JlU1FMIGludGVybmFsIGNvZGUgdXNlcyB0aGUgb3B0 aW1pemVkIHZlcnNpb24gaW4gY2hlY2tzdW0uYy4KICAqLwogdWludDE2CiBwZ19jaGVja3N1bV9w YWdlKGNoYXIgKnBhZ2UsIEJsb2NrTnVtYmVyIGJsa25vKQpAQCAtMTk2LDggKzIwMSw4IEBAIHBn X2NoZWNrc3VtX3BhZ2UoY2hhciAqcGFnZSwgQmxvY2tOdW1iZXIgYmxrbm8pCiAJLyoKIAkgKiBT YXZlIHBkX2NoZWNrc3VtIGFuZCB0ZW1wb3JhcmlseSBzZXQgaXQgdG8gemVybywgc28gdGhhdCB0 aGUgY2hlY2tzdW0KIAkgKiBjYWxjdWxhdGlvbiBpc24ndCBhZmZlY3RlZCBieSB0aGUgb2xkIGNo ZWNrc3VtIHN0b3JlZCBvbiB0aGUgcGFnZS4KLQkgKiBSZXN0b3JlIGl0IGFmdGVyLCBiZWNhdXNl IGFjdHVhbGx5IHVwZGF0aW5nIHRoZSBjaGVja3N1bSBpcyBOT1QgcGFydCBvZgotCSAqIHRoZSBB UEkgb2YgdGhpcyBmdW5jdGlvbi4KKwkgKiBSZXN0b3JlIGl0IGFmdGVyLCBiZWNhdXNlIGFjdHVh bGx5IHVwZGF0aW5nIHRoZSBjaGVja3N1bSBpcyBOT1QgcGFydAorCSAqIG9mIHRoZSBBUEkgb2Yg dGhpcyBmdW5jdGlvbi4KIAkgKi8KIAlzYXZlX2NoZWNrc3VtID0gY3BhZ2UtPnBoZHIucGRfY2hl Y2tzdW07CiAJY3BhZ2UtPnBoZHIucGRfY2hlY2tzdW0gPSAwOwpAQCAtMjEzLDMgKzIxOCw1IEBA IHBnX2NoZWNrc3VtX3BhZ2UoY2hhciAqcGFnZSwgQmxvY2tOdW1iZXIgYmxrbm8pCiAJICovCiAJ cmV0dXJuICh1aW50MTYpICgoY2hlY2tzdW0gJSA2NTUzNSkgKyAxKTsKIH0KKworI2VuZGlmIC8q ICFQR19DSEVDS1NVTV9JTlRFUk5BTCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3BvcnQvY2hlY2tzdW0u YyBiL3NyYy9wb3J0L2NoZWNrc3VtLmMKaW5kZXggZGU2MWE0NjIzMWQuLjFmNjg0ZDgwZGI5IDEw MDY0NAotLS0gYS9zcmMvcG9ydC9jaGVja3N1bS5jCisrKyBiL3NyYy9wb3J0L2NoZWNrc3VtLmMK QEAgLTEsNyArMSwxMSBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgogICogY2hlY2tzdW0uYwot ICoJICBDaGVja3N1bSBpbXBsZW1lbnRhdGlvbiBmb3IgZGF0YSBwYWdlcy4KKyAqCQlDaGVja3N1 bSBpbXBsZW1lbnRhdGlvbiBmb3IgZGF0YSBwYWdlcy4KKyAqCisgKiBUaGlzIGZpbGUgcHJvdmlk ZXMgdGhlIHBsYXRmb3JtLXNwZWNpZmljIG9wdGltaXphdGlvbnMgKEFWWDIsIENQVUlEKQorICog YW5kIHJ1bnRpbWUgZGlzcGF0Y2ggbG9naWMuIEl0IGluY2x1ZGVzIGNoZWNrc3VtX2ltcGwuaCBm b3IgdGhlCisgKiBiYXNpYyBpbXBsZW1lbnRhdGlvbiBhbmQgY29tbW9uIGRlZmluaXRpb25zLgog ICoKICAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDI1LCBQb3N0Z3JlU1FMIEdsb2Jh bCBEZXZlbG9wbWVudCBHcm91cAogICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdl bnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKQEAgLTExLDEyICsxNSwxOTggQEAK ICAqCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLworCiAjaW5jbHVkZSAicG9zdGdyZXMuaCIKIAog I2luY2x1ZGUgInBvcnQvY2hlY2tzdW0uaCIKKyNpbmNsdWRlICJzdG9yYWdlL2J1ZnBhZ2UuaCIK KworLyogUHJldmVudCBkdXBsaWNhdGUgcGdfY2hlY2tzdW1fcGFnZSBkZWZpbml0aW9uIGZyb20g Y2hlY2tzdW1faW1wbC5oICovCisjZGVmaW5lIFBHX0NIRUNLU1VNX0lOVEVSTkFMCisKKy8qIElu Y2x1ZGUgdGhlIGJhc2ljIGltcGxlbWVudGF0aW9uIGFuZCBjb21tb24gZGVmaW5pdGlvbnMgKi8K KyNpbmNsdWRlICJwb3J0L2NoZWNrc3VtX2ltcGwuaCIKKworI2lmZGVmIFVTRV9BVlgyX1dJVEhf UlVOVElNRV9DSEVDSworI2luY2x1ZGUgPGltbWludHJpbi5oPgorI2lmIGRlZmluZWQoSEFWRV9f R0VUX0NQVUlEKSB8fCBkZWZpbmVkKEhBVkVfX0dFVF9DUFVJRF9DT1VOVCkKKyNpbmNsdWRlIDxj cHVpZC5oPgorI2VuZGlmCisjaWYgZGVmaW5lZChIQVZFX19DUFVJRCkgfHwgZGVmaW5lZChIQVZF X19DUFVJREVYKQorI2luY2x1ZGUgPGludHJpbi5oPgorI2VuZGlmCisjZW5kaWYKKworI2lmZGVm IFVTRV9BVlgyX1dJVEhfUlVOVElNRV9DSEVDSworCisvKgorICogRG9lcyBDUFVJRCBzYXkgdGhl cmUncyBzdXBwb3J0IGZvciBYU0FWRSBpbnN0cnVjdGlvbnM/CisgKi8KK3N0YXRpYyBpbmxpbmUg Ym9vbAoreHNhdmVfYXZhaWxhYmxlKHZvaWQpCit7CisJdW5zaWduZWQgaW50IGV4eFs0XSA9IHsw LCAwLCAwLCAwfTsKKworI2lmIGRlZmluZWQoSEFWRV9fR0VUX0NQVUlEKQorCV9fZ2V0X2NwdWlk KDEsICZleHhbMF0sICZleHhbMV0sICZleHhbMl0sICZleHhbM10pOworI2VsaWYgZGVmaW5lZChI QVZFX19DUFVJRCkKKwlfX2NwdWlkKGV4eCwgMSk7CisjZWxzZQorI2Vycm9yIGNwdWlkIGluc3Ry dWN0aW9uIG5vdCBhdmFpbGFibGUKKyNlbmRpZgorCXJldHVybiAoZXh4WzJdICYgKDEgPDwgMjcp KSAhPSAwOwkvKiBvc3hzYXZlICovCit9CisKIC8qCi0gKiBUaGUgYWN0dWFsIGNvZGUgaXMgaW4g cG9ydC9jaGVja3N1bV9pbXBsLmguICBUaGlzIGlzIGRvbmUgc28gdGhhdAotICogZXh0ZXJuYWwg cHJvZ3JhbXMgY2FuIGluY29ycG9yYXRlIHRoZSBjaGVja3N1bSBjb2RlIGJ5ICNpbmNsdWRlJ2lu ZwotICogdGhhdCBmaWxlIGZyb20gdGhlIGV4cG9ydGVkIFBvc3RncmVzIGhlYWRlcnMuICAoQ29t cGFyZSBvdXIgQ1JDIGNvZGUuKQorICogRG9lcyBYR0VUQlYgc2F5IHRoZSBZTU0gcmVnaXN0ZXJz IGFyZSBlbmFibGVkPworICoKKyAqIE5COiBDYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIHZlcmlm eWluZyB0aGF0IHhzYXZlX2F2YWlsYWJsZSgpIHJldHVybnMgdHJ1ZQorICogYmVmb3JlIGNhbGxp bmcgdGhpcy4KICAqLwotI2luY2x1ZGUgInBvcnQvY2hlY2tzdW1faW1wbC5oIgkJLyogSVdZVSBw cmFnbWE6IGtlZXAgKi8KKyNpZmRlZiBIQVZFX1hTQVZFX0lOVFJJTlNJQ1MKK3BnX2F0dHJpYnV0 ZV90YXJnZXQoInhzYXZlIikKKyNlbmRpZgorc3RhdGljIGlubGluZSBib29sCit5bW1fcmVnc19h dmFpbGFibGUodm9pZCkKK3sKKyNpZmRlZiBIQVZFX1hTQVZFX0lOVFJJTlNJQ1MKKwlyZXR1cm4g KF94Z2V0YnYoMCkgJiAweDA2KSA9PSAweDA2OworI2Vsc2UKKwlyZXR1cm4gZmFsc2U7CisjZW5k aWYKK30KKworLyoKKyAqIENoZWNrIGZvciBBVlgyIHN1cHBvcnQgdXNpbmcgQ1BVSUQgZGV0ZWN0 aW9uCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbAorYXZ4Ml9hdmFpbGFibGUodm9pZCkKK3sKKwl1 bnNpZ25lZCBpbnQgZXh4WzRdID0gezAsIDAsIDAsIDB9OworCisJaWYgKCF4c2F2ZV9hdmFpbGFi bGUoKSB8fCAheW1tX3JlZ3NfYXZhaWxhYmxlKCkpCisJCXJldHVybiBmYWxzZTsKKworI2lmIGRl ZmluZWQoSEFWRV9fR0VUX0NQVUlEX0NPVU5UKQorCV9fZ2V0X2NwdWlkX2NvdW50KDcsIDAsICZl eHhbMF0sICZleHhbMV0sICZleHhbMl0sICZleHhbM10pOworI2VsaWYgZGVmaW5lZChIQVZFX19D UFVJREVYKQorCV9fY3B1aWRleChleHgsIDcsIDApOworI2Vsc2UKKyNlcnJvciBjcHVpZCBpbnN0 cnVjdGlvbiBub3QgYXZhaWxhYmxlCisjZW5kaWYKKwlyZXR1cm4gKGV4eFsxXSAmICgxIDw8IDUp KSAhPSAwOwkvKiBhdngyICovCit9CisKKy8qCisgKiBBVlgyLW9wdGltaXplZCBibG9jayBjaGVj a3N1bSBhbGdvcml0aG0uCisgKiBTYW1lIGFsZ29yaXRobSBhcyBkZWZhdWx0LCBidXQgY29tcGls ZWQgd2l0aCBBVlgyIHRhcmdldCBmb3IgYXV0by12ZWN0b3JpemF0aW9uLgorICovCitwZ19hdHRy aWJ1dGVfdGFyZ2V0KCJhdngyIikKK3N0YXRpYyB1aW50MzIKK3BnX2NoZWNrc3VtX2Jsb2NrX2F2 eDIoY29uc3QgUEdDaGVja3N1bW1hYmxlUGFnZSAqcGFnZSkKK3sKKwl1aW50MzIJCXN1bXNbTl9T VU1TXTsKKwl1aW50MzIJCXJlc3VsdCA9IDA7CisJdWludDMyCQlpLAorCQkJCWo7CisKKwkvKiBl bnN1cmUgdGhhdCB0aGUgc2l6ZSBpcyBjb21wYXRpYmxlIHdpdGggdGhlIGFsZ29yaXRobSAqLwor CUFzc2VydChzaXplb2YoUEdDaGVja3N1bW1hYmxlUGFnZSkgPT0gQkxDS1NaKTsKKworCS8qIGlu aXRpYWxpemUgcGFydGlhbCBjaGVja3N1bXMgdG8gdGhlaXIgY29ycmVzcG9uZGluZyBvZmZzZXRz ICovCisJbWVtY3B5KHN1bXMsIGNoZWNrc3VtQmFzZU9mZnNldHMsIHNpemVvZihjaGVja3N1bUJh c2VPZmZzZXRzKSk7CisKKwkvKiBtYWluIGNoZWNrc3VtIGNhbGN1bGF0aW9uICovCisJZm9yIChp ID0gMDsgaSA8ICh1aW50MzIpIChCTENLU1ogLyAoc2l6ZW9mKHVpbnQzMikgKiBOX1NVTVMpKTsg aSsrKQorCQlmb3IgKGogPSAwOyBqIDwgTl9TVU1TOyBqKyspCisJCQlDSEVDS1NVTV9DT01QKHN1 bXNbal0sIHBhZ2UtPmRhdGFbaV1bal0pOworCisJLyogZmluYWxseSBhZGQgaW4gdHdvIHJvdW5k cyBvZiB6ZXJvZXMgZm9yIGFkZGl0aW9uYWwgbWl4aW5nICovCisJZm9yIChpID0gMDsgaSA8IDI7 IGkrKykKKwkJZm9yIChqID0gMDsgaiA8IE5fU1VNUzsgaisrKQorCQkJQ0hFQ0tTVU1fQ09NUChz dW1zW2pdLCAwKTsKKworCS8qIHhvciBmb2xkIHBhcnRpYWwgY2hlY2tzdW1zIHRvZ2V0aGVyICov CisJZm9yIChpID0gMDsgaSA8IE5fU1VNUzsgaSsrKQorCQlyZXN1bHQgXj0gc3Vtc1tpXTsKKwor CXJldHVybiByZXN1bHQ7Cit9CisjZW5kaWYJCQkJCQkJLyogVVNFX0FWWDJfV0lUSF9SVU5USU1F X0NIRUNLICovCisKKy8qIEZ1bmN0aW9uIHBvaW50ZXIgZm9yIHRoZSBjaGVja3N1bSBpbXBsZW1l bnRhdGlvbiAqLworc3RhdGljIHVpbnQzMiAoKnBnX2NoZWNrc3VtX2Jsb2NrX2ltcGwpIChjb25z dCBQR0NoZWNrc3VtbWFibGVQYWdlICpwYWdlKSA9IE5VTEw7CisKKy8qCisgKiBJbml0aWFsaXpl IHRoZSBjaGVja3N1bSBpbXBsZW1lbnRhdGlvbiBiYXNlZCBvbiBhdmFpbGFibGUgQ1BVIGZlYXR1 cmVzLgorICovCitzdGF0aWMgdm9pZAorcGdfY2hlY2tzdW1faW5pdCh2b2lkKQoreworCWlmIChw Z19jaGVja3N1bV9ibG9ja19pbXBsICE9IE5VTEwpCisJCXJldHVybjsJCQkJCS8qIGFscmVhZHkg aW5pdGlhbGl6ZWQgKi8KKworI2lmZGVmIFVTRV9BVlgyX1dJVEhfUlVOVElNRV9DSEVDSworCWlm IChhdngyX2F2YWlsYWJsZSgpKQorCQlwZ19jaGVja3N1bV9ibG9ja19pbXBsID0gcGdfY2hlY2tz dW1fYmxvY2tfYXZ4MjsKKwllbHNlCisjZW5kaWYKKwkJcGdfY2hlY2tzdW1fYmxvY2tfaW1wbCA9 IHBnX2NoZWNrc3VtX2Jsb2NrOworfQorCisvKgorICogQ2hvb3NlIHRoZSBiZXN0IGF2YWlsYWJs ZSBjaGVja3N1bSBpbXBsZW1lbnRhdGlvbi4KKyAqIFRoaXMgZm9sbG93cyB0aGUgbmFtaW5nIHBh dHRlcm4gb2YgcGdfY3JjMzJjX2Nob29zZS4KKyAqLwordWludDMyCitwZ19jaGVja3N1bV9ibG9j a19jaG9vc2UoY29uc3QgY2hhciAqZGF0YSkKK3sKKwljb25zdCBQR0NoZWNrc3VtbWFibGVQYWdl ICpwYWdlID0gKGNvbnN0IFBHQ2hlY2tzdW1tYWJsZVBhZ2UgKikgZGF0YTsKKworCS8qIEluaXRp YWxpemUgdGhlIGltcGxlbWVudGF0aW9uIGlmIG5vdCBkb25lIGFscmVhZHkgKi8KKwlpZiAocGdf Y2hlY2tzdW1fYmxvY2tfaW1wbCA9PSBOVUxMKQorCQlwZ19jaGVja3N1bV9pbml0KCk7CisKKwly ZXR1cm4gcGdfY2hlY2tzdW1fYmxvY2tfaW1wbChwYWdlKTsKK30KKworLyoKKyAqIENvbXB1dGUg dGhlIGNoZWNrc3VtIGZvciBhIFBvc3RncmVzIHBhZ2UuCisgKgorICogVGhlIHBhZ2UgbXVzdCBi ZSBhZGVxdWF0ZWx5IGFsaWduZWQgKGF0IGxlYXN0IG9uIGEgNC1ieXRlIGJvdW5kYXJ5KS4KKyAq IEJld2FyZSBhbHNvIHRoYXQgdGhlIGNoZWNrc3VtIGZpZWxkIG9mIHRoZSBwYWdlIGlzIHRyYW5z aWVudGx5IHplcm9lZC4KKyAqCisgKiBUaGUgY2hlY2tzdW0gaW5jbHVkZXMgdGhlIGJsb2NrIG51 bWJlciAodG8gZGV0ZWN0IHRoZSBjYXNlIHdoZXJlIGEgcGFnZSBpcworICogc29tZWhvdyBtb3Zl ZCB0byBhIGRpZmZlcmVudCBsb2NhdGlvbiksIHRoZSBwYWdlIGhlYWRlciAoZXhjbHVkaW5nIHRo ZQorICogY2hlY2tzdW0gaXRzZWxmKSwgYW5kIHRoZSBwYWdlIGRhdGEuCisgKi8KK3VpbnQxNgor cGdfY2hlY2tzdW1fcGFnZShjaGFyICpwYWdlLCBCbG9ja051bWJlciBibGtubykKK3sKKwlQR0No ZWNrc3VtbWFibGVQYWdlICpjcGFnZSA9IChQR0NoZWNrc3VtbWFibGVQYWdlICopIHBhZ2U7CisJ dWludDE2CQlzYXZlX2NoZWNrc3VtOworCXVpbnQzMgkJY2hlY2tzdW07CisKKwkvKiBXZSBvbmx5 IGNhbGN1bGF0ZSB0aGUgY2hlY2tzdW0gZm9yIHByb3Blcmx5LWluaXRpYWxpemVkIHBhZ2VzICov CisJQXNzZXJ0KCFQYWdlSXNOZXcoKFBhZ2UpIHBhZ2UpKTsKKworCS8qCisJICogU2F2ZSBwZF9j aGVja3N1bSBhbmQgdGVtcG9yYXJpbHkgc2V0IGl0IHRvIHplcm8sIHNvIHRoYXQgdGhlIGNoZWNr c3VtCisJICogY2FsY3VsYXRpb24gaXNuJ3QgYWZmZWN0ZWQgYnkgdGhlIG9sZCBjaGVja3N1bSBz dG9yZWQgb24gdGhlIHBhZ2UuCisJICogUmVzdG9yZSBpdCBhZnRlciwgYmVjYXVzZSBhY3R1YWxs eSB1cGRhdGluZyB0aGUgY2hlY2tzdW0gaXMgTk9UIHBhcnQKKwkgKiBvZiB0aGUgQVBJIG9mIHRo aXMgZnVuY3Rpb24uCisJICovCisJc2F2ZV9jaGVja3N1bSA9IGNwYWdlLT5waGRyLnBkX2NoZWNr c3VtOworCWNwYWdlLT5waGRyLnBkX2NoZWNrc3VtID0gMDsKKwljaGVja3N1bSA9IHBnX2NoZWNr c3VtX2Jsb2NrX2Nob29zZSgoY29uc3QgY2hhciAqKSBjcGFnZSk7CisJY3BhZ2UtPnBoZHIucGRf Y2hlY2tzdW0gPSBzYXZlX2NoZWNrc3VtOworCisJLyogTWl4IGluIHRoZSBibG9jayBudW1iZXIg dG8gZGV0ZWN0IHRyYW5zcG9zZWQgcGFnZXMgKi8KKwljaGVja3N1bSBePSBibGtubzsKKworCS8q CisJICogUmVkdWNlIHRvIGEgdWludDE2ICh0byBmaXQgaW4gdGhlIHBkX2NoZWNrc3VtIGZpZWxk KSB3aXRoIGFuIG9mZnNldCBvZgorCSAqIG9uZS4gVGhhdCBhdm9pZHMgY2hlY2tzdW1zIG9mIHpl cm8sIHdoaWNoIHNlZW1zIGxpa2UgYSBnb29kIGlkZWEuCisJICovCisJcmV0dXJuICh1aW50MTYp ICgoY2hlY2tzdW0gJSA2NTUzNSkgKyAxKTsKK30KLS0gCjIuNDMuMAoK --00000000000052880f0642e19bda Content-Type: application/octet-stream; name="v9-0003-Benchmark-code-for-postgres-checksums.patch" Content-Disposition: attachment; filename="v9-0003-Benchmark-code-for-postgres-checksums.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mhmngvm02 RnJvbSBkZGYzNzg3NGUyYjgyODQ5ZGI2M2YyMzc5ZWRjNmI1YmE1NGUyNjY1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXcgS2ltIDxhbmRyZXcua2ltQGludGVsLmNvbT4KRGF0 ZTogV2VkLCA1IE5vdiAyMDI1IDE0OjM3OjI5IC0wODAwClN1YmplY3Q6IFtQQVRDSCAzLzNdIEJl bmNobWFyayBjb2RlIGZvciBwb3N0Z3JlcyBjaGVja3N1bXMKCkFkZCBwZ19jaGVja3N1bV9iZW5j aCBleHRlbnNpb24gZm9yIHBlcmZvcm1hbmNlIHRlc3Rpbmcgb2YgY2hlY2tzdW0KaW1wbGVtZW50 YXRpb25zIHdpdGggQVZYMiBvcHRpbWl6YXRpb24uCgpLZXkgZmVhdHVyZXM6Ci0gUG9zdGdyZVNR TCBleHRlbnNpb24gZm9yIGJlbmNobWFya2luZyBjaGVja3N1bSBwZXJmb3JtYW5jZQotIFRlc3Rz IHBnX2NoZWNrc3VtX2Jsb2NrX2Nob29zZSgpIHdpdGggcnVudGltZSBBVlgyIGRpc3BhdGNoCi0t LQogY29udHJpYi9tZXNvbi5idWlsZCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDEgKwog Y29udHJpYi9wZ19jaGVja3N1bV9iZW5jaC9tZXNvbi5idWlsZCAgICAgICAgIHwgMjMgKysrKysr KysrKwogLi4uL3BnX2NoZWNrc3VtX2JlbmNoLS0xLjAuc3FsICAgICAgICAgICAgICAgIHwgIDgg KysrKwogY29udHJpYi9wZ19jaGVja3N1bV9iZW5jaC9wZ19jaGVja3N1bV9iZW5jaC5jIHwgNDIg KysrKysrKysrKysrKysrKysrKwogLi4uL3BnX2NoZWNrc3VtX2JlbmNoLmNvbnRyb2wgICAgICAg ICAgICAgICAgIHwgIDQgKysKIC4uLi9zcWwvcGdfY2hlY2tzdW1fYmVuY2guc3FsICAgICAgICAg ICAgICAgICB8IDE3ICsrKysrKysrCiA2IGZpbGVzIGNoYW5nZWQsIDk1IGluc2VydGlvbnMoKykK IGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX2NoZWNrc3VtX2JlbmNoL21lc29uLmJ1aWxk CiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19jaGVja3N1bV9iZW5jaC9wZ19jaGVja3N1 bV9iZW5jaC0tMS4wLnNxbAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfY2hlY2tzdW1f YmVuY2gvcGdfY2hlY2tzdW1fYmVuY2guYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdf Y2hlY2tzdW1fYmVuY2gvcGdfY2hlY2tzdW1fYmVuY2guY29udHJvbAogY3JlYXRlIG1vZGUgMTAw NjQ0IGNvbnRyaWIvcGdfY2hlY2tzdW1fYmVuY2gvc3FsL3BnX2NoZWNrc3VtX2JlbmNoLnNxbAoK ZGlmZiAtLWdpdCBhL2NvbnRyaWIvbWVzb24uYnVpbGQgYi9jb250cmliL21lc29uLmJ1aWxkCmlu ZGV4IGVkMzBlZTdkNjM5Li5mZTUxNDlhYWRmZiAxMDA2NDQKLS0tIGEvY29udHJpYi9tZXNvbi5i dWlsZAorKysgYi9jb250cmliL21lc29uLmJ1aWxkCkBAIC0xMiw2ICsxMiw3IEBAIGNvbnRyaWJf ZG9jX2FyZ3MgPSB7CiAgICdpbnN0YWxsX2Rpcic6IGNvbnRyaWJfZG9jX2RpciwKIH0KIAorc3Vi ZGlyKCdwZ19jaGVja3N1bV9iZW5jaCcpCiBzdWJkaXIoJ2FtY2hlY2snKQogc3ViZGlyKCdhdXRo X2RlbGF5JykKIHN1YmRpcignYXV0b19leHBsYWluJykKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdf Y2hlY2tzdW1fYmVuY2gvbWVzb24uYnVpbGQgYi9jb250cmliL3BnX2NoZWNrc3VtX2JlbmNoL21l c29uLmJ1aWxkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4zMmNjZDll ZmEwZgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfY2hlY2tzdW1fYmVuY2gvbWVzb24u YnVpbGQKQEAgLTAsMCArMSwyMyBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMjItMjAyNSwgUG9zdGdy ZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKworcGdfY2hlY2tzdW1fYmVuY2hfc291cmNl cyA9IGZpbGVzKAorICAncGdfY2hlY2tzdW1fYmVuY2guYycsCispCisKK2lmIGhvc3Rfc3lzdGVt ID09ICd3aW5kb3dzJworICBwZ19jaGVja3N1bV9iZW5jaF9zb3VyY2VzICs9IHJjX2xpYl9nZW4u cHJvY2Vzcyh3aW4zMnZlcl9yYywgZXh0cmFfYXJnczogWworICAgICctLU5BTUUnLCAncGdfY2hl Y2tzdW1fYmVuY2gnLAorICAgICctLUZJTEVERVNDJywgJ3BnX2NoZWNrc3VtX2JlbmNoJyxdKQor ZW5kaWYKKworcGdfY2hlY2tzdW1fYmVuY2ggPSBzaGFyZWRfbW9kdWxlKCdwZ19jaGVja3N1bV9i ZW5jaCcsCisgIHBnX2NoZWNrc3VtX2JlbmNoX3NvdXJjZXMsCisgIGt3YXJnczogY29udHJpYl9t b2RfYXJncywKKykKK2NvbnRyaWJfdGFyZ2V0cyArPSBwZ19jaGVja3N1bV9iZW5jaAorCitpbnN0 YWxsX2RhdGEoCisgICdwZ19jaGVja3N1bV9iZW5jaC0tMS4wLnNxbCcsCisgICdwZ19jaGVja3N1 bV9iZW5jaC5jb250cm9sJywKKyAga3dhcmdzOiBjb250cmliX2RhdGFfYXJncywKKykKZGlmZiAt LWdpdCBhL2NvbnRyaWIvcGdfY2hlY2tzdW1fYmVuY2gvcGdfY2hlY2tzdW1fYmVuY2gtLTEuMC5z cWwgYi9jb250cmliL3BnX2NoZWNrc3VtX2JlbmNoL3BnX2NoZWNrc3VtX2JlbmNoLS0xLjAuc3Fs Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41ZjEzY2JlM2M1ZQotLS0g L2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfY2hlY2tzdW1fYmVuY2gvcGdfY2hlY2tzdW1fYmVu Y2gtLTEuMC5zcWwKQEAgLTAsMCArMSw4IEBACisvKiBjb250cmliL3BnX2NoZWNrc3VtX2JlbmNo L3BnX2NoZWNrc3VtX2JlbmNoLS0xLjAuc3FsICovCisKKy0tIGNvbXBsYWluIGlmIHNjcmlwdCBp cyBzb3VyY2VkIGluIHBzcWwsIHJhdGhlciB0aGFuIHZpYSBDUkVBVEUgRVhURU5TSU9OCistLSBc ZWNobyBVc2UgIkNSRUFURSBFWFRFTlNJT04gcGdfY2hlY2tzdW1fYmVuY2giIHRvIGxvYWQgdGhp cyBmaWxlLiBccXVpdAorCitDUkVBVEUgRlVOQ1RJT04gZHJpdmVfcGdfY2hlY2tzdW0ocGFnZV9j b3VudCBpbnQpCisJUkVUVVJOUyBwZ19jYXRhbG9nLnZvaWQKKwlBUyAnTU9EVUxFX1BBVEhOQU1F JyBMQU5HVUFHRSBDOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19jaGVja3N1bV9iZW5jaC9wZ19j aGVja3N1bV9iZW5jaC5jIGIvY29udHJpYi9wZ19jaGVja3N1bV9iZW5jaC9wZ19jaGVja3N1bV9i ZW5jaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kYzIwMzk1YTU5 MAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfY2hlY2tzdW1fYmVuY2gvcGdfY2hlY2tz dW1fYmVuY2guYwpAQCAtMCwwICsxLDQyIEBACisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKyNpbmNs dWRlICJmbWdyLmgiCisjaW5jbHVkZSAicG9ydC9jaGVja3N1bS5oIgorI2luY2x1ZGUgInBvcnQv Y2hlY2tzdW1faW1wbC5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxhc3NlcnQu aD4KKworUEdfTU9EVUxFX01BR0lDOworCisjZGVmaW5lIFJFUEVBVFMgMTAwMDAwMAorCitQR19G VU5DVElPTl9JTkZPX1YxKGRyaXZlX3BnX2NoZWNrc3VtKTsKK0RhdHVtCitkcml2ZV9wZ19jaGVj a3N1bShQR19GVU5DVElPTl9BUkdTKQoreworCWludAkJCXBhZ2VfY291bnQgPSBQR19HRVRBUkdf SU5UMzIoMCk7CisJUEdDaGVja3N1bW1hYmxlUGFnZSAqcGFnZXM7CisJaW50CQkJaTsKKwlzaXpl X3QJCWo7CisKKwlwYWdlcyA9IHBhbGxvYyhwYWdlX2NvdW50ICogc2l6ZW9mKFBHQ2hlY2tzdW1t YWJsZVBhZ2UpKTsKKwlzcmFuZCgwKTsKKwlmb3IgKGogPSAwOyBqIDwgcGFnZV9jb3VudCAqIHNp emVvZihQR0NoZWNrc3VtbWFibGVQYWdlKTsgaisrKQorCXsKKwkJY2hhcgkgICAqYnl0ZV9wdHIg PSAoY2hhciAqKSBwYWdlczsKKworCQlieXRlX3B0cltqXSA9IHJhbmQoKSAlIDI1NjsKKwl9CisK Kwlmb3IgKGkgPSAwOyBpIDwgUkVQRUFUUzsgaSsrKQorCXsKKwkJY29uc3QgUEdDaGVja3N1bW1h YmxlUGFnZSAqdGVzdF9wYWdlID0gcGFnZXMgKyAoaSAlIHBhZ2VfY291bnQpOworCQl2b2xhdGls ZSB1aW50MzIgcmVzdWx0ID0gcGdfY2hlY2tzdW1fYmxvY2tfY2hvb3NlKChjb25zdCBjaGFyICop IHRlc3RfcGFnZSk7CisKKwkJKHZvaWQpIHJlc3VsdDsKKwl9CisKKwlwZnJlZSgodm9pZCAqKSBw YWdlcyk7CisKKwlQR19SRVRVUk5fVk9JRCgpOworfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19j aGVja3N1bV9iZW5jaC9wZ19jaGVja3N1bV9iZW5jaC5jb250cm9sIGIvY29udHJpYi9wZ19jaGVj a3N1bV9iZW5jaC9wZ19jaGVja3N1bV9iZW5jaC5jb250cm9sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwLi40YTRlMmM5MzYzYwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRy aWIvcGdfY2hlY2tzdW1fYmVuY2gvcGdfY2hlY2tzdW1fYmVuY2guY29udHJvbApAQCAtMCwwICsx LDQgQEAKK2NvbW1lbnQgPSAncGdfY2hlY2tzdW0gYmVuY2htYXJrJworZGVmYXVsdF92ZXJzaW9u ID0gJzEuMCcKK21vZHVsZV9wYXRobmFtZSA9ICckbGliZGlyL3BnX2NoZWNrc3VtX2JlbmNoJwor cmVsb2NhdGFibGUgPSB0cnVlCmRpZmYgLS1naXQgYS9jb250cmliL3BnX2NoZWNrc3VtX2JlbmNo L3NxbC9wZ19jaGVja3N1bV9iZW5jaC5zcWwgYi9jb250cmliL3BnX2NoZWNrc3VtX2JlbmNoL3Nx bC9wZ19jaGVja3N1bV9iZW5jaC5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMDAuLjRiMzQ3Njk5OTUzCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19jaGVja3N1 bV9iZW5jaC9zcWwvcGdfY2hlY2tzdW1fYmVuY2guc3FsCkBAIC0wLDAgKzEsMTcgQEAKK0NSRUFU RSBFWFRFTlNJT04gcGdfY2hlY2tzdW1fYmVuY2g7CisKK1NFTEVDVCBkcml2ZV9wZ19jaGVja3N1 bSgtMSk7CisKK1x0aW1pbmcgb24KKworU0VMRUNUIGRyaXZlX3BnX2NoZWNrc3VtKDEpOworU0VM RUNUIGRyaXZlX3BnX2NoZWNrc3VtKDIpOworU0VMRUNUIGRyaXZlX3BnX2NoZWNrc3VtKDQpOwor U0VMRUNUIGRyaXZlX3BnX2NoZWNrc3VtKDgpOworU0VMRUNUIGRyaXZlX3BnX2NoZWNrc3VtKDE2 KTsKK1NFTEVDVCBkcml2ZV9wZ19jaGVja3N1bSgzMik7CitTRUxFQ1QgZHJpdmVfcGdfY2hlY2tz dW0oNjQpOworU0VMRUNUIGRyaXZlX3BnX2NoZWNrc3VtKDEyOCk7CitTRUxFQ1QgZHJpdmVfcGdf Y2hlY2tzdW0oMjU2KTsKK1NFTEVDVCBkcml2ZV9wZ19jaGVja3N1bSg1MTIpOworU0VMRUNUIGRy aXZlX3BnX2NoZWNrc3VtKDEwMjQpOwotLSAKMi40My4wCgo= --00000000000052880f0642e19bda--