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 1vmUHX-00CfWi-3C for pgsql-hackers@arkaria.postgresql.org; Sun, 01 Feb 2026 10:02:16 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vmUHT-009hiu-2r for pgsql-hackers@arkaria.postgresql.org; Sun, 01 Feb 2026 10:02:12 +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 1vmUHT-009hil-0w for pgsql-hackers@lists.postgresql.org; Sun, 01 Feb 2026 10:02:12 +0000 Received: from mail-westeuropeazon11021122.outbound.protection.outlook.com ([52.101.70.122] helo=AS8PR04CU009.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 1vmUHR-00000000UY8-2G7M for pgsql-hackers@postgresql.org; Sun, 01 Feb 2026 10:02:11 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ycQHs0e+w56K9dez51wlwXmiTJm79JOWRtWS6fGk8C8mmJFyKBKFhUf7RudOBjdbVdldHtCqVW9DskNPApKPiaihSvk7LIj+SQsKPeHL+4kwF2VNQkhvRepv9z2u6zd9zz+WccFL0k43bkQm7ONHXtqNhrGzzpEnFloUFqdkPz8jdS6U0slFgQsgQBWEBHh8hdJZRRmIqiERxcBMME1tAqmh4Rh2f7tyDXZDoawtnizu7EfT7/ZmfkQjZ6ub1Qr3oO9/knbvhh9Cr3HLPNPNcTYP1CNbfZBuCvZyoFPFXzOV5pOytCBQ/xQeSvlFR0yTItfVzgKDSnyqXfaXf62BcQ== 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=C0MzcKdbI7AcSRZQUIpgYKr9dtYNs8f9wuBXcf0s+lU=; b=jTSYBEnyToinHyyk6qGkUwnbphyGiDguhrLA626aPii0Tev7vESyCoggdkX0AZW5VC8sMnYO6FsuvY946qWv5wkd62IfVDvl8Nd5/HafnlbvztbdAQypDtvZ+HslOsRgPCWXjqnHwuNd+a7i4LpMwPUpOZQsQkQIaTSm6tf8dMFj9g+42wJdfxDl5gYXR/jXNbt0K3ReMs6QzE3rkCM+zqvAEWA1NdeDW5VdmeM2MsSQw32cthDiifGSTJl0J/RCBqoHvtcKkt2OXq36Fw0o6IAqZekV8piiJP/Wo0QkAM9iw1hm6ZZb6JZlxCmYoy88rqV0FhOk6uLCDIeuY7EBOw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=tpro.io; dmarc=pass action=none header.from=tpro.io; dkim=pass header.d=tpro.io; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tpro.io; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=C0MzcKdbI7AcSRZQUIpgYKr9dtYNs8f9wuBXcf0s+lU=; b=Tfv58LbNFgn2YAqqBBxvOPC/LuSMG9ys3W8v09HPzKOPy3eUDAVgfCE8cjZ45lM54Pko0sLr5EH2gNWcKZ+UydNnKxjbbZdxIGAT8Rvb6ASPJW7m2Js3uxebzgD4vdJNGHjyT9eTYRaANx8HkBxeLTgbhLgpvthMshXvSFM3ITQ5//pbiC37Q1VV93vJ9a1bMliugCea/j/CKkbjP41NL4k+trSnh0WnX9TwyIUQSwZtI/qJsfekBQStWSfW9pkqsiCbnEYRa4eIX21YHVH21OKoVPhgiOVLS9pJVAnHA1l4jr9dqs/PlUHzIxXa2prU12zVSAI7cQPWOWE02O3YNQ== Received: from AS1PR02MB7846.eurprd02.prod.outlook.com (2603:10a6:20b:4ac::8) by AM0PR02MB5747.eurprd02.prod.outlook.com (2603:10a6:208:18d::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9564.15; Sun, 1 Feb 2026 10:02:07 +0000 Received: from AS1PR02MB7846.eurprd02.prod.outlook.com ([fe80::4d8c:6d69:72f9:865a]) by AS1PR02MB7846.eurprd02.prod.outlook.com ([fe80::4d8c:6d69:72f9:865a%6]) with mapi id 15.20.9564.014; Sun, 1 Feb 2026 10:02:06 +0000 From: Alexandre Felipe To: "pgsql-hackers@postgresql.org" Subject: New access method for b-tree. Thread-Topic: New access method for b-tree. Thread-Index: AQHck2CBvRiGByt3GESujVIxrwWbJg== Date: Sun, 1 Feb 2026 10:02:06 +0000 Message-ID: Accept-Language: en-GB, en-US Content-Language: en-GB X-MS-Has-Attach: yes X-MS-TNEF-Correlator: msip_labels: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=tpro.io; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: AS1PR02MB7846:EE_|AM0PR02MB5747:EE_ x-ms-office365-filtering-correlation-id: b3504ee9-222a-45c9-d38c-08de6178f516 x-ms-exchange-atpmessageproperties: SA x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0;ARA:13230040|1800799024|6049299003|366016|376014|10070799003|31052699007|39142699007|38070700021|8096899003|4053099003; x-microsoft-antispam-message-info: =?iso-8859-1?Q?wcbGFVu/0p/PbtHJ7yaC5INocOHMZnLm8ZuUMMRPWXLZ9gJgm2hqPXGNP/?= =?iso-8859-1?Q?gZMi0sNOGbIJdNpa4L7ix0jOC3+RQu8Ov6fcuv238Gb08VLzO2sVq8Ahm6?= =?iso-8859-1?Q?S3Ud4Ay/nRj3M3+CbR/mkP9FlCdgygZ6am7z8uLnKfYiT/93Q34CkOlZ6k?= =?iso-8859-1?Q?0Y16/n12+F0Lq0mkYuAXJ+6hcJcTmfNPhxAj1yhC9meqmACzrcjMGKd9EQ?= =?iso-8859-1?Q?1V36i3LwAo3ozaNEAxNDPFvrbJjtHa03vkrz6lc/FlUz3a2BZxV1/9ZvEB?= =?iso-8859-1?Q?O00WMuVr5sZyeTLXWXA0GIijTHM7pwxc2tlG65uqetfVO9fRKBkQSWGOBV?= =?iso-8859-1?Q?VJY6VeT9jjQOKgQj7f1Iqj8ReucxveGT5/+u0XWVepoCaW0Utbbcz57Xpu?= =?iso-8859-1?Q?zkRNcZDoiTKnviG4URL+Vf4mrhDScvB3Vm/HlbRywwtfkfkFCWODP8bCD/?= =?iso-8859-1?Q?QcR8LOcnSkqso3ySeYeQ8MrXmJ3gR6Vcn+n0+dQb6seBH5qs2kdgaTBVGD?= =?iso-8859-1?Q?SlFNyboILafXE7kGFViD6VWMTZjOpxZ5k5LMJ2oOayUE6pZINYgAp/Ukhz?= =?iso-8859-1?Q?aryrHwUpu9lNwi+Qam5Hx0tzcsywoaR0ELUqJdfctSb5bxCC4MIhPphLC5?= =?iso-8859-1?Q?D97DBRUxqYgwdhfKt5UbNzsbz/K5dcWgiiFb8Kw0ZTffojUUE4S58P6Jqb?= =?iso-8859-1?Q?5MhypGW8m91P1VPLCNeNMhNo9L/27bN9wc8MiHeiEThKYf44GaHZ3KA+D/?= =?iso-8859-1?Q?FqvM3vW1Q3iYAvcfsx9CmkJ5J4XvZu81ZM7d4TU+o83D2DGeutJolOCqQx?= =?iso-8859-1?Q?PKH0zUn4jLFJxywYlAKZE3FFpot5gDxuzpv7ABrMt7vHCv3QbmqASro7st?= =?iso-8859-1?Q?yFc+kNLSNgcQsSYv63GWCUruPJPymhkzMBUDwFpD27rxF3IVjjTDtC6hhy?= =?iso-8859-1?Q?/X0v6qr09S6Dx1qckjk9cShC+aWdt8Tr3QzqH80/KCMnMgD0zBvbgijtF+?= =?iso-8859-1?Q?RhDFA0SS7vfQYbDB3TyUzg8dfidb8SkB9ekUVed6bve1SADPVaZHJQV36k?= =?iso-8859-1?Q?FP4bdsW1mMvuqmfA8iSXDSlh52bQMqoJEtDw+VaYgO+vyD3PPCIzMUq28g?= =?iso-8859-1?Q?6elwSwiIvR1gGQ7Hb+RDHoKEtGGwRfUWmN3vUypdmdRLupBGjMdlVa2u+L?= =?iso-8859-1?Q?3YTudSlF1X/wdm+ckPGBGZk7aL2SiDquGTPekr1cFpCOo7fr3qhaQCvbfg?= =?iso-8859-1?Q?SHlcQ309DDEiiIPPoKutSdJlo3vS/fbJCdnQASSy+O84/sIeElDUDGq4X4?= =?iso-8859-1?Q?fo4SXtonEeXCh2LcJiO6ZKzPJ88cqKJDDSxtomsMHFPokzg2n+TKEszaRm?= =?iso-8859-1?Q?BxM7Ncsv67kGlLmdWLG4SAG5I57n4RZ/eqlVfkYtUfMfFFpUaZMsbmszGL?= =?iso-8859-1?Q?8rhiVEwHViqmKirPQfjXtCgBVQybnAumigHHR1alLuPz9Q62ZDQiJBB6e1?= =?iso-8859-1?Q?0i+Vxp1htJUerTTYeOGRFbyBv2f9YF61kKO2bri0iXJG36MGsf0ZsxGqBp?= =?iso-8859-1?Q?7q8vViPqqM+4DyuGqpl3INzYruv6AXCZfsOESdq8zuc1oI6XDpyny3rV9b?= =?iso-8859-1?Q?5le97MBN4sNdLXYSKqrY2DTyjMf+IEw/WGm1sL0BuxZXIFRnOrF3fOAXnC?= =?iso-8859-1?Q?HSGtjEKT2X3BXjVuEr4=3D?= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AS1PR02MB7846.eurprd02.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(6049299003)(366016)(376014)(10070799003)(31052699007)(39142699007)(38070700021)(8096899003)(4053099003);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 2 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?6dcCFUXiNzS54SopkPrLtWjIfzQ27ZF3bFUoyBJAafU6SHsNBc6TjdT/mT?= =?iso-8859-1?Q?3G3xVfxwdehcxEQXjtnVIU5+SJ9BBwMvzWnG1N4bBAZHi1UTs1cbT/YFS1?= =?iso-8859-1?Q?lJ1xdD0J4oW5N5lbjGhi3l2KZpH4EV+cnC7jQbjzGnr4fMbZVx7d9YxNbM?= =?iso-8859-1?Q?OxrTRkPKAtJ6k32+8uxGtHRzLpk12sqdih9klPMxU7c+mfDCRAKz/0Z8n3?= =?iso-8859-1?Q?3cjW7aY1OuD7gYw6YD3km05QHWmbTC3WpQjVFeDqw8liefuWbw/NmhbOcU?= =?iso-8859-1?Q?QJAbZnoOUAVy9RQJdYzZ2kryHxE8bS7G9Mv5HMIChIKNW9B5GEw0EMFR4U?= =?iso-8859-1?Q?Es43b9npX/X5nYcum9SqsagOEJej+LOyHNgAQk8D2rpgt64pxDcBFs93QI?= =?iso-8859-1?Q?OiJamr7Ni2kqR5nYbFSP/ufIpTlwixoCIhrKc2vQbZ+ke2bkphdV0A9FvH?= =?iso-8859-1?Q?/oWjc2FPukNj+H56rnJf9/jjml3kiPR0sn6FNEaHjccShH0xv3hMnmK8xg?= =?iso-8859-1?Q?5JP2BO0QuCMO5UZpPNDOOMgWxM7Ywdj2gtTaj0qNQ58d0rqlusettf7zSz?= =?iso-8859-1?Q?XKuErPIoMxFACCmHcNEIvF1lnTEVhicoajbgmt2W0eUx59mPktZsJW4r5K?= =?iso-8859-1?Q?fPOOYKOqx+MNcweEGgTCQQdXAi/14SO+kD2ipoFiIU+7G59NXKfxEFVNUu?= =?iso-8859-1?Q?rLgGBXmKn9EdynDHp/LbgSLyjc+5QKNNsPA1JMYLahr5Oc6apo3dZTHqGH?= =?iso-8859-1?Q?RgNctovw58yrMAgQlkHkTLCzSSV7QVK3FPgirpvmOQDvjbzMD4gTgl8+fk?= =?iso-8859-1?Q?cyPgiDtxjpN9dEaGY7tsz1nGoW+Ldlo8CNclPz3i1X0A2ptrVdG7xlpd6+?= =?iso-8859-1?Q?sjlrTUDwO/iBkQVMPwu/c74EznU3AGIXbSS4i8yXNfN5ckO8jZVjzrAhVk?= =?iso-8859-1?Q?Yz6bxIiPeRRJYuROwrFSbmBWuafZkmEtywKejZIjXMvz3wOimeQx4ge6BT?= =?iso-8859-1?Q?K8f9QuWhdzZCoixVvFTHRiCpRQMJBmpkhHlkadpN+Aq+aazIw5NwIspZok?= =?iso-8859-1?Q?vuWO73JxZRqPYN219iH1dr6qYoBFu94R1ADH9N+PKNDO6PP24FKA8qM+ZJ?= =?iso-8859-1?Q?pMV5UlACaiTtLpkQT6wpkXkU8usqEQZm0wDIy0cHFDuf2+An1WfoyusFEq?= =?iso-8859-1?Q?2vPdWFhfAp3IJKJlYQQRbyY1UcGYtX36HCr+CEOpiyr8Kd0nvSCqRwypRM?= =?iso-8859-1?Q?awlxY07k21kXLgZZGubhXLnaQ6nyPQMmQWfMY3m1Wrew4OVkjyWBOrcs9i?= =?iso-8859-1?Q?C+ThjIM0oH5GmsNmYIb8ir3U1HpsT5Yi99fUiNOOHFfKB/d2G9SUlu7s5e?= =?iso-8859-1?Q?8bR9W7SX55/5bNDoIPCDEXQmM80vXveOuo3H9dRzB6VrQyMwGIVSp1i5AQ?= =?iso-8859-1?Q?3wTZ3cFyDqju7spAryyFm2hQ6mDqFs2zx/aLLdRhWoxxnOKVr3dSs+0uNA?= =?iso-8859-1?Q?OjIm3eoACbVe1beSu8oUYo512Qbdi2UZeGBocxLkKi6UVM3uMI6gjJ3AZ8?= =?iso-8859-1?Q?oyK4Z6Wemk4P4dKeZrWSZHchtNgeIMx6RV1KCaUJ64fKpt4hslUn9Di4h/?= =?iso-8859-1?Q?n5IPB6wCY74vGD/fqCqhWOJXvDofXhZT0xlCzXklKVgdghrbX7IIe17JLQ?= =?iso-8859-1?Q?YjWFo/d8VEMo/W+eGIrBE+WFuL9Dme4disXCPFEI9+dfa0qr5mEt+aS1SA?= =?iso-8859-1?Q?NwZPukFAuShsR4zpi0I5zyJoL0oeQf1nz5xYwwi1BQS998yA0sopfQeTP/?= =?iso-8859-1?Q?4TxUkDqFoAGv1msns3ZDBz0h6m+Hcykv7Mpg2GRFmV6guRw9QA6UvZDDno?= =?iso-8859-1?Q?Ii?= x-ms-exchange-antispam-messagedata-1: NoQ28VXPBltLAg== Content-Type: multipart/mixed; boundary="_004_AS1PR02MB784695AFEC37179FFAF7EAE19A9DAAS1PR02MB7846eurp_" MIME-Version: 1.0 X-OriginatorOrg: tpro.io X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: AS1PR02MB7846.eurprd02.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: b3504ee9-222a-45c9-d38c-08de6178f516 X-MS-Exchange-CrossTenant-originalarrivaltime: 01 Feb 2026 10:02:06.8543 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 42603bc2-2daf-4c12-a5cf-74e23721f113 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: XQa+QHniYmBtnwdENuKHXhOBoZ8euyLFtbOgSe/b3ajFLQlDmSY4zHDsbw5+BdzkUIIWE5eUpRyBgjed1kzzlWTxfbD6u17rPAia0YoK6mI= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR02MB5747 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --_004_AS1PR02MB784695AFEC37179FFAF7EAE19A9DAAS1PR02MB7846eurp_ Content-Type: multipart/alternative; boundary="_000_AS1PR02MB784695AFEC37179FFAF7EAE19A9DAAS1PR02MB7846eurp_" --_000_AS1PR02MB784695AFEC37179FFAF7EAE19A9DAAS1PR02MB7846eurp_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Hello Hackers, Please check this out, It is an access method to scan a table sorting by the second column of an i= ndex, filtered on the first. Queries like SELECT x, y FROM grid WHERE x in (array of Nx elements) ORDER BY y, x LIMIT M Can execute streaming the rows directly from disk instead of loading everyt= hing. Using btree index on (x, y) On a grid with N x N will run by fetching only what is necessary A skip scal will run with O(N * Nx) I/O, O(N x Nx) space, O(N x Nx * log( N= * Nx)) comput (assuming a generic in memory sort) The proposed access method does it O(M + Nx) I/O, O(Nx) space, and O(M * lo= g(Nx)) compute. Kind Regards, Alexandre Felipe Research & Development Engineer --_000_AS1PR02MB784695AFEC37179FFAF7EAE19A9DAAS1PR02MB7846eurp_ Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable
Hello Hackers,

Please check this out,

It is an access method to scan a table sorting by the second column of an i= ndex, filtered on the first.
Queries like
SELECT x, y FROM grid
WHERE x in (array of Nx elements)
ORDER BY y, x
LIMIT M

Can execute streaming the rows directly from disk instead of loading everyt= hing.

Using  btree index on (x, y)

On a grid with N x N will run by fetching only what is necessary
A skip scal will run with O(N * Nx) I/O, O(N x Nx) space, O(N x Nx * log( N= * Nx)) comput (assuming a generic in memory sort)

The proposed access method does it O(M + Nx) I/O, O(Nx) space, and O(M * lo= g(Nx)) compute.


= Kind Regards,


= Alexandre Felipe

Research & Development Engineer

   

 


--_000_AS1PR02MB784695AFEC37179FFAF7EAE19A9DAAS1PR02MB7846eurp_-- --_004_AS1PR02MB784695AFEC37179FFAF7EAE19A9DAAS1PR02MB7846eurp_ Content-Type: application/octet-stream; name="btree_merge_rebased.patch" Content-Description: btree_merge_rebased.patch Content-Disposition: attachment; filename="btree_merge_rebased.patch"; size=55823; creation-date="Sun, 01 Feb 2026 09:53:43 GMT"; modification-date="Sun, 01 Feb 2026 09:54:09 GMT" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhLy5naXRpZ25vcmUgYi8uZ2l0aWdub3JlCmluZGV4IDRlOTExMzk1ZmUzLi5h YzFmOTVkOWNmMCAxMDA2NDQKLS0tIGEvLmdpdGlnbm9yZQorKysgYi8uZ2l0aWdub3JlCkBAIC00 MywzICs0MywxMSBAQCBsaWIqLnBjCiAvUmVsZWFzZS8KIC90bXBfaW5zdGFsbC8KIC9wb3J0bG9j ay8KKworIyBoaWRkZW4gZmlsZXMgKGUuZy4gLmRiZGF0YSwgLmluc3RhbGwsIGdvb2QgcHJhY3Rp Y2UgdG8gdGVzdCBsb2NhbGx5IGluIGlzb2xhdGlvbikKKy4qCisKKyMgVGVzdCBvdXRwdXQKKyoq L3JlZ3Jlc3Npb24uZGlmZnMKKyoqL3JlZ3Jlc3Npb24ub3V0CisqKi9yZXN1bHRzLwpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9NYWtlZmlsZSBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9uYnRyZWUvTWFrZWZpbGUKaW5kZXggMGRhZjY0MGFmOTYuLjcyMDUzY2VmZGFhIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL01ha2VmaWxlCisrKyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9uYnRyZWUvTWFrZWZpbGUKQEAgLTE2LDYgKzE2LDcgQEAgT0JKUyA9IFwKIAlu YnRjb21wYXJlLm8gXAogCW5idGRlZHVwLm8gXAogCW5idGluc2VydC5vIFwKKwluYnRtZXJnZXNj YW4ubyBcCiAJbmJ0cGFnZS5vIFwKIAluYnRwcmVwcm9jZXNza2V5cy5vIFwKIAluYnRyZWFkcGFn ZS5vIFwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbWVzb24uYnVpbGQg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL21lc29uLmJ1aWxkCmluZGV4IDgxMmYwNjdlNzEw Li4xMDE2ZmVhNjJkNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9tZXNv bi5idWlsZAorKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL21lc29uLmJ1aWxkCkBAIC00 LDYgKzQsNyBAQCBiYWNrZW5kX3NvdXJjZXMgKz0gZmlsZXMoCiAgICduYnRjb21wYXJlLmMnLAog ICAnbmJ0ZGVkdXAuYycsCiAgICduYnRpbnNlcnQuYycsCisgICduYnRtZXJnZXNjYW4uYycsCiAg ICduYnRwYWdlLmMnLAogICAnbmJ0cHJlcHJvY2Vzc2tleXMuYycsCiAgICduYnRyZWFkcGFnZS5j JywKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0bWVyZ2VzY2FuLmMg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idG1lcmdlc2Nhbi5jCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi43MDgyOGRjNzNkMwotLS0gL2Rldi9udWxsCisrKyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0bWVyZ2VzY2FuLmMKQEAgLTAsMCArMSw0NTcg QEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIG5idG1lcmdlc2Nhbi5jCisgKgkgIEItVHJl ZSBtZXJnZSBzY2FuIGZvciBlZmZpY2llbnQgZXZhbHVhdGlvbiBvZiBJTi1saXN0IHF1ZXJpZXMK KyAqCisgKiBUaGlzIG1vZHVsZSBpbXBsZW1lbnRzIGEgSy13YXkgbWVyZ2Ugc2NhbiBmb3IgQi10 cmVlIGluZGV4ZXMsIG9wdGltaXplZAorICogZm9yIHF1ZXJpZXMgb2YgdGhlIGZvcm06CisgKiAg IFdIRVJFIHByZWZpeCBJTiAodjEsIHYyLCAuLi4sIHZLKSBBTkQgc3VmZml4ID49IGIgT1JERVIg Qlkgc3VmZml4IExJTUlUIE4KKyAqCisgKiBUaGUgYWxnb3JpdGhtIG1haW50YWlucyBhIG1pbi1o ZWFwIG9mIGN1cnNvcnMsIG9uZSBwZXIgcHJlZml4IHZhbHVlLgorICogRWFjaCBjdXJzb3IgdHJh Y2tzIGl0cyBwb3NpdGlvbiB3aXRoaW4gdGhlIGluZGV4IGZvciB0aGF0IHByZWZpeC4KKyAqIFR1 cGxlcyBhcmUgcmV0dXJuZWQgaW4gc3VmZml4IG9yZGVyIGJ5IHJlcGVhdGVkbHkgZXh0cmFjdGlu ZyB0aGUKKyAqIG1pbmltdW0gZnJvbSB0aGUgaGVhcC4KKyAqCisgKiBUYXJnZXQgYmVoYXZpb3I6 IEFjY2VzcyBhdCBtb3N0IE4gKyBLIC0gMSBpbmRleCB0dXBsZXMgZm9yIExJTUlUIE4uCisgKgor ICogQ29weXJpZ2h0IChjKSAyMDI2LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91 cAorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkgIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUv bmJ0bWVyZ2VzY2FuLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2luY2x1ZGUgInBv c3RncmVzLmgiCisKKyNpbmNsdWRlICJhY2Nlc3MvbmJ0cmVlLmgiCisjaW5jbHVkZSAiYWNjZXNz L3JlbHNjYW4uaCIKKyNpbmNsdWRlICJsaWIvcGFpcmluZ2hlYXAuaCIKKyNpbmNsdWRlICJtaXNj YWRtaW4uaCIKKyNpbmNsdWRlICJzdG9yYWdlL2J1Zm1nci5oIgorI2luY2x1ZGUgInV0aWxzL2Rh dHVtLmgiCisjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCisjaW5jbHVkZSAidXRpbHMvbWVt dXRpbHMuaCIKKyNpbmNsdWRlICJ1dGlscy9yZWwuaCIKKworLyogRm9yd2FyZCBkZWNsYXJhdGlv bnMgb2Ygc3RhdGljIGZ1bmN0aW9ucyAqLworc3RhdGljIGludAlidF9tZXJnZV9oZWFwX2NtcChj b25zdCBwYWlyaW5naGVhcF9ub2RlICphLAorCQkJCQkJCSAgY29uc3QgcGFpcmluZ2hlYXBfbm9k ZSAqYiwKKwkJCQkJCQkgIHZvaWQgKmFyZyk7CitzdGF0aWMgYm9vbCBidF9tZXJnZV9jdXJzb3Jf aW5pdChCVE1lcmdlU2NhblN0YXRlICpzdGF0ZSwKKwkJCQkJCQkJIEluZGV4U2NhbkRlc2Mgc2Nh biwKKwkJCQkJCQkJIEJUTWVyZ2VDdXJzb3IgKmN1cnNvciwKKwkJCQkJCQkJIERhdHVtIHByZWZp eF92YWx1ZSwKKwkJCQkJCQkJIGJvb2wgcHJlZml4X2lzbnVsbCk7CitzdGF0aWMgYm9vbCBidF9t ZXJnZV9jdXJzb3JfYWR2YW5jZShCVE1lcmdlU2NhblN0YXRlICpzdGF0ZSwKKwkJCQkJCQkJCUlu ZGV4U2NhbkRlc2Mgc2NhbiwKKwkJCQkJCQkJCUJUTWVyZ2VDdXJzb3IgKmN1cnNvcik7CitzdGF0 aWMgRGF0dW0gYnRfbWVyZ2VfZXh0cmFjdF9zb3J0a2V5KEJUTWVyZ2VTY2FuU3RhdGUgKnN0YXRl LAorCQkJCQkJCQkJICBJbmRleFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJCQkgIEJUTWVyZ2VDdXJz b3IgKmN1cnNvciwKKwkJCQkJCQkJCSAgYm9vbCAqaXNudWxsKTsKKworCisvKgorICogYnRfbWVy Z2VfaGVhcF9jbXAKKyAqCSAgQ29tcGFyZSB0d28gY3Vyc29ycyBieSB0aGVpciBjdXJyZW50IHNv cnQga2V5IChzdWZmaXggdmFsdWUpLgorICoKKyAqIFdoZW4gc29ydCBrZXlzIGFyZSBlcXVhbCwg dXNlcyBwcmVmaXggdmFsdWUgYXMgdGllYnJlYWtlciBmb3IKKyAqIGRldGVybWluaXN0aWMgb3Jk ZXJpbmcgKE9SREVSIEJZIHN1ZmZpeCwgcHJlZml4KS4KKyAqCisgKiBSZXR1cm5zIHBvc2l0aXZl IGlmIGEgPiBiIChwYWlyaW5naGVhcCBpcyBhIG1heC1oZWFwLCB3ZSB3YW50IG1pbi1oZWFwCisg KiBiZWhhdmlvciBzbyB3ZSBpbnZlcnQgdGhlIGNvbXBhcmlzb24pLgorICovCitzdGF0aWMgaW50 CitidF9tZXJnZV9oZWFwX2NtcChjb25zdCBwYWlyaW5naGVhcF9ub2RlICphLAorCQkJCSAgY29u c3QgcGFpcmluZ2hlYXBfbm9kZSAqYiwKKwkJCQkgIHZvaWQgKmFyZykKK3sKKwlCVE1lcmdlU2Nh blN0YXRlICpzdGF0ZSA9IChCVE1lcmdlU2NhblN0YXRlICopIGFyZzsKKwlCVE1lcmdlQ3Vyc29y ICpjdXJzb3JfYSA9IHBhaXJpbmdoZWFwX2NvbnRhaW5lcihCVE1lcmdlQ3Vyc29yLCBwaF9ub2Rl LAorCQkJCQkJCQkJCQkJCShwYWlyaW5naGVhcF9ub2RlICopIGEpOworCUJUTWVyZ2VDdXJzb3Ig KmN1cnNvcl9iID0gcGFpcmluZ2hlYXBfY29udGFpbmVyKEJUTWVyZ2VDdXJzb3IsIHBoX25vZGUs CisJCQkJCQkJCQkJCQkJKHBhaXJpbmdoZWFwX25vZGUgKikgYik7CisJRGF0dW0JCWtleV9hID0g Y3Vyc29yX2EtPnNvcnRfa2V5OworCURhdHVtCQlrZXlfYiA9IGN1cnNvcl9iLT5zb3J0X2tleTsK Kwlib29sCQludWxsX2EgPSBjdXJzb3JfYS0+c29ydF9rZXlfaXNudWxsOworCWJvb2wJCW51bGxf YiA9IGN1cnNvcl9iLT5zb3J0X2tleV9pc251bGw7CisJaW50MzIJCWNtcDsKKworCS8qIEhhbmRs ZSBOVUxMcyAtIE5VTExzIHNvcnQgbGFzdCAoTlVMTFMgTEFTVCBkZWZhdWx0IGZvciBBU0MpICov CisJaWYgKG51bGxfYSAmJiBudWxsX2IpCisJCXJldHVybiAwOworCWlmIChudWxsX2EpCisJCXJl dHVybiAtMTsJCQkJLyogYSBpcyBOVUxMLCBjb21lcyBhZnRlciBiICovCisJaWYgKG51bGxfYikK KwkJcmV0dXJuIDE7CQkJCS8qIGIgaXMgTlVMTCwgY29tZXMgYWZ0ZXIgYSAqLworCisJLyogQ29t cGFyZSB1c2luZyB0aGUgc3VmZml4IGNvbHVtbidzIGNvbXBhcmlzb24gZnVuY3Rpb24gKi8KKwlj bXAgPSBEYXR1bUdldEludDMyKEZ1bmN0aW9uQ2FsbDJDb2xsKCZzdGF0ZS0+c3VmZml4X2NtcCwK KwkJCQkJCQkJCQkgIHN0YXRlLT5zdWZmaXhfY29sbGF0aW9uLAorCQkJCQkJCQkJCSAga2V5X2Es IGtleV9iKSk7CisKKwkvKgorCSAqIFVzZSBwcmVmaXggdmFsdWUgYXMgdGllYnJlYWtlciBmb3Ig ZGV0ZXJtaW5pc3RpYyBvcmRlcmluZy4KKwkgKiBUaGlzIGVuc3VyZXMgT1JERVIgQlkgc3VmZml4 LCBwcmVmaXggYmVoYXZpb3IuCisJICovCisJaWYgKGNtcCA9PSAwKQorCXsKKwkJLyogQ29tcGFy ZSBwcmVmaXggdmFsdWVzIChhc3N1bWVzIHBhc3MtYnktdmFsdWUgaW50NCBmb3Igbm93KSAqLwor CQlpbnQzMgkJcHJlZml4X2EgPSBEYXR1bUdldEludDMyKGN1cnNvcl9hLT5wcmVmaXhfdmFsdWUp OworCQlpbnQzMgkJcHJlZml4X2IgPSBEYXR1bUdldEludDMyKGN1cnNvcl9iLT5wcmVmaXhfdmFs dWUpOworCisJCWlmIChwcmVmaXhfYSA8IHByZWZpeF9iKQorCQkJY21wID0gLTE7CisJCWVsc2Ug aWYgKHByZWZpeF9hID4gcHJlZml4X2IpCisJCQljbXAgPSAxOworCX0KKworCS8qIE5lZ2F0ZSBm b3IgbWluLWhlYXAgYmVoYXZpb3IgKi8KKwlyZXR1cm4gLWNtcDsKK30KKworCisvKgorICogYnRf bWVyZ2VfaW5pdAorICoJICBJbml0aWFsaXplIGEgbWVyZ2Ugc2NhbiBzdGF0ZS4KKyAqCisgKiBD cmVhdGVzIHRoZSBtZXJnZSBzdGF0ZSB3aXRoIG9uZSBjdXJzb3IgcGVyIHByZWZpeCB2YWx1ZS4K KyAqIFRoZSBjdXJzb3JzIHdpbGwgYmUgcG9zaXRpb25lZCBhdCB0aGVpciBmaXJzdCBtYXRjaGlu ZyB0dXBsZXMKKyAqIHdoZW4gYnRfbWVyZ2VfZ2V0bmV4dCBpcyBmaXJzdCBjYWxsZWQuCisgKi8K K0JUTWVyZ2VTY2FuU3RhdGUgKgorYnRfbWVyZ2VfaW5pdChJbmRleFNjYW5EZXNjIHNjYW4sCisJ CQkgIERhdHVtICpwcmVmaXhfdmFsdWVzLAorCQkJICBib29sICpwcmVmaXhfbnVsbHMsCisJCQkg IGludCBudW1fcHJlZml4ZXMsCisJCQkgIGludCBwcmVmaXhfYXR0bm8sCisJCQkgIGludCBzdWZm aXhfYXR0bm8sCisJCQkgIE9pZCBzdWZmaXhfY21wX29pZCwKKwkJCSAgT2lkIHN1ZmZpeF9jb2xs YXRpb24pCit7CisJQlRNZXJnZVNjYW5TdGF0ZSAqc3RhdGU7CisJTWVtb3J5Q29udGV4dCBtZXJn ZV9jb250ZXh0OworCU1lbW9yeUNvbnRleHQgb2xkX2NvbnRleHQ7CisJaW50CQkJaTsKKworCS8q IENyZWF0ZSBtZW1vcnkgY29udGV4dCBmb3IgbWVyZ2Ugc2NhbiBhbGxvY2F0aW9ucyAqLworCW1l cmdlX2NvbnRleHQgPSBBbGxvY1NldENvbnRleHRDcmVhdGUoQ3VycmVudE1lbW9yeUNvbnRleHQs CisJCQkJCQkJCQkJICAiQlRNZXJnZVNjYW4iLAorCQkJCQkJCQkJCSAgQUxMT0NTRVRfREVGQVVM VF9TSVpFUyk7CisJb2xkX2NvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8obWVyZ2VfY29u dGV4dCk7CisKKwkvKiBBbGxvY2F0ZSBtYWluIHN0YXRlIHN0cnVjdHVyZSAqLworCXN0YXRlID0g cGFsbG9jMChzaXplb2YoQlRNZXJnZVNjYW5TdGF0ZSkpOworCXN0YXRlLT5tZXJnZV9jb250ZXh0 ID0gbWVyZ2VfY29udGV4dDsKKwlzdGF0ZS0+bnVtX2N1cnNvcnMgPSBudW1fcHJlZml4ZXM7CisJ c3RhdGUtPmFjdGl2ZV9jdXJzb3JzID0gMDsKKwlzdGF0ZS0+cHJlZml4X2F0dG5vID0gcHJlZml4 X2F0dG5vOworCXN0YXRlLT5zdWZmaXhfYXR0bm8gPSBzdWZmaXhfYXR0bm87CisJc3RhdGUtPnN1 ZmZpeF9jb2xsYXRpb24gPSBzdWZmaXhfY29sbGF0aW9uOworCXN0YXRlLT5kaXJlY3Rpb24gPSBG b3J3YXJkU2NhbkRpcmVjdGlvbjsKKwlzdGF0ZS0+aW5pdGlhbGl6ZWQgPSBmYWxzZTsKKwlzdGF0 ZS0+dHVwbGVzX2FjY2Vzc2VkID0gMDsKKworCS8qIFNldCB1cCBzdWZmaXggY29tcGFyaXNvbiBm dW5jdGlvbiAqLworCWZtZ3JfaW5mbyhzdWZmaXhfY21wX29pZCwgJnN0YXRlLT5zdWZmaXhfY21w KTsKKworCS8qIEFsbG9jYXRlIGN1cnNvciBhcnJheSAqLworCXN0YXRlLT5jdXJzb3JzID0gcGFs bG9jMChudW1fcHJlZml4ZXMgKiBzaXplb2YoQlRNZXJnZUN1cnNvcikpOworCisJLyogSW5pdGlh bGl6ZSBjdXJzb3IgbWV0YWRhdGEgKG5vdCBwb3NpdGlvbmVkIHlldCkgKi8KKwlmb3IgKGkgPSAw OyBpIDwgbnVtX3ByZWZpeGVzOyBpKyspCisJeworCQlCVE1lcmdlQ3Vyc29yICpjdXJzb3IgPSAm c3RhdGUtPmN1cnNvcnNbaV07CisKKwkJY3Vyc29yLT5jdXJzb3JfaWQgPSBpOworCQljdXJzb3It PnByZWZpeF92YWx1ZSA9IGRhdHVtQ29weShwcmVmaXhfdmFsdWVzW2ldLCB0cnVlLCBzaXplb2Yo RGF0dW0pKTsKKwkJY3Vyc29yLT5wcmVmaXhfaXNudWxsID0gcHJlZml4X251bGxzW2ldOworCQlj dXJzb3ItPmV4aGF1c3RlZCA9IHByZWZpeF9udWxsc1tpXTsJLyogTlVMTCBwcmVmaXggPSBleGhh dXN0ZWQgKi8KKwkJY3Vyc29yLT5zb3J0X2tleV9pc251bGwgPSB0cnVlOworCQlCVFNjYW5Qb3NJ bnZhbGlkYXRlKGN1cnNvci0+cG9zKTsKKwkJY3Vyc29yLT50dXBsZXMgPSBOVUxMOworCX0KKwor CS8qIEluaXRpYWxpemUgdGhlIG1lcmdlIGhlYXAgKi8KKwlzdGF0ZS0+bWVyZ2VfaGVhcCA9IHBh aXJpbmdoZWFwX2FsbG9jYXRlKGJ0X21lcmdlX2hlYXBfY21wLCBzdGF0ZSk7CisKKwlNZW1vcnlD b250ZXh0U3dpdGNoVG8ob2xkX2NvbnRleHQpOworCisJcmV0dXJuIHN0YXRlOworfQorCisKKy8q CisgKiBidF9tZXJnZV9nZXRuZXh0CisgKgkgIEdldCB0aGUgbmV4dCB0dXBsZSBmcm9tIHRoZSBt ZXJnZSBzY2FuLgorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiBhIHR1cGxlIHdhcyBmb3VuZCwgZmFs c2UgaWYgc2NhbiBpcyBleGhhdXN0ZWQuCisgKiBUaGUgdHVwbGUncyBUSUQgaXMgc3RvcmVkIGlu IHNjYW4tPnhzX2hlYXB0aWQuCisgKi8KK2Jvb2wKK2J0X21lcmdlX2dldG5leHQoSW5kZXhTY2Fu RGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKK3sKKwlCVFNjYW5PcGFxdWUgc28gPSAoQlRT Y2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CisJQlRNZXJnZVNjYW5TdGF0ZSAqc3RhdGUgPSBzby0+ bWVyZ2VTdGF0ZTsKKwlCVE1lcmdlQ3Vyc29yICpjdXJzb3I7CisJcGFpcmluZ2hlYXBfbm9kZSAq bm9kZTsKKwlpbnQJCQlpOworCisJaWYgKHN0YXRlID09IE5VTEwpCisJCXJldHVybiBmYWxzZTsK KworCS8qIEluaXRpYWxpemUgY3Vyc29ycyBvbiBmaXJzdCBjYWxsICovCisJaWYgKCFzdGF0ZS0+ aW5pdGlhbGl6ZWQpCisJeworCQlzdGF0ZS0+aW5pdGlhbGl6ZWQgPSB0cnVlOworCQlzdGF0ZS0+ ZGlyZWN0aW9uID0gZGlyOworCisJCWZvciAoaSA9IDA7IGkgPCBzdGF0ZS0+bnVtX2N1cnNvcnM7 IGkrKykKKwkJeworCQkJQlRNZXJnZUN1cnNvciAqYyA9ICZzdGF0ZS0+Y3Vyc29yc1tpXTsKKwor CQkJaWYgKCFjLT5leGhhdXN0ZWQgJiYKKwkJCQlidF9tZXJnZV9jdXJzb3JfaW5pdChzdGF0ZSwg c2NhbiwgYywKKwkJCQkJCQkJCSBjLT5wcmVmaXhfdmFsdWUsIGMtPnByZWZpeF9pc251bGwpKQor CQkJeworCQkJCS8qIEN1cnNvciBoYXMgYXQgbGVhc3Qgb25lIHR1cGxlLCBhZGQgdG8gaGVhcCAq LworCQkJCXBhaXJpbmdoZWFwX2FkZChzdGF0ZS0+bWVyZ2VfaGVhcCwgJmMtPnBoX25vZGUpOwor CQkJCXN0YXRlLT5hY3RpdmVfY3Vyc29ycysrOworCQkJfQorCQl9CisJfQorCisJLyogR2V0IHRo ZSBjdXJzb3Igd2l0aCB0aGUgc21hbGxlc3Qgc3VmZml4IHZhbHVlICovCisJaWYgKHBhaXJpbmdo ZWFwX2lzX2VtcHR5KHN0YXRlLT5tZXJnZV9oZWFwKSkKKwkJcmV0dXJuIGZhbHNlOworCisJbm9k ZSA9IHBhaXJpbmdoZWFwX3JlbW92ZV9maXJzdChzdGF0ZS0+bWVyZ2VfaGVhcCk7CisJY3Vyc29y ID0gcGFpcmluZ2hlYXBfY29udGFpbmVyKEJUTWVyZ2VDdXJzb3IsIHBoX25vZGUsIG5vZGUpOwor CisJLyogU2V0IHVwIHRoZSBoZWFwIFRJRCBmcm9tIHRoZSBjdXJyZW50IGN1cnNvciBwb3NpdGlv biAqLworCUFzc2VydChCVFNjYW5Qb3NJc1ZhbGlkKGN1cnNvci0+cG9zKSk7CisJc2Nhbi0+eHNf aGVhcHRpZCA9IGN1cnNvci0+cG9zLml0ZW1zW2N1cnNvci0+cG9zLml0ZW1JbmRleF0uaGVhcFRp ZDsKKworCS8qIEFkdmFuY2UgY3Vyc29yIHRvIG5leHQgdHVwbGUgKi8KKwlpZiAoYnRfbWVyZ2Vf Y3Vyc29yX2FkdmFuY2Uoc3RhdGUsIHNjYW4sIGN1cnNvcikpCisJeworCQkvKiBDdXJzb3Igc3Rp bGwgaGFzIHR1cGxlcywgcmUtYWRkIHRvIGhlYXAgKi8KKwkJcGFpcmluZ2hlYXBfYWRkKHN0YXRl LT5tZXJnZV9oZWFwLCAmY3Vyc29yLT5waF9ub2RlKTsKKwl9CisJZWxzZQorCXsKKwkJLyogQ3Vy c29yIGV4aGF1c3RlZCAqLworCQlzdGF0ZS0+YWN0aXZlX2N1cnNvcnMtLTsKKwl9CisKKwlyZXR1 cm4gdHJ1ZTsKK30KKworCisvKgorICogYnRfbWVyZ2VfZW5kCisgKgkgIENsZWFuIHVwIG1lcmdl IHNjYW4gc3RhdGUuCisgKi8KK3ZvaWQKK2J0X21lcmdlX2VuZChCVE1lcmdlU2NhblN0YXRlICpz dGF0ZSkKK3sKKwlpZiAoc3RhdGUgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJLyogRnJlZSB0aGUg bWVtb3J5IGNvbnRleHQsIHdoaWNoIGZyZWVzIGFsbCBhbGxvY2F0aW9ucyAqLworCU1lbW9yeUNv bnRleHREZWxldGUoc3RhdGUtPm1lcmdlX2NvbnRleHQpOworfQorCisKKy8qCisgKiBidF9tZXJn ZV9jdXJzb3JfaW5pdAorICoJICBJbml0aWFsaXplIGEgY3Vyc29yIGFuZCBwb3NpdGlvbiBpdCBh dCB0aGUgZmlyc3QgbWF0Y2hpbmcgdHVwbGUuCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBj dXJzb3IgZm91bmQgYXQgbGVhc3Qgb25lIG1hdGNoaW5nIHR1cGxlLgorICovCitzdGF0aWMgYm9v bAorYnRfbWVyZ2VfY3Vyc29yX2luaXQoQlRNZXJnZVNjYW5TdGF0ZSAqc3RhdGUsCisJCQkJCSBJ bmRleFNjYW5EZXNjIHNjYW4sCisJCQkJCSBCVE1lcmdlQ3Vyc29yICpjdXJzb3IsCisJCQkJCSBE YXR1bSBwcmVmaXhfdmFsdWUsCisJCQkJCSBib29sIHByZWZpeF9pc251bGwpCit7CisJQlRTY2Fu T3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOworCWJvb2wJCWZvdW5kOwor CisJaWYgKHByZWZpeF9pc251bGwpCisJeworCQljdXJzb3ItPmV4aGF1c3RlZCA9IHRydWU7CisJ CXJldHVybiBmYWxzZTsKKwl9CisKKwkvKgorCSAqIE1vZGlmeSB0aGUgc2NhbiBrZXkgdG8gdXNl IHRoaXMgY3Vyc29yJ3MgcHJlZml4IHZhbHVlLgorCSAqIFdlIHJldXNlIHRoZSBzY2FuJ3MgZXhp c3Rpbmcga2V5IGluZnJhc3RydWN0dXJlLgorCSAqLworCWZvciAoaW50IGkgPSAwOyBpIDwgc28t Pm51bWJlck9mS2V5czsgaSsrKQorCXsKKwkJaWYgKHNvLT5rZXlEYXRhW2ldLnNrX2F0dG5vID09 IHN0YXRlLT5wcmVmaXhfYXR0bm8pCisJCXsKKwkJCXNvLT5rZXlEYXRhW2ldLnNrX2FyZ3VtZW50 ID0gcHJlZml4X3ZhbHVlOworCQkJc28tPmtleURhdGFbaV0uc2tfZmxhZ3MgJj0gfihTS19TRUFS Q0hBUlJBWSk7CisJCQlicmVhazsKKwkJfQorCX0KKworCS8qIEludmFsaWRhdGUgY3VycmVudCBw b3NpdGlvbiB0byBmb3JjZSBfYnRfZmlyc3QgKi8KKwlCVFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5j dXJyUG9zKTsKKworCS8qIERpc2FibGUgYXJyYXkga2V5IGhhbmRsaW5nIGZvciB0aGlzIGN1cnNv cidzIHNjYW4gKi8KKwlzby0+bnVtQXJyYXlLZXlzID0gMDsKKworCS8qIFBvc2l0aW9uIGF0IGZp cnN0IG1hdGNoaW5nIHR1cGxlICovCisJZm91bmQgPSBfYnRfZmlyc3Qoc2Nhbiwgc3RhdGUtPmRp cmVjdGlvbik7CisKKwlpZiAoZm91bmQpCisJeworCQkvKiBDb3B5IHBvc2l0aW9uIHRvIGN1cnNv ciAqLworCQltZW1jcHkoJmN1cnNvci0+cG9zLCAmc28tPmN1cnJQb3MsIHNpemVvZihCVFNjYW5Q b3NEYXRhKSk7CisKKwkJLyogRXh0cmFjdCB0aGUgc29ydCBrZXkgZm9yIGhlYXAgb3JkZXJpbmcg Ki8KKwkJY3Vyc29yLT5zb3J0X2tleSA9IGJ0X21lcmdlX2V4dHJhY3Rfc29ydGtleShzdGF0ZSwg c2NhbiwgY3Vyc29yLAorCQkJCQkJCQkJCQkJCSZjdXJzb3ItPnNvcnRfa2V5X2lzbnVsbCk7CisJ CWN1cnNvci0+ZXhoYXVzdGVkID0gZmFsc2U7CisKKwkJLyogQ291bnQgdGhpcyBhcyBhIHR1cGxl IGFjY2VzcyAqLworCQlzdGF0ZS0+dHVwbGVzX2FjY2Vzc2VkKys7CisKKwkJLyogSW52YWxpZGF0 ZSBtYWluIHNjYW4gcG9zaXRpb24gKi8KKwkJQlRTY2FuUG9zSW52YWxpZGF0ZShzby0+Y3VyclBv cyk7CisJfQorCWVsc2UKKwl7CisJCWN1cnNvci0+ZXhoYXVzdGVkID0gdHJ1ZTsKKwl9CisKKwly ZXR1cm4gZm91bmQ7Cit9CisKKworLyoKKyAqIGJ0X21lcmdlX2N1cnNvcl9hZHZhbmNlCisgKgkg IEFkdmFuY2UgYSBjdXJzb3IgdG8gaXRzIG5leHQgdHVwbGUuCisgKgorICogUmV0dXJucyB0cnVl IGlmIHRoZSBjdXJzb3Igbm93IHBvaW50cyB0byBhIHZhbGlkIHR1cGxlLCBmYWxzZSBpZiBleGhh dXN0ZWQuCisgKi8KK3N0YXRpYyBib29sCitidF9tZXJnZV9jdXJzb3JfYWR2YW5jZShCVE1lcmdl U2NhblN0YXRlICpzdGF0ZSwKKwkJCQkJCUluZGV4U2NhbkRlc2Mgc2NhbiwKKwkJCQkJCUJUTWVy Z2VDdXJzb3IgKmN1cnNvcikKK3sKKwlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVlKSBz Y2FuLT5vcGFxdWU7CisJYm9vbAkJZm91bmQgPSBmYWxzZTsKKworCWlmIChjdXJzb3ItPmV4aGF1 c3RlZCkKKwkJcmV0dXJuIGZhbHNlOworCisJLyogVHJ5IHRvIG1vdmUgdG8gbmV4dCB0dXBsZSB3 aXRoaW4gY3VycmVudCBwYWdlJ3MgaXRlbXMgYXJyYXkgKi8KKwlpZiAoc3RhdGUtPmRpcmVjdGlv biA9PSBGb3J3YXJkU2NhbkRpcmVjdGlvbikKKwl7CisJCWlmIChjdXJzb3ItPnBvcy5pdGVtSW5k ZXggPCBjdXJzb3ItPnBvcy5sYXN0SXRlbSkKKwkJeworCQkJY3Vyc29yLT5wb3MuaXRlbUluZGV4 Kys7CisJCQlmb3VuZCA9IHRydWU7CisJCX0KKwl9CisJZWxzZQorCXsKKwkJaWYgKGN1cnNvci0+ cG9zLml0ZW1JbmRleCA+IGN1cnNvci0+cG9zLmZpcnN0SXRlbSkKKwkJeworCQkJY3Vyc29yLT5w b3MuaXRlbUluZGV4LS07CisJCQlmb3VuZCA9IHRydWU7CisJCX0KKwl9CisKKwlpZiAoIWZvdW5k KQorCXsKKwkJLyoKKwkJICogQ3VycmVudCBwYWdlIGV4aGF1c3RlZC4gVXNlIF9idF9uZXh0IHRv IGdldCB0aGUgbmV4dCBwYWdlLgorCQkgKiBXZSBzd2FwIG91ciBjdXJzb3IncyBwb3NpdGlvbiBp bnRvIHRoZSBzY2FuJ3MgY3VyclBvcywKKwkJICogY2FsbCBfYnRfbmV4dCwgdGhlbiBzd2FwIGJh Y2suCisJCSAqLworCQlCVFNjYW5Qb3NEYXRhIHNhdmVfcG9zOworCisJCW1lbWNweSgmc2F2ZV9w b3MsICZzby0+Y3VyclBvcywgc2l6ZW9mKEJUU2NhblBvc0RhdGEpKTsKKwkJbWVtY3B5KCZzby0+ Y3VyclBvcywgJmN1cnNvci0+cG9zLCBzaXplb2YoQlRTY2FuUG9zRGF0YSkpOworCisJCWZvdW5k ID0gX2J0X25leHQoc2Nhbiwgc3RhdGUtPmRpcmVjdGlvbik7CisKKwkJaWYgKGZvdW5kKQorCQkJ bWVtY3B5KCZjdXJzb3ItPnBvcywgJnNvLT5jdXJyUG9zLCBzaXplb2YoQlRTY2FuUG9zRGF0YSkp OworCisJCW1lbWNweSgmc28tPmN1cnJQb3MsICZzYXZlX3Bvcywgc2l6ZW9mKEJUU2NhblBvc0Rh dGEpKTsKKwl9CisKKwlpZiAoZm91bmQpCisJeworCQkvKiBFeHRyYWN0IG5ldyBzb3J0IGtleSAq LworCQljdXJzb3ItPnNvcnRfa2V5ID0gYnRfbWVyZ2VfZXh0cmFjdF9zb3J0a2V5KHN0YXRlLCBz Y2FuLCBjdXJzb3IsCisJCQkJCQkJCQkJCQkJJmN1cnNvci0+c29ydF9rZXlfaXNudWxsKTsKKwkJ c3RhdGUtPnR1cGxlc19hY2Nlc3NlZCsrOworCX0KKwllbHNlCisJeworCQljdXJzb3ItPmV4aGF1 c3RlZCA9IHRydWU7CisJfQorCisJcmV0dXJuIGZvdW5kOworfQorCisKKy8qCisgKiBidF9tZXJn ZV9leHRyYWN0X3NvcnRrZXkKKyAqCSAgRXh0cmFjdCB0aGUgc29ydCBrZXkgKHN1ZmZpeCBjb2x1 bW4gdmFsdWUpIGZyb20gdGhlIGN1cnJlbnQgdHVwbGUuCisgKi8KK3N0YXRpYyBEYXR1bQorYnRf bWVyZ2VfZXh0cmFjdF9zb3J0a2V5KEJUTWVyZ2VTY2FuU3RhdGUgKnN0YXRlLAorCQkJCQkJIElu ZGV4U2NhbkRlc2Mgc2NhbiwKKwkJCQkJCSBCVE1lcmdlQ3Vyc29yICpjdXJzb3IsCisJCQkJCQkg Ym9vbCAqaXNudWxsKQoreworCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247CisJ QnVmZmVyCQlidWY7CisJUGFnZQkJcGFnZTsKKwlPZmZzZXROdW1iZXIgb2ZmbnVtOworCUl0ZW1J ZAkJaXRlbWlkOworCUluZGV4VHVwbGUJaXR1cDsKKwlUdXBsZURlc2MJdHVwZGVzYzsKKwlEYXR1 bQkJcmVzdWx0OworCisJaWYgKGN1cnNvci0+cG9zLmN1cnJQYWdlID09IEludmFsaWRCbG9ja051 bWJlcikKKwl7CisJCSppc251bGwgPSB0cnVlOworCQlyZXR1cm4gKERhdHVtKSAwOworCX0KKwor CS8qIFJlYWQgdGhlIHBhZ2UgKi8KKwlidWYgPSBSZWFkQnVmZmVyKHJlbCwgY3Vyc29yLT5wb3Mu Y3VyclBhZ2UpOworCUxvY2tCdWZmZXIoYnVmLCBCVF9SRUFEKTsKKwlwYWdlID0gQnVmZmVyR2V0 UGFnZShidWYpOworCisJb2ZmbnVtID0gY3Vyc29yLT5wb3MuaXRlbXNbY3Vyc29yLT5wb3MuaXRl bUluZGV4XS5pbmRleE9mZnNldDsKKwlpdGVtaWQgPSBQYWdlR2V0SXRlbUlkKHBhZ2UsIG9mZm51 bSk7CisJaXR1cCA9IChJbmRleFR1cGxlKSBQYWdlR2V0SXRlbShwYWdlLCBpdGVtaWQpOworCXR1 cGRlc2MgPSBSZWxhdGlvbkdldERlc2NyKHJlbCk7CisKKwkvKiBFeHRyYWN0IHRoZSBzdWZmaXgg Y29sdW1uIHZhbHVlICovCisJcmVzdWx0ID0gaW5kZXhfZ2V0YXR0cihpdHVwLCBzdGF0ZS0+c3Vm Zml4X2F0dG5vLCB0dXBkZXNjLCBpc251bGwpOworCisJLyogQ29weSBwYXNzLWJ5LXJlZmVyZW5j ZSB2YWx1ZXMgYmVmb3JlIHJlbGVhc2luZyBidWZmZXIgKi8KKwlpZiAoISppc251bGwpCisJewor CQlGb3JtX3BnX2F0dHJpYnV0ZSBhdHRyID0gVHVwbGVEZXNjQXR0cih0dXBkZXNjLCBzdGF0ZS0+ c3VmZml4X2F0dG5vIC0gMSk7CisKKwkJaWYgKCFhdHRyLT5hdHRieXZhbCkKKwkJCXJlc3VsdCA9 IGRhdHVtQ29weShyZXN1bHQsIGF0dHItPmF0dGJ5dmFsLCBhdHRyLT5hdHRsZW4pOworCX0KKwor CVVubG9ja1JlbGVhc2VCdWZmZXIoYnVmKTsKKworCXJldHVybiByZXN1bHQ7Cit9CmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0cmVlLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0 cmVlLmgKaW5kZXggNzcyMjQ4NTk2ODUuLjBkNGU3NDQwNzYwIDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS9hY2Nlc3MvbmJ0cmVlLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL25idHJlZS5oCkBA IC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19hbV9kLmgiCiAjaW5jbHVkZSAi Y2F0YWxvZy9wZ19jbGFzcy5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfaW5kZXguaCIKKyNpbmNs dWRlICJsaWIvcGFpcmluZ2hlYXAuaCIKICNpbmNsdWRlICJsaWIvc3RyaW5naW5mby5oIgogI2lu Y2x1ZGUgInN0b3JhZ2UvYnVmbWdyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9kc20uaCIKQEAgLTEw NTAsNiArMTA1MSw0OSBAQCB0eXBlZGVmIHN0cnVjdCBCVEFycmF5S2V5SW5mbwogCVNjYW5LZXkJ CWhpZ2hfY29tcGFyZTsJLyogYXJyYXkncyA8IG9yIDw9IHVwcGVyIGJvdW5kICovCiB9IEJUQXJy YXlLZXlJbmZvOwogCisvKgorICogQlRNZXJnZUN1cnNvciAtIHRyYWNrcyBzY2FuIHN0YXRlIGZv ciBvbmUgcHJlZml4IHZhbHVlIGluIG1lcmdlIHNjYW4KKyAqCisgKiBFYWNoIGN1cnNvciBtYWlu dGFpbnMgaXRzIG93biBwb3NpdGlvbiB3aXRoaW4gdGhlIGluZGV4IGZvciBhIHNwZWNpZmljCisg KiBwcmVmaXggdmFsdWUuIEN1cnNvcnMgYXJlIG9yZ2FuaXplZCBpbiBhIG1pbi1oZWFwIG9yZGVy ZWQgYnkgdGhlaXIKKyAqIGN1cnJlbnQgc3VmZml4IGtleSB2YWx1ZSBmb3IgZWZmaWNpZW50IEst d2F5IG1lcmdlLgorICovCit0eXBlZGVmIHN0cnVjdCBCVE1lcmdlQ3Vyc29yCit7CisJcGFpcmlu Z2hlYXBfbm9kZSBwaF9ub2RlOwkvKiBwYWlyaW5nIGhlYXAgbm9kZSBmb3IgbWVyZ2UgKi8KKwlp bnQJCQljdXJzb3JfaWQ7CQkvKiBpbmRleCBpbiBtZXJnZSBzdGF0ZSdzIGN1cnNvcnMgYXJyYXkg Ki8KKwlEYXR1bQkJcHJlZml4X3ZhbHVlOwkvKiB0aGUgcHJlZml4IHZhbHVlIGZvciB0aGlzIHN1 Yi1zY2FuICovCisJYm9vbAkJcHJlZml4X2lzbnVsbDsJLyogaXMgcHJlZml4IHZhbHVlIE5VTEw/ ICovCisJRGF0dW0JCXNvcnRfa2V5OwkJLyogY3VycmVudCB0dXBsZSdzIHNvcnQga2V5IChzdWZm aXgpICovCisJYm9vbAkJc29ydF9rZXlfaXNudWxsOy8qIGlzIHNvcnQga2V5IE5VTEw/ICovCisJ Ym9vbAkJZXhoYXVzdGVkOwkJLyogbm8gbW9yZSB0dXBsZXMgZm9yIHRoaXMgcHJlZml4ICovCisJ QlRTY2FuUG9zRGF0YSBwb3M7CQkJLyogY3VycmVudCBwb3NpdGlvbiBpbiBpbmRleCAqLworCWNo YXIJICAgKnR1cGxlczsJCQkvKiB0dXBsZSBzdG9yYWdlIHdvcmtzcGFjZSAoQkxDS1NaKSAqLwor fSBCVE1lcmdlQ3Vyc29yOworCisvKgorICogQlRNZXJnZVNjYW5TdGF0ZSAtIHN0YXRlIGZvciBL LXdheSBtZXJnZSBzY2FuCisgKgorICogVGhpcyBzdHJ1Y3R1cmUgbWFuYWdlcyBtdWx0aXBsZSBj dXJzb3JzIGZvciBhIG1lcmdlIHNjYW4sIGFsbG93aW5nCisgKiBsYXp5IGV2YWx1YXRpb24gb2Yg cXVlcmllcyBsaWtlOgorICogICBXSEVSRSBwcmVmaXggSU4gKHYxLCB2MiwgLi4uLCB2SykgQU5E IHN1ZmZpeCA+PSBiIE9SREVSIEJZIHN1ZmZpeCBMSU1JVCBOCisgKi8KK3R5cGVkZWYgc3RydWN0 IEJUTWVyZ2VTY2FuU3RhdGUKK3sKKwlpbnQJCQludW1fY3Vyc29yczsJLyogbnVtYmVyIG9mIHBy ZWZpeCB2YWx1ZXMgKEspICovCisJaW50CQkJYWN0aXZlX2N1cnNvcnM7CS8qIGN1cnNvcnMgbm90 IHlldCBleGhhdXN0ZWQgKi8KKwlCVE1lcmdlQ3Vyc29yICpjdXJzb3JzOwkJLyogYXJyYXkgb2Yg Y3Vyc29ycyAqLworCXBhaXJpbmdoZWFwICptZXJnZV9oZWFwOwkvKiBtaW4taGVhcCBvcmRlcmVk IGJ5IHNvcnRfa2V5ICovCisJaW50CQkJcHJlZml4X2F0dG5vOwkvKiBhdHRyaWJ1dGUgbnVtYmVy IG9mIHByZWZpeCBjb2x1bW4gKDEtYmFzZWQpICovCisJaW50CQkJc3VmZml4X2F0dG5vOwkvKiBh dHRyaWJ1dGUgbnVtYmVyIG9mIHN1ZmZpeCBjb2x1bW4gKDEtYmFzZWQpICovCisJRm1nckluZm8J c3VmZml4X2NtcDsJCS8qIGNvbXBhcmlzb24gZnVuY3Rpb24gZm9yIHN1ZmZpeCAqLworCU9pZAkJ CXN1ZmZpeF9jb2xsYXRpb247CS8qIGNvbGxhdGlvbiBmb3Igc3VmZml4IGNvbXBhcmlzb24gKi8K KwlTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbjsJLyogc2NhbiBkaXJlY3Rpb24gKi8KKwlib29sCQlp bml0aWFsaXplZDsJLyogaGF2ZSBjdXJzb3JzIGJlZW4gaW5pdGlhbGl6ZWQ/ICovCisJTWVtb3J5 Q29udGV4dCBtZXJnZV9jb250ZXh0Oy8qIG1lbW9yeSBjb250ZXh0IGZvciBhbGxvY2F0aW9ucyAq LworCWludDY0CQl0dXBsZXNfYWNjZXNzZWQ7LyogY291bnQgb2YgaW5kZXggdHVwbGVzIGFjY2Vz c2VkICovCit9IEJUTWVyZ2VTY2FuU3RhdGU7CisKIHR5cGVkZWYgc3RydWN0IEJUU2Nhbk9wYXF1 ZURhdGEKIHsKIAkvKiB0aGVzZSBmaWVsZHMgYXJlIHNldCBieSBfYnRfcHJlcHJvY2Vzc19rZXlz KCk6ICovCkBAIC0xMDg5LDYgKzExMzMsMTIgQEAgdHlwZWRlZiBzdHJ1Y3QgQlRTY2FuT3BhcXVl RGF0YQogCSAqLwogCWludAkJCW1hcmtJdGVtSW5kZXg7CS8qIGl0ZW1JbmRleCwgb3IgLTEgaWYg bm90IHZhbGlkICovCiAKKwkvKgorCSAqIE1lcmdlIHNjYW4gc3RhdGUsIGlmIHVzaW5nIG1lcmdl IHNjYW4gb3B0aW1pemF0aW9uLgorCSAqIE5VTEwgaWYgbm90IHVzaW5nIG1lcmdlIHNjYW4uCisJ ICovCisJQlRNZXJnZVNjYW5TdGF0ZSAqbWVyZ2VTdGF0ZTsKKwogCS8qIGtlZXAgdGhlc2UgbGFz dCBpbiBzdHJ1Y3QgZm9yIGVmZmljaWVuY3kgKi8KIAlCVFNjYW5Qb3NEYXRhIGN1cnJQb3M7CQkv KiBjdXJyZW50IHBvc2l0aW9uIGRhdGEgKi8KIAlCVFNjYW5Qb3NEYXRhIG1hcmtQb3M7CQkvKiBt YXJrZWQgcG9zaXRpb24sIGlmIGFueSAqLwpAQCAtMTMzNCw0ICsxMzg0LDE4IEBAIGV4dGVybiBJ bmRleEJ1aWxkUmVzdWx0ICpidGJ1aWxkKFJlbGF0aW9uIGhlYXAsIFJlbGF0aW9uIGluZGV4LAog CQkJCQkJCQkgc3RydWN0IEluZGV4SW5mbyAqaW5kZXhJbmZvKTsKIGV4dGVybiB2b2lkIF9idF9w YXJhbGxlbF9idWlsZF9tYWluKGRzbV9zZWdtZW50ICpzZWcsIHNobV90b2MgKnRvYyk7CiAKKy8q CisgKiBwcm90b3R5cGVzIGZvciBmdW5jdGlvbnMgaW4gbmJ0bWVyZ2VzY2FuLmMKKyAqLworZXh0 ZXJuIEJUTWVyZ2VTY2FuU3RhdGUgKmJ0X21lcmdlX2luaXQoSW5kZXhTY2FuRGVzYyBzY2FuLAor CQkJCQkJCQkJICAgRGF0dW0gKnByZWZpeF92YWx1ZXMsCisJCQkJCQkJCQkgICBib29sICpwcmVm aXhfbnVsbHMsCisJCQkJCQkJCQkgICBpbnQgbnVtX3ByZWZpeGVzLAorCQkJCQkJCQkJICAgaW50 IHByZWZpeF9hdHRubywKKwkJCQkJCQkJCSAgIGludCBzdWZmaXhfYXR0bm8sCisJCQkJCQkJCQkg ICBPaWQgc3VmZml4X2NtcF9vaWQsCisJCQkJCQkJCQkgICBPaWQgc3VmZml4X2NvbGxhdGlvbik7 CitleHRlcm4gYm9vbCBidF9tZXJnZV9nZXRuZXh0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRp cmVjdGlvbiBkaXIpOworZXh0ZXJuIHZvaWQgYnRfbWVyZ2VfZW5kKEJUTWVyZ2VTY2FuU3RhdGUg KnN0YXRlKTsKKwogI2VuZGlmCQkJCQkJCS8qIE5CVFJFRV9IICovCmRpZmYgLS1naXQgYS9zcmMv dGVzdC9tb2R1bGVzL21lc29uLmJ1aWxkIGIvc3JjL3Rlc3QvbW9kdWxlcy9tZXNvbi5idWlsZApp bmRleCAyNjM0YTUxOTkzNS4uYjdiODAyYmZkZGUgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVs ZXMvbWVzb24uYnVpbGQKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9tZXNvbi5idWlsZApAQCAtMTgs NiArMTgsNyBAQCBzdWJkaXIoJ3NzbF9wYXNzcGhyYXNlX2NhbGxiYWNrJykKIHN1YmRpcigndGVz dF9haW8nKQogc3ViZGlyKCd0ZXN0X2JpbmFyeWhlYXAnKQogc3ViZGlyKCd0ZXN0X2JpdG1hcHNl dCcpCitzdWJkaXIoJ3Rlc3RfYnRyZWVfbWVyZ2UnKQogc3ViZGlyKCd0ZXN0X2Jsb29tZmlsdGVy JykKIHN1YmRpcigndGVzdF9jbG9leGVjJykKIHN1YmRpcigndGVzdF9jb3B5X2NhbGxiYWNrcycp CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYnRyZWVfbWVyZ2UvTWFrZWZpbGUg Yi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYnRyZWVfbWVyZ2UvTWFrZWZpbGUKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjU0MDQxNmEyYzkxCi0tLSAvZGV2L251bGwKKysr IGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2J0cmVlX21lcmdlL01ha2VmaWxlCkBAIC0wLDAgKzEs MjQgQEAKKyMgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2J0cmVlX21lcmdlL01ha2VmaWxlCisKK01P RFVMRV9iaWcgPSB0ZXN0X2J0cmVlX21lcmdlCitPQkpTID0gXAorCSQoV0lOMzJSRVMpIFwKKwl0 ZXN0X2J0cmVlX21lcmdlLm8KKworUEdGSUxFREVTQyA9ICJ0ZXN0X2J0cmVlX21lcmdlIC0gdGVz dCBjb2RlIGZvciBidHJlZSBtZXJnZSBzY2FuIgorCitFWFRFTlNJT04gPSB0ZXN0X2J0cmVlX21l cmdlCitEQVRBID0gdGVzdF9idHJlZV9tZXJnZS0tMS4wLnNxbAorCitSRUdSRVNTID0gdGVzdF9i dHJlZV9tZXJnZQorCitpZmRlZiBVU0VfUEdYUworUEdfQ09ORklHID0gcGdfY29uZmlnCitQR1hT IDo9ICQoc2hlbGwgJChQR19DT05GSUcpIC0tcGd4cykKK2luY2x1ZGUgJChQR1hTKQorZWxzZQor c3ViZGlyID0gc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2J0cmVlX21lcmdlCit0b3BfYnVpbGRkaXIg PSAuLi8uLi8uLi8uLgoraW5jbHVkZSAkKHRvcF9idWlsZGRpcikvc3JjL01ha2VmaWxlLmdsb2Jh bAoraW5jbHVkZSAkKHRvcF9zcmNkaXIpL2NvbnRyaWIvY29udHJpYi1nbG9iYWwubWsKK2VuZGlm CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYnRyZWVfbWVyZ2UvZXhwZWN0ZWQv dGVzdF9idHJlZV9tZXJnZS5vdXQgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYnRyZWVfbWVyZ2Uv ZXhwZWN0ZWQvdGVzdF9idHJlZV9tZXJnZS5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAuLmJhZjRkNzkzN2UwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9k dWxlcy90ZXN0X2J0cmVlX21lcmdlL2V4cGVjdGVkL3Rlc3RfYnRyZWVfbWVyZ2Uub3V0CkBAIC0w LDAgKzEsMjQzIEBACistLSBVbml0IHRlc3RzIGZvciBCLXRyZWUgbWVyZ2Ugc2NhbiBpbXBsZW1l bnRhdGlvbgorLS0gVGVzdHMgdGhlIGNvcmUgbWVyZ2Ugc2NhbiBhbGdvcml0aG0gZGlyZWN0bHks IGJ5cGFzc2luZyB0aGUgcGxhbm5lcgorQ1JFQVRFIEVYVEVOU0lPTiB0ZXN0X2J0cmVlX21lcmdl OworLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0gU2V0dXA6IENyZWF0ZSB0ZXN0IHRhYmxlcyB3 aXRoIGtub3duIGRhdGEgZGlzdHJpYnV0aW9ucworLS0gPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0g VGVzdCB0YWJsZSB3aXRoIGludGVnZXIgcHJlZml4IGFuZCBzdWZmaXgKK0NSRUFURSBUQUJMRSBt ZXJnZV90ZXN0X2ludCAoCisgICAgcHJlZml4X2NvbCBpbnQ0LAorICAgIHN1ZmZpeF9jb2wgaW50 NAorKTsKKy0tIEluc2VydCBkYXRhOiAxMCBwcmVmaXggdmFsdWVzLCAxMDAgc3VmZml4IHZhbHVl cyBlYWNoID0gMTAwMCByb3dzCitJTlNFUlQgSU5UTyBtZXJnZV90ZXN0X2ludAorU0VMRUNUIHAs IHMKK0ZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwKSBBUyBwLAorICAgICBnZW5lcmF0ZV9zZXJp ZXMoMSwgMTAwKSBBUyBzOworQ1JFQVRFIElOREVYIG1lcmdlX3Rlc3RfaW50X2lkeCBPTiBtZXJn ZV90ZXN0X2ludCAocHJlZml4X2NvbCwgc3VmZml4X2NvbCk7CitBTkFMWVpFIG1lcmdlX3Rlc3Rf aW50OworLS0gVGVzdCB0YWJsZSB3aXRoIGludGVnZXIgcHJlZml4IGFuZCB0aW1lc3RhbXAgc3Vm Zml4CitDUkVBVEUgVEFCTEUgbWVyZ2VfdGVzdF90cyAoCisgICAgdXNlcl9pZCBpbnQ0LAorICAg IGV2ZW50X3RpbWUgdGltZXN0YW1wCispOworLS0gSW5zZXJ0IGRhdGE6IDUgdXNlcnMsIDEwMCBl dmVudHMgZWFjaAorSU5TRVJUIElOVE8gbWVyZ2VfdGVzdF90cworU0VMRUNUIHUsICcyMDI2LTAx LTAxIDAwOjAwOjAwJzo6dGltZXN0YW1wICsgKGUgfHwgJyBtaW51dGVzJyk6OmludGVydmFsCitG Uk9NIGdlbmVyYXRlX3NlcmllcygxLCA1KSBBUyB1LAorICAgICBnZW5lcmF0ZV9zZXJpZXMoMSwg MTAwKSBBUyBlOworQ1JFQVRFIElOREVYIG1lcmdlX3Rlc3RfdHNfaWR4IE9OIG1lcmdlX3Rlc3Rf dHMgKHVzZXJfaWQsIGV2ZW50X3RpbWUpOworQU5BTFlaRSBtZXJnZV90ZXN0X3RzOworLS0gPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQorLS0gVGVzdCAxOiBCYXNpYyBpbnRlZ2VyIG1lcmdlIHNjYW4KKy0t IFF1ZXJ5OiBXSEVSRSBwcmVmaXggSU4gKDEsMiwzKSBBTkQgc3VmZml4ID49IDUwIExJTUlUIDUK Ky0tIEsgPSAzIHByZWZpeCB2YWx1ZXMsIExJTUlUID0gNQorLS0gRXhwZWN0ZWQgdHVwbGVzIGFj Y2Vzc2VkOiA1ICsgMyAtIDEgPSA3CistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitTRUxFQ1QgJ1Rl c3QgMTogQmFzaWMgaW50ZWdlciBtZXJnZSBzY2FuJyBBUyB0ZXN0X25hbWU7CisgICAgICAgICAg ICB0ZXN0X25hbWUgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgVGVzdCAxOiBCYXNpYyBpbnRlZ2VyIG1lcmdlIHNjYW4KKygxIHJvdykKKworU0VMRUNU ICogRlJPTSB0ZXN0X2J0cmVlX21lcmdlX3NjYW5faW50KAorICAgICdtZXJnZV90ZXN0X2ludCcs CisgICAgJ21lcmdlX3Rlc3RfaW50X2lkeCcsCisgICAgQVJSQVlbMSwgMiwgM10sCisgICAgNTAs CisgICAgNQorKTsKKyB0dXBsZXNfcmV0dXJuZWQgfCB0dXBsZXNfYWNjZXNzZWQgfCBtYXhpbXVt X3JlcXVpcmVkX2ZldGNoZXMgCistLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgNSB8ICAgICAgICAgICAg ICAgOCB8ICAgICAgICAgICAgICAgICAgICAgICAgNworKDEgcm93KQorCistLSA9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09CistLSBUZXN0IDI6IE1vcmUgcHJlZml4IHZhbHVlcworLS0gUXVlcnk6IFdIRVJF IHByZWZpeCBJTiAoMSwyLDMsNCw1KSBBTkQgc3VmZml4ID49IDgwIExJTUlUIDMKKy0tIEsgPSA1 IHByZWZpeCB2YWx1ZXMsIExJTUlUID0gMworLS0gRXhwZWN0ZWQgdHVwbGVzIGFjY2Vzc2VkOiAz ICsgNSAtIDEgPSA3CistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitTRUxFQ1QgJ1Rlc3QgMjogTW9y ZSBwcmVmaXggdmFsdWVzJyBBUyB0ZXN0X25hbWU7CisgICAgICAgICB0ZXN0X25hbWUgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgVGVzdCAyOiBNb3JlIHByZWZpeCB2 YWx1ZXMKKygxIHJvdykKKworU0VMRUNUICogRlJPTSB0ZXN0X2J0cmVlX21lcmdlX3NjYW5faW50 KAorICAgICdtZXJnZV90ZXN0X2ludCcsCisgICAgJ21lcmdlX3Rlc3RfaW50X2lkeCcsCisgICAg QVJSQVlbMSwgMiwgMywgNCwgNV0sCisgICAgODAsCisgICAgMworKTsKKyB0dXBsZXNfcmV0dXJu ZWQgfCB0dXBsZXNfYWNjZXNzZWQgfCBtYXhpbXVtX3JlcXVpcmVkX2ZldGNoZXMgCistLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICAgICAgICAgICAgICAgMyB8ICAgICAgICAgICAgICAgOCB8ICAgICAgICAgICAgICAgICAgICAg ICAgNworKDEgcm93KQorCistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLSBUZXN0IDM6IFNpbmds ZSBwcmVmaXggdmFsdWUgKGRlZ2VuZXJhdGVzIHRvIHJlZ3VsYXIgc2NhbikKKy0tIEsgPSAxLCBM SU1JVCA9IDUKKy0tIEV4cGVjdGVkIHR1cGxlcyBhY2Nlc3NlZDogNSArIDEgLSAxID0gNQorLS0g PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQorU0VMRUNUICdUZXN0IDM6IFNpbmdsZSBwcmVmaXggdmFsdWUn IEFTIHRlc3RfbmFtZTsKKyAgICAgICAgICB0ZXN0X25hbWUgICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIFRlc3QgMzogU2luZ2xlIHByZWZpeCB2YWx1ZQorKDEgcm93 KQorCitTRUxFQ1QgKiBGUk9NIHRlc3RfYnRyZWVfbWVyZ2Vfc2Nhbl9pbnQoCisgICAgJ21lcmdl X3Rlc3RfaW50JywKKyAgICAnbWVyZ2VfdGVzdF9pbnRfaWR4JywKKyAgICBBUlJBWVsxXSwKKyAg ICA1MCwKKyAgICA1CispOworIHR1cGxlc19yZXR1cm5lZCB8IHR1cGxlc19hY2Nlc3NlZCB8IG1h eGltdW1fcmVxdWlyZWRfZmV0Y2hlcyAKKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICA1IHwgICAgICAg ICAgICAgICA2IHwgICAgICAgICAgICAgICAgICAgICAgICA1CisoMSByb3cpCisKKy0tID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KKy0tIFRlc3QgNDogTGFyZ2UgTElNSVQgKG1vcmUgdGhhbiBtYXRjaGlu ZyByb3dzKQorLS0gSyA9IDMsIHByZWZpeCB2YWx1ZXMgdGhhdCBoYXZlIDUxIHJvd3MgZWFjaCAo c3VmZml4ID49IDUwKQorLS0gTElNSVQgPSAyMDAgYnV0IG9ubHkgMTUzIHJvd3MgZXhpc3QKKy0t ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KK1NFTEVDVCAnVGVzdCA0OiBMYXJnZSBMSU1JVCcgQVMgdGVz dF9uYW1lOworICAgICAgdGVzdF9uYW1lICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBU ZXN0IDQ6IExhcmdlIExJTUlUCisoMSByb3cpCisKK1NFTEVDVCAqIEZST00gdGVzdF9idHJlZV9t ZXJnZV9zY2FuX2ludCgKKyAgICAnbWVyZ2VfdGVzdF9pbnQnLAorICAgICdtZXJnZV90ZXN0X2lu dF9pZHgnLAorICAgIEFSUkFZWzEsIDIsIDNdLAorICAgIDUwLAorICAgIDIwMAorKTsKKyB0dXBs ZXNfcmV0dXJuZWQgfCB0dXBsZXNfYWNjZXNzZWQgfCBtYXhpbXVtX3JlcXVpcmVkX2ZldGNoZXMg CistLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorICAgICAgICAgICAgIDE1MyB8ICAgICAgICAgICAgIDE1MyB8ICAgICAgICAgICAg ICAgICAgICAgIDE1MworKDEgcm93KQorCistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLSBUZXN0 IDU6IE5vbi1jb250aWd1b3VzIHByZWZpeCB2YWx1ZXMKKy0tIFF1ZXJ5OiBXSEVSRSBwcmVmaXgg SU4gKDIsNSw4KSBBTkQgc3VmZml4ID49IDUwIExJTUlUIDUKKy0tIFRlc3RzIHRoYXQgbWVyZ2Ug c2NhbiB3b3JrcyB3aXRoIGdhcHMgaW4gcHJlZml4IHZhbHVlcworLS0gSyA9IDMgcHJlZml4IHZh bHVlcyAobm9uLWFkamFjZW50KSwgTElNSVQgPSA1CistLSA9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitT RUxFQ1QgJ1Rlc3QgNTogTm9uLWNvbnRpZ3VvdXMgcHJlZml4IHZhbHVlcycgQVMgdGVzdF9uYW1l OworICAgICAgICAgICAgICB0ZXN0X25hbWUgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgVGVzdCA1OiBOb24tY29udGlndW91cyBwcmVmaXgg dmFsdWVzCisoMSByb3cpCisKK1NFTEVDVCAqIEZST00gdGVzdF9idHJlZV9tZXJnZV9zY2FuX2lu dCgKKyAgICAnbWVyZ2VfdGVzdF9pbnQnLAorICAgICdtZXJnZV90ZXN0X2ludF9pZHgnLAorICAg IEFSUkFZWzIsIDUsIDhdLAorICAgIDUwLAorICAgIDUKKyk7CisgdHVwbGVzX3JldHVybmVkIHwg dHVwbGVzX2FjY2Vzc2VkIHwgbWF4aW11bV9yZXF1aXJlZF9mZXRjaGVzIAorLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAg ICAgICAgICAgIDUgfCAgICAgICAgICAgICAgIDggfCAgICAgICAgICAgICAgICAgICAgICAgIDcK KygxIHJvdykKKworLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0gVGVzdCA2OiBUaW1lc3RhbXAg c3VmZml4IGNvbHVtbgorLS0gUXVlcnk6IFdIRVJFIHVzZXJfaWQgSU4gKDEsMiwzKSBBTkQgZXZl bnRfdGltZSA+PSAnMjAyNi0wMS0wMSAwMTowMDowMCcgTElNSVQgNQorLS0gSyA9IDMsIExJTUlU ID0gNQorLS0gRXhwZWN0ZWQgdHVwbGVzIGFjY2Vzc2VkOiA1ICsgMyAtIDEgPSA3CistLSA9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09CitTRUxFQ1QgJ1Rlc3QgNjogVGltZXN0YW1wIHN1ZmZpeCcgQVMgdGVz dF9uYW1lOworICAgICAgICB0ZXN0X25hbWUgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgVGVzdCA2OiBUaW1lc3RhbXAgc3VmZml4CisoMSByb3cpCisKK1NFTEVDVCAqIEZS T00gdGVzdF9idHJlZV9tZXJnZV9zY2FuX3RzKAorICAgICdtZXJnZV90ZXN0X3RzJywKKyAgICAn bWVyZ2VfdGVzdF90c19pZHgnLAorICAgIEFSUkFZWzEsIDIsIDNdLAorICAgICcyMDI2LTAxLTAx IDAxOjAwOjAwJzo6dGltZXN0YW1wLAorICAgIDUKKyk7CisgdHVwbGVzX3JldHVybmVkIHwgdHVw bGVzX2FjY2Vzc2VkIHwgbWF4aW11bV9yZXF1aXJlZF9mZXRjaGVzIAorLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAg ICAgICAgIDUgfCAgICAgICAgICAgICAgIDggfCAgICAgICAgICAgICAgICAgICAgICAgIDcKKygx IHJvdykKKworLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0gVGVzdCA3OiBBbGwgdXNlcnMgd2l0 aCB0aW1lc3RhbXAKKy0tIEsgPSA1LCBMSU1JVCA9IDEwCistLSBFeHBlY3RlZCB0dXBsZXMgYWNj ZXNzZWQ6IDEwICsgNSAtIDEgPSAxNAorLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorU0VMRUNUICdU ZXN0IDc6IEFsbCB1c2VycyB0aW1lc3RhbXAnIEFTIHRlc3RfbmFtZTsKKyAgICAgICAgICB0ZXN0 X25hbWUgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFRlc3QgNzog QWxsIHVzZXJzIHRpbWVzdGFtcAorKDEgcm93KQorCitTRUxFQ1QgKiBGUk9NIHRlc3RfYnRyZWVf bWVyZ2Vfc2Nhbl90cygKKyAgICAnbWVyZ2VfdGVzdF90cycsCisgICAgJ21lcmdlX3Rlc3RfdHNf aWR4JywKKyAgICBBUlJBWVsxLCAyLCAzLCA0LCA1XSwKKyAgICAnMjAyNi0wMS0wMSAwMDozMDow MCc6OnRpbWVzdGFtcCwKKyAgICAxMAorKTsKKyB0dXBsZXNfcmV0dXJuZWQgfCB0dXBsZXNfYWNj ZXNzZWQgfCBtYXhpbXVtX3JlcXVpcmVkX2ZldGNoZXMgCistLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAx MCB8ICAgICAgICAgICAgICAxNSB8ICAgICAgICAgICAgICAgICAgICAgICAxNAorKDEgcm93KQor CistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09CistLSBUZXN0IDg6IENvcnJlY3RuZXNzIHZlcmlmaWNh dGlvbgorLS0gVmVyaWZ5IG1lcmdlIHNjYW4gcmV0dXJucyByb3dzIGluIGV4YWN0IE9SREVSIEJZ IHN1ZmZpeF9jb2wsIHByZWZpeF9jb2wgb3JkZXIKKy0tIFVzaW5nIFdJVEggT1JESU5BTElUWSB0 byBjb21wYXJlIHJvdyBwb3NpdGlvbnMKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1NFTEVDVCAn VGVzdCA4OiBDb3JyZWN0bmVzcyB2ZXJpZmljYXRpb24nIEFTIHRlc3RfbmFtZTsKKyAgICAgICAg ICAgIHRlc3RfbmFtZSAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBUZXN0IDg6IENvcnJlY3RuZXNzIHZlcmlmaWNhdGlvbgorKDEgcm93KQorCistLSBD b21wYXJlIG1lcmdlIHNjYW4gdnMgcmVndWxhciBxdWVyeSB3aXRoIHJvdyBwb3NpdGlvbnMgKHNo b3VsZCBiZSBlbXB0eSkKK1dJVEggbWVyZ2VfcmVzdWx0IEFTICgKKyAgICBTRUxFQ1Qgcm93X251 bWJlcigpIE9WRVIgKCkgQVMgcm4sIHByZWZpeF9jb2wsIHN1ZmZpeF9jb2wKKyAgICBGUk9NIHRl c3RfYnRyZWVfbWVyZ2VfZmV0Y2hfaW50KAorICAgICAgICAnbWVyZ2VfdGVzdF9pbnQnLAorICAg ICAgICAnbWVyZ2VfdGVzdF9pbnRfaWR4JywKKyAgICAgICAgQVJSQVlbMSwgMiwgM10sCisgICAg ICAgIDkwLAorICAgICAgICAxMAorICAgICkKKyksCityZWd1bGFyX3Jlc3VsdCBBUyAoCisgICAg U0VMRUNUIHJvd19udW1iZXIoKSBPVkVSICgpIEFTIHJuLCBwcmVmaXhfY29sLCBzdWZmaXhfY29s CisgICAgRlJPTSAoCisgICAgICAgIFNFTEVDVCBwcmVmaXhfY29sLCBzdWZmaXhfY29sCisgICAg ICAgIEZST00gbWVyZ2VfdGVzdF9pbnQKKyAgICAgICAgV0hFUkUgcHJlZml4X2NvbCBJTiAoMSwg MiwgMykgQU5EIHN1ZmZpeF9jb2wgPj0gOTAKKyAgICAgICAgT1JERVIgQlkgc3VmZml4X2NvbCwg cHJlZml4X2NvbAorICAgICAgICBMSU1JVCAxMAorICAgICkgdAorKQorU0VMRUNUICdNSVNNQVRD SCcgQVMgc3RhdHVzLCBtLnJuLCBtLnByZWZpeF9jb2wsIG0uc3VmZml4X2NvbCwKKyAgICAgICBy LnByZWZpeF9jb2wgQVMgZXhwZWN0ZWRfcHJlZml4LCByLnN1ZmZpeF9jb2wgQVMgZXhwZWN0ZWRf c3VmZml4CitGUk9NIG1lcmdlX3Jlc3VsdCBtCitGVUxMIE9VVEVSIEpPSU4gcmVndWxhcl9yZXN1 bHQgciBPTiBtLnJuID0gci5ybgorV0hFUkUgbS5wcmVmaXhfY29sIElTIERJU1RJTkNUIEZST00g ci5wcmVmaXhfY29sCisgICBPUiBtLnN1ZmZpeF9jb2wgSVMgRElTVElOQ1QgRlJPTSByLnN1ZmZp eF9jb2w7Cisgc3RhdHVzIHwgcm4gfCBwcmVmaXhfY29sIHwgc3VmZml4X2NvbCB8IGV4cGVjdGVk X3ByZWZpeCB8IGV4cGVjdGVkX3N1ZmZpeCAKKy0tLS0tLS0tKy0tLS0rLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLQorKDAgcm93cykK KworLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0gQ2xlYW51cAorLS0gPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQorRFJPUCBUQUJMRSBtZXJnZV90ZXN0X2ludDsKK0RST1AgVEFCTEUgbWVyZ2VfdGVzdF90 czsKK0RST1AgRVhURU5TSU9OIHRlc3RfYnRyZWVfbWVyZ2U7CmRpZmYgLS1naXQgYS9zcmMvdGVz dC9tb2R1bGVzL3Rlc3RfYnRyZWVfbWVyZ2UvbWVzb24uYnVpbGQgYi9zcmMvdGVzdC9tb2R1bGVz L3Rlc3RfYnRyZWVfbWVyZ2UvbWVzb24uYnVpbGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAuLjY2NWQ2Y2Y0NDNlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9k dWxlcy90ZXN0X2J0cmVlX21lcmdlL21lc29uLmJ1aWxkCkBAIC0wLDAgKzEsMzMgQEAKKyMgQ29w eXJpZ2h0IChjKSAyMDI2LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorCit0 ZXN0X2J0cmVlX21lcmdlX3NvdXJjZXMgPSBmaWxlcygKKyAgJ3Rlc3RfYnRyZWVfbWVyZ2UuYycs CispCisKK2lmIGhvc3Rfc3lzdGVtID09ICd3aW5kb3dzJworICB0ZXN0X2J0cmVlX21lcmdlX3Nv dXJjZXMgKz0gcmNfbGliX2dlbi5wcm9jZXNzKHdpbjMydmVyX3JjLCBleHRyYV9hcmdzOiBbCisg ICAgJy0tTkFNRScsICd0ZXN0X2J0cmVlX21lcmdlJywKKyAgICAnLS1GSUxFREVTQycsICd0ZXN0 X2J0cmVlX21lcmdlIC0gdGVzdCBjb2RlIGZvciBidHJlZSBtZXJnZSBzY2FuJyxdKQorZW5kaWYK KwordGVzdF9idHJlZV9tZXJnZSA9IHNoYXJlZF9tb2R1bGUoJ3Rlc3RfYnRyZWVfbWVyZ2UnLAor ICB0ZXN0X2J0cmVlX21lcmdlX3NvdXJjZXMsCisgIGt3YXJnczogcGdfdGVzdF9tb2RfYXJncywK KykKK3Rlc3RfaW5zdGFsbF9saWJzICs9IHRlc3RfYnRyZWVfbWVyZ2UKKwordGVzdF9pbnN0YWxs X2RhdGEgKz0gZmlsZXMoCisgICd0ZXN0X2J0cmVlX21lcmdlLmNvbnRyb2wnLAorICAndGVzdF9i dHJlZV9tZXJnZS0tMS4wLnNxbCcsCispCisKK3Rlc3RzICs9IHsKKyAgJ25hbWUnOiAndGVzdF9i dHJlZV9tZXJnZScsCisgICdzZCc6IG1lc29uLmN1cnJlbnRfc291cmNlX2RpcigpLAorICAnYmQn OiBtZXNvbi5jdXJyZW50X2J1aWxkX2RpcigpLAorICAncmVncmVzcyc6IHsKKyAgICAnc3FsJzog WworICAgICAgJ3Rlc3RfYnRyZWVfbWVyZ2UnLAorICAgIF0sCisgIH0sCit9CmRpZmYgLS1naXQg YS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYnRyZWVfbWVyZ2Uvc3FsL3Rlc3RfYnRyZWVfbWVyZ2Uu c3FsIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2J0cmVlX21lcmdlL3NxbC90ZXN0X2J0cmVlX21l cmdlLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNTgyOGIzNDNi MzQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYnRyZWVfbWVyZ2Uv c3FsL3Rlc3RfYnRyZWVfbWVyZ2Uuc3FsCkBAIC0wLDAgKzEsMjA3IEBACistLSBVbml0IHRlc3Rz IGZvciBCLXRyZWUgbWVyZ2Ugc2NhbiBpbXBsZW1lbnRhdGlvbgorLS0gVGVzdHMgdGhlIGNvcmUg bWVyZ2Ugc2NhbiBhbGdvcml0aG0gZGlyZWN0bHksIGJ5cGFzc2luZyB0aGUgcGxhbm5lcgorCitD UkVBVEUgRVhURU5TSU9OIHRlc3RfYnRyZWVfbWVyZ2U7CisKKy0tID09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KKy0tIFNldHVwOiBDcmVhdGUgdGVzdCB0YWJsZXMgd2l0aCBrbm93biBkYXRhIGRpc3RyaWJ1 dGlvbnMKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLS0gVGVzdCB0YWJsZSB3aXRoIGludGVn ZXIgcHJlZml4IGFuZCBzdWZmaXgKK0NSRUFURSBUQUJMRSBtZXJnZV90ZXN0X2ludCAoCisgICAg cHJlZml4X2NvbCBpbnQ0LAorICAgIHN1ZmZpeF9jb2wgaW50NAorKTsKKworLS0gSW5zZXJ0IGRh dGE6IDEwIHByZWZpeCB2YWx1ZXMsIDEwMCBzdWZmaXggdmFsdWVzIGVhY2ggPSAxMDAwIHJvd3MK K0lOU0VSVCBJTlRPIG1lcmdlX3Rlc3RfaW50CitTRUxFQ1QgcCwgcworRlJPTSBnZW5lcmF0ZV9z ZXJpZXMoMSwgMTApIEFTIHAsCisgICAgIGdlbmVyYXRlX3NlcmllcygxLCAxMDApIEFTIHM7CisK K0NSRUFURSBJTkRFWCBtZXJnZV90ZXN0X2ludF9pZHggT04gbWVyZ2VfdGVzdF9pbnQgKHByZWZp eF9jb2wsIHN1ZmZpeF9jb2wpOworQU5BTFlaRSBtZXJnZV90ZXN0X2ludDsKKworLS0gVGVzdCB0 YWJsZSB3aXRoIGludGVnZXIgcHJlZml4IGFuZCB0aW1lc3RhbXAgc3VmZml4CitDUkVBVEUgVEFC TEUgbWVyZ2VfdGVzdF90cyAoCisgICAgdXNlcl9pZCBpbnQ0LAorICAgIGV2ZW50X3RpbWUgdGlt ZXN0YW1wCispOworCistLSBJbnNlcnQgZGF0YTogNSB1c2VycywgMTAwIGV2ZW50cyBlYWNoCitJ TlNFUlQgSU5UTyBtZXJnZV90ZXN0X3RzCitTRUxFQ1QgdSwgJzIwMjYtMDEtMDEgMDA6MDA6MDAn Ojp0aW1lc3RhbXAgKyAoZSB8fCAnIG1pbnV0ZXMnKTo6aW50ZXJ2YWwKK0ZST00gZ2VuZXJhdGVf c2VyaWVzKDEsIDUpIEFTIHUsCisgICAgIGdlbmVyYXRlX3NlcmllcygxLCAxMDApIEFTIGU7CisK K0NSRUFURSBJTkRFWCBtZXJnZV90ZXN0X3RzX2lkeCBPTiBtZXJnZV90ZXN0X3RzICh1c2VyX2lk LCBldmVudF90aW1lKTsKK0FOQUxZWkUgbWVyZ2VfdGVzdF90czsKKworCistLSA9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09CistLSBUZXN0IDE6IEJhc2ljIGludGVnZXIgbWVyZ2Ugc2NhbgorLS0gUXVlcnk6 IFdIRVJFIHByZWZpeCBJTiAoMSwyLDMpIEFORCBzdWZmaXggPj0gNTAgTElNSVQgNQorLS0gSyA9 IDMgcHJlZml4IHZhbHVlcywgTElNSVQgPSA1CistLSBFeHBlY3RlZCB0dXBsZXMgYWNjZXNzZWQ6 IDUgKyAzIC0gMSA9IDcKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworU0VMRUNUICdUZXN0IDE6 IEJhc2ljIGludGVnZXIgbWVyZ2Ugc2NhbicgQVMgdGVzdF9uYW1lOworCitTRUxFQ1QgKiBGUk9N IHRlc3RfYnRyZWVfbWVyZ2Vfc2Nhbl9pbnQoCisgICAgJ21lcmdlX3Rlc3RfaW50JywKKyAgICAn bWVyZ2VfdGVzdF9pbnRfaWR4JywKKyAgICBBUlJBWVsxLCAyLCAzXSwKKyAgICA1MCwKKyAgICA1 CispOworCisKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tIFRlc3QgMjogTW9yZSBwcmVmaXgg dmFsdWVzCistLSBRdWVyeTogV0hFUkUgcHJlZml4IElOICgxLDIsMyw0LDUpIEFORCBzdWZmaXgg Pj0gODAgTElNSVQgMworLS0gSyA9IDUgcHJlZml4IHZhbHVlcywgTElNSVQgPSAzCistLSBFeHBl Y3RlZCB0dXBsZXMgYWNjZXNzZWQ6IDMgKyA1IC0gMSA9IDcKKy0tID09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KKworU0VMRUNUICdUZXN0IDI6IE1vcmUgcHJlZml4IHZhbHVlcycgQVMgdGVzdF9uYW1lOwor CitTRUxFQ1QgKiBGUk9NIHRlc3RfYnRyZWVfbWVyZ2Vfc2Nhbl9pbnQoCisgICAgJ21lcmdlX3Rl c3RfaW50JywKKyAgICAnbWVyZ2VfdGVzdF9pbnRfaWR4JywKKyAgICBBUlJBWVsxLCAyLCAzLCA0 LCA1XSwKKyAgICA4MCwKKyAgICAzCispOworCisKKy0tID09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0t IFRlc3QgMzogU2luZ2xlIHByZWZpeCB2YWx1ZSAoZGVnZW5lcmF0ZXMgdG8gcmVndWxhciBzY2Fu KQorLS0gSyA9IDEsIExJTUlUID0gNQorLS0gRXhwZWN0ZWQgdHVwbGVzIGFjY2Vzc2VkOiA1ICsg MSAtIDEgPSA1CistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1NFTEVDVCAnVGVzdCAzOiBTaW5n bGUgcHJlZml4IHZhbHVlJyBBUyB0ZXN0X25hbWU7CisKK1NFTEVDVCAqIEZST00gdGVzdF9idHJl ZV9tZXJnZV9zY2FuX2ludCgKKyAgICAnbWVyZ2VfdGVzdF9pbnQnLAorICAgICdtZXJnZV90ZXN0 X2ludF9pZHgnLAorICAgIEFSUkFZWzFdLAorICAgIDUwLAorICAgIDUKKyk7CisKKworLS0gPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQorLS0gVGVzdCA0OiBMYXJnZSBMSU1JVCAobW9yZSB0aGFuIG1hdGNo aW5nIHJvd3MpCistLSBLID0gMywgcHJlZml4IHZhbHVlcyB0aGF0IGhhdmUgNTEgcm93cyBlYWNo IChzdWZmaXggPj0gNTApCistLSBMSU1JVCA9IDIwMCBidXQgb25seSAxNTMgcm93cyBleGlzdAor LS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQorCitTRUxFQ1QgJ1Rlc3QgNDogTGFyZ2UgTElNSVQnIEFT IHRlc3RfbmFtZTsKKworU0VMRUNUICogRlJPTSB0ZXN0X2J0cmVlX21lcmdlX3NjYW5faW50KAor ICAgICdtZXJnZV90ZXN0X2ludCcsCisgICAgJ21lcmdlX3Rlc3RfaW50X2lkeCcsCisgICAgQVJS QVlbMSwgMiwgM10sCisgICAgNTAsCisgICAgMjAwCispOworCisKKy0tID09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KKy0tIFRlc3QgNTogTm9uLWNvbnRpZ3VvdXMgcHJlZml4IHZhbHVlcworLS0gUXVlcnk6 IFdIRVJFIHByZWZpeCBJTiAoMiw1LDgpIEFORCBzdWZmaXggPj0gNTAgTElNSVQgNQorLS0gVGVz dHMgdGhhdCBtZXJnZSBzY2FuIHdvcmtzIHdpdGggZ2FwcyBpbiBwcmVmaXggdmFsdWVzCistLSBL ID0gMyBwcmVmaXggdmFsdWVzIChub24tYWRqYWNlbnQpLCBMSU1JVCA9IDUKKy0tID09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KKworU0VMRUNUICdUZXN0IDU6IE5vbi1jb250aWd1b3VzIHByZWZpeCB2YWx1 ZXMnIEFTIHRlc3RfbmFtZTsKKworU0VMRUNUICogRlJPTSB0ZXN0X2J0cmVlX21lcmdlX3NjYW5f aW50KAorICAgICdtZXJnZV90ZXN0X2ludCcsCisgICAgJ21lcmdlX3Rlc3RfaW50X2lkeCcsCisg ICAgQVJSQVlbMiwgNSwgOF0sCisgICAgNTAsCisgICAgNQorKTsKKworCistLSA9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09CistLSBUZXN0IDY6IFRpbWVzdGFtcCBzdWZmaXggY29sdW1uCistLSBRdWVyeTog V0hFUkUgdXNlcl9pZCBJTiAoMSwyLDMpIEFORCBldmVudF90aW1lID49ICcyMDI2LTAxLTAxIDAx OjAwOjAwJyBMSU1JVCA1CistLSBLID0gMywgTElNSVQgPSA1CistLSBFeHBlY3RlZCB0dXBsZXMg YWNjZXNzZWQ6IDUgKyAzIC0gMSA9IDcKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworU0VMRUNU ICdUZXN0IDY6IFRpbWVzdGFtcCBzdWZmaXgnIEFTIHRlc3RfbmFtZTsKKworU0VMRUNUICogRlJP TSB0ZXN0X2J0cmVlX21lcmdlX3NjYW5fdHMoCisgICAgJ21lcmdlX3Rlc3RfdHMnLAorICAgICdt ZXJnZV90ZXN0X3RzX2lkeCcsCisgICAgQVJSQVlbMSwgMiwgM10sCisgICAgJzIwMjYtMDEtMDEg MDE6MDA6MDAnOjp0aW1lc3RhbXAsCisgICAgNQorKTsKKworCistLSA9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09CistLSBUZXN0IDc6IEFsbCB1c2VycyB3aXRoIHRpbWVzdGFtcAorLS0gSyA9IDUsIExJTUlU ID0gMTAKKy0tIEV4cGVjdGVkIHR1cGxlcyBhY2Nlc3NlZDogMTAgKyA1IC0gMSA9IDE0CistLSA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09CisKK1NFTEVDVCAnVGVzdCA3OiBBbGwgdXNlcnMgdGltZXN0YW1w JyBBUyB0ZXN0X25hbWU7CisKK1NFTEVDVCAqIEZST00gdGVzdF9idHJlZV9tZXJnZV9zY2FuX3Rz KAorICAgICdtZXJnZV90ZXN0X3RzJywKKyAgICAnbWVyZ2VfdGVzdF90c19pZHgnLAorICAgIEFS UkFZWzEsIDIsIDMsIDQsIDVdLAorICAgICcyMDI2LTAxLTAxIDAwOjMwOjAwJzo6dGltZXN0YW1w LAorICAgIDEwCispOworCisKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tIFRlc3QgODogQ29y cmVjdG5lc3MgdmVyaWZpY2F0aW9uCistLSBWZXJpZnkgbWVyZ2Ugc2NhbiByZXR1cm5zIHJvd3Mg aW4gZXhhY3QgT1JERVIgQlkgc3VmZml4X2NvbCwgcHJlZml4X2NvbCBvcmRlcgorLS0gVXNpbmcg V0lUSCBPUkRJTkFMSVRZIHRvIGNvbXBhcmUgcm93IHBvc2l0aW9ucworLS0gPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQorCitTRUxFQ1QgJ1Rlc3QgODogQ29ycmVjdG5lc3MgdmVyaWZpY2F0aW9uJyBBUyB0 ZXN0X25hbWU7CisKKy0tIENvbXBhcmUgbWVyZ2Ugc2NhbiB2cyByZWd1bGFyIHF1ZXJ5IHdpdGgg cm93IHBvc2l0aW9ucyAoc2hvdWxkIGJlIGVtcHR5KQorV0lUSCBtZXJnZV9yZXN1bHQgQVMgKAor ICAgIFNFTEVDVCByb3dfbnVtYmVyKCkgT1ZFUiAoKSBBUyBybiwgcHJlZml4X2NvbCwgc3VmZml4 X2NvbAorICAgIEZST00gdGVzdF9idHJlZV9tZXJnZV9mZXRjaF9pbnQoCisgICAgICAgICdtZXJn ZV90ZXN0X2ludCcsCisgICAgICAgICdtZXJnZV90ZXN0X2ludF9pZHgnLAorICAgICAgICBBUlJB WVsxLCAyLCAzXSwKKyAgICAgICAgOTAsCisgICAgICAgIDEwCisgICAgKQorKSwKK3JlZ3VsYXJf cmVzdWx0IEFTICgKKyAgICBTRUxFQ1Qgcm93X251bWJlcigpIE9WRVIgKCkgQVMgcm4sIHByZWZp eF9jb2wsIHN1ZmZpeF9jb2wKKyAgICBGUk9NICgKKyAgICAgICAgU0VMRUNUIHByZWZpeF9jb2ws IHN1ZmZpeF9jb2wKKyAgICAgICAgRlJPTSBtZXJnZV90ZXN0X2ludAorICAgICAgICBXSEVSRSBw cmVmaXhfY29sIElOICgxLCAyLCAzKSBBTkQgc3VmZml4X2NvbCA+PSA5MAorICAgICAgICBPUkRF UiBCWSBzdWZmaXhfY29sLCBwcmVmaXhfY29sCisgICAgICAgIExJTUlUIDEwCisgICAgKSB0Cisp CitTRUxFQ1QgJ01JU01BVENIJyBBUyBzdGF0dXMsIG0ucm4sIG0ucHJlZml4X2NvbCwgbS5zdWZm aXhfY29sLAorICAgICAgIHIucHJlZml4X2NvbCBBUyBleHBlY3RlZF9wcmVmaXgsIHIuc3VmZml4 X2NvbCBBUyBleHBlY3RlZF9zdWZmaXgKK0ZST00gbWVyZ2VfcmVzdWx0IG0KK0ZVTEwgT1VURVIg Sk9JTiByZWd1bGFyX3Jlc3VsdCByIE9OIG0ucm4gPSByLnJuCitXSEVSRSBtLnByZWZpeF9jb2wg SVMgRElTVElOQ1QgRlJPTSByLnByZWZpeF9jb2wKKyAgIE9SIG0uc3VmZml4X2NvbCBJUyBESVNU SU5DVCBGUk9NIHIuc3VmZml4X2NvbDsKKworCistLSA9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLSBD bGVhbnVwCistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0RST1AgVEFCTEUgbWVyZ2VfdGVzdF9p bnQ7CitEUk9QIFRBQkxFIG1lcmdlX3Rlc3RfdHM7CitEUk9QIEVYVEVOU0lPTiB0ZXN0X2J0cmVl X21lcmdlOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2J0cmVlX21lcmdlL3Rl c3RfYnRyZWVfbWVyZ2UtLTEuMC5zcWwgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYnRyZWVfbWVy Z2UvdGVzdF9idHJlZV9tZXJnZS0tMS4wLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMC4uOTg3Mjk0N2Q3ZDcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1 bGVzL3Rlc3RfYnRyZWVfbWVyZ2UvdGVzdF9idHJlZV9tZXJnZS0tMS4wLnNxbApAQCAtMCwwICsx LDQzIEBACisvKiBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYnRyZWVfbWVyZ2UvdGVzdF9idHJlZV9t ZXJnZS0tMS4wLnNxbCAqLworCistLSBjb21wbGFpbiBpZiBzY3JpcHQgaXMgc291cmNlZCBpbiBw c3FsLCByYXRoZXIgdGhhbiB2aWEgQ1JFQVRFIEVYVEVOU0lPTgorXGVjaG8gVXNlICJDUkVBVEUg RVhURU5TSU9OIHRlc3RfYnRyZWVfbWVyZ2UiIHRvIGxvYWQgdGhpcyBmaWxlLiBccXVpdAorCist LSBUZXN0IG1lcmdlIHNjYW4gd2l0aCBpbnRlZ2VyIGNvbHVtbnMKK0NSRUFURSBGVU5DVElPTiB0 ZXN0X2J0cmVlX21lcmdlX3NjYW5faW50KAorICAgIHRhYmxlX25hbWUgdGV4dCwKKyAgICBpbmRl eF9uYW1lIHRleHQsCisgICAgcHJlZml4X3ZhbHVlcyBpbnQ0W10sCisgICAgc3VmZml4X3N0YXJ0 IGludDQsCisgICAgbGltaXRfY291bnQgaW50NAorKSBSRVRVUk5TIFRBQkxFICgKKyAgICB0dXBs ZXNfcmV0dXJuZWQgaW50NCwKKyAgICB0dXBsZXNfYWNjZXNzZWQgaW50NCwKKyAgICBtYXhpbXVt X3JlcXVpcmVkX2ZldGNoZXMgaW50NAorKSBBUyAnTU9EVUxFX1BBVEhOQU1FJyBMQU5HVUFHRSBD IFNUUklDVDsKKworLS0gRmV0Y2ggYWN0dWFsIHJvd3MgZnJvbSBtZXJnZSBzY2FuIChmb3IgY29y cmVjdG5lc3MgdmVyaWZpY2F0aW9uKQorQ1JFQVRFIEZVTkNUSU9OIHRlc3RfYnRyZWVfbWVyZ2Vf ZmV0Y2hfaW50KAorICAgIHRhYmxlX25hbWUgdGV4dCwKKyAgICBpbmRleF9uYW1lIHRleHQsCisg ICAgcHJlZml4X3ZhbHVlcyBpbnQ0W10sCisgICAgc3VmZml4X3N0YXJ0IGludDQsCisgICAgbGlt aXRfY291bnQgaW50NAorKSBSRVRVUk5TIFRBQkxFICgKKyAgICBwcmVmaXhfY29sIGludDQsCisg ICAgc3VmZml4X2NvbCBpbnQ0CispIEFTICdNT0RVTEVfUEFUSE5BTUUnIExBTkdVQUdFIEMgU1RS SUNUOworCistLSBUZXN0IG1lcmdlIHNjYW4gd2l0aCB0aW1lc3RhbXAgc3VmZml4CitDUkVBVEUg RlVOQ1RJT04gdGVzdF9idHJlZV9tZXJnZV9zY2FuX3RzKAorICAgIHRhYmxlX25hbWUgdGV4dCwK KyAgICBpbmRleF9uYW1lIHRleHQsCisgICAgcHJlZml4X3ZhbHVlcyBpbnQ0W10sCisgICAgc3Vm Zml4X3N0YXJ0IHRpbWVzdGFtcCwKKyAgICBsaW1pdF9jb3VudCBpbnQ0CispIFJFVFVSTlMgVEFC TEUgKAorICAgIHR1cGxlc19yZXR1cm5lZCBpbnQ0LAorICAgIHR1cGxlc19hY2Nlc3NlZCBpbnQ0 LAorICAgIG1heGltdW1fcmVxdWlyZWRfZmV0Y2hlcyBpbnQ0CispIEFTICdNT0RVTEVfUEFUSE5B TUUnIExBTkdVQUdFIEMgU1RSSUNUOworCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rl c3RfYnRyZWVfbWVyZ2UvdGVzdF9idHJlZV9tZXJnZS5jIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0 X2J0cmVlX21lcmdlL3Rlc3RfYnRyZWVfbWVyZ2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwMC4uNzhiMjIxMzBlY2YKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9t b2R1bGVzL3Rlc3RfYnRyZWVfbWVyZ2UvdGVzdF9idHJlZV9tZXJnZS5jCkBAIC0wLDAgKzEsMzg5 IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiB0ZXN0X2J0cmVlX21lcmdlLmMKKyAqCQlV bml0IHRlc3RzIGZvciBCLXRyZWUgTWVyZ2UgU2NhbiBpbXBsZW1lbnRhdGlvbgorICoKKyAqIFRo aXMgbW9kdWxlIHByb3ZpZGVzIFNRTC1jYWxsYWJsZSBmdW5jdGlvbnMgdG8gZGlyZWN0bHkgdGVz dCB0aGUKKyAqIG1lcmdlIHNjYW4gYWxnb3JpdGhtIHdpdGhvdXQgZ29pbmcgdGhyb3VnaCB0aGUg cGxhbm5lci4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMjYsIFBvc3RncmVTUUwgR2xvYmFsIERl dmVsb3BtZW50IEdyb3VwCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpbmNsdWRlICJw b3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAiYWNjZXNzL2hlYXBhbS5oIgorI2luY2x1ZGUgImFjY2Vz cy9uYnRyZWUuaCIKKyNpbmNsdWRlICJhY2Nlc3MvdGFibGUuaCIKKyNpbmNsdWRlICJjYXRhbG9n L25hbWVzcGFjZS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfYW0uaCIKKyNpbmNsdWRlICJjYXRh bG9nL3BnX3R5cGUuaCIKKyNpbmNsdWRlICJjb21tYW5kcy9kZWZyZW0uaCIKKyNpbmNsdWRlICJm dW5jYXBpLmgiCisjaW5jbHVkZSAibWlzY2FkbWluLmgiCisjaW5jbHVkZSAidXRpbHMvYXJyYXku aCIKKyNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgorI2luY2x1ZGUgInV0aWxzL2ZtZ3JvaWRz LmgiCisjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCisjaW5jbHVkZSAidXRpbHMvc25hcG1n ci5oIgorI2luY2x1ZGUgInV0aWxzL3RpbWVzdGFtcC5oIgorCitQR19NT0RVTEVfTUFHSUM7CisK KyNkZWZpbmUgTUFYX1JFU1VMVFMgMTAwMDAKKworLyoKKyAqIE1lcmdlU2NhblJlc3VsdCAtIGhv bGRzIHJlc3VsdHMgZnJvbSBhIG1lcmdlIHNjYW4gZXhlY3V0aW9uCisgKi8KK3R5cGVkZWYgc3Ry dWN0IE1lcmdlU2NhblJlc3VsdAoreworCWludAkJCXR1cGxlc19yZXR1cm5lZDsKKwlpbnQ2NAkJ dHVwbGVzX2FjY2Vzc2VkOworCWludAkJCW51bV9wcmVmaXhlczsKKwlpbnQJCQlsaW1pdF9jb3Vu dDsKKwkvKiBGb3IgZmV0Y2ggZnVuY3Rpb246IGNvbGxlY3RlZCByb3cgZGF0YSAqLworCWludDMy CSAgICpwcmVmaXhlczsKKwlpbnQzMgkgICAqc3VmZml4ZXM7Cit9IE1lcmdlU2NhblJlc3VsdDsK KworLyoKKyAqIGRvX21lcmdlX3NjYW4gLSBjb21tb24gbWVyZ2Ugc2NhbiBleGVjdXRpb24KKyAq CisgKiBQZXJmb3JtcyBhIG1lcmdlIHNjYW4gd2l0aCB0aGUgZ2l2ZW4gcGFyYW1ldGVycyBhbmQg Y29sbGVjdHMgcmVzdWx0cy4KKyAqIElmIGNvbGxlY3Rfcm93cyBpcyB0cnVlLCBmZXRjaGVzIGFu ZCBzdG9yZXMgYWN0dWFsIHJvdyBkYXRhLgorICovCitzdGF0aWMgdm9pZAorZG9fbWVyZ2Vfc2Nh bihjb25zdCBjaGFyICp0YWJsZV9uYW1lLAorCQkJICBjb25zdCBjaGFyICppbmRleF9uYW1lLAor CQkJICBEYXR1bSAqcHJlZml4X3ZhbHVlcywKKwkJCSAgYm9vbCAqcHJlZml4X251bGxzLAorCQkJ ICBpbnQgbnVtX3ByZWZpeGVzLAorCQkJICBEYXR1bSBzdWZmaXhfc3RhcnQsCisJCQkgIE9pZCBz dWZmaXhfdHlwZSwKKwkJCSAgUmVnUHJvY2VkdXJlIHN1ZmZpeF9lcV9wcm9jLAorCQkJICBSZWdQ cm9jZWR1cmUgc3VmZml4X2dlX3Byb2MsCisJCQkgIGludCBsaW1pdF9jb3VudCwKKwkJCSAgYm9v bCBjb2xsZWN0X3Jvd3MsCisJCQkgIE1lcmdlU2NhblJlc3VsdCAqcmVzdWx0KQoreworCU9pZAkJ CXRhYmxlX29pZDsKKwlPaWQJCQlpbmRleF9vaWQ7CisJUmVsYXRpb24JaGVhcF9yZWw7CisJUmVs YXRpb24JaW5kZXhfcmVsOworCUluZGV4U2NhbkRlc2Mgc2NhbjsKKwlCVFNjYW5PcGFxdWUgc287 CisJQlRNZXJnZVNjYW5TdGF0ZSAqbWVyZ2Vfc3RhdGU7CisJU25hcHNob3QJc25hcHNob3Q7CisJ T2lkCQkJc3VmZml4X2NtcF9vaWQ7CisJT2lkCQkJb3BmYW1pbHk7CisJY29uc3QgY2hhciAqb3Bm YW1pbHlfbmFtZTsKKwlpbnQJCQl0dXBsZXNfcmV0dXJuZWQgPSAwOworCWludAkJCW1heF9yZXN1 bHRzOworCisJLyogRGV0ZXJtaW5lIG9wZXJhdG9yIGZhbWlseSBiYXNlZCBvbiBzdWZmaXggdHlw ZSAqLworCWlmIChzdWZmaXhfdHlwZSA9PSBJTlQ0T0lEKQorCQlvcGZhbWlseV9uYW1lID0gImlu dGVnZXJfb3BzIjsKKwllbHNlIGlmIChzdWZmaXhfdHlwZSA9PSBUSU1FU1RBTVBPSUQpCisJCW9w ZmFtaWx5X25hbWUgPSAiZGF0ZXRpbWVfb3BzIjsKKwllbHNlCisJCWVsb2coRVJST1IsICJ1bnN1 cHBvcnRlZCBzdWZmaXggdHlwZTogJXUiLCBzdWZmaXhfdHlwZSk7CisKKwkvKiBMb29rIHVwIHRh YmxlIGFuZCBpbmRleCAqLworCXRhYmxlX29pZCA9IFJlbG5hbWVHZXRSZWxpZCh0YWJsZV9uYW1l KTsKKwlpZiAoIU9pZElzVmFsaWQodGFibGVfb2lkKSkKKwkJZWxvZyhFUlJPUiwgInRhYmxlIFwi JXNcIiBkb2VzIG5vdCBleGlzdCIsIHRhYmxlX25hbWUpOworCisJaW5kZXhfb2lkID0gUmVsbmFt ZUdldFJlbGlkKGluZGV4X25hbWUpOworCWlmICghT2lkSXNWYWxpZChpbmRleF9vaWQpKQorCQll bG9nKEVSUk9SLCAiaW5kZXggXCIlc1wiIGRvZXMgbm90IGV4aXN0IiwgaW5kZXhfbmFtZSk7CisK KwkvKiBPcGVuIHJlbGF0aW9ucyAqLworCWhlYXBfcmVsID0gdGFibGVfb3Blbih0YWJsZV9vaWQs IEFjY2Vzc1NoYXJlTG9jayk7CisJaW5kZXhfcmVsID0gaW5kZXhfb3BlbihpbmRleF9vaWQsIEFj Y2Vzc1NoYXJlTG9jayk7CisKKwkvKiBHZXQgY29tcGFyaXNvbiBmdW5jdGlvbiBmb3Igc3VmZml4 IHR5cGUgKi8KKwlvcGZhbWlseSA9IGdldF9vcGZhbWlseV9vaWQoQlRSRUVfQU1fT0lELAorCQkJ CQkJCQlsaXN0X21ha2UxKG1ha2VTdHJpbmcocHN0cmR1cChvcGZhbWlseV9uYW1lKSkpLAorCQkJ CQkJCQlmYWxzZSk7CisJc3VmZml4X2NtcF9vaWQgPSBnZXRfb3BmYW1pbHlfcHJvYyhvcGZhbWls eSwgc3VmZml4X3R5cGUsIHN1ZmZpeF90eXBlLAorCQkJCQkJCQkJICAgQlRPUkRFUl9QUk9DKTsK KwlpZiAoIU9pZElzVmFsaWQoc3VmZml4X2NtcF9vaWQpKQorCQllbG9nKEVSUk9SLCAiY291bGQg bm90IGZpbmQgY29tcGFyaXNvbiBmdW5jdGlvbiBmb3IgdHlwZSAldSIsIHN1ZmZpeF90eXBlKTsK KworCS8qIEJlZ2luIGluZGV4IHNjYW4gKi8KKwlzbmFwc2hvdCA9IEdldEFjdGl2ZVNuYXBzaG90 KCk7CisJc2NhbiA9IGluZGV4X2JlZ2luc2NhbihoZWFwX3JlbCwgaW5kZXhfcmVsLCBzbmFwc2hv dCwgTlVMTCwgMiwgMCk7CisKKwkvKiBTZXQgdXAgc2NhbiBrZXlzICovCisJeworCQlTY2FuS2V5 RGF0YSBrZXlzWzJdOworCisJCVNjYW5LZXlJbml0KCZrZXlzWzBdLCAxLCBCVEVxdWFsU3RyYXRl Z3lOdW1iZXIsIHN1ZmZpeF9lcV9wcm9jLAorCQkJCQlwcmVmaXhfdmFsdWVzWzBdKTsKKwkJU2Nh bktleUluaXQoJmtleXNbMV0sIDIsIEJUR3JlYXRlckVxdWFsU3RyYXRlZ3lOdW1iZXIsIHN1ZmZp eF9nZV9wcm9jLAorCQkJCQlzdWZmaXhfc3RhcnQpOworCQlpbmRleF9yZXNjYW4oc2Nhbiwga2V5 cywgMiwgTlVMTCwgMCk7CisJfQorCisJc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7 CisKKwkvKiBJbml0aWFsaXplIG1lcmdlIHNjYW4gKi8KKwltZXJnZV9zdGF0ZSA9IGJ0X21lcmdl X2luaXQoc2NhbiwgcHJlZml4X3ZhbHVlcywgcHJlZml4X251bGxzLAorCQkJCQkJCQludW1fcHJl Zml4ZXMsIDEsIDIsIHN1ZmZpeF9jbXBfb2lkLCBJbnZhbGlkT2lkKTsKKwlzby0+bWVyZ2VTdGF0 ZSA9IG1lcmdlX3N0YXRlOworCisJLyogRXhlY3V0ZSBzY2FuICovCisJbWF4X3Jlc3VsdHMgPSAo bGltaXRfY291bnQgPiAwKSA/IGxpbWl0X2NvdW50IDogTUFYX1JFU1VMVFM7CisKKwl3aGlsZSAo dHVwbGVzX3JldHVybmVkIDwgbWF4X3Jlc3VsdHMpCisJeworCQlDSEVDS19GT1JfSU5URVJSVVBU UygpOworCisJCWlmICghYnRfbWVyZ2VfZ2V0bmV4dChzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlv bikpCisJCQlicmVhazsKKworCQlpZiAoY29sbGVjdF9yb3dzICYmIHJlc3VsdC0+cHJlZml4ZXMg IT0gTlVMTCkKKwkJeworCQkJLyogRmV0Y2ggaGVhcCB0dXBsZSB0byBnZXQgYWN0dWFsIHZhbHVl cyAqLworCQkJSGVhcFR1cGxlRGF0YSBoZWFwVHVwbGU7CisJCQlCdWZmZXIJCWhlYXBCdWZmZXI7 CisJCQlib29sCQlpc251bGw7CisKKwkJCWhlYXBUdXBsZS50X3NlbGYgPSBzY2FuLT54c19oZWFw dGlkOworCQkJaWYgKGhlYXBfZmV0Y2goaGVhcF9yZWwsIHNuYXBzaG90LCAmaGVhcFR1cGxlLCAm aGVhcEJ1ZmZlciwgZmFsc2UpKQorCQkJeworCQkJCXJlc3VsdC0+cHJlZml4ZXNbdHVwbGVzX3Jl dHVybmVkXSA9CisJCQkJCURhdHVtR2V0SW50MzIoaGVhcF9nZXRhdHRyKCZoZWFwVHVwbGUsIDEs CisJCQkJCQkJCQkJCSAgIFJlbGF0aW9uR2V0RGVzY3IoaGVhcF9yZWwpLCAmaXNudWxsKSk7CisJ CQkJcmVzdWx0LT5zdWZmaXhlc1t0dXBsZXNfcmV0dXJuZWRdID0KKwkJCQkJRGF0dW1HZXRJbnQz MihoZWFwX2dldGF0dHIoJmhlYXBUdXBsZSwgMiwKKwkJCQkJCQkJCQkJICAgUmVsYXRpb25HZXRE ZXNjcihoZWFwX3JlbCksICZpc251bGwpKTsKKwkJCQlSZWxlYXNlQnVmZmVyKGhlYXBCdWZmZXIp OworCQkJfQorCQl9CisKKwkJdHVwbGVzX3JldHVybmVkKys7CisKKwkJaWYgKHR1cGxlc19yZXR1 cm5lZCA+PSBNQVhfUkVTVUxUUykKKwkJeworCQkJZWxvZyhXQVJOSU5HLCAibWVyZ2Ugc2NhbiBo aXQgc2FmZXR5IGxpbWl0IG9mICVkIHR1cGxlcyIsIE1BWF9SRVNVTFRTKTsKKwkJCWJyZWFrOwor CQl9CisJfQorCisJLyogQ29sbGVjdCByZXN1bHRzIGJlZm9yZSBjbGVhbnVwICovCisJcmVzdWx0 LT50dXBsZXNfcmV0dXJuZWQgPSB0dXBsZXNfcmV0dXJuZWQ7CisJcmVzdWx0LT50dXBsZXNfYWNj ZXNzZWQgPSBtZXJnZV9zdGF0ZS0+dHVwbGVzX2FjY2Vzc2VkOworCXJlc3VsdC0+bnVtX3ByZWZp eGVzID0gbnVtX3ByZWZpeGVzOworCXJlc3VsdC0+bGltaXRfY291bnQgPSBsaW1pdF9jb3VudDsK KworCS8qIENsZWFuIHVwICovCisJYnRfbWVyZ2VfZW5kKG1lcmdlX3N0YXRlKTsKKwlzby0+bWVy Z2VTdGF0ZSA9IE5VTEw7CisJaW5kZXhfZW5kc2NhbihzY2FuKTsKKwlpbmRleF9jbG9zZShpbmRl eF9yZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisJdGFibGVfY2xvc2UoaGVhcF9yZWwsIEFjY2Vzc1No YXJlTG9jayk7Cit9CisKKy8qCisgKiBidWlsZF9zdGF0c19yZXN1bHQgLSBidWlsZCB0aGUgc3Rh dHMgcmVzdWx0IHR1cGxlCisgKi8KK3N0YXRpYyBEYXR1bQorYnVpbGRfc3RhdHNfcmVzdWx0KEZ1 bmN0aW9uQ2FsbEluZm8gZmNpbmZvLCBNZXJnZVNjYW5SZXN1bHQgKnJlc3VsdCkKK3sKKwlUdXBs ZURlc2MJdHVwZGVzYzsKKwlEYXR1bQkJdmFsdWVzWzNdOworCWJvb2wJCW51bGxzWzNdID0ge2Zh bHNlLCBmYWxzZSwgZmFsc2V9OworCUhlYXBUdXBsZQl0dXBsZTsKKwlpbnQJCQltYXhfcmVxdWly ZWRfZmV0Y2hlczsKKworCS8qIENhbGN1bGF0ZSBleHBlY3RlZCBtYXggZmV0Y2hlcyAqLworCWlm IChyZXN1bHQtPnR1cGxlc19yZXR1cm5lZCA8IHJlc3VsdC0+bGltaXRfY291bnQpCisJCW1heF9y ZXF1aXJlZF9mZXRjaGVzID0gcmVzdWx0LT50dXBsZXNfcmV0dXJuZWQ7CisJZWxzZQorCQltYXhf cmVxdWlyZWRfZmV0Y2hlcyA9IHJlc3VsdC0+bGltaXRfY291bnQgKyByZXN1bHQtPm51bV9wcmVm aXhlcyAtIDE7CisKKwlpZiAoZ2V0X2NhbGxfcmVzdWx0X3R5cGUoZmNpbmZvLCBOVUxMLCAmdHVw ZGVzYykgIT0gVFlQRUZVTkNfQ09NUE9TSVRFKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJj b2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKKwkJCQkgZXJybXNnKCJmdW5jdGlv biByZXR1cm5pbmcgcmVjb3JkIGNhbGxlZCBpbiBjb250ZXh0ICIKKwkJCQkJCSJ0aGF0IGNhbm5v dCBhY2NlcHQgdHlwZSByZWNvcmQiKSkpOworCisJdHVwZGVzYyA9IEJsZXNzVHVwbGVEZXNjKHR1 cGRlc2MpOworCisJdmFsdWVzWzBdID0gSW50MzJHZXREYXR1bShyZXN1bHQtPnR1cGxlc19yZXR1 cm5lZCk7CisJdmFsdWVzWzFdID0gSW50MzJHZXREYXR1bSgoaW50MzIpIHJlc3VsdC0+dHVwbGVz X2FjY2Vzc2VkKTsKKwl2YWx1ZXNbMl0gPSBJbnQzMkdldERhdHVtKG1heF9yZXF1aXJlZF9mZXRj aGVzKTsKKworCXR1cGxlID0gaGVhcF9mb3JtX3R1cGxlKHR1cGRlc2MsIHZhbHVlcywgbnVsbHMp OworCXJldHVybiBIZWFwVHVwbGVHZXREYXR1bSh0dXBsZSk7Cit9CisKKworLyoKKyAqIHRlc3Rf YnRyZWVfbWVyZ2Vfc2Nhbl9pbnQgLSB0ZXN0IG1lcmdlIHNjYW4gd2l0aCBpbnRlZ2VyIGNvbHVt bnMKKyAqLworUEdfRlVOQ1RJT05fSU5GT19WMSh0ZXN0X2J0cmVlX21lcmdlX3NjYW5faW50KTsK KworRGF0dW0KK3Rlc3RfYnRyZWVfbWVyZ2Vfc2Nhbl9pbnQoUEdfRlVOQ1RJT05fQVJHUykKK3sK Kwl0ZXh0CSAgICp0YWJsZV9uYW1lID0gUEdfR0VUQVJHX1RFWFRfUFAoMCk7CisJdGV4dAkgICAq aW5kZXhfbmFtZSA9IFBHX0dFVEFSR19URVhUX1BQKDEpOworCUFycmF5VHlwZSAgKnByZWZpeF9h cnJheSA9IFBHX0dFVEFSR19BUlJBWVRZUEVfUCgyKTsKKwlpbnQzMgkJc3VmZml4X3N0YXJ0ID0g UEdfR0VUQVJHX0lOVDMyKDMpOworCWludDMyCQlsaW1pdF9jb3VudCA9IFBHX0dFVEFSR19JTlQz Mig0KTsKKwlEYXR1bQkgICAqcHJlZml4X3ZhbHVlczsKKwlib29sCSAgICpwcmVmaXhfbnVsbHM7 CisJaW50CQkJbnVtX3ByZWZpeGVzOworCU1lcmdlU2NhblJlc3VsdCByZXN1bHQgPSB7MH07CisK KwlkZWNvbnN0cnVjdF9hcnJheShwcmVmaXhfYXJyYXksIElOVDRPSUQsIHNpemVvZihpbnQzMiks IHRydWUsIFRZUEFMSUdOX0lOVCwKKwkJCQkJICAmcHJlZml4X3ZhbHVlcywgJnByZWZpeF9udWxs cywgJm51bV9wcmVmaXhlcyk7CisKKwlpZiAobnVtX3ByZWZpeGVzID09IDApCisJCWVsb2coRVJS T1IsICJwcmVmaXhfdmFsdWVzIGFycmF5IGNhbm5vdCBiZSBlbXB0eSIpOworCisJZG9fbWVyZ2Vf c2Nhbih0ZXh0X3RvX2NzdHJpbmcodGFibGVfbmFtZSksCisJCQkJICB0ZXh0X3RvX2NzdHJpbmco aW5kZXhfbmFtZSksCisJCQkJICBwcmVmaXhfdmFsdWVzLCBwcmVmaXhfbnVsbHMsIG51bV9wcmVm aXhlcywKKwkJCQkgIEludDMyR2V0RGF0dW0oc3VmZml4X3N0YXJ0KSwgSU5UNE9JRCwKKwkJCQkg IEZfSU5UNEVRLCBGX0lOVDRHRSwKKwkJCQkgIGxpbWl0X2NvdW50LCBmYWxzZSwgJnJlc3VsdCk7 CisKKwlyZXR1cm4gYnVpbGRfc3RhdHNfcmVzdWx0KGZjaW5mbywgJnJlc3VsdCk7Cit9CisKKwor LyoKKyAqIHRlc3RfYnRyZWVfbWVyZ2Vfc2Nhbl90cyAtIHRlc3QgbWVyZ2Ugc2NhbiB3aXRoIHRp bWVzdGFtcCBzdWZmaXgKKyAqLworUEdfRlVOQ1RJT05fSU5GT19WMSh0ZXN0X2J0cmVlX21lcmdl X3NjYW5fdHMpOworCitEYXR1bQordGVzdF9idHJlZV9tZXJnZV9zY2FuX3RzKFBHX0ZVTkNUSU9O X0FSR1MpCit7CisJdGV4dAkgICAqdGFibGVfbmFtZSA9IFBHX0dFVEFSR19URVhUX1BQKDApOwor CXRleHQJICAgKmluZGV4X25hbWUgPSBQR19HRVRBUkdfVEVYVF9QUCgxKTsKKwlBcnJheVR5cGUg ICpwcmVmaXhfYXJyYXkgPSBQR19HRVRBUkdfQVJSQVlUWVBFX1AoMik7CisJVGltZXN0YW1wCXN1 ZmZpeF9zdGFydCA9IFBHX0dFVEFSR19USU1FU1RBTVAoMyk7CisJaW50MzIJCWxpbWl0X2NvdW50 ID0gUEdfR0VUQVJHX0lOVDMyKDQpOworCURhdHVtCSAgICpwcmVmaXhfdmFsdWVzOworCWJvb2wJ ICAgKnByZWZpeF9udWxsczsKKwlpbnQJCQludW1fcHJlZml4ZXM7CisJTWVyZ2VTY2FuUmVzdWx0 IHJlc3VsdCA9IHswfTsKKworCWRlY29uc3RydWN0X2FycmF5KHByZWZpeF9hcnJheSwgSU5UNE9J RCwgc2l6ZW9mKGludDMyKSwgdHJ1ZSwgVFlQQUxJR05fSU5ULAorCQkJCQkgICZwcmVmaXhfdmFs dWVzLCAmcHJlZml4X251bGxzLCAmbnVtX3ByZWZpeGVzKTsKKworCWlmIChudW1fcHJlZml4ZXMg PT0gMCkKKwkJZWxvZyhFUlJPUiwgInByZWZpeF92YWx1ZXMgYXJyYXkgY2Fubm90IGJlIGVtcHR5 Iik7CisKKwlkb19tZXJnZV9zY2FuKHRleHRfdG9fY3N0cmluZyh0YWJsZV9uYW1lKSwKKwkJCQkg IHRleHRfdG9fY3N0cmluZyhpbmRleF9uYW1lKSwKKwkJCQkgIHByZWZpeF92YWx1ZXMsIHByZWZp eF9udWxscywgbnVtX3ByZWZpeGVzLAorCQkJCSAgVGltZXN0YW1wR2V0RGF0dW0oc3VmZml4X3N0 YXJ0KSwgVElNRVNUQU1QT0lELAorCQkJCSAgRl9JTlQ0RVEsIEZfVElNRVNUQU1QX0dFLAorCQkJ CSAgbGltaXRfY291bnQsIGZhbHNlLCAmcmVzdWx0KTsKKworCXJldHVybiBidWlsZF9zdGF0c19y ZXN1bHQoZmNpbmZvLCAmcmVzdWx0KTsKK30KKworCisvKgorICogdGVzdF9idHJlZV9tZXJnZV9m ZXRjaF9pbnQgLSBmZXRjaCBhY3R1YWwgcm93cyBmcm9tIG1lcmdlIHNjYW4KKyAqLworUEdfRlVO Q1RJT05fSU5GT19WMSh0ZXN0X2J0cmVlX21lcmdlX2ZldGNoX2ludCk7CisKK0RhdHVtCit0ZXN0 X2J0cmVlX21lcmdlX2ZldGNoX2ludChQR19GVU5DVElPTl9BUkdTKQoreworCUZ1bmNDYWxsQ29u dGV4dCAqZnVuY2N0eDsKKworCXR5cGVkZWYgc3RydWN0CisJeworCQlpbnQzMgkgICAqcHJlZml4 ZXM7CisJCWludDMyCSAgICpzdWZmaXhlczsKKwkJaW50CQkJbnVtX3Jlc3VsdHM7CisJCWludAkJ CWN1cnJlbnRfaWR4OworCX0gRmV0Y2hDb250ZXh0OworCisJaWYgKFNSRl9JU19GSVJTVENBTEwo KSkKKwl7CisJCXRleHQJICAgKnRhYmxlX25hbWUgPSBQR19HRVRBUkdfVEVYVF9QUCgwKTsKKwkJ dGV4dAkgICAqaW5kZXhfbmFtZSA9IFBHX0dFVEFSR19URVhUX1BQKDEpOworCQlBcnJheVR5cGUg ICpwcmVmaXhfYXJyYXkgPSBQR19HRVRBUkdfQVJSQVlUWVBFX1AoMik7CisJCWludDMyCQlzdWZm aXhfc3RhcnQgPSBQR19HRVRBUkdfSU5UMzIoMyk7CisJCWludDMyCQlsaW1pdF9jb3VudCA9IFBH X0dFVEFSR19JTlQzMig0KTsKKwkJRGF0dW0JICAgKnByZWZpeF92YWx1ZXM7CisJCWJvb2wJICAg KnByZWZpeF9udWxsczsKKwkJaW50CQkJbnVtX3ByZWZpeGVzOworCQlNZW1vcnlDb250ZXh0IG9s ZGNvbnRleHQ7CisJCUZldGNoQ29udGV4dCAqZmN0eDsKKwkJTWVyZ2VTY2FuUmVzdWx0IHJlc3Vs dCA9IHswfTsKKwkJVHVwbGVEZXNjCXR1cGRlc2M7CisJCWludAkJCW1heF9yZXN1bHRzOworCisJ CWZ1bmNjdHggPSBTUkZfRklSU1RDQUxMX0lOSVQoKTsKKwkJb2xkY29udGV4dCA9IE1lbW9yeUNv bnRleHRTd2l0Y2hUbyhmdW5jY3R4LT5tdWx0aV9jYWxsX21lbW9yeV9jdHgpOworCisJCWRlY29u c3RydWN0X2FycmF5KHByZWZpeF9hcnJheSwgSU5UNE9JRCwgc2l6ZW9mKGludDMyKSwgdHJ1ZSwg VFlQQUxJR05fSU5ULAorCQkJCQkJICAmcHJlZml4X3ZhbHVlcywgJnByZWZpeF9udWxscywgJm51 bV9wcmVmaXhlcyk7CisKKwkJaWYgKG51bV9wcmVmaXhlcyA9PSAwKQorCQkJZWxvZyhFUlJPUiwg InByZWZpeF92YWx1ZXMgYXJyYXkgY2Fubm90IGJlIGVtcHR5Iik7CisKKwkJLyogQWxsb2NhdGUg cmVzdWx0IHN0b3JhZ2UgKi8KKwkJbWF4X3Jlc3VsdHMgPSAobGltaXRfY291bnQgPiAwKSA/IGxp bWl0X2NvdW50IDogTUFYX1JFU1VMVFM7CisJCWZjdHggPSBwYWxsb2Moc2l6ZW9mKEZldGNoQ29u dGV4dCkpOworCQlmY3R4LT5wcmVmaXhlcyA9IHBhbGxvYyhtYXhfcmVzdWx0cyAqIHNpemVvZihp bnQzMikpOworCQlmY3R4LT5zdWZmaXhlcyA9IHBhbGxvYyhtYXhfcmVzdWx0cyAqIHNpemVvZihp bnQzMikpOworCQlmY3R4LT5jdXJyZW50X2lkeCA9IDA7CisKKwkJLyogUG9pbnQgcmVzdWx0IHRv IG91ciBzdG9yYWdlICovCisJCXJlc3VsdC5wcmVmaXhlcyA9IGZjdHgtPnByZWZpeGVzOworCQly ZXN1bHQuc3VmZml4ZXMgPSBmY3R4LT5zdWZmaXhlczsKKworCQlkb19tZXJnZV9zY2FuKHRleHRf dG9fY3N0cmluZyh0YWJsZV9uYW1lKSwKKwkJCQkJICB0ZXh0X3RvX2NzdHJpbmcoaW5kZXhfbmFt ZSksCisJCQkJCSAgcHJlZml4X3ZhbHVlcywgcHJlZml4X251bGxzLCBudW1fcHJlZml4ZXMsCisJ CQkJCSAgSW50MzJHZXREYXR1bShzdWZmaXhfc3RhcnQpLCBJTlQ0T0lELAorCQkJCQkgIEZfSU5U NEVRLCBGX0lOVDRHRSwKKwkJCQkJICBsaW1pdF9jb3VudCwgdHJ1ZSwgJnJlc3VsdCk7CisKKwkJ ZmN0eC0+bnVtX3Jlc3VsdHMgPSByZXN1bHQudHVwbGVzX3JldHVybmVkOworCisJCS8qIEJ1aWxk IHJlc3VsdCB0dXBsZSBkZXNjcmlwdG9yICovCisJCXR1cGRlc2MgPSBDcmVhdGVUZW1wbGF0ZVR1 cGxlRGVzYygyKTsKKwkJVHVwbGVEZXNjSW5pdEVudHJ5KHR1cGRlc2MsIDEsICJwcmVmaXhfY29s IiwgSU5UNE9JRCwgLTEsIDApOworCQlUdXBsZURlc2NJbml0RW50cnkodHVwZGVzYywgMiwgInN1 ZmZpeF9jb2wiLCBJTlQ0T0lELCAtMSwgMCk7CisJCWZ1bmNjdHgtPnR1cGxlX2Rlc2MgPSBCbGVz c1R1cGxlRGVzYyh0dXBkZXNjKTsKKwkJZnVuY2N0eC0+dXNlcl9mY3R4ID0gZmN0eDsKKworCQlN ZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CisJfQorCisJZnVuY2N0eCA9IFNSRl9Q RVJDQUxMX1NFVFVQKCk7CisKKwl7CisJCUZldGNoQ29udGV4dCAqZmN0eCA9IGZ1bmNjdHgtPnVz ZXJfZmN0eDsKKworCQlpZiAoZmN0eC0+Y3VycmVudF9pZHggPCBmY3R4LT5udW1fcmVzdWx0cykK KwkJeworCQkJRGF0dW0JCXZhbHVlc1syXTsKKwkJCWJvb2wJCW51bGxzWzJdID0ge2ZhbHNlLCBm YWxzZX07CisJCQlIZWFwVHVwbGUJdHVwbGU7CisKKwkJCXZhbHVlc1swXSA9IEludDMyR2V0RGF0 dW0oZmN0eC0+cHJlZml4ZXNbZmN0eC0+Y3VycmVudF9pZHhdKTsKKwkJCXZhbHVlc1sxXSA9IElu dDMyR2V0RGF0dW0oZmN0eC0+c3VmZml4ZXNbZmN0eC0+Y3VycmVudF9pZHhdKTsKKwkJCWZjdHgt PmN1cnJlbnRfaWR4Kys7CisKKwkJCXR1cGxlID0gaGVhcF9mb3JtX3R1cGxlKGZ1bmNjdHgtPnR1 cGxlX2Rlc2MsIHZhbHVlcywgbnVsbHMpOworCQkJU1JGX1JFVFVSTl9ORVhUKGZ1bmNjdHgsIEhl YXBUdXBsZUdldERhdHVtKHR1cGxlKSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlTUkZfUkVUVVJO X0RPTkUoZnVuY2N0eCk7CisJCX0KKwl9Cit9CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVz L3Rlc3RfYnRyZWVfbWVyZ2UvdGVzdF9idHJlZV9tZXJnZS5jb250cm9sIGIvc3JjL3Rlc3QvbW9k dWxlcy90ZXN0X2J0cmVlX21lcmdlL3Rlc3RfYnRyZWVfbWVyZ2UuY29udHJvbApuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZjgxNDZiZDBmNzQKLS0tIC9kZXYvbnVsbAor KysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYnRyZWVfbWVyZ2UvdGVzdF9idHJlZV9tZXJnZS5j b250cm9sCkBAIC0wLDAgKzEsNSBAQAorIyB0ZXN0X2J0cmVlX21lcmdlIGV4dGVuc2lvbgorY29t bWVudCA9ICdVbml0IHRlc3RzIGZvciBCLXRyZWUgbWVyZ2Ugc2NhbicKK2RlZmF1bHRfdmVyc2lv biA9ICcxLjAnCittb2R1bGVfcGF0aG5hbWUgPSAnJGxpYmRpci90ZXN0X2J0cmVlX21lcmdlJwor cmVsb2NhdGFibGUgPSB0cnVlCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L2J0cmVlX21lcmdlLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvYnRyZWVfbWVyZ2Uu b3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi40NDFhZTFkMDY1Nwot LS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvYnRyZWVfbWVyZ2Uu b3V0CkBAIC0wLDAgKzEsMTEzIEBACistLSBCLVRyZWUgTWVyZ2UgU2NhbiBBY2Nlc3MgTWV0aG9k IFRlc3QKKy0tCistLSBCLVRyZWUgTWVyZ2UgU2NhbiBpcyBhbiBhY2Nlc3MgbWV0aG9kIHRoYXQg YWxsb3dzIGxhemlseSBwcm9kdWNpbmcKKy0tIG91dHB1dCBzb3J0ZWQgYnkgYSBub24tbGVhZGlu ZyBjb2x1bW4gd2hlbiB0aGUgcHJlZml4IGhhcyBmZXcgZGlzdGluY3QgdmFsdWVzLgorLS0KKy0t CistLSBMZXQgUyBiZSBhbiBpbmZpbml0ZSBzZXQgb2YgbGF0dGljIHBvaW50cyAoeCx5KS4KKy0t IExldCBTKHg9MSx5Pj1iKSBiZSB0aGUgc2VxdWVuY2Ugb2YgcG9pbnRzIAorLS0gICAgIFNFTEVD VCAqIEZST00gUyBXSEVSRSB4ID0gYSBhbmQgeSA+PSBiIE9SREVSIEJZIGI7CistLSAgICAgaS5l LiAoYSwgYiksIChhLCBiKzEpLCAoYSwgYisyKSwgLi4uCistLSBTaW1pbGFybHksIFMoeCBJTiBY LCB5PWIpIGJlaW5nIHRoZSBzZXF1ZW5jZSBvZiBwb2ludHMKKy0tICAgICBTRUxFQ1QgKiBGUk9N IFMgV0hFUkUgeCBJTiBYIGFuZCB5ID0gYiBPUkRFUiBCWSB4OworLS0gICAgIGkuZS4gKHhbMV0s IGIpLCAuLi4sICh4W25dLCBiKSwgKHhbMV0sIGIrMSksIC4uLgorLS0gVGhlIG91dHB1dCBvZiBT KHggSU4gWCwgeSA+PSBiKSBjYW4gYmUgY29tcHV0ZWQgYXMgYQorLS0KKy0tIFByb3Bvc2l0aW9u ICh1bmNvbXB1dGFibGUpOiAKKy0tIFMoeCwgSU4gWCwgeSA+PSBiKSBpcyB0aGUgSy13YXkgbWVy Z2Ugb2YgdGhlIHNlcXVlbmNlcyAKKy0tIHtTKHg9eFtpXSwgeSA+PSBiKSwgeFtpXSBpbiBYfQor LS0gCistLQorLS0KKy0tIFByb3Bvc2l0aW9uIChjb21wdXRhYmxlKTogQm91bmRlZCBzdWZmaXgK Ky0tCistLSBTKHgsIElOIFgsIGIxIDw9IHkgPD0gYjIpIGFzIGJvdW5kZWQKKy0tIGNhbiBiZSBj b21wdXRlZCB3aXRoIChTRUxFQ1QgY291bnQoZGlzdGluY3QgeCkgKyBjb3VudCgxKSBGUk9NIGJv dW5kZWQpCistLSB0dXBsZSBhY2Nlc3Nlcy4KKy0tIChDb25zdHJ1Y3RpdmUpIFByb29mOgorLS0g VGhlIHJlc3VsdCBvZiAKKy0tICAgIFNFTEVDVCAqIEZST00gWCAKKy0tICAgIEpPSU4gUyBvbiB4 ID0geFtpXSBXSEVSRSB5IEJFVFdFRU4gYjEgQU5EIGIyOworLS0gaXMgdGhlIHNhbWUgYXMgCist LSAgICBTRUxFQ1QgKiBGUk9NIFgsCistLSAgICBMQVRFUkFMICgKKy0tICAgICAgICAoU0VMRUNU ICogRlJPTSBTIAorLS0gICAgICAgICAgIFdIRVJFIHggPSB4W2ldIEFORCB5IEJFVFdFRU4gYjEg QU5EIGIyCistLSAgICAgICAgKSBBUyBzdWJzY2FuW2ldCistLSAgICApIGFzIG1lcmdlZAorLS0g CistLSBFYWNoIG9mIHN1YnNjYW5baV0gaXMgY292ZXJlZCBieSBhIHNpbmdsZSByYW5nZSBpbiB0 aGUgaW5kZXggYW5kIGNhbgorLS0gYW5kIHJlcXVpcmUgYXQgbW9zdCAKKy0tICAoY291bnQoMSkg RlJPTSBzdWJzY2FuW2ldKSArIDEgICAgLS0gc3Vic2NhbiB0dXBsZSBhY2Nlc3MgY291bnQKKy0t IHR1cHBsZXMgdG8gYmUgYWNjZXNzZWQuCistLSBUaGUgbWVyZ2VkIHJlc3VsdCBjYW4gYmUgY29t cHV0ZWQgdXNpbmcgYSBLLXdheSBtZXJnZSBzb3J0IAorLS0gd2hvc2UgbnVtYmVyIG9mIHJvd3Mg aXMKKy0tICAgc3VtKGNvdW50KDEpIEZST00gc3Vic2NhbltpXSkgICAgLS0gcXVlcnkgb3V0cHV0 IHJvd3MKKy0tIFEuRS5ELgorLS0KKy0tCistLSBQcm9wb3NpdGlvbiAoY29tcHV0YWJsZSk6IExp bWl0dGVkIHF1ZXJ5CistLSBUaGUgcXVlcnkKKy0tICAgUyh4LCBJTiBYLCB5ID49IGIpIExJTUlU IE4gYXMgbGltaXRlZAorLS0gQ2FuIGJlIGNvbXB1dGVkIHdpdGggYXQgbW9zdCAKKy0tICAgTiAr IGNvdW50KGRpc3RpbmN0IFgpIC0gMQorLS0gdHVwbGUgYWNjZXNzZXMuCistLQorLS0gKENvbnN0 cnVjdGl2ZSkgUHJvb2Y6CistLSBJZiBhbiB1cHBlciBgdWAgYm91bmQgZm9yIGBNQVgoeSBJTiBT KHgsIElOIFgsIHkgPj0gYikgTElNSVQgTilgIGlzIGtub3duLAorLS0gdGhlbiB0aGUgcXVlcnkg Y2FuIGJlIHJld3JpdHRlbiBhcworLS0gICBTKHgsIElOIFgsIGIgPD0geSA8PSB1KSBMSU1JVCBO CistLSBUaGUgSy13YXkgY2FuIHByb2R1Y2UgdGhlIG5leHQgZWxlbWVudCBhcyBzb29uIGFzIGl0 IGhhcyBmZXRjaGVkCistLSB0aGUgbmV4dCBlbGVtZW50IGZvciBlYWNoIHN1YnF1ZXJ5CistLSAx IHJvdyBjYW4gYmUgcHJvZHVjZWQgYWZ0ZXIgY291bnQoZGlzdGluY3QgWCkgZmV0Y2hlcywKKy0t IEFmdGVyIHRoYXQgaXQgY2FuIHByb2R1Y2Ugb25lIG5ldyByb3cgZm9yIGVhY2ggZmV0Y2guCist LSBUaHVzLCB0aGUgdG90YWwgbnVtYmVyIG9mIGZldGNoZXMgaXMgYXQgbW9zdAorLS0gICBOICsg Y291bnQoZGlzdGluY3QgWCkgLSAxCistLSBRLkUuRC4KKy0tIEdlbmVyYXRlIGEgdGFibGUgd2l0 aCBsYXR0aWNlIHBvaW50cyAKKy0tIENvdWxkIGJlIGluZmluaXRlCitDUkVBVEUgVEFCTEUgYnRy ZWVfbWVyZ2VfdGVzdCBBUyAoCisgICAgU0VMRUNUIHgsIHkgRlJPTSAKKyAgICAgICAgZ2VuZXJh dGVfc2VyaWVzKDEsIDUwKSBBUyB4LCAKKyAgICAgICAgZ2VuZXJhdGVfc2VyaWVzKDEsIDUwKSBB UyB5CisgICAgT1JERVIgQlkgcmFuZG9tKCkKKyk7CitDUkVBVEUgSU5ERVggYnRyZWVfbWVyZ2Vf dGVzdF9pZHggT04gYnRyZWVfbWVyZ2VfdGVzdCBVU0lORyBidHJlZSAoeCwgeSk7CitBTkFMWVNF IGJ0cmVlX21lcmdlX3Rlc3Q7CitTRVQgZW5hYmxlX3NlcXNjYW4gPSBPRkY7CitTRVQgZW5hYmxl X2JpdG1hcHNjYW4gPSBPRkY7CitTSE9XIHRyYWNrX2NvdW50czsgIC0tIHNob3VsZCBiZSAnb24n CisgdHJhY2tfY291bnRzIAorLS0tLS0tLS0tLS0tLS0KKyBvbgorKDEgcm93KQorCistLSBGcm9t IHRoZSBsaW1pdGVkIHF1ZXJ5IHByb3Bvc2l0aW9uIHRoaXMgY2FuIGJlIGNvbXB1dGVkIHdpdGgg MTAKKy0tIHR1cHBsZSBhY2Nlc3Nlcy4KK1NFTEVDVCB4LCB5CitGUk9NIGJ0cmVlX21lcmdlX3Rl c3QKK1dIRVJFIHggSU4gKDEsMiw1LDgsMTMsMjEsMzQsNTUpIEFORCB5ID49IDE5CitPUkRFUiBC WSB5LCB4IC0tIHNvcnQgeCB0byBtYWtlIHJlc3VsdCB1bmlxdWUKK0xJTUlUIDM7CisgeCB8IHkg IAorLS0tKy0tLS0KKyAxIHwgMTkKKyAyIHwgMTkKKyA1IHwgMTkKKygzIHJvd3MpCisKK1NFTEVD VCBwZ19zdGF0X2ZvcmNlX25leHRfZmx1c2goKTsKKyBwZ19zdGF0X2ZvcmNlX25leHRfZmx1c2gg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCitTRUxFQ1QgaWR4X3Nj YW4sIGlkeF90dXBfcmVhZCwgaWR4X3R1cF9mZXRjaCAKK0ZST00gcGdfc3RhdF91c2VyX2luZGV4 ZXMgCitXSEVSRSBpbmRleHJlbG5hbWUgPSAnYnRyZWVfbWVyZ2VfdGVzdF9pZHgnOworIGlkeF9z Y2FuIHwgaWR4X3R1cF9yZWFkIHwgaWR4X3R1cF9mZXRjaCAKKy0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIDUgfCAgICAgICAgICAgMTAgfCAgICAgICAg ICAgIDEwCisoMSByb3cpCisKK0RST1AgVEFCTEUgYnRyZWVfbWVyZ2VfdGVzdDsKZGlmZiAtLWdp dCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2J0cmVlX21lcmdlLnNxbCBiL3NyYy90ZXN0L3JlZ3Jl c3Mvc3FsL2J0cmVlX21lcmdlLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwMC4uYmUwMGMzM2MyYTUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3Nx bC9idHJlZV9tZXJnZS5zcWwKQEAgLTAsMCArMSwxMDAgQEAKKy0tIEItVHJlZSBNZXJnZSBTY2Fu IEFjY2VzcyBNZXRob2QgVGVzdAorLS0KKy0tIEItVHJlZSBNZXJnZSBTY2FuIGlzIGFuIGFjY2Vz cyBtZXRob2QgdGhhdCBhbGxvd3MgbGF6aWx5IHByb2R1Y2luZworLS0gb3V0cHV0IHNvcnRlZCBi eSBhIG5vbi1sZWFkaW5nIGNvbHVtbiB3aGVuIHRoZSBwcmVmaXggaGFzIGZldyBkaXN0aW5jdCB2 YWx1ZXMuCistLQorLS0KKy0tIExldCBTIGJlIGFuIGluZmluaXRlIHNldCBvZiBsYXR0aWMgcG9p bnRzICh4LHkpLgorLS0gTGV0IFMoeD0xLHk+PWIpIGJlIHRoZSBzZXF1ZW5jZSBvZiBwb2ludHMg CistLSAgICAgU0VMRUNUICogRlJPTSBTIFdIRVJFIHggPSBhIGFuZCB5ID49IGIgT1JERVIgQlkg YjsKKy0tICAgICBpLmUuIChhLCBiKSwgKGEsIGIrMSksIChhLCBiKzIpLCAuLi4KKy0tIFNpbWls YXJseSwgUyh4IElOIFgsIHk9YikgYmVpbmcgdGhlIHNlcXVlbmNlIG9mIHBvaW50cworLS0gICAg IFNFTEVDVCAqIEZST00gUyBXSEVSRSB4IElOIFggYW5kIHkgPSBiIE9SREVSIEJZIHg7CistLSAg ICAgaS5lLiAoeFsxXSwgYiksIC4uLiwgKHhbbl0sIGIpLCAoeFsxXSwgYisxKSwgLi4uCistLSBU aGUgb3V0cHV0IG9mIFMoeCBJTiBYLCB5ID49IGIpIGNhbiBiZSBjb21wdXRlZCBhcyBhCistLQor LS0gUHJvcG9zaXRpb24gKHVuY29tcHV0YWJsZSk6IAorLS0gUyh4LCBJTiBYLCB5ID49IGIpIGlz IHRoZSBLLXdheSBtZXJnZSBvZiB0aGUgc2VxdWVuY2VzIAorLS0ge1MoeD14W2ldLCB5ID49IGIp LCB4W2ldIGluIFh9CistLSAKKy0tCistLQorLS0gUHJvcG9zaXRpb24gKGNvbXB1dGFibGUpOiBC b3VuZGVkIHN1ZmZpeAorLS0KKy0tIFMoeCwgSU4gWCwgYjEgPD0geSA8PSBiMikgYXMgYm91bmRl ZAorLS0gY2FuIGJlIGNvbXB1dGVkIHdpdGggKFNFTEVDVCBjb3VudChkaXN0aW5jdCB4KSArIGNv dW50KDEpIEZST00gYm91bmRlZCkKKy0tIHR1cGxlIGFjY2Vzc2VzLgorLS0gKENvbnN0cnVjdGl2 ZSkgUHJvb2Y6CistLSBUaGUgcmVzdWx0IG9mIAorLS0gICAgU0VMRUNUICogRlJPTSBYIAorLS0g ICAgSk9JTiBTIG9uIHggPSB4W2ldIFdIRVJFIHkgQkVUV0VFTiBiMSBBTkQgYjI7CistLSBpcyB0 aGUgc2FtZSBhcyAKKy0tICAgIFNFTEVDVCAqIEZST00gWCwKKy0tICAgIExBVEVSQUwgKAorLS0g ICAgICAgIChTRUxFQ1QgKiBGUk9NIFMgCistLSAgICAgICAgICAgV0hFUkUgeCA9IHhbaV0gQU5E IHkgQkVUV0VFTiBiMSBBTkQgYjIKKy0tICAgICAgICApIEFTIHN1YnNjYW5baV0KKy0tICAgICkg YXMgbWVyZ2VkCistLSAKKy0tIEVhY2ggb2Ygc3Vic2NhbltpXSBpcyBjb3ZlcmVkIGJ5IGEgc2lu Z2xlIHJhbmdlIGluIHRoZSBpbmRleCBhbmQgY2FuCistLSBhbmQgcmVxdWlyZSBhdCBtb3N0IAor LS0gIChjb3VudCgxKSBGUk9NIHN1YnNjYW5baV0pICsgMSAgICAtLSBzdWJzY2FuIHR1cGxlIGFj Y2VzcyBjb3VudAorLS0gdHVwcGxlcyB0byBiZSBhY2Nlc3NlZC4KKy0tIFRoZSBtZXJnZWQgcmVz dWx0IGNhbiBiZSBjb21wdXRlZCB1c2luZyBhIEstd2F5IG1lcmdlIHNvcnQgCistLSB3aG9zZSBu dW1iZXIgb2Ygcm93cyBpcworLS0gICBzdW0oY291bnQoMSkgRlJPTSBzdWJzY2FuW2ldKSAgICAt LSBxdWVyeSBvdXRwdXQgcm93cworLS0gUS5FLkQuCistLQorLS0KKy0tIFByb3Bvc2l0aW9uIChj b21wdXRhYmxlKTogTGltaXR0ZWQgcXVlcnkKKy0tIFRoZSBxdWVyeQorLS0gICBTKHgsIElOIFgs IHkgPj0gYikgTElNSVQgTiBhcyBsaW1pdGVkCistLSBDYW4gYmUgY29tcHV0ZWQgd2l0aCBhdCBt b3N0IAorLS0gICBOICsgY291bnQoZGlzdGluY3QgWCkgLSAxCistLSB0dXBsZSBhY2Nlc3Nlcy4K Ky0tCistLSAoQ29uc3RydWN0aXZlKSBQcm9vZjoKKy0tIElmIGFuIHVwcGVyIGB1YCBib3VuZCBm b3IgYE1BWCh5IElOIFMoeCwgSU4gWCwgeSA+PSBiKSBMSU1JVCBOKWAgaXMga25vd24sCistLSB0 aGVuIHRoZSBxdWVyeSBjYW4gYmUgcmV3cml0dGVuIGFzCistLSAgIFMoeCwgSU4gWCwgYiA8PSB5 IDw9IHUpIExJTUlUIE4KKy0tIFRoZSBLLXdheSBjYW4gcHJvZHVjZSB0aGUgbmV4dCBlbGVtZW50 IGFzIHNvb24gYXMgaXQgaGFzIGZldGNoZWQKKy0tIHRoZSBuZXh0IGVsZW1lbnQgZm9yIGVhY2gg c3VicXVlcnkKKy0tIDEgcm93IGNhbiBiZSBwcm9kdWNlZCBhZnRlciBjb3VudChkaXN0aW5jdCBY KSBmZXRjaGVzLAorLS0gQWZ0ZXIgdGhhdCBpdCBjYW4gcHJvZHVjZSBvbmUgbmV3IHJvdyBmb3Ig ZWFjaCBmZXRjaC4KKy0tIFRodXMsIHRoZSB0b3RhbCBudW1iZXIgb2YgZmV0Y2hlcyBpcyBhdCBt b3N0CistLSAgIE4gKyBjb3VudChkaXN0aW5jdCBYKSAtIDEKKy0tIFEuRS5ELgorCisKKy0tIEdl bmVyYXRlIGEgdGFibGUgd2l0aCBsYXR0aWNlIHBvaW50cyAKKy0tIENvdWxkIGJlIGluZmluaXRl CitDUkVBVEUgVEFCTEUgYnRyZWVfbWVyZ2VfdGVzdCBBUyAoCisgICAgU0VMRUNUIHgsIHkgRlJP TSAKKyAgICAgICAgZ2VuZXJhdGVfc2VyaWVzKDEsIDUwKSBBUyB4LCAKKyAgICAgICAgZ2VuZXJh dGVfc2VyaWVzKDEsIDUwKSBBUyB5CisgICAgT1JERVIgQlkgcmFuZG9tKCkKKyk7CitDUkVBVEUg SU5ERVggYnRyZWVfbWVyZ2VfdGVzdF9pZHggT04gYnRyZWVfbWVyZ2VfdGVzdCBVU0lORyBidHJl ZSAoeCwgeSk7CisKK0FOQUxZU0UgYnRyZWVfbWVyZ2VfdGVzdDsKKworU0VUIGVuYWJsZV9zZXFz Y2FuID0gT0ZGOworU0VUIGVuYWJsZV9iaXRtYXBzY2FuID0gT0ZGOworU0hPVyB0cmFja19jb3Vu dHM7ICAtLSBzaG91bGQgYmUgJ29uJworLS0gRnJvbSB0aGUgbGltaXRlZCBxdWVyeSBwcm9wb3Np dGlvbiB0aGlzIGNhbiBiZSBjb21wdXRlZCB3aXRoIDEwCistLSB0dXBwbGUgYWNjZXNzZXMuCitT RUxFQ1QgeCwgeQorRlJPTSBidHJlZV9tZXJnZV90ZXN0CitXSEVSRSB4IElOICgxLDIsNSw4LDEz LDIxLDM0LDU1KSBBTkQgeSA+PSAxOQorT1JERVIgQlkgeSwgeCAtLSBzb3J0IHggdG8gbWFrZSBy ZXN1bHQgdW5pcXVlCitMSU1JVCAzOworCisKK1NFTEVDVCBwZ19zdGF0X2ZvcmNlX25leHRfZmx1 c2goKTsKKworCitTRUxFQ1QgaWR4X3NjYW4sIGlkeF90dXBfcmVhZCwgaWR4X3R1cF9mZXRjaCAK K0ZST00gcGdfc3RhdF91c2VyX2luZGV4ZXMgCitXSEVSRSBpbmRleHJlbG5hbWUgPSAnYnRyZWVf bWVyZ2VfdGVzdF9pZHgnOworCitEUk9QIFRBQkxFIGJ0cmVlX21lcmdlX3Rlc3Q7ClwgTm8gbmV3 bGluZSBhdCBlbmQgb2YgZmlsZQo= --_004_AS1PR02MB784695AFEC37179FFAF7EAE19A9DAAS1PR02MB7846eurp_--