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 28708484A8 for ; Tue, 5 Dec 2023 14:47:09 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 8A26268CF45; Tue, 5 Dec 2023 16:46:13 +0200 (EET) Received: from APC01-PSA-obe.outbound.protection.outlook.com (mail-psaapc01olkn2037.outbound.protection.outlook.com [40.92.52.37]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 168E168CEE7 for ; Tue, 5 Dec 2023 16:46:09 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Af2WnkRjqObEpmK+TiE1TwbRhT6E6m7TDsIYp+q3XoNk4OQLsYTf2ZrYnDonAIigI5EX68UmxgOxwmSlv6VFW50uyTC6PVf0qEzrbjSEvDAaVA6GXa1dSdWlWmO+ha3G8NNL5H4DJ48eUCZEnRzuuVtxGl+By3WqX4xZZVtSFyCVUh7VFnXkT+XpYVp9tMw2yqtZymVt5Xg6hdEUQ7VDAN52o2QZcKx425BT3r+oecbdTXPEusJsMhlw7YqcW0zpwMgnnluCEItubHUtDjzfpOBRsdQ2x3fsgDuPubxrmXF43QjS/Q9o8RO0Mk7DPKt/7o7kyEUxYiflDl0stnfd7w== 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=fb79HyLOygNL+OjtOwJRMbjIKDAw4VDOddyG2gmBWCs=; b=QI5MeR6TOBkW416kFthymfCI4+7vZFBOqVYZ2pjMUcKYn1Zi0NQ4bBR3sITRtVRcwFOaKxlsMcN17HRsLMAFGso5bLT9XZ+tbRz73ZOhqhowpdVrVIuc0g6XieqCcWJ5oX99LwKmX1zzT2vMmf2UUtMLVAcznKphQ9/VlhE75Gk5EaYBg15/m9pZQLcUvqynhqYfDH2rxll2YmEV0jo20J1bgnUtvA2TqPEiIbnmSzBJ2BgHt1DBVX4TiChJbpU4sZWRVmJop4CBupA2lQNFh+18QZg+6rSj720e1vXKm/TSQH8d+7s0xjXbijIhxb7TqZBsPcBiy529EM5gjO76dw== 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=fb79HyLOygNL+OjtOwJRMbjIKDAw4VDOddyG2gmBWCs=; b=dcxIWwBw/6J9K0WcUU/haw66TYMIzWtX7zgyE4adNcvkTGG5xcw7AN3+fYDAVblqY1MZjNe+7kKNjaNvZxsV6UuwmwzoVHlNlUh2+z4+BRyI64xCb9x718zPTgjCqHjDcL3H20DegOnac+d08c9/GxcjnKFSTHktmf1+G7A1grQbnGdHy/Xdk+oRl1bb6/fZSlx1s7CgFNkotu+GXJGzhjIWaI93BkOQNPxb53hQGo3E3fM23YSsfszkXAKs3Y2UlK447v4hS3YISaVioc/mFCxj0KSqM9e2pUB3YGQ0AfJzDLK3HUiiM160eP+vqfhwHn+zfeLLkqeJlHblFFJNCQ== Received: from TYSPR06MB6433.apcprd06.prod.outlook.com (2603:1096:400:47a::6) by JH0PR06MB6294.apcprd06.prod.outlook.com (2603:1096:990:14::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7046.33; Tue, 5 Dec 2023 14:45:54 +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.7046.034; Tue, 5 Dec 2023 14:45:54 +0000 From: Nuo Mi To: ffmpeg-devel@ffmpeg.org Date: Tue, 5 Dec 2023 22:45:14 +0800 Message-ID: X-Mailer: git-send-email 2.25.1 In-Reply-To: <20231205144519.7334-1-nuomi2021@gmail.com> References: <20231205144519.7334-1-nuomi2021@gmail.com> X-TMN: [OYpb7G6Zrs1GmS5U1+/8+IA+FT9yUWYa] X-ClientProxiedBy: SG3P274CA0015.SGPP274.PROD.OUTLOOK.COM (2603:1096:4:be::27) To TYSPR06MB6433.apcprd06.prod.outlook.com (2603:1096:400:47a::6) X-Microsoft-Original-Message-ID: <20231205144519.7334-9-nuomi2021@gmail.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 2 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TYSPR06MB6433:EE_|JH0PR06MB6294:EE_ X-MS-Office365-Filtering-Correlation-Id: 4f26eab2-7021-4178-44a7-08dbf5a0e1f0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: i6mkuc2FKe8Wk4Hr/7dKpH+Ujt3f2MMuskRwY7/SCD5Bv5hSjkf5mJ1JqboX1s3JvqwTO8wEVoiIgHeiHOv/2+nDIs+7XPQgSn7TY602oOXrwlTWQxVjp2XGvQHJhTGIq3CCqyADYpR5oDLSdH+ygrPkNXl7UU7efChs/11dWvP74ey4DF6td39yPZXZZhJzrca65ACG1pq+jSeUeAoZIYOb/a05ivVmA/m3hUp6ZxTy3jz3fKYCiOcGZH9mz+eVlaXct8FsgVDJPv5LpajwPHaDnZDr7nD40pAN5nBh3iUJoZfHOjrzt0cCRyyA0QKDKIJ5kUL247R/AzHmIcQseZtpG//4FvHz2Qf5pyUWuAqVGnROpMWTdMQ9r47Ds/V+GIvbKtk5kz95jRr/nscNllX3yGgt5blYA8+oUAB4PCHs3VvJ1IgtbXRoU+lk3lL5bvCmxaRGgEAIP/6WK1GKfdStacaAPBF4qFJHZ6nznVAX5vng3h+wjRA0ZpJGfrpMpAwyI00ecPQ+Jvh6TzCfB7x8tvhAQlPO7DHBLm7NKYhkcV2tZE/0GGqyWAbRIZdr/P8DLPyT+dGNYLxLJrJEXagNmf+gA9AWOVIQgQmnDvS8JkplJ1HKu323HHwmos+9 X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?VTFRTTVQcSs3UjRFd0RSTFZVK3VXWUJtKy91NWsweXdxOTJ5S0liWkFublgy?= =?utf-8?B?bDkrazhNN0ZlWHd6Qy81QnZXUmF5MVpUNWFaUEYvUmhIcktwam4yeHE3cFlr?= =?utf-8?B?MGs1clZ3a3d4blc1eEtuc0FzR1JHY3VzK3lzd1VBVmdJTzdvK1EzMVZESUxt?= =?utf-8?B?S05Od2RYTnlyT2tnbUQyK2djNU14bGhMakdwZkZFcHF4YzJoZ1crdE5oenNZ?= =?utf-8?B?UlVYL0lTcUxTVHppZ3ZJeXdTdHgvK1dRdzNmTjFlOVNYMUV1eGhjeDZLOEwr?= =?utf-8?B?aTdqUzcwc05QUmlwcUNYSGVEbGtNQ0Yxb25YajNFK2Z4eE5rTSsvTzVka1RI?= =?utf-8?B?SVNCMnMwUDBQSTZkK0dRNDFObEFGa01jQXVBYXpiM0duL2dLNnVwbnB0ODJV?= =?utf-8?B?Tk9rMjJtZEdvcExJRFpuTlpGU0hvZTVjTHVVY3A4b3hSeDh2c3V1bFptcUZI?= =?utf-8?B?aGJaR3RtdVI4VlVFSGhseStMNmlWN3ZlbDhiejBXR3dNSmlIdDJ6VGE5STZP?= =?utf-8?B?dURUTm1GRHdIQWYvbWZmdktCMTV6UUNRZ3FIa1cyelJhSmloamJpNzE5bFdY?= =?utf-8?B?dm1XQmVOeHU4ZEJ3c0FHVlNaVm9qSnFtWUdHeEl2OFp4TTQ4d2IwNC9aSFJl?= =?utf-8?B?YmpsTDN1c2lrWUJiV3hPZ3poY0MzWHVyNFM4ekNNSHZwWENCcFRYcFprQnFt?= =?utf-8?B?N2JiQnpZUWJPelJPemVPSWVMNjhaNnNFM3ZzUDhBdGp2Uk05bmFhVnhYZk9M?= =?utf-8?B?cGVuWGUraGhvVEZqTVF3aHpDNHhnL1BxTzYxaFROdVhXMXRzTW41VUExMlF1?= =?utf-8?B?bXluNVA0NWNQUVpnQlRKaWxBQkJ4SndZa01XWkRjTTA4cFlzWGI1SUlqOTY1?= =?utf-8?B?K3VpL0txYXVweTdMVmxlbTBzSlRhSEd6cnNhaGxlbFRSL2VCempabmdPTm0w?= =?utf-8?B?di8xMWppTTQ4Z0w1ZnBDQVc0NGRFY1J2TkpXMng1aWJHSzVCZXZtR3ZnV0l0?= =?utf-8?B?T2IzR1RYMDJHT3QrVCtXOGRmenNYTUUvc3lOTHRwalVhWisvRndIUllTRUtX?= =?utf-8?B?UlVKR2EvNzZJRzJHd0pjbEZ5Z2RkM0dhYVZkTE5YSWJ4TEpScDJUK0NJUTg1?= =?utf-8?B?WVdMSzVhZUIvb1BZekRZZlNBRWFQcFlsSkxmQ3ZFUzQvQVVMeTc2TExkU0Vm?= =?utf-8?B?TU9RR0RqWTNCdFhtbzRLUU1sNWJETytHZ1dUZVBYdlJudTdLdDVGekQyVXZM?= =?utf-8?B?dFN1dlRSVytJK3hzNitFV3Z1eHVuQUUvUHZaVDExUlRBRUJnTmhOQVVSa2pl?= =?utf-8?B?aWhKNC9vZGVjTmpkMTJMQk5iM2tHNHIwMGJXMjVad3p0MDhiaU9nQlNkUXBT?= =?utf-8?B?ZHFnZmFaMFhPRDhNK0s4eENVS1FQYnJPRlpndFQ3V3B1RWE4RExSSkdpNTZN?= =?utf-8?B?aElyYmRHcXJVVlpSLzV3bzJqUThVY3dhb1MvR0NUSHZzR2xadUdWTDY0QTVZ?= =?utf-8?B?SUdiOENzL3FySjVJNmNmOHpwNzFYN3A0ZVlIZkRIQWY4aFQ1MlA2MkJCVkFY?= =?utf-8?B?VGVFUEJYR3EyVkkveW1yVk5ZTHh6b1QwL1E2amVVQmY1SzVXNW9taWFlRkw5?= =?utf-8?B?NXU4NGE1Nk9hejNDb3NpekIrbkEvY3FVa1NYTDFtSUFwenVEK2Yzc3h0YWZp?= =?utf-8?Q?eLsw1NPxY0OZwuL4cX23?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4f26eab2-7021-4178-44a7-08dbf5a0e1f0 X-MS-Exchange-CrossTenant-AuthSource: TYSPR06MB6433.apcprd06.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Dec 2023 14:45:54.0079 (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: JH0PR06MB6294 Subject: [FFmpeg-devel] [PATCH v6 09/14] vvcdec: add intra prediction 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: LS0tCiBsaWJhdmNvZGVjL3Z2Yy9NYWtlZmlsZSAgICAgICAgICAgICB8ICAgIDEgKwogbGliYXZj b2RlYy92dmMvdnZjX2N0dS5jICAgICAgICAgICAgfCAgIDUwICsrCiBsaWJhdmNvZGVjL3Z2Yy92 dmNfY3R1LmggICAgICAgICAgICB8ICAgIDIgKwogbGliYXZjb2RlYy92dmMvdnZjX2ludHJhLmMg ICAgICAgICAgfCAgNzY5ICsrKysrKysrKysrKysrKysrKysrCiBsaWJhdmNvZGVjL3Z2Yy92dmNf aW50cmEuaCAgICAgICAgICB8ICAgNDkgKysKIGxpYmF2Y29kZWMvdnZjL3Z2Y19pbnRyYV90ZW1w bGF0ZS5jIHwgMTAxNSArKysrKysrKysrKysrKysrKysrKysrKysrKysKIDYgZmlsZXMgY2hhbmdl ZCwgMTg4NiBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliYXZjb2RlYy92dmMv dnZjX2ludHJhLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdmNvZGVjL3Z2Yy92dmNfaW50cmEu aAogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Y29kZWMvdnZjL3Z2Y19pbnRyYV90ZW1wbGF0ZS5j CgpkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy92dmMvTWFrZWZpbGUgYi9saWJhdmNvZGVjL3Z2Yy9N YWtlZmlsZQppbmRleCA1Nzk2ZjlhZDQyLi4zYjFhYzcyMDI5IDEwMDY0NAotLS0gYS9saWJhdmNv ZGVjL3Z2Yy9NYWtlZmlsZQorKysgYi9saWJhdmNvZGVjL3Z2Yy9NYWtlZmlsZQpAQCAtNiw2ICs2 LDcgQEAgT0JKUy0kKENPTkZJR19WVkNfREVDT0RFUikgICAgICAgICAgKz0gIHZ2Yy92dmNkZWMu byAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2 dmMvdnZjX2N0dS5vICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdnZjL3Z2Y19kYXRhLm8gICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHZ2Yy92dmNfaW50ZXIubyAgICAgICAgIFwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2dmMvdnZjX2ludHJhLm8gICAgICAgICBcCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnZjL3Z2Y19pdHhfMWQubyAg ICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZ2Yy92dmNf bXZzLm8gICAgICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB2dmMvdnZjX3BzLm8gICAgICAgICAgICBcCmRpZmYgLS1naXQgYS9saWJhdmNvZGVjL3Z2Yy92 dmNfY3R1LmMgYi9saWJhdmNvZGVjL3Z2Yy92dmNfY3R1LmMKaW5kZXggM2QzMWI4NjJhZS4uNjEz OGQyZmM5ZiAxMDA2NDQKLS0tIGEvbGliYXZjb2RlYy92dmMvdnZjX2N0dS5jCisrKyBiL2xpYmF2 Y29kZWMvdnZjL3Z2Y19jdHUuYwpAQCAtMjAsMTAgKzIwLDQxIEBACiAgKiBGb3VuZGF0aW9uLCBJ bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEz MDEgVVNBCiAgKi8KIAorI2luY2x1ZGUgImxpYmF2Y29kZWMvcmVmc3RydWN0LmgiCisKICNpbmNs dWRlICJ2dmNfY2FiYWMuaCIKICNpbmNsdWRlICJ2dmNfY3R1LmgiCiAjaW5jbHVkZSAidnZjX212 cy5oIgogCit2b2lkIGZmX3Z2Y19kZWNvZGVfbmVpZ2hib3VyKFZWQ0xvY2FsQ29udGV4dCAqbGMs IGNvbnN0IGludCB4X2N0YiwgY29uc3QgaW50IHlfY3RiLAorICAgIGNvbnN0IGludCByeCwgY29u c3QgaW50IHJ5LCBjb25zdCBpbnQgcnMpCit7CisgICAgVlZDRnJhbWVDb250ZXh0ICpmYyA9IGxj LT5mYzsKKyAgICBjb25zdCBpbnQgY3RiX3NpemUgICAgICAgICA9IGZjLT5wcy5zcHMtPmN0Yl9z aXplX3k7CisKKyAgICBsYy0+ZW5kX29mX3RpbGVzX3ggPSBmYy0+cHMuc3BzLT53aWR0aDsKKyAg ICBsYy0+ZW5kX29mX3RpbGVzX3kgPSBmYy0+cHMuc3BzLT5oZWlnaHQ7CisgICAgaWYgKGZjLT5w cy5wcHMtPmN0Yl90b19jb2xfYmRbcnhdICE9IGZjLT5wcy5wcHMtPmN0Yl90b19jb2xfYmRbcngg KyAxXSkKKyAgICAgICAgbGMtPmVuZF9vZl90aWxlc194ID0gRkZNSU4oeF9jdGIgKyBjdGJfc2l6 ZSwgbGMtPmVuZF9vZl90aWxlc194KTsKKyAgICBpZiAoZmMtPnBzLnBwcy0+Y3RiX3RvX3Jvd19i ZFtyeV0gIT0gZmMtPnBzLnBwcy0+Y3RiX3RvX3Jvd19iZFtyeSArIDFdKQorICAgICAgICBsYy0+ ZW5kX29mX3RpbGVzX3kgPSBGRk1JTih5X2N0YiArIGN0Yl9zaXplLCBsYy0+ZW5kX29mX3RpbGVz X3kpOworCisgICAgbGMtPmJvdW5kYXJ5X2ZsYWdzID0gMDsKKyAgICBpZiAocnggPiAwICYmIGZj LT5wcy5wcHMtPmN0Yl90b19jb2xfYmRbcnhdICE9IGZjLT5wcy5wcHMtPmN0Yl90b19jb2xfYmRb cnggLSAxXSkKKyAgICAgICAgbGMtPmJvdW5kYXJ5X2ZsYWdzIHw9IEJPVU5EQVJZX0xFRlRfVElM RTsKKyAgICBpZiAocnggPiAwICYmIGZjLT50YWIuc2xpY2VfaWR4W3JzXSAhPSBmYy0+dGFiLnNs aWNlX2lkeFtycyAtIDFdKQorICAgICAgICBsYy0+Ym91bmRhcnlfZmxhZ3MgfD0gQk9VTkRBUllf TEVGVF9TTElDRTsKKyAgICBpZiAocnkgPiAwICYmIGZjLT5wcy5wcHMtPmN0Yl90b19yb3dfYmRb cnldICE9IGZjLT5wcy5wcHMtPmN0Yl90b19yb3dfYmRbcnkgLSAxXSkKKyAgICAgICAgbGMtPmJv dW5kYXJ5X2ZsYWdzIHw9IEJPVU5EQVJZX1VQUEVSX1RJTEU7CisgICAgaWYgKHJ5ID4gMCAmJiBm Yy0+dGFiLnNsaWNlX2lkeFtyc10gIT0gZmMtPnRhYi5zbGljZV9pZHhbcnMgLSBmYy0+cHMucHBz LT5jdGJfd2lkdGhdKQorICAgICAgICBsYy0+Ym91bmRhcnlfZmxhZ3MgfD0gQk9VTkRBUllfVVBQ RVJfU0xJQ0U7CisgICAgbGMtPmN0Yl9sZWZ0X2ZsYWcgPSByeCA+IDAgJiYgIShsYy0+Ym91bmRh cnlfZmxhZ3MgJiBCT1VOREFSWV9MRUZUX1RJTEUpOworICAgIGxjLT5jdGJfdXBfZmxhZyAgID0g cnkgPiAwICYmICEobGMtPmJvdW5kYXJ5X2ZsYWdzICYgQk9VTkRBUllfVVBQRVJfVElMRSkgJiYg IShsYy0+Ym91bmRhcnlfZmxhZ3MgJiBCT1VOREFSWV9VUFBFUl9TTElDRSk7CisgICAgbGMtPmN0 Yl91cF9yaWdodF9mbGFnID0gbGMtPmN0Yl91cF9mbGFnICYmIChmYy0+cHMucHBzLT5jdGJfdG9f Y29sX2JkW3J4XSA9PSBmYy0+cHMucHBzLT5jdGJfdG9fY29sX2JkW3J4ICsgMV0pICYmCisgICAg ICAgIChmYy0+cHMucHBzLT5jdGJfdG9fcm93X2JkW3J5XSA9PSBmYy0+cHMucHBzLT5jdGJfdG9f cm93X2JkW3J5IC0gMV0pOworICAgIGxjLT5jdGJfdXBfbGVmdF9mbGFnID0gbGMtPmN0Yl9sZWZ0 X2ZsYWcgJiYgbGMtPmN0Yl91cF9mbGFnOworfQorCiB2b2lkIGZmX3Z2Y19zZXRfbmVpZ2hib3Vy X2F2YWlsYWJsZShWVkNMb2NhbENvbnRleHQgKmxjLAogICAgIGNvbnN0IGludCB4MCwgY29uc3Qg aW50IHkwLCBjb25zdCBpbnQgdywgY29uc3QgaW50IGgpCiB7CkBAIC0zOSw2ICs3MCwyNSBAQCB2 b2lkIGZmX3Z2Y19zZXRfbmVpZ2hib3VyX2F2YWlsYWJsZShWVkNMb2NhbENvbnRleHQgKmxjLAog ICAgIGxjLT5uYS5jYW5kX3VwX3JpZ2h0ID0gbGMtPm5hLmNhbmRfdXBfcmlnaHRfc2FwICYmICh4 MCArIHcpIDwgbGMtPmVuZF9vZl90aWxlc194OwogfQogCit2b2lkIGZmX3Z2Y19jdHVfZnJlZV9j dXMoQ1RVICpjdHUpCit7CisgICAgQ29kaW5nVW5pdCAqKmN1cyAgPSAmY3R1LT5jdXM7CisgICAg d2hpbGUgKCpjdXMpIHsKKyAgICAgICAgQ29kaW5nVW5pdCAqY3UgICAgICAgICAgPSAqY3VzOwor ICAgICAgICBUcmFuc2Zvcm1Vbml0ICoqaGVhZCAgICA9ICZjdS0+dHVzLmhlYWQ7CisKKyAgICAg ICAgKmN1cyA9IGN1LT5uZXh0OworCisgICAgICAgIHdoaWxlICgqaGVhZCkgeworICAgICAgICAg ICAgVHJhbnNmb3JtVW5pdCAqdHUgPSAqaGVhZDsKKyAgICAgICAgICAgICpoZWFkID0gdHUtPm5l eHQ7CisgICAgICAgICAgICBmZl9yZWZzdHJ1Y3RfdW5yZWYoJnR1KTsKKyAgICAgICAgfQorICAg ICAgICBjdS0+dHVzLnRhaWwgPSBOVUxMOworCisgICAgICAgIGZmX3JlZnN0cnVjdF91bnJlZigm Y3UpOworICAgIH0KK30KIAogdm9pZCBmZl92dmNfZXBfaW5pdF9zdGF0X2NvZWZmKEVudHJ5UG9p bnQgKmVwLAogCWNvbnN0IGludCBiaXRfZGVwdGgsIGNvbnN0IGludCBwZXJzaXN0ZW50X3JpY2Vf YWRhcHRhdGlvbl9lbmFibGVkX2ZsYWcpCmRpZmYgLS1naXQgYS9saWJhdmNvZGVjL3Z2Yy92dmNf Y3R1LmggYi9saWJhdmNvZGVjL3Z2Yy92dmNfY3R1LmgKaW5kZXggODI4MDFiNTU4ZS4uNTc3MTM2 YjJlMiAxMDA2NDQKLS0tIGEvbGliYXZjb2RlYy92dmMvdnZjX2N0dS5oCisrKyBiL2xpYmF2Y29k ZWMvdnZjL3Z2Y19jdHUuaApAQCAtNDYwLDYgKzQ2MCw4IEBAIHR5cGVkZWYgc3RydWN0IEFMRlBh cmFtcyB7CiAKIC8vdXRpbHMKIHZvaWQgZmZfdnZjX3NldF9uZWlnaGJvdXJfYXZhaWxhYmxlKFZW Q0xvY2FsQ29udGV4dCAqbGMsIGludCB4MCwgaW50IHkwLCBpbnQgdywgaW50IGgpOwordm9pZCBm Zl92dmNfZGVjb2RlX25laWdoYm91cihWVkNMb2NhbENvbnRleHQgKmxjLCBpbnQgeF9jdGIsIGlu dCB5X2N0YiwgaW50IHJ4LCBpbnQgcnksIGludCBycyk7Cit2b2lkIGZmX3Z2Y19jdHVfZnJlZV9j dXMoQ1RVICpjdHUpOwogdm9pZCBmZl92dmNfZXBfaW5pdF9zdGF0X2NvZWZmKEVudHJ5UG9pbnQg KmVwLCBpbnQgYml0X2RlcHRoLCBpbnQgcGVyc2lzdGVudF9yaWNlX2FkYXB0YXRpb25fZW5hYmxl ZF9mbGFnKTsKIAogI2VuZGlmIC8vIEFWQ09ERUNfVlZDX1ZWQ19DVFVfSApkaWZmIC0tZ2l0IGEv bGliYXZjb2RlYy92dmMvdnZjX2ludHJhLmMgYi9saWJhdmNvZGVjL3Z2Yy92dmNfaW50cmEuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi43ODFmMDRmNDE5Ci0tLSAvZGV2 L251bGwKKysrIGIvbGliYXZjb2RlYy92dmMvdnZjX2ludHJhLmMKQEAgLTAsMCArMSw3NjkgQEAK Ky8qCisgKiBWVkMgaW50cmEgcHJlZGljdGlvbgorICoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBO dW8gTWkKKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisgKgorICogRkZtcGVn IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg ZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg UHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRo ZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs IEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgKi8KKyNpbmNsdWRlICJs aWJhdnV0aWwvZnJhbWUuaCIKKworI2luY2x1ZGUgInZ2Y19kYXRhLmgiCisjaW5jbHVkZSAidnZj X2ludGVyLmgiCisjaW5jbHVkZSAidnZjX2ludHJhLmgiCisjaW5jbHVkZSAidnZjX2l0eF8xZC5o IgorCitzdGF0aWMgaW50IGlzX2NjbG0oZW51bSBJbnRyYVByZWRNb2RlIG1vZGUpCit7CisgICAg cmV0dXJuIG1vZGUgPT0gSU5UUkFfTFRfQ0NMTSB8fCBtb2RlID09IElOVFJBX0xfQ0NMTSB8fCBt b2RlID09IElOVFJBX1RfQ0NMTTsKK30KKworc3RhdGljIGludCBkZXJpdmVfaWxmbnN0X3ByZWRf bW9kZV9pbnRyYShjb25zdCBWVkNMb2NhbENvbnRleHQgKmxjLCBjb25zdCBUcmFuc2Zvcm1CbG9j ayAqdGIpCit7CisgICAgY29uc3QgVlZDRnJhbWVDb250ZXh0ICpmYyA9IGxjLT5mYzsKKyAgICBj b25zdCBWVkNTUFMgKnNwcyA9IGZjLT5wcy5zcHM7CisgICAgY29uc3QgQ29kaW5nVW5pdCAqY3Ug ICAgICAgICAgPSBsYy0+Y3U7CisgICAgY29uc3QgaW50IHhfdGIgICAgICAgICAgICAgICAgPSB0 Yi0+eDAgPj4gZmMtPnBzLnNwcy0+bWluX2NiX2xvZzJfc2l6ZV95OworICAgIGNvbnN0IGludCB5 X3RiICAgICAgICAgICAgICAgID0gdGItPnkwID4+IGZjLT5wcy5zcHMtPm1pbl9jYl9sb2cyX3Np emVfeTsKKyAgICBjb25zdCBpbnQgeF9jICAgICAgICAgICAgICAgICA9ICh0Yi0+eDAgKyAodGIt PnRiX3dpZHRoIDw8IHNwcy0+aHNoaWZ0WzFdID4+IDEpICkgPj4gZmMtPnBzLnNwcy0+bWluX2Ni X2xvZzJfc2l6ZV95OworICAgIGNvbnN0IGludCB5X2MgICAgICAgICAgICAgICAgID0gKHRiLT55 MCArICh0Yi0+dGJfaGVpZ2h0IDw8IHNwcy0+dnNoaWZ0WzFdID4+IDEpKSA+PiBmYy0+cHMuc3Bz LT5taW5fY2JfbG9nMl9zaXplX3k7CisgICAgY29uc3QgaW50IG1pbl9jYl93aWR0aCAgICAgICAg PSBmYy0+cHMucHBzLT5taW5fY2Jfd2lkdGg7CisgICAgY29uc3QgaW50IGludHJhX21pcF9mbGFn ICAgICAgPSBTQU1QTEVfQ1RCKGZjLT50YWIuaW1mLCB4X3RiLCB5X3RiKTsKKyAgICBpbnQgcHJl ZF9tb2RlX2ludHJhID0gdGItPmNfaWR4ID09IDAgPyBjdS0+aW50cmFfcHJlZF9tb2RlX3kgOiBj dS0+aW50cmFfcHJlZF9tb2RlX2M7CisgICAgaWYgKGludHJhX21pcF9mbGFnICYmICF0Yi0+Y19p ZHgpIHsKKyAgICAgICAgcHJlZF9tb2RlX2ludHJhID0gSU5UUkFfUExBTkFSOworICAgIH0gZWxz ZSBpZiAoaXNfY2NsbShwcmVkX21vZGVfaW50cmEpKSB7CisgICAgICAgIGludCBpbnRyYV9taXBf ZmxhZ19jID0gU0FNUExFX0NUQihmYy0+dGFiLmltZiwgeF9jLCB5X2MpOworICAgICAgICBpbnQg Y3VfcHJlZF9tb2RlID0gU0FNUExFX0NUQihmYy0+dGFiLmNwbVswXSwgeF9jLCB5X2MpOworICAg ICAgICBpZiAoaW50cmFfbWlwX2ZsYWdfYykgeworICAgICAgICAgICAgcHJlZF9tb2RlX2ludHJh ID0gSU5UUkFfUExBTkFSOworICAgICAgICB9IGVsc2UgaWYgKGN1X3ByZWRfbW9kZSA9PSBNT0RF X0lCQyB8fCBjdV9wcmVkX21vZGUgPT0gTU9ERV9QTFQpIHsKKyAgICAgICAgICAgIHByZWRfbW9k ZV9pbnRyYSA9IElOVFJBX0RDOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcHJlZF9t b2RlX2ludHJhID0gU0FNUExFX0NUQihmYy0+dGFiLmlwbSwgeF9jLCB5X2MpOworICAgICAgICB9 CisgICAgfQorICAgIHByZWRfbW9kZV9pbnRyYSA9IGZmX3Z2Y193aWRlX2FuZ2xlX21vZGVfbWFw cGluZyhjdSwgdGItPnRiX3dpZHRoLCB0Yi0+dGJfaGVpZ2h0LCB0Yi0+Y19pZHgsIHByZWRfbW9k ZV9pbnRyYSk7CisKKyAgICByZXR1cm4gcHJlZF9tb2RlX2ludHJhOworfQorCisvLzguNy40IFRy YW5zZm9ybWF0aW9uIHByb2Nlc3MgZm9yIHNjYWxlZCB0cmFuc2Zvcm0gY29lZmZpY2llbnRzCitz dGF0aWMgdm9pZCBpbGZuc3RfdHJhbnNmb3JtKGNvbnN0IFZWQ0xvY2FsQ29udGV4dCAqbGMsIFRy YW5zZm9ybUJsb2NrICp0YikKK3sKKyAgICBjb25zdCBWVkNTUFMgKnNwcyAgICAgICAgICAgPSBs Yy0+ZmMtPnBzLnNwczsKKyAgICBjb25zdCBDb2RpbmdVbml0ICpjdSAgICAgICAgPSBsYy0+Y3U7 CisgICAgY29uc3QgaW50IHcgICAgICAgICAgICAgICAgID0gdGItPnRiX3dpZHRoOworICAgIGNv bnN0IGludCBoICAgICAgICAgICAgICAgICA9IHRiLT50Yl9oZWlnaHQ7CisgICAgY29uc3QgaW50 IG5fbGZuc3Rfb3V0X3NpemUgID0gKHcgPj0gOCAmJiBoID49IDgpID8gNDggOiAxNjsgICAgICAg ICAgICAgICAgICAgICAgICAgLy8vPCBuTGZuc3RPdXRTaXplCisgICAgY29uc3QgaW50IGxvZzJf bGZuc3Rfc2l6ZSAgID0gKHcgPj0gOCAmJiBoID49IDgpID8gMyA6IDI7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgLy8vPCBsb2cyTGZuc3RTaXplCisgICAgY29uc3QgaW50IG5fbGZuc3Rfc2l6 ZSAgICAgID0gMSA8PCBsb2cyX2xmbnN0X3NpemU7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLy8vPCBuTGZuc3RTaXplCisgICAgY29uc3QgaW50IG5vbl96ZXJvX3NpemUgICAgID0g KCh3ID09IDggJiYgaCA9PSA4KSB8fCAodyA9PSA0ICYmIGggPT0gNCkpID8gOCA6IDE2OyAgLy8v PCBub25aZXJvU2l6ZQorICAgIGNvbnN0IGludCBwcmVkX21vZGVfaW50cmEgICA9IGRlcml2ZV9p bGZuc3RfcHJlZF9tb2RlX2ludHJhKGxjLCB0Yik7CisgICAgY29uc3QgaW50IHRyYW5zcG9zZSAg ICAgICAgID0gcHJlZF9tb2RlX2ludHJhID4gMzQ7CisgICAgaW50IHVbMTZdLCB2WzQ4XTsKKwor ICAgIGZvciAoaW50IHggPSAwOyB4IDwgbm9uX3plcm9fc2l6ZTsgeCsrKSB7CisgICAgICAgIGlu dCB4YyA9IGZmX3Z2Y19kaWFnX3NjYW5feFsyXVsyXVt4XTsKKyAgICAgICAgaW50IHljID0gZmZf dnZjX2RpYWdfc2Nhbl95WzJdWzJdW3hdOworICAgICAgICB1W3hdID0gdGItPmNvZWZmc1t3ICog eWMgKyB4Y107CisgICAgfQorICAgIGZmX3Z2Y19pbnZfbGZuc3RfMWQodiwgdSwgbm9uX3plcm9f c2l6ZSwgbl9sZm5zdF9vdXRfc2l6ZSwgcHJlZF9tb2RlX2ludHJhLAorICAgICAgICAgICAgICAg ICAgICAgICAgY3UtPmxmbnN0X2lkeCwgc3BzLT5sb2cyX3RyYW5zZm9ybV9yYW5nZSk7CisgICAg aWYgKHRyYW5zcG9zZSkgeworICAgICAgICBpbnQgKmRzdCA9IHRiLT5jb2VmZnM7CisgICAgICAg IGNvbnN0IGludCAqc3JjID0gdjsKKyAgICAgICAgaWYgKG5fbGZuc3Rfc2l6ZSA9PSA0KSB7Cisg ICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IDQ7IHkrKykgeworICAgICAgICAgICAgICAg IGRzdFswXSA9IHNyY1swXTsKKyAgICAgICAgICAgICAgICBkc3RbMV0gPSBzcmNbNF07CisgICAg ICAgICAgICAgICAgZHN0WzJdID0gc3JjWzhdOworICAgICAgICAgICAgICAgIGRzdFszXSA9IHNy Y1sxMl07CisgICAgICAgICAgICAgICAgc3JjKys7CisgICAgICAgICAgICAgICAgZHN0ICs9IHc7 CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmb3IgKGludCB5 ID0gMDsgeSA8IDg7IHkrKykgeworICAgICAgICAgICAgICAgIGRzdFswXSA9IHNyY1swXTsKKyAg ICAgICAgICAgICAgICBkc3RbMV0gPSBzcmNbOF07CisgICAgICAgICAgICAgICAgZHN0WzJdID0g c3JjWzE2XTsKKyAgICAgICAgICAgICAgICBkc3RbM10gPSBzcmNbMjRdOworICAgICAgICAgICAg ICAgIGlmICh5IDwgNCkgeworICAgICAgICAgICAgICAgICAgICBkc3RbNF0gPSBzcmNbMzJdOwor ICAgICAgICAgICAgICAgICAgICBkc3RbNV0gPSBzcmNbMzZdOworICAgICAgICAgICAgICAgICAg ICBkc3RbNl0gPSBzcmNbNDBdOworICAgICAgICAgICAgICAgICAgICBkc3RbN10gPSBzcmNbNDRd OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzcmMrKzsKKyAgICAgICAgICAg ICAgICBkc3QgKz0gdzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgfSBlbHNlIHsK KyAgICAgICAgaW50ICpkc3QgPSB0Yi0+Y29lZmZzOworICAgICAgICBjb25zdCBpbnQgKnNyYyA9 IHY7CisgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbl9sZm5zdF9zaXplOyB5KyspIHsKKyAg ICAgICAgICAgIGludCBzaXplID0gKHkgPCA0KSA/IG5fbGZuc3Rfc2l6ZSA6IDQ7CisgICAgICAg ICAgICBtZW1jcHkoZHN0LCBzcmMsIHNpemUgKiBzaXplb2YoaW50KSk7CisgICAgICAgICAgICBz cmMgKz0gc2l6ZTsKKyAgICAgICAgICAgIGRzdCArPSB3OworICAgICAgICB9CisgICAgfQorICAg IHRiLT5tYXhfc2Nhbl94ID0gbl9sZm5zdF9zaXplIC0gMTsKKyAgICB0Yi0+bWF4X3NjYW5feSA9 IG5fbGZuc3Rfc2l6ZSAtIDE7Cit9CisKKy8vcGFydCBvZiA4LjcuNCBUcmFuc2Zvcm1hdGlvbiBw cm9jZXNzIGZvciBzY2FsZWQgdHJhbnNmb3JtIGNvZWZmaWNpZW50cworc3RhdGljIHZvaWQgZGVy aXZlX3RyYW5zZm9ybV90eXBlKGNvbnN0IFZWQ0ZyYW1lQ29udGV4dCAqZmMsIGNvbnN0IFZWQ0xv Y2FsQ29udGV4dCAqbGMsIGNvbnN0IFRyYW5zZm9ybUJsb2NrICp0YiwgZW51bSBUeFR5cGUgKnRy aCwgZW51bSBUeFR5cGUgKnRydikKK3sKKyAgICBjb25zdCBDb2RpbmdVbml0ICpjdSA9IGxjLT5j dTsKKyAgICBzdGF0aWMgY29uc3QgZW51bSBUeFR5cGUgbXRzX3RvX3RyaFtdID0ge0RDVDIsIERT VDcsIERDVDgsIERTVDcsIERDVDh9OworICAgIHN0YXRpYyBjb25zdCBlbnVtIFR4VHlwZSBtdHNf dG9fdHJ2W10gPSB7RENUMiwgRFNUNywgRFNUNywgRENUOCwgRENUOH07CisgICAgY29uc3QgVlZD U1BTICpzcHMgICAgICAgPSBmYy0+cHMuc3BzOworICAgIGludCBpbXBsaWNpdF9tdHNfZW5hYmxl ZCA9IDA7CisgICAgaWYgKHRiLT5jX2lkeCB8fCAoY3UtPmlzcF9zcGxpdF90eXBlICE9IElTUF9O T19TUExJVCAmJiBjdS0+bGZuc3RfaWR4KSkgeworICAgICAgICAqdHJoID0gKnRydiA9IERDVDI7 CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoc3BzLT5yLT5zcHNfbXRzX2VuYWJs ZWRfZmxhZykgeworICAgICAgICBpZiAoY3UtPmlzcF9zcGxpdF90eXBlICE9IElTUF9OT19TUExJ VCB8fAorICAgICAgICAgICAgKGN1LT5zYnRfZmxhZyAmJiBGRk1BWCh0Yi0+dGJfd2lkdGgsIHRi LT50Yl9oZWlnaHQpIDw9IDMyKSB8fAorICAgICAgICAgICAgKCFzcHMtPnItPnNwc19leHBsaWNp dF9tdHNfaW50cmFfZW5hYmxlZF9mbGFnICYmIGN1LT5wcmVkX21vZGUgPT0gTU9ERV9JTlRSQSAm JgorICAgICAgICAgICAgIWN1LT5sZm5zdF9pZHggJiYgIWN1LT5pbnRyYV9taXBfZmxhZykpIHsK KyAgICAgICAgICAgIGltcGxpY2l0X210c19lbmFibGVkID0gMTsKKyAgICAgICAgfQorICAgIH0K KyAgICBpZiAoaW1wbGljaXRfbXRzX2VuYWJsZWQpIHsKKyAgICAgICAgY29uc3QgaW50IHcgPSB0 Yi0+dGJfd2lkdGg7CisgICAgICAgIGNvbnN0IGludCBoID0gdGItPnRiX2hlaWdodDsKKyAgICAg ICAgaWYgKGN1LT5zYnRfZmxhZykgeworICAgICAgICAgICAgKnRyaCA9IChjdS0+c2J0X2hvcml6 b250YWxfZmxhZyAgfHwgY3UtPnNidF9wb3NfZmxhZykgPyBEU1Q3IDogRENUODsKKyAgICAgICAg ICAgICp0cnYgPSAoIWN1LT5zYnRfaG9yaXpvbnRhbF9mbGFnIHx8IGN1LT5zYnRfcG9zX2ZsYWcp ID8gRFNUNyA6IERDVDg7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAqdHJoID0gKHcg Pj0gNCAmJiB3IDw9IDE2KSA/IERTVDcgOiBEQ1QyOworICAgICAgICAgICAgKnRydiA9IChoID49 IDQgJiYgaCA8PSAxNikgPyBEU1Q3IDogRENUMjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47 CisgICAgfQorICAgICp0cmggPSBtdHNfdG9fdHJoW2N1LT5tdHNfaWR4XTsKKyAgICAqdHJ2ID0g bXRzX3RvX3RydltjdS0+bXRzX2lkeF07Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9yZXNpZHVhbF9m b3Jfam9pbnRfY29kaW5nX2Nocm9tYShWVkNMb2NhbENvbnRleHQgKmxjLAorICAgIGNvbnN0IFRy YW5zZm9ybVVuaXQgKnR1LCBUcmFuc2Zvcm1CbG9jayAqdGIsIGNvbnN0IGludCBjaHJvbWFfc2Nh bGUpCit7CisgICAgY29uc3QgVlZDRnJhbWVDb250ZXh0ICpmYyAgPSBsYy0+ZmM7CisgICAgY29u c3QgQ29kaW5nVW5pdCAqY3UgPSBsYy0+Y3U7CisgICAgY29uc3QgaW50IGNfc2lnbiA9IDEgLSAy ICogZmMtPnBzLnBoLnItPnBoX2pvaW50X2NiY3Jfc2lnbl9mbGFnOworICAgIGNvbnN0IGludCBz aGlmdCAgPSB0dS0+Y29kZWRfZmxhZ1sxXSBeIHR1LT5jb2RlZF9mbGFnWzJdOworICAgIGNvbnN0 IGludCBjX2lkeCAgPSAxICsgdHUtPmNvZGVkX2ZsYWdbMV07CisgICAgY29uc3QgcHRyZGlmZl90 IHN0cmlkZSA9IGZjLT5mcmFtZS0+bGluZXNpemVbY19pZHhdOworICAgIGNvbnN0IGludCBocyA9 IGZjLT5wcy5zcHMtPmhzaGlmdFtjX2lkeF07CisgICAgY29uc3QgaW50IHZzID0gZmMtPnBzLnNw cy0+dnNoaWZ0W2NfaWR4XTsKKyAgICB1aW50OF90ICpkc3QgPSAmZmMtPmZyYW1lLT5kYXRhW2Nf aWR4XVsodGItPnkwID4+IHZzKSAqIHN0cmlkZSArCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoKHRiLT54MCA+PiBocykgPDwgZmMtPnBzLnNwcy0+cGl4ZWxfc2hp ZnQpXTsKKyAgICBpZiAoY2hyb21hX3NjYWxlKSB7CisgICAgICAgIGZjLT52dmNkc3AuaXR4LnBy ZWRfcmVzaWR1YWxfam9pbnQodGItPmNvZWZmcywgdGItPnRiX3dpZHRoLCB0Yi0+dGJfaGVpZ2h0 LCBjX3NpZ24sIHNoaWZ0KTsKKyAgICAgICAgZmMtPnZ2Y2RzcC5pbnRyYS5sbWNzX3NjYWxlX2No cm9tYShsYywgdGItPmNvZWZmcywgdGItPmNvZWZmcywgdGItPnRiX3dpZHRoLCB0Yi0+dGJfaGVp Z2h0LCBjdS0+eDAsIGN1LT55MCk7CisgICAgICAgIGZjLT52dmNkc3AuaXR4LmFkZF9yZXNpZHVh bChkc3QsIHRiLT5jb2VmZnMsIHRiLT50Yl93aWR0aCwgdGItPnRiX2hlaWdodCwgc3RyaWRlKTsK KyAgICB9IGVsc2UgeworICAgICAgICBmYy0+dnZjZHNwLml0eC5hZGRfcmVzaWR1YWxfam9pbnQo ZHN0LCB0Yi0+Y29lZmZzLCB0Yi0+dGJfd2lkdGgsIHRiLT50Yl9oZWlnaHQsIHN0cmlkZSwgY19z aWduLCBzaGlmdCk7CisgICAgfQorfQorCitzdGF0aWMgaW50IGFkZF9yZWNvbnN0cnVjdGVkX2Fy ZWEoVlZDTG9jYWxDb250ZXh0ICpsYywgY29uc3QgaW50IGNoX3R5cGUsIGNvbnN0IGludCB4MCwg Y29uc3QgaW50IHkwLCBjb25zdCBpbnQgdywgY29uc3QgaW50IGgpCit7CisgICAgY29uc3QgVlZD U1BTICpzcHMgICAgICAgPSBsYy0+ZmMtPnBzLnNwczsKKyAgICBjb25zdCBpbnQgaHMgPSBzcHMt PmhzaGlmdFtjaF90eXBlXTsKKyAgICBjb25zdCBpbnQgdnMgPSBzcHMtPnZzaGlmdFtjaF90eXBl XTsKKyAgICBSZWNvbnN0cnVjdGVkQXJlYSAqYTsKKworICAgIGlmIChsYy0+bnVtX3Jhc1tjaF90 eXBlXSA+PSBGRl9BUlJBWV9FTEVNUyhsYy0+cmFzW2NoX3R5cGVdKSkKKyAgICAgICAgcmV0dXJu IEFWRVJST1JfSU5WQUxJRERBVEE7CisKKyAgICBhID0gJmxjLT5yYXNbY2hfdHlwZV1bbGMtPm51 bV9yYXNbY2hfdHlwZV1dOworICAgIGEtPnggPSB4MCA+PiBoczsKKyAgICBhLT55ID0geTAgPj4g dnM7CisgICAgYS0+dyA9IHcgPj4gaHM7CisgICAgYS0+aCA9IGggPj4gdnM7CisgICAgbGMtPm51 bV9yYXNbY2hfdHlwZV0rKzsKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBhZGRf dHVfYXJlYShjb25zdCBUcmFuc2Zvcm1Vbml0ICp0dSwgaW50ICp4MCwgaW50ICp5MCwgaW50ICp3 LCBpbnQgKmgpCit7CisgICAgKngwID0gdHUtPngwOworICAgICp5MCA9IHR1LT55MDsKKyAgICAq dyA9IHR1LT53aWR0aDsKKyAgICAqaCA9IHR1LT5oZWlnaHQ7Cit9CisKKyNkZWZpbmUgTUlOX0lT UF9QUkVEX1dJRFRIIDQKK3N0YXRpYyBpbnQgZ2V0X2x1bWFfcHJlZGljdF91bml0KGNvbnN0IENv ZGluZ1VuaXQgKmN1LCBjb25zdCBUcmFuc2Zvcm1Vbml0ICp0dSwgY29uc3QgaW50IGlkeCwgaW50 ICp4MCwgaW50ICp5MCwgaW50ICp3LCBpbnQgKmgpCit7CisgICAgaW50IGhhc19sdW1hID0gMTsK KyAgICBhZGRfdHVfYXJlYSh0dSwgeDAsIHkwLCB3LCBoKTsKKyAgICBpZiAoY3UtPmlzcF9zcGxp dF90eXBlID09IElTUF9WRVJfU1BMSVQgJiYgdHUtPndpZHRoIDwgTUlOX0lTUF9QUkVEX1dJRFRI KSB7CisgICAgICAgICp3ID0gTUlOX0lTUF9QUkVEX1dJRFRIOworICAgICAgICBoYXNfbHVtYSA9 ICEoaWR4ICUgKE1JTl9JU1BfUFJFRF9XSURUSCAvIHR1LT53aWR0aCkpOworICAgIH0KKyAgICBy ZXR1cm4gaGFzX2x1bWE7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X2Nocm9tYV9wcmVkaWN0X3VuaXQo Y29uc3QgQ29kaW5nVW5pdCAqY3UsIGNvbnN0IFRyYW5zZm9ybVVuaXQgKnR1LCBjb25zdCBpbnQg aWR4LCBpbnQgKngwLCBpbnQgKnkwLCBpbnQgKncsIGludCAqaCkKK3sKKyAgICBpZiAoY3UtPmlz cF9zcGxpdF90eXBlID09IElTUF9OT19TUExJVCkgeworICAgICAgICBhZGRfdHVfYXJlYSh0dSwg eDAsIHkwLCB3LCBoKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgIGlmIChpZHggPT0g Y3UtPm51bV9pbnRyYV9zdWJwYXJ0aXRpb25zIC0gMSkgeworICAgICAgICAqeDAgPSBjdS0+eDA7 CisgICAgICAgICp5MCA9IGN1LT55MDsKKyAgICAgICAgKncgPSBjdS0+Y2Jfd2lkdGg7CisgICAg ICAgICpoID0gY3UtPmNiX2hlaWdodDsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgIHJl dHVybiAwOworfQorCisvLzguNC41LjEgR2VuZXJhbCBkZWNvZGluZyBwcm9jZXNzIGZvciBpbnRy YSBibG9ja3MKK3N0YXRpYyB2b2lkIHByZWRpY3RfaW50cmEoVlZDTG9jYWxDb250ZXh0ICpsYywg Y29uc3QgVHJhbnNmb3JtVW5pdCAqdHUsIGNvbnN0IGludCBpZHgsIGNvbnN0IGludCB0YXJnZXRf Y2hfdHlwZSkKK3sKKyAgICBjb25zdCBWVkNGcmFtZUNvbnRleHQgKmZjICAgICAgICAgPSBsYy0+ ZmM7CisgICAgY29uc3QgQ29kaW5nVW5pdCAqY3UgICAgICAgID0gbGMtPmN1OworICAgIGNvbnN0 IFZWQ1RyZWVUeXBlIHRyZWVfdHlwZSA9IGN1LT50cmVlX3R5cGU7CisgICAgaW50IHgwLCB5MCwg dywgaDsKKyAgICBpZiAoY3UtPnByZWRfbW9kZSAhPSBNT0RFX0lOVFJBKSB7CisgICAgICAgIGFk ZF9yZWNvbnN0cnVjdGVkX2FyZWEobGMsIHRhcmdldF9jaF90eXBlLCB0dS0+eDAsIHR1LT55MCwg dHUtPndpZHRoLCB0dS0+aGVpZ2h0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAo IXRhcmdldF9jaF90eXBlICYmIHRyZWVfdHlwZSAhPSBEVUFMX1RSRUVfQ0hST01BKSB7CisgICAg ICAgIGlmIChnZXRfbHVtYV9wcmVkaWN0X3VuaXQoY3UsIHR1LCBpZHgsICZ4MCwgJnkwLCAmdywg JmgpKSB7CisgICAgICAgICAgICBmZl92dmNfc2V0X25laWdoYm91cl9hdmFpbGFibGUobGMsIHgw LCB5MCwgdywgaCk7CisgICAgICAgICAgICBmYy0+dnZjZHNwLmludHJhLmludHJhX3ByZWQobGMs IHgwLCB5MCwgdywgaCwgMCk7CisgICAgICAgICAgICBhZGRfcmVjb25zdHJ1Y3RlZF9hcmVhKGxj LCAwLCB4MCwgeTAsIHcsIGgpOworICAgICAgICB9CisgICAgfQorICAgIGlmICh0YXJnZXRfY2hf dHlwZSAmJiB0cmVlX3R5cGUgIT0gRFVBTF9UUkVFX0xVTUEpIHsKKyAgICAgICAgaWYgKGdldF9j aHJvbWFfcHJlZGljdF91bml0KGN1LCB0dSwgaWR4LCAmeDAsICZ5MCwgJncsICZoKSl7CisgICAg ICAgICAgICBmZl92dmNfc2V0X25laWdoYm91cl9hdmFpbGFibGUobGMsIHgwLCB5MCwgdywgaCk7 CisgICAgICAgICAgICBpZiAoaXNfY2NsbShjdS0+aW50cmFfcHJlZF9tb2RlX2MpKSB7CisgICAg ICAgICAgICAgICAgZmMtPnZ2Y2RzcC5pbnRyYS5pbnRyYV9jY2xtX3ByZWQobGMsIHgwLCB5MCwg dywgaCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGZjLT52dmNkc3Au aW50cmEuaW50cmFfcHJlZChsYywgeDAsIHkwLCB3LCBoLCAxKTsKKyAgICAgICAgICAgICAgICBm Yy0+dnZjZHNwLmludHJhLmludHJhX3ByZWQobGMsIHgwLCB5MCwgdywgaCwgMik7CisgICAgICAg ICAgICB9CisgICAgICAgICAgICBhZGRfcmVjb25zdHJ1Y3RlZF9hcmVhKGxjLCAxLCB4MCwgeTAs IHcsIGgpOworICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBzY2FsZV9jbGlwKGlu dCAqY29lZmYsIGNvbnN0IGludCBuencsIGNvbnN0IGludCB3LCBjb25zdCBpbnQgaCwKKyAgICBj b25zdCBpbnQgc2hpZnQsIGNvbnN0IGludCBsb2cyX3RyYW5zZm9ybV9yYW5nZSkKK3sKKyAgICBj b25zdCBpbnQgYWRkID0gMSA8PCAoc2hpZnQgLSAxKTsKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8 IGg7IHkrKykgeworICAgICAgICBpbnQgKnAgPSBjb2VmZiArIHkgKiB3OworICAgICAgICBmb3Ig KGludCB4ID0gMDsgeCA8IG56dzsgeCsrKSB7CisgICAgICAgICAgICAqcCA9IGF2X2NsaXBfaW50 cDIoKCpwICsgYWRkKSA+PiBzaGlmdCwgbG9nMl90cmFuc2Zvcm1fcmFuZ2UpOworICAgICAgICAg ICAgcCsrOworICAgICAgICB9CisgICAgICAgIG1lbXNldChwLCAwLCBzaXplb2YoKnApICogKHcg LSBuencpKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHNjYWxlKGludCAqb3V0LCBjb25zdCBp bnQgKmluLCBjb25zdCBpbnQgdywgY29uc3QgaW50IGgsIGNvbnN0IGludCBzaGlmdCkKK3sKKyAg ICBjb25zdCBpbnQgYWRkID0gMSA8PCAoc2hpZnQgLSAxKTsKKyAgICBmb3IgKGludCB5ID0gMDsg eSA8IGg7IHkrKykgeworICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHc7IHgrKykgeworICAg ICAgICAgICAgaW50ICpvID0gb3V0ICsgeSAqIHcgKyB4OworICAgICAgICAgICAgY29uc3QgaW50 ICppID0gaW4gKyB5ICogdyArIHg7CisgICAgICAgICAgICAqbyA9ICgqaSArIGFkZCkgPj4gc2hp ZnQ7CisgICAgICAgIH0KKyAgICB9Cit9CisKKy8vIHBhcnQgb2YgOC43LjMgU2NhbGluZyBwcm9j ZXNzIGZvciB0cmFuc2Zvcm0gY29lZmZpY2llbnRzCitzdGF0aWMgdm9pZCBkZXJpdmVfcXAoY29u c3QgVlZDTG9jYWxDb250ZXh0ICpsYywgY29uc3QgVHJhbnNmb3JtVW5pdCAqdHUsIFRyYW5zZm9y bUJsb2NrICp0YikKK3sKKyAgICBjb25zdCBWVkNTUFMgKnNwcyAgICAgICAgICAgICAgID0gbGMt PmZjLT5wcy5zcHM7CisgICAgY29uc3QgSDI2NlJhd1NsaWNlSGVhZGVyICpyc2ggICA9IGxjLT5z Yy0+c2gucjsKKyAgICBjb25zdCBDb2RpbmdVbml0ICpjdSAgICAgICAgICAgID0gbGMtPmN1Owor ICAgIGludCBxcCwgcXBfYWN0X29mZnNldDsKKworICAgIGlmICh0Yi0+Y19pZHggPT0gMCkgewor ICAgICAgICAvL2ZpeCBtZQorICAgICAgICBxcCA9IGN1LT5xcFtMVU1BXSArIHNwcy0+cXBfYmRf b2Zmc2V0OworICAgICAgICBxcF9hY3Rfb2Zmc2V0ID0gY3UtPmFjdF9lbmFibGVkX2ZsYWcgPyAt NSA6IDA7CisgICAgfSBlbHNlIHsKKyAgICAgICAgY29uc3QgaW50IGlzX2pjYmNyID0gdHUtPmpv aW50X2NiY3JfcmVzaWR1YWxfZmxhZyAmJiB0dS0+Y29kZWRfZmxhZ1tDQl0gJiYgdHUtPmNvZGVk X2ZsYWdbQ1JdOworICAgICAgICBjb25zdCBpbnQgaWR4ID0gaXNfamNiY3IgPyBKQ0JDUiA6IHRi LT5jX2lkeDsKKyAgICAgICAgcXAgPSBjdS0+cXBbaWR4XTsKKyAgICAgICAgcXBfYWN0X29mZnNl dCA9IGN1LT5hY3RfZW5hYmxlZF9mbGFnID8gMSA6IDA7CisgICAgfQorICAgIGlmICh0Yi0+dHMp IHsKKyAgICAgICAgY29uc3QgaW50IHFwX3ByaW1lX3RzX21pbiA9IDQgKyA2ICogc3BzLT5yLT5z cHNfbWluX3FwX3ByaW1lX3RzOworCisgICAgICAgIHRiLT5xcCA9IGF2X2NsaXAocXAgKyBxcF9h Y3Rfb2Zmc2V0LCBxcF9wcmltZV90c19taW4sIDYzICsgc3BzLT5xcF9iZF9vZmZzZXQpOworICAg ICAgICB0Yi0+cmVjdF9ub25fdHNfZmxhZyA9IDA7CisgICAgICAgIHRiLT5iZF9zaGlmdCA9IDEw OworICAgIH0gZWxzZSB7CisgICAgICAgIGNvbnN0IGludCBsb2dfc3VtID0gdGItPmxvZzJfdGJf d2lkdGggKyB0Yi0+bG9nMl90Yl9oZWlnaHQ7CisgICAgICAgIGNvbnN0IGludCByZWN0X25vbl90 c19mbGFnID0gbG9nX3N1bSAmIDE7CisKKyAgICAgICAgdGItPnFwID0gYXZfY2xpcChxcCArIHFw X2FjdF9vZmZzZXQsIDAsIDYzICsgc3BzLT5xcF9iZF9vZmZzZXQpOworICAgICAgICB0Yi0+cmVj dF9ub25fdHNfZmxhZyA9IHJlY3Rfbm9uX3RzX2ZsYWc7CisgICAgICAgIHRiLT5iZF9zaGlmdCA9 IHNwcy0+Yml0X2RlcHRoICsgcmVjdF9ub25fdHNfZmxhZyArIChsb2dfc3VtIC8gMikKKyAgICAg ICAgICAgICAgICAgICAgICsgMTAgLSBzcHMtPmxvZzJfdHJhbnNmb3JtX3JhbmdlICsgcnNoLT5z aF9kZXBfcXVhbnRfdXNlZF9mbGFnOworICAgIH0KKyAgICB0Yi0+YmRfb2Zmc2V0ID0gKDEgPDwg dGItPmJkX3NoaWZ0KSA+PiAxOworfQorCisvLzguNy4zIFNjYWxpbmcgcHJvY2VzcyBmb3IgdHJh bnNmb3JtIGNvZWZmaWNpZW50cworc3RhdGljIGF2X2Fsd2F5c19pbmxpbmUgaW50IGRlcml2ZV9z Y2FsZShjb25zdCBUcmFuc2Zvcm1CbG9jayAqdGIsIGNvbnN0IGludCBzaF9kZXBfcXVhbnRfdXNl ZF9mbGFnKQoreworICAgIHN0YXRpYyBjb25zdCB1aW50OF90IHJlbTZbNjMgKyAyICogNiArIDFd ID0geworICAgICAgICAwLCAxLCAyLCAzLCA0LCA1LCAwLCAxLCAyLCAzLCA0LCA1LCAwLCAxLCAy LCAzLCA0LCA1LCAwLCAxLCAyLAorICAgICAgICAzLCA0LCA1LCAwLCAxLCAyLCAzLCA0LCA1LCAw LCAxLCAyLCAzLCA0LCA1LCAwLCAxLCAyLCAzLCA0LCA1LAorICAgICAgICAwLCAxLCAyLCAzLCA0 LCA1LCAwLCAxLCAyLCAzLCA0LCA1LCAwLCAxLCAyLCAzLCA0LCA1LCAwLCAxLCAyLCAzLAorICAg ICAgICA0LCA1LCAwLCAxLCAyLCAzLCA0LCA1LCAwLCAxLCAyLCAzCisgICAgfTsKKworICAgIHN0 YXRpYyBjb25zdCB1aW50OF90IGRpdjZbNjMgKyAyICogNiArIDFdID0geworICAgICAgICAwLCAw LCAwLCAwLCAwLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAyLCAyLCAyLCAyLCAyLCAyLCAzLCAgMywg IDMsCisgICAgICAgIDMsIDMsIDMsIDQsIDQsIDQsIDQsIDQsIDQsIDUsIDUsIDUsIDUsIDUsIDUs IDYsIDYsIDYsIDYsICA2LCAgNiwKKyAgICAgICAgNywgNywgNywgNywgNywgNywgOCwgOCwgOCwg OCwgOCwgOCwgOSwgOSwgOSwgOSwgOSwgOSwgMTAsIDEwLCAxMCwgMTAsCisgICAgICAgIDEwLCAx MCwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTIsIDEyLCAxMiwgMTIKKyAgICB9OworCisgICAg Y29uc3Qgc3RhdGljIGludCBsZXZlbF9zY2FsZVsyXVs2XSA9IHsKKyAgICAgICAgeyA0MCwgNDUs IDUxLCA1NywgNjQsIDcyIH0sCisgICAgICAgIHsgNTcsIDY0LCA3MiwgODAsIDkwLCAxMDIgfQor ICAgIH07CisgICAgY29uc3QgaW50IGFkZGluID0gc2hfZGVwX3F1YW50X3VzZWRfZmxhZyAmJiAh dGItPnRzOworICAgIGNvbnN0IGludCBxcCAgICA9IHRiLT5xcCArIGFkZGluOworCisgICAgcmV0 dXJuIGxldmVsX3NjYWxlW3RiLT5yZWN0X25vbl90c19mbGFnXVtyZW02W3FwXV0gPDwgZGl2Nltx cF07Cit9CisKKy8vOC43LjMgU2NhbGluZyBwcm9jZXNzIGZvciB0cmFuc2Zvcm0gY29lZmZpY2ll bnRzCitzdGF0aWMgY29uc3QgdWludDhfdCogZGVyaXZlX3NjYWxlX20oY29uc3QgVlZDTG9jYWxD b250ZXh0ICpsYywgY29uc3QgVHJhbnNmb3JtQmxvY2sgKnRiLCB1aW50OF90ICpzY2FsZV9tKQor eworICAgIC8vVGFibGUgMzgg4oCTIFNwZWNpZmljYXRpb24gb2YgdGhlIHNjYWxpbmcgbWF0cml4 IGlkZW50aWZpZXIgdmFyaWFibGUgaWQgYWNjb3JkaW5nIHRvIHByZWRNb2RlLCBjSWR4LCBuVGJX LCBhbmQgblRiSAorICAgIGNvbnN0IGludCBpZHNbMl1bM11bNl0gPSB7CisgICAgICAgIHsKKyAg ICAgICAgICAgIHsgIDAsICAyLCAgOCwgMTQsIDIwLCAyNiB9LAorICAgICAgICAgICAgeyAgMCwg IDMsICA5LCAxNSwgMjEsIDIxIH0sCisgICAgICAgICAgICB7ICAwLCAgNCwgMTAsIDE2LCAyMiwg MjIgfQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICB7ICAwLCAgNSwgMTEsIDE3 LCAyMywgMjcgfSwKKyAgICAgICAgICAgIHsgIDAsICA2LCAxMiwgMTgsIDI0LCAyNCB9LAorICAg ICAgICAgICAgeyAgMSwgIDcsIDEzLCAxOSwgMjUsIDI1IH0sCisgICAgICAgIH0KKyAgICB9Owor ICAgIGNvbnN0IFZWQ0ZyYW1lUGFyYW1TZXRzICpwcyAgICAgPSAmbGMtPmZjLT5wczsKKyAgICBj b25zdCBWVkNTUFMgKnNwcyAgICAgICAgICAgICAgID0gcHMtPnNwczsKKyAgICBjb25zdCBIMjY2 UmF3U2xpY2VIZWFkZXIgKnJzaCAgID0gbGMtPnNjLT5zaC5yOworICAgIGNvbnN0IENvZGluZ1Vu aXQgKmN1ICAgICAgICAgICAgPSBsYy0+Y3U7CisgICAgY29uc3QgVlZDU2NhbGluZ0xpc3QgKnNs ICAgICAgICA9IHBzLT5zbDsKKyAgICBjb25zdCBpbnQgaWQgPSBpZHNbY3UtPnByZWRfbW9kZSAh PSBNT0RFX0lOVFJBXVt0Yi0+Y19pZHhdW0ZGTUFYKHRiLT5sb2cyX3RiX2hlaWdodCwgdGItPmxv ZzJfdGJfd2lkdGgpIC0gMV07CisgICAgY29uc3QgaW50IGxvZzJfbWF0cml4X3NpemUgPSAoaWQg PCAyKSA/IDEgOiAoaWQgPCA4KSA/IDIgOiAzOworICAgIHVpbnQ4X3QgKnAgPSBzY2FsZV9tOwor CisgICAgYXZfYXNzZXJ0MCghc3BzLT5yLT5zcHNfc2NhbGluZ19tYXRyaXhfZm9yX2FsdGVybmF0 aXZlX2NvbG91cl9zcGFjZV9kaXNhYmxlZF9mbGFnKTsKKworICAgIGlmICghcnNoLT5zaF9leHBs aWNpdF9zY2FsaW5nX2xpc3RfdXNlZF9mbGFnIHx8IHRiLT50cyB8fAorICAgICAgICBzcHMtPnIt PnNwc19zY2FsaW5nX21hdHJpeF9mb3JfbGZuc3RfZGlzYWJsZWRfZmxhZyAmJiBjdS0+YXBwbHlf bGZuc3RfZmxhZ1t0Yi0+Y19pZHhdKQorICAgICAgICByZXR1cm4gZmZfdnZjX2RlZmF1bHRfc2Nh bGVfbTsKKworICAgIGlmICghc2wpIHsKKyAgICAgICAgYXZfbG9nKGxjLT5mYy0+YXZjdHgsIEFW X0xPR19XQVJOSU5HLCAiYnVnOiBubyBzY2FsaW5nIGxpc3QgYXBzLCBpZCA9ICVkIiwgcHMtPnBo LnItPnBoX3NjYWxpbmdfbGlzdF9hcHNfaWQpOworICAgICAgICByZXR1cm4gZmZfdnZjX2RlZmF1 bHRfc2NhbGVfbTsKKyAgICB9CisKKyAgICBmb3IgKGludCB5ID0gdGItPm1pbl9zY2FuX3k7IHkg PD0gdGItPm1heF9zY2FuX3k7IHkrKykgeworICAgICAgICBjb25zdCBpbnQgb2ZmID0geSA8PCBs b2cyX21hdHJpeF9zaXplID4+IHRiLT5sb2cyX3RiX2hlaWdodCA8PCBsb2cyX21hdHJpeF9zaXpl OworICAgICAgICBjb25zdCB1aW50OF90ICptID0gJnNsLT5zY2FsaW5nX21hdHJpeF9yZWNbaWRd W29mZl07CisKKyAgICAgICAgZm9yIChpbnQgeCA9IHRiLT5taW5fc2Nhbl94OyB4IDw9IHRiLT5t YXhfc2Nhbl94OyB4KyspCisgICAgICAgICAgICAqcCsrID0gbVt4IDw8IGxvZzJfbWF0cml4X3Np emUgPj4gdGItPmxvZzJfdGJfd2lkdGhdOworICAgIH0KKyAgICBpZiAoaWQgPj0gU0xfU1RBUlRf MTZ4MTYgJiYgIXRiLT5taW5fc2Nhbl94ICYmICF0Yi0+bWluX3NjYW5feSkKKyAgICAgICAgKnNj YWxlX20gPSBzbC0+c2NhbGluZ19tYXRyaXhfZGNfcmVjW2lkIC0gU0xfU1RBUlRfMTZ4MTZdOwor CisgICAgcmV0dXJuIHNjYWxlX207Cit9CisKKy8vOC43LjMgU2NhbGluZyBwcm9jZXNzIGZvciB0 cmFuc2Zvcm0gY29lZmZpY2llbnRzCitzdGF0aWMgYXZfYWx3YXlzX2lubGluZSBpbnQgc2NhbGVf Y29lZmYoY29uc3QgVHJhbnNmb3JtQmxvY2sgKnRiLCBpbnQgY29lZmYsCisgICAgY29uc3QgaW50 IHNjYWxlLCBjb25zdCBpbnQgc2NhbGVfbSwgY29uc3QgaW50IGxvZzJfdHJhbnNmb3JtX3Jhbmdl KQoreworICAgIGNvZWZmID0gKGNvZWZmICogc2NhbGUgKiBzY2FsZV9tICsgdGItPmJkX29mZnNl dCkgPj4gdGItPmJkX3NoaWZ0OworICAgIGNvZWZmID0gYXZfY2xpcF9pbnRwMihjb2VmZiwgbG9n Ml90cmFuc2Zvcm1fcmFuZ2UpOworICAgIHJldHVybiBjb2VmZjsKK30KKworc3RhdGljIHZvaWQg ZGVxdWFudChjb25zdCBWVkNMb2NhbENvbnRleHQgKmxjLCBjb25zdCBUcmFuc2Zvcm1Vbml0ICp0 dSwgVHJhbnNmb3JtQmxvY2sgKnRiKQoreworICAgIHVpbnQ4X3QgdG1wW01BWF9UQl9TSVpFICog TUFYX1RCX1NJWkVdOworICAgIGNvbnN0IEgyNjZSYXdTbGljZUhlYWRlciAqcnNoICAgPSBsYy0+ c2MtPnNoLnI7CisgICAgY29uc3QgVlZDU1BTICpzcHMgICAgICAgICAgICAgICA9IGxjLT5mYy0+ cHMuc3BzOworICAgIGNvbnN0IHVpbnQ4X3QgKnNjYWxlX20gICAgICAgICAgPSBkZXJpdmVfc2Nh bGVfbShsYywgdGIsIHRtcCk7CisgICAgaW50IHNjYWxlOworCisgICAgZGVyaXZlX3FwKGxjLCB0 dSwgdGIpOworICAgIHNjYWxlID0gZGVyaXZlX3NjYWxlKHRiLCByc2gtPnNoX2RlcF9xdWFudF91 c2VkX2ZsYWcpOworCisgICAgZm9yIChpbnQgeSA9IHRiLT5taW5fc2Nhbl95OyB5IDw9IHRiLT5t YXhfc2Nhbl95OyB5KyspIHsKKyAgICAgICAgZm9yIChpbnQgeCA9IHRiLT5taW5fc2Nhbl94OyB4 IDw9IHRiLT5tYXhfc2Nhbl94OyB4KyspIHsKKyAgICAgICAgICAgIGludCAqY29lZmYgPSB0Yi0+ Y29lZmZzICsgeSAqIHRiLT50Yl93aWR0aCArIHg7CisKKyAgICAgICAgICAgIGlmICgqY29lZmYp CisgICAgICAgICAgICAgICAgKmNvZWZmID0gc2NhbGVfY29lZmYodGIsICpjb2VmZiwgc2NhbGUs ICpzY2FsZV9tLCBzcHMtPmxvZzJfdHJhbnNmb3JtX3JhbmdlKTsKKyAgICAgICAgICAgIHNjYWxl X20rKzsKKyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGljIHZvaWQgaXR4XzJkKGNvbnN0IFZW Q0ZyYW1lQ29udGV4dCAqZmMsIFRyYW5zZm9ybUJsb2NrICp0YiwgY29uc3QgZW51bSBUeFR5cGUg dHJoLCBjb25zdCBlbnVtIFR4VHlwZSB0cnYsIGludCAqdGVtcCkKK3sKKyAgICBjb25zdCBWVkNT UFMgKnNwcyAgID0gZmMtPnBzLnNwczsKKyAgICBjb25zdCBpbnQgdyAgICAgICAgID0gdGItPnRi X3dpZHRoOworICAgIGNvbnN0IGludCBoICAgICAgICAgPSB0Yi0+dGJfaGVpZ2h0OworICAgIGNv bnN0IGludCBuencgICAgICAgPSB0Yi0+bWF4X3NjYW5feCArIDE7CisKKyAgICBmb3IgKGludCB4 ID0gMDsgeCA8IG56dzsgeCsrKQorICAgICAgICBmYy0+dnZjZHNwLml0eC5pdHhbdHJ2XVt0Yi0+ bG9nMl90Yl9oZWlnaHQgLSAxXSh0ZW1wICsgeCwgdywgdGItPmNvZWZmcyArIHgsIHcpOworICAg IHNjYWxlX2NsaXAodGVtcCwgbnp3LCB3LCBoLCA3LCBzcHMtPmxvZzJfdHJhbnNmb3JtX3Jhbmdl KTsKKworICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaDsgeSsrKQorICAgICAgICBmYy0+dnZjZHNw Lml0eC5pdHhbdHJoXVt0Yi0+bG9nMl90Yl93aWR0aCAtIDFdKHRiLT5jb2VmZnMgKyB5ICogdywg MSwgdGVtcCArIHkgKiB3LCAxKTsKKyAgICBzY2FsZSh0Yi0+Y29lZmZzLCB0Yi0+Y29lZmZzLCB3 LCBoLCA1ICsgc3BzLT5sb2cyX3RyYW5zZm9ybV9yYW5nZSAtIHNwcy0+Yml0X2RlcHRoKTsKK30K Kworc3RhdGljIHZvaWQgaXR4XzFkKGNvbnN0IFZWQ0ZyYW1lQ29udGV4dCAqZmMsIFRyYW5zZm9y bUJsb2NrICp0YiwgY29uc3QgZW51bSBUeFR5cGUgdHJoLCBjb25zdCBlbnVtIFR4VHlwZSB0cnYs IGludCAgKnRlbXApCit7CisgICAgY29uc3QgVlZDU1BTICpzcHMgICA9IGZjLT5wcy5zcHM7Cisg ICAgY29uc3QgaW50IHcgICAgICAgICA9IHRiLT50Yl93aWR0aDsKKyAgICBjb25zdCBpbnQgaCAg ICAgICAgID0gdGItPnRiX2hlaWdodDsKKworICAgIGlmICh3ID4gMSkKKyAgICAgICAgZmMtPnZ2 Y2RzcC5pdHguaXR4W3RyaF1bdGItPmxvZzJfdGJfd2lkdGggLSAxXSh0ZW1wLCAxLCB0Yi0+Y29l ZmZzLCAxKTsKKyAgICBlbHNlCisgICAgICAgIGZjLT52dmNkc3AuaXR4Lml0eFt0cnZdW3RiLT5s b2cyX3RiX2hlaWdodCAtIDFdKHRlbXAsIDEsIHRiLT5jb2VmZnMsIDEpOworICAgIHNjYWxlKHRi LT5jb2VmZnMsIHRlbXAsIHcsIGgsIDYgKyBzcHMtPmxvZzJfdHJhbnNmb3JtX3JhbmdlIC0gc3Bz LT5iaXRfZGVwdGgpOworfQorCitzdGF0aWMgdm9pZCB0cmFuc2Zvcm1fYmRwY20oVHJhbnNmb3Jt QmxvY2sgKnRiLCBjb25zdCBWVkNMb2NhbENvbnRleHQgKmxjLCBjb25zdCBDb2RpbmdVbml0ICpj dSkKK3sKKyAgICBjb25zdCBWVkNTUFMgKnNwcyAgICAgICAgPSBsYy0+ZmMtPnBzLnNwczsKKyAg ICBjb25zdCBJbnRyYVByZWRNb2RlIG1vZGUgPSB0Yi0+Y19pZHggPyBjdS0+aW50cmFfcHJlZF9t b2RlX2MgOiBjdS0+aW50cmFfcHJlZF9tb2RlX3k7CisgICAgY29uc3QgaW50IHZlcnRpY2FsICAg ICAgID0gbW9kZSA9PSBJTlRSQV9WRVJUOworICAgIGxjLT5mYy0+dnZjZHNwLml0eC50cmFuc2Zv cm1fYmRwY20odGItPmNvZWZmcywgdGItPnRiX3dpZHRoLCB0Yi0+dGJfaGVpZ2h0LAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVydGljYWwsIHNwcy0+bG9nMl90cmFu c2Zvcm1fcmFuZ2UpOworICAgIGlmICh2ZXJ0aWNhbCkKKyAgICAgICAgdGItPm1heF9zY2FuX3kg PSB0Yi0+dGJfaGVpZ2h0IC0gMTsKKyAgICBlbHNlCisgICAgICAgIHRiLT5tYXhfc2Nhbl94ID0g dGItPnRiX3dpZHRoIC0gMTsKK30KKworc3RhdGljIHZvaWQgaXRyYW5zZm9ybShWVkNMb2NhbENv bnRleHQgKmxjLCBUcmFuc2Zvcm1Vbml0ICp0dSwgY29uc3QgaW50IHR1X2lkeCwgY29uc3QgaW50 IHRhcmdldF9jaF90eXBlKQoreworICAgIGNvbnN0IFZWQ0ZyYW1lQ29udGV4dCAqZmMgICA9IGxj LT5mYzsKKyAgICBjb25zdCBWVkNTUFMgKnNwcyAgICAgICAgICAgPSBmYy0+cHMuc3BzOworICAg IGNvbnN0IFZWQ1NIICpzaCAgICAgICAgICAgICA9ICZsYy0+c2MtPnNoOworICAgIGNvbnN0IENv ZGluZ1VuaXQgKmN1ICAgICAgICA9IGxjLT5jdTsKKyAgICBjb25zdCBpbnQgcHMgICAgICAgICAg ICAgICAgPSBmYy0+cHMuc3BzLT5waXhlbF9zaGlmdDsKKyAgICBERUNMQVJFX0FMSUdORUQoMzIs IGludCwgdGVtcClbTUFYX1RCX1NJWkUgKiBNQVhfVEJfU0laRV07CisKKyAgICBmb3IgKGludCBp ID0gMDsgaSA8IHR1LT5uYl90YnM7IGkrKykgeworICAgICAgICBUcmFuc2Zvcm1CbG9jayAqdGIg ID0gJnR1LT50YnNbaV07CisgICAgICAgIGNvbnN0IGludCBjX2lkeCAgICAgPSB0Yi0+Y19pZHg7 CisgICAgICAgIGNvbnN0IGludCBjaF90eXBlICAgPSBjX2lkeCA+IDA7CisKKyAgICAgICAgaWYg KGNoX3R5cGUgPT0gdGFyZ2V0X2NoX3R5cGUgJiYgdGItPmhhc19jb2VmZnMpIHsKKyAgICAgICAg ICAgIGNvbnN0IGludCB3ICAgICAgICAgICAgID0gdGItPnRiX3dpZHRoOworICAgICAgICAgICAg Y29uc3QgaW50IGggICAgICAgICAgICAgPSB0Yi0+dGJfaGVpZ2h0OworICAgICAgICAgICAgY29u c3QgaW50IGNocm9tYV9zY2FsZSAgPSBjaF90eXBlICYmIHNoLT5yLT5zaF9sbWNzX3VzZWRfZmxh ZyAmJiBmYy0+cHMucGguci0+cGhfY2hyb21hX3Jlc2lkdWFsX3NjYWxlX2ZsYWcgJiYgKHcgKiBo ID4gNCk7CisgICAgICAgICAgICBjb25zdCBwdHJkaWZmX3Qgc3RyaWRlICA9IGZjLT5mcmFtZS0+ bGluZXNpemVbY19pZHhdOworICAgICAgICAgICAgY29uc3QgaW50IGhzICAgICAgICAgICAgPSBz cHMtPmhzaGlmdFtjX2lkeF07CisgICAgICAgICAgICBjb25zdCBpbnQgdnMgICAgICAgICAgICA9 IHNwcy0+dnNoaWZ0W2NfaWR4XTsKKyAgICAgICAgICAgIHVpbnQ4X3QgKmRzdCAgICAgICAgICAg ID0gJmZjLT5mcmFtZS0+ZGF0YVtjX2lkeF1bKHRiLT55MCA+PiB2cykgKiBzdHJpZGUgKyAoKHRi LT54MCA+PiBocykgPDwgcHMpXTsKKworICAgICAgICAgICAgaWYgKGN1LT5iZHBjbV9mbGFnW3Ri LT5jX2lkeF0pCisgICAgICAgICAgICAgICAgdHJhbnNmb3JtX2JkcGNtKHRiLCBsYywgY3UpOwor ICAgICAgICAgICAgZGVxdWFudChsYywgdHUsIHRiKTsKKyAgICAgICAgICAgIGlmICghdGItPnRz KSB7CisgICAgICAgICAgICAgICAgZW51bSBUeFR5cGUgdHJoLCB0cnY7CisKKyAgICAgICAgICAg ICAgICBpZiAoY3UtPmFwcGx5X2xmbnN0X2ZsYWdbY19pZHhdKQorICAgICAgICAgICAgICAgICAg ICBpbGZuc3RfdHJhbnNmb3JtKGxjLCB0Yik7CisgICAgICAgICAgICAgICAgZGVyaXZlX3RyYW5z Zm9ybV90eXBlKGZjLCBsYywgdGIsICZ0cmgsICZ0cnYpOworICAgICAgICAgICAgICAgIGlmICh3 ID4gMSAmJiBoID4gMSkKKyAgICAgICAgICAgICAgICAgICAgaXR4XzJkKGZjLCB0YiwgdHJoLCB0 cnYsIHRlbXApOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgaXR4 XzFkKGZjLCB0YiwgdHJoLCB0cnYsIHRlbXApOworICAgICAgICAgICAgfQorCisgICAgICAgICAg ICBpZiAoY2hyb21hX3NjYWxlKQorICAgICAgICAgICAgICAgIGZjLT52dmNkc3AuaW50cmEubG1j c19zY2FsZV9jaHJvbWEobGMsIHRlbXAsIHRiLT5jb2VmZnMsIHcsIGgsIGN1LT54MCwgY3UtPnkw KTsKKyAgICAgICAgICAgIGZjLT52dmNkc3AuaXR4LmFkZF9yZXNpZHVhbChkc3QsIGNocm9tYV9z Y2FsZSA/IHRlbXAgOiB0Yi0+Y29lZmZzLCB3LCBoLCBzdHJpZGUpOworCisgICAgICAgICAgICBp ZiAodHUtPmpvaW50X2NiY3JfcmVzaWR1YWxfZmxhZyAmJiB0Yi0+Y19pZHgpCisgICAgICAgICAg ICAgICAgYWRkX3Jlc2lkdWFsX2Zvcl9qb2ludF9jb2RpbmdfY2hyb21hKGxjLCB0dSwgdGIsIGNo cm9tYV9zY2FsZSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyBpbnQgcmVjb25zdHJ1 Y3QoVlZDTG9jYWxDb250ZXh0ICpsYykKK3sKKyAgICBWVkNGcmFtZUNvbnRleHQgKmZjID0gbGMt PmZjOworICAgIENvZGluZ1VuaXQgKmN1ICAgICAgPSBsYy0+Y3U7CisgICAgY29uc3QgaW50IHN0 YXJ0ICAgICA9IGN1LT50cmVlX3R5cGUgPT0gRFVBTF9UUkVFX0NIUk9NQTsKKyAgICBjb25zdCBp bnQgZW5kICAgICAgID0gZmMtPnBzLnNwcy0+ci0+c3BzX2Nocm9tYV9mb3JtYXRfaWRjICYmIChj dS0+dHJlZV90eXBlICE9IERVQUxfVFJFRV9MVU1BKTsKKworICAgIGZvciAoaW50IGNoX3R5cGUg PSBzdGFydDsgY2hfdHlwZSA8PSBlbmQ7IGNoX3R5cGUrKykgeworICAgICAgICBUcmFuc2Zvcm1V bml0ICp0dSA9IGN1LT50dXMuaGVhZDsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IHR1OyBpKysp IHsKKyAgICAgICAgICAgIHByZWRpY3RfaW50cmEobGMsIHR1LCBpLCBjaF90eXBlKTsKKyAgICAg ICAgICAgIGl0cmFuc2Zvcm0obGMsIHR1LCBpLCBjaF90eXBlKTsKKyAgICAgICAgICAgIHR1ID0g dHUtPm5leHQ7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBmZl92 dmNfcmVjb25zdHJ1Y3QoVlZDTG9jYWxDb250ZXh0ICpsYywgY29uc3QgaW50IHJzLCBjb25zdCBp bnQgcngsIGNvbnN0IGludCByeSkKK3sKKyAgICBjb25zdCBWVkNGcmFtZUNvbnRleHQgKmZjICAg PSBsYy0+ZmM7CisgICAgY29uc3QgVlZDU1BTICpzcHMgICAgICAgICAgID0gZmMtPnBzLnNwczsK KyAgICBjb25zdCBpbnQgeF9jdGIgICAgICAgICAgICAgPSByeCA8PCBzcHMtPmN0Yl9sb2cyX3Np emVfeTsKKyAgICBjb25zdCBpbnQgeV9jdGIgICAgICAgICAgICAgPSByeSA8PCBzcHMtPmN0Yl9s b2cyX3NpemVfeTsKKyAgICBDVFUgKmN0dSAgICAgICAgICAgICAgICAgICAgPSBmYy0+dGFiLmN0 dXMgKyByczsKKyAgICBDb2RpbmdVbml0ICpjdSAgICAgICAgICAgICAgPSBjdHUtPmN1czsKKyAg ICBpbnQgcmV0ICAgICAgICAgICAgICAgICAgICAgPSAwOworCisgICAgbGMtPm51bV9yYXNbMF0g PSBsYy0+bnVtX3Jhc1sxXSA9IDA7CisgICAgbGMtPmxtY3MueF92cGR1ID0gLTE7CisgICAgbGMt PmxtY3MueV92cGR1ID0gLTE7CisgICAgZmZfdnZjX2RlY29kZV9uZWlnaGJvdXIobGMsIHhfY3Ri LCB5X2N0YiwgcngsIHJ5LCBycyk7CisgICAgd2hpbGUgKGN1KSB7CisgICAgICAgIGxjLT5jdSA9 IGN1OworCisgICAgICAgIGlmIChjdS0+Y2lpcF9mbGFnKQorICAgICAgICAgICAgZmZfdnZjX3By ZWRpY3RfY2lpcChsYyk7CisgICAgICAgIGlmIChjdS0+Y29kZWRfZmxhZykgeworICAgICAgICAg ICAgcmV0ID0gcmVjb25zdHJ1Y3QobGMpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg YWRkX3JlY29uc3RydWN0ZWRfYXJlYShsYywgTFVNQSwgY3UtPngwLCBjdS0+eTAsIGN1LT5jYl93 aWR0aCwgY3UtPmNiX2hlaWdodCk7CisgICAgICAgICAgICBhZGRfcmVjb25zdHJ1Y3RlZF9hcmVh KGxjLCBDSFJPTUEsIGN1LT54MCwgY3UtPnkwLCBjdS0+Y2Jfd2lkdGgsIGN1LT5jYl9oZWlnaHQp OworICAgICAgICB9CisgICAgICAgIGN1ID0gY3UtPm5leHQ7CisgICAgfQorICAgIGZmX3Z2Y19j dHVfZnJlZV9jdXMoY3R1KTsKKyAgICByZXR1cm4gcmV0OworfQorCitpbnQgZmZfdnZjX2dldF9t aXBfc2l6ZV9pZChjb25zdCBpbnQgdywgY29uc3QgaW50IGgpCit7CisgICAgaWYgKHcgPT0gNCAm JiBoID09IDQpCisgICAgICAgIHJldHVybiAwOworICAgIGlmICgodyA9PSA0IHx8IGggPT0gNCkg fHwgKHcgPT0gOCAmJiBoID09IDgpKQorICAgICAgICByZXR1cm4gMTsKKyAgICByZXR1cm4gMjsK K30KKworaW50IGZmX3Z2Y19uc2NhbGVfZGVyaXZlKGNvbnN0IGludCB3LCBjb25zdCBpbnQgaCwg Y29uc3QgaW50IG1vZGUpCit7CisgICAgaW50IHNpZGVfc2l6ZSwgbnNjYWxlOworICAgIGF2X2Fz c2VydDAobW9kZSA8IElOVFJBX0xUX0NDTE0gJiYgIShtb2RlID4gSU5UUkFfSE9SWiAmJiBtb2Rl IDwgSU5UUkFfVkVSVCkpOworICAgIGlmIChtb2RlID09IElOVFJBX1BMQU5BUiB8fCBtb2RlID09 IElOVFJBX0RDIHx8CisgICAgICAgIG1vZGUgPT0gSU5UUkFfSE9SWiB8fCBtb2RlID09IElOVFJB X1ZFUlQpIHsKKyAgICAgICAgbnNjYWxlID0gKGF2X2xvZzIodykgKyBhdl9sb2cyKGgpIC0gMikg Pj4gMjsKKyAgICB9IGVsc2UgeworICAgICAgICBjb25zdCBpbnQgaW50cmFfcHJlZF9hbmdsZSA9 IGZmX3Z2Y19pbnRyYV9wcmVkX2FuZ2xlX2Rlcml2ZShtb2RlKTsKKyAgICAgICAgY29uc3QgaW50 IGludl9hbmdsZSAgICAgICAgPSBmZl92dmNfaW50cmFfaW52X2FuZ2xlX2Rlcml2ZShpbnRyYV9w cmVkX2FuZ2xlKTsKKyAgICAgICAgaWYgKG1vZGUgPj0gSU5UUkFfVkVSVCkKKyAgICAgICAgICAg IHNpZGVfc2l6ZSA9IGg7CisgICAgICAgIGlmIChtb2RlIDw9IElOVFJBX0hPUlopCisgICAgICAg ICAgICBzaWRlX3NpemUgPSB3OworICAgICAgICBuc2NhbGUgPSBGRk1JTigyLCBhdl9sb2cyKHNp ZGVfc2l6ZSkgLSBhdl9sb2cyKDMgKiBpbnZfYW5nbGUgLSAyKSArIDgpOworICAgIH0KKyAgICBy ZXR1cm4gbnNjYWxlOworfQorCitpbnQgZmZfdnZjX25lZWRfcGRwYyhjb25zdCBpbnQgdywgY29u c3QgaW50IGgsIGNvbnN0IHVpbnQ4X3QgYmRwY21fZmxhZywgY29uc3QgaW50IG1vZGUsIGNvbnN0 IGludCByZWZfaWR4KQoreworICAgIGF2X2Fzc2VydDAobW9kZSA8IElOVFJBX0xUX0NDTE0pOwor ICAgIGlmICgodyA+PSA0ICYmIGggPj0gNCkgJiYgIXJlZl9pZHggJiYgIWJkcGNtX2ZsYWcpIHsK KyAgICAgICAgaW50IG5zY2FsZTsKKyAgICAgICAgaWYgKG1vZGUgPT0gSU5UUkFfUExBTkFSIHx8 IG1vZGUgPT0gSU5UUkFfREMgfHwKKyAgICAgICAgICAgIG1vZGUgPT0gSU5UUkFfSE9SWiB8fCBt b2RlID09IElOVFJBX1ZFUlQpCisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgaWYgKG1v ZGUgPiBJTlRSQV9IT1JaICYmIG1vZGUgPCBJTlRSQV9WRVJUKQorICAgICAgICAgICAgcmV0dXJu IDA7CisgICAgICAgIG5zY2FsZSA9IGZmX3Z2Y19uc2NhbGVfZGVyaXZlKHcsIGgsIG1vZGUpOwor ICAgICAgICByZXR1cm4gbnNjYWxlID49IDA7CisKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisK K3N0YXRpYyBjb25zdCBSZWNvbnN0cnVjdGVkQXJlYSogZ2V0X3JlY29uc3RydWN0ZWRfYXJlYShj b25zdCBWVkNMb2NhbENvbnRleHQgKmxjLCBjb25zdCBpbnQgeCwgY29uc3QgaW50IHksIGNvbnN0 IGludCBjX2lkeCkKK3sKKyAgICBjb25zdCBpbnQgY2hfdHlwZSA9IGNfaWR4ID4gMDsKKyAgICBm b3IgKGludCBpID0gbGMtPm51bV9yYXNbY2hfdHlwZV0gLSAxOyBpID49IDA7IGktLSkgeworICAg ICAgICBjb25zdCBSZWNvbnN0cnVjdGVkQXJlYSogYSA9ICZsYy0+cmFzW2NoX3R5cGVdW2ldOwor ICAgICAgICBjb25zdCBpbnQgciA9IChhLT54ICsgYS0+dyk7CisgICAgICAgIGNvbnN0IGludCBi ID0gKGEtPnkgKyBhLT5oKTsKKyAgICAgICAgaWYgKGEtPnggPD0geCAmJiB4IDwgciAmJiBhLT55 IDw9IHkgJiYgeSA8IGIpCisgICAgICAgICAgICByZXR1cm4gYTsKKworICAgICAgICAvL2l0J3Mg dG9vIGZhciBhd2F5LCBubyBuZWVkIGNoZWNrIGl0OworICAgICAgICBpZiAoeCA+PSByICYmIHkg Pj0gYikKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK30KKwor aW50IGZmX3Z2Y19nZXRfdG9wX2F2YWlsYWJsZShjb25zdCBWVkNMb2NhbENvbnRleHQgKmxjLCBj b25zdCBpbnQgeCwgY29uc3QgaW50IHksIGludCB0YXJnZXRfc2l6ZSwgY29uc3QgaW50IGNfaWR4 KQoreworICAgIGNvbnN0IFZWQ0ZyYW1lQ29udGV4dCAqZmMgPSBsYy0+ZmM7CisgICAgY29uc3Qg VlZDU1BTICpzcHMgPSBmYy0+cHMuc3BzOworICAgIGNvbnN0IGludCBocyA9IHNwcy0+aHNoaWZ0 W2NfaWR4XTsKKyAgICBjb25zdCBpbnQgdnMgPSBzcHMtPnZzaGlmdFtjX2lkeF07CisgICAgY29u c3QgaW50IGxvZzJfY3RiX3NpemVfdiAgID0gc3BzLT5jdGJfbG9nMl9zaXplX3kgLSB2czsKKyAg ICBjb25zdCBpbnQgZW5kX29mX2N0Yl94ICAgICAgPSAoKGxjLT5jdS0+eDAgPj4gc3BzLT5jdGJf bG9nMl9zaXplX3kpICsgMSkgPDwgc3BzLT5jdGJfbG9nMl9zaXplX3k7CisgICAgY29uc3QgaW50 IHkwYiAgICAgICAgICAgICAgID0gYXZfbW9kX3VpbnRwMih5LCBsb2cyX2N0Yl9zaXplX3YpOwor ICAgIGNvbnN0IGludCBtYXhfeCAgICAgICAgICAgICA9IEZGTUlOKGZjLT5wcy5wcHMtPndpZHRo LCBlbmRfb2ZfY3RiX3gpID4+IGhzOworICAgIGNvbnN0IFJlY29uc3RydWN0ZWRBcmVhICphOwor ICAgIGludCBweCA9IHg7CisKKyAgICBpZiAoIXkwYikgeworICAgICAgICBpZiAoIWxjLT5jdGJf dXBfZmxhZykKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB0YXJnZXRfc2l6ZSA9IEZG TUlOKHRhcmdldF9zaXplLCAobGMtPmVuZF9vZl90aWxlc194ID4+IGhzKSAtIHgpOworICAgICAg ICBpZiAoc3BzLT5yLT5zcHNfZW50cm9weV9jb2Rpbmdfc3luY19lbmFibGVkX2ZsYWcpCisgICAg ICAgICAgICB0YXJnZXRfc2l6ZSA9IEZGTUlOKHRhcmdldF9zaXplLCAoZW5kX29mX2N0Yl94ID4+ IGhzKSAtIHgpOworICAgICAgICByZXR1cm4gdGFyZ2V0X3NpemU7CisgICAgfQorCisgICAgdGFy Z2V0X3NpemUgPSBGRk1BWCgwLCBGRk1JTih0YXJnZXRfc2l6ZSwgbWF4X3ggLSB4KSk7CisgICAg d2hpbGUgKHRhcmdldF9zaXplID4gMCAmJiAoYSA9IGdldF9yZWNvbnN0cnVjdGVkX2FyZWEobGMs IHB4LCB5IC0gMSwgY19pZHgpKSkgeworICAgICAgICBjb25zdCBpbnQgc3ogPSBGRk1JTih0YXJn ZXRfc2l6ZSwgYS0+eCArIGEtPncgLSBweCk7CisgICAgICAgIHB4ICs9IHN6OworICAgICAgICB0 YXJnZXRfc2l6ZSAtPSBzejsKKyAgICB9CisgICAgcmV0dXJuIHB4IC0geDsKK30KKworaW50IGZm X3Z2Y19nZXRfbGVmdF9hdmFpbGFibGUoY29uc3QgVlZDTG9jYWxDb250ZXh0ICpsYywgY29uc3Qg aW50IHgsIGNvbnN0IGludCB5LCBpbnQgdGFyZ2V0X3NpemUsIGNvbnN0IGludCBjX2lkeCkKK3sK KyAgICBjb25zdCBWVkNGcmFtZUNvbnRleHQgKmZjID0gbGMtPmZjOworICAgIGNvbnN0IFZWQ1NQ UyAqc3BzID0gZmMtPnBzLnNwczsKKyAgICBjb25zdCBpbnQgaHMgPSBzcHMtPmhzaGlmdFtjX2lk eF07CisgICAgY29uc3QgaW50IHZzID0gc3BzLT52c2hpZnRbY19pZHhdOworICAgIGNvbnN0IGlu dCBsb2cyX2N0Yl9zaXplX2ggICA9ICBzcHMtPmN0Yl9sb2cyX3NpemVfeSAtIGhzOworICAgIGNv bnN0IGludCB4MGIgICAgICAgICAgICAgICA9IGF2X21vZF91aW50cDIoeCwgbG9nMl9jdGJfc2l6 ZV9oKTsKKyAgICBjb25zdCBpbnQgZW5kX29mX2N0Yl95ICAgICAgPSAoKGxjLT5jdS0+eTAgPj4g c3BzLT5jdGJfbG9nMl9zaXplX3kpICsgMSkgPDwgc3BzLT5jdGJfbG9nMl9zaXplX3k7CisgICAg Y29uc3QgaW50IG1heF95ICAgICAgICAgICAgID0gRkZNSU4oZmMtPnBzLnBwcy0+aGVpZ2h0LCBl bmRfb2ZfY3RiX3kpID4+IHZzOworICAgIGNvbnN0IFJlY29uc3RydWN0ZWRBcmVhICphOworICAg IGludCAgcHkgPSB5OworCisgICAgaWYgKCF4MGIgJiYgIWxjLT5jdGJfbGVmdF9mbGFnKQorICAg ICAgICByZXR1cm4gMDsKKworICAgIHRhcmdldF9zaXplID0gRkZNQVgoMCwgRkZNSU4odGFyZ2V0 X3NpemUsIG1heF95IC0geSkpOworICAgIGlmICgheDBiKQorICAgICAgICByZXR1cm4gdGFyZ2V0 X3NpemU7CisKKyAgICB3aGlsZSAodGFyZ2V0X3NpemUgPiAwICYmIChhID0gZ2V0X3JlY29uc3Ry dWN0ZWRfYXJlYShsYywgeCAtIDEsIHB5LCBjX2lkeCkpKSB7CisgICAgICAgIGNvbnN0IGludCBz eiA9IEZGTUlOKHRhcmdldF9zaXplLCBhLT55ICsgYS0+aCAtIHB5KTsKKyAgICAgICAgcHkgKz0g c3o7CisgICAgICAgIHRhcmdldF9zaXplIC09IHN6OworICAgIH0KKyAgICByZXR1cm4gcHkgLSB5 OworfQorCitzdGF0aWMgaW50IGxlc3MoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKK3sK KyAgICByZXR1cm4gKihjb25zdCBpbnQqKWEgLSAqKGNvbnN0IGludCopYjsKK30KKworaW50IGZm X3Z2Y19yZWZfZmlsdGVyX2ZsYWdfZGVyaXZlKGNvbnN0IGludCBtb2RlKQoreworICAgIHN0YXRp YyBjb25zdCBpbnQgbW9kZXNbXSA9IHsgLTE0LCAtMTIsIC0xMCwgLTYsIElOVFJBX1BMQU5BUiwg MiwgMzQsIDY2LCA3MiwgNzYsIDc4LCA4MH07CisgICAgcmV0dXJuIGJzZWFyY2goJm1vZGUsIG1v ZGVzLCBGRl9BUlJBWV9FTEVNUyhtb2RlcyksIHNpemVvZihpbnQpLCBsZXNzKSAhPSBOVUxMOwor fQorCitpbnQgZmZfdnZjX2ludHJhX3ByZWRfYW5nbGVfZGVyaXZlKGNvbnN0IGludCBwcmVkX21v ZGUpCit7CisgICAgc3RhdGljIGNvbnN0IGludCBhbmdsZXNbXSA9IHsKKyAgICAgICAgICAwLCAg IDEsICAgMiwgICAzLCAgIDQsICAgNiwgICA4LCAgMTAsICAxMiwgIDE0LCAgMTYsICAxOCwgIDIw LCAgMjMsICAyNiwgMjksCisgICAgICAgICAzMiwgIDM1LCAgMzksICA0NSwgIDUxLCAgNTcsICA2 NCwgIDczLCAgODYsIDEwMiwgMTI4LCAxNzEsIDI1NiwgMzQxLCA1MTIKKyAgICB9OworICAgIGlu dCBzaWduID0gMSwgaWR4LCBpbnRyYV9wcmVkX2FuZ2xlOworICAgIGlmIChwcmVkX21vZGUgPiBJ TlRSQV9ESUFHKSB7CisgICAgICAgIGlkeCA9IHByZWRfbW9kZSAtIElOVFJBX1ZFUlQ7CisgICAg fSBlbHNlIGlmIChwcmVkX21vZGUgPiAwKSB7CisgICAgICAgIGlkeCA9IElOVFJBX0hPUlogLSBw cmVkX21vZGU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWR4ID0gSU5UUkFfSE9SWiAtIDIgLSBw cmVkX21vZGU7CisgICAgfQorICAgIGlmIChpZHggPCAwKSB7CisgICAgICAgIGlkeCA9IC1pZHg7 CisgICAgICAgIHNpZ24gPSAtMTsKKyAgICB9CisgICAgaW50cmFfcHJlZF9hbmdsZSA9IHNpZ24g KiBhbmdsZXNbaWR4XTsKKyAgICByZXR1cm4gaW50cmFfcHJlZF9hbmdsZTsKK30KKworI2RlZmlu ZSBST1VORChmKSAoaW50KShmIDwgMCA/IC0oLWYgKyAwLjUpIDogKGYgKyAwLjUpKQoraW50IGZm X3Z2Y19pbnRyYV9pbnZfYW5nbGVfZGVyaXZlKGNvbnN0IGludCBpbnRyYV9wcmVkX2FuZ2xlKQor eworICAgIGZsb2F0IGludl9hbmdsZTsKKyAgICBhdl9hc3NlcnQwKGludHJhX3ByZWRfYW5nbGUp OworICAgIGludl9hbmdsZSA9IDMyICogNTEyLjAgLyBpbnRyYV9wcmVkX2FuZ2xlOworICAgIHJl dHVybiBST1VORChpbnZfYW5nbGUpOworfQorCisvLzguNC41LjIuNyBXaWRlIGFuZ2xlIGludHJh IHByZWRpY3Rpb24gbW9kZSBtYXBwaW5nIHByb2NlcworaW50IGZmX3Z2Y193aWRlX2FuZ2xlX21v ZGVfbWFwcGluZyhjb25zdCBDb2RpbmdVbml0ICpjdSwKKyAgICBjb25zdCBpbnQgdGJfd2lkdGgs IGNvbnN0IGludCB0Yl9oZWlnaHQsIGNvbnN0IGludCBjX2lkeCwgaW50IHByZWRfbW9kZV9pbnRy YSkKK3sKKyAgICBpbnQgbncsIG5oLCB3aF9yYXRpbywgbWluLCBtYXg7CisKKyAgICBpZiAoY3Ut PmlzcF9zcGxpdF90eXBlID09IElTUF9OT19TUExJVCB8fCBjX2lkeCkgeworICAgICAgICBudyA9 IHRiX3dpZHRoOworICAgICAgICBuaCA9IHRiX2hlaWdodDsKKyAgICB9IGVsc2UgeworICAgICAg ICBudyA9IGN1LT5jYl93aWR0aDsKKyAgICAgICAgbmggPSBjdS0+Y2JfaGVpZ2h0OworICAgIH0K KyAgICB3aF9yYXRpbyAgICA9IEZGQUJTKGZmX2xvZzIobncpIC0gZmZfbG9nMihuaCkpOworICAg IG1heCAgICAgICAgID0gKHdoX3JhdGlvID4gMSkgPyAoOCAgKyAyICogd2hfcmF0aW8pIDogODsK KyAgICBtaW4gICAgICAgICA9ICh3aF9yYXRpbyA+IDEpID8gKDYwIC0gMiAqIHdoX3JhdGlvKSA6 IDYwOworCisgICAgaWYgKG53ID4gbmggJiYgcHJlZF9tb2RlX2ludHJhID49MiAmJiBwcmVkX21v ZGVfaW50cmEgPCBtYXgpCisgICAgICAgIHByZWRfbW9kZV9pbnRyYSArPSA2NTsKKyAgICBlbHNl IGlmIChuaCA+IG53ICYmIHByZWRfbW9kZV9pbnRyYSA8PSA2NiAmJiBwcmVkX21vZGVfaW50cmEg PiBtaW4pCisgICAgICAgIHByZWRfbW9kZV9pbnRyYSAtPSA2NzsKKyAgICByZXR1cm4gcHJlZF9t b2RlX2ludHJhOworfQpkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy92dmMvdnZjX2ludHJhLmggYi9s aWJhdmNvZGVjL3Z2Yy92dmNfaW50cmEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwLi42YjY3NDAwOGY5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYXZjb2RlYy92dmMvdnZj X2ludHJhLmgKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIFZWQyBpbnRyYSBwcmVkaWN0aW9uCisg KgorICogQ29weXJpZ2h0IChDKSAyMDIxIE51byBNaQorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0 IG9mIEZGbXBlZy4KKyAqCisgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBM aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIEZG bXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBG Rm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24s IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAt MTMwMSBVU0EKKyAqLworI2lmbmRlZiBBVkNPREVDX1ZWQ19WVkNfSU5UUkFfSAorI2RlZmluZSBB VkNPREVDX1ZWQ19WVkNfSU5UUkFfSAorCisjaW5jbHVkZSAidnZjX2N0dS5oIgorCisvKioKKyAq IHJlY29uc3RydWN0IGEgQ1RVCisgKiBAcGFyYW0gbGMgbG9jYWwgY29udGV4dCBmb3IgQ1RVCisg KiBAcGFyYW0gcnMgcmFzdGVyIG9yZGVyIGZvciB0aGUgQ1RVLgorICogQHBhcmFtIHJ4IHJhc3Rl ciBvcmRlciB4IGZvciB0aGUgQ1RVLgorICogQHBhcmFtIHJ5IHJhc3RlciBvcmRlciB5IGZvciB0 aGUgQ1RVLgorICogQHJldHVybiBBVkVSUk9SCisgKi8KK2ludCBmZl92dmNfcmVjb25zdHJ1Y3Qo VlZDTG9jYWxDb250ZXh0ICpsYywgY29uc3QgaW50IHJzLCBjb25zdCBpbnQgcngsIGNvbnN0IGlu dCByeSk7CisKKy8vdXRpbHMgZm9yIHZ2Y19pbnRyYV90ZW1wbGF0ZQoraW50IGZmX3Z2Y19nZXRf dG9wX2F2YWlsYWJsZShjb25zdCBWVkNMb2NhbENvbnRleHQgKmxjLCBpbnQgeDAsIGludCB5MCwg aW50IHRhcmdldF9zaXplLCBpbnQgY19pZHgpOworaW50IGZmX3Z2Y19nZXRfbGVmdF9hdmFpbGFi bGUoY29uc3QgVlZDTG9jYWxDb250ZXh0ICpsYywgaW50IHgwLCBpbnQgeTAsIGludCB0YXJnZXRf c2l6ZSwgaW50IGNfaWR4KTsKK2ludCBmZl92dmNfZ2V0X21pcF9zaXplX2lkKGludCB3LCBpbnQg aCk7CitpbnQgZmZfdnZjX25lZWRfcGRwYyhpbnQgdywgaW50IGgsIHVpbnQ4X3QgYmRwY21fZmxh ZywgaW50IG1vZGUsIGludCByZWZfaWR4KTsKK2ludCBmZl92dmNfbnNjYWxlX2Rlcml2ZShpbnQg dywgaW50IGgsIGludCBtb2RlKTsKK2ludCBmZl92dmNfcmVmX2ZpbHRlcl9mbGFnX2Rlcml2ZShp bnQgbW9kZSk7CitpbnQgZmZfdnZjX2ludHJhX3ByZWRfYW5nbGVfZGVyaXZlKGludCBwcmVkX21v ZGUpOworaW50IGZmX3Z2Y19pbnRyYV9pbnZfYW5nbGVfZGVyaXZlKGludCBwcmVkX21vZGUpOwor aW50IGZmX3Z2Y193aWRlX2FuZ2xlX21vZGVfbWFwcGluZyhjb25zdCBDb2RpbmdVbml0ICpjdSwK KyAgICBpbnQgdGJfd2lkdGgsIGludCB0Yl9oZWlnaHQsIGludCBjX2lkeCwgaW50IHByZWRfbW9k ZV9pbnRyYSk7CisKKyNlbmRpZiAvLyBBVkNPREVDX1ZWQ19WVkNfSU5UUkFfSApkaWZmIC0tZ2l0 IGEvbGliYXZjb2RlYy92dmMvdnZjX2ludHJhX3RlbXBsYXRlLmMgYi9saWJhdmNvZGVjL3Z2Yy92 dmNfaW50cmFfdGVtcGxhdGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw Li45ZmI0NzU0OWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYXZjb2RlYy92dmMvdnZjX2ludHJh X3RlbXBsYXRlLmMKQEAgLTAsMCArMSwxMDE1IEBACisvKgorICogVlZDIGludHJhIHByZWRpY3Rp b24gRFNQCisgKgorICogQ29weXJpZ2h0IChDKSAyMDIxLTIwMjMgTnVvbWkKKyAqCisgKiBUaGlz IGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisgKgorICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7 IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u IDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv bi4KKyAqCisgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl IGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisg KiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0 b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgKi8KKworI2luY2x1ZGUgImxpYmF2Y29kZWMvYml0X2Rl cHRoX3RlbXBsYXRlLmMiCisKKyNpbmNsdWRlICJ2dmNfaW50cmEuaCIKKworI2RlZmluZSBQT1Mo eCwgeSkgc3JjWyh4KSArIHN0cmlkZSAqICh5KV0KKworc3RhdGljIGF2X2Fsd2F5c19pbmxpbmUg dm9pZCBGVU5DKGNjbG1fbGluZWFyX3ByZWQpKFZWQ0ZyYW1lQ29udGV4dCAqZmMsIGNvbnN0IGlu dCB4MCwgY29uc3QgaW50IHkwLAorICAgIGNvbnN0IGludCB3LCBjb25zdCBpbnQgaCwgY29uc3Qg cGl4ZWwqIHBkc3ksIGNvbnN0IGludCAqYSwgY29uc3QgaW50ICpiLCBjb25zdCBpbnQgKmspCit7 CisgICAgY29uc3QgVlZDU1BTICpzcHMgPSBmYy0+cHMuc3BzOworICAgIGZvciAoaW50IGkgPSAw OyBpIDwgVlZDX01BWF9TQU1QTEVfQVJSQVlTIC0gMTsgaSsrKSB7CisgICAgICAgIGNvbnN0IGlu dCBjX2lkeCA9IGkgKyAxOworICAgICAgICBjb25zdCBpbnQgeCA9IHgwID4+IHNwcy0+aHNoaWZ0 W2NfaWR4XTsKKyAgICAgICAgY29uc3QgaW50IHkgPSB5MCA+PiBzcHMtPnZzaGlmdFtjX2lkeF07 CisgICAgICAgIGNvbnN0IHB0cmRpZmZfdCBzdHJpZGUgPSBmYy0+ZnJhbWUtPmxpbmVzaXplW2Nf aWR4XSAvIHNpemVvZihwaXhlbCk7CisgICAgICAgIHBpeGVsICpzcmMgPSAocGl4ZWwqKWZjLT5m cmFtZS0+ZGF0YVtjX2lkeF0gKyB4ICsgeSAqIHN0cmlkZTsKKyAgICAgICAgZm9yIChpbnQgeSA9 IDA7IHkgPCBoOyB5KyspIHsKKyAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgdzsgeCsr KSB7CisgICAgICAgICAgICAgICAgY29uc3QgaW50IGRzeSA9IHBkc3lbeSAqIHcgKyB4XTsKKyAg ICAgICAgICAgICAgICBjb25zdCBpbnQgcHJlZCA9ICgoZHN5ICogYVtpXSkgPj4ga1tpXSkgKyBi W2ldOworICAgICAgICAgICAgICAgIFBPUyh4LCB5KSA9IENMSVAocHJlZCk7CisgICAgICAgICAg ICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKKyNkZWZpbmUgTUFYX1BJQ0tfUE9TIDQKKyNkZWZp bmUgVE9QICAwCisjZGVmaW5lIExFRlQgMQorCitzdGF0aWMgYXZfYWx3YXlzX2lubGluZSB2b2lk IEZVTkMoY2NsbV9nZXRfcGFyYW1zX2RlZmF1bHQpKGludCAqYSwgaW50ICpiLCBpbnQgKmspCit7 CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyBpKyspIHsKKyAgICAgICAgYVtpXSA9IGtbaV0g PSAwOworICAgICAgICBiW2ldID0gMSA8PCAoQklUX0RFUFRIIC0gMSk7CisgICAgfQorfQorCitz dGF0aWMgYXZfYWx3YXlzX2lubGluZSBpbnQgRlVOQyhjY2xtX2dldF9zZWxlY3RfcG9zKShjb25z dCBWVkNMb2NhbENvbnRleHQgKmxjLAorICAgIGNvbnN0IGludCB4LCBjb25zdCBpbnQgeSwgY29u c3QgaW50IHcsIGNvbnN0IGludCBoLCBjb25zdCBpbnQgYXZhaWxfdCwgY29uc3QgaW50IGF2YWls X2wsCisgICAgaW50IGNudFsyXSwgaW50IHBvc1syXVtNQVhfUElDS19QT1NdKQoreworICAgIGNv bnN0IGVudW0gSW50cmFQcmVkTW9kZSBtb2RlID0gbGMtPmN1LT5pbnRyYV9wcmVkX21vZGVfYzsK KyAgICBjb25zdCBpbnQgbnVtX2lzNCA9ICFhdmFpbF90IHx8ICFhdmFpbF9sIHx8IG1vZGUgIT0g SU5UUkFfTFRfQ0NMTTsKKyAgICBpbnQgbnVtX3NhbXBbMl07CisKKyAgICBpZiAobW9kZSA9PSBJ TlRSQV9MVF9DQ0xNKSB7CisgICAgICAgIG51bV9zYW1wW1RPUF0gID0gYXZhaWxfdCA/IHcgOiAw OworICAgICAgICBudW1fc2FtcFtMRUZUXSA9IGF2YWlsX2wgPyBoIDogMDsKKyAgICB9IGVsc2Ug eworICAgICAgICBudW1fc2FtcFtUT1BdID0gKGF2YWlsX3QgJiYgbW9kZSA9PSBJTlRSQV9UX0ND TE0pID8gZmZfdnZjX2dldF90b3BfYXZhaWxhYmxlKGxjLCAgeCwgeSwgdyArIEZGTUlOKHcsIGgp LCAxKSA6IDA7CisgICAgICAgIG51bV9zYW1wW0xFRlRdID0gKGF2YWlsX2wgJiYgbW9kZSA9PSBJ TlRSQV9MX0NDTE0pID8gZmZfdnZjX2dldF9sZWZ0X2F2YWlsYWJsZShsYywgeCwgeSwgaCArIEZG TUlOKHcsIGgpLCAxKSA6IDA7CisgICAgfQorICAgIGlmICghbnVtX3NhbXBbVE9QXSAmJiAhbnVt X3NhbXBbTEVGVF0pIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGZvciAoaW50IGkg PSBUT1A7IGkgPD0gTEVGVDsgaSsrKSB7CisgICAgICAgIGNvbnN0IGludCBzdGFydCA9IG51bV9z YW1wW2ldID4+ICgyICsgbnVtX2lzNCk7CisgICAgICAgIGNvbnN0IGludCBzdGVwICA9IEZGTUFY KDEsIG51bV9zYW1wW2ldID4+ICgxICsgbnVtX2lzNCkpIDsKKyAgICAgICAgY250W2ldID0gRkZN SU4obnVtX3NhbXBbaV0sICgxICsgbnVtX2lzNCkgPDwgMSk7CisgICAgICAgIGZvciAoaW50IGMg PSAwOyBjIDwgY250W2ldOyBjKyspCisgICAgICAgICAgICBwb3NbaV1bY10gPSBzdGFydCArIGMg KiBzdGVwOworICAgIH0KKyAgICByZXR1cm4gMTsKK30KKworc3RhdGljIGF2X2Fsd2F5c19pbmxp bmUgdm9pZCBGVU5DKGNjbG1fc2VsZWN0X2x1bWFfNDQ0KShjb25zdCBwaXhlbCAqc3JjLCBjb25z dCBpbnQgc3RlcCwKKyAgICBjb25zdCBpbnQgY250LCBjb25zdCBpbnQgcG9zW01BWF9QSUNLX1BP U10sICBwaXhlbCAqc2VsX2x1bWEpCit7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjbnQ7IGkr KykKKyAgICAgICAgc2VsX2x1bWFbaV0gPSBzcmNbcG9zW2ldICogc3RlcF07Cit9CisKK3N0YXRp YyBhdl9hbHdheXNfaW5saW5lIHZvaWQgRlVOQyhjY2xtX3NlbGVjdF9sdW1hKShjb25zdCBWVkNG cmFtZUNvbnRleHQgKmZjLAorICAgIGNvbnN0IGludCB4MCwgY29uc3QgaW50IHkwLCBjb25zdCBp bnQgYXZhaWxfdCwgY29uc3QgaW50IGF2YWlsX2wsIGNvbnN0IGludCBjbnRbMl0sIGNvbnN0IGlu dCBwb3NbMl1bTUFYX1BJQ0tfUE9TXSwKKyAgICBwaXhlbCAqc2VsX2x1bWEpCit7CisgICAgY29u c3QgVlZDU1BTICpzcHMgPSBmYy0+cHMuc3BzOworCisgICAgY29uc3QgaW50IGJfY3R1X2JvdW5k YXJ5ID0gIWF2X21vZF91aW50cDIoeTAsIHNwcy0+Y3RiX2xvZzJfc2l6ZV95KTsKKyAgICBjb25z dCBpbnQgaHMgPSBzcHMtPmhzaGlmdFsxXTsKKyAgICBjb25zdCBpbnQgdnMgPSBzcHMtPnZzaGlm dFsxXTsKKyAgICBjb25zdCBwdHJkaWZmX3Qgc3RyaWRlID0gZmMtPmZyYW1lLT5saW5lc2l6ZVsw XSAvIHNpemVvZihwaXhlbCk7CisKKyAgICBpZiAoIWhzICYmICF2cykgeworICAgICAgICBjb25z dCBwaXhlbCogc3JjID0gKHBpeGVsKilmYy0+ZnJhbWUtPmRhdGFbMF0gKyB4MCArIHkwICogc3Ry aWRlOworICAgICAgICBGVU5DKGNjbG1fc2VsZWN0X2x1bWFfNDQ0KShzcmMgLSBhdmFpbF90ICog c3RyaWRlLCAxLCBjbnRbVE9QXSwgcG9zW1RPUF0sIHNlbF9sdW1hKTsKKyAgICAgICAgRlVOQyhj Y2xtX3NlbGVjdF9sdW1hXzQ0NCkoc3JjIC0gYXZhaWxfbCwgc3RyaWRlLCBjbnRbTEVGVF0sIHBv c1tMRUZUXSwgc2VsX2x1bWEgKyBjbnRbVE9QXSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8g dG9wCisgICAgICAgIGlmICh2cyAmJiAhYl9jdHVfYm91bmRhcnkpIHsKKyAgICAgICAgICAgIGNv bnN0IHBpeGVsICpzb3VyY2UgPSAocGl4ZWwgKilmYy0+ZnJhbWUtPmRhdGFbMF0gKyB4MCArICh5 MCAtIDIpICogc3RyaWRlOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjbnRbVE9Q XTsgaSsrKSB7CisgICAgICAgICAgICAgICAgY29uc3QgaW50IHggPSBwb3NbVE9QXVtpXSA8PCBo czsKKyAgICAgICAgICAgICAgICBjb25zdCBwaXhlbCAqc3JjID0gc291cmNlICsgeDsKKyAgICAg ICAgICAgICAgICBjb25zdCBpbnQgaGFzX2xlZnQgPSB4IHx8IGF2YWlsX2w7CisgICAgICAgICAg ICAgICAgY29uc3QgcGl4ZWwgbCA9IGhhc19sZWZ0ID8gUE9TKC0xLCAwKSA6IFBPUygwLCAwKTsK KyAgICAgICAgICAgICAgICBpZiAoc3BzLT5yLT5zcHNfY2hyb21hX3ZlcnRpY2FsX2NvbGxvY2F0 ZWRfZmxhZykgeworICAgICAgICAgICAgICAgICAgICBzZWxfbHVtYVtpXSA9IChQT1MoMCwgLTEp ICsgbCArIDQgKiBQT1MoMCwgMCkgKyBQT1MoMSwgMCkgKyBQT1MoMCwgMSkgKyA0KSA+PiAzOwor ICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBpeGVs IGwxID0gaGFzX2xlZnQgPyBQT1MoLTEsIDEpIDogUE9TKDAsIDEpOworICAgICAgICAgICAgICAg ICAgICBzZWxfbHVtYVtpXSA9IChsICsgbDEgKyAyICogKFBPUygwLCAwKSArIFBPUygwLCAxKSkg KyBQT1MoMSwgMCkgKyBQT1MoMSwgMSkgKyA0KSA+PiAzOworICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNvbnN0IHBpeGVsICpz b3VyY2UgPSAocGl4ZWwqKWZjLT5mcmFtZS0+ZGF0YVswXSArIHgwICsgKHkwIC0gMSkgKiBzdHJp ZGU7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNudFtUT1BdOyBpKyspIHsKKyAg ICAgICAgICAgICAgICBjb25zdCBpbnQgeCA9IHBvc1tUT1BdW2ldIDw8IGhzOworICAgICAgICAg ICAgICAgIGNvbnN0IHBpeGVsICpzcmMgPSBzb3VyY2UgKyB4OworICAgICAgICAgICAgICAgIGNv bnN0IGludCBoYXNfbGVmdCA9IHggfHwgYXZhaWxfbDsKKyAgICAgICAgICAgICAgICBjb25zdCBw aXhlbCBsID0gaGFzX2xlZnQgPyBQT1MoLTEsIDApIDogUE9TKDAsIDApOworICAgICAgICAgICAg ICAgIHNlbF9sdW1hW2ldID0gKGwgKyAyICogUE9TKDAsIDApICsgUE9TKDEsIDApICsgMikgPj4g MjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIGxlZnQKKyAgICAgICAg eworICAgICAgICAgICAgY29uc3QgcGl4ZWwgKmxlZnQ7CisgICAgICAgICAgICBjb25zdCBwaXhl bCAqc291cmNlID0gKHBpeGVsICopZmMtPmZyYW1lLT5kYXRhWzBdICsgeDAgKyB5MCAqIHN0cmlk ZSAtICgxICsgaHMpICogYXZhaWxfbDsKKyAgICAgICAgICAgIGxlZnQgPSBzb3VyY2UgLSBhdmFp bF9sOworCisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNudFtMRUZUXTsgaSsrKSB7 CisgICAgICAgICAgICAgICAgY29uc3QgaW50IHkgPSBwb3NbTEVGVF1baV0gPDwgdnM7CisgICAg ICAgICAgICAgICAgY29uc3QgaW50IG9mZnNldCA9IHkgKiBzdHJpZGU7CisgICAgICAgICAgICAg ICAgY29uc3QgcGl4ZWwgKmwgICA9IGxlZnQgKyBvZmZzZXQ7CisgICAgICAgICAgICAgICAgY29u c3QgcGl4ZWwgKnNyYyA9IHNvdXJjZSArIG9mZnNldDsKKyAgICAgICAgICAgICAgICBwaXhlbCBw cmVkOworICAgICAgICAgICAgICAgIGlmICghdnMpIHsKKyAgICAgICAgICAgICAgICAgICAgcHJl ZCA9ICgqbCArIDIgKiBQT1MoMCwgMCkgKyBQT1MoMSwgMCkgKyAyKSA+PiAyOworICAgICAgICAg ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChzcHMtPnItPnNwc19jaHJv bWFfdmVydGljYWxfY29sbG9jYXRlZF9mbGFnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBpbnQgaGFzX3RvcCA9IHkgfHwgYXZhaWxfdDsKKyAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IHBpeGVsIHQgPSBoYXNfdG9wID8gUE9TKDAsIC0xKSA6IFBPUygwLCAwKTsKKyAgICAg ICAgICAgICAgICAgICAgICAgIHByZWQgPSAoKmwgKyB0ICsgNCAqIFBPUygwLCAwKSArIFBPUygx LCAwKSArIFBPUygwLCAxKSArIDQpID4+IDM7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7 CisgICAgICAgICAgICAgICAgICAgICAgICBwcmVkID0gKCpsICsgKihsICsgc3RyaWRlKSArIDIg KiBQT1MoMCwgMCkgKyAyICogUE9TKDAsIDEpICsgUE9TKDEsIDApICsgUE9TKDEsIDEpICsgNCkg Pj4gMzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICAgICBzZWxfbHVtYVtpICsgY250W1RPUF1dID0gcHJlZDsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgfQorICAgIH0KK30KKworc3RhdGljIGF2X2Fsd2F5c19pbmxpbmUgdm9pZCBGVU5DKGNj bG1fc2VsZWN0X2Nocm9tYSkoY29uc3QgVlZDRnJhbWVDb250ZXh0ICpmYywKKyAgICBjb25zdCBp bnQgeCwgY29uc3QgaW50IHksIGNvbnN0IGludCBjbnRbMl0sIGNvbnN0IGludCBwb3NbMl1bTUFY X1BJQ0tfUE9TXSwKKyAgICBwaXhlbCBzZWxbXVtNQVhfUElDS19QT1MgKiAyXSkKK3sKKyAgICBm b3IgKGludCBjX2lkeCA9IDE7IGNfaWR4IDwgVlZDX01BWF9TQU1QTEVfQVJSQVlTOyBjX2lkeCsr KSB7CisgICAgICAgIGNvbnN0IHB0cmRpZmZfdCBzdHJpZGUgPSBmYy0+ZnJhbWUtPmxpbmVzaXpl W2NfaWR4XSAvIHNpemVvZihwaXhlbCk7CisKKyAgICAgICAgLy90b3AKKyAgICAgICAgY29uc3Qg cGl4ZWwgKnNyYyA9IChwaXhlbCopZmMtPmZyYW1lLT5kYXRhW2NfaWR4XSArIHggKyAoeSAtIDEp KiBzdHJpZGU7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY250W1RPUF07IGkrKykgewor ICAgICAgICAgICAgc2VsW2NfaWR4XVtpXSA9IHNyY1twb3NbVE9QXVtpXV07CisgICAgICAgIH0K KworICAgICAgICAvL2xlZnQKKyAgICAgICAgc3JjID0gKHBpeGVsKilmYy0+ZnJhbWUtPmRhdGFb Y19pZHhdICsgeCAtIDEgKyB5ICogc3RyaWRlOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8 IGNudFtMRUZUXTsgaSsrKSB7CisgICAgICAgICAgICBzZWxbY19pZHhdW2kgKyBjbnRbVE9QXV0g PSBzcmNbcG9zW0xFRlRdW2ldICogc3RyaWRlXTsKKyAgICAgICAgfQorICAgIH0KK30KKworc3Rh dGljIGF2X2Fsd2F5c19pbmxpbmUgaW50IEZVTkMoY2NsbV9zZWxlY3Rfc2FtcGxlcykoY29uc3Qg VlZDTG9jYWxDb250ZXh0ICpsYywKKyAgICBjb25zdCBpbnQgeDAsIGNvbnN0IGludCB5MCwgY29u c3QgaW50IHcsIGNvbnN0IGludCBoLCBjb25zdCBpbnQgYXZhaWxfdCwgY29uc3QgaW50IGF2YWls X2wsCisgICAgcGl4ZWwgc2VsW11bTUFYX1BJQ0tfUE9TICogMl0pCit7CisgICAgY29uc3QgVlZD RnJhbWVDb250ZXh0ICpmYyA9IGxjLT5mYzsKKyAgICBjb25zdCBWVkNTUFMgKnNwcyAgID0gZmMt PnBzLnNwczsKKyAgICBjb25zdCBpbnQgeCAgPSB4MCA+PiBzcHMtPmhzaGlmdFsxXTsKKyAgICBj b25zdCBpbnQgeSAgPSB5MCA+PiBzcHMtPnZzaGlmdFsxXTsKKyAgICBpbnQgY250WzJdLCBwb3Nb Ml1bTUFYX1BJQ0tfUE9TXTsKKworICAgIGlmICghRlVOQyhjY2xtX2dldF9zZWxlY3RfcG9zKShs YywgeCwgeSwgdywgaCwgYXZhaWxfdCwgYXZhaWxfbCwgY250LCBwb3MpKQorICAgICAgICByZXR1 cm4gMDsKKworICAgIEZVTkMoY2NsbV9zZWxlY3RfbHVtYSkoZmMsIHgwLCB5MCwgYXZhaWxfdCwg YXZhaWxfbCwgY250LCBwb3MsIHNlbFtMVU1BXSk7CisgICAgRlVOQyhjY2xtX3NlbGVjdF9jaHJv bWEpKGZjLCB4LCB5LCBjbnQsIHBvcywgc2VsKTsKKworICAgIGlmIChjbnRbVE9QXSArIGNudFtM RUZUXSA9PSAyKSB7CisgICAgICAgIGZvciAoaW50IGNfaWR4ID0gMDsgY19pZHggPCBWVkNfTUFY X1NBTVBMRV9BUlJBWVM7IGNfaWR4KyspIHsKKyAgICAgICAgICAgIHNlbFtjX2lkeF1bM10gPSBz ZWxbY19pZHhdWzBdOworICAgICAgICAgICAgc2VsW2NfaWR4XVsyXSA9IHNlbFtjX2lkeF1bMV07 CisgICAgICAgICAgICBzZWxbY19pZHhdWzBdID0gc2VsW2NfaWR4XVsxXTsKKyAgICAgICAgICAg IHNlbFtjX2lkeF1bMV0gPSBzZWxbY19pZHhdWzNdOworICAgICAgICB9CisgICAgfQorICAgIHJl dHVybiAxOworfQorCitzdGF0aWMgYXZfYWx3YXlzX2lubGluZSB2b2lkIEZVTkMoY2NsbV9nZXRf bWluX21heCkoCisgICAgY29uc3QgcGl4ZWwgc2VsW11bTUFYX1BJQ0tfUE9TICogMl0sIGludCAq bWluLCBpbnQgKm1heCkKK3sKKyAgICBpbnQgbWluX2dycF9pZHhbXSA9IHsgMCwgMiB9OworICAg IGludCBtYXhfZ3JwX2lkeFtdID0geyAxLCAzIH07CisKKyAgICBpZiAoc2VsW0xVTUFdW21pbl9n cnBfaWR4WzBdXSA+IHNlbFtMVU1BXVttaW5fZ3JwX2lkeFsxXV0pCisgICAgICAgIEZGU1dBUChp bnQsIG1pbl9ncnBfaWR4WzBdLCBtaW5fZ3JwX2lkeFsxXSk7CisgICAgaWYgKHNlbFtMVU1BXVtt YXhfZ3JwX2lkeFswXV0gPiBzZWxbTFVNQV1bbWF4X2dycF9pZHhbMV1dKQorICAgICAgICBGRlNX QVAoaW50LCBtYXhfZ3JwX2lkeFswXSwgbWF4X2dycF9pZHhbMV0pOworICAgIGlmIChzZWxbTFVN QV1bbWluX2dycF9pZHhbMF1dID4gc2VsW0xVTUFdW21heF9ncnBfaWR4WzFdXSkgeworICAgICAg ICBGRlNXQVAoaW50LCBtaW5fZ3JwX2lkeFswXSwgbWF4X2dycF9pZHhbMF0pOworICAgICAgICBG RlNXQVAoaW50LCBtaW5fZ3JwX2lkeFsxXSwgbWF4X2dycF9pZHhbMV0pOworICAgIH0KKyAgICBp ZiAoc2VsW0xVTUFdW21pbl9ncnBfaWR4WzFdXSA+IHNlbFtMVU1BXVttYXhfZ3JwX2lkeFswXV0p CisgICAgICAgIEZGU1dBUChpbnQsIG1pbl9ncnBfaWR4WzFdLCBtYXhfZ3JwX2lkeFswXSk7Cisg ICAgZm9yIChpbnQgY19pZHggPSAwOyBjX2lkeCA8IFZWQ19NQVhfU0FNUExFX0FSUkFZUzsgY19p ZHgrKykgeworICAgICAgICBtYXhbY19pZHhdID0gKHNlbFtjX2lkeF1bbWF4X2dycF9pZHhbMF1d ICsgc2VsW2NfaWR4XVttYXhfZ3JwX2lkeFsxXV0gKyAxKSA+PiAxOworICAgICAgICBtaW5bY19p ZHhdID0gKHNlbFtjX2lkeF1bbWluX2dycF9pZHhbMF1dICsgc2VsW2NfaWR4XVttaW5fZ3JwX2lk eFsxXV0gKyAxKSA+PiAxOworICAgIH0KK30KKworc3RhdGljIGF2X2Fsd2F5c19pbmxpbmUgdm9p ZCBGVU5DKGNjbG1fZ2V0X3BhcmFtcykoY29uc3QgVlZDTG9jYWxDb250ZXh0ICpsYywKKyAgICBj b25zdCBpbnQgeDAsIGNvbnN0IGludCB5MCwgY29uc3QgaW50IHcsIGNvbnN0IGludCBoLCBjb25z dCBpbnQgYXZhaWxfdCwgY29uc3QgaW50IGF2YWlsX2wsCisgICAgaW50ICphLCBpbnQgKmIsIGlu dCAqaykKK3sKKyAgICBwaXhlbCBzZWxbVlZDX01BWF9TQU1QTEVfQVJSQVlTXVtNQVhfUElDS19Q T1MgKiAyXTsKKyAgICBpbnQgbWF4W1ZWQ19NQVhfU0FNUExFX0FSUkFZU10sIG1pbltWVkNfTUFY X1NBTVBMRV9BUlJBWVNdOworICAgIGludCBkaWZmOworCisgICAgaWYgKCFGVU5DKGNjbG1fc2Vs ZWN0X3NhbXBsZXMpKGxjLCB4MCwgeTAsIHcsIGgsIGF2YWlsX3QsIGF2YWlsX2wsIHNlbCkpIHsK KyAgICAgICAgRlVOQyhjY2xtX2dldF9wYXJhbXNfZGVmYXVsdCkoYSwgYiwgayk7CisgICAgICAg IHJldHVybjsKKyAgICB9CisKKyAgICBGVU5DKGNjbG1fZ2V0X21pbl9tYXgpKHNlbCwgbWluLCBt YXgpOworCisgICAgZGlmZiA9IG1heFtMVU1BXSAtIG1pbltMVU1BXTsKKyAgICBpZiAoZGlmZiA9 PSAwKSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgaSsrKSB7CisgICAgICAgICAg ICBhW2ldID0ga1tpXSA9IDA7CisgICAgICAgICAgICBiW2ldID0gbWluW2kgKyAxXTsKKyAgICAg ICAgfQorICAgICAgICByZXR1cm47CisgICAgfQorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjsg aSsrKSB7CisgICAgICAgIGNvbnN0IHN0YXRpYyBpbnQgZGl2X3NpZ190YWJsZVtdID0gezAsIDcs IDYsIDUsIDUsIDQsIDQsIDMsIDMsIDIsIDIsIDEsIDEsIDEsIDEsIDB9OworICAgICAgICBjb25z dCBpbnQgZGlmZmMgPSBtYXhbaSArIDFdIC0gbWluW2kgKyAxXTsKKyAgICAgICAgaW50ICB4ID0g YXZfbG9nMihkaWZmKTsKKyAgICAgICAgaW50ICB5LCB2LCBzaWduLCBhZGQ7CisgICAgICAgIGNv bnN0IGludCBub3JtX2RpZmYgPSAoKGRpZmYgPDwgNCkgPj4geCkgJiAxNTsKKyAgICAgICAgeCAr PSAobm9ybV9kaWZmKSA/IDEgOiAwOworICAgICAgICB5ID0gYWJzKGRpZmZjKSA+IDAgPyBhdl9s b2cyKGFicyhkaWZmYykpICsgMSA6IDA7CisgICAgICAgIHYgPSBkaXZfc2lnX3RhYmxlW25vcm1f ZGlmZl0gfCA4OworICAgICAgICBhZGQgPSAoMSA8PCB5ID4+IDEpOworICAgICAgICBhW2ldID0g KGRpZmZjICogdiArIGFkZCkgPj4geTsKKyAgICAgICAga1tpXSA9IEZGTUFYKDEsIDMgKyB4IC15 KTsKKyAgICAgICAgc2lnbiA9IGFbaV0gPCAwID8gLTEgOiAoYVtpXSA+IDApOworICAgICAgICBh W2ldID0gKCgzICsgeCAtIHkpIDwgMSkgPyAgc2lnbiAqIDE1IDogYVtpXTsKKyAgICAgICAgYltp XSA9IG1pbltpICsgMV0gLSAoKGFbaV0gKiBtaW5bMF0pID4+IGtbaV0pOworICAgIH0KKworfQor CisjdW5kZWYgVE9QCisjdW5kZWYgTEVGVAorCitzdGF0aWMgYXZfYWx3YXlzX2lubGluZSB2b2lk IEZVTkMoY2NsbV9nZXRfbHVtYV9yZWNfcGl4ZWxzKShjb25zdCBWVkNGcmFtZUNvbnRleHQgKmZj LAorICAgIGNvbnN0IGludCB4MCwgY29uc3QgaW50IHkwLCBjb25zdCBpbnQgdywgY29uc3QgaW50 IGgsIGNvbnN0IGludCBhdmFpbF90LCBjb25zdCBpbnQgYXZhaWxfbCwKKyAgICBwaXhlbCAqcGRz eSkKK3sKKyAgICBjb25zdCBpbnQgaHMgICAgICAgICAgICA9IGZjLT5wcy5zcHMtPmhzaGlmdFsx XTsKKyAgICBjb25zdCBpbnQgdnMgICAgICAgICAgICA9IGZjLT5wcy5zcHMtPnZzaGlmdFsxXTsK KyAgICBjb25zdCBwdHJkaWZmX3Qgc3RyaWRlICA9IGZjLT5mcmFtZS0+bGluZXNpemVbMF0gLyBz aXplb2YocGl4ZWwpOworICAgIGNvbnN0IHBpeGVsICpzb3VyY2UgICAgID0gKHBpeGVsKilmYy0+ ZnJhbWUtPmRhdGFbMF0gKyB4MCArIHkwICogc3RyaWRlOworICAgIGNvbnN0IHBpeGVsICpsZWZ0 ICAgICAgID0gc291cmNlIC0gYXZhaWxfbDsKKyAgICBjb25zdCBwaXhlbCAqdG9wICAgICAgICA9 IHNvdXJjZSAtIGF2YWlsX3QgKiBzdHJpZGU7CisKKyAgICBjb25zdCBWVkNTUFMgKnNwcyA9IGZj LT5wcy5zcHM7CisgICAgaWYgKCFocyAmJiAhdnMpIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7 IGkgPCBoOyBpKyspCisgICAgICAgICAgICBtZW1jcHkocGRzeSArIGkgKiB3LCBzb3VyY2UgKyBp ICogc3RyaWRlLCB3ICogc2l6ZW9mKHBpeGVsKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBoOyBpKyspIHsKKyAgICAgICAgY29uc3QgcGl4ZWwgKnNy YyAgPSBzb3VyY2U7CisgICAgICAgIGNvbnN0IHBpeGVsICpsID0gbGVmdDsKKyAgICAgICAgY29u c3QgcGl4ZWwgKnQgPSB0b3A7CisgICAgICAgIGlmICghdnMpIHsKKyAgICAgICAgICAgIGZvciAo aW50IGogPSAwOyBqIDwgdzsgaisrKSB7CisgICAgICAgICAgICAgICAgcGl4ZWwgcHJlZCAgPSAo KmwgKyAyICogUE9TKDAsIDApICsgUE9TKDEsIDApICsgMikgPj4gMjsKKyAgICAgICAgICAgICAg ICBwZHN5W2kgKiB3ICsgal0gPSBwcmVkOworICAgICAgICAgICAgICAgIHNyYyArPSAyOworICAg ICAgICAgICAgICAgIGwgPSBzcmMgLSAxOworICAgICAgICAgICAgfQorCisgICAgICAgIH0gZWxz ZSB7CisgICAgICAgICAgICBpZiAoc3BzLT5yLT5zcHNfY2hyb21hX3ZlcnRpY2FsX2NvbGxvY2F0 ZWRfZmxhZykgIHsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHc7IGorKykg eworICAgICAgICAgICAgICAgICAgICBwaXhlbCBwcmVkICA9ICgqbCArICp0ICsgNCAqIFBPUygw LCAwKSArIFBPUygxLCAwKSArIFBPUygwLCAxKSArIDQpID4+IDM7CisgICAgICAgICAgICAgICAg ICAgIHBkc3lbaSAqIHcgKyBqXSA9IHByZWQ7CisgICAgICAgICAgICAgICAgICAgIHNyYyArPSAy OworICAgICAgICAgICAgICAgICAgICB0ICs9IDI7CisgICAgICAgICAgICAgICAgICAgIGwgPSBz cmMgLSAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg ICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCB3OyBqKyspIHsKKyAgICAgICAgICAgICAgICAg ICAgcGl4ZWwgcHJlZCAgPSAoKmwgKyAqKGwgKyBzdHJpZGUpICsgMiAqIFBPUygwLCAwKSArIDIg KiBQT1MoMCwgMSkgKyBQT1MoMSwgMCkgKyBQT1MoMSwgMSkgKyA0KSA+PiAzOworCisgICAgICAg ICAgICAgICAgICAgIHBkc3lbaSAqIHcgKyBqXSA9IHByZWQ7CisgICAgICAgICAgICAgICAgICAg IHNyYyArPSAyOworICAgICAgICAgICAgICAgICAgICBsID0gc3JjIC0gMTsKKyAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgc291cmNlICs9IChzdHJp ZGUgPDwgdnMpOworICAgICAgICBsZWZ0ICAgKz0gKHN0cmlkZSA8PCB2cyk7CisgICAgICAgIHRv cCAgICA9IHNvdXJjZSAtIHN0cmlkZTsKKyAgICB9Cit9CisKK3N0YXRpYyBhdl9hbHdheXNfaW5s aW5lIHZvaWQgRlVOQyhjY2xtX3ByZWRfZGVmYXVsdCkoVlZDRnJhbWVDb250ZXh0ICpmYywKKyAg ICBjb25zdCBpbnQgeCwgY29uc3QgaW50IHksIGNvbnN0IGludCB3LCBjb25zdCBpbnQgaCwgY29u c3QgaW50IGF2YWlsX3QsIGNvbnN0IGludCBhdmFpbF9sKQoreworICAgIGZvciAoaW50IGNfaWR4 ID0gMTsgY19pZHggPCBWVkNfTUFYX1NBTVBMRV9BUlJBWVM7IGNfaWR4KyspIHsKKyAgICAgICAg Y29uc3QgcHRyZGlmZl90IHN0cmlkZSA9IGZjLT5mcmFtZS0+bGluZXNpemVbY19pZHhdIC8gc2l6 ZW9mKHBpeGVsKTsKKyAgICAgICAgcGl4ZWwgKmRzdCA9IChwaXhlbCopZmMtPmZyYW1lLT5kYXRh W2NfaWR4XSArIHggKyB5ICogc3RyaWRlOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGg7 IGkrKykgeworICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCB3OyBqKyspIHsKKyAgICAg ICAgICAgICAgICBkc3Rbal0gPSAxIDw8IChCSVRfREVQVEggLSAxKTsKKyAgICAgICAgICAgIH0K KyAgICAgICAgICAgIGRzdCArPSBzdHJpZGU7CisgICAgICAgIH0KKyAgICB9Cit9CisKKy8vOC40 LjUuMi4xNCBTcGVjaWZpY2F0aW9uIG9mIElOVFJBX0xUX0NDTE0sIElOVFJBX0xfQ0NMTSBhbmQg SU5UUkFfVF9DQ0xNIGludHJhIHByZWRpY3Rpb24gbW9kZQorc3RhdGljIHZvaWQgRlVOQyhpbnRy YV9jY2xtX3ByZWQpKGNvbnN0IFZWQ0xvY2FsQ29udGV4dCAqbGMsIGNvbnN0IGludCB4MCwgY29u c3QgaW50IHkwLAorICAgIGNvbnN0IGludCB3aWR0aCwgY29uc3QgaW50IGhlaWdodCkKK3sKKyAg ICBWVkNGcmFtZUNvbnRleHQgKmZjICAgICA9IGxjLT5mYzsKKyAgICBjb25zdCBWVkNTUFMgKnNw cyA9IGZjLT5wcy5zcHM7CisgICAgY29uc3QgaW50IGF2YWlsX3QgPSBmZl92dmNfZ2V0X3RvcF9h dmFpbGFibGUobGMsIHgwLCB5MCwgMSwgMCk7CisgICAgY29uc3QgaW50IGF2YWlsX2wgPSBmZl92 dmNfZ2V0X2xlZnRfYXZhaWxhYmxlKGxjLCB4MCwgeTAsIDEsIDApOworICAgIGNvbnN0IGludCBo cyA9IHNwcy0+aHNoaWZ0WzFdOworICAgIGNvbnN0IGludCB2cyA9IHNwcy0+dnNoaWZ0WzFdOwor ICAgIGNvbnN0IGludCB4ICA9IHgwID4+IGhzOworICAgIGNvbnN0IGludCB5ICA9IHkwID4+IHZz OworICAgIGNvbnN0IGludCB3ICA9IHdpZHRoID4+IGhzOworICAgIGNvbnN0IGludCBoICA9IGhl aWdodCA+PiB2czsKKyAgICBpbnQgYVsyXSwgYlsyXSwga1syXTsKKworICAgIHBpeGVsIGRzeVtN QVhfVEJfU0laRSAqIE1BWF9UQl9TSVpFXTsKKyAgICBpZiAoIWF2YWlsX3QgJiYgIWF2YWlsX2wp IHsKKyAgICAgICAgRlVOQyhjY2xtX3ByZWRfZGVmYXVsdCkoZmMsIHgsIHksIHcsIGgsIGF2YWls X3QsIGF2YWlsX2wpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEZVTkMoY2NsbV9nZXRf bHVtYV9yZWNfcGl4ZWxzKShmYywgeDAsIHkwLCB3LCBoLCBhdmFpbF90LCBhdmFpbF9sLCBkc3kp OworICAgIEZVTkMoY2NsbV9nZXRfcGFyYW1zKSAobGMsIHgwLCB5MCwgdywgaCwgYXZhaWxfdCwg YXZhaWxfbCwgYSwgYiwgayk7CisgICAgRlVOQyhjY2xtX2xpbmVhcl9wcmVkKShmYywgeDAsIHkw LCB3LCBoLCBkc3ksIGEsIGIsIGspOworfQorCitzdGF0aWMgaW50IEZVTkMobG1jc19zdW1fc2Ft cGxlcykoY29uc3QgcGl4ZWwgKnN0YXJ0LCBwdHJkaWZmX3Qgc3RyaWRlLCBjb25zdCBpbnQgYXZh aWwsIGNvbnN0IGludCB0YXJnZXRfc2l6ZSkKK3sKKyAgICBjb25zdCBpbnQgc2l6ZSA9IEZGTUlO KGF2YWlsLCB0YXJnZXRfc2l6ZSk7CisgICAgaW50IHN1bSA9IDA7CisgICAgZm9yIChpbnQgaSA9 IDA7IGkgPCBzaXplOyBpKyspIHsKKyAgICAgICAgc3VtICs9ICpzdGFydDsKKyAgICAgICAgc3Rh cnQgKz0gc3RyaWRlOworICAgIH0KKyAgICBzdW0gKz0gKihzdGFydCAtIHN0cmlkZSkgKiAodGFy Z2V0X3NpemUgLSBzaXplKTsKKyAgICByZXR1cm4gc3VtOworfQorCisvLyA4LjcuNS4zIFBpY3R1 cmUgcmVjb25zdHJ1Y3Rpb24gd2l0aCBsdW1hIGRlcGVuZGVudCBjaHJvbWEgcmVzaWR1YWwgc2Nh bGluZyBwcm9jZXNzIGZvciBjaHJvbWEgc2FtcGxlcworc3RhdGljIGludCBGVU5DKGxtY3NfZGVy aXZlX2Nocm9tYV9zY2FsZSkoVlZDTG9jYWxDb250ZXh0ICpsYywgY29uc3QgaW50IHgwLCBjb25z dCBpbnQgeTApCit7CisgICAgVlZDRnJhbWVDb250ZXh0ICpmYyA9IGxjLT5mYzsKKyAgICBjb25z dCBWVkNMTUNTICpsbWNzID0gJmZjLT5wcy5sbWNzOworICAgIGNvbnN0IGludCBzaXplX3kgICAg PSBGRk1JTihmYy0+cHMuc3BzLT5jdGJfc2l6ZV95LCA2NCk7CisKKyAgICBjb25zdCBpbnQgeCA9 IHgwICYgfihzaXplX3kgLSAxKTsKKyAgICBjb25zdCBpbnQgeSA9IHkwICYgfihzaXplX3kgLSAx KTsKKyAgICBpZiAobGMtPmxtY3MueF92cGR1ICE9IHggfHwgbGMtPmxtY3MueV92cGR1ICE9IHkp IHsKKyAgICAgICAgaW50IGNudCA9IDAsIGx1bWEgPSAwLCBpOworICAgICAgICBjb25zdCBwaXhl bCAqc3JjID0gKGNvbnN0IHBpeGVsICopKGZjLT5mcmFtZS0+ZGF0YVtMVU1BXSArIHkgKiBmYy0+ ZnJhbWUtPmxpbmVzaXplW0xVTUFdICsgKHggPDwgZmMtPnBzLnNwcy0+cGl4ZWxfc2hpZnQpKTsK KyAgICAgICAgY29uc3QgcHRyZGlmZl90IHN0cmlkZSA9IGZjLT5mcmFtZS0+bGluZXNpemVbTFVN QV0gLyBzaXplb2YocGl4ZWwpOworICAgICAgICBjb25zdCBpbnQgYXZhaWxfdCA9IGZmX3Z2Y19n ZXRfdG9wX2F2YWlsYWJsZSAobGMsIHgsIHksIDEsIDApOworICAgICAgICBjb25zdCBpbnQgYXZh aWxfbCA9IGZmX3Z2Y19nZXRfbGVmdF9hdmFpbGFibGUobGMsIHgsIHksIDEsIDApOworICAgICAg ICBpZiAoYXZhaWxfbCkgeworICAgICAgICAgICAgbHVtYSArPSBGVU5DKGxtY3Nfc3VtX3NhbXBs ZXMpKHNyYyAtIDEsIHN0cmlkZSwgZmMtPnBzLnBwcy0+aGVpZ2h0IC0geSwgc2l6ZV95KTsKKyAg ICAgICAgICAgIGNudCA9IHNpemVfeTsKKyAgICAgICAgfQorICAgICAgICBpZiAoYXZhaWxfdCkg eworICAgICAgICAgICAgbHVtYSArPSBGVU5DKGxtY3Nfc3VtX3NhbXBsZXMpKHNyYyAtIHN0cmlk ZSwgMSwgZmMtPnBzLnBwcy0+d2lkdGggLSB4LCBzaXplX3kpOworICAgICAgICAgICAgY250ICs9 IHNpemVfeTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY250KQorICAgICAgICAgICAgbHVtYSA9 IChsdW1hICsgKGNudCA+PiAxKSkgPj4gYXZfbG9nMihjbnQpOworICAgICAgICBlbHNlCisgICAg ICAgICAgICBsdW1hID0gMSA8PCAoQklUX0RFUFRIIC0gMSk7CisKKyAgICAgICAgZm9yIChpID0g bG1jcy0+bWluX2Jpbl9pZHg7IGkgPD0gbG1jcy0+bWF4X2Jpbl9pZHg7IGkrKykgeworICAgICAg ICAgICAgaWYgKGx1bWEgPCBsbWNzLT5waXZvdFtpICsgMV0pCisgICAgICAgICAgICAgICAgYnJl YWs7CisgICAgICAgIH0KKyAgICAgICAgaSA9IEZGTUlOKGksIExNQ1NfTUFYX0JJTl9TSVpFIC0g MSk7CisKKyAgICAgICAgbGMtPmxtY3MuY2hyb21hX3NjYWxlID0gbG1jcy0+Y2hyb21hX3NjYWxl X2NvZWZmW2ldOworICAgICAgICBsYy0+bG1jcy54X3ZwZHUgPSB4OworICAgICAgICBsYy0+bG1j cy55X3ZwZHUgPSB5OworICAgIH0KKyAgICByZXR1cm4gbGMtPmxtY3MuY2hyb21hX3NjYWxlOwor fQorCisvLyA4LjcuNS4zIFBpY3R1cmUgcmVjb25zdHJ1Y3Rpb24gd2l0aCBsdW1hIGRlcGVuZGVu dCBjaHJvbWEgcmVzaWR1YWwgc2NhbGluZyBwcm9jZXNzIGZvciBjaHJvbWEgc2FtcGxlcworc3Rh dGljIHZvaWQgRlVOQyhsbWNzX3NjYWxlX2Nocm9tYSkoVlZDTG9jYWxDb250ZXh0ICpsYywgaW50 ICpkc3QsIGNvbnN0IGludCAqY29lZmYsCisgICAgY29uc3QgaW50IHdpZHRoLCBjb25zdCBpbnQg aGVpZ2h0LCBjb25zdCBpbnQgeDBfY3UsIGNvbnN0IGludCB5MF9jdSkKK3sKKyAgICBjb25zdCBp bnQgY2hyb21hX3NjYWxlID0gRlVOQyhsbWNzX2Rlcml2ZV9jaHJvbWFfc2NhbGUpKGxjLCB4MF9j dSwgeTBfY3UpOworCisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykgeworICAg ICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHsKKyAgICAgICAgICAgIGNvbnN0 IGludCBjID0gYXZfY2xpcF9pbnRwMigqY29lZmYsIEJJVF9ERVBUSCk7CisKKyAgICAgICAgICAg IGlmIChjID4gMCkKKyAgICAgICAgICAgICAgICAqZHN0ID0gKGMgKiBjaHJvbWFfc2NhbGUgKyAo MSA8PCAxMCkpID4+IDExOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICpkc3Qg PSAtKCgtYyAqIGNocm9tYV9zY2FsZSArICgxIDw8IDEwKSkgPj4gMTEpOworICAgICAgICAgICAg Y29lZmYrKzsKKyAgICAgICAgICAgIGRzdCsrOworICAgICAgICB9CisgICAgfQorfQorCitzdGF0 aWMgYXZfYWx3YXlzX2lubGluZSB2b2lkIEZVTkMocmVmX2ZpbHRlcikoY29uc3QgcGl4ZWwgKmxl ZnQsIGNvbnN0IHBpeGVsICp0b3AsCisgICAgcGl4ZWwgKmZpbHRlcmVkX2xlZnQsIHBpeGVsICpm aWx0ZXJlZF90b3AsIGNvbnN0IGludCBsZWZ0X3NpemUsIGNvbnN0IGludCB0b3Bfc2l6ZSwKKyAg ICBjb25zdCBpbnQgdW5maWx0ZXJfbGFzdF9vbmUpCit7CisgICAgZmlsdGVyZWRfbGVmdFstMV0g PSBmaWx0ZXJlZF90b3BbLTFdID0gKGxlZnRbMF0gKyAgMiAqIGxlZnRbLTFdICsgdG9wWzBdICsg MiApID4+IDI7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZWZ0X3NpemUgLSB1bmZpbHRlcl9s YXN0X29uZTsgaSsrKSB7CisgICAgICAgIGZpbHRlcmVkX2xlZnRbaV0gPSAobGVmdFtpLSAxXSAr IDIgKiBsZWZ0W2ldICsgbGVmdFtpICsgMV0gKyAyKSA+PiAyOworICAgIH0KKyAgICBmb3IgKGlu dCBpID0gMDsgaSA8IHRvcF9zaXplIC0gdW5maWx0ZXJfbGFzdF9vbmU7IGkrKykgeworICAgICAg ICBmaWx0ZXJlZF90b3BbaV0gPSAodG9wW2ktMV0gKyAyICogdG9wW2ldICsgdG9wW2kgKyAxXSAr IDIpID4+IDI7CisgICAgfQorICAgIGlmICh1bmZpbHRlcl9sYXN0X29uZSkgeworICAgICAgICBm aWx0ZXJlZF90b3BbdG9wX3NpemUgLSAxXSA9IHRvcFt0b3Bfc2l6ZSAtIDFdOworICAgICAgICBm aWx0ZXJlZF9sZWZ0W2xlZnRfc2l6ZSAtIDFdID0gbGVmdFtsZWZ0X3NpemUgLSAxXTsKKyAgICB9 Cit9CisKK3N0YXRpYyBhdl9hbHdheXNfaW5saW5lIHZvaWQgRlVOQyhwcmVwYXJlX2ludHJhX2Vk Z2VfcGFyYW1zKShjb25zdCBWVkNMb2NhbENvbnRleHQgKmxjLAorICAgIEludHJhRWRnZVBhcmFt cyogZWRnZSwgY29uc3QgcGl4ZWwgKnNyYywgY29uc3QgcHRyZGlmZl90IHN0cmlkZSwKKyAgICBj b25zdCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCwgaW50IGNfaWR4LCBjb25zdCBpbnQgaXNf aW50cmFfbWlwLAorICAgIGNvbnN0IGludCBtb2RlLCBjb25zdCBpbnQgcmVmX2lkeCwgY29uc3Qg aW50IG5lZWRfcGRwYykKK3sKKyNkZWZpbmUgRVhURU5EKHB0ciwgdmFsLCBsZW4pICAgICAgICAg XAorZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZm9yIChpID0g MDsgaSA8IChsZW4pOyBpKyspICAgICAgIFwKKyAgICAgICAgKihwdHIgKyBpKSA9IHZhbDsgICAg ICAgICAgICAgXAorfSB3aGlsZSAoMCkKKyAgICBjb25zdCBDb2RpbmdVbml0ICpjdSA9IGxjLT5j dTsKKyAgICBjb25zdCBpbnQgcmVmX2ZpbHRlcl9mbGFnID0gaXNfaW50cmFfbWlwID8gMCA6IGZm X3Z2Y19yZWZfZmlsdGVyX2ZsYWdfZGVyaXZlKG1vZGUpOworICAgIGNvbnN0IGludCBmaWx0ZXJf ZmxhZyA9ICFyZWZfaWR4ICYmIHcgKiBoID4gMzIgJiYgIWNfaWR4ICYmCisgICAgICAgIGN1LT5p c3Bfc3BsaXRfdHlwZSA9PSBJU1BfTk9fU1BMSVQgJiYgcmVmX2ZpbHRlcl9mbGFnOworICAgIGlu dCBjYW5kX3VwX2xlZnQgICAgICA9IGxjLT5uYS5jYW5kX3VwX2xlZnQ7CisgICAgcGl4ZWwgICps ZWZ0ICAgICAgICAgID0gKHBpeGVsKillZGdlLT5sZWZ0X2FycmF5ICsgTUFYX1RCX1NJWkUgKyAz OworICAgIHBpeGVsICAqdG9wICAgICAgICAgICA9IChwaXhlbCopZWRnZS0+dG9wX2FycmF5ICAr IE1BWF9UQl9TSVpFICsgMzsKKyAgICBwaXhlbCAgKmZpbHRlcmVkX2xlZnQgPSAocGl4ZWwqKWVk Z2UtPmZpbHRlcmVkX2xlZnRfYXJyYXkgKyBNQVhfVEJfU0laRSArIDM7CisgICAgcGl4ZWwgICpm aWx0ZXJlZF90b3AgID0gKHBpeGVsKillZGdlLT5maWx0ZXJlZF90b3BfYXJyYXkgICsgTUFYX1RC X1NJWkUgKyAzOworICAgIGNvbnN0IGludCByZWZfbGluZSA9IHJlZl9pZHggPT0gMyA/IC00IDog KC0xIC0gcmVmX2lkeCk7CisgICAgaW50IGxlZnRfc2l6ZSwgdG9wX3NpemUsIHVuZmlsdGVyX2xl ZnRfc2l6ZSwgdW5maWx0ZXJfdG9wX3NpemU7CisgICAgaW50IGxlZnRfYXZhaWxhYmxlLCB0b3Bf YXZhaWxhYmxlOworICAgIGludCByZWZ3LCByZWZoOworICAgIGludCBpbnRyYV9wcmVkX2FuZ2xl LCBpbnZfYW5nbGU7CisgICAgaW50IGk7CisKKyAgICBpZiAoaXNfaW50cmFfbWlwIHx8IG1vZGUg PT0gSU5UUkFfUExBTkFSKSB7CisgICAgICAgIGxlZnRfc2l6ZSA9IGggKyAxOworICAgICAgICB0 b3Bfc2l6ZSAgPSB3ICsgMTsKKyAgICAgICAgdW5maWx0ZXJfbGVmdF9zaXplID0gbGVmdF9zaXpl ICsgZmlsdGVyX2ZsYWc7CisgICAgICAgIHVuZmlsdGVyX3RvcF9zaXplICA9IHRvcF9zaXplICAr IGZpbHRlcl9mbGFnOworICAgIH0gZWxzZSBpZiAobW9kZSA9PSBJTlRSQV9EQykgeworICAgICAg ICB1bmZpbHRlcl9sZWZ0X3NpemUgPSBsZWZ0X3NpemUgPSBoOworICAgICAgICB1bmZpbHRlcl90 b3Bfc2l6ZSA9IHRvcF9zaXplICA9IHc7CisgICAgfSBlbHNlIGlmIChtb2RlID09IElOVFJBX1ZF UlQpIHsKKyAgICAgICAgLy93ZSBtYXkgbmVlZCAxIHBpeGVsIHRvIHByZWRpY3QgdGhlIHRvcCBs ZWZ0LgorICAgICAgICB1bmZpbHRlcl9sZWZ0X3NpemUgPSBsZWZ0X3NpemUgPSBuZWVkX3BkcGMg PyBoIDogMTsKKyAgICAgICAgdW5maWx0ZXJfdG9wX3NpemUgPSB0b3Bfc2l6ZSAgPSB3OworICAg IH0gZWxzZSBpZiAobW9kZSA9PSBJTlRSQV9IT1JaKSB7CisgICAgICAgIHVuZmlsdGVyX2xlZnRf c2l6ZSA9IGxlZnRfc2l6ZSA9IGg7CisgICAgICAgIC8vZXZlbiBuZWVkX3BkcGMgPT0gMCwgd2Ug bWF5IG5lZWQgMSBwaXhlbCB0byBwcmVkaWN0IHRoZSB0b3AgbGVmdC4KKyAgICAgICAgdW5maWx0 ZXJfdG9wX3NpemUgPSB0b3Bfc2l6ZSA9IG5lZWRfcGRwYyA/IHcgOiAxOworICAgIH0gZWxzZSB7 CisgICAgICAgIGlmIChjdS0+aXNwX3NwbGl0X3R5cGUgPT0gSVNQX05PX1NQTElUIHx8IGNfaWR4 KSB7CisgICAgICAgICAgICByZWZ3ID0gdyAqIDI7CisgICAgICAgICAgICByZWZoID0gaCAqIDI7 CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZWZ3ID0gY3UtPmNiX3dpZHRoICsgdzsK KyAgICAgICAgICAgIHJlZmggPSBjdS0+Y2JfaGVpZ2h0ICsgaDsKKyAgICAgICAgfQorICAgICAg ICBpbnRyYV9wcmVkX2FuZ2xlID0gZmZfdnZjX2ludHJhX3ByZWRfYW5nbGVfZGVyaXZlKG1vZGUp OworICAgICAgICBpbnZfYW5nbGUgPSBmZl92dmNfaW50cmFfaW52X2FuZ2xlX2Rlcml2ZShpbnRy YV9wcmVkX2FuZ2xlKTsKKyAgICAgICAgdW5maWx0ZXJfdG9wX3NpemUgPSB0b3Bfc2l6ZSAgPSBy ZWZ3OworICAgICAgICB1bmZpbHRlcl9sZWZ0X3NpemUgPSBsZWZ0X3NpemUgPSByZWZoOworICAg IH0KKworICAgIGxlZnRfYXZhaWxhYmxlID0gZmZfdnZjX2dldF9sZWZ0X2F2YWlsYWJsZShsYywg eCwgeSwgdW5maWx0ZXJfbGVmdF9zaXplLCBjX2lkeCk7CisgICAgZm9yIChpID0gMDsgaSA8IGxl ZnRfYXZhaWxhYmxlOyBpKyspCisgICAgICAgIGxlZnRbaV0gPSBQT1MocmVmX2xpbmUsIGkpOwor CisgICAgdG9wX2F2YWlsYWJsZSA9IGZmX3Z2Y19nZXRfdG9wX2F2YWlsYWJsZShsYywgeCwgeSwg dW5maWx0ZXJfdG9wX3NpemUsIGNfaWR4KTsKKyAgICBtZW1jcHkodG9wLCBzcmMgKyByZWZfbGlu ZSAqIHN0cmlkZSwgdG9wX2F2YWlsYWJsZSAqIHNpemVvZihwaXhlbCkpOworCisgICAgZm9yIChp bnQgaSA9IC0xOyBpID49IHJlZl9saW5lOyBpLS0pIHsKKyAgICAgICAgaWYgKGNhbmRfdXBfbGVm dCkgeworICAgICAgICAgICAgbGVmdFtpXSA9IFBPUyhyZWZfbGluZSwgaSk7CisgICAgICAgICAg ICB0b3BbaV0gID0gUE9TKGksIHJlZl9saW5lKTsKKyAgICAgICAgfSBlbHNlIGlmIChsZWZ0X2F2 YWlsYWJsZSkgeworICAgICAgICAgICAgbGVmdFtpXSA9IHRvcFtpXSA9IGxlZnRbMF07CisgICAg ICAgIH0gZWxzZSBpZiAodG9wX2F2YWlsYWJsZSkgeworICAgICAgICAgICAgbGVmdFtpXSA9IHRv cFtpXSA9IHRvcFswXTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxlZnRbaV0gPSB0 b3BbaV0gPSAxIDw8IChCSVRfREVQVEggLSAxKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEVY VEVORCh0b3AgKyB0b3BfYXZhaWxhYmxlLCB0b3BbdG9wX2F2YWlsYWJsZS0xXSwgdW5maWx0ZXJf dG9wX3NpemUgLSB0b3BfYXZhaWxhYmxlKTsKKyAgICBFWFRFTkQobGVmdCArIGxlZnRfYXZhaWxh YmxlLCBsZWZ0W2xlZnRfYXZhaWxhYmxlLTFdLCB1bmZpbHRlcl9sZWZ0X3NpemUgLSBsZWZ0X2F2 YWlsYWJsZSk7CisKKyAgICBpZiAocmVmX2ZpbHRlcl9mbGFnKSB7CisgICAgICAgIGlmICghcmVm X2lkeCAmJiB3ICogaCA+IDMyICYmICFjX2lkeCAmJiBjdS0+aXNwX3NwbGl0X3R5cGUgPT0gSVNQ X05PX1NQTElUICkgeworICAgICAgICAgICAgY29uc3QgaW50IHVuZmlsdGVyX2xhc3Rfb25lID0g bGVmdF9zaXplID09IHVuZmlsdGVyX2xlZnRfc2l6ZTsKKyAgICAgICAgICAgIEZVTkMocmVmX2Zp bHRlcikobGVmdCwgdG9wLCBmaWx0ZXJlZF9sZWZ0LCBmaWx0ZXJlZF90b3AsIHVuZmlsdGVyX2xl ZnRfc2l6ZSwgdW5maWx0ZXJfdG9wX3NpemUsIHVuZmlsdGVyX2xhc3Rfb25lKTsKKyAgICAgICAg ICAgIGxlZnQgPSBmaWx0ZXJlZF9sZWZ0OworICAgICAgICAgICAgdG9wICA9IGZpbHRlcmVkX3Rv cDsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoIWlzX2ludHJhX21pcCAmJiBtb2RlICE9IElO VFJBX1BMQU5BUiAmJiBtb2RlICE9IElOVFJBX0RDKSB7CisgICAgICAgIGlmIChyZWZfZmlsdGVy X2ZsYWcgfHwgcmVmX2lkeCB8fCBjdS0+aXNwX3NwbGl0X3R5cGUgIT0gSVNQX05PX1NQTElUKSB7 CisgICAgICAgICAgICBlZGdlLT5maWx0ZXJfZmxhZyA9IDA7CisgICAgICAgIH0gZWxzZSB7Cisg ICAgICAgICAgICBjb25zdCBpbnQgbWluX2Rpc3RfdmVyX2hvciA9IEZGTUlOKGFicyhtb2RlIC0g NTApLCBhYnMobW9kZSAtIDE4KSk7CisgICAgICAgICAgICBjb25zdCBpbnQgaW50cmFfaG9yX3Zl cl9kaXN0X3RocmVzW10gPSB7MjQsIDE0LCAyLCAwLCAwfTsKKyAgICAgICAgICAgIGNvbnN0IGlu dCBudGJzID0gKGF2X2xvZzIodykgKyBhdl9sb2cyKGgpKSA+PiAxOworICAgICAgICAgICAgZWRn ZS0+ZmlsdGVyX2ZsYWcgPSBtaW5fZGlzdF92ZXJfaG9yID4gaW50cmFfaG9yX3Zlcl9kaXN0X3Ro cmVzW250YnMgLSAyXTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtb2RlICE9IElOVFJBX1ZF UlQgJiYgbW9kZSAhPSBJTlRSQV9IT1JaKSB7CisgICAgICAgICAgICBpZiAobW9kZSA+PSBJTlRS QV9ESUFHKSB7CisgICAgICAgICAgICAgICAgaWYgKGludHJhX3ByZWRfYW5nbGUgPCAwKSB7Cisg ICAgICAgICAgICAgICAgICAgIHBpeGVsICpwID0gdG9wIC0gKHJlZl9pZHggKyAxKTsKKyAgICAg ICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IC1oOyB4IDwgMDsgeCsrKSB7CisgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBpbnQgaWR4ID0gLTEgLSByZWZfaWR4ICsgRkZNSU4oKHgqaW52 X2FuZ2xlICsgMjU2KSA+PiA5LCBoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBbeF0gPSBs ZWZ0W2lkeF07CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2Ug eworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gcmVmdzsgaSA8PSByZWZ3ICsgRkZN QVgoMSwgdy9oKSAqIHJlZl9pZHggKyAxOyBpKyspCisgICAgICAgICAgICAgICAgICAgICAgICB0 b3BbaV0gPSB0b3BbcmVmdyAtIDFdOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0g ZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKGludHJhX3ByZWRfYW5nbGUgPCAwKSB7CisgICAg ICAgICAgICAgICAgICAgIHBpeGVsICpwID0gbGVmdCAtIChyZWZfaWR4ICsgMSk7CisgICAgICAg ICAgICAgICAgICAgIGZvciAoaW50IHggPSAtdzsgeCA8IDA7IHgrKykgeworICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgaW50IGlkeCA9IC0xIC0gcmVmX2lkeCArIEZGTUlOKCh4Kmludl9h bmdsZSArIDI1NikgPj4gOSwgdyk7CisgICAgICAgICAgICAgICAgICAgICAgICBwW3hdID0gdG9w W2lkeF07CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2Ugewor ICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gcmVmaDsgaSA8PSByZWZoICsgRkZNQVgo MSwgaC93KSAqIHJlZl9pZHggKyAxOyBpKyspCisgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0 W2ldID0gbGVmdFtyZWZoIC0gMV07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor ICAgICAgICB9CisgICAgfQorICAgIGVkZ2UtPmxlZnQgPSAodWludDhfdCopbGVmdDsKKyAgICBl ZGdlLT50b3AgID0gKHVpbnQ4X3QqKXRvcDsKK30KKworLy84LjQuMSBHZW5lcmFsIGRlY29kaW5n IHByb2Nlc3MgZm9yIGNvZGluZyB1bml0cyBjb2RlZCBpbiBpbnRyYSBwcmVkaWN0aW9uIG1vZGUK K3N0YXRpYyB2b2lkIEZVTkMoaW50cmFfcHJlZCkoY29uc3QgVlZDTG9jYWxDb250ZXh0ICpsYywg aW50IHgwLCBpbnQgeTAsCisgICAgY29uc3QgaW50IHdpZHRoLCBjb25zdCBpbnQgaGVpZ2h0LCBp bnQgY19pZHgpCit7CisgICAgVlZDRnJhbWVDb250ZXh0ICpmYyAgICAgPSBsYy0+ZmM7CisgICAg Y29uc3QgVlZDU1BTICpzcHMgPSBmYy0+cHMuc3BzOworICAgIGNvbnN0IFZWQ1BQUyAqcHBzID0g ZmMtPnBzLnBwczsKKyAgICBjb25zdCBDb2RpbmdVbml0ICpjdSA9IGxjLT5jdTsKKyAgICBjb25z dCBpbnQgbG9nMl9taW5fY2Jfc2l6ZSAgICA9IHNwcy0+bWluX2NiX2xvZzJfc2l6ZV95OworICAg IGNvbnN0IGludCBtaW5fY2Jfd2lkdGggICAgICAgID0gcHBzLT5taW5fY2Jfd2lkdGg7CisgICAg Y29uc3QgaW50IHhfY2IgICAgICAgICAgICAgICAgPSB4MCA+PiBsb2cyX21pbl9jYl9zaXplOwor ICAgIGNvbnN0IGludCB5X2NiICAgICAgICAgICAgICAgID0geTAgPj4gbG9nMl9taW5fY2Jfc2l6 ZTsKKworICAgIGNvbnN0IGludCBoc2hpZnQgPSBmYy0+cHMuc3BzLT5oc2hpZnRbY19pZHhdOwor ICAgIGNvbnN0IGludCB2c2hpZnQgPSBmYy0+cHMuc3BzLT52c2hpZnRbY19pZHhdOworICAgIGNv bnN0IGludCB4ID0geDAgPj4gaHNoaWZ0OworICAgIGNvbnN0IGludCB5ID0geTAgPj4gdnNoaWZ0 OworICAgIGNvbnN0IGludCB3ID0gd2lkdGggPj4gaHNoaWZ0OworICAgIGNvbnN0IGludCBoID0g aGVpZ2h0ID4+IHZzaGlmdDsKKyAgICBjb25zdCBwdHJkaWZmX3Qgc3RyaWRlID0gZmMtPmZyYW1l LT5saW5lc2l6ZVtjX2lkeF0gLyBzaXplb2YocGl4ZWwpOworCisgICAgY29uc3QgaW50IHByZWRf bW9kZSA9IGNfaWR4ID8gY3UtPmludHJhX3ByZWRfbW9kZV9jIDogY3UtPmludHJhX3ByZWRfbW9k ZV95OworICAgIGNvbnN0IGludCBtb2RlID0gZmZfdnZjX3dpZGVfYW5nbGVfbW9kZV9tYXBwaW5n KGN1LCB3LCBoLCBjX2lkeCwgcHJlZF9tb2RlKTsKKworICAgIGNvbnN0IGludCBpbnRyYV9taXBf ZmxhZyAgPSBTQU1QTEVfQ1RCKGZjLT50YWIuaW1mLCB4X2NiLCB5X2NiKTsKKyAgICBjb25zdCBp bnQgaXNfaW50cmFfbWlwICAgID0gaW50cmFfbWlwX2ZsYWcgJiYgKCFjX2lkeCB8fCBjdS0+bWlw X2Nocm9tYV9kaXJlY3RfZmxhZyk7CisgICAgY29uc3QgaW50IHJlZl9pZHggPSBjX2lkeCA/IDAg OiBjdS0+aW50cmFfbHVtYV9yZWZfaWR4OworICAgIGNvbnN0IGludCBuZWVkX3BkcGMgPSBmZl92 dmNfbmVlZF9wZHBjKHcsIGgsIGN1LT5iZHBjbV9mbGFnW2NfaWR4XSwgbW9kZSwgcmVmX2lkeCk7 CisKKworICAgIHBpeGVsICpzcmMgPSAocGl4ZWwqKWZjLT5mcmFtZS0+ZGF0YVtjX2lkeF0gKyB4 ICsgeSAqIHN0cmlkZTsKKyAgICBJbnRyYUVkZ2VQYXJhbXMgZWRnZTsKKworICAgIEZVTkMocHJl cGFyZV9pbnRyYV9lZGdlX3BhcmFtcykobGMsICZlZGdlLCBzcmMsIHN0cmlkZSwgeCwgeSwgdywg aCwgY19pZHgsIGlzX2ludHJhX21pcCwgbW9kZSwgcmVmX2lkeCwgbmVlZF9wZHBjKTsKKworICAg IGlmIChpc19pbnRyYV9taXApIHsKKyAgICAgICAgaW50IGludHJhX21pcF90cmFuc3Bvc2VkX2Zs YWcgPSBTQU1QTEVfQ1RCKGZjLT50YWIuaW10ZiwgeF9jYiwgeV9jYik7CisgICAgICAgIGludCBp bnRyYV9taXBfbW9kZSA9IFNBTVBMRV9DVEIoZmMtPnRhYi5pbW0sIHhfY2IsIHlfY2IpOworCisg ICAgICAgIGZjLT52dmNkc3AuaW50cmEucHJlZF9taXAoKHVpbnQ4X3QgKilzcmMsIGVkZ2UudG9w LCBlZGdlLmxlZnQsCisgICAgICAgICAgICAgICAgICAgICAgICB3LCBoLCBzdHJpZGUsIGludHJh X21pcF9tb2RlLCBpbnRyYV9taXBfdHJhbnNwb3NlZF9mbGFnKTsKKyAgICB9IGVsc2UgaWYgKG1v ZGUgPT0gSU5UUkFfUExBTkFSKSB7CisgICAgICAgIGZjLT52dmNkc3AuaW50cmEucHJlZF9wbGFu YXIoKHVpbnQ4X3QgKilzcmMsIGVkZ2UudG9wLCBlZGdlLmxlZnQsIHcsIGgsIHN0cmlkZSk7Cisg ICAgfSBlbHNlIGlmIChtb2RlID09IElOVFJBX0RDKSB7CisgICAgICAgIGZjLT52dmNkc3AuaW50 cmEucHJlZF9kYygodWludDhfdCAqKXNyYywgZWRnZS50b3AsIGVkZ2UubGVmdCwgdywgaCwgc3Ry aWRlKTsKKyAgICB9IGVsc2UgaWYgKG1vZGUgPT0gSU5UUkFfVkVSVCkgeworICAgICAgICBmYy0+ dnZjZHNwLmludHJhLnByZWRfdigodWludDhfdCAqKXNyYywgZWRnZS50b3AsIHcsIGgsIHN0cmlk ZSk7CisgICAgfSBlbHNlIGlmIChtb2RlID09IElOVFJBX0hPUlopIHsKKyAgICAgICAgZmMtPnZ2 Y2RzcC5pbnRyYS5wcmVkX2goKHVpbnQ4X3QgKilzcmMsIGVkZ2UubGVmdCwgdywgaCwgc3RyaWRl KTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAobW9kZSA+PSBJTlRSQV9ESUFHKSB7CisgICAg ICAgICAgICBmYy0+dnZjZHNwLmludHJhLnByZWRfYW5ndWxhcl92KCh1aW50OF90ICopc3JjLCBl ZGdlLnRvcCwgZWRnZS5sZWZ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHcs IGgsIHN0cmlkZSwgY19pZHgsIG1vZGUsIHJlZl9pZHgsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZWRnZS5maWx0ZXJfZmxhZywgbmVlZF9wZHBjKTsKKyAgICAgICAgfSBlbHNl IHsKKyAgICAgICAgICAgIGZjLT52dmNkc3AuaW50cmEucHJlZF9hbmd1bGFyX2goKHVpbnQ4X3Qg KilzcmMsIGVkZ2UudG9wLCBlZGdlLmxlZnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdywgaCwgc3RyaWRlLCBjX2lkeCwgbW9kZSwgcmVmX2lkeCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBlZGdlLmZpbHRlcl9mbGFnLCBuZWVkX3BkcGMpOworICAgICAg ICB9CisgICAgfQorICAgIGlmIChuZWVkX3BkcGMpIHsKKyAgICAgICAgLy84LjQuNS4yLjE1IFBv c2l0aW9uLWRlcGVuZGVudCBpbnRyYSBwcmVkaWN0aW9uIHNhbXBsZSBmaWx0ZXJpbmcgcHJvY2Vz cworICAgICAgICBpZiAoIWlzX2ludHJhX21pcCAmJiAobW9kZSA9PSBJTlRSQV9QTEFOQVIgfHwg bW9kZSA9PSBJTlRSQV9EQyB8fAorICAgICAgICAgICAgbW9kZSA9PSBJTlRSQV9WRVJUIHx8IG1v ZGUgPT0gSU5UUkFfSE9SWikpIHsKKyAgICAgICAgICAgIGNvbnN0IGludCBzY2FsZSA9IChhdl9s b2cyKHcpICsgYXZfbG9nMihoKSAtIDIpID4+IDI7CisgICAgICAgICAgICBjb25zdCBwaXhlbCAq bGVmdCA9IChwaXhlbCopZWRnZS5sZWZ0OworICAgICAgICAgICAgY29uc3QgcGl4ZWwgKnRvcCAg PSAocGl4ZWwqKWVkZ2UudG9wOworICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoOyB5 KyspIHsKKyAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHc7IHgrKykgeworICAg ICAgICAgICAgICAgICAgICBpbnQgbCwgdCwgd2wsIHd0LCBwcmVkOworICAgICAgICAgICAgICAg ICAgICBwaXhlbCB2YWw7CisgICAgICAgICAgICAgICAgICAgIGlmIChtb2RlID09IElOVFJBX1BM QU5BUiB8fCBtb2RlID09IElOVFJBX0RDKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsICA9 IGxlZnRbeV07CisgICAgICAgICAgICAgICAgICAgICAgICB0ID0gdG9wW3hdOworICAgICAgICAg ICAgICAgICAgICAgICAgd2wgPSAzMiA+PiBGRk1JTigoeCA8PCAxKSA+PiBzY2FsZSwgMzEpOwor ICAgICAgICAgICAgICAgICAgICAgICAgd3QgPSAzMiA+PiBGRk1JTigoeSA8PCAxKSA+PiBzY2Fs ZSwgMzEpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAg ICAgICAgbCAgPSBsZWZ0W3ldIC0gbGVmdFstMV0gKyBQT1MoeCx5KTsKKyAgICAgICAgICAgICAg ICAgICAgICAgIHQgPSB0b3BbeF0gLSB0b3BbLTFdICsgUE9TKHgseSk7CisgICAgICAgICAgICAg ICAgICAgICAgICB3bCA9IChtb2RlID09IElOVFJBX1ZFUlQpID8gICgzMiA+PiBGRk1JTigoeCA8 PCAxKSA+PiBzY2FsZSwgMzEpKSA6IDA7CisgICAgICAgICAgICAgICAgICAgICAgICB3dCA9ICht b2RlID09IElOVFJBX0hPUlopID8gICgzMiA+PiBGRk1JTigoeSA8PCAxKSA+PiBzY2FsZSwgMzEp KSA6IDA7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgdmFsID0g UE9TKHgsIHkpOworICAgICAgICAgICAgICAgICAgICBwcmVkICA9IHZhbCArICgod2wgKiAobCAt IHZhbCkgKyB3dCAqICh0IC0gdmFsKSArIDMyKSA+PiA2KTsKKyAgICAgICAgICAgICAgICAgICAg UE9TKHgsIHkpID0gQ0xJUChwcmVkKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9 CisgICAgICAgIH0KKyAgICB9Cit9CisKKy8vOC40LjUuMi4xMSBTcGVjaWZpY2F0aW9uIG9mIElO VFJBX1BMQU5BUiBpbnRyYSBwcmVkaWN0aW9uIG1vZGUKK3N0YXRpYyBhdl9hbHdheXNfaW5saW5l IHZvaWQgRlVOQyhwcmVkX3BsYW5hcikodWludDhfdCAqX3NyYywgY29uc3QgdWludDhfdCAqX3Rv cCwKKyAgICBjb25zdCB1aW50OF90ICpfbGVmdCwgY29uc3QgaW50IHcsIGNvbnN0IGludCBoLCBj b25zdCBwdHJkaWZmX3Qgc3RyaWRlKQoreworICAgIGludCB4LCB5OworICAgIHBpeGVsICpzcmMg ICAgICAgID0gKHBpeGVsICopX3NyYzsKKyAgICBjb25zdCBwaXhlbCAqdG9wICA9IChjb25zdCBw aXhlbCAqKV90b3A7CisgICAgY29uc3QgcGl4ZWwgKmxlZnQgPSAoY29uc3QgcGl4ZWwgKilfbGVm dDsKKyAgICBjb25zdCBpbnQgbG9ndyAgPSBhdl9sb2cyKHcpOworICAgIGNvbnN0IGludCBsb2do ICA9IGF2X2xvZzIoaCk7CisgICAgY29uc3QgaW50IHNpemUgID0gIHcgKiBoOworICAgIGNvbnN0 IGludCBzaGlmdCA9IChsb2d3ICsgbG9naCArIDEpOworICAgIGZvciAoeSA9IDA7IHkgPCBoOyB5 KyspIHsKKyAgICAgICAgZm9yICh4ID0gMDsgeCA8IHc7IHgrKykgeworICAgICAgICAgICAgY29u c3QgaW50IHByZWRfdiA9ICgoaCAtIDEgLSB5KSAqIHRvcFt4XSAgKyAoeSArIDEpICogbGVmdFto XSkgPDwgbG9ndzsKKyAgICAgICAgICAgIGNvbnN0IGludCBwcmVkX2ggPSAoKHcgLSAxIC0geCkg KiBsZWZ0W3ldICsgKHggKyAxKSAqIHRvcFt3XSkgPDwgbG9naDsKKyAgICAgICAgICAgIGNvbnN0 IGludCBwcmVkID0gKHByZWRfdiArIHByZWRfaCArIHNpemUpID4+IHNoaWZ0OworICAgICAgICAg ICAgUE9TKHgsIHkpID0gcHJlZDsKKyAgICAgICAgfQorICAgIH0KK30KKworLy84LjQuNS4yLjMg TUlQIGJvdW5kYXJ5IHNhbXBsZSBkb3duc2FtcGxpbmcgcHJvY2Vzcworc3RhdGljIGF2X2Fsd2F5 c19pbmxpbmUgdm9pZCBGVU5DKG1pcF9kb3duc2FtcGxpbmcpKGludCAqcmVkdWNlZCwgY29uc3Qg aW50IGJvdW5kYXJ5X3NpemUsCisgICAgY29uc3QgcGl4ZWwgKnJlZiwgY29uc3QgaW50IG5fdGJf cykKK3sKKyAgICBjb25zdCBpbnQgYl9kd24gPSBuX3RiX3MgLyBib3VuZGFyeV9zaXplOworICAg IGNvbnN0IGludCBsb2cyID0gYXZfbG9nMihiX2R3bik7CisKKyAgICBpZiAoYm91bmRhcnlfc2l6 ZSA9PSBuX3RiX3MpIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuX3RiX3M7IGkrKykK KyAgICAgICAgICAgIHJlZHVjZWRbaV0gPSByZWZbaV07CisgICAgICAgIHJldHVybjsKKyAgICB9 CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBib3VuZGFyeV9zaXplOyBpKyspIHsKKyAgICAgICAg aW50IHI7CisgICAgICAgIHIgPSAqcmVmKys7CisgICAgICAgIGZvciAoaW50IGogPSAxOyBqIDwg Yl9kd247IGorKykKKyAgICAgICAgICAgIHIgKz0gKnJlZisrOworICAgICAgICByZWR1Y2VkW2ld ID0gKHIgKyAoMSA8PCAobG9nMiAtIDEpKSkgPj4gbG9nMjsKKyAgICB9Cit9CisKK3N0YXRpYyBh dl9hbHdheXNfaW5saW5lIHZvaWQgRlVOQyhtaXBfcmVkdWNlZF9wcmVkKShwaXhlbCAqc3JjLCBj b25zdCBwdHJkaWZmX3Qgc3RyaWRlLAorICAgIGNvbnN0IGludCB1cF9ob3IsIGNvbnN0IGludCB1 cF92ZXIsIGNvbnN0IGludCBwcmVkX3NpemUsIGNvbnN0IGludCAqcmVkdWNlZCwgY29uc3QgaW50 IHJlZHVjZWRfc2l6ZSwKKyAgICBjb25zdCBpbnQgb3csIGNvbnN0IGludCB0ZW1wMCwgY29uc3Qg dWludDhfdCAqbWF0cml4LCBpbnQgaXNfdHJhbnNwb3NlZCkKK3sKKyAgICBzcmMgPSAmUE9TKHVw X2hvciAtIDEsIHVwX3ZlciAtIDEpOworICAgIGZvciAoaW50IHkgPSAwOyB5IDwgcHJlZF9zaXpl OyB5KyspIHsKKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBwcmVkX3NpemU7IHgrKykgewor ICAgICAgICAgICAgaW50IHByZWQgPSAwOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg PCByZWR1Y2VkX3NpemU7IGkrKykKKyAgICAgICAgICAgICAgICBwcmVkICs9IHJlZHVjZWRbaV0g KiBtYXRyaXhbaV07CisgICAgICAgICAgICBtYXRyaXggKz0gcmVkdWNlZF9zaXplOworICAgICAg ICAgICAgcHJlZCA9ICgocHJlZCArIG93KSA+PiA2KSArIHRlbXAwOworICAgICAgICAgICAgcHJl ZCA9IGF2X2NsaXAocHJlZCwgMCwgKDE8PEJJVF9ERVBUSCkgLSAxKTsKKyAgICAgICAgICAgIGlm IChpc190cmFuc3Bvc2VkKQorICAgICAgICAgICAgICAgIFBPUyh5ICogdXBfaG9yLCB4ICogdXBf dmVyKSA9IHByZWQ7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgUE9TKHggKiB1 cF9ob3IsIHkgKiB1cF92ZXIpID0gcHJlZDsKKyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGlj IGF2X2Fsd2F5c19pbmxpbmUgdm9pZCBGVU5DKG1pcF91cHNhbXBsaW5nXzFkKShwaXhlbCAqZHN0 LCBjb25zdCBpbnQgZHN0X3N0ZXAsIGNvbnN0IGludCBkc3Rfc3RyaWRlLCBjb25zdCBpbnQgZHN0 X2hlaWdodCwgY29uc3QgaW50IGZhY3RvciwKKyAgICBjb25zdCBwaXhlbCAqYm91bmRhcnksIGNv bnN0IGludCBib3VuZGFyeV9zdGVwLCAgY29uc3QgaW50IHByZWRfc2l6ZSkKK3sKKworICAgIGZv ciAoaW50IGkgPSAwOyBpIDwgZHN0X2hlaWdodDsgaSsrKSB7CisgICAgICAgIGNvbnN0IHBpeGVs ICpiZWZvcmUgPSBib3VuZGFyeTsKKyAgICAgICAgY29uc3QgcGl4ZWwgKmFmdGVyICA9IGRzdCAt IGRzdF9zdGVwOworICAgICAgICBwaXhlbCAqZCA9IGRzdDsKKyAgICAgICAgZm9yIChpbnQgaiA9 IDA7IGogPCBwcmVkX3NpemU7IGorKykgeworICAgICAgICAgICAgYWZ0ZXIgKz0gZHN0X3N0ZXAg KiBmYWN0b3I7CisgICAgICAgICAgICBmb3IgKGludCBrID0gMTsgayA8IGZhY3RvcjsgaysrKSB7 CisgICAgICAgICAgICAgICAgaW50IG1pZCA9IChmYWN0b3IgLSBrKSAqICgqYmVmb3JlKSArIGsg KiAoKmFmdGVyKTsKKyAgICAgICAgICAgICAgICAqZCA9IChtaWQgKyBmYWN0b3IgLyAyKSAvIGZh Y3RvcjsKKyAgICAgICAgICAgICAgICBkICs9IGRzdF9zdGVwOworICAgICAgICAgICAgfQorICAg ICAgICAgICAgYmVmb3JlID0gYWZ0ZXI7CisgICAgICAgICAgICBkICs9IGRzdF9zdGVwOworICAg ICAgICB9CisgICAgICAgIGJvdW5kYXJ5ICs9IGJvdW5kYXJ5X3N0ZXA7CisgICAgICAgIGRzdCAr PSBkc3Rfc3RyaWRlOworICAgIH0KK30KKworLy84LjQuNS4yLjIgTWF0cml4LWJhc2VkIGludHJh IHNhbXBsZSBwcmVkaWN0aW9uCitzdGF0aWMgYXZfYWx3YXlzX2lubGluZSB2b2lkIEZVTkMocHJl ZF9taXApKHVpbnQ4X3QgKl9zcmMsIGNvbnN0IHVpbnQ4X3QgKl90b3AsCisgICAgY29uc3QgdWlu dDhfdCAqX2xlZnQsIGNvbnN0IGludCB3LCBjb25zdCBpbnQgaCwgY29uc3QgcHRyZGlmZl90IHN0 cmlkZSwKKyAgICBpbnQgbW9kZV9pZCwgaW50IGlzX3RyYW5zcG9zZWQpCit7CisgICAgcGl4ZWwg KnNyYyAgICAgICAgPSAocGl4ZWwgKilfc3JjOworICAgIGNvbnN0IHBpeGVsICp0b3AgID0gKGNv bnN0IHBpeGVsICopX3RvcDsKKyAgICBjb25zdCBwaXhlbCAqbGVmdCA9IChjb25zdCBwaXhlbCAq KV9sZWZ0OworCisgICAgY29uc3QgaW50IHNpemVfaWQgPSBmZl92dmNfZ2V0X21pcF9zaXplX2lk KHcsIGgpOworICAgIHN0YXRpYyBjb25zdCBpbnQgYm91bmRhcnlfc2l6ZXNbXSA9IHsyLCA0LCA0 fTsKKyAgICBzdGF0aWMgY29uc3QgaW50IHByZWRfc2l6ZXNbXSA9IHs0LCA0LCA4fTsKKyAgICBj b25zdCBpbnQgYm91bmRhcnlfc2l6ZSA9IGJvdW5kYXJ5X3NpemVzW3NpemVfaWRdOworICAgIGNv bnN0IGludCBwcmVkX3NpemUgICAgID0gcHJlZF9zaXplc1tzaXplX2lkXTsKKyAgICBjb25zdCBp bnQgaW5fc2l6ZSA9IDIgKiBib3VuZGFyeV9zaXplIC0gKChzaXplX2lkID09IDIpID8gMSA6IDAp OworICAgIGNvbnN0IHVpbnQ4X3QgKm1hdHJpeCA9IGZmX3Z2Y19nZXRfbWlwX21hdHJpeChzaXpl X2lkLCBtb2RlX2lkKTsKKyAgICBjb25zdCBpbnQgdXBfaG9yID0gdyAvIHByZWRfc2l6ZTsKKyAg ICBjb25zdCBpbnQgdXBfdmVyID0gaCAvIHByZWRfc2l6ZTsKKworICAgIGludCByZWR1Y2VkWzE2 XTsKKyAgICBpbnQgKnJlZF90ICA9IHJlZHVjZWQ7CisgICAgaW50ICpyZWRfbCAgPSByZWR1Y2Vk ICsgYm91bmRhcnlfc2l6ZTsKKyAgICBpbnQgb2ZmID0gMSwgb3cgPSAwOworICAgIGludCB0ZW1w MDsKKworICAgIGlmIChpc190cmFuc3Bvc2VkKSB7CisgICAgICAgIEZGU1dBUChpbnQqLCByZWRf dCwgcmVkX2wpOworICAgIH0KKyAgICBGVU5DKG1pcF9kb3duc2FtcGxpbmcpKHJlZF90LCBib3Vu ZGFyeV9zaXplLCB0b3AsIHcpOworICAgIEZVTkMobWlwX2Rvd25zYW1wbGluZykocmVkX2wsIGJv dW5kYXJ5X3NpemUsIGxlZnQsIGgpOworCisgICAgdGVtcDAgPSByZWR1Y2VkWzBdOworICAgIGlm IChzaXplX2lkICE9IDIpIHsKKyAgICAgICAgb2ZmID0gMDsKKyAgICAgICAgb3cgPSAoMSA8PCAo QklUX0RFUFRIIC0gMSkpIC0gdGVtcDA7CisgICAgfSBlbHNlIHsKKyAgICAgICAgb3cgPSByZWR1 Y2VkWzFdIC0gdGVtcDA7CisgICAgfQorICAgIHJlZHVjZWRbMF0gPSBvdzsKKyAgICBmb3IgKGlu dCBpID0gMTsgaSA8IGluX3NpemU7IGkrKykgeworICAgICAgICByZWR1Y2VkW2ldID0gcmVkdWNl ZFtpICsgb2ZmXSAtIHRlbXAwOworICAgICAgICBvdyArPSByZWR1Y2VkW2ldOworICAgIH0KKyAg ICBvdyA9IDMyIC0gMzIgKiBvdzsKKworICAgIEZVTkMobWlwX3JlZHVjZWRfcHJlZCkoc3JjLCBz dHJpZGUsIHVwX2hvciwgdXBfdmVyLCBwcmVkX3NpemUsIHJlZHVjZWQsIGluX3NpemUsIG93LCB0 ZW1wMCwgbWF0cml4LCBpc190cmFuc3Bvc2VkKTsKKyAgICBpZiAodXBfaG9yID4gMSB8fCB1cF92 ZXIgPiAxKSB7CisgICAgICAgIGlmICh1cF9ob3IgPiAxKQorICAgICAgICAgICAgRlVOQyhtaXBf dXBzYW1wbGluZ18xZCkoJlBPUygwLCB1cF92ZXIgLSAxKSwgMSwgdXBfdmVyICogc3RyaWRlLCBw cmVkX3NpemUsIHVwX2hvciwgbGVmdCArIHVwX3ZlciAtIDEsIHVwX3ZlciwgcHJlZF9zaXplKTsK KyAgICAgICAgaWYgKHVwX3ZlciA+IDEpCisgICAgICAgICAgICBGVU5DKG1pcF91cHNhbXBsaW5n XzFkKShzcmMsIHN0cmlkZSwgMSwgdywgdXBfdmVyLCB0b3AsIDEsIHByZWRfc2l6ZSk7CisgICAg fQorfQorCitzdGF0aWMgYXZfYWx3YXlzX2lubGluZSBwaXhlbCBGVU5DKHByZWRfZGNfdmFsKShj b25zdCBwaXhlbCAqdG9wLCBjb25zdCBwaXhlbCAqbGVmdCwKKyAgICBjb25zdCBpbnQgdywgY29u c3QgaW50IGgpCit7CisgICAgcGl4ZWwgZGNfdmFsOworICAgIGludCBzdW0gPSAwOworICAgIHVu c2lnbmVkIGludCBvZmZzZXQgPSAodyA9PSBoKSA/ICh3IDw8IDEpIDogRkZNQVgodywgaCk7Cisg ICAgY29uc3QgaW50IHNoaWZ0ID0gYXZfbG9nMihvZmZzZXQpOworICAgIG9mZnNldCA+Pj0gMTsK KyAgICBpZiAodyA+PSBoKSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdzsgaSsrKQor ICAgICAgICAgICAgc3VtICs9IHRvcFtpXTsKKyAgICB9CisgICAgaWYgKHcgPD0gaCkgeworICAg ICAgICBmb3IgKGludCBpID0gMDsgaSA8IGg7IGkrKykKKyAgICAgICAgICAgIHN1bSArPSBsZWZ0 W2ldOworICAgIH0KKyAgICBkY192YWwgPSAoc3VtICsgb2Zmc2V0KSA+PiBzaGlmdDsKKyAgICBy ZXR1cm4gZGNfdmFsOworfQorCisvLzguNC41LjIuMTIgU3BlY2lmaWNhdGlvbiBvZiBJTlRSQV9E QyBpbnRyYSBwcmVkaWN0aW9uIG1vZGUKK3N0YXRpYyBhdl9hbHdheXNfaW5saW5lIHZvaWQgRlVO QyhwcmVkX2RjKSh1aW50OF90ICpfc3JjLCBjb25zdCB1aW50OF90ICpfdG9wLAorICAgIGNvbnN0 IHVpbnQ4X3QgKl9sZWZ0LCBjb25zdCBpbnQgdywgY29uc3QgaW50IGgsIGNvbnN0IHB0cmRpZmZf dCBzdHJpZGUpCit7CisgICAgaW50IHgsIHk7CisgICAgcGl4ZWwgKnNyYyAgICAgICAgICA9IChw aXhlbCAqKV9zcmM7CisgICAgY29uc3QgcGl4ZWwgKnRvcCAgICA9IChjb25zdCBwaXhlbCAqKV90 b3A7CisgICAgY29uc3QgcGl4ZWwgKmxlZnQgICA9IChjb25zdCBwaXhlbCAqKV9sZWZ0OworICAg IGNvbnN0IHBpeGVsIGRjICAgICAgPSBGVU5DKHByZWRfZGNfdmFsKSh0b3AsIGxlZnQsIHcsIGgp OworICAgIGNvbnN0IHBpeGVsNCBhICAgICAgPSBQSVhFTF9TUExBVF9YNChkYyk7CisgICAgZm9y ICh5ID0gMDsgeSA8IGg7IHkrKykgeworICAgICAgICBwaXhlbCAqcyA9IHNyYzsKKyAgICAgICAg Zm9yICh4ID0gMDsgeCA8IHc7IHggKz0gNCkgeworICAgICAgICAgICAgQVZfV040UChzLCBhKTsK KyAgICAgICAgICAgIHMgKz0gNDsKKyAgICAgICAgfQorICAgICAgICBzcmMgKz0gc3RyaWRlOwor ICAgIH0KK30KKworc3RhdGljIGF2X2Fsd2F5c19pbmxpbmUgdm9pZCBGVU5DKHByZWRfdikodWlu dDhfdCAqX3NyYywgY29uc3QgdWludDhfdCAqX3RvcCwKKyAgICBjb25zdCBpbnQgdywgY29uc3Qg aW50IGgsIGNvbnN0IHB0cmRpZmZfdCBzdHJpZGUpCit7CisgICAgcGl4ZWwgKnNyYyAgICAgICAg ICA9IChwaXhlbCAqKV9zcmM7CisgICAgY29uc3QgcGl4ZWwgKnRvcCAgICA9IChjb25zdCBwaXhl bCAqKV90b3A7CisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoOyB5KyspIHsKKyAgICAgICAgbWVt Y3B5KHNyYywgdG9wLCBzaXplb2YocGl4ZWwpICAqIHcpOworICAgICAgICBzcmMgKz0gc3RyaWRl OworICAgIH0KK30KKworc3RhdGljIHZvaWQgRlVOQyhwcmVkX2gpKHVpbnQ4X3QgKl9zcmMsIGNv bnN0IHVpbnQ4X3QgKl9sZWZ0LCBjb25zdCBpbnQgdywgY29uc3QgaW50IGgsCisgICAgY29uc3Qg cHRyZGlmZl90IHN0cmlkZSkKK3sKKyAgICBwaXhlbCAqc3JjICAgICAgICAgID0gKHBpeGVsICop X3NyYzsKKyAgICBjb25zdCBwaXhlbCAqbGVmdCAgICA9IChjb25zdCBwaXhlbCAqKV9sZWZ0Owor ICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaDsgeSsrKSB7CisgICAgICAgIGNvbnN0IHBpeGVsNCBh ID0gUElYRUxfU1BMQVRfWDQobGVmdFt5XSk7CisgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwg dzsgeCArPSA0KSB7CisgICAgICAgICAgICBBVl9XTjRQKCZQT1MoeCwgeSksIGEpOworICAgICAg ICB9CisgICAgfQorfQorCisjZGVmaW5lIElOVFJBX0xVTUFfRklMVEVSKHApICAgIENMSVAoKHBb MF0gKiBmWzBdICsgcFsxXSAqIGZbMV0gKyBwWzJdICogZlsyXSArIHBbM10gKiBmWzNdICsgMzIp ID4+IDYpCisjZGVmaW5lIElOVFJBX0NIUk9NQV9GSUxURVIocCkgICgoKDMyIC0gZmFjdCkgKiBw WzFdICsgZmFjdCAqIHBbMl0gKyAxNikgPj4gNSkKKworLy84LjQuNS4yLjEzIFNwZWNpZmljYXRp b24gb2YgSU5UUkFfQU5HVUxBUjIuLklOVFJBX0FOR1VMQVI2NiBpbnRyYSBwcmVkaWN0aW9uIG1v ZGVzCitzdGF0aWMgdm9pZCBGVU5DKHByZWRfYW5ndWxhcl92KSh1aW50OF90ICpfc3JjLCBjb25z dCB1aW50OF90ICpfdG9wLCBjb25zdCB1aW50OF90ICpfbGVmdCwKKyAgICBjb25zdCBpbnQgdywg Y29uc3QgaW50IGgsIGNvbnN0IHB0cmRpZmZfdCBzdHJpZGUsIGNvbnN0IGludCBjX2lkeCwgY29u c3QgaW50IG1vZGUsCisgICAgY29uc3QgaW50IHJlZl9pZHgsIGNvbnN0IGludCBmaWx0ZXJfZmxh ZywgY29uc3QgaW50IG5lZWRfcGRwYykKK3sKKyAgICBwaXhlbCAqc3JjICAgICAgICAgID0gKHBp eGVsICopX3NyYzsKKyAgICBjb25zdCBwaXhlbCAqbGVmdCAgID0gKGNvbnN0IHBpeGVsICopX2xl ZnQ7CisgICAgY29uc3QgcGl4ZWwgKnRvcCAgICA9IChjb25zdCBwaXhlbCAqKV90b3AgLSAoMSAr IHJlZl9pZHgpOworICAgIGNvbnN0IGludCBpbnRyYV9wcmVkX2FuZ2xlID0gZmZfdnZjX2ludHJh X3ByZWRfYW5nbGVfZGVyaXZlKG1vZGUpOworICAgIGludCBwb3MgPSAoMSArIHJlZl9pZHgpICog aW50cmFfcHJlZF9hbmdsZTsKKyAgICBjb25zdCBpbnQgZHAgPSBpbnRyYV9wcmVkX2FuZ2xlOwor ICAgIGNvbnN0IGludCBpc19sdW1hID0gIWNfaWR4OworICAgIGludCBuc2NhbGUsIGludl9hbmds ZTsKKworICAgIGlmIChuZWVkX3BkcGMpIHsKKyAgICAgICAgaW52X2FuZ2xlID0gZmZfdnZjX2lu dHJhX2ludl9hbmdsZV9kZXJpdmUoaW50cmFfcHJlZF9hbmdsZSk7CisgICAgICAgIG5zY2FsZSA9 IGZmX3Z2Y19uc2NhbGVfZGVyaXZlKHcsIGgsIG1vZGUpOworICAgIH0KKworICAgIGZvciAoaW50 IHkgPSAwOyB5IDwgaDsgeSsrKSB7CisgICAgICAgIGNvbnN0IGludCBpZHggICA9IChwb3MgPj4g NSkgKyByZWZfaWR4OworICAgICAgICBjb25zdCBpbnQgZmFjdCA9IHBvcyAmIDMxOworICAgICAg ICBpZiAoIWZhY3QgJiYgKCFpc19sdW1hIHx8ICFmaWx0ZXJfZmxhZykpIHsKKyAgICAgICAgICAg IGZvciAoaW50IHggPSAwOyB4IDwgdzsgeCsrKSB7CisgICAgICAgICAgICAgICAgY29uc3QgcGl4 ZWwgKnAgPSB0b3AgKyB4ICsgaWR4ICsgMTsKKyAgICAgICAgICAgICAgICBQT1MoeCwgeSkgPSAq cDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICghY19p ZHgpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBpbnQ4X3QgKmYgPSBmZl92dmNfaW50cmFfbHVt YV9maWx0ZXJbZmlsdGVyX2ZsYWddW2ZhY3RdOworICAgICAgICAgICAgICAgIGZvciAoaW50IHgg PSAwOyB4IDwgdzsgeCsrKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBpeGVsICpwID0g dG9wICsgeCArIGlkeDsKKyAgICAgICAgICAgICAgICAgICAgUE9TKHgsIHkpID0gSU5UUkFfTFVN QV9GSUxURVIocCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAg ICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHc7IHgrKykgeworICAgICAgICAgICAg ICAgICAgICBjb25zdCBwaXhlbCAqcCA9IHRvcCArIHggKyBpZHg7CisgICAgICAgICAgICAgICAg ICAgIFBPUyh4LCB5KSA9IElOVFJBX0NIUk9NQV9GSUxURVIocCk7CisgICAgICAgICAgICAgICAg fQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChuZWVkX3BkcGMpIHsKKyAg ICAgICAgICAgIGludCBpbnZfYW5nbGVfc3VtID0gMjU2ICsgaW52X2FuZ2xlOworICAgICAgICAg ICAgZm9yIChpbnQgeCA9IDA7IHggPCBGRk1JTih3LCAzIDw8IG5zY2FsZSk7IHgrKykgeworICAg ICAgICAgICAgICAgIGNvbnN0IHBpeGVsIGwgICA9IGxlZnRbeSArIChpbnZfYW5nbGVfc3VtID4+ IDkpXTsKKyAgICAgICAgICAgICAgICBjb25zdCBwaXhlbCB2YWwgPSBQT1MoeCwgeSk7CisgICAg ICAgICAgICAgICAgY29uc3QgaW50IHdsICAgID0gMzIgPj4gKCh4IDw8IDEpID4+IG5zY2FsZSk7 CisgICAgICAgICAgICAgICAgY29uc3QgaW50IHByZWQgID0gdmFsICsgKCgobCAtIHZhbCkgKiB3 bCArIDMyKSA+PiA2KTsKKyAgICAgICAgICAgICAgICBQT1MoeCwgeSkgPSBDTElQKHByZWQpOwor ICAgICAgICAgICAgICAgIGludl9hbmdsZV9zdW0gKz0gaW52X2FuZ2xlOworICAgICAgICAgICAg fQorICAgICAgICB9CisgICAgICAgIHBvcyArPSBkcDsKKyAgICB9Cit9CisKKy8vOC40LjUuMi4x MyBTcGVjaWZpY2F0aW9uIG9mIElOVFJBX0FOR1VMQVIyLi5JTlRSQV9BTkdVTEFSNjYgaW50cmEg cHJlZGljdGlvbiBtb2Rlcworc3RhdGljIHZvaWQgRlVOQyhwcmVkX2FuZ3VsYXJfaCkodWludDhf dCAqX3NyYywgY29uc3QgdWludDhfdCAqX3RvcCwgY29uc3QgdWludDhfdCAqX2xlZnQsCisgICAg Y29uc3QgaW50IHcsIGNvbnN0IGludCBoLCBjb25zdCBwdHJkaWZmX3Qgc3RyaWRlLCBjb25zdCBp bnQgY19pZHgsIGNvbnN0IGludCBtb2RlLAorICAgIGNvbnN0IGludCByZWZfaWR4LCBjb25zdCBp bnQgZmlsdGVyX2ZsYWcsIGNvbnN0IGludCBuZWVkX3BkcGMpCit7CisgICAgcGl4ZWwgKnNyYyAg ICAgICAgICA9IChwaXhlbCAqKV9zcmM7CisgICAgY29uc3QgcGl4ZWwgKmxlZnQgICA9IChjb25z dCBwaXhlbCAqKV9sZWZ0IC0gKDEgKyByZWZfaWR4KTsKKyAgICBjb25zdCBwaXhlbCAqdG9wICAg ID0gKGNvbnN0IHBpeGVsICopX3RvcDsKKyAgICBjb25zdCBpbnQgaXNfbHVtYSA9ICFjX2lkeDsK KyAgICBjb25zdCBpbnQgaW50cmFfcHJlZF9hbmdsZSA9IGZmX3Z2Y19pbnRyYV9wcmVkX2FuZ2xl X2Rlcml2ZShtb2RlKTsKKyAgICBjb25zdCBpbnQgZHAgPSBpbnRyYV9wcmVkX2FuZ2xlOworICAg IGludCBuc2NhbGUgPSAwLCBpbnZfYW5nbGUsIGludl9hbmdsZV9zdW07CisKKyAgICBpZiAobmVl ZF9wZHBjKSB7CisgICAgICAgIGludl9hbmdsZSA9IGZmX3Z2Y19pbnRyYV9pbnZfYW5nbGVfZGVy aXZlKGludHJhX3ByZWRfYW5nbGUpOworICAgICAgICBpbnZfYW5nbGVfc3VtID0gMjU2ICsgaW52 X2FuZ2xlOworICAgICAgICBuc2NhbGUgPSBmZl92dmNfbnNjYWxlX2Rlcml2ZSh3LCBoLCBtb2Rl KTsKKyAgICB9CisKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGg7IHkrKykgeworICAgICAgICBp bnQgcG9zID0gKDEgKyByZWZfaWR4KSAqIGludHJhX3ByZWRfYW5nbGU7CisgICAgICAgIGludCB3 dDsKKyAgICAgICAgaWYgKG5lZWRfcGRwYykKKyAgICAgICAgICAgIHd0ID0gKDMyID4+ICgoeSAq IDIpID4+IG5zY2FsZSkpOworCisgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgdzsgeCsrKSB7 CisgICAgICAgICAgICBjb25zdCBpbnQgaWR4ICA9IChwb3MgPj4gNSkgKyByZWZfaWR4OworICAg ICAgICAgICAgY29uc3QgaW50IGZhY3QgPSBwb3MgJiAzMTsKKyAgICAgICAgICAgIGNvbnN0IHBp eGVsICpwID0gbGVmdCArIHkgKyBpZHg7CisgICAgICAgICAgICBpbnQgcHJlZDsKKyAgICAgICAg ICAgIGlmICghZmFjdCAmJiAoIWlzX2x1bWEgfHwgIWZpbHRlcl9mbGFnKSkgeworICAgICAgICAg ICAgICAgIHByZWQgPSBwWzFdOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg ICBpZiAoIWNfaWR4KSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludDhfdCAqZiA9IGZm X3Z2Y19pbnRyYV9sdW1hX2ZpbHRlcltmaWx0ZXJfZmxhZ11bZmFjdF07CisgICAgICAgICAgICAg ICAgICAgIHByZWQgPSBJTlRSQV9MVU1BX0ZJTFRFUihwKTsKKyAgICAgICAgICAgICAgICB9IGVs c2UgeworICAgICAgICAgICAgICAgICAgICBwcmVkID0gSU5UUkFfQ0hST01BX0ZJTFRFUihwKTsK KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobmVlZF9w ZHBjKSB7CisgICAgICAgICAgICAgICAgaWYgKHkgPCAoMyA8PCBuc2NhbGUpKSB7CisgICAgICAg ICAgICAgICAgICAgIGNvbnN0IHBpeGVsIHQgPSB0b3BbeCArIChpbnZfYW5nbGVfc3VtID4+IDkp XTsKKyAgICAgICAgICAgICAgICAgICAgcHJlZCA9IENMSVAocHJlZCArICgoKHQgLSBwcmVkKSAq IHd0ICsgMzIpID4+IDYpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg ICAgICAgICBQT1MoeCwgeSkgPSBwcmVkOworICAgICAgICAgICAgcG9zICs9IGRwOworICAgICAg ICB9CisgICAgICAgIGlmIChuZWVkX3BkcGMpCisgICAgICAgICAgICBpbnZfYW5nbGVfc3VtICs9 IGludl9hbmdsZTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIEZVTkMoZmZfdnZjX2ludHJhX2Rz cF9pbml0KShWVkNJbnRyYURTUENvbnRleHQgKmNvbnN0IGludHJhKQoreworICAgIGludHJhLT5s bWNzX3NjYWxlX2Nocm9tYSAgPSBGVU5DKGxtY3Nfc2NhbGVfY2hyb21hKTsKKyAgICBpbnRyYS0+ aW50cmFfY2NsbV9wcmVkICAgID0gRlVOQyhpbnRyYV9jY2xtX3ByZWQpOworICAgIGludHJhLT5p bnRyYV9wcmVkICAgICAgICAgPSBGVU5DKGludHJhX3ByZWQpOworICAgIGludHJhLT5wcmVkX3Bs YW5hciAgICAgICAgPSBGVU5DKHByZWRfcGxhbmFyKTsKKyAgICBpbnRyYS0+cHJlZF9taXAgICAg ICAgICAgID0gRlVOQyhwcmVkX21pcCk7CisgICAgaW50cmEtPnByZWRfZGMgICAgICAgICAgICA9 IEZVTkMocHJlZF9kYyk7CisgICAgaW50cmEtPnByZWRfdiAgICAgICAgICAgICA9IEZVTkMocHJl ZF92KTsKKyAgICBpbnRyYS0+cHJlZF9oICAgICAgICAgICAgID0gRlVOQyhwcmVkX2gpOworICAg IGludHJhLT5wcmVkX2FuZ3VsYXJfdiAgICAgPSBGVU5DKHByZWRfYW5ndWxhcl92KTsKKyAgICBp bnRyYS0+cHJlZF9hbmd1bGFyX2ggICAgID0gRlVOQyhwcmVkX2FuZ3VsYXJfaCk7Cit9Ci0tIAoy LjI1LjEKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmZm bXBlZy1kZXZlbCBtYWlsaW5nIGxpc3QKZmZtcGVnLWRldmVsQGZmbXBlZy5vcmcKaHR0cHM6Ly9m Zm1wZWcub3JnL21haWxtYW4vbGlzdGluZm8vZmZtcGVnLWRldmVsCgpUbyB1bnN1YnNjcmliZSwg dmlzaXQgbGluayBhYm92ZSwgb3IgZW1haWwKZmZtcGVnLWRldmVsLXJlcXVlc3RAZmZtcGVnLm9y ZyB3aXRoIHN1YmplY3QgInVuc3Vic2NyaWJlIi4K