Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vzT1H-0011vE-0f for pgsql-hackers@arkaria.postgresql.org; Mon, 09 Mar 2026 05:19:07 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vzT1F-00DtwI-26 for pgsql-hackers@arkaria.postgresql.org; Mon, 09 Mar 2026 05:19:06 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vzT1F-00DtwA-0k for pgsql-hackers@lists.postgresql.org; Mon, 09 Mar 2026 05:19:05 +0000 Received: from mail-northcentralusazolkn19012054.outbound.protection.outlook.com ([52.103.20.54] helo=CH5PR02CU005.outbound.protection.outlook.com) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.98.2) (envelope-from ) id 1vzT1D-00000001kBm-02vy for pgsql-hackers@postgresql.org; Mon, 09 Mar 2026 05:19:05 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=p76PENKdsDuQblkdZW4n7mGpVvGG83faFuhF/q74Rv/BlHnhpdqqj+1FyPzn3NdK8zH3QjxB6VpbF+fjO8jjRMcoGknC7Os7YG7pb19Y2fd2gXr5slzqwlo00HElMMxu6Mak4lM9clIH7gh6Fh2epicvj3MaK9LcoscvqiDjU7cwQAmheMXmlb/Vv+WuBSVsk6HaKCtMwTtYZAOdBnxzvWgo3WnKpeL4c+KHJ6hJELhgYe1pKHgaOsOJZzRukkfI8nxfGnKaHNJoeLBullQwGGDA+nBFyfBfY5k/JduKaAsDhiSYWvXQQAcCiYA3VCieSLoNYXQ2OMRWvt5vwgOyvw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=O3IeizA1u+R4o6mmzgx9ju8vKr6hWoAUB5PrcT5bAFQ=; b=eVTWV9JgduONpUCeDuajVbPM7urGnzJiOXaUlYm5xEA/fN1XOHdJbWeHFPhsbKiuxuMJ6swQ2r/8hDCrEUIC0If7UrO0aeA09xdfVK+O2oRoqs0ek2OLLzPVl/tfn3fWyE5wEzP3cAjiA++iswURE9bUhSZqGf/MhGlLzmj5jS5CnaM2MBEOykGRWhtGjx3EfJfgQE3GGS6h1aZxhz6g78qEVm7swDsqpPrcvPD4g/4B4eZs+kVoiHSg/TaPfsJAy//emvfpMC5unne2PySF2JziHP/FXsnsaKFrsrHTL+QwoTbix+bGzLylVWu7A9gGoyD33IuRKuRQeDR2Cii2FA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=O3IeizA1u+R4o6mmzgx9ju8vKr6hWoAUB5PrcT5bAFQ=; b=Y7Z4vInf729btehHl9KGfwMhtDqf6D8MQYeEhdatMeTpLs5Rab1bnWHWkhKmNe6o+w94FUGsKFR0e9g9pVIur/L8sXqwF4o+q6ukpbpycaFZmEMRWbTASlQ92/YUUzWVmjqnOJUALPK4dr6RsPdg9og+XNhabTjmeBhRznXFgq/9bxF4vp8pdKLsEdUFvu0tT4g6zqUhMt80jlzSUArtyXp9K+hfP4NSnEO7Ushd7e4Or2gWIGJFzN9sHA7Y/tVTtIJeytuQl75dcyKwhjnhKsBIyYeeiGdMZk1QYM2DvpImIFlVLx/oWK6ve1mzncgq32//ffCH4HOoGUSitYVdsg== Received: from PH0PR08MB7020.namprd08.prod.outlook.com (2603:10b6:510:74::15) by MN2PR08MB6349.namprd08.prod.outlook.com (2603:10b6:208:1a1::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9654.22; Mon, 9 Mar 2026 05:18:58 +0000 Received: from PH0PR08MB7020.namprd08.prod.outlook.com ([fe80::129a:a42a:445c:3273]) by PH0PR08MB7020.namprd08.prod.outlook.com ([fe80::129a:a42a:445c:3273%4]) with mapi id 15.20.9678.023; Mon, 9 Mar 2026 05:18:58 +0000 From: Boris Mironov To: Madyshev Egor , "pgsql-hackers@postgresql.org" Subject: Re: Idea to enhance pgbench by more modes to generate data (multi-TXNs, UNNEST, COPY BINARY) Thread-Topic: Idea to enhance pgbench by more modes to generate data (multi-TXNs, UNNEST, COPY BINARY) Thread-Index: AQHcUwuRPlzLCtdZw06GAdoL15fmHbTwZ0aAgAGpzjGAACRkgIAAEcrGgAQQLgCAAG6d+YAGXmPMgAFzjL6AAV1tS4BpseD8gAEgG5GAAGN+EIAAFWg0gArDj2mAAAeBfoAE2r6AgBXReIKACYuvB4ABsvMggADncVaAAHeCloAEeaRAgAAKHACAAGj/4IAEH5Eo Date: Mon, 9 Mar 2026 05:18:58 +0000 Message-ID: References: <9e53df419ab74409a5a4a77f26740c89@localhost.localdomain> <14424e6549e84cb4ac51b0f80aa90348@localhost.localdomain> In-Reply-To: Accept-Language: en-CA, en-US Content-Language: en-CA X-MS-Has-Attach: yes X-MS-TNEF-Correlator: msip_labels: x-ms-exchange-messagesentrepresentingtype: 1 x-ms-publictraffictype: Email x-ms-traffictypediagnostic: PH0PR08MB7020:EE_|MN2PR08MB6349:EE_ x-ms-office365-filtering-correlation-id: c1951288-5aa4-4962-a5c6-08de7d9b5de3 x-microsoft-antispam: BCL:0;ARA:14566002|461199028|8060799015|37011999003|15080799012|31061999003|25031999004|8062599012|6092099016|19110799012|15030799006|51005399006|440099028|3412199025|102099032|40105399003; x-microsoft-antispam-message-info: =?iso-8859-1?Q?JjnpnbmcEvv+IhveWQtZxx/gjzMeEYIxoanBgzAlvm4Ley/+Trh1qcpIxg?= =?iso-8859-1?Q?2tSYS0ZqHf0E4hr1trinh2ZzhwW8TJEzCEzQ2fc5q4BAugxKTaVI46pv2k?= =?iso-8859-1?Q?GFmJubqpMqp+jWmHD+wXHRx126iLmzdZrZvZw99kaeMR1+i7B0ZlO843rI?= =?iso-8859-1?Q?dkMibKLGsatWqagaF81NYbjc+/uPLUjZKvVzkdw8LSFlgmKhD/DEGv1aEW?= =?iso-8859-1?Q?C60ZZr2jOgrhaqw9Os/y1iqFQ04+noskaQYAI9IOuIwQdOVe0keFv2vpGs?= =?iso-8859-1?Q?/Qommd/C2PfaKnjha2nRVYN+lPgUXFesul1BCnTjSTwjLk+9kEWm4OlzQX?= =?iso-8859-1?Q?A+x2EjPYEQrUGE2K1z02JUKXlqwNxRk+u8xj4a+/ik9ePBrn9DknxiUGb4?= =?iso-8859-1?Q?ut0gRepL+Q9PE0iYEtN2Y9aNIRnMrywRm4gX7SuA9s8hA9bfICw0vS3HwH?= =?iso-8859-1?Q?+ovtTWat8jUt572tICXR6kCuejQkcA1I2v66CFMw3Yx67DdWmsAceq7INa?= =?iso-8859-1?Q?SWLGUHYq4fH9SZW0yxhV7f60MdW4u5im0hZNR1Wo+i+/nV89h61Ipw+EQS?= =?iso-8859-1?Q?WN95h4cjsVYDwhcSGHd12nc8z/QZ9A6ga1VvBXLN4SMEfQ2QCLPVQIac6K?= =?iso-8859-1?Q?kMsMeLG8u2Q7BnFXA6FAaHims5BGLhoruHLrQlFOGg4SuqHtgfKE2AWurH?= =?iso-8859-1?Q?bNXBmBfb3Qlou2tXiNatEGwZ08DiGGtChI6B9mvKnrUXKDzkm+A4m6eimS?= =?iso-8859-1?Q?8LRZk5zoBBjybk6WN17uX+uwNw//YcQpMSaQwdZrjjJiE0HtVjJmWfQq3k?= =?iso-8859-1?Q?RUSds6Gt1EuCteVktcmqKszKh8KqspSt6pdsS3GyHCmIGDnE4svilp43vb?= =?iso-8859-1?Q?DVKr/ECw4KzGS7QbGWwilZV/zHoM78wAgnYlz5opAy6zjRSs7dYcVp486q?= =?iso-8859-1?Q?E7yGIM/+KeRDjJ886YS3HMKJDTIZUFA3DcQ1diG1Bm75Mi4LKDO6loo8Z+?= =?iso-8859-1?Q?z40XAQrgQytazojHzdMJXz7Q5L/PVr+ul/Y04zusIrvHiCVORbuXSxWJEr?= =?iso-8859-1?Q?WWIQmZCmpcNf2LEOHqZGPOc=3D?= x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?5I9sjPrABNEltVUuxjoehsbvy1ASMsv7Hw1z2XMOW2i/hGjv2WP3HDbe/d?= =?iso-8859-1?Q?G0L9EbxjLKVQmsAyfo+7e7iE2wuiVKAHyOxR2f+8zp5E3HaGaYRqHwiQIv?= =?iso-8859-1?Q?2tiLkZsI6s0DuyK+iLL2QxkrN+is8abZZCAR7mThup3cH3mb/3Uepr7ejS?= =?iso-8859-1?Q?ghwWn9Y5RvV6dZ+IUInpOXjhRhT4mdCH9Q0QsbpYKy1pgJmfREFBznaNQ6?= =?iso-8859-1?Q?NRDKE3LvQv0twm5A6NiccN4E4/T12RS3KXvCECyg8LHYTGsxCQpR5XNzF7?= =?iso-8859-1?Q?hjW8rqiVqaMQEBeSfHAD8tCt4UgK19PBW+xQEMMNb1qbKsCrmLljRQ7iyk?= =?iso-8859-1?Q?bO5a+7IebiKoqusKS+nOAvtxT0EL7lN84XPXK0AgeF5HpiIVkAs8M1PbPw?= =?iso-8859-1?Q?pNlY4D+iKMp6V3or1Fsn525EDSmN4WCO6gomncjujuy/7SkGYVBBOOGkIm?= =?iso-8859-1?Q?5rf482VNd1yX7JPrlnmM6jjxZvNrwK6BX0YRpK+a3iTBlU8lnOENQlFAHZ?= =?iso-8859-1?Q?SJFz6SMh+OIBQbKvXbANq2rwgG+6LvIMi4p+cMo+16r1w184tE1ROusBto?= =?iso-8859-1?Q?LVncQe5FSCDlyfbT87P06+jzIM7OJoP5u0XOp4Bdt9FflVGJul/pHVYyus?= =?iso-8859-1?Q?981/UiccFGM9XEpPRYH+OV/3kTrpBCEQOxg+XS0r16KI58au5RtDzjW4xy?= =?iso-8859-1?Q?69WVR2uhGqCNG9mg33kKsLJKW7aqE9ScEGnrr+Zt2m/TdN9be3h4e224AT?= =?iso-8859-1?Q?ilDMsNH8JlDqAwJA7DxWGVa2kTBfiafzvotzKsa7g1B2PUkUmVK190H/mr?= =?iso-8859-1?Q?CMXMguP00lM204BOiypmFqhaxahVfOuzgNVFnwcLVdBjcIW9hpCeE7THy4?= =?iso-8859-1?Q?RZubiyUrctm+8ZIj83POovxtx86hB7mjo8MbKB0s7LPF6+T+ZVDjtxgyVu?= =?iso-8859-1?Q?Sy9p/QSrEbH77yK7KTCPjXpTIo+FLGua3zUAUgzQTq7oGJ3XjJxmvcNsZF?= =?iso-8859-1?Q?8o8JLnFj1Yb1lzkmrOpgmW1G29iLak2piwEJ2NlNnP8hkCYF2TfWliFNpl?= =?iso-8859-1?Q?SvMuePqc47cmru3/rQddEJeWoVZ+SCOdj6h1rJht/IgB82UxUhi5ECRpzB?= =?iso-8859-1?Q?A0/KUluV3iRiytZjYa6lf9xgr3HoyyuanGUe4ZQEltcQwxwWeqKNB4uL4L?= =?iso-8859-1?Q?lne+hF50K1/aOuGvVvKiO5sEdsLueiueWR4V29x9/OWlf+ABQ07zo0dBNu?= =?iso-8859-1?Q?sz+HobBveJlTNcc5fTayy12lkLnKwym3QuQs6cQV1qoGVPad6jthkctZrF?= =?iso-8859-1?Q?kScpHq3SklFbnB/QErlE3d8WKqH0LSfuoIEqmafo3vK6ItiYXc1Tjx7FAG?= =?iso-8859-1?Q?lUojcrVvJM+LqkuxChLxzLVmYxbTNWjfm9/OCCe5CefpgxZNV/yOhF7KBm?= =?iso-8859-1?Q?3QnczDb55WwnJQ9JeVMBUuftVvkURMEEjkGoSQ=3D=3D?= Content-Type: multipart/mixed; boundary="_004_PH0PR08MB7020D4A335C27DC7F07C28C38879APH0PR08MB7020namp_" MIME-Version: 1.0 X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: PH0PR08MB7020.namprd08.prod.outlook.com X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-CrossTenant-Network-Message-Id: c1951288-5aa4-4962-a5c6-08de7d9b5de3 X-MS-Exchange-CrossTenant-originalarrivaltime: 09 Mar 2026 05:18:58.1775 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-rms-persistedconsumerorg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR08MB6349 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --_004_PH0PR08MB7020D4A335C27DC7F07C28C38879APH0PR08MB7020namp_ Content-Type: multipart/alternative; boundary="_000_PH0PR08MB7020D4A335C27DC7F07C28C38879APH0PR08MB7020namp_" --_000_PH0PR08MB7020D4A335C27DC7F07C28C38879APH0PR08MB7020namp_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Hi Egor, Sorry, but I had to issue new version of the patch to include changes to do= cumentation, which was missed in previous version. Now patch consists of 3 files: doc/src/sgml/ref/pgbench.sgml | 90 ++- src/bin/pgbench/pgbench.c | 802 ++++++++++++++++--- src/bin/pgbench/t/001_pgbench_with_server.pl | 236 +++++- 3 files changed, 978 insertions(+), 150 deletions(-) Best regards, Boris --_000_PH0PR08MB7020D4A335C27DC7F07C28C38879APH0PR08MB7020namp_ Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable
Hi Egor,

Sorry, but I had to issue new version of the patch to include changes to do= cumentation,
which was missed in previous version.
Now patch consists of 3 files:

 doc/src/sgml/ref/pgbench.sgml           &nbs= p;    |  90 ++-
 src/bin/pgbench/pgbench.c             &= nbsp;      | 802 ++++++++++++++++---
 src/bin/pgbench/t/001_pgbench_with_server.pl | 236 +++++-
 3 files changed, 978 insertions(+), 150 deletions(-)

Best regards,
Boris
--_000_PH0PR08MB7020D4A335C27DC7F07C28C38879APH0PR08MB7020namp_-- --_004_PH0PR08MB7020D4A335C27DC7F07C28C38879APH0PR08MB7020namp_ Content-Type: application/octet-stream; name="v14-pgbench-faster-modes.patch" Content-Description: v14-pgbench-faster-modes.patch Content-Disposition: attachment; filename="v14-pgbench-faster-modes.patch"; size=45916; creation-date="Mon, 09 Mar 2026 05:15:49 GMT"; modification-date="Mon, 09 Mar 2026 05:16:10 GMT" Content-Transfer-Encoding: base64 RnJvbSBkOWU0ZjUwOTZhZTk1MzBiNjI5NjI5ZmI0N2VjMDhiOTIyODA1NzM5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBFaXNlbnRyYXV0IDxwZXRlckBlaXNlbnRyYXV0Lm9y Zz4KRGF0ZTogRnJpLCA2IE1hciAyMDI2IDEwOjMxOjM1ICswMTAwClN1YmplY3Q6IFtQQVRDSCB2 MTJdIEFkZGluZyBuZXcgaW5pdCBtb2RlcyB0byBwZ2JlbmNoIGluY2x1ZGluZyBDT1BZIEZST00K IEJJTkFSWSBhcyB3ZWxsIGFzIHBvcHVsYXRpbmcgZGF0YSBpbiBtdWx0aXBsZSB0cmFuc2FjdGlv bnMKCi0tLQogZG9jL3NyYy9zZ21sL3JlZi9wZ2JlbmNoLnNnbWwgICAgICAgICAgICAgICAgfCAg OTAgKystCiBzcmMvYmluL3BnYmVuY2gvcGdiZW5jaC5jICAgICAgICAgICAgICAgICAgICB8IDgw MiArKysrKysrKysrKysrKysrLS0tCiBzcmMvYmluL3BnYmVuY2gvdC8wMDFfcGdiZW5jaF93aXRo X3NlcnZlci5wbCB8IDIzNiArKysrKy0KIDMgZmlsZXMgY2hhbmdlZCwgOTc4IGluc2VydGlvbnMo KyksIDE1MCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL3BnYmVu Y2guc2dtbCBiL2RvYy9zcmMvc2dtbC9yZWYvcGdiZW5jaC5zZ21sCmluZGV4IDJlNDAxZDFjZWI4 Li4yMGY0MWYzMzJhNSAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3JlZi9wZ2JlbmNoLnNnbWwK KysrIGIvZG9jL3NyYy9zZ21sL3JlZi9wZ2JlbmNoLnNnbWwKQEAgLTIxNyw0MSArMjE3LDkzIEBA IHBnYmVuY2ggPG9wdGlvbmFsPiA8cmVwbGFjZWFibGU+b3B0aW9uczwvcmVwbGFjZWFibGU+IDwv b3B0aW9uYWw+IDxyZXBsYWNlYWJsZT5kCiAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgICA8 L2xpc3RpdGVtPgogICAgICAgICAgPC92YXJsaXN0ZW50cnk+Ci0gICAgICAgICA8dmFybGlzdGVu dHJ5IGlkPSJwZ2JlbmNoLW9wdGlvbi1pbml0LXN0ZXBzLWciPgotICAgICAgICAgIDx0ZXJtPjxs aXRlcmFsPmc8L2xpdGVyYWw+IG9yIDxsaXRlcmFsPkc8L2xpdGVyYWw+IChHZW5lcmF0ZSBkYXRh LCBjbGllbnQtc2lkZSBvciBzZXJ2ZXItc2lkZSk8L3Rlcm0+CisKKyAgICAgICAgIDx2YXJsaXN0 ZW50cnkgaWQ9InBnYmVuY2gtb3B0aW9uLWluaXQtc3RlcHMtY2xpZW50Ij4KKyAgICAgICAgICA8 dGVybT48bGl0ZXJhbD5nPC9saXRlcmFsPiBvciA8bGl0ZXJhbD5jPC9saXRlcmFsPiAoR2VuZXJh dGUgZGF0YSwgY2xpZW50LXNpZGUpPC90ZXJtPgogICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAg ICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBHZW5lcmF0ZSBkYXRhIGFuZCBsb2FkIGl0IGludG8g dGhlIHN0YW5kYXJkIHRhYmxlcywKLSAgICAgICAgICAgIHJlcGxhY2luZyBhbnkgZGF0YSBhbHJl YWR5IHByZXNlbnQuCi0gICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgPHBhcmE+Ci0gICAg ICAgICAgICBXaXRoIDxsaXRlcmFsPmc8L2xpdGVyYWw+IChjbGllbnQtc2lkZSBkYXRhIGdlbmVy YXRpb24pLAotICAgICAgICAgICAgZGF0YSBpcyBnZW5lcmF0ZWQgaW4gPGNvbW1hbmQ+cGdiZW5j aDwvY29tbWFuZD4gY2xpZW50IGFuZCB0aGVuCi0gICAgICAgICAgICBzZW50IHRvIHRoZSBzZXJ2 ZXIuIFRoaXMgdXNlcyB0aGUgY2xpZW50L3NlcnZlciBiYW5kd2lkdGgKKyAgICAgICAgICAgIEdl bmVyYXRlIGRhdGEgYW5kIGxvYWQgaXQgaW50byB0aGUgc3RhbmRhcmQgdGFibGVzIHVzaW5nIGNs aWVudC1zaWRlCisgICAgICAgICAgICBnZW5lcmF0aW9uLiBEYXRhIGlzIGdlbmVyYXRlZCBpbiB0 aGUgPGNvbW1hbmQ+cGdiZW5jaDwvY29tbWFuZD4gY2xpZW50IAorICAgICAgICAgICAgYW5kIHRo ZW4gc2VudCB0byB0aGUgc2VydmVyLiBUaGlzIHVzZXMgdGhlIGNsaWVudC9zZXJ2ZXIgYmFuZHdp ZHRoIAogICAgICAgICAgICAgZXh0ZW5zaXZlbHkgdGhyb3VnaCBhIDxjb21tYW5kPkNPUFk8L2Nv bW1hbmQ+LgogICAgICAgICAgICAgPGNvbW1hbmQ+cGdiZW5jaDwvY29tbWFuZD4gdXNlcyB0aGUg PG9wdGlvbj5GUkVFWkU8L29wdGlvbj4gb3B0aW9uCiAgICAgICAgICAgICB0byBsb2FkIGRhdGEg aW50byBvcmRpbmFyeSAobm9uLXBhcnRpdGlvbikgdGFibGVzIHdpdGggdmVyc2lvbiAxNAogICAg ICAgICAgICAgb3IgbGF0ZXIgb2YgPHByb2R1Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1l PiB0byBzcGVlZCB1cAotICAgICAgICAgICAgc3Vic2VxdWVudCA8Y29tbWFuZD5WQUNVVU08L2Nv bW1hbmQ+LgotICAgICAgICAgICAgVXNpbmcgPGxpdGVyYWw+ZzwvbGl0ZXJhbD4gY2F1c2VzIGxv Z2dpbmcgdG8KLSAgICAgICAgICAgIHByaW50IG9uZSBtZXNzYWdlIGV2ZXJ5IDEwMCwwMDAgcm93 cyB3aGlsZSBnZW5lcmF0aW5nIGRhdGEgZm9yIGFsbAotICAgICAgICAgICAgdGFibGVzLgorICAg ICAgICAgICAgc3Vic2VxdWVudCA8Y29tbWFuZD5WQUNVVU08L2NvbW1hbmQ+LiBVc2luZyA8bGl0 ZXJhbD5nPC9saXRlcmFsPiAKKyAgICAgICAgICAgIG9yIDxsaXRlcmFsPmM8L2xpdGVyYWw+IGNh dXNlcyBsb2dnaW5nIHRvIHByaW50IG9uZSBtZXNzYWdlIAorICAgICAgICAgICAgZXZlcnkgMTAw LDAwMCByb3dzIHdoaWxlIGdlbmVyYXRpbmcgZGF0YSBmb3IgYWxsIHRhYmxlcy4KKyAgICAgICAg ICAgPC9wYXJhPgorICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFdpdGggPGxpdGVyYWw+ ZzwvbGl0ZXJhbD4gKHRleHQgZm9ybWF0KSwgdGhlIGNsaWVudCBzZW5kcyBkYXRhIGluCisgICAg ICAgICAgICA8Y29tbWFuZD5DT1BZIC4uLiBGUk9NIFNURElOIChGT1JNQVQgVEVYVCk8L2NvbW1h bmQ+LgorICAgICAgICAgICAgVGhpcyBpcyBkZWZhdWx0IG1vZGUgZm9yIGRhdGEgaW5pdGlhbGl6 YXRpb24uCisgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAg ICBXaXRoIDxsaXRlcmFsPmM8L2xpdGVyYWw+IChiaW5hcnkgZm9ybWF0KSwgdGhlIGNsaWVudCBz ZW5kcyBkYXRhIHVzaW5nCisgICAgICAgICAgICA8Y29tbWFuZD5DT1BZIC4uLiBGUk9NIFNURElO IChGT1JNQVQgQklOQVJZKTwvY29tbWFuZD4uIEJpbmFyeSB0cmFuc2ZlcgorICAgICAgICAgICAg Y2FuIGJlIGZhc3RlciB0aGFuIHRleHQsIGJ1dCBtYXkgYmUgbGVzcyBwb3J0YWJsZSBhY3Jvc3Mg ZGlmZmVyZW50CisgICAgICAgICAgICB2ZXJzaW9ucyBvciBwbGF0Zm9ybXMuCiAgICAgICAgICAg IDwvcGFyYT4KICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBXaXRoIDxsaXRlcmFsPkc8 L2xpdGVyYWw+IChzZXJ2ZXItc2lkZSBkYXRhIGdlbmVyYXRpb24pLAorICAgICAgICAgICAgVGhl IGRlZmF1bHQgaW5pdGlhbGl6YXRpb24gYmVoYXZpb3IgdXNlcyBjbGllbnQtc2lkZSBkYXRhIGdl bmVyYXRpb24KKyAgICAgICAgICAgIHdpdGggdGV4dCBmb3JtYXQgKGVxdWl2YWxlbnQgdG8gPGxp dGVyYWw+ZzwvbGl0ZXJhbD4pLgorICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgPC9saXN0 aXRlbT4KKyAgICAgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgICAgICA8dmFybGlzdGVudHJ5 IGlkPSJwZ2JlbmNoLW9wdGlvbi1pbml0LXN0ZXBzLXNlcnZlciI+CisgICAgICAgICAgPHRlcm0+ PGxpdGVyYWw+RzwvbGl0ZXJhbD4gb3IgPGxpdGVyYWw+VTwvbGl0ZXJhbD4gKEdlbmVyYXRlIGRh dGEsIHNlcnZlci1zaWRlKTwvdGVybT4KKyAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAg IDxwYXJhPgorICAgICAgICAgICAgV2l0aCA8bGl0ZXJhbD5HPC9saXRlcmFsPiBvciA8bGl0ZXJh bD5VPC9saXRlcmFsPiAoc2VydmVyLXNpZGUgZGF0YSBnZW5lcmF0aW9uKSwKICAgICAgICAgICAg IG9ubHkgc21hbGwgcXVlcmllcyBhcmUgc2VudCBmcm9tIHRoZSA8Y29tbWFuZD5wZ2JlbmNoPC9j b21tYW5kPgogICAgICAgICAgICAgY2xpZW50IGFuZCB0aGVuIGRhdGEgaXMgYWN0dWFsbHkgZ2Vu ZXJhdGVkIGluIHRoZSBzZXJ2ZXIuCiAgICAgICAgICAgICBObyBzaWduaWZpY2FudCBiYW5kd2lk dGggaXMgcmVxdWlyZWQgZm9yIHRoaXMgdmFyaWFudCwgYnV0CiAgICAgICAgICAgICB0aGUgc2Vy dmVyIHdpbGwgZG8gbW9yZSB3b3JrLgotICAgICAgICAgICAgVXNpbmcgPGxpdGVyYWw+RzwvbGl0 ZXJhbD4gY2F1c2VzIGxvZ2dpbmcgbm90IHRvIHByaW50IGFueSBwcm9ncmVzcwotICAgICAgICAg ICAgbWVzc2FnZSB3aGlsZSBnZW5lcmF0aW5nIGRhdGEuCisgICAgICAgICAgICBVc2luZyA8bGl0 ZXJhbD5HPC9saXRlcmFsPiBvciA8bGl0ZXJhbD5VPC9saXRlcmFsPiBjYXVzZXMgbG9nZ2luZyBu b3QgdG8gcHJpbnQgCisgICAgICAgICAgICBhbnkgcHJvZ3Jlc3MgbWVzc2FnZSB3aGlsZSBnZW5l cmF0aW5nIGRhdGEuCisgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgPHBhcmE+CisgICAg ICAgICAgICBXaXRoIDxsaXRlcmFsPkc8L2xpdGVyYWw+LCB0aGUgc2VydmVyIHVzZXMgPGxpdGVy YWw+SU5TRVJUIC4uLgorICAgICAgICAgICAgU0VMRUNUIGdlbmVyYXRlX3NlcmllcyguLi4pPC9s aXRlcmFsPiB0byBwcm9kdWNlIHRoZSByb3dzLiBUaGlzIG1ldGhvZAorICAgICAgICAgICAgaXMg c2ltcGxlIGFuZCB3aWRlbHkgdXNlZC4KKyAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICA8 cGFyYT4KKyAgICAgICAgICAgIFdpdGggPGxpdGVyYWw+VTwvbGl0ZXJhbD4sIHRoZSBzZXJ2ZXIg dXNlcyA8bGl0ZXJhbD5JTlNFUlQgLi4uCisgICAgICAgICAgICBTRUxFQ1QgdW5uZXN0KC4uLik8 L2xpdGVyYWw+IHRvIGV4cGFuZCBhcnJheXMgb2YgZ2VuZXJhdGVkIHZhbHVlcy4gVGhpcyBjYW4K KyAgICAgICAgICAgIGJlIG1vcmUgZWZmaWNpZW50IHdoZW4gbXVsdGlwbGUgY29sdW1ucyBhcmUg Z2VuZXJhdGVkIHRvZ2V0aGVyIGZvciBjb2x1bW4tYmFzZWQKKyAgICAgICAgICAgIHRhYmxlLCBh cyB0aGUgd29yayBpcyBkb25lIGluIGEgc2luZ2xlIHNjYW4uCisgICAgICAgICAgIDwvcGFyYT4K KyAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAg ICAgIDx2YXJsaXN0ZW50cnkgaWQ9InBnYmVuY2gtb3B0aW9uLWluaXQtc3RlcHMtdHJhbnNhY3Rp b24tbW9kZSI+CisgICAgICAgICAgPHRlcm0+PGxpdGVyYWw+UzwvbGl0ZXJhbD4gb3IgPGxpdGVy YWw+TTwvbGl0ZXJhbD4gKFRyYW5zYWN0aW9uIG1vZGUgZm9yIGluaXRpYWxpemF0aW9uKTwvdGVy bT4KKyAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAg U3BlY2lmaWVzIHdoZXRoZXIgdGhlIGluaXRpYWxpemF0aW9uIHN0ZXBzIGFyZSBwZXJmb3JtZWQg aW4gYSBzaW5nbGUKKyAgICAgICAgICAgIHRyYW5zYWN0aW9uIG9yIGluIG11bHRpcGxlIHRyYW5z YWN0aW9ucy4KKyAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICA8cGFyYT4KKyAgICAgICAg ICAgIFdpdGggPGxpdGVyYWw+UzwvbGl0ZXJhbD4gKHNpbmdsZSB0cmFuc2FjdGlvbiksIGFsbCBk YXRhIGdlbmVyYXRpb24gCisgICAgICAgICAgICBhcmUgZXhlY3V0ZWQgd2l0aGluIG9uZSB0cmFu c2FjdGlvbi4gVGhpcyBpcyB0aGUgZGVmYXVsdAorICAgICAgICAgICAgYmVoYXZpb3IuIFVzaW5n IGEgc2luZ2xlIHRyYW5zYWN0aW9uIGFsbG93cyB0aGUgdXNlIG9mIHRoZQorICAgICAgICAgICAg PG9wdGlvbj5GUkVFWkU8L29wdGlvbj4gb3B0aW9uIHdpdGggY2xpZW50LXNpZGUgPGNvbW1hbmQ+ Q09QWTwvY29tbWFuZD4uCiAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgICAgPHBhcmE+Ci0g ICAgICAgICAgICBUaGUgZGVmYXVsdCBpbml0aWFsaXphdGlvbiBiZWhhdmlvciB1c2VzIGNsaWVu dC1zaWRlIGRhdGEKLSAgICAgICAgICAgIGdlbmVyYXRpb24gKGVxdWl2YWxlbnQgdG8gPGxpdGVy YWw+ZzwvbGl0ZXJhbD4pLgorICAgICAgICAgICAgV2l0aCA8bGl0ZXJhbD5NPC9saXRlcmFsPiAo bXVsdGlwbGUgdHJhbnNhY3Rpb25zKSwgZGF0YSBmb3IgZWFjaCBzY2FsZSBmYWN0b3IKKyAgICAg ICAgICAgIHVuaXQgKGUuZy4sIGZvciBlYWNoIGluY3JlbWVudCBvZiA8b3B0aW9uPi0tc2NhbGU9 PC9vcHRpb24+KSBpcyBsb2FkZWQgaW4gYQorICAgICAgICAgICAgc2VwYXJhdGUgdHJhbnNhY3Rp b24uIEZvciBleGFtcGxlLCBpZiB5b3Ugc2V0IDxvcHRpb24+LS1zY2FsZT0yMDwvb3B0aW9uPgor ICAgICAgICAgICAgZGF0YSB3aWxsIGJlIGFkZGVkIHRvIHRocmVlIG1haW4gdGFibGVzIGluIDIw IHNlcGFyYXRlIHRyYW5zYWN0aW9ucy4KKyAgICAgICAgICAgIEluIHRoaXMgbW9kZSwgdGhlIDxv cHRpb24+RlJFRVpFPC9vcHRpb24+IG9wdGlvbgorICAgICAgICAgICAgY2Fubm90IGJlIHVzZWQg d2l0aCBjbGllbnQtc2lkZSA8Y29tbWFuZD5DT1BZPC9jb21tYW5kPi4KKyAgICAgICAgICAgIFVz aW5nIG11bHRpcGxlIHRyYW5zYWN0aW9ucyBjYW4gc3BlZWQgdXAgZGF0YSBnZW5lcmF0aW9uIGJ5 CisgICAgICAgICAgICBjb21taXR0aW5nIGRhdGEgaW4gc21hbGxlciBiYXRjaGVzLCB3aGljaCBt YXkgcmVkdWNlIHRoZSBvdmVyaGVhZCBvZiBhCisgICAgICAgICAgICBzaW5nbGUgaHVnZSB0cmFu c2FjdGlvbiwgYnV0IGFsc28gYWRkcyBwZXItdHJhbnNhY3Rpb24gY29tbWl0IGNvc3RzLgogICAg ICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICAgIDwvdmFybGlz dGVudHJ5PgorCiAgICAgICAgICA8dmFybGlzdGVudHJ5IGlkPSJwZ2JlbmNoLW9wdGlvbi1pbml0 LXN0ZXBzLXYiPgogICAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPnY8L2xpdGVyYWw+IChWYWN1dW0p PC90ZXJtPgogICAgICAgICAgIDxsaXN0aXRlbT4KQEAgLTI2MCw2ICszMTIsNyBAQCBwZ2JlbmNo IDxvcHRpb25hbD4gPHJlcGxhY2VhYmxlPm9wdGlvbnM8L3JlcGxhY2VhYmxlPiA8L29wdGlvbmFs PiA8cmVwbGFjZWFibGU+ZAogICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgPC9saXN0aXRl bT4KICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgorCiAgICAgICAgICA8dmFybGlzdGVudHJ5IGlk PSJwZ2JlbmNoLW9wdGlvbi1pbml0LXN0ZXBzLXAiPgogICAgICAgICAgIDx0ZXJtPjxsaXRlcmFs PnA8L2xpdGVyYWw+IChjcmVhdGUgUHJpbWFyeSBrZXlzKTwvdGVybT4KICAgICAgICAgICA8bGlz dGl0ZW0+CkBAIC0yNjgsNiArMzIxLDcgQEAgcGdiZW5jaCA8b3B0aW9uYWw+IDxyZXBsYWNlYWJs ZT5vcHRpb25zPC9yZXBsYWNlYWJsZT4gPC9vcHRpb25hbD4gPHJlcGxhY2VhYmxlPmQKICAgICAg ICAgICAgPC9wYXJhPgogICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgICA8L3Zhcmxpc3Rl bnRyeT4KKwogICAgICAgICAgPHZhcmxpc3RlbnRyeSBpZD0icGdiZW5jaC1vcHRpb24taW5pdC1z dGVwcy1mIj4KICAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPmY8L2xpdGVyYWw+IChjcmVhdGUgRm9y ZWlnbiBrZXlzKTwvdGVybT4KICAgICAgICAgICA8bGlzdGl0ZW0+CmRpZmYgLS1naXQgYS9zcmMv YmluL3BnYmVuY2gvcGdiZW5jaC5jIGIvc3JjL2Jpbi9wZ2JlbmNoL3BnYmVuY2guYwppbmRleCAx ZGFlOTE4Y2MwOS4uNDhmMjk1MGUyNDUgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdiZW5jaC9wZ2Jl bmNoLmMKKysrIGIvc3JjL2Jpbi9wZ2JlbmNoL3BnYmVuY2guYwpAQCAtMTU5LDE4ICsxNTksMzYg QEAgdHlwZWRlZiBzdHJ1Y3Qgc29ja2V0X3NldAogCiAvKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIHNvbWUgY29u ZmlndXJhYmxlIHBhcmFtZXRlcnMgKi8KLQogI2RlZmluZSBERUZBVUxUX0lOSVRfU1RFUFMgImR0 Z3ZwIgkvKiBkZWZhdWx0IC1JIHNldHRpbmcgKi8KLSNkZWZpbmUgQUxMX0lOSVRfU1RFUFMgImR0 Z0d2cGYiCS8qIGFsbCBwb3NzaWJsZSBzdGVwcyAqLworI2RlZmluZSBBTExfSU5JVF9TVEVQUyAi ZHRNU2NnR1V2cGYiCS8qIGFsbCBwb3NzaWJsZSBzdGVwcyAqLwogCiAjZGVmaW5lIExPR19TVEVQ X1NFQ09ORFMJNQkvKiBzZWNvbmRzIGJldHdlZW4gbG9nIG1lc3NhZ2VzICovCi0jZGVmaW5lIERF RkFVTFRfTlhBQ1RTCTEwCQkvKiBkZWZhdWx0IG54YWN0cyAqLworI2RlZmluZSBERUZBVUxUX05Y QUNUUwkJMTAJLyogZGVmYXVsdCBueGFjdHMgKi8KIAogI2RlZmluZSBNSU5fR0FVU1NJQU5fUEFS QU0JCTIuMCAvKiBtaW5pbXVtIHBhcmFtZXRlciBmb3IgZ2F1c3MgKi8KIAogI2RlZmluZSBNSU5f WklQRklBTl9QQVJBTQkJMS4wMDEJLyogbWluaW11bSBwYXJhbWV0ZXIgZm9yIHppcGZpYW4gKi8K ICNkZWZpbmUgTUFYX1pJUEZJQU5fUEFSQU0JCTEwMDAuMAkvKiBtYXhpbXVtIHBhcmFtZXRlciBm b3IgemlwZmlhbiAqLwogCisvKiBzZXJ2ZXItc2lkZSBtZXRob2RzIHRvIGdlbmVyYXRlIGRhdGEg Ki8KKyNkZWZpbmUgSU5JVF9TVEVQX0dFTl9UWVBFX0lOU0VSVF9TRVJJRVMJJ0cnIC8qIHVzZSBJ TlNFUlQgLi4gU0VMRUNUCisJCQkJCQkJCQkJCQkgKiBnZW5lcmF0ZV9zZXJpZXMgdG8gZ2VuZXJh dGUKKwkJCQkJCQkJCQkJCSAqIGRhdGEgKi8KKyNkZWZpbmUgSU5JVF9TVEVQX0dFTl9UWVBFX0lO U0VSVF9VTk5FU1QJJ1UnIC8qIHVzZSBJTlNFUlQgLi4gU0VMRUNUIHVubmVzdAorCQkJCQkJCQkJ CQkJICogdG8gZ2VuZXJhdGUgZGF0YSAqLworLyogY2xpZW50LXNpZGUgbWV0aG9kcyB0byBnZW5l cmF0ZSBkYXRhICovCisjZGVmaW5lIElOSVRfU1RFUF9HRU5fVFlQRV9DT1BZX1RFWFQJCSdnJyAv KiB1c2UgQ09QWSAuLiBGUk9NIFNURElOIC4uCisJCQkJCQkJCQkJCQkgKiBURVhUIHRvIGdlbmVy YXRlIGRhdGEgKi8KKyNkZWZpbmUgSU5JVF9TVEVQX0dFTl9UWVBFX0NPUFlfQklOQVJZCQknYycg LyogdXNlIENPUFkgLi4gRlJPTSBTVERJTiAuLgorCQkJCQkJCQkJCQkJICogQklOQVJZIHRvIGdl bmVyYXRlIGRhdGEgKi8KKy8qIGRhdGEgaW5pdCBwc2V1ZG8gc3RlcHMgKi8KKyNkZWZpbmUgSU5J VF9TVEVQX0dFTl9UWVBFX1NJTkdMRV9YQUNUCQknUycgLyogc3dpdGNoIHRvIGluaXQgZGF0YSBh cworCQkJCQkJCQkJCQkJICogc2luZ2xlIHRyYW5zYWN0aW9uICovCisjZGVmaW5lIElOSVRfU1RF UF9HRU5fVFlQRV9NVUxUSV9YQUNUCQknTScgLyogc3dpdGNoIHRvIGluaXQgZGF0YSBhcworCQkJ CQkJCQkJCQkJICogbXVsdGlwbGUgdHJhbnNhY3Rpb25zICovCisKK3N0YXRpYyBib29sIG11bHRp X3hhY3QgPSBmYWxzZTsgLyogaW5pdCBkYXRhIHR5cGUgKGFzIHNpbmdsZSBvciBtdWx0aXBsZQor CQkJCQkJCQkgKiB0cmFuc2FjdGlvbnMpICovCiBzdGF0aWMgaW50CW54YWN0cyA9IDA7CQkJLyog bnVtYmVyIG9mIHRyYW5zYWN0aW9ucyBwZXIgY2xpZW50ICovCiBzdGF0aWMgaW50CWR1cmF0aW9u ID0gMDsJCS8qIGR1cmF0aW9uIGluIHNlY29uZHMgKi8KIHN0YXRpYyBpbnQ2NCBlbmRfdGltZSA9 IDA7CQkvKiB3aGVuIHRvIHN0b3AgaW4gbWljcm8gc2Vjb25kcywgdW5kZXIgLVQgKi8KQEAgLTE4 MSw2ICsxOTksMTkgQEAgc3RhdGljIGludDY0IGVuZF90aW1lID0gMDsJCS8qIHdoZW4gdG8gc3Rv cCBpbiBtaWNybyBzZWNvbmRzLCB1bmRlciAtVCAqLwogICovCiBzdGF0aWMgaW50CXNjYWxlID0g MTsKIAorLyoKKyAqIG1vZGUgb2YgZGF0YSBnZW5lcmF0aW9uIHRvIHVzZQorICovCitzdGF0aWMg Y2hhciBkYXRhX2dlbmVyYXRpb25fdHlwZSA9IElOSVRfU1RFUF9HRU5fVFlQRV9DT1BZX1RFWFQ7 CisKKy8qCisgKiBDT1BZIEZST00gQklOQVJZIGV4ZWN1dGlvbiBidWZmZXIKKyAqLworI2RlZmlu ZSBCSU5fQ09QWV9CVUZfU0laRQkxMDI0MDAJLyogbWF4aW11bSBidWZmZXIgc2l6ZSBmb3IgQ09Q WSBGUk9NCisJCQkJCQkJCQkgKiBCSU5BUlkgKi8KK3N0YXRpYyBjaGFyICpiaW5fY29weV9idWZm ZXIgPSBOVUxMOwkvKiBidWZmZXIgZm9yIENPUFkgRlJPTSBCSU5BUlkgKi8KK3N0YXRpYyBpbnQz Ml90IGJpbl9jb3B5X2J1ZmZlcl9sZW5ndGggPSAwOwkvKiBjdXJyZW50IGJ1ZmZlciBzaXplICov CisKIC8qCiAgKiBmaWxsZmFjdG9yLiBmb3IgZXhhbXBsZSwgZmlsbGZhY3RvciA9IDkwIHdpbGwg dXNlIG9ubHkgOTAgcGVyY2VudAogICogc3BhY2UgZHVyaW5nIGluc2VydHMgYW5kIGxlYXZlIDEw IHBlcmNlbnQgZnJlZS4KQEAgLTQ1Niw2ICs0ODcsOSBAQCB0eXBlZGVmIHN0cnVjdCBTdGF0c0Rh dGEKICAqLwogc3RhdGljIHBnX3RpbWVfdXNlY190IGVwb2NoX3NoaWZ0OwogCisvKiB1c2VkIHRv IHRyYWNrIGVsYXBzZWQgdGltZSBhbmQgZXN0aW1hdGUgb2YgdGhlIHJlbWFpbmluZyB0aW1lIG9m IGRhdGEgbG9hZCAqLworc3RhdGljIHBnX3RpbWVfdXNlY190IGRhdGFfbG9hZF9zdGFydDsKKwog LyoKICAqIEVycm9yIHN0YXR1cyBmb3IgZXJyb3JzIGR1cmluZyBzY3JpcHQgZXhlY3V0aW9uLgog ICovCkBAIC04NTEsNiArODg1LDcgQEAgc3RhdGljIGJvb2wgc29ja2V0X2hhc19pbnB1dChzb2Nr ZXRfc2V0ICpzYSwgaW50IGZkLCBpbnQgaWR4KTsKIAogLyogY2FsbGJhY2sgdXNlZCB0byBidWls ZCByb3dzIGZvciBDT1BZIGR1cmluZyBkYXRhIGxvYWRpbmcgKi8KIHR5cGVkZWYgdm9pZCAoKmlu aXRSb3dNZXRob2QpIChQUUV4cEJ1ZmZlckRhdGEgKnNxbCwgaW50NjQgY3Vycik7Cit0eXBlZGVm IHZvaWQgKCppbml0Um93TWV0aG9kQmluYXJ5KSAoUEdjb25uICpjb24sIGludDY0X3QgY3Vyciwg aW50MzJfdCBwYXJlbnQpOwogCiAvKiBjYWxsYmFjayBmdW5jdGlvbnMgZm9yIG91ciBmbGV4IGxl eGVyICovCiBzdGF0aWMgY29uc3QgUHNxbFNjYW5DYWxsYmFja3MgcGdiZW5jaF9jYWxsYmFja3Mg PSB7CkBAIC05MTMsOCArOTQ4LDE0IEBAIHVzYWdlKHZvaWQpCiAJCSAgICIgICAgICAgICAgICAg ICAgICAgICAgICAgICBydW4gc2VsZWN0ZWQgaW5pdGlhbGl6YXRpb24gc3RlcHMsIGluIHRoZSBz cGVjaWZpZWQgb3JkZXJcbiIKIAkJICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ6IGRy b3AgYW55IGV4aXN0aW5nIHBnYmVuY2ggdGFibGVzXG4iCiAJCSAgICIgICAgICAgICAgICAgICAg ICAgICAgICAgICB0OiBjcmVhdGUgdGhlIHRhYmxlcyB1c2VkIGJ5IHRoZSBzdGFuZGFyZCBwZ2Jl bmNoIHNjZW5hcmlvXG4iCi0JCSAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICBnOiBnZW5l cmF0ZSBkYXRhLCBjbGllbnQtc2lkZVxuIgotCQkgICAiICAgICAgICAgICAgICAgICAgICAgICAg ICAgRzogZ2VuZXJhdGUgZGF0YSwgc2VydmVyLXNpZGVcbiIKKwkJICAgIiAgICAgICAgICAgICAg ICAgICAgICAgICAgIHRvIGdlbmVyYXRlIGRhdGEsIGNsaWVudC1zaWRlOlxuIgorCQkgICAiICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBnOiAgIENPUFkgLi4gRlJPTSBTVERJTiAuLiBURVhU XG4iCisJCSAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGM6ICAgQ09QWSAuLiBGUk9N IFNURElOIC4uIEJJTkFSWVxuIgorCQkgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8g Z2VuZXJhdGUgZGF0YSwgc2VydmVyLXNpZGU6XG4iCisJCSAgICIgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEc6ICAgSU5TRVJUIC4uIFNFTEVDVCBnZW5lcmF0ZV9zZXJpZXNcbiIKKwkJICAg IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVTogICBJTlNFUlQgLi4gU0VMRUNUIHVubmVz dFxuIgorCQkgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgUzogZmxhZyB0byB1c2Ugc2lu Z2xlIHRyYW5zYWN0aW9uIHRvIGluaXRpYWxpemUgZGF0YVxuIgorCQkgICAiICAgICAgICAgICAg ICAgICAgICAgICAgICAgTTogZmxhZyB0byB1c2UgbXVsdGlwbGUgdHJhbnNhY3Rpb25zIHRvIGlu aXRpYWxpemUgZGF0YVxuIgogCQkgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgdjogaW52 b2tlIFZBQ1VVTSBvbiB0aGUgc3RhbmRhcmQgdGFibGVzXG4iCiAJCSAgICIgICAgICAgICAgICAg ICAgICAgICAgICAgICBwOiBjcmVhdGUgcHJpbWFyeSBrZXkgaW5kZXhlcyBvbiB0aGUgc3RhbmRh cmQgdGFibGVzXG4iCiAJCSAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICBmOiBjcmVhdGUg Zm9yZWlnbiBrZXlzIGJldHdlZW4gdGhlIHN0YW5kYXJkIHRhYmxlc1xuIgpAQCAtNDkxNiw4ICs0 OTU3LDggQEAgaW5pdENyZWF0ZVRhYmxlcyhQR2Nvbm4gKmNvbikKIAlzdGF0aWMgY29uc3Qgc3Ry dWN0IGRkbGluZm8gRERMc1tdID0gewogCQl7CiAJCQkicGdiZW5jaF9oaXN0b3J5IiwKLQkJCSJ0 aWQgaW50LGJpZCBpbnQsYWlkICAgIGludCxkZWx0YSBpbnQsbXRpbWUgdGltZXN0YW1wLGZpbGxl ciBjaGFyKDIyKSIsCi0JCQkidGlkIGludCxiaWQgaW50LGFpZCBiaWdpbnQsZGVsdGEgaW50LG10 aW1lIHRpbWVzdGFtcCxmaWxsZXIgY2hhcigyMikiLAorCQkJInRpZCBpbnQsYmlkIGludCxhaWQg ICAgaW50LGRlbHRhIGludCxtdGltZSB0aW1lc3RhbXAsZmlsbGVyIGNoYXIoMjIpIGRlZmF1bHQg JyciLAorCQkJInRpZCBpbnQsYmlkIGludCxhaWQgYmlnaW50LGRlbHRhIGludCxtdGltZSB0aW1l c3RhbXAsZmlsbGVyIGNoYXIoMjIpIGRlZmF1bHQgJyciLAogCQkJMAogCQl9LAogCQl7CkBAIC00 OTI4LDggKzQ5NjksOCBAQCBpbml0Q3JlYXRlVGFibGVzKFBHY29ubiAqY29uKQogCQl9LAogCQl7 CiAJCQkicGdiZW5jaF9hY2NvdW50cyIsCi0JCQkiYWlkICAgIGludCBub3QgbnVsbCxiaWQgaW50 LGFiYWxhbmNlIGludCxmaWxsZXIgY2hhcig4NCkiLAotCQkJImFpZCBiaWdpbnQgbm90IG51bGws YmlkIGludCxhYmFsYW5jZSBpbnQsZmlsbGVyIGNoYXIoODQpIiwKKwkJCSJhaWQgICAgaW50IG5v dCBudWxsLGJpZCBpbnQsYWJhbGFuY2UgaW50LGZpbGxlciBjaGFyKDg0KSBkZWZhdWx0ICcnIiwK KwkJCSJhaWQgYmlnaW50IG5vdCBudWxsLGJpZCBpbnQsYWJhbGFuY2UgaW50LGZpbGxlciBjaGFy KDg0KSBkZWZhdWx0ICcnIiwKIAkJCTEKIAkJfSwKIAkJewpAQCAtNTAyNSwzMSArNTA2Niw4OSBA QCBpbml0QWNjb3VudChQUUV4cEJ1ZmZlckRhdGEgKnNxbCwgaW50NjQgY3VycikKIH0KIAogc3Rh dGljIHZvaWQKLWluaXRQb3B1bGF0ZVRhYmxlKFBHY29ubiAqY29uLCBjb25zdCBjaGFyICp0YWJs ZSwgaW50NjQgYmFzZSwKLQkJCQkgIGluaXRSb3dNZXRob2QgaW5pdF9yb3cpCitzaG93UG9wdWxh dGVUYWJsZUNvcHlQcm9ncmVzcyhjb25zdCBjaGFyICp0YWJsZSwgaW50NjQgY3VycmVudCwgaW50 NjQgdG90YWwpCit7CisJc3RhdGljIGludAljaGFycyA9IDA7CisJc3RhdGljIGludAlwcmV2X2No YXJzID0gMDsKKwlzdGF0aWMgaW50CWxvZ19pbnRlcnZhbCA9IDE7CisKKwkvKiBTdGF5IG9uIHRo ZSBzYW1lIGxpbmUgaWYgcmVwb3J0aW5nIHRvIGEgdGVybWluYWwgKi8KKwljaGFyCQllb2wgPSBp c2F0dHkoZmlsZW5vKHN0ZGVycikpID8gJ1xyJyA6ICdcbic7CisKKwlkb3VibGUJCWVsYXBzZWRf c2VjID0gUEdfVElNRV9HRVRfRE9VQkxFKHBnX3RpbWVfbm93KCkgLSBkYXRhX2xvYWRfc3RhcnQp OworCWRvdWJsZQkJcmVtYWluaW5nX3NlYyA9ICgoZG91YmxlKSB0b3RhbCAtIGN1cnJlbnQpICog ZWxhcHNlZF9zZWMgLyBjdXJyZW50OworCisJLyoKKwkgKiBJZiB3ZSB3YW50IHRvIHN0aWNrIHdp dGggdGhlIG9yaWdpbmFsIGxvZ2dpbmcsIHByaW50IGEgbWVzc2FnZSBlYWNoCisJICogMTAwayBp bnNlcnRlZCByb3dzLgorCSAqLworCWlmICgoIXVzZV9xdWlldCkgJiYgKGN1cnJlbnQgJSAxMDAw MDAgPT0gMCkpCisJeworCQljaGFycyA9IGZwcmludGYoc3RkZXJyLCBJTlQ2NF9GT1JNQVQgIiBv ZiAiIElOVDY0X0ZPUk1BVCAiIHR1cGxlcyAoJWQlJSkgb2YgJXMgZG9uZSAoZWxhcHNlZCAlLjJm IHMsIHJlbWFpbmluZyAlLjJmIHMpIiwKKwkJCQkJCWN1cnJlbnQsIHRvdGFsLAorCQkJCQkJKGlu dCkgKChjdXJyZW50ICogMTAwKSAvIHRvdGFsKSwKKwkJCQkJCXRhYmxlLCBlbGFwc2VkX3NlYywg cmVtYWluaW5nX3NlYyk7CisKKwkJLyoKKwkJICogSWYgdGhlIHByZXZpb3VzIHByb2dyZXNzIG1l c3NhZ2UgaXMgbG9uZ2VyIHRoYW4gdGhlIGN1cnJlbnQgb25lLAorCQkgKiBhZGQgc3BhY2VzIHRv IHRoZSBjdXJyZW50IGxpbmUgdG8gZnVsbHkgb3ZlcndyaXRlIGFueSByZW1haW5pbmcKKwkJICog Y2hhcmFjdGVycyBmcm9tIHRoZSBwcmV2aW91cyBtZXNzYWdlLgorCQkgKi8KKwkJaWYgKHByZXZf Y2hhcnMgPiBjaGFycykKKwkJCWZwcmludGYoc3RkZXJyLCAiJSpjIiwgcHJldl9jaGFycyAtIGNo YXJzLCAnICcpOworCQlmcHV0Yyhlb2wsIHN0ZGVycik7CisJCXByZXZfY2hhcnMgPSBjaGFyczsK Kwl9CisJLyogbGV0J3Mgbm90IGNhbGwgdGhlIHRpbWluZyBmb3IgZWFjaCByb3csIGJ1dCBvbmx5 IGVhY2ggMTAwIHJvd3MgKi8KKwllbHNlIGlmICh1c2VfcXVpZXQgJiYgKGN1cnJlbnQgJSAxMDAg PT0gMCkpCisJeworCQkvKiBoYXZlIHdlIHJlYWNoZWQgdGhlIG5leHQgaW50ZXJ2YWwgKG9yIGVu ZCk/ICovCisJCWlmICgoY3VycmVudCA9PSB0b3RhbCkgfHwgKGVsYXBzZWRfc2VjID49IGxvZ19p bnRlcnZhbCAqIExPR19TVEVQX1NFQ09ORFMpKQorCQl7CisJCQljaGFycyA9IGZwcmludGYoc3Rk ZXJyLCBJTlQ2NF9GT1JNQVQgIiBvZiAiIElOVDY0X0ZPUk1BVCAiIHR1cGxlcyAoJWQlJSkgb2Yg JXMgZG9uZSAoZWxhcHNlZCAlLjJmIHMsIHJlbWFpbmluZyAlLjJmIHMpIiwKKwkJCQkJCQljdXJy ZW50LCB0b3RhbCwKKwkJCQkJCQkoaW50KSAoKGN1cnJlbnQgKiAxMDApIC8gdG90YWwpLAorCQkJ CQkJCXRhYmxlLCBlbGFwc2VkX3NlYywgcmVtYWluaW5nX3NlYyk7CisKKwkJCS8qCisJCQkgKiBJ ZiB0aGUgcHJldmlvdXMgcHJvZ3Jlc3MgbWVzc2FnZSBpcyBsb25nZXIgdGhhbiB0aGUgY3VycmVu dAorCQkJICogb25lLCBhZGQgc3BhY2VzIHRvIHRoZSBjdXJyZW50IGxpbmUgdG8gZnVsbHkgb3Zl cndyaXRlIGFueQorCQkJICogcmVtYWluaW5nIGNoYXJhY3RlcnMgZnJvbSB0aGUgcHJldmlvdXMg bWVzc2FnZS4KKwkJCSAqLworCQkJaWYgKHByZXZfY2hhcnMgPiBjaGFycykKKwkJCQlmcHJpbnRm KHN0ZGVyciwgIiUqYyIsIHByZXZfY2hhcnMgLSBjaGFycywgJyAnKTsKKwkJCWZwdXRjKGVvbCwg c3RkZXJyKTsKKwkJCXByZXZfY2hhcnMgPSBjaGFyczsKKworCQkJLyogc2tpcCB0byB0aGUgbmV4 dCBpbnRlcnZhbCAqLworCQkJbG9nX2ludGVydmFsID0gKGludCkgY2VpbChlbGFwc2VkX3NlYyAv IExPR19TVEVQX1NFQ09ORFMpOworCQl9CisJfQorCisJaWYgKGN1cnJlbnQgKyAxID09IHRvdGFs ICYmIGNoYXJzICE9IDApCisJeworCQlmcHJpbnRmKHN0ZGVyciwgIiUqYyIsIGNoYXJzLCAnICcp OyAvKiBDbGVhciB0aGUgY3VycmVudCBsaW5lICovCisJCWZwdXRjKGVvbCwgc3RkZXJyKTsKKwl9 Cit9CisKK3N0YXRpYyB2b2lkCitpbml0UG9wdWxhdGVUYWJsZUNvcHlUZXh0KFBHY29ubiAqY29u LCBjb25zdCBjaGFyICp0YWJsZSwgaW50IGNvdW50ZXIsIGludDY0IGJhc2UsCisJCQkJCQkgIGlu aXRSb3dNZXRob2QgaW5pdF9yb3cpCiB7CiAJaW50CQkJbjsKLQlpbnQ2NAkJazsKLQlpbnQJCQlj aGFycyA9IDA7Ci0JaW50CQkJcHJldl9jaGFycyA9IDA7CiAJUEdyZXN1bHQgICAqcmVzOwogCVBR RXhwQnVmZmVyRGF0YSBzcWw7CiAJY2hhcgkJY29weV9zdGF0ZW1lbnRbMjU2XTsKIAljb25zdCBj aGFyICpjb3B5X3N0YXRlbWVudF9mbXQgPSAiY29weSAlcyBmcm9tIHN0ZGluIjsKLQlpbnQ2NAkJ dG90YWwgPSBiYXNlICogc2NhbGU7Ci0KLQkvKiB1c2VkIHRvIHRyYWNrIGVsYXBzZWQgdGltZSBh bmQgZXN0aW1hdGUgb2YgdGhlIHJlbWFpbmluZyB0aW1lICovCi0JcGdfdGltZV91c2VjX3Qgc3Rh cnQ7Ci0JaW50CQkJbG9nX2ludGVydmFsID0gMTsKLQotCS8qIFN0YXkgb24gdGhlIHNhbWUgbGlu ZSBpZiByZXBvcnRpbmcgdG8gYSB0ZXJtaW5hbCAqLwotCWNoYXIJCWVvbCA9IGlzYXR0eShmaWxl bm8oc3RkZXJyKSkgPyAnXHInIDogJ1xuJzsKKwlpbnQ2NAkJc3RhcnQgPSBiYXNlICogY291bnRl cjsKIAogCWluaXRQUUV4cEJ1ZmZlcigmc3FsKTsKIAogCS8qIFVzZSBDT1BZIHdpdGggRlJFRVpF IG9uIHYxNCBhbmQgbGF0ZXIgZm9yIGFsbCBvcmRpbmFyeSB0YWJsZXMgKi8KIAlpZiAoKFBRc2Vy dmVyVmVyc2lvbihjb24pID49IDE0MDAwMCkgJiYKLQkJZ2V0X3RhYmxlX3JlbGtpbmQoY29uLCB0 YWJsZSkgPT0gUkVMS0lORF9SRUxBVElPTikKKwkJZ2V0X3RhYmxlX3JlbGtpbmQoY29uLCB0YWJs ZSkgPT0gUkVMS0lORF9SRUxBVElPTiAmJgorCQkhbXVsdGlfeGFjdCkKIAkJY29weV9zdGF0ZW1l bnRfZm10ID0gImNvcHkgJXMgZnJvbSBzdGRpbiB3aXRoIChmcmVlemUgb24pIjsKIAogCkBAIC01 MDY1LDc1ICs1MTY0LDE4IEBAIGluaXRQb3B1bGF0ZVRhYmxlKFBHY29ubiAqY29uLCBjb25zdCBj aGFyICp0YWJsZSwgaW50NjQgYmFzZSwKIAkJcGdfZmF0YWwoInVuZXhwZWN0ZWQgY29weSBpbiBy ZXN1bHQ6ICVzIiwgUFFlcnJvck1lc3NhZ2UoY29uKSk7CiAJUFFjbGVhcihyZXMpOwogCi0Jc3Rh cnQgPSBwZ190aW1lX25vdygpOwotCi0JZm9yIChrID0gMDsgayA8IHRvdGFsOyBrKyspCisJZm9y IChpbnQ2NF90IGkgPSBzdGFydDsgaSA8IHN0YXJ0ICsgYmFzZTsgaSsrKQogCXsKLQkJaW50NjQJ CWogPSBrICsgMTsKLQotCQlpbml0X3Jvdygmc3FsLCBrKTsKKwkJaW5pdF9yb3coJnNxbCwgaSk7 CiAJCWlmIChQUXB1dGxpbmUoY29uLCBzcWwuZGF0YSkpCiAJCQlwZ19mYXRhbCgiUFFwdXRsaW5l IGZhaWxlZCIpOwogCiAJCWlmIChDYW5jZWxSZXF1ZXN0ZWQpCiAJCQlicmVhazsKIAotCQkvKgot CQkgKiBJZiB3ZSB3YW50IHRvIHN0aWNrIHdpdGggdGhlIG9yaWdpbmFsIGxvZ2dpbmcsIHByaW50 IGEgbWVzc2FnZSBlYWNoCi0JCSAqIDEwMGsgaW5zZXJ0ZWQgcm93cy4KLQkJICovCi0JCWlmICgo IXVzZV9xdWlldCkgJiYgKGogJSAxMDAwMDAgPT0gMCkpCi0JCXsKLQkJCWRvdWJsZQkJZWxhcHNl ZF9zZWMgPSBQR19USU1FX0dFVF9ET1VCTEUocGdfdGltZV9ub3coKSAtIHN0YXJ0KTsKLQkJCWRv dWJsZQkJcmVtYWluaW5nX3NlYyA9ICgoZG91YmxlKSB0b3RhbCAtIGopICogZWxhcHNlZF9zZWMg LyBqOwotCi0JCQljaGFycyA9IGZwcmludGYoc3RkZXJyLCBJTlQ2NF9GT1JNQVQgIiBvZiAiIElO VDY0X0ZPUk1BVCAiIHR1cGxlcyAoJWQlJSkgb2YgJXMgZG9uZSAoZWxhcHNlZCAlLjJmIHMsIHJl bWFpbmluZyAlLjJmIHMpIiwKLQkJCQkJCQlqLCB0b3RhbCwKLQkJCQkJCQkoaW50KSAoKGogKiAx MDApIC8gdG90YWwpLAotCQkJCQkJCXRhYmxlLCBlbGFwc2VkX3NlYywgcmVtYWluaW5nX3NlYyk7 Ci0KLQkJCS8qCi0JCQkgKiBJZiB0aGUgcHJldmlvdXMgcHJvZ3Jlc3MgbWVzc2FnZSBpcyBsb25n ZXIgdGhhbiB0aGUgY3VycmVudAotCQkJICogb25lLCBhZGQgc3BhY2VzIHRvIHRoZSBjdXJyZW50 IGxpbmUgdG8gZnVsbHkgb3ZlcndyaXRlIGFueQotCQkJICogcmVtYWluaW5nIGNoYXJhY3RlcnMg ZnJvbSB0aGUgcHJldmlvdXMgbWVzc2FnZS4KLQkJCSAqLwotCQkJaWYgKHByZXZfY2hhcnMgPiBj aGFycykKLQkJCQlmcHJpbnRmKHN0ZGVyciwgIiUqYyIsIHByZXZfY2hhcnMgLSBjaGFycywgJyAn KTsKLQkJCWZwdXRjKGVvbCwgc3RkZXJyKTsKLQkJCXByZXZfY2hhcnMgPSBjaGFyczsKLQkJfQot CQkvKiBsZXQncyBub3QgY2FsbCB0aGUgdGltaW5nIGZvciBlYWNoIHJvdywgYnV0IG9ubHkgZWFj aCAxMDAgcm93cyAqLwotCQllbHNlIGlmICh1c2VfcXVpZXQgJiYgKGogJSAxMDAgPT0gMCkpCi0J CXsKLQkJCWRvdWJsZQkJZWxhcHNlZF9zZWMgPSBQR19USU1FX0dFVF9ET1VCTEUocGdfdGltZV9u b3coKSAtIHN0YXJ0KTsKLQkJCWRvdWJsZQkJcmVtYWluaW5nX3NlYyA9ICgoZG91YmxlKSB0b3Rh bCAtIGopICogZWxhcHNlZF9zZWMgLyBqOwotCi0JCQkvKiBoYXZlIHdlIHJlYWNoZWQgdGhlIG5l eHQgaW50ZXJ2YWwgKG9yIGVuZCk/ICovCi0JCQlpZiAoKGogPT0gdG90YWwpIHx8IChlbGFwc2Vk X3NlYyA+PSBsb2dfaW50ZXJ2YWwgKiBMT0dfU1RFUF9TRUNPTkRTKSkKLQkJCXsKLQkJCQljaGFy cyA9IGZwcmludGYoc3RkZXJyLCBJTlQ2NF9GT1JNQVQgIiBvZiAiIElOVDY0X0ZPUk1BVCAiIHR1 cGxlcyAoJWQlJSkgb2YgJXMgZG9uZSAoZWxhcHNlZCAlLjJmIHMsIHJlbWFpbmluZyAlLjJmIHMp IiwKLQkJCQkJCQkJaiwgdG90YWwsCi0JCQkJCQkJCShpbnQpICgoaiAqIDEwMCkgLyB0b3RhbCks Ci0JCQkJCQkJCXRhYmxlLCBlbGFwc2VkX3NlYywgcmVtYWluaW5nX3NlYyk7Ci0KLQkJCQkvKgot CQkJCSAqIElmIHRoZSBwcmV2aW91cyBwcm9ncmVzcyBtZXNzYWdlIGlzIGxvbmdlciB0aGFuIHRo ZSBjdXJyZW50Ci0JCQkJICogb25lLCBhZGQgc3BhY2VzIHRvIHRoZSBjdXJyZW50IGxpbmUgdG8g ZnVsbHkgb3ZlcndyaXRlIGFueQotCQkJCSAqIHJlbWFpbmluZyBjaGFyYWN0ZXJzIGZyb20gdGhl IHByZXZpb3VzIG1lc3NhZ2UuCi0JCQkJICovCi0JCQkJaWYgKHByZXZfY2hhcnMgPiBjaGFycykK LQkJCQkJZnByaW50ZihzdGRlcnIsICIlKmMiLCBwcmV2X2NoYXJzIC0gY2hhcnMsICcgJyk7Ci0J CQkJZnB1dGMoZW9sLCBzdGRlcnIpOwotCQkJCXByZXZfY2hhcnMgPSBjaGFyczsKLQotCQkJCS8q IHNraXAgdG8gdGhlIG5leHQgaW50ZXJ2YWwgKi8KLQkJCQlsb2dfaW50ZXJ2YWwgPSAoaW50KSBj ZWlsKGVsYXBzZWRfc2VjIC8gTE9HX1NURVBfU0VDT05EUyk7Ci0JCQl9Ci0JCX0KKwkJc2hvd1Bv cHVsYXRlVGFibGVDb3B5UHJvZ3Jlc3ModGFibGUsIGksIGJhc2UgKiBzY2FsZSk7CiAJfQogCi0J aWYgKGNoYXJzICE9IDAgJiYgZW9sICE9ICdcbicpCi0JCWZwcmludGYoc3RkZXJyLCAiJSpjXHIi LCBjaGFycywgJyAnKTsJLyogQ2xlYXIgdGhlIGN1cnJlbnQgbGluZSAqLwogCiAJaWYgKFBRcHV0 bGluZShjb24sICJcXC5cbiIpKQogCQlwZ19mYXRhbCgidmVyeSBsYXN0IFBRcHV0bGluZSBmYWls ZWQiKTsKQEAgLTUxNTAsOSArNTE5Miw5IEBAIGluaXRQb3B1bGF0ZVRhYmxlKFBHY29ubiAqY29u LCBjb25zdCBjaGFyICp0YWJsZSwgaW50NjQgYmFzZSwKICAqIGEgYmxhbmstcGFkZGVkIHN0cmlu ZyBpbiBwZ2JlbmNoX2FjY291bnRzLgogICovCiBzdGF0aWMgdm9pZAotaW5pdEdlbmVyYXRlRGF0 YUNsaWVudFNpZGUoUEdjb25uICpjb24pCitpbml0R2VuZXJhdGVEYXRhQ2xpZW50U2lkZVRleHRG cm10KFBHY29ubiAqY29uKQogewotCWZwcmludGYoc3RkZXJyLCAiZ2VuZXJhdGluZyBkYXRhIChj bGllbnQtc2lkZSkuLi5cbiIpOworCWZwcmludGYoc3RkZXJyLCAiVEVYVCBtb2RlLi4uXG4iKTsK IAogCS8qCiAJICogd2UgZG8gYWxsIG9mIHRoaXMgaW4gb25lIHRyYW5zYWN0aW9uIHRvIGVuYWJs ZSB0aGUgYmFja2VuZCdzCkBAIC01MTYzLDY0ICs1MjA1LDU0OSBAQCBpbml0R2VuZXJhdGVEYXRh Q2xpZW50U2lkZShQR2Nvbm4gKmNvbikKIAkvKiB0cnVuY2F0ZSBhd2F5IGFueSBvbGQgZGF0YSAq LwogCWluaXRUcnVuY2F0ZVRhYmxlcyhjb24pOwogCi0JLyoKLQkgKiBmaWxsIGJyYW5jaGVzLCB0 ZWxsZXJzLCBhY2NvdW50cyBpbiB0aGF0IG9yZGVyIGluIGNhc2UgZm9yZWlnbiBrZXlzCi0JICog YWxyZWFkeSBleGlzdAorCWlmIChtdWx0aV94YWN0KQorCQlleGVjdXRlU3RhdGVtZW50KGNvbiwg ImNvbW1pdCIpOworCisJZm9yIChpbnQgaSA9IDA7IGkgPCBzY2FsZTsgaSsrKQorCXsKKwkJaWYg KG11bHRpX3hhY3QpCisJCQlleGVjdXRlU3RhdGVtZW50KGNvbiwgImJlZ2luIik7CisKKwkJLyoK KwkJICogZmlsbCBicmFuY2hlcywgdGVsbGVycywgYWNjb3VudHMgaW4gdGhhdCBvcmRlciBpbiBj YXNlIGZvcmVpZ24ga2V5cworCQkgKiBhbHJlYWR5IGV4aXN0CisJCSAqLworCQlpbml0UG9wdWxh dGVUYWJsZUNvcHlUZXh0KGNvbiwgInBnYmVuY2hfYnJhbmNoZXMiLCBpLCBuYnJhbmNoZXMsIGlu aXRCcmFuY2gpOworCQlpbml0UG9wdWxhdGVUYWJsZUNvcHlUZXh0KGNvbiwgInBnYmVuY2hfdGVs bGVycyIsIGksIG50ZWxsZXJzLCBpbml0VGVsbGVyKTsKKwkJaW5pdFBvcHVsYXRlVGFibGVDb3B5 VGV4dChjb24sICJwZ2JlbmNoX2FjY291bnRzIiwgaSwgbmFjY291bnRzLCBpbml0QWNjb3VudCk7 CisKKwkJaWYgKG11bHRpX3hhY3QpCisJCQlleGVjdXRlU3RhdGVtZW50KGNvbiwgImNvbW1pdCIp OworCX0KKworCWlmICghbXVsdGlfeGFjdCkKKwkJZXhlY3V0ZVN0YXRlbWVudChjb24sICJjb21t aXQiKTsKK30KKworCisvKgorICogU2F2ZSBjaGFyIGRhdGEgdG8gYnVmZmVyCisgKiBLZXB0IGFz IHNlcGFyYXRlIHByb2MgZm9yIHBvc3NpYmxlIGFkZGl0aW9uIG9mIHNvbWV0aGluZworICogbGlr ZSBhZGRDaGFyQ29sdW1uIGluIGZ1dHVyZQorICovCitzdGF0aWMgdm9pZAorYnVmZmVyQ2hhckRh dGEoY2hhciAqc3JjLCBpbnQzMl90IGxlbikKK3sKKwlBc3NlcnQoYmluX2NvcHlfYnVmZmVyX2xl bmd0aCArIGxlbiA8PSBCSU5fQ09QWV9CVUZfU0laRSk7CisKKwltZW1jcHkoKGNoYXIgKikgYmlu X2NvcHlfYnVmZmVyICsgYmluX2NvcHlfYnVmZmVyX2xlbmd0aCwgKGNoYXIgKikgc3JjLCBsZW4p OworCWJpbl9jb3B5X2J1ZmZlcl9sZW5ndGggKz0gbGVuOworfQorCisvKgorICogQ29udmVydHMg cGxhdGZvcm0gYnl0ZSBvcmRlciBpbnRvIG5ldHdvcmsgYnl0ZSBvcmRlcgorICogU1BBUkMgZG9l c24ndCByZXFpcmUgdGhhdAorICovCitzdGF0aWMgdm9pZAorYnVmZmVyRGF0YSh2b2lkICpzcmMs IGludDMyX3QgbGVuKQoreworCUFzc2VydChiaW5fY29weV9idWZmZXJfbGVuZ3RoICsgbGVuIDw9 IEJJTl9DT1BZX0JVRl9TSVpFKTsKKworI2lmZGVmIF9fc3BhcmNfXworCWJ1ZmZlckNoYXJEYXRh KHNyYywgbGVuKTsKKyNlbHNlCisKKwlpZiAobGVuID09IDEpCisJCWJ1ZmZlckNoYXJEYXRhKHNy YywgbGVuKTsKKwllbHNlCisJeworCQlmb3IgKGludDMyX3QgaSA9IDA7IGkgPCBsZW47IGkrKykK KwkJeworCQkJKChjaGFyICopIGJpbl9jb3B5X2J1ZmZlciArIGJpbl9jb3B5X2J1ZmZlcl9sZW5n dGgpW2ldID0KKwkJCQkoKGNoYXIgKikgc3JjKVtsZW4gLSBpIC0gMV07CisJCX0KKworCQliaW5f Y29weV9idWZmZXJfbGVuZ3RoICs9IGxlbjsKKwl9CisjZW5kaWYKK30KKworLyoKKyAqIGFkZHMg Y29sdW1uIGNvdW50ZXIKKyAqLworc3RhdGljIHZvaWQKK2FkZENvbHVtbkNvdW50ZXIoaW50MTZf dCBuKQoreworCWJ1ZmZlckRhdGEoKHZvaWQgKikgJm4sIHNpemVvZihuKSk7Cit9CisKKy8qCisg KiBhZGRzIGNvbHVtbiB3aXRoIGludGkzMiB2YWx1ZQorICovCitzdGF0aWMgdm9pZAorYWRkSW50 MzJDb2x1bW4oaW50MzJfdCB2YWx1ZSkKK3sKKwlpbnQzMl90CQlkYXRhID0gdmFsdWU7CisJaW50 MzJfdAkJc2l6ZSA9IHNpemVvZihkYXRhKTsKKworCWJ1ZmZlckRhdGEoKHZvaWQgKikgJnNpemUs IHNpemVvZihzaXplKSk7CisJYnVmZmVyRGF0YSgodm9pZCAqKSAmZGF0YSwgc2l6ZW9mKGRhdGEp KTsKK30KKworLyoKKyAqIGFkZHMgY29sdW1uIHdpdGggaW50aTY0IHZhbHVlCisgKi8KK3N0YXRp YyB2b2lkCithZGRJbnQ2NENvbHVtbihpbnQ2NF90IHZhbHVlKQoreworCWludDY0X3QJCWRhdGEg PSB2YWx1ZTsKKwlpbnQzMl90CQlzaXplID0gc2l6ZW9mKGRhdGEpOworCisJYnVmZmVyRGF0YSgo dm9pZCAqKSAmc2l6ZSwgc2l6ZW9mKHNpemUpKTsKKwlidWZmZXJEYXRhKCh2b2lkICopICZkYXRh LCBzaXplb2YoZGF0YSkpOworfQorCisvKgorICogU3RhcnRzIGNvbW11bmljYXRpb24gd2l0aCBz ZXJ2ZXIgZm9yIENPUFkgRlJPTSBCSU5BUlkgc3RhdGVtZW50CisgKi8KK3N0YXRpYyB2b2lkCitz ZW5kQmluYXJ5Q29weUhlYWRlcihQR2Nvbm4gKmNvbikKK3sKKwlzdGF0aWMgY2hhciBoZWFkZXJb XSA9IHsnUCcsICdHJywgJ0MnLCAnTycsICdQJywgJ1knLCAnXG4nLCAnXDM3NycsICdccicsICdc bicsICdcMCcsCisJCSdcMCcsICdcMCcsICdcMCcsICdcMCcsCisJJ1wwJywgJ1wwJywgJ1wwJywg J1wwJ307CisKKwlQUXB1dENvcHlEYXRhKGNvbiwgaGVhZGVyLCAxOSk7Cit9CisKKy8qCisgKiBG aW5pc2hlcyBjb21tdW5pY2F0aW9uIHdpdGggc2VydmVyIGZvciBDT1BZIEZST00gQklOQVJZIHN0 YXRlbWVudAorICovCitzdGF0aWMgdm9pZAorc2VuZEJpbmFyeUNvcHlUcmFpbGVyKFBHY29ubiAq Y29uKQoreworCXN0YXRpYyBjaGFyIHRyYWlsZXJbXSA9IHsweEZGLCAweEZGfTsKKworCVBRcHV0 Q29weURhdGEoY29uLCB0cmFpbGVyLCAyKTsKK30KKworLyoKKyAqIEZsYXNoZXMgY3VycmVudCBi dWZmZXIgb3ZlciBuZXR3b3JrIGlmIG5lZWRlZAorICovCitzdGF0aWMgdm9pZAorZmx1c2hCdWZm ZXIoUEdjb25uICpjb24sIGludDE2X3Qgcm93X2xlbikKK3sKKwlQR3Jlc3VsdCAgICpyZXM7CisK KwlpZiAoYmluX2NvcHlfYnVmZmVyX2xlbmd0aCArIHJvd19sZW4gPiBCSU5fQ09QWV9CVUZfU0la RSkKKwl7CisJCXJlcyA9IFBRZ2V0UmVzdWx0KGNvbik7CisKKwkJQXNzZXJ0KGJpbl9jb3B5X2J1 ZmZlcl9sZW5ndGggPD0gQklOX0NPUFlfQlVGX1NJWkUpOworCisJCS8qIGZsdXNoIGN1cnJlbnQg YnVmZmVyICovCisJCWlmIChQUXJlc3VsdFN0YXR1cyhyZXMpID09IFBHUkVTX0NPUFlfSU4pCisJ CQlQUXB1dENvcHlEYXRhKGNvbiwgKGNoYXIgKikgYmluX2NvcHlfYnVmZmVyLCBiaW5fY29weV9i dWZmZXJfbGVuZ3RoKTsKKwkJZWxzZQorCQkJcGdfZmF0YWwoIkl0IGlzIE5PVCBhIENPUFkgY29t bWFuZCB0aGF0IGlzIGN1cnJlbnRseSBydW5uaW5nIik7CisKKwkJUFFjbGVhcihyZXMpOworCQli aW5fY29weV9idWZmZXJfbGVuZ3RoID0gMDsKKwl9Cit9CisKKy8qCisgKiBTZW5kcyBjdXJyZW50 IGJyYW5jaCByb3cgdG8gYnVmZmVyCisgKi8KK3N0YXRpYyB2b2lkCitpbml0QnJhbmNoQmluYXJ5 KFBHY29ubiAqY29uLCBpbnQ2NF90IGN1cnIsIGludDMyX3QgcGFyZW50KQoreworCS8qLS0tCisJ ICogQ2hlY2sgZG9jdW1lbnRhdGlvbiBhYm91dCBDT1BZIGNvbW1hbmQ6CisJICogaHR0cHM6Ly93 d3cucG9zdGdyZXNxbC5vcmcvZG9jcy9jdXJyZW50L3NxbC1jb3B5Lmh0bWwKKwkgKgorCSAqIEVh Y2ggcm93IG9mIGJyYW5jaGVzIHRhYmxlIGlzIHNlbnQgYXM6CisJICogLSAyIGJ5dGVzIGZvciBu dW1iZXIgb2YgY29sdW1ucyBpbiB0dXBsZSBvciBzaXplb2YoaW50MTZfdCkKKwkgKiAtIHRoZW4g NCBieXRlcyBvciBzaXplb2YoaW50MzJfdCkgaW4gZnJvbnQgb2YgZWFjaCBmaWVsZCB3aXRoIGxl bmd0aCBvZiB0aGUgZmllbGQKKwkgKgorCSAqIC0gYnJhbmNoZXMgdGFibGUgaGFzIGZvbGxvd2lu ZyBjb2x1bW5zOgorCSAqIC0gNCBieXRlcyBmb3IgYmlkIGNvbHVtbiBvciBzaXplb2YoaW50MzJf dCkKKwkgKiAtIDQgYnl0ZXMgZm9yIGJiYWxhbmNlIGNvbHVtbiBvciBzaXplb2YoaW50MzJfdCkK KwkgKiAtIDg4IGJ5dGVzIGZvciBmaWxsZXIgY29sdW1uIChvcHRpb25hbCBzaW5jZSBubyByZXF1 aXJlbWVudCBmb3Igcm93IGxlbmd0aCkKKwkgKi0tLQogCSAqLwotCWluaXRQb3B1bGF0ZVRhYmxl KGNvbiwgInBnYmVuY2hfYnJhbmNoZXMiLCBuYnJhbmNoZXMsIGluaXRCcmFuY2gpOwotCWluaXRQ b3B1bGF0ZVRhYmxlKGNvbiwgInBnYmVuY2hfdGVsbGVycyIsIG50ZWxsZXJzLCBpbml0VGVsbGVy KTsKLQlpbml0UG9wdWxhdGVUYWJsZShjb24sICJwZ2JlbmNoX2FjY291bnRzIiwgbmFjY291bnRz LCBpbml0QWNjb3VudCk7CisJLyogZm9sbG93aW5nIGlzIG91ciBtYXggaW50ZW50IGF0IHRoZSBt b21lbnQgKi8KKwlpbnQxNl90CQltYXhfcm93X2xlbiA9IDIgKyAoNCArIDQpICsgKDQgKyA0KSAr ICg0ICsgODgpOwogCi0JZXhlY3V0ZVN0YXRlbWVudChjb24sICJjb21taXQiKTsKKwlmbHVzaEJ1 ZmZlcihjb24sIG1heF9yb3dfbGVuKTsKKworCWFkZENvbHVtbkNvdW50ZXIoMik7CisKKwlhZGRJ bnQzMkNvbHVtbihjdXJyICsgMSk7CisJYWRkSW50MzJDb2x1bW4oMCk7CisJLyogd2UgZG9uJ3Qg c2VuZCBmaWxsZXIgY29sdW1uIGhlcmUgdG8gbWluaW1pemUgbmV0d29yayB0cmFmZmljIGFuZCBX QUwgKi8KIH0KIAogLyoKLSAqIEZpbGwgdGhlIHN0YW5kYXJkIHRhYmxlcyB3aXRoIHNvbWUgZGF0 YSBnZW5lcmF0ZWQgb24gdGhlIHNlcnZlcgotICoKLSAqIEFzIGFscmVhZHkgdGhlIGNhc2Ugd2l0 aCB0aGUgY2xpZW50LXNpZGUgZGF0YSBnZW5lcmF0aW9uLCB0aGUgZmlsbGVyCi0gKiBjb2x1bW4g ZGVmYXVsdHMgdG8gTlVMTCBpbiBwZ2JlbmNoX2JyYW5jaGVzIGFuZCBwZ2JlbmNoX3RlbGxlcnMs Ci0gKiBhbmQgaXMgYSBibGFuay1wYWRkZWQgc3RyaW5nIGluIHBnYmVuY2hfYWNjb3VudHMuCisg KiBTZW5kcyBjdXJyZW50IHRlbGxlciByb3cgdG8gYnVmZmVyCiAgKi8KIHN0YXRpYyB2b2lkCi1p bml0R2VuZXJhdGVEYXRhU2VydmVyU2lkZShQR2Nvbm4gKmNvbikKK2luaXRUZWxsZXJCaW5hcnko UEdjb25uICpjb24sIGludDY0X3QgY3VyciwgaW50MzJfdCBwYXJlbnQpCiB7Ci0JUFFFeHBCdWZm ZXJEYXRhIHNxbDsKKwkvKi0tLQorCSAqIENoZWNrIGRvY3VtZW50YXRpb24gYWJvdXQgQ09QWSBj b21tYW5kOgorCSAqIGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL2RvY3MvY3VycmVudC9zcWwt Y29weS5odG1sCisJICoKKwkgKiBFYWNoIHJvdyBvZiB0ZWxsZXJzIHRhYmxlIGlzIHNlbnQgYXM6 CisJICogLSAyIGJ5dGVzIGZvciBudW1iZXIgb2YgY29sdW1ucyBpbiB0dXBsZSBvciBzaXplb2Yo aW50MTZfdCkKKwkgKiAtIHRoZW4gNCBieXRlcyBvciBzaXplb2YoaW50MzJfdCkgaW4gZnJvbnQg b2YgZWFjaCBmaWVsZCB3aXRoIGxlbmd0aCBvZiB0aGUgZmllbGQKKwkgKgorCSAqIC0gdGVsbGVy cyB0YWJsZSBoYXMgZm9sbG93aW5nIGNvbHVtbnM6CisJICogLSA0IGJ5dGVzIGZvciB0aWQgY29s dW1uIG9yIHNpemVvZihpbnQzMl90KQorCSAqIC0gNCBieXRlcyBmb3IgYmlkIGNvbHVtbiBvciBz aXplb2YoaW50MzJfdCkKKwkgKiAtIDQgYnl0ZXMgZm9yIHRiYWxhbmNlIGNvbHVtbiBvciBzaXpl b2YoaW50MzJfdCkKKwkgKiAtIDg0IGJ5dGVzIGZvciBmaWxsZXIgY29sdW1uIChvcHRpb25hbCBz aW5jZSBubyByZXF1aXJlbWVudCBmb3Igcm93IGxlbmd0aCkKKwkgKi0tLQorCSAqLworCS8qIGZv bGxvd2luZyBpcyBvdXIgbWF4IGludGVudCBhdCB0aGUgbW9tZW50ICovCisJaW50MTZfdAkJbWF4 X3Jvd19sZW4gPSAyICsgKDQgKyA0KSArICg0ICsgNCkgKyAoNCArIDQpICsgKDQgKyA4NCk7CisK KwlmbHVzaEJ1ZmZlcihjb24sIG1heF9yb3dfbGVuKTsKKworCWFkZENvbHVtbkNvdW50ZXIoMyk7 CisKKwlhZGRJbnQzMkNvbHVtbihjdXJyICsgMSk7CisJYWRkSW50MzJDb2x1bW4oY3VyciAvIHBh cmVudCArIDEpOworCWFkZEludDMyQ29sdW1uKDApOworCS8qIHdlIGRvbid0IHNlbmQgZmlsbGVy IGNvbHVtbiBoZXJlIHRvIG1pbmltaXplIG5ldHdvcmsgdHJhZmZpYyBhbmQgV0FMICovCit9CisK Ky8qCisgKiBTZW5kcyBjdXJyZW50IGFjY291bnQgcm93IHRvIGJ1ZmZlcgorICovCitzdGF0aWMg dm9pZAoraW5pdEFjY291bnRCaW5hcnkoUEdjb25uICpjb24sIGludDY0X3QgY3VyciwgaW50MzJf dCBwYXJlbnQpCit7CisJLyotLS0KKwkgKiBDaGVjayBkb2N1bWVudGF0aW9uIGFib3V0IENPUFkg Y29tbWFuZDoKKwkgKiBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9kb2NzL2N1cnJlbnQvc3Fs LWNvcHkuaHRtbAorCSAqCisJICogRWFjaCByb3cgb2YgYWNjb3VudHMgdGFibGUgaXMgc2VudCBh czoKKwkgKiAtIDIgYnl0ZXMgZm9yIG51bWJlciBvZiBjb2x1bW5zIGluIHR1cGxlIG9yIHNpemVv ZihpbnQxNl90KQorCSAqIC0gdGhlbiA0IGJ5dGVzIG9yIHNpemVvZihpbnQzMl90KSBpbiBmcm9u dCBvZiBlYWNoIGZpZWxkIHdpdGggbGVuZ3RoIG9mIHRoZSBmaWVsZAorCSAqCisJICogLSBhY2Nv dW50cyB0YWJsZSBoYXMgZm9sbG93aW5nIGNvbHVtbnMgKHRha2luZyBpbnRvIGFjY291bnQgc2Nh bGUgPiAyMDAwMCk6CisJICogLSA4IGJ5dGVzIGZvciBhaWQgY29sdW1uIG9yIHNpemVvZihpbnQ2 NF90KQorCSAqIC0gNCBieXRlcyBmb3IgYmlkIGNvbHVtbiBvciBzaXplb2YoaW50MzJfdCkKKwkg KiAtIDQgYnl0ZXMgZm9yIGFiYWxhbmNlIGNvbHVtbiBvciBzaXplb2YoaW50MzJfdCkKKwkgKiAt IDg0IGJ5dGVzIGZvciBmaWxsZXIgY29sdW1uIChvcHRpb25hbCBzaW5jZSBubyByZXF1aXJlbWVu dCBmb3Igcm93IGxlbmd0aCkKKwkgKi0tLQorCSAqLworCS8qIGZvbGxvd2luZyBpcyBvdXIgbWF4 IGludGVudCBhdCB0aGUgbW9tZW50ICovCisJaW50MTZfdAkJbWF4X3Jvd19sZW4gPSAyICsgKDQg KyA4KSArICg0ICsgNCkgKyAoNCArIDQpICsgKDQgKyA4NCk7CisKKwlmbHVzaEJ1ZmZlcihjb24s IG1heF9yb3dfbGVuKTsKKworCWFkZENvbHVtbkNvdW50ZXIoMyk7CisKKwlpZiAoc2NhbGUgPD0g U0NBTEVfMzJCSVRfVEhSRVNIT0xEKQorCQlhZGRJbnQzMkNvbHVtbihjdXJyICsgMSk7CisJZWxz ZQorCQlhZGRJbnQ2NENvbHVtbihjdXJyKTsKKworCWFkZEludDMyQ29sdW1uKGN1cnIgLyBwYXJl bnQgKyAxKTsKKwlhZGRJbnQzMkNvbHVtbigwKTsKKwkvKiB3ZSBkb24ndCBzZW5kIGZpbGxlciBj b2x1bW4gaGVyZSB0byBtaW5pbWl6ZSBuZXR3b3JrIHRyYWZmaWMgYW5kIFdBTCAqLworfQorCisv KgorICogVW5pdmVyc2FsIHdyYXBwZXIgZm9yIHNlbmRpbmcgZGF0YSBpbiBiaW5hcnkgZm9ybWF0 CisgKi8KK3N0YXRpYyB2b2lkCitpbml0UG9wdWxhdGVUYWJsZUNvcHlCaW5hcnkoUEdjb25uICpj b24sIGNoYXIgKnRhYmxlLCBjaGFyICpjb2x1bW5zLAorCQkJCQkJCWludCBjb3VudGVyLCBpbnQ2 NF90IGJhc2UsIGluaXRSb3dNZXRob2RCaW5hcnkgaW5pdF9yb3cpCit7CisJaW50CQkJbjsKKwlQ R3Jlc3VsdCAgICpyZXM7CisJY2hhcgkJY29weV9zdGF0ZW1lbnRbMjU2XTsKKwljb25zdCBjaGFy ICpjb3B5X3N0YXRlbWVudF9mbXQgPSAiY29weSAlcyAoJXMpIGZyb20gc3RkaW4gKGZvcm1hdCBi aW5hcnkpIjsKKwlpbnQ2NF90CQlzdGFydCA9IGJhc2UgKiBjb3VudGVyOworCisJYmluX2NvcHlf YnVmZmVyX2xlbmd0aCA9IDA7CisKKwkvKiBVc2UgQ09QWSB3aXRoIEZSRUVaRSBvbiB2MTQgYW5k IGxhdGVyIGZvciBhbGwgb3JkaW5hcnkgdGFibGVzICovCisJaWYgKChQUXNlcnZlclZlcnNpb24o Y29uKSA+PSAxNDAwMDApICYmCisJCWdldF90YWJsZV9yZWxraW5kKGNvbiwgdGFibGUpID09IFJF TEtJTkRfUkVMQVRJT04gJiYKKwkJIW11bHRpX3hhY3QpCisJCWNvcHlfc3RhdGVtZW50X2ZtdCA9 ICJjb3B5ICVzICglcykgZnJvbSBzdGRpbiB3aXRoIChmb3JtYXQgYmluYXJ5LCBmcmVlemUgb24p IjsKKworCW4gPSBwZ19zbnByaW50Zihjb3B5X3N0YXRlbWVudCwgc2l6ZW9mKGNvcHlfc3RhdGVt ZW50KSwgY29weV9zdGF0ZW1lbnRfZm10LCB0YWJsZSwgY29sdW1ucyk7CisJaWYgKG4gPj0gc2l6 ZW9mKGNvcHlfc3RhdGVtZW50KSkKKwkJcGdfZmF0YWwoImludmFsaWQgYnVmZmVyIHNpemU6IG11 c3QgYmUgYXQgbGVhc3QgJWQgY2hhcmFjdGVycyBsb25nIiwgbik7CisJZWxzZSBpZiAobiA9PSAt MSkKKwkJcGdfZmF0YWwoImludmFsaWQgZm9ybWF0IHN0cmluZyIpOworCisJcmVzID0gUFFleGVj KGNvbiwgY29weV9zdGF0ZW1lbnQpOworCisJaWYgKFBRcmVzdWx0U3RhdHVzKHJlcykgIT0gUEdS RVNfQ09QWV9JTikKKwkJcGdfZmF0YWwoInVuZXhwZWN0ZWQgY29weSBpbiByZXN1bHQ6ICVzIiwg UFFlcnJvck1lc3NhZ2UoY29uKSk7CisJUFFjbGVhcihyZXMpOworCisKKwlzZW5kQmluYXJ5Q29w eUhlYWRlcihjb24pOworCisKKwlmb3IgKGludDY0X3QgaSA9IHN0YXJ0OyBpIDwgc3RhcnQgKyBi YXNlOyBpKyspCisJeworCQlpbml0X3Jvdyhjb24sIGksIGJhc2UpOworCisJCWlmIChDYW5jZWxS ZXF1ZXN0ZWQpCisJCQlicmVhazsKKworCQlzaG93UG9wdWxhdGVUYWJsZUNvcHlQcm9ncmVzcyh0 YWJsZSwgaSwgYmFzZSAqIHNjYWxlKTsKKwl9CisKKwlyZXMgPSBQUWdldFJlc3VsdChjb24pOwor CisJQXNzZXJ0KGJpbl9jb3B5X2J1ZmZlcl9sZW5ndGggPD0gQklOX0NPUFlfQlVGX1NJWkUpOwor CisJaWYgKFBRcmVzdWx0U3RhdHVzKHJlcykgPT0gUEdSRVNfQ09QWV9JTikKKwkJUFFwdXRDb3B5 RGF0YShjb24sIChjaGFyICopIGJpbl9jb3B5X2J1ZmZlciwgYmluX2NvcHlfYnVmZmVyX2xlbmd0 aCk7CisJZWxzZQorCQlmcHJpbnRmKHN0ZGVyciwgIlVuZXhwZWN0ZWQgbW9kZSAlZCBpbnN0ZWFk IG9mICVkXG4iLCBQUXJlc3VsdFN0YXR1cyhyZXMpLCBQR1JFU19DT1BZX0lOKTsKKwlQUWNsZWFy KHJlcyk7CisKKworCXNlbmRCaW5hcnlDb3B5VHJhaWxlcihjb24pOworCisKKwlyZXMgPSBQUWdl dFJlc3VsdChjb24pOworCWlmIChQUXJlc3VsdFN0YXR1cyhyZXMpID09IFBHUkVTX0NPUFlfSU4p CisJeworCQlpZiAoUFFwdXRDb3B5RW5kKGNvbiwgTlVMTCkgPT0gMSkJLyogc3VjY2VzcyAqLwor CQl7CisJCQlQUWNsZWFyKHJlcyk7CisJCQlyZXMgPSBQUWdldFJlc3VsdChjb24pOworCQkJaWYg KFBRcmVzdWx0U3RhdHVzKHJlcykgIT0gUEdSRVNfQ09NTUFORF9PSykKKwkJCQlmcHJpbnRmKHN0 ZGVyciwgIkVycm9yOiAlc1xuIiwgUFFlcnJvck1lc3NhZ2UoY29uKSk7CisJCX0KKwkJZWxzZQor CQkJZnByaW50ZihzdGRlcnIsICJFcnJvcjogJXNcbiIsIFBRZXJyb3JNZXNzYWdlKGNvbikpOwor CX0KKwlQUWNsZWFyKHJlcyk7Cit9CisKKy8qCisgKiBXcmFwcGVyIGZvciBiaW5hcnkgZGF0YSBs b2FkCisgKi8KK3N0YXRpYyB2b2lkCitpbml0R2VuZXJhdGVEYXRhQ2xpZW50U2lkZUJpbmFyeUZy bXQoUEdjb25uICpjb24pCit7CisKKwlmcHJpbnRmKHN0ZGVyciwgIkJJTkFSWSBtb2RlLi4uXG4i KTsKIAotCWZwcmludGYoc3RkZXJyLCAiZ2VuZXJhdGluZyBkYXRhIChzZXJ2ZXItc2lkZSkuLi5c biIpOworCWJpbl9jb3B5X2J1ZmZlciA9IHBnX21hbGxvYyhCSU5fQ09QWV9CVUZfU0laRSk7CisJ YmluX2NvcHlfYnVmZmVyX2xlbmd0aCA9IDA7CiAKIAkvKgotCSAqIHdlIGRvIGFsbCBvZiB0aGlz IGluIG9uZSB0cmFuc2FjdGlvbiB0byBlbmFibGUgdGhlIGJhY2tlbmQncwotCSAqIGRhdGEtbG9h ZGluZyBvcHRpbWl6YXRpb25zCisJICogd2UgZG8gYWxsIG9mIHRoaXMgaW4gbXVsdGlwbGUgdHJh bnNhY3Rpb25zIHRvIG1pbmltaXplIGxvYWQgb24gREIKKwkgKiBzZXJ2ZXIgYW5kIHBlcmhhcHMg aW4gZnV0dXJlIGFsbG93IGxvYWQgaW4gcGFyYWxsZWwgc2Vzc2lvbnMKIAkgKi8KIAlleGVjdXRl U3RhdGVtZW50KGNvbiwgImJlZ2luIik7CiAKIAkvKiB0cnVuY2F0ZSBhd2F5IGFueSBvbGQgZGF0 YSAqLwogCWluaXRUcnVuY2F0ZVRhYmxlcyhjb24pOwogCisJaWYgKG11bHRpX3hhY3QpCisJCWV4 ZWN1dGVTdGF0ZW1lbnQoY29uLCAiY29tbWl0Iik7CisKKwlmb3IgKGludCBpID0gMDsgaSA8IHNj YWxlOyBpKyspCisJeworCQlpZiAobXVsdGlfeGFjdCkKKwkJCWV4ZWN1dGVTdGF0ZW1lbnQoY29u LCAiYmVnaW4iKTsKKworCQlpbml0UG9wdWxhdGVUYWJsZUNvcHlCaW5hcnkoY29uLCAicGdiZW5j aF9icmFuY2hlcyIsICJiaWQsIGJiYWxhbmNlIiwKKwkJCQkJCQkJCWksIG5icmFuY2hlcywgaW5p dEJyYW5jaEJpbmFyeSk7CisJCWluaXRQb3B1bGF0ZVRhYmxlQ29weUJpbmFyeShjb24sICJwZ2Jl bmNoX3RlbGxlcnMiLCAidGlkLCBiaWQsIHRiYWxhbmNlIiwKKwkJCQkJCQkJCWksIG50ZWxsZXJz LCBpbml0VGVsbGVyQmluYXJ5KTsKKwkJaW5pdFBvcHVsYXRlVGFibGVDb3B5QmluYXJ5KGNvbiwg InBnYmVuY2hfYWNjb3VudHMiLCAiYWlkLCBiaWQsIGFiYWxhbmNlIiwKKwkJCQkJCQkJCWksIG5h Y2NvdW50cywgaW5pdEFjY291bnRCaW5hcnkpOworCisJCWlmIChtdWx0aV94YWN0KQorCQkJZXhl Y3V0ZVN0YXRlbWVudChjb24sICJjb21taXQiKTsKKwl9CisKKwlpZiAoIW11bHRpX3hhY3QpCisJ CWV4ZWN1dGVTdGF0ZW1lbnQoY29uLCAiY29tbWl0Iik7CisKKwlwZ19mcmVlKGJpbl9jb3B5X2J1 ZmZlcik7Cit9CisKKy8qCisgKiBGaWxsIHRoZSBzdGFuZGFyZCB0YWJsZXMgd2l0aCBzb21lIGRh dGEgZ2VuZXJhdGVkIGFuZCBzZW50IGZyb20gdGhlIGNsaWVudC4KKyAqLworc3RhdGljIHZvaWQK K2luaXRHZW5lcmF0ZURhdGFDbGllbnRTaWRlKFBHY29ubiAqY29uKQoreworCWZwcmludGYoc3Rk ZXJyLCAiZ2VuZXJhdGluZyBkYXRhIChjbGllbnQtc2lkZSBhcyAlcyB0cmFuc2FjdGlvbiVzKSBp biAiLAorCQkJbXVsdGlfeGFjdCA/ICJtdWx0aXBsZSIgOiAic2luZ2xlIiwgbXVsdGlfeGFjdCA/ ICJzIiA6ICIiKTsKKworCWRhdGFfbG9hZF9zdGFydCA9IHBnX3RpbWVfbm93KCk7CisKKwlzd2l0 Y2ggKGRhdGFfZ2VuZXJhdGlvbl90eXBlKQorCXsKKwkJY2FzZSBJTklUX1NURVBfR0VOX1RZUEVf Q09QWV9URVhUOgorCQkJaW5pdEdlbmVyYXRlRGF0YUNsaWVudFNpZGVUZXh0RnJtdChjb24pOwor CQkJYnJlYWs7CisJCWNhc2UgSU5JVF9TVEVQX0dFTl9UWVBFX0NPUFlfQklOQVJZOgorCQkJaW5p dEdlbmVyYXRlRGF0YUNsaWVudFNpZGVCaW5hcnlGcm10KGNvbik7CisJCQlicmVhazsKKwl9Cit9 CisKKy8qCisgKiBHZW5lcmF0aW5nIGRhdGEgdmlhIElOU0VSVCAuLiBTRUxFQ1QgLi4gRlJPTSBn ZW5lcmF0ZV9zZXJpZXMKKyAqIFBvc3NpYmx5IGFzICJPbmUgdHJhbnNhY3Rpb24gcGVyIHNjYWxl IiBpbiBtdWx0aS10cmFuc2FjdGlvbiBtb2RlCisgKi8KK3N0YXRpYyB2b2lkCitnZW5lcmF0ZURh dGFJbnNlcnRTZXJpZXMoUEdjb25uICpjb24pCit7CisJUFFFeHBCdWZmZXJEYXRhIHNxbDsKKwor CWZwcmludGYoc3RkZXJyLCAidmlhIElOU0VSVCAuLiBTRUxFQ1QgZ2VuZXJhdGVfc2VyaWVzLi4u IGluIG11bHRpcGxlIFRYTihzKVxuIik7CisKIAlpbml0UFFFeHBCdWZmZXIoJnNxbCk7CiAKLQlw cmludGZQUUV4cEJ1ZmZlcigmc3FsLAotCQkJCQkgICJpbnNlcnQgaW50byBwZ2JlbmNoX2JyYW5j aGVzKGJpZCxiYmFsYW5jZSkgIgotCQkJCQkgICJzZWxlY3QgYmlkLCAwICIKLQkJCQkJICAiZnJv bSBnZW5lcmF0ZV9zZXJpZXMoMSwgJWQpIGFzIGJpZCIsIG5icmFuY2hlcyAqIHNjYWxlKTsKLQll eGVjdXRlU3RhdGVtZW50KGNvbiwgc3FsLmRhdGEpOwotCi0JcHJpbnRmUFFFeHBCdWZmZXIoJnNx bCwKLQkJCQkJICAiaW5zZXJ0IGludG8gcGdiZW5jaF90ZWxsZXJzKHRpZCxiaWQsdGJhbGFuY2Up ICIKLQkJCQkJICAic2VsZWN0IHRpZCwgKHRpZCAtIDEpIC8gJWQgKyAxLCAwICIKLQkJCQkJICAi ZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMSwgJWQpIGFzIHRpZCIsIG50ZWxsZXJzLCBudGVsbGVycyAq IHNjYWxlKTsKLQlleGVjdXRlU3RhdGVtZW50KGNvbiwgc3FsLmRhdGEpOwotCi0JcHJpbnRmUFFF eHBCdWZmZXIoJnNxbCwKLQkJCQkJICAiaW5zZXJ0IGludG8gcGdiZW5jaF9hY2NvdW50cyhhaWQs YmlkLGFiYWxhbmNlLGZpbGxlcikgIgotCQkJCQkgICJzZWxlY3QgYWlkLCAoYWlkIC0gMSkgLyAl ZCArIDEsIDAsICcnICIKLQkJCQkJICAiZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMSwgIiBJTlQ2NF9G T1JNQVQgIikgYXMgYWlkIiwKLQkJCQkJICBuYWNjb3VudHMsIChpbnQ2NCkgbmFjY291bnRzICog c2NhbGUpOwotCWV4ZWN1dGVTdGF0ZW1lbnQoY29uLCBzcWwuZGF0YSk7CisJZXhlY3V0ZVN0YXRl bWVudChjb24sICJiZWdpbiIpOworCisJLyogdHJ1bmNhdGUgYXdheSBhbnkgb2xkIGRhdGEgKi8K Kwlpbml0VHJ1bmNhdGVUYWJsZXMoY29uKTsKKworCWlmIChtdWx0aV94YWN0KQorCQlleGVjdXRl U3RhdGVtZW50KGNvbiwgImNvbW1pdCIpOworCisJZm9yIChpbnQgaSA9IDA7IGkgPCBzY2FsZTsg aSsrKQorCXsKKwkJaWYgKG11bHRpX3hhY3QpCisJCQlleGVjdXRlU3RhdGVtZW50KGNvbiwgImJl Z2luIik7CisKKwkJcHJpbnRmUFFFeHBCdWZmZXIoJnNxbCwKKwkJCQkJCSAgImluc2VydCBpbnRv IHBnYmVuY2hfYnJhbmNoZXMoYmlkLCBiYmFsYW5jZSkgIgorCQkJCQkJICAidmFsdWVzKCVkLCAw KSIsIGkgKyAxKTsKKwkJZXhlY3V0ZVN0YXRlbWVudChjb24sIHNxbC5kYXRhKTsKKworCQlwcmlu dGZQUUV4cEJ1ZmZlcigmc3FsLAorCQkJCQkJICAiaW5zZXJ0IGludG8gcGdiZW5jaF90ZWxsZXJz KHRpZCwgYmlkLCB0YmFsYW5jZSkgIgorCQkJCQkJICAic2VsZWN0IHRpZCArIDEsIHRpZCAvICVk ICsgMSwgMCAiCisJCQkJCQkgICJmcm9tIGdlbmVyYXRlX3NlcmllcyglZCwgJWQpIGFzIHRpZCIs CisJCQkJCQkgIG50ZWxsZXJzLCBpICogbnRlbGxlcnMsIChpICsgMSkgKiBudGVsbGVycyAtIDEp OworCQlleGVjdXRlU3RhdGVtZW50KGNvbiwgc3FsLmRhdGEpOworCisJCXByaW50ZlBRRXhwQnVm ZmVyKCZzcWwsCisJCQkJCQkgICJpbnNlcnQgaW50byBwZ2JlbmNoX2FjY291bnRzKGFpZCwgYmlk LCBhYmFsYW5jZSwgIgorCQkJCQkJICAiZmlsbGVyKSAiCisJCQkJCQkgICJzZWxlY3QgYWlkICsg MSwgYWlkIC8gJWQgKyAxLCAwLCAnJyAiCisJCQkJCQkgICJmcm9tIGdlbmVyYXRlX3Nlcmllcygi IElOVDY0X0ZPUk1BVCAiLCAiCisJCQkJCQkgIElOVDY0X0ZPUk1BVCAiKSBhcyBhaWQiLAorCQkJ CQkJICBuYWNjb3VudHMsIChpbnQ2NCkgaSAqIG5hY2NvdW50cywKKwkJCQkJCSAgKGludDY0KSAo aSArIDEpICogbmFjY291bnRzIC0gMSk7CisJCWV4ZWN1dGVTdGF0ZW1lbnQoY29uLCBzcWwuZGF0 YSk7CisKKwkJaWYgKG11bHRpX3hhY3QpCisJCQlleGVjdXRlU3RhdGVtZW50KGNvbiwgImNvbW1p dCIpOworCX0KKworCWlmICghbXVsdGlfeGFjdCkKKwkJZXhlY3V0ZVN0YXRlbWVudChjb24sICJj b21taXQiKTsKIAogCXRlcm1QUUV4cEJ1ZmZlcigmc3FsKTsKK30KKworLyoKKyAqIEdlbmVyYXRp bmcgZGF0YSB2aWEgSU5TRVJUIC4uIFNFTEVDVCAuLiBGUk9NIHVubmVzdAorICogUG9zc2libHkg YXMgIk9uZSB0cmFuc2FjdGlvbiBwZXIgc2NhbGUiIGluIG11bHRpLXRhbnNhY3Rpb24gbW9kZQor ICovCitzdGF0aWMgdm9pZAorZ2VuZXJhdGVEYXRhSW5zZXJ0VW5uZXN0KFBHY29ubiAqY29uKQor eworCVBRRXhwQnVmZmVyRGF0YSBzcWw7CiAKLQlleGVjdXRlU3RhdGVtZW50KGNvbiwgImNvbW1p dCIpOworCWZwcmludGYoc3RkZXJyLCAidmlhIElOU0VSVCAuLiBTRUxFQ1QgdW5uZXN0Li4uXG4i KTsKKworCWluaXRQUUV4cEJ1ZmZlcigmc3FsKTsKKworCWV4ZWN1dGVTdGF0ZW1lbnQoY29uLCAi YmVnaW4iKTsKKworCS8qIHRydW5jYXRlIGF3YXkgYW55IG9sZCBkYXRhICovCisJaW5pdFRydW5j YXRlVGFibGVzKGNvbik7CisKKwlpZiAobXVsdGlfeGFjdCkKKwkJZXhlY3V0ZVN0YXRlbWVudChj b24sICJjb21taXQiKTsKKworCWZvciAoaW50IHMgPSAwOyBzIDwgc2NhbGU7IHMrKykKKwl7CisJ CWlmIChtdWx0aV94YWN0KQorCQkJZXhlY3V0ZVN0YXRlbWVudChjb24sICJiZWdpbiIpOworCisJ CXByaW50ZlBRRXhwQnVmZmVyKCZzcWwsCisJCQkJCQkgICJpbnNlcnQgaW50byBwZ2JlbmNoX2Jy YW5jaGVzKGJpZCxiYmFsYW5jZSkgIgorCQkJCQkJICAidmFsdWVzKCVkLCAwKSIsIHMgKyAxKTsK KwkJZXhlY3V0ZVN0YXRlbWVudChjb24sIHNxbC5kYXRhKTsKKworCQlwcmludGZQUUV4cEJ1ZmZl cigmc3FsLAorCQkJCQkJICAiaW5zZXJ0IGludG8gcGdiZW5jaF90ZWxsZXJzKHRpZCwgYmlkLCB0 YmFsYW5jZSkgIgorCQkJCQkJICAic2VsZWN0IHVubmVzdChhcnJheV9hZ2cocy5pIG9yZGVyIGJ5 IHMuaSkpIGFzIHRpZCwgIgorCQkJCQkJICAiJWQgYXMgYmlkLCAwIGFzIHRiYWxhbmNlICIKKwkJ CQkJCSAgImZyb20gZ2VuZXJhdGVfc2VyaWVzKCVkLCAlZCkgYXMgcyhpKSIsCisJCQkJCQkgIHMg KyAxLCBzICogbnRlbGxlcnMgKyAxLCAocyArIDEpICogbnRlbGxlcnMpOworCQlleGVjdXRlU3Rh dGVtZW50KGNvbiwgc3FsLmRhdGEpOworCisJCXByaW50ZlBRRXhwQnVmZmVyKCZzcWwsCisJCQkJ CQkgICJ3aXRoIGRhdGEgYXMgKCIKKwkJCQkJCSAgIiAgIHNlbGVjdCBnZW5lcmF0ZV9zZXJpZXMo IiBJTlQ2NF9GT1JNQVQgIiwgIgorCQkJCQkJICBJTlQ2NF9GT1JNQVQgIikgYXMgaSkgIgorCQkJ CQkJICAiaW5zZXJ0IGludG8gcGdiZW5jaF9hY2NvdW50cyhhaWQsIGJpZCwgIgorCQkJCQkJICAi YWJhbGFuY2UsIGZpbGxlcikgIgorCQkJCQkJICAic2VsZWN0IHVubmVzdChhaWQpLCB1bm5lc3Qo YmlkKSwgMCBhcyBhYmFsYW5jZSwgIgorCQkJCQkJICAiJycgYXMgZmlsbGVyICIKKwkJCQkJCSAg ImZyb20gKHNlbGVjdCBhcnJheV9hZ2coaSsxKSBhaWQsICIKKwkJCQkJCSAgImFycmF5X2FnZyhp LyVkICsgMSkgYmlkIGZyb20gZGF0YSkiLAorCQkJCQkJICAoaW50NjQpIHMgKiBuYWNjb3VudHMg KyAxLAorCQkJCQkJICAoaW50NjQpIChzICsgMSkgKiBuYWNjb3VudHMsIG5hY2NvdW50cyk7CisJ CWV4ZWN1dGVTdGF0ZW1lbnQoY29uLCBzcWwuZGF0YSk7CisKKwkJaWYgKG11bHRpX3hhY3QpCisJ CQlleGVjdXRlU3RhdGVtZW50KGNvbiwgImNvbW1pdCIpOworCX0KKworCWlmICghbXVsdGlfeGFj dCkKKwkJZXhlY3V0ZVN0YXRlbWVudChjb24sICJjb21taXQiKTsKKworCXRlcm1QUUV4cEJ1ZmZl cigmc3FsKTsKK30KKworLyoKKyAqIEZpbGwgdGhlIHN0YW5kYXJkIHRhYmxlcyB3aXRoIHNvbWUg ZGF0YSBnZW5lcmF0ZWQgb24gdGhlIHNlcnZlciBzaWRlCisgKgorICogQXMgYWxyZWFkeSB0aGUg Y2FzZSB3aXRoIHRoZSBjbGllbnQtc2lkZSBkYXRhIGdlbmVyYXRpb24sIHRoZSBmaWxsZXIKKyAq IGNvbHVtbiBkZWZhdWx0cyB0byBOVUxMIGluIHBnYmVuY2hfYnJhbmNoZXMgYW5kIHBnYmVuY2hf dGVsbGVycywKKyAqIGFuZCBpcyBhIGJsYW5rLXBhZGRlZCBzdHJpbmcgaW4gcGdiZW5jaF9hY2Nv dW50cy4KKyAqLworc3RhdGljIHZvaWQKK2luaXRHZW5lcmF0ZURhdGFTZXJ2ZXJTaWRlKFBHY29u biAqY29uKQoreworCWZwcmludGYoc3RkZXJyLCAiZ2VuZXJhdGluZyBkYXRhIChzZXJ2ZXItc2lk ZSBhcyAlcyB0cmFuc2FjdGlvbiVzKSAiLAorCQkJbXVsdGlfeGFjdCA/ICJtdWx0aXBsZSIgOiAi c2luZ2xlIiwgbXVsdGlfeGFjdCA/ICJzIiA6ICIiKTsKKworCXN3aXRjaCAoZGF0YV9nZW5lcmF0 aW9uX3R5cGUpCisJeworCQljYXNlIElOSVRfU1RFUF9HRU5fVFlQRV9JTlNFUlRfU0VSSUVTOgor CQkJZ2VuZXJhdGVEYXRhSW5zZXJ0U2VyaWVzKGNvbik7CisJCQlicmVhazsKKwkJY2FzZSBJTklU X1NURVBfR0VOX1RZUEVfSU5TRVJUX1VOTkVTVDoKKwkJCWdlbmVyYXRlRGF0YUluc2VydFVubmVz dChjb24pOworCQkJYnJlYWs7CisJfQogfQogCiAvKgpAQCAtNTMwNiw2ICs1ODMzLDggQEAgaW5p dENyZWF0ZUZLZXlzKFBHY29ubiAqY29uKQogc3RhdGljIHZvaWQKIGNoZWNrSW5pdFN0ZXBzKGNv bnN0IGNoYXIgKmluaXRpYWxpemVfc3RlcHMpCiB7CisJY2hhcgkJZGF0YV9pbml0X3R5cGUgPSAw OworCiAJaWYgKGluaXRpYWxpemVfc3RlcHNbMF0gPT0gJ1wwJykKIAkJcGdfZmF0YWwoIm5vIGlu aXRpYWxpemF0aW9uIHN0ZXBzIHNwZWNpZmllZCIpOwogCkBAIC01MzE3LDcgKzU4NDYsMjIgQEAg Y2hlY2tJbml0U3RlcHMoY29uc3QgY2hhciAqaW5pdGlhbGl6ZV9zdGVwcykKIAkJCXBnX2xvZ19l cnJvcl9kZXRhaWwoIkFsbG93ZWQgc3RlcCBjaGFyYWN0ZXJzIGFyZTogXCIiIEFMTF9JTklUX1NU RVBTICJcIi4iKTsKIAkJCWV4aXQoMSk7CiAJCX0KKworCQlzd2l0Y2ggKCpzdGVwKQorCQl7CisJ CQljYXNlIElOSVRfU1RFUF9HRU5fVFlQRV9DT1BZX1RFWFQ6CisJCQljYXNlIElOSVRfU1RFUF9H RU5fVFlQRV9DT1BZX0JJTkFSWToKKwkJCWNhc2UgSU5JVF9TVEVQX0dFTl9UWVBFX0lOU0VSVF9T RVJJRVM6CisJCQljYXNlIElOSVRfU1RFUF9HRU5fVFlQRV9JTlNFUlRfVU5ORVNUOgorCQkJCWRh dGFfaW5pdF90eXBlKys7CisJCQkJYnJlYWs7CisJCX0KIAl9CisKKwlpZiAoZGF0YV9pbml0X3R5 cGUgPT0gMCkKKwkJcGdfbG9nX3dhcm5pbmcoIk5vIGRhdGEgZ2VuZXJhdGlvbiB0eXBlIGlzIHBy b3ZpZGVkIik7CisJaWYgKGRhdGFfaW5pdF90eXBlID4gMSkKKwkJcGdfbG9nX3dhcm5pbmcoIk1v cmUgdGhhbiBvbmUgdHlwZSBvZiBkYXRhIGluaXRpYWxpemF0aW9uIGlzIHJlcXVlc3RlZCIpOwog fQogCiAvKgpAQCAtNTM1NSwxNCArNTg5OSwyNCBAQCBydW5Jbml0U3RlcHMoY29uc3QgY2hhciAq aW5pdGlhbGl6ZV9zdGVwcykKIAkJCQlvcCA9ICJjcmVhdGUgdGFibGVzIjsKIAkJCQlpbml0Q3Jl YXRlVGFibGVzKGNvbik7CiAJCQkJYnJlYWs7Ci0JCQljYXNlICdnJzoKKwkJCWNhc2UgSU5JVF9T VEVQX0dFTl9UWVBFX0NPUFlfVEVYVDoKKwkJCWNhc2UgSU5JVF9TVEVQX0dFTl9UWVBFX0NPUFlf QklOQVJZOgogCQkJCW9wID0gImNsaWVudC1zaWRlIGdlbmVyYXRlIjsKKwkJCQlkYXRhX2dlbmVy YXRpb25fdHlwZSA9ICpzdGVwOwogCQkJCWluaXRHZW5lcmF0ZURhdGFDbGllbnRTaWRlKGNvbik7 CiAJCQkJYnJlYWs7Ci0JCQljYXNlICdHJzoKKwkJCWNhc2UgSU5JVF9TVEVQX0dFTl9UWVBFX0lO U0VSVF9TRVJJRVM6CisJCQljYXNlIElOSVRfU1RFUF9HRU5fVFlQRV9JTlNFUlRfVU5ORVNUOgog CQkJCW9wID0gInNlcnZlci1zaWRlIGdlbmVyYXRlIjsKKwkJCQlkYXRhX2dlbmVyYXRpb25fdHlw ZSA9ICpzdGVwOwogCQkJCWluaXRHZW5lcmF0ZURhdGFTZXJ2ZXJTaWRlKGNvbik7CiAJCQkJYnJl YWs7CisJCQljYXNlIElOSVRfU1RFUF9HRU5fVFlQRV9TSU5HTEVfWEFDVDoKKwkJCQltdWx0aV94 YWN0ID0gZmFsc2U7CisJCQkJYnJlYWs7CisJCQljYXNlIElOSVRfU1RFUF9HRU5fVFlQRV9NVUxU SV9YQUNUOgorCQkJCW11bHRpX3hhY3QgPSB0cnVlOworCQkJCWJyZWFrOwogCQkJY2FzZSAndic6 CiAJCQkJb3AgPSAidmFjdXVtIjsKIAkJCQlpbml0VmFjdXVtKGNvbik7CkBAIC02OTQwLDcgKzc0 OTQsNiBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJCWNhc2UgJ0knOgogCQkJCXBn X2ZyZWUoaW5pdGlhbGl6ZV9zdGVwcyk7CiAJCQkJaW5pdGlhbGl6ZV9zdGVwcyA9IHBnX3N0cmR1 cChvcHRhcmcpOwotCQkJCWNoZWNrSW5pdFN0ZXBzKGluaXRpYWxpemVfc3RlcHMpOwogCQkJCWlu aXRpYWxpemF0aW9uX29wdGlvbl9zZXQgPSB0cnVlOwogCQkJCWJyZWFrOwogCQkJY2FzZSAnaic6 CQkJLyogam9icyAqLwpAQCAtNzI0NSw2ICs3Nzk4LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAq KmFyZ3YpCiAJCQl9CiAJCX0KIAorCQljaGVja0luaXRTdGVwcyhpbml0aWFsaXplX3N0ZXBzKTsK IAkJcnVuSW5pdFN0ZXBzKGluaXRpYWxpemVfc3RlcHMpOwogCQlleGl0KDApOwogCX0KZGlmZiAt LWdpdCBhL3NyYy9iaW4vcGdiZW5jaC90LzAwMV9wZ2JlbmNoX3dpdGhfc2VydmVyLnBsIGIvc3Jj L2Jpbi9wZ2JlbmNoL3QvMDAxX3BnYmVuY2hfd2l0aF9zZXJ2ZXIucGwKaW5kZXggYjc2ODVlYTVk MjAuLjZjNzc4M2E3N2Y3IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnYmVuY2gvdC8wMDFfcGdiZW5j aF93aXRoX3NlcnZlci5wbAorKysgYi9zcmMvYmluL3BnYmVuY2gvdC8wMDFfcGdiZW5jaF93aXRo X3NlcnZlci5wbApAQCAtMTYsMjUgKzE2LDMwIEBAIHN1YiBjaGVja19kYXRhX3N0YXRlCiAJbG9j YWwgJFRlc3Q6OkJ1aWxkZXI6OkxldmVsID0gJFRlc3Q6OkJ1aWxkZXI6OkxldmVsICsgMTsKIAlt eSAkbm9kZSA9IHNoaWZ0OwogCW15ICR0eXBlID0gc2hpZnQ7CisJbXkgJHNxbF9yZXN1bHQ7CiAK LQlteSAkc3FsX3Jlc3VsdCA9ICRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkJJ1NFTEVD VCBjb3VudCgqKSBBUyBudWxsX2NvdW50IEZST00gcGdiZW5jaF9hY2NvdW50cyBXSEVSRSBmaWxs ZXIgSVMgTlVMTCBMSU1JVCAxMDsnCi0JKTsKLQlpcygkc3FsX3Jlc3VsdCwgJzAnLAotCQkiJHR5 cGU6IGZpbGxlciBjb2x1bW4gb2YgcGdiZW5jaF9hY2NvdW50cyBoYXMgbm8gTlVMTCBkYXRhIik7 CiAJJHNxbF9yZXN1bHQgPSAkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCiAJCSdTRUxFQ1Qg Y291bnQoKikgQVMgbnVsbF9jb3VudCBGUk9NIHBnYmVuY2hfYnJhbmNoZXMgV0hFUkUgZmlsbGVy IElTIE5VTEw7JwogCSk7CiAJaXMoJHNxbF9yZXN1bHQsICcxJywKIAkJIiR0eXBlOiBmaWxsZXIg Y29sdW1uIG9mIHBnYmVuY2hfYnJhbmNoZXMgaGFzIG9ubHkgTlVMTCBkYXRhIik7CisKIAkkc3Fs X3Jlc3VsdCA9ICRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKIAkJJ1NFTEVDVCBjb3VudCgq KSBBUyBudWxsX2NvdW50IEZST00gcGdiZW5jaF90ZWxsZXJzIFdIRVJFIGZpbGxlciBJUyBOVUxM OycKIAkpOwogCWlzKCRzcWxfcmVzdWx0LCAnMTAnLAogCQkiJHR5cGU6IGZpbGxlciBjb2x1bW4g b2YgcGdiZW5jaF90ZWxsZXJzIGhhcyBvbmx5IE5VTEwgZGF0YSIpOworCisJJHNxbF9yZXN1bHQg PSAkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSdTRUxFQ1QgY291bnQoKikgQVMgbnVs bF9jb3VudCBGUk9NIHBnYmVuY2hfYWNjb3VudHMgV0hFUkUgZmlsbGVyIElTIE5VTEwgTElNSVQg MTA7JworCSk7CisJaXMoJHNxbF9yZXN1bHQsICcwJywKKwkJIiR0eXBlOiBmaWxsZXIgY29sdW1u IG9mIHBnYmVuY2hfYWNjb3VudHMgaGFzIG5vIE5VTEwgZGF0YSIpOworCiAJJHNxbF9yZXN1bHQg PSAkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCiAJCSdTRUxFQ1QgY291bnQoKikgQVMgZGF0 YV9jb3VudCBGUk9NIHBnYmVuY2hfaGlzdG9yeTsnKTsKLQlpcygkc3FsX3Jlc3VsdCwgJzAnLCAi JHR5cGU6IHBnYmVuY2hfaGlzdG9yeSBoYXMgbm8gZGF0YSIpOworCWlzKCRzcWxfcmVzdWx0LCAn MCcsCisJCSIkdHlwZTogcGdiZW5jaF9oaXN0b3J5IGhhcyBubyBkYXRhIik7CiB9CiAKICMgc3Rh cnQgYSBwZ2JlbmNoIHNwZWNpZmljIHNlcnZlcgpAQCAtMTEyLDYgKzExNyw3IEBAICRub2RlLT5w Z2JlbmNoKAogCVtxcntQZXJoYXBzIHlvdSBuZWVkIHRvIGRvIGluaXRpYWxpemF0aW9ufV0sCiAJ J3J1biB3aXRob3V0IGluaXQnKTsKIAorCiAjIEluaXRpYWxpemUgcGdiZW5jaCB0YWJsZXMgc2Nh bGUgMQogJG5vZGUtPnBnYmVuY2goCiAJJy1pJywgMCwKQEAgLTEyNSw3ICsxMzEsNyBAQCAkbm9k ZS0+cGdiZW5jaCgKIAkncGdiZW5jaCBzY2FsZSAxIGluaXRpYWxpemF0aW9uJywpOwogCiAjIENo ZWNrIGRhdGEgc3RhdGUsIGFmdGVyIGNsaWVudC1zaWRlIGRhdGEgZ2VuZXJhdGlvbi4KLWNoZWNr X2RhdGFfc3RhdGUoJG5vZGUsICdjbGllbnQtc2lkZScpOworY2hlY2tfZGF0YV9zdGF0ZSgkbm9k ZSwgJ2NsaWVudC1zaWRlIChkZWZhdWx0IG9wdGlvbnMpJyk7CiAKICMgQWdhaW4sIHdpdGggYWxs IHBvc3NpYmxlIG9wdGlvbnMKICRub2RlLT5wZ2JlbmNoKApAQCAtMTQzLDYgKzE0OSw3IEBAICRu b2RlLT5wZ2JlbmNoKAogCQlxcntkb25lIGluIFxkK1wuXGRcZCBzIH0KIAldLAogCSdwZ2JlbmNo IHNjYWxlIDEgaW5pdGlhbGl6YXRpb24nKTsKK2NoZWNrX2RhdGFfc3RhdGUoJG5vZGUsICdjbGll bnQtc2lkZSAoYWxsIG9wdGlvbnMpJyk7CiAKICMgVGVzdCBpbnRlcmFjdGlvbiBvZiAtLWluaXQt c3RlcHMgd2l0aCBsZWdhY3kgc3RlcC1zZWxlY3Rpb24gb3B0aW9ucwogJG5vZGUtPnBnYmVuY2go CkBAIC0xNTQsNyArMTYxLDcgQEAgJG5vZGUtPnBnYmVuY2goCiAJCXFye2NyZWF0aW5nIHRhYmxl c30sCiAJCXFye2NyZWF0aW5nIDMgcGFydGl0aW9uc30sCiAJCXFye2NyZWF0aW5nIHByaW1hcnkg a2V5c30sCi0JCXFye2dlbmVyYXRpbmcgZGF0YSBcKHNlcnZlci1zaWRlXCl9LAorCQlxcntnZW5l cmF0aW5nIGRhdGEgXChzZXJ2ZXItc2lkZSBhcyBzaW5nbGUgdHJhbnNhY3Rpb25cKX0sCiAJCXFy e2NyZWF0aW5nIGZvcmVpZ24ga2V5c30sCiAJCXFyeyg/IXZhY3V1bWluZyl9LCAgICAjIG5vIHZh Y3V1bQogCQlxcntkb25lIGluIFxkK1wuXGRcZCBzIH0KQEAgLTE2NCw2ICsxNzEsMjE5IEBAICRu b2RlLT5wZ2JlbmNoKAogIyBDaGVjayBkYXRhIHN0YXRlLCBhZnRlciBzZXJ2ZXItc2lkZSBkYXRh IGdlbmVyYXRpb24uCiBjaGVja19kYXRhX3N0YXRlKCRub2RlLCAnc2VydmVyLXNpZGUnKTsKIAor CisjIFRlc3Qgc2VydmVyLXNpZGUgZ2VuZXJhdGlvbiB3aXRoIGdlbmVyYXRlX3NlcmllcworJG5v ZGUtPnBnYmVuY2goCisJJy0taW5pdGlhbGl6ZSAtLWluaXQtc3RlcHM9ZHRHJywKKwkwLAorCVtx cnteJH1dLAorCVsKKwkJcXJ7ZHJvcHBpbmcgb2xkIHRhYmxlc30sCisJCXFye2NyZWF0aW5nIHRh Ymxlc30sCisJCXFye2dlbmVyYXRpbmcgZGF0YSBcKHNlcnZlci1zaWRlIGFzIHNpbmdsZSB0cmFu c2FjdGlvblwpfSwKKwkJcXJ7ZG9uZSBpbiBcZCtcLlxkXGQgcyB9CisJXSwKKwkncGdiZW5jaCAt LWluaXQtc3RlcHMgc2VydmVyLXNpZGUgZ2VuZXJhdGVfc2VyaWVzJyk7CisKKyMgQ2hlY2sgZGF0 YSBzdGF0ZSwgYWZ0ZXIgc2VydmVyLXNpZGUgZGF0YSBnZW5lcmF0aW9uLgorY2hlY2tfZGF0YV9z dGF0ZSgkbm9kZSwgJ3NlcnZlci1zaWRlIChnZW5lcmF0ZV9zZXJpZXMpJyk7CisKKyRub2RlLT5w Z2JlbmNoKAorCSctLWluaXRpYWxpemUgLS1pbml0LXN0ZXBzPWR0U0cnLAorCTAsCisJW3Fye14k fV0sCisJWworCQlxcntkcm9wcGluZyBvbGQgdGFibGVzfSwKKwkJcXJ7Y3JlYXRpbmcgdGFibGVz fSwKKwkJcXJ7Z2VuZXJhdGluZyBkYXRhIFwoc2VydmVyLXNpZGUgYXMgc2luZ2xlIHRyYW5zYWN0 aW9uXCl9LAorCQlxcntkb25lIGluIFxkK1wuXGRcZCBzIH0KKwldLAorCSdwZ2JlbmNoIC0taW5p dC1zdGVwcyBzZXJ2ZXItc2lkZSBnZW5lcmF0ZV9zZXJpZXMnKTsKKworIyBDaGVjayBkYXRhIHN0 YXRlLCBhZnRlciBzZXJ2ZXItc2lkZSBkYXRhIGdlbmVyYXRpb24uCitjaGVja19kYXRhX3N0YXRl KCRub2RlLCAnc2VydmVyLXNpZGUgKGdlbmVyYXRlX3NlcmllcyBzaW5nbGUgWEFDVCknKTsKKwor JG5vZGUtPnBnYmVuY2goCisJJy0taW5pdGlhbGl6ZSAtLWluaXQtc3RlcHM9ZHRNRycsCisJMCwK KwlbcXJ7XiR9XSwKKwlbCisJCXFye2Ryb3BwaW5nIG9sZCB0YWJsZXN9LAorCQlxcntjcmVhdGlu ZyB0YWJsZXN9LAorCQlxcntnZW5lcmF0aW5nIGRhdGEgXChzZXJ2ZXItc2lkZSBhcyBtdWx0aXBs ZSB0cmFuc2FjdGlvbnNcKX0sCisJCXFye2RvbmUgaW4gXGQrXC5cZFxkIHMgfQorCV0sCisJJ3Bn YmVuY2ggLS1pbml0LXN0ZXBzIHNlcnZlci1zaWRlIGdlbmVyYXRlX3NlcmllcycpOworCisjIENo ZWNrIGRhdGEgc3RhdGUsIGFmdGVyIHNlcnZlci1zaWRlIGRhdGEgZ2VuZXJhdGlvbi4KK2NoZWNr X2RhdGFfc3RhdGUoJG5vZGUsICdzZXJ2ZXItc2lkZSAoZ2VuZXJhdGVfc2VyaWVzIG11bHRpcGxl IFhBQ1RzKScpOworCisKKyMgVGVzdCBzZXJ2ZXItc2lkZSBnZW5lcmF0aW9uIHdpdGggVU5ORVNU Ciskbm9kZS0+cGdiZW5jaCgKKwknLS1pbml0aWFsaXplIC0taW5pdC1zdGVwcz1kdFUnLAorCTAs CisJW3Fye14kfV0sCisJWworCQlxcntkcm9wcGluZyBvbGQgdGFibGVzfSwKKwkJcXJ7Y3JlYXRp bmcgdGFibGVzfSwKKwkJcXJ7Z2VuZXJhdGluZyBkYXRhIFwoc2VydmVyLXNpZGUgYXMgc2luZ2xl IHRyYW5zYWN0aW9uXCl9LAorCQlxcntkb25lIGluIFxkK1wuXGRcZCBzIH0KKwldLAorCSdwZ2Jl bmNoIC0taW5pdC1zdGVwcyBzZXJ2ZXItc2lkZSBVTk5FU1QnKTsKKworIyBDaGVjayBkYXRhIHN0 YXRlLCBhZnRlciBzZXJ2ZXItc2lkZSBkYXRhIGdlbmVyYXRpb24uCitjaGVja19kYXRhX3N0YXRl KCRub2RlLCAnc2VydmVyLXNpZGUgKHVubmVzdCknKTsKKworJG5vZGUtPnBnYmVuY2goCisJJy0t aW5pdGlhbGl6ZSAtLWluaXQtc3RlcHM9ZHRTVScsCisJMCwKKwlbcXJ7XiR9XSwKKwlbCisJCXFy e2Ryb3BwaW5nIG9sZCB0YWJsZXN9LAorCQlxcntjcmVhdGluZyB0YWJsZXN9LAorCQlxcntnZW5l cmF0aW5nIGRhdGEgXChzZXJ2ZXItc2lkZSBhcyBzaW5nbGUgdHJhbnNhY3Rpb25cKX0sCisJCXFy e2RvbmUgaW4gXGQrXC5cZFxkIHMgfQorCV0sCisJJ3BnYmVuY2ggLS1pbml0LXN0ZXBzIHNlcnZl ci1zaWRlIFVOTkVTVCcpOworCisjIENoZWNrIGRhdGEgc3RhdGUsIGFmdGVyIHNlcnZlci1zaWRl IGRhdGEgZ2VuZXJhdGlvbi4KK2NoZWNrX2RhdGFfc3RhdGUoJG5vZGUsICdzZXJ2ZXItc2lkZSAo dW5uZXN0KScpOworCiskbm9kZS0+cGdiZW5jaCgKKwknLS1pbml0aWFsaXplIC0taW5pdC1zdGVw cz1kdE1VJywKKwkwLAorCVtxcnteJH1dLAorCVsKKwkJcXJ7ZHJvcHBpbmcgb2xkIHRhYmxlc30s CisJCXFye2NyZWF0aW5nIHRhYmxlc30sCisJCXFye2dlbmVyYXRpbmcgZGF0YSBcKHNlcnZlci1z aWRlIGFzIG11bHRpcGxlIHRyYW5zYWN0aW9uc1wpfSwKKwkJcXJ7ZG9uZSBpbiBcZCtcLlxkXGQg cyB9CisJXSwKKwkncGdiZW5jaCAtLWluaXQtc3RlcHMgc2VydmVyLXNpZGUgVU5ORVNUJyk7CisK KyMgQ2hlY2sgZGF0YSBzdGF0ZSwgYWZ0ZXIgc2VydmVyLXNpZGUgZGF0YSBnZW5lcmF0aW9uLgor Y2hlY2tfZGF0YV9zdGF0ZSgkbm9kZSwgJ3NlcnZlci1zaWRlICh1bm5lc3QpJyk7CisKKworIyBU ZXN0IGNsaWVudC1zaWRlIGdlbmVyYXRpb24gd2l0aCBDT1BZIFRFWFQKKyRub2RlLT5wZ2JlbmNo KAorCSctLWluaXRpYWxpemUgLS1pbml0LXN0ZXBzPWR0ZycsCisJMCwKKwlbcXJ7XiR9XSwKKwlb CisJCXFye2Ryb3BwaW5nIG9sZCB0YWJsZXN9LAorCQlxcntjcmVhdGluZyB0YWJsZXN9LAorCQlx cntnZW5lcmF0aW5nIGRhdGEgXChjbGllbnQtc2lkZSBhcyBzaW5nbGUgdHJhbnNhY3Rpb259LAor CQlxcntkb25lIGluIFxkK1wuXGRcZCBzIH0KKwldLAorCSdwZ2JlbmNoIC0taW5pdC1zdGVwcyBj bGllbnQtc2lkZSBURVhUIChzaW5nbGUgWEFDVCAjMSknKTsKKworIyBDaGVjayBkYXRhIHN0YXRl LCBhZnRlciBjbGllbnQtc2lkZSBkYXRhIGdlbmVyYXRpb24uCitjaGVja19kYXRhX3N0YXRlKCRu b2RlLCAnY2xpZW50LXNpZGUgKHRleHQpJyk7CisKKyRub2RlLT5wZ2JlbmNoKAorCSctLWluaXRp YWxpemUgLS1pbml0LXN0ZXBzPWR0U2cnLAorCTAsCisJW3Fye14kfV0sCisJWworCQlxcntkcm9w cGluZyBvbGQgdGFibGVzfSwKKwkJcXJ7Y3JlYXRpbmcgdGFibGVzfSwKKwkJcXJ7Z2VuZXJhdGlu ZyBkYXRhIFwoY2xpZW50LXNpZGUgYXMgc2luZ2xlIHRyYW5zYWN0aW9ufSwKKwkJcXJ7XGQgb2Yg XGQrIHR1cGxlcyBcKFxkJVwpIG9mIHBnYmVuY2hfYnJhbmNoZXMgZG9uZX0sCisJCXFye1xkIG9m IFxkKyB0dXBsZXMgXChcZCVcKSBvZiBwZ2JlbmNoX3RlbGxlcnMgZG9uZX0sCisJCXFye1xkIG9m IFxkKyB0dXBsZXMgXChcZCVcKSBvZiBwZ2JlbmNoX2FjY291bnRzIGRvbmV9LAorCQlxcntkb25l IGluIFxkK1wuXGRcZCBzIH0KKwldLAorCSdwZ2JlbmNoIC0taW5pdC1zdGVwcyBjbGllbnQtc2lk ZSBURVhUIChzaW5nbGUgWEFDVCAjMiknKTsKKworIyBDaGVjayBkYXRhIHN0YXRlLCBhZnRlciBj bGllbnQtc2lkZSBkYXRhIGdlbmVyYXRpb24uCitjaGVja19kYXRhX3N0YXRlKCRub2RlLCAnY2xp ZW50LXNpZGUgKHRleHQpJyk7CisKKyRub2RlLT5wZ2JlbmNoKAorCSctLWluaXRpYWxpemUgLS1p bml0LXN0ZXBzPWR0TWcnLAorCTAsCisJW3Fye14kfV0sCisJWworCQlxcntkcm9wcGluZyBvbGQg dGFibGVzfSwKKwkJcXJ7Y3JlYXRpbmcgdGFibGVzfSwKKwkJcXJ7Z2VuZXJhdGluZyBkYXRhIFwo Y2xpZW50LXNpZGUgYXMgbXVsdGlwbGUgdHJhbnNhY3Rpb25zfSwKKwkJcXJ7ZG9uZSBpbiBcZCtc LlxkXGQgcyB9CisJXSwKKwkncGdiZW5jaCAtLWluaXQtc3RlcHMgY2xpZW50LXNpZGUgVEVYVCAo bXVsdGlwbGUgWEFDVHMpJyk7CisKKyMgQ2hlY2sgZGF0YSBzdGF0ZSwgYWZ0ZXIgY2xpZW50LXNp ZGUgZGF0YSBnZW5lcmF0aW9uLgorY2hlY2tfZGF0YV9zdGF0ZSgkbm9kZSwgJ2NsaWVudC1zaWRl ICh0ZXh0KScpOworCisKKyMgVGVzdCBjbGllbnQtc2lkZSBnZW5lcmF0aW9uIHdpdGggQ09QWSBC SU5BUlkKKyRub2RlLT5wZ2JlbmNoKAorCSctLWluaXRpYWxpemUgLS1pbml0LXN0ZXBzPWR0Yycs CisJMCwKKwlbcXJ7XiR9XSwKKwlbCisJCXFye2Ryb3BwaW5nIG9sZCB0YWJsZXN9LAorCQlxcntj cmVhdGluZyB0YWJsZXN9LAorCQlxcntnZW5lcmF0aW5nIGRhdGEgXChjbGllbnQtc2lkZSBhcyBz aW5nbGUgdHJhbnNhY3Rpb259LAorCQlxcntkb25lIGluIFxkK1wuXGRcZCBzIH0KKwldLAorCSdw Z2JlbmNoIC0taW5pdC1zdGVwcyBjbGllbnQtc2lkZSBCSU5BUlkgKHNpbmdsZSBYQUNUICMxKScp OworCisjIENoZWNrIGRhdGEgc3RhdGUsIGFmdGVyIGNsaWVudC1zaWRlIGRhdGEgZ2VuZXJhdGlv bi4KK2NoZWNrX2RhdGFfc3RhdGUoJG5vZGUsICdjbGllbnQtc2lkZSAoYmluYXJ5KScpOworCisk bm9kZS0+cGdiZW5jaCgKKwknLS1pbml0aWFsaXplIC0taW5pdC1zdGVwcz1kdFNjJywKKwkwLAor CVtxcnteJH1dLAorCVsKKwkJcXJ7ZHJvcHBpbmcgb2xkIHRhYmxlc30sCisJCXFye2NyZWF0aW5n IHRhYmxlc30sCisJCXFye2dlbmVyYXRpbmcgZGF0YSBcKGNsaWVudC1zaWRlIGFzIHNpbmdsZSB0 cmFuc2FjdGlvbn0sCisJCXFye2RvbmUgaW4gXGQrXC5cZFxkIHMgfQorCV0sCisJJ3BnYmVuY2gg LS1pbml0LXN0ZXBzIGNsaWVudC1zaWRlIEJJTkFSWSAoc2luZ2xlIFhBQ1QgIzIpJyk7CisKKyMg Q2hlY2sgZGF0YSBzdGF0ZSwgYWZ0ZXIgY2xpZW50LXNpZGUgZGF0YSBnZW5lcmF0aW9uLgorY2hl Y2tfZGF0YV9zdGF0ZSgkbm9kZSwgJ2NsaWVudC1zaWRlIChiaW5hcnkpJyk7CisKKyRub2RlLT5w Z2JlbmNoKAorCSctLWluaXRpYWxpemUgLS1pbml0LXN0ZXBzPWR0TWMnLAorCTAsCisJW3Fye14k fV0sCisJWworCQlxcntkcm9wcGluZyBvbGQgdGFibGVzfSwKKwkJcXJ7Y3JlYXRpbmcgdGFibGVz fSwKKwkJcXJ7Z2VuZXJhdGluZyBkYXRhIFwoY2xpZW50LXNpZGUgYXMgbXVsdGlwbGUgdHJhbnNh Y3Rpb25zfSwKKwkJcXJ7ZG9uZSBpbiBcZCtcLlxkXGQgcyB9CisJXSwKKwkncGdiZW5jaCAtLWlu aXQtc3RlcHMgY2xpZW50LXNpZGUgQklOQVJZJyk7CisKKyMgQ2hlY2sgZGF0YSBzdGF0ZSwgYWZ0 ZXIgY2xpZW50LXNpZGUgZGF0YSBnZW5lcmF0aW9uLgorY2hlY2tfZGF0YV9zdGF0ZSgkbm9kZSwg J2NsaWVudC1zaWRlIChiaW5hcnkpJyk7CisKKworIyBDaGVjayBkYXRhIHN0YXRlLCBhZnRlciBk aWZmZXJlbnQgbW9kZXMgb2YgY2xpZW50LXNpZGUgZGF0YSBnZW5lcmF0aW9uLgorY2hlY2tfZGF0 YV9zdGF0ZSgkbm9kZSwgJ2NsaWVudC1zaWRlIChiaW5hcnkpJyk7CisKKyRub2RlLT5wZ2JlbmNo KAorCSctLWluaXRpYWxpemUgLS1pbml0LXN0ZXBzPWR0TWNjU2MnLAorCTAsCisJW3Fye14kfV0s CisJWworCQlxcntkcm9wcGluZyBvbGQgdGFibGVzfSwKKwkJcXJ7Y3JlYXRpbmcgdGFibGVzfSwK KwkJcXJ7Z2VuZXJhdGluZyBkYXRhIFwoY2xpZW50LXNpZGUgYXMgbXVsdGlwbGUgdHJhbnNhY3Rp b25zfSwKKwkJcXJ7Z2VuZXJhdGluZyBkYXRhIFwoY2xpZW50LXNpZGUgYXMgbXVsdGlwbGUgdHJh bnNhY3Rpb25zfSwKKwkJcXJ7Z2VuZXJhdGluZyBkYXRhIFwoY2xpZW50LXNpZGUgYXMgc2luZ2xl IHRyYW5zYWN0aW9ufSwKKwkJcXJ7ZG9uZSBpbiBcZCtcLlxkXGQgcyB9CisJXSwKKwkncGdiZW5j aCAtLWluaXQtc3RlcHMgY2xpZW50LXNpZGUgQklOQVJZIChtdWx0aXBsZSBYQUNUIG1vZGVzKScp OworCisjIENoZWNrIGRhdGEgc3RhdGUsIGFmdGVyIGNsaWVudC1zaWRlIGRhdGEgZ2VuZXJhdGlv bi4KK2NoZWNrX2RhdGFfc3RhdGUoJG5vZGUsICdjbGllbnQtc2lkZSAoYmluYXJ5IGRpZmZlcmVu dCBYQUNUIG1vZGVzIGluIGxpc3Qgb2YgLS1pbml0LXN0ZXBzKScpOworCisKICMgUnVuIGFsbCBi dWlsdGluIHNjcmlwdHMsIGZvciBhIGZldyB0cmFuc2FjdGlvbnMgZWFjaAogJG5vZGUtPnBnYmVu Y2goCiAJJy0tdHJhbnNhY3Rpb25zPTUgLURmb289YmxhIC0tY2xpZW50PTIgLS1wcm90b2NvbD1z aW1wbGUgLS1idWlsdGluPXQnCi0tIAoyLjQzLjAKCg== --_004_PH0PR08MB7020D4A335C27DC7F07C28C38879APH0PR08MB7020namp_--