Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nZasz-0000yn-AU for pgsql-hackers@arkaria.postgresql.org; Wed, 30 Mar 2022 16:09:30 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1nZas0-0003ki-7x for pgsql-hackers@arkaria.postgresql.org; Wed, 30 Mar 2022 16:08:28 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nZarz-0003kZ-72 for pgsql-hackers@lists.postgresql.org; Wed, 30 Mar 2022 16:08:27 +0000 Received: from mail-ve1eur02on0716.outbound.protection.outlook.com ([2a01:111:f400:fe06::716] helo=EUR02-VE1-obe.outbound.protection.outlook.com) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nZarv-0001J9-Mz for pgsql-hackers@lists.postgresql.org; Wed, 30 Mar 2022 16:08:25 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=iUrQIdh28hhu05a/Kv+iNyTUAJl3jsngcLmhrks12n1uTTzrzcN4r6477xv9HkF0iqnIlLtOQBvPeKwjFFSDJKqyOOj7cPue34w6PMjeUKn//w0m6bFv9M9Z5w8wAMl0OCXYnk7vhL8qqjJ/kIkwbuu+QHLJ0Jn4xmLg4fhrB3iohnfjvk1x6v8rjph31Of0iWoyFPX4k8z9XgffNxDWdYQ4B1W+33i+9bDc4wrP79rZtUG7GChGVJknl6GlxiOU2xJFKRtCnIDiORlm8No/s6VkHSLsvF53VZgx9goix201cGJ5S3mOdkJaynp73wHnM4ef02RJDI+GdkXUZxzbEQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=v0e9nunoAa62wRshX+ZsUxgxfi9THqjNNGJBlGFWmcU=; b=dxafwO0d0KW+hKxYaScUMKKBqF6ZLlktP377Ml3raA/hxw8d6//jgoYGo2nQeENb5OsjbMI8kaTKPAbliQi97UQw7RdeIuyp5ElY4Aj07hjHGvs+c9EC6o1Mg+gtxPx6TpJGAKLcIuzdmF7zsJJW/2VLcLqx5bYKIyZFI6OosM8GGeuVcGpnZYLYbkyp238i9DfP74ELIrrod024EAnuaYpVUg+4rWK8oxbuc2P2VT7kKlCioQJWvz51V76BYJpWn4PxIxnrt/CBdb8EgtfOaP36FPpshT8xhh42NnMMpIpz9v6rz6m5rIh8Xq8tx61WCsjMCF3M82KnaGJLblPn0Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=microsoft.com; dmarc=pass action=none header.from=microsoft.com; dkim=pass header.d=microsoft.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=v0e9nunoAa62wRshX+ZsUxgxfi9THqjNNGJBlGFWmcU=; b=Z9ziYSrXGedv0F2DpvWwhbPJ8UzQdLvPjM8HedeQZZNltKlz3syzYUz7yrbm4IwvhhsehTKoTPKmf749mIgKmmCcJSq6cFfY9EsuIw62pSaRCo3duPcC9TjPuHqYfKnq0LN5PTZOAq1JTjaUyZ6Us5hFmwaUANFdRKSIpS2Z6wg= Received: from HE1PR8303MB0073.EURPRD83.prod.outlook.com (2603:10a6:23:17::20) by VI1PR83MB0205.EURPRD83.prod.outlook.com (2603:10a6:821:7::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5144.8; Wed, 30 Mar 2022 16:08:17 +0000 Received: from HE1PR8303MB0073.EURPRD83.prod.outlook.com ([fe80::20ae:da80:7a50:8a0e]) by HE1PR8303MB0073.EURPRD83.prod.outlook.com ([fe80::20ae:da80:7a50:8a0e%12]) with mapi id 15.20.5144.008; Wed, 30 Mar 2022 16:08:16 +0000 From: Jelte Fennema To: Tom Lane , Robert Haas CC: Andres Freund , Jacob Champion , PostgreSQL Hackers Subject: Re: Add non-blocking version of PQcancel Thread-Topic: Add non-blocking version of PQcancel Thread-Index: AQHYRFBd0j702Y8BSUSr5f3BqIfB6A== Date: Wed, 30 Mar 2022 16:08:16 +0000 Message-ID: References: <20220113004411.3tdgiqdmmo4musb5@alap3.anarazel.de> <3150365.1648158113@sss.pgh.pa.us> <20220324224909.4tnubqv2owmfoyoc@alap3.anarazel.de> <3453535.1648234019@sss.pgh.pa.us> <3457746.1648236890@sss.pgh.pa.us> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: yes X-MS-TNEF-Correlator: msip_labels: MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_Enabled=True;MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_SiteId=72f988bf-86f1-41af-91ab-2d7cd011db47;MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_SetDate=2022-03-30T16:08:15.889Z;MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_Name=General;MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_ContentBits=0;MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_Method=Standard; authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=microsoft.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 25feeb59-8cbc-4f74-c96f-08da1267804a x-ms-traffictypediagnostic: VI1PR83MB0205:EE_ x-ms-exchange-atpmessageproperties: SA|SL x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: 81CfJjWnFoY4IonQL8PgKT0g3kMal8rZUXKDvEbt46vopCwz20Itp0NTlA2AtwvQdC9eO4tIRP0kf0u9P1KjaPYJ1dbfJXC8OGzvTpKEmLz6L+Hw7AeSHcPGFizuZ2toXJfU1btOTYuHzNdXhK3ZiktJarwZedaggw5/GSQx17hC+0sZXCiAcEvAQdNOypSvSTpFVbag5QvLHeMoTRal9jJ4ElHulFK+8ic9plC1nkJE6+9FM4345PeO2M5vUQ8/RJvhoVxbMPQIwFRKAJAtk6UkOW0RnG3ABWV/hHYUJuzHUgODITJTqaUC/m581+pl0IirrJr0JVAAvnmKLyP5xwotfDWdd09JvfXwNdslcjHXSGQbs+kz2t2Ell6f93M/ihjY3FtnF7Ja20Q2qdoTjs8J/nGNEbFSYWhVmPTewksP5apKB/TBypHizsaTRZ2vfc59JOwvDGGwo/Ari7eWKXSCtNCcPbhz7F+hPbzc+C4T0uYbTX+cgFLhJv+RZs30lxga0sruHmkKMEj2ixkPMJUNTSWYbR1Iic+oOjJe0aOkMVEpGKq+Euy6t9p/lWzinFhQexwdCyEN8FEUoaFjf5O90wibFaN82iu6z0qzX1GlVFYmuQERoGob0DK9XzLfONSsMR6pQDAVfBpxqIseyLLmLAC/DsblhlxUilJR9R3RNMuAx/rfjWkTa0PtNR07ixEzfCa/kjdam7qofojiHIzN+UKVq/Y1qi/HreefVbzw3t01s/p/tI9RQu8hY50T x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:HE1PR8303MB0073.EURPRD83.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230001)(4636009)(366004)(451199009)(26005)(186003)(83380400001)(2906002)(5660300002)(99936003)(9686003)(8936002)(6506007)(7696005)(52536014)(86362001)(110136005)(38070700005)(316002)(91956017)(4326008)(54906003)(122000001)(82950400001)(10290500003)(38100700002)(33656002)(82960400001)(66556008)(66476007)(66446008)(8676002)(64756008)(66946007)(508600001)(76116006)(55016003)(8990500004)(71200400001);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?m1MpUrBvoeIKc5XeH6kgmhqe/JAv76i2KZXTF4BWP41J1lcre+vxGPqYDZ?= =?iso-8859-1?Q?gxgX3M5laAiWOaUioGVCgPvuh4x29urhm445glWhDFoDFm6PJbvKM2OcgV?= =?iso-8859-1?Q?Zi3odnnpWeNigonTvh4gktgX82R8DijLJAtiyI5hdmUKbQ1XVkozvl/9+0?= =?iso-8859-1?Q?ZTmAXFKokJ+d4vmo/qCC5iu2tlIopIAmbpQRvlA4rypiOnvjuKyMjrFj5V?= =?iso-8859-1?Q?8cr+XoRBzryNUSnyhU+B8h4yLA6tJvNlxSgbcMFXqxv39q4x20uO6CDBES?= =?iso-8859-1?Q?FcO0Ukp41kfpK/Ch60bSIu8facRVWGCMU2LQCV0BbJCzPsCND9Jq1TE7OR?= =?iso-8859-1?Q?vguQGPjD6n0f3oH/GpIRKs2TlPvjnCqzaYvdwHAXZOVQqVqAzcyDyBA9og?= =?iso-8859-1?Q?YImy+zSl3jDtsGAUzEiom6DEUI3txkHt07OqeWGLgS9ylpWBNMuRT3x2C4?= =?iso-8859-1?Q?K0dVXQKI1LUqx86zJaui582VBKFFnATzMkLPIzdfmEiiy3w/pFlDJ+PQXz?= =?iso-8859-1?Q?Uloamsw94hSC4fBKr932xfiFicon7+VxUfbe/yyxNXgzlRfTYf24vdrpji?= =?iso-8859-1?Q?84mUF/ZUZU0KcdHAcTu6Bru576K5ijZ7hExZsPQvX4nhgoOO3wHcrYifO9?= =?iso-8859-1?Q?l7obA7va1yKNatutAcB/iNh6qyHcj3Fpywi3eoo8HtByGOefxymjrJiH2U?= =?iso-8859-1?Q?hGp/2u9Ld47xeBbryyXICl6wh77KMJsKZRclU5wb4zk60o/QppzMiZjUd/?= =?iso-8859-1?Q?ctpztk+dzwe6n8AfF8di+93rVp8f8jDFpp7A3eR2fdjZSYlPfIO7IjPtwN?= =?iso-8859-1?Q?KCHEnbKmSiUQyFZCjMTkCd+AipDKTEcAru42VSX4IMnsyocoLxleW8vSYP?= =?iso-8859-1?Q?8rJfeS4kHctgoa7+sYrqO23pWd0RLGJc8ziRm42bge3RQgisRX1NJyoMLA?= =?iso-8859-1?Q?souhMYBf59VJ3Hu4okjrUnLIyFtzjuSE6eyVghMVkMyOXAfal7oBgag26j?= =?iso-8859-1?Q?hn43kyoLNNGP4yVsjpbDno6Jmi0hIvOVJL7Rf6a7Wvplolc9DyUKt4fEZC?= =?iso-8859-1?Q?KJam/wvzNdd1hQ5QQWAMtdwEoA/756A3ZxQXg2yTjXhiGfNm6zunsyQGqU?= =?iso-8859-1?Q?PFqKIPZ8bFEZ8J/7FFDV08dz8o7j3XyoRIEUPcevyrFRpLf0Qvc/jVMcet?= =?iso-8859-1?Q?jmZ7bf+k1zB2aafk4b+vGC0xXwQDmiLqpVzM1T/gaAZvDK2h52IoBbKP2q?= =?iso-8859-1?Q?QrsgdeyU+Wo/I8SmHGOquyI6t/stY1kS3C12M5RepEXX/+L78NCndf3zcL?= =?iso-8859-1?Q?6l9OMsBbhlFrRpKUgzUU4e5pj6AzpuYDz4x5Y9+ukBYVtAJtN2aGXonIeA?= =?iso-8859-1?Q?d0jRJ+RPfLVTgh5UWBiTHz0SaKLxjM+8LeWKye/Wmvg+UT8FCHpPD5UtLH?= =?iso-8859-1?Q?LW7QuC+us9fhzjRt8S9rmS08PJZO940eZAbjdXs02L4KAD6OoM+66DGqzG?= =?iso-8859-1?Q?Waqqxgt7vfddbLR6/83H/B4wbYeA/pyWpJeLL3W5BmsLBoqizigKqAEdR5?= =?iso-8859-1?Q?Xyc0mA9eiqHyTyp+hdIxZmwjVSXCafpm6L0Hl++Fyahe90Vv0wYG2YTkiP?= =?iso-8859-1?Q?fy23vAMOyVl+cqhJCu1YDngTXNwS4v6sWC3uzpXgMbX4mNVyw+Me6SNTqP?= =?iso-8859-1?Q?CAs4XXIMzvCpb8KcX64B7EiVkVoM7tCRO7St2p4Ry/0zT9XO0JEOsVBpUK?= =?iso-8859-1?Q?Ti40fEMu2CjBTAsD8mJmGgcY39lH7hgk2rBmJJiHC1TrCg6Pq7yPyNJZet?= =?iso-8859-1?Q?OEwMMO8nXA=3D=3D?= Content-Type: multipart/mixed; boundary="_003_HE1PR8303MB00735DC38F45BD63A3A49347F71F9HE1PR8303MB0073_" MIME-Version: 1.0 X-OriginatorOrg: microsoft.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: HE1PR8303MB0073.EURPRD83.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 25feeb59-8cbc-4f74-c96f-08da1267804a X-MS-Exchange-CrossTenant-originalarrivaltime: 30 Mar 2022 16:08:16.7163 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 72f988bf-86f1-41af-91ab-2d7cd011db47 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: qdFLXXuQv9trZMhYQk7u814wegFZn+qRpqBbLjTNzcafGw0Hz43YSMivFNr2DW7YBWiA713utSQAdoYeV3FXfw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR83MB0205 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --_003_HE1PR8303MB00735DC38F45BD63A3A49347F71F9HE1PR8303MB0073_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable I attached a new version of this patch. Which does three main things:=0A= 1. Change the PQrequestCancel implementation to use the regular =0A= connection establishement code, to support all connection options =0A= including encryption.=0A= 2. Add PQrequestCancelStart which is a thread-safe and non-blocking =0A= version of this new PQrequestCancel implementation.=0A= 3. Add PQconnectComplete, which completes a connection started by =0A= PQrequestCancelStart. This is useful if you want a thread-safe, but =0A= blocking cancel (without having a need for signal safety).=0A= =0A= This change un-deprecates PQrequestCancel, since now there's actually an = =0A= advantage to using it over PQcancel. It also includes user facing documenta= tion=0A= for all these functions. =0A= =0A= As a API design change from the previous version, PQrequestCancelStart now= =0A= returns a regular PGconn for the cancel connection.=0A= =0A= @Tom Lane regarding this:=0A= > Even in the non-blocking case, callers should only deal with the original= PGconn.=0A= =0A= This would by definition result in non-threadsafe code (afaict). So I refra= ined from doing this.=0A= The blocking version doesn't expose a PGconn at all, but the non-blocking o= ne now returns a new PGconn.=0A= =0A= There's two more changes that I at least want to do before considering this= patch mergable:=0A= 1. Go over all the functions that can be called with a PGconn, but should n= ot be =0A= called with a cancellation PGconn and error out or exit early.=0A= 2. Copy over the SockAddr from the original connection and always connect t= o =0A= the same socket. I believe with the current code the cancellation could= end up=0A= at the wrong server if there are multiple hosts listed in the connectio= n string.=0A= =0A= And there's a third item that I would like to do as a bonus:=0A= 3. Actually use the non-blocking API for the postgres_fdw code to implement= a =0A= timeout. Which would allow this comment can be removed:=0A= /*=0A= * Issue cancel request. Unfortunately, there's no good way to limit the= =0A= * amount of time that we might block inside PQgetCancel().=0A= */=0A= =0A= So a next version of this patch can be expected somewhere later this week.= =0A= But any feedback on the current version would be appreciated. Because=0A= these 3 changes won't change the overall design much.=0A= =0A= Jelte= --_003_HE1PR8303MB00735DC38F45BD63A3A49347F71F9HE1PR8303MB0073_ Content-Type: application/octet-stream; name="0001-Add-documentation-for-libpq_pipeline-tests.patch" Content-Description: 0001-Add-documentation-for-libpq_pipeline-tests.patch Content-Disposition: attachment; filename="0001-Add-documentation-for-libpq_pipeline-tests.patch"; size=1518; creation-date="Wed, 30 Mar 2022 15:45:24 GMT"; modification-date="Wed, 30 Mar 2022 15:45:24 GMT" Content-Transfer-Encoding: base64 RnJvbSAyMmEwMjg5OWQ0N2Q0NmVkMDVhZGEyZTM4ZTNmOTgwNDk4MWI5NmViIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWx0ZSBGZW5uZW1hIDxqZWx0ZS5mZW5uZW1hQG1pY3Jvc29m dC5jb20+CkRhdGU6IFRodSwgMTMgSmFuIDIwMjIgMTU6MjY6MzUgKzAxMDAKU3ViamVjdDogW1BB VENIIDEvMl0gQWRkIGRvY3VtZW50YXRpb24gZm9yIGxpYnBxX3BpcGVsaW5lIHRlc3RzCgpUaGlz IGFkZHMgc29tZSBleHBsYW5hdGlvbiBvbiBob3cgdG8gcnVuIGFuZCBhZGQgbGlicHEgdGVzdHMu Ci0tLQogc3JjL3Rlc3QvbW9kdWxlcy9saWJwcV9waXBlbGluZS9SRUFETUUgfCAyMCArKysrKysr KysrKysrKysrKysrKwogMSBmaWxlIGNoYW5nZWQsIDIwIGluc2VydGlvbnMoKykKCmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9tb2R1bGVzL2xpYnBxX3BpcGVsaW5lL1JFQURNRSBiL3NyYy90ZXN0L21v ZHVsZXMvbGlicHFfcGlwZWxpbmUvUkVBRE1FCmluZGV4IGQ4MTc0ZGQ1NzkuLjZlZGE2YzU3NTYg MTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvbGlicHFfcGlwZWxpbmUvUkVBRE1FCisrKyBi L3NyYy90ZXN0L21vZHVsZXMvbGlicHFfcGlwZWxpbmUvUkVBRE1FCkBAIC0xICsxLDIxIEBACiBU ZXN0IHByb2dyYW1zIGFuZCBsaWJyYXJpZXMgZm9yIGxpYnBxCis9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09CisKK1lvdSBjYW4gbWFudWFsbHkgcnVuIGEgc3BlY2lmaWMgdGVz dCBieSBydW5uaW5nOgorCisgICAgLi9saWJwcV9waXBlbGluZSA8bmFtZSBvZiB0ZXN0PgorCitU byBhZGQgYSBuZXcgbGlicHEgdGVzdCB0byB0aGlzIG1vZHVsZSB5b3UgbmVlZCB0byBlZGl0IGxp YnBxX3BpcGVsaW5lLmMuIFRoZXJlCit5b3Ugc2hvdWxkIGFkZCB0aGUgbmFtZSBvZiB5b3VyIG5l dyB0ZXN0IHRvIHRoZSAicHJpbnRfdGVzdF9saXN0IiBmdW5jdGlvbi4KK1RoZW4gaW4gbWFpbiB5 b3Ugc2hvdWxkIGRvIHNvbWV0aGluZyB3aGVuIHRoaXMgdGVzdCBuYW1lIGlzIHBhc3NlZCB0byB0 aGUKK3Byb2dyYW0uCisKK0lmIHRoZSBvcmRlciBpbiB3aGljaCBwb3N0Z3JlcyBwcm90b2NvbCBt ZXNzYWdlcyBhcmUgc2VudCBpcyBkZXRlcm1pbmlzdGljIGZvcgoreW91ciB0ZXN0LiBUaGVuIHlv dSBjYW4gZ2VuZXJhdGUgYSB0cmFjZSBvZiB0aGVzZSBtZXNzYWdlcyB1c2luZyB0aGUgZm9sbG93 aW5nCitjb21tYW5kOgorCisgICAuL2xpYnBxX3BpcGVsaW5lIG15bmV3dGVzdCAtdCB0cmFjZXMv bXluZXd0ZXN0LnRyYWNlCisKK09uY2UgeW91J3ZlIGRvbmUgdGhhdCB5b3Ugc2hvdWxkIG1ha2Ug c3VyZSB0aGF0IHdoZW4gcnVubmluZyAibWFrZSBjaGVjayIKK3RoZSBnZW5lcmF0ZWQgdHJhY2Ug aXMgY29tcGFyZWQgdG8gdGhlIGV4cGVjdGVkIHRyYWNlLiBUaGlzIGlzIGRvbmUgYnkgYWRkaW5n Cit5b3VyIHRlc3QgbmFtZSB0byB0aGUgJGNtcHRyYWNlIGRlZmluaXRpb24gaW4gdGhlIHQvMDAx X2xpYnBxX3BpcGVsaW5lLnBsIGZpbGUKLS0gCjIuMTcuMQoK --_003_HE1PR8303MB00735DC38F45BD63A3A49347F71F9HE1PR8303MB0073_ Content-Type: application/octet-stream; name="0002-Add-non-blocking-version-of-PQcancel.patch" Content-Description: 0002-Add-non-blocking-version-of-PQcancel.patch Content-Disposition: attachment; filename="0002-Add-non-blocking-version-of-PQcancel.patch"; size=39978; creation-date="Wed, 30 Mar 2022 15:45:24 GMT"; modification-date="Wed, 30 Mar 2022 15:45:24 GMT" Content-Transfer-Encoding: base64 RnJvbSA5OGE2N2E2NWVlZTZiN2VlMTI3NWU0OGU1MDUzYmE4YWIzMDU1MDE0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWx0ZSBGZW5uZW1hIDxqZWx0ZS5mZW5uZW1hQG1pY3Jvc29m dC5jb20+CkRhdGU6IFdlZCwgMTIgSmFuIDIwMjIgMDk6NTI6MDUgKzAxMDAKU3ViamVjdDogW1BB VENIIDIvMl0gQWRkIG5vbi1ibG9ja2luZyB2ZXJzaW9uIG9mIFBRY2FuY2VsCgpUaGlzIHBhdGNo IGRvZXMgdHdvIHRoaW5nczoKMS4gQ2hhbmdlIFBRcmVxdWVzdENhbmNlbCB0byB1c2UgdGhlIHJl Z3VsYXIgY29ubmVjdGlvbiBlc3RhYmxpc2hlbWVudCwKICAgdG8gYWRkcmVzcyBhIGZldyBzZWN1 cml0eSBpc3N1ZXMuCjIuIEFkZCBQUXJlcXVlc3RDYW5jZWxTdGFydCB3aGljaCBpcyBhIHRocmVh ZCBzYWZlIGFuZCBub24gYmxvY2tpbmcKICAgdmVyc2lvbiBvZiB0aGlzIG5ldyBQUXJlcXVlc3RD YW5jZWwgaW1wbGVtZW50YXRpb24uCgpUaGUgZXhpc3RpbmcgUFFjYW5jZWwgQVBJIGlzIHVzaW5n IGJsb2NraW5nIElPLiBUaGlzIG1ha2VzIFBRY2FuY2VsCmltcG9zc2libGUgdG8gdXNlIGluIGFu IGV2ZW50IGxvb3AgYmFzZWQgY29kZWJhc2UsIHdpdGhvdXQgYmxvY2tpbmcgdGhlCmV2ZW50IGxv b3AgdW50aWwgdGhlIGNhbGwgcmV0dXJucy4KClRoaXMgcGF0Y2ggYWRkcyBhIG5ldyBjYW5jZWxs YXRpb24gQVBJIHRvIGxpYnBxIHdoaWNoIGlzIGNhbGxlZApQUXJlcXVlc3RDYW5jZWxTdGFydC4g VGhpcyBBUEkgY2FuIGJlIHVzZWQgdG8gc2VuZCBjYW5jZWxsYXRpb25zIGluIGEKbm9uLWJsb2Nr aW5nIGZhc2hpb24uCgpUaGlzIHBhdGNoIGFsc28gaW5jbHVkZXMgYSB0ZXN0IGZvciB0aGlzIGFs bCBvZiBsaWJwcSBjYW5jZWxsYXRpb24gQVBJcy4KVGhlIHRlc3QgY2FuIGJlIGVhc2lseSBydW4g bGlrZSB0aGlzOgoKICAgIGNkIHNyYy90ZXN0L21vZHVsZXMvbGlicHFfcGlwZWxpbmUKICAgIG1h a2UgJiYgLi9saWJwcV9waXBlbGluZSBjYW5jZWwKLS0tCiBjb250cmliL2RibGluay9kYmxpbmsu YyAgICAgICAgICAgICAgICAgICAgICAgfCAgMTIgKy0KIGNvbnRyaWIvcG9zdGdyZXNfZmR3L2Nv bm5lY3Rpb24uYyAgICAgICAgICAgICB8ICAxMSArLQogZG9jL3NyYy9zZ21sL2xpYnBxLnNnbWwg ICAgICAgICAgICAgICAgICAgICAgIHwgMjEyICsrKysrKysrKysrKystLS0tCiBzcmMvZmVfdXRp bHMvY29ubmVjdF91dGlscy5jICAgICAgICAgICAgICAgICAgfCAgMTAgKy0KIHNyYy9pbnRlcmZh Y2VzL2xpYnBxL2V4cG9ydHMudHh0ICAgICAgICAgICAgICB8ICAgMiArCiBzcmMvaW50ZXJmYWNl cy9saWJwcS9mZS1jb25uZWN0LmMgICAgICAgICAgICAgfCAyMjUgKysrKysrKysrKysrKysrLS0t CiBzcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1taXNjLmMgICAgICAgICAgICAgICAgfCAgMTUgKy0K IHNyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLXNlY3VyZS1vcGVuc3NsLmMgICAgICB8ICAgMiArLQog c3JjL2ludGVyZmFjZXMvbGlicHEvZmUtc2VjdXJlLmMgICAgICAgICAgICAgIHwgICA2ICsKIHNy Yy9pbnRlcmZhY2VzL2xpYnBxL2xpYnBxLWZlLmggICAgICAgICAgICAgICB8ICAxMyArLQogc3Jj L2ludGVyZmFjZXMvbGlicHEvbGlicHEtaW50LmggICAgICAgICAgICAgIHwgICAyICsKIHNyYy90 ZXN0L2lzb2xhdGlvbi9pc29sYXRpb250ZXN0ZXIuYyAgICAgICAgICB8ICAyOSArLS0KIC4uLi9t b2R1bGVzL2xpYnBxX3BpcGVsaW5lL2xpYnBxX3BpcGVsaW5lLmMgICB8IDIxNCArKysrKysrKysr KysrKysrLQogMTMgZmlsZXMgY2hhbmdlZCwgNjI3IGluc2VydGlvbnMoKyksIDEyNiBkZWxldGlv bnMoLSkKCmRpZmYgLS1naXQgYS9jb250cmliL2RibGluay9kYmxpbmsuYyBiL2NvbnRyaWIvZGJs aW5rL2RibGluay5jCmluZGV4IGEwNmQ0YmQxMmQuLjMwY2JiMjJhMjIgMTAwNjQ0Ci0tLSBhL2Nv bnRyaWIvZGJsaW5rL2RibGluay5jCisrKyBiL2NvbnRyaWIvZGJsaW5rL2RibGluay5jCkBAIC0x MzgwLDIyICsxMzgwLDE0IEBAIFBHX0ZVTkNUSU9OX0lORk9fVjEoZGJsaW5rX2NhbmNlbF9xdWVy eSk7CiBEYXR1bQogZGJsaW5rX2NhbmNlbF9xdWVyeShQR19GVU5DVElPTl9BUkdTKQogewotCWlu dAkJCXJlczsKIAlQR2Nvbm4JICAgKmNvbm47Ci0JUEdjYW5jZWwgICAqY2FuY2VsOwotCWNoYXIJ CWVycmJ1ZlsyNTZdOwogCiAJZGJsaW5rX2luaXQoKTsKIAljb25uID0gZGJsaW5rX2dldF9uYW1l ZF9jb25uKHRleHRfdG9fY3N0cmluZyhQR19HRVRBUkdfVEVYVF9QUCgwKSkpOwotCWNhbmNlbCA9 IFBRZ2V0Q2FuY2VsKGNvbm4pOwotCi0JcmVzID0gUFFjYW5jZWwoY2FuY2VsLCBlcnJidWYsIDI1 Nik7Ci0JUFFmcmVlQ2FuY2VsKGNhbmNlbCk7Ci0KLQlpZiAocmVzID09IDEpCisJaWYgKFBRcmVx dWVzdENhbmNlbChjb25uKSkKIAkJUEdfUkVUVVJOX1RFWFRfUChjc3RyaW5nX3RvX3RleHQoIk9L IikpOwogCWVsc2UKLQkJUEdfUkVUVVJOX1RFWFRfUChjc3RyaW5nX3RvX3RleHQoZXJyYnVmKSk7 CisJCVBHX1JFVFVSTl9URVhUX1AoY3N0cmluZ190b190ZXh0KFBRZXJyb3JNZXNzYWdlKGNvbm4p KSk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvY29udHJpYi9wb3N0Z3Jlc19mZHcvY29ubmVjdGlvbi5j IGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvY29ubmVjdGlvbi5jCmluZGV4IDEyOWNhNzkyMjEuLjJl MTgyNjQ1ZjcgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L2Nvbm5lY3Rpb24uYwor KysgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9jb25uZWN0aW9uLmMKQEAgLTEyNjMsOCArMTI2Myw2 IEBAIHBnZmR3X3Jlc2V0X3hhY3Rfc3RhdGUoQ29ubkNhY2hlRW50cnkgKmVudHJ5LCBib29sIHRv cGxldmVsKQogc3RhdGljIGJvb2wKIHBnZmR3X2NhbmNlbF9xdWVyeShQR2Nvbm4gKmNvbm4pCiB7 Ci0JUEdjYW5jZWwgICAqY2FuY2VsOwotCWNoYXIJCWVycmJ1ZlsyNTZdOwogCVBHcmVzdWx0ICAg KnJlc3VsdCA9IE5VTEw7CiAJVGltZXN0YW1wVHogZW5kdGltZTsKIAlib29sCQl0aW1lZF9vdXQ7 CkBAIC0xMjc5LDE5ICsxMjc3LDE0IEBAIHBnZmR3X2NhbmNlbF9xdWVyeShQR2Nvbm4gKmNvbm4p CiAJICogSXNzdWUgY2FuY2VsIHJlcXVlc3QuICBVbmZvcnR1bmF0ZWx5LCB0aGVyZSdzIG5vIGdv b2Qgd2F5IHRvIGxpbWl0IHRoZQogCSAqIGFtb3VudCBvZiB0aW1lIHRoYXQgd2UgbWlnaHQgYmxv Y2sgaW5zaWRlIFBRZ2V0Q2FuY2VsKCkuCiAJICovCi0JaWYgKChjYW5jZWwgPSBQUWdldENhbmNl bChjb25uKSkpCi0JewotCQlpZiAoIVBRY2FuY2VsKGNhbmNlbCwgZXJyYnVmLCBzaXplb2YoZXJy YnVmKSkpCisJCWlmICghUFFyZXF1ZXN0Q2FuY2VsKGNvbm4pKQogCQl7CiAJCQllcmVwb3J0KFdB Uk5JTkcsCiAJCQkJCShlcnJjb2RlKEVSUkNPREVfQ09OTkVDVElPTl9GQUlMVVJFKSwKIAkJCQkJ IGVycm1zZygiY291bGQgbm90IHNlbmQgY2FuY2VsIHJlcXVlc3Q6ICVzIiwKLQkJCQkJCQllcnJi dWYpKSk7Ci0JCQlQUWZyZWVDYW5jZWwoY2FuY2VsKTsKKwkJCQkJCQlwY2hvbXAoUFFlcnJvck1l c3NhZ2UoY29ubikpKSkpOwogCQkJcmV0dXJuIGZhbHNlOwogCQl9Ci0JCVBRZnJlZUNhbmNlbChj YW5jZWwpOwotCX0KIAogCS8qIEdldCBhbmQgZGlzY2FyZCB0aGUgcmVzdWx0IG9mIHRoZSBxdWVy eS4gKi8KIAlpZiAocGdmZHdfZ2V0X2NsZWFudXBfcmVzdWx0KGNvbm4sIGVuZHRpbWUsICZyZXN1 bHQsICZ0aW1lZF9vdXQpKQpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2xpYnBxLnNnbWwgYi9k b2Mvc3JjL3NnbWwvbGlicHEuc2dtbAppbmRleCAwYjJhODcyMGYwLi42YjA2ODNiOWIwIDEwMDY0 NAotLS0gYS9kb2Mvc3JjL3NnbWwvbGlicHEuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvbGlicHEu c2dtbApAQCAtMjY1LDcgKzI2NSw3IEBAIFBHY29ubiAqUFFzZXRkYihjaGFyICpwZ2hvc3QsCiAg ICAgPHZhcmxpc3RlbnRyeSBpZD0ibGlicHEtUFFjb25uZWN0U3RhcnRQYXJhbXMiPgogICAgICA8 dGVybT48ZnVuY3Rpb24+UFFjb25uZWN0U3RhcnRQYXJhbXM8L2Z1bmN0aW9uPjxpbmRleHRlcm0+ PHByaW1hcnk+UFFjb25uZWN0U3RhcnRQYXJhbXM8L3ByaW1hcnk+PC9pbmRleHRlcm0+PC90ZXJt PgogICAgICA8dGVybT48ZnVuY3Rpb24+UFFjb25uZWN0U3RhcnQ8L2Z1bmN0aW9uPjxpbmRleHRl cm0+PHByaW1hcnk+UFFjb25uZWN0U3RhcnQ8L3ByaW1hcnk+PC9pbmRleHRlcm0+PC90ZXJtPgot ICAgICA8dGVybT48ZnVuY3Rpb24+UFFjb25uZWN0UG9sbDwvZnVuY3Rpb24+PGluZGV4dGVybT48 cHJpbWFyeT5QUWNvbm5lY3RQb2xsPC9wcmltYXJ5PjwvaW5kZXh0ZXJtPjwvdGVybT4KKyAgICAg PHRlcm0gaWQ9ImxpYnBxLVBRY29ubmVjdFBvbGwiPjxmdW5jdGlvbj5QUWNvbm5lY3RQb2xsPC9m dW5jdGlvbj48aW5kZXh0ZXJtPjxwcmltYXJ5PlBRY29ubmVjdFBvbGw8L3ByaW1hcnk+PC9pbmRl eHRlcm0+PC90ZXJtPgogICAgICA8bGlzdGl0ZW0+CiAgICAgICA8cGFyYT4KICAgICAgICA8aW5k ZXh0ZXJtPjxwcmltYXJ5Pm5vbmJsb2NraW5nIGNvbm5lY3Rpb248L3ByaW1hcnk+PC9pbmRleHRl cm0+CkBAIC00OTksNiArNDk5LDMwIEBAIHN3aXRjaChQUXN0YXR1cyhjb25uKSkKICAgICAgPC9s aXN0aXRlbT4KICAgICA8L3Zhcmxpc3RlbnRyeT4KIAorICAgIDx2YXJsaXN0ZW50cnkgaWQ9Imxp YnBxLVBRY29ubmVjdENvbXBsZXRlIj4KKyAgICAgPHRlcm0+PGZ1bmN0aW9uPlBRY29ubmVjdENv bXBsZXRlPC9mdW5jdGlvbj48aW5kZXh0ZXJtPjxwcmltYXJ5PlBRY29ubmVjdENvbXBsZXRlPC9w cmltYXJ5PjwvaW5kZXh0ZXJtPjwvdGVybT4KKyAgICAgPGxpc3RpdGVtPgorICAgICAgPHBhcmE+ CisgICAgICAgQ29tcGxldGUgdGhlIGNvbm5lY3Rpb24gYXR0ZW1wdCBvbiBhIG5vbmJsb2NraW5n IGNvbm5lY3Rpb24gYW5kIGJsb2NrCisgICAgICAgdW50aWwgaXQgaXMgY29tcGxldGVkLgorCis8 c3lub3BzaXM+CitpbnQgUFFjb25uZWN0UG9sbChQR2Nvbm4gKmNvbm4pOworPC9zeW5vcHNpcz4K KyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgVGhpcyBmdW5jdGlvbiBjYW4g YmUgdXNlZCBpbnN0ZWFkIG9mCisgICAgICAgPHhyZWYgbGlua2VuZD0ibGlicHEtUFFjb25uZWN0 UG9sbCIvPgorICAgICAgIHRvIGNvbXBsZXRlIGEgY29ubmVjdGlvbiB0aGF0IHdhcyBpbml0aWFs bHkgc3RhcnRlZCBpbiBhIG5vbiBibG9ja2luZworICAgICAgIG1hbm5lci4gSG93ZXZlciwgaW5z dGVhZCBvZiBjb250aW51aW5nIHRvIGNvbXBsZXRlIHRoZSBjb25uZWN0aW9uIGluIGEKKyAgICAg ICBub24gYmxvY2tpbmcgd2F5LCBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gd2lsbCBibG9jayB1bnRp bCB0aGUgY29ubmVjdGlvbgorICAgICAgIGlzIGNvbXBsZXRlZC4gVGhpcyBpcyBlc3BlY2lhbGx5 IHVzZWZ1bCB0byBjb21wbGV0ZSBjb25uZWN0aW9ucyB0aGF0IHdlcmUKKyAgICAgICBzdGFydGVk IGJ5IDx4cmVmIGxpbmtlbmQ9ImxpYnBxLVBRcmVxdWVzdENhbmNlbFN0YXJ0Ii8+LgorICAgICAg PC9wYXJhPgorICAgICA8L2xpc3RpdGVtPgorICAgIDwvdmFybGlzdGVudHJ5PgorCiAgICAgPHZh cmxpc3RlbnRyeSBpZD0ibGlicHEtUFFjb25uZGVmYXVsdHMiPgogICAgICA8dGVybT48ZnVuY3Rp b24+UFFjb25uZGVmYXVsdHM8L2Z1bmN0aW9uPjxpbmRleHRlcm0+PHByaW1hcnk+UFFjb25uZGVm YXVsdHM8L3ByaW1hcnk+PC9pbmRleHRlcm0+PC90ZXJtPgogICAgICA8bGlzdGl0ZW0+CkBAIC02 NjAsNyArNjg0LDcgQEAgdm9pZCBQUXJlc2V0KFBHY29ubiAqY29ubik7CiAKICAgICA8dmFybGlz dGVudHJ5IGlkPSJsaWJwcS1QUXJlc2V0U3RhcnQiPgogICAgICA8dGVybT48ZnVuY3Rpb24+UFFy ZXNldFN0YXJ0PC9mdW5jdGlvbj48aW5kZXh0ZXJtPjxwcmltYXJ5PlBRcmVzZXRTdGFydDwvcHJp bWFyeT48L2luZGV4dGVybT48L3Rlcm0+Ci0gICAgIDx0ZXJtPjxmdW5jdGlvbj5QUXJlc2V0UG9s bDwvZnVuY3Rpb24+PGluZGV4dGVybT48cHJpbWFyeT5QUXJlc2V0UG9sbDwvcHJpbWFyeT48L2lu ZGV4dGVybT48L3Rlcm0+CisgICAgIDx0ZXJtIGlkPSJsaWJwcS1QUXJlc2V0UG9sbCI+PGZ1bmN0 aW9uPlBRcmVzZXRQb2xsPC9mdW5jdGlvbj48aW5kZXh0ZXJtPjxwcmltYXJ5PlBRcmVzZXRQb2xs PC9wcmltYXJ5PjwvaW5kZXh0ZXJtPjwvdGVybT4KICAgICAgPGxpc3RpdGVtPgogICAgICAgPHBh cmE+CiAgICAgICAgUmVzZXQgdGhlIGNvbW11bmljYXRpb24gY2hhbm5lbCB0byB0aGUgc2VydmVy LCBpbiBhIG5vbmJsb2NraW5nIG1hbm5lci4KQEAgLTU2MTcsMTMgKzU2NDEsMTM3IEBAIGludCBQ UXNldFNpbmdsZVJvd01vZGUoUEdjb25uICpjb25uKTsKICAgIHRoaXMgc2VjdGlvbi4KIAogICAg PHZhcmlhYmxlbGlzdD4KKyAgICA8dmFybGlzdGVudHJ5IGlkPSJsaWJwcS1QUXJlcXVlc3RDYW5j ZWwiPgorICAgICA8dGVybT48ZnVuY3Rpb24+UFFyZXF1ZXN0Q2FuY2VsPC9mdW5jdGlvbj48aW5k ZXh0ZXJtPjxwcmltYXJ5PlBRcmVxdWVzdENhbmNlbDwvcHJpbWFyeT48L2luZGV4dGVybT48L3Rl cm0+CisKKyAgICAgPGxpc3RpdGVtPgorICAgICAgPHBhcmE+CisgICAgICAgUmVxdWVzdHMgdGhh dCB0aGUgc2VydmVyIGFiYW5kb25zIHByb2Nlc3Npbmcgb2YgdGhlIGN1cnJlbnQgY29tbWFuZC4K KzxzeW5vcHNpcz4KK2ludCBQUXJlcXVlc3RDYW5jZWwoUEdjb25uICpjb25uKTsKKzwvc3lub3Bz aXM+CisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgIFRoaXMgcmVxdWVzdCBp cyBtYWRlIG92ZXIgYSBjb25uZWN0aW9uIHRoYXQgdXNlcyB0aGUgc2FtZSBjb25uZWN0aW9uCisg ICAgICAgb3B0aW9ucyBhcyB0aGUgdGhlIG9yaWdpbmFsIDxzdHJ1Y3RuYW1lPlBHY29ubjwvc3Ry dWN0bmFtZT4uIFNvIHdoZW4gdGhlCisgICAgICAgb3JpZ2luYWwgY29ubmVjdGlvbiBpcyBlbmNy eXB0ZWQgKHVzaW5nIFRMUyBvciBHU1MpLCB0aGUgY29ubmVjdGlvbiBmb3IKKyAgICAgICB0aGUg Y2FuY2VsIHJlcXVlc3QgY29ubmVjdGlvbiBpcyBlbmNyeXB0ZWQgaW4gdGhlIHNhbWUuIEFueSBj b25uZWN0aW9uCisgICAgICAgb3B0aW9ucyB0aGF0IG9ubHkgbWFrZSBzZW5zZSBmb3IgYXV0aGVu dGljYXRpb24gb3IgYWZ0ZXIgYXV0aGVudGljYXRpb24KKyAgICAgICBhcmUgaWdub3JlZCB0aG91 Z2gsIGJlY2F1c2UgY2FuY2VsbGF0aW9uIHJlcXVlc3RzIGRvIG5vdCByZXF1aXJlCisgICAgICAg YXV0aGVudGljYXRpb24uCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgIFRo aXMgZnVuY3Rpb24gb3BlcmF0ZXMgZGlyZWN0bHkgb24gdGhlIDxzdHJ1Y3RuYW1lPlBHY29ubjwv c3RydWN0bmFtZT4KKyAgICAgICBvYmplY3QsIGFuZCBpbiBjYXNlIG9mIGZhaWx1cmUgc3RvcmVz IHRoZSBlcnJvciBtZXNzYWdlIGluIHRoZQorICAgICAgIDxzdHJ1Y3RuYW1lPlBHY29ubjwvc3Ry dWN0bmFtZT4gb2JqZWN0ICh3aGVuY2UgaXQgY2FuIGJlIHJldHJpZXZlZAorICAgICAgIGJ5IDx4 cmVmIGxpbmtlbmQ9ImxpYnBxLVBRZXJyb3JNZXNzYWdlIi8+KS4gVGhpcyBiZWhhdmlvdXIgbWFr ZXMgdGhpcworICAgICAgIGZ1bmN0aW9uIHVuc2FmZSB0byBjYWxsIGZyb20gd2l0aGluIG11bHRp LXRocmVhZGVkIHByb2dyYW1zIG9yCisgICAgICAgc2lnbmFsIGhhbmRsZXJzLCBzaW5jZSBpdCBp cyBwb3NzaWJsZSB0aGF0IG92ZXJ3cml0aW5nIHRoZQorICAgICAgIDxzdHJ1Y3RuYW1lPlBHY29u bjwvc3RydWN0bmFtZT4ncyBlcnJvciBtZXNzYWdlIHdpbGwKKyAgICAgICBtZXNzIHVwIHRoZSBv cGVyYXRpb24gY3VycmVudGx5IGluIHByb2dyZXNzIG9uIHRoZSBjb25uZWN0aW9uIGluIGFub3Ro ZXIKKyAgICAgICB0aHJlYWQuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAg IFRoZSByZXR1cm4gdmFsdWUgaXMgMSBpZiB0aGUgY2FuY2VsIHJlcXVlc3Qgd2FzIHN1Y2Nlc3Nm dWxseQorICAgICAgIGRpc3BhdGNoZWQgYW5kIDAgaWYgbm90LiBTdWNjZXNzZnVsIGRpc3BhdGNo IGlzIG5vIGd1YXJhbnRlZSB0aGF0IHRoZQorICAgICAgIHJlcXVlc3Qgd2lsbCBoYXZlIGFueSBl ZmZlY3QsIGhvd2V2ZXIuIElmIHRoZSBjYW5jZWxsYXRpb24gaXMgZWZmZWN0aXZlLAorICAgICAg IHRoZSBjdXJyZW50IGNvbW1hbmQgd2lsbCB0ZXJtaW5hdGUgZWFybHkgYW5kIHJldHVybiBhbiBl cnJvciByZXN1bHQuIElmCisgICAgICAgdGhlIGNhbmNlbGxhdGlvbiBmYWlscyAoc2F5LCBiZWNh dXNlIHRoZSBzZXJ2ZXIgd2FzIGFscmVhZHkgZG9uZQorICAgICAgIHByb2Nlc3NpbmcgdGhlIGNv bW1hbmQpLCB0aGVuIHRoZXJlIHdpbGwgYmUgbm8gdmlzaWJsZSByZXN1bHQgYXQKKyAgICAgICBh bGwuCisgICAgICA8L3BhcmE+CisgICAgIDwvbGlzdGl0ZW0+CisgICAgPC92YXJsaXN0ZW50cnk+ CisKKyAgICA8dmFybGlzdGVudHJ5IGlkPSJsaWJwcS1QUXJlcXVlc3RDYW5jZWxTdGFydCI+Cisg ICAgIDx0ZXJtPjxmdW5jdGlvbj5QUXJlcXVlc3RDYW5jZWxTdGFydDwvZnVuY3Rpb24+PGluZGV4 dGVybT48cHJpbWFyeT5QUXJlcXVlc3RDYW5jZWxTdGFydDwvcHJpbWFyeT48L2luZGV4dGVybT48 L3Rlcm0+CisKKyAgICAgPGxpc3RpdGVtPgorICAgICAgPHBhcmE+CisgICAgICAgQSB2ZXJzaW9u IG9mCisgICAgICAgPHhyZWYgbGlua2VuZD0ibGlicHEtUFFyZXF1ZXN0Q2FuY2VsIi8+CisgICAg ICAgdGhhdCBjYW4gYmUgdXNlZCBpbiB0aHJlYWQtc2FmZSBhbmQvb3Igbm9uLWJsb2NraW5nIG1h bm5lci4KKzxzeW5vcHNpcz4KK1BHY29ubiAqUFFyZXF1ZXN0Q2FuY2VsU3RhcnQoUEdjb25uICpj b25uKTsKKzwvc3lub3BzaXM+CisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAg IFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIG5ldyA8c3RydWN0bmFtZT5QR2Nvbm48L3N0cnVjdG5h bWU+LiBUaGlzCisgICAgICAgY29ubmVjdGlvbiBvYmplY3QgY2FuIGJlIHVzZWQgdG8gY2FuY2Vs IHRoZSBxdWVyeSB0aGF0J3MgcnVubmluZyBvbiB0aGUKKyAgICAgICBvcmlnaW5hbCBjb25uZWN0 aW9uIGluIGEgdGhyZWFkLXNhZmUgd2F5LiBUbyBkbyBzbworICAgICAgIDx4cmVmIGxpbmtlbmQ9 ImxpYnBxLVBRcmVxdWVzdENhbmNlbCIvPgorICAgICAgIG11c3QgYmUgY2FsbGVkIHdoaWxlIG5v IG90aGVyIHRocmVhZCBpcyB1c2luZyB0aGUgb3JpZ2luYWwgUEdjb25uLiBUaGVuCisgICAgICAg dGhlIHJldHVybmVkIDxzdHJ1Y3RuYW1lPlBHY29ubjwvc3RydWN0bmFtZT4KKyAgICAgICBjYW4g YmUgdXNlZCBhdCBhIGxhdGVyIHBvaW50IGluIGFueSB0aHJlYWQgdG8gc2VuZCBhIGNhbmNlbCBy ZXF1ZXN0LgorICAgICAgIEEgY2FuY2VsIHJlcXVlc3QgY2FuIGJlIHNlbnQgdXNpbmcgdGhlIHJl dHVybmVkIFBHY29ubiBpbiB0d28gd2F5cywKKyAgICAgICBub24tYmxvY2tpbmcgdXNpbmcgPHhy ZWYgbGlua2VuZD0ibGlicHEtUFFjb25uZWN0UG9sbCIvPgorICAgICAgIG9yIGJsb2NraW5nIHVz aW5nICA8eHJlZiBsaW5rZW5kPSJsaWJwcS1QUWNvbm5lY3RDb21wbGV0ZSIvPi4KKyAgICAgIDwv cGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgSW4gYWRkaXRpb24gdG8gYWxsIHRoZSBzdGF0 dXNlcyB0aGF0IGEgcmVndWxhcgorICAgICAgIDxzdHJ1Y3RuYW1lPlBHY29ubjwvc3RydWN0bmFt ZT4KKyAgICAgICBjYW4gaGF2ZSByZXR1cm5lZCBjb25uZWN0aW9uIGNhbiBoYXZlIHR3byBhZGRp dGlvbmFsIHN0YXR1c2VzOgorCisgICAgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgICAgPHZhcmxp c3RlbnRyeSBpZD0ibGlicHEtY29ubmVjdGlvbi1zdGFydGluZyI+CisgICAgICAgICA8dGVybT48 c3ltYm9sPkNPTk5FQ1RJT05fU1RBUlRJTkc8L3N5bWJvbD48L3Rlcm0+CisgICAgICAgICA8bGlz dGl0ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgIFdhaXRpbmcgZm9yIHRoZSBmaXJz dCBjYWxsIHRvIDx4cmVmIGxpbmtlbmQ9ImxpYnBxLVBRY29ubmVjdFBvbGwiLz4sCisgICAgICAg ICAgIHRvIGFjdHVhbGx5IG9wZW4gdGhlIHNvY2tldC4gVGhpcyBpcyB0aGUgY29ubmVjdGlvbiBz dGF0ZSByaWdodCBhZnRlcgorICAgICAgICAgICBjYWxsaW5nIDx4cmVmIGxpbmtlbmQ9ImxpYnBx LVBRcmVxdWVzdENhbmNlbCIvPi4gTm8gY29ubmVjdGlvbiB0byB0aGUKKyAgICAgICAgICAgc2Vy dmVyIGhhcyBiZWVuIGluaXRpYXRlZCB5ZXQgYXQgdGhpcyBwb2ludC4gVG8gc3RhcnQgY2FuY2Vs IHJlcXVlc3QKKyAgICAgICAgICAgaW5pdGlhdGlvbiB1c2UgPHhyZWYgbGlua2VuZD0ibGlicHEt UFFjb25uZWN0UG9sbCIvPgorICAgICAgICAgICBmb3Igbm9uLWJsb2NraW5nIGJlaGF2aW91ciBh bmQgPHhyZWYgbGlua2VuZD0ibGlicHEtUFFjb25uZWN0Q29tcGxldGUiLz4KKyAgICAgICAgICAg Zm9yIGJsb2NraW5nIGJlaGF2aW91ci4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgICA8L2xp c3RpdGVtPgorICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICAgICA8dmFybGlzdGVudHJ5 IGlkPSJsaWJwcS1jb25uZWN0aW9uLWNhbmNlbC1maW5pc2hlZCI+CisgICAgICAgICA8dGVybT48 c3ltYm9sPkNPTk5FQ1RJT05fQ0FOQ0VMX0ZJTklTSEVEPC9zeW1ib2w+PC90ZXJtPgorICAgICAg ICAgPGxpc3RpdGVtPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICBDYW5jZWwgcmVxdWVz dCB3YXMgc3VjY2Vzc2Z1bGx5IHNlbnQuIEl0J3Mgbm90IHBvc3NpYmxlIHRvIGNvbnRpbnVlCisg ICAgICAgICAgIHVzaW5nIHRoZSBjYW5jZWxsYXRpb24gY29ubmVjdGlvbiBub3csIHNvIGl0IHNo b3VsZCBiZSBmcmVlZCB1c2luZworICAgICAgICAgICA8eHJlZiBsaW5rZW5kPSJsaWJwcS1QUWZp bmlzaCIvPi4gSXQncyBhbHNvIHBvc3NpYmxlIHRvIHJlc2V0IHRoZQorICAgICAgICAgICBjYW5j ZWxsYXRpb24gY29ubmVjdGlvbiBpbnN0ZWFkIHVzaW5nCisgICAgICAgICAgIDx4cmVmIGxpbmtl bmQ9ImxpYnBxLVBRcmVzZXRTdGFydCIvPiwgdGhhdCB3YXkgaXQgY2FuIGJlIHJldXNlZCB0bwor ICAgICAgICAgICBjYW5jZWwgYSBmdXR1cmUgcXVlcnkgb24gdGhlIHNhbWUgY29ubmVjdGlvbi4K KyAgICAgICAgICA8L3BhcmE+CisgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L3Zhcmxp c3RlbnRyeT4KKyAgICAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgICAgIDwvcGFyYT4KKworICAgICAg PHBhcmE+CisgICAgICAgU2luY2UgdGhpcyBvYmplY3QgcmVwcmVzZW50cyBhIGNvbm5lY3Rpb24g b25seSBtZWFudCBmb3IgY2FuY2VsbGF0aW9ucyBpdAorICAgICAgIGNhbiBvbmx5IGJlIHVzZWQg d2l0aCBhIGxpbWl0ZWQgc3Vic2V0IG9mIHRoZSBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgdXNlZAor ICAgICAgIGZvciBhIHJlZ3VsYXIgPHN0cnVjdG5hbWU+UEdjb25uPC9zdHJ1Y3RuYW1lPiBvYmpl Y3QuIFRoZSBmdW5jdGlvbnMgdGhhdAorICAgICAgIHRoaXMgb2JqZWN0IGNhbiBiZSBwYXNzZWQg dG8gYXJlCisgICAgICAgPHhyZWYgbGlua2VuZD0ibGlicHEtUFFzdGF0dXMiLz4sCisgICAgICAg PHhyZWYgbGlua2VuZD0ibGlicHEtUFFlcnJvck1lc3NhZ2UiLz4sCisgICAgICAgPHhyZWYgbGlu a2VuZD0ibGlicHEtUFFjb25uZWN0Q29tcGxldGUiLz4sCisgICAgICAgPHhyZWYgbGlua2VuZD0i bGlicHEtUFFjb25uZWN0UG9sbCIvPiwKKyAgICAgICA8eHJlZiBsaW5rZW5kPSJsaWJwcS1QUXNv Y2tldCIvPiwKKyAgICAgICA8eHJlZiBsaW5rZW5kPSJsaWJwcS1QUXJlc2V0U3RhcnQiLz4sIGFu ZAorICAgICAgIDx4cmVmIGxpbmtlbmQ9ImxpYnBxLVBRZmluaXNoIi8+LgorICAgICAgPC9wYXJh PgorICAgICA8L2xpc3RpdGVtPgorICAgIDwvdmFybGlzdGVudHJ5PgorCiAgICAgPHZhcmxpc3Rl bnRyeSBpZD0ibGlicHEtUFFnZXRDYW5jZWwiPgogICAgICA8dGVybT48ZnVuY3Rpb24+UFFnZXRD YW5jZWw8L2Z1bmN0aW9uPjxpbmRleHRlcm0+PHByaW1hcnk+UFFnZXRDYW5jZWw8L3ByaW1hcnk+ PC9pbmRleHRlcm0+PC90ZXJtPgogCiAgICAgIDxsaXN0aXRlbT4KICAgICAgIDxwYXJhPgogICAg ICAgIENyZWF0ZXMgYSBkYXRhIHN0cnVjdHVyZSBjb250YWluaW5nIHRoZSBpbmZvcm1hdGlvbiBu ZWVkZWQgdG8gY2FuY2VsCi0gICAgICAgYSBjb21tYW5kIGlzc3VlZCB0aHJvdWdoIGEgcGFydGlj dWxhciBkYXRhYmFzZSBjb25uZWN0aW9uLgorICAgICAgIGEgY29tbWFuZCB1c2luZyA8eHJlZiBs aW5rZW5kPSJsaWJwcS1QUWNhbmNlbCIvPi4KIDxzeW5vcHNpcz4KIFBHY2FuY2VsICpQUWdldENh bmNlbChQR2Nvbm4gKmNvbm4pOwogPC9zeW5vcHNpcz4KQEAgLTU2NjUsNyArNTgxMyw5IEBAIHZv aWQgUFFmcmVlQ2FuY2VsKFBHY2FuY2VsICpjYW5jZWwpOwogCiAgICAgIDxsaXN0aXRlbT4KICAg ICAgIDxwYXJhPgotICAgICAgIFJlcXVlc3RzIHRoYXQgdGhlIHNlcnZlciBhYmFuZG9uIHByb2Nl c3Npbmcgb2YgdGhlIGN1cnJlbnQgY29tbWFuZC4KKyAgICAgICBBIGxlc3Mgc2VjdXJlIHZlcnNp b24gb2YKKyAgICAgICA8eHJlZiBsaW5rZW5kPSJsaWJwcS1QUXJlcXVlc3RDYW5jZWwiLz4KKyAg ICAgICB0aGF0IGNhbiBiZSB1c2VkIHNhZmVseSBmcm9tIHdpdGhpbiBhIHNpZ25hbCBoYW5kbGVy LgogPHN5bm9wc2lzPgogaW50IFBRY2FuY2VsKFBHY2FuY2VsICpjYW5jZWwsIGNoYXIgKmVycmJ1 ZiwgaW50IGVycmJ1ZnNpemUpOwogPC9zeW5vcHNpcz4KQEAgLTU2NzksMTUgKzU4MjksNiBAQCBp bnQgUFFjYW5jZWwoUEdjYW5jZWwgKmNhbmNlbCwgY2hhciAqZXJyYnVmLCBpbnQgZXJyYnVmc2l6 ZSk7CiAgICAgICAgcmVjb21tZW5kZWQgc2l6ZSBpcyAyNTYgYnl0ZXMpLgogICAgICAgPC9wYXJh PgogCi0gICAgICA8cGFyYT4KLSAgICAgICBTdWNjZXNzZnVsIGRpc3BhdGNoIGlzIG5vIGd1YXJh bnRlZSB0aGF0IHRoZSByZXF1ZXN0IHdpbGwgaGF2ZQotICAgICAgIGFueSBlZmZlY3QsIGhvd2V2 ZXIuICBJZiB0aGUgY2FuY2VsbGF0aW9uIGlzIGVmZmVjdGl2ZSwgdGhlIGN1cnJlbnQKLSAgICAg ICBjb21tYW5kIHdpbGwgdGVybWluYXRlIGVhcmx5IGFuZCByZXR1cm4gYW4gZXJyb3IgcmVzdWx0 LiAgSWYgdGhlCi0gICAgICAgY2FuY2VsbGF0aW9uIGZhaWxzIChzYXksIGJlY2F1c2UgdGhlIHNl cnZlciB3YXMgYWxyZWFkeSBkb25lCi0gICAgICAgcHJvY2Vzc2luZyB0aGUgY29tbWFuZCksIHRo ZW4gdGhlcmUgd2lsbCBiZSBubyB2aXNpYmxlIHJlc3VsdCBhdAotICAgICAgIGFsbC4KLSAgICAg IDwvcGFyYT4KLQogICAgICAgPHBhcmE+CiAgICAgICAgPHhyZWYgbGlua2VuZD0ibGlicHEtUFFj YW5jZWwiLz4gY2FuIHNhZmVseSBiZSBpbnZva2VkIGZyb20gYSBzaWduYWwKICAgICAgICBoYW5k bGVyLCBpZiB0aGUgPHBhcmFtZXRlcj5lcnJidWY8L3BhcmFtZXRlcj4gaXMgYSBsb2NhbCB2YXJp YWJsZSBpbiB0aGUKQEAgLTU2OTYsMzMgKzU4MzcsMjQgQEAgaW50IFBRY2FuY2VsKFBHY2FuY2Vs ICpjYW5jZWwsIGNoYXIgKmVycmJ1ZiwgaW50IGVycmJ1ZnNpemUpOwogICAgICAgIGFsc28gYmUg aW52b2tlZCBmcm9tIGEgdGhyZWFkIHRoYXQgaXMgc2VwYXJhdGUgZnJvbSB0aGUgb25lCiAgICAg ICAgbWFuaXB1bGF0aW5nIHRoZSA8c3RydWN0bmFtZT5QR2Nvbm48L3N0cnVjdG5hbWU+IG9iamVj dC4KICAgICAgIDwvcGFyYT4KLSAgICAgPC9saXN0aXRlbT4KLSAgICA8L3Zhcmxpc3RlbnRyeT4K LSAgIDwvdmFyaWFibGVsaXN0PgotCi0gICA8dmFyaWFibGVsaXN0PgotICAgIDx2YXJsaXN0ZW50 cnkgaWQ9ImxpYnBxLVBRcmVxdWVzdENhbmNlbCI+Ci0gICAgIDx0ZXJtPjxmdW5jdGlvbj5QUXJl cXVlc3RDYW5jZWw8L2Z1bmN0aW9uPjxpbmRleHRlcm0+PHByaW1hcnk+UFFyZXF1ZXN0Q2FuY2Vs PC9wcmltYXJ5PjwvaW5kZXh0ZXJtPjwvdGVybT4KLQotICAgICA8bGlzdGl0ZW0+Ci0gICAgICA8 cGFyYT4KLSAgICAgICA8eHJlZiBsaW5rZW5kPSJsaWJwcS1QUXJlcXVlc3RDYW5jZWwiLz4gaXMg YSBkZXByZWNhdGVkIHZhcmlhbnQgb2YKLSAgICAgICA8eHJlZiBsaW5rZW5kPSJsaWJwcS1QUWNh bmNlbCIvPi4KLTxzeW5vcHNpcz4KLWludCBQUXJlcXVlc3RDYW5jZWwoUEdjb25uICpjb25uKTsK LTwvc3lub3BzaXM+Ci0gICAgICA8L3BhcmE+CiAKICAgICAgIDxwYXJhPgotICAgICAgIFJlcXVl c3RzIHRoYXQgdGhlIHNlcnZlciBhYmFuZG9uIHByb2Nlc3Npbmcgb2YgdGhlIGN1cnJlbnQKLSAg ICAgICBjb21tYW5kLiAgSXQgb3BlcmF0ZXMgZGlyZWN0bHkgb24gdGhlCi0gICAgICAgPHN0cnVj dG5hbWU+UEdjb25uPC9zdHJ1Y3RuYW1lPiBvYmplY3QsIGFuZCBpbiBjYXNlIG9mIGZhaWx1cmUg c3RvcmVzIHRoZQotICAgICAgIGVycm9yIG1lc3NhZ2UgaW4gdGhlIDxzdHJ1Y3RuYW1lPlBHY29u bjwvc3RydWN0bmFtZT4gb2JqZWN0ICh3aGVuY2UgaXQgY2FuCi0gICAgICAgYmUgcmV0cmlldmVk IGJ5IDx4cmVmIGxpbmtlbmQ9ImxpYnBxLVBRZXJyb3JNZXNzYWdlIi8+KS4gIEFsdGhvdWdoCi0g ICAgICAgdGhlIGZ1bmN0aW9uYWxpdHkgaXMgdGhlIHNhbWUsIHRoaXMgYXBwcm9hY2ggaXMgbm90 IHNhZmUgd2l0aGluCi0gICAgICAgbXVsdGlwbGUtdGhyZWFkIHByb2dyYW1zIG9yIHNpZ25hbCBo YW5kbGVycywgc2luY2UgaXQgaXMgcG9zc2libGUKLSAgICAgICB0aGF0IG92ZXJ3cml0aW5nIHRo ZSA8c3RydWN0bmFtZT5QR2Nvbm48L3N0cnVjdG5hbWU+J3MgZXJyb3IgbWVzc2FnZSB3aWxsCi0g ICAgICAgbWVzcyB1cCB0aGUgb3BlcmF0aW9uIGN1cnJlbnRseSBpbiBwcm9ncmVzcyBvbiB0aGUg Y29ubmVjdGlvbi4KKyAgICAgICBUbyBhY2hpZXZlIHNpZ25hbC1zYWZldHksIHNvbWUgY29uY2Vz c2lvbnMgbmVlZGVkIHRvIGJlIG1hZGUgaW4gdGhlCisgICAgICAgaW1wbGVtZW50YXRpb24gb2Yg PHhyZWYgbGlua2VuZD0ibGlicHEtUFFjYW5jZWwiLz4uIE5vdCBhbGwgY29ubmVjdGlvbgorICAg ICAgIG9wdGlvbnMgb2YgdGhlIG9yaWdpbmFsIGNvbm5lY3Rpb24gYXJlIHVzZWQgd2hlbiBlc3Rh Ymxpc2hpbmcgYQorICAgICAgIGNvbm5lY3Rpb24gZm9yIHRoZSBjYW5jZWxsYXRpb24gcmVxdWVz dC4gV2hlbiBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gYQorICAgICAgIGNvbm5lY3Rpb24gaXMgbWFk ZSB0byB0aGUgcG9zdGdyZXMgaG9zdCB1c2luZyB0aGUgc2FtZSBwb3J0LiBUaGUgb25seQorICAg ICAgIGNvbm5lY3Rpb24gb3B0aW9ucyB0aGF0IGFyZSBob25vcmVkIGR1cmluZyB0aGlzIGNvbm5l Y3Rpb24gYXJlCisgICAgICAgPHZhcm5hbWU+a2VlcGFsaXZlczwvdmFybmFtZT4sCisgICAgICAg PHZhcm5hbWU+a2VlcGFsaXZlc19pZGxlPC92YXJuYW1lPiwKKyAgICAgICA8dmFybmFtZT5rZWVw YWxpdmVzX2ludGVydmFsPC92YXJuYW1lPiwKKyAgICAgICA8dmFybmFtZT5rZWVwYWxpdmVzX2Nv dW50PC92YXJuYW1lPiwgYW5kCisgICAgICAgPHZhcm5hbWU+dGNwX3VzZXJfdGltZW91dDwvdmFy bmFtZT4uCisgICAgICAgU28sIGZvciBleGFtcGxlCisgICAgICAgPHZhcm5hbWU+Y29ubmVjdF90 aW1lb3V0PC92YXJuYW1lPiwKKyAgICAgICA8dmFybmFtZT5nc3NlbmNtb2RlPC92YXJuYW1lPiwg YW5kCisgICAgICAgPHZhcm5hbWU+c3NsbW9kZTwvdmFybmFtZT4gYXJlIGlnbm9yZWQuIFRoaXMg bWVhbnMgdGhlIGNvbm5lY3Rpb24KKyAgICAgICBpcyBuZXZlciBlbmNyeXB0ZWQgdXNpbmcgVExT IG9yIEdTUy4KICAgICAgIDwvcGFyYT4KICAgICAgPC9saXN0aXRlbT4KICAgICA8L3Zhcmxpc3Rl bnRyeT4KQEAgLTg4MzUsMTAgKzg5NjcsMTAgQEAgaW50IFBRaXN0aHJlYWRzYWZlKCk7CiAgIDwv cGFyYT4KIAogICA8cGFyYT4KLSAgIFRoZSBkZXByZWNhdGVkIGZ1bmN0aW9ucyA8eHJlZiBsaW5r ZW5kPSJsaWJwcS1QUXJlcXVlc3RDYW5jZWwiLz4gYW5kCisgICBUaGUgZnVuY3Rpb25zIDx4cmVm IGxpbmtlbmQ9ImxpYnBxLVBRcmVxdWVzdENhbmNlbCIvPiBhbmQKICAgIDx4cmVmIGxpbmtlbmQ9 ImxpYnBxLVBRb2lkU3RhdHVzIi8+IGFyZSBub3QgdGhyZWFkLXNhZmUgYW5kIHNob3VsZCBub3Qg YmUKICAgIHVzZWQgaW4gbXVsdGl0aHJlYWQgcHJvZ3JhbXMuICA8eHJlZiBsaW5rZW5kPSJsaWJw cS1QUXJlcXVlc3RDYW5jZWwiLz4KLSAgIGNhbiBiZSByZXBsYWNlZCBieSA8eHJlZiBsaW5rZW5k PSJsaWJwcS1QUWNhbmNlbCIvPi4KKyAgIGNhbiBiZSByZXBsYWNlZCBieSA8eHJlZiBsaW5rZW5k PSJsaWJwcS1QUXJlcXVlc3RDYW5jZWxTdGFydCIvPi4KICAgIDx4cmVmIGxpbmtlbmQ9ImxpYnBx LVBRb2lkU3RhdHVzIi8+IGNhbiBiZSByZXBsYWNlZCBieQogICAgPHhyZWYgbGlua2VuZD0ibGli cHEtUFFvaWRWYWx1ZSIvPi4KICAgPC9wYXJhPgpkaWZmIC0tZ2l0IGEvc3JjL2ZlX3V0aWxzL2Nv bm5lY3RfdXRpbHMuYyBiL3NyYy9mZV91dGlscy9jb25uZWN0X3V0aWxzLmMKaW5kZXggYTMwYzY2 ZjEzYS4uZmYxOGRhYjA0MyAxMDA2NDQKLS0tIGEvc3JjL2ZlX3V0aWxzL2Nvbm5lY3RfdXRpbHMu YworKysgYi9zcmMvZmVfdXRpbHMvY29ubmVjdF91dGlscy5jCkBAIC0xNjIsMTkgKzE2MiwxMSBA QCBjb25uZWN0TWFpbnRlbmFuY2VEYXRhYmFzZShDb25uUGFyYW1zICpjcGFyYW1zLAogdm9pZAog ZGlzY29ubmVjdERhdGFiYXNlKFBHY29ubiAqY29ubikKIHsKLQljaGFyCQllcnJidWZbMjU2XTsK LQogCUFzc2VydChjb25uICE9IE5VTEwpOwogCiAJaWYgKFBRdHJhbnNhY3Rpb25TdGF0dXMoY29u bikgPT0gUFFUUkFOU19BQ1RJVkUpCiAJewotCQlQR2NhbmNlbCAgICpjYW5jZWw7Ci0KLQkJaWYg KChjYW5jZWwgPSBQUWdldENhbmNlbChjb25uKSkpCi0JCXsKLQkJCSh2b2lkKSBQUWNhbmNlbChj YW5jZWwsIGVycmJ1Ziwgc2l6ZW9mKGVycmJ1ZikpOwotCQkJUFFmcmVlQ2FuY2VsKGNhbmNlbCk7 Ci0JCX0KKwkJKHZvaWQpIFBRcmVxdWVzdENhbmNlbChjb25uKTsKIAl9CiAKIAlQUWZpbmlzaChj b25uKTsKZGlmZiAtLWdpdCBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2V4cG9ydHMudHh0IGIvc3Jj L2ludGVyZmFjZXMvbGlicHEvZXhwb3J0cy50eHQKaW5kZXggZThiY2M4ODM3MC4uZjc2MDlkMGM2 NCAxMDA2NDQKLS0tIGEvc3JjL2ludGVyZmFjZXMvbGlicHEvZXhwb3J0cy50eHQKKysrIGIvc3Jj L2ludGVyZmFjZXMvbGlicHEvZXhwb3J0cy50eHQKQEAgLTE4NiwzICsxODYsNSBAQCBQUXBpcGVs aW5lU3RhdHVzICAgICAgICAgIDE4MwogUFFzZXRUcmFjZUZsYWdzICAgICAgICAgICAxODQKIFBR bWJsZW5Cb3VuZGVkICAgICAgICAgICAgMTg1CiBQUXNlbmRGbHVzaFJlcXVlc3QgICAgICAgIDE4 NgorUFFyZXF1ZXN0Q2FuY2VsU3RhcnQgICAgICAxODcKK1BRY29ubmVjdENvbXBsZXRlICAgICAg ICAgMTg4CmRpZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1jb25uZWN0LmMgYi9z cmMvaW50ZXJmYWNlcy9saWJwcS9mZS1jb25uZWN0LmMKaW5kZXggY2Y1NTRkMzg5Zi4uNTQ2MmUx MzA1YyAxMDA2NDQKLS0tIGEvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtY29ubmVjdC5jCisrKyBi L3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWNvbm5lY3QuYwpAQCAtMzc4LDYgKzM3OCw3IEBAIHN0 YXRpYyBpbnQJY29ubmVjdERCQ29tcGxldGUoUEdjb25uICpjb25uKTsKIHN0YXRpYyBQR1Bpbmcg aW50ZXJuYWxfcGluZyhQR2Nvbm4gKmNvbm4pOwogc3RhdGljIFBHY29ubiAqbWFrZUVtcHR5UEdj b25uKHZvaWQpOwogc3RhdGljIGJvb2wgZmlsbFBHY29ubihQR2Nvbm4gKmNvbm4sIFBRY29ubmlu Zm9PcHRpb24gKmNvbm5PcHRpb25zKTsKK3N0YXRpYyBib29sIGNvcHlQR2Nvbm4oUEdjb25uICpz cmNDb25uLCBQR2Nvbm4gKmRzdENvbm4pOwogc3RhdGljIHZvaWQgZnJlZVBHY29ubihQR2Nvbm4g KmNvbm4pOwogc3RhdGljIHZvaWQgY2xvc2VQR2Nvbm4oUEdjb25uICpjb25uKTsKIHN0YXRpYyB2 b2lkIHJlbGVhc2VfY29ubl9hZGRyaW5mbyhQR2Nvbm4gKmNvbm4pOwpAQCAtNjA0LDggKzYwNSwx MSBAQCBwcURyb3BTZXJ2ZXJEYXRhKFBHY29ubiAqY29ubikKIAlpZiAoY29ubi0+d3JpdGVfZXJy X21zZykKIAkJZnJlZShjb25uLT53cml0ZV9lcnJfbXNnKTsKIAljb25uLT53cml0ZV9lcnJfbXNn ID0gTlVMTDsKLQljb25uLT5iZV9waWQgPSAwOwotCWNvbm4tPmJlX2tleSA9IDA7CisJaWYgKCFj b25uLT5jYW5jZWxSZXF1ZXN0KQorCXsKKwkJY29ubi0+YmVfcGlkID0gMDsKKwkJY29ubi0+YmVf a2V5ID0gMDsKKwl9CiB9CiAKIApAQCAtNzM3LDYgKzc0MSw1OCBAQCBQUXBpbmcoY29uc3QgY2hh ciAqY29ubmluZm8pCiAJcmV0dXJuIHJldDsKIH0KIAorLyoKKyAqCQlQUWNhbmNlbENvbm5lY3RT dGFydAorICoKKyAqIEFzeW5jaHJvbm91c2x5IGNhbmNlbCBhIHJlcXVlc3Qgb24gdGhlIGdpdmVu IGNvbm5lY3Rpb24uIFRoaXMgcmVxdWlyZXMKKyAqIHBvbGxpbmcgdGhlIHJldHVybmVkIFBHY29u biB0byBhY3R1YWxseSBjb21wbGV0ZSB0aGUgY2FuY2VsbGF0aW9uIG9mIHRoZQorICogcmVxdWVz dC4KKyAqLworUEdjb25uICoKK1BRcmVxdWVzdENhbmNlbFN0YXJ0KFBHY29ubiAqY29ubikKK3sK KwlQR2Nvbm4JICAgKmNhbmNlbENvbm4gPSBtYWtlRW1wdHlQR2Nvbm4oKTsKKworCWlmIChjYW5j ZWxDb25uID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJLyogQ2hlY2sgd2UgaGF2ZSBhbiBv cGVuIGNvbm5lY3Rpb24gKi8KKwlpZiAoIWNvbm4pCisJeworCQlhcHBlbmRQUUV4cEJ1ZmZlclN0 cigmY2FuY2VsQ29ubi0+ZXJyb3JNZXNzYWdlLCBsaWJwcV9nZXR0ZXh0KCJwYXNzZWQgY29ubmVj dGlvbiB3YXMgTlVMTFxuIikpOworCQlyZXR1cm4gY2FuY2VsQ29ubjsKKwl9CisKKwlpZiAoY29u bi0+c29jayA9PSBQR0lOVkFMSURfU09DS0VUKQorCXsKKwkJYXBwZW5kUFFFeHBCdWZmZXJTdHIo JmNhbmNlbENvbm4tPmVycm9yTWVzc2FnZSwgbGlicHFfZ2V0dGV4dCgicGFzc2VkIGNvbm5lY3Rp b24gaXMgbm90IG9wZW5cbiIpKTsKKwkJcmV0dXJuIGNhbmNlbENvbm47CisJfQorCisJLyoKKwkg KiBJbmRpY2F0ZSB0aGF0IHRoaXMgY29ubmVjdGlvbiBpcyB1c2VkIHRvIHNlbmQgYSBjYW5jZWxs YXRpb24KKwkgKi8KKwljYW5jZWxDb25uLT5jYW5jZWxSZXF1ZXN0ID0gdHJ1ZTsKKworCWlmICgh Y29weVBHY29ubihjb25uLCBjYW5jZWxDb25uKSkKKwkJcmV0dXJuIChQR2Nvbm4gKikgY2FuY2Vs Q29ubjsKKworCS8qCisJICogQ29weSBvdmVyIGluZm9ybWF0aW9uIG5lZWRlZCB0byBjYW5jZWwK KwkgKi8KKwljYW5jZWxDb25uLT5iZV9waWQgPSBjb25uLT5iZV9waWQ7CisJY2FuY2VsQ29ubi0+ YmVfa2V5ID0gY29ubi0+YmVfa2V5OworCisJLyoKKwkgKiBDb21wdXRlIGRlcml2ZWQgb3B0aW9u cworCSAqLworCWlmICghY29ubmVjdE9wdGlvbnMyKGNhbmNlbENvbm4pKQorCQlyZXR1cm4gY2Fu Y2VsQ29ubjsKKworCWNhbmNlbENvbm4tPnN0YXR1cyA9IENPTk5FQ1RJT05fU1RBUlRJTkc7CisJ cmV0dXJuIGNhbmNlbENvbm47Cit9CisKIC8qCiAgKgkJUFFjb25uZWN0U3RhcnRQYXJhbXMKICAq CkBAIC05MTQsNiArOTcwLDQ2IEBAIGZpbGxQR2Nvbm4oUEdjb25uICpjb25uLCBQUWNvbm5pbmZv T3B0aW9uICpjb25uT3B0aW9ucykKIAlyZXR1cm4gdHJ1ZTsKIH0KIAorLyoKKyAqIENvcHkgb3Zl ciBvcHRpb24gdmFsdWVzIGZyb20gc3JjQ29ubiB0byBkc3RDb25uCisgKgorICogRG9uJ3QgcHV0 IGFueXRoaW5nIGN1dGUgaGVyZSAtLS0gaW50ZWxsaWdlbmNlIHNob3VsZCBiZSBpbgorICogY29u bmVjdE9wdGlvbnMyIC4uLgorICoKKyAqIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLiBPbiBmYWls dXJlLCByZXR1cm5zIGZhbHNlIGFuZCBzZXRzIGVycm9yIG1lc3NhZ2Ugb2YKKyAqIGRzdENvbm4u CisgKi8KK3N0YXRpYyBib29sCitjb3B5UEdjb25uKFBHY29ubiAqc3JjQ29ubiwgUEdjb25uICpk c3RDb25uKQoreworCWNvbnN0IGludGVybmFsUFFjb25uaW5mb09wdGlvbiAqb3B0aW9uOworCisJ LyogY29weSBvdmVyIGNvbm5lY3Rpb24gb3B0aW9ucyAqLworCWZvciAob3B0aW9uID0gUFFjb25u aW5mb09wdGlvbnM7IG9wdGlvbi0+a2V5d29yZDsgb3B0aW9uKyspCisJeworCQlpZiAob3B0aW9u LT5jb25ub2ZzID49IDApCisJCXsKKwkJCWNvbnN0IGNoYXIgKip0bXAgPSAoY29uc3QgY2hhciAq KikgKChjaGFyICopIHNyY0Nvbm4gKyBvcHRpb24tPmNvbm5vZnMpOworCisJCQlpZiAoKnRtcCkK KwkJCXsKKwkJCQljaGFyCSAgKipkc3RDb25ubWVtYmVyID0gKGNoYXIgKiopICgoY2hhciAqKSBk c3RDb25uICsgb3B0aW9uLT5jb25ub2ZzKTsKKworCQkJCWlmICgqZHN0Q29ubm1lbWJlcikKKwkJ CQkJZnJlZSgqZHN0Q29ubm1lbWJlcik7CisJCQkJKmRzdENvbm5tZW1iZXIgPSBzdHJkdXAoKnRt cCk7CisJCQkJaWYgKCpkc3RDb25ubWVtYmVyID09IE5VTEwpCisJCQkJeworCQkJCQlhcHBlbmRQ UUV4cEJ1ZmZlclN0cigmZHN0Q29ubi0+ZXJyb3JNZXNzYWdlLAorCQkJCQkJCQkJCSBsaWJwcV9n ZXR0ZXh0KCJvdXQgb2YgbWVtb3J5XG4iKSk7CisJCQkJCXJldHVybiBmYWxzZTsKKwkJCQl9CisJ CQl9CisJCX0KKwl9CisJcmV0dXJuIHRydWU7Cit9CisKIC8qCiAgKgkJY29ubmVjdE9wdGlvbnMx CiAgKgpAQCAtMjEzNCw2ICsyMjMwLDE1IEBAIGNvbm5lY3REQkNvbXBsZXRlKFBHY29ubiAqY29u bikKIAlpZiAoY29ubiA9PSBOVUxMIHx8IGNvbm4tPnN0YXR1cyA9PSBDT05ORUNUSU9OX0JBRCkK IAkJcmV0dXJuIDA7CiAKKwlpZiAoY29ubi0+c3RhdHVzID09IENPTk5FQ1RJT05fU1RBUlRJTkcp CisJeworCQlpZiAoIWNvbm5lY3REQlN0YXJ0KGNvbm4pKQorCQl7CisJCQljb25uLT5zdGF0dXMg PSBDT05ORUNUSU9OX0JBRDsKKwkJCXJldHVybiAwOworCQl9CisJfQorCiAJLyoKIAkgKiBTZXQg dXAgYSB0aW1lIGxpbWl0LCBpZiBjb25uZWN0X3RpbWVvdXQgaXNuJ3QgemVyby4KIAkgKi8KQEAg LTIyNzQsMTMgKzIzNzksMTUgQEAgUFFjb25uZWN0UG9sbChQR2Nvbm4gKmNvbm4pCiAJc3dpdGNo IChjb25uLT5zdGF0dXMpCiAJewogCQkJLyoKLQkJCSAqIFdlIHJlYWxseSBzaG91bGRuJ3QgaGF2 ZSBiZWVuIHBvbGxlZCBpbiB0aGVzZSB0d28gY2FzZXMsIGJ1dCB3ZQotCQkJICogY2FuIGhhbmRs ZSBpdC4KKwkJCSAqIFdlIHJlYWxseSBzaG91bGRuJ3QgaGF2ZSBiZWVuIHBvbGxlZCBpbiB0aGVz ZSB0aHJlZSBjYXNlcywgYnV0CisJCQkgKiB3ZSBjYW4gaGFuZGxlIGl0LgogCQkJICovCiAJCWNh c2UgQ09OTkVDVElPTl9CQUQ6CiAJCQlyZXR1cm4gUEdSRVNfUE9MTElOR19GQUlMRUQ7CiAJCWNh c2UgQ09OTkVDVElPTl9PSzoKIAkJCXJldHVybiBQR1JFU19QT0xMSU5HX09LOworCQljYXNlIENP Tk5FQ1RJT05fQ0FOQ0VMX0ZJTklTSEVEOgorCQkJcmV0dXJuIFBHUkVTX1BPTExJTkdfT0s7CiAK IAkJCS8qIFRoZXNlIGFyZSByZWFkaW5nIHN0YXRlcyAqLwogCQljYXNlIENPTk5FQ1RJT05fQVdB SVRJTkdfUkVTUE9OU0U6CkBAIC0yMjkyLDYgKzIzOTksMTcgQEAgUFFjb25uZWN0UG9sbChQR2Nv bm4gKmNvbm4pCiAJCQkJLyogTG9hZCB3YWl0aW5nIGRhdGEgKi8KIAkJCQlpbnQJCQluID0gcHFS ZWFkRGF0YShjb25uKTsKIAorCQkJCWlmIChuID09IC0yICYmIGNvbm4tPmNhbmNlbFJlcXVlc3Qp CisJCQkJeworCQkJCQkvKgorCQkJCQkgKiBUaGlzIGlzIHRoZSBleHBlY3RlZCBlbmQgc3RhdGUg Zm9yIGNhbmNlbCBjb25uZWN0aW9ucy4KKwkJCQkJICogVGhleSBhcmUgY2xvc2VkIG9uY2UgdGhl IGNhbmNlbCBpcyBwcm9jZXNzZWQgYnkgdGhlCisJCQkJCSAqIHNlcnZlci4KKwkJCQkJICovCisJ CQkJCWNvbm4tPnN0YXR1cyA9IENPTk5FQ1RJT05fQ0FOQ0VMX0ZJTklTSEVEOworCQkJCQlyZXNl dFBRRXhwQnVmZmVyKCZjb25uLT5lcnJvck1lc3NhZ2UpOworCQkJCQlyZXR1cm4gUEdSRVNfUE9M TElOR19PSzsKKwkJCQl9CiAJCQkJaWYgKG4gPCAwKQogCQkJCQlnb3RvIGVycm9yX3JldHVybjsK IAkJCQlpZiAobiA9PSAwKQpAQCAtMjMwMSw2ICsyNDE5LDcgQEAgUFFjb25uZWN0UG9sbChQR2Nv bm4gKmNvbm4pCiAJCQl9CiAKIAkJCS8qIFRoZXNlIGFyZSB3cml0aW5nIHN0YXRlcywgc28gd2Ug anVzdCBwcm9jZWVkLiAqLworCQljYXNlIENPTk5FQ1RJT05fU1RBUlRJTkc6CiAJCWNhc2UgQ09O TkVDVElPTl9TVEFSVEVEOgogCQljYXNlIENPTk5FQ1RJT05fTUFERToKIAkJCWJyZWFrOwpAQCAt Mjc1OCw2ICsyODc3LDE2IEBAIGtlZXBfZ29pbmc6CQkJCQkJLyogV2Ugd2lsbCBjb21lIGJhY2sg dG8gaGVyZSB1bnRpbCB0aGVyZSBpcwogCQkJCX0KIAkJCX0KIAorCQljYXNlIENPTk5FQ1RJT05f U1RBUlRJTkc6CisJCQl7CisJCQkJaWYgKCFjb25uZWN0REJTdGFydChjb25uKSkKKwkJCQl7CisJ CQkJCWdvdG8gZXJyb3JfcmV0dXJuOworCQkJCX0KKwkJCQljb25uLT5zdGF0dXMgPSBDT05ORUNU SU9OX1NUQVJURUQ7CisJCQkJcmV0dXJuIFBHUkVTX1BPTExJTkdfV1JJVElORzsKKwkJCX0KKwog CQljYXNlIENPTk5FQ1RJT05fU1RBUlRFRDoKIAkJCXsKIAkJCQlzb2NrbGVuX3QJb3B0bGVuID0g c2l6ZW9mKG9wdHZhbCk7CkBAIC0yOTY2LDYgKzMwOTUsMjUgQEAga2VlcF9nb2luZzoJCQkJCQkv KiBXZSB3aWxsIGNvbWUgYmFjayB0byBoZXJlIHVudGlsIHRoZXJlIGlzCiAJCQkJfQogI2VuZGlm CQkJCQkJCS8qIFVTRV9TU0wgKi8KIAorCQkJCWlmIChjb25uLT5jYW5jZWxSZXF1ZXN0KQorCQkJ CXsKKwkJCQkJQ2FuY2VsUmVxdWVzdFBhY2tldCBjYW5jZWxwYWNrZXQ7CisKKwkJCQkJcGFja2V0 bGVuID0gc2l6ZW9mKGNhbmNlbHBhY2tldCk7CisJCQkJCWNhbmNlbHBhY2tldC5jYW5jZWxSZXF1 ZXN0Q29kZSA9IChNc2dUeXBlKSBwZ19odG9uMzIoQ0FOQ0VMX1JFUVVFU1RfQ09ERSk7CisJCQkJ CWNhbmNlbHBhY2tldC5iYWNrZW5kUElEID0gcGdfaHRvbjMyKGNvbm4tPmJlX3BpZCk7CisJCQkJ CWNhbmNlbHBhY2tldC5jYW5jZWxBdXRoQ29kZSA9IHBnX2h0b24zMihjb25uLT5iZV9rZXkpOwor CQkJCQlpZiAocHFQYWNrZXRTZW5kKGNvbm4sIDAsICZjYW5jZWxwYWNrZXQsIHBhY2tldGxlbikg IT0gU1RBVFVTX09LKQorCQkJCQl7CisJCQkJCQlhcHBlbmRQUUV4cEJ1ZmZlcigmY29ubi0+ZXJy b3JNZXNzYWdlLAorCQkJCQkJCQkJCSAgbGlicHFfZ2V0dGV4dCgiY291bGQgbm90IHNlbmQgY2Fu Y2VsIHBhY2tldDogJXNcbiIpLAorCQkJCQkJCQkJCSAgU09DS19TVFJFUlJPUihTT0NLX0VSUk5P LCBzZWJ1Ziwgc2l6ZW9mKHNlYnVmKSkpOworCQkJCQkJZ290byBlcnJvcl9yZXR1cm47CisJCQkJ CX0KKwkJCQkJY29ubi0+c3RhdHVzID0gQ09OTkVDVElPTl9BV0FJVElOR19SRVNQT05TRTsKKwkJ CQkJcmV0dXJuIFBHUkVTX1BPTExJTkdfUkVBRElORzsKKwkJCQl9CisKIAkJCQkvKgogCQkJCSAq IEJ1aWxkIHRoZSBzdGFydHVwIHBhY2tldC4KIAkJCQkgKi8KQEAgLTQxOTQsNiArNDM0MiwxMSBA QCByZWxlYXNlX2Nvbm5fYWRkcmluZm8oUEdjb25uICpjb25uKQogc3RhdGljIHZvaWQKIHNlbmRU ZXJtaW5hdGVDb25uKFBHY29ubiAqY29ubikKIHsKKwlpZiAoY29ubi0+Y2FuY2VsUmVxdWVzdCkK Kwl7CisJCXJldHVybjsKKwl9CisKIAkvKgogCSAqIE5vdGUgdGhhdCB0aGUgcHJvdG9jb2wgZG9l c24ndCBhbGxvdyB1cyB0byBzZW5kIFRlcm1pbmF0ZSBtZXNzYWdlcwogCSAqIGR1cmluZyB0aGUg c3RhcnR1cCBwaGFzZS4KQEAgLTQzMTEsNiArNDQ2NCwxMiBAQCBQUXJlc2V0U3RhcnQoUEdjb25u ICpjb25uKQogCXsKIAkJY2xvc2VQR2Nvbm4oY29ubik7CiAKKwkJaWYgKGNvbm4tPmNhbmNlbFJl cXVlc3QpCisJCXsKKwkJCWNvbm4tPnN0YXR1cyA9IENPTk5FQ1RJT05fU1RBUlRJTkc7CisJCQly ZXR1cm4gMTsKKwkJfQorCiAJCXJldHVybiBjb25uZWN0REJTdGFydChjb25uKTsKIAl9CiAKQEAg LTQ2NjMsNiArNDgyMiwyMiBAQCBjYW5jZWxfZXJyUmV0dXJuOgogCXJldHVybiBmYWxzZTsKIH0K IAorLyoKKyAqIFBRY29ubmVjdENvbXBsZXRlOiB0YWtlcyBhIG5vbiBibG9ja2luZyBjYW5jZWwg Y29ubmVjdGlvbiBhbmQgY29tcGxldGVzIGl0CisgKiBpbiBhIGJsb2NraW5nIG1hbm5lci4KKyAq CisgKiBSZXR1cm5zIDEgaWYgYWJsZSB0byBjb25uZWN0IHN1Y2Nlc3NmdWxseSBhbmQgMCBpZiBu b3QuCisgKgorICogVGhpcyBjYW4gdXNlZnVsIGlmIHlvdSBvbmx5IGNhcmUgYWJvdXQgdGhlIHRo cmVhZCBzYWZldHkgb2YKKyAqIFBRcmVxdWVzdENhbmNlbFN0YXJ0IGFuZCBub3QgYWJvdXQgaXRz IG5vbiBibG9ja2luZyBmdW5jdGlvbmFsaXR5LgorICovCitpbnQKK1BRY29ubmVjdENvbXBsZXRl KFBHY29ubiAqY2FuY2VsQ29ubikKK3sKKwljb25uZWN0REJDb21wbGV0ZShjYW5jZWxDb25uKTsK KwlyZXR1cm4gY2FuY2VsQ29ubi0+c3RhdHVzICE9IENPTk5FQ1RJT05fQkFEOworfQorCiAKIC8q CiAgKiBQUXJlcXVlc3RDYW5jZWw6IG9sZCwgbm90IHRocmVhZC1zYWZlIGZ1bmN0aW9uIGZvciBy ZXF1ZXN0aW5nIHF1ZXJ5IGNhbmNlbApAQCAtNDY3OSw0NSArNDg1NCwzMSBAQCBjYW5jZWxfZXJy UmV0dXJuOgogaW50CiBQUXJlcXVlc3RDYW5jZWwoUEdjb25uICpjb25uKQogewotCWludAkJCXI7 Ci0JUEdjYW5jZWwgICAqY2FuY2VsOworCVBHY29ubgkgICAqY2FuY2VsQ29ubiA9IE5VTEw7CiAK LQkvKiBDaGVjayB3ZSBoYXZlIGFuIG9wZW4gY29ubmVjdGlvbiAqLwotCWlmICghY29ubikKLQkJ cmV0dXJuIGZhbHNlOwotCi0JaWYgKGNvbm4tPnNvY2sgPT0gUEdJTlZBTElEX1NPQ0tFVCkKKwlj YW5jZWxDb25uID0gUFFyZXF1ZXN0Q2FuY2VsU3RhcnQoY29ubik7CisJaWYgKCFjYW5jZWxDb25u KQogCXsKLQkJc3RybGNweShjb25uLT5lcnJvck1lc3NhZ2UuZGF0YSwKLQkJCQkiUFFyZXF1ZXN0 Q2FuY2VsKCkgLS0gY29ubmVjdGlvbiBpcyBub3Qgb3BlblxuIiwKLQkJCQljb25uLT5lcnJvck1l c3NhZ2UubWF4bGVuKTsKLQkJY29ubi0+ZXJyb3JNZXNzYWdlLmxlbiA9IHN0cmxlbihjb25uLT5l cnJvck1lc3NhZ2UuZGF0YSk7Ci0JCWNvbm4tPmVycm9yUmVwb3J0ZWQgPSAwOwotCisJCWFwcGVu ZFBRRXhwQnVmZmVyU3RyKCZjb25uLT5lcnJvck1lc3NhZ2UsIGxpYnBxX2dldHRleHQoIm91dCBv ZiBtZW1vcnlcbiIpKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAotCWNhbmNlbCA9IFBRZ2V0Q2Fu Y2VsKGNvbm4pOwotCWlmIChjYW5jZWwpCi0JewotCQlyID0gUFFjYW5jZWwoY2FuY2VsLCBjb25u LT5lcnJvck1lc3NhZ2UuZGF0YSwKLQkJCQkJIGNvbm4tPmVycm9yTWVzc2FnZS5tYXhsZW4pOwot CQlQUWZyZWVDYW5jZWwoY2FuY2VsKTsKLQl9Ci0JZWxzZQorCWlmIChjYW5jZWxDb25uLT5zdGF0 dXMgPT0gQ09OTkVDVElPTl9CQUQpCiAJewotCQlzdHJsY3B5KGNvbm4tPmVycm9yTWVzc2FnZS5k YXRhLCAib3V0IG9mIG1lbW9yeSIsCi0JCQkJY29ubi0+ZXJyb3JNZXNzYWdlLm1heGxlbik7Ci0J CXIgPSBmYWxzZTsKKwkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNvbm4tPmVycm9yTWVzc2FnZSwg UFFlcnJvck1lc3NhZ2UoY2FuY2VsQ29ubikpOworCQlmcmVlUEdjb25uKGNhbmNlbENvbm4pOwor CQlyZXR1cm4gZmFsc2U7CiAJfQogCi0JaWYgKCFyKQorCWlmICghUFFjb25uZWN0Q29tcGxldGUo Y2FuY2VsQ29ubikpCiAJewotCQljb25uLT5lcnJvck1lc3NhZ2UubGVuID0gc3RybGVuKGNvbm4t PmVycm9yTWVzc2FnZS5kYXRhKTsKLQkJY29ubi0+ZXJyb3JSZXBvcnRlZCA9IDA7CisJCWFwcGVu ZFBRRXhwQnVmZmVyU3RyKCZjb25uLT5lcnJvck1lc3NhZ2UsIFBRZXJyb3JNZXNzYWdlKGNhbmNl bENvbm4pKTsKKwkJZnJlZVBHY29ubihjYW5jZWxDb25uKTsKKwkJcmV0dXJuIGZhbHNlOwogCX0K IAotCXJldHVybiByOworCWZyZWVQR2Nvbm4oY2FuY2VsQ29ubik7CisJcmV0dXJuIHRydWU7CiB9 CiAKIApkaWZmIC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtbWlzYy5jIGIvc3JjL2lu dGVyZmFjZXMvbGlicHEvZmUtbWlzYy5jCmluZGV4IGQ3NmJiMzk1N2EuLmE5NDRjYjJjMTIgMTAw NjQ0Ci0tLSBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLW1pc2MuYworKysgYi9zcmMvaW50ZXJm YWNlcy9saWJwcS9mZS1taXNjLmMKQEAgLTU1OCw4ICs1NTgsMTEgQEAgcHFQdXRNc2dFbmQoUEdj b25uICpjb25uKQogICogUG9zc2libGUgcmV0dXJuIHZhbHVlczoKICAqCSAxOiBzdWNjZXNzZnVs bHkgbG9hZGVkIGF0IGxlYXN0IG9uZSBtb3JlIGJ5dGUKICAqCSAwOiBubyBkYXRhIGlzIHByZXNl bnRseSBhdmFpbGFibGUsIGJ1dCBubyBlcnJvciBkZXRlY3RlZAotICoJLTE6IGVycm9yIGRldGVj dGVkIChpbmNsdWRpbmcgRU9GID0gY29ubmVjdGlvbiBjbG9zdXJlKTsKKyAqCS0xOiBlcnJvciBk ZXRlY3RlZCAoZXhjbHVkaW5nIEVPRiA9IGNvbm5lY3Rpb24gY2xvc3VyZSk7CiAgKgkJY29ubi0+ ZXJyb3JNZXNzYWdlIHNldAorICoJLTI6IEVPRiBkZXRlY3RlZCwgY29ubmVjdGlvbiBpcyBjbG9z ZWQKKyAqCQljb25uLT5lcnJvck1lc3NhZ2Ugc2V0CisgKgogICogTk9URTogY2FsbGVycyBtdXN0 IG5vdCBhc3N1bWUgdGhhdCBwb2ludGVycyBvciBpbmRleGVzIGludG8gY29ubi0+aW5CdWZmZXIK ICAqIHJlbWFpbiB2YWxpZCBhY3Jvc3MgdGhpcyBjYWxsIQogICogLS0tLS0tLS0tLQpAQCAtNjQy LDcgKzY0NSw3IEBAIHJldHJ5MzoKIAogCQkJZGVmYXVsdDoKIAkJCQkvKiBwcXNlY3VyZV9yZWFk IHNldCB0aGUgZXJyb3IgbWVzc2FnZSBmb3IgdXMgKi8KLQkJCQlyZXR1cm4gLTE7CisJCQkJcmV0 dXJuIG5yZWFkOwogCQl9CiAJfQogCWlmIChucmVhZCA+IDApCkBAIC03MzcsNyArNzQwLDcgQEAg cmV0cnk0OgogCiAJCQlkZWZhdWx0OgogCQkJCS8qIHBxc2VjdXJlX3JlYWQgc2V0IHRoZSBlcnJv ciBtZXNzYWdlIGZvciB1cyAqLwotCQkJCXJldHVybiAtMTsKKwkJCQlyZXR1cm4gbnJlYWQ7CiAJ CX0KIAl9CiAJaWYgKG5yZWFkID4gMCkKQEAgLTc1NSwxMyArNzU4LDE3IEBAIGRlZmluaXRlbHlF T0Y6CiAJCQkJCQkgbGlicHFfZ2V0dGV4dCgic2VydmVyIGNsb3NlZCB0aGUgY29ubmVjdGlvbiB1 bmV4cGVjdGVkbHlcbiIKIAkJCQkJCQkJCSAgICJcdFRoaXMgcHJvYmFibHkgbWVhbnMgdGhlIHNl cnZlciB0ZXJtaW5hdGVkIGFibm9ybWFsbHlcbiIKIAkJCQkJCQkJCSAgICJcdGJlZm9yZSBvciB3 aGlsZSBwcm9jZXNzaW5nIHRoZSByZXF1ZXN0LlxuIikpOworCS8qIERvICpub3QqIGRyb3AgYW55 IGFscmVhZHktcmVhZCBkYXRhOyBjYWxsZXIgc3RpbGwgd2FudHMgaXQgKi8KKwlwcURyb3BDb25u ZWN0aW9uKGNvbm4sIGZhbHNlKTsKKwljb25uLT5zdGF0dXMgPSBDT05ORUNUSU9OX0JBRDsJLyog Tm8gbW9yZSBjb25uZWN0aW9uIHRvIGJhY2tlbmQgKi8KKwlyZXR1cm4gLTI7CiAKIAkvKiBDb21l IGhlcmUgaWYgbG93ZXItbGV2ZWwgY29kZSBhbHJlYWR5IHNldCBhIHN1aXRhYmxlIGVycm9yTWVz c2FnZSAqLwogZGVmaW5pdGVseUZhaWxlZDoKIAkvKiBEbyAqbm90KiBkcm9wIGFueSBhbHJlYWR5 LXJlYWQgZGF0YTsgY2FsbGVyIHN0aWxsIHdhbnRzIGl0ICovCiAJcHFEcm9wQ29ubmVjdGlvbihj b25uLCBmYWxzZSk7CiAJY29ubi0+c3RhdHVzID0gQ09OTkVDVElPTl9CQUQ7CS8qIE5vIG1vcmUg Y29ubmVjdGlvbiB0byBiYWNrZW5kICovCi0JcmV0dXJuIC0xOworCXJldHVybiBucmVhZCA8IDAg PyBucmVhZCA6IC0xOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMvbGlicHEv ZmUtc2VjdXJlLW9wZW5zc2wuYyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLXNlY3VyZS1vcGVu c3NsLmMKaW5kZXggZDNiZjU3Yjg1MC4uNGZmYWVhNjNjMSAxMDA2NDQKLS0tIGEvc3JjL2ludGVy ZmFjZXMvbGlicHEvZmUtc2VjdXJlLW9wZW5zc2wuYworKysgYi9zcmMvaW50ZXJmYWNlcy9saWJw cS9mZS1zZWN1cmUtb3BlbnNzbC5jCkBAIC0yNTIsNyArMjUyLDcgQEAgcmxvb3A6CiAJCQlhcHBl bmRQUUV4cEJ1ZmZlclN0cigmY29ubi0+ZXJyb3JNZXNzYWdlLAogCQkJCQkJCQkgbGlicHFfZ2V0 dGV4dCgiU1NMIGNvbm5lY3Rpb24gaGFzIGJlZW4gY2xvc2VkIHVuZXhwZWN0ZWRseVxuIikpOwog CQkJcmVzdWx0X2Vycm5vID0gRUNPTk5SRVNFVDsKLQkJCW4gPSAtMTsKKwkJCW4gPSAtMjsKIAkJ CWJyZWFrOwogCQlkZWZhdWx0OgogCQkJYXBwZW5kUFFFeHBCdWZmZXIoJmNvbm4tPmVycm9yTWVz c2FnZSwKZGlmZiAtLWdpdCBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLXNlY3VyZS5jIGIvc3Jj L2ludGVyZmFjZXMvbGlicHEvZmUtc2VjdXJlLmMKaW5kZXggYTFkYzdiNzk2ZC4uOTc3MTgwNWRk MyAxMDA2NDQKLS0tIGEvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtc2VjdXJlLmMKKysrIGIvc3Jj L2ludGVyZmFjZXMvbGlicHEvZmUtc2VjdXJlLmMKQEAgLTIwMSw2ICsyMDEsMTIgQEAgcHFzZWN1 cmVfY2xvc2UoUEdjb25uICpjb25uKQogICogT24gZmFpbHVyZSwgdGhpcyBmdW5jdGlvbiBpcyBy ZXNwb25zaWJsZSBmb3IgYXBwZW5kaW5nIGEgc3VpdGFibGUgbWVzc2FnZQogICogdG8gY29ubi0+ ZXJyb3JNZXNzYWdlLiAgVGhlIGNhbGxlciBtdXN0IHN0aWxsIGluc3BlY3QgZXJybm8sIGJ1dCBv bmx5CiAgKiB0byBkZXRlcm1pbmUgd2hldGhlciB0byBjb250aW51ZS9yZXRyeSBhZnRlciBlcnJv ci4KKyAqCisgKiBSZXR1cm5zIC0xIGluIGNhc2Ugb2YgZmFpbHVyZXMsIGV4Y2VwdCBpbiB0aGUg Y2FzZSBvZiB3aGVyZSBhIGZhaWx1cmUgbWVhbnMKKyAqIHRoYXQgdGhlcmUgd2FzIGEgY2xlYW4g Y29ubmVjdGlvbiBjbG9zdXJlLCBpbiB0aG9zZSBjYXNlcyAtMiBpcyByZXR1cm4uCisgKiBDdXJy ZW50bHkgb25seSB0aGUgVExTIGltcGxlbWVudGF0aW9uIG9mIHBxc2VjdXJlX3JlYWQgZXZlciBy ZXR1cm5zIC0yLiBGb3IKKyAqIHRoZSBvdGhlciBpbXBsZW1lbnRhdGlvbnMgYSBjbGVhbiBjb25u ZWN0aW9uIGNsb3N1cmUgaXMgZGV0ZWN0ZWQgaW4KKyAqIHBxUmVhZERhdGEgaW5zdGVhZC4KICAq Lwogc3NpemVfdAogcHFzZWN1cmVfcmVhZChQR2Nvbm4gKmNvbm4sIHZvaWQgKnB0ciwgc2l6ZV90 IGxlbikKZGlmZiAtLWdpdCBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2xpYnBxLWZlLmggYi9zcmMv aW50ZXJmYWNlcy9saWJwcS9saWJwcS1mZS5oCmluZGV4IDc5ODY0NDVmMWEuLjQyMzY3ZDQ4ODYg MTAwNjQ0Ci0tLSBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2xpYnBxLWZlLmgKKysrIGIvc3JjL2lu dGVyZmFjZXMvbGlicHEvbGlicHEtZmUuaApAQCAtNTksMTIgKzU5LDE1IEBAIHR5cGVkZWYgZW51 bQogewogCUNPTk5FQ1RJT05fT0ssCiAJQ09OTkVDVElPTl9CQUQsCisJQ09OTkVDVElPTl9DQU5D RUxfRklOSVNIRUQsCiAJLyogTm9uLWJsb2NraW5nIG1vZGUgb25seSBiZWxvdyBoZXJlICovCiAK IAkvKgogCSAqIFRoZSBleGlzdGVuY2Ugb2YgdGhlc2Ugc2hvdWxkIG5ldmVyIGJlIHJlbGllZCB1 cG9uIC0gdGhleSBzaG91bGQgb25seQogCSAqIGJlIHVzZWQgZm9yIHVzZXIgZmVlZGJhY2sgb3Ig c2ltaWxhciBwdXJwb3Nlcy4KIAkgKi8KKwlDT05ORUNUSU9OX1NUQVJUSU5HLAkJLyogV2FpdGlu ZyBmb3IgY29ubmVjdGlvbiBhdHRlbXB0IHRvIGJlCisJCQkJCQkJCSAqIHN0YXJ0ZWQuICAqLwog CUNPTk5FQ1RJT05fU1RBUlRFRCwJCQkvKiBXYWl0aW5nIGZvciBjb25uZWN0aW9uIHRvIGJlIG1h ZGUuICAqLwogCUNPTk5FQ1RJT05fTUFERSwJCQkvKiBDb25uZWN0aW9uIE9LOyB3YWl0aW5nIHRv IHNlbmQuICAgICAqLwogCUNPTk5FQ1RJT05fQVdBSVRJTkdfUkVTUE9OU0UsCS8qIFdhaXRpbmcg Zm9yIGEgcmVzcG9uc2UgZnJvbSB0aGUKQEAgLTE2NSw2ICsxNjgsMTAgQEAgdHlwZWRlZiBlbnVt CiAgKi8KIHR5cGVkZWYgc3RydWN0IHBnX2Nvbm4gUEdjb25uOwogCisvKiBQR2NhbmNlbENvbm4g ZW5jYXBzdWxhdGVzIGEgY2FuY2VsIGNvbm5lY3Rpb24gdG8gdGhlIGJhY2tlbmQuCisgKiBUaGUg Y29udGVudHMgb2YgdGhpcyBzdHJ1Y3QgYXJlIG5vdCBzdXBwb3NlZCB0byBiZSBrbm93biB0byBh cHBsaWNhdGlvbnMuCisgKi8KKwogLyogUEdyZXN1bHQgZW5jYXBzdWxhdGVzIHRoZSByZXN1bHQg b2YgYSBxdWVyeSAob3IgbW9yZSBwcmVjaXNlbHksIG9mIGEgc2luZ2xlCiAgKiBTUUwgY29tbWFu ZCAtLS0gYSBxdWVyeSBzdHJpbmcgZ2l2ZW4gdG8gUFFzZW5kUXVlcnkgY2FuIGNvbnRhaW4gbXVs dGlwbGUKICAqIGNvbW1hbmRzIGFuZCB0aHVzIHJldHVybiBtdWx0aXBsZSBQR3Jlc3VsdCBvYmpl Y3RzKS4KQEAgLTI4Miw2ICsyODksNyBAQCBleHRlcm4gUEdjb25uICpQUWNvbm5lY3RTdGFydChj b25zdCBjaGFyICpjb25uaW5mbyk7CiBleHRlcm4gUEdjb25uICpQUWNvbm5lY3RTdGFydFBhcmFt cyhjb25zdCBjaGFyICpjb25zdCAqa2V5d29yZHMsCiAJCQkJCQkJCQljb25zdCBjaGFyICpjb25z dCAqdmFsdWVzLCBpbnQgZXhwYW5kX2RibmFtZSk7CiBleHRlcm4gUG9zdGdyZXNQb2xsaW5nU3Rh dHVzVHlwZSBQUWNvbm5lY3RQb2xsKFBHY29ubiAqY29ubik7CitleHRlcm4gaW50CVBRY29ubmVj dENvbXBsZXRlKFBHY29ubiAqY29ubik7CiAKIC8qIFN5bmNocm9ub3VzIChibG9ja2luZykgKi8K IGV4dGVybiBQR2Nvbm4gKlBRY29ubmVjdGRiKGNvbnN0IGNoYXIgKmNvbm5pbmZvKTsKQEAgLTMz MCw5ICszMzgsMTIgQEAgZXh0ZXJuIHZvaWQgUFFmcmVlQ2FuY2VsKFBHY2FuY2VsICpjYW5jZWwp OwogLyogaXNzdWUgYSBjYW5jZWwgcmVxdWVzdCAqLwogZXh0ZXJuIGludAlQUWNhbmNlbChQR2Nh bmNlbCAqY2FuY2VsLCBjaGFyICplcnJidWYsIGludCBlcnJidWZzaXplKTsKIAotLyogYmFja3dh cmRzIGNvbXBhdGlibGUgdmVyc2lvbiBvZiBQUWNhbmNlbDsgbm90IHRocmVhZC1zYWZlICovCisv KiBtb3JlIHNlY3VyZSB2ZXJzaW9uIG9mIFBRY2FuY2VsICovCiBleHRlcm4gaW50CVBRcmVxdWVz dENhbmNlbChQR2Nvbm4gKmNvbm4pOwogCisvKiBub24gYmxvY2tpbmcgYW5kIHRocmVhZCBzYWZl IHZlcnNpb24gb2YgUFFyZXF1ZXN0Q2FuY2VsICovCitleHRlcm4gUEdjb25uICpQUXJlcXVlc3RD YW5jZWxTdGFydChQR2Nvbm4gKmNvbm4pOworCiAvKiBBY2Nlc3NvciBmdW5jdGlvbnMgZm9yIFBH Y29ubiBvYmplY3RzICovCiBleHRlcm4gY2hhciAqUFFkYihjb25zdCBQR2Nvbm4gKmNvbm4pOwog ZXh0ZXJuIGNoYXIgKlBRdXNlcihjb25zdCBQR2Nvbm4gKmNvbm4pOwpkaWZmIC0tZ2l0IGEvc3Jj L2ludGVyZmFjZXMvbGlicHEvbGlicHEtaW50LmggYi9zcmMvaW50ZXJmYWNlcy9saWJwcS9saWJw cS1pbnQuaAppbmRleCBlMGNlZTRiMTQyLi5mZjk1NTVlMjYzIDEwMDY0NAotLS0gYS9zcmMvaW50 ZXJmYWNlcy9saWJwcS9saWJwcS1pbnQuaAorKysgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS9saWJw cS1pbnQuaApAQCAtMzk0LDYgKzM5NCw4IEBAIHN0cnVjdCBwZ19jb25uCiAJY2hhcgkgICAqc3Ns X21heF9wcm90b2NvbF92ZXJzaW9uOwkvKiBtYXhpbXVtIFRMUyBwcm90b2NvbCB2ZXJzaW9uICov CiAJY2hhcgkgICAqdGFyZ2V0X3Nlc3Npb25fYXR0cnM7CS8qIGRlc2lyZWQgc2Vzc2lvbiBwcm9w ZXJ0aWVzICovCiAKKwlib29sCQljYW5jZWxSZXF1ZXN0OworCiAJLyogT3B0aW9uYWwgZmlsZSB0 byB3cml0ZSB0cmFjZSBpbmZvIHRvICovCiAJRklMRQkgICAqUGZkZWJ1ZzsKIAlpbnQJCQl0cmFj ZUZsYWdzOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvaXNvbGF0aW9uL2lzb2xhdGlvbnRlc3Rlci5j IGIvc3JjL3Rlc3QvaXNvbGF0aW9uL2lzb2xhdGlvbnRlc3Rlci5jCmluZGV4IDEyMTc5ZjI1MTQu LmZlMWNhMTY4YzggMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L2lzb2xhdGlvbi9pc29sYXRpb250ZXN0 ZXIuYworKysgYi9zcmMvdGVzdC9pc29sYXRpb24vaXNvbGF0aW9udGVzdGVyLmMKQEAgLTk0OCwy NiArOTQ4LDE3IEBAIHRyeV9jb21wbGV0ZV9zdGVwKFRlc3RTcGVjICp0ZXN0c3BlYywgUGVybXV0 YXRpb25TdGVwICpwc3RlcCwgaW50IGZsYWdzKQogCQkJICovCiAJCQlpZiAodGQgPiBtYXhfc3Rl cF93YWl0ICYmICFjYW5jZWxlZCkKIAkJCXsKLQkJCQlQR2NhbmNlbCAgICpjYW5jZWwgPSBQUWdl dENhbmNlbChjb25uKTsKLQotCQkJCWlmIChjYW5jZWwgIT0gTlVMTCkKLQkJCQl7Ci0JCQkJCWNo YXIJCWJ1ZlsyNTZdOwotCi0JCQkJCWlmIChQUWNhbmNlbChjYW5jZWwsIGJ1Ziwgc2l6ZW9mKGJ1 ZikpKQotCQkJCQl7Ci0JCQkJCQkvKgotCQkJCQkJICogcHJpbnQgdG8gc3Rkb3V0IG5vdCBzdGRl cnIsIGFzIHRoaXMgc2hvdWxkIGFwcGVhcgotCQkJCQkJICogaW4gdGhlIHRlc3QgY2FzZSdzIHJl c3VsdHMKLQkJCQkJCSAqLwotCQkJCQkJcHJpbnRmKCJpc29sYXRpb250ZXN0ZXI6IGNhbmNlbGlu ZyBzdGVwICVzIGFmdGVyICVkIHNlY29uZHNcbiIsCi0JCQkJCQkJICAgc3RlcC0+bmFtZSwgKGlu dCkgKHRkIC8gVVNFQ1NfUEVSX1NFQykpOwotCQkJCQkJY2FuY2VsZWQgPSB0cnVlOwotCQkJCQl9 Ci0JCQkJCWVsc2UKLQkJCQkJCWZwcmludGYoc3RkZXJyLCAiUFFjYW5jZWwgZmFpbGVkOiAlc1xu IiwgYnVmKTsKLQkJCQkJUFFmcmVlQ2FuY2VsKGNhbmNlbCk7CisJCQkJaWYgKFBRcmVxdWVzdENh bmNlbChjb25uKSkgeworCQkJCQkvKgorCQkJCQkgKiBwcmludCB0byBzdGRvdXQgbm90IHN0ZGVy ciwgYXMgdGhpcyBzaG91bGQgYXBwZWFyCisJCQkJCSAqIGluIHRoZSB0ZXN0IGNhc2UncyByZXN1 bHRzCisJCQkJCSAqLworCQkJCQlwcmludGYoImlzb2xhdGlvbnRlc3RlcjogY2FuY2VsaW5nIHN0 ZXAgJXMgYWZ0ZXIgJWQgc2Vjb25kc1xuIiwKKwkJCQkJCSAgIHN0ZXAtPm5hbWUsIChpbnQpICh0 ZCAvIFVTRUNTX1BFUl9TRUMpKTsKKwkJCQkJY2FuY2VsZWQgPSB0cnVlOwogCQkJCX0KKwkJCQll bHNlCisJCQkJCWZwcmludGYoc3RkZXJyLCAiUFFjYW5jZWwgZmFpbGVkOiAlc1xuIiwgUFFlcnJv ck1lc3NhZ2UoY29ubikpOwogCQkJfQogCiAJCQkvKgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9k dWxlcy9saWJwcV9waXBlbGluZS9saWJwcV9waXBlbGluZS5jIGIvc3JjL3Rlc3QvbW9kdWxlcy9s aWJwcV9waXBlbGluZS9saWJwcV9waXBlbGluZS5jCmluZGV4IDBmZjU2M2Y1OWEuLjk1ZjFkNWVi MmYgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvbGlicHFfcGlwZWxpbmUvbGlicHFfcGlw ZWxpbmUuYworKysgYi9zcmMvdGVzdC9tb2R1bGVzL2xpYnBxX3BpcGVsaW5lL2xpYnBxX3BpcGVs aW5lLmMKQEAgLTg2LDYgKzg2LDIxNSBAQCBwZ19mYXRhbF9pbXBsKGludCBsaW5lLCBjb25zdCBj aGFyICpmbXQsLi4uKQogCWV4aXQoMSk7CiB9CiAKK3N0YXRpYyB2b2lkCitjb25maXJtX3F1ZXJ5 X2NhbmNlbGxlZChQR2Nvbm4gKmNvbm4pCit7CisJUEdyZXN1bHQgICAqcmVzID0gTlVMTDsKKwor CXJlcyA9IFBRZ2V0UmVzdWx0KGNvbm4pOworCWlmIChyZXMgPT0gTlVMTCkKKwkJcGdfZmF0YWwo IlBRZ2V0UmVzdWx0IHJldHVybmVkIG51bGw6ICVzIiwKKwkJCQkgUFFlcnJvck1lc3NhZ2UoY29u bikpOworCWlmIChQUXJlc3VsdFN0YXR1cyhyZXMpICE9IFBHUkVTX0ZBVEFMX0VSUk9SKQorCQlw Z19mYXRhbCgicXVlcnkgZGlkIG5vdCBmYWlsIHdoZW4gaXQgd2FzIGV4cGVjdGVkIik7CisJaWYg KHN0cmNtcChQUXJlc3VsdEVycm9yRmllbGQocmVzLCBQR19ESUFHX1NRTFNUQVRFKSwgIjU3MDE0 IikgIT0gMCkKKwkJcGdfZmF0YWwoInF1ZXJ5IGZhaWxlZCB3aXRoIGEgZGlmZmVyZW50IGVycm9y IHRoYW4gY2FuY2VsbGF0aW9uOiAlcyIsIFBRZXJyb3JNZXNzYWdlKGNvbm4pKTsKKwlQUWNsZWFy KHJlcyk7CisJd2hpbGUgKFBRaXNCdXN5KGNvbm4pKQorCXsKKwkJUFFjb25zdW1lSW5wdXQoY29u bik7CisJfQorfQorCitzdGF0aWMgdm9pZAordGVzdF9jYW5jZWwoUEdjb25uICpjb25uKQorewor CVBHY2FuY2VsICAgKmNhbmNlbCA9IE5VTEw7CisJUEdjb25uCSAgICpjYW5jZWxDb25uID0gTlVM TDsKKwljaGFyCQllcnJvcmJ1ZlsyNTZdOworCisJZnByaW50ZihzdGRlcnIsICJ0ZXN0IGNhbmNl bGxhdGlvbnMuLi4gIik7CisKKwlpZiAoUFFzZXRub25ibG9ja2luZyhjb25uLCAxKSAhPSAwKQor CQlwZ19mYXRhbCgiZmFpbGVkIHRvIHNldCBub25ibG9ja2luZyBtb2RlOiAlcyIsIFBRZXJyb3JN ZXNzYWdlKGNvbm4pKTsKKworCS8qIHRlc3QgUFFjYW5jZWwgKi8KKwlpZiAoUFFzZW5kUXVlcnko Y29ubiwgIlNFTEVDVCBwZ19zbGVlcCgzKSIpICE9IDEpCisJCXBnX2ZhdGFsKCJmYWlsZWQgdG8g c2VuZCBxdWVyeTogJXMiLCBQUWVycm9yTWVzc2FnZShjb25uKSk7CisJY2FuY2VsID0gUFFnZXRD YW5jZWwoY29ubik7CisJaWYgKCFQUWNhbmNlbChjYW5jZWwsIGVycm9yYnVmLCBzaXplb2YoZXJy b3JidWYpKSkKKwl7CisJCXBnX2ZhdGFsKCJmYWlsZWQgdG8gcnVuIFBRY2FuY2VsOiAlcyIsIGVy cm9yYnVmKTsKKwl9OworCWNvbmZpcm1fcXVlcnlfY2FuY2VsbGVkKGNvbm4pOworCisJLyogUEdj YW5jZWwgb2JqZWN0IGNhbiBiZSByZXVzZWQgZm9yIHRoZSBuZXh0IHF1ZXJ5ICovCisJaWYgKFBR c2VuZFF1ZXJ5KGNvbm4sICJTRUxFQ1QgcGdfc2xlZXAoMykiKSAhPSAxKQorCQlwZ19mYXRhbCgi ZmFpbGVkIHRvIHNlbmQgcXVlcnk6ICVzIiwgUFFlcnJvck1lc3NhZ2UoY29ubikpOworCWlmICgh UFFjYW5jZWwoY2FuY2VsLCBlcnJvcmJ1Ziwgc2l6ZW9mKGVycm9yYnVmKSkpCisJeworCQlwZ19m YXRhbCgiZmFpbGVkIHRvIHJ1biBQUWNhbmNlbDogJXMiLCBlcnJvcmJ1Zik7CisJfTsKKwljb25m aXJtX3F1ZXJ5X2NhbmNlbGxlZChjb25uKTsKKworCVBRZnJlZUNhbmNlbChjYW5jZWwpOworCisJ LyogdGVzdCBQUXJlcXVlc3RDYW5jZWwgKi8KKwlpZiAoUFFzZW5kUXVlcnkoY29ubiwgIlNFTEVD VCBwZ19zbGVlcCgzKSIpICE9IDEpCisJCXBnX2ZhdGFsKCJmYWlsZWQgdG8gc2VuZCBxdWVyeTog JXMiLCBQUWVycm9yTWVzc2FnZShjb25uKSk7CisJaWYgKCFQUXJlcXVlc3RDYW5jZWwoY29ubikp CisJCXBnX2ZhdGFsKCJmYWlsZWQgdG8gcnVuIFBRcmVxdWVzdENhbmNlbDogJXMiLCBQUWVycm9y TWVzc2FnZShjb25uKSk7CisJY29uZmlybV9xdWVyeV9jYW5jZWxsZWQoY29ubik7CisKKwkvKiB0 ZXN0IFBRcmVxdWVzdENhbmNlbFN0YXJ0IGFuZCB0aGVuIHBvbGxpbmcgd2l0aCBQUWNhbmNlbENv bm5lY3RQb2xsICovCisJaWYgKFBRc2VuZFF1ZXJ5KGNvbm4sICJTRUxFQ1QgcGdfc2xlZXAoMyki KSAhPSAxKQorCQlwZ19mYXRhbCgiZmFpbGVkIHRvIHNlbmQgcXVlcnk6ICVzIiwgUFFlcnJvck1l c3NhZ2UoY29ubikpOworCWNhbmNlbENvbm4gPSBQUXJlcXVlc3RDYW5jZWxTdGFydChjb25uKTsK KwlpZiAoUFFzdGF0dXMoY2FuY2VsQ29ubikgPT0gQ09OTkVDVElPTl9CQUQpCisJCXBnX2ZhdGFs KCJiYWQgY2FuY2VsIGNvbm5lY3Rpb246ICVzIiwgUFFlcnJvck1lc3NhZ2UoY2FuY2VsQ29ubikp OworCXdoaWxlICh0cnVlKQorCXsKKwkJc3RydWN0IHRpbWV2YWwgdHY7CisJCWZkX3NldAkJaW5w dXRfbWFzazsKKwkJZmRfc2V0CQlvdXRwdXRfbWFzazsKKwkJUG9zdGdyZXNQb2xsaW5nU3RhdHVz VHlwZSBwb2xscmVzID0gUFFjb25uZWN0UG9sbChjYW5jZWxDb25uKTsKKwkJaW50CQkJc29jayA9 IFBRc29ja2V0KGNhbmNlbENvbm4pOworCisJCWlmIChwb2xscmVzID09IFBHUkVTX1BPTExJTkdf T0spCisJCXsKKwkJCWJyZWFrOworCQl9CisKKwkJRkRfWkVSTygmaW5wdXRfbWFzayk7CisJCUZE X1pFUk8oJm91dHB1dF9tYXNrKTsKKwkJc3dpdGNoIChwb2xscmVzKQorCQl7CisJCQljYXNlIFBH UkVTX1BPTExJTkdfUkVBRElORzoKKwkJCQlwZ19kZWJ1ZygicG9sbGluZyBmb3IgcmVhZHNcbiIp OworCQkJCUZEX1NFVChzb2NrLCAmaW5wdXRfbWFzayk7CisJCQkJYnJlYWs7CisJCQljYXNlIFBH UkVTX1BPTExJTkdfV1JJVElORzoKKwkJCQlwZ19kZWJ1ZygicG9sbGluZyBmb3Igd3JpdGVzXG4i KTsKKwkJCQlGRF9TRVQoc29jaywgJm91dHB1dF9tYXNrKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1 bHQ6CisJCQkJcGdfZmF0YWwoImJhZCBjYW5jZWwgY29ubmVjdGlvbjogJXMiLCBQUWVycm9yTWVz c2FnZShjYW5jZWxDb25uKSk7CisJCX0KKworCQlpZiAoc29jayA8IDApCisJCQlwZ19mYXRhbCgi c29jayBkaWQgbm90IGV4aXN0OiAlcyIsIFBRZXJyb3JNZXNzYWdlKGNhbmNlbENvbm4pKTsKKwor CQl0di50dl9zZWMgPSAzOworCQl0di50dl91c2VjID0gMDsKKworCQl3aGlsZSAodHJ1ZSkKKwkJ eworCQkJaWYgKHNlbGVjdChzb2NrICsgMSwgJmlucHV0X21hc2ssICZvdXRwdXRfbWFzaywgTlVM TCwgJnR2KSA8IDApCisJCQl7CisJCQkJaWYgKGVycm5vID09IEVJTlRSKQorCQkJCQljb250aW51 ZTsKKwkJCQlwZ19mYXRhbCgic2VsZWN0KCkgZmFpbGVkOiAlbSIpOworCQkJfQorCQkJYnJlYWs7 CisJCX0KKwl9CisJaWYgKFBRc3RhdHVzKGNhbmNlbENvbm4pICE9IENPTk5FQ1RJT05fQ0FOQ0VM X0ZJTklTSEVEKQorCQlwZ19mYXRhbCgidW5leHBlY3RlZCBjYW5jZWwgY29ubmVjdGlvbiBzdGF0 dXM6ICVzIiwgUFFlcnJvck1lc3NhZ2UoY2FuY2VsQ29ubikpOworCWNvbmZpcm1fcXVlcnlfY2Fu Y2VsbGVkKGNvbm4pOworCisJLyoKKwkgKiB0ZXN0IFBRcmVzZXRTdGFydCB3b3JrcyBvbiB0aGUg Y2FuY2VsIGNvbm5lY3Rpb24gYW5kIGl0IGNhbiBiZSByZXVzZWQKKwkgKiBhZnRlcgorCSAqLwor CWlmICghUFFyZXNldFN0YXJ0KGNhbmNlbENvbm4pKQorCXsKKwkJcGdfZmF0YWwoImNhbmNlbCBj b25uZWN0aW9uIHJlc2V0IGZhaWxlZDogJXMiLCBQUWVycm9yTWVzc2FnZShjYW5jZWxDb25uKSk7 CisJfQorCisJaWYgKFBRc2VuZFF1ZXJ5KGNvbm4sICJTRUxFQ1QgcGdfc2xlZXAoMykiKSAhPSAx KQorCQlwZ19mYXRhbCgiZmFpbGVkIHRvIHNlbmQgcXVlcnk6ICVzIiwgUFFlcnJvck1lc3NhZ2Uo Y29ubikpOworCWlmIChQUXN0YXR1cyhjYW5jZWxDb25uKSA9PSBDT05ORUNUSU9OX0JBRCkKKwkJ cGdfZmF0YWwoImJhZCBjYW5jZWwgY29ubmVjdGlvbjogJXMiLCBQUWVycm9yTWVzc2FnZShjYW5j ZWxDb25uKSk7CisJd2hpbGUgKHRydWUpCisJeworCQlzdHJ1Y3QgdGltZXZhbCB0djsKKwkJZmRf c2V0CQlpbnB1dF9tYXNrOworCQlmZF9zZXQJCW91dHB1dF9tYXNrOworCQlQb3N0Z3Jlc1BvbGxp bmdTdGF0dXNUeXBlIHBvbGxyZXMgPSBQUXJlc2V0UG9sbChjYW5jZWxDb25uKTsKKwkJaW50CQkJ c29jayA9IFBRc29ja2V0KGNhbmNlbENvbm4pOworCisJCWlmIChwb2xscmVzID09IFBHUkVTX1BP TExJTkdfT0spCisJCXsKKwkJCWJyZWFrOworCQl9CisKKwkJRkRfWkVSTygmaW5wdXRfbWFzayk7 CisJCUZEX1pFUk8oJm91dHB1dF9tYXNrKTsKKwkJc3dpdGNoIChwb2xscmVzKQorCQl7CisJCQlj YXNlIFBHUkVTX1BPTExJTkdfUkVBRElORzoKKwkJCQlwZ19kZWJ1ZygicG9sbGluZyBmb3IgcmVh ZHNcbiIpOworCQkJCUZEX1NFVChzb2NrLCAmaW5wdXRfbWFzayk7CisJCQkJYnJlYWs7CisJCQlj YXNlIFBHUkVTX1BPTExJTkdfV1JJVElORzoKKwkJCQlwZ19kZWJ1ZygicG9sbGluZyBmb3Igd3Jp dGVzXG4iKTsKKwkJCQlGRF9TRVQoc29jaywgJm91dHB1dF9tYXNrKTsKKwkJCQlicmVhazsKKwkJ CWRlZmF1bHQ6CisJCQkJcGdfZmF0YWwoImJhZCBjYW5jZWwgY29ubmVjdGlvbjogJXMiLCBQUWVy cm9yTWVzc2FnZShjYW5jZWxDb25uKSk7CisJCX0KKworCQlpZiAoc29jayA8IDApCisJCQlwZ19m YXRhbCgic29jayBkaWQgbm90IGV4aXN0OiAlcyIsIFBRZXJyb3JNZXNzYWdlKGNhbmNlbENvbm4p KTsKKworCQl0di50dl9zZWMgPSAzOworCQl0di50dl91c2VjID0gMDsKKworCQl3aGlsZSAodHJ1 ZSkKKwkJeworCQkJaWYgKHNlbGVjdChzb2NrICsgMSwgJmlucHV0X21hc2ssICZvdXRwdXRfbWFz aywgTlVMTCwgJnR2KSA8IDApCisJCQl7CisJCQkJaWYgKGVycm5vID09IEVJTlRSKQorCQkJCQlj b250aW51ZTsKKwkJCQlwZ19mYXRhbCgic2VsZWN0KCkgZmFpbGVkOiAlbSIpOworCQkJfQorCQkJ YnJlYWs7CisJCX0KKwl9CisJaWYgKFBRc3RhdHVzKGNhbmNlbENvbm4pICE9IENPTk5FQ1RJT05f Q0FOQ0VMX0ZJTklTSEVEKQorCQlwZ19mYXRhbCgidW5leHBlY3RlZCBjYW5jZWwgY29ubmVjdGlv biBzdGF0dXM6ICVzIiwgUFFlcnJvck1lc3NhZ2UoY2FuY2VsQ29ubikpOworCWNvbmZpcm1fcXVl cnlfY2FuY2VsbGVkKGNvbm4pOworCisJUFFmaW5pc2goY2FuY2VsQ29ubik7CisKKwkvKiB0ZXN0 IFBRY29ubmVjdENvbXBsZXRlICovCisJaWYgKFBRc2VuZFF1ZXJ5KGNvbm4sICJTRUxFQ1QgcGdf c2xlZXAoMykiKSAhPSAxKQorCQlwZ19mYXRhbCgiZmFpbGVkIHRvIHNlbmQgcXVlcnk6ICVzIiwg UFFlcnJvck1lc3NhZ2UoY29ubikpOworCWNhbmNlbENvbm4gPSBQUXJlcXVlc3RDYW5jZWxTdGFy dChjb25uKTsKKwlpZiAoUFFzdGF0dXMoY2FuY2VsQ29ubikgPT0gQ09OTkVDVElPTl9CQUQpCisJ CXBnX2ZhdGFsKCJiYWQgY2FuY2VsIGNvbm5lY3Rpb246ICVzIiwgUFFlcnJvck1lc3NhZ2UoY2Fu Y2VsQ29ubikpOworCWlmICghUFFjb25uZWN0Q29tcGxldGUoY2FuY2VsQ29ubikpCisJCXBnX2Zh dGFsKCJmYWlsZWQgdG8gc2VuZCBjYW5jZWw6ICVzIiwgUFFlcnJvck1lc3NhZ2UoY2FuY2VsQ29u bikpOworCWNvbmZpcm1fcXVlcnlfY2FuY2VsbGVkKGNvbm4pOworCisJLyogdGVzdCBQUWNvbm5l Y3RDb21wbGV0ZSB3aXRoIHJlc2V0IGNvbm5lY3Rpb24gKi8KKwlpZiAoIVBRcmVzZXRTdGFydChj YW5jZWxDb25uKSkKKwl7CisJCXBnX2ZhdGFsKCJjYW5jZWwgY29ubmVjdGlvbiByZXNldCBmYWls ZWQ6ICVzIiwgUFFlcnJvck1lc3NhZ2UoY2FuY2VsQ29ubikpOworCX0KKworCWlmIChQUXNlbmRR dWVyeShjb25uLCAiU0VMRUNUIHBnX3NsZWVwKDMpIikgIT0gMSkKKwkJcGdfZmF0YWwoImZhaWxl ZCB0byBzZW5kIHF1ZXJ5OiAlcyIsIFBRZXJyb3JNZXNzYWdlKGNvbm4pKTsKKwlpZiAoUFFzdGF0 dXMoY2FuY2VsQ29ubikgPT0gQ09OTkVDVElPTl9CQUQpCisJCXBnX2ZhdGFsKCJiYWQgY2FuY2Vs IGNvbm5lY3Rpb246ICVzIiwgUFFlcnJvck1lc3NhZ2UoY2FuY2VsQ29ubikpOworCWlmICghUFFj b25uZWN0Q29tcGxldGUoY2FuY2VsQ29ubikpCisJCXBnX2ZhdGFsKCJmYWlsZWQgdG8gc2VuZCBj YW5jZWw6ICVzIiwgUFFlcnJvck1lc3NhZ2UoY2FuY2VsQ29ubikpOworCWNvbmZpcm1fcXVlcnlf Y2FuY2VsbGVkKGNvbm4pOworCVBRZmluaXNoKGNhbmNlbENvbm4pOworCisJZnByaW50ZihzdGRl cnIsICJva1xuIik7Cit9CisKIHN0YXRpYyB2b2lkCiB0ZXN0X2Rpc2FsbG93ZWRfaW5fcGlwZWxp bmUoUEdjb25uICpjb25uKQogewpAQCAtMTU0NSw2ICsxNzU0LDcgQEAgdXNhZ2UoY29uc3QgY2hh ciAqcHJvZ25hbWUpCiBzdGF0aWMgdm9pZAogcHJpbnRfdGVzdF9saXN0KHZvaWQpCiB7CisJcHJp bnRmKCJjYW5jZWxcbiIpOwogCXByaW50ZigiZGlzYWxsb3dlZF9pbl9waXBlbGluZVxuIik7CiAJ cHJpbnRmKCJtdWx0aV9waXBlbGluZXNcbiIpOwogCXByaW50Zigibm9zeW5jXG4iKTsKQEAgLTE2 NDIsNyArMTg1Miw5IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJCQkJUFFUUkFD RV9TVVBQUkVTU19USU1FU1RBTVBTIHwgUFFUUkFDRV9SRUdSRVNTX01PREUpOwogCX0KIAotCWlm IChzdHJjbXAodGVzdG5hbWUsICJkaXNhbGxvd2VkX2luX3BpcGVsaW5lIikgPT0gMCkKKwlpZiAo c3RyY21wKHRlc3RuYW1lLCAiY2FuY2VsIikgPT0gMCkKKwkJdGVzdF9jYW5jZWwoY29ubik7CisJ ZWxzZSBpZiAoc3RyY21wKHRlc3RuYW1lLCAiZGlzYWxsb3dlZF9pbl9waXBlbGluZSIpID09IDAp CiAJCXRlc3RfZGlzYWxsb3dlZF9pbl9waXBlbGluZShjb25uKTsKIAllbHNlIGlmIChzdHJjbXAo dGVzdG5hbWUsICJtdWx0aV9waXBlbGluZXMiKSA9PSAwKQogCQl0ZXN0X211bHRpX3BpcGVsaW5l cyhjb25uKTsKLS0gCjIuMTcuMQoK --_003_HE1PR8303MB00735DC38F45BD63A3A49347F71F9HE1PR8303MB0073_--