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 87EB2481AC for ; Sun, 12 Nov 2023 10:36:31 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 3BB2F68CC00; Sun, 12 Nov 2023 12:36:16 +0200 (EET) Received: from APC01-SG2-obe.outbound.protection.outlook.com (mail-sgaapc01olkn2035.outbound.protection.outlook.com [40.92.53.35]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 3D72368CAA2 for ; Sun, 12 Nov 2023 12:36:07 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=M5PPgQInFPr1hRanNBuc/kV958L5DPQ9G1ga+EMGCUmxj5Yj4CQEAvfk3TSAI8K8PDzSI5Bfazemwk5gehhZhc9WxveNc3ehYTdXT08uaaUUsXmcKqb5oAA1Cz7JGMt+7lPmzANXqt89Tl+cRNJbixRujKjx694pZOaiivkPLX7MZ/a77MAFoCYbDC50AXq/OlIGdNFLbMsTG7P9oMrfGxP26ABuEwC4XJpiskzwLF/XQWHCSSZU0bmGY/WKHuvcrXxThdYkMcMBLE5rzIGIIcCHgqlfTZM5v9/4XL6ClXfYxbD6cJpaO2ePv/+RRaeC5my7m6poXr27cLkX3Zn7IA== 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=78tpXz87DYOuTcsoylj0PT3u26jL//GaZt8BWK0Uz5Y=; b=Fcg0ox9N70+0qa9aQtIE0if+tn4Egc/v5GJ2YYq1hKGZ1zw0arD0ptl30sVVZMvASAsXr5wLBo4wWGVV3M6K4wDqP1tT9bt2bUN9to3kdYl0SAJ1KdRnzfN7suTzC2QDwhbwNCTRotV2OkgLkl4d3PYISccVb7MVvOT8H2qAhl/2qZP8AKKQBtjbifKVc86n2m/ilbPUxMw/Qn2QSA1cdVIbBJRd4FrDzbwUBOPZk8G6oj5Y2wKyn27uchwGd0820bVNLE8j5kvOsoQTO9NgEANLBUkrpB/sBM75vz30pEFZa3p6PiS/D7zW0C/XtbttdNAuEEudalD2Zf5Fops/RQ== 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=78tpXz87DYOuTcsoylj0PT3u26jL//GaZt8BWK0Uz5Y=; b=tupoqkPu9dzMUajkI/LFudVsngbdyQh0wa6pWVUwhdLL8iBcIQVxYUDRBsTzSNFn2CQN/4pPOpstvdaLvUg8saFe8bExkTiBU/MAllQ2vPPW20bxdNLV7JtLVj1wFLXxreEAOIVm0h0F2lIYIayAYbj1yK3wc4fN2SdksVsCNWksj9l9L7C4t2Iikf/k/KyuopL0PQfa72tT5RhbHnGHVzR2UiIrKKRLj5OYWIR170YZI5kdX4v2GEeRRwg4jLRNkXJDK3HA27PP4EbRmhpquAf/+B/Xl+55lsQFdOMXGhXsRMOqx61m5HZLg2J+8/JBQ5BkdUR7HwmiEgiTyUGHSA== Received: from TYSPR06MB6433.apcprd06.prod.outlook.com (2603:1096:400:47a::6) by TYSPR06MB6768.apcprd06.prod.outlook.com (2603:1096:400:475::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6954.29; Sun, 12 Nov 2023 10:35:56 +0000 Received: from TYSPR06MB6433.apcprd06.prod.outlook.com ([fe80::80b3:be24:949c:e49f]) by TYSPR06MB6433.apcprd06.prod.outlook.com ([fe80::80b3:be24:949c:e49f%4]) with mapi id 15.20.6954.028; Sun, 12 Nov 2023 10:35:56 +0000 From: Nuo Mi To: ffmpeg-devel@ffmpeg.org Date: Sun, 12 Nov 2023 18:35:15 +0800 Message-ID: X-Mailer: git-send-email 2.25.1 In-Reply-To: <20231112103526.11245-1-nuomi2021@gmail.com> References: <20231112103526.11245-1-nuomi2021@gmail.com> X-TMN: [jDVhvx/I1+H/kTwQk74p3kTSoeB9SgKp] X-ClientProxiedBy: TYWP286CA0030.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:262::20) To TYSPR06MB6433.apcprd06.prod.outlook.com (2603:1096:400:47a::6) X-Microsoft-Original-Message-ID: <20231112103526.11245-3-nuomi2021@gmail.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 2 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TYSPR06MB6433:EE_|TYSPR06MB6768:EE_ X-MS-Office365-Filtering-Correlation-Id: f34fcdf5-44b9-4803-e334-08dbe36b26e9 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: in2sYe8tk7ZtRfq9jaP5H2Y3Eup8HAIZu9V6G6rftEz1c0Yvo974x61rskcWKs0Mw6T0a6iworuDKN0eZOmQPyUGoICwhXVZR2t6YjTy1ADDVzRU7x52EzJ13KcifEm5nbJwSFNnXY0EgXy/DUzUlp/f11sgpx7YbfcsBpiiAk8ejZmaLu6WCSZMvNYwxL9IWkB+aIIq5ys5c2V3YWfArUf0OGvMv4C1m//ouw0iw+YoN7/rI0laAUCGmDo01g6U+Xir8yBL9N8jNxsGeZS/MB8IqbWe9VXAPae+h2iZYcvwX0kHXIBoehzmM3qmBQS7DCdDi/hCpWQ3dEXcj3noKIvcQqhBDniLFy9M2PggUhqqPAiEtHtt6uSSBGZ60rbWUeDoeBKxtfaruok6Eo4UuOT63EEzrYtqlAMMpcR8CoOHwhvbLuwE/Z8bJPTQktpzRvnjh2TAS1nPyyOkAj3QQFXJqFVDKb/XP24GKdZXRuj4Mctu5IdwSFqVIP9f6BmGrag3eE4DlObrEK1WxNIt9NiquL6nJnR65dCbBfvFJqJheHhHsuQRYAnKoiGz5WQf5IPI4eXJcXps2924AK/jfe/NJyH0wvWlSyKkt+z3YyfmGim+BmQs7Wh4wGfbw3jX X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?Yi96U3ErUk5wZll4VndOdkpEZDAxUDk3TWFNRjNWQW9KRkF0L2NYU1lqeEl5?= =?utf-8?B?Z2FwTi81V3VQOUdxd0x0MnZXdEtaVTUvOTEzWFAzUHhIUjZnL3ppU2JUVUp0?= =?utf-8?B?RGZBenliemdnUHp6VWVMT0NlVXZ0enBBcmhyNnBJVzlackt2WVUvcHA4K0VS?= =?utf-8?B?aHJzTWtiN2NIcEpYbkpRbFdmRkRqc1FCQ09VZEJpb24xdWEvZ3AzY0sva2Fp?= =?utf-8?B?N2xZdE8xWFlJUEdGaUgvN2pEejlXRFE5OVFkZ0ZPQ2VkYWt2SWhUa2F2b3M2?= =?utf-8?B?cXBpbkNzZEozK0FaRWFUTGhzMG1HNkRPeWs3b2lJWFlpYmNCTzFTanhibGlV?= =?utf-8?B?djhYaHRmZjdxL1hWVDY5NGhuVko3a2V0M0tMbGNWN1duSUtQTGQ0SzIrNmI2?= =?utf-8?B?cWpoK3ZKYjYyK1QxMGtmU2VwUGNVRlJLSlZQb1ppUUhsV2tQYkN1WERXMmhs?= =?utf-8?B?QXpkb09TTnF2U2Jia0E2dUVuMENGUjRXdmJlZ1dRd1BRS0hhc053SlJXTDFF?= =?utf-8?B?alppMnZVQWg3Znp0TFovTDVjSXBXSm1MSXNlZ011WUk2dFZpbU9tVjJzQ2Vm?= =?utf-8?B?d3drU01NdTFnWkw5QzBFQzZXL0t5dWU0NHNRTjdUVlhWdjV1VWJXV2VQNVZZ?= =?utf-8?B?T0E1aFNQcGJFazhZSlY1aFhEMEFTcjYyMitQeStPc3ZWTW1jd1FVR3NLOEUz?= =?utf-8?B?YlY0bWVrL1VYVHpDUGFwVjR0U2xXR0lOZ2REK2srb3dDQm5ZeFVhUHJZd0Rm?= =?utf-8?B?S2NPOXBDK1hUWE1uV3NFMmZpL0xPMEU4WFhJSmJVa0NqMUFTcXJhKzFQT1Fw?= =?utf-8?B?MlAvb1B4SEZ6UEFZT29VeWc0N3ljT3dlMHlzY2hWZHhQVUl3UmJqQkVQakE3?= =?utf-8?B?MDUzOFA1QXRjWWgxbUowemVBcHExSlpXcVBydi9VZmhWdS9INzY1elViNHhE?= =?utf-8?B?SW1BcldCdXV5YjZzUUplUDlsTHJuWUl2TDlqaTlVa01sRkZyS0hLbSt5TXo3?= =?utf-8?B?NGdhWklPaFMwWUx2dW9ldjRSalluaUJGa1BXQ1ZBenFEVnY0RGpZNGtSVWt5?= =?utf-8?B?MmVBU3VKNFBaRCtRVzFycVJuQ1lTYytFWHQxQ0toQ2tKekF3R21GeXVOcHlC?= =?utf-8?B?MUtiUHFxb2ZHOEI4dlNFTGpyQURjNEJCdjZKSHZaaDhsRUpPS1ZxYzF0bWRF?= =?utf-8?B?YzBkV0lBbndNUkNQcHdNYUdLL0pKZGZUb3JVUTZ2RXpJeTR6STlJN2ZNcWRR?= =?utf-8?B?T0UxdzRWdTAydnRyVHF0VkthOVNnT2Ivd2NBYUIvOVJBU3ljYzNST0hzeEx1?= =?utf-8?B?dUxKZTgwbndUWnE2cU1uQUJvR1p6K29hOHdrSWlOUUNQOUVhakg3aWFrb1gv?= =?utf-8?B?SFh3akYwWUVGOEpEMWJkeWJNTjBCSFJ4U0NIdmtkYUFFNGUxOTUvcm45a3VL?= =?utf-8?B?eW9TRzVpSUpkZmc3NmV3TVdka0pPVlY4a3E1bDh6aEtpTmJONVhBbVlTTGdz?= =?utf-8?B?dXFLOFpGc0VoMDJpWndnZEI5WjloSnlDNTM2M1RJUWlsZFU0NzhoRjJhTk55?= =?utf-8?B?K3ZXR3ZkSGlTU20yMmFEMEw0azl6bkp5akZ5NzI1b2tkTUVhMDh2cjIxdjVE?= =?utf-8?B?ZXNRNzh6eGtrRzZ4d1dhZFUyaEh1V2xZdkRNNjdnT0s4ZFhRdmxxRStyZmg5?= =?utf-8?Q?NfC8U8bk6j5KRNU8/f1u?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: f34fcdf5-44b9-4803-e334-08dbe36b26e9 X-MS-Exchange-CrossTenant-AuthSource: TYSPR06MB6433.apcprd06.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Nov 2023 10:35:55.9565 (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: TYSPR06MB6768 Subject: [FFmpeg-devel] [PATCH v5 03/14] vvcdec: add parameter parser for sps, pps, ph, sh 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: Nuo Mi 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: LS0tCiBsaWJhdmNvZGVjL3Z2Yy9NYWtlZmlsZSB8ICAgIDEgKwogbGliYXZjb2RlYy92dmMvdnZj X3BzLmMgfCAxMTQ5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogbGli YXZjb2RlYy92dmMvdnZjX3BzLmggfCAgMjYzICsrKysrKysrKwogbGliYXZjb2RlYy92dmMvdnZj ZGVjLmggfCAgICA3ICsKIDQgZmlsZXMgY2hhbmdlZCwgMTQyMCBpbnNlcnRpb25zKCspCiBjcmVh dGUgbW9kZSAxMDA2NDQgbGliYXZjb2RlYy92dmMvdnZjX3BzLmMKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBsaWJhdmNvZGVjL3Z2Yy92dmNfcHMuaAoKZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvdnZjL01h a2VmaWxlIGIvbGliYXZjb2RlYy92dmMvTWFrZWZpbGUKaW5kZXggOGE1YzY2YWIxMy4uYjJiMTg3 YWM2ZiAxMDA2NDQKLS0tIGEvbGliYXZjb2RlYy92dmMvTWFrZWZpbGUKKysrIGIvbGliYXZjb2Rl Yy92dmMvTWFrZWZpbGUKQEAgLTMsMyArMyw0IEBAIGNsZWFuOjoKIAogT0JKUy0kKENPTkZJR19W VkNfREVDT0RFUikgICAgICAgICAgKz0gIHZ2Yy92dmNkZWMubyAgICAgICAgICAgIFwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2dmMvdnZjX2RhdGEubyAgICAgICAg ICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnZjL3Z2Y19wcy5v ICAgICAgICAgICAgXApkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy92dmMvdnZjX3BzLmMgYi9saWJh dmNvZGVjL3Z2Yy92dmNfcHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw Li4yODRlNzQwNmMyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYXZjb2RlYy92dmMvdnZjX3BzLmMK QEAgLTAsMCArMSwxMTQ5IEBACisvKgorICogVlZDIHBhcmFtZXRlciBzZXQgcGFyc2VyCisgKgor ICogQ29weXJpZ2h0IChDKSAyMDIzIE51byBNaQorICogQ29weXJpZ2h0IChDKSAyMDIyIFh1IE11 CisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgorICoKKyAqIEZGbXBlZyBpcyBm cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExp Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl cgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55 IGxhdGVyIHZlcnNpb24uCisgKgorICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3Nl ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp YworICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJl ZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0 aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICovCisjaW5jbHVkZSAibGliYXZj b2RlYy9jYnNfaDI2Ni5oIgorI2luY2x1ZGUgImxpYmF2dXRpbC9pbWd1dGlscy5oIgorI2luY2x1 ZGUgImxpYmF2Y29kZWMvcmVmc3RydWN0LmgiCisjaW5jbHVkZSAidnZjX2RhdGEuaCIKKyNpbmNs dWRlICJ2dmNfcHMuaCIKKyNpbmNsdWRlICJ2dmNkZWMuaCIKKworc3RhdGljIGludCBzcHNfbWFw X3BpeGVsX2Zvcm1hdChWVkNTUFMgKnNwcywgdm9pZCAqbG9nX2N0eCkKK3sKKyAgICBjb25zdCBI MjY2UmF3U1BTICpyID0gc3BzLT5yOworICAgIGNvbnN0IEFWUGl4Rm10RGVzY3JpcHRvciAqZGVz YzsKKworICAgIHN3aXRjaCAoc3BzLT5iaXRfZGVwdGgpIHsKKyAgICBjYXNlIDg6CisgICAgICAg IGlmIChyLT5zcHNfY2hyb21hX2Zvcm1hdF9pZGMgPT0gMCkgc3BzLT5waXhfZm10ID0gQVZfUElY X0ZNVF9HUkFZODsKKyAgICAgICAgaWYgKHItPnNwc19jaHJvbWFfZm9ybWF0X2lkYyA9PSAxKSBz cHMtPnBpeF9mbXQgPSBBVl9QSVhfRk1UX1lVVjQyMFA7CisgICAgICAgIGlmIChyLT5zcHNfY2hy b21hX2Zvcm1hdF9pZGMgPT0gMikgc3BzLT5waXhfZm10ID0gQVZfUElYX0ZNVF9ZVVY0MjJQOwor ICAgICAgICBpZiAoci0+c3BzX2Nocm9tYV9mb3JtYXRfaWRjID09IDMpIHNwcy0+cGl4X2ZtdCA9 IEFWX1BJWF9GTVRfWVVWNDQ0UDsKKyAgICAgICBicmVhazsKKyAgICBjYXNlIDEwOgorICAgICAg ICBpZiAoci0+c3BzX2Nocm9tYV9mb3JtYXRfaWRjID09IDApIHNwcy0+cGl4X2ZtdCA9IEFWX1BJ WF9GTVRfR1JBWTEwOworICAgICAgICBpZiAoci0+c3BzX2Nocm9tYV9mb3JtYXRfaWRjID09IDEp IHNwcy0+cGl4X2ZtdCA9IEFWX1BJWF9GTVRfWVVWNDIwUDEwOworICAgICAgICBpZiAoci0+c3Bz X2Nocm9tYV9mb3JtYXRfaWRjID09IDIpIHNwcy0+cGl4X2ZtdCA9IEFWX1BJWF9GTVRfWVVWNDIy UDEwOworICAgICAgICBpZiAoci0+c3BzX2Nocm9tYV9mb3JtYXRfaWRjID09IDMpIHNwcy0+cGl4 X2ZtdCA9IEFWX1BJWF9GTVRfWVVWNDQ0UDEwOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDEy OgorICAgICAgICBpZiAoci0+c3BzX2Nocm9tYV9mb3JtYXRfaWRjID09IDApIHNwcy0+cGl4X2Zt dCA9IEFWX1BJWF9GTVRfR1JBWTEyOworICAgICAgICBpZiAoci0+c3BzX2Nocm9tYV9mb3JtYXRf aWRjID09IDEpIHNwcy0+cGl4X2ZtdCA9IEFWX1BJWF9GTVRfWVVWNDIwUDEyOworICAgICAgICBp ZiAoci0+c3BzX2Nocm9tYV9mb3JtYXRfaWRjID09IDIpIHNwcy0+cGl4X2ZtdCA9IEFWX1BJWF9G TVRfWVVWNDIyUDEyOworICAgICAgICBpZiAoci0+c3BzX2Nocm9tYV9mb3JtYXRfaWRjID09IDMp IHNwcy0+cGl4X2ZtdCA9IEFWX1BJWF9GTVRfWVVWNDQ0UDEyOworICAgICAgICBicmVhazsKKyAg ICBkZWZhdWx0OgorICAgICAgICBhdl9sb2cobG9nX2N0eCwgQVZfTE9HX0VSUk9SLAorICAgICAg ICAgICAgICAgIlRoZSBmb2xsb3dpbmcgYml0LWRlcHRocyBhcmUgY3VycmVudGx5IHNwZWNpZmll ZDogOCwgMTAsIDEyIGJpdHMsICIKKyAgICAgICAgICAgICAgICJjaHJvbWFfZm9ybWF0X2lkYyBp cyAlZCwgZGVwdGggaXMgJWRcbiIsCisgICAgICAgICAgICAgICByLT5zcHNfY2hyb21hX2Zvcm1h dF9pZGMsIHNwcy0+Yml0X2RlcHRoKTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERB VEE7CisgICAgfQorCisgICAgZGVzYyA9IGF2X3BpeF9mbXRfZGVzY19nZXQoc3BzLT5waXhfZm10 KTsKKyAgICBpZiAoIWRlc2MpCisgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7CisKKyAg ICBzcHMtPmhzaGlmdFswXSA9IHNwcy0+dnNoaWZ0WzBdID0gMDsKKyAgICBzcHMtPmhzaGlmdFsy XSA9IHNwcy0+aHNoaWZ0WzFdID0gZGVzYy0+bG9nMl9jaHJvbWFfdzsKKyAgICBzcHMtPnZzaGlm dFsyXSA9IHNwcy0+dnNoaWZ0WzFdID0gZGVzYy0+bG9nMl9jaHJvbWFfaDsKKworICAgIHNwcy0+ cGl4ZWxfc2hpZnQgPSBzcHMtPmJpdF9kZXB0aCA+IDg7CisKKyAgICByZXR1cm4gMDsKK30KKwor c3RhdGljIGludCBzcHNfYml0X2RlcHRoKFZWQ1NQUyAqc3BzLCB2b2lkICpsb2dfY3R4KQorewor ICAgIGNvbnN0IEgyNjZSYXdTUFMgKnIgPSBzcHMtPnI7CisKKyAgICBzcHMtPmJpdF9kZXB0aCA9 IHItPnNwc19iaXRkZXB0aF9taW51czggKyA4OworICAgIHNwcy0+cXBfYmRfb2Zmc2V0ID0gNiAq IChzcHMtPmJpdF9kZXB0aCAtIDgpOworICAgIHNwcy0+bG9nMl90cmFuc2Zvcm1fcmFuZ2UgPQor ICAgICAgICByLT5zcHNfZXh0ZW5kZWRfcHJlY2lzaW9uX2ZsYWcgPyBGRk1BWCgxNSwgRkZNSU4o MjAsIHNwcy0+Yml0X2RlcHRoICsgNikpIDogMTU7CisgICAgcmV0dXJuIHNwc19tYXBfcGl4ZWxf Zm9ybWF0KHNwcywgbG9nX2N0eCk7Cit9CisKK3N0YXRpYyBpbnQgc3BzX2Nocm9tYV9xcF90YWJs ZShWVkNTUFMgKnNwcykKK3sKKyAgICBjb25zdCBIMjY2UmF3U1BTICpyID0gc3BzLT5yOworICAg IGNvbnN0IGludCBudW1fcXBfdGFibGVzID0gci0+c3BzX3NhbWVfcXBfdGFibGVfZm9yX2Nocm9t YV9mbGFnID8KKyAgICAgICAgMSA6IChyLT5zcHNfam9pbnRfY2Jjcl9lbmFibGVkX2ZsYWcgPyAz IDogMik7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bV9xcF90YWJsZXM7IGkrKykgewor ICAgICAgICBpbnQgbnVtX3BvaW50c19pbl9xcF90YWJsZTsKKyAgICAgICAgaW50OF90IHFwX2lu W1ZWQ19NQVhfUE9JTlRTX0lOX1FQX1RBQkxFXSwgcXBfb3V0W1ZWQ19NQVhfUE9JTlRTX0lOX1FQ X1RBQkxFXTsKKyAgICAgICAgdW5zaWduZWQgaW50IGRlbHRhX3FwX2luW1ZWQ19NQVhfUE9JTlRT X0lOX1FQX1RBQkxFXTsKKyAgICAgICAgaW50IG9mZiA9IHNwcy0+cXBfYmRfb2Zmc2V0OworCisg ICAgICAgIG51bV9wb2ludHNfaW5fcXBfdGFibGUgPSByLT5zcHNfbnVtX3BvaW50c19pbl9xcF90 YWJsZV9taW51czFbaV0gKyAxOworCisgICAgICAgIHFwX291dFswXSA9IHFwX2luWzBdID0gci0+ c3BzX3FwX3RhYmxlX3N0YXJ0X21pbnVzMjZbaV0gKyAyNjsKKyAgICAgICAgZm9yIChpbnQgaiA9 IDA7IGogPCBudW1fcG9pbnRzX2luX3FwX3RhYmxlOyBqKysgKSB7CisgICAgICAgICAgICBkZWx0 YV9xcF9pbltqXSA9IHItPnNwc19kZWx0YV9xcF9pbl92YWxfbWludXMxW2ldW2pdICsgMTsKKyAg ICAgICAgICAgIHFwX2luW2orMV0gPSBxcF9pbltqXSArIGRlbHRhX3FwX2luW2pdOworICAgICAg ICAgICAgcXBfb3V0W2orMV0gPSBxcF9vdXRbal0gKyAoci0+c3BzX2RlbHRhX3FwX2luX3ZhbF9t aW51czFbaV1bal0gXiByLT5zcHNfZGVsdGFfcXBfZGlmZl92YWxbaV1bal0pOworICAgICAgICB9 CisgICAgICAgIHNwcy0+Y2hyb21hX3FwX3RhYmxlW2ldW3FwX2luWzBdICsgb2ZmXSA9IHFwX291 dFswXTsKKyAgICAgICAgZm9yIChpbnQgayA9IHFwX2luWzBdIC0gMSArIG9mZjsgayA+PSAwOyBr LS0pCisgICAgICAgICAgICBzcHMtPmNocm9tYV9xcF90YWJsZVtpXVtrXSA9IGF2X2NsaXAoc3Bz LT5jaHJvbWFfcXBfdGFibGVbaV1baysxXS0xLCAtb2ZmLCA2Myk7CisKKyAgICAgICAgZm9yIChp bnQgaiAgPSAwOyBqIDwgbnVtX3BvaW50c19pbl9xcF90YWJsZTsgaisrKSB7CisgICAgICAgICAg ICBpbnQgc2ggPSBkZWx0YV9xcF9pbltqXSA+PiAxOworICAgICAgICAgICAgZm9yIChpbnQgayA9 IHFwX2luW2pdICsgMSArIG9mZiwgbSA9IDE7IGsgPD0gcXBfaW5baisxXSArIG9mZjsgaysrLCBt KyspIHsKKyAgICAgICAgICAgICAgICBzcHMtPmNocm9tYV9xcF90YWJsZVtpXVtrXSA9IHNwcy0+ Y2hyb21hX3FwX3RhYmxlW2ldW3FwX2luW2pdICsgb2ZmXSArCisgICAgICAgICAgICAgICAgICAg ICgocXBfb3V0W2orMV0gLSBxcF9vdXRbal0pICogbSArIHNoKSAvIGRlbHRhX3FwX2luW2pdOwor ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGZvciAoaW50IGsgPSBxcF9pbltudW1f cG9pbnRzX2luX3FwX3RhYmxlXSArIDEgKyBvZmY7IGsgPD0gNjMgKyBvZmY7IGsrKykKKyAgICAg ICAgICAgIHNwcy0+Y2hyb21hX3FwX3RhYmxlW2ldW2tdICA9IGF2X2NsaXAoc3BzLT5jaHJvbWFf cXBfdGFibGVbaV1bay0xXSArIDEsIC1zcHMtPnFwX2JkX29mZnNldCwgNjMpOworICAgIH0KKyAg ICBpZiAoci0+c3BzX3NhbWVfcXBfdGFibGVfZm9yX2Nocm9tYV9mbGFnKSB7CisgICAgICAgIG1l bWNweSgmc3BzLT5jaHJvbWFfcXBfdGFibGVbMV0sICZzcHMtPmNocm9tYV9xcF90YWJsZVswXSwg c2l6ZW9mKHNwcy0+Y2hyb21hX3FwX3RhYmxlWzBdKSk7CisgICAgICAgIG1lbWNweSgmc3BzLT5j aHJvbWFfcXBfdGFibGVbMl0sICZzcHMtPmNocm9tYV9xcF90YWJsZVswXSwgc2l6ZW9mKHNwcy0+ Y2hyb21hX3FwX3RhYmxlWzBdKSk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRp YyB2b2lkIHNwc19wb2MoVlZDU1BTICpzcHMpCit7CisgICAgc3BzLT5tYXhfcGljX29yZGVyX2Nu dF9sc2IgPSAxIDw8IChzcHMtPnItPnNwc19sb2cyX21heF9waWNfb3JkZXJfY250X2xzYl9taW51 czQgKyA0KTsKK30KKworc3RhdGljIHZvaWQgc3BzX2ludGVyKFZWQ1NQUyAqc3BzKQoreworICAg IGNvbnN0IEgyNjZSYXdTUFMgKnIgPSBzcHMtPnI7CisKKyAgICBzcHMtPm1heF9udW1fbWVyZ2Vf Y2FuZCAgICAgPSA2IC0gci0+c3BzX3NpeF9taW51c19tYXhfbnVtX21lcmdlX2NhbmQ7CisgICAg c3BzLT5tYXhfbnVtX2liY19tZXJnZV9jYW5kID0gNiAtIHItPnNwc19zaXhfbWludXNfbWF4X251 bV9pYmNfbWVyZ2VfY2FuZDsKKworICAgIGlmIChzcHMtPnItPnNwc19ncG1fZW5hYmxlZF9mbGFn KSB7CisgICAgICAgIHNwcy0+bWF4X251bV9ncG1fbWVyZ2VfY2FuZCA9IDI7CisgICAgICAgIGlm IChzcHMtPm1heF9udW1fbWVyZ2VfY2FuZCA+PSAzKQorICAgICAgICAgICAgc3BzLT5tYXhfbnVt X2dwbV9tZXJnZV9jYW5kID0gc3BzLT5tYXhfbnVtX21lcmdlX2NhbmQgLSByLT5zcHNfbWF4X251 bV9tZXJnZV9jYW5kX21pbnVzX21heF9udW1fZ3BtX2NhbmQ7CisgICAgfQorCisgICAgc3BzLT5s b2cyX3BhcmFsbGVsX21lcmdlX2xldmVsID0gci0+c3BzX2xvZzJfcGFyYWxsZWxfbWVyZ2VfbGV2 ZWxfbWludXMyICsgMjsKK30KKworc3RhdGljIHZvaWQgc3BzX3BhcnRpdGlvbl9jb25zdHJhaW50 cyhWVkNTUFMqIHNwcykKK3sKKyAgICBjb25zdCBIMjY2UmF3U1BTICpyID0gc3BzLT5yOworCisg ICAgc3BzLT5jdGJfbG9nMl9zaXplX3kgICAgPSByLT5zcHNfbG9nMl9jdHVfc2l6ZV9taW51czUg KyA1OworICAgIHNwcy0+Y3RiX3NpemVfeSAgICAgICAgID0gMSA8PCBzcHMtPmN0Yl9sb2cyX3Np emVfeTsKKyAgICBzcHMtPm1pbl9jYl9sb2cyX3NpemVfeSA9IHItPnNwc19sb2cyX21pbl9sdW1h X2NvZGluZ19ibG9ja19zaXplX21pbnVzMiArIDI7CisgICAgc3BzLT5taW5fY2Jfc2l6ZV95ICAg ICAgPSAxIDw8IHNwcy0+bWluX2NiX2xvZzJfc2l6ZV95OworICAgIHNwcy0+bWF4X3RiX3NpemVf eSAgICAgID0gMSA8PCAoci0+c3BzX21heF9sdW1hX3RyYW5zZm9ybV9zaXplXzY0X2ZsYWcgPyA2 IDogNSk7CisgICAgc3BzLT5tYXhfdHNfc2l6ZSAgICAgICAgPSAxIDw8IChyLT5zcHNfbG9nMl90 cmFuc2Zvcm1fc2tpcF9tYXhfc2l6ZV9taW51czIgKyAyKTsKK30KKworc3RhdGljIHZvaWQgc3Bz X2xhZGYoVlZDU1BTKiBzcHMpCit7CisgICAgY29uc3QgSDI2NlJhd1NQUyAqciA9IHNwcy0+cjsK KworICAgIGlmIChyLT5zcHNfbGFkZl9lbmFibGVkX2ZsYWcpIHsKKyAgICAgICAgc3BzLT5udW1f bGFkZl9pbnRlcnZhbHMgPSByLT5zcHNfbnVtX2xhZGZfaW50ZXJ2YWxzX21pbnVzMiArIDI7Cisg ICAgICAgIHNwcy0+bGFkZl9pbnRlcnZhbF9sb3dlcl9ib3VuZFswXSA9IDA7CisgICAgICAgIGZv ciAoaW50IGkgPSAwOyBpIDwgc3BzLT5udW1fbGFkZl9pbnRlcnZhbHMgLSAxOyBpKyspIHsKKyAg ICAgICAgICAgIHNwcy0+bGFkZl9pbnRlcnZhbF9sb3dlcl9ib3VuZFtpICsgMV0gPQorICAgICAg ICAgICAgICAgIHNwcy0+bGFkZl9pbnRlcnZhbF9sb3dlcl9ib3VuZFtpXSArIHItPnNwc19sYWRm X2RlbHRhX3RocmVzaG9sZF9taW51czFbaV0gKyAxOworICAgICAgICB9CisgICAgfQorfQorCitz dGF0aWMgaW50IHNwc19kZXJpdmUoVlZDU1BTICpzcHMsIHZvaWQgKmxvZ19jdHgpCit7CisgICAg aW50IHJldDsKKyAgICBjb25zdCBIMjY2UmF3U1BTICpyID0gc3BzLT5yOworCisgICAgc3BzLT53 aWR0aCAgPSByLT5zcHNfcGljX3dpZHRoX21heF9pbl9sdW1hX3NhbXBsZXM7CisgICAgc3BzLT5o ZWlnaHQgPSByLT5zcHNfcGljX2hlaWdodF9tYXhfaW5fbHVtYV9zYW1wbGVzOworCisgICAgcmV0 ID0gc3BzX2JpdF9kZXB0aChzcHMsIGxvZ19jdHgpOworICAgIGlmIChyZXQgPCAwKQorICAgICAg ICByZXR1cm4gcmV0OworICAgIHNwc19wb2Moc3BzKTsKKyAgICBzcHNfaW50ZXIoc3BzKTsKKyAg ICBzcHNfcGFydGl0aW9uX2NvbnN0cmFpbnRzKHNwcyk7CisgICAgc3BzX2xhZGYoc3BzKTsKKyAg ICBpZiAoci0+c3BzX2Nocm9tYV9mb3JtYXRfaWRjICE9IDApCisgICAgICAgIHNwc19jaHJvbWFf cXBfdGFibGUoc3BzKTsKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzcHNfZnJl ZShGRlJlZlN0cnVjdE9wYXF1ZSBvcGFxdWUsIHZvaWQgKm9iaikKK3sKKyAgICBWVkNTUFMgKnNw cyA9IChWVkNTUFMqKW9iajsKKyAgICBmZl9yZWZzdHJ1Y3RfdW5yZWYoJnNwcy0+cik7Cit9CisK K3N0YXRpYyBjb25zdCBWVkNTUFMgKnNwc19hbGxvYyhjb25zdCBIMjY2UmF3U1BTICpyc3BzLCB2 b2lkICpsb2dfY3R4KQoreworICAgIGludCByZXQ7CisgICAgVlZDU1BTICpzcHMgPSBmZl9yZWZz dHJ1Y3RfYWxsb2NfZXh0KHNpemVvZigqc3BzKSwgMCwgTlVMTCwgc3BzX2ZyZWUpOworCisgICAg ZmZfcmVmc3RydWN0X3JlcGxhY2UoJnNwcy0+ciwgcnNwcyk7CisKKyAgICByZXQgPSBzcHNfZGVy aXZlKHNwcywgbG9nX2N0eCk7CisgICAgaWYgKHJldCA8IDApCisgICAgICAgIGdvdG8gZmFpbDsK KworICAgIHJldHVybiBzcHM7CisKK2ZhaWw6CisgICAgZmZfcmVmc3RydWN0X3VucmVmKCZzcHMp OworICAgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IGRlY29kZV9zcHMoVlZDUGFyYW1T ZXRzICpwcywgY29uc3QgSDI2NlJhd1NQUyAqcnNwcywgdm9pZCAqbG9nX2N0eCkKK3sKKyAgICBj b25zdCBpbnQgc3BzX2lkICAgICAgICA9IHJzcHMtPnNwc19zZXFfcGFyYW1ldGVyX3NldF9pZDsK KyAgICBjb25zdCBWVkNTUFMgKm9sZF9zcHMgICA9IHBzLT5zcHNfbGlzdFtzcHNfaWRdOworICAg IGNvbnN0IFZWQ1NQUyAqc3BzOworCisgICAgaWYgKG9sZF9zcHMgJiYgb2xkX3Nwcy0+ciA9PSBy c3BzKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHNwcyA9IHNwc19hbGxvYyhyc3BzLCBsb2df Y3R4KTsKKyAgICBpZiAoIXNwcykKKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKwor ICAgIGZmX3JlZnN0cnVjdF9yZXBsYWNlKCZwcy0+c3BzX2xpc3Rbc3BzX2lkXSwgc3BzKTsKKyAg ICBmZl9yZWZzdHJ1Y3RfdW5yZWYoJnNwcyk7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGlj IHZvaWQgcHBzX2Nocm9tYV9xcF9vZmZzZXQoVlZDUFBTICpwcHMpCit7CisgICAgcHBzLT5jaHJv bWFfcXBfb2Zmc2V0W0NCIC0gMV0gICA9IHBwcy0+ci0+cHBzX2NiX3FwX29mZnNldDsKKyAgICBw cHMtPmNocm9tYV9xcF9vZmZzZXRbQ1IgLSAxXSAgID0gcHBzLT5yLT5wcHNfY3JfcXBfb2Zmc2V0 OworICAgIHBwcy0+Y2hyb21hX3FwX29mZnNldFtKQ0JDUiAtIDFdPSBwcHMtPnItPnBwc19qb2lu dF9jYmNyX3FwX29mZnNldF92YWx1ZTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDY7IGkrKykg eworICAgICAgICBwcHMtPmNocm9tYV9xcF9vZmZzZXRfbGlzdFtpXVtDQiAtIDFdICAgPSBwcHMt PnItPnBwc19jYl9xcF9vZmZzZXRfbGlzdFtpXTsKKyAgICAgICAgcHBzLT5jaHJvbWFfcXBfb2Zm c2V0X2xpc3RbaV1bQ1IgLSAxXSAgID0gcHBzLT5yLT5wcHNfY3JfcXBfb2Zmc2V0X2xpc3RbaV07 CisgICAgICAgIHBwcy0+Y2hyb21hX3FwX29mZnNldF9saXN0W2ldW0pDQkNSIC0gMV09IHBwcy0+ ci0+cHBzX2pvaW50X2NiY3JfcXBfb2Zmc2V0X2xpc3RbaV07CisgICAgfQorfQorCitzdGF0aWMg dm9pZCBwcHNfd2lkdGhfaGVpZ2h0KFZWQ1BQUyAqcHBzLCBjb25zdCBWVkNTUFMgKnNwcykKK3sK KyAgICBjb25zdCBIMjY2UmF3UFBTICpyID0gcHBzLT5yOworCisgICAgcHBzLT53aWR0aCAgICAg ICAgICA9IHItPnBwc19waWNfd2lkdGhfaW5fbHVtYV9zYW1wbGVzOworICAgIHBwcy0+aGVpZ2h0 ICAgICAgICAgPSByLT5wcHNfcGljX2hlaWdodF9pbl9sdW1hX3NhbXBsZXM7CisKKyAgICBwcHMt PmN0Yl93aWR0aCAgICAgID0gQVZfQ0VJTF9SU0hJRlQocHBzLT53aWR0aCwgIHNwcy0+Y3RiX2xv ZzJfc2l6ZV95KTsKKyAgICBwcHMtPmN0Yl9oZWlnaHQgICAgID0gQVZfQ0VJTF9SU0hJRlQocHBz LT5oZWlnaHQsIHNwcy0+Y3RiX2xvZzJfc2l6ZV95KTsKKyAgICBwcHMtPmN0Yl9jb3VudCAgICAg ID0gcHBzLT5jdGJfd2lkdGggKiBwcHMtPmN0Yl9oZWlnaHQ7CisKKyAgICBwcHMtPm1pbl9jYl93 aWR0aCAgID0gcHBzLT53aWR0aCAgPj4gc3BzLT5taW5fY2JfbG9nMl9zaXplX3k7CisgICAgcHBz LT5taW5fY2JfaGVpZ2h0ICA9IHBwcy0+aGVpZ2h0ID4+IHNwcy0+bWluX2NiX2xvZzJfc2l6ZV95 OworCisgICAgcHBzLT5taW5fcHVfd2lkdGggICA9IHBwcy0+d2lkdGggID4+IE1JTl9QVV9MT0cy OworICAgIHBwcy0+bWluX3B1X2hlaWdodCAgPSBwcHMtPmhlaWdodCA+PiBNSU5fUFVfTE9HMjsK KyAgICBwcHMtPm1pbl90dV93aWR0aCAgID0gcHBzLT53aWR0aCAgPj4gTUlOX1RVX0xPRzI7Cisg ICAgcHBzLT5taW5fdHVfaGVpZ2h0ICA9IHBwcy0+aGVpZ2h0ID4+IE1JTl9UVV9MT0cyOworCisg ICAgcHBzLT53aWR0aDMyICAgICAgICA9IEFWX0NFSUxfUlNISUZUKHBwcy0+d2lkdGgsICA1KTsK KyAgICBwcHMtPmhlaWdodDMyICAgICAgID0gQVZfQ0VJTF9SU0hJRlQocHBzLT5oZWlnaHQsIDUp OworICAgIHBwcy0+d2lkdGg2NCAgICAgICAgPSBBVl9DRUlMX1JTSElGVChwcHMtPndpZHRoLCAg Nik7CisgICAgcHBzLT5oZWlnaHQ2NCAgICAgICA9IEFWX0NFSUxfUlNISUZUKHBwcy0+aGVpZ2h0 LCA2KTsKK30KKworc3RhdGljIGludCBwcHNfYmQoVlZDUFBTICpwcHMpCit7CisgICAgY29uc3Qg SDI2NlJhd1BQUyAqciA9IHBwcy0+cjsKKworICAgIHBwcy0+Y29sX2JkICAgICAgICA9IGF2X2Nh bGxvYyhyLT5udW1fdGlsZV9jb2x1bW5zICArIDEsIHNpemVvZigqcHBzLT5jb2xfYmQpKTsKKyAg ICBwcHMtPnJvd19iZCAgICAgICAgPSBhdl9jYWxsb2Moci0+bnVtX3RpbGVfcm93cyAgKyAxLCAg ICBzaXplb2YoKnBwcy0+cm93X2JkKSk7CisgICAgcHBzLT5jdGJfdG9fY29sX2JkID0gYXZfY2Fs bG9jKHBwcy0+Y3RiX3dpZHRoICArIDEsICAgICAgc2l6ZW9mKCpwcHMtPmN0Yl90b19jb2xfYmQp KTsKKyAgICBwcHMtPmN0Yl90b19yb3dfYmQgPSBhdl9jYWxsb2MocHBzLT5jdGJfaGVpZ2h0ICsg MSwgICAgICBzaXplb2YoKnBwcy0+Y3RiX3RvX2NvbF9iZCkpOworICAgIGlmICghcHBzLT5jb2xf YmQgfHwgIXBwcy0+cm93X2JkIHx8ICFwcHMtPmN0Yl90b19jb2xfYmQgfHwgIXBwcy0+Y3RiX3Rv X3Jvd19iZCkKKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKworICAgIGZvciAoaW50 IGkgPSAwLCBqID0gMDsgaSA8IHItPm51bV90aWxlX2NvbHVtbnM7IGkrKykgeworICAgICAgICBw cHMtPmNvbF9iZFtpXSA9IGo7CisgICAgICAgIGogKz0gci0+Y29sX3dpZHRoX3ZhbFtpXTsKKyAg ICAgICAgZm9yIChpbnQgayA9IHBwcy0+Y29sX2JkW2ldOyBrIDwgajsgaysrKQorICAgICAgICAg ICAgcHBzLT5jdGJfdG9fY29sX2JkW2tdID0gcHBzLT5jb2xfYmRbaV07CisgICAgfQorCisgICAg Zm9yIChpbnQgaSA9IDAsIGogPSAwOyBpIDwgci0+bnVtX3RpbGVfcm93czsgaSsrKSB7CisgICAg ICAgIHBwcy0+cm93X2JkW2ldID0gajsKKyAgICAgICAgaiArPSByLT5yb3dfaGVpZ2h0X3ZhbFtp XTsKKyAgICAgICAgZm9yIChpbnQgayA9IHBwcy0+cm93X2JkW2ldOyBrIDwgajsgaysrKQorICAg ICAgICAgICAgcHBzLT5jdGJfdG9fcm93X2JkW2tdID0gcHBzLT5yb3dfYmRbaV07CisgICAgfQor ICAgIHJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgbmV4dF90aWxlX2lkeChpbnQgdGlsZV9p ZHgsIGNvbnN0IGludCBpLCBjb25zdCBIMjY2UmF3UFBTICpyKQoreworICAgIGlmIChyLT5wcHNf dGlsZV9pZHhfZGVsdGFfcHJlc2VudF9mbGFnKSB7CisgICAgICAgIHRpbGVfaWR4ICs9IHItPnBw c190aWxlX2lkeF9kZWx0YV92YWxbaV07CisgICAgfSBlbHNlIHsKKyAgICAgICAgdGlsZV9pZHgg Kz0gci0+cHBzX3NsaWNlX3dpZHRoX2luX3RpbGVzX21pbnVzMVtpXSArIDE7CisgICAgICAgIGlm ICh0aWxlX2lkeCAlIHItPm51bV90aWxlX2NvbHVtbnMgPT0gMCkKKyAgICAgICAgICAgIHRpbGVf aWR4ICs9IChyLT5wcHNfc2xpY2VfaGVpZ2h0X2luX3RpbGVzX21pbnVzMVtpXSkgKiByLT5udW1f dGlsZV9jb2x1bW5zOworICAgIH0KKyAgICByZXR1cm4gdGlsZV9pZHg7Cit9CisKK3N0YXRpYyB2 b2lkIHRpbGVfeHkoaW50ICp0aWxlX3gsIGludCAqdGlsZV95LCBjb25zdCBpbnQgdGlsZV9pZHgs IGNvbnN0IFZWQ1BQUyAqcHBzKQoreworICAgICp0aWxlX3ggPSB0aWxlX2lkeCAlIHBwcy0+ci0+ bnVtX3RpbGVfY29sdW1uczsKKyAgICAqdGlsZV95ID0gdGlsZV9pZHggLyBwcHMtPnItPm51bV90 aWxlX2NvbHVtbnM7Cit9CisKK3N0YXRpYyB2b2lkIGN0dV94eShpbnQgKmN0dV94LCBpbnQgKmN0 dV95LCBjb25zdCBpbnQgdGlsZV94LCBjb25zdCBpbnQgdGlsZV95LCBjb25zdCBWVkNQUFMgKnBw cykKK3sKKyAgICAqY3R1X3ggPSBwcHMtPmNvbF9iZFt0aWxlX3hdOworICAgICpjdHVfeSA9IHBw cy0+cm93X2JkW3RpbGVfeV07Cit9CisKK3N0YXRpYyBpbnQgY3R1X3JzKGNvbnN0IGludCBjdHVf eCwgY29uc3QgaW50IGN0dV95LCBjb25zdCBWVkNQUFMgKnBwcykKK3sKKyAgICByZXR1cm4gcHBz LT5jdGJfd2lkdGggKiBjdHVfeSArIGN0dV94OworfQorCitzdGF0aWMgaW50IHBwc19hZGRfY3R1 cyhWVkNQUFMgKnBwcywgaW50ICpvZmYsIGNvbnN0IGludCBjdHVfeCwgY29uc3QgaW50IGN0dV95 LAorICAgIGNvbnN0IGludCB3LCBjb25zdCBpbnQgaCkKK3sKKyAgICBpbnQgc3RhcnQgPSAqb2Zm OworICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaDsgeSsrKSB7CisgICAgICAgIGZvciAoaW50IHgg PSAwOyB4IDwgdzsgeCsrKSB7CisgICAgICAgICAgICBwcHMtPmN0Yl9hZGRyX2luX3NsaWNlWypv ZmZdID0gY3R1X3JzKGN0dV94ICsgeCwgY3R1X3kgKyB5LCBwcHMpOworICAgICAgICAgICAgKCpv ZmYpKys7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuICpvZmYgLSBzdGFydDsKK30KKwor c3RhdGljIGludCBwcHNfb25lX3RpbGVfc2xpY2VzKFZWQ1BQUyAqcHBzLCBjb25zdCBpbnQgdGls ZV9pZHgsIGludCBpLCBpbnQgKm9mZikKK3sKKyAgICBjb25zdCBIMjY2UmF3UFBTICpyID0gcHBz LT5yOworICAgIGludCBjdHVfeCwgY3R1X3ksIGN0dV95X2VuZCwgdGlsZV94LCB0aWxlX3k7CisK KyAgICB0aWxlX3h5KCZ0aWxlX3gsICZ0aWxlX3ksIHRpbGVfaWR4LCBwcHMpOworICAgIGN0dV94 eSgmY3R1X3gsICZjdHVfeSwgdGlsZV94LCB0aWxlX3ksIHBwcyk7CisgICAgY3R1X3lfZW5kID0g Y3R1X3kgKyByLT5yb3dfaGVpZ2h0X3ZhbFt0aWxlX3ldOworICAgIHdoaWxlIChjdHVfeSA8IGN0 dV95X2VuZCkgeworICAgICAgICBwcHMtPnNsaWNlX3N0YXJ0X29mZnNldFtpXSA9ICpvZmY7Cisg ICAgICAgIHBwcy0+bnVtX2N0dXNfaW5fc2xpY2VbaV0gPSBwcHNfYWRkX2N0dXMocHBzLCBvZmYs IGN0dV94LCBjdHVfeSwKKyAgICAgICAgICAgIHItPmNvbF93aWR0aF92YWxbdGlsZV94XSwgci0+ c2xpY2VfaGVpZ2h0X2luX2N0dXNbaV0pOworICAgICAgICBjdHVfeSArPSByLT5zbGljZV9oZWln aHRfaW5fY3R1c1tpKytdOworICAgIH0KKyAgICBpLS07CisgICAgcmV0dXJuIGk7Cit9CisKK3N0 YXRpYyB2b2lkIHBwc19tdWx0aV90aWxlc19zbGljZShWVkNQUFMgKnBwcywgY29uc3QgaW50IHRp bGVfaWR4LCBjb25zdCBpbnQgaSwgaW50ICpvZmYpCit7CisgICAgY29uc3QgSDI2NlJhd1BQUyAq ciA9IHBwcy0+cjsKKyAgICBpbnQgY3R1X3gsIGN0dV95LHRpbGVfeCwgdGlsZV95OworCisgICAg dGlsZV94eSgmdGlsZV94LCAmdGlsZV95LCB0aWxlX2lkeCwgcHBzKTsKKyAgICBwcHMtPnNsaWNl X3N0YXJ0X29mZnNldFtpXSA9ICpvZmY7CisgICAgcHBzLT5udW1fY3R1c19pbl9zbGljZVtpXSA9 IDA7CisgICAgZm9yIChpbnQgdHkgPSB0aWxlX3k7IHR5IDw9IHRpbGVfeSArIHItPnBwc19zbGlj ZV9oZWlnaHRfaW5fdGlsZXNfbWludXMxW2ldOyB0eSsrKSB7CisgICAgICAgIGZvciAoaW50IHR4 ID0gdGlsZV94OyB0eCA8PSB0aWxlX3ggKyByLT5wcHNfc2xpY2Vfd2lkdGhfaW5fdGlsZXNfbWlu dXMxW2ldOyB0eCsrKSB7CisgICAgICAgICAgICBjdHVfeHkoJmN0dV94LCAmY3R1X3ksIHR4LCB0 eSwgcHBzKTsKKyAgICAgICAgICAgIHBwcy0+bnVtX2N0dXNfaW5fc2xpY2VbaV0gKz0gcHBzX2Fk ZF9jdHVzKHBwcywgb2ZmLCBjdHVfeCwgY3R1X3ksCisgICAgICAgICAgICAgICAgci0+Y29sX3dp ZHRoX3ZhbFt0eF0sIHItPnJvd19oZWlnaHRfdmFsW3R5XSk7CisgICAgICAgIH0KKyAgICB9Cit9 CisKK3N0YXRpYyB2b2lkIHBwc19yZWN0X3NsaWNlKFZWQ1BQUyogcHBzKQoreworICAgIGNvbnN0 IEgyNjZSYXdQUFMqIHIgPSBwcHMtPnI7CisgICAgaW50IHRpbGVfaWR4ID0gMCwgb2ZmID0gMDsK KworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgci0+cHBzX251bV9zbGljZXNfaW5fcGljX21pbnVz MSArIDE7IGkrKykgeworICAgICAgICBpZiAoIXItPnBwc19zbGljZV93aWR0aF9pbl90aWxlc19t aW51czFbaV0gJiYKKyAgICAgICAgICAgICFyLT5wcHNfc2xpY2VfaGVpZ2h0X2luX3RpbGVzX21p bnVzMVtpXSkgeworICAgICAgICAgICAgaSA9IHBwc19vbmVfdGlsZV9zbGljZXMocHBzLCB0aWxl X2lkeCwgaSwgJm9mZik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwcHNfbXVsdGlf dGlsZXNfc2xpY2UocHBzLCB0aWxlX2lkeCwgaSwgJm9mZik7CisKKyAgICAgICAgfQorICAgICAg ICB0aWxlX2lkeCA9IG5leHRfdGlsZV9pZHgodGlsZV9pZHgsIGksIHIpOworICAgIH0KK30KKwor c3RhdGljIHZvaWQgcHBzX25vX3JlY3Rfc2xpY2UoVlZDUFBTKiBwcHMpCit7CisgICAgY29uc3Qg SDI2NlJhd1BQUyogciA9IHBwcy0+cjsKKyAgICBpbnQgY3R1X3gsIGN0dV95LCBvZmYgPSAwOwor CisgICAgZm9yIChpbnQgdGlsZV95ID0gMDsgdGlsZV95IDwgci0+bnVtX3RpbGVfcm93czsgdGls ZV95KyspIHsKKyAgICAgICAgZm9yIChpbnQgdGlsZV94ID0gMDsgdGlsZV94IDwgci0+bnVtX3Rp bGVfY29sdW1uczsgdGlsZV94KyspIHsKKyAgICAgICAgICAgIGN0dV94eSgmY3R1X3gsICZjdHVf eSwgdGlsZV94LCB0aWxlX3ksIHBwcyk7CisgICAgICAgICAgICBwcHNfYWRkX2N0dXMocHBzLCAm b2ZmLCBjdHVfeCwgY3R1X3ksIHItPmNvbF93aWR0aF92YWxbdGlsZV94XSwgci0+cm93X2hlaWdo dF92YWxbdGlsZV95XSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyBpbnQgcHBzX3Ns aWNlX21hcChWVkNQUFMgKnBwcykKK3sKKyAgICBwcHMtPmN0Yl9hZGRyX2luX3NsaWNlID0gYXZf Y2FsbG9jKHBwcy0+Y3RiX2NvdW50LCBzaXplb2YoKnBwcy0+Y3RiX2FkZHJfaW5fc2xpY2UpKTsK KyAgICBpZiAoIXBwcy0+Y3RiX2FkZHJfaW5fc2xpY2UpCisgICAgICAgIHJldHVybiBBVkVSUk9S KEVOT01FTSk7CisKKyAgICBpZiAocHBzLT5yLT5wcHNfcmVjdF9zbGljZV9mbGFnKQorICAgICAg ICBwcHNfcmVjdF9zbGljZShwcHMpOworICAgIGVsc2UKKyAgICAgICAgcHBzX25vX3JlY3Rfc2xp Y2UocHBzKTsKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBwcHNfcmVmX3dyYXBh cm91bmRfb2Zmc2V0KFZWQ1BQUyAqcHBzLCBjb25zdCBWVkNTUFMgKnNwcykKK3sKKyAgICBjb25z dCBIMjY2UmF3UFBTICpyID0gcHBzLT5yOworCisgICAgaWYgKHItPnBwc19yZWZfd3JhcGFyb3Vu ZF9lbmFibGVkX2ZsYWcpCisgICAgICAgIHBwcy0+cmVmX3dyYXBhcm91bmRfb2Zmc2V0ID0gKHBw cy0+d2lkdGggLyBzcHMtPm1pbl9jYl9zaXplX3kpIC0gci0+cHBzX3BpY193aWR0aF9taW51c193 cmFwYXJvdW5kX29mZnNldDsKK30KKworc3RhdGljIGludCBwcHNfZGVyaXZlKFZWQ1BQUyAqcHBz LCBjb25zdCBWVkNTUFMgKnNwcykKK3sKKyAgICBpbnQgcmV0OworCisgICAgcHBzX2Nocm9tYV9x cF9vZmZzZXQocHBzKTsKKyAgICBwcHNfd2lkdGhfaGVpZ2h0KHBwcywgc3BzKTsKKworICAgIHJl dCA9IHBwc19iZChwcHMpOworICAgIGlmIChyZXQgPCAwKQorICAgICAgICByZXR1cm4gcmV0Owor CisgICAgcmV0ID0gcHBzX3NsaWNlX21hcChwcHMpOworICAgIGlmIChyZXQgPCAwKQorICAgICAg ICByZXR1cm4gcmV0OworCisgICAgcHBzX3JlZl93cmFwYXJvdW5kX29mZnNldChwcHMsIHNwcyk7 CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcHBzX2ZyZWUoRkZSZWZTdHJ1Y3RP cGFxdWUgb3BhcXVlLCB2b2lkICpvYmopCit7CisgICAgVlZDUFBTICpwcHMgPSAoVlZDUFBTICop b2JqOworCisgICAgZmZfcmVmc3RydWN0X3VucmVmKCZwcHMtPnIpOworCisgICAgYXZfZnJlZXAo JnBwcy0+Y29sX2JkKTsKKyAgICBhdl9mcmVlcCgmcHBzLT5yb3dfYmQpOworICAgIGF2X2ZyZWVw KCZwcHMtPmN0Yl90b19jb2xfYmQpOworICAgIGF2X2ZyZWVwKCZwcHMtPmN0Yl90b19yb3dfYmQp OworICAgIGF2X2ZyZWVwKCZwcHMtPmN0Yl9hZGRyX2luX3NsaWNlKTsKK30KKworc3RhdGljIGNv bnN0IFZWQ1BQUyAqcHBzX2FsbG9jKGNvbnN0IEgyNjZSYXdQUFMgKnJwcHMsIGNvbnN0IFZWQ1NQ UyAqc3BzKQoreworICAgIGludCByZXQ7CisgICAgVlZDUFBTICpwcHMgPSBmZl9yZWZzdHJ1Y3Rf YWxsb2NfZXh0KHNpemVvZigqcHBzKSwgMCwgTlVMTCwgcHBzX2ZyZWUpOworCisgICAgaWYgKCFw cHMpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgZmZfcmVmc3RydWN0X3JlcGxhY2UoJnBw cy0+ciwgcnBwcyk7CisKKyAgICByZXQgPSBwcHNfZGVyaXZlKHBwcywgc3BzKTsKKyAgICBpZiAo cmV0IDwgMCkKKyAgICAgICAgZ290byBmYWlsOworCisgICAgcmV0dXJuIHBwczsKKworZmFpbDoK KyAgICBmZl9yZWZzdHJ1Y3RfdW5yZWYoJnBwcyk7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK3N0 YXRpYyBpbnQgZGVjb2RlX3BwcyhWVkNQYXJhbVNldHMgKnBzLCBjb25zdCBIMjY2UmF3UFBTICpy cHBzKQoreworICAgIGludCByZXQgICAgICAgICAgICAgICAgID0gMDsKKyAgICBjb25zdCBpbnQg cHBzX2lkICAgICAgICA9IHJwcHMtPnBwc19waWNfcGFyYW1ldGVyX3NldF9pZDsKKyAgICBjb25z dCBpbnQgc3BzX2lkICAgICAgICA9IHJwcHMtPnBwc19zZXFfcGFyYW1ldGVyX3NldF9pZDsKKyAg ICBjb25zdCBWVkNQUFMgKm9sZF9wcHMgICA9IHBzLT5wcHNfbGlzdFtwcHNfaWRdOworICAgIGNv bnN0IFZWQ1BQUyAqcHBzOworCisgICAgaWYgKG9sZF9wcHMgJiYgb2xkX3Bwcy0+ciA9PSBycHBz KQorICAgICAgICByZXR1cm4gMDsKKworICAgIHBwcyA9IHBwc19hbGxvYyhycHBzLCBwcy0+c3Bz X2xpc3Rbc3BzX2lkXSk7CisgICAgaWYgKCFwcHMpCisgICAgICAgIHJldHVybiBBVkVSUk9SKEVO T01FTSk7CisKKyAgICBmZl9yZWZzdHJ1Y3RfcmVwbGFjZSgmcHMtPnBwc19saXN0W3Bwc19pZF0s IHBwcyk7CisgICAgZmZfcmVmc3RydWN0X3VucmVmKCZwcHMpOworCisgICAgcmV0dXJuIHJldDsK K30KKworc3RhdGljIGludCBkZWNvZGVfcHMoVlZDUGFyYW1TZXRzICpwcywgY29uc3QgQ29kZWRC aXRzdHJlYW1IMjY2Q29udGV4dCAqaDI2Niwgdm9pZCAqbG9nX2N0eCkKK3sKKyAgICBjb25zdCBI MjY2UmF3UGljdHVyZUhlYWRlciAqcGggPSBoMjY2LT5waDsKKyAgICBjb25zdCBIMjY2UmF3UFBT ICpycHBzOworICAgIGNvbnN0IEgyNjZSYXdTUFMgKnJzcHM7CisgICAgaW50IHJldDsKKworICAg IGlmICghcGgpCisgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworCisgICAgcnBw cyA9IGgyNjYtPnBwc1twaC0+cGhfcGljX3BhcmFtZXRlcl9zZXRfaWRdOworICAgIGlmICghcnBw cykKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisKKyAgICByc3BzID0gaDI2 Ni0+c3BzW3JwcHMtPnBwc19zZXFfcGFyYW1ldGVyX3NldF9pZF07CisgICAgaWYgKCFyc3BzKQor ICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKworICAgIHJldCA9IGRlY29kZV9z cHMocHMsIHJzcHMsIGxvZ19jdHgpOworICAgIGlmIChyZXQgPCAwKQorICAgICAgICByZXR1cm4g cmV0OworCisgICAgcmV0ID0gZGVjb2RlX3BwcyhwcywgcnBwcyk7CisgICAgaWYgKHJldCA8IDAp CisgICAgICAgIHJldHVybiByZXQ7CisKKyAgICByZXR1cm4gMDsKK30KKworI2RlZmluZSBXRUlH SFRfVEFCTEUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdy0+bmJfd2VpZ2h0c1tM IyN4XSA9IHItPm51bV93ZWlnaHRzX2wjI3g7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHct Pm5iX3dlaWdodHNbTCMjeF07IGkrKykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB3LT53ZWlnaHRfZmxhZ1tMIyN4XVtMVU1B XVtpXSAgICAgPSByLT5sdW1hX3dlaWdodF9sIyN4IyNfZmxhZ1tpXTsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCisgICAgICAgIHctPndlaWdodF9mbGFnW0wjI3hdW0NIUk9NQV1baV0g ICA9IHItPmNocm9tYV93ZWlnaHRfbCMjeCMjX2ZsYWdbaV07ICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKKyAgICAgICAgdy0+d2VpZ2h0W0wjI3hdW0xVTUFdW2ldICAgICAgICAgID0gZGVu b21bTFVNQV0gKyByLT5kZWx0YV9sdW1hX3dlaWdodF9sIyN4W2ldOyAgICAgICAgICAgICAgICAg XAorICAgICAgICB3LT5vZmZzZXRbTCMjeF1bTFVNQV1baV0gICAgICAgICAgPSByLT5sdW1hX29m ZnNldF9sIyN4W2ldOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg ICAgIGZvciAoaW50IGogPSBDQjsgaiA8PSBDUjsgaisrKSB7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAg IHctPndlaWdodFtMIyN4XVtqXVtpXSAgICAgICAgID0gZGVub21bQ0hST01BXSArIHItPmRlbHRh X2Nocm9tYV93ZWlnaHRfbCMjeFtpXVtqIC0gMV07ICAgICAgXAorICAgICAgICAgICAgdy0+b2Zm c2V0W0wjI3hdW2pdW2ldICAgICAgICAgPSAxMjggKyByLT5kZWx0YV9jaHJvbWFfb2Zmc2V0X2wj I3hbaV1baiAtIDFdOyAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICB3LT5vZmZzZXRbTCMj eF1bal1baV0gICAgICAgIC09ICgxMjggKiB3LT53ZWlnaHRbTCMjeF1bal1baV0pID4+IHctPmxv ZzJfZGVub21bQ0hST01BXTsgICAgIFwKKyAgICAgICAgICAgIHctPm9mZnNldFtMIyN4XVtqXVtp XSAgICAgICAgID0gYXZfY2xpcF9pbnRwMih3LT5vZmZzZXRbTCMjeF1bal1baV0sIDcpOyAgICAg ICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKKworc3RhdGljIHZvaWQgcHJlZF93ZWlnaHRfdGFibGUoUHJlZFdlaWdodFRhYmxlICp3LCBj b25zdCBIMjY2UmF3UHJlZFdlaWdodFRhYmxlICpyKQoreworICAgIGludCBkZW5vbVsyXTsKKwor ICAgIHctPmxvZzJfZGVub21bTFVNQV0gPSByLT5sdW1hX2xvZzJfd2VpZ2h0X2Rlbm9tOworICAg IHctPmxvZzJfZGVub21bQ0hST01BXSA9IHctPmxvZzJfZGVub21bTFVNQV0gKyByLT5kZWx0YV9j aHJvbWFfbG9nMl93ZWlnaHRfZGVub207CisgICAgZGVub21bTFVNQV0gPSAxIDw8IHctPmxvZzJf ZGVub21bTFVNQV07CisgICAgZGVub21bQ0hST01BXSA9IDEgPDwgdy0+bG9nMl9kZW5vbVtDSFJP TUFdOworICAgIFdFSUdIVF9UQUJMRSgwKQorICAgIFdFSUdIVF9UQUJMRSgxKQorfQorCisvLyA4 LjMuMSBEZWNvZGluZyBwcm9jZXNzIGZvciBwaWN0dXJlIG9yZGVyIGNvdW50CitzdGF0aWMgaW50 IHBoX2NvbXB1dGVfcG9jKGNvbnN0IEgyNjZSYXdQaWN0dXJlSGVhZGVyICpwaCwgY29uc3QgSDI2 NlJhd1NQUyAqc3BzLCBjb25zdCBpbnQgcG9jX3RpZDAsIGNvbnN0IGludCBpc19jbHZzcykKK3sK KyAgICBjb25zdCBpbnQgbWF4X3BvY19sc2IgICAgICAgPSAxIDw8IChzcHMtPnNwc19sb2cyX21h eF9waWNfb3JkZXJfY250X2xzYl9taW51czQgKyA0KTsKKyAgICBjb25zdCBpbnQgcHJldl9wb2Nf bHNiICAgICAgPSBwb2NfdGlkMCAlIG1heF9wb2NfbHNiOworICAgIGNvbnN0IGludCBwcmV2X3Bv Y19tc2IgICAgICA9IHBvY190aWQwIC0gcHJldl9wb2NfbHNiOworICAgIGNvbnN0IGludCBwb2Nf bHNiICAgICAgICAgICA9IHBoLT5waF9waWNfb3JkZXJfY250X2xzYjsKKyAgICBpbnQgcG9jX21z YjsKKworICAgIGlmIChwaC0+cGhfcG9jX21zYl9jeWNsZV9wcmVzZW50X2ZsYWcpIHsKKyAgICAg ICAgcG9jX21zYiA9IHBoLT5waF9wb2NfbXNiX2N5Y2xlX3ZhbCAqIG1heF9wb2NfbHNiOworICAg IH0gZWxzZSBpZiAoaXNfY2x2c3MpIHsKKyAgICAgICAgcG9jX21zYiA9IDA7CisgICAgfSBlbHNl IHsKKyAgICAgICAgaWYgKHBvY19sc2IgPCBwcmV2X3BvY19sc2IgJiYgcHJldl9wb2NfbHNiIC0g cG9jX2xzYiA+PSBtYXhfcG9jX2xzYiAvIDIpCisgICAgICAgICAgICBwb2NfbXNiID0gcHJldl9w b2NfbXNiICsgbWF4X3BvY19sc2I7CisgICAgICAgIGVsc2UgaWYgKHBvY19sc2IgPiBwcmV2X3Bv Y19sc2IgJiYgcG9jX2xzYiAtIHByZXZfcG9jX2xzYiA+IG1heF9wb2NfbHNiIC8gMikKKyAgICAg ICAgICAgIHBvY19tc2IgPSBwcmV2X3BvY19tc2IgLSBtYXhfcG9jX2xzYjsKKyAgICAgICAgZWxz ZQorICAgICAgICAgICAgcG9jX21zYiA9IHByZXZfcG9jX21zYjsKKyAgICB9CisKKyAgICByZXR1 cm4gcG9jX21zYiArIHBvY19sc2I7Cit9CisKK3N0YXRpYyBhdl9hbHdheXNfaW5saW5lIHVpbnQx Nl90IGxtY3NfZGVyaXZlX2x1dF9zYW1wbGUodWludDE2X3Qgc2FtcGxlLAorICAgIHVpbnQxNl90 ICpwaXZvdDEsIHVpbnQxNl90ICpwaXZvdDIsIHVpbnQxNl90ICpzY2FsZV9jb2VmZiwgY29uc3Qg aW50IGlkeCwgY29uc3QgaW50IG1heCkKK3sKKyAgICBjb25zdCBpbnQgbHV0X3NhbXBsZSA9Cisg ICAgICAgIHBpdm90MVtpZHhdICsgKChzY2FsZV9jb2VmZltpZHhdICogKHNhbXBsZSAtIHBpdm90 MltpZHhdKSArICgxPDwgMTApKSA+PiAxMSk7CisgICAgcmV0dXJuIGF2X2NsaXAobHV0X3NhbXBs ZSwgMCwgbWF4IC0gMSk7Cit9CisKKy8vOC44LjIuMiBJbnZlcnNlIG1hcHBpbmcgcHJvY2VzcyBm b3IgYSBsdW1hIHNhbXBsZQorc3RhdGljIGludCBsbWNzX2Rlcml2ZV9sdXQoVlZDTE1DUyAqbG1j cywgY29uc3QgSDI2NlJhd0FQUyAqcmxtY3MsIGNvbnN0IEgyNjZSYXdTUFMgKnNwcykKK3sKKyAg ICBjb25zdCBpbnQgYml0X2RlcHRoID0gKHNwcy0+c3BzX2JpdGRlcHRoX21pbnVzOCArIDgpOwor ICAgIGNvbnN0IGludCBtYXggICAgICAgPSAoMSA8PCBiaXRfZGVwdGgpOworICAgIGNvbnN0IGlu dCBvcmdfY3cgICAgPSBtYXggLyBMTUNTX01BWF9CSU5fU0laRTsKKyAgICBjb25zdCBpbnQgc2hp ZnQgICAgID0gYXZfbG9nMihvcmdfY3cpOworICAgIGNvbnN0IGludCBvZmYgICAgICAgPSAxIDw8 IChzaGlmdCAtIDEpOworICAgIGludCBjd1tMTUNTX01BWF9CSU5fU0laRV07CisgICAgdWludDE2 X3QgaW5wdXRfcGl2b3RbTE1DU19NQVhfQklOX1NJWkVdOworICAgIHVpbnQxNl90IHNjYWxlX2Nv ZWZmW0xNQ1NfTUFYX0JJTl9TSVpFXTsKKyAgICB1aW50MTZfdCBpbnZfc2NhbGVfY29lZmZbTE1D U19NQVhfQklOX1NJWkVdOworICAgIGludCBpLCBkZWx0YV9jcnM7CisgICAgaWYgKGJpdF9kZXB0 aCA+IExNQ1NfTUFYX0JJVF9ERVBUSCkKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfUEFUQ0hXRUxD T01FOworCisgICAgaWYgKCFybG1jcykKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERB VEE7CisKKyAgICBsbWNzLT5taW5fYmluX2lkeCA9IHJsbWNzLT5sbWNzX21pbl9iaW5faWR4Owor ICAgIGxtY3MtPm1heF9iaW5faWR4ID0gTE1DU19NQVhfQklOX1NJWkUgLSAxIC0gcmxtY3MtPmxt Y3NfbWluX2Jpbl9pZHg7CisKKyAgICBtZW1zZXQoY3csIDAsIHNpemVvZihjdykpOworICAgIGZv ciAoaW50IGkgPSBsbWNzLT5taW5fYmluX2lkeDsgaSA8PSBsbWNzLT5tYXhfYmluX2lkeDsgaSsr KQorICAgICAgICBjd1tpXSA9IG9yZ19jdyArICgxIC0gMiAqIHJsbWNzLT5sbWNzX2RlbHRhX3Np Z25fY3dfZmxhZ1tpXSkgKiBybG1jcy0+bG1jc19kZWx0YV9hYnNfY3dbaV07CisKKyAgICBkZWx0 YV9jcnMgPSAoMSAtIDIgKiBybG1jcy0+bG1jc19kZWx0YV9zaWduX2Nyc19mbGFnKSAqIHJsbWNz LT5sbWNzX2RlbHRhX2Fic19jcnM7CisKKyAgICBsbWNzLT5waXZvdFswXSA9IDA7CisgICAgZm9y IChpID0gMDsgaSA8IExNQ1NfTUFYX0JJTl9TSVpFOyBpKyspIHsKKyAgICAgICAgaW5wdXRfcGl2 b3RbaV0gICAgICAgID0gaSAqIG9yZ19jdzsKKyAgICAgICAgbG1jcy0+cGl2b3RbaSArIDFdID0g bG1jcy0+cGl2b3RbaV0gKyBjd1tpXTsKKyAgICAgICAgc2NhbGVfY29lZmZbaV0gICAgICAgID0g KGN3W2ldICogKDEgPDwgMTEpICsgIG9mZikgPj4gc2hpZnQ7CisgICAgICAgIGlmIChjd1tpXSA9 PSAwKSB7CisgICAgICAgICAgICBpbnZfc2NhbGVfY29lZmZbaV0gPSAwOworICAgICAgICAgICAg bG1jcy0+Y2hyb21hX3NjYWxlX2NvZWZmW2ldID0gKDEgPDwgMTEpOworICAgICAgICB9IGVsc2Ug eworICAgICAgICAgICAgaW52X3NjYWxlX2NvZWZmW2ldID0gb3JnX2N3ICogKDEgPDwgMTEpIC8g Y3dbaV07CisgICAgICAgICAgICBsbWNzLT5jaHJvbWFfc2NhbGVfY29lZmZbaV0gPSBvcmdfY3cg KiAoMSA8PCAxMSkgLyAoY3dbaV0gKyBkZWx0YV9jcnMpOworICAgICAgICB9CisgICAgfQorCisg ICAgLy9kZXJpdmUgbG1jc19md2RfbHV0CisgICAgZm9yICh1aW50MTZfdCBzYW1wbGUgPSAwOyBz YW1wbGUgPCBtYXg7IHNhbXBsZSsrKSB7CisgICAgICAgIGNvbnN0IGludCBpZHhfeSA9IHNhbXBs ZSAvIG9yZ19jdzsKKyAgICAgICAgY29uc3QgdWludDE2X3QgZndkX3NhbXBsZSA9IGxtY3NfZGVy aXZlX2x1dF9zYW1wbGUoc2FtcGxlLCBsbWNzLT5waXZvdCwKKyAgICAgICAgICAgIGlucHV0X3Bp dm90LCBzY2FsZV9jb2VmZiwgaWR4X3ksIG1heCk7CisgICAgICAgIGlmIChiaXRfZGVwdGggPiA4 KQorICAgICAgICAgICAgKCh1aW50MTZfdCAqKWxtY3MtPmZ3ZF9sdXQpW3NhbXBsZV0gPSBmd2Rf c2FtcGxlOworICAgICAgICBlbHNlCisgICAgICAgICAgICBsbWNzLT5md2RfbHV0W3NhbXBsZV0g PSBmd2Rfc2FtcGxlOworCisgICAgfQorCisgICAgLy9kZXJpdmUgbG1jc19pbnZfbHV0CisgICAg aSA9IGxtY3MtPm1pbl9iaW5faWR4OworICAgIGZvciAodWludDE2X3Qgc2FtcGxlID0gMDsgc2Ft cGxlIDwgbWF4OyBzYW1wbGUrKykgeworICAgICAgICB1aW50MTZfdCBpbnZfc2FtcGxlOworICAg ICAgICB3aGlsZSAoc2FtcGxlID49IGxtY3MtPnBpdm90W2kgKyAxXSAmJiBpIDw9IGxtY3MtPm1h eF9iaW5faWR4KQorICAgICAgICAgICAgaSsrOworCisgICAgICAgIGludl9zYW1wbGUgPSBsbWNz X2Rlcml2ZV9sdXRfc2FtcGxlKHNhbXBsZSwgaW5wdXRfcGl2b3QsIGxtY3MtPnBpdm90LAorICAg ICAgICAgICAgaW52X3NjYWxlX2NvZWZmLCBpLCBtYXgpOworCisgICAgICAgIGlmIChiaXRfZGVw dGggPiA4KQorICAgICAgICAgICAgKCh1aW50MTZfdCAqKWxtY3MtPmludl9sdXQpW3NhbXBsZV0g PSBpbnZfc2FtcGxlOworICAgICAgICBlbHNlCisgICAgICAgICAgICBsbWNzLT5pbnZfbHV0W3Nh bXBsZV0gPSBpbnZfc2FtcGxlOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMg aW50IHBoX21heF9udW1fc3ViYmxvY2tfbWVyZ2VfY2FuZChjb25zdCBIMjY2UmF3U1BTICpzcHMs IGNvbnN0IEgyNjZSYXdQaWN0dXJlSGVhZGVyICpwaCkKK3sKKyAgICBpZiAoc3BzLT5zcHNfYWZm aW5lX2VuYWJsZWRfZmxhZykKKyAgICAgICAgcmV0dXJuIDUgLSBzcHMtPnNwc19maXZlX21pbnVz X21heF9udW1fc3ViYmxvY2tfbWVyZ2VfY2FuZDsKKyAgICByZXR1cm4gc3BzLT5zcHNfc2J0bXZw X2VuYWJsZWRfZmxhZyAmJiBwaC0+cGhfdGVtcG9yYWxfbXZwX2VuYWJsZWRfZmxhZzsKK30KKwor c3RhdGljIGludCBwaF9kZXJpdmUoVlZDUEggKnBoLCBjb25zdCBIMjY2UmF3U1BTICpzcHMsIGNv bnN0IEgyNjZSYXdQUFMgKnBwcywgY29uc3QgaW50IHBvY190aWQwLCBjb25zdCBpbnQgaXNfY2x2 c3MpCit7CisgICAgcGgtPm1heF9udW1fc3ViYmxvY2tfbWVyZ2VfY2FuZCA9IHBoX21heF9udW1f c3ViYmxvY2tfbWVyZ2VfY2FuZChzcHMsIHBoLT5yKTsKKworICAgIHBoLT5wb2MgPSBwaF9jb21w dXRlX3BvYyhwaC0+ciwgc3BzLCBwb2NfdGlkMCwgaXNfY2x2c3MpOworCisgICAgaWYgKHBwcy0+ cHBzX3dwX2luZm9faW5fcGhfZmxhZykKKyAgICAgICAgcHJlZF93ZWlnaHRfdGFibGUoJnBoLT5w d3QsICZwaC0+ci0+cGhfcHJlZF93ZWlnaHRfdGFibGUpOworCisgICAgcmV0dXJuIDA7Cit9CisK K3N0YXRpYyBpbnQgZGVjb2RlX3BoKFZWQ0ZyYW1lUGFyYW1TZXRzICpmcHMsIGNvbnN0IEgyNjZS YXdQaWN0dXJlSGVhZGVyICpycGgsIHZvaWQgKnJwaF9yZWYsCisgICAgY29uc3QgaW50IHBvY190 aWQwLCBjb25zdCBpbnQgaXNfY2x2c3MpCit7CisgICAgaW50IHJldDsKKyAgICBWVkNQSCAqcGgg PSAmZnBzLT5waDsKKyAgICBjb25zdCBIMjY2UmF3U1BTICpzcHMgPSBmcHMtPnNwcy0+cjsKKyAg ICBjb25zdCBIMjY2UmF3UFBTICpwcHMgPSBmcHMtPnBwcy0+cjsKKworICAgIHBoLT5yID0gcnBo OworICAgIGZmX3JlZnN0cnVjdF9yZXBsYWNlKCZwaC0+cnJlZiwgcnBoX3JlZik7CisgICAgcmV0 ID0gcGhfZGVyaXZlKHBoLCBzcHMsIHBwcywgcG9jX3RpZDAsIGlzX2NsdnNzKTsKKyAgICBpZiAo cmV0IDwgMCkKKyAgICAgICAgcmV0dXJuIHJldDsKKworICAgIHJldHVybiAwOworfQorCitzdGF0 aWMgaW50IGRlY29kZV9mcmFtZV9wcyhWVkNGcmFtZVBhcmFtU2V0cyAqZnBzLCBjb25zdCBWVkNQ YXJhbVNldHMgKnBzLAorICAgIGNvbnN0IENvZGVkQml0c3RyZWFtSDI2NkNvbnRleHQgKmgyNjYs IGNvbnN0IGludCBwb2NfdGlkMCwgY29uc3QgaW50IGlzX2NsdnNzKQoreworICAgIGNvbnN0IEgy NjZSYXdQaWN0dXJlSGVhZGVyICpwaCA9IGgyNjYtPnBoOworICAgIGNvbnN0IEgyNjZSYXdQUFMg KnJwcHM7CisgICAgaW50IHJldDsKKworICAgIGlmICghcGgpCisgICAgICAgIHJldHVybiBBVkVS Uk9SX0lOVkFMSUREQVRBOworCisgICAgcnBwcyA9IGgyNjYtPnBwc1twaC0+cGhfcGljX3BhcmFt ZXRlcl9zZXRfaWRdOworICAgIGlmICghcnBwcykKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5W QUxJRERBVEE7CisKKyAgICBmZl9yZWZzdHJ1Y3RfcmVwbGFjZSgmZnBzLT5zcHMsIHBzLT5zcHNf bGlzdFtycHBzLT5wcHNfc2VxX3BhcmFtZXRlcl9zZXRfaWRdKTsKKyAgICBmZl9yZWZzdHJ1Y3Rf cmVwbGFjZSgmZnBzLT5wcHMsIHBzLT5wcHNfbGlzdFtycHBzLT5wcHNfcGljX3BhcmFtZXRlcl9z ZXRfaWRdKTsKKworICAgIHJldCA9IGRlY29kZV9waChmcHMsIHBoLCBoMjY2LT5waF9yZWYsIHBv Y190aWQwLCBpc19jbHZzcyk7CisgICAgaWYgKHJldCA8IDApCisgICAgICAgIHJldHVybiByZXQ7 CisKKyAgICBpZiAocGgtPnBoX2V4cGxpY2l0X3NjYWxpbmdfbGlzdF9lbmFibGVkX2ZsYWcpCisg ICAgICAgIGZmX3JlZnN0cnVjdF9yZXBsYWNlKCZmcHMtPnNsLCBwcy0+c2NhbGluZ19saXN0W3Bo LT5waF9zY2FsaW5nX2xpc3RfYXBzX2lkXSk7CisKKyAgICBpZiAocGgtPnBoX2xtY3NfZW5hYmxl ZF9mbGFnKSB7CisgICAgICAgIHJldCA9IGxtY3NfZGVyaXZlX2x1dCgmZnBzLT5sbWNzLCBwcy0+ bG1jc19saXN0W3BoLT5waF9sbWNzX2Fwc19pZF0sIGZwcy0+c3BzLT5yKTsKKyAgICAgICAgaWYg KHJldCA8IDApCisgICAgICAgICAgICByZXR1cm4gcmV0OworICAgIH0KKworICAgIGZvciAoaW50 IGkgPSAwOyBpIDwgRkZfQVJSQVlfRUxFTVMoZnBzLT5hbGZfbGlzdCk7IGkrKykKKyAgICAgICAg ZmZfcmVmc3RydWN0X3JlcGxhY2UoJmZwcy0+YWxmX2xpc3RbaV0sIHBzLT5hbGZfbGlzdFtpXSk7 CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZGVjb2RlX3JlY292ZXJ5X2ZsYWco VlZDQ29udGV4dCAqcykKK3sKKyAgICBpZiAoSVNfSURSKHMpKQorICAgICAgICBzLT5ub19vdXRw dXRfYmVmb3JlX3JlY292ZXJ5X2ZsYWcgPSAwOworICAgIGVsc2UgaWYgKElTX0NSQShzKSB8fCBJ U19HRFIocykpCisgICAgICAgIHMtPm5vX291dHB1dF9iZWZvcmVfcmVjb3ZlcnlfZmxhZyA9IHMt Pmxhc3RfZW9zOworfQorCitzdGF0aWMgdm9pZCBkZWNvZGVfcmVjb3ZlcnlfcG9jKFZWQ0NvbnRl eHQgKnMsIGNvbnN0IFZWQ1BIICpwaCkKK3sKKyAgICBpZiAocy0+bm9fb3V0cHV0X2JlZm9yZV9y ZWNvdmVyeV9mbGFnKSB7CisgICAgICAgIGlmIChJU19HRFIocykpCisgICAgICAgICAgICBzLT5n ZHJfcmVjb3ZlcnlfcG9pbnRfcG9jID0gcGgtPnBvYyArIHBoLT5yLT5waF9yZWNvdmVyeV9wb2Nf Y250OworICAgICAgICBpZiAoIUdEUl9JU19SRUNPVkVSRUQocykgJiYgcy0+Z2RyX3JlY292ZXJ5 X3BvaW50X3BvYyA8PSBwaC0+cG9jKQorICAgICAgICAgICAgR0RSX1NFVF9SRUNPVkVSRUQocyk7 CisgICAgfQorfQorCitpbnQgZmZfdnZjX2RlY29kZV9mcmFtZV9wcyhWVkNGcmFtZVBhcmFtU2V0 cyAqZnBzLCBzdHJ1Y3QgVlZDQ29udGV4dCAqcykKK3sKKyAgICBpbnQgcmV0ID0gMDsKKyAgICBW VkNQYXJhbVNldHMgKnBzICAgICAgICAgICAgICAgICAgICAgICAgPSAmcy0+cHM7CisgICAgY29u c3QgQ29kZWRCaXRzdHJlYW1IMjY2Q29udGV4dCAqaDI2NiAgID0gcy0+Y2JjLT5wcml2X2RhdGE7 CisKKyAgICByZXQgPSBkZWNvZGVfcHMocHMsIGgyNjYsIHMtPmF2Y3R4KTsKKyAgICBpZiAocmV0 IDwgMCkKKyAgICAgICAgcmV0dXJuIHJldDsKKworICAgIGRlY29kZV9yZWNvdmVyeV9mbGFnKHMp OworICAgIHJldCA9IGRlY29kZV9mcmFtZV9wcyhmcHMsIHBzLCBoMjY2LCBzLT5wb2NfdGlkMCwg SVNfQ0xWU1MocykpOworICAgIGRlY29kZV9yZWNvdmVyeV9wb2MocywgJmZwcy0+cGgpOworICAg IHJldHVybiByZXQ7Cit9CisKK3ZvaWQgZmZfdnZjX2ZyYW1lX3BzX2ZyZWUoVlZDRnJhbWVQYXJh bVNldHMgKmZwcykKK3sKKyAgICBmZl9yZWZzdHJ1Y3RfdW5yZWYoJmZwcy0+c3BzKTsKKyAgICBm Zl9yZWZzdHJ1Y3RfdW5yZWYoJmZwcy0+cHBzKTsKKyAgICBmZl9yZWZzdHJ1Y3RfdW5yZWYoJmZw cy0+cGgucnJlZik7CisgICAgZmZfcmVmc3RydWN0X3VucmVmKCZmcHMtPnNsKTsKKyAgICBmb3Ig KGludCBpID0gMDsgaSA8IEZGX0FSUkFZX0VMRU1TKGZwcy0+YWxmX2xpc3QpOyBpKyspCisgICAg ICAgIGZmX3JlZnN0cnVjdF91bnJlZigmZnBzLT5hbGZfbGlzdFtpXSk7Cit9CisKK3ZvaWQgZmZf dnZjX3BzX3VuaW5pdChWVkNQYXJhbVNldHMgKnBzKQoreworICAgIGludCBpOworCisgICAgZm9y IChpID0gMDsgaSA8IEZGX0FSUkFZX0VMRU1TKHBzLT5zY2FsaW5nX2xpc3QpOyBpKyspCisgICAg ICAgIGZmX3JlZnN0cnVjdF91bnJlZigmcHMtPnNjYWxpbmdfbGlzdFtpXSk7CisgICAgZm9yIChp ID0gMDsgaSA8IEZGX0FSUkFZX0VMRU1TKHBzLT5sbWNzX2xpc3QpOyBpKyspCisgICAgICAgIGZm X3JlZnN0cnVjdF91bnJlZigmcHMtPmxtY3NfbGlzdFtpXSk7CisgICAgZm9yIChpID0gMDsgaSA8 IEZGX0FSUkFZX0VMRU1TKHBzLT5hbGZfbGlzdCk7IGkrKykKKyAgICAgICAgZmZfcmVmc3RydWN0 X3VucmVmKCZwcy0+YWxmX2xpc3RbaV0pOworICAgIGZvciAoaSA9IDA7IGkgPCBGRl9BUlJBWV9F TEVNUyhwcy0+c3BzX2xpc3QpOyBpKyspCisgICAgICAgIGZmX3JlZnN0cnVjdF91bnJlZigmcHMt PnNwc19saXN0W2ldKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgRkZfQVJSQVlfRUxFTVMocHMtPnBw c19saXN0KTsgaSsrKQorICAgICAgICBmZl9yZWZzdHJ1Y3RfdW5yZWYoJnBzLT5wcHNfbGlzdFtp XSk7Cit9CisKK2VudW0geworICAgIEFQU19BTEYsCisgICAgQVBTX0xNQ1MsCisgICAgQVBTX1ND QUxJTkcsCit9OworCitzdGF0aWMgdm9pZCBhbGZfY29lZmYoaW50MTZfdCAqY29lZmYsCisgICAg Y29uc3QgdWludDhfdCAqYWJzLCBjb25zdCB1aW50OF90ICpzaWduLCBjb25zdCBpbnQgc2l6ZSkK K3sKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykKKyAgICAgICAgY29lZmZbaV0g PSAoMSAtIDIgKiBzaWduW2ldKSAqIGFic1tpXTsKK30KKworc3RhdGljIHZvaWQgYWxmX2NvZWZm X2NjKGludDE2X3QgKmNvZWZmLAorICAgIGNvbnN0IHVpbnQ4X3QgKm1hcHBlZF9hYnMsIGNvbnN0 IHVpbnQ4X3QgKnNpZ24pCit7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBBTEZfTlVNX0NPRUZG X0NDOyBpKyspIHsKKyAgICAgICAgaW50IGMgPSBtYXBwZWRfYWJzW2ldOzsKKyAgICAgICAgaWYg KGMpCisgICAgICAgICAgICBjID0gKDEgLSAyICogc2lnbltpXSkgKiAoMSA8PCAoYyAtIDEpKTsK KyAgICAgICAgY29lZmZbaV0gPSBjOworICAgIH0KK30KKworc3RhdGljIHZvaWQgYWxmX2x1bWEo VlZDQUxGICphbGYsIGNvbnN0IEgyNjZSYXdBUFMgKmFwcykKK3sKKyAgICBpZiAoIWFwcy0+YWxm X2x1bWFfZmlsdGVyX3NpZ25hbF9mbGFnKQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKGlu dCBpID0gMDsgaSA8IEFMRl9OVU1fRklMVEVSU19MVU1BOyBpKyspIHsKKyAgICAgICAgY29uc3Qg aW50IHJlZiAgICAgICA9IGFwcy0+YWxmX2x1bWFfY29lZmZfZGVsdGFfaWR4W2ldOworICAgICAg ICBjb25zdCB1aW50OF90ICphYnMgID0gYXBzLT5hbGZfbHVtYV9jb2VmZl9hYnNbcmVmXTsKKyAg ICAgICAgY29uc3QgdWludDhfdCAqc2lnbiA9IGFwcy0+YWxmX2x1bWFfY29lZmZfc2lnbltyZWZd OworCisgICAgICAgIGFsZl9jb2VmZihhbGYtPmx1bWFfY29lZmZbaV0sIGFicywgc2lnbiwgQUxG X05VTV9DT0VGRl9MVU1BKTsKKyAgICAgICAgbWVtY3B5KGFsZi0+bHVtYV9jbGlwX2lkeFtpXSwg YXBzLT5hbGZfbHVtYV9jbGlwX2lkeFtyZWZdLAorICAgICAgICAgICAgc2l6ZW9mKGFsZi0+bHVt YV9jbGlwX2lkeFtpXSkpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgYWxmX2Nocm9tYShWVkNB TEYgKmFsZiwgY29uc3QgSDI2NlJhd0FQUyAqYXBzKQoreworICAgIGlmICghYXBzLT5hbGZfY2hy b21hX2ZpbHRlcl9zaWduYWxfZmxhZykKKyAgICAgICAgcmV0dXJuOworCisgICAgYWxmLT5udW1f Y2hyb21hX2ZpbHRlcnMgID0gYXBzLT5hbGZfY2hyb21hX251bV9hbHRfZmlsdGVyc19taW51czEg KyAxOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYWxmLT5udW1fY2hyb21hX2ZpbHRlcnM7IGkr KykgeworICAgICAgICBjb25zdCB1aW50OF90ICphYnMgID0gYXBzLT5hbGZfY2hyb21hX2NvZWZm X2Fic1tpXTsKKyAgICAgICAgY29uc3QgdWludDhfdCAqc2lnbiA9IGFwcy0+YWxmX2Nocm9tYV9j b2VmZl9zaWduW2ldOworCisgICAgICAgIGFsZl9jb2VmZihhbGYtPmNocm9tYV9jb2VmZltpXSwg YWJzLCBzaWduLCBBTEZfTlVNX0NPRUZGX0NIUk9NQSk7CisgICAgICAgIG1lbWNweShhbGYtPmNo cm9tYV9jbGlwX2lkeFtpXSwgYXBzLT5hbGZfY2hyb21hX2NsaXBfaWR4W2ldLAorICAgICAgICAg ICAgc2l6ZW9mKGFsZi0+Y2hyb21hX2NsaXBfaWR4W2ldKSk7CisgICAgfQorfQorCitzdGF0aWMg dm9pZCBhbGZfY2MoVlZDQUxGICphbGYsIGNvbnN0IEgyNjZSYXdBUFMgKmFwcykKK3sKKyAgICBj b25zdCB1aW50OF90ICgqYWJzW10pW0FMRl9OVU1fQ09FRkZfQ0NdID0KKyAgICAgICAgeyBhcHMt PmFsZl9jY19jYl9tYXBwZWRfY29lZmZfYWJzLCBhcHMtPmFsZl9jY19jcl9tYXBwZWRfY29lZmZf YWJzIH07CisgICAgY29uc3QgdWludDhfdCAoKnNpZ25bXSlbQUxGX05VTV9DT0VGRl9DQ10gPQor ICAgICAgICB7YXBzLT5hbGZfY2NfY2JfY29lZmZfc2lnbiwgYXBzLT5hbGZfY2NfY3JfY29lZmZf c2lnbiB9OworICAgIGNvbnN0IGludCBzaWduYWxlZFtdID0geyBhcHMtPmFsZl9jY19jYl9maWx0 ZXJfc2lnbmFsX2ZsYWcsIGFwcy0+YWxmX2NjX2NyX2ZpbHRlcl9zaWduYWxfZmxhZ307CisKKyAg ICBhbGYtPm51bV9jY19maWx0ZXJzWzBdID0gYXBzLT5hbGZfY2NfY2JfZmlsdGVyc19zaWduYWxs ZWRfbWludXMxICsgMTsKKyAgICBhbGYtPm51bV9jY19maWx0ZXJzWzFdID0gYXBzLT5hbGZfY2Nf Y3JfZmlsdGVyc19zaWduYWxsZWRfbWludXMxICsgMTsKKworICAgIGZvciAoaW50IGlkeCA9IDA7 IGlkeCA8IDI7IGlkeCsrKSB7CisgICAgICAgIGlmIChzaWduYWxlZFtpZHhdKSB7CisgICAgICAg ICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFsZi0+bnVtX2NjX2ZpbHRlcnNbaWR4XTsgaSsrKQor ICAgICAgICAgICAgICAgIGFsZl9jb2VmZl9jYyhhbGYtPmNjX2NvZWZmW2lkeF1baV0sIGFic1tp ZHhdW2ldLCBzaWduW2lkeF1baV0pOworICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgdm9p ZCBhbGZfZGVyaXZlKFZWQ0FMRiAqYWxmLCBjb25zdCBIMjY2UmF3QVBTICphcHMpCit7CisgICAg YWxmX2x1bWEoYWxmLCBhcHMpOworICAgIGFsZl9jaHJvbWEoYWxmLCBhcHMpOworICAgIGFsZl9j YyhhbGYsIGFwcyk7Cit9CisKK3N0YXRpYyBpbnQgYXBzX2RlY29kZV9hbGYoY29uc3QgVlZDQUxG ICoqYWxmLCBjb25zdCBIMjY2UmF3QVBTICphcHMpCit7CisgICAgVlZDQUxGICphID0gZmZfcmVm c3RydWN0X2FsbG9jeihzaXplb2YoKmEpKTsKKyAgICBpZiAoIWEpCisgICAgICAgIHJldHVybiBB VkVSUk9SKEVOT01FTSk7CisKKyAgICBhbGZfZGVyaXZlKGEsIGFwcyk7CisgICAgZmZfcmVmc3Ry dWN0X3JlcGxhY2UoYWxmLCBhKTsKKyAgICBmZl9yZWZzdHJ1Y3RfdW5yZWYoJmEpOworCisgICAg cmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaXNfbHVtYV9saXN0KGNvbnN0IGludCBpZCkKK3sK KyAgICByZXR1cm4gaWQgJSBWVkNfTUFYX1NBTVBMRV9BUlJBWVMgPT0gU0xfU1RBUlRfNHg0IHx8 IGlkID09IFNMX1NUQVJUXzY0eDY0ICsgMTsKK30KKworc3RhdGljIGludCBkZXJpdmVfbWF0cml4 X3NpemUoY29uc3QgaW50IGlkKQoreworICAgIHJldHVybiBpZCA8IFNMX1NUQVJUXzR4NCA/IDIg OiAoaWQgPCBTTF9TVEFSVF84eDggPyA0IDogOCk7Cit9CisKKy8vIDcuNC4zLjIwIFNjYWxpbmcg bGlzdCBkYXRhIHNlbWFudGljcworc3RhdGljIHZvaWQgc2NhbGluZ19kZXJpdmUoVlZDU2NhbGlu Z0xpc3QgKnNsLCBjb25zdCBIMjY2UmF3QVBTICphcHMpCit7CisgICAgZm9yIChpbnQgaWQgPSAw OyBpZCA8IFNMX01BWF9JRDsgaWQrKykgeworICAgICAgICBjb25zdCBpbnQgbWF0cml4X3NpemUg ICA9IGRlcml2ZV9tYXRyaXhfc2l6ZShpZCk7CisgICAgICAgIGNvbnN0IGludCBsb2cyX3NpemUg ICAgID0gbG9nMihtYXRyaXhfc2l6ZSk7CisgICAgICAgIGNvbnN0IGludCBsaXN0X3NpemUgICAg ID0gbWF0cml4X3NpemUgKiBtYXRyaXhfc2l6ZTsKKyAgICAgICAgaW50IGNvZWZmW1NMX01BWF9N QVRSSVhfU0laRSAqIFNMX01BWF9NQVRSSVhfU0laRV07CisgICAgICAgIGNvbnN0IHVpbnQ4X3Qg KnByZWQ7CisgICAgICAgIGNvbnN0IGludCAqc2NhbGluZ19saXN0OworICAgICAgICBpbnQgZGMg PSAwOworCisgICAgICAgIGlmIChhcHMtPmFwc19jaHJvbWFfcHJlc2VudF9mbGFnIHx8IGlzX2x1 bWFfbGlzdChpZCkpIHsKKyAgICAgICAgICAgIGlmICghYXBzLT5zY2FsaW5nX2xpc3RfY29weV9t b2RlX2ZsYWdbaWRdKSB7CisgICAgICAgICAgICAgICAgaW50IG5leHRfY29lZiA9IDA7CisKKyAg ICAgICAgICAgICAgICBpZiAoaWQgPj0gU0xfU1RBUlRfMTZ4MTYpCisgICAgICAgICAgICAgICAg ICAgIGRjID0gbmV4dF9jb2VmID0gYXBzLT5zY2FsaW5nX2xpc3RfZGNfY29lZltpZCAtIFNMX1NU QVJUXzE2eDE2XTsKKworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGlzdF9z aXplOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50IHggPSBmZl92dmNfZGlh Z19zY2FuX3hbM11bM11baV07CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCB5ID0gZmZf dnZjX2RpYWdfc2Nhbl95WzNdWzNdW2ldOworCisgICAgICAgICAgICAgICAgICAgIGlmICghKGlk ID49IFNMX1NUQVJUXzY0eDY0ICYmIHggPj0gNCAmJiB5ID49IDQpKQorICAgICAgICAgICAgICAg ICAgICAgICAgbmV4dF9jb2VmICs9IGFwcy0+c2NhbGluZ19saXN0X2RlbHRhX2NvZWZbaWRdW2ld OworICAgICAgICAgICAgICAgICAgICBjb2VmZltpXSA9IG5leHRfY29lZjsKKyAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvL2RjCisgICAgICAg IGlmIChpZCA+PSBTTF9TVEFSVF8xNngxNikgeworICAgICAgICAgICAgaWYgKCFhcHMtPnNjYWxp bmdfbGlzdF9jb3B5X21vZGVfZmxhZ1tpZF0gJiYgIWFwcy0+c2NhbGluZ19saXN0X3ByZWRfbW9k ZV9mbGFnW2lkXSkgeworICAgICAgICAgICAgICAgIHNsLT5zY2FsaW5nX21hdHJpeF9kY19yZWNb aWQgLSBTTF9TVEFSVF8xNngxNl0gPSA4OworICAgICAgICAgICAgfSBlbHNlIGlmICghYXBzLT5z Y2FsaW5nX2xpc3RfcHJlZF9pZF9kZWx0YVtpZF0pIHsKKyAgICAgICAgICAgICAgICBzbC0+c2Nh bGluZ19tYXRyaXhfZGNfcmVjW2lkIC0gU0xfU1RBUlRfMTZ4MTZdID0gMTY7CisgICAgICAgICAg ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGNvbnN0IGludCByZWZfaWQgPSBpZCAtIGFwcy0+ c2NhbGluZ19saXN0X3ByZWRfaWRfZGVsdGFbaWRdOworICAgICAgICAgICAgICAgIGlmIChyZWZf aWQgPj0gU0xfU1RBUlRfMTZ4MTYpCisgICAgICAgICAgICAgICAgICAgIGRjICs9IHNsLT5zY2Fs aW5nX21hdHJpeF9kY19yZWNbcmVmX2lkIC0gU0xfU1RBUlRfMTZ4MTZdOworICAgICAgICAgICAg ICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgZGMgKz0gc2wtPnNjYWxpbmdfbWF0cml4X3Jl Y1tyZWZfaWRdWzBdOworICAgICAgICAgICAgICAgIHNsLT5zY2FsaW5nX21hdHJpeF9kY19yZWNb aWQgLSBTTF9TVEFSVF8xNngxNl0gPSBkYyAmIDI1NTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg fQorCisgICAgICAgIC8vYWMKKyAgICAgICAgc2NhbGluZ19saXN0ID0gYXBzLT5zY2FsaW5nX2xp c3RfY29weV9tb2RlX2ZsYWdbaWRdID8gZmZfdnZjX3NjYWxpbmdfbGlzdDAgOiBjb2VmZjsKKyAg ICAgICAgaWYgKCFhcHMtPnNjYWxpbmdfbGlzdF9jb3B5X21vZGVfZmxhZ1tpZF0gJiYgIWFwcy0+ c2NhbGluZ19saXN0X3ByZWRfbW9kZV9mbGFnW2lkXSkKKyAgICAgICAgICAgIHByZWQgPSBmZl92 dmNfc2NhbGluZ19wcmVkXzg7CisgICAgICAgIGVsc2UgaWYgKCFhcHMtPnNjYWxpbmdfbGlzdF9w cmVkX2lkX2RlbHRhW2lkXSkKKyAgICAgICAgICAgIHByZWQgPSBmZl92dmNfc2NhbGluZ19wcmVk XzE2OworICAgICAgICBlbHNlCisgICAgICAgICAgICBwcmVkID0gc2wtPnNjYWxpbmdfbWF0cml4 X3JlY1tpZCAtIGFwcy0+c2NhbGluZ19saXN0X3ByZWRfaWRfZGVsdGFbaWRdXTsKKyAgICAgICAg Zm9yIChpbnQgaSA9IDA7IGkgPCBsaXN0X3NpemU7IGkrKykgeworICAgICAgICAgICAgY29uc3Qg aW50IHggPSBmZl92dmNfZGlhZ19zY2FuX3hbbG9nMl9zaXplXVtsb2cyX3NpemVdW2ldOworICAg ICAgICAgICAgY29uc3QgaW50IHkgPSBmZl92dmNfZGlhZ19zY2FuX3lbbG9nMl9zaXplXVtsb2cy X3NpemVdW2ldOworICAgICAgICAgICAgY29uc3QgaW50IG9mZiA9IHkgKiBtYXRyaXhfc2l6ZSAr IHg7CisgICAgICAgICAgICBzbC0+c2NhbGluZ19tYXRyaXhfcmVjW2lkXVtvZmZdID0gKHByZWRb b2ZmXSArIHNjYWxpbmdfbGlzdFtpXSkgJiAyNTU7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0 YXRpYyBpbnQgYXBzX2RlY29kZV9zY2FsaW5nKGNvbnN0IFZWQ1NjYWxpbmdMaXN0ICoqc2NhbGlu ZywgY29uc3QgSDI2NlJhd0FQUyAqYXBzKQoreworICAgIFZWQ1NjYWxpbmdMaXN0ICpzbCA9IGZm X3JlZnN0cnVjdF9hbGxvY3ooc2l6ZW9mKCpzbCkpOworICAgIGlmICghc2wpCisgICAgICAgIHJl dHVybiBBVkVSUk9SKEVOT01FTSk7CisKKyAgICBzY2FsaW5nX2Rlcml2ZShzbCwgYXBzKTsKKyAg ICBmZl9yZWZzdHJ1Y3RfcmVwbGFjZShzY2FsaW5nLCBzbCk7CisgICAgZmZfcmVmc3RydWN0X3Vu cmVmKCZzbCk7CisKKyAgICByZXR1cm4gMDsKK30KKworaW50IGZmX3Z2Y19kZWNvZGVfYXBzKFZW Q1BhcmFtU2V0cyAqcHMsIGNvbnN0IENvZGVkQml0c3RyZWFtVW5pdCAqdW5pdCkKK3sKKyAgICBj b25zdCBIMjY2UmF3QVBTICphcHMgPSB1bml0LT5jb250ZW50X3JlZjsKKyAgICBpbnQgcmV0ICAg ICAgICAgICAgICAgPSAwOworCisgICAgaWYgKCFhcHMpCisgICAgICAgIHJldHVybiBBVkVSUk9S X0lOVkFMSUREQVRBOworCisgICAgc3dpdGNoIChhcHMtPmFwc19wYXJhbXNfdHlwZSkgeworICAg ICAgICBjYXNlIEFQU19BTEY6CisgICAgICAgICAgICByZXQgPSBhcHNfZGVjb2RlX2FsZigmcHMt PmFsZl9saXN0W2Fwcy0+YXBzX2FkYXB0YXRpb25fcGFyYW1ldGVyX3NldF9pZF0sIGFwcyk7Cisg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBUFNfTE1DUzoKKyAgICAgICAgICAgIGZm X3JlZnN0cnVjdF9yZXBsYWNlKCZwcy0+bG1jc19saXN0W2Fwcy0+YXBzX2FkYXB0YXRpb25fcGFy YW1ldGVyX3NldF9pZF0sIGFwcyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBB UFNfU0NBTElORzoKKyAgICAgICAgICAgIHJldCA9IGFwc19kZWNvZGVfc2NhbGluZygmcHMtPnNj YWxpbmdfbGlzdFthcHMtPmFwc19hZGFwdGF0aW9uX3BhcmFtZXRlcl9zZXRfaWRdLCBhcHMpOwor ICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHJldDsKK30KKworc3RhdGlj IHZvaWQgc2hfc2xpY2VfYWRkcmVzcyhWVkNTSCAqc2gsIGNvbnN0IEgyNjZSYXdTUFMgKnNwcywg Y29uc3QgVlZDUFBTICpwcHMpCit7CisgICAgY29uc3QgaW50IHNsaWNlX2FkZHJlc3MgICAgID0g c2gtPnItPnNoX3NsaWNlX2FkZHJlc3M7CisKKyAgICBpZiAocHBzLT5yLT5wcHNfcmVjdF9zbGlj ZV9mbGFnKSB7CisgICAgICAgIGludCBwaWNfbGV2ZWxfc2xpY2VfaWR4ID0gc2xpY2VfYWRkcmVz czsKKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBzaC0+ci0+Y3Vycl9zdWJwaWNfaWR4OyBq KyspCisgICAgICAgICAgICBwaWNfbGV2ZWxfc2xpY2VfaWR4ICs9IHBwcy0+ci0+bnVtX3NsaWNl c19pbl9zdWJwaWNbal07CisgICAgICAgIHNoLT5jdGJfYWRkcl9pbl9jdXJyX3NsaWNlID0gcHBz LT5jdGJfYWRkcl9pbl9zbGljZSArIHBwcy0+c2xpY2Vfc3RhcnRfb2Zmc2V0W3BpY19sZXZlbF9z bGljZV9pZHhdOworICAgICAgICBzaC0+bnVtX2N0dXNfaW5fY3Vycl9zbGljZSA9IHBwcy0+bnVt X2N0dXNfaW5fc2xpY2VbcGljX2xldmVsX3NsaWNlX2lkeF07CisgICAgfSBlbHNlIHsKKyAgICAg ICAgaW50IHRpbGVfeCA9IHNsaWNlX2FkZHJlc3MgJSBwcHMtPnItPm51bV90aWxlX2NvbHVtbnM7 CisgICAgICAgIGludCB0aWxlX3kgPSBzbGljZV9hZGRyZXNzIC8gcHBzLT5yLT5udW1fdGlsZV9j b2x1bW5zOworICAgICAgICBjb25zdCBpbnQgc2xpY2Vfc3RhcnRfY3RiID0gcHBzLT5yb3dfYmRb dGlsZV95XSAqIHBwcy0+Y3RiX3dpZHRoICsgcHBzLT5jb2xfYmRbdGlsZV94XSAqIHBwcy0+ci0+ cm93X2hlaWdodF92YWxbdGlsZV95XTsKKworICAgICAgICBzaC0+Y3RiX2FkZHJfaW5fY3Vycl9z bGljZSA9IHBwcy0+Y3RiX2FkZHJfaW5fc2xpY2UgKyBzbGljZV9zdGFydF9jdGI7CisKKyAgICAg ICAgc2gtPm51bV9jdHVzX2luX2N1cnJfc2xpY2UgPSAwOworICAgICAgICBmb3IgKGludCB0aWxl X2lkeCA9IHNsaWNlX2FkZHJlc3M7IHRpbGVfaWR4IDw9IHNsaWNlX2FkZHJlc3MgKyBzaC0+ci0+ c2hfbnVtX3RpbGVzX2luX3NsaWNlX21pbnVzMTsgdGlsZV9pZHgrKykgeworICAgICAgICAgICAg dGlsZV94ID0gdGlsZV9pZHggJSBwcHMtPnItPm51bV90aWxlX2NvbHVtbnM7CisgICAgICAgICAg ICB0aWxlX3kgPSB0aWxlX2lkeCAvIHBwcy0+ci0+bnVtX3RpbGVfY29sdW1uczsKKyAgICAgICAg ICAgIHNoLT5udW1fY3R1c19pbl9jdXJyX3NsaWNlICs9IHBwcy0+ci0+cm93X2hlaWdodF92YWxb dGlsZV95XSAqIHBwcy0+ci0+Y29sX3dpZHRoX3ZhbFt0aWxlX3hdOworICAgICAgICB9CisgICAg fQorfQorCitzdGF0aWMgdm9pZCBzaF9xcF95KFZWQ1NIICpzaCwgY29uc3QgSDI2NlJhd1BQUyAq cHBzLCBjb25zdCBIMjY2UmF3UGljdHVyZUhlYWRlciAqcGgpCit7CisgICAgY29uc3QgaW50IGlu aXRfcXAgPSBwcHMtPnBwc19pbml0X3FwX21pbnVzMjYgKyAyNjsKKworICAgIGlmICghcHBzLT5w cHNfcXBfZGVsdGFfaW5mb19pbl9waF9mbGFnKQorICAgICAgICBzaC0+c2xpY2VfcXBfeSA9IGlu aXRfcXAgKyBzaC0+ci0+c2hfcXBfZGVsdGE7CisgICAgZWxzZQorICAgICAgICBzaC0+c2xpY2Vf cXBfeSA9IGluaXRfcXAgKyBwaC0+cGhfcXBfZGVsdGE7Cit9CisKK3N0YXRpYyB2b2lkIHNoX2lu dGVyKFZWQ1NIICpzaCwgY29uc3QgSDI2NlJhd1NQUyAqc3BzLCBjb25zdCBIMjY2UmF3UFBTICpw cHMpCit7CisgICAgY29uc3QgSDI2NlJhd1NsaWNlSGVhZGVyICpyc2ggPSBzaC0+cjsKKworICAg IGlmICghcHBzLT5wcHNfd3BfaW5mb19pbl9waF9mbGFnICYmCisgICAgICAgICgocHBzLT5wcHNf d2VpZ2h0ZWRfcHJlZF9mbGFnICYmIElTX1AocnNoKSkgfHwKKyAgICAgICAgIChwcHMtPnBwc193 ZWlnaHRlZF9iaXByZWRfZmxhZyAmJiBJU19CKHJzaCkpKSkKKyAgICAgICAgcHJlZF93ZWlnaHRf dGFibGUoJnNoLT5wd3QsICZyc2gtPnNoX3ByZWRfd2VpZ2h0X3RhYmxlKTsKK30KKworc3RhdGlj IHZvaWQgc2hfZGVibG9ja19vZmZzZXRzKFZWQ1NIICpzaCkKK3sKKyAgICBjb25zdCBIMjY2UmF3 U2xpY2VIZWFkZXIgKnIgPSBzaC0+cjsKKworICAgIGlmICghci0+c2hfZGVibG9ja2luZ19maWx0 ZXJfZGlzYWJsZWRfZmxhZykgeworICAgICAgICBzaC0+ZGVibG9jay5iZXRhX29mZnNldFtMVU1B XSA9IHItPnNoX2x1bWFfYmV0YV9vZmZzZXRfZGl2MiA8PCAxOworICAgICAgICBzaC0+ZGVibG9j ay50Y19vZmZzZXRbTFVNQV0gICA9IHItPnNoX2x1bWFfdGNfb2Zmc2V0X2RpdjIgPDwgMTsKKyAg ICAgICAgc2gtPmRlYmxvY2suYmV0YV9vZmZzZXRbQ0JdICAgPSByLT5zaF9jYl9iZXRhX29mZnNl dF9kaXYyIDw8IDE7CisgICAgICAgIHNoLT5kZWJsb2NrLnRjX29mZnNldFtDQl0gICAgID0gci0+ c2hfY2JfdGNfb2Zmc2V0X2RpdjIgPDwgMTsKKyAgICAgICAgc2gtPmRlYmxvY2suYmV0YV9vZmZz ZXRbQ1JdICAgPSByLT5zaF9jcl9iZXRhX29mZnNldF9kaXYyIDw8IDE7CisgICAgICAgIHNoLT5k ZWJsb2NrLnRjX29mZnNldFtDUl0gICAgID0gci0+c2hfY3JfdGNfb2Zmc2V0X2RpdjIgPDwgMTsK KyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHNoX3BhcnRpdGlvbl9jb25zdHJhaW50cyhWVkNTSCAq c2gsIGNvbnN0IEgyNjZSYXdTUFMgKnNwcywgY29uc3QgSDI2NlJhd1BpY3R1cmVIZWFkZXIgKnBo KQoreworICAgIGNvbnN0IGludCBtaW5fY2JfbG9nMl9zaXplX3kgPSBzcHMtPnNwc19sb2cyX21p bl9sdW1hX2NvZGluZ19ibG9ja19zaXplX21pbnVzMiArIDI7CisgICAgaW50IG1pbl9xdF9sb2cy X3NpemVfeVsyXTsKKworICAgIGlmIChJU19JKHNoLT5yKSkgeworICAgICAgICBtaW5fcXRfbG9n Ml9zaXplX3lbTFVNQV0gICAgICAgID0gKG1pbl9jYl9sb2cyX3NpemVfeSArIHBoLT5waF9sb2cy X2RpZmZfbWluX3F0X21pbl9jYl9pbnRyYV9zbGljZV9sdW1hKTsKKyAgICAgICAgbWluX3F0X2xv ZzJfc2l6ZV95W0NIUk9NQV0gICAgICA9IChtaW5fY2JfbG9nMl9zaXplX3kgKyBwaC0+cGhfbG9n Ml9kaWZmX21pbl9xdF9taW5fY2JfaW50cmFfc2xpY2VfY2hyb21hKTsKKworICAgICAgICBzaC0+ bWF4X2J0X3NpemVbTFVNQV0gICAgICAgICAgID0gMSA8PCAobWluX3F0X2xvZzJfc2l6ZV95W0xV TUFdICArIHBoLT5waF9sb2cyX2RpZmZfbWF4X2J0X21pbl9xdF9pbnRyYV9zbGljZV9sdW1hKTsK KyAgICAgICAgc2gtPm1heF9idF9zaXplW0NIUk9NQV0gICAgICAgICA9IDEgPDwgKG1pbl9xdF9s b2cyX3NpemVfeVtDSFJPTUFdKyBwaC0+cGhfbG9nMl9kaWZmX21heF9idF9taW5fcXRfaW50cmFf c2xpY2VfY2hyb21hKTsKKworICAgICAgICBzaC0+bWF4X3R0X3NpemVbTFVNQV0gICAgICAgICAg ID0gMSA8PCAobWluX3F0X2xvZzJfc2l6ZV95W0xVTUFdICArIHBoLT5waF9sb2cyX2RpZmZfbWF4 X3R0X21pbl9xdF9pbnRyYV9zbGljZV9sdW1hKTsKKyAgICAgICAgc2gtPm1heF90dF9zaXplW0NI Uk9NQV0gICAgICAgICA9IDEgPDwgKG1pbl9xdF9sb2cyX3NpemVfeVtDSFJPTUFdKyBwaC0+cGhf bG9nMl9kaWZmX21heF90dF9taW5fcXRfaW50cmFfc2xpY2VfY2hyb21hKTsKKworICAgICAgICBz aC0+bWF4X210dF9kZXB0aFtMVU1BXSAgICAgICAgID0gcGgtPnBoX21heF9tdHRfaGllcmFyY2h5 X2RlcHRoX2ludHJhX3NsaWNlX2x1bWE7CisgICAgICAgIHNoLT5tYXhfbXR0X2RlcHRoW0NIUk9N QV0gICAgICAgPSBwaC0+cGhfbWF4X210dF9oaWVyYXJjaHlfZGVwdGhfaW50cmFfc2xpY2VfY2hy b21hOworCisgICAgICAgIHNoLT5jdV9xcF9kZWx0YV9zdWJkaXYgICAgICAgICAgPSBwaC0+cGhf Y3VfcXBfZGVsdGFfc3ViZGl2X2ludHJhX3NsaWNlOworICAgICAgICBzaC0+Y3VfY2hyb21hX3Fw X29mZnNldF9zdWJkaXYgID0gcGgtPnBoX2N1X2Nocm9tYV9xcF9vZmZzZXRfc3ViZGl2X2ludHJh X3NsaWNlOworICAgIH0gZWxzZSB7CisgICAgICAgIGZvciAoaW50IGkgPSBMVU1BOyBpIDw9IENI Uk9NQTsgaSsrKSAgeworICAgICAgICAgICAgbWluX3F0X2xvZzJfc2l6ZV95W2ldICAgICAgICA9 IChtaW5fY2JfbG9nMl9zaXplX3kgKyBwaC0+cGhfbG9nMl9kaWZmX21pbl9xdF9taW5fY2JfaW50 ZXJfc2xpY2UpOworICAgICAgICAgICAgc2gtPm1heF9idF9zaXplW2ldICAgICAgICAgICA9IDEg PDwgKG1pbl9xdF9sb2cyX3NpemVfeVtpXSAgKyBwaC0+cGhfbG9nMl9kaWZmX21heF9idF9taW5f cXRfaW50ZXJfc2xpY2UpOworICAgICAgICAgICAgc2gtPm1heF90dF9zaXplW2ldICAgICAgICAg ICA9IDEgPDwgKG1pbl9xdF9sb2cyX3NpemVfeVtpXSAgKyBwaC0+cGhfbG9nMl9kaWZmX21heF90 dF9taW5fcXRfaW50ZXJfc2xpY2UpOworICAgICAgICAgICAgc2gtPm1heF9tdHRfZGVwdGhbaV0g ICAgICAgICA9IHBoLT5waF9tYXhfbXR0X2hpZXJhcmNoeV9kZXB0aF9pbnRlcl9zbGljZTsKKyAg ICAgICAgfQorCisgICAgICAgIHNoLT5jdV9xcF9kZWx0YV9zdWJkaXYgICAgICAgICAgPSBwaC0+ cGhfY3VfcXBfZGVsdGFfc3ViZGl2X2ludGVyX3NsaWNlOworICAgICAgICBzaC0+Y3VfY2hyb21h X3FwX29mZnNldF9zdWJkaXYgID0gcGgtPnBoX2N1X2Nocm9tYV9xcF9vZmZzZXRfc3ViZGl2X2lu dGVyX3NsaWNlOworICAgIH0KKworICAgIHNoLT5taW5fcXRfc2l6ZVtMVU1BXSAgID0gMSA8PCBt aW5fcXRfbG9nMl9zaXplX3lbTFVNQV07CisgICAgc2gtPm1pbl9xdF9zaXplW0NIUk9NQV0gPSAx IDw8IG1pbl9xdF9sb2cyX3NpemVfeVtDSFJPTUFdOworfQorCitzdGF0aWMgdm9pZCBzaF9lbnRy eV9wb2ludHMoVlZDU0ggKnNoLCBjb25zdCBIMjY2UmF3U1BTICpzcHMsIGNvbnN0IFZWQ1BQUyAq cHBzKQoreworICAgIGlmIChzcHMtPnNwc19lbnRyeV9wb2ludF9vZmZzZXRzX3ByZXNlbnRfZmxh ZykgeworICAgICAgICBmb3IgKGludCBpID0gMSwgaiA9IDA7IGkgPCBzaC0+bnVtX2N0dXNfaW5f Y3Vycl9zbGljZTsgaSsrKSB7CisgICAgICAgICAgICBjb25zdCBpbnQgcHJlX2N0Yl9hZGRyX3gg PSBzaC0+Y3RiX2FkZHJfaW5fY3Vycl9zbGljZVtpIC0gMV0gJSBwcHMtPmN0Yl93aWR0aDsKKyAg ICAgICAgICAgIGNvbnN0IGludCBwcmVfY3RiX2FkZHJfeSA9IHNoLT5jdGJfYWRkcl9pbl9jdXJy X3NsaWNlW2kgLSAxXSAvIHBwcy0+Y3RiX3dpZHRoOworICAgICAgICAgICAgY29uc3QgaW50IGN0 Yl9hZGRyX3ggICAgID0gc2gtPmN0Yl9hZGRyX2luX2N1cnJfc2xpY2VbaV0gJSBwcHMtPmN0Yl93 aWR0aDsKKyAgICAgICAgICAgIGNvbnN0IGludCBjdGJfYWRkcl95ICAgICA9IHNoLT5jdGJfYWRk cl9pbl9jdXJyX3NsaWNlW2ldIC8gcHBzLT5jdGJfd2lkdGg7CisgICAgICAgICAgICBpZiAocHBz LT5jdGJfdG9fcm93X2JkW2N0Yl9hZGRyX3ldICE9IHBwcy0+Y3RiX3RvX3Jvd19iZFtwcmVfY3Ri X2FkZHJfeV0gfHwKKyAgICAgICAgICAgICAgICBwcHMtPmN0Yl90b19jb2xfYmRbY3RiX2FkZHJf eF0gIT0gcHBzLT5jdGJfdG9fY29sX2JkW3ByZV9jdGJfYWRkcl94XSB8fAorICAgICAgICAgICAg ICAgIChjdGJfYWRkcl95ICE9IHByZV9jdGJfYWRkcl95ICYmIHNwcy0+c3BzX2VudHJvcHlfY29k aW5nX3N5bmNfZW5hYmxlZF9mbGFnKSkgeworICAgICAgICAgICAgICAgIHNoLT5lbnRyeV9wb2lu dF9zdGFydF9jdHVbaisrXSA9IGk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9 CisKK3N0YXRpYyBpbnQgc2hfZGVyaXZlKFZWQ1NIICpzaCwgY29uc3QgVlZDRnJhbWVQYXJhbVNl dHMgKmZwcykKK3sKKyAgICBjb25zdCBIMjY2UmF3U1BTICpzcHMgICAgICAgICAgID0gZnBzLT5z cHMtPnI7CisgICAgY29uc3QgSDI2NlJhd1BQUyAqcHBzICAgICAgICAgICA9IGZwcy0+cHBzLT5y OworICAgIGNvbnN0IEgyNjZSYXdQaWN0dXJlSGVhZGVyICpwaCAgPSBmcHMtPnBoLnI7CisKKyAg ICBzaF9zbGljZV9hZGRyZXNzKHNoLCBzcHMsIGZwcy0+cHBzKTsKKyAgICBzaF9pbnRlcihzaCwg c3BzLCBwcHMpOworICAgIHNoX3FwX3koc2gsIHBwcywgcGgpOworICAgIHNoX2RlYmxvY2tfb2Zm c2V0cyhzaCk7CisgICAgc2hfcGFydGl0aW9uX2NvbnN0cmFpbnRzKHNoLCBzcHMsIHBoKTsKKyAg ICBzaF9lbnRyeV9wb2ludHMoc2gsIHNwcywgZnBzLT5wcHMpOworCisgICAgcmV0dXJuIDA7Cit9 CisKK2ludCBmZl92dmNfZGVjb2RlX3NoKFZWQ1NIICpzaCwgY29uc3QgVlZDRnJhbWVQYXJhbVNl dHMgKmZwcywgY29uc3QgQ29kZWRCaXRzdHJlYW1Vbml0ICp1bml0KQoreworICAgIGludCByZXQ7 CisKKyAgICBpZiAoIWZwcy0+c3BzIHx8ICFmcHMtPnBwcykKKyAgICAgICAgcmV0dXJuIEFWRVJS T1JfSU5WQUxJRERBVEE7CisKKyAgICBmZl9yZWZzdHJ1Y3RfcmVwbGFjZSgmc2gtPnIsIHVuaXQt PmNvbnRlbnRfcmVmKTsKKworICAgIHJldCA9IHNoX2Rlcml2ZShzaCwgZnBzKTsKKyAgICBpZiAo cmV0IDwgMCkKKyAgICAgICAgcmV0dXJuIHJldDsKKworICAgIHJldHVybiAwOworfQpkaWZmIC0t Z2l0IGEvbGliYXZjb2RlYy92dmMvdnZjX3BzLmggYi9saWJhdmNvZGVjL3Z2Yy92dmNfcHMuaApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi40M2M3MmQ1NDgzCi0tLSAvZGV2 L251bGwKKysrIGIvbGliYXZjb2RlYy92dmMvdnZjX3BzLmgKQEAgLTAsMCArMSwyNjMgQEAKKy8q CisgKiBWVkMgcGFyYW1ldGVyIHNldCBwYXJzZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMjMg TnVvIE1pCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgorICoKKyAqIEZGbXBl ZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247 IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq IExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs IFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0 aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0 LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICovCisKKyNpZm5kZWYg QVZDT0RFQ19WVkNfUFNfSAorI2RlZmluZSBBVkNPREVDX1ZWQ19QU19ICisKKyNpbmNsdWRlICJs aWJhdmNvZGVjL2Nic19oMjY2LmgiCisjaW5jbHVkZSAibGliYXZjb2RlYy92dmMuaCIKKworI2Rl ZmluZSBJU19JRFIocykgICgocyktPnZjbF91bml0X3R5cGUgPT0gVlZDX0lEUl9XX1JBREwgfHwg KHMpLT52Y2xfdW5pdF90eXBlID09IFZWQ19JRFJfTl9MUCkKKyNkZWZpbmUgSVNfQ1JBKHMpICAo KHMpLT52Y2xfdW5pdF90eXBlID09IFZWQ19DUkFfTlVUKQorI2RlZmluZSBJU19JUkFQKHMpIChJ U19JRFIocykgfHwgSVNfQ1JBKHMpKQorI2RlZmluZSBJU19HRFIocykgICgocyktPnZjbF91bml0 X3R5cGUgPT0gVlZDX0dEUl9OVVQpCisjZGVmaW5lIElTX0NWU1MocykgKElTX0lSQVAocyl8fCBJ U19HRFIocykpCisjZGVmaW5lIElTX0NMVlNTKHMpIChJU19DVlNTKHMpICYmIHMtPm5vX291dHB1 dF9iZWZvcmVfcmVjb3ZlcnlfZmxhZykKKyNkZWZpbmUgSVNfUkFTTChzKSAoKHMpLT52Y2xfdW5p dF90eXBlID09IFZWQ19SQVNMX05VVCkKKyNkZWZpbmUgSVNfUkFETChzKSAoKHMpLT52Y2xfdW5p dF90eXBlID09IFZWQ19SQURMX05VVCkKKworI2RlZmluZSBJU19JKHJzaCkgKChyc2gpLT5zaF9z bGljZV90eXBlID09IFZWQ19TTElDRV9UWVBFX0kpCisjZGVmaW5lIElTX1AocnNoKSAoKHJzaCkt PnNoX3NsaWNlX3R5cGUgPT0gVlZDX1NMSUNFX1RZUEVfUCkKKyNkZWZpbmUgSVNfQihyc2gpICgo cnNoKS0+c2hfc2xpY2VfdHlwZSA9PSBWVkNfU0xJQ0VfVFlQRV9CKQorCisjZGVmaW5lIElOVl9Q T0MgSU5UX01JTgorI2RlZmluZSBHRFJfSVNfUkVDT1ZFUkVEKHMpICAocy0+Z2RyX3JlY292ZXJ5 X3BvaW50X3BvYyA9PSBJTlZfUE9DKQorI2RlZmluZSBHRFJfU0VUX1JFQ09WRVJFRChzKSAocy0+ Z2RyX3JlY292ZXJ5X3BvaW50X3BvYyA9ICBJTlZfUE9DKQorCisjZGVmaW5lIExNQ1NfTUFYX0JJ VF9ERVBUSCAgMTIKKyNkZWZpbmUgTE1DU19NQVhfTFVUX1NJWkUgICAoMSA8PCBMTUNTX01BWF9C SVRfREVQVEgpCisjZGVmaW5lIExNQ1NfTUFYX0JJTl9TSVpFICAgMTYKKyNkZWZpbmUgTEFERl9N QVhfSU5URVJWQUwgICA1CisKK2VudW0geworICAgIENIUk9NQV9GT1JNQVRfTU9OTywKKyAgICBD SFJPTUFfRk9STUFUXzQyMCwKKyAgICBDSFJPTUFfRk9STUFUXzQyMiwKKyAgICBDSFJPTUFfRk9S TUFUXzQ0NCwKK307CisKK3R5cGVkZWYgc3RydWN0IFZWQ1NQUyB7CisgICAgY29uc3QgSDI2NlJh d1NQUyAqcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwg UmVmU3RydWN0IHJlZmVyZW5jZQorCisgICAgLy9kZXJpdmVkIHZhbHVlcworICAgIHVpbnQxNl90 ICAgIHdpZHRoOworICAgIHVpbnQxNl90ICAgIGhlaWdodDsKKyAgICB1aW50OF90ICAgICBoc2hp ZnRbVlZDX01BWF9TQU1QTEVfQVJSQVlTXTsKKyAgICB1aW50OF90ICAgICB2c2hpZnRbVlZDX01B WF9TQU1QTEVfQVJSQVlTXTsKKyAgICB1aW50MzJfdCAgICBtYXhfcGljX29yZGVyX2NudF9sc2I7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IE1heFBpY09yZGVyQ250THNiCisKKyAg ICB1aW50OF90ICAgICBwaXhlbF9zaGlmdDsKKyAgICBlbnVtIEFWUGl4ZWxGb3JtYXQgcGl4X2Zt dDsKKworICAgIHVpbnQ4X3QgICAgIGJpdF9kZXB0aDsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvLy88IEJpdERlcHRoCisgICAgdWludDhfdCAgICAgcXBfYmRfb2Zm c2V0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgUXBCZE9mZnNl dAorICAgIHVpbnQ4X3QgICAgIGN0Yl9sb2cyX3NpemVfeTsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvLy88IEN0YkxvZzJTaXplWQorICAgIHVpbnQ4X3QgICAgIGN0Yl9zaXpl X3k7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IEN0YlNpemVZ CisgICAgdWludDhfdCAgICAgbWluX2NiX2xvZzJfc2l6ZV95OyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8vLzwgTWluQ2JMb2cyU2l6ZVkKKyAgICB1aW50OF90ICAgICBtaW5fY2Jf c2l6ZV95OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBNaW5DYlNp emVZCisgICAgdWludDhfdCAgICAgbWF4X3RiX3NpemVfeTsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8vLzwgTWF4VGJTaXplWQorICAgIHVpbnQ4X3QgICAgIG1heF90c19z aXplOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IE1heFRzU2l6 ZQorICAgIHVpbnQ4X3QgICAgIG1heF9udW1fbWVyZ2VfY2FuZDsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvLy88IE1heE51bU1lcmdlQ2FuZAorICAgIHVpbnQ4X3QgICAgIG1heF9u dW1faWJjX21lcmdlX2NhbmQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IE1heE51 bUliY01lcmdlQ2FuZAorICAgIHVpbnQ4X3QgICAgIG1heF9udW1fZ3BtX21lcmdlX2NhbmQ7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IE1heE51bUdwbU1lcmdlQ2FuZAorICAgIHVp bnQ4X3QgICAgIG51bV9sYWRmX2ludGVydmFsczsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvLy88IHNwc19udW1fbGFkZl9pbnRlcnZhbHNfbWludXMyICsgMjsKKyAgICB1aW50MzJf dCAgICBsYWRmX2ludGVydmFsX2xvd2VyX2JvdW5kW0xBREZfTUFYX0lOVEVSVkFMXTsgICAgICAg Ly8vPCBTcHNMYWRmSW50ZXJ2YWxMb3dlckJvdW5kW10KKyAgICB1aW50OF90ICAgICBsb2cyX3Bh cmFsbGVsX21lcmdlX2xldmVsOyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBzcHNfbG9n Ml9wYXJhbGxlbF9tZXJnZV9sZXZlbF9taW51czIgKyAyOworICAgIHVpbnQ4X3QgICAgIGxvZzJf dHJhbnNmb3JtX3JhbmdlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IExvZzJU cmFuc2Zvcm1SYW5nZQorICAgIGludDhfdCAgICAgIGNocm9tYV9xcF90YWJsZVszXVtWVkNfTUFY X1BPSU5UU19JTl9RUF9UQUJMRV07ICAgICAvLy88IENocm9tYVFwVGFibGUKK30gVlZDU1BTOwor Cit0eXBlZGVmIHN0cnVjdCBEQlBhcmFtcyB7CisgICAgaW50OF90IGJldGFfb2Zmc2V0W1ZWQ19N QVhfU0FNUExFX0FSUkFZU107CisgICAgaW50OF90IHRjX29mZnNldFtWVkNfTUFYX1NBTVBMRV9B UlJBWVNdOworfSBEQlBhcmFtczsKKwordHlwZWRlZiBzdHJ1Y3QgVlZDUFBTIHsKKyAgICBjb25z dCBIMjY2UmF3UFBTICpyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLy8vPCBSZWZTdHJ1Y3QgcmVmZXJlbmNlCisKKyAgICAvL2Rlcml2ZWQgdmFsdWU7CisgICAg aW50OF90ICAgY2hyb21hX3FwX29mZnNldFszXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8vLzwgcHBzX2NiX3FwX29mZnNldCwgcHBzX2NyX3FwX29mZnNldCwgcHBzX2pvaW50 X2NiY3JfcXBfb2Zmc2V0X3ZhbHVlCisgICAgaW50OF90ICAgY2hyb21hX3FwX29mZnNldF9saXN0 WzZdWzNdOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgcHBzX2NiX3FwX29mZnNldF9s aXN0LCBwcHNfY3JfcXBfb2Zmc2V0X2xpc3QsIHBwc19qb2ludF9jYmNyX3FwX29mZnNldF9saXN0 CisKKyAgICB1aW50MTZfdCB3aWR0aDsKKyAgICB1aW50MTZfdCBoZWlnaHQ7CisKKyAgICB1aW50 MTZfdCBzbGljZV9zdGFydF9vZmZzZXRbVlZDX01BWF9TTElDRVNdOworICAgIHVpbnQxNl90IG51 bV9jdHVzX2luX3NsaWNlIFtWVkNfTUFYX1NMSUNFU107CisKKyAgICB1aW50MTZfdCBtaW5fY2Jf d2lkdGg7CisgICAgdWludDE2X3QgbWluX2NiX2hlaWdodDsKKworICAgIHVpbnQxNl90IGN0Yl93 aWR0aDsKKyAgICB1aW50MTZfdCBjdGJfaGVpZ2h0OworICAgIHVpbnQzMl90IGN0Yl9jb3VudDsK KworICAgIHVpbnQxNl90IG1pbl9wdV93aWR0aDsKKyAgICB1aW50MTZfdCBtaW5fcHVfaGVpZ2h0 OworICAgIHVpbnQxNl90IG1pbl90dV93aWR0aDsKKyAgICB1aW50MTZfdCBtaW5fdHVfaGVpZ2h0 OworCisgICAgdWludDMyX3QgKmN0Yl9hZGRyX2luX3NsaWNlOyAgICAgICAgICAgIC8vLzwgQ3Ri QWRkckluQ3VyclNsaWNlIGZvciBlbnRpcmUgcGljdHVyZQorICAgIHVpbnQxNl90ICpjb2xfYmQ7 CisgICAgdWludDE2X3QgKnJvd19iZDsKKyAgICB1aW50MTZfdCAqY3RiX3RvX2NvbF9iZDsKKyAg ICB1aW50MTZfdCAqY3RiX3RvX3Jvd19iZDsKKworICAgIHVpbnQxNl90IHdpZHRoMzI7ICAgICAg ICAgICAgICAgICAgICAgICAvLy88IHdpZHRoICBpbiAzMiBwaXhlbHMKKyAgICB1aW50MTZfdCBo ZWlnaHQzMjsgICAgICAgICAgICAgICAgICAgICAgLy8vPCBoZWlnaHQgaW4gMzIgcGl4ZWxzCisg ICAgdWludDE2X3Qgd2lkdGg2NDsgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgd2lkdGggIGlu IDY0IHBpeGVscworICAgIHVpbnQxNl90IGhlaWdodDY0OyAgICAgICAgICAgICAgICAgICAgICAv Ly88IGhlaWdodCBpbiA2NCBwaXhlbHMKKworICAgIHVpbnQxNl90IHJlZl93cmFwYXJvdW5kX29m ZnNldDsgICAgICAgICAvLy88IFBwc1JlZldyYXBhcm91bmRPZmZzZXQKKworfSBWVkNQUFM7CisK KyNkZWZpbmUgTUFYX1dFSUdIVFMgMTUKK3R5cGVkZWYgc3RydWN0IFByZWRXZWlnaHRUYWJsZSB7 CisgICAgdWludDhfdCBsb2cyX2Rlbm9tWzJdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLy8vPCBsdW1hX2xvZzJfd2VpZ2h0X2Rlbm9tLCBDaHJvbWFMb2cyV2VpZ2h0RGVu b20KKworICAgIHVpbnQ4X3QgbmJfd2VpZ2h0c1syXTsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8vLzwgbnVtX2wwX3dlaWdodHMsIG51bV9sMV93ZWlnaHRzCisgICAgdWlu dDhfdCB3ZWlnaHRfZmxhZ1syXVsyXVtNQVhfV0VJR0hUU107ICAgICAgICAgICAgICAgICAgICAg Ly8vPCBsdW1hX3dlaWdodF9sMF9mbGFnLCBjaHJvbWFfd2VpZ2h0X2wwX2ZsYWcsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Ly8vPCBsdW1hX3dlaWdodF9sMV9mbGFnLCBjaHJvbWFfd2VpZ2h0X2wxX2ZsYWcsCisgICAgaW50 MTZfdCB3ZWlnaHRbMl1bVlZDX01BWF9TQU1QTEVfQVJSQVlTXVtNQVhfV0VJR0hUU107ICAgICAg Ly8vPCBMdW1hV2VpZ2h0TDAsIEx1bWFXZWlnaHRMMSwgQ2hyb21hV2VpZ2h0TDAsIENocm9tYVdl aWdodEwxCisgICAgaW50MTZfdCBvZmZzZXRbMl1bVlZDX01BWF9TQU1QTEVfQVJSQVlTXVtNQVhf V0VJR0hUU107ICAgICAgLy8vPCBsdW1hX29mZnNldF9sMCwgbHVtYV9vZmZzZXRfbDEsIENocm9t YU9mZnNldEwwLCBDaHJvbWFPZmZzZXRMMQorfSBQcmVkV2VpZ2h0VGFibGU7CisKK3R5cGVkZWYg c3RydWN0IFZWQ1BIIHsKKyAgICBjb25zdCBIMjY2UmF3UGljdHVyZUhlYWRlciAqcjsKKyAgICB2 b2lkICpycmVmOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IFJlZlN0 cnVjdCByZWZlcmVuY2UsIGJhY2tpbmcgcGggYWJvdmUKKworICAgIC8vZGVyaXZlZCB2YWx1ZXMK KyAgICB1aW50MzJfdCBtYXhfbnVtX3N1YmJsb2NrX21lcmdlX2NhbmQ7ICAgICAgICAgICAvLy88 IE1heE51bVN1YmJsb2NrTWVyZ2VDYW5kCisgICAgaW50MzJfdCAgcG9jOyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLy8vPCBQaWNPcmRlckNudFZhbAorICAgIFByZWRXZWlnaHRU YWJsZSBwd3Q7Cit9IFZWQ1BIOworCisjZGVmaW5lIEFMRl9OVU1fRklMVEVSU19MVU1BICAgIDI1 CisjZGVmaW5lIEFMRl9OVU1fRklMVEVSU19DSFJPTUEgICA4CisjZGVmaW5lIEFMRl9OVU1fRklM VEVSU19DQyAgICAgICA1CisKKyNkZWZpbmUgQUxGX05VTV9DT0VGRl9MVU1BICAgICAgMTIKKyNk ZWZpbmUgQUxGX05VTV9DT0VGRl9DSFJPTUEgICAgIDYKKyNkZWZpbmUgQUxGX05VTV9DT0VGRl9D QyAgICAgICAgIDcKKwordHlwZWRlZiBzdHJ1Y3QgVlZDQUxGIHsKKyAgICBpbnQxNl90IGx1bWFf Y29lZmYgICAgIFtBTEZfTlVNX0ZJTFRFUlNfTFVNQV1bQUxGX05VTV9DT0VGRl9MVU1BXTsKKyAg ICB1aW50OF90IGx1bWFfY2xpcF9pZHggIFtBTEZfTlVNX0ZJTFRFUlNfTFVNQV1bQUxGX05VTV9D T0VGRl9MVU1BXTsKKworICAgIHVpbnQ4X3QgbnVtX2Nocm9tYV9maWx0ZXJzOworICAgIGludDE2 X3QgY2hyb21hX2NvZWZmICAgW0FMRl9OVU1fRklMVEVSU19DSFJPTUFdW0FMRl9OVU1fQ09FRkZf Q0hST01BXTsKKyAgICB1aW50OF90IGNocm9tYV9jbGlwX2lkeFtBTEZfTlVNX0ZJTFRFUlNfQ0hS T01BXVtBTEZfTlVNX0NPRUZGX0NIUk9NQV07CisKKyAgICB1aW50OF90IG51bV9jY19maWx0ZXJz WzJdOyAgICAgICAgLy8vPCBhbGZfY2NfY2JfZmlsdGVyc19zaWduYWxsZWRfbWludXMxICsgMSwg YWxmX2NjX2NyX2ZpbHRlcnNfc2lnbmFsbGVkX21pbnVzMSArIDEKKyAgICBpbnQxNl90IGNjX2Nv ZWZmWzJdW0FMRl9OVU1fRklMVEVSU19DQ11bQUxGX05VTV9DT0VGRl9DQ107Cit9IFZWQ0FMRjsK KworZW51bSB7CisgIFNMX1NUQVJUXzJ4MiAgICA9IDAsCisgIFNMX1NUQVJUXzR4NCAgICA9IDIs CisgIFNMX1NUQVJUXzh4OCAgICA9IDgsCisgIFNMX1NUQVJUXzE2eDE2ICA9IDE0LAorICBTTF9T VEFSVF8zMngzMiAgPSAyMCwKKyAgU0xfU1RBUlRfNjR4NjQgID0gMjYsCisgIFNMX01BWF9JRCAg ICAgICA9IDI4LAorfTsKKworI2RlZmluZSBTTF9NQVhfTUFUUklYX1NJWkUgOAorCit0eXBlZGVm IHN0cnVjdCBWVkNTY2FsaW5nTGlzdCB7CisgICAgdWludDhfdCBzY2FsaW5nX21hdHJpeF9yZWNb U0xfTUFYX0lEXVtTTF9NQVhfTUFUUklYX1NJWkUgKiBTTF9NQVhfTUFUUklYX1NJWkVdOyAgLy8v PCBTY2FsaW5nTWF0cml4UmVjCisgICAgdWludDhfdCBzY2FsaW5nX21hdHJpeF9kY19yZWNbU0xf TUFYX0lEIC0gU0xfU1RBUlRfMTZ4MTZdOyAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBTY2Fs aW5nTWF0cml4RGNSZWNbcmVmSWQg4oiSIDE0XQorfSBWVkNTY2FsaW5nTGlzdDsKKwordHlwZWRl ZiBzdHJ1Y3QgVlZDTE1DUyB7CisgICAgdWludDhfdCAgbWluX2Jpbl9pZHg7CisgICAgdWludDhf dCAgbWF4X2Jpbl9pZHg7CisKKyAgICAvLyoyIGZvciBoaWdoIGRlcHRoCisgICAgdWludDhfdCAg ZndkX2x1dFtMTUNTX01BWF9MVVRfU0laRSAqIDJdOworICAgIHVpbnQ4X3QgIGludl9sdXRbTE1D U19NQVhfTFVUX1NJWkUgKiAyXTsKKworICAgIHVpbnQxNl90IHBpdm90W0xNQ1NfTUFYX0JJTl9T SVpFICsgMV07CisgICAgdWludDE2X3QgY2hyb21hX3NjYWxlX2NvZWZmW0xNQ1NfTUFYX0JJTl9T SVpFXTsKK30gVlZDTE1DUzsKKworI2RlZmluZSBWVkNfTUFYX0FMRl9DT1VOVCAgICAgICAgOAor I2RlZmluZSBWVkNfTUFYX0xNQ1NfQ09VTlQgICAgICAgNAorI2RlZmluZSBWVkNfTUFYX1NMX0NP VU5UICAgICAgICAgOAorCit0eXBlZGVmIHN0cnVjdCBWVkNQYXJhbVNldHMgeworICAgIGNvbnN0 IFZWQ1NQUyAgICAgICAgICAgICpzcHNfbGlzdFtWVkNfTUFYX1NQU19DT1VOVF07ICAgICAgIC8v LzwgUmVmU3RydWN0IHJlZmVyZW5jZQorICAgIGNvbnN0IFZWQ1BQUyAgICAgICAgICAgICpwcHNf bGlzdFtWVkNfTUFYX1BQU19DT1VOVF07ICAgICAgIC8vLzwgUmVmU3RydWN0IHJlZmVyZW5jZQor ICAgIGNvbnN0IFZWQ0FMRiAgICAgICAgICAgICphbGZfbGlzdFtWVkNfTUFYX0FMRl9DT1VOVF07 ICAgICAgIC8vLzwgUmVmU3RydWN0IHJlZmVyZW5jZQorICAgIGNvbnN0IEgyNjZSYXdBUFMgICAg ICAgICpsbWNzX2xpc3RbVlZDX01BWF9MTUNTX0NPVU5UXTsgICAgIC8vLzwgUmVmU3RydWN0IHJl ZmVyZW5jZQorICAgIGNvbnN0IFZWQ1NjYWxpbmdMaXN0ICAgICpzY2FsaW5nX2xpc3RbVlZDX01B WF9TTF9DT1VOVF07ICAgIC8vLzwgUmVmU3RydWN0IHJlZmVyZW5jZQorfSBWVkNQYXJhbVNldHM7 CisKK3R5cGVkZWYgc3RydWN0IFZWQ0ZyYW1lUGFyYW1TZXRzIHsKKyAgICBjb25zdCBWVkNTUFMg ICAgICAgICAgICpzcHM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IFJlZlN0 cnVjdCByZWZlcmVuY2UKKyAgICBjb25zdCBWVkNQUFMgICAgICAgICAgICpwcHM7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvLy88IFJlZlN0cnVjdCByZWZlcmVuY2UKKyAgICBWVkNQ SCAgICAgICAgICAgICAgICAgICBwaDsKKyAgICBjb25zdCBWVkNBTEYgICAgICAgICAgICphbGZf bGlzdFtWVkNfTUFYX0FMRl9DT1VOVF07ICAgICAgICAvLy88IFJlZlN0cnVjdCByZWZlcmVuY2UK KyAgICBWVkNMTUNTICAgICAgICAgICAgICAgICBsbWNzOworICAgIGNvbnN0IFZWQ1NjYWxpbmdM aXN0ICAgKnNsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgUmVmU3RydWN0 IHJlZmVyZW5jZQorfSBWVkNGcmFtZVBhcmFtU2V0czsKKwordHlwZWRlZiBzdHJ1Y3QgVlZDU0gg eworICAgIGNvbnN0IEgyNjZSYXdTbGljZUhlYWRlciAqcjsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLy8vPCBSZWZTdHJ1Y3QgcmVmZXJlbmNlCisKKyAgICAvLyBkZXJpdmVkIHZhbHVlcwor ICAgIC8vIGN0dSBhZGRyZXNzCisgICAgdWludDMyX3QgICAgICAgIG51bV9jdHVzX2luX2N1cnJf c2xpY2U7ICAgICAgICAgICAgICAgICAvLy88IE51bUN0dXNJbkN1cnJTbGljZQorICAgIGNvbnN0 IHVpbnQzMl90KiBjdGJfYWRkcl9pbl9jdXJyX3NsaWNlOyAgICAgICAgICAgICAgICAgLy8vPCBD dGJBZGRySW5DdXJyU2xpY2UKKworICAgIC8vIGludGVyCisgICAgUHJlZFdlaWdodFRhYmxlIHB3 dDsKKyAgICBpbnQ4X3QgICByZWZfaWR4X3N5bVsyXTsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8vLzwgUmVmSWR4U3ltTDAsIFJlZklkeFN5bUwxCisKKyAgICAvLyBxcF95CisgICAg aW50OF90ICAgc2xpY2VfcXBfeTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv Ly88IFNsaWNlUXBZCisKKyAgICAvLyBkZWJsb2NrX29mZnNldHMKKyAgICBEQlBhcmFtcyBkZWJs b2NrOworCisgICAgLy8gcGFydGl0aW9uIGNvbnN0cmFpbnMKKyAgICB1aW50OF90ICBtaW5fcXRf c2l6ZVsyXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgTWluUXRTaXplWSwg TWluUXRTaXplQworICAgIHVpbnQ4X3QgIG1heF9idF9zaXplWzJdOyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLy8vPCBNYXhCdFNpemVZLCBNYXhCdFNpemVDCisgICAgdWludDhfdCAg bWF4X3R0X3NpemVbMl07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IE1heFR0 U2l6ZVksIE1heFR0U2l6ZUMKKyAgICB1aW50OF90ICBtYXhfbXR0X2RlcHRoWzJdOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8vLzwgTWF4TXR0RGVwdGhZLCBNYXhNdHREZXB0aEMKKyAg ICB1aW50OF90ICBjdV9xcF9kZWx0YV9zdWJkaXY7ICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8vLzwgQ3VRcERlbHRhU3ViZGl2CisgICAgdWludDhfdCAgY3VfY2hyb21hX3FwX29mZnNldF9z dWJkaXY7ICAgICAgICAgICAgICAgICAgICAvLy88IEN1Q2hyb21hUXBPZmZzZXRTdWJkaXYKKwor ICAgIC8vIGVudHJpZXMKKyAgICB1aW50MzJfdCBlbnRyeV9wb2ludF9zdGFydF9jdHVbVlZDX01B WF9FTlRSWV9QT0lOVFNdOyAgIC8vLzwgZW50cnkgcG9pbnQgc3RhcnQgaW4gY3R1X2FkZHIKK30g VlZDU0g7CisKK3N0cnVjdCBWVkNDb250ZXh0OworCitpbnQgZmZfdnZjX2RlY29kZV9mcmFtZV9w cyhWVkNGcmFtZVBhcmFtU2V0cyAqZnBzLCBzdHJ1Y3QgVlZDQ29udGV4dCAqcyk7CitpbnQgZmZf dnZjX2RlY29kZV9hcHMoVlZDUGFyYW1TZXRzICpwcywgY29uc3QgQ29kZWRCaXRzdHJlYW1Vbml0 ICp1bml0KTsKK2ludCBmZl92dmNfZGVjb2RlX3NoKFZWQ1NIICpzaCwgY29uc3QgVlZDRnJhbWVQ YXJhbVNldHMgKnBzLCBjb25zdCBDb2RlZEJpdHN0cmVhbVVuaXQgKnVuaXQpOwordm9pZCBmZl92 dmNfZnJhbWVfcHNfZnJlZShWVkNGcmFtZVBhcmFtU2V0cyAqZnBzKTsKK3ZvaWQgZmZfdnZjX3Bz X3VuaW5pdChWVkNQYXJhbVNldHMgKnBzKTsKKworI2VuZGlmIC8qIEFWQ09ERUNfVlZDX1BTX0gg Ki8KZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvdnZjL3Z2Y2RlYy5oIGIvbGliYXZjb2RlYy92dmMv dnZjZGVjLmgKaW5kZXggMjgyM2ZhZWU3NS4uZmJiZWRiZWMwMCAxMDA2NDQKLS0tIGEvbGliYXZj b2RlYy92dmMvdnZjZGVjLmgKKysrIGIvbGliYXZjb2RlYy92dmMvdnZjZGVjLmgKQEAgLTI2LDYg KzI2LDggQEAKIAogI2luY2x1ZGUgImxpYmF2Y29kZWMvdnZjLmgiCiAKKyNpbmNsdWRlICJ2dmNf cHMuaCIKKwogI2RlZmluZSBMVU1BICAgICAgICAgICAgICAgICAgICAwCiAjZGVmaW5lIENIUk9N QSAgICAgICAgICAgICAgICAgIDEKICNkZWZpbmUgQ0IgICAgICAgICAgICAgICAgICAgICAgMQpA QCAtMTc1LDYgKzE3NywxMSBAQCB0eXBlZGVmIHN0cnVjdCBWVkNGcmFtZUNvbnRleHQgewogdHlw ZWRlZiBzdHJ1Y3QgVlZDQ29udGV4dCB7CiAgICAgc3RydWN0IEFWQ29kZWNDb250ZXh0ICphdmN0 eDsKIAorICAgIENvZGVkQml0c3RyZWFtQ29udGV4dCAqY2JjOworICAgIENvZGVkQml0c3RyZWFt RnJhZ21lbnQgY3VycmVudF9mcmFtZTsKKworICAgIFZWQ1BhcmFtU2V0cyBwczsKKwogICAgIGlu dCB0ZW1wb3JhbF9pZDsgICAgICAgIC8vLzwgdGVtcG9yYWxfaWRfcGx1czEgLSAxCiAgICAgaW50 IHBvY190aWQwOwogCi0tIAoyLjI1LjEKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCmZmbXBlZy1kZXZlbCBtYWlsaW5nIGxpc3QKZmZtcGVnLWRldmVsQGZm bXBlZy5vcmcKaHR0cHM6Ly9mZm1wZWcub3JnL21haWxtYW4vbGlzdGluZm8vZmZtcGVnLWRldmVs CgpUbyB1bnN1YnNjcmliZSwgdmlzaXQgbGluayBhYm92ZSwgb3IgZW1haWwKZmZtcGVnLWRldmVs LXJlcXVlc3RAZmZtcGVnLm9yZyB3aXRoIHN1YmplY3QgInVuc3Vic2NyaWJlIi4K