From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 752E2C02197 for ; Wed, 5 Feb 2025 05:55:57 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 9C949280005; Wed, 5 Feb 2025 00:55:56 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 977E6280004; Wed, 5 Feb 2025 00:55:56 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 7818F280005; Wed, 5 Feb 2025 00:55:56 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id 50550280004 for ; Wed, 5 Feb 2025 00:55:56 -0500 (EST) Received: from smtpin01.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id E9B7D1A0529 for ; Wed, 5 Feb 2025 05:55:55 +0000 (UTC) X-FDA: 83084829870.01.C7D00C9 Received: from NAM10-BN7-obe.outbound.protection.outlook.com (mail-bn7nam10olkn2074.outbound.protection.outlook.com [40.92.40.74]) by imf17.hostedemail.com (Postfix) with ESMTP id 2F3DB40005 for ; Wed, 5 Feb 2025 05:55:53 +0000 (UTC) Authentication-Results: imf17.hostedemail.com; dkim=pass header.d=outlook.com header.s=selector1 header.b=iT26f4pL; spf=pass (imf17.hostedemail.com: domain of stephen.eta.zhou@outlook.com designates 40.92.40.74 as permitted sender) smtp.mailfrom=stephen.eta.zhou@outlook.com; arc=pass ("microsoft.com:s=arcselector10001:i=1"); dmarc=pass (policy=none) header.from=outlook.com ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1738734953; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding:in-reply-to: references:dkim-signature; bh=IjRVsjvDndDpS9lQ44aeN5rdpkxB0SAEFmMJPJPm7LE=; b=L+FPJRHhz1Vbp2ndjLNPLkeGIQnf9KHs9xVP1YCbPsX8SAR0ZH7Y+OR1Osn2tBImiqK7sb ZOzqNQusxu7HpGbI7SCcLyA9DUedQjCNsPPjLcMgYvcoN5v26XZXUnPkiTHx6xz+e4ds/E v5lniEfD5lfBMjOZeB3JARlPAm1w8c8= ARC-Authentication-Results: i=2; imf17.hostedemail.com; dkim=pass header.d=outlook.com header.s=selector1 header.b=iT26f4pL; spf=pass (imf17.hostedemail.com: domain of stephen.eta.zhou@outlook.com designates 40.92.40.74 as permitted sender) smtp.mailfrom=stephen.eta.zhou@outlook.com; arc=pass ("microsoft.com:s=arcselector10001:i=1"); dmarc=pass (policy=none) header.from=outlook.com ARC-Seal: i=2; s=arc-20220608; d=hostedemail.com; t=1738734953; a=rsa-sha256; cv=pass; b=LL8UC1n0hrxClxqjiIa2K0H8QhpHhu5+OivUkgxeTMXdTYkmSGAUZ5OfccpNWNDUQhvoT+ sQpXc0LU3A66s0H6C5g4++NTPXtBKtjFS5r2AkVuuaYTfXCLYrYVTXPGo+3KDQ6rLo/vdl FUMPwWdv2fjvBnMsfBNHreNa/BlQx0Y= ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=JIBVX/8mnGWcpTGjmrbdyQlvj5G2YyUa3zQk67vYA5nmc9Y+4Pc9HPJ2wQeMCEZ/VubS8dt4gW6H6at15UQh09UAmUrSQjCaNLvXsSbC7luhxG/YUdKi9LxrED1HSSMFDDyHb5iyV5Kg7SSPItrEIL/8CWPtxiV6m7+Bay5bqTO8TDTg+FQbD6W1to1DaymWhB4pa5K3fR3UpGP1Js8O4zacHfCaJV4UcFPLdjc2SfMB5TxDVdLcNq0DGSexd3YoXqN5F3bRtBC1nhi+gEUfajQ4yyADsYQGtBibgWMQ+ylmB6efBZkLpFGEh0s7f4rmph2A46LCTnUadM2kqvCzBw== 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=IjRVsjvDndDpS9lQ44aeN5rdpkxB0SAEFmMJPJPm7LE=; b=ITB5iKmvb2F0PAy8bMsAz1tU76D1mbXE4ubZpIhxzGzcqrnIHmrnBKdLz4mw534+1TK5SO84j4Y/6FwGvi2CI7Chd3RG8pCUzeiPHcKIQ/8wF09hOaPrpNZTkTPPrXow4wGqSyqXY9wwNMuAfntYq6FLhxshA/KURXNJR8LQGV/0mgamzyVUhXO/fhY2ru1BMYsEeSp4CIlds3hLe9MCoAGRKkZv0TLSajVyFn/RhKy9O3LKezq1lUHcNPfy2xna0Oi+mY26AUpWfeXa48Ks99qeZfrP4KKQv54f+LCvBPjFRMX949V/sib2FifO7BbzNOg6H89kSV7O/ETFJYKZRg== 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=IjRVsjvDndDpS9lQ44aeN5rdpkxB0SAEFmMJPJPm7LE=; b=iT26f4pLYQoOWvebOOwdqL+UM50FkIDuWos2CLgaElrIdRE+qSSMXSISizwv7l5Iq/ORMO+Vj/P9E4vStb4c5/SC/u5qN64cyvma1THmXhpEixrc+eoOthEMHsSnynSr/Kc4PqIJkG3InZry5G6Xo9GwuvUBOkCun9eyLlEpjadzNthp56OBum1nlWU3VniE+QQH95p3lLLkHtjlLxurW/SJ+W6pN+u+IsStZzPRrOvm67K9xjraQmoCIOPWb4iM7Nk20TPUWi9x8i6jqYCeg8QcxCqfybp3xZyiF4J8KryVl0sESpI3wHa7LA7YisJGBeGzAz1aE3J29pe9OdfyWQ== Received: from BYAPR12MB3205.namprd12.prod.outlook.com (2603:10b6:a03:134::32) by DS0PR12MB7703.namprd12.prod.outlook.com (2603:10b6:8:130::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8398.26; Wed, 5 Feb 2025 05:55:51 +0000 Received: from BYAPR12MB3205.namprd12.prod.outlook.com ([fe80::489:5515:fcf2:b991]) by BYAPR12MB3205.namprd12.prod.outlook.com ([fe80::489:5515:fcf2:b991%5]) with mapi id 15.20.8398.025; Wed, 5 Feb 2025 05:55:51 +0000 From: Stephen Eta Zhou To: "rppt@kernel.org" , "akpm@linux-foundation.org" CC: "linux-mm@kvack.org" , "linux-kernel@vger.kernel.org" Subject: [PATCH] mm: optimize memblock_add_range() for improved performance Thread-Topic: [PATCH] mm: optimize memblock_add_range() for improved performance Thread-Index: AQHbd5I+MclXFgUVVk6Vm36iiqWOEQ== Date: Wed, 5 Feb 2025 05:55:50 +0000 Message-ID: Accept-Language: zh-CN, en-US Content-Language: zh-CN X-MS-Has-Attach: X-MS-TNEF-Correlator: msip_labels: x-ms-publictraffictype: Email x-ms-traffictypediagnostic: BYAPR12MB3205:EE_|DS0PR12MB7703:EE_ x-ms-office365-filtering-correlation-id: 66f80c63-34a9-49db-ce1e-08dd45a9bec0 x-microsoft-antispam: BCL:0;ARA:14566002|8062599003|15030799003|19110799003|8060799006|12121999004|15080799006|461199028|440099028|3412199025|41001999003|3430499032|102099032|56899033; x-microsoft-antispam-message-info: =?utf-8?B?Z0JJalJWZUEyY25ndWZnYlFGWTJLbTVOdWt0eVlFRUpzWnZGQWFlNUREbTk2?= =?utf-8?B?by9CSkJaTGR6b3ZqZXAzY1VJZlZnQngvUHkzVzM1eXloTlNIT2tGeWlCR3Fi?= =?utf-8?B?Qno0RkhhOUlaYlA5WCtVelRoNHU4aThwVzlPaDFuZWdFaW0rZHozYWUyam5o?= =?utf-8?B?NmMvd01DRituK0RSeWg0ZktVZjF6eHorMDFSQ3R2Ky9wSE9PaE1aTGFTQ1lU?= =?utf-8?B?aE1RVEVMQTlQQWZ2a3VJRVUrK1oxRVBrYUluSHArb1pBVm84bEtrNVN6Snpo?= =?utf-8?B?djViQVBNeEVETXNpTVF5NHF4SS9FTXRJaFIyd3Z0Skp2Tk9GZytnaFB3NGVi?= =?utf-8?B?TUtxdHMyK3lSblV6UWtsbndnaWNmVnhTMGNXK0VyQzVVS05WUlgvZ3JROWQ1?= =?utf-8?B?RTFlbFQwRytQdnJ2UWp5bTNrMzB5RG1PN0d2WlIvTC9zL2dONXdhVWswVGZC?= =?utf-8?B?bVE2N3UvSHhyazVXdk0zS3d1ZitxRFBLQ01hNTd6R0RkOE1ZQWowa0ZJeDhQ?= =?utf-8?B?RlBOZitaVUVHKzJrSEJtd0VxZmxEOVBpanVlWmNZaHFQSDNpSGFEQWlVcjR6?= =?utf-8?B?M0FTSUdCTzlWVFZwV2xRQVhTUkF6TGxzUjJGUDJoaDhRMmpkMWU2ZUxDUnhz?= =?utf-8?B?K1lzNHFnWHJpVUtlV2lkMnZVeTNoWW5rNGlhUjhiUkxMTUFod0dVRWwxRmV2?= =?utf-8?B?bXNtS2t5Vm9MNi9wb21lTXJ0cGpmVGNvR3V1L3hPMnNCNG9pTEk2bEVFZjJU?= =?utf-8?B?Vkhsc0xUQXJranZ6Q3J1NlFQcGdjeFh5am9TTW5wQWhVRFRYWVRHTmdjN3Yy?= =?utf-8?B?UlNEQ25tMnVXTHpESWViQXdlK2dkajZYaWlkeUtIQ2IvVTI2czdZSWdmZ1or?= =?utf-8?B?a0poeXA3SFl3NTJPcDlMNDhFeE00T0xkYlo5aXBXU056ZWpOOWdxaW1kdFdG?= =?utf-8?B?ODJzTDRTNFZsbU9hbFpkZnVzMDZiUDdZZjN4YW50SDZGK0ZhTnZ0bThmQTA0?= =?utf-8?B?WEFmNTZjamhvKzltRHdSOWVpN1dRVXo0RHoycEY4Unh0NGhMd2tLQ2syNjZE?= =?utf-8?B?b2lyakZaQmhZMGxYaHJDbS9HenFlWEY3YTVjNC90a2g1QmhPU2E1ZFp1cEtP?= =?utf-8?B?bGRHMlhLMGloK1JSYnpTM2hnQlNORW0ybTBwNGxiajBYMGRNQXhhMGZzL1hj?= =?utf-8?B?TEI3NTI1Y3Izakh0cUtjNFlGOGZxbkFVcWEveUJCa3Jaa3ZFKzViano5eE1O?= =?utf-8?B?VnBYQjdwekpjNFlBTExtdmJpQmVuTERFenBVWHpzcGIwR2ZFYkhGdkVGMGJY?= =?utf-8?B?RVVaZnlFQ2FtbU5JdXQxYXkycnA1dE5ONzd6cW54SDZKY0kxMTJkdXNTSWtp?= =?utf-8?B?N2JwdXNabER3eGdLeEV1YzdTbzYwS2NzblZreHNvTFZueXZmVkFFTklObkx6?= =?utf-8?B?UzBMcHBWMFZEVHJCdVhETXcyQ2U2SmtWdWV3YXBXUi9EOFJLNGJSTFVjTGhp?= =?utf-8?B?bllUL2U1bUpBZHhqLzJKem9MSEF5YmNzY3hHa24vcWJQVkE2Njd5dEh4TnBV?= =?utf-8?B?OEo5QT09?= x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?WUJRWHhnTVc0RWlEcStQVkVUM1VUK0VQYUJFMUVUTTZzdHBWOW5Yd0d4dWxz?= =?utf-8?B?V1NnMzdHV04rSVgrSURwbGJCQmNtRzJTRlVRQ2xzMksrNC9pMEtFd1FwM1Ur?= =?utf-8?B?bkQ4NXFGWE45TmhwTGFHczRNZzlXTG9zVEZvNy9jVnk0VlJjZExiNTFWbXpY?= =?utf-8?B?eVRNK2ZLcCs4ZENONGpobTJUb28vQmNPcG5jT1U1R0FYZGE4OVBQVXovaGVY?= =?utf-8?B?d0RXSHFMZUEzZFlidVlQcXo1MEN6UktrVjhKc01DWk9vSCtZUzdMMVZRK25Q?= =?utf-8?B?UUo0WUtSUjZNNmlHZFA4SnpSY094a3c4d2p0cHlNVWhsL0lWamh4SWVPVFov?= =?utf-8?B?b0ZMS3duWUt4THRxdklEMHd3RURqQnVhc1BzM2ZnVEhOUVg1dm1vd2pPOUlk?= =?utf-8?B?SjFyQTh3M1NWcTN5VzUwOXZxWVFhc1g4ZFpNNmIwU1ZzcXI2OEQzYTJlYXdH?= =?utf-8?B?T1ZMcjBJWGl2YTExQTV1TEY3S1daM2JSTjIzajhSMnR1Mk5MNmxxc1kwRVVm?= =?utf-8?B?UGZqOEZmL2hlYnpZV2NXQ3Y2TnNJU0twandMeFVlRmxMNFE0UDk2TzkvY2Fs?= =?utf-8?B?RFBzaTU1Zkxoa0VGaXluS3VQeW9pN3RjTmUrTFIzRGVaNHJXalRUZW1sdTJa?= =?utf-8?B?dGM4Q1NUdGwxSGVXT1VtUDlJZ2dTMlRobitpclFsbVVYOFNBTEpiV3liT25X?= =?utf-8?B?MEJWaUFoMUxpZDRsck9rbUM1RUU5VVAwanNwWE1vMGFBNkxmZkY3aThSM3dE?= =?utf-8?B?UW9VdFNpeDJKb2paZGw2d01UM1pMOWxTajNuQXFodUFReVFDcUJzWUdMK2dT?= =?utf-8?B?ZkgwbE1TempKNzExRy8xUUJzdTYzbnNlNG5JbWFJYWZBWGtYSmU5NXFCNnMw?= =?utf-8?B?d0ZGcDlwTElPcnRxejhtdERtMHpGT1U5TlZUS281bGtvdGgzYWExTkc4OEtF?= =?utf-8?B?ZnRNdUIwUWxOcFJPdzA2ajRNYStpaHVuQnpjTThrUE5BYm1kQXNjTU9CK3Qx?= =?utf-8?B?bTRVTG1oMmsrUEJtazFrdzhxMkhHbWtCQVJFMUJGMDF4K2NNSlRrakFORTNt?= =?utf-8?B?dFEvT3FHRjlUWDNVVmVFaFQ4eFVPZzVVTVQ4N0NGSjV0amxVN1VZNXphMjhD?= =?utf-8?B?Rnl2bDFjM2JjbUpZZTFjcWgyOTdVOS8rYkE5K2ZMckRNSXlKR25Ddkl0TUVS?= =?utf-8?B?SzBqYW9xMkhWZjhTZGd2S1h1UWdpSnJJSUNWMENUOW90cHk4VWNIVlVaRWxK?= =?utf-8?B?SzZORXlhTHFsSFJaOWc4Uzk3SVRVUU43by9RcXJPWnZZV0V3VmZMNk9iS2ZB?= =?utf-8?B?WXZueWQ3bXU0WHU3V29HQ2dqckUvUFU3RUFxUVhyaGgxb01PVVN2MHpTQ3VZ?= =?utf-8?B?dUVWYWpoZ0pHdWszTC85MTI2WjJUd3laR3d0QXVJc0Y1UXlqUE1FMFlOUEw0?= =?utf-8?B?U3pQN1JWV25wK0d3RXhTd2xDR29JQ3Q5VXpra3pHUnFqRm9EL0RDemtYeVVn?= =?utf-8?B?aXV4N0QyRm14U0s1M2oraFZ4dFZleDQ1ZmM4cUo5MXV0QklyOTdsbk90WFR4?= =?utf-8?B?VHhBZmI4UlE2T2dsT3lyckZ5eGVmZUlhMjNScmFjcEpIRDdZTE8zVmZqQ2Y4?= =?utf-8?Q?FKIOqGD/6pMDHpms7ltengxcKc8AeG9I7eTp9ZTfooiI=3D?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: BYAPR12MB3205.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-CrossTenant-Network-Message-Id: 66f80c63-34a9-49db-ce1e-08dd45a9bec0 X-MS-Exchange-CrossTenant-originalarrivaltime: 05 Feb 2025 05:55:50.8428 (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: DS0PR12MB7703 X-Rspamd-Server: rspam05 X-Rspamd-Queue-Id: 2F3DB40005 X-Stat-Signature: 33mr9y1w1wazqcib8at4do4y98tz18x7 X-Rspam-User: X-HE-Tag: 1738734953-493613 X-HE-Meta: U2FsdGVkX1+FtEUSCIUiBJiu54B2ng5Hs6hAgQCRJeW+6MoyjBbRT2QWOsQ6yKofmMNdC2Uu6nKUPGrnp24bEIQ3p7b5e1P7CwyxqdjG1fOLQXVI4wqyjQREHk9ags0+4rBbyLRsHrRlWOq1kx/W/gXE5taN5iRrykcbMgo126sm3iWIwOrfyZIuH//VrW/nFtajNN7kFIHR/msobk8ywv6d8NBTxe3nDHChfMF6qiixiv7xAmw+WPBlbGpBufmXcIL3ejTDn3B0cFTHOv/v4PdwkMWT+fi4/cOJZAG/cy7y0Q0dHy8kdE2jaZrY1Lu90rOcX/y4wdnvxr/ZTytfMhCkK18VofYL6T0o2IE6DYXjRkHUEEMmeR/HDq2OFU9sA1Lky7AawHPB+eaK1d8YAQjU8zqiv9s/TwOGjciw7vbBpIyak/2+2pZNP/CXbT4yAYzfWXw71VosRnWDTFjSAylEBu09UBy6CmRxqEigKDfGKRk4SctwJ6MGqM0AUiyog1fG55ynfeM1zozejIXM7zefknBINaZuH2rvEru8uu1oJMqMp2mfIgTxGEnrTPMVJJ/2xKK21Wk4fBQvt4N9Ur+oxW7i9Gs+U0UjbIEoCj5khdebLMCDlHmuqkHwTxxB/cfUsFhApQfuca34ZCA8ayUNrwi4UHD/CZVxH+eB2jAOCqmbiiKf5YrbxiWF0zuorxc4m6bjLtigHpFQyjmXTTn61aLhZ3tDE0aau/QE/wRK/AbcVWBeTKnZKC+gXS6rsobwhcvzyG9q0UDTrqPaopU+myAHlnFb5LdwuYYqHY30MwfAi+84fMpQapVoKRhPFiltnLBivr7FNVe4ShCF0g4rB0zuI3OSD+v7iMIIjmCnhWmICikm3fIfa2Aabck/O9xTc6z5MG91gIBJJt5hy5iyV3tBO/zDNKGiakJMVaczSfd4DcDlUo3IsiXFwakMrDh3JQH3SG7yV5UxAJg 85JIS04r oKZd6VcA59UaS8YfHhyNYhhFidUDZ9rIxgiRpQt0jGZYWjN/nOIcG7fwDtdOIkQhMUX9LonOblp8wuSC6Efp0jnzRmzYw058aa5iXCx9teGAuo3L2xMgRoO6XBdCLQGd6J9B7GfDz9FvAVYlHK+UXTBniddRHj+8sDybc6bcSLizqvBxGV30dhvQgcC8jrRLnzkqVwi4hkdrCuxyAuxsfvC0G0b18wlFCqsh22rDa3fLA/AaeIW8k9EML2VK38Cu2sWMw63wG+VfT+3mVfLIAiJUbrKFXDwjs2K5wrKrjUwkNV2IucLwfdnNKVCuoafEgs+Uj4sPKyuTizaP+NPNuid2otEiIdsN1PXquXTOSIX4ffCWa0XdIOjD1zEkp3kOw34IORyNTsGWWaeQN9hhEo44t5t0pjlJ3/Jy/Hh7Y9s3LnCmemrmArmqP/N/UvBMzG7mmje/T1At+FkaN0fk4weJtpRtocwunbei4cyXstvvsIInT+gF9TzuV3VlLXzBD/lzd9isZX7a+rytHshNJlH3VG/0UWgFCKtV0iq2ZETXW6l6XiRuVcyJujw== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000080, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: SGkgTWlrZSBSYXBvcG9ydOOAgUFuZHJldyBNb3J0b24KSSBoYXZlIHJlY2VudGx5IGJlZW4gcmVz ZWFyY2hpbmcgdGhlIG1tIHN1YnN5c3RlbSBvZiB0aGUgTGludXgga2VybmVsLCBhbmQgSSBjYW1l IGFjcm9zcyB0aGUgbWVtYmxvY2tfYWRkX3JhbmdlIGZ1bmN0aW9uLCB3aGljaCBwaXF1ZWQgbXkg aW50ZXJlc3QuIEkgZm91bmQgdGhlIGltcGxlbWVudGF0aW9uIGFwcHJvYWNoIHF1aXRlIGludGVy ZXN0aW5nLCBzbyBJIGFuYWx5emVkIGl0IGFuZCBpZGVudGlmaWVkIHNvbWUgYXJlYXMgZm9yIG9w dGltaXphdGlvbi4gU3RhcnRpbmcgd2l0aCB0aGlzIHBhcnQgb2YgdGhlIGNvZGU6CgppZiAodHlw ZS0+Y250ICogMiArIDEgPD0gdHlwZS0+bWF4KQrigILigILigILigILigILigIJpbnNlcnQgPSB0 cnVlOwoKVGhlIGlkZWEgaGVyZSBpcyBnb29kLCBidXQgaXQgaGFzIGEgY2VydGFpbiBmbGF3LiBU aGUgY29uZGl0aW9uIGlzIHJhdGhlciByZXN0cmljdGl2ZSwgYW5kIGl0IGNhbm5vdCBiZSBleGVj dXRlZCBpbml0aWFsbHkuIE1vcmVvdmVyLCBpdCBpcyBvbmx5IHZhbGlkIHdoZW4gdGhlIHJlbWFp bmluZyBzcGFjZSBpcyAoMi8xKSArIDEuIElmIHRoZXJlIGlzIGVub3VnaCBtZW1vcnksIGJ1dCBp dCBkb2VzIG5vdCBzYXRpc2Z5ICgyLzEpICsgMSwgdGhlIGluc2VydGlvbiBvcGVyYXRpb24gc3Rp bGwgbmVlZHMgdG8gYmUgcGVyZm9ybWVkIHR3aWNlLgoKU28sIEkgY2FtZSB1cCB3aXRoIGEgc29s dXRpb246IGRlbGF5ZWQgYWxsb2NhdGlvbi4gU2luY2UgbWVtb3J5IGV4cGFuc2lvbiBpcyBleHBv bmVudGlhbCwgaXQgbWVhbnMgdGhhdCBwZXJmb3JtaW5nIGFyb3VuZCBmb3VyIGV4cGFuc2lvbnMg c2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gaGFuZGxlIHRoZSBtZW1vcnkgb3BlcmF0aW9ucyBuZWVk ZWQgZWFybHkgaW4gdGhlIGtlcm5lbCwgYmVmb3JlIHRoZSBidWRkeSBzeXN0ZW0gdGFrZXMgb3Zl ci4gVGhlcmVmb3JlLCBhc3N1bWluZyB0aGF0IG1lbW9yeSBpcyBhZGVxdWF0ZSBhdCB0aGUgYmVn aW5uaW5nLCBpbnNlcnRpb24gY2FuIGhhcHBlbiBhdCBhbnkgdGltZS4gSWYgbWVtb3J5IGlzIGlu c3VmZmljaWVudCBkdXJpbmcgdGhlIGluc2VydGlvbiwgd2UgcmVjb3JkIHRoZSBvcGVyYXRpb24g KGNoYW5naW5nIHRoZSBpbnNlcnRpb24gaW50byBhIHJlY29yZCBvcGVyYXRpb24pLiBUaGlzIGlu dm9sdmVzIGxvZ2dpbmcgdGhlIHN0YXJ0aW5nIGFkZHJlc3Mgb2YgdGhlIHJlbWFpbmluZyB1bnVz ZWQgc3BhY2UgYW5kIHRoZSBudW1iZXIgb2YgaW5zZXJ0aW9ucyBuZWVkZWQgKHRoaXMgdXN1YWxs eSBoYXBwZW5zIHdoZW4gcmVzb2x2aW5nIG92ZXJsYXBzKS4gQWZ0ZXIgbG9nZ2luZywgbWVtb3J5 IGFsbG9jYXRpb24gaXMgcGVyZm9ybWVkLCBhbmQgdGhlbiB0aGUgaW5zZXJ0aW9uIGlzIGF0dGVt cHRlZCBhZ2Fpbi4KClRoZSBiZW5lZml0IG9mIHRoaXMgYXBwcm9hY2ggaXMgdGhhdCBpdCBzaWdu aWZpY2FudGx5IHJlZHVjZXMgdGhlIHRpbWUgY29zdCBhbmQgYWxzbyByZWNvcmRzIHRoZSBzdGFy dGluZyBhZGRyZXNzIG9mIHRoZSByZW1haW5pbmcgdW51c2VkIHNwYWNlLiBUaGlzIHdheSwgdGhl IG5leHQgdGltZSB0aGUgb3BlcmF0aW9uIGJlZ2lucywgaXQgZG9lc27igJl0IGhhdmUgdG8gc3Rh cnQgZnJvbSBzY3JhdGNoLCBzb21ld2hhdCBsaWtlIGEgY2hlY2twb2ludGVkIHRyYW5zbWlzc2lv bi4KCkkgb3B0aW1pemVkIG1lbWJsb2NrX2FkZF9yYW5nZSBhY2NvcmRpbmcgdG8gbXkgYXBwcm9h Y2guIEFmdGVyd2FyZCwgSSB0ZXN0ZWQgaXQgaW4gdGhlIHFlbXUtYXJtIGVudmlyb25tZW50LCBh bmQgaXQgd29ya2VkIHByb3Blcmx5LiBBZGRpdGlvbmFsbHksIEkgdGVzdGVkIGl0IGluIHRoZSBs aW51eC90b29scy90ZXN0aW5nL21lbWJsb2NrIGRpcmVjdG9yeSwgYW5kIGl0IHN1Y2Nlc3NmdWxs eSBwYXNzZWQgYWxsIHRoZSB0ZXN0IGNhc2VzLgoKSSB1c2VkIHBlcmYgZm9yIHBlcmZvcm1hbmNl IHByb2ZpbGluZywgYW5kIGhlcmUgYXJlIG15IGRpYWdub3N0aWMgcmVjb3JkcyAoYnkgdGhlIHdh eSwgbXkgQ1BVIGlzIGEgMTN0aCBHZW4gSW50ZWwoUikgQ29yZShUTSkgaTctMTM3MDApOgoKVGhl IHBlcmZvcm1hbmNlIG9mIG1lbWJsb2NrX2FkZF9yYW5nZSBiZWZvcmUgdGhlIG1vZGlmaWNhdGlv biBpcyBhcyBmb2xsb3dzOgpTYW1wbGVzOiAzSyBvZiBldmVudCAnY3ljbGVzJywgRXZlbnQgY291 bnQgKGFwcHJveC4pOiAzODUzNjA5MDA3CkNoaWxkcmVuICAgICBTZWxmICAgICAgQ29tbSAgU2hh ciAgIFN5bWJvbCAKMS4zMiUgICAgICAgICAxLjMyJSAgbWFpbiAgICAgIG1haW4gIFsuXSBtZW1i bG9ja19hZGRfcmFuZ2UuaXNyYS4wCgpBZnRlciB0aGUgbW9kaWZpY2F0aW9uOgpTYW1wbGVzOiAz SyBvZiBldmVudCAnY3ljbGVzJywgRXZlbnQgY291bnQgKGFwcHJveC4pOiAzODM5MDU2NTg0CkNo aWxkcmVuICAgICAgU2VsZiAgICAgICBDb21tICBTaGFyICAgU3ltYm9sIAowLjY3JSAgICAgICAg ICAgMC42NyUgIG1haW4gICAgIG1haW4gIFsuXSBtZW1ibG9ja19hZGRfcmFuZ2UuaXNyYS4wClRo ZSBvcHRpbWFsIHBlcmZvcm1hbmNlIGNhbiByZWFjaCAwLjM4JS4KU2FtcGxlczogM0sgb2YgZXZl bnQgJ2N5Y2xlcycsIEV2ZW50IGNvdW50IChhcHByb3guKTogMzgzOTA1NjU4NApDaGlsZHJlbiAg ICAgIFNlbGYgICAgICAgQ29tbSAgU2hhciAgIFN5bWJvbCAKMC4zOCUgICAgICAgICAgIDAuMzgl ICBtYWluICAgICBtYWluICBbLl0gbWVtYmxvY2tfYWRkX3JhbmdlLmlzcmEuMAoKVG8gdGVzdCB0 aGUgb3B0aW1hbCBhbmQgYXZlcmFnZSB1dGlsaXphdGlvbiByYXRlcywgSSB3cm90ZSBhIHNoZWxs IHNjcmlwdCB0byBleGVjdXRlIHR3byB2ZXJzaW9ucyBvZiB0aGUgY29kZSAob25lIGJlZm9yZSBt b2RpZmljYXRpb24gYW5kIG9uZSBhZnRlciBtb2RpZmljYXRpb24pLiBJdCBydW5zIGVhY2ggdmVy c2lvbiAxMDAgdGltZXMgYW5kIGFuYWx5emVzIHRoZSByZXN1bHRzIG9mIHBlcmYgdG8gY2FsY3Vs YXRlIHRoZSBhdmVyYWdlLCBtaW5pbXVtLCBhbmQgbWF4aW11bSB1dGlsaXphdGlvbiByYXRlcyBm b3IgbWVtYmxvY2tfYWRkX3JhbmdlLiBCZWxvdyBhcmUgdGhlIHJlc3VsdHMgZnJvbSB0aGUgc2Ny aXB0OgpBZnRlciBhcHBseWluZyB0aGUgcGF0Y2gsIEkgbWVhc3VyZWQgdGhlIHBlcmZvcm1hbmNl IGltcHJvdmVtZW50cyB1c2luZyBgcGVyZmAgb24gbXkgSW50ZWwgaTctMTM3MDAuIFRoZSByZXN1 bHRzIHNob3cgYSBzaWduaWZpY2FudCByZWR1Y3Rpb24gaW4gdGhlIHRpbWUgc3BlbnQgaW4gYG1l bWJsb2NrX2FkZF9yYW5nZWA6CgotIEJlZm9yZSB0aGUgcGF0Y2g6CiAgLSBBdmVyYWdlOiAxLjIy JQogIC0gTWF4OiAxLjYzJSwgTWluOiAwLjkzJQoKLSBBZnRlciB0aGUgcGF0Y2g6CiAgLSBBdmVy YWdlOiAwLjY5JQogIC0gTWF4OiAwLjk0JSwgTWluOiAwLjUwJQoKVGhlIG9wdGltaXphdGlvbiBw cm92aWRlcyBhIDUzJSByZWR1Y3Rpb24gaW4gdGhlIGF2ZXJhZ2UgQ1BVIHRpbWUgc3BlbnQgaW4g dGhpcyBmdW5jdGlvbiwgd2l0aCB0aGUgd29yc3QtY2FzZSBwZXJmb3JtYW5jZSBub3cgY2xvc2Ug dG8gdGhlIGJlc3QtY2FzZSBwZXJmb3JtYW5jZSBiZWZvcmUgdGhlIG9wdGltaXphdGlvbi4KCkhl cmUgaXMgbXkgdGVzdCBzY3JpcHQgKGl0IHNob3VsZCBiZSBydW4gb25seSBpbiB0aGUgbGludXgv dG9vbHMvdGVzdGluZy9tZW1ibG9jayBkaXJlY3RvcnkpOgojIS9iaW4vYmFzaAoKUEVSRl9EQVRB PSJwZXJmLmRhdGEiCgpUT1RBTF9SVU5TPTEwMAoKQ0hJTERSRU5fUEVSQ0VOVEFHRT0wClNFTEZf UEVSQ0VOVEFHRT0wCkNISUxEUkVOX0FWRVJBR0U9MApTRUxGX0FWRVJBR0U9MApDSElMRFJFTlM9 KCkKU0VMRlM9KCkKTUlOX0NISUxEUkVOPTAKTUFYX0NISUxEUkVOPTAKTUlOX1NFTEY9MApNQVhf U0VMRj0wCgpmdW5jdGlvbiBsb2coKQp7CiAgICBlY2hvIC1lICQqCiAgICBlY2hvIC1lICQqID5w ZXJmX3Rlc3QubG9nCn0KCmlmIFsgLWYgIi4vcGVyZl90ZXN0LmxvZyIgXTsgdGhlbgogICAgcm0g Ii4vcGVyZl90ZXN0LmxvZyIKZmkKCnRvdWNoIHBlcmZfdGVzdC5sb2cKCmZvciBpIGluICQoc2Vx IDEgJFRPVEFMX1JVTlMpCmRvCiAgICAKICAgIHN1ZG8gcGVyZiByZWNvcmQgLWUgY3ljbGVzIC1n IC4vbWFpbiA+IC9kZXYvbnVsbCAyPiYxCgogICAgcmVhZCBDSElMRFJFTiBTRUxGIDw8PCAkKHN1 ZG8gcGVyZiByZXBvcnQgfCBncmVwICJtZW1ibG9ja19hZGRfcmFuZ2UuaXNyYS4wIiB8IGF3ayAn TlI9PTIge3ByaW50ICQxLCAkMn0nIHwgc2VkICdzLyUvL2cnKQogICAgaWYgWyAteiAkQ0hJTERS RU4gXTsgdGhlbgogICAgICAgIHJlYWQgQ0hJTERSRU4gU0VMRiA8PDwgJChzdWRvIHBlcmYgcmVw b3J0IHwgZ3JlcCAibWVtYmxvY2tfYWRkX3JhbmdlLmlzcmEuMCIgfCBhd2sgJ05SPT0xIHtwcmlu dCAkMSwgJDJ9JyB8IHNlZCAncy8lLy9nJykKICAgIGZpCiAgICAKICAgIGlmIFsgJE1JTl9DSElM RFJFTiA9PSAwIF07IHRoZW4KICAgICAgICBNSU5fQ0hJTERSRU49JENISUxEUkVOCiAgICBmaQoK ICAgIGlmIFsgJE1JTl9TRUxGID09IDAgXTsgdGhlbgogICAgICAgIE1JTl9TRUxGPSRTRUxGCiAg ICBmaQoKICAgIGlmICgoICQoZWNobyAiJENISUxEUkVOID4gJE1BWF9DSElMRFJFTiIgfCBiYyAt bCkgKSk7IHRoZW4KICAgICAgICBNQVhfQ0hJTERSRU49JENISUxEUkVOCiAgICBlbGlmICgoICQo ZWNobyAiJENISUxEUkVOIDwgJE1JTl9DSElMRFJFTiIgfCBiYyAtbCkgKSk7IHRoZW4KICAgICAg ICBNSU5fQ0hJTERSRU49JENISUxEUkVOCiAgICBmaQogICAgCiAgICBpZiAoKCAkKGVjaG8gIiRT RUxGID4gJE1BWF9TRUxGIiB8IGJjIC1sKSApKTsgdGhlbgogICAgICAgIE1BWF9TRUxGPSRTRUxG CiAgICBlbGlmICgoICQoZWNobyAiJFNFTEYgPCAkTUlOX1NFTEYiIHwgYmMgLWwpICkpOyB0aGVu CiAgICAgICAgTUlOX1NFTEY9JFNFTEYKICAgIGZpCgogICAgbG9nICIoJGkpIG1lbWJsb2NrX2Fk ZF9yYW5nZS5pc3JhLjA6IENoaWxkcmVuIDwkQ0hJTERSRU4+LCBTZWxmIDwkU0VMRj4iCgogICAg Q0hJTERSRU5TKz0oJENISUxEUkVOKQogICAgU0VMRlMrPSgkU0VMRikKCiAgICBzdWRvIHJtIC1m ICRQRVJGX0RBVEEKZG9uZQoKZm9yIFBFUkNFTlQgaW4gIiR7Q0hJTERSRU5TW0BdfSIKZG8KICAg IENISUxEUkVOX1BFUkNFTlRBR0U9JChlY2hvICIkQ0hJTERSRU5fUEVSQ0VOVEFHRSArICRQRVJD RU5UIiB8IGJjKQpkb25lCgpmb3IgUEVSQ0VOVCBpbiAiJHtTRUxGU1tAXX0iCmRvCiAgICBTRUxG X1BFUkNFTlRBR0U9JChlY2hvICIkU0VMRl9QRVJDRU5UQUdFICsgJFBFUkNFTlQiIHwgYmMpCmRv bmUKCkNISUxEUkVOX0FWRVJBR0U9JChlY2hvICJzY2FsZT0yOyAkQ0hJTERSRU5fUEVSQ0VOVEFH RSAvICRUT1RBTF9SVU5TIiB8IGJjKQpDSElMRFJFTl9BVkVSQUdFPSQocHJpbnRmICIlLjJmIiAk Q0hJTERSRU5fQVZFUkFHRSkKU0VMRl9BVkVSQUdFPSQoZWNobyAic2NhbGU9MjsgJFNFTEZfUEVS Q0VOVEFHRSAvICRUT1RBTF9SVU5TIiB8IGJjKQpTRUxGX0FWRVJBR0U9JChwcmludGYgIiUuMmYi ICRTRUxGX0FWRVJBR0UpCgpsb2cgIiIKbG9nICJSZXN1bHQgcmVwb3J0OiIKbG9nICJtZW1ibG9j a19hZGRfcmFuZ2UuaXNyYS4wIEF2ZXJhZ2U6IENoaWxkcmVuIChBdmU8JENISUxEUkVOX0FWRVJB R0UlPiwgTWluPCRNSU5fQ0hJTERSRU4+LCBNYXg8JE1BWF9DSElMRFJFTik+IAogU2VsZiAoQXZl PCRTRUxGX0FWRVJBR0UlPiwgTWluPCRNSU5fU0VMRj4sIE1heDwkTUFYX1NFTEY+KSIKCkhlcmUg aXMgbXkgcGF0Y2g6CkZyb20gMWQ0ZGE4MDhiMWM2ZWYyYTg3MDY3ODJjM2ZlNzI0YzYyMTY5ZjMx MSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKRnJvbTogInN0ZXBoZW4uZXRhLnpob3UiIDxzdGVw aGVuLmV0YS56aG91QG91dGxvb2suY29tPgpEYXRlOiBXZWQsIDUgRmViIDIwMjUgMTI6MDQ6NDAg KzA4MDAKU3ViamVjdDogW1BBVENIXSBtbTogb3B0aW1pemUgbWVtYmxvY2tfYWRkX3JhbmdlKCkg Zm9yIGltcHJvdmVkIHBlcmZvcm1hbmNlCgotIFN0cmVhbWxpbmVkIG1lbW9yeSBpbnNlcnRpb24g bG9naWMgdG8gbWluaW1pemUgcmVkdW5kYW50IGl0ZXJhdGlvbnMuCi0gSW1wcm92ZWQgaGFuZGxp bmcgb2YgbWVtb3J5IGluc3VmZmljaWVuY3kgdG8gYXZvaWQgZXhjZXNzaXZlCiAgcmVhbGxvY2F0 aW9ucy4KClNpZ25lZC1vZmYtYnk6IHN0ZXBoZW4uZXRhLnpob3UgPHN0ZXBoZW4uZXRhLnpob3VA b3V0bG9vay5jb20+Ci0tLQogbW0vbWVtYmxvY2suYyB8IDEwNiArKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDcwIGluc2Vy dGlvbnMoKyksIDM2IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL21tL21lbWJsb2NrLmMgYi9t bS9tZW1ibG9jay5jCmluZGV4IDk1YWYzNWZkMTM4OS4uNzVjNzZiMzlhMzY0IDEwMDY0NAotLS0g YS9tbS9tZW1ibG9jay5jCisrKyBiL21tL21lbWJsb2NrLmMKQEAgLTU4NSwxNiArNTg1LDE2IEBA IHN0YXRpYyBpbnQgX19pbml0X21lbWJsb2NrIG1lbWJsb2NrX2FkZF9yYW5nZShzdHJ1Y3QgbWVt YmxvY2tfdHlwZSAqdHlwZSwKIOKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKA guKAguKAguKAguKAguKAguKAguKAguKAguKAguKAgnBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRk cl90IHNpemUsCiDigILigILigILigILigILigILigILigILigILigILigILigILigILigILigILi gILigILigILigILigILigILigILigIJpbnQgbmlkLCBlbnVtIG1lbWJsb2NrX2ZsYWdzIGZsYWdz KQogewot4oCC4oCC4oCC4oCC4oCCYm9vbCBpbnNlcnQgPSBmYWxzZTsKIOKAguKAguKAguKAguKA gnBoeXNfYWRkcl90IG9iYXNlID0gYmFzZTsKIOKAguKAguKAguKAguKAgnBoeXNfYWRkcl90IGVu ZCA9IGJhc2UgKyBtZW1ibG9ja19jYXBfc2l6ZShiYXNlLCAmc2l6ZSk7Ci3igILigILigILigILi gIJpbnQgaWR4LCBucl9uZXcsIHN0YXJ0X3JnbiA9IC0xLCBlbmRfcmduOwor4oCC4oCC4oCC4oCC 4oCCcGh5c19hZGRyX3QgcmJhc2UsIHJlbmQ7CivigILigILigILigILigIJpbnQgaWR4LCBucl9u ZXcsIHN0YXJ0X3JnbiwgZW5kX3JnbjsKIOKAguKAguKAguKAguKAgnN0cnVjdCBtZW1ibG9ja19y ZWdpb24gKnJnbjsKIAog4oCC4oCC4oCC4oCC4oCCaWYgKCFzaXplKQog4oCC4oCC4oCC4oCC4oCC 4oCC4oCC4oCC4oCC4oCC4oCCcmV0dXJuIDA7CiAKLeKAguKAguKAguKAguKAgi8qIHNwZWNpYWwg Y2FzZSBmb3IgZW1wdHkgYXJyYXkgKi8KK+KAguKAguKAguKAguKAgi8qIFNwZWNpYWwgY2FzZSBm b3IgZW1wdHkgYXJyYXkgKi8KIOKAguKAguKAguKAguKAgmlmICh0eXBlLT5yZWdpb25zWzBdLnNp emUgPT0gMCkgewog4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCCV0FSTl9PTih0eXBl LT5jbnQgIT0gMCB8fCB0eXBlLT50b3RhbF9zaXplKTsKIOKAguKAguKAguKAguKAguKAguKAguKA guKAguKAguKAgnR5cGUtPnJlZ2lvbnNbMF0uYmFzZSA9IGJhc2U7CkBAIC02MDYsODAgKzYwNiwx MTQgQEAgc3RhdGljIGludCBfX2luaXRfbWVtYmxvY2sgbWVtYmxvY2tfYWRkX3JhbmdlKHN0cnVj dCBtZW1ibG9ja190eXBlICp0eXBlLAog4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC cmV0dXJuIDA7CiDigILigILigILigILigIJ9CiAKKyAgICAvKiBEZWxheWVkIGFzc2lnbm1lbnQs IHdoaWNoIGlzIG5vdCBuZWNlc3Nhcnkgd2hlbiB0aGUgYXJyYXkgaXMgZW1wdHkuICovCivigILi gILigILigILigIJzdGFydF9yZ24gPSAtMTsKIOKAguKAguKAguKAguKAgi8qCi3igILigILigILi gILigIIgKiBUaGUgd29yc3QgY2FzZSBpcyB3aGVuIG5ldyByYW5nZSBvdmVybGFwcyBhbGwgZXhp c3RpbmcgcmVnaW9ucywKLeKAguKAguKAguKAguKAgiAqIHRoZW4gd2UnbGwgbmVlZCB0eXBlLT5j bnQgKyAxIGVtcHR5IHJlZ2lvbnMgaW4gQHR5cGUuIFNvIGlmCi3igILigILigILigILigIIgKiB0 eXBlLT5jbnQgKiAyICsgMSBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdHlwZS0+bWF4LCB3ZSBr bm93Ci3igILigILigILigILigIIgKiB0aGF0IHRoZXJlIGlzIGVub3VnaCBlbXB0eSByZWdpb25z IGluIEB0eXBlLCBhbmQgd2UgY2FuIGluc2VydAot4oCC4oCC4oCC4oCC4oCCICogcmVnaW9ucyBk aXJlY3RseS4KK+KAguKAguKAguKAguKAgiAqIE9yaWdpbmFsbHksIGBlbmRfcmduYCBkaWRuJ3Qg bmVlZCB0byBiZSBhc3NpZ25lZCBhIHZhbHVlLAor4oCC4oCC4oCC4oCC4oCCICogYnV0IGR1ZSB0 byB0aGUgdXNlIG9mIG5lc3RlZCBjb25kaXRpb25hbCBleHByZXNzaW9ucywKK+KAguKAguKAguKA guKAgiAqIHRoZSBjb21waWxlciByZXBvcnRzIGEgd2FybmluZyB0aGF0IGBlbmRfcmduYCBpcyB1 bmluaXRpYWxpemVkLgor4oCC4oCC4oCC4oCC4oCCICogVGhlcmVmb3JlLCBpdCBoYXMgYmVlbiBn aXZlbiBhbiBpbml0aWFsIHZhbHVlIGhlcmUKK+KAguKAguKAguKAguKAgiAqIHRvIGVsaW1pbmF0 ZSB0aGUgd2FybmluZy4KIOKAguKAguKAguKAguKAgiAqLwot4oCC4oCC4oCC4oCC4oCCaWYgKHR5 cGUtPmNudCAqIDIgKyAxIDw9IHR5cGUtPm1heCkKLeKAguKAguKAguKAguKAguKAguKAguKAguKA guKAguKAgmluc2VydCA9IHRydWU7CivigILigILigILigILigIJlbmRfcmduICAgPSAtMTsKIAog cmVwZWF0Ogog4oCC4oCC4oCC4oCC4oCCLyoKLeKAguKAguKAguKAguKAgiAqIFRoZSBmb2xsb3dp bmcgaXMgZXhlY3V0ZWQgdHdpY2UuICBPbmNlIHdpdGggJWZhbHNlIEBpbnNlcnQgYW5kCi3igILi gILigILigILigIIgKiB0aGVuIHdpdGggJXRydWUuICBUaGUgZmlyc3QgY291bnRzIHRoZSBudW1i ZXIgb2YgcmVnaW9ucyBuZWVkZWQKLeKAguKAguKAguKAguKAgiAqIHRvIGFjY29tbW9kYXRlIHRo ZSBuZXcgYXJlYS4gIFRoZSBzZWNvbmQgYWN0dWFsbHkgaW5zZXJ0cyB0aGVtLgor4oCC4oCC4oCC 4oCC4oCCICogSXQgaXMgYXNzdW1lZCB0aGF0IGluc2VydGlvbiBpcyBhbHdheXMgcG9zc2libGUg dW5kZXIgbm9ybWFsIGNpcmN1bXN0YW5jZXMuCivigILigILigILigILigIIgKiBJZiBtZW1vcnkg aXMgaW5zdWZmaWNpZW50IGR1cmluZyBpbnNlcnRpb24sIHRoZSBvcGVyYXRpb24gd2lsbCByZWNv cmQgdGhlIG5lZWQsCivigILigILigILigILigIIgKiBhbGxvY2F0ZSBtZW1vcnksIGFuZCB0aGVu IHJlLWV4ZWN1dGUgdGhlIGluc2VydGlvbiBmb3IgdGhlIHJlbWFpbmluZyBwb3J0aW9uLgog4oCC 4oCC4oCC4oCC4oCCICovCiDigILigILigILigILigIJiYXNlID0gb2Jhc2U7CiDigILigILigILi gILigIJucl9uZXcgPSAwOwogCiDigILigILigILigILigIJmb3JfZWFjaF9tZW1ibG9ja190eXBl KGlkeCwgdHlwZSwgcmduKSB7Ci3igILigILigILigILigILigILigILigILigILigILigIJwaHlz X2FkZHJfdCByYmFzZSA9IHJnbi0+YmFzZTsKLeKAguKAguKAguKAguKAguKAguKAguKAguKAguKA guKAgnBoeXNfYWRkcl90IHJlbmQgPSByYmFzZSArIHJnbi0+c2l6ZTsKK+KAguKAguKAguKAguKA guKAguKAguKAguKAguKAguKAgnJiYXNlID0gcmduLT5iYXNlOwor4oCC4oCC4oCC4oCC4oCC4oCC 4oCC4oCC4oCC4oCC4oCCcmVuZCA9IHJiYXNlICsgcmduLT5zaXplOwogCiDigILigILigILigILi gILigILigILigILigILigILigIJpZiAocmJhc2UgPj0gZW5kKQog4oCC4oCC4oCC4oCC4oCC4oCC 4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCCYnJlYWs7CiDigILigILigILigILigILi gILigILigILigILigILigIJpZiAocmVuZCA8PSBiYXNlKQog4oCC4oCC4oCC4oCC4oCC4oCC4oCC 4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCCY29udGludWU7CisKIOKAguKAguKAguKAguKA guKAguKAguKAguKAguKAguKAgi8qCi3igILigILigILigILigILigILigILigILigILigILigIIg KiBAcmduIG92ZXJsYXBzLiAgSWYgaXQgc2VwYXJhdGVzIHRoZSBsb3dlciBwYXJ0IG9mIG5ldwot 4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCCICogYXJlYSwgaW5zZXJ0IHRoYXQgcG9y dGlvbi4KK+KAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAgiAqIEByZ24gb3ZlcmxhcHMu IElmIGl0IHNlcGFyYXRlcyB0aGUgbG93ZXIgcGFydCBvZiBuZXcgYXJlYSwgaW5zZXJ0IHRoYXQg cG9ydGlvbi4KIOKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAgiAqLwog4oCC4oCC4oCC 4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCCaWYgKHJiYXNlID4gYmFzZSkgewogI2lmZGVmIENPTkZJ R19OVU1BCiDigILigILigILigILigILigILigILigILigILigILigILigILigILigILigILigILi gIJXQVJOX09OKG5pZCAhPSBtZW1ibG9ja19nZXRfcmVnaW9uX25vZGUocmduKSk7CiAjZW5kaWYK IOKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAgldBUk5f T04oZmxhZ3MgIT0gcmduLT5mbGFncyk7Ci3igILigILigILigILigILigILigILigILigILigILi gILigILigILigILigILigILigIJucl9uZXcrKzsKLeKAguKAguKAguKAguKAguKAguKAguKAguKA guKAguKAguKAguKAguKAguKAguKAguKAgmlmIChpbnNlcnQpIHsKK+KAguKAguKAguKAguKAguKA guKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAgi8qCivigILigILigILigILigILigILi gILigILigILigILigILigILigILigILigILigILigIIgKiBJZiBtZW1vcnkgaXMgaW5zdWZmaWNp ZW50LCB0aGUgc3BhY2UgcmVxdWlyZWQgd2lsbCBiZSByZWNvcmRlZC4KK+KAguKAguKAguKAguKA guKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAgiAqIElmIG1lbW9yeSBpcyBzdWZm aWNpZW50LCB0aGUgaW5zZXJ0aW9uIHdpbGwgcHJvY2VlZC4KK+KAguKAguKAguKAguKAguKAguKA guKAguKAguKAguKAguKAguKAguKAguKAguKAguKAgiAqLwor4oCC4oCC4oCC4oCC4oCC4oCC4oCC 4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCCaWYgKHR5cGUtPmNudCA+PSB0eXBlLT5tYXgp IHsKK+KAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKA guKAguKAguKAguKAguKAgi8qCivigILigILigILigILigILigILigILigILigILigILigILigILi gILigILigILigILigILigILigILigILigILigILigIIgKiBSZWNvcmQgb2Jhc2UgYXMgdGhlIGFk ZHJlc3Mgd2hlcmUgdGhlCivigILigILigILigILigILigILigILigILigILigILigILigILigILi gILigILigILigILigILigILigILigILigILigIIgKiBvdmVybGFwcGluZyBwYXJ0IGhhcyBub3Qg YmVlbiByZXNvbHZlZCwKK+KAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKA guKAguKAguKAguKAguKAguKAguKAguKAguKAgiAqIHNvIHRoYXQgd2hlbiByZXBlYXQgcmVzdGFy dHMsCivigILigILigILigILigILigILigILigILigILigILigILigILigILigILigILigILigILi gILigILigILigILigILigIIgKiByZWR1bmRhbnQgb3BlcmF0aW9ucyBvZiByZXNvbHZpbmcgdGhl CivigILigILigILigILigILigILigILigILigILigILigILigILigILigILigILigILigILigILi gILigILigILigILigIIgKiBvdmVybGFwcGluZyBhZGRyZXNzZXMgYXJlIGF2b2lkZWQuCivigILi gILigILigILigILigILigILigILigILigILigILigILigILigILigILigILigILigILigILigILi gILigILigIIgKi8KK+KAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKA guKAguKAguKAguKAguKAguKAguKAguKAgmlmIChucl9uZXcgPT0gMCkKK+KAguKAguKAguKAguKA guKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKA guKAguKAguKAguKAguKAgm9iYXNlID0gYmFzZTsKK+KAguKAguKAguKAguKAguKAguKAguKAguKA guKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAgm5yX25ldysrOwor4oCC 4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCCfSBlbHNlIHsK IOKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKA guKAguKAguKAguKAgmlmIChzdGFydF9yZ24gPT0gLTEpCiDigILigILigILigILigILigILigILi gILigILigILigILigILigILigILigILigILigILigILigILigILigILigILigILigILigILigILi gILigILigIJzdGFydF9yZ24gPSBpZHg7CiDigILigILigILigILigILigILigILigILigILigILi gILigILigILigILigILigILigILigILigILigILigILigILigIJlbmRfcmduID0gaWR4ICsgMTsK LeKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKA guKAguKAguKAguKAgm1lbWJsb2NrX2luc2VydF9yZWdpb24odHlwZSwgaWR4KyssIGJhc2UsCi3i gILigILigILigILigILigILigILigILigILigILigILigILigILigILigILigILigILigILigILi gILigILigILigILigILigILigILigILigILigILigILigILigILigILigILigIIgICAgICAgcmJh c2UgLSBiYXNlLCBuaWQsCi3igILigILigILigILigILigILigILigILigILigILigILigILigILi gILigILigILigILigILigILigILigILigILigILigILigILigILigILigILigILigILigILigILi gILigILigIIgICAgICAgZmxhZ3MpOwor4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC 4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCCbWVtYmxvY2tfaW5zZXJ0X3JlZ2lv bih0eXBlLCBpZHgrKywgYmFzZSwgcmJhc2UgLSBiYXNlLCBuaWQsIGZsYWdzKTsKIOKAguKAguKA guKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAgn0KIOKAguKAguKAguKA guKAguKAguKAguKAguKAguKAguKAgn0KLeKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKA gi8qIGFyZWEgYmVsb3cgQHJlbmQgaXMgZGVhbHQgd2l0aCwgZm9yZ2V0IGFib3V0IGl0ICovCivi gILigILigILigILigILigILigILigILigILigILigIIvKiBBcmVhIGJlbG93IEByZW5kIGlzIGRl YWx0IHdpdGgsIGZvcmdldCBhYm91dCBpdCAqLwog4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC 4oCC4oCCYmFzZSA9IG1pbihyZW5kLCBlbmQpOwog4oCC4oCC4oCC4oCC4oCCfQogCi3igILigILi gILigILigIIvKiBpbnNlcnQgdGhlIHJlbWFpbmluZyBwb3J0aW9uICovCivigILigILigILigILi gIIvKiBJbnNlcnQgdGhlIHJlbWFpbmluZyBwb3J0aW9uICovCiDigILigILigILigILigIJpZiAo YmFzZSA8IGVuZCkgewot4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCCbnJfbmV3Kys7 Ci3igILigILigILigILigILigILigILigILigILigILigIJpZiAoaW5zZXJ0KSB7CivigILigILi gILigILigILigILigILigILigILigILigIIvKgor4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC 4oCC4oCCICogU2ltaWxhcmx5LCBhZnRlciBoYW5kbGluZyB0aGUgb3ZlcmxhcHBpbmcgcGFydCwK K+KAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAgiAqIGl0IGlzIHN0aWxsIHBvc3NpYmxl IHRoYXQgbWVtb3J5IGlzCivigILigILigILigILigILigILigILigILigILigILigIIgKiBpbnN1 ZmZpY2llbnQuIEluIHRoYXQgY2FzZSwgdGhlIHNwYWNlIHdpbGwgYmUgcmVjb3JkZWQgb25jZSBh Z2Fpbi4KK+KAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAgiAqLwor4oCC4oCC4oCC4oCC 4oCC4oCC4oCC4oCC4oCC4oCC4oCCaWYgKHR5cGUtPmNudCA+PSB0eXBlLT5tYXgpIHsKK+KAguKA guKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAgi8qCivigILigILi gILigILigILigILigILigILigILigILigILigILigILigILigILigILigIIgKiBUaGUgYWRkcmVz cyBvZiBvYmFzZSBuZWVkcyB0byBiZSByZWNvcmRlZCBoZXJlIGFzIHdlbGwuIFRoZSBwdXJwb3Nl IGlzIHRvCivigILigILigILigILigILigILigILigILigILigILigILigILigILigILigILigILi gIIgKiBoYW5kbGUgdGhlIHNpdHVhdGlvbiB3aGVyZSwKK+KAguKAguKAguKAguKAguKAguKAguKA guKAguKAguKAguKAguKAguKAguKAguKAguKAgiAqIGFmdGVyIHJlc29sdmluZyB0aGUgb3Zlcmxh cCwgdGhlcmUgaXMgc3RpbGwgYSByZW1haW5pbmcgc3BhY2UgdG8KK+KAguKAguKAguKAguKAguKA guKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAgiAqIGluc2VydCBidXQgbWVtb3J5IGlz IGluc3VmZmljaWVudCAoaS5lLiwKK+KAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKA guKAguKAguKAguKAguKAgiAqIG5vIG1lbW9yeSBzaG9ydGFnZSBvY2N1cnJlZCB3aGlsZSByZXNv bHZpbmcgdGhlIG92ZXJsYXApLgor4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC 4oCC4oCC4oCC4oCC4oCCICogVGhpcyBtZWFucyB0aGF0IHNwYWNlIGZvcgor4oCC4oCC4oCC4oCC 4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCCICogTiAob3ZlcmxhcHBpbmcg cGFydHMpICsgMSAobm9uLW92ZXJsYXBwaW5nIHBhcnQpIGlzIHJlcXVpcmVkLgor4oCC4oCC4oCC 4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCCICogSWYgb2Jhc2UgaXMg bm90IHJlY29yZGVkLCBhZnRlciBtZW1vcnkgZXhwYW5zaW9uLAor4oCC4oCC4oCC4oCC4oCC4oCC 4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCCICogYmFzZSBtaWdodCByZXZlcnQgdG8g dGhlIG9yaWdpbmFsIGFkZHJlc3MgdG8gYmUKK+KAguKAguKAguKAguKAguKAguKAguKAguKAguKA guKAguKAguKAguKAguKAguKAguKAgiAqIGluc2VydGVkICh3aGljaCBjb3VsZCBiZSBvdmVybGFw cGluZykuCivigILigILigILigILigILigILigILigILigILigILigILigILigILigILigILigILi gIIgKiBUaGlzIGNvdWxkIGxlYWQgdG8gZm9yX2VhY2hfbWVtYmxvY2tfdHlwZSBhdHRlbXB0aW5n CivigILigILigILigILigILigILigILigILigILigILigILigILigILigILigILigILigIIgKiB0 byByZXNvbHZlIHRoZSBvdmVybGFwIGFnYWluLCBjYXVzaW5nIG11bHRpcGxlIHVubmVjZXNzYXJ5 IGl0ZXJhdGlvbnMsCivigILigILigILigILigILigILigILigILigILigILigILigILigILigILi gILigILigIIgKiBldmVuIGlmIGl0J3MganVzdCBhIHNpbXBsZSBjaGVjay4KK+KAguKAguKAguKA guKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAgiAqLwor4oCC4oCC4oCC4oCC 4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCCaWYgKG5yX25ldyA9PSAwKQor 4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC 4oCC4oCC4oCC4oCCb2Jhc2UgPSBiYXNlOwor4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC 4oCC4oCC4oCC4oCC4oCC4oCC4oCCbnJfbmV3Kys7CivigILigILigILigILigILigILigILigILi gILigILigIJ9IGVsc2Ugewog4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC 4oCC4oCC4oCC4oCCaWYgKHN0YXJ0X3JnbiA9PSAtMSkKIOKAguKAguKAguKAguKAguKAguKAguKA guKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAgnN0YXJ0X3JnbiA9 IGlkeDsKIOKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKA gmVuZF9yZ24gPSBpZHggKyAxOwot4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC 4oCC4oCC4oCC4oCC4oCCbWVtYmxvY2tfaW5zZXJ0X3JlZ2lvbih0eXBlLCBpZHgsIGJhc2UsIGVu ZCAtIGJhc2UsCi3igILigILigILigILigILigILigILigILigILigILigILigILigILigILigILi gILigILigILigILigILigILigILigILigILigILigILigILigILigIIgICAgICAgbmlkLCBmbGFn cyk7CivigILigILigILigILigILigILigILigILigILigILigILigILigILigILigILigILigIJt ZW1ibG9ja19pbnNlcnRfcmVnaW9uKHR5cGUsIGlkeCwgYmFzZSwgZW5kIC0gYmFzZSwgbmlkLCBm bGFncyk7CiDigILigILigILigILigILigILigILigILigILigILigIJ9CiDigILigILigILigILi gIJ9CiAKLeKAguKAguKAguKAguKAgmlmICghbnJfbmV3KQot4oCC4oCC4oCC4oCC4oCC4oCC4oCC 4oCC4oCC4oCC4oCCcmV0dXJuIDA7Ci0KIOKAguKAguKAguKAguKAgi8qCi3igILigILigILigILi gIIgKiBJZiB0aGlzIHdhcyB0aGUgZmlyc3Qgcm91bmQsIHJlc2l6ZSBhcnJheSBhbmQgcmVwZWF0 IGZvciBhY3R1YWwKLeKAguKAguKAguKAguKAgiAqIGluc2VydGlvbnM7IG90aGVyd2lzZSwgbWVy Z2UgYW5kIHJldHVybi4KK+KAguKAguKAguKAguKAgiAqIEZpbmFsbHksIGNoZWNrIGlmIG1lbW9y eSBpbnN1ZmZpY2llbmN5IG9jY3VycmVkIGR1cmluZyBpbnNlcnRpb24uCivigILigILigILigILi gIIgKiBJZiBzbywgdGhlIG1lbW9yeSB3aWxsIGJlIGV4cGFuZGVkIHRvIGFuIGFwcHJvcHJpYXRl IHNpemUsCivigILigILigILigILigIIgKiBhbmQgdGhlIHJlbWFpbmluZyBwb3J0aW9uIHdpbGwg YmUgaW5zZXJ0ZWQgYWdhaW4uCivigILigILigILigILigIIgKiBJZiBub3QsIGl0IG1lYW5zIG1l bW9yeSBpcyBzdWZmaWNpZW50LCBhbmQgdGhlIHJlZ2lvbnMgd2lsbCBiZSBtZXJnZWQgZGlyZWN0 bHkuCiDigILigILigILigILigIIgKi8KLeKAguKAguKAguKAguKAgmlmICghaW5zZXJ0KSB7Ci3i gILigILigILigILigILigILigILigILigILigILigIJ3aGlsZSAodHlwZS0+Y250ICsgbnJfbmV3 ID4gdHlwZS0+bWF4KQor4oCC4oCC4oCC4oCC4oCCaWYgKG5yX25ldyA+IDApIHsKK+KAguKAguKA guKAguKAguKAguKAguKAguKAguKAguKAgndoaWxlICh0eXBlLT5jbnQgKyBucl9uZXcgPiB0eXBl LT5tYXgpIHsKIOKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKA guKAgmlmIChtZW1ibG9ja19kb3VibGVfYXJyYXkodHlwZSwgb2Jhc2UsIHNpemUpIDwgMCkKIOKA guKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKA guKAguKAguKAgnJldHVybiAtRU5PTUVNOwot4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC4oCC 4oCCaW5zZXJ0ID0gdHJ1ZTsKK+KAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAgn0KIOKA guKAguKAguKAguKAguKAguKAguKAguKAguKAguKAgmdvdG8gcmVwZWF0Owog4oCC4oCC4oCC4oCC 4oCCfSBlbHNlIHsKIOKAguKAguKAguKAguKAguKAguKAguKAguKAguKAguKAgm1lbWJsb2NrX21l cmdlX3JlZ2lvbnModHlwZSwgc3RhcnRfcmduLCBlbmRfcmduKTsKLS0gCjIuMjUuMQoK