From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 0B08D40C8E for ; Mon, 1 Jan 2024 14:16:12 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 1C6ED68CF4C; Mon, 1 Jan 2024 16:13:52 +0200 (EET) Received: from APC01-PSA-obe.outbound.protection.outlook.com (mail-psaapc01olkn2022.outbound.protection.outlook.com [40.92.52.22]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 5C60668CED5 for ; Mon, 1 Jan 2024 16:13:47 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=lS8CkAWH96DZ8OmHkmFTPCVafNjDPO5lUHa5EIMZdWZEUOzV7MUCRlazH9Gnz7iqLb7RHlNwq3Kz79rOSfxbZ9UaewjTgh/hQx3XGmK6a3JD2okB/BeWFk4fGpXHGGjhwjmr7/7hs4bEWgTqCVShk7BA7njqxpBVFfHu6sXTsShmN7esx9hfWm+IyaptobDla2TjsgXntJeclqN22dNWGOFSFV468ddx+D+TGekd44SkJcg57uJeLOYtDMdj6jqgDjBNrWCJ9KjGz1t/GEyQctb87bqUxLnXh2GwbWvk6l+15BH9sjnGF5J4N6MQ2lbvJhPxoRrSyqFZ2gZ9mpD23Q== 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=YLoWAtTNtN6GyPBGPWzxLGyESwJsHJMaeVK5GTqaFII=; b=QT88MHuZl0Mtk3yBdJvMNPOAu+6B5FPC6hECUG2jzGpPflY/5frx0T6SfIyavCWFYVPGlKZ5jdBwQ038CFkMYNyH4T2ZVHs44uLHAn61cQHIvIySDe+KYAJafNH67Sgw3yXFywT606LW5Rwq31Bjp9/F7BzOqMHJyRzO2VZZ8S1obq1HescPpy3x6jQl43OjZ8zF51eLO/eeFMhLax3PwohTmFmOROtXgCp3sipsuvdS53iGKGujug/DRJmQyXZY6+2JxsbJEsw4tHQUSeh34w4b/G/6qebDgqC4/LFN7qn3ctu6Sc8Txw5c3LF7l2Sa+nFMLPWV7s/4HbXfuJ3HVA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=YLoWAtTNtN6GyPBGPWzxLGyESwJsHJMaeVK5GTqaFII=; b=ZuB7VIzRfgj+agXoTEPPjF1gqsaamsrYhK/dGdrYs+kqrdmHxPjS4Jc9XluQd8YUeVzRmmkHdNW1z7HBcrepFX/hnA/ZaSdOKG0ioUDX+kf6IsnUTfFpnr32y9VVi1TrqQefspBTdey7m0N4UZqOqeH+fSJZfwDbky/U+7QeGxxQnUyxDKhYZcy3K6h43223Qq+Dp21WdHQQS/dkcgYyaLaleShHOtJvxmWnVOVagT67HCpkUgHuj6wEonGlB49WigvRDomHT3q8HN+0hn8wf/TahI33BqmeCLRiH0zzpkw/NMQn+VXAwK+WICVbLTnvdSFtJKc38AIxY7h7s355Ug== Received: from TYSPR06MB6433.apcprd06.prod.outlook.com (2603:1096:400:47a::6) by TYZPR06MB3965.apcprd06.prod.outlook.com (2603:1096:400:23::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7135.25; Mon, 1 Jan 2024 14:13:34 +0000 Received: from TYSPR06MB6433.apcprd06.prod.outlook.com ([fe80::e139:fd7a:1b66:a3f7]) by TYSPR06MB6433.apcprd06.prod.outlook.com ([fe80::e139:fd7a:1b66:a3f7%6]) with mapi id 15.20.7135.023; Mon, 1 Jan 2024 14:13:34 +0000 From: Nuo Mi To: ffmpeg-devel@ffmpeg.org Date: Mon, 1 Jan 2024 22:12:39 +0800 Message-ID: X-Mailer: git-send-email 2.25.1 In-Reply-To: <20240101141239.6623-1-nuomi2021@gmail.com> References: <20240101141239.6623-1-nuomi2021@gmail.com> X-TMN: [1kZ5RedyX8PtAWFI2Nms8g6XdaCSg5cJ] X-ClientProxiedBy: SI1PR02CA0012.apcprd02.prod.outlook.com (2603:1096:4:1f7::8) To TYSPR06MB6433.apcprd06.prod.outlook.com (2603:1096:400:47a::6) X-Microsoft-Original-Message-ID: <20240101141239.6623-14-nuomi2021@gmail.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 2 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TYSPR06MB6433:EE_|TYZPR06MB3965:EE_ X-MS-Office365-Filtering-Correlation-Id: 2e93176c-58ad-4556-f130-08dc0ad3d744 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: YBlu+JpvsBjeyURDff3K07+4MhovLDJtKHU2ApIcWWmknP+D7H8u1pmefj1LH5jhD7jv5FvWHtAd3ZrLYi3fpKk+5aJwX1PYwgnX6Q138fFxvveb8yspVpB5BqnxKdfk3Cttgqkg5TXBRxalzjOwKgNLntdHaW5v8WKy6k1WEls6uQk2jT1xwCY6TsCyusQvBwS1TAtPU+p4k2eWYgW5IvFJIr8NpTUVzI4Pd/Y6MZXHOfL0QgPorMPsTMkRfFUyqHWMjUPCwtKfL3Y19zIoRYZaHtFmCoCKtu/SMnTes0IWuaiNu4jNro48+7fn+iJv13iglvmx0IQda0YHJkDIMjuX6mG1p6MHt7eV3IuBwYCUbJCk071hSj21fV+gyPZKrCsEc8IvIwiSHk9B98bissDunIimy2vpqkJ+qXTp4FITjtPQgnNLqKTPJ1jW3N4tHNYKP8qQ+uQ+Sb9H6SImMih0mUPCOHYyYqMe3XG1Vt+1MqVSVOVzwW0fJ/oqB9L+PqAVYpWMnLEaJZE6rDpzRPuflH/og83txyHxysRf07xEMjui4QWO9yurJD1qAWH0gthFiW2RXuSt87n5H593HVGmChUHqWJdY27a8j1KE/Efl1fQ+pyEjutaDzZN9Uqt X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?SnBoMFcvL2E0eFNoblJmVHF0ZVYxWWRLTXl2TVhqYy8zVWxLbmpPVm12ZlJP?= =?utf-8?B?MEdQQXdCUEc5Qks2TDdEdk9nYmFBNDk5ZlNJV3pwK3ZtQnFFNEZsVkJoaFBH?= =?utf-8?B?c0U2b1JRYWxacm5QMDZlaXZqZXZ1M0NhNDhWM1h5UnRPZjJiaVVUWXUvdWlD?= =?utf-8?B?TUZsU2gwYjJ5eElmZUlKZFlTcWcvYStzMzIwbmcwb3p1ZVN0OEFQczBWb3B5?= =?utf-8?B?SzlxV1VaV2c3djRnZHZUZTN2b2dnbWRINWtuYTdJVmpxSFMzdS9tNE9lV2dN?= =?utf-8?B?Q25kYWFyenZaMTNCMlpYVVBIWE5MY2oyS1FpMUdhNkxlT2d6a1V1YXNWNnNW?= =?utf-8?B?Y3NDQW1DQ2tyMWpFWWMwajdtSDYybDBkTUh3a2RQbkdjRjh1UEpLbTBlMERm?= =?utf-8?B?UGJYam1wa1JVOG5FOXJJamVBWHdGaDdBaHBNTnkybFpZcm10clZ2K21rSEs5?= =?utf-8?B?MVZ0clFkMENMaU1wTEhnekt3WGpkN1c0eEJxSzk3TjRNRTN4bGViUUlYa0JQ?= =?utf-8?B?aUx4UUVYcW5UUTdhc2FETnBHZkV4NU1YSWFhRzNTWllWaldreUhaR2xKWWN2?= =?utf-8?B?TVJFUnN6TlZVV0tpSHpaai9pU0Fpd2Z1cm5CUDc3aWp1SmlwbHJOanZWblc3?= =?utf-8?B?cWFUK0V6WnBzUWs5bzVObmNDY09CdGZ6aFZxZ2lHUzM1ajhEci9HS2ZZbXl5?= =?utf-8?B?MzMzMWQ3UHN3b0E0V1N3RExTT2JOSDB4OHQyZ3V5RkFpekxyeW4wYjM5ajBv?= =?utf-8?B?WVVDQWhxVmpXNzZiWFVOdnNzYTNZS3dpZUk2MHd3SDJHWEJjdFdCK1hIWTVJ?= =?utf-8?B?WG82d3hyYU1RSkxlQkpZYXUxU0JiSEtTZkEycGF4QnRSUFVScXVvUFhCc25q?= =?utf-8?B?MFVBTERPeFlGTWVlREV0enBFVEpjVXV5Z01JcDYxZnMxRlkwK01TUGIyT1VS?= =?utf-8?B?MTIxSjNNcWt4ODhKa3lHUDZtZkZET3ZpNmNqSjFHNml5WVgvaytKK3BEZVMx?= =?utf-8?B?MVMzYk1hTFdFZld4ZEFyV3BkNDVGRGJ2cDVqOUVuVDUvOGozNC9RbFhwU0s1?= =?utf-8?B?NkQ1TU5MdGtMc2VYTlZsWHJQTXVzNWdGZTVtN0NyVTBETFpodU5mcFRJaWFP?= =?utf-8?B?d0gyNyt6OEJxNGlGckJmdlJHTFdtNTYzaml5OURKK2Fub3p1aXFmS1lleDFy?= =?utf-8?B?RktvM3pXM1BkTU5iYlJyMWtnQ3FVMXBsazQ5T01hZWNZZ3V2L0VnTHpvYUNv?= =?utf-8?B?K0hEVXl6b2o1NlJDa0tOS1d1RWNxUmRnVEN5TmxIQjMzZTFuaDdCa0VTTzBl?= =?utf-8?B?RW0xbU5PUUV5SVlxcXVtWnp0OU5aV3dwdWVSeThJeE9XVVpjRC9qL2phNHp3?= =?utf-8?B?YzVqZElmMmxtdDhhUVpEdU4xdEVUZUlHT21UWExZd1hLVVdLQkZVc1FIVHd2?= =?utf-8?B?a0ZrMXdVMktkc2gyemZ5U1NRYTIwdENHM1hGZHFrWmprYTh2ZldNcGNXaXpH?= =?utf-8?B?d2JtSmM3N2lVbUJiUGMzWHhwa0I5cm9kcEdEb3RuZzN1My9UMjQyZjZIYVM4?= =?utf-8?B?aDJER3V4MmcxdVd0eWhHWWRIcDJZeHA4L0xSNWN4ZTdqRURPdzBKZS9VaXdP?= =?utf-8?B?TTI5TVRsd3JwMFhBQWczWWM2aHlWY0JGdnZpd1ZBTWl2cTA2T05NSzRMWldU?= =?utf-8?Q?MHGEP28L+O7Y8v8bKKZT?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2e93176c-58ad-4556-f130-08dc0ad3d744 X-MS-Exchange-CrossTenant-AuthSource: TYSPR06MB6433.apcprd06.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Jan 2024 14:13:34.7961 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYZPR06MB3965 Subject: [FFmpeg-devel] [PATCH v9 13/13] vvcdec: add vvc decoder X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Frank Plowman , Nuo Mi , Xu Mu , Shaun Loo , Wu Jianhua Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: dnZjIGRlY29kZXIgcGx1Zy1pbiB0byBhdmNvZGVjLgpzcGxpdCBmcmFtZXMgaW50byBzbGljZXMv dGlsZXMgYW5kIHNlbmQgdGhlbSB0byB2dmNfdGhyZWFkIGZvciBmdXJ0aGVyIGRlY29kaW5nCnJl b3JkZXIgYW5kIHdhaXQgZm9yIHRoZSBmcmFtZSBkZWNvZGluZyB0byBiZSBkb25lIGFuZCBvdXRw dXQgdGhlIGZyYW1lCgpGZWF0dXJlczoKICAgICsgU3VwcG9ydCBJLCBQLCBCIGZyYW1lcwogICAg KyBTdXBwb3J0IDgvMTAvMTIgYml0cywgY2hyb21hIDQwMCwgNDIwLCA0MjIsIGFuZCA0NDQgYW5k IHJhbmdlIGV4dGVuc2lvbgogICAgKyBTdXBwb3J0IFZWQyBuZXcgdG9vbHMgbGlrZSBNSVAsIEND TE0sIEFGRklORSwgR1BNLCBETVZSLCBQUk9GLCBCRE9GLCBMTUNTLCBBTEYKICAgICsgMjk1IGNv bmZvcm1hY2UgY2xpcHMgcGFzc2VkCiAgICAtIE5vdCBzdXBwb3J0IFJQUiwgSUJDLCBQQUxFVFRF LCBhbmQgb3RoZXIgbWlub3IgZmVhdHVyZXMgeWV0CgpQZXJmb3JtYW5jZToKICAgIEMgY29kZSBG UFMgb24gYW4gaTctMTI3MDBLICh4ODYpOgogICAgICAgIEJRVGVycmFjZV8xOTIweDEwODBfNjBf MTBfNDIwXzIyX1JBLnZ2YyAgICAgIDkzLjAKICAgICAgICBDaGltZXJhXzhiaXRfMTA4MFBfMTAw MF9mcmFtZXMudnZjICAgICAgICAgIDE4NC4zCiAgICAgICAgTm92b3NvYm9ybmF5YVNxdWFyZV8x OTIweDEwODAuYmluICAgICAgICAgICAxOTEuMwogICAgICAgIFJpdHVhbERhbmNlXzE5MjB4MTA4 MF82MF8xMF80MjBfMzJfTEQuMjY2ICAgMTUwLjcKICAgICAgICBSaXR1YWxEYW5jZV8xOTIweDEw ODBfNjBfMTBfNDIwXzM3X1JBLjI2NiAgIDE3MC4wCiAgICAgICAgVGFuZ28yXzM4NDB4MjE2MF82 MF8xMF80MjBfMjdfTEQuMjY2ICAgICAgICAgMzMuNwoKICAgIEMgY29kZSBGUFMgb24gYSBNMSBN YWMgUHJvIChBUk0pOgogICAgICAgIEJRVGVycmFjZV8xOTIweDEwODBfNjBfMTBfNDIwXzIyX1JB LnZ2YyAgICAgNTguNwogICAgICAgIENoaW1lcmFfOGJpdF8xMDgwUF8xMDAwX2ZyYW1lcy52dmMg ICAgICAgICAgMTUzLjMKICAgICAgICBOb3Zvc29ib3JuYXlhU3F1YXJlXzE5MjB4MTA4MC5iaW4g ICAgICAgICAgIDE1MC4zCiAgICAgICAgUml0dWFsRGFuY2VfMTkyMHgxMDgwXzYwXzEwXzQyMF8z Ml9MRC4yNjYgICAxMDUuMAogICAgICAgIFJpdHVhbERhbmNlXzE5MjB4MTA4MF82MF8xMF80MjBf MzdfUkEuMjY2ICAgMTMzLjAKICAgICAgICBUYW5nbzJfMzg0MHgyMTYwXzYwXzEwXzQyMF8yN19M RC4yNjYgICAgICAgIDIxLjcKCiAgICBBc20gb3B0aW1pemF0aW9ucyBzdGlsbCB3b3JraW5nIGlu IHByb2dyZXNzLiBwbGVhc2UgY2hlY2sKICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9mZnZ2Yy9GRm1w ZWcvd2lraSNwZXJmb3JtYW5jZS1kYXRhIGZvciB0aGUgbGF0ZXN0CgpUaGFuayB5b3UgZm9yIHJl cG9ydGluZyBpc3N1ZXMgYW5kIHByb3ZpZGluZyBwZXJmb3JtYW5jZSByZXBvcnRzOgogICAgxYF1 a2FzeiBDemVjaCA8bHVrYXN6Y3oxOEB3cC5wbD4KICAgIFh1IEZ1bG9uZyA8ODM5Nzg5NzQwQHFx LmNvbT4KClRoYW5rIHlvdSBmb3IgcHJvdmlkaW5nIHJldmlldyBjb21tZW50czoKICAgIFJvbmFs ZCBTLiBCdWx0amUgPHJzYnVsdGplQGdtYWlsLmNvbT4KICAgIEphbWVzIEFsbWVyIDxqYW1yaWFs QGdtYWlsLmNvbT4KICAgIEFuZHJlYXMgUmhlaW5oYXJkdCA8YW5kcmVhcy5yaGVpbmhhcmR0QG91 dGxvb2suY29tPgoKQ28tYXV0aG9yZWQtYnk6IFh1IE11IDx0b3h1bXVAb3V0bG9vay5jb20+CkNv LWF1dGhvcmVkLWJ5OiBGcmFuayBQbG93bWFuIDxwb3N0QGZyYW5rcGxvd21hbi5jb20+CkNvLWF1 dGhvcmVkLWJ5OiBTaGF1biBMb28gPHNoYXVubG9vMTBAZ21haWwuY29tPgpDby1hdXRob3JlZC1i eTogV3UgSmlhbmh1YSA8dG9xc3h3QG91dGxvb2suY29tPgotLS0KIENoYW5nZWxvZyAgICAgICAg ICAgICAgIHwgICAgMSArCiBjb25maWd1cmUgICAgICAgICAgICAgICB8ICAgIDEgKwogbGliYXZj b2RlYy9hbGxjb2RlY3MuYyAgfCAgICAxICsKIGxpYmF2Y29kZWMvdmVyc2lvbi5oICAgIHwgICAg MiArLQogbGliYXZjb2RlYy92dmMvTWFrZWZpbGUgfCAgICAzICstCiBsaWJhdmNvZGVjL3Z2Yy92 dmNkZWMuYyB8IDEwMTcgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiA2 IGZpbGVzIGNoYW5nZWQsIDEwMjMgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBsaWJhdmNvZGVjL3Z2Yy92dmNkZWMuYwoKZGlmZiAtLWdpdCBhL0NoYW5n ZWxvZyBiL0NoYW5nZWxvZwppbmRleCBhNjM4YzAzMjUwLi4wNDUxZjI2NWJjIDEwMDY0NAotLS0g YS9DaGFuZ2Vsb2cKKysrIGIvQ2hhbmdlbG9nCkBAIC0xMyw2ICsxMyw3IEBAIHZlcnNpb24gPG5l eHQ+OgogLSBJQU1GIHJhdyBkZW11eGVyIGFuZCBtdXhlcgogLSBEM0QxMlZBIGhhcmR3YXJlIGFj Y2VsZXJhdGVkIEgyNjQsIEhFVkMsIFZQOSwgQVYxLCBNUEVHLTIgYW5kIFZDMSBkZWNvZGluZwog LSB0aWx0YW5kc2hpZnQgZmlsdGVyCistIFZWQyBkZWNvZGVyCiAKIHZlcnNpb24gNi4xOgogLSBs aWJhcmliY2FwdGlvbiBkZWNvZGVyCmRpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUK aW5kZXggMDM3YzA4YWZmZi4uYzIzNDNmMzk4NyAxMDA3NTUKLS0tIGEvY29uZmlndXJlCisrKyBi L2NvbmZpZ3VyZQpAQCAtMzAyNSw2ICszMDI1LDcgQEAgdnA2Zl9kZWNvZGVyX3NlbGVjdD0idnA2 X2RlY29kZXIiCiB2cDdfZGVjb2Rlcl9zZWxlY3Q9ImgyNjRwcmVkIHZpZGVvZHNwIHZwOGRzcCIK IHZwOF9kZWNvZGVyX3NlbGVjdD0iaDI2NHByZWQgdmlkZW9kc3AgdnA4ZHNwIgogdnA5X2RlY29k ZXJfc2VsZWN0PSJ2aWRlb2RzcCB2cDlfcGFyc2VyIHZwOV9zdXBlcmZyYW1lX3NwbGl0X2JzZiIK K3Z2Y19kZWNvZGVyX3NlbGVjdD0iY2FiYWMgZ29sb21iIHZpZGVvZHNwIgogd2Ntdl9kZWNvZGVy X3NlbGVjdD0iaW5mbGF0ZV93cmFwcGVyIgogd2VicF9kZWNvZGVyX3NlbGVjdD0idnA4X2RlY29k ZXIgZXhpZiIKIHdtYWxvc3NsZXNzX2RlY29kZXJfc2VsZWN0PSJsbGF1ZGRzcCIKZGlmZiAtLWdp dCBhL2xpYmF2Y29kZWMvYWxsY29kZWNzLmMgYi9saWJhdmNvZGVjL2FsbGNvZGVjcy5jCmluZGV4 IGIwZjAwNGUxNWMuLjkzY2U4ZTMyMjQgMTAwNjQ0Ci0tLSBhL2xpYmF2Y29kZWMvYWxsY29kZWNz LmMKKysrIGIvbGliYXZjb2RlYy9hbGxjb2RlY3MuYwpAQCAtMzg5LDYgKzM4OSw3IEBAIGV4dGVy biBjb25zdCBGRkNvZGVjIGZmX3ZwOV9ya21wcF9kZWNvZGVyOwogZXh0ZXJuIGNvbnN0IEZGQ29k ZWMgZmZfdnA5X3Y0bDJtMm1fZGVjb2RlcjsKIGV4dGVybiBjb25zdCBGRkNvZGVjIGZmX3ZxYV9k ZWNvZGVyOwogZXh0ZXJuIGNvbnN0IEZGQ29kZWMgZmZfdnFjX2RlY29kZXI7CitleHRlcm4gY29u c3QgRkZDb2RlYyBmZl92dmNfZGVjb2RlcjsKIGV4dGVybiBjb25zdCBGRkNvZGVjIGZmX3dibXBf ZGVjb2RlcjsKIGV4dGVybiBjb25zdCBGRkNvZGVjIGZmX3dibXBfZW5jb2RlcjsKIGV4dGVybiBj b25zdCBGRkNvZGVjIGZmX3dlYnBfZGVjb2RlcjsKZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvdmVy c2lvbi5oIGIvbGliYXZjb2RlYy92ZXJzaW9uLmgKaW5kZXggMzRiMDU5YThhOS4uMzc2Mzg4YzVi YiAxMDA2NDQKLS0tIGEvbGliYXZjb2RlYy92ZXJzaW9uLmgKKysrIGIvbGliYXZjb2RlYy92ZXJz aW9uLmgKQEAgLTI5LDcgKzI5LDcgQEAKIAogI2luY2x1ZGUgInZlcnNpb25fbWFqb3IuaCIKIAot I2RlZmluZSBMSUJBVkNPREVDX1ZFUlNJT05fTUlOT1IgIDM2CisjZGVmaW5lIExJQkFWQ09ERUNf VkVSU0lPTl9NSU5PUiAgMzcKICNkZWZpbmUgTElCQVZDT0RFQ19WRVJTSU9OX01JQ1JPIDEwMAog CiAjZGVmaW5lIExJQkFWQ09ERUNfVkVSU0lPTl9JTlQgIEFWX1ZFUlNJT05fSU5UKExJQkFWQ09E RUNfVkVSU0lPTl9NQUpPUiwgXApkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy92dmMvTWFrZWZpbGUg Yi9saWJhdmNvZGVjL3Z2Yy9NYWtlZmlsZQppbmRleCAyZjk1Y2Y3YzYzLi5kYzQ4NGU1ZmI5IDEw MDY0NAotLS0gYS9saWJhdmNvZGVjL3Z2Yy9NYWtlZmlsZQorKysgYi9saWJhdmNvZGVjL3Z2Yy9N YWtlZmlsZQpAQCAtMSw3ICsxLDggQEAKIGNsZWFuOjoKIAkkKFJNKSAkKENMRUFOU1VGRklYRVM6 JT1saWJhdmNvZGVjL3Z2Yy8lKQogCi1PQkpTLSQoQ09ORklHX1ZWQ19ERUNPREVSKSAgICAgICAg ICArPSAgdnZjL3Z2Y2RzcC5vICAgICAgICAgICAgXAorT0JKUy0kKENPTkZJR19WVkNfREVDT0RF UikgICAgICAgICAgKz0gIHZ2Yy92dmNkZWMubyAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB2dmMvdnZjZHNwLm8gICAgICAgICAgICBcCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnZjL3Z2Y19jYWJhYy5vICAgICAg ICAgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZ2Yy92dmNfY3R1 Lm8gICAgICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2 dmMvdnZjX2RhdGEubyAgICAgICAgICBcCmRpZmYgLS1naXQgYS9saWJhdmNvZGVjL3Z2Yy92dmNk ZWMuYyBiL2xpYmF2Y29kZWMvdnZjL3Z2Y2RlYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAuLjYwOGQ0OTdjYjcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJhdmNvZGVjL3Z2 Yy92dmNkZWMuYwpAQCAtMCwwICsxLDEwMTcgQEAKKy8qCisgKiBWVkMgdmlkZW8gZGVjb2Rlcgor ICoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBOdW8gTWkKKyAqIENvcHlyaWdodCAoQykgMjAyMiBY dSBNdQorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KKyAqCisgKiBGRm1wZWcg aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl aXRoZXIKKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM ZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ dWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhl IEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg RmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKyAqLworI2luY2x1ZGUgImxp YmF2Y29kZWMvY29kZWNfaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJsaWJhdmNvZGVjL2RlY29kZS5o IgorI2luY2x1ZGUgImxpYmF2Y29kZWMvcHJvZmlsZXMuaCIKKyNpbmNsdWRlICJsaWJhdmNvZGVj L3JlZnN0cnVjdC5oIgorI2luY2x1ZGUgImxpYmF2dXRpbC9jcHUuaCIKKyNpbmNsdWRlICJsaWJh dnV0aWwvdGhyZWFkLmgiCisKKyNpbmNsdWRlICJ2dmNkZWMuaCIKKyNpbmNsdWRlICJ2dmNfY3R1 LmgiCisjaW5jbHVkZSAidnZjX2RhdGEuaCIKKyNpbmNsdWRlICJ2dmNfcmVmcy5oIgorI2luY2x1 ZGUgInZ2Y190aHJlYWQuaCIKKworI2RlZmluZSBUQUJfTUFYIDMyCisKK3R5cGVkZWYgc3RydWN0 IFRhYiB7CisgICAgdm9pZCAqKnRhYjsKKyAgICBzaXplX3Qgc2l6ZTsKK30gVGFiOworCit0eXBl ZGVmIHN0cnVjdCBUYWJMaXN0IHsKKyAgICBUYWIgdGFic1tUQUJfTUFYXTsKKyAgICBpbnQgbmJf dGFiczsKKworICAgIGludCB6ZXJvOworICAgIGludCByZWFsbG9jOworfSBUYWJMaXN0OworCisj ZGVmaW5lIFRMX0FERCh0LCBzKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc CisgICAgYXZfYXNzZXJ0MChsLT5uYl90YWJzIDwgVEFCX01BWCk7ICAgICAgICAgICAgICAgICAg ICBcCisgICAgbC0+dGFic1tsLT5uYl90YWJzXS50YWIgID0gKHZvaWQqKikmZmMtPnRhYi50OyAg ICAgICBcCisgICAgbC0+dGFic1tsLT5uYl90YWJzXS5zaXplID0gc2l6ZW9mKCpmYy0+dGFiLnQp ICogKHMpOyBcCisgICAgbC0+bmJfdGFicysrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCit9IHdoaWxlICgwKQorCitzdGF0aWMgc2l6ZV90IHRsX3NpemUoY29uc3Qg VGFiTGlzdCAqbCkKK3sKKyAgICBzaXplX3QgdG90YWwgPSAwOworICAgIGZvciAoaW50IGkgPSAw OyBpIDwgbC0+bmJfdGFiczsgaSsrKQorICAgICAgICB0b3RhbCArPSBsLT50YWJzW2ldLnNpemU7 CisgICAgcmV0dXJuIHRvdGFsOworfQorCitzdGF0aWMgdm9pZCB0bF9pbml0KFRhYkxpc3QgKmws IGNvbnN0IGludCB6ZXJvLCBjb25zdCBpbnQgcmVhbGxvYykKK3sKKyAgICBsLT5uYl90YWJzID0g MDsKKyAgICBsLT56ZXJvID0gemVybzsKKyAgICBsLT5yZWFsbG9jID0gcmVhbGxvYzsKK30KKwor c3RhdGljIGludCB0bF9mcmVlKFRhYkxpc3QgKmwpCit7CisgICAgZm9yIChpbnQgaSA9IDE7IGkg PCBsLT5uYl90YWJzOyBpKyspIHsKKyAgICAgICAgdm9pZCAqKnAgPSBsLT50YWJzW2ldLnRhYjsK KyAgICAgICAgKnAgPSBOVUxMOworICAgIH0KKyAgICBhdl9mcmVlcChsLT50YWJzWzBdLnRhYik7 CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdGxfY3JlYXRlKFRhYkxpc3QgKmwpCit7 CisgICAgc2l6ZV90IHNpemUgPSB0bF9zaXplKGwpOworICAgIGlmIChsLT5yZWFsbG9jKSB7Cisg ICAgICAgIHVpbnQ4X3QgKnAgPSBsLT56ZXJvID8gYXZfbWFsbG9jeihzaXplKSA6IGF2X21hbGxv YyhzaXplKTsKKyAgICAgICAgaWYgKCFwKQorICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5P TUVNKTsKKyAgICAgICAgdGxfZnJlZShsKTsKKworICAgICAgICAvLyBzZXQgcG9pbnRlciBmb3Ig ZWFjaCB0YWJsZQorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGwtPm5iX3RhYnM7IGkrKykg eworICAgICAgICAgICAgVGFiICp0ID0gbC0+dGFicyArIGk7CisgICAgICAgICAgICAqdC0+dGFi ID0gcDsKKyAgICAgICAgICAgIHAgKz0gdC0+c2l6ZTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7 CisgICAgICAgIGlmIChsLT56ZXJvKQorICAgICAgICAgICAgbWVtc2V0KCpsLT50YWJzWzBdLnRh YiwgMCwgc2l6ZSk7CisgICAgfQorICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjdHVf dGxfaW5pdChUYWJMaXN0ICpsLCBWVkNGcmFtZUNvbnRleHQgKmZjKQoreworICAgIGNvbnN0IFZW Q1BQUyAqcHBzICAgPSBmYy0+cHMucHBzOworICAgIGNvbnN0IGludCBjdHVfY291bnQgPSBwcHMg PyBwcHMtPmN0Yl9jb3VudCA6IDA7CisgICAgY29uc3QgaW50IGNoYW5nZWQgICA9IGZjLT50YWIu c3ouY3R1X2NvdW50ICE9IGN0dV9jb3VudDsKKworICAgIHRsX2luaXQobCwgMSwgY2hhbmdlZCk7 CisKKyAgICBUTF9BREQoZGVibG9jaywgY3R1X2NvdW50KTsKKyAgICBUTF9BREQoc2FvLCAgICAg Y3R1X2NvdW50KTsKKyAgICBUTF9BREQoYWxmLCAgICAgY3R1X2NvdW50KTsKKyAgICBUTF9BREQo Y3R1cywgICAgY3R1X2NvdW50KTsKK30KKworc3RhdGljIHZvaWQgY3R1X256X3RsX2luaXQoVGFi TGlzdCAqbCwgVlZDRnJhbWVDb250ZXh0ICpmYykKK3sKKyAgICBjb25zdCBWVkNTUFMgKnNwcyAg ID0gZmMtPnBzLnNwczsKKyAgICBjb25zdCBWVkNQUFMgKnBwcyAgID0gZmMtPnBzLnBwczsKKyAg ICBjb25zdCBpbnQgY3R1X3NpemUgID0gc3BzID8gKDEgPDwgc3BzLT5jdGJfbG9nMl9zaXplX3kg PDwgc3BzLT5jdGJfbG9nMl9zaXplX3kpIDogMDsKKyAgICBjb25zdCBpbnQgY3R1X2NvdW50ID0g cHBzID8gcHBzLT5jdGJfY291bnQgOiAwOworICAgIGNvbnN0IGludCBjaGFuZ2VkICAgPSBmYy0+ dGFiLnN6LmN0dV9jb3VudCAhPSBjdHVfY291bnQgfHwgZmMtPnRhYi5zei5jdHVfc2l6ZSAhPSBj dHVfc2l6ZTsKKworICAgIHRsX2luaXQobCwgMCwgY2hhbmdlZCk7CisgICAgVExfQUREKHNsaWNl X2lkeCwgY3R1X2NvdW50KTsKKyAgICBUTF9BREQoY29lZmZzLCAgICBjdHVfY291bnQgKiBjdHVf c2l6ZSAqIFZWQ19NQVhfU0FNUExFX0FSUkFZUyk7Cit9CisKK3N0YXRpYyB2b2lkIG1pbl9jYl90 bF9pbml0KFRhYkxpc3QgKmwsIFZWQ0ZyYW1lQ29udGV4dCAqZmMpCit7CisgICAgY29uc3QgVlZD UFBTICpwcHMgICAgICAgICAgICA9IGZjLT5wcy5wcHM7CisgICAgY29uc3QgaW50IHBpY19zaXpl X2luX21pbl9jYiA9IHBwcyA/IHBwcy0+bWluX2NiX3dpZHRoICogcHBzLT5taW5fY2JfaGVpZ2h0 IDogMDsKKyAgICBjb25zdCBpbnQgY2hhbmdlZCAgICAgICAgICAgID0gZmMtPnRhYi5zei5waWNf c2l6ZV9pbl9taW5fY2IgIT0gcGljX3NpemVfaW5fbWluX2NiOworCisgICAgdGxfaW5pdChsLCAx LCBjaGFuZ2VkKTsKKworICAgIFRMX0FERChza2lwLCBwaWNfc2l6ZV9pbl9taW5fY2IpOworICAg IFRMX0FERChpbWYsICBwaWNfc2l6ZV9pbl9taW5fY2IpOworICAgIFRMX0FERChpbXRmLCBwaWNf c2l6ZV9pbl9taW5fY2IpOworICAgIFRMX0FERChpbW0sICBwaWNfc2l6ZV9pbl9taW5fY2IpOwor ICAgIFRMX0FERChpcG0sICBwaWNfc2l6ZV9pbl9taW5fY2IpOworCisgICAgZm9yIChpbnQgaSA9 IExVTUE7IGkgPD0gQ0hST01BOyBpKyspIHsKKyAgICAgICAgVExfQUREKGNiX3Bvc194W2ldLCAg cGljX3NpemVfaW5fbWluX2NiKTsKKyAgICAgICAgVExfQUREKGNiX3Bvc195W2ldLCAgcGljX3Np emVfaW5fbWluX2NiKTsKKyAgICAgICAgVExfQUREKGNiX3dpZHRoW2ldLCAgcGljX3NpemVfaW5f bWluX2NiKTsKKyAgICAgICAgVExfQUREKGNiX2hlaWdodFtpXSwgcGljX3NpemVfaW5fbWluX2Ni KTsKKyAgICAgICAgVExfQUREKGNxdF9kZXB0aFtpXSwgcGljX3NpemVfaW5fbWluX2NiKTsKKyAg ICAgICAgVExfQUREKGNwbVtpXSwgICAgICAgcGljX3NpemVfaW5fbWluX2NiKTsKKyAgICAgICAg VExfQUREKGNwX212W2ldLCAgICAgcGljX3NpemVfaW5fbWluX2NiICogTUFYX0NPTlRST0xfUE9J TlRTKTsKKyAgICB9OworfQorCitzdGF0aWMgdm9pZCBtaW5fcHVfdGxfaW5pdChUYWJMaXN0ICps LCBWVkNGcmFtZUNvbnRleHQgKmZjKQoreworICAgIGNvbnN0IFZWQ1BQUyAqcHBzICAgICAgICAg ICAgPSBmYy0+cHMucHBzOworICAgIGNvbnN0IGludCBwaWNfc2l6ZV9pbl9taW5fcHUgPSBwcHMg PyBwcHMtPm1pbl9wdV93aWR0aCAqIHBwcy0+bWluX3B1X2hlaWdodCA6IDA7CisgICAgY29uc3Qg aW50IGNoYW5nZWQgICAgICAgICAgICA9IGZjLT50YWIuc3oucGljX3NpemVfaW5fbWluX3B1ICE9 IHBpY19zaXplX2luX21pbl9wdTsKKworICAgIHRsX2luaXQobCwgMSwgY2hhbmdlZCk7CisKKyAg ICBUTF9BREQobXNmLCBwaWNfc2l6ZV9pbl9taW5fcHUpOworICAgIFRMX0FERChpYWYsIHBpY19z aXplX2luX21pbl9wdSk7CisgICAgVExfQUREKG1taSwgcGljX3NpemVfaW5fbWluX3B1KTsKKyAg ICBUTF9BREQobXZmLCBwaWNfc2l6ZV9pbl9taW5fcHUpOworfQorCitzdGF0aWMgdm9pZCBtaW5f dHVfdGxfaW5pdChUYWJMaXN0ICpsLCBWVkNGcmFtZUNvbnRleHQgKmZjKQoreworICAgIGNvbnN0 IFZWQ1BQUyAqcHBzICAgICAgICAgICAgPSBmYy0+cHMucHBzOworICAgIGNvbnN0IGludCBwaWNf c2l6ZV9pbl9taW5fdHUgPSBwcHMgPyBwcHMtPm1pbl90dV93aWR0aCAqIHBwcy0+bWluX3R1X2hl aWdodCA6IDA7CisgICAgY29uc3QgaW50IGNoYW5nZWQgICAgICAgICAgICA9IGZjLT50YWIuc3ou cGljX3NpemVfaW5fbWluX3R1ICE9IHBpY19zaXplX2luX21pbl90dTsKKworICAgIHRsX2luaXQo bCwgMSwgY2hhbmdlZCk7CisKKyAgICBUTF9BREQodHVfam9pbnRfY2Jjcl9yZXNpZHVhbF9mbGFn LCBwaWNfc2l6ZV9pbl9taW5fdHUpOworICAgIGZvciAoaW50IGkgPSBMVU1BOyBpIDw9IENIUk9N QTsgaSsrKSB7CisgICAgICAgIFRMX0FERCh0Yl9wb3NfeDBbaV0sIHBpY19zaXplX2luX21pbl90 dSk7CisgICAgICAgIFRMX0FERCh0Yl9wb3NfeTBbaV0sIHBpY19zaXplX2luX21pbl90dSk7Cisg ICAgICAgIFRMX0FERCh0Yl93aWR0aFtpXSwgIHBpY19zaXplX2luX21pbl90dSk7CisgICAgICAg IFRMX0FERCh0Yl9oZWlnaHRbaV0sIHBpY19zaXplX2luX21pbl90dSk7CisgICAgICAgIFRMX0FE RChwY21mW2ldLCAgICAgIHBpY19zaXplX2luX21pbl90dSk7CisgICAgfQorCisgICAgZm9yIChp bnQgaSA9IDA7IGkgPCBWVkNfTUFYX1NBTVBMRV9BUlJBWVM7IGkrKykgeworICAgICAgICBUTF9B REQodHVfY29kZWRfZmxhZ1tpXSwgcGljX3NpemVfaW5fbWluX3R1KTsKKyAgICAgICAgVExfQURE KHFwW2ldLCAgICAgICAgICAgIHBpY19zaXplX2luX21pbl90dSk7CisgICAgfQorfQorCitzdGF0 aWMgdm9pZCBic190bF9pbml0KFRhYkxpc3QgKmwsIFZWQ0ZyYW1lQ29udGV4dCAqZmMpCit7Cisg ICAgY29uc3QgVlZDUFBTICpwcHMgICA9IGZjLT5wcy5wcHM7CisgICAgY29uc3QgaW50IGJzX3dp ZHRoICA9IHBwcyA/IChwcHMtPndpZHRoID4+ICAyKSArIDEgOiAwOworICAgIGNvbnN0IGludCBi c19oZWlnaHQgPSBwcHMgPyAocHBzLT5oZWlnaHQgPj4gMikgKyAxIDogMDsKKyAgICBjb25zdCBp bnQgYnNfY291bnQgID0gYnNfd2lkdGggKiBic19oZWlnaHQ7CisgICAgY29uc3QgaW50IGNoYW5n ZWQgICA9IGZjLT50YWIuc3ouYnNfd2lkdGggIT0gYnNfd2lkdGggfHwKKyAgICAgICAgZmMtPnRh Yi5zei5ic19oZWlnaHQgIT0gYnNfaGVpZ2h0OworCisgICAgdGxfaW5pdChsLCAxLCBjaGFuZ2Vk KTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgVlZDX01BWF9TQU1QTEVfQVJSQVlTOyBpKysp IHsKKyAgICAgICAgVExfQUREKGhvcml6b250YWxfYnNbaV0sIGJzX2NvdW50KTsKKyAgICAgICAg VExfQUREKHZlcnRpY2FsX2JzW2ldLCAgIGJzX2NvdW50KTsKKyAgICB9CisgICAgVExfQUREKGhv cml6b250YWxfcSwgYnNfY291bnQpOworICAgIFRMX0FERChob3Jpem9udGFsX3AsIGJzX2NvdW50 KTsKKyAgICBUTF9BREQodmVydGljYWxfcCwgICBic19jb3VudCk7CisgICAgVExfQUREKHZlcnRp Y2FsX3EsICAgYnNfY291bnQpOworfQorCitzdGF0aWMgdm9pZCBwaXhlbF9idWZmZXJfbnpfdGxf aW5pdChUYWJMaXN0ICpsLCBWVkNGcmFtZUNvbnRleHQgKmZjKQoreworICAgIGNvbnN0IFZWQ1NQ UyAqc3BzICAgID0gZmMtPnBzLnNwczsKKyAgICBjb25zdCBWVkNQUFMgKnBwcyAgICA9IGZjLT5w cy5wcHM7CisgICAgY29uc3QgaW50IHdpZHRoICAgICAgPSBwcHMgPyBwcHMtPndpZHRoIDogMDsK KyAgICBjb25zdCBpbnQgaGVpZ2h0ICAgICA9IHBwcyA/IHBwcy0+aGVpZ2h0IDogMDsKKyAgICBj b25zdCBpbnQgY3R1X3dpZHRoICA9IHBwcyA/IHBwcy0+Y3RiX3dpZHRoIDogMDsKKyAgICBjb25z dCBpbnQgY3R1X2hlaWdodCA9IHBwcyA/IHBwcy0+Y3RiX2hlaWdodCA6IDA7CisgICAgY29uc3Qg aW50IGNocm9tYV9pZGMgPSBzcHMgPyBzcHMtPnItPnNwc19jaHJvbWFfZm9ybWF0X2lkYyA6IDA7 CisgICAgY29uc3QgaW50IHBzICAgICAgICAgPSBzcHMgPyBzcHMtPnBpeGVsX3NoaWZ0IDogMDsK KyAgICBjb25zdCBpbnQgY19lbmQgICAgICA9IGNocm9tYV9pZGMgPyBWVkNfTUFYX1NBTVBMRV9B UlJBWVMgOiAxOworICAgIGNvbnN0IGludCBjaGFuZ2VkICAgID0gZmMtPnRhYi5zei5jaHJvbWFf Zm9ybWF0X2lkYyAhPSBjaHJvbWFfaWRjIHx8CisgICAgICAgIGZjLT50YWIuc3oud2lkdGggIT0g d2lkdGggfHwgZmMtPnRhYi5zei5oZWlnaHQgIT0gaGVpZ2h0IHx8CisgICAgICAgIGZjLT50YWIu c3ouY3R1X3dpZHRoICE9IGN0dV93aWR0aCB8fCBmYy0+dGFiLnN6LmN0dV9oZWlnaHQgIT0gY3R1 X2hlaWdodDsKKworICAgIHRsX2luaXQobCwgMCwgY2hhbmdlZCk7CisKKyAgICBmb3IgKGludCBj X2lkeCA9IDA7IGNfaWR4IDwgY19lbmQ7IGNfaWR4KyspIHsKKyAgICAgICAgY29uc3QgaW50IHcg PSB3aWR0aCAgPj4gKHNwcyA/IHNwcy0+aHNoaWZ0W2NfaWR4XSA6IDApOworICAgICAgICBjb25z dCBpbnQgaCA9IGhlaWdodCA+PiAoc3BzID8gc3BzLT52c2hpZnRbY19pZHhdIDogMCk7CisgICAg ICAgIFRMX0FERChzYW9fcGl4ZWxfYnVmZmVyX2hbY19pZHhdLCAodyAqIDIgKiBjdHVfaGVpZ2h0 KSA8PCBwcyk7CisgICAgICAgIFRMX0FERChzYW9fcGl4ZWxfYnVmZmVyX3ZbY19pZHhdLCAoaCAq IDIgKiBjdHVfd2lkdGgpICA8PCBwcyk7CisgICAgfQorCisgICAgZm9yIChpbnQgY19pZHggPSAw OyBjX2lkeCA8IGNfZW5kOyBjX2lkeCsrKSB7CisgICAgICAgIGNvbnN0IGludCB3ID0gd2lkdGgg ID4+IChzcHMgPyBzcHMtPmhzaGlmdFtjX2lkeF0gOiAwKTsKKyAgICAgICAgY29uc3QgaW50IGgg PSBoZWlnaHQgPj4gKHNwcyA/IHNwcy0+dnNoaWZ0W2NfaWR4XSA6IDApOworICAgICAgICBjb25z dCBpbnQgYm9yZGVyX3BpeGVscyA9IGNfaWR4ID8gQUxGX0JPUkRFUl9DSFJPTUEgOiBBTEZfQk9S REVSX0xVTUE7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgaSsrKSB7CisgICAgICAg ICAgICBUTF9BREQoYWxmX3BpeGVsX2J1ZmZlcl9oW2NfaWR4XVtpXSwgKHcgKiBib3JkZXJfcGl4 ZWxzICogY3R1X2hlaWdodCkgPDwgcHMpOworICAgICAgICAgICAgVExfQUREKGFsZl9waXhlbF9i dWZmZXJfdltjX2lkeF1baV0sIGggKiBBTEZfUEFERElOR19TSVpFICogY3R1X3dpZHRoKTsKKyAg ICAgICAgfQorICAgIH0KK30KKworc3RhdGljIHZvaWQgbXNtX3RsX2luaXQoVGFiTGlzdCAqbCwg VlZDRnJhbWVDb250ZXh0ICpmYykKK3sKKyAgICBjb25zdCBWVkNQUFMgKnBwcyA9IGZjLT5wcy5w cHM7CisgICAgY29uc3QgaW50IHczMiAgICAgPSBwcHMgPyBBVl9DRUlMX1JTSElGVChwcHMtPndp ZHRoLCAgNSkgOiAwOworICAgIGNvbnN0IGludCBoMzIgICAgID0gcHBzID8gQVZfQ0VJTF9SU0hJ RlQocHBzLT5oZWlnaHQsIDUpIDogMDsKKyAgICBjb25zdCBpbnQgY2hhbmdlZCA9IEFWX0NFSUxf UlNISUZUKGZjLT50YWIuc3oud2lkdGgsICA1KSAhPSB3MzIgfHwKKyAgICAgICAgQVZfQ0VJTF9S U0hJRlQoZmMtPnRhYi5zei5oZWlnaHQsICA1KSAhPSBoMzI7CisKKyAgICB0bF9pbml0KGwsIDEs IGNoYW5nZWQpOworCisgICAgZm9yIChpbnQgaSA9IExVTUE7IGkgPD0gQ0hST01BOyBpKyspCisg ICAgICAgIFRMX0FERChtc21baV0sIHczMiAqIGgzMik7Cit9CisKK3N0YXRpYyB2b2lkIGlzcG1m X3RsX2luaXQoVGFiTGlzdCAqbCwgVlZDRnJhbWVDb250ZXh0ICpmYykKK3sKKyAgICBjb25zdCBW VkNQUFMgKnBwcyA9IGZjLT5wcy5wcHM7CisgICAgY29uc3QgaW50IHc2NCAgICAgPSBwcHMgPyBB Vl9DRUlMX1JTSElGVChwcHMtPndpZHRoLCAgNikgOiAwOworICAgIGNvbnN0IGludCBoNjQgICAg ID0gcHBzID8gQVZfQ0VJTF9SU0hJRlQocHBzLT5oZWlnaHQsIDYpIDogMDsKKyAgICBjb25zdCBp bnQgY2hhbmdlZCA9IEFWX0NFSUxfUlNISUZUKGZjLT50YWIuc3oud2lkdGgsICA2KSAhPSB3NjQg fHwKKyAgICAgICAgQVZfQ0VJTF9SU0hJRlQoZmMtPnRhYi5zei5oZWlnaHQsICA2KSAhPSBoNjQ7 CisKKyAgICB0bF9pbml0KGwsIDEsIGNoYW5nZWQpOworCisgICAgVExfQUREKGlzcG1mLCB3NjQg KiBoNjQpOworfQorCit0eXBlZGVmIHZvaWQgKCp0bF9pbml0X2ZuKShUYWJMaXN0ICpsLCBWVkNG cmFtZUNvbnRleHQgKmZjKTsKKworc3RhdGljIGludCBmcmFtZV9jb250ZXh0X2Zvcl9lYWNoX3Rs KFZWQ0ZyYW1lQ29udGV4dCAqZmMsIGludCAoKnVuYXJ5X2ZuKShUYWJMaXN0ICpsKSkKK3sKKyAg ICBjb25zdCB0bF9pbml0X2ZuIGluaXRbXSA9IHsKKyAgICAgICAgY3R1X3RsX2luaXQsCisgICAg ICAgIGN0dV9uel90bF9pbml0LAorICAgICAgICBtaW5fY2JfdGxfaW5pdCwKKyAgICAgICAgbWlu X3B1X3RsX2luaXQsCisgICAgICAgIG1pbl90dV90bF9pbml0LAorICAgICAgICBic190bF9pbml0 LAorICAgICAgICBwaXhlbF9idWZmZXJfbnpfdGxfaW5pdCwKKyAgICAgICAgbXNtX3RsX2luaXQs CisgICAgICAgIGlzcG1mX3RsX2luaXQsCisgICAgfTsKKworICAgIGZvciAoaW50IGkgPSAwOyBp IDwgRkZfQVJSQVlfRUxFTVMoaW5pdCk7IGkrKykgeworICAgICAgICBUYWJMaXN0IGw7CisgICAg ICAgIGludCByZXQ7CisKKyAgICAgICAgaW5pdFtpXSgmbCwgZmMpOworICAgICAgICByZXQgPSB1 bmFyeV9mbigmbCk7CisgICAgICAgIGlmIChyZXQgPCAwKQorICAgICAgICAgICAgcmV0dXJuIHJl dDsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfY3VzKFZWQ0Zy YW1lQ29udGV4dCAqZmMpCit7CisgICAgaWYgKGZjLT50YWIuY3R1cykgeworICAgICAgICBmb3Ig KGludCBpID0gMDsgaSA8IGZjLT50YWIuc3ouY3R1X2NvdW50OyBpKyspCisgICAgICAgICAgICBm Zl92dmNfY3R1X2ZyZWVfY3VzKGZjLT50YWIuY3R1cyArIGkpOworICAgIH0KK30KKworc3RhdGlj IHZvaWQgcGljX2FycmF5c19mcmVlKFZWQ0ZyYW1lQ29udGV4dCAqZmMpCit7CisgICAgZnJlZV9j dXMoZmMpOworICAgIGZyYW1lX2NvbnRleHRfZm9yX2VhY2hfdGwoZmMsIHRsX2ZyZWUpOworICAg IGZmX3JlZnN0cnVjdF9wb29sX3VuaW5pdCgmZmMtPnJwbF90YWJfcG9vbCk7CisgICAgZmZfcmVm c3RydWN0X3Bvb2xfdW5pbml0KCZmYy0+dGFiX2RtdnJfbXZmX3Bvb2wpOworCisgICAgbWVtc2V0 KCZmYy0+dGFiLnN6LCAwLCBzaXplb2YoZmMtPnRhYi5zeikpOworfQorCitzdGF0aWMgaW50IHBp Y19hcnJheXNfaW5pdChWVkNDb250ZXh0ICpzLCBWVkNGcmFtZUNvbnRleHQgKmZjKQoreworICAg IGNvbnN0IFZWQ1NQUyAqc3BzICAgICAgICAgICAgPSBmYy0+cHMuc3BzOworICAgIGNvbnN0IFZW Q1BQUyAqcHBzICAgICAgICAgICAgPSBmYy0+cHMucHBzOworICAgIGNvbnN0IGludCBjdHVfY291 bnQgICAgICAgICAgPSBwcHMtPmN0Yl9jb3VudDsKKyAgICBjb25zdCBpbnQgcGljX3NpemVfaW5f bWluX3B1ID0gcHBzLT5taW5fcHVfd2lkdGggKiBwcHMtPm1pbl9wdV9oZWlnaHQ7CisgICAgaW50 IHJldDsKKworICAgIGZyZWVfY3VzKGZjKTsKKworICAgIHJldCA9IGZyYW1lX2NvbnRleHRfZm9y X2VhY2hfdGwoZmMsIHRsX2NyZWF0ZSk7CisgICAgaWYgKHJldCA8IDApCisgICAgICAgIHJldHVy biByZXQ7CisKKyAgICBtZW1zZXQoZmMtPnRhYi5zbGljZV9pZHgsIC0xLCBzaXplb2YoKmZjLT50 YWIuc2xpY2VfaWR4KSAqIGZjLT50YWIuc3ouY3R1X2NvdW50KTsKKworICAgIGlmIChmYy0+dGFi LnN6LmN0dV9jb3VudCAhPSBjdHVfY291bnQpIHsKKyAgICAgICAgZmZfcmVmc3RydWN0X3Bvb2xf dW5pbml0KCZmYy0+cnBsX3RhYl9wb29sKTsKKyAgICAgICAgZmMtPnJwbF90YWJfcG9vbCA9IGZm X3JlZnN0cnVjdF9wb29sX2FsbG9jKGN0dV9jb3VudCAqIHNpemVvZihSZWZQaWNMaXN0VGFiKSwg MCk7CisgICAgICAgIGlmICghZmMtPnJwbF90YWJfcG9vbCkKKyAgICAgICAgICAgIHJldHVybiBB VkVSUk9SKEVOT01FTSk7CisgICAgfQorCisgICAgaWYgKGZjLT50YWIuc3oucGljX3NpemVfaW5f bWluX3B1ICE9IHBpY19zaXplX2luX21pbl9wdSkgeworICAgICAgICBmZl9yZWZzdHJ1Y3RfcG9v bF91bmluaXQoJmZjLT50YWJfZG12cl9tdmZfcG9vbCk7CisgICAgICAgIGZjLT50YWJfZG12cl9t dmZfcG9vbCA9IGZmX3JlZnN0cnVjdF9wb29sX2FsbG9jKAorICAgICAgICAgICAgcGljX3NpemVf aW5fbWluX3B1ICogc2l6ZW9mKE12RmllbGQpLCBGRl9SRUZTVFJVQ1RfUE9PTF9GTEFHX1pFUk9f RVZFUllfVElNRSk7CisgICAgICAgIGlmICghZmMtPnRhYl9kbXZyX212Zl9wb29sKQorICAgICAg ICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKyAgICB9CisKKyAgICBmYy0+dGFiLnN6LmN0 dV9jb3VudCAgICAgICAgICA9IHBwcy0+Y3RiX2NvdW50OworICAgIGZjLT50YWIuc3ouY3R1X3Np emUgICAgICAgICAgID0gMSA8PCBzcHMtPmN0Yl9sb2cyX3NpemVfeSA8PCBzcHMtPmN0Yl9sb2cy X3NpemVfeTsKKyAgICBmYy0+dGFiLnN6LnBpY19zaXplX2luX21pbl9jYiA9IHBwcy0+bWluX2Ni X3dpZHRoICogcHBzLT5taW5fY2JfaGVpZ2h0OworICAgIGZjLT50YWIuc3oucGljX3NpemVfaW5f bWluX3B1ID0gcGljX3NpemVfaW5fbWluX3B1OworICAgIGZjLT50YWIuc3oucGljX3NpemVfaW5f bWluX3R1ID0gcHBzLT5taW5fdHVfd2lkdGggKiBwcHMtPm1pbl90dV9oZWlnaHQ7CisgICAgZmMt PnRhYi5zei53aWR0aCAgICAgICAgICAgICAgPSBwcHMtPndpZHRoOworICAgIGZjLT50YWIuc3ou aGVpZ2h0ICAgICAgICAgICAgID0gcHBzLT5oZWlnaHQ7CisgICAgZmMtPnRhYi5zei5jdHVfd2lk dGggICAgICAgICAgPSBwcHMtPmN0Yl93aWR0aDsKKyAgICBmYy0+dGFiLnN6LmN0dV9oZWlnaHQg ICAgICAgICA9IHBwcy0+Y3RiX2hlaWdodDsKKyAgICBmYy0+dGFiLnN6LmNocm9tYV9mb3JtYXRf aWRjICA9IHNwcy0+ci0+c3BzX2Nocm9tYV9mb3JtYXRfaWRjOworICAgIGZjLT50YWIuc3oucGl4 ZWxfc2hpZnQgICAgICAgID0gc3BzLT5waXhlbF9zaGlmdDsKKyAgICBmYy0+dGFiLnN6LmJzX3dp ZHRoICAgICAgICAgICA9IChmYy0+cHMucHBzLT53aWR0aCA+PiAyKSArIDE7CisgICAgZmMtPnRh Yi5zei5ic19oZWlnaHQgICAgICAgICAgPSAoZmMtPnBzLnBwcy0+aGVpZ2h0ID4+IDIpICsgMTsK KworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1pbl9wb3NpdGl2ZShjb25zdCBpbnQg aWR4LCBjb25zdCBpbnQgZGlmZiwgY29uc3QgaW50IG1pbl9kaWZmKQoreworICAgIHJldHVybiBk aWZmID4gMCAmJiAoaWR4IDwgMCB8fCBkaWZmIDwgbWluX2RpZmYpOworfQorCitzdGF0aWMgaW50 IG1heF9uZWd0aXZlKGNvbnN0IGludCBpZHgsIGNvbnN0IGludCBkaWZmLCBjb25zdCBpbnQgbWF4 X2RpZmYpCit7CisgICAgcmV0dXJuIGRpZmYgPCAwICYmIChpZHggPCAwIHx8IGRpZmYgPiBtYXhf ZGlmZik7Cit9CisKK3R5cGVkZWYgaW50ICgqc212ZF9maW5kX2Z4bikoY29uc3QgaW50IGlkeCwg Y29uc3QgaW50IGRpZmYsIGNvbnN0IGludCBvbGRfZGlmZik7CisKK3N0YXRpYyBpbnQ4X3Qgc212 ZF9maW5kKGNvbnN0IFZWQ0ZyYW1lQ29udGV4dCAqZmMsIGNvbnN0IFNsaWNlQ29udGV4dCAqc2Ms IGludCBseCwgc212ZF9maW5kX2Z4biBmaW5kKQoreworICAgIGNvbnN0IEgyNjZSYXdTbGljZUhl YWRlciAqcnNoID0gc2MtPnNoLnI7CisgICAgY29uc3QgUmVmUGljTGlzdCAqcnBsICAgICAgICAg PSBzYy0+cnBsICsgbHg7CisgICAgY29uc3QgaW50IHBvYyAgICAgICAgICAgICAgICAgPSBmYy0+ cmVmLT5wb2M7CisgICAgaW50OF90IGlkeCAgICAgICAgICAgICAgICAgICAgPSAtMTsKKyAgICBp bnQgb2xkX2RpZmYgICAgICAgICAgICAgICAgICA9IC0xOworICAgIGZvciAoaW50IGkgPSAwOyBp IDwgcnNoLT5udW1fcmVmX2lkeF9hY3RpdmVbbHhdOyBpKyspIHsKKyAgICAgICAgaWYgKCFycGwt PmlzTG9uZ1Rlcm1baV0pIHsKKyAgICAgICAgICAgIGludCBkaWZmID0gcG9jIC0gcnBsLT5saXN0 W2ldOworICAgICAgICAgICAgaWYgKGZpbmQoaWR4LCBkaWZmLCBvbGRfZGlmZikpIHsKKyAgICAg ICAgICAgICAgICBpZHggPSBpOworICAgICAgICAgICAgICAgIG9sZF9kaWZmID0gZGlmZjsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gaWR4OworfQorCitzdGF0 aWMgdm9pZCBzbXZkX3JlZl9pZHgoY29uc3QgVlZDRnJhbWVDb250ZXh0ICpmYywgU2xpY2VDb250 ZXh0ICpzYykKK3sKKyAgICBWVkNTSCAqc2ggPSAmc2MtPnNoOworICAgIGlmIChJU19CKHNoLT5y KSkgeworICAgICAgICBzaC0+cmVmX2lkeF9zeW1bMF0gPSBzbXZkX2ZpbmQoZmMsIHNjLCAwLCBt aW5fcG9zaXRpdmUpOworICAgICAgICBzaC0+cmVmX2lkeF9zeW1bMV0gPSBzbXZkX2ZpbmQoZmMs IHNjLCAxLCBtYXhfbmVndGl2ZSk7CisgICAgICAgIGlmIChzaC0+cmVmX2lkeF9zeW1bMF0gPT0g LTEgfHwgc2gtPnJlZl9pZHhfc3ltWzFdID09IC0xKSB7CisgICAgICAgICAgICBzaC0+cmVmX2lk eF9zeW1bMF0gPSBzbXZkX2ZpbmQoZmMsIHNjLCAwLCBtYXhfbmVndGl2ZSk7CisgICAgICAgICAg ICBzaC0+cmVmX2lkeF9zeW1bMV0gPSBzbXZkX2ZpbmQoZmMsIHNjLCAxLCBtaW5fcG9zaXRpdmUp OworICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBlcHNfZnJlZShTbGljZUNvbnRl eHQgKnNsaWNlKQoreworICAgIGF2X2ZyZWVwKCZzbGljZS0+ZXBzKTsKKyAgICBzbGljZS0+bmJf ZXBzID0gMDsKK30KKworc3RhdGljIHZvaWQgc2xpY2VzX2ZyZWUoVlZDRnJhbWVDb250ZXh0ICpm YykKK3sKKyAgICBpZiAoZmMtPnNsaWNlcykgeworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8 IGZjLT5uYl9zbGljZXNfYWxsb2NhdGVkOyBpKyspIHsKKyAgICAgICAgICAgIFNsaWNlQ29udGV4 dCAqc2xpY2UgPSBmYy0+c2xpY2VzW2ldOworICAgICAgICAgICAgaWYgKHNsaWNlKSB7CisgICAg ICAgICAgICAgICAgZmZfcmVmc3RydWN0X3VucmVmKCZzbGljZS0+cmVmKTsKKyAgICAgICAgICAg ICAgICBmZl9yZWZzdHJ1Y3RfdW5yZWYoJnNsaWNlLT5zaC5yKTsKKyAgICAgICAgICAgICAgICBl cHNfZnJlZShzbGljZSk7CisgICAgICAgICAgICAgICAgYXZfZnJlZShzbGljZSk7CisgICAgICAg ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYXZfZnJlZXAoJmZjLT5zbGljZXMpOworICAgIH0K KyAgICBmYy0+bmJfc2xpY2VzX2FsbG9jYXRlZCA9IDA7CisgICAgZmMtPm5iX3NsaWNlcyA9IDA7 Cit9CisKK3N0YXRpYyBpbnQgc2xpY2VzX3JlYWxsb2MoVlZDRnJhbWVDb250ZXh0ICpmYykKK3sK KyAgICB2b2lkICpwOworICAgIGNvbnN0IGludCBzaXplID0gKGZjLT5uYl9zbGljZXNfYWxsb2Nh dGVkICsgMSkgKiAzIC8gMjsKKworICAgIGlmIChmYy0+bmJfc2xpY2VzIDwgZmMtPm5iX3NsaWNl c19hbGxvY2F0ZWQpCisgICAgICAgIHJldHVybiAwOworCisgICAgcCA9IGF2X3JlYWxsb2NfYXJy YXkoZmMtPnNsaWNlcywgc2l6ZSwgc2l6ZW9mKCpmYy0+c2xpY2VzKSk7CisgICAgaWYgKCFwKQor ICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOworCisgICAgZmMtPnNsaWNlcyA9IHA7Cisg ICAgZm9yIChpbnQgaSA9IGZjLT5uYl9zbGljZXNfYWxsb2NhdGVkOyBpIDwgc2l6ZTsgaSsrKSB7 CisgICAgICAgIGZjLT5zbGljZXNbaV0gPSBhdl9tYWxsb2N6KHNpemVvZigqZmMtPnNsaWNlc1sw XSkpOworICAgICAgICBpZiAoIWZjLT5zbGljZXNbaV0pIHsKKyAgICAgICAgICAgIGZjLT5uYl9z bGljZXNfYWxsb2NhdGVkID0gaTsKKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7 CisgICAgICAgIH0KKyAgICAgICAgZmMtPnNsaWNlc1tpXS0+c2xpY2VfaWR4ID0gaTsKKyAgICB9 CisgICAgZmMtPm5iX3NsaWNlc19hbGxvY2F0ZWQgPSBzaXplOworCisgICAgcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyB2b2lkIGVwX2luaXRfY2FiYWNfZGVjb2RlcihTbGljZUNvbnRleHQgKnNjLCBj b25zdCBpbnQgaW5kZXgsCisgICAgY29uc3QgSDI2NDVOQUwgKm5hbCwgR2V0Qml0Q29udGV4dCAq Z2IpCit7CisgICAgY29uc3QgSDI2NlJhd1NsaWNlSGVhZGVyICpyc2ggPSBzYy0+c2gucjsKKyAg ICBFbnRyeVBvaW50ICplcCAgICAgICAgICAgICAgICA9IHNjLT5lcHMgKyBpbmRleDsKKyAgICBp bnQgc2l6ZTsKKworICAgIGlmIChpbmRleCA8IHJzaC0+bnVtX2VudHJ5X3BvaW50cykgeworICAg ICAgICBpbnQgc2tpcHBlZCA9IDA7CisgICAgICAgIGludDY0X3Qgc3RhcnQgPSAgKGdiLT5pbmRl eCA+PiAzKTsKKyAgICAgICAgaW50NjRfdCBlbmQgPSBzdGFydCArIHJzaC0+c2hfZW50cnlfcG9p bnRfb2Zmc2V0X21pbnVzMVtpbmRleF0gKyAxOworICAgICAgICB3aGlsZSAoc2tpcHBlZCA8IG5h bC0+c2tpcHBlZF9ieXRlcyAmJiBuYWwtPnNraXBwZWRfYnl0ZXNfcG9zW3NraXBwZWRdIDw9IHN0 YXJ0KSB7CisgICAgICAgICAgICBza2lwcGVkKys7CisgICAgICAgIH0KKyAgICAgICAgd2hpbGUg KHNraXBwZWQgPCBuYWwtPnNraXBwZWRfYnl0ZXMgJiYgbmFsLT5za2lwcGVkX2J5dGVzX3Bvc1tz a2lwcGVkXSA8IGVuZCkgeworICAgICAgICAgICAgZW5kLS07CisgICAgICAgICAgICBza2lwcGVk Kys7CisgICAgICAgIH0KKyAgICAgICAgc2l6ZSA9IGVuZCAtIHN0YXJ0OworICAgIH0gZWxzZSB7 CisgICAgICAgIHNpemUgPSBnZXRfYml0c19sZWZ0KGdiKSAvIDg7CisgICAgfQorICAgIGZmX2lu aXRfY2FiYWNfZGVjb2RlciAoJmVwLT5jYywgZ2ItPmJ1ZmZlciArIGdldF9iaXRzX2NvdW50KGdi KSAvIDgsIHNpemUpOworICAgIHNraXBfYml0cyhnYiwgc2l6ZSAqIDgpOworfQorCitzdGF0aWMg aW50IHNsaWNlX2luaXRfZW50cnlfcG9pbnRzKFNsaWNlQ29udGV4dCAqc2MsCisgICAgVlZDRnJh bWVDb250ZXh0ICpmYywgY29uc3QgSDI2NDVOQUwgKm5hbCwgY29uc3QgQ29kZWRCaXRzdHJlYW1V bml0ICp1bml0KQoreworICAgIGNvbnN0IFZWQ1NIICpzaCAgICAgICAgICAgPSAmc2MtPnNoOwor ICAgIGNvbnN0IEgyNjZSYXdTbGljZSAqc2xpY2UgPSB1bml0LT5jb250ZW50X3JlZjsKKyAgICBp bnQgbmJfZXBzICAgICAgICAgICAgICAgID0gc2gtPnItPm51bV9lbnRyeV9wb2ludHMgKyAxOwor ICAgIGludCBjdHVfYWRkciAgICAgICAgICAgICAgPSAwOworICAgIEdldEJpdENvbnRleHQgZ2I7 CisKKyAgICBpZiAoc2MtPm5iX2VwcyAhPSBuYl9lcHMpIHsKKyAgICAgICAgZXBzX2ZyZWUoc2Mp OworICAgICAgICBzYy0+ZXBzID0gYXZfY2FsbG9jKG5iX2Vwcywgc2l6ZW9mKCpzYy0+ZXBzKSk7 CisgICAgICAgIGlmICghc2MtPmVwcykKKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01F TSk7CisgICAgICAgIHNjLT5uYl9lcHMgPSBuYl9lcHM7CisgICAgfQorCisgICAgaW5pdF9nZXRf Yml0czgoJmdiLCBzbGljZS0+ZGF0YSwgc2xpY2UtPmRhdGFfc2l6ZSk7CisgICAgZm9yIChpbnQg aSA9IDA7IGkgPCBzYy0+bmJfZXBzOyBpKyspCisgICAgeworICAgICAgICBFbnRyeVBvaW50ICpl cCA9IHNjLT5lcHMgKyBpOworCisgICAgICAgIGVwLT5jdHVfc3RhcnQgPSBjdHVfYWRkcjsKKyAg ICAgICAgZXAtPmN0dV9lbmQgICA9IChpICsgMSA9PSBzYy0+bmJfZXBzID8gc2gtPm51bV9jdHVz X2luX2N1cnJfc2xpY2UgOiBzaC0+ZW50cnlfcG9pbnRfc3RhcnRfY3R1W2ldKTsKKworICAgICAg ICBmb3IgKGludCBqID0gZXAtPmN0dV9zdGFydDsgaiA8IGVwLT5jdHVfZW5kOyBqKyspIHsKKyAg ICAgICAgICAgIGNvbnN0IGludCBycyA9IHNjLT5zaC5jdGJfYWRkcl9pbl9jdXJyX3NsaWNlW2pd OworICAgICAgICAgICAgZmMtPnRhYi5zbGljZV9pZHhbcnNdID0gc2MtPnNsaWNlX2lkeDsKKyAg ICAgICAgfQorCisgICAgICAgIGVwX2luaXRfY2FiYWNfZGVjb2RlcihzYywgaSwgbmFsLCAmZ2Ip OworCisgICAgICAgIGlmIChpICsgMSA8IHNjLT5uYl9lcHMpCisgICAgICAgICAgICBjdHVfYWRk ciA9IHNoLT5lbnRyeV9wb2ludF9zdGFydF9jdHVbaV07CisgICAgfQorCisgICAgcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyBWVkNGcmFtZUNvbnRleHQqIGdldF9mcmFtZV9jb250ZXh0KGNvbnN0IFZW Q0NvbnRleHQgKnMsIGNvbnN0IFZWQ0ZyYW1lQ29udGV4dCAqZmMsIGNvbnN0IGludCBkZWx0YSkK K3sKKyAgICBjb25zdCBpbnQgc2l6ZSA9IHMtPm5iX2ZjczsKKyAgICBjb25zdCBpbnQgaWR4ICA9 IChmYyAtIHMtPmZjcyArIGRlbHRhICArIHNpemUpICUgc2l6ZTsKKyAgICByZXR1cm4gcy0+ZmNz ICsgaWR4OworfQorCitzdGF0aWMgaW50IHJlZl9mcmFtZShWVkNGcmFtZSAqZHN0LCBjb25zdCBW VkNGcmFtZSAqc3JjKQoreworICAgIGludCByZXQ7CisKKyAgICByZXQgPSBhdl9mcmFtZV9yZWYo ZHN0LT5mcmFtZSwgc3JjLT5mcmFtZSk7CisgICAgaWYgKHJldCA8IDApCisgICAgICAgIHJldHVy biByZXQ7CisKKyAgICBmZl9yZWZzdHJ1Y3RfcmVwbGFjZSgmZHN0LT5wcm9ncmVzcywgc3JjLT5w cm9ncmVzcyk7CisKKyAgICBmZl9yZWZzdHJ1Y3RfcmVwbGFjZSgmZHN0LT50YWJfZG12cl9tdmYs IHNyYy0+dGFiX2RtdnJfbXZmKTsKKworICAgIGZmX3JlZnN0cnVjdF9yZXBsYWNlKCZkc3QtPnJw bF90YWIsIHNyYy0+cnBsX3RhYik7CisgICAgZmZfcmVmc3RydWN0X3JlcGxhY2UoJmRzdC0+cnBs LCBzcmMtPnJwbCk7CisgICAgZHN0LT5uYl9ycGxfZWxlbXMgPSBzcmMtPm5iX3JwbF9lbGVtczsK KworICAgIGRzdC0+cG9jID0gc3JjLT5wb2M7CisgICAgZHN0LT5jdGJfY291bnQgPSBzcmMtPmN0 Yl9jb3VudDsKKyAgICBkc3QtPmZsYWdzID0gc3JjLT5mbGFnczsKKyAgICBkc3QtPnNlcXVlbmNl ID0gc3JjLT5zZXF1ZW5jZTsKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgYXZfY29sZCB2 b2lkIGZyYW1lX2NvbnRleHRfZnJlZShWVkNGcmFtZUNvbnRleHQgKmZjKQoreworICAgIHNsaWNl c19mcmVlKGZjKTsKKworICAgIGZmX3JlZnN0cnVjdF9wb29sX3VuaW5pdCgmZmMtPnR1X3Bvb2wp OworICAgIGZmX3JlZnN0cnVjdF9wb29sX3VuaW5pdCgmZmMtPmN1X3Bvb2wpOworCisgICAgZm9y IChpbnQgaSA9IDA7IGkgPCBGRl9BUlJBWV9FTEVNUyhmYy0+RFBCKTsgaSsrKSB7CisgICAgICAg IGZmX3Z2Y191bnJlZl9mcmFtZShmYywgJmZjLT5EUEJbaV0sIH4wKTsKKyAgICAgICAgYXZfZnJh bWVfZnJlZSgmZmMtPkRQQltpXS5mcmFtZSk7CisgICAgfQorCisgICAgZmZfdnZjX2ZyYW1lX3Ro cmVhZF9mcmVlKGZjKTsKKyAgICBwaWNfYXJyYXlzX2ZyZWUoZmMpOworICAgIGF2X2ZyYW1lX2Zy ZWUoJmZjLT5vdXRwdXRfZnJhbWUpOworICAgIGZmX3Z2Y19mcmFtZV9wc19mcmVlKCZmYy0+cHMp OworfQorCitzdGF0aWMgYXZfY29sZCBpbnQgZnJhbWVfY29udGV4dF9pbml0KFZWQ0ZyYW1lQ29u dGV4dCAqZmMsIEFWQ29kZWNDb250ZXh0ICphdmN0eCkKK3sKKworICAgIGZjLT5sb2dfY3R4ID0g YXZjdHg7CisKKyAgICBmYy0+b3V0cHV0X2ZyYW1lID0gYXZfZnJhbWVfYWxsb2MoKTsKKyAgICBp ZiAoIWZjLT5vdXRwdXRfZnJhbWUpCisgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7CisK KyAgICBmb3IgKGludCBqID0gMDsgaiA8IEZGX0FSUkFZX0VMRU1TKGZjLT5EUEIpOyBqKyspIHsK KyAgICAgICAgZmMtPkRQQltqXS5mcmFtZSA9IGF2X2ZyYW1lX2FsbG9jKCk7CisgICAgICAgIGlm ICghZmMtPkRQQltqXS5mcmFtZSkKKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7 CisgICAgfQorICAgIGZjLT5jdV9wb29sID0gZmZfcmVmc3RydWN0X3Bvb2xfYWxsb2Moc2l6ZW9m KENvZGluZ1VuaXQpLCAwKTsKKyAgICBpZiAoIWZjLT5jdV9wb29sKQorICAgICAgICByZXR1cm4g QVZFUlJPUihFTk9NRU0pOworCisgICAgZmMtPnR1X3Bvb2wgPSBmZl9yZWZzdHJ1Y3RfcG9vbF9h bGxvYyhzaXplb2YoVHJhbnNmb3JtVW5pdCksIDApOworICAgIGlmICghZmMtPnR1X3Bvb2wpCisg ICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7CisKKyAgICByZXR1cm4gMDsKK30KKworc3Rh dGljIGludCBmcmFtZV9jb250ZXh0X3NldHVwKFZWQ0ZyYW1lQ29udGV4dCAqZmMsIFZWQ0NvbnRl eHQgKnMpCit7CisgICAgaW50IHJldDsKKworICAgIC8vIGNvcHkgcmVmcyBmcm9tIHRoZSBsYXN0 IGZyYW1lCisgICAgaWYgKHMtPm5iX2ZyYW1lcyAmJiBzLT5uYl9mY3MgPiAxKSB7CisgICAgICAg IFZWQ0ZyYW1lQ29udGV4dCAqcHJldiA9IGdldF9mcmFtZV9jb250ZXh0KHMsIGZjLCAtMSk7Cisg ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgRkZfQVJSQVlfRUxFTVMoZmMtPkRQQik7IGkrKykg eworICAgICAgICAgICAgZmZfdnZjX3VucmVmX2ZyYW1lKGZjLCAmZmMtPkRQQltpXSwgfjApOwor ICAgICAgICAgICAgaWYgKHByZXYtPkRQQltpXS5mcmFtZS0+YnVmWzBdKSB7CisgICAgICAgICAg ICAgICAgcmV0ID0gcmVmX2ZyYW1lKCZmYy0+RFBCW2ldLCAmcHJldi0+RFBCW2ldKTsKKyAgICAg ICAgICAgICAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsK KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChJU19JRFIocykpIHsK KyAgICAgICAgcy0+c2VxX2RlY29kZSA9IChzLT5zZXFfZGVjb2RlICsgMSkgJiAweGZmOworICAg ICAgICBmZl92dmNfY2xlYXJfcmVmcyhmYyk7CisgICAgfQorCisgICAgcmV0ID0gcGljX2FycmF5 c19pbml0KHMsIGZjKTsKKyAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgcmV0dXJuIHJldDsKKyAg ICBmZl92dmNfZHNwX2luaXQoJmZjLT52dmNkc3AsIGZjLT5wcy5zcHMtPmJpdF9kZXB0aCk7Cisg ICAgZmZfdmlkZW9kc3BfaW5pdCgmZmMtPnZkc3AsIGZjLT5wcy5zcHMtPmJpdF9kZXB0aCk7Cisg ICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZnJhbWVfc3RhcnQoVlZDQ29udGV4dCAqcywg VlZDRnJhbWVDb250ZXh0ICpmYywgU2xpY2VDb250ZXh0ICpzYykKK3sKKyAgICBjb25zdCBWVkNQ SCAqcGggICAgICAgICAgICAgICAgID0gJmZjLT5wcy5waDsKKyAgICBjb25zdCBIMjY2UmF3U2xp Y2VIZWFkZXIgKnJzaCAgID0gc2MtPnNoLnI7CisgICAgaW50IHJldDsKKworICAgIC8vIDguMy4x IERlY29kaW5nIHByb2Nlc3MgZm9yIHBpY3R1cmUgb3JkZXIgY291bnQKKyAgICBpZiAoIXMtPnRl bXBvcmFsX2lkICYmICFwaC0+ci0+cGhfbm9uX3JlZl9waWNfZmxhZyAmJiAhKElTX1JBU0wocykg fHwgSVNfUkFETChzKSkpCisgICAgICAgIHMtPnBvY190aWQwID0gcGgtPnBvYzsKKworICAgIGlm ICgocmV0ID0gZmZfdnZjX3NldF9uZXdfcmVmKHMsIGZjLCAmZmMtPmZyYW1lKSkgPCAwKQorICAg ICAgICBnb3RvIGZhaWw7CisKKyAgICBpZiAoIUlTX0lEUihzKSkKKyAgICAgICAgZmZfdnZjX2J1 bXBfZnJhbWUocywgZmMpOworCisgICAgYXZfZnJhbWVfdW5yZWYoZmMtPm91dHB1dF9mcmFtZSk7 CisKKyAgICBpZiAoKHJldCA9IGZmX3Z2Y19vdXRwdXRfZnJhbWUocywgZmMsIGZjLT5vdXRwdXRf ZnJhbWUscnNoLT5zaF9ub19vdXRwdXRfb2ZfcHJpb3JfcGljc19mbGFnLCAwKSkgPCAwKQorICAg ICAgICBnb3RvIGZhaWw7CisKKyAgICBpZiAoKHJldCA9IGZmX3Z2Y19mcmFtZV9ycGwocywgZmMs IHNjKSkgPCAwKQorICAgICAgICBnb3RvIGZhaWw7CisKKyAgICBpZiAoKHJldCA9IGZmX3Z2Y19m cmFtZV90aHJlYWRfaW5pdChmYykpIDwgMCkKKyAgICAgICAgZ290byBmYWlsOworICAgIHJldHVy biAwOworZmFpbDoKKyAgICBpZiAoZmMtPnJlZikKKyAgICAgICAgZmZfdnZjX3VucmVmX2ZyYW1l KGZjLCBmYy0+cmVmLCB+MCk7CisgICAgZmMtPnJlZiA9IE5VTEw7CisgICAgcmV0dXJuIHJldDsK K30KKworc3RhdGljIGludCBzbGljZV9zdGFydChTbGljZUNvbnRleHQgKnNjLCBWVkNDb250ZXh0 ICpzLCBWVkNGcmFtZUNvbnRleHQgKmZjLAorICAgIGNvbnN0IENvZGVkQml0c3RyZWFtVW5pdCAq dW5pdCwgY29uc3QgaW50IGlzX2ZpcnN0X3NsaWNlKQoreworICAgIFZWQ1NIICpzaCA9ICZzYy0+ c2g7CisgICAgaW50IHJldDsKKworICAgIHJldCA9IGZmX3Z2Y19kZWNvZGVfc2goc2gsICZmYy0+ cHMsIHVuaXQpOworICAgIGlmIChyZXQgPCAwKQorICAgICAgICByZXR1cm4gcmV0OworCisgICAg ZmZfcmVmc3RydWN0X3JlcGxhY2UoJnNjLT5yZWYsIHVuaXQtPmNvbnRlbnRfcmVmKTsKKworICAg IGlmIChpc19maXJzdF9zbGljZSkgeworICAgICAgICByZXQgPSBmcmFtZV9zdGFydChzLCBmYywg c2MpOworICAgICAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAg fSBlbHNlIGlmIChmYy0+cmVmKSB7CisgICAgICAgIGlmICghSVNfSShzaC0+cikpIHsKKyAgICAg ICAgICAgIHJldCA9IGZmX3Z2Y19zbGljZV9ycGwocywgZmMsIHNjKTsKKyAgICAgICAgICAgIGlm IChyZXQgPCAwKSB7CisgICAgICAgICAgICAgICAgYXZfbG9nKGZjLT5sb2dfY3R4LCBBVl9MT0df V0FSTklORywKKyAgICAgICAgICAgICAgICAgICAgICAgIkVycm9yIGNvbnN0cnVjdGluZyB0aGUg cmVmZXJlbmNlIGxpc3RzIGZvciB0aGUgY3VycmVudCBzbGljZS5cbiIpOworICAgICAgICAgICAg ICAgIHJldHVybiByZXQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IGVsc2Ugewor ICAgICAgICBhdl9sb2coZmMtPmxvZ19jdHgsIEFWX0xPR19FUlJPUiwgIkZpcnN0IHNsaWNlIGlu IGEgZnJhbWUgbWlzc2luZy5cbiIpOworICAgICAgICByZXR1cm4gcmV0OworICAgIH0KKworICAg IGlmICghSVNfSShzaC0+cikpCisgICAgICAgIHNtdmRfcmVmX2lkeChmYywgc2MpOworCisgICAg cmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGV4cG9ydF9mcmFtZV9wYXJhbXMoVlZDQ29udGV4 dCAqcywgY29uc3QgVlZDRnJhbWVDb250ZXh0ICpmYykKK3sKKyAgICBBVkNvZGVjQ29udGV4dCAq YyA9IHMtPmF2Y3R4OworICAgIGNvbnN0IFZWQ1NQUyAqc3BzID0gZmMtPnBzLnNwczsKKyAgICBj b25zdCBWVkNQUFMgKnBwcyA9IGZjLT5wcy5wcHM7CisKKyAgICBjLT5waXhfZm10ICAgICAgPSBz cHMtPnBpeF9mbXQ7CisgICAgYy0+Y29kZWRfd2lkdGggID0gcHBzLT53aWR0aDsKKyAgICBjLT5j b2RlZF9oZWlnaHQgPSBwcHMtPmhlaWdodDsKKyAgICBjLT53aWR0aCAgICAgICAgPSBwcHMtPndp ZHRoICAtIHBwcy0+ci0+cHBzX2NvbmZfd2luX2xlZnRfb2Zmc2V0IC0gcHBzLT5yLT5wcHNfY29u Zl93aW5fcmlnaHRfb2Zmc2V0OworICAgIGMtPmhlaWdodCAgICAgICA9IHBwcy0+aGVpZ2h0IC0g cHBzLT5yLT5wcHNfY29uZl93aW5fdG9wX29mZnNldCAtIHBwcy0+ci0+cHBzX2NvbmZfd2luX2Jv dHRvbV9vZmZzZXQ7Cit9CisKK3N0YXRpYyBpbnQgZnJhbWVfc2V0dXAoVlZDRnJhbWVDb250ZXh0 ICpmYywgVlZDQ29udGV4dCAqcykKK3sKKyAgICBpbnQgcmV0ID0gZmZfdnZjX2RlY29kZV9mcmFt ZV9wcygmZmMtPnBzLCBzKTsKKyAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgcmV0dXJuIHJldDsK KworICAgIHJldCA9IGZyYW1lX2NvbnRleHRfc2V0dXAoZmMsIHMpOworICAgIGlmIChyZXQgPCAw KQorICAgICAgICByZXR1cm4gcmV0OworCisgICAgZXhwb3J0X2ZyYW1lX3BhcmFtcyhzLCBmYyk7 CisgICAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBkZWNvZGVfc2xpY2UoVlZDQ29udGV4 dCAqcywgVlZDRnJhbWVDb250ZXh0ICpmYywgY29uc3QgSDI2NDVOQUwgKm5hbCwgY29uc3QgQ29k ZWRCaXRzdHJlYW1Vbml0ICp1bml0KQoreworICAgIGludCByZXQ7CisgICAgU2xpY2VDb250ZXh0 ICpzYzsKKyAgICBjb25zdCBpbnQgaXNfZmlyc3Rfc2xpY2UgPSAhZmMtPm5iX3NsaWNlczsKKwor ICAgIHJldCA9IHNsaWNlc19yZWFsbG9jKGZjKTsKKyAgICBpZiAocmV0IDwgMCkKKyAgICAgICAg cmV0dXJuIHJldDsKKworICAgIHNjID0gZmMtPnNsaWNlc1tmYy0+bmJfc2xpY2VzXTsKKworICAg IHMtPnZjbF91bml0X3R5cGUgPSBuYWwtPnR5cGU7CisgICAgaWYgKGlzX2ZpcnN0X3NsaWNlKSB7 CisgICAgICAgIHJldCA9IGZyYW1lX3NldHVwKGZjLCBzKTsKKyAgICAgICAgaWYgKHJldCA8IDAp CisgICAgICAgICAgICByZXR1cm4gcmV0OworICAgIH0KKworICAgIHJldCA9IHNsaWNlX3N0YXJ0 KHNjLCBzLCBmYywgdW5pdCwgaXNfZmlyc3Rfc2xpY2UpOworICAgIGlmIChyZXQgPCAwKQorICAg ICAgICByZXR1cm4gcmV0OworCisgICAgcmV0ID0gc2xpY2VfaW5pdF9lbnRyeV9wb2ludHMoc2Ms IGZjLCBuYWwsIHVuaXQpOworICAgIGlmIChyZXQgPCAwKQorICAgICAgICByZXR1cm4gcmV0Owor ICAgIGZjLT5uYl9zbGljZXMrKzsKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRl Y29kZV9uYWxfdW5pdChWVkNDb250ZXh0ICpzLCBWVkNGcmFtZUNvbnRleHQgKmZjLCBjb25zdCBI MjY0NU5BTCAqbmFsLCBjb25zdCBDb2RlZEJpdHN0cmVhbVVuaXQgKnVuaXQpCit7CisgICAgaW50 ICByZXQ7CisKKyAgICBzLT50ZW1wb3JhbF9pZCA9IG5hbC0+dGVtcG9yYWxfaWQ7CisKKyAgICBz d2l0Y2ggKHVuaXQtPnR5cGUpIHsKKyAgICBjYXNlIFZWQ19WUFNfTlVUOgorICAgIGNhc2UgVlZD X1NQU19OVVQ6CisgICAgY2FzZSBWVkNfUFBTX05VVDoKKyAgICAgICAgLyogdnBzLCBzcHMsIHNw cyBjYWNoZWQgYnkgcy0+Y2JjICovCisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVlZDX1RSQUlM X05VVDoKKyAgICBjYXNlIFZWQ19TVFNBX05VVDoKKyAgICBjYXNlIFZWQ19SQURMX05VVDoKKyAg ICBjYXNlIFZWQ19SQVNMX05VVDoKKyAgICBjYXNlIFZWQ19JRFJfV19SQURMOgorICAgIGNhc2Ug VlZDX0lEUl9OX0xQOgorICAgIGNhc2UgVlZDX0NSQV9OVVQ6CisgICAgY2FzZSBWVkNfR0RSX05V VDoKKyAgICAgICAgcmV0ID0gZGVjb2RlX3NsaWNlKHMsIGZjLCBuYWwsIHVuaXQpOworICAgICAg ICBpZiAocmV0IDwgMCkKKyAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgIGJyZWFrOwor ICAgIGNhc2UgVlZDX1BSRUZJWF9BUFNfTlVUOgorICAgIGNhc2UgVlZDX1NVRkZJWF9BUFNfTlVU OgorICAgICAgICByZXQgPSBmZl92dmNfZGVjb2RlX2Fwcygmcy0+cHMsIHVuaXQpOworICAgICAg ICBpZiAocmV0IDwgMCkKKyAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgIGJyZWFrOwor ICAgIH0KKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRlY29kZV9uYWxfdW5pdHMo VlZDQ29udGV4dCAqcywgVlZDRnJhbWVDb250ZXh0ICpmYywgQVZQYWNrZXQgKmF2cGt0KQorewor ICAgIGNvbnN0IENvZGVkQml0c3RyZWFtSDI2NkNvbnRleHQgKmgyNjYgPSBzLT5jYmMtPnByaXZf ZGF0YTsKKyAgICBDb2RlZEJpdHN0cmVhbUZyYWdtZW50ICpmcmFtZSAgICAgICAgID0gJnMtPmN1 cnJlbnRfZnJhbWU7CisgICAgaW50IHJldCA9IDA7CisgICAgaW50IGVvc19hdF9zdGFydCA9IDE7 CisgICAgcy0+bGFzdF9lb3MgPSBzLT5lb3M7CisgICAgcy0+ZW9zID0gMDsKKworICAgIGZmX2Ni c19mcmFnbWVudF9yZXNldChmcmFtZSk7CisgICAgcmV0ID0gZmZfY2JzX3JlYWRfcGFja2V0KHMt PmNiYywgZnJhbWUsIGF2cGt0KTsKKyAgICBpZiAocmV0IDwgMCkgeworICAgICAgICBhdl9sb2co cy0+YXZjdHgsIEFWX0xPR19FUlJPUiwgIkZhaWxlZCB0byByZWFkIHBhY2tldC5cbiIpOworICAg ICAgICByZXR1cm4gcmV0OworICAgIH0KKyAgICAvKiBkZWNvZGUgdGhlIE5BTCB1bml0cyAqLwor ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZnJhbWUtPm5iX3VuaXRzOyBpKyspIHsKKyAgICAgICAg Y29uc3QgSDI2NDVOQUwgKm5hbCAgICAgICAgICAgID0gaDI2Ni0+Y29tbW9uLnJlYWRfcGFja2V0 Lm5hbHMgKyBpOworICAgICAgICBjb25zdCBDb2RlZEJpdHN0cmVhbVVuaXQgKnVuaXQgPSBmcmFt ZS0+dW5pdHMgKyBpOworCisgICAgICAgIGlmICh1bml0LT50eXBlID09IFZWQ19FT0JfTlVUIHx8 IHVuaXQtPnR5cGUgPT0gVlZDX0VPU19OVVQpIHsKKyAgICAgICAgICAgIGlmIChlb3NfYXRfc3Rh cnQpCisgICAgICAgICAgICAgICAgcy0+bGFzdF9lb3MgPSAxOworICAgICAgICAgICAgZWxzZQor ICAgICAgICAgICAgICAgIHMtPmVvcyA9IDE7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg ICByZXQgPSBkZWNvZGVfbmFsX3VuaXQocywgZmMsIG5hbCwgdW5pdCk7CisgICAgICAgICAgICBp ZiAocmV0IDwgMCkgeworICAgICAgICAgICAgICAgIGF2X2xvZyhzLT5hdmN0eCwgQVZfTE9HX1dB Uk5JTkcsCisgICAgICAgICAgICAgICAgICAgICAgICAiRXJyb3IgcGFyc2luZyBOQUwgdW5pdCAj JWQuXG4iLCBpKTsKKyAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgICAgICB9Cisg ICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIDA7CisKK2ZhaWw6CisgICAgaWYgKGZjLT5yZWYp CisgICAgICAgIGZmX3Z2Y19yZXBvcnRfZnJhbWVfZmluaXNoZWQoZmMtPnJlZik7CisgICAgcmV0 dXJuIHJldDsKK30KKworc3RhdGljIGludCBzZXRfb3V0cHV0X2Zvcm1hdChjb25zdCBWVkNDb250 ZXh0ICpzLCBjb25zdCBBVkZyYW1lICpvdXRwdXQpCit7CisgICAgQVZDb2RlY0NvbnRleHQgKmMg PSBzLT5hdmN0eDsKKyAgICBpbnQgcmV0OworCisgICAgaWYgKG91dHB1dC0+d2lkdGggIT0gYy0+ d2lkdGggfHwgb3V0cHV0LT5oZWlnaHQgIT0gYy0+aGVpZ2h0KSB7CisgICAgICAgIGlmICgocmV0 ID0gZmZfc2V0X2RpbWVuc2lvbnMoYywgb3V0cHV0LT53aWR0aCwgb3V0cHV0LT5oZWlnaHQpKSA8 IDApCisgICAgICAgICAgICByZXR1cm4gcmV0OworICAgIH0KKyAgICBjLT5waXhfZm10ID0gb3V0 cHV0LT5mb3JtYXQ7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd2FpdF9kZWxheWVk X2ZyYW1lKFZWQ0NvbnRleHQgKnMsIEFWRnJhbWUgKm91dHB1dCwgaW50ICpnb3Rfb3V0cHV0KQor eworICAgIFZWQ0ZyYW1lQ29udGV4dCAqZGVsYXllZCA9IGdldF9mcmFtZV9jb250ZXh0KHMsIHMt PmZjcywgcy0+bmJfZnJhbWVzIC0gcy0+bmJfZGVsYXllZCk7CisgICAgaW50IHJldCAgICAgICAg ICAgICAgICAgID0gZmZfdnZjX2ZyYW1lX3dhaXQocywgZGVsYXllZCk7CisKKyAgICBpZiAoIXJl dCAmJiBkZWxheWVkLT5vdXRwdXRfZnJhbWUtPmJ1ZlswXSAmJiBvdXRwdXQpIHsKKyAgICAgICAg YXZfZnJhbWVfbW92ZV9yZWYob3V0cHV0LCBkZWxheWVkLT5vdXRwdXRfZnJhbWUpOworICAgICAg ICByZXQgPSBzZXRfb3V0cHV0X2Zvcm1hdChzLCBvdXRwdXQpOworICAgICAgICBpZiAoIXJldCkK KyAgICAgICAgICAgICpnb3Rfb3V0cHV0ID0gMTsKKyAgICB9CisgICAgcy0+bmJfZGVsYXllZC0t OworCisgICAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBzdWJtaXRfZnJhbWUoVlZDQ29u dGV4dCAqcywgVlZDRnJhbWVDb250ZXh0ICpmYywgQVZGcmFtZSAqb3V0cHV0LCBpbnQgKmdvdF9v dXRwdXQpCit7CisgICAgaW50IHJldDsKKyAgICBzLT5uYl9mcmFtZXMrKzsKKyAgICBzLT5uYl9k ZWxheWVkKys7CisgICAgZmZfdnZjX2ZyYW1lX3N1Ym1pdChzLCBmYyk7CisgICAgaWYgKHMtPm5i X2RlbGF5ZWQgPj0gcy0+bmJfZmNzKSB7CisgICAgICAgIGlmICgocmV0ID0gd2FpdF9kZWxheWVk X2ZyYW1lKHMsIG91dHB1dCwgZ290X291dHB1dCkpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBy ZXQ7CisgICAgfQorICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdldF9kZWNvZGVkX2Zy YW1lKFZWQ0NvbnRleHQgKnMsIEFWRnJhbWUgKm91dHB1dCwgaW50ICpnb3Rfb3V0cHV0KQorewor ICAgIGludCByZXQ7CisgICAgd2hpbGUgKHMtPm5iX2RlbGF5ZWQpIHsKKyAgICAgICAgaWYgKChy ZXQgPSB3YWl0X2RlbGF5ZWRfZnJhbWUocywgb3V0cHV0LCBnb3Rfb3V0cHV0KSkgPCAwKQorICAg ICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAgaWYgKCpnb3Rfb3V0cHV0KQorICAgICAgICAg ICAgcmV0dXJuIDA7CisgICAgfQorICAgIGlmIChzLT5uYl9mcmFtZXMpIHsKKyAgICAgICAgLy93 ZSBzdGlsbCBoYXZlIGZyYW1lcyBjYWNoZWQgaW4gZHBiLgorICAgICAgICBWVkNGcmFtZUNvbnRl eHQgKmxhc3QgPSBnZXRfZnJhbWVfY29udGV4dChzLCBzLT5mY3MsIHMtPm5iX2ZyYW1lcyAtIDEp OworCisgICAgICAgIHJldCA9IGZmX3Z2Y19vdXRwdXRfZnJhbWUocywgbGFzdCwgb3V0cHV0LCAw LCAxKTsKKyAgICAgICAgaWYgKHJldCA8IDApCisgICAgICAgICAgICByZXR1cm4gcmV0OworICAg ICAgICBpZiAocmV0KSB7CisgICAgICAgICAgICAqZ290X291dHB1dCA9IHJldDsKKyAgICAgICAg ICAgIGlmICgocmV0ID0gc2V0X291dHB1dF9mb3JtYXQocywgb3V0cHV0KSkgPCAwKQorICAgICAg ICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyBpbnQgdnZjX2RlY29kZV9mcmFtZShBVkNvZGVjQ29udGV4dCAqYXZjdHgsIEFW RnJhbWUgKm91dHB1dCwKKyAgICBpbnQgKmdvdF9vdXRwdXQsIEFWUGFja2V0ICphdnBrdCkKK3sK KyAgICBWVkNDb250ZXh0ICpzID0gYXZjdHgtPnByaXZfZGF0YTsKKyAgICBWVkNGcmFtZUNvbnRl eHQgKmZjOworICAgIGludCByZXQ7CisKKyAgICBpZiAoIWF2cGt0LT5zaXplKQorICAgICAgICBy ZXR1cm4gZ2V0X2RlY29kZWRfZnJhbWUocywgb3V0cHV0LCBnb3Rfb3V0cHV0KTsKKworICAgIGZj ID0gZ2V0X2ZyYW1lX2NvbnRleHQocywgcy0+ZmNzLCBzLT5uYl9mcmFtZXMpOworCisgICAgZmMt Pm5iX3NsaWNlcyA9IDA7CisgICAgZmMtPmRlY29kZV9vcmRlciA9IHMtPm5iX2ZyYW1lczsKKwor ICAgIHJldCA9IGRlY29kZV9uYWxfdW5pdHMocywgZmMsIGF2cGt0KTsKKyAgICBpZiAocmV0IDwg MCkKKyAgICAgICAgcmV0dXJuIHJldDsKKworICAgIHJldCA9IHN1Ym1pdF9mcmFtZShzLCBmYywg b3V0cHV0LCBnb3Rfb3V0cHV0KTsKKyAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgcmV0dXJuIHJl dDsKKworICAgIHJldHVybiBhdnBrdC0+c2l6ZTsKK30KKworc3RhdGljIGF2X2NvbGQgdm9pZCB2 dmNfZGVjb2RlX2ZsdXNoKEFWQ29kZWNDb250ZXh0ICphdmN0eCkKK3sKKyAgICBWVkNDb250ZXh0 ICpzICA9IGF2Y3R4LT5wcml2X2RhdGE7CisgICAgaW50IGdvdF9vdXRwdXQgPSAwOworCisgICAg d2hpbGUgKHMtPm5iX2RlbGF5ZWQpCisgICAgICAgIHdhaXRfZGVsYXllZF9mcmFtZShzLCBOVUxM LCAmZ290X291dHB1dCk7Cit9CisKK3N0YXRpYyBhdl9jb2xkIGludCB2dmNfZGVjb2RlX2ZyZWUo QVZDb2RlY0NvbnRleHQgKmF2Y3R4KQoreworICAgIFZWQ0NvbnRleHQgKnMgPSBhdmN0eC0+cHJp dl9kYXRhOworCisgICAgZmZfY2JzX2ZyYWdtZW50X2ZyZWUoJnMtPmN1cnJlbnRfZnJhbWUpOwor ICAgIHZ2Y19kZWNvZGVfZmx1c2goYXZjdHgpOworICAgIGZmX3Z2Y19leGVjdXRvcl9mcmVlKCZz LT5leGVjdXRvcik7CisgICAgaWYgKHMtPmZjcykgeworICAgICAgICBmb3IgKGludCBpID0gMDsg aSA8IHMtPm5iX2ZjczsgaSsrKQorICAgICAgICAgICAgZnJhbWVfY29udGV4dF9mcmVlKHMtPmZj cyArIGkpOworICAgICAgICBhdl9mcmVlKHMtPmZjcyk7CisgICAgfQorICAgIGZmX3Z2Y19wc191 bmluaXQoJnMtPnBzKTsKKyAgICBmZl9jYnNfY2xvc2UoJnMtPmNiYyk7CisKKyAgICByZXR1cm4g MDsKK30KKworc3RhdGljIGF2X2NvbGQgdm9pZCBpbml0X2RlZmF1bHRfc2NhbGVfbSh2b2lkKQor eworICAgIG1lbXNldCgmZmZfdnZjX2RlZmF1bHRfc2NhbGVfbSwgMTYsIHNpemVvZihmZl92dmNf ZGVmYXVsdF9zY2FsZV9tKSk7Cit9CisKKyNkZWZpbmUgVlZDX01BWF9ERUxBWUVEX0ZSQU1FUyAx Ngorc3RhdGljIGF2X2NvbGQgaW50IHZ2Y19kZWNvZGVfaW5pdChBVkNvZGVjQ29udGV4dCAqYXZj dHgpCit7CisgICAgVlZDQ29udGV4dCAqcyAgICAgICAgICAgICAgICAgID0gYXZjdHgtPnByaXZf ZGF0YTsKKyAgICBzdGF0aWMgQVZPbmNlIGluaXRfc3RhdGljX29uY2UgPSBBVl9PTkNFX0lOSVQ7 CisgICAgY29uc3QgaW50IGNwdV9jb3VudCAgICAgICAgICAgID0gYXZfY3B1X2NvdW50KCk7Cisg ICAgY29uc3QgaW50IGRlbGF5ZWQgICAgICAgICAgICAgID0gRkZNSU4oY3B1X2NvdW50LCBWVkNf TUFYX0RFTEFZRURfRlJBTUVTKTsKKyAgICBjb25zdCBpbnQgdGhyZWFkX2NvdW50ICAgICAgICAg PSBhdmN0eC0+dGhyZWFkX2NvdW50ID8gYXZjdHgtPnRocmVhZF9jb3VudCA6IGRlbGF5ZWQ7Cisg ICAgaW50IHJldDsKKworICAgIHMtPmF2Y3R4ID0gYXZjdHg7CisKKyAgICByZXQgPSBmZl9jYnNf aW5pdCgmcy0+Y2JjLCBBVl9DT0RFQ19JRF9WVkMsIGF2Y3R4KTsKKyAgICBpZiAocmV0KQorICAg ICAgICByZXR1cm4gcmV0OworCisgICAgcy0+bmJfZmNzID0gKGF2Y3R4LT5mbGFncyAmIEFWX0NP REVDX0ZMQUdfTE9XX0RFTEFZKSA/IDEgOiBkZWxheWVkOworICAgIHMtPmZjcyA9IGF2X2NhbGxv YyhzLT5uYl9mY3MsIHNpemVvZigqcy0+ZmNzKSk7CisgICAgaWYgKCFzLT5mY3MpCisgICAgICAg IHJldHVybiBBVkVSUk9SKEVOT01FTSk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHMtPm5i X2ZjczsgaSsrKSB7CisgICAgICAgIFZWQ0ZyYW1lQ29udGV4dCAqZmMgPSBzLT5mY3MgKyBpOwor ICAgICAgICByZXQgPSBmcmFtZV9jb250ZXh0X2luaXQoZmMsIGF2Y3R4KTsKKyAgICAgICAgaWYg KHJldCA8IDApCisgICAgICAgICAgICByZXR1cm4gcmV0OworICAgIH0KKworICAgIHMtPmV4ZWN1 dG9yID0gZmZfdnZjX2V4ZWN1dG9yX2FsbG9jKHMsIHRocmVhZF9jb3VudCk7CisgICAgaWYgKCFz LT5leGVjdXRvcikKKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKworICAgIHMtPmVv cyA9IDE7CisgICAgR0RSX1NFVF9SRUNPVkVSRUQocyk7CisgICAgZmZfdGhyZWFkX29uY2UoJmlu aXRfc3RhdGljX29uY2UsIGluaXRfZGVmYXVsdF9zY2FsZV9tKTsKKworICAgIHJldHVybiAwOwor fQorCitjb25zdCBGRkNvZGVjIGZmX3Z2Y19kZWNvZGVyID0geworICAgIC5wLm5hbWUgICAgICAg ICA9ICJ2dmMiLAorICAgIC5wLmxvbmdfbmFtZSAgICA9IE5VTExfSUZfQ09ORklHX1NNQUxMKCJW VkMgKFZlcnNhdGlsZSBWaWRlbyBDb2RpbmcpIiksCisgICAgLnAudHlwZSAgICAgICAgID0gQVZN RURJQV9UWVBFX1ZJREVPLAorICAgIC5wLmlkICAgICAgICAgICA9IEFWX0NPREVDX0lEX1ZWQywK KyAgICAucHJpdl9kYXRhX3NpemUgPSBzaXplb2YoVlZDQ29udGV4dCksCisgICAgLmluaXQgICAg ICAgICAgID0gdnZjX2RlY29kZV9pbml0LAorICAgIC5jbG9zZSAgICAgICAgICA9IHZ2Y19kZWNv ZGVfZnJlZSwKKyAgICBGRl9DT0RFQ19ERUNPREVfQ0IodnZjX2RlY29kZV9mcmFtZSksCisgICAg LmZsdXNoICAgICAgICAgID0gdnZjX2RlY29kZV9mbHVzaCwKKyAgICAucC5jYXBhYmlsaXRpZXMg PSBBVl9DT0RFQ19DQVBfRFIxIHwgQVZfQ09ERUNfQ0FQX0RFTEFZIHwgQVZfQ09ERUNfQ0FQX09U SEVSX1RIUkVBRFMsCisgICAgLmNhcHNfaW50ZXJuYWwgID0gRkZfQ09ERUNfQ0FQX0VYUE9SVFNf Q1JPUFBJTkcgfCBGRl9DT0RFQ19DQVBfSU5JVF9DTEVBTlVQIHwKKyAgICAgICAgICAgICAgICAg ICAgICBGRl9DT0RFQ19DQVBfQVVUT19USFJFQURTLAorICAgIC5wLnByb2ZpbGVzICAgICA9IE5V TExfSUZfQ09ORklHX1NNQUxMKGZmX3Z2Y19wcm9maWxlcyksCit9OwotLSAKMi4yNS4xCgpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpmZm1wZWctZGV2ZWwg bWFpbGluZyBsaXN0CmZmbXBlZy1kZXZlbEBmZm1wZWcub3JnCmh0dHBzOi8vZmZtcGVnLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2ZmbXBlZy1kZXZlbAoKVG8gdW5zdWJzY3JpYmUsIHZpc2l0IGxpbmsg YWJvdmUsIG9yIGVtYWlsCmZmbXBlZy1kZXZlbC1yZXF1ZXN0QGZmbXBlZy5vcmcgd2l0aCBzdWJq ZWN0ICJ1bnN1YnNjcmliZSIuCg==