Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1qJEdj-0004DK-Rg for pgsql-hackers@arkaria.postgresql.org; Tue, 11 Jul 2023 14:46:56 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1qJEdh-0004ob-VM for pgsql-hackers@arkaria.postgresql.org; Tue, 11 Jul 2023 14:46:53 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1qJEdh-0004oS-6t for pgsql-hackers@lists.postgresql.org; Tue, 11 Jul 2023 14:46:53 +0000 Received: from mail-ot1-x333.google.com ([2607:f8b0:4864:20::333]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1qJEdZ-003HSP-Sx for pgsql-hackers@postgresql.org; Tue, 11 Jul 2023 14:46:51 +0000 Received: by mail-ot1-x333.google.com with SMTP id 46e09a7af769-6b74faaac3bso4595130a34.1 for ; Tue, 11 Jul 2023 07:46:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=neon-tech.20221208.gappssmtp.com; s=20221208; t=1689086805; x=1691678805; h=in-reply-to:references:message-id:from:to:subject:cc:date :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=NDqfT9B4CQAPpDru4eL2H49XSY1Flx9W5dqBvfaknSQ=; b=TsqNn9UEREZj6FA6vIsy+FIjDeXQHhEtzi6Vq4lR9g5KYpUbNSx0d4/rzAU1lF5gVP 0wZ/yAh7R5yfwbshuN3bwW7FlncCdsPKJWDP5LuNpLYMxZ8j63y6ys7QENS+HuU4JPt4 Toqw4As9Yvt48qBQizGCoR9zpRh3kNDKjGjc+mZtVvj242gCaUIx/ksi7wsgZCNyJ8vj mHv1O/CSQSMdwmXHzMOoKF0u/lKbP+fbR0f82k242y7/BbB7RH8VkJPQAVSTzLSi4gnT +YJgJIuoRvvvD5ELZXiypHSHCLQNfTZjqFxGQcphjaIp9Z5NF+NS0z5A/FtzU1aykey6 0SZA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1689086805; x=1691678805; h=in-reply-to:references:message-id:from:to:subject:cc:date :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=NDqfT9B4CQAPpDru4eL2H49XSY1Flx9W5dqBvfaknSQ=; b=JAhbDRQphWkUaTR7K3KbG6LxSFEk0qdlDw1sTkQwlEc6uJ7Fs+uxb2Oc+MHYBHWI9O ZlbuBDs9SjiYhImaGyJpF4GAOZ7Zv/IGSw/y0jb4HW5CH42L6oLKuOhnUbW6Xn/MqMI7 3zXQDU+tBgaq0CjS3ujq1AVqauE4Ys3PAbpNImyqfiU4K5op3Ex4oXowKgzh12wyE287 LUqmaiiVSlg3+czLPqe0nDEqRBpjGW6Gk548c5LYbWsNbipYx3LMbGVupCFR6p4NeGVB IbhHkdJnpAs9qjycwpXT+b37vf76JqGYEMzniqTGyB8p0ioAWfbD7ByoP1XDs2/F4SSP PYRQ== X-Gm-Message-State: ABy/qLYVlLA4/g/8YRI27VFVMroes5xngUP+dD2lTjWDBl3F88t0mCso RLjOV0kj8Q1BKRru0pGGSq7O6q5ObXK4556s6P8vmA== X-Google-Smtp-Source: APBJJlHtLj1f2syPj7RXRqaz9LAXjvLTVJiz+vQZ1w5cWdsxFh+8xPB0+qmNcgSLHcWFGvksWzGiiA== X-Received: by 2002:a05:6870:d626:b0:1b7:628f:926f with SMTP id a38-20020a056870d62600b001b7628f926fmr691553oaq.23.1689086805044; Tue, 11 Jul 2023 07:46:45 -0700 (PDT) Received: from localhost ([2607:fb90:f280:130d:3996:e070:71ee:42fb]) by smtp.gmail.com with ESMTPSA id ed41-20020a056870b7a900b001b015338d52sm1085909oab.3.2023.07.11.07.46.44 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 11 Jul 2023 07:46:44 -0700 (PDT) Content-Type: multipart/mixed; boundary=dde7a53e89f7dd10b3217a8a997ca28e61c5d5fe2a31d020333d7c0dcfed Mime-Version: 1.0 Date: Tue, 11 Jul 2023 09:46:43 -0500 Cc: Subject: Re: Use COPY for populating all pgbench tables To: "Michael Paquier" From: "Tristan Partin" Message-Id: X-Mailer: aerc 0.15.2-84-g9a3ccd9a95db References: In-Reply-To: List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --dde7a53e89f7dd10b3217a8a997ca28e61c5d5fe2a31d020333d7c0dcfed Content-Type: multipart/alternative; boundary=ab56c3b1b4dad18a97d8ac361c8e232cab79a7587c68206a8907b68a10e8 --ab56c3b1b4dad18a97d8ac361c8e232cab79a7587c68206a8907b68a10e8 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Content-Type: text/plain; charset=UTF-8 On Tue Jul 11, 2023 at 12:03 AM CDT, Michael Paquier wrote: > On Wed, Jun 14, 2023 at 10:58:06AM -0500, Tristan Partin wrote: > static void > -initGenerateDataClientSide(PGconn *con) > +initBranch(PGconn *con, PQExpBufferData *sql, int64 curr) > +{ > + /* "filler" column defaults to NULL */ > + printfPQExpBuffer(sql, > + INT64_FORMAT "\t0\t\n", > + curr + 1); > +} > + > +static void > +initTeller(PGconn *con, PQExpBufferData *sql, int64 curr) > +{ > + /* "filler" column defaults to NULL */ > + printfPQExpBuffer(sql, > + INT64_FORMAT "\t" INT64_FORMAT = "\t0\t\n", > + curr + 1, curr / ntellers + 1); > +} > + > +static void > +initAccount(PGconn *con, PQExpBufferData *sql, int64 curr) > +{ > + /* "filler" column defaults to blank padded empty string */ > + printfPQExpBuffer(sql, > + INT64_FORMAT "\t" INT64_FORMAT = "\t0\t\n", > + curr + 1, curr / naccounts + 1)= ; > +} > > These routines don't need a PGconn argument, by the way. Nice catch! > /* use COPY with FREEZE on v14 and later without partitioning */ > if (partitions =3D=3D 0 && PQserverVersion(con) >=3D 140000) > - copy_statement =3D "copy pgbench_accounts from stdin with (freeze= on)"; > + copy_statement_fmt =3D "copy %s from stdin with (freeze on)"; > else > - copy_statement =3D "copy pgbench_accounts from stdin"; > + copy_statement_fmt =3D "copy %s from stdin"; > > This seems a bit incorrect because partitioning only applies to > pgbench_accounts, no? This change means that the teller and branch > tables would not benefit from FREEZE under a pgbench compiled with > this patch and a backend version of 14 or newer if --partitions is > used. So, perhaps "partitions" should be an argument of > initPopulateTable() specified for each table?=20 Whoops, looks like I didn't read the comment for what the partitions variable means. It only applies to pgbench_accounts as you said. I don't think passing it in as an argument would make much sense. Let me know what you think about the change in this new version, which only hits the first portion of the `if` statement if the table is pgbench_accounts. --=20 Tristan Partin Neon (https://neon.tech) --ab56c3b1b4dad18a97d8ac361c8e232cab79a7587c68206a8907b68a10e8-- --dde7a53e89f7dd10b3217a8a997ca28e61c5d5fe2a31d020333d7c0dcfed Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v3-0001-Use-COPY-instead-of-INSERT-for-populating-all-tab.patch Content-Type: text/x-patch; charset=utf-8; name=v3-0001-Use-COPY-instead-of-INSERT-for-populating-all-tab.patch RnJvbSBhZjI0MmYzOWFlZmQ0ZDljNzcyNzFhYzg5N2I1M2FhZjE3NjAxZjg1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUcmlzdGFuIFBhcnRpbiA8dHJpc3RhbkBuZW9uLnRlY2g+CkRh dGU6IFR1ZSwgMjMgTWF5IDIwMjMgMTE6NDg6MTYgLTA1MDAKU3ViamVjdDogW1BBVENIIHYzXSBV c2UgQ09QWSBpbnN0ZWFkIG9mIElOU0VSVCBmb3IgcG9wdWxhdGluZyBhbGwgdGFibGVzCgpDT1BZ IGlzIGEgYmV0dGVyIGludGVyZmFjZSBmb3IgYnVsayBsb2FkaW5nIGFuZC9vciBoaWdoIGxhdGVu Y3kKY29ubmVjdGlvbnMuIFByZXZpb3VzbHkgQ09QWSB3YXMgb25seSB1c2VkIGZvciB0aGUgcGdi ZW5jaF9hY2NvdW50cwp0YWJsZSBiZWNhdXNlIHRoZSBhbW91bnQgb2YgZGF0YSB3YXMgc28gbXVj aCBsYXJnZXIgdGhhbiB0aGUgb3RoZXIKdGFibGVzLiBIb3dldmVyLCBhcyBhbHJlYWR5IHNhaWQg dGhlcmUgYXJlIGFsc28gZ2FpbnMgdG8gYmUgaGFkIGluIHRoZQpoaWdoIGxhdGVuY3kgY2FzZSwg c3VjaCBhcyBsb2FkaW5nIGRhdGEgYWNyb3NzIGNvbnRpbmVudHMuCi0tLQogc3JjL2Jpbi9wZ2Jl bmNoL3BnYmVuY2guYyB8IDE1NSArKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0t LQogMSBmaWxlIGNoYW5nZWQsIDkwIGluc2VydGlvbnMoKyksIDY1IGRlbGV0aW9ucygtKQoKZGlm ZiAtLWdpdCBhL3NyYy9iaW4vcGdiZW5jaC9wZ2JlbmNoLmMgYi9zcmMvYmluL3BnYmVuY2gvcGdi ZW5jaC5jCmluZGV4IDMyMGQzNDhhMGYuLmI3N2I2YzM3MDQgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4v cGdiZW5jaC9wZ2JlbmNoLmMKKysrIGIvc3JjL2Jpbi9wZ2JlbmNoL3BnYmVuY2guYwpAQCAtNDg2 OSwxNyArNDg2OSw0NiBAQCBpbml0VHJ1bmNhdGVUYWJsZXMoUEdjb25uICpjb24pCiAJCQkJCSAi cGdiZW5jaF90ZWxsZXJzIik7CiB9CiAKLS8qCi0gKiBGaWxsIHRoZSBzdGFuZGFyZCB0YWJsZXMg d2l0aCBzb21lIGRhdGEgZ2VuZXJhdGVkIGFuZCBzZW50IGZyb20gdGhlIGNsaWVudAotICovCit0 eXBlZGVmIHZvaWQgaW5pdFJvdyhQUUV4cEJ1ZmZlckRhdGEgKnNxbCwgaW50NjQgY3Vycik7CisK IHN0YXRpYyB2b2lkCi1pbml0R2VuZXJhdGVEYXRhQ2xpZW50U2lkZShQR2Nvbm4gKmNvbikKK2lu aXRCcmFuY2goUFFFeHBCdWZmZXJEYXRhICpzcWwsIGludDY0IGN1cnIpCit7CisJLyogImZpbGxl ciIgY29sdW1uIGRlZmF1bHRzIHRvIE5VTEwgKi8KKwlwcmludGZQUUV4cEJ1ZmZlcihzcWwsCisJ CQkJCSAgSU5UNjRfRk9STUFUICJcdDBcdFxuIiwKKwkJCQkJICBjdXJyICsgMSk7Cit9CisKK3N0 YXRpYyB2b2lkCitpbml0VGVsbGVyKFBRRXhwQnVmZmVyRGF0YSAqc3FsLCBpbnQ2NCBjdXJyKQor eworCS8qICJmaWxsZXIiIGNvbHVtbiBkZWZhdWx0cyB0byBOVUxMICovCisJcHJpbnRmUFFFeHBC dWZmZXIoc3FsLAorCQkJCQkgIElOVDY0X0ZPUk1BVCAiXHQiIElOVDY0X0ZPUk1BVCAiXHQwXHRc biIsCisJCQkJCSAgY3VyciArIDEsIGN1cnIgLyBudGVsbGVycyArIDEpOworfQorCitzdGF0aWMg dm9pZAoraW5pdEFjY291bnQoUFFFeHBCdWZmZXJEYXRhICpzcWwsIGludDY0IGN1cnIpCit7CisJ LyogImZpbGxlciIgY29sdW1uIGRlZmF1bHRzIHRvIGJsYW5rIHBhZGRlZCBlbXB0eSBzdHJpbmcg Ki8KKwlwcmludGZQUUV4cEJ1ZmZlcihzcWwsCisJCQkJCSAgSU5UNjRfRk9STUFUICJcdCIgSU5U NjRfRk9STUFUICJcdDBcdFxuIiwKKwkJCQkJICBjdXJyICsgMSwgY3VyciAvIG5hY2NvdW50cyAr IDEpOworfQorCitzdGF0aWMgdm9pZAoraW5pdFBvcHVsYXRlVGFibGUoUEdjb25uICpjb24sIGNv bnN0IGNoYXIgKnRhYmxlLCBpbnQ2NCBiYXNlLCBpbml0Um93ICppbml0X3JvdykKIHsKKwlpbnQJ CQluOworCWludAkJCWs7CisJaW50CQkJY2hhcnMgPSAwOworCVBHcmVzdWx0CSpyZXM7CiAJUFFF eHBCdWZmZXJEYXRhIHNxbDsKLQlQR3Jlc3VsdCAgICpyZXM7Ci0JaW50CQkJaTsKLQlpbnQ2NAkJ azsKLQljaGFyCSAgICpjb3B5X3N0YXRlbWVudDsKKwljaGFyIAkJY29weV9zdGF0ZW1lbnRbMjU2 XTsKKwljb25zdCBjaGFyICpjb3B5X3N0YXRlbWVudF9mbXQ7CisJY29uc3QgaW50NjQgdG90YWwg PSBiYXNlICogc2NhbGU7CiAKIAkvKiB1c2VkIHRvIHRyYWNrIGVsYXBzZWQgdGltZSBhbmQgZXN0 aW1hdGUgb2YgdGhlIHJlbWFpbmluZyB0aW1lICovCiAJcGdfdGltZV91c2VjX3Qgc3RhcnQ7CkBA IC00ODg4LDUwICs0OTE3LDIyIEBAIGluaXRHZW5lcmF0ZURhdGFDbGllbnRTaWRlKFBHY29ubiAq Y29uKQogCS8qIFN0YXkgb24gdGhlIHNhbWUgbGluZSBpZiByZXBvcnRpbmcgdG8gYSB0ZXJtaW5h bCAqLwogCWNoYXIJCWVvbCA9IGlzYXR0eShmaWxlbm8oc3RkZXJyKSkgPyAnXHInIDogJ1xuJzsK IAotCWZwcmludGYoc3RkZXJyLCAiZ2VuZXJhdGluZyBkYXRhIChjbGllbnQtc2lkZSkuLi5cbiIp OwotCi0JLyoKLQkgKiB3ZSBkbyBhbGwgb2YgdGhpcyBpbiBvbmUgdHJhbnNhY3Rpb24gdG8gZW5h YmxlIHRoZSBiYWNrZW5kJ3MKLQkgKiBkYXRhLWxvYWRpbmcgb3B0aW1pemF0aW9ucwotCSAqLwot CWV4ZWN1dGVTdGF0ZW1lbnQoY29uLCAiYmVnaW4iKTsKLQotCS8qIHRydW5jYXRlIGF3YXkgYW55 IG9sZCBkYXRhICovCi0JaW5pdFRydW5jYXRlVGFibGVzKGNvbik7Ci0KIAlpbml0UFFFeHBCdWZm ZXIoJnNxbCk7CiAKIAkvKgotCSAqIGZpbGwgYnJhbmNoZXMsIHRlbGxlcnMsIGFjY291bnRzIGlu IHRoYXQgb3JkZXIgaW4gY2FzZSBmb3JlaWduIGtleXMKLQkgKiBhbHJlYWR5IGV4aXN0CisJICog VXNlIENPUFkgd2l0aCBGUkVFWkUgb24gdjE0IGFuZCBsYXRlciB3aXRob3V0IHBhcnRpdGlvbmlu Zy4gIFJlbWVtYmVyCisJICogdGhhdCBwYXJ0aXRpb25zIG9ubHkgYXBwbGllcyB0byBwZ2JlbmNo X2FjY291bnRzLgogCSAqLwotCWZvciAoaSA9IDA7IGkgPCBuYnJhbmNoZXMgKiBzY2FsZTsgaSsr KQotCXsKLQkJLyogImZpbGxlciIgY29sdW1uIGRlZmF1bHRzIHRvIE5VTEwgKi8KLQkJcHJpbnRm UFFFeHBCdWZmZXIoJnNxbCwKLQkJCQkJCSAgImluc2VydCBpbnRvIHBnYmVuY2hfYnJhbmNoZXMo YmlkLGJiYWxhbmNlKSB2YWx1ZXMoJWQsMCkiLAotCQkJCQkJICBpICsgMSk7Ci0JCWV4ZWN1dGVT dGF0ZW1lbnQoY29uLCBzcWwuZGF0YSk7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IG50ZWxsZXJz ICogc2NhbGU7IGkrKykKLQl7Ci0JCS8qICJmaWxsZXIiIGNvbHVtbiBkZWZhdWx0cyB0byBOVUxM ICovCi0JCXByaW50ZlBRRXhwQnVmZmVyKCZzcWwsCi0JCQkJCQkgICJpbnNlcnQgaW50byBwZ2Jl bmNoX3RlbGxlcnModGlkLGJpZCx0YmFsYW5jZSkgdmFsdWVzICglZCwlZCwwKSIsCi0JCQkJCQkg IGkgKyAxLCBpIC8gbnRlbGxlcnMgKyAxKTsKLQkJZXhlY3V0ZVN0YXRlbWVudChjb24sIHNxbC5k YXRhKTsKLQl9Ci0KLQkvKgotCSAqIGFjY291bnRzIGlzIGJpZyBlbm91Z2ggdG8gYmUgd29ydGgg dXNpbmcgQ09QWSBhbmQgdHJhY2tpbmcgcnVudGltZQotCSAqLwotCi0JLyogdXNlIENPUFkgd2l0 aCBGUkVFWkUgb24gdjE0IGFuZCBsYXRlciB3aXRob3V0IHBhcnRpdGlvbmluZyAqLwotCWlmIChw YXJ0aXRpb25zID09IDAgJiYgUFFzZXJ2ZXJWZXJzaW9uKGNvbikgPj0gMTQwMDAwKQotCQljb3B5 X3N0YXRlbWVudCA9ICJjb3B5IHBnYmVuY2hfYWNjb3VudHMgZnJvbSBzdGRpbiB3aXRoIChmcmVl emUgb24pIjsKKwlpZiAocGFydGl0aW9ucyA9PSAwICYmIHN0cmNtcCh0YWJsZSwgInBnYmVuY2hf YWNjb3VudHMiKSA9PSAwICYmIFBRc2VydmVyVmVyc2lvbihjb24pID49IDE0MDAwMCkKKwkJY29w eV9zdGF0ZW1lbnRfZm10ID0gImNvcHkgJXMgZnJvbSBzdGRpbiB3aXRoIChmcmVlemUgb24pIjsK IAllbHNlCi0JCWNvcHlfc3RhdGVtZW50ID0gImNvcHkgcGdiZW5jaF9hY2NvdW50cyBmcm9tIHN0 ZGluIjsKKwkJY29weV9zdGF0ZW1lbnRfZm10ID0gImNvcHkgJXMgZnJvbSBzdGRpbiI7CisKKwlu ID0gcGdfc25wcmludGYoY29weV9zdGF0ZW1lbnQsIHNpemVvZihjb3B5X3N0YXRlbWVudCksIGNv cHlfc3RhdGVtZW50X2ZtdCwgdGFibGUpOworCWlmIChuID49IHNpemVvZihjb3B5X3N0YXRlbWVu dCkpCisJCXBnX2ZhdGFsKCJpbnZhbGlkIGJ1ZmZlciBzaXplOiBtdXN0IGJlIGF0IGxlYXN0ICVk IGNoYXJhY3RlcnMgbG9uZyIsIG4pOworCWVsc2UgaWYgKG4gPT0gLTEpCisJCXBnX2ZhdGFsKCJp bnZhbGlkIGZvcm1hdCBzdHJpbmciKTsKIAogCXJlcyA9IFBRZXhlYyhjb24sIGNvcHlfc3RhdGVt ZW50KTsKIApAQCAtNDk0MSwxNCArNDk0MiwxMSBAQCBpbml0R2VuZXJhdGVEYXRhQ2xpZW50U2lk ZShQR2Nvbm4gKmNvbikKIAogCXN0YXJ0ID0gcGdfdGltZV9ub3coKTsKIAotCWZvciAoayA9IDA7 IGsgPCAoaW50NjQpIG5hY2NvdW50cyAqIHNjYWxlOyBrKyspCisJZm9yIChrID0gMDsgayA8IHRv dGFsOyBrKyspCiAJewotCQlpbnQ2NAkJaiA9IGsgKyAxOworCQljb25zdCBpbnQ2NAkJaiA9IGsg KyAxOwogCi0JCS8qICJmaWxsZXIiIGNvbHVtbiBkZWZhdWx0cyB0byBibGFuayBwYWRkZWQgZW1w dHkgc3RyaW5nICovCi0JCXByaW50ZlBRRXhwQnVmZmVyKCZzcWwsCi0JCQkJCQkgIElOVDY0X0ZP Uk1BVCAiXHQiIElOVDY0X0ZPUk1BVCAiXHQwXHRcbiIsCi0JCQkJCQkgIGosIGsgLyBuYWNjb3Vu dHMgKyAxKTsKKwkJaW5pdF9yb3coJnNxbCwgayk7CiAJCWlmIChQUXB1dGxpbmUoY29uLCBzcWwu ZGF0YSkpCiAJCQlwZ19mYXRhbCgiUFFwdXRsaW5lIGZhaWxlZCIpOwogCkBAIC00OTYyLDI1ICs0 OTYwLDI2IEBAIGluaXRHZW5lcmF0ZURhdGFDbGllbnRTaWRlKFBHY29ubiAqY29uKQogCQlpZiAo KCF1c2VfcXVpZXQpICYmIChqICUgMTAwMDAwID09IDApKQogCQl7CiAJCQlkb3VibGUJCWVsYXBz ZWRfc2VjID0gUEdfVElNRV9HRVRfRE9VQkxFKHBnX3RpbWVfbm93KCkgLSBzdGFydCk7Ci0JCQlk b3VibGUJCXJlbWFpbmluZ19zZWMgPSAoKGRvdWJsZSkgc2NhbGUgKiBuYWNjb3VudHMgLSBqKSAq IGVsYXBzZWRfc2VjIC8gajsKKwkJCWRvdWJsZQkJcmVtYWluaW5nX3NlYyA9ICgoZG91YmxlKSB0 b3RhbCAtIGopICogZWxhcHNlZF9zZWMgLyBqOwogCi0JCQlmcHJpbnRmKHN0ZGVyciwgSU5UNjRf Rk9STUFUICIgb2YgIiBJTlQ2NF9GT1JNQVQgIiB0dXBsZXMgKCVkJSUpIGRvbmUgKGVsYXBzZWQg JS4yZiBzLCByZW1haW5pbmcgJS4yZiBzKSVjIiwKLQkJCQkJaiwgKGludDY0KSBuYWNjb3VudHMg KiBzY2FsZSwKLQkJCQkJKGludCkgKCgoaW50NjQpIGogKiAxMDApIC8gKG5hY2NvdW50cyAqIChp bnQ2NCkgc2NhbGUpKSwKLQkJCQkJZWxhcHNlZF9zZWMsIHJlbWFpbmluZ19zZWMsIGVvbCk7CisJ CQljaGFycyA9IGZwcmludGYoc3RkZXJyLCBJTlQ2NF9GT1JNQVQgIiBvZiAiIElOVDY0X0ZPUk1B VCAiIHR1cGxlcyAoJWQlJSkgb2YgJXMgZG9uZSAoZWxhcHNlZCAlLjJmIHMsIHJlbWFpbmluZyAl LjJmIHMpJWMiLAorCQkJCQlqLCB0b3RhbCwKKwkJCQkJKGludCkgKChqICogMTAwKSAvIHRvdGFs KSwKKwkJCQkJdGFibGUsIGVsYXBzZWRfc2VjLCByZW1haW5pbmdfc2VjLCBlb2wpOwogCQl9CiAJ CS8qIGxldCdzIG5vdCBjYWxsIHRoZSB0aW1pbmcgZm9yIGVhY2ggcm93LCBidXQgb25seSBlYWNo IDEwMCByb3dzICovCiAJCWVsc2UgaWYgKHVzZV9xdWlldCAmJiAoaiAlIDEwMCA9PSAwKSkKIAkJ ewogCQkJZG91YmxlCQllbGFwc2VkX3NlYyA9IFBHX1RJTUVfR0VUX0RPVUJMRShwZ190aW1lX25v dygpIC0gc3RhcnQpOwotCQkJZG91YmxlCQlyZW1haW5pbmdfc2VjID0gKChkb3VibGUpIHNjYWxl ICogbmFjY291bnRzIC0gaikgKiBlbGFwc2VkX3NlYyAvIGo7CisJCQlkb3VibGUJCXJlbWFpbmlu Z19zZWMgPSAoKGRvdWJsZSkgdG90YWwgLSBqKSAqIGVsYXBzZWRfc2VjIC8gajsKIAogCQkJLyog aGF2ZSB3ZSByZWFjaGVkIHRoZSBuZXh0IGludGVydmFsIChvciBlbmQpPyAqLwotCQkJaWYgKChq ID09IHNjYWxlICogbmFjY291bnRzKSB8fCAoZWxhcHNlZF9zZWMgPj0gbG9nX2ludGVydmFsICog TE9HX1NURVBfU0VDT05EUykpCisJCQlpZiAoKGogPT0gdG90YWwpIHx8IChlbGFwc2VkX3NlYyA+ PSBsb2dfaW50ZXJ2YWwgKiBMT0dfU1RFUF9TRUNPTkRTKSkKIAkJCXsKLQkJCQlmcHJpbnRmKHN0 ZGVyciwgSU5UNjRfRk9STUFUICIgb2YgIiBJTlQ2NF9GT1JNQVQgIiB0dXBsZXMgKCVkJSUpIGRv bmUgKGVsYXBzZWQgJS4yZiBzLCByZW1haW5pbmcgJS4yZiBzKSVjIiwKLQkJCQkJCWosIChpbnQ2 NCkgbmFjY291bnRzICogc2NhbGUsCi0JCQkJCQkoaW50KSAoKChpbnQ2NCkgaiAqIDEwMCkgLyAo bmFjY291bnRzICogKGludDY0KSBzY2FsZSkpLCBlbGFwc2VkX3NlYywgcmVtYWluaW5nX3NlYywg ZW9sKTsKKwkJCQljaGFycyA9IGZwcmludGYoc3RkZXJyLCBJTlQ2NF9GT1JNQVQgIiBvZiAiIElO VDY0X0ZPUk1BVCAiIHR1cGxlcyAoJWQlJSkgb2YgJXMgZG9uZSAoZWxhcHNlZCAlLjJmIHMsIHJl bWFpbmluZyAlLjJmIHMpJWMiLAorCQkJCQkJaiwgdG90YWwsCisJCQkJCQkoaW50KSAoKGogKiAx MDApIC8gdG90YWwpLAorCQkJCQkJdGFibGUsIGVsYXBzZWRfc2VjLCByZW1haW5pbmdfc2VjLCBl b2wpOwogCiAJCQkJLyogc2tpcCB0byB0aGUgbmV4dCBpbnRlcnZhbCAqLwogCQkJCWxvZ19pbnRl cnZhbCA9IChpbnQpIGNlaWwoZWxhcHNlZF9zZWMgLyBMT0dfU1RFUF9TRUNPTkRTKTsKQEAgLTQ5 ODgsOCArNDk4Nyw4IEBAIGluaXRHZW5lcmF0ZURhdGFDbGllbnRTaWRlKFBHY29ubiAqY29uKQog CQl9CiAJfQogCi0JaWYgKGVvbCAhPSAnXG4nKQotCQlmcHV0YygnXG4nLCBzdGRlcnIpOwkvKiBO ZWVkIHRvIG1vdmUgdG8gbmV4dCBsaW5lICovCisJaWYgKGNoYXJzICE9IDAgJiYgZW9sICE9ICdc bicpCisJCWZwcmludGYoc3RkZXJyLCAiJSpjXHIiLCBjaGFycyAtIDEsICcgJyk7IC8qIENsZWFy IHRoZSBjdXJyZW50IGxpbmUgKi8KIAogCWlmIChQUXB1dGxpbmUoY29uLCAiXFwuXG4iKSkKIAkJ cGdfZmF0YWwoInZlcnkgbGFzdCBQUXB1dGxpbmUgZmFpbGVkIik7CkBAIC00OTk3LDYgKzQ5OTYs MzIgQEAgaW5pdEdlbmVyYXRlRGF0YUNsaWVudFNpZGUoUEdjb25uICpjb24pCiAJCXBnX2ZhdGFs KCJQUWVuZGNvcHkgZmFpbGVkIik7CiAKIAl0ZXJtUFFFeHBCdWZmZXIoJnNxbCk7Cit9CisKKy8q CisgKiBGaWxsIHRoZSBzdGFuZGFyZCB0YWJsZXMgd2l0aCBzb21lIGRhdGEgZ2VuZXJhdGVkIGFu ZCBzZW50IGZyb20gdGhlIGNsaWVudAorICovCitzdGF0aWMgdm9pZAoraW5pdEdlbmVyYXRlRGF0 YUNsaWVudFNpZGUoUEdjb25uICpjb24pCit7CisJZnByaW50ZihzdGRlcnIsICJnZW5lcmF0aW5n IGRhdGEgKGNsaWVudC1zaWRlKS4uLlxuIik7CisKKwkvKgorCSAqIHdlIGRvIGFsbCBvZiB0aGlz IGluIG9uZSB0cmFuc2FjdGlvbiB0byBlbmFibGUgdGhlIGJhY2tlbmQncworCSAqIGRhdGEtbG9h ZGluZyBvcHRpbWl6YXRpb25zCisJICovCisJZXhlY3V0ZVN0YXRlbWVudChjb24sICJiZWdpbiIp OworCisJLyogdHJ1bmNhdGUgYXdheSBhbnkgb2xkIGRhdGEgKi8KKwlpbml0VHJ1bmNhdGVUYWJs ZXMoY29uKTsKKworCS8qCisJICogZmlsbCBicmFuY2hlcywgdGVsbGVycywgYWNjb3VudHMgaW4g dGhhdCBvcmRlciBpbiBjYXNlIGZvcmVpZ24ga2V5cworCSAqIGFscmVhZHkgZXhpc3QKKwkgKi8K Kwlpbml0UG9wdWxhdGVUYWJsZShjb24sICJwZ2JlbmNoX2JyYW5jaGVzIiwgbmJyYW5jaGVzLCBp bml0QnJhbmNoKTsKKwlpbml0UG9wdWxhdGVUYWJsZShjb24sICJwZ2JlbmNoX3RlbGxlcnMiLCBu dGVsbGVycywgaW5pdFRlbGxlcik7CisJaW5pdFBvcHVsYXRlVGFibGUoY29uLCAicGdiZW5jaF9h Y2NvdW50cyIsIG5hY2NvdW50cywgaW5pdEFjY291bnQpOwogCiAJZXhlY3V0ZVN0YXRlbWVudChj b24sICJjb21taXQiKTsKIH0KLS0gClRyaXN0YW4gUGFydGluCk5lb24gKGh0dHBzOi8vbmVvbi50 ZWNoKQoK --dde7a53e89f7dd10b3217a8a997ca28e61c5d5fe2a31d020333d7c0dcfed--