Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.80) (envelope-from ) id 1YSTLC-0004UC-EC for pgsql-hackers@arkaria.postgresql.org; Mon, 02 Mar 2015 16:37:10 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.80) (envelope-from ) id 1YSTLB-0003rz-Tb for pgsql-hackers@arkaria.postgresql.org; Mon, 02 Mar 2015 16:37:09 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.2:DHE_RSA_AES_256_CBC_SHA256:256) (Exim 4.80) (envelope-from ) id 1YSTLA-0003rt-Mo for pgsql-hackers@postgresql.org; Mon, 02 Mar 2015 16:37:08 +0000 Received: from mail-we0-x22c.google.com ([2a00:1450:400c:c03::22c]) by magus.postgresql.org with esmtps (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.80) (envelope-from ) id 1YSTL0-00021X-DN for pgsql-hackers@postgresql.org; Mon, 02 Mar 2015 16:37:07 +0000 Received: by wesx3 with SMTP id x3so34466795wes.6 for ; Mon, 02 Mar 2015 08:36:56 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:sender:in-reply-to:references:from:date:message-id :subject:to:cc:content-type; bh=eK2CnpJoG44TgCkm0haWF8fT8EQHrMOLnRGs5F8GSKk=; b=M4Nmwe0p1FSFw9gWqZ6fPLeFG7lpHPyiVQ2Z0zVTBl+L4qlQWi3oknlpRQh8+/CMBi ekn/MEKmtl3ZAm6rd4hyT07+sNv91c+KNOrpUt1Qo1xAcDe/BOKmiFx1rioTSKH9Wq49 rwyI68TzCtqEVj7yOWIQ/umveWnoSo3u5SHQWaN/S0V5YrA9rIYTJCG/hUMiARlXeNZO AwdxKuhlcB/DLRbbLkkf1pKH6DA/lCQKhkXX3mjXCHFTAEIz+ZFxIiMGCNe5ZpWZp6tY 2tPO0xOgm3FG5LaY628RkYI+82tNxj1NP+F0SgNPusKTtcXza2vQT2odeWRUXurUATP0 FPgw== X-Received: by 10.180.83.195 with SMTP id s3mr38077990wiy.54.1425314216021; Mon, 02 Mar 2015 08:36:56 -0800 (PST) MIME-Version: 1.0 Received: by 10.27.216.131 with HTTP; Mon, 2 Mar 2015 08:36:14 -0800 (PST) In-Reply-To: References: <20150227165950.GP29780@tamriel.snowman.net> <20150227183236.GQ29780@tamriel.snowman.net> <20150227195529.GS29780@tamriel.snowman.net> <12545.1425072391@sss.pgh.pa.us> <20150228004101.GV29780@tamriel.snowman.net> <20150302133417.GL29780@tamriel.snowman.net> From: Greg Stark Date: Mon, 2 Mar 2015 16:36:14 +0000 X-Google-Sender-Auth: v6V3rBGJV34nPJDaJQvXBX-CPUc Message-ID: Subject: Re: Providing catalog view to pg_hba.conf file - Patch submission To: Stephen Frost Cc: Haribabu Kommi , Pavel Stehule , Tom Lane , Tomas Vondra , PostgreSQL Hackers Content-Type: multipart/mixed; boundary=f46d04428d1c8a78a4051050d3ba X-Pg-Spam-Score: -2.3 (--) List-Archive: List-Help: List-ID: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-Mailing-List: pgsql-hackers Precedence: bulk Sender: pgsql-hackers-owner@postgresql.org --f46d04428d1c8a78a4051050d3ba Content-Type: multipart/alternative; boundary=f46d04428d1c8a78a0051050d3b8 --f46d04428d1c8a78a0051050d3b8 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable On Mon, Mar 2, 2015 at 1:42 PM, Greg Stark wrote: > =E2=80=8BSo earlier someone commented that using lists list_nth() seemed = odd and a > tuplestore might be better. In fact using lists this way is O(n^2). I've > done some quick tests and it doesn't start being a problem until about > 10,000 lines which obviously isn't a terribly common way to use > pg_hba_settings. However we have in the past had people doing multi-tenant > clusters with hundreds or thousands of databases in a cluster complaining > about scalability of certain operations. It would be a shame to introduce= a > new one. > > It does seem annoying to use a tuplestore as IIRC the function scan node > also materializes the results in recent years. But at least it would scale > linearly. > So I didn't get the memo about SFRM_Materialize. Here's a rewrite of this using that interface which seems to test ok up to 100k. At that point I start running into memory errors on reading the HBA file so I guess that's an indication that's large enough to stop worrying about it. --=20 greg --f46d04428d1c8a78a0051050d3b8 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable

= On Mon, Mar 2, 2015 at 1:42 PM, Greg Stark <stark@mit.edu> wrote= :
=E2=80=8BSo earlier so= meone commented that using lists list_nth() seemed odd and a tuplestore mig= ht be better. In fact using lists this way is O(n^2). I've done some qu= ick tests and it doesn't start being a problem until about 10,000 lines= which obviously isn't a terribly common way to use pg_hba_settings. Ho= wever we have in the past had people doing multi-tenant clusters with hundr= eds or thousands of databases in a cluster complaining about scalability of= certain operations. It would be a shame to introduce a new one.

It does seem annoying to use a tuplestore as IIRC the function sca= n node also materializes the results in recent years. But at least it would= scale linearly.

So I didn't get the memo about SFRM_Materi= alize. Here's a rewrite of this using that interface which seems to tes= t ok up to 100k. At that point I start running into memory errors on readin= g the HBA file so I guess that's an indication that's large enough = to stop worrying about it.


--
greg
--f46d04428d1c8a78a0051050d3b8-- --f46d04428d1c8a78a4051050d3ba Content-Type: text/x-patch; charset=US-ASCII; name="Catalog_view_to_HBA_settings_patch_V6S.patch" Content-Disposition: attachment; filename="Catalog_view_to_HBA_settings_patch_V6S.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_i6s399da0 KioqIGEvZG9jL3NyYy9zZ21sL2NhdGFsb2dzLnNnbWwKLS0tIGIvZG9jL3Ny Yy9zZ21sL2NhdGFsb2dzLnNnbWwKKioqKioqKioqKioqKioqCioqKiA3Mzkz LDczOTggKioqKgotLS0gNzM5Myw3NDAzIC0tLS0KICAgICAgICA8ZW50cnk+ dmlld3M8L2VudHJ5PgogICAgICAgPC9yb3c+CiAgCisgICAgICA8cm93Pgor ICAgICAgIDxlbnRyeT48bGluayBsaW5rZW5kPSJ2aWV3LXBnLWhiYS1zZXR0 aW5ncyI+PHN0cnVjdG5hbWU+cGdfaGJhX3NldHRpbmdzPC9zdHJ1Y3RuYW1l PjwvbGluaz48L2VudHJ5PgorICAgICAgIDxlbnRyeT5jbGllbnQgYXV0aGVu dGljYXRpb24gc2V0dGluZ3M8L2VudHJ5PgorICAgICAgPC9yb3c+CisgCiAg ICAgIDwvdGJvZHk+CiAgICAgPC90Z3JvdXA+CiAgICA8L3RhYmxlPgoqKioq KioqKioqKioqKioKKioqIDk2OTYsOTY5OSAqKioqIFNFTEVDVCAqIEZST00g cGdfbG9ja3MgcGwgTEVGVCBKT0lOIHBnX3ByZXBhcmVkX3hhY3RzIHBweAot LS0gOTcwMSw5Nzg2IC0tLS0KICAKICAgPC9zZWN0MT4KICAKKyAgPHNlY3Qx IGlkPSJ2aWV3LXBnLWhiYS1zZXR0aW5ncyI+CisgICA8dGl0bGU+PHN0cnVj dG5hbWU+cGdfaGJhX3NldHRpbmdzPC9zdHJ1Y3RuYW1lPjwvdGl0bGU+Cisg CisgICA8aW5kZXh0ZXJtIHpvbmU9InZpZXctcGctaGJhLXNldHRpbmdzIj4K KyAgICA8cHJpbWFyeT5wZ19oYmFfc2V0dGluZ3M8L3ByaW1hcnk+CisgICA8 L2luZGV4dGVybT4KKyAKKyAgIDxwYXJhPgorICAgIFRoZSByZWFkLW9ubHkg PHN0cnVjdG5hbWU+cGdfaGJhX3NldHRpbmdzPC9zdHJ1Y3RuYW1lPiB2aWV3 IHByb3ZpZGVzCisgICAgYWNjZXNzIHRvIHRoZSBjbGllbnQgYXV0aGVudGlj YXRpb24gY29uZmlndXJhdGlvbiBmcm9tIHBnX2hiYS5jb25mLgorICAgIEFj Y2VzcyB0byB0aGlzIHZpZXcgaXMgbGltaXRlZCB0byBzdXBlcnVzZXJzLiAK KyAgIDwvcGFyYT4KKyAKKyAgIDx0YWJsZT4KKyAgICA8dGl0bGU+PHN0cnVj dG5hbWU+cGdfaGJhX3NldHRpbmdzPC8+IENvbHVtbnM8L3RpdGxlPgorIAor ICAgIDx0Z3JvdXAgY29scz0iMyI+CisgICAgIDx0aGVhZD4KKyAgICAgIDxy b3c+CisgICAgICAgPGVudHJ5Pk5hbWU8L2VudHJ5PgorICAgICAgIDxlbnRy eT5UeXBlPC9lbnRyeT4KKyAgICAgICA8ZW50cnk+RGVzY3JpcHRpb248L2Vu dHJ5PgorICAgICAgPC9yb3c+CisgICAgIDwvdGhlYWQ+CisgICAgIDx0Ym9k eT4KKyAgICAgIDxyb3c+CisgICAgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD50 eXBlPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorICAgICAgIDxlbnRyeT48dHlw ZT50ZXh0PC90eXBlPjwvZW50cnk+CisgICAgICAgPGVudHJ5PlR5cGUgb2Yg Y29ubmVjdGlvbjwvZW50cnk+CisgICAgICA8L3Jvdz4KKyAgICAgIDxyb3c+ CisgICAgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5kYXRhYmFzZTwvc3RydWN0 ZmllbGQ+PC9lbnRyeT4KKyAgICAgICA8ZW50cnk+PHR5cGU+dGV4dFtdPC90 eXBlPjwvZW50cnk+CisgICAgICAgPGVudHJ5Pkxpc3Qgb2YgZGF0YWJhc2Ug bmFtZXM8L2VudHJ5PgorICAgICAgPC9yb3c+CisgICAgICA8cm93PgorICAg ICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+dXNlcjwvc3RydWN0ZmllbGQ+PC9l bnRyeT4KKyAgICAgICA8ZW50cnk+PHR5cGU+dGV4dFtdPC90eXBlPjwvZW50 cnk+CisgICAgICAgPGVudHJ5Pkxpc3Qgb2YgdXNlciBuYW1lczwvZW50cnk+ CisgICAgICA8L3Jvdz4KKyAgICAgIDxyb3c+CisgICAgICAgPGVudHJ5Pjxz dHJ1Y3RmaWVsZD5hZGRyZXNzPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorICAg ICAgIDxlbnRyeT48dHlwZT5pbmV0PC90eXBlPjwvZW50cnk+CisgICAgICAg PGVudHJ5PkNsaWVudCBtYWNoaW5lIGFkZHJlc3M8L2VudHJ5PgorICAgICAg PC9yb3c+CisgICAgICA8cm93PgorICAgICAgIDxlbnRyeT48c3RydWN0Zmll bGQ+bWFzazwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKyAgICAgICA8ZW50cnk+ PHR5cGU+aW5ldDwvdHlwZT48L2VudHJ5PgorICAgICAgIDxlbnRyeT5JUCBN YXNrPC9lbnRyeT4KKyAgICAgIDwvcm93PgorICAgICAgPHJvdz4KKyAgICAg ICA8ZW50cnk+PHN0cnVjdGZpZWxkPmNvbXBhcmVfbWV0aG9kPC9zdHJ1Y3Rm aWVsZD48L2VudHJ5PgorICAgICAgIDxlbnRyeT48dHlwZT50ZXh0PC90eXBl PjwvZW50cnk+CisgICAgICAgPGVudHJ5PklQIGFkZHJlc3MgY29tcGFyaXNv biBtZXRob2Q8L2VudHJ5PgorICAgICAgPC9yb3c+CisgICAgICA8cm93Pgor ICAgICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+aG9zdG5hbWU8L3N0cnVjdGZp ZWxkPjwvZW50cnk+CisgICAgICAgPGVudHJ5Pjx0eXBlPnRleHQ8L3R5cGU+ PC9lbnRyeT4KKyAgICAgICA8ZW50cnk+Q2xpZW50IGhvc3QgbmFtZTwvZW50 cnk+CisgICAgICA8L3Jvdz4KKyAgICAgIDxyb3c+CisgICAgICAgPGVudHJ5 PjxzdHJ1Y3RmaWVsZD5tZXRob2Q8L3N0cnVjdGZpZWxkPjwvZW50cnk+Cisg ICAgICAgPGVudHJ5Pjx0eXBlPnRleHQ8L3R5cGU+PC9lbnRyeT4KKyAgICAg ICA8ZW50cnk+QXV0aGVudGljYXRpb24gbWV0aG9kPC9lbnRyeT4KKyAgICAg IDwvcm93PgorICAgICAgPHJvdz4KKyAgICAgICA8ZW50cnk+PHN0cnVjdGZp ZWxkPm9wdGlvbnM8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisgICAgICAgPGVu dHJ5Pjx0eXBlPnRleHRbXTwvdHlwZT48L2VudHJ5PgorICAgICAgIDxlbnRy eT5Db25maWd1cmF0aW9uIG9wdGlvbnMgc2V0IGZvciBhdXRoZW50aWNhdGlv biBtZXRob2Q8L2VudHJ5PgorICAgICAgPC9yb3c+CisgICAgICA8cm93Pgor ICAgICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+bGluZV9udW1iZXI8L3N0cnVj dGZpZWxkPjwvZW50cnk+CisgICAgICAgPGVudHJ5Pjx0eXBlPmludGVnZXI8 L3R5cGU+PC9lbnRyeT4KKyAgICAgICA8ZW50cnk+CisgICAgICAgIExpbmUg bnVtYmVyIHdpdGhpbiBjbGllbnQgYXV0aGVudGljYXRpb24gY29uZmlndXJh dGlvbiBmaWxlIAorICAgICAgICB0aGUgY3VycmVudCB2YWx1ZSB3YXMgc2V0 IGF0CisgICAgICAgPC9lbnRyeT4KKyAgICAgIDwvcm93PgorICAgICA8L3Ri b2R5PgorICAgIDwvdGdyb3VwPgorICAgPC90YWJsZT4KKyAgPC9zZWN0MT4K ICA8L2NoYXB0ZXI+CioqKiBhL2RvYy9zcmMvc2dtbC9jbGllbnQtYXV0aC5z Z21sCi0tLSBiL2RvYy9zcmMvc2dtbC9jbGllbnQtYXV0aC5zZ21sCioqKioq KioqKioqKioqKgoqKiogNjgwLDY4NSAqKioqIGxvY2FsICAgYWxsICAgICAg ICAgICAgIEBhZG1pbnMsK3N1cHBvcnQgICAgICAgICAgICAgICAgICAgICAg ICBtZDUKLS0tIDY4MCw2OTAgLS0tLQogIGxvY2FsICAgZGIxLGRiMixAZGVt b2RicyAgYWxsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt ZDUKICA8L3Byb2dyYW1saXN0aW5nPgogICAgIDwvZXhhbXBsZT4KKyAKKyAg ICA8cGFyYT4KKyAgICAgVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUg cmVmbGVjdGVkIGluIHRoZSBwZ19oYmFfc2V0dGluZ3Mgdmlldy4KKyAgICAg U2VlIDx4cmVmIGxpbmtlbmQ9InZpZXctcGctaGJhLXNldHRpbmdzIj4gZm9y IGRldGFpbHMuCisgICAgPC9wYXJhPgogICA8L3NlY3QxPgogIAogICA8c2Vj dDEgaWQ9ImF1dGgtdXNlcm5hbWUtbWFwcyI+CioqKiBhL3NyYy9iYWNrZW5k L2NhdGFsb2cvc3lzdGVtX3ZpZXdzLnNxbAotLS0gYi9zcmMvYmFja2VuZC9j YXRhbG9nL3N5c3RlbV92aWV3cy5zcWwKKioqKioqKioqKioqKioqCioqKiA0 MTQsNDE5ICoqKiogQ1JFQVRFIFJVTEUgcGdfc2V0dGluZ3NfbiBBUwotLS0g NDE0LDQyNCAtLS0tCiAgCiAgR1JBTlQgU0VMRUNULCBVUERBVEUgT04gcGdf c2V0dGluZ3MgVE8gUFVCTElDOwogIAorIENSRUFURSBWSUVXIHBnX2hiYV9z ZXR0aW5ncyBBUworICAgICBTRUxFQ1QgKiBGUk9NIHBnX2hiYV9zZXR0aW5n cygpIEFTIEE7CisgCisgUkVWT0tFIEFMTCBvbiBwZ19oYmFfc2V0dGluZ3Mg RlJPTSBwdWJsaWM7CisgCiAgQ1JFQVRFIFZJRVcgcGdfdGltZXpvbmVfYWJi cmV2cyBBUwogICAgICBTRUxFQ1QgKiBGUk9NIHBnX3RpbWV6b25lX2FiYnJl dnMoKTsKICAKKioqIGEvc3JjL2JhY2tlbmQvbGlicHEvaGJhLmMKLS0tIGIv c3JjL2JhY2tlbmQvbGlicHEvaGJhLmMKKioqKioqKioqKioqKioqCioqKiAy NSwzOCAqKioqCi0tLSAyNSw0NCAtLS0tCiAgI2luY2x1ZGUgPGFycGEvaW5l dC5oPgogICNpbmNsdWRlIDx1bmlzdGQuaD4KICAKKyAjaW5jbHVkZSAiYWNj ZXNzL2h0dXBfZGV0YWlscy5oIgogICNpbmNsdWRlICJjYXRhbG9nL3BnX2Nv bGxhdGlvbi5oIgorICNpbmNsdWRlICJjYXRhbG9nL3BnX3R5cGUuaCIKKyAj aW5jbHVkZSAiY2F0YWxvZy9vYmplY3RhZGRyZXNzLmgiCisgI2luY2x1ZGUg ImZ1bmNhcGkuaCIKICAjaW5jbHVkZSAibGlicHEvaXAuaCIKICAjaW5jbHVk ZSAibGlicHEvbGlicHEuaCIKKyAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAg I2luY2x1ZGUgInBvc3RtYXN0ZXIvcG9zdG1hc3Rlci5oIgogICNpbmNsdWRl ICJyZWdleC9yZWdleC5oIgogICNpbmNsdWRlICJyZXBsaWNhdGlvbi93YWxz ZW5kZXIuaCIKICAjaW5jbHVkZSAic3RvcmFnZS9mZC5oIgogICNpbmNsdWRl ICJ1dGlscy9hY2wuaCIKKyAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIK ICAjaW5jbHVkZSAidXRpbHMvZ3VjLmgiCiAgI2luY2x1ZGUgInV0aWxzL2xz eXNjYWNoZS5oIgogICNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgoqKioq KioqKioqKioqKioKKioqIDIyMjAsMjIyMiAqKioqIGhiYV9nZXRhdXRobWV0 aG9kKGhiYVBvcnQgKnBvcnQpCi0tLSAyMjI2LDI2MzIgLS0tLQogIHsKICAJ Y2hlY2tfaGJhKHBvcnQpOwogIH0KKyAKKyAvKgorICAqIEZpbGwgaW4gc3Vp dGFibGUgdmFsdWVzIHRvIGJ1aWxkIGEgdHVwbGUgcmVwcmVzZW50aW5nIHRo ZQorICAqIEhiYUxpbmUgcHJvdmlkZWQKKyAgKi8KKyBzdGF0aWMgdm9pZAor IGhiYV9nZXR2YWx1ZXNfZm9yX2xpbmUoSGJhTGluZSAqaGJhLCBEYXR1bSAq dmFsdWVzLCBib29sICpudWxscykKKyB7CisgCUxpc3RDZWxsICAgKmRiY2Vs bDsKKyAJY2hhcgkJYnVmZmVyW05JX01BWEhPU1RdOworIAlTdHJpbmdJbmZv RGF0YSBzdHI7CisgCUhiYVRva2VuICAgKnRvazsKKyAJaW50CQkJaW5kZXgg PSAwOworIAlMaXN0CSAgICpvcHRpb25zID0gTlVMTDsKKyAKKyAJLyogY29u bmVjdGlvbiB0eXBlICovCisgCXN3aXRjaCAoaGJhLT5jb25udHlwZSkKKyAJ eworIAkJY2FzZSBjdExvY2FsOgorIAkJCXZhbHVlc1tpbmRleF0gPSBDU3Ry aW5nR2V0VGV4dERhdHVtKCJsb2NhbCIpOworIAkJCWJyZWFrOworIAkJY2Fz ZSBjdEhvc3Q6CisgCQkJdmFsdWVzW2luZGV4XSA9IENTdHJpbmdHZXRUZXh0 RGF0dW0oImhvc3QiKTsKKyAJCQlicmVhazsKKyAJCWNhc2UgY3RIb3N0U1NM OgorIAkJCXZhbHVlc1tpbmRleF0gPSBDU3RyaW5nR2V0VGV4dERhdHVtKCJo b3N0c3NsIik7CisgCQkJYnJlYWs7CisgCQljYXNlIGN0SG9zdE5vU1NMOgor IAkJCXZhbHVlc1tpbmRleF0gPSBDU3RyaW5nR2V0VGV4dERhdHVtKCJob3N0 bm9zc2wiKTsKKyAJCQlicmVhazsKKyAJCWRlZmF1bHQ6CisgCQkJbnVsbHNb aW5kZXhdID0gdHJ1ZTsKKyAJCQlicmVhazsKKyAJfQorIAorIAkvKiBkYXRh YmFzZSAqLworIAlpbmRleCsrOworIAlpZiAobGlzdF9sZW5ndGgoaGJhLT5k YXRhYmFzZXMpICE9IDApCisgCXsKKyAJCUxpc3QJICAgKm5hbWVzID0gTlVM TDsKKyAKKyAJCWZvcmVhY2goZGJjZWxsLCBoYmEtPmRhdGFiYXNlcykKKyAJ CXsKKyAJCQl0b2sgPSBsZmlyc3QoZGJjZWxsKTsKKyAJCQluYW1lcyA9IGxh cHBlbmQobmFtZXMsIHRvay0+c3RyaW5nKTsKKyAJCX0KKyAKKyAJCXZhbHVl c1tpbmRleF0gPSBQb2ludGVyR2V0RGF0dW0oc3RybGlzdF90b190ZXh0YXJy YXkobmFtZXMpKTsKKyAJfQorIAllbHNlCisgCQludWxsc1tpbmRleF0gPSB0 cnVlOworIAorIAkvKiB1c2VyICovCisgCWluZGV4Kys7CisgCWlmIChsaXN0 X2xlbmd0aChoYmEtPnJvbGVzKSAhPSAwKQorIAl7CisgCQlMaXN0CSAgICpy b2xlcyA9IE5VTEw7CisgCisgCQlmb3JlYWNoKGRiY2VsbCwgaGJhLT5yb2xl cykKKyAJCXsKKyAJCQl0b2sgPSBsZmlyc3QoZGJjZWxsKTsKKyAJCQlyb2xl cyA9IGxhcHBlbmQocm9sZXMsIHRvay0+c3RyaW5nKTsKKyAJCX0KKyAKKyAJ CXZhbHVlc1tpbmRleF0gPSBQb2ludGVyR2V0RGF0dW0oc3RybGlzdF90b190 ZXh0YXJyYXkocm9sZXMpKTsKKyAJfQorIAllbHNlCisgCQludWxsc1tpbmRl eF0gPSB0cnVlOworIAorIAkvKiBhZGRyZXNzICovCisgCWluZGV4Kys7Cisg CWlmIChwZ19nZXRuYW1laW5mb19hbGwoJmhiYS0+YWRkciwgc2l6ZW9mKHN0 cnVjdCBzb2NrYWRkcl9zdG9yYWdlKSwgYnVmZmVyLCBzaXplb2YoYnVmZmVy KSwgTlVMTCwgMCwgTklfTlVNRVJJQ0hPU1QpID09IDApCisgCXsKKyAJCWNs ZWFuX2lwdjZfYWRkcihoYmEtPmFkZHIuc3NfZmFtaWx5LCBidWZmZXIpOwor IAkJdmFsdWVzW2luZGV4XSA9IERpcmVjdEZ1bmN0aW9uQ2FsbDEoaW5ldF9p biwgQ1N0cmluZ0dldERhdHVtKGJ1ZmZlcikpOworIAl9CisgCWVsc2UKKyAJ CW51bGxzW2luZGV4XSA9IHRydWU7CisgCisgCS8qIG1hc2sgKi8KKyAJaW5k ZXgrKzsKKyAJaWYgKHBnX2dldG5hbWVpbmZvX2FsbCgmaGJhLT5tYXNrLCBz aXplb2Yoc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UpLCBidWZmZXIsIHNpemVv ZihidWZmZXIpLCBOVUxMLCAwLCBOSV9OVU1FUklDSE9TVCkgPT0gMCkKKyAJ eworIAkJY2xlYW5faXB2Nl9hZGRyKGhiYS0+YWRkci5zc19mYW1pbHksIGJ1 ZmZlcik7CisgCQl2YWx1ZXNbaW5kZXhdID0gRGlyZWN0RnVuY3Rpb25DYWxs MShpbmV0X2luLCBDU3RyaW5nR2V0RGF0dW0oYnVmZmVyKSk7CisgCX0KKyAJ ZWxzZQorIAkJbnVsbHNbaW5kZXhdID0gdHJ1ZTsKKyAKKyAJLyogY29tcGFy ZSBtZXRob2QgKi8KKyAJaW5kZXgrKzsKKyAJc3dpdGNoIChoYmEtPmlwX2Nt cF9tZXRob2QpCisgCXsKKyAJCWNhc2UgaXBDbXBNYXNrOgorIAkJCXZhbHVl c1tpbmRleF0gPSBDU3RyaW5nR2V0VGV4dERhdHVtKCJtYXNrIik7CisgCQkJ YnJlYWs7CisgCQljYXNlIGlwQ21wU2FtZUhvc3Q6CisgCQkJdmFsdWVzW2lu ZGV4XSA9IENTdHJpbmdHZXRUZXh0RGF0dW0oInNhbWVob3N0Iik7CisgCQkJ YnJlYWs7CisgCQljYXNlIGlwQ21wU2FtZU5ldDoKKyAJCQl2YWx1ZXNbaW5k ZXhdID0gQ1N0cmluZ0dldFRleHREYXR1bSgic2FtZW5ldCIpOworIAkJCWJy ZWFrOworIAkJY2FzZSBpcENtcEFsbDoKKyAJCQl2YWx1ZXNbaW5kZXhdID0g Q1N0cmluZ0dldFRleHREYXR1bSgiYWxsIik7CisgCQkJYnJlYWs7CisgCQlk ZWZhdWx0OgorIAkJCW51bGxzW2luZGV4XSA9IHRydWU7CisgCQkJYnJlYWs7 CisgCX0KKyAKKyAJLyogaG9zdG5hbWUgKi8KKyAJaW5kZXgrKzsKKyAJaWYg KGhiYS0+aG9zdG5hbWUpCisgCQl2YWx1ZXNbaW5kZXhdID0gQ1N0cmluZ0dl dFRleHREYXR1bShoYmEtPmhvc3RuYW1lKTsKKyAJZWxzZQorIAkJbnVsbHNb aW5kZXhdID0gdHJ1ZTsKKyAKKyAJLyogbWV0aG9kICovCisgCWluZGV4Kys7 CisgCXN3aXRjaCAoaGJhLT5hdXRoX21ldGhvZCkKKyAJeworIAkJY2FzZSB1 YVJlamVjdDoKKyAJCQl2YWx1ZXNbaW5kZXhdID0gQ1N0cmluZ0dldFRleHRE YXR1bSgicmVqZWN0Iik7CisgCQkJYnJlYWs7CisgCQljYXNlIHVhSW1wbGlj aXRSZWplY3Q6CisgCQkJdmFsdWVzW2luZGV4XSA9IENTdHJpbmdHZXRUZXh0 RGF0dW0oImltcGxpY2l0cmVqZWN0Iik7CisgCQkJYnJlYWs7CisgCQljYXNl IHVhVHJ1c3Q6CisgCQkJdmFsdWVzW2luZGV4XSA9IENTdHJpbmdHZXRUZXh0 RGF0dW0oInRydXN0Iik7CisgCQkJYnJlYWs7CisgCQljYXNlIHVhSWRlbnQ6 CisgCQkJdmFsdWVzW2luZGV4XSA9IENTdHJpbmdHZXRUZXh0RGF0dW0oImlk ZW50Iik7CisgCQkJYnJlYWs7CisgCQljYXNlIHVhUGFzc3dvcmQ6CisgCQkJ dmFsdWVzW2luZGV4XSA9IENTdHJpbmdHZXRUZXh0RGF0dW0oInBhc3N3b3Jk Iik7CisgCQkJYnJlYWs7CisgCQljYXNlIHVhTUQ1OgorIAkJCXZhbHVlc1tp bmRleF0gPSBDU3RyaW5nR2V0VGV4dERhdHVtKCJtZDUiKTsKKyAJCQlicmVh azsKKyAJCWNhc2UgdWFHU1M6CisgCQkJdmFsdWVzW2luZGV4XSA9IENTdHJp bmdHZXRUZXh0RGF0dW0oImdzcyIpOworIAkJCWJyZWFrOworIAkJY2FzZSB1 YVNTUEk6CisgCQkJdmFsdWVzW2luZGV4XSA9IENTdHJpbmdHZXRUZXh0RGF0 dW0oInNzcGkiKTsKKyAJCQlicmVhazsKKyAJCWNhc2UgdWFQQU06CisgCQkJ dmFsdWVzW2luZGV4XSA9IENTdHJpbmdHZXRUZXh0RGF0dW0oInBhbSIpOwor IAkJCWJyZWFrOworIAkJY2FzZSB1YUxEQVA6CisgCQkJdmFsdWVzW2luZGV4 XSA9IENTdHJpbmdHZXRUZXh0RGF0dW0oImxkYXAiKTsKKyAJCQlicmVhazsK KyAJCWNhc2UgdWFDZXJ0OgorIAkJCXZhbHVlc1tpbmRleF0gPSBDU3RyaW5n R2V0VGV4dERhdHVtKCJjZXJ0Iik7CisgCQkJYnJlYWs7CisgCQljYXNlIHVh UkFESVVTOgorIAkJCXZhbHVlc1tpbmRleF0gPSBDU3RyaW5nR2V0VGV4dERh dHVtKCJyYWRpdXMiKTsKKyAJCQlicmVhazsKKyAJCWNhc2UgdWFQZWVyOgor IAkJCXZhbHVlc1tpbmRleF0gPSBDU3RyaW5nR2V0VGV4dERhdHVtKCJwZWVy Iik7CisgCQkJYnJlYWs7CisgCQlkZWZhdWx0OgorIAkJCW51bGxzW2luZGV4 XSA9IHRydWU7CisgCQkJYnJlYWs7CisgCX0KKyAKKyAJLyogb3B0aW9ucyAq LworIAlpbmRleCsrOworIAorIAlpZiAoaGJhLT5hdXRoX21ldGhvZCA9PSB1 YUdTUyB8fCBoYmEtPmF1dGhfbWV0aG9kID09IHVhU1NQSSkKKyAJeworIAkJ aW5pdFN0cmluZ0luZm8oJnN0cik7CisgCisgCQlpZiAoaGJhLT5pbmNsdWRl X3JlYWxtKQorIAkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJnN0ciwgImlu Y2x1ZGVfcmVhbG09dHJ1ZSwiKTsKKyAKKyAJCWlmIChoYmEtPmtyYl9yZWFs bSkKKyAJCXsKKyAJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZzdHIsICJr cmJfcmVhbG09Iik7CisgCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmc3Ry LCBoYmEtPmtyYl9yZWFsbSk7CisgCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmlu Zygmc3RyLCAiLCIpOworIAkJfQorIAorIAkJaWYgKHN0ci5sZW4gPiAxKQor IAkJCXN0ci5kYXRhW3N0ci5sZW4gLSAxXSA9ICdcMCc7CisgCisgCQlvcHRp b25zID0gbGFwcGVuZChvcHRpb25zLCBzdHIuZGF0YSk7CisgCX0KKyAKKyAJ aWYgKChoYmEtPnVzZXJtYXApCisgCQkmJiAoaGJhLT5hdXRoX21ldGhvZCA9 PSB1YUlkZW50IHx8IGhiYS0+YXV0aF9tZXRob2QgPT0gdWFQZWVyCisgCQkJ fHwgaGJhLT5hdXRoX21ldGhvZCA9PSB1YUNlcnQgfHwgaGJhLT5hdXRoX21l dGhvZCA9PSB1YUdTUworIAkJCXx8IGhiYS0+YXV0aF9tZXRob2QgPT0gdWFT U1BJKSkKKyAJeworIAkJaW5pdFN0cmluZ0luZm8oJnN0cik7CisgCQlhcHBl bmRTdHJpbmdJbmZvU3RyaW5nKCZzdHIsICJtYXA9Iik7CisgCQlhcHBlbmRT dHJpbmdJbmZvU3RyaW5nKCZzdHIsIGhiYS0+dXNlcm1hcCk7CisgCQlvcHRp b25zID0gbGFwcGVuZChvcHRpb25zLCBzdHIuZGF0YSk7CisgCX0KKyAKKyAJ aWYgKGhiYS0+YXV0aF9tZXRob2QgPT0gdWFMREFQKQorIAl7CisgCQlpbml0 U3RyaW5nSW5mbygmc3RyKTsKKyAJCWlmIChoYmEtPmxkYXBzZXJ2ZXIpCisg CQl7CisgCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmc3RyLCAibGRhcHNl cnZlcj0iKTsKKyAJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZzdHIsIGhi YS0+bGRhcHNlcnZlcik7CisgCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygm c3RyLCAiLCIpOworIAkJfQorIAorIAkJaWYgKGhiYS0+bGRhcHBvcnQpCisg CQl7CisgCQkJc25wcmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgIiVk IiwgaGJhLT5sZGFwcG9ydCk7CisgCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmlu Zygmc3RyLCAibGRhcHBvcnQ9Iik7CisgCQkJYXBwZW5kU3RyaW5nSW5mb1N0 cmluZygmc3RyLCBidWZmZXIpOworIAkJCWFwcGVuZFN0cmluZ0luZm9TdHJp bmcoJnN0ciwgIiwiKTsKKyAJCX0KKyAKKyAJCWlmIChoYmEtPmxkYXB0bHMp CisgCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmc3RyLCAibGRhcHRscz10 cnVlLCIpOworIAorIAkJaWYgKGhiYS0+bGRhcHByZWZpeCkKKyAJCXsKKyAJ CQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZzdHIsICJsZGFwcHJlZml4PSIp OworIAkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJnN0ciwgaGJhLT5sZGFw cHJlZml4KTsKKyAJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZzdHIsICIs Iik7CisgCQl9CisgCisgCQlpZiAoaGJhLT5sZGFwc3VmZml4KQorIAkJewor IAkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJnN0ciwgImxkYXBzdWZmaXg9 Iik7CisgCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmc3RyLCBoYmEtPmxk YXBzdWZmaXgpOworIAkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJnN0ciwg IiwiKTsKKyAJCX0KKyAKKyAJCWlmIChoYmEtPmxkYXBiYXNlZG4pCisgCQl7 CisgCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmc3RyLCAibGRhcGJhc2Vk bj0iKTsKKyAJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZzdHIsIGhiYS0+ bGRhcGJhc2Vkbik7CisgCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmc3Ry LCAiLCIpOworIAkJfQorIAorIAkJaWYgKGhiYS0+bGRhcGJpbmRkbikKKyAJ CXsKKyAJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZzdHIsICJsZGFwYmlu ZGRuPSIpOworIAkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJnN0ciwgaGJh LT5sZGFwYmluZGRuKTsKKyAJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZz dHIsICIsIik7CisgCQl9CisgCisgCQlpZiAoaGJhLT5sZGFwYmluZHBhc3N3 ZCkKKyAJCXsKKyAJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZzdHIsICJs ZGFwYmluZHBhc3N3ZD0iKTsKKyAJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5n KCZzdHIsIGhiYS0+bGRhcGJpbmRwYXNzd2QpOworIAkJCWFwcGVuZFN0cmlu Z0luZm9TdHJpbmcoJnN0ciwgIiwiKTsKKyAJCX0KKyAKKyAJCWlmIChoYmEt PmxkYXBzZWFyY2hhdHRyaWJ1dGUpCisgCQl7CisgCQkJYXBwZW5kU3RyaW5n SW5mb1N0cmluZygmc3RyLCAibGRhcHNlYXJjaGF0dHJpYnV0ZT0iKTsKKyAJ CQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZzdHIsIGhiYS0+bGRhcHNlYXJj aGF0dHJpYnV0ZSk7CisgCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmc3Ry LCAiLCIpOworIAkJfQorIAorIAkJaWYgKGhiYS0+bGRhcHNjb3BlKQorIAkJ eworIAkJCXNucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksICIlZCIs IGhiYS0+bGRhcHNjb3BlKTsKKyAJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5n KCZzdHIsICJsZGFwc2NvcGU9Iik7CisgCQkJYXBwZW5kU3RyaW5nSW5mb1N0 cmluZygmc3RyLCBidWZmZXIpOworIAkJCWFwcGVuZFN0cmluZ0luZm9TdHJp bmcoJnN0ciwgIiwiKTsKKyAJCX0KKyAKKyAJCWlmIChzdHIubGVuID4gMSkK KyAJCQlzdHIuZGF0YVtzdHIubGVuIC0gMV0gPSAnXDAnOworIAorIAkJb3B0 aW9ucyA9IGxhcHBlbmQob3B0aW9ucywgc3RyLmRhdGEpOworIAl9CisgCisg CWlmIChoYmEtPmF1dGhfbWV0aG9kID09IHVhUkFESVVTKQorIAl7CisgCQlp bml0U3RyaW5nSW5mbygmc3RyKTsKKyAJCWlmIChoYmEtPnJhZGl1c3NlcnZl cikKKyAJCXsKKyAJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZzdHIsICJy YWRpdXNzZXJ2ZXI9Iik7CisgCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygm c3RyLCBoYmEtPnJhZGl1c3NlcnZlcik7CisgCQkJYXBwZW5kU3RyaW5nSW5m b1N0cmluZygmc3RyLCAiLCIpOworIAkJfQorIAorIAkJaWYgKGhiYS0+cmFk aXVzc2VjcmV0KQorIAkJeworIAkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmco JnN0ciwgInJhZGl1c3NlY3JldD0iKTsKKyAJCQlhcHBlbmRTdHJpbmdJbmZv U3RyaW5nKCZzdHIsIGhiYS0+cmFkaXVzc2VjcmV0KTsKKyAJCQlhcHBlbmRT dHJpbmdJbmZvU3RyaW5nKCZzdHIsICIsIik7CisgCQl9CisgCisgCQlpZiAo aGJhLT5yYWRpdXNpZGVudGlmaWVyKQorIAkJeworIAkJCWFwcGVuZFN0cmlu Z0luZm9TdHJpbmcoJnN0ciwgInJhZGl1c2lkZW50aWZpZXI9Iik7CisgCQkJ YXBwZW5kU3RyaW5nSW5mb1N0cmluZygmc3RyLCBoYmEtPnJhZGl1c2lkZW50 aWZpZXIpOworIAkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJnN0ciwgIiwi KTsKKyAJCX0KKyAKKyAJCWlmIChoYmEtPnJhZGl1c3BvcnQpCisgCQl7Cisg CQkJc25wcmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgIiVkIiwgaGJh LT5yYWRpdXNwb3J0KTsKKyAJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZz dHIsICJyYWRpdXNwb3J0PSIpOworIAkJCWFwcGVuZFN0cmluZ0luZm9TdHJp bmcoJnN0ciwgYnVmZmVyKTsKKyAJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5n KCZzdHIsICIsIik7CisgCQl9CisgCisgCQlpZiAoc3RyLmxlbiA+IDEpCisg CQkJc3RyLmRhdGFbc3RyLmxlbiAtIDFdID0gJ1wwJzsKKyAKKyAJCW9wdGlv bnMgPSBsYXBwZW5kKG9wdGlvbnMsIHN0ci5kYXRhKTsKKyAJfQorIAorIAlp ZiAob3B0aW9ucykKKyAJCXZhbHVlc1tpbmRleF0gPSBQb2ludGVyR2V0RGF0 dW0oc3RybGlzdF90b190ZXh0YXJyYXkob3B0aW9ucykpOworIAllbHNlCisg CQludWxsc1tpbmRleF0gPSB0cnVlOworIAorIAkvKiBsaW5lX251bWJlciAq LworIAlpbmRleCsrOworIAl2YWx1ZXNbaW5kZXhdID0gSW50MzJHZXREYXR1 bShoYmEtPmxpbmVudW1iZXIpOworIH0KKyAKKyAjZGVmaW5lIE5VTV9QR19I QkFfU0VUVElOR1NfQVRUUyAgIDEwCisgCisgRGF0dW0KKyBoYmFfc2V0dGlu Z3MoUEdfRlVOQ1RJT05fQVJHUykKKyB7CisgCVR1cGxlc3RvcmVzdGF0ZSAq dHVwbGVfc3RvcmU7CisgCVR1cGxlRGVzYwl0dXBkZXNjOworIAlMaXN0Q2Vs bCAgICpsaW5lOworIAlNZW1vcnlDb250ZXh0IG9sZF9jeHQ7CisgCisgCVJl dHVyblNldEluZm8gKnJzaSA9IChSZXR1cm5TZXRJbmZvICopIGZjaW5mby0+ cmVzdWx0aW5mbzsKKyAJCisgCWlmICghcnNpIHx8ICFJc0EocnNpLCBSZXR1 cm5TZXRJbmZvKSB8fAorIAkJKHJzaS0+YWxsb3dlZE1vZGVzICYgU0ZSTV9N YXRlcmlhbGl6ZSkgPT0gMCkKKyAJCWVyZXBvcnQoRVJST1IsCisgCQkJCShl cnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKKyAJCQkJ IGVycm1zZygic2V0LXZhbHVlZCBmdW5jdGlvbiBjYWxsZWQgaW4gY29udGV4 dCB0aGF0ICIKKyAJCQkJCQkiY2Fubm90IGFjY2VwdCBhIHNldCIpKSk7Cisg CisgCXJzaS0+cmV0dXJuTW9kZSA9IFNGUk1fTWF0ZXJpYWxpemU7CisgCisg CW9sZF9jeHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8ocnNpLT5lY29udGV4 dC0+ZWN4dF9wZXJfcXVlcnlfbWVtb3J5KTsKKyAKKyAJLyoKKyAJICogbmVl ZCBhIHR1cGxlIGRlc2NyaXB0b3IgcmVwcmVzZW50aW5nIE5VTV9QR19IQkFf U0VUVElOR1NfQVRUUworIAkgKiBjb2x1bW5zIG9mIHRoZSBhcHByb3ByaWF0 ZSB0eXBlcworIAkgKi8KKyAJdHVwZGVzYyA9IENyZWF0ZVRlbXBsYXRlVHVw bGVEZXNjKE5VTV9QR19IQkFfU0VUVElOR1NfQVRUUywgZmFsc2UpOworIAlU dXBsZURlc2NJbml0RW50cnkodHVwZGVzYywgKEF0dHJOdW1iZXIpIDEsICJ0 eXBlIiwKKyAJCQkJCSAgIFRFWFRPSUQsIC0xLCAwKTsKKyAJVHVwbGVEZXNj SW5pdEVudHJ5KHR1cGRlc2MsIChBdHRyTnVtYmVyKSAyLCAiZGF0YWJhc2Ui LAorIAkJCQkJICAgVEVYVEFSUkFZT0lELCAtMSwgMCk7CisgCVR1cGxlRGVz Y0luaXRFbnRyeSh0dXBkZXNjLCAoQXR0ck51bWJlcikgMywgInVzZXIiLAor IAkJCQkJICAgVEVYVEFSUkFZT0lELCAtMSwgMCk7CisgCVR1cGxlRGVzY0lu aXRFbnRyeSh0dXBkZXNjLCAoQXR0ck51bWJlcikgNCwgImFkZHJlc3MiLAor IAkJCQkJICAgSU5FVE9JRCwgLTEsIDApOworIAlUdXBsZURlc2NJbml0RW50 cnkodHVwZGVzYywgKEF0dHJOdW1iZXIpIDUsICJtYXNrIiwKKyAJCQkJCSAg IElORVRPSUQsIC0xLCAwKTsKKyAJVHVwbGVEZXNjSW5pdEVudHJ5KHR1cGRl c2MsIChBdHRyTnVtYmVyKSA2LCAiY29tcGFyZV9tZXRob2QiLAorIAkJCQkJ ICAgVEVYVE9JRCwgLTEsIDApOworIAlUdXBsZURlc2NJbml0RW50cnkodHVw ZGVzYywgKEF0dHJOdW1iZXIpIDcsICJob3N0bmFtZSIsCisgCQkJCQkgICBU RVhUT0lELCAtMSwgMCk7CisgCVR1cGxlRGVzY0luaXRFbnRyeSh0dXBkZXNj LCAoQXR0ck51bWJlcikgOCwgIm1ldGhvZCIsCisgCQkJCQkgICBURVhUT0lE LCAtMSwgMCk7CisgCVR1cGxlRGVzY0luaXRFbnRyeSh0dXBkZXNjLCAoQXR0 ck51bWJlcikgOSwgIm9wdGlvbnMiLAorIAkJCQkJICAgVEVYVEFSUkFZT0lE LCAtMSwgMCk7CisgCVR1cGxlRGVzY0luaXRFbnRyeSh0dXBkZXNjLCAoQXR0 ck51bWJlcikgMTAsICJsaW5lX251bWJlciIsCisgCQkJCQkgICBJTlQ0T0lE LCAtMSwgMCk7CisgCQorIAlCbGVzc1R1cGxlRGVzYyh0dXBkZXNjKTsKKyAK KyAJdHVwbGVfc3RvcmUgPQorIAkJdHVwbGVzdG9yZV9iZWdpbl9oZWFwKHJz aS0+YWxsb3dlZE1vZGVzICYgU0ZSTV9NYXRlcmlhbGl6ZV9SYW5kb20sCisg CQkJCQkJCSAgZmFsc2UsIHdvcmtfbWVtKTsKKyAKKyAJTWVtb3J5Q29udGV4 dFN3aXRjaFRvKG9sZF9jeHQpOworIAorIAlmb3JlYWNoKGxpbmUsIHBhcnNl ZF9oYmFfbGluZXMpCisgCXsKKyAJCUhiYUxpbmUgKmhiYSA9IChIYmFMaW5l ICopIGxmaXJzdChsaW5lKTsKKyAJCURhdHVtCQl2YWx1ZXNbTlVNX1BHX0hC QV9TRVRUSU5HU19BVFRTXTsKKyAJCWJvb2wJCW51bGxzW05VTV9QR19IQkFf U0VUVElOR1NfQVRUU107CisgCQlIZWFwVHVwbGUJdHVwbGU7CisgCisgCQlN ZW1TZXQodmFsdWVzLCAwLCBzaXplb2YodmFsdWVzKSk7CisgCQlNZW1TZXQo bnVsbHMsIDAsIHNpemVvZihudWxscykpOworIAorIAkJLyogR2V0IHRoZSBu ZXh0IHBhcnNlZCBoYmEgbGluZSB2YWx1ZXMgKi8KKyAJCWhiYV9nZXR2YWx1 ZXNfZm9yX2xpbmUoaGJhLCB2YWx1ZXMsIG51bGxzKTsKKyAKKyAJCS8qIGJ1 aWxkIGEgdHVwbGUgKi8KKyAJCXR1cGxlID0gaGVhcF9mb3JtX3R1cGxlKHR1 cGRlc2MsIHZhbHVlcywgbnVsbHMpOworIAkJdHVwbGVzdG9yZV9wdXR0dXBs ZSh0dXBsZV9zdG9yZSwgdHVwbGUpOworIAl9CisgCisgCXJzaS0+c2V0RGVz YyA9IHR1cGRlc2M7CisgCXJzaS0+c2V0UmVzdWx0ID0gdHVwbGVfc3RvcmU7 CisgCisgCVBHX1JFVFVSTl9OVUxMKCk7CisgfQoqKiogYS9zcmMvYmFja2Vu ZC90Y29wL3Bvc3RncmVzLmMKLS0tIGIvc3JjL2JhY2tlbmQvdGNvcC9wb3N0 Z3Jlcy5jCioqKioqKioqKioqKioqKgoqKiogMzk5Niw0MDAxICoqKiogUG9z dGdyZXNNYWluKGludCBhcmdjLCBjaGFyICphcmd2W10sCi0tLSAzOTk2LDQw MDkgLS0tLQogIAkJewogIAkJCWdvdF9TSUdIVVAgPSBmYWxzZTsKICAJCQlQ cm9jZXNzQ29uZmlnRmlsZShQR0NfU0lHSFVQKTsKKyAJCQkKKyAJCQkvKiAK KyAJCQkgKiBSZWxvYWQgYXV0aGVudGljYXRpb24gY29uZmlnIGZpbGVzIHRv byB0byByZWZyZXNoIAorIAkJCSAqIHBnX2hiYV9zZXR0aW5ncyB2aWV3IGRh dGEuCisgCQkJICovCisgCQkJaWYgKCFsb2FkX2hiYSgpKQorIAkJCQllcmVw b3J0KFdBUk5JTkcsCisgCQkJCQkoZXJybXNnKCJwZ19oYmEuY29uZiBub3Qg cmVsb2FkZWQiKSkpOwogIAkJfQogIAogIAkJLyoKKioqIGEvc3JjL2luY2x1 ZGUvY2F0YWxvZy9wZ19wcm9jLmgKLS0tIGIvc3JjL2luY2x1ZGUvY2F0YWxv Zy9wZ19wcm9jLmgKKioqKioqKioqKioqKioqCioqKiAzMDIzLDMwMjggKioq KiBEQVRBKGluc2VydCBPSUQgPSAyMDc4ICggIHNldF9jb25maWcJCVBHTlNQ IFBHVUlEIDEyIDEgMCAwIDAgZiBmIGYgZiBmIGYgdiAzIDAgMgotLS0gMzAy MywzMDMwIC0tLS0KICBERVNDUigiU0VUIFggYXMgYSBmdW5jdGlvbiIpOwog IERBVEEoaW5zZXJ0IE9JRCA9IDIwODQgKCAgcGdfc2hvd19hbGxfc2V0dGlu Z3MJUEdOU1AgUEdVSUQgMTIgMSAxMDAwIDAgMCBmIGYgZiBmIHQgdCBzIDAg MCAyMjQ5ICIiICJ7MjUsMjUsMjUsMjUsMjUsMjUsMjUsMjUsMjUsMjUsMjUs MTAwOSwyNSwyNSwyNSwyM30iICJ7byxvLG8sbyxvLG8sbyxvLG8sbyxvLG8s byxvLG8sb30iICJ7bmFtZSxzZXR0aW5nLHVuaXQsY2F0ZWdvcnksc2hvcnRf ZGVzYyxleHRyYV9kZXNjLGNvbnRleHQsdmFydHlwZSxzb3VyY2UsbWluX3Zh bCxtYXhfdmFsLGVudW12YWxzLGJvb3RfdmFsLHJlc2V0X3ZhbCxzb3VyY2Vm aWxlLHNvdXJjZWxpbmV9IiBfbnVsbF8gc2hvd19hbGxfc2V0dGluZ3MgX251 bGxfIF9udWxsXyBfbnVsbF8gKSk7CiAgREVTQ1IoIlNIT1cgQUxMIGFzIGEg ZnVuY3Rpb24iKTsKKyBEQVRBKGluc2VydCBPSUQgPSAzNTgyICggIHBnX2hi YV9zZXR0aW5ncyAgUEdOU1AgUEdVSUQgMTIgMSAxMDAwIDAgMCBmIGYgZiBm IHQgdCBzIDAgMCAyMjQ5ICIiICJ7MjUsMTAwOSwxMDA5LDg2OSw4NjksMjUs MjUsMjUsMTAwOSwyM30iICJ7byxvLG8sbyxvLG8sbyxvLG8sb30iICJ7dHlw ZSxkYXRhYmFzZSx1c2VyLGFkZHJlc3MsbWFzayxjb21wYXJlX21ldGhvZCxo b3N0bmFtZSxtZXRob2Qsb3B0aW9ucyxsaW5lX251bWJlcn0iIF9udWxsXyBo YmFfc2V0dGluZ3MgX251bGxfIF9udWxsXyBfbnVsbF8gKSk7CisgREVTQ1Io InZpZXcgY2xpZW50IGF1dGhlbnRpY2F0aW9uIHNldHRpbmdzIik7CiAgREFU QShpbnNlcnQgT0lEID0gMTM3MSAoICBwZ19sb2NrX3N0YXR1cyAgIFBHTlNQ IFBHVUlEIDEyIDEgMTAwMCAwIDAgZiBmIGYgZiB0IHQgdiAwIDAgMjI0OSAi IiAiezI1LDI2LDI2LDIzLDIxLDI1LDI4LDI2LDI2LDIxLDI1LDIzLDI1LDE2 LDE2fSIgIntvLG8sbyxvLG8sbyxvLG8sbyxvLG8sbyxvLG8sb30iICJ7bG9j a3R5cGUsZGF0YWJhc2UscmVsYXRpb24scGFnZSx0dXBsZSx2aXJ0dWFseGlk LHRyYW5zYWN0aW9uaWQsY2xhc3NpZCxvYmppZCxvYmpzdWJpZCx2aXJ0dWFs dHJhbnNhY3Rpb24scGlkLG1vZGUsZ3JhbnRlZCxmYXN0cGF0aH0iIF9udWxs XyBwZ19sb2NrX3N0YXR1cyBfbnVsbF8gX251bGxfIF9udWxsXyApKTsKICBE RVNDUigidmlldyBzeXN0ZW0gbG9jayBpbmZvcm1hdGlvbiIpOwogIERBVEEo aW5zZXJ0IE9JRCA9IDEwNjUgKCAgcGdfcHJlcGFyZWRfeGFjdCBQR05TUCBQ R1VJRCAxMiAxIDEwMDAgMCAwIGYgZiBmIGYgdCB0IHYgMCAwIDIyNDkgIiIg InsyOCwyNSwxMTg0LDI2LDI2fSIgIntvLG8sbyxvLG99IiAie3RyYW5zYWN0 aW9uLGdpZCxwcmVwYXJlZCxvd25lcmlkLGRiaWR9IiBfbnVsbF8gcGdfcHJl cGFyZWRfeGFjdCBfbnVsbF8gX251bGxfIF9udWxsXyApKTsKKioqIGEvc3Jj L2luY2x1ZGUvbGlicHEvaGJhLmgKLS0tIGIvc3JjL2luY2x1ZGUvbGlicHEv aGJhLmgKKioqKioqKioqKioqKioqCioqKiAxMDMsMTA3ICoqKiogZXh0ZXJu IGludCBjaGVja191c2VybWFwKGNvbnN0IGNoYXIgKnVzZXJtYXBfbmFtZSwK ICAJCQkgIGNvbnN0IGNoYXIgKnBnX3JvbGUsIGNvbnN0IGNoYXIgKmF1dGhf dXNlciwKICAJCQkgIGJvb2wgY2FzZV9zZW5zaXRpdmUpOwogIGV4dGVybiBi b29sIHBnX2lzYmxhbmsoY29uc3QgY2hhciBjKTsKLSAKICAjZW5kaWYgICAv KiBIQkFfSCAqLwotLS0gMTAzLDEwNiAtLS0tCioqKiBhL3NyYy9pbmNsdWRl L3V0aWxzL2J1aWx0aW5zLmgKLS0tIGIvc3JjL2luY2x1ZGUvdXRpbHMvYnVp bHRpbnMuaAoqKioqKioqKioqKioqKioKKioqIDEwOTAsMTA5NSAqKioqIGV4 dGVybiBEYXR1bSBxdW90ZV9udWxsYWJsZShQR19GVU5DVElPTl9BUkdTKTsK LS0tIDEwOTAsMTA5NiAtLS0tCiAgZXh0ZXJuIERhdHVtIHNob3dfY29uZmln X2J5X25hbWUoUEdfRlVOQ1RJT05fQVJHUyk7CiAgZXh0ZXJuIERhdHVtIHNl dF9jb25maWdfYnlfbmFtZShQR19GVU5DVElPTl9BUkdTKTsKICBleHRlcm4g RGF0dW0gc2hvd19hbGxfc2V0dGluZ3MoUEdfRlVOQ1RJT05fQVJHUyk7Cisg ZXh0ZXJuIERhdHVtIGhiYV9zZXR0aW5ncyhQR19GVU5DVElPTl9BUkdTKTsK ICAKICAvKiBsb2NrZnVuY3MuYyAqLwogIGV4dGVybiBEYXR1bSBwZ19sb2Nr X3N0YXR1cyhQR19GVU5DVElPTl9BUkdTKTsKKioqIGEvc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9ydWxlcy5vdXQKLS0tIGIvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9ydWxlcy5vdXQKKioqKioqKioqKioqKioqCioqKiAxMzE1 LDEzMjAgKioqKiBwZ19ncm91cHwgU0VMRUNUIHBnX2F1dGhpZC5yb2xuYW1l IEFTIGdyb25hbWUsCi0tLSAxMzE1LDEzMzEgLS0tLQogICAgICAgICAgICBX SEVSRSAocGdfYXV0aF9tZW1iZXJzLnJvbGVpZCA9IHBnX2F1dGhpZC5vaWQp KSBBUyBncm9saXN0CiAgICAgRlJPTSBwZ19hdXRoaWQKICAgIFdIRVJFIChO T1QgcGdfYXV0aGlkLnJvbGNhbmxvZ2luKTsKKyBwZ19oYmFfc2V0dGluZ3N8 IFNFTEVDVCBhLnR5cGUsCisgICAgIGEuZGF0YWJhc2UsCisgICAgIGEuInVz ZXIiLAorICAgICBhLmFkZHJlc3MsCisgICAgIGEubWFzaywKKyAgICAgYS5j b21wYXJlX21ldGhvZCwKKyAgICAgYS5ob3N0bmFtZSwKKyAgICAgYS5tZXRo b2QsCisgICAgIGEub3B0aW9ucywKKyAgICAgYS5saW5lX251bWJlcgorICAg IEZST00gcGdfaGJhX3NldHRpbmdzKCkgYSh0eXBlLCBkYXRhYmFzZSwgInVz ZXIiLCBhZGRyZXNzLCBtYXNrLCBjb21wYXJlX21ldGhvZCwgaG9zdG5hbWUs IG1ldGhvZCwgb3B0aW9ucywgbGluZV9udW1iZXIpOwogIHBnX2luZGV4ZXN8 IFNFTEVDVCBuLm5zcG5hbWUgQVMgc2NoZW1hbmFtZSwKICAgICAgYy5yZWxu YW1lIEFTIHRhYmxlbmFtZSwKICAgICAgaS5yZWxuYW1lIEFTIGluZGV4bmFt ZSwK --f46d04428d1c8a78a4051050d3ba Content-Type: text/plain Content-Disposition: inline Content-Transfer-Encoding: 8bit MIME-Version: 1.0 -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers --f46d04428d1c8a78a4051050d3ba--