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 gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 95CDCCD3430 for ; Mon, 4 May 2026 14:30:43 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id DD1C210E3E9; Mon, 4 May 2026 14:30:42 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=intel.com header.i=@intel.com header.b="TQEYyck0"; dkim-atps=neutral Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.17]) by gabe.freedesktop.org (Postfix) with ESMTPS id BA61610E3E9; Mon, 4 May 2026 14:30:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1777905041; x=1809441041; h=date:from:to:cc:subject:message-id:references: content-transfer-encoding:in-reply-to:mime-version; bh=ehddM9z9mtvwqj/Mjyl7dl9whFBvGrQcL2Eq1mqDn4U=; b=TQEYyck0fjAkgSDTylM+8tRCJlQled1ctTJq76GEFoL3f8nQtA/3R6Xu IruwL7viFgEBJTcU6h5GN31hROKK474YScPPbllLfaZzVk2f8dMpGBedB P9PfGzpsefwSeThZ9L1T+cDmpiI1nA+G31SIk14uWyJ8ElpGkiWER62Pj XIwbQ2Z2pfZqkKkpnM4l/Vlkgqg3KedzecTXoPG2RXvzEzb3R/xCIiB7q FW4HQYJDM20Q6ygXa8L9Lcs06yvYqBIEPahy1Sdqedynfiije8aPDms5Q XDmVjxV1Qc/1qqni9cWSZOfpVFmgUcB8Ognj4UbE+qeSzBbMhuCJT883v g==; X-CSE-ConnectionGUID: xSqQ0T8sQACuDwHTgFw1LA== X-CSE-MsgGUID: 61EjhucnStK/kVfuCjuP/A== X-IronPort-AV: E=McAfee;i="6800,10657,11776"; a="78752794" X-IronPort-AV: E=Sophos;i="6.23,215,1770624000"; d="scan'208";a="78752794" Received: from orviesa002.jf.intel.com ([10.64.159.142]) by orvoesa109.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 04 May 2026 07:30:40 -0700 X-CSE-ConnectionGUID: Jb8SodncR4yn+EY/GLjSTA== X-CSE-MsgGUID: g1wfy6CSSCGWyoSWCSsgUA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.23,215,1770624000"; d="scan'208";a="265880309" Received: from fmsmsx901.amr.corp.intel.com ([10.18.126.90]) by orviesa002.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 04 May 2026 07:30:41 -0700 Received: from FMSMSX902.amr.corp.intel.com (10.18.126.91) by fmsmsx901.amr.corp.intel.com (10.18.126.90) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.37; Mon, 4 May 2026 07:30:39 -0700 Received: from fmsedg901.ED.cps.intel.com (10.1.192.143) by FMSMSX902.amr.corp.intel.com (10.18.126.91) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.37 via Frontend Transport; Mon, 4 May 2026 07:30:39 -0700 Received: from SA9PR02CU001.outbound.protection.outlook.com (40.93.196.43) by edgegateway.intel.com (192.55.55.81) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.37; Mon, 4 May 2026 07:30:39 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=k8QtjWQW0BK3CmqfLR3//mesb9FGVNUqVUGggwtOLyyf7u5rDfF8cN99Rh0FYBLrOI0hFKefFnBbx3rg1SvmYrLxF+YPu3N2ve/uhuS8qptzR9JLEOLBj7AdqfjWCrrkzcCBsXCIDBtJsKhbpc1B1txIHjv7OXxPmNlpFmNtN2h1aTDgQWpjeLWrO9IbTeiZNqKQBHq/YJ5iFY/mvR7MgOxpq9XJvY4HYlhW/2sGqIr9TiQTlbzEy1jsnprBRWFvg8DfaFPUTEdC0eYYLE2MdG9GY6HyyKNo/0wNb4nYAIVWYeEbLUXstmfQTFrdqs4aXOIS2diNioU4bo+4vo1YrQ== 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=FP7ExP1P4yH4A2rvabi+HqNE6N6h8kPQEhcfOy0oCf8=; b=ifCI3o2HBFgD69M4J1Vfp4XMqkwvDFLlGrjLn1OvazRNRQbpg4fki5PoPMCgKww5H7ymKk/rc0mhU4jEhdx9RTV+0nfcb7zi5Wt7+vRfmeWIXxbC93zMO0Z6jLKaIQ46ZGnGKXKmbMPoRMIpR2CROSlUGHa2guWlCXodNZLE+QzlgjjL4NBQJBO092puYSzif53TnYwSALSt/31TR4ubPET3knslAWPycEH3bWTbdTKCRY207IHh72vquxCtapCB06IQizRLhuH7N7hQlpCQjwJWYGmUDyXn00emSLkiH4iA2YhwN0na4SSxQH8iUTWJDmc2sMj39B3SvGYuwZ+T+g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; Received: from PH7PR11MB6522.namprd11.prod.outlook.com (2603:10b6:510:212::12) by DS4PPFC222DF22F.namprd11.prod.outlook.com (2603:10b6:f:fc02::4a) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9870.25; Mon, 4 May 2026 14:30:32 +0000 Received: from PH7PR11MB6522.namprd11.prod.outlook.com ([fe80::e0c5:6cd8:6e67:dc0c]) by PH7PR11MB6522.namprd11.prod.outlook.com ([fe80::e0c5:6cd8:6e67:dc0c%7]) with mapi id 15.20.9870.023; Mon, 4 May 2026 14:30:32 +0000 Date: Mon, 4 May 2026 07:30:29 -0700 From: Matthew Brost To: Thomas =?iso-8859-1?Q?Hellstr=F6m?= CC: , , Christian Koenig , Huang Rui , Matthew Auld , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , , Subject: Re: [PATCH] drm/ttm/pool: back up at native page order Message-ID: References: <20260504042619.2896273-1-matthew.brost@intel.com> <58ea6837e2aa808bf9f3ba304395058a2d08b8d0.camel@linux.intel.com> Content-Type: text/plain; charset="utf-8" Content-Disposition: inline Content-Transfer-Encoding: base64 In-Reply-To: <58ea6837e2aa808bf9f3ba304395058a2d08b8d0.camel@linux.intel.com> X-ClientProxiedBy: SJ0PR03CA0215.namprd03.prod.outlook.com (2603:10b6:a03:39f::10) To PH7PR11MB6522.namprd11.prod.outlook.com (2603:10b6:510:212::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PH7PR11MB6522:EE_|DS4PPFC222DF22F:EE_ X-MS-Office365-Filtering-Correlation-Id: a9f5171a-0090-4607-3742-08dea9e9b236 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|366016|7416014|376014|1800799024|20046099003|56012099003|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: PJaMJ9+mWbRnx+JdpuKTQLRcag0ZF4T55xqZu7mopYHY6Dtcjyxz0cTv6HQRDPkSlm5LKIndogcJecEZaBL4p8mlrsufm91XHfr6KW2gzp7tv/eNbgAZSbryZ+nHhQ2LTytCmnyyqeCjBxrtO8Mwug3PvggCFLipRS/HMeBT+pWZ654fQzLQSf1MCy7fkHldydI9Pyk9zxzCbrzaYYnyR5IqDTJW5qTCteeTPQg8Ps2oLJC5DYodoSO5UD8pAM+BT4nUrWdOL7TMcyc0CsJS3n7gfZdL/pn2XJcPO/6IvAohGXCqIO4hmSCeDhDn9xv5jVpEdeEn3Njn79mArOn8Dz0DmKZ6dwOj8FgnS/NrPZb7eHcymxflBpjeCvY9CKYof4JfRV+czNfrM5d6e5S6KQZzOL7CdMXqa9kVwaTDz9DPhV30jsSPdQaK+DN4upfppqy8MQymePnNRzzx5g8SUtS1tTm+GZOk75FmOBuLKyWvy4DE4UDXeKS1PK4hjsxCJpzLyUPr0tXJ5/bA4WPTEhhwr0L1WTqDJVr8StVMAu2cMLWls3dDML8TmHrEdaaCKhpRp2R0n5xDDAH6H3oAwrwEpT+6d4eVVKAaJMmAZh5HGqRLgqeN4geK20Vfc6a+B/ij4svL1X8DE5wK4EAXZg== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PH7PR11MB6522.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(366016)(7416014)(376014)(1800799024)(20046099003)(56012099003)(22082099003)(18002099003); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?MVBYbTV2QXk1VUJ2TURNL2I0aE1OVlYrcTgrT3h5ZytMTlYrb05JZnRFbjBj?= =?utf-8?B?UlY0NmFIKyswMCtUZzlZaWlFWXlwUWs1bm5jbm1TOGNOK1VxS0hPajM5eHd5?= =?utf-8?B?Zk84ejlPMHQ0ZzlsV1BXcjF6cFdzNmpOODU5SFlsR2ZzS29VVk56TldaT2d2?= =?utf-8?B?QWg3VlQ2S2dmMTVzWGtNMU9GVEVhd28ySk1wSU5rS2hsRmp4bVhjUm5jdXZ3?= =?utf-8?B?NTIvS01adFNrQjF3ajYwR2pCRVlWdjY1RXBxa2E1T2szeWNoYnIrWVlJU0Y2?= =?utf-8?B?MGZkNDg5TFhPUU8rbEV5aFF4aCs4R085aEswZGxpZHQrYjNOUmxzNUl2VndE?= =?utf-8?B?a3VJbTZPWTBTNTZma25OSkU5RlJ5R2hKNDBJajMyOVc3ditQSUxqSkkrMEU3?= =?utf-8?B?UnVuc3dSRk14ZVZSN3dJUGJ6UkNuOFBJM3JaTDREek1mVVpIUXB3TEhnK1F4?= =?utf-8?B?RitRTXN0Zk56MUhlWDFpUmZGRUV5bWxVb2NQREE3ZzdMYkxlalQ1OXNnQW1G?= =?utf-8?B?bVdEdHJTU0poNERyR0VTMnpNU2JUVVJTMWE2VjJyeE9iMnBxamRvZWsyblRH?= =?utf-8?B?aDZJNjVLTDFEM0w1U1R1bVB5eDlxVXZQYVMwTXcyR29QU3lvNGlLYy93anNs?= =?utf-8?B?eG9QRzFtSXpxM0RnaHpDb3BnQ2RsL09tWGwxUUZWVEN3RWQzTVltdEdMd1F0?= =?utf-8?B?MTZHS3VIYkFhUlFRNUFtWjVxYkwvL1JNT0w1bzdFSkkzOGllUG00NWRBbTYx?= =?utf-8?B?R01iaE1hVHY2SEQrT0lwb0M2NE5xUlhydTVxRU5pNGNsc0VaU1Fpa0RCK2Zq?= =?utf-8?B?akJIdmZ0dnRtZjJGYk1mcFc4UUFhcmhWbTVFcHV6VFQyVVNVQ0wwWXQ5b0tI?= =?utf-8?B?RWhVaUJrWXA5R212QW9tZVdZSHlGRER5Y1dZTEdaOTYvaFM3bW1RYm96TVA0?= =?utf-8?B?L29yN1ZSMVJpV0xMVTRBUGt4TVg4c2NiN1RlTkFXbHJ2a0phem9HYWRpcHN1?= =?utf-8?B?WCtmajFLV2FXdTJESHFEaXh6bWs5SXFRblg4blBidGs1TmNvS1lxUWtTUm1D?= =?utf-8?B?eHEzYmJrNWN6Y094cnJCOVJPWjlOUDlXRlQxd0RxMERnMXd5bVJNbHdTcDBS?= =?utf-8?B?Y1ZpZC9mcit6RkJkMllVbEZKR2hoZEtkNXp6SnFDa093S2tWZlFwQ01RSG9L?= =?utf-8?B?WVRjMGZmdi9FaDhxejYvTkV2SysyNU8wd1paUTZjS2tpbGFuQmdkMDRFejBK?= =?utf-8?B?dEttVHA1SUpTRWtQQ05sZnNObjI2NzRoVHhxaUViSnFPb3puVm5DZXRLbVQ2?= =?utf-8?B?Q0JpYXJnd1ZhbFJRM2E4SHQ0ODB3OGJaNVRGc25KL21NV1hxUFdlZ1lsbnB1?= =?utf-8?B?ZURUcVhOSFJVWXJJZnNZbmdLc3YxMk9aQzVsZEtjc2lFbFRGRmZsdEgzSjh2?= =?utf-8?B?cnpyV3pSTlBJcmFmSDcrL0czdFdkQ1RYREZkZ2ZOUTNoZklrZTVvMG9YSTA4?= =?utf-8?B?K2QrTHRoSTllQktSMUhDbHJWLzN6dlg3ejRFV05XQ2prWFRlRlFqb0NxS2U3?= =?utf-8?B?b3lNNnhtbWtCRjJCVnZEVkg5MVptaWxBUkxqa0tTQ2gzSTJkWXBuNmd6U0pM?= =?utf-8?B?OWlQOGZNSENBYjZBSXY5SWd1TjZrY0JzSmNONnYxZVVGUkZleEp6eHBlSHBY?= =?utf-8?B?VzdCNnBWaURxRFZCNFFraG0vQTZtU04rZDM2bnFtWENSSTAyNDMvckd4bHJL?= =?utf-8?B?ZWZ6K2dCQ2k3V0N6Um5mQWNabVRYNjE5QXJRRjJENU5GRWxoT1EyeGtNM20z?= =?utf-8?B?L3ZCMVBNd3dwb05jc0l1REhSYVh1MkpNeUpaOHIxYnp2NVN5a045ZnMrN3g1?= =?utf-8?B?aXRycVZxV1dWem9rN2h0WkM4U21LV21obEN1SUdrNi96Mm5FOEJ2ZUpXTkhJ?= =?utf-8?B?ekRCcVNsM0JNc1RJNHp0QUlSL2k2REZmRWhpVTVKQkxRYWNHNGFrd1pRaWpI?= =?utf-8?B?Wm1WQTJzZ3ZBY3VtZ2R2dHlUY29BSFpwdGVQZzZqYTdwN1BHL3hUcFNKOTVl?= =?utf-8?B?UVR4QTNEMzRGYURHdTQwVmlFN1FLa1BHWnpSR1dZMnJidkN1NFh0aE9CaW05?= =?utf-8?B?YjZlaThON2pNOTBSRkp4bGdTcWlyTHBTWndUQmR0L1oxOFQ3LzF2UG9pdWdX?= =?utf-8?B?aU4rT0NScXZ6Q29BUGp1b2NYMitjOHNlMEwvOHhHenZsMlpiWk9pSlV6R1Fv?= =?utf-8?B?ekZRaVJXeHhoVkdsck4xTS85WGlwZnEwRnNzTFQrdk1TdnRHSzNoTnJJc3hH?= =?utf-8?B?WHJOQkVoMDZQdXVBL2tDV0VPbk5oczVVaGxtQzhEVlFrVjNXS2hRQT09?= X-Exchange-RoutingPolicyChecked: W+j+df7IMi0xU8RldDRgyKAUaAWtqivSw4Z/Re/lZmMxJnepeFx6ncxmpsgSAw/pwAlU2T8kjXvYncNEuLbWiYBmg56ERszu0pc+ucUDGepzdJJ8ObDekTlhQ3ABNG1hnoUjrWu1/dkqmB5aEQoqSLoqRedhIixdZVoGnUsMmMUcU3CWvXVc0CB49fBtcvVdZ6pZMl3ze9dcDrCEf0MHBnLwVa4eNLNDZFFuV6GJt087gCo/Qqg+QK+9cK50qr5jZNy0TxbyUQRDvumaI4gfwKs/RwJqP7m9RmmfrYmRmMFOKV6cgTMre4pTld16pTspZ1xOA+bzCoZ7Vr6OCnF0gw== X-MS-Exchange-CrossTenant-Network-Message-Id: a9f5171a-0090-4607-3742-08dea9e9b236 X-MS-Exchange-CrossTenant-AuthSource: PH7PR11MB6522.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 May 2026 14:30:31.9358 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: +SlPnLCi6RQrBppx9aOVTbTqGAmh/A2hCrJC8RdaNJIMEmy81l565WC9WxG/69iB+65kCTRZxe3usdeV0eHcYg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS4PPFC222DF22F X-OriginatorOrg: intel.com X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" T24gTW9uLCBNYXkgMDQsIDIwMjYgYXQgMTA6MzU6MjNBTSArMDIwMCwgVGhvbWFzIEhlbGxzdHLD tm0gd3JvdGU6Cj4gSGksIE1hdHQsCj4gCj4gT24gU3VuLCAyMDI2LTA1LTAzIGF0IDIxOjI2IC0w NzAwLCBNYXR0aGV3IEJyb3N0IHdyb3RlOgo+ID4gdHRtX3Bvb2xfc3BsaXRfZm9yX3N3YXAoKSBz cGxpdHMgaGlnaC1vcmRlciBwb29sIHBhZ2VzIGludG8gb3JkZXItMAo+ID4gcGFnZXMgZHVyaW5n IGJhY2t1cCBzbyBlYWNoIDRLIHBhZ2UgY2FuIGJlIHJlbGVhc2VkIHRvIHRoZSBzeXN0ZW0gYXMK PiA+IHNvb24gYXMgaXQgaGFzIGJlZW4gd3JpdHRlbiB0byBzaG1lbS4gV2hpbGUgdGhpcyBtaW5p bWl6ZXMgdGhlCj4gPiBhbGxvY2F0b3IncyB3b3JraW5nIHNldCBkdXJpbmcgcmVjbGFpbSwgaXQg YWN0aXZlbHkgZnJhZ21lbnRzIG1lbW9yeToKPiA+IGV2ZXJ5IFRUTS1iYWNrZWQgY29tcG91bmQg cGFnZSB0aGF0IHRoZSBzaHJpbmtlciB0b3VjaGVzIGlzIHNoYXR0ZXJlZAo+ID4gaW50byBvcmRl ci0wIHBhZ2VzLCBldmVuIHdoZW4gdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbSB3b3VsZCBwcmVmZXIK PiA+IHRoYXQKPiA+IHRoZSBoaWdoLW9yZGVyIGJsb2NrIHN0YXkgaW50YWN0LiBVbmRlciBzdXN0 YWluZWQga3N3YXBkIHByZXNzdXJlCj4gPiB0aGlzCj4gPiBpcyBlbm91Z2ggdG8gZHJpdmUgb3Ro ZXIgcGFydHMgb2YgTU0gaW50byByZWNvdmVyeSBsb29wcyBmcm9tIHdoaWNoCj4gPiB0aGV5IGNh bm5vdCBlYXNpbHkgZXNjYXBlLCBiZWNhdXNlIHRoZSBtZW1vcnkgVFRNIGp1c3QgZnJlZWQgaXMg bm8KPiA+IGxvbmdlciBjb250aWd1b3VzLgo+ID4gCj4gPiBTdG9wIHNwbGl0dGluZyBvbiB0aGUg YmFja3VwIHBhdGggYW5kIGJhY2sgdXAgZWFjaCBjb21wb3VuZAo+ID4gYXRvbWljYWxseQo+ID4g YXQgaXRzIG5hdGl2ZSBvcmRlciBpbiB0dG1fcG9vbF9iYWNrdXAoKToKPiA+IAo+ID4gwqAgLSBG b3IgZWFjaCBub24taGFuZGxlIHNsb3QsIHJlYWQgdGhlIG9yZGVyIGZyb20gdGhlIGhlYWQgcGFn ZSBhbmQKPiA+IMKgwqDCoCBiYWNrIHVwIGFsbCAxPDxvcmRlciBzdWJwYWdlcyB0byBjb25zZWN1 dGl2ZSBzaG1lbSBpbmRpY2VzLAo+ID4gwqDCoMKgIHdyaXRpbmcgdGhlIHJlc3VsdGluZyBoYW5k bGVzIGludG8gdHQtPnBhZ2VzW10gYXMgd2UgZ28uCj4gPiDCoCAtIE9uIGFueSBwZXItc3VicGFn ZSBiYWNrdXAgZmFpbHVyZSwgZHJvcCB0aGUgaGFuZGxlcyB3ZSBqdXN0IHdyb3RlCj4gPiDCoMKg wqAgZm9yIHRoaXMgY29tcG91bmQgYW5kIHJlc3RvcmUgdGhlIG9yaWdpbmFsIHBhZ2UgcG9pbnRl cnMsIHNvIHRoZQo+ID4gwqDCoMKgIGNvbXBvdW5kIGlzIGxlZnQgZnVsbHkgaW50YWN0IGFuZCBt YXkgYmUgcmV0cmllZCBsYXRlci4gc2hydW5rZW4KPiA+IMKgwqDCoCBpcyBvbmx5IGluY3JlbWVu dGVkIG9uY2UgdGhlIHdob2xlIGNvbXBvdW5kIHN1Y2NlZWRzLgo+ID4gwqAgLSBPbiBzdWNjZXNz LCB0aGUgY29tcG91bmQgaXMgZnJlZWQgb25jZSBhdCBpdHMgbmF0aXZlIG9yZGVyLiBObwo+ID4g wqDCoMKgIHNwbGl0X3BhZ2UoKSwgbm8gcGVyLTRLIHJlZmNvdW50IGp1Z2dsaW5nLCBubyBmcmFn bWVudGF0aW9uCj4gPiDCoMKgwqAgaW50cm9kdWNlZCBmcm9tIHRoaXMgcGF0aC4KPiA+IMKgIC0g U2xvdHMgdGhhdCBhbHJlYWR5IGhvbGQgYSBiYWNrdXAgaGFuZGxlIGZyb20gYSBwcmV2aW91cyBw YXJ0aWFsCj4gPiDCoMKgwqAgYXR0ZW1wdCBhcmUgc2tpcHBlZC4gQSBjb21wb3VuZCB0aGF0IHdv dWxkIGV4dGVuZCBwYXN0IGEKPiA+IMKgwqDCoCBmYXVsdC1pbmplY3Rpb24tdHJ1bmNhdGVkIG51 bV9wYWdlcyBpcyBza2lwcGVkIHJhdGhlciB0aGFuIHNwbGl0Lgo+ID4gCj4gPiBUaGUgcmVzdG9y ZS1zaWRlIGxlZnRvdmVyLXBhZ2UgYnJhbmNoIGluIHR0bV9wb29sX3Jlc3RvcmVfY29tbWl0KCkg aXMKPiA+IGxlZnQgYXMtaXMgZm9yIG5vdzogdGhhdCBwYXRoIGNhbiBzdGlsbCBzcGxpdCBhIHBy ZXZpb3VzbHktcmV0YWluZWQKPiA+IGNvbXBvdW5kLCBidXQgaW4gcHJhY3RpY2UgaXQgaXMgdW5y ZWFjaGFibGUgdW5kZXIgcmVhbGlzdGljIHdvcmtsb2Fkcwo+ID4gKHBlciBwcm9maWxpbmcgd2Ug aGF2ZSBub3QgYmVlbiBhYmxlIHRvIHRyaWdnZXIgaXQpLCBzbyBpdCBpcyBub3QKPiA+IHdvcnRo IGNvbXBsaWNhdGluZyB0aGUgcmVzdG9yZSBzdGF0ZSBtYWNoaW5lIHRvIGF2b2lkIHRoZSBzcGxp dAo+ID4gdGhlcmUuCj4gPiBJZiBpdCBldmVyIGJlY29tZXMgYSBwcm9ibGVtIGluIHByYWN0aWNl IGl0IGNhbiBiZSBhZGRyZXNzZWQKPiA+IGluZGVwZW5kZW50bHkuCj4gPiAKPiA+IHR0bV9wb29s X3NwbGl0X2Zvcl9zd2FwKCkgaXRzZWxmIGlzIHJldGFpbmVkIGZvciB0aGUgcmVzdG9yZSBwYXRo J3MKPiA+IHNvbGUgcmVtYWluaW5nIGNhbGxlci4gVGhlIERNQS1tYXBwZWQgcHJlLWJhY2t1cCB1 bm1hcCBsb29wLCB0aGUKPiA+IHB1cmdlIHBhdGgsIHR0bV9wb29sX2ZyZWVfKiwgYW5kIHR0bV9w b29sX3VubWFwX2FuZF9mcmVlKCkgYWxyZWFkeQo+ID4gb3BlcmF0ZSBhdCBuYXRpdmUgb3JkZXIg YW5kIGFyZSB1bmNoYW5nZWQuCj4gCj4gVGhpcyBzcGxpdCBpcyBpbnRlbnRpb25hbCBpbiB0aGF0 IHdpdGhvdXQgaXQsIHdlJ2QgbmVlZCB0byBmaXJzdAo+IGFsbG9jYXRlIDEgPDwgb3JkZXIgcGFn ZXMgZnJvbSB0aGUga2VybmVsJ3MgKnJlc2VydmVzKiBpbiBvcmRlciB0bwo+IGxhdGVyIGZyZWUg MiA8PCBvcmRlciBwYWdlcywgbWFraW5nIHRoZSBzaHJpbmtlciBtdWNoIG1vcmUgbGlrZWx5IHRv Cj4gZmFpbCBpbiB0cnVlIE9PTSBzaXR1YXRpb25zLiAoSSBiZWxpZXZlIHRoaXMgd2FzIG9uZSBv ZiB0aGUgcmVhc29ucyB0aGUKPiBpbml0aWFsIHNocmlua2VyIGF0dGVtcHRzIGZyb20gQU1EIGRp ZG4ndCB3b3JrIGFzIGV4cGVjdGVkKS4KPiAKClNvIHdoZXJlIGV4YWN0bHkgaXMgYWxsb2NhdGlv biBkb25l4oCUc2htZW1fcmVhZF9mb2xpb19nZnAgb3IKc2htZW1fd3JpdGVvdXQ/IEkgZGlkIG5v dGljZSBhbmQgY2FsbGVkIG91dCwgaW4gdGhlIGNvbW1pdCBtZXNzYWdlLCB0aGF0CnRob3NlIGlu dGVyZmFjZXMgYXJlIGEgYml0IGNvbmZ1c2luZyB3aXRoIHJlc3BlY3QgdG8gd2hldGhlciB0aGV5 CmFjdHVhbGx5IHdvcmsgd2l0aCBoaWdoZXItb3JkZXIgYWxsb2NhdGlvbnMuCgpBbHNvLCBGV0lX LCB0aGlzIHBhdGNoIGJ5IGl0c2VsZiBzZWVtcyB0byBncmVhdGx5IGhlbHAgd2l0aApmcmFnbWVu dGF0aW9uLCBhbmQgSSBoYXZlbuKAmXQgc2VlbiB0aGUgT09NIGtpbGxlciBraWNrIGluLiBJ4oCZ dmUgZG9uZQp0aGluZ3MgbGlrZSBydW5uaW5nIFdlYkdMIGluIGEgYnVuY2ggb2YgQ2hyb21lIHRh YnMsIHRoZW4gcnVubmluZwpib25uaWUrKyAod2hpY2ggYmFzaWNhbGx5IHVzZXMgYWxsIG1lbW9y eSksIG9yIHJ1bm5pbmcgSUdUcywgd2hpY2ggYWxzbwp1c2UgYWxsIGF2YWlsYWJsZSBtZW1vcnku IEJhc2VkIG9uIHRoYXQsIEnigJltIGxlYW5pbmcgdG93YXJkIHRoaXMgcGF0Y2gKYWxvbmUgd29y a2luZyBhcyBkZXNpZ25lZC4KCj4gCj4gSSBiZWxpZXZlIHRoZSBzb2x1dGlvbiBoZXJlIGlzIGlu IHRoZSB0dG1fYmFja3VwIGxheWVyLCBXZSBzaG91bGQKPiBpbnRyb2R1Y2UgYSB0dG1fYmFja3Vw X2JhY2t1cF9mb2xpbyBmdW5jdGlvbiBhbmQgZWl0aGVyIGluc2VydCB0aGUgcGFnZQoKSSB0aGlu ayBzb21ldGhpbmcgbGlrZSB0dG1fYmFja3VwX2JhY2t1cF9mb2xpbygpIG1ha2VzIHNlbnNlLCBh Z2FpbiBJCmNhbGxlZCBvdXQgaW4gY29tbWl0IG1lc3NhZ2UuCgo+IGRpcmVjdGx5IGludG8gdGhl IHNobWVtIG9iamVjdCAoemVyby1jb3B5KSBvciBldmVuIGRpcmVjdGx5IGludG8gdGhlCj4gc3dh cCBjYWNoZS4gVGhlbiB3ZSBzaG91bGQgY29tcGxldGVseSByZXN0cmljdCB4ZSBwYWdlIGFsbG9j YXRpb25zIHRvCj4gb25seSBhbGxvdyBUSFAgYW5kIFBBR0VfU0laRSAoUG9zc2libHkgNjRLIHBh Z2VzLCBidXQgdGhleSdkIGVpdGhlcgo+IG5lZWQgYSBzcGxpdCBvciBwZXJoYXBzIHRoZXkgYXJl IHNtYWxsIGVub3VnaCB0byBiZSBiYWNrZWQtdXAgdXNpbmcKClllcywgSSBkaWQgcmFpc2Ugc29t ZXRoaW5nIGxpa2Ugd2l0aCBDaHJpc3RpYW4gdG9vIFsxXS4gSU1PIHRoZSBkcml2ZXIKc2hvdWxk IGJlIGFibGUgZGljdGF0ZSB0byBUVE0gdGhlIG9yZGVycyBpdCBsaWtlbHkgdG8gYWxsb2NhdGUg YXQuCgpbMV0gaHR0cHM6Ly9wYXRjaHdvcmsuZnJlZWRlc2t0b3Aub3JnL3BhdGNoLzcxNjM2Mi8/ c2VyaWVzPTE2NDMzOCZyZXY9MQoKPiBvbmUtZ28gY29weSwgc2ltaWxhciB0byB0aGlzIHBhdGNo LCBidXQgaW4gdGhlIGJhY2t1cCBsYXllcikuIEZXSVcgYXQKPiB0aGUgdGltZSB0aGUgc2hyaW5r ZXIgd2FzIHB1dCB0b2dldGhlciwgQUZBSVUgU0hNRU0gc3BsaXQgbGFyZ2UgcGFnZXMKPiBvbiBz d2FwcGluZyBhbnl3YXksIGJ1dCBzaW5jZSB0aGF0IGFwcGVhcnMgdG8gaGF2ZSBjaGFuZ2VkLCB3 ZSBuZWVkIHRvCj4gY2F0Y2ggdXAuCj4gCj4gSW5zZXJ0aW5nIGRpcmVjdGx5IGludG8gdGhlIHN3 YXAtY2FjaGUgV0lQIGlzIGhlcmUsIHJlYmFzZWQgb24gYSByZWNlbnQKPiBrZXJuZWwgKFRoaXMg aXMgYW4gb2xkIGlkZWEgdGhhdCBoYXMgYWN0dWFsbHkgYmVlbiBvdXQgb24gUkZDIG9uY2UpLgo+ IFRoaXMgbmVlZHMgYSBjb3JlIG1tIGJ1Z2ZpeCAoYWxzbyBpbiB0aGUgYnJhbmNoKSwgYnV0IEkn bSBub3Qgc3VyZSB0aGUKPiBzd2FwIGNhY2hlIGlzIHRoZSByaWdodCBwbGFjZSB0byBkbyB0aGlz LCBhdCBsZWFzdCBub3QgaWYgd2UgZG9uJ3QKPiBpbW1lZGlhdGVseSBzY2hlZHVsZSBhIHdyaXRl IHRvIGRpc2MsIGl0IGxvb2tzIGxpa2UgY3VycmVudCB1c2VycyBkb24ndAo+IHdhbnQgdG8ga2Vl cCBwYWdlcyBpbiBzd2FwLWNhY2hlIGZvciB2ZXJ5IGxvbmcgKHJlbGF0ZWQgdG8gdGhhdCBidWcp Cj4gaHR0cHM6Ly9naXRsYWIuZnJlZWRlc2t0b3Aub3JnL3Rob21hc2gveGUtdmliZS8tL2NvbW1p dHMvdGhwX3N3YXBwaW5nMgo+IAo+IEluc2VydGluZyBkaXJlY3RseSBpbnRvIHNobWVtIChBIGZh aXJseSByZWNlbnQgaWRlYSB0aGF0IGlzIG1vc3RseQo+IHVudGVzdGVkKQo+IGh0dHBzOi8vZ2l0 bGFiLmZyZWVkZXNrdG9wLm9yZy90aG9tYXNoL3hlLXZpYmUvLS9jb21taXRzL2luc2VydF9zaG1l bT9yZWZfdHlwZT1oZWFkcwo+IFNpbmNlIFNITUVNIHNjaGVkdWxlcyB3cml0ZW91dCBpbW1lZGlh dGVseSB3aGVuIHBhZ2VzIGFyZSBtb3ZlZCB0byB0aGUKPiBzd2FwLWNhY2hlLCBpdCdzIG5vdCBh cyBzdXNjZXB0aWJsZSB0byB0aGUgYWJvdmUgYnVnLCBzaW5jZSBzd2FwLWNhY2hlCj4gZW50cmll cyBhcmUgbm90IHR5cGljYWxseSBoZWxkIGZvciBmb2xpb3MgZm9yIHdoaWNoIHdlIGhhdmVuJ3QK PiBzY2hlZHVsZWQgd3JpdGVvdXQuCj4gCgpMZXQgbWUgdGFrZSBhIGxvb2sgYXQgdGhlc2UgYnJh bmNoZXMgdG9kYXkuCgo+IFdlIHNob3VsZCB0cnkgdG8gc29saWNpdCBmZWVkYmFjayBmcm9tIG1t IHBlb3BsZSBvbiB0aGVzZSB0d28KPiBhcHByb2FjaGVzLgoKKzEsIGJ1dCBJIHRoaW5rIHdlIHNo b3VsZCBzdG9wIGhlcmUgaWYgdGhpcyBwYXRjaCwgYXPigJFpcywgaXMgT0sgdG8gZ28KaW7igJRp ZGVhbGx5IGFzIGEgZml44oCUc2luY2UsIGJhc2VkIG9uIG15IHRlc3RpbmcsIGl0IHNlZW1zIHRv IGhlbHAgcXVpdGUgYQpiaXQgYW5kIGN1cnJlbnQgdXBzdHJlYW0gc2hyaW5rZXIgaXMgYmFkbHkg YnJva2VuLgoKTWF0dAoKPiAKPiAvVGhvbWFzCj4gCj4gPiAKPiA+IENjOiBDaHJpc3RpYW4gS29l bmlnIDxjaHJpc3RpYW4ua29lbmlnQGFtZC5jb20+Cj4gPiBDYzogSHVhbmcgUnVpIDxyYXkuaHVh bmdAYW1kLmNvbT4KPiA+IENjOiBNYXR0aGV3IEF1bGQgPG1hdHRoZXcuYXVsZEBpbnRlbC5jb20+ Cj4gPiBDYzogTWFhcnRlbiBMYW5raG9yc3QgPG1hYXJ0ZW4ubGFua2hvcnN0QGxpbnV4LmludGVs LmNvbT4KPiA+IENjOiBNYXhpbWUgUmlwYXJkIDxtcmlwYXJkQGtlcm5lbC5vcmc+Cj4gPiBDYzog VGhvbWFzIFppbW1lcm1hbm4gPHR6aW1tZXJtYW5uQHN1c2UuZGU+Cj4gPiBDYzogRGF2aWQgQWly bGllIDxhaXJsaWVkQGdtYWlsLmNvbT4KPiA+IENjOiBTaW1vbmEgVmV0dGVyIDxzaW1vbmFAZmZ3 bGwuY2g+Cj4gPiBDYzogZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+ID4gQ2M6IGxp bnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmcKPiA+IENjOiBzdGFibGVAdmdlci5rZXJuZWwub3Jn Cj4gPiBGaXhlczogYjYzZDcxNWI4MDkwICgiZHJtL3R0bS9wb29sLCBkcm0vdHRtL3R0OiBQcm92 aWRlIGEgaGVscGVyIHRvCj4gPiBzaHJpbmsgcGFnZXMiKQo+ID4gU3VnZ2VzdGVkLWJ5OiBUaG9t YXMgSGVsbHN0csO2bSA8dGhvbWFzLmhlbGxzdHJvbUBsaW51eC5pbnRlbC5jb20+Cj4gPiBBc3Np c3RlZC1ieTogQ2xhdWRlOmNsYXVkZS1vcHVzLTQuNgo+ID4gU2lnbmVkLW9mZi1ieTogTWF0dGhl dyBCcm9zdCA8bWF0dGhldy5icm9zdEBpbnRlbC5jb20+Cj4gPiAKPiA+IC0tLQo+ID4gCj4gPiBB IGZvbGxvdy11cCBzaG91bGQgYXR0ZW1wdCB3cml0ZWJhY2sgdG8gc2htZW0gYXQgZm9saW8gb3Jk ZXIgYXMgd2VsbCwKPiA+IGJ1dCB0aGUgQVBJIGZvciBkb2luZyBzbyBpcyB1bmNsZWFyIGFuZCBt YXkgYmUgaW5jb21wbGV0ZS4KPiA+IAo+ID4gVGhpcyBwYXRjaCBpcyByZWxhdGVkIHRvIHRoZSBw ZW5kaW5nIHNlcmllcyBbMV0gYW5kIHNpZ25pZmljYW50bHkKPiA+IHJlZHVjZXMgdGhlIGxpa2Vs aWhvb2Qgb2YgWGUgZW50ZXJpbmcgYSBrc3dhcGQgbG9vcCB1bmRlcgo+ID4gZnJhZ21lbnRhdGlv bi4KPiA+IFRoZSBrc3dhcGQg4oaSIHNocmlua2VyIOKGkiBYZSBzaHJpbmtlciDihpIgVFRNIGJh Y2t1cCBwYXRoIGlzIHN0aWxsCj4gPiBleGVyY2lzZWQ7IGhvd2V2ZXIsIHdpdGggdGhpcyBjaGFu Z2UgdGhlIGJhY2t1cCBwYXRoIG5vIGxvbmdlcgo+ID4gd29yc2Vucwo+ID4gZnJhZ21lbnRhdGlv biwgd2hpY2ggcHJldmlvdXNseSBhbXBsaWZpZWQgcmVjbGFpbSBwcmVzc3VyZSBhbmQKPiA+IHJl aW5mb3JjZWQgdGhlIGtzd2FwZCBsb29wLgo+ID4gCj4gPiBOb25ldGhlbGVzcywgdGhlIHBhdGhv bG9naWNhbCBjYXNlIHRoYXQgWzFdIGFpbXMgdG8gYWRkcmVzcyBzdGlsbAo+ID4gZXhpc3RzCj4g PiBhbmQgcmVxdWlyZXMgYSBwcm9wZXIgc29sdXRpb24uIEV2ZW4gd2l0aCB0aGlzIHBhdGNoLCBh IGtzd2FwZCBsb29wCj4gPiBkdWUKPiA+IHRvIHNldmVyZSBmcmFnbWVudGF0aW9uIGNhbiBzdGls bCBiZSB0cmlnZ2VyZWQsIGFsdGhvdWdoIGl0IGlzIG5vdwo+ID4gc3Vic3RhbnRpYWxseSBoYXJk ZXIgdG8gcmVwcm9kdWNlLgo+ID4gCj4gPiBbMV0gaHR0cHM6Ly9wYXRjaHdvcmsuZnJlZWRlc2t0 b3Aub3JnL3Nlcmllcy8xNjUzMzAvCj4gPiAtLS0KPiA+IMKgZHJpdmVycy9ncHUvZHJtL3R0bS90 dG1fcG9vbC5jIHwgNzEgKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0KPiA+IC0tCj4g PiDCoDEgZmlsZSBjaGFuZ2VkLCA1NyBpbnNlcnRpb25zKCspLCAxNCBkZWxldGlvbnMoLSkKPiA+ IAo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX3Bvb2wuYwo+ID4gYi9k cml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9wb29sLmMKPiA+IGluZGV4IDI3OGJiZTdhMTFhZC4uNWVh ZDBhYmE0YmI3IDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fcG9vbC5j Cj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9wb29sLmMKPiA+IEBAIC0xMDM2LDEy ICsxMDM2LDExIEBAIGxvbmcgdHRtX3Bvb2xfYmFja3VwKHN0cnVjdCB0dG1fcG9vbCAqcG9vbCwK PiA+IHN0cnVjdCB0dG1fdHQgKnR0LAo+ID4gwqB7Cj4gPiDCoAlzdHJ1Y3QgZmlsZSAqYmFja3Vw ID0gdHQtPmJhY2t1cDsKPiA+IMKgCXN0cnVjdCBwYWdlICpwYWdlOwo+ID4gLQl1bnNpZ25lZCBs b25nIGhhbmRsZTsKPiA+IMKgCWdmcF90IGFsbG9jX2dmcDsKPiA+IMKgCWdmcF90IGdmcDsKPiA+ IMKgCWludCByZXQgPSAwOwo+ID4gwqAJcGdvZmZfdCBzaHJ1bmtlbiA9IDA7Cj4gPiAtCXBnb2Zm X3QgaSwgbnVtX3BhZ2VzOwo+ID4gKwlwZ29mZl90IGksIG51bV9wYWdlcywgbnBhZ2VzOwo+ID4g wqAKPiA+IMKgCWlmIChXQVJOX09OKHR0bV90dF9pc19iYWNrZWRfdXAodHQpKSkKPiA+IMKgCQly ZXR1cm4gLUVJTlZBTDsKPiA+IEBAIC0xMDk3LDI4ICsxMDk2LDcyIEBAIGxvbmcgdHRtX3Bvb2xf YmFja3VwKHN0cnVjdCB0dG1fcG9vbCAqcG9vbCwKPiA+IHN0cnVjdCB0dG1fdHQgKnR0LAo+ID4g wqAJaWYgKElTX0VOQUJMRUQoQ09ORklHX0ZBVUxUX0lOSkVDVElPTikgJiYKPiA+IHNob3VsZF9m YWlsKCZiYWNrdXBfZmF1bHRfaW5qZWN0LCAxKSkKPiA+IMKgCQludW1fcGFnZXMgPSBESVZfUk9V TkRfVVAobnVtX3BhZ2VzLCAyKTsKPiA+IMKgCj4gPiAtCWZvciAoaSA9IDA7IGkgPCBudW1fcGFn ZXM7ICsraSkgewo+ID4gLQkJczY0IHNoYW5kbGU7Cj4gPiArCWZvciAoaSA9IDA7IGkgPCBudW1f cGFnZXM7IGkgKz0gbnBhZ2VzKSB7Cj4gPiArCQl1bnNpZ25lZCBpbnQgb3JkZXI7Cj4gPiArCQlw Z29mZl90IGo7Cj4gPiDCoAo+ID4gKwkJbnBhZ2VzID0gMTsKPiA+IMKgCQlwYWdlID0gdHQtPnBh Z2VzW2ldOwo+ID4gwqAJCWlmICh1bmxpa2VseSghcGFnZSkpCj4gPiDCoAkJCWNvbnRpbnVlOwo+ ID4gwqAKPiA+IC0JCXR0bV9wb29sX3NwbGl0X2Zvcl9zd2FwKHBvb2wsIHBhZ2UpOwo+ID4gKwkJ LyogQWxyZWFkeS1oYW5kbGVkIGVudHJ5IGZyb20gYSBwcmV2aW91cyBhdHRlbXB0LiAqLwo+ID4g KwkJaWYgKHVubGlrZWx5KHR0bV9iYWNrdXBfcGFnZV9wdHJfaXNfaGFuZGxlKHBhZ2UpKSkKPiA+ ICsJCQljb250aW51ZTsKPiA+IMKgCj4gPiAtCQlzaGFuZGxlID0gdHRtX2JhY2t1cF9iYWNrdXBf cGFnZShiYWNrdXAsIHBhZ2UsCj4gPiBmbGFncy0+d3JpdGViYWNrLCBpLAo+ID4gLQkJCQkJCSBn ZnAsIGFsbG9jX2dmcCk7Cj4gPiAtCQlpZiAoc2hhbmRsZSA8IDApIHsKPiA+IC0JCQkvKiBXZSBh bGxvdyBwYXJ0aWFsbHkgc2hydW5rZW4gdHRzICovCj4gPiAtCQkJcmV0ID0gc2hhbmRsZTsKPiA+ ICsJCW9yZGVyID0gdHRtX3Bvb2xfcGFnZV9vcmRlcihwb29sLCBwYWdlKTsKPiA+ICsJCW5wYWdl cyA9IDFVTCA8PCBvcmRlcjsKPiA+ICsKPiA+ICsJCS8qCj4gPiArCQkgKiBCYWNrIHVwIHRoZSBj b21wb3VuZCBhdG9taWNhbGx5IGF0IGl0cyBuYXRpdmUKPiA+IG9yZGVyLiBJZgo+ID4gKwkJICog ZmF1bHQgaW5qZWN0aW9uIHRydW5jYXRlZCBudW1fcGFnZXMgbWlkLWNvbXBvdW5kLAo+ID4gc2tp cAo+ID4gKwkJICogdGhlIHBhcnRpYWwgdGFpbCByYXRoZXIgdGhhbiBzcGxpdHRpbmcuCj4gPiAr CQkgKi8KPiA+ICsJCWlmICh1bmxpa2VseShpICsgbnBhZ2VzID4gbnVtX3BhZ2VzKSkKPiA+IMKg CQkJYnJlYWs7Cj4gPiArCj4gPiArCQlmb3IgKGogPSAwOyBqIDwgbnBhZ2VzOyArK2opIHsKPiA+ ICsJCQl1bnNpZ25lZCBsb25nIGhhbmRsZTsKPiA+ICsJCQlzNjQgc2hhbmRsZTsKPiA+ICsKPiA+ ICsJCQlpZiAoSVNfRU5BQkxFRChDT05GSUdfRkFVTFRfSU5KRUNUSU9OKSAmJgo+ID4gKwkJCcKg wqDCoCBzaG91bGRfZmFpbCgmYmFja3VwX2ZhdWx0X2luamVjdCwgMSkpCj4gPiArCQkJCXNoYW5k bGUgPSAtMTsKPiA+ICsJCQllbHNlCj4gPiArCQkJCXNoYW5kbGUgPQo+ID4gdHRtX2JhY2t1cF9i YWNrdXBfcGFnZShiYWNrdXAsIHBhZ2UgKyBqLAo+ID4gKwkJCQkJCQkJCj4gPiBmbGFncy0+d3Jp dGViYWNrLAo+ID4gKwkJCQkJCQkJIGkgKwo+ID4gaiwgZ2ZwLAo+ID4gKwkJCQkJCQkJCj4gPiBh bGxvY19nZnApOwo+ID4gKwo+ID4gKwkJCWlmICh1bmxpa2VseShzaGFuZGxlIDwgMCkpIHsKPiA+ ICsJCQkJcGdvZmZfdCBrOwo+ID4gKwo+ID4gKwkJCQlyZXQgPSBzaGFuZGxlOwo+ID4gKwkJCQkv Kgo+ID4gKwkJCQkgKiBSb2xsIGJhY2s6IGRyb3AgdGhlIGhhbmRsZXMgd2UKPiA+IGp1c3Qgd3Jv dGUKPiA+ICsJCQkJICogYW5kIHJlc3RvcmUgdGhlIG9yaWdpbmFsIHBhZ2UKPiA+IHBvaW50ZXJz IHNvCj4gPiArCQkJCSAqIHRoZSBjb21wb3VuZCByZW1haW5zIGludGFjdCBhbmQKPiA+IG1heSBi ZQo+ID4gKwkJCQkgKiByZXRyaWVkIGxhdGVyLgo+ID4gKwkJCQkgKi8KPiA+ICsJCQkJZm9yIChr ID0gMDsgayA8IGo7ICsraykgewo+ID4gKwkJCQkJaGFuZGxlID0KPiA+IHR0bV9iYWNrdXBfcGFn ZV9wdHJfdG9faGFuZGxlKHR0LT5wYWdlc1tpICsga10pOwo+ID4gKwkJCQkJdHRtX2JhY2t1cF9k cm9wKGJhY2t1cCwKPiA+IGhhbmRsZSk7Cj4gPiArCQkJCQl0dC0+cGFnZXNbaSArIGtdID0gcGFn ZSArIGs7Cj4gPiArCQkJCX0KPiA+ICsKPiA+ICsJCQkJZ290byBvdXQ7Cj4gPiArCQkJfQo+ID4g KwkJCWhhbmRsZSA9IHNoYW5kbGU7Cj4gPiArCQkJdHQtPnBhZ2VzW2kgKyBqXSA9Cj4gPiB0dG1f YmFja3VwX2hhbmRsZV90b19wYWdlX3B0cihzaGFuZGxlKTsKPiA+IMKgCQl9Cj4gPiAtCQloYW5k bGUgPSBzaGFuZGxlOwo+ID4gLQkJdHQtPnBhZ2VzW2ldID0KPiA+IHR0bV9iYWNrdXBfaGFuZGxl X3RvX3BhZ2VfcHRyKGhhbmRsZSk7Cj4gPiAtCQlfX2ZyZWVfcGFnZXNfZ3B1X2FjY291bnQocGFn ZSwgMCwgZmFsc2UpOwo+ID4gLQkJc2hydW5rZW4rKzsKPiA+ICsKPiA+ICsJCS8qIENvbXBvdW5k IGZ1bGx5IGJhY2tlZCB1cDsgZnJlZSBhdCBuYXRpdmUgb3JkZXIuCj4gPiAqLwo+ID4gKwkJcGFn ZS0+cHJpdmF0ZSA9IDA7Cj4gPiArCQlfX2ZyZWVfcGFnZXNfZ3B1X2FjY291bnQocGFnZSwgb3Jk ZXIsIGZhbHNlKTsKPiA+ICsJCXNocnVua2VuICs9IG5wYWdlczsKPiA+IMKgCX0KPiA+IMKgCj4g PiArb3V0Ogo+ID4gwqAJcmV0dXJuIHNocnVua2VuID8gc2hydW5rZW4gOiByZXQ7Cj4gPiDCoH0K PiA+IMKgCg==