From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: <ffmpeg-devel-bounces@ffmpeg.org> Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTPS id 8201F4D15C for <ffmpegdev@gitmailbox.com>; Wed, 16 Apr 2025 06:27:41 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 8121A687B93; Wed, 16 Apr 2025 09:27:35 +0300 (EEST) Received: from NAM12-BN8-obe.outbound.protection.outlook.com (mail-bn8nam12olkn2091.outbound.protection.outlook.com [40.92.21.91]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 507DD687B93 for <ffmpeg-devel@ffmpeg.org>; Wed, 16 Apr 2025 09:27:28 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Zo/cnBMEE4OXYzFXAp+TI65sGEzNC5FcsZxZsShixCR0p1Wpa3ThwIGam4nzddmK1Ro+7mcfcvW5but+V7QP+gA4C7dUAnCFXcZ0o2BN/FCtB8lR+tbfxuA6epbKQhbx5K3xrRmWeWmU2jPSOATHQVwAo+mzoZjvp4bFXc0T0ZTlgJFoZT3gw+y9gDxSmaAoTCva+YtUP/JeR6JfnZzt0YJsdU6MqtwUQnhr+C7A2blzTF5VwLEpEO/4iZxy1sh9MB/k9eWeAOnVEYT7gdvp/fdTQhPhcSeB026zAW/o5IISl9xL34mMHKy3W/DgqwfofaWRJoC0/OVbbhJfbEXRWQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=at4o09Ce+dfBVhBE5m6ifEcxYDET70Wr2HyPpvs4Ojo=; b=J622R3yOcZfkKEOzTX5LG/IX8eSRCt6PDHEfqUZMr8gXyjqspzIxShww3i7wk/1yxkYuxUyFGDWnnmKths57O86MOitsdiolI5NS3ctBCZjFF1fyfGoCKdVgoUetQWTXT0ftb9vIug6cBcC3+qmGHamUjLzBn0ey9Y3ctBXvJP5SAseBN8OeZz0KSjwU2uVzth7DSSdm/yJCbrT9ulvMN7mXmPnGTAR7MKmVK9KjSNNXMzpNTLAWuH3i5YlYms6Qz4WOMOgnOP8YQvW4ooBE6LidlzgoZ+24/dqglV3S3447rqsAOy5dhZu3Q/qdYh+OF666VcdEcYzAXopcmQ8UQA== 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=hotmail.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=at4o09Ce+dfBVhBE5m6ifEcxYDET70Wr2HyPpvs4Ojo=; b=F74Z1L8rRnrUO6tfge1C86Ce0s8OIzf5fimcEkv1wndGcY/995p3ac+cK0mp58t6ruq4SkQKVyi9evtCHEiHMERlnpeVCEmpaorLm8jlEgYKJDcihixlVYCy/5OEwA4osEY2FGRP4S0dPOc783+Nm+ltYLGPVsz/COC23goRqanQRQLyhZuG/1lrsdmmvUkm4pGMoVSdeEk3EnPGT8GJPGcebI6q3QVw+Ck3Qxv+behnW6GLqoIEpkOiAdc7ddTXpn0du4+F/6sc1PyQ0kB7cqp8LhscPxG6ysH0ZdV47jFdmyAjDpBmLuwGSN+n1TaEw40wdGPqyYaU26HuYLugwg== Received: from DM8P223MB0365.NAMP223.PROD.OUTLOOK.COM (2603:10b6:8:b::20) by PH3PPFF9D1C34EA.NAMP223.PROD.OUTLOOK.COM (2603:10b6:518:1::547) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8632.32; Wed, 16 Apr 2025 06:27:24 +0000 Received: from DM8P223MB0365.NAMP223.PROD.OUTLOOK.COM ([fe80::bf09:8e9:b07f:98a7]) by DM8P223MB0365.NAMP223.PROD.OUTLOOK.COM ([fe80::bf09:8e9:b07f:98a7%4]) with mapi id 15.20.8632.030; Wed, 16 Apr 2025 06:27:24 +0000 From: "softworkz ." <softworkz-at-hotmail.com@ffmpeg.org> To: FFmpeg development discussions and patches <ffmpeg-devel@ffmpeg.org> Thread-Topic: [FFmpeg-devel] [PATCH 2/9] fftools/textformat: Quality improvements Thread-Index: AQHbrTth1w+2rYOrWU2mhQ1ZN1rSQ7Oj6pAAgAALFfCAAcYdAIAABaAQ Date: Wed, 16 Apr 2025 06:27:23 +0000 Message-ID: <DM8P223MB036508E3C3044737A1989524BABD2@DM8P223MB0365.NAMP223.PROD.OUTLOOK.COM> References: <pull.66.ffstaging.FFmpeg.1744634826.ffmpegagent@gmail.com> <04cce9150062afbe63fcf54af0f8480c386f4286.1744634827.git.ffmpegagent@gmail.com> <GV1P250MB073708D33D46AB881810F1728FB22@GV1P250MB0737.EURP250.PROD.OUTLOOK.COM> <DM8P223MB03659AF3483E00EC43597670BAB22@DM8P223MB0365.NAMP223.PROD.OUTLOOK.COM> <GV1P250MB073716AA776C301A980CB90B8FBD2@GV1P250MB0737.EURP250.PROD.OUTLOOK.COM> In-Reply-To: <GV1P250MB073716AA776C301A980CB90B8FBD2@GV1P250MB0737.EURP250.PROD.OUTLOOK.COM> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-publictraffictype: Email x-ms-traffictypediagnostic: DM8P223MB0365:EE_|PH3PPFF9D1C34EA:EE_ x-ms-office365-filtering-correlation-id: 7a29a3bb-a80d-49e9-feee-08dd7cafc013 x-microsoft-antispam: BCL:0; ARA:14566002|8062599003|19110799003|8060799006|15080799006|7092599003|461199028|3412199025|440099028|18061999006|41001999003|102099032; x-microsoft-antispam-message-info: =?utf-8?B?dldhaVpSV2d6dXdGdFNFVnZjKzRNeHFUdmQzcEJqbTVBR1VvQ3BYbDJ0OGtD?= =?utf-8?B?bFhaREhWUFArYWJiMHBpZUZaMUVFeUtZdlRzb3ZvK3FWcytLcXVaaTFoL3Mx?= =?utf-8?B?aDdteTAxdG1DWlNrd09aVlluajF2S3k4Ky9DK0hYT1J3eGxQVVpibnIzZmJj?= =?utf-8?B?bXdRb0RCNU5xWG00NTBEWHNOczFHNndYcytGQlNhVW1RUm1TN0tYRk5CMDE1?= =?utf-8?B?d0FmdjlMeVVVYWo5SEdJKzdZZ2JyMitvUDJaeTdGdGdBV0loQnk5cEJnTThl?= =?utf-8?B?akhHSExVaUhZb2s3S2hCbStHWGw1K2dLUEFWVzVENFlLTElxMVJWWHBhWXhy?= =?utf-8?B?ek12QWpJTytxazlQNEhYMUpXRWIxZVNpSjFPNjFKaUlZQlpQY2lhdy9lY2JQ?= =?utf-8?B?NkUyak41V2NYZFZEOVd4SThWQ0JyTjV3S1hFVGdzcXBMRGVsbXBwZEdjdGtq?= =?utf-8?B?aEFxWFJ3WDJzWmxtakQwYkMvUUlUMlMraDEvT3Y5Y2QzTHpKSHlhbENWdVN4?= =?utf-8?B?emlKTzRCWXMwMzdLZ3ZnQjFtcTFPWjNrSlVodGhkelNyZVRDbGM5aWRsNTRZ?= =?utf-8?B?dHl2Ulc5cVN2citYTWdqK25mMEpJSTZQRGl5S0pEcm5heFA3RFY4c3d6eDBZ?= =?utf-8?B?RGNiVUhXMXl4ZW54bGFsdXM3N1FtbWpRZk8xb3BML0VncWR4VVBTN1RrMWxT?= =?utf-8?B?aitlWkxEVTVka0lPSEtzQUJHWHptZ0NpRndxZjV3ME1pMFVuVitVb0NWam1M?= =?utf-8?B?OXl0bW5MSUR6QWpIYXFtNUJSTURmcG1mYmVBRU9pbkZ6SWlrNkRzZlZ4Mk1X?= =?utf-8?B?MGZpZE9Ka3R1MnRvOWZOc1VabGtPclhIa0RzV1VHUnF1bTc4RUszblg3UEZM?= =?utf-8?B?SWE4L2gybURaOVdLV0Z6NlRJcGVPckxES1FtRmdvSWlZOElFRFFSYWk3b1gz?= =?utf-8?B?cnNnYWpvdnIxSDlENERCUGlISnlmRjMwbjBiRW5oMmthV3h4Z2llQ1ZOZE9D?= =?utf-8?B?dHZaYmdRdGMrUEhxVFcwNzZjaUU2dnBpYVVmSXVuK045S284R1lIdHdWUElr?= =?utf-8?B?dUkrenk3S3llK0ZPUzFVSCtlakxUMlZHNjNmTGNNbWkxNE1JMzdzR0hmbE5R?= =?utf-8?B?WGJkSS9XaGxNSC8yMVdSdXdRc2dGUmJvQUtRc0FUVk0rQmprdDRoWktGL1pj?= =?utf-8?B?UXhBb2hOaVgzdjE5QjJ2YzhxcG1KRkIwUEV2ai9iTWZOa1oycUsrMm4vQUl5?= =?utf-8?B?UTdkNnNrQlBMVVdwVll5YlJ0eW1wNDEyYUh0RGwwa0l0cmZvWWc2bS93UGNl?= =?utf-8?B?VTd2VzhZZTQ2RkFCRDFNMnBJSmV2TDhiNUpJNjV0am5tWnVhZWJWK3o1eXNp?= =?utf-8?B?VVRuWDF2bEE4MmhMK0RGUUNxR1BNUWlCUjkvSjZZb0FvNklGc0o2d0pDTmxX?= =?utf-8?B?YjBQbzFEZ3czTEc1YmlOdWZLWHRveTQzS1BFZnY2S1g4dUcvcmViYXhsSits?= =?utf-8?B?S1oyNWU4clNRNUhjNEZPSTBZWm9KUEJ4MS92SkkrSnNwMnJEdjh6RkNRM2dG?= =?utf-8?Q?QofmjaBBuudePdDQ/BFkqVTJI=3D?= x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?Qmp1Wlo0b3ltbW9vUGJySGdlNVJvN2hqaVZhc2NoSGxVRE1MODZnZGhnT0dw?= =?utf-8?B?OURiRnl6VTZDOFRDeU9ucjdoZ3Y5K1V2cWJxMzJIcDJoN2ZPaEc4d3pBK3dE?= =?utf-8?B?czUxajM0bU1UcXZ6SFNVMmJJb1V2Y2wyanc3dWVQYm1RY2FESE0rbWV4KzMy?= =?utf-8?B?bEptSElvUEpQNVR6Z2dCR09hU0JMOU5uTXB5eUt2ZllVWElLRUU2ZTFsTlBE?= =?utf-8?B?ek5sc2ZKeCtLbzh3MHE0QWF1QUVWb2xob0VUNEd0Tlh2RXc1amk3a09VTlF1?= =?utf-8?B?TUpnS0Z4QkttcmFGZ2ltaEo0SW14RWNXYzVkQi9DUnhHamhPRGQzOVFTYjNS?= =?utf-8?B?b0xDTWJzQjBqOUFVU1NoOWNxWnp0QzZHa0xQT0pha0JQZ3dOK0ZONUkrcWUw?= =?utf-8?B?V3BXTmRaUVk2cWxaM3EycHpUdUtnYjNOS1pFVVQvOExva2k0QkM1OW9UalUw?= =?utf-8?B?elNIbjVPODJ2UW9iMlBlQTlkMVZwOWlMTzJTVlczaUxBODUzZlN5T3hJaEVP?= =?utf-8?B?TEl2S3E4dGZvdnBkTlZySGIxNW1KUGRlQ3FSVTdkTXpCMWt3c0lyUFVKVlRQ?= =?utf-8?B?V2R2V1g2czg2TnR0czZ0bVZkQnJEUUx0T0ZxT0UzVHBZV0RpTnF1d0wwcSt5?= =?utf-8?B?UWJiRTUyRVQ0SUt0WXJzSjhPWTU3RkQxZTQ5ZE9XaFpxQnFoeDdkMStUc0pY?= =?utf-8?B?ZG45amhQQzFSN1lmRzkrcTZWdW1wRlo3M21LUURCT013Q0NDRFFaWGtUblBB?= =?utf-8?B?MXpGRGV1OU1JcEc2Sk9xS0xGb1hHa2l2cnRQMkYxeUd4V1lGaVJOK0hIeHFh?= =?utf-8?B?Q2hsWGZTRDdSblBvNWg4Ujl2NStnd2VFL0tYcEVQNFUrWmxPVkxCaUtGNmhI?= =?utf-8?B?bkJsTEJwZzVsTlZTL2tNekY5SEg5c3lKaGFScUhKLzVLSFlra2ZuanJWb21O?= =?utf-8?B?NzE2MGN1SU9FRVpoN205VzA0aW5pSGlacUFHTXdaWmFKTFpuR1l3L0ZDNk4z?= =?utf-8?B?T0xCSEFnTDFKL1NmVzMxSlRKc29uaTBDTDVVNERzaEYwcmpUNnFtWkZrNmsv?= =?utf-8?B?TGpjY2RrMStJbEQ2SGRPZDluQ1pQbU9zN1dWeGs0YytlblY5THpPbk9jOXdz?= =?utf-8?B?WXdVRUc2ME9PN3M3bVY2RTRBWSt5QUE4djJVRG9MdXBnc3Nrd2E2Q25KZXFz?= =?utf-8?B?VkFxUXNTRGdmQlZGeFhRdUszN0VubEZ4ODluWm5ESDFYUldHSXZEQVhjL1Rr?= =?utf-8?B?T2FNanpHOG9za3E2K0pidHVXSTIvdHNvVFJYb2pRRlc2YXhUa1V0dTUrUUNp?= =?utf-8?B?OWhUU1NNcEVRQ2x0UXQ2WmZKK2RuU0RUS2xzOWZSaFFEOTdXZmlJUVViWSt4?= =?utf-8?B?OVE4T05pdWROdmpWK1NyZCtPR3dPdjVoZkhDcGhqMDBjYVh2NWxOb1pJdkNG?= =?utf-8?B?TzRIS1dnNzAwb1djaXpDZkVGZ3JBQ2JZc1kzbU9IT294bElLSGVxei9udVNF?= =?utf-8?B?LzNBWUJ0dlZGUXJkeHllNFA3RmFmNW1rT2RObi9qRVpvdUJEcWtySkpCa1Bs?= =?utf-8?B?NUdZVkhQQkxMRjA5V3NVeW91SUhVUzlhL2hHRkhUSFI3ZHpRRnBxNkZMODFX?= =?utf-8?Q?U65j8piK0KshNYQmj3LQbVm/EBFcC3IV7+7DCiYl7gck=3D?= MIME-Version: 1.0 X-OriginatorOrg: sct-15-20-7719-20-msonline-outlook-92255.templateTenant X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DM8P223MB0365.NAMP223.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-CrossTenant-Network-Message-Id: 7a29a3bb-a80d-49e9-feee-08dd7cafc013 X-MS-Exchange-CrossTenant-originalarrivaltime: 16 Apr 2025 06:27:23.9710 (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: PH3PPFF9D1C34EA Subject: Re: [FFmpeg-devel] [PATCH 2/9] fftools/textformat: Quality improvements X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches <ffmpeg-devel.ffmpeg.org> List-Unsubscribe: <https://ffmpeg.org/mailman/options/ffmpeg-devel>, <mailto:ffmpeg-devel-request@ffmpeg.org?subject=unsubscribe> List-Archive: <https://ffmpeg.org/pipermail/ffmpeg-devel> List-Post: <mailto:ffmpeg-devel@ffmpeg.org> List-Help: <mailto:ffmpeg-devel-request@ffmpeg.org?subject=help> List-Subscribe: <https://ffmpeg.org/mailman/listinfo/ffmpeg-devel>, <mailto:ffmpeg-devel-request@ffmpeg.org?subject=subscribe> Reply-To: FFmpeg development discussions and patches <ffmpeg-devel@ffmpeg.org> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" <ffmpeg-devel-bounces@ffmpeg.org> Archived-At: <https://master.gitmailbox.com/ffmpegdev/DM8P223MB036508E3C3044737A1989524BABD2@DM8P223MB0365.NAMP223.PROD.OUTLOOK.COM/> List-Archive: <https://master.gitmailbox.com/ffmpegdev/> List-Post: <mailto:ffmpegdev@gitmailbox.com> DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogZmZtcGVnLWRldmVsIDxm Zm1wZWctZGV2ZWwtYm91bmNlc0BmZm1wZWcub3JnPiBPbiBCZWhhbGYgT2YNCj4gQW5kcmVhcyBS aGVpbmhhcmR0DQo+IFNlbnQ6IE1pdHR3b2NoLCAxNi4gQXByaWwgMjAyNSAwNjo1MQ0KPiBUbzog ZmZtcGVnLWRldmVsQGZmbXBlZy5vcmcNCj4gU3ViamVjdDogUmU6IFtGRm1wZWctZGV2ZWxdIFtQ QVRDSCAyLzldIGZmdG9vbHMvdGV4dGZvcm1hdDogUXVhbGl0eQ0KPiBpbXByb3ZlbWVudHMNCj4g DQo+IHNvZnR3b3JreiAuOg0KPiA+DQo+ID4NCj4gPj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0t LS0NCj4gPj4gRnJvbTogZmZtcGVnLWRldmVsIDxmZm1wZWctZGV2ZWwtYm91bmNlc0BmZm1wZWcu b3JnPiBPbiBCZWhhbGYgT2YNCj4gPj4gQW5kcmVhcyBSaGVpbmhhcmR0DQo+ID4+IFNlbnQ6IERp ZW5zdGFnLCAxNS4gQXByaWwgMjAyNSAwMzowNg0KPiA+PiBUbzogZmZtcGVnLWRldmVsQGZmbXBl Zy5vcmcNCj4gPj4gU3ViamVjdDogUmU6IFtGRm1wZWctZGV2ZWxdIFtQQVRDSCAyLzldIGZmdG9v bHMvdGV4dGZvcm1hdDogUXVhbGl0eQ0KPiA+PiBpbXByb3ZlbWVudHMNCj4gPj4NCj4gPj4gc29m dHdvcmt6Og0KPiA+Pj4gRnJvbTogc29mdHdvcmt6IDxzb2Z0d29ya3pAaG90bWFpbC5jb20+DQo+ ID4+Pg0KPiA+Pj4gU2lnbmVkLW9mZi1ieTogc29mdHdvcmt6IDxzb2Z0d29ya3pAaG90bWFpbC5j b20+DQo+ID4+PiAtLS0NCj4gPj4+ICBmZnRvb2xzL3RleHRmb3JtYXQvYXZ0ZXh0Zm9ybWF0LmMg fCAxMjEgKysrKysrKysrKysrKysrKysrKy0tLS0tLQ0KPiAtLQ0KPiA+PiAtLS0NCj4gPj4+ICBm ZnRvb2xzL3RleHRmb3JtYXQvYXZ0ZXh0Zm9ybWF0LmggfCAgIDYgKy0NCj4gPj4+ICBmZnRvb2xz L3RleHRmb3JtYXQvdGZfZGVmYXVsdC5jICAgfCAgIDggKy0NCj4gPj4+ICBmZnRvb2xzL3RleHRm b3JtYXQvdGZfaW5pLmMgICAgICAgfCAgIDIgKy0NCj4gPj4+ICBmZnRvb2xzL3RleHRmb3JtYXQv dGZfanNvbi5jICAgICAgfCAgIDggKy0NCj4gPj4+ICBmZnRvb2xzL3RleHRmb3JtYXQvdGZfeG1s LmMgICAgICAgfCAgIDMgLQ0KPiA+Pj4gIGZmdG9vbHMvdGV4dGZvcm1hdC90d19hdmlvLmMgICAg ICB8ICAgOSArKy0NCj4gPj4+ICA3IGZpbGVzIGNoYW5nZWQsIDEwMSBpbnNlcnRpb25zKCspLCA1 NiBkZWxldGlvbnMoLSkNCj4gPj4+DQo+ID4+PiBkaWZmIC0tZ2l0IGEvZmZ0b29scy90ZXh0Zm9y bWF0L2F2dGV4dGZvcm1hdC5jDQo+ID4+IGIvZmZ0b29scy90ZXh0Zm9ybWF0L2F2dGV4dGZvcm1h dC5jDQo+ID4+PiBpbmRleCAxY2U1MWQxMWUyLi40MDYwMjVkMTlkIDEwMDY0NA0KPiA+Pj4gLS0t IGEvZmZ0b29scy90ZXh0Zm9ybWF0L2F2dGV4dGZvcm1hdC5jDQo+ID4+PiArKysgYi9mZnRvb2xz L3RleHRmb3JtYXQvYXZ0ZXh0Zm9ybWF0LmMNCj4gPj4+IEBAIC05Myw5ICs5Myw4IEBAIHN0YXRp YyBjb25zdCBBVkNsYXNzIHRleHRjb250ZXh0X2NsYXNzID0gew0KPiA+Pj4NCj4gPj4+ICBzdGF0 aWMgdm9pZCBicHJpbnRfYnl0ZXMoQVZCUHJpbnQgKmJwLCBjb25zdCB1aW50OF90ICp1YnVmLA0K PiBzaXplX3QNCj4gPj4gdWJ1Zl9zaXplKQ0KPiA+Pj4gIHsNCj4gPj4+IC0gICAgaW50IGk7DQo+ ID4+PiAgICAgIGF2X2JwcmludGYoYnAsICIwWCIpOw0KPiA+Pj4gLSAgICBmb3IgKGkgPSAwOyBp IDwgdWJ1Zl9zaXplOyBpKyspDQo+ID4+PiArICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB1 YnVmX3NpemU7IGkrKykNCj4gPj4NCj4gPj4gV2h5IG5vdCBzaXplX3Q/DQo+ID4NCj4gPiBCZWNh dXNlIGl0IGNyZWF0ZXMgbW9yZSB3YXJuaW5ncyBhYm91dCBuYXJyb3dpbmcgY29udmVyc2lvbnMu DQo+ID4NCj4gPg0KPiA+DQo+ID4+PiAgICAgICAgICBhdl9icHJpbnRmKGJwLCAiJTAyWCIsIHVi dWZbaV0pOw0KPiA+Pj4gIH0NCj4gPj4+DQo+ID4+PiBAQCAtMTEwLDggKzEwOSw2IEBAIGludCBh dnRleHRfY29udGV4dF9jbG9zZShBVlRleHRGb3JtYXRDb250ZXh0DQo+ID4+ICoqcHRjdHgpDQo+ ID4+Pg0KPiA+Pj4gICAgICBhdl9oYXNoX2ZyZWVwKCZ0Y3R4LT5oYXNoKTsNCj4gPj4+DQo+ID4+ PiAtICAgIGF2X2hhc2hfZnJlZXAoJnRjdHgtPmhhc2gpOw0KPiA+Pj4gLQ0KPiA+Pj4gICAgICBp ZiAodGN0eC0+Zm9ybWF0dGVyLT51bmluaXQpDQo+ID4+PiAgICAgICAgICB0Y3R4LT5mb3JtYXR0 ZXItPnVuaW5pdCh0Y3R4KTsNCj4gPj4+ICAgICAgZm9yIChpID0gMDsgaSA8IFNFQ1RJT05fTUFY X05CX0xFVkVMUzsgaSsrKQ0KPiA+Pj4gQEAgLTE0MSwxMiArMTM4LDE4IEBAIGludCBhdnRleHRf Y29udGV4dF9vcGVuKEFWVGV4dEZvcm1hdENvbnRleHQNCj4gPj4gKipwdGN0eCwNCj4gPj4+ICAg ICAgQVZUZXh0Rm9ybWF0Q29udGV4dCAqdGN0eDsNCj4gPj4+ICAgICAgaW50IGksIHJldCA9IDA7 DQo+ID4+Pg0KPiA+Pj4gLSAgICBpZiAoISh0Y3R4ID0gYXZfbWFsbG9jeihzaXplb2YoQVZUZXh0 Rm9ybWF0Q29udGV4dCkpKSkgew0KPiA+Pj4gKyAgICBpZiAoIXB0Y3R4IHx8ICFmb3JtYXR0ZXIp DQo+ID4+PiArICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOw0KPiA+Pg0KPiA+PiBDYW4g dGhpcyBoYXBwZW4/DQo+ID4NCj4gPiBzZWUgYmVsb3cNCj4gPg0KPiA+Pj4gKw0KPiA+Pj4gKyAg ICBpZiAoIWZvcm1hdHRlci0+cHJpdl9zaXplICYmIGZvcm1hdHRlci0+cHJpdl9jbGFzcykNCj4g Pj4+ICsgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7DQo+ID4+DQo+ID4+IFN0dWZmIGxp a2UgdGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuIGFuZCBzaG91bGQgbm90IGJlIGNoZWNrZWQgKG9y DQo+ID4+IGFjdHVhbGx5OiB0aGUgcHJvcGVyIHBsYWNlIHRvIGNoZWNrIHN0dWZmIGxpa2UgdGhp cyBpcyBpbiB0ZXN0DQo+IHRvb2xzDQo+ID4+IGxpa2UgbGF2Yy90ZXN0cy9hdmNvZGVjLmMsIGJ1 dCBJIGRvbid0IHRoaW5rIGl0IGlzIHdvcnRoIGl0IGZvcg0KPiA+PiBmZnRvb2xzKS4NCj4gPg0K PiA+IEkgcHJvYmFibHkgb3ZlcmRpZCBpdCBhIGJpdCB3aXRoIGNoZWNrcywgYnV0IHRoZSBnb2Fs IGZvciB0aGlzIEFQSQ0KPiA+IGlzIHN0aWxsIHRvIGJlY29tZSBwdWJsaWMgYXQgc29tZSBwb2lu dCAobGlrZSBpbiBhdnV0aWwpLCBzbyBJDQo+ID4gdHJpZWQgdG8gbW92ZSB0b3dhcmRzIHRoYXQg ZGlyZWN0aW9uIGFscmVhZHkuDQo+ID4NCj4gPg0KPiA+DQo+ID4NCj4gPj4+ICsNCj4gPj4+ICsg ICAgaWYgKCEoKHRjdHggPSBhdl9tYWxsb2N6KHNpemVvZihBVlRleHRGb3JtYXRDb250ZXh0KSkp KSkgew0KPiA+Pj4gICAgICAgICAgcmV0ID0gQVZFUlJPUihFTk9NRU0pOw0KPiA+Pj4gICAgICAg ICAgZ290byBmYWlsOw0KPiA+Pj4gICAgICB9DQo+ID4+Pg0KPiA+Pj4gLSAgICBpZiAoISh0Y3R4 LT5wcml2ID0gYXZfbWFsbG9jeihmb3JtYXR0ZXItPnByaXZfc2l6ZSkpKSB7DQo+ID4+PiArICAg IGlmIChmb3JtYXR0ZXItPnByaXZfc2l6ZSAmJiAhKCh0Y3R4LT5wcml2ID0NCj4gPj4gYXZfbWFs bG9jeihmb3JtYXR0ZXItPnByaXZfc2l6ZSkpKSkgew0KPiA+Pj4gICAgICAgICAgcmV0ID0gQVZF UlJPUihFTk9NRU0pOw0KPiA+Pj4gICAgICAgICAgZ290byBmYWlsOw0KPiA+Pj4gICAgICB9DQo+ ID4+PiBAQCAtMjE1LDE1ICsyMTgsMTUgQEAgaW50IGF2dGV4dF9jb250ZXh0X29wZW4oQVZUZXh0 Rm9ybWF0Q29udGV4dA0KPiA+PiAqKnB0Y3R4LA0KPiA+Pj4NCj4gPj4+ICAgICAgLyogdmFsaWRh dGUgcmVwbGFjZSBzdHJpbmcgKi8NCj4gPj4+ICAgICAgew0KPiA+Pj4gLSAgICAgICAgY29uc3Qg dWludDhfdCAqcCA9IHRjdHgtPnN0cmluZ192YWxpZGF0aW9uX3JlcGxhY2VtZW50Ow0KPiA+Pj4g LSAgICAgICAgY29uc3QgdWludDhfdCAqZW5kcCA9IHAgKyBzdHJsZW4ocCk7DQo+ID4+PiArICAg ICAgICBjb25zdCB1aW50OF90ICpwID0gKHVpbnQ4X3QgKil0Y3R4LQ0KPiA+Pj4gc3RyaW5nX3Zh bGlkYXRpb25fcmVwbGFjZW1lbnQ7DQo+ID4+PiArICAgICAgICBjb25zdCB1aW50OF90ICplbmRw ID0gcCArIHN0cmxlbigoY29uc3QgY2hhciAqKXApOw0KPiA+Pj4gICAgICAgICAgd2hpbGUgKCpw KSB7DQo+ID4+PiAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqcDAgPSBwOw0KPiA+Pj4gICAg ICAgICAgICAgIGludDMyX3QgY29kZTsNCj4gPj4+ICAgICAgICAgICAgICByZXQgPSBhdl91dGY4 X2RlY29kZSgmY29kZSwgJnAsIGVuZHAsIHRjdHgtDQo+ID4+PiBzdHJpbmdfdmFsaWRhdGlvbl91 dGY4X2ZsYWdzKTsNCj4gPj4+ICAgICAgICAgICAgICBpZiAocmV0IDwgMCkgew0KPiA+Pj4gICAg ICAgICAgICAgICAgICBBVkJQcmludCBicDsNCj4gPj4+IC0gICAgICAgICAgICAgICAgYXZfYnBy aW50X2luaXQoJmJwLCAwLCBBVl9CUFJJTlRfU0laRV9BVVRPTUFUSUMpOw0KPiA+Pj4gKyAgICAg ICAgICAgICAgICBhdl9icHJpbnRfaW5pdCgmYnAsIDAsIEFWX0JQUklOVF9TSVpFX1VOTElNSVRF RCk7DQo+ID4+DQo+ID4+IFRoaXMgYWRkcyBhIG1lbWxlYWsgb24gZGF0YSB3aGVyZSBpdCBtYWtl cyBhIGRpZmZlcmVuY2UuDQo+ID4NCj4gPiBXaHk/IFRoZSBzdHJpbmdfdmFsaWRhdGlvbl9yZXBs YWNlbWVudCBzdHJpbmcgc2hvdWxkIGJlIHNob3J0IGVub3VnaA0KPiA+IHRvIGZpdCBpbnRvIHRo ZSBzdGFjay1hbGxvY2F0ZWQgbWVtb3J5LCBubz8NCj4gPg0KPiA+DQo+ID4+PiAgICAgICAgICAg ICAgICAgIGJwcmludF9ieXRlcygmYnAsIHAwLCBwIC0gcDApLA0KPiA+Pj4gICAgICAgICAgICAg ICAgICAgICAgYXZfbG9nKHRjdHgsIEFWX0xPR19FUlJPUiwNCj4gPj4+ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAiSW52YWxpZCBVVEY4IHNlcXVlbmNlICVzIGZvdW5kIGluDQo+ID4+IHN0 cmluZyB2YWxpZGF0aW9uIHJlcGxhY2UgJyVzJ1xuIiwNCj4gPj4+IEBAIC0yNTksNiArMjYyLDkg QEAgc3RhdGljIGNvbnN0IGNoYXIgdW5pdF9iaXRfcGVyX3NlY29uZF9zdHJbXSA9DQo+ID4+ICJi aXQvcyI7DQo+ID4+Pg0KPiA+Pj4gIHZvaWQgYXZ0ZXh0X3ByaW50X3NlY3Rpb25faGVhZGVyKEFW VGV4dEZvcm1hdENvbnRleHQgKnRjdHgsIGNvbnN0DQo+ID4+IHZvaWQgKmRhdGEsIGludCBzZWN0 aW9uX2lkKQ0KPiA+Pj4gIHsNCj4gPj4+ICsgICAgaWYgKCF0Y3R4IHx8IHNlY3Rpb25faWQgPCAw IHx8IHNlY3Rpb25faWQgPj0gdGN0eC0NCj4gPm5iX3NlY3Rpb25zKQ0KPiA+Pj4gKyAgICAgICAg cmV0dXJuOw0KPiA+Pg0KPiA+PiBDYW4gdGhpcyBoYXBwZW4/DQo+ID4NCj4gPiBGb3IgYSBwdWJs aWMgQVBJIC0gbWFueSB0aGluZ3MgY2FuIGhhcHBlbi4uLg0KPiA+DQo+ID4NCj4gPj4+ICAgICAg dGN0eC0+bGV2ZWwrKzsNCj4gPj4+ICAgICAgYXZfYXNzZXJ0MCh0Y3R4LT5sZXZlbCA8IFNFQ1RJ T05fTUFYX05CX0xFVkVMUyk7DQo+ID4+Pg0KPiA+Pj4gQEAgLTI3Miw2ICsyNzgsOSBAQCB2b2lk DQo+ID4+IGF2dGV4dF9wcmludF9zZWN0aW9uX2hlYWRlcihBVlRleHRGb3JtYXRDb250ZXh0ICp0 Y3R4LCBjb25zdCB2b2lkDQo+ID4+ICpkYXRhLCBpbg0KPiA+Pj4NCj4gPj4+ICB2b2lkIGF2dGV4 dF9wcmludF9zZWN0aW9uX2Zvb3RlcihBVlRleHRGb3JtYXRDb250ZXh0ICp0Y3R4KQ0KPiA+Pj4g IHsNCj4gPj4+ICsgICAgaWYgKCF0Y3R4IHx8IHRjdHgtPmxldmVsIDwgMCB8fCB0Y3R4LT5sZXZl bCA+PQ0KPiA+PiBTRUNUSU9OX01BWF9OQl9MRVZFTFMpDQo+ID4+PiArICAgICAgICByZXR1cm47 DQo+ID4+DQo+ID4+IENhbiB0aGlzIGhhcHBlbj8NCj4gPg0KPiA+IFllcyAtIHdoZW4gc29tZXdo ZXJlIGluIEZGbXBlZyBzb21lIG91dHB1dCBpcyBjaGFuZ2VkIHdpdGhvdXQNCj4gdGhpbmtpbmcN Cj4gPiBhYm91dCB0aGF0IHRoZXJlJ3MgYSBuZXN0aW5nIGxpbWl0IG9mIFNFQ1RJT05fTUFYX05C X0xFVkVMUy4NCj4gPiBFdmVuIHdoZW4gb25seSAyIG9yIDMgc2VjdGlvbiB0eXBlcyBhcmUgZGVm aW5lZCwgdGhlIGxldmVsIGNhbiBnbw0KPiBiZXlvbmQNCj4gPiB0aGF0IHZhbHVlLg0KPiA+DQo+ ID4NCj4gPj4NCj4gPj4+ICsNCj4gPj4+ICAgICAgaW50IHNlY3Rpb25faWQgPSB0Y3R4LT5zZWN0 aW9uW3RjdHgtPmxldmVsXS0+aWQ7DQo+ID4+PiAgICAgIGludCBwYXJlbnRfc2VjdGlvbl9pZCA9 IHRjdHgtPmxldmVsDQo+ID4+PiAgICAgICAgICA/IHRjdHgtPnNlY3Rpb25bdGN0eC0+bGV2ZWwg LSAxXS0+aWQNCj4gPj4+IEBAIC0yODksNyArMjk4LDEyIEBAIHZvaWQNCj4gPj4gYXZ0ZXh0X3By aW50X3NlY3Rpb25fZm9vdGVyKEFWVGV4dEZvcm1hdENvbnRleHQgKnRjdHgpDQo+ID4+Pg0KPiA+ Pj4gIHZvaWQgYXZ0ZXh0X3ByaW50X2ludGVnZXIoQVZUZXh0Rm9ybWF0Q29udGV4dCAqdGN0eCwg Y29uc3QgY2hhcg0KPiA+PiAqa2V5LCBpbnQ2NF90IHZhbCkNCj4gPj4+ICB7DQo+ID4+PiAtICAg IGNvbnN0IHN0cnVjdCBBVlRleHRGb3JtYXRTZWN0aW9uICpzZWN0aW9uID0gdGN0eC0NCj4gPnNl Y3Rpb25bdGN0eC0NCj4gPj4+IGxldmVsXTsNCj4gPj4+ICsgICAgY29uc3QgQVZUZXh0Rm9ybWF0 U2VjdGlvbiAqc2VjdGlvbjsNCj4gPj4+ICsNCj4gPj4+ICsgICAgaWYgKCF0Y3R4IHx8ICFrZXkg fHwgdGN0eC0+bGV2ZWwgPCAwIHx8IHRjdHgtPmxldmVsID49DQo+ID4+IFNFQ1RJT05fTUFYX05C X0xFVkVMUykNCj4gPj4+ICsgICAgICAgIHJldHVybjsNCj4gPj4NCj4gPj4gQ2FuIHRoaXMgaGFw cGVuPw0KPiA+DQo+ID4NCj4gPiBzZWUgYWJvdmUNCj4gPg0KPiA+DQo+ID4+DQo+ID4+PiArDQo+ ID4+PiArICAgIHNlY3Rpb24gPSB0Y3R4LT5zZWN0aW9uW3RjdHgtPmxldmVsXTsNCj4gPj4+DQo+ ID4+PiAgICAgIGlmIChzZWN0aW9uLT5zaG93X2FsbF9lbnRyaWVzIHx8IGF2X2RpY3RfZ2V0KHNl Y3Rpb24tDQo+ID4+PiBlbnRyaWVzX3RvX3Nob3csIGtleSwgTlVMTCwgMCkpIHsNCj4gPj4+ICAg ICAgICAgIHRjdHgtPmZvcm1hdHRlci0+cHJpbnRfaW50ZWdlcih0Y3R4LCBrZXksIHZhbCk7DQo+ ID4+PiBAQCAtMjk5LDI0ICszMTMsMjggQEAgdm9pZA0KPiBhdnRleHRfcHJpbnRfaW50ZWdlcihB VlRleHRGb3JtYXRDb250ZXh0DQo+ID4+ICp0Y3R4LCBjb25zdCBjaGFyICprZXksIGludDY0X3Qg dmENCj4gPj4+DQo+ID4+PiAgc3RhdGljIGlubGluZSBpbnQgdmFsaWRhdGVfc3RyaW5nKEFWVGV4 dEZvcm1hdENvbnRleHQgKnRjdHgsIGNoYXINCj4gPj4gKipkc3RwLCBjb25zdCBjaGFyICpzcmMp DQo+ID4+PiAgew0KPiA+Pj4gLSAgICBjb25zdCB1aW50OF90ICpwLCAqZW5kcDsNCj4gPj4+ICsg ICAgY29uc3QgdWludDhfdCAqcCwgKmVuZHAsICpzcmNwID0gKGNvbnN0IHVpbnQ4X3QgKilzcmM7 DQo+ID4+PiAgICAgIEFWQlByaW50IGRzdGJ1ZjsNCj4gPj4+ICsgICAgQVZCUHJpbnQgYnA7DQo+ ID4+PiAgICAgIGludCBpbnZhbGlkX2NoYXJzX25iID0gMCwgcmV0ID0gMDsNCj4gPj4+DQo+ID4+ PiArICAgIGlmICghdGN0eCB8fCAhZHN0cCB8fCAhc3JjKQ0KPiA+Pj4gKyAgICAgICAgcmV0dXJu IEFWRVJST1IoRUlOVkFMKTsNCj4gPj4+ICsNCj4gPj4NCj4gPj4gQ2FuIHRoaXMgaGFwcGVuPw0K PiA+Pg0KPiA+Pj4gKyAgICAqZHN0cCA9IE5VTEw7DQo+ID4+PiAgICAgIGF2X2JwcmludF9pbml0 KCZkc3RidWYsIDAsIEFWX0JQUklOVF9TSVpFX1VOTElNSVRFRCk7DQo+ID4+PiArICAgIGF2X2Jw cmludF9pbml0KCZicCwgMCwgQVZfQlBSSU5UX1NJWkVfVU5MSU1JVEVEKTsNCj4gPj4+DQo+ID4+ PiAtICAgIGVuZHAgPSBzcmMgKyBzdHJsZW4oc3JjKTsNCj4gPj4+IC0gICAgZm9yIChwID0gc3Jj OyAqcDspIHsNCj4gPj4+IC0gICAgICAgIHVpbnQzMl90IGNvZGU7DQo+ID4+PiArICAgIGVuZHAg PSBzcmNwICsgc3RybGVuKHNyYyk7DQo+ID4+PiArICAgIGZvciAocCA9IHNyY3A7ICpwOykgew0K PiA+Pj4gKyAgICAgICAgaW50MzJfdCBjb2RlOw0KPiA+Pj4gICAgICAgICAgaW50IGludmFsaWQg PSAwOw0KPiA+Pj4gICAgICAgICAgY29uc3QgdWludDhfdCAqcDAgPSBwOw0KPiA+Pj4NCj4gPj4+ ICAgICAgICAgIGlmIChhdl91dGY4X2RlY29kZSgmY29kZSwgJnAsIGVuZHAsIHRjdHgtDQo+ID4+ PiBzdHJpbmdfdmFsaWRhdGlvbl91dGY4X2ZsYWdzKSA8IDApIHsNCj4gPj4+IC0gICAgICAgICAg ICBBVkJQcmludCBicDsNCj4gPj4+IC0gICAgICAgICAgICBhdl9icHJpbnRfaW5pdCgmYnAsIDAs IEFWX0JQUklOVF9TSVpFX0FVVE9NQVRJQyk7DQo+ID4+PiAtICAgICAgICAgICAgYnByaW50X2J5 dGVzKCZicCwgcDAsIHAtcDApOw0KPiA+Pj4gLSAgICAgICAgICAgIGF2X2xvZyh0Y3R4LCBBVl9M T0dfREVCVUcsDQo+ID4+PiAtICAgICAgICAgICAgICAgICAgICJJbnZhbGlkIFVURi04IHNlcXVl bmNlICVzIGZvdW5kIGluIHN0cmluZw0KPiA+PiAnJXMnXG4iLCBicC5zdHIsIHNyYyk7DQo+ID4+ PiArICAgICAgICAgICAgYXZfYnByaW50X2NsZWFyKCZicCk7DQo+ID4+PiArICAgICAgICAgICAg YnByaW50X2J5dGVzKCZicCwgcDAsIHAgLSBwMCk7DQo+ID4+PiArICAgICAgICAgICAgYXZfbG9n KHRjdHgsIEFWX0xPR19ERUJVRywgIkludmFsaWQgVVRGLTggc2VxdWVuY2UgJXMNCj4gPj4gZm91 bmQgaW4gc3RyaW5nICclcydcbiIsIGJwLnN0ciwgc3JjKTsNCj4gPj4+ICAgICAgICAgICAgICBp bnZhbGlkID0gMTsNCj4gPj4+ICAgICAgICAgIH0NCj4gPj4+DQo+ID4+PiBAQCAtMzM2LDcgKzM1 NCw3IEBAIHN0YXRpYyBpbmxpbmUgaW50DQo+ID4+IHZhbGlkYXRlX3N0cmluZyhBVlRleHRGb3Jt YXRDb250ZXh0ICp0Y3R4LCBjaGFyICoqZHN0cCwgY29uc3QNCj4gPj4+ICAgICAgICAgIH0NCj4g Pj4+DQo+ID4+PiAgICAgICAgICBpZiAoIWludmFsaWQgfHwgdGN0eC0+c3RyaW5nX3ZhbGlkYXRp b24gPT0NCj4gPj4gQVZfVEVYVEZPUk1BVF9TVFJJTkdfVkFMSURBVElPTl9JR05PUkUpDQo+ID4+ PiAtICAgICAgICAgICAgYXZfYnByaW50X2FwcGVuZF9kYXRhKCZkc3RidWYsIHAwLCBwLXAwKTsN Cj4gPj4+ICsgICAgICAgICAgICBhdl9icHJpbnRfYXBwZW5kX2RhdGEoJmRzdGJ1ZiwgKGNvbnN0 IGNoYXIgKilwMCwgcCAtDQo+ID4+IHAwKTsNCj4gPj4+ICAgICAgfQ0KPiA+Pj4NCj4gPj4+ICAg ICAgaWYgKGludmFsaWRfY2hhcnNfbmIgJiYgdGN0eC0+c3RyaW5nX3ZhbGlkYXRpb24gPT0NCj4g Pj4gQVZfVEVYVEZPUk1BVF9TVFJJTkdfVkFMSURBVElPTl9SRVBMQUNFKQ0KPiA+Pj4gQEAgLTM0 Niw2ICszNjQsNyBAQCBzdGF0aWMgaW5saW5lIGludA0KPiA+PiB2YWxpZGF0ZV9zdHJpbmcoQVZU ZXh0Rm9ybWF0Q29udGV4dCAqdGN0eCwgY2hhciAqKmRzdHAsIGNvbnN0DQo+ID4+Pg0KPiA+Pj4g IGVuZDoNCj4gPj4+ICAgICAgYXZfYnByaW50X2ZpbmFsaXplKCZkc3RidWYsIGRzdHApOw0KPiA+ Pj4gKyAgICBhdl9icHJpbnRfZmluYWxpemUoJmJwLCBOVUxMKTsNCj4gPj4+ICAgICAgcmV0dXJu IHJldDsNCj4gPj4+ICB9DQo+ID4+Pg0KPiA+Pj4gQEAgLTM1OCwxNyArMzc3LDE4IEBAIHN0cnVj dCB1bml0X3ZhbHVlIHsNCj4gPj4+ICAgICAgY29uc3QgY2hhciAqdW5pdDsNCj4gPj4+ICB9Ow0K PiA+Pj4NCj4gPj4+IC1zdGF0aWMgY2hhciAqdmFsdWVfc3RyaW5nKEFWVGV4dEZvcm1hdENvbnRl eHQgKnRjdHgsIGNoYXIgKmJ1ZiwNCj4gaW50DQo+ID4+IGJ1Zl9zaXplLCBzdHJ1Y3QgdW5pdF92 YWx1ZSB1dikNCj4gPj4+ICtzdGF0aWMgY2hhciAqdmFsdWVfc3RyaW5nKGNvbnN0IEFWVGV4dEZv cm1hdENvbnRleHQgKnRjdHgsIGNoYXINCj4gPj4gKmJ1ZiwgaW50IGJ1Zl9zaXplLCBzdHJ1Y3Qg dW5pdF92YWx1ZSB1dikNCj4gPj4+ICB7DQo+ID4+PiAgICAgIGRvdWJsZSB2YWxkOw0KPiA+Pj4g LSAgICBpbnQ2NF90IHZhbGk7DQo+ID4+PiArICAgIGludDY0X3QgdmFsaSA9IDA7DQo+ID4+PiAg ICAgIGludCBzaG93X2Zsb2F0ID0gMDsNCj4gPj4+DQo+ID4+PiAgICAgIGlmICh1di51bml0ID09 IHVuaXRfc2Vjb25kX3N0cikgew0KPiA+Pj4gICAgICAgICAgdmFsZCA9IHV2LnZhbC5kOw0KPiA+ Pj4gICAgICAgICAgc2hvd19mbG9hdCA9IDE7DQo+ID4+PiAgICAgIH0gZWxzZSB7DQo+ID4+PiAt ICAgICAgICB2YWxkID0gdmFsaSA9IHV2LnZhbC5pOw0KPiA+Pj4gKyAgICAgICAgdmFsZCA9IChk b3VibGUpdXYudmFsLmk7DQo+ID4+PiArICAgICAgICB2YWxpID0gdXYudmFsLmk7DQo+ID4+PiAg ICAgIH0NCj4gPj4+DQo+ID4+PiAgICAgIGlmICh1di51bml0ID09IHVuaXRfc2Vjb25kX3N0ciAm JiB0Y3R4LQ0KPiA+Pj4gdXNlX3ZhbHVlX3NleGFnZXNpbWFsX2Zvcm1hdCkgew0KPiA+Pj4gQEAg LTM4NywxNyArNDA3LDE3IEBAIHN0YXRpYyBjaGFyDQo+ICp2YWx1ZV9zdHJpbmcoQVZUZXh0Rm9y bWF0Q29udGV4dA0KPiA+PiAqdGN0eCwgY2hhciAqYnVmLCBpbnQgYnVmX3NpemUsIHN0DQo+ID4+ PiAgICAgICAgICAgICAgaW50NjRfdCBpbmRleDsNCj4gPj4+DQo+ID4+PiAgICAgICAgICAgICAg aWYgKHV2LnVuaXQgPT0gdW5pdF9ieXRlX3N0ciAmJiB0Y3R4LQ0KPiA+Pj4gdXNlX2J5dGVfdmFs dWVfYmluYXJ5X3ByZWZpeCkgew0KPiA+Pj4gLSAgICAgICAgICAgICAgICBpbmRleCA9IChpbnQ2 NF90KSAobG9nMih2YWxkKSkgLyAxMDsNCj4gPj4+IC0gICAgICAgICAgICAgICAgaW5kZXggPSBh dl9jbGlwKGluZGV4LCAwLA0KPiA+PiBGRl9BUlJBWV9FTEVNUyhzaV9wcmVmaXhlcykgLSAxKTsN Cj4gPj4+ICsgICAgICAgICAgICAgICAgaW5kZXggPSAoaW50NjRfdCkobG9nMih2YWxkKSAvIDEw KTsNCj4gPj4+ICsgICAgICAgICAgICAgICAgaW5kZXggPSBhdl9jbGlwNjQoaW5kZXgsIDAsDQo+ ID4+IEZGX0FSUkFZX0VMRU1TKHNpX3ByZWZpeGVzKSAtIDEpOw0KPiA+Pj4gICAgICAgICAgICAg ICAgICB2YWxkIC89IHNpX3ByZWZpeGVzW2luZGV4XS5iaW5fdmFsOw0KPiA+Pj4gICAgICAgICAg ICAgICAgICBwcmVmaXhfc3RyaW5nID0gc2lfcHJlZml4ZXNbaW5kZXhdLmJpbl9zdHI7DQo+ID4+ PiAgICAgICAgICAgICAgfSBlbHNlIHsNCj4gPj4+IC0gICAgICAgICAgICAgICAgaW5kZXggPSAo aW50NjRfdCkgKGxvZzEwKHZhbGQpKSAvIDM7DQo+ID4+PiAtICAgICAgICAgICAgICAgIGluZGV4 ID0gYXZfY2xpcChpbmRleCwgMCwNCj4gPj4gRkZfQVJSQVlfRUxFTVMoc2lfcHJlZml4ZXMpIC0g MSk7DQo+ID4+PiArICAgICAgICAgICAgICAgIGluZGV4ID0gKGludDY0X3QpKGxvZzEwKHZhbGQp IC8gMyk7DQo+ID4+PiArICAgICAgICAgICAgICAgIGluZGV4ID0gYXZfY2xpcDY0KGluZGV4LCAw LA0KPiA+PiBGRl9BUlJBWV9FTEVNUyhzaV9wcmVmaXhlcykgLSAxKTsNCj4gPj4+ICAgICAgICAg ICAgICAgICAgdmFsZCAvPSBzaV9wcmVmaXhlc1tpbmRleF0uZGVjX3ZhbDsNCj4gPj4+ICAgICAg ICAgICAgICAgICAgcHJlZml4X3N0cmluZyA9IHNpX3ByZWZpeGVzW2luZGV4XS5kZWNfc3RyOw0K PiA+Pj4gICAgICAgICAgICAgIH0NCj4gPj4+IC0gICAgICAgICAgICB2YWxpID0gdmFsZDsNCj4g Pj4+ICsgICAgICAgICAgICB2YWxpID0gKGludDY0X3QpdmFsZDsNCj4gPj4+ICAgICAgICAgIH0N Cj4gPj4+DQo+ID4+PiAgICAgICAgICBpZiAoc2hvd19mbG9hdCB8fCAodGN0eC0+dXNlX3ZhbHVl X3ByZWZpeCAmJiB2YWxkICE9DQo+ID4+IChpbnQ2NF90KXZhbGQpKQ0KPiA+Pj4gQEAgLTQyNSw5 ICs0NDUsMTQgQEAgdm9pZA0KPiBhdnRleHRfcHJpbnRfdW5pdF9pbnQoQVZUZXh0Rm9ybWF0Q29u dGV4dA0KPiA+PiAqdGN0eCwgY29uc3QgY2hhciAqa2V5LCBpbnQgdmFsdWUNCj4gPj4+DQo+ID4+ PiAgaW50IGF2dGV4dF9wcmludF9zdHJpbmcoQVZUZXh0Rm9ybWF0Q29udGV4dCAqdGN0eCwgY29u c3QgY2hhcg0KPiAqa2V5LA0KPiA+PiBjb25zdCBjaGFyICp2YWwsIGludCBmbGFncykNCj4gPj4+ ICB7DQo+ID4+PiAtICAgIGNvbnN0IHN0cnVjdCBBVlRleHRGb3JtYXRTZWN0aW9uICpzZWN0aW9u ID0gdGN0eC0NCj4gPnNlY3Rpb25bdGN0eC0NCj4gPj4+IGxldmVsXTsNCj4gPj4+ICsgICAgY29u c3QgQVZUZXh0Rm9ybWF0U2VjdGlvbiAqc2VjdGlvbjsNCj4gPj4+ICAgICAgaW50IHJldCA9IDA7 DQo+ID4+Pg0KPiA+Pj4gKyAgICBpZiAoIXRjdHggfHwgIWtleSB8fCAhdmFsIHx8IHRjdHgtPmxl dmVsIDwgMCB8fCB0Y3R4LT5sZXZlbA0KPiA+PQ0KPiA+PiBTRUNUSU9OX01BWF9OQl9MRVZFTFMp DQo+ID4+PiArICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOw0KPiA+Pg0KPiA+PiBDYW4g dGhpcyBoYXBwZW4/DQo+ID4+DQo+ID4+PiArDQo+ID4+PiArICAgIHNlY3Rpb24gPSB0Y3R4LT5z ZWN0aW9uW3RjdHgtPmxldmVsXTsNCj4gPj4+ICsNCj4gPj4+ICAgICAgaWYgKHRjdHgtPnNob3df b3B0aW9uYWxfZmllbGRzID09IFNIT1dfT1BUSU9OQUxfRklFTERTX05FVkVSDQo+IHx8DQo+ID4+ PiAgICAgICAgICAodGN0eC0+c2hvd19vcHRpb25hbF9maWVsZHMgPT0gU0hPV19PUFRJT05BTF9G SUVMRFNfQVVUTw0KPiA+Pj4gICAgICAgICAgICAgICYmIChmbGFncyAmIEFWX1RFWFRGT1JNQVRf UFJJTlRfU1RSSU5HX09QVElPTkFMKQ0KPiA+Pj4gQEAgLTQ2Miw3ICs0ODcsNyBAQCBpbnQgYXZ0 ZXh0X3ByaW50X3N0cmluZyhBVlRleHRGb3JtYXRDb250ZXh0DQo+ID4+ICp0Y3R4LCBjb25zdCBj aGFyICprZXksIGNvbnN0IGNoYXIgKg0KPiA+Pj4gIHZvaWQgYXZ0ZXh0X3ByaW50X3JhdGlvbmFs KEFWVGV4dEZvcm1hdENvbnRleHQgKnRjdHgsIGNvbnN0IGNoYXINCj4gPj4gKmtleSwgQVZSYXRp b25hbCBxLCBjaGFyIHNlcCkNCj4gPj4+ICB7DQo+ID4+PiAgICAgIEFWQlByaW50IGJ1ZjsNCj4g Pj4+IC0gICAgYXZfYnByaW50X2luaXQoJmJ1ZiwgMCwgQVZfQlBSSU5UX1NJWkVfQVVUT01BVElD KTsNCj4gPj4+ICsgICAgYXZfYnByaW50X2luaXQoJmJ1ZiwgMCwgQVZfQlBSSU5UX1NJWkVfVU5M SU1JVEVEKTsNCj4gPj4NCj4gPj4gVGhpcyBpcyBzdHJpY3RseSB3b3JzZSB0aGFuIHdoYXQgd2Fz IGhlcmUgYmVmb3JlOiBXaXRoIFVOTElNSVRFRA0KPiB5b3UNCj4gPj4gd291bGQgaGF2ZSBhIG1l bWxlYWsgaW4gY2FzZSB0aGUgaW50ZXJuYWwgYnVmZmVyIHdvdWxkbid0IHN1ZmZpY2UuDQo+ID4+ IChCdXQgYW55d2F5LCB0aGlzIHNob3VsZCB1c2Ugc25wcmludGYuIEkganVzdCBzZW50IGEgcGF0 Y2ggZm9yDQo+IHRoaXMuKQ0KPiA+DQo+ID4gVG8gYmUgaG9uZXN0LCBJIGRvbid0IHNlZSBtdWNo IHZhbHVlIGluIEFWX0JQUklOVF9TSVpFX0FVVE9NQVRJQy4NCj4gPiBXaGVuIEkgd291bGQgbmVl ZCB0byBjaGVjayB0aGUgcmV0dXJuIHZhbHVlcyBvZiBhbGwgYnByaW50DQo+IG9wZXJhdGlvbnMs DQo+ID4gYWxsIHRoZSBjb252ZW5pZW5jZSB3b3VsZCBnbyBvdmVyIGJvYXJkIGluc3RhbnRseS4g VXNpbmcNCj4gPiBBVl9CUFJJTlRfU0laRV9BVVRPTUFUSUMgd2l0aG91dCByZXR1cm4gdmFsdWUg Y2hlY2tpbmcgaXMgZXJyb3ItDQo+IHByb25lDQo+ID4gYW5kIGNhbiBjYXVzZSBlcnJvcnMgd2hp Y2ggbWlnaHQgYmUgaGFyZCB0byBpZGVudGlmeS4NCj4gPiBPbiB0aGUgb3RoZXIgc2lkZSwgaWRl bnRpZnlpbmcgcGxhY2VzIGluIGNvZGUgd2hlcmUNCj4gQVZfQlBSSU5UX1NJWkVfVU5MSU1JVEVE DQo+ID4gaXMgdXNlZCBhbmQgZmluYWxpemUgaXMgbmVlZGVkIGlzIGEgbG90IGVhc2llciBhbmQg ZG9lc24ndCBldmVuIG5lZWQNCj4gPiBhIHNwZWNpZmljIGNhc2UgYW5kL29yIGRlYnVnZ2luZyB0 byBmaW5kIG91dC4NCj4gPg0KPiA+IEluIHRoZSB3b3JzdCBjYXNlLCBJJ2Qgc3RpbGwgcHJlZmVy IGEgbWVtb3J5IGxlYWsgb3ZlciBpbmNvcnJlY3QNCj4gPiBiZWhhdmlvciAob3Igd2VsbCAtIGFs d2F5cyBkZXBlbmRzIG9uIHRoZSBjYXNlKS4gQnkgdGhhdCBJIGRvbid0DQo+IG1lYW4NCj4gPiBl cnJvcnMgdGhhdCBhcmUgcmVwb3J0ZWQgYW5kIGNhdXNpbmcgZmFpbHVyZSBidXQgdGhvc2UgdGhp bmdzIHRoYXQNCj4gYXJlDQo+ID4gZmFpbGluZyBzaWxlbnRseSBhbmQgYXJlIGhhcmQgdG8gbm90 aWNlIG9yIHRyYWNlIGJhY2sgd2hlbiBub3RpY2luZy4NCj4gPg0KPiA+IFN1cmVseSBvdGhlcnMg bWF5IHNlZSBpdCBkaWZmZXJlbnRseS4NCj4gPg0KPiA+DQo+ID4NCj4gPj4NCj4gPj4+ICAgICAg YXZfYnByaW50ZigmYnVmLCAiJWQlYyVkIiwgcS5udW0sIHNlcCwgcS5kZW4pOw0KPiA+Pj4gICAg ICBhdnRleHRfcHJpbnRfc3RyaW5nKHRjdHgsIGtleSwgYnVmLnN0ciwgMCk7DQo+ID4+PiAgfQ0K PiA+Pj4gQEAgLTQ3MCwxMiArNDk1LDExIEBAIHZvaWQNCj4gYXZ0ZXh0X3ByaW50X3JhdGlvbmFs KEFWVGV4dEZvcm1hdENvbnRleHQNCj4gPj4gKnRjdHgsIGNvbnN0IGNoYXIgKmtleSwgQVZSYXRp b25hDQo+ID4+PiAgdm9pZCBhdnRleHRfcHJpbnRfdGltZShBVlRleHRGb3JtYXRDb250ZXh0ICp0 Y3R4LCBjb25zdCBjaGFyDQo+ICprZXksDQo+ID4+PiAgICAgICAgICAgICAgICAgICAgICAgICBp bnQ2NF90IHRzLCBjb25zdCBBVlJhdGlvbmFsICp0aW1lX2Jhc2UsDQo+IGludA0KPiA+PiBpc19k dXJhdGlvbikNCj4gPj4+ICB7DQo+ID4+PiAtICAgIGNoYXIgYnVmWzEyOF07DQo+ID4+PiAtDQo+ ID4+PiAgICAgIGlmICgoIWlzX2R1cmF0aW9uICYmIHRzID09IEFWX05PUFRTX1ZBTFVFKSB8fCAo aXNfZHVyYXRpb24gJiYNCj4gPj4gdHMgPT0gMCkpIHsNCj4gPj4+ICAgICAgICAgIGF2dGV4dF9w cmludF9zdHJpbmcodGN0eCwga2V5LCAiTi9BIiwNCj4gPj4gQVZfVEVYVEZPUk1BVF9QUklOVF9T VFJJTkdfT1BUSU9OQUwpOw0KPiA+Pj4gICAgICB9IGVsc2Ugew0KPiA+Pj4gLSAgICAgICAgZG91 YmxlIGQgPSB0cyAqIGF2X3EyZCgqdGltZV9iYXNlKTsNCj4gPj4+ICsgICAgICAgIGNoYXIgYnVm WzEyOF07DQo+ID4+PiArICAgICAgICBkb3VibGUgZCA9IGF2X3EyZCgqdGltZV9iYXNlKSAqIChk b3VibGUpdHM7DQo+ID4+DQo+ID4+IFdlIGFjdHVhbGx5IHRyeSB0byBhdm9pZCBleHBsaWNpdCBj YXN0cyB3aGVyZSBwb3NzaWJsZS4NCj4gPg0KPiA+DQo+ID4gSSdsbCBhbnN3ZXIgdGhhdCBzZXBh cmF0ZWx5Lg0KPiA+DQo+ID4NCj4gPg0KPiA+Pj4gICAgICAgICAgc3RydWN0IHVuaXRfdmFsdWUg dXY7DQo+ID4+PiAgICAgICAgICB1di52YWwuZCA9IGQ7DQo+ID4+PiAgICAgICAgICB1di51bml0 ID0gdW5pdF9zZWNvbmRfc3RyOw0KPiA+Pj4gQEAgLTQ5Niw3ICs1MjAsOCBAQCB2b2lkIGF2dGV4 dF9wcmludF9kYXRhKEFWVGV4dEZvcm1hdENvbnRleHQNCj4gPj4gKnRjdHgsIGNvbnN0IGNoYXIg Km5hbWUsDQo+ID4+PiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpkYXRh LCBpbnQgc2l6ZSkNCj4gPj4+ICB7DQo+ID4+PiAgICAgIEFWQlByaW50IGJwOw0KPiA+Pj4gLSAg ICBpbnQgb2Zmc2V0ID0gMCwgbCwgaTsNCj4gPj4+ICsgICAgdW5zaWduZWQgb2Zmc2V0ID0gMDsN Cj4gPj4+ICsgICAgaW50IGwsIGk7DQo+ID4+Pg0KPiA+Pj4gICAgICBhdl9icHJpbnRfaW5pdCgm YnAsIDAsIEFWX0JQUklOVF9TSVpFX1VOTElNSVRFRCk7DQo+ID4+PiAgICAgIGF2X2JwcmludGYo JmJwLCAiXG4iKTsNCj4gPj4+IEBAIC01MjMsMjUgKzU0OCwyOSBAQCB2b2lkIGF2dGV4dF9wcmlu dF9kYXRhKEFWVGV4dEZvcm1hdENvbnRleHQNCj4gPj4gKnRjdHgsIGNvbnN0IGNoYXIgKm5hbWUs DQo+ID4+PiAgdm9pZCBhdnRleHRfcHJpbnRfZGF0YV9oYXNoKEFWVGV4dEZvcm1hdENvbnRleHQg KnRjdHgsIGNvbnN0IGNoYXINCj4gPj4gKm5hbWUsDQo+ID4+PiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmRhdGEsIGludCBzaXplKQ0KPiA+Pj4gIHsNCj4gPj4+ IC0gICAgY2hhciAqcCwgYnVmW0FWX0hBU0hfTUFYX1NJWkUgKiAyICsgNjRdID0geyAwIH07DQo+ ID4+PiArICAgIGNoYXIgYnVmW0FWX0hBU0hfTUFYX1NJWkUgKiAyICsgNjRdID0geyAwIH07DQo+ ID4+PiArICAgIGludCBsZW47DQo+ID4+Pg0KPiA+Pj4gICAgICBpZiAoIXRjdHgtPmhhc2gpDQo+ ID4+PiAgICAgICAgICByZXR1cm47DQo+ID4+Pg0KPiA+Pj4gICAgICBhdl9oYXNoX2luaXQodGN0 eC0+aGFzaCk7DQo+ID4+PiAgICAgIGF2X2hhc2hfdXBkYXRlKHRjdHgtPmhhc2gsIGRhdGEsIHNp emUpOw0KPiA+Pj4gLSAgICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXM6IiwgYXZfaGFz aF9nZXRfbmFtZSh0Y3R4LQ0KPiA+Pj4gaGFzaCkpOw0KPiA+Pj4gLSAgICBwID0gYnVmICsgc3Ry bGVuKGJ1Zik7DQo+ID4+PiAtICAgIGF2X2hhc2hfZmluYWxfaGV4KHRjdHgtPmhhc2gsIHAsIGJ1 ZiArIHNpemVvZihidWYpIC0gcCk7DQo+ID4+PiArICAgIGxlbiA9IHNucHJpbnRmKGJ1Ziwgc2l6 ZW9mKGJ1ZiksICIlczoiLA0KPiBhdl9oYXNoX2dldF9uYW1lKHRjdHgtDQo+ID4+PiBoYXNoKSk7 DQo+ID4+PiArICAgIGF2X2hhc2hfZmluYWxfaGV4KHRjdHgtPmhhc2gsICh1aW50OF90ICopJmJ1 ZltsZW5dLA0KPiA+PiAoaW50KXNpemVvZihidWYpIC0gbGVuKTsNCj4gPj4NCj4gPj4gSXMgaXQg Z3VhcmFudGVlZCB0aGF0IHRoZSBvdXRwdXQgb2Ygc25wcmludGYoKSBpcyBub3QgdHJ1bmNhdGVk Pw0KPiA+DQo+ID4gTUFYX0hBU0hfTkFNRV9TSVpFIGlzIDExIGFuZCBBVl9IQVNIX01BWF9TSVpF IDY0LCBtYWtlIDE5MiAtIDExID4gMA0KPiA+DQo+ID4NCj4gPj4NCj4gPj4+ICAgICAgYXZ0ZXh0 X3ByaW50X3N0cmluZyh0Y3R4LCBuYW1lLCBidWYsIDApOw0KPiA+Pj4gIH0NCj4gPj4+DQo+ID4+ PiAgdm9pZCBhdnRleHRfcHJpbnRfaW50ZWdlcnMoQVZUZXh0Rm9ybWF0Q29udGV4dCAqdGN0eCwg Y29uc3QgY2hhcg0KPiA+PiAqbmFtZSwNCj4gPj4+IC0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdWludDhfdCAqZGF0YSwgaW50IHNpemUsIGNvbnN0DQo+ID4+IGNoYXIgKmZvcm1h dCwNCj4gPj4+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvbHVtbnMs IGludCBieXRlcywgaW50DQo+ID4+IG9mZnNldF9hZGQpDQo+ID4+PiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgdWludDhfdCAqZGF0YSwgaW50IHNpemUsIGNvbnN0IGNoYXINCj4gPj4gKmZv cm1hdCwNCj4gPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY29sdW1ucywgaW50 IGJ5dGVzLCBpbnQNCj4gb2Zmc2V0X2FkZCkNCj4gPj4+ICB7DQo+ID4+PiAgICAgIEFWQlByaW50 IGJwOw0KPiA+Pj4gLSAgICBpbnQgb2Zmc2V0ID0gMCwgbCwgaTsNCj4gPj4+ICsgICAgdW5zaWdu ZWQgb2Zmc2V0ID0gMDsNCj4gPj4+ICsgICAgaW50IGwsIGk7DQo+ID4+PiArDQo+ID4+PiArICAg IGlmICghbmFtZSB8fCAhZGF0YSB8fCAhZm9ybWF0IHx8IGNvbHVtbnMgPD0gMCB8fCBieXRlcyA8 PSAwKQ0KPiA+Pj4gKyAgICAgICAgcmV0dXJuOw0KPiA+Pg0KPiA+PiBDYW4gdGhpcyBoYXBwZW4/ DQo+ID4NCj4gPiBTdXJlLCBhcyBhIHB1YmxpYyBBUEkuIE9mIGNvdXJzZSwgb25lIGNhbiBzcGVu ZCB0aW1lLCB0cnlpbmcgdG8NCj4gZGV0ZXJtaW5lDQo+ID4gd2hpY2ggY29uZGl0aW9ucyBhcmUg cmVhbGlzdGljYWxseSBwb3NzaWJsZSBvciBub3QuIEJ1dCB0aGF0DQo+IGludHJvZHVjZXMNCj4g PiBwb3RlbnRpYWwgb2YgaHVtYW4gZXJyb3IsIHNvIC0gdW5sZXNzIGl0J3MgYSByZWFsbHkgaG90 IHBhdGgsIG9uZQ0KPiBjaGVjaw0KPiA+IHRvIG1hbnkgaXMgYmV0dGVyIHRoYW4gb25lIHRvbyBs ZXNzLg0KPiA+DQo+ID4NCj4gPj4NCj4gPj4+DQo+ID4+PiAgICAgIGF2X2JwcmludF9pbml0KCZi cCwgMCwgQVZfQlBSSU5UX1NJWkVfVU5MSU1JVEVEKTsNCj4gPj4+ICAgICAgYXZfYnByaW50Zigm YnAsICJcbiIpOw0KPiA+Pj4gQEAgLTYwNywxMiArNjM2LDE4IEBAIGludA0KPiA+PiBhdnRleHR3 cml0ZXJfY29udGV4dF9vcGVuKEFWVGV4dFdyaXRlckNvbnRleHQgKipwd2N0eCwgY29uc3QNCj4g Pj4gQVZUZXh0V3JpdGVyICp3DQo+ID4+PiAgICAgIEFWVGV4dFdyaXRlckNvbnRleHQgKndjdHg7 DQo+ID4+PiAgICAgIGludCByZXQgPSAwOw0KPiA+Pj4NCj4gPj4+IC0gICAgaWYgKCEod2N0eCA9 IGF2X21hbGxvY3ooc2l6ZW9mKEFWVGV4dFdyaXRlckNvbnRleHQpKSkpIHsNCj4gPj4+ICsgICAg aWYgKCFwd2N0eCB8fCAhd3JpdGVyKQ0KPiA+Pj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlO VkFMKTsNCj4gPj4+ICsNCj4gPj4+ICsgICAgaWYgKCF3cml0ZXItPnByaXZfc2l6ZSAmJiB3cml0 ZXItPnByaXZfY2xhc3MpDQo+ID4+DQo+ID4+IFN0dWZmIGxpa2UgdGhpcyBzaG91bGQgbmV2ZXIg aGFwcGVuIGFuZCBzaG91bGQgdGhlcmVmb3JlIG5vdCBiZQ0KPiA+PiBjaGVja2VkLg0KPiA+DQo+ ID4gT0suDQo+ID4NCj4gPj4NCj4gPj4+ICsgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7 DQo+ID4+PiArDQo+ID4+PiArICAgIGlmICghKCh3Y3R4ID0gYXZfbWFsbG9jeihzaXplb2YoQVZU ZXh0V3JpdGVyQ29udGV4dCkpKSkpIHsNCj4gPj4+ICAgICAgICAgIHJldCA9IEFWRVJST1IoRU5P TUVNKTsNCj4gPj4+ICAgICAgICAgIGdvdG8gZmFpbDsNCj4gPj4+ICAgICAgfQ0KPiA+Pj4NCj4g Pj4+IC0gICAgaWYgKCEod2N0eC0+cHJpdiA9IGF2X21hbGxvY3ood3JpdGVyLT5wcml2X3NpemUp KSkgew0KPiA+Pj4gKyAgICBpZiAod3JpdGVyLT5wcml2X3NpemUgJiYgISgod2N0eC0+cHJpdiA9 IGF2X21hbGxvY3ood3JpdGVyLQ0KPiA+Pj4gcHJpdl9zaXplKSkpKSB7DQo+ID4+PiAgICAgICAg ICByZXQgPSBBVkVSUk9SKEVOT01FTSk7DQo+ID4+PiAgICAgICAgICBnb3RvIGZhaWw7DQo+ID4+ PiAgICAgIH0NCj4gPj4+IGRpZmYgLS1naXQgYS9mZnRvb2xzL3RleHRmb3JtYXQvYXZ0ZXh0Zm9y bWF0LmgNCj4gPj4gYi9mZnRvb2xzL3RleHRmb3JtYXQvYXZ0ZXh0Zm9ybWF0LmgNCj4gPj4+IGlu ZGV4IDAzNTY0ZDE0YTcuLmU1MTkwOTRmNGYgMTAwNjQ0DQo+ID4+PiAtLS0gYS9mZnRvb2xzL3Rl eHRmb3JtYXQvYXZ0ZXh0Zm9ybWF0LmgNCj4gPj4+ICsrKyBiL2ZmdG9vbHMvdGV4dGZvcm1hdC9h dnRleHRmb3JtYXQuaA0KPiA+Pj4gQEAgLTIxLDkgKzIxLDcgQEANCj4gPj4+ICAjaWZuZGVmIEZG VE9PTFNfVEVYVEZPUk1BVF9BVlRFWFRGT1JNQVRfSA0KPiA+Pj4gICNkZWZpbmUgRkZUT09MU19U RVhURk9STUFUX0FWVEVYVEZPUk1BVF9IDQo+ID4+Pg0KPiA+Pj4gLSNpbmNsdWRlIDxzdGRkZWYu aD4NCj4gPj4+ICAjaW5jbHVkZSA8c3RkaW50Lmg+DQo+ID4+PiAtI2luY2x1ZGUgImxpYmF2dXRp bC9hdHRyaWJ1dGVzLmgiDQo+ID4+PiAgI2luY2x1ZGUgImxpYmF2dXRpbC9kaWN0LmgiDQo+ID4+ PiAgI2luY2x1ZGUgImxpYmF2Zm9ybWF0L2F2aW8uaCINCj4gPj4+ICAjaW5jbHVkZSAibGliYXZ1 dGlsL2JwcmludC5oIg0KPiA+Pj4gQEAgLTEwMyw3ICsxMDEsNyBAQCBzdHJ1Y3QgQVZUZXh0Rm9y bWF0Q29udGV4dCB7DQo+ID4+PiAgICAgIHVuc2lnbmVkIGludA0KPiA+PiBuYl9pdGVtX3R5cGVb U0VDVElPTl9NQVhfTkJfTEVWRUxTXVtTRUNUSU9OX01BWF9OQl9TRUNUSU9OU107DQo+ID4+Pg0K PiA+Pj4gICAgICAvKiogc2VjdGlvbiBwZXIgZWFjaCBsZXZlbCAqLw0KPiA+Pj4gLSAgICBjb25z dCBzdHJ1Y3QgQVZUZXh0Rm9ybWF0U2VjdGlvbg0KPiA+PiAqc2VjdGlvbltTRUNUSU9OX01BWF9O Ql9MRVZFTFNdOw0KPiA+Pj4gKyAgICBjb25zdCBBVlRleHRGb3JtYXRTZWN0aW9uICpzZWN0aW9u W1NFQ1RJT05fTUFYX05CX0xFVkVMU107DQo+ID4+PiAgICAgIEFWQlByaW50IHNlY3Rpb25fcGJ1 ZltTRUNUSU9OX01BWF9OQl9MRVZFTFNdOyAvLy88IGdlbmVyaWMNCj4gPj4gcHJpbnQgYnVmZmVy IGRlZGljYXRlZCB0byBlYWNoIHNlY3Rpb24sDQo+ID4+PiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8gIHVzZWQgYnkNCj4gPj4gdmFyaW91cyBm b3JtYXR0ZXJzDQo+ID4+Pg0KPiA+Pj4gQEAgLTEyNCw3ICsxMjIsNyBAQCBzdHJ1Y3QgQVZUZXh0 Rm9ybWF0Q29udGV4dCB7DQo+ID4+PiAgI2RlZmluZSBBVl9URVhURk9STUFUX1BSSU5UX1NUUklO R19WQUxJREFURSAyDQo+ID4+Pg0KPiA+Pj4gIGludCBhdnRleHRfY29udGV4dF9vcGVuKEFWVGV4 dEZvcm1hdENvbnRleHQgKipwdGN0eCwgY29uc3QNCj4gPj4gQVZUZXh0Rm9ybWF0dGVyICpmb3Jt YXR0ZXIsIEFWVGV4dFdyaXRlckNvbnRleHQgKndyaXRlcl9jb250ZXh0LA0KPiBjb25zdA0KPiA+ PiBjaGFyICphcmdzLA0KPiA+Pj4gLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVj dCBBVlRleHRGb3JtYXRTZWN0aW9uDQo+ICpzZWN0aW9ucywNCj4gPj4gaW50IG5iX3NlY3Rpb25z LA0KPiA+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFWVGV4dEZvcm1hdFNlY3Rp b24gKnNlY3Rpb25zLCBpbnQNCj4gPj4gbmJfc2VjdGlvbnMsDQo+ID4+PiAgICAgICAgICAgICAg ICAgICAgICAgICAgaW50IHNob3dfdmFsdWVfdW5pdCwNCj4gPj4+ICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnQgdXNlX3ZhbHVlX3ByZWZpeCwNCj4gPj4+ICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnQgdXNlX2J5dGVfdmFsdWVfYmluYXJ5X3ByZWZpeCwNCj4gPj4+IGRpZmYgLS1naXQg YS9mZnRvb2xzL3RleHRmb3JtYXQvdGZfZGVmYXVsdC5jDQo+ID4+IGIvZmZ0b29scy90ZXh0Zm9y bWF0L3RmX2RlZmF1bHQuYw0KPiA+Pj4gaW5kZXggMTRlZjlmZThmOS4uM2IwNWQyNWYzNiAxMDA2 NDQNCj4gPj4+IC0tLSBhL2ZmdG9vbHMvdGV4dGZvcm1hdC90Zl9kZWZhdWx0LmMNCj4gPj4+ICsr KyBiL2ZmdG9vbHMvdGV4dGZvcm1hdC90Zl9kZWZhdWx0LmMNCj4gPj4+IEBAIC03MCw5ICs3MCwx MCBAQCBERUZJTkVfRk9STUFUVEVSX0NMQVNTKGRlZmF1bHQpOw0KPiA+Pj4gIC8qIGxhbWUgdXBw ZXJjYXNpbmcgcm91dGluZSwgYXNzdW1lcyB0aGUgc3RyaW5nIGlzIGxvd2VyIGNhc2UNCj4gQVND SUkNCj4gPj4gKi8NCj4gPj4+ICBzdGF0aWMgaW5saW5lIGNoYXIgKnVwY2FzZV9zdHJpbmcoY2hh ciAqZHN0LCBzaXplX3QgZHN0X3NpemUsDQo+IGNvbnN0DQo+ID4+IGNoYXIgKnNyYykNCj4gPj4+ ICB7DQo+ID4+PiAtICAgIGludCBpOw0KPiA+Pj4gKyAgICB1bnNpZ25lZCBpOw0KPiA+Pj4gKw0K PiA+Pg0KPiA+PiBXaHkgbm90IHNpemVfdD8NCj4gPg0KPiA+IHNlZSBhYm92ZS4NCj4gPg0KPiA+ Pg0KPiA+Pj4gICAgICBmb3IgKGkgPSAwOyBzcmNbaV0gJiYgaSA8IGRzdF9zaXplIC0gMTsgaSsr KQ0KPiA+Pj4gLSAgICAgICAgZHN0W2ldID0gYXZfdG91cHBlcihzcmNbaV0pOw0KPiA+Pj4gKyAg ICAgICAgZHN0W2ldID0gKGNoYXIpYXZfdG91cHBlcihzcmNbaV0pOw0KPiA+Pj4gICAgICBkc3Rb aV0gPSAwOw0KPiA+Pj4gICAgICByZXR1cm4gZHN0Ow0KPiA+Pj4gIH0NCj4gPj4+IEBAIC0xMDgs NiArMTA5LDkgQEAgc3RhdGljIHZvaWQNCj4gPj4gZGVmYXVsdF9wcmludF9zZWN0aW9uX2Zvb3Rl cihBVlRleHRGb3JtYXRDb250ZXh0ICp3Y3R4KQ0KPiA+Pj4gICAgICBjb25zdCBzdHJ1Y3QgQVZU ZXh0Rm9ybWF0U2VjdGlvbiAqc2VjdGlvbiA9IHdjdHgtDQo+ID5zZWN0aW9uW3djdHgtDQo+ID4+ PiBsZXZlbF07DQo+ID4+PiAgICAgIGNoYXIgYnVmWzMyXTsNCj4gPj4+DQo+ID4+PiArICAgIGlm ICghc2VjdGlvbikNCj4gPj4+ICsgICAgICAgIHJldHVybjsNCj4gPj4NCj4gPj4gQ2FuIHRoaXMg aGFwcGVuPw0KPiA+DQo+ID4gTm8sIGJ1dCBoZXJlIGl0IHNob3VsZCBhY3R1YWxseSBjYWxsIHRo ZSBmdW5jdGlvbiBpbiB0Zl9pbnRlcm5hbCBhbmQNCj4gd2l0aA0KPiA+IHRoYXQgaXQgY2FuIGhh cHBlbi4gVGhpcyBtdXN0IGhhdmUgZ290dGVuIGxvc3QgZnJvbSByZWJhc2luZy4NCj4gPg0KPiA+ DQo+ID4+PiArDQo+ID4+PiAgICAgIGlmIChkZWYtPm5vcHJpbnRfd3JhcHBlcnMgfHwgZGVmLT5u ZXN0ZWRfc2VjdGlvblt3Y3R4LQ0KPiA+bGV2ZWxdKQ0KPiA+Pj4gICAgICAgICAgcmV0dXJuOw0K PiA+Pj4NCj4gPj4+IGRpZmYgLS1naXQgYS9mZnRvb2xzL3RleHRmb3JtYXQvdGZfaW5pLmMNCj4g Pj4gYi9mZnRvb2xzL3RleHRmb3JtYXQvdGZfaW5pLmMNCj4gPj4+IGluZGV4IDllMWFhNjBlMDku LmVjNDcxZmQ0ODAgMTAwNjQ0DQo+ID4+PiAtLS0gYS9mZnRvb2xzL3RleHRmb3JtYXQvdGZfaW5p LmMNCj4gPj4+ICsrKyBiL2ZmdG9vbHMvdGV4dGZvcm1hdC90Zl9pbmkuYw0KPiA+Pj4gQEAgLTky LDcgKzkyLDcgQEAgc3RhdGljIGNoYXIgKmluaV9lc2NhcGVfc3RyKEFWQlByaW50ICpkc3QsIGNv bnN0DQo+ID4+IGNoYXIgKnNyYykNCj4gPj4+ICAgICAgICAgICAgICAvKiBmYWxsdGhyb3VnaCAq Lw0KPiA+Pj4gICAgICAgICAgZGVmYXVsdDoNCj4gPj4+ICAgICAgICAgICAgICBpZiAoKHVuc2ln bmVkIGNoYXIpYyA8IDMyKQ0KPiA+Pj4gLSAgICAgICAgICAgICAgICBhdl9icHJpbnRmKGRzdCwg IlxceDAwJTAyeCIsIGMgJiAweGZmKTsNCj4gPj4+ICsgICAgICAgICAgICAgICAgYXZfYnByaW50 Zihkc3QsICJcXHgwMCUwMngiLCAodW5zaWduZWQgY2hhciljKTsNCj4gPj4+ICAgICAgICAgICAg ICBlbHNlDQo+ID4+PiAgICAgICAgICAgICAgICAgIGF2X2JwcmludF9jaGFycyhkc3QsIGMsIDEp Ow0KPiA+Pj4gICAgICAgICAgICAgIGJyZWFrOw0KPiA+Pj4gZGlmZiAtLWdpdCBhL2ZmdG9vbHMv dGV4dGZvcm1hdC90Zl9qc29uLmMNCj4gPj4gYi9mZnRvb2xzL3RleHRmb3JtYXQvdGZfanNvbi5j DQo+ID4+PiBpbmRleCAyNDgzOGIzNWVjLi5mMjg2ODM4ZDNjIDEwMDY0NA0KPiA+Pj4gLS0tIGEv ZmZ0b29scy90ZXh0Zm9ybWF0L3RmX2pzb24uYw0KPiA+Pj4gKysrIGIvZmZ0b29scy90ZXh0Zm9y bWF0L3RmX2pzb24uYw0KPiA+Pj4gQEAgLTgyLDEzICs4MiwxOCBAQCBzdGF0aWMgY29uc3QgY2hh ciAqanNvbl9lc2NhcGVfc3RyKEFWQlByaW50DQo+ID4+ICpkc3QsIGNvbnN0IGNoYXIgKnNyYywg dm9pZCAqbG9nX2N0eA0KPiA+Pj4gICAgICBzdGF0aWMgY29uc3QgY2hhciBqc29uX3N1YnN0W10g ID0geyAnIicsICdcXCcsICAnYicsICAnZicsDQo+ID4+ICduJywgICdyJywgICd0JywgMCB9Ow0K PiA+Pj4gICAgICBjb25zdCBjaGFyICpwOw0KPiA+Pj4NCj4gPj4+ICsgICAgaWYgKCFzcmMpIHsN Cj4gPj4+ICsgICAgICAgIGF2X2xvZyhsb2dfY3R4LCBBVl9MT0dfRVJST1IsICJqc29uX2VzY2Fw ZV9zdHI6IE5VTEwNCj4gc291cmNlDQo+ID4+IHN0cmluZ1xuIik7DQo+ID4+PiArICAgICAgICBy ZXR1cm4gTlVMTDsNCj4gPj4+ICsgICAgfQ0KPiA+Pg0KPiA+PiBDYW4gdGhpcyBldmVuIGhhcHBl bj8NCj4gPj4NCj4gPj4+ICsNCj4gPj4+ICAgICAgZm9yIChwID0gc3JjOyAqcDsgcCsrKSB7DQo+ ID4+PiAgICAgICAgICBjaGFyICpzID0gc3RyY2hyKGpzb25fZXNjYXBlLCAqcCk7DQo+ID4+PiAg ICAgICAgICBpZiAocykgew0KPiA+Pj4gICAgICAgICAgICAgIGF2X2JwcmludF9jaGFycyhkc3Qs ICdcXCcsIDEpOw0KPiA+Pj4gICAgICAgICAgICAgIGF2X2JwcmludF9jaGFycyhkc3QsIGpzb25f c3Vic3RbcyAtIGpzb25fZXNjYXBlXSwgMSk7DQo+ID4+PiAgICAgICAgICB9IGVsc2UgaWYgKCh1 bnNpZ25lZCBjaGFyKSpwIDwgMzIpIHsNCj4gPj4+IC0gICAgICAgICAgICBhdl9icHJpbnRmKGRz dCwgIlxcdTAwJTAyeCIsICpwICYgMHhmZik7DQo+ID4+PiArICAgICAgICAgICAgYXZfYnByaW50 Zihkc3QsICJcXHUwMCUwMngiLCAodW5zaWduZWQgY2hhcikqcCk7DQo+ID4+PiAgICAgICAgICB9 IGVsc2Ugew0KPiA+Pj4gICAgICAgICAgICAgIGF2X2JwcmludF9jaGFycyhkc3QsICpwLCAxKTsN Cj4gPj4+ICAgICAgICAgIH0NCj4gPj4+IEBAIC0xMDcsNiArMTEyLDcgQEAgc3RhdGljIHZvaWQN Cj4gPj4ganNvbl9wcmludF9zZWN0aW9uX2hlYWRlcihBVlRleHRGb3JtYXRDb250ZXh0ICp3Y3R4 LCBjb25zdCB2b2lkDQo+ICpkYXQNCj4gPj4+ICAgICAgICAgIHdjdHgtPnNlY3Rpb25bd2N0eC0+ bGV2ZWwtMV0gOiBOVUxMOw0KPiA+Pj4NCj4gPj4+ICAgICAgaWYgKHdjdHgtPmxldmVsICYmIHdj dHgtPm5iX2l0ZW1bd2N0eC0+bGV2ZWwtMV0pDQo+ID4+PiArICAgIGlmICh3Y3R4LT5sZXZlbCAm JiB3Y3R4LT5uYl9pdGVtW3djdHgtPmxldmVsIC0gMV0pDQo+ID4+PiAgICAgICAgICB3cml0ZXJf cHV0X3N0cih3Y3R4LCAiLFxuIik7DQo+ID4+Pg0KPiA+Pj4gICAgICBpZiAoc2VjdGlvbi0+Zmxh Z3MgJiBBVl9URVhURk9STUFUX1NFQ1RJT05fRkxBR19JU19XUkFQUEVSKSB7DQo+ID4+PiBkaWZm IC0tZ2l0IGEvZmZ0b29scy90ZXh0Zm9ybWF0L3RmX3htbC5jDQo+ID4+IGIvZmZ0b29scy90ZXh0 Zm9ybWF0L3RmX3htbC5jDQo+ID4+PiBpbmRleCA3NjI3MWRiYWE2Li5lY2VlZGE4MWU1IDEwMDY0 NA0KPiA+Pj4gLS0tIGEvZmZ0b29scy90ZXh0Zm9ybWF0L3RmX3htbC5jDQo+ID4+PiArKysgYi9m ZnRvb2xzL3RleHRmb3JtYXQvdGZfeG1sLmMNCj4gPj4+IEBAIC0xOCwxMCArMTgsNyBAQA0KPiA+ Pj4gICAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is IEJvc3RvbiwgTUENCj4gPj4gMDIxMTAtMTMwMSBVU0ENCj4gPj4+ICAgKi8NCj4gPj4+DQo+ID4+ PiAtI2luY2x1ZGUgPGxpbWl0cy5oPg0KPiA+Pj4gLSNpbmNsdWRlIDxzdGRhcmcuaD4NCj4gPj4+ ICAjaW5jbHVkZSA8c3RkaW50Lmg+DQo+ID4+PiAtI2luY2x1ZGUgPHN0ZGlvLmg+DQo+ID4+PiAg I2luY2x1ZGUgPHN0cmluZy5oPg0KPiA+Pj4NCj4gPj4+ICAjaW5jbHVkZSAiYXZ0ZXh0Zm9ybWF0 LmgiDQo+ID4+PiBkaWZmIC0tZ2l0IGEvZmZ0b29scy90ZXh0Zm9ybWF0L3R3X2F2aW8uYw0KPiA+ PiBiL2ZmdG9vbHMvdGV4dGZvcm1hdC90d19hdmlvLmMNCj4gPj4+IGluZGV4IGQzMzVkMzVhNTYu LjNjNzQ5MmFhMDYgMTAwNjQ0DQo+ID4+PiAtLS0gYS9mZnRvb2xzL3RleHRmb3JtYXQvdHdfYXZp by5jDQo+ID4+PiArKysgYi9mZnRvb2xzL3RleHRmb3JtYXQvdHdfYXZpby5jDQo+ID4+PiBAQCAt NjMsNyArNjMsNyBAQCBzdGF0aWMgdm9pZCBpb193OChBVlRleHRXcml0ZXJDb250ZXh0ICp3Y3R4 LCBpbnQNCj4gPj4gYikNCj4gPj4+ICBzdGF0aWMgdm9pZCBpb19wdXRfc3RyKEFWVGV4dFdyaXRl ckNvbnRleHQgKndjdHgsIGNvbnN0IGNoYXINCj4gKnN0cikNCj4gPj4+ICB7DQo+ID4+PiAgICAg IElPV3JpdGVyQ29udGV4dCAqY3R4ID0gd2N0eC0+cHJpdjsNCj4gPj4+IC0gICAgYXZpb193cml0 ZShjdHgtPmF2aW9fY29udGV4dCwgc3RyLCBzdHJsZW4oc3RyKSk7DQo+ID4+PiArICAgIGF2aW9f d3JpdGUoY3R4LT5hdmlvX2NvbnRleHQsIChjb25zdCB1bnNpZ25lZCBjaGFyICopc3RyLA0KPiA+ PiAoaW50KXN0cmxlbihzdHIpKTsNCj4gPj4+ICB9DQo+ID4+Pg0KPiA+Pj4gIHN0YXRpYyB2b2lk IGlvX3ByaW50ZihBVlRleHRXcml0ZXJDb250ZXh0ICp3Y3R4LCBjb25zdCBjaGFyICpmbXQsDQo+ ID4+IC4uLikNCj4gPj4+IEBAIC04OSwxMCArODksMTIgQEAgY29uc3QgQVZUZXh0V3JpdGVyIGF2 dGV4dHdyaXRlcl9hdmlvID0gew0KPiA+Pj4NCj4gPj4+ICBpbnQgYXZ0ZXh0d3JpdGVyX2NyZWF0 ZV9maWxlKEFWVGV4dFdyaXRlckNvbnRleHQgKipwd2N0eCwgY29uc3QNCj4gPj4gY2hhciAqb3V0 cHV0X2ZpbGVuYW1lLCBpbnQgY2xvc2Vfb25fdW5pbml0KQ0KPiA+Pj4gIHsNCj4gPj4+ICsgICAg aWYgKCFwd2N0eCB8fCAhb3V0cHV0X2ZpbGVuYW1lIHx8ICFvdXRwdXRfZmlsZW5hbWVbMF0pDQo+ ID4+PiArICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOw0KPiA+Pg0KPiA+PiBDYW4gdGhp cyBoYXBwZW4/DQo+ID4NCj4gPiBXaGVuIHB1YmxpYyAtIHllcy4NCj4gDQo+IENhbiBpdCBoYXBw ZW4gbm93Pw0KPiANCj4gPg0KPiA+DQo+ID4gR2VuZXJhbGx5LCBJIHdvbmRlcjogZG9uJ3QgeW91 IGZpbmQgaXQgcmlza3kgdG8gbWFrZSBkZWNpc2lvbnMgYWJvdXQNCj4gPiBmdW5jdGlvbiBpbXBs ZW1lbnRhdGlvbnMgdGhhdCBhcmUgYmFzZWQgb24ga25vd2xlZGdlIGFib3V0IHRoZQ0KPiBjYWxs aW5nDQo+ID4gY29kZT8gKCJjYW4gdGhpcyBoYXBwZW4/IikNCj4gPiBJIG1lYW4sIHRoZSBjYWxs aW5nIGNvZGUgZG9lc24ndCBrbm93IGFib3V0IHRoZSBhc3N1bXB0aW9ucyB5b3UNCj4gPiB3ZXJl IG1ha2luZyBhbmQgb24gd2hpY2ggYmVoYXZpb3IgdGhlIGltcGxlbWVudGF0aW9uIG1pZ2h0IGJl DQo+IHJlbHlpbmcgb24uDQo+IA0KPiBOb3QgcHJvdmlkaW5nIGEgcG9pbnRlciB0byBzdG9yZSB0 aGUgQVZUZXh0V3JpdGVyQ29udGV4dCogaXMgaW5zYW5lDQo+IGFuZA0KPiBhIHByb2dyYW1tZXIg ZXJyb3IuIEl0IHNob3VsZCBuZXZlciBoYXBwZW4uIERvaW5nIHNvIHNob3VsZCBsZWFkIHRvDQo+ IHVuZGVmaW5lZCBiZWhhdmlvciAoanVzdCBhcyBlLmcuIHBhc3NpbmcgYSBOVUxMIHBvaW50ZXIg dG8gc3RybGVuKCkNCj4gZG9lcyksIGV2ZW4gd2hlbiBwdWJsaWMuDQoNCkhpIEFuZHJlYXMsDQoN CmZvciB0aGUgQVZUZXh0V3JpdGVyQ29udGV4dCBJIGFncmVlLCBoYXZlbid0IG1hZGUgc3VjaCBj aGVja3MgaW4gDQp0aGUgZm9ybWF0dGVycyBlaXRoZXIuIEZvciBvdGhlciBjYXNlcyBJIHRoaW5r IC0gaXQgZGVwZW5kcy4uDQoNCg0KPiA+IEZvciB0aGlzIHBhdGNoc2V0IC0gbW9zdCBpbXBvcnRh bnRseSBmb3IgZXZlcnl0aGluZyBpbiBncmFwaHByaW50LmMsDQo+ID4gSSBoYWQgd29ya2VkIHdp dGggdGhlIGRlbGliZXJhdGUgaW50ZW50aW9uIGZvciBjaGVja2luZyBldmVyeXRoaW5nDQo+IHRo YXQNCj4gPiBjYW4gYmUgY2hlY2tlZC4NCj4gDQo+IFlvdSBzaG91bGQgcmF0aGVyIGxvb2sgYXQg dGhlIGNhbGxzaXRlcyBhbmQgZW5zdXJlIHRoYXQgdGhleSBkb24ndA0KPiBjYWxsDQo+IHRoZXNl IGZ1bmN0aW9ucyBpbiBhbiBpbnNhbmUgd2F5Lg0KPiBUaGUgbW90aXZhdGlvbiBoZXJlIGlzIHRo ZSBmYWN0IHRoYXQgZ3JhcGgtcHJpbnRpbmcNCj4gPiBpcyBhbHdheXMgcnVuICh3aGVuIGNvbmZp Z3VyZWQpLCBldmVuIHdoZW4gdGhlIEZGbXBlZyBydW4gaGFzIGZhaWxlZA0KPiA+IG9yIGVycm9y ZWQsIGJlY2F1c2UgdGhvc2UgYXJlIG9mdGVuIHRoZSBtb3N0IGludGVyZXN0aW5nIGNhc2VzIGZv cg0KPiA+IHZpZXdpbmcgdGhlIGdyYXBoIG9yIGdldHRpbmcgdGhlIGRhdGEuDQo+ID4gQnV0IGlu IGNhc2Ugb2YgZXJyb3JzIGFuZCBhYm9ydGlvbiwgd2UgY2Fubm90IG1ha2UgYW55IGFzc3VtcHRp b25zDQo+ID4gYW55bW9yZSBhbmQgdGhlIGFuc3dlciB0byAiY2FuIHRoaXMgaGFwcGVuPyIgbWln aHQgYmUgbW9yZSBvZnRlbg0KPiAieWVzIg0KPiA+IHRoYW4gdXN1YWwuDQo+IA0KPiBPZiBjb3Vy c2Ugd2UgY2FuIG1ha2UgYXNzdW1wdGlvbnMuIEFsbCB3ZSBuZWVkIHRvIGRvIGlzIGNoZWNrIHRo ZSBvbmVzDQo+IHRoYXQgY2FuIGhhcHBlbiBhdCB0aGUgY2FsbCBzaXRlLiBXaGVyZSB0aGV5IGJl bG9uZy4NCg0KQW5kIHdoZW4gc29tZWJvZHkgbWFrZXMgY2hhbmdlcyBhdCB0aG9zZSBjYWxsIHNp dGVzPyBUaGF0IHBlcnNvbiANCndvbid0IGtub3cgYW55dGhpbmcgYWJvdXQgdGhlIGFzc3VtcHRp b25zIHdlIGhhZCBtYWRlLg0KDQoNClRob3VnaCwgaW4gZ3JhcGhwcmludC5jIGl0J3MgcHJpbWFy aWx5IGFib3V0IHRyYXZlcnNpbmcgdGhyb3VnaA0KbWFueSBkaWZmZXJlbnQgc3RydWN0dXJlcyB0 byBjb2xsZWN0IGFsbCB0aGUgZGF0YS4gVGhpcyBpcyB3aGVyZSBJJ20NCnNheWluZyB0aGF0IHdl IGNhbm5vdCBtYWtlIGFueSBhc3N1bXB0aW9ucyBiZWNhdXNlIHdlIGFsc28gZG8gdGhpcyANCndo ZW4gRkZtcGVnIGlzIGVycm9yaW5nIG91dCBhbmQgaXQncyBoYXJkbHkgZmVhc2libGUgdG8gZm9y ZXNlZSBhbGwNCnBvc3NpYmxlIG91dGNvbWVzIC0gdGhhdOKAmXMgd2hhdCBJIG1lYW50IG9yaWdp bmFsbHkuDQoNCg0KPiA+DQo+ID4gSSBob3BlIHlvdSBkb24ndCBtaW5kIHRvIHBvc3Rwb25lIHRo ZSByZW1vdmFsIG9mIGNoZWNrcyBhIGxpdHRsZQ0KPiBiaXQuDQo+IA0KPiAiUmVtb3ZhbCBvZiBj aGVja3MiPyBUaGlzIHBhdGNoIGlzIGFib3V0IGFkZGluZyBjaGVja3MuIENoZWNrcyB3aGljaA0K PiBJTU8NCj4gc2hvdWxkIG5vdCBiZSB0aGVyZSBpbiB0aGUgZmlyc3QgcGxhY2UuDQoNCkkgbWVh biBwb3N0cG9uaW5nIHRoZSByZW1vdmFsIG9mIGNoZWNrcyBmcm9tIHRoZSBjb21taXQgdGhhdCBp cyBhZGRpbmcNCnRoZW0uDQoNCkJlY2F1c2U6DQoNCj4gPiBJdCBkb2Vzbid0IGZlZWwgcmlnaHQg dG8gbWUgbm93LCB0byBnbyBvdmVyIGFuZCBqdXN0IGJsaW5kbHkgcmVtb3ZlDQo+ID4gYWxsIG9m IHRoZW0uIEkgd291bGQgcmF0aGVyIGxpa2UgdG8gZGlzY3VzcyBhIHN0cmF0ZWd5L3BhdHRlcm4g aW4NCj4gdGhpcw0KPiA+IHJlZ2FyZCBhYm91dCB3aGljaCBjaGVja3Mgc2hvdWxkIGJlIG1hZGUg YXQgd2hpY2ggcGxhY2VzIGFuZCB3aGVyZQ0KPiA+IG5vdCwgYWxzbyBpbiB0aGUgbGlnaHQgb2Yg cG9zc2libHkgYmVpbmcgcHJvbW90ZWQgdG8gYSBwdWJsaWMgQVBJLg0KPiA+IEZpbmFsbHksIEkn ZCBhbHNvIGxpa2UgdG8gaGVhciBTdGVmYW5vcyBvcGluaW9uIC0gaXQncyBtb3N0bHkgaGlzDQo+ ID4gY29kZSB0aGF0IHdlJ3JlIG1vdmluZyBhcm91bmQgaGVyZSDwn5iKDQoNCkkgd2lsbCBmb2xs b3ctdXAgb24gdGhpcyBzdWJqZWN0IHNob3J0bHkuDQoNClRoYW5rIHlvdSB2ZXJ5IG11Y2gNCnN3 DQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpmZm1wZWct ZGV2ZWwgbWFpbGluZyBsaXN0CmZmbXBlZy1kZXZlbEBmZm1wZWcub3JnCmh0dHBzOi8vZmZtcGVn Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ZmbXBlZy1kZXZlbAoKVG8gdW5zdWJzY3JpYmUsIHZpc2l0 IGxpbmsgYWJvdmUsIG9yIGVtYWlsCmZmbXBlZy1kZXZlbC1yZXF1ZXN0QGZmbXBlZy5vcmcgd2l0 aCBzdWJqZWN0ICJ1bnN1YnNjcmliZSIuCg==