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 1rCoDi-00HJrB-T6 for pgsql-hackers@arkaria.postgresql.org; Mon, 11 Dec 2023 21:53:47 +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 1rCoDh-00HBE6-GN for pgsql-hackers@arkaria.postgresql.org; Mon, 11 Dec 2023 21:53:45 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rCoDg-00HBDw-Rs for pgsql-hackers@lists.postgresql.org; Mon, 11 Dec 2023 21:53:45 +0000 Received: from mail-lf1-x12b.google.com ([2a00:1450:4864:20::12b]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1rCoDe-009w1k-5K for pgsql-hackers@postgresql.org; Mon, 11 Dec 2023 21:53:43 +0000 Received: by mail-lf1-x12b.google.com with SMTP id 2adb3069b0e04-50c0f13ea11so5691476e87.3 for ; Mon, 11 Dec 2023 13:53:41 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1702331620; x=1702936420; darn=postgresql.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=RfkS2v7YEMthssff1d43zC4zRgPoLSfqiNaXOXWiMbQ=; b=LQII4sr5an1DmITh8sySavkNCMDbVkLGR4vtG+cfTNYUsvDzQtbQx02xiqCup2cBm6 fYLNZBp3QLG5J7cv8jz8JX7RF0ZTO0r4qknuvsNW6bEcdXsz8aQglTPdkkA0HRZG8nJO OpgiYeHHedUIH6ECuGgP4ctNjC3qhX3PIqfNTsQH1XLRihb6cAJkZFC2pdeP2QsWkNwF crHcwumizYZ6l+8bAIHhHbhcXUgI2c1vqJQZbEIe9KDLe476VJUxk+kDDOVQ+hbuhdCb CQKHfBZ8UFukegGdvRLhXM3U95DBU3iEGHRrqKENHlzSOTeh3thzeQ6xxrsKaX2zpJPB IFtQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1702331620; x=1702936420; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=RfkS2v7YEMthssff1d43zC4zRgPoLSfqiNaXOXWiMbQ=; b=M3OVQOlkC7SVTYb+9QggI2wPQMLApZE88iu0Rn6z6Rk2DVVrCxz8edwQ0tBmsgDYSU CPPBLvbfQmBghG9pKeOLUvRHGr9LZfmLykcvYzaWY6gcQTtNKjn71CHtHiCgNhg0+67S onq3UslU6yGVCMldbUacItkH8xcl2UaBQSXXYfRV8My7QrcI75258TEePTia6bfQ5D59 cjuDr2UkdZ44pgyfEoUnujxQlg8bM04+C3X9ecXODktIrfNW4Wy7pFkG0QuSlcHyZ9pi LAYc+PgFYi+qOguwONM7SkR0BmJWOHStgqCLk3XEUU6rrODZuABzwjP4JiI9RXLfF53F DTUA== X-Gm-Message-State: AOJu0Yy0cjQBwv6EAlqgwAT/q93aDoe314C48uNnn2Z6fC+zVk+MG97m 82eU2lrptaswr5mw+bSoXb+Tqcj/9UVJGHVgwn1eU0WULIU4Qw== X-Google-Smtp-Source: AGHT+IHUXkZl5F+/o3mb74A5GrTnOA0UG5kb7vqFEe8e/6PuR+nNP928vgO0P20ENmjyQlcUFCnp04SNI4DkvLeZyKY= X-Received: by 2002:ac2:5f0b:0:b0:50b:e5cd:aa8e with SMTP id 11-20020ac25f0b000000b0050be5cdaa8emr1783140lfq.113.1702331619739; Mon, 11 Dec 2023 13:53:39 -0800 (PST) MIME-Version: 1.0 From: Greg Sabino Mullane Date: Mon, 11 Dec 2023 16:53:01 -0500 Message-ID: Subject: Adding comments to help understand psql hidden queries To: pgsql-hackers Content-Type: multipart/mixed; boundary="0000000000007c48f6060c42f7be" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000007c48f6060c42f7be Content-Type: multipart/alternative; boundary="0000000000007c48f5060c42f7bc" --0000000000007c48f5060c42f7bc Content-Type: text/plain; charset="UTF-8" The use of the --echo-hidden flag in psql is used to show people the way psql performs its magic for its backslash commands. None of them has more magic than "\d relation", but it suffers from needing a lot of separate queries to gather all of the information it needs. Unfortunately, those queries can get overwhelming and hard to figure out which one does what, especially for those not already very familiar with the system catalogs. Attached is a patch to add a small SQL comment to the top of each SELECT query inside describeOneTableDetail. All other functions use a single query, and thus need no additional context. But "\d mytable" has the potential to run over a dozen SQL queries! The new format looks like this: /******** QUERY *********/ /* Get information about row-level policies */ SELECT pol.polname, pol.polpermissive, CASE WHEN pol.polroles = '{0}' THEN NULL ELSE pg_catalog.array_to_string(array(select rolname from pg_catalog.pg_roles where oid = any (pol.polroles) order by 1),',') END, pg_catalog.pg_get_expr(pol.polqual, pol.polrelid), pg_catalog.pg_get_expr(pol.polwithcheck, pol.polrelid), CASE pol.polcmd WHEN 'r' THEN 'SELECT' WHEN 'a' THEN 'INSERT' WHEN 'w' THEN 'UPDATE' WHEN 'd' THEN 'DELETE' END AS cmd FROM pg_catalog.pg_policy pol WHERE pol.polrelid = '134384' ORDER BY 1; /************************/ Cheers, Greg --0000000000007c48f5060c42f7bc Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
The use of the --echo-hidden= flag in psql is used to show people the way psql performs its magic for it= s backslash commands. None of them has more magic than "\d relation&qu= ot;, but it suffers from needing a lot of separate queries to gather all of= the information it needs. Unfortunately, those queries can get overwhelmin= g and hard to figure out which one does what, especially for those not alre= ady very familiar with the system catalogs. Attached is a patch to add a sm= all SQL comment to the top of each SELECT query inside describeOneTableDeta= il. All other=C2=A0functions use a single query, and thus need no additiona= l context. But "\d mytable" has the potential to run over a dozen= SQL queries! The new format looks like this:

/******** QUERY *********/
/* Get information about row-level policies */
SELECT pol.polname, = pol.polpermissive,
=C2=A0 CASE WHEN pol.polroles =3D '{0}' THEN = NULL ELSE pg_catalog.array_to_string(array(select rolname from pg_catalog.p= g_roles where oid =3D any (pol.polroles) order by 1),',') END,
= =C2=A0 pg_catalog.pg_get_expr(pol.polqual, pol.polrelid),
=C2=A0 pg_cata= log.pg_get_expr(pol.polwithcheck, pol.polrelid),
=C2=A0 CASE pol.polcmd<= br>=C2=A0 =C2=A0 WHEN 'r' THEN 'SELECT'
=C2=A0 =C2=A0 WH= EN 'a' THEN 'INSERT'
=C2=A0 =C2=A0 WHEN 'w' THEN= 'UPDATE'
=C2=A0 =C2=A0 WHEN 'd' THEN 'DELETE'=C2=A0 =C2=A0 END AS cmd
FROM pg_catalog.pg_policy pol
WHERE pol.po= lrelid =3D '134384' ORDER BY 1;
/************************/

Cheers,
Greg

--0000000000007c48f5060c42f7bc-- --0000000000007c48f6060c42f7be Content-Type: application/octet-stream; name="psql.echo.hidden.comments.v1.patch" Content-Disposition: attachment; filename="psql.echo.hidden.comments.v1.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lq1g65lj0 ZGlmZiAtLWdpdCBhL3NyYy9iaW4vcHNxbC9kZXNjcmliZS5jIGIvc3JjL2Jpbi9wc3FsL2Rlc2Ny aWJlLmMKaW5kZXggNTA3N2U3YjM1OC4uMzIzZjhkNTE2YyAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9w c3FsL2Rlc2NyaWJlLmMKKysrIGIvc3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmMKQEAgLTE1ODIsOSAr MTU4MiwxMCBAQCBkZXNjcmliZU9uZVRhYmxlRGV0YWlscyhjb25zdCBjaGFyICpzY2hlbWFuYW1l LAogCWluaXRQUUV4cEJ1ZmZlcigmdG1wYnVmKTsKIAogCS8qIEdldCBnZW5lcmFsIHRhYmxlIGlu Zm8gKi8KKwlwcmludGZQUUV4cEJ1ZmZlcigmYnVmLCBfKCIvKiBHZXQgZ2VuZXJhbCB0YWJsZSBp bmZvcm1hdGlvbiAqL1xuIikpOwogCWlmIChwc2V0LnN2ZXJzaW9uID49IDEyMDAwMCkKIAl7Ci0J CXByaW50ZlBRRXhwQnVmZmVyKCZidWYsCisJCWFwcGVuZFBRRXhwQnVmZmVyKCZidWYsCiAJCQkJ CQkgICJTRUxFQ1QgYy5yZWxjaGVja3MsIGMucmVsa2luZCwgYy5yZWxoYXNpbmRleCwgYy5yZWxo YXNydWxlcywgIgogCQkJCQkJICAiYy5yZWxoYXN0cmlnZ2VycywgYy5yZWxyb3dzZWN1cml0eSwg Yy5yZWxmb3JjZXJvd3NlY3VyaXR5LCAiCiAJCQkJCQkgICJmYWxzZSBBUyByZWxoYXNvaWRzLCBj LnJlbGlzcGFydGl0aW9uLCAlcywgYy5yZWx0YWJsZXNwYWNlLCAiCkBAIC0xNjAyLDcgKzE2MDMs NyBAQCBkZXNjcmliZU9uZVRhYmxlRGV0YWlscyhjb25zdCBjaGFyICpzY2hlbWFuYW1lLAogCX0K IAllbHNlIGlmIChwc2V0LnN2ZXJzaW9uID49IDEwMDAwMCkKIAl7Ci0JCXByaW50ZlBRRXhwQnVm ZmVyKCZidWYsCisJCWFwcGVuZFBRRXhwQnVmZmVyKCZidWYsCiAJCQkJCQkgICJTRUxFQ1QgYy5y ZWxjaGVja3MsIGMucmVsa2luZCwgYy5yZWxoYXNpbmRleCwgYy5yZWxoYXNydWxlcywgIgogCQkJ CQkJICAiYy5yZWxoYXN0cmlnZ2VycywgYy5yZWxyb3dzZWN1cml0eSwgYy5yZWxmb3JjZXJvd3Nl Y3VyaXR5LCAiCiAJCQkJCQkgICJjLnJlbGhhc29pZHMsIGMucmVsaXNwYXJ0aXRpb24sICVzLCBj LnJlbHRhYmxlc3BhY2UsICIKQEAgLTE2MTksNyArMTYyMCw3IEBAIGRlc2NyaWJlT25lVGFibGVE ZXRhaWxzKGNvbnN0IGNoYXIgKnNjaGVtYW5hbWUsCiAJfQogCWVsc2UgaWYgKHBzZXQuc3ZlcnNp b24gPj0gOTA1MDApCiAJewotCQlwcmludGZQUUV4cEJ1ZmZlcigmYnVmLAorCQlhcHBlbmRQUUV4 cEJ1ZmZlcigmYnVmLAogCQkJCQkJICAiU0VMRUNUIGMucmVsY2hlY2tzLCBjLnJlbGtpbmQsIGMu cmVsaGFzaW5kZXgsIGMucmVsaGFzcnVsZXMsICIKIAkJCQkJCSAgImMucmVsaGFzdHJpZ2dlcnMs IGMucmVscm93c2VjdXJpdHksIGMucmVsZm9yY2Vyb3dzZWN1cml0eSwgIgogCQkJCQkJICAiYy5y ZWxoYXNvaWRzLCBmYWxzZSBhcyByZWxpc3BhcnRpdGlvbiwgJXMsIGMucmVsdGFibGVzcGFjZSwg IgpAQCAtMTYzNiw3ICsxNjM3LDcgQEAgZGVzY3JpYmVPbmVUYWJsZURldGFpbHMoY29uc3QgY2hh ciAqc2NoZW1hbmFtZSwKIAl9CiAJZWxzZSBpZiAocHNldC5zdmVyc2lvbiA+PSA5MDQwMCkKIAl7 Ci0JCXByaW50ZlBRRXhwQnVmZmVyKCZidWYsCisJCWFwcGVuZFBRRXhwQnVmZmVyKCZidWYsCiAJ CQkJCQkgICJTRUxFQ1QgYy5yZWxjaGVja3MsIGMucmVsa2luZCwgYy5yZWxoYXNpbmRleCwgYy5y ZWxoYXNydWxlcywgIgogCQkJCQkJICAiYy5yZWxoYXN0cmlnZ2VycywgZmFsc2UsIGZhbHNlLCBj LnJlbGhhc29pZHMsICIKIAkJCQkJCSAgImZhbHNlIGFzIHJlbGlzcGFydGl0aW9uLCAlcywgYy5y ZWx0YWJsZXNwYWNlLCAiCkBAIC0xNjUzLDcgKzE2NTQsNyBAQCBkZXNjcmliZU9uZVRhYmxlRGV0 YWlscyhjb25zdCBjaGFyICpzY2hlbWFuYW1lLAogCX0KIAllbHNlCiAJewotCQlwcmludGZQUUV4 cEJ1ZmZlcigmYnVmLAorCQlhcHBlbmRQUUV4cEJ1ZmZlcigmYnVmLAogCQkJCQkJICAiU0VMRUNU IGMucmVsY2hlY2tzLCBjLnJlbGtpbmQsIGMucmVsaGFzaW5kZXgsIGMucmVsaGFzcnVsZXMsICIK IAkJCQkJCSAgImMucmVsaGFzdHJpZ2dlcnMsIGZhbHNlLCBmYWxzZSwgYy5yZWxoYXNvaWRzLCAi CiAJCQkJCQkgICJmYWxzZSBhcyByZWxpc3BhcnRpdGlvbiwgJXMsIGMucmVsdGFibGVzcGFjZSwg IgpAQCAtMTcxNCw5ICsxNzE1LDEwIEBAIGRlc2NyaWJlT25lVGFibGVEZXRhaWxzKGNvbnN0IGNo YXIgKnNjaGVtYW5hbWUsCiAJCXByaW50UXVlcnlPcHQgbXlvcHQgPSBwc2V0LnBvcHQ7CiAJCWNo YXIJICAgKmZvb3RlcnNbMl0gPSB7TlVMTCwgTlVMTH07CiAKKwkJcHJpbnRmUFFFeHBCdWZmZXIo JmJ1ZiwgXygiLyogR2V0IGdlbmVyYWwgc2VxdWVuY2UgaW5mb3JtYXRpb24gKi9cbiIpKTsKIAkJ aWYgKHBzZXQuc3ZlcnNpb24gPj0gMTAwMDAwKQogCQl7Ci0JCQlwcmludGZQUUV4cEJ1ZmZlcigm YnVmLAorCQkJYXBwZW5kUFFFeHBCdWZmZXIoJmJ1ZiwKIAkJCQkJCQkgICJTRUxFQ1QgcGdfY2F0 YWxvZy5mb3JtYXRfdHlwZShzZXF0eXBpZCwgTlVMTCkgQVMgXCIlc1wiLFxuIgogCQkJCQkJCSAg IiAgICAgICBzZXFzdGFydCBBUyBcIiVzXCIsXG4iCiAJCQkJCQkJICAiICAgICAgIHNlcW1pbiBB UyBcIiVzXCIsXG4iCkBAIC0xNzQwLDcgKzE3NDIsNyBAQCBkZXNjcmliZU9uZVRhYmxlRGV0YWls cyhjb25zdCBjaGFyICpzY2hlbWFuYW1lLAogCQl9CiAJCWVsc2UKIAkJewotCQkJcHJpbnRmUFFF eHBCdWZmZXIoJmJ1ZiwKKwkJCWFwcGVuZFBRRXhwQnVmZmVyKCZidWYsCiAJCQkJCQkJICAiU0VM RUNUICdiaWdpbnQnIEFTIFwiJXNcIixcbiIKIAkJCQkJCQkgICIgICAgICAgc3RhcnRfdmFsdWUg QVMgXCIlc1wiLFxuIgogCQkJCQkJCSAgIiAgICAgICBtaW5fdmFsdWUgQVMgXCIlc1wiLFxuIgpA QCAtMTc2Nyw3ICsxNzY5LDggQEAgZGVzY3JpYmVPbmVUYWJsZURldGFpbHMoY29uc3QgY2hhciAq c2NoZW1hbmFtZSwKIAkJCWdvdG8gZXJyb3JfcmV0dXJuOwogCiAJCS8qIEdldCB0aGUgY29sdW1u IHRoYXQgb3ducyB0aGlzIHNlcXVlbmNlICovCi0JCXByaW50ZlBRRXhwQnVmZmVyKCZidWYsICJT RUxFQ1QgcGdfY2F0YWxvZy5xdW90ZV9pZGVudChuc3BuYW1lKSB8fCAnLicgfHwiCisJCXByaW50 ZlBRRXhwQnVmZmVyKCZidWYsIF8oIi8qIEdldCB0aGUgY29sdW1uIHRoYXQgb3ducyB0aGlzIHNl cXVlbmNlICovXG4iKSk7CisJCWFwcGVuZFBRRXhwQnVmZmVyKCZidWYsICJTRUxFQ1QgcGdfY2F0 YWxvZy5xdW90ZV9pZGVudChuc3BuYW1lKSB8fCAnLicgfHwiCiAJCQkJCQkgICJcbiAgIHBnX2Nh dGFsb2cucXVvdGVfaWRlbnQocmVsbmFtZSkgfHwgJy4nIHx8IgogCQkJCQkJICAiXG4gICBwZ19j YXRhbG9nLnF1b3RlX2lkZW50KGF0dG5hbWUpLCIKIAkJCQkJCSAgIlxuICAgZC5kZXB0eXBlIgpA QCAtMTg0Niw3ICsxODQ5LDggQEAgZGVzY3JpYmVPbmVUYWJsZURldGFpbHMoY29uc3QgY2hhciAq c2NoZW1hbmFtZSwKIAkgKiBkdXBsaWNhdGl2ZSB0ZXN0IGxvZ2ljIGJlbG93LgogCSAqLwogCWNv bHMgPSAwOwotCXByaW50ZlBRRXhwQnVmZmVyKCZidWYsICJTRUxFQ1QgYS5hdHRuYW1lIik7CisJ cHJpbnRmUFFFeHBCdWZmZXIoJmJ1ZiwgXygiLyogR2V0IGluZm9ybWF0aW9uIGFib3V0IGVhY2gg Y29sdW1uICovXG4iKSk7CisJYXBwZW5kUFFFeHBCdWZmZXIoJmJ1ZiwgIlNFTEVDVCBhLmF0dG5h bWUiKTsKIAlhdHRuYW1lX2NvbCA9IGNvbHMrKzsKIAlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmYnVm LCAiLFxuICBwZ19jYXRhbG9nLmZvcm1hdF90eXBlKGEuYXR0dHlwaWQsIGEuYXR0dHlwbW9kKSIp OwogCWF0dHR5cGVfY29sID0gY29scysrOwpAQCAtMjE0Niw3ICsyMTUwLDggQEAgZGVzY3JpYmVP bmVUYWJsZURldGFpbHMoY29uc3QgY2hhciAqc2NoZW1hbmFtZSwKIAkJLyogRm9vdGVyIGluZm9y bWF0aW9uIGZvciBhIHBhcnRpdGlvbiBjaGlsZCB0YWJsZSAqLwogCQlQR3Jlc3VsdCAgICpyZXN1 bHQ7CiAKLQkJcHJpbnRmUFFFeHBCdWZmZXIoJmJ1ZiwKKwkJcHJpbnRmUFFFeHBCdWZmZXIoJmJ1 ZiwgXygiLyogR2V0IHBhcnRpdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhpcyB0YWJsZSAqL1xuIikp OworCQlhcHBlbmRQUUV4cEJ1ZmZlcigmYnVmLAogCQkJCQkJICAiU0VMRUNUIGluaHBhcmVudDo6 cGdfY2F0YWxvZy5yZWdjbGFzcyxcbiIKIAkJCQkJCSAgIiAgcGdfY2F0YWxvZy5wZ19nZXRfZXhw cihjLnJlbHBhcnRib3VuZCwgYy5vaWQpLFxuICAiKTsKIApAQCAtMjIwMSw3ICsyMjA2LDggQEAg ZGVzY3JpYmVPbmVUYWJsZURldGFpbHMoY29uc3QgY2hhciAqc2NoZW1hbmFtZSwKIAkJLyogRm9v dGVyIGluZm9ybWF0aW9uIGZvciBhIHBhcnRpdGlvbmVkIHRhYmxlIChwYXJ0aXRpb25pbmcgcGFy ZW50KSAqLwogCQlQR3Jlc3VsdCAgICpyZXN1bHQ7CiAKLQkJcHJpbnRmUFFFeHBCdWZmZXIoJmJ1 ZiwKKwkJcHJpbnRmUFFFeHBCdWZmZXIoJmJ1ZiwgXygiLyogR2V0IHRoZSBwYXJ0aXRpb24ga2V5 IGZvciB0aGlzIHRhYmxlICovXG4iKSk7CisJCWFwcGVuZFBRRXhwQnVmZmVyKCZidWYsCiAJCQkJ CQkgICJTRUxFQ1QgcGdfY2F0YWxvZy5wZ19nZXRfcGFydGtleWRlZignJXMnOjpwZ19jYXRhbG9n Lm9pZCk7IiwKIAkJCQkJCSAgb2lkKTsKIAkJcmVzdWx0ID0gUFNRTGV4ZWMoYnVmLmRhdGEpOwpA QCAtMjIyMyw3ICsyMjI5LDggQEAgZGVzY3JpYmVPbmVUYWJsZURldGFpbHMoY29uc3QgY2hhciAq c2NoZW1hbmFtZSwKIAkJLyogRm9yIGEgVE9BU1QgdGFibGUsIHByaW50IG5hbWUgb2Ygb3duaW5n IHRhYmxlICovCiAJCVBHcmVzdWx0ICAgKnJlc3VsdDsKIAotCQlwcmludGZQUUV4cEJ1ZmZlcigm YnVmLAorCQlwcmludGZQUUV4cEJ1ZmZlcigmYnVmLCBfKCIvKiBGaW5kIHdoaWNoIHRhYmxlIG93 bnMgdGhpcyBUT0FTVCB0YWJsZSAqL1xuIikpOworCQlhcHBlbmRQUUV4cEJ1ZmZlcigmYnVmLAog CQkJCQkJICAiU0VMRUNUIG4ubnNwbmFtZSwgYy5yZWxuYW1lXG4iCiAJCQkJCQkgICJGUk9NIHBn X2NhdGFsb2cucGdfY2xhc3MgYyIKIAkJCQkJCSAgIiBKT0lOIHBnX2NhdGFsb2cucGdfbmFtZXNw YWNlIG4iCkBAIC0yMjUxLDcgKzIyNTgsOCBAQCBkZXNjcmliZU9uZVRhYmxlRGV0YWlscyhjb25z dCBjaGFyICpzY2hlbWFuYW1lLAogCQkvKiBGb290ZXIgaW5mb3JtYXRpb24gYWJvdXQgYW4gaW5k ZXggKi8KIAkJUEdyZXN1bHQgICAqcmVzdWx0OwogCi0JCXByaW50ZlBRRXhwQnVmZmVyKCZidWYs CisJCXByaW50ZlBRRXhwQnVmZmVyKCZidWYsIF8oIi8qIEdldCBpbmZvcm1hdGlvbiBhYm91dCB0 aGlzIGluZGV4ICovXG4iKSk7CisJCWFwcGVuZFBRRXhwQnVmZmVyKCZidWYsCiAJCQkJCQkgICJT RUxFQ1QgaS5pbmRpc3VuaXF1ZSwgaS5pbmRpc3ByaW1hcnksIGkuaW5kaXNjbHVzdGVyZWQsICIK IAkJCQkJCSAgImkuaW5kaXN2YWxpZCxcbiIKIAkJCQkJCSAgIiAgKE5PVCBpLmluZGltbWVkaWF0 ZSkgQU5EICIKQEAgLTIzNjgsNyArMjM3Niw4IEBAIGRlc2NyaWJlT25lVGFibGVEZXRhaWxzKGNv bnN0IGNoYXIgKnNjaGVtYW5hbWUsCiAJCS8qIHByaW50IGluZGV4ZXMgKi8KIAkJaWYgKHRhYmxl aW5mby5oYXNpbmRleCkKIAkJewotCQkJcHJpbnRmUFFFeHBCdWZmZXIoJmJ1ZiwKKwkJCXByaW50 ZlBRRXhwQnVmZmVyKCZidWYsIF8oIi8qIEdldCBpbmZvcm1hdGlvbiBhYm91dCBlYWNoIGluZGV4 ICovXG4iKSk7CisJCQlhcHBlbmRQUUV4cEJ1ZmZlcigmYnVmLAogCQkJCQkJCSAgIlNFTEVDVCBj Mi5yZWxuYW1lLCBpLmluZGlzcHJpbWFyeSwgaS5pbmRpc3VuaXF1ZSwgIgogCQkJCQkJCSAgImku aW5kaXNjbHVzdGVyZWQsIGkuaW5kaXN2YWxpZCwgIgogCQkJCQkJCSAgInBnX2NhdGFsb2cucGdf Z2V0X2luZGV4ZGVmKGkuaW5kZXhyZWxpZCwgMCwgdHJ1ZSksXG4gICIKQEAgLTI0OTgsNiArMjUw Nyw4IEBAIGRlc2NyaWJlT25lVGFibGVEZXRhaWxzKGNvbnN0IGNoYXIgKnNjaGVtYW5hbWUsCiAJ CWlmICh0YWJsZWluZm8uaGFzdHJpZ2dlcnMgfHwKIAkJCXRhYmxlaW5mby5yZWxraW5kID09IFJF TEtJTkRfUEFSVElUSU9ORURfVEFCTEUpCiAJCXsKKwkJCXByaW50ZlBRRXhwQnVmZmVyKCZidWYs IF8oIi8qIEdldCBpbmZvcm1hdGlvbiBhYm91dCBmb3JlaWduIGtleSBjb25zdHJhaW50cyAqL1xu IikpOworCiAJCQlpZiAocHNldC5zdmVyc2lvbiA+PSAxMjAwMDAgJiYKIAkJCQkodGFibGVpbmZv LmlzcGFydGl0aW9uIHx8IHRhYmxlaW5mby5yZWxraW5kID09IFJFTEtJTkRfUEFSVElUSU9ORURf VEFCTEUpKQogCQkJewpAQCAtMjUwNSw3ICsyNTE2LDcgQEAgZGVzY3JpYmVPbmVUYWJsZURldGFp bHMoY29uc3QgY2hhciAqc2NoZW1hbmFtZSwKIAkJCQkgKiBQdXQgdGhlIGNvbnN0cmFpbnRzIGRl ZmluZWQgaW4gdGhpcyB0YWJsZSBmaXJzdCwgZm9sbG93ZWQKIAkJCQkgKiBieSB0aGUgY29uc3Ry YWludHMgZGVmaW5lZCBpbiBhbmNlc3RvciBwYXJ0aXRpb25lZCB0YWJsZXMuCiAJCQkJICovCi0J CQkJcHJpbnRmUFFFeHBCdWZmZXIoJmJ1ZiwKKwkJCQlhcHBlbmRQUUV4cEJ1ZmZlcigmYnVmLAog CQkJCQkJCQkgICJTRUxFQ1QgY29ucmVsaWQgPSAnJXMnOjpwZ19jYXRhbG9nLnJlZ2NsYXNzIEFT IHNhbWV0YWJsZSxcbiIKIAkJCQkJCQkJICAiICAgICAgIGNvbm5hbWUsXG4iCiAJCQkJCQkJCSAg IiAgICAgICBwZ19jYXRhbG9nLnBnX2dldF9jb25zdHJhaW50ZGVmKG9pZCwgdHJ1ZSkgQVMgY29u ZGVmLFxuIgpAQCAtMjUxOCw3ICsyNTI5LDcgQEAgZGVzY3JpYmVPbmVUYWJsZURldGFpbHMoY29u c3QgY2hhciAqc2NoZW1hbmFtZSwKIAkJCX0KIAkJCWVsc2UKIAkJCXsKLQkJCQlwcmludGZQUUV4 cEJ1ZmZlcigmYnVmLAorCQkJCWFwcGVuZFBRRXhwQnVmZmVyKCZidWYsCiAJCQkJCQkJCSAgIlNF TEVDVCB0cnVlIGFzIHNhbWV0YWJsZSwgY29ubmFtZSxcbiIKIAkJCQkJCQkJICAiICBwZ19jYXRh bG9nLnBnX2dldF9jb25zdHJhaW50ZGVmKHIub2lkLCB0cnVlKSBhcyBjb25kZWYsXG4iCiAJCQkJ CQkJCSAgIiAgY29ucmVsaWQ6OnBnX2NhdGFsb2cucmVnY2xhc3MgQVMgb250YWJsZVxuIgpAQCAt MjU3Miw5ICsyNTgzLDEwIEBAIGRlc2NyaWJlT25lVGFibGVEZXRhaWxzKGNvbnN0IGNoYXIgKnNj aGVtYW5hbWUsCiAJCWlmICh0YWJsZWluZm8uaGFzdHJpZ2dlcnMgfHwKIAkJCXRhYmxlaW5mby5y ZWxraW5kID09IFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUpCiAJCXsKKwkJCXByaW50ZlBRRXhw QnVmZmVyKCZidWYsIF8oIi8qIEdldCBpbmZvcm1hdGlvbiBhYm91dCBpbmNvbWluZyBmb3JlaWdu IGtleSByZWZlcmVuY2VzICovXG4iKSk7CiAJCQlpZiAocHNldC5zdmVyc2lvbiA+PSAxMjAwMDAp CiAJCQl7Ci0JCQkJcHJpbnRmUFFFeHBCdWZmZXIoJmJ1ZiwKKwkJCQlhcHBlbmRQUUV4cEJ1ZmZl cigmYnVmLAogCQkJCQkJCQkgICJTRUxFQ1QgY29ubmFtZSwgY29ucmVsaWQ6OnBnX2NhdGFsb2cu cmVnY2xhc3MgQVMgb250YWJsZSxcbiIKIAkJCQkJCQkJICAiICAgICAgIHBnX2NhdGFsb2cucGdf Z2V0X2NvbnN0cmFpbnRkZWYob2lkLCB0cnVlKSBBUyBjb25kZWZcbiIKIAkJCQkJCQkJICAiICBG Uk9NIHBnX2NhdGFsb2cucGdfY29uc3RyYWludCBjXG4iCkBAIC0yNTg2LDcgKzI1OTgsNyBAQCBk ZXNjcmliZU9uZVRhYmxlRGV0YWlscyhjb25zdCBjaGFyICpzY2hlbWFuYW1lLAogCQkJfQogCQkJ ZWxzZQogCQkJewotCQkJCXByaW50ZlBRRXhwQnVmZmVyKCZidWYsCisJCQkJYXBwZW5kUFFFeHBC dWZmZXIoJmJ1ZiwKIAkJCQkJCQkJICAiU0VMRUNUIGNvbm5hbWUsIGNvbnJlbGlkOjpwZ19jYXRh bG9nLnJlZ2NsYXNzIEFTIG9udGFibGUsXG4iCiAJCQkJCQkJCSAgIiAgICAgICBwZ19jYXRhbG9n LnBnX2dldF9jb25zdHJhaW50ZGVmKG9pZCwgdHJ1ZSkgQVMgY29uZGVmXG4iCiAJCQkJCQkJCSAg IiAgRlJPTSBwZ19jYXRhbG9nLnBnX2NvbnN0cmFpbnRcbiIKQEAgLTI2MjQsNyArMjYzNiw4IEBA IGRlc2NyaWJlT25lVGFibGVEZXRhaWxzKGNvbnN0IGNoYXIgKnNjaGVtYW5hbWUsCiAJCS8qIHBy aW50IGFueSByb3ctbGV2ZWwgcG9saWNpZXMgKi8KIAkJaWYgKHBzZXQuc3ZlcnNpb24gPj0gOTA1 MDApCiAJCXsKLQkJCXByaW50ZlBRRXhwQnVmZmVyKCZidWYsICJTRUxFQ1QgcG9sLnBvbG5hbWUs Iik7CisJCQlwcmludGZQUUV4cEJ1ZmZlcigmYnVmLCBfKCIvKiBHZXQgaW5mb3JtYXRpb24gYWJv dXQgcm93LWxldmVsIHBvbGljaWVzICovXG4iKSk7CisJCQlhcHBlbmRQUUV4cEJ1ZmZlcigmYnVm LCAiU0VMRUNUIHBvbC5wb2xuYW1lLCIpOwogCQkJaWYgKHBzZXQuc3ZlcnNpb24gPj0gMTAwMDAw KQogCQkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZidWYsCiAJCQkJCQkJCQkgIiBwb2wucG9scGVy bWlzc2l2ZSxcbiIpOwpAQCAtMjcwNCw5ICsyNzE3LDEwIEBAIGRlc2NyaWJlT25lVGFibGVEZXRh aWxzKGNvbnN0IGNoYXIgKnNjaGVtYW5hbWUsCiAJCX0KIAogCQkvKiBwcmludCBhbnkgZXh0ZW5k ZWQgc3RhdGlzdGljcyAqLworCQlwcmludGZQUUV4cEJ1ZmZlcigmYnVmLCBfKCIvKiBHZXQgaW5m b3JtYXRpb24gYWJvdXQgZXh0ZW5kZWQgc3RhdGlzdGljcyAqL1xuIikpOwogCQlpZiAocHNldC5z dmVyc2lvbiA+PSAxNDAwMDApCiAJCXsKLQkJCXByaW50ZlBRRXhwQnVmZmVyKCZidWYsCisJCQlh cHBlbmRQUUV4cEJ1ZmZlcigmYnVmLAogCQkJCQkJCSAgIlNFTEVDVCBvaWQsICIKIAkJCQkJCQkg ICJzdHhyZWxpZDo6cGdfY2F0YWxvZy5yZWdjbGFzcywgIgogCQkJCQkJCSAgInN0eG5hbWVzcGFj ZTo6cGdfY2F0YWxvZy5yZWduYW1lc3BhY2U6OnBnX2NhdGFsb2cudGV4dCBBUyBuc3AsICIKQEAg LTI4MDMsNyArMjgxNyw3IEBAIGRlc2NyaWJlT25lVGFibGVEZXRhaWxzKGNvbnN0IGNoYXIgKnNj aGVtYW5hbWUsCiAJCX0KIAkJZWxzZSBpZiAocHNldC5zdmVyc2lvbiA+PSAxMDAwMDApCiAJCXsK LQkJCXByaW50ZlBRRXhwQnVmZmVyKCZidWYsCisJCQlhcHBlbmRQUUV4cEJ1ZmZlcigmYnVmLAog CQkJCQkJCSAgIlNFTEVDVCBvaWQsICIKIAkJCQkJCQkgICJzdHhyZWxpZDo6cGdfY2F0YWxvZy5y ZWdjbGFzcywgIgogCQkJCQkJCSAgInN0eG5hbWVzcGFjZTo6cGdfY2F0YWxvZy5yZWduYW1lc3Bh Y2UgQVMgbnNwLCAiCkBAIC0yODgyLDcgKzI4OTYsOCBAQCBkZXNjcmliZU9uZVRhYmxlRGV0YWls cyhjb25zdCBjaGFyICpzY2hlbWFuYW1lLAogCQkvKiBwcmludCBydWxlcyAqLwogCQlpZiAodGFi bGVpbmZvLmhhc3J1bGVzICYmIHRhYmxlaW5mby5yZWxraW5kICE9IFJFTEtJTkRfTUFUVklFVykK IAkJewotCQkJcHJpbnRmUFFFeHBCdWZmZXIoJmJ1ZiwKKwkJCXByaW50ZlBRRXhwQnVmZmVyKCZi dWYsIF8oIi8qIEdldCBpbmZvcm1hdGlvbiBhYm91dCBlYWNoIHJ1bGUgZm9yIHRoaXMgdGFibGUg Ki9cbiIpKTsKKwkJCWFwcGVuZFBRRXhwQnVmZmVyKCZidWYsCiAJCQkJCQkJICAiU0VMRUNUIHIu cnVsZW5hbWUsIHRyaW0odHJhaWxpbmcgJzsnIGZyb20gcGdfY2F0YWxvZy5wZ19nZXRfcnVsZWRl ZihyLm9pZCwgdHJ1ZSkpLCAiCiAJCQkJCQkJICAiZXZfZW5hYmxlZFxuIgogCQkJCQkJCSAgIkZS T00gcGdfY2F0YWxvZy5wZ19yZXdyaXRlIHJcbiIKQEAgLTI5NjUsOSArMjk4MCwxMCBAQCBkZXNj cmliZU9uZVRhYmxlRGV0YWlscyhjb25zdCBjaGFyICpzY2hlbWFuYW1lLAogCQkvKiBwcmludCBh bnkgcHVibGljYXRpb25zICovCiAJCWlmIChwc2V0LnN2ZXJzaW9uID49IDEwMDAwMCkKIAkJewor CQkJcHJpbnRmUFFFeHBCdWZmZXIoJmJ1ZiwgXygiLyogR2V0IGluZm9ybWF0aW9uIGFib3V0IGVh Y2ggcHVibGljYXRpb24gdXNpbmcgdGhpcyB0YWJsZSAqL1xuIikpOwogCQkJaWYgKHBzZXQuc3Zl cnNpb24gPj0gMTUwMDAwKQogCQkJewotCQkJCXByaW50ZlBRRXhwQnVmZmVyKCZidWYsCisJCQkJ YXBwZW5kUFFFeHBCdWZmZXIoJmJ1ZiwKIAkJCQkJCQkJICAiU0VMRUNUIHB1Ym5hbWVcbiIKIAkJ CQkJCQkJICAiICAgICAsIE5VTExcbiIKIAkJCQkJCQkJICAiICAgICAsIE5VTExcbiIKQEAgLTI5 OTksNyArMzAxNSw3IEBAIGRlc2NyaWJlT25lVGFibGVEZXRhaWxzKGNvbnN0IGNoYXIgKnNjaGVt YW5hbWUsCiAJCQl9CiAJCQllbHNlCiAJCQl7Ci0JCQkJcHJpbnRmUFFFeHBCdWZmZXIoJmJ1ZiwK KwkJCQlhcHBlbmRQUUV4cEJ1ZmZlcigmYnVmLAogCQkJCQkJCQkgICJTRUxFQ1QgcHVibmFtZVxu IgogCQkJCQkJCQkgICIgICAgICwgTlVMTFxuIgogCQkJCQkJCQkgICIgICAgICwgTlVMTFxuIgpA QCAtMzA0OSw3ICszMDY1LDkgQEAgZGVzY3JpYmVPbmVUYWJsZURldGFpbHMoY29uc3QgY2hhciAq c2NoZW1hbmFtZSwKIAkJLyogSWYgdmVyYm9zZSwgcHJpbnQgTk9UIE5VTEwgY29uc3RyYWludHMg Ki8KIAkJaWYgKHZlcmJvc2UpCiAJCXsKLQkJCXByaW50ZlBRRXhwQnVmZmVyKCZidWYsCisJCQlw cmludGZQUUV4cEJ1ZmZlcigmYnVmLCBfKCIvKiBHZXQgaW5mb3JtYXRpb24gYWJvdXQgTk9UIE5V TEwgY29uc3RyYWludHMgKi9cbiIpKTsKKwkJCWFwcGVuZFBRRXhwQnVmZmVyKCZidWYsCisJCQkJ CQkJICAiLyogRmluZCBOT1QgTlVMTCBjb25zdHJhaW50cyAqL1xuIgogCQkJCQkJCSAgIlNFTEVD VCBjby5jb25uYW1lLCBhdC5hdHRuYW1lLCBjby5jb25ub2luaGVyaXQsIGNvLmNvbmlzbG9jYWws XG4iCiAJCQkJCQkJICAiY28uY29uaW5oY291bnQgPD4gMFxuIgogCQkJCQkJCSAgIkZST00gcGdf Y2F0YWxvZy5wZ19jb25zdHJhaW50IGNvIEpPSU5cbiIKQEAgLTMxMjEsNyArMzEzOSw4IEBAIGRl c2NyaWJlT25lVGFibGVEZXRhaWxzKGNvbnN0IGNoYXIgKnNjaGVtYW5hbWUsCiAJCS8qIHByaW50 IHJ1bGVzICovCiAJCWlmICh0YWJsZWluZm8uaGFzcnVsZXMpCiAJCXsKLQkJCXByaW50ZlBRRXhw QnVmZmVyKCZidWYsCisJCQlwcmludGZQUUV4cEJ1ZmZlcigmYnVmLCBfKCIvKiBHZXQgaW5mb3Jt YXRpb24gYWJvdXQgZWFjaCBydWxlIGZvciB0aGlzIHZpZXcgKi9cbiIpKTsKKwkJCWFwcGVuZFBR RXhwQnVmZmVyKCZidWYsCiAJCQkJCQkJICAiU0VMRUNUIHIucnVsZW5hbWUsIHRyaW0odHJhaWxp bmcgJzsnIGZyb20gcGdfY2F0YWxvZy5wZ19nZXRfcnVsZWRlZihyLm9pZCwgdHJ1ZSkpXG4iCiAJ CQkJCQkJICAiRlJPTSBwZ19jYXRhbG9nLnBnX3Jld3JpdGUgclxuIgogCQkJCQkJCSAgIldIRVJF IHIuZXZfY2xhc3MgPSAnJXMnIEFORCByLnJ1bGVuYW1lICE9ICdfUkVUVVJOJyBPUkRFUiBCWSAx OyIsCkBAIC0zMTU4LDcgKzMxNzcsOCBAQCBkZXNjcmliZU9uZVRhYmxlRGV0YWlscyhjb25zdCBj aGFyICpzY2hlbWFuYW1lLAogCQlQR3Jlc3VsdCAgICpyZXN1bHQ7CiAJCWludAkJCXR1cGxlczsK IAotCQlwcmludGZQUUV4cEJ1ZmZlcigmYnVmLAorCQlwcmludGZQUUV4cEJ1ZmZlcigmYnVmLCBf KCIvKiBHZXQgaW5mb3JtYXRpb24gYWJvdXQgZWFjaCB0cmlnZ2VyIG9uIHRoaXMgdGFibGUgKi9c biIpKTsKKwkJYXBwZW5kUFFFeHBCdWZmZXIoJmJ1ZiwKIAkJCQkJCSAgIlNFTEVDVCB0LnRnbmFt ZSwgIgogCQkJCQkJICAicGdfY2F0YWxvZy5wZ19nZXRfdHJpZ2dlcmRlZih0Lm9pZCwgdHJ1ZSks ICIKIAkJCQkJCSAgInQudGdlbmFibGVkLCB0LnRnaXNpbnRlcm5hbCxcbiIpOwpAQCAtMzM3Nyw2 ICszMzk3LDcgQEAgZGVzY3JpYmVPbmVUYWJsZURldGFpbHMoY29uc3QgY2hhciAqc2NoZW1hbmFt ZSwKIAogCQkvKiBwcmludCB0YWJsZXMgaW5oZXJpdGVkIGZyb20gKGV4Y2x1ZGUgcGFydGl0aW9u ZWQgcGFyZW50cykgKi8KIAkJcHJpbnRmUFFFeHBCdWZmZXIoJmJ1ZiwKKwkJCQkJCSAgIi8qIEZp bmQgdGFibGVzIGluaGVyaXRlZCBmcm9tICovXG4iCiAJCQkJCQkgICJTRUxFQ1QgYy5vaWQ6OnBn X2NhdGFsb2cucmVnY2xhc3NcbiIKIAkJCQkJCSAgIkZST00gcGdfY2F0YWxvZy5wZ19jbGFzcyBj LCBwZ19jYXRhbG9nLnBnX2luaGVyaXRzIGlcbiIKIAkJCQkJCSAgIldIRVJFIGMub2lkID0gaS5p bmhwYXJlbnQgQU5EIGkuaW5ocmVsaWQgPSAnJXMnXG4iCkBAIC0zNDEzLDggKzM0MzQsOSBAQCBk ZXNjcmliZU9uZVRhYmxlRGV0YWlscyhjb25zdCBjaGFyICpzY2hlbWFuYW1lLAogCQl9CiAKIAkJ LyogcHJpbnQgY2hpbGQgdGFibGVzICh3aXRoIGFkZGl0aW9uYWwgaW5mbyBpZiBwYXJ0aXRpb25z KSAqLworCQlwcmludGZQUUV4cEJ1ZmZlcigmYnVmLCBfKCIvKiBHZXQgaW5mb3JtYXRpb24gYWJv dXQgY2hpbGQgdGFibGVzICovXG4iKSk7CiAJCWlmIChwc2V0LnN2ZXJzaW9uID49IDE0MDAwMCkK LQkJCXByaW50ZlBRRXhwQnVmZmVyKCZidWYsCisJCQlhcHBlbmRQUUV4cEJ1ZmZlcigmYnVmLAog CQkJCQkJCSAgIlNFTEVDVCBjLm9pZDo6cGdfY2F0YWxvZy5yZWdjbGFzcywgYy5yZWxraW5kLCIK IAkJCQkJCQkgICIgaW5oZGV0YWNocGVuZGluZywiCiAJCQkJCQkJICAiIHBnX2NhdGFsb2cucGdf Z2V0X2V4cHIoYy5yZWxwYXJ0Ym91bmQsIGMub2lkKVxuIgpAQCAtMzQyNCw3ICszNDQ2LDcgQEAg ZGVzY3JpYmVPbmVUYWJsZURldGFpbHMoY29uc3QgY2hhciAqc2NoZW1hbmFtZSwKIAkJCQkJCQkg ICIgYy5vaWQ6OnBnX2NhdGFsb2cucmVnY2xhc3M6OnBnX2NhdGFsb2cudGV4dDsiLAogCQkJCQkJ CSAgb2lkKTsKIAkJZWxzZSBpZiAocHNldC5zdmVyc2lvbiA+PSAxMDAwMDApCi0JCQlwcmludGZQ UUV4cEJ1ZmZlcigmYnVmLAorCQkJYXBwZW5kUFFFeHBCdWZmZXIoJmJ1ZiwKIAkJCQkJCQkgICJT RUxFQ1QgYy5vaWQ6OnBnX2NhdGFsb2cucmVnY2xhc3MsIGMucmVsa2luZCwiCiAJCQkJCQkJICAi IGZhbHNlIEFTIGluaGRldGFjaHBlbmRpbmcsIgogCQkJCQkJCSAgIiBwZ19jYXRhbG9nLnBnX2dl dF9leHByKGMucmVscGFydGJvdW5kLCBjLm9pZClcbiIKQEAgLTM0MzQsNyArMzQ1Niw3IEBAIGRl c2NyaWJlT25lVGFibGVEZXRhaWxzKGNvbnN0IGNoYXIgKnNjaGVtYW5hbWUsCiAJCQkJCQkJICAi IGMub2lkOjpwZ19jYXRhbG9nLnJlZ2NsYXNzOjpwZ19jYXRhbG9nLnRleHQ7IiwKIAkJCQkJCQkg IG9pZCk7CiAJCWVsc2UKLQkJCXByaW50ZlBRRXhwQnVmZmVyKCZidWYsCisJCQlhcHBlbmRQUUV4 cEJ1ZmZlcigmYnVmLAogCQkJCQkJCSAgIlNFTEVDVCBjLm9pZDo6cGdfY2F0YWxvZy5yZWdjbGFz cywgYy5yZWxraW5kLCIKIAkJCQkJCQkgICIgZmFsc2UgQVMgaW5oZGV0YWNocGVuZGluZywgTlVM TFxuIgogCQkJCQkJCSAgIkZST00gcGdfY2F0YWxvZy5wZ19jbGFzcyBjLCBwZ19jYXRhbG9nLnBn X2luaGVyaXRzIGlcbiIK --0000000000007c48f6060c42f7be--