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 1vIwLF-003ggx-0r for pgsql-hackers@arkaria.postgresql.org; Tue, 11 Nov 2025 21:55:56 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vIwLA-007yup-2h for pgsql-hackers@arkaria.postgresql.org; Tue, 11 Nov 2025 21:55:52 +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 1vIoV2-006IWW-1L for pgsql-hackers@lists.postgresql.org; Tue, 11 Nov 2025 13:33:32 +0000 Received: from mail-southcentralusazolkn190110001.outbound.protection.outlook.com ([2a01:111:f403:d10c::1] helo=SN4PR0501CU005.outbound.protection.outlook.com) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vIoUz-007AI3-32 for pgsql-hackers@postgresql.org; Tue, 11 Nov 2025 13:33:32 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=YptXF5OksCaFfWGcRnVbWM+9QQ+zQT1uIPKheF25ecjgNaWw26lj3MB0Urpxin/JiTh5Ctj+Ms4yAfN5qkutLuAyCQBTj9vMyvAXggkuApkIAiBcIiiaeBgwFBKcSegWDx/QGoijFAbQLs8TbPGuzIR7be195ZZrNXriQVFoYzgmcubRXeKIvDUKDJa5SkyEWZQbzOb+B0ffEIYRxZj3M+N/lYSlmj1BvJxUYvPZDlYWZkdt3gl8kgq+eOoDrG1SRm48Fmh8NVUFWxoVJlJnYWhMQ2KpeJN3mqOBHnCdTCuJcuHizrnremVg4EH0efFf3nxR2Kf5lyR4qcHq2LdDcw== 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=N1aIkyKRbhewkohf7+VZd2KonKK56AOVOBclrIZYcqI=; b=JQFpQpJ54259vZE2JVWXloLmnDaUxTE5prKK6mYsOGhdWScKMLl2OX5gcNWNjbJA/AK+Qm5jsBMr0kXaVMlQuV3mwP7eaN5Zea6f1P5xg2a48NWlwcb/zZnySa3ZsG8lk7OIXk7P/xwbMAiBUEleUiDIHO9LwWfWmfmZteZ6eRz4xxLRW8L96A+Cs+Rfsw8FZeRNYk7k6HumQRxUHIt7h2/+MOLyUFbBvL+y5LnFI0YquKVFlbsExoLcqc3oZk0TAeviTCzo5/coexBcTR03SwbsRcS8tayIDqIcO14/y54q3bjmpz5qdOCT7PajDB1kJdgyJVgtufb3IIvXtqxNeQ== 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=N1aIkyKRbhewkohf7+VZd2KonKK56AOVOBclrIZYcqI=; b=jsB/W2YeO2z3U8dQrrk3JF6X1vLkMdwscvOeEmy1ULS1D/TvgIcVHbCOyv2V3MS0Zr05xYN5VzL7D9FjlqGqDr9Gf3e8AdDdCDvF1a/KX2gme9ewVLiAhTMjI9J/BY2MKWZ9Jg73l/NmjVvnUfIKBOz7lVug7uYSt7FSR0KQMIz/FQi+JjfECHHjD0eA/IHom+bPeQCCwb09uPE3qFE/RUH+MxeTdP+itmffqEleWlPY1PLrxCfDQhWL6+hENF6ysAx7xUhjMwPfy7k2YOyuRAYsSfNj+KdBJ9g3JIXztkRc2D5RM7ih6UDrbTWROPlYXvWsrI8EdHgQvDq7Ya3BkQ== Received: from DS0PR08MB9565.namprd08.prod.outlook.com (2603:10b6:8:1ba::17) by SJ0PR08MB6799.namprd08.prod.outlook.com (2603:10b6:a03:2d9::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9320.15; Tue, 11 Nov 2025 13:33:16 +0000 Received: from DS0PR08MB9565.namprd08.prod.outlook.com ([fe80::835a:699e:47ee:c088]) by DS0PR08MB9565.namprd08.prod.outlook.com ([fe80::835a:699e:47ee:c088%4]) with mapi id 15.20.9320.013; Tue, 11 Nov 2025 13:33:16 +0000 From: Boris Mironov To: "pgsql-hackers@postgresql.org" Subject: 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: AQHcUwuRPlzLCtdZw06GAdoL15fmHQ== Date: Tue, 11 Nov 2025 13:33:16 +0000 Message-ID: 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: DS0PR08MB9565:EE_|SJ0PR08MB6799:EE_ x-ms-office365-filtering-correlation-id: 3dec90e0-5404-4a1a-197d-08de2126dece x-microsoft-antispam: BCL:0;ARA:14566002|39105399006|461199028|6092099016|15030799006|8062599012|31061999003|8060799015|15080799012|19110799012|12121999013|3412199025|440099028|40105399003|102099032; x-microsoft-antispam-message-info: =?iso-8859-1?Q?u8hW50zeeL3/PIZpRcP0On/jJ6ths8hjpZ85JUDed5tRi0+ELzq2UTztiu?= =?iso-8859-1?Q?yj86zo2ooF8py/n+dePYzvNa81hsMSQq0neKlgLv3G6Q7iAu14pMFd6H36?= =?iso-8859-1?Q?fVIkhsULXxlDSrljo/F4OFdDRfbTmKmDrjCovgGv8PdfVzytwXfHhXxnTT?= =?iso-8859-1?Q?Xd2wbCabxQfyKdlBdGHhwnUtW79Qj3PcO/KoaXbVxT8v2uouB/t0EkHKi3?= =?iso-8859-1?Q?/xUnurk/taAeNi9l94BxksowcikAXCrzjGtm5oXG4LDp++Aa1V4Z2lQU5k?= =?iso-8859-1?Q?FGQU8Og0UyUsiVonM01g+BUB9yoRWTEgRdhjqT0bp5I9Ml7ASg3ssaSdKp?= =?iso-8859-1?Q?kjYoxFohg0FOknOLtBzAIVaM1AU2d9OSLpfwOYO7pzUcqrb9WeRw77tXQb?= =?iso-8859-1?Q?uzRnykQj1Go/gHfRVNtZf/jhjFvooriCtvPi2RGpkBvoKdBtx83prG43MU?= =?iso-8859-1?Q?DJYkEwY5aaz1eSpisAvHsV0/2uPqdkFeAOb1ZEVJl0geuO1VJABfY5jW/q?= =?iso-8859-1?Q?z6CG9+2O+gdGRoWMmBBAAZw57oNT1SwPfNbuN5BsrqzxQGWqBZ8WOLgzm9?= =?iso-8859-1?Q?7C0xdcjnrZ40YDNM+QQGOtgyvEKAIYXmjae0qMSH+BwB5UuicRPzQajfRd?= =?iso-8859-1?Q?eBKUBhFpUx4jdhMXCzNK6heG0kGn09jZA1kd8mFbJiPc7AqecVqD8GmXgz?= =?iso-8859-1?Q?ZcQwNnL3kn4eGAqOnWXgXPSScmiEvcfdGZqBIln58RKe0ZveaH6M+ZBq6v?= =?iso-8859-1?Q?GbVcyI3W+t19Tu3eNHRDpH+uv3Su6j9jalIyLjTz5rgW49wJDgGKpKm/qC?= =?iso-8859-1?Q?yPOIFP2+ncM8pwTfUa5Bb6j4WiOkFT7oPl1Rcp4U6uLyrkFTtfiHMEWbci?= =?iso-8859-1?Q?hckDBqpPazGiD86U6ZbXxnSBibYQwoL6Y4aYVf033F8Y8ysS1FdK3OmK1T?= =?iso-8859-1?Q?amJ3PLTTIJao5jNDAK7ScAD7hCnIQkF+dfNH5JRuSNOmu/3MHlkkmnDykG?= =?iso-8859-1?Q?XQ3PkRz5c1qgfwy6hJMIBbkMiamE/qLYlVg2Cf0Ya4jiFBmXtGGePDYAZf?= =?iso-8859-1?Q?sYbhH1C7gftQkG5P5XH4wsWtQuN/NVMAKri2kpb8p28qhEw+vVxQi/FWIq?= =?iso-8859-1?Q?6Uk/CmmRHQXRuGrWqK1rWinZVWNSApc93a+5gPv0NMAX7XbUm3QNFHmhFz?= =?iso-8859-1?Q?boRQdT3F7QRSRTuK9a1IDKosrwqyRGQFIMDHE3XlB7sjyyj1wbZuM2vdP2?= =?iso-8859-1?Q?78nTp5vhBsJZGdJsAhfmxGa1WuWaMQRIlLvRooTgw91wthYQ7h0DB8DzuT?= =?iso-8859-1?Q?YvMgvB9r8as2b/1ch71dwCrDFQ=3D=3D?= x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?+laqRBLdkCzgcr9AVxwEX249mpSoSEtu9J3hRq3IdYMZxwbd4rhBaklo++?= =?iso-8859-1?Q?OqiSvLqvTdEUZvN408+Jl1L3LIWXc0331CYXlqARCNSHgiAmy5d/1hZilS?= =?iso-8859-1?Q?nZo1oZi4wUrVSA2qHpXTK8xppmuG9nsGyabeGTgKSfRGBoEwuQypA28YLD?= =?iso-8859-1?Q?V4ChXESjuXiYmgePX7GKwpQB4zyi7/hJabh8qFux79RjWsmCt9OaBamTbC?= =?iso-8859-1?Q?0s1FpyHj/tfduMIQLm3iRvdnfO6KJ6lwHUig1/a4fm7AIxilwqE2qOocJB?= =?iso-8859-1?Q?aw+oOXJNhQa6IfeAsRvgU9oUmACPnEY6e2r55cCQKNELI/jjK/mmQUzSns?= =?iso-8859-1?Q?gcGxzjtvYam2Eo7TCfmlRqlhun79q/cSO+ot+d3nQv6EO7mJn8vgB6teLA?= =?iso-8859-1?Q?L5fO4skQXKTo9TP8pGH2ma9vuFlzS898GBJZPpOhNbp7Ag7f6eNIbq5/DP?= =?iso-8859-1?Q?wOyQcsue/e4EW7tdsCs9yE9XoQUBJ3HKMz0dNcGZZtZ2w0Of/wlY5N6wpe?= =?iso-8859-1?Q?LlKgI59iB6mCmqQ4sc0tNceDuNBOIOKGLuwsWCNlibiBIhYdv99iwpR3AG?= =?iso-8859-1?Q?BkbN4cp+eWOq57Idtik7VqMMRgz24Q9OQaJh0AesJPtlka+7cJUbdvvvxH?= =?iso-8859-1?Q?BDpiRIEj+MdQZoIugJQconqyaOL/Mb/gw1YvTNCcB+fceB1mhyI93Mixwf?= =?iso-8859-1?Q?CyPhR0QIhksKuC6f+3jPlMOx8N8aZmP3RhaSlAOMiuNxiUdnTE0PPaz4bM?= =?iso-8859-1?Q?2uEoYl73t4dweOQVKeK5jXkzkvAj05A1DUrzghoOMZ1CXYBhTVPVuTXixG?= =?iso-8859-1?Q?DqBwAGjqNSlH0CNr94mNU7+Zv7FCquBzZHkbnp0SAjtne9WzkswB/OYQ2M?= =?iso-8859-1?Q?L+9B0GNlp3Ix7Jsmbx2RRDey+Q8NIrx7PZ2F1iaFBlkaTCvtrYu7JoEbXf?= =?iso-8859-1?Q?G+boVixlFdi8yyXW1N0+U3GTxo6NbfoNZdVW8Vzx2Moh2gIodKDaNt56p0?= =?iso-8859-1?Q?iIvxsYFgmegDkXIbfMBlu9x2hiiNQ3D/fjSSc9rDCBMFcPjUn3fJ5QR4tY?= =?iso-8859-1?Q?8dovrKkVCmZ5V2sPJ9wDGn09/YGsTbdcW9TOT0ytiD/e0S+NmWdWZ5z6f9?= =?iso-8859-1?Q?FqwRty64uoXjVKkFhqpdrNc7r2bTi/BwqU9ZM9oTEDs0FbQ7z77d+gvVtn?= =?iso-8859-1?Q?JxLWOFkKifTh7xzrcyWwhvfLkGl1CjRZlfnhMY5NffYBL/o0My9jV1kf+u?= =?iso-8859-1?Q?BmznhDsVLl526a10EzV2EOYve/WnIkomqOYIxGlt0=3D?= Content-Type: multipart/mixed; boundary="_004_DS0PR08MB9565D91414C65B3AC363825488CFADS0PR08MB9565namp_" MIME-Version: 1.0 X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DS0PR08MB9565.namprd08.prod.outlook.com X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-CrossTenant-Network-Message-Id: 3dec90e0-5404-4a1a-197d-08de2126dece X-MS-Exchange-CrossTenant-originalarrivaltime: 11 Nov 2025 13:33:16.3027 (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: SJ0PR08MB6799 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --_004_DS0PR08MB9565D91414C65B3AC363825488CFADS0PR08MB9565namp_ Content-Type: multipart/alternative; boundary="_000_DS0PR08MB9565D91414C65B3AC363825488CFADS0PR08MB9565namp_" --_000_DS0PR08MB9565D91414C65B3AC363825488CFADS0PR08MB9565namp_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Hello hackers, For some of my specific hardware tests I needed to generate big databases w= ell beyond RAM size. Hence I turned to pgbench tool and its default 2 modes= for client- and server-side generation for TPC-B tests. When I use "scale"= factor in range of few thousands (eg, 3000 - 5000) data generation phase t= akes quite some time. I looked at it as opportunity to prove/disprove 2 hyp= othesises: * will INSERT mode work faster if we commit once every "scale" and turn singl= e INSERT into "for" loop with commits for 3 tables in the end of each loop * will "INSERT .. SELECT FROM unnest" be faster than "INSERT .. SELECT FROM g= enerate_series" * will BINARY mode work faster than TEXT even though we send much more data * and so on As a result of my experiments I produced significant patch for pgbench util= ity and though that it might be of interest not just for me. Therefore I'm = sending draft version of it in diff format for current development tree on = GitHub. As of November 11, 2025 I can merge with main branch of the project= on GitHub. Spoiler alert: "COPY FROM BINARY" is significantly faster than current "COP= Y FROM TEXT" Would be happy to polish it if there is interest to such change. Cheers --_000_DS0PR08MB9565D91414C65B3AC363825488CFADS0PR08MB9565namp_ Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable
Hello hackers,

For some of my specific hardware tests I needed to generate big databases w= ell beyond RAM size. Hence I turned to pgbench tool and its default 2 modes= for client- and server-side generation for TPC-B tests. When I use "s= cale" factor in range of few thousands (eg, 3000 - 5000) data generation phase takes quite some time. I looked at= it as opportunity to prove/disprove 2 hypothesises:
  • will INSERT mode work f= aster if we commit once every "scale" and turn single INSERT into= "for" loop with commits for 3 tables in the end of each loop
  • will "INSERT .. SE= LECT FROM unnest" be faster than "INSERT .. SELECT FROM generate_= series"
  • will BINARY mode work f= aster than TEXT even though we send much more data
  • and so on
As a result of my experiments I produced significant patch for pgbench util= ity and though that it might be of interest not just for me. Therefore I'm = sending draft version of it in diff format for current development tree on = GitHub. As of November 11, 2025 I can merge with main branch of the project on GitHub.

Spoiler alert: "COPY FROM BINARY" is significantly faster than cu= rrent "COPY FROM TEXT"

Would be happy to polish it if there is interest to such change.

Cheers
--_000_DS0PR08MB9565D91414C65B3AC363825488CFADS0PR08MB9565namp_-- --_004_DS0PR08MB9565D91414C65B3AC363825488CFADS0PR08MB9565namp_ Content-Type: application/octet-stream; name="pgbench.c.diff" Content-Description: pgbench.c.diff Content-Disposition: attachment; filename="pgbench.c.diff"; size=29658; creation-date="Tue, 11 Nov 2025 13:27:16 GMT"; modification-date="Tue, 11 Nov 2025 13:27:26 GMT" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdiZW5jaC9wZ2JlbmNoLmMgYi9zcmMvYmluL3BnYmVuY2gv cGdiZW5jaC5jCmluZGV4IDE1MTVlZDQwNWJhLi43MWFhMWQ5NDc5ZiAxMDA2NDQKLS0tIGEvc3Jj L2Jpbi9wZ2JlbmNoL3BnYmVuY2guYworKysgYi9zcmMvYmluL3BnYmVuY2gvcGdiZW5jaC5jCkBA IC0xNjEsNyArMTYxLDcgQEAgdHlwZWRlZiBzdHJ1Y3Qgc29ja2V0X3NldAogICogc29tZSBjb25m aWd1cmFibGUgcGFyYW1ldGVycyAqLwogCiAjZGVmaW5lIERFRkFVTFRfSU5JVF9TVEVQUyAiZHRn dnAiCS8qIGRlZmF1bHQgLUkgc2V0dGluZyAqLwotI2RlZmluZSBBTExfSU5JVF9TVEVQUyAiZHRn R3ZwZiIJLyogYWxsIHBvc3NpYmxlIHN0ZXBzICovCisjZGVmaW5lIEFMTF9JTklUX1NURVBTICJk dGdDR2lJdnBmIgkvKiBhbGwgcG9zc2libGUgc3RlcHMgKi8KIAogI2RlZmluZSBMT0dfU1RFUF9T RUNPTkRTCTUJLyogc2Vjb25kcyBiZXR3ZWVuIGxvZyBtZXNzYWdlcyAqLwogI2RlZmluZSBERUZB VUxUX05YQUNUUwkxMAkJLyogZGVmYXVsdCBueGFjdHMgKi8KQEAgLTE3MSw2ICsxNzEsMTQgQEAg dHlwZWRlZiBzdHJ1Y3Qgc29ja2V0X3NldAogI2RlZmluZSBNSU5fWklQRklBTl9QQVJBTQkJMS4w MDEJLyogbWluaW11bSBwYXJhbWV0ZXIgZm9yIHppcGZpYW4gKi8KICNkZWZpbmUgTUFYX1pJUEZJ QU5fUEFSQU0JCTEwMDAuMAkvKiBtYXhpbXVtIHBhcmFtZXRlciBmb3IgemlwZmlhbiAqLwogCisv KiBvcmlnaW5hbCBzaW5nbGUgdHJhbnNhY3Rpb24gc2VydmVyLXNpZGUgbWV0aG9kICovCisjZGVm aW5lIEdFTl9UWVBFX0lOU0VSVF9PUklHSU5BTAknRycJLyogdXNlIElOU0VSVCAuLiBTRUxFQ1Qg Z2VuZXJhdGVfc2VyaWVzIHRvIGdlbmVyYXRlIGRhdGEgKi8KKy8qICdvbmUgdHJhbnNhY3Rpb24g cGVyIHNjYWxlJyBzZXJ2ZXItc2lkZSBtZXRob2RzICovCisjZGVmaW5lIEdFTl9UWVBFX0lOU0VS VF9TRVJJRVMJCSdpJwkvKiB1c2UgSU5TRVJUIC4uIFNFTEVDVCBnZW5lcmF0ZV9zZXJpZXMgdG8g Z2VuZXJhdGUgZGF0YSAqLworI2RlZmluZSBHRU5fVFlQRV9JTlNFUlRfVU5ORVNUICAJJ0knCS8q IHVzZSBJTlNFUlQgLi4gU0VMRUNUIHVubmVzdCB0byBnZW5lcmF0ZSBkYXRhICovCisjZGVmaW5l IEdFTl9UWVBFX0NPUFlfT1JJR0lOQUwJCSdnJyAvKiB1c2UgQ09QWSAuLiBGUk9NIFNURElOIC4u IFRFWFQgdG8gZ2VuZXJhdGUgZGF0YSAqLworI2RlZmluZSBHRU5fVFlQRV9DT1BZX0JJTkFSWQkJ J0MnIC8qIHVzZSBDT1BZIC4uIEZST00gU1RESU4gLi4gQklOQVJZIHRvIGdlbmVyYXRlIGRhdGEg Ki8KKwogc3RhdGljIGludAlueGFjdHMgPSAwOwkJCS8qIG51bWJlciBvZiB0cmFuc2FjdGlvbnMg cGVyIGNsaWVudCAqLwogc3RhdGljIGludAlkdXJhdGlvbiA9IDA7CQkvKiBkdXJhdGlvbiBpbiBz ZWNvbmRzICovCiBzdGF0aWMgaW50NjQgZW5kX3RpbWUgPSAwOwkJLyogd2hlbiB0byBzdG9wIGlu IG1pY3JvIHNlY29uZHMsIHVuZGVyIC1UICovCkBAIC0xODEsNiArMTg5LDE4IEBAIHN0YXRpYyBp bnQ2NCBlbmRfdGltZSA9IDA7CQkvKiB3aGVuIHRvIHN0b3AgaW4gbWljcm8gc2Vjb25kcywgdW5k ZXIgLVQgKi8KICAqLwogc3RhdGljIGludAlzY2FsZSA9IDE7CiAKKy8qCisgKiBtb2RlIG9mIGRh dGEgZ2VuZXJhdGlvbiB0byB1c2UKKyAqLworc3RhdGljIGNoYXIJZGF0YV9nZW5lcmF0aW9uX3R5 cGUgPSAnPyc7CisKKy8qCisgKiBDT1BZIEZST00gQklOQVJZIGV4ZWN1dGlvbiBidWZmZXIKKyAq LworI2RlZmluZSBCSU5fQ09QWV9CVUZfU0laRQkxMDI0MDAJCQkJLyogbWF4aW11bSBidWZmZXIg c2l6ZSBmb3IgQ09QWSBGUk9NIEJJTkFSWSAqLworc3RhdGljIGNoYXIJCSpiaW5fY29weV9idWZm ZXIgPSBOVUxMOwkJLyogYnVmZmVyIGZvciBDT1BZIEZST00gQklOQVJZICovCitzdGF0aWMgaW50 MzJfdAkgYmluX2NvcHlfYnVmZmVyX2xlbmd0aCA9IDA7CS8qIGN1cnJlbnQgYnVmZmVyIHNpemUg Ki8KKwogLyoKICAqIGZpbGxmYWN0b3IuIGZvciBleGFtcGxlLCBmaWxsZmFjdG9yID0gOTAgd2ls bCB1c2Ugb25seSA5MCBwZXJjZW50CiAgKiBzcGFjZSBkdXJpbmcgaW5zZXJ0cyBhbmQgbGVhdmUg MTAgcGVyY2VudCBmcmVlLgpAQCAtNDAyLDE0ICs0MjIsMTUgQEAgdHlwZWRlZiBzdHJ1Y3QgU3Rh dHNEYXRhCiAJICogICBkaXJlY3RseSBzdWNjZXNzZnVsIHRyYW5zYWN0aW9ucyAodGhleSB3ZXJl IHN1Y2Nlc3NmdWxseSBjb21wbGV0ZWQgb24KIAkgKiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB0aGUgZmlyc3QgdHJ5KS4KIAkgKgotCSAqIEEgZmFpbGVkIHRyYW5zYWN0aW9u IGlzIGRlZmluZWQgYXMgdW5zdWNjZXNzZnVsbHkgcmV0cmllZCB0cmFuc2FjdGlvbnMuCi0JICog SXQgY2FuIGJlIG9uZSBvZiB0d28gdHlwZXM6Ci0JICoKLQkgKiBmYWlsZWQgKHRoZSBudW1iZXIg b2YgZmFpbGVkIHRyYW5zYWN0aW9ucykgPQorCSAqICdmYWlsZWQnICh0aGUgbnVtYmVyIG9mIGZh aWxlZCB0cmFuc2FjdGlvbnMpID0KIAkgKiAgICdzZXJpYWxpemF0aW9uX2ZhaWx1cmVzJyAodGhl eSBnb3QgYSBzZXJpYWxpemF0aW9uIGVycm9yIGFuZCB3ZXJlIG5vdAotCSAqICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzdWNjZXNzZnVsbHkgcmV0cmllZCkgKworCSAqICAgICAgICAgICAg ICAgICAgICAgICAgc3VjY2Vzc2Z1bGx5IHJldHJpZWQpICsKIAkgKiAgICdkZWFkbG9ja19mYWls dXJlcycgKHRoZXkgZ290IGEgZGVhZGxvY2sgZXJyb3IgYW5kIHdlcmUgbm90Ci0JICogICAgICAg ICAgICAgICAgICAgICAgICBzdWNjZXNzZnVsbHkgcmV0cmllZCkuCisJICogICAgICAgICAgICAg ICAgICAgICAgICBzdWNjZXNzZnVsbHkgcmV0cmllZCkgKworCSAqICAgJ290aGVyX3NxbF9mYWls dXJlcycgICh0aGV5IGZhaWxlZCBvbiB0aGUgZmlyc3QgdHJ5IG9yIGFmdGVyIHJldHJpZXMKKwkg KiAgICAgICAgICAgICAgICAgICAgICAgIGR1ZSB0byBhIFNRTCBlcnJvciBvdGhlciB0aGFuIHNl cmlhbGl6YXRpb24gb3IKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgIGRlYWRsb2NrOyB0aGV5 IGFyZSBjb3VudGVkIGFzIGEgZmFpbGVkIHRyYW5zYWN0aW9uCisJICogICAgICAgICAgICAgICAg ICAgICAgICBvbmx5IHdoZW4gLS1jb250aW51ZS1vbi1lcnJvciBpcyBzcGVjaWZpZWQpLgogCSAq CiAJICogSWYgdGhlIHRyYW5zYWN0aW9uIHdhcyByZXRyaWVkIGFmdGVyIGEgc2VyaWFsaXphdGlv biBvciBhIGRlYWRsb2NrCiAJICogZXJyb3IgdGhpcyBkb2VzIG5vdCBndWFyYW50ZWUgdGhhdCB0 aGlzIHJldHJ5IHdhcyBzdWNjZXNzZnVsLiBUaHVzCkBAIC00MjEsNyArNDQyLDcgQEAgdHlwZWRl ZiBzdHJ1Y3QgU3RhdHNEYXRhCiAJICoKIAkgKiAncmV0cmllZCcgKG51bWJlciBvZiBhbGwgcmV0 cmllZCB0cmFuc2FjdGlvbnMpID0KIAkgKiAgIHN1Y2Nlc3NmdWxseSByZXRyaWVkIHRyYW5zYWN0 aW9ucyArCi0JICogICBmYWlsZWQgdHJhbnNhY3Rpb25zLgorCSAqICAgdW5zdWNjZXNzZnVsIHJl dHJpZWQgdHJhbnNhY3Rpb25zLgogCSAqLS0tLS0tLS0tLQogCSAqLwogCWludDY0CQljbnQ7CQkJ LyogbnVtYmVyIG9mIHN1Y2Nlc3NmdWwgdHJhbnNhY3Rpb25zLCBub3QKQEAgLTQ0MCw2ICs0NjEs MTEgQEAgdHlwZWRlZiBzdHJ1Y3QgU3RhdHNEYXRhCiAJaW50NjQJCWRlYWRsb2NrX2ZhaWx1cmVz OwkvKiBudW1iZXIgb2YgdHJhbnNhY3Rpb25zIHRoYXQgd2VyZSBub3QKIAkJCQkJCQkJCSAqIHN1 Y2Nlc3NmdWxseSByZXRyaWVkIGFmdGVyIGEgZGVhZGxvY2sKIAkJCQkJCQkJCSAqIGVycm9yICov CisJaW50NjQJCW90aGVyX3NxbF9mYWlsdXJlczsgLyogbnVtYmVyIG9mIGZhaWxlZCB0cmFuc2Fj dGlvbnMgZm9yCisJCQkJCQkJCQkgKiByZWFzb25zIG90aGVyIHRoYW4KKwkJCQkJCQkJCSAqIHNl cmlhbGl6YXRpb24vZGVhZGxvY2sgZmFpbHVyZSwgd2hpY2gKKwkJCQkJCQkJCSAqIGlzIGNvdW50 ZWQgaWYgLS1jb250aW51ZS1vbi1lcnJvciBpcworCQkJCQkJCQkJICogc3BlY2lmaWVkICovCiAJ U2ltcGxlU3RhdHMgbGF0ZW5jeTsKIAlTaW1wbGVTdGF0cyBsYWc7CiB9IFN0YXRzRGF0YTsKQEAg LTQ1Nyw2ICs0ODMsNyBAQCB0eXBlZGVmIGVudW0gRVN0YXR1cwogewogCUVTVEFUVVNfTk9fRVJS T1IgPSAwLAogCUVTVEFUVVNfTUVUQV9DT01NQU5EX0VSUk9SLAorCUVTVEFUVVNfQ09OTl9FUlJP UiwKIAogCS8qIFNRTCBlcnJvcnMgKi8KIAlFU1RBVFVTX1NFUklBTElaQVRJT05fRVJST1IsCkBA IC03NzAsNiArNzk3LDcgQEAgc3RhdGljIGludDY0IHRvdGFsX3dlaWdodCA9IDA7CiBzdGF0aWMg Ym9vbCB2ZXJib3NlX2Vycm9ycyA9IGZhbHNlOyAvKiBwcmludCB2ZXJib3NlIG1lc3NhZ2VzIG9m IGFsbCBlcnJvcnMgKi8KIAogc3RhdGljIGJvb2wgZXhpdF9vbl9hYm9ydCA9IGZhbHNlOwkvKiBl eGl0IHdoZW4gYW55IGNsaWVudCBpcyBhYm9ydGVkICovCitzdGF0aWMgYm9vbCBjb250aW51ZV9v bl9lcnJvciA9IGZhbHNlOwkvKiBjb250aW51ZSBhZnRlciBlcnJvcnMgKi8KIAogLyogQnVpbHRp biB0ZXN0IHNjcmlwdHMgKi8KIHR5cGVkZWYgc3RydWN0IEJ1aWx0aW5TY3JpcHQKQEAgLTg0Miw3 ICs4NzAsOCBAQCBzdGF0aWMgaW50CXdhaXRfb25fc29ja2V0X3NldChzb2NrZXRfc2V0ICpzYSwg aW50NjQgdXNlY3MpOwogc3RhdGljIGJvb2wgc29ja2V0X2hhc19pbnB1dChzb2NrZXRfc2V0ICpz YSwgaW50IGZkLCBpbnQgaWR4KTsKIAogLyogY2FsbGJhY2sgdXNlZCB0byBidWlsZCByb3dzIGZv ciBDT1BZIGR1cmluZyBkYXRhIGxvYWRpbmcgKi8KLXR5cGVkZWYgdm9pZCAoKmluaXRSb3dNZXRo b2QpIChQUUV4cEJ1ZmZlckRhdGEgKnNxbCwgaW50NjQgY3Vycik7Cit0eXBlZGVmIHZvaWQgKCpp bml0Um93TWV0aG9kKQkJKFBRRXhwQnVmZmVyRGF0YSAqc3FsLCBpbnQ2NCBjdXJyKTsKK3R5cGVk ZWYgdm9pZCAoKmluaXRSb3dNZXRob2RCaW4pCShQR2Nvbm4gKmNvbiwgUEdyZXN1bHQgKnJlcywg aW50NjRfdCBjdXJyLCBpbnQzMl90IHBhcmVudCk7CiAKIC8qIGNhbGxiYWNrIGZ1bmN0aW9ucyBm b3Igb3VyIGZsZXggbGV4ZXIgKi8KIHN0YXRpYyBjb25zdCBQc3FsU2NhbkNhbGxiYWNrcyBwZ2Jl bmNoX2NhbGxiYWNrcyA9IHsKQEAgLTkwNiw3ICs5MzUsMTAgQEAgdXNhZ2Uodm9pZCkKIAkJICAg IiAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ6IGRyb3AgYW55IGV4aXN0aW5nIHBnYmVuY2gg dGFibGVzXG4iCiAJCSAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICB0OiBjcmVhdGUgdGhl IHRhYmxlcyB1c2VkIGJ5IHRoZSBzdGFuZGFyZCBwZ2JlbmNoIHNjZW5hcmlvXG4iCiAJCSAgICIg ICAgICAgICAgICAgICAgICAgICAgICAgICBnOiBnZW5lcmF0ZSBkYXRhLCBjbGllbnQtc2lkZVxu IgotCQkgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgRzogZ2VuZXJhdGUgZGF0YSwgc2Vy dmVyLXNpZGVcbiIKKwkJICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgIEM6ICAgY2xpZW50 LXNpZGUgKHNpbmdsZSBUTlgpIENPUFkgLi4gRlJPTSBTVERJTiAuLiBCSU5BUllcbiIKKwkJICAg IiAgICAgICAgICAgICAgICAgICAgICAgICAgIEc6IGdlbmVyYXRlIGRhdGEsIHNlcnZlci1zaWRl IGluIHNpbmdsZSB0cmFuc2FjdGlvblxuIgorCQkgICAiICAgICAgICAgICAgICAgICAgICAgICAg ICAgaTogICBzZXJ2ZXItc2lkZSAobXVsdGlwbGUgVFhOcykgSU5TRVJUIC4uIFNFTEVDVCBnZW5l cmF0ZV9zZXJpZXNcbiIKKwkJICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgIEk6ICAgc2Vy dmVyLXNpZGUgKG11bHRpcGxlIFRYTnMpIElOU0VSVCAuLiBTRUxFQ1QgdW5uZXN0XG4iCiAJCSAg ICIgICAgICAgICAgICAgICAgICAgICAgICAgICB2OiBpbnZva2UgVkFDVVVNIG9uIHRoZSBzdGFu ZGFyZCB0YWJsZXNcbiIKIAkJICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgIHA6IGNyZWF0 ZSBwcmltYXJ5IGtleSBpbmRleGVzIG9uIHRoZSBzdGFuZGFyZCB0YWJsZXNcbiIKIAkJICAgIiAg ICAgICAgICAgICAgICAgICAgICAgICAgIGY6IGNyZWF0ZSBmb3JlaWduIGtleXMgYmV0d2VlbiB0 aGUgc3RhbmRhcmQgdGFibGVzXG4iCkBAIC05NDksNiArOTgxLDcgQEAgdXNhZ2Uodm9pZCkKIAkJ ICAgIiAgLVQsIC0tdGltZT1OVU0gICAgICAgICAgIGR1cmF0aW9uIG9mIGJlbmNobWFyayB0ZXN0 IGluIHNlY29uZHNcbiIKIAkJICAgIiAgLXYsIC0tdmFjdXVtLWFsbCAgICAgICAgIHZhY3V1bSBh bGwgZm91ciBzdGFuZGFyZCB0YWJsZXMgYmVmb3JlIHRlc3RzXG4iCiAJCSAgICIgIC0tYWdncmVn YXRlLWludGVydmFsPU5VTSBhZ2dyZWdhdGUgZGF0YSBvdmVyIE5VTSBzZWNvbmRzXG4iCisJCSAg ICIgIC0tY29udGludWUtb24tZXJyb3IgICAgICBjb250aW51ZSBydW5uaW5nIGFmdGVyIGFuIFNR TCBlcnJvclxuIgogCQkgICAiICAtLWV4aXQtb24tYWJvcnQgICAgICAgICAgZXhpdCB3aGVuIGFu eSBjbGllbnQgaXMgYWJvcnRlZFxuIgogCQkgICAiICAtLWZhaWx1cmVzLWRldGFpbGVkICAgICAg cmVwb3J0IHRoZSBmYWlsdXJlcyBncm91cGVkIGJ5IGJhc2ljIHR5cGVzXG4iCiAJCSAgICIgIC0t bG9nLXByZWZpeD1QUkVGSVggICAgICBwcmVmaXggZm9yIHRyYW5zYWN0aW9uIHRpbWUgbG9nIGZp bGVcbiIKQEAgLTE0NjcsNiArMTUwMCw3IEBAIGluaXRTdGF0cyhTdGF0c0RhdGEgKnNkLCBwZ190 aW1lX3VzZWNfdCBzdGFydCkKIAlzZC0+cmV0cmllZCA9IDA7CiAJc2QtPnNlcmlhbGl6YXRpb25f ZmFpbHVyZXMgPSAwOwogCXNkLT5kZWFkbG9ja19mYWlsdXJlcyA9IDA7CisJc2QtPm90aGVyX3Nx bF9mYWlsdXJlcyA9IDA7CiAJaW5pdFNpbXBsZVN0YXRzKCZzZC0+bGF0ZW5jeSk7CiAJaW5pdFNp bXBsZVN0YXRzKCZzZC0+bGFnKTsKIH0KQEAgLTE1MTYsNiArMTU1MCw5IEBAIGFjY3VtU3RhdHMo U3RhdHNEYXRhICpzdGF0cywgYm9vbCBza2lwcGVkLCBkb3VibGUgbGF0LCBkb3VibGUgbGFnLAog CQljYXNlIEVTVEFUVVNfREVBRExPQ0tfRVJST1I6CiAJCQlzdGF0cy0+ZGVhZGxvY2tfZmFpbHVy ZXMrKzsKIAkJCWJyZWFrOworCQljYXNlIEVTVEFUVVNfT1RIRVJfU1FMX0VSUk9SOgorCQkJc3Rh dHMtPm90aGVyX3NxbF9mYWlsdXJlcysrOworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQkvKiBp bnRlcm5hbCBlcnJvciB3aGljaCBzaG91bGQgbmV2ZXIgb2NjdXIgKi8KIAkJCXBnX2ZhdGFsKCJ1 bmV4cGVjdGVkIGVycm9yIHN0YXR1czogJWQiLCBlc3RhdHVzKTsKQEAgLTMyMzEsMTEgKzMyNjgs NDMgQEAgc2VuZENvbW1hbmQoQ1N0YXRlICpzdCwgQ29tbWFuZCAqY29tbWFuZCkKIH0KIAogLyoK LSAqIEdldCB0aGUgZXJyb3Igc3RhdHVzIGZyb20gdGhlIGVycm9yIGNvZGUuCisgKiBSZWFkIGFu ZCBkaXNjYXJkIGFsbCBhdmFpbGFibGUgcmVzdWx0cyBmcm9tIHRoZSBjb25uZWN0aW9uLgorICov CitzdGF0aWMgdm9pZAorZGlzY2FyZEF2YWlsYWJsZVJlc3VsdHMoQ1N0YXRlICpzdCkKK3sKKwlQ R3Jlc3VsdCAgICpyZXMgPSBOVUxMOworCisJZm9yICg7OykKKwl7CisJCXJlcyA9IFBRZ2V0UmVz dWx0KHN0LT5jb24pOworCisJCS8qCisJCSAqIFJlYWQgYW5kIGRpc2NhcmQgcmVzdWx0cyB1bnRp bCBQUWdldFJlc3VsdCgpIHJldHVybnMgTlVMTCAobm8gbW9yZQorCQkgKiByZXN1bHRzKSBvciBh IGNvbm5lY3Rpb24gZmFpbHVyZSBpcyBkZXRlY3RlZC4gSWYgdGhlIHBpcGVsaW5lCisJCSAqIHN0 YXR1cyBpcyBQUV9QSVBFTElORV9BQk9SVEVELCBtb3JlIHJlc3VsdHMgbWF5IHN0aWxsIGJlIGF2 YWlsYWJsZQorCQkgKiBldmVuIGFmdGVyIFBRZ2V0UmVzdWx0KCkgcmV0dXJucyBOVUxMLCBzbyBj b250aW51ZSByZWFkaW5nIGluIHRoYXQKKwkJICogY2FzZS4KKwkJICovCisJCWlmICgocmVzID09 IE5VTEwgJiYgUFFwaXBlbGluZVN0YXR1cyhzdC0+Y29uKSAhPSBQUV9QSVBFTElORV9BQk9SVEVE KSB8fAorCQkJUFFzdGF0dXMoc3QtPmNvbikgPT0gQ09OTkVDVElPTl9CQUQpCisJCQlicmVhazsK KworCQlQUWNsZWFyKHJlcyk7CisJfQorCVBRY2xlYXIocmVzKTsKK30KKworLyoKKyAqIERldGVy bWluZSB0aGUgZXJyb3Igc3RhdHVzIGJhc2VkIG9uIHRoZSBjb25uZWN0aW9uIHN0YXR1cyBhbmQg ZXJyb3IgY29kZS4KICAqLwogc3RhdGljIEVTdGF0dXMKLWdldFNRTEVycm9yU3RhdHVzKGNvbnN0 IGNoYXIgKnNxbFN0YXRlKQorZ2V0U1FMRXJyb3JTdGF0dXMoQ1N0YXRlICpzdCwgY29uc3QgY2hh ciAqc3FsU3RhdGUpCiB7CisJZGlzY2FyZEF2YWlsYWJsZVJlc3VsdHMoc3QpOworCWlmIChQUXN0 YXR1cyhzdC0+Y29uKSA9PSBDT05ORUNUSU9OX0JBRCkKKwkJcmV0dXJuIEVTVEFUVVNfQ09OTl9F UlJPUjsKKwogCWlmIChzcWxTdGF0ZSAhPSBOVUxMKQogCXsKIAkJaWYgKHN0cmNtcChzcWxTdGF0 ZSwgRVJSQ09ERV9UX1JfU0VSSUFMSVpBVElPTl9GQUlMVVJFKSA9PSAwKQpAQCAtMzI1Nyw2ICsz MzI2LDE3IEBAIGNhblJldHJ5RXJyb3IoRVN0YXR1cyBlc3RhdHVzKQogCQkJZXN0YXR1cyA9PSBF U1RBVFVTX0RFQURMT0NLX0VSUk9SKTsKIH0KIAorLyoKKyAqIFJldHVybnMgdHJ1ZSBpZiAtLWNv bnRpbnVlLW9uLWVycm9yIGlzIHNwZWNpZmllZCBhbmQgdGhpcyBlcnJvciBhbGxvd3MKKyAqIHBy b2Nlc3NpbmcgdG8gY29udGludWUuCisgKi8KK3N0YXRpYyBib29sCitjYW5Db250aW51ZU9uRXJy b3IoRVN0YXR1cyBlc3RhdHVzKQoreworCXJldHVybiAoY29udGludWVfb25fZXJyb3IgJiYKKwkJ CWVzdGF0dXMgPT0gRVNUQVRVU19PVEhFUl9TUUxfRVJST1IpOworfQorCiAvKgogICogUHJvY2Vz cyBxdWVyeSByZXNwb25zZSBmcm9tIHRoZSBiYWNrZW5kLgogICoKQEAgLTMzNzUsOSArMzQ1NSw5 IEBAIHJlYWRDb21tYW5kUmVzcG9uc2UoQ1N0YXRlICpzdCwgTWV0YUNvbW1hbmQgbWV0YSwgY2hh ciAqdmFycHJlZml4KQogCiAJCQljYXNlIFBHUkVTX05PTkZBVEFMX0VSUk9SOgogCQkJY2FzZSBQ R1JFU19GQVRBTF9FUlJPUjoKLQkJCQlzdC0+ZXN0YXR1cyA9IGdldFNRTEVycm9yU3RhdHVzKFBR cmVzdWx0RXJyb3JGaWVsZChyZXMsCi0JCQkJCQkJCQkJCQkJCQkJICAgUEdfRElBR19TUUxTVEFU RSkpOwotCQkJCWlmIChjYW5SZXRyeUVycm9yKHN0LT5lc3RhdHVzKSkKKwkJCQlzdC0+ZXN0YXR1 cyA9IGdldFNRTEVycm9yU3RhdHVzKHN0LCBQUXJlc3VsdEVycm9yRmllbGQocmVzLAorCQkJCQkJ CQkJCQkJCQkJCQkgICBQR19ESUFHX1NRTFNUQVRFKSk7CisJCQkJaWYgKGNhblJldHJ5RXJyb3Io c3QtPmVzdGF0dXMpIHx8IGNhbkNvbnRpbnVlT25FcnJvcihzdC0+ZXN0YXR1cykpCiAJCQkJewog CQkJCQlpZiAodmVyYm9zZV9lcnJvcnMpCiAJCQkJCQljb21tYW5kRXJyb3Ioc3QsIFBRcmVzdWx0 RXJyb3JNZXNzYWdlKHJlcykpOwpAQCAtMzQwOSwxMSArMzQ4OSw3IEBAIHJlYWRDb21tYW5kUmVz cG9uc2UoQ1N0YXRlICpzdCwgTWV0YUNvbW1hbmQgbWV0YSwgY2hhciAqdmFycHJlZml4KQogZXJy b3I6CiAJUFFjbGVhcihyZXMpOwogCVBRY2xlYXIobmV4dF9yZXMpOwotCWRvCi0JewotCQlyZXMg PSBQUWdldFJlc3VsdChzdC0+Y29uKTsKLQkJUFFjbGVhcihyZXMpOwotCX0gd2hpbGUgKHJlcyk7 CisJZGlzY2FyZEF2YWlsYWJsZVJlc3VsdHMoc3QpOwogCiAJcmV0dXJuIGZhbHNlOwogfQpAQCAt NDA0MSw3ICs0MTE3LDcgQEAgYWR2YW5jZUNvbm5lY3Rpb25TdGF0ZShUU3RhdGUgKnRocmVhZCwg Q1N0YXRlICpzdCwgU3RhdHNEYXRhICphZ2cpCiAJCQkJCWlmIChQUXBpcGVsaW5lU3RhdHVzKHN0 LT5jb24pICE9IFBRX1BJUEVMSU5FX09OKQogCQkJCQkJc3QtPnN0YXRlID0gQ1NUQVRFX0VORF9D T01NQU5EOwogCQkJCX0KLQkJCQllbHNlIGlmIChjYW5SZXRyeUVycm9yKHN0LT5lc3RhdHVzKSkK KwkJCQllbHNlIGlmIChjYW5SZXRyeUVycm9yKHN0LT5lc3RhdHVzKSB8fCBjYW5Db250aW51ZU9u RXJyb3Ioc3QtPmVzdGF0dXMpKQogCQkJCQlzdC0+c3RhdGUgPSBDU1RBVEVfRVJST1I7CiAJCQkJ ZWxzZQogCQkJCQlzdC0+c3RhdGUgPSBDU1RBVEVfQUJPUlRFRDsKQEAgLTQ1NjIsNyArNDYzOCw4 IEBAIHN0YXRpYyBpbnQ2NAogZ2V0RmFpbHVyZXMoY29uc3QgU3RhdHNEYXRhICpzdGF0cykKIHsK IAlyZXR1cm4gKHN0YXRzLT5zZXJpYWxpemF0aW9uX2ZhaWx1cmVzICsKLQkJCXN0YXRzLT5kZWFk bG9ja19mYWlsdXJlcyk7CisJCQlzdGF0cy0+ZGVhZGxvY2tfZmFpbHVyZXMgKworCQkJc3RhdHMt Pm90aGVyX3NxbF9mYWlsdXJlcyk7CiB9CiAKIC8qCkBAIC00NTgyLDYgKzQ2NTksOCBAQCBnZXRS ZXN1bHRTdHJpbmcoYm9vbCBza2lwcGVkLCBFU3RhdHVzIGVzdGF0dXMpCiAJCQkJcmV0dXJuICJz ZXJpYWxpemF0aW9uIjsKIAkJCWNhc2UgRVNUQVRVU19ERUFETE9DS19FUlJPUjoKIAkJCQlyZXR1 cm4gImRlYWRsb2NrIjsKKwkJCWNhc2UgRVNUQVRVU19PVEhFUl9TUUxfRVJST1I6CisJCQkJcmV0 dXJuICJvdGhlciI7CiAJCQlkZWZhdWx0OgogCQkJCS8qIGludGVybmFsIGVycm9yIHdoaWNoIHNo b3VsZCBuZXZlciBvY2N1ciAqLwogCQkJCXBnX2ZhdGFsKCJ1bmV4cGVjdGVkIGVycm9yIHN0YXR1 czogJWQiLCBlc3RhdHVzKTsKQEAgLTQ2MzcsNiArNDcxNiw3IEBAIGRvTG9nKFRTdGF0ZSAqdGhy ZWFkLCBDU3RhdGUgKnN0LAogCQkJaW50NjQJCXNraXBwZWQgPSAwOwogCQkJaW50NjQJCXNlcmlh bGl6YXRpb25fZmFpbHVyZXMgPSAwOwogCQkJaW50NjQJCWRlYWRsb2NrX2ZhaWx1cmVzID0gMDsK KwkJCWludDY0CQlvdGhlcl9zcWxfZmFpbHVyZXMgPSAwOwogCQkJaW50NjQJCXJldHJpZWQgPSAw OwogCQkJaW50NjQJCXJldHJpZXMgPSAwOwogCkBAIC00Njc3LDEwICs0NzU3LDEyIEBAIGRvTG9n KFRTdGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LAogCQkJewogCQkJCXNlcmlhbGl6YXRpb25fZmFp bHVyZXMgPSBhZ2ctPnNlcmlhbGl6YXRpb25fZmFpbHVyZXM7CiAJCQkJZGVhZGxvY2tfZmFpbHVy ZXMgPSBhZ2ctPmRlYWRsb2NrX2ZhaWx1cmVzOworCQkJCW90aGVyX3NxbF9mYWlsdXJlcyA9IGFn Zy0+b3RoZXJfc3FsX2ZhaWx1cmVzOwogCQkJfQotCQkJZnByaW50Zihsb2dmaWxlLCAiICIgSU5U NjRfRk9STUFUICIgIiBJTlQ2NF9GT1JNQVQsCisJCQlmcHJpbnRmKGxvZ2ZpbGUsICIgIiBJTlQ2 NF9GT1JNQVQgIiAiIElOVDY0X0ZPUk1BVCAiICIgSU5UNjRfRk9STUFULAogCQkJCQlzZXJpYWxp emF0aW9uX2ZhaWx1cmVzLAotCQkJCQlkZWFkbG9ja19mYWlsdXJlcyk7CisJCQkJCWRlYWRsb2Nr X2ZhaWx1cmVzLAorCQkJCQlvdGhlcl9zcWxfZmFpbHVyZXMpOwogCiAJCQlmcHV0YygnXG4nLCBs b2dmaWxlKTsKIApAQCAtNTEyMCw5ICs1MjAyLDkgQEAgaW5pdFBvcHVsYXRlVGFibGUoUEdjb25u ICpjb24sIGNvbnN0IGNoYXIgKnRhYmxlLCBpbnQ2NCBiYXNlLAogICogYSBibGFuay1wYWRkZWQg c3RyaW5nIGluIHBnYmVuY2hfYWNjb3VudHMuCiAgKi8KIHN0YXRpYyB2b2lkCi1pbml0R2VuZXJh dGVEYXRhQ2xpZW50U2lkZShQR2Nvbm4gKmNvbikKK2luaXRHZW5lcmF0ZURhdGFDbGllbnRTaWRl VGV4dChQR2Nvbm4gKmNvbikKIHsKLQlmcHJpbnRmKHN0ZGVyciwgImdlbmVyYXRpbmcgZGF0YSAo Y2xpZW50LXNpZGUpLi4uXG4iKTsKKwlmcHJpbnRmKHN0ZGVyciwgIlRFWFQgbW9kZS4uLlxuIik7 CiAKIAkvKgogCSAqIHdlIGRvIGFsbCBvZiB0aGlzIGluIG9uZSB0cmFuc2FjdGlvbiB0byBlbmFi bGUgdGhlIGJhY2tlbmQncwpAQCAtNTEzOCwyNSArNTIyMCwzODQgQEAgaW5pdEdlbmVyYXRlRGF0 YUNsaWVudFNpZGUoUEdjb25uICpjb24pCiAJICogYWxyZWFkeSBleGlzdAogCSAqLwogCWluaXRQ b3B1bGF0ZVRhYmxlKGNvbiwgInBnYmVuY2hfYnJhbmNoZXMiLCBuYnJhbmNoZXMsIGluaXRCcmFu Y2gpOwotCWluaXRQb3B1bGF0ZVRhYmxlKGNvbiwgInBnYmVuY2hfdGVsbGVycyIsIG50ZWxsZXJz LCBpbml0VGVsbGVyKTsKKwlpbml0UG9wdWxhdGVUYWJsZShjb24sICJwZ2JlbmNoX3RlbGxlcnMi LCAgbnRlbGxlcnMsICBpbml0VGVsbGVyKTsKIAlpbml0UG9wdWxhdGVUYWJsZShjb24sICJwZ2Jl bmNoX2FjY291bnRzIiwgbmFjY291bnRzLCBpbml0QWNjb3VudCk7CiAKIAlleGVjdXRlU3RhdGVt ZW50KGNvbiwgImNvbW1pdCIpOwogfQogCisKIC8qCi0gKiBGaWxsIHRoZSBzdGFuZGFyZCB0YWJs ZXMgd2l0aCBzb21lIGRhdGEgZ2VuZXJhdGVkIG9uIHRoZSBzZXJ2ZXIKLSAqCi0gKiBBcyBhbHJl YWR5IHRoZSBjYXNlIHdpdGggdGhlIGNsaWVudC1zaWRlIGRhdGEgZ2VuZXJhdGlvbiwgdGhlIGZp bGxlcgotICogY29sdW1uIGRlZmF1bHRzIHRvIE5VTEwgaW4gcGdiZW5jaF9icmFuY2hlcyBhbmQg cGdiZW5jaF90ZWxsZXJzLAotICogYW5kIGlzIGEgYmxhbmstcGFkZGVkIHN0cmluZyBpbiBwZ2Jl bmNoX2FjY291bnRzLgorICogRHVtcHMgYmluYXJ5IGJ1ZmZlciB0byBmaWxlIChwdXJlbHkgZm9y IGRlYnVnZ2luZykKICAqLwogc3RhdGljIHZvaWQKLWluaXRHZW5lcmF0ZURhdGFTZXJ2ZXJTaWRl KFBHY29ubiAqY29uKQorZHVtcEJ1ZmZlclRvRmlsZShjaGFyICpmaWxlbmFtZSkKK3sKKwlGSUxF ICpmaWxlX3B0cjsKKwlzaXplX3QgYnl0ZXNfd3JpdHRlbjsKKworCWZpbGVfcHRyID0gZm9wZW4o ZmlsZW5hbWUsICJ3YiIpOworCWlmIChmaWxlX3B0ciA9PSBOVUxMKQorCXsKKwkJZnByaW50Zihz dGRlcnIsICJFcnJvciBvcGVuaW5nIGZpbGUgJXNcbiIsIGZpbGVuYW1lKTsKKwkJcmV0dXJuOyAv LyBFWElUX0ZBSUxVUkU7CisJfQorCisJYnl0ZXNfd3JpdHRlbiA9IGZ3cml0ZShiaW5fY29weV9i dWZmZXIsIDEsIGJpbl9jb3B5X2J1ZmZlcl9sZW5ndGgsIGZpbGVfcHRyKTsKKworCWlmIChieXRl c193cml0dGVuICE9IGJpbl9jb3B5X2J1ZmZlcl9sZW5ndGgpCisJeworCQlmcHJpbnRmKHN0ZGVy ciwgIkVycm9yIHdyaXRpbmcgdG8gZmlsZSBvciBpbmNvbXBsZXRlIHdyaXRlXG4iKTsKKwkJZmNs b3NlKGZpbGVfcHRyKTsKKwkJcmV0dXJuOyAvLyBFWElUX0ZBSUxVUkU7CisJfQorCisJZmNsb3Nl KGZpbGVfcHRyKTsKK30KKworLyoKKyAqIFNhdmUgY2hhciBkYXRhIHRvIGJ1ZmZlcgorICovCitz dGF0aWMgdm9pZAorYnVmZmVyQ2hhckRhdGEoY2hhciAqc3JjLCBpbnQzMl90IGxlbikKK3sKKwlt ZW1jcHkoKGNoYXIgKikgYmluX2NvcHlfYnVmZmVyICsgYmluX2NvcHlfYnVmZmVyX2xlbmd0aCwg KGNoYXIgKikgc3JjLCBsZW4pOworCWJpbl9jb3B5X2J1ZmZlcl9sZW5ndGggKz0gbGVuOworfQor CisvKgorICogQ29udmVydHMgcGxhdGZvcm0gYnl0ZSBvcmRlciBpbnRvIG5ldHdvcmsgYnl0ZSBv cmRlcgorICogU1BBUkMgZG9lc24ndCByZXFpcmUgdGhhdAorICovCitzdGF0aWMgdm9pZAorYnVm ZmVyRGF0YSh2b2lkICpzcmMsIGludDMyX3QgbGVuKQoreworI2lmZGVmIF9fc3BhcmNfXworCWJ1 ZmZlckNoYXJEYXRhKHNyYywgbGVuKTsKKyNlbHNlCisJaWYgKGxlbiA9PSAxKQorCQlidWZmZXJD aGFyRGF0YShzcmMsIGxlbik7CisJZWxzZQorCQlmb3IgKGludDMyX3QgaSA9IDA7IGkgPCBsZW47 IGkrKykKKwkJeworCQkJKChjaGFyICopIGJpbl9jb3B5X2J1ZmZlciArIGJpbl9jb3B5X2J1ZmZl cl9sZW5ndGgpW2ldID0KKwkJCQkoKGNoYXIgKikgc3JjKVtsZW4gLSBpIC0gMV07CisJCX0KKwor CWJpbl9jb3B5X2J1ZmZlcl9sZW5ndGggKz0gbGVuOworI2VuZGlmCit9CisKKy8qCisgKiBhZGRz IGNvbHVtbiBjb3VudGVyCisgKi8KK3N0YXRpYyB2b2lkCithZGRDb2x1bW5Db3VudGVyKGludDE2 X3QgbikKK3sKKwlidWZmZXJEYXRhKCh2b2lkICopICZuLCBzaXplb2YobikpOworfQorCisvKgor ICogYWRkcyBjb2x1bW4gd2l0aCBOVUxMIHZhbHVlCisgKi8KK3N0YXRpYyB2b2lkCithZGROdWxs Q29sdW1uKCkKK3sKKwlpbnQzMl90IG51bGwgPSAtMTsKKwlidWZmZXJEYXRhKCh2b2lkICopICZu dWxsLCBzaXplb2YobnVsbCkpOworfQorCisvKgorICogYWRkcyBjb2x1bW4gd2l0aCBpbnQ4IHZh bHVlCisgKi8KK3N0YXRpYyB2b2lkCithZGRJbnQ4Q29sdW1uKGludDhfdCB2YWx1ZSkKK3sKKwlp bnQ4X3QJZGF0YSA9IHZhbHVlOworCWludDMyX3QJc2l6ZSA9IHNpemVvZihkYXRhKTsKKwlidWZm ZXJEYXRhKCh2b2lkICopICZzaXplLCBzaXplb2Yoc2l6ZSkpOworCWJ1ZmZlckRhdGEoKHZvaWQg KikgJmRhdGEsIHNpemVvZihkYXRhKSk7Cit9CisKKy8qCisgKiBhZGRzIGNvbHVtbiB3aXRoIGlu dDE2IHZhbHVlCisgKi8KK3N0YXRpYyB2b2lkCithZGRJbnQxNkNvbHVtbihpbnQxNl90IHZhbHVl KQoreworCWludDE2X3QJZGF0YSA9IHZhbHVlOworCWludDMyX3QJc2l6ZSA9IHNpemVvZihkYXRh KTsKKwlidWZmZXJEYXRhKCh2b2lkICopICZzaXplLCBzaXplb2Yoc2l6ZSkpOworCWJ1ZmZlckRh dGEoKHZvaWQgKikgJmRhdGEsIHNpemVvZihkYXRhKSk7Cit9CisKKy8qCisgKiBhZGRzIGNvbHVt biB3aXRoIGludGkzMiB2YWx1ZQorICovCitzdGF0aWMgdm9pZAorYWRkSW50MzJDb2x1bW4oaW50 MzJfdCB2YWx1ZSkKK3sKKwlpbnQzMl90CWRhdGEgPSB2YWx1ZTsKKwlpbnQzMl90CXNpemUgPSBz aXplb2YoZGF0YSk7CisJYnVmZmVyRGF0YSgodm9pZCAqKSAmc2l6ZSwgc2l6ZW9mKHNpemUpKTsK KwlidWZmZXJEYXRhKCh2b2lkICopICZkYXRhLCBzaXplb2YoZGF0YSkpOworfQorCisvKgorICog YWRkcyBjb2x1bW4gd2l0aCBpbnRpNjQgdmFsdWUKKyAqLworc3RhdGljIHZvaWQKK2FkZEludDY0 Q29sdW1uKGludDY0X3QgdmFsdWUpCit7CisJaW50NjRfdAlkYXRhID0gdmFsdWU7CisJaW50MzJf dAlzaXplID0gc2l6ZW9mKGRhdGEpOworCWJ1ZmZlckRhdGEoKHZvaWQgKikgJnNpemUsIHNpemVv ZihzaXplKSk7CisJYnVmZmVyRGF0YSgodm9pZCAqKSAmZGF0YSwgc2l6ZW9mKGRhdGEpKTsKK30K KworLyoKKyAqIGFkZHMgY29sdW1uIHdpdGggY2hhciB2YWx1ZQorICovCitzdGF0aWMgdm9pZAor YWRkQ2hhckNvbHVtbihjaGFyICp2YWx1ZSkKK3sKKwlpbnQzMl90CXNpemUgPSBzdHJsZW4odmFs dWUpOworCWJ1ZmZlckRhdGEoKHZvaWQgKikgJnNpemUsIHNpemVvZihzaXplKSk7CisJYnVmZmVy Q2hhckRhdGEodmFsdWUsIHNpemUpOworfQorCisvKgorICogU3RhcnRzIGNvbW11bmljYXRpb24g d2l0aCBzZXJ2ZXIgZm9yIENPUFkgRlJPTSBCSU5BUlkgc3RhdGVtZW50CisgKi8KK3N0YXRpYyB2 b2lkCitzZW5kQmluYXJ5Q29weUhlYWRlcihQR2Nvbm4gKmNvbikKK3sKKwljaGFyIGhlYWRlcltd ID0geydQJywnRycsJ0MnLCdPJywnUCcsJ1knLCdcbicsJ1wzNzcnLCdccicsJ1xuJywnXDAnLAor CQkJCQkgJ1wwJywnXDAnLCdcMCcsJ1wwJywKKwkJCQkJICdcMCcsJ1wwJywnXDAnLCdcMCcgfTsK KworCVBRcHV0Q29weURhdGEoY29uLCBoZWFkZXIsIDE5KTsKK30KKworLyoKKyAqIEZpbmlzaGVz IGNvbW11bmljYXRpb24gd2l0aCBzZXJ2ZXIgZm9yIENPUFkgRlJPTSBCSU5BUlkgc3RhdGVtZW50 CisgKi8KK3N0YXRpYyB2b2lkCitzZW5kQmluYXJ5Q29weVRyYWlsZXIoUEdjb25uICpjb24pCit7 CisJc3RhdGljIGNoYXIgdHJhaWxlcltdID0geyAweEZGLCAweEZGIH07CisKKwlQUXB1dENvcHlE YXRhKGNvbiwgdHJhaWxlciwgMik7Cit9CisKKy8qCisgKiBGbGFzaGVzIGN1cnJlbnQgYnVmZmVy IG92ZXIgbmV0d29yayBpZiBuZWVkZWQKKyAqLworc3RhdGljIHZvaWQKK2ZsdXNoQnVmZmVyKFBH Y29ubiAqY29uLCBQR3Jlc3VsdCAqcmVzLCBpbnQxNl90IHJvd19sZW4pCit7CisJaWYgKGJpbl9j b3B5X2J1ZmZlcl9sZW5ndGggKyByb3dfbGVuID4gQklOX0NPUFlfQlVGX1NJWkUpCisJeworCQkv KiBmbHVzaCBjdXJyZW50IGJ1ZmZlciAqLworCQlpZiAoUFFyZXN1bHRTdGF0dXMocmVzKSA9PSBQ R1JFU19DT1BZX0lOKQorCQkJUFFwdXRDb3B5RGF0YShjb24sIChjaGFyICopIGJpbl9jb3B5X2J1 ZmZlciwgYmluX2NvcHlfYnVmZmVyX2xlbmd0aCk7CisJCWJpbl9jb3B5X2J1ZmZlcl9sZW5ndGgg PSAwOworCX0KK30KKworLyoKKyAqIFNlbmRzIGN1cnJlbnQgYnJhbmNoIHJvdyB0byBidWZmZXIK KyAqLworc3RhdGljIHZvaWQKK2luaXRCcmFuY2hCaW5hcnkoUEdjb25uICpjb24sIFBHcmVzdWx0 ICpyZXMsIGludDY0X3QgY3VyciwgaW50MzJfdCBwYXJlbnQpCit7CisJLyoKKwkgKiBFYWNoIHJv dyBoYXMgZm9sbG93aW5nIGV4dHJhIGJ5dGVzOgorCSAqIC0gMiBieXRlcyBmb3IgbnVtYmVyIG9m IGNvbHVtbnMKKwkgKiAtIDQgYnl0ZXMgYXMgbGVuZ3RoIGZvciBlYWNoIGNvbHVtbgorCSAqLwor CWludDE2X3QJbWF4X3Jvd19sZW4gPSAgMzUgKyAyICsgNCozOyAvKiBtYXggcm93IHNpemUgaXMg MzIgKi8KKworCWZsdXNoQnVmZmVyKGNvbiwgcmVzLCBtYXhfcm93X2xlbik7CisKKwlhZGRDb2x1 bW5Db3VudGVyKDIpOworCisJYWRkSW50MzJDb2x1bW4oY3VyciArIDEpOworCWFkZEludDMyQ29s dW1uKDApOworfQorCisvKgorICogU2VuZHMgY3VycmVudCB0ZWxsZXIgcm93IHRvIGJ1ZmZlcgor ICovCitzdGF0aWMgdm9pZAoraW5pdFRlbGxlckJpbmFyeShQR2Nvbm4gKmNvbiwgUEdyZXN1bHQg KnJlcywgaW50NjRfdCBjdXJyLCBpbnQzMl90IHBhcmVudCkKK3sKKwkvKgorCSAqIEVhY2ggcm93 IGhhcyBmb2xsb3dpbmcgZXh0cmEgYnl0ZXM6CisJICogLSAyIGJ5dGVzIGZvciBudW1iZXIgb2Yg Y29sdW1ucworCSAqIC0gNCBieXRlcyBhcyBsZW5ndGggZm9yIGVhY2ggY29sdW1uCisJICovCisJ aW50MTZfdAltYXhfcm93X2xlbiA9ICA0MCArIDIgKyA0KjQ7IC8qIG1heCByb3cgc2l6ZSBpcyA0 MCAqLworCisJZmx1c2hCdWZmZXIoY29uLCByZXMsIG1heF9yb3dfbGVuKTsKKworCWFkZENvbHVt bkNvdW50ZXIoMyk7CisKKwlhZGRJbnQzMkNvbHVtbihjdXJyICsgMSk7CisJYWRkSW50MzJDb2x1 bW4oY3VyciAvIHBhcmVudCArIDEpOworCWFkZEludDMyQ29sdW1uKDApOworfQorCisvKgorICog U2VuZHMgY3VycmVudCBhY2NvdW50IHJvdyB0byBidWZmZXIKKyAqLworc3RhdGljIHZvaWQKK2lu aXRBY2NvdW50QmluYXJ5KFBHY29ubiAqY29uLCBQR3Jlc3VsdCAqcmVzLCBpbnQ2NF90IGN1cnIs IGludDMyX3QgcGFyZW50KQoreworCS8qCisJICogRWFjaCByb3cgaGFzIGZvbGxvd2luZyBleHRy YSBieXRlczoKKwkgKiAtIDIgYnl0ZXMgZm9yIG51bWJlciBvZiBjb2x1bW5zCisJICogLSA0IGJ5 dGVzIGFzIGxlbmd0aCBmb3IgZWFjaCBjb2x1bW4KKwkgKi8KKwlpbnQxNl90CW1heF9yb3dfbGVu ID0gMjUwICsgMiArIDQqNDsgLyogbWF4IHJvdyBzaXplIGlzIDI1MCBmb3IgaW50NjQgKi8KKwor CWZsdXNoQnVmZmVyKGNvbiwgcmVzLCBtYXhfcm93X2xlbik7CisKKwlhZGRDb2x1bW5Db3VudGVy KDMpOworCisJaWYgKHNjYWxlIDw9IFNDQUxFXzMyQklUX1RIUkVTSE9MRCkKKwkJYWRkSW50MzJD b2x1bW4oY3VyciArIDEpOworCWVsc2UKKwkJYWRkSW50NjRDb2x1bW4oY3Vycik7CisKKwlhZGRJ bnQzMkNvbHVtbihjdXJyIC8gcGFyZW50ICsgMSk7CisJYWRkSW50MzJDb2x1bW4oMCk7Cit9CisK Ky8qCisgKiBVbml2ZXJzYWwgd3JhcHBlciBmb3Igc2VuZGluZyBkYXRhIGluIGJpbmFyeSBmb3Jt YXQKKyAqLworc3RhdGljIHZvaWQKK2luaXRQb3B1bGF0ZVRhYmxlQmluYXJ5KFBHY29ubiAqY29u LCBjaGFyICp0YWJsZSwgY2hhciAqY29sdW1ucywKKwkJCQkJCWludDY0X3QgYmFzZSwgaW5pdFJv d01ldGhvZEJpbiBpbml0X3JvdykKK3sKKwlpbnQJCQkgbjsKKwlQR3Jlc3VsdAkqcmVzOworCWNo YXIJCSBjb3B5X3N0YXRlbWVudFsyNTZdOworCWNvbnN0IGNoYXIJKmNvcHlfc3RhdGVtZW50X2Zt dCA9ICJjb3B5ICVzICglcykgZnJvbSBzdGRpbiAoZm9ybWF0IGJpbmFyeSkiOworCWludDY0X3QJ CSB0b3RhbCA9IGJhc2UgKiBzY2FsZTsKKworCWJpbl9jb3B5X2J1ZmZlcl9sZW5ndGggPSAwOwor CisJLyogVXNlIENPUFkgd2l0aCBGUkVFWkUgb24gdjE0IGFuZCBsYXRlciBmb3IgYWxsIG9yZGlu YXJ5IHRhYmxlcyAqLworCWlmICgoUFFzZXJ2ZXJWZXJzaW9uKGNvbikgPj0gMTQwMDAwKSAmJgor CQlnZXRfdGFibGVfcmVsa2luZChjb24sIHRhYmxlKSA9PSBSRUxLSU5EX1JFTEFUSU9OKQorCQlj b3B5X3N0YXRlbWVudF9mbXQgPSAiY29weSAlcyAoJXMpIGZyb20gc3RkaW4gd2l0aCAoZm9ybWF0 IGJpbmFyeSwgZnJlZXplIG9uKSI7CisKKwluID0gcGdfc25wcmludGYoY29weV9zdGF0ZW1lbnQs IHNpemVvZihjb3B5X3N0YXRlbWVudCksIGNvcHlfc3RhdGVtZW50X2ZtdCwgdGFibGUsIGNvbHVt bnMpOworCWlmIChuID49IHNpemVvZihjb3B5X3N0YXRlbWVudCkpCisJCXBnX2ZhdGFsKCJpbnZh bGlkIGJ1ZmZlciBzaXplOiBtdXN0IGJlIGF0IGxlYXN0ICVkIGNoYXJhY3RlcnMgbG9uZyIsIG4p OworCWVsc2UgaWYgKG4gPT0gLTEpCisJCXBnX2ZhdGFsKCJpbnZhbGlkIGZvcm1hdCBzdHJpbmci KTsKKworCXJlcyA9IFBRZXhlYyhjb24sIGNvcHlfc3RhdGVtZW50KTsKKworCWlmIChQUXJlc3Vs dFN0YXR1cyhyZXMpICE9IFBHUkVTX0NPUFlfSU4pCisJCXBnX2ZhdGFsKCJ1bmV4cGVjdGVkIGNv cHkgaW4gcmVzdWx0OiAlcyIsIFBRZXJyb3JNZXNzYWdlKGNvbikpOworCVBRY2xlYXIocmVzKTsK KworCisJc2VuZEJpbmFyeUNvcHlIZWFkZXIoY29uKTsKKworCWZvciAoaW50NjRfdCBpID0gMDsg aSA8IHRvdGFsOyBpKyspCisJeworCQlpbml0X3Jvdyhjb24sIHJlcywgaSwgYmFzZSk7CisJfQor CisJaWYgKFBRcmVzdWx0U3RhdHVzKHJlcykgPT0gUEdSRVNfQ09QWV9JTikKKwkJUFFwdXRDb3B5 RGF0YShjb24sIChjaGFyICopIGJpbl9jb3B5X2J1ZmZlciwgYmluX2NvcHlfYnVmZmVyX2xlbmd0 aCk7CisJZWxzZQorCQlmcHJpbnRmKHN0ZGVyciwgIlVuZXhwZWN0ZWQgbW9kZSAlZCBpbnN0ZWFk IG9mICVkXG4iLCBQUXJlc3VsdFN0YXR1cyhyZXMpLCBQR1JFU19DT1BZX0lOKTsKKworCXNlbmRC aW5hcnlDb3B5VHJhaWxlcihjb24pOworCisJaWYgKFBRcmVzdWx0U3RhdHVzKHJlcykgPT0gUEdS RVNfQ09QWV9JTikKKwl7CisJCWlmIChQUXB1dENvcHlFbmQoY29uLCBOVUxMKSA9PSAxKSAvKiBz dWNjZXNzICovCisJCXsKKwkJCXJlcyA9IFBRZ2V0UmVzdWx0KGNvbik7CisJCQlpZiAoUFFyZXN1 bHRTdGF0dXMocmVzKSAhPSBQR1JFU19DT01NQU5EX09LKQorCQkJCWZwcmludGYoc3RkZXJyLCAi RXJyb3I6ICVzXG4iLCBQUWVycm9yTWVzc2FnZShjb24pKTsKKwkJCVBRY2xlYXIocmVzKTsKKwkJ fQorCQllbHNlCisJCQlmcHJpbnRmKHN0ZGVyciwgIkVycm9yOiAlc1xuIiwgUFFlcnJvck1lc3Nh Z2UoY29uKSk7CisJfQorfQorCisvKgorICogV3JhcHBlciBmb3IgYmluYXJ5IGRhdGEgbG9hZAor ICovCitzdGF0aWMgdm9pZAoraW5pdEdlbmVyYXRlRGF0YUNsaWVudFNpZGVCaW5hcnkoUEdjb25u ICpjb24pCit7CisKKwlmcHJpbnRmKHN0ZGVyciwgIkJJTkFSWSBtb2RlLi4uXG4iKTsKKworCWJp bl9jb3B5X2J1ZmZlciA9IHBnX21hbGxvYyhCSU5fQ09QWV9CVUZfU0laRSk7CisJYmluX2NvcHlf YnVmZmVyX2xlbmd0aCA9IDA7CisKKwkvKgorCSAqIHdlIGRvIGFsbCBvZiB0aGlzIGluIG9uZSB0 cmFuc2FjdGlvbiB0byBlbmFibGUgdGhlIGJhY2tlbmQncworCSAqIGRhdGEtbG9hZGluZyBvcHRp bWl6YXRpb25zCisJICovCisJZXhlY3V0ZVN0YXRlbWVudChjb24sICJiZWdpbiIpOworCisJLyog dHJ1bmNhdGUgYXdheSBhbnkgb2xkIGRhdGEgKi8KKwlpbml0VHJ1bmNhdGVUYWJsZXMoY29uKTsK KworCWluaXRQb3B1bGF0ZVRhYmxlQmluYXJ5KGNvbiwgInBnYmVuY2hfYnJhbmNoZXMiLCAiYmlk LCBiYmFsYW5jZSIsCisJCQkJCQkJbmJyYW5jaGVzLCBpbml0QnJhbmNoQmluYXJ5KTsKKwlpbml0 UG9wdWxhdGVUYWJsZUJpbmFyeShjb24sICJwZ2JlbmNoX3RlbGxlcnMiLCAgInRpZCwgYmlkLCB0 YmFsYW5jZSIsCisJCQkJCQkJbnRlbGxlcnMsICBpbml0VGVsbGVyQmluYXJ5KTsKKwlpbml0UG9w dWxhdGVUYWJsZUJpbmFyeShjb24sICJwZ2JlbmNoX2FjY291bnRzIiwgImFpZCwgYmlkLCBhYmFs YW5jZSIsCisJCQkJCQkJbmFjY291bnRzLCBpbml0QWNjb3VudEJpbmFyeSk7CisKKwlleGVjdXRl U3RhdGVtZW50KGNvbiwgImNvbW1pdCIpOworCisJcGdfZnJlZShiaW5fY29weV9idWZmZXIpOwor fQorCisvKgorICogRmlsbCB0aGUgc3RhbmRhcmQgdGFibGVzIHdpdGggc29tZSBkYXRhIGdlbmVy YXRlZCBhbmQgc2VudCBmcm9tIHRoZSBjbGllbnQuCisgKi8KK3N0YXRpYyB2b2lkCitpbml0R2Vu ZXJhdGVEYXRhQ2xpZW50U2lkZShQR2Nvbm4gKmNvbikKK3sKKwlmcHJpbnRmKHN0ZGVyciwgImdl bmVyYXRpbmcgZGF0YSAoY2xpZW50LXNpZGUpIGluICIpOworCisJc3dpdGNoIChkYXRhX2dlbmVy YXRpb25fdHlwZSkKKwl7CisJCWNhc2UgR0VOX1RZUEVfQ09QWV9PUklHSU5BTDoKKwkJCWluaXRH ZW5lcmF0ZURhdGFDbGllbnRTaWRlVGV4dChjb24pOworCQkJYnJlYWs7CisJCWNhc2UgR0VOX1RZ UEVfQ09QWV9CSU5BUlk6CisJCQlpbml0R2VuZXJhdGVEYXRhQ2xpZW50U2lkZUJpbmFyeShjb24p OworCQkJYnJlYWs7CisJfQorfQorCisvKgorICogR2VuZXJhdGluZyBkYXRhIHZpYSBJTlNFUlQg Li4gU0VMRUNUIC4uIEZST00gZ2VuZXJhdGVfc2VyaWVzCisgKiB3aG9sZSBkYXRhc2V0IGluIHNp bmdsZSB0cmFuc2FjdGlvbgorICovCitzdGF0aWMgdm9pZAorZ2VuZXJhdGVEYXRhSW5zZXJ0U2lu Z2xlVFhOKFBHY29ubiAqY29uKQogewogCVBRRXhwQnVmZmVyRGF0YSBzcWw7CiAKLQlmcHJpbnRm KHN0ZGVyciwgImdlbmVyYXRpbmcgZGF0YSAoc2VydmVyLXNpZGUpLi4uXG4iKTsKKwlmcHJpbnRm KHN0ZGVyciwgInZpYSBJTlNFUlQgLi4gU0VMRUNUIGdlbmVyYXRlX3Nlcmllcy4uLiBpbiBzaW5n bGUgVFhOXG4iKTsKKwogCiAJLyoKIAkgKiB3ZSBkbyBhbGwgb2YgdGhpcyBpbiBvbmUgdHJhbnNh Y3Rpb24gdG8gZW5hYmxlIHRoZSBiYWNrZW5kJ3MKQEAgLTUxNzAsMjcgKzU2MTEsMTY2IEBAIGlu aXRHZW5lcmF0ZURhdGFTZXJ2ZXJTaWRlKFBHY29ubiAqY29uKQogCWluaXRQUUV4cEJ1ZmZlcigm c3FsKTsKIAogCXByaW50ZlBRRXhwQnVmZmVyKCZzcWwsCi0JCQkJCSAgImluc2VydCBpbnRvIHBn YmVuY2hfYnJhbmNoZXMoYmlkLGJiYWxhbmNlKSAiCisJCQkJCSAgImluc2VydCBpbnRvIHBnYmVu Y2hfYnJhbmNoZXMoYmlkLCBiYmFsYW5jZSkgIgogCQkJCQkgICJzZWxlY3QgYmlkLCAwICIKLQkJ CQkJICAiZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMSwgJWQpIGFzIGJpZCIsIG5icmFuY2hlcyAqIHNj YWxlKTsKKwkJCQkJICAiZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMSwgJWQpIGFzIGJpZCIsCisJCQkJ CSAgc2NhbGUgKiBuYnJhbmNoZXMpOwogCWV4ZWN1dGVTdGF0ZW1lbnQoY29uLCBzcWwuZGF0YSk7 CiAKIAlwcmludGZQUUV4cEJ1ZmZlcigmc3FsLAotCQkJCQkgICJpbnNlcnQgaW50byBwZ2JlbmNo X3RlbGxlcnModGlkLGJpZCx0YmFsYW5jZSkgIgotCQkJCQkgICJzZWxlY3QgdGlkLCAodGlkIC0g MSkgLyAlZCArIDEsIDAgIgotCQkJCQkgICJmcm9tIGdlbmVyYXRlX3NlcmllcygxLCAlZCkgYXMg dGlkIiwgbnRlbGxlcnMsIG50ZWxsZXJzICogc2NhbGUpOworCQkJCQkgICJpbnNlcnQgaW50byBw Z2JlbmNoX3RlbGxlcnModGlkLCBiaWQsIHRiYWxhbmNlKSAiCisJCQkJCSAgInNlbGVjdCB0aWQg KyAxLCB0aWQgLyAlZCArIDEsIDAgIgorCQkJCQkgICJmcm9tIGdlbmVyYXRlX3NlcmllcygwLCAl ZCkgYXMgdGlkIiwKKwkJCQkJICBudGVsbGVycywgKHNjYWxlICogbnRlbGxlcnMpIC0gMSk7CiAJ ZXhlY3V0ZVN0YXRlbWVudChjb24sIHNxbC5kYXRhKTsKIAogCXByaW50ZlBRRXhwQnVmZmVyKCZz cWwsCi0JCQkJCSAgImluc2VydCBpbnRvIHBnYmVuY2hfYWNjb3VudHMoYWlkLGJpZCxhYmFsYW5j ZSxmaWxsZXIpICIKLQkJCQkJICAic2VsZWN0IGFpZCwgKGFpZCAtIDEpIC8gJWQgKyAxLCAwLCAn JyAiCi0JCQkJCSAgImZyb20gZ2VuZXJhdGVfc2VyaWVzKDEsICIgSU5UNjRfRk9STUFUICIpIGFz IGFpZCIsCi0JCQkJCSAgbmFjY291bnRzLCAoaW50NjQpIG5hY2NvdW50cyAqIHNjYWxlKTsKKwkJ CQkJICAiaW5zZXJ0IGludG8gcGdiZW5jaF9hY2NvdW50cyhhaWQsIGJpZCwgYWJhbGFuY2UsICIK KwkJCQkJCQkJICAgImZpbGxlcikgIgorCQkJCQkgICJzZWxlY3QgYWlkICsgMSwgYWlkIC8gJWQg KyAxLCAwLCAnJyAiCisJCQkJCSAgImZyb20gZ2VuZXJhdGVfc2VyaWVzKDAsICIgSU5UNjRfRk9S TUFUICIpIGFzIGFpZCIsCisJCQkJCSAgbmFjY291bnRzLCAoaW50NjQpIChzY2FsZSAqIG5hY2Nv dW50cykgLSAxKTsKIAlleGVjdXRlU3RhdGVtZW50KGNvbiwgc3FsLmRhdGEpOwogCisJZXhlY3V0 ZVN0YXRlbWVudChjb24sICJjb21taXQiKTsKKwogCXRlcm1QUUV4cEJ1ZmZlcigmc3FsKTsKK30K KworCisvKgorICogR2VuZXJhdGluZyBkYXRhIHZpYSBJTlNFUlQgLi4gU0VMRUNUIC4uIEZST00g Z2VuZXJhdGVfc2VyaWVzCisgKiBPbmUgdHJhbnNhY3Rpb24gcGVyICdzY2FsZScKKyAqLworc3Rh dGljIHZvaWQKK2dlbmVyYXRlRGF0YUluc2VydFNlcmllcyhQR2Nvbm4gKmNvbikKK3sKKwlQUUV4 cEJ1ZmZlckRhdGEgc3FsOworCisJZnByaW50ZihzdGRlcnIsICJ2aWEgSU5TRVJUIC4uIFNFTEVD VCBnZW5lcmF0ZV9zZXJpZXMuLi4gaW4gbXVsdGlwbGUgVFhOKHMpXG4iKTsKKworCWluaXRQUUV4 cEJ1ZmZlcigmc3FsKTsKKworCWV4ZWN1dGVTdGF0ZW1lbnQoY29uLCAiYmVnaW4iKTsKKworCS8q IHRydW5jYXRlIGF3YXkgYW55IG9sZCBkYXRhICovCisJaW5pdFRydW5jYXRlVGFibGVzKGNvbik7 CisKKwlleGVjdXRlU3RhdGVtZW50KGNvbiwgImNvbW1pdCIpOworCisJZm9yIChpbnQgaSA9IDA7 IGkgPCBzY2FsZTsgaSsrKQorCXsKKwkJZXhlY3V0ZVN0YXRlbWVudChjb24sICJiZWdpbiIpOwor CisJCXByaW50ZlBRRXhwQnVmZmVyKCZzcWwsCisJCQkJCQkgICJpbnNlcnQgaW50byBwZ2JlbmNo X2JyYW5jaGVzKGJpZCwgYmJhbGFuY2UpICIKKwkJCQkJCSAgInZhbHVlcyglZCwgMCkiLCBpICsg MSk7CisJCWV4ZWN1dGVTdGF0ZW1lbnQoY29uLCBzcWwuZGF0YSk7CisKKwkJcHJpbnRmUFFFeHBC dWZmZXIoJnNxbCwKKwkJCQkJCSAgImluc2VydCBpbnRvIHBnYmVuY2hfdGVsbGVycyh0aWQsIGJp ZCwgdGJhbGFuY2UpICIKKwkJCQkJCSAgInNlbGVjdCB0aWQgKyAxLCB0aWQgLyAlZCArIDEsIDAg IgorCQkJCQkJICAiZnJvbSBnZW5lcmF0ZV9zZXJpZXMoJWQsICVkKSBhcyB0aWQiLAorCQkJCQkJ ICBudGVsbGVycywgaSAqIG50ZWxsZXJzLCAoaSArIDEpICogbnRlbGxlcnMgLSAxKTsKKwkJZXhl Y3V0ZVN0YXRlbWVudChjb24sIHNxbC5kYXRhKTsKKworCQlwcmludGZQUUV4cEJ1ZmZlcigmc3Fs LAorCQkJCQkJICAiaW5zZXJ0IGludG8gcGdiZW5jaF9hY2NvdW50cyhhaWQsIGJpZCwgYWJhbGFu Y2UsICIKKwkJCQkJCQkJCSAgICJmaWxsZXIpICIKKwkJCQkJCSAgInNlbGVjdCBhaWQgKyAxLCBh aWQgLyAlZCArIDEsIDAsICcnICIKKwkJCQkJCSAgImZyb20gZ2VuZXJhdGVfc2VyaWVzKCIgSU5U NjRfRk9STUFUICIsICIKKwkJCQkJCQkJSU5UNjRfRk9STUFUICIpIGFzIGFpZCIsCisJCQkJCQkg IG5hY2NvdW50cywgKGludDY0KSBpICogbmFjY291bnRzLAorCQkJCQkJICAoaW50NjQpIChpICsg MSkgKiBuYWNjb3VudHMgLSAxKTsKKwkJZXhlY3V0ZVN0YXRlbWVudChjb24sIHNxbC5kYXRhKTsK KworCQlleGVjdXRlU3RhdGVtZW50KGNvbiwgImNvbW1pdCIpOworCX0KKworCXRlcm1QUUV4cEJ1 ZmZlcigmc3FsKTsKK30KKworLyoKKyAqIEdlbmVyYXRpbmcgZGF0YSB2aWEgSU5TRVJUIC4uIFNF TEVDVCAuLiBGUk9NIHVubmVzdAorICogT25lIHRyYW5zYWN0aW9uIHBlciAnc2NhbGUnCisgKi8K K3N0YXRpYyB2b2lkCitnZW5lcmF0ZURhdGFJbnNlcnRVbm5lc3QoUEdjb25uICpjb24pCit7CisJ UFFFeHBCdWZmZXJEYXRhIHNxbDsKKworCWZwcmludGYoc3RkZXJyLCAidmlhIElOU0VSVCAuLiBT RUxFQ1QgdW5uZXN0Li4uXG4iKTsKKworCWluaXRQUUV4cEJ1ZmZlcigmc3FsKTsKKworCWV4ZWN1 dGVTdGF0ZW1lbnQoY29uLCAiYmVnaW4iKTsKKworCS8qIHRydW5jYXRlIGF3YXkgYW55IG9sZCBk YXRhICovCisJaW5pdFRydW5jYXRlVGFibGVzKGNvbik7CiAKIAlleGVjdXRlU3RhdGVtZW50KGNv biwgImNvbW1pdCIpOworCisJZm9yIChpbnQgcyA9IDA7IHMgPCBzY2FsZTsgcysrKQorCXsKKwkJ ZXhlY3V0ZVN0YXRlbWVudChjb24sICJiZWdpbiIpOworCisJCXByaW50ZlBRRXhwQnVmZmVyKCZz cWwsCisJCQkJCQkgICJpbnNlcnQgaW50byBwZ2JlbmNoX2JyYW5jaGVzKGJpZCxiYmFsYW5jZSkg IgorCQkJCQkJICAidmFsdWVzKCVkLCAwKSIsIHMgKyAxKTsKKwkJZXhlY3V0ZVN0YXRlbWVudChj b24sIHNxbC5kYXRhKTsKKworCQlwcmludGZQUUV4cEJ1ZmZlcigmc3FsLAorCQkJCQkJICAiaW5z ZXJ0IGludG8gcGdiZW5jaF90ZWxsZXJzKHRpZCwgYmlkLCB0YmFsYW5jZSkgIgorCQkJCQkJICAi c2VsZWN0IHVubmVzdChhcnJheV9hZ2cocy5pIG9yZGVyIGJ5IHMuaSkpIGFzIHRpZCwgIgorCQkJ CQkJCQkgICIlZCBhcyBiaWQsIDAgYXMgdGJhbGFuY2UgIgorCQkJCQkJICAiZnJvbSBnZW5lcmF0 ZV9zZXJpZXMoJWQsICVkKSBhcyBzKGkpIiwKKwkJCQkJCSAgcyArIDEsIHMgKiBudGVsbGVycyAr IDEsIChzICsgMSkgKiBudGVsbGVycyk7CisJCWV4ZWN1dGVTdGF0ZW1lbnQoY29uLCBzcWwuZGF0 YSk7CisKKwkJcHJpbnRmUFFFeHBCdWZmZXIoJnNxbCwKKwkJCQkJCSAgIndpdGggZGF0YSBhcyAo IgorCQkJCQkJICAiICAgc2VsZWN0IGdlbmVyYXRlX3NlcmllcygiIElOVDY0X0ZPUk1BVCAiLCAi CisJCQkJCQkJICBJTlQ2NF9GT1JNQVQgIikgYXMgaSkgIgorCQkJCQkJICAiaW5zZXJ0IGludG8g cGdiZW5jaF9hY2NvdW50cyhhaWQsIGJpZCwgIgorCQkJCQkJCQkJICAiYWJhbGFuY2UsIGZpbGxl cikgIgorCQkJCQkJICAic2VsZWN0IHVubmVzdChhaWQpLCB1bm5lc3QoYmlkKSwgMCBhcyBhYmFs YW5jZSwgIgorCQkJCQkJCQkgICInJyBhcyBmaWxsZXIgIgorCQkJCQkJICAiZnJvbSAoc2VsZWN0 IGFycmF5X2FnZyhpKzEpIGFpZCwgIgorCQkJCQkJCQkJICAgImFycmF5X2FnZyhpLyVkICsgMSkg YmlkIGZyb20gZGF0YSkiLAorCQkJCQkJICAoaW50NjQpIHMgKiBuYWNjb3VudHMgKyAxLAorCQkJ CQkJICAoaW50NjQpIChzICsgMSkgKiBuYWNjb3VudHMsIG5hY2NvdW50cyk7CisJCWV4ZWN1dGVT dGF0ZW1lbnQoY29uLCBzcWwuZGF0YSk7CisKKwkJZXhlY3V0ZVN0YXRlbWVudChjb24sICJjb21t aXQiKTsKKwl9CisKKwl0ZXJtUFFFeHBCdWZmZXIoJnNxbCk7Cit9CisKKy8qCisgKiBGaWxsIHRo ZSBzdGFuZGFyZCB0YWJsZXMgd2l0aCBzb21lIGRhdGEgZ2VuZXJhdGVkIG9uIHRoZSBzZXJ2ZXIK KyAqCisgKiBBcyBhbHJlYWR5IHRoZSBjYXNlIHdpdGggdGhlIGNsaWVudC1zaWRlIGRhdGEgZ2Vu ZXJhdGlvbiwgdGhlIGZpbGxlcgorICogY29sdW1uIGRlZmF1bHRzIHRvIE5VTEwgaW4gcGdiZW5j aF9icmFuY2hlcyBhbmQgcGdiZW5jaF90ZWxsZXJzLAorICogYW5kIGlzIGEgYmxhbmstcGFkZGVk IHN0cmluZyBpbiBwZ2JlbmNoX2FjY291bnRzLgorICovCitzdGF0aWMgdm9pZAoraW5pdEdlbmVy YXRlRGF0YVNlcnZlclNpZGUoUEdjb25uICpjb24pCit7CisJZnByaW50ZihzdGRlcnIsICJnZW5l cmF0aW5nIGRhdGEgKHNlcnZlci1zaWRlKSAiKTsKKworCXN3aXRjaCAoZGF0YV9nZW5lcmF0aW9u X3R5cGUpCisJeworCQljYXNlIEdFTl9UWVBFX0lOU0VSVF9PUklHSU5BTDoKKwkJCWdlbmVyYXRl RGF0YUluc2VydFNpbmdsZVRYTihjb24pOworCQkJYnJlYWs7CisJCWNhc2UgR0VOX1RZUEVfSU5T RVJUX1NFUklFUzoKKwkJCWdlbmVyYXRlRGF0YUluc2VydFNlcmllcyhjb24pOworCQkJYnJlYWs7 CisJCWNhc2UgR0VOX1RZUEVfSU5TRVJUX1VOTkVTVDoKKwkJCWdlbmVyYXRlRGF0YUluc2VydFVu bmVzdChjb24pOworCQkJYnJlYWs7CisJfQogfQogCiAvKgpAQCAtNTI3Niw2ICs1ODU2LDggQEAg aW5pdENyZWF0ZUZLZXlzKFBHY29ubiAqY29uKQogc3RhdGljIHZvaWQKIGNoZWNrSW5pdFN0ZXBz KGNvbnN0IGNoYXIgKmluaXRpYWxpemVfc3RlcHMpCiB7CisJY2hhcglkYXRhX2luaXRfdHlwZSA9 IDA7CisKIAlpZiAoaW5pdGlhbGl6ZV9zdGVwc1swXSA9PSAnXDAnKQogCQlwZ19mYXRhbCgibm8g aW5pdGlhbGl6YXRpb24gc3RlcHMgc3BlY2lmaWVkIik7CiAKQEAgLTUyODcsNyArNTg2OSwyMiBA QCBjaGVja0luaXRTdGVwcyhjb25zdCBjaGFyICppbml0aWFsaXplX3N0ZXBzKQogCQkJcGdfbG9n X2Vycm9yX2RldGFpbCgiQWxsb3dlZCBzdGVwIGNoYXJhY3RlcnMgYXJlOiBcIiIgQUxMX0lOSVRf U1RFUFMgIlwiLiIpOwogCQkJZXhpdCgxKTsKIAkJfQorCisJCXN3aXRjaCAoKnN0ZXApCisJCXsK KwkJCWNhc2UgJ2cnOgorCQkJY2FzZSAnQyc6CisJCQljYXNlICdHJzoKKwkJCWNhc2UgJ2knOgor CQkJY2FzZSAnSSc6CisJCQkJZGF0YV9pbml0X3R5cGUrKzsKKwkJCQlkYXRhX2dlbmVyYXRpb25f dHlwZSA9ICpzdGVwOworCQkJCWJyZWFrOworCQl9CiAJfQorCisJaWYgKGRhdGFfaW5pdF90eXBl ID4gMSkKKwkJcGdfbG9nX2Vycm9yKCJXQVJOSU5HISBNb3JlIHRoYW4gb25lIHR5cGUgb2Ygc2Vy dmVyLXNpZGUgZGF0YSBnZW5lcmF0aW9uIGlzIHJlcXVlc3RlZCIpOwogfQogCiAvKgpAQCAtNTMy NiwxMCArNTkyMywxMyBAQCBydW5Jbml0U3RlcHMoY29uc3QgY2hhciAqaW5pdGlhbGl6ZV9zdGVw cykKIAkJCQlpbml0Q3JlYXRlVGFibGVzKGNvbik7CiAJCQkJYnJlYWs7CiAJCQljYXNlICdnJzoK KwkJCWNhc2UgJ0MnOgogCQkJCW9wID0gImNsaWVudC1zaWRlIGdlbmVyYXRlIjsKIAkJCQlpbml0 R2VuZXJhdGVEYXRhQ2xpZW50U2lkZShjb24pOwogCQkJCWJyZWFrOwogCQkJY2FzZSAnRyc6CisJ CQljYXNlICdpJzoKKwkJCWNhc2UgJ0knOgogCQkJCW9wID0gInNlcnZlci1zaWRlIGdlbmVyYXRl IjsKIAkJCQlpbml0R2VuZXJhdGVEYXRhU2VydmVyU2lkZShjb24pOwogCQkJCWJyZWFrOwpAQCAt NjMxOSw2ICs2OTE5LDcgQEAgcHJpbnRQcm9ncmVzc1JlcG9ydChUU3RhdGUgKnRocmVhZHMsIGlu dDY0IHRlc3Rfc3RhcnQsIHBnX3RpbWVfdXNlY190IG5vdywKIAkJY3VyLnNlcmlhbGl6YXRpb25f ZmFpbHVyZXMgKz0KIAkJCXRocmVhZHNbaV0uc3RhdHMuc2VyaWFsaXphdGlvbl9mYWlsdXJlczsK IAkJY3VyLmRlYWRsb2NrX2ZhaWx1cmVzICs9IHRocmVhZHNbaV0uc3RhdHMuZGVhZGxvY2tfZmFp bHVyZXM7CisJCWN1ci5vdGhlcl9zcWxfZmFpbHVyZXMgKz0gdGhyZWFkc1tpXS5zdGF0cy5vdGhl cl9zcWxfZmFpbHVyZXM7CiAJfQogCiAJLyogd2UgY291bnQgb25seSBhY3R1YWxseSBleGVjdXRl ZCB0cmFuc2FjdGlvbnMgKi8KQEAgLTY0NjEsNyArNzA2Miw4IEBAIHByaW50UmVzdWx0cyhTdGF0 c0RhdGEgKnRvdGFsLAogCiAJLyoKIAkgKiBSZW1haW5pbmcgc3RhdHMgYXJlIG5vbnNlbnNpY2Fs IGlmIHdlIGZhaWxlZCB0byBleGVjdXRlIGFueSB4YWN0cyBkdWUKLQkgKiB0byBvdGhlcnMgdGhh biBzZXJpYWxpemF0aW9uIG9yIGRlYWRsb2NrIGVycm9ycworCSAqIHRvIG90aGVyIHRoYW4gc2Vy aWFsaXphdGlvbiBvciBkZWFkbG9jayBlcnJvcnMgYW5kIC0tY29udGludWUtb24tZXJyb3IKKwkg KiBpcyBub3Qgc2V0LgogCSAqLwogCWlmICh0b3RhbF9jbnQgPD0gMCkKIAkJcmV0dXJuOwpAQCAt NjQ3Nyw2ICs3MDc5LDkgQEAgcHJpbnRSZXN1bHRzKFN0YXRzRGF0YSAqdG90YWwsCiAJCXByaW50 ZigibnVtYmVyIG9mIGRlYWRsb2NrIGZhaWx1cmVzOiAiIElOVDY0X0ZPUk1BVCAiICglLjNmJSUp XG4iLAogCQkJICAgdG90YWwtPmRlYWRsb2NrX2ZhaWx1cmVzLAogCQkJICAgMTAwLjAgKiB0b3Rh bC0+ZGVhZGxvY2tfZmFpbHVyZXMgLyB0b3RhbF9jbnQpOworCQlwcmludGYoIm51bWJlciBvZiBv dGhlciBmYWlsdXJlczogIiBJTlQ2NF9GT1JNQVQgIiAoJS4zZiUlKVxuIiwKKwkJCSAgIHRvdGFs LT5vdGhlcl9zcWxfZmFpbHVyZXMsCisJCQkgICAxMDAuMCAqIHRvdGFsLT5vdGhlcl9zcWxfZmFp bHVyZXMgLyB0b3RhbF9jbnQpOwogCX0KIAogCS8qIGl0IGNhbiBiZSBub24temVybyBvbmx5IGlm IG1heF90cmllcyBpcyBub3QgZXF1YWwgdG8gb25lICovCkBAIC02NTgwLDYgKzcxODUsMTAgQEAg cHJpbnRSZXN1bHRzKFN0YXRzRGF0YSAqdG90YWwsCiAJCQkJCQkJICAgc3N0YXRzLT5kZWFkbG9j a19mYWlsdXJlcywKIAkJCQkJCQkgICAoMTAwLjAgKiBzc3RhdHMtPmRlYWRsb2NrX2ZhaWx1cmVz IC8KIAkJCQkJCQkJc2NyaXB0X3RvdGFsX2NudCkpOworCQkJCQkJcHJpbnRmKCIgLSBudW1iZXIg b2Ygb3RoZXIgZmFpbHVyZXM6ICIgSU5UNjRfRk9STUFUICIgKCUuM2YlJSlcbiIsCisJCQkJCQkJ ICAgc3N0YXRzLT5vdGhlcl9zcWxfZmFpbHVyZXMsCisJCQkJCQkJICAgKDEwMC4wICogc3N0YXRz LT5vdGhlcl9zcWxfZmFpbHVyZXMgLworCQkJCQkJCQlzY3JpcHRfdG90YWxfY250KSk7CiAJCQkJ CX0KIAogCQkJCQkvKgpAQCAtNjczOSw2ICs3MzQ4LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAq KmFyZ3YpCiAJCXsidmVyYm9zZS1lcnJvcnMiLCBub19hcmd1bWVudCwgTlVMTCwgMTV9LAogCQl7 ImV4aXQtb24tYWJvcnQiLCBub19hcmd1bWVudCwgTlVMTCwgMTZ9LAogCQl7ImRlYnVnIiwgbm9f YXJndW1lbnQsIE5VTEwsIDE3fSwKKwkJeyJjb250aW51ZS1vbi1lcnJvciIsIG5vX2FyZ3VtZW50 LCBOVUxMLCAxOH0sCiAJCXtOVUxMLCAwLCBOVUxMLCAwfQogCX07CiAKQEAgLTcwOTIsNiArNzcw MiwxMCBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJCWNhc2UgMTc6CQkJLyogZGVi dWcgKi8KIAkJCQlwZ19sb2dnaW5nX2luY3JlYXNlX3ZlcmJvc2l0eSgpOwogCQkJCWJyZWFrOwor CQkJY2FzZSAxODoJCQkvKiBjb250aW51ZS1vbi1lcnJvciAqLworCQkJCWJlbmNobWFya2luZ19v cHRpb25fc2V0ID0gdHJ1ZTsKKwkJCQljb250aW51ZV9vbl9lcnJvciA9IHRydWU7CisJCQkJYnJl YWs7CiAJCQlkZWZhdWx0OgogCQkJCS8qIGdldG9wdF9sb25nIGFscmVhZHkgZW1pdHRlZCBhIGNv bXBsYWludCAqLwogCQkJCXBnX2xvZ19lcnJvcl9oaW50KCJUcnkgXCIlcyAtLWhlbHBcIiBmb3Ig bW9yZSBpbmZvcm1hdGlvbi4iLCBwcm9nbmFtZSk7CkBAIC03NDQ3LDYgKzgwNjEsNyBAQCBtYWlu KGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJc3RhdHMucmV0cmllZCArPSB0aHJlYWQtPnN0YXRz LnJldHJpZWQ7CiAJCXN0YXRzLnNlcmlhbGl6YXRpb25fZmFpbHVyZXMgKz0gdGhyZWFkLT5zdGF0 cy5zZXJpYWxpemF0aW9uX2ZhaWx1cmVzOwogCQlzdGF0cy5kZWFkbG9ja19mYWlsdXJlcyArPSB0 aHJlYWQtPnN0YXRzLmRlYWRsb2NrX2ZhaWx1cmVzOworCQlzdGF0cy5vdGhlcl9zcWxfZmFpbHVy ZXMgKz0gdGhyZWFkLT5zdGF0cy5vdGhlcl9zcWxfZmFpbHVyZXM7CiAJCWxhdGVuY3lfbGF0ZSAr PSB0aHJlYWQtPmxhdGVuY3lfbGF0ZTsKIAkJY29ubl90b3RhbF9kdXJhdGlvbiArPSB0aHJlYWQt PmNvbm5fZHVyYXRpb247CiAK --_004_DS0PR08MB9565D91414C65B3AC363825488CFADS0PR08MB9565namp_--