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 866F1CD484A for ; Mon, 11 May 2026 13:50:56 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id CC70410E72E; Mon, 11 May 2026 13:50:55 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (1024-bit key; unprotected) header.d=amd.com header.i=@amd.com header.b="mDNwPGMv"; dkim-atps=neutral Received: from CO1PR03CU002.outbound.protection.outlook.com (mail-westus2azon11010067.outbound.protection.outlook.com [52.101.46.67]) by gabe.freedesktop.org (Postfix) with ESMTPS id BE0D410E720; Mon, 11 May 2026 13:50:53 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=VYvCyynp5J9z8E0I2+7+ud/0OcWstIsx4WQaZ8s1OyM/IvKMyzibD1WNSy7L9dKyvj4GLotibp5qIhZoZ6ZqkYJfcXBJclrjfMUg1t5H81OoSyYYWgcdaUv+XUu4EKfPB74zM2fET8XqN2x6lLcYnvskGU5/AAAldpBASW4oswxC2+hyu8285JfSbaybgdvrHHAU5SJsOfxA2oLhvEuYMxAIoUkbUHfeuwf75Kctqi9LDnFfrtHFrBEBOFigppGBSqcmjs2gLRhi4zqSrnVeknMHpHY4XgaWmmX2RMegF/HyeXwl2zaOtyvUH1yAjN5EOorYIG3Eo4DHHoatLO5AnQ== 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=1iR2rAmu+w8RlQ5jNaAS5awBCKlvOUQZh5ZdikzOmnE=; b=qI14jLfSRl7cZq0ECtrrmGQkFNk5Sm8cyD0993x4W+Elo6q5J0WHuVbBuQRuBIWDoZ9f2OdDCV0UBgTzHoU3hobQKW5VMTzmW+R2tz320/DbAOUdYLY9praU2G44VLE0M6tqz+CHhYkzd6JPmfy6qM8Q+bDeqBb60WYyxxJ93cbXBqWpkeytcp+D7cHnTB9kYvbdR9Im/phNZOitYrcPBGYo731W0qX134D5QOZJpymFK1lvMvkSJsFFCsjeiMaHTT6MzF0dptAidMHlXYHZADjcbizKt8rNELTPSK33uYO0Ez5yxq8W9lswaFjFjWQ11e9uZAmHsf6xZKHE6QZsAA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=1iR2rAmu+w8RlQ5jNaAS5awBCKlvOUQZh5ZdikzOmnE=; b=mDNwPGMvqAlQL4ooI5qzEFDo+E6bRenvHHTt2Iy5Z7TGFiY7iVNm5nc+B3yxJ8X6cv9LjLGJiA4OYs93qovyOXEKjL/R/S1KwLzIiiD0SaH6k3tge+BGudKjzpaZMTdzhuMR1+b06qSqIWlUZLzhspWwaoozUJvh1ewb/fRdd74= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=amd.com; Received: from SA0PR12MB7091.namprd12.prod.outlook.com (2603:10b6:806:2d5::17) by SA3PR12MB8802.namprd12.prod.outlook.com (2603:10b6:806:314::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9891.23; Mon, 11 May 2026 13:50:47 +0000 Received: from SA0PR12MB7091.namprd12.prod.outlook.com ([fe80::ec33:1213:cfd8:63bc]) by SA0PR12MB7091.namprd12.prod.outlook.com ([fe80::ec33:1213:cfd8:63bc%3]) with mapi id 15.20.9891.021; Mon, 11 May 2026 13:50:47 +0000 Message-ID: Date: Mon, 11 May 2026 19:20:37 +0530 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v6] drm/amd/pm: Use guard(mutex) instead of manual lock+unlock To: Andre Jun Hirata , kenneth.feng@amd.com, alexander.deucher@amd.com, christian.koenig@amd.com, airlied@gmail.com, simona@ffwll.ch Cc: Gabriel Dimant , Guilherme Gabriel , Yang Wang , amd-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org References: <20260511124240.8484-1-andrejhirata@usp.br> Content-Language: en-US From: "Lazar, Lijo" In-Reply-To: <20260511124240.8484-1-andrejhirata@usp.br> Content-Type: text/plain; charset="utf-8"; format="flowed" Content-Transfer-Encoding: base64 X-ClientProxiedBy: MA1PR01CA0164.INDPRD01.PROD.OUTLOOK.COM (2603:1096:a00:71::34) To SA0PR12MB7091.namprd12.prod.outlook.com (2603:10b6:806:2d5::17) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SA0PR12MB7091:EE_|SA3PR12MB8802:EE_ X-MS-Office365-Filtering-Correlation-Id: 42bf180d-4cc2-45d9-6257-08deaf644dbd X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|366016|1800799024|376014|22082099003|18002099003|56012099003|11063799003; X-Microsoft-Antispam-Message-Info: /jNTwDjoJew6xs83k9D3Z8gnMXw3u2pOCZ0Rh9YFUNi1GCmn6C1kkqq8TkVAGs6fmXZm2bEeP1ir7doeFumL+oTVkn6ruhxenCogwKUH2UXgVRg0qjaqQGr0AAOOjeDCUsSnHbmyJvlQ/fSUVaDp7rzRKGQ4ESNY1bDRiKZrcK6zm+8oYJKmrbi3q66wxvrttYoH5/DRVZ/VHyNT33iIVgufYf9Xh3WEB/G5Uax0DYHu1htSYfhFxtRvISBwe62/a6w15T9rkdQTocnLA7eX0WT36dXfW5MF+017mnq6SUkkY4XtSRK2CFLa8c3280Mx7xJcTLvbamyTs/JIq5NITj63O9+/pvPCviwV/P2Wj8ytqfXA6Xg9wODW9Jrf2/dCMW4EnKdrqW9X9MO4RrHN3MjKpZ9CKuCDczqN1S4MMApRL5DNQk3OUO7lANeABoyaH4Hk6r7nes3OjKNjzysd65NtmvyTIqQKsMvomUkCTzMGr+my4/j/FFlSNB9puBlzCquLHqSrYE3/MuX2GS4e7VhJSeNXnA4eIoeMv2laFnOnSLt4tJaEK5/kXUbWEXy4O70g3eUCU6yDPQHVs7wDybJl2RlDP1IydmtQrfE5ISpqJGSkEzONbGd61c8m1xqwz3WtUltRge78xw8xCsXcGJ5ZPCIYxKogZ6hEQDw8h+GOzA+Y/iDN3h83LJe2zYT3 X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SA0PR12MB7091.namprd12.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(366016)(1800799024)(376014)(22082099003)(18002099003)(56012099003)(11063799003); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?RFc3VW80TVlqQ0IzRjI1WVZRL1dlK2wrdTRVZlg3VXRhQlVoZlpOUUdEMEhW?= =?utf-8?B?eENhdUdrSm9OaUY2V1RoSTNhK3phK2dhVjJKTFg0T2JvaWVTV0MxUHZHUDk4?= =?utf-8?B?R284TXdIaFd6SkF0ZDBrb01KL2VPM0tObWVjem1jeHZNWXhhelZZNUtRem91?= =?utf-8?B?TS8wL2NsbEtoMUkzMFM3bHZJelBUQjRrWlVhWHN0V2dPaG9IK3hqK0lRcmFh?= =?utf-8?B?L0tvQ2RkMGRIaXM0RjVyZHV0dzdjME11RHhQYVhXbTRiWlFmODNuRWJCTHFJ?= =?utf-8?B?eEYwVmZUaFo3c1hwNU5KWDI2dGU0VmpmNjhjSmNoTEdPbXdhVGRGRnQ2TWJ4?= =?utf-8?B?cGJDMUgweXlzWWNGTDVyRkMzVnFiak9NSkd2eW4zVXlsMmMwRlZsVG9SRE16?= =?utf-8?B?TVJsUlNvNUFsS1F1Q01ZaGE3d256U3RoMjloUUFXdWZYU0xMVVpGbm1kc2c2?= =?utf-8?B?ektWS25CUk9HR3FQTGM0OG1LS25yMVZQbjJBaTFZMGM1WEt5anQ5UWtjd2Jo?= =?utf-8?B?d2xPZktOdFluLzE1c1RueHlmOFRLK1VWMmg1ZUhJWGRJVGw4cUdUUUdDaE5S?= =?utf-8?B?ZE5pVDhULzBSNkZ2dUNhM1c1YTZISlVZWG1wWjZlOVRoQWMrRnp0ZkF3S2Ur?= =?utf-8?B?cnUxbW1RSDhUTTJrK0hJOVVnZTNtV24xaW92QnJGSE9VZnAzc3ZIc2Uyc3dl?= =?utf-8?B?YU93QkVodjhTcEVkdmhSVDdDb3dGcjRSd0tuZEtTSG1kb1B1dEp2NDRBcm02?= =?utf-8?B?UXNQd2d2djBYN3VoVTJtLzdUakI1aDlyaDZxR0pySEh5SS9NdzkxOGNrK0x1?= =?utf-8?B?eWRCbTlySWRkeDJGcjk3REJtMlp0VUQ1ZnJoN0luMFl0VHpMejQ1cVU3YjRp?= =?utf-8?B?bFZwbWlEei9LUkwyNWQzUkU4WWhNanRNbVIzR1J3OVIxUllLR3A4MlVhY0pW?= =?utf-8?B?d2JzSisvNGY5SGpvbjZ0MWtMS2p2RkpXcEQyVHdGUDBhS3lNT2tlajlHeFFi?= =?utf-8?B?YzRxVTE3UXB0aWFTdkJkVHJvcjlDK05rL0Y4NUJjd2dVcm1wRTY5czRZdmpR?= =?utf-8?B?Wm9NazVwU3pnMTBkdnFKZmhmRVpoQi9teHNSWHE0cUI2RXIwd3MycFBFZzBy?= =?utf-8?B?RmY2VmsxOU0ydjV4VXVXZkRHbHNOR3R0c0pQODJEdk9hR0s2L0pxQ05hVUlP?= =?utf-8?B?eEt5bkgvRnZsdWpHTHJoQXAxY1ZUZVgvTlp2d2JsNlh6TXZ1djk2cFAreklM?= =?utf-8?B?S0IyZVppUXRaVytUaFZUdGFxR2RLeTZERTNLV3hxeVU3SVpicjAwcUd5dGQw?= =?utf-8?B?MVV4dk05c0VIcVNETDJKOFUvMzJaL3F3dTdCcS9yNlFFOVN2WHJMQ0dKL0Q0?= =?utf-8?B?UmNrYklWSjgya2NnaFlaeW5QVUtFZE5jWUZrTitnMk1IWUJoZUNhcmdwRTdy?= =?utf-8?B?WEN3UGk0ZGxOOXRDTHdyTU1zZC9QVXFuek1IbkEvaHFCdnloYjcrQ25BckhE?= =?utf-8?B?a05iL205S2VLMEMzSWJwaThmZHc1ak1KVVVQOStJZlNHZDdEUit6d1l5ekZp?= =?utf-8?B?ZGd0R2Y0YldkdnZhVndFZjg0RXdtaEk3c3dSRWVyWm5pNml3Q0RGVERyczNv?= =?utf-8?B?Zkh0ZG9NWkd3Zk1nczBRR0dHZUJJWUplV3M4NUZkamJFSTc5MHF1YkVFR3Ay?= =?utf-8?B?eitMZFhzeXd2eGNLVkJPVyt1OEVHRXY0Z2ZqUWE0RWV4OUJEaTNPZjh1ZWRS?= =?utf-8?B?TzVJUlNhV2JUNnNHZGZUazNuVzBmVkhLYTRBN1VWcWpWU0JTQWtJaVZqMlRY?= =?utf-8?B?dkt2VlBhajl4ZXJNVzZ3bDdHcmJkeExJRWIvanF1aVdtVVpnSStRaFUrSmVl?= =?utf-8?B?dXA2L1pod09yZGJ3VjR3cENKaU0ybEcrUGZ0OWptb1AzYjRkVEFiVWExa3M0?= =?utf-8?B?OERPejdPZEJESmo1RzFLWGRhMXdnTmozbWhVTTBRb0E3WWhiTU1MdUY2WVhV?= =?utf-8?B?VnZNNkUyd3hnajRLUTBaVW01eWZZeTl4RXdGYVk3dmRTdUoraU1GMFlPc0RT?= =?utf-8?B?Z2Z5QWR6Sm9PYVlJRGNmQWtWTXNzYjdTeTlheVRaRmNhb3BDZzRlZHB3T1hT?= =?utf-8?B?MzFZZlFBbWY4c09PZjVOSkNIL20rVlJDUlI2aTFhdGxERWI0Wm12WlFnVEYv?= =?utf-8?B?VDRSQVVYR1pPZHJGakFKdGNKUTdZeWRaVFMwZWlPVHh2ZCtmM3VtTGorS2xq?= =?utf-8?B?SW5kc0F2dE9HS05UQk01QUxvREVUd3BYcXUyTXlnbEJ3cEVwaWM2MHFRWGRZ?= =?utf-8?B?dkZMY2hHVnN2VzRQbDFRUHNtVmFQbnRxVE5ySTFQd0NBcUdqeVlBQT09?= X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 42bf180d-4cc2-45d9-6257-08deaf644dbd X-MS-Exchange-CrossTenant-AuthSource: SA0PR12MB7091.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 May 2026 13:50:47.4086 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 9jJJvVB2+mhzU0DByiQUc0DWgGegMzsEImrCgDxZPggT+6+LOlqxUUaszRVb+DRJ X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA3PR12MB8802 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" CgpPbiAxMS1NYXktMjYgNjoxMiBQTSwgQW5kcmUgSnVuIEhpcmF0YSB3cm90ZToKPiBVc2UgZ3Vh cmQoKSBhbmQgc2NvcGVkX2d1YXJkKCkgZm9yIGhhbmRsaW5nIG11dGV4IGxvY2sgaW5zdGVhZCBv Zgo+IG1hbnVhbGx5IGxvY2tpbmcgYW5kIHVubG9ja2luZyB0aGUgbXV0ZXguIFRoaXMgcHJldmVu dHMgZm9yZ290dGVuCj4gbG9ja3MgZHVlIHRvIGVhcmx5IGV4aXRzIGFuZCByZW1vdmVzIHRoZSBu ZWVkIG9mIGdvdG9zLgo+IAo+IFNpZ25lZC1vZmYtYnk6IEFuZHJlIEp1biBIaXJhdGEgPGFuZHJl amhpcmF0YUB1c3AuYnI+Cj4gQ28tZGV2ZWxvcGVkLWJ5OiBHYWJyaWVsIERpbWFudCA8Z2Ficmll bC5kaW1hbnRAdXNwLmJyPgo+IFNpZ25lZC1vZmYtYnk6IEdhYnJpZWwgRGltYW50IDxnYWJyaWVs LmRpbWFudEB1c3AuYnI+Cj4gQ28tZGV2ZWxvcGVkLWJ5OiBHdWlsaGVybWUgR2FicmllbCA8Z3Vp bGhlcm1lc2FuZ2FicmllbEB1c3AuYnI+Cj4gU2lnbmVkLW9mZi1ieTogR3VpbGhlcm1lIEdhYnJp ZWwgPGd1aWxoZXJtZXNhbmdhYnJpZWxAdXNwLmJyPgo+IAo+IFJldmlld2VkLWJ5OiBDaHJpc3Rp YW4gS8O2bmlnIDxjaHJpc3RpYW4ua29lbmlnQGFtZC5jb20+Cj4gUmV2aWV3ZWQtYnk6IFlhbmcg V2FuZyA8a2V2aW55YW5nLndhbmdAYW1kLmNvbT4KPiAtLS0KPiB2MjogaW5jb3Jwb3JhdGUgQ2hy aXN0aWFuIEvDtm5pZydzIHN1Z2dlc3Rpb25zOgo+ICAgIC0gdXNlIHJldHVybiBmKCkgZGlyZWN0 bHkgaW5zdGVhZCBvZiByZXQgPSBmKCk7IHJldHVybiByZXQ7Cj4gICAgLSB1c2UgZWFybHkgcmV0 dXJuIHBhdHRlcm4gYmVmb3JlIGd1YXJkKCkgd2hlcmUgYXBwbGljYWJsZQo+IAo+IHYzOiBmaXgg c3R5bGUgbml0cyBwb2ludGVkIGJ5IENocmlzdGlhbiBLw7ZuaWc6Cj4gICAgLSBkcm9wIHN1cGVy Zmx1b3VzIHJldCBpbml0aWFsaXphdGlvbiBpbiBzZXRfZ2Z4X3Bvd2VyX3VwX2J5X2ltdQo+ICAg IC0gZHJvcCB1bm5lY2Vzc2FyeSBicmFjZXMgYXJvdW5kIHNpbmdsZS1saW5lIHNjb3BlZF9ndWFy ZAo+IAo+IHY0Ogo+ICAgLSBmaXggYnVpbGQgZXJyb3JzIGludHJvZHVjZWQgaW4gdjMKPiAgIC0g Zml4IGluY29ycmVjdCBpc19zdXBwb3J0X3N3X3NtdSgpIGNvbmRpdGlvbgo+ICAgLSByZW1vdmUg YWNjaWRlbnRhbCAicmV0dXJuID0iIHR5cG9zCj4gCj4gdjU6IGZpeCBpbmNvcnJlY3QgZGlmZiBp biB2NAo+IAo+IHY2OiBmaXggbWlzc2luZyBzZW1pY29sb24gaW4gc211X21vZGUxX3Jlc2V0X2lz X3N1cHBvcnQoKSByZXR1cm4gc3RhdGVtZW50Cj4gCgpUaGFua3MgZm9yIHRoZSBjaGFuZ2VzLiBB IGZldyBtb3JlIG5pdHMgbm90ZWQgYmVsb3cuIFdpdGggdGhvc2UgYWRkcmVzc2VkLAoJUmV2aWV3 ZWQtYnk6IExpam8gTGF6YXIgPGxpam8ubGF6YXJAYW1kLmNvbT4KCj4gICBkcml2ZXJzL2dwdS9k cm0vYW1kL3BtL2FtZGdwdV9kcG0uYyB8IDg2OCArKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0t Cj4gICAxIGZpbGUgY2hhbmdlZCwgMjYwIGluc2VydGlvbnMoKyksIDYwOCBkZWxldGlvbnMoLSkK PiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9wbS9hbWRncHVfZHBtLmMgYi9k cml2ZXJzL2dwdS9kcm0vYW1kL3BtL2FtZGdwdV9kcG0uYwo+IGluZGV4IGZlYWRmNjA0Yi4uZTdm ZmIyYjFiIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvcG0vYW1kZ3B1X2RwbS5j Cj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9wbS9hbWRncHVfZHBtLmMKPiBAQCAtMzAsNiAr MzAsNyBAQAo+ICAgI2luY2x1ZGUgImFtZF9wY2llLmgiCj4gICAjaW5jbHVkZSAiYW1kZ3B1X2Rp c3BsYXkuaCIKPiAgICNpbmNsdWRlICJod21nci5oIgo+ICsjaW5jbHVkZSA8bGludXgvY2xlYW51 cC5oPgo+ICAgI2luY2x1ZGUgPGxpbnV4L3Bvd2VyX3N1cHBseS5oPgo+ICAgI2luY2x1ZGUgImFt ZGdwdV9zbXUuaCIKPiAgIAo+IEBAIC00MSwzMyArNDIsMjUgQEAKPiAgIGludCBhbWRncHVfZHBt X2dldF9zY2xrKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LCBib29sIGxvdykKPiAgIHsKPiAg IAljb25zdCBzdHJ1Y3QgYW1kX3BtX2Z1bmNzICpwcF9mdW5jcyA9IGFkZXYtPnBvd2VycGxheS5w cF9mdW5jczsKPiAtCWludCByZXQgPSAwOwo+ICAgCj4gICAJaWYgKCFwcF9mdW5jcy0+Z2V0X3Nj bGspCj4gICAJCXJldHVybiAwOwo+ICAgCj4gLQltdXRleF9sb2NrKCZhZGV2LT5wbS5tdXRleCk7 Cj4gLQlyZXQgPSBwcF9mdW5jcy0+Z2V0X3NjbGsoKGFkZXYpLT5wb3dlcnBsYXkucHBfaGFuZGxl LAo+ICsJZ3VhcmQobXV0ZXgpKCZhZGV2LT5wbS5tdXRleCk7Cj4gKwlyZXR1cm4gcHBfZnVuY3Mt PmdldF9zY2xrKChhZGV2KS0+cG93ZXJwbGF5LnBwX2hhbmRsZSwKPiAgIAkJCQkgbG93KTsKPiAt CW11dGV4X3VubG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+IC0KPiAtCXJldHVybiByZXQ7Cj4gICB9 Cj4gICAKPiAgIGludCBhbWRncHVfZHBtX2dldF9tY2xrKHN0cnVjdCBhbWRncHVfZGV2aWNlICph ZGV2LCBib29sIGxvdykKPiAgIHsKPiAgIAljb25zdCBzdHJ1Y3QgYW1kX3BtX2Z1bmNzICpwcF9m dW5jcyA9IGFkZXYtPnBvd2VycGxheS5wcF9mdW5jczsKPiAtCWludCByZXQgPSAwOwo+ICAgCj4g ICAJaWYgKCFwcF9mdW5jcy0+Z2V0X21jbGspCj4gICAJCXJldHVybiAwOwo+ICAgCj4gLQltdXRl eF9sb2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4gLQlyZXQgPSBwcF9mdW5jcy0+Z2V0X21jbGsoKGFk ZXYpLT5wb3dlcnBsYXkucHBfaGFuZGxlLAo+ICsJZ3VhcmQobXV0ZXgpKCZhZGV2LT5wbS5tdXRl eCk7Cj4gKwlyZXR1cm4gcHBfZnVuY3MtPmdldF9tY2xrKChhZGV2KS0+cG93ZXJwbGF5LnBwX2hh bmRsZSwKPiAgIAkJCQkgbG93KTsKPiAtCW11dGV4X3VubG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+ IC0KPiAtCXJldHVybiByZXQ7Cj4gICB9Cj4gICAKPiAgIGludCBhbWRncHVfZHBtX3NldF9wb3dl cmdhdGluZ19ieV9zbXUoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4gQEAgLTgwLDEzICs3 MywxMiBAQCBpbnQgYW1kZ3B1X2RwbV9zZXRfcG93ZXJnYXRpbmdfYnlfc211KHN0cnVjdCBhbWRn cHVfZGV2aWNlICphZGV2LAo+ICAgCWVudW0gaXBfcG93ZXJfc3RhdGUgcHdyX3N0YXRlID0gZ2F0 ZSA/IFBPV0VSX1NUQVRFX09GRiA6IFBPV0VSX1NUQVRFX09OOwo+ICAgCWJvb2wgaXNfdmNuID0g YmxvY2tfdHlwZSA9PSBBTURfSVBfQkxPQ0tfVFlQRV9WQ047Cj4gICAKPiAtCW11dGV4X2xvY2so JmFkZXYtPnBtLm11dGV4KTsKPiAtCj4gKwlndWFyZChtdXRleCkoJmFkZXYtPnBtLm11dGV4KTsK PiAgIAlpZiAoYXRvbWljX3JlYWQoJmFkZXYtPnBtLnB3cl9zdGF0ZVtibG9ja190eXBlXSkgPT0g cHdyX3N0YXRlICYmCj4gICAJCQkoIWlzX3ZjbiB8fCBhZGV2LT52Y24ubnVtX3Zjbl9pbnN0ID09 IDEpKSB7Cj4gICAJCWRldl9kYmcoYWRldi0+ZGV2LCAiSVAgYmxvY2slZCBhbHJlYWR5IGluIHRo ZSB0YXJnZXQgJXMgc3RhdGUhIiwKPiAgIAkJCQlibG9ja190eXBlLCBnYXRlID8gImdhdGUiIDog InVuZ2F0ZSIpOwo+IC0JCWdvdG8gb3V0X3VubG9jazsKPiArCQlyZXR1cm4gcmV0Owo+ICAgCX0K PiAgIAo+ICAgCXN3aXRjaCAoYmxvY2tfdHlwZSkgewo+IEBAIC0xMTUsMjAgKzEwNywxNiBAQCBp bnQgYW1kZ3B1X2RwbV9zZXRfcG93ZXJnYXRpbmdfYnlfc211KHN0cnVjdCBhbWRncHVfZGV2aWNl ICphZGV2LAo+ICAgCWlmICghcmV0KQo+ICAgCQlhdG9taWNfc2V0KCZhZGV2LT5wbS5wd3Jfc3Rh dGVbYmxvY2tfdHlwZV0sIHB3cl9zdGF0ZSk7Cj4gICAKPiAtb3V0X3VubG9jazoKPiAtCW11dGV4 X3VubG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+IC0KPiAgIAlyZXR1cm4gcmV0Owo+ICAgfQo+ICAg Cj4gICBpbnQgYW1kZ3B1X2RwbV9zZXRfZ2Z4X3Bvd2VyX3VwX2J5X2ltdShzdHJ1Y3QgYW1kZ3B1 X2RldmljZSAqYWRldikKPiAgIHsKPiAgIAlzdHJ1Y3Qgc211X2NvbnRleHQgKnNtdSA9IGFkZXYt PnBvd2VycGxheS5wcF9oYW5kbGU7Cj4gLQlpbnQgcmV0ID0gLUVPUE5PVFNVUFA7Cj4gKwlpbnQg cmV0Owo+ICAgCj4gLQltdXRleF9sb2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4gLQlyZXQgPSBzbXVf c2V0X2dmeF9wb3dlcl91cF9ieV9pbXUoc211KTsKPiAtCW11dGV4X3VubG9jaygmYWRldi0+cG0u bXV0ZXgpOwo+ICsJc2NvcGVkX2d1YXJkKG11dGV4LCAmYWRldi0+cG0ubXV0ZXgpCj4gKwkJcmV0 ID0gc211X3NldF9nZnhfcG93ZXJfdXBfYnlfaW11KHNtdSk7Cj4gICAKPiAgIAltc2xlZXAoMTAp Owo+ICAgCj4gQEAgLTEzOSw0NCArMTI3LDMxIEBAIGludCBhbWRncHVfZHBtX2JhY29fZW50ZXIo c3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCj4gICB7Cj4gICAJY29uc3Qgc3RydWN0IGFtZF9w bV9mdW5jcyAqcHBfZnVuY3MgPSBhZGV2LT5wb3dlcnBsYXkucHBfZnVuY3M7Cj4gICAJdm9pZCAq cHBfaGFuZGxlID0gYWRldi0+cG93ZXJwbGF5LnBwX2hhbmRsZTsKPiAtCWludCByZXQgPSAwOwo+ ICAgCj4gICAJaWYgKCFwcF9mdW5jcyB8fCAhcHBfZnVuY3MtPnNldF9hc2ljX2JhY29fc3RhdGUp Cj4gICAJCXJldHVybiAtRU5PRU5UOwo+ICAgCj4gLQltdXRleF9sb2NrKCZhZGV2LT5wbS5tdXRl eCk7Cj4gLQo+ICsJZ3VhcmQobXV0ZXgpKCZhZGV2LT5wbS5tdXRleCk7Cj4gICAJLyogZW50ZXIg QkFDTyBzdGF0ZSAqLwo+IC0JcmV0ID0gcHBfZnVuY3MtPnNldF9hc2ljX2JhY29fc3RhdGUocHBf aGFuZGxlLCAxKTsKPiAtCj4gLQltdXRleF91bmxvY2soJmFkZXYtPnBtLm11dGV4KTsKPiAtCj4g LQlyZXR1cm4gcmV0Owo+ICsJcmV0dXJuIHBwX2Z1bmNzLT5zZXRfYXNpY19iYWNvX3N0YXRlKHBw X2hhbmRsZSwgMSk7Cj4gICB9Cj4gICAKPiAgIGludCBhbWRncHVfZHBtX2JhY29fZXhpdChzdHJ1 Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKPiAgIHsKPiAgIAljb25zdCBzdHJ1Y3QgYW1kX3BtX2Z1 bmNzICpwcF9mdW5jcyA9IGFkZXYtPnBvd2VycGxheS5wcF9mdW5jczsKPiAgIAl2b2lkICpwcF9o YW5kbGUgPSBhZGV2LT5wb3dlcnBsYXkucHBfaGFuZGxlOwo+IC0JaW50IHJldCA9IDA7Cj4gICAK PiAgIAlpZiAoIXBwX2Z1bmNzIHx8ICFwcF9mdW5jcy0+c2V0X2FzaWNfYmFjb19zdGF0ZSkKPiAg IAkJcmV0dXJuIC1FTk9FTlQ7Cj4gICAKPiAtCW11dGV4X2xvY2soJmFkZXYtPnBtLm11dGV4KTsK PiAtCj4gKwlndWFyZChtdXRleCkoJmFkZXYtPnBtLm11dGV4KTsKPiAgIAkvKiBleGl0IEJBQ08g c3RhdGUgKi8KPiAtCXJldCA9IHBwX2Z1bmNzLT5zZXRfYXNpY19iYWNvX3N0YXRlKHBwX2hhbmRs ZSwgMCk7Cj4gLQo+IC0JbXV0ZXhfdW5sb2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4gLQo+IC0JcmV0 dXJuIHJldDsKPiArCXJldHVybiBwcF9mdW5jcy0+c2V0X2FzaWNfYmFjb19zdGF0ZShwcF9oYW5k bGUsIDApOwo+ICAgfQo+ICAgCj4gICBpbnQgYW1kZ3B1X2RwbV9zZXRfbXAxX3N0YXRlKHN0cnVj dCBhbWRncHVfZGV2aWNlICphZGV2LAo+ICAgCQkJICAgICBlbnVtIHBwX21wMV9zdGF0ZSBtcDFf c3RhdGUpCj4gICB7Cj4gLQlpbnQgcmV0ID0gMDsKPiAgIAljb25zdCBzdHJ1Y3QgYW1kX3BtX2Z1 bmNzICpwcF9mdW5jcyA9IGFkZXYtPnBvd2VycGxheS5wcF9mdW5jczsKPiAgIAo+ICAgCWlmICht cDFfc3RhdGUgPT0gUFBfTVAxX1NUQVRFX0ZMUikgewo+IEBAIC0xODQsMjMgKzE1OSwxOSBAQCBp bnQgYW1kZ3B1X2RwbV9zZXRfbXAxX3N0YXRlKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAo+ ICAgCQlpZiAoYW1kZ3B1X3NyaW92X3ZmKGFkZXYpKQo+ICAgCQkJYWRldi0+cG0uZHBtX2VuYWJs ZWQgPSBmYWxzZTsKPiAgIAl9IGVsc2UgaWYgKHBwX2Z1bmNzICYmIHBwX2Z1bmNzLT5zZXRfbXAx X3N0YXRlKSB7Cj4gLQkJbXV0ZXhfbG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+IC0KPiAtCQlyZXQg PSBwcF9mdW5jcy0+c2V0X21wMV9zdGF0ZSgKPiArCQlndWFyZChtdXRleCkoJmFkZXYtPnBtLm11 dGV4KTsKPiArCQlyZXR1cm4gcHBfZnVuY3MtPnNldF9tcDFfc3RhdGUoCj4gICAJCQkJYWRldi0+ cG93ZXJwbGF5LnBwX2hhbmRsZSwKPiAgIAkJCQltcDFfc3RhdGUpOwo+IC0KPiAtCQltdXRleF91 bmxvY2soJmFkZXYtPnBtLm11dGV4KTsKPiAgIAl9Cj4gICAKPiAtCXJldHVybiByZXQ7Cj4gKwly ZXR1cm4gMDsKPiAgIH0KPiAgIAo+ICAgaW50IGFtZGdwdV9kcG1faXNfYmFjb19zdXBwb3J0ZWQo c3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCj4gICB7Cj4gICAJY29uc3Qgc3RydWN0IGFtZF9w bV9mdW5jcyAqcHBfZnVuY3MgPSBhZGV2LT5wb3dlcnBsYXkucHBfZnVuY3M7Cj4gICAJdm9pZCAq cHBfaGFuZGxlID0gYWRldi0+cG93ZXJwbGF5LnBwX2hhbmRsZTsKPiAtCWludCByZXQ7Cj4gICAK PiAgIAlpZiAoIXBwX2Z1bmNzIHx8ICFwcF9mdW5jcy0+Z2V0X2FzaWNfYmFjb19jYXBhYmlsaXR5 KQo+ICAgCQlyZXR1cm4gMDsKPiBAQCAtMjE2LDQ5ICsxODcsMzIgQEAgaW50IGFtZGdwdV9kcG1f aXNfYmFjb19zdXBwb3J0ZWQoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCj4gICAJaWYgKGFk ZXYtPmluX3MzKQo+ICAgCQlyZXR1cm4gMDsKPiAgIAo+IC0JbXV0ZXhfbG9jaygmYWRldi0+cG0u bXV0ZXgpOwo+IC0KPiAtCXJldCA9IHBwX2Z1bmNzLT5nZXRfYXNpY19iYWNvX2NhcGFiaWxpdHko cHBfaGFuZGxlKTsKPiAtCj4gLQltdXRleF91bmxvY2soJmFkZXYtPnBtLm11dGV4KTsKPiAtCj4g LQlyZXR1cm4gcmV0Owo+ICsJZ3VhcmQobXV0ZXgpKCZhZGV2LT5wbS5tdXRleCk7Cj4gKwlyZXR1 cm4gcHBfZnVuY3MtPmdldF9hc2ljX2JhY29fY2FwYWJpbGl0eShwcF9oYW5kbGUpOwo+ICAgfQo+ ICAgCj4gICBpbnQgYW1kZ3B1X2RwbV9tb2RlMl9yZXNldChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAq YWRldikKPiAgIHsKPiAgIAljb25zdCBzdHJ1Y3QgYW1kX3BtX2Z1bmNzICpwcF9mdW5jcyA9IGFk ZXYtPnBvd2VycGxheS5wcF9mdW5jczsKPiAgIAl2b2lkICpwcF9oYW5kbGUgPSBhZGV2LT5wb3dl cnBsYXkucHBfaGFuZGxlOwo+IC0JaW50IHJldCA9IDA7Cj4gICAKPiAgIAlpZiAoIXBwX2Z1bmNz IHx8ICFwcF9mdW5jcy0+YXNpY19yZXNldF9tb2RlXzIpCj4gICAJCXJldHVybiAtRU5PRU5UOwo+ ICAgCj4gLQltdXRleF9sb2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4gLQo+IC0JcmV0ID0gcHBfZnVu Y3MtPmFzaWNfcmVzZXRfbW9kZV8yKHBwX2hhbmRsZSk7Cj4gLQo+IC0JbXV0ZXhfdW5sb2NrKCZh ZGV2LT5wbS5tdXRleCk7Cj4gLQo+IC0JcmV0dXJuIHJldDsKPiArCWd1YXJkKG11dGV4KSgmYWRl di0+cG0ubXV0ZXgpOwo+ICsJcmV0dXJuIHBwX2Z1bmNzLT5hc2ljX3Jlc2V0X21vZGVfMihwcF9o YW5kbGUpOwo+ICAgfQo+ICAgCj4gICBpbnQgYW1kZ3B1X2RwbV9lbmFibGVfZ2Z4X2ZlYXR1cmVz KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQo+ICAgewo+ICAgCWNvbnN0IHN0cnVjdCBhbWRf cG1fZnVuY3MgKnBwX2Z1bmNzID0gYWRldi0+cG93ZXJwbGF5LnBwX2Z1bmNzOwo+ICAgCXZvaWQg KnBwX2hhbmRsZSA9IGFkZXYtPnBvd2VycGxheS5wcF9oYW5kbGU7Cj4gLQlpbnQgcmV0ID0gMDsK PiAgIAo+ICAgCWlmICghcHBfZnVuY3MgfHwgIXBwX2Z1bmNzLT5hc2ljX3Jlc2V0X2VuYWJsZV9n ZnhfZmVhdHVyZXMpCj4gICAJCXJldHVybiAtRU5PRU5UOwo+ICAgCj4gLQltdXRleF9sb2NrKCZh ZGV2LT5wbS5tdXRleCk7Cj4gLQo+IC0JcmV0ID0gcHBfZnVuY3MtPmFzaWNfcmVzZXRfZW5hYmxl X2dmeF9mZWF0dXJlcyhwcF9oYW5kbGUpOwo+IC0KPiAtCW11dGV4X3VubG9jaygmYWRldi0+cG0u bXV0ZXgpOwo+IC0KPiAtCXJldHVybiByZXQ7Cj4gKwlndWFyZChtdXRleCkoJmFkZXYtPnBtLm11 dGV4KTsKPiArCXJldHVybiBwcF9mdW5jcy0+YXNpY19yZXNldF9lbmFibGVfZ2Z4X2ZlYXR1cmVz KHBwX2hhbmRsZSk7Cj4gICB9Cj4gICAKPiAgIGludCBhbWRncHVfZHBtX2JhY29fcmVzZXQoc3Ry dWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCj4gQEAgLTI3MCw3NSArMjI0LDYwIEBAIGludCBhbWRn cHVfZHBtX2JhY29fcmVzZXQoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCj4gICAJaWYgKCFw cF9mdW5jcyB8fCAhcHBfZnVuY3MtPnNldF9hc2ljX2JhY29fc3RhdGUpCj4gICAJCXJldHVybiAt RU5PRU5UOwo+ICAgCj4gLQltdXRleF9sb2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4gKwlndWFyZCht dXRleCkoJmFkZXYtPnBtLm11dGV4KTsKPiAgIAo+ICAgCS8qIGVudGVyIEJBQ08gc3RhdGUgKi8K PiAgIAlyZXQgPSBwcF9mdW5jcy0+c2V0X2FzaWNfYmFjb19zdGF0ZShwcF9oYW5kbGUsIDEpOwo+ ICAgCWlmIChyZXQpCj4gLQkJZ290byBvdXQ7Cj4gKwkJcmV0dXJuIHJldDsKPiAgIAo+ICAgCS8q IGV4aXQgQkFDTyBzdGF0ZSAqLwo+ICAgCXJldCA9IHBwX2Z1bmNzLT5zZXRfYXNpY19iYWNvX3N0 YXRlKHBwX2hhbmRsZSwgMCk7Cj4gLQo+IC1vdXQ6Cj4gLQltdXRleF91bmxvY2soJmFkZXYtPnBt Lm11dGV4KTsKPiAgIAlyZXR1cm4gcmV0Owo+ICAgfQo+ICAgCj4gICBib29sIGFtZGdwdV9kcG1f aXNfbW9kZTFfcmVzZXRfc3VwcG9ydGVkKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQo+ICAg ewo+ICAgCXN0cnVjdCBzbXVfY29udGV4dCAqc211ID0gYWRldi0+cG93ZXJwbGF5LnBwX2hhbmRs ZTsKPiAtCWJvb2wgc3VwcG9ydF9tb2RlMV9yZXNldCA9IGZhbHNlOwo+ICAgCj4gLQlpZiAoaXNf c3VwcG9ydF9zd19zbXUoYWRldikpIHsKPiAtCQltdXRleF9sb2NrKCZhZGV2LT5wbS5tdXRleCk7 Cj4gLQkJc3VwcG9ydF9tb2RlMV9yZXNldCA9IHNtdV9tb2RlMV9yZXNldF9pc19zdXBwb3J0KHNt dSk7Cj4gLQkJbXV0ZXhfdW5sb2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4gLQl9Cj4gKwlpZiAoIWlz X3N1cHBvcnRfc3dfc211KGFkZXYpKQo+ICsJCXJldHVybiBmYWxzZTsKPiAgIAo+IC0JcmV0dXJu IHN1cHBvcnRfbW9kZTFfcmVzZXQ7Cj4gKwlndWFyZChtdXRleCkoJmFkZXYtPnBtLm11dGV4KTsK PiArCXJldHVybiBzbXVfbW9kZTFfcmVzZXRfaXNfc3VwcG9ydChzbXUpOwo+ICAgfQo+ICAgCj4g ICBpbnQgYW1kZ3B1X2RwbV9tb2RlMV9yZXNldChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikK PiAgIHsKPiAgIAlzdHJ1Y3Qgc211X2NvbnRleHQgKnNtdSA9IGFkZXYtPnBvd2VycGxheS5wcF9o YW5kbGU7Cj4gLQlpbnQgcmV0ID0gLUVPUE5PVFNVUFA7Cj4gICAKPiAtCWlmIChpc19zdXBwb3J0 X3N3X3NtdShhZGV2KSkgewo+IC0JCW11dGV4X2xvY2soJmFkZXYtPnBtLm11dGV4KTsKPiAtCQly ZXQgPSBzbXVfbW9kZTFfcmVzZXQoc211KTsKPiAtCQltdXRleF91bmxvY2soJmFkZXYtPnBtLm11 dGV4KTsKPiAtCX0KPiArCWlmICghaXNfc3VwcG9ydF9zd19zbXUoYWRldikpCj4gKwkJcmV0dXJu IC1FT1BOT1RTVVBQOwo+ICAgCj4gLQlyZXR1cm4gcmV0Owo+ICsJZ3VhcmQobXV0ZXgpKCZhZGV2 LT5wbS5tdXRleCk7Cj4gKwlyZXR1cm4gc211X21vZGUxX3Jlc2V0KHNtdSk7Cj4gICB9Cj4gICAK PiAgIGJvb2wgYW1kZ3B1X2RwbV9pc19saW5rX3Jlc2V0X3N1cHBvcnRlZChzdHJ1Y3QgYW1kZ3B1 X2RldmljZSAqYWRldikKPiAgIHsKPiAgIAlzdHJ1Y3Qgc211X2NvbnRleHQgKnNtdSA9IGFkZXYt PnBvd2VycGxheS5wcF9oYW5kbGU7Cj4gLQlib29sIHN1cHBvcnRfbGlua19yZXNldCA9IGZhbHNl Owo+ICAgCj4gLQlpZiAoaXNfc3VwcG9ydF9zd19zbXUoYWRldikpIHsKPiAtCQltdXRleF9sb2Nr KCZhZGV2LT5wbS5tdXRleCk7Cj4gLQkJc3VwcG9ydF9saW5rX3Jlc2V0ID0gc211X2xpbmtfcmVz ZXRfaXNfc3VwcG9ydChzbXUpOwo+IC0JCW11dGV4X3VubG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+ IC0JfQo+ICsJaWYgKCFpc19zdXBwb3J0X3N3X3NtdShhZGV2KSkKPiArCQlyZXR1cm4gZmFsc2U7 Cj4gICAKPiAtCXJldHVybiBzdXBwb3J0X2xpbmtfcmVzZXQ7Cj4gKwlndWFyZChtdXRleCkoJmFk ZXYtPnBtLm11dGV4KTsKPiArCXJldHVybiBzbXVfbGlua19yZXNldF9pc19zdXBwb3J0KHNtdSk7 Cj4gICB9Cj4gICAKPiAgIGludCBhbWRncHVfZHBtX2xpbmtfcmVzZXQoc3RydWN0IGFtZGdwdV9k ZXZpY2UgKmFkZXYpCj4gICB7Cj4gICAJc3RydWN0IHNtdV9jb250ZXh0ICpzbXUgPSBhZGV2LT5w b3dlcnBsYXkucHBfaGFuZGxlOwo+IC0JaW50IHJldCA9IC1FT1BOT1RTVVBQOwo+ICAgCj4gLQlp ZiAoaXNfc3VwcG9ydF9zd19zbXUoYWRldikpIHsKPiAtCQltdXRleF9sb2NrKCZhZGV2LT5wbS5t dXRleCk7Cj4gLQkJcmV0ID0gc211X2xpbmtfcmVzZXQoc211KTsKPiAtCQltdXRleF91bmxvY2so JmFkZXYtPnBtLm11dGV4KTsKPiAtCX0KPiArCWlmICghaXNfc3VwcG9ydF9zd19zbXUoYWRldikp Cj4gKwkJcmV0dXJuIC1FT1BOT1RTVVBQOwo+ICAgCj4gLQlyZXR1cm4gcmV0Owo+ICsJZ3VhcmQo bXV0ZXgpKCZhZGV2LT5wbS5tdXRleCk7Cj4gKwlyZXR1cm4gc211X2xpbmtfcmVzZXQoc211KTsK PiAgIH0KPiAgIAo+ICAgaW50IGFtZGdwdV9kcG1fc3dpdGNoX3Bvd2VyX3Byb2ZpbGUoc3RydWN0 IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4gQEAgLTM0NiwxMDAgKzI4NSw4MiBAQCBpbnQgYW1kZ3B1 X2RwbV9zd2l0Y2hfcG93ZXJfcHJvZmlsZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKPiAg IAkJCQkgICAgYm9vbCBlbikKPiAgIHsKPiAgIAljb25zdCBzdHJ1Y3QgYW1kX3BtX2Z1bmNzICpw cF9mdW5jcyA9IGFkZXYtPnBvd2VycGxheS5wcF9mdW5jczsKPiAtCWludCByZXQgPSAwOwo+ICAg Cj4gICAJaWYgKGFtZGdwdV9zcmlvdl92ZihhZGV2KSkKPiAgIAkJcmV0dXJuIDA7Cj4gICAKPiAt CWlmIChwcF9mdW5jcyAmJiBwcF9mdW5jcy0+c3dpdGNoX3Bvd2VyX3Byb2ZpbGUpIHsKPiAtCQlt dXRleF9sb2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4gLQkJcmV0ID0gcHBfZnVuY3MtPnN3aXRjaF9w b3dlcl9wcm9maWxlKAo+IC0JCQlhZGV2LT5wb3dlcnBsYXkucHBfaGFuZGxlLCB0eXBlLCBlbik7 Cj4gLQkJbXV0ZXhfdW5sb2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4gLQl9Cj4gKwlpZiAoIXBwX2Z1 bmNzIHx8ICFwcF9mdW5jcy0+c3dpdGNoX3Bvd2VyX3Byb2ZpbGUpCj4gKwkJcmV0dXJuIDA7Cj4g ICAKPiAtCXJldHVybiByZXQ7Cj4gKwlndWFyZChtdXRleCkoJmFkZXYtPnBtLm11dGV4KTsKPiAr CXJldHVybiBwcF9mdW5jcy0+c3dpdGNoX3Bvd2VyX3Byb2ZpbGUoCj4gKwkJCWFkZXYtPnBvd2Vy cGxheS5wcF9oYW5kbGUsIHR5cGUsIGVuKTsKPiAgIH0KPiAgIAo+ICAgaW50IGFtZGdwdV9kcG1f cGF1c2VfcG93ZXJfcHJvZmlsZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKPiAgIAkJCQkg ICBib29sIHBhdXNlKQo+ICAgewo+ICAgCWNvbnN0IHN0cnVjdCBhbWRfcG1fZnVuY3MgKnBwX2Z1 bmNzID0gYWRldi0+cG93ZXJwbGF5LnBwX2Z1bmNzOwo+IC0JaW50IHJldCA9IDA7Cj4gICAKPiAg IAlpZiAoYW1kZ3B1X3NyaW92X3ZmKGFkZXYpKQo+ICAgCQlyZXR1cm4gMDsKPiAgIAo+IC0JaWYg KHBwX2Z1bmNzICYmIHBwX2Z1bmNzLT5wYXVzZV9wb3dlcl9wcm9maWxlKSB7Cj4gLQkJbXV0ZXhf bG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+IC0JCXJldCA9IHBwX2Z1bmNzLT5wYXVzZV9wb3dlcl9w cm9maWxlKAo+IC0JCQlhZGV2LT5wb3dlcnBsYXkucHBfaGFuZGxlLCBwYXVzZSk7Cj4gLQkJbXV0 ZXhfdW5sb2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4gLQl9Cj4gKwlpZiAoIXBwX2Z1bmNzIHx8ICFw cF9mdW5jcy0+cGF1c2VfcG93ZXJfcHJvZmlsZSkKPiArCQlyZXR1cm4gMDsKPiAgIAo+IC0JcmV0 dXJuIHJldDsKPiArCWd1YXJkKG11dGV4KSgmYWRldi0+cG0ubXV0ZXgpOwo+ICsJcmV0dXJuIHBw X2Z1bmNzLT5wYXVzZV9wb3dlcl9wcm9maWxlKAo+ICsJCQlhZGV2LT5wb3dlcnBsYXkucHBfaGFu ZGxlLCBwYXVzZSk7Cj4gICB9Cj4gICAKPiAgIGludCBhbWRncHVfZHBtX3NldF94Z21pX3BzdGF0 ZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKPiAgIAkJCSAgICAgICB1aW50MzJfdCBwc3Rh dGUpCj4gICB7Cj4gICAJY29uc3Qgc3RydWN0IGFtZF9wbV9mdW5jcyAqcHBfZnVuY3MgPSBhZGV2 LT5wb3dlcnBsYXkucHBfZnVuY3M7Cj4gLQlpbnQgcmV0ID0gMDsKPiAgIAo+IC0JaWYgKHBwX2Z1 bmNzICYmIHBwX2Z1bmNzLT5zZXRfeGdtaV9wc3RhdGUpIHsKPiAtCQltdXRleF9sb2NrKCZhZGV2 LT5wbS5tdXRleCk7Cj4gLQkJcmV0ID0gcHBfZnVuY3MtPnNldF94Z21pX3BzdGF0ZShhZGV2LT5w b3dlcnBsYXkucHBfaGFuZGxlLAo+IC0JCQkJCQkJCXBzdGF0ZSk7Cj4gLQkJbXV0ZXhfdW5sb2Nr KCZhZGV2LT5wbS5tdXRleCk7Cj4gLQl9Cj4gKwlpZiAoIXBwX2Z1bmNzIHx8ICFwcF9mdW5jcy0+ c2V0X3hnbWlfcHN0YXRlKQo+ICsJCXJldHVybiAwOwo+ICAgCj4gLQlyZXR1cm4gcmV0Owo+ICsJ Z3VhcmQobXV0ZXgpKCZhZGV2LT5wbS5tdXRleCk7Cj4gKwlyZXR1cm4gcHBfZnVuY3MtPnNldF94 Z21pX3BzdGF0ZShhZGV2LT5wb3dlcnBsYXkucHBfaGFuZGxlLAo+ICsJCQkJCQkJCXBzdGF0ZSk7 Cj4gICB9Cj4gICAKPiAgIGludCBhbWRncHVfZHBtX3NldF9kZl9jc3RhdGUoc3RydWN0IGFtZGdw dV9kZXZpY2UgKmFkZXYsCj4gICAJCQkgICAgIHVpbnQzMl90IGNzdGF0ZSkKPiAgIHsKPiAtCWlu dCByZXQgPSAwOwo+ICAgCWNvbnN0IHN0cnVjdCBhbWRfcG1fZnVuY3MgKnBwX2Z1bmNzID0gYWRl di0+cG93ZXJwbGF5LnBwX2Z1bmNzOwo+ICAgCXZvaWQgKnBwX2hhbmRsZSA9IGFkZXYtPnBvd2Vy cGxheS5wcF9oYW5kbGU7Cj4gICAKPiAtCWlmIChwcF9mdW5jcyAmJiBwcF9mdW5jcy0+c2V0X2Rm X2NzdGF0ZSkgewo+IC0JCW11dGV4X2xvY2soJmFkZXYtPnBtLm11dGV4KTsKPiAtCQlyZXQgPSBw cF9mdW5jcy0+c2V0X2RmX2NzdGF0ZShwcF9oYW5kbGUsIGNzdGF0ZSk7Cj4gLQkJbXV0ZXhfdW5s b2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4gLQl9Cj4gKwlpZiAoIXBwX2Z1bmNzIHx8ICFwcF9mdW5j cy0+c2V0X2RmX2NzdGF0ZSkKPiArCQlyZXR1cm4gMDsKPiAgIAo+IC0JcmV0dXJuIHJldDsKPiAr CWd1YXJkKG11dGV4KSgmYWRldi0+cG0ubXV0ZXgpOwo+ICsJcmV0dXJuIHBwX2Z1bmNzLT5zZXRf ZGZfY3N0YXRlKHBwX2hhbmRsZSwgY3N0YXRlKTsKPiAgIH0KPiAgIAo+ICAgc3NpemVfdCBhbWRn cHVfZHBtX2dldF9wbV9wb2xpY3lfaW5mbyhzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKPiAg IAkJCQkgICAgICBlbnVtIHBwX3BtX3BvbGljeSBwX3R5cGUsIGNoYXIgKmJ1ZikKPiAgIHsKPiAg IAlzdHJ1Y3Qgc211X2NvbnRleHQgKnNtdSA9IGFkZXYtPnBvd2VycGxheS5wcF9oYW5kbGU7Cj4g LQlpbnQgcmV0ID0gLUVPUE5PVFNVUFA7Cj4gICAKPiAtCWlmIChpc19zdXBwb3J0X3N3X3NtdShh ZGV2KSkgewo+IC0JCW11dGV4X2xvY2soJmFkZXYtPnBtLm11dGV4KTsKPiAtCQlyZXQgPSBzbXVf Z2V0X3BtX3BvbGljeV9pbmZvKHNtdSwgcF90eXBlLCBidWYpOwo+IC0JCW11dGV4X3VubG9jaygm YWRldi0+cG0ubXV0ZXgpOwo+IC0JfQo+ICsJaWYgKCFpc19zdXBwb3J0X3N3X3NtdShhZGV2KSkK PiArCQlyZXR1cm4gLUVPUE5PVFNVUFA7Cj4gICAKPiAtCXJldHVybiByZXQ7Cj4gKwlndWFyZCht dXRleCkoJmFkZXYtPnBtLm11dGV4KTsKPiArCXJldHVybiBzbXVfZ2V0X3BtX3BvbGljeV9pbmZv KHNtdSwgcF90eXBlLCBidWYpOwo+ICAgfQo+ICAgCj4gICBpbnQgYW1kZ3B1X2RwbV9zZXRfcG1f cG9saWN5KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LCBpbnQgcG9saWN5X3R5cGUsCj4gICAJ CQkgICAgIGludCBwb2xpY3lfbGV2ZWwpCj4gICB7Cj4gICAJc3RydWN0IHNtdV9jb250ZXh0ICpz bXUgPSBhZGV2LT5wb3dlcnBsYXkucHBfaGFuZGxlOwo+IC0JaW50IHJldCA9IC1FT1BOT1RTVVBQ Owo+ICAgCj4gLQlpZiAoaXNfc3VwcG9ydF9zd19zbXUoYWRldikpIHsKPiAtCQltdXRleF9sb2Nr KCZhZGV2LT5wbS5tdXRleCk7Cj4gLQkJcmV0ID0gc211X3NldF9wbV9wb2xpY3koc211LCBwb2xp Y3lfdHlwZSwgcG9saWN5X2xldmVsKTsKPiAtCQltdXRleF91bmxvY2soJmFkZXYtPnBtLm11dGV4 KTsKPiAtCX0KPiArCWlmICghaXNfc3VwcG9ydF9zd19zbXUoYWRldikpCj4gKwkJcmV0dXJuIC1F T1BOT1RTVVBQOwo+ICAgCj4gLQlyZXR1cm4gcmV0Owo+ICsJZ3VhcmQobXV0ZXgpKCZhZGV2LT5w bS5tdXRleCk7Cj4gKwlyZXR1cm4gc211X3NldF9wbV9wb2xpY3koc211LCBwb2xpY3lfdHlwZSwg cG9saWN5X2xldmVsKTsKPiAgIH0KPiAgIAo+ICAgaW50IGFtZGdwdV9kcG1fZW5hYmxlX21ncHVf ZmFuX2Jvb3N0KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQo+IEBAIC00NDcsMTUgKzM2OCwx MiBAQCBpbnQgYW1kZ3B1X2RwbV9lbmFibGVfbWdwdV9mYW5fYm9vc3Qoc3RydWN0IGFtZGdwdV9k ZXZpY2UgKmFkZXYpCj4gICAJdm9pZCAqcHBfaGFuZGxlID0gYWRldi0+cG93ZXJwbGF5LnBwX2hh bmRsZTsKPiAgIAljb25zdCBzdHJ1Y3QgYW1kX3BtX2Z1bmNzICpwcF9mdW5jcyA9Cj4gICAJCQlh ZGV2LT5wb3dlcnBsYXkucHBfZnVuY3M7Cj4gLQlpbnQgcmV0ID0gMDsKPiAgIAo+IC0JaWYgKHBw X2Z1bmNzICYmIHBwX2Z1bmNzLT5lbmFibGVfbWdwdV9mYW5fYm9vc3QpIHsKPiAtCQltdXRleF9s b2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4gLQkJcmV0ID0gcHBfZnVuY3MtPmVuYWJsZV9tZ3B1X2Zh bl9ib29zdChwcF9oYW5kbGUpOwo+IC0JCW11dGV4X3VubG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+ IC0JfQo+ICsJaWYgKCFwcF9mdW5jcyB8fCAhcHBfZnVuY3MtPmVuYWJsZV9tZ3B1X2Zhbl9ib29z dCkKPiArCQlyZXR1cm4gMDsKPiAgIAo+IC0JcmV0dXJuIHJldDsKPiArCWd1YXJkKG11dGV4KSgm YWRldi0+cG0ubXV0ZXgpOwo+ICsJcmV0dXJuIHBwX2Z1bmNzLT5lbmFibGVfbWdwdV9mYW5fYm9v c3QocHBfaGFuZGxlKTsKPiAgIH0KPiAgIAo+ICAgaW50IGFtZGdwdV9kcG1fc2V0X2Nsb2NrZ2F0 aW5nX2J5X3NtdShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKPiBAQCAtNDY0LDE2ICszODIs MTMgQEAgaW50IGFtZGdwdV9kcG1fc2V0X2Nsb2NrZ2F0aW5nX2J5X3NtdShzdHJ1Y3QgYW1kZ3B1 X2RldmljZSAqYWRldiwKPiAgIAl2b2lkICpwcF9oYW5kbGUgPSBhZGV2LT5wb3dlcnBsYXkucHBf aGFuZGxlOwo+ICAgCWNvbnN0IHN0cnVjdCBhbWRfcG1fZnVuY3MgKnBwX2Z1bmNzID0KPiAgIAkJ CWFkZXYtPnBvd2VycGxheS5wcF9mdW5jczsKPiAtCWludCByZXQgPSAwOwo+ICAgCj4gLQlpZiAo cHBfZnVuY3MgJiYgcHBfZnVuY3MtPnNldF9jbG9ja2dhdGluZ19ieV9zbXUpIHsKPiAtCQltdXRl eF9sb2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4gLQkJcmV0ID0gcHBfZnVuY3MtPnNldF9jbG9ja2dh dGluZ19ieV9zbXUocHBfaGFuZGxlLAo+IC0JCQkJCQkgICAgICAgbXNnX2lkKTsKPiAtCQltdXRl eF91bmxvY2soJmFkZXYtPnBtLm11dGV4KTsKPiAtCX0KPiArCWlmICghcHBfZnVuY3MgfHwgIXBw X2Z1bmNzLT5zZXRfY2xvY2tnYXRpbmdfYnlfc211KQo+ICsJCXJldHVybiAwOwo+ICAgCj4gLQly ZXR1cm4gcmV0Owo+ICsJZ3VhcmQobXV0ZXgpKCZhZGV2LT5wbS5tdXRleCk7Cj4gKwlyZXR1cm4g cHBfZnVuY3MtPnNldF9jbG9ja2dhdGluZ19ieV9zbXUocHBfaGFuZGxlLAo+ICsJCQkJCQkgICAg ICAgbXNnX2lkKTsKPiAgIH0KPiAgIAo+ICAgaW50IGFtZGdwdV9kcG1fc211X2kyY19idXNfYWNj ZXNzKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAo+IEBAIC00ODIsMjIgKzM5NywxOSBAQCBp bnQgYW1kZ3B1X2RwbV9zbXVfaTJjX2J1c19hY2Nlc3Moc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFk ZXYsCj4gICAJdm9pZCAqcHBfaGFuZGxlID0gYWRldi0+cG93ZXJwbGF5LnBwX2hhbmRsZTsKPiAg IAljb25zdCBzdHJ1Y3QgYW1kX3BtX2Z1bmNzICpwcF9mdW5jcyA9Cj4gICAJCQlhZGV2LT5wb3dl cnBsYXkucHBfZnVuY3M7Cj4gLQlpbnQgcmV0ID0gLUVPUE5PVFNVUFA7Cj4gICAKPiAtCWlmIChw cF9mdW5jcyAmJiBwcF9mdW5jcy0+c211X2kyY19idXNfYWNjZXNzKSB7Cj4gLQkJbXV0ZXhfbG9j aygmYWRldi0+cG0ubXV0ZXgpOwo+IC0JCXJldCA9IHBwX2Z1bmNzLT5zbXVfaTJjX2J1c19hY2Nl c3MocHBfaGFuZGxlLAo+IC0JCQkJCQkgICBhY3F1aXJlKTsKPiAtCQltdXRleF91bmxvY2soJmFk ZXYtPnBtLm11dGV4KTsKPiAtCX0KPiArCWlmICghcHBfZnVuY3MgfHwgIXBwX2Z1bmNzLT5zbXVf aTJjX2J1c19hY2Nlc3MpCj4gKwkJcmV0dXJuIC1FT1BOT1RTVVBQOwo+ICAgCj4gLQlyZXR1cm4g cmV0Owo+ICsJZ3VhcmQobXV0ZXgpKCZhZGV2LT5wbS5tdXRleCk7Cj4gKwlyZXR1cm4gcHBfZnVu Y3MtPnNtdV9pMmNfYnVzX2FjY2VzcyhwcF9oYW5kbGUsCj4gKwkJCQkJCSAgIGFjcXVpcmUpOwo+ ICAgfQo+ICAgCj4gICB2b2lkIGFtZGdwdV9wbV9hY3BpX2V2ZW50X2hhbmRsZXIoc3RydWN0IGFt ZGdwdV9kZXZpY2UgKmFkZXYpCj4gICB7Cj4gICAJaWYgKGFkZXYtPnBtLmRwbV9lbmFibGVkKSB7 Cj4gLQkJbXV0ZXhfbG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+ICsJCWd1YXJkKG11dGV4KSgmYWRl di0+cG0ubXV0ZXgpOwoKSXNuJ3Qgc2NvcGVkX2d1YXJkIG1vcmUgYXBwcm9wcmlhdGU/IE9yIG1h eSBqdXN0IHJldHVybiB3aGVuIAooIWFkZXYtPnBtLmRwbV9lbmFibGVkKSB0byBiZSBjb25zaXN0 ZW50IHdpdGggdGhlIG90aGVyIGNoYW5nZXMuCgo+ICAgCQlpZiAocG93ZXJfc3VwcGx5X2lzX3N5 c3RlbV9zdXBwbGllZCgpID4gMCkKPiAgIAkJCWFkZXYtPnBtLmFjX3Bvd2VyID0gdHJ1ZTsKPiAg IAkJZWxzZQo+IEBAIC01MTAsNyArNDIyLDYgQEAgdm9pZCBhbWRncHVfcG1fYWNwaV9ldmVudF9o YW5kbGVyKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQo+ICAgCQlpZiAoaXNfc3VwcG9ydF9z d19zbXUoYWRldikpCj4gICAJCQlzbXVfc2V0X2FjX2RjKGFkZXYtPnBvd2VycGxheS5wcF9oYW5k bGUpOwo+ICAgCj4gLQkJbXV0ZXhfdW5sb2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4gICAJfQo+ICAg fQo+ICAgCj4gQEAgLTUxOCw0OSArNDI5LDQwIEBAIGludCBhbWRncHVfZHBtX3JlYWRfc2Vuc29y KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LCBlbnVtIGFtZF9wcF9zZW5zb3JzIHNlbnNvCj4g ICAJCQkgICB2b2lkICpkYXRhLCB1aW50MzJfdCAqc2l6ZSkKPiAgIHsKPiAgIAljb25zdCBzdHJ1 Y3QgYW1kX3BtX2Z1bmNzICpwcF9mdW5jcyA9IGFkZXYtPnBvd2VycGxheS5wcF9mdW5jczsKPiAt CWludCByZXQgPSAtRUlOVkFMOwo+ICAgCj4gICAJaWYgKCFkYXRhIHx8ICFzaXplKQo+ICAgCQly ZXR1cm4gLUVJTlZBTDsKPiAgIAo+IC0JaWYgKHBwX2Z1bmNzICYmIHBwX2Z1bmNzLT5yZWFkX3Nl bnNvcikgewo+IC0JCW11dGV4X2xvY2soJmFkZXYtPnBtLm11dGV4KTsKPiAtCQlyZXQgPSBwcF9m dW5jcy0+cmVhZF9zZW5zb3IoYWRldi0+cG93ZXJwbGF5LnBwX2hhbmRsZSwKPiArCWlmICghcHBf ZnVuY3MgfHwgIXBwX2Z1bmNzLT5yZWFkX3NlbnNvcikKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiAr Cj4gKwlndWFyZChtdXRleCkoJmFkZXYtPnBtLm11dGV4KTsKPiArCXJldHVybiBwcF9mdW5jcy0+ cmVhZF9zZW5zb3IoYWRldi0+cG93ZXJwbGF5LnBwX2hhbmRsZSwKPiAgIAkJCQkJICAgIHNlbnNv ciwKPiAgIAkJCQkJICAgIGRhdGEsCj4gICAJCQkJCSAgICBzaXplKTsKPiAtCQltdXRleF91bmxv Y2soJmFkZXYtPnBtLm11dGV4KTsKPiAtCX0KPiAtCj4gLQlyZXR1cm4gcmV0Owo+ICAgfQo+ICAg Cj4gICBpbnQgYW1kZ3B1X2RwbV9nZXRfYXB1X3RoZXJtYWxfbGltaXQoc3RydWN0IGFtZGdwdV9k ZXZpY2UgKmFkZXYsIHVpbnQzMl90ICpsaW1pdCkKPiAgIHsKPiAgIAljb25zdCBzdHJ1Y3QgYW1k X3BtX2Z1bmNzICpwcF9mdW5jcyA9IGFkZXYtPnBvd2VycGxheS5wcF9mdW5jczsKPiAtCWludCBy ZXQgPSAtRU9QTk9UU1VQUDsKPiAgIAo+IC0JaWYgKHBwX2Z1bmNzICYmIHBwX2Z1bmNzLT5nZXRf YXB1X3RoZXJtYWxfbGltaXQpIHsKPiAtCQltdXRleF9sb2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4g LQkJcmV0ID0gcHBfZnVuY3MtPmdldF9hcHVfdGhlcm1hbF9saW1pdChhZGV2LT5wb3dlcnBsYXku cHBfaGFuZGxlLCBsaW1pdCk7Cj4gLQkJbXV0ZXhfdW5sb2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4g LQl9Cj4gKwlpZiAoIXBwX2Z1bmNzIHx8ICFwcF9mdW5jcy0+Z2V0X2FwdV90aGVybWFsX2xpbWl0 KQo+ICsJCXJldHVybiAtRU9QTk9UU1VQUDsKPiAgIAo+IC0JcmV0dXJuIHJldDsKPiArCWd1YXJk KG11dGV4KSgmYWRldi0+cG0ubXV0ZXgpOwo+ICsJcmV0dXJuIHBwX2Z1bmNzLT5nZXRfYXB1X3Ro ZXJtYWxfbGltaXQoYWRldi0+cG93ZXJwbGF5LnBwX2hhbmRsZSwgbGltaXQpOwo+ICAgfQo+ICAg Cj4gICBpbnQgYW1kZ3B1X2RwbV9zZXRfYXB1X3RoZXJtYWxfbGltaXQoc3RydWN0IGFtZGdwdV9k ZXZpY2UgKmFkZXYsIHVpbnQzMl90IGxpbWl0KQo+ICAgewo+ICAgCWNvbnN0IHN0cnVjdCBhbWRf cG1fZnVuY3MgKnBwX2Z1bmNzID0gYWRldi0+cG93ZXJwbGF5LnBwX2Z1bmNzOwo+IC0JaW50IHJl dCA9IC1FT1BOT1RTVVBQOwo+ICAgCj4gLQlpZiAocHBfZnVuY3MgJiYgcHBfZnVuY3MtPnNldF9h cHVfdGhlcm1hbF9saW1pdCkgewo+IC0JCW11dGV4X2xvY2soJmFkZXYtPnBtLm11dGV4KTsKPiAt CQlyZXQgPSBwcF9mdW5jcy0+c2V0X2FwdV90aGVybWFsX2xpbWl0KGFkZXYtPnBvd2VycGxheS5w cF9oYW5kbGUsIGxpbWl0KTsKPiAtCQltdXRleF91bmxvY2soJmFkZXYtPnBtLm11dGV4KTsKPiAt CX0KPiArCWlmICghcHBfZnVuY3MgfHwgIXBwX2Z1bmNzLT5zZXRfYXB1X3RoZXJtYWxfbGltaXQp Cj4gKwkJcmV0dXJuIC1FT1BOT1RTVVBQOwo+ICAgCj4gLQlyZXR1cm4gcmV0Owo+ICsJZ3VhcmQo bXV0ZXgpKCZhZGV2LT5wbS5tdXRleCk7Cj4gKwlyZXR1cm4gcHBfZnVuY3MtPnNldF9hcHVfdGhl cm1hbF9saW1pdChhZGV2LT5wb3dlcnBsYXkucHBfaGFuZGxlLCBsaW1pdCk7Cj4gICB9Cj4gICAK PiAgIHZvaWQgYW1kZ3B1X2RwbV9jb21wdXRlX2Nsb2NrcyhzdHJ1Y3QgYW1kZ3B1X2RldmljZSAq YWRldikKPiBAQCAtNTgzLDkgKzQ4NSw4IEBAIHZvaWQgYW1kZ3B1X2RwbV9jb21wdXRlX2Nsb2Nr cyhzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKPiAgIAkJCWFtZGdwdV9mZW5jZV93YWl0X2Vt cHR5KHJpbmcpOwo+ICAgCX0KPiAgIAo+IC0JbXV0ZXhfbG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+ ICsJZ3VhcmQobXV0ZXgpKCZhZGV2LT5wbS5tdXRleCk7Cj4gICAJcHBfZnVuY3MtPnBtX2NvbXB1 dGVfY2xvY2tzKGFkZXYtPnBvd2VycGxheS5wcF9oYW5kbGUpOwo+IC0JbXV0ZXhfdW5sb2NrKCZh ZGV2LT5wbS5tdXRleCk7Cj4gICB9Cj4gICAKPiAgIHZvaWQgYW1kZ3B1X2RwbV9lbmFibGVfdXZk KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LCBib29sIGVuYWJsZSkKPiBAQCAtNTkzLDE0ICs0 OTQsMTQgQEAgdm9pZCBhbWRncHVfZHBtX2VuYWJsZV91dmQoc3RydWN0IGFtZGdwdV9kZXZpY2Ug KmFkZXYsIGJvb2wgZW5hYmxlKQo+ICAgCWludCByZXQgPSAwOwo+ICAgCj4gICAJaWYgKGFkZXYt PmZhbWlseSA9PSBBTURHUFVfRkFNSUxZX1NJKSB7Cj4gLQkJbXV0ZXhfbG9jaygmYWRldi0+cG0u bXV0ZXgpOwo+IC0JCWlmIChlbmFibGUpIHsKPiAtCQkJYWRldi0+cG0uZHBtLnV2ZF9hY3RpdmUg PSB0cnVlOwo+IC0JCQlhZGV2LT5wbS5kcG0uc3RhdGUgPSBQT1dFUl9TVEFURV9UWVBFX0lOVEVS TkFMX1VWRDsKPiAtCQl9IGVsc2Ugewo+IC0JCQlhZGV2LT5wbS5kcG0udXZkX2FjdGl2ZSA9IGZh bHNlOwo+ICsJCXNjb3BlZF9ndWFyZChtdXRleCwgJmFkZXYtPnBtLm11dGV4KSB7Cj4gKwkJCWlm IChlbmFibGUpIHsKPiArCQkJCWFkZXYtPnBtLmRwbS51dmRfYWN0aXZlID0gdHJ1ZTsKPiArCQkJ CWFkZXYtPnBtLmRwbS5zdGF0ZSA9IFBPV0VSX1NUQVRFX1RZUEVfSU5URVJOQUxfVVZEOwo+ICsJ CQl9IGVsc2Ugewo+ICsJCQkJYWRldi0+cG0uZHBtLnV2ZF9hY3RpdmUgPSBmYWxzZTsKPiArCQkJ fQo+ICAgCQl9Cj4gLQkJbXV0ZXhfdW5sb2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4gICAKPiAgIAkJ YW1kZ3B1X2RwbV9jb21wdXRlX2Nsb2NrcyhhZGV2KTsKPiAgIAkJcmV0dXJuOwo+IEBAIC02Mjcs MTUgKzUyOCwxNSBAQCB2b2lkIGFtZGdwdV9kcG1fZW5hYmxlX3ZjZShzdHJ1Y3QgYW1kZ3B1X2Rl dmljZSAqYWRldiwgYm9vbCBlbmFibGUpCj4gICAJaW50IHJldCA9IDA7Cj4gICAKPiAgIAlpZiAo YWRldi0+ZmFtaWx5ID09IEFNREdQVV9GQU1JTFlfU0kpIHsKPiAtCQltdXRleF9sb2NrKCZhZGV2 LT5wbS5tdXRleCk7Cj4gLQkJaWYgKGVuYWJsZSkgewo+IC0JCQlhZGV2LT5wbS5kcG0udmNlX2Fj dGl2ZSA9IHRydWU7Cj4gLQkJCS8qIFhYWCBzZWxlY3QgdmNlIGxldmVsIGJhc2VkIG9uIHJpbmcv dGFzayAqLwo+IC0JCQlhZGV2LT5wbS5kcG0udmNlX2xldmVsID0gQU1EX1ZDRV9MRVZFTF9BQ19B TEw7Cj4gLQkJfSBlbHNlIHsKPiAtCQkJYWRldi0+cG0uZHBtLnZjZV9hY3RpdmUgPSBmYWxzZTsK PiArCQlzY29wZWRfZ3VhcmQobXV0ZXgsICZhZGV2LT5wbS5tdXRleCkgewo+ICsJCQlpZiAoZW5h YmxlKSB7Cj4gKwkJCQlhZGV2LT5wbS5kcG0udmNlX2FjdGl2ZSA9IHRydWU7Cj4gKwkJCQkvKiBY WFggc2VsZWN0IHZjZSBsZXZlbCBiYXNlZCBvbiByaW5nL3Rhc2sgKi8KPiArCQkJCWFkZXYtPnBt LmRwbS52Y2VfbGV2ZWwgPSBBTURfVkNFX0xFVkVMX0FDX0FMTDsKPiArCQkJfSBlbHNlIHsKPiAr CQkJCWFkZXYtPnBtLmRwbS52Y2VfYWN0aXZlID0gZmFsc2U7Cj4gKwkJCX0KPiAgIAkJfQo+IC0J CW11dGV4X3VubG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+ICAgCj4gICAJCWFtZGdwdV9kcG1fY29t cHV0ZV9jbG9ja3MoYWRldik7Cj4gICAJCXJldHVybjsKPiBAQCAtNjcwLDg0ICs1NzEsNjYgQEAg dm9pZCBhbWRncHVfZHBtX2VuYWJsZV92cGUoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsIGJv b2wgZW5hYmxlKQo+ICAgaW50IGFtZGdwdV9wbV9sb2FkX3NtdV9maXJtd2FyZShzdHJ1Y3QgYW1k Z3B1X2RldmljZSAqYWRldiwgdWludDMyX3QgKnNtdV92ZXJzaW9uKQo+ICAgewo+ICAgCWNvbnN0 IHN0cnVjdCBhbWRfcG1fZnVuY3MgKnBwX2Z1bmNzID0gYWRldi0+cG93ZXJwbGF5LnBwX2Z1bmNz Owo+IC0JaW50IHIgPSAwOwo+ICsJaW50IHJldCA9IDA7CgpUaHMgaW5pdCBpcyBub3QgbmVlZGVk Lj4KPiAgIAlpZiAoIXBwX2Z1bmNzIHx8ICFwcF9mdW5jcy0+bG9hZF9maXJtd2FyZSB8fAo+ICAg CSAgICAoaXNfc3VwcG9ydF9zd19zbXUoYWRldikgJiYgKGFkZXYtPmZsYWdzICYgQU1EX0lTX0FQ VSkpKQo+ICAgCQlyZXR1cm4gMDsKPiAgIAo+IC0JbXV0ZXhfbG9jaygmYWRldi0+cG0ubXV0ZXgp Owo+IC0JciA9IHBwX2Z1bmNzLT5sb2FkX2Zpcm13YXJlKGFkZXYtPnBvd2VycGxheS5wcF9oYW5k bGUpOwo+IC0JaWYgKHIpIHsKPiArCWd1YXJkKG11dGV4KSgmYWRldi0+cG0ubXV0ZXgpOwo+ICsJ cmV0ID0gcHBfZnVuY3MtPmxvYWRfZmlybXdhcmUoYWRldi0+cG93ZXJwbGF5LnBwX2hhbmRsZSk7 Cj4gKwlpZiAocmV0KSB7Cj4gICAJCXByX2Vycigic211IGZpcm13YXJlIGxvYWRpbmcgZmFpbGVk XG4iKTsKPiAtCQlnb3RvIG91dDsKPiArCQlyZXR1cm4gcmV0Owo+ICAgCX0KPiAgIAo+ICAgCWlm IChzbXVfdmVyc2lvbikKPiAgIAkJKnNtdV92ZXJzaW9uID0gYWRldi0+cG0uZndfdmVyc2lvbjsK PiAgIAo+IC1vdXQ6Cj4gLQltdXRleF91bmxvY2soJmFkZXYtPnBtLm11dGV4KTsKPiAtCXJldHVy biByOwo+ICsJcmV0dXJuIHJldDsKPiAgIH0KPiAgIAo+ICAgaW50IGFtZGdwdV9kcG1faGFuZGxl X3Bhc3N0aHJvdWdoX3NicihzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwgYm9vbCBlbmFibGUp Cj4gICB7Cj4gLQlpbnQgcmV0ID0gMDsKPiArCWlmICghaXNfc3VwcG9ydF9zd19zbXUoYWRldikp Cj4gKwkJcmV0dXJuIDA7Cj4gICAKPiAtCWlmIChpc19zdXBwb3J0X3N3X3NtdShhZGV2KSkgewo+ IC0JCW11dGV4X2xvY2soJmFkZXYtPnBtLm11dGV4KTsKPiAtCQlyZXQgPSBzbXVfaGFuZGxlX3Bh c3N0aHJvdWdoX3NicihhZGV2LT5wb3dlcnBsYXkucHBfaGFuZGxlLAo+ICsJZ3VhcmQobXV0ZXgp KCZhZGV2LT5wbS5tdXRleCk7Cj4gKwlyZXR1cm4gc211X2hhbmRsZV9wYXNzdGhyb3VnaF9zYnIo YWRldi0+cG93ZXJwbGF5LnBwX2hhbmRsZSwKPiAgIAkJCQkJCSBlbmFibGUpOwo+IC0JCW11dGV4 X3VubG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+IC0JfQo+IC0KPiAtCXJldHVybiByZXQ7Cj4gICB9 Cj4gICAKPiAgIGludCBhbWRncHVfZHBtX3NlbmRfaGJtX2JhZF9wYWdlc19udW0oc3RydWN0IGFt ZGdwdV9kZXZpY2UgKmFkZXYsIHVpbnQzMl90IHNpemUpCj4gICB7Cj4gICAJc3RydWN0IHNtdV9j b250ZXh0ICpzbXUgPSBhZGV2LT5wb3dlcnBsYXkucHBfaGFuZGxlOwo+IC0JaW50IHJldCA9IDA7 Cj4gICAKPiAgIAlpZiAoIWlzX3N1cHBvcnRfc3dfc211KGFkZXYpKQo+ICAgCQlyZXR1cm4gLUVP UE5PVFNVUFA7Cj4gICAKPiAtCW11dGV4X2xvY2soJmFkZXYtPnBtLm11dGV4KTsKPiAtCXJldCA9 IHNtdV9zZW5kX2hibV9iYWRfcGFnZXNfbnVtKHNtdSwgc2l6ZSk7Cj4gLQltdXRleF91bmxvY2so JmFkZXYtPnBtLm11dGV4KTsKPiAtCj4gLQlyZXR1cm4gcmV0Owo+ICsJZ3VhcmQobXV0ZXgpKCZh ZGV2LT5wbS5tdXRleCk7Cj4gKwlyZXR1cm4gc211X3NlbmRfaGJtX2JhZF9wYWdlc19udW0oc211 LCBzaXplKTsKPiAgIH0KPiAgIAo+ICAgaW50IGFtZGdwdV9kcG1fc2VuZF9oYm1fYmFkX2NoYW5u ZWxfZmxhZyhzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwgdWludDMyX3Qgc2l6ZSkKPiAgIHsK PiAgIAlzdHJ1Y3Qgc211X2NvbnRleHQgKnNtdSA9IGFkZXYtPnBvd2VycGxheS5wcF9oYW5kbGU7 Cj4gLQlpbnQgcmV0ID0gMDsKPiAgIAo+ICAgCWlmICghaXNfc3VwcG9ydF9zd19zbXUoYWRldikp Cj4gICAJCXJldHVybiAtRU9QTk9UU1VQUDsKPiAgIAo+IC0JbXV0ZXhfbG9jaygmYWRldi0+cG0u bXV0ZXgpOwo+IC0JcmV0ID0gc211X3NlbmRfaGJtX2JhZF9jaGFubmVsX2ZsYWcoc211LCBzaXpl KTsKPiAtCW11dGV4X3VubG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+IC0KPiAtCXJldHVybiByZXQ7 Cj4gKwlndWFyZChtdXRleCkoJmFkZXYtPnBtLm11dGV4KTsKPiArCXJldHVybiBzbXVfc2VuZF9o Ym1fYmFkX2NoYW5uZWxfZmxhZyhzbXUsIHNpemUpOwo+ICAgfQo+ICAgCj4gICBpbnQgYW1kZ3B1 X2RwbV9zZW5kX3JtYV9yZWFzb24oc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCj4gICB7Cj4g ICAJc3RydWN0IHNtdV9jb250ZXh0ICpzbXUgPSBhZGV2LT5wb3dlcnBsYXkucHBfaGFuZGxlOwo+ IC0JaW50IHJldDsKPiAgIAo+ICAgCWlmICghaXNfc3VwcG9ydF9zd19zbXUoYWRldikpCj4gICAJ CXJldHVybiAtRU9QTk9UU1VQUDsKPiAgIAo+IC0JbXV0ZXhfbG9jaygmYWRldi0+cG0ubXV0ZXgp Owo+IC0JcmV0ID0gc211X3NlbmRfcm1hX3JlYXNvbihzbXUpOwo+IC0JbXV0ZXhfdW5sb2NrKCZh ZGV2LT5wbS5tdXRleCk7Cj4gLQo+IC0JcmV0dXJuIHJldDsKPiArCWd1YXJkKG11dGV4KSgmYWRl di0+cG0ubXV0ZXgpOwo+ICsJcmV0dXJuIHNtdV9zZW5kX3JtYV9yZWFzb24oc211KTsKPiAgIH0K PiAgIAo+ICAgLyoqCj4gQEAgLTc2MSw2MSArNjQ0LDQ1IEBAIGludCBhbWRncHVfZHBtX3NlbmRf cm1hX3JlYXNvbihzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKPiAgIGJvb2wgYW1kZ3B1X2Rw bV9yZXNldF9zZG1hX2lzX3N1cHBvcnRlZChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKPiAg IHsKPiAgIAlzdHJ1Y3Qgc211X2NvbnRleHQgKnNtdSA9IGFkZXYtPnBvd2VycGxheS5wcF9oYW5k bGU7Cj4gLQlib29sIHJldDsKPiAgIAo+ICAgCWlmICghaXNfc3VwcG9ydF9zd19zbXUoYWRldikp Cj4gICAJCXJldHVybiBmYWxzZTsKPiAgIAo+IC0JbXV0ZXhfbG9jaygmYWRldi0+cG0ubXV0ZXgp Owo+IC0JcmV0ID0gc211X3Jlc2V0X3NkbWFfaXNfc3VwcG9ydGVkKHNtdSk7Cj4gLQltdXRleF91 bmxvY2soJmFkZXYtPnBtLm11dGV4KTsKPiAtCj4gLQlyZXR1cm4gcmV0Owo+ICsJZ3VhcmQobXV0 ZXgpKCZhZGV2LT5wbS5tdXRleCk7Cj4gKwlyZXR1cm4gc211X3Jlc2V0X3NkbWFfaXNfc3VwcG9y dGVkKHNtdSk7Cj4gICB9Cj4gICAKPiAgIGludCBhbWRncHVfZHBtX3Jlc2V0X3NkbWEoc3RydWN0 IGFtZGdwdV9kZXZpY2UgKmFkZXYsIHVpbnQzMl90IGluc3RfbWFzaykKPiAgIHsKPiAgIAlzdHJ1 Y3Qgc211X2NvbnRleHQgKnNtdSA9IGFkZXYtPnBvd2VycGxheS5wcF9oYW5kbGU7Cj4gLQlpbnQg cmV0Owo+ICAgCj4gICAJaWYgKCFpc19zdXBwb3J0X3N3X3NtdShhZGV2KSkKPiAgIAkJcmV0dXJu IC1FT1BOT1RTVVBQOwo+ICAgCj4gLQltdXRleF9sb2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4gLQly ZXQgPSBzbXVfcmVzZXRfc2RtYShzbXUsIGluc3RfbWFzayk7Cj4gLQltdXRleF91bmxvY2soJmFk ZXYtPnBtLm11dGV4KTsKPiAtCj4gLQlyZXR1cm4gcmV0Owo+ICsJZ3VhcmQobXV0ZXgpKCZhZGV2 LT5wbS5tdXRleCk7Cj4gKwlyZXR1cm4gc211X3Jlc2V0X3NkbWEoc211LCBpbnN0X21hc2spOwo+ ICAgfQo+ICAgCj4gICBpbnQgYW1kZ3B1X2RwbV9yZXNldF92Y24oc3RydWN0IGFtZGdwdV9kZXZp Y2UgKmFkZXYsIHVpbnQzMl90IGluc3RfbWFzaykKPiAgIHsKPiAgIAlzdHJ1Y3Qgc211X2NvbnRl eHQgKnNtdSA9IGFkZXYtPnBvd2VycGxheS5wcF9oYW5kbGU7Cj4gLQlpbnQgcmV0Owo+ICAgCj4g ICAJaWYgKCFpc19zdXBwb3J0X3N3X3NtdShhZGV2KSkKPiAgIAkJcmV0dXJuIC1FT1BOT1RTVVBQ Owo+ICAgCj4gLQltdXRleF9sb2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4gLQlyZXQgPSBzbXVfcmVz ZXRfdmNuKHNtdSwgaW5zdF9tYXNrKTsKPiAtCW11dGV4X3VubG9jaygmYWRldi0+cG0ubXV0ZXgp Owo+IC0KPiAtCXJldHVybiByZXQ7Cj4gKwlndWFyZChtdXRleCkoJmFkZXYtPnBtLm11dGV4KTsK PiArCXJldHVybiBzbXVfcmVzZXRfdmNuKHNtdSwgaW5zdF9tYXNrKTsKPiAgIH0KPiAgIAo+ICAg Ym9vbCBhbWRncHVfZHBtX3Jlc2V0X3Zjbl9pc19zdXBwb3J0ZWQoc3RydWN0IGFtZGdwdV9kZXZp Y2UgKmFkZXYpCj4gICB7Cj4gICAJc3RydWN0IHNtdV9jb250ZXh0ICpzbXUgPSBhZGV2LT5wb3dl cnBsYXkucHBfaGFuZGxlOwo+IC0JYm9vbCByZXQ7Cj4gICAKPiAgIAlpZiAoIWlzX3N1cHBvcnRf c3dfc211KGFkZXYpKQo+ICAgCQlyZXR1cm4gZmFsc2U7Cj4gICAKPiAtCW11dGV4X2xvY2soJmFk ZXYtPnBtLm11dGV4KTsKPiAtCXJldCA9IHNtdV9yZXNldF92Y25faXNfc3VwcG9ydGVkKHNtdSk7 Cj4gLQltdXRleF91bmxvY2soJmFkZXYtPnBtLm11dGV4KTsKPiAtCj4gLQlyZXR1cm4gcmV0Owo+ ICsJZ3VhcmQobXV0ZXgpKCZhZGV2LT5wbS5tdXRleCk7Cj4gKwlyZXR1cm4gc211X3Jlc2V0X3Zj bl9pc19zdXBwb3J0ZWQoc211KTsKPiAgIH0KPiAgIAo+ICAgaW50IGFtZGdwdV9kcG1fZ2V0X2Rw bV9mcmVxX3JhbmdlKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAo+IEBAIC04MjMsMjIgKzY5 MCwxNyBAQCBpbnQgYW1kZ3B1X2RwbV9nZXRfZHBtX2ZyZXFfcmFuZ2Uoc3RydWN0IGFtZGdwdV9k ZXZpY2UgKmFkZXYsCj4gICAJCQkJICB1aW50MzJfdCAqbWluLAo+ICAgCQkJCSAgdWludDMyX3Qg Km1heCkKPiAgIHsKPiAtCWludCByZXQgPSAwOwo+IC0KPiAgIAlpZiAodHlwZSAhPSBQUF9TQ0xL KQo+ICAgCQlyZXR1cm4gLUVJTlZBTDsKPiAgIAo+ICAgCWlmICghaXNfc3VwcG9ydF9zd19zbXUo YWRldikpCj4gICAJCXJldHVybiAtRU9QTk9UU1VQUDsKPiAgIAo+IC0JbXV0ZXhfbG9jaygmYWRl di0+cG0ubXV0ZXgpOwo+IC0JcmV0ID0gc211X2dldF9kcG1fZnJlcV9yYW5nZShhZGV2LT5wb3dl cnBsYXkucHBfaGFuZGxlLAo+ICsJZ3VhcmQobXV0ZXgpKCZhZGV2LT5wbS5tdXRleCk7Cj4gKwly ZXR1cm4gc211X2dldF9kcG1fZnJlcV9yYW5nZShhZGV2LT5wb3dlcnBsYXkucHBfaGFuZGxlLAo+ ICAgCQkJCSAgICAgU01VX1NDTEssCj4gICAJCQkJICAgICBtaW4sCj4gICAJCQkJICAgICBtYXgp Owo+IC0JbXV0ZXhfdW5sb2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4gLQo+IC0JcmV0dXJuIHJldDsK PiAgIH0KPiAgIAo+ICAgaW50IGFtZGdwdV9kcG1fc2V0X3NvZnRfZnJlcV9yYW5nZShzdHJ1Y3Qg YW1kZ3B1X2RldmljZSAqYWRldiwKPiBAQCAtODYyLDE2ICs3MjQsMTIgQEAgaW50IGFtZGdwdV9k cG1fc2V0X3NvZnRfZnJlcV9yYW5nZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKPiAgIGlu dCBhbWRncHVfZHBtX3dyaXRlX3dhdGVybWFya3NfdGFibGUoc3RydWN0IGFtZGdwdV9kZXZpY2Ug KmFkZXYpCj4gICB7Cj4gICAJc3RydWN0IHNtdV9jb250ZXh0ICpzbXUgPSBhZGV2LT5wb3dlcnBs YXkucHBfaGFuZGxlOwo+IC0JaW50IHJldCA9IDA7Cj4gICAKPiAgIAlpZiAoIWlzX3N1cHBvcnRf c3dfc211KGFkZXYpKQo+ICAgCQlyZXR1cm4gMDsKPiAgIAo+IC0JbXV0ZXhfbG9jaygmYWRldi0+ cG0ubXV0ZXgpOwo+IC0JcmV0ID0gc211X3dyaXRlX3dhdGVybWFya3NfdGFibGUoc211KTsKPiAt CW11dGV4X3VubG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+IC0KPiAtCXJldHVybiByZXQ7Cj4gKwln dWFyZChtdXRleCkoJmFkZXYtPnBtLm11dGV4KTsKPiArCXJldHVybiBzbXVfd3JpdGVfd2F0ZXJt YXJrc190YWJsZShzbXUpOwo+ICAgfQo+ICAgCj4gICBpbnQgYW1kZ3B1X2RwbV93YWl0X2Zvcl9l dmVudChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKPiBAQCAtODc5LDc2ICs3MzcsNTYgQEAg aW50IGFtZGdwdV9kcG1fd2FpdF9mb3JfZXZlbnQoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYs Cj4gICAJCQkgICAgICB1aW50NjRfdCBldmVudF9hcmcpCj4gICB7Cj4gICAJc3RydWN0IHNtdV9j b250ZXh0ICpzbXUgPSBhZGV2LT5wb3dlcnBsYXkucHBfaGFuZGxlOwo+IC0JaW50IHJldCA9IDA7 Cj4gICAKPiAgIAlpZiAoIWlzX3N1cHBvcnRfc3dfc211KGFkZXYpKQo+ICAgCQlyZXR1cm4gLUVP UE5PVFNVUFA7Cj4gICAKPiAtCW11dGV4X2xvY2soJmFkZXYtPnBtLm11dGV4KTsKPiAtCXJldCA9 IHNtdV93YWl0X2Zvcl9ldmVudChzbXUsIGV2ZW50LCBldmVudF9hcmcpOwo+IC0JbXV0ZXhfdW5s b2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4gLQo+IC0JcmV0dXJuIHJldDsKPiArCWd1YXJkKG11dGV4 KSgmYWRldi0+cG0ubXV0ZXgpOwo+ICsJcmV0dXJuIHNtdV93YWl0X2Zvcl9ldmVudChzbXUsIGV2 ZW50LCBldmVudF9hcmcpOwo+ICAgfQo+ICAgCj4gICBpbnQgYW1kZ3B1X2RwbV9zZXRfcmVzaWRl bmN5X2dmeG9mZihzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwgYm9vbCB2YWx1ZSkKPiAgIHsK PiAgIAlzdHJ1Y3Qgc211X2NvbnRleHQgKnNtdSA9IGFkZXYtPnBvd2VycGxheS5wcF9oYW5kbGU7 Cj4gLQlpbnQgcmV0ID0gMDsKPiAgIAo+ICAgCWlmICghaXNfc3VwcG9ydF9zd19zbXUoYWRldikp Cj4gICAJCXJldHVybiAtRU9QTk9UU1VQUDsKPiAgIAo+IC0JbXV0ZXhfbG9jaygmYWRldi0+cG0u bXV0ZXgpOwo+IC0JcmV0ID0gc211X3NldF9yZXNpZGVuY3lfZ2Z4b2ZmKHNtdSwgdmFsdWUpOwo+ IC0JbXV0ZXhfdW5sb2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4gLQo+IC0JcmV0dXJuIHJldDsKPiAr CWd1YXJkKG11dGV4KSgmYWRldi0+cG0ubXV0ZXgpOwo+ICsJcmV0dXJuIHNtdV9zZXRfcmVzaWRl bmN5X2dmeG9mZihzbXUsIHZhbHVlKTsKPiAgIH0KPiAgIAo+ICAgaW50IGFtZGdwdV9kcG1fZ2V0 X3Jlc2lkZW5jeV9nZnhvZmYoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsIHUzMiAqdmFsdWUp Cj4gICB7Cj4gICAJc3RydWN0IHNtdV9jb250ZXh0ICpzbXUgPSBhZGV2LT5wb3dlcnBsYXkucHBf aGFuZGxlOwo+IC0JaW50IHJldCA9IDA7Cj4gICAKPiAgIAlpZiAoIWlzX3N1cHBvcnRfc3dfc211 KGFkZXYpKQo+ICAgCQlyZXR1cm4gLUVPUE5PVFNVUFA7Cj4gICAKPiAtCW11dGV4X2xvY2soJmFk ZXYtPnBtLm11dGV4KTsKPiAtCXJldCA9IHNtdV9nZXRfcmVzaWRlbmN5X2dmeG9mZihzbXUsIHZh bHVlKTsKPiAtCW11dGV4X3VubG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+IC0KPiAtCXJldHVybiBy ZXQ7Cj4gKwlndWFyZChtdXRleCkoJmFkZXYtPnBtLm11dGV4KTsKPiArCXJldHVybiBzbXVfZ2V0 X3Jlc2lkZW5jeV9nZnhvZmYoc211LCB2YWx1ZSk7Cj4gICB9Cj4gICAKPiAgIGludCBhbWRncHVf ZHBtX2dldF9lbnRyeWNvdW50X2dmeG9mZihzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwgdTY0 ICp2YWx1ZSkKPiAgIHsKPiAgIAlzdHJ1Y3Qgc211X2NvbnRleHQgKnNtdSA9IGFkZXYtPnBvd2Vy cGxheS5wcF9oYW5kbGU7Cj4gLQlpbnQgcmV0ID0gMDsKPiAgIAo+ICAgCWlmICghaXNfc3VwcG9y dF9zd19zbXUoYWRldikpCj4gICAJCXJldHVybiAtRU9QTk9UU1VQUDsKPiAgIAo+IC0JbXV0ZXhf bG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+IC0JcmV0ID0gc211X2dldF9lbnRyeWNvdW50X2dmeG9m ZihzbXUsIHZhbHVlKTsKPiAtCW11dGV4X3VubG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+IC0KPiAt CXJldHVybiByZXQ7Cj4gKwlndWFyZChtdXRleCkoJmFkZXYtPnBtLm11dGV4KTsKPiArCXJldHVy biBzbXVfZ2V0X2VudHJ5Y291bnRfZ2Z4b2ZmKHNtdSwgdmFsdWUpOwo+ICAgfQo+ICAgCj4gICBp bnQgYW1kZ3B1X2RwbV9nZXRfc3RhdHVzX2dmeG9mZihzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRl diwgdWludDMyX3QgKnZhbHVlKQo+ICAgewo+ICAgCXN0cnVjdCBzbXVfY29udGV4dCAqc211ID0g YWRldi0+cG93ZXJwbGF5LnBwX2hhbmRsZTsKPiAtCWludCByZXQgPSAwOwo+ICAgCj4gICAJaWYg KCFpc19zdXBwb3J0X3N3X3NtdShhZGV2KSkKPiAgIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwo+ICAg Cj4gLQltdXRleF9sb2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4gLQlyZXQgPSBzbXVfZ2V0X3N0YXR1 c19nZnhvZmYoc211LCB2YWx1ZSk7Cj4gLQltdXRleF91bmxvY2soJmFkZXYtPnBtLm11dGV4KTsK PiAtCj4gLQlyZXR1cm4gcmV0Owo+ICsJZ3VhcmQobXV0ZXgpKCZhZGV2LT5wbS5tdXRleCk7Cj4g KwlyZXR1cm4gc211X2dldF9zdGF0dXNfZ2Z4b2ZmKHNtdSwgdmFsdWUpOwo+ICAgfQo+ICAgCj4g ICB1aW50NjRfdCBhbWRncHVfZHBtX2dldF90aGVybWFsX3Rocm90dGxpbmdfY291bnRlcihzdHJ1 Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKPiBAQCAtOTY5LDI4ICs4MDcsMjMgQEAgdWludDY0X3Qg YW1kZ3B1X2RwbV9nZXRfdGhlcm1hbF90aHJvdHRsaW5nX2NvdW50ZXIoc3RydWN0IGFtZGdwdV9k ZXZpY2UgKmFkZXYpCj4gICB2b2lkIGFtZGdwdV9kcG1fZ2Z4X3N0YXRlX2NoYW5nZShzdHJ1Y3Qg YW1kZ3B1X2RldmljZSAqYWRldiwKPiAgIAkJCQkgZW51bSBnZnhfY2hhbmdlX3N0YXRlIHN0YXRl KQo+ICAgewo+IC0JbXV0ZXhfbG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+ICsJZ3VhcmQobXV0ZXgp KCZhZGV2LT5wbS5tdXRleCk7Cj4gICAJaWYgKGFkZXYtPnBvd2VycGxheS5wcF9mdW5jcyAmJgo+ ICAgCSAgICBhZGV2LT5wb3dlcnBsYXkucHBfZnVuY3MtPmdmeF9zdGF0ZV9jaGFuZ2Vfc2V0KQo+ ICAgCQkoKGFkZXYpLT5wb3dlcnBsYXkucHBfZnVuY3MtPmdmeF9zdGF0ZV9jaGFuZ2Vfc2V0KAo+ ICAgCQkJKGFkZXYpLT5wb3dlcnBsYXkucHBfaGFuZGxlLCBzdGF0ZSkpOwo+IC0JbXV0ZXhfdW5s b2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4gICB9Cj4gICAKPiAgIGludCBhbWRncHVfZHBtX2dldF9l Y2NfaW5mbyhzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKPiAgIAkJCSAgICB2b2lkICp1bWNf ZWNjKQo+ICAgewo+ICAgCXN0cnVjdCBzbXVfY29udGV4dCAqc211ID0gYWRldi0+cG93ZXJwbGF5 LnBwX2hhbmRsZTsKPiAtCWludCByZXQgPSAwOwo+ICAgCj4gICAJaWYgKCFpc19zdXBwb3J0X3N3 X3NtdShhZGV2KSkKPiAgIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwo+ICAgCj4gLQltdXRleF9sb2Nr KCZhZGV2LT5wbS5tdXRleCk7Cj4gLQlyZXQgPSBzbXVfZ2V0X2VjY19pbmZvKHNtdSwgdW1jX2Vj Yyk7Cj4gLQltdXRleF91bmxvY2soJmFkZXYtPnBtLm11dGV4KTsKPiAtCj4gLQlyZXR1cm4gcmV0 Owo+ICsJZ3VhcmQobXV0ZXgpKCZhZGV2LT5wbS5tdXRleCk7Cj4gKwlyZXR1cm4gc211X2dldF9l Y2NfaW5mbyhzbXUsIHVtY19lY2MpOwo+ICAgfQo+ICAgCj4gICBzdHJ1Y3QgYW1kX3ZjZV9zdGF0 ZSAqYW1kZ3B1X2RwbV9nZXRfdmNlX2Nsb2NrX3N0YXRlKHN0cnVjdCBhbWRncHVfZGV2aWNlICph ZGV2LAo+IEBAIC0xMDAyLDEyICs4MzUsOSBAQCBzdHJ1Y3QgYW1kX3ZjZV9zdGF0ZSAqYW1kZ3B1 X2RwbV9nZXRfdmNlX2Nsb2NrX3N0YXRlKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAo+ICAg CWlmICghcHBfZnVuY3MtPmdldF92Y2VfY2xvY2tfc3RhdGUpCj4gICAJCXJldHVybiBOVUxMOwo+ ICAgCj4gLQltdXRleF9sb2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4gLQl2c3RhdGUgPSBwcF9mdW5j cy0+Z2V0X3ZjZV9jbG9ja19zdGF0ZShhZGV2LT5wb3dlcnBsYXkucHBfaGFuZGxlLAo+ICsJZ3Vh cmQobXV0ZXgpKCZhZGV2LT5wbS5tdXRleCk7Cj4gKwlyZXR1cm4gcHBfZnVuY3MtPmdldF92Y2Vf Y2xvY2tfc3RhdGUoYWRldi0+cG93ZXJwbGF5LnBwX2hhbmRsZSwKPiAgIAkJCQkJICAgICAgIGlk eCk7Cj4gLQltdXRleF91bmxvY2soJmFkZXYtPnBtLm11dGV4KTsKPiAtCj4gLQlyZXR1cm4gdnN0 YXRlOwo+ICAgfQo+ICAgCj4gICB2b2lkIGFtZGdwdV9kcG1fZ2V0X2N1cnJlbnRfcG93ZXJfc3Rh dGUoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4gQEAgLTEwMTUsMjggKzg0NSwyNCBAQCB2 b2lkIGFtZGdwdV9kcG1fZ2V0X2N1cnJlbnRfcG93ZXJfc3RhdGUoc3RydWN0IGFtZGdwdV9kZXZp Y2UgKmFkZXYsCj4gICB7Cj4gICAJY29uc3Qgc3RydWN0IGFtZF9wbV9mdW5jcyAqcHBfZnVuY3Mg PSBhZGV2LT5wb3dlcnBsYXkucHBfZnVuY3M7Cj4gICAKPiAtCW11dGV4X2xvY2soJmFkZXYtPnBt Lm11dGV4KTsKPiArCWd1YXJkKG11dGV4KSgmYWRldi0+cG0ubXV0ZXgpOwo+ICAgCj4gICAJaWYg KCFwcF9mdW5jcy0+Z2V0X2N1cnJlbnRfcG93ZXJfc3RhdGUpIHsKPiAgIAkJKnN0YXRlID0gYWRl di0+cG0uZHBtLnVzZXJfc3RhdGU7Cj4gLQkJZ290byBvdXQ7Cj4gKwkJcmV0dXJuOwo+ICAgCX0K PiAgIAo+ICAgCSpzdGF0ZSA9IHBwX2Z1bmNzLT5nZXRfY3VycmVudF9wb3dlcl9zdGF0ZShhZGV2 LT5wb3dlcnBsYXkucHBfaGFuZGxlKTsKPiAgIAlpZiAoKnN0YXRlIDwgUE9XRVJfU1RBVEVfVFlQ RV9ERUZBVUxUIHx8Cj4gICAJICAgICpzdGF0ZSA+IFBPV0VSX1NUQVRFX1RZUEVfSU5URVJOQUxf M0RQRVJGKQo+ICAgCQkqc3RhdGUgPSBhZGV2LT5wbS5kcG0udXNlcl9zdGF0ZTsKPiAtCj4gLW91 dDoKPiAtCW11dGV4X3VubG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+ICAgfQo+ICAgCj4gICB2b2lk IGFtZGdwdV9kcG1fc2V0X3Bvd2VyX3N0YXRlKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAo+ ICAgCQkJCWVudW0gYW1kX3BtX3N0YXRlX3R5cGUgc3RhdGUpCj4gICB7Cj4gLQltdXRleF9sb2Nr KCZhZGV2LT5wbS5tdXRleCk7Cj4gLQlhZGV2LT5wbS5kcG0udXNlcl9zdGF0ZSA9IHN0YXRlOwo+ IC0JbXV0ZXhfdW5sb2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4gKwlzY29wZWRfZ3VhcmQobXV0ZXgs ICZhZGV2LT5wbS5tdXRleCkKPiArCQlhZGV2LT5wbS5kcG0udXNlcl9zdGF0ZSA9IHN0YXRlOwo+ ICAgCj4gICAJaWYgKGlzX3N1cHBvcnRfc3dfc211KGFkZXYpKQo+ICAgCQlyZXR1cm47Cj4gQEAg LTEwNTUsMTIgKzg4MSwxMSBAQCBlbnVtIGFtZF9kcG1fZm9yY2VkX2xldmVsIGFtZGdwdV9kcG1f Z2V0X3BlcmZvcm1hbmNlX2xldmVsKHN0cnVjdCBhbWRncHVfZGV2aWNlCj4gICAJaWYgKCFwcF9m dW5jcykKPiAgIAkJcmV0dXJuIEFNRF9EUE1fRk9SQ0VEX0xFVkVMX0FVVE87Cj4gICAKPiAtCW11 dGV4X2xvY2soJmFkZXYtPnBtLm11dGV4KTsKPiArCWd1YXJkKG11dGV4KSgmYWRldi0+cG0ubXV0 ZXgpOwo+ICAgCWlmIChwcF9mdW5jcy0+Z2V0X3BlcmZvcm1hbmNlX2xldmVsKQo+ICAgCQlsZXZl bCA9IHBwX2Z1bmNzLT5nZXRfcGVyZm9ybWFuY2VfbGV2ZWwoYWRldi0+cG93ZXJwbGF5LnBwX2hh bmRsZSk7Cj4gICAJZWxzZQo+ICAgCQlsZXZlbCA9IGFkZXYtPnBtLmRwbS5mb3JjZWRfbGV2ZWw7 Cj4gLQltdXRleF91bmxvY2soJmFkZXYtPnBtLm11dGV4KTsKPiAgIAo+ICAgCXJldHVybiBsZXZl bDsKPiAgIH0KPiBAQCAtMTE1MSwxNyArOTc2LDEzIEBAIGludCBhbWRncHVfZHBtX2dldF9wcF9u dW1fc3RhdGVzKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAo+ICAgCQkJCSBzdHJ1Y3QgcHBf c3RhdGVzX2luZm8gKnN0YXRlcykKPiAgIHsKPiAgIAljb25zdCBzdHJ1Y3QgYW1kX3BtX2Z1bmNz ICpwcF9mdW5jcyA9IGFkZXYtPnBvd2VycGxheS5wcF9mdW5jczsKPiAtCWludCByZXQgPSAwOwo+ ICAgCj4gICAJaWYgKCFwcF9mdW5jcy0+Z2V0X3BwX251bV9zdGF0ZXMpCj4gICAJCXJldHVybiAt RU9QTk9UU1VQUDsKPiAgIAo+IC0JbXV0ZXhfbG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+IC0JcmV0 ID0gcHBfZnVuY3MtPmdldF9wcF9udW1fc3RhdGVzKGFkZXYtPnBvd2VycGxheS5wcF9oYW5kbGUs Cj4gKwlndWFyZChtdXRleCkoJmFkZXYtPnBtLm11dGV4KTsKPiArCXJldHVybiBwcF9mdW5jcy0+ Z2V0X3BwX251bV9zdGF0ZXMoYWRldi0+cG93ZXJwbGF5LnBwX2hhbmRsZSwKPiAgIAkJCQkJICBz dGF0ZXMpOwo+IC0JbXV0ZXhfdW5sb2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4gLQo+IC0JcmV0dXJu IHJldDsKPiAgIH0KPiAgIAo+ICAgaW50IGFtZGdwdV9kcG1fZGlzcGF0Y2hfdGFzayhzdHJ1Y3Qg YW1kZ3B1X2RldmljZSAqYWRldiwKPiBAQCAtMTE2OSwyNCArOTkwLDE5IEBAIGludCBhbWRncHVf ZHBtX2Rpc3BhdGNoX3Rhc2soc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4gICAJCQkgICAg ICBlbnVtIGFtZF9wbV9zdGF0ZV90eXBlICp1c2VyX3N0YXRlKQo+ICAgewo+ICAgCWNvbnN0IHN0 cnVjdCBhbWRfcG1fZnVuY3MgKnBwX2Z1bmNzID0gYWRldi0+cG93ZXJwbGF5LnBwX2Z1bmNzOwo+ IC0JaW50IHJldCA9IDA7Cj4gICAKPiAgIAlpZiAoIXBwX2Z1bmNzLT5kaXNwYXRjaF90YXNrcykK PiAgIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwo+ICAgCj4gLQltdXRleF9sb2NrKCZhZGV2LT5wbS5t dXRleCk7Cj4gLQlyZXQgPSBwcF9mdW5jcy0+ZGlzcGF0Y2hfdGFza3MoYWRldi0+cG93ZXJwbGF5 LnBwX2hhbmRsZSwKPiArCWd1YXJkKG11dGV4KSgmYWRldi0+cG0ubXV0ZXgpOwo+ICsJcmV0dXJu IHBwX2Z1bmNzLT5kaXNwYXRjaF90YXNrcyhhZGV2LT5wb3dlcnBsYXkucHBfaGFuZGxlLAo+ICAg CQkJCSAgICAgICB0YXNrX2lkLAo+ICAgCQkJCSAgICAgICB1c2VyX3N0YXRlKTsKPiAtCW11dGV4 X3VubG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+IC0KPiAtCXJldHVybiByZXQ7Cj4gICB9Cj4gICAK PiAgIGludCBhbWRncHVfZHBtX2dldF9wcF90YWJsZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRl diwgY2hhciAqKnRhYmxlKQo+ICAgewo+ICAgCWNvbnN0IHN0cnVjdCBhbWRfcG1fZnVuY3MgKnBw X2Z1bmNzID0gYWRldi0+cG93ZXJwbGF5LnBwX2Z1bmNzOwo+IC0JaW50IHJldCA9IDA7Cj4gICAK PiAgIAlpZiAoIXRhYmxlKQo+ICAgCQlyZXR1cm4gLUVJTlZBTDsKPiBAQCAtMTE5NCwxMiArMTAx MCw5IEBAIGludCBhbWRncHVfZHBtX2dldF9wcF90YWJsZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAq YWRldiwgY2hhciAqKnRhYmxlKQo+ICAgCWlmIChhbWRncHVfc3Jpb3ZfdmYoYWRldikgfHwgIXBw X2Z1bmNzLT5nZXRfcHBfdGFibGUgfHwgYWRldi0+c2NwbV9lbmFibGVkKQo+ICAgCQlyZXR1cm4g LUVPUE5PVFNVUFA7Cj4gICAKPiAtCW11dGV4X2xvY2soJmFkZXYtPnBtLm11dGV4KTsKPiAtCXJl dCA9IHBwX2Z1bmNzLT5nZXRfcHBfdGFibGUoYWRldi0+cG93ZXJwbGF5LnBwX2hhbmRsZSwKPiAr CWd1YXJkKG11dGV4KSgmYWRldi0+cG0ubXV0ZXgpOwo+ICsJcmV0dXJuIHBwX2Z1bmNzLT5nZXRf cHBfdGFibGUoYWRldi0+cG93ZXJwbGF5LnBwX2hhbmRsZSwKPiAgIAkJCQkgICAgIHRhYmxlKTsK PiAtCW11dGV4X3VubG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+IC0KPiAtCXJldHVybiByZXQ7Cj4g ICB9Cj4gICAKPiAgIGludCBhbWRncHVfZHBtX3NldF9maW5lX2dyYWluX2Nsa192b2woc3RydWN0 IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4gQEAgLTEyMDgsMTkgKzEwMjEsMTUgQEAgaW50IGFtZGdw dV9kcG1fc2V0X2ZpbmVfZ3JhaW5fY2xrX3ZvbChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwK PiAgIAkJCQkgICAgICB1aW50MzJfdCBzaXplKQo+ICAgewo+ICAgCWNvbnN0IHN0cnVjdCBhbWRf cG1fZnVuY3MgKnBwX2Z1bmNzID0gYWRldi0+cG93ZXJwbGF5LnBwX2Z1bmNzOwo+IC0JaW50IHJl dCA9IDA7Cj4gICAKPiAgIAlpZiAoIXBwX2Z1bmNzLT5zZXRfZmluZV9ncmFpbl9jbGtfdm9sKQo+ ICAgCQlyZXR1cm4gMDsKPiAgIAo+IC0JbXV0ZXhfbG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+IC0J cmV0ID0gcHBfZnVuY3MtPnNldF9maW5lX2dyYWluX2Nsa192b2woYWRldi0+cG93ZXJwbGF5LnBw X2hhbmRsZSwKPiArCWd1YXJkKG11dGV4KSgmYWRldi0+cG0ubXV0ZXgpOwo+ICsJcmV0dXJuIHBw X2Z1bmNzLT5zZXRfZmluZV9ncmFpbl9jbGtfdm9sKGFkZXYtPnBvd2VycGxheS5wcF9oYW5kbGUs Cj4gICAJCQkJCSAgICAgICB0eXBlLAo+ICAgCQkJCQkgICAgICAgaW5wdXQsCj4gICAJCQkJCSAg ICAgICBzaXplKTsKPiAtCW11dGV4X3VubG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+IC0KPiAtCXJl dHVybiByZXQ7Cj4gICB9Cj4gICAKPiAgIGludCBhbWRncHVfZHBtX29kbl9lZGl0X2RwbV90YWJs ZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKPiBAQCAtMTIyOSwxOSArMTAzOCwxNSBAQCBp bnQgYW1kZ3B1X2RwbV9vZG5fZWRpdF9kcG1fdGFibGUoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFk ZXYsCj4gICAJCQkJICB1aW50MzJfdCBzaXplKQo+ICAgewo+ICAgCWNvbnN0IHN0cnVjdCBhbWRf cG1fZnVuY3MgKnBwX2Z1bmNzID0gYWRldi0+cG93ZXJwbGF5LnBwX2Z1bmNzOwo+IC0JaW50IHJl dCA9IDA7Cj4gICAKPiAgIAlpZiAoIXBwX2Z1bmNzLT5vZG5fZWRpdF9kcG1fdGFibGUpCj4gICAJ CXJldHVybiAwOwo+ICAgCj4gLQltdXRleF9sb2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4gLQlyZXQg PSBwcF9mdW5jcy0+b2RuX2VkaXRfZHBtX3RhYmxlKGFkZXYtPnBvd2VycGxheS5wcF9oYW5kbGUs Cj4gKwlndWFyZChtdXRleCkoJmFkZXYtPnBtLm11dGV4KTsKPiArCXJldHVybiBwcF9mdW5jcy0+ b2RuX2VkaXRfZHBtX3RhYmxlKGFkZXYtPnBvd2VycGxheS5wcF9oYW5kbGUsCj4gICAJCQkJCSAg IHR5cGUsCj4gICAJCQkJCSAgIGlucHV0LAo+ICAgCQkJCQkgICBzaXplKTsKPiAtCW11dGV4X3Vu bG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+IC0KPiAtCXJldHVybiByZXQ7Cj4gICB9Cj4gICAKPiAg IGludCBhbWRncHVfZHBtX2VtaXRfY2xvY2tfbGV2ZWxzKHN0cnVjdCBhbWRncHVfZGV2aWNlICph ZGV2LAo+IEBAIC0xMjUwLDUyICsxMDU1LDQwIEBAIGludCBhbWRncHVfZHBtX2VtaXRfY2xvY2tf bGV2ZWxzKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAo+ICAgCQkJCSAgaW50ICpvZmZzZXQp Cj4gICB7Cj4gICAJY29uc3Qgc3RydWN0IGFtZF9wbV9mdW5jcyAqcHBfZnVuY3MgPSBhZGV2LT5w b3dlcnBsYXkucHBfZnVuY3M7Cj4gLQlpbnQgcmV0ID0gMDsKPiAgIAo+ICAgCWlmICghcHBfZnVu Y3MtPmVtaXRfY2xvY2tfbGV2ZWxzKQo+ICAgCQlyZXR1cm4gLUVOT0VOVDsKPiAgIAo+IC0JbXV0 ZXhfbG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+IC0JcmV0ID0gcHBfZnVuY3MtPmVtaXRfY2xvY2tf bGV2ZWxzKGFkZXYtPnBvd2VycGxheS5wcF9oYW5kbGUsCj4gKwlndWFyZChtdXRleCkoJmFkZXYt PnBtLm11dGV4KTsKPiArCXJldHVybiBwcF9mdW5jcy0+ZW1pdF9jbG9ja19sZXZlbHMoYWRldi0+ cG93ZXJwbGF5LnBwX2hhbmRsZSwKPiAgIAkJCQkJICAgdHlwZSwKPiAgIAkJCQkJICAgYnVmLAo+ ICAgCQkJCQkgICBvZmZzZXQpOwo+IC0JbXV0ZXhfdW5sb2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4g LQo+IC0JcmV0dXJuIHJldDsKPiAgIH0KPiAgIAo+ICAgaW50IGFtZGdwdV9kcG1fc2V0X3BwZmVh dHVyZV9zdGF0dXMoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4gICAJCQkJICAgIHVpbnQ2 NF90IHBwZmVhdHVyZV9tYXNrcykKPiAgIHsKPiAgIAljb25zdCBzdHJ1Y3QgYW1kX3BtX2Z1bmNz ICpwcF9mdW5jcyA9IGFkZXYtPnBvd2VycGxheS5wcF9mdW5jczsKPiAtCWludCByZXQgPSAwOwo+ ICAgCj4gICAJaWYgKCFwcF9mdW5jcy0+c2V0X3BwZmVhdHVyZV9zdGF0dXMpCj4gICAJCXJldHVy biAwOwo+ICAgCj4gLQltdXRleF9sb2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4gLQlyZXQgPSBwcF9m dW5jcy0+c2V0X3BwZmVhdHVyZV9zdGF0dXMoYWRldi0+cG93ZXJwbGF5LnBwX2hhbmRsZSwKPiAr CWd1YXJkKG11dGV4KSgmYWRldi0+cG0ubXV0ZXgpOwo+ICsJcmV0dXJuIHBwX2Z1bmNzLT5zZXRf cHBmZWF0dXJlX3N0YXR1cyhhZGV2LT5wb3dlcnBsYXkucHBfaGFuZGxlLAo+ICAgCQkJCQkgICAg IHBwZmVhdHVyZV9tYXNrcyk7Cj4gLQltdXRleF91bmxvY2soJmFkZXYtPnBtLm11dGV4KTsKPiAt Cj4gLQlyZXR1cm4gcmV0Owo+ICAgfQo+ICAgCj4gICBpbnQgYW1kZ3B1X2RwbV9nZXRfcHBmZWF0 dXJlX3N0YXR1cyhzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwgY2hhciAqYnVmKQo+ICAgewo+ ICAgCWNvbnN0IHN0cnVjdCBhbWRfcG1fZnVuY3MgKnBwX2Z1bmNzID0gYWRldi0+cG93ZXJwbGF5 LnBwX2Z1bmNzOwo+IC0JaW50IHJldCA9IDA7Cj4gICAKPiAgIAlpZiAoIXBwX2Z1bmNzLT5nZXRf cHBmZWF0dXJlX3N0YXR1cykKPiAgIAkJcmV0dXJuIDA7Cj4gICAKPiAtCW11dGV4X2xvY2soJmFk ZXYtPnBtLm11dGV4KTsKPiAtCXJldCA9IHBwX2Z1bmNzLT5nZXRfcHBmZWF0dXJlX3N0YXR1cyhh ZGV2LT5wb3dlcnBsYXkucHBfaGFuZGxlLAo+ICsJZ3VhcmQobXV0ZXgpKCZhZGV2LT5wbS5tdXRl eCk7Cj4gKwlyZXR1cm4gcHBfZnVuY3MtPmdldF9wcGZlYXR1cmVfc3RhdHVzKGFkZXYtPnBvd2Vy cGxheS5wcF9oYW5kbGUsCj4gICAJCQkJCSAgICAgYnVmKTsKPiAtCW11dGV4X3VubG9jaygmYWRl di0+cG0ubXV0ZXgpOwo+IC0KPiAtCXJldHVybiByZXQ7Cj4gICB9Cj4gICAKPiAgIGludCBhbWRn cHVfZHBtX2ZvcmNlX2Nsb2NrX2xldmVsKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAo+IEBA IC0xMzAzLDMzICsxMDk2LDI1IEBAIGludCBhbWRncHVfZHBtX2ZvcmNlX2Nsb2NrX2xldmVsKHN0 cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAo+ICAgCQkJCSB1aW50MzJfdCBtYXNrKQo+ICAgewo+ ICAgCWNvbnN0IHN0cnVjdCBhbWRfcG1fZnVuY3MgKnBwX2Z1bmNzID0gYWRldi0+cG93ZXJwbGF5 LnBwX2Z1bmNzOwo+IC0JaW50IHJldCA9IDA7Cj4gICAKPiAgIAlpZiAoIXBwX2Z1bmNzLT5mb3Jj ZV9jbG9ja19sZXZlbCkKPiAgIAkJcmV0dXJuIDA7Cj4gICAKPiAtCW11dGV4X2xvY2soJmFkZXYt PnBtLm11dGV4KTsKPiAtCXJldCA9IHBwX2Z1bmNzLT5mb3JjZV9jbG9ja19sZXZlbChhZGV2LT5w b3dlcnBsYXkucHBfaGFuZGxlLAo+ICsJZ3VhcmQobXV0ZXgpKCZhZGV2LT5wbS5tdXRleCk7Cj4g KwlyZXR1cm4gcHBfZnVuY3MtPmZvcmNlX2Nsb2NrX2xldmVsKGFkZXYtPnBvd2VycGxheS5wcF9o YW5kbGUsCj4gICAJCQkJCSAgdHlwZSwKPiAgIAkJCQkJICBtYXNrKTsKPiAtCW11dGV4X3VubG9j aygmYWRldi0+cG0ubXV0ZXgpOwo+IC0KPiAtCXJldHVybiByZXQ7Cj4gICB9Cj4gICAKPiAgIGlu dCBhbWRncHVfZHBtX2dldF9zY2xrX29kKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQo+ICAg ewo+ICAgCWNvbnN0IHN0cnVjdCBhbWRfcG1fZnVuY3MgKnBwX2Z1bmNzID0gYWRldi0+cG93ZXJw bGF5LnBwX2Z1bmNzOwo+IC0JaW50IHJldCA9IDA7Cj4gICAKPiAgIAlpZiAoIXBwX2Z1bmNzLT5n ZXRfc2Nsa19vZCkKPiAgIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwo+ICAgCj4gLQltdXRleF9sb2Nr KCZhZGV2LT5wbS5tdXRleCk7Cj4gLQlyZXQgPSBwcF9mdW5jcy0+Z2V0X3NjbGtfb2QoYWRldi0+ cG93ZXJwbGF5LnBwX2hhbmRsZSk7Cj4gLQltdXRleF91bmxvY2soJmFkZXYtPnBtLm11dGV4KTsK PiAtCj4gLQlyZXR1cm4gcmV0Owo+ICsJZ3VhcmQobXV0ZXgpKCZhZGV2LT5wbS5tdXRleCk7Cj4g KwlyZXR1cm4gcHBfZnVuY3MtPmdldF9zY2xrX29kKGFkZXYtPnBvd2VycGxheS5wcF9oYW5kbGUp Owo+ICAgfQo+ICAgCj4gICBpbnQgYW1kZ3B1X2RwbV9zZXRfc2Nsa19vZChzdHJ1Y3QgYW1kZ3B1 X2RldmljZSAqYWRldiwgdWludDMyX3QgdmFsdWUpCj4gQEAgLTEzMzksMTAgKzExMjQsMTAgQEAg aW50IGFtZGdwdV9kcG1fc2V0X3NjbGtfb2Qoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsIHVp bnQzMl90IHZhbHVlKQo+ICAgCWlmIChpc19zdXBwb3J0X3N3X3NtdShhZGV2KSkKPiAgIAkJcmV0 dXJuIC1FT1BOT1RTVVBQOwo+ICAgCj4gLQltdXRleF9sb2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4g LQlpZiAocHBfZnVuY3MtPnNldF9zY2xrX29kKQo+IC0JCXBwX2Z1bmNzLT5zZXRfc2Nsa19vZChh ZGV2LT5wb3dlcnBsYXkucHBfaGFuZGxlLCB2YWx1ZSk7Cj4gLQltdXRleF91bmxvY2soJmFkZXYt PnBtLm11dGV4KTsKPiArCXNjb3BlZF9ndWFyZChtdXRleCwgJmFkZXYtPnBtLm11dGV4KSB7Cj4g KwkJaWYgKHBwX2Z1bmNzLT5zZXRfc2Nsa19vZCkKClNpbmNlIHRoaXMgaXMgcmVkb25lIGFueXdh eSwgYmV0dGVyIHRvIHJldmVyc2UgdGhlIG9yZGVyIC0gY2hlY2sgaWYgCnBvaW50ZXIgZXhpc3Rz IGFuZCB0aGVuIHRha2UgYSBtdXRleCBndWFyZCBiZWZvcmUgc2V0dGluZy4gVGhhdCBpcyBtb3Jl IAphbGlnbmVkIHRvIHNjb3BlZF9ndWFyZC4KCj4gKwkJCXBwX2Z1bmNzLT5zZXRfc2Nsa19vZChh ZGV2LT5wb3dlcnBsYXkucHBfaGFuZGxlLCB2YWx1ZSk7Cj4gKwl9Cj4gICAKPiAgIAlpZiAoYW1k Z3B1X2RwbV9kaXNwYXRjaF90YXNrKGFkZXYsCj4gICAJCQkJICAgICBBTURfUFBfVEFTS19SRUFE SlVTVF9QT1dFUl9TVEFURSwKPiBAQCAtMTM1NywxNiArMTE0MiwxMiBAQCBpbnQgYW1kZ3B1X2Rw bV9zZXRfc2Nsa19vZChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwgdWludDMyX3QgdmFsdWUp Cj4gICBpbnQgYW1kZ3B1X2RwbV9nZXRfbWNsa19vZChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRl dikKPiAgIHsKPiAgIAljb25zdCBzdHJ1Y3QgYW1kX3BtX2Z1bmNzICpwcF9mdW5jcyA9IGFkZXYt PnBvd2VycGxheS5wcF9mdW5jczsKPiAtCWludCByZXQgPSAwOwo+ICAgCj4gICAJaWYgKCFwcF9m dW5jcy0+Z2V0X21jbGtfb2QpCj4gICAJCXJldHVybiAtRU9QTk9UU1VQUDsKPiAgIAo+IC0JbXV0 ZXhfbG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+IC0JcmV0ID0gcHBfZnVuY3MtPmdldF9tY2xrX29k KGFkZXYtPnBvd2VycGxheS5wcF9oYW5kbGUpOwo+IC0JbXV0ZXhfdW5sb2NrKCZhZGV2LT5wbS5t dXRleCk7Cj4gLQo+IC0JcmV0dXJuIHJldDsKPiArCWd1YXJkKG11dGV4KSgmYWRldi0+cG0ubXV0 ZXgpOwo+ICsJcmV0dXJuIHBwX2Z1bmNzLT5nZXRfbWNsa19vZChhZGV2LT5wb3dlcnBsYXkucHBf aGFuZGxlKTsKPiAgIH0KPiAgIAo+ICAgaW50IGFtZGdwdV9kcG1fc2V0X21jbGtfb2Qoc3RydWN0 IGFtZGdwdV9kZXZpY2UgKmFkZXYsIHVpbnQzMl90IHZhbHVlKQo+IEBAIC0xMzc2LDEwICsxMTU3 LDEwIEBAIGludCBhbWRncHVfZHBtX3NldF9tY2xrX29kKHN0cnVjdCBhbWRncHVfZGV2aWNlICph ZGV2LCB1aW50MzJfdCB2YWx1ZSkKPiAgIAlpZiAoaXNfc3VwcG9ydF9zd19zbXUoYWRldikpCj4g ICAJCXJldHVybiAtRU9QTk9UU1VQUDsKPiAgIAo+IC0JbXV0ZXhfbG9jaygmYWRldi0+cG0ubXV0 ZXgpOwo+IC0JaWYgKHBwX2Z1bmNzLT5zZXRfbWNsa19vZCkKPiAtCQlwcF9mdW5jcy0+c2V0X21j bGtfb2QoYWRldi0+cG93ZXJwbGF5LnBwX2hhbmRsZSwgdmFsdWUpOwo+IC0JbXV0ZXhfdW5sb2Nr KCZhZGV2LT5wbS5tdXRleCk7Cj4gKwlzY29wZWRfZ3VhcmQobXV0ZXgsICZhZGV2LT5wbS5tdXRl eCkgewo+ICsJCWlmIChwcF9mdW5jcy0+c2V0X21jbGtfb2QpCgpTYW1lIGFzIGVhcmxpZXIsIGNv bnNpZGVyIHJldmVyc2luZyB0aGUgb3JkZXIuCj4gKwkJCXBwX2Z1bmNzLT5zZXRfbWNsa19vZChh ZGV2LT5wb3dlcnBsYXkucHBfaGFuZGxlLCB2YWx1ZSk7Cj4gKwl9Cj4gICAKPiAgIAlpZiAoYW1k Z3B1X2RwbV9kaXNwYXRjaF90YXNrKGFkZXYsCj4gICAJCQkJICAgICBBTURfUFBfVEFTS19SRUFE SlVTVF9QT1dFUl9TVEFURSwKPiBAQCAtMTM5NSwxNzAgKzExNzYsMTMwIEBAIGludCBhbWRncHVf ZHBtX2dldF9wb3dlcl9wcm9maWxlX21vZGUoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4g ICAJCQkJICAgICAgY2hhciAqYnVmKQo+ICAgewo+ICAgCWNvbnN0IHN0cnVjdCBhbWRfcG1fZnVu Y3MgKnBwX2Z1bmNzID0gYWRldi0+cG93ZXJwbGF5LnBwX2Z1bmNzOwo+IC0JaW50IHJldCA9IDA7 Cj4gICAKPiAgIAlpZiAoIXBwX2Z1bmNzLT5nZXRfcG93ZXJfcHJvZmlsZV9tb2RlKQo+ICAgCQly ZXR1cm4gLUVPUE5PVFNVUFA7Cj4gICAKPiAtCW11dGV4X2xvY2soJmFkZXYtPnBtLm11dGV4KTsK PiAtCXJldCA9IHBwX2Z1bmNzLT5nZXRfcG93ZXJfcHJvZmlsZV9tb2RlKGFkZXYtPnBvd2VycGxh eS5wcF9oYW5kbGUsCj4gKwlndWFyZChtdXRleCkoJmFkZXYtPnBtLm11dGV4KTsKPiArCXJldHVy biBwcF9mdW5jcy0+Z2V0X3Bvd2VyX3Byb2ZpbGVfbW9kZShhZGV2LT5wb3dlcnBsYXkucHBfaGFu ZGxlLAo+ICAgCQkJCQkgICAgICAgYnVmKTsKPiAtCW11dGV4X3VubG9jaygmYWRldi0+cG0ubXV0 ZXgpOwo+IC0KPiAtCXJldHVybiByZXQ7Cj4gICB9Cj4gICAKPiAgIGludCBhbWRncHVfZHBtX3Nl dF9wb3dlcl9wcm9maWxlX21vZGUoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4gICAJCQkJ ICAgICAgbG9uZyAqaW5wdXQsIHVpbnQzMl90IHNpemUpCj4gICB7Cj4gICAJY29uc3Qgc3RydWN0 IGFtZF9wbV9mdW5jcyAqcHBfZnVuY3MgPSBhZGV2LT5wb3dlcnBsYXkucHBfZnVuY3M7Cj4gLQlp bnQgcmV0ID0gMDsKPiAgIAo+ICAgCWlmICghcHBfZnVuY3MtPnNldF9wb3dlcl9wcm9maWxlX21v ZGUpCj4gICAJCXJldHVybiAwOwo+ICAgCj4gLQltdXRleF9sb2NrKCZhZGV2LT5wbS5tdXRleCk7 Cj4gLQlyZXQgPSBwcF9mdW5jcy0+c2V0X3Bvd2VyX3Byb2ZpbGVfbW9kZShhZGV2LT5wb3dlcnBs YXkucHBfaGFuZGxlLAo+ICsJZ3VhcmQobXV0ZXgpKCZhZGV2LT5wbS5tdXRleCk7Cj4gKwlyZXR1 cm4gcHBfZnVuY3MtPnNldF9wb3dlcl9wcm9maWxlX21vZGUoYWRldi0+cG93ZXJwbGF5LnBwX2hh bmRsZSwKPiAgIAkJCQkJICAgICAgIGlucHV0LAo+ICAgCQkJCQkgICAgICAgc2l6ZSk7Cj4gLQlt dXRleF91bmxvY2soJmFkZXYtPnBtLm11dGV4KTsKPiAtCj4gLQlyZXR1cm4gcmV0Owo+ICAgfQo+ ICAgCj4gICBpbnQgYW1kZ3B1X2RwbV9nZXRfZ3B1X21ldHJpY3Moc3RydWN0IGFtZGdwdV9kZXZp Y2UgKmFkZXYsIHZvaWQgKip0YWJsZSkKPiAgIHsKPiAgIAljb25zdCBzdHJ1Y3QgYW1kX3BtX2Z1 bmNzICpwcF9mdW5jcyA9IGFkZXYtPnBvd2VycGxheS5wcF9mdW5jczsKPiAtCWludCByZXQgPSAw Owo+ICAgCj4gICAJaWYgKCFwcF9mdW5jcy0+Z2V0X2dwdV9tZXRyaWNzKQo+ICAgCQlyZXR1cm4g MDsKPiAgIAo+IC0JbXV0ZXhfbG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+IC0JcmV0ID0gcHBfZnVu Y3MtPmdldF9ncHVfbWV0cmljcyhhZGV2LT5wb3dlcnBsYXkucHBfaGFuZGxlLAo+ICsJZ3VhcmQo bXV0ZXgpKCZhZGV2LT5wbS5tdXRleCk7Cj4gKwlyZXR1cm4gcHBfZnVuY3MtPmdldF9ncHVfbWV0 cmljcyhhZGV2LT5wb3dlcnBsYXkucHBfaGFuZGxlLAo+ICAgCQkJCQl0YWJsZSk7Cj4gLQltdXRl eF91bmxvY2soJmFkZXYtPnBtLm11dGV4KTsKPiAtCj4gLQlyZXR1cm4gcmV0Owo+ICAgfQo+ICAg Cj4gICBzc2l6ZV90IGFtZGdwdV9kcG1fZ2V0X3BtX21ldHJpY3Moc3RydWN0IGFtZGdwdV9kZXZp Y2UgKmFkZXYsIHZvaWQgKnBtX21ldHJpY3MsCj4gICAJCQkJICBzaXplX3Qgc2l6ZSkKPiAgIHsK PiAgIAljb25zdCBzdHJ1Y3QgYW1kX3BtX2Z1bmNzICpwcF9mdW5jcyA9IGFkZXYtPnBvd2VycGxh eS5wcF9mdW5jczsKPiAtCWludCByZXQgPSAwOwo+ICAgCj4gICAJaWYgKCFwcF9mdW5jcy0+Z2V0 X3BtX21ldHJpY3MpCj4gICAJCXJldHVybiAtRU9QTk9UU1VQUDsKPiAgIAo+IC0JbXV0ZXhfbG9j aygmYWRldi0+cG0ubXV0ZXgpOwo+IC0JcmV0ID0gcHBfZnVuY3MtPmdldF9wbV9tZXRyaWNzKGFk ZXYtPnBvd2VycGxheS5wcF9oYW5kbGUsIHBtX21ldHJpY3MsCj4gKwlndWFyZChtdXRleCkoJmFk ZXYtPnBtLm11dGV4KTsKPiArCXJldHVybiBwcF9mdW5jcy0+Z2V0X3BtX21ldHJpY3MoYWRldi0+ cG93ZXJwbGF5LnBwX2hhbmRsZSwgcG1fbWV0cmljcywKPiAgIAkJCQkgICAgICAgc2l6ZSk7Cj4g LQltdXRleF91bmxvY2soJmFkZXYtPnBtLm11dGV4KTsKPiAtCj4gLQlyZXR1cm4gcmV0Owo+ICAg fQo+ICAgCj4gICBpbnQgYW1kZ3B1X2RwbV9nZXRfZmFuX2NvbnRyb2xfbW9kZShzdHJ1Y3QgYW1k Z3B1X2RldmljZSAqYWRldiwKPiAgIAkJCQkgICAgdWludDMyX3QgKmZhbl9tb2RlKQo+ICAgewo+ ICAgCWNvbnN0IHN0cnVjdCBhbWRfcG1fZnVuY3MgKnBwX2Z1bmNzID0gYWRldi0+cG93ZXJwbGF5 LnBwX2Z1bmNzOwo+IC0JaW50IHJldCA9IDA7Cj4gICAKPiAgIAlpZiAoIXBwX2Z1bmNzLT5nZXRf ZmFuX2NvbnRyb2xfbW9kZSkKPiAgIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwo+ICAgCj4gLQltdXRl eF9sb2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4gLQlyZXQgPSBwcF9mdW5jcy0+Z2V0X2Zhbl9jb250 cm9sX21vZGUoYWRldi0+cG93ZXJwbGF5LnBwX2hhbmRsZSwKPiArCWd1YXJkKG11dGV4KSgmYWRl di0+cG0ubXV0ZXgpOwo+ICsJcmV0dXJuIHBwX2Z1bmNzLT5nZXRfZmFuX2NvbnRyb2xfbW9kZShh ZGV2LT5wb3dlcnBsYXkucHBfaGFuZGxlLAo+ICAgCQkJCQkgICAgIGZhbl9tb2RlKTsKPiAtCW11 dGV4X3VubG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+IC0KPiAtCXJldHVybiByZXQ7Cj4gICB9Cj4g ICAKPiAgIGludCBhbWRncHVfZHBtX3NldF9mYW5fc3BlZWRfcHdtKHN0cnVjdCBhbWRncHVfZGV2 aWNlICphZGV2LAo+ICAgCQkJCSB1aW50MzJfdCBzcGVlZCkKPiAgIHsKPiAgIAljb25zdCBzdHJ1 Y3QgYW1kX3BtX2Z1bmNzICpwcF9mdW5jcyA9IGFkZXYtPnBvd2VycGxheS5wcF9mdW5jczsKPiAt CWludCByZXQgPSAwOwo+ICAgCj4gICAJaWYgKCFwcF9mdW5jcy0+c2V0X2Zhbl9zcGVlZF9wd20p Cj4gICAJCXJldHVybiAtRU9QTk9UU1VQUDsKPiAgIAo+IC0JbXV0ZXhfbG9jaygmYWRldi0+cG0u bXV0ZXgpOwo+IC0JcmV0ID0gcHBfZnVuY3MtPnNldF9mYW5fc3BlZWRfcHdtKGFkZXYtPnBvd2Vy cGxheS5wcF9oYW5kbGUsCj4gKwlndWFyZChtdXRleCkoJmFkZXYtPnBtLm11dGV4KTsKPiArCXJl dHVybiBwcF9mdW5jcy0+c2V0X2Zhbl9zcGVlZF9wd20oYWRldi0+cG93ZXJwbGF5LnBwX2hhbmRs ZSwKPiAgIAkJCQkJICBzcGVlZCk7Cj4gLQltdXRleF91bmxvY2soJmFkZXYtPnBtLm11dGV4KTsK PiAtCj4gLQlyZXR1cm4gcmV0Owo+ICAgfQo+ICAgCj4gICBpbnQgYW1kZ3B1X2RwbV9nZXRfZmFu X3NwZWVkX3B3bShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKPiAgIAkJCQkgdWludDMyX3Qg KnNwZWVkKQo+ICAgewo+ICAgCWNvbnN0IHN0cnVjdCBhbWRfcG1fZnVuY3MgKnBwX2Z1bmNzID0g YWRldi0+cG93ZXJwbGF5LnBwX2Z1bmNzOwo+IC0JaW50IHJldCA9IDA7Cj4gICAKPiAgIAlpZiAo IXBwX2Z1bmNzLT5nZXRfZmFuX3NwZWVkX3B3bSkKPiAgIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwo+ ICAgCj4gLQltdXRleF9sb2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4gLQlyZXQgPSBwcF9mdW5jcy0+ Z2V0X2Zhbl9zcGVlZF9wd20oYWRldi0+cG93ZXJwbGF5LnBwX2hhbmRsZSwKPiArCWd1YXJkKG11 dGV4KSgmYWRldi0+cG0ubXV0ZXgpOwo+ICsJcmV0dXJuIHBwX2Z1bmNzLT5nZXRfZmFuX3NwZWVk X3B3bShhZGV2LT5wb3dlcnBsYXkucHBfaGFuZGxlLAo+ICAgCQkJCQkgIHNwZWVkKTsKPiAtCW11 dGV4X3VubG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+IC0KPiAtCXJldHVybiByZXQ7Cj4gICB9Cj4g ICAKPiAgIGludCBhbWRncHVfZHBtX2dldF9mYW5fc3BlZWRfcnBtKHN0cnVjdCBhbWRncHVfZGV2 aWNlICphZGV2LAo+ICAgCQkJCSB1aW50MzJfdCAqc3BlZWQpCj4gICB7Cj4gICAJY29uc3Qgc3Ry dWN0IGFtZF9wbV9mdW5jcyAqcHBfZnVuY3MgPSBhZGV2LT5wb3dlcnBsYXkucHBfZnVuY3M7Cj4g LQlpbnQgcmV0ID0gMDsKPiAgIAo+ICAgCWlmICghcHBfZnVuY3MtPmdldF9mYW5fc3BlZWRfcnBt KQo+ICAgCQlyZXR1cm4gLUVPUE5PVFNVUFA7Cj4gICAKPiAtCW11dGV4X2xvY2soJmFkZXYtPnBt Lm11dGV4KTsKPiAtCXJldCA9IHBwX2Z1bmNzLT5nZXRfZmFuX3NwZWVkX3JwbShhZGV2LT5wb3dl cnBsYXkucHBfaGFuZGxlLAo+ICsJZ3VhcmQobXV0ZXgpKCZhZGV2LT5wbS5tdXRleCk7Cj4gKwly ZXR1cm4gcHBfZnVuY3MtPmdldF9mYW5fc3BlZWRfcnBtKGFkZXYtPnBvd2VycGxheS5wcF9oYW5k bGUsCj4gICAJCQkJCSAgc3BlZWQpOwo+IC0JbXV0ZXhfdW5sb2NrKCZhZGV2LT5wbS5tdXRleCk7 Cj4gLQo+IC0JcmV0dXJuIHJldDsKPiAgIH0KPiAgIAo+ICAgaW50IGFtZGdwdV9kcG1fc2V0X2Zh bl9zcGVlZF9ycG0oc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4gICAJCQkJIHVpbnQzMl90 IHNwZWVkKQo+ICAgewo+ICAgCWNvbnN0IHN0cnVjdCBhbWRfcG1fZnVuY3MgKnBwX2Z1bmNzID0g YWRldi0+cG93ZXJwbGF5LnBwX2Z1bmNzOwo+IC0JaW50IHJldCA9IDA7Cj4gICAKPiAgIAlpZiAo IXBwX2Z1bmNzLT5zZXRfZmFuX3NwZWVkX3JwbSkKPiAgIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwo+ ICAgCj4gLQltdXRleF9sb2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4gLQlyZXQgPSBwcF9mdW5jcy0+ c2V0X2Zhbl9zcGVlZF9ycG0oYWRldi0+cG93ZXJwbGF5LnBwX2hhbmRsZSwKPiArCWd1YXJkKG11 dGV4KSgmYWRldi0+cG0ubXV0ZXgpOwo+ICsJcmV0dXJuIHBwX2Z1bmNzLT5zZXRfZmFuX3NwZWVk X3JwbShhZGV2LT5wb3dlcnBsYXkucHBfaGFuZGxlLAo+ICAgCQkJCQkgIHNwZWVkKTsKPiAtCW11 dGV4X3VubG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+IC0KPiAtCXJldHVybiByZXQ7Cj4gICB9Cj4g ICAKPiAgIGludCBhbWRncHVfZHBtX3NldF9mYW5fY29udHJvbF9tb2RlKHN0cnVjdCBhbWRncHVf ZGV2aWNlICphZGV2LAo+ICAgCQkJCSAgICB1aW50MzJfdCBtb2RlKQo+ICAgewo+ICAgCWNvbnN0 IHN0cnVjdCBhbWRfcG1fZnVuY3MgKnBwX2Z1bmNzID0gYWRldi0+cG93ZXJwbGF5LnBwX2Z1bmNz Owo+IC0JaW50IHJldCA9IDA7Cj4gICAKPiAgIAlpZiAoIXBwX2Z1bmNzLT5zZXRfZmFuX2NvbnRy b2xfbW9kZSkKPiAgIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwo+ICAgCj4gLQltdXRleF9sb2NrKCZh ZGV2LT5wbS5tdXRleCk7Cj4gLQlyZXQgPSBwcF9mdW5jcy0+c2V0X2Zhbl9jb250cm9sX21vZGUo YWRldi0+cG93ZXJwbGF5LnBwX2hhbmRsZSwKPiArCWd1YXJkKG11dGV4KSgmYWRldi0+cG0ubXV0 ZXgpOwo+ICsJcmV0dXJuIHBwX2Z1bmNzLT5zZXRfZmFuX2NvbnRyb2xfbW9kZShhZGV2LT5wb3dl cnBsYXkucHBfaGFuZGxlLAo+ICAgCQkJCQkgICAgIG1vZGUpOwo+IC0JbXV0ZXhfdW5sb2NrKCZh ZGV2LT5wbS5tdXRleCk7Cj4gLQo+IC0JcmV0dXJuIHJldDsKPiAgIH0KPiAgIAo+ICAgaW50IGFt ZGdwdV9kcG1fZ2V0X3Bvd2VyX2xpbWl0KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAo+IEBA IC0xNTY3LDE5ICsxMzA4LDE1IEBAIGludCBhbWRncHVfZHBtX2dldF9wb3dlcl9saW1pdChzdHJ1 Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKPiAgIAkJCSAgICAgICBlbnVtIHBwX3Bvd2VyX3R5cGUg cG93ZXJfdHlwZSkKPiAgIHsKPiAgIAljb25zdCBzdHJ1Y3QgYW1kX3BtX2Z1bmNzICpwcF9mdW5j cyA9IGFkZXYtPnBvd2VycGxheS5wcF9mdW5jczsKPiAtCWludCByZXQgPSAwOwo+ICAgCj4gICAJ aWYgKCFwcF9mdW5jcy0+Z2V0X3Bvd2VyX2xpbWl0KQo+ICAgCQlyZXR1cm4gLUVPUE5PVFNVUFA7 Cj4gICAKPiAtCW11dGV4X2xvY2soJmFkZXYtPnBtLm11dGV4KTsKPiAtCXJldCA9IHBwX2Z1bmNz LT5nZXRfcG93ZXJfbGltaXQoYWRldi0+cG93ZXJwbGF5LnBwX2hhbmRsZSwKPiArCWd1YXJkKG11 dGV4KSgmYWRldi0+cG0ubXV0ZXgpOwo+ICsJcmV0dXJuIHBwX2Z1bmNzLT5nZXRfcG93ZXJfbGlt aXQoYWRldi0+cG93ZXJwbGF5LnBwX2hhbmRsZSwKPiAgIAkJCQkJbGltaXQsCj4gICAJCQkJCXBw X2xpbWl0X2xldmVsLAo+ICAgCQkJCQlwb3dlcl90eXBlKTsKPiAtCW11dGV4X3VubG9jaygmYWRl di0+cG0ubXV0ZXgpOwo+IC0KPiAtCXJldHVybiByZXQ7Cj4gICB9Cj4gICAKPiAgIGludCBhbWRn cHVfZHBtX3NldF9wb3dlcl9saW1pdChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKPiBAQCAt MTU4NywxNyArMTMyNCwxMyBAQCBpbnQgYW1kZ3B1X2RwbV9zZXRfcG93ZXJfbGltaXQoc3RydWN0 IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4gICAJCQkgICAgICAgdWludDMyX3QgbGltaXQpCj4gICB7 Cj4gICAJY29uc3Qgc3RydWN0IGFtZF9wbV9mdW5jcyAqcHBfZnVuY3MgPSBhZGV2LT5wb3dlcnBs YXkucHBfZnVuY3M7Cj4gLQlpbnQgcmV0ID0gMDsKPiAgIAo+ICAgCWlmICghcHBfZnVuY3MtPnNl dF9wb3dlcl9saW1pdCkKPiAgIAkJcmV0dXJuIC1FSU5WQUw7Cj4gICAKPiAtCW11dGV4X2xvY2so JmFkZXYtPnBtLm11dGV4KTsKPiAtCXJldCA9IHBwX2Z1bmNzLT5zZXRfcG93ZXJfbGltaXQoYWRl di0+cG93ZXJwbGF5LnBwX2hhbmRsZSwKPiArCWd1YXJkKG11dGV4KSgmYWRldi0+cG0ubXV0ZXgp Owo+ICsJcmV0dXJuIHBwX2Z1bmNzLT5zZXRfcG93ZXJfbGltaXQoYWRldi0+cG93ZXJwbGF5LnBw X2hhbmRsZSwKPiAgIAkJCQkJbGltaXRfdHlwZSwgbGltaXQpOwo+IC0JbXV0ZXhfdW5sb2NrKCZh ZGV2LT5wbS5tdXRleCk7Cj4gLQo+IC0JcmV0dXJuIHJldDsKPiAgIH0KPiAgIAo+ICAgaW50IGFt ZGdwdV9kcG1faXNfY2Nsa19kcG1fc3VwcG9ydGVkKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2 KQo+IEBAIC0xNjA3LDkgKzEzNDAsOCBAQCBpbnQgYW1kZ3B1X2RwbV9pc19jY2xrX2RwbV9zdXBw b3J0ZWQoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCj4gICAJaWYgKCFpc19zdXBwb3J0X3N3 X3NtdShhZGV2KSkKPiAgIAkJcmV0dXJuIGZhbHNlOwo+ICAgCj4gLQltdXRleF9sb2NrKCZhZGV2 LT5wbS5tdXRleCk7Cj4gKwlndWFyZChtdXRleCkoJmFkZXYtPnBtLm11dGV4KTsKPiAgIAljY2xr X2RwbV9zdXBwb3J0ZWQgPSBpc19zdXBwb3J0X2NjbGtfZHBtKGFkZXYpOwoKTWF5IHJldHVybiBk aXJlY3RseSBoZXJlLgoKClRoYW5rcywKTGlqbwoKPiAtCW11dGV4X3VubG9jaygmYWRldi0+cG0u bXV0ZXgpOwo+ICAgCj4gICAJcmV0dXJuIChpbnQpY2Nsa19kcG1fc3VwcG9ydGVkOwo+ICAgfQo+ IEBAIC0xNjIyLDEwICsxMzU0LDkgQEAgaW50IGFtZGdwdV9kcG1fZGVidWdmc19wcmludF9jdXJy ZW50X3BlcmZvcm1hbmNlX2xldmVsKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGUKPiAgIAlpZiAo IXBwX2Z1bmNzLT5kZWJ1Z2ZzX3ByaW50X2N1cnJlbnRfcGVyZm9ybWFuY2VfbGV2ZWwpCj4gICAJ CXJldHVybiAtRU9QTk9UU1VQUDsKPiAgIAo+IC0JbXV0ZXhfbG9jaygmYWRldi0+cG0ubXV0ZXgp Owo+ICsJZ3VhcmQobXV0ZXgpKCZhZGV2LT5wbS5tdXRleCk7Cj4gICAJcHBfZnVuY3MtPmRlYnVn ZnNfcHJpbnRfY3VycmVudF9wZXJmb3JtYW5jZV9sZXZlbChhZGV2LT5wb3dlcnBsYXkucHBfaGFu ZGxlLAo+ICAgCQkJCQkJCSAgbSk7Cj4gLQltdXRleF91bmxvY2soJmFkZXYtPnBtLm11dGV4KTsK PiAgIAo+ICAgCXJldHVybiAwOwo+ICAgfQo+IEBAIC0xNjM1LDE4ICsxMzY2LDE0IEBAIGludCBh bWRncHVfZHBtX2dldF9zbXVfcHJ2X2J1Zl9kZXRhaWxzKHN0cnVjdCBhbWRncHVfZGV2aWNlICph ZGV2LAo+ICAgCQkJCSAgICAgICBzaXplX3QgKnNpemUpCj4gICB7Cj4gICAJY29uc3Qgc3RydWN0 IGFtZF9wbV9mdW5jcyAqcHBfZnVuY3MgPSBhZGV2LT5wb3dlcnBsYXkucHBfZnVuY3M7Cj4gLQlp bnQgcmV0ID0gMDsKPiAgIAo+ICAgCWlmICghcHBfZnVuY3MtPmdldF9zbXVfcHJ2X2J1Zl9kZXRh aWxzKQo+ICAgCQlyZXR1cm4gLUVOT1NZUzsKPiAgIAo+IC0JbXV0ZXhfbG9jaygmYWRldi0+cG0u bXV0ZXgpOwo+IC0JcmV0ID0gcHBfZnVuY3MtPmdldF9zbXVfcHJ2X2J1Zl9kZXRhaWxzKGFkZXYt PnBvd2VycGxheS5wcF9oYW5kbGUsCj4gKwlndWFyZChtdXRleCkoJmFkZXYtPnBtLm11dGV4KTsK PiArCXJldHVybiBwcF9mdW5jcy0+Z2V0X3NtdV9wcnZfYnVmX2RldGFpbHMoYWRldi0+cG93ZXJw bGF5LnBwX2hhbmRsZSwKPiAgIAkJCQkJCWFkZHIsCj4gICAJCQkJCQlzaXplKTsKPiAtCW11dGV4 X3VubG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+IC0KPiAtCXJldHVybiByZXQ7Cj4gICB9Cj4gICAK PiAgIGludCBhbWRncHVfZHBtX2lzX292ZXJkcml2ZV9zdXBwb3J0ZWQoc3RydWN0IGFtZGdwdV9k ZXZpY2UgKmFkZXYpCj4gQEAgLTE2OTgsNyArMTQyNSw2IEBAIGludCBhbWRncHVfZHBtX3NldF9w cF90YWJsZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKPiAgIAkJCSAgICBzaXplX3Qgc2l6 ZSkKPiAgIHsKPiAgIAljb25zdCBzdHJ1Y3QgYW1kX3BtX2Z1bmNzICpwcF9mdW5jcyA9IGFkZXYt PnBvd2VycGxheS5wcF9mdW5jczsKPiAtCWludCByZXQgPSAwOwo+ICAgCj4gICAJaWYgKCFidWYg fHwgIXNpemUpCj4gICAJCXJldHVybiAtRUlOVkFMOwo+IEBAIC0xNzA2LDEzICsxNDMyLDEwIEBA IGludCBhbWRncHVfZHBtX3NldF9wcF90YWJsZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwK PiAgIAlpZiAoYW1kZ3B1X3NyaW92X3ZmKGFkZXYpIHx8ICFwcF9mdW5jcy0+c2V0X3BwX3RhYmxl IHx8IGFkZXYtPnNjcG1fZW5hYmxlZCkKPiAgIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwo+ICAgCj4g LQltdXRleF9sb2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4gLQlyZXQgPSBwcF9mdW5jcy0+c2V0X3Bw X3RhYmxlKGFkZXYtPnBvd2VycGxheS5wcF9oYW5kbGUsCj4gKwlndWFyZChtdXRleCkoJmFkZXYt PnBtLm11dGV4KTsKPiArCXJldHVybiBwcF9mdW5jcy0+c2V0X3BwX3RhYmxlKGFkZXYtPnBvd2Vy cGxheS5wcF9oYW5kbGUsCj4gICAJCQkJICAgICBidWYsCj4gICAJCQkJICAgICBzaXplKTsKPiAt CW11dGV4X3VubG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+IC0KPiAtCXJldHVybiByZXQ7Cj4gICB9 Cj4gICAKPiAgIGludCBhbWRncHVfZHBtX2dldF9udW1fY3B1X2NvcmVzKHN0cnVjdCBhbWRncHVf ZGV2aWNlICphZGV2KQo+IEBAIC0xNzM3LDE3ICsxNDYwLDEzIEBAIGludCBhbWRncHVfZHBtX2Rp c3BsYXlfY29uZmlndXJhdGlvbl9jaGFuZ2Uoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4g ICAJCQkJCSAgICBjb25zdCBzdHJ1Y3QgYW1kX3BwX2Rpc3BsYXlfY29uZmlndXJhdGlvbiAqaW5w dXQpCj4gICB7Cj4gICAJY29uc3Qgc3RydWN0IGFtZF9wbV9mdW5jcyAqcHBfZnVuY3MgPSBhZGV2 LT5wb3dlcnBsYXkucHBfZnVuY3M7Cj4gLQlpbnQgcmV0ID0gMDsKPiAgIAo+ICAgCWlmICghcHBf ZnVuY3MtPmRpc3BsYXlfY29uZmlndXJhdGlvbl9jaGFuZ2UpCj4gICAJCXJldHVybiAwOwo+ICAg Cj4gLQltdXRleF9sb2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4gLQlyZXQgPSBwcF9mdW5jcy0+ZGlz cGxheV9jb25maWd1cmF0aW9uX2NoYW5nZShhZGV2LT5wb3dlcnBsYXkucHBfaGFuZGxlLAo+ICsJ Z3VhcmQobXV0ZXgpKCZhZGV2LT5wbS5tdXRleCk7Cj4gKwlyZXR1cm4gcHBfZnVuY3MtPmRpc3Bs YXlfY29uZmlndXJhdGlvbl9jaGFuZ2UoYWRldi0+cG93ZXJwbGF5LnBwX2hhbmRsZSwKPiAgIAkJ CQkJCSAgICAgaW5wdXQpOwo+IC0JbXV0ZXhfdW5sb2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4gLQo+ IC0JcmV0dXJuIHJldDsKPiAgIH0KPiAgIAo+ICAgaW50IGFtZGdwdV9kcG1fZ2V0X2Nsb2NrX2J5 X3R5cGUoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4gQEAgLTE3NTUsMzUgKzE0NzQsMjcg QEAgaW50IGFtZGdwdV9kcG1fZ2V0X2Nsb2NrX2J5X3R5cGUoc3RydWN0IGFtZGdwdV9kZXZpY2Ug KmFkZXYsCj4gICAJCQkJIHN0cnVjdCBhbWRfcHBfY2xvY2tzICpjbG9ja3MpCj4gICB7Cj4gICAJ Y29uc3Qgc3RydWN0IGFtZF9wbV9mdW5jcyAqcHBfZnVuY3MgPSBhZGV2LT5wb3dlcnBsYXkucHBf ZnVuY3M7Cj4gLQlpbnQgcmV0ID0gMDsKPiAgIAo+ICAgCWlmICghcHBfZnVuY3MtPmdldF9jbG9j a19ieV90eXBlKQo+ICAgCQlyZXR1cm4gMDsKPiAgIAo+IC0JbXV0ZXhfbG9jaygmYWRldi0+cG0u bXV0ZXgpOwo+IC0JcmV0ID0gcHBfZnVuY3MtPmdldF9jbG9ja19ieV90eXBlKGFkZXYtPnBvd2Vy cGxheS5wcF9oYW5kbGUsCj4gKwlndWFyZChtdXRleCkoJmFkZXYtPnBtLm11dGV4KTsKPiArCXJl dHVybiBwcF9mdW5jcy0+Z2V0X2Nsb2NrX2J5X3R5cGUoYWRldi0+cG93ZXJwbGF5LnBwX2hhbmRs ZSwKPiAgIAkJCQkJICB0eXBlLAo+ICAgCQkJCQkgIGNsb2Nrcyk7Cj4gLQltdXRleF91bmxvY2so JmFkZXYtPnBtLm11dGV4KTsKPiAtCj4gLQlyZXR1cm4gcmV0Owo+ICAgfQo+ICAgCj4gICBpbnQg YW1kZ3B1X2RwbV9nZXRfZGlzcGxheV9tb2RlX3ZhbGlkYXRpb25fY2xrcyhzdHJ1Y3QgYW1kZ3B1 X2RldmljZSAqYWRldiwKPiAgIAkJCQkJCXN0cnVjdCBhbWRfcHBfc2ltcGxlX2Nsb2NrX2luZm8g KmNsb2NrcykKPiAgIHsKPiAgIAljb25zdCBzdHJ1Y3QgYW1kX3BtX2Z1bmNzICpwcF9mdW5jcyA9 IGFkZXYtPnBvd2VycGxheS5wcF9mdW5jczsKPiAtCWludCByZXQgPSAwOwo+ICAgCj4gICAJaWYg KCFwcF9mdW5jcy0+Z2V0X2Rpc3BsYXlfbW9kZV92YWxpZGF0aW9uX2Nsb2NrcykKPiAgIAkJcmV0 dXJuIDA7Cj4gICAKPiAtCW11dGV4X2xvY2soJmFkZXYtPnBtLm11dGV4KTsKPiAtCXJldCA9IHBw X2Z1bmNzLT5nZXRfZGlzcGxheV9tb2RlX3ZhbGlkYXRpb25fY2xvY2tzKGFkZXYtPnBvd2VycGxh eS5wcF9oYW5kbGUsCj4gKwlndWFyZChtdXRleCkoJmFkZXYtPnBtLm11dGV4KTsKPiArCXJldHVy biBwcF9mdW5jcy0+Z2V0X2Rpc3BsYXlfbW9kZV92YWxpZGF0aW9uX2Nsb2NrcyhhZGV2LT5wb3dl cnBsYXkucHBfaGFuZGxlLAo+ICAgCQkJCQkJCSAgIGNsb2Nrcyk7Cj4gLQltdXRleF91bmxvY2so JmFkZXYtPnBtLm11dGV4KTsKPiAtCj4gLQlyZXR1cm4gcmV0Owo+ICAgfQo+ICAgCj4gICBpbnQg YW1kZ3B1X2RwbV9nZXRfY2xvY2tfYnlfdHlwZV93aXRoX2xhdGVuY3koc3RydWN0IGFtZGdwdV9k ZXZpY2UgKmFkZXYsCj4gQEAgLTE3OTEsMTggKzE1MDIsMTQgQEAgaW50IGFtZGdwdV9kcG1fZ2V0 X2Nsb2NrX2J5X3R5cGVfd2l0aF9sYXRlbmN5KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAo+ ICAgCQkJCQkgICAgICBzdHJ1Y3QgcHBfY2xvY2tfbGV2ZWxzX3dpdGhfbGF0ZW5jeSAqY2xvY2tz KQo+ICAgewo+ICAgCWNvbnN0IHN0cnVjdCBhbWRfcG1fZnVuY3MgKnBwX2Z1bmNzID0gYWRldi0+ cG93ZXJwbGF5LnBwX2Z1bmNzOwo+IC0JaW50IHJldCA9IDA7Cj4gICAKPiAgIAlpZiAoIXBwX2Z1 bmNzLT5nZXRfY2xvY2tfYnlfdHlwZV93aXRoX2xhdGVuY3kpCj4gICAJCXJldHVybiAwOwo+ICAg Cj4gLQltdXRleF9sb2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4gLQlyZXQgPSBwcF9mdW5jcy0+Z2V0 X2Nsb2NrX2J5X3R5cGVfd2l0aF9sYXRlbmN5KGFkZXYtPnBvd2VycGxheS5wcF9oYW5kbGUsCj4g KwlndWFyZChtdXRleCkoJmFkZXYtPnBtLm11dGV4KTsKPiArCXJldHVybiBwcF9mdW5jcy0+Z2V0 X2Nsb2NrX2J5X3R5cGVfd2l0aF9sYXRlbmN5KGFkZXYtPnBvd2VycGxheS5wcF9oYW5kbGUsCj4g ICAJCQkJCQkgICAgICAgdHlwZSwKPiAgIAkJCQkJCSAgICAgICBjbG9ja3MpOwo+IC0JbXV0ZXhf dW5sb2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4gLQo+IC0JcmV0dXJuIHJldDsKPiAgIH0KPiAgIAo+ ICAgaW50IGFtZGdwdV9kcG1fZ2V0X2Nsb2NrX2J5X3R5cGVfd2l0aF92b2x0YWdlKHN0cnVjdCBh bWRncHVfZGV2aWNlICphZGV2LAo+IEBAIC0xODEwLDY5ICsxNTE3LDUzIEBAIGludCBhbWRncHVf ZHBtX2dldF9jbG9ja19ieV90eXBlX3dpdGhfdm9sdGFnZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAq YWRldiwKPiAgIAkJCQkJICAgICAgc3RydWN0IHBwX2Nsb2NrX2xldmVsc193aXRoX3ZvbHRhZ2Ug KmNsb2NrcykKPiAgIHsKPiAgIAljb25zdCBzdHJ1Y3QgYW1kX3BtX2Z1bmNzICpwcF9mdW5jcyA9 IGFkZXYtPnBvd2VycGxheS5wcF9mdW5jczsKPiAtCWludCByZXQgPSAwOwo+ICAgCj4gICAJaWYg KCFwcF9mdW5jcy0+Z2V0X2Nsb2NrX2J5X3R5cGVfd2l0aF92b2x0YWdlKQo+ICAgCQlyZXR1cm4g MDsKPiAgIAo+IC0JbXV0ZXhfbG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+IC0JcmV0ID0gcHBfZnVu Y3MtPmdldF9jbG9ja19ieV90eXBlX3dpdGhfdm9sdGFnZShhZGV2LT5wb3dlcnBsYXkucHBfaGFu ZGxlLAo+ICsJZ3VhcmQobXV0ZXgpKCZhZGV2LT5wbS5tdXRleCk7Cj4gKwlyZXR1cm4gcHBfZnVu Y3MtPmdldF9jbG9ja19ieV90eXBlX3dpdGhfdm9sdGFnZShhZGV2LT5wb3dlcnBsYXkucHBfaGFu ZGxlLAo+ICAgCQkJCQkJICAgICAgIHR5cGUsCj4gICAJCQkJCQkgICAgICAgY2xvY2tzKTsKPiAt CW11dGV4X3VubG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+IC0KPiAtCXJldHVybiByZXQ7Cj4gICB9 Cj4gICAKPiAgIGludCBhbWRncHVfZHBtX3NldF93YXRlcm1hcmtzX2Zvcl9jbG9ja3NfcmFuZ2Vz KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAo+ICAgCQkJCQkgICAgICAgdm9pZCAqY2xvY2tf cmFuZ2VzKQo+ICAgewo+ICAgCWNvbnN0IHN0cnVjdCBhbWRfcG1fZnVuY3MgKnBwX2Z1bmNzID0g YWRldi0+cG93ZXJwbGF5LnBwX2Z1bmNzOwo+IC0JaW50IHJldCA9IDA7Cj4gICAKPiAgIAlpZiAo IXBwX2Z1bmNzLT5zZXRfd2F0ZXJtYXJrc19mb3JfY2xvY2tzX3JhbmdlcykKPiAgIAkJcmV0dXJu IC1FT1BOT1RTVVBQOwo+ICAgCj4gLQltdXRleF9sb2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4gLQly ZXQgPSBwcF9mdW5jcy0+c2V0X3dhdGVybWFya3NfZm9yX2Nsb2Nrc19yYW5nZXMoYWRldi0+cG93 ZXJwbGF5LnBwX2hhbmRsZSwKPiArCWd1YXJkKG11dGV4KSgmYWRldi0+cG0ubXV0ZXgpOwo+ICsJ cmV0dXJuIHBwX2Z1bmNzLT5zZXRfd2F0ZXJtYXJrc19mb3JfY2xvY2tzX3JhbmdlcyhhZGV2LT5w b3dlcnBsYXkucHBfaGFuZGxlLAo+ICAgCQkJCQkJCSBjbG9ja19yYW5nZXMpOwo+IC0JbXV0ZXhf dW5sb2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4gLQo+IC0JcmV0dXJuIHJldDsKPiAgIH0KPiAgIAo+ ICAgaW50IGFtZGdwdV9kcG1fZGlzcGxheV9jbG9ja192b2x0YWdlX3JlcXVlc3Qoc3RydWN0IGFt ZGdwdV9kZXZpY2UgKmFkZXYsCj4gICAJCQkJCSAgICAgc3RydWN0IHBwX2Rpc3BsYXlfY2xvY2tf cmVxdWVzdCAqY2xvY2spCj4gICB7Cj4gICAJY29uc3Qgc3RydWN0IGFtZF9wbV9mdW5jcyAqcHBf ZnVuY3MgPSBhZGV2LT5wb3dlcnBsYXkucHBfZnVuY3M7Cj4gLQlpbnQgcmV0ID0gMDsKPiAgIAo+ ICAgCWlmICghcHBfZnVuY3MtPmRpc3BsYXlfY2xvY2tfdm9sdGFnZV9yZXF1ZXN0KQo+ICAgCQly ZXR1cm4gLUVPUE5PVFNVUFA7Cj4gICAKPiAtCW11dGV4X2xvY2soJmFkZXYtPnBtLm11dGV4KTsK PiAtCXJldCA9IHBwX2Z1bmNzLT5kaXNwbGF5X2Nsb2NrX3ZvbHRhZ2VfcmVxdWVzdChhZGV2LT5w b3dlcnBsYXkucHBfaGFuZGxlLAo+ICsJZ3VhcmQobXV0ZXgpKCZhZGV2LT5wbS5tdXRleCk7Cj4g KwlyZXR1cm4gcHBfZnVuY3MtPmRpc3BsYXlfY2xvY2tfdm9sdGFnZV9yZXF1ZXN0KGFkZXYtPnBv d2VycGxheS5wcF9oYW5kbGUsCj4gICAJCQkJCQkgICAgICBjbG9jayk7Cj4gLQltdXRleF91bmxv Y2soJmFkZXYtPnBtLm11dGV4KTsKPiAtCj4gLQlyZXR1cm4gcmV0Owo+ICAgfQo+ICAgCj4gICBp bnQgYW1kZ3B1X2RwbV9nZXRfY3VycmVudF9jbG9ja3Moc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFk ZXYsCj4gICAJCQkJICBzdHJ1Y3QgYW1kX3BwX2Nsb2NrX2luZm8gKmNsb2NrcykKPiAgIHsKPiAg IAljb25zdCBzdHJ1Y3QgYW1kX3BtX2Z1bmNzICpwcF9mdW5jcyA9IGFkZXYtPnBvd2VycGxheS5w cF9mdW5jczsKPiAtCWludCByZXQgPSAwOwo+ICAgCj4gICAJaWYgKCFwcF9mdW5jcy0+Z2V0X2N1 cnJlbnRfY2xvY2tzKQo+ICAgCQlyZXR1cm4gLUVPUE5PVFNVUFA7Cj4gICAKPiAtCW11dGV4X2xv Y2soJmFkZXYtPnBtLm11dGV4KTsKPiAtCXJldCA9IHBwX2Z1bmNzLT5nZXRfY3VycmVudF9jbG9j a3MoYWRldi0+cG93ZXJwbGF5LnBwX2hhbmRsZSwKPiArCWd1YXJkKG11dGV4KSgmYWRldi0+cG0u bXV0ZXgpOwo+ICsJcmV0dXJuIHBwX2Z1bmNzLT5nZXRfY3VycmVudF9jbG9ja3MoYWRldi0+cG93 ZXJwbGF5LnBwX2hhbmRsZSwKPiAgIAkJCQkJICAgY2xvY2tzKTsKPiAtCW11dGV4X3VubG9jaygm YWRldi0+cG0ubXV0ZXgpOwo+IC0KPiAtCXJldHVybiByZXQ7Cj4gICB9Cj4gICAKPiAgIHZvaWQg YW1kZ3B1X2RwbV9ub3RpZnlfc211X2VuYWJsZV9wd2Uoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFk ZXYpCj4gQEAgLTE4ODIsNDMgKzE1NzMsMzQgQEAgdm9pZCBhbWRncHVfZHBtX25vdGlmeV9zbXVf ZW5hYmxlX3B3ZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKPiAgIAlpZiAoIXBwX2Z1bmNz LT5ub3RpZnlfc211X2VuYWJsZV9wd2UpCj4gICAJCXJldHVybjsKPiAgIAo+IC0JbXV0ZXhfbG9j aygmYWRldi0+cG0ubXV0ZXgpOwo+ICsJZ3VhcmQobXV0ZXgpKCZhZGV2LT5wbS5tdXRleCk7Cj4g ICAJcHBfZnVuY3MtPm5vdGlmeV9zbXVfZW5hYmxlX3B3ZShhZGV2LT5wb3dlcnBsYXkucHBfaGFu ZGxlKTsKPiAtCW11dGV4X3VubG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+ICAgfQo+ICAgCj4gICBp bnQgYW1kZ3B1X2RwbV9zZXRfYWN0aXZlX2Rpc3BsYXlfY291bnQoc3RydWN0IGFtZGdwdV9kZXZp Y2UgKmFkZXYsCj4gICAJCQkJCXVpbnQzMl90IGNvdW50KQo+ICAgewo+ICAgCWNvbnN0IHN0cnVj dCBhbWRfcG1fZnVuY3MgKnBwX2Z1bmNzID0gYWRldi0+cG93ZXJwbGF5LnBwX2Z1bmNzOwo+IC0J aW50IHJldCA9IDA7Cj4gICAKPiAgIAlpZiAoIXBwX2Z1bmNzLT5zZXRfYWN0aXZlX2Rpc3BsYXlf Y291bnQpCj4gICAJCXJldHVybiAtRU9QTk9UU1VQUDsKPiAgIAo+IC0JbXV0ZXhfbG9jaygmYWRl di0+cG0ubXV0ZXgpOwo+IC0JcmV0ID0gcHBfZnVuY3MtPnNldF9hY3RpdmVfZGlzcGxheV9jb3Vu dChhZGV2LT5wb3dlcnBsYXkucHBfaGFuZGxlLAo+ICsJZ3VhcmQobXV0ZXgpKCZhZGV2LT5wbS5t dXRleCk7Cj4gKwlyZXR1cm4gcHBfZnVuY3MtPnNldF9hY3RpdmVfZGlzcGxheV9jb3VudChhZGV2 LT5wb3dlcnBsYXkucHBfaGFuZGxlLAo+ICAgCQkJCQkJIGNvdW50KTsKPiAtCW11dGV4X3VubG9j aygmYWRldi0+cG0ubXV0ZXgpOwo+IC0KPiAtCXJldHVybiByZXQ7Cj4gICB9Cj4gICAKPiAgIGlu dCBhbWRncHVfZHBtX3NldF9taW5fZGVlcF9zbGVlcF9kY2VmY2xrKHN0cnVjdCBhbWRncHVfZGV2 aWNlICphZGV2LAo+ICAgCQkJCQkgIHVpbnQzMl90IGNsb2NrKQo+ICAgewo+ICAgCWNvbnN0IHN0 cnVjdCBhbWRfcG1fZnVuY3MgKnBwX2Z1bmNzID0gYWRldi0+cG93ZXJwbGF5LnBwX2Z1bmNzOwo+ IC0JaW50IHJldCA9IDA7Cj4gICAKPiAgIAlpZiAoIXBwX2Z1bmNzLT5zZXRfbWluX2RlZXBfc2xl ZXBfZGNlZmNsaykKPiAgIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwo+ICAgCj4gLQltdXRleF9sb2Nr KCZhZGV2LT5wbS5tdXRleCk7Cj4gLQlyZXQgPSBwcF9mdW5jcy0+c2V0X21pbl9kZWVwX3NsZWVw X2RjZWZjbGsoYWRldi0+cG93ZXJwbGF5LnBwX2hhbmRsZSwKPiArCWd1YXJkKG11dGV4KSgmYWRl di0+cG0ubXV0ZXgpOwo+ICsJcmV0dXJuIHBwX2Z1bmNzLT5zZXRfbWluX2RlZXBfc2xlZXBfZGNl ZmNsayhhZGV2LT5wb3dlcnBsYXkucHBfaGFuZGxlLAo+ICAgCQkJCQkJICAgY2xvY2spOwo+IC0J bXV0ZXhfdW5sb2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4gLQo+IC0JcmV0dXJuIHJldDsKPiAgIH0K PiAgIAo+ICAgdm9pZCBhbWRncHVfZHBtX3NldF9oYXJkX21pbl9kY2VmY2xrX2J5X2ZyZXEoc3Ry dWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4gQEAgLTE5MjksMTAgKzE2MTEsOSBAQCB2b2lkIGFt ZGdwdV9kcG1fc2V0X2hhcmRfbWluX2RjZWZjbGtfYnlfZnJlcShzdHJ1Y3QgYW1kZ3B1X2Rldmlj ZSAqYWRldiwKPiAgIAlpZiAoIXBwX2Z1bmNzLT5zZXRfaGFyZF9taW5fZGNlZmNsa19ieV9mcmVx KQo+ICAgCQlyZXR1cm47Cj4gICAKPiAtCW11dGV4X2xvY2soJmFkZXYtPnBtLm11dGV4KTsKPiAr CWd1YXJkKG11dGV4KSgmYWRldi0+cG0ubXV0ZXgpOwo+ICAgCXBwX2Z1bmNzLT5zZXRfaGFyZF9t aW5fZGNlZmNsa19ieV9mcmVxKGFkZXYtPnBvd2VycGxheS5wcF9oYW5kbGUsCj4gICAJCQkJCSAg ICAgICBjbG9jayk7Cj4gLQltdXRleF91bmxvY2soJmFkZXYtPnBtLm11dGV4KTsKPiAgIH0KPiAg IAo+ICAgdm9pZCBhbWRncHVfZHBtX3NldF9oYXJkX21pbl9mY2xrX2J5X2ZyZXEoc3RydWN0IGFt ZGdwdV9kZXZpY2UgKmFkZXYsCj4gQEAgLTE5NDMsNDQgKzE2MjQsMzUgQEAgdm9pZCBhbWRncHVf ZHBtX3NldF9oYXJkX21pbl9mY2xrX2J5X2ZyZXEoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYs Cj4gICAJaWYgKCFwcF9mdW5jcy0+c2V0X2hhcmRfbWluX2ZjbGtfYnlfZnJlcSkKPiAgIAkJcmV0 dXJuOwo+ICAgCj4gLQltdXRleF9sb2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4gKwlndWFyZChtdXRl eCkoJmFkZXYtPnBtLm11dGV4KTsKPiAgIAlwcF9mdW5jcy0+c2V0X2hhcmRfbWluX2ZjbGtfYnlf ZnJlcShhZGV2LT5wb3dlcnBsYXkucHBfaGFuZGxlLAo+ICAgCQkJCQkgICAgY2xvY2spOwo+IC0J bXV0ZXhfdW5sb2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4gICB9Cj4gICAKPiAgIGludCBhbWRncHVf ZHBtX2Rpc3BsYXlfZGlzYWJsZV9tZW1vcnlfY2xvY2tfc3dpdGNoKHN0cnVjdCBhbWRncHVfZGV2 aWNlICphZGV2LAo+ICAgCQkJCQkJICAgYm9vbCBkaXNhYmxlX21lbW9yeV9jbG9ja19zd2l0Y2gp Cj4gICB7Cj4gICAJY29uc3Qgc3RydWN0IGFtZF9wbV9mdW5jcyAqcHBfZnVuY3MgPSBhZGV2LT5w b3dlcnBsYXkucHBfZnVuY3M7Cj4gLQlpbnQgcmV0ID0gMDsKPiAgIAo+ICAgCWlmICghcHBfZnVu Y3MtPmRpc3BsYXlfZGlzYWJsZV9tZW1vcnlfY2xvY2tfc3dpdGNoKQo+ICAgCQlyZXR1cm4gMDsK PiAgIAo+IC0JbXV0ZXhfbG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+IC0JcmV0ID0gcHBfZnVuY3Mt PmRpc3BsYXlfZGlzYWJsZV9tZW1vcnlfY2xvY2tfc3dpdGNoKGFkZXYtPnBvd2VycGxheS5wcF9o YW5kbGUsCj4gKwlndWFyZChtdXRleCkoJmFkZXYtPnBtLm11dGV4KTsKPiArCXJldHVybiBwcF9m dW5jcy0+ZGlzcGxheV9kaXNhYmxlX21lbW9yeV9jbG9ja19zd2l0Y2goYWRldi0+cG93ZXJwbGF5 LnBwX2hhbmRsZSwKPiAgIAkJCQkJCQkgICAgZGlzYWJsZV9tZW1vcnlfY2xvY2tfc3dpdGNoKTsK PiAtCW11dGV4X3VubG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+IC0KPiAtCXJldHVybiByZXQ7Cj4g ICB9Cj4gICAKPiAgIGludCBhbWRncHVfZHBtX2dldF9tYXhfc3VzdGFpbmFibGVfY2xvY2tzX2J5 X2RjKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAo+ICAgCQkJCQkJc3RydWN0IHBwX3NtdV9u dl9jbG9ja190YWJsZSAqbWF4X2Nsb2NrcykKPiAgIHsKPiAgIAljb25zdCBzdHJ1Y3QgYW1kX3Bt X2Z1bmNzICpwcF9mdW5jcyA9IGFkZXYtPnBvd2VycGxheS5wcF9mdW5jczsKPiAtCWludCByZXQg PSAwOwo+ICAgCj4gICAJaWYgKCFwcF9mdW5jcy0+Z2V0X21heF9zdXN0YWluYWJsZV9jbG9ja3Nf YnlfZGMpCj4gICAJCXJldHVybiAtRU9QTk9UU1VQUDsKPiAgIAo+IC0JbXV0ZXhfbG9jaygmYWRl di0+cG0ubXV0ZXgpOwo+IC0JcmV0ID0gcHBfZnVuY3MtPmdldF9tYXhfc3VzdGFpbmFibGVfY2xv Y2tzX2J5X2RjKGFkZXYtPnBvd2VycGxheS5wcF9oYW5kbGUsCj4gKwlndWFyZChtdXRleCkoJmFk ZXYtPnBtLm11dGV4KTsKPiArCXJldHVybiBwcF9mdW5jcy0+Z2V0X21heF9zdXN0YWluYWJsZV9j bG9ja3NfYnlfZGMoYWRldi0+cG93ZXJwbGF5LnBwX2hhbmRsZSwKPiAgIAkJCQkJCQkgbWF4X2Ns b2Nrcyk7Cj4gLQltdXRleF91bmxvY2soJmFkZXYtPnBtLm11dGV4KTsKPiAtCj4gLQlyZXR1cm4g cmV0Owo+ICAgfQo+ICAgCj4gICBlbnVtIHBwX3NtdV9zdGF0dXMgYW1kZ3B1X2RwbV9nZXRfdWNs a19kcG1fc3RhdGVzKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAo+IEBAIC0xOTg4LDM1ICsx NjYwLDI3IEBAIGVudW0gcHBfc211X3N0YXR1cyBhbWRncHVfZHBtX2dldF91Y2xrX2RwbV9zdGF0 ZXMoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4gICAJCQkJCQkgIHVuc2lnbmVkIGludCAq bnVtX3N0YXRlcykKPiAgIHsKPiAgIAljb25zdCBzdHJ1Y3QgYW1kX3BtX2Z1bmNzICpwcF9mdW5j cyA9IGFkZXYtPnBvd2VycGxheS5wcF9mdW5jczsKPiAtCWludCByZXQgPSAwOwo+ICAgCj4gICAJ aWYgKCFwcF9mdW5jcy0+Z2V0X3VjbGtfZHBtX3N0YXRlcykKPiAgIAkJcmV0dXJuIC1FT1BOT1RT VVBQOwo+ICAgCj4gLQltdXRleF9sb2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4gLQlyZXQgPSBwcF9m dW5jcy0+Z2V0X3VjbGtfZHBtX3N0YXRlcyhhZGV2LT5wb3dlcnBsYXkucHBfaGFuZGxlLAo+ICsJ Z3VhcmQobXV0ZXgpKCZhZGV2LT5wbS5tdXRleCk7Cj4gKwlyZXR1cm4gcHBfZnVuY3MtPmdldF91 Y2xrX2RwbV9zdGF0ZXMoYWRldi0+cG93ZXJwbGF5LnBwX2hhbmRsZSwKPiAgIAkJCQkJICAgIGNs b2NrX3ZhbHVlc19pbl9raHosCj4gICAJCQkJCSAgICBudW1fc3RhdGVzKTsKPiAtCW11dGV4X3Vu bG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+IC0KPiAtCXJldHVybiByZXQ7Cj4gICB9Cj4gICAKPiAg IGludCBhbWRncHVfZHBtX2dldF9kcG1fY2xvY2tfdGFibGUoc3RydWN0IGFtZGdwdV9kZXZpY2Ug KmFkZXYsCj4gICAJCQkJICAgc3RydWN0IGRwbV9jbG9ja3MgKmNsb2NrX3RhYmxlKQo+ICAgewo+ ICAgCWNvbnN0IHN0cnVjdCBhbWRfcG1fZnVuY3MgKnBwX2Z1bmNzID0gYWRldi0+cG93ZXJwbGF5 LnBwX2Z1bmNzOwo+IC0JaW50IHJldCA9IDA7Cj4gICAKPiAgIAlpZiAoIXBwX2Z1bmNzLT5nZXRf ZHBtX2Nsb2NrX3RhYmxlKQo+ICAgCQlyZXR1cm4gLUVPUE5PVFNVUFA7Cj4gICAKPiAtCW11dGV4 X2xvY2soJmFkZXYtPnBtLm11dGV4KTsKPiAtCXJldCA9IHBwX2Z1bmNzLT5nZXRfZHBtX2Nsb2Nr X3RhYmxlKGFkZXYtPnBvd2VycGxheS5wcF9oYW5kbGUsCj4gKwlndWFyZChtdXRleCkoJmFkZXYt PnBtLm11dGV4KTsKPiArCXJldHVybiBwcF9mdW5jcy0+Z2V0X2RwbV9jbG9ja190YWJsZShhZGV2 LT5wb3dlcnBsYXkucHBfaGFuZGxlLAo+ICAgCQkJCQkgICAgY2xvY2tfdGFibGUpOwo+IC0JbXV0 ZXhfdW5sb2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4gLQo+IC0JcmV0dXJuIHJldDsKPiAgIH0KPiAg IAo+ICAgLyoqCj4gQEAgLTIwMzcsMTcgKzE3MDEsMTMgQEAgc3NpemVfdCBhbWRncHVfZHBtX2dl dF90ZW1wX21ldHJpY3Moc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4gICAJCQkJICAgIGVu dW0gc211X3RlbXBfbWV0cmljX3R5cGUgdHlwZSwgdm9pZCAqdGFibGUpCj4gICB7Cj4gICAJY29u c3Qgc3RydWN0IGFtZF9wbV9mdW5jcyAqcHBfZnVuY3MgPSBhZGV2LT5wb3dlcnBsYXkucHBfZnVu Y3M7Cj4gLQlpbnQgcmV0Owo+ICAgCj4gICAJaWYgKCFwcF9mdW5jcy0+Z2V0X3RlbXBfbWV0cmlj cyB8fAo+ICAgCSAgICAhYW1kZ3B1X2RwbV9pc190ZW1wX21ldHJpY3Nfc3VwcG9ydGVkKGFkZXYs IHR5cGUpKQo+ICAgCQlyZXR1cm4gLUVPUE5PVFNVUFA7Cj4gICAKPiAtCW11dGV4X2xvY2soJmFk ZXYtPnBtLm11dGV4KTsKPiAtCXJldCA9IHBwX2Z1bmNzLT5nZXRfdGVtcF9tZXRyaWNzKGFkZXYt PnBvd2VycGxheS5wcF9oYW5kbGUsIHR5cGUsIHRhYmxlKTsKPiAtCW11dGV4X3VubG9jaygmYWRl di0+cG0ubXV0ZXgpOwo+IC0KPiAtCXJldHVybiByZXQ7Cj4gKwlndWFyZChtdXRleCkoJmFkZXYt PnBtLm11dGV4KTsKPiArCXJldHVybiBwcF9mdW5jcy0+Z2V0X3RlbXBfbWV0cmljcyhhZGV2LT5w b3dlcnBsYXkucHBfaGFuZGxlLCB0eXBlLCB0YWJsZSk7Cj4gICB9Cj4gICAKPiAgIC8qKgo+IEBA IC0yMDY0LDE5ICsxNzI0LDE1IEBAIGJvb2wgYW1kZ3B1X2RwbV9pc190ZW1wX21ldHJpY3Nfc3Vw cG9ydGVkKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAo+ICAgCQkJCQkgIGVudW0gc211X3Rl bXBfbWV0cmljX3R5cGUgdHlwZSkKPiAgIHsKPiAgIAljb25zdCBzdHJ1Y3QgYW1kX3BtX2Z1bmNz ICpwcF9mdW5jcyA9IGFkZXYtPnBvd2VycGxheS5wcF9mdW5jczsKPiAtCWJvb2wgc3VwcG9ydF90 ZW1wX21ldHJpY3MgPSBmYWxzZTsKPiAgIAo+ICAgCWlmICghcHBfZnVuY3MtPnRlbXBfbWV0cmlj c19pc19zdXBwb3J0ZWQpCj4gLQkJcmV0dXJuIHN1cHBvcnRfdGVtcF9tZXRyaWNzOwo+ICsJCXJl dHVybiBmYWxzZTsKPiAgIAo+IC0JaWYgKGlzX3N1cHBvcnRfc3dfc211KGFkZXYpKSB7Cj4gLQkJ bXV0ZXhfbG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+IC0JCXN1cHBvcnRfdGVtcF9tZXRyaWNzID0K PiAtCQkJcHBfZnVuY3MtPnRlbXBfbWV0cmljc19pc19zdXBwb3J0ZWQoYWRldi0+cG93ZXJwbGF5 LnBwX2hhbmRsZSwgdHlwZSk7Cj4gLQkJbXV0ZXhfdW5sb2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4g LQl9Cj4gKwlpZiAoIWlzX3N1cHBvcnRfc3dfc211KGFkZXYpKQo+ICsJCXJldHVybiBmYWxzZTsK PiAgIAo+IC0JcmV0dXJuIHN1cHBvcnRfdGVtcF9tZXRyaWNzOwo+ICsJZ3VhcmQobXV0ZXgpKCZh ZGV2LT5wbS5tdXRleCk7Cj4gKwlyZXR1cm4gcHBfZnVuY3MtPnRlbXBfbWV0cmljc19pc19zdXBw b3J0ZWQoYWRldi0+cG93ZXJwbGF5LnBwX2hhbmRsZSwgdHlwZSk7Cj4gICB9Cj4gICAKPiAgIC8q Kgo+IEBAIC0yMDk4LDE3ICsxNzU0LDEzIEBAIHNzaXplX3QgYW1kZ3B1X2RwbV9nZXRfeGNwX21l dHJpY3Moc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsIGludCB4Y3BfaWQsCj4gICAJCQkJICAg dm9pZCAqdGFibGUpCj4gICB7Cj4gICAJY29uc3Qgc3RydWN0IGFtZF9wbV9mdW5jcyAqcHBfZnVu Y3MgPSBhZGV2LT5wb3dlcnBsYXkucHBfZnVuY3M7Cj4gLQlpbnQgcmV0ID0gMDsKPiAgIAo+ICAg CWlmICghcHBfZnVuY3MtPmdldF94Y3BfbWV0cmljcykKPiAgIAkJcmV0dXJuIDA7Cj4gICAKPiAt CW11dGV4X2xvY2soJmFkZXYtPnBtLm11dGV4KTsKPiAtCXJldCA9IHBwX2Z1bmNzLT5nZXRfeGNw X21ldHJpY3MoYWRldi0+cG93ZXJwbGF5LnBwX2hhbmRsZSwgeGNwX2lkLAo+ICsJZ3VhcmQobXV0 ZXgpKCZhZGV2LT5wbS5tdXRleCk7Cj4gKwlyZXR1cm4gcHBfZnVuY3MtPmdldF94Y3BfbWV0cmlj cyhhZGV2LT5wb3dlcnBsYXkucHBfaGFuZGxlLCB4Y3BfaWQsCj4gICAJCQkJCXRhYmxlKTsKPiAt CW11dGV4X3VubG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+IC0KPiAtCXJldHVybiByZXQ7Cj4gICB9 Cj4gICAKPiAgIGNvbnN0IHN0cnVjdCByYXNfc211X2RydiAqYW1kZ3B1X2RwbV9nZXRfcmFzX3Nt dV9kcml2ZXIoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCgo=