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 1wDOOy-002v4r-1S for pgsql-hackers@arkaria.postgresql.org; Thu, 16 Apr 2026 15:13:09 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wDOOx-0061Km-1N for pgsql-hackers@arkaria.postgresql.org; Thu, 16 Apr 2026 15:13:07 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wDOOw-0061Kd-1U for pgsql-hackers@lists.postgresql.org; Thu, 16 Apr 2026 15:13:07 +0000 Received: from mail-francecentralazlp170130007.outbound.protection.outlook.com ([2a01:111:f403:c20a::7] helo=PA4PR04CU001.outbound.protection.outlook.com) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.98.2) (envelope-from ) id 1wDOOs-00000001KUl-3cC3 for pgsql-hackers@lists.postgresql.org; Thu, 16 Apr 2026 15:13:05 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=S2+KQMWs/EIJNYTPYdsJa0NSZA+0z369IecRnlYB7aMEV1GGeCT486tQH+SZSwDoqEQSrD7ZMAEPvd9iON5XPCEM48I2dIMXa/il8ZVqjl/vYcw9wWbJpEbcptIX4R6+GdUqGenHU2OGux7cUxA0/qDozMoPZOgEZEWHOLd/zk/iKiD+Ml3UPzaCz57dzEyJur7H/iLM5aUB/T4nzgnGJwMQpwt9EIcV3+6K9IHDFPQbWAhh5hUOGtBgKhxUZtT7AfdywYtt9cNIPXa52QfNbyJEGXftleUsXf/K4tHz7ex/89tvUYsUYJrxaQ9mN4iKhIwdcm2EbBPZxtPeXQWcMQ== 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=/kwJxmeR1kpmmlGqrMnkA3xbwW2+E/CVPI+iKhqII/k=; b=yKXwAEA717HmtZbfXePQ3iChb5N7gK79ykIamoMFFj6CkdnUOc2xkROZ0nR8W2xFwek5hwU0zkyqOBR+eM2KmmCGFlaG5uepuMvClfsrMDKGQdaWL7Bt329KqXjh/wek1TeiKqcZ+aiP6UG/OHVd0LLck3mzWcH9tiwYRWxR7/78KzxklqvwrgbSEHBBxYD2rTXY3kJxdkzdNIqNqxo7zCuqbPjWNjxgc1EmLyij8gSUYfRDSsl2xmQv7MhxcMfbHwPD6UtN6Nw+YuGucSKYkm+FqulADQuqfTc9TxCnCRTiQTzolRhuY/AW6+4qM37CjyPSebSk99An1jUuYQjoXQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=ulb.be; dmarc=pass action=none header.from=ulb.be; dkim=pass header.d=ulb.be; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ulb.be; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=/kwJxmeR1kpmmlGqrMnkA3xbwW2+E/CVPI+iKhqII/k=; b=Rj0QSRiu70pHQoyjXAhE86CxLTGX+IAIxqt3hW1OK1UrFW5/+m4IePpFtnwCn7kInBFQpLxIl2c0iyuSYvUaEtik4P0fFTLwfWkClJ67rgcu7dvB9GEVyQAamMm1JYADdtMalCnvCijJ9Q5jkN4AY6Nh/8e4rSYHYWgwfQHOgkc= Received: from AM0P190MB0724.EURP190.PROD.OUTLOOK.COM (2603:10a6:208:19f::15) by AS8P190MB1910.EURP190.PROD.OUTLOOK.COM (2603:10a6:20b:522::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9818.25; Thu, 16 Apr 2026 15:12:57 +0000 Received: from AM0P190MB0724.EURP190.PROD.OUTLOOK.COM ([fe80::10c8:e223:b773:933d]) by AM0P190MB0724.EURP190.PROD.OUTLOOK.COM ([fe80::10c8:e223:b773:933d%4]) with mapi id 15.20.9818.017; Thu, 16 Apr 2026 15:12:57 +0000 From: SCHOEMANS Maxime To: Haibo Yan CC: vignesh C , Tom Lane , Damir Belyalov , jian he , PostgreSQL Hackers , SAKR Mahmoud , Diogo Repas , Andrey Lepikhov Subject: Re: Implement missing join selectivity estimation for range types Thread-Topic: Implement missing join selectivity estimation for range types Thread-Index: AQHZK2HTFElV4cAAG0qhvSWvkCiFBa6keKmAgAAVOQCAAtFcgIACBB+AgAYni4CAVKFYAICOo58AgABu2wCAG78GAIAAfkQAgMyTtICACXamgIBHqSyAgAB2DQCAEmj+gIAHr52AhPImLgCAC/F48YAAt/OAgADvhWCAANpugIAAt9Xe Date: Thu, 16 Apr 2026 15:12:56 +0000 Message-ID: References: <8afecd87-d1e5-241c-5e3e-75e1c62c279b@enterprisedb.com> <1bc5e1e4-380b-213d-6e6a-d5e8f7f0c7f5@enterprisedb.com> <84ffb566-8038-ab35-c841-7a5e5728a247@enterprisedb.com> <525ea957-88ff-e2c6-2975-474c849aa234@ulb.be> <48a78946-f380-a279-e75f-711846e509f8@ulb.be> <4c443cf6-96af-0953-fd5b-bd2b5c0c6f00@ulb.be> <2516071.1699991181@sss.pgh.pa.us> <08b2dea8-6dca-06e4-a53d-3e6334e7645b@ulb.be> In-Reply-To: Accept-Language: en-US Content-Language: en-US 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=ulb.be; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: AM0P190MB0724:EE_|AS8P190MB1910:EE_ x-ms-office365-filtering-correlation-id: fcfba256-14a5-47fe-ce96-08de9bcaa3f2 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0;ARA:13230040|376014|786006|366016|6049299003|1800799024|18002099003|56012099003|22082099003|38070700021|8096899003|4053099003; x-microsoft-antispam-message-info: Y6kvpv9DTjlQncwzC8dP/wP04iimP0OFDcrx60PUvPdU319PfidMvwUubn/qY76aI/KrCFehz6B6v0Sd1PtuIaYvAfs+BcL4Oi8VvUYyrLFfLpQS8HjUu4bqR8CdizvyIGGX8TnXv7h3qZpGMIUjj/VFWoHoPJWg6vUeSHO0f9n8agKA6GCsIgONJgdkmT0xGda51QbYLF+58g0O1McV2Oon/VDzRnpU/85jRcFNZHs9ztZRV9Nn9cU+jQLpjBoPAvJDveA8V/lEnVrc1izd8aF1MjjRx8OnhWK4npdY0Ju5NYhAl5dFgVwcwkuJMdQWN+5RLbOncZcAYjYX360yn2gRPmYGauL8ECUhWDhfeuSCtpsw2J3rGG6DZD8hmzsh07+WaYLiJmjZUrqeEFytw4BwRtsv/YQqQjPozXh1wdF47iYkMy06wWabeoaiFv95oyWS3L+jH2w/0xX0f+Z18hB1TgS7nozVCSDUnXTH53sEox4OlhLHEfK+hSjLGGthJQF0VgPjvWL8NV3HepnKK/sd3pBLx96RmYx0bo6YhgbjzPv71SnzRmsb9bLP8kIgarRZL418QIIcNuSiME8BIw9U8ewzLtDWANf+oVl0At8H3K41+ElkI7q+Pbnt9AywOP8gUgIobltlmcAJYUFc6HK8b/kMLmsJx3BbGB0uyL8HYGrW2JgZh6vlWbNXYmEbvYGBAn9LYorwz1PSUuBP6Iingz9bBFrVuEYls3ZzcbgPjyFzDGvWjhW59tVIdtjxUb6U19lGKjJKIKbi7OGHoY4Z5j1yijruleQiFYIOTA8= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM0P190MB0724.EURP190.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(376014)(786006)(366016)(6049299003)(1800799024)(18002099003)(56012099003)(22082099003)(38070700021)(8096899003)(4053099003);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?feEtNYBPqFMFsDYHsBb2jewu/H+NU2ZAVMFuIKQWtTzE5wjcCZvL09az9H?= =?iso-8859-1?Q?qHgvTA1c4si6YTScJ/28jIIxTkB7MjjDNDUS2glfZQ5kw/T2nEftrFHOeJ?= =?iso-8859-1?Q?6Ywwk4fLK3WQfb2I2tTKUN8FoH5b6VLFCQv2uIh1yH5j1Ld3bEuMj7iYEV?= =?iso-8859-1?Q?nXmGTbu+CZvpfM3q5sZGfM+4UMGCWrJseqNdr2rL5s6NP/hRFFdMw5VdUi?= =?iso-8859-1?Q?X9VjbtiFv7b+VfbvRHdUIOMHkLw08Uq8/y4aphKTyo/T/iuqVyNnXRTZgW?= =?iso-8859-1?Q?WhK/pXtLQOOlcz0KWsTYsNa005DCsTngIgCnPtgb8jedJzpoX2ftXemgzL?= =?iso-8859-1?Q?I/hzK8S9073crVfPYXYZyGhKzuQsdR/0xeveNXYs2gVHrCVXBOF2TLYJeR?= =?iso-8859-1?Q?hhtKrzfpJfwlkITol6kbQmly0IsOlj7Ee/C5GPOEVDip/LXVqkO8m3Sebp?= =?iso-8859-1?Q?wBrr3ziOyvyitP3Aq414x/ixmvGlR0SyNhQTd2wWj8QY3W2nwHY5uNCE04?= =?iso-8859-1?Q?jfCDpzfKRuk8ljVSmD/7HOv/UnaCeyI2zO7QuXhf+JrVRlrzlw0jjLClBk?= =?iso-8859-1?Q?f9ciEVqo4jOmcvIKymrgqNEtNzdhnOw0u9b8BShxNxVxYD92FpNAAzuCSQ?= =?iso-8859-1?Q?o6ygPsDxQuMS2sNwxdBjzMKRUNRCGcdvCATLUv8Bm7IDv6CQePiZsKnbXB?= =?iso-8859-1?Q?FGqypmH1FlbkU7L7E4mEMvE75PiRlbNMxHTi8DVYURveFQj0Zuox7LJFSo?= =?iso-8859-1?Q?gpBBV/duk1i6C+sxgjhiodxTbpNLijRqRz4ag7tEPUeQ/tQVKM+qHLDgOA?= =?iso-8859-1?Q?H7oCIR7QRJjR/UHnqwWRhp6f43snmtTzB6uaFgAU6HEm+h50QNG+BXyZbp?= =?iso-8859-1?Q?mRlfejqIEbcbwhM8Mz41LobiEzXRqAbDwcHZMZ/YF749fTudSfF0zYPnCe?= =?iso-8859-1?Q?fHyI2ONhZllZBbnbvTRYOk1Tmk66+ftlEf4yp9W2L24ykFiSlqlODnHeB4?= =?iso-8859-1?Q?zECCyuD5oL0mOj0qeMzRYq4LLwcFGsEp5qGV0yWZMTRf8Ymfar/41lsFJB?= =?iso-8859-1?Q?F73ptCPkHMOGoImzB/rZZqXWJA+op8Kg8UjK/l6VutELI3vb9Qp+tZzLE4?= =?iso-8859-1?Q?PNq4KWMG0/y1EX3tpp7DbASC12GL64w/kdbVmv37dtFQv+lnYrhyoJHO5N?= =?iso-8859-1?Q?o3UX9l9ACJRe7gOTcX6wwvsV2qLMyTVzzspOqXrJ/pWf0tbTiPHdZZPVoP?= =?iso-8859-1?Q?nPU5k+u5LjIYoXZpYT/f834DOwtMIWoWyOJrahWHmM2Z/DslKdlteGep3W?= =?iso-8859-1?Q?95ZaRh24H2x/Bse6gIhqLSgH/ztGxIRcDVGcTuDVRCrhCUKg2Vvjb8hlgx?= =?iso-8859-1?Q?NV5Qx7mmtLp1HXnKFvRKeel2wdnNoPWbEaYhAKmrjyqY7JocuBhQR2rrlk?= =?iso-8859-1?Q?fUyAV4yp/Xy/xRBTxgNjCm6GdjfSaVDkUcDS95L54xtfWw4DzjBxKYjm7i?= =?iso-8859-1?Q?f/OruKlc0Z/VEHyfcFi7Itu375m2OXvuucLpD/Z3PeKFdBGRtPyk2KNpZn?= =?iso-8859-1?Q?9QziNRjchZ8rA7Cg/nMS+icLOjMRQ89iY/TovU+0T/5XTVi9EW1Hed5NhC?= =?iso-8859-1?Q?pzA6RgvWn9z70XaBA0hd9SeLvSPwd0xvYFWZeP3b382UEvcOwUArvWxIBH?= =?iso-8859-1?Q?EOuf6k1fn0k2mZM1ssQVxnpzM3Oq9Ixdmd0fzXIho3fCq9J1ouqla65tBp?= =?iso-8859-1?Q?eqNXASBpmL0esvsnd5OF24aE1Fz7MxzJ/TqWqrEr/jJffGVKaYfQX/sOZJ?= =?iso-8859-1?Q?ds6qbJ8I/w=3D=3D?= Content-Type: multipart/mixed; boundary="_006_AM0P190MB07243E890A7DFD6F24F70269F0232AM0P190MB0724EURP_" MIME-Version: 1.0 X-OriginatorOrg: ulb.be X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: AM0P190MB0724.EURP190.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-Network-Message-Id: fcfba256-14a5-47fe-ce96-08de9bcaa3f2 X-MS-Exchange-CrossTenant-originalarrivaltime: 16 Apr 2026 15:12:56.9156 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 30a5145e-75bd-4212-bb02-8ff9c0ea4ae9 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: qoVa3Nr4ZENGnemNS4f2dLPm2tZWbv6ZLTwrrQ+hfG2W6WPhsrO7OSDpyCNgiTEtfS7zWUzq4jeDwuBJzbE40Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8P190MB1910 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --_006_AM0P190MB07243E890A7DFD6F24F70269F0232AM0P190MB0724EURP_ Content-Type: multipart/alternative; boundary="_000_AM0P190MB07243E890A7DFD6F24F70269F0232AM0P190MB0724EURP_" --_000_AM0P190MB07243E890A7DFD6F24F70269F0232AM0P190MB0724EURP_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Hi Haibo, Attached is v7 with the changes we discussed. Patch 2 now has an inline comment on the && case explaining the outer-bounds approximation and its consistency with existing restriction selectivity. The commit message mentions it as well. Patch 3 uses a separate backend-private header (rangetypes_selfuncs.h) instead of selfuncs.h. Regards, Maxime --_000_AM0P190MB07243E890A7DFD6F24F70269F0232AM0P190MB0724EURP_ Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Hi = Haibo,

Attached is v7 with the changes we discussed.

Patch 2 now has an inline comment on the && case explaining the
outer-bounds approximation and its consistency with existing restriction
selectivity. The commit message mentions it as well.

Patch 3 uses a separate backend-private header (rangetypes_selfuncs.h)
instead of selfuncs.h.

Regards,
Maxime
--_000_AM0P190MB07243E890A7DFD6F24F70269F0232AM0P190MB0724EURP_-- --_006_AM0P190MB07243E890A7DFD6F24F70269F0232AM0P190MB0724EURP_ Content-Type: application/octet-stream; name="v7-0001-Improve-range-join-selectivity-estimation-for.patch" Content-Description: v7-0001-Improve-range-join-selectivity-estimation-for.patch Content-Disposition: attachment; filename="v7-0001-Improve-range-join-selectivity-estimation-for.patch"; size=21197; creation-date="Thu, 16 Apr 2026 15:11:37 GMT"; modification-date="Thu, 16 Apr 2026 15:12:56 GMT" Content-Transfer-Encoding: base64 RnJvbSBkMTk5OTdiYjc1ODcwNzZjYzFlM2ZjMGM4MWExYTA2NjU1ZjkzYmI1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgU2Nob2VtYW5zIDxtYXhpbWUuc2Nob2VtYW5zQGVu dGVycHJpc2VkYi5jb20+CkRhdGU6IE1vbiwgMTMgQXByIDIwMjYgMTY6MDQ6MjMgKzAyMDAKU3Vi amVjdDogW1BBVENIIHY3IDEvM10gSW1wcm92ZSByYW5nZSBqb2luIHNlbGVjdGl2aXR5IGVzdGlt YXRpb24gZm9yIDw8LCA+PiwKICYmCgpUZWFjaCByYW5nZWpvaW5zZWwgdG8gZXN0aW1hdGUgam9p biBzZWxlY3Rpdml0eSBmb3IgcmFuZ2Ugb3BlcmF0b3JzCnVzaW5nIGJvdW5kIGhpc3RvZ3JhbSBz dGF0aXN0aWNzIGluc3RlYWQgb2YgZmFsbGluZyBiYWNrIHRvIGZpeGVkCmRlZmF1bHRzLiBUaGUg ZXN0aW1hdGlvbiBpcyBiYXNlZCBvbiBhIHRyYXBlem9pZGFsIGFwcHJveGltYXRpb24gb2YKUChY IDwgWSkgYnkgcGFyYWxsZWwtc2Nhbm5pbmcgdGhlIGJvdW5kIGhpc3RvZ3JhbXMgb2YgYm90aCBz aWRlcy4KClRoaXMgaW1wcm92ZXMgcGxhbm5lciByb3cgZXN0aW1hdGVzIGVzcGVjaWFsbHkgd2hl biB0aGUgdHdvIHJhbmdlCmNvbHVtbnMgaGF2ZSBjbGVhcmx5IHNlcGFyYXRlZCBvciBzdHJvbmds eSBvdmVybGFwcGluZyBkaXN0cmlidXRpb25zLgoKUmVncmVzc2lvbiB0ZXN0cyBjb3ZlciBwbGFu IGNoYW5nZXMgZm9yIHJlcHJlc2VudGF0aXZlIHJhbmdlIGpvaW4gY2FzZXMuCgpCYXNlZCBvbjog UmVwYXMsIEx1bywgU2Nob2VtYW5zLCBTYWtyICgyMDIyKSAiU2VsZWN0aXZpdHkgRXN0aW1hdGlv bgpvZiBJbmVxdWFsaXR5IEpvaW5zIEluIERhdGFiYXNlcyIKaHR0cHM6Ly9kb2kub3JnLzEwLjQ4 NTUwL2FyWGl2LjIyMDYuMDczOTYKLS0tCiBzcmMvYmFja2VuZC91dGlscy9hZHQvcmFuZ2V0eXBl c19zZWxmdW5jcy5jIHwgMzAwICsrKysrKysrKysrKysrKysrKysrCiBzcmMvaW5jbHVkZS9jYXRh bG9nL3BnX29wZXJhdG9yLmRhdCAgICAgICAgIHwgICA2ICstCiBzcmMvaW5jbHVkZS9jYXRhbG9n L3BnX3Byb2MuZGF0ICAgICAgICAgICAgIHwgICA0ICsKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvcmFuZ2V0eXBlcy5vdXQgICAgfCAxMTQgKysrKysrKysKIHNyYy90ZXN0L3JlZ3Jlc3Mvc3Fs L3JhbmdldHlwZXMuc3FsICAgICAgICAgfCAgNTMgKysrKwogNSBmaWxlcyBjaGFuZ2VkLCA0NzQg aW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91 dGlscy9hZHQvcmFuZ2V0eXBlc19zZWxmdW5jcy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3Jh bmdldHlwZXNfc2VsZnVuY3MuYwppbmRleCA3NWYxZTc1NjdkNS4uY2M3MDJmMjg2MTAgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9yYW5nZXR5cGVzX3NlbGZ1bmNzLmMKKysrIGIv c3JjL2JhY2tlbmQvdXRpbHMvYWR0L3JhbmdldHlwZXNfc2VsZnVuY3MuYwpAQCAtMTIyMSwzICsx MjIxLDMwMyBAQCBjYWxjX2hpc3Rfc2VsZWN0aXZpdHlfY29udGFpbnMoVHlwZUNhY2hlRW50cnkg KnR5cGNhY2hlLAogCiAJcmV0dXJuIHN1bV9mcmFjOwogfQorCisvKgorICogRXN0aW1hdGUgam9p biBzZWxlY3Rpdml0eSBQKFggPCBZKSB1c2luZyByYW5nZWJvdW5kIGhpc3RvZ3JhbXMuCisgKgor ICogQmFzZWQgb246IERpb2dvIFJlcGFzLCBaaGljaGVuZyBMdW8sIE1heGltZSBTY2hvZW1hbnMs IE1haG1vdWQgU2FrciwgMjAyMgorICogIlNlbGVjdGl2aXR5IEVzdGltYXRpb24gb2YgSW5lcXVh bGl0eSBKb2lucyBJbiBEYXRhYmFzZXMiCisgKiBodHRwczovL2RvaS5vcmcvMTAuNDg1NTAvYXJY aXYuMjIwNi4wNzM5NgorICoKKyAqIGhpc3QxIGFuZCBoaXN0MiBhcmUgYXJyYXlzIG9mIFJhbmdl Qm91bmQgZW50cmllcyBmcm9tIHRoZSBib3VuZHMgaGlzdG9ncmFtcworICogb2YgdHdvIHJhbmdl LXR5cGVkIGF0dHJpYnV0ZXMgWCBhbmQgWSwgcmVzcGVjdGl2ZWx5LiAgRWFjaCBhcnJheSBoYXMg YXQKKyAqIGxlYXN0IDIgZW50cmllcyAob25lIGhpc3RvZ3JhbSBiaW4pLiAgVGhlIGVudHJpZXMg Y2FycnkgZnVsbCBib3VuZCBtZXRhZGF0YQorICogKGxvd2VyL3VwcGVyIGZsYWcsIGluY2x1c2l2 ZS9leGNsdXNpdmUpLCBhbmQgYWxsIGNvbXBhcmlzb25zIHVzZQorICogcmFuZ2VfY21wX2JvdW5k cygpIHNvIHRoYXQgYm91bmQgc2VtYW50aWNzIGFyZSBwcmVzZXJ2ZWQuCisgKgorICogVGhlIGFs Z29yaXRobSBtb2RlbHMgZWFjaCBhdHRyaWJ1dGUncyBkaXN0cmlidXRpb24gYXMgYSBwaWVjZXdp c2UgZnVuY3Rpb24KKyAqIGRlcml2ZWQgZnJvbSBpdHMgaGlzdG9ncmFtLCB0aGVuIGNvbXB1dGVz OgorICogICBQKFggPCBZKSA9IDAuNSAqIHN1bSggKEZfWChwcmV2KSArIEZfWChjdXIpKSAqIChG X1koY3VyKSAtIEZfWShwcmV2KSkgKQorICogYnkgcGFyYWxsZWwtc2Nhbm5pbmcgYm90aCBoaXN0 b2dyYW1zLgorICoKKyAqIFRoZSBpbml0aWFsIGZhc3QtZm9yd2FyZCBsb29wcyBza2lwIGhpc3Rv Z3JhbSBlbnRyaWVzIHRoYXQgZmFsbCBlbnRpcmVseQorICogYmVmb3JlIHRoZSBvdGhlciBoaXN0 b2dyYW0ncyByYW5nZSwgc28gdGhlIG1haW4gbG9vcCBvbmx5IHByb2Nlc3NlcyB0aGUKKyAqIG92 ZXJsYXBwaW5nIHJlZ2lvbi4gIEJvdW5kcyBjaGVja3MgYXJlIHJlcXVpcmVkIGJlY2F1c2UgdGhl IGhpc3RvZ3JhbXMgbWF5CisgKiBiZSBjb21wbGV0ZWx5IGRpc2pvaW50IChlLmcuLCBhbGwgb2Yg WCBpcyBiZWxvdyBhbGwgb2YgWSkuCisgKi8KK3N0YXRpYyBkb3VibGUKK2NhbGNfaGlzdF9qb2lu X3NlbGVjdGl2aXR5KFR5cGVDYWNoZUVudHJ5ICp0eXBjYWNoZSwKKwkJCQkJCSAgIGNvbnN0IFJh bmdlQm91bmQgKmhpc3QxLCBpbnQgbmhpc3QxLAorCQkJCQkJICAgY29uc3QgUmFuZ2VCb3VuZCAq aGlzdDIsIGludCBuaGlzdDIpCit7CisJaW50CQkJaSwKKwkJCQlqOworCWRvdWJsZQkJc2VsZWN0 aXZpdHkgPSAwLjA7CisJZG91YmxlCQlwcmV2X3NlbDEgPSAtMS4wOwkvKiBuZWdhdGl2ZSBzZW50 aW5lbCBza2lwcyBmaXJzdCBpdGVyICovCisJZG91YmxlCQlwcmV2X3NlbDIgPSAwLjA7CisKKwlB c3NlcnQobmhpc3QxID4gMSk7CisJQXNzZXJ0KG5oaXN0MiA+IDEpOworCisJLyoKKwkgKiBGYXN0 LWZvcndhcmQgcGFzdCBoaXN0MSBlbnRyaWVzIHRoYXQgYXJlIGVudGlyZWx5IGJlbG93IGhpc3Qy WzBdLCBhbmQKKwkgKiB2aWNlIHZlcnNhLiAgQm91bmRzIGNoZWNrcyBwcmV2ZW50IG91dC1vZi1i b3VuZHMgYWNjZXNzIHdoZW4gdGhlCisJICogaGlzdG9ncmFtcyBhcmUgZnVsbHkgZGlzam9pbnQu CisJICovCisJZm9yIChpID0gMDsgaSA8IG5oaXN0MSAmJgorCQkgcmFuZ2VfY21wX2JvdW5kcyh0 eXBjYWNoZSwgJmhpc3QxW2ldLCAmaGlzdDJbMF0pIDwgMDsgaSsrKQorCQk7CisJZm9yIChqID0g MDsgaiA8IG5oaXN0MiAmJgorCQkgcmFuZ2VfY21wX2JvdW5kcyh0eXBjYWNoZSwgJmhpc3QyW2pd LCAmaGlzdDFbMF0pIDwgMDsgaisrKQorCQk7CisKKwkvKgorCSAqIEhhbmRsZSBmdWxseS1zZXBh cmF0ZWQgaGlzdG9ncmFtcy4gIFdoZW4gYWxsIGJvdW5kcyBpbiBoaXN0MSBhcmUgYmVsb3cKKwkg KiBhbGwgYm91bmRzIGluIGhpc3QyLCBQKFggPCBZKSBpcyB+MS4wLiAgV2hlbiBhbGwgb2YgaGlz dDIgaXMgYmVsb3cKKwkgKiBoaXN0MSwgUChYIDwgWSkgaXMgfjAuMC4gIFdlIHJldHVybiBpbW1l ZGlhdGVseSByYXRoZXIgdGhhbiBmYWxsaW5nCisJICogaW50byB0aGUgb3ZlcmxhcCB3YWxrIHdp dGggaW52YWxpZCBpbmRpY2VzLgorCSAqLworCWlmIChpID49IG5oaXN0MSkKKwkJcmV0dXJuIDEu MDsKKwlpZiAoaiA+PSBuaGlzdDIpCisJCXJldHVybiAwLjA7CisKKwkvKiBXYWxrIHRoZSBvdmVy bGFwcGluZyByZWdpb24gb2YgYm90aCBoaXN0b2dyYW1zICovCisJd2hpbGUgKGkgPCBuaGlzdDEg JiYgaiA8IG5oaXN0MikKKwl7CisJCWRvdWJsZQkJY3VyX3NlbDEsCisJCQkJCWN1cl9zZWwyOwor CQlSYW5nZUJvdW5kCWN1cl9zeW5jOworCQlpbnQJCQljbXA7CisKKwkJY21wID0gcmFuZ2VfY21w X2JvdW5kcyh0eXBjYWNoZSwgJmhpc3QxW2ldLCAmaGlzdDJbal0pOworCQlpZiAoY21wIDwgMCkK KwkJCWN1cl9zeW5jID0gaGlzdDFbaSsrXTsKKwkJZWxzZSBpZiAoY21wID4gMCkKKwkJCWN1cl9z eW5jID0gaGlzdDJbaisrXTsKKwkJZWxzZQorCQl7CisJCQkvKiBFcXVhbCBib3VuZHM6IGFkdmFu Y2UgYm90aCAqLworCQkJY3VyX3N5bmMgPSBoaXN0MVtpXTsKKwkJCWkrKzsKKwkJCWorKzsKKwkJ fQorCQljdXJfc2VsMSA9IGNhbGNfaGlzdF9zZWxlY3Rpdml0eV9zY2FsYXIodHlwY2FjaGUsICZj dXJfc3luYywKKwkJCQkJCQkJCQkJCWhpc3QxLCBuaGlzdDEsIGZhbHNlKTsKKwkJY3VyX3NlbDIg PSBjYWxjX2hpc3Rfc2VsZWN0aXZpdHlfc2NhbGFyKHR5cGNhY2hlLCAmY3VyX3N5bmMsCisJCQkJ CQkJCQkJCQloaXN0Miwgbmhpc3QyLCBmYWxzZSk7CisKKwkJLyogU2tpcCB0aGUgZmlyc3QgaXRl cmF0aW9uIChubyBwcmV2aW91cyBwb2ludCB5ZXQpICovCisJCWlmIChwcmV2X3NlbDEgPj0gMCkK KwkJCXNlbGVjdGl2aXR5ICs9IChwcmV2X3NlbDEgKyBjdXJfc2VsMSkgKiAoY3VyX3NlbDIgLSBw cmV2X3NlbDIpOworCisJCXByZXZfc2VsMSA9IGN1cl9zZWwxOworCQlwcmV2X3NlbDIgPSBjdXJf c2VsMjsKKwl9CisKKwkvKiBQKFggPCBZKSA9IDAuNSAqIFN1bSguLi4pICovCisJc2VsZWN0aXZp dHkgLz0gMjsKKworCS8qIEluY2x1ZGUgcmVtYWluZGVyIG9mIGhpc3QyIGlmIGhpc3QxIHdhcyBl eGhhdXN0ZWQgZmlyc3QgKi8KKwlpZiAoaiA8IG5oaXN0MikKKwkJc2VsZWN0aXZpdHkgKz0gMSAt IHByZXZfc2VsMjsKKworCXJldHVybiBzZWxlY3Rpdml0eTsKK30KKworLyoKKyAqIHJhbmdlam9p bnNlbCAtLSBqb2luIHNlbGVjdGl2aXR5IGZvciByYW5nZS12cy1yYW5nZSBvcGVyYXRvcnMKKyAq CisgKiBTdXBwb3J0czogPDwsID4+LCAmJgorICogVGhlc2Ugb3BlcmF0b3JzIG1hcCBkaXJlY3Rs eSB0byBzdHJpY3QgYm91bmQgY29tcGFyaXNvbnMgUChYIDwgWSksCisgKiB3aGljaCBjYWxjX2hp c3Rfam9pbl9zZWxlY3Rpdml0eSgpIGVzdGltYXRlcyBmcm9tIGJvdW5kIGhpc3RvZ3JhbXMuCisg KiBPdGhlciByYW5nZSBvcGVyYXRvcnMgYXJlIGxlZnQgdG8gdGhlaXIgZXhpc3RpbmcgZ2VuZXJp YyBlc3RpbWF0b3JzLgorICovCitEYXR1bQorcmFuZ2Vqb2luc2VsKFBHX0ZVTkNUSU9OX0FSR1Mp Cit7CisJUGxhbm5lckluZm8gKnJvb3QgPSAoUGxhbm5lckluZm8gKikgUEdfR0VUQVJHX1BPSU5U RVIoMCk7CisJT2lkCQkJb3BlcmF0b3IgPSBQR19HRVRBUkdfT0lEKDEpOworCUxpc3QJICAgKmFy Z3MgPSAoTGlzdCAqKSBQR19HRVRBUkdfUE9JTlRFUigyKTsKKwlTcGVjaWFsSm9pbkluZm8gKnNq aW5mbyA9IChTcGVjaWFsSm9pbkluZm8gKikgUEdfR0VUQVJHX1BPSU5URVIoNCk7CisJVmFyaWFi bGVTdGF0RGF0YSB2YXJkYXRhMTsKKwlWYXJpYWJsZVN0YXREYXRhIHZhcmRhdGEyOworCVNlbGVj dGl2aXR5IHNlbGVjOworCUF0dFN0YXRzU2xvdCBoaXN0MTsKKwlBdHRTdGF0c1Nsb3QgaGlzdDI7 CisJQXR0U3RhdHNTbG90IHNzbG90OworCWJvb2wJCWhhdmVfaGlzdDEgPSBmYWxzZTsKKwlib29s CQloYXZlX2hpc3QyID0gZmFsc2U7CisJVHlwZUNhY2hlRW50cnkgKnR5cGNhY2hlOworCUZvcm1f cGdfc3RhdGlzdGljIHN0YXRzMTsKKwlGb3JtX3BnX3N0YXRpc3RpYyBzdGF0czI7CisJZG91Ymxl CQllbXB0eV9mcmFjMTsKKwlkb3VibGUJCWVtcHR5X2ZyYWMyOworCWRvdWJsZQkJbnVsbF9mcmFj MTsKKwlkb3VibGUJCW51bGxfZnJhYzI7CisJaW50CQkJbmhpc3QxOworCWludAkJCW5oaXN0MjsK KwlSYW5nZUJvdW5kICpoaXN0MV9sb3dlcjsKKwlSYW5nZUJvdW5kICpoaXN0MV91cHBlcjsKKwlS YW5nZUJvdW5kICpoaXN0Ml9sb3dlcjsKKwlSYW5nZUJvdW5kICpoaXN0Ml91cHBlcjsKKwlib29s CQlqb2luX2lzX3JldmVyc2VkOworCWJvb2wJCWVtcHR5OworCWludAkJCWk7CisKKwlnZXRfam9p bl92YXJpYWJsZXMocm9vdCwgYXJncywgc2ppbmZvLCAmdmFyZGF0YTEsICZ2YXJkYXRhMiwKKwkJ CQkJICAgJmpvaW5faXNfcmV2ZXJzZWQpOworCisJc2VsZWMgPSBkZWZhdWx0X3JhbmdlX3NlbGVj dGl2aXR5KG9wZXJhdG9yKTsKKworCS8qCisJICogQWNxdWlyZSBoaXN0b2dyYW0gc3RhdHMgZm9y IGJvdGggc2lkZXMuICBFYWNoIHNsb3QgaXMgdHJhY2tlZAorCSAqIGluZGVwZW5kZW50bHkgc28g d2UgY2FuIHJlbGVhc2UgZXhhY3RseSB3aGF0IHdhcyBhY3F1aXJlZCBvbiBhbnkKKwkgKiBmYWls dXJlIHBhdGguCisJICovCisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHZhcmRhdGExLnN0YXRzVHVw bGUpIHx8CisJCSFIZWFwVHVwbGVJc1ZhbGlkKHZhcmRhdGEyLnN0YXRzVHVwbGUpKQorCQlnb3Rv IGNsZWFudXA7CisKKwlpZiAodmFyZGF0YTEudmFydHlwZSAhPSB2YXJkYXRhMi52YXJ0eXBlKQor CQlnb3RvIGNsZWFudXA7CisKKwltZW1zZXQoJmhpc3QxLCAwLCBzaXplb2YoaGlzdDEpKTsKKwlt ZW1zZXQoJmhpc3QyLCAwLCBzaXplb2YoaGlzdDIpKTsKKworCWlmICghZ2V0X2F0dHN0YXRzc2xv dCgmaGlzdDEsIHZhcmRhdGExLnN0YXRzVHVwbGUsCisJCQkJCQkgIFNUQVRJU1RJQ19LSU5EX0JP VU5EU19ISVNUT0dSQU0sIEludmFsaWRPaWQsCisJCQkJCQkgIEFUVFNUQVRTU0xPVF9WQUxVRVMp KQorCQlnb3RvIGNsZWFudXA7CisJaGF2ZV9oaXN0MSA9IHRydWU7CisKKwlpZiAoIWdldF9hdHRz dGF0c3Nsb3QoJmhpc3QyLCB2YXJkYXRhMi5zdGF0c1R1cGxlLAorCQkJCQkJICBTVEFUSVNUSUNf S0lORF9CT1VORFNfSElTVE9HUkFNLCBJbnZhbGlkT2lkLAorCQkJCQkJICBBVFRTVEFUU1NMT1Rf VkFMVUVTKSkKKwkJZ290byBjbGVhbnVwOworCWhhdmVfaGlzdDIgPSB0cnVlOworCisJLyogSW5p dGlhbGl6ZSB0eXBlIGNhY2hlICovCisJdHlwY2FjaGUgPSByYW5nZV9nZXRfdHlwY2FjaGUoZmNp bmZvLCB2YXJkYXRhMS52YXJ0eXBlKTsKKworCS8qIExvb2sgdXAgTlVMTCBhbmQgZW1wdHktcmFu Z2UgZnJhY3Rpb25zICovCisJc3RhdHMxID0gKEZvcm1fcGdfc3RhdGlzdGljKSBHRVRTVFJVQ1Qo dmFyZGF0YTEuc3RhdHNUdXBsZSk7CisJc3RhdHMyID0gKEZvcm1fcGdfc3RhdGlzdGljKSBHRVRT VFJVQ1QodmFyZGF0YTIuc3RhdHNUdXBsZSk7CisKKwludWxsX2ZyYWMxID0gc3RhdHMxLT5zdGFu dWxsZnJhYzsKKwludWxsX2ZyYWMyID0gc3RhdHMyLT5zdGFudWxsZnJhYzsKKworCS8qIFRyeSB0 byBnZXQgZnJhY3Rpb24gb2YgZW1wdHkgcmFuZ2VzIGZvciB0aGUgZmlyc3QgdmFyaWFibGUgKi8K KwlpZiAoZ2V0X2F0dHN0YXRzc2xvdCgmc3Nsb3QsIHZhcmRhdGExLnN0YXRzVHVwbGUsCisJCQkJ CQkgU1RBVElTVElDX0tJTkRfUkFOR0VfTEVOR1RIX0hJU1RPR1JBTSwKKwkJCQkJCSBJbnZhbGlk T2lkLCBBVFRTVEFUU1NMT1RfTlVNQkVSUykpCisJeworCQlpZiAoc3Nsb3Qubm51bWJlcnMgIT0g MSkKKwkJCWVsb2coRVJST1IsICJpbnZhbGlkIGVtcHR5IGZyYWN0aW9uIHN0YXRpc3RpYyIpOwor CQllbXB0eV9mcmFjMSA9IHNzbG90Lm51bWJlcnNbMF07CisJCWZyZWVfYXR0c3RhdHNzbG90KCZz c2xvdCk7CisJfQorCWVsc2UKKwl7CisJCWVtcHR5X2ZyYWMxID0gMC4wOworCX0KKworCS8qIFRy eSB0byBnZXQgZnJhY3Rpb24gb2YgZW1wdHkgcmFuZ2VzIGZvciB0aGUgc2Vjb25kIHZhcmlhYmxl ICovCisJaWYgKGdldF9hdHRzdGF0c3Nsb3QoJnNzbG90LCB2YXJkYXRhMi5zdGF0c1R1cGxlLAor CQkJCQkJIFNUQVRJU1RJQ19LSU5EX1JBTkdFX0xFTkdUSF9ISVNUT0dSQU0sCisJCQkJCQkgSW52 YWxpZE9pZCwgQVRUU1RBVFNTTE9UX05VTUJFUlMpKQorCXsKKwkJaWYgKHNzbG90Lm5udW1iZXJz ICE9IDEpCisJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBlbXB0eSBmcmFjdGlvbiBzdGF0aXN0aWMi KTsKKwkJZW1wdHlfZnJhYzIgPSBzc2xvdC5udW1iZXJzWzBdOworCQlmcmVlX2F0dHN0YXRzc2xv dCgmc3Nsb3QpOworCX0KKwllbHNlCisJeworCQllbXB0eV9mcmFjMiA9IDAuMDsKKwl9CisKKwkv KiBDb252ZXJ0IHJhbmdlIGhpc3RvZ3JhbXMgdG8gc2VwYXJhdGUgbG93ZXIvdXBwZXIgYm91bmQg YXJyYXlzICovCisJbmhpc3QxID0gaGlzdDEubnZhbHVlczsKKwloaXN0MV9sb3dlciA9IChSYW5n ZUJvdW5kICopIHBhbGxvYyhzaXplb2YoUmFuZ2VCb3VuZCkgKiBuaGlzdDEpOworCWhpc3QxX3Vw cGVyID0gKFJhbmdlQm91bmQgKikgcGFsbG9jKHNpemVvZihSYW5nZUJvdW5kKSAqIG5oaXN0MSk7 CisJZm9yIChpID0gMDsgaSA8IG5oaXN0MTsgaSsrKQorCXsKKwkJcmFuZ2VfZGVzZXJpYWxpemUo dHlwY2FjaGUsIERhdHVtR2V0UmFuZ2VUeXBlUChoaXN0MS52YWx1ZXNbaV0pLAorCQkJCQkJICAm aGlzdDFfbG93ZXJbaV0sICZoaXN0MV91cHBlcltpXSwgJmVtcHR5KTsKKwkJaWYgKGVtcHR5KQor CQkJZWxvZyhFUlJPUiwgImJvdW5kcyBoaXN0b2dyYW0gY29udGFpbnMgYW4gZW1wdHkgcmFuZ2Ui KTsKKwl9CisKKwluaGlzdDIgPSBoaXN0Mi5udmFsdWVzOworCWhpc3QyX2xvd2VyID0gKFJhbmdl Qm91bmQgKikgcGFsbG9jKHNpemVvZihSYW5nZUJvdW5kKSAqIG5oaXN0Mik7CisJaGlzdDJfdXBw ZXIgPSAoUmFuZ2VCb3VuZCAqKSBwYWxsb2Moc2l6ZW9mKFJhbmdlQm91bmQpICogbmhpc3QyKTsK Kwlmb3IgKGkgPSAwOyBpIDwgbmhpc3QyOyBpKyspCisJeworCQlyYW5nZV9kZXNlcmlhbGl6ZSh0 eXBjYWNoZSwgRGF0dW1HZXRSYW5nZVR5cGVQKGhpc3QyLnZhbHVlc1tpXSksCisJCQkJCQkgICZo aXN0Ml9sb3dlcltpXSwgJmhpc3QyX3VwcGVyW2ldLCAmZW1wdHkpOworCQlpZiAoZW1wdHkpCisJ CQllbG9nKEVSUk9SLCAiYm91bmRzIGhpc3RvZ3JhbSBjb250YWlucyBhbiBlbXB0eSByYW5nZSIp OworCX0KKworCS8qIEVzdGltYXRlIHNlbGVjdGl2aXR5IGJhc2VkIG9uIHRoZSBvcGVyYXRvciAq LworCXN3aXRjaCAob3BlcmF0b3IpCisJeworCQljYXNlIE9JRF9SQU5HRV9PVkVSTEFQX09QOgor CisJCQkvKgorCQkJICogQSAmJiBCIGlmZiBOT1QoQSA8PCBCKSBBTkQgTk9UKEEgPj4gQikgPSAx IC0gUChBLnVwcGVyIDwKKwkJCSAqIEIubG93ZXIpIC0gUChCLnVwcGVyIDwgQS5sb3dlcikKKwkJ CSAqLworCQkJc2VsZWMgPSAxOworCQkJc2VsZWMgLT0gY2FsY19oaXN0X2pvaW5fc2VsZWN0aXZp dHkodHlwY2FjaGUsCisJCQkJCQkJCQkJCQloaXN0MV91cHBlciwgbmhpc3QxLAorCQkJCQkJCQkJ CQkJaGlzdDJfbG93ZXIsIG5oaXN0Mik7CisJCQlzZWxlYyAtPSBjYWxjX2hpc3Rfam9pbl9zZWxl Y3Rpdml0eSh0eXBjYWNoZSwKKwkJCQkJCQkJCQkJCWhpc3QyX3VwcGVyLCBuaGlzdDIsCisJCQkJ CQkJCQkJCQloaXN0MV9sb3dlciwgbmhpc3QxKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT0lEX1JB TkdFX0xFRlRfT1A6CisJCQkvKiBBIDw8IEIgaWZmIHVwcGVyKEEpIDwgbG93ZXIoQikgKi8KKwkJ CXNlbGVjID0gY2FsY19oaXN0X2pvaW5fc2VsZWN0aXZpdHkodHlwY2FjaGUsCisJCQkJCQkJCQkJ CSAgIGhpc3QxX3VwcGVyLCBuaGlzdDEsCisJCQkJCQkJCQkJCSAgIGhpc3QyX2xvd2VyLCBuaGlz dDIpOworCQkJYnJlYWs7CisKKwkJY2FzZSBPSURfUkFOR0VfUklHSFRfT1A6CisJCQkvKiBBID4+ IEIgaWZmIHVwcGVyKEIpIDwgbG93ZXIoQSkgKi8KKwkJCXNlbGVjID0gY2FsY19oaXN0X2pvaW5f c2VsZWN0aXZpdHkodHlwY2FjaGUsCisJCQkJCQkJCQkJCSAgIGhpc3QyX3VwcGVyLCBuaGlzdDIs CisJCQkJCQkJCQkJCSAgIGhpc3QxX2xvd2VyLCBuaGlzdDEpOworCQkJYnJlYWs7CisKKwkJZGVm YXVsdDoKKwkJCS8qIFVuc3VwcG9ydGVkIG9wZXJhdG9yOyBrZWVwIHRoZSBkZWZhdWx0IHNlbGVj dGl2aXR5ICovCisJCQlnb3RvIGNsZWFudXA7CisJfQorCisJLyogVGhlIGhpc3RvZ3JhbS1iYXNl ZCBzZWxlY3Rpdml0eSBhcHBsaWVzIHRvIG5vbi1lbXB0eSByYW5nZXMgb25seSAqLworCXNlbGVj ICo9ICgxIC0gZW1wdHlfZnJhYzEpICogKDEgLSBlbXB0eV9mcmFjMik7CisKKwkvKgorCSAqIEZv ciB0aGUgc3VwcG9ydGVkIG9wZXJhdG9ycyAoPDwsID4+LCAmJiksIGVtcHR5IHJhbmdlcyBhbHdh eXMgcHJvZHVjZQorCSAqIGZhbHNlLCBzbyBubyBlbXB0eS1mcmFjdGlvbiBhZGp1c3RtZW50IGlz IG5lZWRlZC4KKwkgKi8KKworCS8qIEFsbCByYW5nZSBvcGVyYXRvcnMgYXJlIHN0cmljdCAqLwor CXNlbGVjICo9ICgxIC0gbnVsbF9mcmFjMSkgKiAoMSAtIG51bGxfZnJhYzIpOworCitjbGVhbnVw OgorCWlmIChoYXZlX2hpc3QyKQorCQlmcmVlX2F0dHN0YXRzc2xvdCgmaGlzdDIpOworCWlmICho YXZlX2hpc3QxKQorCQlmcmVlX2F0dHN0YXRzc2xvdCgmaGlzdDEpOworCisJUmVsZWFzZVZhcmlh YmxlU3RhdHModmFyZGF0YTEpOworCVJlbGVhc2VWYXJpYWJsZVN0YXRzKHZhcmRhdGEyKTsKKwor CUNMQU1QX1BST0JBQklMSVRZKHNlbGVjKTsKKworCVBHX1JFVFVSTl9GTE9BVDgoKGZsb2F0OCkg c2VsZWMpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19vcGVyYXRvci5k YXQgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX29wZXJhdG9yLmRhdAppbmRleCAxNDY1ZjEzMTIw YS4uNWVhNDQzNGY5ZmEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfb3BlcmF0 b3IuZGF0CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfb3BlcmF0b3IuZGF0CkBAIC0zMDk0 LDcgKzMwOTQsNyBAQAogICBvcHJuYW1lID0+ICcmJicsIG9wcmxlZnQgPT4gJ2FueXJhbmdlJywg b3BycmlnaHQgPT4gJ2FueXJhbmdlJywKICAgb3BycmVzdWx0ID0+ICdib29sJywgb3ByY29tID0+ ICcmJihhbnlyYW5nZSxhbnlyYW5nZSknLAogICBvcHJjb2RlID0+ICdyYW5nZV9vdmVybGFwcycs IG9wcnJlc3QgPT4gJ3Jhbmdlc2VsJywKLSAgb3Byam9pbiA9PiAnYXJlYWpvaW5zZWwnIH0sCisg IG9wcmpvaW4gPT4gJ3Jhbmdlam9pbnNlbCcgfSwKIHsgb2lkID0+ICczODg5Jywgb2lkX3N5bWJv bCA9PiAnT0lEX1JBTkdFX0NPTlRBSU5TX0VMRU1fT1AnLAogICBkZXNjciA9PiAnY29udGFpbnMn LAogICBvcHJuYW1lID0+ICdAPicsIG9wcmxlZnQgPT4gJ2FueXJhbmdlJywgb3BycmlnaHQgPT4g J2FueWVsZW1lbnQnLApAQCAtMzEyMiwxMiArMzEyMiwxMiBAQAogICBvcHJuYW1lID0+ICc8PCcs IG9wcmxlZnQgPT4gJ2FueXJhbmdlJywgb3BycmlnaHQgPT4gJ2FueXJhbmdlJywKICAgb3BycmVz dWx0ID0+ICdib29sJywgb3ByY29tID0+ICc+PihhbnlyYW5nZSxhbnlyYW5nZSknLAogICBvcHJj b2RlID0+ICdyYW5nZV9iZWZvcmUnLCBvcHJyZXN0ID0+ICdyYW5nZXNlbCcsCi0gIG9wcmpvaW4g PT4gJ3NjYWxhcmx0am9pbnNlbCcgfSwKKyAgb3Byam9pbiA9PiAncmFuZ2Vqb2luc2VsJyB9LAog eyBvaWQgPT4gJzM4OTQnLCBvaWRfc3ltYm9sID0+ICdPSURfUkFOR0VfUklHSFRfT1AnLCBkZXNj ciA9PiAnaXMgcmlnaHQgb2YnLAogICBvcHJuYW1lID0+ICc+PicsIG9wcmxlZnQgPT4gJ2FueXJh bmdlJywgb3BycmlnaHQgPT4gJ2FueXJhbmdlJywKICAgb3BycmVzdWx0ID0+ICdib29sJywgb3By Y29tID0+ICc8PChhbnlyYW5nZSxhbnlyYW5nZSknLAogICBvcHJjb2RlID0+ICdyYW5nZV9hZnRl cicsIG9wcnJlc3QgPT4gJ3Jhbmdlc2VsJywKLSAgb3Byam9pbiA9PiAnc2NhbGFyZ3Rqb2luc2Vs JyB9LAorICBvcHJqb2luID0+ICdyYW5nZWpvaW5zZWwnIH0sCiB7IG9pZCA9PiAnMzg5NScsIG9p ZF9zeW1ib2wgPT4gJ09JRF9SQU5HRV9PVkVSTEFQU19MRUZUX09QJywKICAgZGVzY3IgPT4gJ292 ZXJsYXBzIG9yIGlzIGxlZnQgb2YnLAogICBvcHJuYW1lID0+ICcmPCcsIG9wcmxlZnQgPT4gJ2Fu eXJhbmdlJywgb3BycmlnaHQgPT4gJ2FueXJhbmdlJywKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L2NhdGFsb2cvcGdfcHJvYy5kYXQgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0Cmlu ZGV4IDk5ZmE5YTZlZGUyLi5jNmE3MDdhY2FlNCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0 YWxvZy9wZ19wcm9jLmRhdAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CkBA IC0xMjkxOSw0ICsxMjkxOSw4IEBACiAgIHByb25hbWUgPT4gJ2hhc2hvaWQ4ZXh0ZW5kZWQnLCBw cm9yZXR0eXBlID0+ICdpbnQ4JywKICAgcHJvYXJndHlwZXMgPT4gJ29pZDggaW50OCcsIHByb3Ny YyA9PiAnaGFzaG9pZDhleHRlbmRlZCcgfSwKIAoreyBvaWQgPT4gJzgzNTUnLCBkZXNjciA9PiAn am9pbiBzZWxlY3Rpdml0eSBmb3IgcmFuZ2Ugb3BlcmF0b3JzJywKKyAgcHJvbmFtZSA9PiAncmFu Z2Vqb2luc2VsJywgcHJvdm9sYXRpbGUgPT4gJ3MnLCBwcm9yZXR0eXBlID0+ICdmbG9hdDgnLAor ICBwcm9hcmd0eXBlcyA9PiAnaW50ZXJuYWwgb2lkIGludGVybmFsIGludDIgaW50ZXJuYWwnLAor ICBwcm9zcmMgPT4gJ3Jhbmdlam9pbnNlbCcgfSwKIF0KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvcmFuZ2V0eXBlcy5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L3JhbmdldHlwZXMub3V0CmluZGV4IGUwNjJhNGU1YzJjLi4yZmM1Yjc3MGY5MCAxMDA2NDQKLS0t IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9yYW5nZXR5cGVzLm91dAorKysgYi9zcmMvdGVz dC9yZWdyZXNzL2V4cGVjdGVkL3JhbmdldHlwZXMub3V0CkBAIC0yMDMzLDMgKzIwMzMsMTE3IEBA IHNlbGVjdCAqIGZyb20gdGV4dF9zdXBwb3J0X3Rlc3Qgd2hlcmUgdCA8QCB0ZXh0cmFuZ2Vfc3Vw cCgnYScsICdkJyk7CiAKIGRyb3AgdGFibGUgdGV4dF9zdXBwb3J0X3Rlc3Q7CiBkcm9wIHR5cGUg dGV4dHJhbmdlX3N1cHA7CistLQorLS0gdGVzdCBzZWxlY3Rpdml0eSBvZiByYW5nZSBqb2luIG9w ZXJhdG9ycworLS0KK2NyZWF0ZSB0YWJsZSB0ZXN0X3JhbmdlX2pvaW5fMSAoaXIxIGludDRyYW5n ZSk7CitjcmVhdGUgdGFibGUgdGVzdF9yYW5nZV9qb2luXzIgKGlyMiBpbnQ0cmFuZ2UpOworY3Jl YXRlIHRhYmxlIHRlc3RfcmFuZ2Vfam9pbl8zIChpcjMgaW50NHJhbmdlKTsKK2luc2VydCBpbnRv IHRlc3RfcmFuZ2Vfam9pbl8xIHNlbGVjdCBpbnQ0cmFuZ2UoZywgZysxMCkgZnJvbSBnZW5lcmF0 ZV9zZXJpZXMoMSwgMTAwMCkgZzsKK2luc2VydCBpbnRvIHRlc3RfcmFuZ2Vfam9pbl8xIHNlbGVj dCBpbnQ0cmFuZ2UoZywgZysxMDApIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMDAsIDEwKSBn OworaW5zZXJ0IGludG8gdGVzdF9yYW5nZV9qb2luXzIgc2VsZWN0IGludDRyYW5nZShnLCBnKzEw KSBmcm9tIGdlbmVyYXRlX3NlcmllcygxLCA1MDApIGc7CitpbnNlcnQgaW50byB0ZXN0X3Jhbmdl X2pvaW5fMiBzZWxlY3QgaW50NHJhbmdlKGcsIGcrMTAwKSBmcm9tIGdlbmVyYXRlX3Nlcmllcygx LCA1MDAsIDEwKSBnOworaW5zZXJ0IGludG8gdGVzdF9yYW5nZV9qb2luXzMgc2VsZWN0IGludDRy YW5nZShnLCBnKzEwKSBmcm9tIGdlbmVyYXRlX3Nlcmllcyg1MDEsIDEwMDApIGc7CitpbnNlcnQg aW50byB0ZXN0X3JhbmdlX2pvaW5fMyBzZWxlY3QgaW50NHJhbmdlKGcsIGcrMTAwKSBmcm9tIGdl bmVyYXRlX3Nlcmllcyg1MDEsIDEwMDAsIDEwKSBnOworYW5hbHl6ZSB0ZXN0X3JhbmdlX2pvaW5f MTsKK2FuYWx5emUgdGVzdF9yYW5nZV9qb2luXzI7CithbmFseXplIHRlc3RfcmFuZ2Vfam9pbl8z OworLS0gcmVvcmRlciBqb2lucyBiYXNlZCBvbiBjb21wdXRlZCBzZWxlY3Rpdml0eQorZXhwbGFp biAoY29zdHMgb2ZmKSBzZWxlY3QgY291bnQoKikgZnJvbSB0ZXN0X3JhbmdlX2pvaW5fMSwgdGVz dF9yYW5nZV9qb2luXzIsIHRlc3RfcmFuZ2Vfam9pbl8zIHdoZXJlIGlyMSAmJiBpcjIgYW5kIGly MiAmJiBpcjM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFO ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBBZ2dyZWdhdGUKKyAgIC0+ICBOZXN0ZWQgTG9vcAorICAgICAgICAgSm9pbiBG aWx0ZXI6ICh0ZXN0X3JhbmdlX2pvaW5fMS5pcjEgJiYgdGVzdF9yYW5nZV9qb2luXzIuaXIyKQor ICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHRlc3RfcmFuZ2Vfam9pbl8xCisgICAgICAgICAtPiAg TWF0ZXJpYWxpemUKKyAgICAgICAgICAgICAgIC0+ICBOZXN0ZWQgTG9vcAorICAgICAgICAgICAg ICAgICAgICAgSm9pbiBGaWx0ZXI6ICh0ZXN0X3JhbmdlX2pvaW5fMi5pcjIgJiYgdGVzdF9yYW5n ZV9qb2luXzMuaXIzKQorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHRlc3Rf cmFuZ2Vfam9pbl8yCisgICAgICAgICAgICAgICAgICAgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiB0ZXN0X3JhbmdlX2pvaW5fMwor KDEwIHJvd3MpCisKK2V4cGxhaW4gKGNvc3RzIG9mZikgc2VsZWN0IGNvdW50KCopIGZyb20gdGVz dF9yYW5nZV9qb2luXzEsIHRlc3RfcmFuZ2Vfam9pbl8yLCB0ZXN0X3JhbmdlX2pvaW5fMyB3aGVy ZSBpcjEgPDwgaXIyIGFuZCBpcjIgPDwgaXIzOworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgQWdncmVnYXRlCisgICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAg IEpvaW4gRmlsdGVyOiAodGVzdF9yYW5nZV9qb2luXzIuaXIyIDw8IHRlc3RfcmFuZ2Vfam9pbl8z LmlyMykKKyAgICAgICAgIC0+ICBOZXN0ZWQgTG9vcAorICAgICAgICAgICAgICAgSm9pbiBGaWx0 ZXI6ICh0ZXN0X3JhbmdlX2pvaW5fMS5pcjEgPDwgdGVzdF9yYW5nZV9qb2luXzIuaXIyKQorICAg ICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHRlc3RfcmFuZ2Vfam9pbl8xCisgICAgICAgICAg ICAgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBv biB0ZXN0X3JhbmdlX2pvaW5fMgorICAgICAgICAgLT4gIE1hdGVyaWFsaXplCisgICAgICAgICAg ICAgICAtPiAgU2VxIFNjYW4gb24gdGVzdF9yYW5nZV9qb2luXzMKKygxMCByb3dzKQorCitleHBs YWluIChjb3N0cyBvZmYpIHNlbGVjdCBjb3VudCgqKSBmcm9tIHRlc3RfcmFuZ2Vfam9pbl8xLCB0 ZXN0X3JhbmdlX2pvaW5fMiwgdGVzdF9yYW5nZV9qb2luXzMgd2hlcmUgaXIxID4+IGlyMiBhbmQg aXIyID4+IGlyMzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IEFnZ3JlZ2F0ZQorICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAgICBKb2luIEZpbHRlcjogKHRl c3RfcmFuZ2Vfam9pbl8xLmlyMSA+PiB0ZXN0X3JhbmdlX2pvaW5fMi5pcjIpCisgICAgICAgICAt PiAgTmVzdGVkIExvb3AKKyAgICAgICAgICAgICAgIEpvaW4gRmlsdGVyOiAodGVzdF9yYW5nZV9q b2luXzIuaXIyID4+IHRlc3RfcmFuZ2Vfam9pbl8zLmlyMykKKyAgICAgICAgICAgICAgIC0+ICBT ZXEgU2NhbiBvbiB0ZXN0X3JhbmdlX2pvaW5fMgorICAgICAgICAgICAgICAgLT4gIE1hdGVyaWFs aXplCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gdGVzdF9yYW5nZV9qb2lu XzMKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiB0ZXN0X3JhbmdlX2pvaW5fMQorKDkgcm93cykK KworZHJvcCB0YWJsZSB0ZXN0X3JhbmdlX2pvaW5fMTsKK2Ryb3AgdGFibGUgdGVzdF9yYW5nZV9q b2luXzI7Citkcm9wIHRhYmxlIHRlc3RfcmFuZ2Vfam9pbl8zOworLS0KKy0tIHRlc3QgcmFuZ2Ug am9pbiBzZWxlY3Rpdml0eSB3aXRoIGZ1bGx5IGRpc2pvaW50IGhpc3RvZ3JhbXMKKy0tIChleGVy Y2lzZXMgdGhlIGJvdW5kcy1jaGVjayBsb2dpYyB3aGVuIGhpc3RvZ3JhbXMgZG8gbm90IG92ZXJs YXApCistLQorY3JlYXRlIHRhYmxlIHRlc3RfcmFuZ2Vfam9pbl9sbyAociBpbnQ0cmFuZ2UpOwor Y3JlYXRlIHRhYmxlIHRlc3RfcmFuZ2Vfam9pbl9oaSAociBpbnQ0cmFuZ2UpOworLS0gbG93IHJh bmdlczogWzEsMTEpLCBbMiwxMiksIC4uLiBbNTAwLDUxMCkKK2luc2VydCBpbnRvIHRlc3RfcmFu Z2Vfam9pbl9sbyBzZWxlY3QgaW50NHJhbmdlKGcsIGcrMTApIGZyb20gZ2VuZXJhdGVfc2VyaWVz KDEsIDUwMCkgZzsKKy0tIGhpZ2ggcmFuZ2VzOiBbMTAwMDEsMTAwMTEpLCBbMTAwMDIsMTAwMTIp LCAuLi4gWzEwNTAwLDEwNTEwKQoraW5zZXJ0IGludG8gdGVzdF9yYW5nZV9qb2luX2hpIHNlbGVj dCBpbnQ0cmFuZ2UoZywgZysxMCkgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMTAwMDEsIDEwNTAwKSBn OworYW5hbHl6ZSB0ZXN0X3JhbmdlX2pvaW5fbG87CithbmFseXplIHRlc3RfcmFuZ2Vfam9pbl9o aTsKKy0tIGxvIDw8IGhpIHNob3VsZCBwcm9kdWNlIGEgbGFyZ2Ugc2VsZWN0aXZpdHkgKG1vc3Qg cGFpcnMgbWF0Y2gpCistLSBsbyA+PiBoaSBzaG91bGQgcHJvZHVjZSBhIG5lYXItemVybyBzZWxl Y3Rpdml0eQorLS0gbG8gJiYgaGkgc2hvdWxkIHByb2R1Y2UgYSBuZWFyLXplcm8gc2VsZWN0aXZp dHkgKG5vIG92ZXJsYXApCistLSBUaGVzZSBzaG91bGQgbm90IGNyYXNoIGFuZCBzaG91bGQgcHJv ZHVjZSBzdGFibGUgcGxhbnMuCitleHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCBjb3VudCgqKSBm cm9tIHRlc3RfcmFuZ2Vfam9pbl9sbyBhLCB0ZXN0X3JhbmdlX2pvaW5faGkgYiB3aGVyZSBhLnIg PDwgYi5yOworICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIEFnZ3JlZ2F0ZQorICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAgICBKb2luIEZpbHRlcjog KGEuciA8PCBiLnIpCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gdGVzdF9yYW5nZV9qb2luX2xv IGEKKyAgICAgICAgIC0+ICBNYXRlcmlhbGl6ZQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2Fu IG9uIHRlc3RfcmFuZ2Vfam9pbl9oaSBiCisoNiByb3dzKQorCitleHBsYWluIChjb3N0cyBvZmYp IHNlbGVjdCBjb3VudCgqKSBmcm9tIHRlc3RfcmFuZ2Vfam9pbl9sbyBhLCB0ZXN0X3JhbmdlX2pv aW5faGkgYiB3aGVyZSBhLnIgPj4gYi5yOworICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExB TiAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIEFnZ3JlZ2F0ZQorICAgLT4gIE5lc3RlZCBMb29wCisgICAg ICAgICBKb2luIEZpbHRlcjogKGEuciA+PiBiLnIpCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24g dGVzdF9yYW5nZV9qb2luX2xvIGEKKyAgICAgICAgIC0+ICBNYXRlcmlhbGl6ZQorICAgICAgICAg ICAgICAgLT4gIFNlcSBTY2FuIG9uIHRlc3RfcmFuZ2Vfam9pbl9oaSBiCisoNiByb3dzKQorCitl eHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCBjb3VudCgqKSBmcm9tIHRlc3RfcmFuZ2Vfam9pbl9s byBhLCB0ZXN0X3JhbmdlX2pvaW5faGkgYiB3aGVyZSBhLnIgJiYgYi5yOworICAgICAgICAgICAg ICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEFnZ3JlZ2F0ZQorICAgLT4g IE5lc3RlZCBMb29wCisgICAgICAgICBKb2luIEZpbHRlcjogKGEuciAmJiBiLnIpCisgICAgICAg ICAtPiAgU2VxIFNjYW4gb24gdGVzdF9yYW5nZV9qb2luX2xvIGEKKyAgICAgICAgIC0+ICBNYXRl cmlhbGl6ZQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHRlc3RfcmFuZ2Vfam9pbl9o aSBiCisoNiByb3dzKQorCitkcm9wIHRhYmxlIHRlc3RfcmFuZ2Vfam9pbl9sbzsKK2Ryb3AgdGFi bGUgdGVzdF9yYW5nZV9qb2luX2hpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwv cmFuZ2V0eXBlcy5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9yYW5nZXR5cGVzLnNxbAppbmRl eCA1YzRiMDMzN2I3YS4uZjY5MTA5ZGEzMzQgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mv c3FsL3JhbmdldHlwZXMuc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3JhbmdldHlwZXMu c3FsCkBAIC03MDgsMyArNzA4LDU2IEBAIHNlbGVjdCAqIGZyb20gdGV4dF9zdXBwb3J0X3Rlc3Qg d2hlcmUgdCA8QCB0ZXh0cmFuZ2Vfc3VwcCgnYScsICdkJyk7CiBkcm9wIHRhYmxlIHRleHRfc3Vw cG9ydF90ZXN0OwogCiBkcm9wIHR5cGUgdGV4dHJhbmdlX3N1cHA7CisKKy0tCistLSB0ZXN0IHNl bGVjdGl2aXR5IG9mIHJhbmdlIGpvaW4gb3BlcmF0b3JzCistLQorY3JlYXRlIHRhYmxlIHRlc3Rf cmFuZ2Vfam9pbl8xIChpcjEgaW50NHJhbmdlKTsKK2NyZWF0ZSB0YWJsZSB0ZXN0X3JhbmdlX2pv aW5fMiAoaXIyIGludDRyYW5nZSk7CitjcmVhdGUgdGFibGUgdGVzdF9yYW5nZV9qb2luXzMgKGly MyBpbnQ0cmFuZ2UpOworCitpbnNlcnQgaW50byB0ZXN0X3JhbmdlX2pvaW5fMSBzZWxlY3QgaW50 NHJhbmdlKGcsIGcrMTApIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMDApIGc7CitpbnNlcnQg aW50byB0ZXN0X3JhbmdlX2pvaW5fMSBzZWxlY3QgaW50NHJhbmdlKGcsIGcrMTAwKSBmcm9tIGdl bmVyYXRlX3NlcmllcygxLCAxMDAwLCAxMCkgZzsKK2luc2VydCBpbnRvIHRlc3RfcmFuZ2Vfam9p bl8yIHNlbGVjdCBpbnQ0cmFuZ2UoZywgZysxMCkgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMSwgNTAw KSBnOworaW5zZXJ0IGludG8gdGVzdF9yYW5nZV9qb2luXzIgc2VsZWN0IGludDRyYW5nZShnLCBn KzEwMCkgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMSwgNTAwLCAxMCkgZzsKK2luc2VydCBpbnRvIHRl c3RfcmFuZ2Vfam9pbl8zIHNlbGVjdCBpbnQ0cmFuZ2UoZywgZysxMCkgZnJvbSBnZW5lcmF0ZV9z ZXJpZXMoNTAxLCAxMDAwKSBnOworaW5zZXJ0IGludG8gdGVzdF9yYW5nZV9qb2luXzMgc2VsZWN0 IGludDRyYW5nZShnLCBnKzEwMCkgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoNTAxLCAxMDAwLCAxMCkg ZzsKKworYW5hbHl6ZSB0ZXN0X3JhbmdlX2pvaW5fMTsKK2FuYWx5emUgdGVzdF9yYW5nZV9qb2lu XzI7CithbmFseXplIHRlc3RfcmFuZ2Vfam9pbl8zOworCistLSByZW9yZGVyIGpvaW5zIGJhc2Vk IG9uIGNvbXB1dGVkIHNlbGVjdGl2aXR5CitleHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCBjb3Vu dCgqKSBmcm9tIHRlc3RfcmFuZ2Vfam9pbl8xLCB0ZXN0X3JhbmdlX2pvaW5fMiwgdGVzdF9yYW5n ZV9qb2luXzMgd2hlcmUgaXIxICYmIGlyMiBhbmQgaXIyICYmIGlyMzsKK2V4cGxhaW4gKGNvc3Rz IG9mZikgc2VsZWN0IGNvdW50KCopIGZyb20gdGVzdF9yYW5nZV9qb2luXzEsIHRlc3RfcmFuZ2Vf am9pbl8yLCB0ZXN0X3JhbmdlX2pvaW5fMyB3aGVyZSBpcjEgPDwgaXIyIGFuZCBpcjIgPDwgaXIz OworZXhwbGFpbiAoY29zdHMgb2ZmKSBzZWxlY3QgY291bnQoKikgZnJvbSB0ZXN0X3JhbmdlX2pv aW5fMSwgdGVzdF9yYW5nZV9qb2luXzIsIHRlc3RfcmFuZ2Vfam9pbl8zIHdoZXJlIGlyMSA+PiBp cjIgYW5kIGlyMiA+PiBpcjM7CisKK2Ryb3AgdGFibGUgdGVzdF9yYW5nZV9qb2luXzE7Citkcm9w IHRhYmxlIHRlc3RfcmFuZ2Vfam9pbl8yOworZHJvcCB0YWJsZSB0ZXN0X3JhbmdlX2pvaW5fMzsK KworLS0KKy0tIHRlc3QgcmFuZ2Ugam9pbiBzZWxlY3Rpdml0eSB3aXRoIGZ1bGx5IGRpc2pvaW50 IGhpc3RvZ3JhbXMKKy0tIChleGVyY2lzZXMgdGhlIGJvdW5kcy1jaGVjayBsb2dpYyB3aGVuIGhp c3RvZ3JhbXMgZG8gbm90IG92ZXJsYXApCistLQorY3JlYXRlIHRhYmxlIHRlc3RfcmFuZ2Vfam9p bl9sbyAociBpbnQ0cmFuZ2UpOworY3JlYXRlIHRhYmxlIHRlc3RfcmFuZ2Vfam9pbl9oaSAociBp bnQ0cmFuZ2UpOworCistLSBsb3cgcmFuZ2VzOiBbMSwxMSksIFsyLDEyKSwgLi4uIFs1MDAsNTEw KQoraW5zZXJ0IGludG8gdGVzdF9yYW5nZV9qb2luX2xvIHNlbGVjdCBpbnQ0cmFuZ2UoZywgZysx MCkgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMSwgNTAwKSBnOworLS0gaGlnaCByYW5nZXM6IFsxMDAw MSwxMDAxMSksIFsxMDAwMiwxMDAxMiksIC4uLiBbMTA1MDAsMTA1MTApCitpbnNlcnQgaW50byB0 ZXN0X3JhbmdlX2pvaW5faGkgc2VsZWN0IGludDRyYW5nZShnLCBnKzEwKSBmcm9tIGdlbmVyYXRl X3NlcmllcygxMDAwMSwgMTA1MDApIGc7CisKK2FuYWx5emUgdGVzdF9yYW5nZV9qb2luX2xvOwor YW5hbHl6ZSB0ZXN0X3JhbmdlX2pvaW5faGk7CisKKy0tIGxvIDw8IGhpIHNob3VsZCBwcm9kdWNl IGEgbGFyZ2Ugc2VsZWN0aXZpdHkgKG1vc3QgcGFpcnMgbWF0Y2gpCistLSBsbyA+PiBoaSBzaG91 bGQgcHJvZHVjZSBhIG5lYXItemVybyBzZWxlY3Rpdml0eQorLS0gbG8gJiYgaGkgc2hvdWxkIHBy b2R1Y2UgYSBuZWFyLXplcm8gc2VsZWN0aXZpdHkgKG5vIG92ZXJsYXApCistLSBUaGVzZSBzaG91 bGQgbm90IGNyYXNoIGFuZCBzaG91bGQgcHJvZHVjZSBzdGFibGUgcGxhbnMuCitleHBsYWluIChj b3N0cyBvZmYpIHNlbGVjdCBjb3VudCgqKSBmcm9tIHRlc3RfcmFuZ2Vfam9pbl9sbyBhLCB0ZXN0 X3JhbmdlX2pvaW5faGkgYiB3aGVyZSBhLnIgPDwgYi5yOworZXhwbGFpbiAoY29zdHMgb2ZmKSBz ZWxlY3QgY291bnQoKikgZnJvbSB0ZXN0X3JhbmdlX2pvaW5fbG8gYSwgdGVzdF9yYW5nZV9qb2lu X2hpIGIgd2hlcmUgYS5yID4+IGIucjsKK2V4cGxhaW4gKGNvc3RzIG9mZikgc2VsZWN0IGNvdW50 KCopIGZyb20gdGVzdF9yYW5nZV9qb2luX2xvIGEsIHRlc3RfcmFuZ2Vfam9pbl9oaSBiIHdoZXJl IGEuciAmJiBiLnI7CisKK2Ryb3AgdGFibGUgdGVzdF9yYW5nZV9qb2luX2xvOworZHJvcCB0YWJs ZSB0ZXN0X3JhbmdlX2pvaW5faGk7Ci0tIAoyLjUwLjEgKEFwcGxlIEdpdC0xNTUpCgo= --_006_AM0P190MB07243E890A7DFD6F24F70269F0232AM0P190MB0724EURP_ Content-Type: application/octet-stream; name="v7-0002-Improve-multirange-join-selectivity-estimation-fo.patch" Content-Description: v7-0002-Improve-multirange-join-selectivity-estimation-fo.patch Content-Disposition: attachment; filename="v7-0002-Improve-multirange-join-selectivity-estimation-fo.patch"; size=27196; creation-date="Thu, 16 Apr 2026 15:11:38 GMT"; modification-date="Thu, 16 Apr 2026 15:12:56 GMT" Content-Transfer-Encoding: base64 RnJvbSBkZWI5ODY2NTNiYTU2ZjA1ODBiMDM0ODRlM2Y0YTIyNzE2YmFjOWY3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgU2Nob2VtYW5zIDxtYXhpbWUuc2Nob2VtYW5zQGVu dGVycHJpc2VkYi5jb20+CkRhdGU6IE1vbiwgMTMgQXByIDIwMjYgMTY6MDY6MDMgKzAyMDAKU3Vi amVjdDogW1BBVENIIHY3IDIvM10gSW1wcm92ZSBtdWx0aXJhbmdlIGpvaW4gc2VsZWN0aXZpdHkg ZXN0aW1hdGlvbiBmb3IgPDwsCiA+PiwgJiYKCkFkZCBtdWx0aXJhbmdlam9pbnNlbCgpIHRvIGVz dGltYXRlIGpvaW4gc2VsZWN0aXZpdHkgZm9yIG11bHRpcmFuZ2UKb3BlcmF0b3JzIHVzaW5nIGJv dW5kIGhpc3RvZ3JhbXMsIGNvdmVyaW5nIGFsbCB0eXBlIGNvbWJpbmF0aW9uczoKbXVsdGlyYW5n ZSB2cyBtdWx0aXJhbmdlLCBtdWx0aXJhbmdlIHZzIHJhbmdlLCByYW5nZSB2cyBtdWx0aXJhbmdl LgoKTm90ZSB0aGF0IG11bHRpcmFuZ2Ugc3RhdGlzdGljcyBvbmx5IHJlcHJlc2VudCB0aGUgb3V0 ZXJtb3N0IGJvdW5kcwooc2VlIG11bHRpcmFuZ2VfdHlwYW5hbHl6ZSksIHNvICYmIG1heSBvdmVy ZXN0aW1hdGUgb3ZlcmxhcCBmb3Igc3BhcnNlCm11bHRpcmFuZ2VzLiBUaGlzIGlzIGNvbnNpc3Rl bnQgd2l0aCBob3cgZXhpc3RpbmcgcmVzdHJpY3Rpb24Kc2VsZWN0aXZpdHkgaGFuZGxlcyBtdWx0 aXJhbmdlICYmLgoKVGhlIHNoYXJlZCBoZWxwZXIgZnVuY3Rpb25zIChjYWxjX2hpc3Rfam9pbl9z ZWxlY3Rpdml0eSBhbmQgb3RoZXJzKSBhcmUKaW50ZW50aW9uYWxseSBkdXBsaWNhdGVkIGZyb20g cmFuZ2V0eXBlc19zZWxmdW5jcy5jIGZvciByZXZpZXdhYmlsaXR5LgpBIGZvbGxvdy11cCBjb21t aXQgd2lsbCByZW1vdmUgdGhlIGR1cGxpY2F0aW9uLgotLS0KIC4uLi91dGlscy9hZHQvbXVsdGly YW5nZXR5cGVzX3NlbGZ1bmNzLmMgICAgICB8IDMyNSArKysrKysrKysrKysrKysrKysKIHNyYy9p bmNsdWRlL2NhdGFsb2cvcGdfb3BlcmF0b3IuZGF0ICAgICAgICAgICB8ICAxOCArLQogc3JjL2lu Y2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCAgICAgICAgICAgICAgIHwgICA0ICsKIHNyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvbXVsdGlyYW5nZXR5cGVzLm91dCB8IDE1NyArKysrKysrKysKIHNy Yy90ZXN0L3JlZ3Jlc3Mvc3FsL211bHRpcmFuZ2V0eXBlcy5zcWwgICAgICB8ICA3MiArKysrCiA1 IGZpbGVzIGNoYW5nZWQsIDU2NyBpbnNlcnRpb25zKCspLCA5IGRlbGV0aW9ucygtKQoKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9tdWx0aXJhbmdldHlwZXNfc2VsZnVuY3MuYyBi L3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9tdWx0aXJhbmdldHlwZXNfc2VsZnVuY3MuYwppbmRleCA1 MzMxMTE0NDVlNy4uMjQxZjhjNmRiZTAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2Fk dC9tdWx0aXJhbmdldHlwZXNfc2VsZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQv bXVsdGlyYW5nZXR5cGVzX3NlbGZ1bmNzLmMKQEAgLTEzMzQsMyArMTMzNCwzMjggQEAgY2FsY19o aXN0X3NlbGVjdGl2aXR5X2NvbnRhaW5zKFR5cGVDYWNoZUVudHJ5ICp0eXBjYWNoZSwKIAogCXJl dHVybiBzdW1fZnJhYzsKIH0KKworLyoKKyAqIEVzdGltYXRlIGpvaW4gc2VsZWN0aXZpdHkgUChY IDwgWSkgdXNpbmcgcmFuZ2Vib3VuZCBoaXN0b2dyYW1zLgorICoKKyAqIEJhc2VkIG9uOiBEaW9n byBSZXBhcywgWmhpY2hlbmcgTHVvLCBNYXhpbWUgU2Nob2VtYW5zLCBNYWhtb3VkIFNha3IsIDIw MjIKKyAqICJTZWxlY3Rpdml0eSBFc3RpbWF0aW9uIG9mIEluZXF1YWxpdHkgSm9pbnMgSW4gRGF0 YWJhc2VzIgorICogaHR0cHM6Ly9kb2kub3JnLzEwLjQ4NTUwL2FyWGl2LjIyMDYuMDczOTYKKyAq CisgKiBoaXN0MSBhbmQgaGlzdDIgYXJlIGFycmF5cyBvZiBSYW5nZUJvdW5kIGVudHJpZXMgZnJv bSB0aGUgYm91bmRzIGhpc3RvZ3JhbXMKKyAqIG9mIHR3byByYW5nZS10eXBlZCBvciBtdWx0aXJh bmdlLXR5cGVkIGF0dHJpYnV0ZXMgWCBhbmQgWSwgcmVzcGVjdGl2ZWx5LgorICogRWFjaCBhcnJh eSBoYXMgYXQgbGVhc3QgMiBlbnRyaWVzIChvbmUgaGlzdG9ncmFtIGJpbikuICBUaGUgZW50cmll cyBjYXJyeQorICogZnVsbCBib3VuZCBtZXRhZGF0YSAobG93ZXIvdXBwZXIgZmxhZywgaW5jbHVz aXZlL2V4Y2x1c2l2ZSksIGFuZCBhbGwKKyAqIGNvbXBhcmlzb25zIHVzZSByYW5nZV9jbXBfYm91 bmRzKCkgc28gdGhhdCBib3VuZCBzZW1hbnRpY3MgYXJlIHByZXNlcnZlZC4KKyAqCisgKiBUaGUg YWxnb3JpdGhtIG1vZGVscyBlYWNoIGF0dHJpYnV0ZSdzIGRpc3RyaWJ1dGlvbiBhcyBhIHBpZWNl d2lzZSBmdW5jdGlvbgorICogZGVyaXZlZCBmcm9tIGl0cyBoaXN0b2dyYW0sIHRoZW4gY29tcHV0 ZXM6CisgKiAgIFAoWCA8IFkpID0gMC41ICogc3VtKCAoRl9YKHByZXYpICsgRl9YKGN1cikpICog KEZfWShjdXIpIC0gRl9ZKHByZXYpKSApCisgKiBieSBwYXJhbGxlbC1zY2FubmluZyBib3RoIGhp c3RvZ3JhbXMuCisgKgorICogVGhlIGluaXRpYWwgZmFzdC1mb3J3YXJkIGxvb3BzIHNraXAgaGlz dG9ncmFtIGVudHJpZXMgdGhhdCBmYWxsIGVudGlyZWx5CisgKiBiZWZvcmUgdGhlIG90aGVyIGhp c3RvZ3JhbSdzIHJhbmdlLCBzbyB0aGUgbWFpbiBsb29wIG9ubHkgcHJvY2Vzc2VzIHRoZQorICog b3ZlcmxhcHBpbmcgcmVnaW9uLiAgQm91bmRzIGNoZWNrcyBhcmUgcmVxdWlyZWQgYmVjYXVzZSB0 aGUgaGlzdG9ncmFtcyBtYXkKKyAqIGJlIGNvbXBsZXRlbHkgZGlzam9pbnQgKGUuZy4sIGFsbCBv ZiBYIGlzIGJlbG93IGFsbCBvZiBZKS4KKyAqLworc3RhdGljIGRvdWJsZQorY2FsY19oaXN0X2pv aW5fc2VsZWN0aXZpdHkoVHlwZUNhY2hlRW50cnkgKnR5cGNhY2hlLAorCQkJCQkJICAgY29uc3Qg UmFuZ2VCb3VuZCAqaGlzdDEsIGludCBuaGlzdDEsCisJCQkJCQkgICBjb25zdCBSYW5nZUJvdW5k ICpoaXN0MiwgaW50IG5oaXN0MikKK3sKKwlpbnQJCQlpLAorCQkJCWo7CisJZG91YmxlCQlzZWxl Y3Rpdml0eSA9IDAuMDsKKwlkb3VibGUJCXByZXZfc2VsMSA9IC0xLjA7CS8qIG5lZ2F0aXZlIHNl bnRpbmVsIHNraXBzIGZpcnN0IGl0ZXIgKi8KKwlkb3VibGUJCXByZXZfc2VsMiA9IDAuMDsKKwor CUFzc2VydChuaGlzdDEgPiAxKTsKKwlBc3NlcnQobmhpc3QyID4gMSk7CisKKwkvKgorCSAqIEZh c3QtZm9yd2FyZCBwYXN0IGhpc3QxIGVudHJpZXMgdGhhdCBhcmUgZW50aXJlbHkgYmVsb3cgaGlz dDJbMF0sIGFuZAorCSAqIHZpY2UgdmVyc2EuICBCb3VuZHMgY2hlY2tzIHByZXZlbnQgb3V0LW9m LWJvdW5kcyBhY2Nlc3Mgd2hlbiB0aGUKKwkgKiBoaXN0b2dyYW1zIGFyZSBmdWxseSBkaXNqb2lu dC4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbmhpc3QxICYmCisJCSByYW5nZV9jbXBfYm91bmRz KHR5cGNhY2hlLCAmaGlzdDFbaV0sICZoaXN0MlswXSkgPCAwOyBpKyspCisJCTsKKwlmb3IgKGog PSAwOyBqIDwgbmhpc3QyICYmCisJCSByYW5nZV9jbXBfYm91bmRzKHR5cGNhY2hlLCAmaGlzdDJb al0sICZoaXN0MVswXSkgPCAwOyBqKyspCisJCTsKKworCS8qCisJICogSGFuZGxlIGZ1bGx5LXNl cGFyYXRlZCBoaXN0b2dyYW1zLiAgV2hlbiBhbGwgYm91bmRzIGluIGhpc3QxIGFyZSBiZWxvdwor CSAqIGFsbCBib3VuZHMgaW4gaGlzdDIsIFAoWCA8IFkpIGlzIH4xLjAuICBXaGVuIGFsbCBvZiBo aXN0MiBpcyBiZWxvdworCSAqIGhpc3QxLCBQKFggPCBZKSBpcyB+MC4wLiAgV2UgcmV0dXJuIGlt bWVkaWF0ZWx5IHJhdGhlciB0aGFuIGZhbGxpbmcKKwkgKiBpbnRvIHRoZSBvdmVybGFwIHdhbGsg d2l0aCBpbnZhbGlkIGluZGljZXMuCisJICovCisJaWYgKGkgPj0gbmhpc3QxKQorCQlyZXR1cm4g MS4wOworCWlmIChqID49IG5oaXN0MikKKwkJcmV0dXJuIDAuMDsKKworCS8qIFdhbGsgdGhlIG92 ZXJsYXBwaW5nIHJlZ2lvbiBvZiBib3RoIGhpc3RvZ3JhbXMgKi8KKwl3aGlsZSAoaSA8IG5oaXN0 MSAmJiBqIDwgbmhpc3QyKQorCXsKKwkJZG91YmxlCQljdXJfc2VsMSwKKwkJCQkJY3VyX3NlbDI7 CisJCVJhbmdlQm91bmQJY3VyX3N5bmM7CisJCWludAkJCWNtcDsKKworCQljbXAgPSByYW5nZV9j bXBfYm91bmRzKHR5cGNhY2hlLCAmaGlzdDFbaV0sICZoaXN0MltqXSk7CisJCWlmIChjbXAgPCAw KQorCQkJY3VyX3N5bmMgPSBoaXN0MVtpKytdOworCQllbHNlIGlmIChjbXAgPiAwKQorCQkJY3Vy X3N5bmMgPSBoaXN0MltqKytdOworCQllbHNlCisJCXsKKwkJCS8qIEVxdWFsIGJvdW5kczogYWR2 YW5jZSBib3RoICovCisJCQljdXJfc3luYyA9IGhpc3QxW2ldOworCQkJaSsrOworCQkJaisrOwor CQl9CisJCWN1cl9zZWwxID0gY2FsY19oaXN0X3NlbGVjdGl2aXR5X3NjYWxhcih0eXBjYWNoZSwg JmN1cl9zeW5jLAorCQkJCQkJCQkJCQkJaGlzdDEsIG5oaXN0MSwgZmFsc2UpOworCQljdXJfc2Vs MiA9IGNhbGNfaGlzdF9zZWxlY3Rpdml0eV9zY2FsYXIodHlwY2FjaGUsICZjdXJfc3luYywKKwkJ CQkJCQkJCQkJCWhpc3QyLCBuaGlzdDIsIGZhbHNlKTsKKworCQkvKiBTa2lwIHRoZSBmaXJzdCBp dGVyYXRpb24gKG5vIHByZXZpb3VzIHBvaW50IHlldCkgKi8KKwkJaWYgKHByZXZfc2VsMSA+PSAw KQorCQkJc2VsZWN0aXZpdHkgKz0gKHByZXZfc2VsMSArIGN1cl9zZWwxKSAqIChjdXJfc2VsMiAt IHByZXZfc2VsMik7CisKKwkJcHJldl9zZWwxID0gY3VyX3NlbDE7CisJCXByZXZfc2VsMiA9IGN1 cl9zZWwyOworCX0KKworCS8qIFAoWCA8IFkpID0gMC41ICogU3VtKC4uLikgKi8KKwlzZWxlY3Rp dml0eSAvPSAyOworCisJLyogSW5jbHVkZSByZW1haW5kZXIgb2YgaGlzdDIgaWYgaGlzdDEgd2Fz IGV4aGF1c3RlZCBmaXJzdCAqLworCWlmIChqIDwgbmhpc3QyKQorCQlzZWxlY3Rpdml0eSArPSAx IC0gcHJldl9zZWwyOworCisJcmV0dXJuIHNlbGVjdGl2aXR5OworfQorCisvKgorICogbXVsdGly YW5nZWpvaW5zZWwgLS0gam9pbiBzZWxlY3Rpdml0eSBmb3IgbXVsdGlyYW5nZSBvcGVyYXRvcnMK KyAqCisgKiBTdXBwb3J0czogPDwsID4+LCAmJiBmb3IgYWxsIHR5cGUgY29tYmluYXRpb25zOgor ICogICBtdWx0aXJhbmdlIHZzIG11bHRpcmFuZ2UsIG11bHRpcmFuZ2UgdnMgcmFuZ2UsIHJhbmdl IHZzIG11bHRpcmFuZ2UKKyAqCisgKiBUaGVzZSBvcGVyYXRvcnMgbWFwIGRpcmVjdGx5IHRvIHN0 cmljdCBib3VuZCBjb21wYXJpc29ucyBQKFggPCBZKSwKKyAqIHdoaWNoIGNhbGNfaGlzdF9qb2lu X3NlbGVjdGl2aXR5KCkgZXN0aW1hdGVzIGZyb20gYm91bmQgaGlzdG9ncmFtcy4KKyAqIEJvdGgg cmFuZ2UgYW5kIG11bHRpcmFuZ2UgdHlwZXMgc3RvcmUgYm91bmQgaGlzdG9ncmFtcyBpbiB0aGUg c2FtZQorICogZm9ybWF0LCBzbyB0aGUgZXN0aW1hdGlvbiBpcyBpZGVudGljYWwgcmVnYXJkbGVz cyBvZiB0eXBlIGNvbWJpbmF0aW9uLgorICovCitEYXR1bQorbXVsdGlyYW5nZWpvaW5zZWwoUEdf RlVOQ1RJT05fQVJHUykKK3sKKwlQbGFubmVySW5mbyAqcm9vdCA9IChQbGFubmVySW5mbyAqKSBQ R19HRVRBUkdfUE9JTlRFUigwKTsKKwlPaWQJCQlvcGVyYXRvciA9IFBHX0dFVEFSR19PSUQoMSk7 CisJTGlzdAkgICAqYXJncyA9IChMaXN0ICopIFBHX0dFVEFSR19QT0lOVEVSKDIpOworCVNwZWNp YWxKb2luSW5mbyAqc2ppbmZvID0gKFNwZWNpYWxKb2luSW5mbyAqKSBQR19HRVRBUkdfUE9JTlRF Uig0KTsKKwlWYXJpYWJsZVN0YXREYXRhIHZhcmRhdGExOworCVZhcmlhYmxlU3RhdERhdGEgdmFy ZGF0YTI7CisJU2VsZWN0aXZpdHkgc2VsZWM7CisJQXR0U3RhdHNTbG90IGhpc3QxOworCUF0dFN0 YXRzU2xvdCBoaXN0MjsKKwlBdHRTdGF0c1Nsb3Qgc3Nsb3Q7CisJYm9vbAkJaGF2ZV9oaXN0MSA9 IGZhbHNlOworCWJvb2wJCWhhdmVfaGlzdDIgPSBmYWxzZTsKKwlUeXBlQ2FjaGVFbnRyeSAqdHlw Y2FjaGU7CisJVHlwZUNhY2hlRW50cnkgKnJuZ190eXBjYWNoZTsKKwlGb3JtX3BnX3N0YXRpc3Rp YyBzdGF0czE7CisJRm9ybV9wZ19zdGF0aXN0aWMgc3RhdHMyOworCWRvdWJsZQkJZW1wdHlfZnJh YzE7CisJZG91YmxlCQllbXB0eV9mcmFjMjsKKwlkb3VibGUJCW51bGxfZnJhYzE7CisJZG91Ymxl CQludWxsX2ZyYWMyOworCWludAkJCW5oaXN0MTsKKwlpbnQJCQluaGlzdDI7CisJUmFuZ2VCb3Vu ZCAqaGlzdDFfbG93ZXI7CisJUmFuZ2VCb3VuZCAqaGlzdDFfdXBwZXI7CisJUmFuZ2VCb3VuZCAq aGlzdDJfbG93ZXI7CisJUmFuZ2VCb3VuZCAqaGlzdDJfdXBwZXI7CisJYm9vbAkJam9pbl9pc19y ZXZlcnNlZDsKKwlib29sCQllbXB0eTsKKwlpbnQJCQlpOworCisJZ2V0X2pvaW5fdmFyaWFibGVz KHJvb3QsIGFyZ3MsIHNqaW5mbywgJnZhcmRhdGExLCAmdmFyZGF0YTIsCisJCQkJCSAgICZqb2lu X2lzX3JldmVyc2VkKTsKKworCXNlbGVjID0gZGVmYXVsdF9tdWx0aXJhbmdlX3NlbGVjdGl2aXR5 KG9wZXJhdG9yKTsKKworCS8qCisJICogQWNxdWlyZSBoaXN0b2dyYW0gc3RhdHMgZm9yIGJvdGgg c2lkZXMuICBFYWNoIHNsb3QgaXMgdHJhY2tlZAorCSAqIGluZGVwZW5kZW50bHkgc28gd2UgY2Fu IHJlbGVhc2UgZXhhY3RseSB3aGF0IHdhcyBhY3F1aXJlZCBvbiBhbnkKKwkgKiBmYWlsdXJlIHBh dGguCisJICovCisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHZhcmRhdGExLnN0YXRzVHVwbGUpIHx8 CisJCSFIZWFwVHVwbGVJc1ZhbGlkKHZhcmRhdGEyLnN0YXRzVHVwbGUpKQorCQlnb3RvIGNsZWFu dXA7CisKKwltZW1zZXQoJmhpc3QxLCAwLCBzaXplb2YoaGlzdDEpKTsKKwltZW1zZXQoJmhpc3Qy LCAwLCBzaXplb2YoaGlzdDIpKTsKKworCWlmICghZ2V0X2F0dHN0YXRzc2xvdCgmaGlzdDEsIHZh cmRhdGExLnN0YXRzVHVwbGUsCisJCQkJCQkgIFNUQVRJU1RJQ19LSU5EX0JPVU5EU19ISVNUT0dS QU0sIEludmFsaWRPaWQsCisJCQkJCQkgIEFUVFNUQVRTU0xPVF9WQUxVRVMpKQorCQlnb3RvIGNs ZWFudXA7CisJaGF2ZV9oaXN0MSA9IHRydWU7CisKKwlpZiAoIWdldF9hdHRzdGF0c3Nsb3QoJmhp c3QyLCB2YXJkYXRhMi5zdGF0c1R1cGxlLAorCQkJCQkJICBTVEFUSVNUSUNfS0lORF9CT1VORFNf SElTVE9HUkFNLCBJbnZhbGlkT2lkLAorCQkJCQkJICBBVFRTVEFUU1NMT1RfVkFMVUVTKSkKKwkJ Z290byBjbGVhbnVwOworCWhhdmVfaGlzdDIgPSB0cnVlOworCisJLyoKKwkgKiBEZXRlcm1pbmUg dGhlIHJhbmdlIHR5cGUgY2FjaGUgZm9yIGJvdW5kIGNvbXBhcmlzb25zLiAgQXQgbGVhc3Qgb25l CisJICogc2lkZSBpcyBhIG11bHRpcmFuZ2UgdHlwZTsgdHJ5IHZhcmRhdGExIGZpcnN0LCB0aGVu IHZhcmRhdGEyLgorCSAqLworCXR5cGNhY2hlID0gbG9va3VwX3R5cGVfY2FjaGUodmFyZGF0YTEu dmFydHlwZSwgVFlQRUNBQ0hFX01VTFRJUkFOR0VfSU5GTyk7CisJaWYgKHR5cGNhY2hlLT5ybmd0 eXBlICE9IE5VTEwpCisJCXJuZ190eXBjYWNoZSA9IHR5cGNhY2hlLT5ybmd0eXBlOworCWVsc2UK Kwl7CisJCXR5cGNhY2hlID0gbG9va3VwX3R5cGVfY2FjaGUodmFyZGF0YTIudmFydHlwZSwKKwkJ CQkJCQkJCSBUWVBFQ0FDSEVfTVVMVElSQU5HRV9JTkZPKTsKKwkJcm5nX3R5cGNhY2hlID0gdHlw Y2FjaGUtPnJuZ3R5cGU7CisJfQorCisJLyogTG9vayB1cCBOVUxMIGFuZCBlbXB0eS1yYW5nZSBm cmFjdGlvbnMgKi8KKwlzdGF0czEgPSAoRm9ybV9wZ19zdGF0aXN0aWMpIEdFVFNUUlVDVCh2YXJk YXRhMS5zdGF0c1R1cGxlKTsKKwlzdGF0czIgPSAoRm9ybV9wZ19zdGF0aXN0aWMpIEdFVFNUUlVD VCh2YXJkYXRhMi5zdGF0c1R1cGxlKTsKKworCW51bGxfZnJhYzEgPSBzdGF0czEtPnN0YW51bGxm cmFjOworCW51bGxfZnJhYzIgPSBzdGF0czItPnN0YW51bGxmcmFjOworCisJLyogVHJ5IHRvIGdl dCBmcmFjdGlvbiBvZiBlbXB0eSByYW5nZXMgZm9yIHRoZSBmaXJzdCB2YXJpYWJsZSAqLworCWlm IChnZXRfYXR0c3RhdHNzbG90KCZzc2xvdCwgdmFyZGF0YTEuc3RhdHNUdXBsZSwKKwkJCQkJCSBT VEFUSVNUSUNfS0lORF9SQU5HRV9MRU5HVEhfSElTVE9HUkFNLAorCQkJCQkJIEludmFsaWRPaWQs IEFUVFNUQVRTU0xPVF9OVU1CRVJTKSkKKwl7CisJCWlmIChzc2xvdC5ubnVtYmVycyAhPSAxKQor CQkJZWxvZyhFUlJPUiwgImludmFsaWQgZW1wdHkgZnJhY3Rpb24gc3RhdGlzdGljIik7CisJCWVt cHR5X2ZyYWMxID0gc3Nsb3QubnVtYmVyc1swXTsKKwkJZnJlZV9hdHRzdGF0c3Nsb3QoJnNzbG90 KTsKKwl9CisJZWxzZQorCXsKKwkJZW1wdHlfZnJhYzEgPSAwLjA7CisJfQorCisJLyogVHJ5IHRv IGdldCBmcmFjdGlvbiBvZiBlbXB0eSByYW5nZXMgZm9yIHRoZSBzZWNvbmQgdmFyaWFibGUgKi8K KwlpZiAoZ2V0X2F0dHN0YXRzc2xvdCgmc3Nsb3QsIHZhcmRhdGEyLnN0YXRzVHVwbGUsCisJCQkJ CQkgU1RBVElTVElDX0tJTkRfUkFOR0VfTEVOR1RIX0hJU1RPR1JBTSwKKwkJCQkJCSBJbnZhbGlk T2lkLCBBVFRTVEFUU1NMT1RfTlVNQkVSUykpCisJeworCQlpZiAoc3Nsb3Qubm51bWJlcnMgIT0g MSkKKwkJCWVsb2coRVJST1IsICJpbnZhbGlkIGVtcHR5IGZyYWN0aW9uIHN0YXRpc3RpYyIpOwor CQllbXB0eV9mcmFjMiA9IHNzbG90Lm51bWJlcnNbMF07CisJCWZyZWVfYXR0c3RhdHNzbG90KCZz c2xvdCk7CisJfQorCWVsc2UKKwl7CisJCWVtcHR5X2ZyYWMyID0gMC4wOworCX0KKworCS8qIENv bnZlcnQgcmFuZ2UgaGlzdG9ncmFtcyB0byBzZXBhcmF0ZSBsb3dlci91cHBlciBib3VuZCBhcnJh eXMgKi8KKwluaGlzdDEgPSBoaXN0MS5udmFsdWVzOworCWhpc3QxX2xvd2VyID0gKFJhbmdlQm91 bmQgKikgcGFsbG9jKHNpemVvZihSYW5nZUJvdW5kKSAqIG5oaXN0MSk7CisJaGlzdDFfdXBwZXIg PSAoUmFuZ2VCb3VuZCAqKSBwYWxsb2Moc2l6ZW9mKFJhbmdlQm91bmQpICogbmhpc3QxKTsKKwlm b3IgKGkgPSAwOyBpIDwgbmhpc3QxOyBpKyspCisJeworCQlyYW5nZV9kZXNlcmlhbGl6ZShybmdf dHlwY2FjaGUsIERhdHVtR2V0UmFuZ2VUeXBlUChoaXN0MS52YWx1ZXNbaV0pLAorCQkJCQkJICAm aGlzdDFfbG93ZXJbaV0sICZoaXN0MV91cHBlcltpXSwgJmVtcHR5KTsKKwkJaWYgKGVtcHR5KQor CQkJZWxvZyhFUlJPUiwgImJvdW5kcyBoaXN0b2dyYW0gY29udGFpbnMgYW4gZW1wdHkgcmFuZ2Ui KTsKKwl9CisKKwluaGlzdDIgPSBoaXN0Mi5udmFsdWVzOworCWhpc3QyX2xvd2VyID0gKFJhbmdl Qm91bmQgKikgcGFsbG9jKHNpemVvZihSYW5nZUJvdW5kKSAqIG5oaXN0Mik7CisJaGlzdDJfdXBw ZXIgPSAoUmFuZ2VCb3VuZCAqKSBwYWxsb2Moc2l6ZW9mKFJhbmdlQm91bmQpICogbmhpc3QyKTsK Kwlmb3IgKGkgPSAwOyBpIDwgbmhpc3QyOyBpKyspCisJeworCQlyYW5nZV9kZXNlcmlhbGl6ZShy bmdfdHlwY2FjaGUsIERhdHVtR2V0UmFuZ2VUeXBlUChoaXN0Mi52YWx1ZXNbaV0pLAorCQkJCQkJ ICAmaGlzdDJfbG93ZXJbaV0sICZoaXN0Ml91cHBlcltpXSwgJmVtcHR5KTsKKwkJaWYgKGVtcHR5 KQorCQkJZWxvZyhFUlJPUiwgImJvdW5kcyBoaXN0b2dyYW0gY29udGFpbnMgYW4gZW1wdHkgcmFu Z2UiKTsKKwl9CisKKwkvKiBFc3RpbWF0ZSBzZWxlY3Rpdml0eSBiYXNlZCBvbiB0aGUgb3BlcmF0 b3IgKi8KKwlzd2l0Y2ggKG9wZXJhdG9yKQorCXsKKwkJY2FzZSBPSURfUkFOR0VfT1ZFUkxBUFNf TVVMVElSQU5HRV9PUDoKKwkJY2FzZSBPSURfTVVMVElSQU5HRV9PVkVSTEFQU19SQU5HRV9PUDoK KwkJY2FzZSBPSURfTVVMVElSQU5HRV9PVkVSTEFQU19NVUxUSVJBTkdFX09QOgorCisJCQkvKgor CQkJICogQSAmJiBCIGlmZiBOT1QoQSA8PCBCKSBBTkQgTk9UKEEgPj4gQikgPSAxIC0gUChBLnVw cGVyIDwKKwkJCSAqIEIubG93ZXIpIC0gUChCLnVwcGVyIDwgQS5sb3dlcikKKwkJCSAqCisJCQkg KiBUaGlzIGRlY29tcG9zaXRpb24gaXMgZXhhY3QgZm9yIHNpbmdsZSByYW5nZXMuICBGb3IKKwkJ CSAqIG11bHRpcmFuZ2VzLCB0aGUgYm91bmQgaGlzdG9ncmFtcyBvbmx5IHJlcHJlc2VudCB0aGUg b3V0ZXJtb3N0CisJCQkgKiBsb3dlciBhbmQgdXBwZXIgYm91bmRzIChzZWUgbXVsdGlyYW5nZV90 eXBhbmFseXplKSwgc28gaW50ZXJuYWwKKwkJCSAqIGdhcHMgYXJlIG5vdCBjYXB0dXJlZC4gVGhp cyBjYW4gb3ZlcmVzdGltYXRlIG92ZXJsYXAgZm9yIHNwYXJzZQorCQkJICogbXVsdGlyYW5nZXMs IGJ1dCBpcyBjb25zaXN0ZW50IHdpdGggaG93IGV4aXN0aW5nIHJlc3RyaWN0aW9uCisJCQkgKiBz ZWxlY3Rpdml0eSBoYW5kbGVzIG11bHRpcmFuZ2UgJiYuCisJCQkgKi8KKwkJCXNlbGVjID0gMTsK KwkJCXNlbGVjIC09IGNhbGNfaGlzdF9qb2luX3NlbGVjdGl2aXR5KHJuZ190eXBjYWNoZSwKKwkJ CQkJCQkJCQkJCWhpc3QxX3VwcGVyLCBuaGlzdDEsCisJCQkJCQkJCQkJCQloaXN0Ml9sb3dlciwg bmhpc3QyKTsKKwkJCXNlbGVjIC09IGNhbGNfaGlzdF9qb2luX3NlbGVjdGl2aXR5KHJuZ190eXBj YWNoZSwKKwkJCQkJCQkJCQkJCWhpc3QyX3VwcGVyLCBuaGlzdDIsCisJCQkJCQkJCQkJCQloaXN0 MV9sb3dlciwgbmhpc3QxKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT0lEX1JBTkdFX0xFRlRfTVVM VElSQU5HRV9PUDoKKwkJY2FzZSBPSURfTVVMVElSQU5HRV9MRUZUX1JBTkdFX09QOgorCQljYXNl IE9JRF9NVUxUSVJBTkdFX0xFRlRfTVVMVElSQU5HRV9PUDoKKwkJCS8qIEEgPDwgQiBpZmYgdXBw ZXIoQSkgPCBsb3dlcihCKSAqLworCQkJc2VsZWMgPSBjYWxjX2hpc3Rfam9pbl9zZWxlY3Rpdml0 eShybmdfdHlwY2FjaGUsCisJCQkJCQkJCQkJCSAgIGhpc3QxX3VwcGVyLCBuaGlzdDEsCisJCQkJ CQkJCQkJCSAgIGhpc3QyX2xvd2VyLCBuaGlzdDIpOworCQkJYnJlYWs7CisKKwkJY2FzZSBPSURf UkFOR0VfUklHSFRfTVVMVElSQU5HRV9PUDoKKwkJY2FzZSBPSURfTVVMVElSQU5HRV9SSUdIVF9S QU5HRV9PUDoKKwkJY2FzZSBPSURfTVVMVElSQU5HRV9SSUdIVF9NVUxUSVJBTkdFX09QOgorCQkJ LyogQSA+PiBCIGlmZiB1cHBlcihCKSA8IGxvd2VyKEEpICovCisJCQlzZWxlYyA9IGNhbGNfaGlz dF9qb2luX3NlbGVjdGl2aXR5KHJuZ190eXBjYWNoZSwKKwkJCQkJCQkJCQkJICAgaGlzdDJfdXBw ZXIsIG5oaXN0MiwKKwkJCQkJCQkJCQkJICAgaGlzdDFfbG93ZXIsIG5oaXN0MSk7CisJCQlicmVh azsKKworCQlkZWZhdWx0OgorCQkJLyogVW5zdXBwb3J0ZWQgb3BlcmF0b3I7IGtlZXAgdGhlIGRl ZmF1bHQgc2VsZWN0aXZpdHkgKi8KKwkJCWdvdG8gY2xlYW51cDsKKwl9CisKKwkvKiBUaGUgaGlz dG9ncmFtLWJhc2VkIHNlbGVjdGl2aXR5IGFwcGxpZXMgdG8gbm9uLWVtcHR5IHJhbmdlcyBvbmx5 ICovCisJc2VsZWMgKj0gKDEgLSBlbXB0eV9mcmFjMSkgKiAoMSAtIGVtcHR5X2ZyYWMyKTsKKwor CS8qCisJICogRm9yIHRoZSBzdXBwb3J0ZWQgb3BlcmF0b3JzICg8PCwgPj4sICYmKSwgZW1wdHkg cmFuZ2VzIGFsd2F5cyBwcm9kdWNlCisJICogZmFsc2UsIHNvIG5vIGVtcHR5LWZyYWN0aW9uIGFk anVzdG1lbnQgaXMgbmVlZGVkLgorCSAqLworCisJLyogQWxsIG11bHRpcmFuZ2Ugb3BlcmF0b3Jz IGFyZSBzdHJpY3QgKi8KKwlzZWxlYyAqPSAoMSAtIG51bGxfZnJhYzEpICogKDEgLSBudWxsX2Zy YWMyKTsKKworY2xlYW51cDoKKwlpZiAoaGF2ZV9oaXN0MikKKwkJZnJlZV9hdHRzdGF0c3Nsb3Qo Jmhpc3QyKTsKKwlpZiAoaGF2ZV9oaXN0MSkKKwkJZnJlZV9hdHRzdGF0c3Nsb3QoJmhpc3QxKTsK KworCVJlbGVhc2VWYXJpYWJsZVN0YXRzKHZhcmRhdGExKTsKKwlSZWxlYXNlVmFyaWFibGVTdGF0 cyh2YXJkYXRhMik7CisKKwlDTEFNUF9QUk9CQUJJTElUWShzZWxlYyk7CisKKwlQR19SRVRVUk5f RkxPQVQ4KChmbG9hdDgpIHNlbGVjKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFs b2cvcGdfb3BlcmF0b3IuZGF0IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19vcGVyYXRvci5kYXQK aW5kZXggNWVhNDQzNGY5ZmEuLjI4ZjY5NmE5ZjQxIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9j YXRhbG9nL3BnX29wZXJhdG9yLmRhdAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX29wZXJh dG9yLmRhdApAQCAtMzMwMiwxOSArMzMwMiwxOSBAQAogICBvcHJuYW1lID0+ICcmJicsIG9wcmxl ZnQgPT4gJ2FueXJhbmdlJywgb3BycmlnaHQgPT4gJ2FueW11bHRpcmFuZ2UnLAogICBvcHJyZXN1 bHQgPT4gJ2Jvb2wnLCBvcHJjb20gPT4gJyYmKGFueW11bHRpcmFuZ2UsYW55cmFuZ2UpJywKICAg b3ByY29kZSA9PiAncmFuZ2Vfb3ZlcmxhcHNfbXVsdGlyYW5nZScsIG9wcnJlc3QgPT4gJ211bHRp cmFuZ2VzZWwnLAotICBvcHJqb2luID0+ICdhcmVham9pbnNlbCcgfSwKKyAgb3Byam9pbiA9PiAn bXVsdGlyYW5nZWpvaW5zZWwnIH0sCiB7IG9pZCA9PiAnMjg2NycsIG9pZF9zeW1ib2wgPT4gJ09J RF9NVUxUSVJBTkdFX09WRVJMQVBTX1JBTkdFX09QJywKICAgZGVzY3IgPT4gJ292ZXJsYXBzJywK ICAgb3BybmFtZSA9PiAnJiYnLCBvcHJsZWZ0ID0+ICdhbnltdWx0aXJhbmdlJywgb3BycmlnaHQg PT4gJ2FueXJhbmdlJywKICAgb3BycmVzdWx0ID0+ICdib29sJywgb3ByY29tID0+ICcmJihhbnly YW5nZSxhbnltdWx0aXJhbmdlKScsCiAgIG9wcmNvZGUgPT4gJ211bHRpcmFuZ2Vfb3ZlcmxhcHNf cmFuZ2UnLCBvcHJyZXN0ID0+ICdtdWx0aXJhbmdlc2VsJywKLSAgb3Byam9pbiA9PiAnYXJlYWpv aW5zZWwnIH0sCisgIG9wcmpvaW4gPT4gJ211bHRpcmFuZ2Vqb2luc2VsJyB9LAogeyBvaWQgPT4g JzI4NjgnLCBvaWRfc3ltYm9sID0+ICdPSURfTVVMVElSQU5HRV9PVkVSTEFQU19NVUxUSVJBTkdF X09QJywKICAgZGVzY3IgPT4gJ292ZXJsYXBzJywKICAgb3BybmFtZSA9PiAnJiYnLCBvcHJsZWZ0 ID0+ICdhbnltdWx0aXJhbmdlJywgb3BycmlnaHQgPT4gJ2FueW11bHRpcmFuZ2UnLAogICBvcHJy ZXN1bHQgPT4gJ2Jvb2wnLCBvcHJjb20gPT4gJyYmKGFueW11bHRpcmFuZ2UsYW55bXVsdGlyYW5n ZSknLAogICBvcHJjb2RlID0+ICdtdWx0aXJhbmdlX292ZXJsYXBzX211bHRpcmFuZ2UnLCBvcHJy ZXN0ID0+ICdtdWx0aXJhbmdlc2VsJywKLSAgb3Byam9pbiA9PiAnYXJlYWpvaW5zZWwnIH0sCisg IG9wcmpvaW4gPT4gJ211bHRpcmFuZ2Vqb2luc2VsJyB9LAogeyBvaWQgPT4gJzI4NjknLCBvaWRf c3ltYm9sID0+ICdPSURfTVVMVElSQU5HRV9DT05UQUlOU19FTEVNX09QJywKICAgZGVzY3IgPT4g J2NvbnRhaW5zJywKICAgb3BybmFtZSA9PiAnQD4nLCBvcHJsZWZ0ID0+ICdhbnltdWx0aXJhbmdl Jywgb3BycmlnaHQgPT4gJ2FueWVsZW1lbnQnLApAQCAtMzQyOCwzNyArMzQyOCwzNyBAQAogICBv cHJuYW1lID0+ICc8PCcsIG9wcmxlZnQgPT4gJ2FueXJhbmdlJywgb3BycmlnaHQgPT4gJ2FueW11 bHRpcmFuZ2UnLAogICBvcHJyZXN1bHQgPT4gJ2Jvb2wnLCBvcHJjb20gPT4gJz4+KGFueW11bHRp cmFuZ2UsYW55cmFuZ2UpJywKICAgb3ByY29kZSA9PiAncmFuZ2VfYmVmb3JlX211bHRpcmFuZ2Un LCBvcHJyZXN0ID0+ICdtdWx0aXJhbmdlc2VsJywKLSAgb3Byam9pbiA9PiAnc2NhbGFybHRqb2lu c2VsJyB9LAorICBvcHJqb2luID0+ICdtdWx0aXJhbmdlam9pbnNlbCcgfSwKIHsgb2lkID0+ICc0 Mzk2Jywgb2lkX3N5bWJvbCA9PiAnT0lEX01VTFRJUkFOR0VfTEVGVF9SQU5HRV9PUCcsCiAgIGRl c2NyID0+ICdpcyBsZWZ0IG9mJywKICAgb3BybmFtZSA9PiAnPDwnLCBvcHJsZWZ0ID0+ICdhbnlt dWx0aXJhbmdlJywgb3BycmlnaHQgPT4gJ2FueXJhbmdlJywKICAgb3BycmVzdWx0ID0+ICdib29s Jywgb3ByY29tID0+ICc+PihhbnlyYW5nZSxhbnltdWx0aXJhbmdlKScsCiAgIG9wcmNvZGUgPT4g J211bHRpcmFuZ2VfYmVmb3JlX3JhbmdlJywgb3BycmVzdCA9PiAnbXVsdGlyYW5nZXNlbCcsCi0g IG9wcmpvaW4gPT4gJ3NjYWxhcmx0am9pbnNlbCcgfSwKKyAgb3Byam9pbiA9PiAnbXVsdGlyYW5n ZWpvaW5zZWwnIH0sCiB7IG9pZCA9PiAnNDM5NycsIG9pZF9zeW1ib2wgPT4gJ09JRF9NVUxUSVJB TkdFX0xFRlRfTVVMVElSQU5HRV9PUCcsCiAgIGRlc2NyID0+ICdpcyBsZWZ0IG9mJywKICAgb3By bmFtZSA9PiAnPDwnLCBvcHJsZWZ0ID0+ICdhbnltdWx0aXJhbmdlJywgb3BycmlnaHQgPT4gJ2Fu eW11bHRpcmFuZ2UnLAogICBvcHJyZXN1bHQgPT4gJ2Jvb2wnLCBvcHJjb20gPT4gJz4+KGFueW11 bHRpcmFuZ2UsYW55bXVsdGlyYW5nZSknLAogICBvcHJjb2RlID0+ICdtdWx0aXJhbmdlX2JlZm9y ZV9tdWx0aXJhbmdlJywgb3BycmVzdCA9PiAnbXVsdGlyYW5nZXNlbCcsCi0gIG9wcmpvaW4gPT4g J3NjYWxhcmx0am9pbnNlbCcgfSwKKyAgb3Byam9pbiA9PiAnbXVsdGlyYW5nZWpvaW5zZWwnIH0s CiB7IG9pZCA9PiAnNDM5OCcsIG9pZF9zeW1ib2wgPT4gJ09JRF9SQU5HRV9SSUdIVF9NVUxUSVJB TkdFX09QJywKICAgZGVzY3IgPT4gJ2lzIHJpZ2h0IG9mJywKICAgb3BybmFtZSA9PiAnPj4nLCBv cHJsZWZ0ID0+ICdhbnlyYW5nZScsIG9wcnJpZ2h0ID0+ICdhbnltdWx0aXJhbmdlJywKICAgb3By cmVzdWx0ID0+ICdib29sJywgb3ByY29tID0+ICc8PChhbnltdWx0aXJhbmdlLGFueXJhbmdlKScs CiAgIG9wcmNvZGUgPT4gJ3JhbmdlX2FmdGVyX211bHRpcmFuZ2UnLCBvcHJyZXN0ID0+ICdtdWx0 aXJhbmdlc2VsJywKLSAgb3Byam9pbiA9PiAnc2NhbGFyZ3Rqb2luc2VsJyB9LAorICBvcHJqb2lu ID0+ICdtdWx0aXJhbmdlam9pbnNlbCcgfSwKIHsgb2lkID0+ICc0Mzk5Jywgb2lkX3N5bWJvbCA9 PiAnT0lEX01VTFRJUkFOR0VfUklHSFRfUkFOR0VfT1AnLAogICBkZXNjciA9PiAnaXMgcmlnaHQg b2YnLAogICBvcHJuYW1lID0+ICc+PicsIG9wcmxlZnQgPT4gJ2FueW11bHRpcmFuZ2UnLCBvcHJy aWdodCA9PiAnYW55cmFuZ2UnLAogICBvcHJyZXN1bHQgPT4gJ2Jvb2wnLCBvcHJjb20gPT4gJzw8 KGFueXJhbmdlLGFueW11bHRpcmFuZ2UpJywKICAgb3ByY29kZSA9PiAnbXVsdGlyYW5nZV9hZnRl cl9yYW5nZScsIG9wcnJlc3QgPT4gJ211bHRpcmFuZ2VzZWwnLAotICBvcHJqb2luID0+ICdzY2Fs YXJndGpvaW5zZWwnIH0sCisgIG9wcmpvaW4gPT4gJ211bHRpcmFuZ2Vqb2luc2VsJyB9LAogeyBv aWQgPT4gJzQ0MDAnLCBvaWRfc3ltYm9sID0+ICdPSURfTVVMVElSQU5HRV9SSUdIVF9NVUxUSVJB TkdFX09QJywKICAgZGVzY3IgPT4gJ2lzIHJpZ2h0IG9mJywKICAgb3BybmFtZSA9PiAnPj4nLCBv cHJsZWZ0ID0+ICdhbnltdWx0aXJhbmdlJywgb3BycmlnaHQgPT4gJ2FueW11bHRpcmFuZ2UnLAog ICBvcHJyZXN1bHQgPT4gJ2Jvb2wnLCBvcHJjb20gPT4gJzw8KGFueW11bHRpcmFuZ2UsYW55bXVs dGlyYW5nZSknLAogICBvcHJjb2RlID0+ICdtdWx0aXJhbmdlX2FmdGVyX211bHRpcmFuZ2UnLCBv cHJyZXN0ID0+ICdtdWx0aXJhbmdlc2VsJywKLSAgb3Byam9pbiA9PiAnc2NhbGFyZ3Rqb2luc2Vs JyB9LAorICBvcHJqb2luID0+ICdtdWx0aXJhbmdlam9pbnNlbCcgfSwKIAogeyBvaWQgPT4gJzgy NjInLCBkZXNjciA9PiAnZXF1YWwnLAogICBvcHJuYW1lID0+ICc9Jywgb3ByY2FubWVyZ2UgPT4g J3QnLCBvcHJjYW5oYXNoID0+ICd0Jywgb3BybGVmdCA9PiAnb2lkOCcsCmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19w cm9jLmRhdAppbmRleCBjNmE3MDdhY2FlNC4uMTBmYmMyMmM0YTYgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19w cm9jLmRhdApAQCAtMTI5MjMsNCArMTI5MjMsOCBAQAogICBwcm9uYW1lID0+ICdyYW5nZWpvaW5z ZWwnLCBwcm92b2xhdGlsZSA9PiAncycsIHByb3JldHR5cGUgPT4gJ2Zsb2F0OCcsCiAgIHByb2Fy Z3R5cGVzID0+ICdpbnRlcm5hbCBvaWQgaW50ZXJuYWwgaW50MiBpbnRlcm5hbCcsCiAgIHByb3Ny YyA9PiAncmFuZ2Vqb2luc2VsJyB9LAoreyBvaWQgPT4gJzgzNTYnLCBkZXNjciA9PiAnam9pbiBz ZWxlY3Rpdml0eSBmb3IgbXVsdGlyYW5nZSBvcGVyYXRvcnMnLAorICBwcm9uYW1lID0+ICdtdWx0 aXJhbmdlam9pbnNlbCcsIHByb3ZvbGF0aWxlID0+ICdzJywgcHJvcmV0dHlwZSA9PiAnZmxvYXQ4 JywKKyAgcHJvYXJndHlwZXMgPT4gJ2ludGVybmFsIG9pZCBpbnRlcm5hbCBpbnQyIGludGVybmFs JywKKyAgcHJvc3JjID0+ICdtdWx0aXJhbmdlam9pbnNlbCcgfSwKIF0KZGlmZiAtLWdpdCBhL3Ny Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvbXVsdGlyYW5nZXR5cGVzLm91dCBiL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvbXVsdGlyYW5nZXR5cGVzLm91dAppbmRleCBmNWU3ZGY4ZGY0My4uYWFi OWM1ZTI2MDQgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvbXVsdGlyYW5n ZXR5cGVzLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL211bHRpcmFuZ2V0eXBl cy5vdXQKQEAgLTM1MTIsMyArMzUxMiwxNjAgQEAgY3JlYXRlIGZ1bmN0aW9uIG1yX3RhYmxlX2Zh aWwoaSBhbnllbGVtZW50KSByZXR1cm5zIHRhYmxlKGkgYW55ZWxlbWVudCwgciBhbnltdWwKICAg YXMgJCQgc2VsZWN0ICQxLCAnWzEsMTBdJyAkJCBsYW5ndWFnZSBzcWw7CiBFUlJPUjogIGNhbm5v dCBkZXRlcm1pbmUgcmVzdWx0IGRhdGEgdHlwZQogREVUQUlMOiAgQSByZXN1bHQgb2YgdHlwZSBh bnltdWx0aXJhbmdlIHJlcXVpcmVzIGF0IGxlYXN0IG9uZSBpbnB1dCBvZiB0eXBlIGFueXJhbmdl IG9yIGFueW11bHRpcmFuZ2UuCistLSBSZXN0b3JlIEdVQ3MgY2hhbmdlZCBieSBlYXJsaWVyIGlu ZGV4IHRlc3RzCitSRVNFVCBlbmFibGVfc2Vxc2NhbjsKK1JFU0VUIGVuYWJsZV9pbmRleHNjYW47 CitSRVNFVCBlbmFibGVfYml0bWFwc2NhbjsKKy0tCistLSB0ZXN0IHNlbGVjdGl2aXR5IG9mIG11 bHRpcmFuZ2Ugam9pbiBvcGVyYXRvcnMKKy0tCitjcmVhdGUgdGFibGUgdGVzdF9tcl9qb2luXzEg KG1yMSBpbnQ0bXVsdGlyYW5nZSk7CitjcmVhdGUgdGFibGUgdGVzdF9tcl9qb2luXzIgKG1yMiBp bnQ0bXVsdGlyYW5nZSk7CitjcmVhdGUgdGFibGUgdGVzdF9tcl9qb2luXzMgKG1yMyBpbnQ0bXVs dGlyYW5nZSk7CitpbnNlcnQgaW50byB0ZXN0X21yX2pvaW5fMSBzZWxlY3QgaW50NG11bHRpcmFu Z2UoaW50NHJhbmdlKGcsIGcrMTApKSBmcm9tIGdlbmVyYXRlX3NlcmllcygxLCAxMDAwKSBnOwor aW5zZXJ0IGludG8gdGVzdF9tcl9qb2luXzEgc2VsZWN0IGludDRtdWx0aXJhbmdlKGludDRyYW5n ZShnLCBnKzEwMCkpIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMDAsIDEwKSBnOworaW5zZXJ0 IGludG8gdGVzdF9tcl9qb2luXzIgc2VsZWN0IGludDRtdWx0aXJhbmdlKGludDRyYW5nZShnLCBn KzEwKSkgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMSwgNTAwKSBnOworaW5zZXJ0IGludG8gdGVzdF9t cl9qb2luXzIgc2VsZWN0IGludDRtdWx0aXJhbmdlKGludDRyYW5nZShnLCBnKzEwMCkpIGZyb20g Z2VuZXJhdGVfc2VyaWVzKDEsIDUwMCwgMTApIGc7CitpbnNlcnQgaW50byB0ZXN0X21yX2pvaW5f MyBzZWxlY3QgaW50NG11bHRpcmFuZ2UoaW50NHJhbmdlKGcsIGcrMTApKSBmcm9tIGdlbmVyYXRl X3Nlcmllcyg1MDEsIDEwMDApIGc7CitpbnNlcnQgaW50byB0ZXN0X21yX2pvaW5fMyBzZWxlY3Qg aW50NG11bHRpcmFuZ2UoaW50NHJhbmdlKGcsIGcrMTAwKSkgZnJvbSBnZW5lcmF0ZV9zZXJpZXMo NTAxLCAxMDAwLCAxMCkgZzsKK2FuYWx5emUgdGVzdF9tcl9qb2luXzE7CithbmFseXplIHRlc3Rf bXJfam9pbl8yOworYW5hbHl6ZSB0ZXN0X21yX2pvaW5fMzsKKy0tIG11bHRpcmFuZ2UgdnMgbXVs dGlyYW5nZTogcmVvcmRlciBqb2lucyBiYXNlZCBvbiBjb21wdXRlZCBzZWxlY3Rpdml0eQorZXhw bGFpbiAoY29zdHMgb2ZmKSBzZWxlY3QgY291bnQoKikgZnJvbSB0ZXN0X21yX2pvaW5fMSwgdGVz dF9tcl9qb2luXzIsIHRlc3RfbXJfam9pbl8zIHdoZXJlIG1yMSAmJiBtcjIgYW5kIG1yMiAmJiBt cjM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBZ2dyZWdh dGUKKyAgIC0+ICBOZXN0ZWQgTG9vcAorICAgICAgICAgSm9pbiBGaWx0ZXI6ICh0ZXN0X21yX2pv aW5fMS5tcjEgJiYgdGVzdF9tcl9qb2luXzIubXIyKQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9u IHRlc3RfbXJfam9pbl8xCisgICAgICAgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAgICAgICAgICAg IC0+ICBOZXN0ZWQgTG9vcAorICAgICAgICAgICAgICAgICAgICAgSm9pbiBGaWx0ZXI6ICh0ZXN0 X21yX2pvaW5fMi5tcjIgJiYgdGVzdF9tcl9qb2luXzMubXIzKQorICAgICAgICAgICAgICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIHRlc3RfbXJfam9pbl8yCisgICAgICAgICAgICAgICAgICAgICAt PiAgTWF0ZXJpYWxpemUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBv biB0ZXN0X21yX2pvaW5fMworKDEwIHJvd3MpCisKK2V4cGxhaW4gKGNvc3RzIG9mZikgc2VsZWN0 IGNvdW50KCopIGZyb20gdGVzdF9tcl9qb2luXzEsIHRlc3RfbXJfam9pbl8yLCB0ZXN0X21yX2pv aW5fMyB3aGVyZSBtcjEgPDwgbXIyIGFuZCBtcjIgPDwgbXIzOworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgQWdncmVnYXRlCisgICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAgIEpv aW4gRmlsdGVyOiAodGVzdF9tcl9qb2luXzIubXIyIDw8IHRlc3RfbXJfam9pbl8zLm1yMykKKyAg ICAgICAgIC0+ICBOZXN0ZWQgTG9vcAorICAgICAgICAgICAgICAgSm9pbiBGaWx0ZXI6ICh0ZXN0 X21yX2pvaW5fMS5tcjEgPDwgdGVzdF9tcl9qb2luXzIubXIyKQorICAgICAgICAgICAgICAgLT4g IFNlcSBTY2FuIG9uIHRlc3RfbXJfam9pbl8xCisgICAgICAgICAgICAgICAtPiAgTWF0ZXJpYWxp emUKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiB0ZXN0X21yX2pvaW5fMgor ICAgICAgICAgLT4gIE1hdGVyaWFsaXplCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24g dGVzdF9tcl9qb2luXzMKKygxMCByb3dzKQorCitleHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCBj b3VudCgqKSBmcm9tIHRlc3RfbXJfam9pbl8xLCB0ZXN0X21yX2pvaW5fMiwgdGVzdF9tcl9qb2lu XzMgd2hlcmUgbXIxID4+IG1yMiBhbmQgbXIyID4+IG1yMzsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIEFnZ3JlZ2F0ZQorICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAgICBKb2lu IEZpbHRlcjogKHRlc3RfbXJfam9pbl8xLm1yMSA+PiB0ZXN0X21yX2pvaW5fMi5tcjIpCisgICAg ICAgICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAgICAgICAgIEpvaW4gRmlsdGVyOiAodGVzdF9t cl9qb2luXzIubXIyID4+IHRlc3RfbXJfam9pbl8zLm1yMykKKyAgICAgICAgICAgICAgIC0+ICBT ZXEgU2NhbiBvbiB0ZXN0X21yX2pvaW5fMgorICAgICAgICAgICAgICAgLT4gIE1hdGVyaWFsaXpl CisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gdGVzdF9tcl9qb2luXzMKKyAg ICAgICAgIC0+ICBTZXEgU2NhbiBvbiB0ZXN0X21yX2pvaW5fMQorKDkgcm93cykKKworZHJvcCB0 YWJsZSB0ZXN0X21yX2pvaW5fMTsKK2Ryb3AgdGFibGUgdGVzdF9tcl9qb2luXzI7Citkcm9wIHRh YmxlIHRlc3RfbXJfam9pbl8zOworLS0KKy0tIHRlc3QgbXVsdGlyYW5nZSBqb2luIHNlbGVjdGl2 aXR5IHdpdGggZnVsbHkgZGlzam9pbnQgaGlzdG9ncmFtcworLS0KK2NyZWF0ZSB0YWJsZSB0ZXN0 X21yX2pvaW5fbG8gKHIgaW50NG11bHRpcmFuZ2UpOworY3JlYXRlIHRhYmxlIHRlc3RfbXJfam9p bl9oaSAociBpbnQ0bXVsdGlyYW5nZSk7CitpbnNlcnQgaW50byB0ZXN0X21yX2pvaW5fbG8gc2Vs ZWN0IGludDRtdWx0aXJhbmdlKGludDRyYW5nZShnLCBnKzEwKSkgZnJvbSBnZW5lcmF0ZV9zZXJp ZXMoMSwgNTAwKSBnOworaW5zZXJ0IGludG8gdGVzdF9tcl9qb2luX2hpIHNlbGVjdCBpbnQ0bXVs dGlyYW5nZShpbnQ0cmFuZ2UoZywgZysxMCkpIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDEwMDAxLCAx MDUwMCkgZzsKK2FuYWx5emUgdGVzdF9tcl9qb2luX2xvOworYW5hbHl6ZSB0ZXN0X21yX2pvaW5f aGk7CistLSBUaGVzZSBzaG91bGQgbm90IGNyYXNoIGFuZCBzaG91bGQgcHJvZHVjZSBzdGFibGUg cGxhbnMuCitleHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCBjb3VudCgqKSBmcm9tIHRlc3RfbXJf am9pbl9sbyBhLCB0ZXN0X21yX2pvaW5faGkgYiB3aGVyZSBhLnIgPDwgYi5yOworICAgICAgICAg ICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEFnZ3JlZ2F0ZQorICAgLT4gIE5l c3RlZCBMb29wCisgICAgICAgICBKb2luIEZpbHRlcjogKGEuciA8PCBiLnIpCisgICAgICAgICAt PiAgU2VxIFNjYW4gb24gdGVzdF9tcl9qb2luX2xvIGEKKyAgICAgICAgIC0+ICBNYXRlcmlhbGl6 ZQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHRlc3RfbXJfam9pbl9oaSBiCisoNiBy b3dzKQorCitleHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCBjb3VudCgqKSBmcm9tIHRlc3RfbXJf am9pbl9sbyBhLCB0ZXN0X21yX2pvaW5faGkgYiB3aGVyZSBhLnIgPj4gYi5yOworICAgICAgICAg ICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEFnZ3JlZ2F0ZQorICAgLT4gIE5l c3RlZCBMb29wCisgICAgICAgICBKb2luIEZpbHRlcjogKGEuciA+PiBiLnIpCisgICAgICAgICAt PiAgU2VxIFNjYW4gb24gdGVzdF9tcl9qb2luX2xvIGEKKyAgICAgICAgIC0+ICBNYXRlcmlhbGl6 ZQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHRlc3RfbXJfam9pbl9oaSBiCisoNiBy b3dzKQorCitleHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCBjb3VudCgqKSBmcm9tIHRlc3RfbXJf am9pbl9sbyBhLCB0ZXN0X21yX2pvaW5faGkgYiB3aGVyZSBhLnIgJiYgYi5yOworICAgICAgICAg ICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEFnZ3JlZ2F0ZQorICAgLT4gIE5l c3RlZCBMb29wCisgICAgICAgICBKb2luIEZpbHRlcjogKGEuciAmJiBiLnIpCisgICAgICAgICAt PiAgU2VxIFNjYW4gb24gdGVzdF9tcl9qb2luX2xvIGEKKyAgICAgICAgIC0+ICBNYXRlcmlhbGl6 ZQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHRlc3RfbXJfam9pbl9oaSBiCisoNiBy b3dzKQorCitkcm9wIHRhYmxlIHRlc3RfbXJfam9pbl9sbzsKK2Ryb3AgdGFibGUgdGVzdF9tcl9q b2luX2hpOworLS0KKy0tIHRlc3QgcmFuZ2UgdnMgbXVsdGlyYW5nZSBqb2luIHNlbGVjdGl2aXR5 CistLQorY3JlYXRlIHRhYmxlIHRlc3RfbXJfam9pbl9yIChyIGludDRyYW5nZSk7CitjcmVhdGUg dGFibGUgdGVzdF9tcl9qb2luX21yIChtciBpbnQ0bXVsdGlyYW5nZSk7CitpbnNlcnQgaW50byB0 ZXN0X21yX2pvaW5fciBzZWxlY3QgaW50NHJhbmdlKGcsIGcrMTApIGZyb20gZ2VuZXJhdGVfc2Vy aWVzKDEsIDUwMCkgZzsKK2luc2VydCBpbnRvIHRlc3RfbXJfam9pbl9tciBzZWxlY3QgaW50NG11 bHRpcmFuZ2UoaW50NHJhbmdlKGcsIGcrMTApKSBmcm9tIGdlbmVyYXRlX3NlcmllcygxMDAwMSwg MTA1MDApIGc7CithbmFseXplIHRlc3RfbXJfam9pbl9yOworYW5hbHl6ZSB0ZXN0X21yX2pvaW5f bXI7CistLSByYW5nZSB2cyBtdWx0aXJhbmdlIG9wZXJhdG9ycyBzaG91bGQgdXNlIG11bHRpcmFu Z2Vqb2luc2VsCitleHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCBjb3VudCgqKSBmcm9tIHRlc3Rf bXJfam9pbl9yIGEsIHRlc3RfbXJfam9pbl9tciBiIHdoZXJlIGEuciA8PCBiLm1yOworICAgICAg ICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEFnZ3JlZ2F0ZQorICAgLT4g IE5lc3RlZCBMb29wCisgICAgICAgICBKb2luIEZpbHRlcjogKGEuciA8PCBiLm1yKQorICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIHRlc3RfbXJfam9pbl9yIGEKKyAgICAgICAgIC0+ICBNYXRlcmlh bGl6ZQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHRlc3RfbXJfam9pbl9tciBiCiso NiByb3dzKQorCitleHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCBjb3VudCgqKSBmcm9tIHRlc3Rf bXJfam9pbl9yIGEsIHRlc3RfbXJfam9pbl9tciBiIHdoZXJlIGEuciA+PiBiLm1yOworICAgICAg ICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEFnZ3JlZ2F0ZQorICAgLT4g IE5lc3RlZCBMb29wCisgICAgICAgICBKb2luIEZpbHRlcjogKGEuciA+PiBiLm1yKQorICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIHRlc3RfbXJfam9pbl9yIGEKKyAgICAgICAgIC0+ICBNYXRlcmlh bGl6ZQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHRlc3RfbXJfam9pbl9tciBiCiso NiByb3dzKQorCitleHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCBjb3VudCgqKSBmcm9tIHRlc3Rf bXJfam9pbl9yIGEsIHRlc3RfbXJfam9pbl9tciBiIHdoZXJlIGEuciAmJiBiLm1yOworICAgICAg ICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEFnZ3JlZ2F0ZQorICAgLT4g IE5lc3RlZCBMb29wCisgICAgICAgICBKb2luIEZpbHRlcjogKGEuciAmJiBiLm1yKQorICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIHRlc3RfbXJfam9pbl9yIGEKKyAgICAgICAgIC0+ICBNYXRlcmlh bGl6ZQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHRlc3RfbXJfam9pbl9tciBiCiso NiByb3dzKQorCitkcm9wIHRhYmxlIHRlc3RfbXJfam9pbl9yOworZHJvcCB0YWJsZSB0ZXN0X21y X2pvaW5fbXI7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9tdWx0aXJhbmdldHlw ZXMuc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvbXVsdGlyYW5nZXR5cGVzLnNxbAppbmRleCAx MTIzMzRiMDNlYi4uZTNmOGNkNmY0ZTMgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3Fs L211bHRpcmFuZ2V0eXBlcy5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvbXVsdGlyYW5n ZXR5cGVzLnNxbApAQCAtOTA0LDMgKzkwNCw3NSBAQCBjcmVhdGUgZnVuY3Rpb24gbXJfaW5vdXRw YXJhbV9mYWlsKGlub3V0IGkgYW55ZWxlbWVudCwgb3V0IHIgYW55bXVsdGlyYW5nZSkKIC0tc2hv dWxkIGZhaWwKIGNyZWF0ZSBmdW5jdGlvbiBtcl90YWJsZV9mYWlsKGkgYW55ZWxlbWVudCkgcmV0 dXJucyB0YWJsZShpIGFueWVsZW1lbnQsIHIgYW55bXVsdGlyYW5nZSkKICAgYXMgJCQgc2VsZWN0 ICQxLCAnWzEsMTBdJyAkJCBsYW5ndWFnZSBzcWw7CisKKy0tIFJlc3RvcmUgR1VDcyBjaGFuZ2Vk IGJ5IGVhcmxpZXIgaW5kZXggdGVzdHMKK1JFU0VUIGVuYWJsZV9zZXFzY2FuOworUkVTRVQgZW5h YmxlX2luZGV4c2NhbjsKK1JFU0VUIGVuYWJsZV9iaXRtYXBzY2FuOworCistLQorLS0gdGVzdCBz ZWxlY3Rpdml0eSBvZiBtdWx0aXJhbmdlIGpvaW4gb3BlcmF0b3JzCistLQorY3JlYXRlIHRhYmxl IHRlc3RfbXJfam9pbl8xIChtcjEgaW50NG11bHRpcmFuZ2UpOworY3JlYXRlIHRhYmxlIHRlc3Rf bXJfam9pbl8yIChtcjIgaW50NG11bHRpcmFuZ2UpOworY3JlYXRlIHRhYmxlIHRlc3RfbXJfam9p bl8zIChtcjMgaW50NG11bHRpcmFuZ2UpOworCitpbnNlcnQgaW50byB0ZXN0X21yX2pvaW5fMSBz ZWxlY3QgaW50NG11bHRpcmFuZ2UoaW50NHJhbmdlKGcsIGcrMTApKSBmcm9tIGdlbmVyYXRlX3Nl cmllcygxLCAxMDAwKSBnOworaW5zZXJ0IGludG8gdGVzdF9tcl9qb2luXzEgc2VsZWN0IGludDRt dWx0aXJhbmdlKGludDRyYW5nZShnLCBnKzEwMCkpIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDEsIDEw MDAsIDEwKSBnOworaW5zZXJ0IGludG8gdGVzdF9tcl9qb2luXzIgc2VsZWN0IGludDRtdWx0aXJh bmdlKGludDRyYW5nZShnLCBnKzEwKSkgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMSwgNTAwKSBnOwor aW5zZXJ0IGludG8gdGVzdF9tcl9qb2luXzIgc2VsZWN0IGludDRtdWx0aXJhbmdlKGludDRyYW5n ZShnLCBnKzEwMCkpIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDEsIDUwMCwgMTApIGc7CitpbnNlcnQg aW50byB0ZXN0X21yX2pvaW5fMyBzZWxlY3QgaW50NG11bHRpcmFuZ2UoaW50NHJhbmdlKGcsIGcr MTApKSBmcm9tIGdlbmVyYXRlX3Nlcmllcyg1MDEsIDEwMDApIGc7CitpbnNlcnQgaW50byB0ZXN0 X21yX2pvaW5fMyBzZWxlY3QgaW50NG11bHRpcmFuZ2UoaW50NHJhbmdlKGcsIGcrMTAwKSkgZnJv bSBnZW5lcmF0ZV9zZXJpZXMoNTAxLCAxMDAwLCAxMCkgZzsKKworYW5hbHl6ZSB0ZXN0X21yX2pv aW5fMTsKK2FuYWx5emUgdGVzdF9tcl9qb2luXzI7CithbmFseXplIHRlc3RfbXJfam9pbl8zOwor CistLSBtdWx0aXJhbmdlIHZzIG11bHRpcmFuZ2U6IHJlb3JkZXIgam9pbnMgYmFzZWQgb24gY29t cHV0ZWQgc2VsZWN0aXZpdHkKK2V4cGxhaW4gKGNvc3RzIG9mZikgc2VsZWN0IGNvdW50KCopIGZy b20gdGVzdF9tcl9qb2luXzEsIHRlc3RfbXJfam9pbl8yLCB0ZXN0X21yX2pvaW5fMyB3aGVyZSBt cjEgJiYgbXIyIGFuZCBtcjIgJiYgbXIzOworZXhwbGFpbiAoY29zdHMgb2ZmKSBzZWxlY3QgY291 bnQoKikgZnJvbSB0ZXN0X21yX2pvaW5fMSwgdGVzdF9tcl9qb2luXzIsIHRlc3RfbXJfam9pbl8z IHdoZXJlIG1yMSA8PCBtcjIgYW5kIG1yMiA8PCBtcjM7CitleHBsYWluIChjb3N0cyBvZmYpIHNl bGVjdCBjb3VudCgqKSBmcm9tIHRlc3RfbXJfam9pbl8xLCB0ZXN0X21yX2pvaW5fMiwgdGVzdF9t cl9qb2luXzMgd2hlcmUgbXIxID4+IG1yMiBhbmQgbXIyID4+IG1yMzsKKworZHJvcCB0YWJsZSB0 ZXN0X21yX2pvaW5fMTsKK2Ryb3AgdGFibGUgdGVzdF9tcl9qb2luXzI7Citkcm9wIHRhYmxlIHRl c3RfbXJfam9pbl8zOworCistLQorLS0gdGVzdCBtdWx0aXJhbmdlIGpvaW4gc2VsZWN0aXZpdHkg d2l0aCBmdWxseSBkaXNqb2ludCBoaXN0b2dyYW1zCistLQorY3JlYXRlIHRhYmxlIHRlc3RfbXJf am9pbl9sbyAociBpbnQ0bXVsdGlyYW5nZSk7CitjcmVhdGUgdGFibGUgdGVzdF9tcl9qb2luX2hp IChyIGludDRtdWx0aXJhbmdlKTsKKworaW5zZXJ0IGludG8gdGVzdF9tcl9qb2luX2xvIHNlbGVj dCBpbnQ0bXVsdGlyYW5nZShpbnQ0cmFuZ2UoZywgZysxMCkpIGZyb20gZ2VuZXJhdGVfc2VyaWVz KDEsIDUwMCkgZzsKK2luc2VydCBpbnRvIHRlc3RfbXJfam9pbl9oaSBzZWxlY3QgaW50NG11bHRp cmFuZ2UoaW50NHJhbmdlKGcsIGcrMTApKSBmcm9tIGdlbmVyYXRlX3NlcmllcygxMDAwMSwgMTA1 MDApIGc7CisKK2FuYWx5emUgdGVzdF9tcl9qb2luX2xvOworYW5hbHl6ZSB0ZXN0X21yX2pvaW5f aGk7CisKKy0tIFRoZXNlIHNob3VsZCBub3QgY3Jhc2ggYW5kIHNob3VsZCBwcm9kdWNlIHN0YWJs ZSBwbGFucy4KK2V4cGxhaW4gKGNvc3RzIG9mZikgc2VsZWN0IGNvdW50KCopIGZyb20gdGVzdF9t cl9qb2luX2xvIGEsIHRlc3RfbXJfam9pbl9oaSBiIHdoZXJlIGEuciA8PCBiLnI7CitleHBsYWlu IChjb3N0cyBvZmYpIHNlbGVjdCBjb3VudCgqKSBmcm9tIHRlc3RfbXJfam9pbl9sbyBhLCB0ZXN0 X21yX2pvaW5faGkgYiB3aGVyZSBhLnIgPj4gYi5yOworZXhwbGFpbiAoY29zdHMgb2ZmKSBzZWxl Y3QgY291bnQoKikgZnJvbSB0ZXN0X21yX2pvaW5fbG8gYSwgdGVzdF9tcl9qb2luX2hpIGIgd2hl cmUgYS5yICYmIGIucjsKKworZHJvcCB0YWJsZSB0ZXN0X21yX2pvaW5fbG87Citkcm9wIHRhYmxl IHRlc3RfbXJfam9pbl9oaTsKKworLS0KKy0tIHRlc3QgcmFuZ2UgdnMgbXVsdGlyYW5nZSBqb2lu IHNlbGVjdGl2aXR5CistLQorY3JlYXRlIHRhYmxlIHRlc3RfbXJfam9pbl9yIChyIGludDRyYW5n ZSk7CitjcmVhdGUgdGFibGUgdGVzdF9tcl9qb2luX21yIChtciBpbnQ0bXVsdGlyYW5nZSk7CisK K2luc2VydCBpbnRvIHRlc3RfbXJfam9pbl9yIHNlbGVjdCBpbnQ0cmFuZ2UoZywgZysxMCkgZnJv bSBnZW5lcmF0ZV9zZXJpZXMoMSwgNTAwKSBnOworaW5zZXJ0IGludG8gdGVzdF9tcl9qb2luX21y IHNlbGVjdCBpbnQ0bXVsdGlyYW5nZShpbnQ0cmFuZ2UoZywgZysxMCkpIGZyb20gZ2VuZXJhdGVf c2VyaWVzKDEwMDAxLCAxMDUwMCkgZzsKKworYW5hbHl6ZSB0ZXN0X21yX2pvaW5fcjsKK2FuYWx5 emUgdGVzdF9tcl9qb2luX21yOworCistLSByYW5nZSB2cyBtdWx0aXJhbmdlIG9wZXJhdG9ycyBz aG91bGQgdXNlIG11bHRpcmFuZ2Vqb2luc2VsCitleHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCBj b3VudCgqKSBmcm9tIHRlc3RfbXJfam9pbl9yIGEsIHRlc3RfbXJfam9pbl9tciBiIHdoZXJlIGEu ciA8PCBiLm1yOworZXhwbGFpbiAoY29zdHMgb2ZmKSBzZWxlY3QgY291bnQoKikgZnJvbSB0ZXN0 X21yX2pvaW5fciBhLCB0ZXN0X21yX2pvaW5fbXIgYiB3aGVyZSBhLnIgPj4gYi5tcjsKK2V4cGxh aW4gKGNvc3RzIG9mZikgc2VsZWN0IGNvdW50KCopIGZyb20gdGVzdF9tcl9qb2luX3IgYSwgdGVz dF9tcl9qb2luX21yIGIgd2hlcmUgYS5yICYmIGIubXI7CisKK2Ryb3AgdGFibGUgdGVzdF9tcl9q b2luX3I7Citkcm9wIHRhYmxlIHRlc3RfbXJfam9pbl9tcjsKLS0gCjIuNTAuMSAoQXBwbGUgR2l0 LTE1NSkKCg== --_006_AM0P190MB07243E890A7DFD6F24F70269F0232AM0P190MB0724EURP_ Content-Type: application/octet-stream; name="v7-0003-Remove-duplicate-selectivity-functions-between-ra.patch" Content-Description: v7-0003-Remove-duplicate-selectivity-functions-between-ra.patch Content-Disposition: attachment; filename="v7-0003-Remove-duplicate-selectivity-functions-between-ra.patch"; size=35337; creation-date="Thu, 16 Apr 2026 15:11:38 GMT"; modification-date="Thu, 16 Apr 2026 15:12:56 GMT" Content-Transfer-Encoding: base64 RnJvbSAxMjY2NWNhMTlmODAyYTJhY2U1MDUyNWNmNWRmOGE2Zjk1ZTg2MGRmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgU2Nob2VtYW5zIDxtYXhpbWUuc2Nob2VtYW5zQGVu dGVycHJpc2VkYi5jb20+CkRhdGU6IFRodSwgMTYgQXByIDIwMjYgMTY6Mjg6MTcgKzAyMDAKU3Vi amVjdDogW1BBVENIIHY3IDMvM10gUmVtb3ZlIGR1cGxpY2F0ZSBzZWxlY3Rpdml0eSBmdW5jdGlv bnMgYmV0d2VlbiByYW5nZQogYW5kIG11bHRpcmFuZ2UKClRoZSBtdWx0aXJhbmdlIHNlbGVjdGl2 aXR5IGNvZGUgZHVwbGljYXRlZCAxMCBoZWxwZXIgZnVuY3Rpb25zIGZyb20KcmFuZ2V0eXBlc19z ZWxmdW5jcy5jLiBTaW5jZSBib3RoIHJhbmdlIGFuZCBtdWx0aXJhbmdlIHR5cGVzIHVzZSB0aGUK c2FtZSBoaXN0b2dyYW0gZm9ybWF0IChTVEFUSVNUSUNfS0lORF9CT1VORFNfSElTVE9HUkFNKSBh bmQgdGhlIHNhbWUKUmFuZ2VCb3VuZCByZXByZXNlbnRhdGlvbiwgdGhlIGZ1bmN0aW9ucyBhcmUg aWRlbnRpY2FsLgoKTWFrZSB0aGUgMTAgc2hhcmVkIGZ1bmN0aW9ucyBub24tc3RhdGljIGluIHJh bmdldHlwZXNfc2VsZnVuY3MuYywKZXhwb3J0IHRoZW0gdmlhIGEgbmV3IHJhbmdldHlwZXNfc2Vs ZnVuY3MuaCBoZWFkZXIsIGFuZCByZW1vdmUgdGhlCmNvcGllcyBmcm9tIG11bHRpcmFuZ2V0eXBl c19zZWxmdW5jcy5jLgotLS0KIC4uLi91dGlscy9hZHQvbXVsdGlyYW5nZXR5cGVzX3NlbGZ1bmNz LmMgICAgICB8IDc3MiArLS0tLS0tLS0tLS0tLS0tLS0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9y YW5nZXR5cGVzX3NlbGZ1bmNzLmMgICB8ICA0NiArLQogc3JjL2luY2x1ZGUvdXRpbHMvcmFuZ2V0 eXBlc19zZWxmdW5jcy5oICAgICAgIHwgIDU0ICsrCiAzIGZpbGVzIGNoYW5nZWQsIDY3IGluc2Vy dGlvbnMoKyksIDgwNSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvaW5jbHVk ZS91dGlscy9yYW5nZXR5cGVzX3NlbGZ1bmNzLmgKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91 dGlscy9hZHQvbXVsdGlyYW5nZXR5cGVzX3NlbGZ1bmNzLmMgYi9zcmMvYmFja2VuZC91dGlscy9h ZHQvbXVsdGlyYW5nZXR5cGVzX3NlbGZ1bmNzLmMKaW5kZXggMjQxZjhjNmRiZTAuLmZhNWYyM2Qw OWE5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvbXVsdGlyYW5nZXR5cGVzX3Nl bGZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L211bHRpcmFuZ2V0eXBlc19zZWxm dW5jcy5jCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCiAj aW5jbHVkZSAidXRpbHMvbXVsdGlyYW5nZXR5cGVzLmgiCiAjaW5jbHVkZSAidXRpbHMvcmFuZ2V0 eXBlcy5oIgorI2luY2x1ZGUgInV0aWxzL3JhbmdldHlwZXNfc2VsZnVuY3MuaCIKICNpbmNsdWRl ICJ1dGlscy9zZWxmdW5jcy5oIgogI2luY2x1ZGUgInV0aWxzL3R5cGNhY2hlLmgiCiAKQEAgLTM4 LDM3ICszOSw2IEBAIHN0YXRpYyBkb3VibGUgY2FsY19oaXN0X3NlbGVjdGl2aXR5KFR5cGVDYWNo ZUVudHJ5ICp0eXBjYWNoZSwKIAkJCQkJCQkJCVZhcmlhYmxlU3RhdERhdGEgKnZhcmRhdGEsCiAJ CQkJCQkJCQljb25zdCBNdWx0aXJhbmdlVHlwZSAqY29uc3R2YWwsCiAJCQkJCQkJCQlPaWQgb3Bl cmF0b3IpOwotc3RhdGljIGRvdWJsZSBjYWxjX2hpc3Rfc2VsZWN0aXZpdHlfc2NhbGFyKFR5cGVD YWNoZUVudHJ5ICp0eXBjYWNoZSwKLQkJCQkJCQkJCQkgICBjb25zdCBSYW5nZUJvdW5kICpjb25z dGJvdW5kLAotCQkJCQkJCQkJCSAgIGNvbnN0IFJhbmdlQm91bmQgKmhpc3QsCi0JCQkJCQkJCQkJ ICAgaW50IGhpc3RfbnZhbHVlcywgYm9vbCBlcXVhbCk7Ci1zdGF0aWMgaW50CXJib3VuZF9ic2Vh cmNoKFR5cGVDYWNoZUVudHJ5ICp0eXBjYWNoZSwgY29uc3QgUmFuZ2VCb3VuZCAqdmFsdWUsCi0J CQkJCQkgICBjb25zdCBSYW5nZUJvdW5kICpoaXN0LCBpbnQgaGlzdF9sZW5ndGgsIGJvb2wgZXF1 YWwpOwotc3RhdGljIGZsb2F0OCBnZXRfcG9zaXRpb24oVHlwZUNhY2hlRW50cnkgKnR5cGNhY2hl LCBjb25zdCBSYW5nZUJvdW5kICp2YWx1ZSwKLQkJCQkJCSAgIGNvbnN0IFJhbmdlQm91bmQgKmhp c3QxLCBjb25zdCBSYW5nZUJvdW5kICpoaXN0Mik7Ci1zdGF0aWMgZmxvYXQ4IGdldF9sZW5fcG9z aXRpb24oZG91YmxlIHZhbHVlLCBkb3VibGUgaGlzdDEsIGRvdWJsZSBoaXN0Mik7Ci1zdGF0aWMg ZmxvYXQ4IGdldF9kaXN0YW5jZShUeXBlQ2FjaGVFbnRyeSAqdHlwY2FjaGUsIGNvbnN0IFJhbmdl Qm91bmQgKmJvdW5kMSwKLQkJCQkJCSAgIGNvbnN0IFJhbmdlQm91bmQgKmJvdW5kMik7Ci1zdGF0 aWMgaW50CWxlbmd0aF9oaXN0X2JzZWFyY2goY29uc3QgRGF0dW0gKmxlbmd0aF9oaXN0X3ZhbHVl cywKLQkJCQkJCQkJaW50IGxlbmd0aF9oaXN0X252YWx1ZXMsIGRvdWJsZSB2YWx1ZSwKLQkJCQkJ CQkJYm9vbCBlcXVhbCk7Ci1zdGF0aWMgZG91YmxlIGNhbGNfbGVuZ3RoX2hpc3RfZnJhYyhjb25z dCBEYXR1bSAqbGVuZ3RoX2hpc3RfdmFsdWVzLAotCQkJCQkJCQkJaW50IGxlbmd0aF9oaXN0X252 YWx1ZXMsIGRvdWJsZSBsZW5ndGgxLAotCQkJCQkJCQkJZG91YmxlIGxlbmd0aDIsIGJvb2wgZXF1 YWwpOwotc3RhdGljIGRvdWJsZSBjYWxjX2hpc3Rfc2VsZWN0aXZpdHlfY29udGFpbmVkKFR5cGVD YWNoZUVudHJ5ICp0eXBjYWNoZSwKLQkJCQkJCQkJCQkJICBjb25zdCBSYW5nZUJvdW5kICpsb3dl ciwKLQkJCQkJCQkJCQkJICBSYW5nZUJvdW5kICp1cHBlciwKLQkJCQkJCQkJCQkJICBjb25zdCBS YW5nZUJvdW5kICpoaXN0X2xvd2VyLAotCQkJCQkJCQkJCQkgIGludCBoaXN0X252YWx1ZXMsCi0J CQkJCQkJCQkJCSAgY29uc3QgRGF0dW0gKmxlbmd0aF9oaXN0X3ZhbHVlcywKLQkJCQkJCQkJCQkJ ICBpbnQgbGVuZ3RoX2hpc3RfbnZhbHVlcyk7Ci1zdGF0aWMgZG91YmxlIGNhbGNfaGlzdF9zZWxl Y3Rpdml0eV9jb250YWlucyhUeXBlQ2FjaGVFbnRyeSAqdHlwY2FjaGUsCi0JCQkJCQkJCQkJCSBj b25zdCBSYW5nZUJvdW5kICpsb3dlciwKLQkJCQkJCQkJCQkJIGNvbnN0IFJhbmdlQm91bmQgKnVw cGVyLAotCQkJCQkJCQkJCQkgY29uc3QgUmFuZ2VCb3VuZCAqaGlzdF9sb3dlciwKLQkJCQkJCQkJ CQkJIGludCBoaXN0X252YWx1ZXMsCi0JCQkJCQkJCQkJCSBjb25zdCBEYXR1bSAqbGVuZ3RoX2hp c3RfdmFsdWVzLAotCQkJCQkJCQkJCQkgaW50IGxlbmd0aF9oaXN0X252YWx1ZXMpOwogCiAvKgog ICogUmV0dXJucyBhIGRlZmF1bHQgc2VsZWN0aXZpdHkgZXN0aW1hdGUgZm9yIGdpdmVuIG9wZXJh dG9yLCB3aGVuIHdlIGRvbid0CkBAIC02OTgsNzQ2ICs2NjgsNiBAQCBjYWxjX2hpc3Rfc2VsZWN0 aXZpdHkoVHlwZUNhY2hlRW50cnkgKnR5cGNhY2hlLCBWYXJpYWJsZVN0YXREYXRhICp2YXJkYXRh LAogCXJldHVybiBoaXN0X3NlbGVjOwogfQogCi0KLS8qCi0gKiBMb29rIHVwIHRoZSBmcmFjdGlv biBvZiB2YWx1ZXMgbGVzcyB0aGFuIChvciBlcXVhbCwgaWYgJ2VxdWFsJyBhcmd1bWVudAotICog aXMgdHJ1ZSkgYSBnaXZlbiBjb25zdCBpbiBhIGhpc3RvZ3JhbSBvZiByYW5nZSBib3VuZHMuCi0g Ki8KLXN0YXRpYyBkb3VibGUKLWNhbGNfaGlzdF9zZWxlY3Rpdml0eV9zY2FsYXIoVHlwZUNhY2hl RW50cnkgKnR5cGNhY2hlLCBjb25zdCBSYW5nZUJvdW5kICpjb25zdGJvdW5kLAotCQkJCQkJCSBj b25zdCBSYW5nZUJvdW5kICpoaXN0LCBpbnQgaGlzdF9udmFsdWVzLCBib29sIGVxdWFsKQotewot CVNlbGVjdGl2aXR5IHNlbGVjOwotCWludAkJCWluZGV4OwotCi0JLyoKLQkgKiBGaW5kIHRoZSBo aXN0b2dyYW0gYmluIHRoZSBnaXZlbiBjb25zdGFudCBmYWxscyBpbnRvLiBFc3RpbWF0ZQotCSAq IHNlbGVjdGl2aXR5IGFzIHRoZSBudW1iZXIgb2YgcHJlY2VkaW5nIHdob2xlIGJpbnMuCi0JICov Ci0JaW5kZXggPSByYm91bmRfYnNlYXJjaCh0eXBjYWNoZSwgY29uc3Rib3VuZCwgaGlzdCwgaGlz dF9udmFsdWVzLCBlcXVhbCk7Ci0Jc2VsZWMgPSAoU2VsZWN0aXZpdHkpIChNYXgoaW5kZXgsIDAp KSAvIChTZWxlY3Rpdml0eSkgKGhpc3RfbnZhbHVlcyAtIDEpOwotCi0JLyogQWRqdXN0IHVzaW5n IGxpbmVhciBpbnRlcnBvbGF0aW9uIHdpdGhpbiB0aGUgYmluICovCi0JaWYgKGluZGV4ID49IDAg JiYgaW5kZXggPCBoaXN0X252YWx1ZXMgLSAxKQotCQlzZWxlYyArPSBnZXRfcG9zaXRpb24odHlw Y2FjaGUsIGNvbnN0Ym91bmQsICZoaXN0W2luZGV4XSwKLQkJCQkJCQkgICZoaXN0W2luZGV4ICsg MV0pIC8gKFNlbGVjdGl2aXR5KSAoaGlzdF9udmFsdWVzIC0gMSk7Ci0KLQlyZXR1cm4gc2VsZWM7 Ci19Ci0KLS8qCi0gKiBCaW5hcnkgc2VhcmNoIG9uIGFuIGFycmF5IG9mIHJhbmdlIGJvdW5kcy4g UmV0dXJucyBncmVhdGVzdCBpbmRleCBvZiByYW5nZQotICogYm91bmQgaW4gYXJyYXkgd2hpY2gg aXMgbGVzcyhsZXNzIG9yIGVxdWFsKSB0aGFuIGdpdmVuIHJhbmdlIGJvdW5kLiBJZiBhbGwKLSAq IHJhbmdlIGJvdW5kcyBpbiBhcnJheSBhcmUgZ3JlYXRlciBvciBlcXVhbChncmVhdGVyKSB0aGFu IGdpdmVuIHJhbmdlIGJvdW5kLAotICogcmV0dXJuIC0xLiBXaGVuICJlcXVhbCIgZmxhZyBpcyBz ZXQgY29uZGl0aW9ucyBpbiBicmFja2V0cyBhcmUgdXNlZC4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9u IGlzIHVzZWQgaW4gc2NhbGFyIG9wZXJhdG9yIHNlbGVjdGl2aXR5IGVzdGltYXRpb24uIEFub3Ro ZXIKLSAqIGdvYWwgb2YgdGhpcyBmdW5jdGlvbiBpcyB0byBmaW5kIGEgaGlzdG9ncmFtIGJpbiB3 aGVyZSB0byBzdG9wCi0gKiBpbnRlcnBvbGF0aW9uIG9mIHBvcnRpb24gb2YgYm91bmRzIHdoaWNo IGFyZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gZ2l2ZW4gYm91bmQuCi0gKi8KLXN0YXRpYyBpbnQK LXJib3VuZF9ic2VhcmNoKFR5cGVDYWNoZUVudHJ5ICp0eXBjYWNoZSwgY29uc3QgUmFuZ2VCb3Vu ZCAqdmFsdWUsIGNvbnN0IFJhbmdlQm91bmQgKmhpc3QsCi0JCQkgICBpbnQgaGlzdF9sZW5ndGgs IGJvb2wgZXF1YWwpCi17Ci0JaW50CQkJbG93ZXIgPSAtMSwKLQkJCQl1cHBlciA9IGhpc3RfbGVu Z3RoIC0gMSwKLQkJCQljbXAsCi0JCQkJbWlkZGxlOwotCi0Jd2hpbGUgKGxvd2VyIDwgdXBwZXIp Ci0JewotCQltaWRkbGUgPSAobG93ZXIgKyB1cHBlciArIDEpIC8gMjsKLQkJY21wID0gcmFuZ2Vf Y21wX2JvdW5kcyh0eXBjYWNoZSwgJmhpc3RbbWlkZGxlXSwgdmFsdWUpOwotCi0JCWlmIChjbXAg PCAwIHx8IChlcXVhbCAmJiBjbXAgPT0gMCkpCi0JCQlsb3dlciA9IG1pZGRsZTsKLQkJZWxzZQot CQkJdXBwZXIgPSBtaWRkbGUgLSAxOwotCX0KLQlyZXR1cm4gbG93ZXI7Ci19Ci0KLQotLyoKLSAq IEJpbmFyeSBzZWFyY2ggb24gbGVuZ3RoIGhpc3RvZ3JhbS4gUmV0dXJucyBncmVhdGVzdCBpbmRl eCBvZiByYW5nZSBsZW5ndGggaW4KLSAqIGhpc3RvZ3JhbSB3aGljaCBpcyBsZXNzIHRoYW4gKGxl c3MgdGhhbiBvciBlcXVhbCkgdGhlIGdpdmVuIGxlbmd0aCB2YWx1ZS4gSWYKLSAqIGFsbCBsZW5n dGhzIGluIHRoZSBoaXN0b2dyYW0gYXJlIGdyZWF0ZXIgdGhhbiAoZ3JlYXRlciB0aGFuIG9yIGVx dWFsKSB0aGUKLSAqIGdpdmVuIGxlbmd0aCwgcmV0dXJucyAtMS4KLSAqLwotc3RhdGljIGludAot bGVuZ3RoX2hpc3RfYnNlYXJjaChjb25zdCBEYXR1bSAqbGVuZ3RoX2hpc3RfdmFsdWVzLCBpbnQg bGVuZ3RoX2hpc3RfbnZhbHVlcywKLQkJCQkJZG91YmxlIHZhbHVlLCBib29sIGVxdWFsKQotewot CWludAkJCWxvd2VyID0gLTEsCi0JCQkJdXBwZXIgPSBsZW5ndGhfaGlzdF9udmFsdWVzIC0gMSwK LQkJCQltaWRkbGU7Ci0KLQl3aGlsZSAobG93ZXIgPCB1cHBlcikKLQl7Ci0JCWRvdWJsZQkJbWlk ZGxldmFsOwotCi0JCW1pZGRsZSA9IChsb3dlciArIHVwcGVyICsgMSkgLyAyOwotCi0JCW1pZGRs ZXZhbCA9IERhdHVtR2V0RmxvYXQ4KGxlbmd0aF9oaXN0X3ZhbHVlc1ttaWRkbGVdKTsKLQkJaWYg KG1pZGRsZXZhbCA8IHZhbHVlIHx8IChlcXVhbCAmJiBtaWRkbGV2YWwgPD0gdmFsdWUpKQotCQkJ bG93ZXIgPSBtaWRkbGU7Ci0JCWVsc2UKLQkJCXVwcGVyID0gbWlkZGxlIC0gMTsKLQl9Ci0JcmV0 dXJuIGxvd2VyOwotfQotCi0vKgotICogR2V0IHJlbGF0aXZlIHBvc2l0aW9uIG9mIHZhbHVlIGlu IGhpc3RvZ3JhbSBiaW4gaW4gWzAsMV0gcmFuZ2UuCi0gKi8KLXN0YXRpYyBmbG9hdDgKLWdldF9w b3NpdGlvbihUeXBlQ2FjaGVFbnRyeSAqdHlwY2FjaGUsIGNvbnN0IFJhbmdlQm91bmQgKnZhbHVl LCBjb25zdCBSYW5nZUJvdW5kICpoaXN0MSwKLQkJCSBjb25zdCBSYW5nZUJvdW5kICpoaXN0MikK LXsKLQlib29sCQloYXNfc3ViZGlmZiA9IE9pZElzVmFsaWQodHlwY2FjaGUtPnJuZ19zdWJkaWZm X2ZpbmZvLmZuX29pZCk7Ci0JZmxvYXQ4CQlwb3NpdGlvbjsKLQotCWlmICghaGlzdDEtPmluZmlu aXRlICYmICFoaXN0Mi0+aW5maW5pdGUpCi0JewotCQlmbG9hdDgJCWJpbl93aWR0aDsKLQotCQkv KgotCQkgKiBCb3RoIGJvdW5kcyBhcmUgZmluaXRlLiBBc3N1bWluZyB0aGUgc3VidHlwZSdzIGNv bXBhcmlzb24gZnVuY3Rpb24KLQkJICogd29ya3Mgc2FuZWx5LCB0aGUgdmFsdWUgbXVzdCBiZSBm aW5pdGUsIHRvbywgYmVjYXVzZSBpdCBsaWVzCi0JCSAqIHNvbWV3aGVyZSBiZXR3ZWVuIHRoZSBi b3VuZHMuICBJZiBpdCBkb2Vzbid0LCBhcmJpdHJhcmlseSByZXR1cm4KLQkJICogMC41LgotCQkg Ki8KLQkJaWYgKHZhbHVlLT5pbmZpbml0ZSkKLQkJCXJldHVybiAwLjU7Ci0KLQkJLyogQ2FuJ3Qg aW50ZXJwb2xhdGUgd2l0aG91dCBzdWJkaWZmIGZ1bmN0aW9uICovCi0JCWlmICghaGFzX3N1YmRp ZmYpCi0JCQlyZXR1cm4gMC41OwotCi0JCS8qIENhbGN1bGF0ZSByZWxhdGl2ZSBwb3NpdGlvbiB1 c2luZyBzdWJkaWZmIGZ1bmN0aW9uLiAqLwotCQliaW5fd2lkdGggPSBEYXR1bUdldEZsb2F0OChG dW5jdGlvbkNhbGwyQ29sbCgmdHlwY2FjaGUtPnJuZ19zdWJkaWZmX2ZpbmZvLAotCQkJCQkJCQkJ CQkJCSB0eXBjYWNoZS0+cm5nX2NvbGxhdGlvbiwKLQkJCQkJCQkJCQkJCQkgaGlzdDItPnZhbCwK LQkJCQkJCQkJCQkJCQkgaGlzdDEtPnZhbCkpOwotCQlpZiAoaXNuYW4oYmluX3dpZHRoKSB8fCBi aW5fd2lkdGggPD0gMC4wKQotCQkJcmV0dXJuIDAuNTsJCQkvKiBwdW50IGZvciBOYU4gb3IgemVy by13aWR0aCBiaW4gKi8KLQotCQlwb3NpdGlvbiA9IERhdHVtR2V0RmxvYXQ4KEZ1bmN0aW9uQ2Fs bDJDb2xsKCZ0eXBjYWNoZS0+cm5nX3N1YmRpZmZfZmluZm8sCi0JCQkJCQkJCQkJCQkJdHlwY2Fj aGUtPnJuZ19jb2xsYXRpb24sCi0JCQkJCQkJCQkJCQkJdmFsdWUtPnZhbCwKLQkJCQkJCQkJCQkJ CQloaXN0MS0+dmFsKSkKLQkJCS8gYmluX3dpZHRoOwotCi0JCWlmIChpc25hbihwb3NpdGlvbikp Ci0JCQlyZXR1cm4gMC41OwkJCS8qIHB1bnQgZm9yIE5hTiBmcm9tIHN1YmRpZmYsIEluZi9JbmYs IGV0YyAqLwotCi0JCS8qIFJlbGF0aXZlIHBvc2l0aW9uIG11c3QgYmUgaW4gWzAsMV0gcmFuZ2Ug Ki8KLQkJcG9zaXRpb24gPSBNYXgocG9zaXRpb24sIDAuMCk7Ci0JCXBvc2l0aW9uID0gTWluKHBv c2l0aW9uLCAxLjApOwotCQlyZXR1cm4gcG9zaXRpb247Ci0JfQotCWVsc2UgaWYgKGhpc3QxLT5p bmZpbml0ZSAmJiAhaGlzdDItPmluZmluaXRlKQotCXsKLQkJLyoKLQkJICogTG93ZXIgYmluIGJv dW5kYXJ5IGlzIC1pbmZpbml0ZSwgdXBwZXIgaXMgZmluaXRlLiBJZiB0aGUgdmFsdWUgaXMKLQkJ ICogLWluZmluaXRlLCByZXR1cm4gMC4wIHRvIGluZGljYXRlIGl0J3MgZXF1YWwgdG8gdGhlIGxv d2VyIGJvdW5kLgotCQkgKiBPdGhlcndpc2UgcmV0dXJuIDEuMCB0byBpbmRpY2F0ZSBpdCdzIGlu ZmluaXRlbHkgZmFyIGZyb20gdGhlIGxvd2VyCi0JCSAqIGJvdW5kLgotCQkgKi8KLQkJcmV0dXJu ICgodmFsdWUtPmluZmluaXRlICYmIHZhbHVlLT5sb3dlcikgPyAwLjAgOiAxLjApOwotCX0KLQll bHNlIGlmICghaGlzdDEtPmluZmluaXRlICYmIGhpc3QyLT5pbmZpbml0ZSkKLQl7Ci0JCS8qIHNh bWUgYXMgYWJvdmUsIGJ1dCBpbiByZXZlcnNlICovCi0JCXJldHVybiAoKHZhbHVlLT5pbmZpbml0 ZSAmJiAhdmFsdWUtPmxvd2VyKSA/IDEuMCA6IDAuMCk7Ci0JfQotCWVsc2UKLQl7Ci0JCS8qCi0J CSAqIElmIGJvdGggYmluIGJvdW5kYXJpZXMgYXJlIGluZmluaXRlLCB0aGV5IHNob3VsZCBiZSBl cXVhbCB0byBlYWNoCi0JCSAqIG90aGVyLCBhbmQgdGhlIHZhbHVlIHNob3VsZCBhbHNvIGJlIGlu ZmluaXRlIGFuZCBlcXVhbCB0byBib3RoCi0JCSAqIGJvdW5kcy4gKEJ1dCBkb24ndCBBc3NlcnQg dGhhdCwgdG8gYXZvaWQgY3Jhc2hpbmcgaWYgYSB1c2VyIGNyZWF0ZXMKLQkJICogYSBkYXRhdHlw ZSB3aXRoIGEgYnJva2VuIGNvbXBhcmlzb24gZnVuY3Rpb24pLgotCQkgKgotCQkgKiBBc3N1bWUg dGhlIHZhbHVlIHRvIGxpZSBpbiB0aGUgbWlkZGxlIG9mIHRoZSBpbmZpbml0ZSBib3VuZHMuCi0J CSAqLwotCQlyZXR1cm4gMC41OwotCX0KLX0KLQotCi0vKgotICogR2V0IHJlbGF0aXZlIHBvc2l0 aW9uIG9mIHZhbHVlIGluIGEgbGVuZ3RoIGhpc3RvZ3JhbSBiaW4gaW4gWzAsMV0gcmFuZ2UuCi0g Ki8KLXN0YXRpYyBkb3VibGUKLWdldF9sZW5fcG9zaXRpb24oZG91YmxlIHZhbHVlLCBkb3VibGUg aGlzdDEsIGRvdWJsZSBoaXN0MikKLXsKLQlpZiAoIWlzaW5mKGhpc3QxKSAmJiAhaXNpbmYoaGlz dDIpKQotCXsKLQkJLyoKLQkJICogQm90aCBib3VuZHMgYXJlIGZpbml0ZS4gVGhlIHZhbHVlIHNo b3VsZCBiZSBmaW5pdGUgdG9vLCBiZWNhdXNlIGl0Ci0JCSAqIGxpZXMgc29tZXdoZXJlIGJldHdl ZW4gdGhlIGJvdW5kcy4gSWYgaXQgZG9lc24ndCwganVzdCByZXR1cm4KLQkJICogc29tZXRoaW5n LgotCQkgKi8KLQkJaWYgKGlzaW5mKHZhbHVlKSkKLQkJCXJldHVybiAwLjU7Ci0KLQkJcmV0dXJu IDEuMCAtIChoaXN0MiAtIHZhbHVlKSAvIChoaXN0MiAtIGhpc3QxKTsKLQl9Ci0JZWxzZSBpZiAo aXNpbmYoaGlzdDEpICYmICFpc2luZihoaXN0MikpCi0JewotCQkvKgotCQkgKiBMb3dlciBiaW4g Ym91bmRhcnkgaXMgLWluZmluaXRlLCB1cHBlciBpcyBmaW5pdGUuIFJldHVybiAxLjAgdG8KLQkJ ICogaW5kaWNhdGUgdGhlIHZhbHVlIGlzIGluZmluaXRlbHkgZmFyIGZyb20gdGhlIGxvd2VyIGJv dW5kLgotCQkgKi8KLQkJcmV0dXJuIDEuMDsKLQl9Ci0JZWxzZSBpZiAoaXNpbmYoaGlzdDEpICYm IGlzaW5mKGhpc3QyKSkKLQl7Ci0JCS8qIHNhbWUgYXMgYWJvdmUsIGJ1dCBpbiByZXZlcnNlICov Ci0JCXJldHVybiAwLjA7Ci0JfQotCWVsc2UKLQl7Ci0JCS8qCi0JCSAqIElmIGJvdGggYmluIGJv dW5kYXJpZXMgYXJlIGluZmluaXRlLCB0aGV5IHNob3VsZCBiZSBlcXVhbCB0byBlYWNoCi0JCSAq IG90aGVyLCBhbmQgdGhlIHZhbHVlIHNob3VsZCBhbHNvIGJlIGluZmluaXRlIGFuZCBlcXVhbCB0 byBib3RoCi0JCSAqIGJvdW5kcy4gKEJ1dCBkb24ndCBBc3NlcnQgdGhhdCwgdG8gYXZvaWQgY3Jh c2hpbmcgdW5uZWNlc3NhcmlseSBpZgotCQkgKiB0aGUgY2FsbGVyIG1lc3NlcyB1cCkKLQkJICoK LQkJICogQXNzdW1lIHRoZSB2YWx1ZSB0byBsaWUgaW4gdGhlIG1pZGRsZSBvZiB0aGUgaW5maW5p dGUgYm91bmRzLgotCQkgKi8KLQkJcmV0dXJuIDAuNTsKLQl9Ci19Ci0KLS8qCi0gKiBNZWFzdXJl IGRpc3RhbmNlIGJldHdlZW4gdHdvIHJhbmdlIGJvdW5kcy4KLSAqLwotc3RhdGljIGZsb2F0OAot Z2V0X2Rpc3RhbmNlKFR5cGVDYWNoZUVudHJ5ICp0eXBjYWNoZSwgY29uc3QgUmFuZ2VCb3VuZCAq Ym91bmQxLCBjb25zdCBSYW5nZUJvdW5kICpib3VuZDIpCi17Ci0JYm9vbAkJaGFzX3N1YmRpZmYg PSBPaWRJc1ZhbGlkKHR5cGNhY2hlLT5ybmdfc3ViZGlmZl9maW5mby5mbl9vaWQpOwotCi0JaWYg KCFib3VuZDEtPmluZmluaXRlICYmICFib3VuZDItPmluZmluaXRlKQotCXsKLQkJLyoKLQkJICog TmVpdGhlciBib3VuZCBpcyBpbmZpbml0ZSwgdXNlIHN1YmRpZmYgZnVuY3Rpb24gb3IgcmV0dXJu IGRlZmF1bHQKLQkJICogdmFsdWUgb2YgMS4wIGlmIG5vIHN1YmRpZmYgaXMgYXZhaWxhYmxlLgot CQkgKi8KLQkJaWYgKGhhc19zdWJkaWZmKQotCQl7Ci0JCQlmbG9hdDgJCXJlczsKLQotCQkJcmVz ID0gRGF0dW1HZXRGbG9hdDgoRnVuY3Rpb25DYWxsMkNvbGwoJnR5cGNhY2hlLT5ybmdfc3ViZGlm Zl9maW5mbywKLQkJCQkJCQkJCQkJCSAgIHR5cGNhY2hlLT5ybmdfY29sbGF0aW9uLAotCQkJCQkJ CQkJCQkJICAgYm91bmQyLT52YWwsCi0JCQkJCQkJCQkJCQkgICBib3VuZDEtPnZhbCkpOwotCQkJ LyogUmVqZWN0IHBvc3NpYmxlIE5hTiByZXN1bHQsIGFsc28gbmVnYXRpdmUgcmVzdWx0ICovCi0J CQlpZiAoaXNuYW4ocmVzKSB8fCByZXMgPCAwLjApCi0JCQkJcmV0dXJuIDEuMDsKLQkJCWVsc2UK LQkJCQlyZXR1cm4gcmVzOwotCQl9Ci0JCWVsc2UKLQkJCXJldHVybiAxLjA7Ci0JfQotCWVsc2Ug aWYgKGJvdW5kMS0+aW5maW5pdGUgJiYgYm91bmQyLT5pbmZpbml0ZSkKLQl7Ci0JCS8qIEJvdGgg Ym91bmRzIGFyZSBpbmZpbml0ZSAqLwotCQlpZiAoYm91bmQxLT5sb3dlciA9PSBib3VuZDItPmxv d2VyKQotCQkJcmV0dXJuIDAuMDsKLQkJZWxzZQotCQkJcmV0dXJuIGdldF9mbG9hdDhfaW5maW5p dHkoKTsKLQl9Ci0JZWxzZQotCXsKLQkJLyogT25lIGJvdW5kIGlzIGluZmluaXRlLCB0aGUgb3Ro ZXIgaXMgbm90ICovCi0JCXJldHVybiBnZXRfZmxvYXQ4X2luZmluaXR5KCk7Ci0JfQotfQotCi0v KgotICogQ2FsY3VsYXRlIHRoZSBhdmVyYWdlIG9mIGZ1bmN0aW9uIFAoeCksIGluIHRoZSBpbnRl cnZhbCBbbGVuZ3RoMSwgbGVuZ3RoMl0sCi0gKiB3aGVyZSBQKHgpIGlzIHRoZSBmcmFjdGlvbiBv ZiB0dXBsZXMgd2l0aCBsZW5ndGggPCB4IChvciBsZW5ndGggPD0geCBpZgotICogJ2VxdWFsJyBp cyB0cnVlKS4KLSAqLwotc3RhdGljIGRvdWJsZQotY2FsY19sZW5ndGhfaGlzdF9mcmFjKGNvbnN0 IERhdHVtICpsZW5ndGhfaGlzdF92YWx1ZXMsIGludCBsZW5ndGhfaGlzdF9udmFsdWVzLAotCQkJ CQkgIGRvdWJsZSBsZW5ndGgxLCBkb3VibGUgbGVuZ3RoMiwgYm9vbCBlcXVhbCkKLXsKLQlkb3Vi bGUJCWZyYWM7Ci0JZG91YmxlCQlBLAotCQkJCUIsCi0JCQkJUEEsCi0JCQkJUEI7Ci0JZG91Ymxl CQlwb3M7Ci0JaW50CQkJaTsKLQlkb3VibGUJCWFyZWE7Ci0KLQlBc3NlcnQobGVuZ3RoMiA+PSBs ZW5ndGgxKTsKLQotCWlmIChsZW5ndGgyIDwgMC4wKQotCQlyZXR1cm4gMC4wOwkJCQkvKiBzaG91 bGRuJ3QgaGFwcGVuLCBidXQgZG9lc24ndCBodXJ0IHRvIGNoZWNrICovCi0KLQkvKiBBbGwgbGVu Z3RocyBpbiB0aGUgdGFibGUgYXJlIDw9IGluZmluaXRlLiAqLwotCWlmIChpc2luZihsZW5ndGgy KSAmJiBlcXVhbCkKLQkJcmV0dXJuIDEuMDsKLQotCS8qLS0tLS0tLS0tLQotCSAqIFRoZSBhdmVy YWdlIG9mIGEgZnVuY3Rpb24gYmV0d2VlbiBBIGFuZCBCIGNhbiBiZSBjYWxjdWxhdGVkIGJ5IHRo ZQotCSAqIGZvcm11bGE6Ci0JICoKLQkgKgkJCUIKLQkgKgkgIDEJCS8KLQkgKiAtLS0tLS0tCXwg UCh4KWR4Ci0JICoJQiAtIEEJLwotCSAqCQkJQQotCSAqCi0JICogVGhlIGdlb21ldHJpY2FsIGlu dGVycHJldGF0aW9uIG9mIHRoZSBpbnRlZ3JhbCBpcyB0aGUgYXJlYSB1bmRlciB0aGUKLQkgKiBn cmFwaCBvZiBQKHgpLiBQKHgpIGlzIGRlZmluZWQgYnkgdGhlIGxlbmd0aCBoaXN0b2dyYW0uIFdl IGNhbGN1bGF0ZQotCSAqIHRoZSBhcmVhIGluIGEgcGllY2V3aXNlIGZhc2hpb24sIGl0ZXJhdGlu ZyB0aHJvdWdoIHRoZSBsZW5ndGggaGlzdG9ncmFtCi0JICogYmlucy4gRWFjaCBiaW4gaXMgYSB0 cmFwZXpvaWQ6Ci0JICoKLQkgKgkJIFAoeDIpCi0JICoJCSAgL3wKLQkgKgkJIC8gfAotCSAqIFAo eDEpLyAgfAotCSAqCSAgIHwgICB8Ci0JICoJICAgfCAgIHwKLQkgKgktLS0rLS0tKy0tCi0JICoJ ICAgeDEgIHgyCi0JICoKLQkgKiB3aGVyZSB4MSBhbmQgeDIgYXJlIHRoZSBib3VuZGFyaWVzIG9m IHRoZSBjdXJyZW50IGhpc3RvZ3JhbSwgYW5kIFAoeDEpCi0JICogYW5kIFAoeDEpIGFyZSB0aGUg Y3VtdWxhdGl2ZSBmcmFjdGlvbiBvZiB0dXBsZXMgYXQgdGhlIGJvdW5kYXJpZXMuCi0JICoKLQkg KiBUaGUgYXJlYSBvZiBlYWNoIHRyYXBlem9pZCBpcyAxLzIgKiAoUCh4MikgKyBQKHgxKSkgKiAo eDIgLSB4MSkKLQkgKgotCSAqIFRoZSBmaXJzdCBiaW4gY29udGFpbnMgdGhlIGxvd2VyIGJvdW5k IHBhc3NlZCBieSB0aGUgY2FsbGVyLCBzbyB3ZQotCSAqIHVzZSBsaW5lYXIgaW50ZXJwb2xhdGlv biBiZXR3ZWVuIHRoZSBwcmV2aW91cyBhbmQgbmV4dCBoaXN0b2dyYW0gYmluCi0JICogYm91bmRh cnkgdG8gY2FsY3VsYXRlIFAoeDEpLiBMaWtld2lzZSBmb3IgdGhlIGxhc3QgYmluOiB3ZSB1c2Ug bGluZWFyCi0JICogaW50ZXJwb2xhdGlvbiB0byBjYWxjdWxhdGUgUCh4MikuIEZvciB0aGUgYmlu cyBpbiBiZXR3ZWVuLCB4MSBhbmQgeDIKLQkgKiBsaWUgb24gaGlzdG9ncmFtIGJpbiBib3VuZGFy aWVzLCBzbyBQKHgxKSBhbmQgUCh4MikgYXJlIHNpbXBseToKLQkgKiBQKHgxKSA9CSAgKGJpbiBp bmRleCkgLyAobnVtYmVyIG9mIGJpbnMpCi0JICogUCh4MikgPSAoYmluIGluZGV4ICsgMSAvIChu dW1iZXIgb2YgYmlucykKLQkgKi8KLQotCS8qIEZpcnN0IGJpbiwgdGhlIG9uZSB0aGF0IGNvbnRh aW5zIGxvd2VyIGJvdW5kICovCi0JaSA9IGxlbmd0aF9oaXN0X2JzZWFyY2gobGVuZ3RoX2hpc3Rf dmFsdWVzLCBsZW5ndGhfaGlzdF9udmFsdWVzLCBsZW5ndGgxLCBlcXVhbCk7Ci0JaWYgKGkgPj0g bGVuZ3RoX2hpc3RfbnZhbHVlcyAtIDEpCi0JCXJldHVybiAxLjA7Ci0KLQlpZiAoaSA8IDApCi0J ewotCQlpID0gMDsKLQkJcG9zID0gMC4wOwotCX0KLQllbHNlCi0JewotCQkvKiBpbnRlcnBvbGF0 ZSBsZW5ndGgxJ3MgcG9zaXRpb24gaW4gdGhlIGJpbiAqLwotCQlwb3MgPSBnZXRfbGVuX3Bvc2l0 aW9uKGxlbmd0aDEsCi0JCQkJCQkJICAgRGF0dW1HZXRGbG9hdDgobGVuZ3RoX2hpc3RfdmFsdWVz W2ldKSwKLQkJCQkJCQkgICBEYXR1bUdldEZsb2F0OChsZW5ndGhfaGlzdF92YWx1ZXNbaSArIDFd KSk7Ci0JfQotCVBCID0gKCgoZG91YmxlKSBpKSArIHBvcykgLyAoZG91YmxlKSAobGVuZ3RoX2hp c3RfbnZhbHVlcyAtIDEpOwotCUIgPSBsZW5ndGgxOwotCi0JLyoKLQkgKiBJbiB0aGUgZGVnZW5l cmF0ZSBjYXNlIHRoYXQgbGVuZ3RoMSA9PSBsZW5ndGgyLCBzaW1wbHkgcmV0dXJuCi0JICogUChs ZW5ndGgxKS4gVGhpcyBpcyBub3QgbWVyZWx5IGFuIG9wdGltaXphdGlvbjogaWYgbGVuZ3RoMSA9 PSBsZW5ndGgyLAotCSAqIHdlJ2QgZGl2aWRlIGJ5IHplcm8gbGF0ZXIgb24uCi0JICovCi0JaWYg KGxlbmd0aDIgPT0gbGVuZ3RoMSkKLQkJcmV0dXJuIFBCOwotCi0JLyoKLQkgKiBMb29wIHRocm91 Z2ggYWxsIHRoZSBiaW5zLCB1bnRpbCB3ZSBoaXQgdGhlIGxhc3QgYmluLCB0aGUgb25lIHRoYXQK LQkgKiBjb250YWlucyB0aGUgdXBwZXIgYm91bmQuIChpZiBsb3dlciBhbmQgdXBwZXIgYm91bmRz IGFyZSBpbiB0aGUgc2FtZQotCSAqIGJpbiwgdGhpcyBmYWxscyBvdXQgaW1tZWRpYXRlbHkpCi0J ICovCi0JYXJlYSA9IDAuMDsKLQlmb3IgKDsgaSA8IGxlbmd0aF9oaXN0X252YWx1ZXMgLSAxOyBp KyspCi0JewotCQlkb3VibGUJCWJpbl91cHBlciA9IERhdHVtR2V0RmxvYXQ4KGxlbmd0aF9oaXN0 X3ZhbHVlc1tpICsgMV0pOwotCi0JCS8qIGNoZWNrIGlmIHdlJ3ZlIHJlYWNoZWQgdGhlIGxhc3Qg YmluICovCi0JCWlmICghKGJpbl91cHBlciA8IGxlbmd0aDIgfHwgKGVxdWFsICYmIGJpbl91cHBl ciA8PSBsZW5ndGgyKSkpCi0JCQlicmVhazsKLQotCQkvKiB0aGUgdXBwZXIgYm91bmQgb2YgcHJl dmlvdXMgYmluIGlzIHRoZSBsb3dlciBib3VuZCBvZiB0aGlzIGJpbiAqLwotCQlBID0gQjsKLQkJ UEEgPSBQQjsKLQotCQlCID0gYmluX3VwcGVyOwotCQlQQiA9IChkb3VibGUpIGkgLyAoZG91Ymxl KSAobGVuZ3RoX2hpc3RfbnZhbHVlcyAtIDEpOwotCi0JCS8qCi0JCSAqIEFkZCB0aGUgYXJlYSBv ZiB0aGlzIHRyYXBlem9pZCB0byB0aGUgdG90YWwuIFRoZSBwb2ludCBvZiB0aGUKLQkJICogaWYt Y2hlY2sgaXMgdG8gYXZvaWQgTmFOLCBpbiB0aGUgY29ybmVyIGNhc2UgdGhhdCBQQSA9PSBQQiA9 PSAwLAotCQkgKiBhbmQgQiAtIEEgPT0gSW5mLiBUaGUgYXJlYSBvZiBhIHplcm8taGVpZ2h0IHRy YXBlem9pZCAoUEEgPT0gUEIgPT0KLQkJICogMCkgaXMgemVybywgcmVnYXJkbGVzcyBvZiB0aGUg d2lkdGggKEIgLSBBKS4KLQkJICovCi0JCWlmIChQQSA+IDAgfHwgUEIgPiAwKQotCQkJYXJlYSAr PSAwLjUgKiAoUEIgKyBQQSkgKiAoQiAtIEEpOwotCX0KLQotCS8qIExhc3QgYmluICovCi0JQSA9 IEI7Ci0JUEEgPSBQQjsKLQotCUIgPSBsZW5ndGgyOwkJCQkvKiBsYXN0IGJpbiBlbmRzIGF0IHRo ZSBxdWVyeSB1cHBlciBib3VuZCAqLwotCWlmIChpID49IGxlbmd0aF9oaXN0X252YWx1ZXMgLSAx KQotCQlwb3MgPSAwLjA7Ci0JZWxzZQotCXsKLQkJaWYgKERhdHVtR2V0RmxvYXQ4KGxlbmd0aF9o aXN0X3ZhbHVlc1tpXSkgPT0gRGF0dW1HZXRGbG9hdDgobGVuZ3RoX2hpc3RfdmFsdWVzW2kgKyAx XSkpCi0JCQlwb3MgPSAwLjA7Ci0JCWVsc2UKLQkJCXBvcyA9IGdldF9sZW5fcG9zaXRpb24obGVu Z3RoMiwKLQkJCQkJCQkJICAgRGF0dW1HZXRGbG9hdDgobGVuZ3RoX2hpc3RfdmFsdWVzW2ldKSwK LQkJCQkJCQkJICAgRGF0dW1HZXRGbG9hdDgobGVuZ3RoX2hpc3RfdmFsdWVzW2kgKyAxXSkpOwot CX0KLQlQQiA9ICgoKGRvdWJsZSkgaSkgKyBwb3MpIC8gKGRvdWJsZSkgKGxlbmd0aF9oaXN0X252 YWx1ZXMgLSAxKTsKLQotCWlmIChQQSA+IDAgfHwgUEIgPiAwKQotCQlhcmVhICs9IDAuNSAqIChQ QiArIFBBKSAqIChCIC0gQSk7Ci0KLQkvKgotCSAqIE9rLCB3ZSBoYXZlIGNhbGN1bGF0ZWQgdGhl IGFyZWEsIGllLiB0aGUgaW50ZWdyYWwuIERpdmlkZSBieSB3aWR0aCB0bwotCSAqIGdldCB0aGUg cmVxdWVzdGVkIGF2ZXJhZ2UuCi0JICoKLQkgKiBBdm9pZCBOYU4gYXJpc2luZyBmcm9tIGluZmlu aXRlIC8gaW5maW5pdGUuIFRoaXMgaGFwcGVucyBhdCBsZWFzdCBpZgotCSAqIGxlbmd0aDIgaXMg aW5maW5pdGUuIEl0J3Mgbm90IGNsZWFyIHdoYXQgdGhlIGNvcnJlY3QgdmFsdWUgd291bGQgYmUg aW4KLQkgKiB0aGF0IGNhc2UsIHNvIDAuNSBzZWVtcyBhcyBnb29kIGFzIGFueSB2YWx1ZS4KLQkg Ki8KLQlpZiAoaXNpbmYoYXJlYSkgJiYgaXNpbmYobGVuZ3RoMikpCi0JCWZyYWMgPSAwLjU7Ci0J ZWxzZQotCQlmcmFjID0gYXJlYSAvIChsZW5ndGgyIC0gbGVuZ3RoMSk7Ci0KLQlyZXR1cm4gZnJh YzsKLX0KLQotLyoKLSAqIENhbGN1bGF0ZSBzZWxlY3Rpdml0eSBvZiAidmFyIDxAIGNvbnN0IiBv cGVyYXRvciwgaWUuIGVzdGltYXRlIHRoZSBmcmFjdGlvbgotICogb2YgbXVsdGlyYW5nZXMgdGhh dCBmYWxsIHdpdGhpbiB0aGUgY29uc3RhbnQgbG93ZXIgYW5kIHVwcGVyIGJvdW5kcy4gVGhpcyB1 c2VzCi0gKiB0aGUgaGlzdG9ncmFtcyBvZiByYW5nZSBsb3dlciBib3VuZHMgYW5kIHJhbmdlIGxl bmd0aHMsIG9uIHRoZSBhc3N1bXB0aW9uCi0gKiB0aGF0IHRoZSByYW5nZSBsZW5ndGhzIGFyZSBp bmRlcGVuZGVudCBvZiB0aGUgbG93ZXIgYm91bmRzLgotICoKLSAqIFRoZSBjYWxsZXIgaGFzIGFs cmVhZHkgY2hlY2tlZCB0aGF0IGNvbnN0YW50IGxvd2VyIGFuZCB1cHBlciBib3VuZHMgYXJlCi0g KiBmaW5pdGUuCi0gKi8KLXN0YXRpYyBkb3VibGUKLWNhbGNfaGlzdF9zZWxlY3Rpdml0eV9jb250 YWluZWQoVHlwZUNhY2hlRW50cnkgKnR5cGNhY2hlLAotCQkJCQkJCQljb25zdCBSYW5nZUJvdW5k ICpsb3dlciwgUmFuZ2VCb3VuZCAqdXBwZXIsCi0JCQkJCQkJCWNvbnN0IFJhbmdlQm91bmQgKmhp c3RfbG93ZXIsIGludCBoaXN0X252YWx1ZXMsCi0JCQkJCQkJCWNvbnN0IERhdHVtICpsZW5ndGhf aGlzdF92YWx1ZXMsIGludCBsZW5ndGhfaGlzdF9udmFsdWVzKQotewotCWludAkJCWksCi0JCQkJ dXBwZXJfaW5kZXg7Ci0JZmxvYXQ4CQlwcmV2X2Rpc3Q7Ci0JZG91YmxlCQliaW5fd2lkdGg7Ci0J ZG91YmxlCQl1cHBlcl9iaW5fd2lkdGg7Ci0JZG91YmxlCQlzdW1fZnJhYzsKLQotCS8qCi0JICog QmVnaW4gYnkgZmluZGluZyB0aGUgYmluIGNvbnRhaW5pbmcgdGhlIHVwcGVyIGJvdW5kLCBpbiB0 aGUgbG93ZXIgYm91bmQKLQkgKiBoaXN0b2dyYW0uIEFueSByYW5nZSB3aXRoIGEgbG93ZXIgYm91 bmQgPiBjb25zdGFudCB1cHBlciBib3VuZCBjYW4ndAotCSAqIG1hdGNoLCBpZS4gdGhlcmUgYXJl IG5vIG1hdGNoZXMgaW4gYmlucyBncmVhdGVyIHRoYW4gdXBwZXJfaW5kZXguCi0JICovCi0JdXBw ZXItPmluY2x1c2l2ZSA9ICF1cHBlci0+aW5jbHVzaXZlOwotCXVwcGVyLT5sb3dlciA9IHRydWU7 Ci0JdXBwZXJfaW5kZXggPSByYm91bmRfYnNlYXJjaCh0eXBjYWNoZSwgdXBwZXIsIGhpc3RfbG93 ZXIsIGhpc3RfbnZhbHVlcywKLQkJCQkJCQkJIGZhbHNlKTsKLQotCS8qCi0JICogSWYgdGhlIHVw cGVyIGJvdW5kIHZhbHVlIGlzIGJlbG93IHRoZSBoaXN0b2dyYW0ncyBsb3dlciBsaW1pdCwgdGhl cmUKLQkgKiBhcmUgbm8gbWF0Y2hlcy4KLQkgKi8KLQlpZiAodXBwZXJfaW5kZXggPCAwKQotCQly ZXR1cm4gMC4wOwotCi0JLyoKLQkgKiBJZiB0aGUgdXBwZXIgYm91bmQgdmFsdWUgaXMgYXQgb3Ig YmV5b25kIHRoZSBoaXN0b2dyYW0ncyB1cHBlciBsaW1pdCwKLQkgKiBzdGFydCBvdXIgbG9vcCBh dCB0aGUgbGFzdCBhY3R1YWwgYmluLCBhcyB0aG91Z2ggdGhlIHVwcGVyIGJvdW5kIHdlcmUKLQkg KiB3aXRoaW4gdGhhdCBiaW47IGdldF9wb3NpdGlvbiB3aWxsIGNsYW1wIGl0cyByZXN1bHQgdG8g MS4wIGFueXdheS4KLQkgKiAoVGhpcyBjb3JyZXNwb25kcyB0byBhc3N1bWluZyB0aGF0IHRoZSBk YXRhIHBvcHVsYXRpb24gYWJvdmUgdGhlCi0JICogaGlzdG9ncmFtJ3MgdXBwZXIgbGltaXQgaXMg ZW1wdHksIGV4YWN0bHkgbGlrZSB3aGF0IHdlIGp1c3QgYXNzdW1lZCBmb3IKLQkgKiB0aGUgbG93 ZXIgbGltaXQuKQotCSAqLwotCXVwcGVyX2luZGV4ID0gTWluKHVwcGVyX2luZGV4LCBoaXN0X252 YWx1ZXMgLSAyKTsKLQotCS8qCi0JICogQ2FsY3VsYXRlIHVwcGVyX2Jpbl93aWR0aCwgaWUuIHRo ZSBmcmFjdGlvbiBvZiB0aGUgKHVwcGVyX2luZGV4LAotCSAqIHVwcGVyX2luZGV4ICsgMSkgYmlu IHdoaWNoIGlzIGdyZWF0ZXIgdGhhbiB1cHBlciBib3VuZCBvZiBxdWVyeSByYW5nZQotCSAqIHVz aW5nIGxpbmVhciBpbnRlcnBvbGF0aW9uIG9mIHN1YmRpZmYgZnVuY3Rpb24uCi0JICovCi0JdXBw ZXJfYmluX3dpZHRoID0gZ2V0X3Bvc2l0aW9uKHR5cGNhY2hlLCB1cHBlciwKLQkJCQkJCQkJICAg Jmhpc3RfbG93ZXJbdXBwZXJfaW5kZXhdLAotCQkJCQkJCQkgICAmaGlzdF9sb3dlclt1cHBlcl9p bmRleCArIDFdKTsKLQotCS8qCi0JICogSW4gdGhlIGxvb3AsIGRpc3QgYW5kIHByZXZfZGlzdCBh cmUgdGhlIGRpc3RhbmNlIG9mIHRoZSAiY3VycmVudCIgYmluJ3MKLQkgKiBsb3dlciBhbmQgdXBw ZXIgYm91bmRzIGZyb20gdGhlIGNvbnN0YW50IHVwcGVyIGJvdW5kLgotCSAqCi0JICogYmluX3dp ZHRoIHJlcHJlc2VudHMgdGhlIHdpZHRoIG9mIHRoZSBjdXJyZW50IGJpbi4gTm9ybWFsbHkgaXQg aXMgMS4wLAotCSAqIG1lYW5pbmcgYSBmdWxsIHdpZHRoIGJpbiwgYnV0IGNhbiBiZSBsZXNzIGlu IHRoZSBjb3JuZXIgY2FzZXM6IHN0YXJ0Ci0JICogYW5kIGVuZCBvZiB0aGUgbG9vcC4gV2Ugc3Rh cnQgd2l0aCBiaW5fd2lkdGggPSB1cHBlcl9iaW5fd2lkdGgsIGJlY2F1c2UKLQkgKiB3ZSBiZWdp biBhdCB0aGUgYmluIGNvbnRhaW5pbmcgdGhlIHVwcGVyIGJvdW5kLgotCSAqLwotCXByZXZfZGlz dCA9IDAuMDsKLQliaW5fd2lkdGggPSB1cHBlcl9iaW5fd2lkdGg7Ci0KLQlzdW1fZnJhYyA9IDAu MDsKLQlmb3IgKGkgPSB1cHBlcl9pbmRleDsgaSA+PSAwOyBpLS0pCi0JewotCQlkb3VibGUJCWRp c3Q7Ci0JCWRvdWJsZQkJbGVuZ3RoX2hpc3RfZnJhYzsKLQkJYm9vbAkJZmluYWxfYmluID0gZmFs c2U7Ci0KLQkJLyoKLQkJICogZGlzdCAtLSBkaXN0YW5jZSBmcm9tIHVwcGVyIGJvdW5kIG9mIHF1 ZXJ5IHJhbmdlIHRvIGxvd2VyIGJvdW5kIG9mCi0JCSAqIHRoZSBjdXJyZW50IGJpbiBpbiB0aGUg bG93ZXIgYm91bmQgaGlzdG9ncmFtLiBPciB0byB0aGUgbG93ZXIgYm91bmQKLQkJICogb2YgdGhl IGNvbnN0YW50IHJhbmdlLCBpZiB0aGlzIGlzIHRoZSBmaW5hbCBiaW4sIGNvbnRhaW5pbmcgdGhl Ci0JCSAqIGNvbnN0YW50IGxvd2VyIGJvdW5kLgotCQkgKi8KLQkJaWYgKHJhbmdlX2NtcF9ib3Vu ZHModHlwY2FjaGUsICZoaXN0X2xvd2VyW2ldLCBsb3dlcikgPCAwKQotCQl7Ci0JCQlkaXN0ID0g Z2V0X2Rpc3RhbmNlKHR5cGNhY2hlLCBsb3dlciwgdXBwZXIpOwotCi0JCQkvKgotCQkJICogU3Vi dHJhY3QgZnJvbSBiaW5fd2lkdGggdGhlIHBvcnRpb24gb2YgdGhpcyBiaW4gdGhhdCB3ZSB3YW50 IHRvCi0JCQkgKiBpZ25vcmUuCi0JCQkgKi8KLQkJCWJpbl93aWR0aCAtPSBnZXRfcG9zaXRpb24o dHlwY2FjaGUsIGxvd2VyLCAmaGlzdF9sb3dlcltpXSwKLQkJCQkJCQkJCSAgJmhpc3RfbG93ZXJb aSArIDFdKTsKLQkJCWlmIChiaW5fd2lkdGggPCAwLjApCi0JCQkJYmluX3dpZHRoID0gMC4wOwot CQkJZmluYWxfYmluID0gdHJ1ZTsKLQkJfQotCQllbHNlCi0JCQlkaXN0ID0gZ2V0X2Rpc3RhbmNl KHR5cGNhY2hlLCAmaGlzdF9sb3dlcltpXSwgdXBwZXIpOwotCi0JCS8qCi0JCSAqIEVzdGltYXRl IHRoZSBmcmFjdGlvbiBvZiB0dXBsZXMgaW4gdGhpcyBiaW4gdGhhdCBhcmUgbmFycm93IGVub3Vn aAotCQkgKiB0byBub3QgZXhjZWVkIHRoZSBkaXN0YW5jZSB0byB0aGUgdXBwZXIgYm91bmQgb2Yg dGhlIHF1ZXJ5IHJhbmdlLgotCQkgKi8KLQkJbGVuZ3RoX2hpc3RfZnJhYyA9IGNhbGNfbGVuZ3Ro X2hpc3RfZnJhYyhsZW5ndGhfaGlzdF92YWx1ZXMsCi0JCQkJCQkJCQkJCQkgbGVuZ3RoX2hpc3Rf bnZhbHVlcywKLQkJCQkJCQkJCQkJCSBwcmV2X2Rpc3QsIGRpc3QsIHRydWUpOwotCi0JCS8qCi0J CSAqIEFkZCB0aGUgZnJhY3Rpb24gb2YgdHVwbGVzIGluIHRoaXMgYmluLCB3aXRoIGEgc3VpdGFi bGUgbGVuZ3RoLCB0bwotCQkgKiB0aGUgdG90YWwuCi0JCSAqLwotCQlzdW1fZnJhYyArPSBsZW5n dGhfaGlzdF9mcmFjICogYmluX3dpZHRoIC8gKGRvdWJsZSkgKGhpc3RfbnZhbHVlcyAtIDEpOwot Ci0JCWlmIChmaW5hbF9iaW4pCi0JCQlicmVhazsKLQotCQliaW5fd2lkdGggPSAxLjA7Ci0JCXBy ZXZfZGlzdCA9IGRpc3Q7Ci0JfQotCi0JcmV0dXJuIHN1bV9mcmFjOwotfQotCi0vKgotICogQ2Fs Y3VsYXRlIHNlbGVjdGl2aXR5IG9mICJ2YXIgQD4gY29uc3QiIG9wZXJhdG9yLCBpZS4gZXN0aW1h dGUgdGhlIGZyYWN0aW9uCi0gKiBvZiBtdWx0aXJhbmdlcyB0aGF0IGNvbnRhaW4gdGhlIGNvbnN0 YW50IGxvd2VyIGFuZCB1cHBlciBib3VuZHMuIFRoaXMgdXNlcwotICogdGhlIGhpc3RvZ3JhbXMg b2YgcmFuZ2UgbG93ZXIgYm91bmRzIGFuZCByYW5nZSBsZW5ndGhzLCBvbiB0aGUgYXNzdW1wdGlv bgotICogdGhhdCB0aGUgcmFuZ2UgbGVuZ3RocyBhcmUgaW5kZXBlbmRlbnQgb2YgdGhlIGxvd2Vy IGJvdW5kcy4KLSAqLwotc3RhdGljIGRvdWJsZQotY2FsY19oaXN0X3NlbGVjdGl2aXR5X2NvbnRh aW5zKFR5cGVDYWNoZUVudHJ5ICp0eXBjYWNoZSwKLQkJCQkJCQkgICBjb25zdCBSYW5nZUJvdW5k ICpsb3dlciwgY29uc3QgUmFuZ2VCb3VuZCAqdXBwZXIsCi0JCQkJCQkJICAgY29uc3QgUmFuZ2VC b3VuZCAqaGlzdF9sb3dlciwgaW50IGhpc3RfbnZhbHVlcywKLQkJCQkJCQkgICBjb25zdCBEYXR1 bSAqbGVuZ3RoX2hpc3RfdmFsdWVzLCBpbnQgbGVuZ3RoX2hpc3RfbnZhbHVlcykKLXsKLQlpbnQJ CQlpLAotCQkJCWxvd2VyX2luZGV4OwotCWRvdWJsZQkJYmluX3dpZHRoLAotCQkJCWxvd2VyX2Jp bl93aWR0aDsKLQlkb3VibGUJCXN1bV9mcmFjOwotCWZsb2F0OAkJcHJldl9kaXN0OwotCi0JLyog RmluZCB0aGUgYmluIGNvbnRhaW5pbmcgdGhlIGxvd2VyIGJvdW5kIG9mIHF1ZXJ5IHJhbmdlLiAq LwotCWxvd2VyX2luZGV4ID0gcmJvdW5kX2JzZWFyY2godHlwY2FjaGUsIGxvd2VyLCBoaXN0X2xv d2VyLCBoaXN0X252YWx1ZXMsCi0JCQkJCQkJCSB0cnVlKTsKLQotCS8qCi0JICogSWYgdGhlIGxv d2VyIGJvdW5kIHZhbHVlIGlzIGJlbG93IHRoZSBoaXN0b2dyYW0ncyBsb3dlciBsaW1pdCwgdGhl cmUKLQkgKiBhcmUgbm8gbWF0Y2hlcy4KLQkgKi8KLQlpZiAobG93ZXJfaW5kZXggPCAwKQotCQly ZXR1cm4gMC4wOwotCi0JLyoKLQkgKiBJZiB0aGUgbG93ZXIgYm91bmQgdmFsdWUgaXMgYXQgb3Ig YmV5b25kIHRoZSBoaXN0b2dyYW0ncyB1cHBlciBsaW1pdCwKLQkgKiBzdGFydCBvdXIgbG9vcCBh dCB0aGUgbGFzdCBhY3R1YWwgYmluLCBhcyB0aG91Z2ggdGhlIHVwcGVyIGJvdW5kIHdlcmUKLQkg KiB3aXRoaW4gdGhhdCBiaW47IGdldF9wb3NpdGlvbiB3aWxsIGNsYW1wIGl0cyByZXN1bHQgdG8g MS4wIGFueXdheS4KLQkgKiAoVGhpcyBjb3JyZXNwb25kcyB0byBhc3N1bWluZyB0aGF0IHRoZSBk YXRhIHBvcHVsYXRpb24gYWJvdmUgdGhlCi0JICogaGlzdG9ncmFtJ3MgdXBwZXIgbGltaXQgaXMg ZW1wdHksIGV4YWN0bHkgbGlrZSB3aGF0IHdlIGp1c3QgYXNzdW1lZCBmb3IKLQkgKiB0aGUgbG93 ZXIgbGltaXQuKQotCSAqLwotCWxvd2VyX2luZGV4ID0gTWluKGxvd2VyX2luZGV4LCBoaXN0X252 YWx1ZXMgLSAyKTsKLQotCS8qCi0JICogQ2FsY3VsYXRlIGxvd2VyX2Jpbl93aWR0aCwgaWUuIHRo ZSBmcmFjdGlvbiBvZiB0aGUgb2YgKGxvd2VyX2luZGV4LAotCSAqIGxvd2VyX2luZGV4ICsgMSkg YmluIHdoaWNoIGlzIGdyZWF0ZXIgdGhhbiBsb3dlciBib3VuZCBvZiBxdWVyeSByYW5nZQotCSAq IHVzaW5nIGxpbmVhciBpbnRlcnBvbGF0aW9uIG9mIHN1YmRpZmYgZnVuY3Rpb24uCi0JICovCi0J bG93ZXJfYmluX3dpZHRoID0gZ2V0X3Bvc2l0aW9uKHR5cGNhY2hlLCBsb3dlciwgJmhpc3RfbG93 ZXJbbG93ZXJfaW5kZXhdLAotCQkJCQkJCQkgICAmaGlzdF9sb3dlcltsb3dlcl9pbmRleCArIDFd KTsKLQotCS8qCi0JICogTG9vcCB0aHJvdWdoIGFsbCB0aGUgbG93ZXIgYm91bmQgYmlucywgc21h bGxlciB0aGFuIHRoZSBxdWVyeSBsb3dlcgotCSAqIGJvdW5kLiBJbiB0aGUgbG9vcCwgZGlzdCBh bmQgcHJldl9kaXN0IGFyZSB0aGUgZGlzdGFuY2Ugb2YgdGhlCi0JICogImN1cnJlbnQiIGJpbidz IGxvd2VyIGFuZCB1cHBlciBib3VuZHMgZnJvbSB0aGUgY29uc3RhbnQgdXBwZXIgYm91bmQuCi0J ICogV2UgYmVnaW4gZnJvbSBxdWVyeSBsb3dlciBib3VuZCwgYW5kIHdhbGsgYmFja3dhcmRzLCBz byB0aGUgZmlyc3QgYmluJ3MKLQkgKiB1cHBlciBib3VuZCBpcyB0aGUgcXVlcnkgbG93ZXIgYm91 bmQsIGFuZCBpdHMgZGlzdGFuY2UgdG8gdGhlIHF1ZXJ5Ci0JICogdXBwZXIgYm91bmQgaXMgdGhl IGxlbmd0aCBvZiB0aGUgcXVlcnkgcmFuZ2UuCi0JICoKLQkgKiBiaW5fd2lkdGggcmVwcmVzZW50 cyB0aGUgd2lkdGggb2YgdGhlIGN1cnJlbnQgYmluLiBOb3JtYWxseSBpdCBpcyAxLjAsCi0JICog bWVhbmluZyBhIGZ1bGwgd2lkdGggYmluLCBleGNlcHQgZm9yIHRoZSBmaXJzdCBiaW4sIHdoaWNo IGlzIG9ubHkKLQkgKiBjb3VudGVkIHVwIHRvIHRoZSBjb25zdGFudCBsb3dlciBib3VuZC4KLQkg Ki8KLQlwcmV2X2Rpc3QgPSBnZXRfZGlzdGFuY2UodHlwY2FjaGUsIGxvd2VyLCB1cHBlcik7Ci0J c3VtX2ZyYWMgPSAwLjA7Ci0JYmluX3dpZHRoID0gbG93ZXJfYmluX3dpZHRoOwotCWZvciAoaSA9 IGxvd2VyX2luZGV4OyBpID49IDA7IGktLSkKLQl7Ci0JCWZsb2F0OAkJZGlzdDsKLQkJZG91Ymxl CQlsZW5ndGhfaGlzdF9mcmFjOwotCi0JCS8qCi0JCSAqIGRpc3QgLS0gZGlzdGFuY2UgZnJvbSB1 cHBlciBib3VuZCBvZiBxdWVyeSByYW5nZSB0byBjdXJyZW50IHZhbHVlCi0JCSAqIG9mIGxvd2Vy IGJvdW5kIGhpc3RvZ3JhbSBvciBsb3dlciBib3VuZCBvZiBxdWVyeSByYW5nZSAoaWYgd2UndmUK LQkJICogcmVhY2ggaXQpLgotCQkgKi8KLQkJZGlzdCA9IGdldF9kaXN0YW5jZSh0eXBjYWNoZSwg Jmhpc3RfbG93ZXJbaV0sIHVwcGVyKTsKLQotCQkvKgotCQkgKiBHZXQgYXZlcmFnZSBmcmFjdGlv biBvZiBsZW5ndGggaGlzdG9ncmFtIHdoaWNoIGNvdmVycyBpbnRlcnZhbHMKLQkJICogbG9uZ2Vy IHRoYW4gKG9yIGVxdWFsIHRvKSBkaXN0YW5jZSB0byB1cHBlciBib3VuZCBvZiBxdWVyeSByYW5n ZS4KLQkJICovCi0JCWxlbmd0aF9oaXN0X2ZyYWMgPQotCQkJMS4wIC0gY2FsY19sZW5ndGhfaGlz dF9mcmFjKGxlbmd0aF9oaXN0X3ZhbHVlcywKLQkJCQkJCQkJCQlsZW5ndGhfaGlzdF9udmFsdWVz LAotCQkJCQkJCQkJCXByZXZfZGlzdCwgZGlzdCwgZmFsc2UpOwotCi0JCXN1bV9mcmFjICs9IGxl bmd0aF9oaXN0X2ZyYWMgKiBiaW5fd2lkdGggLyAoZG91YmxlKSAoaGlzdF9udmFsdWVzIC0gMSk7 Ci0KLQkJYmluX3dpZHRoID0gMS4wOwotCQlwcmV2X2Rpc3QgPSBkaXN0OwotCX0KLQotCXJldHVy biBzdW1fZnJhYzsKLX0KLQotLyoKLSAqIEVzdGltYXRlIGpvaW4gc2VsZWN0aXZpdHkgUChYIDwg WSkgdXNpbmcgcmFuZ2Vib3VuZCBoaXN0b2dyYW1zLgotICoKLSAqIEJhc2VkIG9uOiBEaW9nbyBS ZXBhcywgWmhpY2hlbmcgTHVvLCBNYXhpbWUgU2Nob2VtYW5zLCBNYWhtb3VkIFNha3IsIDIwMjIK LSAqICJTZWxlY3Rpdml0eSBFc3RpbWF0aW9uIG9mIEluZXF1YWxpdHkgSm9pbnMgSW4gRGF0YWJh c2VzIgotICogaHR0cHM6Ly9kb2kub3JnLzEwLjQ4NTUwL2FyWGl2LjIyMDYuMDczOTYKLSAqCi0g KiBoaXN0MSBhbmQgaGlzdDIgYXJlIGFycmF5cyBvZiBSYW5nZUJvdW5kIGVudHJpZXMgZnJvbSB0 aGUgYm91bmRzIGhpc3RvZ3JhbXMKLSAqIG9mIHR3byByYW5nZS10eXBlZCBvciBtdWx0aXJhbmdl LXR5cGVkIGF0dHJpYnV0ZXMgWCBhbmQgWSwgcmVzcGVjdGl2ZWx5LgotICogRWFjaCBhcnJheSBo YXMgYXQgbGVhc3QgMiBlbnRyaWVzIChvbmUgaGlzdG9ncmFtIGJpbikuICBUaGUgZW50cmllcyBj YXJyeQotICogZnVsbCBib3VuZCBtZXRhZGF0YSAobG93ZXIvdXBwZXIgZmxhZywgaW5jbHVzaXZl L2V4Y2x1c2l2ZSksIGFuZCBhbGwKLSAqIGNvbXBhcmlzb25zIHVzZSByYW5nZV9jbXBfYm91bmRz KCkgc28gdGhhdCBib3VuZCBzZW1hbnRpY3MgYXJlIHByZXNlcnZlZC4KLSAqCi0gKiBUaGUgYWxn b3JpdGhtIG1vZGVscyBlYWNoIGF0dHJpYnV0ZSdzIGRpc3RyaWJ1dGlvbiBhcyBhIHBpZWNld2lz ZSBmdW5jdGlvbgotICogZGVyaXZlZCBmcm9tIGl0cyBoaXN0b2dyYW0sIHRoZW4gY29tcHV0ZXM6 Ci0gKiAgIFAoWCA8IFkpID0gMC41ICogc3VtKCAoRl9YKHByZXYpICsgRl9YKGN1cikpICogKEZf WShjdXIpIC0gRl9ZKHByZXYpKSApCi0gKiBieSBwYXJhbGxlbC1zY2FubmluZyBib3RoIGhpc3Rv Z3JhbXMuCi0gKgotICogVGhlIGluaXRpYWwgZmFzdC1mb3J3YXJkIGxvb3BzIHNraXAgaGlzdG9n cmFtIGVudHJpZXMgdGhhdCBmYWxsIGVudGlyZWx5Ci0gKiBiZWZvcmUgdGhlIG90aGVyIGhpc3Rv Z3JhbSdzIHJhbmdlLCBzbyB0aGUgbWFpbiBsb29wIG9ubHkgcHJvY2Vzc2VzIHRoZQotICogb3Zl cmxhcHBpbmcgcmVnaW9uLiAgQm91bmRzIGNoZWNrcyBhcmUgcmVxdWlyZWQgYmVjYXVzZSB0aGUg aGlzdG9ncmFtcyBtYXkKLSAqIGJlIGNvbXBsZXRlbHkgZGlzam9pbnQgKGUuZy4sIGFsbCBvZiBY IGlzIGJlbG93IGFsbCBvZiBZKS4KLSAqLwotc3RhdGljIGRvdWJsZQotY2FsY19oaXN0X2pvaW5f c2VsZWN0aXZpdHkoVHlwZUNhY2hlRW50cnkgKnR5cGNhY2hlLAotCQkJCQkJICAgY29uc3QgUmFu Z2VCb3VuZCAqaGlzdDEsIGludCBuaGlzdDEsCi0JCQkJCQkgICBjb25zdCBSYW5nZUJvdW5kICpo aXN0MiwgaW50IG5oaXN0MikKLXsKLQlpbnQJCQlpLAotCQkJCWo7Ci0JZG91YmxlCQlzZWxlY3Rp dml0eSA9IDAuMDsKLQlkb3VibGUJCXByZXZfc2VsMSA9IC0xLjA7CS8qIG5lZ2F0aXZlIHNlbnRp bmVsIHNraXBzIGZpcnN0IGl0ZXIgKi8KLQlkb3VibGUJCXByZXZfc2VsMiA9IDAuMDsKLQotCUFz c2VydChuaGlzdDEgPiAxKTsKLQlBc3NlcnQobmhpc3QyID4gMSk7Ci0KLQkvKgotCSAqIEZhc3Qt Zm9yd2FyZCBwYXN0IGhpc3QxIGVudHJpZXMgdGhhdCBhcmUgZW50aXJlbHkgYmVsb3cgaGlzdDJb MF0sIGFuZAotCSAqIHZpY2UgdmVyc2EuICBCb3VuZHMgY2hlY2tzIHByZXZlbnQgb3V0LW9mLWJv dW5kcyBhY2Nlc3Mgd2hlbiB0aGUKLQkgKiBoaXN0b2dyYW1zIGFyZSBmdWxseSBkaXNqb2ludC4K LQkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgbmhpc3QxICYmCi0JCSByYW5nZV9jbXBfYm91bmRzKHR5 cGNhY2hlLCAmaGlzdDFbaV0sICZoaXN0MlswXSkgPCAwOyBpKyspCi0JCTsKLQlmb3IgKGogPSAw OyBqIDwgbmhpc3QyICYmCi0JCSByYW5nZV9jbXBfYm91bmRzKHR5cGNhY2hlLCAmaGlzdDJbal0s ICZoaXN0MVswXSkgPCAwOyBqKyspCi0JCTsKLQotCS8qCi0JICogSGFuZGxlIGZ1bGx5LXNlcGFy YXRlZCBoaXN0b2dyYW1zLiAgV2hlbiBhbGwgYm91bmRzIGluIGhpc3QxIGFyZSBiZWxvdwotCSAq IGFsbCBib3VuZHMgaW4gaGlzdDIsIFAoWCA8IFkpIGlzIH4xLjAuICBXaGVuIGFsbCBvZiBoaXN0 MiBpcyBiZWxvdwotCSAqIGhpc3QxLCBQKFggPCBZKSBpcyB+MC4wLiAgV2UgcmV0dXJuIGltbWVk aWF0ZWx5IHJhdGhlciB0aGFuIGZhbGxpbmcKLQkgKiBpbnRvIHRoZSBvdmVybGFwIHdhbGsgd2l0 aCBpbnZhbGlkIGluZGljZXMuCi0JICovCi0JaWYgKGkgPj0gbmhpc3QxKQotCQlyZXR1cm4gMS4w OwotCWlmIChqID49IG5oaXN0MikKLQkJcmV0dXJuIDAuMDsKLQotCS8qIFdhbGsgdGhlIG92ZXJs YXBwaW5nIHJlZ2lvbiBvZiBib3RoIGhpc3RvZ3JhbXMgKi8KLQl3aGlsZSAoaSA8IG5oaXN0MSAm JiBqIDwgbmhpc3QyKQotCXsKLQkJZG91YmxlCQljdXJfc2VsMSwKLQkJCQkJY3VyX3NlbDI7Ci0J CVJhbmdlQm91bmQJY3VyX3N5bmM7Ci0JCWludAkJCWNtcDsKLQotCQljbXAgPSByYW5nZV9jbXBf Ym91bmRzKHR5cGNhY2hlLCAmaGlzdDFbaV0sICZoaXN0MltqXSk7Ci0JCWlmIChjbXAgPCAwKQot CQkJY3VyX3N5bmMgPSBoaXN0MVtpKytdOwotCQllbHNlIGlmIChjbXAgPiAwKQotCQkJY3VyX3N5 bmMgPSBoaXN0MltqKytdOwotCQllbHNlCi0JCXsKLQkJCS8qIEVxdWFsIGJvdW5kczogYWR2YW5j ZSBib3RoICovCi0JCQljdXJfc3luYyA9IGhpc3QxW2ldOwotCQkJaSsrOwotCQkJaisrOwotCQl9 Ci0JCWN1cl9zZWwxID0gY2FsY19oaXN0X3NlbGVjdGl2aXR5X3NjYWxhcih0eXBjYWNoZSwgJmN1 cl9zeW5jLAotCQkJCQkJCQkJCQkJaGlzdDEsIG5oaXN0MSwgZmFsc2UpOwotCQljdXJfc2VsMiA9 IGNhbGNfaGlzdF9zZWxlY3Rpdml0eV9zY2FsYXIodHlwY2FjaGUsICZjdXJfc3luYywKLQkJCQkJ CQkJCQkJCWhpc3QyLCBuaGlzdDIsIGZhbHNlKTsKLQotCQkvKiBTa2lwIHRoZSBmaXJzdCBpdGVy YXRpb24gKG5vIHByZXZpb3VzIHBvaW50IHlldCkgKi8KLQkJaWYgKHByZXZfc2VsMSA+PSAwKQot CQkJc2VsZWN0aXZpdHkgKz0gKHByZXZfc2VsMSArIGN1cl9zZWwxKSAqIChjdXJfc2VsMiAtIHBy ZXZfc2VsMik7Ci0KLQkJcHJldl9zZWwxID0gY3VyX3NlbDE7Ci0JCXByZXZfc2VsMiA9IGN1cl9z ZWwyOwotCX0KLQotCS8qIFAoWCA8IFkpID0gMC41ICogU3VtKC4uLikgKi8KLQlzZWxlY3Rpdml0 eSAvPSAyOwotCi0JLyogSW5jbHVkZSByZW1haW5kZXIgb2YgaGlzdDIgaWYgaGlzdDEgd2FzIGV4 aGF1c3RlZCBmaXJzdCAqLwotCWlmIChqIDwgbmhpc3QyKQotCQlzZWxlY3Rpdml0eSArPSAxIC0g cHJldl9zZWwyOwotCi0JcmV0dXJuIHNlbGVjdGl2aXR5OwotfQotCiAvKgogICogbXVsdGlyYW5n ZWpvaW5zZWwgLS0gam9pbiBzZWxlY3Rpdml0eSBmb3IgbXVsdGlyYW5nZSBvcGVyYXRvcnMKICAq CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcmFuZ2V0eXBlc19zZWxmdW5jcy5j IGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3JhbmdldHlwZXNfc2VsZnVuY3MuYwppbmRleCBjYzcw MmYyODYxMC4uNGY0YmFhN2RjMWEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9y YW5nZXR5cGVzX3NlbGZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3JhbmdldHlw ZXNfc2VsZnVuY3MuYwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgInV0aWxzL2ZtZ3Jwcm90 b3MuaCIKICNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKICNpbmNsdWRlICJ1dGlscy9yYW5n ZXR5cGVzLmgiCisjaW5jbHVkZSAidXRpbHMvcmFuZ2V0eXBlc19zZWxmdW5jcy5oIgogI2luY2x1 ZGUgInV0aWxzL3NlbGZ1bmNzLmgiCiAjaW5jbHVkZSAidXRpbHMvdHlwY2FjaGUuaCIKIApAQCAt MzUsMjkgKzM2LDYgQEAgc3RhdGljIGRvdWJsZSBkZWZhdWx0X3JhbmdlX3NlbGVjdGl2aXR5KE9p ZCBvcGVyYXRvcik7CiBzdGF0aWMgZG91YmxlIGNhbGNfaGlzdF9zZWxlY3Rpdml0eShUeXBlQ2Fj aGVFbnRyeSAqdHlwY2FjaGUsCiAJCQkJCQkJCQlWYXJpYWJsZVN0YXREYXRhICp2YXJkYXRhLCBj b25zdCBSYW5nZVR5cGUgKmNvbnN0dmFsLAogCQkJCQkJCQkJT2lkIG9wZXJhdG9yKTsKLXN0YXRp YyBkb3VibGUgY2FsY19oaXN0X3NlbGVjdGl2aXR5X3NjYWxhcihUeXBlQ2FjaGVFbnRyeSAqdHlw Y2FjaGUsCi0JCQkJCQkJCQkJICAgY29uc3QgUmFuZ2VCb3VuZCAqY29uc3Rib3VuZCwKLQkJCQkJ CQkJCQkgICBjb25zdCBSYW5nZUJvdW5kICpoaXN0LCBpbnQgaGlzdF9udmFsdWVzLAotCQkJCQkJ CQkJCSAgIGJvb2wgZXF1YWwpOwotc3RhdGljIGludAlyYm91bmRfYnNlYXJjaChUeXBlQ2FjaGVF bnRyeSAqdHlwY2FjaGUsIGNvbnN0IFJhbmdlQm91bmQgKnZhbHVlLAotCQkJCQkJICAgY29uc3Qg UmFuZ2VCb3VuZCAqaGlzdCwgaW50IGhpc3RfbGVuZ3RoLCBib29sIGVxdWFsKTsKLXN0YXRpYyBm bG9hdDggZ2V0X3Bvc2l0aW9uKFR5cGVDYWNoZUVudHJ5ICp0eXBjYWNoZSwgY29uc3QgUmFuZ2VC b3VuZCAqdmFsdWUsCi0JCQkJCQkgICBjb25zdCBSYW5nZUJvdW5kICpoaXN0MSwgY29uc3QgUmFu Z2VCb3VuZCAqaGlzdDIpOwotc3RhdGljIGZsb2F0OCBnZXRfbGVuX3Bvc2l0aW9uKGRvdWJsZSB2 YWx1ZSwgZG91YmxlIGhpc3QxLCBkb3VibGUgaGlzdDIpOwotc3RhdGljIGZsb2F0OCBnZXRfZGlz dGFuY2UoVHlwZUNhY2hlRW50cnkgKnR5cGNhY2hlLCBjb25zdCBSYW5nZUJvdW5kICpib3VuZDEs Ci0JCQkJCQkgICBjb25zdCBSYW5nZUJvdW5kICpib3VuZDIpOwotc3RhdGljIGludAlsZW5ndGhf aGlzdF9ic2VhcmNoKGNvbnN0IERhdHVtICpsZW5ndGhfaGlzdF92YWx1ZXMsCi0JCQkJCQkJCWlu dCBsZW5ndGhfaGlzdF9udmFsdWVzLCBkb3VibGUgdmFsdWUsIGJvb2wgZXF1YWwpOwotc3RhdGlj IGRvdWJsZSBjYWxjX2xlbmd0aF9oaXN0X2ZyYWMoY29uc3QgRGF0dW0gKmxlbmd0aF9oaXN0X3Zh bHVlcywKLQkJCQkJCQkJCWludCBsZW5ndGhfaGlzdF9udmFsdWVzLCBkb3VibGUgbGVuZ3RoMSwg ZG91YmxlIGxlbmd0aDIsIGJvb2wgZXF1YWwpOwotc3RhdGljIGRvdWJsZSBjYWxjX2hpc3Rfc2Vs ZWN0aXZpdHlfY29udGFpbmVkKFR5cGVDYWNoZUVudHJ5ICp0eXBjYWNoZSwKLQkJCQkJCQkJCQkJ ICBjb25zdCBSYW5nZUJvdW5kICpsb3dlciwgUmFuZ2VCb3VuZCAqdXBwZXIsCi0JCQkJCQkJCQkJ CSAgY29uc3QgUmFuZ2VCb3VuZCAqaGlzdF9sb3dlciwgaW50IGhpc3RfbnZhbHVlcywKLQkJCQkJ CQkJCQkJICBjb25zdCBEYXR1bSAqbGVuZ3RoX2hpc3RfdmFsdWVzLCBpbnQgbGVuZ3RoX2hpc3Rf bnZhbHVlcyk7Ci1zdGF0aWMgZG91YmxlIGNhbGNfaGlzdF9zZWxlY3Rpdml0eV9jb250YWlucyhU eXBlQ2FjaGVFbnRyeSAqdHlwY2FjaGUsCi0JCQkJCQkJCQkJCSBjb25zdCBSYW5nZUJvdW5kICps b3dlciwgY29uc3QgUmFuZ2VCb3VuZCAqdXBwZXIsCi0JCQkJCQkJCQkJCSBjb25zdCBSYW5nZUJv dW5kICpoaXN0X2xvd2VyLCBpbnQgaGlzdF9udmFsdWVzLAotCQkJCQkJCQkJCQkgY29uc3QgRGF0 dW0gKmxlbmd0aF9oaXN0X3ZhbHVlcywgaW50IGxlbmd0aF9oaXN0X252YWx1ZXMpOwogCiAvKgog ICogUmV0dXJucyBhIGRlZmF1bHQgc2VsZWN0aXZpdHkgZXN0aW1hdGUgZm9yIGdpdmVuIG9wZXJh dG9yLCB3aGVuIHdlIGRvbid0CkBAIC01OTIsNyArNTcwLDcgQEAgY2FsY19oaXN0X3NlbGVjdGl2 aXR5KFR5cGVDYWNoZUVudHJ5ICp0eXBjYWNoZSwgVmFyaWFibGVTdGF0RGF0YSAqdmFyZGF0YSwK ICAqIExvb2sgdXAgdGhlIGZyYWN0aW9uIG9mIHZhbHVlcyBsZXNzIHRoYW4gKG9yIGVxdWFsLCBp ZiAnZXF1YWwnIGFyZ3VtZW50CiAgKiBpcyB0cnVlKSBhIGdpdmVuIGNvbnN0IGluIGEgaGlzdG9n cmFtIG9mIHJhbmdlIGJvdW5kcy4KICAqLwotc3RhdGljIGRvdWJsZQorZG91YmxlCiBjYWxjX2hp c3Rfc2VsZWN0aXZpdHlfc2NhbGFyKFR5cGVDYWNoZUVudHJ5ICp0eXBjYWNoZSwgY29uc3QgUmFu Z2VCb3VuZCAqY29uc3Rib3VuZCwKIAkJCQkJCQkgY29uc3QgUmFuZ2VCb3VuZCAqaGlzdCwgaW50 IGhpc3RfbnZhbHVlcywgYm9vbCBlcXVhbCkKIHsKQEAgLTYyNCw3ICs2MDIsNyBAQCBjYWxjX2hp c3Rfc2VsZWN0aXZpdHlfc2NhbGFyKFR5cGVDYWNoZUVudHJ5ICp0eXBjYWNoZSwgY29uc3QgUmFu Z2VCb3VuZCAqY29uc3RibwogICogZ29hbCBvZiB0aGlzIGZ1bmN0aW9uIGlzIHRvIGZpbmQgYSBo aXN0b2dyYW0gYmluIHdoZXJlIHRvIHN0b3AKICAqIGludGVycG9sYXRpb24gb2YgcG9ydGlvbiBv ZiBib3VuZHMgd2hpY2ggYXJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byBnaXZlbiBib3VuZC4KICAq Lwotc3RhdGljIGludAoraW50CiByYm91bmRfYnNlYXJjaChUeXBlQ2FjaGVFbnRyeSAqdHlwY2Fj aGUsIGNvbnN0IFJhbmdlQm91bmQgKnZhbHVlLCBjb25zdCBSYW5nZUJvdW5kICpoaXN0LAogCQkJ ICAgaW50IGhpc3RfbGVuZ3RoLCBib29sIGVxdWFsKQogewpAQCAtNjUzLDcgKzYzMSw3IEBAIHJi b3VuZF9ic2VhcmNoKFR5cGVDYWNoZUVudHJ5ICp0eXBjYWNoZSwgY29uc3QgUmFuZ2VCb3VuZCAq dmFsdWUsIGNvbnN0IFJhbmdlQm91CiAgKiBhbGwgbGVuZ3RocyBpbiB0aGUgaGlzdG9ncmFtIGFy ZSBncmVhdGVyIHRoYW4gKGdyZWF0ZXIgdGhhbiBvciBlcXVhbCkgdGhlCiAgKiBnaXZlbiBsZW5n dGgsIHJldHVybnMgLTEuCiAgKi8KLXN0YXRpYyBpbnQKK2ludAogbGVuZ3RoX2hpc3RfYnNlYXJj aChjb25zdCBEYXR1bSAqbGVuZ3RoX2hpc3RfdmFsdWVzLCBpbnQgbGVuZ3RoX2hpc3RfbnZhbHVl cywKIAkJCQkJZG91YmxlIHZhbHVlLCBib29sIGVxdWFsKQogewpAQCAtNjc5LDcgKzY1Nyw3IEBA IGxlbmd0aF9oaXN0X2JzZWFyY2goY29uc3QgRGF0dW0gKmxlbmd0aF9oaXN0X3ZhbHVlcywgaW50 IGxlbmd0aF9oaXN0X252YWx1ZXMsCiAvKgogICogR2V0IHJlbGF0aXZlIHBvc2l0aW9uIG9mIHZh bHVlIGluIGhpc3RvZ3JhbSBiaW4gaW4gWzAsMV0gcmFuZ2UuCiAgKi8KLXN0YXRpYyBmbG9hdDgK K2Zsb2F0OAogZ2V0X3Bvc2l0aW9uKFR5cGVDYWNoZUVudHJ5ICp0eXBjYWNoZSwgY29uc3QgUmFu Z2VCb3VuZCAqdmFsdWUsIGNvbnN0IFJhbmdlQm91bmQgKmhpc3QxLAogCQkJIGNvbnN0IFJhbmdl Qm91bmQgKmhpc3QyKQogewpAQCAtNzU4LDcgKzczNiw3IEBAIGdldF9wb3NpdGlvbihUeXBlQ2Fj aGVFbnRyeSAqdHlwY2FjaGUsIGNvbnN0IFJhbmdlQm91bmQgKnZhbHVlLCBjb25zdCBSYW5nZUJv dW5kCiAvKgogICogR2V0IHJlbGF0aXZlIHBvc2l0aW9uIG9mIHZhbHVlIGluIGEgbGVuZ3RoIGhp c3RvZ3JhbSBiaW4gaW4gWzAsMV0gcmFuZ2UuCiAgKi8KLXN0YXRpYyBkb3VibGUKK2RvdWJsZQog Z2V0X2xlbl9wb3NpdGlvbihkb3VibGUgdmFsdWUsIGRvdWJsZSBoaXN0MSwgZG91YmxlIGhpc3Qy KQogewogCWlmICghaXNpbmYoaGlzdDEpICYmICFpc2luZihoaXN0MikpCkBAIC04MDMsNyArNzgx LDcgQEAgZ2V0X2xlbl9wb3NpdGlvbihkb3VibGUgdmFsdWUsIGRvdWJsZSBoaXN0MSwgZG91Ymxl IGhpc3QyKQogLyoKICAqIE1lYXN1cmUgZGlzdGFuY2UgYmV0d2VlbiB0d28gcmFuZ2UgYm91bmRz LgogICovCi1zdGF0aWMgZmxvYXQ4CitmbG9hdDgKIGdldF9kaXN0YW5jZShUeXBlQ2FjaGVFbnRy eSAqdHlwY2FjaGUsIGNvbnN0IFJhbmdlQm91bmQgKmJvdW5kMSwgY29uc3QgUmFuZ2VCb3VuZCAq Ym91bmQyKQogewogCWJvb2wJCWhhc19zdWJkaWZmID0gT2lkSXNWYWxpZCh0eXBjYWNoZS0+cm5n X3N1YmRpZmZfZmluZm8uZm5fb2lkKTsKQEAgLTg1MSw3ICs4MjksNyBAQCBnZXRfZGlzdGFuY2Uo VHlwZUNhY2hlRW50cnkgKnR5cGNhY2hlLCBjb25zdCBSYW5nZUJvdW5kICpib3VuZDEsIGNvbnN0 IFJhbmdlQm91bgogICogd2hlcmUgUCh4KSBpcyB0aGUgZnJhY3Rpb24gb2YgdHVwbGVzIHdpdGgg bGVuZ3RoIDwgeCAob3IgbGVuZ3RoIDw9IHggaWYKICAqICdlcXVhbCcgaXMgdHJ1ZSkuCiAgKi8K LXN0YXRpYyBkb3VibGUKK2RvdWJsZQogY2FsY19sZW5ndGhfaGlzdF9mcmFjKGNvbnN0IERhdHVt ICpsZW5ndGhfaGlzdF92YWx1ZXMsIGludCBsZW5ndGhfaGlzdF9udmFsdWVzLAogCQkJCQkgIGRv dWJsZSBsZW5ndGgxLCBkb3VibGUgbGVuZ3RoMiwgYm9vbCBlcXVhbCkKIHsKQEAgLTEwMTQsNyAr OTkyLDcgQEAgY2FsY19sZW5ndGhfaGlzdF9mcmFjKGNvbnN0IERhdHVtICpsZW5ndGhfaGlzdF92 YWx1ZXMsIGludCBsZW5ndGhfaGlzdF9udmFsdWVzLAogICogVGhlIGNhbGxlciBoYXMgYWxyZWFk eSBjaGVja2VkIHRoYXQgY29uc3RhbnQgbG93ZXIgYW5kIHVwcGVyIGJvdW5kcyBhcmUKICAqIGZp bml0ZS4KICAqLwotc3RhdGljIGRvdWJsZQorZG91YmxlCiBjYWxjX2hpc3Rfc2VsZWN0aXZpdHlf Y29udGFpbmVkKFR5cGVDYWNoZUVudHJ5ICp0eXBjYWNoZSwKIAkJCQkJCQkJY29uc3QgUmFuZ2VC b3VuZCAqbG93ZXIsIFJhbmdlQm91bmQgKnVwcGVyLAogCQkJCQkJCQljb25zdCBSYW5nZUJvdW5k ICpoaXN0X2xvd2VyLCBpbnQgaGlzdF9udmFsdWVzLApAQCAtMTEzNSw3ICsxMTEzLDcgQEAgY2Fs Y19oaXN0X3NlbGVjdGl2aXR5X2NvbnRhaW5lZChUeXBlQ2FjaGVFbnRyeSAqdHlwY2FjaGUsCiAg KiB0aGUgaGlzdG9ncmFtcyBvZiByYW5nZSBsb3dlciBib3VuZHMgYW5kIHJhbmdlIGxlbmd0aHMs IG9uIHRoZSBhc3N1bXB0aW9uCiAgKiB0aGF0IHRoZSByYW5nZSBsZW5ndGhzIGFyZSBpbmRlcGVu ZGVudCBvZiB0aGUgbG93ZXIgYm91bmRzLgogICovCi1zdGF0aWMgZG91YmxlCitkb3VibGUKIGNh bGNfaGlzdF9zZWxlY3Rpdml0eV9jb250YWlucyhUeXBlQ2FjaGVFbnRyeSAqdHlwY2FjaGUsCiAJ CQkJCQkJICAgY29uc3QgUmFuZ2VCb3VuZCAqbG93ZXIsIGNvbnN0IFJhbmdlQm91bmQgKnVwcGVy LAogCQkJCQkJCSAgIGNvbnN0IFJhbmdlQm91bmQgKmhpc3RfbG93ZXIsIGludCBoaXN0X252YWx1 ZXMsCkBAIC0xMjMwLDcgKzEyMDgsNyBAQCBjYWxjX2hpc3Rfc2VsZWN0aXZpdHlfY29udGFpbnMo VHlwZUNhY2hlRW50cnkgKnR5cGNhY2hlLAogICogaHR0cHM6Ly9kb2kub3JnLzEwLjQ4NTUwL2Fy WGl2LjIyMDYuMDczOTYKICAqCiAgKiBoaXN0MSBhbmQgaGlzdDIgYXJlIGFycmF5cyBvZiBSYW5n ZUJvdW5kIGVudHJpZXMgZnJvbSB0aGUgYm91bmRzIGhpc3RvZ3JhbXMKLSAqIG9mIHR3byByYW5n ZS10eXBlZCBhdHRyaWJ1dGVzIFggYW5kIFksIHJlc3BlY3RpdmVseS4gIEVhY2ggYXJyYXkgaGFz IGF0CisgKiBvZiB0d28gcmFuZ2UtIG9yIG11bHRpcmFuZ2UtdHlwZWQgYXR0cmlidXRlcyBYIGFu ZCBZLCByZXNwZWN0aXZlbHkuICBFYWNoIGFycmF5IGhhcyBhdAogICogbGVhc3QgMiBlbnRyaWVz IChvbmUgaGlzdG9ncmFtIGJpbikuICBUaGUgZW50cmllcyBjYXJyeSBmdWxsIGJvdW5kIG1ldGFk YXRhCiAgKiAobG93ZXIvdXBwZXIgZmxhZywgaW5jbHVzaXZlL2V4Y2x1c2l2ZSksIGFuZCBhbGwg Y29tcGFyaXNvbnMgdXNlCiAgKiByYW5nZV9jbXBfYm91bmRzKCkgc28gdGhhdCBib3VuZCBzZW1h bnRpY3MgYXJlIHByZXNlcnZlZC4KQEAgLTEyNDUsNyArMTIyMyw3IEBAIGNhbGNfaGlzdF9zZWxl Y3Rpdml0eV9jb250YWlucyhUeXBlQ2FjaGVFbnRyeSAqdHlwY2FjaGUsCiAgKiBvdmVybGFwcGlu ZyByZWdpb24uICBCb3VuZHMgY2hlY2tzIGFyZSByZXF1aXJlZCBiZWNhdXNlIHRoZSBoaXN0b2dy YW1zIG1heQogICogYmUgY29tcGxldGVseSBkaXNqb2ludCAoZS5nLiwgYWxsIG9mIFggaXMgYmVs b3cgYWxsIG9mIFkpLgogICovCi1zdGF0aWMgZG91YmxlCitkb3VibGUKIGNhbGNfaGlzdF9qb2lu X3NlbGVjdGl2aXR5KFR5cGVDYWNoZUVudHJ5ICp0eXBjYWNoZSwKIAkJCQkJCSAgIGNvbnN0IFJh bmdlQm91bmQgKmhpc3QxLCBpbnQgbmhpc3QxLAogCQkJCQkJICAgY29uc3QgUmFuZ2VCb3VuZCAq aGlzdDIsIGludCBuaGlzdDIpCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9yYW5nZXR5 cGVzX3NlbGZ1bmNzLmggYi9zcmMvaW5jbHVkZS91dGlscy9yYW5nZXR5cGVzX3NlbGZ1bmNzLmgK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmJlNmJkYTlhYjExCi0tLSAv ZGV2L251bGwKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvcmFuZ2V0eXBlc19zZWxmdW5jcy5oCkBA IC0wLDAgKzEsNTQgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHJhbmdldHlwZXNfc2Vs ZnVuY3MuaAorICoJICBTaGFyZWQgaGVscGVyIGZ1bmN0aW9ucyBmb3IgcmFuZ2UgYW5kIG11bHRp cmFuZ2Ugc2VsZWN0aXZpdHkgZXN0aW1hdGlvbi4KKyAqCisgKiBUaGVzZSBmdW5jdGlvbnMgYXJl IGRlZmluZWQgaW4gcmFuZ2V0eXBlc19zZWxmdW5jcy5jIGFuZCB1c2VkIGJ5IGJvdGgKKyAqIHJh bmdldHlwZXNfc2VsZnVuY3MuYyBhbmQgbXVsdGlyYW5nZXR5cGVzX3NlbGZ1bmNzLmMuCisgKgor ICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjYsIFBvc3RncmVTUUwgR2xvYmFsIERl dmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMg b2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqIHNyYy9pbmNsdWRlL3V0aWxz L3JhbmdldHlwZXNfc2VsZnVuY3MuaAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZu ZGVmIFJBTkdFVFlQRVNfU0VMRlVOQ1NfSAorI2RlZmluZSBSQU5HRVRZUEVTX1NFTEZVTkNTX0gK KworI2luY2x1ZGUgInV0aWxzL3JhbmdldHlwZXMuaCIKKworZXh0ZXJuIGRvdWJsZSBjYWxjX2hp c3Rfc2VsZWN0aXZpdHlfc2NhbGFyKFR5cGVDYWNoZUVudHJ5ICp0eXBjYWNoZSwKKwkJCQkJCQkJ CQkgICBjb25zdCBSYW5nZUJvdW5kICpjb25zdGJvdW5kLAorCQkJCQkJCQkJCSAgIGNvbnN0IFJh bmdlQm91bmQgKmhpc3QsIGludCBoaXN0X252YWx1ZXMsCisJCQkJCQkJCQkJICAgYm9vbCBlcXVh bCk7CitleHRlcm4gaW50CXJib3VuZF9ic2VhcmNoKFR5cGVDYWNoZUVudHJ5ICp0eXBjYWNoZSwK KwkJCQkJCSAgIGNvbnN0IFJhbmdlQm91bmQgKnZhbHVlLCBjb25zdCBSYW5nZUJvdW5kICpoaXN0 LAorCQkJCQkJICAgaW50IGhpc3RfbGVuZ3RoLCBib29sIGVxdWFsKTsKK2V4dGVybiBpbnQJbGVu Z3RoX2hpc3RfYnNlYXJjaChjb25zdCBEYXR1bSAqbGVuZ3RoX2hpc3RfdmFsdWVzLAorCQkJCQkJ CQlpbnQgbGVuZ3RoX2hpc3RfbnZhbHVlcywKKwkJCQkJCQkJZG91YmxlIHZhbHVlLCBib29sIGVx dWFsKTsKK2V4dGVybiBmbG9hdDggZ2V0X3Bvc2l0aW9uKFR5cGVDYWNoZUVudHJ5ICp0eXBjYWNo ZSwKKwkJCQkJCSAgIGNvbnN0IFJhbmdlQm91bmQgKnZhbHVlLAorCQkJCQkJICAgY29uc3QgUmFu Z2VCb3VuZCAqaGlzdDEsIGNvbnN0IFJhbmdlQm91bmQgKmhpc3QyKTsKK2V4dGVybiBkb3VibGUg Z2V0X2xlbl9wb3NpdGlvbihkb3VibGUgdmFsdWUsIGRvdWJsZSBoaXN0MSwgZG91YmxlIGhpc3Qy KTsKK2V4dGVybiBmbG9hdDggZ2V0X2Rpc3RhbmNlKFR5cGVDYWNoZUVudHJ5ICp0eXBjYWNoZSwK KwkJCQkJCSAgIGNvbnN0IFJhbmdlQm91bmQgKmJvdW5kMSwgY29uc3QgUmFuZ2VCb3VuZCAqYm91 bmQyKTsKK2V4dGVybiBkb3VibGUgY2FsY19sZW5ndGhfaGlzdF9mcmFjKGNvbnN0IERhdHVtICps ZW5ndGhfaGlzdF92YWx1ZXMsCisJCQkJCQkJCQlpbnQgbGVuZ3RoX2hpc3RfbnZhbHVlcywKKwkJ CQkJCQkJCWRvdWJsZSBsZW5ndGgxLCBkb3VibGUgbGVuZ3RoMiwgYm9vbCBlcXVhbCk7CitleHRl cm4gZG91YmxlIGNhbGNfaGlzdF9zZWxlY3Rpdml0eV9jb250YWluZWQoVHlwZUNhY2hlRW50cnkg KnR5cGNhY2hlLAorCQkJCQkJCQkJCQkgIGNvbnN0IFJhbmdlQm91bmQgKmxvd2VyLCBSYW5nZUJv dW5kICp1cHBlciwKKwkJCQkJCQkJCQkJICBjb25zdCBSYW5nZUJvdW5kICpoaXN0X2xvd2VyLCBp bnQgaGlzdF9udmFsdWVzLAorCQkJCQkJCQkJCQkgIGNvbnN0IERhdHVtICpsZW5ndGhfaGlzdF92 YWx1ZXMsCisJCQkJCQkJCQkJCSAgaW50IGxlbmd0aF9oaXN0X252YWx1ZXMpOworZXh0ZXJuIGRv dWJsZSBjYWxjX2hpc3Rfc2VsZWN0aXZpdHlfY29udGFpbnMoVHlwZUNhY2hlRW50cnkgKnR5cGNh Y2hlLAorCQkJCQkJCQkJCQkgY29uc3QgUmFuZ2VCb3VuZCAqbG93ZXIsIGNvbnN0IFJhbmdlQm91 bmQgKnVwcGVyLAorCQkJCQkJCQkJCQkgY29uc3QgUmFuZ2VCb3VuZCAqaGlzdF9sb3dlciwgaW50 IGhpc3RfbnZhbHVlcywKKwkJCQkJCQkJCQkJIGNvbnN0IERhdHVtICpsZW5ndGhfaGlzdF92YWx1 ZXMsCisJCQkJCQkJCQkJCSBpbnQgbGVuZ3RoX2hpc3RfbnZhbHVlcyk7CitleHRlcm4gZG91Ymxl IGNhbGNfaGlzdF9qb2luX3NlbGVjdGl2aXR5KFR5cGVDYWNoZUVudHJ5ICp0eXBjYWNoZSwKKwkJ CQkJCQkJCQkgY29uc3QgUmFuZ2VCb3VuZCAqaGlzdDEsIGludCBuaGlzdDEsCisJCQkJCQkJCQkJ IGNvbnN0IFJhbmdlQm91bmQgKmhpc3QyLCBpbnQgbmhpc3QyKTsKKworI2VuZGlmCQkJCQkJCS8q IFJBTkdFVFlQRVNfU0VMRlVOQ1NfSCAqLwotLSAKMi41MC4xIChBcHBsZSBHaXQtMTU1KQoK --_006_AM0P190MB07243E890A7DFD6F24F70269F0232AM0P190MB0724EURP_--